|
@@ -0,0 +1,173 @@
|
|
|
+--- libmad-0.15.1b.orig/layer12.c 2004-02-05 10:02:39.000000000 +0100
|
|
|
++++ libmad-0.15.1b/layer12.c 2013-10-16 10:51:25.000000000 +0200
|
|
|
+@@ -134,6 +134,12 @@ int mad_layer_I(struct mad_stream *strea
|
|
|
+ for (sb = 0; sb < bound; ++sb) {
|
|
|
+ for (ch = 0; ch < nch; ++ch) {
|
|
|
+ nb = mad_bit_read(&stream->ptr, 4);
|
|
|
++ if (mad_bit_nextbyte(&stream->ptr) > stream->next_frame)
|
|
|
++ {
|
|
|
++ stream->error = MAD_ERROR_LOSTSYNC;
|
|
|
++ stream->sync = 0;
|
|
|
++ return -1;
|
|
|
++ }
|
|
|
+
|
|
|
+ if (nb == 15) {
|
|
|
+ stream->error = MAD_ERROR_BADBITALLOC;
|
|
|
+@@ -146,6 +152,12 @@ int mad_layer_I(struct mad_stream *strea
|
|
|
+
|
|
|
+ for (sb = bound; sb < 32; ++sb) {
|
|
|
+ nb = mad_bit_read(&stream->ptr, 4);
|
|
|
++ if (mad_bit_nextbyte(&stream->ptr) > stream->next_frame)
|
|
|
++ {
|
|
|
++ stream->error = MAD_ERROR_LOSTSYNC;
|
|
|
++ stream->sync = 0;
|
|
|
++ return -1;
|
|
|
++ }
|
|
|
+
|
|
|
+ if (nb == 15) {
|
|
|
+ stream->error = MAD_ERROR_BADBITALLOC;
|
|
|
+@@ -162,6 +174,12 @@ int mad_layer_I(struct mad_stream *strea
|
|
|
+ for (ch = 0; ch < nch; ++ch) {
|
|
|
+ if (allocation[ch][sb]) {
|
|
|
+ scalefactor[ch][sb] = mad_bit_read(&stream->ptr, 6);
|
|
|
++ if (mad_bit_nextbyte(&stream->ptr) > stream->next_frame)
|
|
|
++ {
|
|
|
++ stream->error = MAD_ERROR_LOSTSYNC;
|
|
|
++ stream->sync = 0;
|
|
|
++ return -1;
|
|
|
++ }
|
|
|
+
|
|
|
+ # if defined(OPT_STRICT)
|
|
|
+ /*
|
|
|
+@@ -187,6 +205,12 @@ int mad_layer_I(struct mad_stream *strea
|
|
|
+ frame->sbsample[ch][s][sb] = nb ?
|
|
|
+ mad_f_mul(I_sample(&stream->ptr, nb),
|
|
|
+ sf_table[scalefactor[ch][sb]]) : 0;
|
|
|
++ if (mad_bit_nextbyte(&stream->ptr) > stream->next_frame)
|
|
|
++ {
|
|
|
++ stream->error = MAD_ERROR_LOSTSYNC;
|
|
|
++ stream->sync = 0;
|
|
|
++ return -1;
|
|
|
++ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+@@ -195,6 +219,12 @@ int mad_layer_I(struct mad_stream *strea
|
|
|
+ mad_fixed_t sample;
|
|
|
+
|
|
|
+ sample = I_sample(&stream->ptr, nb);
|
|
|
++ if (mad_bit_nextbyte(&stream->ptr) > stream->next_frame)
|
|
|
++ {
|
|
|
++ stream->error = MAD_ERROR_LOSTSYNC;
|
|
|
++ stream->sync = 0;
|
|
|
++ return -1;
|
|
|
++ }
|
|
|
+
|
|
|
+ for (ch = 0; ch < nch; ++ch) {
|
|
|
+ frame->sbsample[ch][s][sb] =
|
|
|
+@@ -403,7 +433,15 @@ int mad_layer_II(struct mad_stream *stre
|
|
|
+ nbal = bitalloc_table[offsets[sb]].nbal;
|
|
|
+
|
|
|
+ for (ch = 0; ch < nch; ++ch)
|
|
|
++ {
|
|
|
+ allocation[ch][sb] = mad_bit_read(&stream->ptr, nbal);
|
|
|
++ if (mad_bit_nextbyte(&stream->ptr) > stream->next_frame)
|
|
|
++ {
|
|
|
++ stream->error = MAD_ERROR_LOSTSYNC;
|
|
|
++ stream->sync = 0;
|
|
|
++ return -1;
|
|
|
++ }
|
|
|
++ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for (sb = bound; sb < sblimit; ++sb) {
|
|
|
+@@ -411,6 +449,13 @@ int mad_layer_II(struct mad_stream *stre
|
|
|
+
|
|
|
+ allocation[0][sb] =
|
|
|
+ allocation[1][sb] = mad_bit_read(&stream->ptr, nbal);
|
|
|
++
|
|
|
++ if (mad_bit_nextbyte(&stream->ptr) > stream->next_frame)
|
|
|
++ {
|
|
|
++ stream->error = MAD_ERROR_LOSTSYNC;
|
|
|
++ stream->sync = 0;
|
|
|
++ return -1;
|
|
|
++ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /* decode scalefactor selection info */
|
|
|
+@@ -419,6 +464,12 @@ int mad_layer_II(struct mad_stream *stre
|
|
|
+ for (ch = 0; ch < nch; ++ch) {
|
|
|
+ if (allocation[ch][sb])
|
|
|
+ scfsi[ch][sb] = mad_bit_read(&stream->ptr, 2);
|
|
|
++ if (mad_bit_nextbyte(&stream->ptr) > stream->next_frame)
|
|
|
++ {
|
|
|
++ stream->error = MAD_ERROR_LOSTSYNC;
|
|
|
++ stream->sync = 0;
|
|
|
++ return -1;
|
|
|
++ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+@@ -442,6 +493,12 @@ int mad_layer_II(struct mad_stream *stre
|
|
|
+ for (ch = 0; ch < nch; ++ch) {
|
|
|
+ if (allocation[ch][sb]) {
|
|
|
+ scalefactor[ch][sb][0] = mad_bit_read(&stream->ptr, 6);
|
|
|
++ if (mad_bit_nextbyte(&stream->ptr) > stream->next_frame)
|
|
|
++ {
|
|
|
++ stream->error = MAD_ERROR_LOSTSYNC;
|
|
|
++ stream->sync = 0;
|
|
|
++ return -1;
|
|
|
++ }
|
|
|
+
|
|
|
+ switch (scfsi[ch][sb]) {
|
|
|
+ case 2:
|
|
|
+@@ -452,11 +509,23 @@ int mad_layer_II(struct mad_stream *stre
|
|
|
+
|
|
|
+ case 0:
|
|
|
+ scalefactor[ch][sb][1] = mad_bit_read(&stream->ptr, 6);
|
|
|
++ if (mad_bit_nextbyte(&stream->ptr) > stream->next_frame)
|
|
|
++ {
|
|
|
++ stream->error = MAD_ERROR_LOSTSYNC;
|
|
|
++ stream->sync = 0;
|
|
|
++ return -1;
|
|
|
++ }
|
|
|
+ /* fall through */
|
|
|
+
|
|
|
+ case 1:
|
|
|
+ case 3:
|
|
|
+ scalefactor[ch][sb][2] = mad_bit_read(&stream->ptr, 6);
|
|
|
++ if (mad_bit_nextbyte(&stream->ptr) > stream->next_frame)
|
|
|
++ {
|
|
|
++ stream->error = MAD_ERROR_LOSTSYNC;
|
|
|
++ stream->sync = 0;
|
|
|
++ return -1;
|
|
|
++ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (scfsi[ch][sb] & 1)
|
|
|
+@@ -488,6 +557,12 @@ int mad_layer_II(struct mad_stream *stre
|
|
|
+ index = offset_table[bitalloc_table[offsets[sb]].offset][index - 1];
|
|
|
+
|
|
|
+ II_samples(&stream->ptr, &qc_table[index], samples);
|
|
|
++ if (mad_bit_nextbyte(&stream->ptr) > stream->next_frame)
|
|
|
++ {
|
|
|
++ stream->error = MAD_ERROR_LOSTSYNC;
|
|
|
++ stream->sync = 0;
|
|
|
++ return -1;
|
|
|
++ }
|
|
|
+
|
|
|
+ for (s = 0; s < 3; ++s) {
|
|
|
+ frame->sbsample[ch][3 * gr + s][sb] =
|
|
|
+@@ -506,6 +581,12 @@ int mad_layer_II(struct mad_stream *stre
|
|
|
+ index = offset_table[bitalloc_table[offsets[sb]].offset][index - 1];
|
|
|
+
|
|
|
+ II_samples(&stream->ptr, &qc_table[index], samples);
|
|
|
++ if (mad_bit_nextbyte(&stream->ptr) > stream->next_frame)
|
|
|
++ {
|
|
|
++ stream->error = MAD_ERROR_LOSTSYNC;
|
|
|
++ stream->sync = 0;
|
|
|
++ return -1;
|
|
|
++ }
|
|
|
+
|
|
|
+ for (ch = 0; ch < nch; ++ch) {
|
|
|
+ for (s = 0; s < 3; ++s) {
|