RIFF Multimedia Movie

RIFF Multimedia Movie (also called RIFF RMMP, MMM movie, etc.) is a RIFF-based video/animation file format. It is perhaps a predecessor of AVI.

Discussion
RIFF RMMP is listed in the original RIFF specification, with the apparently-false claim that it will be described later in the document.

"MMM" is sometimes said to stand for Microsoft Multimedia Movie, be we could not confirm this.

Many sources claim the format is associated with MacroMind Director 3.x (an ancestor of Adobe Director), and that "MMM" stands for MacroMind Multimedia Movie. Director did have an .MMM format, but we could not confirm that it is this one, and it would have to be reconciled with the reported release dates of MacroMind Director 3 (1989) and RIFF (1991). Note that these sources often misspell Director as "Directory".

Some sources imply there are two distinct "MMM" formats, though that isn't really consistent with those that say "RIFF RMMP" is a MacroMind format.

Identification
Files begin with "", and have "" at offset 8.

Structure
All values given here are little endian, unless otherwise noted. Offsets are relative to the beginning of the file.

RMPP is subset of RIFF. It consists of a single RIFF chunk, meaning that the file is prefixed with ASCII "RIFF" followed by the 4-byte length. The form type of the RIFF chunk is "RMPP", and so this follows the length.

As usual for the RIFF format, the RMMP file is organized into several "subchunks" of the RIFF chunk. However, unlike other RIFF types, there is no LIST chunk, and all chunks strictly follow a set of additions to the RIFF chunk definition here unofficially called "section" for clarity.

A single section's record in the file consists of: To summarize, RMMP "sections" are RIFF chunks with the first four bytes occupied by a "sequence number".
 * The 4-byte chunk/section type identifier, normal for RIFF. In RMPP, these are restricted to lowercase ASCII.
 * A 4-byte integer recording the length of the chunk data, which, due to the next element in this list, amounts to the length of the section data in bytes plus four
 * A 4-byte value of unclear or possibly various use, here called the "sequence number"
 * The section data itself
 * Possible a padding byte, if the next section would otherwise begin at an offset not divisible by two, unless the preceding section is the last in the file. This is normal for RIFF.

The first section in an RMMP file is the table of contents, with type "cftc".

The individual sections that may appear in an RMMP file which have been at least partially decoded are listed below.

"cftc"
This section holds the table of contents for the RMMP file. It is always the first section. It lists all sections in the file, including itself. Its data content is a series of entries for each section, each entry consisting of: The RMMP table of contents always seems to be in the actual order of the sections in the file. It often seems to end in an area of zeroes, sized as if it held entries (i.e. its size is a multiple of 16 bytes). The cftc section seems to always have sequence number 0.
 * The section's typecode (4 bytes)
 * The section's length (4 bytes), with the same caveats as the length in the section itself
 * The section's sequence number (4 bytes)
 * The section's absolute offset in the file (4 bytes)

"dib "
This section holds a DIB-like (see BMP) image, preceded by 2 zero bytes. It is possible that the image may stored with its rows reversed in order, or this may just be an oddity of test data. The sequence number of dib sections starts at 1024 and increments by 1 for each subsequent dib section, or occasionally for non-dib sections.

The DIB lacks a color table, even though it has 8 or fewer bits per pixel (which would usually necessitate one).

"str "
As the name indicates, this section type holds string data, specifically, what appears to a title. Its sequence number always appears to be 1024. Its data section consists of:
 * A zero byte
 * A byte of uncertain purpose, always set to 0x54 (84) in the sample data
 * A byte holding the length of the string
 * The actual string data (not null-terminated)

"ver "
This always seems to be the second section in the file. As the name indicates, probably holds file "version". Its data section consists of two bytes, the first of which is zero, and the second of which seems to vary between values that have no easily apparent meaning and zero, without a clear pattern. It seems more likely that the version of the file is stored in the sequence number, which is always 0x27 (39) in the Microsoft Works sample file linked from this page.

"vwac"
This seems to hold text, possibly interface-related. Along with data of an unknown purpose, it contains scattered blocks of text, prefixed by 4-byte big endian lengths. It always appears to have the sequence number 1024.

Sample files

 * Microsoft Works - Gateway 2000 Edition (Microsoft) (1991) (CD image from archive.org) → ISO image → *.MMM
 * https://telparia.com/fileFormatSamples/video/riffMultimediaMovie/

Software

 * User:Effect2/readRMPP.c

Links

 * Original RIFF specification
 * filext.com .MMM page - Lists two MMM formats
 * MacroMind