gst_plugins_symbian/tsrc/gstreamertestmodule/src/GStreamerTestClassBlocks.cpp
branchRCL_3
changeset 29 567bb019e3e3
parent 2 5505e8908944
child 30 7e817e7e631c
--- a/gst_plugins_symbian/tsrc/gstreamertestmodule/src/GStreamerTestClassBlocks.cpp	Wed Mar 31 22:03:18 2010 +0300
+++ b/gst_plugins_symbian/tsrc/gstreamertestmodule/src/GStreamerTestClassBlocks.cpp	Tue Aug 31 15:30:33 2010 +0300
@@ -30,6 +30,7 @@
 #include "debug.h"
 #include <stdlib.h>
 #include <string.h>
+#include <unistd.h>
 
 
 _LIT8(defaultMedia,"audio/x-raw-int");
@@ -113,6 +114,9 @@
     iFakesink = NULL;
     iFilesink = NULL;
     iEncoder = NULL;
+    iAACEncoder = NULL;
+    iQtMux = NULL;
+    iAmrMux = NULL;
     iFilter = NULL;
     iWavenc = NULL;
     iBus = NULL;
@@ -184,6 +188,14 @@
       g_error_free (err);
       break;
     }
+    case GST_MESSAGE_STATE_CHANGED:
+        {
+        GstState*  state = NULL;
+        GstState * pending = NULL;
+        gst_element_get_state(GST_ELEMENT (objects->iPipeline),state,pending,-1 );
+        //int x = 10;
+        }
+        break;
     default:
       break;
   }
@@ -264,7 +276,12 @@
         ENTRY( "SetExpectedEvents", CGStreamerTestClass::SetExpectedEvents ),
         ENTRY( "SetMainLoopRun", CGStreamerTestClass::SetMainLoopRun ),
         ENTRY( "SetCapsInPipeLine", CGStreamerTestClass::SetCapsInPipeLine ),
-		
+        ENTRY( "StopRecording", CGStreamerTestClass::StopRecording ),
+        ENTRY( "SeekElement", CGStreamerTestClass::SeekElement ),
+        ENTRY( "CheckProperties", CGStreamerTestClass::CheckProperties ),
+        ENTRY( "GstReliabilitytestPlaypause", CGStreamerTestClass::GstReliabilitytestPlaypause ),
+        ENTRY( "GstReliabilitytestRecording", CGStreamerTestClass::GstReliabilitytestRecording ),
+        ENTRY( "PlayBack", CGStreamerTestClass::PlayBack ),  
         };
 
     const TInt count = sizeof( KFunctions ) / 
@@ -577,6 +594,142 @@
     return KErrNone;
     }
 
+/*** block b  from ../../../docs/manual/highlevel-components.xml ***/
+static gboolean
+my_bus_callback (GstBus     *bus,
+         GstMessage *message,
+         gpointer    data)
+{
+      
+  GMainLoop *loop = ( GMainLoop * )data;
+
+  switch (GST_MESSAGE_TYPE (message)) {
+    case GST_MESSAGE_ERROR: {
+      GError *err;
+      gchar *debug;
+
+      gst_message_parse_error (message, &err, &debug);
+      g_print ("Error: %s\n", err->message);
+      g_error_free (err);
+      g_free (debug);
+
+      g_main_loop_quit (loop);
+      break;
+    }
+    case GST_MESSAGE_EOS:
+        
+       /* end-of-stream */
+      g_main_loop_quit (loop);
+      break;
+    default:
+      /* unhandled message */
+      break;
+  }
+
+  /* remove message from the queue */
+  return TRUE;
+}
+
+/*** block c  from ../../../docs/manual/highlevel-components.xml ***/
+GstElement *pipeline;
+GstPad* devsoundsinkpad = NULL;
+
+static void
+cb_newpad (GstElement *decodebin,
+       GstPad     *pad,
+       gboolean    last,
+       gpointer    data)
+{
+    GstCaps *caps;
+      GstStructure *str;
+      GstPadLinkReturn linkret= GST_PAD_LINK_OK ;
+
+      /* check media type */
+      caps = gst_pad_get_caps (pad);
+      str = gst_caps_get_structure (caps, 0);
+      if (!g_strrstr (gst_structure_get_name (str), "audio")) {
+        gst_caps_unref (caps);
+        return;
+      }
+      gst_caps_unref (caps);
+
+      /* link'n'play */
+      linkret = gst_pad_link (pad, devsoundsinkpad);
+}
+
+
+gboolean  cb_autoplug( GstBin * *bin,
+                        GstPad        *pad,
+                        GstCaps       *caps,
+                        gpointer       user_data)
+{
+    
+    GstCaps* sinkcaps = NULL;    
+    gboolean supported = FALSE; 
+    
+    sinkcaps = gst_pad_get_caps( devsoundsinkpad );
+        
+    supported = gst_caps_is_subset( caps, sinkcaps );
+    
+    if( supported )
+    {
+      return FALSE;
+    }
+   
+    return TRUE;
+
+}
+
+
+
+TInt CGStreamerTestClass::PlayBack( CStifItemParser& aItem )
+{
+      GMainLoop *loop;
+      GstElement *src, *dec, *sink;
+      GstBus *bus;            
+      
+      FTRACE(FPrint(_L("CGStreamerTestClass::PlayBack")));     
+      
+      iLog->Log(_L(">>filesrc creation "));
+
+      src = gst_element_factory_make ("filesrc", "source");
+      
+      iLog->Log(_L("<<filesrc creation "));
+      
+      TPtrC location;
+      TFileName filename;
+      
+      char carray[1024];
+      aItem.GetNextString(location);
+      filename.Copy(location);
+      wcstombs(carray, (const wchar_t *)filename.PtrZ(), 1024);
+                      
+      g_object_set (G_OBJECT (src), "location", carray, NULL);
+      
+     // gst_bin_add_many(GST_BIN (iObjects->iPipeline),src, NULL);
+      
+      iLog->Log(_L(">>decodebin2 creation "));
+      dec = gst_element_factory_make ("decodebin2", "decoder");
+      iLog->Log(_L("<<decodebin2 creation "));       
+
+      /* create audio output */     
+      sink = gst_element_factory_make ("devsoundsink", "sink");
+            
+      gst_bin_add_many (GST_BIN (iObjects->iPipeline), src, dec, sink, NULL);
+      
+      devsoundsinkpad = gst_element_get_pad( sink, "sink");          
+      
+      g_signal_connect (dec, "new-decoded-pad", G_CALLBACK (cb_newpad), NULL);
+      g_signal_connect (dec, "autoplug-continue", G_CALLBACK (cb_autoplug), NULL);
+      
+      gst_element_link (src, dec);        
+           
+      iLog->Log(_L("<<Setting pipeline to Play"));
+            
+      return KErrNone;   
+    
+}
+
 // -----------------------------------------------------------------------------
 // CGStreamerTestClass::CreatePipeLine
 // Create Pipeline
@@ -594,6 +747,8 @@
     iLog->Log(_L("<<CGStreamerTestClass::InitPipeLine"));   
     return KErrNone;
     }
+	
+
 
 TInt CGStreamerTestClass::SetMainLoopRun( CStifItemParser& /*aItem*/ )
     {
@@ -740,6 +895,48 @@
                 }
             break;
             }
+        case   ENOKIAAACENCODER:	        
+            {
+            if(iObjects->iAACEncoder)
+                {
+                error = KErrAlreadyExists;
+                }
+            else
+                {
+                iObjects->iAACEncoder = gst_element_factory_make("nokiaaacenc", "nokiaaacenc");     
+                if( iObjects->iAACEncoder == NULL )
+                    iLog->Log(_L(" iObjects->iAACEncoder == NULL"));
+                }
+            break;
+            }
+        case   ENOKIAQTMUX:            
+            {
+            if(iObjects->iQtMux)
+                {
+                error = KErrAlreadyExists;
+                }
+            else
+                {
+                iObjects->iQtMux = gst_element_factory_make("mp4mux", "mp4mux");     
+                if( iObjects->iQtMux == NULL )
+                    iLog->Log(_L(" iObjects->iQtMux == NULL"));
+                }
+            break;
+            }       
+        case   ENOKIAAMRMUX:            
+            {
+            if(iObjects->iAmrMux)
+                {
+                error = KErrAlreadyExists;
+                }
+            else
+                {
+                iObjects->iAmrMux = gst_element_factory_make("amrmux", "amrmux");     
+                if( iObjects->iAmrMux == NULL )
+                    iLog->Log(_L(" iObjects->iAmrMux == NULL"));
+                }
+            break;
+            }            
 	    case   ERESAMPLER:
             {
             if(iObjects->iResampler)
@@ -890,6 +1087,42 @@
                 }
             break;
             }
+        case   ENOKIAAACENCODER:
+            {
+            if(!iObjects->iAACEncoder)
+                {
+                error = KErrNotFound;
+                }
+            else
+                {
+                }
+            break;
+            }            
+        case   ENOKIAQTMUX:
+            {
+            if(!iObjects->iQtMux)
+                {
+                error = KErrNotFound;
+                }
+            else
+                {
+                }
+            break;
+            }              
+        case   ENOKIAAMRMUX:
+            {
+            if(!iObjects->iAmrMux)
+                {
+                error = KErrNotFound;
+                }
+            else
+                {
+                    gboolean header;
+                    g_object_get (G_OBJECT (iObjects->iAmrMux), "header", &header, NULL); 
+
+                }
+            break;
+            }             
         case   ERESAMPLER:
             {
             if(!iObjects->iResampler)
@@ -956,6 +1189,17 @@
                     FTRACE(FPrint(_L("CGStreamerTestClass::GetElementProperties SamplesRecorded[%d]"),value));
                     iLog->Log(_L("CGStreamerTestClass::GetElementProperties SamplesRecorded[%d]"),value);
                     }
+				else if(!property.Compare(KTagLeftBalanceProperty()))
+                    {                  
+                        g_object_get (G_OBJECT (iObjects->iSource),(const char *)(des.PtrZ()), &value, NULL); 
+                     }             
+          
+                else if(!property.Compare(KTagRightBalanceProperty()))
+                    {
+                    
+                        g_object_get (G_OBJECT (iObjects->iSource),(const char *)(des.PtrZ()), &value, NULL); 
+
+                        }	
                 delete prop;
                 }
             break;
@@ -1119,6 +1363,42 @@
                 }
             break;
             }
+        case   ENOKIAAACENCODER:
+            {
+            if(!iObjects->iAACEncoder)
+                {
+                error = KErrNotFound;
+                }
+            else
+                {
+                }
+            break;
+            }            
+        case   ENOKIAQTMUX:
+            {
+            if(!iObjects->iQtMux)
+                {
+                error = KErrNotFound;
+                }
+            else
+                {
+                }
+            break;
+            }               
+        case   ENOKIAAMRMUX:
+            {
+            if(!iObjects->iAmrMux)
+                {
+                error = KErrNotFound;
+                }
+            else
+                {
+                    TInt value;
+                    aItem.GetNextInt(value);
+                    g_object_set (G_OBJECT (iObjects->iAmrMux), "header", (gboolean)value, NULL);                     
+                }
+            break;
+            }              
         case   ERESAMPLER:
             {
             if(!iObjects->iResampler)
@@ -1239,6 +1519,18 @@
                         error = KErrNotFound;
                         }
                     }
+                else if(!property.Compare(KTagNumBuffersProperty()))
+                    {
+                    TInt value;
+                    if(!aItem.GetNextInt(value))
+                        {
+                        g_object_set (G_OBJECT (iObjects->iSource),(const char *)(des.PtrZ()), value, NULL); 
+                        }
+                    else
+                        {
+                        error = KErrNotFound;
+                        }
+                    }
                 delete prop;
                 }
             break;
@@ -1492,6 +1784,45 @@
                 }
             break;
             }
+        case   ENOKIAAACENCODER:
+            {
+            iLog->Log(_L("<<CGStreamerTestClass::AddElementToPipeline ENOKIAAACENCODER"));
+            if(!iObjects->iAACEncoder)
+                {
+                error = KErrNotFound;
+                }
+            else
+                {
+                gst_bin_add_many(GST_BIN (iObjects->iPipeline),iObjects->iAACEncoder, NULL);
+                }
+            break;
+            }            
+        case   ENOKIAQTMUX:
+            {
+            
+            if(!iObjects->iQtMux)
+                {
+                error = KErrNotFound;
+                }
+            else
+                {
+                gst_bin_add_many(GST_BIN (iObjects->iPipeline),iObjects->iQtMux, NULL);
+                }
+            break;
+            }     
+        case   ENOKIAAMRMUX:
+            {
+            
+            if(!iObjects->iAmrMux)
+                {
+                error = KErrNotFound;
+                }
+            else
+                {
+                gst_bin_add_many(GST_BIN (iObjects->iPipeline),iObjects->iAmrMux, NULL);
+                }
+            break;
+            }             
         case   ERESAMPLER:
             {
             if(!iObjects->iResampler)
@@ -1566,6 +1897,8 @@
     return error;
     }
 
+
+
 TInt CGStreamerTestClass::SetCapsInPipeLine( CStifItemParser& aItem )
     {
     TInt error(KErrNone);
@@ -2249,6 +2582,42 @@
                     }
                 break;
                 }
+            case   ENOKIAAACENCODER:
+                {
+                if(!iObjects->iAACEncoder)
+                    {
+                    error = KErrNotFound;
+                    }
+                else
+                    {
+                    array.Append(iObjects->iAACEncoder);
+                    }
+                break;
+                }                
+            case   ENOKIAQTMUX:
+                {
+                if(!iObjects->iQtMux)
+                    {
+                    error = KErrNotFound;
+                    }
+                else
+                    {
+                    array.Append(iObjects->iQtMux);
+                    }
+                break;
+                }                  
+            case   ENOKIAAMRMUX:
+                {
+                if(!iObjects->iAmrMux)
+                    {
+                    error = KErrNotFound;
+                    }
+                else
+                    {
+                    array.Append(iObjects->iAmrMux);
+                    }
+                break;
+                }                 
             case   ERESAMPLER:
                 {
                 if(!iObjects->iResampler)
@@ -2326,7 +2695,31 @@
                 }
             else
                 {
-                linkOK = gst_element_link(array[i-1],array[i]);
+                    if( array[i] == iObjects->iQtMux)
+                    {
+                        iLog->Log(_L("array[i] == iObjects->iQtMux"));
+                        GstPad* qtsinkpad  = gst_element_get_request_pad( array[i], "audio_%d");
+                        if( !qtsinkpad )
+                            {
+                                iLog->Log(_L("qtsinkpad failed"));
+                            }
+                        GstPad* aacencsrcpad  = gst_element_get_pad( array[i-1], "src");
+                        if( !aacencsrcpad )
+                            {
+                                iLog->Log(_L("aacencsrcpad failed"));
+                            }
+                        
+                        //linkOK = gst_pad_link (aacencsrcpad,qtsinkpad);
+                        if( gst_pad_link (aacencsrcpad,qtsinkpad) != GST_PAD_LINK_OK )
+                            {
+                        iLog->Log(_L("gst_pad_link (aacencsrcpad,qtsinkpad) failed"));
+                        linkOK = 0;
+                            }
+                    }
+                    else
+                    {    
+                        linkOK = gst_element_link(array[i-1],array[i]);
+                    }
                 }
             }        
         }
@@ -2337,4 +2730,420 @@
     }
 
 
+
+
+
+
+
+
+
+
+
+
+
+TInt CGStreamerTestClass::StopRecording( CStifItemParser& /*aItem*/ )
+    {   
+    FTRACE(FPrint(_L("CGStreamerTestClass::StopRecording")));
+    iLog->Log(_L(">>CGStreamerTestClass::StopRecording"));   
+    gst_element_send_event (iObjects->iPipeline, gst_event_new_eos ());
+    iLog->Log(_L("<<CGStreamerTestClass::StopRecording"));   
+    return KErrNone;
+    }
+
+TInt CGStreamerTestClass::GstReliabilitytestRecording( CStifItemParser& aItem )
+    {   
+    FTRACE(FPrint(_L("CGStreamerTestClass::GstReliabilitytestRecording")));
+    iLog->Log(_L(">>CGStreamerTestClass::GstReliabilitytestRecording"));   
+    TInt i=0;
+    aItem.GetNextInt(i);
+    while(--i)
+        {
+         gst_element_set_state (iObjects->iPipeline, GST_STATE_PLAYING );
+         sleep (60);
+        }
+    iLog->Log(_L("<<CGStreamerTestClass::GstReliabilitytestRecording"));   
+    return KErrNone;
+    }
+
+
+TInt CGStreamerTestClass::GstReliabilitytestPlaypause( CStifItemParser& aItem )
+    {   
+    FTRACE(FPrint(_L("CGStreamerTestClass::GstReliabilitytestPlaypause")));
+    iLog->Log(_L(">>CGStreamerTestClass::GstReliabilitytestPlaypause"));   
+    TInt i=0;
+    aItem.GetNextInt(i);
+    //aItem.GetNextInt(element);
+    while( --i )
+        {
+        gst_element_set_state (iObjects->iPipeline, GST_STATE_PLAYING );
+        sleep(10);
+        gst_element_set_state (iObjects->iPipeline, GST_STATE_PAUSED );
+        sleep(2);
+        }
+    iLog->Log(_L("<<CGStreamerTestClass::GstReliabilitytestPlaypause"));   
+    return KErrNone;
+    }
+
+static gint convert_devsound_rate(gint devsound_rate)
+    {
+    gint result;
+
+    switch (devsound_rate)
+        {
+        case 1:
+            result=8000;
+            break;
+        case 2:
+            result=11025;
+            break;
+        case 4:
+            result=16000;
+            break;
+        case 8:
+            result=22050;
+            break;
+        case 16:
+            result=32000;
+            break;
+        case 32:
+            result=44100;
+            break;
+        case 64:
+            result=48000;
+            break;
+        case 128:
+            result=88200;
+            break;
+        case 256:
+            result=96000;
+            break;
+        case 512:
+            result=12000;
+            break;
+        case 1024:
+            result=24000;
+            break;
+        case 2048:
+            result=64000;
+            break;
+        default:
+            result=8000;
+            break;
+
+        }
+    return result;
+
+    }
+
+TInt CGStreamerTestClass::CheckProperties( CStifItemParser& aItem )
+    {   
+    FTRACE(FPrint(_L("CGStreamerTestClass::CheckProperties")));
+    iLog->Log(_L(">>CGStreamerTestClass::CheckProperties"));   
+    TInt error = KErrNone;
+    TInt element;
+    TInt ValueExpected(0);
+    aItem.GetNextInt(element);
+        switch(element)
+            {
+            case   EFILESOURCE:
+                {
+                if(!iObjects->iSource)
+                    {
+                    error = KErrNotFound;
+                    }
+                else
+                    {
+                    }
+                break;
+                }
+            case   EFILESINK:
+                {
+                if(!iObjects->iSink)
+                    {
+                    error = KErrNotFound;
+                    }
+                else
+                    {
+                    }
+                break;
+                }
+            case   EFAKESOURCE:
+                {
+                if(!iObjects->iSource)
+                    {
+                    error = KErrNotFound;
+                    }
+                else
+                    {
+                    }
+                break;
+                }
+            case   EFAKESINK:
+                {
+                if(!iObjects->iSink)
+                    {
+                    error = KErrNotFound;
+                    }
+                else
+                    {
+                    }
+                break;
+                }
+            case   EWAVPARSE:
+                {
+                if(!iObjects->iWavparse)
+                    {
+                    error = KErrNotFound;
+                    }
+                else
+                    {
+                    }
+                break;
+                }
+            case   EMP3DECODER:
+                {
+                if(!iObjects->iDecoder)
+                    {
+                    error = KErrNotFound;
+                    }
+                else
+                    {
+                    }
+                break;
+                }
+            case   EWAVEENCODER:
+                {
+                if(!iObjects->iEncoder)
+                    {
+                    error = KErrNotFound;
+                    }
+                else
+                    {
+                    }
+                break;
+                }
+            case   ENOKIAAACENCODER:
+                {
+                if(!iObjects->iAACEncoder)
+                    {
+                    error = KErrNotFound;
+                    }
+                else
+                    {
+                    }
+                break;
+                }
+            case   ENOKIAQTMUX:
+                {
+                if(!iObjects->iQtMux)
+                    {
+                    error = KErrNotFound;
+                    }
+                else
+                    {
+                    }
+                break;
+                }
+            case   ENOKIAAMRMUX:
+                {
+                if(!iObjects->iAmrMux)
+                    {
+                    error = KErrNotFound;
+                    }
+                else
+                    {
+                    }
+                break;
+                }                
+            case   ERESAMPLER:
+                {
+                if(!iObjects->iResampler)
+                    {
+                    error = KErrNotFound;
+                    }
+                else
+                    {
+                    }
+                break;
+                }
+            case   ECONVERTER:
+                {
+                if(!iObjects->iConverter)
+                    {
+                    error = KErrNotFound;
+                    }
+                else
+                    {
+                    }
+                break;
+                }
+            case   EDEVSOUNDSRC:
+                {
+                if(!iObjects->iSource)
+                    {
+                    error = KErrNotFound;
+                    }
+                else
+                    {
+                    TPtrC property;
+                    TInt value(0);
+                    aItem.GetNextString(property);
+                    aItem.GetNextInt(ValueExpected);
+                    HBufC8* prop = HBufC8::NewL(property.Length()+ 1);
+                    TPtr8 des = prop->Des();
+                    des.Copy(property);
+                    if(!property.Compare(KTagGainProperty()))
+                        {
+                        g_object_get (G_OBJECT (iObjects->iSource),(const char *)(des.PtrZ()), &value, NULL); 
+                        FTRACE(FPrint(_L("CGStreamerTestClass::CheckProperties GetGain[%d]"),value));
+                        iLog->Log(_L("CGStreamerTestClass::CheckProperties GetGain[%d]"),value);
+                        }
+                    else if(!property.Compare(KTagRateProperty()))
+                        {
+                        g_object_get (G_OBJECT (iObjects->iSource),(const char *)(des.PtrZ()), &value, NULL);
+                        value = convert_devsound_rate(value);
+                        FTRACE(FPrint(_L("CGStreamerTestClass::CheckProperties GetRate[%d]"),value));
+                        iLog->Log(_L("CGStreamerTestClass::CheckProperties GetRate[%d]"),value);
+                        }
+                    else if(!property.Compare(KTagChannelsProperty()))
+                        {
+                        g_object_get (G_OBJECT (iObjects->iSource),(const char *)(des.PtrZ()), &value, NULL); 
+                        FTRACE(FPrint(_L("CGStreamerTestClass::CheckProperties Channels[%d]"),value));
+                        iLog->Log(_L("CGStreamerTestClass::CheckProperties channels[%d]"),value);
+                        }
+                    else if(!property.Compare(KTagMaxGainProperty()))
+                        {
+                        g_object_get (G_OBJECT (iObjects->iSource),(const char *)(des.PtrZ()), &value, NULL); 
+                        FTRACE(FPrint(_L("CGStreamerTestClass::CheckProperties MaxGain[%d]"),value));
+                        iLog->Log(_L("CGStreamerTestClass::CheckProperties Max Gain[%d]"),value);
+                        }
+                    else if(!property.Compare(KTagSamplesRecordedProperty()))
+                        {
+                        g_object_get (G_OBJECT (iObjects->iSource),(const char *)(des.PtrZ()), &value, NULL); 
+                        FTRACE(FPrint(_L("CGStreamerTestClass::CheckProperties SamplesRecorded[%d]"),value));
+                        iLog->Log(_L("CGStreamerTestClass::CheckProperties SamplesRecorded[%d]"),value);
+                        }
+
+                    else if(!property.Compare(KTagLeftBalanceProperty()))
+                        {                  
+                            g_object_get (G_OBJECT (iObjects->iSource),(const char *)(des.PtrZ()), &value, NULL); 
+                         }             
+              
+                    else if(!property.Compare(KTagRightBalanceProperty()))
+                        {
+                        
+                            g_object_get (G_OBJECT (iObjects->iSource),(const char *)(des.PtrZ()), &value, NULL); 
+
+                            }
+                   
+                    if(value == ValueExpected)
+                        {
+                    FTRACE(FPrint(_L("CGStreamerTestClass::CheckProperties EDEVSOUNDSRC OK")));
+                    iLog->Log(_L("CGStreamerTestClass::CheckProperties EDEVSOUNDSRC OK " ));
+                        }
+                    else
+                        {
+                    FTRACE(FPrint(_L("CGStreamerTestClass::CheckProperties EDEVSOUNDSRC Error ValueExpected [%d]"),ValueExpected));
+                    iLog->Log(_L("CGStreamerTestClass::CheckProperties EDEVSOUNDSRC ValueExpected [%d]"),ValueExpected);
+                        error = KErrGeneral;
+                        gst_element_set_state (iObjects->iPipeline,GST_STATE_NULL);
+                        }
+                    delete prop;
+                    }
+                break;
+                }            
+            case   EDEVSOUNDSINK:
+                {
+                if(!iObjects->iSink)
+                    {
+                    error = KErrNotFound;
+                    }
+                else
+                    {
+                    TPtrC property;
+                    TInt value(0);
+                    aItem.GetNextString(property);
+                    HBufC8* prop = HBufC8::NewL(property.Length()+ 1);
+                    TPtr8 des = prop->Des();
+                    des.Copy(property);
+                    if(!property.Compare(KTagVolumeProperty()))
+                        {
+                        g_object_get (G_OBJECT (iObjects->iSink),(const char *)(des.PtrZ()), &value, NULL); 
+                        FTRACE(FPrint(_L("CGStreamerTestClass::CheckProperties Volume[%d]"),value));
+                        iLog->Log(_L("CGStreamerTestClass::CheckProperties Volume[%d]"),value);
+                        }
+                    else if(!property.Compare(KTagRateProperty()))
+                        {
+                        g_object_get (G_OBJECT (iObjects->iSink),(const char *)(des.PtrZ()), &value, NULL); 
+                        FTRACE(FPrint(_L("CGStreamerTestClass::CheckProperties rate [%d]"),value));
+                        iLog->Log(_L("CGStreamerTestClass::CheckProperties rate[%d]"),value);
+                        }
+                    else if(!property.Compare(KTagChannelsProperty()))
+                        {
+                        g_object_get (G_OBJECT (iObjects->iSink),(const char *)(des.PtrZ()), &value, NULL); 
+                        FTRACE(FPrint(_L("CGStreamerTestClass::CheckProperties channels [%d]"),value));
+                        iLog->Log(_L("CGStreamerTestClass::CheckProperties channels[%d]"),value);
+                        }
+                    else if(!property.Compare(KTagMaxVolumeProperty()))
+                        {
+                        g_object_get (G_OBJECT (iObjects->iSink),(const char *)(des.PtrZ()), &value, NULL); 
+                        FTRACE(FPrint(_L("CGStreamerTestClass::CheckProperties max vol[%d] "),value));
+                        iLog->Log(_L("CGStreamerTestClass::CheckProperties max vol[%d]"),value);
+                        }
+                    else if(!property.Compare(KTagSamplesPlayedProperty()))
+                        {
+                        g_object_get (G_OBJECT (iObjects->iSink),(const char *)(des.PtrZ()), &value, NULL); 
+                        FTRACE(FPrint(_L("CGStreamerTestClass::CheckProperties samples played[%d] "),value));
+                        iLog->Log(_L("CGStreamerTestClass::CheckProperties samples played[%d]"),value);
+                        }
+                    delete prop;
+                    }
+                break;
+                }
+            default:
+                error = KErrNotFound;
+                break;
+            }
+        iLog->Log(_L(">>CGStreamerTestClass::CheckProperties Error[%d]"),error);
+        return error;
+    iLog->Log(_L("<<CGStreamerTestClass::CheckProperties"));   
+    return KErrNone;
+    }
+
+TInt CGStreamerTestClass::SeekElement( CStifItemParser& aItem )
+    {   
+    FTRACE(FPrint(_L("CGStreamerTestClass::SeekElement")));
+    iLog->Log(_L(">>CGStreamerTestClass::SeekElement"));   
+    //
+    TInt time;
+    GstFormat fmt = GST_FORMAT_TIME;
+    gint64 pos1, len1 , pos2 , len2;
+
+    aItem.GetNextInt(time);
+    if (gst_element_query_position (iObjects->iPipeline, &fmt, &pos1)
+      && gst_element_query_duration (iObjects->iPipeline, &fmt, &len1)) {
+    iLog->Log(_L("CGStreamerTestClass:: before seek query position and duration error"));
+    }
+    pos1 = (pos1 / GST_SECOND ) ;
+    len1 = (len1 / GST_SECOND ) ;
+    time = pos1 + (time);
+    if (!gst_element_seek (iObjects->iPipeline, 1.0 , GST_FORMAT_TIME, GST_SEEK_FLAG_ACCURATE,
+                             GST_SEEK_TYPE_SET, time*GST_SECOND ,
+                             GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE)) {
+    iLog->Log(_L("<<CGStreamerTestClass::SeekElement Failed"));
+      }
+
+    if (gst_element_query_position (iObjects->iPipeline, &fmt, &pos2)
+      && gst_element_query_duration (iObjects->iPipeline, &fmt, &len2)) {
+    iLog->Log(_L("CGStreamerTestClass:: after seek query position and duration error"));
+    }
+    pos2 = (pos2 / GST_SECOND ) ;
+    len2 = (len2 / GST_SECOND ) ;
+    iLog->Log(_L("<<CGStreamerTestClass::SeekElement"));   
+    return KErrNone;
+    }
+
+
+
+
 //  End of File