aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Storsjö2013-01-20 01:59:08 +0200
committerMartin Storsjö2013-01-20 18:14:17 +0200
commita717f9904227d7979473bad40c50eb40af41d01d (patch)
treee0e96bb7802af2bb2a88d52288ba685cf08e07e1
parent21f5c24b80caae36fb23c7743081bd8dd807cf0b (diff)
mpegts: Share the cleanup code between the demuxer and lavf-internal parser functions
The lavf-internal parser functions are used when receiving mpegts over RTP. This fixes memory leaks in this setup. The normal mpegts demuxer close function was updated in ec7d0d2e in 2004 to fix leaks, but the parsing function used for RTP wasn't updated and has been leaking ever since. Signed-off-by: Martin Storsjö <martin@martin.st>
-rw-r--r--libavformat/mpegts.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
index 7c4d447ddc..399b0743ce 100644
--- a/libavformat/mpegts.c
+++ b/libavformat/mpegts.c
@@ -2029,16 +2029,20 @@ static int mpegts_read_packet(AVFormatContext *s,
return ret;
}
-static int mpegts_read_close(AVFormatContext *s)
+static void mpegts_free(MpegTSContext *ts)
{
- MpegTSContext *ts = s->priv_data;
int i;
clear_programs(ts);
for(i=0;i<NB_PID_MAX;i++)
if (ts->pids[i]) mpegts_close_filter(ts, ts->pids[i]);
+}
+static int mpegts_read_close(AVFormatContext *s)
+{
+ MpegTSContext *ts = s->priv_data;
+ mpegts_free(ts);
return 0;
}
@@ -2150,10 +2154,7 @@ int ff_mpegts_parse_packet(MpegTSContext *ts, AVPacket *pkt,
void ff_mpegts_parse_close(MpegTSContext *ts)
{
- int i;
-
- for(i=0;i<NB_PID_MAX;i++)
- av_free(ts->pids[i]);
+ mpegts_free(ts);
av_free(ts);
}