khronosfws/openmax_al/src/gst_adaptation/xaadaptationgst.c
changeset 25 6f7ceef7b1d1
parent 21 2ed61feeead6
child 28 ebf79c79991a
--- a/khronosfws/openmax_al/src/gst_adaptation/xaadaptationgst.c	Fri May 28 19:26:28 2010 -0500
+++ b/khronosfws/openmax_al/src/gst_adaptation/xaadaptationgst.c	Fri Jun 11 19:59:23 2010 -0500
@@ -1,25 +1,24 @@
 /*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description: Base GStreamer Adaptation Source
+ *
+ */
 
 #include <assert.h>
 #include <string.h>
-#include "gst/gst.h"
-#include "gst/gstbuffer.h"
-#include "gst/app/gstappsrc.h"
+#include <gst/gst.h>
+#include <gst/gstbuffer.h>
 #include "xaobjectitf.h"
 #include "xacameradevice.h"
 #include "xaradiodevice.h"
@@ -41,13 +40,14 @@
  * 1st phase initialization function for Adaptation Base context structure.
  * Reserves memory for base context and initializes GStreamer FW.
  */
-XAresult XAAdaptationGst_Init( XAAdaptationGstCtx* pSelf, XAuint32 ctxId )
-{
+XAresult XAAdaptationGst_Init(XAAdaptationGstCtx* pSelf, XAuint32 ctxId)
+    {
     DEBUG_API("->XAAdaptationGst_Init");
 
-    if ( pSelf )
-    {
-        if(XAAdaptationBase_Init(&(pSelf->baseObj), ctxId) != XA_RESULT_SUCCESS)
+    if (pSelf)
+        {
+        if (XAAdaptationBase_Init(&(pSelf->baseObj), ctxId)
+                != XA_RESULT_SUCCESS)
             {
             DEBUG_ERR("Failed to init base context!!!");
             free(pSelf);
@@ -56,94 +56,93 @@
         else
             {
             GError* gerror = 0;
-    
-    /*         Add default handler for Gst-bus messages */
+
+            /*         Add default handler for Gst-bus messages */
             pSelf->busCb = XAAdaptationGst_GstBusCb;
-    
+
             // VASU MOD BEGINS
             pSelf->cond_mutx_inited = XA_BOOLEAN_FALSE;
             // VASU MOD ENDS
-    
-            sem_init(&(pSelf->semAsyncWait),0,0);
-    
-    
-            if ( !gst_init_check( NULL, NULL, &gerror ) )
+
+            sem_init(&(pSelf->semAsyncWait), 0, 0);
+
+            if (!gst_init_check(NULL, NULL, &gerror))
                 {
-                    DEBUG_ERR("Gst Initalization failure.");
-                    return XA_RESULT_INTERNAL_ERROR;
+                DEBUG_ERR("Gst Initalization failure.");
+                return XA_RESULT_INTERNAL_ERROR;
                 }
-        
+
             }
-    }
+        }
     else
-    {
+        {
         DEBUG_ERR("Invalid Gst Base Context.")
         return XA_RESULT_PARAMETER_INVALID;
-    }
+        }
 
     DEBUG_API("<-XAAdaptationGst_Init");
     return XA_RESULT_SUCCESS;
-}
+    }
 
 /*
  * XAresult XAAdaptationGst_PostInit()
  * 2nd phase initialization for Adaptation Base.
  */
-XAresult XAAdaptationGst_PostInit( XAAdaptationGstCtx* ctx )
-{
+XAresult XAAdaptationGst_PostInit(XAAdaptationGstCtx* ctx)
+    {
     XAresult ret = XA_RESULT_SUCCESS;
     DEBUG_API("->XAAdaptationGst_PostInit");
     // VASU MOD BEGINS
     XAAdaptationBase_PostInit(&ctx->baseObj);
-    
+
     ctx->thread_launched = XA_BOOLEAN_FALSE;
     pthread_mutex_init(&(ctx->ds_mutex), NULL);
     pthread_cond_init(&(ctx->ds_condition), NULL);
     ctx->cond_mutx_inited = XA_BOOLEAN_TRUE;
-    
-    
+
     // VASU MOD ENDS
     DEBUG_API("<-XAAdaptationGst_PostInit");
     return ret;
-}
+    }
 
 /*
  * void XAAdaptationGst_Free( XAAdaptationGstCtx* ctx )
  * Frees all Base context variables .
  */
-void XAAdaptationGst_Free( XAAdaptationGstCtx* ctx )
-{
-	GstElement* fakesink = NULL;
+void XAAdaptationGst_Free(XAAdaptationGstCtx* ctx)
+    {
+    GstElement* fakesink = NULL;
     DEBUG_API("->XAAdaptationGst_Free");
 
-    if ( ctx->bin )
-    {
-    	fakesink = gst_bin_get_by_name(GST_BIN(ctx->bin), "fakesink");
-		if ( fakesink )
-		{
-			gst_element_set_state( GST_ELEMENT(fakesink), GST_STATE_NULL);
-			gst_object_unref(fakesink);
-		}
+    if (ctx->bin)
+        {
+        fakesink = gst_bin_get_by_name(GST_BIN(ctx->bin), "fakesink");
+        if (fakesink)
+            {
+            gst_element_set_state(GST_ELEMENT(fakesink), GST_STATE_NULL);
+            gst_object_unref(fakesink);
+            }
 
-        if ( gst_element_set_state(GST_ELEMENT(ctx->bin), GST_STATE_NULL )!=GST_STATE_CHANGE_SUCCESS )
-        {   /*not much we can do*/
+        if (gst_element_set_state(GST_ELEMENT(ctx->bin), GST_STATE_NULL)
+                != GST_STATE_CHANGE_SUCCESS)
+            { /*not much we can do*/
             DEBUG_ERR("WARNING: Failed to change to NULL state before deletion!!")
+            }
         }
-    }
 
-    if(ctx->asynctimer)
-    {   /*cancel timer*/
+    if (ctx->asynctimer)
+        { /*cancel timer*/
         g_source_remove(ctx->asynctimer);
-    }
+        }
     sem_post(&(ctx->semAsyncWait));
     sem_destroy(&(ctx->semAsyncWait));
 
     XAAdaptationGst_StopGstListener(ctx);
 
-    if ( ctx->bin )
-    {
+    if (ctx->bin)
+        {
         gst_object_unref(ctx->bin);
-    }
+        }
 
     //g_array_free(ctx->evtHdlrs, TRUE);
     // VASU MOD BEGINS
@@ -156,29 +155,29 @@
         }
     // VASU MOD ENDS
     XAAdaptationBase_Free(&ctx->baseObj);
-    
+
     DEBUG_API("<-XAAdaptationGst_Free");
-}
-
+    }
 
 /*
  * gboolean XAAdaptationBase_GstBusCb( GstBus *bus, GstMessage *message, gpointer data )
  * Default Gst-bus message handler (Callback)
  */
-gboolean XAAdaptationGst_GstBusCb( GstBus *bus, GstMessage *message, gpointer data )
-{
+gboolean XAAdaptationGst_GstBusCb(GstBus *bus, GstMessage *message,
+        gpointer data)
+    {
     GError *error;
     gchar *debug;
-    DEBUG_API("->XAAdaptationGst_GstBusCb");
-    DEBUG_INFO_A2("Received Gst callback \"%s\" from \"%s\"",
-                    GST_MESSAGE_TYPE_NAME(message),
-                    GST_OBJECT_NAME(GST_MESSAGE_SRC(message)));
+    DEBUG_API("->XAAdaptationGst_GstBusCb");DEBUG_INFO_A2("Received Gst callback \"%s\" from \"%s\"",
+            GST_MESSAGE_TYPE_NAME(message),
+            GST_OBJECT_NAME(GST_MESSAGE_SRC(message)));
 
-    switch( GST_MESSAGE_TYPE(message))
-    {
+    switch (GST_MESSAGE_TYPE(message))
+        {
         case GST_MESSAGE_ERROR:
-            gst_message_parse_error( message, &error, &debug );
-            DEBUG_INFO_A1("%s", debug);
+            gst_message_parse_error(message, &error, &debug);
+            DEBUG_INFO_A1("%s", debug)
+            ;
             break;
         case GST_MESSAGE_EOS:
             break;
@@ -227,48 +226,48 @@
         case GST_MESSAGE_ANY:
             break;
         default:
-            DEBUG_INFO("Unhandled Gst-Bus message");
+            DEBUG_INFO("Unhandled Gst-Bus message")
+            ;
             break;
+        }DEBUG_API("<-XAAdaptationGst_GstBusCb");
+    return TRUE;
     }
-    DEBUG_API("<-XAAdaptationGst_GstBusCb");
-    return TRUE;
-}
 
 XAresult XAAdaptationGst_InitGstListener(XAAdaptationGstCtx* ctx)
-{
+    {
     int ret;
     DEBUG_API("->XAAdaptationGst_InitGstListener");
-    if ( ctx->bin )
-    {
-        ctx->bus = gst_pipeline_get_bus( GST_PIPELINE( ctx->bin ));
-    }
-    if( !ctx->bus )
-    {
+    if (ctx->bin)
+        {
+        ctx->bus = gst_pipeline_get_bus(GST_PIPELINE( ctx->bin ));
+        }
+    if (!ctx->bus)
+        {
         DEBUG_ERR("could not get gst bus!")
         return XA_RESULT_INTERNAL_ERROR;
-    }
-    ret = pthread_create(&(ctx->busloopThr), NULL, (XAAdaptationGst_LaunchGstListener),(void*)ctx);
+        }
+    ret = pthread_create(&(ctx->busloopThr), NULL,
+            (XAAdaptationGst_LaunchGstListener), (void*) ctx);
     // VASU MOD BEGINS
-    if ( ctx->thread_launched == XA_BOOLEAN_FALSE )
-    {
+    if (ctx->thread_launched == XA_BOOLEAN_FALSE)
+        {
         // Wait until the thread is created
         pthread_mutex_lock(&(ctx->ds_mutex));
         pthread_cond_wait(&(ctx->ds_condition), &(ctx->ds_mutex));
         pthread_mutex_unlock(&(ctx->ds_mutex));
         // VASU MOD ENDS
-    }
-    if(ret)
-    {
+        }
+    if (ret)
+        {
         DEBUG_ERR_A1("could not create thread!! (%d)",ret)
         return XA_RESULT_INTERNAL_ERROR;
+        }DEBUG_API("<-XAAdaptationGst_InitGstListener");
+    return XA_RESULT_SUCCESS;
     }
-    DEBUG_API("<-XAAdaptationGst_InitGstListener");
-    return XA_RESULT_SUCCESS;
-}
 
 void * XAAdaptationGst_LaunchGstListener(void* args)
-{
-    XAAdaptationGstCtx* ctx = (XAAdaptationGstCtx*)args;
+    {
+    XAAdaptationGstCtx* ctx = (XAAdaptationGstCtx*) args;
     DEBUG_API("->XAAdaptationGst_LaunchGstListener");
     // VASU MOD BEGINS
     // Signal calling thread that this thread creation is completed
@@ -278,39 +277,38 @@
     pthread_mutex_unlock(&(ctx->ds_mutex));
     // VASU MOD ENDS
 
-    ctx->busloop = g_main_loop_new( NULL, FALSE );
-    if ( !ctx->busloop )
-    {
-        DEBUG_ERR("Glib main loop failure.")
+    ctx->busloop = g_main_loop_new(NULL, FALSE);
+    if (!ctx->busloop)
+        {
+        DEBUG_ERR("Glib main loop failure.");
         DEBUG_API("<-XAAdaptationGst_LaunchGstListener");
         assert(0);
-    }
+        }
     else
-    {
+        {
         DEBUG_INFO("Start Glib main loop")
         g_main_loop_run(ctx->busloop);
-        DEBUG_INFO("Glib main loop stopped - exiting thread")
+        DEBUG_INFO("Glib main loop stopped - exiting thread");
         DEBUG_API("<-XAAdaptationGst_LaunchGstListener");
         pthread_exit(NULL);
+        }
+    return NULL;
     }
-   return NULL;
-}
 
 void XAAdaptationGst_StopGstListener(XAAdaptationGstCtx* ctx)
-{
+    {
     DEBUG_API("->XAAdaptationGst_StopGstListener");
-    if(ctx->busloop)
-    {
-        g_main_loop_quit (ctx->busloop);
+    if (ctx->busloop)
+        {
+        g_main_loop_quit(ctx->busloop);
         g_main_loop_unref(ctx->busloop);
-    }
-    if(ctx->bus)
-    {
+        }
+    if (ctx->bus)
+        {
         gst_object_unref(ctx->bus);
         ctx->bus = NULL;
+        }DEBUG_API("<-XAAdaptationGst_StopGstListener");
     }
-    DEBUG_API("<-XAAdaptationGst_StopGstListener");
-}
 
 /*
  * ASynchronous operation managing
@@ -319,87 +317,85 @@
 /* NOTE: This should NOT be called from gst callbacks - danger of deadlock!!
  */
 void XAAdaptationGst_PrepareAsyncWait(XAAdaptationGstCtx* ctx)
-{
+    {
     DEBUG_API("->XAAdaptationGst_PrepareAsyncWait");
 
-    if( ctx->waitingasyncop )
-    {   /*wait previous async op*/
+    if (ctx->waitingasyncop)
+        { /*wait previous async op*/
         DEBUG_INFO("::WARNING:: previous asynch still ongoing!!!");
         DEBUG_INFO(">>>>  WAIT PREVIOUS");
         sem_wait(&(ctx->semAsyncWait));
         DEBUG_INFO("<<<<  PREVIOUS COMPLETED");
-    }
-    sem_init(&(ctx->semAsyncWait),0,0);
+        }
+    sem_init(&(ctx->semAsyncWait), 0, 0);
 
     ctx->waitingasyncop = XA_BOOLEAN_TRUE;
     DEBUG_API("<-XAAdaptationGst_PrepareAsyncWait");
-}
+    }
 
 void XAAdaptationGst_StartAsyncWait(XAAdaptationGstCtx* ctx)
-{
+    {
     DEBUG_API("->XAAdaptationGst_StartAsyncWait");
 
     /* timeout to try to avoid gst freeze in rollup */
     ctx->asynctimer = g_timeout_add(XA_ADAPT_ASYNC_TIMEOUT,
-                                    XAAdaptationGst_CancelAsyncWait, ctx);
+            XAAdaptationGst_CancelAsyncWait, ctx);
     /* check flag once again if callback already happened before wait */
-    if(ctx->waitingasyncop)
-    {
+    if (ctx->waitingasyncop)
+        {
         DEBUG_INFO(">>>>  ASYNC STARTS");
         sem_wait(&(ctx->semAsyncWait));
         DEBUG_INFO("<<<<  ASYNC COMPLETED");
-    }
+        }
     else
-    {
+        {
         DEBUG_INFO("<> async completed already");
-    }
+        }
     /*cancel timer*/
-    if(ctx->asynctimer)
-    {
+    if (ctx->asynctimer)
+        {
         g_source_remove(ctx->asynctimer);
-    }
+        }
     ctx->waitingasyncop = XA_BOOLEAN_FALSE;
 
     DEBUG_API("<-XAAdaptationGst_StartAsyncWait");
-}
+    }
 
 /* async operation timeout callback*/
 gboolean XAAdaptationGst_CancelAsyncWait(gpointer ctx)
-{
-    XAAdaptationGstCtx* bCtx = (XAAdaptationGstCtx*)ctx;
+    {
+    XAAdaptationGstCtx* bCtx = (XAAdaptationGstCtx*) ctx;
     DEBUG_API("->XAAdaptationGst_CancelAsyncWait");
-    if( bCtx->waitingasyncop )
-    {
+    if (bCtx->waitingasyncop)
+        {
         DEBUG_ERR_A3("ASYNC TIMED OUT : current %d, gsttarget %d, wanted %d",
-                      GST_STATE(bCtx->bin), GST_STATE_TARGET(bCtx->bin), bCtx->binWantedState);
+                GST_STATE(bCtx->bin), GST_STATE_TARGET(bCtx->bin), bCtx->binWantedState);
         bCtx->waitingasyncop = XA_BOOLEAN_FALSE;
         sem_post(&(bCtx->semAsyncWait));
-    }
-    DEBUG_API("<-XAAdaptationGst_CancelAsyncWait");
+        }DEBUG_API("<-XAAdaptationGst_CancelAsyncWait");
     /* return false to remove timer */
     return FALSE;
-}
+    }
 
 void XAAdaptationGst_CompleteAsyncWait(XAAdaptationGstCtx* ctx)
-{
+    {
     DEBUG_API("->XAAdaptationGst_CompleteAsyncWait");
-    if( ctx->waitingasyncop )
-    {
+    if (ctx->waitingasyncop)
+        {
         int i;
         ctx->waitingasyncop = XA_BOOLEAN_FALSE;
-        sem_getvalue(&(ctx->semAsyncWait),&i);
+        sem_getvalue(&(ctx->semAsyncWait), &i);
         DEBUG_INFO_A1("Asynch operation succeeded, sem value %d",i);
-        if(i<=0)
-        {   /* only post if locked */
+        if (i <= 0)
+            { /* only post if locked */
             sem_post(&(ctx->semAsyncWait));
-        }
-        else if(i>0)
-        {   /* should not be, reset semaphore */
-            sem_init(&(ctx->semAsyncWait),0,0);
-        }
+            }
+        else if (i > 0)
+            { /* should not be, reset semaphore */
+            sem_init(&(ctx->semAsyncWait), 0, 0);
+            }
+        }DEBUG_API("<-XAAdaptationGst_CompleteAsyncWait");
     }
-    DEBUG_API("<-XAAdaptationGst_CompleteAsyncWait");
-}
 
 /**
  * GstElement* XAAdaptationGst_CreateGstSource( XADataSource* xaSrc, const XAchar *name )
@@ -409,11 +405,13 @@
  * @return GstElement* - return newly created gst source element
  * Description: Create gst source element corresponding to XA source structure
  */
-GstElement* XAAdaptationGst_CreateGstSource( XADataSource* xaSrc, const char *name, XAboolean *isobj, XAboolean *isPCM, XAboolean *isRawImage  )
-{
+GstElement* XAAdaptationGst_CreateGstSource(XADataSource* xaSrc,
+        const char *name, XAboolean *isobj, XAboolean *isPCM,
+        XAboolean *isRawImage)
+    {
     XAuint32 locType = 0;
     GstElement* gstSrc = NULL;
-    char* fname=NULL;
+    char* fname = NULL;
     XADataLocator_URI* uri = NULL;
     XADataLocator_IODevice* ioDevice = NULL;
 #ifdef OMAX_CAMERABIN
@@ -423,189 +421,192 @@
     XARadioDeviceImpl* radioDevice = NULL;
 
     DEBUG_API("->XAAdaptationGst_CreateGstSource");
-    if( !xaSrc || !xaSrc->pLocator || !isobj )
-    {
+    if (!xaSrc || !xaSrc->pLocator || !isobj)
+        {
         return NULL;
-    }
+        }
     *isobj = XA_BOOLEAN_FALSE;
-    if( xaSrc && xaSrc->pFormat && *((XAuint32*)(xaSrc->pFormat))==XA_DATAFORMAT_PCM && isPCM )
-    {
+    if (xaSrc && xaSrc->pFormat && *((XAuint32*) (xaSrc->pFormat))
+            ==XA_DATAFORMAT_PCM && isPCM)
+        {
         *isPCM = XA_BOOLEAN_TRUE;
-    }
-    if( xaSrc && xaSrc->pFormat && *((XAuint32*)(xaSrc->pFormat))==XA_DATAFORMAT_RAWIMAGE && isRawImage )
-    {
+        }
+    if (xaSrc && xaSrc->pFormat && *((XAuint32*) (xaSrc->pFormat))
+            ==XA_DATAFORMAT_RAWIMAGE && isRawImage)
+        {
         *isRawImage = XA_BOOLEAN_TRUE;
-    }
-    locType = *((XAuint32*)(xaSrc->pLocator));
-    switch ( locType )
-    {
+        }
+    locType = *((XAuint32*) (xaSrc->pLocator));
+    switch (locType)
+        {
         case XA_DATALOCATOR_URI:
-            DEBUG_INFO("XA_DATALOCATOR_URI");
-            uri = (XADataLocator_URI*)xaSrc->pLocator;
-            gstSrc = gst_element_factory_make("filesrc",name);
-            if ( uri->URI != NULL )
-            {
+            DEBUG_INFO("XA_DATALOCATOR_URI")
+            ;
+            uri = (XADataLocator_URI*) xaSrc->pLocator;
+            gstSrc = gst_element_factory_make("filesrc", name);
+            if (uri->URI != NULL)
+                {
                 DEBUG_INFO_A1("URI: %s", uri->URI);
-                if(strncmp((char *)uri->URI, "file:///", 8) == 0)
+                if (strncmp((char *) uri->URI, "file:///", 8) == 0)
                     {
-                    fname = (char *)&((uri->URI)[8]);
+                    fname = (char *) &((uri->URI)[8]);
                     }
                 else
                     {
-                    fname = (char *)uri->URI;
+                    fname = (char *) uri->URI;
+                    }DEBUG_INFO_A1("->filesystem path %s", fname);
+                g_object_set(G_OBJECT(gstSrc), "location", fname, NULL);
+                /*check for pcm - decodebin does not know how to handle raw PCM files */
+                if (isPCM && strstr(fname, ".pcm"))
+                    {
+                    DEBUG_INFO("PCM file detected");
+                    *isPCM = XA_BOOLEAN_TRUE;
                     }
-                DEBUG_INFO_A1("->filesystem path %s", fname);
-                g_object_set( G_OBJECT(gstSrc), "location", fname, NULL );
-                /*check for pcm - decodebin does not know how to handle raw PCM files */
-                if( isPCM && strstr(fname, ".pcm") )
+                }
+            else
                 {
-                    DEBUG_INFO("PCM file detected");
-                    *isPCM=XA_BOOLEAN_TRUE;
-                }
-            }
-            else
-            {
                 DEBUG_ERR("No uri specified.");
                 return NULL;
-            }
+                }
             break; /* XA_DATALOCATOR_URI */
 
-
         case XA_DATALOCATOR_IODEVICE:
-            DEBUG_INFO("XA_DATALOCATOR_IODEVICE");
-            ioDevice = (XADataLocator_IODevice*)(xaSrc->pLocator);
-            switch ( ioDevice->deviceType )
-            {
+            DEBUG_INFO("XA_DATALOCATOR_IODEVICE")
+            ;
+            ioDevice = (XADataLocator_IODevice*) (xaSrc->pLocator);
+            switch (ioDevice->deviceType)
+                {
                 case XA_IODEVICE_AUDIOINPUT:
-                {
+                    {
                     DEBUG_INFO("XA_IODEVICE_AUDIOINPUT");
                     DEBUG_INFO_A1("ioDevice->deviceID: %x", ioDevice->deviceID);
-                    switch (ioDevice->deviceID )
-                    {
-                    //case XA_ADAPTID_ALSASRC: //Krishna
-                    case XA_ADAPTID_DEVSOUNDSRC:
-                        //DEBUG_INFO("alsasrc"); //Krishna
-                        DEBUG_INFO("devsoundsrc");
-                        gstSrc = gst_element_factory_make("devsoundsrc",name); //Krishna - changed to devsoundsrc
-                        g_object_set (G_OBJECT (gstSrc), "num-buffers", 80, NULL);
-                        break;
-                    case XA_ADAPTID_AUDIOTESTSRC:
-                        /*fall through*/
-                    default:
-                        DEBUG_INFO("audiotestsrc");
-                        gstSrc = gst_element_factory_make("audiotestsrc",name);
-                        break;
-                    }
-                    break;
-                }
-#ifdef OMAX_CAMERABIN
-             
-                case XA_IODEVICE_CAMERA:
-                {
-                    DEBUG_INFO("XA_IODEVICE_CAMERA");
-                    if ( ioDevice->device )
-                    {   /*source is camera object*/
-                        DEBUG_INFO("Use camerabin as source.");
-                        /* Get camerabin from source object */
-                        pObj = (XAObjectItfImpl*)(*ioDevice->device);
-                        cameraDevice = (XACameraDeviceImpl*)(pObj);
-                        /*TODO we had to remove this line below since adaptationCtx
-                         * was  not a member of structure*/
-
-                        gstSrc = GST_ELEMENT(((XAAdaptationGstCtx*)(cameraDevice->adaptationCtx))->bin);
-                        /* refcount increase is needed to keep this not being deleted after use */
-                        gst_object_ref(GST_OBJECT(gstSrc));
-                        *isobj = XA_BOOLEAN_TRUE;
-                    }
-                    else
-                    {
-                        DEBUG_INFO_A1("ioDevice->deviceID: %x", ioDevice->deviceID);
-                        switch (ioDevice->deviceID )
+                    switch (ioDevice->deviceID)
                         {
-                        case XA_ADAPTID_V4L2SRC:
-                            DEBUG_INFO("Camera deviceID: v4l2src ");
- 
+                        //case XA_ADAPTID_ALSASRC: //Krishna
+                        case XA_ADAPTID_DEVSOUNDSRC:
+                            //DEBUG_INFO("alsasrc"); //Krishna
+                            DEBUG_INFO("devsoundsrc")
+                            ;
+                            gstSrc = gst_element_factory_make("devsoundsrc",
+                                    name); //Krishna - changed to devsoundsrc
+                            g_object_set(G_OBJECT (gstSrc), "num-buffers",
+                                    80, NULL);
                             break;
-                        case XA_ADAPTID_VIDEOTESTSRC:
-                            DEBUG_INFO("Camera deviceID: videotestsrc");
- 
-                            break;
+                        case XA_ADAPTID_AUDIOTESTSRC:
+                            /*fall through*/
                         default:
-                        case XA_DEFAULTDEVICEID_CAMERA:
-                            DEBUG_INFO("Camera deviceID:Default");
-                           
+                            DEBUG_INFO("audiotestsrc")
+                            ;
+                            gstSrc = gst_element_factory_make("audiotestsrc",
+                                    name);
                             break;
                         }
-                        if ( cameraCtx )
-						{
-							gstSrc = GST_ELEMENT(cameraCtx->baseObj.bin);
-							gst_object_ref(GST_OBJECT(gstSrc));
-							*isobj = XA_BOOLEAN_TRUE;
-						}
-						else
-						{
-							DEBUG_ERR("No camera object created!");
-							return NULL;
-						}
+                    break;
                     }
-                    break;
-                }
+#ifdef OMAX_CAMERABIN
+
+                    case XA_IODEVICE_CAMERA:
+                        {
+                        DEBUG_INFO("XA_IODEVICE_CAMERA");
+                        if ( ioDevice->device )
+                            { /*source is camera object*/
+                            DEBUG_INFO("Use camerabin as source.");
+                            /* Get camerabin from source object */
+                            pObj = (XAObjectItfImpl*)(*ioDevice->device);
+                            cameraDevice = (XACameraDeviceImpl*)(pObj);
+                            /*TODO we had to remove this line below since adaptationCtx
+                             * was  not a member of structure*/
+
+                            gstSrc = GST_ELEMENT(((XAAdaptationGstCtx*)(cameraDevice->adaptationCtx))->bin);
+                            /* refcount increase is needed to keep this not being deleted after use */
+                            gst_object_ref(GST_OBJECT(gstSrc));
+                            *isobj = XA_BOOLEAN_TRUE;
+                            }
+                        else
+                            {
+                            DEBUG_INFO_A1("ioDevice->deviceID: %x", ioDevice->deviceID);
+                            switch (ioDevice->deviceID )
+                                {
+                                case XA_ADAPTID_V4L2SRC:
+                                DEBUG_INFO("Camera deviceID: v4l2src ");
+
+                                break;
+                                case XA_ADAPTID_VIDEOTESTSRC:
+                                DEBUG_INFO("Camera deviceID: videotestsrc");
+
+                                break;
+                                default:
+                                case XA_DEFAULTDEVICEID_CAMERA:
+                                DEBUG_INFO("Camera deviceID:Default");
+
+                                break;
+                                }
+                            if ( cameraCtx )
+                                {
+                                gstSrc = GST_ELEMENT(cameraCtx->baseObj.bin);
+                                gst_object_ref(GST_OBJECT(gstSrc));
+                                *isobj = XA_BOOLEAN_TRUE;
+                                }
+                            else
+                                {
+                                DEBUG_ERR("No camera object created!");
+                                return NULL;
+                                }
+                            }
+                        break;
+                        }
 #endif                
                 case XA_IODEVICE_RADIO:
-                    DEBUG_INFO("XA_IODEVICE_RADIO");
-                    if ( ioDevice->device )
-                    {
+                    DEBUG_INFO("XA_IODEVICE_RADIO")
+                    ;
+                    if (ioDevice->device)
+                        {
                         DEBUG_INFO("Use radio pipeline as source.");
                         /* Get radio_pipeline and set it to base context */
-                        radioDevice = (XARadioDeviceImpl*)(*ioDevice->device);
+                        radioDevice = (XARadioDeviceImpl*) (*ioDevice->device);
                         /* radio does not have actual bin, only source element*/
                         gstSrc = GST_ELEMENT(((XAAdaptationGstCtx*)radioDevice->adaptationCtx)->bin);
                         /* refcount increase is needed to keep this not being deleted after use */
                         gst_object_ref(GST_OBJECT(gstSrc));
                         /**isobj = XA_BOOLEAN_TRUE;*/
-                    }
+                        }
                     break;
                 default:
-                {
+                    {
                     DEBUG_ERR("Unsupported IODevice.");
                     break;
+                    }
                 }
-            }
             break; /* XA_DATALOCATOR_IODEVICE */
 
-/*        case XA_DATALOCATOR_CONTENTPIPE:
-        {
-        	DEBUG_INFO("XA_DATALOCATOR_CONTENTPIPE");
-        	gstSrc = gst_element_factory_make("appsrc",name);
-            break;
-        }*/
         case XA_DATALOCATOR_ADDRESS:
             {
-                XADataLocator_Address* address = (XADataLocator_Address*)(xaSrc->pLocator);
-                gstSrc = gst_element_factory_make("appsrc", name);
-                /* init gst buffer from datalocator */
-                if( gstSrc )
+            XADataLocator_Address* address =
+                    (XADataLocator_Address*) (xaSrc->pLocator);
+            gstSrc = gst_element_factory_make("appsrc", name);
+            /* init gst buffer from datalocator */
+            if (gstSrc)
                 {
-                    /* init GST buffer from XADataLocator*/
-                    GstBuffer* userBuf = gst_buffer_new();
-                    if( userBuf )
+                /* init GST buffer from XADataLocator*/
+                GstBuffer* userBuf = gst_buffer_new();
+                if (userBuf)
                     {
-                        userBuf->size = address->length;
-                        userBuf->data = address->pAddress;
-                        /* push the whole buffer to appsrc so it is ready for preroll */
-                        DEBUG_INFO("Pushing buffer");
-                        gst_app_src_push_buffer( GST_APP_SRC(gstSrc), userBuf );
-                        DEBUG_INFO_A1("Sent buffer at 0x%x to appsrc", userBuf );
-                        gst_app_src_end_of_stream( GST_APP_SRC(gstSrc) );
+                    userBuf->size = address->length;
+                    userBuf->data = address->pAddress;
+                    /* push the whole buffer to appsrc so it is ready for preroll */
+                    DEBUG_INFO("Pushing buffer");
+                    gst_app_src_push_buffer(GST_APP_SRC(gstSrc), userBuf);
+                    DEBUG_INFO_A1("Sent buffer at 0x%x to appsrc", userBuf );
+                    gst_app_src_end_of_stream(GST_APP_SRC(gstSrc));
                     }
-                    else
+                else
                     {
-                        DEBUG_ERR("Failure allocating buffer!");
+                    DEBUG_ERR("Failure allocating buffer!");
                     }
                 }
-                else
+            else
                 {
-                    DEBUG_ERR("Failure creating appsrc!");
+                DEBUG_ERR("Failure creating appsrc!");
                 }
             }
             break;
@@ -613,17 +614,16 @@
         default:
             DEBUG_ERR("Incorrect data locator for source.")
             break;
-    }
+        }
 
-    if ( gstSrc )
-    {
+    if (gstSrc)
+        {
         DEBUG_INFO_A1("Created gstreamer source element at %x", gstSrc);
-    }
+        }
 
     DEBUG_API("<-XAAdaptationGst_CreateGstSource");
     return gstSrc;
-}
-
+    }
 
 /**
  * GstElement* XAAdaptationGst_CreateGstSink( XADataSink* xaSnk, const XAchar *name )
@@ -632,129 +632,128 @@
  * @return GstElement* - return newly created gst sink element
  * Description: Create gst sink element corresponding to XA sink structure
  */
-GstElement* XAAdaptationGst_CreateGstSink( XADataSink* xaSnk, const char *name, XAboolean *isobj )
-{
+GstElement* XAAdaptationGst_CreateGstSink(XADataSink* xaSnk,
+        const char *name, XAboolean *isobj)
+    {
     XAuint32 locType = 0;
     GstElement* gstSnk = NULL;
     XADataLocator_URI* uri = NULL;
     DEBUG_API("->XAAdaptationGst_CreateGstSink");
-    if(!xaSnk || !xaSnk->pLocator)
-    {
+    if (!xaSnk || !xaSnk->pLocator)
+        {
         DEBUG_INFO("Warning! No sink specified, use fakesink");
-        gstSnk = gst_element_factory_make("fakesink",name);
-        if(!gstSnk)
-        {
+        gstSnk = gst_element_factory_make("fakesink", name);
+        if (!gstSnk)
+            {
             DEBUG_ERR("Cannot create sink!");
             return NULL;
+            }
+        g_object_set(G_OBJECT(gstSnk), "async", FALSE, NULL);
         }
-        g_object_set( G_OBJECT(gstSnk),"async", FALSE, NULL);
-    }
     else
-    {
-        locType = *((XAuint32*)(xaSnk->pLocator));
-        switch ( locType )
         {
+        locType = *((XAuint32*) (xaSnk->pLocator));
+        switch (locType)
+            {
             case XA_DATALOCATOR_URI:
-                DEBUG_INFO("XA_DATALOCATOR_URI");
-                uri = (XADataLocator_URI*)xaSnk->pLocator;
-                gstSnk = gst_element_factory_make("filesink",name);
-                if(!gstSnk)
-                {
+                DEBUG_INFO("XA_DATALOCATOR_URI")
+                ;
+                uri = (XADataLocator_URI*) xaSnk->pLocator;
+                gstSnk = gst_element_factory_make("filesink", name);
+                if (!gstSnk)
+                    {
                     DEBUG_ERR("Cannot create sink!");
                     return NULL;
-                }
-                if ( uri->URI != NULL )
-                {
+                    }
+                if (uri->URI != NULL)
+                    {
                     XAchar *fname;
                     DEBUG_INFO_A1("URI: %s", uri->URI);
-                    if(strncmp((char *)uri->URI, "file:///", 8) == 0)
-                    {
+                    if (strncmp((char *) uri->URI, "file:///", 8) == 0)
+                        {
                         fname = &((uri->URI)[8]);
-                    }
+                        }
                     else
-                    {
+                        {
                         fname = uri->URI;
+                        }DEBUG_INFO_A1("->filesystem path %s", fname);
+                    g_object_set(G_OBJECT(gstSnk), "location", fname,
+                            "async", FALSE, "qos", FALSE, "max-lateness",
+                            (gint64) (-1), NULL);
                     }
-                    DEBUG_INFO_A1("->filesystem path %s", fname);
-                    g_object_set( G_OBJECT(gstSnk),"location", fname,
-                                                   "async", FALSE,
-                                                   "qos", FALSE,
-                                                   "max-lateness", (gint64)(-1),
-                                                   NULL);
-                }
                 else
-                {
+                    {
                     DEBUG_ERR("No recording output uri specified.");
                     return NULL;
-                }
+                    }
                 break;
             case XA_DATALOCATOR_NATIVEDISPLAY:
-                DEBUG_INFO("Sink locator type - XA_DATALOCATOR_NATIVEDISPLAY");
+                DEBUG_INFO("Sink locator type - XA_DATALOCATOR_NATIVEDISPLAY")
+                ;
 #ifdef USE_NGA_SURFACES
-                gstSnk = gst_element_factory_make("devvideosink","devvideosink");
+                gstSnk = gst_element_factory_make("devvideosink",
+                        "devvideosink");
 #else
                 gstSnk = gst_element_factory_make("ximagesink",name);
 #endif /*USE_NGA_SURFACES*/
-                if(!gstSnk)
-                {
+                if (!gstSnk)
+                    {
                     DEBUG_ERR("Cannot create sink!");
                     return NULL;
-                }
-                g_object_set( G_OBJECT(gstSnk), "force-aspect-ratio", TRUE,
-												"async", FALSE,
-                                               "qos", FALSE,
-												"handle-events", TRUE,
-												"handle-expose", TRUE,
-                                               "max-lateness", (gint64)(-1),
-                                               NULL);
+                    }
+                g_object_set(G_OBJECT(gstSnk), "force-aspect-ratio", TRUE,
+                        "async", FALSE, "qos", FALSE, "handle-events", TRUE,
+                        "handle-expose", TRUE, "max-lateness", (gint64) (-1),
+                        NULL);
                 break;
             case XA_DATALOCATOR_OUTPUTMIX:
-                DEBUG_INFO("Sink locator type - XA_DATALOCATOR_OUTPUTMIX");
-                {
+                DEBUG_INFO("Sink locator type - XA_DATALOCATOR_OUTPUTMIX")
+                ;
+                    {
                     /* Get OutputMix adaptation from data locator */
-                    XADataLocator_OutputMix* omix = (XADataLocator_OutputMix*)(xaSnk->pLocator);
-                    if ( omix->outputMix )
-                    {
-                        XAOMixImpl* omixDevice = (XAOMixImpl*)(*omix->outputMix);
+                    XADataLocator_OutputMix* omix =
+                            (XADataLocator_OutputMix*) (xaSnk->pLocator);
+                    if (omix->outputMix)
+                        {
+                        XAOMixImpl* omixDevice =
+                                (XAOMixImpl*) (*omix->outputMix);
 
-                        if(omixDevice)
-                        {
+                        if (omixDevice)
+                            {
                             /*TODO we had to remove this line below since adaptationCtx
                              * was  not a member of structure*/
-                        
+
                             /*gstSnk = XAOutputMixAdapt_GetSink(omixDevice->adaptationCtx);*/
-                            if(!gstSnk)
-                            {
+                            if (!gstSnk)
+                                {
                                 DEBUG_ERR("Cannot create sink!");
                                 return NULL;
-                            }
+                                }
                             *isobj = XA_BOOLEAN_TRUE;
-                        }
+                            }
                         else
-                        {
+                            {
                             DEBUG_ERR("Warning - NULL outputmix object - default audio output used");
-                            gstSnk = gst_element_factory_make("alsasink",name);
+                            gstSnk = gst_element_factory_make("alsasink",
+                                    name);
+                            }
                         }
-                    }
                     else
-                    {
+                        {
                         DEBUG_ERR("Warning - NULL outputmix object - default audio output used");
-                        gstSnk = gst_element_factory_make("alsasink",name);
-                    }
+                        gstSnk = gst_element_factory_make("alsasink", name);
+                        }
 
-                }
+                    }
                 break;
-/*		 	case XA_DATALOCATOR_CONTENTPIPE:
-				DEBUG_INFO("XA_DATALOCATOR_CONTENTPIPE");
-				gstSnk = gst_element_factory_make("appsink",name);
-				break;*/
+
             case XA_DATALOCATOR_ADDRESS:
                 {
-                    gstSnk = gst_element_factory_make("appsink", name);
-                    /* Not actually object sink, but attribute used to notify recorder
-                     * about appsink (no object sinks applicable in this use case)
-                     **/
-                    *isobj=TRUE;
+                gstSnk = gst_element_factory_make("appsink", name);
+                /* Not actually object sink, but attribute used to notify recorder
+                 * about appsink (no object sinks applicable in this use case)
+                 **/
+                *isobj = TRUE;
                 }
                 break;
             case XA_DATALOCATOR_IODEVICE:
@@ -765,718 +764,690 @@
             default:
                 DEBUG_ERR("Incorrect data locator for sink.")
                 break;
+            }
         }
-    }
-    if (gstSnk )
-    {
+    if (gstSnk)
+        {
         DEBUG_INFO_A1("Created gstreamer sink element at %x", gstSnk);
+        }DEBUG_API("<-XAAdaptationGst_CreateGstSink");
+    return gstSnk;
     }
-    DEBUG_API("<-XAAdaptationGst_CreateGstSink");
-    return gstSnk;
-}
 
 /**
  * GstElement* XAAdaptationGst_CreateVideoPP( )
  * @return GstElement* - return newly created gst pipeline element
  * Description: Create video processing pipeline
  */
-GstElement* XAAdaptationGst_CreateVideoPP( )
-{
+GstElement* XAAdaptationGst_CreateVideoPP()
+    {
     GstElement *vpp;
     DEBUG_API("->XAAdaptationGst_CreateVideoPP");
     vpp = gst_pipeline_new("videopp");
-    if( vpp )
-    {
+    if (vpp)
+        {
         GstPad *ghostsink, *ghostsrc;
-        GstElement 	*col1,
-					*col2,
-					*rotate,
-					*mirror,
-					*box,
-					*crop,
-					*gamma,
-					*balance,
-					*scale,
-					*scale2,
+        GstElement *col1, *col2, *rotate, *mirror, *box, *crop, *gamma,
+                *balance, *scale, *scale2,
 #ifdef USE_NGA_SURFACES
-					*identity,
+                *identity,
 #endif /*USE_NGA_SURFACES*/
-					*queue;
-
+                *queue;
 
         /* Crete ffmpegcolorspace to convert stream to correct format */
-        col1 = gst_element_factory_make( "ffmpegcolorspace", "pp_colsp1");
-        if(col1)
-        {
+        col1 = gst_element_factory_make("ffmpegcolorspace", "pp_colsp1");
+        if (col1)
+            {
             DEBUG_INFO("Created ffmpegcolorspace element");
             gst_bin_add(GST_BIN(vpp), col1);
-           /* make this bin link point*/
-            ghostsink = gst_element_get_static_pad(col1,"sink");
-            if(ghostsink)
-            {
-                gst_element_add_pad(vpp, gst_ghost_pad_new("videopp_sink",ghostsink));
+            /* make this bin link point*/
+            ghostsink = gst_element_get_static_pad(col1, "sink");
+            if (ghostsink)
+                {
+                gst_element_add_pad(vpp, gst_ghost_pad_new("videopp_sink",
+                        ghostsink));
                 gst_object_unref(GST_OBJECT(ghostsink));
+                }
             }
-        }
 
         /* create video crop, this will be sink for videoPP pipeline */
-        crop = gst_element_factory_make( "videocrop", "pp_crop");
-        if(crop)
-        {
+        crop = gst_element_factory_make("videocrop", "pp_crop");
+        if (crop)
+            {
             DEBUG_INFO("Created crop element");
             gst_bin_add(GST_BIN(vpp), crop);
-        }
+            }
 
         /* create video rotate */
-        rotate = gst_element_factory_make( "videoflip", "pp_rotate");
-        if(rotate)
-        {
+        rotate = gst_element_factory_make("videoflip", "pp_rotate");
+        if (rotate)
+            {
             DEBUG_INFO("Created rotate element");
             g_object_set(G_OBJECT(rotate), "method", FLIP_NONE, NULL);
             gst_bin_add(GST_BIN(vpp), rotate);
-        }
+            }
 
         /* create video mirror */
-        mirror = gst_element_factory_make( "videoflip", "pp_mirror");
-        if(mirror)
-        {
+        mirror = gst_element_factory_make("videoflip", "pp_mirror");
+        if (mirror)
+            {
             DEBUG_INFO("Created mirror element");
             g_object_set(G_OBJECT(mirror), "method", FLIP_NONE, NULL);
             gst_bin_add(GST_BIN(vpp), mirror);
-        }
+            }
 
         /* create video box */
-        box = gst_element_factory_make( "videobox", "pp_box");
-        if(box)
-        {
+        box = gst_element_factory_make("videobox", "pp_box");
+        if (box)
+            {
             DEBUG_INFO("Created videobox element");
             gst_bin_add(GST_BIN(vpp), box);
-        }
+            }
 
         /* create video balance */
-        balance = gst_element_factory_make( "videobalance", "pp_balance");
-        if(balance)
-        {
+        balance = gst_element_factory_make("videobalance", "pp_balance");
+        if (balance)
+            {
             DEBUG_INFO("Created balance element");
             gst_bin_add(GST_BIN(vpp), balance);
-        }
+            }
 
         /* create video gamma */
-        gamma = gst_element_factory_make( "gamma", "pp_gamma");
-        if(gamma)
-        {
+        gamma = gst_element_factory_make("gamma", "pp_gamma");
+        if (gamma)
+            {
             DEBUG_INFO("Created gamma element");
             gst_bin_add(GST_BIN(vpp), gamma);
-        }
+            }
 
         /* Create videoscale element to scale postprocessed output to correct size */
         scale = gst_element_factory_make("videoscale", "pp_scale");
-        if ( scale )
-        {
+        if (scale)
+            {
             DEBUG_INFO("Created videoscale element");
             gst_bin_add(GST_BIN(vpp), scale);
-        }
+            }
         scale2 = gst_element_factory_make("videoscale", "pp_scale2");
-		if ( scale2 )
-		{
-			GstPad *pad = NULL;
-			GstCaps *caps = NULL;
-			DEBUG_INFO("Created videoscale element");
-			pad = gst_element_get_static_pad(scale2,"src");
-			caps = gst_caps_new_simple("video/x-raw-yuv",
-					 "width", G_TYPE_INT,0,
-					 "height", G_TYPE_INT,0,
-					 NULL);
-			gst_pad_set_caps(pad, caps);
-			gst_bin_add(GST_BIN(vpp), scale2);
-		}
+        if (scale2)
+            {
+            GstPad *pad = NULL;
+            GstCaps *caps = NULL;
+            DEBUG_INFO("Created videoscale element");
+            pad = gst_element_get_static_pad(scale2, "src");
+            caps = gst_caps_new_simple("video/x-raw-yuv", "width",
+                    G_TYPE_INT, 0, "height", G_TYPE_INT, 0, NULL);
+            gst_pad_set_caps(pad, caps);
+            gst_bin_add(GST_BIN(vpp), scale2);
+            }
 
         /* create video queue */
-        queue = gst_element_factory_make( "queue", "vpp_queue");
-        if(queue)
-        {
+        queue = gst_element_factory_make("queue", "vpp_queue");
+        if (queue)
+            {
             DEBUG_INFO("Created queue element");
             gst_bin_add(GST_BIN(vpp), queue);
 #ifdef USE_NGA_SURFACES
             /* make this bin link point*/
-            ghostsink = gst_element_get_static_pad(queue,"sink");
-            if(ghostsink)
-            {
-                gst_element_add_pad(vpp, gst_ghost_pad_new("videopp_src",ghostsink));
+            ghostsink = gst_element_get_static_pad(queue, "sink");
+            if (ghostsink)
+                {
+                gst_element_add_pad(vpp, gst_ghost_pad_new("videopp_src",
+                        ghostsink));
                 gst_object_unref(GST_OBJECT(ghostsink));
-            }            
+                }
 #endif /*USE_NGA_SURFACES*/
-        }
-
+            }
 
         /* Crete ffmpegcolorspace to convert stream to correct format */
-        col2 = gst_element_factory_make( "ffmpegcolorspace", "pp_colsp2");
-        if(col2)
-        {
+        col2 = gst_element_factory_make("ffmpegcolorspace", "pp_colsp2");
+        if (col2)
+            {
             DEBUG_INFO("Created ffmpegcolorspace element");
             gst_bin_add(GST_BIN(vpp), col2);
             /* make this bin link point*/
-            ghostsrc = gst_element_get_static_pad(col2,"src");
-            if(ghostsrc)
-            {
-                gst_element_add_pad(vpp, gst_ghost_pad_new("videopp_src",ghostsrc));
+            ghostsrc = gst_element_get_static_pad(col2, "src");
+            if (ghostsrc)
+                {
+                gst_element_add_pad(vpp, gst_ghost_pad_new("videopp_src",
+                        ghostsrc));
                 gst_object_unref(GST_OBJECT(ghostsrc));
+                }
             }
-        }
 
 #ifdef USE_NGA_SURFACES
         //shyward
         /* create identity element */
-        identity  = gst_element_factory_make( "identity", "identity" );
-        if(identity)
-        {
-           DEBUG_INFO("Created identity element");
-           gst_bin_add(GST_BIN(vpp), identity);   
-           /* make this bin link point*/
-           ghostsrc = gst_element_get_static_pad(identity,"src");
-           if(ghostsrc)
-           {
-               gst_element_add_pad(vpp, gst_ghost_pad_new("videopp_sink",ghostsrc));
-               gst_object_unref(GST_OBJECT(ghostsrc));
-           }                
-        }        
-        if( !(gst_element_link_many(queue,identity,NULL)) )
+        identity = gst_element_factory_make("identity", "identity");
+        if (identity)
+            {
+            DEBUG_INFO("Created identity element");
+            gst_bin_add(GST_BIN(vpp), identity);
+            /* make this bin link point*/
+            ghostsrc = gst_element_get_static_pad(identity, "src");
+            if (ghostsrc)
+                {
+                gst_element_add_pad(vpp, gst_ghost_pad_new("videopp_sink",
+                        ghostsrc));
+                gst_object_unref(GST_OBJECT(ghostsrc));
+                }
+            }
+        if (!(gst_element_link_many(queue, identity, NULL)))
 #else
         //shyward - thins code assumes all the elements will have been created, which is not true
         if( !(gst_element_link_many(col1,
-									scale,
-									crop,
-									rotate,
-									mirror,
-									box,
-									balance,
-									gamma,
-									queue,
-									scale2,
+                                scale,
+                                crop,
+                                rotate,
+                                mirror,
+                                box,
+                                balance,
+                                gamma,
+                                queue,
+                                scale2,
 #ifdef USE_NGA_SURFACES
-                					identity,
+                                identity,
 #endif /*USE_NGA_SURFACES*/
-									col2,
-									NULL)
-									) )
+                                col2,
+                                NULL)
+                ) )
 #endif /*USE_NGA_SURFACES*/
-        {
+            {
             DEBUG_ERR("Could not link videopp elements!!");
             gst_object_unref(vpp);
             vpp = NULL;
-        }
+            }
+        }DEBUG_API("<-XAAdaptationGst_CreateVideoPP");
+    return vpp;
     }
-    DEBUG_API("<-XAAdaptationGst_CreateVideoPP");
-    return vpp;
-}
 
 /**
  * GstElement* XAAdaptationGst_CreateFixedSizeRecordVideoPP( )
  * @return GstElement* - return newly created gst pipeline element
- * Description: Create video processing pipeline with fixed output size to TEST_VIDEO_WIDTH x TEST_VIDEO_HEIGHT
+ * Description: Create video processing pipeline with fixed output size
+ *  to TEST_VIDEO_WIDTH x TEST_VIDEO_HEIGHT
  *              experimental implementation for changing recorder output size
  */
-GstElement* XAAdaptationGst_CreateFixedSizeVideoPP( )
-{
+GstElement* XAAdaptationGst_CreateFixedSizeVideoPP()
+    {
     GstElement *vpp;
     DEBUG_API("->XAAdaptationGst_CreateFixedSizeVideoPP");
     vpp = gst_pipeline_new("videopp");
-    if( vpp )
-    {
+    if (vpp)
+        {
         GstPad *ghostsink, *ghostsrc;
-        GstElement  *col1,
-                    *col2,
-                    *rotate,
-                    *mirror,
-                    *box,
-                    *crop,
-                    *gamma,
-                    *balance,
-                    *scale,
-                    *scale2,
-                    *filter,
-                    *queue;
-
+        GstElement *col1, *col2, *rotate, *mirror, *box, *crop, *gamma,
+                *balance, *scale, *scale2, *filter, *queue;
 
         /* Crete ffmpegcolorspace to convert stream to correct format */
-        col1 = gst_element_factory_make( "ffmpegcolorspace", "pp_colsp1");
-        if(col1)
-        {
+        col1 = gst_element_factory_make("ffmpegcolorspace", "pp_colsp1");
+        if (col1)
+            {
             DEBUG_INFO("Created ffmpegcolorspace element");
             gst_bin_add(GST_BIN(vpp), col1);
-           /* make this bin link point*/
-            ghostsink = gst_element_get_static_pad(col1,"sink");
-            if(ghostsink)
-            {
-                gst_element_add_pad(vpp, gst_ghost_pad_new("videopp_sink",ghostsink));
+            /* make this bin link point*/
+            ghostsink = gst_element_get_static_pad(col1, "sink");
+            if (ghostsink)
+                {
+                gst_element_add_pad(vpp, gst_ghost_pad_new("videopp_sink",
+                        ghostsink));
                 gst_object_unref(GST_OBJECT(ghostsink));
+                }
             }
-        }
 
         /* create video crop, this will be sink for videoPP pipeline */
-        crop = gst_element_factory_make( "videocrop", "pp_crop");
-        if(crop)
-        {
+        crop = gst_element_factory_make("videocrop", "pp_crop");
+        if (crop)
+            {
             DEBUG_INFO("Created crop element");
             gst_bin_add(GST_BIN(vpp), crop);
-        }
+            }
 
         /* create video rotate */
-        rotate = gst_element_factory_make( "videoflip", "pp_rotate");
-        if(rotate)
-        {
+        rotate = gst_element_factory_make("videoflip", "pp_rotate");
+        if (rotate)
+            {
             DEBUG_INFO("Created rotate element");
             g_object_set(G_OBJECT(rotate), "method", FLIP_NONE, NULL);
             gst_bin_add(GST_BIN(vpp), rotate);
-        }
+            }
 
         /* create video mirror */
-        mirror = gst_element_factory_make( "videoflip", "pp_mirror");
-        if(mirror)
-        {
+        mirror = gst_element_factory_make("videoflip", "pp_mirror");
+        if (mirror)
+            {
             DEBUG_INFO("Created mirror element");
             g_object_set(G_OBJECT(mirror), "method", FLIP_NONE, NULL);
             gst_bin_add(GST_BIN(vpp), mirror);
-        }
+            }
 
         /* create video box */
-        box = gst_element_factory_make( "videobox", "pp_box");
-        if(box)
-        {
+        box = gst_element_factory_make("videobox", "pp_box");
+        if (box)
+            {
             DEBUG_INFO("Created videobox element");
             gst_bin_add(GST_BIN(vpp), box);
-        }
+            }
 
         /* create video balance */
-        balance = gst_element_factory_make( "videobalance", "pp_balance");
-        if(balance)
-        {
+        balance = gst_element_factory_make("videobalance", "pp_balance");
+        if (balance)
+            {
             DEBUG_INFO("Created balance element");
             gst_bin_add(GST_BIN(vpp), balance);
-        }
+            }
 
         /* create video gamma */
-        gamma = gst_element_factory_make( "gamma", "pp_gamma");
-        if(gamma)
-        {
+        gamma = gst_element_factory_make("gamma", "pp_gamma");
+        if (gamma)
+            {
             DEBUG_INFO("Created gamma element");
             gst_bin_add(GST_BIN(vpp), gamma);
-        }
+            }
 
         /* Create videoscale element to scale postprocessed output to correct size */
         scale = gst_element_factory_make("videoscale", "pp_scale");
-        if ( scale )
-        {
+        if (scale)
+            {
             DEBUG_INFO("Created videoscale element");
             gst_bin_add(GST_BIN(vpp), scale);
-        }
+            }
         scale2 = gst_element_factory_make("videoscale", "pp_scale2");
-        if ( scale2 )
-        {
+        if (scale2)
+            {
             GstPad *pad = NULL;
             GstCaps *caps = NULL;
             DEBUG_INFO("Created videoscale element");
-            pad = gst_element_get_static_pad(scale2,"src");
-            caps = gst_caps_new_simple("video/x-raw-yuv",
-                     "width", G_TYPE_INT,0,
-                     "height", G_TYPE_INT,0,
-                     NULL);
+            pad = gst_element_get_static_pad(scale2, "src");
+            caps = gst_caps_new_simple("video/x-raw-yuv", "width",
+                    G_TYPE_INT, 0, "height", G_TYPE_INT, 0, NULL);
             gst_pad_set_caps(pad, caps);
             gst_bin_add(GST_BIN(vpp), scale2);
-        }
+            }
 
         /* create capsfilter for fixed video size */
         filter = gst_element_factory_make("capsfilter", "pp_filter");
-        if ( filter )
-        {
+        if (filter)
+            {
 
-            g_object_set( G_OBJECT(filter), "caps",
-                            gst_caps_new_simple("video/x-raw-yuv",
-                                                "width", G_TYPE_INT, TEST_VIDEO_WIDTH,
-                                                "height", G_TYPE_INT, TEST_VIDEO_HEIGHT, NULL)
-                                                ,NULL );
+            g_object_set(G_OBJECT(filter), "caps", gst_caps_new_simple(
+                    "video/x-raw-yuv", "width", G_TYPE_INT, TEST_VIDEO_WIDTH,
+                    "height", G_TYPE_INT, TEST_VIDEO_HEIGHT, NULL), NULL);
             gst_bin_add(GST_BIN(vpp), filter);
-        }
+            }
 
         /* create video queue */
-        queue = gst_element_factory_make( "queue", "vpp_queue");
-        if(queue)
-        {
+        queue = gst_element_factory_make("queue", "vpp_queue");
+        if (queue)
+            {
             gst_bin_add(GST_BIN(vpp), queue);
-        }
-
+            }
 
         /* Crete ffmpegcolorspace to convert stream to correct format */
-        col2 = gst_element_factory_make( "ffmpegcolorspace", "pp_colsp2");
-        if(col2)
-        {
+        col2 = gst_element_factory_make("ffmpegcolorspace", "pp_colsp2");
+        if (col2)
+            {
             DEBUG_INFO("Created ffmpegcolorspace element");
             gst_bin_add(GST_BIN(vpp), col2);
             /* make this bin link point*/
-            ghostsrc = gst_element_get_static_pad(col2,"src");
-            if(ghostsrc)
-            {
-                gst_element_add_pad(vpp, gst_ghost_pad_new("videopp_src",ghostsrc));
+            ghostsrc = gst_element_get_static_pad(col2, "src");
+            if (ghostsrc)
+                {
+                gst_element_add_pad(vpp, gst_ghost_pad_new("videopp_src",
+                        ghostsrc));
                 gst_object_unref(GST_OBJECT(ghostsrc));
+                }
             }
-        }
-        if( !(gst_element_link_many(col1,
-                                    scale,
-                                    crop,
-                                    rotate,
-                                    mirror,
-                                    box,
-                                    balance,
-                                    gamma,
-                                    queue,
-                                    scale2,
-                                    filter,
-                                    col2,
-                                    NULL)
-                                    ) )
-        {
+        if (!(gst_element_link_many(col1, scale, crop, rotate, mirror, box,
+                balance, gamma, queue, scale2, filter, col2, NULL)))
+            {
             DEBUG_ERR("Could not link videopp elements!!");
             gst_object_unref(vpp);
             vpp = NULL;
-        }
-    }
-    DEBUG_API("<-XAAdaptationGst_CreateFixedSizeVideoPP");
+            }
+        }DEBUG_API("<-XAAdaptationGst_CreateFixedSizeVideoPP");
     return vpp;
-}
-
-
+    }
 
 /**
  * GstElement* XAAdaptationGst_CreateVideoPPBlackScr( )
  * @return GstElement* - return newly created gst pipeline element
  * Description: Create video processing pipeline for black screen
  */
-GstElement* XAAdaptationGst_CreateVideoPPBlackScr( )
-{
+GstElement* XAAdaptationGst_CreateVideoPPBlackScr()
+    {
     GstElement *vppBScr;
     DEBUG_API("->XAAdaptationGst_CreateVideoPPBlackScr");
     vppBScr = gst_pipeline_new("videoppBScr");
-    if( vppBScr )
-    {
-        GstPad *ghostsrc=NULL;
-        GstElement *testVideo=NULL, *scale=NULL;
-        GstElement *ffmpegcolorspace=NULL;
+    if (vppBScr)
+        {
+        GstPad *ghostsrc = NULL;
+        GstElement *testVideo = NULL, *scale = NULL;
+        GstElement *ffmpegcolorspace = NULL;
 
-        testVideo = gst_element_factory_make( "videotestsrc", "videotest");
-        if(testVideo)
-        {
+        testVideo = gst_element_factory_make("videotestsrc", "videotest");
+        if (testVideo)
+            {
             DEBUG_INFO("Created videotestsrc element");
 
-            g_object_set(G_OBJECT(testVideo), "pattern", (gint)2, "num-buffers", (gint)1, NULL);
+            g_object_set(G_OBJECT(testVideo), "pattern", (gint) 2,
+                    "num-buffers", (gint) 1, NULL);
             gst_bin_add(GST_BIN(vppBScr), testVideo);
-        }
+            }
 
         scale = gst_element_factory_make("videoscale", "BSrc_scale");
-        if(scale)
-        {
+        if (scale)
+            {
             DEBUG_INFO("Created videoscale element");
             gst_bin_add(GST_BIN(vppBScr), scale);
             /* make this bin link point*/
-            ghostsrc = gst_element_get_static_pad(scale,"src");
-            if(ghostsrc)
-            {
-                gst_element_add_pad(vppBScr, gst_ghost_pad_new("videoppBSrc_src",ghostsrc));
+            ghostsrc = gst_element_get_static_pad(scale, "src");
+            if (ghostsrc)
+                {
+                gst_element_add_pad(vppBScr, gst_ghost_pad_new(
+                        "videoppBSrc_src", ghostsrc));
                 gst_object_unref(GST_OBJECT(ghostsrc));
+                }
             }
-        }
-        ffmpegcolorspace = gst_element_factory_make("ffmpegcolorspace", "BlackScrFfmpeg");
+        ffmpegcolorspace = gst_element_factory_make("ffmpegcolorspace",
+                "BlackScrFfmpeg");
         gst_bin_add(GST_BIN(vppBScr), ffmpegcolorspace);
-        if( !(gst_element_link_many(testVideo, ffmpegcolorspace, scale, NULL)) )
-        {
+        if (!(gst_element_link_many(testVideo, ffmpegcolorspace, scale, NULL)))
+            {
             DEBUG_ERR("Could not link videoppBSrc elements!!");
             gst_object_unref(vppBScr);
             vppBScr = NULL;
-        }
+            }
+        }DEBUG_API("<-XAAdaptationGst_CreateVideoPPBlackScr");
+    return vppBScr;
     }
-    DEBUG_API("<-XAAdaptationGst_CreateVideoPPBlackScr");
-    return vppBScr;
-}
 
 /**
  * GstElement* XAAdaptationGst_CreateInputSelector( )
  * @return GstElement* - return newly created input selector
  * Description: Create input selector to processing between black screen and video screen
  */
-GstElement* XAAdaptationGst_CreateInputSelector( )
-{
+GstElement* XAAdaptationGst_CreateInputSelector()
+    {
     GstElement *inputSelector;
     DEBUG_API("->XAAdaptationGst_CreateInputSelector");
-    inputSelector = gst_element_factory_make("input-selector", "input-selector");
-    if( inputSelector )
-    {
+    inputSelector = gst_element_factory_make("input-selector",
+            "input-selector");
+    if (inputSelector)
+        {
         g_object_set(G_OBJECT(inputSelector), "select-all", TRUE, NULL);
+        }DEBUG_API("<-XAAdaptationGst_CreateInputSelector");
+    return inputSelector;
     }
-    DEBUG_API("<-XAAdaptationGst_CreateInputSelector");
-    return inputSelector;
-}
 
 /**
  * GstElement* XAAdaptationGst_CreateAudioPP( )
  * @return GstElement* - return newly created gst pipeline element
  * Description: Create video processing pipeline
  */
-GstElement* XAAdaptationGst_CreateAudioPP( )
-{
+GstElement* XAAdaptationGst_CreateAudioPP()
+    {
     GstElement *app;
     gboolean ok = TRUE;
     DEBUG_API("->XAAdaptationGst_CreateAudioPP");
     app = gst_pipeline_new("audiopp");
-    if( app )
-    {
+    if (app)
+        {
         GstPad *ghostsink, *ghostsrc;
-        GstElement *ac,*vol,*eq,*queue,*pan, *ac2;
+        GstElement *ac, *vol, *eq, *queue, *pan, *ac2;
 
-        /* first and last elements should be audioconverts to match sink and encoder formats */
-        ac = gst_element_factory_make( "audioconvert", "pp_ac");
+        /* first and last elements should be audioconverts to
+         *  match sink and encoder formats */
+        ac = gst_element_factory_make("audioconvert", "pp_ac");
         if (ac)
-        {
+            {
             ok = gst_bin_add(GST_BIN(app), ac);
             /* make this bin link point*/
             if (ok)
-            {
-                ghostsink = gst_element_get_static_pad(ac,"sink");
-                ok = gst_element_add_pad(app, gst_ghost_pad_new("sink",ghostsink));
+                {
+                ghostsink = gst_element_get_static_pad(ac, "sink");
+                ok = gst_element_add_pad(app, gst_ghost_pad_new("sink",
+                        ghostsink));
                 gst_object_unref(GST_OBJECT(ghostsink));
+                }
             }
-        }
-        ac2 = gst_element_factory_make( "audioconvert", "pp_ac2");
+        ac2 = gst_element_factory_make("audioconvert", "pp_ac2");
         if (ac2 && ok)
-        {
+            {
             ok = gst_bin_add(GST_BIN(app), ac2);
             /* make this bin link point*/
             if (ok)
+                {
+                ghostsrc = gst_element_get_static_pad(ac2, "src");
+                ok = gst_element_add_pad(app, gst_ghost_pad_new("src",
+                        ghostsrc));
+                gst_object_unref(GST_OBJECT(ghostsrc));
+                }
+            }
+
+        vol = gst_element_factory_make("volume", "pp_vol");
+        /* create volume controller */
+        if (vol && ok)
             {
-                ghostsrc = gst_element_get_static_pad(ac2,"src");
-                ok = gst_element_add_pad(app, gst_ghost_pad_new("src",ghostsrc));
-                gst_object_unref(GST_OBJECT(ghostsrc));
+            ok = gst_bin_add(GST_BIN(app), vol);
+            g_object_set(G_OBJECT(vol), "volume", (gdouble) 1, NULL);
+            }
+        /* create 10-band equalizer */
+        eq = gst_element_factory_make("equalizer-10bands", "pp_equ");
+        if (eq && ok)
+            {
+            ok = gst_bin_add(GST_BIN(app), eq);
+            }
+        /* create audio queue */
+        queue = gst_element_factory_make("queue", "app_queue");
+        if (queue && ok)
+            {
+            ok = gst_bin_add(GST_BIN(app), queue);
+            g_object_set(G_OBJECT (queue), "max-size-buffers", 2, NULL);
+            }
+        /* create audio pan effect */
+        pan = gst_element_factory_make("audiopanorama", "pp_pan");
+        if (pan && ok)
+            {
+            ok = gst_bin_add(GST_BIN(app), pan);
+            }
+
+        if (ac && ok)
+            {
+            if (queue)
+                {
+                ok = gst_element_link(ac, queue);
+                }
+            else if (vol)
+                {
+                ok = gst_element_link(ac, vol);
+                }
+            else if (pan)
+                {
+                ok = gst_element_link(ac, pan);
+                }
+            else if (eq)
+                {
+                ok = gst_element_link(ac, eq);
+                }
+            else if (ac2)
+                {
+                ok = gst_element_link(ac, ac2);
+                }
+            }
+        if (queue && ok)
+            {
+            if (vol)
+                {
+                ok = gst_element_link(queue, vol);
+                }
+            else if (pan)
+                {
+                ok = gst_element_link(queue, pan);
+                }
+            else if (eq)
+                {
+                ok = gst_element_link(queue, eq);
+                }
+            else if (ac2)
+                {
+                ok = gst_element_link(queue, ac2);
+                }
+            }
+        if (vol && ok)
+            {
+            if (pan)
+                {
+                ok = gst_element_link(vol, pan);
+                }
+            else if (eq)
+                {
+                ok = gst_element_link(vol, eq);
+                }
+            else if (ac2)
+                {
+                ok = gst_element_link(vol, ac2);
+                }
+            }
+        if (pan && ok)
+            {
+            if (eq)
+                {
+                ok = gst_element_link(pan, eq);
+                }
+            else if (ac2)
+                {
+                ok = gst_element_link(pan, ac2);
+                }
+            }
+        if (eq && ok)
+            {
+            if (ac2)
+                {
+                ok = gst_element_link(eq, ac2);
+                }
+            }
+
+        if (ac)
+            {
+            // ghost sink above
+            }
+        else if (queue && ok)
+            {
+            /* make this bin link point*/
+            ghostsink = gst_element_get_static_pad(queue, "sink");
+            ok = gst_element_add_pad(app,
+                    gst_ghost_pad_new("sink", ghostsink));
+            gst_object_unref(GST_OBJECT(ghostsink));
+            }
+        else if (vol && ok)
+            {
+            /* make this bin link point*/
+            ghostsink = gst_element_get_static_pad(vol, "sink");
+            ok = gst_element_add_pad(app,
+                    gst_ghost_pad_new("sink", ghostsink));
+            gst_object_unref(GST_OBJECT(ghostsink));
+            }
+        else if (pan && ok)
+            {
+            /* make this bin link point*/
+            ghostsink = gst_element_get_static_pad(pan, "sink");
+            ok = gst_element_add_pad(app,
+                    gst_ghost_pad_new("sink", ghostsink));
+            gst_object_unref(GST_OBJECT(ghostsink));
+            }
+        else if (eq && ok)
+            {
+            /* make this bin link point*/
+            ghostsink = gst_element_get_static_pad(eq, "sink");
+            ok = gst_element_add_pad(app,
+                    gst_ghost_pad_new("sink", ghostsink));
+            gst_object_unref(GST_OBJECT(ghostsink));
+            }
+        else if (ac2 && ok)
+            {
+            /* make this bin link point*/
+            ghostsink = gst_element_get_static_pad(ac2, "sink");
+            ok = gst_element_add_pad(app,
+                    gst_ghost_pad_new("sink", ghostsink));
+            gst_object_unref(GST_OBJECT(ghostsink));
+            }
+
+        if (ac2)
+            {
+            // ghost src above
+            }
+        else if (eq && ok)
+            {
+            /* make this bin link point*/
+            ghostsrc = gst_element_get_static_pad(eq, "src");
+            ok = gst_element_add_pad(app, gst_ghost_pad_new("src", ghostsrc));
+            gst_object_unref(GST_OBJECT(ghostsrc));
+            }
+        else if (pan && ok)
+            {
+            /* make this bin link point*/
+            ghostsrc = gst_element_get_static_pad(pan, "src");
+            ok = gst_element_add_pad(app, gst_ghost_pad_new("src", ghostsrc));
+            gst_object_unref(GST_OBJECT(ghostsrc));
+            }
+        else if (vol && ok)
+            {
+            /* make this bin link point*/
+            ghostsrc = gst_element_get_static_pad(vol, "src");
+            ok = gst_element_add_pad(app, gst_ghost_pad_new("src", ghostsrc));
+            gst_object_unref(GST_OBJECT(ghostsrc));
+            }
+        else if (queue && ok)
+            {
+            /* make this bin link point*/
+            ghostsrc = gst_element_get_static_pad(queue, "src");
+            ok = gst_element_add_pad(app, gst_ghost_pad_new("src", ghostsrc));
+            gst_object_unref(GST_OBJECT(ghostsrc));
+            }
+        else if (ac && ok)
+            {
+            /* make this bin link point*/
+            ghostsrc = gst_element_get_static_pad(ac, "src");
+            ok = gst_element_add_pad(app, gst_ghost_pad_new("src", ghostsrc));
+            gst_object_unref(GST_OBJECT(ghostsrc));
+            }
+
+        //        if( !(gst_element_link_many(ac, queue, vol, ac2, NULL)) )
+        //        if( !(gst_element_link_many(ac, queue, vol, pan, eq, ac2, NULL)) )
+        if (!ok)
+            {
+            DEBUG_ERR("Could not link audiopp elements!!");
+            gst_object_unref(app);
+            app = NULL;
             }
         }
 
-        vol = gst_element_factory_make( "volume", "pp_vol");
-        /* create volume controller */
-        if (vol && ok)
-        {
-            ok = gst_bin_add(GST_BIN(app), vol);
-            g_object_set( G_OBJECT(vol), "volume", (gdouble)1, NULL );
-        }
-        /* create 10-band equalizer */
-        eq = gst_element_factory_make( "equalizer-10bands", "pp_equ");
-        if (eq && ok)
-        {
-            ok = gst_bin_add(GST_BIN(app), eq);
-        }
-        /* create audio queue */
-        queue = gst_element_factory_make( "queue", "app_queue");
-        if(queue && ok)
-        {
-            ok = gst_bin_add(GST_BIN(app), queue);
-            g_object_set (G_OBJECT (queue), "max-size-buffers", 2, NULL);
-        }
-        /* create audio pan effect */
-        pan = gst_element_factory_make( "audiopanorama", "pp_pan");
-        if (pan && ok)
-        {
-            ok = gst_bin_add(GST_BIN(app), pan);
-        }
-
-        if (ac && ok)
-        {
-            if (queue)
-            {
-                ok = gst_element_link(ac, queue);
-            }
-            else if (vol)
-            {
-                ok = gst_element_link(ac, vol);
-            }
-            else if (pan)
-            {
-                ok = gst_element_link(ac, pan);
-            }
-            else if (eq)
-            {
-                ok = gst_element_link(ac, eq);
-            }
-            else if (ac2)
-            {
-                ok = gst_element_link(ac, ac2);
-            }
-        }
-        if (queue && ok)
-        {
-            if (vol)
-            {
-                ok = gst_element_link(queue, vol);
-            }
-            else if (pan)
-            {
-                ok = gst_element_link(queue, pan);
-            }
-            else if (eq)
-            {
-                ok = gst_element_link(queue, eq);
-            }
-            else if (ac2)
-            {
-                ok = gst_element_link(queue, ac2);
-            }
-        }
-        if (vol && ok)
-        {
-            if (pan)
-            {
-                ok = gst_element_link(vol, pan);
-            }
-            else if (eq)
-            {
-                ok = gst_element_link(vol, eq);
-            }
-            else if (ac2)
-            {
-                ok = gst_element_link(vol, ac2);
-            }
-        }
-        if (pan && ok)
-        {
-            if (eq)
-            {
-                ok = gst_element_link(pan, eq);
-            }
-            else if (ac2)
-            {
-                ok = gst_element_link(pan, ac2);
-            }
-        }
-        if (eq && ok)
-        {
-            if (ac2)
-            {
-                ok = gst_element_link(eq, ac2);
-            }
-        }
-        
-        if (ac)
-        {
-            // ghost sink above
-        }
-        else if (queue && ok)
-        {
-            /* make this bin link point*/
-            ghostsink = gst_element_get_static_pad(queue,"sink");
-            ok = gst_element_add_pad(app, gst_ghost_pad_new("sink",ghostsink));
-            gst_object_unref(GST_OBJECT(ghostsink));
-        }
-        else if (vol && ok)
-        {
-            /* make this bin link point*/
-            ghostsink = gst_element_get_static_pad(vol,"sink");
-            ok = gst_element_add_pad(app, gst_ghost_pad_new("sink",ghostsink));
-            gst_object_unref(GST_OBJECT(ghostsink));
-        }
-        else if (pan && ok)
-        {
-            /* make this bin link point*/
-            ghostsink = gst_element_get_static_pad(pan,"sink");
-            ok = gst_element_add_pad(app, gst_ghost_pad_new("sink",ghostsink));
-            gst_object_unref(GST_OBJECT(ghostsink));
-        }
-        else if (eq && ok)
-        {
-            /* make this bin link point*/
-            ghostsink = gst_element_get_static_pad(eq,"sink");
-            ok = gst_element_add_pad(app, gst_ghost_pad_new("sink",ghostsink));
-            gst_object_unref(GST_OBJECT(ghostsink));
-        }
-        else if (ac2 && ok)
-        {
-            /* make this bin link point*/
-            ghostsink = gst_element_get_static_pad(ac2,"sink");
-            ok = gst_element_add_pad(app, gst_ghost_pad_new("sink",ghostsink));
-            gst_object_unref(GST_OBJECT(ghostsink));
-        }
-        
-        if (ac2)
-        {
-            // ghost src above
-        }
-        else if (eq && ok)
-        {
-            /* make this bin link point*/
-            ghostsrc = gst_element_get_static_pad(eq,"src");
-            ok = gst_element_add_pad(app, gst_ghost_pad_new("src",ghostsrc));
-            gst_object_unref(GST_OBJECT(ghostsrc));
-        }
-        else if (pan && ok)
-        {
-            /* make this bin link point*/
-            ghostsrc = gst_element_get_static_pad(pan,"src");
-            ok = gst_element_add_pad(app, gst_ghost_pad_new("src",ghostsrc));
-            gst_object_unref(GST_OBJECT(ghostsrc));
-        }
-        else if (vol && ok)
-        {
-            /* make this bin link point*/
-            ghostsrc = gst_element_get_static_pad(vol,"src");
-            ok = gst_element_add_pad(app, gst_ghost_pad_new("src",ghostsrc));
-            gst_object_unref(GST_OBJECT(ghostsrc));
-        }
-        else if (queue && ok)
-        {
-            /* make this bin link point*/
-            ghostsrc = gst_element_get_static_pad(queue,"src");
-            ok = gst_element_add_pad(app, gst_ghost_pad_new("src",ghostsrc));
-            gst_object_unref(GST_OBJECT(ghostsrc));
-        }
-        else if (ac && ok)
-        {
-            /* make this bin link point*/
-            ghostsrc = gst_element_get_static_pad(ac,"src");
-            ok = gst_element_add_pad(app, gst_ghost_pad_new("src",ghostsrc));
-            gst_object_unref(GST_OBJECT(ghostsrc));
-        }
-            
-//        if( !(gst_element_link_many(ac, queue, vol, ac2, NULL)) )
-//        if( !(gst_element_link_many(ac, queue, vol, pan, eq, ac2, NULL)) )
-        if (!ok)
-        {
-            DEBUG_ERR("Could not link audiopp elements!!");
-            gst_object_unref(app);
-            app = NULL;
-        }
+    DEBUG_API("<-XAAdaptationGst_CreateAudioPP");
+    return app;
     }
 
-    DEBUG_API("<-XAAdaptationGst_CreateAudioPP");
-    return app;
-}
-
 /* called when pad is actually blocking/ gets unblocked*/
-void XAAdaptationGst_PadBlockCb(GstPad *pad, gboolean blocked, gpointer user_data)
-{
+void XAAdaptationGst_PadBlockCb(GstPad *pad, gboolean blocked,
+        gpointer user_data)
+    {
     DEBUG_API_A2("->XAAdaptationGst_PadBlockCb   pad \"%s\" of \"%s\" ",
-                        GST_OBJECT_NAME(pad),
-                        GST_OBJECT_NAME(gst_pad_get_parent_element(pad)) );
+            GST_OBJECT_NAME(pad),
+            GST_OBJECT_NAME(gst_pad_get_parent_element(pad)) );
     DEBUG_API_A1("<-XAAdaptationGst_PadBlockCb   blocked:%d",blocked);
-}
+    }
 
 /* utility to set same fields for all media types in caps */
-void XAAdaptationGst_SetAllCaps (GstCaps * caps, char *field, ...)
-{
+void XAAdaptationGst_SetAllCaps(GstCaps * caps, char *field, ...)
+    {
     GstStructure *structure;
     va_list var_args;
     int i;
 
-    for (i = 0; i < gst_caps_get_size (caps); i++)
-    {
-        structure = gst_caps_get_structure (caps, i);
+    for (i = 0; i < gst_caps_get_size(caps); i++)
+        {
+        structure = gst_caps_get_structure(caps, i);
         va_start (var_args, field);
-        gst_structure_set_valist (structure, field, var_args);
+        gst_structure_set_valist(structure, field, var_args);
         va_end (var_args);
+        }
     }
-}
 
-