AVFrame *frame;
GetByteContext gb;
- const unsigned char *buf;
- int size;
uint32_t pal[256];
} MsrleContext;
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) {
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;
.init = msrle_decode_init,
.close = msrle_decode_end,
.decode = msrle_decode_frame,
+ .flush = msrle_decode_flush,
.capabilities = AV_CODEC_CAP_DR1,
};