本示例主要展示了相机的相关功能,使用[libohcamera.so] 当前版本sample仅用作联调,最新sdk未带相机c接口头文件。 接口实现相机的预览、拍照、录像、前后置摄像头切换进行拍照、录像,以及闪光灯、变焦、对焦、曝光等控制类功能。
相机权限 | 图片和视频权限 | 麦克风权限 | 预览界面 |
---|---|---|---|
使用说明 (因RK3568设备硬件能力,现仅支持验证1、2、3、9、10、13)
entry/src/main
|-- cpp
| |-- CMakeLists.txt // Cmake打包配置文件,编译工程动态库脚本,依赖头文件、cpp以及相关依赖
| |-- camera_manager.cpp // 相机基本功能接口定义cpp实现侧
| |-- camera_manager.h // 相机基本功能接口定义头文件
| |-- main.cpp // NAPI实现JS与C++通信的接口
| |-- types
| `-- libentry
| |-- index.d.ts // 导入NAPI接口供JS调用
| `-- oh-package.json5 // 接口注册配置文件
|-- ets
| |-- Dialog
| | |-- mainDialog.ets // 打开相机APP弹出的网络权限设置
| | `-- settingDialog.ets // 相机APP设置界面布局
| |-- MainAbility
| | `-- MainAbility.ts // 对Ability生命周期管理
| |-- common
| | |-- Constants.ts // 基本参数枚举:纵横比、设备类型、视频帧数
| | |-- DisplayCalculator.ts // 计算界面宽高显示数值
| | |-- settingItem.ets // 设置栏
| | |-- settingPublicLayout.ets // 设置栏公共区域
| | `-- settingRightLayout.ets // 设置栏右边区域
| |-- entryability
| | `-- EntryAbility.ts // Ability的生命周期回调内容
| |-- model
| | |-- DateTimeUtil.ts // 日期工具
| | |-- Logger.ts // 日志工具
| | `-- MediaUtils.ts // 媒体工具
| |-- pages
| | `-- Index.ets // Ability实现的应用的入口页面,相机APP首页
| `-- views
| |-- CountdownPage.ets // 倒计时UI页面布局
| |-- FlashingLightPage.ets // 闪光灯UI界面布局
| |-- SlidePage.ets // 滑动滑块UI界面布局
| |-- dividerPage.ets // 分割线UI布局
| |-- focusAreaPage.ets // 对焦区域设置(焦点、侧光点)、单指竖直方向拖动触发曝光补偿设置
| |-- focusPage.ets // 变焦、对焦、曝光、刻度的图标设置、值的设置
| `-- modeSwitchPage.ets // 相机功能模式切换,开启预览、拍照、录像
相机功能接口实现在CameraManager.cpp中,源码参考:CameraManager.cpp
在NDKCamera构造函数里完成一个相机生命周期初始化的过程,包括调用OH_Camera_GetCameraMananger获取CameraMananger,调用OH_CameraManager_CreateCaptureSession创建CaptureSession,调用CaptureSessionRegisterCallback创建CaptureSession注册回调,调用GetSupportedCameras获取支持的camera设备,调用GetSupportedOutputCapability获取支持的camera设备能力集,调用CreatePreviewOutput创建预览输出,调用CreateCameraInput创建相机输入,调用CameraInputOpen打开相机输入,调用CameraManagerRegisterCallback创建CameraManager注册回调,最后调用SessionFlowFn开启Session。
其中SessionFlowFn是一个开启预览的动作,主要流程包括:调用OH_CaptureSession_BeginConfig开始配置会话,调用OH_CaptureSession_AddInput把CameraInput加入到会话,调用OH_CaptureSession_AddPreviewOutput把previewOutput加入到会话,调用OH_CaptureSession_CommitConfig提交配置信息,调用OH_CaptureSession_Start开始会话工作,还有一步是在开启预览的同时调用IsFocusMode启动对焦功能,这边后面会涉及到。
在NDKCamera析构函数里完成对相机生命周期释放的过程,调用OH_CameraManager_DeleteSupportedCameras删除支持的camera设备,调用OH_CameraManager_DeleteSupportedCameraOutputCapability删除支持的camera设备能力集,调用OH_Camera_DeleteCameraMananger删除camera manager。
拍照功能相关接口封装在StartPhoto接口中,主要包含以下流程:调用SessionStop关闭session,调用SessionBegin做session的一个预置动作,调用CreatePhotoOutput创建相机输出,调用OH_CaptureSession_AddPhotoOutput将hotoOutput添加至session中,调用SessionCommitConfig提交session,在调用SessionStart开启session,最后调用TakePicture接口开启拍照动作。
录像功能相关接口封装在StartVideo接口中,主要包含以下流程:调用SessionStop关闭session,调用SessionBegin做session的一个预置动作,调用OH_CaptureSession_RemovePhotoOutput移除相机拍照输出,再调用CreatePhotoOutput创建相机输出,调用AddPhotoOutput将相机输出添加至session中,调用CreateVideoOutput创建录像输出,调用AddVideoOutput将录像输出添加至session中,然后再调用SessionCommitConfig、SessionStart对session进行提交和开启,最后调用VideoOutputRegisterCallback对VideoOutput注册回调。
闪光灯功能相关接口封装在HasFlashFn接口中,主要包含以下流程:调用OH_CaptureSession_HasFlash检测是否支持闪光灯设备,再调用OH_CaptureSession_IsFlashModeSupported检测闪光灯模式是否支持,然后调用OH_CaptureSession_SetFlashMode设置闪光灯模式,最后调用OH_CaptureSession_GetFlashMode获取当前设备的闪光灯模式。
变焦功能相关接口封装在setZoomRatioFn接口中,主要包含以下流程:调用OH_CaptureSession_GetZoomRatioRange获取支持的变焦范围,调用OH_CaptureSession_SetZoomRatio设置变焦,调用OH_CaptureSession_GetZoomRatio获取当前设备的变焦值。
曝光功能相关接口封装在IsExposureModeSupportedFn接口中,主要包含以下流程:调用OH_CaptureSession_IsExposureModeSupported判断是否支持曝光模式,然后调用OH_CaptureSession_SetExposureMode设置曝光模式,调用OH_CaptureSession_GetExposureMode获取设置后的曝光模式。调用IsExposureBiasRange接口获取曝光补偿,其中包含调用OH_CaptureSession_GetExposureBiasRange获取曝光补偿的范围,调用OH_CaptureSession_SetExposureBias设置曝光点,调用OH_CaptureSession_GetExposureBias获取曝光点。
对焦功能相关接口封装在IsFocusMode接口中,主要包含以下流程:调用OH_CaptureSession_IsFocusModeSupported判断是否支持对焦模式,调用OH_CaptureSession_SetFocusMode设置对焦模式,调用OH_CaptureSession_GetFocusMode获取设置后的对焦模式。调用IsFocusPoint接口获取对焦点,其中包括调用OH_CaptureSession_SetFocusPoint获取JS侧下发来的对焦点位,然后调用OH_CaptureSession_GetFocusPoint获取设置后的对焦点位。
视频防抖功能相关接口封装在IsVideoStabilizationModeSupportedFn接口中,主要包含以下流程:调用OH_CaptureSession_IsVideoStabilizationModeSupported接口查询是否支持指定的视频防抖模式,调用OH_CaptureSession_SetVideoStabilizationMode设置视频防抖,调用OH_CaptureSession_GetVideoStabilizationMode获取设置后的视频防抖模式。
回调接口设置:
相机预览、拍照、录像功能、前后置切换功能实现调用侧位于Index.ets,modeSwitchPage.ets,main.cpp中,源码参考:Index.ets,ModeSwitchPage.ets,main.cpp
相机闪光灯、变焦、对焦、曝光功能实现调用侧位于FlashingLightPage.ets,SlidePage.ets,focusAreaPage.ets中,源码参考:FlashingLightPage.ets,SlidePage.ets,FocusAreaPage.ets,main.cpp
不涉及
如需单独下载本工程,执行如下命令:
git init
git config core.sparsecheckout true
echo code/BasicFeature/Media/Camera > .git/info/sparse-checkout
git remote add origin https://gitee.com/openharmony/applications_app_samples.git
git pull origin master
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。