Canon EOS M

Started by jordancolburn, December 30, 2013, 10:21:20 PM

Previous topic - Next topic

0 Members and 5 Guests are viewing this topic.

tupp

@dfort:

Thank you for the prompt reply!

I found where I previously inquired about the All-I/GOP controls in this thread here:
https://www.magiclantern.fm/forum/index.php?topic=9741.msg156491#msg156491

You directed me to another thread in which some of the steps were outlined on compiling the GOP control:
https://www.magiclantern.fm/forum/index.php?topic=15685.msg152612#msg152612

I am unsure on a few things.  Is the code mentioned in the thread above included in the source, so all I have to do is uncomment the lines before compiling?  If not, where do I paste the lines into the source?

Also, I have read that it is suggested to reset the camera before installing ML.  Is this always necessary?  Doing so is problematic for me as I run Linux and have picture styles installed -- I would have to get access to a Windows/Mac machine to reinstall those picture styles.

Thanks!

dfort

dpjpandone worked on that code and he has moved on to other interests but his build with the All-I/GOP controls is still in his Dropbox and his Bitbucket account is still online though I couldn't find anything related to what you're looking for in there.

The topic you referred to seems pretty clear. Just uncomment this line:

platform/EOSM.202/features.h
//~ #define FEATURE_VIDEO_HACKS // unclean patching


and add these lines:

platform/EOSM.202/Makefile.setup.default
ML_SRC_EXTRA_OBJS = \
video_hacksU.o \


I haven't tried it recently but I do remember playing around with it a while back and some of those video hacks did work on the EOSM.

Quote from: tupp on April 24, 2018, 05:07:51 AM
Also, I have read that it is suggested to reset the camera before installing ML.  Is this always necessary?  Doing so is problematic for me as I run Linux and have picture styles installed -- I would have to get access to a Windows/Mac machine to reinstall those picture styles.

Does clearing the settings remove the picture styles? I'm not sure, I'd have to try it out and see.

Resetting the Canon settings usually isn't necessary. For me I found it sometimes helps after doing a Canon firmware update but otherwise I rarely clear the settings.

tupp

Quote from: dfort on April 24, 2018, 07:12:54 AM
dpjpandone worked on that code and he has moved on to other interests but his build with the All-I/GOP controls is still in his Dropbox and his Bitbucket account is still online though I couldn't find anything related to what you're looking for in there.

Thanks for the links!

I have already installed dpjpandone's build and enabled ALL-I and boosted the bitrate to 1.5x.  Will test soon, and, if there are no glitches, I will gradually increase the bitrate until the video breaks.

QuoteThe topic you referred to seems pretty clear. Just uncomment this line:

platform/EOSM.202/features.h
//~ #define FEATURE_VIDEO_HACKS // unclean patching


and add these lines:

platform/EOSM.202/Makefile.setup.default
ML_SRC_EXTRA_OBJS = \
video_hacksU.o \


Thank you!  So I can uncomment and add said lines to any recent version of ML source code?


QuoteDoes clearing the settings remove the picture styles? I'm not sure, I'd have to try it out and see.
I think it does... it's mentioned in the ML install instructions.


QuoteResetting the Canon settings usually isn't necessary. For me I found it sometimes helps after doing a Canon firmware update but otherwise I rarely clear the settings.
Thanks!!!  That was very helpful to know!  Saved me a lot of hassle!

dfort

I've been trying to push through some firmware updates and running the lua_fix branch Script API Tests on various cameras. The EOSM has always had problems going through these tests so I thought I'd take a closer look at it. Here are the tests that are failing and the specific assert failures within each test.

    -- test_camera_gui()
        assert(camera.gui.idle == true
       
    -- test_menu()
        assert(menu.select("Play mode actions", "Trigger key(s)")); sleep(1)
       
    -- test_camera_take_pics()
        assert(camera.gui.play_photo == true)
       
    -- test_lv()
        assert(lv.vidmode == "PH-NOLV")


The EOSM will complete the tests if those assert commands are commented out. Now the puzzle to solve is how to get them working properly on the EOSM?

dfort

Finally got a perfect score on the selftest module, Stubs API test:

[Pass] is_play_mode() => 0x1
[INFO] Camera model: Canon EOS M 2.0.2 (0x80000331 EOSM)
[Pass] is_camera("DIGIC", "*") => 0x1
[Pass] is_camera(__camera_model_short, firmware_version) => 0x1
[Pass] src = fio_malloc(size) => 0x4de1a084
[Pass] dst = fio_malloc(size) => 0x4e61e090
[Pass] memcmp(dst, src, 4097) => 0x98
[Pass] edmac_memcpy(dst, src, 4097) => 0x4e61e090
[Pass] memcmp(dst, src, 4097) => 0x0
[Pass] edmac_memcpy(dst, src, 4097) => 0x4e61e090
[Pass] memcmp(dst, src, size) => 0x81
[Pass] edmac_memcpy(dst, src, size) => 0x4e61e090
[Pass] memcmp(dst, src, size) => 0x0
[Pass] memcmp(dst, src, size) => 0xb
[Pass] edmac_memcpy_start(dst, src, size) => 0x4e61e090
       dt => 0x2971
[Pass] copied => 0x4003f0
[Pass] copied => 0x4003f0
[Pass] copied => 0x4003f0
[Pass] memcmp(dst, src, copied) => 0x0
[Pass] memcmp(dst, src, copied + 16) => 0xffffffaf
       edmac_memcpy_finish()
       free(src)
       free(dst)
Cache test A (EDMAC on BMP buffer)...
[Pass] bmp = bmp_load("ML/CROPMKS/CINESCO2.BMP", 1) => 0x80e894
[Pass] old => 0x0
[Pass] irq => 0xc0
[Pass] differences => 0x15df
[Pass] old => 0x0
[Pass] irq => 0xc0
[Pass] differences => 0x0
Cache test B (FIO on 8K buffer)...
[Pass] tries[0] => 0xf9
[Pass] tries[1] => 0x105
[Pass] tries[2] => 0xe6
[Pass] tries[3] => 0x104
[Pass] failr[0] => 0x7c
[Pass] failw[0] => 0xdd
[Pass] failr[1] => 0x75
[Pass] failw[1] => 0x0
[Pass] failr[2] => 0x0
[Pass] failw[2] => 0xc5
[Pass] failr[3] => 0x0
[Pass] failw[3] => 0x0
       times[0] / tries[0] => 0x1d
       times[1] / tries[1] => 0x1d
       times[2] / tries[2] => 0x1d
       times[3] / tries[3] => 0x1d
Cache tests finished.

[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] HALFSHUTTER_PRESSED => 0x1
[Pass] wait_focus_status(1000, 3) => 0x1
[Pass] lv_focus_status => 0x3
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] wait_focus_status(1000, 3) => 0x0
[Pass] lv_focus_status => 0x1
[Pass] HALFSHUTTER_PRESSED => 0x1
[Pass] wait_focus_status(1000, 3) => 0x0
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] lv_focus_status => 0x1
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] HALFSHUTTER_PRESSED => 0x1
[Pass] wait_focus_status(1000, 3) => 0x1
[Pass] lv_focus_status => 0x3
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] wait_focus_status(1000, 3) => 0x0
[Pass] lv_focus_status => 0x1
[Pass] HALFSHUTTER_PRESSED => 0x1
[Pass] wait_focus_status(1000, 3) => 0x0
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] lv_focus_status => 0x1
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] HALFSHUTTER_PRESSED => 0x1
[Pass] wait_focus_status(1000, 3) => 0x1
[Pass] lv_focus_status => 0x3
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] wait_focus_status(1000, 3) => 0x0
[Pass] lv_focus_status => 0x1
[Pass] HALFSHUTTER_PRESSED => 0x1
[Pass] wait_focus_status(1000, 3) => 0x0
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] lv_focus_status => 0x1
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] HALFSHUTTER_PRESSED => 0x1
[Pass] wait_focus_status(1000, 3) => 0x1
[Pass] lv_focus_status => 0x3
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] wait_focus_status(1000, 3) => 0x0
[Pass] lv_focus_status => 0x1
[Pass] HALFSHUTTER_PRESSED => 0x1
[Pass] wait_focus_status(1000, 3) => 0x0
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] lv_focus_status => 0x1
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] HALFSHUTTER_PRESSED => 0x1
[Pass] wait_focus_status(1000, 3) => 0x1
[Pass] lv_focus_status => 0x3
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] wait_focus_status(1000, 3) => 0x0
[Pass] lv_focus_status => 0x1
[Pass] HALFSHUTTER_PRESSED => 0x1
[Pass] wait_focus_status(1000, 3) => 0x0
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] lv_focus_status => 0x1
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] HALFSHUTTER_PRESSED => 0x1
[Pass] wait_focus_status(1000, 3) => 0x1
[Pass] lv_focus_status => 0x3
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] wait_focus_status(1000, 3) => 0x0
[Pass] lv_focus_status => 0x1
[Pass] HALFSHUTTER_PRESSED => 0x1
[Pass] wait_focus_status(1000, 3) => 0x0
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] lv_focus_status => 0x1
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] HALFSHUTTER_PRESSED => 0x1
[Pass] wait_focus_status(1000, 3) => 0x1
[Pass] lv_focus_status => 0x3
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] wait_focus_status(1000, 3) => 0x0
[Pass] lv_focus_status => 0x1
[Pass] HALFSHUTTER_PRESSED => 0x1
[Pass] wait_focus_status(1000, 3) => 0x0
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] lv_focus_status => 0x1
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] HALFSHUTTER_PRESSED => 0x1
[Pass] wait_focus_status(1000, 3) => 0x1
[Pass] lv_focus_status => 0x3
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] wait_focus_status(1000, 3) => 0x0
[Pass] lv_focus_status => 0x1
[Pass] HALFSHUTTER_PRESSED => 0x1
[Pass] wait_focus_status(1000, 3) => 0x0
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] lv_focus_status => 0x1
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] HALFSHUTTER_PRESSED => 0x1
[Pass] wait_focus_status(1000, 3) => 0x1
[Pass] lv_focus_status => 0x3
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] wait_focus_status(1000, 3) => 0x0
[Pass] lv_focus_status => 0x1
[Pass] HALFSHUTTER_PRESSED => 0x1
[Pass] wait_focus_status(1000, 3) => 0x0
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] lv_focus_status => 0x1
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] HALFSHUTTER_PRESSED => 0x1
[Pass] wait_focus_status(1000, 3) => 0x1
[Pass] lv_focus_status => 0x3
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] wait_focus_status(1000, 3) => 0x0
[Pass] lv_focus_status => 0x1
[Pass] HALFSHUTTER_PRESSED => 0x1
[Pass] wait_focus_status(1000, 3) => 0x0
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] lv_focus_status => 0x1
[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) => 0x408630ec
[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) => 0x4de1a084
[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] is_file("test.dat") => 0x1
[Pass] FIO_RemoveFile("test.dat") => 0x0
[Pass] is_file("test.dat") => 0x0
[Pass] SetTimerAfter(0, timer_cbr, overrun_cbr, 0) => 0x15
[Pass] timer_func => 0x2
[Pass] SetTimerAfter(1000, timer_cbr, overrun_cbr, 0) => 0xb746
       msleep(900)
[Pass] timer_func => 0x0
       msleep(200)
[Pass] timer_func => 0x1
[Pass] ABS((timer_time/1000 - t0) - 1000) => 0x3
[Pass] ABS((timer_arg - ta0) - 1000) => 0xa
[Pass] timer = SetTimerAfter(1000, timer_cbr, overrun_cbr, 0) => 0xb7b0
       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) => 0x318b0
       msleep(90)
[Pass] timer_func => 0x0
       msleep(20)
[Pass] timer_func => 0x1
[Pass] ABS(DeltaT(timer_time, t0) - 100000) => 0x14e
[Pass] ABS(DeltaT(timer_arg, ta0) - 100000) => 0xfd
[Pass] ABS((get_us_clock() - t0) - 110000) => 0x13f
[Pass] SetHPTimerAfterNow(90000, next_tick_cbr, overrun_cbr, 0) => 0x318b2
       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) => 0x1d1
[Pass] ABS(DeltaT(timer_arg, ta0) - 300000) => 0x1b3
[Pass] ABS((get_us_clock() - t0) - 310000) => 0x119
       t0 = GET_DIGIC_TIMER() => 0xa9407
       msleep(250)
       t1 = GET_DIGIC_TIMER() => 0xe5c63
[Pass] ABS(MOD(t1-t0, 1048576)/1000 - 250) => 0x3
       LoadCalendarFromRTC( &now )
       s0 = now.tm_sec => 0x28
       Date/time: 2018/05/08 15:53:40
       msleep(1500)
       LoadCalendarFromRTC( &now )
       s1 = now.tm_sec => 0x29
[Pass] MOD(s1-s0, 60) => 0x1
[Pass] MOD(s1-s0, 60) => 0x1
       m0 = MALLOC_FREE_MEMORY => 0x3e460
[Pass] p = (void*)_malloc(50*1024) => 0x1313f0
[Pass] CACHEABLE(p) => 0x1313f0
       m1 = MALLOC_FREE_MEMORY => 0x31c50
       _free(p)
       m2 = MALLOC_FREE_MEMORY => 0x3e460
[Pass] ABS((m0-m1) - 50*1024) => 0x10
[Pass] ABS(m0-m2) => 0x0
       m0 = GetFreeMemForAllocateMemory() => 0x337218
[Pass] p = (void*)_AllocateMemory(128*1024) => 0x8630ac
[Pass] CACHEABLE(p) => 0x8630ac
       m1 = GetFreeMemForAllocateMemory() => 0x31720c
       _FreeMemory(p)
       m2 = GetFreeMemForAllocateMemory() => 0x337218
[Pass] ABS((m0-m1) - 128*1024) => 0xc
[Pass] ABS(m0-m2) => 0x0
       m01 = MALLOC_FREE_MEMORY => 0x3e460
       m02 = GetFreeMemForAllocateMemory() => 0x337218
[Pass] p = (void*)_alloc_dma_memory(128*1024) => 0x408630ec
[Pass] UNCACHEABLE(p) => 0x408630ec
[Pass] CACHEABLE(p) => 0x8630ec
[Pass] UNCACHEABLE(CACHEABLE(p)) => 0x408630ec
       _free_dma_memory(p)
[Pass] p = (void*)_shoot_malloc(16*1024*1024) => 0x4de1a074
[Pass] UNCACHEABLE(p) => 0x4de1a074
       _shoot_free(p)
       m11 = MALLOC_FREE_MEMORY => 0x3e460
       m12 = GetFreeMemForAllocateMemory() => 0x337218
[Pass] ABS(m01-m11) => 0x0
[Pass] ABS(m02-m12) => 0x0
[Pass] suite = shoot_malloc_suite_contig(16*1024*1024) => 0x131358
[Pass] suite->signature => 'MemSuite'
[Pass] suite->num_chunks => 0x1
[Pass] suite->size => 0x1000000
[Pass] chunk = GetFirstChunkFromSuite(suite) => 0x131380
[Pass] chunk->signature => 'MemChunk'
[Pass] chunk->size => 0x1000000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x4de1a070
[Pass] UNCACHEABLE(p) => 0x4de1a070
       shoot_free_suite(suite); suite = 0; chunk = 0;
[Pass] suite = shoot_malloc_suite_contig(0) => 0x131358
[Pass] suite->signature => 'MemSuite'
[Pass] suite->num_chunks => 0x1
[Pass] suite->size => 0x1f24000
[Pass] chunk = GetFirstChunkFromSuite(suite) => 0x131380
[Pass] chunk->signature => 'MemChunk'
[Pass] chunk->size => 0x1f24000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x44000064
[Pass] UNCACHEABLE(p) => 0x44000064
       largest_shoot_block = suite->size => 0x1f24000
[INFO] largest_shoot_block: 31MB
       shoot_free_suite(suite); suite = 0; chunk = 0;
[Pass] suite = shoot_malloc_suite(largest_shoot_block + 1024*1024) => 0x131358
[Pass] suite->signature => 'MemSuite'
[Pass] suite->num_chunks => 0x5
[Pass] suite->size => 0x2024000
[Pass] chunk = GetFirstChunkFromSuite(suite) => 0x131380
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x13b4000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x4de1a070
[Pass] UNCACHEABLE(p) => 0x4de1a070
       chunk = GetNextMemoryChunk(suite, chunk) => 0x131418
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x17b4000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x419ff0a4
[Pass] UNCACHEABLE(p) => 0x419ff0a4
       chunk = GetNextMemoryChunk(suite, chunk) => 0x131450
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x189c000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x4ae00064
[Pass] UNCACHEABLE(p) => 0x4ae00064
       chunk = GetNextMemoryChunk(suite, chunk) => 0x131488
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x1974000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x45f240e4
[Pass] UNCACHEABLE(p) => 0x45f240e4
       chunk = GetNextMemoryChunk(suite, chunk) => 0x1314c0
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x2024000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x44000064
[Pass] UNCACHEABLE(p) => 0x44000064
       chunk = GetNextMemoryChunk(suite, chunk) => 0x0
[Pass] total => 0x2024000
       shoot_free_suite(suite); suite = 0; chunk = 0;
[Pass] suite = shoot_malloc_suite(0) => 0x131358
[Pass] suite->signature => 'MemSuite'
[Pass] suite->num_chunks => 0x5
[Pass] suite->size => 0x3700000
[Pass] chunk = GetFirstChunkFromSuite(suite) => 0x131380
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x13b4000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x4de1a070
[Pass] UNCACHEABLE(p) => 0x4de1a070
       chunk = GetNextMemoryChunk(suite, chunk) => 0x131418
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x149c000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x4ae00064
[Pass] UNCACHEABLE(p) => 0x4ae00064
       chunk = GetNextMemoryChunk(suite, chunk) => 0x131450
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x189c000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x419ff0a4
[Pass] UNCACHEABLE(p) => 0x419ff0a4
       chunk = GetNextMemoryChunk(suite, chunk) => 0x131488
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x1974000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x45f240e4
[Pass] UNCACHEABLE(p) => 0x45f240e4
       chunk = GetNextMemoryChunk(suite, chunk) => 0x1314c0
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x3700000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x44000064
[Pass] UNCACHEABLE(p) => 0x44000064
       chunk = GetNextMemoryChunk(suite, chunk) => 0x0
[Pass] total => 0x3700000
       shoot_free_suite(suite); suite = 0; chunk = 0;
[Pass] strlen("abc") => 0x3
[Pass] strlen("qwertyuiop") => 0xa
[Pass] strlen("") => 0x0
[Pass] strcpy(msg, "hi there") => 0x213924
[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) => 0x213900
[Pass] foo => 'asdfghuiop'
[Pass] memset(bar, '*', 5) => 0x2138e0
[Pass] bar => '*****hjkl;'
       bzero32(bar + 5, 5)
[Pass] bar => '****'
       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
       task_create("test", 0x1c, 0x1000, test_task, 0) => 0xdb9200ca
[Pass] test_task_created => 0x1
[Pass] get_current_task_name() => 'run_test'
[Pass] get_task_name_from_id(current_task->taskId) => 'run_test'
[Pass] task_max => 0x68
[Pass] task_max => 0x68
[Pass] mq = mq ? mq : (void*)msg_queue_create("test", 5) => 0xdb9400b6
[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) => 0xdb96021a
[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) => 0xdb980036
[Pass] AcquireRecursiveLock(rlock, 500) => 0x0
[Pass] AcquireRecursiveLock(rlock, 500) => 0x0
[Pass] ReleaseRecursiveLock(rlock) => 0x0
[Pass] ReleaseRecursiveLock(rlock) => 0x0
[Pass] ReleaseRecursiveLock(rlock) => 0xf
       SetGUIRequestMode(1); msleep(1000);
[Pass] CURRENT_GUI_MODE => 0x1
       SetGUIRequestMode(2); msleep(1000);
[Pass] CURRENT_GUI_MODE => 0x2
       SetGUIRequestMode(0); msleep(1000);
[Pass] CURRENT_GUI_MODE => 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
[Pass] dialog->type => 'DIALOG'
       GUI_Control(BGMT_MENU, 0, 0, 0); msleep(500);
[Pass] MENU_MODE => 0x0
[Pass] PLAY_MODE => 0x0
       SW1(1,100)
[Pass] HALFSHUTTER_PRESSED => 0x1
       SW1(0,100)
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] is_play_mode() => 0x1
[Pass] is_pure_play_photo_mode() => 0x1
[Pass] is_pure_play_movie_mode() => 0x0
[Pass] is_play_mode() => 0x1
[Pass] is_pure_play_photo_mode() => 0x0
[Pass] is_pure_play_movie_mode() => 0x0
[Pass] is_play_mode() => 0x1
[Pass] is_pure_play_photo_mode() => 0x0
[Pass] is_pure_play_movie_mode() => 0x1
[Pass] is_play_mode() => 0x1
[Pass] is_pure_play_photo_mode() => 0x0
[Pass] is_pure_play_movie_mode() => 0x0
=========================================================
Test complete, 11872 passed, 0 failed.
.


What I did was to check the EOSM stubs against the 700D. The check-stubs.py was useful in finding a few that were different but then I remembered something that happened when I was stub hunting the EOSM2 and found the 700D PlayMain_handler stub looked out of place. Well, that wasn't a mistake. So just now I thought about going the other way and find the 700D stub on the EOSM and it got past this last stubborn failure:

[FAIL] is_pure_play_photo_mode() => 0x0

Looking for confirmation that this makes sense:

platform/EOSM.202/stubs.S
-NSTUB(0xFF3BC078,  PlayMain_handler)
+NSTUB(0xFF715BA4,  PlayMain_handler)


[EDIT] BTW--This was run on the lua_fix branch. Just found out that the selftest API test from the unified branch will not complete on the EOSM. With or without the PlayMain_handler stub change.

dfort


garry23

Damn it!

That just means the secondhand market adds on a few extra pound.

;)  :)

loknar

Quote from: dfort on May 19, 2018, 04:42:11 PM
Looks like the EOSM is getting some favorable press thanks to Magic Lantern.

Yeah, I've got like 50 times more traffic on my YT videos with SD UHS hack :o).

loknar

I've been curious, what maximum framerate did you achieve with EOS M?
I didn't managed to get past 45 fps, and I'd like to shoot some DualISO 2x24fps video, any tips?

Also can anyone recommend anamorfic lens that are suitable (and not too expensive) for EOS M?

keel

Quote from: dfort on May 19, 2018, 04:42:11 PM
Looks like the EOSM is getting some favorable press thanks to Magic Lantern.


https://petapixel.com/2018/05/18/the-original-canon-eos-m-can-shoot-2-5k-raw-video-with-magic-lantern/


I saw that article, can't seem to make sense of the sd uhs install on the EOSM.

I have managed to find it, install, and it completes a few memory patches. From here, I am lost.

Any help ? Is there a step by step for running the hack?

Walter Schulz

Copy SD_UHS.mo into modules folder of 4k_crop experimental build.
Load sd_uhs.mo in photo mode.
Go to Debug tab and run SD overclock.
Switch to movie mode and record.

Be aware this is risky and is able to do permanent damage to card and camera!

Ceterum censeo experimental build page esse delendam.

keel

Thank you Walter, I have been running the module incorrectly by the sounds of it.
-
After this process, my card appears to remain limited at 40mb write speed.
In other words, no reaction is happening with different cards (in a form of improvement).

I have seen things listed such as blacks 1/5, malloc errors, but I am not sure if I am hitting problems.

If it records, it crashes at 5 seconds or less, but the bottleneck doesn't pass 40mb.


Walter Schulz

Are you running magiclantern-crop_rec_4k.2018Mar10.EOSM202 as advised?

keel

I am yes, although my initial tests were from a different month. I think the issue was this movie crop vs crop mode.

You'll have to humor me, I have not touched my eos m in years.


Walter Schulz

What is your status now?
If problem persists post screens of
- sd_uhs after running
- modules tab
- Help tab, highlight on Press Info

pbates

Where does one get this module?

Quote from: Walter Schulz on May 21, 2018, 10:44:05 PM
Copy SD_UHS.mo into modules folder of 4k_crop experimental build.
Load sd_uhs.mo in photo mode.
Go to Debug tab and run SD overclock.
Switch to movie mode and record.

Be aware this is risky and is able to do permanent damage to card and camera!

Ceterum censeo experimental build page esse delendam.

alpicat

@keel - for the SD hack I used files from @Danne's bitbucket page: https://bitbucket.org/Dannephoto/magic-lantern/downloads/  (I hope it's ok to share this, if not I'll delete the link)

I downloaded the "magiclantern-Nightly.2018Apr17.EOSM202_sd_uhs.zip" file from 17th April 2018 and put that in my card (not the 27th April file which wouldn't do anything when I tried to run the overclock test). Then I downloaded his sd_uhs module file from 19th April and put that into the modules folder in ML (replacing the sd_uhs module that was already there).

After that I followed @IDA_ML 's instructions on how to run the SD overclock test and the card benchmark test, ensuring it's all done in photo mode. His instructions are here: https://www.magiclantern.fm/forum/index.php?topic=16040.msg200229#msg200229

And it worked. I used a Sandisk extreme pro 95mb/s 64gb card. I'm only shooting 24fps.

Do let me know if there's a better way to do this!


Danne

Quote from: alpicat on May 23, 2018, 12:09:21 AM
(not the 27th April file which wouldn't do anything when I tried to run the overclock test).

You are aware that this build skips the tests and goes right into patching(160mhz) when selected? Card needs to be about 95mb. Works on 100D at least.

alpicat

Quote from: Danne on May 23, 2018, 08:07:30 AM
You are aware that this build skips the tests and goes right into patching(160mhz) when selected? Card needs to be about 95mb. Works on 100D at least.

Good to know - I wasn't aware! I was using a 95mb/s card so should have been ok. Might give it another try when I get a chance.

alpicat

@Danne  I've now tested your 27th April build and it works fine on my eos m with a fast card, same good results as the previous build. Thanks for this!


york824

Is it possible to get Image Stabilization working when shooting RAW videos? I bought a EF-M 18-55MM IS for shooting videos, hoping it would fix all the shaky problems but when reviewing all the footages I still get very shaky results. When shooting H.264 the IS is apparently working well. Also when previewing from camera there is a line stating that there is no IS in the videos. I did some searching in the forum but can't find anything helpful to this issue.

a1ex

This works out of the box on most other models, where IS is active by default during standby. The only exception I'm aware of is 50D, where one needs to keep the shutter pressed halfway while recording in order to activate IS.

If the EOS M is different, you may want to document its behavior (when IS gets activated by Canon firmware, when it's stopped, whether the same happens in movie vs photo mode and so on). On most other models, in LiveView, IS is enabled by half-shutter in photo mode and stays active for a few seconds after releasing half-shutter, but it's always enabled in movie mode, including standby.

To understand how it works, you need to know the IS is handled by a secondary CPU -- the MPU, which also controls the buttons. If the IS is triggered by half-shutter, then it's very likely the MPU deciding to activate the IS. If it's triggered by actions performed on the main CPU (such as starting H.264), you can find what the main CPU tells to the MPU when that happens, using the startup-log-mpu build.

Tony Weller

I was curious about this so I plugged my 15-45mm IS that came with my EOS M10 onto my EOSM and the IS is definately stabilizing when raw recording. I don't use any liveview functions. This may or may not be useful.

That was a nice find as I use manual lenses most of the time and considered the 15-45 just a pfffft kit lens but its working well as is the Tamron 18-200 Di III VC which I also got for the EOS M10.
700D 1.1.5, EOSM 202, 4k_crop_rec 160MHz UHS-1 overclock

keel

Quote from: Walter Schulz on May 22, 2018, 06:14:29 PM
What is your status now?
If problem persists post screens of
- sd_uhs after running
- modules tab
- Help tab, highlight on Press Info


Hey Walter, sorry for delayed response. Lot of hospital days draining my energy levels.
Is there a way for a screenshot with magic lantern? I apologize I am unfamiliar.


I am specifically using Lexer 150mb/s 1000x 32gb cards.
I turn on cam, set to photo mode, went to SD OVERCLOCK and it began "before the hack" running.
Got 45mb tops on a benchmark, every couple of tries. Usually 40mb.

Whenever I activate movie crop mode or crop mode, i get frame skipping/stopping immediately.