summaryrefslogtreecommitdiff
path: root/apps/codecs/libmusepack/mpc_decoder.c
diff options
context:
space:
mode:
authorThom Johansen <thomj@rockbox.org>2006-01-30 01:00:40 +0000
committerThom Johansen <thomj@rockbox.org>2006-01-30 01:00:40 +0000
commit2b483958f961637e296432632a5b891eb061c22d (patch)
tree180fd3596df375fa56732050a7cc20ebdbc3cdb7 /apps/codecs/libmusepack/mpc_decoder.c
parent58231d50f2cb940a309814e31ae583b4b0dfed24 (diff)
downloadrockbox-2b483958f961637e296432632a5b891eb061c22d.tar.gz
rockbox-2b483958f961637e296432632a5b891eb061c22d.zip
Synced libmpcdec to musepack.net SVN.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8488 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/codecs/libmusepack/mpc_decoder.c')
-rw-r--r--apps/codecs/libmusepack/mpc_decoder.c359
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
44extern const HuffmanTyp* mpc_table_HuffQ [2] [8];
45extern const HuffmanTyp mpc_table_HuffHdr [10];
46extern const HuffmanTyp mpc_table_HuffSCFI [ 4];
47extern const HuffmanTyp mpc_table_HuffDSCF [16];
48
49
50#ifdef MPC_SUPPORT_SV456
51//SV4/5/6 tables
52extern const HuffmanTyp* mpc_table_SampleHuff [18];
53extern const HuffmanTyp mpc_table_SCFI_Bundle [ 8];
54extern const HuffmanTyp mpc_table_DSCF_Entropie [13];
55extern const HuffmanTyp mpc_table_Region_A [16];
56extern const HuffmanTyp mpc_table_Region_B [ 8];
57extern 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//------------------------------------------------------------------------------
60void mpc_decoder_init_huffman_sv6(mpc_decoder *d);
61void mpc_decoder_init_huffman_sv7(mpc_decoder *d);
62void mpc_decoder_read_bitstream_sv6(mpc_decoder *d); 77void mpc_decoder_read_bitstream_sv6(mpc_decoder *d);
63void mpc_decoder_read_bitstream_sv7(mpc_decoder *d); 78void mpc_decoder_read_bitstream_sv7(mpc_decoder *d);
64void mpc_decoder_update_buffer(mpc_decoder *d, mpc_uint32_t RING); 79void mpc_decoder_update_buffer(mpc_decoder *d, mpc_uint32_t RING);
65bool mpc_decoder_seek_sample(mpc_decoder *d, mpc_int64_t destsample); 80mpc_bool_t mpc_decoder_seek_sample(mpc_decoder *d, mpc_int64_t destsample);
66void mpc_decoder_requantisierung(mpc_decoder *d, const mpc_int32_t Last_Band); 81void 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
76static bool f_seek(mpc_decoder *d, mpc_int32_t offset) 91static 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)
152static void 167static void
153mpc_decoder_scfi_bundle_read( 168mpc_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
177static int
178mpc_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
187void
188mpc_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
202static mpc_int32_t 194static 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
313mpc_uint32_t
314mpc_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
321static mpc_uint32_t 346static mpc_uint32_t
322mpc_decoder_decode_internal(mpc_decoder *d, MPC_SAMPLE_FORMAT *buffer) 347mpc_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
642static 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 ******************************************/
629void 678void
630mpc_decoder_read_bitstream_sv6(mpc_decoder *d) 679mpc_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 ******************************************/
838void 887void
839mpc_decoder_read_bitstream_sv7(mpc_decoder *d) 888mpc_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
1189static void mpc_decoder_set_streaminfo(mpc_decoder *d, mpc_streaminfo *si) 1197void 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
1206bool mpc_decoder_initialize(mpc_decoder *d, mpc_streaminfo *si) 1213mpc_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)
1266static mpc_uint32_t get_initial_fpos(mpc_decoder *d, mpc_uint32_t StreamVersion) 1273static 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
1280bool mpc_decoder_seek_seconds(mpc_decoder *d, double seconds) 1287mpc_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
1285bool mpc_decoder_seek_sample(mpc_decoder *d, mpc_int64_t destsample) 1292mpc_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
1354void mpc_decoder_update_buffer(mpc_decoder *d, mpc_uint32_t RING) 1365void mpc_decoder_update_buffer(mpc_decoder *d, mpc_uint32_t RING)