Hello Trevor,
2009/3/17 Trevor Davenport trevor.davenport@gmail.com:
Hi Maarten,
I think this is a great idea. I have no idea how gstreamer works, but a lot of quartz is automatic pulling the pipes etc together. There are 3 categories of filters in directshow:
- Source filters (can be a file, can be a webcam, can be any filter
that has only an output)
- Intermediate filters (can decode or parse a file, multiple can be
linked together)
- Renderers
Gstreamer is quite similiar, there are:
- Sources (provide data, filesrc, v4l, networksrc, etc)
- Sink (data endpoints, xvideo sink, filesink, network sink, etc)
- Filters, convertors, demuxers, muxers, codecs
I have only peeked at gstreamer, but it seems it is very similar. Wine's directshow however still misses a few things that are probably important, like sending information about when new segments start, etc. If you implemented a gstreamer codec, a big part of it could be to fix this to be more similar to what windows does.
I expected there to be a number of things that are either not implemented or will need some work. At this point I don't think getting data in/out of gstreamer will be very difficult (i've done it before and am currently using gstreamer for university project). Is there any documentation about the current state of wine's quartz (ie, wiki page, good buzilla reports/comments, etc)?
I have also made a stand-alone codec for schroedinger last year, which falls in the 'intermediate filters' category. It's source is available at: http://www.diracvideo.org/git?p=direct-schro.git;a=tree;h=HEAD
Cool, thanks for the link. I will check it out a bit later once i finish some other work.
The easiest way to test how good wine's directshow is is by running some applications, and seeing what breaks. Our video playback filter sucks, and I have an improved version at http://repo.or.cz/w/wine/multimedia.git . Sadly it is not part of the current wine tree, because it relies on a hack with Xv which AJ won't allow to be used directly. In that tree there is also a opengl accelerated version, but that has issues with various drivers. Fglrx and all open source drivers will not work with them, so it's not the default. If it wasn't for that I would have gotten this merged with wine a long time ago, but breaking quartz even more for some users seemd to be a bad idea.
Directshow's way of loading a file is very simple, FilterGraph2_AddSourceFilter shows how it's done for wine (and presumably windows too). There are also some functions there that can be called by the application to build a full renderer pipeline.
Cheers, Maarten.