OpenHarmony南向之Camera简述

Camera驱动框架

该驱动框架模型内部分为三层,依次为HDI实现层、框架层和设备适配层:

  • HDI实现层:实现OHOS(OpenHarmony Operation System)相机标准南向接口。
  • 框架层:对接HDI实现层的控制、流的转发,实现数据通路的搭建,管理相机各个硬件设备等功能。
  • 设备适配层:屏蔽底层芯片和OS(Operation System)差异,支持多平台适配。

Camera模块主要包含服务、设备的初始化,数据通路的搭建,流的配置、创建、下发、捕获等。

基于HDF驱动框架的Camera驱动模型。

目前,Camera驱动框架主要提供了两种适配方式:V4L2和MPP。

  • MPP方式主要是针对海思系列的芯片,MPP是海思自己实现的多媒体框架,之前有介绍,具体可参见:《鸿蒙开发学习指南》
  • V4L2方式主要是针对Camera驱动是基于V4L2接口实现的芯片平台,比如Rockchip,展锐等

如果其他芯片平台想适配OH的Camera驱动框架,如果是V4L2实现可参考Rockchip的适配方式,如果是私有实现(比如ioctl方式)则需要自己重新添加新的适配层。

下面是展锐SL8541E平台在OH下的Camera适配框图,更详细,参考Rockchip方案适配的,都是基于V4L2,所以很类似:

Camera 驱动框架所在源码目录为:drivers/peripheral/camera

由上可以看出,Camera 驱动框架最核心的3部分:

  • pipeline
  • device_manager
  • driver_adapter

pipeline控制管理各个硬件模块,首先要获取对应设备的manager,通过manager获取其对应的controller,controller和对应的驱动进行交互

V4L2的适配

这里我们主要看下基于V4L2的适配,以rk3568为例,主要涉及到如下几块:

  • platform平台通用公共代码: drivers/peripheral/camera/hal/adapter/platform/v4l2
  • chipset定制化代码: device/board/hihope/rk3568/camera/
  • hcs配置文件: vendor/hihope/rk3568/hdf_config/uhdf/camera

platform公共代码

platform为平台性公共代码,如linux标准v4l2适配接口定义,为v4l2框架适配的通用node.以及为v4l2框架适配的通用device_manager等

目录结构如下:

  • device_manager

device_manager 目录存放着向北与pipeline向南与v4l2 adapter交互的代码。

  • driver_adapter

driver_adapter 目录中存放着v4l2协议相关代码。可通过它们实现与v4l2底层驱动交互。

  • pipeline_core

Pipeline_core 目录与 drivers/peripheral/camera/hal/pipeline_core中代码组合为pipeline框架。v4l2_source_node 和 uvc_node为v4l2框架适配的通用node。

chipset定制化代码

chipset为具体某芯片平台相关代码。

目录结构如下:

device_manager目录下存放了rk3568适配过的sensor的相关配置文件,适配的camera sensor 读取设备能力的代码及相关配置文件,其中 project_hardware.h 比较关键,存放了device_manager支持当前chipset的设备列表

pipeline_core路径下存放了由chipset开发者为满足特点需求增加的pipeline node等。

hcs配置文件

  • device_info

vendor/hihope/rk3568/hdf_config/uhdf/device_info.hcs

  • config

vendor/hihope/rk3568/hdf_config/uhdf/camera

  • hdi_impl下的 camera_host_config.hcs为物理/逻辑Camera配置、能力配置,此处的物理/逻辑Camera配置,需要在hal内部使用,逻辑Camera及能力配置需要上报给上层,需按照所适配的芯片产品添加其能力配置。
  • pipeline_core下的 config.hcs为pipeline的连接方式,按场景划分每一路流由哪些Node组成,其连接方式是怎样的。使用或新增的node需要在代码中注册。
  • param.hcs为场景、流类型名及其id定义,pipeline内部是以流id区分流类型的,所以此处需要添加定义。

因config配置文件里面内容比较多,这里就举例了,具体可自行看源码

总结

以上的内容只是简单介绍了OpenHarmony南向的Camera框架,没有具体到代码分析,移植等细节。

要想成为一名鸿蒙高级开发,以上知识点是必须要掌握的,除此之外,还需要掌握一些鸿蒙应用开发相关的一些技术,需要我们共同去探索。

为了节省大家一些查找的时间,这边联合几位行业大佬,为大家准备了一份《鸿蒙南北双向开发》的学习导图从入门到进阶再到南向开发实战的一整套完整体系,想要学习了解更多鸿蒙开发的相关知识可以借鉴:《鸿蒙开发学习指南》

除了上面整理的思维导图以外,这里还特别整理的一份《鸿蒙 (Harmony OS)开发学习手册》给大家进行参考学习:

一、入门必看

1. 应用开发导读(ArkTS)

2. ……

二、HarmonyOS 概念

1. 系统定义

2. 技术架构

3. 技术特性

4. 系统安全

5........

三、如何快速入门?

1. 基本概念

2. 构建第一个ArkTS应用

3. 构建第一个JS应用

4. ……

四、开发基础知识

1. 应用基础知识

2. 配置文件

3. 应用数据管理

4. 应用安全管理

5. 应用隐私保护

6. 三方应用调用管控机制

7. 资源分类与访问

8. 学习ArkTS语言

9. ……

五、基于ArkTS 开发

1. Ability开发

2. UI开发

3. 公共事件与通知

4. 窗口管理

5. 媒体

6. 安全

7. 网络与链接

8. 电话服务

9. 数据管理

10. 后台任务(Background Task)管理

11. 设备管理

12. 设备使用信息统计

13. DFX

14. 国际化开发

15. 折叠屏系列

16. ……

更多了解更多鸿蒙开发的相关知识可以参考:《鸿蒙开发学习指南》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/307610.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对SPI总线上挂接多个X5045的读写操作

#include<reg51.h> //包含单片机寄存器的头文件 #include<intrins.h> //包含_nop_()函数定义的头文件 sbit SCKP3^4; //将SCK位定义为P3.4引脚 sbit SIP3^5; //将SI位定义为P3.5引脚 sbit SOP3^6; //将SO位定义为P3.6引脚 sbit CS1P3^7; …

day3双指针

输入一字符串&#xff0c;然后将该字符串中的单词分割开来 #include <iostream> #include <string.h> using namespace std; int main() {char str[1000];gets(str);int nstrlen(str);for(int i0;i<n;i){int ji;while(str[j]! &&j<n) j;for(int ki;k…

ROS仿真R2机器人之安装运行及MoveIt的介绍

R2(Robonaut 2)是NASA美国宇航局与GM通用联合推出的宇航人形机器人&#xff0c;能在国际空间站使用&#xff0c;可想而知其价格是非常昂贵&#xff0c;几百万美刀吧&#xff0c;还好NASA发布了一个R2机器人的Gazebo模型&#xff0c;使用模型就不需要花钱了&#xff0c;由于我们…

进行VMware日志管理

随着公司转向虚拟化其 IT 空间&#xff0c;虚拟环境日志监控正在占据日志管理的很大一部分,除了确保网络安全外&#xff0c;虚拟机日志监控还有助于管理虚拟化工具&#xff0c;这是最复杂的任务之一。 对虚拟环境日志的监控分析 当今公司中最受欢迎的虚拟平台之一是 VMware。…

LVM逻辑卷与扩容

目录 一.LVM&#xff1a; 1.什么是LVM&#xff1a; 2.LVM的基本核心组件&#xff1a; 3.LVM的基本命令&#xff1a; 二.逻辑卷的创建&#xff1a; 第一步&#xff0c;我们先要为虚拟机添加硬盘 然后我们要添加依赖包 然后我们要进行磁盘分区 再添加好分区后&#xff0…

雷军称小米汽车不可能卖 9 万 9;杭州破获重大勒索病毒案丨 RTE 开发者日报 Vol.116

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

Python中matplotlib库的使用1

1 matplotlib库简介 matplotlib是一个数学绘图库&#xff0c;可以将数据通过图形的方式显示出来&#xff0c;也就是数据可视化。 2 matplotlib库的安装 2.1 打开cmd窗口 点击键盘的“Win”“R”键&#xff0c;在弹出的“运行”对话框的“打开”栏中输入“cmd”&#xff0c;…

c语言-string.h库函数初识

目录 前言一、库函数strlen()1.1 strlen()介绍1.2 模拟实现strlen() 二、库函数strcpy()2.1 strcpy()介绍2.2 模拟实现strcpy() 三、库函数strcmp()3.1 strcmp()介绍3.3 模拟实现strcmp() 总结 前言 本篇文章介绍c语言<string.h>头文件中的库函数&#xff0c;包含strlen…

SpringBoot 2 集成Spark 3

前提条件: 运行环境&#xff1a;Hadoop 3.* Spark 3.* ,如果还未安装相关环境&#xff0c;请参考&#xff1a; Spark 初始 CentOS 7 安装Hadoop 3 单机版 SpringBoot 2 集成Spark 3 pom.xml <?xml version"1.0" encoding"UTF-8"?> <pro…

通用搜索的工作原理

了解 Google 的通用搜索结果为何如此重要&#xff0c;通用搜索的发展方向&#xff0c;以及它对您意味着什么。 让我们从回答一个显而易见的问题开始&#xff1a; 什么是通用搜索&#xff1f; 网络上有一些通用搜索的定义&#xff0c;但我更喜欢从马的嘴里听到这样的事情。 …

电商数据分析-03-电商数据采集

参考 最最最全数据仓库建设指南&#xff0c;速速收藏&#xff01;&#xff01; 第1章 数据仓库概念 数据仓库规划 1.1 数仓搭建 我们这里所说的数据仓库&#xff0c;是基于大数据体系的&#xff0c;里面包含标签类目&#xff0c;区别于传统的数据仓库。下面我们来将这张图分解…

openmediavault(OMV) (17)云相册(1)piwigo

简介 Piwigo是一种开源的在线照片库管理系统,它允许你创建和分享个人或团体的图像库。以下是关于Piwigo的一些特点: 图片管理:Piwigo提供了一个功能丰富的管理界面,用于上传、组织、标记和编辑图片。你可以通过文件夹结构或使用标签、关键字等方式来组织和分类你的照片。…