summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@collabora.co.uk>2010-01-21 17:32:33 +0100
committerWim Taymans <wim.taymans@collabora.co.uk>2010-01-21 17:39:52 +0100
commit4b9666aedba73321889a1850127a41a14633fcab (patch)
treeb5a79f00077757f7ce8a9350b2032013843557b9
parent06e2d2791b7a6e835e1e40d29d1e74cd571567ed (diff)
oggdemux: keep track of added pads
Keep track of the pads we added and removed. Remove some unused fields. Don't add pads for which we don't have caps.
-rw-r--r--ext/ogg/gstoggdemux.c7
-rw-r--r--ext/ogg/gstoggdemux.h3
2 files changed, 6 insertions, 4 deletions
diff --git a/ext/ogg/gstoggdemux.c b/ext/ogg/gstoggdemux.c
index cd4711cbc..2ccead7c2 100644
--- a/ext/ogg/gstoggdemux.c
+++ b/ext/ogg/gstoggdemux.c
@@ -1527,7 +1527,7 @@ gst_ogg_demux_deactivate_current_chain (GstOggDemux * ogg)
GstOggPad *pad = g_array_index (chain->streams, GstOggPad *, i);
GstEvent *event;
- if (pad->map.is_skeleton)
+ if (!pad->added)
continue;
event = gst_event_new_eos ();
@@ -1540,6 +1540,8 @@ gst_ogg_demux_deactivate_current_chain (GstOggDemux * ogg)
gst_pad_set_active (GST_PAD_CAST (pad), FALSE);
gst_element_remove_pad (GST_ELEMENT (ogg), GST_PAD_CAST (pad));
+
+ pad->added = FALSE;
}
/* if we cannot seek back to the chain, we can destroy the chain
* completely */
@@ -1574,7 +1576,7 @@ gst_ogg_demux_activate_chain (GstOggDemux * ogg, GstOggChain * chain,
pad = g_array_index (chain->streams, GstOggPad *, i);
- if (pad->map.is_skeleton)
+ if (pad->map.is_skeleton || pad->added || GST_PAD_CAPS (pad) == NULL)
continue;
GST_DEBUG_OBJECT (ogg, "adding pad %" GST_PTR_FORMAT, pad);
@@ -1583,6 +1585,7 @@ gst_ogg_demux_activate_chain (GstOggDemux * ogg, GstOggChain * chain,
pad->discont = TRUE;
pad->map.last_size = 0;
pad->last_ret = GST_FLOW_OK;
+ pad->added = TRUE;
structure = gst_caps_get_structure (GST_PAD_CAPS (pad), 0);
pad->is_sparse =
diff --git a/ext/ogg/gstoggdemux.h b/ext/ogg/gstoggdemux.h
index f9a8a968b..0cd11cb2c 100644
--- a/ext/ogg/gstoggdemux.h
+++ b/ext/ogg/gstoggdemux.h
@@ -112,8 +112,7 @@ struct _GstOggPad
gboolean discont;
GstFlowReturn last_ret; /* last return of _pad_push() */
- gboolean dynamic; /* True if the internal element had dynamic pads */
- guint padaddedid; /* The signal id for element::pad-added */
+ gboolean added;
};
struct _GstOggPadClass