summaryrefslogtreecommitdiff
path: root/Source/Core/AudioCommon/Mixer.cpp
diff options
context:
space:
mode:
authorMichael Maltese <michaeljosephmaltese@gmail.com>2017-04-23 18:05:21 -0700
committerMichael Maltese <michaeljosephmaltese@gmail.com>2017-06-03 16:53:59 -0700
commita4508e85e8b63e085eac9dca877fae9f7d65e09a (patch)
tree24dc9c24b1ba4aaf85d0d0ae31fe8b8c05ee6922 /Source/Core/AudioCommon/Mixer.cpp
parent0e6bd74ed626dd25a85682b90426c26cb10d6a16 (diff)
AudioCommon: move DPL2 decoding into Mixer
Diffstat (limited to 'Source/Core/AudioCommon/Mixer.cpp')
-rw-r--r--Source/Core/AudioCommon/Mixer.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/Source/Core/AudioCommon/Mixer.cpp b/Source/Core/AudioCommon/Mixer.cpp
index 8149da088c..2454042fe2 100644
--- a/Source/Core/AudioCommon/Mixer.cpp
+++ b/Source/Core/AudioCommon/Mixer.cpp
@@ -7,6 +7,7 @@
#include <cmath>
#include <cstring>
+#include "AudioCommon/DPL2Decoder.h"
#include "Common/CommonTypes.h"
#include "Common/Logging/Log.h"
#include "Common/MathUtil.h"
@@ -25,6 +26,8 @@ CMixer::CMixer(unsigned int BackendSampleRate) : m_sampleRate(BackendSampleRate)
m_sound_touch.setSetting(SETTING_SEQUENCE_MS, 62);
m_sound_touch.setSetting(SETTING_SEEKWINDOW_MS, 28);
m_sound_touch.setSetting(SETTING_OVERLAP_MS, 8);
+
+ DPL2Reset();
}
CMixer::~CMixer()
@@ -159,6 +162,25 @@ unsigned int CMixer::Mix(short* samples, unsigned int num_samples)
return num_samples;
}
+unsigned int CMixer::MixSurround(float* samples, unsigned int num_samples)
+{
+ if (!num_samples)
+ return 0;
+
+ memset(samples, 0, num_samples * 6 * sizeof(float));
+
+ unsigned int available_samples = Mix(m_stretch_buffer.data(), num_samples);
+ for (size_t i = 0; i < static_cast<size_t>(available_samples) * 2; ++i)
+ {
+ m_float_conversion_buffer[i] =
+ m_stretch_buffer[i] / static_cast<float>(std::numeric_limits<short>::max());
+ }
+
+ DPL2Decode(m_float_conversion_buffer.data(), available_samples, samples);
+
+ return available_samples;
+}
+
void CMixer::StretchAudio(const short* in, unsigned int num_in, short* out, unsigned int num_out)
{
const double time_delta = static_cast<double>(num_out) / m_sampleRate; // seconds