[gst-devel] DVD Navigation progress

Jan Schmidt jan at slug.org.au
Tue Jan 20 09:39:00 CET 2004


Hi all,

I'm sending in a patch (attached) with what I have so far rather than
just committing it, because I've touched a few things and would like
comments. If I get none, I'll just commit it.

It works enough to sort-of display a menu overlay on some DVDs. Others
segfault, but hey, it's no worse there than it was before.

Subtitles decode correctly for me.

I've been testing using:
gst-launch-0.7 dvdnavsrc ! mpegdemux name=demux .video_00 ! mpeg2dec !
mpeg2subt name=sub ! xvimagesink demux.subtitle_stream_1 ! sub.subtitle
demux.private_stream_1_0 ! { queue ! a52dec ! esdsink }

Things that you may notice (TODO list in no particular order):
* Segfaults when clicking lots of menu buttons
* Still frames don't work - any disc usingSTILL_FRAME will probably
  break
* It draws all the buttons in the menu because there's no clipping yet
* It may use wrong colours in the menu or break in other ways.
  - This is because the mpeg2subt element relies on knowing colour
tables etc, which are usually sent by libdvdnav before the mpegdemuxer
creates the subtitle_stream_1 pad and it connects to mpeg2subt - so
mpeg2subt never finds out about it.
* There is no way to change audio/video/subtitle tracks apart from
unplugging the mpegdemux->mpeg2subt link and reconnecting it to a
different pad on mpegdemux
* mpeg2subt is a chain based element - it should be loop based since it
aggregates buffers, right?
* I haven't figured out how different 'pan&scan' '4:3', 'widescreen' and
'letterbox' modes work yet but I know that it seems to draw the menu
buttons in the wrong places sometimes, and I think this is relevant.
* the mpeg2subt element actually does I420 at the moment, even though
padtemplates also say YV12. This won't be hard.
* Other stuff I've forgotten right now.

I need ideas for:
	Implementing STILL_FRAME support.
		- I see dvdnavsrc sending a navigation event for this 		  downstream,
and then returning NULL buffers until 		  either the required time
passes, or it receives a     
		  navigation which allows it to proceed. Is there a 
		  better way?
	Implementing the 'change language/format' etc features of DVDs where
the user can select a different video/audio/subtitle stream to watch. 
		- How can this be done? I could add new 'video_nav', 'audio_nav' and
'subtitle_nav' pads to mpegdemux and have navigation events select the
streamids that are sent to those pads.
		- alternatively there may be some system of moving the
video/audio/subtitle decoders links between the 'sometimes' pads of
mpegdemux depending on the chosen stream. Ideally I'd like it all to
work without special application support, but I don't know.

Please look over this code and suggest better ways to do all/any of it,
because I'd really like to see GStreamer support DVD playback as well as
Xine does - as I'm sure many of you would.

Jan.


-- 
Jan Schmidt                                  thaytan at mad.scientist.com

I came for the quality. I stayed for the freedom. -- Sean Neakums
-------------- next part --------------
A non-text attachment was scrubbed...
Name: dvdnav-1.patch
Type: text/x-patch
Size: 49284 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20040120/04086745/attachment.bin>


More information about the gstreamer-devel mailing list