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.

[参考译文] J784S4XEVM:AM69-SK:Wave5 解码器 DMABuF 导出到 TIDSS 显示屏显示对角线梯度—GStreamer 工作

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1628593/j784s4xevm-am69-sk-wave5-decoder-dmabuf-export-to-tidss-display-shows-diagonal-gradient-gstreamer-works

器件型号: J784S4XEVM
Thread 中讨论的其他器件: AM69

 电路板:AM69-SK (J784S4)
 SDK:ti-processor-sdk-linux-edgeai-j784s4-evm-11_00_00_08
 内核:6.12.57

 您好、

 我正在实现零复制视频显示:Wave5 H.264 解码器→DMABUF 导出→TIDSS DRM 导入→HDMI 输出。

 GStreamer 流水线正常工作:
  gst-launch-1.0 udpsrc port=5004 caps='application/x-RTP、……' \
   ! rtph264depay! h264parse! v4l2h264dec! kmssink driver-name=tidss sync=false

 我的自定义 V4L2/DRM 应用程序使用完全相同的 ioctl 序列(通过 strace 比较进行验证):
 Wave5 捕获缓冲区 (V422_MEMORY_MMAP) 上的 VIDIOC_EXPBuF
 2. DRM_IOCTL_PRIME_FD_TO_HANDLE
 3. drmModeAddFB2 (w=1920、h=1088、NV12、偏移[1]=步幅*1088、间距=1920)
 4.覆盖平面上的 drmModeSetPlane

 结果:显示屏显示静态对角渐变(白色→紫色)、而不是解码的视频。

 我已验证的内容:
 -解码缓冲器的 CPU mmap→原始 NV12 转储→ffmpeg 转换=颜色正确的图像
 - wave5 使用 VB2_dma_contig_memops(连续的 dma 存储器)
 - DRM 内核调试:dma_addr = 0xF97600000、大小= 3133440(导入成功)
 - AddFB2 参数与 GStreamer 完全匹配(通过 gst_debug=kmssink:7 + strace -f)
 -尝试:各种 UV 偏移、平面类型、颜色属性、FD 模式、EXPBUF 计时—所有的梯度都相同
 -性能良好: 30fps, 10ms/帧

 问题:
 1. wave5 VPU 和 TIDSS 之间的 DMABUF 零复制是否存在任何已知限制或所需的初始化步骤
 有何不同?
 2. TIDSS 是否需要特定的 CMA 区域配置来访问 Wave5 解码器输出缓冲区?
 3.是否有演示 wave5→TIDSS DMABuF 显示的参考应用(GStreamer 除外)?

 谢谢你。

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

    ——
    其他查找—活动显示期间的 debugfs 比较:

    当 GStreamer 通过 kmssink 显示时:

    $ cat /sys/kernel/debug/dri/0/state
    PLANE[52]:FB=71
    已导入=否
    dma_addr=0x0000000f9bc00000

    当我的自定义应用显示具有相同 ioctl 序列的相同流时:

    PLANE[52]:FB=74
    已导入=是
    dma_addr=0x0000000f9b800000

    两者均使用:VIDIOC_EXPBuF→PRIME_FD_TO_HANDLE→AddFB2→SetPlane。
    对角线伪影仅显示为已导入=yes fb。

    执行的其他测试(全部未能修复):
    - AddFB2 h=1088 匹配 GStreamer—相同的伪影
    -每帧 AddFB2 + RmFB 匹配 GStreamer 模式—相同的伪影
    - drmWaitVBlank 后 SetPlane—没有效果
    -反向分配:DRM dumb 缓冲区通过 V4L2_MEMORY_DMABUF 导出到 wave5—wave5 内核日志:帧缓冲区
    准备、失败:–12 (ENOMEM)

    问题:为什么相同的 Prime 导入序列在 Gstreamer 中产生 imported=no 但在我的应用中产生 imported=yes ? Is
    Gstreamer/kmssink 内部使用不同的缓冲池或 GEM 分配路径?