summaryrefslogtreecommitdiffstats
path: root/src/audio_core/codec.h
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2018-08-03 21:30:01 +0200
committerbunnei <bunneidev@gmail.com>2018-08-05 00:22:58 +0200
commitf1cb3903ac358183dcdc562ba19dc469b056e73f (patch)
tree0179ee55d3c573cdd9189cb708e2b69e02a1b166 /src/audio_core/codec.h
parentcubeb_sink: Support variable sample_rate and num_channels. (diff)
downloadyuzu-f1cb3903ac358183dcdc562ba19dc469b056e73f.tar
yuzu-f1cb3903ac358183dcdc562ba19dc469b056e73f.tar.gz
yuzu-f1cb3903ac358183dcdc562ba19dc469b056e73f.tar.bz2
yuzu-f1cb3903ac358183dcdc562ba19dc469b056e73f.tar.lz
yuzu-f1cb3903ac358183dcdc562ba19dc469b056e73f.tar.xz
yuzu-f1cb3903ac358183dcdc562ba19dc469b056e73f.tar.zst
yuzu-f1cb3903ac358183dcdc562ba19dc469b056e73f.zip
Diffstat (limited to '')
-rw-r--r--src/audio_core/codec.h44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/audio_core/codec.h b/src/audio_core/codec.h
new file mode 100644
index 000000000..3f845c42c
--- /dev/null
+++ b/src/audio_core/codec.h
@@ -0,0 +1,44 @@
+// Copyright 2018 yuzu Emulator Project
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include <array>
+#include <vector>
+
+#include "common/common_types.h"
+
+namespace AudioCore::Codec {
+
+enum class PcmFormat : u32 {
+ Invalid = 0,
+ Int8 = 1,
+ Int16 = 2,
+ Int24 = 3,
+ Int32 = 4,
+ PcmFloat = 5,
+ Adpcm = 6,
+};
+
+/// See: Codec::DecodeADPCM
+struct ADPCMState {
+ // Two historical samples from previous processed buffer,
+ // required for ADPCM decoding
+ s16 yn1; ///< y[n-1]
+ s16 yn2; ///< y[n-2]
+};
+
+using ADPCM_Coeff = std::array<s16, 16>;
+
+/**
+ * @param data Pointer to buffer that contains ADPCM data to decode
+ * @param size Size of buffer in bytes
+ * @param coeff ADPCM coefficients
+ * @param state ADPCM state, this is updated with new state
+ * @return Decoded stereo signed PCM16 data, sample_count in length
+ */
+std::vector<s16> DecodeADPCM(const u8* const data, size_t size, const ADPCM_Coeff& coeff,
+ ADPCMState& state);
+
+}; // namespace AudioCore::Codec