forked from len0rd/rockbox
setting_list.c playback frequency cleanup
moves the callback to settings_list audio_set_playback_frequency now accepts an actual frequency 44100 192000 etc rather than an index Change-Id: Ieb3fc79a7fe3f1ff050465c8cd8061027e4572ff
This commit is contained in:
parent
873f49b1f0
commit
79b64a3fc7
5 changed files with 72 additions and 59 deletions
|
@ -11795,16 +11795,16 @@
|
|||
</phrase>
|
||||
<phrase>
|
||||
id: LANG_AUTOMATIC
|
||||
desc: generic automatic
|
||||
desc: deprecated
|
||||
user: core
|
||||
<source>
|
||||
*: "Automatic"
|
||||
*: ""
|
||||
</source>
|
||||
<dest>
|
||||
*: "Automatic"
|
||||
*: ""
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Automatic"
|
||||
*: ""
|
||||
</voice>
|
||||
</phrase>
|
||||
<phrase>
|
||||
|
|
|
@ -60,12 +60,8 @@ static int setcrossfadeonexit_callback(int action,
|
|||
|
||||
/***********************************/
|
||||
/* PLAYBACK MENU */
|
||||
static int playback_callback(int action,
|
||||
const struct menu_item_ex *this_item,
|
||||
struct gui_synclist *this_list);
|
||||
|
||||
MENUITEM_SETTING(shuffle_item, &global_settings.playlist_shuffle, playback_callback);
|
||||
MENUITEM_SETTING(repeat_mode, &global_settings.repeat_mode, playback_callback);
|
||||
MENUITEM_SETTING(shuffle_item, &global_settings.playlist_shuffle, NULL);
|
||||
MENUITEM_SETTING(repeat_mode, &global_settings.repeat_mode, NULL);
|
||||
MENUITEM_SETTING(play_selected, &global_settings.play_selected, NULL);
|
||||
|
||||
MENUITEM_SETTING(ff_rewind_accel, &global_settings.ff_rewind_accel, NULL);
|
||||
|
@ -178,8 +174,7 @@ MENUITEM_SETTING(rewind_across_tracks, &global_settings.rewind_across_tracks, NU
|
|||
MENUITEM_SETTING(resume_rewind, &global_settings.resume_rewind, NULL);
|
||||
MENUITEM_SETTING(pause_rewind, &global_settings.pause_rewind, NULL);
|
||||
#ifdef HAVE_PLAY_FREQ
|
||||
MENUITEM_SETTING(play_frequency, &global_settings.play_frequency,
|
||||
playback_callback);
|
||||
MENUITEM_SETTING(play_frequency, &global_settings.play_frequency, NULL);
|
||||
#endif
|
||||
#ifdef HAVE_ALBUMART
|
||||
static int albumart_callback(int action,
|
||||
|
@ -239,29 +234,5 @@ MAKE_MENU(playback_settings,ID2P(LANG_PLAYBACK),0,
|
|||
#endif
|
||||
);
|
||||
|
||||
static int playback_callback(int action,
|
||||
const struct menu_item_ex *this_item,
|
||||
struct gui_synclist *this_list)
|
||||
{
|
||||
(void)this_list;
|
||||
switch (action)
|
||||
{
|
||||
case ACTION_ENTER_MENUITEM:
|
||||
break;
|
||||
|
||||
case ACTION_EXIT_MENUITEM: /* on exit */
|
||||
/* Playing or not */
|
||||
#ifdef HAVE_PLAY_FREQ
|
||||
if (this_item == &play_frequency)
|
||||
{
|
||||
audio_set_playback_frequency(global_settings.play_frequency);
|
||||
break;
|
||||
}
|
||||
#endif /* HAVE_PLAY_FREQ */
|
||||
break;
|
||||
}
|
||||
return action;
|
||||
(void)this_item;
|
||||
}
|
||||
/* PLAYBACK MENU */
|
||||
/***********************************/
|
||||
|
|
|
@ -3981,29 +3981,45 @@ static void audio_change_frequency_callback(unsigned short id, void *data)
|
|||
}
|
||||
}
|
||||
|
||||
void audio_set_playback_frequency(int setting)
|
||||
void audio_set_playback_frequency(unsigned int sample_rate_hz)
|
||||
{
|
||||
/* sample_rate_hz == 0 is "automatic", and also a sentinel */
|
||||
#if HAVE_PLAY_FREQ >= 192
|
||||
static const unsigned long play_sampr[] = { SAMPR_44, SAMPR_48, SAMPR_88, SAMPR_96, SAMPR_176, SAMPR_192 };
|
||||
static const unsigned int play_sampr[] = {SAMPR_44, SAMPR_48, SAMPR_88, SAMPR_96, SAMPR_176, SAMPR_192, 0 };
|
||||
#elif HAVE_PLAY_FREQ >= 96
|
||||
static const unsigned long play_sampr[] = { SAMPR_44, SAMPR_48, SAMPR_88, SAMPR_96 };
|
||||
static const unsigned int play_sampr[] = {SAMPR_44, SAMPR_48, SAMPR_88, SAMPR_96, 0 };
|
||||
#elif HAVE_PLAY_FREQ >= 48
|
||||
static const unsigned long play_sampr[] = { SAMPR_44, SAMPR_48 };
|
||||
static const unsigned int play_sampr[] = {SAMPR_44, SAMPR_48, 0 };
|
||||
#else
|
||||
#error "HAVE_PLAY_FREQ < 48 ??"
|
||||
#endif
|
||||
const unsigned int *p_sampr = play_sampr;
|
||||
unsigned int sampr = 0;
|
||||
|
||||
if ((unsigned)setting > ARRAYLEN(play_sampr)) /* [0] is "automatic" */
|
||||
setting = 0;
|
||||
while (*p_sampr != 0)
|
||||
{
|
||||
if (*p_sampr == sample_rate_hz)
|
||||
{
|
||||
sampr = *p_sampr;
|
||||
break;
|
||||
}
|
||||
p_sampr++;
|
||||
}
|
||||
|
||||
unsigned long playback_sampr = mixer_get_frequency();
|
||||
unsigned long sampr = setting ?
|
||||
play_sampr[setting - 1] :
|
||||
((audio_status() == AUDIO_STATUS_PLAY) ?
|
||||
audio_guess_frequency(audio_current_track()) :
|
||||
playback_sampr);
|
||||
if (sampr == 0)
|
||||
{
|
||||
if (audio_status() == AUDIO_STATUS_PLAY)
|
||||
{
|
||||
sampr = audio_guess_frequency(audio_current_track());
|
||||
}
|
||||
else
|
||||
{
|
||||
logf("could not set sample rate to %u hz", sample_rate_hz);
|
||||
return; /* leave as is */
|
||||
}
|
||||
}
|
||||
|
||||
if (sampr != playback_sampr)
|
||||
if (sampr != mixer_get_frequency())
|
||||
{
|
||||
mixer_set_frequency(sampr);
|
||||
LOGFQUEUE("audio >| audio Q_AUDIO_REMAKE_AUDIO_BUFFER");
|
||||
|
|
|
@ -83,7 +83,7 @@ void audio_set_cuesheet(bool enable);
|
|||
void audio_set_crossfade(int enable);
|
||||
#endif
|
||||
#ifdef HAVE_PLAY_FREQ
|
||||
void audio_set_playback_frequency(int setting);
|
||||
void audio_set_playback_frequency(unsigned int sample_rate_hz);
|
||||
#endif
|
||||
#ifdef HAVE_ALBUMART
|
||||
void set_albumart_mode(int setting);
|
||||
|
|
|
@ -41,6 +41,7 @@
|
|||
#include "kernel.h"
|
||||
#include "open_plugin.h"
|
||||
#include "misc.h"
|
||||
#include "playback.h"
|
||||
#ifdef HAVE_REMOTE_LCD
|
||||
#include "lcd-remote.h"
|
||||
#endif
|
||||
|
@ -387,7 +388,7 @@ static const char* list_pad_formatter(char *buffer, size_t buffer_size,
|
|||
{
|
||||
switch (val)
|
||||
{
|
||||
case -1: return str(LANG_AUTOMATIC);
|
||||
case -1: return str(LANG_AUTO);
|
||||
case 0: return str(LANG_OFF);
|
||||
default: break;
|
||||
}
|
||||
|
@ -399,7 +400,7 @@ static int32_t list_pad_getlang(int value, int unit)
|
|||
{
|
||||
switch (value)
|
||||
{
|
||||
case -1: return LANG_AUTOMATIC;
|
||||
case -1: return LANG_AUTO;
|
||||
case 0: return LANG_OFF;
|
||||
default: return TALK_ID(value, unit);
|
||||
}
|
||||
|
@ -619,6 +620,30 @@ static void eq_set_default(void* setting, void* defaultval)
|
|||
memcpy(setting, defaultval, sizeof(struct eq_band_setting));
|
||||
}
|
||||
|
||||
#ifdef HAVE_PLAY_FREQ
|
||||
static const char* formatter_freq_unit_0_is_auto(char *buffer, size_t buffer_size,
|
||||
int value, const char *unit)
|
||||
{
|
||||
if (value == 0)
|
||||
return str(LANG_AUTO);
|
||||
else
|
||||
return db_format(buffer, buffer_size, value / 100, unit);
|
||||
}
|
||||
|
||||
static int32_t getlang_freq_unit_0_is_auto(int value, int unit)
|
||||
{
|
||||
if (value == 0)
|
||||
return LANG_AUTO;
|
||||
else
|
||||
return talk_value_decimal(value, unit, 3, false);
|
||||
}
|
||||
|
||||
static void playback_frequency_callback(int sample_rate_hz)
|
||||
{
|
||||
audio_set_playback_frequency(sample_rate_hz);
|
||||
}
|
||||
#endif /* HAVE_PLAY_FREQ */
|
||||
|
||||
/* perform shuffle/unshuffle of the current playlist based on the boolean provided */
|
||||
static void shuffle_playlist_callback(bool shuffle)
|
||||
{
|
||||
|
@ -954,16 +979,17 @@ const struct settings_list settings[] = {
|
|||
#endif
|
||||
), /* CHOICE_SETTING( repeat_mode ) */
|
||||
#ifdef HAVE_PLAY_FREQ
|
||||
STRINGCHOICE_SETTING(0, play_frequency, LANG_FREQUENCY, 0,
|
||||
TABLE_SETTING(F_SOUNDSETTING|F_CB_ON_SELECT_ONLY|F_CB_ONLY_IF_CHANGED,
|
||||
play_frequency, LANG_FREQUENCY, 0, "playback frequency", "auto",
|
||||
UNIT_KHZ, formatter_freq_unit_0_is_auto,
|
||||
getlang_freq_unit_0_is_auto,
|
||||
playback_frequency_callback,
|
||||
#if HAVE_PLAY_FREQ >= 192
|
||||
"playback frequency", "auto,44.1 kHz,48 kHz,88.2 kHz,96 kHz,176.4 kHz,192 kHz", NULL, 7,
|
||||
LANG_AUTOMATIC, TALK_ID_DECIMAL(441, 1, UNIT_KHZ), TALK_ID(48, UNIT_KHZ), TALK_ID_DECIMAL(882, 1, UNIT_KHZ), TALK_ID(96, UNIT_KHZ), TALK_ID_DECIMAL(1764, 1, UNIT_KHZ), TALK_ID(192, UNIT_KHZ)),
|
||||
7,0,SAMPR_44,SAMPR_48,SAMPR_88,SAMPR_96,SAMPR_176,SAMPR_192),
|
||||
#elif HAVE_PLAY_FREQ >= 96
|
||||
"playback frequency", "auto,44.1 kHz,48 kHz,88.2 kHz,96 kHz", NULL, 5,
|
||||
LANG_AUTOMATIC, TALK_ID_DECIMAL(441, 1, UNIT_KHZ), TALK_ID(48, UNIT_KHZ), TALK_ID_DECIMAL(882, 1, UNIT_KHZ), TALK_ID(96, UNIT_KHZ)),
|
||||
5,0,SAMPR_44,SAMPR_48,SAMPR_88,SAMPR_96),
|
||||
#elif HAVE_PLAY_FREQ >= 48
|
||||
"playback frequency", "auto,44.1 kHz,48 kHz", NULL, 3,
|
||||
LANG_AUTOMATIC, TALK_ID_DECIMAL(441, 1, UNIT_KHZ), TALK_ID(48, UNIT_KHZ)),
|
||||
3,0,SAMPR_44,SAMPR_48),
|
||||
#else
|
||||
#error "HAVE_PLAY_FREQ < 48???"
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue