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.

[参考译文] TMS320DM8168:帮助我了解元素 omxbufferalloc

Guru**** 2558250 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/597928/tms320dm8168-help-me-about-understanding-element-omxbufferalloc

器件型号:TMS320DM8168

我对 omxbufferalloc 有一些问题。 有人能帮我一秒钟吗?

这是一个流水线。

gst-launch -e v4l2src device=/dev/video0 always-copy=false queue-size=8 ! 'VIDEO/x-RAWE-YUV、FORMAT=(fourcc) NV12、width=1920、height=1080、帧速率=(分数) 30/1' ! omxbufferalloc 数字缓冲区=8 ! OMX_Scaler !v4l2sink 设备=/dev/video1

在 wiki 中、我知道"omxbufferalloc:用于分配可传递给 OMX 元素的缓冲区的缓冲区分配器元素。 例如、V4L2捕获使用此值来分配缓冲区、然后可以将这些缓冲区传递给 OMX_h264enc、而不会产生缓冲区副本"

v4l2src 为什么不在内部代码中分配这些缓冲区? 我认为它必须在内部初始化函数中执行此操作。

2.我不知道如何进行 omxbufferalloc 和 OMX_h264enc 通信。 omxbufferalloc 会创建一些缓冲区、OMX_h264enc 如何获取这些缓冲区。

缓冲 区可以传递到 OMX_h264enc、而不会产生缓冲区副本

我知道 OMX_h264enc 将直接使用这些缓冲区(通过指针)。 如您所知、H264编码器需要排队等待一些帧才能运行运动补偿算法。 如何知道此过程所需的缓冲器数量。

我提出这个问题是因为我正在开发一个运行捕获、图像处理和流式传输的系统。 我在保存在共享区域的帧上运行应用程序捕获和图像处理。 要进行流处理、我编写一个 LiveStreamer 应用程序来运行 gstreamer 流水线。 它使用 GstAppSrc 将帧数据推入。

appsrc --> OMX_h264enc --> rtph264pay --> udpsink

要将帧数据推入 appsrc、我使用信号需求数据、然后将帧推入。

+创建并分配 GstBuffer 缓冲区、将帧数据复制到中

+将 GstBuffer 推入队列: gst_app_src_push_buffer (appsrc、buffer);

此代码工作正常、但系统运行速度非常慢。 因此、我正在研究 omxbufferalloc、希望能够在 appsrc 和 OMX_h264enc 之间进行有效的通信。

谢谢!

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

    如果您使用的是 v4l2src ... !! Capsfilter! omxbufferalloc…… !! OMX_h264enc! fakesink 您是否观察到"运行缓慢"?
    您还可以检查 omxbufferalloc 源代码。 此代码以 ezsdk/component-sources/GST... 文件夹。


    BR
    玛格丽塔