summaryrefslogtreecommitdiff
path: root/src/audio_core/codec.h
diff options
context:
space:
mode:
authorGravatar bunnei2018-08-03 15:30:01 -0400
committerGravatar bunnei2018-08-04 18:22:58 -0400
commitf1cb3903ac358183dcdc562ba19dc469b056e73f (patch)
tree0179ee55d3c573cdd9189cb708e2b69e02a1b166 /src/audio_core/codec.h
parentcubeb_sink: Support variable sample_rate and num_channels. (diff)
downloadyuzu-f1cb3903ac358183dcdc562ba19dc469b056e73f.tar.gz
yuzu-f1cb3903ac358183dcdc562ba19dc469b056e73f.tar.xz
yuzu-f1cb3903ac358183dcdc562ba19dc469b056e73f.zip
audio_core: Port codec code from Citra for ADPCM decoding.
Diffstat (limited to 'src/audio_core/codec.h')
-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 @@
1// Copyright 2018 yuzu Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include <array>
8#include <vector>
9
10#include "common/common_types.h"
11
12namespace AudioCore::Codec {
13
14enum class PcmFormat : u32 {
15 Invalid = 0,
16 Int8 = 1,
17 Int16 = 2,
18 Int24 = 3,
19 Int32 = 4,
20 PcmFloat = 5,
21 Adpcm = 6,
22};
23
24/// See: Codec::DecodeADPCM
25struct ADPCMState {
26 // Two historical samples from previous processed buffer,
27 // required for ADPCM decoding
28 s16 yn1; ///< y[n-1]
29 s16 yn2; ///< y[n-2]
30};
31
32using ADPCM_Coeff = std::array<s16, 16>;
33
34/**
35 * @param data Pointer to buffer that contains ADPCM data to decode
36 * @param size Size of buffer in bytes
37 * @param coeff ADPCM coefficients
38 * @param state ADPCM state, this is updated with new state
39 * @return Decoded stereo signed PCM16 data, sample_count in length
40 */
41std::vector<s16> DecodeADPCM(const u8* const data, size_t size, const ADPCM_Coeff& coeff,
42 ADPCMState& state);
43
44}; // namespace AudioCore::Codec