mmhais/a3facl/src/audiocontext/audiocontext.h
changeset 0 40261b775718
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmhais/a3facl/src/audiocontext/audiocontext.h	Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,163 @@
+/*
+* Copyright (c) 2007-2008 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:
+*
+*/
+
+
+#ifndef AUDIOCONTEXT_H
+#define AUDIOCONTEXT_H
+
+#include <e32base.h>
+#include <a3f/a3fbase.h>
+#include <a3f/a3f_trace_utils.h>
+#include <a3f/a3fdevsoundaudiopauseresume.h>
+
+#include "mmrcclient.h"
+#include "multimediaresourcecontrolobserver.h"
+
+#include <a3f/maudiocontext.h>
+#include <a3f/maudiocontextobserver.h>
+
+#include "mlogicalsettingsobserver.h"
+
+
+class CAudioProcessingUnit;
+class CLogicalAudioStream;
+
+
+/**
+Panic category and codes
+*/
+_LIT(KAudioContextPanicCategory, "AudioContext");
+
+enum TAudioContextPanicCodes
+	{
+	ECloneLeftWhenReceivingResourceResponse = 1,
+	};
+
+////
+ // Implementation of the audio context.
+ //
+ // @see MAudioContext
+ // @see MMultimediaResourceControlObserver
+ // @see MLogicalSettingObserver
+ //
+ // @lib AudioComponentFramework.lib
+ //
+NONSHARABLE_CLASS(CAudioContext) : 	public CBase,
+									public MAudioContext,
+									public MMultimediaResourceControlObserver,
+									public MLogicalSettingObserver,
+									public MA3FDevSoundAutoPauseResume
+	{
+
+public:
+
+	IMPORT_C static CAudioContext* NewL();
+
+	IMPORT_C virtual ~CAudioContext();
+
+	// 
+	IMPORT_C MLogicalChain* GetLogicalChain(TInt aIndex);
+	IMPORT_C TInt MsgVersion();
+	IMPORT_C RCriticalSection& CriticalSection();
+	// from base class MAudioContext (A3F API)
+	virtual TInt Commit  ( ); 
+	virtual TInt CreateAudioProcessingUnit  (TUid  aTypeId, MAudioProcessingUnit *& aProcessingUnit );
+	virtual TInt CreateAudioStream  ( MAudioStream *& aStream  );
+	virtual void DeleteAudioProcessingUnit  ( MAudioProcessingUnit *& aProcessingUnit );
+	virtual void DeleteAudioStream  ( MAudioStream *& aStream );
+	virtual TAudioContextId ContextId  ( ) const;
+	virtual TAny* Interface(TUid aType);
+	virtual TInt RegisterAudioContextObserver  ( MAudioContextObserver & aObserver );
+	virtual TInt Reset  ( );
+	virtual TInt SetClientSettings(const TClientContextSettings &aSettings);
+	virtual void UnregisterAudioContextObserver ( MAudioContextObserver & aObserver  ) ;
+
+	//from base class MMultimediaResourceControlObserver
+	virtual void ReceiveResourceResponse(MLogicalChain *aMessage, TInt aError);
+	virtual void ReceiveResourceUpdate(MLogicalChain *aMessage, TInt aError);
+	virtual void ReceivePreemptionUpdate(MLogicalChain *aMessage, TInt aError);
+	virtual void CanResume();
+
+	//from MLogicalSettingObserver
+	virtual void ReceiveComponentSettingsChange(TUid aId, TMMRCMessageType aMessageType);
+
+	//Internals.
+	//Resolve and get component context-unique component instance id.
+	TAudioComponentId GetAndSetInstanceID();
+	//Send a the notification about context event to all observers.
+	void ContextEventSignal(TUid aEvent, TInt aError);
+	
+	//from MA3FDevSoundAutoPauseResume
+	virtual TInt RegisterAsClient(TUid aEventType, const TDesC8& aNotificationRegistrationData, MA3FDevSoundAutoPauseResumeObserver* aObserverPtr);
+	virtual TInt CancelRegisterAsClient(TUid aEventType);
+	virtual TInt WillResumePlay();
+
+private:
+
+	CAudioContext();
+
+	void ConstructL();
+
+	void Panic(TAudioContextPanicCodes aCode);
+
+private:	
+	//Context identifier.
+	
+	TAudioContextId iContextId;
+
+	//Array of components within this context (stream not included) (array members not own).
+	
+	RPointerArray<MAudioProcessingUnit> iAudioProcessingUnits;
+
+	
+	// Array of context observers.
+	// Members not own.
+	
+	RPointerArray<MAudioContextObserver> iAudioContextObservers;
+	
+
+	//Multimedia Resource Control API.
+	
+	RMMRCClient iMMRC;
+
+	
+	//Client context identifiers.
+	
+	TClientContextSettings iClientSettings;
+
+	//Audio type settings.
+	
+	TAudioTypeSettings iAudioTypeSettings;
+
+	// Not owned
+	MLogicalChain* iDesiredChain;
+
+	// Owned
+	MLogicalChain* iActualChain;
+
+	TBool iInCommit;
+	
+	TBool iPreempted;
+	
+	MA3FDevSoundAutoPauseResumeObserver* iObserverPtr;
+	
+	TInt iMsgVersion;
+	
+	RCriticalSection iCriticalSection;
+	};
+
+#endif // AUDIOCONTEXT_H