【SPRD CAMERA】4 hal preview流程

idh.code\vendor\sprd\interfaces\camera\device\3.2\default\CameraDeviceSession.cpp

Return<void> CameraDeviceSession::processCaptureRequest(
        const hidl_vec<CaptureRequest>& requests,
        const hidl_vec<BufferCache>& cachesToRemove,
        ICameraDeviceSession::processCaptureRequest_cb _hidl_cb)  {
    updateBufferCaches(cachesToRemove);

    uint32_t numRequestProcessed = 0;
    Status s = Status::OK;
    for (size_t i = 0; i < requests.size(); i++, numRequestProcessed++) {
        s = processOneCaptureRequest(requests[i]);
        if (s != Status::OK) {
            break;
        }
    }

    if (s == Status::OK && requests.size() > 1) {
        mResultBatcher.registerBatch(requests[0].frameNumber, requests.size());
    }

    _hidl_cb(s, numRequestProcessed);
    return Void();
}
Status CameraDeviceSession::processOneCaptureRequest(const CaptureRequest& request)  {
   
    status_t ret = mDevice->ops->process_capture_request(mDevice, &halRequest);

    return Status::OK;
}

这个mDevice是 open 的时候,创建 SprdCamera3HWI 对象生成的

    mCameraDevice.ops = &mCameraOps;
    camera3_device_ops_t SprdCamera3HWI::mCameraOps = {
        .initialize = SprdCamera3HWI::initialize,
        .configure_streams = SprdCamera3HWI::configure_streams,
        .register_stream_buffers = NULL, // SprdCamera3HWI::register_stream_buffers,
        .construct_default_request_settings =
            SprdCamera3HWI::construct_default_request_settings,
        .process_capture_request = SprdCamera3HWI::process_capture_request,
        .get_metadata_vendor_tag_ops =
            NULL, // SprdCamera3HWI::get_metadata_vendor_tag_ops,
        .dump = SprdCamera3HWI::dump,
        .flush = SprdCamera3HWI::flush,
        .reserved = {0},
    };

继续看process_capture_request

int SprdCamera3HWI::process_capture_request(
    const struct camera3_device *device, camera3_capture_request_t *request) {
    ...
    int ret = hw->processCaptureRequest(request);
    ...
}

继续看processCaptureRequest

int SprdCamera3HWI::processCaptureRequest(camera3_capture_request_t *request) {

    meta = request->settings;
    mMetadataChannel->request(meta);

    mMetadataChannel->start(mFrameNum);
    //上半部的代码包括删除的部分主要是设置参数

    //这里开流这个开始只要设置一次就可以了
    if (mFirstRegularRequest == 1) {
        ret = mRegularChan->start(mFrameNum);
        mFirstRegularRequest = 0;
    }

    //这里时把数据的buff。推送到一个队列里面。后面设置帧数据地址时,再拿出来使用
    {
        for (i = 0; i < request->num_output_buffers; i++) {
            const camera3_stream_buffer_t &output = request->output_buffers[i];
            camera3_stream_t *stream = output.stream;
            Requ
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值