A12 - Android Camera API2——processCaptureResult

                processCaptureResult是Camera API2架构的帧回调流程,包括拍照帧和预览帧,下面以预览帧为例进行流程解析,processCaptureResult流程中不仅仅报错预览buffer的queue(也就是预览帧送到gpu显示),也包括每一帧数据的回调,也就是metadata的数据回调。

一、return buffer

        return buffer也就是预览帧显示的流程。

1.Camera3Device

        #frameworks/av/services/camera/libcameraservice/device3/Camera3Device.cpp

        ProcessCaptureResult_3_4

2.Camera3OutputUtils

        #frameworks/av/services/camera/libcameraservice/device3/Camera3OutputUtils.cpp

         ProcessOneCaptureResultLocked 

                  processcaptureresult

                            returnAndRemovePendingOutputBuffers

                                     returnOutputBuffers

3.Camera3Stream

        #frameworks/av/services/camera/libcameraservice/device3/Camera3Stream.cpp

         stream->returnBuffer

                  camera3stream::returnBuffer

                                Camera3Stream::removeOutstandingBuffer(清空outputbuffer

                                returnBufferLocked

4.Camera3OutputStream

        camera3outputstream::returnBufferLocked

                          camera3Iostreambase::returnAnyBufferLocked

                                camera3outputstream::returnbuffercheckedlocked

                                            queueBufferToConsumer

                                                     consumer->queuebuffer(消费buffer

                          mHandoutOutputTotalBufferCount-- buffer减一

二、Camera metadata参数回调

1.Camera3OutputUtils

        #frameworks/av/services/camera/libcameraservice/device3/Camera3OutputUtils.cpp

        sendCaptureResult

             insertResultLocked(states, &captureResult, frameNumber)

                    states.resultQueue.insert

                    states.resultSignal.notify_one

2.FrameProcessorBase

        FrameProcessorBase的threadLoop也是在起预览的initializeImpl函数中触发,initializeImpl函数在openCamera时调用。

#/frameworks/av/services/camera/libcameraservice/api2/CameraDeviceClient.cpp
status_t CameraDeviceClient::initializeImpl(TProviderPtr providerPtr) {
    ATRACE_CALL();
    status_t res;

    res = Camera2ClientBase::initialize(providerPtr);
    if (res != OK) {
        return res;
    }

    String8 threadName;
    mFrameProcessor = new FrameProcessorBase(mDevice);
    threadName = String8::format("CDU-%s-FrameProc", mCameraIdStr.string());

        #frameworks/av/services/camera/libcameraservice/common/FrameProcessorBase.cpp 

        threadLoop       

                 device->waitForNextFrame(Camera3Device.cpp)

                 processNewFrames(device)

                          device->getNextResult (Camera3Device.cpp)

                                    processSingleFrame

                                            processListeners(result, device)

                                                 (*item)->onResultAvailable 

3.CameraDeviceClient

        #frameworks/av/services/camera/libcameraservice/api2/CameraDeviceClient.cpp

        CameraDeviceClient::onResultAvailable

              remoteCb->onResultReceived

4.CameraDeviceImpl

        #frameworks/base/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java

        onResultReceived

               holder.getCallback().onCaptureProgressed 

               holder.getCallback().onCaptureCompleted //app侧获取的每一帧处理数据的回调,从回调参数CaptureResult中读取

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值