rendered paste body/* * gcc -Wall -g `pkg-config gstreamer-0.9 --cflags --libs` states.c -o states */ #include <stdio.h>#include <gst/gst.h>#define SINK_NAME "alsasink"#define SRC_NAME "sinesrc"int main(int argc, char **argv) { GstElement *bin; /* elements used in pipeline */ GstElement *sink; GstElement *src; GstClock *clock; GstClockID clock_id; GstClockReturn wait_ret; /* init gstreamer */ gst_init(&argc, &argv); g_log_set_always_fatal(G_LOG_LEVEL_WARNING); /* create a new bin to hold the elements */ bin = gst_pipeline_new ("song"); clock = gst_pipeline_get_clock (GST_PIPELINE (bin)); /* make a sink */ if(!(sink = gst_element_factory_make (SINK_NAME, "sink"))) { fprintf(stderr,"Can't create element \""SINK_NAME"\"\n");exit (-1); } /* make sources */ if(!(src = gst_element_factory_make (SRC_NAME, "src"))) { fprintf(stderr,"Can't create element \""SRC_NAME"\"\n");exit (-1); } g_object_set(src,"freq",440,NULL); /* add objects to the main bin */ gst_bin_add_many (GST_BIN (bin), src, sink, NULL); /* link elements */ if(!gst_element_link_many (src, sink, NULL)) { fprintf(stderr,"Can't link elements\n");exit (-1); } clock_id = gst_clock_new_single_shot_id (clock, gst_clock_get_time (clock)+(5 * GST_SECOND)); /* start playing */ if(gst_element_set_state (bin, GST_STATE_PLAYING)==GST_STATE_CHANGE_FAILURE) { fprintf(stderr,"Can't start playing\n");exit(-1); } /* wait */ puts("play everything"); if ((wait_ret = gst_clock_id_wait (clock_id, NULL)) != GST_CLOCK_OK) { GST_WARNING ("clock_id_wait returned: %d", wait_ret); } /* stop the pipeline */ gst_element_set_state (bin, GST_STATE_NULL); /* we don't need a reference to these objects anymore */ g_object_unref (G_OBJECT (clock)); g_object_unref (G_OBJECT (bin)); exit (0);}