diff options
author | James Almer <jamrial@gmail.com> | 2019-03-12 19:45:10 -0300 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2019-03-12 19:45:10 -0300 |
commit | f6803cfbd2d725770dcd1d3a15eda7028a9c2533 (patch) | |
tree | e8c4151046599c6dd64e976f8df1ab4228e0309c /libavcodec/libdav1d.c | |
parent | 38a413213216fc7add112f67e26326492c859c08 (diff) | |
download | ffmpeg-f6803cfbd2d725770dcd1d3a15eda7028a9c2533.tar.gz |
avcodec/libdav1d: unref the frame on failure
Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libavcodec/libdav1d.c')
-rw-r--r-- | libavcodec/libdav1d.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/libavcodec/libdav1d.c b/libavcodec/libdav1d.c index f20ae7d5c5..8c8584f4e8 100644 --- a/libavcodec/libdav1d.c +++ b/libavcodec/libdav1d.c @@ -231,7 +231,7 @@ static int libdav1d_receive_frame(AVCodecContext *c, AVFrame *frame) if (c->width != p->p.w || c->height != p->p.h) { res = ff_set_dimensions(c, p->p.w, p->p.h); if (res < 0) - return res; + goto fail; } switch (p->seq_hdr->chr) { @@ -272,13 +272,16 @@ FF_ENABLE_DEPRECATION_WARNINGS frame->pict_type = AV_PICTURE_TYPE_SP; break; default: - return AVERROR_INVALIDDATA; + res = AVERROR_INVALIDDATA; + goto fail; } if (p->mastering_display) { AVMasteringDisplayMetadata *mastering = av_mastering_display_metadata_create_side_data(frame); - if (!mastering) - return AVERROR(ENOMEM); + if (!mastering) { + res = AVERROR(ENOMEM); + goto fail; + } for (int i = 0; i < 3; i++) { mastering->display_primaries[i][0] = av_make_q(p->mastering_display->primaries[i][0], 1 << 16); @@ -295,14 +298,19 @@ FF_ENABLE_DEPRECATION_WARNINGS } if (p->content_light) { AVContentLightMetadata *light = av_content_light_metadata_create_side_data(frame); - if (!light) - return AVERROR(ENOMEM); - + if (!light) { + res = AVERROR(ENOMEM); + goto fail; + } light->MaxCLL = p->content_light->max_content_light_level; light->MaxFALL = p->content_light->max_frame_average_light_level; } - return 0; + res = 0; +fail: + if (res < 0) + av_frame_unref(frame); + return res; } static av_cold int libdav1d_close(AVCodecContext *c) |