mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-24 13:56:33 +02:00
fix decoding of adpcm swf big frames, fix RamboMJPEGAVP6_1Mbps.swf
Originally committed as revision 9946 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
7ba32703dd
commit
fe4ff07aa0
@ -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,
|
|||||||
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,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
src += buf_size;
|
src += buf_size;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user