-// GstCaps *caps;
-// const GstStructure *structure;
-// caps = gst_pad_get_caps(name);
-// structure = gst_caps_get_structure(caps, 0);
- char elemname[17];
- sprintf(elemname, "%s_pars", name);
- GstElement *parser = gst_element_factory_make("ssaparse", elemname);
- eDebug ("ssaparse %s = %p", elemname, parser);
- sprintf(elemname, "%s_sink", name);
- GstElement *sink = gst_element_factory_make("fakesink", elemname);
- eDebug ("fakesink %s = %p", elemname, sink);
- g_object_set (G_OBJECT(sink), "signal-handoffs", TRUE, NULL);
- gst_bin_add_many(pipeline, parser, sink, NULL);
- GstPadLinkReturn res = gst_pad_link(pad, gst_element_get_static_pad(parser, "sink"));
- eDebug ("parser link = %d", res);
- res = gst_element_link(parser, sink);
- eDebug ("sink link = %d", res);
- g_signal_connect(sink, "handoff", G_CALLBACK(gstCBsubtitleAvail), _this);
+ GstElement *switch_subtitles = gst_bin_get_by_name(pipeline,"switch_subtitles");
+ if ( !switch_subtitles )
+ {
+ switch_subtitles = gst_element_factory_make ("input-selector", "switch_subtitles");
+ if ( !switch_subtitles )
+ return;
+ GstElement *parser = gst_element_factory_make("ssaparse", "parse_subtitles");
+ GstElement *sink = gst_element_factory_make("fakesink", "sink_subtitles");
+ gst_bin_add_many(pipeline, switch_subtitles, parser, sink, NULL);
+ gst_element_link(switch_subtitles, parser);
+ gst_element_link(parser, sink);
+ g_object_set (G_OBJECT(sink), "signal-handoffs", TRUE, NULL);
+ g_signal_connect(sink, "handoff", G_CALLBACK(gstCBsubtitleAvail), _this);
+ }
+ GstPad *sinkpad = gst_element_get_request_pad (switch_subtitles, "sink%d");
+ gst_pad_link(pad, sinkpad);