From 282ee4e766b1133fc3b04be5ad4c1b8671c51642 Mon Sep 17 00:00:00 2001 From: Mike Melanson Date: Wed, 5 Mar 2008 06:58:20 +0000 Subject: [PATCH] fix the WC3 Xan decoder by correcting the frame accounting logic Originally committed as revision 12326 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/xan.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/libavcodec/xan.c b/libavcodec/xan.c index 27fc16488a..8dad6e83f9 100644 --- a/libavcodec/xan.c +++ b/libavcodec/xan.c @@ -435,12 +435,12 @@ static int xan_decode_frame(AVCodecContext *avctx, if (s->last_frame.data[0]) avctx->release_buffer(avctx, &s->last_frame); - /* shuffle frames */ - s->last_frame = s->current_frame; - *data_size = sizeof(AVFrame); *(AVFrame*)data = s->current_frame; + /* shuffle frames */ + FFSWAP(AVFrame, s->current_frame, s->last_frame); + /* always report that the buffer was completely consumed */ return buf_size; } @@ -449,9 +449,11 @@ static int xan_decode_end(AVCodecContext *avctx) { XanContext *s = avctx->priv_data; - /* release the last frame */ + /* release the frames */ if (s->last_frame.data[0]) avctx->release_buffer(avctx, &s->last_frame); + if (s->current_frame.data[0]) + avctx->release_buffer(avctx, &s->current_frame); av_free(s->buffer1); av_free(s->buffer2);