Updated MPCDec to version 1.2.6

CQTexperiment
Chris Moeller 2013-10-21 00:39:44 -07:00
parent 755147b48a
commit 849dcf6c29
18 changed files with 597 additions and 1316 deletions

View File

@ -1,3 +1,28 @@
1.2.6
* Fix an infinite loop regression from 1.2.3
* Fix possible noise at the beginning of files
1.2.5
* Properly increase API version since it has changed since 1.2.3
Apps compiled with 1.2.2 WILL BREAK when used with 1.2.3 & 1.2.4 libs installed
1.2.4
* Fix broken stream initialization on non-mpc files
1.2.3
* Added fast-seeking (bit-perfect only with mppenc 1.16 files and later, optional but safe on pre mppenc 1.16 files). Patch by Nicolas Botti
* Reduced memory usage and code size. Patch by Peter Pawlowski
1.2.2
* Fixed compilation under OpenBSD
* Unix EOF again
1.2.1
* Warnings cleanup, patch by Tomas Salfischberger, Thom Johansen and
Daniel Stenberg (Rockbox)
* Mplayer interface, patch by Reimar Doffinger
* Unix EOF everywhere
1.2
* 1.1.1 broke the API (BOOL type changed to mpc_bool_t). Version bumped to 1.2 to reflect the major change. Sorry to those who were caught by this error
* Fixed relative/absolute includes (#include "stuff.h" in /include/mpcdec, #include <mpcdec/stuff> in src/)

View File

@ -1,6 +1,6 @@
Musepack Decoder Library 1.2:
Musepack Decoder Library:
run "./configure; make"
run "./configure [--prefix=/usr]; make"
To create a sample app using the musepack decoder library in src/
Check src/sample.cpp for more details.

View File

@ -35,6 +35,8 @@
#ifndef __MUSEPACK_CONFIG_TYPES_H__
#define __MUSEPACK_CONFIG_TYPES_H__
@INTTYPES_H@
typedef unsigned char mpc_bool_t;
#define TRUE 1
#define FALSE 0

View File

@ -1,48 +1,52 @@
/*
Copyright (c) 2005, The Musepack Development Team
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* Neither the name of the The Musepack Development Team nor the
names of its contributors may be used to endorse or promote
products derived from this software without specific prior
written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __MUSEPACK_CONFIG_WIN32_H__
#define __MUSEPACK_CONFIG_WIN32_H__
typedef unsigned char mpc_bool_t;
#define TRUE 1
#define FALSE 0
typedef __int16 mpc_int16_t;
typedef unsigned __int16 mpc_uint16_t;
typedef __int32 mpc_int32_t;
typedef unsigned __int32 mpc_uint32_t;
typedef __int64 mpc_int64_t;
#endif // __MUSEPACK_CONFIG_WIN32_H__
/*
Copyright (c) 2005, The Musepack Development Team
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* Neither the name of the The Musepack Development Team nor the
names of its contributors may be used to endorse or promote
products derived from this software without specific prior
written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __MUSEPACK_CONFIG_WIN32_H__
#define __MUSEPACK_CONFIG_WIN32_H__
typedef unsigned char mpc_bool_t;
#define TRUE 1
#define FALSE 0
typedef __int8 mpc_int8_t;
typedef unsigned __int8 mpc_uint8_t;
typedef __int16 mpc_int16_t;
typedef unsigned __int16 mpc_uint16_t;
typedef __int32 mpc_int32_t;
typedef unsigned __int32 mpc_uint32_t;
typedef __int64 mpc_int64_t;
#define MPC_LITTLE_ENDIAN
#endif // __MUSEPACK_CONFIG_WIN32_H__

View File

@ -43,6 +43,14 @@
#include "reader.h"
#include "streaminfo.h"
#define MPC_SUPPORT_SV456
#define SEEKING_TABLE_SIZE 256u
// set it to SLOW_SEEKING_WINDOW to not use fast seeking
#define FAST_SEEKING_WINDOW 32
// set it to FAST_SEEKING_WINDOW to only use fast seeking
#define SLOW_SEEKING_WINDOW 0x80000000
enum {
MPC_V_MEM = 2304,
MPC_DECODER_MEMSIZE = 16384, // overall buffer size
@ -59,29 +67,24 @@ typedef struct mpc_decoder_t {
/// @name internal state variables
//@{
mpc_uint32_t dword; /// actually decoded 32bit-word
mpc_uint32_t dword; /// currently 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 samples_to_skip;
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 FrameWasValid;
mpc_uint32_t MS_used; // MS-coding used ?
mpc_uint32_t TrueGaplessPresent;
mpc_uint32_t WordsRead; // counts amount of decoded dwords
@ -89,49 +92,22 @@ typedef struct mpc_decoder_t {
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];
// seeking
mpc_uint32_t seeking_table[SEEKING_TABLE_SIZE];
mpc_uint32_t seeking_pwr; // distance between 2 frames in seeking_table = 2^seeking_pwr
mpc_uint32_t seeking_table_frames; // last frame in seaking table
mpc_uint32_t seeking_window; // number of frames to look for scalefactors
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_bool_t DSCF_Flag_L [32];
mpc_bool_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?
mpc_bool_t MS_Flag[32]; // MS used?
#ifdef MPC_FIXED_POINT
unsigned char SCF_shift[256];
#endif

View File

@ -51,30 +51,8 @@ struct mpc_decoder_t; // forward declare to break circular dependencies
/// Huffman table entry.
typedef struct huffman_type_t {
mpc_uint32_t Code;
mpc_uint32_t Length;
mpc_int32_t Value;
mpc_uint16_t Length;
mpc_int16_t Value;
} HuffmanTyp;
//! \brief Sorts huffman-tables by codeword.
//!
//! offset resulting value.
//! \param elements
//! \param Table table to sort
//! \param offset offset of resulting sort
void
mpc_decoder_resort_huff_tables(
const mpc_uint32_t elements, HuffmanTyp *Table, const mpc_int32_t offset);
/// Initializes sv6 huffman decoding structures.
void mpc_decoder_init_huffman_sv6(struct mpc_decoder_t *d);
/// Initializes sv6 huffman decoding tables.
void mpc_decoder_init_huffman_sv6_tables(struct mpc_decoder_t *d);
/// Initializes sv7 huffman decoding structures.
void mpc_decoder_init_huffman_sv7(struct mpc_decoder_t *d);
/// Initializes sv7 huffman decoding tables.
void mpc_decoder_init_huffman_sv7_tables(struct mpc_decoder_t *d);
#endif // _mpcdec_huffman_h_

View File

@ -45,11 +45,9 @@ enum {
/// Big/little endian 32 bit byte swapping routine.
static __inline
mpc_uint32_t swap32(mpc_uint32_t val) {
const unsigned char* src = (const unsigned char*)&val;
return
(mpc_uint32_t)src[0] |
((mpc_uint32_t)src[1] << 8) | ((mpc_uint32_t)src[2] << 16) | ((mpc_uint32_t)src[3] << 24);
mpc_uint32_t mpc_swap32(mpc_uint32_t val) {
return (((val & 0xff000000) >> 24) | ((val & 0x00ff0000) >> 8) |
((val & 0x0000ff00) << 8) | ((val & 0x000000ff) << 24));
}
/// Searches for a ID3v2-tag and reads the length (in bytes) of it.

View File

@ -100,6 +100,13 @@ void mpc_decoder_setup(mpc_decoder *d, mpc_reader *r);
/// \return TRUE if decoder was initalized successfully, FALSE otherwise
mpc_bool_t mpc_decoder_initialize(mpc_decoder *d, mpc_streaminfo *si);
/// Call this next after calling mpc_decoder_setup.
/// \param si streaminfo structure indicating format of source stream
/// \param fast_seeking boolean 0 = use fast seeking if safe, 1 = force fast seeking
void mpc_decoder_set_seeking(mpc_decoder *d, mpc_streaminfo *si, mpc_bool_t fast_seeking);
void mpc_decoder_set_streaminfo(mpc_decoder *d, mpc_streaminfo *si);
/// Sets decoder sample scaling factor. All decoded samples will be multiplied
/// by this factor.
/// \param scale_factor multiplicative scaling factor
@ -119,6 +126,12 @@ mpc_uint32_t mpc_decoder_decode(
mpc_uint32_t *vbr_update_acc,
mpc_uint32_t *vbr_update_bits);
mpc_uint32_t mpc_decoder_decode_frame(
mpc_decoder *d,
mpc_uint32_t *in_buffer,
mpc_uint32_t in_len,
MPC_SAMPLE_FORMAT *out_buffer);
/// Seeks to the specified sample in the source stream.
mpc_bool_t mpc_decoder_seek_sample(mpc_decoder *d, mpc_int64_t destsample);

View File

@ -81,6 +81,11 @@ typedef struct mpc_streaminfo {
mpc_streaminfo_off_t tag_offset; ///< offset to file tags
mpc_streaminfo_off_t total_file_length; ///< total length of underlying file
//@}
/// @name fast seeking support
//@{
mpc_uint32_t fast_seek; ///< support fast seeking ? (0: no, 1: yes)
//@}
} mpc_streaminfo;
#endif // _mpcdec_streaminfo_h_

View File

@ -39,230 +39,37 @@
#include <mpcdec/requant.h>
#include <mpcdec/huffman.h>
void
mpc_decoder_init_huffman_sv6(mpc_decoder *d)
{
mpc_decoder_init_huffman_sv6_tables(d);
mpc_decoder_resort_huff_tables(16, d->Region_A , 0);
mpc_decoder_resort_huff_tables( 8, d->Region_B , 0);
mpc_decoder_resort_huff_tables( 4, d->Region_C , 0);
mpc_decoder_resort_huff_tables( 8, d->SCFI_Bundle , 0);
mpc_decoder_resort_huff_tables(13, d->DSCF_Entropie , 6);
mpc_decoder_resort_huff_tables( 3, d->Entropie_1 , Dc[1]);
mpc_decoder_resort_huff_tables( 5, d->Entropie_2 , Dc[2]);
mpc_decoder_resort_huff_tables( 7, d->Entropie_3 , Dc[3]);
mpc_decoder_resort_huff_tables( 9, d->Entropie_4 , Dc[4]);
mpc_decoder_resort_huff_tables(15, d->Entropie_5 , Dc[5]);
mpc_decoder_resort_huff_tables(31, d->Entropie_6 , Dc[6]);
mpc_decoder_resort_huff_tables(63, d->Entropie_7 , Dc[7]);
}
#ifdef MPC_SUPPORT_SV456
void
mpc_decoder_init_huffman_sv6_tables(mpc_decoder *d)
{
// SCFI-bundle
d->SCFI_Bundle[7].Code= 1; d->SCFI_Bundle[7].Length= 1;
d->SCFI_Bundle[3].Code= 1; d->SCFI_Bundle[3].Length= 2;
d->SCFI_Bundle[5].Code= 0; d->SCFI_Bundle[5].Length= 3;
d->SCFI_Bundle[1].Code= 7; d->SCFI_Bundle[1].Length= 5;
d->SCFI_Bundle[2].Code= 6; d->SCFI_Bundle[2].Length= 5;
d->SCFI_Bundle[4].Code= 4; d->SCFI_Bundle[4].Length= 5;
d->SCFI_Bundle[0].Code= 11; d->SCFI_Bundle[0].Length= 6;
d->SCFI_Bundle[6].Code= 10; d->SCFI_Bundle[6].Length= 6;
// region A (subbands 0..10)
d->Region_A[ 1].Code= 1; d->Region_A[ 1].Length= 1;
d->Region_A[ 2].Code= 0; d->Region_A[ 2].Length= 2;
d->Region_A[ 0].Code= 2; d->Region_A[ 0].Length= 3;
d->Region_A[ 3].Code= 15; d->Region_A[ 3].Length= 5;
d->Region_A[ 5].Code= 13; d->Region_A[ 5].Length= 5;
d->Region_A[ 6].Code= 12; d->Region_A[ 6].Length= 5;
d->Region_A[ 4].Code= 29; d->Region_A[ 4].Length= 6;
d->Region_A[ 7].Code= 57; d->Region_A[ 7].Length= 7;
d->Region_A[ 8].Code= 113; d->Region_A[ 8].Length= 8;
d->Region_A[ 9].Code= 225; d->Region_A[ 9].Length= 9;
d->Region_A[10].Code= 449; d->Region_A[10].Length= 10;
d->Region_A[11].Code= 897; d->Region_A[11].Length= 11;
d->Region_A[12].Code= 1793; d->Region_A[12].Length= 12;
d->Region_A[13].Code= 3585; d->Region_A[13].Length= 13;
d->Region_A[14].Code= 7169; d->Region_A[14].Length= 14;
d->Region_A[15].Code= 7168; d->Region_A[15].Length= 14;
const HuffmanTyp mpc_table_SCFI_Bundle [ 8] =
{{2147483648u,1,7},{1073741824u,2,3},{939524096u,5,1},{805306368u,5,2},{738197504u,6,0},{671088640u,6,6},{536870912u,5,4},{0u,3,5},};
const HuffmanTyp mpc_table_DSCF_Entropie [13] =
{{3758096384u,3,1},{3489660928u,4,3},{3355443200u,5,5},{3221225472u,5,-3},{2952790016u,4,-2},{2684354560u,4,4},{2147483648u,3,-1},{1610612736u,3,2},{1476395008u,5,-5},{1409286144u,6,6},{1342177280u,6,-6},{1073741824u,4,-4},{0u,2,0},};
const HuffmanTyp mpc_table_Region_A [16] =
{{2147483648u,1,1},{2013265920u,5,3},{1946157056u,6,4},{1912602624u,7,7},{1895825408u,8,8},{1887436800u,9,9},{1883242496u,10,10},{1881145344u,11,11},{1880096768u,12,12},{1879572480u,13,13},{1879310336u,14,14},{1879048192u,14,15},{1744830464u,5,5},{1610612736u,5,6},{1073741824u,3,0},{0u,2,2},};
const HuffmanTyp mpc_table_Region_B [ 8] =
{{2147483648u,1,1},{1073741824u,2,0},{536870912u,3,2},{268435456u,4,3},{134217728u,5,4},{67108864u,6,5},{33554432u,7,6},{0u,7,7},};
const HuffmanTyp mpc_table_Region_C [ 4] =
{{2147483648u,1,0},{1073741824u,2,1},{536870912u,3,2},{0u,3,3},};
// region B (subbands 11..22)
d->Region_B[1].Code= 1; d->Region_B[1].Length= 1;
d->Region_B[0].Code= 1; d->Region_B[0].Length= 2;
d->Region_B[2].Code= 1; d->Region_B[2].Length= 3;
d->Region_B[3].Code= 1; d->Region_B[3].Length= 4;
d->Region_B[4].Code= 1; d->Region_B[4].Length= 5;
d->Region_B[5].Code= 1; d->Region_B[5].Length= 6;
d->Region_B[6].Code= 1; d->Region_B[6].Length= 7;
d->Region_B[7].Code= 0; d->Region_B[7].Length= 7;
static const HuffmanTyp mpc_table_Entropie_1 [ 3] =
{{2147483648u,1,0},{1073741824u,2,-1},{0u,2,1},};
static const HuffmanTyp mpc_table_Entropie_2 [ 5] =
{{3221225472u,2,0},{2684354560u,3,2},{2147483648u,3,-2},{1073741824u,2,1},{0u,2,-1},};
static const HuffmanTyp mpc_table_Entropie_3 [ 7] =
{{3221225472u,2,0},{2684354560u,3,-2},{2415919104u,4,2},{2281701376u,5,-3},{2147483648u,5,3},{1073741824u,2,-1},{0u,2,1},};
static const HuffmanTyp mpc_table_Entropie_4 [ 9] =
{{4026531840u,4,3},{3758096384u,4,-3},{3221225472u,3,1},{2684354560u,3,-1},{2147483648u,3,2},{1610612736u,3,-2},{1342177280u,4,-4},{1073741824u,4,4},{0u,2,0},};
static const HuffmanTyp mpc_table_Entropie_5 [15] =
{{4026531840u,4,-2},{3892314112u,5,-5},{3825205248u,6,-7},{3758096384u,6,7},{3489660928u,4,-3},{3221225472u,4,3},{3087007744u,5,-6},{2952790016u,5,6},{2684354560u,4,4},{2147483648u,3,0},{1610612736u,3,1},{1073741824u,3,-1},{805306368u,4,-4},{536870912u,4,5},{0u,3,2},};
static const HuffmanTyp mpc_table_Entropie_6 [31] =
{{4160749568u,5,-4},{4026531840u,5,5},{3892314112u,5,-5},{3825205248u,6,10},{3758096384u,6,-10},{3623878656u,5,-6},{3489660928u,5,6},{3355443200u,5,7},{3221225472u,5,-7},{3087007744u,5,-8},{3019898880u,6,-11},{2986344448u,7,14},{2952790016u,7,-14},{2818572288u,5,8},{2751463424u,6,11},{2684354560u,6,-13},{2415919104u,4,0},{2147483648u,4,1},{1879048192u,4,-1},{1610612736u,4,3},{1342177280u,4,2},{1207959552u,5,-9},{1140850688u,6,12},{1073741824u,6,13},{805306368u,4,-3},{536870912u,4,-2},{402653184u,5,9},{335544320u,6,-12},{301989888u,7,15},{268435456u,7,-15},{0u,4,4},};
static const HuffmanTyp mpc_table_Entropie_7 [63] =
{{4278190080u,8,28},{4261412864u,8,26},{4227858432u,7,-20},{4160749568u,6,8},{4093640704u,6,-8},{4026531840u,6,-9},{3959422976u,6,9},{3925868544u,7,20},{3892314112u,7,21},{3825205248u,6,-10},{3758096384u,6,-11},{3690987520u,6,10},{3623878656u,6,11},{3590324224u,7,-21},{3573547008u,8,29},{3556769792u,8,-29},{3489660928u,6,13},{3422552064u,6,-13},{3355443200u,6,-12},{3288334336u,6,12},{3254779904u,7,-22},{3221225472u,7,22},{3154116608u,6,14},{3087007744u,6,15},{3019898880u,6,-14},{2986344448u,7,-23},{2952790016u,7,23},{2885681152u,6,-15},{2818572288u,6,-16},{2751463424u,6,16},{2717908992u,7,27},{2684354560u,7,-27},{2617245696u,6,17},{2550136832u,6,-17},{2533359616u,8,-30},{2516582400u,8,30},{2483027968u,7,24},{2415919104u,6,-18},{2281701376u,5,-1},{2147483648u,5,1},{2113929216u,7,-24},{2080374784u,7,25},{2013265920u,6,18},{1879048192u,5,-3},{1744830464u,5,3},{1610612736u,5,5},{1476395008u,5,0},{1342177280u,5,-2},{1275068416u,6,19},{1207959552u,6,-19},{1073741824u,5,-5},{939524096u,5,-4},{805306368u,5,-7},{671088640u,5,2},{536870912u,5,4},{402653184u,5,7},{369098752u,7,-25},{335544320u,7,-26},{301989888u,7,-28},{285212672u,8,-31},{268435456u,8,31},{134217728u,5,6},{0u,5,-6},};
// region C (subbands 23..31)
d->Region_C[0].Code= 1; d->Region_C[0].Length= 1;
d->Region_C[1].Code= 1; d->Region_C[1].Length= 2;
d->Region_C[2].Code= 1; d->Region_C[2].Length= 3;
d->Region_C[3].Code= 0; d->Region_C[3].Length= 3;
const HuffmanTyp* mpc_table_SampleHuff [18] = {
NULL,mpc_table_Entropie_1,mpc_table_Entropie_2,mpc_table_Entropie_3,mpc_table_Entropie_4,mpc_table_Entropie_5,mpc_table_Entropie_6,mpc_table_Entropie_7,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
};
// DSCF
d->DSCF_Entropie[ 6].Code= 0; d->DSCF_Entropie[ 6].Length= 2;
d->DSCF_Entropie[ 7].Code= 7; d->DSCF_Entropie[ 7].Length= 3;
d->DSCF_Entropie[ 5].Code= 4; d->DSCF_Entropie[ 5].Length= 3;
d->DSCF_Entropie[ 8].Code= 3; d->DSCF_Entropie[ 8].Length= 3;
d->DSCF_Entropie[ 9].Code= 13; d->DSCF_Entropie[ 9].Length= 4;
d->DSCF_Entropie[ 4].Code= 11; d->DSCF_Entropie[ 4].Length= 4;
d->DSCF_Entropie[10].Code= 10; d->DSCF_Entropie[10].Length= 4;
d->DSCF_Entropie[ 2].Code= 4; d->DSCF_Entropie[ 2].Length= 4;
d->DSCF_Entropie[11].Code= 25; d->DSCF_Entropie[11].Length= 5;
d->DSCF_Entropie[ 3].Code= 24; d->DSCF_Entropie[ 3].Length= 5;
d->DSCF_Entropie[ 1].Code= 11; d->DSCF_Entropie[ 1].Length= 5;
d->DSCF_Entropie[12].Code= 21; d->DSCF_Entropie[12].Length= 6;
d->DSCF_Entropie[ 0].Code= 20; d->DSCF_Entropie[ 0].Length= 6;
// first quantizer
d->Entropie_1[1].Code= 1; d->Entropie_1[1].Length= 1;
d->Entropie_1[0].Code= 1; d->Entropie_1[0].Length= 2;
d->Entropie_1[2].Code= 0; d->Entropie_1[2].Length= 2;
// second quantizer
d->Entropie_2[2].Code= 3; d->Entropie_2[2].Length= 2;
d->Entropie_2[3].Code= 1; d->Entropie_2[3].Length= 2;
d->Entropie_2[1].Code= 0; d->Entropie_2[1].Length= 2;
d->Entropie_2[4].Code= 5; d->Entropie_2[4].Length= 3;
d->Entropie_2[0].Code= 4; d->Entropie_2[0].Length= 3;
// third quantizer
d->Entropie_3[3].Code= 3; d->Entropie_3[3].Length= 2;
d->Entropie_3[2].Code= 1; d->Entropie_3[2].Length= 2;
d->Entropie_3[4].Code= 0; d->Entropie_3[4].Length= 2;
d->Entropie_3[1].Code= 5; d->Entropie_3[1].Length= 3;
d->Entropie_3[5].Code= 9; d->Entropie_3[5].Length= 4;
d->Entropie_3[0].Code= 17; d->Entropie_3[0].Length= 5;
d->Entropie_3[6].Code= 16; d->Entropie_3[6].Length= 5;
// forth quantizer
d->Entropie_4[4].Code= 0; d->Entropie_4[4].Length= 2;
d->Entropie_4[5].Code= 6; d->Entropie_4[5].Length= 3;
d->Entropie_4[3].Code= 5; d->Entropie_4[3].Length= 3;
d->Entropie_4[6].Code= 4; d->Entropie_4[6].Length= 3;
d->Entropie_4[2].Code= 3; d->Entropie_4[2].Length= 3;
d->Entropie_4[7].Code= 15; d->Entropie_4[7].Length= 4;
d->Entropie_4[1].Code= 14; d->Entropie_4[1].Length= 4;
d->Entropie_4[0].Code= 5; d->Entropie_4[0].Length= 4;
d->Entropie_4[8].Code= 4; d->Entropie_4[8].Length= 4;
// fifth quantizer
d->Entropie_5[7 ].Code= 4; d->Entropie_5[7 ].Length= 3;
d->Entropie_5[8 ].Code= 3; d->Entropie_5[8 ].Length= 3;
d->Entropie_5[6 ].Code= 2; d->Entropie_5[6 ].Length= 3;
d->Entropie_5[9 ].Code= 0; d->Entropie_5[9 ].Length= 3;
d->Entropie_5[5 ].Code= 15; d->Entropie_5[5 ].Length= 4;
d->Entropie_5[4 ].Code= 13; d->Entropie_5[4 ].Length= 4;
d->Entropie_5[10].Code= 12; d->Entropie_5[10].Length= 4;
d->Entropie_5[11].Code= 10; d->Entropie_5[11].Length= 4;
d->Entropie_5[3 ].Code= 3; d->Entropie_5[3 ].Length= 4;
d->Entropie_5[12].Code= 2; d->Entropie_5[12].Length= 4;
d->Entropie_5[2 ].Code= 29; d->Entropie_5[2 ].Length= 5;
d->Entropie_5[1 ].Code= 23; d->Entropie_5[1 ].Length= 5;
d->Entropie_5[13].Code= 22; d->Entropie_5[13].Length= 5;
d->Entropie_5[0 ].Code= 57; d->Entropie_5[0 ].Length= 6;
d->Entropie_5[14].Code= 56; d->Entropie_5[14].Length= 6;
// sixth quantizer
d->Entropie_6[15].Code= 9; d->Entropie_6[15].Length= 4;
d->Entropie_6[16].Code= 8; d->Entropie_6[16].Length= 4;
d->Entropie_6[14].Code= 7; d->Entropie_6[14].Length= 4;
d->Entropie_6[18].Code= 6; d->Entropie_6[18].Length= 4;
d->Entropie_6[17].Code= 5; d->Entropie_6[17].Length= 4;
d->Entropie_6[12].Code= 3; d->Entropie_6[12].Length= 4;
d->Entropie_6[13].Code= 2; d->Entropie_6[13].Length= 4;
d->Entropie_6[19].Code= 0; d->Entropie_6[19].Length= 4;
d->Entropie_6[11].Code= 31; d->Entropie_6[11].Length= 5;
d->Entropie_6[20].Code= 30; d->Entropie_6[20].Length= 5;
d->Entropie_6[10].Code= 29; d->Entropie_6[10].Length= 5;
d->Entropie_6[9 ].Code= 27; d->Entropie_6[9 ].Length= 5;
d->Entropie_6[21].Code= 26; d->Entropie_6[21].Length= 5;
d->Entropie_6[22].Code= 25; d->Entropie_6[22].Length= 5;
d->Entropie_6[8 ].Code= 24; d->Entropie_6[8 ].Length= 5;
d->Entropie_6[7 ].Code= 23; d->Entropie_6[7 ].Length= 5;
d->Entropie_6[23].Code= 21; d->Entropie_6[23].Length= 5;
d->Entropie_6[6 ].Code= 9; d->Entropie_6[6 ].Length= 5;
d->Entropie_6[24].Code= 3; d->Entropie_6[24].Length= 5;
d->Entropie_6[25].Code= 57; d->Entropie_6[25].Length= 6;
d->Entropie_6[5 ].Code= 56; d->Entropie_6[5 ].Length= 6;
d->Entropie_6[4 ].Code= 45; d->Entropie_6[4 ].Length= 6;
d->Entropie_6[26].Code= 41; d->Entropie_6[26].Length= 6;
d->Entropie_6[2 ].Code= 40; d->Entropie_6[2 ].Length= 6;
d->Entropie_6[27].Code= 17; d->Entropie_6[27].Length= 6;
d->Entropie_6[28].Code= 16; d->Entropie_6[28].Length= 6;
d->Entropie_6[3 ].Code= 5; d->Entropie_6[3 ].Length= 6;
d->Entropie_6[29].Code= 89; d->Entropie_6[29].Length= 7;
d->Entropie_6[1 ].Code= 88; d->Entropie_6[1 ].Length= 7;
d->Entropie_6[30].Code= 9; d->Entropie_6[30].Length= 7;
d->Entropie_6[0 ].Code= 8; d->Entropie_6[0 ].Length= 7;
// seventh quantizer
d->Entropie_7[25].Code= 0; d->Entropie_7[25].Length= 5;
d->Entropie_7[37].Code= 1; d->Entropie_7[37].Length= 5;
d->Entropie_7[62].Code= 16; d->Entropie_7[62].Length= 8;
d->Entropie_7[ 0].Code= 17; d->Entropie_7[ 0].Length= 8;
d->Entropie_7[ 3].Code= 9; d->Entropie_7[ 3].Length= 7;
d->Entropie_7[ 5].Code= 10; d->Entropie_7[ 5].Length= 7;
d->Entropie_7[ 6].Code= 11; d->Entropie_7[ 6].Length= 7;
d->Entropie_7[38].Code= 3; d->Entropie_7[38].Length= 5;
d->Entropie_7[35].Code= 4; d->Entropie_7[35].Length= 5;
d->Entropie_7[33].Code= 5; d->Entropie_7[33].Length= 5;
d->Entropie_7[24].Code= 6; d->Entropie_7[24].Length= 5;
d->Entropie_7[27].Code= 7; d->Entropie_7[27].Length= 5;
d->Entropie_7[26].Code= 8; d->Entropie_7[26].Length= 5;
d->Entropie_7[12].Code= 18; d->Entropie_7[12].Length= 6;
d->Entropie_7[50].Code= 19; d->Entropie_7[50].Length= 6;
d->Entropie_7[29].Code= 10; d->Entropie_7[29].Length= 5;
d->Entropie_7[31].Code= 11; d->Entropie_7[31].Length= 5;
d->Entropie_7[36].Code= 12; d->Entropie_7[36].Length= 5;
d->Entropie_7[34].Code= 13; d->Entropie_7[34].Length= 5;
d->Entropie_7[28].Code= 14; d->Entropie_7[28].Length= 5;
d->Entropie_7[49].Code= 30; d->Entropie_7[49].Length= 6;
d->Entropie_7[56].Code= 62; d->Entropie_7[56].Length= 7;
d->Entropie_7[ 7].Code= 63; d->Entropie_7[ 7].Length= 7;
d->Entropie_7[32].Code= 16; d->Entropie_7[32].Length= 5;
d->Entropie_7[30].Code= 17; d->Entropie_7[30].Length= 5;
d->Entropie_7[13].Code= 36; d->Entropie_7[13].Length= 6;
d->Entropie_7[55].Code= 74; d->Entropie_7[55].Length= 7;
d->Entropie_7[61].Code= 150; d->Entropie_7[61].Length= 8;
d->Entropie_7[ 1].Code= 151; d->Entropie_7[ 1].Length= 8;
d->Entropie_7[14].Code= 38; d->Entropie_7[14].Length= 6;
d->Entropie_7[48].Code= 39; d->Entropie_7[48].Length= 6;
d->Entropie_7[ 4].Code= 80; d->Entropie_7[ 4].Length= 7;
d->Entropie_7[58].Code= 81; d->Entropie_7[58].Length= 7;
d->Entropie_7[47].Code= 41; d->Entropie_7[47].Length= 6;
d->Entropie_7[15].Code= 42; d->Entropie_7[15].Length= 6;
d->Entropie_7[16].Code= 43; d->Entropie_7[16].Length= 6;
d->Entropie_7[54].Code= 88; d->Entropie_7[54].Length= 7;
d->Entropie_7[ 8].Code= 89; d->Entropie_7[ 8].Length= 7;
d->Entropie_7[17].Code= 45; d->Entropie_7[17].Length= 6;
d->Entropie_7[46].Code= 46; d->Entropie_7[46].Length= 6;
d->Entropie_7[45].Code= 47; d->Entropie_7[45].Length= 6;
d->Entropie_7[53].Code= 96; d->Entropie_7[53].Length= 7;
d->Entropie_7[ 9].Code= 97; d->Entropie_7[ 9].Length= 7;
d->Entropie_7[43].Code= 49; d->Entropie_7[43].Length= 6;
d->Entropie_7[19].Code= 50; d->Entropie_7[19].Length= 6;
d->Entropie_7[18].Code= 51; d->Entropie_7[18].Length= 6;
d->Entropie_7[44].Code= 52; d->Entropie_7[44].Length= 6;
d->Entropie_7[ 2].Code= 212; d->Entropie_7[ 2].Length= 8;
d->Entropie_7[60].Code= 213; d->Entropie_7[60].Length= 8;
d->Entropie_7[10].Code= 107; d->Entropie_7[10].Length= 7;
d->Entropie_7[42].Code= 54; d->Entropie_7[42].Length= 6;
d->Entropie_7[41].Code= 55; d->Entropie_7[41].Length= 6;
d->Entropie_7[20].Code= 56; d->Entropie_7[20].Length= 6;
d->Entropie_7[21].Code= 57; d->Entropie_7[21].Length= 6;
d->Entropie_7[52].Code= 116; d->Entropie_7[52].Length= 7;
d->Entropie_7[51].Code= 117; d->Entropie_7[51].Length= 7;
d->Entropie_7[40].Code= 59; d->Entropie_7[40].Length= 6;
d->Entropie_7[22].Code= 60; d->Entropie_7[22].Length= 6;
d->Entropie_7[23].Code= 61; d->Entropie_7[23].Length= 6;
d->Entropie_7[39].Code= 62; d->Entropie_7[39].Length= 6;
d->Entropie_7[11].Code= 126; d->Entropie_7[11].Length= 7;
d->Entropie_7[57].Code= 254; d->Entropie_7[57].Length= 8;
d->Entropie_7[59].Code= 255; d->Entropie_7[59].Length= 8;
}
#endif //#ifdef MPC_SUPPORT_SV456

View File

@ -39,462 +39,43 @@
#include <mpcdec/huffman.h>
#include <mpcdec/requant.h>
void
mpc_decoder_init_huffman_sv7(mpc_decoder *d)
{
mpc_decoder_init_huffman_sv7_tables(d);
mpc_decoder_resort_huff_tables(10, &(d->HuffHdr[0]) , 5);
mpc_decoder_resort_huff_tables( 4, &(d->HuffSCFI[0]) , 0);
mpc_decoder_resort_huff_tables(16, &(d->HuffDSCF[0]) , 7);
mpc_decoder_resort_huff_tables(27, &(d->HuffQ1[0][0]) , 0);
mpc_decoder_resort_huff_tables(27, &(d->HuffQ1[1][0]) , 0);
mpc_decoder_resort_huff_tables(25, &(d->HuffQ2[0][0]) , 0);
mpc_decoder_resort_huff_tables(25, &(d->HuffQ2[1][0]) , 0);
mpc_decoder_resort_huff_tables( 7, &(d->HuffQ3[0][0]) , Dc[3]);
mpc_decoder_resort_huff_tables( 7, &(d->HuffQ3[1][0]) , Dc[3]);
mpc_decoder_resort_huff_tables( 9, &(d->HuffQ4[0][0]) , Dc[4]);
mpc_decoder_resort_huff_tables( 9, &(d->HuffQ4[1][0]) , Dc[4]);
mpc_decoder_resort_huff_tables(15, &(d->HuffQ5[0][0]) , Dc[5]);
mpc_decoder_resort_huff_tables(15, &(d->HuffQ5[1][0]) , Dc[5]);
mpc_decoder_resort_huff_tables(31, &(d->HuffQ6[0][0]) , Dc[6]);
mpc_decoder_resort_huff_tables(31, &(d->HuffQ6[1][0]) , Dc[6]);
mpc_decoder_resort_huff_tables(63, &(d->HuffQ7[0][0]) , Dc[7]);
mpc_decoder_resort_huff_tables(63, &(d->HuffQ7[1][0]) , Dc[7]);
}
const HuffmanTyp mpc_table_HuffHdr [10] =
{{2147483648u,1,0},{1610612736u,3,1},{1577058304u,7,-4},{1568669696u,9,3},{1560281088u,9,4},{1543503872u,8,-5},{1476395008u,6,2},{1342177280u,5,-3},{1073741824u,4,-2},{0u,2,-1},};
const HuffmanTyp mpc_table_HuffSCFI [ 4] =
{{2147483648u,1,1},{1610612736u,3,2},{1073741824u,3,0},{0u,2,3},};
const HuffmanTyp mpc_table_HuffDSCF [16] =
{{4160749568u,5,5},{4026531840u,5,-4},{3758096384u,4,3},{3489660928u,4,-3},{3221225472u,4,8},{2684354560u,3,1},{2415919104u,4,0},{2281701376u,5,-5},{2214592512u,6,7},{2147483648u,6,-7},{1610612736u,3,-1},{1073741824u,3,2},{805306368u,4,4},{671088640u,5,6},{536870912u,5,-6},{0u,3,-2},};
void
mpc_decoder_init_huffman_sv7_tables(mpc_decoder *d)
{
/***************************** SCFI *******************************/
d->HuffSCFI[0].Code = 2; d->HuffSCFI[0].Length = 3;
d->HuffSCFI[1].Code = 1; d->HuffSCFI[1].Length = 1;
d->HuffSCFI[2].Code = 3; d->HuffSCFI[2].Length = 3;
d->HuffSCFI[3].Code = 0; d->HuffSCFI[3].Length = 2;
static const HuffmanTyp mpc_table_HuffQ1 [2] [3*3*3] = {
{{3758096384u,3,13},{3690987520u,6,26},{3623878656u,6,0},{3556769792u,6,20},{3489660928u,6,6},{3221225472u,4,14},{2952790016u,4,12},{2684354560u,4,4},{2415919104u,4,22},{2348810240u,6,8},{2281701376u,6,18},{2214592512u,6,24},{2147483648u,6,2},{1879048192u,4,16},{1610612736u,4,10},{1476395008u,5,17},{1342177280u,5,9},{1207959552u,5,1},{1073741824u,5,25},{939524096u,5,5},{805306368u,5,21},{671088640u,5,3},{536870912u,5,11},{402653184u,5,15},{268435456u,5,23},{134217728u,5,19},{0u,5,7},},
{{2147483648u,1,13},{2113929216u,7,15},{2080374784u,7,1},{2046820352u,7,11},{2013265920u,7,7},{1979711488u,7,17},{1946157056u,7,25},{1912602624u,7,19},{1904214016u,9,8},{1895825408u,9,18},{1887436800u,9,2},{1879048192u,9,24},{1845493760u,7,3},{1811939328u,7,23},{1778384896u,7,21},{1744830464u,7,5},{1728053248u,8,0},{1711276032u,8,26},{1694498816u,8,6},{1677721600u,8,20},{1610612736u,6,9},{1342177280u,4,14},{1073741824u,4,12},{805306368u,4,4},{536870912u,4,22},{268435456u,4,16},{0u,4,10},},
};
static const HuffmanTyp mpc_table_HuffQ2 [2] [5*5] = {
{{4026531840u,4,13},{3758096384u,4,17},{3489660928u,4,7},{3221225472u,4,11},{3154116608u,6,1},{3087007744u,6,23},{3053453312u,7,4},{3019898880u,7,20},{2986344448u,7,0},{2952790016u,7,24},{2818572288u,5,22},{2684354560u,5,10},{2147483648u,3,12},{2013265920u,5,2},{1879048192u,5,14},{1610612736u,4,6},{1342177280u,4,18},{1073741824u,4,8},{805306368u,4,16},{671088640u,5,9},{536870912u,5,5},{402653184u,5,15},{268435456u,5,21},{134217728u,5,19},{0u,5,3},},
{{4160749568u,5,18},{4026531840u,5,6},{3892314112u,5,8},{3875536896u,8,3},{3871342592u,10,24},{3867148288u,10,4},{3862953984u,10,0},{3858759680u,10,20},{3825205248u,7,23},{3791650816u,7,1},{3758096384u,7,19},{3623878656u,5,16},{3590324224u,7,15},{3556769792u,7,21},{3523215360u,7,9},{3489660928u,7,5},{3422552064u,6,2},{3355443200u,6,10},{3288334336u,6,14},{3221225472u,6,22},{2147483648u,2,12},{1610612736u,3,13},{1073741824u,3,17},{536870912u,3,11},{0u,3,7},},
};
static const HuffmanTyp mpc_table_HuffQ3 [2] [ 7] = {
{{3758096384u,3,1},{3489660928u,4,3},{3221225472u,4,-3},{2684354560u,3,2},{2147483648u,3,-2},{1073741824u,2,0},{0u,2,-1},},
{{3221225472u,2,0},{2147483648u,2,-1},{1073741824u,2,1},{805306368u,4,-2},{671088640u,5,3},{536870912u,5,-3},{0u,3,2},},
};
static const HuffmanTyp mpc_table_HuffQ4 [2] [ 9] = {
{{3758096384u,3,0},{3221225472u,3,-1},{2684354560u,3,1},{2147483648u,3,-2},{1610612736u,3,2},{1342177280u,4,-4},{1073741824u,4,4},{536870912u,3,3},{0u,3,-3},},
{{3758096384u,3,1},{3489660928u,4,2},{3221225472u,4,-3},{2147483648u,2,0},{1610612736u,3,-2},{1342177280u,4,3},{1207959552u,5,-4},{1073741824u,5,4},{0u,2,-1},},
};
static const HuffmanTyp mpc_table_HuffQ5 [2] [15] = {
{{4026531840u,4,2},{3892314112u,5,5},{3825205248u,6,-7},{3758096384u,6,7},{3489660928u,4,-3},{3221225472u,4,3},{3087007744u,5,-6},{2952790016u,5,6},{2684354560u,4,-4},{2415919104u,4,4},{2147483648u,4,-5},{1610612736u,3,0},{1073741824u,3,-1},{536870912u,3,1},{0u,3,-2},},
{{4026531840u,4,3},{3892314112u,5,4},{3858759680u,7,6},{3841982464u,8,-7},{3825205248u,8,7},{3758096384u,6,-6},{3221225472u,3,0},{2684354560u,3,-1},{2147483648u,3,1},{1610612736u,3,-2},{1073741824u,3,2},{939524096u,5,-5},{805306368u,5,5},{536870912u,4,-4},{0u,3,-3},},
};
static const HuffmanTyp mpc_table_HuffQ6 [2] [31] = {
{{4160749568u,5,3},{4026531840u,5,-4},{3959422976u,6,-11},{3892314112u,6,12},{3758096384u,5,4},{3623878656u,5,6},{3489660928u,5,-5},{3355443200u,5,5},{3221225472u,5,7},{3087007744u,5,-7},{3019898880u,6,-12},{2952790016u,6,-13},{2818572288u,5,-6},{2684354560u,5,8},{2550136832u,5,-8},{2415919104u,5,9},{2281701376u,5,-9},{2214592512u,6,13},{2181038080u,7,-15},{2147483648u,7,15},{1879048192u,4,0},{1744830464u,5,-10},{1610612736u,5,10},{1342177280u,4,-1},{1073741824u,4,2},{805306368u,4,1},{536870912u,4,-2},{469762048u,6,14},{402653184u,6,-14},{268435456u,5,11},{0u,4,-3},},
{{4160749568u,5,-6},{4026531840u,5,6},{3758096384u,4,1},{3489660928u,4,-1},{3456106496u,7,10},{3422552064u,7,-10},{3405774848u,8,-11},{3397386240u,9,-12},{3395289088u,11,13},{3394764800u,13,15},{3394240512u,13,-14},{3393716224u,13,14},{3393191936u,13,-15},{3388997632u,10,-13},{3372220416u,8,11},{3355443200u,8,12},{3288334336u,6,-9},{3221225472u,6,9},{2952790016u,4,-2},{2684354560u,4,2},{2415919104u,4,3},{2147483648u,4,-3},{2013265920u,5,-7},{1879048192u,5,7},{1610612736u,4,-4},{1342177280u,4,4},{1207959552u,5,-8},{1073741824u,5,8},{805306368u,4,5},{536870912u,4,-5},{0u,3,0},},
};
static const HuffmanTyp mpc_table_HuffQ7 [2] [63] = {
{{4227858432u,6,7},{4160749568u,6,8},{4093640704u,6,9},{4026531840u,6,-8},{3959422976u,6,11},{3925868544u,7,21},{3909091328u,8,-28},{3892314112u,8,28},{3825205248u,6,-9},{3791650816u,7,-22},{3758096384u,7,-21},{3690987520u,6,-10},{3623878656u,6,-11},{3556769792u,6,10},{3489660928u,6,12},{3422552064u,6,-13},{3388997632u,7,22},{3355443200u,7,23},{3288334336u,6,-12},{3221225472u,6,13},{3154116608u,6,14},{3087007744u,6,-14},{3053453312u,7,-23},{3036676096u,8,-29},{3019898880u,8,29},{2952790016u,6,-15},{2885681152u,6,15},{2818572288u,6,16},{2751463424u,6,-16},{2717908992u,7,-24},{2684354560u,7,24},{2617245696u,6,17},{2583691264u,7,-25},{2566914048u,8,-30},{2550136832u,8,30},{2483027968u,6,-17},{2415919104u,6,18},{2348810240u,6,-18},{2315255808u,7,25},{2281701376u,7,26},{2214592512u,6,19},{2181038080u,7,-26},{2147483648u,7,-27},{2013265920u,5,2},{1946157056u,6,-19},{1879048192u,6,20},{1744830464u,5,-1},{1728053248u,8,-31},{1711276032u,8,31},{1677721600u,7,27},{1610612736u,6,-20},{1476395008u,5,1},{1342177280u,5,-5},{1207959552u,5,-3},{1073741824u,5,3},{939524096u,5,0},{805306368u,5,-2},{671088640u,5,-4},{536870912u,5,4},{402653184u,5,5},{268435456u,5,-6},{134217728u,5,6},{0u,5,-7},},
{{4160749568u,5,-1},{4026531840u,5,2},{3892314112u,5,-2},{3758096384u,5,3},{3741319168u,8,-20},{3737124864u,10,24},{3736862720u,14,28},{3736600576u,14,-28},{3736338432u,14,-30},{3736076288u,14,30},{3735027712u,12,-27},{3734765568u,14,29},{3734503424u,14,-29},{3734241280u,14,31},{3733979136u,14,-31},{3732930560u,12,27},{3724541952u,9,-22},{3690987520u,7,-17},{3623878656u,6,-11},{3489660928u,5,-3},{3355443200u,5,4},{3221225472u,5,-4},{3187671040u,7,17},{3170893824u,8,20},{3162505216u,9,22},{3158310912u,10,-25},{3154116608u,10,-26},{3087007744u,6,12},{2952790016u,5,5},{2818572288u,5,-5},{2684354560u,5,6},{2550136832u,5,-6},{2483027968u,6,-12},{2449473536u,7,-18},{2415919104u,7,18},{2348810240u,6,13},{2281701376u,6,-13},{2147483648u,5,-7},{2080374784u,6,14},{2063597568u,8,21},{2046820352u,8,-21},{2013265920u,7,-19},{1879048192u,5,7},{1744830464u,5,8},{1677721600u,6,-14},{1610612736u,6,-15},{1476395008u,5,-8},{1409286144u,6,15},{1375731712u,7,19},{1371537408u,10,25},{1367343104u,10,26},{1358954496u,9,-23},{1350565888u,9,23},{1342177280u,9,-24},{1207959552u,5,-9},{1073741824u,5,9},{1006632960u,6,16},{939524096u,6,-16},{805306368u,5,10},{536870912u,4,0},{402653184u,5,-10},{268435456u,5,11},{0u,4,1},},
};
/***************************** DSCF *******************************/
d->HuffDSCF[ 0].Code = 32; d->HuffDSCF[ 0].Length = 6;
d->HuffDSCF[ 1].Code = 4; d->HuffDSCF[ 1].Length = 5;
d->HuffDSCF[ 2].Code = 17; d->HuffDSCF[ 2].Length = 5;
d->HuffDSCF[ 3].Code = 30; d->HuffDSCF[ 3].Length = 5;
d->HuffDSCF[ 4].Code = 13; d->HuffDSCF[ 4].Length = 4;
d->HuffDSCF[ 5].Code = 0; d->HuffDSCF[ 5].Length = 3;
d->HuffDSCF[ 6].Code = 3; d->HuffDSCF[ 6].Length = 3;
d->HuffDSCF[ 7].Code = 9; d->HuffDSCF[ 7].Length = 4;
d->HuffDSCF[ 8].Code = 5; d->HuffDSCF[ 8].Length = 3;
d->HuffDSCF[ 9].Code = 2; d->HuffDSCF[ 9].Length = 3;
d->HuffDSCF[10].Code = 14; d->HuffDSCF[10].Length = 4;
d->HuffDSCF[11].Code = 3; d->HuffDSCF[11].Length = 4;
d->HuffDSCF[12].Code = 31; d->HuffDSCF[12].Length = 5;
d->HuffDSCF[13].Code = 5; d->HuffDSCF[13].Length = 5;
d->HuffDSCF[14].Code = 33; d->HuffDSCF[14].Length = 6;
d->HuffDSCF[15].Code = 12; d->HuffDSCF[15].Length = 4;
/************************* frame-header ***************************/
/***************** differential quantizer indizes *****************/
d->HuffHdr[0].Code = 92; d->HuffHdr[0].Length = 8;
d->HuffHdr[1].Code = 47; d->HuffHdr[1].Length = 7;
d->HuffHdr[2].Code = 10; d->HuffHdr[2].Length = 5;
d->HuffHdr[3].Code = 4; d->HuffHdr[3].Length = 4;
d->HuffHdr[4].Code = 0; d->HuffHdr[4].Length = 2;
d->HuffHdr[5].Code = 1; d->HuffHdr[5].Length = 1;
d->HuffHdr[6].Code = 3; d->HuffHdr[6].Length = 3;
d->HuffHdr[7].Code = 22; d->HuffHdr[7].Length = 6;
d->HuffHdr[8].Code = 187; d->HuffHdr[8].Length = 9;
d->HuffHdr[9].Code = 186; d->HuffHdr[9].Length = 9;
/********************** 3-step quantizer **************************/
/********************* 3 bundled samples **************************/
//less shaped, book 0
d->HuffQ1[0][ 0].Code = 54; d->HuffQ1[0][ 0].Length = 6;
d->HuffQ1[0][ 1].Code = 9; d->HuffQ1[0][ 1].Length = 5;
d->HuffQ1[0][ 2].Code = 32; d->HuffQ1[0][ 2].Length = 6;
d->HuffQ1[0][ 3].Code = 5; d->HuffQ1[0][ 3].Length = 5;
d->HuffQ1[0][ 4].Code = 10; d->HuffQ1[0][ 4].Length = 4;
d->HuffQ1[0][ 5].Code = 7; d->HuffQ1[0][ 5].Length = 5;
d->HuffQ1[0][ 6].Code = 52; d->HuffQ1[0][ 6].Length = 6;
d->HuffQ1[0][ 7].Code = 0; d->HuffQ1[0][ 7].Length = 5;
d->HuffQ1[0][ 8].Code = 35; d->HuffQ1[0][ 8].Length = 6;
d->HuffQ1[0][ 9].Code = 10; d->HuffQ1[0][ 9].Length = 5;
d->HuffQ1[0][10].Code = 6; d->HuffQ1[0][10].Length = 4;
d->HuffQ1[0][11].Code = 4; d->HuffQ1[0][11].Length = 5;
d->HuffQ1[0][12].Code = 11; d->HuffQ1[0][12].Length = 4;
d->HuffQ1[0][13].Code = 7; d->HuffQ1[0][13].Length = 3;
d->HuffQ1[0][14].Code = 12; d->HuffQ1[0][14].Length = 4;
d->HuffQ1[0][15].Code = 3; d->HuffQ1[0][15].Length = 5;
d->HuffQ1[0][16].Code = 7; d->HuffQ1[0][16].Length = 4;
d->HuffQ1[0][17].Code = 11; d->HuffQ1[0][17].Length = 5;
d->HuffQ1[0][18].Code = 34; d->HuffQ1[0][18].Length = 6;
d->HuffQ1[0][19].Code = 1; d->HuffQ1[0][19].Length = 5;
d->HuffQ1[0][20].Code = 53; d->HuffQ1[0][20].Length = 6;
d->HuffQ1[0][21].Code = 6; d->HuffQ1[0][21].Length = 5;
d->HuffQ1[0][22].Code = 9; d->HuffQ1[0][22].Length = 4;
d->HuffQ1[0][23].Code = 2; d->HuffQ1[0][23].Length = 5;
d->HuffQ1[0][24].Code = 33; d->HuffQ1[0][24].Length = 6;
d->HuffQ1[0][25].Code = 8; d->HuffQ1[0][25].Length = 5;
d->HuffQ1[0][26].Code = 55; d->HuffQ1[0][26].Length = 6;
//more shaped, book 1
d->HuffQ1[1][ 0].Code = 103; d->HuffQ1[1][ 0].Length = 8;
d->HuffQ1[1][ 1].Code = 62; d->HuffQ1[1][ 1].Length = 7;
d->HuffQ1[1][ 2].Code = 225; d->HuffQ1[1][ 2].Length = 9;
d->HuffQ1[1][ 3].Code = 55; d->HuffQ1[1][ 3].Length = 7;
d->HuffQ1[1][ 4].Code = 3; d->HuffQ1[1][ 4].Length = 4;
d->HuffQ1[1][ 5].Code = 52; d->HuffQ1[1][ 5].Length = 7;
d->HuffQ1[1][ 6].Code = 101; d->HuffQ1[1][ 6].Length = 8;
d->HuffQ1[1][ 7].Code = 60; d->HuffQ1[1][ 7].Length = 7;
d->HuffQ1[1][ 8].Code = 227; d->HuffQ1[1][ 8].Length = 9;
d->HuffQ1[1][ 9].Code = 24; d->HuffQ1[1][ 9].Length = 6;
d->HuffQ1[1][10].Code = 0; d->HuffQ1[1][10].Length = 4;
d->HuffQ1[1][11].Code = 61; d->HuffQ1[1][11].Length = 7;
d->HuffQ1[1][12].Code = 4; d->HuffQ1[1][12].Length = 4;
d->HuffQ1[1][13].Code = 1; d->HuffQ1[1][13].Length = 1;
d->HuffQ1[1][14].Code = 5; d->HuffQ1[1][14].Length = 4;
d->HuffQ1[1][15].Code = 63; d->HuffQ1[1][15].Length = 7;
d->HuffQ1[1][16].Code = 1; d->HuffQ1[1][16].Length = 4;
d->HuffQ1[1][17].Code = 59; d->HuffQ1[1][17].Length = 7;
d->HuffQ1[1][18].Code = 226; d->HuffQ1[1][18].Length = 9;
d->HuffQ1[1][19].Code = 57; d->HuffQ1[1][19].Length = 7;
d->HuffQ1[1][20].Code = 100; d->HuffQ1[1][20].Length = 8;
d->HuffQ1[1][21].Code = 53; d->HuffQ1[1][21].Length = 7;
d->HuffQ1[1][22].Code = 2; d->HuffQ1[1][22].Length = 4;
d->HuffQ1[1][23].Code = 54; d->HuffQ1[1][23].Length = 7;
d->HuffQ1[1][24].Code = 224; d->HuffQ1[1][24].Length = 9;
d->HuffQ1[1][25].Code = 58; d->HuffQ1[1][25].Length = 7;
d->HuffQ1[1][26].Code = 102; d->HuffQ1[1][26].Length = 8;
/********************** 5-step quantizer **************************/
/********************* 2 bundled samples **************************/
//less shaped, book 0
d->HuffQ2[0][ 0].Code = 89; d->HuffQ2[0][ 0].Length = 7;
d->HuffQ2[0][ 1].Code = 47; d->HuffQ2[0][ 1].Length = 6;
d->HuffQ2[0][ 2].Code = 15; d->HuffQ2[0][ 2].Length = 5;
d->HuffQ2[0][ 3].Code = 0; d->HuffQ2[0][ 3].Length = 5;
d->HuffQ2[0][ 4].Code = 91; d->HuffQ2[0][ 4].Length = 7;
d->HuffQ2[0][ 5].Code = 4; d->HuffQ2[0][ 5].Length = 5;
d->HuffQ2[0][ 6].Code = 6; d->HuffQ2[0][ 6].Length = 4;
d->HuffQ2[0][ 7].Code = 13; d->HuffQ2[0][ 7].Length = 4;
d->HuffQ2[0][ 8].Code = 4; d->HuffQ2[0][ 8].Length = 4;
d->HuffQ2[0][ 9].Code = 5; d->HuffQ2[0][ 9].Length = 5;
d->HuffQ2[0][10].Code = 20; d->HuffQ2[0][10].Length = 5;
d->HuffQ2[0][11].Code = 12; d->HuffQ2[0][11].Length = 4;
d->HuffQ2[0][12].Code = 4; d->HuffQ2[0][12].Length = 3;
d->HuffQ2[0][13].Code = 15; d->HuffQ2[0][13].Length = 4;
d->HuffQ2[0][14].Code = 14; d->HuffQ2[0][14].Length = 5;
d->HuffQ2[0][15].Code = 3; d->HuffQ2[0][15].Length = 5;
d->HuffQ2[0][16].Code = 3; d->HuffQ2[0][16].Length = 4;
d->HuffQ2[0][17].Code = 14; d->HuffQ2[0][17].Length = 4;
d->HuffQ2[0][18].Code = 5; d->HuffQ2[0][18].Length = 4;
d->HuffQ2[0][19].Code = 1; d->HuffQ2[0][19].Length = 5;
d->HuffQ2[0][20].Code = 90; d->HuffQ2[0][20].Length = 7;
d->HuffQ2[0][21].Code = 2; d->HuffQ2[0][21].Length = 5;
d->HuffQ2[0][22].Code = 21; d->HuffQ2[0][22].Length = 5;
d->HuffQ2[0][23].Code = 46; d->HuffQ2[0][23].Length = 6;
d->HuffQ2[0][24].Code = 88; d->HuffQ2[0][24].Length = 7;
//more shaped, book 1
d->HuffQ2[1][ 0].Code = 921; d->HuffQ2[1][ 0].Length = 10;
d->HuffQ2[1][ 1].Code = 113; d->HuffQ2[1][ 1].Length = 7;
d->HuffQ2[1][ 2].Code = 51; d->HuffQ2[1][ 2].Length = 6;
d->HuffQ2[1][ 3].Code = 231; d->HuffQ2[1][ 3].Length = 8;
d->HuffQ2[1][ 4].Code = 922; d->HuffQ2[1][ 4].Length = 10;
d->HuffQ2[1][ 5].Code = 104; d->HuffQ2[1][ 5].Length = 7;
d->HuffQ2[1][ 6].Code = 30; d->HuffQ2[1][ 6].Length = 5;
d->HuffQ2[1][ 7].Code = 0; d->HuffQ2[1][ 7].Length = 3;
d->HuffQ2[1][ 8].Code = 29; d->HuffQ2[1][ 8].Length = 5;
d->HuffQ2[1][ 9].Code = 105; d->HuffQ2[1][ 9].Length = 7;
d->HuffQ2[1][10].Code = 50; d->HuffQ2[1][10].Length = 6;
d->HuffQ2[1][11].Code = 1; d->HuffQ2[1][11].Length = 3;
d->HuffQ2[1][12].Code = 2; d->HuffQ2[1][12].Length = 2;
d->HuffQ2[1][13].Code = 3; d->HuffQ2[1][13].Length = 3;
d->HuffQ2[1][14].Code = 49; d->HuffQ2[1][14].Length = 6;
d->HuffQ2[1][15].Code = 107; d->HuffQ2[1][15].Length = 7;
d->HuffQ2[1][16].Code = 27; d->HuffQ2[1][16].Length = 5;
d->HuffQ2[1][17].Code = 2; d->HuffQ2[1][17].Length = 3;
d->HuffQ2[1][18].Code = 31; d->HuffQ2[1][18].Length = 5;
d->HuffQ2[1][19].Code = 112; d->HuffQ2[1][19].Length = 7;
d->HuffQ2[1][20].Code = 920; d->HuffQ2[1][20].Length = 10;
d->HuffQ2[1][21].Code = 106; d->HuffQ2[1][21].Length = 7;
d->HuffQ2[1][22].Code = 48; d->HuffQ2[1][22].Length = 6;
d->HuffQ2[1][23].Code = 114; d->HuffQ2[1][23].Length = 7;
d->HuffQ2[1][24].Code = 923; d->HuffQ2[1][24].Length = 10;
/********************** 7-step quantizer **************************/
/*********************** single samples ***************************/
//less shaped, book 0
d->HuffQ3[0][0].Code = 12; d->HuffQ3[0][0].Length = 4;
d->HuffQ3[0][1].Code = 4; d->HuffQ3[0][1].Length = 3;
d->HuffQ3[0][2].Code = 0; d->HuffQ3[0][2].Length = 2;
d->HuffQ3[0][3].Code = 1; d->HuffQ3[0][3].Length = 2;
d->HuffQ3[0][4].Code = 7; d->HuffQ3[0][4].Length = 3;
d->HuffQ3[0][5].Code = 5; d->HuffQ3[0][5].Length = 3;
d->HuffQ3[0][6].Code = 13; d->HuffQ3[0][6].Length = 4;
//more shaped, book 1
d->HuffQ3[1][0].Code = 4; d->HuffQ3[1][0].Length = 5;
d->HuffQ3[1][1].Code = 3; d->HuffQ3[1][1].Length = 4;
d->HuffQ3[1][2].Code = 2; d->HuffQ3[1][2].Length = 2;
d->HuffQ3[1][3].Code = 3; d->HuffQ3[1][3].Length = 2;
d->HuffQ3[1][4].Code = 1; d->HuffQ3[1][4].Length = 2;
d->HuffQ3[1][5].Code = 0; d->HuffQ3[1][5].Length = 3;
d->HuffQ3[1][6].Code = 5; d->HuffQ3[1][6].Length = 5;
/********************** 9-step quantizer **************************/
/*********************** single samples ***************************/
//less shaped, book 0
d->HuffQ4[0][0].Code = 5; d->HuffQ4[0][0].Length = 4;
d->HuffQ4[0][1].Code = 0; d->HuffQ4[0][1].Length = 3;
d->HuffQ4[0][2].Code = 4; d->HuffQ4[0][2].Length = 3;
d->HuffQ4[0][3].Code = 6; d->HuffQ4[0][3].Length = 3;
d->HuffQ4[0][4].Code = 7; d->HuffQ4[0][4].Length = 3;
d->HuffQ4[0][5].Code = 5; d->HuffQ4[0][5].Length = 3;
d->HuffQ4[0][6].Code = 3; d->HuffQ4[0][6].Length = 3;
d->HuffQ4[0][7].Code = 1; d->HuffQ4[0][7].Length = 3;
d->HuffQ4[0][8].Code = 4; d->HuffQ4[0][8].Length = 4;
//more shaped, book 1
d->HuffQ4[1][0].Code = 9; d->HuffQ4[1][0].Length = 5;
d->HuffQ4[1][1].Code = 12; d->HuffQ4[1][1].Length = 4;
d->HuffQ4[1][2].Code = 3; d->HuffQ4[1][2].Length = 3;
d->HuffQ4[1][3].Code = 0; d->HuffQ4[1][3].Length = 2;
d->HuffQ4[1][4].Code = 2; d->HuffQ4[1][4].Length = 2;
d->HuffQ4[1][5].Code = 7; d->HuffQ4[1][5].Length = 3;
d->HuffQ4[1][6].Code = 13; d->HuffQ4[1][6].Length = 4;
d->HuffQ4[1][7].Code = 5; d->HuffQ4[1][7].Length = 4;
d->HuffQ4[1][8].Code = 8; d->HuffQ4[1][8].Length = 5;
/********************* 15-step quantizer **************************/
/*********************** single samples ***************************/
//less shaped, book 0
d->HuffQ5[0][ 0].Code = 57; d->HuffQ5[0][ 0].Length = 6;
d->HuffQ5[0][ 1].Code = 23; d->HuffQ5[0][ 1].Length = 5;
d->HuffQ5[0][ 2].Code = 8; d->HuffQ5[0][ 2].Length = 4;
d->HuffQ5[0][ 3].Code = 10; d->HuffQ5[0][ 3].Length = 4;
d->HuffQ5[0][ 4].Code = 13; d->HuffQ5[0][ 4].Length = 4;
d->HuffQ5[0][ 5].Code = 0; d->HuffQ5[0][ 5].Length = 3;
d->HuffQ5[0][ 6].Code = 2; d->HuffQ5[0][ 6].Length = 3;
d->HuffQ5[0][ 7].Code = 3; d->HuffQ5[0][ 7].Length = 3;
d->HuffQ5[0][ 8].Code = 1; d->HuffQ5[0][ 8].Length = 3;
d->HuffQ5[0][ 9].Code = 15; d->HuffQ5[0][ 9].Length = 4;
d->HuffQ5[0][10].Code = 12; d->HuffQ5[0][10].Length = 4;
d->HuffQ5[0][11].Code = 9; d->HuffQ5[0][11].Length = 4;
d->HuffQ5[0][12].Code = 29; d->HuffQ5[0][12].Length = 5;
d->HuffQ5[0][13].Code = 22; d->HuffQ5[0][13].Length = 5;
d->HuffQ5[0][14].Code = 56; d->HuffQ5[0][14].Length = 6;
//more shaped, book 1
d->HuffQ5[1][ 0].Code = 229; d->HuffQ5[1][ 0].Length = 8;
d->HuffQ5[1][ 1].Code = 56; d->HuffQ5[1][ 1].Length = 6;
d->HuffQ5[1][ 2].Code = 7; d->HuffQ5[1][ 2].Length = 5;
d->HuffQ5[1][ 3].Code = 2; d->HuffQ5[1][ 3].Length = 4;
d->HuffQ5[1][ 4].Code = 0; d->HuffQ5[1][ 4].Length = 3;
d->HuffQ5[1][ 5].Code = 3; d->HuffQ5[1][ 5].Length = 3;
d->HuffQ5[1][ 6].Code = 5; d->HuffQ5[1][ 6].Length = 3;
d->HuffQ5[1][ 7].Code = 6; d->HuffQ5[1][ 7].Length = 3;
d->HuffQ5[1][ 8].Code = 4; d->HuffQ5[1][ 8].Length = 3;
d->HuffQ5[1][ 9].Code = 2; d->HuffQ5[1][ 9].Length = 3;
d->HuffQ5[1][10].Code = 15; d->HuffQ5[1][10].Length = 4;
d->HuffQ5[1][11].Code = 29; d->HuffQ5[1][11].Length = 5;
d->HuffQ5[1][12].Code = 6; d->HuffQ5[1][12].Length = 5;
d->HuffQ5[1][13].Code = 115; d->HuffQ5[1][13].Length = 7;
d->HuffQ5[1][14].Code = 228; d->HuffQ5[1][14].Length = 8;
/********************* 31-step quantizer **************************/
/*********************** single samples ***************************/
//less shaped, book 0
d->HuffQ6[0][ 0].Code = 65; d->HuffQ6[0][ 0].Length = 7;
d->HuffQ6[0][ 1].Code = 6; d->HuffQ6[0][ 1].Length = 6;
d->HuffQ6[0][ 2].Code = 44; d->HuffQ6[0][ 2].Length = 6;
d->HuffQ6[0][ 3].Code = 45; d->HuffQ6[0][ 3].Length = 6;
d->HuffQ6[0][ 4].Code = 59; d->HuffQ6[0][ 4].Length = 6;
d->HuffQ6[0][ 5].Code = 13; d->HuffQ6[0][ 5].Length = 5;
d->HuffQ6[0][ 6].Code = 17; d->HuffQ6[0][ 6].Length = 5;
d->HuffQ6[0][ 7].Code = 19; d->HuffQ6[0][ 7].Length = 5;
d->HuffQ6[0][ 8].Code = 23; d->HuffQ6[0][ 8].Length = 5;
d->HuffQ6[0][ 9].Code = 21; d->HuffQ6[0][ 9].Length = 5;
d->HuffQ6[0][10].Code = 26; d->HuffQ6[0][10].Length = 5;
d->HuffQ6[0][11].Code = 30; d->HuffQ6[0][11].Length = 5;
d->HuffQ6[0][12].Code = 0; d->HuffQ6[0][12].Length = 4;
d->HuffQ6[0][13].Code = 2; d->HuffQ6[0][13].Length = 4;
d->HuffQ6[0][14].Code = 5; d->HuffQ6[0][14].Length = 4;
d->HuffQ6[0][15].Code = 7; d->HuffQ6[0][15].Length = 4;
d->HuffQ6[0][16].Code = 3; d->HuffQ6[0][16].Length = 4;
d->HuffQ6[0][17].Code = 4; d->HuffQ6[0][17].Length = 4;
d->HuffQ6[0][18].Code = 31; d->HuffQ6[0][18].Length = 5;
d->HuffQ6[0][19].Code = 28; d->HuffQ6[0][19].Length = 5;
d->HuffQ6[0][20].Code = 25; d->HuffQ6[0][20].Length = 5;
d->HuffQ6[0][21].Code = 27; d->HuffQ6[0][21].Length = 5;
d->HuffQ6[0][22].Code = 24; d->HuffQ6[0][22].Length = 5;
d->HuffQ6[0][23].Code = 20; d->HuffQ6[0][23].Length = 5;
d->HuffQ6[0][24].Code = 18; d->HuffQ6[0][24].Length = 5;
d->HuffQ6[0][25].Code = 12; d->HuffQ6[0][25].Length = 5;
d->HuffQ6[0][26].Code = 2; d->HuffQ6[0][26].Length = 5;
d->HuffQ6[0][27].Code = 58; d->HuffQ6[0][27].Length = 6;
d->HuffQ6[0][28].Code = 33; d->HuffQ6[0][28].Length = 6;
d->HuffQ6[0][29].Code = 7; d->HuffQ6[0][29].Length = 6;
d->HuffQ6[0][30].Code = 64; d->HuffQ6[0][30].Length = 7;
//more shaped, book 1
d->HuffQ6[1][ 0].Code = 6472; d->HuffQ6[1][ 0].Length = 13;
d->HuffQ6[1][ 1].Code = 6474; d->HuffQ6[1][ 1].Length = 13;
d->HuffQ6[1][ 2].Code = 808; d->HuffQ6[1][ 2].Length = 10;
d->HuffQ6[1][ 3].Code = 405; d->HuffQ6[1][ 3].Length = 9;
d->HuffQ6[1][ 4].Code = 203; d->HuffQ6[1][ 4].Length = 8;
d->HuffQ6[1][ 5].Code = 102; d->HuffQ6[1][ 5].Length = 7;
d->HuffQ6[1][ 6].Code = 49; d->HuffQ6[1][ 6].Length = 6;
d->HuffQ6[1][ 7].Code = 9; d->HuffQ6[1][ 7].Length = 5;
d->HuffQ6[1][ 8].Code = 15; d->HuffQ6[1][ 8].Length = 5;
d->HuffQ6[1][ 9].Code = 31; d->HuffQ6[1][ 9].Length = 5;
d->HuffQ6[1][10].Code = 2; d->HuffQ6[1][10].Length = 4;
d->HuffQ6[1][11].Code = 6; d->HuffQ6[1][11].Length = 4;
d->HuffQ6[1][12].Code = 8; d->HuffQ6[1][12].Length = 4;
d->HuffQ6[1][13].Code = 11; d->HuffQ6[1][13].Length = 4;
d->HuffQ6[1][14].Code = 13; d->HuffQ6[1][14].Length = 4;
d->HuffQ6[1][15].Code = 0; d->HuffQ6[1][15].Length = 3;
d->HuffQ6[1][16].Code = 14; d->HuffQ6[1][16].Length = 4;
d->HuffQ6[1][17].Code = 10; d->HuffQ6[1][17].Length = 4;
d->HuffQ6[1][18].Code = 9; d->HuffQ6[1][18].Length = 4;
d->HuffQ6[1][19].Code = 5; d->HuffQ6[1][19].Length = 4;
d->HuffQ6[1][20].Code = 3; d->HuffQ6[1][20].Length = 4;
d->HuffQ6[1][21].Code = 30; d->HuffQ6[1][21].Length = 5;
d->HuffQ6[1][22].Code = 14; d->HuffQ6[1][22].Length = 5;
d->HuffQ6[1][23].Code = 8; d->HuffQ6[1][23].Length = 5;
d->HuffQ6[1][24].Code = 48; d->HuffQ6[1][24].Length = 6;
d->HuffQ6[1][25].Code = 103; d->HuffQ6[1][25].Length = 7;
d->HuffQ6[1][26].Code = 201; d->HuffQ6[1][26].Length = 8;
d->HuffQ6[1][27].Code = 200; d->HuffQ6[1][27].Length = 8;
d->HuffQ6[1][28].Code = 1619; d->HuffQ6[1][28].Length = 11;
d->HuffQ6[1][29].Code = 6473; d->HuffQ6[1][29].Length = 13;
d->HuffQ6[1][30].Code = 6475; d->HuffQ6[1][30].Length = 13;
/********************* 63-step quantizer **************************/
/*********************** single samples ***************************/
//less shaped, book 0
d->HuffQ7[0][ 0].Code = 103; d->HuffQ7[0][ 0].Length = 8; /* 0.003338 - 01100111 */
d->HuffQ7[0][ 1].Code = 153; d->HuffQ7[0][ 1].Length = 8; /* 0.003766 - 10011001 */
d->HuffQ7[0][ 2].Code = 181; d->HuffQ7[0][ 2].Length = 8; /* 0.004715 - 10110101 */
d->HuffQ7[0][ 3].Code = 233; d->HuffQ7[0][ 3].Length = 8; /* 0.005528 - 11101001 */
d->HuffQ7[0][ 4].Code = 64; d->HuffQ7[0][ 4].Length = 7; /* 0.006677 - 1000000 */
d->HuffQ7[0][ 5].Code = 65; d->HuffQ7[0][ 5].Length = 7; /* 0.007041 - 1000001 */
d->HuffQ7[0][ 6].Code = 77; d->HuffQ7[0][ 6].Length = 7; /* 0.007733 - 1001101 */
d->HuffQ7[0][ 7].Code = 81; d->HuffQ7[0][ 7].Length = 7; /* 0.008296 - 1010001 */
d->HuffQ7[0][ 8].Code = 91; d->HuffQ7[0][ 8].Length = 7; /* 0.009295 - 1011011 */
d->HuffQ7[0][ 9].Code = 113; d->HuffQ7[0][ 9].Length = 7; /* 0.010814 - 1110001 */
d->HuffQ7[0][10].Code = 112; d->HuffQ7[0][10].Length = 7; /* 0.010807 - 1110000 */
d->HuffQ7[0][11].Code = 24; d->HuffQ7[0][11].Length = 6; /* 0.012748 - 011000 */
d->HuffQ7[0][12].Code = 29; d->HuffQ7[0][12].Length = 6; /* 0.013390 - 011101 */
d->HuffQ7[0][13].Code = 35; d->HuffQ7[0][13].Length = 6; /* 0.014224 - 100011 */
d->HuffQ7[0][14].Code = 37; d->HuffQ7[0][14].Length = 6; /* 0.015201 - 100101 */
d->HuffQ7[0][15].Code = 41; d->HuffQ7[0][15].Length = 6; /* 0.016642 - 101001 */
d->HuffQ7[0][16].Code = 44; d->HuffQ7[0][16].Length = 6; /* 0.017292 - 101100 */
d->HuffQ7[0][17].Code = 46; d->HuffQ7[0][17].Length = 6; /* 0.018647 - 101110 */
d->HuffQ7[0][18].Code = 51; d->HuffQ7[0][18].Length = 6; /* 0.020473 - 110011 */
d->HuffQ7[0][19].Code = 49; d->HuffQ7[0][19].Length = 6; /* 0.020152 - 110001 */
d->HuffQ7[0][20].Code = 54; d->HuffQ7[0][20].Length = 6; /* 0.021315 - 110110 */
d->HuffQ7[0][21].Code = 55; d->HuffQ7[0][21].Length = 6; /* 0.021358 - 110111 */
d->HuffQ7[0][22].Code = 57; d->HuffQ7[0][22].Length = 6; /* 0.021700 - 111001 */
d->HuffQ7[0][23].Code = 60; d->HuffQ7[0][23].Length = 6; /* 0.022449 - 111100 */
d->HuffQ7[0][24].Code = 0; d->HuffQ7[0][24].Length = 5; /* 0.023063 - 00000 */
d->HuffQ7[0][25].Code = 2; d->HuffQ7[0][25].Length = 5; /* 0.023854 - 00010 */
d->HuffQ7[0][26].Code = 10; d->HuffQ7[0][26].Length = 5; /* 0.025481 - 01010 */
d->HuffQ7[0][27].Code = 5; d->HuffQ7[0][27].Length = 5; /* 0.024867 - 00101 */
d->HuffQ7[0][28].Code = 9; d->HuffQ7[0][28].Length = 5; /* 0.025352 - 01001 */
d->HuffQ7[0][29].Code = 6; d->HuffQ7[0][29].Length = 5; /* 0.025074 - 00110 */
d->HuffQ7[0][30].Code = 13; d->HuffQ7[0][30].Length = 5; /* 0.025745 - 01101 */
d->HuffQ7[0][31].Code = 7; d->HuffQ7[0][31].Length = 5; /* 0.025195 - 00111 */
d->HuffQ7[0][32].Code = 11; d->HuffQ7[0][32].Length = 5; /* 0.025502 - 01011 */
d->HuffQ7[0][33].Code = 15; d->HuffQ7[0][33].Length = 5; /* 0.026251 - 01111 */
d->HuffQ7[0][34].Code = 8; d->HuffQ7[0][34].Length = 5; /* 0.025260 - 01000 */
d->HuffQ7[0][35].Code = 4; d->HuffQ7[0][35].Length = 5; /* 0.024418 - 00100 */
d->HuffQ7[0][36].Code = 3; d->HuffQ7[0][36].Length = 5; /* 0.023983 - 00011 */
d->HuffQ7[0][37].Code = 1; d->HuffQ7[0][37].Length = 5; /* 0.023697 - 00001 */
d->HuffQ7[0][38].Code = 63; d->HuffQ7[0][38].Length = 6; /* 0.023041 - 111111 */
d->HuffQ7[0][39].Code = 62; d->HuffQ7[0][39].Length = 6; /* 0.022656 - 111110 */
d->HuffQ7[0][40].Code = 61; d->HuffQ7[0][40].Length = 6; /* 0.022549 - 111101 */
d->HuffQ7[0][41].Code = 53; d->HuffQ7[0][41].Length = 6; /* 0.021151 - 110101 */
d->HuffQ7[0][42].Code = 59; d->HuffQ7[0][42].Length = 6; /* 0.022042 - 111011 */
d->HuffQ7[0][43].Code = 52; d->HuffQ7[0][43].Length = 6; /* 0.020837 - 110100 */
d->HuffQ7[0][44].Code = 48; d->HuffQ7[0][44].Length = 6; /* 0.019446 - 110000 */
d->HuffQ7[0][45].Code = 47; d->HuffQ7[0][45].Length = 6; /* 0.019189 - 101111 */
d->HuffQ7[0][46].Code = 43; d->HuffQ7[0][46].Length = 6; /* 0.017177 - 101011 */
d->HuffQ7[0][47].Code = 42; d->HuffQ7[0][47].Length = 6; /* 0.017035 - 101010 */
d->HuffQ7[0][48].Code = 39; d->HuffQ7[0][48].Length = 6; /* 0.015287 - 100111 */
d->HuffQ7[0][49].Code = 36; d->HuffQ7[0][49].Length = 6; /* 0.014559 - 100100 */
d->HuffQ7[0][50].Code = 33; d->HuffQ7[0][50].Length = 6; /* 0.014117 - 100001 */
d->HuffQ7[0][51].Code = 28; d->HuffQ7[0][51].Length = 6; /* 0.012776 - 011100 */
d->HuffQ7[0][52].Code = 117; d->HuffQ7[0][52].Length = 7; /* 0.011107 - 1110101 */
d->HuffQ7[0][53].Code = 101; d->HuffQ7[0][53].Length = 7; /* 0.010636 - 1100101 */
d->HuffQ7[0][54].Code = 100; d->HuffQ7[0][54].Length = 7; /* 0.009751 - 1100100 */
d->HuffQ7[0][55].Code = 80; d->HuffQ7[0][55].Length = 7; /* 0.008132 - 1010000 */
d->HuffQ7[0][56].Code = 69; d->HuffQ7[0][56].Length = 7; /* 0.007091 - 1000101 */
d->HuffQ7[0][57].Code = 68; d->HuffQ7[0][57].Length = 7; /* 0.007084 - 1000100 */
d->HuffQ7[0][58].Code = 50; d->HuffQ7[0][58].Length = 7; /* 0.006277 - 0110010 */
d->HuffQ7[0][59].Code = 232; d->HuffQ7[0][59].Length = 8; /* 0.005386 - 11101000 */
d->HuffQ7[0][60].Code = 180; d->HuffQ7[0][60].Length = 8; /* 0.004408 - 10110100 */
d->HuffQ7[0][61].Code = 152; d->HuffQ7[0][61].Length = 8; /* 0.003759 - 10011000 */
d->HuffQ7[0][62].Code = 102; d->HuffQ7[0][62].Length = 8; /* 0.003160 - 01100110 */
//more shaped, book 1
d->HuffQ7[1][ 0].Code = 14244; d->HuffQ7[1][ 0].Length = 14; /* 0.000059 - 11011110100100 */
d->HuffQ7[1][ 1].Code = 14253; d->HuffQ7[1][ 1].Length = 14; /* 0.000098 - 11011110101101 */
d->HuffQ7[1][ 2].Code = 14246; d->HuffQ7[1][ 2].Length = 14; /* 0.000078 - 11011110100110 */
d->HuffQ7[1][ 3].Code = 14254; d->HuffQ7[1][ 3].Length = 14; /* 0.000111 - 11011110101110 */
d->HuffQ7[1][ 4].Code = 3562; d->HuffQ7[1][ 4].Length = 12; /* 0.000320 - 110111101010 */
d->HuffQ7[1][ 5].Code = 752; d->HuffQ7[1][ 5].Length = 10; /* 0.000920 - 1011110000 */
d->HuffQ7[1][ 6].Code = 753; d->HuffQ7[1][ 6].Length = 10; /* 0.001057 - 1011110001 */
d->HuffQ7[1][ 7].Code = 160; d->HuffQ7[1][ 7].Length = 9; /* 0.001403 - 010100000 */
d->HuffQ7[1][ 8].Code = 162; d->HuffQ7[1][ 8].Length = 9; /* 0.001579 - 010100010 */
d->HuffQ7[1][ 9].Code = 444; d->HuffQ7[1][ 9].Length = 9; /* 0.002486 - 110111100 */
d->HuffQ7[1][10].Code = 122; d->HuffQ7[1][10].Length = 8; /* 0.003772 - 01111010 */
d->HuffQ7[1][11].Code = 223; d->HuffQ7[1][11].Length = 8; /* 0.005710 - 11011111 */
d->HuffQ7[1][12].Code = 60; d->HuffQ7[1][12].Length = 7; /* 0.006858 - 0111100 */
d->HuffQ7[1][13].Code = 73; d->HuffQ7[1][13].Length = 7; /* 0.008033 - 1001001 */
d->HuffQ7[1][14].Code = 110; d->HuffQ7[1][14].Length = 7; /* 0.009827 - 1101110 */
d->HuffQ7[1][15].Code = 14; d->HuffQ7[1][15].Length = 6; /* 0.012601 - 001110 */
d->HuffQ7[1][16].Code = 24; d->HuffQ7[1][16].Length = 6; /* 0.013194 - 011000 */
d->HuffQ7[1][17].Code = 25; d->HuffQ7[1][17].Length = 6; /* 0.013938 - 011001 */
d->HuffQ7[1][18].Code = 34; d->HuffQ7[1][18].Length = 6; /* 0.015693 - 100010 */
d->HuffQ7[1][19].Code = 37; d->HuffQ7[1][19].Length = 6; /* 0.017846 - 100101 */
d->HuffQ7[1][20].Code = 54; d->HuffQ7[1][20].Length = 6; /* 0.020078 - 110110 */
d->HuffQ7[1][21].Code = 3; d->HuffQ7[1][21].Length = 5; /* 0.022975 - 00011 */
d->HuffQ7[1][22].Code = 9; d->HuffQ7[1][22].Length = 5; /* 0.025631 - 01001 */
d->HuffQ7[1][23].Code = 11; d->HuffQ7[1][23].Length = 5; /* 0.027021 - 01011 */
d->HuffQ7[1][24].Code = 16; d->HuffQ7[1][24].Length = 5; /* 0.031465 - 10000 */
d->HuffQ7[1][25].Code = 19; d->HuffQ7[1][25].Length = 5; /* 0.034244 - 10011 */
d->HuffQ7[1][26].Code = 21; d->HuffQ7[1][26].Length = 5; /* 0.035921 - 10101 */
d->HuffQ7[1][27].Code = 24; d->HuffQ7[1][27].Length = 5; /* 0.037938 - 11000 */
d->HuffQ7[1][28].Code = 26; d->HuffQ7[1][28].Length = 5; /* 0.039595 - 11010 */
d->HuffQ7[1][29].Code = 29; d->HuffQ7[1][29].Length = 5; /* 0.041546 - 11101 */
d->HuffQ7[1][30].Code = 31; d->HuffQ7[1][30].Length = 5; /* 0.042623 - 11111 */
d->HuffQ7[1][31].Code = 2; d->HuffQ7[1][31].Length = 4; /* 0.045180 - 0010 */
d->HuffQ7[1][32].Code = 0; d->HuffQ7[1][32].Length = 4; /* 0.043151 - 0000 */
d->HuffQ7[1][33].Code = 30; d->HuffQ7[1][33].Length = 5; /* 0.042538 - 11110 */
d->HuffQ7[1][34].Code = 28; d->HuffQ7[1][34].Length = 5; /* 0.041422 - 11100 */
d->HuffQ7[1][35].Code = 25; d->HuffQ7[1][35].Length = 5; /* 0.039145 - 11001 */
d->HuffQ7[1][36].Code = 22; d->HuffQ7[1][36].Length = 5; /* 0.036691 - 10110 */
d->HuffQ7[1][37].Code = 20; d->HuffQ7[1][37].Length = 5; /* 0.034955 - 10100 */
d->HuffQ7[1][38].Code = 14; d->HuffQ7[1][38].Length = 5; /* 0.029155 - 01110 */
d->HuffQ7[1][39].Code = 13; d->HuffQ7[1][39].Length = 5; /* 0.027921 - 01101 */
d->HuffQ7[1][40].Code = 8; d->HuffQ7[1][40].Length = 5; /* 0.025553 - 01000 */
d->HuffQ7[1][41].Code = 6; d->HuffQ7[1][41].Length = 5; /* 0.023093 - 00110 */
d->HuffQ7[1][42].Code = 2; d->HuffQ7[1][42].Length = 5; /* 0.021200 - 00010 */
d->HuffQ7[1][43].Code = 46; d->HuffQ7[1][43].Length = 6; /* 0.018134 - 101110 */
d->HuffQ7[1][44].Code = 35; d->HuffQ7[1][44].Length = 6; /* 0.015824 - 100011 */
d->HuffQ7[1][45].Code = 31; d->HuffQ7[1][45].Length = 6; /* 0.014701 - 011111 */
d->HuffQ7[1][46].Code = 21; d->HuffQ7[1][46].Length = 6; /* 0.013187 - 010101 */
d->HuffQ7[1][47].Code = 15; d->HuffQ7[1][47].Length = 6; /* 0.012776 - 001111 */
d->HuffQ7[1][48].Code = 95; d->HuffQ7[1][48].Length = 7; /* 0.009664 - 1011111 */
d->HuffQ7[1][49].Code = 72; d->HuffQ7[1][49].Length = 7; /* 0.007922 - 1001000 */
d->HuffQ7[1][50].Code = 41; d->HuffQ7[1][50].Length = 7; /* 0.006838 - 0101001 */
d->HuffQ7[1][51].Code = 189; d->HuffQ7[1][51].Length = 8; /* 0.005024 - 10111101 */
d->HuffQ7[1][52].Code = 123; d->HuffQ7[1][52].Length = 8; /* 0.003830 - 01111011 */
d->HuffQ7[1][53].Code = 377; d->HuffQ7[1][53].Length = 9; /* 0.002232 - 101111001 */
d->HuffQ7[1][54].Code = 161; d->HuffQ7[1][54].Length = 9; /* 0.001566 - 010100001 */
d->HuffQ7[1][55].Code = 891; d->HuffQ7[1][55].Length = 10; /* 0.001383 - 1101111011 */
d->HuffQ7[1][56].Code = 327; d->HuffQ7[1][56].Length = 10; /* 0.000900 - 0101000111 */
d->HuffQ7[1][57].Code = 326; d->HuffQ7[1][57].Length = 10; /* 0.000790 - 0101000110 */
d->HuffQ7[1][58].Code = 3560; d->HuffQ7[1][58].Length = 12; /* 0.000254 - 110111101000 */
d->HuffQ7[1][59].Code = 14255; d->HuffQ7[1][59].Length = 14; /* 0.000117 - 11011110101111 */
d->HuffQ7[1][60].Code = 14247; d->HuffQ7[1][60].Length = 14; /* 0.000085 - 11011110100111 */
d->HuffQ7[1][61].Code = 14252; d->HuffQ7[1][61].Length = 14; /* 0.000085 - 11011110101100 */
d->HuffQ7[1][62].Code = 14245; d->HuffQ7[1][62].Length = 14; /* 0.000065 - 11011110100101 */
}
const HuffmanTyp* mpc_table_HuffQ [2] [8] = {
{0,mpc_table_HuffQ1[0],mpc_table_HuffQ2[0],mpc_table_HuffQ3[0],mpc_table_HuffQ4[0],mpc_table_HuffQ5[0],mpc_table_HuffQ6[0],mpc_table_HuffQ7[0]},
{0,mpc_table_HuffQ1[1],mpc_table_HuffQ2[1],mpc_table_HuffQ3[1],mpc_table_HuffQ4[1],mpc_table_HuffQ5[1],mpc_table_HuffQ6[1],mpc_table_HuffQ7[1]},
};

File diff suppressed because it is too large Load Diff

View File

@ -43,7 +43,7 @@ read_impl(void *data, void *ptr, mpc_int32_t size)
{
mpc_reader_file *d = (mpc_reader_file *) data;
return fread(ptr, 1, size, d->file);
return (mpc_int32_t) fread(ptr, 1, size, d->file);
}
static mpc_bool_t
@ -51,7 +51,7 @@ seek_impl(void *data, mpc_int32_t offset)
{
mpc_reader_file *d = (mpc_reader_file *) data;
return d->is_seekable ? !fseek(d->file, offset, SEEK_SET) : FALSE;
return d->is_seekable ? fseek(d->file, offset, SEEK_SET) == 0 : FALSE;
}
static mpc_int32_t

View File

@ -72,9 +72,9 @@ const mpc_int32_t __Dc [1 + 18] = {
#ifdef MPC_FIXED_POINT
static mpc_uint32_t find_shift(double fval)
{
mpc_int64_t val = (mpc_int64_t)fval;
if (val<0) val = -val;
mpc_int64_t val = (mpc_int64_t)fval;
mpc_uint32_t ptr = 0;
if (val<0) val = -val;
while(val) {val>>=1;ptr++;}
return ptr > 31 ? 0 : 31 - ptr;
@ -113,40 +113,8 @@ mpc_decoder_scale_output(mpc_decoder *d, double factor)
}
}
static void
mpc_decoder_quantisierungsmodes(mpc_decoder *d) // conversion: index -> quantizer (bitstream reading)
{ // conversion: quantizer -> index (bitstream writing)
mpc_int32_t Band = 0;
mpc_int32_t i;
do {
d->Q_bit [Band] = 4;
for ( i = 0; i < 16-1; i++ )
d->Q_res [Band] [i] = i;
d->Q_res [Band][i] = 17;
Band++;
} while ( Band < 11 );
do {
d->Q_bit [Band] = 3;
for ( i = 0; i < 8-1; i++ )
d->Q_res [Band] [i] = i;
d->Q_res [Band] [i] = 17;
Band++;
} while ( Band < 23 );
do {
d->Q_bit [Band] = 2;
for ( i = 0; i < 4-1; i++ )
d->Q_res [Band] [i] = i;
d->Q_res [Band] [i] = 17;
Band++;
} while ( Band < 32 );
}
void
mpc_decoder_initialisiere_quantisierungstabellen(mpc_decoder *d, double scale_factor)
{
mpc_decoder_quantisierungsmodes(d);
mpc_decoder_scale_output(d, scale_factor);
}

View File

@ -315,8 +315,8 @@ main(int argc, char **argv)
delete wavwriter;
}
printf("Total samples decoded: %u.\n", total_samples);
if (successful) {
printf("\nFinished.\nTotal samples decoded: %u.\n", total_samples);
unsigned ms = (end - begin) * 1000 / CLOCKS_PER_SEC;
unsigned ratio =
(unsigned)((double)total_samples / (double)info.sample_freq /

View File

@ -58,14 +58,6 @@ mpc_streaminfo_init(mpc_streaminfo * si)
memset(si, 0, sizeof(mpc_streaminfo));
}
// read information from SV8 header
// not yet implemented
static mpc_int32_t
streaminfo_read_header_sv8(mpc_streaminfo * si, mpc_reader * fp)
{
return 0;
}
/// Reads streaminfo from SV7 header.
static mpc_int32_t
streaminfo_read_header_sv7(mpc_streaminfo * si, mpc_uint32_t HeaderData[8])
@ -103,6 +95,7 @@ streaminfo_read_header_sv7(mpc_streaminfo * si, mpc_uint32_t HeaderData[8])
si->peak_album = (mpc_uint16_t) (HeaderData[4] & 0xFFFF);
si->is_true_gapless = (HeaderData[5] >> 31) & 0x0001; // true gapless: used?
si->last_frame_samples = (HeaderData[5] >> 20) & 0x07FF; // true gapless: valid samples for last frame
si->fast_seek = (HeaderData[5] >> 19) & 0x0001; // fast seeking
si->encoder_version = (HeaderData[6] >> 24) & 0x00FF;
if (si->encoder_version == 0) {
@ -140,6 +133,7 @@ streaminfo_read_header_sv7(mpc_streaminfo * si, mpc_uint32_t HeaderData[8])
}
// read information from SV4-SV6 header
#ifdef MPC_SUPPORT_SV456
static mpc_int32_t
streaminfo_read_header_sv6(mpc_streaminfo * si, mpc_uint32_t HeaderData[8])
{
@ -196,7 +190,7 @@ streaminfo_read_header_sv6(mpc_streaminfo * si, mpc_uint32_t HeaderData[8])
return ERROR_CODE_OK;
}
#endif
// reads file header and tags
mpc_int32_t
mpc_streaminfo_read(mpc_streaminfo * si, mpc_reader * r)
@ -221,28 +215,35 @@ mpc_streaminfo_read(mpc_streaminfo * si, mpc_reader * r)
si->total_file_length = r->get_size(r->data);
si->tag_offset = si->total_file_length;
if (memcmp(HeaderData, "MP+", 3) == 0) {
if (memcmp(HeaderData, "MP+", 3)) return ERROR_CODE_INVALIDSV;
#ifndef MPC_LITTLE_ENDIAN
{
mpc_uint32_t ptr;
for (ptr = 0; ptr < 8; ptr++) {
HeaderData[ptr] = swap32(HeaderData[ptr]);
}
#endif
si->stream_version = HeaderData[0] >> 24;
// stream version 8
if ((si->stream_version & 15) >= 8) {
Error = streaminfo_read_header_sv8(si, r);
}
// stream version 7
else if ((si->stream_version & 15) == 7) {
Error = streaminfo_read_header_sv7(si, HeaderData);
HeaderData[ptr] = mpc_swap32(HeaderData[ptr]);
}
}
#endif
si->stream_version = HeaderData[0] >> 24;
// stream version 8
if ((si->stream_version & 15) >= 8) {
return ERROR_CODE_INVALIDSV;
}
// stream version 7
else if ((si->stream_version & 15) == 7) {
Error = streaminfo_read_header_sv7(si, HeaderData);
if (Error != ERROR_CODE_OK) return Error;
}
#ifdef MPC_SUPPORT_SV456
else {
// stream version 4-6
Error = streaminfo_read_header_sv6(si, HeaderData);
if (Error != ERROR_CODE_OK) return Error;
}
#endif
// estimation, exact value needs too much time
si->pcm_samples = 1152 * si->frames - 576;
@ -256,7 +257,7 @@ mpc_streaminfo_read(mpc_streaminfo * si, mpc_reader * r)
si->average_bitrate = 0;
}
return Error;
return ERROR_CODE_OK;
}
double

View File

@ -39,8 +39,6 @@
#include <mpcdec/mpcdec.h>
#include <mpcdec/internal.h>
typedef mpc_int32_t ptrdiff_t;
/* C O N S T A N T S */
#undef _

View File

@ -84,6 +84,9 @@ mpc_bool_t CanSeekProc(void *data)
DLog(@"Error initializing decoder.");
return NO;
}
/* Only use fast seeking if format supports it */
mpc_decoder_set_seeking(&decoder, &info, FALSE);
bitrate = (int)(info.average_bitrate/1000.0);