os/mm/mmhais/a3facl/src/audiocontext/audiocontext.h
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
     1 /*
     2 * Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
     3 * All rights reserved.
     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".
     8 *
     9 * Initial Contributors:
    10 * Nokia Corporation - initial contribution.
    11 *
    12 * Contributors:
    13 *
    14 * Description:
    15 *
    16 */
    17 
    18 
    19 #ifndef AUDIOCONTEXT_H
    20 #define AUDIOCONTEXT_H
    21 
    22 #include <e32base.h>
    23 #include <a3f/a3fbase.h>
    24 #include <a3f/a3f_trace_utils.h>
    25 #include <a3f/a3fdevsoundaudiopauseresume.h>
    26 
    27 #include "mmrcclient.h"
    28 #include "multimediaresourcecontrolobserver.h"
    29 
    30 #include <a3f/maudiocontext.h>
    31 #include <a3f/maudiocontextobserver.h>
    32 
    33 #include "mlogicalsettingsobserver.h"
    34 
    35 
    36 class CAudioProcessingUnit;
    37 class CLogicalAudioStream;
    38 
    39 
    40 /**
    41 Panic category and codes
    42 */
    43 _LIT(KAudioContextPanicCategory, "AudioContext");
    44 
    45 enum TAudioContextPanicCodes
    46 	{
    47 	ECloneLeftWhenReceivingResourceResponse = 1,
    48 	};
    49 
    50 ////
    51  // Implementation of the audio context.
    52  //
    53  // @see MAudioContext
    54  // @see MMultimediaResourceControlObserver
    55  // @see MLogicalSettingObserver
    56  //
    57  // @lib AudioComponentFramework.lib
    58  //
    59 NONSHARABLE_CLASS(CAudioContext) : 	public CBase,
    60 									public MAudioContext,
    61 									public MMultimediaResourceControlObserver,
    62 									public MLogicalSettingObserver,
    63 									public MA3FDevSoundAutoPauseResume
    64 	{
    65 
    66 public:
    67 
    68 	IMPORT_C static CAudioContext* NewL();
    69 
    70 	IMPORT_C virtual ~CAudioContext();
    71 
    72 	// 
    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  ) ;
    88 
    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();
    94 
    95 	//from MLogicalSettingObserver
    96 	virtual void ReceiveComponentSettingsChange(TUid aId, TMMRCMessageType aMessageType);
    97 
    98 	//Internals.
    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);
   103 	
   104 	//from MA3FDevSoundAutoPauseResume
   105 	virtual TInt RegisterAsClient(TUid aEventType, const TDesC8& aNotificationRegistrationData, MA3FDevSoundAutoPauseResumeObserver* aObserverPtr);
   106 	virtual TInt CancelRegisterAsClient(TUid aEventType);
   107 	virtual TInt WillResumePlay();
   108 
   109 private:
   110 
   111 	CAudioContext();
   112 
   113 	void ConstructL();
   114 
   115 	void Panic(TAudioContextPanicCodes aCode);
   116 
   117 private:	
   118 	//Context identifier.
   119 	
   120 	TAudioContextId iContextId;
   121 
   122 	//Array of components within this context (stream not included) (array members not own).
   123 	
   124 	RPointerArray<MAudioProcessingUnit> iAudioProcessingUnits;
   125 
   126 	
   127 	// Array of context observers.
   128 	// Members not own.
   129 	
   130 	RPointerArray<MAudioContextObserver> iAudioContextObservers;
   131 	
   132 
   133 	//Multimedia Resource Control API.
   134 	
   135 	RMMRCClient iMMRC;
   136 
   137 	
   138 	//Client context identifiers.
   139 	
   140 	TClientContextSettings iClientSettings;
   141 
   142 	//Audio type settings.
   143 	
   144 	TAudioTypeSettings iAudioTypeSettings;
   145 
   146 	// Not owned
   147 	MLogicalChain* iDesiredChain;
   148 
   149 	// Owned
   150 	MLogicalChain* iActualChain;
   151 
   152 	TBool iInCommit;
   153 	
   154 	TBool iPreempted;
   155 	
   156 	MA3FDevSoundAutoPauseResumeObserver* iObserverPtr;
   157 	
   158 	TInt iMsgVersion;
   159 	
   160 	RCriticalSection iCriticalSection;
   161 	};
   162 
   163 #endif // AUDIOCONTEXT_H