diff options
-rw-r--r-- | apps/codecs/libmusepack/mpc_decoder.c | 23 |
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 | } |