[gst-devel] Status page

Ronald Bultje rbultje at ronald.bitfreak.net
Fri Dec 19 07:52:03 CET 2003


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 <rbultje at ronald.bitfreak.net>
Linux Video/Multimedia developer





More information about the gstreamer-devel mailing list