avcodec/msrleenc: Check frame allocations/references

Also allocate the AVFrame during init and use av_frame_replace()
to replace it later.

Reviewed-by: Tomas Härdin <git@haerdin.se>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
Andreas Rheinhardt 2023-07-16 16:41:47 +02:00
parent 66449f8c6b
commit 3cb0bd06a8

View File

@ -37,7 +37,13 @@ typedef struct MSRLEContext {
static av_cold int msrle_encode_init(AVCodecContext *avctx)
{
MSRLEContext *s = avctx->priv_data;
avctx->bits_per_coded_sample = 8;
s->last_frame = av_frame_alloc();
if (!s->last_frame)
return AVERROR(ENOMEM);
return 0;
}
@ -265,13 +271,7 @@ static int msrle_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
s->curframe = 0;
*got_packet = 1;
if (!s->last_frame)
s->last_frame = av_frame_alloc();
else
av_frame_unref(s->last_frame);
av_frame_ref(s->last_frame, pict);
return 0;
return av_frame_replace(s->last_frame, pict);
}
static int msrle_encode_close(AVCodecContext *avctx)