The avi decoder plugins
-----------------------

The avi decoder consists of a set of gstreamer plugins:

 - demuxer (avidemux)
 - avi to gstreamer type converter (avitypes)
 - windows dlls wrappers.

the avidecoder element uses the above plugins to perform the avi
decoding. It is constructed as a custom bin which initially only has
the demuxer element in it. The demuxer has a set of padtemplates for
raw audio and video.

  (------------------------------------)
  ! avidecoder                         !
  !                                 (video/raw)...
  !     (----------)                   !
  !     ! demuxer (video/x-msvideo, auds)..
  !     !          !                   !
  !   -src         !                   !
  !  /  !         (video/x-msvideo, vids)..
 - src  !          !                   !
  !     (----------)                (audio/raw)...
  !                                    !
  (------------------------------------)

the demuxer has a set of padtemplates for the raw avi header properties.

The avi decoder will act on the new_pad signal of the demuxer element
and will attach an avitype plugin to the new pad. Caps negotiation will
convert the raw avi caps to the gstreamer caps. If the src pad of the
avitypes plugin are compatible with the avidecoder padtemplate, the 
avitype pad is ghosted to the avidecoder bin, this is the case where no
codec is needed (for raw PCM samples, for example).

When the avitypes caps are not compatible with one of the avidecoder 
templates, a static autoplugger is used the find an element to connect
the demuxers pad to the decoders padtemplate.

When no element could be found, an windec plugin is attached to the 
demuxers pad and the avitypes plugin is removed from the decoder.


example:
--------

 An avidecoder that has a video pad (decoded with windows dlls) and an
 audio pad (raw PCM).

  (----------------------------------------------------------------)
  ! avidecoder               (--------)    (------)                !
  !                          !avitypes!    !windec!       /-- (video/raw)
  !     (----------)     /-sink      src--sink   src -----         !
  !     !demuxer (video/x-msvideo,    !    !      !                !
  !     !          ! auds).. (--------)    (------)                !  
  !   -sink        !         (--------)                            !
  !  /  !        (video/x-..,!avitypes!                            !
 -sink  !          ! vids).. !        !                            !
  !     (----------)     \-sink      src -------------------- (audio/raw)
  !                          (--------)                            !
  (----------------------------------------------------------------)



TODO
----

automatically generate the padtemplates from all possible avi types
found in the registry.


