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
|
|
|
Windows 98/ME/NT/2000
|
|
|
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
|
|
|
Windows 98/ME/NT/2000
|
|
|
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