之前的一篇博客,我们看到了addstreamtochannel,以预览为例,当然把预览需要的stream全部add进预览的channel,这句话没毛病。

Z:\code\2700\HLOS\frameworks\av\services\camera\libcameraservice\device1\camerahardwareinterface.cpp的代码开始

status_t CameraHardwareInterface::startPreview()
{
    ALOGV("%s(%s)", __FUNCTION__, mName.string());
    if (CC_LIKELY(mHidlDevice != nullptr)) {
        return CameraProviderManager::mapToStatusT(
                mHidlDevice->startPreview());
    }
    return INVALID_OPERATION;
}

这里的startpreview掉的就是/hardware/interfaces/camera/device/1.0/default/CameraDevice.cpp下面的startpreview

直接看QCamera2HWI.cpp里面的内容个,这里面主要的内容就是startchannel,我们这里是预览,当然startchannel的参数是QCAMERA_CH_TYPE_PREVIEW.重点就是这个函数了。

int32_t QCamera2HardwareInterface::startChannel(qcamera_ch_type_enum_t ch_type)
{
    int32_t rc = UNKNOWN_ERROR;
    if (m_channels[ch_type] != NULL) {
        rc = m_channels[ch_type]->start();
    }
    return rc;
}

一目了然,这个函数里面主要内容就是m_channel[ch_type]->start();这个东西很熟了,不就是类QCameraChannel这个类型的一个类的数组指针嘛,所以数组里面的每一个元素,就是一个QCameraChannel类型的指针,解释清楚了。

在这里调用start,就是盗用类QCameraChannel.cpp里面的start函数,我们直接来看这个函数。

camera预览数据流代码流程

这张图片描述的很清楚了每一个stream都会调用setbundleinfo和start函数。我们暂时先略过setbundleinfo,先看QCameraStream.cpp里面的start函数。

camera预览数据流代码流程

mProcTh这个对象是QCameraThread这个类的对象

camera预览数据流代码流程

这里的start_routine实际上就是上面start函数传给的参数dataProcRoutine函数,我们接下来看这个函数的原型

camera预览数据流代码流程

接下来会继续分析,这个数据是在哪里被填充的。

相关文章:

  • 2022-12-23
  • 2021-11-23
  • 2021-07-08
  • 2021-07-03
  • 2021-07-24
  • 2021-04-24
  • 2021-12-20
  • 2021-09-13
猜你喜欢
  • 2021-12-27
  • 2022-12-23
  • 2021-12-01
  • 2021-08-27
  • 2021-05-07
  • 2021-06-16
  • 2021-12-10
相关资源
相似解决方案