Index: apps/recorder/recording.c =================================================================== --- apps/recorder/recording.c (revision 21649) +++ apps/recorder/recording.c (working copy) @@ -56,7 +56,6 @@ #include "menu.h" #include "sound_menu.h" #include "timefuncs.h" -#include "debug.h" #include "misc.h" #include "tree.h" #include "string.h" @@ -370,6 +369,7 @@ global_settings.rec_mic_gain += factor; #endif } + settings_save(); } /* @@ -990,6 +990,7 @@ int audio_stat = 0; /* status of the audio system */ int last_audio_stat = -1; /* previous status so we can act on changes */ struct viewport vp_list[NB_SCREENS], vp_top[NB_SCREENS]; /* the viewports */ + bool settings_changed = false; #if CONFIG_CODEC == SWCODEC int warning_counter = 0; @@ -1343,41 +1344,59 @@ { if(global_settings.rec_mic_gain < sound_max(SOUND_MIC_GAIN)) + { global_settings.rec_mic_gain++; + settings_changed = true; + } } else #endif /* MIC */ { if(global_settings.rec_left_gain < sound_max(SOUND_LEFT_GAIN)) + { global_settings.rec_left_gain++; + settings_changed = true; + } if(global_settings.rec_right_gain < sound_max(SOUND_RIGHT_GAIN)) + { global_settings.rec_right_gain++; + settings_changed = true; + } } break; case ITEM_GAIN_L: if(global_settings.rec_left_gain < sound_max(SOUND_LEFT_GAIN)) + { global_settings.rec_left_gain++; + settings_changed = true; + } break; case ITEM_GAIN_R: if(global_settings.rec_right_gain < sound_max(SOUND_RIGHT_GAIN)) + { global_settings.rec_right_gain++; + settings_changed = true; + } break; #ifdef HAVE_AGC case ITEM_AGC_MODE: agc_preset = MIN(agc_preset + 1, AGC_MODE_SIZE); agc_enable = (agc_preset != 0); #ifdef HAVE_MIC_REC - if (global_settings.rec_source == AUDIO_SRC_MIC) { + if (global_settings.rec_source == AUDIO_SRC_MIC) + { global_settings.rec_agc_preset_mic = agc_preset; + settings_changed = true; agc_maxgain = global_settings.rec_agc_maxgain_mic; } else #endif /* MIC */ { global_settings.rec_agc_preset_line = agc_preset; + settings_changed = true; agc_maxgain = global_settings.rec_agc_maxgain_line; } break; @@ -1388,6 +1407,7 @@ agc_maxgain = MIN(agc_maxgain + 1, sound_max(SOUND_MIC_GAIN)); global_settings.rec_agc_maxgain_mic = agc_maxgain; + settings_changed = true; } else #endif /* MIC */ @@ -1395,6 +1415,7 @@ agc_maxgain = MIN(agc_maxgain + 1, sound_max(SOUND_LEFT_GAIN)); global_settings.rec_agc_maxgain_line = agc_maxgain; + settings_changed = true; } break; #endif /* HAVE_AGC */ @@ -1416,28 +1437,43 @@ { if(global_settings.rec_mic_gain > sound_min(SOUND_MIC_GAIN)) + { global_settings.rec_mic_gain--; + settings_changed = true; + } } else #endif /* MIC */ { if(global_settings.rec_left_gain > sound_min(SOUND_LEFT_GAIN)) + { global_settings.rec_left_gain--; + settings_changed = true; + } if(global_settings.rec_right_gain > sound_min(SOUND_RIGHT_GAIN)) + { global_settings.rec_right_gain--; + settings_changed = true; + } } break; case ITEM_GAIN_L: if(global_settings.rec_left_gain > sound_min(SOUND_LEFT_GAIN)) + { global_settings.rec_left_gain--; + settings_changed = true; + } break; case ITEM_GAIN_R: if(global_settings.rec_right_gain > sound_min(SOUND_RIGHT_GAIN)) + { global_settings.rec_right_gain--; + settings_changed = true; + } break; #ifdef HAVE_AGC case ITEM_AGC_MODE: @@ -1446,11 +1482,13 @@ #ifdef HAVE_MIC_REC if (global_settings.rec_source == AUDIO_SRC_MIC) { global_settings.rec_agc_preset_mic = agc_preset; + settings_changed = true; agc_maxgain = global_settings.rec_agc_maxgain_mic; } else #endif /* MIC */ { global_settings.rec_agc_preset_line = agc_preset; + settings_changed = true; agc_maxgain = global_settings.rec_agc_maxgain_line; } break; @@ -1461,12 +1499,14 @@ agc_maxgain = MAX(agc_maxgain - 1, sound_min(SOUND_MIC_GAIN)); global_settings.rec_agc_maxgain_mic = agc_maxgain; + settings_changed = true; } else #endif /* MIC */ { agc_maxgain = MAX(agc_maxgain - 1, sound_min(SOUND_LEFT_GAIN)); global_settings.rec_agc_maxgain_line = agc_maxgain; + settings_changed = true; } break; #endif /* HAVE_AGC */ @@ -1940,7 +1980,8 @@ ata_set_led_enabled(true); #endif - settings_save(); + if(settings_changed) + settings_save(); return (rec_status & RCSTAT_BEEN_IN_USB_MODE) != 0; } /* recording_screen */ @@ -1960,6 +2001,7 @@ bool exit = false; bool used = false; + bool settings_changed = false; int w, h, i; char buf[32]; int button; @@ -2038,6 +2080,7 @@ global_settings.rec_quality++; if(global_settings.rec_quality > 7) global_settings.rec_quality = 0; + settings_changed = true; used = true; break; @@ -2046,6 +2089,7 @@ global_settings.rec_frequency++; if(global_settings.rec_frequency > 5) global_settings.rec_frequency = 0; + settings_changed = true; used = true; break; @@ -2054,6 +2098,7 @@ global_settings.rec_channels++; if(global_settings.rec_channels > 1) global_settings.rec_channels = 0; + settings_changed = true; used = true; break; @@ -2079,7 +2124,9 @@ set_gain(); - settings_save(); + if(settings_changed) + settings_save(); + FOR_NB_SCREENS(i) screens[i].setfont(FONT_UI); @@ -2090,6 +2137,7 @@ { bool exit = false; bool used = false; + bool settings_changed = false; int w, h, i; int button; char *src_str[] = @@ -2151,6 +2199,7 @@ global_settings.rec_source++; if(global_settings.rec_source > AUDIO_SRC_MAX) global_settings.rec_source = 0; + settings_changed = true; used = true; break; @@ -2176,7 +2225,8 @@ set_gain(); - settings_save(); + if(settings_changed) + settings_save(); FOR_NB_SCREENS(i) screens[i].setfont(FONT_UI);