QDraw

From MultimediaWiki
Jump to navigation Jump to search

This page is based on the codec description written by Konstantin Shishkov found in the document Description of the Apple QuickTime Animation (RLE) Format located at http://multimedia.cx/qtrle.txt.

QDraw is really just a standard QuickDraw PICT resource inside of a QuickTime container. It is identified by the FOURCC 'qdrw'. The PICT format can support both vector- and raster-based images.

However, only v2 8-bit paletted PackBits images have been found in QuickTime files so far. Most of this document is based on this assumption as well as having no other QuickDraw opcodes present in the frame and is therefore incomplete.

Data Format

All multi-byte numbers are encoded in big-endian format.

An encoded QDraw frame is laid out as follows:

 bytes 0-1      low two bytes of the frame size
 bytes 2-103    QuickDraw header/opcode data
 bytes 104-107  number of colors - 1
 bytes 108..    color table (8 bytes per entry)

One color table entry is laid out as:

 byte 0-1   index of palette table entry to replace
 byte 2-3   16-bit red component
 byte 4-5   16-bit green component
 byte 6-7   16-bit blue component

Thus, the color table can update arbitrary entries in the palette.

Following the color table are 18 bytes describing the PackBits source/destination rectangles and mode. After these bytes, there is a series of RLE-encoded lines using the standard PackBits compression (if mode is 0 "default" or greater than 2). For each line in the image:

 if (row bytes is > 250)
   two bytes compressed line size
 else
   one byte compressed line size

 while (remaining bytes in compressed line)
   code = next byte in encoded frame
   if (top bit is set (code & 0x80))
     output next byte in encoded frame to decoded frame (257-code) 
        times
   else
     copy (code + 1) bytes from encoded frame to decoded frame