diff options
Diffstat (limited to 'apps/codecs/libmusepack/mpc_decoder.c')
-rw-r--r-- | apps/codecs/libmusepack/mpc_decoder.c | 359 |
1 files changed, 185 insertions, 174 deletions
diff --git a/apps/codecs/libmusepack/mpc_decoder.c b/apps/codecs/libmusepack/mpc_decoder.c index 024e7ab2c2..b608ae81e1 100644 --- a/apps/codecs/libmusepack/mpc_decoder.c +++ b/apps/codecs/libmusepack/mpc_decoder.c | |||
@@ -35,12 +35,29 @@ | |||
35 | /// \file mpc_decoder.c | 35 | /// \file mpc_decoder.c |
36 | /// Core decoding routines and logic. | 36 | /// Core decoding routines and logic. |
37 | 37 | ||
38 | #include <string.h> | ||
39 | #include "musepack.h" | 38 | #include "musepack.h" |
40 | #include "internal.h" | 39 | #include "internal.h" |
41 | #include "requant.h" | 40 | #include "requant.h" |
42 | #include "huffman.h" | 41 | #include "huffman.h" |
43 | 42 | ||
43 | //SV7 tables | ||
44 | extern const HuffmanTyp* mpc_table_HuffQ [2] [8]; | ||
45 | extern const HuffmanTyp mpc_table_HuffHdr [10]; | ||
46 | extern const HuffmanTyp mpc_table_HuffSCFI [ 4]; | ||
47 | extern const HuffmanTyp mpc_table_HuffDSCF [16]; | ||
48 | |||
49 | |||
50 | #ifdef MPC_SUPPORT_SV456 | ||
51 | //SV4/5/6 tables | ||
52 | extern const HuffmanTyp* mpc_table_SampleHuff [18]; | ||
53 | extern const HuffmanTyp mpc_table_SCFI_Bundle [ 8]; | ||
54 | extern const HuffmanTyp mpc_table_DSCF_Entropie [13]; | ||
55 | extern const HuffmanTyp mpc_table_Region_A [16]; | ||
56 | extern const HuffmanTyp mpc_table_Region_B [ 8]; | ||
57 | extern const HuffmanTyp mpc_table_Region_C [ 4]; | ||
58 | |||
59 | #endif | ||
60 | |||
44 | //------------------------------------------------------------------------------ | 61 | //------------------------------------------------------------------------------ |
45 | // types | 62 | // types |
46 | //------------------------------------------------------------------------------ | 63 | //------------------------------------------------------------------------------ |
@@ -57,12 +74,10 @@ enum | |||
57 | //------------------------------------------------------------------------------ | 74 | //------------------------------------------------------------------------------ |
58 | // forward declarations | 75 | // forward declarations |
59 | //------------------------------------------------------------------------------ | 76 | //------------------------------------------------------------------------------ |
60 | void mpc_decoder_init_huffman_sv6(mpc_decoder *d); | ||
61 | void mpc_decoder_init_huffman_sv7(mpc_decoder *d); | ||
62 | void mpc_decoder_read_bitstream_sv6(mpc_decoder *d); | 77 | void mpc_decoder_read_bitstream_sv6(mpc_decoder *d); |
63 | void mpc_decoder_read_bitstream_sv7(mpc_decoder *d); | 78 | void mpc_decoder_read_bitstream_sv7(mpc_decoder *d); |
64 | void mpc_decoder_update_buffer(mpc_decoder *d, mpc_uint32_t RING); | 79 | void mpc_decoder_update_buffer(mpc_decoder *d, mpc_uint32_t RING); |
65 | bool mpc_decoder_seek_sample(mpc_decoder *d, mpc_int64_t destsample); | 80 | mpc_bool_t mpc_decoder_seek_sample(mpc_decoder *d, mpc_int64_t destsample); |
66 | void mpc_decoder_requantisierung(mpc_decoder *d, const mpc_int32_t Last_Band); | 81 | void mpc_decoder_requantisierung(mpc_decoder *d, const mpc_int32_t Last_Band); |
67 | 82 | ||
68 | //------------------------------------------------------------------------------ | 83 | //------------------------------------------------------------------------------ |
@@ -73,7 +88,7 @@ static mpc_int32_t f_read(mpc_decoder *d, void *ptr, size_t size) | |||
73 | return d->r->read(d->r->data, ptr, size); | 88 | return d->r->read(d->r->data, ptr, size); |
74 | }; | 89 | }; |
75 | 90 | ||
76 | static bool f_seek(mpc_decoder *d, mpc_int32_t offset) | 91 | static mpc_bool_t f_seek(mpc_decoder *d, mpc_int32_t offset) |
77 | { | 92 | { |
78 | return d->r->seek(d->r->data, offset); | 93 | return d->r->seek(d->r->data, offset); |
79 | }; | 94 | }; |
@@ -84,7 +99,7 @@ static mpc_int32_t f_read_dword(mpc_decoder *d, mpc_uint32_t * ptr, mpc_uint32_t | |||
84 | #ifndef MPC_LITTLE_ENDIAN | 99 | #ifndef MPC_LITTLE_ENDIAN |
85 | mpc_uint32_t n; | 100 | mpc_uint32_t n; |
86 | for(n = 0; n< count; n++) { | 101 | for(n = 0; n< count; n++) { |
87 | ptr[n] = swap32(ptr[n]); | 102 | ptr[n] = mpc_swap32(ptr[n]); |
88 | } | 103 | } |
89 | #endif | 104 | #endif |
90 | return count; | 105 | return count; |
@@ -152,7 +167,7 @@ mpc_decoder_bitstream_read(mpc_decoder *d, const mpc_uint32_t bits) | |||
152 | static void | 167 | static void |
153 | mpc_decoder_scfi_bundle_read( | 168 | mpc_decoder_scfi_bundle_read( |
154 | mpc_decoder *d, | 169 | mpc_decoder *d, |
155 | HuffmanTyp* Table, mpc_int32_t* SCFI, mpc_int32_t* DSCF) | 170 | const HuffmanTyp* Table, mpc_int32_t* SCFI, mpc_bool_t* DSCF) |
156 | { | 171 | { |
157 | // load preview and decode | 172 | // load preview and decode |
158 | mpc_uint32_t code = d->dword << d->pos; | 173 | mpc_uint32_t code = d->dword << d->pos; |
@@ -174,29 +189,6 @@ mpc_decoder_scfi_bundle_read( | |||
174 | *DSCF = Table->Value & 1; | 189 | *DSCF = Table->Value & 1; |
175 | } | 190 | } |
176 | 191 | ||
177 | static int | ||
178 | mpc_decoder_huffman_typ_cmpfn(const void* p1, const void* p2) | ||
179 | { | ||
180 | if (((HuffmanTyp*) p1)->Code < ((HuffmanTyp*) p2)->Code ) return +1; | ||
181 | if (((HuffmanTyp*) p1)->Code > ((HuffmanTyp*) p2)->Code ) return -1; | ||
182 | return 0; | ||
183 | } | ||
184 | |||
185 | // sort huffman-tables by codeword | ||
186 | // offset resulting value | ||
187 | void | ||
188 | mpc_decoder_resort_huff_tables( | ||
189 | const mpc_uint32_t elements, HuffmanTyp* Table, const mpc_int32_t offset ) | ||
190 | { | ||
191 | mpc_uint32_t i; | ||
192 | |||
193 | for ( i = 0; i < elements; i++ ) { | ||
194 | Table[i].Code <<= 32 - Table[i].Length; | ||
195 | Table[i].Value = i - offset; | ||
196 | } | ||
197 | qsort(Table, elements, sizeof(*Table), mpc_decoder_huffman_typ_cmpfn); | ||
198 | } | ||
199 | |||
200 | // basic huffman decoding routine | 192 | // basic huffman decoding routine |
201 | // works with maximum lengths up to 14 | 193 | // works with maximum lengths up to 14 |
202 | static mpc_int32_t | 194 | static mpc_int32_t |
@@ -318,6 +310,39 @@ mpc_decoder_reset_globals(mpc_decoder *d) | |||
318 | memset(d->MS_Flag , 0, sizeof d->MS_Flag ); | 310 | memset(d->MS_Flag , 0, sizeof d->MS_Flag ); |
319 | } | 311 | } |
320 | 312 | ||
313 | mpc_uint32_t | ||
314 | mpc_decoder_decode_frame(mpc_decoder *d, mpc_uint32_t *in_buffer, | ||
315 | mpc_uint32_t in_len, MPC_SAMPLE_FORMAT *out_buffer) | ||
316 | { | ||
317 | unsigned int i; | ||
318 | mpc_decoder_reset_bitstream_decode(d); | ||
319 | if (in_len > sizeof(d->Speicher)) in_len = sizeof(d->Speicher); | ||
320 | memcpy(d->Speicher, in_buffer, in_len); | ||
321 | #ifdef MPC_LITTLE_ENDIAN | ||
322 | for (i = 0; i < (in_len + 3) / 4; i++) | ||
323 | d->Speicher[i] = mpc_swap32(d->Speicher[i]); | ||
324 | #endif | ||
325 | d->dword = d->Speicher[0]; | ||
326 | switch (d->StreamVersion) { | ||
327 | #ifdef MPC_SUPPORT_SV456 | ||
328 | case 0x04: | ||
329 | case 0x05: | ||
330 | case 0x06: | ||
331 | mpc_decoder_read_bitstream_sv6(d); | ||
332 | break; | ||
333 | #endif | ||
334 | case 0x07: | ||
335 | case 0x17: | ||
336 | mpc_decoder_read_bitstream_sv7(d); | ||
337 | break; | ||
338 | default: | ||
339 | return (mpc_uint32_t)(-1); | ||
340 | } | ||
341 | mpc_decoder_requantisierung(d, d->Max_Band); | ||
342 | mpc_decoder_synthese_filter_float(d, out_buffer); | ||
343 | return mpc_decoder_bits_read(d); | ||
344 | } | ||
345 | |||
321 | static mpc_uint32_t | 346 | static mpc_uint32_t |
322 | mpc_decoder_decode_internal(mpc_decoder *d, MPC_SAMPLE_FORMAT *buffer) | 347 | mpc_decoder_decode_internal(mpc_decoder *d, MPC_SAMPLE_FORMAT *buffer) |
323 | { | 348 | { |
@@ -337,11 +362,13 @@ mpc_decoder_decode_internal(mpc_decoder *d, MPC_SAMPLE_FORMAT *buffer) | |||
337 | // decode data and check for validity of frame | 362 | // decode data and check for validity of frame |
338 | FrameBitCnt = mpc_decoder_bits_read(d); | 363 | FrameBitCnt = mpc_decoder_bits_read(d); |
339 | switch (d->StreamVersion) { | 364 | switch (d->StreamVersion) { |
365 | #ifdef MPC_SUPPORT_SV456 | ||
340 | case 0x04: | 366 | case 0x04: |
341 | case 0x05: | 367 | case 0x05: |
342 | case 0x06: | 368 | case 0x06: |
343 | mpc_decoder_read_bitstream_sv6(d); | 369 | mpc_decoder_read_bitstream_sv6(d); |
344 | break; | 370 | break; |
371 | #endif | ||
345 | case 0x07: | 372 | case 0x07: |
346 | case 0x17: | 373 | case 0x17: |
347 | mpc_decoder_read_bitstream_sv7(d); | 374 | mpc_decoder_read_bitstream_sv7(d); |
@@ -375,26 +402,12 @@ mpc_decoder_decode_internal(mpc_decoder *d, MPC_SAMPLE_FORMAT *buffer) | |||
375 | 402 | ||
376 | // additional FilterDecay samples are needed for decay of synthesis filter | 403 | // additional FilterDecay samples are needed for decay of synthesis filter |
377 | if (MPC_DECODER_SYNTH_DELAY + mod_block >= MPC_FRAME_LENGTH) { | 404 | if (MPC_DECODER_SYNTH_DELAY + mod_block >= MPC_FRAME_LENGTH) { |
378 | |||
379 | // ********************************************************************** | ||
380 | // Rhoades 4/16/2002 | ||
381 | // Commented out are blocks of code which cause gapless playback to fail. | ||
382 | // Temporary fix... | ||
383 | // ********************************************************************** | ||
384 | |||
385 | if (!d->TrueGaplessPresent) { | 405 | if (!d->TrueGaplessPresent) { |
386 | mpc_decoder_reset_y(d); | 406 | mpc_decoder_reset_y(d); |
387 | } | 407 | } else { |
388 | else { | ||
389 | //if ( MPC_FRAME_LENGTH != d->LastValidSamples ) { | ||
390 | mpc_decoder_bitstream_read(d, 20); | 408 | mpc_decoder_bitstream_read(d, 20); |
391 | mpc_decoder_read_bitstream_sv7(d); | 409 | mpc_decoder_read_bitstream_sv7(d); |
392 | mpc_decoder_requantisierung(d, d->Max_Band); | 410 | mpc_decoder_requantisierung(d, d->Max_Band); |
393 | //FilterDecay = d->LastValidSamples; | ||
394 | //} | ||
395 | //else { | ||
396 | //FilterDecay = 0; | ||
397 | //} | ||
398 | } | 411 | } |
399 | 412 | ||
400 | mpc_decoder_synthese_filter_float(d, buffer + 2304); | 413 | mpc_decoder_synthese_filter_float(d, buffer + 2304); |
@@ -625,13 +638,49 @@ mpc_decoder_requantisierung(mpc_decoder *d, const mpc_int32_t Last_Band) | |||
625 | } | 638 | } |
626 | } | 639 | } |
627 | 640 | ||
641 | #ifdef MPC_SUPPORT_SV456 | ||
642 | static const unsigned char Q_res[32][16] = { | ||
643 | {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17}, | ||
644 | {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17}, | ||
645 | {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17}, | ||
646 | {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17}, | ||
647 | {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17}, | ||
648 | {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17}, | ||
649 | {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17}, | ||
650 | {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17}, | ||
651 | {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17}, | ||
652 | {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17}, | ||
653 | {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17}, | ||
654 | {0,1,2,3,4,5,6,17,0,0,0,0,0,0,0,0}, | ||
655 | {0,1,2,3,4,5,6,17,0,0,0,0,0,0,0,0}, | ||
656 | {0,1,2,3,4,5,6,17,0,0,0,0,0,0,0,0}, | ||
657 | {0,1,2,3,4,5,6,17,0,0,0,0,0,0,0,0}, | ||
658 | {0,1,2,3,4,5,6,17,0,0,0,0,0,0,0,0}, | ||
659 | {0,1,2,3,4,5,6,17,0,0,0,0,0,0,0,0}, | ||
660 | {0,1,2,3,4,5,6,17,0,0,0,0,0,0,0,0}, | ||
661 | {0,1,2,3,4,5,6,17,0,0,0,0,0,0,0,0}, | ||
662 | {0,1,2,3,4,5,6,17,0,0,0,0,0,0,0,0}, | ||
663 | {0,1,2,3,4,5,6,17,0,0,0,0,0,0,0,0}, | ||
664 | {0,1,2,3,4,5,6,17,0,0,0,0,0,0,0,0}, | ||
665 | {0,1,2,3,4,5,6,17,0,0,0,0,0,0,0,0}, | ||
666 | {0,1,2,17,0,0,0,0,0,0,0,0,0,0,0,0}, | ||
667 | {0,1,2,17,0,0,0,0,0,0,0,0,0,0,0,0}, | ||
668 | {0,1,2,17,0,0,0,0,0,0,0,0,0,0,0,0}, | ||
669 | {0,1,2,17,0,0,0,0,0,0,0,0,0,0,0,0}, | ||
670 | {0,1,2,17,0,0,0,0,0,0,0,0,0,0,0,0}, | ||
671 | {0,1,2,17,0,0,0,0,0,0,0,0,0,0,0,0}, | ||
672 | {0,1,2,17,0,0,0,0,0,0,0,0,0,0,0,0}, | ||
673 | {0,1,2,17,0,0,0,0,0,0,0,0,0,0,0,0}, | ||
674 | {0,1,2,17,0,0,0,0,0,0,0,0,0,0,0,0}, | ||
675 | }; | ||
676 | |||
628 | /****************************************** SV 6 ******************************************/ | 677 | /****************************************** SV 6 ******************************************/ |
629 | void | 678 | void |
630 | mpc_decoder_read_bitstream_sv6(mpc_decoder *d) | 679 | mpc_decoder_read_bitstream_sv6(mpc_decoder *d) |
631 | { | 680 | { |
632 | mpc_int32_t n,k; | 681 | mpc_int32_t n,k; |
633 | mpc_int32_t Max_used_Band=0; | 682 | mpc_int32_t Max_used_Band=0; |
634 | HuffmanTyp *Table; | 683 | const HuffmanTyp *Table; |
635 | const HuffmanTyp *x1; | 684 | const HuffmanTyp *x1; |
636 | const HuffmanTyp *x2; | 685 | const HuffmanTyp *x2; |
637 | mpc_int32_t *L; | 686 | mpc_int32_t *L; |
@@ -644,15 +693,15 @@ mpc_decoder_read_bitstream_sv6(mpc_decoder *d) | |||
644 | ResR = d->Res_R; | 693 | ResR = d->Res_R; |
645 | for (n=0; n <= d->Max_Band; ++n, ++ResL, ++ResR) | 694 | for (n=0; n <= d->Max_Band; ++n, ++ResL, ++ResR) |
646 | { | 695 | { |
647 | if (n<11) Table = d->Region_A; | 696 | if (n<11) Table = mpc_table_Region_A; |
648 | else if (n>=11 && n<=22) Table = d->Region_B; | 697 | else if (n>=11 && n<=22) Table = mpc_table_Region_B; |
649 | else /*if (n>=23)*/ Table = d->Region_C; | 698 | else /*if (n>=23)*/ Table = mpc_table_Region_C; |
650 | 699 | ||
651 | *ResL = d->Q_res[n][mpc_decoder_huffman_decode(d, Table)]; | 700 | *ResL = Q_res[n][mpc_decoder_huffman_decode(d, Table)]; |
652 | if (d->MS_used) { | 701 | if (d->MS_used) { |
653 | d->MS_Flag[n] = mpc_decoder_bitstream_read(d, 1); | 702 | d->MS_Flag[n] = mpc_decoder_bitstream_read(d, 1); |
654 | } | 703 | } |
655 | *ResR = d->Q_res[n][mpc_decoder_huffman_decode(d, Table)]; | 704 | *ResR = Q_res[n][mpc_decoder_huffman_decode(d, Table)]; |
656 | 705 | ||
657 | // only perform the following procedure up to the maximum non-zero subband | 706 | // only perform the following procedure up to the maximum non-zero subband |
658 | if (*ResL || *ResR) Max_used_Band = n; | 707 | if (*ResL || *ResR) Max_used_Band = n; |
@@ -662,8 +711,8 @@ mpc_decoder_read_bitstream_sv6(mpc_decoder *d) | |||
662 | ResL = d->Res_L; | 711 | ResL = d->Res_L; |
663 | ResR = d->Res_R; | 712 | ResR = d->Res_R; |
664 | for (n=0; n<=Max_used_Band; ++n, ++ResL, ++ResR) { | 713 | for (n=0; n<=Max_used_Band; ++n, ++ResL, ++ResR) { |
665 | if (*ResL) mpc_decoder_scfi_bundle_read(d, d->SCFI_Bundle, &(d->SCFI_L[n]), &(d->DSCF_Flag_L[n])); | 714 | if (*ResL) mpc_decoder_scfi_bundle_read(d, mpc_table_SCFI_Bundle, &(d->SCFI_L[n]), &(d->DSCF_Flag_L[n])); |
666 | if (*ResR) mpc_decoder_scfi_bundle_read(d, d->SCFI_Bundle, &(d->SCFI_R[n]), &(d->DSCF_Flag_R[n])); | 715 | if (*ResR) mpc_decoder_scfi_bundle_read(d, mpc_table_SCFI_Bundle, &(d->SCFI_R[n]), &(d->DSCF_Flag_R[n])); |
667 | } | 716 | } |
668 | 717 | ||
669 | /***************************** SCFI ********************************/ | 718 | /***************************** SCFI ********************************/ |
@@ -682,24 +731,24 @@ mpc_decoder_read_bitstream_sv6(mpc_decoder *d) | |||
682 | switch (d->SCFI_L[n]) | 731 | switch (d->SCFI_L[n]) |
683 | { | 732 | { |
684 | case 3: | 733 | case 3: |
685 | L[0] = L[2] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie); | 734 | L[0] = L[2] + mpc_decoder_huffman_decode_fast(d, mpc_table_DSCF_Entropie); |
686 | L[1] = L[0]; | 735 | L[1] = L[0]; |
687 | L[2] = L[1]; | 736 | L[2] = L[1]; |
688 | break; | 737 | break; |
689 | case 1: | 738 | case 1: |
690 | L[0] = L[2] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie); | 739 | L[0] = L[2] + mpc_decoder_huffman_decode_fast(d, mpc_table_DSCF_Entropie); |
691 | L[1] = L[0] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie); | 740 | L[1] = L[0] + mpc_decoder_huffman_decode_fast(d, mpc_table_DSCF_Entropie); |
692 | L[2] = L[1]; | 741 | L[2] = L[1]; |
693 | break; | 742 | break; |
694 | case 2: | 743 | case 2: |
695 | L[0] = L[2] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie); | 744 | L[0] = L[2] + mpc_decoder_huffman_decode_fast(d, mpc_table_DSCF_Entropie); |
696 | L[1] = L[0]; | 745 | L[1] = L[0]; |
697 | L[2] = L[1] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie); | 746 | L[2] = L[1] + mpc_decoder_huffman_decode_fast(d, mpc_table_DSCF_Entropie); |
698 | break; | 747 | break; |
699 | case 0: | 748 | case 0: |
700 | L[0] = L[2] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie); | 749 | L[0] = L[2] + mpc_decoder_huffman_decode_fast(d, mpc_table_DSCF_Entropie); |
701 | L[1] = L[0] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie); | 750 | L[1] = L[0] + mpc_decoder_huffman_decode_fast(d, mpc_table_DSCF_Entropie); |
702 | L[2] = L[1] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie); | 751 | L[2] = L[1] + mpc_decoder_huffman_decode_fast(d, mpc_table_DSCF_Entropie); |
703 | break; | 752 | break; |
704 | default: | 753 | default: |
705 | return; | 754 | return; |
@@ -748,24 +797,24 @@ mpc_decoder_read_bitstream_sv6(mpc_decoder *d) | |||
748 | switch (d->SCFI_R[n]) | 797 | switch (d->SCFI_R[n]) |
749 | { | 798 | { |
750 | case 3: | 799 | case 3: |
751 | R[0] = R[2] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie); | 800 | R[0] = R[2] + mpc_decoder_huffman_decode_fast(d, mpc_table_DSCF_Entropie); |
752 | R[1] = R[0]; | 801 | R[1] = R[0]; |
753 | R[2] = R[1]; | 802 | R[2] = R[1]; |
754 | break; | 803 | break; |
755 | case 1: | 804 | case 1: |
756 | R[0] = R[2] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie); | 805 | R[0] = R[2] + mpc_decoder_huffman_decode_fast(d, mpc_table_DSCF_Entropie); |
757 | R[1] = R[0] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie); | 806 | R[1] = R[0] + mpc_decoder_huffman_decode_fast(d, mpc_table_DSCF_Entropie); |
758 | R[2] = R[1]; | 807 | R[2] = R[1]; |
759 | break; | 808 | break; |
760 | case 2: | 809 | case 2: |
761 | R[0] = R[2] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie); | 810 | R[0] = R[2] + mpc_decoder_huffman_decode_fast(d, mpc_table_DSCF_Entropie); |
762 | R[1] = R[0]; | 811 | R[1] = R[0]; |
763 | R[2] = R[1] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie); | 812 | R[2] = R[1] + mpc_decoder_huffman_decode_fast(d, mpc_table_DSCF_Entropie); |
764 | break; | 813 | break; |
765 | case 0: | 814 | case 0: |
766 | R[0] = R[2] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie); | 815 | R[0] = R[2] + mpc_decoder_huffman_decode_fast(d, mpc_table_DSCF_Entropie); |
767 | R[1] = R[0] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie); | 816 | R[1] = R[0] + mpc_decoder_huffman_decode_fast(d, mpc_table_DSCF_Entropie); |
768 | R[2] = R[1] + mpc_decoder_huffman_decode_fast(d, d->DSCF_Entropie); | 817 | R[2] = R[1] + mpc_decoder_huffman_decode_fast(d, mpc_table_DSCF_Entropie); |
769 | break; | 818 | break; |
770 | default: | 819 | default: |
771 | return; | 820 | return; |
@@ -813,8 +862,8 @@ mpc_decoder_read_bitstream_sv6(mpc_decoder *d) | |||
813 | for (n=0; n <= Max_used_Band; ++n, ++ResL, ++ResR) | 862 | for (n=0; n <= Max_used_Band; ++n, ++ResL, ++ResR) |
814 | { | 863 | { |
815 | // setting pointers | 864 | // setting pointers |
816 | x1 = d->SampleHuff[*ResL]; | 865 | x1 = mpc_table_SampleHuff[*ResL]; |
817 | x2 = d->SampleHuff[*ResR]; | 866 | x2 = mpc_table_SampleHuff[*ResR]; |
818 | L = d->Q[n].L; | 867 | L = d->Q[n].L; |
819 | R = d->Q[n].R; | 868 | R = d->Q[n].R; |
820 | 869 | ||
@@ -833,7 +882,7 @@ mpc_decoder_read_bitstream_sv6(mpc_decoder *d) | |||
833 | } | 882 | } |
834 | } | 883 | } |
835 | } | 884 | } |
836 | 885 | #endif //MPC_SUPPORT_SV456 | |
837 | /****************************************** SV 7 ******************************************/ | 886 | /****************************************** SV 7 ******************************************/ |
838 | void | 887 | void |
839 | mpc_decoder_read_bitstream_sv7(mpc_decoder *d) | 888 | mpc_decoder_read_bitstream_sv7(mpc_decoder *d) |
@@ -868,11 +917,11 @@ mpc_decoder_read_bitstream_sv7(mpc_decoder *d) | |||
868 | ++ResL; ++ResR; // increase pointers | 917 | ++ResL; ++ResR; // increase pointers |
869 | for (n=1; n <= d->Max_Band; ++n, ++ResL, ++ResR) | 918 | for (n=1; n <= d->Max_Band; ++n, ++ResL, ++ResR) |
870 | { | 919 | { |
871 | idx = mpc_decoder_huffman_decode_fast(d, d->HuffHdr); | 920 | idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffHdr); |
872 | *ResL = (idx!=4) ? *(ResL-1) + idx : (int)mpc_decoder_bitstream_read(d, 4); | 921 | *ResL = (idx!=4) ? *(ResL-1) + idx : (int) mpc_decoder_bitstream_read(d, 4); |
873 | 922 | ||
874 | idx = mpc_decoder_huffman_decode_fast(d, d->HuffHdr); | 923 | idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffHdr); |
875 | *ResR = (idx!=4) ? *(ResR-1) + idx : (int)mpc_decoder_bitstream_read(d, 4); | 924 | *ResR = (idx!=4) ? *(ResR-1) + idx : (int) mpc_decoder_bitstream_read(d, 4); |
876 | 925 | ||
877 | if (d->MS_used && !(*ResL==0 && *ResR==0)) { | 926 | if (d->MS_used && !(*ResL==0 && *ResR==0)) { |
878 | d->MS_Flag[n] = mpc_decoder_bitstream_read(d, 1); | 927 | d->MS_Flag[n] = mpc_decoder_bitstream_read(d, 1); |
@@ -889,8 +938,8 @@ mpc_decoder_read_bitstream_sv7(mpc_decoder *d) | |||
889 | ResL = d->Res_L; | 938 | ResL = d->Res_L; |
890 | ResR = d->Res_R; | 939 | ResR = d->Res_R; |
891 | for (n=0; n <= Max_used_Band; ++n, ++L, ++R, ++ResL, ++ResR) { | 940 | for (n=0; n <= Max_used_Band; ++n, ++L, ++R, ++ResL, ++ResR) { |
892 | if (*ResL) *L = mpc_decoder_huffman_decode_faster(d, d->HuffSCFI); | 941 | if (*ResL) *L = mpc_decoder_huffman_decode_faster(d, mpc_table_HuffSCFI); |
893 | if (*ResR) *R = mpc_decoder_huffman_decode_faster(d, d->HuffSCFI); | 942 | if (*ResR) *R = mpc_decoder_huffman_decode_faster(d, mpc_table_HuffSCFI); |
894 | } | 943 | } |
895 | 944 | ||
896 | /**************************** SCF/DSCF ****************************/ | 945 | /**************************** SCF/DSCF ****************************/ |
@@ -905,32 +954,32 @@ mpc_decoder_read_bitstream_sv7(mpc_decoder *d) | |||
905 | switch (d->SCFI_L[n]) | 954 | switch (d->SCFI_L[n]) |
906 | { | 955 | { |
907 | case 1: | 956 | case 1: |
908 | idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF); | 957 | idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF); |
909 | L[0] = (idx!=8) ? L[2] + idx : (int)mpc_decoder_bitstream_read(d, 6); | 958 | L[0] = (idx!=8) ? L[2] + idx : (int) mpc_decoder_bitstream_read(d, 6); |
910 | idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF); | 959 | idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF); |
911 | L[1] = (idx!=8) ? L[0] + idx : (int)mpc_decoder_bitstream_read(d, 6); | 960 | L[1] = (idx!=8) ? L[0] + idx : (int) mpc_decoder_bitstream_read(d, 6); |
912 | L[2] = L[1]; | 961 | L[2] = L[1]; |
913 | break; | 962 | break; |
914 | case 3: | 963 | case 3: |
915 | idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF); | 964 | idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF); |
916 | L[0] = (idx!=8) ? L[2] + idx : (int)mpc_decoder_bitstream_read(d, 6); | 965 | L[0] = (idx!=8) ? L[2] + idx : (int) mpc_decoder_bitstream_read(d, 6); |
917 | L[1] = L[0]; | 966 | L[1] = L[0]; |
918 | L[2] = L[1]; | 967 | L[2] = L[1]; |
919 | break; | 968 | break; |
920 | case 2: | 969 | case 2: |
921 | idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF); | 970 | idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF); |
922 | L[0] = (idx!=8) ? L[2] + idx : (int)mpc_decoder_bitstream_read(d, 6); | 971 | L[0] = (idx!=8) ? L[2] + idx : (int) mpc_decoder_bitstream_read(d, 6); |
923 | L[1] = L[0]; | 972 | L[1] = L[0]; |
924 | idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF); | 973 | idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF); |
925 | L[2] = (idx!=8) ? L[1] + idx : (int)mpc_decoder_bitstream_read(d, 6); | 974 | L[2] = (idx!=8) ? L[1] + idx : (int) mpc_decoder_bitstream_read(d, 6); |
926 | break; | 975 | break; |
927 | case 0: | 976 | case 0: |
928 | idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF); | 977 | idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF); |
929 | L[0] = (idx!=8) ? L[2] + idx : (int)mpc_decoder_bitstream_read(d, 6); | 978 | L[0] = (idx!=8) ? L[2] + idx : (int) mpc_decoder_bitstream_read(d, 6); |
930 | idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF); | 979 | idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF); |
931 | L[1] = (idx!=8) ? L[0] + idx : (int)mpc_decoder_bitstream_read(d, 6); | 980 | L[1] = (idx!=8) ? L[0] + idx : (int) mpc_decoder_bitstream_read(d, 6); |
932 | idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF); | 981 | idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF); |
933 | L[2] = (idx!=8) ? L[1] + idx : (int)mpc_decoder_bitstream_read(d, 6); | 982 | L[2] = (idx!=8) ? L[1] + idx : (int) mpc_decoder_bitstream_read(d, 6); |
934 | break; | 983 | break; |
935 | default: | 984 | default: |
936 | return; | 985 | return; |
@@ -945,32 +994,32 @@ mpc_decoder_read_bitstream_sv7(mpc_decoder *d) | |||
945 | switch (d->SCFI_R[n]) | 994 | switch (d->SCFI_R[n]) |
946 | { | 995 | { |
947 | case 1: | 996 | case 1: |
948 | idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF); | 997 | idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF); |
949 | R[0] = (idx!=8) ? R[2] + idx : (int)mpc_decoder_bitstream_read(d, 6); | 998 | R[0] = (idx!=8) ? R[2] + idx : (int) mpc_decoder_bitstream_read(d, 6); |
950 | idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF); | 999 | idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF); |
951 | R[1] = (idx!=8) ? R[0] + idx : (int)mpc_decoder_bitstream_read(d, 6); | 1000 | R[1] = (idx!=8) ? R[0] + idx : (int) mpc_decoder_bitstream_read(d, 6); |
952 | R[2] = R[1]; | 1001 | R[2] = R[1]; |
953 | break; | 1002 | break; |
954 | case 3: | 1003 | case 3: |
955 | idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF); | 1004 | idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF); |
956 | R[0] = (idx!=8) ? R[2] + idx : (int)mpc_decoder_bitstream_read(d, 6); | 1005 | R[0] = (idx!=8) ? R[2] + idx : (int) mpc_decoder_bitstream_read(d, 6); |
957 | R[1] = R[0]; | 1006 | R[1] = R[0]; |
958 | R[2] = R[1]; | 1007 | R[2] = R[1]; |
959 | break; | 1008 | break; |
960 | case 2: | 1009 | case 2: |
961 | idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF); | 1010 | idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF); |
962 | R[0] = (idx!=8) ? R[2] + idx : (int)mpc_decoder_bitstream_read(d, 6); | 1011 | R[0] = (idx!=8) ? R[2] + idx : (int) mpc_decoder_bitstream_read(d, 6); |
963 | R[1] = R[0]; | 1012 | R[1] = R[0]; |
964 | idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF); | 1013 | idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF); |
965 | R[2] = (idx!=8) ? R[1] + idx : (int)mpc_decoder_bitstream_read(d, 6); | 1014 | R[2] = (idx!=8) ? R[1] + idx : (int) mpc_decoder_bitstream_read(d, 6); |
966 | break; | 1015 | break; |
967 | case 0: | 1016 | case 0: |
968 | idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF); | 1017 | idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF); |
969 | R[0] = (idx!=8) ? R[2] + idx : (int)mpc_decoder_bitstream_read(d, 6); | 1018 | R[0] = (idx!=8) ? R[2] + idx : (int) mpc_decoder_bitstream_read(d, 6); |
970 | idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF); | 1019 | idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF); |
971 | R[1] = (idx!=8) ? R[0] + idx : (int)mpc_decoder_bitstream_read(d, 6); | 1020 | R[1] = (idx!=8) ? R[0] + idx : (int) mpc_decoder_bitstream_read(d, 6); |
972 | idx = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF); | 1021 | idx = mpc_decoder_huffman_decode_fast(d, mpc_table_HuffDSCF); |
973 | R[2] = (idx!=8) ? R[1] + idx : (int)mpc_decoder_bitstream_read(d, 6); | 1022 | R[2] = (idx!=8) ? R[1] + idx : (int) mpc_decoder_bitstream_read(d, 6); |
974 | break; | 1023 | break; |
975 | default: | 1024 | default: |
976 | return; | 1025 | return; |
@@ -996,7 +1045,7 @@ mpc_decoder_read_bitstream_sv7(mpc_decoder *d) | |||
996 | break; | 1045 | break; |
997 | case -1: | 1046 | case -1: |
998 | for (k=0; k<36; k++ ) { | 1047 | for (k=0; k<36; k++ ) { |
999 | tmp = random_int(d); | 1048 | tmp = mpc_random_int(d); |
1000 | *L++ = ((tmp >> 24) & 0xFF) + ((tmp >> 16) & 0xFF) + ((tmp >> 8) & 0xFF) + ((tmp >> 0) & 0xFF) - 510; | 1049 | *L++ = ((tmp >> 24) & 0xFF) + ((tmp >> 16) & 0xFF) + ((tmp >> 8) & 0xFF) + ((tmp >> 0) & 0xFF) - 510; |
1001 | } | 1050 | } |
1002 | break; | 1051 | break; |
@@ -1004,7 +1053,7 @@ mpc_decoder_read_bitstream_sv7(mpc_decoder *d) | |||
1004 | L += 36;// increase pointer | 1053 | L += 36;// increase pointer |
1005 | break; | 1054 | break; |
1006 | case 1: | 1055 | case 1: |
1007 | Table = d->HuffQ[mpc_decoder_bitstream_read(d, 1)][1]; | 1056 | Table = mpc_table_HuffQ[mpc_decoder_bitstream_read(d, 1)][1]; |
1008 | for (k=0; k<12; ++k) | 1057 | for (k=0; k<12; ++k) |
1009 | { | 1058 | { |
1010 | idx = mpc_decoder_huffman_decode_fast(d, Table); | 1059 | idx = mpc_decoder_huffman_decode_fast(d, Table); |
@@ -1014,7 +1063,7 @@ mpc_decoder_read_bitstream_sv7(mpc_decoder *d) | |||
1014 | } | 1063 | } |
1015 | break; | 1064 | break; |
1016 | case 2: | 1065 | case 2: |
1017 | Table = d->HuffQ[mpc_decoder_bitstream_read(d, 1)][2]; | 1066 | Table = mpc_table_HuffQ[mpc_decoder_bitstream_read(d, 1)][2]; |
1018 | for (k=0; k<18; ++k) | 1067 | for (k=0; k<18; ++k) |
1019 | { | 1068 | { |
1020 | idx = mpc_decoder_huffman_decode_fast(d, Table); | 1069 | idx = mpc_decoder_huffman_decode_fast(d, Table); |
@@ -1024,18 +1073,18 @@ mpc_decoder_read_bitstream_sv7(mpc_decoder *d) | |||
1024 | break; | 1073 | break; |
1025 | case 3: | 1074 | case 3: |
1026 | case 4: | 1075 | case 4: |
1027 | Table = d->HuffQ[mpc_decoder_bitstream_read(d, 1)][*ResL]; | 1076 | Table = mpc_table_HuffQ[mpc_decoder_bitstream_read(d, 1)][*ResL]; |
1028 | for (k=0; k<36; ++k) | 1077 | for (k=0; k<36; ++k) |
1029 | *L++ = mpc_decoder_huffman_decode_faster(d, Table); | 1078 | *L++ = mpc_decoder_huffman_decode_faster(d, Table); |
1030 | break; | 1079 | break; |
1031 | case 5: | 1080 | case 5: |
1032 | Table = d->HuffQ[mpc_decoder_bitstream_read(d, 1)][*ResL]; | 1081 | Table = mpc_table_HuffQ[mpc_decoder_bitstream_read(d, 1)][*ResL]; |
1033 | for (k=0; k<36; ++k) | 1082 | for (k=0; k<36; ++k) |
1034 | *L++ = mpc_decoder_huffman_decode_fast(d, Table); | 1083 | *L++ = mpc_decoder_huffman_decode_fast(d, Table); |
1035 | break; | 1084 | break; |
1036 | case 6: | 1085 | case 6: |
1037 | case 7: | 1086 | case 7: |
1038 | Table = d->HuffQ[mpc_decoder_bitstream_read(d, 1)][*ResL]; | 1087 | Table = mpc_table_HuffQ[mpc_decoder_bitstream_read(d, 1)][*ResL]; |
1039 | for (k=0; k<36; ++k) | 1088 | for (k=0; k<36; ++k) |
1040 | *L++ = mpc_decoder_huffman_decode(d, Table); | 1089 | *L++ = mpc_decoder_huffman_decode(d, Table); |
1041 | break; | 1090 | break; |
@@ -1056,7 +1105,7 @@ mpc_decoder_read_bitstream_sv7(mpc_decoder *d) | |||
1056 | break; | 1105 | break; |
1057 | case -1: | 1106 | case -1: |
1058 | for (k=0; k<36; k++ ) { | 1107 | for (k=0; k<36; k++ ) { |
1059 | tmp = random_int(d); | 1108 | tmp = mpc_random_int(d); |
1060 | *R++ = ((tmp >> 24) & 0xFF) + ((tmp >> 16) & 0xFF) + ((tmp >> 8) & 0xFF) + ((tmp >> 0) & 0xFF) - 510; | 1109 | *R++ = ((tmp >> 24) & 0xFF) + ((tmp >> 16) & 0xFF) + ((tmp >> 8) & 0xFF) + ((tmp >> 0) & 0xFF) - 510; |
1061 | } | 1110 | } |
1062 | break; | 1111 | break; |
@@ -1064,7 +1113,7 @@ mpc_decoder_read_bitstream_sv7(mpc_decoder *d) | |||
1064 | R += 36;// increase pointer | 1113 | R += 36;// increase pointer |
1065 | break; | 1114 | break; |
1066 | case 1: | 1115 | case 1: |
1067 | Table = d->HuffQ[mpc_decoder_bitstream_read(d, 1)][1]; | 1116 | Table = mpc_table_HuffQ[mpc_decoder_bitstream_read(d, 1)][1]; |
1068 | for (k=0; k<12; ++k) | 1117 | for (k=0; k<12; ++k) |
1069 | { | 1118 | { |
1070 | idx = mpc_decoder_huffman_decode_fast(d, Table); | 1119 | idx = mpc_decoder_huffman_decode_fast(d, Table); |
@@ -1074,7 +1123,7 @@ mpc_decoder_read_bitstream_sv7(mpc_decoder *d) | |||
1074 | } | 1123 | } |
1075 | break; | 1124 | break; |
1076 | case 2: | 1125 | case 2: |
1077 | Table = d->HuffQ[mpc_decoder_bitstream_read(d, 1)][2]; | 1126 | Table = mpc_table_HuffQ[mpc_decoder_bitstream_read(d, 1)][2]; |
1078 | for (k=0; k<18; ++k) | 1127 | for (k=0; k<18; ++k) |
1079 | { | 1128 | { |
1080 | idx = mpc_decoder_huffman_decode_fast(d, Table); | 1129 | idx = mpc_decoder_huffman_decode_fast(d, Table); |
@@ -1084,18 +1133,18 @@ mpc_decoder_read_bitstream_sv7(mpc_decoder *d) | |||
1084 | break; | 1133 | break; |
1085 | case 3: | 1134 | case 3: |
1086 | case 4: | 1135 | case 4: |
1087 | Table = d->HuffQ[mpc_decoder_bitstream_read(d, 1)][*ResR]; | 1136 | Table = mpc_table_HuffQ[mpc_decoder_bitstream_read(d, 1)][*ResR]; |
1088 | for (k=0; k<36; ++k) | 1137 | for (k=0; k<36; ++k) |
1089 | *R++ = mpc_decoder_huffman_decode_faster(d, Table); | 1138 | *R++ = mpc_decoder_huffman_decode_faster(d, Table); |
1090 | break; | 1139 | break; |
1091 | case 5: | 1140 | case 5: |
1092 | Table = d->HuffQ[mpc_decoder_bitstream_read(d, 1)][*ResR]; | 1141 | Table = mpc_table_HuffQ[mpc_decoder_bitstream_read(d, 1)][*ResR]; |
1093 | for (k=0; k<36; ++k) | 1142 | for (k=0; k<36; ++k) |
1094 | *R++ = mpc_decoder_huffman_decode_fast(d, Table); | 1143 | *R++ = mpc_decoder_huffman_decode_fast(d, Table); |
1095 | break; | 1144 | break; |
1096 | case 6: | 1145 | case 6: |
1097 | case 7: | 1146 | case 7: |
1098 | Table = d->HuffQ[mpc_decoder_bitstream_read(d, 1)][*ResR]; | 1147 | Table = mpc_table_HuffQ[mpc_decoder_bitstream_read(d, 1)][*ResR]; |
1099 | for (k=0; k<36; ++k) | 1148 | for (k=0; k<36; ++k) |
1100 | *R++ = mpc_decoder_huffman_decode(d, Table); | 1149 | *R++ = mpc_decoder_huffman_decode(d, Table); |
1101 | break; | 1150 | break; |
@@ -1114,43 +1163,6 @@ void mpc_decoder_setup(mpc_decoder *d, mpc_reader *r) | |||
1114 | { | 1163 | { |
1115 | d->r = r; | 1164 | d->r = r; |
1116 | 1165 | ||
1117 | d->HuffQ[0][0] = 0; | ||
1118 | d->HuffQ[1][0] = 0; | ||
1119 | d->HuffQ[0][1] = d->HuffQ1[0]; | ||
1120 | d->HuffQ[1][1] = d->HuffQ1[1]; | ||
1121 | d->HuffQ[0][2] = d->HuffQ2[0]; | ||
1122 | d->HuffQ[1][2] = d->HuffQ2[1]; | ||
1123 | d->HuffQ[0][3] = d->HuffQ3[0]; | ||
1124 | d->HuffQ[1][3] = d->HuffQ3[1]; | ||
1125 | d->HuffQ[0][4] = d->HuffQ4[0]; | ||
1126 | d->HuffQ[1][4] = d->HuffQ4[1]; | ||
1127 | d->HuffQ[0][5] = d->HuffQ5[0]; | ||
1128 | d->HuffQ[1][5] = d->HuffQ5[1]; | ||
1129 | d->HuffQ[0][6] = d->HuffQ6[0]; | ||
1130 | d->HuffQ[1][6] = d->HuffQ6[1]; | ||
1131 | d->HuffQ[0][7] = d->HuffQ7[0]; | ||
1132 | d->HuffQ[1][7] = d->HuffQ7[1]; | ||
1133 | |||
1134 | d->SampleHuff[0] = NULL; | ||
1135 | d->SampleHuff[1] = d->Entropie_1; | ||
1136 | d->SampleHuff[2] = d->Entropie_2; | ||
1137 | d->SampleHuff[3] = d->Entropie_3; | ||
1138 | d->SampleHuff[4] = d->Entropie_4; | ||
1139 | d->SampleHuff[5] = d->Entropie_5; | ||
1140 | d->SampleHuff[6] = d->Entropie_6; | ||
1141 | d->SampleHuff[7] = d->Entropie_7; | ||
1142 | d->SampleHuff[8] = NULL; | ||
1143 | d->SampleHuff[9] = NULL; | ||
1144 | d->SampleHuff[10] = NULL; | ||
1145 | d->SampleHuff[11] = NULL; | ||
1146 | d->SampleHuff[12] = NULL; | ||
1147 | d->SampleHuff[13] = NULL; | ||
1148 | d->SampleHuff[14] = NULL; | ||
1149 | d->SampleHuff[15] = NULL; | ||
1150 | d->SampleHuff[16] = NULL; | ||
1151 | d->SampleHuff[17] = NULL; | ||
1152 | |||
1153 | d->EQ_activated = 0; | ||
1154 | d->MPCHeaderPos = 0; | 1166 | d->MPCHeaderPos = 0; |
1155 | d->StreamVersion = 0; | 1167 | d->StreamVersion = 0; |
1156 | d->MS_used = 0; | 1168 | d->MS_used = 0; |
@@ -1159,12 +1171,10 @@ void mpc_decoder_setup(mpc_decoder *d, mpc_reader *r) | |||
1159 | d->FrameWasValid = 0; | 1171 | d->FrameWasValid = 0; |
1160 | d->OverallFrames = 0; | 1172 | d->OverallFrames = 0; |
1161 | d->DecodedFrames = 0; | 1173 | d->DecodedFrames = 0; |
1162 | d->LastValidSamples = 0; | ||
1163 | d->TrueGaplessPresent = 0; | 1174 | d->TrueGaplessPresent = 0; |
1164 | d->WordsRead = 0; | 1175 | d->WordsRead = 0; |
1165 | d->Max_Band = 0; | 1176 | d->Max_Band = 0; |
1166 | d->SampleRate = 0; | 1177 | d->SampleRate = 0; |
1167 | // clips = 0; | ||
1168 | d->__r1 = 1; | 1178 | d->__r1 = 1; |
1169 | d->__r2 = 1; | 1179 | d->__r2 = 1; |
1170 | 1180 | ||
@@ -1175,8 +1185,6 @@ void mpc_decoder_setup(mpc_decoder *d, mpc_reader *r) | |||
1175 | d->Max_Band = 0; | 1185 | d->Max_Band = 0; |
1176 | 1186 | ||
1177 | mpc_decoder_initialisiere_quantisierungstabellen(d, 1.0f); | 1187 | mpc_decoder_initialisiere_quantisierungstabellen(d, 1.0f); |
1178 | mpc_decoder_init_huffman_sv6(d); | ||
1179 | mpc_decoder_init_huffman_sv7(d); | ||
1180 | 1188 | ||
1181 | /* Link struct entries to actual tables which are placed in IRAM */ | 1189 | /* Link struct entries to actual tables which are placed in IRAM */ |
1182 | d->V_L = V_L; | 1190 | d->V_L = V_L; |
@@ -1186,7 +1194,7 @@ void mpc_decoder_setup(mpc_decoder *d, mpc_reader *r) | |||
1186 | #endif | 1194 | #endif |
1187 | } | 1195 | } |
1188 | 1196 | ||
1189 | static void mpc_decoder_set_streaminfo(mpc_decoder *d, mpc_streaminfo *si) | 1197 | void mpc_decoder_set_streaminfo(mpc_decoder *d, mpc_streaminfo *si) |
1190 | { | 1198 | { |
1191 | mpc_decoder_reset_synthesis(d); | 1199 | mpc_decoder_reset_synthesis(d); |
1192 | mpc_decoder_reset_globals(d); | 1200 | mpc_decoder_reset_globals(d); |
@@ -1196,14 +1204,13 @@ static void mpc_decoder_set_streaminfo(mpc_decoder *d, mpc_streaminfo *si) | |||
1196 | d->Max_Band = si->max_band; | 1204 | d->Max_Band = si->max_band; |
1197 | d->OverallFrames = si->frames; | 1205 | d->OverallFrames = si->frames; |
1198 | d->MPCHeaderPos = si->header_position; | 1206 | d->MPCHeaderPos = si->header_position; |
1199 | d->LastValidSamples = si->last_frame_samples; | ||
1200 | d->TrueGaplessPresent = si->is_true_gapless; | 1207 | d->TrueGaplessPresent = si->is_true_gapless; |
1201 | d->SampleRate = (mpc_int32_t)si->sample_freq; | 1208 | d->SampleRate = (mpc_int32_t)si->sample_freq; |
1202 | 1209 | ||
1203 | d->samples_to_skip = MPC_DECODER_SYNTH_DELAY; | 1210 | d->samples_to_skip = MPC_DECODER_SYNTH_DELAY; |
1204 | } | 1211 | } |
1205 | 1212 | ||
1206 | bool mpc_decoder_initialize(mpc_decoder *d, mpc_streaminfo *si) | 1213 | mpc_bool_t mpc_decoder_initialize(mpc_decoder *d, mpc_streaminfo *si) |
1207 | { | 1214 | { |
1208 | mpc_decoder_set_streaminfo(d, si); | 1215 | mpc_decoder_set_streaminfo(d, si); |
1209 | 1216 | ||
@@ -1214,14 +1221,14 @@ bool mpc_decoder_initialize(mpc_decoder *d, mpc_streaminfo *si) | |||
1214 | case 0x06: f_seek(d, 8 + d->MPCHeaderPos); d->pos = 0; break; | 1221 | case 0x06: f_seek(d, 8 + d->MPCHeaderPos); d->pos = 0; break; |
1215 | case 0x07: | 1222 | case 0x07: |
1216 | case 0x17: /*f_seek ( 24 + d->MPCHeaderPos );*/ d->pos = 8; break; | 1223 | case 0x17: /*f_seek ( 24 + d->MPCHeaderPos );*/ d->pos = 8; break; |
1217 | default: return false; | 1224 | default: return FALSE; |
1218 | } | 1225 | } |
1219 | 1226 | ||
1220 | // AB: fill buffer and initialize decoder | 1227 | // AB: fill buffer and initialize decoder |
1221 | f_read_dword(d, d->Speicher, MEMSIZE ); | 1228 | f_read_dword(d, d->Speicher, MEMSIZE ); |
1222 | d->dword = d->Speicher[d->Zaehler = 0]; | 1229 | d->dword = d->Speicher[d->Zaehler = 0]; |
1223 | 1230 | ||
1224 | return true; | 1231 | return TRUE; |
1225 | } | 1232 | } |
1226 | 1233 | ||
1227 | //--------------------------------------------------------------- | 1234 | //--------------------------------------------------------------- |
@@ -1266,7 +1273,7 @@ helper3(mpc_decoder *d, mpc_uint32_t bitpos, mpc_uint32_t* buffoffs) | |||
1266 | static mpc_uint32_t get_initial_fpos(mpc_decoder *d, mpc_uint32_t StreamVersion) | 1273 | static mpc_uint32_t get_initial_fpos(mpc_decoder *d, mpc_uint32_t StreamVersion) |
1267 | { | 1274 | { |
1268 | mpc_uint32_t fpos = 0; | 1275 | mpc_uint32_t fpos = 0; |
1269 | (void)StreamVersion; | 1276 | (void) StreamVersion; |
1270 | switch ( d->StreamVersion ) { // setting position to the beginning of the data-bitstream | 1277 | switch ( d->StreamVersion ) { // setting position to the beginning of the data-bitstream |
1271 | case 0x04: fpos = 48; break; | 1278 | case 0x04: fpos = 48; break; |
1272 | case 0x05: | 1279 | case 0x05: |
@@ -1277,12 +1284,12 @@ static mpc_uint32_t get_initial_fpos(mpc_decoder *d, mpc_uint32_t StreamVersion) | |||
1277 | return fpos; | 1284 | return fpos; |
1278 | } | 1285 | } |
1279 | 1286 | ||
1280 | bool mpc_decoder_seek_seconds(mpc_decoder *d, double seconds) | 1287 | mpc_bool_t mpc_decoder_seek_seconds(mpc_decoder *d, double seconds) |
1281 | { | 1288 | { |
1282 | return mpc_decoder_seek_sample(d, (mpc_int64_t)(seconds * (double)d->SampleRate + 0.5)); | 1289 | return mpc_decoder_seek_sample(d, (mpc_int64_t)(seconds * (double)d->SampleRate + 0.5)); |
1283 | } | 1290 | } |
1284 | 1291 | ||
1285 | bool mpc_decoder_seek_sample(mpc_decoder *d, mpc_int64_t destsample) | 1292 | mpc_bool_t mpc_decoder_seek_sample(mpc_decoder *d, mpc_int64_t destsample) |
1286 | { | 1293 | { |
1287 | mpc_uint32_t fpos; | 1294 | mpc_uint32_t fpos; |
1288 | mpc_uint32_t fwd; | 1295 | mpc_uint32_t fwd; |
@@ -1316,7 +1323,7 @@ bool mpc_decoder_seek_sample(mpc_decoder *d, mpc_int64_t destsample) | |||
1316 | 1323 | ||
1317 | fpos = get_initial_fpos(d, d->StreamVersion); | 1324 | fpos = get_initial_fpos(d, d->StreamVersion); |
1318 | if (fpos == 0) { | 1325 | if (fpos == 0) { |
1319 | return false; | 1326 | return FALSE; |
1320 | } | 1327 | } |
1321 | 1328 | ||
1322 | helper2(d, fpos); | 1329 | helper2(d, fpos); |
@@ -1333,11 +1340,15 @@ bool mpc_decoder_seek_sample(mpc_decoder *d, mpc_int64_t destsample) | |||
1333 | mpc_decoder_read_bitstream_sv7(d); | 1340 | mpc_decoder_read_bitstream_sv7(d); |
1334 | } | 1341 | } |
1335 | else { | 1342 | else { |
1343 | #ifdef MPC_SUPPORT_SV456 | ||
1336 | mpc_decoder_read_bitstream_sv6(d); | 1344 | mpc_decoder_read_bitstream_sv6(d); |
1345 | #else | ||
1346 | return FALSE; | ||
1347 | #endif | ||
1337 | } | 1348 | } |
1338 | if (mpc_decoder_bits_read(d) - FrameBitCnt != d->FwdJumpInfo ) { | 1349 | if (mpc_decoder_bits_read(d) - FrameBitCnt != d->FwdJumpInfo ) { |
1339 | // Box ("Bug in perform_jump"); | 1350 | // Box ("Bug in perform_jump"); |
1340 | return false; | 1351 | return FALSE; |
1341 | } | 1352 | } |
1342 | // update buffer | 1353 | // update buffer |
1343 | if ((RING ^ d->Zaehler) & MEMSIZE2) { | 1354 | if ((RING ^ d->Zaehler) & MEMSIZE2) { |
@@ -1348,7 +1359,7 @@ bool mpc_decoder_seek_sample(mpc_decoder *d, mpc_int64_t destsample) | |||
1348 | // LastBitsRead = BitsRead (); | 1359 | // LastBitsRead = BitsRead (); |
1349 | // LastFrame = d->DecodedFrames; | 1360 | // LastFrame = d->DecodedFrames; |
1350 | 1361 | ||
1351 | return true; | 1362 | return TRUE; |
1352 | } | 1363 | } |
1353 | 1364 | ||
1354 | void mpc_decoder_update_buffer(mpc_decoder *d, mpc_uint32_t RING) | 1365 | void mpc_decoder_update_buffer(mpc_decoder *d, mpc_uint32_t RING) |