From 2a667d1d53c14989e4451086d5cfc4081fbdc393 Mon Sep 17 00:00:00 2001 From: Damjan Adamic Date: Sat, 25 Apr 2015 17:27:31 +0200 Subject: [PATCH] Proper SDL library initialization for Audio and Joystick subsystems (ported from master) --- companion/src/companion.cpp | 20 +++++++++++++++++++- companion/src/simulation/joystick.cpp | 6 ++---- companion/src/simulator.cpp | 18 ++++++++++++++++++ radio/src/simu.cpp | 11 +++++++++++ radio/src/targets/simu/simpgmspace.cpp | 5 +++++ 5 files changed, 55 insertions(+), 5 deletions(-) diff --git a/companion/src/companion.cpp b/companion/src/companion.cpp index 429951610..71641ee67 100644 --- a/companion/src/companion.cpp +++ b/companion/src/companion.cpp @@ -48,6 +48,9 @@ #include #include #include +#if defined(JOYSTICKS) || defined(SIMU_AUDIO) + #include +#endif #include "mainwindow.h" #include "eeprominterface.h" #include "appdata.h" @@ -95,7 +98,18 @@ int main(int argc, char *argv[]) app.installTranslator(&qtTranslator); QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); - + +#if defined(JOYSTICKS) || defined(SIMU_AUDIO) + uint32_t sdlFlags = 0; + #ifdef JOYSTICKS + sdlFlags |= SDL_INIT_JOYSTICK; + #endif + #ifdef SIMU_AUDIO + sdlFlags |= SDL_INIT_AUDIO; + #endif + SDL_Init(sdlFlags); +#endif + registerEEpromInterfaces(); registerOpenTxFirmwares(); registerSimulators(); @@ -134,5 +148,9 @@ int main(int argc, char *argv[]) unregisterFirmwares(); unregisterEEpromInterfaces(); +#if defined(JOYSTICKS) || defined(SIMU_AUDIO) + SDL_Quit(); +#endif + return result; } diff --git a/companion/src/simulation/joystick.cpp b/companion/src/simulation/joystick.cpp index befe811ab..a752630a9 100644 --- a/companion/src/simulation/joystick.cpp +++ b/companion/src/simulation/joystick.cpp @@ -3,13 +3,13 @@ Joystick::Joystick(QObject *parent, int joystickEventTimeout, bool doAutoRepeat, int repeatDelay) : QObject(parent) { - if ( SDL_Init(SDL_INIT_JOYSTICK) == 0 ) { + if ( SDL_WasInit(SDL_INIT_JOYSTICK) ) { int i; for (i = 0; i < SDL_NumJoysticks(); i++) joystickNames.append(SDL_JoystickName(i)); connect(&joystickTimer, SIGNAL(timeout()), this, SLOT(processEvents())); } else { - fprintf(stderr, "ERROR: couldn't initialize SDL joystick support"); + fprintf(stderr, "ERROR: couldn't initialize SDL joystick support\n"); } joystick = NULL; @@ -23,8 +23,6 @@ Joystick::~Joystick() { if ( isOpen() ) close(); - - SDL_Quit(); } bool Joystick::open(int stick) diff --git a/companion/src/simulator.cpp b/companion/src/simulator.cpp index e6f546f94..511defd3d 100644 --- a/companion/src/simulator.cpp +++ b/companion/src/simulator.cpp @@ -48,6 +48,9 @@ #include #include #include +#if defined(JOYSTICKS) || defined(SIMU_AUDIO) + #include +#endif #include "simulatordialog.h" #include "eeprominterface.h" @@ -98,6 +101,17 @@ int main(int argc, char *argv[]) QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); +#if defined(JOYSTICKS) || defined(SIMU_AUDIO) + uint32_t sdlFlags = 0; + #ifdef JOYSTICKS + sdlFlags |= SDL_INIT_JOYSTICK; + #endif + #ifdef SIMU_AUDIO + sdlFlags |= SDL_INIT_AUDIO; + #endif + SDL_Init(sdlFlags); +#endif + SimulatorDialog *dialog; QString eepromFileName; QDir eedir; @@ -160,5 +174,9 @@ int main(int argc, char *argv[]) delete dialog; +#if defined(JOYSTICKS) || defined(SIMU_AUDIO) + SDL_Quit(); +#endif + return result; } diff --git a/radio/src/simu.cpp b/radio/src/simu.cpp index ef26ebd3f..fb0f3dfd9 100644 --- a/radio/src/simu.cpp +++ b/radio/src/simu.cpp @@ -42,6 +42,9 @@ #include "opentx.h" #include #include +#if defined(SIMU_AUDIO) + #include +#endif #if LCD_W > 212 #define LCD_ZOOM 1 @@ -95,6 +98,10 @@ Open9xSim::Open9xSim(FXApp* a): memset(displayBuf, 0, DISPLAY_BUFER_SIZE); bmp = new FXPPMImage(getApp(),NULL,IMAGE_OWNED|IMAGE_KEEP|IMAGE_SHMI|IMAGE_SHMP, W2, H2); +#if defined(SIMU_AUDIO) + SDL_Init(SDL_INIT_AUDIO); +#endif + FXHorizontalFrame *hf11=new FXHorizontalFrame(this,LAYOUT_CENTER_X); FXHorizontalFrame *hf1=new FXHorizontalFrame(this,LAYOUT_FILL_X); @@ -152,6 +159,10 @@ Open9xSim::~Open9xSim() } delete bmf; + +#if defined(SIMU_AUDIO) + SDL_Quit(); +#endif } void Open9xSim::makeSnapshot(const FXDrawable* drawable) diff --git a/radio/src/targets/simu/simpgmspace.cpp b/radio/src/targets/simu/simpgmspace.cpp index fcd0c1249..f3a7d7788 100644 --- a/radio/src/targets/simu/simpgmspace.cpp +++ b/radio/src/targets/simu/simpgmspace.cpp @@ -498,6 +498,11 @@ bool audio_thread_running = false; void *audio_thread(void *) { + if ( !SDL_WasInit(SDL_INIT_AUDIO) ) { + fprintf(stderr, "ERROR: couldn't initialize SDL audio support\n"); + return 0; + } + SDL_AudioSpec wanted, have; /* Set the audio format */