第27讲 Camera Native FW API1和API2调用HAL3流程介绍

2024年11月03日 第27讲 Camera Native FW API1和API2调用HAL3流程介绍 极客笔记

本讲是Android Camera Native Framework专题的第27讲,我们介绍Camera Native FW的API1和API2调用HAL3流程。

更多资源:

资源 描述
在线课程 极客笔记在线课程
知识星球 星球名称:深入浅出Android Camera 星球ID: 17296815
Wechat 极客笔记圈

API1->HAL3 参数设置流程

  • 上层App调用Camera2Client的setParameters将参数送下来

  • Camera2Client会将参数送给StreamingProcessor完成Parameters到CaptureRequest的转换

  • 转换后的CaptureRequest (mPreviewRequest和mRecordingRequest)保存在StreamingProcessor中

API1->HAL3 startPreview流程

  1. 调用StreamingProcessor和JPEG/Callback/ZSL Processor的update Stream,创建Stream

  2. 再次更新Preview/Recording Request

  3. 调用StreamingProcessor的startStream,将Repeating request送给Camera3Device,Camera3Device执行ConfigureStream并submit request给HAL

API1->HAL3 参数回调流程

  • FrameProcessorBase有一个线程不停问CameraDeviceBase是否有可用的CaptureResult

  • 拿到可用的CaptureResult后送给FrameProcessor执行processSingleFrame,处理Face Detect回调和向Parameters更新3A State。

API1 -> HAL3 图像数据回调流程

API1 -> HAL3 图像数据回调流程 – 预览/录像

StreamingProcessor(预览/录像)

CallbackProcessor

这里讨论非setPreviewCallbackTarget方式回调预览Data,PreviewCallbackTarget方式跟上面StreamingProcessor流程一样

API1 -> HAL3 图像数据回调流程 – 拍照

Google创建了一个CaptureSequencer来维护拍照的状态机转换。

API1->HAL3 Non-ZSL && Non-AE Precapture 流程

非ZSL且不带AE Prepare Trigger的拍照流程如上图所示,整个拍照过程由CaptureSequencer来驱动,JpegProcessor收到拍照图像后,通知给CaptureSequencer负责回调给App。

API2->HAL3 控制流程与参数回调

  • CameraDeviceClient收到上层的调用后,会对应调用到Camera3Device,进而调用到HAL层的接口
  • FrameProcessorBase拿到Result Metadata后会回调给CameraDeviceClient,CameraDeviceClient再通过onResultReceived接口回调给上层

API2->HAL3 数据流回调

API2中,所有数据流都走BufferQueue,Camera3Device通知Camera3Stream buffer处理完毕后,会直接queueBuffer给BufferQueue,进而Consumer就会被通知到有Buffer上来了。

本文链接:http://so.lmcjl.com/news/16926/

展开阅读全文