Canon has not published CR3. Everything here comes from Laurent Clévy’s reverse
engineering (the canon_cr3 project), checked against many cameras; fields
marked unknown are unknown to that work too. The file uses the ISO base media file
format: each box is a 4-byte big-endian size, a 4-byte type, then its content, and
uuid boxes add a 16-byte identifier after the type. Canon’s own boxes are
big-endian as well.
Top level
| Box | Content |
|---|---|
ftyp | Major brand crx , minor version 1, compatible brands crx and isom. |
moov | Canon’s metadata box, mvhd, and one trak per image or metadata stream. |
uuid be7acfcb-97a9-42e8-9c71-999491e3afac | XMP packet. |
uuid eaf42b5e-1c98-4b88-b9fb-b7dc406e4d16 | Preview: a PRVW box with a 1620 × 1080 JPEG. |
uuid 5766b829-bb6a-47c5-bcfb-8b9f2260d06d | Only in raw burst (roll) files: a CMTA box, contents unknown. |
mdat | The image data of every track and the timed metadata (see media data). |
uuid 210f1687-9149-11e4-8111-00242131fce4 | Only in some roll files: a CNOP box, contents unknown. |
Canon metadata box
The first box inside moov is uuid
85c0b687-820f-11e0-8111-f4ce462b6a48. It holds:
| Box | Content |
|---|---|
CNCV | Compressor version, 30 characters, such as CanonCR3_001/00.09.00/00.00.00 (EOS R, M50) or CanonCR3_002/00.10.00/00.00.00 (1D X Mark III, C-RAW). |
CCTP | Canon track list: a long 0, a long 1, the number of CCDT entries (3, or 4 with dual pixel), then the entries. |
CCDT | One per image track: a 64-bit image type, a long that is 1 for dual pixel, and the track number. |
CTBO | Table of offsets: a count, then 20-byte records of index (long), offset (64-bit) and size (64-bit). |
CMT1 | A complete little-endian TIFF structure holding IFD 0 (camera make, model, date and so on). |
CMT2 | The Exif IFD, as a TIFF structure. |
CMT3 | Canon’s maker note, as a TIFF structure (the same tags as in CR2). |
CMT4 | The GPS IFD, as a TIFF structure. |
THMB | Thumbnail (below). |
| CCDT image type | Track |
|---|---|
| 2 | Full size JPEG (track 1) |
| 1 | Small CRX raw (track 2) |
| 0 | Full size CRX raw (track 3) |
| 4 | Second dual pixel CRX image (track 5) |
| CTBO index | Points to |
|---|---|
| 1 | The XMP uuid box |
| 2 | The preview uuid box |
| 3 | The mdat box |
| 4 | Unknown; usually zero |
| 5 | The CMTA uuid box, in roll files |
THMB and PRVW
| Offset | Size | THMB field |
|---|---|---|
| 0 | 4 | Box size |
| 4 | 4 | THMB |
| 8 | 1 | Version, 0 or 1 |
| 9 | 3 | Flags, 0 |
| 12 | 2 | Width, usually 160 (320 for HDR HEIF cameras) |
| 14 | 2 | Height, usually 120 |
| 16 | 4 | JPEG size |
| 20 | 4 | Version 0: two unknown shorts |
| 24 | varies | Version 0: the JPEG |
| Offset | Size | PRVW field |
|---|---|---|
| 0 | 4 | Box size |
| 4 | 4 | PRVW |
| 8 | 4 | Unknown, 0 |
| 12 | 2 | Unknown, 1 |
| 14 | 2 | Width, 1620 |
| 16 | 2 | Height, 1080 |
| 18 | 2 | Unknown, 1 |
| 20 | 4 | JPEG size |
| 24 | varies | The JPEG, FF D8 to FF D9 |
Tracks
| Track | Sample entry | Content |
|---|---|---|
| 1 | CRAW with a JPEG box | Full size JPEG |
| 2 | CRAW with CMP1, CDI1 | Small raw image (1624 × 1080 on the EOS R) |
| 3 | CRAW with CMP1, CDI1 | Full size raw image |
| 4 | CTMD | Canon timed metadata |
| 5 | CRAW | Second image of a dual pixel raw, when present |
Each track is a standard trak → mdia → minf →
stbl, with stsd (the sample entry), stts,
stsc, stsz (the size of the image) and co64
(its 64-bit offset in the file). The sample entries are on the
CRAW sample entry page.