ltib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Ltib] Query on streaming multiple streams ...imx27ADS + latest LTIB fro


From: Rajesh Marathe
Subject: [Ltib] Query on streaming multiple streams ...imx27ADS + latest LTIB from CVS
Date: Wed, 21 Oct 2009 10:08:23 +0530
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.4pre) Gecko/20090915 Thunderbird/3.0b4

 Hi,

I wrote a program to play two streams alternately using gstreamer. Details below:

Development environment:
-------------------------------------

LTIB and iMX27ADS board. Host PC has Redhat EL5.0.

Problem description:
-----------------------------

I have two media files. My intention is to play the first file for a few seconds and pause the same and play the second file fully. After getting End-of-Steam message for second file, resume and complete the first file. My program looks like this:

int
main (int   argc,
      char *argv[])
{
  GMainLoop *loop;
  GstStateChangeReturn retval;


  /* Initialisation */
  gst_init (&argc, &argv);

  loop = g_main_loop_new (NULL, FALSE);

  /* Create gstreamer elements */
  masterpipe = GstCreatePipelineMaster ("master-player", argv[1]);
  slavepipe = GstCreatePipelineSlave ("slave-player", argv[2]);

  retval = gst_element_set_state (slavepipe, GST_STATE_PAUSED);

  retval = gst_element_set_state (masterpipe, GST_STATE_PLAYING);

  g_timeout_add (4000, (GSourceFunc) cb_print_position, masterpipe);
  g_main_loop_run (loop);
...
...
}

static GstElement * GstCreatePipelineMaster (char *name, char *file)
{

        GstElement *pipeline;

  /* Create gstreamer elements */
  pipeline      = gst_pipeline_new (name);
  source        = gst_element_factory_make ("filesrc","file-source");
demuxer = gst_element_factory_make ("mfw_mp4demuxer","avi-demuxer"); decvd = gst_element_factory_make ("mfw_vpudecoder", "video-decoder");
  decad         = gst_element_factory_make ("mad", "mp3-decoder");
vdsink = gst_element_factory_make ("mfw_v4lsink", "video-sink"); vdqueue = gst_element_factory_make ("queue", "video-queue"); adqueue = gst_element_factory_make ("queue", "audio-queue"); adsink = gst_element_factory_make ("fakesink", "audio-sink");

  g_object_set (decvd, "codec-type", "std_mpeg4", NULL);
if (!pipeline || !source || !demuxer || !decvd || !decad || !vdsink || !vdqueue || !adqueue || !adsink) {
        return NULL;
  }

  /* Set up the pipeline */

  /* we set the input filename to the source element */
  g_object_set (G_OBJECT (source), "location", file, NULL);


  /* we add all elements into the pipeline */
/* file-source | ogg-demuxer | vorbis-decoder | converter | alsa-output */
  gst_bin_add_many (GST_BIN (pipeline),
source, demuxer, decvd, decad,/* adqueue, vdqueue,*/ vdsink, adsink, NULL);

  /* we link the elements together */
/* file-source -> ogg-demuxer ~> vorbis-decoder -> converter -> alsa-output */
  gst_element_link (source, demuxer);
  gst_element_link (decvd, vdsink);
 // gst_element_link (vdqueue, vdsink);
 // gst_element_link (decad, adqueue);
 // gst_element_link (adqueue, adsink);
  gst_element_link (decad, adsink);

g_signal_connect (demuxer, "pad-added", G_CALLBACK (on_pad_added), NULL);

        return pipeline;
}

static GstElement * GstCreatePipelineSlave (char *name, char *file)
{

        GstElement *pipeline;

  /* Create gstreamer elements */
  pipeline      = gst_pipeline_new (name);

  /* Set up the pipeline */

  /* we set the input filename to the source element */
  g_object_set (G_OBJECT (source), "location", file, NULL);


  /* we add all elements into the pipeline */
/* file-source | ogg-demuxer | vorbis-decoder | converter | alsa-output */
  gst_bin_add_many (GST_BIN (pipeline),
source, demuxer, decvd, decad,/* adqueue, vdqueue,*/ vdsink, adsink, NULL);

        return pipeline;

}


Please note above, that I am creating two pipelines Master and slave and adding same elements to the master adn slave 'bin's. Is this okay to do ?

I do see the master playing and after few seconds the timer function is called in which I move the master to 'PAUSE' state and slave to 'PLAYING'. But the slave media does not play at all??

Can anybody let me know what is wrong above ?

regards,
Rajesh Marathe.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]