This list enumerates fourcc codes and the codecs they identify.

Codecs which are not in this list but have a standard fourcc in AVI can be
used with the AVI fourcc in nut as well.
Codecs which are in this list but are not used with the same fourcc in AVI
should be reported to us! (these maybe a typo)
Codecs which are in this list and in AVI with the same fourcc as well as
other fourccs, SHOULD use the fourcc specified here.
For codecs which do not have a fourcc in AVI nor this list, please contact
us so we can add them to the list.


3IV1    non compliant MPEG4 generated by old 3ivx
ASV1    Asus Video
ASV2    Asus Video 2
CVID    Cinepak
CYUV    Creative YUV
DIVX    non compliant MPEG4 generated by old divx
DUCK    Truemotion 1
FFV1    FFmpeg video 1
FFVH    FFmpeg Huffyuv
H261    ITU H.261
H262    ITU H.262
H263    ITU H.263
H264    ITU H.264
HFYU    Huffyuv
I263    Intel H.263
IV31    Indeo 3.1
IV32    Indeo 3.2
IV50    Indeo 5.0
LJPG    ITU JPEG (lossless)
MJLS    ITU JPEG-LS
MJPG    ITU JPEG
MPG4    MS MPEG-4v1 (!NOT ISO MPEG-4!)
MP42    MS MPEG-4v2
MP43    MS MPEG-4v3
MP4V    ISO MPEG-4 Part 2 Video
        !for non-compliant MPEG-4 like old divx4/odivx use the respective
         fourcc, this fourcc is only for fully comliant MPEG-4!
mpg1    ISO MPEG-1 Video
mpg2    ISO MPEG-2 Video
MRLE    MS RLE
MSVC    MS Video 1
RT21    Indeo 2.1
RV10    Real Video 1.0
RV20    Real Video 2.0
RV30    Real Video 3.0
RV40    Real Video 4.0
SNOW    FFmpeg Snow
SVQ1    Sorenson Video 1
SVQ3    Sorenson Video 3
theo    Xiph Theora
TM20    Truemotion 2.0
UMP4    non compliant MPEG4 generated by UB Video MPEG-4
VCR1    ATI VCR1
VP30    VP 3.0
VP31    VP 3.1
VP50    VP 5.0
VP60    VP 6.0
VP61    VP 6.1
VP62    VP 6.2
VP70    VP 7.0
WMV1    MS WMV7
WMV2    MS WMV8
WMV3    MS WMV9
WV1F    non compliant MPEG4 generated by ?
WVC1    VC-1
XVID    non compliant MPEG4 generated by old xvid
XVIX    non compliant MPEG4 generated by old xvid with interlacing bug

Raw video: [x] is a byte with value x
YV12    Planar 4:2:0 YUV
YUV9    Planar 4:1:0 YUV
Y800    8bit Gray
411P    Planar 4:1:1 YUV
422P    Planar 4:2:2 YUV
440P    Planar 4:4:0 YUV [NOT in AVI]
444P    Planar 4:4:4 YUV
UYVY    Packed 4:2:2 YUV (UYVY)
YUY2    Packed 4:2:2 YUV (YUYV)
RGB[12] Packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), little-endian [NOT in AVI]
BGR[12] Packed BGR 4:4:4, 16bpp, (msb)4A 4B 4G 4R(lsb), little-endian [NOT in AVI]
RGB[15] Packed RGB 5:5:5, 16bpp, (msb)1A 5R 5G 5B(lsb), little-endian [NOT in AVI]
BGR[15] Packed BGR 5:5:5, 16bpp, (msb)1A 5B 5G 5R(lsb), little-endian [NOT in AVI]
RGB[16] Packed RGB 5:6:5, 16bpp, (msb)   5R 6G 5B(lsb), little-endian [NOT in AVI]
BGR[16] Packed BGR 5:6:5, 16bpp, (msb)   5B 6G 5R(lsb), little-endian [NOT in AVI]
[12]RGB Packed RGB 4:4:4, 16bpp, (msb)4A 4R 4G 4B(lsb), big-endian [NOT in AVI]
[12]BGR Packed BGR 4:4:4, 16bpp, (msb)4A 4B 4G 4R(lsb), big-endian [NOT in AVI]
[15]BGR Packed RGB 5:5:5, 16bpp, (msb)1A 5R 5G 5B(lsb), big-endian [NOT in AVI]
[15]RGB Packed BGR 5:5:5, 16bpp, (msb)1A 5B 5G 5R(lsb), big-endian [NOT in AVI]
[16]BGR Packed RGB 5:6:5, 16bpp, (msb)   5R 6G 5B(lsb), big-endian [NOT in AVI]
[16]RGB Packed BGR 5:6:5, 16bpp, (msb)   5B 6G 5R(lsb), big-endian [NOT in AVI]
RGBA    Packed RGBA 8:8:8:8, 32bpp, RGBA [NOT in AVI]
BGRA    Packed RGBA 8:8:8:8, 32bpp, BGRA [NOT in AVI]
ABGR    Packed RGBA 8:8:8:8, 32bpp, ABGR [NOT in AVI]
ARGB    Packed RGBA 8:8:8:8, 32bpp, ARGB [NOT in AVI]
RGB[24] Packed RGB 8:8:8, 24bpp RGB [NOT in AVI]
BGR[24] Packed RGB 8:8:8, 24bpp BGR [NOT in AVI]
BGR[48] Packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as little-endian [NOT in AVI]
[48]BGR Packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as big-endian    [NOT in AVI]
B1W0    black/white bitstream, 1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb [NOT in AVI]
B0W1    black/white bitstream, 1bpp, 1 is white, 0 is black, in each byte pixels are ordered from the msb to the lsb [NOT in AVI]
BGR[4]  Packed BGR 1:2:1 bitstream,  4bpp, (msb)1B 2G 1R(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits [NOT in AVI]
RGB[4]  Packed RGB 1:2:1 bitstream,  4bpp, (msb)1R 2G 1B(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits [NOT in AVI]
B4BY    Packed BGR 1:2:1,  8bpp, (msb)4U 1B 2G 1R(lsb), one pixel per byte, the 4 most significant bits are unused
R4BY    Packed RGB 1:2:1,  8bpp, (msb)4U 1R 2G 1B(lsb), one pixel per byte, the 4 most significant bits are unused
BGR[8]  Packed RGB 3:3:2,  8bpp, (msb)2B 3G 3R(lsb) [NOT in AVI]
RGB[8]  Packed RGB 3:3:2,  8bpp, (msb)2R 3G 3B(lsb) [NOT in AVI]
RGB[48] Packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as little-endian [NOT in AVI]
[48]RGB Packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as big-endian    [NOT in AVI]
RBA[64] Packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B component is stored as little-endian [NOT in AVI]
ARB[64] Packed ARGB 16:16:16:16, 64bpp, 16A, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as little-endian [NOT in AVI]
BRA[64] Packed BGRA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B component is stored as little-endian [NOT in AVI]
ABR[64] Packed ABGR 16:16:16:16, 64bpp, 16A, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as little-endian [NOT in AVI]

Since many exotic planar YUVA pixel formats are not contemplated by
the AVI/QuickTime FourCC lists, the following scheme is adopted for
representing them.

The first two bytes can contain the values:
Y1 = only Y
Y2 = Y+A
Y3 = YUV
Y4 = YUVA

The third byte represents the width and height chroma subsampling
values for the UV planes, that is the amount to shift the luma
width/height right to find the chroma width/height.

The fourth byte is the number of bits used (8, 16, ...).

If the order of bytes is inverted, that means that each component has
to be read big-endian.

Follows the list of the supported YUVA planar format FourCCs created
using this scheme:

Y1[00][16]  Planar gray, 16bpp, little-endian [NOT in AVI]
[16][00]1Y  Planar gray, 16bpp, big-endian    [NOT in AVI]
Y3[11][16]  Planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian [NOT in AVI]
[16][11]3Y  Planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian    [NOT in AVI]
Y3[10][16]  Planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian [NOT in AVI]
[16][10]3Y  Planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian    [NOT in AVI]
Y3[00][16]  Planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian [NOT in AVI]
[16][00]3Y  Planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian    [NOT in AVI]
Y4[11][ 8]  Planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples)            [NOT in AVI]
Y2[00][ 8]  8bit gray, 8bit alpha [NOT in AVI]

Raw audio: [x] is an byte with value x,  [NOT in AVI]
ALAW    A-LAW
ULAW    MU-LAW
P<type><interleaving><bits> little-endian PCM
<bits><interleaving><type>P big-endian PCM
    <type> is S for signed integer, U for unsigned integer, F for IEEE float
    <interleaving> is D for default (left, right)
    <bits> is 8/16/24/32
PFD[32]   would for example be signed 32 bit little-endian IEEE float

Subtitles:
UTF8    Raw utf8
SSA[0]  SubStation Alpha
DVDS    DVD subtitles
DVBS    DVB subtitles

FIXME dv/gray16/audio codecs/multi channel interleaving
