提交 598a3b16 编写于 作者: W wu

modified: zh-cn/device-dev/driver/driver-peripherals-camera-des.md

Signed-off-by: Nwu <wuzhimin8@huawei.com>
上级 0bb35dee
# Camera<a name="ZH-CN_TOPIC_0000001078436908"></a> # Camera<a name="ZH-CN_TOPIC_0000001078436908"></a>
- [概述](#section11660541593) - [Camera<a name="ZH-CN_TOPIC_0000001078436908"></a>](#camera)
- [开发指导](#section161941989596) - [概述<a name="section11660541593"></a>](#概述)
- [接口说明](#section1551164914237) - [开发指导<a name="section161941989596"></a>](#开发指导)
- [开发步骤](#section19806524151819) - [HDI接口说明<a name="section1551164914237"></a>](#hdi接口说明)
- [开发实例](#section1564411661810) - [开发步骤<a name="section19806524151819"></a>](#开发步骤)
- [开发实例<a name="section1564411661810"></a>](#开发实例)
## 概述<a name="section11660541593"></a> ## 概述<a name="section11660541593"></a>
...@@ -48,7 +49,7 @@ OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Driver Inter ...@@ -48,7 +49,7 @@ OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Driver Inter
### 开发步骤<a name="section19806524151819"></a> ### 开发步骤<a name="section19806524151819"></a>
下面分步骤描述了Camera驱动框架的主要接口,包括注册、检测;创建、捕获和销毁流;打开和关闭设备等接口(为了更清晰的展示和描述主要功能的实现部分,该章节删除了部分判错和LOG源码)。 下面分步骤描述了Camera驱动框架的主要接口,包括注册、检测;创建、捕获和销毁流;打开和关闭设备等接口(为了更清晰的展示和描述主要功能的实现部分,该章节删除了部分判错和LOG源码)。
#### 1. 注册CameraHost 1. 注册CameraHost
定义Camera的HdfDriverEntry结构体,该结构体中定义了CameraHost初始化的方法。 定义Camera的HdfDriverEntry结构体,该结构体中定义了CameraHost初始化的方法。
...@@ -63,7 +64,7 @@ OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Driver Inter ...@@ -63,7 +64,7 @@ OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Driver Inter
HDF_INIT(g_cameraHostDriverEntry); // 将Camera的HdfDriverEntry结构体注册到HDF上 HDF_INIT(g_cameraHostDriverEntry); // 将Camera的HdfDriverEntry结构体注册到HDF上
``` ```
#### 2. CameraHost初始化 2. CameraHost初始化
步骤1中提到的HdfCameraHostDriverBind接口提供了CameraServiceDispatch和CameraHostStubInstance的注册。这两个接口一个是远端调用CameraHost的方法,如OpenCamera(),SetFlashlight()等,另外一个是Camera设备的初始化,在开机时被调用。 步骤1中提到的HdfCameraHostDriverBind接口提供了CameraServiceDispatch和CameraHostStubInstance的注册。这两个接口一个是远端调用CameraHost的方法,如OpenCamera(),SetFlashlight()等,另外一个是Camera设备的初始化,在开机时被调用。
...@@ -122,7 +123,7 @@ OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Driver Inter ...@@ -122,7 +123,7 @@ OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Driver Inter
CameraHostStubInstance()接口最终调用CameraHostImpl::Init()方法,该方法会获取物理Camera,并对DeviceManager和PipelineCore进行初始化。 CameraHostStubInstance()接口最终调用CameraHostImpl::Init()方法,该方法会获取物理Camera,并对DeviceManager和PipelineCore进行初始化。
#### 3. 获取CamerHost 3. 获取CamerHost
调用Get()接口从远端CameraService中获取CameraHost对象。get()方法如下: 调用Get()接口从远端CameraService中获取CameraHost对象。get()方法如下:
...@@ -148,7 +149,7 @@ OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Driver Inter ...@@ -148,7 +149,7 @@ OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Driver Inter
} }
``` ```
#### 4. OpenCamera()接口 4. OpenCamera()接口
获取CameraHost对象,该对象中有五个方法,分别是SetCallback、GetCameraIds、GetCameraAbility、OpenCamera和SetFlashlight。下面着重描述OpenCamera接口。 获取CameraHost对象,该对象中有五个方法,分别是SetCallback、GetCameraIds、GetCameraAbility、OpenCamera和SetFlashlight。下面着重描述OpenCamera接口。
CameraHostProxy的OpenCamera()接口通过CMD_CAMERA_HOST_OPEN_CAMERA调用远端CameraHostStubOpenCamera()接口并获取ICameraDevice对象。 CameraHostProxy的OpenCamera()接口通过CMD_CAMERA_HOST_OPEN_CAMERA调用远端CameraHostStubOpenCamera()接口并获取ICameraDevice对象。
...@@ -215,7 +216,7 @@ OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Driver Inter ...@@ -215,7 +216,7 @@ OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Driver Inter
} }
``` ```
#### 5. 获取GetStreamOperator对象 5. 获取GetStreamOperator对象
IStreamOperator定义了一系列对流控制和操作的接口,主要有CreateStreams、CommitStreams、Capture、CancelCapture等。 IStreamOperator定义了一系列对流控制和操作的接口,主要有CreateStreams、CommitStreams、Capture、CancelCapture等。
...@@ -245,7 +246,7 @@ OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Driver Inter ...@@ -245,7 +246,7 @@ OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Driver Inter
} }
``` ```
#### 6. 创建流 6. 创建流
调用CreateStreams创建流前需要填充StreamInfo结构体,具体内容如下: 调用CreateStreams创建流前需要填充StreamInfo结构体,具体内容如下:
...@@ -288,7 +289,7 @@ OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Driver Inter ...@@ -288,7 +289,7 @@ OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Driver Inter
} }
``` ```
#### 7. 配置流 7. 配置流
CommitStreams()是配置流的接口,必须在创建流之后调用,其主要作用是初始化Pipeline和创建Pipeline。 CommitStreams()是配置流的接口,必须在创建流之后调用,其主要作用是初始化Pipeline和创建Pipeline。
...@@ -327,7 +328,7 @@ OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Driver Inter ...@@ -327,7 +328,7 @@ OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Driver Inter
} }
``` ```
#### 8. 捕获图像 8. 捕获图像
在调用Capture()接口前需要先填充CaptureInfo结构体,具体内容如下: 在调用Capture()接口前需要先填充CaptureInfo结构体,具体内容如下:
...@@ -369,7 +370,7 @@ OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Driver Inter ...@@ -369,7 +370,7 @@ OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Driver Inter
} }
``` ```
#### 9. 取消捕获和释放离线流 9. 取消捕获和释放离线流
StreamOperatorImpl类中的CancelCapture()接口的主要作用是根据captureId取消数据流的捕获。 StreamOperatorImpl类中的CancelCapture()接口的主要作用是根据captureId取消数据流的捕获。
...@@ -396,7 +397,7 @@ OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Driver Inter ...@@ -396,7 +397,7 @@ OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Driver Inter
} }
``` ```
#### 10. 关闭Camera设备 10. 关闭Camera设备
调用CameraDeviceImpl中的Close()来关闭CameraDevice,该接口调用deviceManager中的PowerDown()来给设备下电。 调用CameraDeviceImpl中的Close()来关闭CameraDevice,该接口调用deviceManager中的PowerDown()来给设备下电。
...@@ -405,7 +406,7 @@ OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Driver Inter ...@@ -405,7 +406,7 @@ OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Driver Inter
在/drivers/peripheral/camera/hal/init目录下有一个关于Camera的demo,开机后会在/system/bin下生成可执行文件ohos_camera_demo,该demo可以完成camera的预览,拍照等基础功能。下面我们就以此demo为例讲述怎样用HDI接口去编写预览PreviewOn()和拍照CaptureON()的用例。 在/drivers/peripheral/camera/hal/init目录下有一个关于Camera的demo,开机后会在/system/bin下生成可执行文件ohos_camera_demo,该demo可以完成camera的预览,拍照等基础功能。下面我们就以此demo为例讲述怎样用HDI接口去编写预览PreviewOn()和拍照CaptureON()的用例。
1.在main函数中构造一个Hos3516Demo对象,该对象中有对camera初始化、启停流、释放等控制的方法。下面mainDemo->InitSensors()函数为初始化CameraHost,mainDemo->InitCameraDevice()函数为初始化CameraDevice。 1. 在main函数中构造一个Hos3516Demo对象,该对象中有对camera初始化、启停流、释放等控制的方法。下面mainDemo->InitSensors()函数为初始化CameraHost,mainDemo->InitCameraDevice()函数为初始化CameraDevice。
``` ```
int main(int argc, char** argv) int main(int argc, char** argv)
...@@ -468,7 +469,7 @@ OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Driver Inter ...@@ -468,7 +469,7 @@ OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Driver Inter
} }
``` ```
2.PreviewOn()接口包含配置流、开启预览流和启动Capture动作。该接口执行完成后Camera预览通路已经开始运转并开启了两路流,一路流是preview,另外一路流是capture或者video,两路流中仅对preview流进行capture动作。 2. PreviewOn()接口包含配置流、开启预览流和启动Capture动作。该接口执行完成后Camera预览通路已经开始运转并开启了两路流,一路流是preview,另外一路流是capture或者video,两路流中仅对preview流进行capture动作。
``` ```
static RetCode PreviewOn(int mode, const std::shared_ptr<Hos3516Demo>& mainDemo) static RetCode PreviewOn(int mode, const std::shared_ptr<Hos3516Demo>& mainDemo)
...@@ -572,7 +573,7 @@ OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Driver Inter ...@@ -572,7 +573,7 @@ OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Driver Inter
} }
``` ```
3.ManuList()函数从控制台通过fgets()接口获取字符,不同字符所对应demo支持的功能不同,并打印出该demo所支持功能的菜单。 3. ManuList()函数从控制台通过fgets()接口获取字符,不同字符所对应demo支持的功能不同,并打印出该demo所支持功能的菜单。
``` ```
static void ManuList(const std::shared_ptr<Hos3516Demo>& mainDemo, static void ManuList(const std::shared_ptr<Hos3516Demo>& mainDemo,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册