After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 632788 - [playbin2] Doesn't support files with a streams that are supported compressed by a sink and streams that need decoding
[playbin2] Doesn't support files with a streams that are supported compressed...
Status: RESOLVED FIXED
Product: GStreamer
Classification: Platform
Component: gst-plugins-base
0.10.30
Other Linux
: Normal normal
: 0.10.36
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Blocks:
 
 
Reported: 2010-10-21 12:07 UTC by Andreas Frisch
Modified: 2011-06-15 17:42 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
pipeline graph (320.56 KB, image/png)
2010-10-21 12:07 UTC, Andreas Frisch
Details
full debug log (178.24 KB, application/x-bzip)
2010-10-21 12:11 UTC, Andreas Frisch
Details
gst-inspection of our sink elements (8.21 KB, text/plain)
2010-10-21 12:14 UTC, Andreas Frisch
Details
debug log (187.27 KB, application/x-bzip)
2011-02-18 16:39 UTC, Andreas Frisch
Details

Description Andreas Frisch 2010-10-21 12:07:54 UTC
Created attachment 172927 [details]
pipeline graph

root@dm8000:/media/hdd/movie/mkv# gst-launch playbin2 uri=file:///media/hdd/movie/mkv/Monster.Inc.mkv
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
ERROR: from element /GstPlayBin2:playbin20: Internal playbin error.
Additional debug info:
gstplaybin2.c(2773): no_more_pads_cb (): /GstPlayBin2:playbin20:
Failed to link selector to sink. Error -2
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...

(gst-launch-0.10:3019): GStreamer-CRITICAL **: gst_pad_unlink: assertion `GST_IS_PAD (sinkpad)' failed

(gst-launch-0.10:3019): GStreamer-CRITICAL **: gst_pad_remove_event_probe: assertion `GST_IS_PAD (pad)' failed

(gst-launch-0.10:3019): GStreamer-CRITICAL **: gst_pad_set_active: assertion `GST_IS_PAD (pad)' failed

(gst-launch-0.10:3019): GStreamer-CRITICAL **: gst_element_remove_pad: assertion `GST_IS_PAD (pad)' failed
Freeing pipeline ...


mediainfo of the source file:
General
Complete name                    : Monster.Inc.mkv
Format                           : Matroska
File size                        : 39.8 MiB
Duration                         : 1h 32mn
Overall bit rate                 : 60.3 Kbps
Encoded date                     : UTC 2009-06-07 23:59:56
Writing application              : mkvmerge v2.7.0 ('Do It Again') built on Apr 15 2009 00:27:10
Writing library                  : libebml v0.7.7 + libmatroska v0.8.1

Video
ID                               : 1
Format                           : AVC
Format/Info                      : Advanced Video Codec
Format profile                   : High@L4.1
Format settings, CABAC           : Yes
Format settings, ReFrames        : 4 frames
Muxing mode                      : Container profile=Unknown@4.1
Codec ID                         : V_MPEG4/ISO/AVC
Duration                         : 1h 32mn
Nominal bit rate                 : 9 861 Kbps
Width                            : 1 920 pixels
Height                           : 1 038 pixels
Display aspect ratio             : 1.850
Frame rate                       : 23.976 fps
Resolution                       : 8 bits
Colorimetry                      : 4:2:0
Scan type                        : Progressive
Bits/(Pixel*Frame)               : 0.206
Title                            : 9.8 Mbp/s AVC MPEG-4
Writing library                  : x264 core 67 r1163M 3f56e27
Encoding settings                : cabac=1 / ref=4 / deblock=1:0:0 / analyse=0x3:0x113 / me=umh / subme=9 / psy_rd=0.2:0.0 / mixed_ref=1 / me_range=24 / chroma_me=1 / trellis=2 / 8x8dct=1 / cqm=0 / deadzone=21,11 / chroma_qp_offset=-1 / threads=6 / nr=0 / decimate=1 / mbaff=0 / bframes=9 / b_pyramid=1 / b_adapt=2 / b_bias=0 / direct=3 / wpredb=1 / keyint=250 / keyint_min=25 / scenecut=40 / rc=2pass / bitrate=9861 / ratetol=1.0 / qcomp=0.60 / qpmin=10 / qpmax=51 / qpstep=4 / cplxblur=20.0 / qblur=0.5 / vbv_maxrate=38000 / vbv_bufsize=38000 / ip_ratio=1.40 / pb_ratio=1.30 / aq=1:1.00
Language                         : German

Audio #1
ID                               : 2
Format                           : DTS
Format/Info                      : Digital Theater Systems
Codec ID                         : A_DTS
Duration                         : 1h 32mn
Bit rate mode                    : Constant
Bit rate                         : 754 Kbps
Channel(s)                       : 6 channels
Channel positions                : Front: L C R, Side: L R, LFE
Sampling rate                    : 48.0 KHz
Resolution                       : 24 bits
Stream size                      : 498 MiB
Title                            : 5.1 DTS @ 768 kbp/s
Language                         : German

Audio #2
ID                               : 3
Format                           : DTS
Format/Info                      : Digital Theater Systems
Format profile                   : ES
Codec ID                         : A_DTS
Duration                         : 1h 32mn
Bit rate mode                    : Constant
Bit rate                         : 1 510 Kbps
Channel(s)                       : 6 channels
Channel positions                : Front: L C R, Side: L R, LFE
Sampling rate                    : 48.0 KHz
Resolution                       : 24 bits
Stream size                      : 996 MiB
Title                            : 5.1 DTS @ 1536 kbp/s
Language                         : English

Audio #3
ID                               : 4
Format                           : Vorbis
Format settings, Floor           : 1
Codec ID                         : A_VORBIS
Duration                         : 1h 32mn
Bit rate mode                    : Constant
Bit rate                         : 80.0 Kbps
Channel(s)                       : 2 channels
Sampling rate                    : 48.0 KHz
Stream size                      : 52.8 MiB
Title                            : 2.0 Vorbis @ 80 kbp/s Commentary Track
Writing library                  : aoTuV b5c  (UTC 2008-12-15)
Language                         : English

it tries linking the vorbisdec to dvbaudiosink which doesn't accept raw pcm input
instead, it should create an alsasink for the vorbis stream (through an audioconvert element)
and only direct the dts streams into dvbaudiosink


source file available from ftp://test4711@82.149.226.170/mkv_dts_vorbis/Monster.Inc.mkv

full logfile to be attached
Comment 1 Andreas Frisch 2010-10-21 12:11:10 UTC
Created attachment 172928 [details]
full debug log

GST_DEBUG=*:5 gst-launch playbin2 uri=file:///media/hdd/movie/mkv/Monster.Inc.mkv --gst-debug-no-color >632788_mkv_dts_vorbis.log 2>&1
Comment 2 Andreas Frisch 2010-10-21 12:14:33 UTC
Created attachment 172929 [details]
gst-inspection of our sink elements

source of the sink is available at
http://schwerkraft.elitedvb.net/scm/viewvc.php/dvbmediasink/src/?root=dvbmediasink
Comment 3 Andreas Frisch 2011-01-31 15:07:53 UTC
ftp password is test4711
Comment 4 Stefan Sauer (gstreamer, gtkdoc dev) 2011-02-15 13:02:03 UTC
This patch takes care of one issue. Atleast on the pc this now plays.

commit d466f07def637e6f6be8e1fb5ff2120ed5096ff9
Author: Mark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Date:   Mon Feb 14 17:49:54 2011 +0100

    matroskademux: avoid sorting NULL array of cluster positions
Comment 5 Stefan Sauer (gstreamer, gtkdoc dev) 2011-02-15 13:07:43 UTC
I can switch the tracks fine now:

libtool --mode=execute gdb --args ~/projects/gstreamer/gst-plugins-base/_debug/tests/examples/seek/seek 16 file:///home/ensonic/Videos/Monster.Inc.mkv
Comment 6 Andreas Frisch 2011-02-16 08:37:21 UTC
hi ensonic, unfortunately that didn't help. the latest fix by mark fixes a bug that was introduced after the release that i am using (now 0.10.32)
Comment 7 Andreas Frisch 2011-02-18 16:39:58 UTC
Created attachment 181232 [details]
debug log

GST_DEBUG_NO_COLOR=1 GST_DEBUG=*:5 gst-launch playbin2 uri=file:///hdd/movie/mkv/Monster.Inc.mkv > bug_632788_20110218.log 2>&1

with git checkout of core and base from today
Comment 8 Sebastian Dröge (slomo) 2011-02-18 16:54:32 UTC
Ok so this problem is actually quite simple. There's one audio stream that is supported by the sink without decoding and one that requires an decoder, playbin2 requests a raw audio sinkpad in playsink and then requests a non-raw audio sinkpad in playsink. Unfortunately playsink seems to assume that you either request a raw or a non-raw audio sinkpad and not both and then you get the same sinkpad in both cases, the second stream can't be linked and playbin2 errors out.

So, IMHO this concept of having a raw sink and a non-raw sink for every stream type is wrong. It will, if implemented properly in playsink, require another selection mechanism in playsink while there's already a selection mechanism in playbin2. And inside playbin2 there's also differentiation between raw and non-raw streams...

I guess playbin2 shouldn't really care about the raw'ness of streams and this should all be handled internally in playsink. Unfortunately this requires API changes to playsink and since a few releases playsink is a public element. Suggestions?
Comment 9 Sebastian Dröge (slomo) 2011-03-16 17:25:00 UTC
Patches for this and other issues are here:
http://git.collabora.co.uk/?p=user/slomo/gst-plugins-base.git;a=shortlog;h=refs/heads/playbin2-compressed


Would be great if people could test them, the changes are not really small :)
Comment 10 Sebastian Dröge (slomo) 2011-05-14 09:55:16 UTC
commit 2f8467d68249e8d1a28b7bbd9c53b56a8c26ba4b
Author: Sebastian Dröge <sebastian.droege@collabora.co.uk>
Date:   Fri Mar 25 08:26:00 2011 +0100

    playsink: Add audio and video converter convenience bins
    
    These reconfigure based on the caps and plugin in converters if
    necessary. This also makes switching between compressed and raw
    streams work flawlessly without loosing the states of any element
    somewhere or having running time problems.

commit 105da803ade859fb299ed3c5265d6acdd168ca8f
Author: Sebastian Dröge <sebastian.droege@collabora.co.uk>
Date:   Tue Mar 15 12:51:04 2011 +0100

    playbin2/playsink: Decide if A/V caps are raw only inside playsink
    
    Before playbin2 would use different selectors for raw audio and
    compressed audio (and the same for video) and used different
    pads from playsink. This made the involved logic much more
    complex and was not implemented completely in playsink, which
    made it impossible to support files with a compressed and
    uncompressed stream that is support by the sink.
    
    playbin2 handles raw/non-raw streams the same now and the
    decision is left to playsink, which now can also handle
    caps changes from raw to non-raw and the other way around.
    
    Fixes bug #632788.