New Canon .CR3 File Specification

There’s something that does NOT smell good here. The JPEG at the end is 98.7% of the data and is NOT raw (although it could be lossless compressed). I’ve identified the mdat with isobmffdump (available on GitHub)

749 rmills@rmillsmbp:~/gnu/github/isobmff/pyke369/isobmffdump $ isobmffdump  ~/Downloads/canon_eos_m50_01.cr3 
@0         | ftyp [24]
@24        | moov [28440]
@32        |   uuid [26216]
@26248     |   mvhd [108]
@26356     |   trak [484]
...
@28464     | uuid [65560]
@94024     | uuid [416007]
@510031    | mdat [38025680]  <------ the is the BIG JPEG
@38535711  | end
750 rmills@rmillsmbp:~/gnu/github/isobmff/pyke369/isobmffdump $

I’ve extracted the mdat/jpeg from the image (bytes 510,031+16 for 38025680-16) bytes (16 = length of UUID itself).

513 rmills@rmillsmbp:~/gnu/github $ dd bs=1 skip=$((510031+16)) count=$((38025680-16)) if=~/Downloads/canon_eos_m50_01.cr3 > foo.jpg
38025664+0 records in
38025664+0 records out
38025664 bytes (38 MB) copied, 418.962 s, 90.8 kB/s
514 rmills@rmillsmbp:~/gnu/github $ exiv2 -pR foo.jpg 
STRUCTURE OF JPEG FILE: foo.jpg
 address | marker       |  length | data
       0 | 0xffd8 SOI  
       2 | 0xffdb DQT   |     132 
     136 | 0xffc0 SOF0  |      17 
     155 | 0xffc4 DHT   |     418 
     575 | 0xffda SOS  
515 rmills@rmillsmbp:~/gnu/github $ ls -alt ~/Downloads/canon_eos_m50_01.cr3 foo.jpg 
-rw-r--r--@ 1 rmills  staff  38025664  4 Mar 18:45 foo.jpg
-rw-r--r--@ 1 rmills  staff  38535711  3 Mar 12:17 /Users/rmills/Downloads/canon_eos_m50_01.cr3
516 rmills@rmillsmbp:~/gnu/github $ calc "38025664/38535711"
0.986764302856641
517 rmills@rmillsmbp:~/gnu/github $

It’s a plain JPEG of 4000x6000 pixels:

522 rmills@rmillsmbp:~/gnu/github $ calc "4000*6000*3/(1024*1024)"
68.66455078125
523 rmills@rmillsmbp:~/gnu/github $

It must be compressed. It isn’t raw! However the compression could be lossless and therefore a raw equivalent.

I believe I read that the CR3 image is 14 bits/channel. There isn’t enough data for 5 bits/channel.