From ef68c84e76bfd95b454bcbc3eec4d6946d23a282 Mon Sep 17 00:00:00 2001 From: Jeffrey Pfau Date: Tue, 9 Feb 2016 20:40:49 -0800 Subject: [PATCH] SDL: Remove GBAThread reference --- src/platform/qt/AudioDevice.cpp | 1 - src/platform/qt/AudioProcessorQt.cpp | 2 +- src/platform/qt/AudioProcessorSDL.cpp | 38 +++++++++++---------------- src/platform/qt/AudioProcessorSDL.h | 1 + src/platform/sdl/main.c | 6 +---- src/platform/sdl/sdl-audio.c | 3 ++- src/platform/sdl/sdl-audio.h | 4 +-- 7 files changed, 22 insertions(+), 33 deletions(-) diff --git a/src/platform/qt/AudioDevice.cpp b/src/platform/qt/AudioDevice.cpp index 9dc5a33c0..5f61dbb58 100644 --- a/src/platform/qt/AudioDevice.cpp +++ b/src/platform/qt/AudioDevice.cpp @@ -9,7 +9,6 @@ extern "C" { #include "core/thread.h" -#include "gba/gba.h" #include "gba/audio.h" } diff --git a/src/platform/qt/AudioProcessorQt.cpp b/src/platform/qt/AudioProcessorQt.cpp index c20a66c9c..90fca2887 100644 --- a/src/platform/qt/AudioProcessorQt.cpp +++ b/src/platform/qt/AudioProcessorQt.cpp @@ -11,7 +11,7 @@ #include extern "C" { -#include "gba/supervisor/thread.h" +#include "core/thread.h" } using namespace QGBA; diff --git a/src/platform/qt/AudioProcessorSDL.cpp b/src/platform/qt/AudioProcessorSDL.cpp index 3531059f2..8192eedda 100644 --- a/src/platform/qt/AudioProcessorSDL.cpp +++ b/src/platform/qt/AudioProcessorSDL.cpp @@ -7,10 +7,6 @@ #include "LogController.h" -extern "C" { -#include "gba/supervisor/thread.h" -} - using namespace QGBA; AudioProcessorSDL::AudioProcessorSDL(QObject* parent) @@ -23,26 +19,28 @@ AudioProcessorSDL::~AudioProcessorSDL() { mSDLDeinitAudio(&m_audio); } +void AudioProcessorSDL::setInput(mCoreThread* input) { + AudioProcessor::setInput(input); + if (m_audio.core) { + mSDLDeinitAudio(&m_audio); + mSDLInitAudio(&m_audio, input); + } +} + bool AudioProcessorSDL::start() { if (!input()) { LOG(QT, WARN) << tr("Can't start an audio processor without input"); return false; } - if (m_audio.thread) { + if (m_audio.core) { mSDLResumeAudio(&m_audio); return true; } else { if (!m_audio.samples) { m_audio.samples = 2048; // TODO? } - if (mSDLInitAudio(&m_audio, nullptr)) { - m_audio.core = input()->core; - m_audio.sync = &input()->sync; - mSDLResumeAudio(&m_audio); - return true; - } - return false; + return mSDLInitAudio(&m_audio, input()); } } @@ -53,12 +51,9 @@ void AudioProcessorSDL::pause() { void AudioProcessorSDL::setBufferSamples(int samples) { AudioProcessor::setBufferSamples(samples); m_audio.samples = samples; - if (m_audio.thread) { + if (m_audio.core) { mSDLDeinitAudio(&m_audio); - mSDLInitAudio(&m_audio, nullptr); - m_audio.core = input()->core; - m_audio.sync = &input()->sync; - mSDLResumeAudio(&m_audio); + mSDLInitAudio(&m_audio, input()); } } @@ -67,17 +62,14 @@ void AudioProcessorSDL::inputParametersChanged() { void AudioProcessorSDL::requestSampleRate(unsigned rate) { m_audio.sampleRate = rate; - if (m_audio.thread) { + if (m_audio.core) { mSDLDeinitAudio(&m_audio); - mSDLInitAudio(&m_audio, nullptr); - m_audio.core = input()->core; - m_audio.sync = &input()->sync; - mSDLResumeAudio(&m_audio); + mSDLInitAudio(&m_audio, input()); } } unsigned AudioProcessorSDL::sampleRate() const { - if (m_audio.thread) { + if (m_audio.core) { return m_audio.obtainedSpec.freq; } else { return 0; diff --git a/src/platform/qt/AudioProcessorSDL.h b/src/platform/qt/AudioProcessorSDL.h index f9108539f..eed10f43f 100644 --- a/src/platform/qt/AudioProcessorSDL.h +++ b/src/platform/qt/AudioProcessorSDL.h @@ -22,6 +22,7 @@ public: AudioProcessorSDL(QObject* parent = nullptr); ~AudioProcessorSDL(); + virtual void setInput(mCoreThread* input) override; virtual unsigned sampleRate() const override; public slots: diff --git a/src/platform/sdl/main.c b/src/platform/sdl/main.c index 0c0791879..dd0158ab2 100644 --- a/src/platform/sdl/main.c +++ b/src/platform/sdl/main.c @@ -174,17 +174,13 @@ int mSDLRun(struct mSDLRenderer* renderer, struct mArguments* args) { renderer->audio.samples = renderer->core->opts.audioBuffers; renderer->audio.sampleRate = 44100; - bool didFail = !mSDLInitAudio(&renderer->audio, 0); + bool didFail = !mSDLInitAudio(&renderer->audio, &thread); if (!didFail) { #if SDL_VERSION_ATLEAST(2, 0, 0) mSDLSetScreensaverSuspendable(&renderer->events, renderer->core->opts.suspendScreensaver); mSDLSuspendScreensaver(&renderer->events); #endif - renderer->audio.core = renderer->core; - renderer->audio.sync = &thread.sync; - if (mCoreThreadStart(&thread)) { - mSDLResumeAudio(&renderer->audio); renderer->runloop(renderer, &thread); mCoreThreadJoin(&thread); } else { diff --git a/src/platform/sdl/sdl-audio.c b/src/platform/sdl/sdl-audio.c index 7001f7b04..e54e5ebfc 100644 --- a/src/platform/sdl/sdl-audio.c +++ b/src/platform/sdl/sdl-audio.c @@ -14,7 +14,7 @@ static void _mSDLAudioCallback(void* context, Uint8* data, int len); -bool mSDLInitAudio(struct mSDLAudio* context, struct GBAThread* threadContext) { +bool mSDLInitAudio(struct mSDLAudio* context, struct mCoreThread* threadContext) { if (SDL_InitSubSystem(SDL_INIT_AUDIO) < 0) { GBALog(0, GBA_LOG_ERROR, "Could not initialize SDL sound system: %s", SDL_GetError()); return false; @@ -40,6 +40,7 @@ bool mSDLInitAudio(struct mSDLAudio* context, struct GBAThread* threadContext) { context->core = 0; if (threadContext) { + context->core = threadContext->core; context->sync = &threadContext->sync; #if SDL_VERSION_ATLEAST(2, 0, 0) diff --git a/src/platform/sdl/sdl-audio.h b/src/platform/sdl/sdl-audio.h index f402e5cf9..b03e865a2 100644 --- a/src/platform/sdl/sdl-audio.h +++ b/src/platform/sdl/sdl-audio.h @@ -23,11 +23,11 @@ struct mSDLAudio { #endif struct mCore* core; - struct GBAThread* thread; struct mCoreSync* sync; }; -bool mSDLInitAudio(struct mSDLAudio* context, struct GBAThread*); +struct mCoreThread; +bool mSDLInitAudio(struct mSDLAudio* context, struct mCoreThread*); void mSDLDeinitAudio(struct mSDLAudio* context); void mSDLPauseAudio(struct mSDLAudio* context); void mSDLResumeAudio(struct mSDLAudio* context);