aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/hevc_refs.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2014-11-20 09:26:35 +0100
committerAnton Khirnov <anton@khirnov.net>2015-01-27 08:34:46 +0100
commit1dd021929f8157b88529ce1e6ab6351dd2899e89 (patch)
tree4d89ab7d3c8e24a134046fd20b89a9017bc08a08 /libavcodec/hevc_refs.c
parentf9f883af4fe615a832407a657752e248a96c6280 (diff)
downloadandroid_external_ffmpeg-1dd021929f8157b88529ce1e6ab6351dd2899e89.tar.gz
android_external_ffmpeg-1dd021929f8157b88529ce1e6ab6351dd2899e89.tar.bz2
android_external_ffmpeg-1dd021929f8157b88529ce1e6ab6351dd2899e89.zip
hevc: clear unused refs on failure
Diffstat (limited to 'libavcodec/hevc_refs.c')
-rw-r--r--libavcodec/hevc_refs.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/libavcodec/hevc_refs.c b/libavcodec/hevc_refs.c
index 658ead768e..ccb441bb75 100644
--- a/libavcodec/hevc_refs.c
+++ b/libavcodec/hevc_refs.c
@@ -390,7 +390,7 @@ int ff_hevc_frame_rps(HEVCContext *s)
const ShortTermRPS *short_rps = s->sh.short_term_rps;
const LongTermRPS *long_rps = &s->sh.long_term_rps;
RefPicList *rps = s->rps;
- int i, ret;
+ int i, ret = 0;
if (!short_rps) {
rps[0].nb_refs = rps[1].nb_refs = 0;
@@ -424,7 +424,7 @@ int ff_hevc_frame_rps(HEVCContext *s)
ret = add_candidate_ref(s, &rps[list], poc, HEVC_FRAME_FLAG_SHORT_REF);
if (ret < 0)
- return ret;
+ goto fail;
}
/* add the long refs */
@@ -434,14 +434,15 @@ int ff_hevc_frame_rps(HEVCContext *s)
ret = add_candidate_ref(s, &rps[list], poc, HEVC_FRAME_FLAG_LONG_REF);
if (ret < 0)
- return ret;
+ goto fail;
}
+fail:
/* release any frames that are now unused */
for (i = 0; i < FF_ARRAY_ELEMS(s->DPB); i++)
ff_hevc_unref_frame(s, &s->DPB[i], 0);
- return 0;
+ return ret;
}
int ff_hevc_compute_poc(HEVCContext *s, int poc_lsb)