First public contribution.
2 * Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
4 * This component and the accompanying materials are made available
5 * under the terms of "Eclipse Public License v1.0"
6 * which accompanies this distribution, and is available
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
9 * Initial Contributors:
10 * Nokia Corporation - initial contribution.
19 #ifndef AUDIOCONTEXT_H
20 #define AUDIOCONTEXT_H
23 #include <a3f/a3fbase.h>
24 #include <a3f/a3f_trace_utils.h>
25 #include <a3f/a3fdevsoundaudiopauseresume.h>
27 #include "mmrcclient.h"
28 #include "multimediaresourcecontrolobserver.h"
30 #include <a3f/maudiocontext.h>
31 #include <a3f/maudiocontextobserver.h>
33 #include "mlogicalsettingsobserver.h"
36 class CAudioProcessingUnit;
37 class CLogicalAudioStream;
41 Panic category and codes
43 _LIT(KAudioContextPanicCategory, "AudioContext");
45 enum TAudioContextPanicCodes
47 ECloneLeftWhenReceivingResourceResponse = 1,
51 // Implementation of the audio context.
54 // @see MMultimediaResourceControlObserver
55 // @see MLogicalSettingObserver
57 // @lib AudioComponentFramework.lib
59 NONSHARABLE_CLASS(CAudioContext) : public CBase,
61 public MMultimediaResourceControlObserver,
62 public MLogicalSettingObserver,
63 public MA3FDevSoundAutoPauseResume
68 IMPORT_C static CAudioContext* NewL();
70 IMPORT_C virtual ~CAudioContext();
73 IMPORT_C MLogicalChain* GetLogicalChain(TInt aIndex);
74 IMPORT_C TInt MsgVersion();
75 IMPORT_C RCriticalSection& CriticalSection();
76 // from base class MAudioContext (A3F API)
77 virtual TInt Commit ( );
78 virtual TInt CreateAudioProcessingUnit (TUid aTypeId, MAudioProcessingUnit *& aProcessingUnit );
79 virtual TInt CreateAudioStream ( MAudioStream *& aStream );
80 virtual void DeleteAudioProcessingUnit ( MAudioProcessingUnit *& aProcessingUnit );
81 virtual void DeleteAudioStream ( MAudioStream *& aStream );
82 virtual TAudioContextId ContextId ( ) const;
83 virtual TAny* Interface(TUid aType);
84 virtual TInt RegisterAudioContextObserver ( MAudioContextObserver & aObserver );
85 virtual TInt Reset ( );
86 virtual TInt SetClientSettings(const TClientContextSettings &aSettings);
87 virtual void UnregisterAudioContextObserver ( MAudioContextObserver & aObserver ) ;
89 //from base class MMultimediaResourceControlObserver
90 virtual void ReceiveResourceResponse(MLogicalChain *aMessage, TInt aError);
91 virtual void ReceiveResourceUpdate(MLogicalChain *aMessage, TInt aError);
92 virtual void ReceivePreemptionUpdate(MLogicalChain *aMessage, TInt aError);
93 virtual void CanResume();
95 //from MLogicalSettingObserver
96 virtual void ReceiveComponentSettingsChange(TUid aId, TMMRCMessageType aMessageType);
99 //Resolve and get component context-unique component instance id.
100 TAudioComponentId GetAndSetInstanceID();
101 //Send a the notification about context event to all observers.
102 void ContextEventSignal(TUid aEvent, TInt aError);
104 //from MA3FDevSoundAutoPauseResume
105 virtual TInt RegisterAsClient(TUid aEventType, const TDesC8& aNotificationRegistrationData, MA3FDevSoundAutoPauseResumeObserver* aObserverPtr);
106 virtual TInt CancelRegisterAsClient(TUid aEventType);
107 virtual TInt WillResumePlay();
115 void Panic(TAudioContextPanicCodes aCode);
118 //Context identifier.
120 TAudioContextId iContextId;
122 //Array of components within this context (stream not included) (array members not own).
124 RPointerArray<MAudioProcessingUnit> iAudioProcessingUnits;
127 // Array of context observers.
130 RPointerArray<MAudioContextObserver> iAudioContextObservers;
133 //Multimedia Resource Control API.
138 //Client context identifiers.
140 TClientContextSettings iClientSettings;
142 //Audio type settings.
144 TAudioTypeSettings iAudioTypeSettings;
147 MLogicalChain* iDesiredChain;
150 MLogicalChain* iActualChain;
156 MA3FDevSoundAutoPauseResumeObserver* iObserverPtr;
160 RCriticalSection iCriticalSection;
163 #endif // AUDIOCONTEXT_H