internal/gstplayer/src/SymGstreamer.cpp
author hgs
Wed, 24 Mar 2010 17:55:38 -0500
changeset 14 32e421e6175c
child 16 8e837d1bf446
permissions -rw-r--r--
201005
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
14
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
hgs
parents:
diff changeset
     3
*
hgs
parents:
diff changeset
     4
* This library is free software; you can redistribute it and/or
hgs
parents:
diff changeset
     5
* modify it under the terms of the GNU Lesser General Public
hgs
parents:
diff changeset
     6
* License as published by the Free Software Foundation; either
hgs
parents:
diff changeset
     7
* version 2 of the License, or (at your option) any later version.
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* This library is distributed in the hope that it will be useful,
hgs
parents:
diff changeset
    10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
hgs
parents:
diff changeset
    11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
hgs
parents:
diff changeset
    12
* Lesser General Public License for more details.
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* You should have received a copy of the GNU Lesser General Public
hgs
parents:
diff changeset
    15
* License along with this library; if not, write to the
hgs
parents:
diff changeset
    16
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
hgs
parents:
diff changeset
    17
* Boston, MA 02111-1307, USA.
hgs
parents:
diff changeset
    18
*
hgs
parents:
diff changeset
    19
* Description:
hgs
parents:
diff changeset
    20
*
hgs
parents:
diff changeset
    21
*/
hgs
parents:
diff changeset
    22
hgs
parents:
diff changeset
    23
#include "gstreamer.h"
hgs
parents:
diff changeset
    24
#include "GlibEventHandler.h"
hgs
parents:
diff changeset
    25
#include <avkon.hrh>
hgs
parents:
diff changeset
    26
#include <aknnotewrappers.h>
hgs
parents:
diff changeset
    27
#include <stringloader.h>
hgs
parents:
diff changeset
    28
#include <GSTPlayer.rsg>
hgs
parents:
diff changeset
    29
#include <CAknMemorySelectionDialog.h>
hgs
parents:
diff changeset
    30
#include <e32base.h>
hgs
parents:
diff changeset
    31
#include <stdlib.h>
hgs
parents:
diff changeset
    32
#include <mmf/server/sounddevice.h>
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
#include "gstplayerappview.h"
hgs
parents:
diff changeset
    35
hgs
parents:
diff changeset
    36
GstElement *pipeline, *source, *wavparse,*sink,*decoder,*conv,*resample,*record,*fakesink,*filesink,*encoder,*filter,*wavenc;
hgs
parents:
diff changeset
    37
GstBus *bus;
hgs
parents:
diff changeset
    38
GstCaps* caps;
hgs
parents:
diff changeset
    39
GstState current,pending;
hgs
parents:
diff changeset
    40
char carray[1024];
hgs
parents:
diff changeset
    41
hgs
parents:
diff changeset
    42
CGSTPlayerAppView *iGstView;
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
GstPad *dssinkpad;
hgs
parents:
diff changeset
    45
GstCaps *dssinkcap;
hgs
parents:
diff changeset
    46
GstPad *dssrcpad;
hgs
parents:
diff changeset
    47
GstCaps *dssrccap;
hgs
parents:
diff changeset
    48
GstStructure *str;
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
gboolean negcaps = FALSE;
hgs
parents:
diff changeset
    51
hgs
parents:
diff changeset
    52
static gboolean print_field (GQuark field, const GValue *value, gpointer pfx);
hgs
parents:
diff changeset
    53
static void print_caps (const GstCaps *caps, const gchar *pfx);
hgs
parents:
diff changeset
    54
hgs
parents:
diff changeset
    55
hgs
parents:
diff changeset
    56
hgs
parents:
diff changeset
    57
static void
hgs
parents:
diff changeset
    58
cb_raw_playback_handoff (GstElement *src, GstBuffer *buffer, GstPad *pad,
hgs
parents:
diff changeset
    59
        gpointer user_data)
hgs
parents:
diff changeset
    60
    {
hgs
parents:
diff changeset
    61
    static gint readbytes = 0;
hgs
parents:
diff changeset
    62
    static gboolean eofReached = FALSE;
hgs
parents:
diff changeset
    63
hgs
parents:
diff changeset
    64
    size_t readsize;
hgs
parents:
diff changeset
    65
    gint size;
hgs
parents:
diff changeset
    66
    FILE *f;
hgs
parents:
diff changeset
    67
    GstCaps *bufCaps;
hgs
parents:
diff changeset
    68
    if ( eofReached == TRUE )
hgs
parents:
diff changeset
    69
        {
hgs
parents:
diff changeset
    70
        //gst_element_set_state (pipeline, GST_STATE_NULL);
hgs
parents:
diff changeset
    71
       // gst_object_unref (GST_OBJECT (pipeline));
hgs
parents:
diff changeset
    72
        if ( gst_element_send_event (src, gst_event_new_eos ()) == TRUE )
hgs
parents:
diff changeset
    73
            {
hgs
parents:
diff changeset
    74
            g_print ("posted eos");
hgs
parents:
diff changeset
    75
           }
hgs
parents:
diff changeset
    76
     
hgs
parents:
diff changeset
    77
       else
hgs
parents:
diff changeset
    78
           {
hgs
parents:
diff changeset
    79
            //g_print ("unable to post eos");
hgs
parents:
diff changeset
    80
          }
hgs
parents:
diff changeset
    81
       return;
hgs
parents:
diff changeset
    82
       }
hgs
parents:
diff changeset
    83
hgs
parents:
diff changeset
    84
    readsize = 0;
hgs
parents:
diff changeset
    85
    f = fopen (carray, "r");
hgs
parents:
diff changeset
    86
    eofReached = TRUE;
hgs
parents:
diff changeset
    87
    if ( fseek(f, readbytes, 0) == 0 )
hgs
parents:
diff changeset
    88
        {
hgs
parents:
diff changeset
    89
        readsize = fread (GST_BUFFER_DATA (buffer),1,GST_BUFFER_SIZE (buffer),f);
hgs
parents:
diff changeset
    90
        eofReached = FALSE;
hgs
parents:
diff changeset
    91
        GST_BUFFER_SIZE (buffer) = readsize;
hgs
parents:
diff changeset
    92
        }
hgs
parents:
diff changeset
    93
    fclose(f);
hgs
parents:
diff changeset
    94
hgs
parents:
diff changeset
    95
    size = GST_BUFFER_SIZE (buffer);
hgs
parents:
diff changeset
    96
    readbytes += readsize;
hgs
parents:
diff changeset
    97
    if ( (readsize < size) || (readsize == 0) )
hgs
parents:
diff changeset
    98
        {
hgs
parents:
diff changeset
    99
        eofReached = TRUE;
hgs
parents:
diff changeset
   100
        }
hgs
parents:
diff changeset
   101
    
hgs
parents:
diff changeset
   102
    bufCaps = gst_caps_new_simple ("audio/x-raw-int",
hgs
parents:
diff changeset
   103
              "width", G_TYPE_INT, 16,
hgs
parents:
diff changeset
   104
              "depth", G_TYPE_INT, 16,
hgs
parents:
diff changeset
   105
              "signed",G_TYPE_BOOLEAN, TRUE,
hgs
parents:
diff changeset
   106
              "endianness",G_TYPE_INT, G_BYTE_ORDER,
hgs
parents:
diff changeset
   107
              "rate", G_TYPE_INT, 8000,
hgs
parents:
diff changeset
   108
              "channels", G_TYPE_INT, 1, NULL);
hgs
parents:
diff changeset
   109
    
hgs
parents:
diff changeset
   110
    gst_buffer_set_caps(buffer,bufCaps);
hgs
parents:
diff changeset
   111
hgs
parents:
diff changeset
   112
    }
hgs
parents:
diff changeset
   113
hgs
parents:
diff changeset
   114
static void
hgs
parents:
diff changeset
   115
cb_play_mp3_handoff (GstElement *fakesrc,
hgs
parents:
diff changeset
   116
        GstBuffer  *buffer,
hgs
parents:
diff changeset
   117
        GstPad     *pad,
hgs
parents:
diff changeset
   118
        gpointer    user_data)
hgs
parents:
diff changeset
   119
{
hgs
parents:
diff changeset
   120
GstCaps *bufCaps;
hgs
parents:
diff changeset
   121
  static gint readbytes = 0;
hgs
parents:
diff changeset
   122
  size_t readsize = 0;
hgs
parents:
diff changeset
   123
  int size = GST_BUFFER_SIZE (buffer);
hgs
parents:
diff changeset
   124
  
hgs
parents:
diff changeset
   125
  FILE *f = fopen (carray, "r");
hgs
parents:
diff changeset
   126
  fseek(f,readbytes,0);
hgs
parents:
diff changeset
   127
  readsize = fread(GST_BUFFER_DATA (buffer),1,GST_BUFFER_SIZE (buffer),f);
hgs
parents:
diff changeset
   128
  readbytes += readsize;
hgs
parents:
diff changeset
   129
  GST_BUFFER_SIZE (buffer) = readsize;
hgs
parents:
diff changeset
   130
  if(readsize == 0)
hgs
parents:
diff changeset
   131
      {
hgs
parents:
diff changeset
   132
      gst_element_send_event(fakesrc,gst_event_new_eos());
hgs
parents:
diff changeset
   133
      }
hgs
parents:
diff changeset
   134
  fclose(f);
hgs
parents:
diff changeset
   135
 
hgs
parents:
diff changeset
   136
}
hgs
parents:
diff changeset
   137
static void
hgs
parents:
diff changeset
   138
cb_record_raw_handoff (GstElement *fakesrc,
hgs
parents:
diff changeset
   139
        GstBuffer  *buffer,
hgs
parents:
diff changeset
   140
        GstPad     *pad,
hgs
parents:
diff changeset
   141
        gpointer    user_data)
hgs
parents:
diff changeset
   142
{
hgs
parents:
diff changeset
   143
  int size = GST_BUFFER_SIZE (buffer);
hgs
parents:
diff changeset
   144
  //g_print ("[%u]", size);
hgs
parents:
diff changeset
   145
  FILE *f = fopen (carray, "a");
hgs
parents:
diff changeset
   146
  fwrite(GST_BUFFER_DATA (buffer),1,GST_BUFFER_SIZE (buffer),f);
hgs
parents:
diff changeset
   147
  fclose(f);
hgs
parents:
diff changeset
   148
}
hgs
parents:
diff changeset
   149
hgs
parents:
diff changeset
   150
hgs
parents:
diff changeset
   151
static gboolean
hgs
parents:
diff changeset
   152
bus_call (GstBus     *bus,
hgs
parents:
diff changeset
   153
          GstMessage *msg,
hgs
parents:
diff changeset
   154
          gpointer    data)
hgs
parents:
diff changeset
   155
{
hgs
parents:
diff changeset
   156
  switch (GST_MESSAGE_TYPE (msg)) {
hgs
parents:
diff changeset
   157
    case GST_MESSAGE_EOS:
hgs
parents:
diff changeset
   158
        gst_element_set_state (pipeline, GST_STATE_NULL);
hgs
parents:
diff changeset
   159
        gst_object_unref (GST_OBJECT (pipeline));
hgs
parents:
diff changeset
   160
      break;
hgs
parents:
diff changeset
   161
    case GST_MESSAGE_ERROR: {
hgs
parents:
diff changeset
   162
      gchar *debug;
hgs
parents:
diff changeset
   163
      GError *err;
hgs
parents:
diff changeset
   164
      gst_message_parse_error (msg, &err, &debug);
hgs
parents:
diff changeset
   165
      g_free (debug);
hgs
parents:
diff changeset
   166
      g_print ("Error: %s\n", err->message);
hgs
parents:
diff changeset
   167
      g_error_free (err);
hgs
parents:
diff changeset
   168
      break;
hgs
parents:
diff changeset
   169
    }
hgs
parents:
diff changeset
   170
    default:
hgs
parents:
diff changeset
   171
      break;
hgs
parents:
diff changeset
   172
  }
hgs
parents:
diff changeset
   173
hgs
parents:
diff changeset
   174
  return TRUE;
hgs
parents:
diff changeset
   175
}
hgs
parents:
diff changeset
   176
hgs
parents:
diff changeset
   177
hgs
parents:
diff changeset
   178
static void 
hgs
parents:
diff changeset
   179
new_pad_cb (GstElement *wavparse, GstPad *new_pad, gpointer pipeline)
hgs
parents:
diff changeset
   180
 {
hgs
parents:
diff changeset
   181
   //GstElement *sink,*conv,*resample;
hgs
parents:
diff changeset
   182
   gst_element_set_state ((_GstElement *)pipeline, GST_STATE_PAUSED);
hgs
parents:
diff changeset
   183
   sink = gst_element_factory_make ("devsoundsink", "sink");
hgs
parents:
diff changeset
   184
   conv = gst_element_factory_make ("audioconvert", "audioconvert");
hgs
parents:
diff changeset
   185
  	if (!conv) {
hgs
parents:
diff changeset
   186
    	g_print ("could not create \"audioconvert\" element!");
hgs
parents:
diff changeset
   187
    	return;
hgs
parents:
diff changeset
   188
  		}
hgs
parents:
diff changeset
   189
   resample = gst_element_factory_make ("audioresample", "audioresample");
hgs
parents:
diff changeset
   190
  	if (!resample) {
hgs
parents:
diff changeset
   191
    	g_print ("could not create \"audioresample\" element!");
hgs
parents:
diff changeset
   192
    	return ;
hgs
parents:
diff changeset
   193
  		}
hgs
parents:
diff changeset
   194
   gst_bin_add_many(GST_BIN (pipeline), conv, resample, sink, NULL);
hgs
parents:
diff changeset
   195
   
hgs
parents:
diff changeset
   196
  // if (!gst_element_link (wavparse, sink))
hgs
parents:
diff changeset
   197
     // g_error ("link(wavparse, sink) failed!\n");
hgs
parents:
diff changeset
   198
     
hgs
parents:
diff changeset
   199
 	if(! gst_element_link_many (wavparse,conv, resample, sink, NULL))
hgs
parents:
diff changeset
   200
  		g_print ("link(wavparse,conv,remaple sink) failed!\n");  
hgs
parents:
diff changeset
   201
 
hgs
parents:
diff changeset
   202
   	gst_element_set_state ((_GstElement *)pipeline, GST_STATE_PLAYING);
hgs
parents:
diff changeset
   203
 }
hgs
parents:
diff changeset
   204
hgs
parents:
diff changeset
   205
 #define FILENAME 1024
hgs
parents:
diff changeset
   206
 int GstreamerNew(TFileName filename)
hgs
parents:
diff changeset
   207
 {
hgs
parents:
diff changeset
   208
  size_t ret;
hgs
parents:
diff changeset
   209
  
hgs
parents:
diff changeset
   210
  ret = wcstombs(carray, (const wchar_t *)filename.PtrZ(), FILENAME);
hgs
parents:
diff changeset
   211
  int file_type=0;
hgs
parents:
diff changeset
   212
  
hgs
parents:
diff changeset
   213
  
hgs
parents:
diff changeset
   214
  
hgs
parents:
diff changeset
   215
  	char *p;
hgs
parents:
diff changeset
   216
	p = strrchr(carray, '.');
hgs
parents:
diff changeset
   217
hgs
parents:
diff changeset
   218
	if ((p != NULL) && (strcmp(p, ".mp3") == 0))
hgs
parents:
diff changeset
   219
	{
hgs
parents:
diff changeset
   220
	file_type=2;	
hgs
parents:
diff changeset
   221
	}
hgs
parents:
diff changeset
   222
	else if ((p != NULL) && (strcmp(p, ".wav") == 0))
hgs
parents:
diff changeset
   223
	{
hgs
parents:
diff changeset
   224
	file_type=1;	
hgs
parents:
diff changeset
   225
	}
hgs
parents:
diff changeset
   226
    else if ((p != NULL) && (strcmp(p, ".raw") == 0))
hgs
parents:
diff changeset
   227
    {
hgs
parents:
diff changeset
   228
    file_type=3;    
hgs
parents:
diff changeset
   229
    }
hgs
parents:
diff changeset
   230
    else if ((p != NULL) && (strcmp(p, ".amr") == 0))
hgs
parents:
diff changeset
   231
    {
hgs
parents:
diff changeset
   232
    file_type=4;    
hgs
parents:
diff changeset
   233
    }
hgs
parents:
diff changeset
   234
    else if ((p != NULL) && (strcmp(p, ".g711") == 0))
hgs
parents:
diff changeset
   235
    {
hgs
parents:
diff changeset
   236
    file_type=5;    
hgs
parents:
diff changeset
   237
    }
hgs
parents:
diff changeset
   238
    else if ((p != NULL) && (strcmp(p, ".g729") == 0))
hgs
parents:
diff changeset
   239
    {
hgs
parents:
diff changeset
   240
    file_type=6;    
hgs
parents:
diff changeset
   241
    }
hgs
parents:
diff changeset
   242
    else if ((p != NULL) && (strcmp(p, ".lbc") == 0))
hgs
parents:
diff changeset
   243
    {
hgs
parents:
diff changeset
   244
    file_type=7;    
hgs
parents:
diff changeset
   245
    }
hgs
parents:
diff changeset
   246
	else
hgs
parents:
diff changeset
   247
		return -1;
hgs
parents:
diff changeset
   248
	
hgs
parents:
diff changeset
   249
	if(file_type==1)
hgs
parents:
diff changeset
   250
	{
hgs
parents:
diff changeset
   251
		gst_play_wave();
hgs
parents:
diff changeset
   252
	}
hgs
parents:
diff changeset
   253
	else if(file_type==2)
hgs
parents:
diff changeset
   254
	{
hgs
parents:
diff changeset
   255
		gst_play_mp3();
hgs
parents:
diff changeset
   256
	}
hgs
parents:
diff changeset
   257
    else if(file_type==3)
hgs
parents:
diff changeset
   258
    {
hgs
parents:
diff changeset
   259
        gst_play_raw();
hgs
parents:
diff changeset
   260
    }
hgs
parents:
diff changeset
   261
    else if(file_type==4)
hgs
parents:
diff changeset
   262
    {
hgs
parents:
diff changeset
   263
        gst_play_amr();
hgs
parents:
diff changeset
   264
    }
hgs
parents:
diff changeset
   265
    else if(file_type==5)
hgs
parents:
diff changeset
   266
    {
hgs
parents:
diff changeset
   267
        gst_play_g711();
hgs
parents:
diff changeset
   268
    }
hgs
parents:
diff changeset
   269
    else if(file_type==6)
hgs
parents:
diff changeset
   270
    {
hgs
parents:
diff changeset
   271
        gst_play_g729();
hgs
parents:
diff changeset
   272
    }
hgs
parents:
diff changeset
   273
    else if(file_type==7)
hgs
parents:
diff changeset
   274
    {
hgs
parents:
diff changeset
   275
        gst_play_ilbc();
hgs
parents:
diff changeset
   276
    }
hgs
parents:
diff changeset
   277
hgs
parents:
diff changeset
   278
	else
hgs
parents:
diff changeset
   279
	{
hgs
parents:
diff changeset
   280
		return 0;
hgs
parents:
diff changeset
   281
	}
hgs
parents:
diff changeset
   282
 } 
hgs
parents:
diff changeset
   283
 
hgs
parents:
diff changeset
   284
 
hgs
parents:
diff changeset
   285
int gst_play_mp3()
hgs
parents:
diff changeset
   286
{
hgs
parents:
diff changeset
   287
 /* create elements */
hgs
parents:
diff changeset
   288
 gboolean link_ok;
hgs
parents:
diff changeset
   289
 
hgs
parents:
diff changeset
   290
 pipeline = gst_pipeline_new ("pipeline");
hgs
parents:
diff changeset
   291
 source = gst_element_factory_make ("filesrc", "filesrc");
hgs
parents:
diff changeset
   292
 //sink = gst_element_factory_make ("fakesink", "sink");
hgs
parents:
diff changeset
   293
 sink = gst_element_factory_make ("devsoundsink", "sink");
hgs
parents:
diff changeset
   294
hgs
parents:
diff changeset
   295
 caps = gst_caps_new_simple ("audio/mp3",
hgs
parents:
diff changeset
   296
              "width", G_TYPE_INT, 16,
hgs
parents:
diff changeset
   297
              "depth", G_TYPE_INT, 16,
hgs
parents:
diff changeset
   298
              "signed",G_TYPE_BOOLEAN, TRUE,
hgs
parents:
diff changeset
   299
              "endianness",G_TYPE_INT, G_BYTE_ORDER,
hgs
parents:
diff changeset
   300
              "rate", G_TYPE_INT, 16000,
hgs
parents:
diff changeset
   301
              "channels", G_TYPE_INT, 2, NULL);
hgs
parents:
diff changeset
   302
             
hgs
parents:
diff changeset
   303
 bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
hgs
parents:
diff changeset
   304
 gst_bus_add_watch( bus, bus_call, NULL);
hgs
parents:
diff changeset
   305
 gst_object_unref (bus);
hgs
parents:
diff changeset
   306
hgs
parents:
diff changeset
   307
 g_object_set (G_OBJECT (source), "location", carray, NULL);
hgs
parents:
diff changeset
   308
hgs
parents:
diff changeset
   309
 gst_bin_add_many (GST_BIN (pipeline), source, sink, NULL);
hgs
parents:
diff changeset
   310
 
hgs
parents:
diff changeset
   311
 //gst_element_link (source, sink);
hgs
parents:
diff changeset
   312
 link_ok = gst_element_link_filtered (source, sink, caps);
hgs
parents:
diff changeset
   313
hgs
parents:
diff changeset
   314
 gst_element_set_state (pipeline, GST_STATE_PLAYING);
hgs
parents:
diff changeset
   315
hgs
parents:
diff changeset
   316
 return 0;  
hgs
parents:
diff changeset
   317
}
hgs
parents:
diff changeset
   318
 
hgs
parents:
diff changeset
   319
hgs
parents:
diff changeset
   320
 int gst_play_wave()
hgs
parents:
diff changeset
   321
 {
hgs
parents:
diff changeset
   322
    /* create elements */
hgs
parents:
diff changeset
   323
     if(!pipeline)
hgs
parents:
diff changeset
   324
         {
hgs
parents:
diff changeset
   325
         pipeline = gst_pipeline_new ("pipeline");
hgs
parents:
diff changeset
   326
         bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
hgs
parents:
diff changeset
   327
         gst_bus_add_watch (bus, bus_call, NULL);
hgs
parents:
diff changeset
   328
         gst_object_unref (bus);
hgs
parents:
diff changeset
   329
         }
hgs
parents:
diff changeset
   330
hgs
parents:
diff changeset
   331
     if(!source)
hgs
parents:
diff changeset
   332
         {
hgs
parents:
diff changeset
   333
         source = gst_element_factory_make ("filesrc", "pavsrc");
hgs
parents:
diff changeset
   334
         g_object_set (G_OBJECT (source), "location", carray, NULL);
hgs
parents:
diff changeset
   335
         gst_bin_add (GST_BIN (pipeline), source);
hgs
parents:
diff changeset
   336
         }
hgs
parents:
diff changeset
   337
hgs
parents:
diff changeset
   338
     if(!wavparse)
hgs
parents:
diff changeset
   339
         {
hgs
parents:
diff changeset
   340
         wavparse = gst_element_factory_make ("wavparse", "parse");
hgs
parents:
diff changeset
   341
         gst_bin_add (GST_BIN (pipeline), wavparse );
hgs
parents:
diff changeset
   342
         g_signal_connect (wavparse, "pad-added", G_CALLBACK (new_pad_cb),pipeline);
hgs
parents:
diff changeset
   343
         }
hgs
parents:
diff changeset
   344
 
hgs
parents:
diff changeset
   345
      /* set filename property on the file source */
hgs
parents:
diff changeset
   346
      if (!gst_element_link (source, wavparse))
hgs
parents:
diff changeset
   347
          {
hgs
parents:
diff changeset
   348
          g_print("could not link elements!");
hgs
parents:
diff changeset
   349
          return -1;
hgs
parents:
diff changeset
   350
          }
hgs
parents:
diff changeset
   351
          
hgs
parents:
diff changeset
   352
hgs
parents:
diff changeset
   353
      gst_element_set_state (pipeline, GST_STATE_PLAYING); 
hgs
parents:
diff changeset
   354
      return 0; 
hgs
parents:
diff changeset
   355
 }
hgs
parents:
diff changeset
   356
 
hgs
parents:
diff changeset
   357
 int gst_record_wav()
hgs
parents:
diff changeset
   358
    {
hgs
parents:
diff changeset
   359
hgs
parents:
diff changeset
   360
    /* create a new bin to hold the elements */
hgs
parents:
diff changeset
   361
    pipeline = gst_pipeline_new("pipeline");
hgs
parents:
diff changeset
   362
hgs
parents:
diff changeset
   363
    record = gst_element_factory_make("devsoundsrc", "record_audio");
hgs
parents:
diff changeset
   364
    if (!record)
hgs
parents:
diff changeset
   365
        {
hgs
parents:
diff changeset
   366
        g_print("could not create \"record\" element!");
hgs
parents:
diff changeset
   367
        return -1;
hgs
parents:
diff changeset
   368
        }
hgs
parents:
diff changeset
   369
    
hgs
parents:
diff changeset
   370
    filesink = gst_element_factory_make("filesink", "filesink");
hgs
parents:
diff changeset
   371
    if (!filesink)
hgs
parents:
diff changeset
   372
        {
hgs
parents:
diff changeset
   373
        g_print("could not create \"filesink\" element!");
hgs
parents:
diff changeset
   374
        return -1;
hgs
parents:
diff changeset
   375
        }
hgs
parents:
diff changeset
   376
hgs
parents:
diff changeset
   377
    wavenc = gst_element_factory_make("wavenc", "wavencoder");
hgs
parents:
diff changeset
   378
    if (!wavenc)
hgs
parents:
diff changeset
   379
        {
hgs
parents:
diff changeset
   380
        g_print("could not create \"wavenc\" element!");
hgs
parents:
diff changeset
   381
        return -1;
hgs
parents:
diff changeset
   382
        }
hgs
parents:
diff changeset
   383
hgs
parents:
diff changeset
   384
    _LIT(KFILENAME,"c:\\data\\test.wav");
hgs
parents:
diff changeset
   385
    TFileName fn;
hgs
parents:
diff changeset
   386
    fn.Append(KFILENAME);
hgs
parents:
diff changeset
   387
    TInt ret;
hgs
parents:
diff changeset
   388
    // char carray[FILENAME];
hgs
parents:
diff changeset
   389
    ret = wcstombs(carray, (const wchar_t *)fn.PtrZ(), FILENAME);
hgs
parents:
diff changeset
   390
hgs
parents:
diff changeset
   391
    g_object_set(G_OBJECT (filesink), "location", carray, NULL);
hgs
parents:
diff changeset
   392
    bus = gst_pipeline_get_bus(GST_PIPELINE (pipeline));
hgs
parents:
diff changeset
   393
    gst_bus_add_watch(bus, bus_call, NULL);
hgs
parents:
diff changeset
   394
    gst_object_unref(bus);
hgs
parents:
diff changeset
   395
hgs
parents:
diff changeset
   396
    /* add objects to the main pipeline */
hgs
parents:
diff changeset
   397
    gst_bin_add_many(GST_BIN (pipeline),record,wavenc,filesink, NULL);
hgs
parents:
diff changeset
   398
hgs
parents:
diff changeset
   399
    /* link the elements */
hgs
parents:
diff changeset
   400
    //gst_element_link_many(record, wavenc,filesink, NULL);
hgs
parents:
diff changeset
   401
    caps = gst_caps_new_simple ("audio/x-raw-int",
hgs
parents:
diff changeset
   402
              "width", G_TYPE_INT, 16,
hgs
parents:
diff changeset
   403
              "depth", G_TYPE_INT, 16,
hgs
parents:
diff changeset
   404
              "signed",G_TYPE_BOOLEAN, TRUE,
hgs
parents:
diff changeset
   405
              "endianness",G_TYPE_INT, G_BYTE_ORDER,
hgs
parents:
diff changeset
   406
              "rate", G_TYPE_INT, 16000,
hgs
parents:
diff changeset
   407
              "channels", G_TYPE_INT, 1, NULL);
hgs
parents:
diff changeset
   408
    
hgs
parents:
diff changeset
   409
    gst_element_link_filtered (record, wavenc, caps);
hgs
parents:
diff changeset
   410
    gst_element_link (wavenc, filesink);
hgs
parents:
diff changeset
   411
    gst_caps_unref (caps);
hgs
parents:
diff changeset
   412
hgs
parents:
diff changeset
   413
    /* start recording */
hgs
parents:
diff changeset
   414
    gst_element_set_state(pipeline, GST_STATE_PLAYING);
hgs
parents:
diff changeset
   415
hgs
parents:
diff changeset
   416
    return 0;
hgs
parents:
diff changeset
   417
    }
hgs
parents:
diff changeset
   418
 
hgs
parents:
diff changeset
   419
 int gst_record_amr()
hgs
parents:
diff changeset
   420
 {
hgs
parents:
diff changeset
   421
 iGstView->DrawText(_L("Recording AMR"),KRgbRed);
hgs
parents:
diff changeset
   422
hgs
parents:
diff changeset
   423
   /* create a new bin to hold the elements */
hgs
parents:
diff changeset
   424
  pipeline = gst_pipeline_new ("pipeline");
hgs
parents:
diff changeset
   425
  
hgs
parents:
diff changeset
   426
  //g_print ("pipeline created");
hgs
parents:
diff changeset
   427
  record = gst_element_factory_make ("devsoundsrc", "record_audio"); 
hgs
parents:
diff changeset
   428
 // encoder = gst_element_factory_make ("wavenc", NULL); 
hgs
parents:
diff changeset
   429
  if (!record) {
hgs
parents:
diff changeset
   430
    g_print ("could not create \"record\" element!");
hgs
parents:
diff changeset
   431
    iGstView->DrawText(_L("Devsound src not available"),KRgbRed);
hgs
parents:
diff changeset
   432
    return -1;
hgs
parents:
diff changeset
   433
  }
hgs
parents:
diff changeset
   434
hgs
parents:
diff changeset
   435
  filesink = gst_element_factory_make("filesink", "filesink");
hgs
parents:
diff changeset
   436
      if (!filesink)
hgs
parents:
diff changeset
   437
          {
hgs
parents:
diff changeset
   438
          g_print("could not create \"filesink\" element!");
hgs
parents:
diff changeset
   439
          return -1;
hgs
parents:
diff changeset
   440
          }
hgs
parents:
diff changeset
   441
hgs
parents:
diff changeset
   442
  caps = gst_caps_new_simple ("audio/amr",
hgs
parents:
diff changeset
   443
             "width", G_TYPE_INT, 8,
hgs
parents:
diff changeset
   444
             "depth", G_TYPE_INT, 8,
hgs
parents:
diff changeset
   445
             "signed",G_TYPE_BOOLEAN, TRUE,
hgs
parents:
diff changeset
   446
             "endianness",G_TYPE_INT, G_BYTE_ORDER,
hgs
parents:
diff changeset
   447
             "rate", G_TYPE_INT,  8000,
hgs
parents:
diff changeset
   448
             "channels", G_TYPE_INT, 1, NULL);
hgs
parents:
diff changeset
   449
  
hgs
parents:
diff changeset
   450
  
hgs
parents:
diff changeset
   451
  g_object_set (G_OBJECT (record),
hgs
parents:
diff changeset
   452
            "blocksize", 1280,
hgs
parents:
diff changeset
   453
             NULL);
hgs
parents:
diff changeset
   454
  
hgs
parents:
diff changeset
   455
  _LIT(KFILENAME,"c:\\data\\recordtest.amr");
hgs
parents:
diff changeset
   456
  TFileName fn;
hgs
parents:
diff changeset
   457
  fn.Append(KFILENAME);
hgs
parents:
diff changeset
   458
  TInt ret;
hgs
parents:
diff changeset
   459
  ret = wcstombs(carray, (const wchar_t *)fn.PtrZ(), FILENAME);
hgs
parents:
diff changeset
   460
  g_object_set(G_OBJECT (filesink), "location", carray, NULL);
hgs
parents:
diff changeset
   461
   
hgs
parents:
diff changeset
   462
  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
hgs
parents:
diff changeset
   463
  gst_bus_add_watch (bus, bus_call, NULL);
hgs
parents:
diff changeset
   464
  gst_object_unref (bus);
hgs
parents:
diff changeset
   465
  
hgs
parents:
diff changeset
   466
hgs
parents:
diff changeset
   467
  /* add objects to the main pipeline */
hgs
parents:
diff changeset
   468
  gst_bin_add_many(GST_BIN (pipeline),record,filesink , NULL);
hgs
parents:
diff changeset
   469
  /* link the elements */
hgs
parents:
diff changeset
   470
  gst_element_link_filtered (record, filesink, caps);
hgs
parents:
diff changeset
   471
  gst_element_set_state (pipeline, GST_STATE_PLAYING);
hgs
parents:
diff changeset
   472
  
hgs
parents:
diff changeset
   473
  return 0;
hgs
parents:
diff changeset
   474
 }
hgs
parents:
diff changeset
   475
 
hgs
parents:
diff changeset
   476
 int gst_record_g711()
hgs
parents:
diff changeset
   477
  {
hgs
parents:
diff changeset
   478
    /* create a new bin to hold the elements */
hgs
parents:
diff changeset
   479
   pipeline = gst_pipeline_new ("pipeline");
hgs
parents:
diff changeset
   480
   
hgs
parents:
diff changeset
   481
   //g_print ("pipeline created");
hgs
parents:
diff changeset
   482
   record = gst_element_factory_make ("devsoundsrc", "record_audio"); 
hgs
parents:
diff changeset
   483
  // encoder = gst_element_factory_make ("wavenc", NULL); 
hgs
parents:
diff changeset
   484
   if (!record) {
hgs
parents:
diff changeset
   485
     g_print ("could not create \"record\" element!");
hgs
parents:
diff changeset
   486
     return -1;
hgs
parents:
diff changeset
   487
   }
hgs
parents:
diff changeset
   488
hgs
parents:
diff changeset
   489
   filesink = gst_element_factory_make("filesink", "filesink");
hgs
parents:
diff changeset
   490
       if (!filesink)
hgs
parents:
diff changeset
   491
           {
hgs
parents:
diff changeset
   492
           g_print("could not create \"filesink\" element!");
hgs
parents:
diff changeset
   493
           return -1;
hgs
parents:
diff changeset
   494
           }
hgs
parents:
diff changeset
   495
hgs
parents:
diff changeset
   496
   caps = gst_caps_new_simple ("audio/x-alaw",
hgs
parents:
diff changeset
   497
              "width", G_TYPE_INT, 8,
hgs
parents:
diff changeset
   498
              "depth", G_TYPE_INT, 8,
hgs
parents:
diff changeset
   499
              "signed",G_TYPE_BOOLEAN, TRUE,
hgs
parents:
diff changeset
   500
              "endianness",G_TYPE_INT, G_BYTE_ORDER,
hgs
parents:
diff changeset
   501
              "rate", G_TYPE_INT,  8000,
hgs
parents:
diff changeset
   502
              "channels", G_TYPE_INT, 1, NULL);
hgs
parents:
diff changeset
   503
   
hgs
parents:
diff changeset
   504
   g_object_set (G_OBJECT (record),
hgs
parents:
diff changeset
   505
             "blocksize", 1280,
hgs
parents:
diff changeset
   506
              NULL);
hgs
parents:
diff changeset
   507
   
hgs
parents:
diff changeset
   508
   _LIT(KFILENAME,"c:\\data\\recordtest.g711");
hgs
parents:
diff changeset
   509
   TFileName fn;
hgs
parents:
diff changeset
   510
   fn.Append(KFILENAME);
hgs
parents:
diff changeset
   511
   TInt ret;
hgs
parents:
diff changeset
   512
   ret = wcstombs(carray, (const wchar_t *)fn.PtrZ(), FILENAME);
hgs
parents:
diff changeset
   513
   g_object_set(G_OBJECT (filesink), "location", carray, NULL);
hgs
parents:
diff changeset
   514
    
hgs
parents:
diff changeset
   515
   bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
hgs
parents:
diff changeset
   516
   gst_bus_add_watch (bus, bus_call, NULL);
hgs
parents:
diff changeset
   517
   gst_object_unref (bus);
hgs
parents:
diff changeset
   518
   
hgs
parents:
diff changeset
   519
hgs
parents:
diff changeset
   520
   /* add objects to the main pipeline */
hgs
parents:
diff changeset
   521
   gst_bin_add_many(GST_BIN (pipeline),record,filesink , NULL);
hgs
parents:
diff changeset
   522
   /* link the elements */
hgs
parents:
diff changeset
   523
   gst_element_link_filtered (record, filesink, caps);
hgs
parents:
diff changeset
   524
   gst_element_set_state (pipeline, GST_STATE_PLAYING);
hgs
parents:
diff changeset
   525
   
hgs
parents:
diff changeset
   526
   return 0;
hgs
parents:
diff changeset
   527
  }
hgs
parents:
diff changeset
   528
 
hgs
parents:
diff changeset
   529
 int gst_record_g729()
hgs
parents:
diff changeset
   530
  {
hgs
parents:
diff changeset
   531
    /* create a new bin to hold the elements */
hgs
parents:
diff changeset
   532
   pipeline = gst_pipeline_new ("pipeline");
hgs
parents:
diff changeset
   533
   
hgs
parents:
diff changeset
   534
   record = gst_element_factory_make ("devsoundsrc", "record_audio"); 
hgs
parents:
diff changeset
   535
   if (!record) {
hgs
parents:
diff changeset
   536
     g_print ("could not create \"record\" element!");
hgs
parents:
diff changeset
   537
     return -1;
hgs
parents:
diff changeset
   538
   }
hgs
parents:
diff changeset
   539
 
hgs
parents:
diff changeset
   540
   filesink = gst_element_factory_make("filesink", "filesink");
hgs
parents:
diff changeset
   541
       if (!filesink)
hgs
parents:
diff changeset
   542
           {
hgs
parents:
diff changeset
   543
           g_print("could not create \"filesink\" element!");
hgs
parents:
diff changeset
   544
           return -1;
hgs
parents:
diff changeset
   545
           }
hgs
parents:
diff changeset
   546
hgs
parents:
diff changeset
   547
   caps = gst_caps_new_simple ("audio/g729",
hgs
parents:
diff changeset
   548
              "width", G_TYPE_INT, 16,
hgs
parents:
diff changeset
   549
              "depth", G_TYPE_INT, 16,
hgs
parents:
diff changeset
   550
              "signed",G_TYPE_BOOLEAN, TRUE,
hgs
parents:
diff changeset
   551
              "endianness",G_TYPE_INT, G_BYTE_ORDER,
hgs
parents:
diff changeset
   552
              "rate", G_TYPE_INT,  8000,
hgs
parents:
diff changeset
   553
              "channels", G_TYPE_INT, 1, NULL);
hgs
parents:
diff changeset
   554
   
hgs
parents:
diff changeset
   555
   g_object_set (G_OBJECT (record),
hgs
parents:
diff changeset
   556
             "blocksize", 1280,
hgs
parents:
diff changeset
   557
              NULL);
hgs
parents:
diff changeset
   558
   
hgs
parents:
diff changeset
   559
   _LIT(KFILENAME,"c:\\data\\recordtest.g729");
hgs
parents:
diff changeset
   560
   TFileName fn;
hgs
parents:
diff changeset
   561
   fn.Append(KFILENAME);
hgs
parents:
diff changeset
   562
   TInt ret;
hgs
parents:
diff changeset
   563
   ret = wcstombs(carray, (const wchar_t *)fn.PtrZ(), FILENAME);
hgs
parents:
diff changeset
   564
   g_object_set(G_OBJECT (filesink), "location", carray, NULL);
hgs
parents:
diff changeset
   565
    
hgs
parents:
diff changeset
   566
   bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
hgs
parents:
diff changeset
   567
   gst_bus_add_watch (bus, bus_call, NULL);
hgs
parents:
diff changeset
   568
   gst_object_unref (bus);
hgs
parents:
diff changeset
   569
   
hgs
parents:
diff changeset
   570
hgs
parents:
diff changeset
   571
   /* add objects to the main pipeline */
hgs
parents:
diff changeset
   572
   gst_bin_add_many(GST_BIN (pipeline),record,filesink , NULL);
hgs
parents:
diff changeset
   573
   /* link the elements */
hgs
parents:
diff changeset
   574
   gst_element_link_filtered (record, filesink, caps);
hgs
parents:
diff changeset
   575
   gst_element_set_state (pipeline, GST_STATE_PLAYING);
hgs
parents:
diff changeset
   576
   
hgs
parents:
diff changeset
   577
   return 0;
hgs
parents:
diff changeset
   578
  }
hgs
parents:
diff changeset
   579
 
hgs
parents:
diff changeset
   580
 int gst_record_ilbc()
hgs
parents:
diff changeset
   581
  {
hgs
parents:
diff changeset
   582
    /* create a new bin to hold the elements */
hgs
parents:
diff changeset
   583
   pipeline = gst_pipeline_new ("pipeline");
hgs
parents:
diff changeset
   584
   
hgs
parents:
diff changeset
   585
   record = gst_element_factory_make ("devsoundsrc", "record_audio"); 
hgs
parents:
diff changeset
   586
   if (!record) {
hgs
parents:
diff changeset
   587
     g_print ("could not create \"record\" element!");
hgs
parents:
diff changeset
   588
     return -1;
hgs
parents:
diff changeset
   589
   }
hgs
parents:
diff changeset
   590
hgs
parents:
diff changeset
   591
   filesink = gst_element_factory_make("filesink", "filesink");
hgs
parents:
diff changeset
   592
       if (!filesink)
hgs
parents:
diff changeset
   593
           {
hgs
parents:
diff changeset
   594
           g_print("could not create \"filesink\" element!");
hgs
parents:
diff changeset
   595
           return -1;
hgs
parents:
diff changeset
   596
           }
hgs
parents:
diff changeset
   597
hgs
parents:
diff changeset
   598
   caps = gst_caps_new_simple ("audio/ilbc",
hgs
parents:
diff changeset
   599
              "width", G_TYPE_INT, 16,
hgs
parents:
diff changeset
   600
              "depth", G_TYPE_INT, 16,
hgs
parents:
diff changeset
   601
              "signed",G_TYPE_BOOLEAN, TRUE,
hgs
parents:
diff changeset
   602
              "endianness",G_TYPE_INT, G_BYTE_ORDER,
hgs
parents:
diff changeset
   603
              "rate", G_TYPE_INT,  8000,
hgs
parents:
diff changeset
   604
              "channels", G_TYPE_INT, 1, NULL);
hgs
parents:
diff changeset
   605
   
hgs
parents:
diff changeset
   606
   g_object_set (G_OBJECT (record),
hgs
parents:
diff changeset
   607
             "blocksize", 1280,
hgs
parents:
diff changeset
   608
              NULL);
hgs
parents:
diff changeset
   609
   
hgs
parents:
diff changeset
   610
   _LIT(KFILENAME,"c:\\data\\recordtest.lbc");
hgs
parents:
diff changeset
   611
   TFileName fn;
hgs
parents:
diff changeset
   612
   fn.Append(KFILENAME);
hgs
parents:
diff changeset
   613
   TInt ret;
hgs
parents:
diff changeset
   614
   ret = wcstombs(carray, (const wchar_t *)fn.PtrZ(), FILENAME);
hgs
parents:
diff changeset
   615
   g_object_set(G_OBJECT (filesink), "location", carray, NULL);
hgs
parents:
diff changeset
   616
    
hgs
parents:
diff changeset
   617
   bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
hgs
parents:
diff changeset
   618
   gst_bus_add_watch (bus, bus_call, NULL);
hgs
parents:
diff changeset
   619
   gst_object_unref (bus);
hgs
parents:
diff changeset
   620
   
hgs
parents:
diff changeset
   621
hgs
parents:
diff changeset
   622
   /* add objects to the main pipeline */
hgs
parents:
diff changeset
   623
   gst_bin_add_many(GST_BIN (pipeline),record,filesink , NULL);
hgs
parents:
diff changeset
   624
   /* link the elements */
hgs
parents:
diff changeset
   625
   gst_element_link_filtered (record, filesink, caps);
hgs
parents:
diff changeset
   626
   gst_element_set_state (pipeline, GST_STATE_PLAYING);
hgs
parents:
diff changeset
   627
   
hgs
parents:
diff changeset
   628
   return 0;
hgs
parents:
diff changeset
   629
  }
hgs
parents:
diff changeset
   630
hgs
parents:
diff changeset
   631
 int gst_record_raw()
hgs
parents:
diff changeset
   632
 {
hgs
parents:
diff changeset
   633
 
hgs
parents:
diff changeset
   634
   /* create a new bin to hold the elements */
hgs
parents:
diff changeset
   635
  pipeline = gst_pipeline_new ("pipeline");
hgs
parents:
diff changeset
   636
  
hgs
parents:
diff changeset
   637
  //g_print ("pipeline created");
hgs
parents:
diff changeset
   638
  record = gst_element_factory_make ("devsoundsrc", "record_audio"); 
hgs
parents:
diff changeset
   639
 // encoder = gst_element_factory_make ("wavenc", NULL); 
hgs
parents:
diff changeset
   640
  if (!record) {
hgs
parents:
diff changeset
   641
    g_print ("could not create \"record\" element!");
hgs
parents:
diff changeset
   642
    return -1;
hgs
parents:
diff changeset
   643
  }
hgs
parents:
diff changeset
   644
  //g_print ("record created");
hgs
parents:
diff changeset
   645
hgs
parents:
diff changeset
   646
  filesink = gst_element_factory_make("filesink", "filesink");
hgs
parents:
diff changeset
   647
      if (!filesink)
hgs
parents:
diff changeset
   648
          {
hgs
parents:
diff changeset
   649
          g_print("could not create \"filesink\" element!");
hgs
parents:
diff changeset
   650
          return -1;
hgs
parents:
diff changeset
   651
          }
hgs
parents:
diff changeset
   652
  //GstRingBufferSpec
hgs
parents:
diff changeset
   653
  //g_print ("sink created");
hgs
parents:
diff changeset
   654
  caps = gst_caps_new_simple ("audio/x-raw-int",
hgs
parents:
diff changeset
   655
             "width", G_TYPE_INT, 16,
hgs
parents:
diff changeset
   656
             "depth", G_TYPE_INT, 16,
hgs
parents:
diff changeset
   657
             "signed",G_TYPE_BOOLEAN, TRUE,
hgs
parents:
diff changeset
   658
             "endianness",G_TYPE_INT, G_BYTE_ORDER,
hgs
parents:
diff changeset
   659
             "rate", G_TYPE_INT,  8000,
hgs
parents:
diff changeset
   660
             "channels", G_TYPE_INT, 1, NULL);
hgs
parents:
diff changeset
   661
  
hgs
parents:
diff changeset
   662
  //g_print ("caps created");
hgs
parents:
diff changeset
   663
   g_object_set (G_OBJECT (record),
hgs
parents:
diff changeset
   664
             //"signal-handoffs", TRUE,
hgs
parents:
diff changeset
   665
             "blocksize", 1280,
hgs
parents:
diff changeset
   666
          // "gain",10000,
hgs
parents:
diff changeset
   667
              NULL);
hgs
parents:
diff changeset
   668
  
hgs
parents:
diff changeset
   669
  /*g_object_set (G_OBJECT (fakesink),
hgs
parents:
diff changeset
   670
             "signal-handoffs", TRUE,
hgs
parents:
diff changeset
   671
             "sizemax", 4096,
hgs
parents:
diff changeset
   672
             "sizetype", 2, NULL);*/
hgs
parents:
diff changeset
   673
  
hgs
parents:
diff changeset
   674
  _LIT(KFILENAME,"c:\\data\\test.raw");
hgs
parents:
diff changeset
   675
  TFileName fn;
hgs
parents:
diff changeset
   676
  fn.Append(KFILENAME);
hgs
parents:
diff changeset
   677
  TInt ret;
hgs
parents:
diff changeset
   678
  //char carray[FILENAME];
hgs
parents:
diff changeset
   679
  carray[0]='\0';
hgs
parents:
diff changeset
   680
  ret = wcstombs(carray, (const wchar_t *)fn.PtrZ(), FILENAME);
hgs
parents:
diff changeset
   681
   
hgs
parents:
diff changeset
   682
   
hgs
parents:
diff changeset
   683
  g_object_set (G_OBJECT (filesink), "location", carray,"buffer-size",1280, NULL);
hgs
parents:
diff changeset
   684
  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
hgs
parents:
diff changeset
   685
  gst_bus_add_watch (bus, bus_call, NULL);
hgs
parents:
diff changeset
   686
  gst_object_unref (bus);
hgs
parents:
diff changeset
   687
  
hgs
parents:
diff changeset
   688
hgs
parents:
diff changeset
   689
  /* add objects to the main pipeline */
hgs
parents:
diff changeset
   690
  gst_bin_add_many(GST_BIN (pipeline),record,filesink , NULL);
hgs
parents:
diff changeset
   691
  //g_print ("added to pipe");
hgs
parents:
diff changeset
   692
  /* link the elements */
hgs
parents:
diff changeset
   693
  //gst_element_link(record,/*encoder,*/ fakesink/*audiosink*/);
hgs
parents:
diff changeset
   694
  gst_element_link_filtered (record, filesink, caps);
hgs
parents:
diff changeset
   695
  //g_signal_connect (fakesink, "handoff", G_CALLBACK (cb_record_raw_handoff), NULL);
hgs
parents:
diff changeset
   696
  /* start recording */
hgs
parents:
diff changeset
   697
 // g_print ("start pipe");
hgs
parents:
diff changeset
   698
 
hgs
parents:
diff changeset
   699
  gst_element_set_state (pipeline, GST_STATE_PLAYING);
hgs
parents:
diff changeset
   700
  
hgs
parents:
diff changeset
   701
  return 0;
hgs
parents:
diff changeset
   702
 }
hgs
parents:
diff changeset
   703
     
hgs
parents:
diff changeset
   704
 
hgs
parents:
diff changeset
   705
 int gst_play_raw()
hgs
parents:
diff changeset
   706
 {
hgs
parents:
diff changeset
   707
 /* create elements */
hgs
parents:
diff changeset
   708
 gboolean link_ok;
hgs
parents:
diff changeset
   709
 
hgs
parents:
diff changeset
   710
 pipeline = gst_pipeline_new ("pipeline");
hgs
parents:
diff changeset
   711
 source = gst_element_factory_make ("filesrc", "filesrc");
hgs
parents:
diff changeset
   712
 //sink = gst_element_factory_make ("fakesink", "sink");
hgs
parents:
diff changeset
   713
 sink = gst_element_factory_make ("devsoundsink", "sink");
hgs
parents:
diff changeset
   714
hgs
parents:
diff changeset
   715
caps = gst_caps_new_simple ("audio/x-raw-int",
hgs
parents:
diff changeset
   716
             "width", G_TYPE_INT, 16,
hgs
parents:
diff changeset
   717
             "depth", G_TYPE_INT, 16,
hgs
parents:
diff changeset
   718
             "signed",G_TYPE_BOOLEAN, TRUE,
hgs
parents:
diff changeset
   719
             "endianness",G_TYPE_INT, G_BYTE_ORDER,
hgs
parents:
diff changeset
   720
             "rate", G_TYPE_INT,  8000,
hgs
parents:
diff changeset
   721
             "channels", G_TYPE_INT, 1, NULL);
hgs
parents:
diff changeset
   722
             
hgs
parents:
diff changeset
   723
 bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
hgs
parents:
diff changeset
   724
 gst_bus_add_watch( bus, bus_call, NULL);
hgs
parents:
diff changeset
   725
 gst_object_unref (bus);
hgs
parents:
diff changeset
   726
hgs
parents:
diff changeset
   727
 /*g_object_set (G_OBJECT(source),
hgs
parents:
diff changeset
   728
         "signal-handoffs", TRUE,
hgs
parents:
diff changeset
   729
         //"num-buffers", 4,
hgs
parents:
diff changeset
   730
         "sizemax", 4096,
hgs
parents:
diff changeset
   731
         "sizetype", 2,
hgs
parents:
diff changeset
   732
         NULL);*/
hgs
parents:
diff changeset
   733
 
hgs
parents:
diff changeset
   734
 g_object_set (G_OBJECT (source), "location", carray, NULL);
hgs
parents:
diff changeset
   735
// g_signal_connect (source, "handoff", G_CALLBACK (cb_raw_playback_handoff), NULL);
hgs
parents:
diff changeset
   736
hgs
parents:
diff changeset
   737
 gst_bin_add_many (GST_BIN (pipeline), source, sink, NULL);
hgs
parents:
diff changeset
   738
 
hgs
parents:
diff changeset
   739
 //gst_element_link (source, sink);
hgs
parents:
diff changeset
   740
 link_ok = gst_element_link_filtered (source, sink, caps);
hgs
parents:
diff changeset
   741
hgs
parents:
diff changeset
   742
 gst_element_set_state (pipeline, GST_STATE_PLAYING);
hgs
parents:
diff changeset
   743
hgs
parents:
diff changeset
   744
while (caps->refcount > 1)
hgs
parents:
diff changeset
   745
     {
hgs
parents:
diff changeset
   746
     gst_caps_unref (caps);
hgs
parents:
diff changeset
   747
     }
hgs
parents:
diff changeset
   748
 gst_caps_unref (caps);
hgs
parents:
diff changeset
   749
hgs
parents:
diff changeset
   750
 
hgs
parents:
diff changeset
   751
 return 0; 
hgs
parents:
diff changeset
   752
 }
hgs
parents:
diff changeset
   753
hgs
parents:
diff changeset
   754
 int gst_play_amr()
hgs
parents:
diff changeset
   755
  {
hgs
parents:
diff changeset
   756
  /* create elements */
hgs
parents:
diff changeset
   757
  gboolean link_ok;
hgs
parents:
diff changeset
   758
  
hgs
parents:
diff changeset
   759
  pipeline = gst_pipeline_new ("pipeline");
hgs
parents:
diff changeset
   760
  source = gst_element_factory_make ("filesrc", "filesrc");
hgs
parents:
diff changeset
   761
  //sink = gst_element_factory_make ("fakesink", "sink");
hgs
parents:
diff changeset
   762
  sink = gst_element_factory_make ("devsoundsink", "sink");
hgs
parents:
diff changeset
   763
hgs
parents:
diff changeset
   764
 caps = gst_caps_new_simple ("audio/amr",
hgs
parents:
diff changeset
   765
              "width", G_TYPE_INT, 8,
hgs
parents:
diff changeset
   766
              "depth", G_TYPE_INT, 8,
hgs
parents:
diff changeset
   767
              "signed",G_TYPE_BOOLEAN, TRUE,
hgs
parents:
diff changeset
   768
              "endianness",G_TYPE_INT, G_BYTE_ORDER,
hgs
parents:
diff changeset
   769
              "rate", G_TYPE_INT,  8000,
hgs
parents:
diff changeset
   770
              "channels", G_TYPE_INT, 1, NULL);
hgs
parents:
diff changeset
   771
              
hgs
parents:
diff changeset
   772
  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
hgs
parents:
diff changeset
   773
  gst_bus_add_watch( bus, bus_call, NULL);
hgs
parents:
diff changeset
   774
  gst_object_unref (bus);
hgs
parents:
diff changeset
   775
hgs
parents:
diff changeset
   776
  g_object_set (G_OBJECT (source), "location", carray, NULL);
hgs
parents:
diff changeset
   777
hgs
parents:
diff changeset
   778
  gst_bin_add_many (GST_BIN (pipeline), source, sink, NULL);
hgs
parents:
diff changeset
   779
  
hgs
parents:
diff changeset
   780
  link_ok = gst_element_link_filtered (source, sink, caps);
hgs
parents:
diff changeset
   781
hgs
parents:
diff changeset
   782
  gst_element_set_state (pipeline, GST_STATE_PLAYING);
hgs
parents:
diff changeset
   783
hgs
parents:
diff changeset
   784
  return 0; 
hgs
parents:
diff changeset
   785
  }
hgs
parents:
diff changeset
   786
hgs
parents:
diff changeset
   787
 int gst_play_g711()
hgs
parents:
diff changeset
   788
  {
hgs
parents:
diff changeset
   789
  /* create elements */
hgs
parents:
diff changeset
   790
  gboolean link_ok;
hgs
parents:
diff changeset
   791
  
hgs
parents:
diff changeset
   792
  pipeline = gst_pipeline_new ("pipeline");
hgs
parents:
diff changeset
   793
  source = gst_element_factory_make ("filesrc", "filesrc");
hgs
parents:
diff changeset
   794
  sink = gst_element_factory_make ("devsoundsink", "sink");
hgs
parents:
diff changeset
   795
hgs
parents:
diff changeset
   796
 caps = gst_caps_new_simple ("audio/x-alaw",
hgs
parents:
diff changeset
   797
              "width", G_TYPE_INT, 16,
hgs
parents:
diff changeset
   798
              "depth", G_TYPE_INT, 16,
hgs
parents:
diff changeset
   799
              "signed",G_TYPE_BOOLEAN, TRUE,
hgs
parents:
diff changeset
   800
              "endianness",G_TYPE_INT, G_BYTE_ORDER,
hgs
parents:
diff changeset
   801
              "rate", G_TYPE_INT,  8000,
hgs
parents:
diff changeset
   802
              "channels", G_TYPE_INT, 1, NULL);
hgs
parents:
diff changeset
   803
              
hgs
parents:
diff changeset
   804
  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
hgs
parents:
diff changeset
   805
  gst_bus_add_watch( bus, bus_call, NULL);
hgs
parents:
diff changeset
   806
  gst_object_unref (bus);
hgs
parents:
diff changeset
   807
hgs
parents:
diff changeset
   808
  g_object_set (G_OBJECT (source), "location", carray, NULL);
hgs
parents:
diff changeset
   809
  gst_bin_add_many (GST_BIN (pipeline), source, sink, NULL);
hgs
parents:
diff changeset
   810
  
hgs
parents:
diff changeset
   811
  link_ok = gst_element_link_filtered (source, sink, caps);
hgs
parents:
diff changeset
   812
hgs
parents:
diff changeset
   813
  gst_element_set_state (pipeline, GST_STATE_PLAYING);
hgs
parents:
diff changeset
   814
hgs
parents:
diff changeset
   815
  return 0; 
hgs
parents:
diff changeset
   816
  }
hgs
parents:
diff changeset
   817
 int gst_play_g729()
hgs
parents:
diff changeset
   818
  {
hgs
parents:
diff changeset
   819
  /* create elements */
hgs
parents:
diff changeset
   820
  gboolean link_ok;
hgs
parents:
diff changeset
   821
  
hgs
parents:
diff changeset
   822
  pipeline = gst_pipeline_new ("pipeline");
hgs
parents:
diff changeset
   823
  source = gst_element_factory_make ("filesrc", "filesrc");
hgs
parents:
diff changeset
   824
  sink = gst_element_factory_make ("devsoundsink", "sink");
hgs
parents:
diff changeset
   825
hgs
parents:
diff changeset
   826
 caps = gst_caps_new_simple ("audio/g729",
hgs
parents:
diff changeset
   827
              "width", G_TYPE_INT, 16,
hgs
parents:
diff changeset
   828
              "depth", G_TYPE_INT, 16,
hgs
parents:
diff changeset
   829
              "signed",G_TYPE_BOOLEAN, TRUE,
hgs
parents:
diff changeset
   830
              "endianness",G_TYPE_INT, G_BYTE_ORDER,
hgs
parents:
diff changeset
   831
              "rate", G_TYPE_INT,  8000,
hgs
parents:
diff changeset
   832
              "channels", G_TYPE_INT, 1, NULL);
hgs
parents:
diff changeset
   833
              
hgs
parents:
diff changeset
   834
  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
hgs
parents:
diff changeset
   835
  gst_bus_add_watch( bus, bus_call, NULL);
hgs
parents:
diff changeset
   836
  gst_object_unref (bus);
hgs
parents:
diff changeset
   837
hgs
parents:
diff changeset
   838
  g_object_set (G_OBJECT (source), "location", carray, NULL);
hgs
parents:
diff changeset
   839
hgs
parents:
diff changeset
   840
  gst_bin_add_many (GST_BIN (pipeline), source, sink, NULL);
hgs
parents:
diff changeset
   841
  
hgs
parents:
diff changeset
   842
  link_ok = gst_element_link_filtered (source, sink, caps);
hgs
parents:
diff changeset
   843
hgs
parents:
diff changeset
   844
  gst_element_set_state (pipeline, GST_STATE_PLAYING);
hgs
parents:
diff changeset
   845
hgs
parents:
diff changeset
   846
  return 0; 
hgs
parents:
diff changeset
   847
  }
hgs
parents:
diff changeset
   848
 int gst_play_ilbc()
hgs
parents:
diff changeset
   849
  {
hgs
parents:
diff changeset
   850
  /* create elements */
hgs
parents:
diff changeset
   851
  gboolean link_ok;
hgs
parents:
diff changeset
   852
  
hgs
parents:
diff changeset
   853
  pipeline = gst_pipeline_new ("pipeline");
hgs
parents:
diff changeset
   854
  source = gst_element_factory_make ("filesrc", "filesrc");
hgs
parents:
diff changeset
   855
  sink = gst_element_factory_make ("devsoundsink", "sink");
hgs
parents:
diff changeset
   856
hgs
parents:
diff changeset
   857
 caps = gst_caps_new_simple ("audio/ilbc",
hgs
parents:
diff changeset
   858
              "width", G_TYPE_INT, 16,
hgs
parents:
diff changeset
   859
              "depth", G_TYPE_INT, 16,
hgs
parents:
diff changeset
   860
              "signed",G_TYPE_BOOLEAN, TRUE,
hgs
parents:
diff changeset
   861
              "endianness",G_TYPE_INT, G_BYTE_ORDER,
hgs
parents:
diff changeset
   862
              "rate", G_TYPE_INT,  8000,
hgs
parents:
diff changeset
   863
              "channels", G_TYPE_INT, 1, NULL);
hgs
parents:
diff changeset
   864
              
hgs
parents:
diff changeset
   865
  bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
hgs
parents:
diff changeset
   866
  gst_bus_add_watch( bus, bus_call, NULL);
hgs
parents:
diff changeset
   867
  gst_object_unref (bus);
hgs
parents:
diff changeset
   868
hgs
parents:
diff changeset
   869
  g_object_set (G_OBJECT (source), "location", carray, NULL);
hgs
parents:
diff changeset
   870
hgs
parents:
diff changeset
   871
  gst_bin_add_many (GST_BIN (pipeline), source, sink, NULL);
hgs
parents:
diff changeset
   872
  
hgs
parents:
diff changeset
   873
  link_ok = gst_element_link_filtered (source, sink, caps);
hgs
parents:
diff changeset
   874
hgs
parents:
diff changeset
   875
  gst_element_set_state (pipeline, GST_STATE_PLAYING);
hgs
parents:
diff changeset
   876
  return 0; 
hgs
parents:
diff changeset
   877
  }
hgs
parents:
diff changeset
   878
hgs
parents:
diff changeset
   879
 
hgs
parents:
diff changeset
   880
 //******
hgs
parents:
diff changeset
   881
 int gst_current_volume()
hgs
parents:
diff changeset
   882
     {     
hgs
parents:
diff changeset
   883
     if(!sink)
hgs
parents:
diff changeset
   884
         {
hgs
parents:
diff changeset
   885
         iGstView->DrawText(_L("Devsound sink not available"),KRgbRed);
hgs
parents:
diff changeset
   886
         return -1;
hgs
parents:
diff changeset
   887
         }
hgs
parents:
diff changeset
   888
     int vol;
hgs
parents:
diff changeset
   889
     TBuf<25> currentvolume(_L("current volume "));    
hgs
parents:
diff changeset
   890
     g_object_get(G_OBJECT(sink),
hgs
parents:
diff changeset
   891
                    "volume",&vol,NULL);
hgs
parents:
diff changeset
   892
     
hgs
parents:
diff changeset
   893
     currentvolume.AppendNum(vol);
hgs
parents:
diff changeset
   894
     
hgs
parents:
diff changeset
   895
     iGstView->DrawText(currentvolume,KRgbBlack);
hgs
parents:
diff changeset
   896
     return 0;
hgs
parents:
diff changeset
   897
     }
hgs
parents:
diff changeset
   898
 
hgs
parents:
diff changeset
   899
 int gst_max_volume()
hgs
parents:
diff changeset
   900
      {    
hgs
parents:
diff changeset
   901
      if(!sink)
hgs
parents:
diff changeset
   902
           {
hgs
parents:
diff changeset
   903
           iGstView->DrawText(_L("Devsound sink not available"),KRgbRed);
hgs
parents:
diff changeset
   904
           return -1;
hgs
parents:
diff changeset
   905
           }
hgs
parents:
diff changeset
   906
      
hgs
parents:
diff changeset
   907
      int maxvol;
hgs
parents:
diff changeset
   908
      TBuf<25> maxvolume(_L("max volume "));   
hgs
parents:
diff changeset
   909
      
hgs
parents:
diff changeset
   910
      g_object_get(G_OBJECT(sink),
hgs
parents:
diff changeset
   911
                     "maxvolume",&maxvol,NULL);
hgs
parents:
diff changeset
   912
      
hgs
parents:
diff changeset
   913
      maxvolume.AppendNum(maxvol);
hgs
parents:
diff changeset
   914
      
hgs
parents:
diff changeset
   915
      iGstView->DrawText(maxvolume,KRgbBlack);
hgs
parents:
diff changeset
   916
      return 0;
hgs
parents:
diff changeset
   917
      
hgs
parents:
diff changeset
   918
      }
hgs
parents:
diff changeset
   919
 int gst_volume_up()
hgs
parents:
diff changeset
   920
     {
hgs
parents:
diff changeset
   921
     
hgs
parents:
diff changeset
   922
     if(!sink)
hgs
parents:
diff changeset
   923
          {
hgs
parents:
diff changeset
   924
          iGstView->DrawText(_L("Devsound sink not available"),KRgbRed);
hgs
parents:
diff changeset
   925
          return -1;
hgs
parents:
diff changeset
   926
          }
hgs
parents:
diff changeset
   927
     iGstView->DrawText(_L("volume up"),KRgbBlack);
hgs
parents:
diff changeset
   928
     int maxvol;
hgs
parents:
diff changeset
   929
     g_object_get(G_OBJECT(sink),
hgs
parents:
diff changeset
   930
                       "maxvolume",&maxvol,NULL);
hgs
parents:
diff changeset
   931
     g_object_set (G_OBJECT (sink), 
hgs
parents:
diff changeset
   932
                        "volume", maxvol, NULL);
hgs
parents:
diff changeset
   933
     return 0;
hgs
parents:
diff changeset
   934
     }
hgs
parents:
diff changeset
   935
hgs
parents:
diff changeset
   936
 int gst_volume_down()
hgs
parents:
diff changeset
   937
     {
hgs
parents:
diff changeset
   938
     if(!sink)
hgs
parents:
diff changeset
   939
          {
hgs
parents:
diff changeset
   940
          iGstView->DrawText(_L("Devsound sink not available"),KRgbRed);
hgs
parents:
diff changeset
   941
          return -1;
hgs
parents:
diff changeset
   942
          }
hgs
parents:
diff changeset
   943
     
hgs
parents:
diff changeset
   944
     iGstView->DrawText(_L("volume down"),KRgbBlack);
hgs
parents:
diff changeset
   945
     int maxvol;
hgs
parents:
diff changeset
   946
     g_object_get(G_OBJECT(sink),
hgs
parents:
diff changeset
   947
                        "maxvolume",&maxvol,NULL);
hgs
parents:
diff changeset
   948
     g_object_set (G_OBJECT (sink), 
hgs
parents:
diff changeset
   949
                        "volume", maxvol/2, NULL);
hgs
parents:
diff changeset
   950
     return 0;
hgs
parents:
diff changeset
   951
     }
hgs
parents:
diff changeset
   952
 
hgs
parents:
diff changeset
   953
 int gst_current_gain()
hgs
parents:
diff changeset
   954
     {     
hgs
parents:
diff changeset
   955
     if(!record)
hgs
parents:
diff changeset
   956
         {
hgs
parents:
diff changeset
   957
         iGstView->DrawText(_L("Devsound source not available"),KRgbRed);
hgs
parents:
diff changeset
   958
         return -1;
hgs
parents:
diff changeset
   959
         }
hgs
parents:
diff changeset
   960
     int gain;
hgs
parents:
diff changeset
   961
     TBuf<25> currentgain(_L("current gain "));    
hgs
parents:
diff changeset
   962
     g_object_get(G_OBJECT(record),
hgs
parents:
diff changeset
   963
                    "gain",&gain,NULL);
hgs
parents:
diff changeset
   964
     
hgs
parents:
diff changeset
   965
     currentgain.AppendNum(gain);
hgs
parents:
diff changeset
   966
     
hgs
parents:
diff changeset
   967
     iGstView->DrawText(currentgain,KRgbBlack);
hgs
parents:
diff changeset
   968
     return 0;
hgs
parents:
diff changeset
   969
     }
hgs
parents:
diff changeset
   970
 
hgs
parents:
diff changeset
   971
 int gst_max_gain()
hgs
parents:
diff changeset
   972
      {    
hgs
parents:
diff changeset
   973
      if(!record)
hgs
parents:
diff changeset
   974
           {
hgs
parents:
diff changeset
   975
           iGstView->DrawText(_L("Devsound source not available"),KRgbRed);
hgs
parents:
diff changeset
   976
           return -1;
hgs
parents:
diff changeset
   977
           }
hgs
parents:
diff changeset
   978
      
hgs
parents:
diff changeset
   979
      int max;
hgs
parents:
diff changeset
   980
      TBuf<25> maxgain(_L("max gain "));   
hgs
parents:
diff changeset
   981
      
hgs
parents:
diff changeset
   982
      g_object_get(G_OBJECT(record),
hgs
parents:
diff changeset
   983
                     "maxgain",&max,NULL);
hgs
parents:
diff changeset
   984
      
hgs
parents:
diff changeset
   985
      maxgain.AppendNum(max);
hgs
parents:
diff changeset
   986
      
hgs
parents:
diff changeset
   987
      iGstView->DrawText(maxgain,KRgbBlack);
hgs
parents:
diff changeset
   988
      return 0;
hgs
parents:
diff changeset
   989
      
hgs
parents:
diff changeset
   990
      }
hgs
parents:
diff changeset
   991
 int gst_gain_up()
hgs
parents:
diff changeset
   992
     {
hgs
parents:
diff changeset
   993
     
hgs
parents:
diff changeset
   994
     if(!record)
hgs
parents:
diff changeset
   995
          {
hgs
parents:
diff changeset
   996
          iGstView->DrawText(_L("Devsound source not available"),KRgbRed);
hgs
parents:
diff changeset
   997
          return -1;
hgs
parents:
diff changeset
   998
          }
hgs
parents:
diff changeset
   999
     int max;
hgs
parents:
diff changeset
  1000
     g_object_get(G_OBJECT(record),
hgs
parents:
diff changeset
  1001
                      "maxgain",&max,NULL);
hgs
parents:
diff changeset
  1002
     
hgs
parents:
diff changeset
  1003
     iGstView->DrawText(_L("gain up"),KRgbBlack);
hgs
parents:
diff changeset
  1004
     g_object_set (G_OBJECT (record), 
hgs
parents:
diff changeset
  1005
                        "gain", max, NULL);
hgs
parents:
diff changeset
  1006
     return 0;
hgs
parents:
diff changeset
  1007
     }
hgs
parents:
diff changeset
  1008
hgs
parents:
diff changeset
  1009
 int gst_gain_down()
hgs
parents:
diff changeset
  1010
     {
hgs
parents:
diff changeset
  1011
     if(!record)
hgs
parents:
diff changeset
  1012
          {
hgs
parents:
diff changeset
  1013
          iGstView->DrawText(_L("Devsound source not available"),KRgbRed);
hgs
parents:
diff changeset
  1014
          return -1;
hgs
parents:
diff changeset
  1015
          }
hgs
parents:
diff changeset
  1016
     int max;
hgs
parents:
diff changeset
  1017
     g_object_get(G_OBJECT(record),
hgs
parents:
diff changeset
  1018
                      "maxgain",&max,NULL);
hgs
parents:
diff changeset
  1019
     iGstView->DrawText(_L("gain down"),KRgbBlack);
hgs
parents:
diff changeset
  1020
     g_object_set (G_OBJECT (sink), 
hgs
parents:
diff changeset
  1021
                        "gain", max/2, NULL);
hgs
parents:
diff changeset
  1022
     return 0;
hgs
parents:
diff changeset
  1023
     }
hgs
parents:
diff changeset
  1024
 
hgs
parents:
diff changeset
  1025
 
hgs
parents:
diff changeset
  1026
 
hgs
parents:
diff changeset
  1027
 int gst_balance()
hgs
parents:
diff changeset
  1028
     {
hgs
parents:
diff changeset
  1029
     if(!sink)
hgs
parents:
diff changeset
  1030
           {
hgs
parents:
diff changeset
  1031
           iGstView->DrawText(_L("Devsound sink not available"),KRgbRed);
hgs
parents:
diff changeset
  1032
           return -1;
hgs
parents:
diff changeset
  1033
           }
hgs
parents:
diff changeset
  1034
      
hgs
parents:
diff changeset
  1035
      iGstView->DrawText(_L("balance"),KRgbBlack);
hgs
parents:
diff changeset
  1036
    /*  g_object_set (G_OBJECT (sink), 
hgs
parents:
diff changeset
  1037
                         "left balance", 5000,
hgs
parents:
diff changeset
  1038
                         "right balance",5000,NULL);
hgs
parents:
diff changeset
  1039
                         */
hgs
parents:
diff changeset
  1040
     return 0;
hgs
parents:
diff changeset
  1041
     }
hgs
parents:
diff changeset
  1042
 
hgs
parents:
diff changeset
  1043
 void samplesplayed()
hgs
parents:
diff changeset
  1044
      {
hgs
parents:
diff changeset
  1045
      if(!sink)
hgs
parents:
diff changeset
  1046
           {
hgs
parents:
diff changeset
  1047
           iGstView->DrawText(_L("Devsound sink not available"),KRgbRed);      
hgs
parents:
diff changeset
  1048
           }
hgs
parents:
diff changeset
  1049
      int samples;
hgs
parents:
diff changeset
  1050
      TBuf<25> samplesplayed(_L("samples played "));    
hgs
parents:
diff changeset
  1051
      g_object_get (G_OBJECT (sink), 
hgs
parents:
diff changeset
  1052
                   "samples played", &samples, NULL);
hgs
parents:
diff changeset
  1053
      
hgs
parents:
diff changeset
  1054
      samplesplayed.AppendNum(samples);
hgs
parents:
diff changeset
  1055
      iGstView->DrawText(samplesplayed,KRgbBlack);   
hgs
parents:
diff changeset
  1056
      }
hgs
parents:
diff changeset
  1057
hgs
parents:
diff changeset
  1058
 void samplesrecorded()
hgs
parents:
diff changeset
  1059
       {
hgs
parents:
diff changeset
  1060
       if(!record)
hgs
parents:
diff changeset
  1061
            {
hgs
parents:
diff changeset
  1062
            iGstView->DrawText(_L("Devsound src not available"),KRgbRed);      
hgs
parents:
diff changeset
  1063
            }
hgs
parents:
diff changeset
  1064
       int samples;
hgs
parents:
diff changeset
  1065
       TBuf<25> samplesrecorded(_L("samples recorded "));    
hgs
parents:
diff changeset
  1066
       g_object_get (G_OBJECT (record), 
hgs
parents:
diff changeset
  1067
                    "samples recorded", &samples, NULL);
hgs
parents:
diff changeset
  1068
       
hgs
parents:
diff changeset
  1069
       samplesrecorded.AppendNum(samples);
hgs
parents:
diff changeset
  1070
       iGstView->DrawText(samplesrecorded,KRgbBlack);   
hgs
parents:
diff changeset
  1071
       } 
hgs
parents:
diff changeset
  1072
 
hgs
parents:
diff changeset
  1073
 static gboolean print_field (GQuark field, const GValue *value, gpointer pfx)
hgs
parents:
diff changeset
  1074
     {
hgs
parents:
diff changeset
  1075
     gchar *str = gst_value_serialize (value);
hgs
parents:
diff changeset
  1076
     
hgs
parents:
diff changeset
  1077
     const gchar* c;
hgs
parents:
diff changeset
  1078
hgs
parents:
diff changeset
  1079
     RDebug::Printf("%s  %15s: %s\n", (gchar *) pfx, c = g_quark_to_string (field), str);
hgs
parents:
diff changeset
  1080
     
hgs
parents:
diff changeset
  1081
     if(negcaps)
hgs
parents:
diff changeset
  1082
         {
hgs
parents:
diff changeset
  1083
         TPtrC8 property((const TText8*)c);
hgs
parents:
diff changeset
  1084
         TPtrC8 val((const TText8*)str);
hgs
parents:
diff changeset
  1085
         TBuf<10> appdval;
hgs
parents:
diff changeset
  1086
         appdval.Copy(val);
hgs
parents:
diff changeset
  1087
      
hgs
parents:
diff changeset
  1088
         TBuf<25> name;
hgs
parents:
diff changeset
  1089
         name.Copy(property);
hgs
parents:
diff changeset
  1090
         name.Append(':');
hgs
parents:
diff changeset
  1091
         name.Append(appdval);
hgs
parents:
diff changeset
  1092
       
hgs
parents:
diff changeset
  1093
         iGstView->DrawText(name,KRgbBlack);
hgs
parents:
diff changeset
  1094
         }    
hgs
parents:
diff changeset
  1095
     g_free (str);
hgs
parents:
diff changeset
  1096
     return TRUE;
hgs
parents:
diff changeset
  1097
     }
hgs
parents:
diff changeset
  1098
hgs
parents:
diff changeset
  1099
 static void print_caps (const GstCaps *caps, const gchar *pfx)
hgs
parents:
diff changeset
  1100
     {
hgs
parents:
diff changeset
  1101
     guint i;
hgs
parents:
diff changeset
  1102
hgs
parents:
diff changeset
  1103
     g_return_if_fail (caps != NULL);
hgs
parents:
diff changeset
  1104
hgs
parents:
diff changeset
  1105
     if (gst_caps_is_any (caps)) {
hgs
parents:
diff changeset
  1106
     RDebug::Printf("%sANY\n", pfx);
hgs
parents:
diff changeset
  1107
     return;
hgs
parents:
diff changeset
  1108
     }
hgs
parents:
diff changeset
  1109
     if (gst_caps_is_empty (caps)) {
hgs
parents:
diff changeset
  1110
     RDebug::Printf("%sEMPTY\n", pfx);
hgs
parents:
diff changeset
  1111
     return;
hgs
parents:
diff changeset
  1112
     }
hgs
parents:
diff changeset
  1113
     const gchar *c;
hgs
parents:
diff changeset
  1114
     for (i = 0; i < gst_caps_get_size (caps); i++) {
hgs
parents:
diff changeset
  1115
     GstStructure *structure = gst_caps_get_structure (caps, i);
hgs
parents:
diff changeset
  1116
     
hgs
parents:
diff changeset
  1117
     RDebug::Printf("%s%s\n", pfx,c = gst_structure_get_name (structure));
hgs
parents:
diff changeset
  1118
     
hgs
parents:
diff changeset
  1119
     TPtrC8 fmt((const TText8*)c);
hgs
parents:
diff changeset
  1120
   
hgs
parents:
diff changeset
  1121
     TBuf<25> name;
hgs
parents:
diff changeset
  1122
     name.Copy(fmt);
hgs
parents:
diff changeset
  1123
    
hgs
parents:
diff changeset
  1124
     iGstView->DrawText(name,KRgbBlack);
hgs
parents:
diff changeset
  1125
         
hgs
parents:
diff changeset
  1126
     gst_structure_foreach (structure, print_field, (gpointer) pfx);
hgs
parents:
diff changeset
  1127
     }
hgs
parents:
diff changeset
  1128
     }
hgs
parents:
diff changeset
  1129
 
hgs
parents:
diff changeset
  1130
 void getsinkpadcaps()
hgs
parents:
diff changeset
  1131
     {
hgs
parents:
diff changeset
  1132
     RDebug::Print(_L("Devsound Pad Caps"));
hgs
parents:
diff changeset
  1133
     if(!sink)
hgs
parents:
diff changeset
  1134
          {
hgs
parents:
diff changeset
  1135
          iGstView->DrawText(_L("Devsound sink not available"),KRgbRed);
hgs
parents:
diff changeset
  1136
          return;
hgs
parents:
diff changeset
  1137
          }
hgs
parents:
diff changeset
  1138
     negcaps = FALSE;
hgs
parents:
diff changeset
  1139
     dssinkpad = gst_element_get_pad (sink, "sink");   
hgs
parents:
diff changeset
  1140
     dssinkcap = gst_pad_get_caps (dssinkpad);
hgs
parents:
diff changeset
  1141
     
hgs
parents:
diff changeset
  1142
     print_caps (dssinkcap, "     ");
hgs
parents:
diff changeset
  1143
     }
hgs
parents:
diff changeset
  1144
 
hgs
parents:
diff changeset
  1145
 void negotiatedsinkcaps()
hgs
parents:
diff changeset
  1146
     {
hgs
parents:
diff changeset
  1147
     RDebug::Print(_L("Negotiated caps"));
hgs
parents:
diff changeset
  1148
      if(!sink)
hgs
parents:
diff changeset
  1149
           {
hgs
parents:
diff changeset
  1150
           iGstView->DrawText(_L("Devsound sink not available"),KRgbRed);
hgs
parents:
diff changeset
  1151
           return;
hgs
parents:
diff changeset
  1152
           }
hgs
parents:
diff changeset
  1153
      negcaps = TRUE;
hgs
parents:
diff changeset
  1154
      dssinkpad = gst_element_get_pad (sink, "sink");   
hgs
parents:
diff changeset
  1155
      dssinkcap = gst_pad_get_negotiated_caps (dssinkpad);
hgs
parents:
diff changeset
  1156
      
hgs
parents:
diff changeset
  1157
      print_caps (dssinkcap, "     ");    
hgs
parents:
diff changeset
  1158
     }
hgs
parents:
diff changeset
  1159
 
hgs
parents:
diff changeset
  1160
 void getsrcpadcaps()
hgs
parents:
diff changeset
  1161
      {
hgs
parents:
diff changeset
  1162
      RDebug::Print(_L("Devsound Source Pad Caps"));
hgs
parents:
diff changeset
  1163
      if(!record)
hgs
parents:
diff changeset
  1164
           {
hgs
parents:
diff changeset
  1165
           iGstView->DrawText(_L("Devsound src not available"),KRgbRed);
hgs
parents:
diff changeset
  1166
           return;
hgs
parents:
diff changeset
  1167
           }
hgs
parents:
diff changeset
  1168
      negcaps = FALSE;
hgs
parents:
diff changeset
  1169
      dssrcpad = gst_element_get_pad (record, "src");   
hgs
parents:
diff changeset
  1170
      dssrccap = gst_pad_get_caps (dssrcpad);
hgs
parents:
diff changeset
  1171
      
hgs
parents:
diff changeset
  1172
      print_caps (dssrccap, "     ");
hgs
parents:
diff changeset
  1173
      }
hgs
parents:
diff changeset
  1174
  
hgs
parents:
diff changeset
  1175
  void negotiatedsrccaps()
hgs
parents:
diff changeset
  1176
      {
hgs
parents:
diff changeset
  1177
      RDebug::Print(_L("Negotiated  src caps"));
hgs
parents:
diff changeset
  1178
       if(!record)
hgs
parents:
diff changeset
  1179
            {
hgs
parents:
diff changeset
  1180
            iGstView->DrawText(_L("Devsound src not available"),KRgbRed);
hgs
parents:
diff changeset
  1181
            return;
hgs
parents:
diff changeset
  1182
            }
hgs
parents:
diff changeset
  1183
       negcaps = TRUE;
hgs
parents:
diff changeset
  1184
       dssrcpad = gst_element_get_pad (record, "src");   
hgs
parents:
diff changeset
  1185
       dssrccap = gst_pad_get_negotiated_caps (dssrcpad);
hgs
parents:
diff changeset
  1186
   
hgs
parents:
diff changeset
  1187
       print_caps (dssrccap, "     ");
hgs
parents:
diff changeset
  1188
          
hgs
parents:
diff changeset
  1189
      }