--- /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