all repos — mgba @ ff637c84d1f229b0891e0d7f9a40ad5c7a8b12f0

mGBA Game Boy Advance Emulator

src/platform/qt/AudioProcessorSDL.cpp (view raw)

 1/* Copyright (c) 2013-2015 Jeffrey Pfau
 2 *
 3 * This Source Code Form is subject to the terms of the Mozilla Public
 4 * License, v. 2.0. If a copy of the MPL was not distributed with this
 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 6#include "AudioProcessorSDL.h"
 7
 8#include "LogController.h"
 9
10using namespace QGBA;
11
12AudioProcessorSDL::AudioProcessorSDL(QObject* parent)
13	: AudioProcessor(parent)
14	, m_audio{ 2048, 44100 }
15{
16}
17
18AudioProcessorSDL::~AudioProcessorSDL() {
19	mSDLDeinitAudio(&m_audio);
20}
21
22void AudioProcessorSDL::setInput(mCoreThread* input) {
23	AudioProcessor::setInput(input);
24	if (m_audio.core) {
25		mSDLDeinitAudio(&m_audio);
26		mSDLInitAudio(&m_audio, input);
27	}
28}
29
30bool AudioProcessorSDL::start() {
31	if (!input()) {
32		LOG(QT, WARN) << tr("Can't start an audio processor without input");
33		return false;
34	}
35
36	if (m_audio.core) {
37		mSDLResumeAudio(&m_audio);
38		return true;
39	} else {
40		if (!m_audio.samples) {
41			m_audio.samples = 2048; // TODO?
42		}
43		return mSDLInitAudio(&m_audio, input());
44	}
45}
46
47void AudioProcessorSDL::pause() {
48	mSDLPauseAudio(&m_audio);
49}
50
51void AudioProcessorSDL::setBufferSamples(int samples) {
52	AudioProcessor::setBufferSamples(samples);
53	m_audio.samples = samples;
54	if (m_audio.core) {
55		mSDLDeinitAudio(&m_audio);
56		mSDLInitAudio(&m_audio, input());
57	}
58}
59
60void AudioProcessorSDL::inputParametersChanged() {
61}
62
63void AudioProcessorSDL::requestSampleRate(unsigned rate) {
64	m_audio.sampleRate = rate;
65	if (m_audio.core) {
66		mSDLDeinitAudio(&m_audio);
67		mSDLInitAudio(&m_audio, input());
68	}
69}
70
71unsigned AudioProcessorSDL::sampleRate() const {
72	if (m_audio.core) {
73		return m_audio.obtainedSpec.freq;
74	} else {
75		return 0;
76	}
77}