I have been developing some directshow filters for ogg, and vorbis and speex... currently i have an ogg demux filter and a speex/vorbis decoding filter. In this pre-release only vorbis is operational... but the speex decoder is pretty much done... i jsut need to tweak the demux filter so that it can negotiate a speex connection with the other filter. Just though some people might find them useful even in their early state. There are some limitations to this release. 1) No more than 2 channel audio is supported. 2) Chained multiplexing is not supported. 3) Only a single logical stream can be contained. (The demuxer has a few hard-coded things in it for now) 4) No seeking... i have the code, i just haven't put it in yet... i thought getting it working without first for vorbis and speex is easier. 5) No position information... ie no progress bar... again... the code is here just waiting to be integrated. 6) Proabbly other stuff i can't think of. The first 3 are not a problem for 95% of vorbis files around. And the last few are a minor inconveinience. I just thought i'd give people a taster until i complete a more feature comlpete release. Also it is pretty light on error checking... if you try and get it to play speex with an .ogg extension it will likely just crash... invalid formatted vorbis files will likely just crash unceremoniously too. It also has a few bugs too... they don't affect playback.. but when you close media player you will hear the windows error sound :) Here are the binary packages... www.illiminable.com/ogg/oggcodecs_0.10.0019.zip (4.3MB) www.illiminable.com/ogg/oggcodecs_0.10.0019_small.zip (916k) Hopefully i didn't stuff up the packages.. they were a bit of a rush job :) Let me know of any problems (outside the few i already mentioned above) The version that ends in _small doesn't contain the windows installers... if you have XP or you are sure you have the latest windows installers ainstalled already get the _small package otherwise the other one. Unzip it to a temp directory and run setup. Once you install it... media player will be able to play vorbis... the first time you may want to associate .ogg with media player by doing "open with"... also for now... windows doesn't consider .ogg to be a media file (and anyway it would have no way to tell if it should put .ogg in the audio group or the video group), so on any dialog boxes in media player remember to "show all files"... but later releases i'll add the registry keys for that too. Also if you have any other ogg directshow filters installed (ie Tobias) uninstall them first... my file association is only weak because i didn't want to add a squillion registry entries in this version. Also, they are all debug builds... so they are filled with symbols etc and are a lot larger and slower than the release builds. I just haven't ahd a chance to create a new config set for each of the projects yet. All the usual disclaimers. You can uninstall my filters by going to "Add/Remove programs" and clicking remove on the oggcodecs application. For now only binary releases, but source will eventually be made available... but for now... it's buggy and messy and almost gauranteed to have breaking changes made to it over the next few weeks, so you wouldn't want to use it yet anyway. These are not based on the tobias filters, or any other existing filters. Also part of the package when i release source is my implementation of the ogg encapsulation standard (ie what libogg does) natively written in C++. The dmux filter uses this and not libogg. My first attempt at the demux filter used liboggz wrapped around libogg... but it was very painful trying to integrate it with directshow. Having a native C++ implementation rather than just a wrapper was far easier for me to work with... and this attempt the filter code was less than half of the size of the first. It will also i hope be useful for others developing on windows where C++ is far more prevalent than C, and those who just can't stand C (ie me!) I'm also working on a theora filter... so in the not too distant future it should support the three core xiph codecs. Just a quick thankyou to Conrad Parker for libfishsound (http://www.annodex.net/software/index.html) (which my vorbis/speex decoder uses)..., which made the decode process very easy... data goes in... data comes out !! And also Andre Pang for all those marathon debugging sessions on the first incarnation ! Proper attributions and copyrights are in the package. Enjoy... more updates will be forthcoming... when i get some time i'll hack up a bit of a web page, so it will be easier to find updates. Zen. <p>--- >8 ---- List archives: http://www.xiph.org/archives/ Ogg project homepage: http://www.xiph.org/ogg/ To unsubscribe from this list, send a message to 'vorbis-dev-request@xiph.org' containing only the word 'unsubscribe' in the body. No subject is needed. Unsubscribe messages sent to the list will be ignored/filtered.
Here's a small update... www.illiminable.com/ogg/oggcodecs_0.11.0020.zip (4.1MB) www.illiminable.com/ogg/oggcodecs_0.11.0020_small.zip (740k) Same deal as before get the small one if you have xp or the latest windows installers installed. Otherwise get the big one. Uninstall the previous version first... Hopefully subsequent packages will do this for you. Fixes : 1) Removed several memory leaks. 2) Media Player doesn't make the error sound on exiting any more. 3) Fixed a few crashing bugs that only show up in graphedit by doing stupid things. 4) Package is more compressed now. 5) Fixed a crashing bug in libfishsound Just thought i'd put this update up as the memory leaks and the annoying error sound would stop you really using the last version very much ! :) I'll get around to putting up a webpage you can check in on at some point :) Enjoy. Zen. ----- Original Message ----- From: illiminable To: vorbis-dev@xiph.org Sent: Monday, March 22, 2004 2:40 AM Subject: [vorbis-dev] New Directshow filters preview... <p> I have been developing some directshow filters for ogg, and vorbis and speex... currently i have an ogg demux filter and a speex/vorbis decoding filter. In this pre-release only vorbis is operational... but the speex decoder is pretty much done... i jsut need to tweak the demux filter so that it can negotiate a speex connection with the other filter. Just though some people might find them useful even in their early state. There are some limitations to this release. 1) No more than 2 channel audio is supported. 2) Chained multiplexing is not supported. 3) Only a single logical stream can be contained. (The demuxer has a few hard-coded things in it for now) 4) No seeking... i have the code, i just haven't put it in yet... i thought getting it working without first for vorbis and speex is easier. 5) No position information... ie no progress bar... again... the code is here just waiting to be integrated. 6) Proabbly other stuff i can't think of. The first 3 are not a problem for 95% of vorbis files around. And the last few are a minor inconveinience. I just thought i'd give people a taster until i complete a more feature comlpete release. Also it is pretty light on error checking... if you try and get it to play speex with an .ogg extension it will likely just crash... invalid formatted vorbis files will likely just crash unceremoniously too. It also has a few bugs too... they don't affect playback.. but when you close media player you will hear the windows error sound :) Here are the binary packages... www.illiminable.com/ogg/oggcodecs_0.10.0019.zip (4.3MB) www.illiminable.com/ogg/oggcodecs_0.10.0019_small.zip (916k) Hopefully i didn't stuff up the packages.. they were a bit of a rush job :) Let me know of any problems (outside the few i already mentioned above) The version that ends in _small doesn't contain the windows installers... if you have XP or you are sure you have the latest windows installers ainstalled already get the _small package otherwise the other one. Unzip it to a temp directory and run setup. Once you install it... media player will be able to play vorbis... the first time you may want to associate .ogg with media player by doing "open with"... also for now... windows doesn't consider .ogg to be a media file (and anyway it would have no way to tell if it should put .ogg in the audio group or the video group), so on any dialog boxes in media player remember to "show all files"... but later releases i'll add the registry keys for that too. Also if you have any other ogg directshow filters installed (ie Tobias) uninstall them first... my file association is only weak because i didn't want to add a squillion registry entries in this version. Also, they are all debug builds... so they are filled with symbols etc and are a lot larger and slower than the release builds. I just haven't ahd a chance to create a new config set for each of the projects yet. All the usual disclaimers. You can uninstall my filters by going to "Add/Remove programs" and clicking remove on the oggcodecs application. For now only binary releases, but source will eventually be made available... but for now... it's buggy and messy and almost gauranteed to have breaking changes made to it over the next few weeks, so you wouldn't want to use it yet anyway. These are not based on the tobias filters, or any other existing filters. Also part of the package when i release source is my implementation of the ogg encapsulation standard (ie what libogg does) natively written in C++. The dmux filter uses this and not libogg. My first attempt at the demux filter used liboggz wrapped around libogg... but it was very painful trying to integrate it with directshow. Having a native C++ implementation rather than just a wrapper was far easier for me to work with... and this attempt the filter code was less than half of the size of the first. It will also i hope be useful for others developing on windows where C++ is far more prevalent than C, and those who just can't stand C (ie me!) I'm also working on a theora filter... so in the not too distant future it should support the three core xiph codecs. Just a quick thankyou to Conrad Parker for libfishsound (http://www.annodex.net/software/index.html) (which my vorbis/speex decoder uses)..., which made the decode process very easy... data goes in... data comes out !! And also Andre Pang for all those marathon debugging sessions on the first incarnation ! Proper attributions and copyrights are in the package. Enjoy... more updates will be forthcoming... when i get some time i'll hack up a bit of a web page, so it will be easier to find updates. Zen. <p>--- >8 ---- List archives: http://www.xiph.org/archives/ Ogg project homepage: http://www.xiph.org/ogg/ To unsubscribe from this list, send a message to 'vorbis-dev-request@xiph.org' containing only the word 'unsubscribe' in the body. No subject is needed. Unsubscribe messages sent to the list will be ignored/filtered.
And then there was speex :) Just added speex support. It's built against speex 1.0.2 for now... i'll up the version soon. Should i post to speex-dev too ? I guess many of them read vorbis-dev too. Also here's a temporary web page you can check into to find the latest version (currently 0.20.0022) www.illiminable.com/ogg/ http://www.illiminable.com/ogg/oggcodecs_0.20.0022_small.zip (740k) http://www.illiminable.com/ogg/oggcodecs_0.20.0022.zip (4.2MB) Again... the small one for XP or if you definately have the latest windows installers already... otherwise the other one. I'd be interested in smoe feedback if people use it on a config other than XP, WMP 8, DX9 whether it all works ok... i'm in particular curious as to how old a version of directX it will still work with. Thanks. Zen. <p>--- >8 ---- List archives: http://www.xiph.org/archives/ Ogg project homepage: http://www.xiph.org/ogg/ To unsubscribe from this list, send a message to 'vorbis-dev-request@xiph.org' containing only the word 'unsubscribe' in the body. No subject is needed. Unsubscribe messages sent to the list will be ignored/filtered.
Christian HJ Wiesner
2004-Mar-26 06:53 UTC
[vorbis-dev] Re: New Directshow filters preview...
Hi, me again with some comments ( find below ) : illiminable wrote:>Comments inline... > > >> Did anybody point you to CoreVorbis already ? >> >>http://corevorbis.corecodec.org . I also wonder why you didnt modify >>Tobias Waldvogel's existing, and well working, filters, but decided to >> >> >Firstly because i have my own demuxer which is far more intuitive to use >than libogg in an OO framework. >It will be hard, if not impossible, for the Xiph people to add your filters to the official Xiph CVS if you dont make them based on libogg/libvorbis ? How could they maintain your code if you cant care about it anymore ? Not that i am involved here, its just a remark. For my understanding, did you code the Ogg demuxer from scratch, or based on some exising code from another project like FFMPEG ?>secondly because i put a lot of effort into abstracting away all the >difficulties of directshow... for example... i have an abstractaudiocodec >class... >=======================================================>snip >=======================================================> >Both my speex and vorbis filter (and my soon to be finished FLAC filter) >derive from this common base class. > >This sounds like a great idea, and Toff and jcsston made something similar when doing CoreAAC, CoreFLAC and CoreVorbis IIRC. Looking forward to more filters from you .....>One of the reasons IMO that there aren't more directshow filters around is >becuase they can be a real pain to write... my goal is that by providing an >abstract class which does all the administrative work for you and you can >fill in the blanks with the important codec stuff. I've even been toying >with the idea of a code generation wizard to make most of the codec classes >too. Just as an example... (and granted they are incomlpete)... the speex and >vorbis filters are each less than 500 LOC. > >Yeah, DirectShow filters can be tricky, we can sing a song here .....>They also use libfishsound as an abstraction to vorbis/speex. Again i find >this much easier to use and more intuitive than using libvorbis directly... > >... ACK, but this may prevent the adoption of your code as official DShow filters by Xiph, as stated above>Another reason is i intend to release source as BSD... i believe your vorbis >filters are GPL ? But that's a different issue. > >Really, for a DShow filter the license of the sourcecode is not so important IMO. The compiled plugin itself can easily be used by any closed source player, because thats what the plugin idea is about. The app calls DirectShow, which is a part of the OS itself and as such covered by the OS exception of the GNU, and DShow itself will call the filter and build the playback graph, so the app itself doesnt really interface with the filter and is not restricted by any license contraints if the filter is opensource, while the app ( player, capture program, whatever ) is not. We originally made all the DirectShow filters on corecodec GPL because they were using some classes from another filter, which was released under the GPL itself. Those classes have been rewritten over time, and we added QPL as 2nd license, in case any commercial companies would be interested to distribute the filter in their package ( there werent ;-) ), against some form of compensation like a donation to corecodec or whatever. For Xiph it makes a lot of sense to release everything they do under BSD, to help the spreading of the format itself, and even in commercial packages and without receiving any compensation for that. IMO they should be more interested in a proper DShow implementation of their stuff, but thats really just IMO. Please announce here if you have any working encoder filters for Speex in combination with a Ogg muxer that can connect to it, i know there are a couple of apps which could be really interested in this. Christian Buchners ACM codec can not really act as a full substitute here, as the result of the ACM codec will always be a WAV or an ( async ) AVI, and not a valid Ogg Speex file.>>rewrite them completely, and even using an inderior approach by >>including the source filter into the decoder filter ( which is clearly >>against the standard DirectShow approach BTW ) ? >> >Maybe you misubderstand my approach... the source is a demux not a >decoder... the audio codecs are not part of the source filter (that would be >silly !!). > >Great, so i misunderstood :-) !!>Also it's not against the directshow standard... look at the WMV Demux >Source filters or the WAVE source filter. There are very good reasons for >making a demux a source to have greater control over the file source. I >originally did it the source->demux->codec->render way, but it was a real >pain in the ass ! CPullPin was not my friend :) > >We originally had timing problems when calling Tobias' Vorbis decoder filter from the matroska demuxer, but IIRC this was more a problems with Tobias decoder ignoring DShow's timestamps completely, and not a push - pull conflict. These timing problems were more or less forcing us to make CoreVorbis ( Toff really made an excellent job here ), i wonder how your decoders will deal with it ?>>We could have used your Speex decoder filter to play Speex from matroska >>container, but right now its unusable for us as it is. >> >> >No it isn't ! Have you even tried ? Load it into graphedit and check it out >yourself. > >No, i didnt try it, i cant because we have no means to mux Speex into MKV right now. If your Ogg demuxer works for Ogg Speex files, we can try to connect with the MEDIASUBTYPE you defined for it and define a new matroska codec ID like 'A_Speex' , the adaption work should be quite trivial i guess.>>No offense, i just will never understand why developers tend to rewrite >>stuff completely, instead of taking other people's existing code .... >> >> >And no offense to anyone elses code... but sometimes projects get modified >to do tasks they weren't really designed for. Often it is much cleaner to >start a fresh with a clearer goal and the benefit of experience. >And yes as i just noticed Andre pointed out, all the other filters are >tightly coupled to libogg/libvorbis. >Zen/ >ACK ...... Some more question : 1. What GUIDs did you choose for Vorbis and FLAC ? What would you think of using the same GUID as CoreVorbis and CoreFLAC, or OggDS ? anything voting against that ? 2. Are you planning to support VCM/ACM tracks in Ogg one day ( = OGM ), or will your filters be focussing on the official Xiph specs ? 3. What about a Theora en/decoder filter ? 4. Gabest has made his own Ogg demuxer code for his great Mediaplayer Classic ( http://sf.net/projects/guliverkli ) recently, but couldnt finish it, due to time constraints. This is just a pointer to another project doing something similar, i thought i let you know .... Best regards Christian <p><p>--- >8 ---- List archives: http://www.xiph.org/archives/ Ogg project homepage: http://www.xiph.org/ogg/ To unsubscribe from this list, send a message to 'vorbis-dev-request@xiph.org' containing only the word 'unsubscribe' in the body. No subject is needed. Unsubscribe messages sent to the list will be ignored/filtered.