[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> &lt;<a href="mailto:madhu@mobisy.com">madhu@mobisy.com</a>&gt; <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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
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 \
&lt;gst/gst.h&gt;<br>GstElement *pipeline, *video,*audio; <br>static gboolean \
my_bus_callback(GstBus *bus,GstMessage *msg,gpointer data)<br>{<br>&nbsp;&nbsp; \
GMainLoop *loop = data;<br><br>&nbsp;&nbsp; switch (GST_MESSAGE_TYPE(msg)) \
<br>&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case \
GST_MESSAGE_EOS:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
g_print (&quot;End-of-stream\n&quot;); \
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
g_main_loop_quit (loop);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case GST_MESSAGE_ERROR: \
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \
&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
gchar *debug = NULL;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
GError *err = NULL;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
gst_message_parse_error (msg, &amp;err, &amp;debug); \
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
g_print (&quot;Error: %s\n&quot;, \
err-&gt;message);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
g_error_free (err);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; \
&nbsp; g_main_loop_quit \
(loop);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
default:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
break; <br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; \
return(TRUE);<br>}<br><br>void cb_newpad_video(GstElement *decodebin,GstPad \
*pad,gboolean last,gpointer \
data)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
<br>{<br>&nbsp; GstCaps *caps;<br>&nbsp; GstStructure *str;<br>&nbsp; GstPad \
*videopad; <br>&nbsp; /* only link once */<br>&nbsp; videopad = gst_element_get_pad \
(video, &quot;sink&quot;);<br>&nbsp; if (GST_PAD_IS_LINKED (videopad)) <br>&nbsp; \
{<br>&nbsp;&nbsp;&nbsp; g_object_unref (videopad);<br>&nbsp;&nbsp;&nbsp; \
return;<br>&nbsp; }<br>&nbsp; /* check media type */ <br>
&nbsp; caps = gst_pad_get_caps (pad);<br>&nbsp; str = gst_caps_get_structure (caps, \
0);<br>&nbsp; if (!g_strrstr (gst_structure_get_name (str), &quot;video&quot;)) \
<br>&nbsp; {<br>&nbsp;&nbsp;&nbsp; gst_caps_unref (caps);<br>&nbsp;&nbsp;&nbsp; \
gst_object_unref (videopad); <br>&nbsp;&nbsp;&nbsp; return;<br>&nbsp; }<br>&nbsp; \
gst_caps_unref (caps);<br>&nbsp; /* link&#39;n&#39;play */<br>&nbsp; gst_pad_link \
(pad,videopad);<br>}<br><br>void cb_newpad_audio(GstElement *decodebin,GstPad \
*pad,gboolean last,gpointer \
data)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
 <br>{<br>&nbsp; GstCaps *caps;<br>&nbsp; GstStructure *str;<br>&nbsp; GstPad \
*audiopad;<br>&nbsp; /* only link once */<br>&nbsp; audiopad = gst_element_get_pad \
(audio, &quot;sink&quot;);<br>&nbsp; if (GST_PAD_IS_LINKED (audiopad)) <br>&nbsp; \
{<br>&nbsp;&nbsp;&nbsp; g_object_unref (audiopad); <br>&nbsp;&nbsp;&nbsp; \
return;<br>&nbsp; }<br>&nbsp; /* check media type */<br>&nbsp; caps = \
gst_pad_get_caps (pad);<br>&nbsp; str = gst_caps_get_structure (caps, 0);<br>&nbsp; \
if (!g_strrstr (gst_structure_get_name (str), &quot;audio&quot;)) \
{<br>&nbsp;&nbsp;&nbsp; gst_caps_unref (caps); <br>&nbsp;&nbsp;&nbsp; \
gst_object_unref (audiopad);<br>&nbsp;&nbsp;&nbsp; return;<br>&nbsp; }<br>&nbsp; \
gst_caps_unref (caps);<br>&nbsp; /* link&#39;n&#39;play */<br>&nbsp; gst_pad_link \
(pad, audiopad);<br>}<br><br><br>gint main (gint argc,gchar *argv[])<br>{<br>&nbsp; \
GMainLoop *loop; <br>&nbsp; GstElement *src, *dec, *csp, \
*sink1,*sink2,*aconv,*vqueue,*avqueue,*aresample;<br>&nbsp; GstPad \
*videopad,*audiopad;<br>&nbsp; /* init GStreamer */<br>&nbsp; gst_init (&amp;argc, \
&amp;argv);<br>&nbsp; loop = g_main_loop_new (NULL, FALSE); <br>&nbsp; /* make sure \
we have input */<br>&nbsp; if (argc != 2) <br>&nbsp; {<br>&nbsp;&nbsp;&nbsp; g_print \
(&quot;Usage: %s &lt;filename&gt;\n&quot;, argv[0]);<br>&nbsp;&nbsp;&nbsp; return \
-1;<br>&nbsp; }<br>&nbsp; /* setup */<br>&nbsp; pipeline = gst_pipeline_new \
(&quot;pipeline&quot;); <br>&nbsp; gst_bus_add_watch (gst_pipeline_get_bus \
(GST_PIPELINE (pipeline)),my_bus_callback, loop);<br>&nbsp; src = \
gst_element_factory_make (&quot;filesrc&quot;, &quot;source&quot;);<br>&nbsp; \
g_object_set (G_OBJECT (src), &quot;location&quot;, argv[1], NULL); <br>&nbsp; dec = \
gst_element_factory_make (&quot;decodebin&quot;, &quot;decoder&quot;);<br>&nbsp; \
g_signal_connect (dec, &quot;new-decoded-pad&quot;, G_CALLBACK (cb_newpad_video), \
NULL);<br>&nbsp; g_signal_connect (dec, &quot;new-decoded-pad&quot;, G_CALLBACK \
(cb_newpad_audio), NULL); <br>&nbsp; gst_bin_add_many (GST_BIN (pipeline), src, dec, \
NULL);<br>&nbsp; gst_element_link (src, dec);<br>&nbsp; /* create video output \
*/<br>&nbsp; video = gst_bin_new (&quot;videobin&quot;);<br>&nbsp; \
vqueue=gst_element_factory_make (&quot;vqueue&quot;, &quot;vqueue&quot;); <br>&nbsp; \
csp = gst_element_factory_make (&quot;ffmpegcolorspace&quot;, \
&quot;csp&quot;);<br>&nbsp; videopad = gst_element_get_pad (vqueue, \
&quot;sink&quot;);<br>&nbsp; sink1 = gst_element_factory_make \
(&quot;xvimagesink&quot;, &quot;sink1&quot;); <br>&nbsp; gst_bin_add_many (GST_BIN \
(video),vqueue,csp, sink1, NULL);<br>&nbsp; \
gst_element_link_many(vqueue,csp,sink1);<br>&nbsp; gst_element_add_pad \
(video,gst_ghost_pad_new (&quot;vsink&quot;,videopad));<br>&nbsp; gst_object_unref \
(videopad); <br>&nbsp; gst_bin_add (GST_BIN (pipeline), video);<br>&nbsp; /*Create \
Audio Output*/<br>&nbsp; audio = gst_bin_new (&quot;audiobin&quot;);<br>&nbsp; \
aqueue=gst_element_factory_make (&quot;queue&quot;, &quot;aqueue&quot;);<br>&nbsp; \
aconv = gst_element_factory_make (&quot;audioconvert&quot;,&quot;aconv&quot;); \
<br>&nbsp; audiopad = gst_element_get_pad (aqueue, &quot;sink&quot;);<br>&nbsp; \
aresample = gst_element_factory_make \
(&quot;audioresample&quot;,&quot;aresample&quot;);<br>&nbsp; sink2 = \
gst_element_factory_make (&quot;alsasink&quot;, &quot;sink2&quot;); <br>&nbsp; \
gst_bin_add_many (GST_BIN (audio),aqueue,aconv,aresample,sink2, NULL);<br>&nbsp; \
gst_element_link_many(aqueue,aconv,aresample,sink2);<br>&nbsp; gst_element_add_pad \
(audio,gst_ghost_pad_new (&quot;asink&quot;,audiopad));<br>&nbsp; gst_object_unref \
(audiopad); <br>&nbsp; gst_bin_add (GST_BIN (pipeline), audio);<br>&nbsp; /* run \
*/<br>&nbsp; gst_element_set_state (pipeline,GST_STATE_PLAYING);<br>&nbsp; g_print \
(&quot;Running ...\n&quot;);<br>&nbsp; g_main_loop_run (loop);<br>&nbsp; /* cleanup \
*/<br>&nbsp; gst_element_set_state (pipeline, GST_STATE_NULL); <br>&nbsp; \
gst_object_unref (GST_OBJECT (pipeline));<br>&nbsp; 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