Canon 1200D

Started by akkotyni, July 12, 2014, 02:48:26 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

m1k6

Thanks to all the people to make this work!

I did some testing and what I discovered was this:
When in Movie-Mode the ML menu won't show up if movie exposure is set to manual. In automatic it works.

I made some of the Self tests:
The Stubs API test gave me two fails:
[Pass] f = FIO_CreateFile("test.dat") => 0x3
[Pass] FIO_WriteFile(f, (void*)0xFF000000, 0x10000) => 0x10000
[Pass] FIO_WriteFile(f, (void*)0xFF000000, 0x10000) => 0x10000
       FIO_CloseFile(f)
[Pass] FIO_GetFileSize("test.dat", &size) => 0x0
[Pass] size => 0x20000
[Pass] p = (void*)_alloc_dma_memory(0x20000) => 0x4099737c
[Pass] f = FIO_OpenFile("test.dat", O_RDONLY | O_SYNC) => 0x3
[Pass] FIO_ReadFile(f, p, 0x20000) => 0x20000
       FIO_CloseFile(f)
       _free_dma_memory(p)
[Pass] count => 0x3a98
[Pass] buf = fio_malloc(0x1000000) => 0x422040a4
[Pass] FIO_GetFileSize_direct("test.dat") => 0x82000000
[Pass] f = FIO_OpenFile("test.dat", O_RDWR | O_SYNC) => 0x3
[Pass] FIO_SeekSkipFile(f, 0, SEEK_END) => 0x82000000
[Pass] FIO_WriteFile(f, buf, 0x10) => 0x10
[Pass] FIO_SeekSkipFile(f, -0x20, SEEK_END) => 0x81fffff0
[Pass] FIO_WriteFile(f, buf, 0x30) => 0x30
[Pass] FIO_SeekSkipFile(f, 0x20, SEEK_SET) => 0x20
[Pass] FIO_SeekSkipFile(f, 0x30, SEEK_CUR) => 0x50
[Pass] FIO_SeekSkipFile(f, -0x20, SEEK_CUR) => 0x30
[Pass] FIO_GetFileSize_direct("test.dat") => 0x82000020
[Pass] FIO_RemoveFile("test.dat") => 0x0
[Pass] SetTimerAfter(0, timer_cbr, overrun_cbr, 0) => 0x15
[Pass] timer_func => 0x2
[Pass] SetTimerAfter(1000, timer_cbr, overrun_cbr, 0) => 0x5c5a
       msleep(900)
[Pass] timer_func => 0x0
       msleep(200)
[Pass] timer_func => 0x1
[Pass] ABS((timer_time/1000 - t0) - 1000) => 0x4
[Pass] ABS((timer_arg - ta0) - 1000) => 0xa
[Pass] timer = SetTimerAfter(1000, timer_cbr, overrun_cbr, 0) => 0x5cf0
       msleep(400)
       CancelTimer(timer)
[Pass] timer_func => 0x0
       msleep(1500)
[Pass] timer_func => 0x0
[Pass] SetHPTimerAfterNow(0, timer_cbr, overrun_cbr, 0) => 0x15
[Pass] timer_func => 0x2
[Pass] SetHPTimerAfterNow(100000, timer_cbr, overrun_cbr, 0) => 0x2a0
       msleep(90)
[Pass] timer_func => 0x0
       msleep(20)
[Pass] timer_func => 0x1
[Pass] ABS(DeltaT(timer_time, t0) - 100000) => 0x163
[Pass] ABS(DeltaT(timer_arg, ta0) - 100000) => 0x119
[Pass] ABS((get_us_clock_value() - t0) - 110000) => 0xa0
[Pass] SetHPTimerAfterNow(90000, next_tick_cbr, overrun_cbr, 0) => 0x2a2
       msleep(80)
[Pass] timer_func => 0x0
       msleep(20)
[Pass] timer_func => 0x3
       msleep(80)
[Pass] timer_func => 0x3
       msleep(20)
[Pass] timer_func => 0x1
[Pass] ABS(DeltaT(timer_time, t0) - 300000) => 0x14d
[Pass] ABS(DeltaT(timer_arg, ta0) - 300000) => 0x108
[Pass] ABS((get_us_clock_value() - t0) - 310000) => 0xa1
[Pass] strlen("abc") => 0x3
[Pass] strlen("qwertyuiop") => 0xa
[Pass] strlen("") => 0x0
[Pass] strcpy(msg, "hi there") => 0x16bc90
[Pass] msg => 'hi there'
[Pass] snprintf(a, sizeof(a), "foo") => 0x3
[Pass] snprintf(b, sizeof(b), "foo") => 0x3
[Pass] strcmp(a, b) => 0x0
[Pass] snprintf(a, sizeof(a), "bar") => 0x3
[Pass] snprintf(b, sizeof(b), "baz") => 0x3
[Pass] strcmp(a, b) => 0xfffffff8
[Pass] snprintf(a, sizeof(a), "Display") => 0x7
[Pass] snprintf(b, sizeof(b), "Defishing") => 0x9
[Pass] strcmp(a, b) => 0x4
[Pass] snprintf(buf, 3, "%d", 1234) => 0x2
[Pass] buf => '12'
[Pass] memcpy(foo, bar, 6) => 0x16bc20
[Pass] foo => 'asdfghuiop'
[Pass] memset(bar, '*', 5) => 0x16bc00
[Pass] bar => '*****hjkl;'
       bzero32(bar + 5, 5)
[Pass] bar => '****'
       t0 = *(uint32_t*)0xC0242014 => 0xcf5d9
       msleep(250)
       t1 = *(uint32_t*)0xC0242014 => 0xba92
[Pass] ABS(MOD(t1-t0, 1048576)/1000 - 250) => 0x4
       LoadCalendarFromRTC( &now )
       s0 = now.tm_sec => 0x2c
       Date/time: 2016/07/24 23:49:44
       msleep(1500)
       LoadCalendarFromRTC( &now )
       s1 = now.tm_sec => 0x2d
[Pass] MOD(s1-s0, 60) => 0x1
[Pass] MOD(s1-s0, 60) => 0x1
       m0 = MALLOC_FREE_MEMORY => 0x3e168
[Pass] p = (void*)_malloc(50*1024) => 0xc6db8
[Pass] CACHEABLE(p) => 0xc6db8
       m1 = MALLOC_FREE_MEMORY => 0x31958
       _free(p)
       m2 = MALLOC_FREE_MEMORY => 0x3e168
[Pass] ABS((m0-m1) - 50*1024) => 0x10
[Pass] ABS(m0-m2) => 0x0
       m0 = GetFreeMemForAllocateMemory() => 0x144458
[Pass] p = (void*)_AllocateMemory(256*1024) => 0xba5b38
[Pass] CACHEABLE(p) => 0xba5b38
       m1 = GetFreeMemForAllocateMemory() => 0x104448
       _FreeMemory(p)
       m2 = GetFreeMemForAllocateMemory() => 0x144458
[Pass] ABS((m0-m1) - 256*1024) => 0x10
[Pass] ABS(m0-m2) => 0x0
       m01 = MALLOC_FREE_MEMORY => 0x3e168
       m02 = GetFreeMemForAllocateMemory() => 0x144458
[Pass] p = (void*)_alloc_dma_memory(256*1024) => 0x40ba5b78
[Pass] UNCACHEABLE(p) => 0x40ba5b78
[Pass] CACHEABLE(p) => 0xba5b78
[Pass] UNCACHEABLE(CACHEABLE(p)) => 0x40ba5b78
       _free_dma_memory(p)
[Pass] p = (void*)_shoot_malloc(24*1024*1024) => 0x42204084
[Pass] UNCACHEABLE(p) => 0x42204084
       _shoot_free(p)
       m11 = MALLOC_FREE_MEMORY => 0x3e168
       m12 = GetFreeMemForAllocateMemory() => 0x144458
[Pass] ABS(m01-m11) => 0x0
[Pass] ABS(m02-m12) => 0x0
[Pass] suite = shoot_malloc_suite_contig(24*1024*1024) => 0xc5608
[Pass] suite->signature => 'MemSuite'
[Pass] suite->num_chunks => 0x1
[Pass] suite->size => 0x1800000
[Pass] chunk = GetFirstChunkFromSuite(suite) => 0xc5630
[Pass] chunk->signature => 'MemChunk'
[Pass] chunk->size => 0x1800000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x42204080
[Pass] UNCACHEABLE(p) => 0x42204080
       shoot_free_suite(suite); suite = 0; chunk = 0;
[Pass] suite = shoot_malloc_suite_contig(0) => 0xc5608
[Pass] suite->signature => 'MemSuite'
[Pass] suite->num_chunks => 0x1
[Pass] suite->size => 0x1df8000
[Pass] chunk = GetFirstChunkFromSuite(suite) => 0xc5630
[Pass] chunk->signature => 'MemChunk'
[Pass] chunk->size => 0x1df8000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x42204080
[Pass] UNCACHEABLE(p) => 0x42204080
       shoot_free_suite(suite); suite = 0; chunk = 0;
[Pass] suite = shoot_malloc_suite(64*1024*1024) => 0xc5608
[Pass] suite->signature => 'MemSuite'
[Pass] suite->num_chunks => 0x4
[Pass] suite->size => 0x4000000
[Pass] chunk = GetFirstChunkFromSuite(suite) => 0xc5630
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x1df8000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x42204080
[Pass] UNCACHEABLE(p) => 0x42204080
       chunk = GetNextMemoryChunk(suite, chunk) => 0xc5690
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x29fc000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x413f8070
[Pass] UNCACHEABLE(p) => 0x413f8070
       chunk = GetNextMemoryChunk(suite, chunk) => 0xc56c8
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x2a90000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x49f68100
[Pass] UNCACHEABLE(p) => 0x49f68100
       chunk = GetNextMemoryChunk(suite, chunk) => 0xc5700
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x4000000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x48000070
[Pass] UNCACHEABLE(p) => 0x48000070
       chunk = GetNextMemoryChunk(suite, chunk) => 0x0
[Pass] total => 0x4000000
       shoot_free_suite(suite); suite = 0; chunk = 0;
[Pass] suite = shoot_malloc_suite(0) => 0xc5608
[Pass] suite->signature => 'MemSuite'
[Pass] suite->num_chunks => 0x4
[Pass] suite->size => 0x4700000
[Pass] chunk = GetFirstChunkFromSuite(suite) => 0xc5630
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x1df8000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x42204080
[Pass] UNCACHEABLE(p) => 0x42204080
       chunk = GetNextMemoryChunk(suite, chunk) => 0xc5690
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x29fc000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x413f8070
[Pass] UNCACHEABLE(p) => 0x413f8070
       chunk = GetNextMemoryChunk(suite, chunk) => 0xc56c8
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x2a90000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x49f68100
[Pass] UNCACHEABLE(p) => 0x49f68100
       chunk = GetNextMemoryChunk(suite, chunk) => 0xc5700
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x4700000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x48000070
[Pass] UNCACHEABLE(p) => 0x48000070
       chunk = GetNextMemoryChunk(suite, chunk) => 0x0
[Pass] total => 0x4700000
       shoot_free_suite(suite); suite = 0; chunk = 0;
       EngDrvOut(LCD_Palette[0], 0x1234)
[Pass] shamem_read(LCD_Palette[0]) => 0x1234
       call("TurnOnDisplay")
[Pass] DISPLAY_IS_ON => 0x1
       call("TurnOffDisplay")
[Pass] DISPLAY_IS_ON => 0x0
       call("TurnOnDisplay")
[Pass] DISPLAY_IS_ON => 0x1
       SetGUIRequestMode(1); msleep(1000);
[Pass] CURRENT_DIALOG_MAYBE => 0x1
       SetGUIRequestMode(2); msleep(1000);
[Pass] CURRENT_DIALOG_MAYBE => 0x2
       SetGUIRequestMode(0); msleep(1000);
[Pass] CURRENT_DIALOG_MAYBE => 0x0
[Pass] display_idle() => 0x1
       GUI_Control(BGMT_PLAY, 0, 0, 0); msleep(1000);
[Pass] PLAY_MODE => 0x1
[Pass] MENU_MODE => 0x0
       GUI_Control(BGMT_MENU, 0, 0, 0); msleep(1000);
[Pass] MENU_MODE => 0x1
[Pass] PLAY_MODE => 0x0
[FAIL] MEM(dialog->type) => 0x6e4944
       GUI_Control(BGMT_MENU, 0, 0, 0); msleep(500);
[Pass] MENU_MODE => 0x0
[Pass] PLAY_MODE => 0x0
       task_create("test", 0x1c, 0x1000, test_task, 0) => 0x78200c0
[Pass] test_task_created => 0x1
[Pass] get_task_name_from_id(get_current_task()) => 'run_test'
[Pass] task_max => 0x68
[Pass] task_max => 0x68
[Pass] mq = mq ? mq : (void*)msg_queue_create("test", 5) => 0x7840096
[Pass] msg_queue_post(mq, 0x1234567) => 0x0
[Pass] msg_queue_receive(mq, (struct event **) &m, 500) => 0x0
[Pass] m => 0x1234567
[Pass] msg_queue_receive(mq, (struct event **) &m, 500) => 0x9
[Pass] sem = sem ? sem : create_named_semaphore("test", 1) => 0x786031c
[Pass] take_semaphore(sem, 500) => 0x0
[Pass] take_semaphore(sem, 500) => 0x9
[Pass] give_semaphore(sem) => 0x0
[Pass] take_semaphore(sem, 500) => 0x0
[Pass] give_semaphore(sem) => 0x0
[Pass] rlock = rlock ? rlock : CreateRecursiveLock(0) => 0x788008e
[Pass] AcquireRecursiveLock(rlock, 500) => 0x0
[Pass] AcquireRecursiveLock(rlock, 500) => 0x0
[Pass] ReleaseRecursiveLock(rlock) => 0x0
[Pass] ReleaseRecursiveLock(rlock) => 0x0
[Pass] ReleaseRecursiveLock(rlock) => 0xf
       SW1(1,100)
[FAIL] HALFSHUTTER_PRESSED => 0x0
       SW1(0,100)
[Pass] HALFSHUTTER_PRESSED => 0x0


The "Quick test" worked without an error or crash.

I also executed the SRM memory test. When it said that I should take pictures I did so. After some pictures I got a ERR 70.
VRAM1.PPM
Crash-Log:
ASSERT: FALSE
at ASIF\ASIF.c:486, task ASIF
lv:0 mode:3


Magic Lantern version : Nightly.2016Jul24.1200D101
Mercurial changeset   : d0ffefa7d840+ (1200D) tip
Built on 2016-07-24 10:15:12 UTC by mathew@mathew-VirtualBox-15.
Free Memory  : 247K + 1274K


Update:
I made some more self tests.
When running the "random tests" the camera will crash after some time. Sometimes ML detects the error.
It is always the same error as above (ASIF.c:486).

I don't know if this is a bug/error or not: When I executed the EDMAC screen test and after some time pressed a button, for example ISO or WB the whole camera crashed. Turn OFF and ON did not work. I needed to take the battery out.

Other tests (Menu backend test, Redraw test, Rectangle test, Small-block malloc, Memory leak) worked without problems.

Sergio de la Torre

Overlay Menu:

Works:

  • Zebras (only highlights)
  • Focus Peak
  • Cropmarks

Doesn't work:

  • Zebras - lowligth
    (shows nothing?)
  • Magic Zoom
  • Ghost Image
    (Half frame with snow, the other half black. Sometimes full frame with snow)
  • Spotmeter, Histogram and Waveform
    (remain always static, it's like they are reading a ghost image in memory. gulwantgill screenshots can confirm that)
  • False color
    (Coloured snow pattern, sometimes 4 times the photo in a strip)








PD: There is another graphic (lux over time?) that seems to work ok
5Dc - 1200D - 20D - 350D InfraRed

Sergio de la Torre

Possible scenarios after screen timeout:

  • 1. Sometimes all goes well
  • 2a. Sometimes you cant wake up the camera, excepting taking a photo. All the other buttons doesn't wake up screen, but led blinks
  • 2b. Sometimes taking a photo leads to Err
  • 3. Sometimes no button work, only half press shutter gives EV in the viewfinder
  • 4. Sometimes the camera is totally blocked

It's required to take out the battery after block
5Dc - 1200D - 20D - 350D InfraRed

a1ex

@early testers: please do not enable Magic Zoom at this time. This feature writes to the LiveView image buffer, which is not correct, so it might overwrite something important in Canon code/data areas. Since we don't have a MMU, and the settings are saved to the flash ROM at shutdown, there is a small chance for this to cause permanent damage to the camera.

I've updated the source code to disable the features that I consider risky after current reports.

mk11174

I will update the build I have in thread. Thanks Alex for catching this.
500D/T1i  550D/T2i  600D/T3i  700D/T5i

Sergio de la Torre

Video doesn't record when (faulty) histogram, vectorscope and/or spotmeter are on.

Vu Meter only works in REC mode (doesn't in Stand by)

If I disable these tools the VU Meter goes to the bottom, rec is ok. No red circle displayed.



5Dc - 1200D - 20D - 350D InfraRed

mk11174

I dont get why it is displaying 2 audio meters here, #define CONFIG_MONO_MIC is set in internals.h????
500D/T1i  550D/T2i  600D/T3i  700D/T5i

m1k6

Interestingly it shows:
"L EXT" and
"R EXT"
Maybe EXT means external mic? The 1200D can only record via the internal mic.

Sergio de la Torre

Quote from: m1k6 on July 25, 2016, 04:50:06 PM
Maybe EXT means external mic? The 1200D can only record via the internal mic.
Maybe, but the VU meter works fine, so internal mic is measured
5Dc - 1200D - 20D - 350D InfraRed

mk11174

should only show 1 meter though as far as i know for mono.
500D/T1i  550D/T2i  600D/T3i  700D/T5i

m1k6

The newest nightly contains the modules raw_rec.mo and silent.mo. But none of them is working.
Did they sneak in?

Also the help files can not be found.

Sergio de la Torre

Quote from: mk11174 on July 25, 2016, 05:30:59 PM
should only show 1 meter though as far as i know for mono.

Audio is duplicated in 2 channels in the final file. Could be possible to free 0,7mbps of bitrate?
5Dc - 1200D - 20D - 350D InfraRed

mk11174

yeah, just ignore them, they were compiled, so they snuck in the zip, raw is not enabled yet
so wont work.

I updated ZIP
500D/T1i  550D/T2i  600D/T3i  700D/T5i

m1k6

What are the next steps to be done and what information do you need?
As I read before there are some features disabled.
I made some tests with selftest.mo. See some posts back if you want to.

As always a big thanks for helping!

Sergio de la Torre

Stubs test. 2 or 6 FAILS (here 6)

[Pass] f = FIO_CreateFile("test.dat") => 0x3
[Pass] FIO_WriteFile(f, (void*)0xFF000000, 0x10000) => 0x10000
[Pass] FIO_WriteFile(f, (void*)0xFF000000, 0x10000) => 0x10000
       FIO_CloseFile(f)
[Pass] FIO_GetFileSize("test.dat", &size) => 0x0
[Pass] size => 0x20000
[Pass] p = (void*)_alloc_dma_memory(0x20000) => 0x40997148
[Pass] f = FIO_OpenFile("test.dat", O_RDONLY | O_SYNC) => 0x3
[Pass] FIO_ReadFile(f, p, 0x20000) => 0x20000
       FIO_CloseFile(f)
       _free_dma_memory(p)
[Pass] count => 0x3a98
[Pass] buf = fio_malloc(0x1000000) => 0x422040a4
[Pass] FIO_GetFileSize_direct("test.dat") => 0x82000000
[Pass] f = FIO_OpenFile("test.dat", O_RDWR | O_SYNC) => 0x3
[Pass] FIO_SeekSkipFile(f, 0, SEEK_END) => 0x82000000
[Pass] FIO_WriteFile(f, buf, 0x10) => 0x10
[Pass] FIO_SeekSkipFile(f, -0x20, SEEK_END) => 0x81fffff0
[Pass] FIO_WriteFile(f, buf, 0x30) => 0x30
[Pass] FIO_SeekSkipFile(f, 0x20, SEEK_SET) => 0x20
[Pass] FIO_SeekSkipFile(f, 0x30, SEEK_CUR) => 0x50
[Pass] FIO_SeekSkipFile(f, -0x20, SEEK_CUR) => 0x30
[Pass] FIO_GetFileSize_direct("test.dat") => 0x82000020
[Pass] FIO_RemoveFile("test.dat") => 0x0
[Pass] SetTimerAfter(0, timer_cbr, overrun_cbr, 0) => 0x15
[Pass] timer_func => 0x2
[Pass] SetTimerAfter(1000, timer_cbr, overrun_cbr, 0) => 0x2bd2
       msleep(900)
[Pass] timer_func => 0x0
       msleep(200)
[Pass] timer_func => 0x1
[Pass] ABS((timer_time/1000 - t0) - 1000) => 0x7
[Pass] ABS((timer_arg - ta0) - 1000) => 0xa
[Pass] timer = SetTimerAfter(1000, timer_cbr, overrun_cbr, 0) => 0x2bf8
       msleep(400)
       CancelTimer(timer)
[Pass] timer_func => 0x0
       msleep(1500)
[Pass] timer_func => 0x0
[Pass] SetHPTimerAfterNow(0, timer_cbr, overrun_cbr, 0) => 0x15
[Pass] timer_func => 0x2
[Pass] SetHPTimerAfterNow(100000, timer_cbr, overrun_cbr, 0) => 0x258
       msleep(90)
[Pass] timer_func => 0x0
       msleep(20)
[Pass] timer_func => 0x1
[Pass] ABS(DeltaT(timer_time, t0) - 100000) => 0x158
[Pass] ABS(DeltaT(timer_arg, ta0) - 100000) => 0x113
[FAIL] ABS((get_us_clock_value() - t0) - 110000) => 0x3767
[Pass] SetHPTimerAfterNow(90000, next_tick_cbr, overrun_cbr, 0) => 0x25a
       msleep(80)
[Pass] timer_func => 0x0
       msleep(20)
[Pass] timer_func => 0x3
       msleep(80)
[Pass] timer_func => 0x3
       msleep(20)
[Pass] timer_func => 0x1
[FAIL] ABS(DeltaT(timer_time, t0) - 300000) => 0x3847
[FAIL] ABS(DeltaT(timer_arg, ta0) - 300000) => 0x3803
[FAIL] ABS((get_us_clock_value() - t0) - 310000) => 0x2925
[Pass] strlen("abc") => 0x3
[Pass] strlen("qwertyuiop") => 0xa
[Pass] strlen("") => 0x0
[Pass] strcpy(msg, "hi there") => 0x16bc90
[Pass] msg => 'hi there'
[Pass] snprintf(a, sizeof(a), "foo") => 0x3
[Pass] snprintf(b, sizeof(b), "foo") => 0x3
[Pass] strcmp(a, b) => 0x0
[Pass] snprintf(a, sizeof(a), "bar") => 0x3
[Pass] snprintf(b, sizeof(b), "baz") => 0x3
[Pass] strcmp(a, b) => 0xfffffff8
[Pass] snprintf(a, sizeof(a), "Display") => 0x7
[Pass] snprintf(b, sizeof(b), "Defishing") => 0x9
[Pass] strcmp(a, b) => 0x4
[Pass] snprintf(buf, 3, "%d", 1234) => 0x2
[Pass] buf => '12'
[Pass] memcpy(foo, bar, 6) => 0x16bc20
[Pass] foo => 'asdfghuiop'
[Pass] memset(bar, '*', 5) => 0x16bc00
[Pass] bar => '*****hjkl;'
       bzero32(bar + 5, 5)
[Pass] bar => '****'
       t0 = *(uint32_t*)0xC0242014 => 0x7b4ab
       msleep(250)
       t1 = *(uint32_t*)0xC0242014 => 0xb78a9
[Pass] ABS(MOD(t1-t0, 1048576)/1000 - 250) => 0x4
       LoadCalendarFromRTC( &now )
       s0 = now.tm_sec => 0x37
       Date/time: 2016/07/25 22:39:55
       msleep(1500)
       LoadCalendarFromRTC( &now )
       s1 = now.tm_sec => 0x38
[Pass] MOD(s1-s0, 60) => 0x1
[Pass] MOD(s1-s0, 60) => 0x1
       m0 = MALLOC_FREE_MEMORY => 0x3df10
[Pass] p = (void*)_malloc(50*1024) => 0xc6e08
[Pass] CACHEABLE(p) => 0xc6e08
       m1 = MALLOC_FREE_MEMORY => 0x31700
       _free(p)
       m2 = MALLOC_FREE_MEMORY => 0x3df10
[Pass] ABS((m0-m1) - 50*1024) => 0x10
[Pass] ABS(m0-m2) => 0x0
       m0 = GetFreeMemForAllocateMemory() => 0x1443c4
[Pass] p = (void*)_AllocateMemory(256*1024) => 0xba5864
[Pass] CACHEABLE(p) => 0xba5864
       m1 = GetFreeMemForAllocateMemory() => 0x1043b4
       _FreeMemory(p)
       m2 = GetFreeMemForAllocateMemory() => 0x1443c4
[Pass] ABS((m0-m1) - 256*1024) => 0x10
[Pass] ABS(m0-m2) => 0x0
       m01 = MALLOC_FREE_MEMORY => 0x3df10
       m02 = GetFreeMemForAllocateMemory() => 0x1443c4
[Pass] p = (void*)_alloc_dma_memory(256*1024) => 0x40ba58a4
[Pass] UNCACHEABLE(p) => 0x40ba58a4
[Pass] CACHEABLE(p) => 0xba58a4
[Pass] UNCACHEABLE(CACHEABLE(p)) => 0x40ba58a4
       _free_dma_memory(p)
[Pass] p = (void*)_shoot_malloc(24*1024*1024) => 0x4229c0b4
[Pass] UNCACHEABLE(p) => 0x4229c0b4
       _shoot_free(p)
       m11 = MALLOC_FREE_MEMORY => 0x3df10
       m12 = GetFreeMemForAllocateMemory() => 0x1443c4
[Pass] ABS(m01-m11) => 0x0
[Pass] ABS(m02-m12) => 0x0
[Pass] suite = shoot_malloc_suite_contig(24*1024*1024) => 0xc5860
[Pass] suite->signature => 'MemSuite'
[Pass] suite->num_chunks => 0x1
[Pass] suite->size => 0x1800000
[Pass] chunk = GetFirstChunkFromSuite(suite) => 0xc5888
[Pass] chunk->signature => 'MemChunk'
[Pass] chunk->size => 0x1800000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x4229c0b0
[Pass] UNCACHEABLE(p) => 0x4229c0b0
       shoot_free_suite(suite); suite = 0; chunk = 0;
[Pass] suite = shoot_malloc_suite_contig(0) => 0xc5860
[Pass] suite->signature => 'MemSuite'
[Pass] suite->num_chunks => 0x1
[Pass] suite->size => 0x1d60000
[Pass] chunk = GetFirstChunkFromSuite(suite) => 0xc5888
[Pass] chunk->signature => 'MemChunk'
[Pass] chunk->size => 0x1d60000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x4229c0b0
[Pass] UNCACHEABLE(p) => 0x4229c0b0
       shoot_free_suite(suite); suite = 0; chunk = 0;
[Pass] suite = shoot_malloc_suite(64*1024*1024) => 0xc5860
[Pass] suite->signature => 'MemSuite'
[Pass] suite->num_chunks => 0x4
[Pass] suite->size => 0x4000000
[Pass] chunk = GetFirstChunkFromSuite(suite) => 0xc5888
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x1d60000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x4229c0b0
[Pass] UNCACHEABLE(p) => 0x4229c0b0
       chunk = GetNextMemoryChunk(suite, chunk) => 0xc58e8
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x2964000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x413f8070
[Pass] UNCACHEABLE(p) => 0x413f8070
       chunk = GetNextMemoryChunk(suite, chunk) => 0xc5920
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x29f8000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x4bf68100
[Pass] UNCACHEABLE(p) => 0x4bf68100
       chunk = GetNextMemoryChunk(suite, chunk) => 0xc5958
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x4000000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x4a000070
[Pass] UNCACHEABLE(p) => 0x4a000070
       chunk = GetNextMemoryChunk(suite, chunk) => 0x0
[Pass] total => 0x4000000
       shoot_free_suite(suite); suite = 0; chunk = 0;
[Pass] suite = shoot_malloc_suite(0) => 0xc5860
[Pass] suite->signature => 'MemSuite'
[Pass] suite->num_chunks => 0x4
[Pass] suite->size => 0x4700000
[Pass] chunk = GetFirstChunkFromSuite(suite) => 0xc5888
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x1d60000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x4229c0b0
[Pass] UNCACHEABLE(p) => 0x4229c0b0
       chunk = GetNextMemoryChunk(suite, chunk) => 0xc58e8
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x2964000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x413f8070
[Pass] UNCACHEABLE(p) => 0x413f8070
       chunk = GetNextMemoryChunk(suite, chunk) => 0xc5920
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x29f8000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x4bf68100
[Pass] UNCACHEABLE(p) => 0x4bf68100
       chunk = GetNextMemoryChunk(suite, chunk) => 0xc5958
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x4700000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x4a000070
[Pass] UNCACHEABLE(p) => 0x4a000070
       chunk = GetNextMemoryChunk(suite, chunk) => 0x0
[Pass] total => 0x4700000
       shoot_free_suite(suite); suite = 0; chunk = 0;
       EngDrvOut(LCD_Palette[0], 0x1234)
[Pass] shamem_read(LCD_Palette[0]) => 0x1234
       call("TurnOnDisplay")
[Pass] DISPLAY_IS_ON => 0x1
       call("TurnOffDisplay")
[Pass] DISPLAY_IS_ON => 0x0
       call("TurnOnDisplay")
[Pass] DISPLAY_IS_ON => 0x1
       SetGUIRequestMode(1); msleep(1000);
[Pass] CURRENT_DIALOG_MAYBE => 0x1
       SetGUIRequestMode(2); msleep(1000);
[Pass] CURRENT_DIALOG_MAYBE => 0x2
       SetGUIRequestMode(0); msleep(1000);
[Pass] CURRENT_DIALOG_MAYBE => 0x0
[Pass] display_idle() => 0x1
       GUI_Control(BGMT_PLAY, 0, 0, 0); msleep(1000);
[Pass] PLAY_MODE => 0x1
[Pass] MENU_MODE => 0x0
       GUI_Control(BGMT_MENU, 0, 0, 0); msleep(1000);
[Pass] MENU_MODE => 0x1
[Pass] PLAY_MODE => 0x0
[FAIL] MEM(dialog->type) => 0x6e4944
       GUI_Control(BGMT_MENU, 0, 0, 0); msleep(500);
[Pass] MENU_MODE => 0x0
[Pass] PLAY_MODE => 0x0
       task_create("test", 0x1c, 0x1000, test_task, 0) => 0x70200c0
[Pass] test_task_created => 0x1
[Pass] get_task_name_from_id(get_current_task()) => 'run_test'
[Pass] task_max => 0x68
[Pass] task_max => 0x68
[Pass] mq = mq ? mq : (void*)msg_queue_create("test", 5) => 0x7040096
[Pass] msg_queue_post(mq, 0x1234567) => 0x0
[Pass] msg_queue_receive(mq, (struct event **) &m, 500) => 0x0
[Pass] m => 0x1234567
[Pass] msg_queue_receive(mq, (struct event **) &m, 500) => 0x9
[Pass] sem = sem ? sem : create_named_semaphore("test", 1) => 0x706031e
[Pass] take_semaphore(sem, 500) => 0x0
[Pass] take_semaphore(sem, 500) => 0x9
[Pass] give_semaphore(sem) => 0x0
[Pass] take_semaphore(sem, 500) => 0x0
[Pass] give_semaphore(sem) => 0x0
[Pass] rlock = rlock ? rlock : CreateRecursiveLock(0) => 0x708005a
[Pass] AcquireRecursiveLock(rlock, 500) => 0x0
[Pass] AcquireRecursiveLock(rlock, 500) => 0x0
[Pass] ReleaseRecursiveLock(rlock) => 0x0
[Pass] ReleaseRecursiveLock(rlock) => 0x0
[Pass] ReleaseRecursiveLock(rlock) => 0xf
       SW1(1,100)
[FAIL] HALFSHUTTER_PRESSED => 0x0
       SW1(0,100)
[Pass] HALFSHUTTER_PRESSED => 0x0


At the end crashes

ASSERT: FALSE
at ASIF\ASIF.c:486, task ASIF
lv:0 mode:3


Magic Lantern version : Nightly.2016Jul25.1200D101
Mercurial changeset   : a1fa773fa8d7+ (1200D)
Built on 2016-07-25 13:19:30 UTC by mathew@mathew-VirtualBox-15.
Free Memory  : 238K + 1296K

5Dc - 1200D - 20D - 350D InfraRed

a1ex

The two failing tests are nothing to worry about; for the first one, merge this PR, and for the second one, you need to enable properties (changing Canon settings), but this should be done once the current feature set works well, without crashes (because properties are persistent, and not all of them have proper error checks in Canon code => there is risk of soft-bricking the camera).

For the ASIF errors, try disabling CONFIG_BEEP in internals.h.

mk11174

I have updated link to current test build on will add here so it dont get lost back there.

With the help of tester Gulwant, I coded in the fps values, so ML fps should be normal now.

I also added in the lv buffer addresses from alex, but did not enable anything because Alex has not approved that yet. But screenshot should not record your live view and not scrambled image behind ML overlays.

Also disabled the beep in internals.

Dont use: https://bitbucket.org/mk11174/1200d_new/downloads/magiclantern-Nightly.2016Jul26.1200D101.zip

GOTO Latest here:
http://www.magiclantern.fm/forum/index.php?topic=12627.msg170329#msg170329
500D/T1i  550D/T2i  600D/T3i  700D/T5i

mk11174

Tester Gulwant recorded his first RAW Video on 1200D. Looks like it is setup like the 1100D, was not able to record Raw Video at 1280x720 @24p, it was asking for 36.7mb/s it only did a couple seconds, he had to lower fps to get continuous recording, I think it was 10fps was pretty stable.

He played it back on camera fine too!

Dont want to publish that version until Alex approves though, just wanted to update anyone hoping for 1280x720@24p Raw Video
500D/T1i  550D/T2i  600D/T3i  700D/T5i

Sergio de la Torre

26Jul16 15:43

Overlay Menu:

Works:

  • Zebras (only highlights)
  • Focus Peak
  • Cropmarks
  • Ghost Image
  • Spotmeter
  • Histogram
  • Waveform
  • False color

Doesn't work:

  • Magic Zoom
    (disabled)
  • Zebras - lowligth
    (shows nothing?)

Stub test fails. no crashes after finishing the test
[FAIL] MEM(dialog->type) => 0x6e4944
       GUI_Control(BGMT_MENU, 0, 0, 0); msleep(500);
[FAIL] HALFSHUTTER_PRESSED => 0x0
       SW1(0,100)

5Dc - 1200D - 20D - 350D InfraRed

abodione

hello iam abdalrhman from oman
i downloaded the ML alpha for 1200D and i tried to install it but looks like there is no any FIR file in  the zip

Walter Schulz

@mk11174: For 650D it is essential to use ExFAT filesystem to make 720p24 happen.
(Proven for 650D, not confirmed for 1200D, yet): Cards < 64 GB: Use computer to format. Redo installation (make card bootable, copy ML stuff to card). Cam will apply ExFAT format for cards > 32 GB only.
Not sure if 1200D limited to 50 MByte/s SD-card interface or 25. Real world limits for write are around 40/20, though.

mk11174

Hi Walter, it seems he is having issues with his card, he did use another card and got 21mb/s like 1100D using benchmark module, but def would not hurt to see if your process will help him, thanks.
500D/T1i  550D/T2i  600D/T3i  700D/T5i

mk11174

GREAT NEWS!!!

Magic Zoom also confirmed working by my personal tester!

But scared to post without Alex OK!

Also just confirmed Exposure Override worked to get him the manual control of ISO to make HDR work in movie mode because you cant have AUTO ISO when using HDR.
500D/T1i  550D/T2i  600D/T3i  700D/T5i

a1ex

Since Magic Zoom now appears on the screen, that means the image is written in the display buffer area (not outside it), so it's fine now (safe to enable).

I've cross-checked the image buffer addresses found by Matt with the ones from RscMgr memory map, and they look fine.

You'll want to check two things regarding image buffers:
- whether the false color overlay is properly aligned with the image (if yes, the same will be true about most other overlays).
- whether the focus peaking marks are properly aligned, with "Image buffer: High-res" (it's not the default setting)

If the above tests look OK, you can try to enable the display filters as well (anamorphic preview, fisheye correction, raw video preview...)

Sergio de la Torre

Focus peaking/False colour seem to be well placed  ;)
5Dc - 1200D - 20D - 350D InfraRed