devsound/a3fdevsound/src/devsoundadaptor/cdevaudio.h
author hgs
Tue, 02 Nov 2010 12:28:51 +0000
changeset 6 fe9d1bf55678
parent 0 b8ed18f6c07b
permissions -rw-r--r--
2010wk46_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     1
/*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     2
* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     3
* All rights reserved.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     8
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     9
* Initial Contributors:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    11
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    12
* Contributors:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    13
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    14
* Description:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    15
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    16
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    17
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    18
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    19
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    20
#ifndef CDEVAUDIO_H
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    21
#define CDEVAUDIO_H
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    22
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    23
#include <e32base.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    24
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    25
#include "mmfdevsoundadaptationbody.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    26
#include <a3f/maudiocontextobserver.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    27
#include <a3f/maudiostreamobserver.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    28
#include "mdevsoundadaptationinfoobserver.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    29
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    30
#include <a3f/a3f_trace_utils.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    31
#include <a3f/a3fdevsoundaudiopauseresume.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    32
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    33
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    34
// CLASS FORWARD
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    35
class CDevAudioControl;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    36
class CDevPlayControl;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    37
class CDevRecordControl;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    38
class CDevToneControl;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    39
class CDevGenControl;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    40
class CAudioContextFactory;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    41
class CA3FDevSoundAdaptationInfo;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    42
class MAudioContext;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    43
class MAudioStream;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    44
class MGlobalProperties;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    45
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    46
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    47
Panic category and codes that CDevAudio raises on the client
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    48
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    49
_LIT(KMMFDevAudioPanicCategory, "CDevAudio");
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    50
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    51
enum TMMFDevAudioPanicCodes
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    52
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    53
	EValidStateBeforeCommit =1
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    54
	};
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    55
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    56
enum TDevSoundAdaptorState
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    57
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    58
	EDevSoundAdaptorCreated_Uninitialised,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    59
	EDevSoundAdaptorRemovingProcessingUnits,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    60
	EDevSoundAdaptorUnitialised_Uninitialised,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    61
	EDevSoundAdaptorUninitialising,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    62
	EDevSoundAdaptorInitialising,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    63
	EDevSoundAdaptorInitialised_Initialised,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    64
	EDevSoundAdaptorLoading,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    65
	EDevSoundAdaptorUnloading,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    66
	EDevSoundAdaptorInitialised_Idle,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    67
	EDevSoundAdaptorGoingActive,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    68
	EDevSoundAdaptorPreempted,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    69
	EDevSoundAdaptorBeingPreempted,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    70
	EDevSoundAdaptorStopping,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    71
	EDevSoundAdaptorActivating,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    72
	EDevSoundAdaptorActive_Active,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    73
	EDevSoundAdaptorPausing,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    74
	EDevSoundAdaptorPaused_Primed
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    75
	};
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    76
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    77
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    78
 * CDevAudio.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    79
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    80
 * ?description
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    81
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    82
 * @lib mmfdevsoundadaptation.lib
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    83
 * @since
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    84
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    85
NONSHARABLE_CLASS(CDevAudio) :	public CBase,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    86
								public MAudioContextObserver,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    87
								public MA3FDevSoundAdaptationInfoObserver,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    88
								public MA3FDevSoundAutoPauseResumeObserver
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    89
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    90
	friend class CDevAudioControl;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    91
	friend class CDevPlayControl;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    92
	friend class CDevRecordControl;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    93
	friend class CDevToneControl;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    94
    friend class CDevGenControl;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    95
    friend class CDevCommonControl;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    96
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    97
public:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    98
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    99
	~CDevAudio();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   100
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   101
	static CDevAudio* NewL(MDevSoundAdaptationObserver& aDevSoundObserver,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   102
									MGlobalProperties& aGlobalProperties);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   103
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   104
	void ConstructL(MGlobalProperties& aGlobalProperties);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   105
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   106
	// 2nd phase async construct - will callback to aDevSoundObserver
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   107
	TInt PostOpen();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   108
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   109
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   110
	* Sets control operating mode (playing/recording...)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   111
	* @since
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   112
	* @param aMode new control mode
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   113
	* @param aFormat codec format
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   114
	* @return error code
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   115
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   116
	TInt Initialize(TUid aFormat, TMMFState aMode);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   117
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   118
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   119
	* Cancels Initialization
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   120
	* @since
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   121
	* @return error code
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   122
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   123
	TInt CancelInitialize();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   124
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   125
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   126
	* Returns pointer to audio control instance for current operating mode
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   127
	* @since
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   128
	* @param aAudioControl on return, contains pointer to audio control
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   129
	* @return error code
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   130
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   131
	CDevAudioControl* GetAudioControl();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   132
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   133
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   134
	* Defines the priority settings that should be used for this instance.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   135
	* @since
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   136
	* @param const TMMFPrioritySettings &aPrioritySettings A class type
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   137
	*        representing the client's priority, priority preference and
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   138
	*        state
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   139
	* @return Err
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   140
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   141
	TInt SetPrioritySettings(const TMMFPrioritySettings& aPrioritySettings);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   142
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   143
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   144
	* Sets client configuration
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   145
	* @since
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   146
	* @param aProcessId DevSound's client process
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   147
	* @param aActualProcessId DevSound's effective/actual client (supplied by SetClientThreadInfo)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   148
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   149
    TInt SetClientConfig(const TProcessId& aProcessId);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   150
    TInt SetClientConfig(const TProcessId& aActualProcessId, const TProcessId& aProcessId);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   151
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   152
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   153
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   154
	* Retrieve the current A3F state
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   155
	* @since
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   156
	* @return the current A3F state. See TAudioState
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   157
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   158
	TDevSoundAdaptorState ActiveState() const;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   159
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   160
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   161
	* Retrieve the previous DevSound adaptor state
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   162
	* @return void
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   163
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   164
	TDevSoundAdaptorState PreviousState() const;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   165
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   166
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   167
	* Set the current DevSound adaptor state
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   168
	* @return void
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   169
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   170
	void SetActiveState(TDevSoundAdaptorState aAdaptorState);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   171
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   172
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   173
	* Set the previous DevSound adaptor state
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   174
	* @return void
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   175
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   176
	void SetPreviousState(TDevSoundAdaptorState aAdaptorState);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   177
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   178
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   179
	* SetVolume for DevSound
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   180
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   181
	TInt SetDevSoundVolume(TInt aVolume, TBool& aAsyncCompletion);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   182
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   183
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   184
	* SetGain for DevSound
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   185
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   186
	TInt SetDevSoundGain(TInt aGain, TBool& aAsyncCompletion);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   187
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   188
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   189
	* SetPlayBalance for DevSound
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   190
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   191
	TInt SetDevSoundPlayBalance(TInt aLeftPercentage, TInt aRightPercentage, TBool& aAsyncCompletion);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   192
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   193
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   194
	* SetPlayBalance for DevSound
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   195
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   196
	TInt SetDevSoundRecordBalance(TInt aLeftPercentage, TInt aRightPercentage, TBool& aAsyncCompletion);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   197
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   198
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   199
	* SetVolumeRamp for DevSound
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   200
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   201
	TInt SetVolumeRamp(const TTimeIntervalMicroSeconds& aRampDuration);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   202
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   203
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   204
	* MaxVolume for DevSound
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   205
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   206
	TInt DevSoundMaxVolume() const;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   207
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   208
	* MaxGain for DevSound
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   209
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   210
	TInt DevSoundMaxGain() const;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   211
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   212
	* Volume setting
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   213
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   214
	TInt DevSoundVolume() const;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   215
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   216
	* Gain setting
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   217
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   218
	TInt DevSoundGain() const;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   219
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   220
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   221
	* GetPlayBalance for DevSound
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   222
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   223
	void GetDevSoundPlayBalance(TInt& aLeftPercentage, TInt& aRightPercentage);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   224
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   225
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   226
	* GetRecordBalance for DevSound
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   227
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   228
	void GetDevSoundRecordBalance(TInt& aLeftPercentage, TInt& aRightPercentage);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   229
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   230
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   231
	* GetSupportedDataTypes for DevSound
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   232
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   233
	void DevSoundSupportedDataTypesL(RArray<TFourCC>& aSupportedDataTypes, TUint aDataType);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   234
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   235
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   236
	* Call from control - generates appropriate SetGainAndBalance() call
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   237
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   238
	TInt RequestGainAndBalance(CDevAudioControl* aCallingControl);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   239
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   240
	// From base class MAudioContextObserver
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   241
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   242
	* Callback to context observer to show progression through Commit() and pre-emption cycles
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   243
	*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   244
	* @param aEvent  a Uid giving the specific event.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   245
	* @param aError  an error code. KErrNone if successful, otherwise one of the system wide error codes.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   246
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   247
	virtual void ContextEvent(TUid aEvent, TInt aError);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   248
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   249
	// from MA3FDevSoundAdaptationInfoObserver
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   250
	void RequestMaxGainComplete (TUid aCodecType, TInt aError, TInt aResult);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   251
	void RequestSupportedFormatsComplete(TUid aCodecType, TInt aError);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   252
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   253
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   254
	* Queries if the low layers does support resume operation.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   255
	* @since
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   256
	* @return TBool ETrue if Resume is supported
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   257
	*               EFalse otherwise
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   258
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   259
	TBool IsResumeSupported();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   260
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   261
	void ConvertToFourCcL(RArray<TFourCC>& aSupportedDataTypes, RArray<TUid>& iSupportedFormats);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   262
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   263
	//from MA3FDevSoundAutoPauseResume
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   264
	TInt RegisterAsClient(TUid aEventType, const TDesC8& aNotificationRegistrationData);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   265
	TInt CancelRegisterAsClient(TUid aEventType);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   266
	TInt WillResumePlay();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   267
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   268
	//from MA3FDevSoundAutoPauseResumeObserver
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   269
	virtual void NotifyResume();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   270
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   271
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   272
	* GetPrioritySettings for DevSound
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   273
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   274
	void GetPrioritySettings(TAudioTypeSettings& astorage);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   275
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   276
	TBool IsPrioritySet();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   277
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   278
	//Panic function
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   279
	void Panic(TMMFDevAudioPanicCodes aCode);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   280
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   281
protected:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   282
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   283
	CDevAudio(MDevSoundAdaptationObserver& aAdaptationObserver);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   284
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   285
	// If active, apply devsound volume and balance changes
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   286
	TInt SetGainAndBalance(TBool aCallBack, TBool& aAsyncCompletion);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   287
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   288
	// Helper methods
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   289
	TInt CreateAudioProcessingUnits(TUid aSource, TUid aSink, TUid aCodec);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   290
	void DeleteAudioProcessingUnits();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   291
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   292
	TInt CommitAudioContext();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   293
	TBool IsMidState(TDevSoundAdaptorState aAdaptorState);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   294
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   295
/*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   296
* most of member data is protected for DevAudioControl access
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   297
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   298
protected: // data
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   299
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   300
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   301
	* adaptation observer - used to indicate async callbacks etc
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   302
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   303
	MDevSoundAdaptationObserver& iAdaptationObserver;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   304
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   305
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   306
	* Pointer to audio context factory - context creation
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   307
	* Own.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   308
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   309
	CAudioContextFactory *iAudioContextFactory;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   310
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   311
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   312
	* Pointer to audio context.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   313
	* Not own.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   314
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   315
	MAudioContext *iAudioContext;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   316
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   317
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   318
	* Pointer to audio stream.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   319
	* Not own.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   320
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   321
	MAudioStream *iAudioStream;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   322
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   323
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   324
	* Pointer to audio source.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   325
	* Not own.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   326
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   327
	MAudioProcessingUnit* iAudioSource;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   328
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   329
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   330
	* Pointer to audio codec.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   331
	* Not own.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   332
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   333
	MAudioProcessingUnit* iAudioCodec;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   334
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   335
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   336
	* Pointer to audio gain control
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   337
	* Not own.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   338
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   339
	MAudioProcessingUnit* iGainControl;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   340
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   341
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   342
	* Pointer to audio sink
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   343
	* Not own.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   344
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   345
	MAudioProcessingUnit* iAudioSink;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   346
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   347
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   348
	* Mode to which this DevAudio is initialized in
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   349
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   350
	TMMFState iMode;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   351
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   352
	TUid 	iFormat;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   353
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   354
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   355
	* Active DevSound Adaptor state
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   356
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   357
	TDevSoundAdaptorState iActiveState;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   358
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   359
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   360
	* Previous DevSound Adaptor state
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   361
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   362
	TDevSoundAdaptorState iPreviousState;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   363
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   364
	TAudioState		iActiveStreamState;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   365
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   366
	TBool 	iReinitializing;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   367
	TBool 	iClosing;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   368
	TBool	iStop;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   369
	TUid 	iTargetFormat;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   370
	TMMFState iTargetMode;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   371
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   372
	TInt iDevSoundMaxGain;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   373
	TInt iDevSoundMaxVolume;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   374
	TInt iDevSoundGain;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   375
	TInt iDevSoundVolume;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   376
	TInt iDevSoundPlayBalance[2];
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   377
	TInt iDevSoundRecordBalance[2];
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   378
	TTimeIntervalMicroSeconds	iRampDuration;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   379
private:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   380
	enum TPreOpenState
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   381
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   382
		EPreOpenStateIdle,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   383
		EPreOpenStateRequestingMaxVolume,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   384
		EPreOpenStateRequestingMaxGain,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   385
		EPreOpenStateRequestingInputFormats,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   386
		EPreOpenStateRequestingOutputFormats,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   387
		};
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   388
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   389
	TPreOpenState iPreOpenState;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   390
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   391
	RArray<TUid> iSupportedInputFormats;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   392
	RArray<TUid> iSupportedOutputFormats;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   393
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   394
	CA3FDevSoundAdaptationInfo* iAdaptationInfo;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   395
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   396
	CDevPlayControl*   iDevPlayControl;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   397
	CDevRecordControl* iDevRecordControl;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   398
	CDevToneControl*   iDevToneControl;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   399
	CDevGenControl*    iDevGenControl;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   400
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   401
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   402
	* Points to whichever control is active
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   403
	* Not own.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   404
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   405
	CDevAudioControl* iCurrentAudioControl;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   406
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   407
	// Pointer to global properties
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   408
	// Not owned.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   409
	MGlobalProperties*	iGlobalProperties;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   410
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   411
	TAudioTypeSettings iPrioritySettings;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   412
	TBool iPriorityFlag;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   413
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   414
	};
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   415
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   416
inline TInt CDevAudio::DevSoundMaxVolume() const
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   417
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   418
	return iDevSoundMaxVolume;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   419
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   420
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   421
inline TInt CDevAudio::DevSoundMaxGain() const
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   422
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   423
	return iDevSoundMaxGain;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   424
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   425
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   426
inline TInt CDevAudio::DevSoundVolume() const
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   427
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   428
	return iDevSoundVolume;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   429
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   430
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   431
inline TInt CDevAudio::DevSoundGain() const
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   432
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   433
	return iDevSoundGain;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   434
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   435
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   436
#endif // CDEVAUDIO_H