diff options
author | PurlingNayuki <cyq.yzfl@gmail.com> | 2013-12-21 21:33:54 +0800 |
---|---|---|
committer | Jonathan Gordon <rockbox@jdgordon.info> | 2014-01-13 11:32:03 +0100 |
commit | f0bec023d9ff45cede09274dff12f015f0830a38 (patch) | |
tree | 88af20d2941735f441491762daa4139d1bbbbed0 /apps/menus | |
parent | 31dfabfa254235516dde148f16fa2ac4d522944d (diff) | |
download | rockbox-f0bec023d9ff45cede09274dff12f015f0830a38.tar.gz rockbox-f0bec023d9ff45cede09274dff12f015f0830a38.zip |
Implement volume limiter feature
Add a "volume limit" parameter to the configuration file. The maximum
value of volume setting in sound menu will be limited to the same as
volume limit. Also each time when setvol() is excuted, Rockbox will
check if the global_settings.volume value larger than
global_settings.volume_limit. If larger, take the value of volume_limit
instead. The volume_limit argument shares the same maximum and minimum values
with volume argument, while taking the maximum volume as its default value.
Change-Id: I8ca9bc6ea6e617b48fc346aae5f2a0a1d259ae36
Reviewed-on: http://gerrit.rockbox.org/697
Reviewed-by: Jonathan Gordon <rockbox@jdgordon.info>
Diffstat (limited to 'apps/menus')
-rw-r--r-- | apps/menus/sound_menu.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/apps/menus/sound_menu.c b/apps/menus/sound_menu.c index 28cc257193..8913266a5f 100644 --- a/apps/menus/sound_menu.c +++ b/apps/menus/sound_menu.c | |||
@@ -34,10 +34,50 @@ | |||
34 | #include "menu_common.h" | 34 | #include "menu_common.h" |
35 | #include "splash.h" | 35 | #include "splash.h" |
36 | #include "kernel.h" | 36 | #include "kernel.h" |
37 | #include "talk.h" | ||
38 | #include "option_select.h" | ||
39 | #include "misc.h" | ||
40 | |||
41 | static int32_t get_dec_talkid(int value, int unit) | ||
42 | { | ||
43 | return TALK_ID_DECIMAL(value, 1, unit); | ||
44 | } | ||
45 | |||
46 | static int volume_limit_callback(int action,const struct menu_item_ex *this_item) | ||
47 | { | ||
48 | (void)this_item; | ||
49 | |||
50 | static struct int_setting volume_limit_int_setting; | ||
51 | volume_limit_int_setting.option_callback = NULL; | ||
52 | volume_limit_int_setting.unit = UNIT_DB; | ||
53 | volume_limit_int_setting.min = sound_min(SOUND_VOLUME); | ||
54 | volume_limit_int_setting.max = sound_max(SOUND_VOLUME); | ||
55 | volume_limit_int_setting.step = sound_steps(SOUND_VOLUME); | ||
56 | volume_limit_int_setting.formatter = NULL; | ||
57 | volume_limit_int_setting.get_talk_id = get_dec_talkid; | ||
58 | |||
59 | struct settings_list setting; | ||
60 | setting.flags = F_BANFROMQS|F_INT_SETTING|F_T_INT|F_NO_WRAP; | ||
61 | setting.lang_id = LANG_VOLUME_LIMIT; | ||
62 | setting.default_val.int_ = sound_max(SOUND_VOLUME); | ||
63 | setting.int_setting = &volume_limit_int_setting; | ||
64 | |||
65 | switch (action) | ||
66 | { | ||
67 | case ACTION_ENTER_MENUITEM: | ||
68 | setting.setting = &global_settings.volume_limit; | ||
69 | option_screen(&setting, NULL, false, ID2P(LANG_VOLUME_LIMIT)); | ||
70 | case ACTION_EXIT_MENUITEM: /* on exit */ | ||
71 | setvol(); | ||
72 | break; | ||
73 | } | ||
74 | return action; | ||
75 | } | ||
37 | 76 | ||
38 | /***********************************/ | 77 | /***********************************/ |
39 | /* SOUND MENU */ | 78 | /* SOUND MENU */ |
40 | MENUITEM_SETTING(volume, &global_settings.volume, NULL); | 79 | MENUITEM_SETTING(volume, &global_settings.volume, NULL); |
80 | MENUITEM_SETTING(volume_limit, &global_settings.volume_limit, volume_limit_callback); | ||
41 | #ifdef AUDIOHW_HAVE_BASS | 81 | #ifdef AUDIOHW_HAVE_BASS |
42 | MENUITEM_SETTING(bass, &global_settings.bass, | 82 | MENUITEM_SETTING(bass, &global_settings.bass, |
43 | #ifdef HAVE_SW_TONE_CONTROLS | 83 | #ifdef HAVE_SW_TONE_CONTROLS |
@@ -171,6 +211,7 @@ static int timestretch_callback(int action,const struct menu_item_ex *this_item) | |||
171 | 211 | ||
172 | MAKE_MENU(sound_settings, ID2P(LANG_SOUND_SETTINGS), NULL, Icon_Audio, | 212 | MAKE_MENU(sound_settings, ID2P(LANG_SOUND_SETTINGS), NULL, Icon_Audio, |
173 | &volume | 213 | &volume |
214 | ,&volume_limit | ||
174 | #ifdef AUDIOHW_HAVE_BASS | 215 | #ifdef AUDIOHW_HAVE_BASS |
175 | ,&bass | 216 | ,&bass |
176 | #endif | 217 | #endif |