2017-04-24 35 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

相關問題