CDXL
- Company: Commodore
- Patents: US 5,293,606, "Apparatus and method for transferring interleaved data objects in mass storage devices into separate destinations in memory"
- See also: Wikipedia CDXL article, German article with technical details (archive.org)
- Amiga decoder with source code in Pascal: http://aminet.net/package/gfx/show/AnimFX
- Sample: http://samples.ffmpeg.org/game-formats/cdxl/, http://aminet.net/search?query=cdxl
CDXL is an uncompressed video format created by Commodore for playback from CD-ROM on Amiga computers.
File format
CDXL files have no identifying markers or file headers; the file contains a number of frames, each prefixed by a frame header.
Frame header | Palette | Video | Audio
All multi-byte integers are big endian.
Frame header
byte 0 File type byte 1 Info byte bits 0-2 Video encoding bit 3 Stereo flag bits 5-7 Plane arrangement bytes 2-5 Current chunk size bytes 6-9 Previous chunk size bytes 10-11 Reserved bytes 12-13 Current frame number (1 for first frame) bytes 14-15 Video width bytes 16-17 Video height bytes 18-19 Number of bit planes bytes 20-21 Palette size in bytes bytes 22-23 Sound size in bytes bytes 24-31 Reserved
File type values (it is unknown what these mean):
0 Custom CDXL 1 Standard CDXL 2 Special CDXL
Video encoding values:
0 RGB 1 HAM 2 YUV 3 AVM & DCTV
Plane arrangement values:
0 Bit planar 1 Byte planar 2 Chunky 4 Bit line 6 Byte line
Palette
The palette is encoded as 12-bit RGB values (4 bits each of R, G, and B) stored in 16-bit words with the upper 4 bits unused and set to 0. The palette size field in the header is the number of bytes in the palette, i.e. double the number of entries in the palette.
Audio
Audio is encoded in standard uncompressed signed 8-bit PCM. The CDXL file itself does not seem to contain any sampling rate information, although related documents suggest 11025 Hz is standard.
Video
Video is encoded differently based on the info byte in the header.
RGB is encoded as an index into the palette for the current frame.
HAM (Hold-And-Modify), an Amiga-specific video mode, is encoded as described on Wikipedia. The sample at http://samples.mplayerhq.hu/game-formats/cdxl/amigaball.cdxl at least seems to use the HAM6 method, since it has 32 bytes of palette (i.e. 16 palette entries).