*/
static void
+remove_fakesink(OctopusRoute *route)
+{
+ RouteDataGst *data;
+
+ data = (RouteDataGst *)g_object_get_data(G_OBJECT(route), "data");
+
+ if(data->fakesink) {
+ gst_element_set_state(data->fakesink, GST_STATE_NULL);
+ gst_bin_remove(GST_BIN(data->pipeline), data->fakesink);
+ data->fakesink = NULL;
+ }
+}
+
+static void
configure_endpoint(GstElement *elem,
const OctopusEndpoint *endpoint)
{
if(GST_PAD_TEMPLATE_DIRECTION(tmpl) == GST_PAD_SRC
&& GST_PAD_TEMPLATE_PRESENCE(tmpl) == GST_PAD_SOMETIMES)
{
+ RouteDataGst *data;
+
+ data = (RouteDataGst *)g_object_get_data(G_OBJECT(route), "data");
+ data->have_dynpads = TRUE;
+
g_debug("Connecting to dynamic pad signals");
g_signal_connect(G_OBJECT(gst_elem), "pad-added", G_CALLBACK(pad_added), route);
g_signal_connect(G_OBJECT(gst_elem), "pad-removed", G_CALLBACK(pad_removed), route);
srcpad = gst_element_get_static_pad(gst_elem, "src");
}
+ if(!srcpad && !data->have_dynpads)
+ remove_fakesink(route);
+
return srcpad;
}
data->ready = TRUE;
- if(data->fakesink) {
- gst_element_set_state(data->fakesink, GST_STATE_NULL);
- gst_bin_remove(GST_BIN(data->pipeline), data->fakesink);
- data->fakesink = NULL;
- }
+ remove_fakesink(route);
}
static void