blob: 08c31639033248a8fdaa6ecd05f223b220c62ecd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
/// \file decoder.h
#ifndef _musepack_decoder_h_
#define _musepack_decoder_h_
#include "musepack/huffman.h"
#include "musepack/math.h"
#include "musepack/musepack.h"
#include "musepack/reader.h"
#include "musepack/streaminfo.h"
enum {
MPC_V_MEM = 2304,
MPC_DECODER_MEMSIZE = 16384, // overall buffer size
};
typedef struct {
mpc_int32_t L [36];
mpc_int32_t R [36];
} QuantTyp;
typedef struct mpc_decoder_t {
mpc_reader *r;
/// @name internal state variables
//@{
mpc_uint32_t dword; /// actually decoded 32bit-word
mpc_uint32_t pos; /// bit-position within dword
mpc_uint32_t Speicher[MPC_DECODER_MEMSIZE]; /// read-buffer
mpc_uint32_t Zaehler; /// actual index within read-buffer
mpc_uint32_t samples_to_skip;
mpc_uint32_t FwdJumpInfo;
mpc_uint32_t ActDecodePos;
mpc_uint32_t FrameWasValid;
mpc_uint32_t DecodedFrames;
mpc_uint32_t OverallFrames;
mpc_int32_t SampleRate; // Sample frequency
mpc_uint32_t StreamVersion; // version of bitstream
mpc_uint32_t MS_used; // MS-coding used ?
mpc_int32_t Max_Band;
mpc_uint32_t MPCHeaderPos; // AB: needed to support ID3v2
mpc_uint32_t LastValidSamples;
mpc_uint32_t TrueGaplessPresent;
mpc_uint32_t EQ_activated;
mpc_uint32_t WordsRead; // counts amount of decoded dwords
// randomizer state variables
mpc_uint32_t __r1;
mpc_uint32_t __r2;
mpc_uint32_t Q_bit [32];
mpc_uint32_t Q_res [32][16];
// huffman table stuff
HuffmanTyp HuffHdr [10];
HuffmanTyp HuffSCFI [ 4];
HuffmanTyp HuffDSCF [16];
HuffmanTyp* HuffQ [2] [8];
HuffmanTyp HuffQ1 [2] [3*3*3];
HuffmanTyp HuffQ2 [2] [5*5];
HuffmanTyp HuffQ3 [2] [ 7];
HuffmanTyp HuffQ4 [2] [ 9];
HuffmanTyp HuffQ5 [2] [15];
HuffmanTyp HuffQ6 [2] [31];
HuffmanTyp HuffQ7 [2] [63];
const HuffmanTyp* SampleHuff [18];
HuffmanTyp SCFI_Bundle [ 8];
HuffmanTyp DSCF_Entropie [13];
HuffmanTyp Region_A [16];
HuffmanTyp Region_B [ 8];
HuffmanTyp Region_C [ 4];
HuffmanTyp Entropie_1 [ 3];
HuffmanTyp Entropie_2 [ 5];
HuffmanTyp Entropie_3 [ 7];
HuffmanTyp Entropie_4 [ 9];
HuffmanTyp Entropie_5 [15];
HuffmanTyp Entropie_6 [31];
HuffmanTyp Entropie_7 [63];
mpc_int32_t SCF_Index_L [32] [3];
mpc_int32_t SCF_Index_R [32] [3]; // holds scalefactor-indices
QuantTyp Q [32]; // holds quantized samples
mpc_int32_t Res_L [32];
mpc_int32_t Res_R [32]; // holds the chosen quantizer for each subband
mpc_int32_t DSCF_Flag_L [32];
mpc_int32_t DSCF_Flag_R [32]; // differential SCF used?
mpc_int32_t SCFI_L [32];
mpc_int32_t SCFI_R [32]; // describes order of transmitted SCF
mpc_int32_t DSCF_Reference_L [32];
mpc_int32_t DSCF_Reference_R [32]; // holds last frames SCF
mpc_int32_t MS_Flag[32]; // MS used?
#ifdef MPC_FIXED_POINT
unsigned char SCF_shift[256];
#endif
MPC_SAMPLE_FORMAT V_L[MPC_V_MEM + 960];
MPC_SAMPLE_FORMAT V_R[MPC_V_MEM + 960];
MPC_SAMPLE_FORMAT Y_L[36][32];
MPC_SAMPLE_FORMAT Y_R[36][32];
MPC_SAMPLE_FORMAT SCF[256]; ///< holds adapted scalefactors (for clipping prevention)
//@}
} mpc_decoder;
#endif // _mpc_decoder_h
|