Main Page

History of Directshow Filters for Ogg Vorbis, Speex, Theora and FLAC

History
I first began working on ogg media directshow filters whilst under contract to CSIRO's annodex.net project group. Much of the knowledge I needed to write these filters was gained through my work with this project.My initial implementation was for a specific annodex (which uses the ogg encapsulation format)demuxer. Part of my aim of this project was to use the knowledge gained to create a set of filters that works with generic ogg physical streams rather than just a particular physical bitstream format and to release these back to the open source community. There were several limitations to the approach taken to the original annodex filters which is why I decided to start from scratch to design the filter architecture over again with the experience of the first attempt.

Another of my aims of this project is to rewrite the annodex demuxer to use this new design in order for it to be more extensible and easier to work with. This time writing the generic ogg case first and then basing the annodex demuxer on this new design it will increase the consistency of the code between the two modules and provide less trouble integrating new codecs, with the aim of making annodex technology available in the standard applications that come default with windows.

I encourage you all to go and check out the annodex project and to consider coding some applications to utilise this new technology. There are many interesting posibilities this new technology presents to continuous media and search technology which will expand the internet to be a richer more dynamic multimedia experience.

Thankyou to CSIRO's annodex.net project group (Silvia Pfeiffer, Conrad Parker and André Pang) for the opportunity to work on this exciting new technology and sparking my interest in directshow and the xiph.org range of codecs.


On the 1st of May 2004, this project began to be maintained in the xiph.org subversion repository. It can be found at svn.xiph.org/trunk/oggdsf/


Previous Versions
Only download these if you have problems with the new version.

Previous Version (0.60.7043) - 08/07/2004
Quite a fair bit added this time, most notably an encoder for theora... see Encoding theora
Only a few encoding parameters are currently exposed via a filter property page. Also modified the demuxer so it can handle http streams though there are some issues. The buffering is very simple, it doesn't optimise buffer based on bandwidth. Network steams are currently non-seekable. Also only non-chained files should be streamed. Most encoded files are not chained. However some icecast streams, Which are not continuous, have breaks where songs change, this type of stream will likely crash the media player. However continuous live streams... such as radio broadcasts etc generally work fine. The network streaming has only recently be added, so i expect it to still be fairly buggy.

To all the people interested in FLAC, I will be spending some time sorting out the bugs that have been there for ages very soon, thanks for your patience !

This release has a lot of new code added, I'd really appreciate feedback on the installation process, and the encoding. I will leave the links to the previous version up for a while further down the page.

  • Added CMML Decoder filter
  • Added a simple subtitle renderer based on VMR 9
  • Added an OO vorbis comment parsing library
  • Added an example tool called OOOggCommentDump which dumps comment information from the first stream in a file
  • Added container class library for CMML
  • Added minimal CMML parsing library based on MSXML
  • Added a demuxer filter for Annodex, will only play in graphedit currently, and needs to manually build graphs to include the VMR9 as video renderer, also won't play the mpeg coded videos that are on the annodex site.
  • Added network support for demuxer to stream .ogg files
  • Fixed the speex encoder (I think)
  • Ogg Mux filter now supports multiple stream muxing
  • Added a theora encode filter, with a minimal configurable property page
  • Theora encode filter supports YUY2 input (generally from mpeg) or YV12 (generally from avi codecs, in particular those decoded by ffdshow)
  • Fixed some bad implementation of frame offsets in the theora decoder
  • Now files can be added to the WMP9+ Media Library, however no media metadata is yet extracted from the vorbis comments. Nor can you currently use the rip or burn functionality.


  • Windows XP
    853,647 bytes
    Windows 98/ME/NT/2000
    4,303,667 bytes

    Previous Version (0.57.6744) - 22/05/2004
    Previous release a few hours ago had hundreds of debug statements in the release build. It may have created log files in your C:\ Root directory as well as C:\temp and possibly in G:\ if you have a writable G drive. Sorry if you got this a few hours ago.
  • Removed a whole heap of debugging code.
  • See 0.56.6741 release below for latest changes.

  • Windows XP
    759,287 bytes
    Windows 98/ME/NT/2000
    4,209,307 bytes
    Previous Version (0.56.6741) - 21/05/2004
    Most of the changes in this build are internal modifications to better deal with the need to determine start times of all samples in order to properly synchronise multi-stream files. The main externally visible change is the limited ability to seek in theora files without total loss of synch. There are still a few issues to be ironed out though.
  • Modified internal timestamping mechanism, to allow resynch easier in theora.
  • Now able to seek in theora (not to keyframe), but occasionally crashes after seek.
  • Speex and vorbis, don't have seg fault any more, though very rarely after a seek there is no audio. Another seek fixes it.
  • Added simple new tool called OOOggStat, to give info on contained streams.

  • Previous Version (0.55.0115) - 27/04/2004
    Vorbis and speex playback are now pretty much finished bar the very rare bug I mention below. I've played dozens of speex and vorbis files and they all seem just fine. Pretty much fully functional.
    The track duration shows up incorrectly in all codecs besides speex and vorbis because I haven't coded it yet !
    A seek table is built as the file is loaded... this is currently done by basicly processing the entire file... so there may be a small delay loading large files. When I get time I'll replace this with a better method that doesn't try and process the entire file, but can skip through to the relevant parts.
  • NOTE: I suggest you don't distribute files encoded with these codecs yet... there may still be problems with them
  • Fixed clumpy playback of divx, bad timestamping
  • Added seeking, duration and position info to vorbis and speex
  • Fixed a few internal errors with regards to timestamping
  • Added a seek table for rapid seeking

  • Previous Version (0.52.0093) - 18/04/2004
  • NOTE: I suggest you don't distribute files encoded with these codecs yet... there may still be problems with them
  • See version 0.50.0090 for information
  • Now checksums pages properly.
  • Properly organises initial header packets in pages.

  • Previous Version (0.51.0092) - 18/04/2004
  • See version 0.50.0090 for information
  • Stuffed up some packaging and linking in the last version... probably won't affect it, but just to be safe, did rebuild and package. Sorry if you got it 5 minutes ago !

  • Previous Version (0.50.0090) - 18/04/2004
    Start of encoding support has been added... see example filter graphs. Use graphedit (DirectX9 SDK)
  • Added support for OGM style video encapsulation *decode only*, requires ffdshow. Should recognise any format ffdshow can handle. (Video quite clumpy at the moment)
  • Added single stream Ogg Muxer... for muxing theora, speex and vorbis
  • Added vorbis encoder filter
  • Added speex encoder filter
  • Included Abstract Audio Encoder library

  • Previous Version (0.40.0069) - 08/04/2004
    This new release completes the basic functionality for the four major codecs, though there are still bugs. Theora hasn't been extensively tested as I don't have many test files to work with. FLAC is still pretty buggy... theora less so... but still buggy.
  • NOTE: Untested with DirectX 8 or lower. I'm pretty sure theora will only play with DX9. Others *should* work with DX8.
  • Added basic Theora support (alpha 3 *only*, previous bitstream formats are depracated). See issues below.
  • Included OO Theora wrapper library
  • Included Abstract Video Decoder library


  • Previous Version (0.30.0058) - 31/03/2004
    Just thought I'd release this update. It includes some FLAC support but it's very buggy, I suggest you don't use FLAC just yet.
    Vorbis and speex are the same as before but with below changes. Vorbis and Speex won't crash
  • Fixed bug in stream recogniser which defaulted unknown to speex.
  • Fixed minor defect in audio when stopping and replaying
  • Split Vorbis and Speex to seperate filters
  • Included Abstract Codec Library
  • Now ignores unknown streams. ie. Playing a theora/vorbis will only play the vorbis
  • Major abstractions to demux filter in preperation for theora/annodex
  • Included very basic Ogg FLAC playback (very buggy, see below, update in a day or two to fix)
  • Included one of my basic debugging tools. OOOggDump. Usage : OOOggDump filename, be sure to redirect output to a file

  • Previous Version (0.22.0035) - 24/03/2004
  • Updated libfishsound to 0.6.0
  • Changes to attribution text files.
  • Release builds with compiler optimisations.


  • Previous Version (0.21.0032) - 24/03/2004
  • Fixed audio defects.
  • Added clipping to account for out of range floats from vorbis
  • Updated vorbis to 1.0.1 and speex to 1.0.3


  • Previous Version (0.20.0022) - 23/03/2004
  • Added support for speex.
  • Recognises speex files with .ogg .spx or .speex extensions


  • Previous Version (0.11.0020) - 22/03/2004
  • Removed several memory leaks.
  • Media Player doesn't make the error sound on exiting any more.
  • Fixed a few crashing bugs that only show up in graphedit by doing stupid things.
  • Package is more compressed now.
  • Fixed a crashing bug in libfishsound


  • Previous Version (0.10.0019) - 22/03/2004
  • Initial binary release.


  • Main Page