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:tivxVpacLdcProcess 错误

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

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1472016/tda4vm-tivxvpacldcprocess-error

器件型号:TDA4VM

工具与软件:

尊敬的 TI 专家:

  我们在 TDA4VM 上使用图形来捕获摄像头图像时发现了一个问题。 在正常创建捕获和图形后、当我们调用 Vx_GraphParameterDequeueDoneRef 检索图像时、会打印一条消息"[tivxVpacLdcProcess:323] Failed to submit request"。 但是、调用 vxMapImagePatch 后不再显示此消息。 您能解释一下为什么会发生这种情况吗? 我们在 Linux 平台上使用 SDK 版本8.4。

谢谢、此致。

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

    您好!

    当传递给 LDC 的参数为空时、通常会出现此错误。 想知道您是否在调用 vxVerifyGraph 来确保所有参数都已正确分配? 此外、当调用 vxMapImagePatch 时、是否 使用对象数组并为此对象数组的所有索引调用此 API?

    此致、

    Brijesh

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

    您好!

    是的、我们调用了 vxVerifyGraph 函数、该函数返回正常值。 调用 vxGraphParameterDequeDoneRef 后、我们对数组执行了 vxMapImagePatch、对于该对象、我们为所有索引调用了 vxMapImagePatch。 我们对调用 vxMapImagePatch 后为什么不再提示错误感到困惑?

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

    您好!

    我们继续进行测试、发现如果在调用 vxGraphParameterDequeDoneRef 之前对 LDC 输出阵列执行 vxMapImagePatch、则不再发生错误。 但是、如果我们先执行 vxGraphParameterDequeueDoneRef、然后调用 vxMapImagePatch、则仍然会出现错误。 为什么会发生这种情况?

    谢谢、此致。

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

    您好、

    我想补充一点说明。 下面的屏幕截图显示了我们的使用方法、其中红色框突出显示了我们通过 vxCreateObjectArray 创建的 vx_object_array、用于与 vx_GraphParameterDequeueDoneRef 一起使用以获得 LDC 的输出。 在我们的测试中、如果我们首先对此数组执行 vxMapImagePatch 和 vxUnmapImagePatch、则当我们执行 vx_GraphParameterDequeueDoneRef 时、将不会提示该错误。 为什么会这样呢? 这是正确的步骤吗? 或者此过程是否正常使用?

    谢谢、此致。

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

    您好!

    您究竟想要做什么?  

    如果您希望访问 LDC 输出图像、那么是的、您可以创建 LDC 输出图像的图形参数、如果复制了 LDC、那么它应该是对象数组。 因此、请检查您是如何使用 LDC 并相应地使用数据对象的。  

    此致、

    Brijesh  

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

    您好!

    是的、我们计划访问 LDC 的输出、并且已经能够使用我们定制的对象数组。 尽管我们偶尔会遇到错误"[tivxVpacLdcProcess:323] Failed to submit request"(提交请求失败)、但我们仍然可以使用上面屏幕截图中显示的配置成功检索图像。 我想问:正确的程序是什么? 在调用 vx_GraphParameterDequeueDoneRef 之前、我们是否需要首先调用 vxMapImagePatch 和 vxUnmapImagePatch?

    谢谢、此致。

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

    您好!

    无需进行对象数组映像的映射、因为这将分配缓冲区空间、但如果使用得当、框架也可以执行此操作。  

    您很可能复制 LDC 节点、因为您正在传递对象数组。 对于传递到此节点的所有对象数组、对象数组大小是否相同? 当其中一个参数(最像输入/输出缓冲区)为空时、就会出现"提交失败"错误、因此请分析您的节点创建参数、并确认它是使用正确的参数集创建的。  

    此致、

    Brijesh  

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

    您好!

    我们的进一步测试发现、当我们将 APP_BUFFER_Q_DEPTH 设置为4时、没有问题。 但是、如果超过4、则会发生错误。 与此有何相关性?

    谢谢、此致。

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

    您好!  

    我真的不认为缓冲区队列深度和节点复制之间存在相关性,如果图形写入正确,那么您能检查您的图形吗?  

    此致、

    Brijesh

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

    您好!

      我们在屏幕截图所示的位置找到了错误、我们发现调用 vxMapImagePatch 会为该 addr 分配一个值、并且采集的图像是正常的。 根据屏幕截图中显示的方法、使用此方法时是否需要调用一次 vxMapImagePatch?

    谢谢、此致。

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

    您好!

    是的、如果尚未分配缓冲区、则 MAP 将分配缓冲区。 但是、如果这个缓冲区正在某个地方被使用、框架应该已经分配了该缓冲区。 您可以检查一下您正在映射的这个缓冲区是否用于 OpenVX 代码的某些部分吗? 您是否将其用作 LDC 输出或其他用途?  

    此致、

    Brijesh

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

    您好、

       我们只需按照上面的屏幕截图所示的方式创建并设置此缓冲区、然后调用 Vx_GraphParameterDequeDoneRef 以获取 LDC 图像、然后打印一个错误。 因此、如果我们要避免这种错误、是否需要添加任何额外的处理? 我们设置它的方法是否错误? 正确的方法是什么

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

    您好!

    很难查看屏幕截图中的设置、您能否分享这部分代码? 通常、如果未使用映像对象、则不会对其进行分配、并且由于您正在映射该对象、因此将对其进行分配。 因此、我想了解您在何处使用该图像对象。  

    此致、

    Brijesh

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

    您好!

       很抱歉给您带来不便、但由于代码库很大、无法导出、我们只能通过屏幕截图分享。 但是、涉及 LDC 使用的所有器件都已在屏幕截图中捕获。 我们当前的用例如下所示: APP_INIT_LDC --> vxCreateObjectArray 创建 LDC 输出缓冲器--> APP_CREATE_graph_LDC --> APP_VERIFY_graph -->呼叫 vxGraphParameterDequeueDoneRef --> 保存图像 . 屏幕截图中的图像保存功能是官方提供的功能 APP_MULTI_cam 、其中包括对函数的调用、如 vxMapImagePatch . 我的问题是、如屏幕截图中所示、使用时是否存在任何问题? 是否有办法解决此错误?

    谢谢、此致。

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

    您好!

    但在调用 APP_INIT_LDC 时、LDC 输出已由该 API 创建。 该 API 在内部调用 create_LDC_outputs、从而创建 LDC 输出图像并从中创建一个对象数组。 您在应用中创建的中间映像有哪些用途? 您能帮助了解此图像的使用吗?  

    请注意、此中间映像不会用于创建 LDC 节点、这可能就是您看到此中间映像的内存分配的原因。  

    此致、

    Brijesh

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

    您好!

    我们的方法基于官方演示的 APP_MULTI_CAM_CODEC。 该演示以这种方式创建 LDC 输出。 默认情况下、LDC 输出为 vx_object_array 指针。 我知道,如果我们要手动 vxGraphParameterDequeueDoneRef ,我们必须创建一个指针数组,对吗? 此外、在分析 vxSetGraphScheduleConfig 的源代码时、如果它是一个指针、那么可能会导致错误、对吧? 那么、您是说我们只需要使用默认输出吗?

    谢谢、此致。

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

    您好!

    但您是否 在应用中真的需要 LDC 输出? 为什么不能让框架像多摄像头应用那样处理 LDC 的输出? 在多摄像头应用中、LDC 输出直接连接到 Mosaic 节点 、不 需要中间图像。  

    此致、

    Brijesh

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

    您好!

    是的、我们确实需要 LDC 的输出、因为我们从捕获节点获取的图像是 UYVY 格式、但我们需要 NV12格式。 因此、我们需要使用 LDC 进行格式转换。 则会出现此问题。 我看到在 APP_MULTI_CAM_CODEC 中、他们可以采用相同的方式来获得 LDC。 有什么方法可以解决该错误吗?

    谢谢、此致。

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

    您好!

    但 LDC 的输出用在哪里呢? 它是否用于其他一些基于 OpenVX 的节点? 这样您就无需在应用中从 LDC 获得输出。  

    此致、

    Brijesh

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

    你(们)好

    其他 OpenVX 节点未使用 LDC 的输出。 执行 vxGraphParameterDequeueDoneRef 后、我们将处理获取的图像以用于其他目的、例如保存图像或将其传递给其他算法进行处理。

    谢谢、此致。

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

    在这种情况下、您是否可以 避免使用模块文件夹中的 LDC、主要是 APP_INIT_LDC 和 APP_CREATE_graph_LDC API? 在示例应用中创建 LDC 节点。 然后、您可以控制 LDC 输出。 您可以创建此输出的对象数组、还可以根据需要复制此节点、还可以获取此输出作为图形参数、然后将其发送 以供进一步处理。  

    此致、

    Brijesh

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

    你(们)好

    那么、这是否意味着当前模块文件夹中 LDC 的初始化代码会出现这个问题? 如果需要修改、是否意味着输出应更改为对象数组?

    谢谢、此致。

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

    可以、由于您使用的是来自 modules 文件夹的 LDC、它使用 内部分配的对象数组、因此不会使用应用程序的中间对象数组。 您需要删除对 模块文件夹的调用、并从应用程序中创建 LDC 节点、就像单摄像机应用程序一样、或者您需要更新此模块文件夹以使用中间缓冲区。  

    此致、

    Brijesh

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

    您好!

    非常感谢您的建议。 我们修改了 LDC 模块中的源代码、发现还打印了错误消息。 通过进一步查找源代码、我们发现、由于 LDC 节点调用 vxReplicateNode 来复制该节点、因此当验证图请求存储器时、它将请求父对象的空间。 但是、父节点的 mem_alloc_callback 为 NULL、因此未分配 LDC 存储器。 我从修改后的程序中删除了 vxReplicateNode、并创建了4个 LDC 节点。 因此、不再打印错误消息、且图像正常。 您能帮我检查一下这种方法是否有问题吗? 非常感谢。

    谢谢、此致。

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

    非常感谢、这个问题最终得到了解决、所以关闭该主题。