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