在linux平台上,我开发了一个名为xxxhwjpegdec的基于硬件的Jpeg解码插件来取代jpegdec(基于软件的解码),我将xxxhwjpegdec等级调整到最高257. xxxhwjpegdec pulgin需要jpegparse来解析jpeg头。 当我使用时:
"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"
,它无法使用"filesink--avidemux--xxxhwjpegdec--waylandsink"
/tmp/MJPEG.AVI。我检查了密钥管道是readLine
,没有插入jpegparse。
我通过以上信息判断playbin Form两个不同的管道,
一个是
" filesink - avidemux - xxxhwjpegdec - waylandsink(不能玩)" ,
另一个是
" filesink - avidemux-jpegdec - waylandsink(可以玩)" 。
因为我的xxxhwjpegdec需要jpegparse插件才能支持它。 playbin没有插入jpegparse,因此playbin无法选择要播放的第一个更高优先级的硬件管道,它必须选择第二个低优先级软件管道才能播放它。
所以我认为根本原因是playbin不能自动选择jpegparse插件。
那么,有谁知道如何强制Gstreamer playbin使用jpegparse插件? 或者欢迎其他解决方案! 感谢。
答案 0 :(得分: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的sink-caps更改为inlcude parsed: true
以指示您需要解析的jpeg缓冲区。