ffmpeg | branch: master | Aman Gupta <a...@tmm1.net> | Mon May 21 12:13:06 2018 -0700| [70d25268c21cbee5f08304da95be1f647c630c15] | committer: Aman Gupta
avformat/mpegts: fix memory leak with merge_pmt_versions=1 Signed-off-by: Aman Gupta <a...@tmm1.net> > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=70d25268c21cbee5f08304da95be1f647c630c15 --- libavformat/mpegts.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index e39c927441..5f53f77d89 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -247,6 +247,7 @@ typedef struct PESContext { uint8_t header[MAX_PES_HEADER_SIZE]; AVBufferRef *buffer; SLConfigDescr sl; + int merged_st; } PESContext; extern AVInputFormat ff_mpegts_demuxer; @@ -550,8 +551,8 @@ static void mpegts_close_filter(MpegTSContext *ts, MpegTSFilter *filter) PESContext *pes = filter->u.pes_filter.opaque; av_buffer_unref(&pes->buffer); /* referenced private data will be freed later in - * avformat_close_input */ - if (!((PESContext *)filter->u.pes_filter.opaque)->st) { + * avformat_close_input (pes->st->priv_data == pes) */ + if (!pes->st || pes->merged_st) { av_freep(&filter->u.pes_filter.opaque); } } @@ -2190,6 +2191,7 @@ static void pmt_cb(MpegTSFilter *filter, const uint8_t *section, int section_len if (st) { pes->st = st; pes->stream_type = stream_type; + pes->merged_st = 1; } } if (!pes->st) { @@ -2211,6 +2213,7 @@ static void pmt_cb(MpegTSFilter *filter, const uint8_t *section, int section_len if (st) { pes->st = st; pes->stream_type = stream_type; + pes->merged_st = 1; } } if (pes && !pes->st) { _______________________________________________ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog