summaryrefslogtreecommitdiffstats
path: root/gst
diff options
context:
space:
mode:
Diffstat (limited to 'gst')
-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;