summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/codecs/libmusepack/mpc_decoder.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/apps/codecs/libmusepack/mpc_decoder.c b/apps/codecs/libmusepack/mpc_decoder.c
index c1e1d0e0d2..191ee10a2c 100644
--- a/apps/codecs/libmusepack/mpc_decoder.c
+++ b/apps/codecs/libmusepack/mpc_decoder.c
@@ -525,7 +525,8 @@ void mpc_decoder_read_bitstream_sv7(mpc_decoder * d, mpc_bits_reader * r)
525 for ( n = 0; n < Max_used_Band; n++ ) { 525 for ( n = 0; n < Max_used_Band; n++ ) {
526 mpc_int16_t *q = d->Q[n].L, Res = d->Res_L[n]; 526 mpc_int16_t *q = d->Q[n].L, Res = d->Res_L[n];
527 do { 527 do {
528 mpc_int32_t k; 528 mpc_uint32_t nbit;
529 mpc_int32_t k, dc;
529 const mpc_lut_data *Table; 530 const mpc_lut_data *Table;
530 switch (Res) { 531 switch (Res) {
531 case -2: case -3: case -4: case -5: case -6: case -7: case -8: case -9: 532 case -2: case -3: case -4: case -5: case -6: case -7: case -8: case -9:
@@ -564,8 +565,10 @@ void mpc_decoder_read_bitstream_sv7(mpc_decoder * d, mpc_bits_reader * r)
564 q[k] = mpc_bits_huff_lut(r, Table); 565 q[k] = mpc_bits_huff_lut(r, Table);
565 break; 566 break;
566 case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: 567 case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17:
568 nbit = Res_bit[Res];
569 dc = Dc[Res];
567 for ( k = 0; k < 36; k++ ) 570 for ( k = 0; k < 36; k++ )
568 q[k] = (mpc_int32_t)mpc_bits_read(r, Res_bit[Res]) - Dc[Res]; 571 q[k] = (mpc_int32_t)mpc_bits_read(r, nbit) - dc;
569 break; 572 break;
570 default: 573 default:
571 return; 574 return;
@@ -683,7 +686,8 @@ void mpc_decoder_read_bitstream_sv8(mpc_decoder * d, mpc_bits_reader * r, mpc_bo
683 mpc_int16_t *q = d->Q[n].L, Res = d->Res_L[n]; 686 mpc_int16_t *q = d->Q[n].L, Res = d->Res_L[n];
684 static const int thres[] = {0, 0, 3, 0, 0, 1, 3, 4, 8}; 687 static const int thres[] = {0, 0, 3, 0, 0, 1, 3, 4, 8};
685 do { 688 do {
686 mpc_int32_t k = 0, idx = 1; 689 mpc_uint32_t nbit;
690 mpc_int32_t k = 0, idx = 1, dc;
687 if (Res != 0) { 691 if (Res != 0) {
688 if (Res == 2) { 692 if (Res == 2) {
689 Tables[0] = & mpc_can_Q [0][0]; 693 Tables[0] = & mpc_can_Q [0][0];
@@ -736,12 +740,19 @@ void mpc_decoder_read_bitstream_sv8(mpc_decoder * d, mpc_bits_reader * r, mpc_bo
736 q[k] = mpc_bits_can_dec(r, Tables[idx > thres[Res]]); 740 q[k] = mpc_bits_can_dec(r, Tables[idx > thres[Res]]);
737 idx = (idx >> 1) + absi(q[k]); 741 idx = (idx >> 1) + absi(q[k]);
738 } 742 }
743 } else if (Res == 9) {
744 dc = Dc[Res];
745 for ( ; k < 36; k++ ) {
746 q[k] = (unsigned char) mpc_bits_can_dec(r, & mpc_can_Q9up);
747 q[k] -= dc;
748 }
739 } else { 749 } else {
750 nbit = (Res - 9);
751 dc = Dc[Res];
740 for ( ; k < 36; k++ ) { 752 for ( ; k < 36; k++ ) {
741 q[k] = (unsigned char) mpc_bits_can_dec(r, & mpc_can_Q9up); 753 q[k] = (unsigned char) mpc_bits_can_dec(r, & mpc_can_Q9up);
742 if (Res != 9) 754 q[k] = (q[k] << nbit) | mpc_bits_read(r, nbit);
743 q[k] = (q[k] << (Res - 9)) | mpc_bits_read(r, Res - 9); 755 q[k] -= dc;
744 q[k] -= Dc[Res];
745 } 756 }
746 } 757 }
747 } 758 }