openharmony camera 模块学习
openharmony camera 模块学习
openharmony camera模块学习
学习目的
理解openharmony camera整个模块的各方面内容,方便后续自己可以适配新设备的camera模块。
学习记录
看到哪写到哪,所以本文会比较随意。
缩写解释
HDI: hardware device interface(硬件设备接口)
HDF:hardware driver foundation(硬件驱动层)
OpenHarmony 系统 HDF 驱动框架主要由驱动基础框架、驱动程序、驱动配置文件和驱动接口这四个部分组成
OSAL:operation system abstraction layer(操作系统适配层)
V4L2:video for linux2(linux中关于视频设备的内核驱动)
在Linux中,视频设备是设备文件,可以像访问普通文件一样对其进行读写。
一、概述
OpenHarmony相机驱动框架模型对上实现相机HDI(Hardware Device Interface)接口,对下实现相机Pipeline模型,管理相机各个硬件设备。 该驱动框架模型内部分为三层,依次为HDI实现层、框架层和设备适配层,各层基本概念如下:
HDI实现层:实现OHOS(OpenHarmony Operation System)相机标准南向接口(向下至具体摄像机硬件设备)。
框架层:对接HDI实现层的控制、流的转发,实现数据通路的搭建,管理相机各个硬件设备等功能。
设备适配层:屏蔽底层芯片和OS(Operation System)差异,支持多平台适配。
请仔细理解引用的部分,可以为后续的学习节省大量时间,防止走弯路。
这个图更详细,是从https://blog.51cto.com/harmonyos/4903529粘来的。
引用一些要点来辅助学习
Camera HDI框架是通过绑定到HDF框架后在系统启动的时候完成初始化 Camera Host 实例。
应用层通过获取Camera Host 实例来得到设备支持的Camera的能力属性,并Open相应的设备。
应用层通过IPC通讯来调用HDI接口。
二、CAMERA HDF驱动框架
根据参考文章梳理出的图,后续可以对应具体代码去看。
可以参考这个https://blog.51cto.com/harmonyos/4903529。这个图比代码里的readme.md更详细一些。
代码位置为drivers/peripheral/camera。
撸了下代码,流程跟参考文章里的文字描述基本一致。
也可以参考这个去看
https://ost.51cto.com/posts/9858
三、用户应用层
可以参考oh版本的代码,本文看的是3.2-beta2的版本。
应该就是之前那个图中的 camera application 和camera service。
代码位置为drivers/peripheral/camera。当然这个目录里还有camera架构的其他模块代码。
具体点应该是peripheral\camera\hal\adapter\platform\v4l2\src\driver_adapter\main_test\v4l2_main.cpp
猜测相机的其他功能也是调用ioctl从用户态到达内核态。到达内核态后的操作流程目前还没有看到。
回看后发现不太建议看V4L2的,建议看华为的demo,更清晰peripheral\camera\hal\init\demo_main.cpp。可以更清晰的发现应用层和HDI层的联系。
四、camera应用通过ioctl到达内核态后的处理
待学习
五、HDI适配硬件
具体代码目录为drivers\peripheral\camera\hal\adapter\platform
目前里面有mpp和v4l2两种。mpp应该是海思(MPP)媒体处理软件平台。
新建硬件设备的设备管理类去继承devicemanager,然后实现父类中的各个接口即可,比如powerup之类的。可以参考peripheral\camera\hal\adapter\platform\v4l2\src\device_manager\v4l2_device_manager.cpp。
借鉴https://ost.51cto.com/posts/9881文章中CameraPowerUp()的讲解。
六、具体硬件适配
参考https://ost.51cto.com/posts/22242
没有实操,感觉挺麻烦,需要对整个oh系统有一定的理解才可以。
后续如果亲自操刀的话会补充。
七、PipelineCore和Stream
CameraHostImpl::Init()创建CameraDevice实例对象的时候会实例化PipelineCore的各个子模块包括HostStreamMgr、StreamPipelineCore。
总结
需要慢慢沉下心去研究camera整体架构,各个子模块的功能,与模块间的联系交互。
参考文章
https://ost.51cto.com/posts/22242
https://blog.51cto.com/harmonyos/4903529
https://www.seaxiang.com/blog/06b9a30dca2c4395bdd0d64592f11238
https://gitee.com/openharmony/drivers_peripheral/tree/master/camera
https://gitee.com/openharmony/drivers_peripheral/blob/master/camera/README_zh.md
https://blog.csdn.net/weixin_42203498/article/details/126753239
https://blog.csdn.net/m0_37033731/article/details/124587908
更多推荐
所有评论(0)