2017-04-24 48 views
0

我正在写基于gstbasesink的gstreamer接收器,它将通过NTSC视频编码器包装fpga播放视频。我有我自己的驱动程序,通过irq发送帧数据的请求(基本上,vsync信号)。使用gstreamer插件接收器作为用户应用程序,它通过ioctl轮询帧数据请求。如何在gstreamer中从源代码请求更多缓冲区?

vsync固定在30fps,需要的数据是480x720大小的隔行数据YUY2。

我使用的源代码是videotestsrc,运行速度为60fps。

我是一个gstreamer的初学者,我想要做的是在vsync之间获得2个缓冲区,并在render()方法中交错它。并发送一个完整的帧到设备。

我很担心如何在一个vsync中“请求”2个缓冲区的源代码。

回答

0

我感觉你正在做的工作比你需要的多,但是也许创建一个自定义appsink并使用gst_app_sink_pull_sample

https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-appsink.html

+0

如果我输出隔行扫描30fps的,我不应该需要60fps的逐行正确显示的1帧?不是一个由240行偶数场组成的交错帧,以及不同时间采样的240行奇数场? –

+0

我打算为此实现拉模式接收器,使用queue2元素,我在某处读取它可以提供拉模式src焊盘。例如'videotestsrc! video/x-raw,format = YUY2,width = 720,height = 480,framerate = 30/1!队列2! appsink'。然而,我似乎无法弄清楚为什么basesink永远不会激活拉模式,即使我已经实现了必要的功能,并将'can-activate-pull'设置为TRUE –

+0

我认为这更像是如果您收到30fps隔行扫描,你将通过去隔行器并输出30fps逐行扫描(或者你有一台电视机或者设计为以隔行扫描模式显示的东西,因此不会出现反隔行扫描),它只会降低质量并减少带宽。 – mpr

相关问题