
MTK HDR集成经验总结
5星
- 浏览量: 0
- 大小:None
- 文件类型:DOCX
简介:
本文档总结了作者在MTK平台下HDR(高动态范围)技术集成的经验和心得,包括技术挑战、解决方案及优化建议。适合从事相关领域开发工作的工程师参考学习。
### MTK HDR集成经验积累
#### 一、PipelinePlugin概念详解
##### 1.1 概述
在MTK的HAL3系统中,PipelinePlugin扮演着一个统一接口的角色,支持不同类型的图像处理需求,包括Streaming(预览和视频)、Capture(拍照)、DualCam(双摄像头)以及RAWYUV算法的挂载与执行。为了实现这一目标,PipelinePlugin由两大部分构成:
1. **IInterface**:这部分负责提供第三方算法接入的服务,并定义了能够提供的缓冲区(buffer)和元数据(metadata)形式。
2. **IProvider**:这部分用于向系统展示第三方算法的能力,并声明支持的buffer与metadata的形式。
注册机制通过`REGISTER_PLUGIN_INTERFACE`和`REGISTER_PLUGIN_PROVIDER`分别实现对IInterface和IProvider的注册。
##### 1.2 IProvider的关键生命周期接口
在HDR集成过程中,采用了IProvider插件的方式。下面详细介绍其关键的生命周期接口:
1. **properties()**: 在此接口中配置插件信息,必须指定参数包括`mName`(插件名称)和`mFeatures`(插件全局特性ID枚举)。 `mFeatures`需要在相关文件中声明。
2. **negotiate(Selection &sel)**: 此接口允许根据当前的配置状态进行必要的调整。不同的配置阶段如eSelStage_CFG、eSelStage_P1及eSelStage_P2由PipelinePluginType.h定义,ini()函数调用之后会再次进入P2阶段。
3. **init()**: 初始化接口,在此接口中应该执行与算法相关的初始化操作。
4. **process(RequestPtr pRequest, RequestCallbackPtr pCallback)**: 处理一帧request。通过`pRequest`获取待处理的数据,如IImageBuffer图像数据或IMetadata等。处理完成后,使用`pCallback`中的onComplete或onAbort接口回调至上层。
#### 二、TPI Async Plugin简介
Streaming框架用于实时图像处理,并需要达到至少30fps的流畅性要求。针对那些无法在33ms内完成的第三方算法,MTK提供了一种解决方案——增加一种Data Path(数据路径),即Async(异步)路径。除了Display和Record之外,这种路径使得外部buffermetadata资源可以在前两种路径完成后即可归还,而不受Async Plugin处理时间的影响。
#### 三、ASD创建的Plugin
目前在J10上挂载了两个插件:
1. **S_META_Plugin**:此插件主要负责获取元数据,并将其缓存起来供后续使用。从request中可获取的关键元数据类型包括`mIMetadataApp`, `mIMetadataHal1`, `mIMetadataHal3`, `mIMetadataVendor`和`mIMetadata3A`.
2. **S_ASYNC_Plugin**:此插件主要用于异步处理,利用前面缓存的元数据进行复杂任务。具体实现细节此处不再详述。
通过上述介绍可以看出MTK的PipelinePlugin体系结构在集成HDR等功能时发挥着重要作用,并为第三方算法提供了灵活性和扩展性。
全部评论 (0)


