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.

[参考译文] AM5728:DMA 内存分配失败、出现 dmabuf

Guru**** 2575385 points
Other Parts Discussed in Thread: AM5728

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/628671/am5728-dma-memory-allocation-fails-with-dmabuf

器件型号:AM5728

您好!

我们将使用 ducatih264enc 对全高清数据进行编码。 我们将从 FPGA 到 AM5728 EVK 提供1920x1080@60、YUV16位数据。
由于数据格式为 YUYV、因此我们使用 VPE 插件在馈送到编码器之前将数据转换为 NV12。

管道流程如下:

FPGA  ---- >VIP   --- >VPE   --- >ducatih264enc  ---- > 文件链接
      YUYV         YUYV          NV12                 MP4

我们使用以下命令:

gst-launch-1.0 -e v4l2src device=/dev/video1 io-mode=4! \
'video/x-raw、format=(string) YUY2、width=(int) 1920、height=(int) 1080、framerate=(fraction) 60/1'! \
VPE num-input-buffers=8! 'video/x-raw、format=(string) NV12、width=(int) 1920、height=(int) 1080/'! 排队! ducatih264enc level=level-51 profile=HIGH! 排队! h264parse! mp4 mux! 文件链接位置= temp.mp4

上述管线在几分钟内工作正常。 之后、根据以下日志、内存分配失败

root@am57xx-EVM:~#[2629.912733] VIP 48990000.VIP:大小为4149248的 DMA_alloc_相干 故障

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

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

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

**(GST-LAUNCH-1.0:1151):严重**: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:02:06.188277213之后结束
正在将管道设置为暂停...
正在将管道设置为就绪...
[2630.106452]*** FPGA_s_stream ***
正在将管道设置为 NULL ...
正在释放管道...

我从 bootargets 增加了 CMA 大小(CMC=512M),记录时间增加了,但错误仍然存在。 将显示以下日志
当内存分配失败时,仍有487MB CMA 内存可用
cat /proc/meminfo
总内存:1866148 KB
MemFree:1167520 KB
可用内存:1512168 KB
缓冲器:14272kB
缓存:369416 KB
SwapCached:0KB
激活:93176 KB
未激活:343328 KB
有效(ANON):54540 KB
非活动(ANON):44440 KB
活动(文件):38636 KB
非活动(文件):298888 KB
Unevicable:0KB
已锁定:0KB
总容量:1307648 KB
HighFree:779508 KB
低总容量:558500 KB
低空闲:388012 KB
SwapTotal:0KB
SwapFree:0KB
脏:8KB
写回:52KB
AnonPages:52812 KB
映射:80644 KB
SHMEM:46168 KB
层块:40420 KB
可重复计算:26976 KB
SUn回收:13444KB
KernelStack:1272 KB
页表:1532 KB
nfs_unstable:0KB
退回:0KB
WritebackTmp:0KB
委员会:933072 KB
USDED_AS:342940 KB
Vmalloctotal:245760KB
Vmalloced:0KB
VmallocChunk:0KB
总容量:688128 KB
CmaFree:487020 KB


这个问题、当我们使用 IO-MODE=5时、我找不到。 由于我们从 FPGA 获取 YUYV 数据、并且 dunctih264enc 期望数据采用 NV12格式、因此我们无法设置 PAD 能力 YUY2、因此我们需要设置 PAD 能力 NV12。 当我们将功能设置为 NV12时、数据在编码时交换(UYVY)。

gst-launch-1.0 -e v4l2src device=/dev/video1 io-mode=5! 'video/x-raw、format=(string) NV12、width=(int) 1920、height=(int) 1080、framerate=(fraction) 60/1'! ducatih264enc level=level-51 profile=HIGH! 排队! h264parse! mp4 mux! 文件链接位置= temp1.mp4

我们使用的是 SDK 版本04.00.00.04。

请帮助我们了解为何在 IO-MODE=4时失败。

谢谢、

Praveen

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    软件团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    请检查此主题:
    e2e.ti.com/.../2292637

    希望这对您有所帮助。

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

    我已经检查了该主题、问题未得到解决。

    问题仍然存在。

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

    您是否在上一帖子中应用了 e2e 线程中的补丁?
    即使使用此补丁、您也会发现问题吗?
    您能否尝试此管道:
    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

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

    您好!

    感谢您的回答。 由于离开了这里、所以花了一些时间进行了回复。

    我应用了补丁。 问题仍然存在。

    我们的要求是在收到 STOP 命令之前一直进行记录。  因此、我们不会在本例中设置"num-buffers"。 记录应运行数小时。

    我使用您发送的管道进行了检查、下面是错误日志:

    /GstPipeline0/GstV4l2Src:v4l2src0.GstPad:src:cap ="video/x-ray\、\ format\=(string\) YUy2\、\ width\=(int\) 1920\、\ he[ 743*

    light\=(int\) 1080/\、\像素宽高比\=(分数\) 1/1\、\隔行模式\=(字符串\)逐行\、\比色度\=(字符串\) bt601\、\"

    /GstPipeline0/GstCapsFilter:capsfilter0.GstPad:src:cap ="video/x-ray\、\ format\=(string\) YUy2\、\ width\=(int\) 1920\、\ h"

    /GstPipeline0/GstVpe:vpe0.GstPad:src:cap ="video/x-ray\、\ format\=(string\) NV12\、\ width\=(int\) 1920\、\ height\=(int\)"

    /GstPipeline0/GstCapsFilter:capsfilter1.GstPad:src:cap ="video/x-ray\、\ format\=(string\) NV12\、\ width\=(int\) 1920\、\ h"

    /GstPipeline0/GstTee:t.GstTeePad:src_0:cap ="video/x-ray\、\ format\=\(string\) NV12\、\ width\=\(int\) 1920\、\ height\=(int"

    /GstPipeline0/GstQueue:queue0.GstPad:sink:cap ="video/x-ray\、\ format\=(string\) NV12\、\ width\=(int\) 1920\、\ height\=("

    /GstPipeline0/GstQueue:queue0.GstPad:sink:cap ="video/x-ray\、\ format\=(string\) NV12\、\ width\=(int\) 1920\、\ height\=("

    /GstPipeline0/GstTee:t.GstTeePad:src_1:cap ="VIDEO/x-RAW\、\ format\=(string\) NV12\、\ width\=(int\) 1920\、\ height\=(int"

    /GstPipeline0/GstDucatiH264Enc:ducatih264enc0.GstPad:src:cap ="video/x-h264\、\ alignmention\\(string\) au\、\ stream-format\="

    /GstPipeline0/GstDucatiH264Enc:ducatih264enc0.GstPad:src:cap ="video/x-h264\、\ alignmention\\(string\) au\、\ stream-format\="

    /GstPipeline[7434.581077] VIP 48990000.VIP:大小为4149248的 dma_alloc_相干 失败

    :lipine0/GstDucatiH264Enc:ducatih264enc0.GstPad:src:cap ="video/x-h264\、\ alignmention\=(string\) au\、\ stream-format\=(string\) by"

    /GstPipeline0/GstQueue:queue1.GstPad:sink:cap ="video/x-h264\、\ alignmention\=(string\) au\、\ stream-format\=(string\) byte-"

    /GstPipeline0/GstQueue:queue1.GstPad:sink:cap ="video/x-h264\、\ alignmention\=(string\) au\、\ stream-format\=(string\) byte-"

    /GstPipeline0/GstDucatiH264Enc:ducatih264enc0.GstPad:SINK:CAPs ="VIDEO/x-RAW\、\ format\=(string\) NV12\、\ width\=(int\) 19"

    /GstPipeline0/GstVpe:vpe0.GstPad:src:cap ="video/x-ray\、\ format\=(string\) NV12\、\ width\=(int\) 1920\、\ height\=(int\)"

    /GstPipeline0/GstCapsFilter:capsfilter1.GstPad:SINK:CAPs ="VIDEO/x-RAW\、\ format\=(string\) NV12\、\ width\=(int\) 1920\、\"

    /GstPipeline0/GstDucatiH264Enc:ducatih264enc0.GstPad:src:cap ="VIDEO/x-h264\、\ width\=(int\) 1920\、\ height\=(int\) 10101080/"

    /GstPipeline0/GstQueue:queue1.GstPad:sink:cap ="VIDEO/x-h264\、\ width\=(int\) 1920\、\ height\=(int\) 101080/\、\帧率\="

    /GstPipeline0/GstQueue:queue1.GstPad:src:cap ="video/x-h264\、\ width\=(int\) 1920\、\ height\=(int\) 1080/\、\帧率\=("

    /GstPipeline0/GstFileSink:filesink0.GstPad:sink:cap ="video/x-h264\、\ width\=(int\) 1920\、\ height\=(int\) 1080/\、\ fraamer

    **(GST-LAUNCH-1.0:1650):严重**:GST_FD_MEMORY_GET_FD:断言"GST_IS _FD_LOADator (mem->allocator)"失败

    **(GST-LAUNCH-1.0:1650):严重**:GST_FD_MEMORY_GET_FD:断言"GST_IS _FD_LOADator (mem->allocator)"失败

    **(GST-LAUNCH-1.0:1650):严重**:GST_FD_MEMORY_GET_FD:断言"GST_IS _FD_LOADator (mem->allocator)"失败

    **(GST-LAUNCH-1.0:1650):严重**: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)

    执行在0:00:00.601266750之后结束

    正在将管道设置为暂停...

    正在将管道设置为就绪...

    我已将 CMA 内存增加至512MB。 记录时间增加(3小时),但此后失败。 如果不设置 CMA (默认值),错误将在一小时内发生。

    我们希望在不发生内存分配故障的情况下运行几个小时。  

    此致、

    Praveen

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

    如果您用视频转换元件替换 VPE、您是否观察到问题?

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

    您好!

    我看到您也在使用 ducatih264enc。
    其中存在内存泄漏。
    您可以检查此主题:
    e2e.ti.com/.../2313451
     第2页您可以找到修补程序和.so 文件。

    BR
    玛格丽塔

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

    通过将 VPE 替换为视频转换,不会出现问题。 这是因为在视频转换的情况下、不使用 CMA 存储器。
    使用视频转换、CPU 使用率接近100%、帧速率为7FPS。

    我按照建议采用了.so 文件、但问题仍然存在。

    此致、
    Praveen
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    使用 VIP 中的包装器模块、我能够以 UYVY 格式重新排列输入数据。
    这样我就可以从流水线中移除 VPE 插件、并且我可以使用 IO-mode=5;因为在 IO-mode=5中没有内存分配问题。

    现在、我可以在不使用 VPE 的情况下获取预期数据。 但帧速率相对较低(43FPS)、而对于 VPE、我得到的是60FPS。

    管道如下:
    gst-launch-1.0 -e v4l2src device=/dev/video1 io-mode=5 num-buffers=50! 'video/x-raw、format=(string) NV12、width=(int) 1920、height=(int) 1080、framerate=(fraction) 60/1'! ducatih264enc level=level-51 profile=HIGH! 排队! h264parse! mp4 mux! 文件链接位置= temp.mp4

    我们是否可以在不使用 VPE 的情况下获得60FPS?

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

    您好 Praveen、

    请等待 PLSDK 4.1的发布。  该版本将处理该问题。 该版本即将推出。

    此致、

    Manisha