15.Camera

以SC-3568HA为例,该板卡支持USB摄像头与MIPI摄像头

MIPI摄像头连接如下图:

CAM_0

目前该板卡支持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 摄像头测试

使用鸿蒙系统自带的摄像头应用测试:

CAM_1

测试预览,拍照,录像都正常

15.3 摄像头 API使用与实践

1.标准API使用方法

备注

本模块为开发者提供一套简单且易于理解的相机服务接口,开发者通过调用接口可以开发相机应用。 应用通过访问和操作相机硬件,实现基础操作,如预览、拍照和录像;还可以通过接口组合完成更多操作,如控制闪光灯和曝光时间、对焦或调焦等。

  • camera标准接口

    @ohos.multimedia.camera (相机管理)(系统接口)

  • API使用说明

    使用camera相关API开发时候,需要先了解熟悉第一个open Harmony工程的创建,相关文档 Hello World应用以及部署

    在使用一个API时,需要注意以下几点:
    • API权限说明

    • API的参数与返回值

    • API调用错误的时候,参考API错误码和通用错误码

    • API示例的正确使用

如下图所示,即为标准API文档

cameraDemo

  • 官方标准开发文档

2.社区Demo

  • 简介

    为了帮助开发者更快速的使用板子开发和学习,我们在gitee上提供了一个WiFi相关的使用示例,每一个项目都是独立的DevEco Studio工程,开发者可以将工程导入到DevEco Studio中即可,通过浏览代码、编译工程、安装和运行应用示例来了解应用示例中涉及API的使用方法。

    giteeCamera示例

小技巧

在导入社区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应用以及部署 中的第二部分(构建第一个页面部分内容)

4.代码运行效果

用以上标准API接口实现Camera Demo,如下图所示:

camera