This thread is for concentraring all the findings, discoveries, and tries to port the dual_iso feature in movie mode for the 50D and 7D (currently it works only in photo mode on both cameras).
All bits of useful informations on how to obtain this goal are welcome here.
Why 50D and 7D together in a single thread ? Just because 50D has the same display filter method used on 7D, so, if someone discovers something on 50D or 7D, then the other camera can benefit immediately of the same findings.
Everyone that tried or is currently active into porting this feature on the above cameras, is invited to post here his current efforts, in order to be of help for others and to be helped from others also.
This first post is kept updated with the last findings highlights and with the current porting status.
50D CURRENT STATUS : NOT PORTED YET
7D CURRENT STATUS : NOT PORTED YET
GENERAL UP-TO-DATE FINDINGS :
[1] The unified method used into current "dual_iso" module, regarding dual iso in MOVIE mode, seems not applicable for 50D and 7D.
A completely NEW method seems to be discovered and developed for these cameras. But works are in progress to validate this thinking.
As stated by 1% : "the only real hope would be finding other regs for dual ISO that directly configure the digic/sensor".
[2] 50D has the same display filter method used on 7D, so, if someone discovers something on 50D or 7D, then the other camera can benefit immediately
of the same findings. So, feel free to take advantage of findings found on both cameras, without concentrating only on a specific one when reading there.
[3] Starting from 7D to discover how to do dual iso for movies, is the hard but only way if you own only the 7D. Instead, based on point [2] of the findings section,
it is a better and easier way to find how to do this on 50D, and then, once discovered, the porting on 7D will be likely an (almost) copy-paste matter.
7D UP-TO-DATE FINDINGS :
[1] Based on 1% and other valuable developers current experiences, SLAVE debugging will get you nowhere : Dual_ISO for photo on the 7D is on the master, so likely it is also for video.
GENERAL UP-TO-DATE DIRECTIONS :
[1] You can find the dual_iso module sources by following this source path : " Magic Lantern / modules / dual_iso / "
[2] You can open the file " dual_iso.c " and find the line number 675 where the function " static unsigned int isoless_init() " is defined.
Inside this function, you can find all the constants definitions subdivided by camera model. Concentrate on the block that is for 50D or 7D.
You can see there is a constant declaration serie named " PHOTO_CMOS_ISO_xxxx ", where " xxxx " are various names: these are for PHOTO mode.
We have to find the constants named " FRAME_CMOS_ISO_xxx ", present on other camera models blocks definitions, that are for VIDEO mode.
[3] The values to find are the following (WARNING: be careful trying to find them, it seems that a new method must be developed, read further down) :
FRAME_CMOS_ISO_START = it is the CMOS register 0000 - for LiveView, ISO 100 (check in movie mode, not photo!)
FRAME_CMOS_ISO_COUNT = it is the number of different ISO values from ISO 100 to xxxx, where xxxx is the max ISO value allowed for 50D or 7D
FRAME_CMOS_ISO_SIZE = it is the distance between ISO 100 and ISO 200 CMOS registers addresses, in bytes
You can simply add these constants declarations into the 50D or 7D block and compile, then you can see if the values found are right or not by running ML on camera,
by activating dual iso in movie mode and start recording, then evaluating the resulting recorded video file. Beware: possible camera brickings are your
responsability only. Nor me or ML can be held responsible for any damage caused by these experimentations on your camera or equipment.
[4] Example PHOTO findings for 550D (WARNING: be careful reading this, because it seems that a new method must be developed, read further down) :
By examining the disassembly of the 550D ROM, the following was found :
ADDRESS
00 0000 406941E4 = 100 ISO
00 0024 406941F6 = 200 ISO
00 0048 40694208 = 400 ISO
00 006C 4069421A = 800 ISO
00 0090 4069422C = 1600 ISO
00 00B4 4069423E = 3200 ISO
Hence, the registers values are :
PHOTO_CMOS_ISO_START = 0x406941E4; // CMOS register 0000 - for photo mode, ISO 100
PHOTO_CMOS_ISO_COUNT = 6; // from ISO 100 to 3200
PHOTO_CMOS_ISO_SIZE = 18; // distance between ISO 100 and ISO 200 addresses, in bytes
[5] On 50D or 7D SLAVE, just compile with the switch GDB=Y and use the ADTG_LOG module. 1% have the addresses in his repo where all the functions are :
https://bitbucket.org/OtherOnePercent/tragic-lantern-6d/src/80d0d727990254e45184b2a4e57aef5ae182a23b/modules/adtg_log/adtg_log.c?at=unified
Copy the 50D or 7D addresses to whatever ML you are compiling and get rid of whats there. the modules only work for one camera at a time.
As per 1%, uncomment whatever the ones you need. The reg on 50D or 7D should show up in the logs pretty quickly, ISO value matches photo mode values. Changing it did nothing
so you need to find a completely new method to dual ISO or see what is going on. For more info on this method, see point [3] under "INSTRUMENTS YOU CAN USE IN GENERAL
(50D AND 7D SLAVE MODE ONLY)" under here. However, if you are on a 7D, BEWARE on point [1] under "7D UP-TO-DATE FINDINGS": in SLAVE mode there is nothing to find, so you
have to use this method under MASTER processor, but in this case you have to "sign" the BIN (see point [1] on "7D UP-TO-DATE DIRECTIONS" just here below).
7D UP-TO-DATE DIRECTIONS :
[1] Please, note that 7D has TWO processors inside. So, debugging is a bit more complicated: two different processors (the "master" and
the "slave") must be debugged separately in order to find complete informations.
The processor on which ML is based is the SLAVE. It can run ML code with a simple compiled BIN file, like for the majority of the other cams.
The MASTER processor, on the other hand, can run ML code only if the BIN file is "signed" with a particular private "signing key" (known only to few
ML developers, because it cannot be of public domain, peraphs for Canon copyright reasons). So, if you want to debug the MASTER processor,
you have not only to compile the BIN as usual (by using the same procedures for the SLAVE processor), but you have, as the final step, to
"sign" it, making it becoming a file with .FIR extension. You can try to ask devs for the key, or you can ask them to sign your BIN for you, but
they have to agree to your request, and this is not assured by any way. Compiling for MASTER is useful (for now) only to find registers changes and others
manipulations done by the master, but then, once discovered these operations, you can implement them down to the SLAVE without problems.
Like 1% says, you can read/write small amounts of data to the master through canon provided mechanisms (using the SLAVE processor), and this is enough
for headphone/fps and few registers. Taking over canon functions (ie: to do GDB or registers logging on MASTER) needs our own code running there (on MASTER).
You can follow directions and you can start compiling for the MASTER processor in the 7D MASTER processor branch here:
https://bitbucket.org/hudson/magic-lantern/src/a27e3b9df491d1bfa2cba70def5fb873486980e1/platform/7D_MASTER.203/?at=unified
INSTRUMENTS YOU CAN USE IN GENERAL (50D AND 7D SLAVE MODE ONLY) :
[1] On dmilligan advice, you can use a more visually engaging and immediate debug method by using ADTG_GUI module you can find here:
https://bitbucket.org/hudson/magic-lantern/src/a27e3b9df491d1bfa2cba70def5fb873486980e1/modules/adtg_gui/?at=unified
you can compile it and then you can put the compiled files inside the other modules directory, then you can select it from the ML modules menu.
Also, you need a special compilation switch when compiling the main BIN file: follow the directions inside the above link.
[2] As on 1% advice, GDB (a log file debugging method) can be used in order to discover behaviors and registers on 50D and 7D. GDB is a debugging
environment that is loaded into camera like the normal ML main program and in LIEU of it. This writes debug data to a
log file inside the memory card, from which you can analyze data inside it by downloading and reading it through a PC and a card reader.
More info and files to download in order to get started can be found here: http://www.magiclantern.fm/forum/index.php?topic=2940.0.
[3] You can use ADTG_LOG module. It's similar to ADTG_GUI module as on point [1], but it's not visual, and instead of writing registers on screen, it
writes results on a log file inside a directory located on camera memory card. Also, you cannot write into register as you can do in ADTG_GUI.
You can find 1% version on his repository here (disregard it's for 6D):
https://bitbucket.org/OtherOnePercent/tragic-lantern-6d/src/80d0d727990254e45184b2a4e57aef5ae182a23b/modules/adtg_log/adtg_log.c?at=unified
or, alternatively, you can find it on the unified original ML repository here:
https://bitbucket.org/hudson/magic-lantern/src/a27e3b9df491d1bfa2cba70def5fb873486980e1/modules/adtg_log/?at=unified
INSTRUMENTS YOU CAN USE FOR 7D MASTER ONLY :
[1] Same as point [2] under previous section (read it for more info) but there is a difference:
in order to work inside the 7D MASTER processor, based on 1% instructions, you need to set up code in the 7D master branch
(there are skeletons in there for other registers), but then you need to "sign" the bin in order for it to be run on MASTER: more info on this
can be found above under "7D UP-TO-DATE DIRECTIONS" at point [1]. The 7D MASTER branch can be found on 1% repository there:
https://bitbucket.org/OtherOnePercent/tragic-lantern-2.0/src/fe768c4e30178ab7625346d8530e6b135c92a11d/platform/7D_MASTER.203/?at=unified
or it can be found also under the official ML repository there :
https://bitbucket.org/hudson/magic-lantern/src/a27e3b9df491d1bfa2cba70def5fb873486980e1/platform/7D_MASTER.203/?at=unified
[2] Same as point [3] under previous section (read it for more info) but there is a difference:
in order to work inside the 7D MASTER processor, based on 1% instructions, you need to "sign" the resulting BIN in order to make it running on
MASTER processor: more info on this process can be found above under "7D UP-TO-DATE DIRECTIONS" at point [1].
All bits of useful informations on how to obtain this goal are welcome here.
Why 50D and 7D together in a single thread ? Just because 50D has the same display filter method used on 7D, so, if someone discovers something on 50D or 7D, then the other camera can benefit immediately of the same findings.
Everyone that tried or is currently active into porting this feature on the above cameras, is invited to post here his current efforts, in order to be of help for others and to be helped from others also.
This first post is kept updated with the last findings highlights and with the current porting status.
50D CURRENT STATUS : NOT PORTED YET
7D CURRENT STATUS : NOT PORTED YET
GENERAL UP-TO-DATE FINDINGS :
[1] The unified method used into current "dual_iso" module, regarding dual iso in MOVIE mode, seems not applicable for 50D and 7D.
A completely NEW method seems to be discovered and developed for these cameras. But works are in progress to validate this thinking.
As stated by 1% : "the only real hope would be finding other regs for dual ISO that directly configure the digic/sensor".
[2] 50D has the same display filter method used on 7D, so, if someone discovers something on 50D or 7D, then the other camera can benefit immediately
of the same findings. So, feel free to take advantage of findings found on both cameras, without concentrating only on a specific one when reading there.
[3] Starting from 7D to discover how to do dual iso for movies, is the hard but only way if you own only the 7D. Instead, based on point [2] of the findings section,
it is a better and easier way to find how to do this on 50D, and then, once discovered, the porting on 7D will be likely an (almost) copy-paste matter.
7D UP-TO-DATE FINDINGS :
[1] Based on 1% and other valuable developers current experiences, SLAVE debugging will get you nowhere : Dual_ISO for photo on the 7D is on the master, so likely it is also for video.
GENERAL UP-TO-DATE DIRECTIONS :
[1] You can find the dual_iso module sources by following this source path : " Magic Lantern / modules / dual_iso / "
[2] You can open the file " dual_iso.c " and find the line number 675 where the function " static unsigned int isoless_init() " is defined.
Inside this function, you can find all the constants definitions subdivided by camera model. Concentrate on the block that is for 50D or 7D.
You can see there is a constant declaration serie named " PHOTO_CMOS_ISO_xxxx ", where " xxxx " are various names: these are for PHOTO mode.
We have to find the constants named " FRAME_CMOS_ISO_xxx ", present on other camera models blocks definitions, that are for VIDEO mode.
[3] The values to find are the following (WARNING: be careful trying to find them, it seems that a new method must be developed, read further down) :
FRAME_CMOS_ISO_START = it is the CMOS register 0000 - for LiveView, ISO 100 (check in movie mode, not photo!)
FRAME_CMOS_ISO_COUNT = it is the number of different ISO values from ISO 100 to xxxx, where xxxx is the max ISO value allowed for 50D or 7D
FRAME_CMOS_ISO_SIZE = it is the distance between ISO 100 and ISO 200 CMOS registers addresses, in bytes
You can simply add these constants declarations into the 50D or 7D block and compile, then you can see if the values found are right or not by running ML on camera,
by activating dual iso in movie mode and start recording, then evaluating the resulting recorded video file. Beware: possible camera brickings are your
responsability only. Nor me or ML can be held responsible for any damage caused by these experimentations on your camera or equipment.
[4] Example PHOTO findings for 550D (WARNING: be careful reading this, because it seems that a new method must be developed, read further down) :
By examining the disassembly of the 550D ROM, the following was found :
ADDRESS
00 0000 406941E4 = 100 ISO
00 0024 406941F6 = 200 ISO
00 0048 40694208 = 400 ISO
00 006C 4069421A = 800 ISO
00 0090 4069422C = 1600 ISO
00 00B4 4069423E = 3200 ISO
Hence, the registers values are :
PHOTO_CMOS_ISO_START = 0x406941E4; // CMOS register 0000 - for photo mode, ISO 100
PHOTO_CMOS_ISO_COUNT = 6; // from ISO 100 to 3200
PHOTO_CMOS_ISO_SIZE = 18; // distance between ISO 100 and ISO 200 addresses, in bytes
[5] On 50D or 7D SLAVE, just compile with the switch GDB=Y and use the ADTG_LOG module. 1% have the addresses in his repo where all the functions are :
https://bitbucket.org/OtherOnePercent/tragic-lantern-6d/src/80d0d727990254e45184b2a4e57aef5ae182a23b/modules/adtg_log/adtg_log.c?at=unified
Copy the 50D or 7D addresses to whatever ML you are compiling and get rid of whats there. the modules only work for one camera at a time.
As per 1%, uncomment whatever the ones you need. The reg on 50D or 7D should show up in the logs pretty quickly, ISO value matches photo mode values. Changing it did nothing
so you need to find a completely new method to dual ISO or see what is going on. For more info on this method, see point [3] under "INSTRUMENTS YOU CAN USE IN GENERAL
(50D AND 7D SLAVE MODE ONLY)" under here. However, if you are on a 7D, BEWARE on point [1] under "7D UP-TO-DATE FINDINGS": in SLAVE mode there is nothing to find, so you
have to use this method under MASTER processor, but in this case you have to "sign" the BIN (see point [1] on "7D UP-TO-DATE DIRECTIONS" just here below).
7D UP-TO-DATE DIRECTIONS :
[1] Please, note that 7D has TWO processors inside. So, debugging is a bit more complicated: two different processors (the "master" and
the "slave") must be debugged separately in order to find complete informations.
The processor on which ML is based is the SLAVE. It can run ML code with a simple compiled BIN file, like for the majority of the other cams.
The MASTER processor, on the other hand, can run ML code only if the BIN file is "signed" with a particular private "signing key" (known only to few
ML developers, because it cannot be of public domain, peraphs for Canon copyright reasons). So, if you want to debug the MASTER processor,
you have not only to compile the BIN as usual (by using the same procedures for the SLAVE processor), but you have, as the final step, to
"sign" it, making it becoming a file with .FIR extension. You can try to ask devs for the key, or you can ask them to sign your BIN for you, but
they have to agree to your request, and this is not assured by any way. Compiling for MASTER is useful (for now) only to find registers changes and others
manipulations done by the master, but then, once discovered these operations, you can implement them down to the SLAVE without problems.
Like 1% says, you can read/write small amounts of data to the master through canon provided mechanisms (using the SLAVE processor), and this is enough
for headphone/fps and few registers. Taking over canon functions (ie: to do GDB or registers logging on MASTER) needs our own code running there (on MASTER).
You can follow directions and you can start compiling for the MASTER processor in the 7D MASTER processor branch here:
https://bitbucket.org/hudson/magic-lantern/src/a27e3b9df491d1bfa2cba70def5fb873486980e1/platform/7D_MASTER.203/?at=unified
INSTRUMENTS YOU CAN USE IN GENERAL (50D AND 7D SLAVE MODE ONLY) :
[1] On dmilligan advice, you can use a more visually engaging and immediate debug method by using ADTG_GUI module you can find here:
https://bitbucket.org/hudson/magic-lantern/src/a27e3b9df491d1bfa2cba70def5fb873486980e1/modules/adtg_gui/?at=unified
you can compile it and then you can put the compiled files inside the other modules directory, then you can select it from the ML modules menu.
Also, you need a special compilation switch when compiling the main BIN file: follow the directions inside the above link.
[2] As on 1% advice, GDB (a log file debugging method) can be used in order to discover behaviors and registers on 50D and 7D. GDB is a debugging
environment that is loaded into camera like the normal ML main program and in LIEU of it. This writes debug data to a
log file inside the memory card, from which you can analyze data inside it by downloading and reading it through a PC and a card reader.
More info and files to download in order to get started can be found here: http://www.magiclantern.fm/forum/index.php?topic=2940.0.
[3] You can use ADTG_LOG module. It's similar to ADTG_GUI module as on point [1], but it's not visual, and instead of writing registers on screen, it
writes results on a log file inside a directory located on camera memory card. Also, you cannot write into register as you can do in ADTG_GUI.
You can find 1% version on his repository here (disregard it's for 6D):
https://bitbucket.org/OtherOnePercent/tragic-lantern-6d/src/80d0d727990254e45184b2a4e57aef5ae182a23b/modules/adtg_log/adtg_log.c?at=unified
or, alternatively, you can find it on the unified original ML repository here:
https://bitbucket.org/hudson/magic-lantern/src/a27e3b9df491d1bfa2cba70def5fb873486980e1/modules/adtg_log/?at=unified
INSTRUMENTS YOU CAN USE FOR 7D MASTER ONLY :
[1] Same as point [2] under previous section (read it for more info) but there is a difference:
in order to work inside the 7D MASTER processor, based on 1% instructions, you need to set up code in the 7D master branch
(there are skeletons in there for other registers), but then you need to "sign" the bin in order for it to be run on MASTER: more info on this
can be found above under "7D UP-TO-DATE DIRECTIONS" at point [1]. The 7D MASTER branch can be found on 1% repository there:
https://bitbucket.org/OtherOnePercent/tragic-lantern-2.0/src/fe768c4e30178ab7625346d8530e6b135c92a11d/platform/7D_MASTER.203/?at=unified
or it can be found also under the official ML repository there :
https://bitbucket.org/hudson/magic-lantern/src/a27e3b9df491d1bfa2cba70def5fb873486980e1/platform/7D_MASTER.203/?at=unified
[2] Same as point [3] under previous section (read it for more info) but there is a difference:
in order to work inside the 7D MASTER processor, based on 1% instructions, you need to "sign" the resulting BIN in order to make it running on
MASTER processor: more info on this process can be found above under "7D UP-TO-DATE DIRECTIONS" at point [1].