summaryrefslogtreecommitdiffstats
path: root/gst/flv
diff options
context:
space:
mode:
authorSebastian Dröge <slomo@circular-chaos.org>2008-10-27 09:14:45 +0000
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2009-05-12 21:20:57 +0200
commit5dd573262db6b5aadb731c50d102e69cadc01152 (patch)
treeb0bea00feed84a47fdf6df17df91cd68185cc23c /gst/flv
parent1b235bb8b0d4a6b0ddb753f4014921ad71ce0c3e (diff)
[MOVED FROM BAD 34/57] gst/flv/gstflvdemux.*: If our index was created by the element and not provided from the outside we should destroy it...
Original commit message from CVS: * gst/flv/gstflvdemux.c: (gst_flv_demux_change_state), (gst_flv_demux_set_index), (gst_flv_demux_init): * gst/flv/gstflvdemux.h: If our index was created by the element and not provided from the outside we should destroy it when starting a new stream to get all old entries removed.
Diffstat (limited to 'gst/flv')
-rw-r--r--gst/flv/gstflvdemux.c12
-rw-r--r--gst/flv/gstflvdemux.h1
2 files changed, 13 insertions, 0 deletions
diff --git a/gst/flv/gstflvdemux.c b/gst/flv/gstflvdemux.c
index a9984323..3ab2edc7 100644
--- a/gst/flv/gstflvdemux.c
+++ b/gst/flv/gstflvdemux.c
@@ -1064,6 +1064,14 @@ gst_flv_demux_change_state (GstElement * element, GstStateChange transition)
switch (transition) {
case GST_STATE_CHANGE_READY_TO_PAUSED:
+ /* If this is our own index destroy it as the
+ * old entries might be wrong for the new stream */
+ if (demux->own_index) {
+ gst_object_unref (demux->index);
+ demux->index = NULL;
+ demux->own_index = FALSE;
+ }
+
/* If no index was created, generate one */
if (G_UNLIKELY (!demux->index)) {
GST_DEBUG_OBJECT (demux, "no index provided creating our own");
@@ -1072,6 +1080,7 @@ gst_flv_demux_change_state (GstElement * element, GstStateChange transition)
gst_index_get_writer_id (demux->index, GST_OBJECT (demux),
&demux->index_id);
+ demux->own_index = TRUE;
}
gst_flv_demux_cleanup (demux);
break;
@@ -1106,6 +1115,7 @@ gst_flv_demux_set_index (GstElement * element, GstIndex * index)
GST_OBJECT_UNLOCK (demux);
gst_index_get_writer_id (index, GST_OBJECT (element), &demux->index_id);
+ demux->own_index = FALSE;
}
static GstIndex *
@@ -1249,6 +1259,8 @@ gst_flv_demux_init (GstFLVDemux * demux, GstFLVDemuxClass * g_class)
demux->taglist = gst_tag_list_new ();
gst_segment_init (demux->segment, GST_FORMAT_TIME);
+ demux->own_index = FALSE;
+
gst_flv_demux_cleanup (demux);
}
diff --git a/gst/flv/gstflvdemux.h b/gst/flv/gstflvdemux.h
index 210db2fd..3eb99ce0 100644
--- a/gst/flv/gstflvdemux.h
+++ b/gst/flv/gstflvdemux.h
@@ -59,6 +59,7 @@ struct _GstFLVDemux
GstIndex *index;
gint index_id;
+ gboolean own_index;
GArray * times;
GArray * filepositions;