//------------------------------------------------------------------- static void gui_osd_calc_expo_param() { expo.av96=shooting_get_av96(); expo.tv96=shooting_get_tv96(); expo.sv96=shooting_get_sv96_real(); expo.iso=shooting_get_iso_real(); //expo.sv96_market=shooting_get_sv96_market(); expo.iso_market=shooting_get_iso_market(); expo.bv96_measured=shooting_get_bv96(); expo.ev96_seted=expo.tv96+expo.av96; //Tv96+Av96 expo.ev96_measured=expo.bv96_measured+expo.sv96;//Bv96+Sv96 expo.dev96=expo.ev96_measured-expo.ev96_seted;// Ev96_external-Ev96_internal expo.bv96_seted=expo.ev96_seted-expo.sv96; expo.dev96_canon=shooting_get_canon_overexposure_value(); expo.b=shooting_get_luminance(); }
static int luaCB_get_iso_real( lua_State* L ) { lua_pushnumber( L, shooting_get_iso_real() ); return 1; }
void shooting_set_autoiso(int iso_mode) { short max_iso; if (iso_mode<=0) shooting_recalc_conf_autoiso_values(); switch (iso_mode) { case -1: // ISO HI //max_iso = conf.autoiso_max_iso_hi*10; max_iso = conf.autoiso_max_iso_hi_real; break; case 0: // ISO AUTO //max_iso = conf.autoiso_max_iso_auto*10; max_iso = conf.autoiso_max_iso_auto_real; break; default: return; } // TODO also long shutter ? if (camera_info.state.mode_shooting==MODE_M || camera_info.state.mode_shooting==MODE_TV || camera_info.state.mode_shooting==MODE_STITCH) return; //Only operate outside of M and Tv int ev_overexp = 0; if (conf.overexp_ev_enum) { // No shoot_histogram exist here because no future shot exist yet :) int total = live_histogram_read_y(live_histogram_proc); // step 32 is 1/3ev for tv96 if (live_histogram_get_range(total,255-conf.autoiso2_over,255) >= conf.overexp_threshold) ev_overexp = conf.overexp_ev_enum << 5; } float current_shutter = shooting_get_shutter_speed_from_tv96(shooting_get_tv96()); short current_iso = shooting_get_iso_real(); short min_shutter = shutter1_values[conf.autoiso_shutter_enum]; if (min_shutter == 0) { short IS_factor = (shooting_get_is_mode()<=1)?conf.autoiso_is_factor:1; min_shutter = get_focal_length(lens_get_zoom_point())*conf.autoiso_user_factor / (IS_factor*1000); //min_shutter is NOT 1/Xs but optimized for the calculation. if (shutter2_values[conf.autoiso2_shutter_enum]) shooting_calc_autoiso_coef( min_shutter ); } short target_iso = current_iso * min_shutter * current_shutter; short min_iso = conf.autoiso_min_iso_real; if (target_iso > max_iso) { ev_overexp=0; // AutoISO2 if // it is turned on (C2!=0.0) // and it has valid iso2/shutter2 ( C2<0) // and non-IsoHI mode if ( !iso_mode && conf.autoiso2_coef < 0.0 ) { target_iso = (max_iso - min_shutter*conf.autoiso2_coef) / ( 1.0 - conf.autoiso2_coef / (current_shutter * current_iso) ); if ( target_iso > conf.autoiso2_max_iso_auto_real ) target_iso = conf.autoiso2_max_iso_auto_real; } else { target_iso = max_iso; } } else if (target_iso < min_iso) { target_iso = min_iso; } float target_shutter = current_shutter * current_iso / target_iso; if (target_shutter > 0) shooting_set_tv96_direct(shooting_get_tv96_from_shutter_speed(target_shutter) + ev_overexp, SET_NOW); shooting_set_iso_real(target_iso, SET_NOW); }