summaryrefslogtreecommitdiff
path: root/libavcodec/libdav1d.c
diff options
context:
space:
mode:
authorJames Almer <jamrial@gmail.com>2019-03-12 19:45:10 -0300
committerJames Almer <jamrial@gmail.com>2019-03-12 19:45:10 -0300
commitf6803cfbd2d725770dcd1d3a15eda7028a9c2533 (patch)
treee8c4151046599c6dd64e976f8df1ab4228e0309c /libavcodec/libdav1d.c
parent38a413213216fc7add112f67e26326492c859c08 (diff)
downloadffmpeg-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.c24
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)