if (mpPort[i]->getOpened()) { if (streamType == StreamType_RawB) { if (i == CAMMW_CAMERA_PORT_TYPE_O_FRAME_RAW_2A || i == CAMMW_CAMERA_PORT_TYPE_O_FRAME_RAW_2B) { if (CAMMW_SUCCESS(r) && pIsp) { if (CAMMW_SUCCESS(r) && !mpStream[mCamIdx][sensorType][StreamType_RawB]->getOpened()) { //把stream做open的动作 r = mpStream[mCamIdx][sensorType][StreamType_RawB]->open(pIsp, ispInputTo, mpPort[i]->mBufInfo); } if (CAMMW_SUCCESS(r)) { streamOpened = TRUE; } } }
时间: 2024-04-18 19:29:42 浏览: 5
这段代码的作用是检查相机端口是否已经打开,并根据一些条件执行相应的操作。首先,它通过调用 `getOpened()` 方法来检查 `mpPort[i]` 索引位置的相机端口是否已经打开。如果端口已打开,那么继续执行下面的代码。接着,它检查 `streamType` 是否等于 `StreamType_RawB`。如果是的话,它进一步检查 `i` 是否等于 `CAMMW_CAMERA_PORT_TYPE_O_FRAME_RAW_2A` 或者 `CAMMW_CAMERA_PORT_TYPE_O_FRAME_RAW_2B`。如果满足这些条件,那么继续执行下面的代码。
接下来,它检查 `r` 是否为 `CAMMW_SUCCESS` 并且 `pIsp` 是否存在。如果满足这些条件,那么继续执行下面的代码。
然后,它检查 `r` 是否为 `CAMMW_SUCCESS` 并且 `mpStream[mCamIdx][sensorType][StreamType_RawB]` 是否未打开。如果满足这些条件,那么执行一个名为 `open()` 的方法来打开相应的流,并将一些参数传递给该方法。
最后,它再次检查 `r` 是否为 `CAMMW_SUCCESS`,如果是的话,将 `streamOpened` 设置为 `TRUE`。
相关问题
switch(mActiveStream[i]->getType()) { case StreamType_RawA: isRaw0Enabled = TRUE; r = mActiveStream[i]->startStream(inputCrop, mIspType, mpPipeline);//对每一个stream做startstream动作 break;
这段代码中,首先通过调用 `getType()` 方法获取 `mActiveStream[i]` 的类型。然后使用 `switch` 语句来检查类型,并根据不同的类型执行相应的操作。在这个例子中,当 `mActiveStream[i]` 的类型是 `StreamType_RawA` 时,会执行以下操作:将 `isRaw0Enabled` 设置为 `TRUE`,然后调用 `startStream()` 方法来启动该流,并传递一些参数如 `inputCrop`、`mIspType` 和 `mpPipeline` 给该方法。这样就完成了对该流的启动操作。
if (CAMMW_SUCCESS(r)) { IspMandatoryStreamBufCfg cfg; // 看哪个流是一定要有buffer的,如果这个流没有buffer会跳过request memset(&cfg, 0, sizeof(cfg)); if (CAMMW_SUCCESS(r)) { // 看Tbl表,表内不同的usecase会有不同的表 const IspConnectionInfo *pConnect = &mCameraIspConnectTbl.mSensorIspConnection[streamingMode.usecase][0]; cfg.hdr = mMandatoryStreamBufCtrlCfg.hdr; // mMandatoryStreamBufCtrlCfg上层传下来的,excalibur预先设置好哪些流需要buffer for (uint32_t i = 0; i < CAMMW_ELEMENTS(mMandatoryStreamBufCtrlCfg.ctrl.isMandatoryStreamBuf); i++) { IspType ispType = (pConnect[i].ispIdx == IspIdx_0) ? IspType_Main : IspType_Sub; StreamType streamType = pConnect[i].streamType; if (streamType < StreamType_Max && ispType < IspType_Max) { cfg.setting[ispType].isMandatoryStreamBuf[streamType] |= mMandatoryStreamBufCtrlCfg.ctrl.isMandatoryStreamBuf[i]; } } }
这段代码的作用是根据一些条件设置必须有buffer的流。首先,它检查一个返回值 `r` 是否为 `CAMMW_SUCCESS`,如果是的话,就执行后续操作。然后,它创建了一个 `IspMandatoryStreamBufCfg` 类型的变量 `cfg`,并将其初始化为零。接下来,它再次检查 `r` 是否为 `CAMMW_SUCCESS`,如果是的话,就继续执行。然后,它根据不同的 usecase 从 `mCameraIspConnectTbl.mSensorIspConnection` 表中获取连接信息,并将其中的一些属性赋值给 `cfg` 变量。最后,它遍历 `mMandatoryStreamBufCtrlCfg.ctrl.isMandatoryStreamBuf` 数组,并根据索引值找到对应的 `ispType` 和 `streamType`,然后将对应位置的标志位设置为 `true`,表示该流需要有buffer。