aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWill Kelleher <wkelleher@gogoair.com>2016-04-07 08:58:31 -0500
committerMichael Niedermayer <michael@niedermayer.cc>2016-06-05 02:40:30 +0200
commit7c43c48fda09cd734ad1e28ef2b8f0a2e197d4e0 (patch)
tree34278fcdec8191afefe394f317c22bce69cebc4b
parent069eea16d975643bee6a42643c9bac54f170ee9c (diff)
downloadandroid_external_ffmpeg-7c43c48fda09cd734ad1e28ef2b8f0a2e197d4e0.tar.gz
android_external_ffmpeg-7c43c48fda09cd734ad1e28ef2b8f0a2e197d4e0.tar.bz2
android_external_ffmpeg-7c43c48fda09cd734ad1e28ef2b8f0a2e197d4e0.zip
hevc: Fix memory leak related to a53_caption data
Signed-off-by: Will Kelleher <wkelleher@gogoair.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> (cherry picked from commit 964f07f68e1cc4e2d585615e2b1a1fade269afb0) Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r--libavcodec/hevc.c2
-rw-r--r--libavcodec/hevc.h9
-rw-r--r--libavcodec/hevc_parser.c2
-rw-r--r--libavcodec/hevc_sei.c6
4 files changed, 19 insertions, 0 deletions
diff --git a/libavcodec/hevc.c b/libavcodec/hevc.c
index 203f90ab2e..0e849b81c6 100644
--- a/libavcodec/hevc.c
+++ b/libavcodec/hevc.c
@@ -3149,6 +3149,8 @@ static av_cold int hevc_init_context(AVCodecContext *avctx)
s->context_initialized = 1;
s->eos = 0;
+ ff_hevc_reset_sei(s);
+
return 0;
fail:
diff --git a/libavcodec/hevc.h b/libavcodec/hevc.h
index c91f815857..5d9d35c446 100644
--- a/libavcodec/hevc.h
+++ b/libavcodec/hevc.h
@@ -1092,6 +1092,15 @@ int ff_hevc_split_packet(HEVCContext *s, HEVCPacket *pkt, const uint8_t *buf, in
int ff_hevc_encode_nal_vps(HEVCVPS *vps, unsigned int id,
uint8_t *buf, int buf_size);
+/**
+ * Reset SEI values that are stored on the Context.
+ * e.g. Caption data that was extracted during NAL
+ * parsing.
+ *
+ * @param s HEVCContext.
+ */
+void ff_hevc_reset_sei(HEVCContext *s);
+
extern const uint8_t ff_hevc_qpel_extra_before[4];
extern const uint8_t ff_hevc_qpel_extra_after[4];
extern const uint8_t ff_hevc_qpel_extra[4];
diff --git a/libavcodec/hevc_parser.c b/libavcodec/hevc_parser.c
index 4625e6149a..d635716fb9 100644
--- a/libavcodec/hevc_parser.c
+++ b/libavcodec/hevc_parser.c
@@ -209,6 +209,8 @@ static inline int parse_nal_units(AVCodecParserContext *s, const uint8_t *buf,
h->avctx = avctx;
+ ff_hevc_reset_sei(h);
+
if (!buf_size)
return 0;
diff --git a/libavcodec/hevc_sei.c b/libavcodec/hevc_sei.c
index 40685fe5d8..f598b6393a 100644
--- a/libavcodec/hevc_sei.c
+++ b/libavcodec/hevc_sei.c
@@ -373,3 +373,9 @@ int ff_hevc_decode_nal_sei(HEVCContext *s)
} while (more_rbsp_data(&s->HEVClc->gb));
return 1;
}
+
+void ff_hevc_reset_sei(HEVCContext *s)
+{
+ s->a53_caption_size = 0;
+ av_freep(&s->a53_caption);
+}