[gst-devel] DVD menu support

Martin Soto soto at informatik.uni-kl.de
Thu Jun 12 14:55:24 CEST 2003

Hello all!

First of all, some background and (hopefully) good news.  During the
last few months, I've been hacking many components of GStreamer to be
able to play DVDs in my home theater.  I hacked the dvdnavsrc element to
support a number of features that were missing in order to completely
support the DVD menus.  Basically, I added support for DVD still frames
(commonly used as menu backgrounds) and for subpicture highlights. 
Together with my DXR3 elements (already in gstreamer CVS), a number of
changes to the mpegdemux element (also already in CVS) and a python
script based on David Lehn's most excellent gst-python, I can play DVDs
with (almost) full menu support.  I also hacked in support for an old RF
based remote from x10.com, so that the whole setup works like a normal
standalone DVD player.  Actually, my only way to watch DVDs in the last
few months has been that, and it works pretty well :-)

The whole hack is however in a state that makes it difficult to release
as an usable complete application.  Part of the problem is that my
changes to the dvdnavsrc are extremely ugly, and not really suitable for
general consumption.  The DVD menu highligths are based on the
subpicture mechanism (the same thing used for the DVD subtitles), and
require that a number of information bits travel from the dvd decoder
element to the subpicture decoding unit:

- The actual encoded pictures.
- The Color LookUp Table (CLUT).
- The highlighted regions and corresponding color palettes.
- The information contained in DVD nav packets (PCI and DSI structures).

In my current implementation, only the actual pictures are being
transfered as normal data buffers.  The remaining bits are handled by
the application, that connects to some signals in the dvdnavsrc to get
the information, and sets it in the subpicture decoder by firing signals
defined there for the purpose.  Of course, this causes a lack of
sincronization between the pictures (that are buffered in the pipeline)
and the remaining information elements, resulting in some very annoying
artifacts in the menu display.

My proposed solution would be to put all that information in downstream
events.  Since this is all DVD specific, extending GstEvent doesn't seem
to be a good idea.  Ronald suggested that I could subclass GstEvent and 
I'm ok with that, but I don't really know how to do it.  Where should I
put such a subclass?  How do I compile and install it to make it
available to all plugins needing to produce or consume the DVD events? 
Is this thing related to the "interaction" work that is being done now
in 0.7?  Should I somehow integrate my work with that?

Thanks for the help, and please keep the good work on GStreamer.

M. S.
Martin Soto <soto at informatik.uni-kl.de>

More information about the gstreamer-devel mailing list