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.

[参考译文] TDA4VH-Q1:[TDA4VH]请提供如何禁用多摄像头输入、只需处理一种摄像头数据方法即可?

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1643827/tda4vh-q1-tda4vh-please-provide-how-to-disable-multi-camera-input-just-handle-one-camera-data-method-to-us

器件型号: TDA4VH-Q1
Thread 中讨论的其他器件: TDA4VH

尊敬的专家:

我们的客户正在设计 TDA4VH ADAS 系统、这些系统满足多摄像头输入要求、但只需处理单通道摄像头的帧异常问题。 该行为与以下情况非常相似。  根据 RDK 提供的多摄像头 VPAC 应用、他们发现仅处理一个通道的原始 NV12 数据就会有问题。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1048311/tda4-multi-camera-application-frame-error-issue

我们是否可以提供多摄像头拍摄、但只需向我们手动提供单向 RAW12 数据方法?

这些都是背景、我们已尝试找出原因:

硬件架构: TDA4VH 单 CSI 接口输入 3 路摄像头通过 UB97xx FPDLINK 桥. (摄像头 1 8M30FPS +摄像头 2 8M30FPS +摄像头 3 3M@30FPS)  。

  1. 所有输入和通过 ISP 处理它的三种方式。 摄像头不报告问题的 3 种方法。 按下 TEST(测试)几个小时、工作正常。
  2. 只需启用单个采集和单个显示处理 8M 摄像头、系统就能正常工作。
  3. 启用 3 路摄像头输入、但丢弃摄像头 2/camera 3 数据并仅显示摄像头 1 原始数据。 捕获帧异常、如下图所示。

    在案例 3 中、CSI-RX 输入 3 摄像头数据、但仅在输出接口处显示摄像头 1。 看起来像多摄像头捕捉模式 juse 启用单向摄像头处理 DMA 通道有问题。

    那么在我们的 RDK 中,我们是否提供了一个例子来实现多通道摄像头数据输入和把一个摄像头,把其他摄像头帧放在存储器中与我们分享?

image.png

此致!

Han Tao

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

    尊敬的 Han:

    是否修改了 multi_cam 应用程序以支持 3 个摄像机?

    启用 3 种摄像头输入方式、但丢弃摄像头 2/camera 3 数据、只显示摄像头 1 原始数据。 捕获帧异常、如下图所示。

    在案例 3 中、CSI-RX 输入 3 摄像头数据、但仅在输出接口处显示摄像头 1。 看起来像多摄像头捕捉模式 juse 启用单向摄像头处理 DMA 通道有问题。

    [/报价]

    您能否详细介绍一下这是如何实现的?

    您如何在您的应用程序中删除摄像机 2/camera 3?

    如果可能、您可以共享应用程序中已更改的更改或片段。

    此致、
    Gokul

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

    Gokul 您好:

    很抱歉让您稍后重播。

    联系客户、他们修改了与我们不同份额的器件。 我们已经向客户介绍了 EVM 板与多格式摄像头的相同用户案例。

    【常见问题解答】PROCESSOR-SDK-J721E:如何从单个 CSIRX 端口捕获不同类型/格式的摄像头? -处理器论坛 — 处理器- TI E2E 支持论坛

    他们将修改后的器件进行比较、并对此有一些疑问。 您能否查看以下客户反馈?

    此致!

    Han Tao

    我检查了示例代码、发现与 visionapp 示例应用程序存在一些差异、我们将其视为参考实现。 其中一些不相关、但另一些可能有趣:

    1. 该应用程序使用同步机制仅在创建所有捕获对象后启动图像传感器。  -它不适用于我们,因为我们有 3 个完全不同的摄像头,每个我们有一个单独的摄像头实体注册。
    2. 调用 vxVerifyGraph 后、该应用程序会使缓冲区进入队列、然后仅触发 eventt ImageDone 以调用 Handle_Verify 。 -它与 visionapps 示例应用程序不匹配。 后者会调用 appStartImageSensor、然后使缓冲区进入队列。 我想从 TI 了解此订单是否真的很重要? visionapps 方法是否会导致任何问题?
    3. 该应用从不调用 appStopImageSensor 函数。 -这是因为我们不关心在这里重新启动传感器,在应用程序中,还是由于其他原因?
    4. 与原始的 visionapps 模块相比、APP_CAPTURE_Module 和 APP_SENSOR_MODULE 发生了重大变化。 很难比较这些变化、因此、如果它们中有对我们很重要的东西、我们想知道。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Han:

    该应用程序使用同步机制仅在创建所有捕获对象后启动图像传感器。  -它不适用于我们,因为我们有 3 个完全不同的摄像头,每个我们有一个单独的摄像头实体注册。[/报价]

    好的、有 3 个不同的捕获节点、是为 3 个捕获节点创建了 3 个不同的图形、还是所有捕获节点都在同一个图形中。

    您能否提供有关捕获节点输出如何在流水线中连接的更多信息。

    如何显示 3 个捕获节点输入? (您是否使用任何节点组合帧)

    如果可能、我可以获取图形的点输出文件。

    调用 vxVerifyGraph 后、该应用程序进入缓冲区队列、然后仅触发 eventt Handle_Verify ImageDone 以调用 appStartImageSensor。 -它与 visionapps 示例应用程序不匹配。 后者会调用 appStartImageSensor、然后使缓冲区进入队列。 我想从 TI 了解此订单是否真的很重要? visionapps 方法是否会导致任何问题?

    这应该没问题。

    [引述 userid=“57353“ url=“~/support/processors-group/processors/f/processors-forum/1643827/tda4vh-q1-tda4vh-please-provide-how-to-disable-multi-camera-input-just-handle-one-camera-data-method-to-us
    • 所有输入和通过 ISP 处理它的三种方式。 摄像头不报告问题的 3 种方法。 按下 TEST(测试)几个小时、工作正常。
    • 只需启用单个采集和单个显示处理 8M 摄像头、系统就能正常工作。
    • 启用 3 路摄像头输入、但丢弃摄像头 2/camera 3 数据并仅显示摄像头 1 原始数据。
    [/报价]

    您能否描述一下这是如何实现的、您是如何从摄像机 2 和摄像机 3 中丢弃帧的?

    看起来像多摄像头捕捉模式 juse 启用单向摄像头处理 DMA 通道有问题。

    只要您将不同的缓冲区排入每个捕获、您就不会看到通道之间的任何冲突。

    我怀疑应用程序是否未正确处理缓冲区、可能存在伪影、但无法使用提供的信息确认任何内容。

    此致、
    Gokul

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

    >您如何在您的应用中放置摄像机 2/摄像机 3?
    我们为 3 个不同的摄像头实现了 3 个不同的 ISP 图。 放置摄像机意味着我们不会为摄像机创建图形、因此我们不会启动这些摄像机的图像传感器。 例如、要使用摄像机 0、我们只为摄像机 0 创建 ISP 图形。

    >如果可能、您可以共享应用程序中已更改的更改或片段。
    不考虑代码共享、因为我们使用自己的应用程序、而不是 TI 示例应用程序之一。

    >确定、因此有 3 个不同的捕获节点、是否为 3 个捕获节点创建了 3 个不同的图形或所有捕获节点都在同一个图形中。
    >您能否提供有关捕获节点输出如何在管道中连接的更多信息。
    我们为每个摄像头创建了 3 个不同的图表。 每个图形都有自己的捕获节点。 图形没有明确的关系。 我们在主线程中依次初始化它们、然后在单独的线程中处理它们。

    >如何显示 3 个捕获节点输入? (您是否使用任何节点组合帧)
    没有任何显示器直接连接到图形输出端。 相反、我们与其他软件模块共享缓冲器。 该模块可以处理图形输出。 为了简化问题复制过程和转储损坏的图像,我们将雕刻节点的输出注册为图形参数,并将 raw12 图像保存到 eMMC。 此外、我们通过其他方式重现了该问题:将图形输出保存为 YUV 图像、或将处理后的图像输出到 ROS 实时可视化工具。 我认为这是为了避免错误的图像保存方法是不可能的。 此外、运行 3 个摄像头时不会出现问题。

    >如果可能、我可以获得图形的点输出文件。
    我将带有所有摄像机的图形点输出的存档附加到一起。 该图形仅包含具有为捕获输出注册的图形参数的捕获节点。

    >我怀疑应用程序中的缓冲区没有正确处理、可能存在伪影、但无法用提供的信息确认任何内容。
    您能否介绍一下可视为“缓冲区处理不当“的内容? 在处理图形外的缓冲区之前、我们先将它们去队列。 处理完这些缓冲区后、我们将缓冲区排队回到图表。 在出队列排队之间的某个时候是否会损坏缓冲区?

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

    尊敬的 Cheng:

    我们为 3 个不同的摄像机实施了 3 个不同的 ISP 图形。 放置摄像机意味着我们不会为摄像机创建图形、因此我们不会启动这些摄像机的图像传感器。 例如、要使用摄像机 0、我们只为摄像机 0 创建 ISP 图形。
    [/报价]

    好的、  
    因此对于摄像头 0
    图形 0:capture_0 -> ISP_node_0

    所有 3 个摄像头
    图形 0:capture_0 -> ISP_node_0
    图形 1:Capture_1 -> ISP_NODE_1
    图形 2:CAPTURE_2 -> ISP_Node_2

    我的理解正确吗?

    是否有其他节点连接到 ISP_Node?

    所有 3 个摄像头都连接到同一个 csirx 实例、camera0 映射到虚拟通道 0、 类似地、CAM1 ->虚拟通道 1、类似地、CAM2 ->虚拟通道 2。 是这样的。

    为了简化问题复制过程和转储损坏的图像,我们将 Carture 节点的输出注册为图形参数,并将 raw12 图像保存到 eMMC。 此外、我们通过其他方式重现了该问题:将图形输出保存为 YUV 图像、或将处理后的图像输出到 ROS 实时可视化工具

    您是否仍在保存的帧中看到问题?

    我能想到的是,如果你不为其他 2 个摄像头创建图形,当只有一个摄像头使用,那么它就像一个单摄像头应用程序,应该正常工作,它不会为其他 2 个摄像头配置任何东西在 csirx。 我在这里没有涉及任何 DMA 通道问题。

    您是否在单摄像头应用程序中验证了摄像头流媒体(就像单个摄像头的独立应用程序)?

    您是否在禁用摄像机之前重新启动设备、或者您正在终止 3 台摄像机配置应用程序并使用 1 台摄像机配置再次启动?

    >如果缓冲区未得到正确处理、我怀疑应用程序存在伪影、但无法使用提供的信息确认任何内容。

    我假设有一个不同的场景(创建了 3 个捕获节点、仅创建了一个 ISP 图形,您通过处理缓冲器来丢弃摄像机帧)、但在您提供了为 3 个摄像机创建了 3 个不同图形的信息后、排队/出队之间不应有任何缓冲区损坏。  

    此致、
    Gokul

    [/quote]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    所有 3 个摄像头都连接到同一个 csirx 实例、camera0 映射到虚拟通道 0、 类似地、CAM1 ->虚拟通道 1、类似地、CAM2 ->虚拟通道 2。 正确。

    是的。 是的

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

    > graph0:capture_0 -> ISP_node_0

    >且适用于所有 3 台摄像机

    > graph0:capture_0 -> ISP_node_0

    >图形 1:capture_1 -> ISP_node_1

    >图形 2:capture_2 -> ISP_node_2

    >我的理解正确吗?

    是、所有图形都是并行工作的。 仅运行摄像机 0/1/2 时、应该与单个摄像机示例应用程序完全相同。

    >是否有其它节点连接到 ISP_node?

    我不太确定这里是什么 ISP_node。 有 VISS、LDC、MSC 节点按顺序连接、而 AEWB 节点连接到 VISS 输出。

    但是、为了重现此问题、仅在图中添加捕获节点就足够了。 发生率不取决于图形中的节点数。 我们可以在捕获节点的输出端看到损坏的图像、因此损坏会传播到所有图形。

    >您是否仍在保存的帧中看到问题?

    是的。 如上所述、捕获节点的输出已损坏。

    >并且是否在禁用摄像机之前重新启动设备、或者要终止 3 个摄像机配置应用程序并使用 1 个摄像机配置再次启动?

    为了清理测试、我们在每次应用运行周期后都会重新启动电路板。 我们从 1 个摄像头开始。

    此处不存在混合 3 个摄像头和 1 个摄像头配置的情况。

    尽管我们尝试在同一系统启动周期中多次运行应用程序,但在同一个系统启动周期中,我们尝试了使用 1 个摄像头。 行为是相同的。

    >我假设有一个不同的场景(其中创建了 3 个捕获节点、只创建了一个 ISP 图形,您可以通过处理缓冲区来放置摄像机帧)、但在您提供了 3 个摄像机创建了 3 个不同图形的信息后、排队/出队之间不应有任何缓冲区损坏。

    是的、我们还认为 ISP 图形之间不应存在任何关系、但实际上存在关系。 某种程度上不同的场景具有不同的行为。 1 个摄像头 — 输出损坏,3 个摄像头 — 否

    >所有 3 个摄像机都连接到同一个 csirx 实例、camera0 映射到虚拟通道 0、类似地、CAM1 ->虚拟通道 1、类似地、CAM2 ->虚拟通道 2。 是这样的。

    是的、正确。

    >我能想到的是,如果你不为其他 2 个相机创建图形,当只使用一个相机,那么它就像一个单摄像头应用程序,应该正常工作,它不会为其他 2 个相机配置任何东西在 csirx。 我在这里没有涉及任何 DMA 通道问题。

    >您是否在单摄像头应用程序中验证了摄像头流媒体(如仅用于一台摄像头的独立应用程序)?

    还没有

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

    尊敬的 Cheng:

    我认为这里没有任何问题、从您的答案来看、从应用程序的角度来看、似乎是正确的。

    [报价 userid=“700173“ url=“~/support/processors-group/processors/f/processors-forum/1643827/tda4vh-q1-tda4vh-please-provide-how-to-disable-multi-camera-input-just-handle-one-camera-data-method-to-us/6358263

    >您是否在单摄像头应用程序中验证了摄像头流媒体(如仅用于一台摄像头的独立应用程序)?

    还没有

    [/报价]

    这个问题只能再看一次。

    还可以在 3 摄像头用例和 1 摄像头用例中配置时验证串行器和解串器配置。

    让我尝试修改应用程序、然后从我这边进行测试

    此致、
    Gokul

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

    无论该应用是使用一个摄像头还是三个摄像头、 解串器的配置都 保持不变。 解串器始终将数据从三个摄像头转发到 SOC。 进行了一个测试、 摄像头激活后、 解串器 没有转发来自其他两个通道的数据。 此时、图像似乎正常。

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

    尊敬的 XI:

    我修改了 multi_cam 应用程序、以便对 3 个摄像头使用不同的图形 、并使用 NUM_Graphs 1、2 和 3 进行了测试。 所有三个测试 LDC 输出图像都正常、不会出现任何损坏。 这在一定程度上模拟了您的用例、但全部 3 个摄像头相同 (imx390)。

    e2e.ti.com/.../app_5F00_multi_5F00_cam_5F00_3_5F00_graphs.zip

    您能在结束时运行这个演示并检查一次吗?

    此致、
    Gokul

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

    嗨、Gokul

    `s需要三个不同的`sensor_name`和三个不同的` ensorObj 值。

    2.我注意到在您的演示中,所有三个图形都使用`TIVX_TARGET_CAPTURE1`。 是这样吗? 我们现在将分别使用`TIVX_TARGET_CAPTURE1`、`TIVX_TARGET_CAPTURE1`和`TIVX_TARGET_CAPTURE3`。

    根据以上两点、您能否提供修改后的测试演示?

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

    尊敬的 ZI:

    [quote userid=“612194“ url=“~/support/processors-group/processors/f/processors-forum/1643827/tda4vh-q1-tda4vh-please-provide-how-to-disable-multi-camera-input-just-handle-one-camera-data-method-to-us/6391874 我注意到、在您的演示中、所有三个图形都使用`TIVX_TARGET_CAPTURE1`。 是这样吗? [/报价]

    是的、

    [quote userid=“612194“ url=“~/support/processors-group/processors/f/processors-forum/1643827/tda4vh-q1-tda4vh-please-provide-how-to-disable-multi-camera-input-just-handle-one-camera-data-method-to-us/6391874 `我们现在将分别使用` TIVX_TARGET_CAPTURE1 `、` TIVX_TARGET_CAPTURE1 `和` TIVX_TARGET_CAPTURE3。

    我也可以尝试在我的最后,并更新你.

    [quote userid=“612194“ url=“~/support/processors-group/processors/f/processors-forum/1643827/tda4vh-q1-tda4vh-please-provide-how-to-disable-multi-camera-input-just-handle-one-camera-data-method-to-us/6391874 我们需要三个不同的`sensor_name`和三个不同的`sensorObj`值。

    我可能无法测试此组合、因为我目前没有 3 个摄像头设置。 也许您可以修改代码并对其进行测试。

    此致、
    Gokul

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

    Hi Gokul、

    使用`TIVX_TARGET_CAPTURE1`、`TIVX_TARGET_CAPTURE2`和`TIVX_TARGET_CAPTURE3`时、测试结果是什么? 在这种情况下、您可以仅启动两个摄像头或一个摄像头并检查图像是否失真来进行测试。

    我担心我的代码修改可能会影响测试结果。 您`s修改代码、我会将其替换为新的` ensor_name。

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

    尊敬的 Xi:

    [quote userid=“612194“ url=“~/support/processors-group/processors/f/processors-forum/1643827/tda4vh-q1-tda4vh-please-provide-how-to-disable-multi-camera-input-just-handle-one-camera-data-method-to-us/6394693 `使用` TIVX_TARGET_CAPTURE1 `、` TIVX_TARGET_CAPTURE2 `和` TIVX_TARGET_CAPTURE3 会得到什么测试结果? 在这种情况下、您可以通过仅启动两个摄像机或一个摄像机并检查图像是否失真来进行测试。

    我还没有完成测试、一旦完成、将会更新您。

    此致、
    Gokul