[Bug 748809] New: gst-launch tries to plug videoconvert although GST_PLAY_FLAG_NATIVE_VIDEO flag is set
GStreamer (GNOME Bugzilla)
bugzilla at gnome.org
Sat May 2 13:47:16 PDT 2015
https://bugzilla.gnome.org/show_bug.cgi?id=748809
Bug ID: 748809
Summary: gst-launch tries to plug videoconvert although
GST_PLAY_FLAG_NATIVE_VIDEO flag is set
Classification: Platform
Product: GStreamer
Version: git master
OS: Linux
Status: NEW
Severity: normal
Priority: Normal
Component: gst-plugins-base
Assignee: gstreamer-bugs at lists.freedesktop.org
Reporter: athoik at gmail.com
QA Contact: gstreamer-bugs at lists.freedesktop.org
GNOME version: ---
Testing latest HEAD of GStreamer with OpenPLi Enigma2 (framebuffer UI for
embedded STB) we notice that some HLS streams return the following errors (and
those errors did not exist in 1.4.5).
(gst-launch-1.0:2785): GStreamer-CRITICAL **: gst_mini_object_ref: assertion
'mini_object != NULL' failed
(gst-launch-1.0:2785): GStreamer-CRITICAL **: gst_caps_merge: assertion
'GST_IS_CAPS (caps2)' failed
A backtrace was created using G_DEBUG=fatal_warnings gst-launch-1.0 playbin
uri=http://megahdlive1-f.akamaihd.net/i/live_1@105260/master.m3u8 and is
available here (bt, bt full, thread apply all bt): http://pastebin.com/1TVPYChu
At first we identified that commit "h264parse: expose compatible profiles to
downstream"
http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/gst/videoparsers/gsth264parse.c?id=542c77ab3831388f162a78878ba8902cd5c4d9f9
introduced above error.
Further looking on the backtrace we found that responsible was
"gst_play_sink_convert_bin_getcaps"
http://cgit.freedesktop.org/gstreamer/gst-plugins-base/tree/gst/playback/gstplaysinkconvertbin.c?id=2434af3d31b544071543684867fdfcf3d254f3c0#n405
As suggested on the gstreamer irc channel after installing videoconvert the
error on gst-launch gone away [although Enigma2 has limited resources and it
should play video only using the hw sink (dvbmediasink)]. With videconvert
installed Enigma2 UI was still getting the same error. So it was suggested to
find what is the difference between gst-launch and Enigma2.
The difference is the GST_PLAY_FLAG_NATIVE_VIDEO flag that Enigma2 uses.
Running gst-launch with the same flags as Enigma2 the following appears:
GST_DEBUG=playsinkvideoconvert:6,playsinkconvertbin:4 gst-launch-1.0 playbin
uri=http://megahdlive1-f.akamaihd.net/i/live_1@105260/master.m3u8
flags=0x657
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
0:00:02.220740999 2803 0x75842090 DEBUG playsinkvideoconvert
gstplaysinkvideoconvert.c:55:gst_play_sink_video_convert_add_conversion_elements:<GstPlaySinkVideoConvert at 0x74f0d270>
Building video conversion with use-converters 0, use-balance 0
0:00:02.223045480 2803 0x75842090 INFO playsinkconvertbin
gstplaysinkconvertbin.c:555:gst_play_sink_convert_bin_cache_converter_caps:<GstPlaySinkVideoConvert at 0x74f0d270>
No conversion elements
0:00:02.223544554 2803 0x75842090 LOG playsinkvideoconvert
gstplaysinkvideoconvert.c:122:gst_play_sink_video_convert_set_property:<vconv>
locking from thread 0x75842090
0:00:02.225476258 2803 0x75842090 LOG playsinkvideoconvert
gstplaysinkvideoconvert.c:122:gst_play_sink_video_convert_set_property:<vconv>
locked from thread 0x75842090
0:00:02.225849518 2803 0x75842090 LOG playsinkvideoconvert
gstplaysinkvideoconvert.c:150:gst_play_sink_video_convert_set_property:<vconv>
unlocking from thread 0x75842090
0:00:02.226183332 2803 0x75842090 LOG playsinkvideoconvert
gstplaysinkvideoconvert.c:122:gst_play_sink_video_convert_set_property:<vconv>
locking from thread 0x75842090
0:00:02.226445184 2803 0x75842090 LOG playsinkvideoconvert
gstplaysinkvideoconvert.c:122:gst_play_sink_video_convert_set_property:<vconv>
locked from thread 0x75842090
0:00:02.226782962 2803 0x75842090 DEBUG playsinkvideoconvert
gstplaysinkvideoconvert.c:144:gst_play_sink_video_convert_set_property:<vconv>
Rebuilding converter bin
0:00:02.227041703 2803 0x75842090 DEBUG playsinkvideoconvert
gstplaysinkvideoconvert.c:55:gst_play_sink_video_convert_add_conversion_elements:<vconv>
Building video conversion with use-converters 0, use-balance 1
0:00:02.227329628 2803 0x75842090 INFO playsinkconvertbin
gstplaysinkconvertbin.c:555:gst_play_sink_convert_bin_cache_converter_caps:<vconv>
No conversion elements
0:00:02.227560702 2803 0x75842090 LOG playsinkvideoconvert
gstplaysinkvideoconvert.c:150:gst_play_sink_video_convert_set_property:<vconv>
unlocking from thread 0x75842090
0:00:02.272502517 2803 0x75842090 INFO playsinkconvertbin
gstplaysinkconvertbin.c:555:gst_play_sink_convert_bin_cache_converter_caps:<GstPlaySinkAudioConvert at 0x74f0d3c8>
No conversion elements
0:00:02.393034592 2803 0x75842090 INFO playsinkconvertbin
gstplaysinkconvertbin.c:568:gst_play_sink_convert_bin_cache_converter_caps:<aconv>
Converter caps: audio/x-raw, format=(string){ F32LE, F64LE, S32LE, S24LE,
S16LE, S8 }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ],
layout=(string)interleaved; audio/x-raw, rate=(int)[ 1, 2147483647 ],
layout=(string)interleaved, format=(string){ S8, U8, S16LE, S16BE, U16LE,
U16BE, S24_32LE, S24_32BE, U24_32LE, U24_32BE, S32LE, S32BE, U32LE, U32BE,
S24LE, S24BE, U24LE, U24BE, S20LE, S20BE, U20LE, U20BE, S18LE, S18BE, U18LE,
U18BE, F32LE, F32BE, F64LE, F64BE }, channels=(int)[ 1, 2147483647 ]
0:00:02.399684703 2803 0x75842090 INFO playsinkconvertbin
gstplaysinkconvertbin.c:568:gst_play_sink_convert_bin_cache_converter_caps:<aconv>
Converter caps: audio/x-raw, format=(string){ F32LE, F64LE, S32LE, S24LE,
S16LE, S8 }, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 2147483647 ],
layout=(string)interleaved; audio/x-raw, rate=(int)[ 1, 2147483647 ],
layout=(string)interleaved, format=(string){ S8, U8, S16LE, S16BE, U16LE,
U16BE, S24_32LE, S24_32BE, U24_32LE, U24_32BE, S32LE, S32BE, U32LE, U32BE,
S24LE, S24BE, U24LE, U24BE, S20LE, S20BE, U20LE, U20BE, S18LE, S18BE, U18LE,
U18BE, F32LE, F32BE, F64LE, F64BE }, channels=(int)[ 1, 2147483647 ]
WARNING: from element /GstPlayBin:playbin0/GstPlaySink:playsink: No volume
control found
Additional debug info:
/opt/openpli/openpligst/build/tmp/work/mips32el-oe-linux/gstreamer1.0-plugins-base/1.4.5.26+gitAUTOINC+6af56187e8-r3/git/gst/playback/gstplaysink.c(2861):
gen_audio_chain (): /GstPlayBin:playbin0/GstPlaySink:playsink:
Volume/mute is not available
(gst-launch-1.0:2803): GStreamer-CRITICAL **: gst_mini_object_ref: assertion
'mini_object != NULL' failed
(gst-launch-1.0:2803): GStreamer-CRITICAL **: gst_caps_merge: assertion
'GST_IS_CAPS (caps2)' failed
(gst-launch-1.0:2803): GStreamer-CRITICAL **: gst_mini_object_ref: assertion
'mini_object != NULL' failed
(gst-launch-1.0:2803): GStreamer-CRITICAL **: gst_caps_merge: assertion
'GST_IS_CAPS (caps2)' failed
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
It seems that playsinkvideoconvert tries to create video(convert|scale)
element.
0:00:02.227041703 2803 0x75842090 DEBUG playsinkvideoconvert
gstplaysinkvideoconvert.c:55:gst_play_sink_video_convert_add_conversion_elements:<vconv>
Building video conversion with use-converters 0, use-balance 1
..
0:00:02.272502517 2803 0x75842090 INFO playsinkconvertbin
gstplaysinkconvertbin.c:555:gst_play_sink_convert_bin_cache_converter_caps:<GstPlaySinkAudioConvert at 0x74f0d3c8>
No conversion elements
Adding a simple NULL check in gst_play_sink_convert_bin_getcaps makes the error
go away.
diff --git a/gst/playback/gstplaysinkconvertbin.c
b/gst/playback/gstplaysinkconvertbin.c
index 04fd4e9..36e6ef4 100644
--- a/gst/playback/gstplaysinkconvertbin.c
+++ b/gst/playback/gstplaysinkconvertbin.c
@@ -402,9 +402,11 @@ gst_play_sink_convert_bin_getcaps (GstPad * pad, GstCaps *
filter)
gst_caps_append_structure (downstream_filter, s);
}
}
- downstream_filter =
- gst_caps_merge (downstream_filter,
- gst_caps_ref (self->converter_caps));
+ if (self->converter_caps) {
+ downstream_filter =
+ gst_caps_merge (downstream_filter,
+ gst_caps_ref (self->converter_caps));
+ }
}
peer_caps = gst_pad_query_caps (peer, downstream_filter);
Although the problem fix most probaly is to honor the
GST_PLAY_FLAG_NATIVE_VIDEO flag and not try to create video(convert|scale)
elements at all.
--
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.
More information about the gstreamer-bugs
mailing list