8 static GstElement *bin;
11 unlinked (GstPad * pad, GstPad * peerpad, GstElement * pipeline)
13 gst_element_set_state (pipeline, GST_STATE_PAUSED);
14 gst_bin_remove (GST_BIN (pipeline), bin);
15 gst_element_set_state (bin, GST_STATE_READY);
16 gst_element_set_state (pipeline, GST_STATE_PLAYING);
20 new_pad (GstElement * elem, GstPad * newpad, GstElement * pipeline)
25 g_print ("new pad %s\n", gst_pad_get_name (newpad));
27 gst_element_set_state (pipeline, GST_STATE_PAUSED);
28 gst_bin_add (GST_BIN (pipeline), bin);
30 sched = gst_element_get_scheduler (GST_ELEMENT (pipeline));
31 clock = gst_scheduler_get_clock (sched);
32 gst_scheduler_set_clock (sched, clock);
34 gst_pad_link (newpad, gst_element_get_pad (bin, "sink"));
36 g_signal_connect (G_OBJECT (newpad), "unlinked", G_CALLBACK (unlinked),
39 gst_element_set_state (pipeline, GST_STATE_PLAYING);
43 main (int argc, char **argv)
48 GstElement *vorbisdec;
49 GstElement *audioconvert;
50 GstElement *audiosink;
52 gst_init (&argc, &argv);
55 g_print ("usage: %s <oggfile>\n", argv[0]);
59 pipeline = gst_pipeline_new ("pipeline");
61 filesrc = gst_element_factory_make ("filesrc", "filesrc");
63 g_object_set (G_OBJECT (filesrc), "location", argv[1], NULL);
65 oggdemux = gst_element_factory_make ("oggdemux", "oggdemux");
68 gst_bin_add (GST_BIN (pipeline), filesrc);
69 gst_bin_add (GST_BIN (pipeline), oggdemux);
71 gst_element_link_pads (filesrc, "src", oggdemux, "sink");
73 g_signal_connect (G_OBJECT (oggdemux), "new_pad", G_CALLBACK (new_pad),
76 bin = gst_bin_new ("bin");
77 vorbisdec = gst_element_factory_make ("vorbisdec", "vorbisdec");
79 audioconvert = gst_element_factory_make ("audioconvert", "audioconvert");
80 g_assert (audioconvert);
81 audiosink = gst_element_factory_make (DEFAULT_AUDIOSINK, DEFAULT_AUDIOSINK);
83 gst_bin_add (GST_BIN (bin), vorbisdec);
84 gst_bin_add (GST_BIN (bin), audioconvert);
85 gst_bin_add (GST_BIN (bin), audiosink);
87 gst_element_link_pads (vorbisdec, "src", audioconvert, "sink");
88 gst_element_link_pads (audioconvert, "src", audiosink, "sink");
90 gst_element_add_ghost_pad (bin, gst_element_get_pad (vorbisdec, "sink"),
93 g_object_ref (G_OBJECT (bin));
95 g_signal_connect (pipeline, "deep_notify",
96 G_CALLBACK (gst_element_default_deep_notify), NULL);
98 gst_element_set_state (pipeline, GST_STATE_PLAYING);
100 while (gst_bin_iterate (GST_BIN (pipeline)))
104 gst_element_set_state (pipeline, GST_STATE_NULL);