ogg@illiminable.com
History of Directshow Filters for Ogg Vorbis, Speex, Theora and FLAC
Main Page

How it started...
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.70.0827) - 16/02/2006

Wow... has it been a whole year :) Yes, this project is still alive! There's a fair bit of new code, so if you have problems you might want to try the history page and get version 0.69. One notable thing that this new version does not do correctly, is it no longer handles chained icecast streams, but it handles streaming static files on a server much better. The previous solution for icecast was a real hack which is no longer possible, it will be fixed properly fairly soon.

I'm releasing now, because otherwise you'll be waiting forever! Releases should be coming much more frequently hopefully. As always, email me your bugs and feature requests. The unicode filenames will be fixed as soon as I can, sorry, I keep putting that one off.

Ogg Codecs for windows
Windows All Versions
824,581 bytes

  • Theora can seek without artefacts to any frame, even non-keyframes.(95% of the time, there's still a slight bug)
  • All seeking in all codecs is accurate to within a single audio sample (ie. sub-second)
  • Complete rewrite of demux, it's much easier for me to continue now.
  • OGM support is improved a bit, still not great. It does not associate with the .ogm extension to avoid messing with other solutions for .ogm you might have. But renaming the .ogm file to .ogg it will attempt to play it.
  • Improved handling of static files on servers (still not seeking over http)
  • Be aware that it builds a seektable for all on-disk files. For really large files (>250MB) it may take a little while for the file to load
  • Updated most libraries, vorbis is still at 1.1.1, speex still 1.1.10. Another release soonish may rectify this. I just want to release what I've got now, or it will keep being put off.


  • Previous Version (0.69.8924) - 15/02/2005

    Lots of bufixes, especially memory leaks and memory management. Along with a new installer based on NSIS, which is just click-and-run.

    Ogg Codecs for windows
    Windows All Versions
    816,782 bytes


  • Removed several major memory leaks in encoders and decoders
  • More intelligent buffer sizing, reduces memory footprint about about 5-10 fold
  • Much more documentation
  • Vorbis encoder has programmatic interface for setting quality
  • Annodex Muxing support
  • Programmitic interface for encoding progress
  • Can seek in WMP6.4
  • Several other tools (not included in this binary) for server side seeking, and .NET media players added to SDK


  • Previous Version (0.68.8333) - 06/12/2004

    Mainly bugfixes.

    Ogg Codecs for windows
    Windows XP
    994,706 bytes
    Ogg Codecs for windows
    Windows NT/2000
    2,777,163 bytes
    Ogg Codecs for windows
    Windows 98/ME
    2,662,269 bytes


  • Fixed playback from windows network drives.
  • Fixed bug where audio would stop if you seek really close to the end.
  • Seeking performance back to almost instant


  • Previous Version (0.67.8171) - 05/11/2004

    Added support for playing native flac files (.flac). No major bufixes in this release, I'm quite busy at the moment, but a new version which addresses many of the outstanding bugs will be ready in 2-3 weeks. Thanks for being patient.


    Ogg Codecs for windows
    Windows XP
    969,047 bytes
    Ogg Codecs for windows
    Windows NT/2000
    2,751,504 bytes
    Ogg Codecs for windows
    Windows 98/ME
    2,636,610 bytes


  • Now supports native FLAC (.flac files) without ogg container.

  • Previous Version (0.66.8063) - 21/10/2004

    Added support for the new Ogg FLAC format and fixed that Explorer problem with locked files. A fair bit of internal shuffling, but mainly a whole lot of memory leaks have been eliminated.


    Ogg Codecs for windows
    Windows XP
    952,518 bytes
    Ogg Codecs for windows
    Windows NT/2000
    2,734,975 bytes
    Ogg Codecs for windows
    Windows 98/ME
    2,620,081 bytes


  • FLAC can now be muxed into a multi-stream file.
  • Now supports both the new Ogg FLAC (1.1.1) and the old Ogg FLAC (still not native FLAC)
  • Fixed the explorer problem by removing the offending registry key at installation
  • Removed a heap of memory leaks, WMP should run a fair bit leaner now
  • Some internal changes to the queueing mechanism
  • There's some skeleton API documentation for developers. It's pretty sparse on info still though.


  • Previous Version (0.65.7923) - 07/10/2004

    Added support for icecast vorbis streams. Works for most streams, though there is a limitation that the stream can't change codebooks, or audio settings mid-stream, but this shouldn't be a problem for most streams. Also an internal fix on the format blocks of the filters. To use icecast streams in WMP you need paste the url in to the Open Url dialog box (File->Open URL...). WMP doesn't support .pls files... so if this is what form the stream takes, for now, you need to save the .pls file, and copy-paste the link that is inside it into WMP.

    Most of the major functionality bugs are sorted out now, I'm quite happy with this release and the previous one, though still a way to go.

    Ogg Codecs for windows
    Windows XP
    938,166 bytes
    Ogg Codecs for windows
    Windows NT/2000
    2,720,623 bytes
    Ogg Codecs for windows
    Windows 98/ME
    2,605,729 bytes


  • Can now play most vorbis icecast streams.
  • Fixed some random values in the format blocks (Thanks to Robert Huitl for reporting this.)


  • Previous Version (0.64.7878) - 25/09/2004

    Fixed up the seeking in WMP 9 and 10 mainly... and a few other fixes. Also added more colour space conversions for the encoder.


    Ogg Codecs for windows
    Windows XP
    948,458 bytes
    Ogg Codecs for windows
    Windows NT/2000
    2,730,915 bytes
    Ogg Codecs for windows
    Windows 98/ME
    2,616,021 bytes


  • Fixed seeking in WMP 9 and 10.
  • Fixed a bug using the WMP activeX control.
  • Theora encoder accepts new media types ie RGB24, RGB32, AYUV, IYUV, UYVY, YVYU... only RGB32 has been tested, as i don't have any source of the other types.


  • Previous Version (0.63.7755) - 13/09/2004

    I put the installers back in the packages. Just makes it easier for people who aren't computer savvy. Also theora now plays in WMP9 and 10 (but still can't seek in these two players). Also fixed a bug in the speex encoder that made a mess of theora+speex files. Fixed a few more memory leaks.


    Ogg Codecs for windows
    Windows XP
    950,311 bytes
    Ogg Codecs for windows
    Windows NT/2000
    2,732,768 bytes
    Ogg Codecs for windows
    Windows 98/ME
    2,617,874 bytes


  • Fixed a few memory leaks... there are still more left though.
  • Fixed some bugs in speex encoder. Can now make proper speex+theora files
  • Theora playback works in WMP 9 and 10 now... but no seeking in these two players
  • Fixed a muxing problem with large packets.
  • Increased some of the buffer sizes. Trying to encode very high quality theora was crashing as the buffer was too small


  • Previous Version (0.62.7673) - 01/09/2004
    To stop people unnecessarily downloading the windows installer over and over, the packages will no longer include the installer. If you have a pre-XP windows, and don't already have the windows installer on your system (almost everyone who has ever installed something should have it already) you can download the installer seperately from the links at the top of the page.

    Fixed the network streaming, and removed all the .NET sample apps from this release. Experimental SSE/SSE2 builds can be found here
    Changed the installer a bit so people realise when they download via download "shell sites", which hide the true source of the download, where it came from and where to look for updates.

    Ogg Codecs for windows
    Windows 98/ME/NT/2K/XP
    942,859 bytes

  • Fixed a few memory leaks... there are still more left though.
  • Removed all the .NET sample applications to avoid those without .NET being forced to install it.
  • Streaming greatly improved. Will now cache a file as it streams in the TEMP directory as specified in environment variables.
  • Made experimental SSE/SSE2 optimised builds of all libraries.
  • Changed the installer so that you have to click through the BSD licenses, and to show where the software came from as many sites are linking directly to the .zip files so users are not getting the opportunity to read about known issues, or even know if they are getting the current version.

  • Previous Version (0.61.7571) - 16/08/2004
    To stop people unnecessarily downloading the windows installer over and over, the packages will no longer include the installer. If you have a pre-XP windows, and don't already have the windows installer on your system (almost everyone who has ever installed something should have it already) you can download the installer seperately from the links at the top of the page.

    Fixed a few bugs in theora, seeking almost never crashes now. FLAC playback and seeking now works properly, though not extensively tested. Includes a FLAC encoder filter. Starting from the next release I will start offering different build configurations, ie minimal decode only installation, builds with SSE2 optimisations etc.

    Ogg Codecs for windows
    Windows 98/ME/NT/2K/XP
    1,076,031 bytes

  • Fixed seeking crash problems with theora
  • Fixed FLAC playback
  • Added a FLAC encoder filter
  • Added a very simple .NET media player called DNPlay
  • Added a .NET directshow playback library
  • Added a validation program for ogg files OOOggValidate

  • 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.


  • 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.

  • 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