GNOME Bugzilla – Bug 575568
[resindvd] no sound when playing a DVD with LPCM audio track
Last modified: 2009-10-25 17:39:34 UTC
Using the current tarballs on jaunty I've a DVD where the video is played correctly but which has no sound in totem-gstreamer; totem-xine plays the video and the sound correctly
Which DVD? Can you get me a log from GST_DEBUG=resin*:5,rsn*:5 ? I assume you do have a52dec installed....
the disc is "la caravane des enfoirées saison 2007 disc 2", I've a52dec installed and sound works fine on other discs
Created attachment 130761 [details] debug log for some seconds and ctrl-C
I've to add a short log since bugzilla will not accept files over 1megabyte
It looks like this is because the DVD is a music concert, with an LPCM (uncompressed audio) track. ResinDVD currently only supports AC3 audio tracks, but doesn't completely manage to ignore the unsupported track.
Sebastien, could you try the patch from bug #582779 ? It's not perfect yet (you will need to do some seeking before anything is played) but if it works with that patch the problem is found ;)
I'm at UDS right now but will do that next week when I've access to the dvd
*** Bug 592176 has been marked as a duplicate of this bug. ***
Created attachment 144271 [details] [review] non-ac3-audio-codecs.diff Combined patch from GIT HEAD. With these changes everything should work in theory (if the required decoders are installed)
Sebastien, could you test the patch? :)
the change don't seem to make a difference
(In reply to comment #11) > the change don't seem to make a difference Thanks for testing, could you provide a debug log with GST_DEBUG=rsn*:5,resin*:5 ?
Created attachment 145370 [details] new debug log
From the debug log it looks like it's handling the audio correctly. Are you sure this is not the pulseaudio-lowers-volume-after-every-track bug?
(In reply to comment #14) > From the debug log it looks like it's handling the audio correctly. Are you > sure this is not the pulseaudio-lowers-volume-after-every-track bug? No it doesn't: resindvdbin.c:727:demux_pad_added:<source> New pad: <dvddemux:audio_a0> 0:00:05.387766818 6035 0xb510e068 DEBUG resindvd elements resindvdbin.c:742:demux_pad_added:<source> Pad <dvddemux:audio_a0> has caps: audio/x-private1-lpcm 0:00:05.392389263 6035 0xb510e068 DEBUG resindvd elements resindvdbin.c:763:demux_pad_added:<source> Ignoring unusable pad w/ caps audio/x-private1-lpcm 0:00:05.392440387 6035 0xb510e068 DEBUG resindvd elements resindvdbin.c:769:demux_pad_added:<source> Don't know how to handle pad. Ignoring From earlier in the log, it looks like the auddec component does correctly find the LPCM decoder, and exports those caps, but that can_sink_caps() for some reason returns FALSE, causing resindvdbin to ignore the pad.
and can_sink_caps() doesn't think autoconvert can accept LPCM, because autoconvert decides that it can't, because of the downstream source caps: 0:00:12.360537159 25827 0xb5b58570 LOG autoconvert gstautoconvert.c:1125:gst_auto_convert_sink_getcaps:<autoconvert0> Factory dvdlpcmdec does not accept src caps audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 32 ], endianness=(int)1234, width=(int)64; audio/x-raw-float, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 32 ], endianness=(int)1234, width=(int)32; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 32 ], endianness=(int)1234, width=(int)32, depth=(int)32, signed=(boolean)true; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 11 ], endianness=(int)1234, width=(int)32, depth=(int)32, signed=(boolean)true; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 32 ], endianness=(int)1234, width=(int)32, depth=(int)32, signed=(boolean)true; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 11 ], endianness=(int)1234, width=(int)24, depth=(int)24, signed=(boolean)true; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 11 ], endianness=(int)1234, width=(int)16, depth=(int)16, signed=(boolean)true; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 11 ], endianness=(int)1234, width=(int)8, depth=(int)8, signed=(boolean)true; audio/x-raw-int, rate=(int)[ 1, 2147483647 ], channels=(int)[ 1, 32 ], endianness=(int)1234, width=(int)16, depth=(int)16, signed=(boolean)true dvdlpcmdec wants to be able to generate some strange depths, like 20 bit depth in a 24-bit width, and the audio_src_template pad template on the rsndec doesn't allow them.
Created attachment 145406 [details] [review] resindvd: Fix decoder pad template to allow LPCM The pad template in the new switching decoder is too restrictive, preventing the LPCM decoder from being selected.
This patch makes the LPCM decoder be selected. I still get no audio on the disc I am testing on though - something in the stream selection and mapping I suspect. Needs more investigating.
Oops... that patch is definitely correct, yes. If it doesn't fix this particular case it would still be nice if we could get it into the next pre-release :)
Pushed: commit cb2d8b984dc18f1a9c2876d54a057f3590e1f292 Author: Jan Schmidt <thaytan@noraisin.net> Date: Wed Oct 14 11:06:46 2009 +0100 resindvd: Fix decoder pad template to allow LPCM The pad template in the new switching decoder is too restrictive, preventing the LPCM decoder from being selected. https://bugzilla.gnome.org/show_bug.cgi?id=575568
Created attachment 145563 [details] [review] resindvd: Re-send audio stream select on re-configuration it makes playback stop with a not-negotiated error, because autoconvert doesn't seem to reconfigure on the fly as I think it's supposed to. resindvd: Re-send audio stream select on re-configuration When the layout of the audio streams changes, re-send the current audio stream selection event, in order to trigger switching to the new stream properly.
Created attachment 145565 [details] [review] autoconvert: Use gst_pad_peer_accept_caps instead of gst_pad_set_caps. it is supposed to: autoconvert: Use gst_pad_peer_accept_caps instead of gst_pad_set_caps. gst_pad_set_caps on the internal source pad always succeeds, because caps propagate to the peer with buffers, not immediately. Using gst_pad_peer_accept_caps properly checks whether the actual sub-element can accept caps when they change.
Review of attachment 145565 [details] [review]: This patch is correct of course (and what Olivier intented), is the other one still necessary?
both patches are needed. Also, git-bz seems to have screwed up the descriptions for the patches, but never mind.
Both patches will be in the 0.10.14.4 pre-release shortly. With those in place, I can switch to non-AC3 tracks, although it sometimes requires triggering a small seek afterward because segments are not processed correctly when replugging the audio decoder.
Created attachment 146217 [details] [review] autoconvert: Cache incoming new segment events and push to children. Cache incoming new-segment info. When installing a child element, inform it of the current segment info.
oops, wrong bug.
This should be basically working with Friday's 0.10.16 release of gst-plugins-bad.