#include <string.h> #include <gst/gst.h> GstElement *audiothread; GstElement *audioqueue; GstElement *audiodecode; GstElement *audiosink; void new_pad(GstElement *parse,GstPad *pad,GstElement *pipeline) { if (!strncmp(gst_pad_get_name(pad), "audio_", 6)) { fprintf(stderr,"have audio pad\n"); fprintf(stderr,"creating thread\n"); audiothread = gst_elementfactory_make("thread","audiothread"); gst_bin_add(GST_BIN(pipeline),audiothread); fprintf(stderr,"creating queue\n"); audioqueue = gst_elementfactory_make("queue","audioqueue"); gst_bin_add(GST_BIN(audiothread),audioqueue); gst_pad_connect(pad,gst_element_get_pad(audioqueue,"sink")); fprintf(stderr,"creating decoder\n"); audiodecode = gst_elementfactory_make("mad","audiodecode"); gst_bin_add(GST_BIN(audiothread),audiodecode); gst_element_connect(audioqueue,"src",audiodecode,"sink"); fprintf(stderr,"creating esdsink\n"); audiosink = gst_elementfactory_make("osssink","audiosink"); gst_bin_add(GST_BIN(audiothread),audiosink); gst_element_connect(audiodecode,"src",audiosink,"sink"); fprintf(stderr,"setting state to PLAYING\n"); gst_element_set_state(audiothread,GST_STATE_PLAYING); fprintf(stderr,"done dealing with new audio pad\n"); } } int main(int argc,char *argv[]) { GstElement *pipeline, *sourcethread, *src, *parse; //int i; gst_init(&argc,&argv); pipeline = gst_pipeline_new("pipeline"); sourcethread = gst_elementfactory_make("thread","sourcethread"); src = gst_elementfactory_make("disksrc","src"); gtk_object_set(GTK_OBJECT(src),"location","/home/omega/media/AlienSong.mpg",NULL); parse = gst_elementfactory_make("mpeg1parse","parse"); gtk_signal_connect(GTK_OBJECT(parse),"new_pad", GTK_SIGNAL_FUNC(new_pad),pipeline); gst_bin_add(GST_BIN(sourcethread),src); gst_bin_add(GST_BIN(sourcethread),parse); gst_element_connect(src,"src",parse,"sink"); gst_bin_add(GST_BIN(pipeline),sourcethread); gst_schedule_show(GST_ELEMENT_SCHED(pipeline)); gst_element_set_state(pipeline,GST_STATE_PLAYING); sleep(1); while (1) { // sleep(1); fprintf(stderr,"setting to PAUSED\n"); gst_element_set_state(pipeline,GST_STATE_PAUSED);fprintf(stderr,"paused... "); // sleep(1); fprintf(stderr,"setting to PLAYING\n"); gst_element_set_state(pipeline,GST_STATE_PLAYING);fprintf(stderr,"playing.\n"); } // for (i=0;i<10;i++) // while (1) // gst_bin_iterate(GST_BIN(pipeline)); }