diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index e335bc6657..248a35f0ff 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -334,6 +334,13 @@ static void mpegts_close_filter(MpegTSContext *ts, MpegTSFilter *filter) pid = filter->pid; if (filter->type == MPEGTS_SECTION) av_freep(&filter->u.section_filter.section_buf); + else if (filter->type == MPEGTS_PES) { + /* referenced private data will be freed later in + * av_close_input_stream */ + if (!((PESContext *)filter->u.pes_filter.opaque)->st) { + av_freep(&filter->u.pes_filter.opaque); + } + } av_free(filter); ts->pids[pid] = NULL;