【Mtk Camera开发学习】06 MTK 和 Qcom 平台支持通过 Camera 标准API 打开 USBCamera

本专栏内容针对 “知识星球”成员免费,欢迎关注公众号:小驰行动派,加入知识星球。
#MTK Camera开发学习系列 #小驰私房菜
Google 官方介绍文档:
https://source.android.google.cn/docs/core/camera/external-usb-cameras?hl=zh-cn

一、MTK平台支持通过标准接口打开USB Camera

1 修改目录 /device/
---
mediatek/mt***/device.mk | 4 ++++
.../hal/camera/external_camera_config.xml | 20 +++++++++++++++++++
mediatek/mt***/init.mt***.rc | 5 +++++
mediatek/mt***/manifest.xml | 1 +
mediatek/mt***/ueventd.mt**.rc | 2 ++
5 files changed, 32 insertions(+)
create mode 100644 mediatek/mt***/hal/camera/external_camera_config.xml
diff --git a/mediatek/mt***/device.mk b/mediatek/mt***/device.mk
index 00e67370..f1db63b6 100644
--- a/mediatek/mt**/device.mk
+++ b/mediatek/mt**/device.mk
@@ -226,6 +226,10 @@ PRODUCT_PACKAGES +=
vendor.mediatek.hardware.camera.isphal@1.0-impl
PRODUCT_PACKAGES += camerahalserver
PRODUCT_PACKAGES += android.hardware.camera.provider@2.6-service-mediatek
PRODUCT_PACKAGES += android.hardware.camera.provider@2.6-impl-mediatek
+PRODUCT_PACKAGES += android.hardware.camera.provider@2.4-impl
+PRODUCT_PACKAGES += android.hardware.camera.provider@2.4-external-service
+PRODUCT_COPY_FILES += \
+
device/mediatek/mt***/hal/camera/external_camera_config.xml:$(TARGET_COPY_OUT_VE
NDOR)/etc/external_camera_config.xml
PRODUCT_PACKAGES += libmtkcam_device1
PRODUCT_PACKAGES += libmtkcam_device3
PRODUCT_PACKAGES += camera.mt**
diff --git a/mediatek/mt6877/hal/camera/external_camera_config.xml
b/mediatek/mt6877/hal/camera/external_camera_config.xml
new file mode 100644
index 00000000..2884e131--- /dev/null
+++ b/mediatek/mt***/hal/camera/external_camera_config.xml
@@ -0,0 +1,20 @@
+<ExternalCamera>
+ <Provider>
+ <ignore> <!-- Internal video devices to be ignored by external camera
HAL -->
+ <id>0</id>
+ <id>1</id>
+ <id>2</id>
+ <id>3</id>
+ </ignore>
+ </Provider>
+ <Device>
+ <MaxJpegBufferSize bytes="3145728"/>
+ <NumVideoBuffers count="4"/>
+ <NumStillBuffers count="2"/>
+ <FpsList>
+ <Limit width="640" height="480" fpsBound="30.0"/>
+ <Limit width="1280" height="720" fpsBound="30.0"/>
+ <Limit width="1920" height="1080" fpsBound="30.0"/>
+ </FpsList>
+ </Device>
+</ExternalCamera>diff --git a/mediatek/mt***/init.mt***.rc b/mediatek/mt***/init.mt***.rc
index 415bc50e..9b401e5f 100644
--- a/mediatek/mt***/init.mt***.rc
+++ b/mediatek/mt***/init.mt***.rc
@@ -415,6 +415,11 @@ on post-fs-data
chown media system /dev/video0
chmod 0660 /dev/video1
chown media system /dev/video1
+ chmod 0660 /dev/video5
+ chown media system /dev/video5
+ chmod 0660 /dev/video4
+ chown media system /dev/video4
+
mkdir /data/vendor/vcodec 0777 media system
mkdir /data/vendor/vcodec/log 0770 media system
mkdir /data/vendor/vcodec/in 0770 media system
diff --git a/mediatek/mt***/manifest.xml b/mediatek/mt***/manifest.xml
index 455924cb..badea3ec 100644
--- a/mediatek/mt***/manifest.xml
+++ b/mediatek/mt***/manifest.xml
@@ -27,6 +27,7 @@
<name>ICameraProvider</name>
<instance>internal/0</instance>
</interface>
+ <fqname>@2.4::ICameraProvider/external/0</fqname>
</hal>
<hal format="hidl">
<name>android.hardware.gatekeeper</name>diff --git a/mediatek/mt***/ueventd.mt***.rc b/mediatek/mt***/ueventd.mt***.rc
index 9b71ee5d..efcf2599 100644
--- a/mediatek/mt***/ueventd.mt***.rc
+++ b/mediatek/mt***/ueventd.mt***.rc
@@ -89,6 +89,8 @@
#v4l2 device
/dev/video* 0660 camera system
+/dev/video4 0666 media system
+/dev/video5 0666 media system
/dev/media* 0660 camera system
/dev/v4l-subdev* 0660 camera system
--
2 修改目录 /system/
---
sepolicy/prebuilts/api/31.0/public/cameraserver.te | 5 +++++
sepolicy/public/cameraserver.te | 5 +++++
2 files changed, 10 insertions(+)
diff --git a/sepolicy/prebuilts/api/31.0/public/cameraserver.te
b/sepolicy/prebuilts/api/31.0/public/cameraserver.te
index 7a29240c..f08dbc7b 100644
--- a/sepolicy/prebuilts/api/31.0/public/cameraserver.te
+++ b/sepolicy/prebuilts/api/31.0/public/cameraserver.te
@@ -74,3 +74,8 @@ userdebug_or_eng(`
allow cameraserver su:fifo_file { read write };
allow cameraserver su:unix_stream_socket { read write };
')
+
+
+allow cameraserver device:dir r_dir_perms;
+allow cameraserver video_device:dir r_dir_perms;
+allow cameraserver video_device:chr_file rw_file_perms;
diff --git a/sepolicy/public/cameraserver.te b/sepolicy/public/cameraserver.te
index 7a29240c..f08dbc7b 100644
--- a/sepolicy/public/cameraserver.te
+++ b/sepolicy/public/cameraserver.te@@ -74,3 +74,8 @@ userdebug_or_eng(`
allow cameraserver su:fifo_file { read write };
allow cameraserver su:unix_stream_socket { read write };
')
+
+
+allow cameraserver device:dir r_dir_perms;
+allow cameraserver video_device:dir r_dir_perms;
+allow cameraserver video_device:chr_file rw_file_perms;
--
3 ) kernel config 添加如下内容
   kernel-***/arch/arm64/configs/tb***_defconfig 
   具体添加位置试实际项目情况来定
CONFIG_USB_VIDEO_CLASS=y
CONFIG_MEDIA_USB_SUPPORT=y
4 ) 上面内容修改完后,发现能检测到设备,不过打开黑图
从下面的日志里面可以看到,由于还有其它的 selinux 权限问题,导致 camera error 。本地可以先通过
setenforce 0 来确认,解决 selinux 问题是否就正常。
后面再根据实际的 avc 异常信息,添加 selinux 权限
------- 这里遇到的问题,是在 hal_camera_default.te 中添加如下内容,问题解决。
allow hal_camera_default hal_graphics_mapper_hwservice:hwservice_manager find;
11-07 15:01:26.314 D/hwcomposer( 632): (0:3) Layer+
(mva=0x0/sec=0/prot=0/fmt=1/alpha=1:0xff/blend=0002/dim=0/range=20000000/x=0 y=0
w=480 h=52 s=480 -> x=0 y=0 w=480 h=52/ext_layer=2 ds=0 fbdc=1 is_mml=0) =
11-07 15:01:26.322 E/SELinux ( 482): avc: denied { find } for
interface=android.hardware.graphics.mapper::IMapper sid=u:r:hal_camera_default:s0
pid=5451 scontext=u:r:hal_camera_default:s0
tcontext=u:object_r:hal_graphics_mapper_hwservice:s0 tclass=hwservice_manager
permissive=0
11-07 15:01:26.323 E/SELinux ( 482): avc: denied { find } for
interface=android.hardware.graphics.mapper::IMapper sid=u:r:hal_camera_default:s0
pid=5451 scontext=u:r:hal_camera_default:s0
tcontext=u:object_r:hal_graphics_mapper_hwservice:s0 tclass=hwservice_manager
permissive=0
11-07 15:01:26.323 E/SELinux ( 482): avc: denied { find } for
interface=android.hardware.graphics.mapper::IMapper sid=u:r:hal_camera_default:s0
pid=5451 scontext=u:r:hal_camera_default:s0
tcontext=u:object_r:hal_graphics_mapper_hwservice:s0 tclass=hwservice_manager
permissive=0
11-07 15:01:26.323 E/HandleImporter( 5451): initializeLocked: cannnot acccess
graphics mapper HAL!

 二、Qcom 平台 

------ platform/vendor/qcom/***/external_camera_config.xml

<ExternalCamera>
<Provider>
<ignore> <!-- Internal video devices to be ignored by external camera HAL
-->
<id>0</id> <!-- No leading/trailing spaces -->
<id>1</id>
</ignore>
</Provider>
<!-- See ExternalCameraUtils.cpp for default values of Device configurations
below -->
<Device>
<!-- Max JPEG buffer size in bytes-->
<MaxJpegBufferSize bytes="3145728"/> <!-- 3MB (~= 1080p YUV420) -->
<!-- Size of v4l2 buffer queue when streaming >= 30fps -->
<!-- Larger value: more request can be cached pipeline (less janky) -->
<!-- Smaller value: use less memory -->
<NumVideoBuffers count="4"/>
<!-- Size of v4l2 buffer queue when streaming < 30fps -->
<NumStillBuffers count="2"/>
<!-- List of maximum fps for various output sizes -->
<!-- Any image size smaller than the size listed in Limit row will
report
fps (as minimum frame duration) up to the fpsBound value. -->
<FpsList>
<!-- width/height must be increasing, fpsBound must be decreasing-->
<Limit width="640" height="480" fpsBound="30.0"/>
<Limit width="1280" height="720" fpsBound="30.0"/>
<!-- image size larger than the last entry will not be supported-->
</FpsList>
</Device>
</ExternalCamera>
----- platform/vendor/qcom/***/***.mk
PRODUCT_PACKAGES += android.hardware.camera.provider@2.4-external-service
PRODUCT_COPY_FILES += \
device/qcom/holi/external_camera_config.xml:$(TARGET_COPY_OUT_VENDOR)/etc/extern
al_camera_config.xml
----- platform/vendor/qcom/***/manifest.xml
<hal format="hidl">
<name>android.hardware.camera.provider</name>
<transport>hwbinder</transport>
<version>2.4</version>
<interface>
<name>ICameraProvider</name>
<instance>legacy/0</instance>
<instance>external/0</instance> <!-- new add for usb camera-->
</interface>
</hal>
---- kernel/msm-***/ arch/arm64/configs/vendor/***.config
CONFIG_USB_VIDEO_CLASS=y
另外需要把自己的 app 包名,写到 vendor.camera.aux.packagelist property 属性里面,通过
getCameraIdList 才能获取到多于 2 颗摄像头的 id。

-----------------------------------------------------------------------------------------

文章内容所有权归@公众号:小驰行动派,禁止宣传转载,谢谢~

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

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

相关文章

http和https数据传输与协议区分

目录 1. 数据传输安全性2. 端口号3. URL 前缀4. SSL/TLS 证书5. 性能6. SEO 和用户信任7. 应用场景总结 HTTP&#xff08;HyperText Transfer Protocol&#xff09;和 HTTPS&#xff08;HyperText Transfer Protocol Secure&#xff09;是用于在客户端&#xff08;如浏览器&…

【JavaScript】内置对象 - 字符串对象 ④ ( 根据索引位置返回字符串中的字符 | 代码示例 )

文章目录 一、根据索引位置返回字符串中的字符1、charAt 函数获取字符2、charCodeAt 函数获取字符 ASCII 码3、数组下标获取字符 String 字符串对象参考文档 : https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String 一、根据索引位置返回…

十七、【源码】一级缓存

源码地址&#xff1a;https://github.com/mybatis/mybatis-3/ 仓库地址&#xff1a;https://gitcode.net/qq_42665745/mybatis/-/tree/17-first-level-cache 一级缓存 MyBatis 的一级缓存用于减少在同一个 SqlSession 内的重复查询&#xff0c;适用于需要在单个会话内多次查…

Windows下对于Qt中带 / 的路径的处理

在Windows下&#xff0c;如果你想使用操作系统的分隔符显示用户的路径&#xff0c;请使用 toNativeSeparators()。 请看以下代码&#xff1a; void Player::on_playBtn_clicked() {if (this->m_url.isEmpty()) {openMedia();if (this->m_url.isEmpty())return;}qDebug(…

介绍单例模式

描述 保证一个类只有一个实例&#xff0c;并且提供一个全局访问点 场景&#xff1a; 重量级的对象&#xff0c;不需要多个实例&#xff0c;如线程池&#xff0c;数据库连接池 实现 1. 懒汉模式 延迟加载的方式 只有在真正使用的时候&#xff0c;才开始实例化线程安全问题…

widerface人脸检测数据集VOC+YOLO格式16094张1类别

为了更好研究人脸检测数据集&#xff0c;特将widerface人脸检测数据集转成VOCYOLO格式&#xff0c;以方便进行yolo系列训练。这里将widerface拆分成2个版本,即A版本和B版本&#xff0c;两个版本不存在重叠可以合并训练 。拆分方式不是随便拆分的&#xff0c;而是根据数据集标注…

C++基础三:类和对象的细节原理

目录 类和对象以及this指针: 概念 构造函数 拷贝构造函数和赋值运算符重载函数(深拷贝) memcpy 实现string 构造的初始化列表 常方法: 指向类成员的指针 类和对象以及this指针: 概念 面向对象四大特性:抽象:抽象是一种将对象的共同特征提取出来并定义成一个通…

【介绍下什么是Kubernetes编排系统】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

Mysql的脏读、幻读、不可重复读

简介&#xff1a;MySQL的事务并发指的是多个异步任务同时操作同一个表所造成的一些异常。而且这些异常都与“读”有关系&#xff0c;即跟select关键字有关系。 1、脏读 A事务的查询select读取了其他B、C、D等事务没有进行commit的数据&#xff0c;但是B、C、D等事务可能并没有进…

基于springboot开发的Java MES制造执行系统源码,全套源码,一款数字化管理平台源码 云MES系统源码

基于springboot开发的Java MES制造执行系统源码&#xff0c;全套源码&#xff0c;一款数字化管理平台源码 云MES系统源码 MES系统源码相关技术&#xff1a; ​技术架构&#xff1a;springboot vue-element-plus-admin 开发语言&#xff1a;Java 开发工具&#xff1a;idea 前…

分享一个用python写的本地WIFI密码查看器

本章教程&#xff0c;主要分享一个本地wifi密码查看器&#xff0c;用python实现的&#xff0c;感兴趣的可以试一试。 具体代码 import subprocess # 导入 subprocess 模块&#xff0c;用于执行系统命令 import tkinter as tk # 导入 tkinter 模块&#xff0c;用于创建图形用…

俄罗斯服务器租用攻略:选择优质服务器,开启海外市场新征程

随着国际贸易的不断发展&#xff0c;俄罗斯作为一个重要的贸易伙伴备受关注。许多企业和公司为了开拓海外市场&#xff0c;选择将业务拓展到俄罗斯&#xff0c;而在这个过程中&#xff0c;租用一台优质的服务器成为了必须面对的问题。俄罗斯作为一个经济发展迅速的国家&#xf…

使用vue3+ts封装一个自动补全输入框Autocomplete组件

创建一个名为 Autocomplete.vue 的文件&#xff0c;在这个组件中&#xff0c;使用了 Vue 3 的 Composition API&#xff0c;包括 ref、watch、onMounted 等。组件接收 placeholder、debounce 和 clearable 作为 props&#xff0c;并根据这些 props 来渲染输入框和下拉菜单 <…

图论第7天

今天去打了会羽毛球。最近还是有点累啊&#xff0c;今天尽量效率 1971. 寻找图中是否存在路径 第一步是先整init 第二步先把该关联的关联 第三步判断是否有路 class Solution { private:int nMax 200005;vector<int>father vector<int>(nMax,0);void init(i…

【Linux】进程间通信之匿名管道

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 如果文章对…

TypeScript未知泛型——unknown和any

在 TypeScript 中&#xff0c;如果你想要表示一个泛型变量&#xff0c;但你不知道或不关心它具体是什么类型&#xff0c;你可以使用 any 类型。然而&#xff0c;any 类型会绕过类型检查&#xff0c;这可能不是你想要的。为了保持类型安全性&#xff0c;TypeScript 提供了一个特…

Day50 动态规划part09

LC198打家劫舍 偷前一家或者偷前两家和这家&#xff1a;dp[i] Math.max(dp[i-2]nums[i],dp[i-1]);代码 LC213打家劫舍II&#xff08; 未掌握&#xff09; 解题思路&#xff1a;因为成环了&#xff0c;所以首位元素一定是两者只能选择一个或者两者都不选三种情况&#xff1…

四舍五入问题

单纯输出四舍五入可以用 printf("%.nf",num); 但是这个方法有时候会出错 代表输出n位四舍五入小数 而将数四舍五入赋值给变量可以用round&#xff08;&#xff09;函数 a round(num); 表示将num四舍五入赋值给a 但是这么些只能转换位四舍五入的整数 可以改…

【学习笔记】Windows GDI绘图(十一)Graphics详解(下)

文章目录 Graphics的方法Graphics.FromImageSetClip设置裁切区域IntersectClip更新为相交裁切区域TranslateClip平移裁切区域IsVisible判断点或矩形是否在裁切区域内MeasureCharacterRanges测量字符区域MeasureString测量文本大小MultiplyTransform矩阵变换 Graphics的方法 Gr…

【雷丰阳-谷粒商城 】【分布式基础篇-全栈开发篇】【07】【商品服务】分页查询_品牌分类关联与级联更新

持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式基础篇-全栈开发篇】【07】【商品服务】分页查询_品牌分类关联与级联更新 分页查询为数据库表设计冗余字段冗余字段带来的问题以及处理品牌名发生变化&#xff0c;进行级联更新分类名发生变化&#xff0c;进行级…