Commit fe4ff07a authored by Baptiste Coudurier's avatar Baptiste Coudurier

fix decoding of adpcm swf big frames, fix RamboMJPEGAVP6_1Mbps.swf

Originally committed as revision 9946 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 7ba32703
...@@ -1274,7 +1274,7 @@ static int adpcm_decode_frame(AVCodecContext *avctx, ...@@ -1274,7 +1274,7 @@ static int adpcm_decode_frame(AVCodecContext *avctx,
{ {
GetBitContext gb; GetBitContext gb;
const int *table; const int *table;
int k0, signmask, nb_bits; int k0, signmask, nb_bits, count;
int size = buf_size*8; int size = buf_size*8;
init_get_bits(&gb, buf, size); init_get_bits(&gb, buf, size);
...@@ -1286,12 +1286,13 @@ static int adpcm_decode_frame(AVCodecContext *avctx, ...@@ -1286,12 +1286,13 @@ static int adpcm_decode_frame(AVCodecContext *avctx,
k0 = 1 << (nb_bits-2); k0 = 1 << (nb_bits-2);
signmask = 1 << (nb_bits-1); signmask = 1 << (nb_bits-1);
while (get_bits_count(&gb) <= size - 22*avctx->channels) {
for (i = 0; i < avctx->channels; i++) { for (i = 0; i < avctx->channels; i++) {
*samples++ = c->status[i].predictor = get_sbits(&gb, 16); *samples++ = c->status[i].predictor = get_sbits(&gb, 16);
c->status[i].step_index = get_bits(&gb, 6); c->status[i].step_index = get_bits(&gb, 6);
} }
while (get_bits_count(&gb) < size) for (count = 0; get_bits_count(&gb) <= size - nb_bits*avctx->channels && count < 4095; count++)
{ {
int i; int i;
...@@ -1327,6 +1328,7 @@ static int adpcm_decode_frame(AVCodecContext *avctx, ...@@ -1327,6 +1328,7 @@ static int adpcm_decode_frame(AVCodecContext *avctx,
} }
} }
} }
}
src += buf_size; src += buf_size;
break; break;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment