Full-resolution silent pictures (silent.mo)

Started by a1ex, July 01, 2014, 05:11:15 PM

Previous topic - Next topic

0 Members and 2 Guests are viewing this topic.

josepvm

I have found them for you:



700D
------

capture_err_time_addr = 0xff1e1a38
bulb_end_addr  = 0x24960



Try these values. I have not checked them ( I do not own a 700D), but I think they are correct:


"FA_CaptureTestImage(hJob:%#lx)":
ff1e19f0: 435f4146 cmpmi pc, #-2147483631 ; 0x80000011
ff1e19f4: 75747061 ldrbvc r7, [r4, #-97]! ; 0x61
ff1e19f8: 65546572 ldrbvs r6, [r4, #-1394] ; 0x572
ff1e19fc: 6d497473 cfstrdvs mvd7, [r9, #-460] ; 0xfffffe34
ff1e1a00: 28656761 stmdacs r5!, {r0, r5, r6, r8, r9, sl, sp, lr}^
ff1e1a04: 626f4a68 rsbvs r4, pc, #104, 20 ; 0x68000
ff1e1a08: 6c23253a cfstr32vs mvfx2, [r3], #-232 ; 0xffffff18
ff1e1a0c: 00002978 andeq r2, r0, r8, ror r9
"sht_FA_ReleaseStart":
ff1e1a10: 5f746873 svcpl 0x00746873
ff1e1a14: 525f4146 subspl r4, pc, #-2147483631 ; 17f1e1a0b: (???)
ff1e1a18: 61656c65 cmnvs r5, r5, ror #24
ff1e1a1c: 74536573 ldrbvc r6, [r3], #-1395 ; 0x573
ff1e1a20: 00747261 rsbseq r7, r4, r1, ror #4
"sht_FA_ReleaseData":
ff1e1a24: 5f746873 svcpl 0x00746873
ff1e1a28: 525f4146 subspl r4, pc, #-2147483631 ; 17f1e1a1f: (???)
ff1e1a2c: 61656c65 cmnvs r5, r5, ror #24
ff1e1a30: 61446573 hvcvs 18003 ; 0x4653
ff1e1a34: 00006174 andeq r6, r0, r4, ror r1
ff1e1a38: 00004e20 andeq r4, r0, r0, lsr #28                                < --------------
loc_ff1e1a3c:
ff1e1a3c: 0000017b andeq r0, r0, fp, ror r1
ff1e1a40: ff1e149c ; <UNDEFINED> instruction: 0xff1e149c
"FA_CaptureTestImage Fin":


So capture_err_time_addr = 0xff1e1a38

And:

ff14af18: e28f2f81 add r2, pc, #516 ; ff14b124: (42736373)  *"scsBulbEnd"
ff14af1c: e20000ff and r0, r0, #255 ; 0xff
ff14af20: e3a01003 mov r1, #3
ff14af24: eb3ae28c bl loc_395c
ff14af28: e51f0b30 ldr r0, [pc, #-2864] ; ff14a400: (00024950)   <--------
ff14af2c: e3a01001 mov r1, #1
ff14af30: e5801010 str r1, [r0, #16]       <------------------------------------
ff14af34: e5900004 ldr r0, [r0, #4]
ff14af38: e8bd8010 pop {r4, pc}


so  bulb_end_addr  = 0x24950  + 0x10  = 0x24960


hillibilli

I have a 700D.114 and there the address of capture_err_time_addr is different to the value from @josepvm:

capture_err_time_addr = 0xff1e1dd8

The address of
bulb_end_addr is the same as @josepvm posted = 0x24960

In a first short test I implemented only the capture_err_time_addr
and it works. Now up to 32s are possible.

Bulb mode I have not yet tested.


The code of my ROM1 is:

"FA_CaptureTestImage(hJob:%#lx)":
ff1e1d90: 435f4146 cmpmi pc, #-2147483631 ; 0x80000011
ff1e1d94: 75747061 ldrbvc r7, [r4, #-97]! ; 0x61
ff1e1d98: 65546572 ldrbvs r6, [r4, #-1394] ; 0x572
ff1e1d9c: 6d497473 cfstrdvs mvd7, [r9, #-460] ; 0xfffffe34
ff1e1da0: 28656761 stmdacs r5!, {r0, r5, r6, r8, r9, sl, sp, lr}^
ff1e1da4: 626f4a68 rsbvs r4, pc, #104, 20 ; 0x68000
ff1e1da8: 6c23253a cfstr32vs mvfx2, [r3], #-232 ; 0xffffff18
ff1e1dac: 00002978 andeq r2, r0, r8, ror r9
"sht_FA_ReleaseStart":
ff1e1db0: 5f746873 svcpl 0x00746873
ff1e1db4: 525f4146 subspl r4, pc, #-2147483631 ; 17f1e1dab: (???)
ff1e1db8: 61656c65 cmnvs r5, r5, ror #24
ff1e1dbc: 74536573 ldrbvc r6, [r3], #-1395 ; 0x573
ff1e1dc0: 00747261 rsbseq r7, r4, r1, ror #4
"sht_FA_ReleaseData":
ff1e1dc4: 5f746873 svcpl 0x00746873
ff1e1dc8: 525f4146 subspl r4, pc, #-2147483631 ; 17f1e1dbf: (???)
ff1e1dcc: 61656c65 cmnvs r5, r5, ror #24
ff1e1dd0: 61446573 hvcvs 18003 ; 0x4653
ff1e1dd4: 00006174 andeq r6, r0, r4, ror r1
ff1e1dd8: 00004e20 andeq r4, r0, r0, lsr #28
ff1e1ddc: 0000017b andeq r0, r0, fp, ror r1
ff1e1de0: ff1e183c ; <UNDEFINED> instruction: 0xff1e183c
"FA_CaptureTestImage Fin":


For BulbEnd: (only the code addresses are different, all other is equal)

ff14b0cc: e28f2f81 add r2, pc, #516 ; ff14b2d8: (42736373)  *"scsBulbEnd"
ff14b0d0: e20000ff and r0, r0, #255 ; 0xff
ff14b0d4: e3a01003 mov r1, #3
ff14b0d8: eb3ae21f bl loc_395c
ff14b0dc: e51f0b30 ldr r0, [pc, #-2864] ; ff14a5b4: (00024950)
ff14b0e0: e3a01001 mov r1, #1
ff14b0e4: e5801010 str r1, [r0, #16]
ff14b0e8: e5900004 ldr r0, [r0, #4]
ff14b0ec: e8bd8010 pop {r4, pc}
EOS 700D 1.1.4|EF-S 18-55 f/3.5-5.6|Vixen R135S D=135 F=720|Sky-Watcher D=200 F=1000

josepvm

For EOS M:


capture_err_time_addr = 0xff1df1fc
bulb_end_addr  = 0x3F300


30 sec. FRSP and bulb FRSP are working in this little cam  ;)

I have updated the "silent.c" version I posted in this thread some time ago.  Now with bulb FRSP working for 500D, 50D and EOS M.  And also enabled for 700D, but not tested. This file is prepared to be used with current ML unified branch.

It's based on Greg's branch, and merged with unfied by Dmilligan (see previous posts in this thread).  Now I have added the addresses I found for EOS M and 700D.




IBIRRU

Thanks a lot josepvm!!

I'll try to compile and use it.

You are great guy!
EOS 700D 1.1.5, EOS 500D

josepvm

Quote from: hillibilli on August 31, 2016, 08:00:19 PM
I have a 700D.114 and there the address of capture_err_time_addr is different to the value from @josepvm:

capture_err_time_addr = 0xff1e1dd8

The address of
bulb_end_addr is the same as @josepvm posted = 0x24960


Oh sorry, my  fault, the 700D ROM1 copy I was looking at  is 1.1.1,  I didn't notice it was not the same as current builds for 700D.

I have updated the "silent.c" file I posted before with your correct values, It should work now.

IBIRRU

josepvm,
Tried the last silent.c that you share including EOS 700D ..... all is working!!

using intervalometer, bulb 60 s

FRSP BULB MODE is ok
saving DNG is ok
saving MLV is ok

This could be the best feature for astrophotography toghether intervalometer because we save the shutter a lot. We take for just 1 final picture up to 100 x 120s shots (light+ dark + flat +darkflat+bias frame).

Now I will  test the reliability, especially saving in MLV format

Thanks again
EOS 700D 1.1.5, EOS 500D

Greg


milank

I have made some more tweaking, to get the module working also in dedicated bulb mode:

@@ -145,5 +145,5 @@
         MENU_APPEND_VALUE(", DNG");
     }
     
-    if (silent_pic_mode == SILENT_PIC_MODE_FULLRES && (shooting_mode != SHOOTMODE_M || is_movie_mode()))
+    if (silent_pic_mode == SILENT_PIC_MODE_FULLRES && ((shooting_mode != SHOOTMODE_M && shooting_mode != SHOOTMODE_BULB) || is_movie_mode()))
     {
@@ -149,5 +149,5 @@
     {
-        MENU_SET_WARNING(MENU_WARN_NOT_WORKING, "Full-res pictures only work in Manual (M) photo mode.");
+        MENU_SET_WARNING(MENU_WARN_NOT_WORKING, "Full-res pictures only work in Manual (M) or Bulb (B) photo mode.");
     }
     
     silent_pic_check_mlv(entry, info);
@@ -1175,5 +1175,5 @@
     
     char* error_msg = 0;

-    if (shooting_mode != SHOOTMODE_M)
+    if (shooting_mode != SHOOTMODE_M && shooting_mode != SHOOTMODE_BULB)
     {
@@ -1179,6 +1179,6 @@
     {
-        error_msg = "Manual (M) mode is required.";
-        goto err;
+     error_msg = "Manual (M) or Bulb (B) mode is required.";
+     goto err;
     }

     if (prop_iso == 0 || prop_shutter == 0)
@@ -1242,7 +1242,7 @@
      * and creates a "job" object (CreateSkeltonJob)
      */
     void* job = (void*) call("FA_CreateTestImage");
-   
+
     if (prop_shutter == SHUTTER_BULB || (shooting_mode == SHOOTMODE_BULB && frsp_tv_addr))
     {
         /* some cameras reset the cache fake after FRSP, we need it again */
@@ -1257,8 +1257,19 @@
         /* cameras with SHOOTMODE_BULB need fake SHUTTER_BULB */
         if (shooting_mode == SHOOTMODE_BULB && frsp_tv_addr)
         {
-            ASSERT(*(uint8_t*)(job + frsp_tv_addr) == prop_shutter);
-            *(uint8_t*)(job + frsp_tv_addr) = SHUTTER_BULB;
+          printf("job: %x\n", job);
+          printf("prop_shutter: 0x%x\n", prop_shutter);
+
+          for (int i = 0; i < 256; i++)
+          {
+               if(prop_shutter == *(uint8_t*)(job + i))
+               {
+                    printf("FA_CreateTestImage Tv Addr : 0x%x\n", i);
+               }
+          }
+
+          ASSERT(*(uint8_t*)(job + frsp_tv_addr) == prop_shutter);
+          *(uint8_t*)(job + frsp_tv_addr) = SHUTTER_BULB;
         }
         
         delayed_call(bulb_time * 1000, bulb_stop, 0);
@@ -1281,7 +1292,7 @@
      * and available from RAW_PHOTO_EDMAC (defined in raw.c)
      */
     call("FA_CaptureTestImage", job);
-   
+
     int t1 = get_ms_clock_value();
     int capture_time = t1 - t0;

@@ -1481,5 +1492,5 @@
     if (!silent_pic_enabled)
         return 0;

-    /* fullres silent pics only work in M mode,
+    /* fullres silent pics only work in M or B mode,
      * and they may screw up things if triggered while recording. */
@@ -1485,5 +1496,5 @@
      * and they may screw up things if triggered while recording. */
-    if (silent_pic_mode == SILENT_PIC_MODE_FULLRES && (shooting_mode != SHOOTMODE_M || is_movie_mode()))
+    if (silent_pic_mode == SILENT_PIC_MODE_FULLRES && ((shooting_mode != SHOOTMODE_M && shooting_mode != SHOOTMODE_BULB) || is_movie_mode()))
         return 0;

     static int silent_pic_countdown;
@@ -1664,6 +1675,14 @@
         frsp_tv_addr = 0x64; // cameras with SHOOTMODE_BULB need fake SHUTTER_BULB
     }
     
+    if (is_camera("5D3",  "1.1.3"))
+    {
+        bulb_end_addr = 0x25294;
+        capture_err_time_addr = 0xFF9BF358;
+        frsp_tv_addr = 0x78; // cameras with SHOOTMODE_BULB need fake SHUTTER_BULB
+     }
+
+
     /* cache fake "ERROR Take Semaphore" time in "FA_CaptureTestImage" */
     /* 20 seconds to (15 + 1) minutes */
     if (bulb_end_addr && capture_err_time_addr)

But on my 5D3.113, it fails to find (http://www.magiclantern.fm/forum/index.php?topic=12523.msg168625#msg168625) correct frsp_tv_addr (both bulb timer ON and OF).
Therefore it always ends up with ASSERT.


josepvm

Quote from: IBIRRU on September 01, 2016, 09:15:49 PM
josepvm,
Tried the last silent.c that you share including EOS 700D ..... all is working!!

Ibirru, I have updated the file again. Please, download the new version and try it again.

Previously I enabled "long_exposure_fix_enabled"  for the new cams, and I see now that this is needed only for 500D, 550D and 600D.

EOS M works fine with this option disabled.

IBIRRU

It works also in 700D. Just compiled and running.  :)
EOS 700D 1.1.5, EOS 500D

milank

Some progress with dedicated BULB dial like 60D, 5D3 etc...with help of Greg.
Extending search range for frsp_tv_shutter to 1000 instead of 256 shows two offsets for 5D3.113 - 0x280 and 0x282.
Therefore:

-static uint8_t frsp_tv_addr = 0;
+static uint16_t frsp_tv_addr = 0;

Using 0x280 enables the bulb exposure (3 min max tested), but the image does not get saved onto the card, for some reason.

Greg

Updated easy code to find registry tv addr - http://www.magiclantern.fm/forum/index.php?topic=12523.msg168625#msg168625

0x0 // Tv1
0x1 // Av1
0x2 // Tv2
0x3 // Av2
0x4 // ISO


You can try to use Tv1 and Tv2.
(0x280 and 0x282)

FRSP related infos - http://www.magiclantern.fm/forum/index.php?topic=14363.0
Look at struct shootParm.


milank

ok, solved.
Image did not save due to "stdev too large" message (failed autodetect_black_level()), for which I have no clue. Dark images do not have this problem.
Finally working bulb FRSP 5D3.113:

bulb_end_addr = 0x25294;
capture_err_time_addr = 0xFF1BF358;
frsp_tv_addr = 0x280;

Entire DIFF you find on https://bitbucket.org/milank/ml-frsp-long-expo/branch/BULB%20dial%20test#diff.

a1ex

In raw.c, you can define RAW_DEBUG for more verbose messages, and RAW_DEBUG_DUMP to save the raw file that's causing issues.

May be related to this: www.magiclantern.fm/forum/index.php?topic=17579

milank

I have put raw debug on:

#define RAW_DEBUG        /* define it to help with porting */
#define RAW_DEBUG_DUMP   /* if you want to save the raw image buffer and the DNG from here */
#define RAW_DEBUG_BLACK  /* for checking black level calibration */

The console.log after two BULB shots (1min and 25s):

...
raw update from shoot_task
Photo raw buffer: 86028f8 (5936x3950)
Skip left:138 right:2 top:80 bottom:0
Resolution changed: 0x0 -> 5936x3950
active area: x=138..5934, y=80..3950
lv2raw sx:8203 sy:8221 tx:152 ty:88
raw2lv test: (-1,-1) - (722,482)
  should be: (0,0) - (720,480)
raw2bm test: (-1,-1) - (722,482)
  should be: (0,0) - (720,480)
bm2raw test: (152,88) - (5919,3941)
  should be: (138,80) - (5934,3950)
Black check 1/5: 8316...0.00, ref 2047...6.75, delta=6269
Black 1/5: mean too different (8316, ref 2047...6.75)
Save configs...
raw update from shoot_task
Photo raw buffer: 86028f8 (5936x3950)
Skip left:138 right:2 top:80 bottom:0
active area: x=138..5934, y=80..3950
lv2raw sx:8203 sy:8221 tx:152 ty:88
raw2lv test: (-1,-1) - (722,482)
  should be: (0,0) - (720,480)
raw2bm test: (-1,-1) - (722,482)
  should be: (0,0) - (720,480)
bm2raw test: (152,88) - (5919,3941)
  should be: (138,80) - (5934,3950)
Black check 1/5: 7980...382.40, ref 2047...6.77, delta=5933
Black 1/5: mean too different (7980, ref 2047...6.77)
Save configs...

If I try to save the DNG for debug purposes (using if(0) => if(1)), I receive Error 70.

a1ex

Ah, SRM memory issues. The other dumping routine does not use an extra copy, so that one should be fine. If it still doesn't work, I'll look into it.

BTW, in console.log, the "..." is actually the +/- sign (ML uses a non-standard character set).

milank

the same test with MLV is similar:

....
raw update from shoot_task
Photo raw buffer: 86028f8 (5936x3950)
Skip left:138 right:2 top:80 bottom:0
active area: x=138..5934, y=80..3950
lv2raw sx:8203 sy:8221 tx:152 ty:88
raw2lv test: (-1,-1) - (722,482)
  should be: (0,0) - (720,480)
raw2bm test: (-1,-1) - (722,482)
  should be: (0,0) - (720,480)
bm2raw test: (152,88) - (5919,3941)
  should be: (138,80) - (5934,3950)
Black check 1/5: 8173...347.29, ref 2047...6.87, delta=6126
Black 1/5: mean too different (8173, ref 2047...6.87)
Save configs...

Enabled DNG diag output results in the same error 70:

ASSERT: GetMemoryAddressOfMemoryChunk( GetFirstMemChunk( pMem1AllocateListItem->hMemSuite ) ) == pMessage->pAddress
at SrmActionMemory.c:1505, task RscMgr
lv:0 mode:4


....
srm_malloc_suite(1)...
srm buffer #1: 42000064
srm_malloc_suite => 10edb0
srm_free_suite(10edb0)
srm_malloc_suite(0)...


mdpark84

Hoping someone can tell me what I'm doing wrong.  I've read through several pages of this thread and some others but no luck.  I've got a Canon 6D on the latest nightly (Nightly.2016Sep16.6D116).  I've enabled silent pictures, mlv_rec, have a interv. of 15s, and outputting full res to MLV, shutter of 1s, shooting in live mode.  It seems that the files are getting corrupted as MLVMystic, mlv_dump, MLVBrowseSharp are unable to read them.  MLVViewSharp is able to but periodically crashes trying to read them (also I've noticed the brightness increasing from one image to the next when it does work - might be a separate issue).  I tried choosing DNG in Silent Picture (with the same settings as above) and that had no issue (all were of the same brightness level as well).  Am I missing something about the MLV container or a setting perhaps?

DeafEyeJedi

5D3.113 | 5D3.123 | EOSM.203 | 7D.203 | 70D.112 | 100D.101 | EOSM2.* | 50D.109

breaker

Hi! My 5D3 with fw 1.1.3  /latest nightly keep failing on raw when making Silent pictures with lenght more than approx 1,5 -> 16 seconds (varies a bit). Message is "Raw error, falling back to YUV overlays". Bug or me?  ;) 
EOS 7D | EOS 650D | Sigma 30mm f/1.4 | Canon EF-S 15-85mm f/3.5-5.6 | Canon EF-S 18-135mm f/3.5-5.6 STM | 50D RAW Monster :-D

a1ex


breaker

EOS 7D | EOS 650D | Sigma 30mm f/1.4 | Canon EF-S 15-85mm f/3.5-5.6 | Canon EF-S 18-135mm f/3.5-5.6 STM | 50D RAW Monster :-D

k2121

Hi,
when I shoot silent MLV with intervalometer, every picture is in individual MLV file.
How to shoot silent with intervalometer into one mlv file?
It's easier to decompress to dng files.
(shooting mlv without intervalometer save every frame in one mlv)
650d.104 ML • SX1.200h CHDK

Walter Schulz

Why not shooting DNG in the first place?