[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