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. ……

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

无需翻墙|Stable Diffusion WebUI 安装|AI绘画

前言 最近终于有机会从围墙里往外看,了解到外面的世界已经有了天翻地覆的变化,感叹万千,笔者在本地mac,windows,linux,docker部署了不下20遍后,整理出来的linux极简避坑安装方案,供…

[Angular] 笔记 19:路由参数

油管视频 Route Parameters 路由参数是跟在 url 后面的数字,字符串,或者 数字字符串,例如如下 url 中的 123,此类参数会传给后端: www.facebook.com/profile/123 首先将 pokemon-template-form 组件移到 pokeman-ba…

Unity Meta Quest 一体机开发(十二):【手势追踪】Poke 交互 - 用手指点击由 3D 物体制作的 UI 按钮

文章目录 📕教程说明📕给玩家配置 HandPokeInteractor📕用 3D 物体制作可以被点击的 UI 按钮⭐搭建物体层级⭐给物体添加脚本⭐为脚本变量赋值 📕模仿官方样例按钮的样式📕在按钮上添加文字📕修改按钮图片 …

计算机网络 VLAN

路由器将多个局域网连接起来,而交换机将一个局域网里的设备连接起来。 路由器的端口分配局域网的网段(子网网段),局域网的内部设备的ip都在这个网段里,再由交换机将数据派发到目的设备,交换机是按照MAC地址…

【Spark精讲】一文讲透SparkSQL物理执行计划

SparkSQL整体计划生成流程 大体分三步: (1)由 SparkSqlParser 中的 AstBuilder执行节点访问,将语法树的各种Context节点转换成对应的 LogicalPlan 节点,从而成为一棵未解析的逻辑算子树(Unresolved LogicalPlan),此时的逻辑算子树…

k8s之kudeadm

kubeadm来快速的搭建一个k8s的集群: 二进制搭建适合大集群,50台以上主机 kubeadm更适合中小企业的业务集群 master:192.168.233.91 docker kubelet lubeadm kubectl flannel node1:192.168.233.92 docker kubelet lubeadm kubectl flannel…

vscode连接linux服务器

目录 下载vscode,这是微软开源软件,打开后到下载扩展页面 在下载扩展页面下载中文和ssh远程连接扩展 安装后会在左边新生成一个图标点击齿轮 选择第一个 配置连接信息 远程隧道右边刷新,等刷出来hostname的主机后 连接ip出来后&#x…

EasyNTS端口穿透服务新版本发布 0.8.7 增加隧道流量总数记录,可以知晓设备哪个端口耗费流量了

EasyNTS上云平台可通过远程访问内网应用,包含网络桥接、云端运维、视频直播等功能,极大地解决了现场无固定IP、端口不开放、系统权限不开放等问题。平台可提供一站式上云服务,提供直播上云、设备上云、业务上云、运维上云服务,承上…

云计算:OpenStack 配置云主机实例的存储挂载并实现外网互通

目录 一、实验 1. 环境 2.配置存储挂载 3.云主机实例连接外部网络(SNAT) 4.外部网络连接云主机实例(DNAT) 二、问题 1.云主机 ping 不通外部网络 2.nova list 查看云主机列表报错 3.nova list 与 virsh list --all有何区…

jvm实战之-常用jvm命令的使用

各命令的使用 JMAP 1、查看内存信息,对象实例数、对象占有大小 jmap -histo 进程号>./log.txt2、查看堆的配置信息和使用情况 jmap - heap 进程号3、将堆的快照信息dump下来,使用java自带的jvisualvm.exe打开分析 jmap -dump:formatb,filedump.h…

安装Windows版本沐神的autocut

参考 下载完autocut以后 1 下载ffmpeg

楼宇智慧能源消耗监测管理系统,楼宇中的能源“管家”

随着人口的增加,楼宇数据呈上涨趋势,但是楼宇智能建设在我国普及性远远不足,相比传统楼宇控制,智能楼宇控制系统对于楼宇内部的用电设备控制,能够更加的节约能源,降低成本。对于现代化楼宇而言,…

SVM(支持向量机)-机器学习

支持向量机(Support Vector Machine,SVM)是一种用于分类和回归分析的监督学习算法。它属于机器学习中的一类强大而灵活的模型,广泛应用于模式识别、图像分类、自然语言处理等领域。 基本原理: SVM的基本原理是通过找到能够有效分…

o2o生活通全开源尊享版+多城市切换+企业付款+交友IM+平台快报

搭建教程 1.把 pigo2ov282.sql 文件里面的网址 test.souho.net 全部批量替换为你的自己的 2.使用 phpmyadmin 导入 pigo2ov282.sql 到你的数据库(直接访问/phpmyadmin 即可) 3.修改数据库文件/conf/db.php 里的数据库连接信息(请勿使用记事本…

数据结构入门到入土——ArrayList与顺序表

目录 一,线性表 二,顺序表 1.接口实现 三,ArrayList简介 四,ArrayList使用 1.ArrayList的构造 2.ArrayList常见操作 3.ArrayList的遍历 4.ArrayList的扩容机制 五,ArrayLisit的具体使用 杨辉三角 一&#x…

如何使用ArcGIS Pro自动矢量化建筑

相信你在使用ArcGIS Pro的时候已经发现了一个问题,那就是ArcGIS Pro没有ArcScan,在ArcGIS Pro中,Esri确实已经移除了ArcScan,没有了ArcScan我们如何自动矢量化地图,从地图中提取建筑等要素呢,这里为大家介绍…

SparkStreaming_window_sparksql_reids

1.5 window 滚动窗口滑动窗口 window操作就是窗口函数。Spark Streaming提供了滑动窗口操作的支持,从而让我们可以对一个滑动窗口内的数据执行计算操作。每次掉落在窗口内的RDD的数据,会被聚合起来执行计算操作,然后生成的RDD,会…

【Redis交响乐】Redis中的通用命令

文章目录 1. 基本命令 get set2. 全局命令(1)keys(2)exists(3)del(4)expire && ttl面试题: redis中key的过期策略是怎么实现的?定时器的实现原理(1)基于优先级队列/堆(2)基于时间轮实现的定时器 (5) type 我们知道,redis是按照键值对的方式存储数据的. Redis中基本的命…

pytest pytest-emoji通过表情包展示执行状态

pytest-emoji 是一个用于在 Pytest 测试运行期间显示 emoji 表情的插件。它可以为测试结果添加一些有趣的表情符号,以增加测试报告的可读性和趣味性。 使用 pytest-emoji 插件非常简单,只需按照以下步骤进行操作: 首先,确保已经安…

python实现图像的二维傅里叶变换——冈萨雷斯数字图像处理

原理 二维傅里叶变换是一种在图像处理中常用的数学工具,它将图像从空间域(我们通常看到的像素排列)转换到频率域。这种变换揭示了图像的频率成分,有助于进行各种图像分析和处理,如滤波、图像增强、边缘检测等。 在数学…