@capgo/camera-preview 3.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CapgoCameraPreview.podspec +14 -0
- package/LICENSE +21 -0
- package/README.md +431 -0
- package/android/.project +17 -0
- package/android/build.gradle +55 -0
- package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +6 -0
- package/android/gradle.properties +18 -0
- package/android/gradlew +160 -0
- package/android/gradlew.bat +90 -0
- package/android/proguard-rules.pro +21 -0
- package/android/settings.gradle +2 -0
- package/android/src/androidTest/java/com/getcapacitor/android/ExampleInstrumentedTest.java +26 -0
- package/android/src/main/AndroidManifest.xml +5 -0
- package/android/src/main/java/com/ahm/capacitor/camera/preview/CameraActivity.java +967 -0
- package/android/src/main/java/com/ahm/capacitor/camera/preview/CameraPreview.java +507 -0
- package/android/src/main/java/com/ahm/capacitor/camera/preview/CustomSurfaceView.java +23 -0
- package/android/src/main/java/com/ahm/capacitor/camera/preview/CustomTextureView.java +29 -0
- package/android/src/main/java/com/ahm/capacitor/camera/preview/Preview.java +386 -0
- package/android/src/main/java/com/ahm/capacitor/camera/preview/TapGestureDetector.java +24 -0
- package/android/src/main/res/layout/bridge_layout_main.xml +15 -0
- package/android/src/main/res/layout/camera_activity.xml +68 -0
- package/android/src/main/res/values/camera_ids.xml +4 -0
- package/android/src/main/res/values/camera_theme.xml +9 -0
- package/android/src/main/res/values/colors.xml +3 -0
- package/android/src/main/res/values/strings.xml +3 -0
- package/android/src/main/res/values/styles.xml +3 -0
- package/android/src/test/java/com/getcapacitor/ExampleUnitTest.java +18 -0
- package/dist/esm/definitions.d.ts +74 -0
- package/dist/esm/definitions.js +2 -0
- package/dist/esm/definitions.js.map +1 -0
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/web.d.ts +24 -0
- package/dist/esm/web.js +135 -0
- package/dist/esm/web.js.map +1 -0
- package/ios/Plugin/CameraController.swift +647 -0
- package/ios/Plugin/Info.plist +24 -0
- package/ios/Plugin/Plugin.h +10 -0
- package/ios/Plugin/Plugin.m +16 -0
- package/ios/Plugin/Plugin.swift +291 -0
- package/ios/Plugin.xcodeproj/project.pbxproj +595 -0
- package/ios/Plugin.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/ios/Plugin.xcworkspace/contents.xcworkspacedata +10 -0
- package/ios/Plugin.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/ios/PluginTests/Info.plist +22 -0
- package/ios/PluginTests/PluginTests.swift +35 -0
- package/ios/Podfile +13 -0
- package/ios/Podfile.lock +23 -0
- package/package.json +76 -0
package/dist/esm/web.js
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { WebPlugin } from '@capacitor/core';
|
|
2
|
+
export class CameraPreviewWeb extends WebPlugin {
|
|
3
|
+
constructor() {
|
|
4
|
+
super({
|
|
5
|
+
name: 'CameraPreview',
|
|
6
|
+
platforms: ['web'],
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
async start(options) {
|
|
10
|
+
return new Promise(async (resolve, reject) => {
|
|
11
|
+
await navigator.mediaDevices
|
|
12
|
+
.getUserMedia({
|
|
13
|
+
audio: !options.disableAudio,
|
|
14
|
+
video: true
|
|
15
|
+
})
|
|
16
|
+
.then((stream) => {
|
|
17
|
+
// Stop any existing stream so we can request media with different constraints based on user input
|
|
18
|
+
stream.getTracks().forEach((track) => track.stop());
|
|
19
|
+
})
|
|
20
|
+
.catch((error) => {
|
|
21
|
+
reject(error);
|
|
22
|
+
});
|
|
23
|
+
const video = document.getElementById('video');
|
|
24
|
+
const parent = document.getElementById(options.parent);
|
|
25
|
+
if (!video) {
|
|
26
|
+
const videoElement = document.createElement('video');
|
|
27
|
+
videoElement.id = 'video';
|
|
28
|
+
videoElement.setAttribute('class', options.className || '');
|
|
29
|
+
// Don't flip video feed if camera is rear facing
|
|
30
|
+
if (options.position !== 'rear') {
|
|
31
|
+
videoElement.setAttribute('style', '-webkit-transform: scaleX(-1); transform: scaleX(-1);');
|
|
32
|
+
}
|
|
33
|
+
const userAgent = navigator.userAgent.toLowerCase();
|
|
34
|
+
const isSafari = userAgent.includes('safari') && !userAgent.includes('chrome');
|
|
35
|
+
// Safari on iOS needs to have the autoplay, muted and playsinline attributes set for video.play() to be successful
|
|
36
|
+
// Without these attributes videoElement.play() will throw a NotAllowedError
|
|
37
|
+
// https://developer.apple.com/documentation/webkit/delivering_video_content_for_safari
|
|
38
|
+
if (isSafari) {
|
|
39
|
+
videoElement.setAttribute('autoplay', 'true');
|
|
40
|
+
videoElement.setAttribute('muted', 'true');
|
|
41
|
+
videoElement.setAttribute('playsinline', 'true');
|
|
42
|
+
}
|
|
43
|
+
parent.appendChild(videoElement);
|
|
44
|
+
if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
|
|
45
|
+
const constraints = {
|
|
46
|
+
video: {
|
|
47
|
+
width: { ideal: options.width },
|
|
48
|
+
height: { ideal: options.height }
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
if (options.position === 'rear') {
|
|
52
|
+
constraints.video.facingMode = 'environment';
|
|
53
|
+
this.isBackCamera = true;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
this.isBackCamera = false;
|
|
57
|
+
}
|
|
58
|
+
navigator.mediaDevices.getUserMedia(constraints).then(function (stream) {
|
|
59
|
+
//video.src = window.URL.createObjectURL(stream);
|
|
60
|
+
videoElement.srcObject = stream;
|
|
61
|
+
videoElement.play();
|
|
62
|
+
resolve({});
|
|
63
|
+
}, (err) => {
|
|
64
|
+
reject(err);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
reject({ message: 'camera already started' });
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
async stop() {
|
|
74
|
+
const video = document.getElementById('video');
|
|
75
|
+
if (video) {
|
|
76
|
+
video.pause();
|
|
77
|
+
const st = video.srcObject;
|
|
78
|
+
const tracks = st.getTracks();
|
|
79
|
+
for (var i = 0; i < tracks.length; i++) {
|
|
80
|
+
var track = tracks[i];
|
|
81
|
+
track.stop();
|
|
82
|
+
}
|
|
83
|
+
video.remove();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
async capture(options) {
|
|
87
|
+
return new Promise((resolve, _) => {
|
|
88
|
+
const video = document.getElementById('video');
|
|
89
|
+
const canvas = document.createElement('canvas');
|
|
90
|
+
// video.width = video.offsetWidth;
|
|
91
|
+
const context = canvas.getContext('2d');
|
|
92
|
+
canvas.width = video.videoWidth;
|
|
93
|
+
canvas.height = video.videoHeight;
|
|
94
|
+
// flip horizontally back camera isn't used
|
|
95
|
+
if (!this.isBackCamera) {
|
|
96
|
+
context.translate(video.videoWidth, 0);
|
|
97
|
+
context.scale(-1, 1);
|
|
98
|
+
}
|
|
99
|
+
context.drawImage(video, 0, 0, video.videoWidth, video.videoHeight);
|
|
100
|
+
let base64EncodedImage;
|
|
101
|
+
if (options.quality != undefined) {
|
|
102
|
+
base64EncodedImage = canvas.toDataURL('image/jpeg', options.quality / 100.0).replace('data:image/jpeg;base64,', '');
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
base64EncodedImage = canvas.toDataURL('image/png').replace('data:image/png;base64,', '');
|
|
106
|
+
}
|
|
107
|
+
resolve({
|
|
108
|
+
value: base64EncodedImage,
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
async captureSample(_options) {
|
|
113
|
+
return this.capture(_options);
|
|
114
|
+
}
|
|
115
|
+
async getSupportedFlashModes() {
|
|
116
|
+
throw new Error('getSupportedFlashModes not supported under the web platform');
|
|
117
|
+
}
|
|
118
|
+
async setFlashMode(_options) {
|
|
119
|
+
throw new Error('setFlashMode not supported under the web platform');
|
|
120
|
+
}
|
|
121
|
+
async flip() {
|
|
122
|
+
throw new Error('flip not supported under the web platform');
|
|
123
|
+
}
|
|
124
|
+
async setOpacity(_options) {
|
|
125
|
+
const video = document.getElementById('video');
|
|
126
|
+
if (!!video && !!_options['opacity']) {
|
|
127
|
+
video.style.setProperty('opacity', _options['opacity'].toString());
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
const CameraPreview = new CameraPreviewWeb();
|
|
132
|
+
export { CameraPreview };
|
|
133
|
+
import { registerWebPlugin } from '@capacitor/core';
|
|
134
|
+
registerWebPlugin(CameraPreview);
|
|
135
|
+
//# sourceMappingURL=web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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"}
|