Skip to content

Commit 1093828

Browse files
author
fdelapena
authored
Merge pull request #3332 from Ghabry/wii-sdl2
Wii: Add SDL2 support
2 parents ab29d95 + fa09f89 commit 1093828

File tree

10 files changed

+203
-76
lines changed

10 files changed

+203
-76
lines changed

CMakeLists.txt

Lines changed: 81 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -555,7 +555,10 @@ elseif(NINTENDO_SWITCH)
555555
elseif(VITA)
556556
set(PLAYER_TARGET_PLATFORM "psvita" CACHE STRING "Platform to compile for.")
557557
elseif(NINTENDO_WII)
558-
set(PLAYER_TARGET_PLATFORM "wii" CACHE STRING "Platform to compile for.")
558+
set(PLAYER_TARGET_PLATFORM "SDL2" CACHE STRING "Platform to compile for. Options: SDL2 SDL1")
559+
set(PLAYER_AUDIO_BACKEND "AESND" CACHE STRING "Audio system to use. Options: SDL2 SDL1 AESND OFF")
560+
set_property(CACHE PLAYER_TARGET_PLATFORM PROPERTY STRINGS SDL2 SDL1)
561+
set_property(CACHE PLAYER_AUDIO_BACKEND PROPERTY STRINGS SDL2 SDL1 AESND)
559562
elseif(NINTENDO_WIIU)
560563
set(PLAYER_TARGET_PLATFORM "SDL2" CACHE STRING "Platform to compile for.")
561564
elseif(AMIGA)
@@ -578,8 +581,6 @@ endif()
578581

579582
if(${PLAYER_TARGET_PLATFORM} STREQUAL "SDL2")
580583
target_sources(${PROJECT_NAME} PRIVATE
581-
src/platform/sdl/sdl_audio.cpp
582-
src/platform/sdl/sdl_audio.h
583584
src/platform/sdl/sdl2_ui.cpp
584585
src/platform/sdl/sdl2_ui.h)
585586
target_compile_definitions(${PROJECT_NAME} PUBLIC USE_SDL=2)
@@ -597,9 +598,12 @@ if(${PLAYER_TARGET_PLATFORM} STREQUAL "SDL2")
597598

598599
if(ANDROID)
599600
set(PLAYER_BUILD_EXECUTABLE OFF)
600-
endif()
601-
602-
if(NINTENDO_WIIU)
601+
elseif(NINTENDO_WII)
602+
target_compile_definitions(${PROJECT_NAME} PUBLIC PLAYER_NINTENDO)
603+
target_sources(${PROJECT_NAME} PRIVATE
604+
src/platform/wii/clock.h
605+
src/platform/wii/input_buttons.cpp)
606+
elseif(NINTENDO_WIIU)
603607
target_compile_definitions(${PROJECT_NAME} PUBLIC PLAYER_NINTENDO)
604608
target_sources(${PROJECT_NAME} PRIVATE
605609
src/platform/wiiu/main.h
@@ -610,15 +614,25 @@ if(${PLAYER_TARGET_PLATFORM} STREQUAL "SDL2")
610614
target_link_libraries(${PROJECT_NAME} "Dwmapi")
611615
endif()
612616
elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "SDL1")
617+
if(NINTENDO_WII)
618+
find_package(SDL REQUIRED)
619+
target_compile_definitions(${PROJECT_NAME} PUBLIC PLAYER_NINTENDO)
620+
target_include_directories(${PROJECT_NAME} PUBLIC ${SDL_INCLUDE_DIR})
621+
target_sources(${PROJECT_NAME} PRIVATE
622+
src/platform/wii/clock.h
623+
src/platform/wii/input_buttons.cpp)
624+
else()
625+
player_find_package(NAME SDL1 TARGET SDL::SDLmain REQUIRED)
626+
endif()
627+
613628
target_sources(${PROJECT_NAME} PRIVATE
614-
src/platform/sdl/sdl_audio.cpp
615-
src/platform/sdl/sdl_audio.h
616629
src/platform/sdl/axis.h
617630
src/platform/sdl/sdl_ui.cpp
618631
src/platform/sdl/sdl_ui.h)
619-
target_compile_definitions(${PROJECT_NAME} PUBLIC USE_SDL=1)
620-
621-
player_find_package(NAME SDL1 TARGET SDL::SDLmain REQUIRED)
632+
target_compile_definitions(${PROJECT_NAME} PUBLIC
633+
USE_SDL=1
634+
EASYRPG_CONFIG_NAME="config_sdl1.ini"
635+
)
622636
elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "libretro")
623637
target_compile_definitions(${PROJECT_NAME} PUBLIC PLAYER_UI=LibretroUi USE_LIBRETRO=1)
624638
set(PLAYER_BUILD_EXECUTABLE OFF)
@@ -682,31 +696,63 @@ elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "switch")
682696
src/platform/switch/ui.cpp
683697
src/platform/switch/ui.h)
684698
target_link_libraries(${PROJECT_NAME} switch-assets)
685-
elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "wii")
686-
find_package(SDL REQUIRED)
687-
target_compile_definitions(${PROJECT_NAME} PUBLIC USE_SDL=1 PLAYER_NINTENDO)
688-
target_include_directories(${PROJECT_NAME} PUBLIC ${SDL_INCLUDE_DIR})
699+
else()
700+
message(FATAL_ERROR "Invalid target platform")
701+
endif()
702+
703+
# Sound system to use
704+
if(PLAYER_AUDIO_BACKEND)
705+
# already set earlier in the platform config
706+
elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "SDL2")
707+
set(PLAYER_AUDIO_BACKEND "SDL2" CACHE STRING "Audio system to use. Options: SDL2 OFF")
708+
set_property(CACHE PLAYER_AUDIO_BACKEND PROPERTY STRINGS SDL2 OFF)
709+
710+
if(${PLAYER_AUDIO_BACKEND} STREQUAL "SDL2_mixer")
711+
message(FATAL_ERROR "SDL2_mixer is not supported anymore. Use SDL2 instead.")
712+
endif()
713+
elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "SDL1")
714+
set(PLAYER_AUDIO_BACKEND "SDL1" CACHE STRING "Audio system to use. Options: SDL1 OFF")
715+
set_property(CACHE PLAYER_AUDIO_BACKEND PROPERTY STRINGS SDL1 OFF)
716+
else()
717+
# Assuming that all platforms not targeting SDL have only one audio backend
718+
set(PLAYER_AUDIO_BACKEND ${PLAYER_TARGET_PLATFORM} CACHE STRING "Audio system to use. Options: ${PLAYER_TARGET_PLATFORM} OFF")
719+
set_property(CACHE PLAYER_AUDIO_BACKEND PROPERTY STRINGS ${PLAYER_TARGET_PLATFORM} OFF)
720+
endif()
721+
722+
set(PLAYER_HAS_AUDIO ON)
723+
if(${PLAYER_AUDIO_BACKEND} STREQUAL "SDL1")
724+
target_sources(${PROJECT_NAME} PRIVATE
725+
src/platform/sdl/sdl_audio.cpp
726+
src/platform/sdl/sdl_audio.h)
727+
elseif(${PLAYER_AUDIO_BACKEND} STREQUAL "SDL2")
728+
target_sources(${PROJECT_NAME} PRIVATE
729+
src/platform/sdl/sdl_audio.cpp
730+
src/platform/sdl/sdl_audio.h)
731+
elseif(${PLAYER_AUDIO_BACKEND} STREQUAL "AESND")
689732
target_sources(${PROJECT_NAME} PRIVATE
690733
src/platform/wii/audio.cpp
691-
src/platform/wii/audio.h
692-
src/platform/wii/clock.h
693-
src/platform/wii/input_buttons.cpp
694-
src/platform/sdl/axis.h
695-
src/platform/sdl/sdl_ui.cpp
696-
src/platform/sdl/sdl_ui.h)
734+
src/platform/wii/audio.h)
735+
target_compile_definitions(${PROJECT_NAME} PUBLIC AUDIO_AESND=1)
736+
elseif(${PLAYER_AUDIO_BACKEND} STREQUAL ${PLAYER_TARGET_PLATFORM})
737+
738+
elseif(${PLAYER_AUDIO_BACKED} STREQUAL "OFF")
739+
set(PLAYER_HAS_AUDIO OFF)
697740
else()
698-
message(FATAL_ERROR "Invalid target platform")
741+
message(FATAL_ERROR "Invalid Audio Backend ${PLAYER_AUDIO_BACKEND}")
699742
endif()
700743

701744
# Shared by homebrew platforms
702-
if(${PLAYER_TARGET_PLATFORM} MATCHES "^(3ds|psvita|switch|wii)$" OR NINTENDO_WIIU)
745+
if(NINTENDO_3DS OR NINTENDO_WII OR NINTENDO_WIIU OR NINTENDO_WIIU OR NINTENDO_SWITCH OR VITA)
703746
target_compile_options(${PROJECT_NAME} PUBLIC -fno-exceptions -fno-rtti)
704747
set(CMAKE_DL_LIBS "") # hack4icu!
705748
set(PLAYER_ENABLE_TESTS OFF)
706749
option(PLAYER_VERSIONED_PACKAGES "Create zip packages with versioned name (for internal use)" ON)
750+
set(PLAYER_CONSOLE_PORT ON)
751+
else()
752+
set(PLAYER_CONSOLE_PORT OFF)
707753
endif()
708754
# Make content available (romfs/wuhb bundle)
709-
if(${PLAYER_TARGET_PLATFORM} MATCHES "^(3ds|switch)$" OR NINTENDO_WIIU)
755+
if(NINTENDO_3DS OR NINTENDO_WIIU OR NINTENDO_SWITCH)
710756
option(PLAYER_BUNDLE "Embed a directory in the executable" OFF)
711757
set(PLAYER_BUNDLE_PATH "content" CACHE PATH "Directory to include in executable")
712758
set(BUNDLE_ARG "_IGNORE_ME")
@@ -851,8 +897,7 @@ target_link_libraries(${PROJECT_NAME} PIXMAN::PIXMAN)
851897

852898
# Always enable Wine registry support on non-Windows, but not for console ports
853899
if(NOT CMAKE_SYSTEM_NAME STREQUAL "Windows"
854-
AND NOT ${PLAYER_TARGET_PLATFORM} MATCHES "^(psvita|3ds|switch|wii)$"
855-
AND NOT NINTENDO_WIIU)
900+
AND NOT PLAYER_CONSOLE)
856901
target_compile_definitions(${PROJECT_NAME} PUBLIC HAVE_WINE=1)
857902
endif()
858903

@@ -903,26 +948,8 @@ else()
903948
)
904949
endif()
905950

906-
# Sound system to use
907-
if(${PLAYER_TARGET_PLATFORM} STREQUAL "SDL2")
908-
set(PLAYER_AUDIO_BACKEND "SDL2" CACHE STRING "Audio system to use. Options: SDL2 OFF")
909-
set_property(CACHE PLAYER_AUDIO_BACKEND PROPERTY STRINGS SDL2 OFF)
910-
911-
if(${PLAYER_AUDIO_BACKEND} STREQUAL "SDL2_mixer")
912-
message(FATAL_ERROR "SDL2_mixer is not supported anymore. Use SDL2 instead.")
913-
endif()
914-
elseif(${PLAYER_TARGET_PLATFORM} STREQUAL "SDL1")
915-
set(PLAYER_AUDIO_BACKEND "SDL1" CACHE STRING "Audio system to use. Options: SDL1 OFF")
916-
set_property(CACHE PLAYER_AUDIO_BACKEND PROPERTY STRINGS SDL1 OFF)
917-
else()
918-
# Assuming that all platforms not targeting SDL have only one audio backend
919-
set(PLAYER_AUDIO_BACKEND "Default" CACHE STRING "Audio system to use. Options: Default OFF")
920-
set_property(CACHE PLAYER_AUDIO_BACKEND PROPERTY STRINGS Default OFF)
921-
endif()
922-
923951
# Configure Audio backends
924-
if(${PLAYER_AUDIO_BACKEND} MATCHES "^(SDL[12]|Default)$")
925-
set(PLAYER_HAS_AUDIO ON)
952+
if(PLAYER_HAS_AUDIO)
926953
target_compile_definitions(${PROJECT_NAME} PUBLIC SUPPORT_AUDIO=1)
927954

928955
if(${PLAYER_TARGET_PLATFORM} STREQUAL "libretro")
@@ -964,10 +991,6 @@ if(${PLAYER_AUDIO_BACKEND} MATCHES "^(SDL[12]|Default)$")
964991
if(PLAYER_ENABLE_FMMIDI)
965992
target_compile_definitions(${PROJECT_NAME} PUBLIC WANT_FMMIDI=1)
966993
endif()
967-
elseif(NOT PLAYER_AUDIO_BACKEND)
968-
set(PLAYER_HAS_AUDIO OFF)
969-
else()
970-
message(FATAL_ERROR "Invalid Audio Backend ${PLAYER_AUDIO_BACKEND}")
971994
endif()
972995

973996
CMAKE_DEPENDENT_OPTION(PLAYER_WITH_MPG123 "Play MP3 audio with libmpg123" ON "PLAYER_HAS_AUDIO" OFF)
@@ -980,7 +1003,7 @@ CMAKE_DEPENDENT_OPTION(PLAYER_WITH_FLUIDLITE "Play MIDI audio with fluidlite" ON
9801003
CMAKE_DEPENDENT_OPTION(PLAYER_WITH_XMP "Play MOD audio with libxmp" ON "PLAYER_HAS_AUDIO" OFF)
9811004
CMAKE_DEPENDENT_OPTION(PLAYER_ENABLE_DRWAV "Play WAV audio with dr_wav (built-in). Unsupported files are played by libsndfile." ON "PLAYER_HAS_AUDIO" OFF)
9821005

983-
if(${PLAYER_AUDIO_BACKEND} MATCHES "^(SDL[12]|Default)$")
1006+
if(PLAYER_HAS_AUDIO)
9841007
set(PLAYER_AUDIO_RESAMPLER "Auto" CACHE STRING "Audio resampler to use. Options: Auto speexdsp samplerate OFF")
9851008
set_property(CACHE PLAYER_AUDIO_RESAMPLER PROPERTY STRINGS Auto speexdsp samplerate OFF)
9861009

@@ -1096,7 +1119,7 @@ if(${PLAYER_AUDIO_BACKEND} MATCHES "^(SDL[12]|Default)$")
10961119
endif()
10971120

10981121
# Executable
1099-
if(${PLAYER_BUILD_EXECUTABLE} AND ${PLAYER_TARGET_PLATFORM} MATCHES "^SDL[12]$" AND NOT NINTENDO_WIIU)
1122+
if(${PLAYER_BUILD_EXECUTABLE} AND ${PLAYER_TARGET_PLATFORM} MATCHES "^SDL.*$" AND NOT PLAYER_CONSOLE_PORT)
11001123
if(APPLE)
11011124
set(EXE_NAME "EasyRPG-Player.app")
11021125
set_source_files_properties(${${PROJECT_NAME}_BUNDLE_ICON} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
@@ -1198,7 +1221,7 @@ if(${PLAYER_BUILD_EXECUTABLE} AND ${PLAYER_TARGET_PLATFORM} MATCHES "^SDL[12]$"
11981221
endif()
11991222
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PLAYER_JS_OUTPUT_NAME}.wasm DESTINATION ${CMAKE_INSTALL_BINDIR})
12001223
endif()
1201-
elseif(${PLAYER_TARGET_PLATFORM} MATCHES "^(psvita|3ds|switch|wii)$" OR NINTENDO_WIIU)
1224+
elseif(PLAYER_CONSOLE_PORT)
12021225
set(CPACK_PLATFORM "${PLAYER_TARGET_PLATFORM}")
12031226
if(NINTENDO_3DS)
12041227
add_executable(easyrpg-player src/platform/3ds/main.cpp)
@@ -1240,6 +1263,10 @@ elseif(${PLAYER_TARGET_PLATFORM} MATCHES "^(psvita|3ds|switch|wii)$" OR NINTENDO
12401263
-laesnd
12411264
-lfat
12421265
-lwiikeyboard)
1266+
if(TARGET SDL2::SDL2main)
1267+
# Missing dependency?
1268+
target_link_libraries(SDL2::SDL2main INTERFACE -lfat)
1269+
endif()
12431270
ogc_create_dol(easyrpg-player)
12441271
string(TIMESTAMP WII_DATE "%Y%m%d000000")
12451272
configure_file(resources/wii/meta.xml.in resources/wii/meta.xml @ONLY)
@@ -1299,7 +1326,7 @@ elseif(${PLAYER_TARGET_PLATFORM} MATCHES "^(psvita|3ds|switch|wii)$" OR NINTENDO
12991326
endif()
13001327
install(TARGETS easyrpg-player RUNTIME DESTINATION . COMPONENT debug)
13011328
# debug information
1302-
if(${PLAYER_TARGET_PLATFORM} MATCHES "^(3ds|switch|wii)$" OR NINTENDO_WIIU)
1329+
if(NINTENDO_3DS OR NINTENDO_WII OR NINTENDO_WIIU OR NINTENDO_SWITCH)
13031330
dkp_target_generate_symbol_list(easyrpg-player)
13041331
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/easyrpg-player.map
13051332
${CMAKE_CURRENT_BINARY_DIR}/easyrpg-player.lst
@@ -1506,7 +1533,7 @@ if(PLAYER_BUILD_LIBLCF)
15061533
endif()
15071534

15081535
message(STATUS "Audio backend: ${PLAYER_AUDIO_BACKEND}")
1509-
if(${PLAYER_AUDIO_BACKEND} MATCHES "^(SDL[12]|Default)$")
1536+
if(PLAYER_HAS_AUDIO)
15101537
message(STATUS "")
15111538

15121539
set(WAV_LIBS)

src/decoder_oggvorbis.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,14 @@ int OggVorbisDecoder::FillBuffer(uint8_t* buffer, int length) {
207207
#ifdef HAVE_TREMOR
208208
read = ov_read(ovf, reinterpret_cast<char*>(buffer + length - to_read), to_read, &section);
209209
#else
210-
read = ov_read(ovf, reinterpret_cast<char*>(buffer + length - to_read), to_read, 0/*LE*/, 2/*16bit*/, 1/*signed*/, &section);
210+
# if defined(__WIIU__)
211+
// FIXME: This is the endianess of the audio and not of the host but the byteswapping in ov_read does
212+
// not sound like it works
213+
int byte_order = 1; // BE
214+
# else
215+
int byte_order = 0; // LE
216+
#endif
217+
read = ov_read(ovf, reinterpret_cast<char*>(buffer + length - to_read), to_read, byte_order, 2/*16bit*/, 1/*signed*/, &section);
211218
#endif
212219
// stop decoding when error or end of file
213220
if (read <= 0)

src/game_config.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,12 @@ namespace {
3737
std::string config_path;
3838
std::string soundfont_path;
3939
std::string font_path;
40-
StringView config_name = "config.ini";
40+
#if USE_SDL == 1
41+
// For SDL1 hardcode a different config file because it uses a completely different mapping for gamepads
42+
StringView config_name = "config_sdl1.ini";
43+
#else
44+
StringView config_name = EASYRPG_CONFIG_NAME;
45+
#endif
4146
}
4247

4348
void Game_ConfigPlayer::Hide() {
@@ -93,7 +98,6 @@ Game_Config Game_Config::Create(CmdlineParser& cp) {
9398
cfg.input.gamepad_swap_ab_and_xy.Set(true);
9499
#endif
95100

96-
97101
cp.Rewind();
98102

99103
config_path = GetConfigPath(cp);

src/game_interpreter.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4041,6 +4041,12 @@ bool Game_Interpreter::CommandToggleFullscreen(lcf::rpg::EventCommand const& /*
40414041
return true;
40424042
}
40434043

4044+
auto cfg = DisplayUi->GetConfig();
4045+
if (!cfg.fullscreen.IsOptionVisible() || cfg.fullscreen.IsLocked()) {
4046+
Output::Debug("ToggleFullscreen: Not supported on this platform");
4047+
return true;
4048+
}
4049+
40444050
DisplayUi->ToggleFullscreen();
40454051
return true;
40464052
}

src/options.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@
5656
#define INI_NAME "RPG_RT.ini"
5757
#define EASYRPG_INI_NAME "EasyRPG.ini"
5858

59+
#ifndef EASYRPG_CONFIG_NAME
60+
# define EASYRPG_CONFIG_NAME "config.ini"
61+
#endif
62+
5963
/** Prefix for .ldb and .lmt files; used when guessing non-standard extensions. */
6064
#define RPG_RT_PREFIX "RPG_RT"
6165
#define EASY_RT_PREFIX "EASY_RT"

src/platform/sdl/sdl2_ui.cpp

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,11 @@
4848
#endif
4949

5050
#ifdef SUPPORT_AUDIO
51-
# include "sdl_audio.h"
51+
# if AUDIO_AESND
52+
# include "platform/wii/audio.h"
53+
# else
54+
# include "sdl_audio.h"
55+
# endif
5256

5357
AudioInterface& Sdl2Ui::GetAudio() {
5458
return *audio_;
@@ -198,10 +202,11 @@ Sdl2Ui::Sdl2Ui(long width, long height, const Game_Config& cfg) : BaseUi(cfg)
198202
#endif
199203

200204
#ifdef SUPPORT_AUDIO
201-
if (!Player::no_audio_flag) {
205+
# ifdef AUDIO_AESND
206+
audio_ = std::make_unique<WiiAudio>(cfg.audio);
207+
# else
202208
audio_ = std::make_unique<SdlAudio>(cfg.audio);
203-
return;
204-
}
209+
# endif
205210
#endif
206211
}
207212

@@ -1263,6 +1268,8 @@ int FilterUntilFocus(const SDL_Event* evnt) {
12631268
void Sdl2Ui::vGetConfig(Game_ConfigVideo& cfg) const {
12641269
#ifdef EMSCRIPTEN
12651270
cfg.renderer.Lock("SDL2 (Software, Emscripten)");
1271+
#elif defined(__wii__)
1272+
cfg.renderer.Lock("SDL2 (Software, Wii)");
12661273
#elif defined(__WIIU__)
12671274
cfg.renderer.Lock("SDL2 (Software, Wii U)");
12681275
#else
@@ -1296,6 +1303,8 @@ void Sdl2Ui::vGetConfig(Game_ConfigVideo& cfg) const {
12961303
cfg.vsync.SetOptionVisible(false);
12971304
cfg.pause_when_focus_lost.Lock(false);
12981305
cfg.pause_when_focus_lost.SetOptionVisible(false);
1306+
#elif defined(__wii__)
1307+
cfg.fullscreen.SetOptionVisible(false);
12991308
#elif defined(__WIIU__)
13001309
// Only makes the screen flicker
13011310
cfg.fullscreen.SetOptionVisible(false);

src/platform/sdl/sdl_ui.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
#include "bitmap.h"
3030

3131
#ifdef SUPPORT_AUDIO
32-
# ifdef __wii__
32+
# if AUDIO_AESND
3333
# include "platform/wii/audio.h"
3434
# else
3535
# include "sdl_audio.h"
@@ -167,7 +167,7 @@ SdlUi::SdlUi(long width, long height, const Game_Config& cfg) : BaseUi(cfg)
167167

168168
#ifdef SUPPORT_AUDIO
169169
if (!Player::no_audio_flag) {
170-
# ifdef __wii__
170+
# ifdef AUDIO_AESND
171171
audio_ = std::make_unique<WiiAudio>(cfg.audio);
172172
# else
173173
audio_ = std::make_unique<SdlAudio>(cfg.audio);

src/platform/wii/audio.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,16 +53,18 @@ static void VoiceStreamCallback(AESNDPB *pb, u32 state) {
5353

5454
static void *AudioThread (void *) {
5555
while (!stopaudio) {
56+
instance->LockMutex();
57+
5658
// clear old data
5759
memset(buffer[cur_buf], 0, SNDBUFFERSIZE);
5860

59-
instance->LockMutex();
6061
instance->Decode(buffer[cur_buf], SNDBUFFERSIZE);
61-
instance->UnlockMutex();
6262

6363
// make sure data is in main memory
6464
DCFlushRange(buffer[cur_buf], SNDBUFFERSIZE);
6565

66+
instance->UnlockMutex();
67+
6668
LWP_ThreadSleep(audioqueue);
6769
}
6870
return nullptr;

0 commit comments

Comments
 (0)