static void movie_rec_halfshutter_step() { if (!movie_rec_key) return; if (!is_movie_mode() || !liveview_display_idle() || gui_menu_shown()) return; if (HALFSHUTTER_PRESSED) { if (movie_rec_key_long) { // need to keep halfshutter pressed for one second for (int i = 0; i < 10; i++) { msleep(100); if (!HALFSHUTTER_PRESSED) break; } if (!HALFSHUTTER_PRESSED) return; info_led_on(); NotifyBox(1000, "OK"); } while (HALFSHUTTER_PRESSED) msleep(50); if (NOT_RECORDING && ALLOW_MOVIE_START) schedule_movie_start(); else if(ALLOW_MOVIE_STOP) schedule_movie_end(); } }
static void focus_stack_ensure_preconditions() { while (lens_info.job_state) msleep(100); if (!lv) { while (!lv) { focus_stack_check_stop(); get_out_of_play_mode(500); focus_stack_check_stop(); if (!lv) force_liveview(); if (lv) break; NotifyBoxHide(); NotifyBox(2000, "Please switch to LiveView"); msleep(200); } msleep(200); } if (is_movie_mode()) { #ifdef CONFIG_5D2 set_expsim(1); #else while (is_movie_mode()) { NotifyBox(2000, "Please switch to photo mode"); msleep(2000); } #endif } while (is_manual_focus()) { NotifyBoxHide(); NotifyBox(2000, "Please enable autofocus"); msleep(2000); } msleep(300); if (fstack_zoom > 1) set_lv_zoom(fstack_zoom); }
static void iso_response_curve_current() { msleep(2000); static char name[100]; int digic_iso_gain = is_movie_mode() ? get_digic_iso_gain_movie() : get_digic_iso_gain_photo(); snprintf(name, sizeof(name), "ML/LOGS/i%d%s%s.txt", raw2iso(lens_info.iso_equiv_raw), digic_iso_gain <= 256 ? "e2" : digic_iso_gain != 1024 ? "e" : "", get_htp() ? "h" : ""); find_response_curve(name); }
static void rack_focus_start_delayed( void * priv, int delta ) { if (delta < 0) { if (is_movie_mode()) rack_focus_start_auto_record(priv, delta); else NotifyBox(2000, "Please switch to Movie mode."); return; } focus_rack_auto_record = 0; focus_rack_enable_delay = 1; focus_toggle(priv); }
void movtweak_task_init() { #ifdef FEATURE_FORCE_LIVEVIEW if (!lv && enable_liveview && is_movie_mode() && (DLG_MOVIE_PRESS_LV_TO_RESUME || DLG_MOVIE_ENSURE_A_LENS_IS_ATTACHED)) { force_liveview(); } #endif extern int ml_started; while (!ml_started) msleep(100); #ifdef FEATURE_EXPO_OVERRIDE bv_auto_update(); #endif }
static void shutter_lock_step() { if (is_movie_mode()) // no effect in photo mode { int shutter = lens_info.raw_shutter; if (shutter_lock_value == 0) shutter_lock_value = shutter; // make sure it's some valid value if (!gui_menu_shown()) // lock shutter { if (shutter != shutter_lock_value) // i.e. revert it if changed { //~ lens_set_rawaperture(COERCE(lens_info.raw_aperture + shutter - shutter_lock_value, 16, 96)); msleep(100); lens_set_rawshutter(shutter_lock_value); msleep(100); } } else shutter_lock_value = shutter; // accept change from ML menu } }
struct vram_info * get_yuv422_vram() { vram_params_update_if_dirty(); if (digic_zoom_overlay_enabled()) // compute histograms and such on full-screen image { vram_lv.vram = (void*)CACHEABLE(YUV422_LV_BUFFER_1); return &vram_lv; } #ifdef CONFIG_DISPLAY_FILTERS int d = display_filter_enabled(); if (d) { uint32_t* src_buf; uint32_t* dst_buf; display_filter_get_buffers(&src_buf, &dst_buf); vram_lv.vram = (void*)(d == 1 ? dst_buf : src_buf); return &vram_lv; } #endif #ifdef CONFIG_500D // workaround for issue 1108 - zebras flicker on first clip if (lv && !is_movie_mode()) first_video_clip = 0; // starting in photo mode is OK if (first_video_clip) { vram_lv.vram = CACHEABLE(get_lcd_422_buf()); return &vram_lv; } #endif extern int lv_paused; if (gui_state == GUISTATE_PLAYMENU || lv_paused || QR_MODE) vram_lv.vram = CACHEABLE(get_lcd_422_buf()); else vram_lv.vram = CACHEABLE(get_fastrefresh_422_buf()); return &vram_lv; }
void update_vram_params() { #if CONFIG_DEBUGMSG if (is_menu_active("VRAM")) return; #endif //~ msleep(100); // just to make sure all prop handlers finished after mode change if (!ext_monitor_hdmi) hdmi_code = 0; // 5D doesn't revert it, maybe other cameras too // force a redraw when you connect the external monitor static int prev_hdmi_code = 0; static int prev_EXT_MONITOR_RCA = 0; if (prev_hdmi_code != hdmi_code || prev_EXT_MONITOR_RCA != EXT_MONITOR_RCA) redraw(); prev_hdmi_code = hdmi_code; prev_EXT_MONITOR_RCA = EXT_MONITOR_RCA; // LV crop area (black bars) os.x0 = hdmi_code == 5 ? 75 - 120 : (hdmi_code == 2 ? 40 : EXT_MONITOR_RCA ? (pal ? 40 : 40) : 0); os.y0 = hdmi_code == 5 ? 0 - 30 : (hdmi_code == 2 ? 24 : EXT_MONITOR_RCA ? (pal ? 29 : 25) : 0); os.x_ex = hdmi_code == 5 ? 810 : (hdmi_code == 2 || EXT_MONITOR_RCA) ? 640 : 720; os.y_ex = hdmi_code == 5 ? 540 : (hdmi_code == 2 || EXT_MONITOR_RCA) ? 388 : 480; #if defined(CONFIG_4_3_SCREEN) if (!EXT_MONITOR_CONNECTED) { if (PLAY_MODE || QR_MODE) { os.y0 = 52; // black bar is at the top in play mode, 48 with additional info os.y_ex = 428; // 480 - os.y0; // screen height is 480px in total } else { os.y_ex = 424; // 480 * 8/9; // BMP is 4:3, image is 3:2; } } #else if (PLAY_MODE && hdmi_code == 2) { os.y_ex = 480 - 52; os.y0 = 52; } #endif os.x_max = os.x0 + os.x_ex; os.y_max = os.y0 + os.y_ex; os.off_169 = (os.y_ex - os.y_ex * 3/2 * 9/16) / 2; os.off_1610 = (os.y_ex - os.y_ex * 3/2 * 10/16) / 2; // LV buffer (used for display) // these buffer sizes include any black bars #if defined(CONFIG_5DC) vram_lv.width = 540; vram_lv.height = 426; vram_lv.pitch = vram_lv.width * 2; os.x0 = 0; os.y0 = 26; os.x_ex = 720; os.y_ex = 480-52; os.x_max = os.x0 + os.x_ex; os.y_max = os.y0 + os.y_ex; os.off_169 = 0; os.off_1610 = 0; #elif defined(CONFIG_40D) //~ vram_lv.width = 720; // we only know the HD buffer for now... let's try to pretend it can be used as LV :) //~ vram_lv.height = 480; // we only know the HD buffer for now... let's try to pretend it can be used as LV :) vram_lv.width = 768; // real width is 1024 in yuv411, but ML code assumes yuv422 vram_lv.height = 680; vram_lv.pitch = vram_lv.width * 2; os.x0 = 0; //~ os.y0 = 0; os.y0 = (PLAY_MODE || QR_MODE)? 48 : 0; os.x_ex = 720; //~ os.y_ex = 480; os.y_ex = 480 - os.y0; os.x_max = os.x0 + os.x_ex; os.y_max = os.y0 + os.y_ex; os.off_169 = 0; os.off_1610 = 0; //~ os.off_169 = (os.y_ex - os.y_ex * 4/3 * 9/16) / 2; //~ os.off_1610 = (os.y_ex - os.y_ex * 4/3 * 10/16) / 2; #else #ifdef CONFIG_1100D vram_lv.width = 720; vram_lv.height = 240; #else vram_lv.width = hdmi_code == 5 ? (is_movie_mode() && video_mode_resolution > 0 && video_mode_crop ? 960 : 1920) : EXT_MONITOR_RCA ? 540 : 720; vram_lv.height = hdmi_code == 5 ? (is_movie_mode() && video_mode_fps > 30 ? 540 : 1080) : EXT_MONITOR_RCA ? (pal ? 572 : 480) : 480; #endif vram_lv.pitch = vram_lv.width * 2; #endif #ifdef CONFIG_5DC bm2lv.sx = 1024 * vram_lv.width / 720; bm2lv.sy = 1024 * vram_lv.height / (480-52); bm2lv.tx = 0; bm2lv.ty = -26; #elif CONFIG_40D bm2lv.sx = 1024 * vram_lv.width / 720; bm2lv.sy = 1024 * vram_lv.height / 480; //~ bm2lv.sy = 1024 * vram_lv.height / (480-48); bm2lv.tx = 0; bm2lv.ty = 0; //~ bm2lv.ty = (PLAY_MODE || QR_MODE)? -48 : 0; #else // bmp to lv transformation // LCD: (0,0) -> (0,0) // HDMI: (-120,-30) -> (0,0) and scaling factor is 2 bm2lv.tx = hdmi_code == 5 ? 240 : EXT_MONITOR_RCA ? 4 : 0; bm2lv.ty = hdmi_code == 5 ? (video_mode_resolution>0 ? 30 : 60) : 0; bm2lv.sx = hdmi_code == 5 ? 2048 : EXT_MONITOR_RCA ? 768 : 1024; bm2lv.sy = 1024 * vram_lv.height / (hdmi_code==5 ? 540 : 480); // no black bars at top or bottom #endif //~ lv_ratio_num = hdmi_code == 5 ? 16 : 3; //~ lv_ratio_den = hdmi_code == 5 ? 9 : 2; // HD buffer (used for recording) //~ hd_ratio_num = recording ? (video_mode_resolution < 2 ? 16 : 4) : 3; //~ hd_ratio_den = recording ? (video_mode_resolution < 2 ? 9 : 3) : 2; #if defined(CONFIG_40D) vram_hd.width = vram_lv.width; vram_hd.height = vram_lv.height; vram_hd.pitch = vram_lv.pitch; //~ vram_hd.width = 1024; //~ vram_hd.height = 680; //~ vram_hd.pitch = vram_hd.width * 2; #elif defined(CONFIG_5DC) vram_hd.width = 1872; vram_hd.height = 1664; vram_hd.pitch = vram_lv.pitch; #else vram_hd.pitch = hd_size & 0xFFFF; vram_hd.width = vram_hd.pitch / 2; vram_hd.height = ((hd_size >> 16) & 0xFFFF) #if !defined(CONFIG_DIGIC_V) + 1 #endif ; #endif int off_43 = (os.x_ex - os.x_ex * 8/9) / 2; // gray bars for 16:9 or 4:3 #if defined(CONFIG_600D) int bar_x = is_movie_mode() && video_mode_resolution >= 2 ? off_43 : 0; int bar_y = is_movie_mode() && video_mode_resolution <= 1 ? os.off_169 : 0; #elif defined(CONFIG_1100D) || defined(CONFIG_DIGIC_V) int bar_x = 0; int bar_y = is_movie_mode() && video_mode_resolution == 1 ? os.off_169 : 0; off_43+=0; // bypass warning #elif defined(CONFIG_500D) || defined(CONFIG_7D) //TODO: 650D/6D/EOSM used to have this one enabled too...which one is correct? int bar_x = 0; int bar_y = 0; off_43+=0; // bypass warning #else int bar_x = recording && video_mode_resolution >= 2 ? off_43 : 0; int bar_y = recording && video_mode_resolution <= 1 ? os.off_169 : 0; #endif vram_update_luts(); lv2hd.sx = 1024 * vram_hd.width / BM2LV_DX(os.x_ex - bar_x * 2); lv2hd.sy = 1024 * vram_hd.height / BM2LV_DY(os.y_ex - bar_y * 2); // HD buffer does not contain pillarboxes, LV does // and HD may or may not contain bars // the offset needs to be specified in HD units lv2hd.tx = -LV2HD_DX(BM2LV_X(os.x0 + bar_x)); lv2hd.ty = -LV2HD_DY(BM2LV_Y(os.y0 + bar_y)); //~ #ifndef CONFIG_5DC if (!lv) // HD buffer not active, use LV instead { lv2hd.sx = lv2hd.sy = 1024; lv2hd.tx = lv2hd.ty = 0; vram_hd.pitch = vram_lv.pitch; vram_hd.width = vram_lv.width; vram_hd.height = vram_lv.height; } //~ #endif vram_update_luts(); }
void movtweak_step() { #ifdef FEATURE_MOVIE_REC_KEY movie_rec_halfshutter_step(); #endif #ifdef FEATURE_MOVIE_RESTART static int recording_prev = 0; #if defined(CONFIG_5D2) || defined(CONFIG_50D) || defined(CONFIG_7D) if(!RECORDING_H264 && recording_prev && !movie_was_stopped_by_set) // see also gui.c #else if(!RECORDING_H264 && recording_prev && wait_for_lv_err_msg(0)) #endif { if (movie_restart) { msleep(500); movie_start(); } } recording_prev = RECORDING_H264; if(!RECORDING_H264) { movie_was_stopped_by_set = 0; } #endif if (is_movie_mode()) { #ifdef CONFIG_WB_WORKAROUND kelvin_wb_workaround_step(); #endif #ifdef FEATURE_SHUTTER_LOCK if (shutter_lock) shutter_lock_step(); #endif } #ifdef FEATURE_FORCE_LIVEVIEW if ((enable_liveview && DLG_MOVIE_PRESS_LV_TO_RESUME) || (enable_liveview == 2 && DLG_MOVIE_ENSURE_A_LENS_IS_ATTACHED)) { msleep(200); // double-check if ((enable_liveview && DLG_MOVIE_PRESS_LV_TO_RESUME) || (enable_liveview == 2 && DLG_MOVIE_ENSURE_A_LENS_IS_ATTACHED)) force_liveview(); } #endif //~ update_lvae_for_autoiso_n_displaygain(); #ifdef FEATURE_FORCE_HDMI_VGA if (hdmi_force_vga && is_movie_mode() && (lv || PLAY_MODE) && !gui_menu_shown()) { if (hdmi_code == 5) { msleep(1000); gui_uilock(UILOCK_EVERYTHING); BMP_LOCK( ChangeHDMIOutputSizeToVGA(); msleep(300); ) msleep(2000); gui_uilock(UILOCK_NONE); msleep(5000); }