MTK 平台Camera 驱动架构

2023-11-02

记录下 Mtk的Hal3架构笔记,正在进行学习,后续仍会更新

一.MtkCam3的代码结构及学习资料
mtk online里搜Camera 可以搜到很全面的Mtk Hal3的学习文档,Mtk整理的文档很棒,简单到位!
https://online.mediatek.com/QuickStart/2a17666a-9d46-4686-9222-610ec0f087cc

下述的代码结构只是列出了mtk平台的camera路径,Android Camera相关路径并未记录

APP
MTK Camera
vendor/mediatek/proprietary/packages/apps/

HAL
MTK Camera Hal,目前最新Android Camera Api2下用的都是HAL3的内存,HAL3主要代码在mtkcam3中,有些工具类复用了mtkcam中
vendor/mediatek/proprietary/hardware/mtkcam/
vendor/mediatek/proprietary/hardware/mtkcam3/

以下是和camera强相关
vendor/mediatek/proprietary/hardware/jpeg/
vendor/mediatek/proprietary/hardware/bwc/
vendor/mediatek/proprietary/hardware/m4u/

Kernel
kernel-x.xx/drivers/misc/mediatek/imgsensor/

二.MtkCam3设计架构概览

MtkCam3实现了Android定义的几个HAL3的接口:ICameraProvider, ICameraDevice, ICameraDeviceSession, ICameraDeviceCallback;ICameraProvider 的实现类CameraProviderImpl包在 camera device manager 外围,只是一个 adapter, 适配不同版本的 camera device interface。 Camera Service(指的是camera android层的进程: cameraserver ) 可以通过 ICameraProvider 去拿到 ICameraDevice 。ICameraDevice 和 ICameraDeviceSession 的实现类 CameraDevice3Impl, CameraDevice3SessionImpl 。用于Camera Service 去操作每一个 camera。 比如: open, close, configureStreams, processCaptureRequest 。

AppStreamManager位于framework与pipeline之间,主要职责有如下三条:
1、 Callback result to Android framework according to the returning rules which are defined in camera3.h
2、Update vendor defined gralloc usage
3、Android/ MTK streamInfo conversion

IPipelineModel的角色
在open/close stage,Power on/off sensor;在config stage,根据APP的createCaptureSession里面带下来的surface list,推测Output以及按照Topological推测Pipeline各个Node是否需要创建以及各个Node的I/O buffer,建立整条PipelineModel;在Request Stage,接到上层queue下来的request,转化为Pipleline统一的IPipelineFrame,决定这个request的I/O buffer、Topological、sub frame、dummy frame、feature set等信息;

HWNode是大Node,三方算法的挂载在这些node里面,作为小node.
P1Node负责输出raw图,P2CaptureNode主要负责拍照的frame的处理,P2StreamingNode主要负责录像预览的数据处理,JpegNode的输入时main YUV、Thumbnail YUV及metadata,输出是Jpeg及App metadata。

三. MtkCam3代码跟读
3.1 Camera HAL3 init


3.2 OpenCamera


3.3 ConfigureStream


3.4 Request


四. MtkCam3 Debug
1.Mtk日志开关
设置log level,cameraHalserver重启生效
persist.vendor.mtk.camera.log_level
控制代码如下:

#define CAM_ULOGMD(fmt, arg...)        ALOGD(fmt, ##arg)

mtkcam/include/mtkcam/utils/std/Log.h
#define CAM_LOGD(fmt, arg...)   do{ if(0!=mtkcam_testLog(LOG_TAG, 'D')) ALOGD(fmt, ##arg); } while(0)
  
mtkcam/utils/std/Misc.cpp
static int32_t determinePersistLogLevel()
{
    int32_t level = ::property_get_int32("persist.vendor.mtk.camera.log_level", -1);
    CAM_ULOGMD("###### get camera log property =%d", level);
    if  (-1 == level) {
        level = MTKCAM_LOG_LEVEL_DEFAULT;
    }
    return level;
}
 
__BEGIN_DECLS
static int32_t gLogLevel = determinePersistLogLevel();
int mtkcam_testLog(char const* /*tag*/, int prio)
{
    switch (prio)
    {
        case 'V':       return (gLogLevel>=4);
        case 'D':       return (gLogLevel>=3);
        case 'I':       return (gLogLevel>=2);
        case 'W':       return (gLogLevel>=1);
        case 'E':       return (1);
        default:        break;
    }
    return 0;
}
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MTK 平台Camera 驱动架构 的相关文章

  • 点云高度归一化处理(附 python 代码)

    gt 由于不同地物之间存在着高程的差异 为了去除地形起伏对点云数据高程值的影响 所以需要根据提取出的地面点进行点云归一化处理 这一步是很多算法的基础 可以提高后续点云分类或分割的准确度等 如下图所示 gt 归一化的过程其实相对简单 遍历每一
  • 贪心算法力扣刷题练习(含思路与题解)

    贪心算法 保证每次操作都是局部最优 使得最终结果也是全局最优的 需要找到贪心的策略 使得每次的最优能保证全局最优 通常需要排序 根据排序需求 自定义比较函数 sort a begin a end vector
  • protobuf c++编程笔记

    文章目录 字段内容的定义 修饰符 字段类型 引用方式 不同字段的方法 1 optional修饰的基本类型 2 optional修饰的对象类型 3 repeated修饰的基本类型 4 repeated修饰的对象类型 序列化 反序列化 字段内容
  • Vue + 高德地图 + 三维模型

    一 创建高德的kek和密钥 根据需求选择服务平台 我选择的是web端 JS API 二 在vue中引入高德地图 在public文件下找到index html文件引入你的key值 参考 https lbs amap com demo jsap
  • Could not resolve com.android.tools.build:gradle:4.0.0.

    打开别人发过来的项目的时候gradle一直下载不下来 然后报错 尝试了很多办法 最后在用户变量种添加 Android SDK ROOT 自己的Android SDK路径 gradle 下载成功 可能遇到的具体错误问题不一样仅供参考
  • CentOS8基础篇15:防火墙命令配置

    一 防火墙服务 1 启动 关闭 重启防火墙服务 systemctl start firewalld service systemctl stop firewalld service systemctl restart firewalld s
  • ES 查询不稳定现象及解决方案

    问题描述 对于相同的查询语句 ES 查询返回不同的检索内容 示例 1 filter match content 宝骏510 order score size 10 在上面的示例中可以看到推荐句子的第二句和第三句的顺序发生了变化 产生原因 官
  • spring事务的隔离级别。如何避免脏读或者幻读

    事务隔离级别为四个等级 默认是数据库的隔离级别 需要去数据库查询一下隔离级别 1 查看当前会话隔离级别 select tx isolation 2 查看系统当前隔离级别 select global tx isolation 隔离级别 Iso
  • unity MeshCollider组件

    在应用MeshCollider组件中的一个属性 Convex 这个功能很好用 但是他也是有一个坑在里面 他的好处 当你点击之后他会自动根据模型自动生成一个碰撞器 这个是不规则的碰撞器 他的坏处 没有点击 Convex 时候 比如当你有一个物
  • Commond:命令模式

    命令模式即将请求封装为对象Commond 执行者可以执行多个操作 即执行者才是操作真正的实现者 设其为操作0 9 每个操作都封装了一个对应的Commond类 当该Commond被调用时 Commond会令执行者执行其对应的操作 用户需要执行
  • 文化:测试团队建设--读书会

    如何做管理 曾经很迷茫 一路跌跌撞撞 慢慢的发现了 想要做好管理 团队文化和团队建设也是管理的重要环节 其实在一个大的测试团队里 有很多测试同学相互之间是没有交集的 如何让大家熟悉团结起来 团队建设是其中一个方法 下面和大家分享 团队建设
  • Linux进程通信——消息队列

    Linux进程通信 消息队列 消息队列概述 消息队列发送端 消息队列接收端 补充key值作用 消息队列互相发送接收 消息队列概述 消息队列是存在Linux内核中 以链表形式来存消息 一个消息队列由一个标识符 即队列ID 来标识 用户进程可以
  • JS技巧---Set数组去重

    在 ES6 中 引入了一个新的数据结构类型 Set 而 Set 与 Array 的结构是很类似的 且 Set 和 Array 可以相互进行转换 数组去重 也算是一个比较常见的前端面试题了 方法有很多种 这里不多赘述 下面我们看看用 Set
  • 互联网黑话

    互联网岗位的口头禅 1 各个岗位的口头禅 产品岗 没排上期 下个版本 设计岗 别戳屏幕 研发岗 实现不了 测试岗 醒醒 有bug 数据岗 你们要这个干啥 运维岗 磁盘满了 网络抖动 程序员终极大法 删库跑路 法务岗 这个有风险 公关岗 建议
  • 深入云存储系统Swift核心组件:Ring实现原理剖析

    深入云存储系统Swift核心组件 Ring实现原理剖析 简介 OpenStack是一个美国国家航空航天局和Rackspace合作研发的开源云计算项目 并成为Apache下的一个重要开源项目 目前已经发展到了180家公司参与其中 OpenSt
  • 探索MVVM -- 体会DataBinding的魅力

    前言 本文用到的demo是以 ONE 一个 的API为基础 模仿其功能实践一下MVVM的用法 以感受MVVM架构为主要目的 并未完全模仿其功能 代码结构借鉴了Google的sample 虽然谷歌今年出了一个架构组件指南 来指导开发者构建Ap
  • pdf加密在线破解

    http www unlock pdf com
  • wsl+ zsh + oh-my-zsh配置

    wsl zsh oh my zsh配置 经常在windows平台办公 配置一些开发环境时在Linux中会比较简单 参照了在Linux服务器中的配置 同步在WSL中 测试平台 WIN10 X64专业版 V1903 只支持WSl V1 WSL
  • Unity编辑器扩展之Excel表转CS文件(C#类)

    前言 这里我们需要理解动态生成CS文件的一些基础 https blog csdn net qq 37254346 article details 103216761 怎样读取Excel表这里就不说了 Excel表转CS文件 这是我们需要转的

随机推荐

  • EEPROM芯片(24c02)使用详解(I2C通信时序分析、操作源码分析、原理图分析)

    1 前言 1 本文主要是通过24c02芯片来讲解I2C接口的EEPROM操作方法 包含底层时序和读写的代码 2 大部分代码是EEPROM芯片通用的 但是其中关于某些时间的要求 是和具体芯片相关的 和主控芯片和外设芯片都有关系 需要具体分析
  • Android中mmap原理及应用简析

    1 mmap介绍 mmap是一种内存映射文件的方法 即将一个文件或者其他对象映射到进程的地址空间 实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对应关系 实现这样的映射关系后 进程就可以采用指针的方式读写操作这一块内存 而系统会自动
  • 网络参考模型

    网络参考模型 1 OSI参考模型 1 1 产生背景 在网络发展的早期时代 网络技术的发展变化速度非常快 计算机网络变得越来越复杂 新的协议和应用不断产生 而网络设备大部分都是按厂商自己的标准生产 不能兼容 很难相互间进行通信 为了解决网络之
  • 【python数据挖掘课程】十七.社交网络Networkx库分析人物关系(初识篇)

    这是 Python数据挖掘课程 系列文章 也是我大数据金融学院上课的部分内容 本章主要讲述复杂网络或社交网络基础知识 通过Networkx扩展包绘制人物关系 并分析了班级学生的关系学院信息 本篇文章为初始篇 基础文章希望对你有所帮助 如果文
  • 面试突击37:线程安全问题的解决方案有哪些?

    Python微信订餐小程序课程视频 https edu csdn net course detail 36074 Python实战量化交易理财系统 https edu csdn net course detail 35475 线程安全是指某
  • anaconda切换为国内源

    查看配置文件 conda config show windows下 1 添加清华源 命令行中直接使用以下命令 conda config add channels https mirrors tuna tsinghua edu cn anac
  • Unity3d 物体速度快直接穿透墙体没有发生碰撞怎么办?

    1 Edit gt Project Setting gt Time 调节TimeManager的fixed Timestep
  • 如何在Linux虚拟机或服务器上发布或部署一个Spring项目

    1 开放端口 项目需要使用哪些端口就开放哪些端口 开放方法如下 1 进入控制台 选择安全组 2 点击蓝色连接 点击手动添加 3 添加需要开放的端口 2 安装服务器远程连接工具 Xshell 的安装使用 Xshell是一个终端模拟软件 换言之
  • stm32 USB HID单点触摸屏上报安卓触摸信号

    此工程在个人博客使用stm32配置自定义的HID设备基础上修改 在上个博客中我们介绍了如何使用stm32配置成自定义的HID设备 使用usb通讯 但是仅仅只是实现了基于USB的通讯 真正需要运用的时候还需要在此基础上定义我们自己的协议 然后
  • Unity接入越南社交软件Zalo登录之获取用户信息

    根据Unity接入越南社交软件Zalo登录 Android 之SDK接入接入SDK后 需要获取用户name id 头像 性别的信息 这一篇文章教你如何获取 根据官网文档获取用户信息API ZaloSDK Instance getProfil
  • CPU和线程概述、线程池如何合理设置

    目录 1 物理核 虚拟核 单核cpu和多核cpu 2 进程和线程 理解 对比 线程切换 线程开销 3 串行 并发 并行 串行 并发 并行 4 多核下线程数量选择 计算密集型 IO密集型 提高性能的方向 5 并发编程网上关于线程池的总结 参考
  • PAT A1039使用string也可以不超时!!!

    亲测 直接使用map
  • AJAX & Axios 总结

    AJAX Axios 1 AJAX 1 1 作用 与服务器进行数据交换 异步交互 异步和同步 1 2 基本使用 1 3 案例 SelectUserServlet register html register html中的
  • 层层逼近,了解Norm系需要解决的问题及其衍生变体

    引自 https zhuanlan zhihu com p 33173246 https blog csdn net xiao lxl article details 72730000 https github com switchable
  • linux audit日志通过syslog转发到远端

    流程 开启audit 配置rsyslog读audit log文件 转发到远端 1 开启audit 重启audit service auditd restart 确认audit log产生日志 cat var log audit audit
  • filebeat-sidecar模式采集pod应用日志

    文章目录 1 将镜像上传服务器 2 新增sidecar yml文件 3 kubectl部署应用 部署应用 查看应用部署情况 查看pod运行情况 查看容器 应用服务 运行情况 查看容器 filebeat 运行情况 查看pod日志 4 kafk
  • Linux内核设计与实现(五)

    文章目录 什么是内核同步 1 临界区和竞争条件 2 加锁 2 1 造成并发执行的原因 2 2 了解需要保护什么 3 死锁 4 争用和扩展性 内核同步方法 1 原子操作 1 1 原子整数操作 1 2 原子位操作 2 自旋锁 2 1 自旋锁方法
  • 时序预测

    时序预测 MATLAB实现基于TSO XGBoost金枪鱼算法优化XGBoost的时间序列预测 多指标评价 目录 时序预测 MATLAB实现基于TSO XGBoost金枪鱼算法优化XGBoost的时间序列预测 多指标评价 预测效果 基本介绍
  • java+selenium环境搭建

    目录 1 写在前面的话 2 下载谷歌驱动 3 添加Selenium依赖 我这里添加的是4 0 0版本的 4 在操作过程中可能出现的问题 解决办法 目录 1 写在前面的话 2 下载谷歌驱动 3 添加Selenium依赖 我这里添加的是4 0
  • MTK 平台Camera 驱动架构

    记录下 Mtk的Hal3架构笔记 正在进行学习 后续仍会更新 一 MtkCam3的代码结构及学习资料 mtk online里搜Camera 可以搜到很全面的Mtk Hal3的学习文档 Mtk整理的文档很棒 简单到位 https online