Main Builds » 70D 1.1.2

Latest Build (2018-02-17 01:57)

Change Log

8e53e66: Merged patchmgr into 70D_merge_fw112

41088c5: Merged lua_fix into 70D_merge_fw112

b632855: Fix compiling with CONFIG_DIGIC_POKE

deeeced: Modules: patch.h no longer needed

20a52d5: Modules: fix enabling "long" modules when using config presets (issue #2789)
to reproduce: -> ML/SETTINGS/MENU.KEY/arkanoid. -> file create error on exfat
modules with shorter name: -> ML/SETTINGS/MENU.KEY/adv_int.e -> it appears to work fine, but it's incorrect
worst case: -> ML/SETTINGS/MYPRESET.NAM/adv_i -> it appears to work fine, possible name clash with other modules

cb083db: shoot: attempt to make public photo capture functions thread safe, to some extent
a bit of a hack; some serious rework needed to fix this properly
at least it appears to fix

b8626f4: Bracketing: debug messages for troubleshooting

379b1af: shoot: make the so-called remote_shoot always take pictures, not movies
(moved movie functionality in lcdsensor/lightsensor - anything else broken?)

5d7a200: lens_take_picture: always wait until the image capture process starts (and optionally wait for it to finish)

d592d0a: Lua: fix camera.wait() not appearing in API docs

25a4a03: selftest: also test get_task_name_from_id, not just get_current_task_name
(they use different Canon APIs)

8677441: Attempt to fix conflict between ML and Canon overlays on recent DIGIC 4 models
confirmed on 1200D, likely applies to 1300D as well

2d21002: gui-common: remove outdated comment

412a401: Menu: some rough support for sumbenus where the initial field enables the entire group
- the initial field should have the same .priv field as the master entry, and .select = menu_open_submenu
- prevent graying out the field used for enabling, even if it gives the truth value for the master menu entry
- do not print value by default for submenus (we already draw a forward sign)

ac878e5: gui-common: make translated longpress events (such as Q on certain models) available to other modules (tested with Lua)

5ac9cf6: Menu: refactored long-press checks with a common function and data structure
(to be tested; may affect every single camera model)

f8b9f9f: Menu: use animation for all longpress handlers

bc8a5a0: Merged 100D_merge_fw101 into lua_fix
(going to refactor the SET/Q button handling)

4b9a5c2: lens.h: some models have larger PROP_LV_LENS
EOSM: 61; 70D/100D: 58; 5D3.123/6D: 56

ac97c5d: Lens info: attempt to update outside LiveView, to be tested
focus distance, focal length on zoom lenses etc are now updated every second
credits Greg:

d0e55b3: lens_info: use lens_info.lens_exists instead of[0]
(from manual_lens_info)

d863156: 100D: attempt to fix Q/SET regression (tested in QEMU, unsure about the exact hardware behavior)
also reduced long-press delay to 0.5 seconds

f3bfa26: Merged allocate-raw-lv-buffer into lua_fix
(minor; 5D3.123 fix)

2a04a9a: Merged unified into lua_fix
(DOF fixes)

36acb0f: Merged in garry23/dof-fix-for-focus.c/garry23/focusc-edited-online-with-bitbucket-by-g-1495645868417 (pull request #831)
Changed the DoF equations to better handle integer math and used a different source for the equations.

9d76a31: Dummy merge (reference changeset for make install_qemu)

f67d34c: Merged in makefile-updates (pull request #898)
Makefile updates part 2 (minor fixes, updated make install_qemu)

4131ccb: focus.c: fix possible overflow when computing hyperfocal (corner case)
examples (focal_len, focus_dist):
73 4689
90 7123
91 7282
98 8444

0e82ba3: focus.c: fix typo pointed out by garry23

b3e263f: Merged longpress into lua_fix

2ee1d50: simplified menu definition for log interval
(using the new routines for rounding options)

b1d9994: Merged edmac into lua_fix

d5ad86f: Makefile: updated rules for "make install_qemu" (for reference, should anyone ever want to use them on older changesets)
Before using them, qemu has to be installed first in qemu-eos (from the qemu branch)
QEMU installation directory can be changed from the QEMU_DIR environment variable, or from Makefile.user

8071be3: Changed the DoF equations to better handle integer math and used a different source for the equations.

02e0020: focus.c edited online with Bitbucket

d2b1bac: focus.c edited online with Bitbucket (updated)

fae93ae: focus.c edited online with Bitbucket by Garry

d590db7: Menu: fine-tuned long-press indicator appearance
- using filled circles
- using a sine table to avoid roundoff errors

2592de7: Merged unified into longpress

b732009: Menu: simple long-press indicator (animated)

8840aa5: EOS M: fix menu navigation;
make sure the long-press code can be enabled on other models
(to enable, define CONFIG_LONG_PRESS_SET_MENU in internals.h)

271bd63: gui-common: moved button logging code at the top
(to make sure all events are printed in all modes)

81b9e49: Raw backend: DEFAULT_RAW_BUFFER_SIZE for 700D and EOSM (thanks dfort)

33d943d: mem.c: fix compiling for 5D3.123
(display buffer address depends on HDMI options)

2dae7e4: Merged new_dryos_task_hooks into 100D_merge_fw101

8a5b890: 100D: cleanup handling of the Q button
(see b9e0b9e)

d6afebc: Merged new_dryos_task_hooks into lua_fix

1db7694: Merged allocate-raw-lv-buffer into lua_fix

538886b: Merged qemu into lua_fix

a9728fe: selftest: EOSM takes the crown for the lowest amount of shoot_memory available
(fragmented allocation can no longer be tested with hardcoded value)

b784fdf: Raw backend: 60D appears to allocate 28MB for the raw buffer

d32e6d5: Raw backend: updated 5D3 hypothesis about Canon LV RAW buffer
(todo: re-check 1.2.3)

e799e89: Raw backend: attempt to autodetect Canon's raw buffer size
- compile with CONFIG_MARK_UNUSED_MEMORY_AT_STARTUP (config-defines.h)
- open the console (Debug menu) and enable something that uses LiveView RAW features (raw video, raw histogram etc)
- test by starting the camera in all video modes (photo, 1080p, 720p, crop, x5 etc)
- take a screenshot or write down the console messages

d93c113: Raw backend: fix compilation on very old models

fa9c903: 1100D: CONFIG_ALLOCATE_RAW_LV_BUFFER may not be needed, after all

23524a6: Free Memory dialog: updated common addresses to allow dynamically allocated buffers (not just hardcoded ones);
also show current RAW and BMP buffer(s), not just the YUV ones

69bdcde: Raw backend: 1100D also needs DEFAULT_RAW_BUFFER / DEFAULT_RAW_BUFFER_SIZE

a6d941d: Raw backend: 1100D needs CONFIG_ALLOCATE_RAW_LV_BUFFER after refactoring

de5a794: Raw backend: use dummy DEFAULT_RAW_BUFFER_SIZE until the real size is found
without this, most builds would be broken
fixme: old models without CONFIG_EDMAC_RAW_SLURP are still broken

f0a25a6: Raw backend: sync memory allocation routines with crop_rec_4k
(squashed 8287b4f, 0ff9f1f, 3948408, d55423f, ebf206a, 3bc3637, cad72ea and 2bc5c3a, keeping only changes to raw.c)

3b69c5b: mlv_lite, mlv_rec: dialog_refresh_timer_addr for 1100D
(to be tested)

b34fa35: Merged unified into allocate-raw-lv-buffer

b9e0b9e: GUI: removed BGMT_Q_ALT
to be tested on 1100D, 550D, 600D, 60D
and also on recent ports (100D, 1200D, 1300D)

b46b630: Merged new-dryos-task-hooks into lua_fix

6e08bee: selftest: reduced memory requirements to allow 1100D to pass the memory tests

eb98ed4: 1100D: raw skip offsets for LiveView

4e24470: Patch manager: nicer way to avoid calling _reapply_cache_patches when not present
(fixes compiling the installer target and removes the need for defining NO_CACHE_PATCHES)

ac33688: Merged unified into patchmgr

519f2d0: Merged new-dryos-task-hooks into 100D_merge_fw101
(enabled CONFIG_NEW_DRYOS_TASK_HOOKS in internals.h; added task_dispatch_hook comment)

97d64bf: 100D: enabled Sticky half-shutter (unlikely to cause issues) and Sticky DOF preview (to be tested)

ec86da5: Changed the DoF equations to better handle integer math and used a different source for the equations.

2d19027: Menu: added different rounding mode flags: ISO R10", R20", 1-2-5 series, powers of 2

4284d17: Menu: cleaned up edit_mode constants
(removed unused EM_MANY_VALUES and renamed EM_MANY_VALUES_LV to EM_SHOW_LIVEVIEW)

846c31f: Menu: added UNIT_TIME_MS and UNIT_TIME_US with caret editing support; minor refactoring

4f7a1d0: silent pictures: options for delayed trigger, to help with IS

a39b95f: silent pictures: after image review, prefer to return to LiveView, with some exceptions
- if intervalometer is enabled, prefer to turn off the display to save power
- if "Turn off LCD" is enabled under "Powersave in LiveView", also prefer to turn off the display (manual override, e.g. for externally triggered timelapse)
- otherwise, prefer to return to LiveView (credits dfort)

1541d37: silent pictures: wait for IS if the switch is enabled on the lens

296f16a: 650D, 700D: enabled Sticky half-shutter (unlikely to cause issues) and Sticky DOF preview (to be tested)

1dbb29d: Auto bracketing: fine-tuned highlight and shadow thresholds
overexposed: if more than 0.02% of all pixels are above 235 in the YUV buffer (preview JPG, picture-style dependent)
underexposed: if more than 10% of all pixels are below 50
previous thresholds: 0.15% above 235 for highlights, 2.5% below 20 for shadows
todo: use raw-based metering? (some models still have problems with raw buffers in photo mode: 70D, 500D in LiveView, maybe others)

87c5cc7: Auto bracketing: do not analyze image borders
(should prevent unnecessary bright exposures if the image has black corners - happens with certain lenses)

88d8f92: Bracketing: print debug messages to console; use higher precision for highlight/shadow percentages
for troubleshooting

5112610: lens.h: mark lens_format_* as not thread-safe; fix return type
lua: workarounds to ensure thread safety for the above calls

9f51c19: lens: added lens_format_iso and refactored other code to use it

aa9c7f1: Lua: fixed issue #2824 - decimal number precision when printing
thanks dmilligan for the hint and aprofiti for the test code
tested with:
val = {1.2,1.4,2.8,4.3,4.5,5.6}
for i = 1, 6 do
console.write(" ")
console.write(val[i] - 0.000001)
console.write(" ")
console.write(val[i] + 0.000001)
1.2 1.199999 1.200001
1.4 1.399999 1.400001
2.8 2.799999 2.800001
4.3 4.299999 4.300001
4.5 4.499999 4.500001
5.6 5.599999 5.600001
1.2 1.199999 1.2
1.399999 1.399999 1.4
2.799999 2.799999 2.8
4.3 4.299999 4.300001
4.5 4.499999 4.5
5.599999 5.599998 5.6

f37efb4: Ghost image: fix crash (issues #2796, #2783)

4c32c3f: gui-common: sync gui_uilock with crop_rec_4k

bf8aa36: Merged new-dryos-task-hooks into lua_fix

df1f1b5: Merged unified into 100D_merge_fw101

1aab319: Merged new-dryos-task-hooks into 100D_merge_fw101

31848a7: 100D: MPU stubs (for dm-spy-experiments)

e4ab5b7: lua_camera: minor help tweaks

0290529: lua_camera: getter for gui.mode (missed in 706b131) + API tests

485997b: gui-common: fix exit_(play|qr|menu)_mode on 60D (camera.gui tests from api_test.lua are working now)

d7cdf70: gui-common: refactored exit_play_qr_mode/exit_menu_mode to avoid duplicate code
added exit_play_qr_menu_mode (generic)

2642fbe: Backout bc10355 (undo screenshot palette fix, not portable, issue #2821)

fee1ee2: edmac: make sure the log files don't have unnecessary newlines
(channels with complex size configuration may get printed on multiple lines; that makes the log file harder to parse)

1508a54: edmac: LOG_INTERVAL can now be changed from menu (persistent setting)

564b0c5: edmac: use numbered log file names

edcb52f: edmac: fix behavior when the extra info buffer gets full

056e56e: edmac: use half-shutter as trigger for logging EDMAC channels;
fine-tuned messages

2eddc9f: edmac: fix crash on models other than 5D3
(there was a hardcoded stub)

4b161ce: edmac: fix crash when using "Log EDMAC usage" on D4 models

bc3bd0d: Merged unified into edmac

b4a8fad: Added to nightly builds

2061922: edmac-memcpy: check to make sure all models have AbortEDmac
(to make sure it's correct: -> Stubs API test)

cd5a40a: lua_menu: fix hidden, advanced and edit_mode not working from menu declaration
todo: test all these settings and refactor to avoid duplicate code

0ec6843: Merged unified into lua_fix

84e8d24: Lua: fix missing from docs

cd768c4: Lua stdio: fix buffering issues
(error messages written to stderr with fprintf, maybe others)

b2f245c: Lua: sort scripts by filename at startup

cadbb0e: Lua: updated menu.get to return string by default
to get an integer: menu.get("Foo", "Bar", 0)
old syntax is still valid: menu.get("Foo", "Bar", "")
updated API tests

c60d970: Merged makefile-updates into lua-fix

29f030c: Merged makefile-updates into lua_fix

e7a7ead: Patch manager: moved reapply_cache_patches into sync_caches
also made it private

ab6ed83: fixed late evaluation issue in rule builder

60c763b: Merged new-dryos-task-hooks into lua_fix

5bcd52b: Merged makefile-updates into lua_fix

706b131: Lua: initial sketch for camera.gui (Canon GUI modes)
Moved display.idle to camera.gui.idle; removed camera.state

1a55233: gui-common: exit_menu_mode; minor fix in exit_play_qr_mode

c1d164e: gui-common: enter_menu_mode

1a9917c: Moved enter_play_mode, exit_play_qr_mode and PLAY/MENU status helpers to gui-common

3c52202: Lua: lv.vidmode (current video mode, as string)
API tests included

6087555: get_video_mode_name: handle paused LiveView mode (PAUSED-LV) and regular photo mode outside LiveView (PH-NOLV)

811e024: Lua: lv.overlays (status of Canon/ML overlays in LiveView)
API test included

36f1a4c: Lua: console.visible (status)
API tests updated

254314a: Lua: lens.autofocusing (status)
API test included (requires user to start autofocusing, as lens.autofocus() blocks until finished)

0381d50: lua_key.c: fix warning

45a225b: Lua: fix led_blink, issue #2808

aa09cc1: Merged unified into lua_fix

51f0aa8: Merged unified into patchmgr

ca46ef4: 100D: minor typo

c08b8ae: Merged new-dryos-task-hooks into 100D_merge_fw101

1db2345: 100D: fix MAX_ISO_BV

d85e97b: Merged unified into 100D_merge_fw101

b28cd95: Merged in nikfreak/magic-lantern/100D_merge_fw101 (pull request #867)
100D merge fw101 update

70e77de: 100D: AbortEDmac stub

a96451f: 100D: fix ADTG/CMOS_WRITE_FUNC

c796fbb: Merged in Dannephoto/magic-lantern/100D_merge_fw101_SOUND (pull request #863)
Fix for audio issues on eos 100D, possibly other cameras too.
* Fix for audio issues on eos 100D, possibly other cameras too.
Thanks too dfort for code.
* Nikfreak found the correct stub
Approved-by: nikfreak

edbf5ee: selftest: save the stub test log in ML/LOGS

b1b8162: selftest: include the stub test summary in the log file

2c8a5d0: sokoban.lua: save current level in the config file
(simple script using the "config" library)

06e7220: sokoban.lua: refactored the main loop; fixed missing "you win" message

3aa71a6: Lua: trigger the config_save event after running the main body of a script
(this allows simple scripts to use the config library)

e58024e: Lua: minor error handling cleanup (simplified logic)

69bcf7a: config.lua fixes

f701759: console: fix displayed size when console has many empty lines

0fbcfb0: Lua: clear console when starting a script from menu

ed6e385: Lua: refactored iterations through lua_script list
(use a getter for lua_State -> lua_script mapping whenever possible)

cf3cbf6: Lua: use a message queue for key.wait()
(fixes missed key presses caused by race conditios, including quick press/release)

426b80c: Lua: moved script semaphores into struct lua_script (refactor)

eff9892: Lua: refactored lua_take_semaphore calls
- checking for success: if (result == 0) instead of if(!result)
- checking whether "sem" was set: use assert (rather than giving the same error message as a semaphore timeout)

7e8c58a: Lua: disable powersave for simple scripts

dcce2d4: menu: fix null pointer issue in dynamic menus

973d21a: menu: fix regression in Modified menu (with API tests)

193bfc7: menu: removed obsolete menu screenshots

0f9cf39: menu: workaround for file_man
(fixme: still relying on name lookup to find submenus)

8531414: menu: store submenu parent in the menu structure; more submenu fixes

ab986c2: Makefile: with WIFI_SD=y, ping the card until it comes online (useful for router connections)

267f268: menu: allow is_menu_entry_selected to operate on submenus
(for Lua; updated api_test.lua)

bac5e30: menu: refactored submenu selection to avoid duplicate code; minor rename

159c3bc: menu: removed side effects from get_current_submenu

2cef129: menu: allow submenu selection by name
(updated api_test.lua)

c4bcf87: menu: fix parent menu issues in composite submenus

819a11d: menu: refactored to fix thread safety in menu_add

ee96fb0: menu: fix parent menu issues in most menus (todo: composite submenus)

c78d44c: menu: check whether each submenu entry actually has a parent
(fixme: most don't)

e00e5e6: menu: if the value field is very long, do not display the name
(the value is probably verbose enough to figure out what it is)

2f0a6be: Modules: moved Show console to top level

5e83d26: Memory backend: when checking available memory, allocate both Shoot ans SRM at the same time
(they may overlap)

49aa575: debug: reworked "Show GUI Events" to use the console

b3b1099: gui_common: removed unused ui_lock (everything calls gui_uilock instead)

3d9d96c: console: enable in LiveView alongside with ML overlays (experimental)

fd1ec5d: Memory backend: fix initialization

47c6d01: Menu: use submenu_height for scrolling

834631b: ettr: fix debug code

ad1009d: Merged unified into lua_fix

9809bee: menu: do not discard customization data for menus that are not yet loaded
(e.g. for modules/scripts and other dynamic menus)

e3cb967: menu: do not overwrite existing customization data when reloading
(only reload data for newly added menu entries)

6c7c55b: menu: fix usage counters for menu items with placeholders

4dce925: menu: allow simple submenus in Recent menu

c393f74: menu: allow Debug entries in Junkie mode

0b9dcd1: Modules: make sure we can really use up to 64 of them (fix commit 8ad0912)

de4f36f: file_man: show status in main menu, if busy

3301039: file_man: disable powersaving during long copy/move operations

7c4eb2a: file_man: unified FileCopy and FileMove tasks to avoid duplicate code;
report all errors to console and show a simple progress indicator

b1e14e0: file_man: show timestamp for each file; align date/time column

b049e25: menu: fix Junkie short text overflowing in some cases

dca163d: menu: attempt to balance the automatic My Menu in Junkie mode
(with many submenu entries used frequently, this menu could end up a lot more cluttered than regular menus)

53e1cc9: menu: fix submenu entries disappearing in Junkie menu
(frequently used submenu items shouldn't be moved to My Menu; they should be just copied)

b5de547: menu: better duplicate menu warning; minor rename

9f943d9: Merged unified into 100D_merge_fw101

1cfca21: fix 100D (tested, confirmed working)

3223248: fix wrong stub (thx @dfort for the note)

2029c44: manual focus: allow moving focus box

fff0aeb: display connection map (experiment)

6768410: 100D: enabled CONFIG_TSKMON

4f97f4f: 100D: fix task_dispatch_hook

858a20c: 100D: enabled CONFIG_ALLOCATE_MEMORY_POOL and classic boot process
(similar to 6D, reserved 592K at the beginning of AllocateMemory pool)

5b0b23e: Merged new-dryos-task-hooks into 100D_merge_fw101
(note: 100D will not boot until fixing memory allocation)

02965e5: 100D: enabled CONFIG_EDMAC_RAW_SLURP

fc545d1: sync FIO stub changes introduced in unified

ef01395: Merged hudson/magic-lantern/unified into 100D_merge_fw101

5afed4d: fix suggested by a1ex for

c8b7f50: use MENU button for calling zebras in playback mode.
requested and
w/o this menu button would open Canon menu and quitting playback mode anyways. If one needs to do so just press halfshutter or play button(s) to quit playback mode and afterwards the menu button.

22928a1: we indeed can switch between YUV422 addresses
also sync MOV_RES_AND_FPS_COMBINATIONS value (Digic5)

83173fc: adjust movie related consts

e902a88: Merged hudson/magic-lantern/unified into 100D_merge_fw101

744f586: remove custom symbol file handling
(leftover from fw revisioning 100D_100A/100B)

8433bca: fix curent_interrupt stub (thx @a1ex)

67cf458: add missing task related stubs

155d57f: Backout changeset 1914eafc755cad2f2ebb17a4bde35949deb5eacf

1914eaf: fix wrong stub, as suggested

bc6d41d: flexinfo refinement (switch back to COLOR_FG_NONLV)

efad6c5: adopt celsius display and apply color related adjustments

81386c6: use INFO button to disable ML during boot

25c196b: fix indentation

6694d6a: Merge unified

4a394d3: prepare for edmac_raw_slurp

08cfbd1: Merge unified

7f18e89: Merged unified into 100D_merge_fw101

60a2c84: trying to fix the version numbering for the last time ;D
must have been sleeping

48ab54d: fix faulty version numberings

0164b73: cleanup part2

0e58df5: cleanup part1

71e3947: initial ML port for FW1.0.1 -> getting rid of revision handling

d823c4c: Created new branch 100D_merge_fw101

c611472: lua.c: fix warning

fcb4bdb: Lua: only hide the console if it was opened by some auto-running script
(and block the key pressed to hide the console, if any)

56e9f9c: Lua: block keys on key.wait()
hello.lua updated to wait only for SET (and block only this key)

bd156be: Merged unified into lua_fix

372d6b7: menu: fix invalid indexing on menu choices not starting at 0
(reported by JohanJ at )

fe6b020: selftest: fix bad merge

220ecf6: Merged cache-fixes into lua_fix

88bf690: Merged unified into lua_fix

10b2c48: menu: attempt to fix file_man crash (a little hackish...)

a7241cd: file_man: disable name lookup on its submenu
(should fix speed regression in directories with many files - to be tested)

65deab8: api_test.lua: tests for image_prefix and for bracketed images

2846752: Lua: camera.wait()
(waits until the image was fully saved; required for testing dryos.image_prefix)

1e6032c: Lua: renamed dryos.prefix to dryos.image_prefix and fixed various things
- only accept strings of length 4, or empty string to reset to default
- fix operation after multiple changes

8cfce20: menu: fix buffer overflow (off by one) when hiding many menu items

54c6ef0: menu: disable name look-up in Modules and Help

e25caf2: menu: allow disabling name lookup in any menu
(e.g. to allow duplicate names, or for very large menus, or for dynamic menus not meant to be customized etc)

940c7ef: menu: removed some redundant null pointer checks
(no longer needed after enforcing valid names)

27856bb: menu: revert empty name usage in menus
(affected: module.c f071d67, file_man 6390eba, my_menu, advanced toggles)
(todo: fix duplicate menus in some other way)

acb13ec: menu.h: comments for struct menu_entry and struct menu

a0f8604: menu: make sure internal fields are not set before menu_add

82686b9: menu: require valid name for all menus (easier than fixing null pointer errors)

a8f46fa: config.c: fix read from null pointer

9991c8c: Undo e64c9a5 (shutdown lock-up)

ea6d752: Merged memcheck-fixes into lua_fix

fb21080: mem.c: option to disable heap poisoning
(useful when running in QEMU with -d memcheck - with this, overflowing reads will be caught as well)

e64c9a5: menu.c: fix a thread safety issue in menu_remove
(to reproduce: file manager crashed after navigating the menu back and forth a few times)

b4f1593: menu.c: fix incomplete initialization when creating menus
(this time the memory warning was correct)

f738018: menu.h: disabled bit fields in struct menu
(they caused false warnings in the memory checking tool)

16ceccb: Merged memcheck-fixes into lua_fix

00ef896: lens.h: fix APEX for Auto ISO (return 0)

34c6cbd: Merged unified into lua_fix

8cd7485: lens.h: fix bad merge

ad8ae4c: Lua: fix error checking in menu.get (also API test)

b63c905: Lua: unify menu.get and menu.gets (using an optional argument for menu.get)

7d5284a: Merged unified into lua_fix

4eb37a4: Lua: menu.gets (to get menu value as string)
api_test.lua updated as well

02e0675: menu: fix thread safety for menu_get_str_value_from_script

5191bba: api_test.lua: test for menu automation API (selecting existing ML menus, changing values)

fc3da30: menu: misc fixes on select_menu_by_name
(thread safety; fix conflict with initial menu selection; refuse to operate on submenus)

50f4074: Lua: split menu open/select functionality

152e7ec: Menu: reworked menu_set_str_value_from_script (for Lua menu.set with string value argument)
- consider .choices array before trying brute-force
- try every single value from the valid range when practical
- use msleep only for custom toggle logic
- wait and retry if the value doesn't change
- fix some ambiguous matches (e.g. 1 should not match 1m10s, but 10 is OK for 10cm)
- numeric match made optional
- timeout 2s

19ea3d4: Menu: range checking for menu_set_value_from_script (Lua menu.set with integer value argument)

1bac4fd: Menu: fix duplicate warning on 50D

bc10355: Screenshots: fix color palette
(was affected by our palette changes, e.g. in menu)
(the fix requires writing to Canon's LCD_Palette array, but a quick checked is performed before writing; previously, this array was considered read-only)

f7eebcf: Lua: fix typo that prevented lens.focus_pos from appearing in the documentation

313e71d: Lua: minor doc updates

c4b723d: Lua: tag all backend messages with [SCRIPT.LUA] where possible

7eae4b4: recdelay.lua: misc fixes

49607a9: Lua: disable auto-autorun (any script that should autorun must be configured manually by user)

b629043: Lua: test script for unloading behavior (unload.lua)

670aa81: Lua: tag all backend messages with [Lua]; minor fine-tunings

9b6ed8f: Lua: allow task unloading if all user tasks are stopped before the main task
(this makes api_test.lua a "simple" script, as it was before f249ba4)

fee0ea8: Fix compiling on cameras without Q button
(broken in 459da11)

89afbc9: selftest: fix false warning in half-shutter test

cdf3baf: Memory backend: allow breaking minimum_free_space limit for small blocks
(it was possible to fail the allocation for very small blocks that could not be covered by shoot_malloc)

2a969f7: Modules: yet another attempt at fixing fast scrollwheel events
(previous: b0891f9, 2cc2768)

ebe4504: Undo 2cc2768 (fast scrollwheel events no longer working)

521eedf: api_test.lua: stronger half-shutter test; fine-tuned delays

08f75d2: api_test.lua: fix movie test on manual lenses

52fd414: api_test.lua: fix bulb test on slow SD cameras

9afd356: api_test.lua: fix AF test on manual lenses

163677f: lua_key: re-enabled yielding during key.wait()
using the same workaround as task.yield()

5bfb3da: Merged dynamic-my-menu into lua_fix (solves some menu issues)

79359e1: Lua lens.autofocus(): fix for 100D (to be tested)
Updated selftest module as well.

7ac0538: lua_key: disabled yielding during key.wait()
(until a proper fix is implemented, better avoid multitasking)

634bd20: lua_task: workaround to prevent troublesome task.yield() calls
(appears to work, but cannot guarantee it's actually thread-safe)

d5b3449: api_test.lua: weaker multitasking test
(seems to work fine as long as only one task calls task.yield(); any task that interrupts should run until returns)

17a8ea8: Merged focus into lua_fix (pull request #748)
Focus backend updates and lens.focus_pos fine position counter

0188f12: lens_focus: ported 5D2 focus fix on 50D and 500D.
550D and newer models don't need it, unsure about 7D (to be tested)

55b1c8a: lvinfo: fix layout bug revealed by 56464bc and noticed here:
(note: the linked commit did not cause the bug; it was there for years)

c90f908: Menu: fix duplicate warning in the Help tab on some models

39d3fc8: Menu: updated navigation help

6365706: file_man: refactored action types with enum and case switch
(compiler now checks whether all action types are covered)

6390eba: file_man: use unnamed menu entries for speed
(named entries are now checked for duplicates => slow in folders with many files)

91872a8: Menu: some extra sanity checks during customization

cc093ed: Menu: removed duplicate definitions of menu_open_submenu

f071d67: Modules: fix duplicate menu warning

718a1c0: Menu: check for duplicate entries
(the check is repeated after each menu_add call)

7fdf55e: Menu: refactored most menu iterations with for loops

94b91f8: Menu: autodetect whether placeholders are needed or not
(removed menu_add_base; menu_add should be O(n) if no placeholders are used)

7199feb: Menu: skip placeholders in entry_find_by_name; related cleanups

2c79b4e: Menu: link each submenu entry with its parent entry
(rather than using name lookup)

df8f241: Merged lua_fix into dynamic-my-menu
(other menu fixes + module API version)

d13be56: Menu: fix selection in Modified menu (broken in 0b6fcbc)

6acce6d: lua_lens: minor doc update (return value for lens_focus)

b578684: Menu: minor display fixes in Junkie mode

0c04d37: Menu: fix some interferences between menu customization and dynamic menus

b861cff: Menu: experiment - dynamic Junkie menu
FIXME: manual Junkie customizations are overriden, unless at least one item is starred. Important?

a50ab42: force_liveview: fix operation after taking a picture

e0b77f0: Menu: fix last entry not disappearing from Modified menu

946b781: Menu: fix initial selection when it is a dynamic menu

ab12376: Menu: experiment - dynamic My Menu ("Recent"), based on usage counters
If no menu items are manually starred, a menu named Recent will be built automatically.

ad11d90: Menu: minor refactor (checking dynamic menus)

a1a4d46: Menu: usage counters (for displaying a menu with recently used entries)
Warning: existing menu customizations will be lost.

fcd2472: lua_movie: some more preconditions + API tests

f249ba4: api_test.lua: simple multitasking test (crashes, do not run on expensive cameras!)

ef27044: Lua task.create: throw error on failure

34f4587: Lua lens.focus: throw an error if preconditions (LiveView and autofocus) are not met

8bfeb2f: lens_focus: allow running right after taking a picture (experiment)

a02213b: Lua lens.focus: updated default wait and docs

7563c91: enter_play_mode: increase delay (fixes some redraw issues, e.g. in benchmarks)

bd82344: Lua: nicer behavior in Junkie menu (still not perfect)

8ad0912: Modules: increase max count to 64

2ef8fcc: fine-tuned AF test

8358912: Fix Q button handling on cameras with this button (bad includes)

3b2ee5c: Fix button handling outside menu (typo)

43c863b: lens_focus: fix very slow follow focus on 5D2 with 24/2.8 STM (todo: 50D, 500D, others?)
To reproduce: Step Wait ON, Step Delay <= 20, then use follow focus.
Just changing prop_request_change_wait into prop_request_change would give fast movements, but crashes very quickly.
Waiting for the pfAfComplete interrupt before next focus command appears to fix the crashes.

459da11: GUI: make sure all cameras use the BGMT_Q event while in ML menu, even if they don't actually have a Q button
(should fix Lua scripts using the Q button while running on top of ML menu)

d4c3011: Lua: fix incomplete commit 8191fd4

8dc4e8d: lua_lv: lvinfo items default to any info bar

d433e6b: lua_menu: reorder functions so the most basic ones appear first in doc

4e96ecf: lua_menu: drop menu customization attributes
(overriding them doesn't work well anyway)

3db7b16: Lua: more doc updates (WIP)

2f5b1ac: lens.c: some debug info for focus commands (to be removed before merging)

c9f0c8b: lens.h: declared lens_info.focus_pos on remaining cameras
(tested on 5D3 123; to be tested on EOS M, 6D...)

fdcad26: Merged lua_fix into focus

9971e65: Lua: misc doc updates (WIP)

6aba116: lua_constants: reordered to get the simpler ones first in the doc

0fb9f5a: Lua: remove pre_shoot/post_shoot from docs (not yet implemented)

f7de7e8: menu.c, select_menu_by_name: allow optional entry_name parameter; keep the current selection on error

2d36ec7: copy2m.lua: add its menu in the script submenu, rather than Prefs
(fixes duplicate menu - there were 2 menus with the same name)

8191fd4: Lua: always open script submenu on SET; show menus created by script under the script menu

0b6fcbc: menu.c: fix null pointer in mod_menu_rebuild

6404620: menu.c, entry_find_by_name: do not return duplicate entries and entries from dynamic menus (to be tested)

4708e20: test for autofocus routines

4e0a85e: Lua: camera.shoot() no longer autofocuses by default

5ebe181: Lua: removed global shoot(); use camera.shoot() instead

d1f749a: api_test.lua: minor typo

a13ca46: lens_take_picture: wait for file number to change before returning; minor cleanups

b3a7308: Lua lens.focus: delay default to 10ms when wait=false; doc updates

58e688f: force_liveview: make sure LV is fully started before returning

047f568: Lua: experimental lens.autofocus()

2b94762: Lua: fine-tuned startup messages

35aba13: Merged unified into lua_fix

e8c035d: Modules: allow including module.h in multiple source files
(fixes compilation of

f772215: Modules: removed some unused definitions

f20190b: api_test.lua: fix typo in lens.focus call, thanks garry23

bf498ec: Lua: can optionally select a given menu or submenu

5d168ad: 1100D: enabled CONFIG_EDMAC_MEMCPY

f02a19a: rbf_font: very rough support for tab characters

9f71744: editor.lua: exit file dialog if menu is no longer active

7441ca3: Lua: allow editing any script from context menu using editor.lua (Q -> Edit Script)

a623d86: Lua: basic support for script arguments (arg, ...)

4e41a09: Lua: always use first line as script name in menu (use ... if too long)

1c6bc09: Lua: display script file name on the right if the script is not running

0e3b6a1: Lua: fine-tuned user feedback when loading/running scripts

afddfd1: Lua: check string length in pixels when choosing between script name (first line) or script filename for menu display

3f12210: Merged unified into lua_fix

203fa8d: menu: fix regression about font bg color

5647189: Raw backend: small fixes related to ALLOCATE_RAW_LV_BUFFER
- thread safety
- alocate uncacheable large buffer
- compiler error on missing DEFAULT_RAW_BUFFER or RAW_LV_BUFFER_ALLOC_SIZE

97284f1: Merged raw_fixes into allocate-raw-lv-buffer

b814744: Merged unified into allocate-raw-lv-buffer

3781fb5: bfnt_draw_char: option for not erasing the background (old behavior, to fix existing code)

80ba00c: bmp_printf: erase background when using FONT_CANON (to be tested)

56464bc: bmp_printf: allow transparent text on transparent background
(note: this breaks binary compatibility with modules)

48850d5: Focus backend: fix lens getting stuck at one end (reset retry count after reporting error)

498fdbf: api_test.lua: minor fix for focus distance

373c762: Focus backend: only report focus error when the lens gets stuck (doesn't move at all after 2 retries)

c7c6aae: Lua: exposed lens_info.focus_pos as lens.focus_pos and added an API test

5bb5635: Merged lua_fix into focus

d8a2092: lens.c: record relative focus motor position in lens_info.focus_pos,

66c9dd8: lens.c: removed EOSM-specific code that appears superfluous; are focus ring triggers still working?

4e6b487: fio-ml: fix Lua const char warnings in FIO_Rename/Copy/MoveFile

aa9a26d: api_test.lua: minor cleanups

3a20351: Lua: dryos.rename (including API tests)

984c36f: Lua: ignore unknown button codes

b774e11: api_test.lua: relax half-shutter check a bit (the event is not sent right away)

b627ebf: Lua: reserve 256K for umm_malloc instead of 512K (since we no longer load all scripts at once)

2e5d9bb: Merged in lua_umm_malloc (pull request #724)
Use umm_malloc for Lua to reduce memory fragmentation

096f352: Close branch lua_umm_malloc

a68eafa: Lua: removed run_in_separate_task

ea4dd9b: Lua: menu item to show/hide the console

3aecd23: Lua: show last script error in menu (to be tested)

981090d: Lua: fix memory/semaphore leak when running the same script many times

763e015: Lua: hide "Run script" for complex scripts, since they can't be started twice

685a3b3: Lua: show errors in menu for complex scripts as well

1451793: Lua: refactored error handling in add_script

25e3d85: Lua: fix script loading loop (forgot FIO_FindClose)

ea8cfb1: scrnshot.lua: place menu item in its own script submenu

7ae6bf7: Lua: extract script name and description from comments (experiment)

ab924bd: Lua: allow any script to autorun; use a submenu for each script

9008e5f: Lua: show scripts right away after loading the autorun ones (no more delay)

cfb7523: Lua: cleanup passing script to lua_user_load_task

0fbf95c: api_test.lua: converted to simple script, so it runs right away

ffe8d0f: pong.lua: fix undeclared counter

95724a3: Lua: fix strict.lua after script unloading changes

dcebad9: Lua: fix some scripts randomly showing "error" state (refactored malloc/memset with calloc in lua.c)

56bd66d: mem.h: declared calloc

bd3cb5a: posix.c: fix calloc (error checking)

7681f46: Lua: moved the "extra" scripts back (since the scripts are no longer loaded by default)

514d5b4: Modules: workaround for issue #2551 (UNPRESS_UDLR conflicting with UNPRESS_DP on 5D3)

fc8acc0: lua scripting: update docs

3bbeede: lua scripting: some cleanups to the script menu display and help

aa8ec45: lua scripting: script unloading and autorun options
user can disable autorun
scripts don't autorun until user runs them the first time
"simple" scripts (no menus or events) don't autorun, only run on demand and unload when finished
script menu now lists all available scripts, "simple" scripts can be run from here, "complex" scripts can have autorun disabled/enabled from here
TODO: update docs
TODO: the 'extra' directory is probably no longer needed

f7b08a2: lua scripting: fix interval.running return type (should be boolean)

eaf83eb: Lua: make sure umm_malloc is never used for fio calls

8fa20bc: Lua: fix format_memory_size in ml-lua-shim.c

24d49e5: Lua: also print the amount of memory reallocated with core routines

5a127a1: Lua: use umm_malloc, with a 512KB heap preallocated

f6e708a: Imported umm_malloc 8b9586c from

28372a8: api_test.lua: tests for half-shutter events

8dc99bb: module_send_keypress: special handling for shutter button events
(should fix and similar calls in Lua)

af77cad: SW1/SW2: wait for confirmation from Canon code (to be tested)

6b65461: api_test.lua: tests for camera.shoot, burst and bulb

ab649ff: Lua: fix camera.bulb(seconds)

836f324: Lua: added camera.burst(num_pictures)

269fd5f: Lua: camera.shoot() now calls take_a_pic (warning: syntax changed)

f3228c8: shoot.h: exposed take_a_pic and take_fast_pictures

8cbb6ad: menu: experiment - long-press SET to open submenus (enabled on EOS M, where SET/Q share the same button)

ea44aac: menu: fine-tuned responsiveness on keys checked for long press (joystick center, down/erase on EOS M)


a1cac48: memory backend: reduce memcheck area (should reduce overhead a bit)

6957c1c: memory backend: ignore null pointers passed to free (Lua does that)

d885a1b: realloc: check for null pointers

e9580ab: pong.lua: fix menu not always erased (race condition)

3316f91: exmem: when autodetecting available memory, print all srm/shoot memory blocks to console


1a2a91e: Update CONFIG_EDMAC_RAW_SLURP documentation with porting tips

21fae78: EXPERIMENTAL: 1100D raw LV support using CONFIG_EDMAC_RAW_SLURP and ML-allocated buffer

26d12c6: Fix typo in macro names

6348f69: raw.c : Allow the backend to allocate a buffer for RAW lv if CONFIG_EDMAC_RAW_SLURP and CONFIG_BROKEN_RAW_LV_BUFFER are defined
Also try to detect possible misconfigurations at compile-time



  1. Make sure you are running Canon firmware 1.1.2.
  2. Format the card from the camera.
  3. Copy ML files on the card and run Firmware Update.
  4. After installation, copy your ROM files (ML/LOGS on the card) to a safe place.


From camera:
  1. Run Firmware Update from your ML card.
  2. Follow the on-screen instructions.
From one card:
  • Canon menu: Format card, remove Magic Lantern.
  • Never delete the Magic Lantern files from the card! Format the card instead.
Detailed instructions on the wiki.

Known issues

Camera doesn't boot?

  1. Remove battery, remove card.
  2. Put battery back, close card and battery covers.
  3. Start the camera without card.
    • » Did it work? Format the card, reinstall Magic Lantern.
    • » Still not working? Double-check battery and card doors, run the diagnostic tools and get in touch with us.

Troubleshooting tips

  • If your camera locks up, remove the battery and reboot.
  • Make sure you have a backup card without Magic Lantern on it (just in case).
  • To restore ML defaults: Prefs → Config files.
  • To see what settings you have changed from ML defaults: Modified (Δ) menu.
  • To disable Magic Lantern temporarily: press and hold SET at startup.

Older Builds

Magic Lantern is not approved nor endorsed by Canon in any way, and using it will probably void your warranty.
We are not responsible for any damages to your camera.

Copyright (C) 2009-2017 Magic Lantern Development Team

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.