mmhais/a3facl/src/audiocontext/audiocontext.h
author hgs
Fri, 08 Oct 2010 19:40:43 +0100
changeset 0 79dd3e2336a0
permissions -rw-r--r--
2010wk36_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     1
/*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     2
* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     3
* All rights reserved.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     8
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     9
* Initial Contributors:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    11
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    12
* Contributors:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    13
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    14
* Description:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    15
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    16
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    17
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    18
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    19
#ifndef AUDIOCONTEXT_H
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    20
#define AUDIOCONTEXT_H
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    21
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    22
#include <e32base.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    23
#include <a3f/a3fbase.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    24
#include <a3f/a3f_trace_utils.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    25
#include <a3f/a3fdevsoundaudiopauseresume.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    26
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    27
#include "mmrcclient.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    28
#include "multimediaresourcecontrolobserver.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    29
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    30
#include <a3f/maudiocontext.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    31
#include <a3f/maudiocontextobserver.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    32
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    33
#include "mlogicalsettingsobserver.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    34
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    35
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    36
class CAudioProcessingUnit;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    37
class CLogicalAudioStream;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    38
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    39
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    40
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    41
Panic category and codes
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    42
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    43
_LIT(KAudioContextPanicCategory, "AudioContext");
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    44
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    45
enum TAudioContextPanicCodes
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    46
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    47
	ECloneLeftWhenReceivingResourceResponse = 1,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    48
	};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    49
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    50
////
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    51
 // Implementation of the audio context.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    52
 //
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    53
 // @see MAudioContext
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    54
 // @see MMultimediaResourceControlObserver
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    55
 // @see MLogicalSettingObserver
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    56
 //
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    57
 // @lib AudioComponentFramework.lib
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    58
 //
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    59
NONSHARABLE_CLASS(CAudioContext) : 	public CBase,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    60
									public MAudioContext,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    61
									public MMultimediaResourceControlObserver,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    62
									public MLogicalSettingObserver,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    63
									public MA3FDevSoundAutoPauseResume
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    64
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    65
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    66
public:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    67
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    68
	IMPORT_C static CAudioContext* NewL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    69
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    70
	IMPORT_C virtual ~CAudioContext();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    71
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    72
	// 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    73
	IMPORT_C MLogicalChain* GetLogicalChain(TInt aIndex);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    74
	IMPORT_C TInt MsgVersion();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    75
	IMPORT_C RCriticalSection& CriticalSection();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    76
	// from base class MAudioContext (A3F API)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    77
	virtual TInt Commit  ( ); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    78
	virtual TInt CreateAudioProcessingUnit  (TUid  aTypeId, MAudioProcessingUnit *& aProcessingUnit );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    79
	virtual TInt CreateAudioStream  ( MAudioStream *& aStream  );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    80
	virtual void DeleteAudioProcessingUnit  ( MAudioProcessingUnit *& aProcessingUnit );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    81
	virtual void DeleteAudioStream  ( MAudioStream *& aStream );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    82
	virtual TAudioContextId ContextId  ( ) const;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    83
	virtual TAny* Interface(TUid aType);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    84
	virtual TInt RegisterAudioContextObserver  ( MAudioContextObserver & aObserver );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    85
	virtual TInt Reset  ( );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    86
	virtual TInt SetClientSettings(const TClientContextSettings &aSettings);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    87
	virtual void UnregisterAudioContextObserver ( MAudioContextObserver & aObserver  ) ;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    88
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    89
	//from base class MMultimediaResourceControlObserver
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    90
	virtual void ReceiveResourceResponse(MLogicalChain *aMessage, TInt aError);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    91
	virtual void ReceiveResourceUpdate(MLogicalChain *aMessage, TInt aError);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    92
	virtual void ReceivePreemptionUpdate(MLogicalChain *aMessage, TInt aError);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    93
	virtual void CanResume();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    94
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    95
	//from MLogicalSettingObserver
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    96
	virtual void ReceiveComponentSettingsChange(TUid aId, TMMRCMessageType aMessageType);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    97
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    98
	//Internals.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    99
	//Resolve and get component context-unique component instance id.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   100
	TAudioComponentId GetAndSetInstanceID();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   101
	//Send a the notification about context event to all observers.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   102
	void ContextEventSignal(TUid aEvent, TInt aError);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   103
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   104
	//from MA3FDevSoundAutoPauseResume
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   105
	virtual TInt RegisterAsClient(TUid aEventType, const TDesC8& aNotificationRegistrationData, MA3FDevSoundAutoPauseResumeObserver* aObserverPtr);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   106
	virtual TInt CancelRegisterAsClient(TUid aEventType);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   107
	virtual TInt WillResumePlay();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   108
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   109
private:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   110
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   111
	CAudioContext();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   112
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   113
	void ConstructL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   114
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   115
	void Panic(TAudioContextPanicCodes aCode);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   116
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   117
private:	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   118
	//Context identifier.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   119
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   120
	TAudioContextId iContextId;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   121
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   122
	//Array of components within this context (stream not included) (array members not own).
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   123
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   124
	RPointerArray<MAudioProcessingUnit> iAudioProcessingUnits;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   125
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   126
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   127
	// Array of context observers.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   128
	// Members not own.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   129
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   130
	RPointerArray<MAudioContextObserver> iAudioContextObservers;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   131
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   132
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   133
	//Multimedia Resource Control API.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   134
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   135
	RMMRCClient iMMRC;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   136
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   137
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   138
	//Client context identifiers.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   139
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   140
	TClientContextSettings iClientSettings;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   141
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   142
	//Audio type settings.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   143
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   144
	TAudioTypeSettings iAudioTypeSettings;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   145
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   146
	// Not owned
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   147
	MLogicalChain* iDesiredChain;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   148
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   149
	// Owned
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   150
	MLogicalChain* iActualChain;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   151
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   152
	TBool iInCommit;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   153
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   154
	TBool iPreempted;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   155
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   156
	MA3FDevSoundAutoPauseResumeObserver* iObserverPtr;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   157
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   158
	TInt iMsgVersion;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   159
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   160
	RCriticalSection iCriticalSection;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   161
	};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   162
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   163
#endif // AUDIOCONTEXT_H