devsound/a3fdevsound/src/mmfaudioserver/mmfaudioserver.cpp
changeset 6 fe9d1bf55678
parent 0 b8ed18f6c07b
--- a/devsound/a3fdevsound/src/mmfaudioserver/mmfaudioserver.cpp	Tue Nov 02 12:13:59 2010 +0000
+++ b/devsound/a3fdevsound/src/mmfaudioserver/mmfaudioserver.cpp	Tue Nov 02 12:28:51 2010 +0000
@@ -32,8 +32,12 @@
 #ifdef _DEBUG
 #include "e32debug.h"
 #define SYMBIAN_DEBPRN0(str)    RDebug::Print(str, this)
+#define SYMBIAN_DEBPRN1(str, val1)          RDebug::Print(str, this, val1)
+#define SYMBIAN_DEBPRN2(str, val1, val2)    RDebug::Print(str, this, val1, val2)
 #else
 #define SYMBIAN_DEBPRN0(str)
+#define SYMBIAN_DEBPRN1(str, val1)
+#define SYMBIAN_DEBPRN2(str, val1, val2)
 #endif //_DEBUG
 
 
@@ -50,19 +54,22 @@
 
 // ============================ MEMBER FUNCTIONS ===============================
 
+
 // -----------------------------------------------------------------------------
 // CMMFAudioServer::NewL
 // Two-phased constructor.
+// @param aStayOpen whether or not the server should stay open permanently
 // -----------------------------------------------------------------------------
 //
-CMMFAudioServer* CMMFAudioServer::NewL()
-	{
-	CMMFAudioServer* self = new(ELeave) CMMFAudioServer();
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop(self);
-	return self;
-	}
+CMMFAudioServer* CMMFAudioServer::NewL(TBool aStayOpen)
+    {
+    
+    CMMFAudioServer* self = new(ELeave) CMMFAudioServer(aStayOpen);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
 
 // -----------------------------------------------------------------------------
 // CMMFAudioServer::CMMFAudioServer
@@ -70,8 +77,9 @@
 // might leave.
 // -----------------------------------------------------------------------------
 //
-CMMFAudioServer::CMMFAudioServer()
-	: CMmfIpcServer(EPriorityStandard)
+CMMFAudioServer::CMMFAudioServer(TBool aStayOpen)
+	: CMmfIpcServer(EPriorityStandard), iStayOpen (aStayOpen)
+
 	{
 	}
 
@@ -81,19 +89,22 @@
 // -----------------------------------------------------------------------------
 //
 void CMMFAudioServer::ConstructL()
-	{
+ 	{
 	SYMBIAN_DEBPRN0(_L("CMMFAudioServer[0x%x]::ConstructL - enter"));
-
+	
 	SetPinClientDescriptors(ETrue);
 	// Call base class to Start server
 	StartL(KAudioServerName);
 
 	iFourCCConvertor = CFourCCConvertor::NewL();
-	iDelayAudioServerShutDown = CDelayAudioServerShutDown::NewL();
+	
+	if(!iStayOpen)
+	    {
+	    iDelayAudioServerShutDown = CDelayAudioServerShutDown::NewL();
+	    }
 
 	iFactory = CMMFAudioServerFactory::NewL();
 	iFactory->StartL(*this);	
-
 	SYMBIAN_DEBPRN0(_L("CMMFAudioServer[0x%x]::ConstructL - exit"));
 	}
 
@@ -191,16 +202,19 @@
 //
 void CMMFAudioServer::IncrementDevSoundCount()
 	{
-	iDevSoundCount++;
-	//in the case we started the shutdown due to no more DevSound
-	if(iDevSoundCount)
-		{
-		ASSERT(iDelayAudioServerShutDown);
-		if (iDelayAudioServerShutDown)
-			{
-			iDelayAudioServerShutDown->Cancel();
-			}
-		}
+    if(!iStayOpen)
+        {
+        iDevSoundCount++;
+        //in the case we started the shutdown due to no more DevSound
+        if(iDevSoundCount)
+            {
+            ASSERT(iDelayAudioServerShutDown);
+            if (iDelayAudioServerShutDown)
+                {
+                iDelayAudioServerShutDown->Cancel();
+                }
+            }
+        }
 	}
 
 // -----------------------------------------------------------------------------
@@ -211,15 +225,22 @@
 //
 void CMMFAudioServer::DecrementDevSoundCount()
 	{
-	iDevSoundCount--;
-	if (iDevSoundCount == 0)
-		{
-		ASSERT(iDelayAudioServerShutDown);
-		if (iDelayAudioServerShutDown)
-			{
-			iDelayAudioServerShutDown->SetDelay(TTimeIntervalMicroSeconds32(KAudioServerShutDownDelay));
-			}
-		}
+
+    if(!iStayOpen)
+        {
+        iDevSoundCount--;
+        //dont shut down if iStayOpen is set
+        if (iDevSoundCount == 0)
+            {
+            
+            ASSERT(iDelayAudioServerShutDown);
+            if (iDelayAudioServerShutDown)
+                {
+                SYMBIAN_DEBPRN0(_L("CMMFAudioServer[0x%x]::DecrementDevSoundCount - shutting down server"));
+                iDelayAudioServerShutDown->SetDelay(TTimeIntervalMicroSeconds32(KAudioServerShutDownDelay));
+                }
+            }
+        }
 	}
 
 // -----------------------------------------------------------------------------