本讲是Android Camera Native Framework专题的第27讲,我们介绍Camera Native FW的API1和API2调用HAL3流程。
更多资源:
资源 | 描述 |
---|---|
在线课程 | 极客笔记在线课程 |
知识星球 | 星球名称:深入浅出Android Camera 星球ID: 17296815 |
极客笔记圈 |
API1->HAL3 参数设置流程
- 上层App调用Camera2Client的setParameters将参数送下来
-
Camera2Client会将参数送给StreamingProcessor完成Parameters到CaptureRequest的转换
-
转换后的CaptureRequest (mPreviewRequest和mRecordingRequest)保存在StreamingProcessor中
API1->HAL3 startPreview流程
- 调用StreamingProcessor和JPEG/Callback/ZSL Processor的update Stream,创建Stream
-
再次更新Preview/Recording Request
-
调用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上来了。