forked from len0rd/rockbox
Change EQ settings to use a struct array in global_settings.
The previous pseudo array access of separate members wasn't very nice or clear. Change-Id: I74a2b39bb9c71a1370a455c01c4d5a860765e040 Reviewed-on: http://gerrit.rockbox.org/179 Reviewed-by: Michael Sevakis <jethead71@rockbox.org> Tested-by: Michael Sevakis <jethead71@rockbox.org>
This commit is contained in:
parent
64bb720edf
commit
f637072632
4 changed files with 76 additions and 83 deletions
12
apps/dsp.c
12
apps/dsp.c
|
|
@ -953,17 +953,13 @@ void dsp_set_eq_precut(int precut)
|
|||
*/
|
||||
void dsp_set_eq_coefs(int band)
|
||||
{
|
||||
const int *setting;
|
||||
long gain;
|
||||
unsigned long cutoff, q;
|
||||
|
||||
/* Adjust setting pointer to the band we actually want to change */
|
||||
setting = &global_settings.eq_band0_cutoff + (band * 3);
|
||||
struct eq_band_setting *setting = &global_settings.eq_band_settings[band];
|
||||
|
||||
/* Convert user settings to format required by coef generator functions */
|
||||
cutoff = 0xffffffff / NATIVE_FREQUENCY * (*setting++);
|
||||
q = *setting++;
|
||||
gain = *setting++;
|
||||
unsigned long cutoff = 0xffffffff / NATIVE_FREQUENCY * setting->cutoff;
|
||||
unsigned long q = setting->q;
|
||||
int gain = setting->gain;
|
||||
|
||||
if (q == 0)
|
||||
q = 1;
|
||||
|
|
|
|||
|
|
@ -97,23 +97,38 @@ static int eq_setting_callback(int action, const struct menu_item_ex *this_item)
|
|||
MENUITEM_SETTING(eq_enable, &global_settings.eq_enabled, eq_setting_callback);
|
||||
MENUITEM_SETTING(eq_precut, &global_settings.eq_precut, eq_setting_callback);
|
||||
|
||||
MENUITEM_SETTING(cutoff_0, &global_settings.eq_band0_cutoff, eq_setting_callback);
|
||||
MENUITEM_SETTING(cutoff_1, &global_settings.eq_band1_cutoff, eq_setting_callback);
|
||||
MENUITEM_SETTING(cutoff_2, &global_settings.eq_band2_cutoff, eq_setting_callback);
|
||||
MENUITEM_SETTING(cutoff_3, &global_settings.eq_band3_cutoff, eq_setting_callback);
|
||||
MENUITEM_SETTING(cutoff_4, &global_settings.eq_band4_cutoff, eq_setting_callback);
|
||||
MENUITEM_SETTING(cutoff_0, &global_settings.eq_band_settings[0].cutoff,
|
||||
eq_setting_callback);
|
||||
MENUITEM_SETTING(cutoff_1, &global_settings.eq_band_settings[1].cutoff,
|
||||
eq_setting_callback);
|
||||
MENUITEM_SETTING(cutoff_2, &global_settings.eq_band_settings[2].cutoff,
|
||||
eq_setting_callback);
|
||||
MENUITEM_SETTING(cutoff_3, &global_settings.eq_band_settings[3].cutoff,
|
||||
eq_setting_callback);
|
||||
MENUITEM_SETTING(cutoff_4, &global_settings.eq_band_settings[4].cutoff,
|
||||
eq_setting_callback);
|
||||
|
||||
MENUITEM_SETTING(q_0, &global_settings.eq_band0_q, eq_setting_callback);
|
||||
MENUITEM_SETTING(q_1, &global_settings.eq_band1_q, eq_setting_callback);
|
||||
MENUITEM_SETTING(q_2, &global_settings.eq_band2_q, eq_setting_callback);
|
||||
MENUITEM_SETTING(q_3, &global_settings.eq_band3_q, eq_setting_callback);
|
||||
MENUITEM_SETTING(q_4, &global_settings.eq_band4_q, eq_setting_callback);
|
||||
MENUITEM_SETTING(q_0, &global_settings.eq_band_settings[0].q,
|
||||
eq_setting_callback);
|
||||
MENUITEM_SETTING(q_1, &global_settings.eq_band_settings[1].q,
|
||||
eq_setting_callback);
|
||||
MENUITEM_SETTING(q_2, &global_settings.eq_band_settings[2].q,
|
||||
eq_setting_callback);
|
||||
MENUITEM_SETTING(q_3, &global_settings.eq_band_settings[3].q,
|
||||
eq_setting_callback);
|
||||
MENUITEM_SETTING(q_4, &global_settings.eq_band_settings[4].q,
|
||||
eq_setting_callback);
|
||||
|
||||
MENUITEM_SETTING(gain_0, &global_settings.eq_band0_gain, eq_setting_callback);
|
||||
MENUITEM_SETTING(gain_1, &global_settings.eq_band1_gain, eq_setting_callback);
|
||||
MENUITEM_SETTING(gain_2, &global_settings.eq_band2_gain, eq_setting_callback);
|
||||
MENUITEM_SETTING(gain_3, &global_settings.eq_band3_gain, eq_setting_callback);
|
||||
MENUITEM_SETTING(gain_4, &global_settings.eq_band4_gain, eq_setting_callback);
|
||||
MENUITEM_SETTING(gain_0, &global_settings.eq_band_settings[0].gain,
|
||||
eq_setting_callback);
|
||||
MENUITEM_SETTING(gain_1, &global_settings.eq_band_settings[1].gain,
|
||||
eq_setting_callback);
|
||||
MENUITEM_SETTING(gain_2, &global_settings.eq_band_settings[2].gain,
|
||||
eq_setting_callback);
|
||||
MENUITEM_SETTING(gain_3, &global_settings.eq_band_settings[3].gain,
|
||||
eq_setting_callback);
|
||||
MENUITEM_SETTING(gain_4, &global_settings.eq_band_settings[4].gain,
|
||||
eq_setting_callback);
|
||||
|
||||
static char* gainitem_get_name(int selected_item, void * data, char *buffer)
|
||||
{
|
||||
|
|
@ -145,23 +160,28 @@ static int do_option(void * param)
|
|||
MENUITEM_FUNCTION_DYNTEXT(gain_item_0, MENU_FUNC_USEPARAM,
|
||||
do_option, (void*)&gain_0,
|
||||
gainitem_get_name, gainitem_speak_item,
|
||||
&global_settings.eq_band0_cutoff, NULL, Icon_NOICON);
|
||||
&global_settings.eq_band_settings[0].cutoff,
|
||||
NULL, Icon_NOICON);
|
||||
MENUITEM_FUNCTION_DYNTEXT(gain_item_1, MENU_FUNC_USEPARAM,
|
||||
do_option, (void*)&gain_1,
|
||||
gainitem_get_name, gainitem_speak_item,
|
||||
&global_settings.eq_band1_cutoff, NULL, Icon_NOICON);
|
||||
&global_settings.eq_band_settings[1].cutoff,
|
||||
NULL, Icon_NOICON);
|
||||
MENUITEM_FUNCTION_DYNTEXT(gain_item_2, MENU_FUNC_USEPARAM,
|
||||
do_option, (void*)&gain_2,
|
||||
gainitem_get_name, gainitem_speak_item,
|
||||
&global_settings.eq_band2_cutoff, NULL, Icon_NOICON);
|
||||
&global_settings.eq_band_settings[2].cutoff,
|
||||
NULL, Icon_NOICON);
|
||||
MENUITEM_FUNCTION_DYNTEXT(gain_item_3, MENU_FUNC_USEPARAM,
|
||||
do_option, (void*)&gain_3,
|
||||
gainitem_get_name, gainitem_speak_item,
|
||||
&global_settings.eq_band3_cutoff, NULL, Icon_NOICON);
|
||||
&global_settings.eq_band_settings[3].cutoff,
|
||||
NULL, Icon_NOICON);
|
||||
MENUITEM_FUNCTION_DYNTEXT(gain_item_4, MENU_FUNC_USEPARAM,
|
||||
do_option, (void*)&gain_4,
|
||||
gainitem_get_name, gainitem_speak_item,
|
||||
&global_settings.eq_band4_cutoff, NULL, Icon_NOICON);
|
||||
&global_settings.eq_band_settings[4].cutoff,
|
||||
NULL, Icon_NOICON);
|
||||
|
||||
MAKE_MENU(gain_menu, ID2P(LANG_EQUALIZER_GAIN), NULL, Icon_NOICON, &gain_item_0,
|
||||
&gain_item_1, &gain_item_2, &gain_item_3, &gain_item_4);
|
||||
|
|
@ -349,15 +369,15 @@ static void draw_eq_sliders(struct screen * screen, int x, int y,
|
|||
int nb_eq_sliders, int start_item,
|
||||
int current_band, enum eq_slider_mode mode)
|
||||
{
|
||||
int i, gain, q, cutoff;
|
||||
int height = y;
|
||||
int *setting = &global_settings.eq_band0_cutoff;
|
||||
|
||||
start_item = MIN(start_item, 5-nb_eq_sliders);
|
||||
for (i=0; i<5; i++) {
|
||||
cutoff = *setting++;
|
||||
q = *setting++;
|
||||
gain = *setting++;
|
||||
start_item = MIN(start_item, 5 - nb_eq_sliders);
|
||||
|
||||
for (int i = 0; i < 5; i++) {
|
||||
struct eq_band_setting *setting = &global_settings.eq_band_settings[i];
|
||||
int cutoff = setting->cutoff;
|
||||
int q = setting->q;
|
||||
int gain = setting->gain;
|
||||
|
||||
if (i == start_item + nb_eq_sliders)
|
||||
break;
|
||||
|
|
@ -370,6 +390,7 @@ static void draw_eq_sliders(struct screen * screen, int x, int y,
|
|||
height++;
|
||||
}
|
||||
}
|
||||
|
||||
if (nb_eq_sliders != 5)
|
||||
gui_scrollbar_draw(screen, 0, y, SCROLLBAR_SIZE - 1,
|
||||
screen->lcdheight - y, 5,
|
||||
|
|
@ -429,8 +450,7 @@ bool eq_menu_graphical(void)
|
|||
/* Set pointer to the band data currently editable */
|
||||
if (mode == GAIN) {
|
||||
/* gain */
|
||||
setting = &global_settings.eq_band0_gain;
|
||||
setting += current_band * 3;
|
||||
setting = &global_settings.eq_band_settings[current_band].gain;
|
||||
|
||||
step = EQ_GAIN_STEP;
|
||||
fast_step = EQ_GAIN_FAST_STEP;
|
||||
|
|
@ -443,8 +463,7 @@ bool eq_menu_graphical(void)
|
|||
screens[i].putsxy(0, 0, buf);
|
||||
} else if (mode == CUTOFF) {
|
||||
/* cutoff */
|
||||
setting = &global_settings.eq_band0_cutoff;
|
||||
setting += current_band * 3;
|
||||
setting = &global_settings.eq_band_settings[current_band].cutoff;
|
||||
|
||||
step = EQ_CUTOFF_STEP;
|
||||
fast_step = EQ_CUTOFF_FAST_STEP;
|
||||
|
|
@ -457,8 +476,7 @@ bool eq_menu_graphical(void)
|
|||
screens[i].putsxy(0, 0, buf);
|
||||
} else {
|
||||
/* Q */
|
||||
setting = &global_settings.eq_band0_q;
|
||||
setting += current_band * 3;
|
||||
setting = &global_settings.eq_band_settings[current_band].q;
|
||||
|
||||
step = EQ_Q_STEP;
|
||||
fast_step = EQ_Q_FAST_STEP;
|
||||
|
|
|
|||
|
|
@ -340,33 +340,12 @@ struct user_settings
|
|||
bool eq_enabled; /* Enable equalizer */
|
||||
unsigned int eq_precut; /* dB */
|
||||
|
||||
/* Order is important here, must be cutoff, q, then gain for each band.
|
||||
See dsp_set_eq_coefs in dsp.c for why. */
|
||||
|
||||
/* Band 0 settings */
|
||||
int eq_band0_cutoff; /* Hz */
|
||||
int eq_band0_q;
|
||||
int eq_band0_gain; /* +/- dB */
|
||||
|
||||
/* Band 1 settings */
|
||||
int eq_band1_cutoff; /* Hz */
|
||||
int eq_band1_q;
|
||||
int eq_band1_gain; /* +/- dB */
|
||||
|
||||
/* Band 2 settings */
|
||||
int eq_band2_cutoff; /* Hz */
|
||||
int eq_band2_q;
|
||||
int eq_band2_gain; /* +/- dB */
|
||||
|
||||
/* Band 3 settings */
|
||||
int eq_band3_cutoff; /* Hz */
|
||||
int eq_band3_q;
|
||||
int eq_band3_gain; /* +/- dB */
|
||||
|
||||
/* Band 4 settings */
|
||||
int eq_band4_cutoff; /* Hz */
|
||||
int eq_band4_q;
|
||||
int eq_band4_gain; /* +/- dB */
|
||||
struct eq_band_setting
|
||||
{
|
||||
int cutoff; /* Hz */
|
||||
int q;
|
||||
int gain; /* +/- dB */
|
||||
} eq_band_settings[5];
|
||||
|
||||
/* Misc. swcodec */
|
||||
int beep; /* system beep volume when changing tracks etc. */
|
||||
|
|
|
|||
|
|
@ -1420,51 +1420,51 @@ const struct settings_list settings[] = {
|
|||
"eq precut", UNIT_DB, 0, 240, 5, eq_precut_format,
|
||||
get_precut_talkid, dsp_set_eq_precut),
|
||||
/* 0..32768 Hz */
|
||||
INT_SETTING_NOWRAP(F_EQSETTING, eq_band0_cutoff, LANG_EQUALIZER_BAND_CUTOFF,
|
||||
INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[0].cutoff, LANG_EQUALIZER_BAND_CUTOFF,
|
||||
60, "eq band 0 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
|
||||
EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
|
||||
INT_SETTING_NOWRAP(F_EQSETTING, eq_band1_cutoff, LANG_EQUALIZER_BAND_CENTER,
|
||||
INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[1].cutoff, LANG_EQUALIZER_BAND_CENTER,
|
||||
200, "eq band 1 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
|
||||
EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
|
||||
INT_SETTING_NOWRAP(F_EQSETTING, eq_band2_cutoff, LANG_EQUALIZER_BAND_CENTER,
|
||||
INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[2].cutoff, LANG_EQUALIZER_BAND_CENTER,
|
||||
800, "eq band 2 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
|
||||
EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
|
||||
INT_SETTING_NOWRAP(F_EQSETTING, eq_band3_cutoff, LANG_EQUALIZER_BAND_CENTER,
|
||||
INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[3].cutoff, LANG_EQUALIZER_BAND_CENTER,
|
||||
4000, "eq band 3 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
|
||||
EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
|
||||
INT_SETTING_NOWRAP(F_EQSETTING, eq_band4_cutoff, LANG_EQUALIZER_BAND_CUTOFF,
|
||||
INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[4].cutoff, LANG_EQUALIZER_BAND_CUTOFF,
|
||||
12000, "eq band 4 cutoff", UNIT_HERTZ, EQ_CUTOFF_MIN,
|
||||
EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, NULL, NULL, NULL),
|
||||
/* 0..64 (or 0.0 to 6.4) */
|
||||
INT_SETTING_NOWRAP(F_EQSETTING, eq_band0_q, LANG_EQUALIZER_BAND_Q, 7,
|
||||
INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[0].q, LANG_EQUALIZER_BAND_Q, 7,
|
||||
"eq band 0 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
|
||||
eq_q_format, get_dec_talkid, NULL),
|
||||
INT_SETTING_NOWRAP(F_EQSETTING, eq_band1_q, LANG_EQUALIZER_BAND_Q, 10,
|
||||
INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[1].q, LANG_EQUALIZER_BAND_Q, 10,
|
||||
"eq band 1 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
|
||||
eq_q_format, get_dec_talkid, NULL),
|
||||
INT_SETTING_NOWRAP(F_EQSETTING, eq_band2_q, LANG_EQUALIZER_BAND_Q, 10,
|
||||
INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[2].q, LANG_EQUALIZER_BAND_Q, 10,
|
||||
"eq band 2 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
|
||||
eq_q_format, get_dec_talkid, NULL),
|
||||
INT_SETTING_NOWRAP(F_EQSETTING, eq_band3_q, LANG_EQUALIZER_BAND_Q, 10,
|
||||
INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[3].q, LANG_EQUALIZER_BAND_Q, 10,
|
||||
"eq band 3 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
|
||||
eq_q_format, get_dec_talkid, NULL),
|
||||
INT_SETTING_NOWRAP(F_EQSETTING, eq_band4_q, LANG_EQUALIZER_BAND_Q, 7,
|
||||
INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[4].q, LANG_EQUALIZER_BAND_Q, 7,
|
||||
"eq band 4 q", UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP,
|
||||
eq_q_format, get_dec_talkid, NULL),
|
||||
/* -240..240 (or -24db to +24db) */
|
||||
INT_SETTING_NOWRAP(F_EQSETTING, eq_band0_gain, LANG_GAIN, 0,
|
||||
INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[0].gain, LANG_GAIN, 0,
|
||||
"eq band 0 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
|
||||
EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
|
||||
INT_SETTING_NOWRAP(F_EQSETTING, eq_band1_gain, LANG_GAIN, 0,
|
||||
INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[1].gain, LANG_GAIN, 0,
|
||||
"eq band 1 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
|
||||
EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
|
||||
INT_SETTING_NOWRAP(F_EQSETTING, eq_band2_gain, LANG_GAIN, 0,
|
||||
INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[2].gain, LANG_GAIN, 0,
|
||||
"eq band 2 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
|
||||
EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
|
||||
INT_SETTING_NOWRAP(F_EQSETTING, eq_band3_gain, LANG_GAIN, 0,
|
||||
INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[3].gain, LANG_GAIN, 0,
|
||||
"eq band 3 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
|
||||
EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
|
||||
INT_SETTING_NOWRAP(F_EQSETTING, eq_band4_gain, LANG_GAIN, 0,
|
||||
INT_SETTING_NOWRAP(F_EQSETTING, eq_band_settings[4].gain, LANG_GAIN, 0,
|
||||
"eq band 4 gain", UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX,
|
||||
EQ_GAIN_STEP, db_format, get_dec_talkid, NULL),
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue