summaryrefslogtreecommitdiff
path: root/gst/mpegtsdemux
diff options
context:
space:
mode:
authorJosep Torra <n770galaxy@gmail.com>2012-11-11 12:45:03 +0100
committerJosep Torra <n770galaxy@gmail.com>2012-11-12 22:57:19 +0100
commit150376efe476f4b9ea6c6cef54af1399cf6f478e (patch)
treec080082d2edd52247cd6b310bc5263c2b8a3e58c /gst/mpegtsdemux
parent1fc5fffe088ffdd838b0f36b19e5741c32a5240a (diff)
downloadgstreamer-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.c16
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