X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fmsrle.c;h=9233b34cc542b758cdee1fd148b858c1c54b8ade;hb=e426f71c96e9fac3ff87f51cfe7df603220fbd5d;hp=adb55b1302c0762de53852731946068ff15ea7f9;hpb=185aa5e896e15ae96145609944bfc6bbb239bc64;p=ffmpeg diff --git a/libavcodec/msrle.c b/libavcodec/msrle.c index adb55b1302c..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,10 +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) { @@ -150,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; @@ -169,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, };