diff --git a/README.md b/README.md index 18bff45f..3576f4fb 100644 --- a/README.md +++ b/README.md @@ -254,6 +254,24 @@ import { CameraPreviewFlashMode } from '@capacitor-community/camera-preview'; const flashModes = await CameraPreview.getSupportedFlashModes(); const supportedFlashModes: CameraPreviewFlashMode[] = flashModes.result; ``` + + + +### getHorizontalFov() + +Get the horizontal FOV of camera the camera device currently started. Returns a float
+ +Please note that camera should be already started to get this value. + +```javascript + + +const cameraFovRequest = await CameraPreview.getHorizontalFov(); +const cameraFovRequest = cameraFovRequest.result; +``` + + + ### setFlashMode(options) Set the flash mode. See [FLASH_MODE](#camera_Settings.FlashMode) for details about the possible values for flashMode.
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..377fe788 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 @@ -163,6 +163,28 @@ public void getSupportedFlashModes(PluginCall call) { call.resolve(jsObject); } + + + + @PluginMethod + public void getHorizontalFov(PluginCall call) { + if (this.hasCamera(call) == false) { + call.reject("Camera is not running"); + return; + } + + Camera camera = fragment.getCamera(); + Camera.Parameters params = camera.getParameters(); + + float horizontalViewAngle = params.getHorizontalViewAngle(); + + JSObject jsObject = new JSObject(); + jsObject.put("result", horizontalViewAngle); + call.resolve(jsObject); + } + + + @PluginMethod public void setFlashMode(PluginCall call) { if (this.hasCamera(call) == false) { diff --git a/ios/Plugin/CameraController.swift b/ios/Plugin/CameraController.swift index a09e72a0..b722f463 100644 --- a/ios/Plugin/CameraController.swift +++ b/ios/Plugin/CameraController.swift @@ -323,7 +323,26 @@ extension CameraController { return supportedFlashModesAsStrings } + func getHorizontalFov() throws -> String { + var currentCamera: AVCaptureDevice? + switch currentCameraPosition { + case .front: + currentCamera = self.frontCamera! + case .rear: + currentCamera = self.rearCamera! + default: break + } + guard + let device = currentCamera + else { + throw CameraControllerError.noCamerasAvailable + } + + let horizontalFov = String(device.activeFormat.videoFieldOfView) + return horizontalFov + + } func setFlashMode(flashMode: AVCaptureDevice.FlashMode) throws { var currentCamera: AVCaptureDevice? switch currentCameraPosition { diff --git a/ios/Plugin/Plugin.m b/ios/Plugin/Plugin.m index 06fb55e1..b8fb86ce 100644 --- a/ios/Plugin/Plugin.m +++ b/ios/Plugin/Plugin.m @@ -10,6 +10,7 @@ CAP_PLUGIN_METHOD(captureSample, CAPPluginReturnPromise); CAP_PLUGIN_METHOD(flip, CAPPluginReturnPromise); CAP_PLUGIN_METHOD(getSupportedFlashModes, CAPPluginReturnPromise); + CAP_PLUGIN_METHOD(getHorizontalFov, CAPPluginReturnPromise); CAP_PLUGIN_METHOD(setFlashMode, CAPPluginReturnPromise); CAP_PLUGIN_METHOD(startRecordVideo, CAPPluginReturnPromise); CAP_PLUGIN_METHOD(stopRecordVideo, CAPPluginReturnPromise); diff --git a/ios/Plugin/Plugin.swift b/ios/Plugin/Plugin.swift index 044a9e68..698896c6 100644 --- a/ios/Plugin/Plugin.swift +++ b/ios/Plugin/Plugin.swift @@ -227,6 +227,18 @@ public class CameraPreview: CAPPlugin { } } + + + + @objc func getHorizontalFov(_ call: CAPPluginCall) { + do { + let horizontalFov = try self.cameraController.getHorizontalFov() + call.resolve(["result": horizontalFov]) + } catch { + call.reject("failed to get FOV") + } + } + @objc func setFlashMode(_ call: CAPPluginCall) { guard let flashMode = call.getString("flashMode") else { call.reject("failed to set flash mode. required parameter flashMode is missing") diff --git a/src/definitions.ts b/src/definitions.ts index 1e4efe00..2d0dc603 100644 --- a/src/definitions.ts +++ b/src/definitions.ts @@ -68,6 +68,9 @@ export interface CameraPreviewPlugin { getSupportedFlashModes(): Promise<{ result: CameraPreviewFlashMode[]; }>; + getHorizontalFov(): Promise<{ + result: any; + }>; setFlashMode(options: { flashMode: CameraPreviewFlashMode | string }): Promise; flip(): Promise; setOpacity(options: CameraOpacityOptions): Promise<{}>; diff --git a/src/web.ts b/src/web.ts index 5f9bf913..7d12121f 100644 --- a/src/web.ts +++ b/src/web.ts @@ -166,6 +166,15 @@ export class CameraPreviewWeb extends WebPlugin implements CameraPreviewPlugin { throw new Error('getSupportedFlashModes not supported under the web platform'); } + + async getHorizontalFov(): Promise<{ + result: any; + }> { + throw new Error('getHorizontalFov not supported under the web platform'); + } + + + async setFlashMode(_options: { flashMode: CameraPreviewFlashMode | string }): Promise { throw new Error('setFlashMode not supported under the web platform'); }