# HG changeset patch # User melanson # Date 1204700300 0 # Node ID 2a2f9cb7f1b0f1dbf70a92d2de6ee76400bc7127 # Parent 355b2eb9f5538730f474c60f6d669a948c5c54ab fix the WC3 Xan decoder by correcting the frame accounting logic diff -r 355b2eb9f553 -r 2a2f9cb7f1b0 xan.c --- a/xan.c Wed Mar 05 03:59:07 2008 +0000 +++ b/xan.c Wed Mar 05 06:58:20 2008 +0000 @@ -435,12 +435,12 @@ 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 @@ { 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);