diff options
author | Josep Torra <n770galaxy@gmail.com> | 2012-11-11 12:45:03 +0100 |
---|---|---|
committer | Josep Torra <n770galaxy@gmail.com> | 2012-11-12 22:57:19 +0100 |
commit | 150376efe476f4b9ea6c6cef54af1399cf6f478e (patch) | |
tree | c080082d2edd52247cd6b310bc5263c2b8a3e58c /gst/mpegtsdemux | |
parent | 1fc5fffe088ffdd838b0f36b19e5741c32a5240a (diff) | |
download | gstreamer-plugins-bad-150376efe476f4b9ea6c6cef54af1399cf6f478e.tar.gz |
mpegtspacketizer: flush observations too
Flush the previous observations when the packetizer is flushed.
Also don't leak them in the dispose.
Diffstat (limited to 'gst/mpegtsdemux')
-rw-r--r-- | gst/mpegtsdemux/mpegtspacketizer.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/gst/mpegtsdemux/mpegtspacketizer.c b/gst/mpegtsdemux/mpegtspacketizer.c index 4543243ca..1857fda28 100644 --- a/gst/mpegtsdemux/mpegtspacketizer.c +++ b/gst/mpegtsdemux/mpegtspacketizer.c @@ -289,6 +289,20 @@ get_pcr_table (MpegTSPacketizer2 * packetizer, guint16 pid) return res; } +static void +flush_observations (MpegTSPacketizer2 * packetizer) +{ + MpegTSPacketizerPrivate *priv = packetizer->priv; + gint i; + + for (i = 0; i < priv->lastobsid; i++) { + g_free (priv->observations[i]); + priv->observations[i] = NULL; + } + memset (priv->pcrtablelut, 0xff, 0x200); + priv->lastobsid = 0; +} + static gint mpegts_packetizer_stream_subtable_compare (gconstpointer a, gconstpointer b) { @@ -425,6 +439,7 @@ mpegts_packetizer_dispose (GObject * object) if (packetizer->priv->iconvs[i] != (GIConv) - 1) g_iconv_close (packetizer->priv->iconvs[i]); + flush_observations (packetizer); } if (G_OBJECT_CLASS (mpegts_packetizer_parent_class)->dispose) @@ -2478,6 +2493,7 @@ mpegts_packetizer_flush (MpegTSPacketizer2 * packetizer) packetizer->priv->offset = 0; packetizer->priv->mapped_size = 0; packetizer->priv->last_in_time = GST_CLOCK_TIME_NONE; + flush_observations (packetizer); } void |