diff --git a/android/src/main/java/com/ahm/capacitor/camera/preview/CameraPreview.java b/android/src/main/java/com/ahm/capacitor/camera/preview/CameraPreview.java index 784a15b6..650b043f 100644 --- a/android/src/main/java/com/ahm/capacitor/camera/preview/CameraPreview.java +++ b/android/src/main/java/com/ahm/capacitor/camera/preview/CameraPreview.java @@ -108,6 +108,25 @@ public void captureSample(PluginCall call) { fragment.takeSnapshot(quality); } + @PluginMethod + public void focusPoint(PluginCall call){ + if (this.hasCamera(call) == false) { + call.reject("Camera is not running"); + return; + } + Logger.debug("x:"+call.getInt("x")); + Logger.debug("y:"+call.getInt("y")); + fragment.setFocusArea(call.getInt("x"), call.getInt("y"), new Camera.AutoFocusCallback() { + public void onAutoFocus(boolean success, Camera camera) { + if (success) { + Logger.debug("onTouch:" + " setFocusArea() succeeded"); + } else { + Logger.debug("onTouch:" + " setFocusArea() did not suceed"); + } + } + }); + } + @PluginMethod public void stop(final PluginCall call) { bridge diff --git a/ios/Plugin/CameraController.swift b/ios/Plugin/CameraController.swift index a09e72a0..f2390538 100644 --- a/ios/Plugin/CameraController.swift +++ b/ios/Plugin/CameraController.swift @@ -279,6 +279,22 @@ extension CameraController { self.sampleBufferCaptureCompletionBlock = completion } + func focusPoint(x: Int, y: Int) throws{ + guard let device = self.currentCameraPosition == .rear ? rearCamera : frontCamera else { return } + do { + try device.lockForConfiguration() + let focusMode = AVCaptureDevice.FocusMode.continuousAutoFocus + if device.isFocusPointOfInterestSupported && device.isFocusModeSupported(focusMode) { + device.focusMode = AVCaptureDevice.FocusMode.locked; + device.focusPointOfInterest = CGPoint(x: CGFloat(x), y: CGFloat(y)) + device.focusMode = AVCaptureDevice.FocusMode.continuousAutoFocus; + } + device.unlockForConfiguration() + } catch { + debugPrint(error) + } + } + func getSupportedFlashModes() throws -> [String] { var currentCamera: AVCaptureDevice? switch currentCameraPosition { diff --git a/ios/Plugin/Plugin.swift b/ios/Plugin/Plugin.swift index 044a9e68..239f2762 100644 --- a/ios/Plugin/Plugin.swift +++ b/ios/Plugin/Plugin.swift @@ -288,4 +288,22 @@ public class CameraPreview: CAPPlugin { } } + @objc func focusPoint(_ call: CAPPluginCall){ + guard let x = call.getInt("x") else{ + call.reject("failed to set focuspoint, x is missing") + return + } + + guard let y = call.getInt("y") else{ + call.reject("failed to set focuspoint, x is missing") + return + } + do { + try self.cameraController.focusPoint(x: x, y: y) + call.resolve() + } catch { + call.reject("failed to set focus") + } + } + } diff --git a/src/definitions.ts b/src/definitions.ts index 1e4efe00..00f2bb86 100644 --- a/src/definitions.ts +++ b/src/definitions.ts @@ -71,4 +71,10 @@ export interface CameraPreviewPlugin { setFlashMode(options: { flashMode: CameraPreviewFlashMode | string }): Promise; flip(): Promise; setOpacity(options: CameraOpacityOptions): Promise<{}>; + focusPoint(options: CameraPreviewXY): void; } + +export interface CameraPreviewXY { + x?: number, + y?: number, +} \ No newline at end of file