gstreamer_test_apps/gstplayer/src/SymGstreamer.cpp
branchRCL_3
changeset 30 7e817e7e631c
parent 29 567bb019e3e3
--- a/gstreamer_test_apps/gstplayer/src/SymGstreamer.cpp	Tue Aug 31 15:30:33 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1268 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
-*
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU Lesser General Public
-* License as published by the Free Software Foundation; either
-* version 2 of the License, or (at your option) any later version.
-*
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this library; if not, write to the
-* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-* Boston, MA 02111-1307, USA.
-*
-* Description:
-*
-*/
-
-#include "gstreamer.h"
-#include "GlibEventHandler.h"
-#include <avkon.hrh>
-#include <aknnotewrappers.h>
-#include <StringLoader.h>
-#include <gstplayer.rsg>
-#include <CAknMemorySelectionDialog.h>
-#include <e32base.h>
-#include <stdlib.h>
-#include <mmf/server/sounddevice.h>
-
-#include "gstplayerappview.h"
-
-GstElement *pipeline, *source, *wavparse,*sink,*decoder,*conv,*resample,*record,*fakesink,*filesink,*encoder,*filter,*wavenc, *amrmux, *aacenc, *mp4mux;
-GstBus *bus;
-GstCaps* caps;
-GstState current,pending;
-char carray[1024];
-
-CGSTPlayerAppView *iGstView;
-
-GstPad *dssinkpad;
-GstCaps *dssinkcap;
-GstPad *dssrcpad;
-GstCaps *dssrccap;
-GstStructure *str;
-
-gboolean negcaps = FALSE;
-
-static gboolean print_field (GQuark field, const GValue *value, gpointer pfx);
-static void print_caps (const GstCaps *caps, const gchar *pfx);
-
-
-
-static void
-cb_raw_playback_handoff (GstElement *src, GstBuffer *buffer, GstPad *pad,
-        gpointer user_data)
-    {
-    static gint readbytes = 0;
-    static gboolean eofReached = FALSE;
-
-    size_t readsize;
-    gint size;
-    FILE *f;
-    GstCaps *bufCaps;
-    if ( eofReached == TRUE )
-        {
-        //gst_element_set_state (pipeline, GST_STATE_NULL);
-       // gst_object_unref (GST_OBJECT (pipeline));
-        if ( gst_element_send_event (src, gst_event_new_eos ()) == TRUE )
-            {
-            g_print ("posted eos");
-           }
-     
-       else
-           {
-            //g_print ("unable to post eos");
-          }
-       return;
-       }
-
-    readsize = 0;
-    f = fopen (carray, "r");
-    eofReached = TRUE;
-    if ( fseek(f, readbytes, 0) == 0 )
-        {
-        readsize = fread (GST_BUFFER_DATA (buffer),1,GST_BUFFER_SIZE (buffer),f);
-        eofReached = FALSE;
-        GST_BUFFER_SIZE (buffer) = readsize;
-        }
-    fclose(f);
-
-    size = GST_BUFFER_SIZE (buffer);
-    readbytes += readsize;
-    if ( (readsize < size) || (readsize == 0) )
-        {
-        eofReached = TRUE;
-        }
-    
-    bufCaps = gst_caps_new_simple ("audio/x-raw-int",
-              "width", G_TYPE_INT, 16,
-              "depth", G_TYPE_INT, 16,
-              "signed",G_TYPE_BOOLEAN, TRUE,
-              "endianness",G_TYPE_INT, G_BYTE_ORDER,
-              "rate", G_TYPE_INT, 8000,
-              "channels", G_TYPE_INT, 1, NULL);
-    
-    gst_buffer_set_caps(buffer,bufCaps);
-
-    }
-
-static void
-cb_play_mp3_handoff (GstElement *fakesrc,
-        GstBuffer  *buffer,
-        GstPad     *pad,
-        gpointer    user_data)
-{
-GstCaps *bufCaps;
-  static gint readbytes = 0;
-  size_t readsize = 0;
-  int size = GST_BUFFER_SIZE (buffer);
-  
-  FILE *f = fopen (carray, "r");
-  fseek(f,readbytes,0);
-  readsize = fread(GST_BUFFER_DATA (buffer),1,GST_BUFFER_SIZE (buffer),f);
-  readbytes += readsize;
-  GST_BUFFER_SIZE (buffer) = readsize;
-  if(readsize == 0)
-      {
-      gst_element_send_event(fakesrc,gst_event_new_eos());
-      }
-  fclose(f);
- 
-}
-static void
-cb_record_raw_handoff (GstElement *fakesrc,
-        GstBuffer  *buffer,
-        GstPad     *pad,
-        gpointer    user_data)
-{
-  int size = GST_BUFFER_SIZE (buffer);
-  //g_print ("[%u]", size);
-  FILE *f = fopen (carray, "a");
-  fwrite(GST_BUFFER_DATA (buffer),1,GST_BUFFER_SIZE (buffer),f);
-  fclose(f);
-}
-
-
-static gboolean
-bus_call (GstBus     *bus,
-          GstMessage *msg,
-          gpointer    data)
-{
-  switch (GST_MESSAGE_TYPE (msg)) {
-    case GST_MESSAGE_EOS:
-        gst_element_set_state (pipeline, GST_STATE_NULL);
-        gst_object_unref (GST_OBJECT (pipeline));
-      break;
-    case GST_MESSAGE_ERROR: {
-      gchar *debug;
-      GError *err;
-      gst_message_parse_error (msg, &err, &debug);
-      g_free (debug);
-      g_print ("Error: %s\n", err->message);
-      g_error_free (err);
-      break;
-    }
-    default:
-      break;
-  }
-
-  return TRUE;
-}
-
-
-static void 
-new_pad_cb (GstElement *wavparse, GstPad *new_pad, gpointer pipeline)
- {
-   //GstElement *sink,*conv,*resample;
-   gst_element_set_state ((_GstElement *)pipeline, GST_STATE_PAUSED);
-   sink = gst_element_factory_make ("devsoundsink", "sink");
-   conv = gst_element_factory_make ("audioconvert", "audioconvert");
-  	if (!conv) {
-    	g_print ("could not create \"audioconvert\" element!");
-    	return;
-  		}
-   resample = gst_element_factory_make ("audioresample", "audioresample");
-  	if (!resample) {
-    	g_print ("could not create \"audioresample\" element!");
-    	return ;
-  		}
-   gst_bin_add_many(GST_BIN (pipeline), conv, resample, sink, NULL);
-   
-  // if (!gst_element_link (wavparse, sink))
-     // g_error ("link(wavparse, sink) failed!\n");
-     
- 	if(! gst_element_link_many (wavparse,conv, resample, sink, NULL))
-  		g_print ("link(wavparse,conv,remaple sink) failed!\n");  
- 
-   	gst_element_set_state ((_GstElement *)pipeline, GST_STATE_PLAYING);
- }
-
- #define FILENAME 1024
- int GstreamerNew(TFileName filename)
- {
-  size_t ret;
-  
-  ret = wcstombs(carray, (const wchar_t *)filename.PtrZ(), FILENAME);
-  int file_type=0;
-  
-  
-  
-  	char *p;
-	p = strrchr(carray, '.');
-
-	if ((p != NULL) && (strcmp(p, ".mp3") == 0))
-	{
-	file_type=2;	
-	}
-	else if ((p != NULL) && (strcmp(p, ".wav") == 0))
-	{
-	file_type=1;	
-	}
-    else if ((p != NULL) && (strcmp(p, ".raw") == 0))
-    {
-    file_type=3;    
-    }
-    else if ((p != NULL) && (strcmp(p, ".amr") == 0))
-    {
-    file_type=4;    
-    }
-    else if ((p != NULL) && (strcmp(p, ".g711") == 0))
-    {
-    file_type=5;    
-    }
-    else if ((p != NULL) && (strcmp(p, ".g729") == 0))
-    {
-    file_type=6;    
-    }
-    else if ((p != NULL) && (strcmp(p, ".lbc") == 0))
-    {
-    file_type=7;    
-    }
-	else
-		return -1;
-	
-	if(file_type==1)
-	{
-		gst_play_wave();
-	}
-	else if(file_type==2)
-	{
-		gst_play_mp3();
-	}
-    else if(file_type==3)
-    {
-        gst_play_raw();
-    }
-    else if(file_type==4)
-    {
-        gst_play_amr();
-    }
-    else if(file_type==5)
-    {
-        gst_play_g711();
-    }
-    else if(file_type==6)
-    {
-        gst_play_g729();
-    }
-    else if(file_type==7)
-    {
-        gst_play_ilbc();
-    }
-
-	else
-	{
-		return 0;
-	}
- } 
- 
- 
-int gst_play_mp3()
-{
- /* create elements */
- gboolean link_ok;
- 
- pipeline = gst_pipeline_new ("pipeline");
- source = gst_element_factory_make ("filesrc", "filesrc");
- //sink = gst_element_factory_make ("fakesink", "sink");
- sink = gst_element_factory_make ("devsoundsink", "sink");
-
- caps = gst_caps_new_simple ("audio/mp3",
-              "width", G_TYPE_INT, 16,
-              "depth", G_TYPE_INT, 16,
-              "signed",G_TYPE_BOOLEAN, TRUE,
-              "endianness",G_TYPE_INT, G_BYTE_ORDER,
-              "rate", G_TYPE_INT, 16000,
-              "channels", G_TYPE_INT, 2, NULL);
-             
- bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
- gst_bus_add_watch( bus, bus_call, NULL);
- gst_object_unref (bus);
-
- g_object_set (G_OBJECT (source), "location", carray, NULL);
-
- gst_bin_add_many (GST_BIN (pipeline), source, sink, NULL);
- 
- //gst_element_link (source, sink);
- link_ok = gst_element_link_filtered (source, sink, caps);
-
- gst_element_set_state (pipeline, GST_STATE_PLAYING);
-
- return 0;  
-}
- 
- int gst_play_wave()
- {
-    /* create elements */
-  pipeline = gst_pipeline_new ("pipeline");
-  source = gst_element_factory_make ("filesrc", "pavsrc");
-  wavparse = gst_element_factory_make ("wavparse", "parse");
- 
-  /* set filename property on the file source */
-  g_object_set (G_OBJECT (source), "location", carray, NULL);
-  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
-  gst_bus_add_watch (bus, bus_call, NULL);
-  gst_object_unref (bus);
-  gst_bin_add_many (GST_BIN (pipeline), source, wavparse, NULL);
-  if (!gst_element_link (source, wavparse))
-     g_error ("link(src, wavparse) failed!\n");
-
-  
-  g_signal_connect (wavparse, "pad-added", G_CALLBACK (new_pad_cb),pipeline);
-    
-  gst_element_set_state (pipeline, GST_STATE_PLAYING); 
-  return 0; 
- }
- 
- int gst_record_wav()
-    {
-     
-     iGstView->DrawText(_L("Recording Wave"),KRgbBlack);
-
-    /* create a new bin to hold the elements */
-    pipeline = gst_pipeline_new("pipeline");
-
-    record = gst_element_factory_make("devsoundsrc", "record_audio");
-    if (!record)
-        {
-        g_print("could not create \"record\" element!");
-        return -1;
-        }
-    //g_object_set (G_OBJECT (record), "num-buffers", 5000 , NULL);
-    filesink = gst_element_factory_make("filesink", "filesink");
-    if (!filesink)
-        {
-        g_print("could not create \"filesink\" element!");
-        return -1;
-        }
-
-    wavenc = gst_element_factory_make("wavenc", "wavencoder");
-    if (!wavenc)
-        {
-        g_print("could not create \"wavenc\" element!");
-        return -1;
-        }
-
-    _LIT(KFILENAME,"c:\\data\\test.wav");
-    TFileName fn;
-    fn.Append(KFILENAME);
-    TInt ret;
-    // char carray[FILENAME];
-    ret = wcstombs(carray, (const wchar_t *)fn.PtrZ(), FILENAME);
-
-    g_object_set(G_OBJECT (filesink), "location", carray, NULL);
-    bus = gst_pipeline_get_bus(GST_PIPELINE (pipeline));
-    gst_bus_add_watch(bus, bus_call, NULL);
-    gst_object_unref(bus);
-
-    /* add objects to the main pipeline */
-    gst_bin_add_many(GST_BIN (pipeline),record,wavenc,filesink, NULL);
-
-    /* link the elements */
-    //gst_element_link_many(record, wavenc,filesink, NULL);
-    caps = gst_caps_new_simple ("audio/x-raw-int",
-              "width", G_TYPE_INT, 16,
-              "depth", G_TYPE_INT, 16,
-              "signed",G_TYPE_BOOLEAN, TRUE,
-              "endianness",G_TYPE_INT, G_BYTE_ORDER,
-              "rate", G_TYPE_INT, 16000,
-              "channels", G_TYPE_INT, 1, NULL);
-    
-    gst_element_link_filtered (record, wavenc, caps);
-    gst_element_link (wavenc, filesink);
-    gst_caps_unref (caps);
-    iGstView->DrawText(_L("pipeline created\n"),KRgbBlack);
-    /* start recording */
-    gst_element_set_state(pipeline, GST_STATE_PLAYING);
-    iGstView->DrawText(_L("set to play wave file\n"),KRgbBlack);
-    return 0;
-    }
- 
- 
- int gst_record_aac()
-    {
-     GstPad *qtsinkpad,*aacencsrcpad;
-     iGstView->DrawText(_L("Recording aac"),KRgbBlack);
-
-    /* create a new bin to hold the elements */
-    pipeline = gst_pipeline_new("pipeline");
-
-    record = gst_element_factory_make("devsoundsrc", "record_audio");
-    if (!record)
-        {
-        g_print("could not create \"record\" element!");
-        return -1;
-        }
-    //g_object_set (G_OBJECT (record), "num-buffers", 5000 , NULL);
-    filesink = gst_element_factory_make("filesink", "filesink");
-    if (!filesink)
-        {
-        g_print("could not create \"filesink\" element!");
-        return -1;
-        }
-
-    aacenc = gst_element_factory_make("nokiaaacenc", "nokiaaacenc");
-    if (!aacenc)
-        {
-        g_print("could not create \"aacenc\" element!");
-        return -1;
-        }
-    
-    mp4mux = gst_element_factory_make("mp4mux", "mp4mux");
-    if (!mp4mux)
-        {
-        g_print("could not create \"mp4mux\" element!");
-        return -1;
-        }    
-    //name = gst_pad_get_name( sinkpad );    
-
-    _LIT(KFILENAME,"c:\\data\\test.mp4");
-    TFileName fn;
-    fn.Append(KFILENAME);
-    TInt ret;
-    // char carray[FILENAME];
-    ret = wcstombs(carray, (const wchar_t *)fn.PtrZ(), FILENAME);
-
-    g_object_set(G_OBJECT (filesink), "location", carray, NULL);
-    bus = gst_pipeline_get_bus(GST_PIPELINE (pipeline));
-    gst_bus_add_watch(bus, bus_call, NULL);
-    gst_object_unref(bus);
-
-    /* add objects to the main pipeline */
-    gst_bin_add_many(GST_BIN (pipeline),record,aacenc,mp4mux,filesink, NULL);
-
-    /* link the elements */
-    //gst_element_link_many(record, aacenc,filesink, NULL);
-    caps = gst_caps_new_simple ("audio/x-raw-int",
-              "width", G_TYPE_INT, 16,
-              "depth", G_TYPE_INT, 16,
-              "signed",G_TYPE_BOOLEAN, TRUE,
-              "endianness",G_TYPE_INT, G_BYTE_ORDER,
-              "rate", G_TYPE_INT, 16000,
-              "channels", G_TYPE_INT, 1, NULL);
-    
-    gst_element_link_filtered (record, aacenc, caps);
-    qtsinkpad  = gst_element_get_request_pad( mp4mux, "audio_%d");
-    aacencsrcpad  = gst_element_get_pad( aacenc, "src");  
-    if (gst_pad_link (aacencsrcpad,qtsinkpad) != GST_PAD_LINK_OK) {
-
-    g_print("gst_pad_link (aacencsrcpad,qtsinkpad) failed");
-    return -1;
-    }       
-    //gst_element_link (aacenc, filesink);
-    gst_element_link (mp4mux, filesink);
-    gst_caps_unref (caps);
-    iGstView->DrawText(_L("pipeline created\n"),KRgbBlack);
-    /* start recording */
-    gst_element_set_state(pipeline, GST_STATE_PLAYING);
-    iGstView->DrawText(_L("set to play aac file\n"),KRgbBlack);
-    return 0;
-    }
- 
- int gst_record_amr()
- {
- iGstView->DrawText(_L("Recording AMR-NB"),KRgbRed);
-
-   /* create a new bin to hold the elements */
-  pipeline = gst_pipeline_new ("pipeline");
-  
-  //g_print ("pipeline created");
-  record = gst_element_factory_make ("devsoundsrc", "record_audio"); 
- // encoder = gst_element_factory_make ("wavenc", NULL); 
-  if (!record) {
-    g_print ("could not create \"record\" element!");
-    iGstView->DrawText(_L("Devsound src not available"),KRgbRed);
-    return -1;
-  }
-
-            
-      amrmux = gst_element_factory_make ("amrmux", "muxer"); 
- // encoder = gst_element_factory_make ("wavenc", NULL); 
-  if (!amrmux) {
-    g_print ("could not create \"amrmuxer\" element!");
-    iGstView->DrawText(_L("amrmuxer not available"),KRgbRed);
-    return -1;
-  }
-
-  filesink = gst_element_factory_make("filesink", "filesink");
-      if (!filesink)
-          {
-          g_print("could not create \"filesink\" element!");
-          return -1;
-          }        
-
-  caps = gst_caps_new_simple ("audio/amr",
-             "width", G_TYPE_INT, 8,
-             "depth", G_TYPE_INT, 8,
-             "signed",G_TYPE_BOOLEAN, TRUE,
-             "endianness",G_TYPE_INT, G_BYTE_ORDER,
-             "rate", G_TYPE_INT,  8000,
-             "channels", G_TYPE_INT, 1, NULL);
-  
-  
-  g_object_set (G_OBJECT (record),
-            "blocksize", 1280,
-             NULL);
-  
-  _LIT(KFILENAME,"c:\\data\\recordtest.amr");
-  TFileName fn;
-  fn.Append(KFILENAME);
-  TInt ret;
-  ret = wcstombs(carray, (const wchar_t *)fn.PtrZ(), FILENAME);
-  g_object_set(G_OBJECT (filesink), "location", carray, NULL);
-   
-  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
-  gst_bus_add_watch (bus, bus_call, NULL);
-  gst_object_unref (bus);
-  
-
-  /* add objects to the main pipeline */
-  gst_bin_add_many(GST_BIN (pipeline),record,amrmux,filesink , NULL);
-  /* link the elements */
-  gst_element_link_filtered (record, amrmux, caps);
-  
-  gst_element_link( amrmux, filesink );
-  
-  gst_element_set_state (pipeline, GST_STATE_PLAYING);
-  
-  return 0;
- }
- 
- int gst_record_g711()
-  {
-    /* create a new bin to hold the elements */
-   pipeline = gst_pipeline_new ("pipeline");
-   
-   //g_print ("pipeline created");
-   record = gst_element_factory_make ("devsoundsrc", "record_audio"); 
-  // encoder = gst_element_factory_make ("wavenc", NULL); 
-   if (!record) {
-     g_print ("could not create \"record\" element!");
-     return -1;
-   }
-
-   filesink = gst_element_factory_make("filesink", "filesink");
-       if (!filesink)
-           {
-           g_print("could not create \"filesink\" element!");
-           return -1;
-           }
-
-   caps = gst_caps_new_simple ("audio/x-alaw",
-              "width", G_TYPE_INT, 8,
-              "depth", G_TYPE_INT, 8,
-              "signed",G_TYPE_BOOLEAN, TRUE,
-              "endianness",G_TYPE_INT, G_BYTE_ORDER,
-              "rate", G_TYPE_INT,  8000,
-              "channels", G_TYPE_INT, 1, NULL);
-   
-   g_object_set (G_OBJECT (record),
-             "blocksize", 1280,
-              NULL);
-   
-   _LIT(KFILENAME,"c:\\data\\recordtest.g711");
-   TFileName fn;
-   fn.Append(KFILENAME);
-   TInt ret;
-   ret = wcstombs(carray, (const wchar_t *)fn.PtrZ(), FILENAME);
-   g_object_set(G_OBJECT (filesink), "location", carray, NULL);
-    
-   bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
-   gst_bus_add_watch (bus, bus_call, NULL);
-   gst_object_unref (bus);
-   
-
-   /* add objects to the main pipeline */
-   gst_bin_add_many(GST_BIN (pipeline),record,filesink , NULL);
-   /* link the elements */
-   gst_element_link_filtered (record, filesink, caps);
-   gst_element_set_state (pipeline, GST_STATE_PLAYING);
-   
-   return 0;
-  }
- 
- int gst_record_g729()
-  {
-    /* create a new bin to hold the elements */
-   pipeline = gst_pipeline_new ("pipeline");
-   
-   record = gst_element_factory_make ("devsoundsrc", "record_audio"); 
-   if (!record) {
-     g_print ("could not create \"record\" element!");
-     return -1;
-   }
-
-   filesink = gst_element_factory_make("filesink", "filesink");
-       if (!filesink)
-           {
-           g_print("could not create \"filesink\" element!");
-           return -1;
-           }
-
-   caps = gst_caps_new_simple ("audio/g729",
-              "width", G_TYPE_INT, 16,
-              "depth", G_TYPE_INT, 16,
-              "signed",G_TYPE_BOOLEAN, TRUE,
-              "endianness",G_TYPE_INT, G_BYTE_ORDER,
-              "rate", G_TYPE_INT,  8000,
-              "channels", G_TYPE_INT, 1, NULL);
-   
-   g_object_set (G_OBJECT (record),
-             "blocksize", 1280,
-              NULL);
-   
-   _LIT(KFILENAME,"c:\\data\\recordtest.g729");
-   TFileName fn;
-   fn.Append(KFILENAME);
-   TInt ret;
-   ret = wcstombs(carray, (const wchar_t *)fn.PtrZ(), FILENAME);
-   g_object_set(G_OBJECT (filesink), "location", carray, NULL);
-    
-   bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
-   gst_bus_add_watch (bus, bus_call, NULL);
-   gst_object_unref (bus);
-   
-
-   /* add objects to the main pipeline */
-   gst_bin_add_many(GST_BIN (pipeline),record,filesink , NULL);
-   /* link the elements */
-   gst_element_link_filtered (record, filesink, caps);
-   gst_element_set_state (pipeline, GST_STATE_PLAYING);
-   
-   return 0;
-  }
- 
- int gst_record_ilbc()
-  {
-    /* create a new bin to hold the elements */
-   pipeline = gst_pipeline_new ("pipeline");
-   
-   record = gst_element_factory_make ("devsoundsrc", "record_audio"); 
-   if (!record) {
-     g_print ("could not create \"record\" element!");
-     return -1;
-   }
-
-   filesink = gst_element_factory_make("filesink", "filesink");
-       if (!filesink)
-           {
-           g_print("could not create \"filesink\" element!");
-           return -1;
-           }
-
-   caps = gst_caps_new_simple ("audio/ilbc",
-              "width", G_TYPE_INT, 16,
-              "depth", G_TYPE_INT, 16,
-              "signed",G_TYPE_BOOLEAN, TRUE,
-              "endianness",G_TYPE_INT, G_BYTE_ORDER,
-              "rate", G_TYPE_INT,  8000,
-              "channels", G_TYPE_INT, 1, NULL);
-   
-   g_object_set (G_OBJECT (record),
-             "blocksize", 1280,
-              NULL);
-   
-   _LIT(KFILENAME,"c:\\data\\recordtest.lbc");
-   TFileName fn;
-   fn.Append(KFILENAME);
-   TInt ret;
-   ret = wcstombs(carray, (const wchar_t *)fn.PtrZ(), FILENAME);
-   g_object_set(G_OBJECT (filesink), "location", carray, NULL);
-    
-   bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
-   gst_bus_add_watch (bus, bus_call, NULL);
-   gst_object_unref (bus);
-   
-
-   /* add objects to the main pipeline */
-   gst_bin_add_many(GST_BIN (pipeline),record,filesink , NULL);
-   /* link the elements */
-   gst_element_link_filtered (record, filesink, caps);
-   gst_element_set_state (pipeline, GST_STATE_PLAYING);
-   
-   return 0;
-  }
-
- int gst_record_raw()
- {
- 
-   /* create a new bin to hold the elements */
-  pipeline = gst_pipeline_new ("pipeline");
-  
-  //g_print ("pipeline created");
-  record = gst_element_factory_make ("devsoundsrc", "record_audio"); 
- // encoder = gst_element_factory_make ("wavenc", NULL); 
-  if (!record) {
-    g_print ("could not create \"record\" element!");
-    return -1;
-  }
-  //g_print ("record created");
-  filesink = gst_element_factory_make("filesink", "filesink");
-      if (!filesink)
-          {
-          g_print("could not create \"filesink\" element!");
-          return -1;
-          }
-  //GstRingBufferSpec
-  //g_print ("sink created");
-  caps = gst_caps_new_simple ("audio/x-raw-int",
-             "width", G_TYPE_INT, 16,
-             "depth", G_TYPE_INT, 16,
-             "signed",G_TYPE_BOOLEAN, TRUE,
-             "endianness",G_TYPE_INT, G_BYTE_ORDER,
-             "rate", G_TYPE_INT,  8000,
-             "channels", G_TYPE_INT, 1, NULL);
-  
-  //g_print ("caps created");
-   g_object_set (G_OBJECT (record),
-             //"signal-handoffs", TRUE,
-             "blocksize", 1280,
-          // "gain",10000,
-              NULL);
-  
-  /*g_object_set (G_OBJECT (fakesink),
-             "signal-handoffs", TRUE,
-             "sizemax", 4096,
-             "sizetype", 2, NULL);*/
-  
-  _LIT(KFILENAME,"c:\\data\\test.raw");
-  TFileName fn;
-  fn.Append(KFILENAME);
-  TInt ret;
-  //char carray[FILENAME];
-  carray[0]='\0';
-  ret = wcstombs(carray, (const wchar_t *)fn.PtrZ(), FILENAME);
-   
-   
-  g_object_set (G_OBJECT (filesink), "location", carray,"buffer-size",1280, NULL);
-  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
-  gst_bus_add_watch (bus, bus_call, NULL);
-  gst_object_unref (bus);
-  
-
-  /* add objects to the main pipeline */
-  gst_bin_add_many(GST_BIN (pipeline),record,filesink , NULL);
-  //g_print ("added to pipe");
-  /* link the elements */
-  //gst_element_link(record,/*encoder,*/ fakesink/*audiosink*/);
-  gst_element_link_filtered (record, filesink, caps);
-  //g_signal_connect (fakesink, "handoff", G_CALLBACK (cb_record_raw_handoff), NULL);
-  /* start recording */
- // g_print ("start pipe");
- 
-  gst_element_set_state (pipeline, GST_STATE_PLAYING);
-  
-  return 0;
- }
-     
- 
- int gst_play_raw()
- {
- /* create elements */
- gboolean link_ok;
- 
- pipeline = gst_pipeline_new ("pipeline");
- source = gst_element_factory_make ("filesrc", "filesrc");
- //sink = gst_element_factory_make ("fakesink", "sink");
- sink = gst_element_factory_make ("devsoundsink", "sink");
-
-caps = gst_caps_new_simple ("audio/x-raw-int",
-             "width", G_TYPE_INT, 16,
-             "depth", G_TYPE_INT, 16,
-             "signed",G_TYPE_BOOLEAN, TRUE,
-             "endianness",G_TYPE_INT, G_BYTE_ORDER,
-             "rate", G_TYPE_INT,  8000,
-             "channels", G_TYPE_INT, 1, NULL);
-             
- bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
- gst_bus_add_watch( bus, bus_call, NULL);
- gst_object_unref (bus);
-
- /*g_object_set (G_OBJECT(source),
-         "signal-handoffs", TRUE,
-         //"num-buffers", 4,
-         "sizemax", 4096,
-         "sizetype", 2,
-         NULL);*/
- 
- g_object_set (G_OBJECT (source), "location", carray, NULL);
-// g_signal_connect (source, "handoff", G_CALLBACK (cb_raw_playback_handoff), NULL);
-
- gst_bin_add_many (GST_BIN (pipeline), source, sink, NULL);
- 
- //gst_element_link (source, sink);
- link_ok = gst_element_link_filtered (source, sink, caps);
-
- gst_element_set_state (pipeline, GST_STATE_PLAYING);
-
-while (caps->refcount > 1)
-     {
-     gst_caps_unref (caps);
-     }
- gst_caps_unref (caps);
-
- 
- return 0; 
- }
-
- int gst_play_amr()
-  {
-  /* create elements */
-  gboolean link_ok;
-  
-  pipeline = gst_pipeline_new ("pipeline");
-  source = gst_element_factory_make ("filesrc", "filesrc");
-  //sink = gst_element_factory_make ("fakesink", "sink");
-  sink = gst_element_factory_make ("devsoundsink", "sink");
-
- caps = gst_caps_new_simple ("audio/amr",
-              "width", G_TYPE_INT, 8,
-              "depth", G_TYPE_INT, 8,
-              "signed",G_TYPE_BOOLEAN, TRUE,
-              "endianness",G_TYPE_INT, G_BYTE_ORDER,
-              "rate", G_TYPE_INT,  8000,
-              "channels", G_TYPE_INT, 1, NULL);
-              
-  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
-  gst_bus_add_watch( bus, bus_call, NULL);
-  gst_object_unref (bus);
-
-  g_object_set (G_OBJECT (source), "location", carray, NULL);
-
-  gst_bin_add_many (GST_BIN (pipeline), source, sink, NULL);
-  
-  link_ok = gst_element_link_filtered (source, sink, caps);
-
-  gst_element_set_state (pipeline, GST_STATE_PLAYING);
-
-  return 0; 
-  }
-
- int gst_play_g711()
-  {
-  /* create elements */
-  gboolean link_ok;
-  
-  pipeline = gst_pipeline_new ("pipeline");
-  source = gst_element_factory_make ("filesrc", "filesrc");
-  sink = gst_element_factory_make ("devsoundsink", "sink");
-
- caps = gst_caps_new_simple ("audio/x-alaw",
-              "width", G_TYPE_INT, 16,
-              "depth", G_TYPE_INT, 16,
-              "signed",G_TYPE_BOOLEAN, TRUE,
-              "endianness",G_TYPE_INT, G_BYTE_ORDER,
-              "rate", G_TYPE_INT,  8000,
-              "channels", G_TYPE_INT, 1, NULL);
-              
-  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
-  gst_bus_add_watch( bus, bus_call, NULL);
-  gst_object_unref (bus);
-
-  g_object_set (G_OBJECT (source), "location", carray, NULL);
-  gst_bin_add_many (GST_BIN (pipeline), source, sink, NULL);
-  
-  link_ok = gst_element_link_filtered (source, sink, caps);
-
-  gst_element_set_state (pipeline, GST_STATE_PLAYING);
-
-  return 0; 
-  }
- int gst_play_g729()
-  {
-  /* create elements */
-  gboolean link_ok;
-  
-  pipeline = gst_pipeline_new ("pipeline");
-  source = gst_element_factory_make ("filesrc", "filesrc");
-  sink = gst_element_factory_make ("devsoundsink", "sink");
-
- caps = gst_caps_new_simple ("audio/g729",
-              "width", G_TYPE_INT, 16,
-              "depth", G_TYPE_INT, 16,
-              "signed",G_TYPE_BOOLEAN, TRUE,
-              "endianness",G_TYPE_INT, G_BYTE_ORDER,
-              "rate", G_TYPE_INT,  8000,
-              "channels", G_TYPE_INT, 1, NULL);
-              
-  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
-  gst_bus_add_watch( bus, bus_call, NULL);
-  gst_object_unref (bus);
-
-  g_object_set (G_OBJECT (source), "location", carray, NULL);
-
-  gst_bin_add_many (GST_BIN (pipeline), source, sink, NULL);
-  
-  link_ok = gst_element_link_filtered (source, sink, caps);
-
-  gst_element_set_state (pipeline, GST_STATE_PLAYING);
-
-  return 0; 
-  }
- int gst_play_ilbc()
-  {
-  /* create elements */
-  gboolean link_ok;
-  
-  pipeline = gst_pipeline_new ("pipeline");
-  source = gst_element_factory_make ("filesrc", "filesrc");
-  sink = gst_element_factory_make ("devsoundsink", "sink");
-
- caps = gst_caps_new_simple ("audio/ilbc",
-              "width", G_TYPE_INT, 16,
-              "depth", G_TYPE_INT, 16,
-              "signed",G_TYPE_BOOLEAN, TRUE,
-              "endianness",G_TYPE_INT, G_BYTE_ORDER,
-              "rate", G_TYPE_INT,  8000,
-              "channels", G_TYPE_INT, 1, NULL);
-              
-  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
-  gst_bus_add_watch( bus, bus_call, NULL);
-  gst_object_unref (bus);
-
-  g_object_set (G_OBJECT (source), "location", carray, NULL);
-
-  gst_bin_add_many (GST_BIN (pipeline), source, sink, NULL);
-  
-  link_ok = gst_element_link_filtered (source, sink, caps);
-
-  gst_element_set_state (pipeline, GST_STATE_PLAYING);
-  return 0; 
-  }
-
- 
- //******
- int gst_current_volume()
-     {     
-     if(!sink)
-         {
-         iGstView->DrawText(_L("Devsound sink not available"),KRgbRed);
-         return -1;
-         }
-     int vol;
-     TBuf<25> currentvolume(_L("current volume "));    
-     g_object_get(G_OBJECT(sink),
-                    "volume",&vol,NULL);
-     
-     currentvolume.AppendNum(vol);
-     
-     iGstView->DrawText(currentvolume,KRgbBlack);
-     return 0;
-     }
- 
- int gst_max_volume()
-      {    
-      if(!sink)
-           {
-           iGstView->DrawText(_L("Devsound sink not available"),KRgbRed);
-           return -1;
-           }
-      
-      int maxvol;
-      TBuf<25> maxvolume(_L("max volume "));   
-      
-      g_object_get(G_OBJECT(sink),
-                     "maxvolume",&maxvol,NULL);
-      
-      maxvolume.AppendNum(maxvol);
-      
-      iGstView->DrawText(maxvolume,KRgbBlack);
-      return 0;
-      
-      }
- int gst_volume_up()
-     {
-     
-     if(!sink)
-          {
-          iGstView->DrawText(_L("Devsound sink not available"),KRgbRed);
-          return -1;
-          }
-     iGstView->DrawText(_L("volume up"),KRgbBlack);
-     int maxvol;
-     g_object_get(G_OBJECT(sink),
-                       "maxvolume",&maxvol,NULL);
-     g_object_set (G_OBJECT (sink), 
-                        "volume", maxvol, NULL);
-     return 0;
-     }
-
- int gst_volume_down()
-     {
-     if(!sink)
-          {
-          iGstView->DrawText(_L("Devsound sink not available"),KRgbRed);
-          return -1;
-          }
-     
-     iGstView->DrawText(_L("volume down"),KRgbBlack);
-     int maxvol;
-     g_object_get(G_OBJECT(sink),
-                        "maxvolume",&maxvol,NULL);
-     g_object_set (G_OBJECT (sink), 
-                        "volume", maxvol/2, NULL);
-     return 0;
-     }
- 
- int gst_current_gain()
-     {     
-     if(!record)
-         {
-         iGstView->DrawText(_L("Devsound source not available"),KRgbRed);
-         return -1;
-         }
-     int gain;
-     TBuf<25> currentgain(_L("current gain "));    
-     g_object_get(G_OBJECT(record),
-                    "gain",&gain,NULL);
-     
-     currentgain.AppendNum(gain);
-     
-     iGstView->DrawText(currentgain,KRgbBlack);
-     return 0;
-     }
- 
- int gst_max_gain()
-      {    
-      if(!record)
-           {
-           iGstView->DrawText(_L("Devsound source not available"),KRgbRed);
-           return -1;
-           }
-      
-      int max;
-      TBuf<25> maxgain(_L("max gain "));   
-      
-      g_object_get(G_OBJECT(record),
-                     "maxgain",&max,NULL);
-      
-      maxgain.AppendNum(max);
-      
-      iGstView->DrawText(maxgain,KRgbBlack);
-      return 0;
-      
-      }
- int gst_gain_up()
-     {
-     
-     if(!record)
-          {
-          iGstView->DrawText(_L("Devsound source not available"),KRgbRed);
-          return -1;
-          }
-     int max;
-     g_object_get(G_OBJECT(record),
-                      "maxgain",&max,NULL);
-     
-     iGstView->DrawText(_L("gain up"),KRgbBlack);
-     g_object_set (G_OBJECT (record), 
-                        "gain", max, NULL);
-     return 0;
-     }
-
- int gst_gain_down()
-     {
-     if(!record)
-          {
-          iGstView->DrawText(_L("Devsound source not available"),KRgbRed);
-          return -1;
-          }
-     int max;
-     g_object_get(G_OBJECT(record),
-                      "maxgain",&max,NULL);
-     iGstView->DrawText(_L("gain down"),KRgbBlack);
-     g_object_set (G_OBJECT (sink), 
-                        "gain", max/2, NULL);
-     return 0;
-     }
- 
- 
- 
- int gst_balance()
-     {
-     if(!sink)
-           {
-           iGstView->DrawText(_L("Devsound sink not available"),KRgbRed);
-           return -1;
-           }
-      
-      iGstView->DrawText(_L("balance"),KRgbBlack);
-    /*  g_object_set (G_OBJECT (sink), 
-                         "left balance", 5000,
-                         "right balance",5000,NULL);
-                         */
-     return 0;
-     }
- 
- void samplesplayed()
-      {
-      if(!sink)
-           {
-           iGstView->DrawText(_L("Devsound sink not available"),KRgbRed);      
-           }
-      int samples;
-      TBuf<25> samplesplayed(_L("samples played "));    
-      g_object_get (G_OBJECT (sink), 
-                   "samples played", &samples, NULL);
-      
-      samplesplayed.AppendNum(samples);
-      iGstView->DrawText(samplesplayed,KRgbBlack);   
-      }
-
- void samplesrecorded()
-       {
-       if(!record)
-            {
-            iGstView->DrawText(_L("Devsound src not available"),KRgbRed);      
-            }
-       int samples;
-       TBuf<25> samplesrecorded(_L("samples recorded "));    
-       g_object_get (G_OBJECT (record), 
-                    "samples recorded", &samples, NULL);
-       
-       samplesrecorded.AppendNum(samples);
-       iGstView->DrawText(samplesrecorded,KRgbBlack);   
-       } 
- 
- static gboolean print_field (GQuark field, const GValue *value, gpointer pfx)
-     {
-     gchar *str = gst_value_serialize (value);
-     
-     const gchar* c;
-
-     RDebug::Printf("%s  %15s: %s\n", (gchar *) pfx, c = g_quark_to_string (field), str);
-     
-     if(negcaps)
-         {
-         TPtrC8 property((const TText8*)c);
-         TPtrC8 val((const TText8*)str);
-         TBuf<10> appdval;
-         appdval.Copy(val);
-      
-         TBuf<25> name;
-         name.Copy(property);
-         name.Append(':');
-         name.Append(appdval);
-       
-         iGstView->DrawText(name,KRgbBlack);
-         }    
-     g_free (str);
-     return TRUE;
-     }
-
- static void print_caps (const GstCaps *caps, const gchar *pfx)
-     {
-     guint i;
-
-     g_return_if_fail (caps != NULL);
-
-     if (gst_caps_is_any (caps)) {
-     RDebug::Printf("%sANY\n", pfx);
-     return;
-     }
-     if (gst_caps_is_empty (caps)) {
-     RDebug::Printf("%sEMPTY\n", pfx);
-     return;
-     }
-     const gchar *c;
-     for (i = 0; i < gst_caps_get_size (caps); i++) {
-     GstStructure *structure = gst_caps_get_structure (caps, i);
-     
-     RDebug::Printf("%s%s\n", pfx,c = gst_structure_get_name (structure));
-     
-     TPtrC8 fmt((const TText8*)c);
-   
-     TBuf<25> name;
-     name.Copy(fmt);
-    
-     iGstView->DrawText(name,KRgbBlack);
-         
-     gst_structure_foreach (structure, print_field, (gpointer) pfx);
-     }
-     }
- 
- void getsinkpadcaps()
-     {
-     RDebug::Print(_L("Devsound Pad Caps"));
-     if(!sink)
-          {
-          iGstView->DrawText(_L("Devsound sink not available"),KRgbRed);
-          return;
-          }
-     negcaps = FALSE;
-     dssinkpad = gst_element_get_pad (sink, "sink");   
-     dssinkcap = gst_pad_get_caps (dssinkpad);
-     
-     print_caps (dssinkcap, "     ");
-     }
- 
- void negotiatedsinkcaps()
-     {
-     RDebug::Print(_L("Negotiated caps"));
-      if(!sink)
-           {
-           iGstView->DrawText(_L("Devsound sink not available"),KRgbRed);
-           return;
-           }
-      negcaps = TRUE;
-      dssinkpad = gst_element_get_pad (sink, "sink");   
-      dssinkcap = gst_pad_get_negotiated_caps (dssinkpad);
-      
-      print_caps (dssinkcap, "     ");    
-     }
- 
- void getsrcpadcaps()
-      {
-      RDebug::Print(_L("Devsound Source Pad Caps"));
-      if(!record)
-           {
-           iGstView->DrawText(_L("Devsound src not available"),KRgbRed);
-           return;
-           }
-      negcaps = FALSE;
-      dssrcpad = gst_element_get_pad (record, "src");   
-      dssrccap = gst_pad_get_caps (dssrcpad);
-      
-      print_caps (dssrccap, "     ");
-      }
-  
-  void negotiatedsrccaps()
-      {
-      RDebug::Print(_L("Negotiated  src caps"));
-       if(!record)
-            {
-            iGstView->DrawText(_L("Devsound src not available"),KRgbRed);
-            return;
-            }
-       negcaps = TRUE;
-       dssrcpad = gst_element_get_pad (record, "src");   
-       dssrccap = gst_pad_get_negotiated_caps (dssrcpad);
-   
-       print_caps (dssrccap, "     ");
-          
-      }