Device HAL3 和 APP Stream Manager 和 Pipeline Model Manager是 MTK HAL三 大组成之一。
APP Stream Manager: 1.通过 camera3_callback_ops->proccess_capture_result 将数据回调给 Framework。
2. 定义vendor的实际格式。
3. Android和MTK之间streaming_info的互相转换
API:
1.create()/destroy() //创建销毁APP Stream Manager
2. beginConfigureStream()/endConfigureStream() //配置流时使用
3. getCaptureRequestMetadataQueue()/getCaptureresultMetadataQueue() //APP Stream Manager和Framework传递Meatddata时被调用
4.SubmitRequest() //向APP Stream Manager传递request时调用
5. updateResult() //Pipeline Model处理完数据后将数据传递给APP Stream Manager时被调用
6. dumpState()
7. flushRequest()
8. removeBufferCache()
10.waitUnitlDrained() //等待Pipeline Model处理完数据再返回。
APP Stream Manager内部组成图:
APP Stream Manager的config stream流程:
Framework通过cameraDeviceSession接口调用beginConfigureStream并传递一个Stream_list,APP Stream Manager会创建metaConfigMap和ImageConfigMap,并对stream_list做解析,
在metaConfigMap中生成metaStreamInfo,再在ImageConfigMap中创建一个ImageItemFrameQueue队列并在其中保存Stream_list中每个不同的Steam,用于保存下放的request的image buffer。
再去配置pipeline,最后再去配置stream
APP Stream Manager的process capture request流程:
Framework通过cameraDeviceSession接口调用subimitRequest(),在CreateRequest()中将Framework的request转换为camera3_caoture_request_t,
再将imageBuffer封装为AppImageStreamBuff,根据Metadata创建AppMetaStreamBuffer。再调用registerRequest()将请求注册到APP Stream Manager内部.
APP Stream Manager会对调用下来的Request进行处理,并创建一个appRequest给cameraDeviceSession来调用pipeline的SubmitRequest()
FrameWork传递下来一个Request时,APP Stream Manage将Request封装为一个FrameParcel保存在创建的FrameQueue中。
FramePracel中又有ImageItemSet和MetaItemSet,其中是不同的流的buffer,把ImageItemSet和MetaItemSet中的output/input buffer的指针存放Request0 中,
再将ImageItemSet的每个output buffer的指针保存到流对应的ImageItemFrameQueue中队列,方便回调时管理buffer先进先出的返回规则。
(B,C,D为StreamA,StreamB,StreamC)
APP Stream Manager的 callback流程:
pipeline处理完数据后调用APP Stream Manager的UpdateResult(),对收到的ImageBuffer和metadata进行转换,并回调到Framework。
快照流程:
图片的回调:
error buffer的回调:
标签:调用,Stream,buffer,APP,Framework,Manager From: https://www.cnblogs.com/zsy12138/p/11390609.html