This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TDA4VM:在包括4个摄像头的 multi_cam 应用程序(8.1SDK)中、删除摄像头后、图形可以完成#39;t 运行

Guru**** 2540720 points
Other Parts Discussed in Thread: TDA4VM

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1224274/tda4vm-graph-can-t-run-once-removing-a-camera-in-multi_cam-app-including-4-cameras-8-1sdk

器件型号:TDA4VM

您好!!

 我们使用的系统包括 TDA4VM、8.1SDK、96722、4*96717、 multi_cam 应用程序。

  删除4个摄像头中的一个后、图形无法运行。

 需要你的帮助,谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    96722可以处理有关删除4个摄像头中的一个的数据,如下所示:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您能否检查  摄像机节点是否调用了 TIvxCaptureRegisterErrorFrame API?  

    此致、

    Brijesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    否、我们不调用 API。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    但是、 当拔下摄像头时、图形会停止。 它没有来自一个或多个摄像头的任何帧、因此无法继续。 请确保使用此 API 提供错误帧、然后图形将正常运行。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在8.1 SDK 中、当 capture_format 是 raw 时、我们仅通过 TIvxCreateRawImage 和 TIvxMapRawImagePatch 将黑色帧发送到死区传感器。 现在、我们需要处理捕获中的 YUV 图像。 我们应该怎么做? 是否有一些 samilar 函数,关于 YUV422图像,与 TIvxCreateRawImage  和 TIvxMapRawImagePatch ?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的建议。

    我想了想。

    下面是一个补丁、以防任何人需要:

    diff --git a/modules/include/app_capture_module.h b/modules/include/app_capture_module.h
    Index ffb316aa.c0da514d 100644.
    ---- a/modules/include/app_capture_module.h
    ++ b/modules/include/app_capture_module.h
    @@-129,6+129,8 @@ typedef 结构{
    /*! 摄像机断开连接时使用的原始图像*/
    TIVX_RAW_IMAGE ERROR_FRAME_RAW_IMAGE;

    + vx_image error_FRAME_image;
    +
    /*! 启用检测摄像头断开连接的标志*/
    vx_uint8 enable_error_detection;

    diff --git a/modules/src/app_capture_module.c b/modules/src/app_capture_module.c
    Index 34a08c7e..cd2ec6c2 100755
    -- a/modules/src/app_capture_module.c
    ++ b/modules/src/app_capture_module.c
    @@-231,10 +231,10 @@静态 vx_STATUS CREATE_ERROR_DETECTION_FRAME (vx_context、CaptureObj *ca.
    /*错误检测当前仅对原始输入启用*/

    /*如果处于测试模式,发送测试帧*/
    - if (0!= captrutureObj->capture_format)
    -{
    - CaptureObj->enable_error_detection = 0;
    -}
    +// if (0!= CaptureObj->capture_format)
    +//{
    +// CaptureObj->enable_error_detection = 0;
    +//}

    if (CaptureObj->test_mode)

    @@-286、29 + 286、62 @@静态 vx_status create_error_detection_FRAME (vx_context、CaptureObj *ca.
    vx_imagepatch_addressing_t image_addr;
    void * data_ptr;

    + VX_UINT32宽度;
    + VX_UINT32高度;
    + vx_df_image 格式;
    +
    rect.start_x = 0;
    rect.start_y = 0;
    rect.end_x = sensorParams->sensorInfo.RAW_params.width;
    rect.end_y = sensorParams->sensorInfo.RAW_PARAMS.height;
    +
    + if (0 == CaptureObj->capture_format)
    +{
    + captureObj->error_FRAW_IMAGE = TIVxCreateRawImage (上下文、&(sensorParams->sensorInfo.RAW_PARAMS));

    - captureObj->error_FRAW_IMAGE = TIVxCreateRawImage (上下文、&(sensorParams->sensorInfo.RAW_PARAMS));
    -
    - status = vxGetStatus (( vx_reference) captureObj->error_FRAW_image );
    + status = vxGetStatus ((vx_reference) captureObj->error_FRAW_IMAGE);

    - if (状态== vx_Success)
    -{
    - vxSetReferenceName ((VX_reference) captrutureObj->error_FRAW_image、"capture_node_error_FRAW_IMAGE");
    + if (status == vx_Success)
    +{
    + vxSetReferenceName ((Vx_reference) captrutureObj->error_FRAW_image、"capture_node_error_FRAW_IMAGE");

    - status = tvxMapRawImagePatch ((tvx_raw_image) captureObj->error_FRAME_RAW_image、&rect、0、&map_id、ℑ_addr、 &DATA_PTR、VX_READ_ONLY、VX_MEMORY_TYPE_HOST、TIVX_RAW_IMAGE_ALLOC_BUFFER);
    + status = tvxMapRawImagePatch ((tvx_raw_image) captureObj->error_FRAME_RAW_IMAGE、&rect、0、&map_id、ℑ_addr、 &DATA_PTR、VX_READ_ONLY、VX_MEMORY_TYPE_HOST、TIVX_RAW_IMAGE_ALLOC_BUFFER);

    -如果((VX_STATUS)VX_SUCCESS == STATUS)
    + if ((VX_STATUS) VX_SUCCESS == STATUS)
    +{
    + memset (data_ptr、0x00、image_addr.strip_y*(sensorParams->sensorInfo.raw_params.height+sensorParams->sensorInfo.raw_params.meta_height_afte)
    (r));
    +}
    +}
    +其他

    - memset (data_ptr、0x00、image_addr.strip_y*(sensorParams->sensorInfo.raw_params.height+sensorParams->sensorInfo.raw_params.meta_height_after);
    + printf ("[ capture_module]无法计算错误帧原始图像!\n");
    }
    }
    方案

    - printf("[capture_module]无法计算错误帧原始图像!\n");
    + width = sensorParams->sensorInfo.RAW_params.width;
    + height = sensorParams->sensorInfo.raw_params.height;
    + format = sensorParams->sensorInfo.raw_params.format->pixel_container;
    + captrureObj->error_FRAME_image = vxCreateImage (上下文、宽度、高度、格式);
    +
    + status = vxGetStatus ((vx_reference) captureObj->error_FRAME_image);
    +
    + if (status == vx_Success){
    + status = vxMapImagePatch ((vx_image) captureObj->error_FRAME_image、&rect、0、&map_id、ℑ_addr、 &DATA_PTR、VX_READ_ONLY、VX_MEMORY_TYPE_HOST、VX_NOGAP_X);
    +
    + if (status == vx_Success)
    +{
    + memset (data_ptr、0、image_addr.STRIDE_y *
    +(sensorParams->sensorInfo.raw_params.height
    ++ sensorParams->sensorInfo.raw_params.meta_height_before
    ++ sensorParams->sensorInfo.raw_params.meta_height_after );
    +}
    +}
    +其他
    +{
    + printf ("[capture_module]无法计算错误帧 YUV 图像!\n");
    +}
    +
    }
    }
    方案
    @@-643,7 +676,18 @@ vx_status app_send_error_FRAME (CaptureObj * captrureObj)

    Vx_STATUS = Vx_SUCCESS;

    - status = TIvxCaptureRegisterErrorFrame (captureObj->node,(VX_reference) CaptureObj->error_FRAW_IMAGE);
    + vx_reference error_FRAME_image;

    +// status = TIvxCaptureRegisterErrorFrame (CaptureObj->node、(vx_reference) CaptureObj->error_FRAW_IMAGE);
    +
    + if (CaptureObj->capture_format == 0)
    +{
    + ERROR_FRAME_IMAGE =(VX_reference) CaptureObj->ERROR_FRAME_RAW_IMAGE ;
    +}
    +其他
    +{
    + ERROR_FRAME_IMAGE =(VX_reference) CaptureObj->ERROR_FRAME_IMAGE ;
    +}
    + status = TIvxCaptureRegisterErrorFrame (CaptureObj->node、error_FRAME_image);
    返回状态;
    }
    (结尾口播)