英飞凌
直播中

张红

7年用户 1234经验值
私信 关注

让YUV2演示在FX3的内存上运行,启动数据流时却无法正常工作,应用程序会崩溃,为什么?

大家好,我一直在尝试让 YUV2 演示在 FX3 的内存上运行,到目前为止,我已经成功修改了 MJPEG 演示,以输出 96x96 的 YUV2 图像,而且在 Windows 上,摄像头预览确实有效(我看到了我的 4 帧样本),但启动数据流时却无法正常工作,应用程序会崩溃。
在 linux 上运行时,v4L2 报告说它根本不起作用:
VIDIOC_STREAMON returned -1 (Input/output error)通过 wireshark,我发现 MJPEG 和 YUV2 之间的唯一区别(除了格式和帧描述符的配置变化之外)是,在加载 YUV2 fw 时,主机向 FX3 请求的 bAlternate 设置错误,导致等时流无法启动:

应该是 1,就像这个 mjpeg 截图中的命令一样,它确实启动了流媒体:

这会导致代码出现问题,无法启动数据流:
            /* Start the video stream if the streaming interface has been selected. */            if ((interface == CY_FX_UVC_INTERFACE_VS)    (altSetting != 0))            {                CyU3PDebugPrint (4, "STARTSrn", evtype);                CyFxUVCApplnStart ();            }            break;
我附上了两个 USB 描述符的 wireshark 日志,以显示它们的端点配置完全相同(由于论坛不接受 .txt 文件,所以附为 C 文件)、 除了 cyfxuvcdscr.c 而框架本身与样本相比没有任何修改。 我使用的是最新版本的 SDK,可以运行的 mjpeg 演示与不能运行的演示是在同一个 SDK 上编译的。


回帖(1)

youyoulan

2024-5-28 16:31:24
为了解决这个问题,我们需要按照以下步骤进行操作:

1. 首先,我们需要确保 YUV2 演示的代码已经正确修改,以适应 FX3 的内存。这包括确保格式和帧描述符的配置正确。

2. 接下来,我们需要检查应用程序在启动数据流时崩溃的原因。这可能是由于内存问题、资源争用或其他原因导致的。为了确定具体原因,我们可以在应用程序中添加日志记录,以便在崩溃时提供更多信息。

3. 对于 Linux 上的 v4L2 问题,我们需要确保 VIDIOC_STREAMON 函数调用正确执行。这可能需要检查代码中的相关部分,以确保没有错误。同时,我们还需要确保输入/输出错误是由于 YUV2 格式而不是其他原因导致的。

4. 根据 wireshark 的结果,我们需要检查主机向 FX3 请求的 bAlternate 设置。如果这个设置错误,可能会导致等时流无法启动。我们需要确保这个设置正确,以便等时流可以正常工作。

5. 如果以上步骤都无法解决问题,我们可能需要进一步调查 YUV2 格式和 MJPEG 格式之间的差异。这可能包括检查数据包结构、编码方式等,以确定是否存在不兼容的问题。

6. 最后,如果问题仍然存在,我们可以考虑寻求社区的帮助,例如在相关论坛或开发者群组中提问。这样,我们可以获得其他开发者的经验和建议,以便更快地解决问题。

通过以上步骤,我们可以逐步排查问题,并找到导致应用程序崩溃和数据流无法正常工作的原因。在找到问题原因后,我们可以进行相应的修改和优化,以确保 YUV2 演示在 FX3 的内存上正常运行。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分