From 01650b8bc9e400d3b90ebfba403033c7a87bc35e Mon Sep 17 00:00:00 2001 From: Solomon Peachy Date: Wed, 30 Sep 2020 18:21:38 -0400 Subject: 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 --- apps/playback.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) (limited to 'apps/playback.c') diff --git a/apps/playback.c b/apps/playback.c index 504b3f4825..922837af18 100644 --- a/apps/playback.c +++ b/apps/playback.c @@ -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; -- cgit v1.2.3