| 1 | // generic capt_seq fuctions |
|---|
| 2 | |
|---|
| 3 | #define RAWDATA_AVAILABLE (1) |
|---|
| 4 | #define RAWDATA_SAVED (2) |
|---|
| 5 | |
|---|
| 6 | // some cams use different values |
|---|
| 7 | // note: many cams ROM also accepts a value of 3, meaning unknown |
|---|
| 8 | #ifndef NR_ON |
|---|
| 9 | #define NR_ON (2) |
|---|
| 10 | #endif |
|---|
| 11 | #ifndef NR_OFF |
|---|
| 12 | #define NR_OFF (1) |
|---|
| 13 | #endif |
|---|
| 14 | |
|---|
| 15 | static long raw_save_stage; |
|---|
| 16 | volatile long shutter_open_time=0; // for DNG EXIF creation |
|---|
| 17 | |
|---|
| 18 | void __attribute__((naked,noinline)) capt_seq_hook_raw_here() |
|---|
| 19 | { |
|---|
| 20 | asm volatile("STMFD SP!, {R0-R12,LR}\n"); |
|---|
| 21 | |
|---|
| 22 | #ifdef PAUSE_FOR_FILE_COUNTER |
|---|
| 23 | // Some cameras need a slight delay for the file counter to be updated correctly |
|---|
| 24 | // before raw_savefile tries to get the file name & directory. |
|---|
| 25 | // Add '#define PAUSE_FOR_FILE_COUNTER 100' in the camera firmware capt_seq.c file. |
|---|
| 26 | // The value can be adjusted as needed for different cameras. |
|---|
| 27 | _SleepTask(PAUSE_FOR_FILE_COUNTER); |
|---|
| 28 | #endif |
|---|
| 29 | |
|---|
| 30 | raw_save_stage = RAWDATA_AVAILABLE; |
|---|
| 31 | core_rawdata_available(); |
|---|
| 32 | while (raw_save_stage != RAWDATA_SAVED){ |
|---|
| 33 | _SleepTask(10); |
|---|
| 34 | } |
|---|
| 35 | |
|---|
| 36 | asm volatile("LDMFD SP!, {R0-R12,PC}\n"); |
|---|
| 37 | } |
|---|
| 38 | |
|---|
| 39 | |
|---|
| 40 | void hook_raw_save_complete() |
|---|
| 41 | { |
|---|
| 42 | raw_save_stage = RAWDATA_SAVED; |
|---|
| 43 | } |
|---|
| 44 | |
|---|
| 45 | void __attribute__((naked,noinline)) capt_seq_hook_set_nr() |
|---|
| 46 | { |
|---|
| 47 | asm volatile("STMFD SP!, {R0-R12,LR}\n"); |
|---|
| 48 | switch (core_get_noise_reduction_value()){ |
|---|
| 49 | case NOISE_REDUCTION_AUTO_CANON: |
|---|
| 50 | // leave it alone |
|---|
| 51 | #if defined(NR_AUTO) // If value defined store it (e.g. for G12 & SX30 need to reset back to 0 to enable auto) |
|---|
| 52 | *nrflag = NR_AUTO; |
|---|
| 53 | #endif |
|---|
| 54 | break; |
|---|
| 55 | case NOISE_REDUCTION_OFF: |
|---|
| 56 | *nrflag = NR_OFF; |
|---|
| 57 | break; |
|---|
| 58 | case NOISE_REDUCTION_ON: |
|---|
| 59 | *nrflag = NR_ON; |
|---|
| 60 | break; |
|---|
| 61 | }; |
|---|
| 62 | |
|---|
| 63 | shutter_open_time=_time((void*)0); |
|---|
| 64 | |
|---|
| 65 | asm volatile("LDMFD SP!, {R0-R12,PC}\n"); |
|---|
| 66 | } |
|---|
| 67 | |
|---|