/// \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