【Camera】MTK平台的一些基础认识(待补充)
文章目录
- 一、MTK平台软件框架
- 二、MTK对图像的处理(raw-->jpeg)
- 三、MTK ISP
- 四、deepseek的一些详细补充
- 4.1 P1 Node 的完整工作流程分解
- 4.2总结与核心要点
一、MTK平台软件框架
MTK hal代码主要在:
vendor/mediatek/proprietary/hardware/mtkcam3/
APP:用户
framework:(Android,谷歌写的框架)很多标准API
hal:平台实现(实现上层,例如:拍照等API)
kernel:mtk / qcom(底层硬件的实现,相关封装)
sensor(hw),kernel通过I2C操作sensor
真正操作硬件都在kernel层
sensor接收光信号转换为电信号,然后经过数模转换等一系列处理后,输出数字信号给ISP,ISP处理后成为人眼可以感知的有色彩和亮度信息的照片
二、MTK对图像的处理(raw–>jpeg)
MTK ISP对一张sensor输出的raw(图)数据到jpeg的大概流程,mtk有3个P1,1个P2。当多个数据流同时给P2处理时,P2采用time sharing的方式处理。
· P1接收通过sensor传来的raw数据,然后对raw数据进行处理,处理完之后再传给P2,P2会将raw转化为YUV。在YUV的域进行一些降噪、亮度提升方面的处理,处理完之后传给JPEG编码器,JPEG编码压缩…
· P2对不同的数据进行分时处理
(Timing Generate):从sensor获取数据,并送给ISP处理
· TG相当于一个硬件模块,用于接收sensor的输出数据,sensor通过mipi传给平台端,TG把通过mipi接收到的数据转换成下一层可以处理的data
· P1+P2构成了MTK平台的ISP
P1工作一个还是两个,取决于当前的负载能力
三、MTK ISP
MTK ISP对一张sensor输出的raw数据的完整处理流程,这是MTK平台ISP主要的涉及图像处理的硬件模块
P2在RGB域进行一些色彩处理,在YUV域进行多帧降噪、NR等
P1–>P2,DRAM到一个buffer,P2再从内存中取
· MTK平台一帧预览的request经过底层处理然后返回给APP的流程。
其ISP主要分成Pass1、Pass2,其中P1Node可以理解为对应Pass1,P2 StreamingNode可以理解为对应Pass2,只是这里用于吹preview数据流
· 每一个result,每一个request下发之后都会带有一个buffer,底层把这个buffer地址,把我们处理好的数据赋值给它,相当于copy过去,拿到数据之后,利用buffer中的数据进行显示
四、deepseek的一些详细补充
Q:MTK camera P1node在图像处理中扮演关键角色,它接收request并利用hal3A进行预设处理。在上一帧3A回调完成后,设置新的3A参数,并通过Camioenque与dequebuffer传递stream。Request在3A中经历preset、3A设置、camio操作,最终将imagebuffer与3A信息送往下一级节点。这一过程帮我详细讲讲
P1 Node: 位于相机Hal3 Pipeline中的第一个主要图像处理节点。它直接与相机传感器(Sensor)和图像信号处理器(ISP)交互,负责将原始的光信号转换为数字图像信号,并进行最基础的图像处理。
Request: 一个拍照请求,包含了输出图像的所有配置信息(如图像尺寸、格式、数量等)。一个Request通常会对应多个Buffer。
Hal3A: 一个统称,代表自动对焦(AF)、自动曝光(AE)和自动白平衡(AWB)算法的框架。它负责分析图像数据,并实时控制Sensor和ISP以优化图像质量。
CamIO: 一个与底层硬件(特别是ISP)进行数据交互(入队/出队Buffer)的通道或接口。
4.1 P1 Node 的完整工作流程分解
整个流程可以看作一个持续运行的、流水线化的循环。我们以“上一帧3A回调完成”作为起点,来追踪一个Request在P1 Node中的完整生命周期。
阶段一:预备与参数设置(上一帧结束后 -> 新Request开始)
1.上一帧3A回调完成:
当P1 Node处理完一帧数据后,该帧的图像数据会被发送给3A算法库进行计算。
3A算法库完成分析(例如:判断当前场景是太亮还是太暗,主体是否失焦)后,会通过一个回调函数(Callback) 将计算结果(例如:建议的曝光时间、传感器增益、对焦马达位置、白平衡增益)通知给P1 Node。
2.设置新的3A参数:
P1 Node接收到来自3A算法的新参数后,并不会立即应用到当前正在处理的帧,而是会将这些参数“预定”给下一个即将到来的Request。
这是为了确保参数与帧的严格对应。每个Request所使用的3A参数,都是基于上一帧或更早帧的图像分析结果得出的,这样就避免了使用正在计算的、不稳定的参数。
阶段二:Request流入与处理启动
3.接收Request:
框架(Framework)向Pipeline发送一个新的Request,这个Request最终到达P1 Node。该Request包含了Hal3A模块预定的新参数。
4.Preset处理:
“Preset”可以理解为P1 Node对一帧图像进行的基础且固定的图像处理流程。这通常在ISP的硬件流水线上完成,包括但不限于:
黑电平校正: 消除Sensor暗电流的影响。
镜头阴影校正: 补偿图像边缘的亮度衰减。
坏点校正: 修复Sensor上的失效像素。
去马赛克: 将Bayer格式的原始RAW数据转换为完整的RGB图像。
色彩校正矩阵: 调整颜色准确性。
Gamma校正: 对图像亮度进行非线性调整。
“Preset”确保了从Sensor出来的原始数据,首先被转换成一个可用的、经过基础优化的图像。
阶段三:硬件交互与数据流转
5.CamIO操作(Enqueue/Dequeue Buffer):
这是P1 Node与ISP硬件之间数据传递的核心。
Enqueue: P1 Node从框架申请到空的图像Buffer(内存块),然后将这些Buffer放入(Enqueue) 到CamIO的输入队列中。同时,它会将本Request的配置(包括在阶段一设置的新3A参数)传递给ISP。
硬件处理: ISP根据配置,控制Sensor开始曝光,将光信号转换为电信号,然后按照“Preset”流程处理数据,最终将处理完的图像数据填充到之前Enqueue的Buffer中。
Dequeue: 当ISP处理完成一帧后,P1 Node会从CamIO的输出队列中取出(Dequeue) 已经被填满图像数据的Buffer。
阶段四:数据分发与流程闭环
6.送往下一级节点:
此时,P1 Node已经拥有了处理完成的Image Buffer和与本帧对应的3A信息。
Image Buffer: 通常是YUV或RAW格式的数据,会被P1 Node发送给Pipeline中的下一个节点,例如:
P2 Node: 进行更高级的算法处理,如降噪、锐化、HDR融合等。
或者直接送给JPEG编码器生成照片。
3A信息: P1 Node会同时将这帧Image Buffer发送给3A算法库,开启新一轮的3A计算,为下一个Request提供参数依据。
4.2总结与核心要点
承上启下的关键角色: P1 Node是连接物理传感器(Sensor)和上层图像算法(3A)及后续处理节点(P2等)的桥梁。它负责产出所有后续处理所依赖的“原料”。
流水线与并行处理: 整个过程是高度流水线化的。当ISP正在处理第N帧时,3A算法可能在分析第N-1帧,而P1 Node同时在为第N+1帧准备参数和Buffer。这种并行处理是实现高帧率拍摄的关键。
3A的延迟性: 注意,应用到第N帧的3A参数,是基于第N-1帧(或更早) 的图像分析结果。这是一个固有的、单帧的延迟。3A算法的鲁棒性必须能够处理这种延迟。
数据同步: CamIO enqueue/dequeue机制确保了硬件(ISP)和软件(P1 Node)之间高效、低延迟的数据同步,避免了数据竞争和内存拷贝开销。