[gst-devel] How to dynamically add and remove branch to a "tee" element?

Peter Cai newptcai at gmail.com
Fri Nov 6 15:37:45 CET 2009


After a lot of search, I found this is not quite simple as I used to
think.  The coding following only work when 2 sink is linked to the
tee.
When the 3rd comes, all 3 sink doesn't work.

What is the correct way to add and remove branch to a "tee"?
On IRC, I was told to try these

1. setting sink "asycn = FALSE"
2. add a queue between tee and sink
3. use pad instead of gst_element_link

None of them works.

        GstElement* dd = gst_element_factory_make("directdrawsink", NULL);
        g_object_set(dd, "async", FALSE, NULL);
        gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(dd), (gulong)handle);

        gst_element_set_state (dd, GST_STATE_PAUSED);
        gst_bin_add(GST_BIN (self->priv->pipeline), dd);

        if(!gst_element_link (self->priv->tee, dd))
        {
            vivs_warning("Can not link tee to directdrawsink");
        }

        if(self->priv->sink_num == 1)
            gst_element_set_state (self->priv->pipeline, GST_STATE_PLAYING);
        else
            gst_element_set_state (dd, GST_STATE_PLAYING);
      self->priv->sink_num += 1


--
look to the things around you,the immediate world around you, if you
are alive,it will mean something to you ——Paul Strand




More information about the gstreamer-devel mailing list