From 8de7f2c6ece32e58b6e173951f0c3b4ba82129f5 Mon Sep 17 00:00:00 2001 From: andriy921 Date: Tue, 12 Apr 2016 01:01:30 +0300 Subject: [PATCH] Fix for 410 sound issue. --- src/dynamic_libs/ax_functions.c | 20 ++++++++++++++++++++ src/dynamic_libs/ax_functions.h | 1 + src/sounds/SoundHandler.cpp | 6 ++++++ 3 files changed, 27 insertions(+) diff --git a/src/dynamic_libs/ax_functions.c b/src/dynamic_libs/ax_functions.c index d84d6f8..97db459 100644 --- a/src/dynamic_libs/ax_functions.c +++ b/src/dynamic_libs/ax_functions.c @@ -72,3 +72,23 @@ void InitAXFunctionPointers(void) OS_FIND_EXPORT(sound_handle, AXSetVoiceLoopOffset); } +void ProperlyEndTransitionAudio(void) +{ + bool (* check_os_audio_transition_flag_old)(void); + void (* AXInit_old)(void); + void (* AXQuit_old)(void); + + unsigned int *funcPointer = 0; + unsigned int sound_handle; + OSDynLoad_Acquire("snd_core.rpl", &sound_handle); + + OS_FIND_EXPORT_EX(sound_handle, check_os_audio_transition_flag, check_os_audio_transition_flag_old); + OS_FIND_EXPORT_EX(sound_handle, AXInit, AXInit_old); + OS_FIND_EXPORT_EX(sound_handle, AXQuit, AXQuit_old); + + if (check_os_audio_transition_flag_old()) + { + AXInit_old(); + AXQuit_old(); + } +} \ No newline at end of file diff --git a/src/dynamic_libs/ax_functions.h b/src/dynamic_libs/ax_functions.h index df9647c..8fe8df5 100644 --- a/src/dynamic_libs/ax_functions.h +++ b/src/dynamic_libs/ax_functions.h @@ -31,6 +31,7 @@ extern "C" { #include void InitAXFunctionPointers(void); +void ProperlyEndTransitionAudio(void); extern void (* AXInitWithParams)(u32 * params); extern void (* AXQuit)(void); diff --git a/src/sounds/SoundHandler.cpp b/src/sounds/SoundHandler.cpp index 60a55a6..ebc24d6 100644 --- a/src/sounds/SoundHandler.cpp +++ b/src/sounds/SoundHandler.cpp @@ -216,6 +216,12 @@ SoundDecoder * SoundHandler::GetSoundDecoder(const u8 * sound, int length) void SoundHandler::executeThread() { + // v2 sound lib can not properly end transition audio on old firmwares. + if (OS_FIRMWARE <= 410) + { + ProperlyEndTransitionAudio(); + } + //! initialize 48 kHz renderer u32 params[3] = { 1, 0, 0 }; AXInitWithParams(params);