未验证 提交 2a43b189 编写于 作者: K king_he 提交者: Gitee

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

Signed-off-by: Nking_he <6384784@qq.com>
上级 240a7aa9
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
### 功能简介<a name="2"></a> ### 功能简介<a name="2"></a>
OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Device Interface)接口,对下实现相机Pipeline模型,管理相机各个硬件设备。 OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Device Interface)接口,对下实现相机Pipeline模型,管理相机各个硬件设备。
该驱动框架模型内部分为三层,依次为HDI实现层、框架层和设备适配层各层基本概念如下: 该驱动框架模型内部分为三层,依次为HDI实现层、框架层和设备适配层各层基本概念如下:
+ HDI实现层:实现OHOS(OpenHarmony Operation System)相机标准南向接口。 + HDI实现层:实现OHOS(OpenHarmony Operation System)相机标准南向接口。
+ 框架层:对接HDI实现层的控制、流的转发,实现数据通路的搭建,管理相机各个硬件设备等功能。 + 框架层:对接HDI实现层的控制、流的转发,实现数据通路的搭建,管理相机各个硬件设备等功能。
...@@ -51,7 +51,7 @@ Camera模块主要用以相机预览、拍照、视频流等场景下对相机 ...@@ -51,7 +51,7 @@ Camera模块主要用以相机预览、拍照、视频流等场景下对相机
| 功能描述 | 接口名称 | | 功能描述 | 接口名称 |
| ---------------------------- | ------------------------------------------------------------ | | ---------------------------- | ------------------------------------------------------------ |
| 获取流控制器 | CamRetCode GetStreamOperator(<br/> const OHOS::sptr<IStreamOperatorCallback> &callback,<br/> OHOS::sptr<IStreamOperator> &streamOperator) | | 获取流控制器 | CamRetCode GetStreamOperator(const OHOS::sptr<IStreamOperatorCallback> &callback, OHOS::sptr<IStreamOperator> &streamOperator) |
| 更新设备控制参数 | CamRetCode UpdateSettings(const std::shared_ptr<CameraSetting> &settingss) | | 更新设备控制参数 | CamRetCode UpdateSettings(const std::shared_ptr<CameraSetting> &settingss) |
| 设置Result回调模式和回调函数 | CamRetCode SetResultMode(const ResultCallbackMode &mode) | | 设置Result回调模式和回调函数 | CamRetCode SetResultMode(const ResultCallbackMode &mode) |
| 获取使能的ResultMeta | CamRetCode GetEnabledResults(std::vector<MetaType> &results) | | 获取使能的ResultMeta | CamRetCode GetEnabledResults(std::vector<MetaType> &results) |
...@@ -73,8 +73,8 @@ Camera模块主要用以相机预览、拍照、视频流等场景下对相机 ...@@ -73,8 +73,8 @@ Camera模块主要用以相机预览、拍照、视频流等场景下对相机
| ------------------------------ | ------------------------------------------------------------ | | ------------------------------ | ------------------------------------------------------------ |
| 设置ICameraHost回调接口 | CamRetCode SetCallback(const OHOS::sptr<ICameraHostCallback> &callback) | | 设置ICameraHost回调接口 | CamRetCode SetCallback(const OHOS::sptr<ICameraHostCallback> &callback) |
| 获取当前可用的Camera设备ID列表 | CamRetCode GetCameraIds(std::vector\<std::string\> &cameraIds) | | 获取当前可用的Camera设备ID列表 | CamRetCode GetCameraIds(std::vector\<std::string\> &cameraIds) |
| 获取Camera设备能力集合 | CamRetCode GetCameraAbility(const std::string &cameraId,<br/> std::shared_ptr<CameraAbility> &ability) | | 获取Camera设备能力集合 | CamRetCode GetCameraAbility(const std::string &cameraId, std::shared_ptr<CameraAbility> &ability) |
| 打开Camera设备 | CamRetCode OpenCamera(const std::string &cameraId,<br/> const OHOS::sptr<ICameraDeviceCallback> &callback,<br/> OHOS::sptr<ICameraDevice> &device) | | 打开Camera设备 | CamRetCode OpenCamera(const std::string &cameraId, const OHOS::sptr<ICameraDeviceCallback> &callback, OHOS::sptr<ICameraDevice> &device) |
| 打开或关闭闪光灯 | CamRetCode SetFlashlight(const std::string &cameraId, bool &isEnable) | | 打开或关闭闪光灯 | CamRetCode SetFlashlight(const std::string &cameraId, bool &isEnable) |
- icamera_host_callback.h - icamera_host_callback.h
...@@ -96,30 +96,30 @@ Camera模块主要用以相机预览、拍照、视频流等场景下对相机 ...@@ -96,30 +96,30 @@ Camera模块主要用以相机预览、拍照、视频流等场景下对相机
| 功能描述 | 接口名称 | | 功能描述 | 接口名称 |
| -------------------------------- | ------------------------------------------------------------ | | -------------------------------- | ------------------------------------------------------------ |
| 查询是否支持添加参数对应的流 | CamRetCode IsStreamsSupported(<br/> OperationMode mode,<br/> const std::shared_ptr\<Camera::CameraMetadata\> &modeSetting,<br/> const std::vector&ltstd::shared_ptr&ltStreamInfo&gt> &info,<br/> StreamSupportType &type) | | 查询是否支持添加参数对应的流 | CamRetCode IsStreamsSupported(OperationMode mode, const std::shared_ptr\<Camera::CameraMetadata\> &modeSetting, const std::vector&ltstd::shared_ptr&ltStreamInfo&gt> &info, StreamSupportType &type) |
| 创建流 | CamRetCode CreateStreams(const std::vector<std::shared_ptr<StreamInfo>> &streamInfos) | | 创建流 | CamRetCode CreateStreams(const std::vector<std::shared_ptr<StreamInfo>> &streamInfos) |
| 释放流 | CamRetCode ReleaseStreams(const std::vector<int> &streamIds) | | 释放流 | CamRetCode ReleaseStreams(const std::vector<int> &streamIds) |
| 配置流 | CamRetCode CommitStreams(OperationMode mode,<br/> const std::shared_ptr<CameraMetadata> &modeSetting) | | 配置流 | CamRetCode CommitStreams(OperationMode mode, const std::shared_ptr<CameraMetadata> &modeSetting) |
| 获取流的属性 | CamRetCode GetStreamAttributes(<br/> std::vector<std::shared_ptr<StreamAttribute>> &attributes) | | 获取流的属性 | CamRetCode GetStreamAttributes(std::vector<std::shared_ptr<StreamAttribute>> &attributes) |
| 绑定生产者句柄和指定流 | CamRetCode AttachBufferQueue(int streamId, const OHOS::sptr\<OHOS::IBufferProducer\> &producer) | | 绑定生产者句柄和指定流 | CamRetCode AttachBufferQueue(int streamId, const OHOS::sptr\<OHOS::IBufferProducer\> &producer) |
| 解除生产者句柄和指定流的绑定关系 | CamRetCode DetachBufferQueue(int streamId) | | 解除生产者句柄和指定流的绑定关系 | CamRetCode DetachBufferQueue(int streamId) |
| 捕获图像 | CamRetCode Capture(int captureId,<br/> const std::shared_ptr<CaptureInfo> &info, bool isStreaming) | | 捕获图像 | CamRetCode Capture(int captureId, const std::shared_ptr<CaptureInfo> &info, bool isStreaming) |
| 取消捕获 | CamRetCode CancelCapture(int captureId) | | 取消捕获 | CamRetCode CancelCapture(int captureId) |
| 将指定流转换成离线流 | CamRetCode ChangeToOfflineStream(const std::vector<int> &streamIds,<br/> OHOS::sptr<IStreamOperatorCallback> &callback,<br/> OHOS::sptr<IOfflineStreamOperator> &offlineOperator) | | 将指定流转换成离线流 | CamRetCode ChangeToOfflineStream(const std::vector<int> &streamIds, OHOS::sptr<IStreamOperatorCallback> &callback, OHOS::sptr<IOfflineStreamOperator> &offlineOperator) |
- istream_operator_callback.h - istream_operator_callback.h
| 功能描述 | 接口名称 | | 功能描述 | 接口名称 |
| ---------------------------------------- | ------------------------------------------------------------ | | ---------------------------------------- | ------------------------------------------------------------ |
| 捕获开始回调,在捕获开始时调用 | void OnCaptureStarted(int32_t captureId, const std::vector<int32_t> &streamIds) | | 捕获开始回调,在捕获开始时调用 | void OnCaptureStarted(int32_t captureId, const std::vector<int32_t> &streamIds) |
| 捕获结束回调,在捕获结束时调用 | void OnCaptureEnded(int32_t captureId,<br/> const std::vector<std::shared_ptr<CaptureEndedInfo>> &infos) | | 捕获结束回调,在捕获结束时调用 | void OnCaptureEnded(int32_t captureId, const std::vector<std::shared_ptr<CaptureEndedInfo>> &infos) |
| 捕获错误回调,在捕获过程中发生错误时调用 | void OnCaptureError(int32_t captureId,<br/> const std::vector<std::shared_ptr<CaptureErrorInfo>> &infos) | | 捕获错误回调,在捕获过程中发生错误时调用 | void OnCaptureError(int32_t captureId, const std::vector<std::shared_ptr<CaptureErrorInfo>> &infos) |
| 帧捕获回调 | void OnFrameShutter(int32_t captureId,<br/> const std::vector<int32_t> &streamIds, uint64_t timestamp) | | 帧捕获回调 | void OnFrameShutter(int32_t captureId, const std::vector<int32_t> &streamIds, uint64_t timestamp) |
### 开发步骤<a name="7"></a> ### 开发步骤<a name="7"></a>
Camera驱动的开发过程主要包含以下步骤: Camera驱动的开发过程主要包含以下步骤:
1. **注册CameraHost** 1. 注册CameraHost
定义Camera的HdfDriverEntry结构体,该结构体中定义了CameraHost初始化的方法。 定义Camera的HdfDriverEntry结构体,该结构体中定义了CameraHost初始化的方法。
``` ```
...@@ -133,7 +133,7 @@ Camera驱动的开发过程主要包含以下步骤: ...@@ -133,7 +133,7 @@ Camera驱动的开发过程主要包含以下步骤:
HDF_INIT(g_cameraHostDriverEntry); // 将Camera的HdfDriverEntry结构体注册到HDF上 HDF_INIT(g_cameraHostDriverEntry); // 将Camera的HdfDriverEntry结构体注册到HDF上
``` ```
2. **初始化Host服务** 2. 初始化Host服务
步骤1中提到的HdfCameraHostDriverBind接口提供了CameraServiceDispatch和CameraHostStubInstance的注册。这两个接口一个是远端调用CameraHost的方法,如OpenCamera(),SetFlashlight()等,另外一个是Camera设备的初始化,在开机时被调用。 步骤1中提到的HdfCameraHostDriverBind接口提供了CameraServiceDispatch和CameraHostStubInstance的注册。这两个接口一个是远端调用CameraHost的方法,如OpenCamera(),SetFlashlight()等,另外一个是Camera设备的初始化,在开机时被调用。
...@@ -142,7 +142,7 @@ Camera驱动的开发过程主要包含以下步骤: ...@@ -142,7 +142,7 @@ Camera驱动的开发过程主要包含以下步骤:
{ {
HDF_LOGI("HdfCameraHostDriverBind enter!"); HDF_LOGI("HdfCameraHostDriverBind enter!");
if (deviceObject == nullptr) { if (deviceObject == nullptr) {
HDF_LOGE("HdfCameraHostDriverBind: HdfDeviceObject is NULL !"); HDF_LOGE("HdfCameraHostDriverBind: HdfDeviceObject is NULL!");
return HDF_FAILURE; return HDF_FAILURE;
} }
HdfCameraService *hdfCameraService = reinterpret_cast<HdfCameraService *>(OsalMemAlloc(sizeof(HdfCameraService))); HdfCameraService *hdfCameraService = reinterpret_cast<HdfCameraService *>(OsalMemAlloc(sizeof(HdfCameraService)));
...@@ -192,7 +192,7 @@ Camera驱动的开发过程主要包含以下步骤: ...@@ -192,7 +192,7 @@ Camera驱动的开发过程主要包含以下步骤:
CameraHostStubInstance()接口最终调用CameraHostImpl::Init()方法,该方法会获取物理Camera,并对DeviceManager和PipelineCore进行初始化。 CameraHostStubInstance()接口最终调用CameraHostImpl::Init()方法,该方法会获取物理Camera,并对DeviceManager和PipelineCore进行初始化。
3. **获取Host服务** 3. 获取Host服务
调用Get()接口从远端CameraService中获取CameraHost对象。get()方法如下: 调用Get()接口从远端CameraService中获取CameraHost对象。get()方法如下:
...@@ -218,7 +218,7 @@ Camera驱动的开发过程主要包含以下步骤: ...@@ -218,7 +218,7 @@ Camera驱动的开发过程主要包含以下步骤:
} }
``` ```
4. **打开设备** 4. 打开设备
CameraHostProxy对象中有五个方法,分别是SetCallback、GetCameraIds、GetCameraAbility、OpenCamera和SetFlashlight。下面着重描述OpenCamera接口。 CameraHostProxy对象中有五个方法,分别是SetCallback、GetCameraIds、GetCameraAbility、OpenCamera和SetFlashlight。下面着重描述OpenCamera接口。
CameraHostProxy的OpenCamera()接口通过CMD_CAMERA_HOST_OPEN_CAMERA调用远端CameraHostStubOpenCamera()接口并获取ICameraDevice对象。 CameraHostProxy的OpenCamera()接口通过CMD_CAMERA_HOST_OPEN_CAMERA调用远端CameraHostStubOpenCamera()接口并获取ICameraDevice对象。
...@@ -285,7 +285,7 @@ Camera驱动的开发过程主要包含以下步骤: ...@@ -285,7 +285,7 @@ Camera驱动的开发过程主要包含以下步骤:
} }
``` ```
5. **获取流** 5. 获取流
CameraDeviceImpl定义了GetStreamOperator、UpdateSettings、SetResultMode和GetEnabledResult等方法,获取流操作方法如下: CameraDeviceImpl定义了GetStreamOperator、UpdateSettings、SetResultMode和GetEnabledResult等方法,获取流操作方法如下:
...@@ -299,7 +299,7 @@ Camera驱动的开发过程主要包含以下步骤: ...@@ -299,7 +299,7 @@ Camera驱动的开发过程主要包含以下步骤:
} }
spCameraDeviceCallback_ = callback; spCameraDeviceCallback_ = callback;
if (spStreamOperator_ == nullptr) { if (spStreamOperator_ == nullptr) {
// 这里new了一个spStreamOperator对象传递给调用者,以便对stream进行各种操作。 // 这里新建一个spStreamOperator对象传递给调用者,以便对stream进行各种操作。
spStreamOperator_ = new(std::nothrow) StreamOperatorImpl(spCameraDeviceCallback_, shared_from_this()); spStreamOperator_ = new(std::nothrow) StreamOperatorImpl(spCameraDeviceCallback_, shared_from_this());
if (spStreamOperator_ == nullptr) { if (spStreamOperator_ == nullptr) {
CAMERA_LOGW("create stream operator failed."); CAMERA_LOGW("create stream operator failed.");
...@@ -315,7 +315,7 @@ Camera驱动的开发过程主要包含以下步骤: ...@@ -315,7 +315,7 @@ Camera驱动的开发过程主要包含以下步骤:
} }
``` ```
6. **创建流** 6. 创建流
调用CreateStreams创建流前需要填充StreamInfo结构体,具体内容如下: 调用CreateStreams创建流前需要填充StreamInfo结构体,具体内容如下:
...@@ -439,17 +439,17 @@ Camera驱动的开发过程主要包含以下步骤: ...@@ -439,17 +439,17 @@ Camera驱动的开发过程主要包含以下步骤:
} }
``` ```
9. **取消捕获和释放离线流** 9. 取消捕获和释放离线流
StreamOperatorImpl类中的CancelCapture()接口的主要作用是根据captureId取消数据流的捕获。 StreamOperatorImpl类中的CancelCapture()接口的主要作用是根据captureId取消数据流的捕获。
``` ```
CamRetCode StreamOperatorImpl::CancelCapture(int captureId) CamRetCode StreamOperatorImpl::CancelCapture(int captureId)
{ {
auto itr = camerCaptureMap_.find(captureId); //根据captureId 在Map中查找对应的CameraCapture对象 auto itr = camerCaptureMap_.find(captureId); // 根据captureId 在Map中查找对应的CameraCapture对象
RetCode rc = itr->second->Cancel(); //调用CameraCapture中Cancel方法结束数据捕获 RetCode rc = itr->second->Cancel(); // 调用CameraCapture中Cancel方法结束数据捕获
std::unique_lock<std::mutex> lock(captureMutex_); std::unique_lock<std::mutex> lock(captureMutex_);
camerCaptureMap_.erase(itr); //擦除该CameraCapture对象 camerCaptureMap_.erase(itr); // 擦除该CameraCapture对象
return NO_ERROR; return NO_ERROR;
} }
``` ```
...@@ -459,14 +459,14 @@ Camera驱动的开发过程主要包含以下步骤: ...@@ -459,14 +459,14 @@ Camera驱动的开发过程主要包含以下步骤:
``` ```
CamRetCode StreamOperatorImpl::ReleaseStreams(const std::vector<int>& streamIds) CamRetCode StreamOperatorImpl::ReleaseStreams(const std::vector<int>& streamIds)
{ {
RetCode rc = DestroyStreamPipeline(streamIds); //销毁该streamIds 的pipeline RetCode rc = DestroyStreamPipeline(streamIds); // 销毁该streamIds 的pipeline
rc = DestroyHostStreamMgr(streamIds); rc = DestroyHostStreamMgr(streamIds);
rc = DestroyStreams(streamIds); //销毁该streamIds 的 Stream rc = DestroyStreams(streamIds); // 销毁该streamIds 的 Stream
return NO_ERROR; return NO_ERROR;
} }
``` ```
10. **关闭Camera设备** 10. 关闭Camera设备
调用CameraDeviceImpl中的Close()来关闭CameraDevice,该接口调用deviceManager中的PowerDown()来给设备下电。 调用CameraDeviceImpl中的Close()来关闭CameraDevice,该接口调用deviceManager中的PowerDown()来给设备下电。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册