- Debugger: Getting mixed signals
- 'Packaging Infrastructure' Contract Weekly Report #4
- Haiku monthly activity report - 06/2015
- 'Packaging Infrastructure' Contract Weekly Report #3
- 'Packaging Infrastructure' Contract Weekly Report #2
- GCI 2014 winners trip report (mentor side)
- TeX Live and LyX; Changes to the boot code
- 'Packaging Infrastructure' Contract Weekly Report #1
- Beginning of 'Packaging Infrastructure' Contract
- Haiku monthly activity report - 05/2015
First steps in DVD land
The first objective of this project is to give Media Player the ability to play DVD's. Here's a quick introduction of the tools I chose for the job.
The DVD format is a bit of a nightmare. The actual disk information (chapters, audio track and subtitle information), is stored in IFO files and a navigation byte code which requires a custom virtual machine. The associated media data is stored in separate 1GB VOB (Video OBject) files, each containing both audio, video and subtitles in separate data segments.
Fortunately, the libraries available to actually interact with a DVD make it much easier than I thought, and as they are those used by VLC, they were already ported:
- libdvdnav is the main protagonist, and provides an easy API for, you’ve guessed it, DVD navigation. Menus, streams, multi-angles...even those wonderful interactive DVD games I’m dreading.
- libdvdvm is directly included with libdvdnav, and provides a virtual machine for the navigation bytecode.
- libdvdread is loaded by libdvdnav, and enables grabbing the media buffers. I’m considering replacing it with libdvdcss, which I think is more reliable.
Overlays, meaning subtitles and menus, are another matter. They’re both stored in sub picture units (SPU) and the actual image is in fact raw bitmap data, which implies both producing streams of timed images, but also video mixing. Fortunately, David’s video mixer node is working fine.
So just a quick intro to some of the tools, and I haven’t talked about any actual development, but I preferred to keep that for the next post, which is in progress!
- engleek's blog
- Login or register to post comments

Comments
Re: First steps in DVD land
Christopher, it is nice to see your blog post, and hope to read some regular reports about the progress.
Re: First steps in DVD land
\o/
Waiting for some code!
Implementing mms streaming, mediaplayer will be 80% usable for me!
Another 20% is Rmvb native codec :P
Re: First steps in DVD land
Well, it would be great to implement native "Reclock-functionality" (sources here: http://oss.slysoft.com/ReClock/)... check out why: http://www.schmidt-web.info/malte/erkl_eng.html
It would also be great to implement "something" like:
madshi's madVR (high quality - GPU assisted - video renderer)
yesgrey's yCMS (Color Management System)
...which are not open source, unfortunally. :(
Re: First steps in DVD land
IIRC, libdvdread, when available, loads libdvdcss and uses it to read the DVD. It's a build configuration option, --with-libdvdcss from memory.
Keep in mind that while using libdvdcss in some areas is legal due to interoperability rights, it's illegal in others where breaking DRM is illegal even for interoperability. You should consider the possible Haiku distribution issue that could raise then, hence my hint: don't use libdvdcss directly but as a backend, when available. And let the issue of including or not libdvdcss in Haiku release to release process...
Re: First steps in DVD land
Very good news...
Maybe there is time to investigate why Quicktime works in Clockwerk but not in Mediaplayer...
Maybe wrong place for posting here.
Nice to know DVD support is worked on...