Got the crop_rec module working on the 700D and it was pretty easy to do--or let's just way it was mostly stupid luck. It is working just like on the EOSM, including the vertically stretched 3x3 preview that @rburne noted as needing fixing. In a way it works better than the EOSM because it can do 50p/60p "slow motion"
in H.264 and even raw video, though of course it is limited by the SD card write speed but switching to 10bit helps with that.
[EDIT - Just test H.264 and uh, never mind. frame size is 1280x720 and the image is stretched vertically.]
I followed the
rbrune pull request for the EOSM which means that it has the same limited options as the EOSM. I'll be doing some tinkering on a 5D3 soon so I'll finally get to see what 1:1, 1x3 and 3x1 does and if it is applicable to the 700D. Anyone have any thoughts on this?
I added new sections for the 700D so it won't break 5D3/EOSM functionality but it looks like several sections can be combined. I'd like to look into these things before making a pull request but if anyone wants to see my work in progress:
https://bitbucket.org/daniel_fort/magic-lantern/branch/crop_rec-700D_experimentsHere are details of how I did it. First of all, this is the important stuff:
else if (is_camera("700D", "1.1.4"))
{
CMOS_WRITE = 0x17A1C;
MEM_CMOS_WRITE = 0xE92D41F0;
ADTG_WRITE = 0x178FC;
MEM_ADTG_WRITE = 0xE92D43F8;
So where did I find these numbers? I looked at the EOSM numbers:
else if (is_camera("EOSM", "2.0.2"))
{
CMOS_WRITE = 0x2998C;
MEM_CMOS_WRITE = 0xE92D41F0;
ADTG_WRITE = 0x2986C;
MEM_ADTG_WRITE = 0xE92D43F8;
Ok--where to find CMOS_WRITE. I compiled a version of the iso_research branch to get the adtg_gui module for both the EOSM and 700D so I can see the registers side-by-side, started hunting and got totally lost. Then I remembered dmilligan's advice, look at the code.
adtg_gui.c
else if (is_camera("EOSM", "2.0.2")) // from 1%
{
ADTG_WRITE_FUNC = 0x2986C;
CMOS_WRITE_FUNC = 0x2998C;
}
...
else if (is_camera("650D", "1.0.4"))
{
ADTG_WRITE_FUNC = 0x178FC; //"[REG] @@@@@@@@@@@@ Start ADTG[CS:%lx]"
CMOS_WRITE_FUNC = 0x17A1C; //"[REG] ############ Start CMOS"
}
else if (is_camera("700D", "1.1.4"))
{
ADTG_WRITE_FUNC = 0x178FC; //"[REG] @@@@@@@@@@@@ Start ADTG[CS:%lx]"
CMOS_WRITE_FUNC = 0x17A1C; //"[REG] ############ Start CMOS"
}
Two down two to go. Gee almost too easy. I kept the 650D code in that code snippet because this might get interesting. See how the values are exactly the same as the 700D?
Next, how to find the MEM_CMOS_WRITE and MEM_ADTG_WRITE? Lost again. So I looked up those addresses on the EOSM disassembly. I got 6,146 hits for 0xE92D41F0 but comparing the two disassembly files side-by-side, they were all in the same places on both cameras so I went with the EOSM numbers and it worked. Totally lucked out. Now I know this is not the right way to find these addresses but in the end the only thing that really matters is that it works. Still, it would be nice to learn the right way to do this in order help get other cameras working with crop_rec.
How about the 650D? I got a ROM1.BIN from that camera so I disassembled it. The code is very similar to the 700D but the MEM_CMOS_WRITE and MEM_ADTG_WRITE address seems to be different and it will take some searching to figure it out but it looks doable.
The crop_rec module is one of those Magic Lantern features that you didn't know you needed until you try it out. It also evolved into something that doesn't resemble its name any more. A few days ago a1ex asked if it is
time for a rename so if there are any non-coders who know about marketing, here's your chance to contribute to ML development. Just remember there is an 8-character limit on the module's name.