三、device架构
camera device主要交互逻辑:
1.提供接口给上层控制操作camera设备 - cameradevicebase
cameradevicebase继承frameProducer,实现对外获取result metadata
cameraDeviceBase接口用于client操作hal3device
frameProducer
camera2ClientBase |
mDevice::cameraDeviceBase -> cameraDeviceBase
|
camera3Device
|
aidl/hidl camera3Device
2.API2回调result metadata 给上层 - frameProcessorBase (异步)
FrameProcessorBase启动一个线程调用FrameProducer的waitForNextFrame和getNextResult,从Result Queue里面获取CaptureResult
frameProcessorBase::threadloop(waitfornextframe -> processNewFrames -> getnextresult)
frameProducer(waitfornextframe:下一帧的metadata,getnextresult:captureResult)
3.API2回调 image buffer给上层 - camerastream (同步)
camera3device根据配置信息决定创建 camera3inputstream camera3outputstream camera3sharedstream
camera_stream 是一个结构体,与hal stream一样
为什么抽象出 camera3stream?
input output stream的基类,继承 camera_stream
提供接口转换成hal stream
四、api2 -> hal3的控制流程与参数回调
CameraDeviceClient收到上层的调用后,会对应调用到Camera3Device,进而调用到HAL层的接口
FrameProcessorBase拿到Result Metadata后会回调给CameraDeviceClient,CameraDeviceClient再通过onResultReceived接口回调给上层
比如configurestream
cameraservice:endconfigure -> camera3Device::configurestreams -> hal configurestream
frameProcessorBase::threadloop(waitfornextframe(camera3Device) -> processNewFrames -> getnextresult)
-> frameProcessorBase:onResultAvailable ->onResultReceived
五、api2 -> hal3数据流回调
processCaptureResult -> camera3outputstream -> BQ -> Consumer
camera3Device通知camera3stream buffer处理完毕后 会将buffer queue到bufferqueue