camera hal3 数据流

本文主要梳理qcom camera hal3 callback 数据流

 

在文件hardware\qcom\camera\QCamera2\HAL3\QCamera3HWI.cpp中,

当new一个channel 的时候,就会启动一个对应的captureResultCb 用于接受对应的request的callback

例如:
    pChannel = new QCamera3ReprocessChannel(mCameraHandle->camera_handle,
            mChannelHandle, mCameraHandle->ops, captureResultCb, setBufferErrorStatus,
            config.padding, CAM_QCOM_FEATURE_NONE, this, inputChHandle);

captureResultCb原函数:

void QCamera3HardwareInterface::captureResultCb(mm_camera_super_buf_t *metadata_buf,
                camera3_stream_buffer_t *buffer, uint32_t frame_number, bool isInputBuffer)        //所有的callback都要经过这个函数处理 Callback handler for all capture result (streams, as well as metadata)

这里会进行判断,如果是metadata就会调用handleMetadataWithLock

否则调用handleBufferWithLock

原函数:

void QCamera3HardwareInterface::handleBufferWithLock(
    camera3_stream_buffer_t *buffer, uint32_t frame_number)        //该函数用于处理image buffer  Handles image buffer callback with mMutex lock held

通过调用            
        orchestrateNotify(&notify_msg);
            orchestrateResult(&result);
向framworks发送消息,这里通过mCallbackOps里发送时间,mCallbackOps定义在文件frameworks/av/services/camera/libcameraservice/device3/Camera3Device.cpp

    camera3_callback_ops::notify = &sNotify;
    camera3_callback_ops::process_capture_result = &sProcessCaptureResult;

其中orchestrateResult(&result);是发送数据的

void QCamera3HardwareInterface::orchestrateResult(
                    camera3_capture_result_t *result)

通过mCallbackOps->process_capture_result(mCallbackOps, result); 传递到frameworks

在frameworks中,文件frameworks/av/services/camera/libcameraservice/device3/Camera3Device.cpp

void Camera3Device::processCaptureResult(const camera3_capture_result *result)对接hal的数据

调用returnOutputBuffers(result->output_buffers,
                result->num_output_buffers, shutterTimestamp);

 

void Camera3Device::returnOutputBuffers(
        const camera3_stream_buffer_t *outputBuffers, size_t numBuffers,
        nsecs_t timestamp)
调用res = stream->returnBuffer(outputBuffers[i], timestamp);

原函数在文件frameworks/av/services/camera/libcameraservice/device3/Camera3Stream.cpp中定义

status_t Camera3Stream::returnBuffer(const camera3_stream_buffer &buffer,
        nsecs_t timestamp)
调用:res = returnBufferLocked(buffer, timestamp);

 

frameworks/av/services/camera/libcameraservice/device3/device3/Camera3OutputStream.cpp

status_t Camera3OutputStream::returnBufferLocked(
        const camera3_stream_buffer &buffer,
        nsecs_t timestamp)

调用res = returnAnyBufferLocked(buffer, timestamp, /*output*/true);

frameworks/av/services/camera/libcameraservice/device3/Camera3IOStreamBase.cpp

status_t Camera3IOStreamBase::returnAnyBufferLocked(
        const camera3_stream_buffer &buffer,
        nsecs_t timestamp,
        bool output)

回调到文件Camera3OutputStream.cpp

status_t Camera3OutputStream::returnBufferCheckedLocked(
            const camera3_stream_buffer &buffer,
            nsecs_t timestamp,
            bool output,
            /*out*/
            sp<Fence> *releaseFenceOut) //check buffer是否有效


res = queueBufferToConsumer(currentConsumer, anwBuffer, anwReleaseFence); //传给consumer

 

在hal3中,通过

process_capture_request函数从framworks发送request到hal。定义在QCamera3HWI.h

mCallbackOps->process_capture_result

mCallbackOps->notify

回调callback从hal到framworks

定义在Camera3Device.cpp

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值