15.Camera
以SC-3568HA为例,该板卡支持USB摄像头与MIPI摄像头
MIPI摄像头连接如下图:
目前该板卡支持GC8034、OV5695这两个MIPI摄像头
15.1 MIPI摄像头DTS配置
arch/arm64/boot/dts/rockchip/rk3568-toybrick-x0.dtsi
1&i2c4 {
2 status = "okay";
3
4 gc8034: gc8034@37 {
5 compatible = "galaxycore,gc8034";
6 reg = <0x37>;
7 clocks = <&cru CLK_CIF_OUT>;//CLK_CAM0_OUT>;
8 clock-names = "xvclk";
9 power-domains = <&power RK3568_PD_VI>;
10 pinctrl-names = "default";
11 pinctrl-0 = <&cif_clk>;
12 reset-gpios = <&gpio0 RK_PD6 GPIO_ACTIVE_LOW>;
13 pwdn-gpios = <&gpio4 RK_PB4 GPIO_ACTIVE_LOW>;
14 rockchip,grf = <&grf>;
15 rockchip,camera-module-index = <0>;
16 rockchip,camera-module-facing = "back";
17 rockchip,camera-module-name = "RK-CMK-8M-2-v1";
18 rockchip,camera-module-lens-name = "CK8401";
19 port {
20 gc8034_out: endpoint {
21 remote-endpoint = <&mipi_in_ucam1>;
22 data-lanes = <1 2 3 4>;
23 };
24 };
25 };
26
27 ......
28
29 ov5695: ov5695@36 {
30 status = "okay";
31 compatible = "ovti,ov5695";
32 reg = <0x36>;
33 clocks = <&cru CLK_CIF_OUT>;
34 clock-names = "xvclk";
35 power-domains = <&power RK3568_PD_VI>;
36 pinctrl-names = "default";
37 pinctrl-0 = <&cif_clk>;
38 reset-gpios = <&gpio0 RK_PD6 GPIO_ACTIVE_LOW>;
39 pwdn-gpios = <&gpio4 RK_PB4 GPIO_ACTIVE_LOW>;
40 rockchip,camera-module-index = <0>;
41 rockchip,camera-module-facing = "back";
42 rockchip,camera-module-name = "TongJu";
43 rockchip,camera-module-lens-name = "CHT842-MD";
44 port {
45 ov5695_out: endpoint {
46 remote-endpoint = <&mipi_in_ucam2>;
47 data-lanes = <1 2>;
48 };
49 };
50 };
51};
15.2 摄像头测试
使用鸿蒙系统自带的摄像头应用测试:
测试预览,拍照,录像都正常
15.3 摄像头 API使用与实践
1.标准API使用方法
备注
本模块为开发者提供一套简单且易于理解的相机服务接口,开发者通过调用接口可以开发相机应用。 应用通过访问和操作相机硬件,实现基础操作,如预览、拍照和录像;还可以通过接口组合完成更多操作,如控制闪光灯和曝光时间、对焦或调焦等。
camera标准接口
@ohos.multimedia.camera (相机管理)(系统接口)
API使用说明
使用camera相关API开发时候,需要先了解熟悉第一个open Harmony工程的创建,相关文档 Hello World应用以及部署
- 在使用一个API时,需要注意以下几点:
API权限说明
API的参数与返回值
API调用错误的时候,参考API错误码和通用错误码
API示例的正确使用
如下图所示,即为标准API文档
官方标准开发文档
2.社区Demo
简介
为了帮助开发者更快速的使用板子开发和学习,我们在gitee上提供了一个WiFi相关的使用示例,每一个项目都是独立的DevEco Studio工程,开发者可以将工程导入到DevEco Studio中即可,通过浏览代码、编译工程、安装和运行应用示例来了解应用示例中涉及API的使用方法。
小技巧
在导入社区Demo工程的时候,需要开发者需要注意本地的开发环境是否与项目的一致,即本地SDK是否与项目SDK一致。
导入模块
在使用Camera标准API的时候,最重要的一步是导入Camera的模块,才能使用Camera相应的API接口。通常模块导入是在文件头导入 导入模块如下: ** import camera from '@ohos.multimedia.camera'**
API 介绍
camera.getCameraManager(获取相机管理器实例)
getCameraManager(context: Context): CameraManager
getSupportedCameras(获取支持指定的相机设备对象)
getSupportedCameras(): Array<CameraDevice>
getSupportedOutputCapability(查询相机设备支持的输出能力)
getSupportedOutputCapability(camera: CameraDevice): CameraOutputCapability
isCameraMuted(查询相机当前的禁用状态)
isCameraMuted(): boolean
createCameraInput(使用CameraDevice对象创建CameraInput实例)
createCameraInput(camera: CameraDevice): CameraInput
需要权限: ohos.permission.CAMERA
createPreviewOutput(创建预览输出对象)
createPreviewOutput(profile: Profile, surfaceId: string): PreviewOutput
CameraInput.open(打开相机,通过注册回调函数获取状态)
open(callback: AsyncCallback<void>): void
CameraInput.close(关闭相机,通过注册回调函数获取状态)
close(callback: AsyncCallback<void>): void
CameraInput.on(‘error’) (监听CameraInput的错误事件,通过注册回调函数获取结果)
on(type: ‘error’, camera: CameraDevice, callback: ErrorCallback): void
CameraInput.off(‘error’) (注销监听CameraInput的错误事件)
off(type: ‘error’, camera: CameraDevice, callback?: ErrorCallback): void
Demo主要实现源码
- camera.ets
3.代码编译
小技巧
代码编译详细流程可见,Hello World应用以及部署 中的第二部分(构建第一个页面部分内容)