From: Ronald B. <rb...@ro...> - 2003-12-19 15:51:13
|
Hi Christian, On Fri, 2003-12-19 at 15:44, Christian Fredrik Kalager Schaller wrote: > Well I tried at times to update the status page. The problem is that I > (and nobody else at times) actually know how well some of these plugins > work (and personally I have no idea how to test many of them). That's what gst-launch-ext is for. ;). And the media testsuite. I was bored, so here's a small list of plugins that I work with often. See it as a start, maybe others are interested to fill in other gaps so we can get something going here. a52dec (AC-3 stream decoder) - a52dec: works. divx (divx.com wrapper, DivX encoder/decoder) - divxenc: works. - divxdec: works, but gives green blocks on unknown motion vector blocks, even on own input. Don't know how to fix that yet. faac (libfaac wrapper, MPEG-2/4 AAC encoder) - faac: works, but not tested much outside some test pipelines (.. ! faac ! faad ! ...). Needs more testing and a quicktime muxer. Might need to use bytestream (it requires a fixed amount of samples as input). faad (libfaad wrapper, MPEG-2/4 AAC decoder) - faad: works, but the lib doesn't handle HE-AAC files correctly and often bails out on weird (non-standard) files. These are all lib bugs. :-(. ffmpeg (libffmpeg wrapper, decodes/encodes everything) In general, status of many plugins is unknown because we didn't test it very extensively. I have no clue how to test a lot of them, and a lot are really quite useless for us imo. I have wrapping code for muxers/demuxers but disabled it because it causes a lot of crashes. I intend to work on the demuxers some day. I'll probably leave the muxers disabled. Status for the ones that we use: - ffdec_svq3: works, but needs write-access to buffers. Hack for this implemented. This issue is being worked on in ffmpeg CVS. - ffdec_svq1: see svq3. - ffdec_mpeg4: works fr mpeg4/divx, but produces blurry image for xvid and just fails badly for 3ivx. I don't know how to fix those, maybe we need to set AVCodecContext->tag or so? This one definately needs more work. - ffdec_mpeg1video: works. - ffdec_msmpeg4: (divx3/msmpeg4v3) works. - ffdec_wmav1: works, thanks to work from Jeremy. - ffdec_wmav2: see wmav1. - ffdec_mp2: Benjamin once reported this to work. - ffdec_mp3: see mp2. - ffenc_ac3: works. Might need to use bytestream because it requires a fixed amount of samples as input. Needs testing (but that requires something like mplex). - ffenc_mp2: works. See ac3. - ffenc_mpeg1video: works. See ac3. Obviously, this plugins needs a lot of work and attention. gnomevfs (gnome VFS plugins) - gnomevfssrc: works. - gnomevfssink: has a weird "overwrite" property/signal combination that I don't quite understand (undocumented). Anyone? jpeg (libjpeg wrapper, JPEG encoder/decoder) - jpegdec: works, also with no-huffman-table jpeg (from cams) - jpegenc: segfaults. I want both to use the code from mjpegtools (since that handles interlaced JPEG correctly, our current code doesn't), but that's GPL. Still have to fix that. lame (MPEG-1 layer 1/2/3 audio encoder) - lame: works mad (MPEG-1 layer 1/2/3 audio decoder) - mad: works. mpeg2enc (mjpegtools/mpeg2enc wrapper, MPEG-1/2 video encoder) - mpeg2enc: works. Currently doesn't spit out frame-boundarized buffers yet (just fixed-size buffers). This is being worked on in mjpegtools CVS since it requires some modifications. mplex (mjpegtools/mplex wrapper, MPEG/DVD system stream muxer) - mplex: status unknown. Rewrite is pending (by me) since mjpegtools CVS now contains a lib'ified mplex. I intend to work on this fairly soon (before newyear). sdl (SDL wrapper, video output) - sdlvideosink: works, but X window embedding seems to be flaky. vorbis (Ogg/Vorbis stuff) need separating into ogg and vorbis plugins, like oggdemux (already exists!), oggmux, vorbisdec and vorbisenc. xvid (xvid.org wrapper, XviD encoder/decoder) segfaults on xvid_init() at times - don't know why. Status of plugins unknown. oss (Open Sound System plugins) - osssink: works. Cocking pieces might need finetuning, I don't like that code. - osssrc: Works. - ossmixer: works. video4linux (video4linux plugins) - v4lsrc: Works. A/V sync code currently assumes fixed framerate, I want to enable variable framerate code some day, but not before 0.8.0. - v4lmjpegsrc: Works. see v4lsrc. - v4lmjpegsink: untested since a long time. Probably broken. - v4lelement: works. video4linux2 (video4linux2 plugins) I want to write a v4l2sink some day, but didn't get to that yet. There's not really devices out there supporting this anyway. - v4l2src: works, see v4lsrc. - v4l2element: Works. ac3parse (AC-3 stream packet parser) - ac3parse: works. asf (ASF file handling) Tagging support is missing. - asfdemux: works, but needs lots of cleanups. Suffers from having been unmaintained for far too long. - asfmux: works, but I'm unhappy with the code. I might rewrite this when I have time. avi (AVI stream handling) - avidemux: works. Seeking in openDML across 2GB chunk boundaries is broken, needs a small fix but I didn't get to that yet... Doesn't use the new metadata system yet. - avimux: works. I want to rewrite this to separate RIFF bits from the document parsing bits (using rifflib). Metadata unimplemented. id3 (ID2v1/2 handling) - id3types: needs to be removed, superseeded by id3tag. Benjamin? matroska (Matroska stream handling) chapters, tags et all unimplemented. - matroskademux: works. Timestamping is slightly broken (we're sometimes off by a few ms). - matroskamux: works. Currently only supports one buffer per cluster, which is a major drawback (introduces lot of overhead). mpeg1sys (MPEG-1 system encoder) - system_encode: imo can be removed since mplex is far better. mpeg1videoparse (MPEG-1 video stream parser) - mp1videoparse: works. mpegaudioparse (MPEG-1 layer 1/2/3 audio parser) - mp3parse: works. mpegstream (MPEG stream parsing) - mpegparse: works. - mpegdemux: works. qtdemux (Quicktime / MPEG-4 (.mp4/.m4a) demuxer) - qtdemux: works. I personally dislike the code, though. videodrop (drops/frames to adjust speed/fps) - videodrop: works, but should take buffer timestamps into account instead of relying on the framerate value in the caps. videoscale (video resizer) - videoscale: works. videotestsrc (video test source) - videotestsrc: works. CAPS branch uses proper filtered caps. Width/height/fourcc properties should be removed. wavparse (WAV stream demuxer) - wavparse: works. Imo should use rifflib. Iain would look at that long-term. wavenc (WAV stream muxer) - wavenc: see avimux. y4m (mjpegtools yuv4mpeg2 stream writer) - y4menc: works. I think it can be removed since it was only used for interaction with the old forked mpeg2enc. That's now fixed in a far better way (by lib'ifying mpeg2enc). interfaces - tuner, mixer, xoverlay, colorbalance: all work perfectly support libs - xwindowlistener: works, but requires some more work to assure that we update the root window correctly when the window has moved. We sometimes fail here. - rifflib: works. Writer code still needs to be done. I still want to add a lib here that makes a human-readable description out of a GstCaps. This can be used in STRN in AVI, in CodecName in Matroska and other muxing formats use this too. Demuxers could use it in their streaminfo if the file doesn't have a STRN/CodecName/... Maybe we need something else for this, I'm not really sure... That was a long list. Please add your stuff here. Note that I didn't actually list all the ones that are known to work (vorbis, mad, lame) but I guess others can fill in the obvious ones. For quite some of the above plugins (at least divx, faac, faad, ffmpeg, jpeg, mpeg2enc, mplex, sdl, xvid, oss, v4l, v4l2, asf, avi, matroska), I consider myself to be the (co-)maintainer, for as far as that terms applies. It doesn't mean others should stay off, it simply means I am very familiar with the code (plugin code *and* backend code, if applicable) and mostly means that I (re-/co-)wrote the plugin, too. ;). Ronald -- Ronald Bultje <rb...@ro...> Linux Video/Multimedia developer |