diff --git a/package/harmony/vision_camera.har b/package/harmony/vision_camera.har index 1a4be5f6e6..e01e195a09 100644 Binary files a/package/harmony/vision_camera.har and b/package/harmony/vision_camera.har differ diff --git a/package/harmony/vision_camera/src/main/cpp/VisionCameraViewJSIBinder.h b/package/harmony/vision_camera/src/main/cpp/VisionCameraViewJSIBinder.h index e525b2fc6e..78ade66763 100644 --- a/package/harmony/vision_camera/src/main/cpp/VisionCameraViewJSIBinder.h +++ b/package/harmony/vision_camera/src/main/cpp/VisionCameraViewJSIBinder.h @@ -26,6 +26,7 @@ class VisionCameraViewJSIBinder : public ViewComponentJSIBinder { object.setProperty(rt, "enableZoomGesture", true); object.setProperty(rt, "exposure", true); object.setProperty(rt, "zoom", true); + object.setProperty(rt, "isMirror", true); object.setProperty(rt, "audio", true); object.setProperty(rt, "video", true); object.setProperty(rt, "torch", true); diff --git a/package/harmony/vision_camera/src/main/ets/VisionCameraView.ets b/package/harmony/vision_camera/src/main/ets/VisionCameraView.ets index 3f35e43869..28fe0678fe 100644 --- a/package/harmony/vision_camera/src/main/ets/VisionCameraView.ets +++ b/package/harmony/vision_camera/src/main/ets/VisionCameraView.ets @@ -565,6 +565,8 @@ export struct VisionCameraView { }) .onLoad(() => { this.surfaceId = this.mXComponentController.getXComponentSurfaceId(); + let surfaceRotaion: SurfaceRotationOptions = {lock: true}; + this.mXComponentController.setXComponentSurfaceRotation(surfaceRotaion); }) .width(this.cameraState === cameraState.SCAN ? this.localDisplayWidth + 'px' : this.componentWidth + 'px') .height(this.cameraState === cameraState.SCAN ? this.localDisplayHeight + 'px' : diff --git a/package/harmony/vision_camera/src/main/ets/service/CameraSession.ts b/package/harmony/vision_camera/src/main/ets/service/CameraSession.ts index df9fae9b49..a8f388541e 100644 --- a/package/harmony/vision_camera/src/main/ets/service/CameraSession.ts +++ b/package/harmony/vision_camera/src/main/ets/service/CameraSession.ts @@ -29,6 +29,8 @@ const TAG: string = 'RNCameraSession' type ZoomRangeType = [number, number]; export default class CameraSession { + private isMirror: boolean = false; + private position: string = 'back'; context: Context = undefined; phAccessHelper: photoAccessHelper.PhotoAccessHelper = undefined; private cameraManager?: camera.CameraManager; @@ -71,7 +73,7 @@ export default class CameraSession { public previewProfile: camera.Profile = {} as camera.Profile; private photoCaptureSetting: camera.PhotoCaptureSetting = { rotation: camera.ImageRotation.ROTATION_0, - mirror: false, + mirror: this.isMirror, quality: camera.QualityLevel.QUALITY_LEVEL_MEDIUM, }; private videoStartParams: RecordVideoOptions = { @@ -141,6 +143,7 @@ export default class CameraSession { } await this.cameraRelease(); Logger.info(TAG, `changeCameraPosition: ${JSON.stringify(props.device?.position)}`); + this.position = props.device?.position; this.cameraManager = this.getCameraManagerFn(); this.initCamera(surfaceId, props, mediaModel) } @@ -197,6 +200,10 @@ export default class CameraSession { * 初始化props参数 */ async initProps(props) { + this.position = props.device?.position; + if (props.isMirror !== undefined && props.device?.position !== undefined) { + this.setMirror(props.isMirror, props.device?.position); + } if (props.exposure !== undefined) { this.setExposure(props.exposure); } @@ -217,6 +224,14 @@ export default class CameraSession { } } + setMirror(isMirror, position) { + if ('front' === position) { + this.photoCaptureSetting.mirror = !isMirror; + } else { + this.photoCaptureSetting.mirror = isMirror; + } + } + async initVideoSession(currentDevice: camera.CameraDevice, surfaceId: string, props: VisionCameraViewSpec.RawProps) { this.setAudio(props.audio) @@ -446,7 +461,7 @@ export default class CameraSession { videoBitRate = this.getBitRateMultiplier(options.videoBitRate) } - let fps = props.fps || 30; + let fps = props.fps | 30; let { min:minFps, max:maxFps } = this.videoProfile.frameRateRange; if (fps > maxFps) { fps = maxFps; diff --git a/package/harmony/vision_camera/src/main/module.json5 b/package/harmony/vision_camera/src/main/module.json5 index 3ae20ff9bc..c029e34bb3 100644 --- a/package/harmony/vision_camera/src/main/module.json5 +++ b/package/harmony/vision_camera/src/main/module.json5 @@ -20,6 +20,11 @@ "name": "ohos.permission.APPROXIMATELY_LOCATION", "reason": "$string:location_reason", "usedScene": {} + }, + { + "name": "ohos.permission.GYROSCOPE", + "reason": "$string:location_reason", + "usedScene": {} } ] } diff --git a/package/src/NativeVisionCameraView.ts b/package/src/NativeVisionCameraView.ts index 1305596430..f547f6dff7 100644 --- a/package/src/NativeVisionCameraView.ts +++ b/package/src/NativeVisionCameraView.ts @@ -95,6 +95,7 @@ interface CodeScanner { export interface NativeVisionCameraProps extends ViewProps { codeScanner?: CodeScanner; fps?: WithDefault; + isMirror: boolean; videoHdr?: WithDefault; isActive: boolean; preview?: WithDefault; diff --git a/package/src/index.tsx b/package/src/index.tsx index 15eba3bbeb..279882f33c 100644 --- a/package/src/index.tsx +++ b/package/src/index.tsx @@ -97,6 +97,7 @@ export const Camera = forwardRef( style, device, isActive, + isMirror, preview, resizeMode, fps, @@ -459,6 +460,7 @@ export const Camera = forwardRef( ref={VisionCameraRef} style={StyleSheet.absoluteFill} codeScanner={codeScanner} + isMirror={isMirror} fps={fps} videoHdr={videoHdr} isActive={isActive} diff --git a/package/src/types/Camera.ts b/package/src/types/Camera.ts index 16decf3a6c..dc41ae5f43 100644 --- a/package/src/types/Camera.ts +++ b/package/src/types/Camera.ts @@ -8,6 +8,7 @@ export interface VisionCameraProps extends ViewProps { device: CameraDevice isActive: boolean preview?: boolean + isMirror: boolean video?: boolean audio?: boolean torch?: 'off' | 'on'