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.

[参考译文] SK-AM62P-LP:gstreamer's v4l2src 和 v4l2h265enc 存储器使用情况存在问题

Guru**** 2482225 points
Other Parts Discussed in Thread: AM62P

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1433119/sk-am62p-lp-a-problem-with-gstreamer-s-v4l2src-and-v4l2h265enc-memory-usage

器件型号:SK-AM62P-LP
主题中讨论的其他器件:AM62P

工具与软件:

大家好、专家:

使用 gstreamer 时、我发现 v4l2src 和 v4l2h265enc 占用了大量内存、是否有办法减少这两个节点的内存使用、也许两个节点内部缓存了多个视频帧。

这是我的完整流水线:

gst-launch-1.0 v4l2src device=/dev/video4 io-mode=4 name=appsrc_track2! capsfilter caps="video/x-raw、width=(int) 1920、height=(int) 1536、format=(string) UYVY、frameerate=(fractional) 25/1、 colorimetry=(string)bt709;"! v4l2h265enc output-io-mode=5 extra-controls="控制、prepend_sps_and_pps_to_idr=(int) 1、FRAME_LEVEL_RATE_CONTROL_ENABLE=(int) 1、video_bitrate=(int) 8000000、video_gop_size=(int) 25;"! appsink max-buffers=1 dropp=true name=appsink_track2

这是流水线运行后的存储器屏幕截图

       

这是电路板刚通电时的存储器快照:

这是测试 v4l2src 的存储器屏幕截图、测试流水线为:

gst-launch-1.0 v4l2src device=/dev/video4 io-mode=4 name=appsrc_track2! capsfilter caps="video/x-raw、width=(int) 1920、height=(int) 1536、format=(string) UYVY、frameerate=(fractional) 25/1、 colorimetry=(string)bt709;"! 链接

这是测试 v4l2h265enc 的存储器屏幕截图、测试流水线为:

gst-launch-1.0 v4l2src device=/dev/video4 io-mode=4 name=appsrc_track2! capsfilter caps="video/x-raw、width=(int) 1920、height=(int) 1536、format=(string) UYVY、frameerate=(fractional) 25/1、 colorimetry=(string)bt709;"! v4l2h265enc output-io-mode=5 extra-controls="控制、prepend_sps_and_pps_to_idr=(int) 1、FRAME_LEVEL_RATE_CONTROL_ENABLE=(int) 1、video_bitrate=(int) 8000000、video_gop_size=(int) 25;"! 链接

从这些内存屏幕截图中我们可以看到 v4l2h265enc 和 v4l2src 占用了大量内存(CMA)、是否有办法设置这两个节点的缓冲区队列数?

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

    您好、Qianghong:

    以下是编码/解码的内存要求:

    我正在 CSI 内部进行检查。 请允许我用一天/两天的时间回复。

    此致、

    Suren

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

    你好、Suren:ć

      此数据是否有任何统计方法?我们可以调整 v4l2h265enc?的存储器使用量

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

    尊敬的 Suren:

    您能给客户提供一些反馈吗?  

    BR、

    Biao

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

    您好、Qianghong:

    存储器要求针对包含5个参考帧的公共流 pedestrian_1920x1080.mp4。

    其他文件的引用帧数可能不同、因此总存储器要求会有所不同

    此外、存储器占用量取决于解码的各个方面:编码文件配置文件、级别、比特率、后者会影响参考帧编号从而影响整个大小。

    我们可以说、它被当作参考来获取平均流的存储器要求。

    vmstat 用于计算系统总内存使用量。 因此、在测试用例 vmstat 读取之前进行读取计算-(减)在测试用例 vmstat 读取期间。

    如果您正在寻找特定的分辨率、请向我们提供详细信息、我们可以为您提供编码或解码所需的存储器容量的估计值。  

    此致、

    Suren

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

    尊敬的 Qinghong:

    您之前关于 v4l2src 缓冲器的问题、请参阅该补丁: https://git.ti.com/cgit/arago-project/meta-arago/tree/meta-arago-extras/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0005-HACK-gstv4l2object-Increase-min-buffers-for-CSI-capt.patch?h=scarthgap。此补丁会增加 j721e-csi2rx 的缓冲区、j721e-csi2rx 是 AM62P 的 CSI Rx 驱动器。

    此致、

    建中

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

    您好、Suren:

    这是我们计划的设计图。 在前面的捕获中、图像是从摄像机捕获的、由 OpenGL 处理、发送到编码管线中、然后通过 rtsp 推送。 在此过程中、您能否评估这些流水线消耗的存储器以及是否有优化空间

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

    尊敬的建中:

    我们将 own_min=obj-min_buffers +4更改为 own_min=obj-min_buffers +2、但这无效

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

    尊敬的 Qinghong:

    如何重建 GStreamer 组件?

    在此过程中、您能否评估这些流水线消耗的内存以及是否有优化空间

    您能否对设计图进行更新、使其使用英语而不是中文? 之后、我们会让合适的专家来看看并发表评论。

    谢谢!

    建中

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

    您好、建中:

      将其修改为2后、我使用 Yocto 编译了一个映像、然后测试发现 CMA 内存使用率没有降低

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

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

    尊敬的 Qinghong:

    我需要一些时间进行调查、并希望在本周晚些时候与您联系。

    感谢您的耐心。

    建中

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

    尊敬的 Qinghong:

    建中提及的 Yocto 仅在您在 v4l2src 中使用 dmabuf-import 时才会生效
    这就是为什么您没有看到 CMA 用法的变化

    通过查看数据、我发现 v4l2src 并不会消耗更多内存
    ITS v4l2h264enc、
    为什么 GOP 尺寸为25? 您能否尝试减少此损耗、看看它是否会影响存储器使用

    此致
    Rahul T R

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

     此图显示了在1G DDR 板上运行的链路演示的存储器使用情况。 GStreamer 和 OpenGL 的使用率相对较高、尤其是 GPU 的用户内存使用率、这是合理的吗? 我们如何对其进行优化?

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

    您好!

    上述内存使用是否与用户空间应用程序无关? 您还可以使用 PVRTune: https://developer.imaginationtech.com/solutions/pvrtune/ 来测量每个帧的 GPU 读写量。

    此致、
    Krunal

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

    使用 PVRTUEN 捕获的内容如图所示、但我们不确定如何查看相关参数。 您能提供一些指导吗?

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

    您好、Rahul:

       25的 GOP 由客户输入给我们、 今天下午我将测试更改 GOP 大小是否会改善内存使用

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

    您好、Rahul:

    1.我已经测试过 v4l2src 的 IO-mode 设置为 dmabuf-import、流水线将报告错误。

    2.我测试修改 GOP 的大小,以了解内存负载是否与 GOP 相关,但测试发现 GOP 大小与内存使用之间没有关联

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

    尊敬的 Qinghong:

    如果要在 v4l2src 中设置 dmabuf-import、则需要设置 v4l2h265enc output-io-mode=dmabuf

    此致
    Rahul T R

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

    尊敬的 Rahul:

    我的 v4l2src 和 v4l2h265enc 不在同一流水线中。 为 v4l2src 设置 dmabuf-import 后、管道将无法正常工作

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

    尊敬的 Qinghong:

    您能否共享您的流水线和错误日志?

    谢谢你。

    建中

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

    您好、建中:

    此图已包含我创建的所有管道、 您可以看到我的捕获管道与我的编码管道是分开的。

    此错误在执行捕获流水线时被曝光:

    root@linux:/home# gst_debug=2 gst-launch-1.0 v4l2src device=/dev/video2 io-mode=5! video/x-raw、width=1920、height=1536、format=UYVY! 队列! appsink
    正在将管道设置为暂停...
    管道处于活动状态、不需要 PREROLL ...
    0:00:00.115839555 2399 0xff8c000d00 warn v4l2 gstv4l2object.c:4666:gst_v4l2_object_get_crop_rect: VIDIOC_CROPCAP 失败
    管道是 PREROLLED ...
    正在将管道设置为播放...
    新时钟:GstSystemClock
    0:00:00.117269980 2399 0xff8c000d00 warn v4l2 gstv4l2object.c:4666:gst_v4l2_object_get_crop_rect: VIDIOC_CROPCAP 失败
    0:00:00.118050895 2399 0xFFff8c000d00 warn v4l2 gstv4l2object.c:5471:gst_v4l2_object_decision_allocation: 错误:没有可从中导入的下游池。
    0:00:00.118115035 2399 0xff8c000d00 warn v4l2 gstv4l2object.c:5471:gst_v4l2_object_decision_allocation: 错误:导入 DMABUF 或 USERPTR 时、我们需要从中导入一个池
    错误:来自元素/GstPipeline:pipeline0/GstV4l2Src:v4l2src0:没有可从中导入的下游池。
    其他调试信息:
    /usr/4510debug/gstreamer1.0-plugins-good/1.22.12/sys/v4l2/gstv4l2object.c(5471) src:gst_v4l2_object_decision_allocation ():/GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
    在导入 DMABUF 或 USERPTR 时、我们需要从中导入一个池
    0:00:00.118463380 2399 0xFFff8c000d00 warn basesrc gstbasesrc.c:3354:gst_base_src_prepare_allocation: 子类无法决定分配
    执行在0:00:00.002021195之后结束
    正在将管道设置为空...
    0:00:00.118541010 2399 0xffffff8c000d00 warn basesrc gstbasesrc.c:3134:gst_base_src_loop: 错误:内部数据流错误。
    0:00:00.118598755 2399 0xff8c000d00 warn basesrc gstbasesrc.c:3134:gst_base_src_loop: 错误:流已停止、原因未协商(-4)
    错误:来自元素/GstPipeline:pipeline0/GstV4l2Src:v4l2src0:内部数据流错误。
    其他调试信息:
    /usr/4510debug/gstreamer1.0/1.22.12/libs/gst/base/gstbasesrc.c src (3134):gst_base_src_loop ():/GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
    流已停止、未协商原因(-4)
    正在释放管道...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    错误:来自元素/GstPipeline:pipeline0/GstV4l2Src:v4l2src0:没有可从中导入的下游池。
    [报价]

    因为使用了 appsink、所以会出现该错误。