Hi,<br> I'm able to play the wav file by using gst-launch as fallows<br><br>gst-launch-0.10 filesrc location=~/songs/4voice.wav ! wavparse ! audioconvert ! alsasink<br>Setting pipeline to PAUSED ...<br>Pipeline is PREROLLING ...<br>
Pipeline is PREROLLED ...<br>Setting pipeline to PLAYING ...<br>New clock: GstAudioSinkClock<br>Caught interrupt -- handling interrupt.<br>Interrupt: Setting pipeline to PAUSED ...<br>Execution ended after 1914601000 ns.<br>
Setting pipeline to PAUSED ...<br>Setting pipeline to READY ...<br>Setting pipeline to NULL ...<br>FREEING pipeline ...<br><br><br>I modified the helloworld code to play the wav as<br>1. I created "waveparse" in place of oggdemux and vorbis parser elements<br>
2. Added filesrc, waveparse and alsasink to the pipeline and linked. <br><br>--<br>int<br>main ( int argc, char *argv[] )<br>{<br> GMainLoop *loop;<br> GstBus *bus;<br><br> gst_init ( &argc, &argv );<br>
loop = g_main_loop_new ( NULL, FALSE );<br><br> pipeline = gst_pipeline_new ( "audio-player" );<br> source = gst_element_factory_make ( "filesrc", "file-source" );<br>
//parser = gst_element_factory_make ( "oggdemux", "ogg-parser" );<br>
parser = gst_element_factory_make ( "wavparse", "wave-parser" );<br> //decoder = gst_element_factory_make ( "vorbisdec", "vorbis-decoder" );<br> conv = gst_element_factory_make ( "audioconvert", "converter" );<br>
sink = gst_element_factory_make ( "alsasink", "alsa-output" );<br><br> if ( !pipeline || !source || !parser || !conv || !sink ) {<br> g_print ( "One element could not be created\n" );<br>
return -1;<br> }<br><br> g_object_set (G_OBJECT (source), "location", argv[1], NULL );<br><br> bus = gst_pipeline_get_bus ( GST_PIPELINE ( pipeline ) );<br> gst_bus_add_watch ( bus, bus_call, loop );<br>
gst_object_unref ( bus );<br><br> gst_bin_add_many ( GST_BIN ( pipeline), source, parser,<br> conv, sink, NULL );<br><br> //gst_element_link ( source, parser );<br> gst_element_link_many ( source, parser, conv, sink, NULL );<br>
g_signal_connect ( parser, "pad-added", G_CALLBACK ( new_pad ), NULL );<br><br> g_print ( "Setting to Playing\n" );<br> gst_element_set_state ( pipeline, GST_STATE_PLAYING );<br>
g_print ( "Running\n" );<br>
g_main_loop_run ( loop );<br><br> g_print ( "Returned, stopping playback\n" );<br> gst_element_set_state ( pipeline, GST_STATE_NULL );<br> g_print ( "Deleting pipeline\n" );<br>
<br> gst_object_unref ( GST_OBJECT ( pipeline ) );<br><br> return 0;<br>}<br>--<br><br><br>When i tried to run the fallowing code, i'm getting fallowing errors<br>--<br>./a.out ~/songs/4voice.wav<br>Setting to Playing<br>
Running<br>Dynamic pad created, linking parser/decoder<br><br>(a.out:20136): GStreamer-CRITICAL **: gst_element_get_static_pad: assertion `GST_IS_ELEMENT (element)' failed<br><br>(a.out:20136): GStreamer-CRITICAL **: gst_pad_link_prepare: assertion `GST_IS_PAD (sinkpad)' failed<br>
<br>(a.out:20136): GStreamer-CRITICAL **: gst_object_unref: assertion `object != NULL' failed<br>Error: Internal data flow error.<br>Returned, stopping playback<br>Deleting pipeline<br>--<br><br>If i do without the dynamic pads, as<br>
--<br>int<br>main (int argc, char *argv[])<br>{<br> GstElement *bin, *filesrc, *decoder, *audiosink;<br> GstElement *conv, *resample;<br><br> gst_init (&argc, &argv);<br><br> if (argc != 2) {<br> g_print ("usage: %s <mp3 file>\n", argv[0]);<br>
exit (-1);<br> }<br><br> /* create a new bin to hold the elements */<br> bin = gst_pipeline_new ("pipeline");<br> g_assert (bin);<br><br> /* create a disk reader */<br> filesrc = gst_element_factory_make ("filesrc", "disk_source");<br>
g_assert (filesrc);<br> g_object_set (G_OBJECT (filesrc), "location", argv[1], NULL);<br><br> /* now it's time to get the decoder */<br> decoder = gst_element_factory_make ("wavparse", "decode");<br>
if (!decoder) {<br> g_print ("could not find plugin \"mad\"");<br> return -1;<br> }<br><br> /* also, we need to add some converters to make sure the audio stream<br> * from the decoder is converted into a format the audio sink can<br>
* understand (if necessary) */<br> conv = gst_element_factory_make ("audioconvert", "audioconvert");<br> if (!conv) {<br> g_print ("could not create \"audioconvert\" element!");<br>
return -1;<br> }<br> resample = gst_element_factory_make ("audioresample", "audioresample");<br> if (!conv) {<br> g_print ("could not create \"audioresample\" element!");<br>
return -1;<br> }<br><br> /* and an audio sink */<br> audiosink = gst_element_factory_make ("alsasink", "play_audio");<br> g_assert (audiosink);<br><br> /* add objects to the main pipeline */<br>
gst_bin_add_many (GST_BIN (bin), filesrc, decoder, conv,<br> resample, audiosink, NULL);<br><br> /* link the elements */<br> gst_element_link_many (filesrc, decoder, conv, resample, audiosink, NULL);<br> g_signal_connect ( decoder, "pad-added", G_CALLBACK (new_pad), NULL );<br>
<br> /* start playing */<br> gst_element_set_state (bin, GST_STATE_PLAYING);<br><br> /* Run event loop listening for bus messages until EOS or ERROR */<br> event_loop (bin);<br><br> /* stop the bin */<br> gst_element_set_state (bin, GST_STATE_NULL);<br>
<br> exit (0);<br>}<br><br>I'm getting<br>--<br>./a.out ~/songs/4voice.wav<br>Dynamic pad created, linking parser/decoder<br>ERROR: from element /pipeline/decode: Internal data flow error.<br>Additional debug info:<br>
gstwavparse.c(1719): gst_wavparse_loop (): /pipeline/decode:<br>streaming task paused, reason not-linked (-1)<br>--<br><br>It would be of great help if somebody look into this.<br><br><br>/Ganesh