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.
This commit is contained in:
Wim Taymans 2010-01-21 17:32:33 +01:00
parent 06e2d2791b
commit 4b9666aedb
2 changed files with 6 additions and 4 deletions

View file

@ -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 =

View file

@ -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