From 89f16c31e9a43bd634e2931ef6fed64787756901 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Mon, 25 Oct 2004 17:43:51 +0000 Subject: examples/seeking/: Added some more examples, update others. Original commit message from CVS: * examples/seeking/Makefile.am: * examples/seeking/cdplayer.c: (update_scale): * examples/seeking/chained.c: (unlinked), (new_pad), (main): * examples/seeking/playbin.c: (make_playerbin_pipeline), (format_value), (update_scale), (iterate), (start_seek), (stop_seek), (print_media_info), (play_cb), (pause_cb), (stop_cb), (print_usage), (main): Added some more examples, update others. --- examples/seeking/chained.c | 104 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 examples/seeking/chained.c (limited to 'examples/seeking/chained.c') diff --git a/examples/seeking/chained.c b/examples/seeking/chained.c new file mode 100644 index 00000000..5bd0e12d --- /dev/null +++ b/examples/seeking/chained.c @@ -0,0 +1,104 @@ +#include +#include +#include + +static GstElement *bin; + +static void +unlinked (GstPad * pad, GstPad * peerpad, GstElement * pipeline) +{ + gst_element_set_state (pipeline, GST_STATE_PAUSED); + gst_bin_remove (GST_BIN (pipeline), bin); + gst_element_set_state (bin, GST_STATE_READY); + gst_element_set_state (pipeline, GST_STATE_PLAYING); +} + +static void +new_pad (GstElement * elem, GstPad * newpad, GstElement * pipeline) +{ + GstScheduler *sched; + GstClock *clock; + + g_print ("new pad %s\n", gst_pad_get_name (newpad)); + + gst_element_set_state (pipeline, GST_STATE_PAUSED); + gst_bin_add (GST_BIN (pipeline), bin); + + sched = gst_element_get_scheduler (GST_ELEMENT (pipeline)); + clock = gst_scheduler_get_clock (sched); + gst_scheduler_set_clock (sched, clock); + + gst_pad_link (newpad, gst_element_get_pad (bin, "sink")); + + g_signal_connect (G_OBJECT (newpad), "unlinked", G_CALLBACK (unlinked), + pipeline); + + gst_element_set_state (pipeline, GST_STATE_PLAYING); +} + +int +main (int argc, char **argv) +{ + GstElement *pipeline; + GstElement *filesrc; + GstElement *oggdemux; + GstElement *vorbisdec; + GstElement *audioconvert; + GstElement *osssink; + + gst_init (&argc, &argv); + + if (argc < 2) { + g_print ("usage: %s \n", argv[0]); + return (-1); + } + + pipeline = gst_pipeline_new ("pipeline"); + + filesrc = gst_element_factory_make ("filesrc", "filesrc"); + g_assert (filesrc); + g_object_set (G_OBJECT (filesrc), "location", argv[1], NULL); + + oggdemux = gst_element_factory_make ("oggdemux", "oggdemux"); + g_assert (oggdemux); + + gst_bin_add (GST_BIN (pipeline), filesrc); + gst_bin_add (GST_BIN (pipeline), oggdemux); + + gst_element_link_pads (filesrc, "src", oggdemux, "sink"); + + g_signal_connect (G_OBJECT (oggdemux), "new_pad", G_CALLBACK (new_pad), + pipeline); + + bin = gst_bin_new ("bin"); + vorbisdec = gst_element_factory_make ("vorbisdec", "vorbisdec"); + g_assert (vorbisdec); + audioconvert = gst_element_factory_make ("audioconvert", "audioconvert"); + g_assert (audioconvert); + osssink = gst_element_factory_make ("osssink", "osssink"); + g_assert (osssink); + gst_bin_add (GST_BIN (bin), vorbisdec); + gst_bin_add (GST_BIN (bin), audioconvert); + gst_bin_add (GST_BIN (bin), osssink); + + gst_element_link_pads (vorbisdec, "src", audioconvert, "sink"); + gst_element_link_pads (audioconvert, "src", osssink, "sink"); + + gst_element_add_ghost_pad (bin, gst_element_get_pad (vorbisdec, "sink"), + "sink"); + + g_object_ref (G_OBJECT (bin)); + + g_signal_connect (pipeline, "deep_notify", + G_CALLBACK (gst_element_default_deep_notify), NULL); + + gst_element_set_state (pipeline, GST_STATE_PLAYING); + + while (gst_bin_iterate (GST_BIN (pipeline))) + /* nop */ ; + + /* stop probe */ + gst_element_set_state (pipeline, GST_STATE_NULL); + + return 0; +} -- cgit v1.2.1