audio: Add support for 192 and 176KHz playback

* SAMPR_CAPS_ALL -> SAMPR_CAPS_ALL_48/96/192
 * All targets claiming SAMPR_CAPS_ALL now get appropriate subset
 * No need to explicitly define HAVE_PLAY_FREQ
 * Rates that are a multiple of 44 or 48KHz can be used for playback

Inspired by a patch by Roman Stolyarov, but substantially rewritten by myself.

Change-Id: Iaca7363521b1cb9921e047ba1004d3cbe9c9c23e
This commit is contained in:
Solomon Peachy 2020-09-30 18:21:38 -04:00
parent c2c59457e1
commit 01650b8bc9
32 changed files with 161 additions and 80 deletions

View file

@ -3820,7 +3820,29 @@ void audio_set_crossfade(int enable)
#ifdef HAVE_PLAY_FREQ
static unsigned long audio_guess_frequency(struct mp3entry *id3)
{
return (id3->frequency % 4000) ? SAMPR_44 : SAMPR_48;
switch (id3->frequency)
{
#if HAVE_PLAY_FREQ >= 48
case 44100:
return SAMPR_44;
case 48000:
return SAMPR_48;
#endif
#if HAVE_PLAY_FREQ >= 96
case 88200:
return SAMPR_88;
case 96000:
return SAMPR_96;
#endif
#if HAVE_PLAY_FREQ >= 192
case 176400:
return SAMPR_176;
case 192000:
return SAMPR_192;
#endif
default:
return (id3->frequency % 4000) ? SAMPR_44 : SAMPR_48;
}
}
static void audio_change_frequency_callback(unsigned short id, void *data)
@ -3858,7 +3880,15 @@ static void audio_change_frequency_callback(unsigned short id, void *data)
void audio_set_playback_frequency(int setting)
{
#if HAVE_PLAY_FREQ >= 192
static const unsigned long play_sampr[] = { SAMPR_44, SAMPR_48, SAMPR_88, SAMPR_96, SAMPR_176, SAMPR_192 };
#elif HAVE_PLAY_FREQ >= 96
static const unsigned long play_sampr[] = { SAMPR_44, SAMPR_48, SAMPR_88, SAMPR_96 };
#elif HAVE_PLAY_FREQ >= 48
static const unsigned long play_sampr[] = { SAMPR_44, SAMPR_48 };
#else
#error "HAVE_PLAY_FREQ < 48 ??"
#endif
if ((unsigned)setting > ARRAYLEN(play_sampr)) /* [0] is "automatic" */
setting = 0;