Other Parts Discussed in Thread: AM67A
器件型号: AM67A
你好
到目前为止、我们使用了 e5010 jpeg 编码器和 debian 12 Linux sysem。 在切换到基于 Debian 13 的操作系统后、我们观察到、如果 AM67A 处理器在整体高负载级别 (GPU + CPU + e5010) 下运行、则会生成损坏的 JPEG 图像。 在密集测试之后、似乎是由内存管理系统(负责 mmap 内存区域)的竞争条件导致图像损坏的原因。 我们不确定提供的 NV12 编码输入数据是否未正确传递到 e5010 内核模块、或者生成的 JPEG 二进制数据在执行 select (FD + 1、&read_FDS、...) 后是否与用户空间中的 mmap 内存不同步。 在使用 debian 12 时,我们没有得到完全相同工作负载的损坏图像。
我们设法找到了一种解决方法,至少为我们提供了技术上正确的 JPEG 图像。 我们通过在每次选择呼叫之前为 V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE 和 V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE 执行 VIDIOC_STREAMON、然后在涉及的 V4L 缓冲区出队后执行 VIDIOC_STREAMOFF 来实现这一点。 但是、使用 e5010 这样会导致创建具有整体阻尼强度水平的 JPEG 图像。 请查看随附的说明问题的示例图像。 我们可以做些什么来消除这个问题吗?
此外、我们希望切换回之前的 V4L 呼叫序列 (stream-start -> queue -> Dequeue ->...-> queue -> Dequeue -> Stream-stop)、而不是启动和停止每个 e5010 编码的流、因为这会增加整个过程的延迟。 是否可以修复竞态条件错误?
此致
Richard Arndt


