diff options
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/xan.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/libavcodec/xan.c b/libavcodec/xan.c index 27fc164..8dad6e8 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); |