[gst-devel] Accessing external buffer onto pipeline

Ramana Reddy Polaka Ramana_Polaka at infosys.com
Mon Mar 31 15:07:51 CEST 2008


How can I access external buffer to make my pipeline to work?   I tried to make use of "appsrc" plugin. Still I could not find the way.
Example is give at


Basically my aim to avoid using filesrc and give my own GstBuffer to the next element.  (gst-launch filesrc location=MPEG25_11_32_m.mp3 ! flump3dec ! alsasink )

The tried the following way in the given example testapplication.

#include "config.h"

#include <gst/gst.h>
#include <gst/app/gstappsrc.h>
#include <gst/app/gstappbuffer.h>
#include <gst/app/gstappsink.h>

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef struct _App App;
struct _App
  GstElement *pipe;
  GstElement *src;
  GstElement *id;
  GstElement *mp3dec;
  GstElement *alsa;

App s_app;

static void dont_eat_my_chicken_wings (void *priv);

main (int argc, char *argv[])
  App *app = &s_app;
  int chars_read,i=0;
  FILE *fp;
  int pos, sizeoffile;
  GstBuffer *buf;
  void *data;

  gst_init (&argc, &argv);
  app->pipe = gst_pipeline_new (NULL);
  g_assert (app->pipe);

  app->src = gst_element_factory_make ("appsrc", NULL);
  g_assert (app->src);
  gst_bin_add (GST_BIN (app->pipe), app->src);

  app->mp3dec = gst_element_factory_make ("flump3dec", NULL);
  g_assert (app->mp3dec);
  gst_bin_add (GST_BIN (app->pipe), app->mp3dec);

  app->alsa = gst_element_factory_make ("alsasink", NULL);
  g_assert (app->alsa);
  gst_bin_add (GST_BIN (app->pipe), app->alsa);

  app->id = gst_element_factory_make ("identity", NULL);
  g_assert (app->id);
  gst_bin_add (GST_BIN (app->pipe), app->id);

  gst_element_link (app->src, app->id);
  gst_element_link (app->id, app->mp3dec);
  gst_element_link (app->mp3dec, app->alsa);

  gst_element_set_state (app->pipe, GST_STATE_PLAYING);

  pos = ftell(fp);
  fseek (fp, 0, SEEK_END);
  sizeoffile = ftell(fp);
  fseek (fp, pos, SEEK_SET);
  printf("sizeoffile : %d\n",sizeoffile);

    data = (char*)malloc (sizeoffile);
    chars_read = fread(data,sizeof(char),sizeoffile,fp);

    buf = gst_app_buffer_new (data, sizeoffile, dont_eat_my_chicken_wings, data);
    gst_app_src_push_buffer (GST_APP_SRC (app->src), buf);

  gst_app_src_end_of_stream (GST_APP_SRC (app->src));
  gst_buffer_unref (buf);


static void
dont_eat_my_chicken_wings (void *priv)
  printf ("freeing buffer for pointer %p\n", priv);
  free (priv);

**************** CAUTION - Disclaimer *****************
This e-mail contains PRIVILEGED AND CONFIDENTIAL INFORMATION intended solely for the use of the addressee(s). If you are not the intended recipient, please notify the sender by e-mail and delete the original message. Further, you are not to copy, disclose, or distribute this e-mail or its contents to any other person and any such actions are unlawful. This e-mail may contain viruses. Infosys has taken every reasonable precaution to minimize this risk, but is not liable for any damage you may sustain as a result of any virus in this e-mail. You should carry out your own virus checks before opening the e-mail or attachment. Infosys reserves the right to monitor and review the content of all messages sent to or from this e-mail address. Messages sent to or from this e-mail address may be stored on the Infosys e-mail system.
***INFOSYS******** End of Disclaimer ********INFOSYS***
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20080331/aa928be1/attachment.htm>

More information about the gstreamer-devel mailing list