X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fmsrle.c;h=9233b34cc542b758cdee1fd148b858c1c54b8ade;hb=37d742b607d47122d23d548ffd7ad9b09cbc5298;hp=1ab8a419851f82ffc8c3f4ae765ff77839590cf9;hpb=ac4b5d86222006fa71ffe5922e1a34f1422507d8;p=ffmpeg diff --git a/libavcodec/msrle.c b/libavcodec/msrle.c index 1ab8a419851..9233b34cc54 100644 --- a/libavcodec/msrle.c +++ b/libavcodec/msrle.c @@ -42,8 +42,6 @@ typedef struct MsrleContext { AVFrame *frame; GetByteContext gb; - const unsigned char *buf; - int size; uint32_t pal[256]; } MsrleContext; @@ -92,13 +90,10 @@ static int msrle_decode_frame(AVCodecContext *avctx, int istride = FFALIGN(avctx->width*avctx->bits_per_coded_sample, 32) / 8; int ret; - s->buf = buf; - s->size = buf_size; - if (buf_size < 2) //Minimally a end of picture code should be there return AVERROR_INVALIDDATA; - if ((ret = ff_reget_buffer(avctx, s->frame)) < 0) + if ((ret = ff_reget_buffer(avctx, s->frame, 0)) < 0) return ret; if (avctx->bits_per_coded_sample > 1 && avctx->bits_per_coded_sample <= 8) { @@ -153,6 +148,13 @@ static int msrle_decode_frame(AVCodecContext *avctx, return buf_size; } +static void msrle_decode_flush(AVCodecContext *avctx) +{ + MsrleContext *s = avctx->priv_data; + + av_frame_unref(s->frame); +} + static av_cold int msrle_decode_end(AVCodecContext *avctx) { MsrleContext *s = avctx->priv_data; @@ -172,5 +174,6 @@ AVCodec ff_msrle_decoder = { .init = msrle_decode_init, .close = msrle_decode_end, .decode = msrle_decode_frame, + .flush = msrle_decode_flush, .capabilities = AV_CODEC_CAP_DR1, };