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}