summaryrefslogtreecommitdiff
path: root/apps/codecs/libmad/layer3.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/codecs/libmad/layer3.c')
-rw-r--r--apps/codecs/libmad/layer3.c694
1 files changed, 347 insertions, 347 deletions
diff --git a/apps/codecs/libmad/layer3.c b/apps/codecs/libmad/layer3.c
index 0a53086d78..2dcdeb96d4 100644
--- a/apps/codecs/libmad/layer3.c
+++ b/apps/codecs/libmad/layer3.c
@@ -57,7 +57,7 @@
57enum { 57enum {
58 count1table_select = 0x01, 58 count1table_select = 0x01,
59 scalefac_scale = 0x02, 59 scalefac_scale = 0x02,
60 preflag = 0x04, 60 preflag = 0x04,
61 mixed_block_flag = 0x08 61 mixed_block_flag = 0x08
62}; 62};
63 63
@@ -88,7 +88,7 @@ struct sideinfo {
88 unsigned char region1_count; 88 unsigned char region1_count;
89 89
90 /* from main_data */ 90 /* from main_data */
91 unsigned char scalefac[39]; /* scalefac_l and/or scalefac_s */ 91 unsigned char scalefac[39]; /* scalefac_l and/or scalefac_s */
92 } ch[2]; 92 } ch[2];
93 } gr[2]; 93 } gr[2];
94}; 94};
@@ -502,14 +502,14 @@ mad_fixed_t const is_lsf_table[2][15] = {
502}; 502};
503 503
504/* 504/*
505 * NAME: III_sideinfo() 505 * NAME: III_sideinfo()
506 * DESCRIPTION: decode frame side information from a bitstream 506 * DESCRIPTION: decode frame side information from a bitstream
507 */ 507 */
508static 508static
509enum mad_error III_sideinfo(struct mad_bitptr *ptr, unsigned int nch, 509enum mad_error III_sideinfo(struct mad_bitptr *ptr, unsigned int nch,
510 int lsf, struct sideinfo *si, 510 int lsf, struct sideinfo *si,
511 unsigned int *data_bitlen, 511 unsigned int *data_bitlen,
512 unsigned int *priv_bitlen) 512 unsigned int *priv_bitlen)
513{ 513{
514 unsigned int ngr, gr, ch, i; 514 unsigned int ngr, gr, ch, i;
515 enum mad_error result = MAD_ERROR_NONE; 515 enum mad_error result = MAD_ERROR_NONE;
@@ -542,46 +542,46 @@ enum mad_error III_sideinfo(struct mad_bitptr *ptr, unsigned int nch,
542 *data_bitlen += channel->part2_3_length; 542 *data_bitlen += channel->part2_3_length;
543 543
544 if (channel->big_values > 288 && result == 0) 544 if (channel->big_values > 288 && result == 0)
545 result = MAD_ERROR_BADBIGVALUES; 545 result = MAD_ERROR_BADBIGVALUES;
546 546
547 channel->flags = 0; 547 channel->flags = 0;
548 548
549 /* window_switching_flag */ 549 /* window_switching_flag */
550 if (mad_bit_read(ptr, 1)) { 550 if (mad_bit_read(ptr, 1)) {
551 channel->block_type = mad_bit_read(ptr, 2); 551 channel->block_type = mad_bit_read(ptr, 2);
552 552
553 if (channel->block_type == 0 && result == 0) 553 if (channel->block_type == 0 && result == 0)
554 result = MAD_ERROR_BADBLOCKTYPE; 554 result = MAD_ERROR_BADBLOCKTYPE;
555 555
556 if (!lsf && channel->block_type == 2 && si->scfsi[ch] && result == 0) 556 if (!lsf && channel->block_type == 2 && si->scfsi[ch] && result == 0)
557 result = MAD_ERROR_BADSCFSI; 557 result = MAD_ERROR_BADSCFSI;
558 558
559 channel->region0_count = 7; 559 channel->region0_count = 7;
560 channel->region1_count = 36; 560 channel->region1_count = 36;
561 561
562 if (mad_bit_read(ptr, 1)) 562 if (mad_bit_read(ptr, 1))
563 channel->flags |= mixed_block_flag; 563 channel->flags |= mixed_block_flag;
564 else if (channel->block_type == 2) 564 else if (channel->block_type == 2)
565 channel->region0_count = 8; 565 channel->region0_count = 8;
566 566
567 for (i = 0; i < 2; ++i) 567 for (i = 0; i < 2; ++i)
568 channel->table_select[i] = mad_bit_read(ptr, 5); 568 channel->table_select[i] = mad_bit_read(ptr, 5);
569 569
570# if defined(DEBUG) 570# if defined(DEBUG)
571 channel->table_select[2] = 4; /* not used */ 571 channel->table_select[2] = 4; /* not used */
572# endif 572# endif
573 573
574 for (i = 0; i < 3; ++i) 574 for (i = 0; i < 3; ++i)
575 channel->subblock_gain[i] = mad_bit_read(ptr, 3); 575 channel->subblock_gain[i] = mad_bit_read(ptr, 3);
576 } 576 }
577 else { 577 else {
578 channel->block_type = 0; 578 channel->block_type = 0;
579 579
580 for (i = 0; i < 3; ++i) 580 for (i = 0; i < 3; ++i)
581 channel->table_select[i] = mad_bit_read(ptr, 5); 581 channel->table_select[i] = mad_bit_read(ptr, 5);
582 582
583 channel->region0_count = mad_bit_read(ptr, 4); 583 channel->region0_count = mad_bit_read(ptr, 4);
584 channel->region1_count = mad_bit_read(ptr, 3); 584 channel->region1_count = mad_bit_read(ptr, 3);
585 } 585 }
586 586
587 /* [preflag,] scalefac_scale, count1table_select */ 587 /* [preflag,] scalefac_scale, count1table_select */
@@ -593,13 +593,13 @@ enum mad_error III_sideinfo(struct mad_bitptr *ptr, unsigned int nch,
593} 593}
594 594
595/* 595/*
596 * NAME: III_scalefactors_lsf() 596 * NAME: III_scalefactors_lsf()
597 * DESCRIPTION: decode channel scalefactors for LSF from a bitstream 597 * DESCRIPTION: decode channel scalefactors for LSF from a bitstream
598 */ 598 */
599static 599static
600unsigned int III_scalefactors_lsf(struct mad_bitptr *ptr, 600unsigned int III_scalefactors_lsf(struct mad_bitptr *ptr,
601 struct channel *channel, 601 struct channel *channel,
602 struct channel *gr1ch, int mode_extension) 602 struct channel *gr1ch, int mode_extension)
603{ 603{
604 struct mad_bitptr start; 604 struct mad_bitptr start;
605 unsigned int scalefac_compress, index, slen[4], part, n, i; 605 unsigned int scalefac_compress, index, slen[4], part, n, i;
@@ -646,7 +646,7 @@ unsigned int III_scalefactors_lsf(struct mad_bitptr *ptr,
646 n = 0; 646 n = 0;
647 for (part = 0; part < 4; ++part) { 647 for (part = 0; part < 4; ++part) {
648 for (i = 0; i < nsfb[part]; ++i) 648 for (i = 0; i < nsfb[part]; ++i)
649 channel->scalefac[n++] = mad_bit_read(ptr, slen[part]); 649 channel->scalefac[n++] = mad_bit_read(ptr, slen[part]);
650 } 650 }
651 651
652 while (n < 39) 652 while (n < 39)
@@ -691,10 +691,10 @@ unsigned int III_scalefactors_lsf(struct mad_bitptr *ptr,
691 max = (1 << slen[part]) - 1; 691 max = (1 << slen[part]) - 1;
692 692
693 for (i = 0; i < nsfb[part]; ++i) { 693 for (i = 0; i < nsfb[part]; ++i) {
694 is_pos = mad_bit_read(ptr, slen[part]); 694 is_pos = mad_bit_read(ptr, slen[part]);
695 695
696 channel->scalefac[n] = is_pos; 696 channel->scalefac[n] = is_pos;
697 gr1ch->scalefac[n++] = (is_pos == max); 697 gr1ch->scalefac[n++] = (is_pos == max);
698 } 698 }
699 } 699 }
700 700
@@ -708,12 +708,12 @@ unsigned int III_scalefactors_lsf(struct mad_bitptr *ptr,
708} 708}
709 709
710/* 710/*
711 * NAME: III_scalefactors() 711 * NAME: III_scalefactors()
712 * DESCRIPTION: decode channel scalefactors of one granule from a bitstream 712 * DESCRIPTION: decode channel scalefactors of one granule from a bitstream
713 */ 713 */
714static 714static
715unsigned int III_scalefactors(struct mad_bitptr *ptr, struct channel *channel, 715unsigned int III_scalefactors(struct mad_bitptr *ptr, struct channel *channel,
716 struct channel const *gr0ch, unsigned int scfsi) 716 struct channel const *gr0ch, unsigned int scfsi)
717{ 717{
718 struct mad_bitptr start; 718 struct mad_bitptr start;
719 unsigned int slen1, slen2, sfbi; 719 unsigned int slen1, slen2, sfbi;
@@ -743,38 +743,38 @@ unsigned int III_scalefactors(struct mad_bitptr *ptr, struct channel *channel,
743 else { /* channel->block_type != 2 */ 743 else { /* channel->block_type != 2 */
744 if (scfsi & 0x8) { 744 if (scfsi & 0x8) {
745 for (sfbi = 0; sfbi < 6; ++sfbi) 745 for (sfbi = 0; sfbi < 6; ++sfbi)
746 channel->scalefac[sfbi] = gr0ch->scalefac[sfbi]; 746 channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
747 } 747 }
748 else { 748 else {
749 for (sfbi = 0; sfbi < 6; ++sfbi) 749 for (sfbi = 0; sfbi < 6; ++sfbi)
750 channel->scalefac[sfbi] = mad_bit_read(ptr, slen1); 750 channel->scalefac[sfbi] = mad_bit_read(ptr, slen1);
751 } 751 }
752 752
753 if (scfsi & 0x4) { 753 if (scfsi & 0x4) {
754 for (sfbi = 6; sfbi < 11; ++sfbi) 754 for (sfbi = 6; sfbi < 11; ++sfbi)
755 channel->scalefac[sfbi] = gr0ch->scalefac[sfbi]; 755 channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
756 } 756 }
757 else { 757 else {
758 for (sfbi = 6; sfbi < 11; ++sfbi) 758 for (sfbi = 6; sfbi < 11; ++sfbi)
759 channel->scalefac[sfbi] = mad_bit_read(ptr, slen1); 759 channel->scalefac[sfbi] = mad_bit_read(ptr, slen1);
760 } 760 }
761 761
762 if (scfsi & 0x2) { 762 if (scfsi & 0x2) {
763 for (sfbi = 11; sfbi < 16; ++sfbi) 763 for (sfbi = 11; sfbi < 16; ++sfbi)
764 channel->scalefac[sfbi] = gr0ch->scalefac[sfbi]; 764 channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
765 } 765 }
766 else { 766 else {
767 for (sfbi = 11; sfbi < 16; ++sfbi) 767 for (sfbi = 11; sfbi < 16; ++sfbi)
768 channel->scalefac[sfbi] = mad_bit_read(ptr, slen2); 768 channel->scalefac[sfbi] = mad_bit_read(ptr, slen2);
769 } 769 }
770 770
771 if (scfsi & 0x1) { 771 if (scfsi & 0x1) {
772 for (sfbi = 16; sfbi < 21; ++sfbi) 772 for (sfbi = 16; sfbi < 21; ++sfbi)
773 channel->scalefac[sfbi] = gr0ch->scalefac[sfbi]; 773 channel->scalefac[sfbi] = gr0ch->scalefac[sfbi];
774 } 774 }
775 else { 775 else {
776 for (sfbi = 16; sfbi < 21; ++sfbi) 776 for (sfbi = 16; sfbi < 21; ++sfbi)
777 channel->scalefac[sfbi] = mad_bit_read(ptr, slen2); 777 channel->scalefac[sfbi] = mad_bit_read(ptr, slen2);
778 } 778 }
779 779
780 channel->scalefac[21] = 0; 780 channel->scalefac[21] = 0;
@@ -806,12 +806,12 @@ unsigned int III_scalefactors(struct mad_bitptr *ptr, struct channel *channel,
806 */ 806 */
807 807
808/* 808/*
809 * NAME: III_exponents() 809 * NAME: III_exponents()
810 * DESCRIPTION: calculate scalefactor exponents 810 * DESCRIPTION: calculate scalefactor exponents
811 */ 811 */
812static 812static
813void III_exponents(struct channel const *channel, 813void III_exponents(struct channel const *channel,
814 unsigned char const *sfbwidth, signed int exponents[39]) 814 unsigned char const *sfbwidth, signed int exponents[39])
815{ 815{
816 signed int gain; 816 signed int gain;
817 unsigned int scalefac_multiplier, sfbi; 817 unsigned int scalefac_multiplier, sfbi;
@@ -833,11 +833,11 @@ void III_exponents(struct channel const *channel,
833 /* long block subbands 0-1 */ 833 /* long block subbands 0-1 */
834 834
835 while (l < 36) { 835 while (l < 36) {
836 exponents[sfbi] = gain - 836 exponents[sfbi] = gain -
837 (signed int) ((channel->scalefac[sfbi] + (pretab[sfbi] & premask)) << 837 (signed int) ((channel->scalefac[sfbi] + (pretab[sfbi] & premask)) <<
838 scalefac_multiplier); 838 scalefac_multiplier);
839 839
840 l += sfbwidth[sfbi++]; 840 l += sfbwidth[sfbi++];
841 } 841 }
842 } 842 }
843 843
@@ -849,11 +849,11 @@ void III_exponents(struct channel const *channel,
849 849
850 while (l < 576) { 850 while (l < 576) {
851 exponents[sfbi + 0] = gain0 - 851 exponents[sfbi + 0] = gain0 -
852 (signed int) (channel->scalefac[sfbi + 0] << scalefac_multiplier); 852 (signed int) (channel->scalefac[sfbi + 0] << scalefac_multiplier);
853 exponents[sfbi + 1] = gain1 - 853 exponents[sfbi + 1] = gain1 -
854 (signed int) (channel->scalefac[sfbi + 1] << scalefac_multiplier); 854 (signed int) (channel->scalefac[sfbi + 1] << scalefac_multiplier);
855 exponents[sfbi + 2] = gain2 - 855 exponents[sfbi + 2] = gain2 -
856 (signed int) (channel->scalefac[sfbi + 2] << scalefac_multiplier); 856 (signed int) (channel->scalefac[sfbi + 2] << scalefac_multiplier);
857 unsigned int w = sfbwidth[sfbi]; 857 unsigned int w = sfbwidth[sfbi];
858 l += 3 * w; 858 l += 3 * w;
859 sfbi += 3; 859 sfbi += 3;
@@ -862,23 +862,23 @@ void III_exponents(struct channel const *channel,
862 else { /* channel->block_type != 2 */ 862 else { /* channel->block_type != 2 */
863 if (channel->flags & preflag) { 863 if (channel->flags & preflag) {
864 for (sfbi = 0; sfbi < 22; ++sfbi) { 864 for (sfbi = 0; sfbi < 22; ++sfbi) {
865 exponents[sfbi] = gain - 865 exponents[sfbi] = gain -
866 (signed int) ((channel->scalefac[sfbi] + pretab[sfbi]) << 866 (signed int) ((channel->scalefac[sfbi] + pretab[sfbi]) <<
867 scalefac_multiplier); 867 scalefac_multiplier);
868 } 868 }
869 } 869 }
870 else { 870 else {
871 for (sfbi = 0; sfbi < 22; ++sfbi) { 871 for (sfbi = 0; sfbi < 22; ++sfbi) {
872 exponents[sfbi] = gain - 872 exponents[sfbi] = gain -
873 (signed int) (channel->scalefac[sfbi] << scalefac_multiplier); 873 (signed int) (channel->scalefac[sfbi] << scalefac_multiplier);
874 } 874 }
875 } 875 }
876 } 876 }
877} 877}
878 878
879/* 879/*
880 * NAME: III_requantize() 880 * NAME: III_requantize()
881 * DESCRIPTION: requantize one (positive) value 881 * DESCRIPTION: requantize one (positive) value
882 */ 882 */
883static 883static
884mad_fixed_t III_requantize(unsigned int value, signed int exp) 884mad_fixed_t III_requantize(unsigned int value, signed int exp)
@@ -910,7 +910,7 @@ mad_fixed_t III_requantize(unsigned int value, signed int exp)
910 /* overflow */ 910 /* overflow */
911# if defined(DEBUG) 911# if defined(DEBUG)
912 fprintf(stderr, "requantize overflow (%f * 2^%d)\n", 912 fprintf(stderr, "requantize overflow (%f * 2^%d)\n",
913 mad_f_todouble(requantized), exp); 913 mad_f_todouble(requantized), exp);
914# endif 914# endif
915 requantized = MAD_F_MAX; 915 requantized = MAD_F_MAX;
916 } 916 }
@@ -932,21 +932,21 @@ mad_fixed_t III_requantize(unsigned int value, signed int exp)
932 res; \ 932 res; \
933 }) 933 })
934#else 934#else
935# define MASK(cache, sz, bits) \ 935# define MASK(cache, sz, bits) \
936 (((cache) >> ((sz) - (bits))) & ((1 << (bits)) - 1)) 936 (((cache) >> ((sz) - (bits))) & ((1 << (bits)) - 1))
937#endif 937#endif
938# define MASK1BIT(cache, sz) \ 938# define MASK1BIT(cache, sz) \
939 ((cache) & (1 << ((sz) - 1))) 939 ((cache) & (1 << ((sz) - 1)))
940 940
941/* 941/*
942 * NAME: III_huffdecode() 942 * NAME: III_huffdecode()
943 * DESCRIPTION: decode Huffman code words of one channel of one granule 943 * DESCRIPTION: decode Huffman code words of one channel of one granule
944 */ 944 */
945static 945static
946enum mad_error III_huffdecode(struct mad_bitptr *ptr, mad_fixed_t xrarr[576], 946enum mad_error III_huffdecode(struct mad_bitptr *ptr, mad_fixed_t xrarr[576],
947 struct channel *channel, 947 struct channel *channel,
948 unsigned char const *sfbwidth, 948 unsigned char const *sfbwidth,
949 unsigned int part2_length) 949 unsigned int part2_length)
950{ 950{
951 unsigned int bits; 951 unsigned int bits;
952 signed int exponents[39], exp; 952 signed int exponents[39], exp;
@@ -999,23 +999,23 @@ enum mad_error III_huffdecode(struct mad_bitptr *ptr, mad_fixed_t xrarr[576],
999 else 999 else
1000 if(region == 0) 1000 if(region == 0)
1001 rcount = channel->region1_count + 1; 1001 rcount = channel->region1_count + 1;
1002 else 1002 else
1003 rcount = 0; /* all remaining */ 1003 rcount = 0; /* all remaining */
1004 1004
1005 entry = &mad_huff_pair_table[channel->table_select[++region]]; 1005 entry = &mad_huff_pair_table[channel->table_select[++region]];
1006 table = entry->table; 1006 table = entry->table;
1007 linbits = entry->linbits; 1007 linbits = entry->linbits;
1008 startbits = entry->startbits; 1008 startbits = entry->startbits;
1009 1009
1010 if(table == 0) 1010 if(table == 0)
1011 return MAD_ERROR_BADHUFFTABLE; 1011 return MAD_ERROR_BADHUFFTABLE;
1012 } 1012 }
1013 1013
1014 if(exp != *expptr) 1014 if(exp != *expptr)
1015 { 1015 {
1016 exp = *expptr; 1016 exp = *expptr;
1017 /* clear cache */ 1017 /* clear cache */
1018 memset(reqcache, 0, sizeof(reqcache)); 1018 memset(reqcache, 0, sizeof(reqcache));
1019 } 1019 }
1020 1020
1021 ++expptr; 1021 ++expptr;
@@ -1052,10 +1052,10 @@ enum mad_error III_huffdecode(struct mad_bitptr *ptr, mad_fixed_t xrarr[576],
1052 1052
1053 cachesz -= pair->value.hlen; 1053 cachesz -= pair->value.hlen;
1054 1054
1055 /* x (0..14) */ 1055 /* x (0..14) */
1056 value = pair->value.x; 1056 value = pair->value.x;
1057 if(value == 0) 1057 if(value == 0)
1058 xr[0] = 0; 1058 xr[0] = 0;
1059 else 1059 else
1060 { 1060 {
1061 if(value == 15) 1061 if(value == 15)
@@ -1071,24 +1071,24 @@ enum mad_error III_huffdecode(struct mad_bitptr *ptr, mad_fixed_t xrarr[576],
1071 cachesz += bits; 1071 cachesz += bits;
1072 } 1072 }
1073 1073
1074 requantized = III_requantize(15+MASK(bitcache, cachesz, linbits), exp); 1074 requantized = III_requantize(15+MASK(bitcache, cachesz, linbits), exp);
1075 cachesz -= linbits; 1075 cachesz -= linbits;
1076 } 1076 }
1077 else 1077 else
1078 { 1078 {
1079 if(reqcache[value]) 1079 if(reqcache[value])
1080 requantized = reqcache[value]; 1080 requantized = reqcache[value];
1081 else 1081 else
1082 requantized = reqcache[value] = III_requantize(value, exp); 1082 requantized = reqcache[value] = III_requantize(value, exp);
1083 } 1083 }
1084 1084
1085 xr[0] = MASK1BIT(bitcache, cachesz--) ? -requantized : requantized; 1085 xr[0] = MASK1BIT(bitcache, cachesz--) ? -requantized : requantized;
1086 } 1086 }
1087 1087
1088 /* y (0..14) */ 1088 /* y (0..14) */
1089 value = pair->value.y; 1089 value = pair->value.y;
1090 if(value == 0) 1090 if(value == 0)
1091 xr[1] = 0; 1091 xr[1] = 0;
1092 else 1092 else
1093 { 1093 {
1094 if(value == 15) 1094 if(value == 15)
@@ -1109,12 +1109,12 @@ enum mad_error III_huffdecode(struct mad_bitptr *ptr, mad_fixed_t xrarr[576],
1109 } 1109 }
1110 else 1110 else
1111 { 1111 {
1112 if(reqcache[value]) 1112 if(reqcache[value])
1113 requantized = reqcache[value]; 1113 requantized = reqcache[value];
1114 else 1114 else
1115 requantized = reqcache[value] = III_requantize(value, exp); 1115 requantized = reqcache[value] = III_requantize(value, exp);
1116 } 1116 }
1117 xr[1] = MASK1BIT(bitcache, cachesz--) ? -requantized : requantized; 1117 xr[1] = MASK1BIT(bitcache, cachesz--) ? -requantized : requantized;
1118 } 1118 }
1119 } 1119 }
1120 } 1120 }
@@ -1162,32 +1162,32 @@ enum mad_error III_huffdecode(struct mad_bitptr *ptr, mad_fixed_t xrarr[576],
1162 1162
1163 cachesz -= pair->value.hlen; 1163 cachesz -= pair->value.hlen;
1164 1164
1165 /* x (0..1) */ 1165 /* x (0..1) */
1166 value = pair->value.x; 1166 value = pair->value.x;
1167 if(value == 0) 1167 if(value == 0)
1168 xr[0] = 0; 1168 xr[0] = 0;
1169 else 1169 else
1170 { 1170 {
1171 if(reqcache[value]) 1171 if(reqcache[value])
1172 requantized = reqcache[value]; 1172 requantized = reqcache[value];
1173 else 1173 else
1174 requantized = reqcache[value] = III_requantize(value, exp); 1174 requantized = reqcache[value] = III_requantize(value, exp);
1175 1175
1176 xr[0] = MASK1BIT(bitcache, cachesz--) ? -requantized : requantized; 1176 xr[0] = MASK1BIT(bitcache, cachesz--) ? -requantized : requantized;
1177 } 1177 }
1178 1178
1179 /* y (0..1) */ 1179 /* y (0..1) */
1180 value = pair->value.y; 1180 value = pair->value.y;
1181 if(value == 0) 1181 if(value == 0)
1182 xr[1] = 0; 1182 xr[1] = 0;
1183 else 1183 else
1184 { 1184 {
1185 if(reqcache[value]) 1185 if(reqcache[value])
1186 requantized = reqcache[value]; 1186 requantized = reqcache[value];
1187 else 1187 else
1188 requantized = reqcache[value] = III_requantize(value, exp); 1188 requantized = reqcache[value] = III_requantize(value, exp);
1189 1189
1190 xr[1] = MASK1BIT(bitcache, cachesz--) ? -requantized : requantized; 1190 xr[1] = MASK1BIT(bitcache, cachesz--) ? -requantized : requantized;
1191 } 1191 }
1192 } 1192 }
1193 } 1193 }
@@ -1218,9 +1218,9 @@ enum mad_error III_huffdecode(struct mad_bitptr *ptr, mad_fixed_t xrarr[576],
1218 if(cachesz < 0) 1218 if(cachesz < 0)
1219 return MAD_ERROR_BADHUFFDATA; /* cache underrun */ 1219 return MAD_ERROR_BADHUFFDATA; /* cache underrun */
1220 1220
1221 bits = MAXLSHIFT - cachesz; 1221 bits = MAXLSHIFT - cachesz;
1222 bitcache = (bitcache << bits) | mad_bit_read(&peek, bits); 1222 bitcache = (bitcache << bits) | mad_bit_read(&peek, bits);
1223 cachesz += bits; 1223 cachesz += bits;
1224 bits_left -= bits; 1224 bits_left -= bits;
1225 } 1225 }
1226 1226
@@ -1228,53 +1228,53 @@ enum mad_error III_huffdecode(struct mad_bitptr *ptr, mad_fixed_t xrarr[576],
1228 1228
1229 /* quad tables guaranteed to have at most one extra lookup */ 1229 /* quad tables guaranteed to have at most one extra lookup */
1230 if (!quad->final) { 1230 if (!quad->final) {
1231 cachesz -= 4; 1231 cachesz -= 4;
1232 1232
1233 quad = &table[quad->ptr.offset + 1233 quad = &table[quad->ptr.offset +
1234 MASK(bitcache, cachesz, quad->ptr.bits)]; 1234 MASK(bitcache, cachesz, quad->ptr.bits)];
1235 } 1235 }
1236 1236
1237 cachesz -= quad->value.hlen; 1237 cachesz -= quad->value.hlen;
1238 1238
1239 if (xr == sfbound) { 1239 if (xr == sfbound) {
1240 sfbound += *sfbwidth++; 1240 sfbound += *sfbwidth++;
1241 1241
1242 if (exp != *expptr) { 1242 if (exp != *expptr) {
1243 exp = *expptr; 1243 exp = *expptr;
1244 requantized = III_requantize(1, exp); 1244 requantized = III_requantize(1, exp);
1245 } 1245 }
1246 1246
1247 ++expptr; 1247 ++expptr;
1248 } 1248 }
1249 1249
1250 /* v (0..1) */ 1250 /* v (0..1) */
1251 xr[0] = quad->value.v ? 1251 xr[0] = quad->value.v ?
1252 (MASK1BIT(bitcache, cachesz--) ? -requantized : requantized) : 0; 1252 (MASK1BIT(bitcache, cachesz--) ? -requantized : requantized) : 0;
1253 1253
1254 /* w (0..1) */ 1254 /* w (0..1) */
1255 xr[1] = quad->value.w ? 1255 xr[1] = quad->value.w ?
1256 (MASK1BIT(bitcache, cachesz--) ? -requantized : requantized) : 0; 1256 (MASK1BIT(bitcache, cachesz--) ? -requantized : requantized) : 0;
1257 1257
1258 xr += 2; 1258 xr += 2;
1259 1259
1260 if (xr == sfbound) { 1260 if (xr == sfbound) {
1261 sfbound += *sfbwidth++; 1261 sfbound += *sfbwidth++;
1262 1262
1263 if (exp != *expptr) { 1263 if (exp != *expptr) {
1264 exp = *expptr; 1264 exp = *expptr;
1265 requantized = III_requantize(1, exp); 1265 requantized = III_requantize(1, exp);
1266 } 1266 }
1267 1267
1268 ++expptr; 1268 ++expptr;
1269 } 1269 }
1270 1270
1271 /* x (0..1) */ 1271 /* x (0..1) */
1272 xr[0] = quad->value.x ? 1272 xr[0] = quad->value.x ?
1273 (MASK1BIT(bitcache, cachesz--) ? -requantized : requantized) : 0; 1273 (MASK1BIT(bitcache, cachesz--) ? -requantized : requantized) : 0;
1274 1274
1275 /* y (0..1) */ 1275 /* y (0..1) */
1276 xr[1] = quad->value.y ? 1276 xr[1] = quad->value.y ?
1277 (MASK1BIT(bitcache, cachesz--) ? -requantized : requantized) : 0; 1277 (MASK1BIT(bitcache, cachesz--) ? -requantized : requantized) : 0;
1278 1278
1279 xr += 2; 1279 xr += 2;
1280 } 1280 }
@@ -1282,7 +1282,7 @@ enum mad_error III_huffdecode(struct mad_bitptr *ptr, mad_fixed_t xrarr[576],
1282 if(bits_left + cachesz < 0) 1282 if(bits_left + cachesz < 0)
1283 { 1283 {
1284 /* technically the bitstream is misformatted, but apparently 1284 /* technically the bitstream is misformatted, but apparently
1285 some encoders are just a bit sloppy with stuffing bits */ 1285 some encoders are just a bit sloppy with stuffing bits */
1286 xr -= 4; 1286 xr -= 4;
1287 } 1287 }
1288 } 1288 }
@@ -1297,12 +1297,12 @@ enum mad_error III_huffdecode(struct mad_bitptr *ptr, mad_fixed_t xrarr[576],
1297# undef MASK1BIT 1297# undef MASK1BIT
1298 1298
1299/* 1299/*
1300 * NAME: III_reorder() 1300 * NAME: III_reorder()
1301 * DESCRIPTION: reorder frequency lines of a short block into subband order 1301 * DESCRIPTION: reorder frequency lines of a short block into subband order
1302 */ 1302 */
1303static 1303static
1304void III_reorder(mad_fixed_t xr[576], struct channel const *channel, 1304void III_reorder(mad_fixed_t xr[576], struct channel const *channel,
1305 unsigned char const sfbwidth[39]) 1305 unsigned char const sfbwidth[39])
1306{ 1306{
1307 mad_fixed_t tmp[32][3][6]; 1307 mad_fixed_t tmp[32][3][6];
1308 unsigned int sb, l, f, w, sbw[3], sw[3]; 1308 unsigned int sb, l, f, w, sbw[3], sw[3];
@@ -1345,14 +1345,14 @@ void III_reorder(mad_fixed_t xr[576], struct channel const *channel,
1345} 1345}
1346 1346
1347/* 1347/*
1348 * NAME: III_stereo() 1348 * NAME: III_stereo()
1349 * DESCRIPTION: perform joint stereo processing on a granule 1349 * DESCRIPTION: perform joint stereo processing on a granule
1350 */ 1350 */
1351static 1351static
1352enum mad_error III_stereo(mad_fixed_t xr[2][576], 1352enum mad_error III_stereo(mad_fixed_t xr[2][576],
1353 struct granule const *granule, 1353 struct granule const *granule,
1354 struct mad_header *header, 1354 struct mad_header *header,
1355 unsigned char const *sfbwidth) 1355 unsigned char const *sfbwidth)
1356{ 1356{
1357 short modes[39]; 1357 short modes[39];
1358 unsigned int sfbi, l, n, i; 1358 unsigned int sfbi, l, n, i;
@@ -1385,55 +1385,55 @@ enum mad_error III_stereo(mad_fixed_t xr[2][576],
1385 sfbi = l = 0; 1385 sfbi = l = 0;
1386 1386
1387 if (right_ch->flags & mixed_block_flag) { 1387 if (right_ch->flags & mixed_block_flag) {
1388 while (l < 36) { 1388 while (l < 36) {
1389 n = sfbwidth[sfbi++]; 1389 n = sfbwidth[sfbi++];
1390 1390
1391 for (i = 0; i < n; ++i) { 1391 for (i = 0; i < n; ++i) {
1392 if (right_xr[i]) { 1392 if (right_xr[i]) {
1393 lower = sfbi; 1393 lower = sfbi;
1394 break; 1394 break;
1395 } 1395 }
1396 } 1396 }
1397 1397
1398 right_xr += n; 1398 right_xr += n;
1399 l += n; 1399 l += n;
1400 } 1400 }
1401 1401
1402 start = sfbi; 1402 start = sfbi;
1403 } 1403 }
1404 1404
1405 w = 0; 1405 w = 0;
1406 while (l < 576) { 1406 while (l < 576) {
1407 n = sfbwidth[sfbi++]; 1407 n = sfbwidth[sfbi++];
1408 1408
1409 for (i = 0; i < n; ++i) { 1409 for (i = 0; i < n; ++i) {
1410 if (right_xr[i]) { 1410 if (right_xr[i]) {
1411 max = bound[w] = sfbi; 1411 max = bound[w] = sfbi;
1412 break; 1412 break;
1413 } 1413 }
1414 } 1414 }
1415 1415
1416 right_xr += n; 1416 right_xr += n;
1417 l += n; 1417 l += n;
1418 w = (w + 1) % 3; 1418 w = (w + 1) % 3;
1419 } 1419 }
1420 1420
1421 if (max) 1421 if (max)
1422 lower = start; 1422 lower = start;
1423 1423
1424 /* long blocks */ 1424 /* long blocks */
1425 1425
1426 for (i = 0; i < lower; ++i) 1426 for (i = 0; i < lower; ++i)
1427 modes[i] = header->mode_extension & ~I_STEREO; 1427 modes[i] = header->mode_extension & ~I_STEREO;
1428 1428
1429 /* short blocks */ 1429 /* short blocks */
1430 1430
1431 w = 0; 1431 w = 0;
1432 for (i = start; i < max; ++i) { 1432 for (i = start; i < max; ++i) {
1433 if (i < bound[w]) 1433 if (i < bound[w])
1434 modes[i] = header->mode_extension & ~I_STEREO; 1434 modes[i] = header->mode_extension & ~I_STEREO;
1435 1435
1436 w = (w + 1) % 3; 1436 w = (w + 1) % 3;
1437 } 1437 }
1438 } 1438 }
1439 else { /* right_ch->block_type != 2 */ 1439 else { /* right_ch->block_type != 2 */
@@ -1441,20 +1441,20 @@ enum mad_error III_stereo(mad_fixed_t xr[2][576],
1441 1441
1442 bound = 0; 1442 bound = 0;
1443 for (sfbi = l = 0; l < 576; l += n) { 1443 for (sfbi = l = 0; l < 576; l += n) {
1444 n = sfbwidth[sfbi++]; 1444 n = sfbwidth[sfbi++];
1445 1445
1446 for (i = 0; i < n; ++i) { 1446 for (i = 0; i < n; ++i) {
1447 if (right_xr[i]) { 1447 if (right_xr[i]) {
1448 bound = sfbi; 1448 bound = sfbi;
1449 break; 1449 break;
1450 } 1450 }
1451 } 1451 }
1452 1452
1453 right_xr += n; 1453 right_xr += n;
1454 } 1454 }
1455 1455
1456 for (i = 0; i < bound; ++i) 1456 for (i = 0; i < bound; ++i)
1457 modes[i] = header->mode_extension & ~I_STEREO; 1457 modes[i] = header->mode_extension & ~I_STEREO;
1458 } 1458 }
1459 1459
1460 /* now do the actual processing */ 1460 /* now do the actual processing */
@@ -1467,62 +1467,62 @@ enum mad_error III_stereo(mad_fixed_t xr[2][576],
1467 lsf_scale = is_lsf_table[right_ch->scalefac_compress & 0x1]; 1467 lsf_scale = is_lsf_table[right_ch->scalefac_compress & 0x1];
1468 1468
1469 for (sfbi = l = 0; l < 576; ++sfbi, l += n) { 1469 for (sfbi = l = 0; l < 576; ++sfbi, l += n) {
1470 n = sfbwidth[sfbi]; 1470 n = sfbwidth[sfbi];
1471 1471
1472 if (!(modes[sfbi] & I_STEREO)) 1472 if (!(modes[sfbi] & I_STEREO))
1473 continue; 1473 continue;
1474 1474
1475 if (illegal_pos[sfbi]) { 1475 if (illegal_pos[sfbi]) {
1476 modes[sfbi] &= ~I_STEREO; 1476 modes[sfbi] &= ~I_STEREO;
1477 continue; 1477 continue;
1478 } 1478 }
1479 1479
1480 is_pos = right_ch->scalefac[sfbi]; 1480 is_pos = right_ch->scalefac[sfbi];
1481 1481
1482 for (i = 0; i < n; ++i) { 1482 for (i = 0; i < n; ++i) {
1483 register mad_fixed_t left; 1483 register mad_fixed_t left;
1484 1484
1485 left = xr[0][l + i]; 1485 left = xr[0][l + i];
1486 1486
1487 if (is_pos == 0) 1487 if (is_pos == 0)
1488 xr[1][l + i] = left; 1488 xr[1][l + i] = left;
1489 else { 1489 else {
1490 register mad_fixed_t opposite; 1490 register mad_fixed_t opposite;
1491 1491
1492 opposite = mad_f_mul(left, lsf_scale[(is_pos - 1) / 2]); 1492 opposite = mad_f_mul(left, lsf_scale[(is_pos - 1) / 2]);
1493 1493
1494 if (is_pos & 1) { 1494 if (is_pos & 1) {
1495 xr[0][l + i] = opposite; 1495 xr[0][l + i] = opposite;
1496 xr[1][l + i] = left; 1496 xr[1][l + i] = left;
1497 } 1497 }
1498 else 1498 else
1499 xr[1][l + i] = opposite; 1499 xr[1][l + i] = opposite;
1500 } 1500 }
1501 } 1501 }
1502 } 1502 }
1503 } 1503 }
1504 else { /* !(header->flags & MAD_FLAG_LSF_EXT) */ 1504 else { /* !(header->flags & MAD_FLAG_LSF_EXT) */
1505 for (sfbi = l = 0; l < 576; ++sfbi, l += n) { 1505 for (sfbi = l = 0; l < 576; ++sfbi, l += n) {
1506 n = sfbwidth[sfbi]; 1506 n = sfbwidth[sfbi];
1507 1507
1508 if (!(modes[sfbi] & I_STEREO)) 1508 if (!(modes[sfbi] & I_STEREO))
1509 continue; 1509 continue;
1510 1510
1511 is_pos = right_ch->scalefac[sfbi]; 1511 is_pos = right_ch->scalefac[sfbi];
1512 1512
1513 if (is_pos >= 7) { /* illegal intensity position */ 1513 if (is_pos >= 7) { /* illegal intensity position */
1514 modes[sfbi] &= ~I_STEREO; 1514 modes[sfbi] &= ~I_STEREO;
1515 continue; 1515 continue;
1516 } 1516 }
1517 1517
1518 for (i = 0; i < n; ++i) { 1518 for (i = 0; i < n; ++i) {
1519 register mad_fixed_t left; 1519 register mad_fixed_t left;
1520 1520
1521 left = xr[0][l + i]; 1521 left = xr[0][l + i];
1522 1522
1523 xr[0][l + i] = mad_f_mul(left, is_table[ is_pos]); 1523 xr[0][l + i] = mad_f_mul(left, is_table[ is_pos]);
1524 xr[1][l + i] = mad_f_mul(left, is_table[6 - is_pos]); 1524 xr[1][l + i] = mad_f_mul(left, is_table[6 - is_pos]);
1525 } 1525 }
1526 } 1526 }
1527 } 1527 }
1528 } 1528 }
@@ -1540,16 +1540,16 @@ enum mad_error III_stereo(mad_fixed_t xr[2][576],
1540 n = sfbwidth[sfbi]; 1540 n = sfbwidth[sfbi];
1541 1541
1542 if (modes[sfbi] != MS_STEREO) 1542 if (modes[sfbi] != MS_STEREO)
1543 continue; 1543 continue;
1544 1544
1545 for (i = 0; i < n; ++i) { 1545 for (i = 0; i < n; ++i) {
1546 register mad_fixed_t m, s; 1546 register mad_fixed_t m, s;
1547 1547
1548 m = xr[0][l + i]; 1548 m = xr[0][l + i];
1549 s = xr[1][l + i]; 1549 s = xr[1][l + i];
1550 1550
1551 xr[0][l + i] = mad_f_mul(m + s, invsqrt2); /* l = (m + s) / sqrt(2) */ 1551 xr[0][l + i] = mad_f_mul(m + s, invsqrt2); /* l = (m + s) / sqrt(2) */
1552 xr[1][l + i] = mad_f_mul(m - s, invsqrt2); /* r = (m - s) / sqrt(2) */ 1552 xr[1][l + i] = mad_f_mul(m - s, invsqrt2); /* r = (m - s) / sqrt(2) */
1553 } 1553 }
1554 } 1554 }
1555 } 1555 }
@@ -1561,8 +1561,8 @@ enum mad_error III_stereo(mad_fixed_t xr[2][576],
1561void III_aliasreduce(mad_fixed_t xr[576], int lines); 1561void III_aliasreduce(mad_fixed_t xr[576], int lines);
1562#else 1562#else
1563/* 1563/*
1564 * NAME: III_aliasreduce() 1564 * NAME: III_aliasreduce()
1565 * DESCRIPTION: perform frequency line alias reduction 1565 * DESCRIPTION: perform frequency line alias reduction
1566 */ 1566 */
1567static 1567static
1568void III_aliasreduce(mad_fixed_t xr[576], int lines) 1568void III_aliasreduce(mad_fixed_t xr[576], int lines)
@@ -1598,15 +1598,15 @@ void III_aliasreduce(mad_fixed_t xr[576], int lines)
1598 xr[-1 - i] = a; 1598 xr[-1 - i] = a;
1599 xr[ i] = b; 1599 xr[ i] = b;
1600# else 1600# else
1601 MAD_F_ML0(hi, lo, a, cs[i]); 1601 MAD_F_ML0(hi, lo, a, cs[i]);
1602 MAD_F_MLA(hi, lo, -b, ca[i]); 1602 MAD_F_MLA(hi, lo, -b, ca[i]);
1603 1603
1604 xr[-1 - i] = MAD_F_MLZ(hi, lo); 1604 xr[-1 - i] = MAD_F_MLZ(hi, lo);
1605 1605
1606 MAD_F_ML0(hi, lo, b, cs[i]); 1606 MAD_F_ML0(hi, lo, b, cs[i]);
1607 MAD_F_MLA(hi, lo, a, ca[i]); 1607 MAD_F_MLA(hi, lo, a, ca[i]);
1608 1608
1609 xr[ i] = MAD_F_MLZ(hi, lo); 1609 xr[ i] = MAD_F_MLZ(hi, lo);
1610# endif 1610# endif
1611# if defined(ASO_ZEROCHECK) 1611# if defined(ASO_ZEROCHECK)
1612 } 1612 }
@@ -1774,8 +1774,8 @@ void dctIV(mad_fixed_t const y[18], mad_fixed_t X[18])
1774} 1774}
1775 1775
1776/* 1776/*
1777 * NAME: imdct36 1777 * NAME: imdct36
1778 * DESCRIPTION: perform X[18]->x[36] IMDCT using Szu-Wei Lee's fast algorithm 1778 * DESCRIPTION: perform X[18]->x[36] IMDCT using Szu-Wei Lee's fast algorithm
1779 */ 1779 */
1780static inline 1780static inline
1781void imdct36(mad_fixed_t const x[18], mad_fixed_t y[36]) 1781void imdct36(mad_fixed_t const x[18], mad_fixed_t y[36])
@@ -1807,8 +1807,8 @@ void imdct36(mad_fixed_t const x[18], mad_fixed_t y[36])
1807} 1807}
1808# else 1808# else
1809/* 1809/*
1810 * NAME: imdct36 1810 * NAME: imdct36
1811 * DESCRIPTION: perform X[18]->x[36] IMDCT 1811 * DESCRIPTION: perform X[18]->x[36] IMDCT
1812 */ 1812 */
1813 1813
1814# if defined(CPU_COLDFIRE) 1814# if defined(CPU_COLDFIRE)
@@ -2737,12 +2737,12 @@ void imdct36(mad_fixed_t const X[18], mad_fixed_t x[36])
2737# endif 2737# endif
2738 2738
2739/* 2739/*
2740 * NAME: III_imdct_l() 2740 * NAME: III_imdct_l()
2741 * DESCRIPTION: perform IMDCT and windowing for long blocks 2741 * DESCRIPTION: perform IMDCT and windowing for long blocks
2742 */ 2742 */
2743static 2743static
2744void III_imdct_l(mad_fixed_t const X[18], mad_fixed_t z[36], 2744void III_imdct_l(mad_fixed_t const X[18], mad_fixed_t z[36],
2745 unsigned int block_type) 2745 unsigned int block_type)
2746{ 2746{
2747 unsigned int i; 2747 unsigned int i;
2748 2748
@@ -2762,10 +2762,10 @@ void III_imdct_l(mad_fixed_t const X[18], mad_fixed_t z[36],
2762 tmp2 = window_l[1]; 2762 tmp2 = window_l[1];
2763 2763
2764 for (i = 0; i < 34; i += 2) { 2764 for (i = 0; i < 34; i += 2) {
2765 z[i + 0] = mad_f_mul(z[i + 0], tmp1); 2765 z[i + 0] = mad_f_mul(z[i + 0], tmp1);
2766 tmp1 = window_l[i + 2]; 2766 tmp1 = window_l[i + 2];
2767 z[i + 1] = mad_f_mul(z[i + 1], tmp2); 2767 z[i + 1] = mad_f_mul(z[i + 1], tmp2);
2768 tmp2 = window_l[i + 3]; 2768 tmp2 = window_l[i + 3];
2769 } 2769 }
2770 2770
2771 z[34] = mad_f_mul(z[34], tmp1); 2771 z[34] = mad_f_mul(z[34], tmp1);
@@ -2779,9 +2779,9 @@ void III_imdct_l(mad_fixed_t const X[18], mad_fixed_t z[36],
2779 tmp2 = window_l[0]; 2779 tmp2 = window_l[0];
2780 2780
2781 for (i = 0; i < 35; ++i) { 2781 for (i = 0; i < 35; ++i) {
2782 z[i] = mad_f_mul(tmp1, tmp2); 2782 z[i] = mad_f_mul(tmp1, tmp2);
2783 tmp1 = z[i + 1]; 2783 tmp1 = z[i + 1];
2784 tmp2 = window_l[i + 1]; 2784 tmp2 = window_l[i + 1];
2785 } 2785 }
2786 2786
2787 z[35] = mad_f_mul(tmp1, tmp2); 2787 z[35] = mad_f_mul(tmp1, tmp2);
@@ -2824,8 +2824,8 @@ void III_imdct_l(mad_fixed_t const X[18], mad_fixed_t z[36],
2824# endif /* ASO_IMDCT */ 2824# endif /* ASO_IMDCT */
2825 2825
2826/* 2826/*
2827 * NAME: III_imdct_s() 2827 * NAME: III_imdct_s()
2828 * DESCRIPTION: perform IMDCT and windowing for short blocks 2828 * DESCRIPTION: perform IMDCT and windowing for short blocks
2829 */ 2829 */
2830 2830
2831# if defined(CPU_COLDFIRE) 2831# if defined(CPU_COLDFIRE)
@@ -2911,16 +2911,16 @@ void III_imdct_s(mad_fixed_t const X[18], mad_fixed_t z[36])
2911 2911
2912#ifdef CPU_ARM 2912#ifdef CPU_ARM
2913void III_overlap(mad_fixed_t const output[36], mad_fixed_t overlap[18], 2913void III_overlap(mad_fixed_t const output[36], mad_fixed_t overlap[18],
2914 mad_fixed_t sample[18][32], unsigned int sb); 2914 mad_fixed_t sample[18][32], unsigned int sb);
2915#else 2915#else
2916 2916
2917/* 2917/*
2918 * NAME: III_overlap() 2918 * NAME: III_overlap()
2919 * DESCRIPTION: perform overlap-add of windowed IMDCT outputs 2919 * DESCRIPTION: perform overlap-add of windowed IMDCT outputs
2920 */ 2920 */
2921static 2921static
2922void III_overlap(mad_fixed_t const output[36], mad_fixed_t overlap[18], 2922void III_overlap(mad_fixed_t const output[36], mad_fixed_t overlap[18],
2923 mad_fixed_t sample[18][32], unsigned int sb) 2923 mad_fixed_t sample[18][32], unsigned int sb)
2924{ 2924{
2925 unsigned int i; 2925 unsigned int i;
2926 2926
@@ -2964,12 +2964,12 @@ void III_overlap(mad_fixed_t const output[36], mad_fixed_t overlap[18],
2964#endif 2964#endif
2965 2965
2966/* 2966/*
2967 * NAME: III_overlap_z() 2967 * NAME: III_overlap_z()
2968 * DESCRIPTION: perform "overlap-add" of zero IMDCT outputs 2968 * DESCRIPTION: perform "overlap-add" of zero IMDCT outputs
2969 */ 2969 */
2970static inline 2970static inline
2971void III_overlap_z(mad_fixed_t overlap[18], 2971void III_overlap_z(mad_fixed_t overlap[18],
2972 mad_fixed_t sample[18][32], unsigned int sb) 2972 mad_fixed_t sample[18][32], unsigned int sb)
2973{ 2973{
2974 unsigned int i; 2974 unsigned int i;
2975 2975
@@ -3004,8 +3004,8 @@ void III_overlap_z(mad_fixed_t overlap[18],
3004} 3004}
3005 3005
3006/* 3006/*
3007 * NAME: III_freqinver() 3007 * NAME: III_freqinver()
3008 * DESCRIPTION: perform subband frequency inversion for odd sample lines 3008 * DESCRIPTION: perform subband frequency inversion for odd sample lines
3009 */ 3009 */
3010static 3010static
3011void III_freqinver(mad_fixed_t sample[18][32], unsigned int sb) 3011void III_freqinver(mad_fixed_t sample[18][32], unsigned int sb)
@@ -3038,12 +3038,12 @@ void III_freqinver(mad_fixed_t sample[18][32], unsigned int sb)
3038} 3038}
3039 3039
3040/* 3040/*
3041 * NAME: III_decode() 3041 * NAME: III_decode()
3042 * DESCRIPTION: decode frame main_data 3042 * DESCRIPTION: decode frame main_data
3043 */ 3043 */
3044static 3044static
3045enum mad_error III_decode(struct mad_bitptr *ptr, struct mad_frame *frame, 3045enum mad_error III_decode(struct mad_bitptr *ptr, struct mad_frame *frame,
3046 struct sideinfo *si, unsigned int nch) 3046 struct sideinfo *si, unsigned int nch)
3047{ 3047{
3048 struct mad_header *header = &frame->header; 3048 struct mad_header *header = &frame->header;
3049 unsigned int sfreqi, ngr, gr; 3049 unsigned int sfreqi, ngr, gr;
@@ -3081,23 +3081,23 @@ enum mad_error III_decode(struct mad_bitptr *ptr, struct mad_frame *frame,
3081 3081
3082 sfbwidth[ch] = sfbwidth_table[sfreqi].l; 3082 sfbwidth[ch] = sfbwidth_table[sfreqi].l;
3083 if (channel->block_type == 2) { 3083 if (channel->block_type == 2) {
3084 sfbwidth[ch] = (channel->flags & mixed_block_flag) ? 3084 sfbwidth[ch] = (channel->flags & mixed_block_flag) ?
3085 sfbwidth_table[sfreqi].m : sfbwidth_table[sfreqi].s; 3085 sfbwidth_table[sfreqi].m : sfbwidth_table[sfreqi].s;
3086 } 3086 }
3087 3087
3088 if (header->flags & MAD_FLAG_LSF_EXT) { 3088 if (header->flags & MAD_FLAG_LSF_EXT) {
3089 part2_length = III_scalefactors_lsf(ptr, channel, 3089 part2_length = III_scalefactors_lsf(ptr, channel,
3090 ch == 0 ? 0 : &si->gr[1].ch[1], 3090 ch == 0 ? 0 : &si->gr[1].ch[1],
3091 header->mode_extension); 3091 header->mode_extension);
3092 } 3092 }
3093 else { 3093 else {
3094 part2_length = III_scalefactors(ptr, channel, &si->gr[0].ch[ch], 3094 part2_length = III_scalefactors(ptr, channel, &si->gr[0].ch[ch],
3095 gr == 0 ? 0 : si->scfsi[ch]); 3095 gr == 0 ? 0 : si->scfsi[ch]);
3096 } 3096 }
3097 3097
3098 error = III_huffdecode(ptr, xr[ch], channel, sfbwidth[ch], part2_length); 3098 error = III_huffdecode(ptr, xr[ch], channel, sfbwidth[ch], part2_length);
3099 if (error) 3099 if (error)
3100 return error; 3100 return error;
3101 } 3101 }
3102 3102
3103 /* joint stereo processing */ 3103 /* joint stereo processing */
@@ -3105,7 +3105,7 @@ enum mad_error III_decode(struct mad_bitptr *ptr, struct mad_frame *frame,
3105 if (header->mode == MAD_MODE_JOINT_STEREO && header->mode_extension) { 3105 if (header->mode == MAD_MODE_JOINT_STEREO && header->mode_extension) {
3106 error = III_stereo(xr, granule, header, sfbwidth[0]); 3106 error = III_stereo(xr, granule, header, sfbwidth[0]);
3107 if (error) 3107 if (error)
3108 return error; 3108 return error;
3109 } 3109 }
3110 3110
3111 /* reordering, alias reduction, IMDCT, overlap-add, frequency inversion */ 3111 /* reordering, alias reduction, IMDCT, overlap-add, frequency inversion */
@@ -3117,46 +3117,46 @@ enum mad_error III_decode(struct mad_bitptr *ptr, struct mad_frame *frame,
3117 mad_fixed_t output[36]; 3117 mad_fixed_t output[36];
3118 3118
3119 if (channel->block_type == 2) { 3119 if (channel->block_type == 2) {
3120 III_reorder(xr[ch], channel, sfbwidth[ch]); 3120 III_reorder(xr[ch], channel, sfbwidth[ch]);
3121 3121
3122# if !defined(OPT_STRICT) 3122# if !defined(OPT_STRICT)
3123 /* 3123 /*
3124 * According to ISO/IEC 11172-3, "Alias reduction is not applied for 3124 * According to ISO/IEC 11172-3, "Alias reduction is not applied for
3125 * granules with block_type == 2 (short block)." However, other 3125 * granules with block_type == 2 (short block)." However, other
3126 * sources suggest alias reduction should indeed be performed on the 3126 * sources suggest alias reduction should indeed be performed on the
3127 * lower two subbands of mixed blocks. Most other implementations do 3127 * lower two subbands of mixed blocks. Most other implementations do
3128 * this, so by default we will too. 3128 * this, so by default we will too.
3129 */ 3129 */
3130 if (channel->flags & mixed_block_flag) 3130 if (channel->flags & mixed_block_flag)
3131 III_aliasreduce(xr[ch], 36); 3131 III_aliasreduce(xr[ch], 36);
3132# endif 3132# endif
3133 } 3133 }
3134 else 3134 else
3135 III_aliasreduce(xr[ch], 576); 3135 III_aliasreduce(xr[ch], 576);
3136 3136
3137 l = 0; 3137 l = 0;
3138 3138
3139 /* subbands 0-1 */ 3139 /* subbands 0-1 */
3140 3140
3141 if (channel->block_type != 2 || (channel->flags & mixed_block_flag)) { 3141 if (channel->block_type != 2 || (channel->flags & mixed_block_flag)) {
3142 unsigned int block_type; 3142 unsigned int block_type;
3143 3143
3144 block_type = channel->block_type; 3144 block_type = channel->block_type;
3145 if (channel->flags & mixed_block_flag) 3145 if (channel->flags & mixed_block_flag)
3146 block_type = 0; 3146 block_type = 0;
3147 3147
3148 /* long blocks */ 3148 /* long blocks */
3149 for (sb = 0; sb < 2; ++sb, l += 18) { 3149 for (sb = 0; sb < 2; ++sb, l += 18) {
3150 III_imdct_l(&xr[ch][l], output, block_type); 3150 III_imdct_l(&xr[ch][l], output, block_type);
3151 III_overlap(output, (*frame->overlap)[ch][sb], sample, sb); 3151 III_overlap(output, (*frame->overlap)[ch][sb], sample, sb);
3152 } 3152 }
3153 } 3153 }
3154 else { 3154 else {
3155 /* short blocks */ 3155 /* short blocks */
3156 for (sb = 0; sb < 2; ++sb, l += 18) { 3156 for (sb = 0; sb < 2; ++sb, l += 18) {
3157 III_imdct_s(&xr[ch][l], output); 3157 III_imdct_s(&xr[ch][l], output);
3158 III_overlap(output, (*frame->overlap)[ch][sb], sample, sb); 3158 III_overlap(output, (*frame->overlap)[ch][sb], sample, sb);
3159 } 3159 }
3160 } 3160 }
3161 3161
3162 III_freqinver(sample, 1); 3162 III_freqinver(sample, 1);
@@ -3166,7 +3166,7 @@ enum mad_error III_decode(struct mad_bitptr *ptr, struct mad_frame *frame,
3166/* 3166/*
3167 i = 576; 3167 i = 576;
3168 while (i > 36 && xr[ch][i - 1] == 0) 3168 while (i > 36 && xr[ch][i - 1] == 0)
3169 --i; 3169 --i;
3170*/ 3170*/
3171 3171
3172 { 3172 {
@@ -3181,33 +3181,33 @@ enum mad_error III_decode(struct mad_bitptr *ptr, struct mad_frame *frame,
3181 sblimit = 32 - (576 - i) / 18; 3181 sblimit = 32 - (576 - i) / 18;
3182 3182
3183 if (channel->block_type != 2) { 3183 if (channel->block_type != 2) {
3184 /* long blocks */ 3184 /* long blocks */
3185 for (sb = 2; sb < sblimit; ++sb, l += 18) { 3185 for (sb = 2; sb < sblimit; ++sb, l += 18) {
3186 III_imdct_l(&xr[ch][l], output, channel->block_type); 3186 III_imdct_l(&xr[ch][l], output, channel->block_type);
3187 III_overlap(output, (*frame->overlap)[ch][sb], sample, sb); 3187 III_overlap(output, (*frame->overlap)[ch][sb], sample, sb);
3188 3188
3189 if (sb & 1) 3189 if (sb & 1)
3190 III_freqinver(sample, sb); 3190 III_freqinver(sample, sb);
3191 } 3191 }
3192 } 3192 }
3193 else { 3193 else {
3194 /* short blocks */ 3194 /* short blocks */
3195 for (sb = 2; sb < sblimit; ++sb, l += 18) { 3195 for (sb = 2; sb < sblimit; ++sb, l += 18) {
3196 III_imdct_s(&xr[ch][l], output); 3196 III_imdct_s(&xr[ch][l], output);
3197 III_overlap(output, (*frame->overlap)[ch][sb], sample, sb); 3197 III_overlap(output, (*frame->overlap)[ch][sb], sample, sb);
3198 3198
3199 if (sb & 1) 3199 if (sb & 1)
3200 III_freqinver(sample, sb); 3200 III_freqinver(sample, sb);
3201 } 3201 }
3202 } 3202 }
3203 3203
3204 /* remaining (zero) subbands */ 3204 /* remaining (zero) subbands */
3205 3205
3206 for (sb = sblimit; sb < 32; ++sb) { 3206 for (sb = sblimit; sb < 32; ++sb) {
3207 III_overlap_z((*frame->overlap)[ch][sb], sample, sb); 3207 III_overlap_z((*frame->overlap)[ch][sb], sample, sb);
3208 3208
3209 if (sb & 1) 3209 if (sb & 1)
3210 III_freqinver(sample, sb); 3210 III_freqinver(sample, sb);
3211 } 3211 }
3212 } 3212 }
3213 } 3213 }
@@ -3216,8 +3216,8 @@ enum mad_error III_decode(struct mad_bitptr *ptr, struct mad_frame *frame,
3216} 3216}
3217 3217
3218/* 3218/*
3219 * NAME: layer->III() 3219 * NAME: layer->III()
3220 * DESCRIPTION: decode a single Layer III frame 3220 * DESCRIPTION: decode a single Layer III frame
3221 */ 3221 */
3222int mad_layer_III(struct mad_stream *stream, struct mad_frame *frame) 3222int mad_layer_III(struct mad_stream *stream, struct mad_frame *frame)
3223{ 3223{
@@ -3268,7 +3268,7 @@ int mad_layer_III(struct mad_stream *stream, struct mad_frame *frame)
3268 mad_bit_crc(stream->ptr, si_len * CHAR_BIT, header->crc_check); 3268 mad_bit_crc(stream->ptr, si_len * CHAR_BIT, header->crc_check);
3269 3269
3270 if (header->crc_check != header->crc_target && 3270 if (header->crc_check != header->crc_target &&
3271 !(frame->options & MAD_OPTION_IGNORECRC)) { 3271 !(frame->options & MAD_OPTION_IGNORECRC)) {
3272 stream->error = MAD_ERROR_BADCRC; 3272 stream->error = MAD_ERROR_BADCRC;
3273 result = -1; 3273 result = -1;
3274 } 3274 }
@@ -3277,7 +3277,7 @@ int mad_layer_III(struct mad_stream *stream, struct mad_frame *frame)
3277 /* decode frame side information */ 3277 /* decode frame side information */
3278 3278
3279 error = III_sideinfo(&stream->ptr, nch, header->flags & MAD_FLAG_LSF_EXT, 3279 error = III_sideinfo(&stream->ptr, nch, header->flags & MAD_FLAG_LSF_EXT,
3280 &si, &data_bitlen, &priv_bitlen); 3280 &si, &data_bitlen, &priv_bitlen);
3281 if (error && result == 0) { 3281 if (error && result == 0) {
3282 stream->error = error; 3282 stream->error = error;
3283 result = -1; 3283 result = -1;
@@ -3297,10 +3297,10 @@ int mad_layer_III(struct mad_stream *stream, struct mad_frame *frame)
3297 header = mad_bit_read(&peek, 32); 3297 header = mad_bit_read(&peek, 32);
3298 if ((header & 0xffe60000L) /* syncword | layer */ == 0xffe20000L) { 3298 if ((header & 0xffe60000L) /* syncword | layer */ == 0xffe20000L) {
3299 if (!(header & 0x00010000L)) /* protection_bit */ 3299 if (!(header & 0x00010000L)) /* protection_bit */
3300 mad_bit_skip(&peek, 16); /* crc_check */ 3300 mad_bit_skip(&peek, 16); /* crc_check */
3301 3301
3302 next_md_begin = 3302 next_md_begin =
3303 mad_bit_read(&peek, (header & 0x00080000L) /* ID */ ? 9 : 8); 3303 mad_bit_read(&peek, (header & 0x00080000L) /* ID */ ? 9 : 8);
3304 } 3304 }
3305 3305
3306 mad_bit_finish(&peek); 3306 mad_bit_finish(&peek);
@@ -3326,22 +3326,22 @@ int mad_layer_III(struct mad_stream *stream, struct mad_frame *frame)
3326 else { 3326 else {
3327 if (si.main_data_begin > stream->md_len) { 3327 if (si.main_data_begin > stream->md_len) {
3328 if (result == 0) { 3328 if (result == 0) {
3329 stream->error = MAD_ERROR_BADDATAPTR; 3329 stream->error = MAD_ERROR_BADDATAPTR;
3330 result = -1; 3330 result = -1;
3331 } 3331 }
3332 } 3332 }
3333 else { 3333 else {
3334 mad_bit_init(&ptr, 3334 mad_bit_init(&ptr,
3335 *stream->main_data + stream->md_len - si.main_data_begin); 3335 *stream->main_data + stream->md_len - si.main_data_begin);
3336 3336
3337 if (md_len > si.main_data_begin) { 3337 if (md_len > si.main_data_begin) {
3338 assert(stream->md_len + md_len - 3338 assert(stream->md_len + md_len -
3339 si.main_data_begin <= MAD_BUFFER_MDLEN); 3339 si.main_data_begin <= MAD_BUFFER_MDLEN);
3340 3340
3341 memcpy(*stream->main_data + stream->md_len, 3341 memcpy(*stream->main_data + stream->md_len,
3342 mad_bit_nextbyte(&stream->ptr), 3342 mad_bit_nextbyte(&stream->ptr),
3343 frame_used = md_len - si.main_data_begin); 3343 frame_used = md_len - si.main_data_begin);
3344 stream->md_len += frame_used; 3344 stream->md_len += frame_used;
3345 } 3345 }
3346 } 3346 }
3347 } 3347 }
@@ -3365,17 +3365,17 @@ int mad_layer_III(struct mad_stream *stream, struct mad_frame *frame)
3365 3365
3366# if 0 && defined(DEBUG) 3366# if 0 && defined(DEBUG)
3367 fprintf(stderr, 3367 fprintf(stderr,
3368 "main_data_begin:%u, md_len:%u, frame_free:%u, " 3368 "main_data_begin:%u, md_len:%u, frame_free:%u, "
3369 "data_bitlen:%u, anc_bitlen: %u\n", 3369 "data_bitlen:%u, anc_bitlen: %u\n",
3370 si.main_data_begin, md_len, frame_free, 3370 si.main_data_begin, md_len, frame_free,
3371 data_bitlen, stream->anc_bitlen); 3371 data_bitlen, stream->anc_bitlen);
3372# endif 3372# endif
3373 3373
3374 /* preload main_data buffer with up to 511 bytes for next frame(s) */ 3374 /* preload main_data buffer with up to 511 bytes for next frame(s) */
3375 3375
3376 if (frame_free >= next_md_begin) { 3376 if (frame_free >= next_md_begin) {
3377 memcpy(*stream->main_data, 3377 memcpy(*stream->main_data,
3378 stream->next_frame - next_md_begin, next_md_begin); 3378 stream->next_frame - next_md_begin, next_md_begin);
3379 stream->md_len = next_md_begin; 3379 stream->md_len = next_md_begin;
3380 } 3380 }
3381 else { 3381 else {
@@ -3384,19 +3384,19 @@ int mad_layer_III(struct mad_stream *stream, struct mad_frame *frame)
3384 3384
3385 extra = si.main_data_begin - md_len; 3385 extra = si.main_data_begin - md_len;
3386 if (extra + frame_free > next_md_begin) 3386 if (extra + frame_free > next_md_begin)
3387 extra = next_md_begin - frame_free; 3387 extra = next_md_begin - frame_free;
3388 3388
3389 if (extra < stream->md_len) { 3389 if (extra < stream->md_len) {
3390 memmove(*stream->main_data, 3390 memmove(*stream->main_data,
3391 *stream->main_data + stream->md_len - extra, extra); 3391 *stream->main_data + stream->md_len - extra, extra);
3392 stream->md_len = extra; 3392 stream->md_len = extra;
3393 } 3393 }
3394 } 3394 }
3395 else 3395 else
3396 stream->md_len = 0; 3396 stream->md_len = 0;
3397 3397
3398 memcpy(*stream->main_data + stream->md_len, 3398 memcpy(*stream->main_data + stream->md_len,
3399 stream->next_frame - frame_free, frame_free); 3399 stream->next_frame - frame_free, frame_free);
3400 stream->md_len += frame_free; 3400 stream->md_len += frame_free;
3401 } 3401 }
3402 3402