devsound/a3fdevsound/src/devsoundadaptor/cdevaudio.cpp
changeset 24 2672ba96448e
parent 15 c1e808730d6c
--- a/devsound/a3fdevsound/src/devsoundadaptor/cdevaudio.cpp	Thu May 27 14:24:04 2010 +0300
+++ b/devsound/a3fdevsound/src/devsoundadaptor/cdevaudio.cpp	Fri Jun 11 15:13:33 2010 +0300
@@ -28,6 +28,7 @@
 #include <a3f/audiocontextfactory.h>
 #include <a3f/maudioprocessingunit.h>
 #include <a3f/maudiocontext.h>
+#include <a3f/mcontexteffectiveclient.h>
 #include <a3f/maudiostream.h>
 #include <a3f/maudiocodec.h>
 #include <a3f/maudiogaincontrol.h>
@@ -495,11 +496,6 @@
 	DP_IN();
 	TInt err(KErrNone);
 
-	if(	iActiveState != EDevSoundAdaptorInitialised_Initialised)
-		{
-		DP0_RET(KErrNotReady, "%d");
-		}
-
 	// Redo partial cancelling of initialization after pre-emption clash event in
 	// EDevSoundAdaptorRemovingProcessingUnits state.
 	if (iActiveState == EDevSoundAdaptorUnitialised_Uninitialised &&
@@ -508,7 +504,11 @@
 		err = iCurrentAudioControl->RemoveProcessingUnits();
 		DP0_RET(err, "%d");
 		}
-			
+	else if(iActiveState != EDevSoundAdaptorInitialised_Initialised)
+		{
+		DP0_RET(KErrNotReady, "%d");
+		}
+
 	err = iCurrentAudioControl->Uninitialize();
 	
 	DP0_RET(err, "%d");
@@ -557,18 +557,19 @@
 	{
 	return iPriorityFlag;
 	}
+
 // -----------------------------------------------------------------------------
 // CDevAudio::SetClientConfig
 // -----------------------------------------------------------------------------
 //
-TInt CDevAudio::SetClientConfig(const TMMFClientConfig& aClientConfig)
+TInt CDevAudio::SetClientConfig(const TProcessId& aProcessId)
 	{
 	DP_CONTEXT(CDevAudio::SetClientConfig *CD1*, CtxDevSound, DPLOCAL);
 	DP_IN();
 	// TODO: Check if the TClientContextSettings atributte go back since 
 	// if not there is no way to send the vendor id
 	TClientContextSettings context;
-	context.iProcessId = aClientConfig.iProcessId;
+	context.iProcessId = aProcessId;
 	TInt err = iAudioContext->SetClientSettings(context);
 	if (err != KErrNone)
 		{
@@ -577,6 +578,43 @@
 	DP0_RET(err, "%d");
 	}
 
+TInt CDevAudio::SetClientConfig(const TProcessId& aActualProcessId, const TProcessId& aProcessId)
+	{
+	DP_CONTEXT(CDevAudio::SetClientConfig *CD1*, CtxDevSound, DPLOCAL);
+	DP_IN();
+	
+	MContextSetEffectiveClient* setEffectiveClient
+        = static_cast<MContextSetEffectiveClient*>(iAudioContext->Interface(KSetClientInfoUid));
+	
+	TInt err;
+	
+	if (!setEffectiveClient)
+	    {
+        DP0(DLINFO, "MContextSetEffectiveClient not supported, revert to old behaviour of just passing actual client info");
+        err = SetClientConfig(aActualProcessId);
+	    }
+	else
+	    {
+        TClientContextSettings context;
+        context.iProcessId = aProcessId;
+        err = iAudioContext->SetClientSettings(context);
+        if (err != KErrNone)
+            {
+            DP1(DLERR, "Error %d setting client context!",err);
+            }
+        if (!err)
+            {
+            err = setEffectiveClient->SetEffectiveClientInfo(aActualProcessId);
+            if (err != KErrNone)
+                {
+                DP1(DLERR, "Error %d setting effective client context!",err);
+                }
+            }
+	    }
+
+	DP0_RET(err, "%d");
+	}
+
 
 void CDevAudio::ContextEvent(TUid /*aEvent*/, TInt /*aError*/)
 	{