[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