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.

[参考译文] TDA4VH-Q1:v4l2h264enc CPU 负载优化

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1574476/tda4vh-q1-v4l2h264enc-cpu-load-optimization

器件型号: TDA4VH-Q1
Thread 中讨论的其他器件: TDA4VH

工具/软件:

TDA4VH  

SDK 11.0 Linux+FreeRTOS

 TDA4VH-Q1:v4l2h264enc CPU 负载优化 

上述文章中提到的 v4l2h264enc 使用案例是否有任何更新?

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

    您好:

    尚无法在 11.0 上验证多摄像头编解码器演示。 我们过去看到了使用 appsink 进行 dma-buf 处理时出现的问题。 您是否使用 appsink 简单地写入显示器或单独的应用程序?

    谢谢、
    Sarabesh S.

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

    你(们)好

    我们创建了一个单独的线程来从 appsink 提取数据并将其保存为文件。

    我们最终保存的文件是 H264 格式的压缩文件。

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

    如果最终目标是写入文件、则不可避免地会出现 CPU 副本、因为没有显示缓冲区或其他应用缓冲区来利用 DMA-BUF。

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

    你(们)好

    我们使用的 gstreamer 命令如下

    [2025-06-13 12:08:11]  gst_wrapper: GstCmdString:
    [2025-06-13 12:08:11]  appsrc format=GST_FORMAT_TIME is-live=true do-timestamp=true block=false name=myAppSrc0 ! queue 
    [2025-06-13 12:08:11]  ! video/x-raw, width=(int)1536, height=(int)1728, framerate=(fraction)30/1, format=(string)NV12, interlace-mode=(string)progressive, colorimetry=(string)smpte240m
    [2025-06-13 12:08:11]  ! v4l2h264enc
    [2025-06-13 12:08:11]  ! video/x-h264 
    [2025-06-13 12:08:11]  ! h264parse config-interval=-1
    [2025-06-13 12:08:11]  ! queue ! appsink name=myAppSink0 max-buffers=50 drop=true 
    [2025-06-13 12:08:11]  
    [2025-06-13 12:08:11]  GstPipe init status 0!

    2.我们使用“top -H -p pid“命令发现, t_h264_save 线程(将 H264 文件保存到文件系统)的 CPU 负载非常低,只有 1.7%,但 queue0:Gstreamer src 线程(应该是 Gstreamer 命令行中的第一个“队列“)相当高,为 14%。

    为什么队列 0:src 线程会消耗这么多 CPU? 这是合理的吗?

    3.由 perf 生成的火焰图还显示、queue0:src 的负载最高。您可以下载 out.zip 文件进行查看。

    e2e.ti.com/.../1374.out.zip

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

    您好:  

    appSrc 正在传递多少个流?

    队列元素的作用是解耦上行元素和下行元素。 第一个队列配置为持续轮询将帧推入下游、以保持时序同步。 我建议尝试设置 is-live=false 和 blocking=true、以查看 CPU 是否中断且未发生不同步。 如果帧不同步、则需要 is-live=true。

    请告诉我这是否有用、如果不有用、我们可以探索其他一些属性来限制队列元素的 CPU 利用率。

    谢谢、
    Sarabesh S.

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

    你(们)好

    appSrc 正在传递多少个流?

    我们的应用使用马赛克节点将六幅图像合并成一幅 1536*1728 图像,然后将其推送到 appsrc。 实际帧速率约为每秒 23 帧。

    我建议尝试设置 is-live=false 和 blocking=true、以查看 CPU 是否中断、是否发生不同步。

    我们尝试配置 is-live=false 和 block=true、但 CPU 负载没有变化。实际帧速率与之前相同、每秒 23 帧。

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

    您好:

    是否可以尝试使用具有以下属性的队列:  

    队列泄漏=下行最大大小 — 时间=87000000

    我注意到、您的流水线没有利用 dma-buf 来避免 memcpys 从 appsrc 摄像头缓冲器到下游元素。 这可能是 CPU 开销的来源、无法通过对队列元素设置限制来降低 CPU 开销。 您是否还可以使用 gst_debug=queue:6 gst_debug_no_color=1 gst_debug_file=queue.log 运行应用程序并共享日志、以便我们可以看到每个队列的满量程度。

    谢谢、
    Sarabesh S.

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

    你(们)好

    [引述 userid=“567667" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1574476/tda4vh-q1-v4l2h264enc-cpu-load-optimization/6080620

    是否可以尝试使用具有以下属性的队列:  

    队列泄漏=下行最大大小 — 时间=87000000

    [/报价]

    我们尝试了此配置、似乎 CPU 负载没有发生显著变化。

    您是否还可以使用 gst_debug=queue:6 gst_debug_no_color=1 gst_debug_file=queue.log 运行应用程序并共享日志、以便我们可以看到每个队列获得的满量。

    您可以下载“queue.zip"文件“文件进行查看。

    e2e.ti.com/.../queue.zip

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

    您好:

    在这个问题上是否有进一步的进展? 如上所述、您需要利用 dma-buf 来降低 CPU 利用率、以及流水线中元素之间的存储器副本。 此外,由于您正在使用 Appsink 写入文件,您无疑会看到用于写入文件的 CPU 使用情况,您可以尝试使用 fakesink 来查看您是否看到任何改进。

    根据上面的命令、您会显示编码器硬件的 CPU 利用率实际上非常低~1.7%、我认为这种利用率不会低得多。 您可以尝试将以下内容添加到 vl42h264enc 元素中:  

    i += snprintf(&params->m_cmdString[i], CODEC_MAX_LEN_CMD_STR-i,"! v4l2h264enc output-io-mode=4 capture-io-mode=2 bitrate=1500000 \n");

    并将摄像机配置为从 v4l2 元素导入缓冲区。  

    谢谢、
    Sarabesh S.