diff -r 000000000000 -r bde4ae8d615e os/mm/mmhais/a3facl/src/audiocontext/audiocontext.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/mm/mmhais/a3facl/src/audiocontext/audiocontext.h Fri Jun 15 03:10:57 2012 +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 +#include +#include +#include + +#include "mmrcclient.h" +#include "multimediaresourcecontrolobserver.h" + +#include +#include + +#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 iAudioProcessingUnits; + + + // Array of context observers. + // Members not own. + + RPointerArray 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