diff options
author | Zane van Iperen <zane@zanevaniperen.com> | 2021-03-23 20:52:16 +1000 |
---|---|---|
committer | Zane van Iperen <zane@zanevaniperen.com> | 2021-03-25 12:51:08 +1000 |
commit | 95280cf3e795c18175f7e5ca8bb05ef40abb6c42 (patch) | |
tree | 46046ed1d416e467eabe2632357709ca25137dd2 /libavcodec | |
parent | 55a50885b94f10f2076deaf40957d8573e008dcd (diff) | |
download | ffmpeg-95280cf3e795c18175f7e5ca8bb05ef40abb6c42.tar.gz |
avcodec/adpcm_zork: reset state in flush callback
Signed-off-by: Zane van Iperen <zane@zanevaniperen.com>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/adpcm.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/libavcodec/adpcm.c b/libavcodec/adpcm.c index 5c28b745b9..b145622f4f 100644 --- a/libavcodec/adpcm.c +++ b/libavcodec/adpcm.c @@ -2077,13 +2077,6 @@ static int adpcm_decode_frame(AVCodecContext *avctx, void *data, } break; case AV_CODEC_ID_ADPCM_ZORK: - if (!c->has_status) { - for (channel = 0; channel < avctx->channels; channel++) { - c->status[channel].predictor = 0; - c->status[channel].step_index = 0; - } - c->has_status = 1; - } for (n = 0; n < nb_samples * avctx->channels; n++) { int v = bytestream2_get_byteu(&gb); *samples++ = adpcm_zork_expand_nibble(&c->status[n % avctx->channels], v); @@ -2121,7 +2114,22 @@ static int adpcm_decode_frame(AVCodecContext *avctx, void *data, static void adpcm_flush(AVCodecContext *avctx) { ADPCMDecodeContext *c = avctx->priv_data; - c->has_status = 0; + + switch(avctx->codec_id) { + case AV_CODEC_ID_ADPCM_ZORK: + for (int channel = 0; channel < avctx->channels; channel++) { + c->status[channel].predictor = 0; + c->status[channel].step_index = 0; + } + break; + + default: + /* Other codecs may want to handle this during decoding. */ + c->has_status = 0; + return; + } + + c->has_status = 1; } |