From 463cb348b773de0b80ec342afbdd7c97aeeebd5b Mon Sep 17 00:00:00 2001 From: lujianhui <1483564738@qq.com> Date: Tue, 29 Mar 2022 15:35:38 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A9=B1=E5=8A=A8=E5=AD=90=E7=B3=BB=E7=BB=9FCa?= =?UTF-8?q?mera=E6=A8=A1=E5=9D=97=E5=BC=80=E5=8F=91=E6=8C=87=E5=8D=97?= =?UTF-8?q?=E6=A0=87=E5=87=86=E5=8C=96=20=E4=BF=AE=E6=94=B9=E8=AF=B4?= =?UTF-8?q?=E6=98=8E=EF=BC=9A=201=E3=80=81=E6=B7=BB=E5=8A=A0Camera?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E9=A9=B1=E5=8A=A8=E6=A8=A1=E5=9E=8B.png=202?= =?UTF-8?q?=E3=80=81Camera=E6=A8=A1=E5=9D=97=E5=BC=80=E5=8F=91=E6=8C=87?= =?UTF-8?q?=E5=8D=97=E6=A0=87=E5=87=86=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: lujianhui <1483564738@qq.com> --- .../driver/driver-peripherals-camera-des.md | 28 +++++++++--------- ...1\345\212\250\346\250\241\345\236\213.png" | Bin 25269 -> 27003 bytes 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/zh-cn/device-dev/driver/driver-peripherals-camera-des.md b/zh-cn/device-dev/driver/driver-peripherals-camera-des.md index 5f084e2116..3eb096c087 100755 --- a/zh-cn/device-dev/driver/driver-peripherals-camera-des.md +++ b/zh-cn/device-dev/driver/driver-peripherals-camera-des.md @@ -4,11 +4,11 @@ ### 功能简介 OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Device Interface)接口,对下实现相机Pipeline模型,管理相机各个硬件设备。 -该驱动框架模型内部分为三层,依次为HDI实现层、框架层和适配层,各层基本概念如下: +该驱动框架模型内部分为三层,依次为HDI实现层、框架层和设备适配层,各层基本概念如下: + HDI实现层:实现OHOS(OpenHarmony Operation System)相机标准南向接口。 + 框架层:对接HDI实现层的控制、流的转发,实现数据通路的搭建,管理相机各个硬件设备等功能。 -+ 适配层:屏蔽底层芯片和OS(Operation System)差异,支持多平台适配。 ++ 设备适配层:屏蔽底层芯片和OS(Operation System)差异,支持多平台适配。 ### 运作机制 @@ -16,9 +16,9 @@ Camera模块主要包含服务、设备的初始化,数据通路的搭建, **图 1** 基于HDF驱动框架的Camera驱动模型  -    ![](figures/Camera模块驱动模型.png) +        ![](figures/Camera模块驱动模型.png) -1. 系统启动时创建CameraDeviceHost进程。进程创建后,首先枚举底层设备,创建(也可以通过配置表创建)管理设备树的DeviceManager类及其内部各个底层设备的对象,创建对应的CameraHost类实例并且将其注册到UHDF服务中,方便上层通过UHDF服务获取底层CameraDeviceHost的服务,从而操作底层设备。 +1. 系统启动时创建camera_host进程。进程创建后,首先枚举底层设备,创建(也可以通过配置表创建)管理设备树的DeviceManager类及其内部各个底层设备的对象,创建对应的CameraHost类实例并且将其注册到UHDF服务中,方便相机服务层通过UHDF服务获取底层CameraDeviceHost的服务,从而操作硬件设备。 2. Service通过CameraDeviceHost服务获取CameraHost实例,CameraHost可以获取底层的Camera能力,打开手电筒、调用Open接口打开Camera创建连接、创建DeviceManager(负责底层硬件模块上电)、创建CameraDevice(向上提供设备控制接口)。创建CameraDevice时会实例化PipelineCore的各个子模块,其中StreamPipelineCore负责创建Pipeline,MetaQueueManager负责上报metaData。 @@ -472,15 +472,15 @@ Camera驱动的开发过程主要包含以下步骤: ### 开发实例 -在/drivers/peripheral/camera/hal/init目录下有一个关于Camera的demo,开机后会在/system/bin下生成可执行文件ohos_camera_demo,该demo可以完成Camera的预览,拍照等基础功能。下面我们就以此demo为例讲述怎样用HDI接口去编写预览PreviewOn()和拍照CaptureON()的用例,可参考[ohos_camera_demo](https://gitee.com/openharmony/drivers_peripheral/tree/master/camera/hal/init)。 +在/drivers/peripheral/camera/hal/init目录下有一个关于Camera的demo,开机后会在/vendor/bin下生成可执行文件ohos_camera_demo,该demo可以完成Camera的预览,拍照等基础功能。下面我们就以此demo为例讲述怎样用HDI接口去编写预览PreviewOn()和拍照CaptureON()的用例,可参考[ohos_camera_demo](https://gitee.com/openharmony/drivers_peripheral/tree/master/camera/hal/init)。 -1. 在main函数中构造一个mainDemo 对象,该对象中有对Camera初始化、启停流、释放等控制的方法。下面mainDemo->InitSensors()函数为初始化CameraHost,mainDemo->InitCameraDevice()函数为初始化CameraDevice。 +1. 在main函数中构造一个CameraDemo 对象,该对象中有对Camera初始化、启停流、释放等控制的方法。下面mainDemo->InitSensors()函数为初始化CameraHost,mainDemo->InitCameraDevice()函数为初始化CameraDevice。 ``` int main(int argc, char** argv) { RetCode rc = RC_OK; - auto mainDemo = std::make_shared(); + auto mainDemo = std::make_shared(); rc = mainDemo->InitSensors(); // 初始化CameraHost if (rc == RC_ERROR) { CAMERA_LOGE("main test: mainDemo->InitSensors() error\n"); @@ -508,7 +508,7 @@ Camera驱动的开发过程主要包含以下步骤: 初始化CameraHost函数实现如下,这里调用了HDI接口ICameraHost::Get()去获取demoCameraHost,并对其设置回调函数。 ``` - RetCode Hos3516Demo::InitSensors() + RetCode CameraDemo::InitSensors() { demoCameraHost_ = ICameraHost::Get(DEMO_SERVICE_NAME); if (demoCameraHost_ == nullptr) { @@ -525,7 +525,7 @@ Camera驱动的开发过程主要包含以下步骤: 初始化CameraDevice函数实现如下,这里调用了GetCameraIds(cameraIds_),GetCameraAbility(cameraId, ability_),OpenCamera(cameraIds_.front(), callback, demoCameraDevice_)等接口实现了demoCameraHost的获取。 ``` - RetCode Hos3516Demo::InitCameraDevice() + RetCode CameraDemo::InitCameraDevice() { (void)demoCameraHost_->GetCameraIds(cameraIds_); const std::string cameraId = cameraIds_.front(); @@ -540,7 +540,7 @@ Camera驱动的开发过程主要包含以下步骤: 2. PreviewOn()接口包含配置流、开启预览流和启动Capture动作。该接口执行完成后Camera预览通路已经开始运转并开启了两路流,一路流是preview,另外一路流是capture或者video,两路流中仅对preview流进行capture动作。 ``` - static RetCode PreviewOn(int mode, const std::shared_ptr& mainDemo) + static RetCode PreviewOn(int mode, const std::shared_ptr& mainDemo) { rc = mainDemo->StartPreviewStream(); // 配置preview流 if (mode == 0) { @@ -557,7 +557,7 @@ Camera驱动的开发过程主要包含以下步骤: StartCaptureStream()、StartVideoStream()和StartPreviewStream()接口都会调用CreateStream()接口,只是传入的参数不同。 ``` - RetCode Hos3516Demo::StartVideoStream() + RetCode CameraDemo::StartVideoStream() { RetCode rc = RC_OK; if (isVideoOn_ == 0) { @@ -571,7 +571,7 @@ Camera驱动的开发过程主要包含以下步骤: CreateStream()方法调用HDI接口去配置和创建流,首先调用HDI接口去获取StreamOperation对象,然后创建一个StreamInfo。调用CreateStreams()和CommitStreams()实际创建流并配置流。 ``` - RetCode Hos3516Demo::CreateStreams(const int streamIdSecond, StreamIntent intent) + RetCode CameraDemo::CreateStreams(const int streamIdSecond, StreamIntent intent) { std::vector> streamInfos; std::vector>().swap(streamInfos); @@ -617,7 +617,7 @@ Camera驱动的开发过程主要包含以下步骤: CaptureON()接口调用streamOperator的Capture()方法获取Camera数据并轮转buffer,拉起一个线程接收相应类型的数据。 ``` - RetCode Hos3516Demo::CaptureON(const int streamId, const int captureId, CaptureMode mode) + RetCode CameraDemo::CaptureON(const int streamId, const int captureId, CaptureMode mode) { std::shared_ptr captureInfo = std::make_shared(); // 创建并填充CaptureInfo captureInfo->streamIds_ = {streamId}; @@ -644,7 +644,7 @@ Camera驱动的开发过程主要包含以下步骤: 3. ManuList()函数从控制台通过fgets()接口获取字符,不同字符所对应demo支持的功能不同,并打印出该demo所支持功能的菜单。 ``` - static void ManuList(const std::shared_ptr& mainDemo, + static void ManuList(const std::shared_ptr& mainDemo, const int argc, char** argv) { int idx, c; diff --git "a/zh-cn/device-dev/driver/figures/Camera\346\250\241\345\235\227\351\251\261\345\212\250\346\250\241\345\236\213.png" "b/zh-cn/device-dev/driver/figures/Camera\346\250\241\345\235\227\351\251\261\345\212\250\346\250\241\345\236\213.png" index 640eeec89f4e417551b38cfcb82ab85bc670c464..0e8695db6673ada92d9e8d156dd4d1f3fc9ddc84 100644 GIT binary patch literal 27003 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
    TYYKW%*8Sf2IFAGrY{J}6B(fm` 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