capacitor-plugin-camera-forked 2.0.12 → 3.0.9
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/README.md +4 -2
- package/dist/docs.json +2 -2
- package/dist/plugin.cjs.js +1 -7
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +1 -7
- package/dist/plugin.js.map +1 -1
- package/ios/Plugin/CameraPreviewPlugin.swift +275 -31
- package/package.json +15 -15
package/README.md
CHANGED
|
@@ -16,6 +16,8 @@ For Capacitor 5, use versions 1.x.
|
|
|
16
16
|
|
|
17
17
|
For Capacitor 6, use versions 2.x.
|
|
18
18
|
|
|
19
|
+
For Capacitor 7, use versions 3.x.
|
|
20
|
+
|
|
19
21
|
## Install
|
|
20
22
|
|
|
21
23
|
```bash
|
|
@@ -114,8 +116,8 @@ document.documentElement.style.setProperty('--ion-background-color', 'transparen
|
|
|
114
116
|
* [`requestCameraPermission()`](#requestcamerapermission)
|
|
115
117
|
* [`requestMicroPhonePermission()`](#requestmicrophonepermission)
|
|
116
118
|
* [`isOpen()`](#isopen)
|
|
117
|
-
* [`addListener('onPlayed', ...)`](#addlisteneronplayed)
|
|
118
|
-
* [`addListener('onOrientationChanged', ...)`](#addlisteneronorientationchanged)
|
|
119
|
+
* [`addListener('onPlayed', ...)`](#addlisteneronplayed-)
|
|
120
|
+
* [`addListener('onOrientationChanged', ...)`](#addlisteneronorientationchanged-)
|
|
119
121
|
* [`removeAllListeners()`](#removealllisteners)
|
|
120
122
|
* [Interfaces](#interfaces)
|
|
121
123
|
* [Type Aliases](#type-aliases)
|
package/dist/docs.json
CHANGED
|
@@ -365,7 +365,7 @@
|
|
|
365
365
|
"PluginListenerHandle",
|
|
366
366
|
"onPlayedListener"
|
|
367
367
|
],
|
|
368
|
-
"slug": "addlisteneronplayed"
|
|
368
|
+
"slug": "addlisteneronplayed-"
|
|
369
369
|
},
|
|
370
370
|
{
|
|
371
371
|
"name": "addListener",
|
|
@@ -389,7 +389,7 @@
|
|
|
389
389
|
"PluginListenerHandle",
|
|
390
390
|
"onOrientationChangedListener"
|
|
391
391
|
],
|
|
392
|
-
"slug": "addlisteneronorientationchanged"
|
|
392
|
+
"slug": "addlisteneronorientationchanged-"
|
|
393
393
|
},
|
|
394
394
|
{
|
|
395
395
|
"name": "removeAllListeners",
|
package/dist/plugin.cjs.js
CHANGED
|
@@ -1,15 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
3
|
var core = require('@capacitor/core');
|
|
6
4
|
var dynamsoftCameraEnhancer = require('dynamsoft-camera-enhancer');
|
|
7
5
|
var RecordRTC = require('recordrtc');
|
|
8
6
|
|
|
9
|
-
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
10
|
-
|
|
11
|
-
var RecordRTC__default = /*#__PURE__*/_interopDefaultLegacy(RecordRTC);
|
|
12
|
-
|
|
13
7
|
exports.EnumResolution = void 0;
|
|
14
8
|
(function (EnumResolution) {
|
|
15
9
|
EnumResolution[EnumResolution["RESOLUTION_AUTO"] = 0] = "RESOLUTION_AUTO";
|
|
@@ -399,7 +393,7 @@ class CameraPreviewWeb extends core.WebPlugin {
|
|
|
399
393
|
await this.camera.updateVideoSettings(settings);
|
|
400
394
|
}
|
|
401
395
|
let video = this.camera.getUIElement().getElementsByTagName("video")[0];
|
|
402
|
-
this.recorder = new
|
|
396
|
+
this.recorder = new RecordRTC(video.srcObject, {
|
|
403
397
|
type: 'video'
|
|
404
398
|
});
|
|
405
399
|
this.recorder.startRecording();
|
package/dist/plugin.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.cjs.js","sources":["esm/definitions.js","esm/index.js","esm/web.js"],"sourcesContent":["export var EnumResolution;\n(function (EnumResolution) {\n EnumResolution[EnumResolution[\"RESOLUTION_AUTO\"] = 0] = \"RESOLUTION_AUTO\";\n EnumResolution[EnumResolution[\"RESOLUTION_480P\"] = 1] = \"RESOLUTION_480P\";\n EnumResolution[EnumResolution[\"RESOLUTION_720P\"] = 2] = \"RESOLUTION_720P\";\n EnumResolution[EnumResolution[\"RESOLUTION_1080P\"] = 3] = \"RESOLUTION_1080P\";\n EnumResolution[EnumResolution[\"RESOLUTION_2K\"] = 4] = \"RESOLUTION_2K\";\n EnumResolution[EnumResolution[\"RESOLUTION_4K\"] = 5] = \"RESOLUTION_4K\";\n})(EnumResolution || (EnumResolution = {}));\n//# sourceMappingURL=definitions.js.map","import { registerPlugin } from '@capacitor/core';\nconst CameraPreview = registerPlugin('CameraPreview', {\n web: () => import('./web').then(m => new m.CameraPreviewWeb()),\n});\nexport * from './definitions';\nexport { CameraPreview };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nimport { CameraEnhancer } from 'dynamsoft-camera-enhancer';\nimport { EnumResolution } from './definitions';\nimport RecordRTC from 'recordrtc';\nCameraEnhancer.defaultUIElementURL = \"https://cdn.jsdelivr.net/npm/dynamsoft-camera-enhancer@3.3.9/dist/dce.ui.html\";\nexport class CameraPreviewWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.hasMicrophone = false;\n }\n async setDefaultUIElementURL(url) {\n CameraEnhancer.defaultUIElementURL = url;\n }\n async setElement(ele) {\n this.container = ele;\n }\n saveFrame() {\n throw new Error('Method not implemented.');\n }\n async getOrientation() {\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n if (portrait.matches) {\n return { orientation: \"PORTRAIT\" };\n }\n else {\n return { orientation: \"LANDSCAPE\" };\n }\n }\n async initialize() {\n this.camera = await CameraEnhancer.createInstance();\n this.camera.on(\"played\", (playCallBackInfo) => {\n this.notifyListeners(\"onPlayed\", { resolution: playCallBackInfo.width + \"x\" + playCallBackInfo.height });\n try {\n let canvas = this.camera.getUIElement().getElementsByClassName(\"dce-video-container\")[0].getElementsByTagName(\"canvas\")[0];\n if (canvas) {\n canvas.remove();\n }\n }\n catch (error) {\n console.log(error);\n }\n });\n if (this.container) {\n await this.camera.setUIElement(this.container);\n }\n else {\n await this.camera.setUIElement(CameraEnhancer.defaultUIElementURL);\n this.camera.getUIElement().getElementsByClassName(\"dce-btn-close\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-camera\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-resolution\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-msg-poweredby\")[0].remove();\n }\n this.camera.setVideoFit(\"cover\");\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n portrait.addEventListener(\"change\", () => {\n this.notifyListeners(\"onOrientationChanged\", null);\n });\n }\n async getResolution() {\n if (this.camera) {\n let rsl = this.camera.getResolution();\n let resolution = rsl[0] + \"x\" + rsl[1];\n return { resolution: resolution };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setResolution(options) {\n if (this.camera) {\n let res = options.resolution;\n let width = 1280;\n let height = 720;\n if (res == EnumResolution.RESOLUTION_480P) {\n width = 640;\n height = 480;\n }\n else if (res == EnumResolution.RESOLUTION_720P) {\n width = 1280;\n height = 720;\n }\n else if (res == EnumResolution.RESOLUTION_1080P) {\n width = 1920;\n height = 1080;\n }\n else if (res == EnumResolution.RESOLUTION_2K) {\n width = 2560;\n height = 1440;\n }\n else if (res == EnumResolution.RESOLUTION_4K) {\n width = 3840;\n height = 2160;\n }\n await this.camera.setResolution(width, height);\n return;\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async getAllCameras() {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras();\n let labels = [];\n cameras.forEach(camera => {\n labels.push(camera.label);\n });\n return { cameras: labels };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async getSelectedCamera() {\n if (this.camera) {\n let cameraInfo = this.camera.getSelectedCamera();\n return { selectedCamera: cameraInfo.label };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async selectCamera(options) {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras();\n for (let index = 0; index < cameras.length; index++) {\n const camera = cameras[index];\n if (camera.label === options.cameraID) {\n await this.camera.selectCamera(camera);\n return;\n }\n }\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setScanRegion(options) {\n if (this.camera) {\n this.region = options.region;\n this.applyScanRegion();\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n applyScanRegion() {\n if (this.camera && this.region) {\n this.camera.setScanRegion({\n regionLeft: this.region.left,\n regionTop: this.region.top,\n regionRight: this.region.right,\n regionBottom: this.region.bottom,\n regionMeasuredByPercentage: this.region.measuredByPercentage\n });\n }\n }\n async setZoom(options) {\n if (this.camera) {\n await this.camera.setZoom(options.factor);\n return;\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setFocus(options) {\n if (this.camera) {\n this.camera.setFocus({\n mode: \"manual\",\n area: {\n centerPoint: { x: options.x.toString(), y: options.y.toString() }\n }\n });\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async toggleTorch(options) {\n if (this.camera) {\n try {\n if (options[\"on\"]) {\n await this.camera.turnOnTorch();\n }\n else {\n await this.camera.turnOffTorch();\n }\n }\n catch (e) {\n throw new Error(\"Torch unsupported\");\n }\n }\n }\n async startCamera() {\n var _a;\n if (this.camera) {\n await ((_a = this.camera) === null || _a === void 0 ? void 0 : _a.open(true));\n if (this.container && this.isSafari() === true) {\n const resetZoom = async () => {\n var _a, _b;\n await ((_a = this.camera) === null || _a === void 0 ? void 0 : _a.setZoom(1.001));\n await ((_b = this.camera) === null || _b === void 0 ? void 0 : _b.setZoom(1.0));\n };\n setTimeout(resetZoom, 500);\n }\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n isSafari() {\n const u = navigator.userAgent.toLowerCase();\n if (u.indexOf('safari') > -1 && u.indexOf('chrome') === -1) {\n return true;\n }\n else {\n return false;\n }\n }\n async stopCamera() {\n if (this.camera) {\n this.camera.close(true);\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async isOpen() {\n if (this.camera) {\n return { isOpen: this.camera.isOpen() };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async takeSnapshot(options) {\n if (this.camera) {\n let desiredQuality = 85;\n if (options.quality) {\n desiredQuality = options.quality;\n }\n let dataURL = this.camera.getFrame().toCanvas().toDataURL('image/jpeg', desiredQuality);\n let base64 = dataURL.replace(\"data:image/jpeg;base64,\", \"\");\n return { base64: base64 };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async takeSnapshot2(options) {\n if (this.camera) {\n let canvas = options.canvas;\n let scaleRatio = 1.0;\n if (options && options.maxLength) {\n let res = (await this.getResolution()).resolution;\n let width = parseInt(res.split(\"x\")[0]);\n let height = parseInt(res.split(\"x\")[1]);\n let targetWidth = width;\n let targetHeight = height;\n if (width > options.maxLength || height > options.maxLength) {\n if (width > height) {\n targetWidth = options.maxLength;\n targetHeight = options.maxLength / width * height;\n scaleRatio = options.maxLength / width;\n }\n else {\n targetHeight = options.maxLength;\n targetWidth = options.maxLength / height * width;\n scaleRatio = options.maxLength / height;\n }\n canvas.width = targetWidth;\n canvas.height = targetHeight;\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, targetWidth, targetHeight);\n }\n }\n else {\n this.drawFullFrame(canvas);\n }\n }\n else {\n this.drawFullFrame(canvas);\n }\n return { scaleRatio: scaleRatio };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n drawFullFrame(canvas) {\n var _a;\n let video = (_a = this.camera) === null || _a === void 0 ? void 0 : _a.getUIElement().getElementsByTagName(\"video\")[0];\n if (video) {\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n }\n }\n return canvas;\n }\n async takePhoto(_options) {\n if (this.camera) {\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let localStream = video.srcObject;\n if (localStream) {\n if (\"ImageCapture\" in window) {\n try {\n //@ts-ignore \n let ImageCapture = window[\"ImageCapture\"];\n console.log(\"ImageCapture supported\");\n const track = localStream.getVideoTracks()[0];\n let imageCapture = new ImageCapture(track);\n let blob = await imageCapture.takePhoto();\n return { blob: blob };\n }\n catch (error) {\n console.log(error);\n }\n }\n else {\n console.log(\"ImageCapture not supported\");\n }\n }\n this.camera.setScanRegion({\n regionLeft: 0,\n regionTop: 0,\n regionBottom: 100,\n regionRight: 100,\n regionMeasuredByPercentage: 1\n });\n let base64 = this.removeDataURLHead(this.camera.getFrame().toCanvas().toDataURL(\"image/jpeg\"));\n this.applyScanRegion();\n return { base64: base64 };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n removeDataURLHead(dataURL) {\n return dataURL.substring(dataURL.indexOf(\",\") + 1, dataURL.length);\n }\n async requestCameraPermission() {\n const constraints = { video: true, audio: false };\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n }\n async requestMicroPhonePermission() {\n try {\n const constraints = { video: false, audio: true };\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n this.hasMicrophone = true;\n }\n catch (error) {\n this.hasMicrophone = false;\n throw error;\n }\n }\n async startRecording() {\n if (this.camera) {\n if (this.hasMicrophone) {\n let settings = this.camera.getVideoSettings();\n settings.audio = true;\n await this.camera.updateVideoSettings(settings);\n }\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n this.recorder = new RecordRTC(video.srcObject, {\n type: 'video'\n });\n this.recorder.startRecording();\n }\n else {\n throw new Error(\"camera not initialized\");\n }\n }\n async stopRecording() {\n return new Promise((resolve, reject) => {\n if (this.recorder) {\n const stopRecordingCallback = () => {\n let blob = this.recorder.getBlob();\n this.recorder.destroy();\n this.recorder = null;\n resolve({ blob });\n };\n this.recorder.stopRecording(stopRecordingCallback);\n }\n else {\n reject(\"recorder not initialized\");\n }\n });\n }\n async setLayout(options) {\n if (this.camera) {\n let ele = this.camera.getUIElement();\n if (options.top) {\n ele.style.top = options.top;\n }\n if (options.left) {\n ele.style.left = options.left;\n }\n if (options.width) {\n ele.style.width = options.width;\n }\n if (options.height) {\n ele.style.height = options.height;\n }\n ele.style.position = \"absolute\";\n }\n else {\n throw new Error(\"Camera not initialized\");\n }\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["EnumResolution","registerPlugin","CameraEnhancer","WebPlugin","RecordRTC"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.cjs.js","sources":["esm/definitions.js","esm/index.js","esm/web.js"],"sourcesContent":["export var EnumResolution;\n(function (EnumResolution) {\n EnumResolution[EnumResolution[\"RESOLUTION_AUTO\"] = 0] = \"RESOLUTION_AUTO\";\n EnumResolution[EnumResolution[\"RESOLUTION_480P\"] = 1] = \"RESOLUTION_480P\";\n EnumResolution[EnumResolution[\"RESOLUTION_720P\"] = 2] = \"RESOLUTION_720P\";\n EnumResolution[EnumResolution[\"RESOLUTION_1080P\"] = 3] = \"RESOLUTION_1080P\";\n EnumResolution[EnumResolution[\"RESOLUTION_2K\"] = 4] = \"RESOLUTION_2K\";\n EnumResolution[EnumResolution[\"RESOLUTION_4K\"] = 5] = \"RESOLUTION_4K\";\n})(EnumResolution || (EnumResolution = {}));\n//# sourceMappingURL=definitions.js.map","import { registerPlugin } from '@capacitor/core';\nconst CameraPreview = registerPlugin('CameraPreview', {\n web: () => import('./web').then(m => new m.CameraPreviewWeb()),\n});\nexport * from './definitions';\nexport { CameraPreview };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nimport { CameraEnhancer } from 'dynamsoft-camera-enhancer';\nimport { EnumResolution } from './definitions';\nimport RecordRTC from 'recordrtc';\nCameraEnhancer.defaultUIElementURL = \"https://cdn.jsdelivr.net/npm/dynamsoft-camera-enhancer@3.3.9/dist/dce.ui.html\";\nexport class CameraPreviewWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.hasMicrophone = false;\n }\n async setDefaultUIElementURL(url) {\n CameraEnhancer.defaultUIElementURL = url;\n }\n async setElement(ele) {\n this.container = ele;\n }\n saveFrame() {\n throw new Error('Method not implemented.');\n }\n async getOrientation() {\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n if (portrait.matches) {\n return { orientation: \"PORTRAIT\" };\n }\n else {\n return { orientation: \"LANDSCAPE\" };\n }\n }\n async initialize() {\n this.camera = await CameraEnhancer.createInstance();\n this.camera.on(\"played\", (playCallBackInfo) => {\n this.notifyListeners(\"onPlayed\", { resolution: playCallBackInfo.width + \"x\" + playCallBackInfo.height });\n try {\n let canvas = this.camera.getUIElement().getElementsByClassName(\"dce-video-container\")[0].getElementsByTagName(\"canvas\")[0];\n if (canvas) {\n canvas.remove();\n }\n }\n catch (error) {\n console.log(error);\n }\n });\n if (this.container) {\n await this.camera.setUIElement(this.container);\n }\n else {\n await this.camera.setUIElement(CameraEnhancer.defaultUIElementURL);\n this.camera.getUIElement().getElementsByClassName(\"dce-btn-close\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-camera\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-resolution\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-msg-poweredby\")[0].remove();\n }\n this.camera.setVideoFit(\"cover\");\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n portrait.addEventListener(\"change\", () => {\n this.notifyListeners(\"onOrientationChanged\", null);\n });\n }\n async getResolution() {\n if (this.camera) {\n let rsl = this.camera.getResolution();\n let resolution = rsl[0] + \"x\" + rsl[1];\n return { resolution: resolution };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setResolution(options) {\n if (this.camera) {\n let res = options.resolution;\n let width = 1280;\n let height = 720;\n if (res == EnumResolution.RESOLUTION_480P) {\n width = 640;\n height = 480;\n }\n else if (res == EnumResolution.RESOLUTION_720P) {\n width = 1280;\n height = 720;\n }\n else if (res == EnumResolution.RESOLUTION_1080P) {\n width = 1920;\n height = 1080;\n }\n else if (res == EnumResolution.RESOLUTION_2K) {\n width = 2560;\n height = 1440;\n }\n else if (res == EnumResolution.RESOLUTION_4K) {\n width = 3840;\n height = 2160;\n }\n await this.camera.setResolution(width, height);\n return;\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async getAllCameras() {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras();\n let labels = [];\n cameras.forEach(camera => {\n labels.push(camera.label);\n });\n return { cameras: labels };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async getSelectedCamera() {\n if (this.camera) {\n let cameraInfo = this.camera.getSelectedCamera();\n return { selectedCamera: cameraInfo.label };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async selectCamera(options) {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras();\n for (let index = 0; index < cameras.length; index++) {\n const camera = cameras[index];\n if (camera.label === options.cameraID) {\n await this.camera.selectCamera(camera);\n return;\n }\n }\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setScanRegion(options) {\n if (this.camera) {\n this.region = options.region;\n this.applyScanRegion();\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n applyScanRegion() {\n if (this.camera && this.region) {\n this.camera.setScanRegion({\n regionLeft: this.region.left,\n regionTop: this.region.top,\n regionRight: this.region.right,\n regionBottom: this.region.bottom,\n regionMeasuredByPercentage: this.region.measuredByPercentage\n });\n }\n }\n async setZoom(options) {\n if (this.camera) {\n await this.camera.setZoom(options.factor);\n return;\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setFocus(options) {\n if (this.camera) {\n this.camera.setFocus({\n mode: \"manual\",\n area: {\n centerPoint: { x: options.x.toString(), y: options.y.toString() }\n }\n });\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async toggleTorch(options) {\n if (this.camera) {\n try {\n if (options[\"on\"]) {\n await this.camera.turnOnTorch();\n }\n else {\n await this.camera.turnOffTorch();\n }\n }\n catch (e) {\n throw new Error(\"Torch unsupported\");\n }\n }\n }\n async startCamera() {\n var _a;\n if (this.camera) {\n await ((_a = this.camera) === null || _a === void 0 ? void 0 : _a.open(true));\n if (this.container && this.isSafari() === true) {\n const resetZoom = async () => {\n var _a, _b;\n await ((_a = this.camera) === null || _a === void 0 ? void 0 : _a.setZoom(1.001));\n await ((_b = this.camera) === null || _b === void 0 ? void 0 : _b.setZoom(1.0));\n };\n setTimeout(resetZoom, 500);\n }\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n isSafari() {\n const u = navigator.userAgent.toLowerCase();\n if (u.indexOf('safari') > -1 && u.indexOf('chrome') === -1) {\n return true;\n }\n else {\n return false;\n }\n }\n async stopCamera() {\n if (this.camera) {\n this.camera.close(true);\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async isOpen() {\n if (this.camera) {\n return { isOpen: this.camera.isOpen() };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async takeSnapshot(options) {\n if (this.camera) {\n let desiredQuality = 85;\n if (options.quality) {\n desiredQuality = options.quality;\n }\n let dataURL = this.camera.getFrame().toCanvas().toDataURL('image/jpeg', desiredQuality);\n let base64 = dataURL.replace(\"data:image/jpeg;base64,\", \"\");\n return { base64: base64 };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async takeSnapshot2(options) {\n if (this.camera) {\n let canvas = options.canvas;\n let scaleRatio = 1.0;\n if (options && options.maxLength) {\n let res = (await this.getResolution()).resolution;\n let width = parseInt(res.split(\"x\")[0]);\n let height = parseInt(res.split(\"x\")[1]);\n let targetWidth = width;\n let targetHeight = height;\n if (width > options.maxLength || height > options.maxLength) {\n if (width > height) {\n targetWidth = options.maxLength;\n targetHeight = options.maxLength / width * height;\n scaleRatio = options.maxLength / width;\n }\n else {\n targetHeight = options.maxLength;\n targetWidth = options.maxLength / height * width;\n scaleRatio = options.maxLength / height;\n }\n canvas.width = targetWidth;\n canvas.height = targetHeight;\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, targetWidth, targetHeight);\n }\n }\n else {\n this.drawFullFrame(canvas);\n }\n }\n else {\n this.drawFullFrame(canvas);\n }\n return { scaleRatio: scaleRatio };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n drawFullFrame(canvas) {\n var _a;\n let video = (_a = this.camera) === null || _a === void 0 ? void 0 : _a.getUIElement().getElementsByTagName(\"video\")[0];\n if (video) {\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n }\n }\n return canvas;\n }\n async takePhoto(_options) {\n if (this.camera) {\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let localStream = video.srcObject;\n if (localStream) {\n if (\"ImageCapture\" in window) {\n try {\n //@ts-ignore \n let ImageCapture = window[\"ImageCapture\"];\n console.log(\"ImageCapture supported\");\n const track = localStream.getVideoTracks()[0];\n let imageCapture = new ImageCapture(track);\n let blob = await imageCapture.takePhoto();\n return { blob: blob };\n }\n catch (error) {\n console.log(error);\n }\n }\n else {\n console.log(\"ImageCapture not supported\");\n }\n }\n this.camera.setScanRegion({\n regionLeft: 0,\n regionTop: 0,\n regionBottom: 100,\n regionRight: 100,\n regionMeasuredByPercentage: 1\n });\n let base64 = this.removeDataURLHead(this.camera.getFrame().toCanvas().toDataURL(\"image/jpeg\"));\n this.applyScanRegion();\n return { base64: base64 };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n removeDataURLHead(dataURL) {\n return dataURL.substring(dataURL.indexOf(\",\") + 1, dataURL.length);\n }\n async requestCameraPermission() {\n const constraints = { video: true, audio: false };\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n }\n async requestMicroPhonePermission() {\n try {\n const constraints = { video: false, audio: true };\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n this.hasMicrophone = true;\n }\n catch (error) {\n this.hasMicrophone = false;\n throw error;\n }\n }\n async startRecording() {\n if (this.camera) {\n if (this.hasMicrophone) {\n let settings = this.camera.getVideoSettings();\n settings.audio = true;\n await this.camera.updateVideoSettings(settings);\n }\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n this.recorder = new RecordRTC(video.srcObject, {\n type: 'video'\n });\n this.recorder.startRecording();\n }\n else {\n throw new Error(\"camera not initialized\");\n }\n }\n async stopRecording() {\n return new Promise((resolve, reject) => {\n if (this.recorder) {\n const stopRecordingCallback = () => {\n let blob = this.recorder.getBlob();\n this.recorder.destroy();\n this.recorder = null;\n resolve({ blob });\n };\n this.recorder.stopRecording(stopRecordingCallback);\n }\n else {\n reject(\"recorder not initialized\");\n }\n });\n }\n async setLayout(options) {\n if (this.camera) {\n let ele = this.camera.getUIElement();\n if (options.top) {\n ele.style.top = options.top;\n }\n if (options.left) {\n ele.style.left = options.left;\n }\n if (options.width) {\n ele.style.width = options.width;\n }\n if (options.height) {\n ele.style.height = options.height;\n }\n ele.style.position = \"absolute\";\n }\n else {\n throw new Error(\"Camera not initialized\");\n }\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["EnumResolution","registerPlugin","CameraEnhancer","WebPlugin"],"mappings":"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"}
|
package/dist/plugin.js
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
var capacitorCameraPreview = (function (exports, core, dynamsoftCameraEnhancer, RecordRTC) {
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
5
|
-
|
|
6
|
-
var RecordRTC__default = /*#__PURE__*/_interopDefaultLegacy(RecordRTC);
|
|
7
|
-
|
|
8
4
|
exports.EnumResolution = void 0;
|
|
9
5
|
(function (EnumResolution) {
|
|
10
6
|
EnumResolution[EnumResolution["RESOLUTION_AUTO"] = 0] = "RESOLUTION_AUTO";
|
|
@@ -394,7 +390,7 @@ var capacitorCameraPreview = (function (exports, core, dynamsoftCameraEnhancer,
|
|
|
394
390
|
await this.camera.updateVideoSettings(settings);
|
|
395
391
|
}
|
|
396
392
|
let video = this.camera.getUIElement().getElementsByTagName("video")[0];
|
|
397
|
-
this.recorder = new
|
|
393
|
+
this.recorder = new RecordRTC(video.srcObject, {
|
|
398
394
|
type: 'video'
|
|
399
395
|
});
|
|
400
396
|
this.recorder.startRecording();
|
|
@@ -449,8 +445,6 @@ var capacitorCameraPreview = (function (exports, core, dynamsoftCameraEnhancer,
|
|
|
449
445
|
|
|
450
446
|
exports.CameraPreview = CameraPreview;
|
|
451
447
|
|
|
452
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
453
|
-
|
|
454
448
|
return exports;
|
|
455
449
|
|
|
456
450
|
})({}, capacitorExports, dynamsoftCameraEnhancer, RecordRTC);
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sources":["esm/definitions.js","esm/index.js","esm/web.js"],"sourcesContent":["export var EnumResolution;\n(function (EnumResolution) {\n EnumResolution[EnumResolution[\"RESOLUTION_AUTO\"] = 0] = \"RESOLUTION_AUTO\";\n EnumResolution[EnumResolution[\"RESOLUTION_480P\"] = 1] = \"RESOLUTION_480P\";\n EnumResolution[EnumResolution[\"RESOLUTION_720P\"] = 2] = \"RESOLUTION_720P\";\n EnumResolution[EnumResolution[\"RESOLUTION_1080P\"] = 3] = \"RESOLUTION_1080P\";\n EnumResolution[EnumResolution[\"RESOLUTION_2K\"] = 4] = \"RESOLUTION_2K\";\n EnumResolution[EnumResolution[\"RESOLUTION_4K\"] = 5] = \"RESOLUTION_4K\";\n})(EnumResolution || (EnumResolution = {}));\n//# sourceMappingURL=definitions.js.map","import { registerPlugin } from '@capacitor/core';\nconst CameraPreview = registerPlugin('CameraPreview', {\n web: () => import('./web').then(m => new m.CameraPreviewWeb()),\n});\nexport * from './definitions';\nexport { CameraPreview };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nimport { CameraEnhancer } from 'dynamsoft-camera-enhancer';\nimport { EnumResolution } from './definitions';\nimport RecordRTC from 'recordrtc';\nCameraEnhancer.defaultUIElementURL = \"https://cdn.jsdelivr.net/npm/dynamsoft-camera-enhancer@3.3.9/dist/dce.ui.html\";\nexport class CameraPreviewWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.hasMicrophone = false;\n }\n async setDefaultUIElementURL(url) {\n CameraEnhancer.defaultUIElementURL = url;\n }\n async setElement(ele) {\n this.container = ele;\n }\n saveFrame() {\n throw new Error('Method not implemented.');\n }\n async getOrientation() {\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n if (portrait.matches) {\n return { orientation: \"PORTRAIT\" };\n }\n else {\n return { orientation: \"LANDSCAPE\" };\n }\n }\n async initialize() {\n this.camera = await CameraEnhancer.createInstance();\n this.camera.on(\"played\", (playCallBackInfo) => {\n this.notifyListeners(\"onPlayed\", { resolution: playCallBackInfo.width + \"x\" + playCallBackInfo.height });\n try {\n let canvas = this.camera.getUIElement().getElementsByClassName(\"dce-video-container\")[0].getElementsByTagName(\"canvas\")[0];\n if (canvas) {\n canvas.remove();\n }\n }\n catch (error) {\n console.log(error);\n }\n });\n if (this.container) {\n await this.camera.setUIElement(this.container);\n }\n else {\n await this.camera.setUIElement(CameraEnhancer.defaultUIElementURL);\n this.camera.getUIElement().getElementsByClassName(\"dce-btn-close\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-camera\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-resolution\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-msg-poweredby\")[0].remove();\n }\n this.camera.setVideoFit(\"cover\");\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n portrait.addEventListener(\"change\", () => {\n this.notifyListeners(\"onOrientationChanged\", null);\n });\n }\n async getResolution() {\n if (this.camera) {\n let rsl = this.camera.getResolution();\n let resolution = rsl[0] + \"x\" + rsl[1];\n return { resolution: resolution };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setResolution(options) {\n if (this.camera) {\n let res = options.resolution;\n let width = 1280;\n let height = 720;\n if (res == EnumResolution.RESOLUTION_480P) {\n width = 640;\n height = 480;\n }\n else if (res == EnumResolution.RESOLUTION_720P) {\n width = 1280;\n height = 720;\n }\n else if (res == EnumResolution.RESOLUTION_1080P) {\n width = 1920;\n height = 1080;\n }\n else if (res == EnumResolution.RESOLUTION_2K) {\n width = 2560;\n height = 1440;\n }\n else if (res == EnumResolution.RESOLUTION_4K) {\n width = 3840;\n height = 2160;\n }\n await this.camera.setResolution(width, height);\n return;\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async getAllCameras() {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras();\n let labels = [];\n cameras.forEach(camera => {\n labels.push(camera.label);\n });\n return { cameras: labels };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async getSelectedCamera() {\n if (this.camera) {\n let cameraInfo = this.camera.getSelectedCamera();\n return { selectedCamera: cameraInfo.label };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async selectCamera(options) {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras();\n for (let index = 0; index < cameras.length; index++) {\n const camera = cameras[index];\n if (camera.label === options.cameraID) {\n await this.camera.selectCamera(camera);\n return;\n }\n }\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setScanRegion(options) {\n if (this.camera) {\n this.region = options.region;\n this.applyScanRegion();\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n applyScanRegion() {\n if (this.camera && this.region) {\n this.camera.setScanRegion({\n regionLeft: this.region.left,\n regionTop: this.region.top,\n regionRight: this.region.right,\n regionBottom: this.region.bottom,\n regionMeasuredByPercentage: this.region.measuredByPercentage\n });\n }\n }\n async setZoom(options) {\n if (this.camera) {\n await this.camera.setZoom(options.factor);\n return;\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setFocus(options) {\n if (this.camera) {\n this.camera.setFocus({\n mode: \"manual\",\n area: {\n centerPoint: { x: options.x.toString(), y: options.y.toString() }\n }\n });\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async toggleTorch(options) {\n if (this.camera) {\n try {\n if (options[\"on\"]) {\n await this.camera.turnOnTorch();\n }\n else {\n await this.camera.turnOffTorch();\n }\n }\n catch (e) {\n throw new Error(\"Torch unsupported\");\n }\n }\n }\n async startCamera() {\n var _a;\n if (this.camera) {\n await ((_a = this.camera) === null || _a === void 0 ? void 0 : _a.open(true));\n if (this.container && this.isSafari() === true) {\n const resetZoom = async () => {\n var _a, _b;\n await ((_a = this.camera) === null || _a === void 0 ? void 0 : _a.setZoom(1.001));\n await ((_b = this.camera) === null || _b === void 0 ? void 0 : _b.setZoom(1.0));\n };\n setTimeout(resetZoom, 500);\n }\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n isSafari() {\n const u = navigator.userAgent.toLowerCase();\n if (u.indexOf('safari') > -1 && u.indexOf('chrome') === -1) {\n return true;\n }\n else {\n return false;\n }\n }\n async stopCamera() {\n if (this.camera) {\n this.camera.close(true);\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async isOpen() {\n if (this.camera) {\n return { isOpen: this.camera.isOpen() };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async takeSnapshot(options) {\n if (this.camera) {\n let desiredQuality = 85;\n if (options.quality) {\n desiredQuality = options.quality;\n }\n let dataURL = this.camera.getFrame().toCanvas().toDataURL('image/jpeg', desiredQuality);\n let base64 = dataURL.replace(\"data:image/jpeg;base64,\", \"\");\n return { base64: base64 };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async takeSnapshot2(options) {\n if (this.camera) {\n let canvas = options.canvas;\n let scaleRatio = 1.0;\n if (options && options.maxLength) {\n let res = (await this.getResolution()).resolution;\n let width = parseInt(res.split(\"x\")[0]);\n let height = parseInt(res.split(\"x\")[1]);\n let targetWidth = width;\n let targetHeight = height;\n if (width > options.maxLength || height > options.maxLength) {\n if (width > height) {\n targetWidth = options.maxLength;\n targetHeight = options.maxLength / width * height;\n scaleRatio = options.maxLength / width;\n }\n else {\n targetHeight = options.maxLength;\n targetWidth = options.maxLength / height * width;\n scaleRatio = options.maxLength / height;\n }\n canvas.width = targetWidth;\n canvas.height = targetHeight;\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, targetWidth, targetHeight);\n }\n }\n else {\n this.drawFullFrame(canvas);\n }\n }\n else {\n this.drawFullFrame(canvas);\n }\n return { scaleRatio: scaleRatio };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n drawFullFrame(canvas) {\n var _a;\n let video = (_a = this.camera) === null || _a === void 0 ? void 0 : _a.getUIElement().getElementsByTagName(\"video\")[0];\n if (video) {\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n }\n }\n return canvas;\n }\n async takePhoto(_options) {\n if (this.camera) {\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let localStream = video.srcObject;\n if (localStream) {\n if (\"ImageCapture\" in window) {\n try {\n //@ts-ignore \n let ImageCapture = window[\"ImageCapture\"];\n console.log(\"ImageCapture supported\");\n const track = localStream.getVideoTracks()[0];\n let imageCapture = new ImageCapture(track);\n let blob = await imageCapture.takePhoto();\n return { blob: blob };\n }\n catch (error) {\n console.log(error);\n }\n }\n else {\n console.log(\"ImageCapture not supported\");\n }\n }\n this.camera.setScanRegion({\n regionLeft: 0,\n regionTop: 0,\n regionBottom: 100,\n regionRight: 100,\n regionMeasuredByPercentage: 1\n });\n let base64 = this.removeDataURLHead(this.camera.getFrame().toCanvas().toDataURL(\"image/jpeg\"));\n this.applyScanRegion();\n return { base64: base64 };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n removeDataURLHead(dataURL) {\n return dataURL.substring(dataURL.indexOf(\",\") + 1, dataURL.length);\n }\n async requestCameraPermission() {\n const constraints = { video: true, audio: false };\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n }\n async requestMicroPhonePermission() {\n try {\n const constraints = { video: false, audio: true };\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n this.hasMicrophone = true;\n }\n catch (error) {\n this.hasMicrophone = false;\n throw error;\n }\n }\n async startRecording() {\n if (this.camera) {\n if (this.hasMicrophone) {\n let settings = this.camera.getVideoSettings();\n settings.audio = true;\n await this.camera.updateVideoSettings(settings);\n }\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n this.recorder = new RecordRTC(video.srcObject, {\n type: 'video'\n });\n this.recorder.startRecording();\n }\n else {\n throw new Error(\"camera not initialized\");\n }\n }\n async stopRecording() {\n return new Promise((resolve, reject) => {\n if (this.recorder) {\n const stopRecordingCallback = () => {\n let blob = this.recorder.getBlob();\n this.recorder.destroy();\n this.recorder = null;\n resolve({ blob });\n };\n this.recorder.stopRecording(stopRecordingCallback);\n }\n else {\n reject(\"recorder not initialized\");\n }\n });\n }\n async setLayout(options) {\n if (this.camera) {\n let ele = this.camera.getUIElement();\n if (options.top) {\n ele.style.top = options.top;\n }\n if (options.left) {\n ele.style.left = options.left;\n }\n if (options.width) {\n ele.style.width = options.width;\n }\n if (options.height) {\n ele.style.height = options.height;\n }\n ele.style.position = \"absolute\";\n }\n else {\n throw new Error(\"Camera not initialized\");\n }\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["EnumResolution","registerPlugin","CameraEnhancer","WebPlugin","RecordRTC"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.js","sources":["esm/definitions.js","esm/index.js","esm/web.js"],"sourcesContent":["export var EnumResolution;\n(function (EnumResolution) {\n EnumResolution[EnumResolution[\"RESOLUTION_AUTO\"] = 0] = \"RESOLUTION_AUTO\";\n EnumResolution[EnumResolution[\"RESOLUTION_480P\"] = 1] = \"RESOLUTION_480P\";\n EnumResolution[EnumResolution[\"RESOLUTION_720P\"] = 2] = \"RESOLUTION_720P\";\n EnumResolution[EnumResolution[\"RESOLUTION_1080P\"] = 3] = \"RESOLUTION_1080P\";\n EnumResolution[EnumResolution[\"RESOLUTION_2K\"] = 4] = \"RESOLUTION_2K\";\n EnumResolution[EnumResolution[\"RESOLUTION_4K\"] = 5] = \"RESOLUTION_4K\";\n})(EnumResolution || (EnumResolution = {}));\n//# sourceMappingURL=definitions.js.map","import { registerPlugin } from '@capacitor/core';\nconst CameraPreview = registerPlugin('CameraPreview', {\n web: () => import('./web').then(m => new m.CameraPreviewWeb()),\n});\nexport * from './definitions';\nexport { CameraPreview };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nimport { CameraEnhancer } from 'dynamsoft-camera-enhancer';\nimport { EnumResolution } from './definitions';\nimport RecordRTC from 'recordrtc';\nCameraEnhancer.defaultUIElementURL = \"https://cdn.jsdelivr.net/npm/dynamsoft-camera-enhancer@3.3.9/dist/dce.ui.html\";\nexport class CameraPreviewWeb extends WebPlugin {\n constructor() {\n super(...arguments);\n this.hasMicrophone = false;\n }\n async setDefaultUIElementURL(url) {\n CameraEnhancer.defaultUIElementURL = url;\n }\n async setElement(ele) {\n this.container = ele;\n }\n saveFrame() {\n throw new Error('Method not implemented.');\n }\n async getOrientation() {\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n if (portrait.matches) {\n return { orientation: \"PORTRAIT\" };\n }\n else {\n return { orientation: \"LANDSCAPE\" };\n }\n }\n async initialize() {\n this.camera = await CameraEnhancer.createInstance();\n this.camera.on(\"played\", (playCallBackInfo) => {\n this.notifyListeners(\"onPlayed\", { resolution: playCallBackInfo.width + \"x\" + playCallBackInfo.height });\n try {\n let canvas = this.camera.getUIElement().getElementsByClassName(\"dce-video-container\")[0].getElementsByTagName(\"canvas\")[0];\n if (canvas) {\n canvas.remove();\n }\n }\n catch (error) {\n console.log(error);\n }\n });\n if (this.container) {\n await this.camera.setUIElement(this.container);\n }\n else {\n await this.camera.setUIElement(CameraEnhancer.defaultUIElementURL);\n this.camera.getUIElement().getElementsByClassName(\"dce-btn-close\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-camera\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-sel-resolution\")[0].remove();\n this.camera.getUIElement().getElementsByClassName(\"dce-msg-poweredby\")[0].remove();\n }\n this.camera.setVideoFit(\"cover\");\n let portrait = window.matchMedia(\"(orientation: portrait)\");\n portrait.addEventListener(\"change\", () => {\n this.notifyListeners(\"onOrientationChanged\", null);\n });\n }\n async getResolution() {\n if (this.camera) {\n let rsl = this.camera.getResolution();\n let resolution = rsl[0] + \"x\" + rsl[1];\n return { resolution: resolution };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setResolution(options) {\n if (this.camera) {\n let res = options.resolution;\n let width = 1280;\n let height = 720;\n if (res == EnumResolution.RESOLUTION_480P) {\n width = 640;\n height = 480;\n }\n else if (res == EnumResolution.RESOLUTION_720P) {\n width = 1280;\n height = 720;\n }\n else if (res == EnumResolution.RESOLUTION_1080P) {\n width = 1920;\n height = 1080;\n }\n else if (res == EnumResolution.RESOLUTION_2K) {\n width = 2560;\n height = 1440;\n }\n else if (res == EnumResolution.RESOLUTION_4K) {\n width = 3840;\n height = 2160;\n }\n await this.camera.setResolution(width, height);\n return;\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async getAllCameras() {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras();\n let labels = [];\n cameras.forEach(camera => {\n labels.push(camera.label);\n });\n return { cameras: labels };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async getSelectedCamera() {\n if (this.camera) {\n let cameraInfo = this.camera.getSelectedCamera();\n return { selectedCamera: cameraInfo.label };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async selectCamera(options) {\n if (this.camera) {\n let cameras = await this.camera.getAllCameras();\n for (let index = 0; index < cameras.length; index++) {\n const camera = cameras[index];\n if (camera.label === options.cameraID) {\n await this.camera.selectCamera(camera);\n return;\n }\n }\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setScanRegion(options) {\n if (this.camera) {\n this.region = options.region;\n this.applyScanRegion();\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n applyScanRegion() {\n if (this.camera && this.region) {\n this.camera.setScanRegion({\n regionLeft: this.region.left,\n regionTop: this.region.top,\n regionRight: this.region.right,\n regionBottom: this.region.bottom,\n regionMeasuredByPercentage: this.region.measuredByPercentage\n });\n }\n }\n async setZoom(options) {\n if (this.camera) {\n await this.camera.setZoom(options.factor);\n return;\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async setFocus(options) {\n if (this.camera) {\n this.camera.setFocus({\n mode: \"manual\",\n area: {\n centerPoint: { x: options.x.toString(), y: options.y.toString() }\n }\n });\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async toggleTorch(options) {\n if (this.camera) {\n try {\n if (options[\"on\"]) {\n await this.camera.turnOnTorch();\n }\n else {\n await this.camera.turnOffTorch();\n }\n }\n catch (e) {\n throw new Error(\"Torch unsupported\");\n }\n }\n }\n async startCamera() {\n var _a;\n if (this.camera) {\n await ((_a = this.camera) === null || _a === void 0 ? void 0 : _a.open(true));\n if (this.container && this.isSafari() === true) {\n const resetZoom = async () => {\n var _a, _b;\n await ((_a = this.camera) === null || _a === void 0 ? void 0 : _a.setZoom(1.001));\n await ((_b = this.camera) === null || _b === void 0 ? void 0 : _b.setZoom(1.0));\n };\n setTimeout(resetZoom, 500);\n }\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n isSafari() {\n const u = navigator.userAgent.toLowerCase();\n if (u.indexOf('safari') > -1 && u.indexOf('chrome') === -1) {\n return true;\n }\n else {\n return false;\n }\n }\n async stopCamera() {\n if (this.camera) {\n this.camera.close(true);\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async isOpen() {\n if (this.camera) {\n return { isOpen: this.camera.isOpen() };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async takeSnapshot(options) {\n if (this.camera) {\n let desiredQuality = 85;\n if (options.quality) {\n desiredQuality = options.quality;\n }\n let dataURL = this.camera.getFrame().toCanvas().toDataURL('image/jpeg', desiredQuality);\n let base64 = dataURL.replace(\"data:image/jpeg;base64,\", \"\");\n return { base64: base64 };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n async takeSnapshot2(options) {\n if (this.camera) {\n let canvas = options.canvas;\n let scaleRatio = 1.0;\n if (options && options.maxLength) {\n let res = (await this.getResolution()).resolution;\n let width = parseInt(res.split(\"x\")[0]);\n let height = parseInt(res.split(\"x\")[1]);\n let targetWidth = width;\n let targetHeight = height;\n if (width > options.maxLength || height > options.maxLength) {\n if (width > height) {\n targetWidth = options.maxLength;\n targetHeight = options.maxLength / width * height;\n scaleRatio = options.maxLength / width;\n }\n else {\n targetHeight = options.maxLength;\n targetWidth = options.maxLength / height * width;\n scaleRatio = options.maxLength / height;\n }\n canvas.width = targetWidth;\n canvas.height = targetHeight;\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, targetWidth, targetHeight);\n }\n }\n else {\n this.drawFullFrame(canvas);\n }\n }\n else {\n this.drawFullFrame(canvas);\n }\n return { scaleRatio: scaleRatio };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n drawFullFrame(canvas) {\n var _a;\n let video = (_a = this.camera) === null || _a === void 0 ? void 0 : _a.getUIElement().getElementsByTagName(\"video\")[0];\n if (video) {\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n let ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n }\n }\n return canvas;\n }\n async takePhoto(_options) {\n if (this.camera) {\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n let localStream = video.srcObject;\n if (localStream) {\n if (\"ImageCapture\" in window) {\n try {\n //@ts-ignore \n let ImageCapture = window[\"ImageCapture\"];\n console.log(\"ImageCapture supported\");\n const track = localStream.getVideoTracks()[0];\n let imageCapture = new ImageCapture(track);\n let blob = await imageCapture.takePhoto();\n return { blob: blob };\n }\n catch (error) {\n console.log(error);\n }\n }\n else {\n console.log(\"ImageCapture not supported\");\n }\n }\n this.camera.setScanRegion({\n regionLeft: 0,\n regionTop: 0,\n regionBottom: 100,\n regionRight: 100,\n regionMeasuredByPercentage: 1\n });\n let base64 = this.removeDataURLHead(this.camera.getFrame().toCanvas().toDataURL(\"image/jpeg\"));\n this.applyScanRegion();\n return { base64: base64 };\n }\n else {\n throw new Error('Camera not initialized');\n }\n }\n removeDataURLHead(dataURL) {\n return dataURL.substring(dataURL.indexOf(\",\") + 1, dataURL.length);\n }\n async requestCameraPermission() {\n const constraints = { video: true, audio: false };\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n }\n async requestMicroPhonePermission() {\n try {\n const constraints = { video: false, audio: true };\n const stream = await navigator.mediaDevices.getUserMedia(constraints);\n const tracks = stream.getTracks();\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n track.stop(); // stop the opened tracks\n }\n this.hasMicrophone = true;\n }\n catch (error) {\n this.hasMicrophone = false;\n throw error;\n }\n }\n async startRecording() {\n if (this.camera) {\n if (this.hasMicrophone) {\n let settings = this.camera.getVideoSettings();\n settings.audio = true;\n await this.camera.updateVideoSettings(settings);\n }\n let video = this.camera.getUIElement().getElementsByTagName(\"video\")[0];\n this.recorder = new RecordRTC(video.srcObject, {\n type: 'video'\n });\n this.recorder.startRecording();\n }\n else {\n throw new Error(\"camera not initialized\");\n }\n }\n async stopRecording() {\n return new Promise((resolve, reject) => {\n if (this.recorder) {\n const stopRecordingCallback = () => {\n let blob = this.recorder.getBlob();\n this.recorder.destroy();\n this.recorder = null;\n resolve({ blob });\n };\n this.recorder.stopRecording(stopRecordingCallback);\n }\n else {\n reject(\"recorder not initialized\");\n }\n });\n }\n async setLayout(options) {\n if (this.camera) {\n let ele = this.camera.getUIElement();\n if (options.top) {\n ele.style.top = options.top;\n }\n if (options.left) {\n ele.style.left = options.left;\n }\n if (options.width) {\n ele.style.width = options.width;\n }\n if (options.height) {\n ele.style.height = options.height;\n }\n ele.style.position = \"absolute\";\n }\n else {\n throw new Error(\"Camera not initialized\");\n }\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["EnumResolution","registerPlugin","CameraEnhancer","WebPlugin"],"mappings":"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"}
|
|
@@ -25,12 +25,22 @@ public class CameraPreviewPlugin: CAPPlugin, AVCaptureVideoDataOutputSampleBuffe
|
|
|
25
25
|
var facingBack = true
|
|
26
26
|
var videoInput:AVCaptureDeviceInput!
|
|
27
27
|
var scanRegion:ScanRegion! = nil
|
|
28
|
+
var lastValidOrientation = "portrait"
|
|
29
|
+
var focusView: UIView?
|
|
30
|
+
var isFocusAnimating = false
|
|
31
|
+
var focusCompletionTimer: Timer?
|
|
32
|
+
var lastFocusTime: Date = Date()
|
|
33
|
+
private let focusThrottleInterval: TimeInterval = 0.5
|
|
28
34
|
@objc func initialize(_ call: CAPPluginCall) {
|
|
29
35
|
// Initialize a camera view for previewing video.
|
|
30
36
|
DispatchQueue.main.sync {
|
|
31
37
|
self.previewView = PreviewView.init(frame: (bridge?.viewController?.view.bounds)!)
|
|
32
38
|
self.webView!.superview!.insertSubview(self.previewView, belowSubview: self.webView!)
|
|
33
39
|
initializeCaptureSession(enableVideoRecording: false)
|
|
40
|
+
|
|
41
|
+
// Add tap gesture for focus
|
|
42
|
+
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTapToFocus(_:)))
|
|
43
|
+
self.previewView.addGestureRecognizer(tapGesture)
|
|
34
44
|
}
|
|
35
45
|
call.resolve()
|
|
36
46
|
}
|
|
@@ -41,10 +51,13 @@ public class CameraPreviewPlugin: CAPPlugin, AVCaptureVideoDataOutputSampleBuffe
|
|
|
41
51
|
self.previewView.frame = bounds!
|
|
42
52
|
if UIDevice.current.orientation == UIDeviceOrientation.portrait {
|
|
43
53
|
self.previewView.videoPreviewLayer.connection?.videoOrientation = .portrait
|
|
54
|
+
lastValidOrientation = "portrait"
|
|
44
55
|
}else if UIDevice.current.orientation == UIDeviceOrientation.landscapeLeft {
|
|
45
56
|
self.previewView.videoPreviewLayer.connection?.videoOrientation = .landscapeRight
|
|
57
|
+
lastValidOrientation = "landscapeRight"
|
|
46
58
|
}else if UIDevice.current.orientation == UIDeviceOrientation.landscapeRight {
|
|
47
59
|
self.previewView.videoPreviewLayer.connection?.videoOrientation = .landscapeLeft
|
|
60
|
+
lastValidOrientation = "landscapeLeft"
|
|
48
61
|
}
|
|
49
62
|
}
|
|
50
63
|
notifyListeners("onOrientationChanged",data: nil)
|
|
@@ -142,6 +155,10 @@ public class CameraPreviewPlugin: CAPPlugin, AVCaptureVideoDataOutputSampleBuffe
|
|
|
142
155
|
// If the input can be added, add it to the session.
|
|
143
156
|
if self.captureSession.canAddInput(videoInput) {
|
|
144
157
|
self.captureSession.addInput(videoInput)
|
|
158
|
+
|
|
159
|
+
// Configure camera device for optimal focus performance
|
|
160
|
+
try self.configureCameraForOptimalFocus(device: videoDevice)
|
|
161
|
+
|
|
145
162
|
self.previewView.videoPreviewLayer.session = self.captureSession
|
|
146
163
|
self.previewView.videoPreviewLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
|
|
147
164
|
|
|
@@ -159,7 +176,12 @@ public class CameraPreviewPlugin: CAPPlugin, AVCaptureVideoDataOutputSampleBuffe
|
|
|
159
176
|
|
|
160
177
|
self.photoOutput = AVCapturePhotoOutput()
|
|
161
178
|
self.photoOutput.isHighResolutionCaptureEnabled = true
|
|
162
|
-
|
|
179
|
+
|
|
180
|
+
// Configure photo output for better focus
|
|
181
|
+
if #available(iOS 13.0, *) {
|
|
182
|
+
self.photoOutput.maxPhotoQualityPrioritization = .quality
|
|
183
|
+
}
|
|
184
|
+
|
|
163
185
|
if self.captureSession.canAddOutput(self.photoOutput) {
|
|
164
186
|
self.captureSession.addOutput(photoOutput)
|
|
165
187
|
}
|
|
@@ -185,13 +207,100 @@ public class CameraPreviewPlugin: CAPPlugin, AVCaptureVideoDataOutputSampleBuffe
|
|
|
185
207
|
print(error)
|
|
186
208
|
}
|
|
187
209
|
}
|
|
210
|
+
|
|
211
|
+
private func configureCameraForOptimalFocus(device: AVCaptureDevice) throws {
|
|
212
|
+
try device.lockForConfiguration()
|
|
213
|
+
|
|
214
|
+
// Set optimal focus mode for continuous operation
|
|
215
|
+
if device.isFocusModeSupported(.continuousAutoFocus) {
|
|
216
|
+
device.focusMode = .continuousAutoFocus
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// Set optimal exposure mode
|
|
220
|
+
if device.isExposureModeSupported(.continuousAutoExposure) {
|
|
221
|
+
device.exposureMode = .continuousAutoExposure
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// Enable subject area change monitoring for responsive focus
|
|
225
|
+
device.isSubjectAreaChangeMonitoringEnabled = true
|
|
226
|
+
|
|
227
|
+
// Configure white balance for better color accuracy
|
|
228
|
+
if device.isWhiteBalanceModeSupported(.continuousAutoWhiteBalance) {
|
|
229
|
+
device.whiteBalanceMode = .continuousAutoWhiteBalance
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// Set focus range restriction if supported (helps with faster focus)
|
|
233
|
+
if device.isAutoFocusRangeRestrictionSupported {
|
|
234
|
+
device.autoFocusRangeRestriction = .none // Allow full range for versatility
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// Enable smooth auto focus if available (iOS 7+)
|
|
238
|
+
if device.isSmoothAutoFocusSupported {
|
|
239
|
+
device.isSmoothAutoFocusEnabled = true
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
device.unlockForConfiguration()
|
|
243
|
+
}
|
|
244
|
+
|
|
188
245
|
func takePhotoWithAVFoundation(){
|
|
189
246
|
//self.captureSession.sessionPreset = AVCaptureSession.Preset.hd4K3840x2160
|
|
190
247
|
let photoSettings: AVCapturePhotoSettings
|
|
191
|
-
|
|
248
|
+
|
|
249
|
+
// Use HEIF format if available for better quality
|
|
250
|
+
if #available(iOS 11.0, *), self.photoOutput.availablePhotoCodecTypes.contains(.hevc) {
|
|
251
|
+
photoSettings = AVCapturePhotoSettings(format: [AVVideoCodecKey: AVVideoCodecType.hevc])
|
|
252
|
+
} else {
|
|
253
|
+
photoSettings = AVCapturePhotoSettings()
|
|
254
|
+
}
|
|
255
|
+
|
|
192
256
|
photoSettings.isHighResolutionPhotoEnabled = true
|
|
193
257
|
|
|
194
|
-
|
|
258
|
+
// Enable auto-focus before capture for better focus accuracy
|
|
259
|
+
if #available(iOS 11.0, *) {
|
|
260
|
+
photoSettings.photoQualityPrioritization = .quality
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
// Enable auto-focus and auto-exposure for optimal capture
|
|
264
|
+
if #available(iOS 14.1, *) {
|
|
265
|
+
photoSettings.isAutoContentAwareDistortionCorrectionEnabled = true
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
// Trigger focus before capture if the device supports it
|
|
269
|
+
let device = self.videoInput.device
|
|
270
|
+
if device.isFocusModeSupported(.autoFocus) {
|
|
271
|
+
do {
|
|
272
|
+
try device.lockForConfiguration()
|
|
273
|
+
|
|
274
|
+
// Temporarily switch to autoFocus for the photo capture
|
|
275
|
+
let previousFocusMode = device.focusMode
|
|
276
|
+
device.focusMode = .autoFocus
|
|
277
|
+
|
|
278
|
+
device.unlockForConfiguration()
|
|
279
|
+
|
|
280
|
+
// Wait a brief moment for focus to settle, then capture
|
|
281
|
+
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
|
|
282
|
+
self.photoOutput.capturePhoto(with: photoSettings, delegate: self)
|
|
283
|
+
|
|
284
|
+
// Restore previous focus mode after a short delay
|
|
285
|
+
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
|
|
286
|
+
do {
|
|
287
|
+
try device.lockForConfiguration()
|
|
288
|
+
device.focusMode = previousFocusMode
|
|
289
|
+
device.unlockForConfiguration()
|
|
290
|
+
} catch {
|
|
291
|
+
print("Could not restore focus mode: \(error)")
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
} catch {
|
|
296
|
+
// If focus configuration fails, capture anyway
|
|
297
|
+
print("Could not configure focus for capture: \(error)")
|
|
298
|
+
self.photoOutput.capturePhoto(with: photoSettings, delegate: self)
|
|
299
|
+
}
|
|
300
|
+
} else {
|
|
301
|
+
// Capture immediately if auto focus isn't supported
|
|
302
|
+
self.photoOutput.capturePhoto(with: photoSettings, delegate: self)
|
|
303
|
+
}
|
|
195
304
|
}
|
|
196
305
|
|
|
197
306
|
public func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
|
|
@@ -257,6 +366,9 @@ public class CameraPreviewPlugin: CAPPlugin, AVCaptureVideoDataOutputSampleBuffe
|
|
|
257
366
|
print("Failed to create bitmap from image.")
|
|
258
367
|
return
|
|
259
368
|
}
|
|
369
|
+
|
|
370
|
+
//print("lastValidOrientation: ",lastValidOrientation)
|
|
371
|
+
//print("degree: ",degree)
|
|
260
372
|
let image = UIImage(cgImage: cgImage)
|
|
261
373
|
var normalized = normalizedImage(image)
|
|
262
374
|
if self.scanRegion != nil {
|
|
@@ -529,49 +641,176 @@ public class CameraPreviewPlugin: CAPPlugin, AVCaptureVideoDataOutputSampleBuffe
|
|
|
529
641
|
}
|
|
530
642
|
|
|
531
643
|
@objc func setFocus(_ call: CAPPluginCall) {
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
let
|
|
535
|
-
|
|
536
|
-
|
|
644
|
+
if let x = call.getFloat("x"), let y = call.getFloat("y"),
|
|
645
|
+
x >= 0.0 && x <= 1.0, y >= 0.0 && y <= 1.0 {
|
|
646
|
+
let point = CGPoint(x: CGFloat(x), y: CGFloat(y))
|
|
647
|
+
|
|
648
|
+
// Check if focus is currently animating and reset if stuck
|
|
649
|
+
if isFocusAnimating {
|
|
650
|
+
resetFocusIfStuck()
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
focusWithPoint(point: point)
|
|
654
|
+
|
|
655
|
+
// Calculate the point in the preview layer's coordinate space
|
|
656
|
+
let previewPoint = CGPoint(x: point.x * previewView.bounds.width,
|
|
657
|
+
y: point.y * previewView.bounds.height)
|
|
658
|
+
showFocusView(at: previewPoint)
|
|
659
|
+
call.resolve()
|
|
660
|
+
} else {
|
|
537
661
|
call.reject("Invalid coordinates. Provide normalized x,y values (0.0-1.0)")
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
private func resetFocusIfStuck() {
|
|
666
|
+
// Remove any existing focus indicator
|
|
667
|
+
focusView?.removeFromSuperview()
|
|
668
|
+
focusCompletionTimer?.invalidate()
|
|
669
|
+
isFocusAnimating = false
|
|
670
|
+
|
|
671
|
+
// Reset focus to continuous mode
|
|
672
|
+
let device = self.videoInput.device
|
|
673
|
+
do {
|
|
674
|
+
try device.lockForConfiguration()
|
|
675
|
+
if device.isFocusModeSupported(.continuousAutoFocus) {
|
|
676
|
+
device.focusMode = .continuousAutoFocus
|
|
677
|
+
}
|
|
678
|
+
device.unlockForConfiguration()
|
|
679
|
+
} catch {
|
|
680
|
+
print("Could not reset focus: \(error)")
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
@objc func resetFocus(_ call: CAPPluginCall) {
|
|
685
|
+
resetFocusIfStuck()
|
|
686
|
+
|
|
687
|
+
// Reset to center focus
|
|
688
|
+
let centerPoint = CGPoint(x: 0.5, y: 0.5)
|
|
689
|
+
focusWithPoint(point: centerPoint)
|
|
690
|
+
|
|
691
|
+
call.resolve()
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
@objc func handleTapToFocus(_ gesture: UITapGestureRecognizer) {
|
|
695
|
+
let location = gesture.location(in: self.previewView)
|
|
696
|
+
let convertedPoint = self.previewView.videoPreviewLayer.captureDevicePointConverted(fromLayerPoint: location)
|
|
697
|
+
|
|
698
|
+
focusWithPoint(point: convertedPoint)
|
|
699
|
+
showFocusView(at: location)
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
func focusWithPoint(point: CGPoint) {
|
|
703
|
+
let device = self.videoInput.device
|
|
704
|
+
|
|
705
|
+
let now = Date()
|
|
706
|
+
if now.timeIntervalSince(lastFocusTime) < focusThrottleInterval {
|
|
538
707
|
return
|
|
539
708
|
}
|
|
540
|
-
|
|
541
|
-
let device = videoInput.device
|
|
709
|
+
lastFocusTime = now
|
|
542
710
|
|
|
543
711
|
do {
|
|
544
712
|
try device.lockForConfiguration()
|
|
545
713
|
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
714
|
+
focusCompletionTimer?.invalidate()
|
|
715
|
+
|
|
716
|
+
if device.isFocusPointOfInterestSupported {
|
|
717
|
+
device.focusPointOfInterest = point
|
|
718
|
+
|
|
719
|
+
if device.isFocusModeSupported(.continuousAutoFocus) {
|
|
720
|
+
device.focusMode = .continuousAutoFocus
|
|
721
|
+
} else if device.isFocusModeSupported(.autoFocus) {
|
|
722
|
+
device.focusMode = .autoFocus
|
|
723
|
+
} else {
|
|
724
|
+
device.focusMode = .locked
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
if device.focusMode == .autoFocus {
|
|
728
|
+
NotificationCenter.default.addObserver(
|
|
729
|
+
self,
|
|
730
|
+
selector: #selector(subjectAreaDidChange),
|
|
731
|
+
name: .AVCaptureDeviceSubjectAreaDidChange,
|
|
732
|
+
object: device
|
|
733
|
+
)
|
|
734
|
+
}
|
|
551
735
|
}
|
|
552
736
|
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
call.reject("No supported focus mode available")
|
|
562
|
-
return
|
|
737
|
+
if device.isExposurePointOfInterestSupported {
|
|
738
|
+
device.exposurePointOfInterest = point
|
|
739
|
+
|
|
740
|
+
if device.isExposureModeSupported(.continuousAutoExposure) {
|
|
741
|
+
device.exposureMode = .continuousAutoExposure
|
|
742
|
+
} else if device.isExposureModeSupported(.autoExpose) {
|
|
743
|
+
device.exposureMode = .autoExpose
|
|
744
|
+
}
|
|
563
745
|
}
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
746
|
+
|
|
747
|
+
device.isSubjectAreaChangeMonitoringEnabled = true
|
|
748
|
+
|
|
749
|
+
device.unlockForConfiguration()
|
|
750
|
+
|
|
751
|
+
focusCompletionTimer = Timer.scheduledTimer(withTimeInterval: 2.0, repeats: false) { [weak self] _ in
|
|
752
|
+
DispatchQueue.main.async {
|
|
753
|
+
self?.hideFocusIndicatorWithCompletion()
|
|
754
|
+
}
|
|
567
755
|
}
|
|
568
|
-
|
|
569
|
-
call.resolve()
|
|
756
|
+
|
|
570
757
|
} catch {
|
|
571
|
-
|
|
758
|
+
print("Could not focus: \(error.localizedDescription)")
|
|
572
759
|
}
|
|
573
760
|
}
|
|
574
761
|
|
|
762
|
+
@objc private func subjectAreaDidChange(notification: NSNotification) {
|
|
763
|
+
DispatchQueue.main.async { [weak self] in
|
|
764
|
+
self?.hideFocusIndicatorWithCompletion()
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
NotificationCenter.default.removeObserver(self, name: .AVCaptureDeviceSubjectAreaDidChange, object: notification.object)
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
private func hideFocusIndicatorWithCompletion() {
|
|
771
|
+
guard let focusView = self.focusView else { return }
|
|
772
|
+
|
|
773
|
+
UIView.animate(withDuration: 0.2, animations: {
|
|
774
|
+
focusView.alpha = 0.0
|
|
775
|
+
focusView.transform = CGAffineTransform(scaleX: 0.8, y: 0.8)
|
|
776
|
+
}) { _ in
|
|
777
|
+
focusView.removeFromSuperview()
|
|
778
|
+
focusView.transform = CGAffineTransform.identity
|
|
779
|
+
self.isFocusAnimating = false
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
func showFocusView(at point: CGPoint) {
|
|
784
|
+
if isFocusAnimating {
|
|
785
|
+
self.focusView?.removeFromSuperview()
|
|
786
|
+
focusCompletionTimer?.invalidate()
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
// Create focus view if needed - but make it invisible
|
|
790
|
+
if self.focusView == nil {
|
|
791
|
+
self.focusView = UIView(frame: CGRect(x: 0, y: 0, width: 80, height: 80))
|
|
792
|
+
// Make the focus view completely transparent
|
|
793
|
+
self.focusView?.layer.borderColor = UIColor.clear.cgColor
|
|
794
|
+
self.focusView?.layer.borderWidth = 0.0
|
|
795
|
+
self.focusView?.layer.cornerRadius = 40
|
|
796
|
+
self.focusView?.backgroundColor = .clear
|
|
797
|
+
self.focusView?.alpha = 0.0
|
|
798
|
+
|
|
799
|
+
// Remove the inner circle to make it completely invisible
|
|
800
|
+
// No inner circle added
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
self.focusView?.center = point
|
|
804
|
+
self.focusView?.alpha = 0.0 // Keep invisible
|
|
805
|
+
self.focusView?.transform = CGAffineTransform.identity
|
|
806
|
+
self.previewView.addSubview(self.focusView!)
|
|
807
|
+
|
|
808
|
+
self.isFocusAnimating = true
|
|
809
|
+
|
|
810
|
+
// Skip the animation since the view is invisible
|
|
811
|
+
// Focus functionality still works, just no visual feedback
|
|
812
|
+
}
|
|
813
|
+
|
|
575
814
|
@objc func requestCameraPermission(_ call: CAPPluginCall) {
|
|
576
815
|
call.resolve()
|
|
577
816
|
}
|
|
@@ -672,4 +911,9 @@ public class CameraPreviewPlugin: CAPPlugin, AVCaptureVideoDataOutputSampleBuffe
|
|
|
672
911
|
takePhotoWithAVFoundation()
|
|
673
912
|
}
|
|
674
913
|
|
|
914
|
+
deinit {
|
|
915
|
+
NotificationCenter.default.removeObserver(self)
|
|
916
|
+
focusCompletionTimer?.invalidate()
|
|
917
|
+
}
|
|
918
|
+
|
|
675
919
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "capacitor-plugin-camera-forked",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.9",
|
|
4
4
|
"description": "A capacitor camera plugin - A custom Capacitor camera plugin with additional features.",
|
|
5
5
|
"main": "dist/plugin.cjs.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -41,33 +41,33 @@
|
|
|
41
41
|
"lint": "npm run eslint && npm run prettier -- --check && npm run swiftlint -- lint",
|
|
42
42
|
"fmt": "npm run eslint -- --fix && npm run prettier -- --write && npm run swiftlint -- --fix --format",
|
|
43
43
|
"eslint": "eslint . --ext ts",
|
|
44
|
-
"prettier": "prettier \"**/*.{css,html,ts,js,java}\"",
|
|
44
|
+
"prettier": "prettier \"**/*.{css,html,ts,js,java}\" --plugin=prettier-plugin-java",
|
|
45
45
|
"swiftlint": "node-swiftlint",
|
|
46
46
|
"docgen": "docgen --api CameraPreviewPlugin --output-readme README.md --output-json dist/docs.json",
|
|
47
|
-
"build": "npm run clean && npm run docgen && tsc && rollup -c rollup.config.
|
|
47
|
+
"build": "npm run clean && npm run docgen && tsc && rollup -c rollup.config.mjs",
|
|
48
48
|
"clean": "rimraf ./dist",
|
|
49
49
|
"watch": "tsc --watch",
|
|
50
50
|
"prepublishOnly": "npm run build"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
|
-
"@capacitor/android": "^
|
|
54
|
-
"@capacitor/core": "^
|
|
55
|
-
"@capacitor/docgen": "^0.0
|
|
56
|
-
"@capacitor/ios": "^
|
|
53
|
+
"@capacitor/android": "^7.0.0",
|
|
54
|
+
"@capacitor/core": "^7.0.0",
|
|
55
|
+
"@capacitor/docgen": "^0.3.0",
|
|
56
|
+
"@capacitor/ios": "^7.0.0",
|
|
57
57
|
"@ionic/eslint-config": "^0.4.0",
|
|
58
|
-
"@ionic/prettier-config": "^
|
|
59
|
-
"@ionic/swiftlint-config": "^
|
|
58
|
+
"@ionic/prettier-config": "^4.0.0",
|
|
59
|
+
"@ionic/swiftlint-config": "^2.0.0",
|
|
60
60
|
"@types/recordrtc": "^5.6.14",
|
|
61
61
|
"eslint": "^8.57.0",
|
|
62
|
-
"prettier": "
|
|
63
|
-
"prettier-plugin-java": "
|
|
64
|
-
"rimraf": "^
|
|
65
|
-
"rollup": "^
|
|
66
|
-
"swiftlint": "^
|
|
62
|
+
"prettier": "^3.4.2",
|
|
63
|
+
"prettier-plugin-java": "^2.6.6",
|
|
64
|
+
"rimraf": "^6.0.1",
|
|
65
|
+
"rollup": "^4.30.1",
|
|
66
|
+
"swiftlint": "^2.0.0",
|
|
67
67
|
"typescript": "~4.1.5"
|
|
68
68
|
},
|
|
69
69
|
"peerDependencies": {
|
|
70
|
-
"@capacitor/core": "
|
|
70
|
+
"@capacitor/core": ">=7.0.0"
|
|
71
71
|
},
|
|
72
72
|
"prettier": "@ionic/prettier-config",
|
|
73
73
|
"swiftlint": "@ionic/swiftlint-config",
|