From: Michael S. <mr...@gm...> - 2009-05-19 16:36:33
|
I have the following rough code trying to get a pipeline going. All the GstElement * variables are global to the file so I left those out. But every call to gst_element_factory_make works with no NULL values return. I want the following: uridecodebin ---> volume --> equalizer-10band --> alsasink If I connect uridecodebin directly to the alsasink sink everything works, but when I connect the pad in on_pad_connect to volume "sink" or mixer "sink" I get an Internal Data Error. Volume and mixer sink accepts raw data, uridecodebin outputs raw data. If I launch gst-launch with this chain everything works. What am I doing wrong? ---------------------------------------------------------- ---------------------------------------------------------- static void on_pad_added (GstElement *element, GstPad *pad, gpointer data) { GstPad *sinkpad; sinkpad = gst_element_get_static_pad (mixer, "sink"); if(sinkpad==NULL) printf("Sink pad is null\n"); gst_pad_link (pad, sinkpad); gst_object_unref (sinkpad); } /* * Set up the streaming pipleine * * */ GstElement * init_streamer(void) { GstElement *pipeline; /* create pipeline */ pipeline = gst_pipeline_new ("rpm streamer"); src=gst_element_factory_make ("uridecodebin", "play"); if(!src) { printf("Failed to create source\n"); exit(0); } audio=gst_element_factory_make ("alsasink", "output"); gain=gst_element_factory_make("volume","gain"); if(!gain) { printf("Failed to create gain\n"); exit(0); } mixer=gst_element_factory_make("equalizer-10bands","mix"); if(!mixer) { printf("Failed to create mixer\n"); exit(0); } ac=gst_element_factory_make("audioconvert","convert"); if(!ac) { printf("Failed to create audioconvert\n"); exit(0); } // g_object_set (G_OBJECT (gain), "volume", 1.0, NULL); g_signal_connect (src, "pad-added", G_CALLBACK (on_pad_added), NULL); //pipeline=gst_element_factory_make ("playbin", "play"); gst_bin_add_many (GST_BIN (pipeline), src, mixer, audio, NULL); return(pipeline); } |