sl@0: /* sl@0: * Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). sl@0: * All rights reserved. sl@0: * This component and the accompanying materials are made available sl@0: * under the terms of "Eclipse Public License v1.0" sl@0: * which accompanies this distribution, and is available sl@0: * at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: * sl@0: * Initial Contributors: sl@0: * Nokia Corporation - initial contribution. sl@0: * sl@0: * Contributors: sl@0: * sl@0: * Description: sl@0: * sl@0: */ sl@0: sl@0: sl@0: #ifndef AUDIOCONTEXT_H sl@0: #define AUDIOCONTEXT_H sl@0: sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: sl@0: #include "mmrcclient.h" sl@0: #include "multimediaresourcecontrolobserver.h" sl@0: sl@0: #include sl@0: #include sl@0: sl@0: #include "mlogicalsettingsobserver.h" sl@0: sl@0: sl@0: class CAudioProcessingUnit; sl@0: class CLogicalAudioStream; sl@0: sl@0: sl@0: /** sl@0: Panic category and codes sl@0: */ sl@0: _LIT(KAudioContextPanicCategory, "AudioContext"); sl@0: sl@0: enum TAudioContextPanicCodes sl@0: { sl@0: ECloneLeftWhenReceivingResourceResponse = 1, sl@0: }; sl@0: sl@0: //// sl@0: // Implementation of the audio context. sl@0: // sl@0: // @see MAudioContext sl@0: // @see MMultimediaResourceControlObserver sl@0: // @see MLogicalSettingObserver sl@0: // sl@0: // @lib AudioComponentFramework.lib sl@0: // sl@0: NONSHARABLE_CLASS(CAudioContext) : public CBase, sl@0: public MAudioContext, sl@0: public MMultimediaResourceControlObserver, sl@0: public MLogicalSettingObserver, sl@0: public MA3FDevSoundAutoPauseResume sl@0: { sl@0: sl@0: public: sl@0: sl@0: IMPORT_C static CAudioContext* NewL(); sl@0: sl@0: IMPORT_C virtual ~CAudioContext(); sl@0: sl@0: // sl@0: IMPORT_C MLogicalChain* GetLogicalChain(TInt aIndex); sl@0: IMPORT_C TInt MsgVersion(); sl@0: IMPORT_C RCriticalSection& CriticalSection(); sl@0: // from base class MAudioContext (A3F API) sl@0: virtual TInt Commit ( ); sl@0: virtual TInt CreateAudioProcessingUnit (TUid aTypeId, MAudioProcessingUnit *& aProcessingUnit ); sl@0: virtual TInt CreateAudioStream ( MAudioStream *& aStream ); sl@0: virtual void DeleteAudioProcessingUnit ( MAudioProcessingUnit *& aProcessingUnit ); sl@0: virtual void DeleteAudioStream ( MAudioStream *& aStream ); sl@0: virtual TAudioContextId ContextId ( ) const; sl@0: virtual TAny* Interface(TUid aType); sl@0: virtual TInt RegisterAudioContextObserver ( MAudioContextObserver & aObserver ); sl@0: virtual TInt Reset ( ); sl@0: virtual TInt SetClientSettings(const TClientContextSettings &aSettings); sl@0: virtual void UnregisterAudioContextObserver ( MAudioContextObserver & aObserver ) ; sl@0: sl@0: //from base class MMultimediaResourceControlObserver sl@0: virtual void ReceiveResourceResponse(MLogicalChain *aMessage, TInt aError); sl@0: virtual void ReceiveResourceUpdate(MLogicalChain *aMessage, TInt aError); sl@0: virtual void ReceivePreemptionUpdate(MLogicalChain *aMessage, TInt aError); sl@0: virtual void CanResume(); sl@0: sl@0: //from MLogicalSettingObserver sl@0: virtual void ReceiveComponentSettingsChange(TUid aId, TMMRCMessageType aMessageType); sl@0: sl@0: //Internals. sl@0: //Resolve and get component context-unique component instance id. sl@0: TAudioComponentId GetAndSetInstanceID(); sl@0: //Send a the notification about context event to all observers. sl@0: void ContextEventSignal(TUid aEvent, TInt aError); sl@0: sl@0: //from MA3FDevSoundAutoPauseResume sl@0: virtual TInt RegisterAsClient(TUid aEventType, const TDesC8& aNotificationRegistrationData, MA3FDevSoundAutoPauseResumeObserver* aObserverPtr); sl@0: virtual TInt CancelRegisterAsClient(TUid aEventType); sl@0: virtual TInt WillResumePlay(); sl@0: sl@0: private: sl@0: sl@0: CAudioContext(); sl@0: sl@0: void ConstructL(); sl@0: sl@0: void Panic(TAudioContextPanicCodes aCode); sl@0: sl@0: private: sl@0: //Context identifier. sl@0: sl@0: TAudioContextId iContextId; sl@0: sl@0: //Array of components within this context (stream not included) (array members not own). sl@0: sl@0: RPointerArray iAudioProcessingUnits; sl@0: sl@0: sl@0: // Array of context observers. sl@0: // Members not own. sl@0: sl@0: RPointerArray iAudioContextObservers; sl@0: sl@0: sl@0: //Multimedia Resource Control API. sl@0: sl@0: RMMRCClient iMMRC; sl@0: sl@0: sl@0: //Client context identifiers. sl@0: sl@0: TClientContextSettings iClientSettings; sl@0: sl@0: //Audio type settings. sl@0: sl@0: TAudioTypeSettings iAudioTypeSettings; sl@0: sl@0: // Not owned sl@0: MLogicalChain* iDesiredChain; sl@0: sl@0: // Owned sl@0: MLogicalChain* iActualChain; sl@0: sl@0: TBool iInCommit; sl@0: sl@0: TBool iPreempted; sl@0: sl@0: MA3FDevSoundAutoPauseResumeObserver* iObserverPtr; sl@0: sl@0: TInt iMsgVersion; sl@0: sl@0: RCriticalSection iCriticalSection; sl@0: }; sl@0: sl@0: #endif // AUDIOCONTEXT_H