我对 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 之间进行有效的通信。
谢谢!