diff options
author | Anton Khirnov <anton@khirnov.net> | 2014-11-20 09:26:35 +0100 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2015-01-27 08:34:46 +0100 |
commit | 1dd021929f8157b88529ce1e6ab6351dd2899e89 (patch) | |
tree | 4d89ab7d3c8e24a134046fd20b89a9017bc08a08 | |
parent | f9f883af4fe615a832407a657752e248a96c6280 (diff) | |
download | ffmpeg-1dd021929f8157b88529ce1e6ab6351dd2899e89.tar.gz |
hevc: clear unused refs on failure
-rw-r--r-- | libavcodec/hevc_refs.c | 9 |
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) |