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.

[参考译文] TDA4VEN-Q1:马赛克节点无法处理两个映像

Guru**** 2589245 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1562268/tda4ven-q1-mosaic-node-failing-to-process-two-images

器件型号:TDA4VEN-Q1


工具/软件:

您好、

我有一个自定义流水线、如下图所示:

编辑:我制作了一个新的图片, 更准确地类似于 我测试的管道

我遇到 Mosaic 节点问题。  我用手制造这两条管道(类似于 App Single cam 两次)。  它们具有相同的分辨率和相同的位深度。  我将 MSC0 和 MSC1 的输出放入它们自己的唯一对象数组中。  我正在按如下方式配置马赛克节点:

static void set_img_mosaic_params(ImgMosaicObj *imgMosaicObj, vx_uint32 in_width, vx_uint32 in_height, vx_int32 numCh)
{
    vx_int32 idx, ch;
    vx_int32 grid_size = 2;

    imgMosaicObj->out_width    = 1920;
    imgMosaicObj->out_height   = 1080;

    imgMosaicObj->num_inputs   = numCh;

    idx = 0;

    tivxImgMosaicParamsSetDefaults(&imgMosaicObj->params);

    for(ch = 0; ch < numCh; ch++)
    {
        vx_int32 winX = ch%grid_size;
        vx_int32 winY = ch/grid_size;

        imgMosaicObj->params.windows[idx].startX  = (winX * (in_width/grid_size));
        imgMosaicObj->params.windows[idx].startY  = (winY * (in_height/grid_size));
        imgMosaicObj->params.windows[idx].width   = in_width/grid_size;
        imgMosaicObj->params.windows[idx].height  = in_height/grid_size;
        imgMosaicObj->params.windows[idx].input_select   = ch;

        imgMosaicObj->params.windows[idx].channel_select = 0;

        idx++;
    }

    imgMosaicObj->params.num_windows  = idx;

    /* Number of time to clear the output buffer before it gets reused */
    imgMosaicObj->params.clear_count  = NUM_BUFS;
}

// In the main method:
{
// ...
    vx_uint16 resized_width, resized_height;
    appIssGetResizeParams(IMX728_OUT_WIDTH, IMX728_OUT_HEIGHT, 1920, 1080, &resized_width, &resized_height);

    set_img_mosaic_params(&obj->graph_obj->mosiacObj, resized_width, resized_height, 2);
    status = app_init(obj->graph_obj);
// ...
}

// Later - in create graph
    vx_uint16 resized_width, resized_height;
    appIssGetResizeParams(IMX728_OUT_WIDTH, IMX728_OUT_HEIGHT, 1920, 1080, &resized_width, &resized_height);
    vx_image output_template = vxCreateImage(obj->context, resized_width, resized_height, VX_DF_IMAGE_NV12);
    obj->mosiacObj.input_arr[0] = vxCreateObjectArray(obj->context, (vx_reference) output_template, 1);
    vxReleaseImage(&output_template);
    
    vx_image output_template2 = vxCreateImage(obj->context, resized_width, resized_height, VX_DF_IMAGE_NV12);
    obj->mosiacObj.input_arr[1] = vxCreateObjectArray(obj->context, (vx_reference) output_template2, 1);
    vxReleaseImage(&output_template2);
    
    ...
    
    app_create_graph_img_mosaic(obj->graph, &obj->mosiacObj, NULL);
    tivxSetNodeParameterNumBufByIndex(obj->mosiacObj.node, 1, NUM_BUFS);

我得到以下输出:

```μ s

[MCU2_0] 86.341393 s:vx_zone_error:[tivxMemRegionTranslate:52]无效的 memtype
[MCU2_0] 86.341436 s:vx_zone_error:[tivxMemShared2PhysPtr:334]无效 mem_heap_region –1662795120
[MCU2_0] 86.341556 s:vx_zone_error:[tivxKernelImgMosaicMscDrvSubmit:1075]未能提交请求:–2
[MCU2_0] 86.407941 s:vx_zone_error:[tivxMemRegionTranslate:52]无效的 memtype
[MCU2_0] 86.407983 s:vx_zone_error:[tivxMemShared2PhysPtr:334]无效 mem_heap_region –1662795120
[MCU2_0] 86.408129 s:vx_zone_error:[tivxMemRegionTranslate:52]无效的 memtype
[MCU2_0] 86.408156 s:vx_zone_error:[tivxMemShared2PhysPtr:334]无效 mem_heap_region –1662795120
[MCU2_0] 86.408197 s:vx_zone_error:[tivxKernelImgMosaicMscDrvSubmit:1075]未能提交请求:–2

```μ s

我是否误解了马赛克节点的工作原理?

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

    您好、Stuart、

    您的马赛克节点配置似乎正确。

    该错误表明 MCU2_0 内核中发生了存储器损坏。 是否可以禁用 aewb1 节点并将输出从 vis1 节点直接连接到 ldc1 节点并检查此问题是否解决。

    此致、
    Gokul

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

    Gokul,

    我已经禁用了两个流水线的 AEWB 节点。

    LDC 节点实际上从未打开、但它只是一个示例。

    如果发生更改、我还禁用了 MSC 节点。

    我仍然收到以下错误:
    ```μ s
    [MCU2_0] 17540.121375 s:vx_zone_error:[tivxMemRegionTranslate:52]无效的 memtype
    [MCU2_0] 17540.121417 s:vx_zone_error:[tivxMemShared2PhysPtr:334]无效 mem_heap_region –1313357168
    [MCU2_0] 17540.121517 s:vx_zone_error:[tivxKernelImgMosaicMscDrvSubmit:1075]未能提交请求
    [MCU2_0] 17540.188060 s:vx_zone_error:[tivxMemRegionTranslate:52]无效的 memtype
    [MCU2_0] 17540.188098 s:vx_zone_error:[tivxMemShared2PhysPtr:334]无效 mem_heap_region –1313357168
    [MCU2_0] 17540.188202 s:vx_zone_error:[tivxKernelImgMosaicMscDrvSubmit:1075]未能提交请求
    [MCU2_0] 17540.254719 s:vx_zone_error:[tivxMemRegionTranslate:52]无效的 memtype
    [MCU2_0] 17540.254760 s:vx_zone_error:[tivxMemShared2PhysPtr:334]无效 mem_heap_region –1313357168
    [MCU2_0] 17540.254867 s:vx_zone_error:[tivxKernelImgMosaicMscDrvSubmit:1075]未能提交请求
    ```μ s

    我可以在显示器上看到图像输出并在崩溃前更新几次。

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

    我应该注意以下几点:

    传感器输出上下文交错、因此它会将流水线 1 的帧和流水线 2 的帧错开几毫秒(等于 1/帧速率)。

    大小  。  它的原始分辨率为 3856 x 2176。

    我并不总是会收到 invald memtype 和 mem_heap_region 错误、但我总是会收到“Failed to submit request“(提交请求失败)。

    我也未能指出我的最终目标是什么。  我想在屏幕上显示文本。  遗憾的是、我使用了 J722S 上的两个可用图像管道来显示输出图像 、任何使用第三个图形显示管道的尝试都会导致无法创建图形。  我尝试使用马赛克节点将两个现有输出合并到一个显示节点、以便可以使用另一个显示管道来实现 grpahics。

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

    您好、Stuart、

    您是如何获得 2 个虚拟通道的 imx728 输出的? 另外、根据图、capture_nodes 来自不同的 openvx 上下文?

    这两个通道作为输出提供了什么、您能创建一个捕获节点吗?

    我并不总是会遇到 invald memtype 和 mem_heap_region 错误、但我总是会遇到“提交请求失败“。

    MCU2_0 中有一些损坏、当 aewb 节点有 AE:off 时、我们面临这个问题、因此我要求移除 aewb 节点。

    我也未能指出我的最终目标是什么。  我想在屏幕上显示文本。  遗憾的是、我使用了 J722S 上的两个可用图像管道来显示输出图像 、任何使用第三个图形显示管道的尝试都会导致无法创建图形。  我尝试使用马赛克节点将两个现有的输出合并到一个显示节点中、以便我可以使用另一个显示管道进行 grpahics。

    这应该没问题、我们有 MULTI_cam、front_camera 等 SDK 演示可以用例类似。 我能获取更多关于传感器以及传感器如何在 2 个通道中为您提供输出的信息吗?

    此外、还应共享 openvx 图形的点输出、以验证是否正确创建了图形。

    此致、
    Gokul

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“637485" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1562268/tda4ven-q1-mosaic-node-failing-to-process-two-images/6052719

    您是如何获得 2 个虚拟通道的 imx728 输出的? 另外、根据图、capture_nodes 来自不同的 openvx 上下文?

    [/报价]

    借助多上下文模式、传感器能够针对给定上下文输出不同的虚拟通道。

    VC0 上的上下文 0 输出

    VC1 上的上下文 1 输出

    我创建了两个 CSIRX 节点 — 所以我相信我最终得到了 2 个 csirx 上下文。

    这两个通道提供了什么输出、您可以创建单个捕获节点吗?

    我可以将它设置为一个 CSIRX 捕获节点、它们都以相同的数据速率、行数、数据类型等输出  只有 2 个不同的 VC。  图形之间唯一需要区别的是曝光控制、并且我还需要具有独立的全局/局部色调映射。  如果你可以告诉我如何可以完成这个,我可以重新设计我的用例:)

    [引述 userid=“637485" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1562268/tda4ven-q1-mosaic-node-failing-to-process-two-images/6052719

    此外、还应共享 openvx 图形的点输出、以验证是否正确创建了图形。

    [/报价]

    请参阅随附的:

    e2e.ti.com/.../dual_5F00_capture_5F00_graph_5F00_1_5F00_img.txte2e.ti.com/.../dual_5F00_capture_5F00_graph_5F00_2_5F00_pipe_5F00_img.txte2e.ti.com/.../dual_5F00_capture_5F00_graph_5F00_3_5F00_data_5F00_ref_5F00_q_5F00_img.txte2e.ti.com/.../dual_5F00_capture_5F00_graph_5F00_4_5F00_pipe0_5F00_img.txt

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

    您好、Stuart、

    很抱歉、由于上周的节日假期、回复时间太晚。

    我要创建两个 CSIRX 节点 — 所以我相信我最终会有 2 个 csirx 上下文。

    好吧,应该没问题,我和 openvx 的上下文混淆了。

    如果您能告诉我我如何做到这一点、我可以重新设计我的用例:)

    您可以对两个虚拟通道使用相同的 csirx 节点、并为每个 vis 节点配置不同的 DCC 配置(已复制)、其中不包含直接示例、

    您可以参考 multicam_demo、了解如何使用单个 csirx 捕获 2 个数据通道、  

    对于 viss_node create、必须进行一些更改、

    由于 viss_node 是针对来自 csirx 的 2 个通道复制的、因此必须为参数 0 和 2 创建一个 object_array(配置和 dcc_buf)

    object_array 的每个元件都对应于摄像头通道并相应地填充数据。

    并使 0 和第 2 个参数的复制标志均为 true  

    返回到您共享的图形输出、未正确创建从 viss 节点到马赛克节点的缓冲区、

    viss_node 的输出是一个图像,马赛克节点的输入是 object_array ,在您的图形中只能正确创建一个缓冲区,而其他 3 个缓冲区则不能。

    为 viss_output_arr 设置复制标志、这将正确创建缓冲区。

    希望您正在更新 obj-

    可以共享 viss_node 创建部分和 viss_output_arr 的缓冲区创建部分的片段吗

    此致、
    Gokul

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

    您好、Stuart、

    [引述 userid=“528989" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1562268/tda4ven-q1-mosaic-node-failing-to-process-two-images/6058952 1:如何获得点图的可视输出?   T Hat 看起来非常方便。  :)

    您可以参考这个页面 https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/latest/exports/docs/tiovx/docs/user_guide/JPEG_TOOL.html
    或使用在线工具 https://dreampuf.github.io/GraphvizOnline

    2: 本例中正在复制什么内容?

    连接两个节点时会出现一个已知问题、其中一个节点将输出作为图像、以下节点将对象数组作为输入框架无法正确创建缓冲区。 将其设置为复制状态将检查映像是否有任何父对象为 obj_arr、因此将为 obj_array 而不是 image 分配缓冲区。

    如何仅对两个 VISS 节点使用 vxGetObjectArrayItem () 就无法重现相同的行为?

    在 multi_cam 演示中、默认情况下会复制它、因此可以正常工作、如前所述、即使您需要单个节点实例来解决此问题、也可以将其复制。

    [引述 userid=“528989" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1562268/tda4ven-q1-mosaic-node-failing-to-process-two-images/6058952 3:如果我复制、可能需要不同的 VISS DCC 缓冲区、但最重要的是、我需要不同的 AEWB 行为。 [/报价]

    是的、将 DCC 缓冲器作为 object_arr 的一部分、您可以为在通道 0 和通道 1 上运行的不同 viss_node 提供不同的缓冲区。

    文档中了解有关复制的更多信息

    是与此“tixSetNodeParameterNumBufByIndex"函“函数函数相关的问题 — 如下所示:

    我不知道这里是否有任何问题、您的图形输出将告诉为节点的每个输出创建的缓冲区数量、这样我们可以验证 API 是否正常工作。 在图形的点输出中、所有输出的缓冲区深度为 4、问题出在 4 (1-obj_arr、3-image) 之间。

    您是否可以在禁用 aewb 节点并检查流水线是否正常工作的情况下尝试这些更改?

    此致、
    Gokul

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

    尊敬的 Gokul:

    我将所有内容转移到一个 app_multi_cam 风格的流水线、它的马赛克效果很好、与我的双背景摄像头配合使用。  谢谢你。

    我有一个后续问题、因为我将再次遇到这个问题。  假设我有相同的情况 — 单传感器多个上下文,但这次其中一个上下文具有不同的分辨率。  是否可以在屏幕上显示这两幅图像并显示图形? TDA4VEN 上是否有可用的第三个显示流水线以不同的方式工作? 还是有办法使马赛克工作的两个图像的不同分辨率?

    再次感谢您!

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

    您好、Stuart、

    是否可以在屏幕上同时显示这两幅图像以及图形?

    在 tda4ven 中每个实例只有 2 个流水线可用、因此您必须使用马赛克节点来组合 2 个图像。
    马赛克可以拍摄具有不同分辨率的图像,因为它在内部使用 MSC 缩小图像比例以适应窗口,内部缩放比例根据输入图像尺寸和窗口尺寸进行配置。
    但您可能必须将图像拆分为两个不同的 obj_array 并将其作为马赛克节点的两个不同输入。

    此致、
    Gokul

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

    “谢谢你!  这是我最初试图做的,但失败了。   我认为我犯的错误是我需要 2 个 不同  obj_array 的数组、因为它需要 2 个维度的图像:一个来自不同的捕获、一个用于流水线缓冲。  这是正确的吗?

    再次感谢您的帮助。