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.

[参考译文] Linux/AM5728:GStreamer DMA 分配失败

Guru**** 2553260 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/614981/linux-am5728-gstreamer-dma-allocation-fails

器件型号:AM5728

工具/软件:Linux

您好!

这是的更新

只需启动一个新的干净线程。

条件:

我们在 AM572x EVM 上使用 PSDK 04.00.04、并尝试通过 gstreamer 流式传输1920x1080p30视频。 我们编写了自己的最小 VIP 子设备驱动程序,并使用 dmabuftest 工具对其进行了测试。 使用以下 gstreamner 流水线时

gst-launch-1.0 v4l2src device=/dev/video1 io-mode=4! 'video/x-raw、format=(string) YUY2、width=1920、height=1080、framerate=(fraction) 30/1'! VPE num-input-buffers=8! 'video/x-raw、format=(string) NV12、width=(int) 1920、height=(int) 1080/'! TEE NAME=t! 排队! ducatih264enc! 排队! h264parse! 太棒了! udpsink host=192.168.3.147端口=5555 SYNC=false t! 排队! kmsink 连接器=36 -v -e

我们得到一个 DMA alloc 相干失败错误。 这似乎仅在使用高分辨率时发生。 降低分辨率时、流水线会运行。 因此、我想 CMA 内存会变得碎片化。 我们无法让项目运行、因此我们需要您的帮助。

以下是 export GST_DEBUG=*v4l2*:6日志

e2e.ti.com/.../v4l2.txt

以下是 dmesg 日志:

e2e.ti.com/.../4237.dmesg.txt

提前感谢

Marc

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    软件团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    是否有任何更新? 由于此错误、我们暂停了 AM572x EVM 的评估。 哪些 CMA 池用于 v4l2 DMA alloc? 以及如何增加这些池? 如前所述、我们正在使用 gstreamer 流水线。 在上面的日志文件中、可以检查错误。

    谢谢

    Marc
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉耽误你的时间。 能够帮助解决此问题的人员目前正在出差、将于周一返回办公室。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您可以在内核 bootargs 中将 CMA 池大小指定为 CMA=64M。 如果不起作用、您可以尝试 CMA=128M。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在我的末尾尝试了流水线以下、我不需要增加 CMA 池的大小-
    gst-launch-1.0 -v v4l2src device=/dev/video1 num-buffers=1800 IO-mode=4! 'video/x-raw、format=(string) YUY2、width=1920、height=1080! 排队! VPE num-input-buffers=8! 'video/x-raw、format=(string) NV12、width=(int) 1920、height=(int) 1080/'! TEE NAME=t! 排队! ducatih264enc 配置文件=高电平= 51! 排队! filesink location=test.264 t! 排队! kmsink
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们正在录制到 USB 记忆棒! 您应该多次启动和停止(CTRL-C)流水线以使错误发生。 此外、当打开调试输出时、错误发生的频率更高。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否意味着 DMA alloc 相干故障错误不是第一次发生。 您必须多次按 CtrlC 组合键才能到达缓冲区 alloc 失败错误?? 如果是、带有 GST 启动功能的 CRTL-C 可能没有干净的出口。 您可能需要使用实际的 gstreamer 应用程序而不是 GST 启动基于收费的管道来进行实验。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、Manisha、

    我将使用自己的 gstreamer 应用程序并再次进行评估。 当管道长时间运行时、也会发生错误。 但它需要更长的时间(几个小时)。 多次按 CTRL-C 并重新启动时、错误会立即发生。 也许您可以将第三个分支添加到示例流水线(录制、流式传输、实时图像)、并让其长时间运行。 这正是我们的应用。 应在 USB 记忆棒上完成记录。 也许您可以重现错误。

    我还有其他一些问题:

    V4L2从何处获取缓冲器? 在 devicetree 中定义了多个 CMA 池。 视频缓冲池的默认大小是多少?
    gstreamer Ducati 插件使用哪些池进行缓冲区交换(ARM-DSP-h264编码器)?
    2.是否有办法查看池内的可用空间和碎片?

    感谢你的帮助

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

    大家好、Manisha、

    启动后首次运行 GST 启动时也会出现此错误。 当我使用上面的流水线时、它运行正常。

    gst-launch-1.0 -v v4l2src device=/dev/video1 num-buffers=1800 IO-mode=4! 'video/x-raw、format=(string) YUY2、width=1920、height=1080! 排队! VPE num-input-buffers=8! 'video/x-raw、format=(string) NV12、width=(int) 1920、height=(int) 1080/'! TEE NAME=t! 排队! ducatih264enc 配置文件=高电平= 51! 排队! filesink location=test.264 t! 排队! kmsink

    但是、当我使用 kmsink connector=36进行 HDMI 输出时、它会立即中止。 它始终是相同的 CMA 分配失败错误(请参阅上面的错误日志)。 可以分配5个缓冲区、当尝试分配第六个缓冲区时、返回 NULL。 我在引导提示符下设置了 CMA 128M,但这没有帮助。 当 CMA 增加到128M 时、我预期可以分配5个以上的缓冲区。 但它的行为与以前相同。 v4l2从何处分配它的内存?

    我已启用 v4l2、VIP、VPE 调试消息和内核功能-> CMA 调试消息,这些消息会产生额外的负载。 这会更频繁地产生误差。

    Marc

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

    我能够重现此问题。 我们将对此进行研究并返回。

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

    尊敬的 Marc:

    您能否在 VIP 补丁下应用并重建 VIP 驱动程序、以及在 gstreamer 流水线中使用 inter-interval=1进行编码器配置。 请告诉我这是否有助于解决该问题。  

    PLSDK-1426 am571x-idk、am572x-idk、am572x-EVM 双摄像头测试在 AM571/2 IDK 和 AM572x GP EVM 上失败 可从 http://git.ti.com/processor-sdk/processor-sdk-linux/commit/a0af4124c35edb2713887f4d3ec14a30844b3f99获取 VIP 驱动程序补丁
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、Manisha、

    感谢您的快速响应。 不幸的是,我明天和下周都不在办公室。 当我返回时、我将立即检查您的补丁并为您提供信息。

    顺便说一下、dmabuftest 工具不适用于 PSDK 04.00。 存在 v4l2分配 ioctl 错误。 也许这是相同的错误?!

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

    您好!

    此处还讨论了该主题:
    e2e.ti.com/.../2293106

    请注意、Marc 不要在两个不同的论坛上针对未来的同一问题打开两个 e2e 主题。

    BR
    玛格丽塔

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

    很抱歉。 我只是想在这里开始一个全新的纯净线程、并引用了旧线程。 将来我会避免这种情况。

    大家好

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

    大家好、Manisha、

    我应用了您的补丁、并进行了一些测试、结果如下:

    本地显示器上的 dmabuftest 输出:

    dmabuftest -s 32:1920x1080 -c 1920x1080@YUYV -d /dev/video1

    ->视频显示在本地显示屏上,dmesg 中没有错误

    HDMI 监视器上的 dmabuftest 输出:

    dmabuftest -s 36:1920x1080 -c 1920x1080@YUYV -d /dev/video1

    ->   HDMI 显示器上未显示视频,dmesg 中没有错误

    本地显示屏上的 GStreamer 输出:

    gst-launch-1.0 v4l2src device=/dev/video1 io-mode=4 num-buffers=300! 'video/x-raw、format=(string) YUY2、width=1920、height=1080、framerate=(fraction) 30/1'! VPE num-input-buffers=8! 'video/x-raw、format=(string) NV12、width=(int) 1920、height=(int) 1080/'! TEE NAME=t! 排队! ducatih264enc inter-interval=1! 排队! h264parse! 太棒了! udpsink host=192.168.3.147端口=5555 SYNC=false t! 排队! kmsink 连接器=32 -v -e

    ->视频显示在本地支付器上,dmesg 中没有错误,可以多次重新启动

    HDMI 监视器上的 GStreamer 输出:

    gst-launch-1.0 v4l2src device=/dev/video1 io-mode=4 num-buffers=300! 'video/x-raw、format=(string) YUY2、width=1920、height=1080、framerate=(fraction) 30/1'! VPE num-input-buffers=8! 'video/x-raw、format=(string) NV12、width=(int) 1920、height=(int) 1080/'! TEE NAME=t! 排队! ducatih264enc inter-interval=1! 排队! h264parse! 太棒了! udpsink host=192.168.3.147端口=5555 SYNC=false t! 排队! kmsink 连接器=36 -v -e

    ->有时它会运行、有时它会立即中止:

    gst-launch-1.0 v4l2src device=/dev/video1 io-mode=4 num-buffers=300! 'video/x-raw、format=(string) YUY2、width=1920、height=1080、framerate=(fraction) 30/1'! VPE num-input-buffers=8! 'video/x-raw、format=(string) NV12、width=(int) 1920、height=(int) 1080/'! TEE NAME=t! 排队! ducatih264enc inter-interval=1! 排队! h264parse! 太棒了! udpsink host=192.168.3.147端口=5555 SYNC=false t! 排队! kmsink 连接器=36 -v -e
    正在将管道设置为暂停...
    管道处于活动状态,不需要 PREROLL...
    正在将管道设置为正在播放...
    新时钟:GstSystemClock
    /GstPipeline0/GstV4l2Src:v4l2src0.GstPad:src:cap ="VIDEO/x-RAW\、\ format\=(string\) YUy2\、\ width\=(int\) 1920\、\ height\=(int\) 1080/\、\、\(pixel-bace-1) baclity= 1)、色带比1 (trade-bacy=)、1)/framex (fretry) 601)
    /GstPipeline0/GstCapsFilter:capsfilter0.GstPad:src:cap ="VIDEO/x-RAW\、\ format\=(string\) YUy2、\ width\=(int\) 1920\、\ height\=(int\) 1080/\、\像素纵横比= 1)、色带1 (track/framex) 1)、1 (tracketry)/tracketry (frame= 1) bapert (framex (traction) 1)
    /GstPipeline0/GstVpe:vpe0.GstPad:src:cap ="VIDEO/x-RAW\、\ format\=(string\) NV12\、\ width\=(int\) 1920\、\ height\=(int\) 1080/\、\像素-宽高比\=(string\) 30\(frategy\) 1/amerate
    /GstPipeline0/GstCapsFilter:capsfilter1.GstPad:src:cap ="video/x-raw、\ format\=(string\) NV12\、\ width\=(int\) 1920\、\ height\=(int\) 1080/\、\像素纵横比= 1)帧速率1 (1)/frapate
    /GstPipeline0/GstTee:t.GstTeePad:src_0:cap ="VIDEO/x-RAW\、\ format\=(string\) NV12\、\ width\=(int\) 1920\、\ height\=(int\) 1080/\、\像素纵横比\=(1)帧速率\(1) 1/fraperate
    /GstPipeline0/GstQueue:queue0.GstPad:src:cap ="VIDEO/x-RAW\、\ format\=(string\) NV12\、\ width\=(int\) 1920\、\ height\=(int\) 1080/\、\像素-宽高比\=(frame\) 1/amerate (frame\) 1/30"
    /GstPipeline0/GstDucatiH264Enc:ducatih264enc0.GstPad:src:cap ="VIDEO/x-h264\、\对齐\=(字符串\) au\、\流格式\=(字符串\) byte-stream\、\ width\=(int \) 1) 1020X/百万像素比率= 1、1020X/百万像素比率
    /GstPipeline0/GstQueue:queue1.GstPad:sink:cap ="VIDEO/x-h264\、\ alignment\=(string\) au\、\ stream-format\=(string\) byte-stream \、\ width\=(int\) 1920、\ height\=(int\) frame\= 1) 1080/frame\、aspixerity\
    /GstPipeline0/GstQueue:queue1.GstPad:src:cap ="video/x-h264\、\ alignment\=(string\) au\、\ stream-format\=(string\) byte-stream \、\ width\=(int\) 1920、\ height\=(int\) 1080、framex 1) frature= 1 (pixel 1)/frate\
    /GstPipeline0/GstQueue:queue1.GstPad:src:cap ="video/x-h264\、\ alignment\=(string\) au\、\ stream-format\=(string\) byte-stream \、\ width\=(int\) 1920、\ height\=(int\) 1080、framex 1) frature= 1 (pixel 1)/frate\
    /GstPipeline0/GstH264Parse:h264parse0.GstPad:src:cap ="video/x-h264\、\ alignment\=(string\) au\、\ stream-format\=(string\) byte-stream\、\ width\=(int\) 1920\、\(try\) tortexed 比率1)、traction = 1 (trys/tortured rati= 1) 1080 (trape1)、trapeurbegy (tegy\(try\(try\) begy\(try\)/frate\(try\) begy\
    /GstPipeline0/GstH264Parse:h264parse0.GstPad:src:cap ="video/x-h264\、\ alignment\=(string\) au\、\ stream-format\=(string\) byte-stream\、\ width\=(int\) 1920\、\(try\) tortexed 比率1)、traction = 1 (trys/tortured rati= 1) 1080 (trape1)、trapeurbegy (tegy\(try\(try\) begy\(try\)/frate\(try\) begy\
    /GstPipeline0/GstH264Parse:h264parse0.GstPad:src:cap ="video/x-h264\、\ alignment\=(string\) au\、\ stream-format\=(string\) byte-stream\、\ width\=(int\) 1920\、\(try\) tortexed 比率1)、traction = 1 (trys/tortured rati= 1) 1080 (trape1)、trapeurbegy (tegy\(try\(try\) begy\(try\)/frate\(try\) begy\
    /GstPipeline0/MpegTsMux:mpegtsmux0.GstPad:sink_65:cap ="VIDEO/x-h264\、\ alignment\=(string\) au\、\ stream-format\=(string\) byte-stream\、\ width\\(int\) 1920、\(tortexed 比率1)、torture-format\= 1 (turbegroy/帧速率1)、turbegraines= 1 (turbegraines=)/frate\(turbegrainesx) x (begraint) x) x 帧速率) x 1) x (begra
    /GstPipeline0/GstH264Parse:h264parse0.GstPad:SINK:SINK:CAPs ="VIDEO/x-h264\、\ alignment\=(string\) au\、\ stream-format\=(string\) byte-stream\、\ width\=(int\) 1920\、\(begy\) x 比例1) 1080、(像素/帧速率1)
    /GstPipeline0/GstDucatiH264Enc:ducatih264enc0.GstPad:SINK:CAPs ="VIDEO/x-RAW\、\ format\\(string\) NV12\、\ width\=(int\) 1920\、\ height\=(int\) 1080)、1像素比率/帧速率1
    /GstPipeline0/GstVpe:vpe0.GstPad:src:cap ="VIDEO/x-RAW\、\ format\=(string\) NV12\、\ width\=(int\) 1920\、\ height\=(int\) 1080/\、\像素-宽高比\=(string\) 30\(frategy\) 1/amerate
    /GstPipeline0/GstCapsFilter:capsfilter1.GstPad:SINK:SINK:CAPs ="VIDEO/x-RAW\、\ FORMAT\=(STRING\) NV12\、\ width\=(int\) 1920\、\ height\=(int\) 1080/Fraper\、\像素纵横比= 1) 1/30/帧速率
    /GstPipeline0/GstDucatiH264Enc:ducatih264enc0.GstPad:src:cap ="VIDEO/x-h264\、\ width\=(int\) 1920\、\ height\=(int\) 1080/\、\ framera\\\\\\\\\(diter\\)30/(bytes= 1)、rand-stream= 1、rand-rand-rale= 1 (pixel-rame=)、rale=(byte rand-rand-rale=)、raleum-rale= 1 (framex)、rand-rand-streamperature= 1 (frame=(byte)、rand-rand-rand-rand-rand-rand-
    /GstPipeline0/GstQueue:queue1.GstPad:sink:cap ="VIDEO/x-h264\、\ width\=(int\) 1920\、\ height\=(int\) 1080/\、\ frame\\(frame\\\)30/1\、\\PIXE\(frame\=(frame\=)、rame/ring=(framex)、ring=(framex)/ring=(framex (framex)、ring=)/ramex (framex (framex)/ring=)/ring<=)/ramex (framex (framex (frame=)/ring<=)/ring<=)/ring<=)/ring<
    /GstPipeline0/GstQueue:queue1.GstPad:sink:cap ="VIDEO/x-h264\、\ width\=(int\) 1920\、\ height\=(int\) 1080/\、\ frame\\(frame\\\)30/1\、\\PIXE\(frame\=(frame\=)、rame/ring=(framex)、ring=(framex)/ring=(framex (framex)、ring=)/ramex (framex (framex)/ring=)/ring<=)/ramex (framex (framex (frame=)/ring<=)/ring<=)/ring<=)/ring<
    /GstPipeline0/GstQueue:queue1.GstPad:sink:cap ="VIDEO/x-h264\、\ width\=(int\) 1920\、\ height\=(int\) 1080/\、\ frame\\(frame\\\)30/1\、\\PIXE\(frame\=(frame\=)、rame/ring=(framex)、ring=(framex)/ring=(framex (framex)、ring=)/ramex (framex (framex)/ring=)/ring<=)/ramex (framex (framex (frame=)/ring<=)/ring<=)/ring<=)/ring<
    /GstPipeline0/GstH264Parse:h264parse0.GstPad:src:cap ="video/x-h264\、\ width\=(int\) 1920\、\ height\=(int\) 1088\、帧速率\=(frame\\) 30/1、byte-realign (trames=)、rectured rand-rality=(tralegy=)、trality=(tralegy=)、tralegy=(try=)、trybegra-rand-rand-rand-rand-rand-ralign (try=)、try=(try=)、trybegra-rand-rand-rand-rand-rand-rand-ralign (try"(try=)、try=(try=)、try=
    /GstPipeline0/MpegTsMux:mpegtsmux0.GstPad:sink_65:cap ="VIDEO/x-h264\、\ width\=(int\) 1920\、\ height\=(int\) 1088\、\ frame\\\\\\\\\\\\(sigma\)30/1)、begray=(begreorder-traction、trligma-rand=(traction)、trlectured rand-f针对(trligma-f针对)、tralign、trligma-f针对(begy=)、trligma-from1)、trligma-ralign (trlect/trlect/trlectured)、trlectured (trligma-f针对)、trlf针对)、trlf针对(begy=(begy=(trl
    /GstPipeline0/MpegTsMux:mpegtsmux0.GstPad:src:cap ="video/mpegts\、\ systemstream\=(boole\) true\、\ packetsize\=(int\) 188"
    /GstPipeline0/GstUDPSink:udpsink0.GstPad:SINK:SINK:SINK:SINK:CAP="VIDEO/mpegts\、\ systemstream\=(boole\) true\、\ packetsize\=(int\) 188"
    /gstPipeline0/MpegTsMux:mpegsmux0.GstPad:src:cap ="video/mpegts\、\ systemstream\\\=(boole)true\,\(packffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
    /GstPipeline0/GstUDPSink:udpsenk0.GstPad:接收器:cap ="video/mpegts\,\ systemstream\=\(boole\) true\,\ packetsize\=(int\) 188\,\,headerfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

    **(GST-LAUNCH-1.0:1256):严重**:GST_FD_MEMORY_GET_FD:断言"GST_is_FD_LOADator (mem->allocator)"失败

    **(GST-LAUNCH-1.0:1256):严重**:GST_FD_MEMORY_GET_FD:断言"GST_is_FD_LOADator (mem->allocator)"失败

    **(GST-LAUNCH-1.0:1256):严重**:GST_FD_MEMORY_GET_FD:断言"GST_is_FD_LOADator (mem->allocator)"失败

    **(GST-LAUNCH-1.0:1256):严重**:GST_FD_MEMORY_GET_FD:断言"GST_is_FD_LOADator (mem->allocator)"失败
    错误:来自元素/GstPipeline:流水 线0/GstV4l2Src:v4l2src0:内部数据流错误。
    其他调试信息:
    ./../../../gstreamer-1.8.3/libs/gst/base/gstbasesrc.c (2948):gst_base_src_loop ():/GstPipeline:流水线0/GstV4l2Src:v4l2src0:
    流任务暂停、原因错误(-5)
    EOS on shutdown enabled --等待 EOS After Error
    正在等待 EOS...
    从元件"流水线0"获得 EOS。
    接收到 EOS -正在停止管道...
    执行在0:00:00.532600108之后结束
    正在将管道设置为暂停...
    正在将管道设置为就绪...
    正在将管道设置为 NULL ...
    正在释放管道...
    root@am57xx-EVM:~# dmesg
    [362.448603] OMAP-iommu 55082000.MMU:55082000.MMU:2.1版
    [362.491321] adv7842 4-0020:adv7842_set_format 启动
    [362.929574] VIP 48990000.VIP:大小为4149248的 dma_alloc_相干 失败
    root@am57xx-EVM:~#