Magic Lantern Forum

Developing Magic Lantern => Reverse Engineering => Topic started by: lorenzo353 on March 12, 2018, 10:48:00 PM

Title: new Canon CR3 raw format from M50 camera
Post by: lorenzo353 on March 12, 2018, 10:48:00 PM
Hi,

Please find a tentative to document the new CR3 format here:
https://github.com/lclevy/canon_cr3

Contributions are welcome to open this format with me, as DCraw from Dave Coffin seems frozen...

Laurent
(from http://lclevy.free.fr/cr2/)
Title: Re: new Canon CR3 raw format from M50 camera
Post by: Walter Schulz on March 12, 2018, 11:00:56 PM
Quote from: lorenzo353 on March 12, 2018, 10:48:00 PM
as DCraw from Dave Coffin seems frozen...

Ouch! Not the news I wanted to read. Totally slipped under my radar!
Title: Re: new Canon CR3 raw format from M50 camera
Post by: lorenzo353 on March 29, 2018, 08:29:23 PM
Hi,

I have now published a python tool to parse the CR3 structure and extract jpeg, crx pictures...

Help is welcome to understand crx compression.

kind regard,

Laurent
Title: Re: new Canon CR3 raw format from M50 camera
Post by: lorenzo353 on March 30, 2018, 08:50:31 PM
>python parse_cr3.py -v2 canon_eos_m50_02.cr3|more
filesize 0x256fbe8
00000:ftyp: major_brand=b'crx ', minor_version=1, [b'crx ', b'isom'] (0x18)
00018:moov: (0x6b70)
00020:  uuid: b'85c0b687820f11e08111f4ce462b6a48' (0x62c0)
00038:    CNCV: b'CanonCR3_001/00.09.00/00.00.00' (0x26)
0005e:    b'CCTP' b'000000000000000100000003000000184343445400000000' (0x5c)
0003a:      b'CCDT' b'00000000000000100000000000000001' (0x18)
00052:      b'CCDT' b'00000000000000010000000000000002' (0x18)
0006a:      b'CCDT' b'00000000000000000000000000000003' (0x18)
000ba:    CTBO: (0x5c)
            1    6b88   10018
            2   16ba0   56d90
            3   6d930 25022b8
            4       0       0
00116:    b'free' b'0000' (0xa)
00120:    b'CMT1' b'49492a00080000000d000001030001000000701700000101' (0x188)
002a8:    b'CMT2' b'49492a000800000027009a82050001000000e20100009d82' (0x428)
006d0:    b'CMT3' b'49492a00080000002f000100030031000000420200000200' (0x1438)
01b08:    b'CMT4' b'49492a000800000001000000010004000000020300000000' (0x718)
02220:    THMB: width=160, height=120, jpeg_size=0x40a3 (0x40c0)
062e0:  b'mvhd' b'00000000d6b31018d6b31018000000010000000100010000' (0x6c)
0634c:  b'trak' b'0000005c746b686400000007d6b31018d6b3101800000001' (0x1e4)
06354:    b'tkhd' b'00000007d6b31018d6b31018000000010000000000000001' (0x5c)
063b0:    b'mdia' b'000000206d64686400000000d6b31018d6b3101800000001' (0x180)
063b8:      b'mdhd' b'00000000d6b31018d6b31018000000010000000115c70000' (0x20)
063d8:      b'hdlr' b'000000000000000076696465000000000000000000000000' (0x21)
063f9:      b'minf' b'00000014766d686400000001000000000000000000000024' (0x137)
06401:        b'vmhd' b'000000010000000000000000' (0x14)
06415:        b'dinf' b'0000001c6472656600000000000000010000000c75726c20' (0x24)
0641d:          b'dref' b'00000000000000010000000c75726c2000000001' (0x1c)
00010:            b'url ' b'00000001' (0xc)
06439:        b'stbl' b'000000807374736400000000000000010000007043524157' (0xf7)
06441:          b'stsd' b'000000000000000100000070435241570000000000000001' (0x80)
00010:            CRAW: (0x70)
                    width=6000, height=4000
0005a:              b'JPEG' b'00000000' (0xc)
00066:              b'free' b'0000' (0xa)
064c1:          b'stts' b'00000000000000010000000100000001' (0x18)
064d9:          b'stsc' b'0000000000000001000000010000000100000001' (0x1c)
064f5:          stsz: version=0, size=0x30d6ef, count=1 (0x14)
06509:          b'free' b'00000000000000' (0xf)
06518:          co64: version=0, size=0x6d940, count=1 (0x18)
06530:  b'trak' b'0000005c746b686400000007d6b31018d6b3101800000002' (0x248)
06538:    b'tkhd' b'00000007d6b31018d6b31018000000020000000000000001' (0x5c)
06594:    b'mdia' b'000000206d64686400000000d6b31018d6b3101800000001' (0x1e4)
0659c:      b'mdhd' b'00000000d6b31018d6b31018000000010000000115c70000' (0x20)
065bc:      b'hdlr' b'000000000000000076696465000000000000000000000000' (0x21)
065dd:      b'minf' b'00000014766d686400000001000000000000000000000024' (0x19b)
065e5:        b'vmhd' b'000000010000000000000000' (0x14)
065f9:        b'dinf' b'0000001c6472656600000000000000010000000c75726c20' (0x24)
06601:          b'dref' b'00000000000000010000000c75726c2000000001' (0x1c)
00010:            b'url ' b'00000001' (0xc)
0661d:        b'stbl' b'000000e4737473640000000000000001000000d443524157' (0x15b)
06625:          b'stsd' b'0000000000000001000000d4435241570000000000000001' (0xe4)
00010:            CRAW: (0xd4)
                    width=1624, height=1080
0005a:              CMP1: (0x3c)
                      65280,48,256,0,0,1624,0,1080,0,1624,0,1080,3649,0,0,112,0,0,257,0,257,0,257,0,257,0,
00096:              CDI1: (0x34)
                      0,0,0,40,18753,17457,0,0,1624,1080,1,0,1,0,1,0,1620,1079,0,0,1623,1079,
00048:                IAD1: (0x28)
                        0,0,1624,1080,1,0,1,0,1,0,1620,1079,0,0,1623,1079,
000ca:              b'free' b'0000' (0xa)
06709:          b'stts' b'00000000000000010000000100000001' (0x18)
06721:          b'stsc' b'0000000000000001000000010000000100000001' (0x1c)
0673d:          stsz: version=0, size=0x1cbc40, count=1 (0x14)
06751:          b'free' b'00000000000000' (0xf)
06760:          co64: version=0, size=0x37b030, count=1 (0x18)
06778:  b'trak' b'0000005c746b686400000007d6b31018d6b3101800000003' (0x258)
06780:    b'tkhd' b'00000007d6b31018d6b31018000000030000000000000001' (0x5c)
067dc:    b'mdia' b'000000206d64686400000000d6b31018d6b3101800000001' (0x1f4)
067e4:      b'mdhd' b'00000000d6b31018d6b31018000000010000000115c70000' (0x20)
06804:      b'hdlr' b'000000000000000076696465000000000000000000000000' (0x21)
06825:      b'minf' b'00000014766d686400000001000000000000000000000024' (0x1ab)
0682d:        b'vmhd' b'000000010000000000000000' (0x14)
06841:        b'dinf' b'0000001c6472656600000000000000010000000c75726c20' (0x24)
06849:          b'dref' b'00000000000000010000000c75726c2000000001' (0x1c)
00010:            b'url ' b'00000001' (0xc)
06865:        b'stbl' b'000000f4737473640000000000000001000000e443524157' (0x16b)
0686d:          b'stsd' b'0000000000000001000000e4435241570000000000000001' (0xf4)
00010:            CRAW: (0xe4)
                    width=6288, height=4056
0005a:              CMP1: (0x3c)
                      65280,48,256,0,0,6288,0,4056,0,3144,0,4056,3648,0,0,216,0,0,257,0,257,0,257,0,257,0,
00096:              CDI1: (0x44)
                      0,0,0,56,18753,17457,0,0,6288,4056,1,2,1,0,276,48,6275,4047,0,0,263,4055,264,0,6287,35,264,36,6287,4055,
00048:                IAD1: (0x38)
                        0,0,6288,4056,1,2,1,0,276,48,6275,4047,0,0,263,4055,264,0,6287,35,264,36,6287,4055,
000da:              b'free' b'0000' (0xa)
06961:          b'stts' b'00000000000000010000000100000001' (0x18)
06979:          b'stsc' b'0000000000000001000000010000000100000001' (0x1c)
06995:          stsz: version=0, size=0x201ef28, count=1 (0x14)
069a9:          b'free' b'00000000000000' (0xf)
069b8:          co64: version=0, size=0x546c70, count=1 (0x18)
069d0:  b'trak' b'0000005c746b686400000007d6b31018d6b3101800000004' (0x1b8)
069d8:    b'tkhd' b'00000007d6b31018d6b31018000000040000000000000001' (0x5c)
06a34:    b'mdia' b'000000206d64686400000000d6b31018d6b3101800000001' (0x154)
06a3c:      b'mdhd' b'00000000d6b31018d6b31018000000010000000115c70000' (0x20)
06a5c:      b'hdlr' b'00000000000000006d657461000000000000000000000000' (0x21)
06a7d:      b'minf' b'0000000c6e6d6864000000000000002464696e660000001c' (0x10b)
06a85:        b'nmhd' b'00000000' (0xc)
06a91:        b'dinf' b'0000001c6472656600000000000000010000000c75726c20' (0x24)
06a99:          b'dref' b'00000000000000010000000c75726c2000000001' (0x1c)
00010:            b'url ' b'00000001' (0xc)
06ab5:        b'stbl' b'0000005c7374736400000000000000010000004c43544d44' (0xd3)
06abd:          b'stsd' b'00000000000000010000004c43544d440000000000000001' (0x5c)
00010:            b'CTMD' b'000000000000000100000007000000010000001800000003' (0x4c)
06b19:          b'stts' b'00000000000000010000000100000001' (0x18)
06b31:          b'stsc' b'0000000000000001000000010000000100000001' (0x1c)
06b4d:          stsz: version=0, size=0xa04c, count=1 (0x14)
06b61:          b'free' b'00000000000000' (0xf)
06b70:          co64: version=0, size=0x2565b98, count=1 (0x18)
06b88:uuid: b'be7acfcb97a942e89c71999491e3afac' (0x10018)
16ba0:uuid: b'eaf42b5e1c984b88b9fbb7dc406e4d16' (0x56d90)
16bc0:  PRVW: width=1620, height=1080, jpeg_size=0x56d58 (0x56d70)
6d930:b'mdat' b'ffd8ffdb008400060404060404060604' (0x25022b8)
256fbe8:
{b'THMB': (160, 120, 16547, 8760), 'trak0': {b'CRAW': (6000, 4000), b'stsz': 3200751, b'co64': 448832}, 'trak1': {b'CRAW
': (1624, 1080), b'stsz': 1883200, b'co64': 3649584}, 'trak2': {b'CRAW': (6288, 4056), b'stsz': 33681192, b'co64': 55327
84}, 'trak3': {b'stsz': 41036, b'co64': 39213976}, b'PRVW': (1620, 1080, 355672, 93144)}
extracting jpeg (trak0) 6000x4000 from mdat... offset=0x6d940, size=0x30d6ef
extracting SD crx (trak1) 1624x1080 from mdat... offset=0x37b030, size=0x1cbc40
ff010008 001cbbd0 00000000
  ff020008 0007b5c0 08000000
  ff030008 0007b5c0 00200001
    b'00000000002027a5000004000f03e0347565417b810ded0ef68019d59085af6a'
  ff020008 00070600 18000000
  ff030008 00070600 00200002
    b'00000000002028ff00000a6000680ccecfdd76905615eb87c07047a8e10bb5a4'
  ff020008 00070640 28000000
  ff030008 00070640 00200006
    b'00000000002028d500000000004001800880baa0035a513e5a91891b50050ad5'
  ff020008 0006f9d0 38000000
  ff030008 0006f9d0 00200006
    b'0000000000202cab0000020002a2b7747063b83a27ff1625fb4d52b4c41823e5'
extracting HD crx (trak2) 6288x4056 from mdat... offset=0x546c70, size=0x201ef28
ff010008 00ff40b8 00000000
  ff020008 00405528 08000000
  ff030008 00405528 00200006
    b'0000000000202e45000000000040039226003b15c982d276151ca7cef3aa0b22'
  ff020008 003fc8a8 18000000
  ff030008 003fc8a8 00200003
    b'0000000000202fbd000000000040016000000000e801b88ac3590cd6c022df4d'
  ff020008 003fc6e8 28000000
  ff030008 003fc6e8 00200005
    b'0000000000202f9d0000000002000000000a80110bf884163afc8d3d28f76fe1'
  ff020008 003f5c00 38000000
  ff030008 003f5c00 00200000
    b'0000000000202f6100000000004003ae0000000062a9c1c8002b0471075d0a2d'
ff010008 0102ad98 00010000
  ff020008 0040cb88 08000000
  ff030008 0040cb88 00200006
    b'0000000000202f6b0000000000a0064e819b8854c64481e72f454f50a3242ab2'
  ff020008 0040eb50 18000000
  ff030008 0040eb50 00200006
    b'0000000000202feb00000000004003c20000000000800b68026fcbbd264dfba5'
  ff020008 0040ed48 28000000
  ff030008 0040ed48 00200002
    b'0000000000202fa10001c00001b0034367370ac4dec63b510ad0e2415a17c15f'
  ff020008 00400978 38000000
  ff030008 00400978 00200007
    b'00000000002031db000000000040062400000001b0005e43835fa07a05efb670'


Quote from: lorenzo353 on March 29, 2018, 08:29:23 PM
Hi,

I have now published a python tool to parse the CR3 structure and extract jpeg, crx pictures...

Help is welcome to understand crx compression.

kind regard,

Laurent
Title: Re: new Canon CR3 raw format from M50 camera
Post by: dfort on April 02, 2018, 07:29:39 PM
So ML for Digic 8 is in the works?

Is the EOS M50 CHDK only or mostly or is there a chance for ML in the distant future? The specs look interesting for such a small camera. It is priced about what the original EOSM was priced when it was introduced 6 years ago so maybe they will be selling for $150 in 2024?

Just kidding of course. Nice work on the CR3 format!
Title: Re: new Canon CR3 raw format from M50 camera
Post by: chris_overseas on April 04, 2018, 02:34:02 PM
There's something of a suggestion here that the cr3 compression might be lossy: https://www.dpreview.com/articles/0483301097/quick-look-canons-new-compressed-raw-format
Title: Re: new Canon CR3 raw format from M50 camera
Post by: a1ex on April 21, 2018, 02:40:03 PM
Quote from: dfort on April 02, 2018, 07:29:39 PM
Is the EOS M50 CHDK only?

It runs EOS firmware (https://www.magiclantern.fm/forum/index.php?topic=19737.msg200355#msg200355).
Title: Re: new Canon CR3 raw format from M50 camera
Post by: lorenzo353 on October 20, 2018, 08:50:07 PM
Dcraw 9.28 has been published in june 2018, so Dave Coffin is going on!

Quote from: Walter Schulz on March 12, 2018, 11:00:56 PM
Ouch! Not the news I wanted to read. Totally slipped under my radar!
Title: Re: new Canon CR3 raw format from M50 camera
Post by: Walter Schulz on October 20, 2018, 09:01:09 PM
Thanks!
Sergio Namias's Windows build (with wildcard support) is one version behind (9.27). Has anyone tried if wildcard problem for Windows binaries still exists with GNU Compiler?
https://gcc.gnu.org/ml/gcc-patches/2017-01/msg01299.html
Or anyone compiled it with Visual Studio?
Title: Re: new Canon CR3 raw format from M50 camera
Post by: digiboy on December 02, 2018, 08:08:49 PM
@Walter Schulz
I try build in Visual Studio 2017 with NO_JASPER option (use for Decode Red camera movies)
I'm not sure if everything works.
Would you like to try ?
Title: Re: new Canon CR3 raw format from M50 camera
Post by: Walter Schulz on December 02, 2018, 08:15:23 PM
The only feature I can thoroughly test is wildcard handling on Windows. Link, please! For other Dcraw features there are some more competent people around. Dual-ISO picture processing is not my strong point.

EDIT: As long as GCC issue with wildcards is not solved (haven't heard anything about it, yet) ... If you have too much time to spend: Can you try to compile cr2hdr.exe, too?
Title: Re: new Canon CR3 raw format from M50 camera
Post by: digiboy on December 04, 2018, 11:23:31 PM
I build Windows version x86.
It should support wildcards.

I compiled without JASPER library.
So only raw from RED camera shouldn't work

Link to exe file:
https://drive.google.com/open?id=1jULQntHJr_ddz_HDOImepXS8LG80Oyra

If something doesn't work, please report an error.
Title: Re: new Canon CR3 raw format from M50 camera
Post by: Danne on December 05, 2018, 06:44:02 AM
Quote from: lorenzo353 on October 20, 2018, 08:50:07 PM
Dcraw 9.28 has been published in june 2018, so Dave Coffin is going on!
That is really good news.
Title: Re: new Canon CR3 raw format from M50 camera
Post by: lorenzo353 on November 09, 2019, 02:07:44 PM
Hi,

FYI, the CRX codec of the CR3 format has been reverse engineered and open sourced: https://github.com/LibRaw/LibRaw/blob/master/src/decoders/crx.cpp

Kind regards,

Laurent
Title: Re: new Canon CR3 raw format from M50 camera
Post by: Danne on November 09, 2019, 03:36:23 PM
Nice!
@Ili3101
Maybe something to consider for raw2mlv?
Title: new Canon CR3 raw format from M50 camera
Post by: DeafEyeJedi on November 09, 2019, 05:41:30 PM
Quote from: Danne on November 09, 2019, 03:36:23 PM
@Ili3101
Maybe something to consider for raw2mlv?

+1
Title: Re: new Canon CR3 raw format from M50 camera
Post by: masc on November 09, 2019, 09:09:57 PM
Quote from: Danne on November 09, 2019, 03:36:23 PM
@Ili3101
Maybe something to consider for raw2mlv?
Should work out of the box. Just update sources of libraw and compile.
Title: Re: new Canon CR3 raw format from M50 camera
Post by: Chronic on August 22, 2022, 07:30:34 AM
Quote from: Walter Schulz on March 12, 2018, 11:00:56 PM
Ouch! Not the news I wanted to read. Totally slipped under my radar!

If anyone is on Linux, there is a command line program called dnglab that converts like a champ with several different output conversion formats including layers [channels].