2016-09-11 26 views
0

在linux平臺上,我開發了一個名爲xxxhwjpegdec的基於硬件的Jpeg解碼插件來替換jpegdec(基於軟件的解碼),並且我將xxxhwjpegdec等級調整到了最高的257.該xxxhwjpegdec pulgin需要jpegparse來解析jpeg頭文件。 當我使用:如何強制Gstreamer playbin使用jpegparse插件?

"gst-launch-1.0 -v filesrc location="/tmp/MJPEG.AVI" ! avidemux name=t t.video_0 ! jpegparse ! xxxhwjpegdec ! waylandsink" 

它可以流暢地播放了/tmp/MJPEG.AVI。 我的目標是使用"gst-launch-1.0 playbin uri=file:///tmp/MJPEG.AVI"通過我的硬件解碼順利播放文件。

但是我使用"gst-launch-1.0 playbin uri=file:///tmp/MJPEG.AVI"它使用jpegdec插件,它基於軟件來解碼,所以它會導致/tmp/MJPEG.AVI播放不順利。我檢查了playbin管道「jpegparse」未被使用。 如果我刪除jpegdec插件,

然後使用"gst-launch-1.0 playbin uri=file:///tmp/MJPEG.AVI",它不能戳 /tmp/MJPEG.AVI。我檢查了關鍵管道是"filesink--avidemux--xxxhwjpegdec--waylandsink",沒有插入jpegparse。

我判斷playbin形式由上述信息兩個不同的管道, 一個是 「文件接收 - Avidemux中 - xxxhwjpegdec - waylandsink(不能玩)」, 另一個是 「filesink-- avidemux-jpegdec - waylandsink(可以播放)「。 因爲我的xxxhwjpegdec需要jpegparse插件來支持它。沒有由playbin插入的jpegparse,因此,playbin不能選擇第一個更高優先級的硬件流水線來播放,而必須選擇第二個較低優先級的軟件流水線來播放它。
所以我認爲根本原因是jpegparse插件不能被playbin自動選擇。

那麼,有誰知道如何強制Gstreamer playbin使用jpegparse插件? 或其他解決方案歡迎! 謝謝。

+0

我很確定'playbin'自動構建管道,目前沒有辦法覆蓋它的選擇。你將不得不堅持建立自己的管道,直到變化 –

+0

這很奇怪。如果你的hw解碼器的等級大於jpegdec,那麼它應該選擇你的解碼器。可能是,你的硬件解碼器有問題嗎? – soupybionics

+0

@ soupybionics 是的,我通過上面的信息判斷playbin表單兩個不同的管道,其中一個是「filesink-avidemux-xxxhwjpegdec-waylandsink(不能播放)」,另一個是「」filesink-avidemux-jpegdec-因爲我的xxxhwjpegdec需要使用jpegparse插件來支持它,因爲playbin沒有插入jpegparse,所以playbin不能選擇第一個更高優先級的硬件流水線來播放,而是選擇第二個低優先級的軟件流水線 – debugger

回答

0

jpegparse輸出:

Pad Templates: 
    SRC template: 'src' 
    Availability: Always 
    Capabilities: 
     image/jpeg 
       format: { I420, Y41B, UYVY, YV12 } 
        width: [ 0, 2147483647 ] 
       height: [ 0, 2147483647 ] 
       framerate: [ 0/1, 2147483647/1 ] 
       parsed: true 

也許你可以改變你的jpegdecoder的下沉上限,以inlcude parsed: true,表明你需要解析的JPEG緩衝區。

+0

謝謝,我會盡力的。 – debugger