[prev in list] [next in list] [prev in thread] [next in thread]
List: gstreamer-devel
Subject: [gst-devel] Fwd: Hiiii
From: "Ronald S. Bultje" <rbultje () ronald ! bitfreak ! net>
Date: 2007-07-13 15:01:27
Message-ID: 34539a480707130801l6e5fe7ean9c471449ed8f922f () mail ! gmail ! com
[Download RAW message or body]
[Attachment #2 (multipart/alternative)]
can anyone help this guy?
Ronald
---------- Forwarded message ----------
From: Madhu TS <madhu@mobisy.com>
Date: Jul 13, 2007 10:59 AM
Subject: Hiiii
To: rbultje@ronald.bitfreak.net
Hi,
I am not able to use decodebin plugin to playback audio-video in
sync. Below is piece of code which I am trying to run...please help me.
#include <gst/gst.h>
GstElement *pipeline, *video,*audio;
static gboolean my_bus_callback(GstBus *bus,GstMessage *msg,gpointer data)
{
GMainLoop *loop = data;
switch (GST_MESSAGE_TYPE(msg))
{
case GST_MESSAGE_EOS:
g_print ("End-of-stream\n");
g_main_loop_quit (loop);
break;
case GST_MESSAGE_ERROR:
{
gchar *debug = NULL;
GError *err = NULL;
gst_message_parse_error (msg, &err, &debug);
g_print ("Error: %s\n", err->message);
g_error_free (err);
g_main_loop_quit (loop);
break;
}
default:
break;
}
return(TRUE);
}
void cb_newpad_video(GstElement *decodebin,GstPad *pad,gboolean
last,gpointer data)
{
GstCaps *caps;
GstStructure *str;
GstPad *videopad;
/* only link once */
videopad = gst_element_get_pad (video, "sink");
if (GST_PAD_IS_LINKED (videopad))
{
g_object_unref (videopad);
return;
}
/* check media type */
caps = gst_pad_get_caps (pad);
str = gst_caps_get_structure (caps, 0);
if (!g_strrstr (gst_structure_get_name (str), "video"))
{
gst_caps_unref (caps);
gst_object_unref (videopad);
return;
}
gst_caps_unref (caps);
/* link'n'play */
gst_pad_link (pad,videopad);
}
void cb_newpad_audio(GstElement *decodebin,GstPad *pad,gboolean
last,gpointer data)
{
GstCaps *caps;
GstStructure *str;
GstPad *audiopad;
/* only link once */
audiopad = gst_element_get_pad (audio, "sink");
if (GST_PAD_IS_LINKED (audiopad))
{
g_object_unref (audiopad);
return;
}
/* check media type */
caps = gst_pad_get_caps (pad);
str = gst_caps_get_structure (caps, 0);
if (!g_strrstr (gst_structure_get_name (str), "audio")) {
gst_caps_unref (caps);
gst_object_unref (audiopad);
return;
}
gst_caps_unref (caps);
/* link'n'play */
gst_pad_link (pad, audiopad);
}
gint main (gint argc,gchar *argv[])
{
GMainLoop *loop;
GstElement *src, *dec, *csp,
*sink1,*sink2,*aconv,*vqueue,*avqueue,*aresample;
GstPad *videopad,*audiopad;
/* init GStreamer */
gst_init (&argc, &argv);
loop = g_main_loop_new (NULL, FALSE);
/* make sure we have input */
if (argc != 2)
{
g_print ("Usage: %s <filename>\n", argv[0]);
return -1;
}
/* setup */
pipeline = gst_pipeline_new ("pipeline");
gst_bus_add_watch (gst_pipeline_get_bus (GST_PIPELINE
(pipeline)),my_bus_callback, loop);
src = gst_element_factory_make ("filesrc", "source");
g_object_set (G_OBJECT (src), "location", argv[1], NULL);
dec = gst_element_factory_make ("decodebin", "decoder");
g_signal_connect (dec, "new-decoded-pad", G_CALLBACK (cb_newpad_video),
NULL);
g_signal_connect (dec, "new-decoded-pad", G_CALLBACK (cb_newpad_audio),
NULL);
gst_bin_add_many (GST_BIN (pipeline), src, dec, NULL);
gst_element_link (src, dec);
/* create video output */
video = gst_bin_new ("videobin");
vqueue=gst_element_factory_make ("vqueue", "vqueue");
csp = gst_element_factory_make ("ffmpegcolorspace", "csp");
videopad = gst_element_get_pad (vqueue, "sink");
sink1 = gst_element_factory_make ("xvimagesink", "sink1");
gst_bin_add_many (GST_BIN (video),vqueue,csp, sink1, NULL);
gst_element_link_many(vqueue,csp,sink1);
gst_element_add_pad (video,gst_ghost_pad_new ("vsink",videopad));
gst_object_unref (videopad);
gst_bin_add (GST_BIN (pipeline), video);
/*Create Audio Output*/
audio = gst_bin_new ("audiobin");
aqueue=gst_element_factory_make ("queue", "aqueue");
aconv = gst_element_factory_make ("audioconvert","aconv");
audiopad = gst_element_get_pad (aqueue, "sink");
aresample = gst_element_factory_make ("audioresample","aresample");
sink2 = gst_element_factory_make ("alsasink", "sink2");
gst_bin_add_many (GST_BIN (audio),aqueue,aconv,aresample,sink2, NULL);
gst_element_link_many(aqueue,aconv,aresample,sink2);
gst_element_add_pad (audio,gst_ghost_pad_new ("asink",audiopad));
gst_object_unref (audiopad);
gst_bin_add (GST_BIN (pipeline), audio);
/* run */
gst_element_set_state (pipeline,GST_STATE_PLAYING);
g_print ("Running ...\n");
g_main_loop_run (loop);
/* cleanup */
gst_element_set_state (pipeline, GST_STATE_NULL);
gst_object_unref (GST_OBJECT (pipeline));
return 0;
}
Looking forward for you help.
Cheers,
Madhu.T.S
[Attachment #5 (text/html)]
can anyone help this guy?<br><br>Ronald<br><br>---------- Forwarded message \
----------<br><span class="gmail_quote">From: <b class="gmail_sendername">Madhu \
TS</b> <<a href="mailto:madhu@mobisy.com">madhu@mobisy.com</a>> <br>Date: Jul \
13, 2007 10:59 AM<br>Subject: Hiiii<br>To: <a \
href="mailto:rbultje@ronald.bitfreak.net">rbultje@ronald.bitfreak.net</a><br><br></span>Hi,<br> \
I am not able to use decodebin plugin to playback audio-video in sync. Below is piece \
of code which I am trying to run...please help me. <br>#include \
<gst/gst.h><br>GstElement *pipeline, *video,*audio; <br>static gboolean \
my_bus_callback(GstBus *bus,GstMessage *msg,gpointer data)<br>{<br> \
GMainLoop *loop = data;<br><br> switch (GST_MESSAGE_TYPE(msg)) \
<br> {<br> case \
GST_MESSAGE_EOS:<br> \
g_print ("End-of-stream\n"); \
<br> \
g_main_loop_quit (loop);<br> \
break;<br> case GST_MESSAGE_ERROR: \
<br> \
{<br> \
gchar *debug = NULL;<br> \
GError *err = NULL;<br><br> \
gst_message_parse_error (msg, &err, &debug); \
<br> \
g_print ("Error: %s\n", \
err->message);<br> \
g_error_free (err);<br> \
g_main_loop_quit \
(loop);<br> \
break;<br> \
}<br> \
default:<br> \
break; <br> }<br> <br> \
return(TRUE);<br>}<br><br>void cb_newpad_video(GstElement *decodebin,GstPad \
*pad,gboolean last,gpointer \
data)<br> \
<br>{<br> GstCaps *caps;<br> GstStructure *str;<br> GstPad \
*videopad; <br> /* only link once */<br> videopad = gst_element_get_pad \
(video, "sink");<br> if (GST_PAD_IS_LINKED (videopad)) <br> \
{<br> g_object_unref (videopad);<br> \
return;<br> }<br> /* check media type */ <br>
caps = gst_pad_get_caps (pad);<br> str = gst_caps_get_structure (caps, \
0);<br> if (!g_strrstr (gst_structure_get_name (str), "video")) \
<br> {<br> gst_caps_unref (caps);<br> \
gst_object_unref (videopad); <br> return;<br> }<br> \
gst_caps_unref (caps);<br> /* link'n'play */<br> gst_pad_link \
(pad,videopad);<br>}<br><br>void cb_newpad_audio(GstElement *decodebin,GstPad \
*pad,gboolean last,gpointer \
data)<br> \
<br>{<br> GstCaps *caps;<br> GstStructure *str;<br> GstPad \
*audiopad;<br> /* only link once */<br> audiopad = gst_element_get_pad \
(audio, "sink");<br> if (GST_PAD_IS_LINKED (audiopad)) <br> \
{<br> g_object_unref (audiopad); <br> \
return;<br> }<br> /* check media type */<br> caps = \
gst_pad_get_caps (pad);<br> str = gst_caps_get_structure (caps, 0);<br> \
if (!g_strrstr (gst_structure_get_name (str), "audio")) \
{<br> gst_caps_unref (caps); <br> \
gst_object_unref (audiopad);<br> return;<br> }<br> \
gst_caps_unref (caps);<br> /* link'n'play */<br> gst_pad_link \
(pad, audiopad);<br>}<br><br><br>gint main (gint argc,gchar *argv[])<br>{<br> \
GMainLoop *loop; <br> GstElement *src, *dec, *csp, \
*sink1,*sink2,*aconv,*vqueue,*avqueue,*aresample;<br> GstPad \
*videopad,*audiopad;<br> /* init GStreamer */<br> gst_init (&argc, \
&argv);<br> loop = g_main_loop_new (NULL, FALSE); <br> /* make sure \
we have input */<br> if (argc != 2) <br> {<br> g_print \
("Usage: %s <filename>\n", argv[0]);<br> return \
-1;<br> }<br> /* setup */<br> pipeline = gst_pipeline_new \
("pipeline"); <br> gst_bus_add_watch (gst_pipeline_get_bus \
(GST_PIPELINE (pipeline)),my_bus_callback, loop);<br> src = \
gst_element_factory_make ("filesrc", "source");<br> \
g_object_set (G_OBJECT (src), "location", argv[1], NULL); <br> dec = \
gst_element_factory_make ("decodebin", "decoder");<br> \
g_signal_connect (dec, "new-decoded-pad", G_CALLBACK (cb_newpad_video), \
NULL);<br> g_signal_connect (dec, "new-decoded-pad", G_CALLBACK \
(cb_newpad_audio), NULL); <br> gst_bin_add_many (GST_BIN (pipeline), src, dec, \
NULL);<br> gst_element_link (src, dec);<br> /* create video output \
*/<br> video = gst_bin_new ("videobin");<br> \
vqueue=gst_element_factory_make ("vqueue", "vqueue"); <br> \
csp = gst_element_factory_make ("ffmpegcolorspace", \
"csp");<br> videopad = gst_element_get_pad (vqueue, \
"sink");<br> sink1 = gst_element_factory_make \
("xvimagesink", "sink1"); <br> gst_bin_add_many (GST_BIN \
(video),vqueue,csp, sink1, NULL);<br> \
gst_element_link_many(vqueue,csp,sink1);<br> gst_element_add_pad \
(video,gst_ghost_pad_new ("vsink",videopad));<br> gst_object_unref \
(videopad); <br> gst_bin_add (GST_BIN (pipeline), video);<br> /*Create \
Audio Output*/<br> audio = gst_bin_new ("audiobin");<br> \
aqueue=gst_element_factory_make ("queue", "aqueue");<br> \
aconv = gst_element_factory_make ("audioconvert","aconv"); \
<br> audiopad = gst_element_get_pad (aqueue, "sink");<br> \
aresample = gst_element_factory_make \
("audioresample","aresample");<br> sink2 = \
gst_element_factory_make ("alsasink", "sink2"); <br> \
gst_bin_add_many (GST_BIN (audio),aqueue,aconv,aresample,sink2, NULL);<br> \
gst_element_link_many(aqueue,aconv,aresample,sink2);<br> gst_element_add_pad \
(audio,gst_ghost_pad_new ("asink",audiopad));<br> gst_object_unref \
(audiopad); <br> gst_bin_add (GST_BIN (pipeline), audio);<br> /* run \
*/<br> gst_element_set_state (pipeline,GST_STATE_PLAYING);<br> g_print \
("Running ...\n");<br> g_main_loop_run (loop);<br> /* cleanup \
*/<br> gst_element_set_state (pipeline, GST_STATE_NULL); <br> \
gst_object_unref (GST_OBJECT (pipeline));<br> return 0;<br>}<br><br><br>Looking \
forward for you help.<br><br>Cheers,<br>Madhu.T.S<br><br><br><br><br>
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
gstreamer-devel mailing list
gstreamer-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic