Well, here it is. This is a patch to the latest AllBest released (2 month ago?). I hope it is not too far behind.
diff -r f2cf9e6b707f core/conf.c
--- a/core/conf.c Tue Apr 01 12:30:59 2008 +0300
+++ b/core/conf.c Thu Apr 03 11:17:01 2008 +0300
@@ -291,6 +291,7 @@
CONF_INFO(162, conf.autoiso_max_iso_hi, CONF_DEF_VALUE, i:55, NULL),
CONF_INFO(163, conf.autoiso_max_iso_auto, CONF_DEF_VALUE, i:35, NULL),
CONF_INFO(164, conf.autoiso_min_iso, CONF_DEF_VALUE, i:5, NULL),
+ CONF_INFO(165, conf.autoiso_reduce_overexpo, CONF_DEF_VALUE, i:0, NULL),
};
#define CONF_NUM (sizeof(conf_info)/sizeof(conf_info[0]))
diff -r f2cf9e6b707f core/gui.c
--- a/core/gui.c Tue Apr 01 12:30:59 2008 +0300
+++ b/core/gui.c Thu Apr 03 11:17:01 2008 +0300
@@ -133,6 +133,7 @@
static const char* gui_raw_ext_enum(int change, int arg);
static const char* gui_raw_nr_enum(int change, int arg);
static const char* gui_autoiso_shutter_enum(int change, int arg);
+static const char* gui_autoiso_overexpo_enum(int change, int arg);
static const char* gui_reader_codepage_enum(int change, int arg);
static const char* gui_zoom_value_enum(int change, int arg);
static const char* gui_show_values_enum(int change, int arg);
@@ -228,6 +229,7 @@
{LANG_MENU_AUTOISO_MAX_ISO_HI, MENUITEM_INT|MENUITEM_F_UNSIGNED|MENUITEM_F_MINMAX, &conf.autoiso_max_iso_hi, MENU_MINMAX(20, 160) },
{LANG_MENU_AUTOISO_MAX_ISO_AUTO, MENUITEM_INT|MENUITEM_F_UNSIGNED|MENUITEM_F_MINMAX, &conf.autoiso_max_iso_auto, MENU_MINMAX(10, 80) },
{LANG_MENU_AUTOISO_MIN_ISO, MENUITEM_INT|MENUITEM_F_UNSIGNED|MENUITEM_F_MINMAX, &conf.autoiso_min_iso, MENU_MINMAX(1, 20) },
+ {LANG_MENU_AUTOISO_REDUCE_OVEREXPO, MENUITEM_ENUM, (int*)gui_autoiso_overexpo_enum },
{LANG_MENU_BACK, MENUITEM_UP },
{0}
};
@@ -780,6 +782,19 @@
conf.autoiso_shutter=0;
return shutter[conf.autoiso_shutter];
+}
+
+//-------------------------------------------------------------------
+const char* gui_autoiso_overexpo_enum(int change, int arg) {
+ static const char* expo[]={ "Off", "1/3 EV", "2/3 EV", "1 EV"};
+
+ conf.autoiso_reduce_overexpo+=change;
+ if (conf.autoiso_reduce_overexpo<0)
+ conf.autoiso_reduce_overexpo=(sizeof(expo)/sizeof(expo[0]))-1;
+ else if (conf.autoiso_reduce_overexpo>=(sizeof(expo)/sizeof(expo[0])))
+ conf.autoiso_reduce_overexpo=0;
+
+ return expo[conf.autoiso_reduce_overexpo];
}
//-------------------------------------------------------------------
diff -r f2cf9e6b707f core/gui_lang.c
--- a/core/gui_lang.c Tue Apr 01 12:30:59 2008 +0300
+++ b/core/gui_lang.c Thu Apr 03 11:17:01 2008 +0300
@@ -408,11 +408,12 @@
"322 \"Custom Auto ISO->\"\n"
"323 \"Enable Custom Auto ISO\"\n"
"324 \"Minimal Shutter speed\"\n"
-"325 \"User Factor (1/FL/factor)\"\n"
-"326 \"IS Factor (Tv*factor)\"\n"
+"325 \" User Factor (1/FL/factor)\"\n"
+"326 \" IS Factor (Tv*factor)\"\n"
"327 \"Max ISO HI (x10)\"\n"
"328 \"Max ISO AUTO (x10)\"\n"
"329 \"Min ISO (x10)\"\n"
+"330 \"Reduce OverExposure\"\n"
diff -r f2cf9e6b707f core/gui_lang.h
--- a/core/gui_lang.h Tue Apr 01 12:30:59 2008 +0300
+++ b/core/gui_lang.h Thu Apr 03 11:17:01 2008 +0300
@@ -423,9 +423,11 @@
#define LANG_MENU_AUTOISO_MAX_ISO_HI 327
#define LANG_MENU_AUTOISO_MAX_ISO_AUTO 328
#define LANG_MENU_AUTOISO_MIN_ISO 329
+#define LANG_MENU_AUTOISO_REDUCE_OVEREXPO 330
+
//-------------------------------------------------------------------
-#define GUI_LANG_ITEMS 329
+#define GUI_LANG_ITEMS 330
//-------------------------------------------------------------------
extern void gui_lang_init();
diff -r f2cf9e6b707f core/gui_osd.c
--- a/core/gui_osd.c Tue Apr 01 12:30:59 2008 +0300
+++ b/core/gui_osd.c Thu Apr 03 11:17:01 2008 +0300
@@ -710,8 +710,10 @@
if (conf.nd_filter_state || gui_mode==GUI_MODE_OSD)
gui_print_osd_state_string_chr("NDFILTER:", ((conf.nd_filter_state==1)?"IN":"OUT"));
#endif
- if ((conf.autoiso_enable && shooting_get_iso_mode()<=0 && !(m==MODE_M || m==MODE_TV) && shooting_get_flash_mode()) || gui_mode==GUI_MODE_OSD)
- gui_print_osd_state_string_chr("AUTOISO:", "ON");
+ if ((conf.autoiso_enable && shooting_get_iso_mode()<=0 && !(m==MODE_M || m==MODE_TV) && shooting_get_flash_mode()) || gui_mode==GUI_MODE_OSD) {
+ static const char* shutter[]={ "Auto", "1/8", "1/15", "1/30", "1/60", "1/125", "1/250", "1/500", "1/1000"};
+ gui_print_osd_state_string_chr("I-A: ", shutter[conf.autoiso_shutter]);
+ }
if ((conf.subj_dist_override_value && conf.subj_dist_override_koef && shooting_can_focus()) || ((gui_mode==GUI_MODE_ALT) && shooting_get_common_focus_mode()) || gui_mode==GUI_MODE_OSD) {
gui_print_osd_state_string_int("SD:",shooting_get_subject_distance_override_value());
if (gui_mode==GUI_MODE_ALT)
diff -r f2cf9e6b707f include/conf.h
--- a/include/conf.h Tue Apr 01 12:30:59 2008 +0300
+++ b/include/conf.h Thu Apr 03 11:17:01 2008 +0300
@@ -153,6 +153,7 @@
int autoiso_max_iso_hi;
int autoiso_max_iso_auto;
int autoiso_min_iso;
+ int autoiso_reduce_overexpo;
int recalc_exposure;
int tv_exposure_order;
diff -r f2cf9e6b707f lang/english.lng
--- a/lang/english.lng Tue Apr 01 12:30:59 2008 +0300
+++ b/lang/english.lng Thu Apr 03 11:17:01 2008 +0300
@@ -423,11 +423,12 @@
322 "Custom Auto ISO->"
323 "Enable Custom Auto ISO"
324 "Minimal Shutter speed"
-325 "User Factor (1/FL/factor)"
-326 "IS Factor (Tv*factor)"
+325 " User Factor (1/FL/factor)"
+326 " IS Factor (Tv*factor)"
327 "Max ISO HI (x10)"
328 "Max ISO AUTO (x10)"
329 "Min ISO (x10)"
+330 "Reduce Overexposure"
diff -r f2cf9e6b707f platform/generic/shooting.c
--- a/platform/generic/shooting.c Tue Apr 01 12:30:59 2008 +0300
+++ b/platform/generic/shooting.c Thu Apr 03 11:17:01 2008 +0300
@@ -5,6 +5,7 @@
#include "math.h"
#include "stdlib.h"
#include "conf.h"
+#include "histogram.h"
#define SS_SIZE (sizeof(shutter_speeds_table)/sizeof(shutter_speeds_table[0]))
#define SSID_MIN (shutter_speeds_table[0].id)
@@ -895,7 +896,10 @@
float current_shutter = shooting_get_shutter_speed_from_tv96(shooting_get_tv96());
short current_iso=shooting_get_iso_real();
-
+
+ static const float reduce_overexpo[]={1.0, 0.8, 0.63, 0.5}; //0-1 EV reduction
+ if (over_exposed) current_iso *= reduce_overexpo[conf.autoiso_reduce_overexpo];
+
short min_shutter = shutter[conf.autoiso_shutter];
if (min_shutter == 0)
{
@@ -903,7 +907,7 @@
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.
}
-
+
short target_iso = current_iso * min_shutter * current_shutter;
short min_iso = conf.autoiso_min_iso*10;
diff -r f2cf9e6b707f version.inc
--- a/version.inc Tue Apr 01 12:30:59 2008 +0300
+++ b/version.inc Thu Apr 03 11:17:01 2008 +0300
@@ -1,1 +1,1 @@
-BUILD_NUMBER := 49
+BUILD_NUMBER := 72