mmlibs/mmfw/tsrc/mmfintegrationtest/ACLNT/UseOldCodecAudioController/TestUseOldCodecAudioController.cpp
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
// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     2
// All rights reserved.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     7
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     8
// Initial Contributors:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    10
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    11
// Contributors:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    12
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    13
// Description:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    14
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    15
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    16
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    17
#include <mmf/server/mmfformat.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    18
#include <mmf/server/mmfclip.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    19
#include <mdaaudiosampleeditor.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    20
#include <mmf/plugin/mmfcontrollerimplementationuids.hrh>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    21
#include <mmf/common/mmffourcc.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    22
#include <mmf/common/mmfpaniccodes.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    23
#include "TestUseOldCodecAudioController.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    24
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    25
const TUint KSampleRate8000Hz = 8000;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    26
const TUint KSampleRate11025Hz = 11025;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    27
const TUint KSampleRate16000Hz = 16000;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    28
const TUint KSampleRate22050Hz = 22050;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    29
const TUint KSampleRate32000Hz = 32000;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    30
const TUint KSampleRate44100Hz = 44100;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    31
const TUint KSampleRate48000Hz = 48000;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    32
const TUint KSampleRate88200Hz = 88200;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    33
const TUint KSampleRate96000Hz = 96000;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    34
const TUint KNumChannelsMono = 1;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    35
const TUint KNumChannelsStereo = 2;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    36
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    37
/*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    38
 TMmfAudioControllerPanics is an enumeration with the following entries:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    39
 EBadArgument indicates a bad argument
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    40
 EBadState indicates a state viaolation
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    41
 EBadInvariant indicates an invariant violation
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    42
 EBadReset indicates failed reset
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    43
 EPostConditionViolation indicates a post condition violation
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    44
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    45
enum TMmfAudioControllerPanics
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    46
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    47
	EBadArgument,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    48
	EBadState,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    49
	EBadInvariant,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    50
	EBadReset,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    51
	EPostConditionViolation
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    52
	};
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    53
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    54
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    55
* Panic
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    56
* This method generates a panic
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    57
* @param "TInt"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    58
* @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    59
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    60
void Panic(TInt aPanicCode)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    61
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    62
	_LIT(KMMFAudioControllerPanicCategory, "MMFAudioController");
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    63
	User::Panic(KMMFAudioControllerPanicCategory, aPanicCode);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    64
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    65
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    66
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    67
 * Static NewL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    68
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    69
 * @return CMMFTestUseOldCodecAudioController*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    70
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    71
CMMFController* CMMFTestUseOldCodecAudioController::NewL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    72
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    73
	CMMFTestUseOldCodecAudioController* self = new(ELeave) CMMFTestUseOldCodecAudioController;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    74
	CleanupStack::PushL(self);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    75
	self->ConstructL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    76
	CleanupStack::Pop( self );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    77
	return STATIC_CAST( CMMFController*, self );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    78
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    79
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    80
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    81
* ConstructL 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    82
* 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    83
* @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    84
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    85
void CMMFTestUseOldCodecAudioController::ConstructL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    86
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    87
	iDataSource         = NULL;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    88
	iDataSink           = NULL;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    89
	iDataPath           = CMMFDataPath::NewL(iMediaId, *this);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    90
	iSourceFormat       = NULL;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    91
	iSinkFormat         = NULL;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    92
	iSourceAndSinkAdded = EFalse;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    93
	iStoppingRecording  = EFalse;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    94
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    95
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    96
	//iMediaId has already been set up 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    97
	SetState( EStopped );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    98
	//iPrioritySettings  not initialised because they are held by the controller framework
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    99
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   100
	// Construct custom command parsers
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   101
	CMMFAudioPlayDeviceCustomCommandParser* audPlayDevParser = CMMFAudioPlayDeviceCustomCommandParser::NewL(*this);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   102
	CleanupStack::PushL(audPlayDevParser);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   103
	AddCustomCommandParserL(*audPlayDevParser);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   104
	CleanupStack::Pop( audPlayDevParser );//audPlayDevParser
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   105
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   106
	CMMFAudioRecordDeviceCustomCommandParser* audRecDevParser = CMMFAudioRecordDeviceCustomCommandParser::NewL(*this);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   107
	CleanupStack::PushL(audRecDevParser);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   108
	AddCustomCommandParserL(*audRecDevParser);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   109
	CleanupStack::Pop(audRecDevParser);//audRecDevParser
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   110
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   111
	CMMFAudioPlayControllerCustomCommandParser* audPlayConParser = CMMFAudioPlayControllerCustomCommandParser::NewL(*this);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   112
	CleanupStack::PushL(audPlayConParser);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   113
	AddCustomCommandParserL(*audPlayConParser);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   114
	CleanupStack::Pop(audPlayConParser);//audPlayConParser
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   115
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   116
	CMMFAudioRecordControllerCustomCommandParser* audRecConParser = CMMFAudioRecordControllerCustomCommandParser::NewL(*this);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   117
	CleanupStack::PushL(audRecConParser);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   118
	AddCustomCommandParserL(*audRecConParser);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   119
	CleanupStack::Pop(audRecConParser);//audRecParser
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   120
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   121
	CMMFAudioControllerCustomCommandParser* audConParser = CMMFAudioControllerCustomCommandParser::NewL(*this);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   122
	CleanupStack::PushL(audConParser);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   123
	AddCustomCommandParserL(*audConParser);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   124
	CleanupStack::Pop(audConParser);//audConParser
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   125
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   126
	iWaitForAsyncService = new (ELeave) CActiveSchedulerWait;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   127
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   128
	// [ assert the invariant now that we are constructed ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   129
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   130
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   131
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   132
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   133
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   134
* CMMFTestUseOldCodecAudioController
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   135
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   136
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   137
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   138
CMMFTestUseOldCodecAudioController::CMMFTestUseOldCodecAudioController() : iMediaId(KUidMediaTypeAudio), iState(EStopped)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   139
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   140
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   141
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   142
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   143
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   144
* ~CMMFTestUseOldCodecAudioController
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   145
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   146
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   147
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   148
CMMFTestUseOldCodecAudioController::~CMMFTestUseOldCodecAudioController()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   149
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   150
	// [ ensure we have logged off the thread ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   151
	if( iDataPath ) 	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   152
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   153
		iDataPath->ResetL();	// this does not leave
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   154
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   155
	delete iDataPath;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   156
	delete iSourceFormat;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   157
	delete iSinkFormat;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   158
	delete iStoppingMessage;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   159
	delete iWaitForAsyncService;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   160
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   161
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   162
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   163
 *  AddDataSourceL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   164
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   165
 *	Adds a data source to the controller
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   166
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   167
 *	@param aSource
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   168
 * Preconditions:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   169
 * We are stopped
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   170
 * Source does not already exist
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   171
 * Postconditions:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   172
 * iDataSource != NULL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   173
 * iDataSourceAdded == ETrue
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   174
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   175
void CMMFTestUseOldCodecAudioController::AddDataSourceL(MDataSource& aSource)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   176
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   177
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   178
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   179
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   180
	// [ precondition that the controller is stopped ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   181
    if( State() != EStopped )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   182
		User::Leave( KErrNotReady );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   183
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   184
	//[ precondition iData source is not already configured ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   185
	if (iDataSource)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   186
		User::Leave(KErrAlreadyExists);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   187
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   188
	// Note that this code is not generic for sources
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   189
	// It it only checks for file, des clips and audio inputs
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   190
	// If a new source type eg a Url Clip then this needs to be added to the supported source Uids
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   191
	if ( SourceFormatRequired( aSource) ) 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   192
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   193
		// Get the format from the Source if possible from no specific supplier
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   194
		TRAPD(err, iSourceFormat = CMMFFormatDecode::NewL(&aSource, KNullDesC));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   195
		//[ we want to complete silently for KErrNotSupported
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   196
		// because there is a possibility that the client
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   197
		// wants to add the data format later, see audio api for
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   198
		// a description of this feature]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   199
		if ((err != KErrNotSupported) && (err != KErrNone))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   200
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   201
			User::Leave(err);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   202
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   203
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   204
	else if (aSource.DataSourceType()==KUidMmfAudioInput)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   205
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   206
		//[ ensure that the audio input has a pointer to dev sound ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   207
		CMMFAudioInput* audioInput = STATIC_CAST(CMMFAudioInput*, &aSource);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   208
		__ASSERT_ALWAYS( audioInput, Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   209
		// [ lets load dev sound ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   210
		User::LeaveIfError(audioInput->SourceThreadLogon( *this ));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   211
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   212
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   213
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   214
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   215
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   216
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   217
	//[ its now safe to set the source ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   218
	iDataSource = &aSource ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   219
	iDataSource->SetSourcePrioritySettings(iPrioritySettings);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   220
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   221
	//[ assert the post condition ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   222
	__ASSERT_ALWAYS(iDataSource, Panic(EMMFAudioControllerPanicDataSourceDoesNotExist));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   223
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   224
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   225
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   226
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   227
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   228
 *  AddDataSinkL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   229
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   230
 *	Adds a data sink to the controller
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   231
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   232
 *	@param aSink
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   233
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   234
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   235
void CMMFTestUseOldCodecAudioController::AddDataSinkL(MDataSink& aSink)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   236
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   237
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   238
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   239
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   240
	// [ precondition that the controller is stopped ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   241
    if( State() != EStopped )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   242
		User::Leave( KErrNotReady );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   243
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   244
	// [ assert precondition that sink does not exist ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   245
	if (iDataSink)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   246
		User::Leave(KErrAlreadyExists);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   247
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   248
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   249
	// Note that this code is not generic for sinks
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   250
	// It it only checks for file,des clips and audio outputs
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   251
	// If a new sink type eg a Url Clip then this needs to be added to the supported source Uids
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   252
	if ( SinkFormatRequired( aSink ) )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   253
		{//the sink is a clip
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   254
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   255
		// Get the format from the Sink if possible from no specific supplier
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   256
		TRAPD(err, iSinkFormat = CMMFFormatEncode::NewL(&aSink, KNullDesC));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   257
		//[ we want to complete silently for KErrNotSupported
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   258
		// because there is a possibility that the client
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   259
		// wants to add the data format later, see audio api for
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   260
		// a description of this feature]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   261
		if ((err != KErrNotSupported) && (err != KErrNone))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   262
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   263
			User::Leave(err);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   264
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   265
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   266
	else if (aSink.DataSinkType()==KUidMmfAudioOutput)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   267
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   268
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   269
		//[ ensure that the audio output has a pointer to dev sound ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   270
		CMMFAudioOutput* audioOutput = STATIC_CAST(CMMFAudioOutput*, &aSink);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   271
		__ASSERT_ALWAYS( audioOutput, Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   272
		// [ lets load dev sound ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   273
		User::LeaveIfError(audioOutput->SinkThreadLogon( *this ));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   274
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   275
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   276
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   277
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   278
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   279
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   280
	//[ now that we are sure we have not left we can update the sink
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   281
	// transactionally ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   282
	iDataSink = &aSink;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   283
	iDataSink->SetSinkPrioritySettings(iPrioritySettings);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   284
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   285
	// [ assert post conditions that a sink has been added ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   286
	__ASSERT_ALWAYS(iDataSink, Panic(EMMFAudioControllerPanicDataSinkDoesNotExist));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   287
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   288
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   289
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   290
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   291
 *  PrimeL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   292
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   293
 *  If Prime fails the client should reset the controller
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   294
 *  because as noted below this code is not transactional.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   295
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   296
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   297
void CMMFTestUseOldCodecAudioController::PrimeL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   298
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   299
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   300
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   301
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   302
	//[ assert the precondition ( in a friendly way for this api 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   303
	// that we are either stopped or primed already ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   304
	if(!(( State() == EStopped ) || (State() == EPrimed )))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   305
		User::Leave( KErrNotReady );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   306
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   307
	// [ precondition we have a data source & sink ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   308
	__ASSERT_ALWAYS( iDataSource, Panic( EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   309
	__ASSERT_ALWAYS( iDataSink, Panic( EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   310
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   311
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   312
	//[ precondition that we need a source format ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   313
	if ( SourceFormatRequired(*iDataSource) && !(iSourceFormat))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   314
		User::Leave( KErrNotSupported );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   315
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   316
	// [ check the precondition if we need a data sink format ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   317
	if ( SinkFormatRequired(*iDataSink) && !( iSinkFormat ))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   318
		User::Leave( KErrNotSupported );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   319
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   320
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   321
	// [ ideally this code should be transaction based and
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   322
	//   if failure occurs we roll back to the previous state
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   323
	// in the code below this is not the case and the controller
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   324
	// can be left in an unstable state should any part of prime fail]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   325
	if (iState == EStopped)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   326
		{ //datapath propagates prime to sink & source
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   327
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   328
		TFourCC sinkFormatDataType;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   329
		if ((iSinkFormat)&&(iDataSource))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   330
			{//audio input so recording
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   331
			//need to assign the sink format 4CC to pcm16
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   332
			//even though it isn't pcm16 , this will cause the audio input
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   333
			//in negotiation to instantiate the null CMMFHwDevice plugin
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   334
			//after the negotiation set it back to the correct datatype
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   335
			//forcing the datapath to use a CMMFCodec
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   336
			sinkFormatDataType = iSinkFormat->SinkDataTypeCode(KUidMediaTypeAudio); //reset this after negotiation
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   337
			iSinkFormat->SetSinkDataTypeCode(KMMFFourCCCodePCM16, KUidMediaTypeAudio);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   338
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   339
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   340
		NegotiateL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   341
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   342
		if (!iSourceAndSinkAdded)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   343
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   344
			//add data source and sinks to datapath - Note cant do this in AddDataSource/Sink
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   345
			//because the sources and sinks aren't configured at this point
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   346
			if (iSourceFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   347
				iDataPath->AddDataSourceL(iSourceFormat);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   348
			else if (iDataSource)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   349
				{//record
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   350
				iDataPath->AddDataSourceL(iDataSource);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   351
				if (iSinkFormat) //restore the format data type
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   352
					{	//this will force datapth to use CMMFCodec
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   353
					iSinkFormat->SetSinkDataTypeCode(sinkFormatDataType,KUidMediaTypeAudio);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   354
					}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   355
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   356
			if (iSinkFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   357
				iDataPath->AddDataSinkL(iSinkFormat);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   358
			else if (iDataSink)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   359
				{//play
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   360
				//need to set the audio output fourCC code to pcm16
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   361
				//in order to force the data path to use a CMMFCodec
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   362
				CMMFAudioOutput* ao = static_cast<CMMFAudioOutput*>(iDataSink);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   363
				CMMFDevSound* devSound = &(ao->SoundDevice());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   364
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   365
				//PrimeL() needs to run synchronously but DevSound initialisation is 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   366
				//asynchronous.  iWaitForAsyncService halts execution until 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   367
				//iDevSoundEventHandler informs us this process has completed.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   368
				iDevSoundEventHandler.SetInterceptedDevSoundObserver(ao);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   369
				iDevSoundEventHandler.SetEventObserver(this);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   370
				//need to reinitialize the devsound to load up a null pcm16->16
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   371
				//hw device - note this will delete the previous
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   372
				//non pcm16 hw device
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   373
				//note can't set this on the audio output as this won't update
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   374
				//the hw device
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   375
				devSound->InitializeL(iDevSoundEventHandler,KMMFFourCCCodePCM16,EMMFStatePlaying);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   376
				iWaitForAsyncService->Start();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   377
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   378
				//now tell audio output were pcm16
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   379
				iDataSink->SetSinkDataTypeCode(KMMFFourCCCodePCM16, KUidMediaTypeAudio);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   380
				iDataPath->AddDataSinkL(iDataSink);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   381
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   382
			iSourceAndSinkAdded = ETrue ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   383
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   384
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   385
		iDataPath->PrimeL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   386
		if ((iSinkFormat) && (!iSourceFormat))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   387
			{//we are recording to a clip so the data path position is the sink
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   388
			//need to set datapath position to end of format pos (incase sink clip already exists
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   389
			TTimeIntervalMicroSeconds duration = iSinkFormat->Duration(iMediaId);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   390
			if (duration != TTimeIntervalMicroSeconds(0))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   391
				{//the file already exists and has a duration so set data path position to the end of the file
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   392
				iDataPath->SetPositionL(duration);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   393
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   394
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   395
		//[ it is now safe to make the transition to primed ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   396
		SetState( EPrimed );		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   397
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   398
	else if (State() == EPrimed)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   399
		{ //controller is already primed so just pass prime onto DP
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   400
		iDataPath->PrimeL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   401
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   402
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   403
	//[ assert the post condition that we are in the state primed]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   404
	__ASSERT_ALWAYS( SetState( EPrimed ), Panic( EPostConditionViolation ));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   405
	// [ assert the invariant]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   406
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant ) );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   407
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   408
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   409
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   410
 *  ResetL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   411
 *  This method resets the controller
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   412
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   413
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   414
void CMMFTestUseOldCodecAudioController::ResetL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   415
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   416
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant ) );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   417
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   418
	// Stop recording if it's not stopped,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   419
	if (State() != EStopped)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   420
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   421
		iDataPath->Stop();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   422
		SetState(EStopped);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   423
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   424
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   425
	// Remove references to source and sink
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   426
	iDataPath->ResetL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   427
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   428
	delete iSourceFormat; iSourceFormat = NULL  ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   429
	delete iSinkFormat;	iSinkFormat = NULL  ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   430
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   431
	//[ ensure loggoff of source and sink ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   432
	iDataSource = NULL ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   433
	iDataSink = NULL ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   434
	iSourceAndSinkAdded = EFalse;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   435
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   436
	// [ assert the invariant]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   437
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant ) );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   438
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   439
	// [ assert the post condition
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   440
	//   state == stopped
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   441
	//   iDataSource is NULL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   442
	//   iSourceFormat is NULL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   443
	//   iSinkFormat is NULL ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   444
	__ASSERT_ALWAYS( ResetPostCondition(), Panic( EBadReset ));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   445
	__ASSERT_ALWAYS( Invariant(), Panic(EBadState));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   446
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   447
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   448
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   449
* ResetPostCondition
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   450
* This function determnines if the reset post condition is valid
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   451
* @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   452
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   453
TBool CMMFTestUseOldCodecAudioController::ResetPostCondition() const
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   454
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   455
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   456
     TBool result = EFalse ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   457
	if((iSourceFormat     == NULL)  &&
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   458
	(iDataSink            == NULL)  &&
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   459
	(iDataSource          == NULL)  && 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   460
	(iSinkFormat          == NULL)  &&
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   461
	(State() == EStopped))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   462
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   463
         result = ETrue;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   464
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   465
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   466
    return result;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   467
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   468
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   469
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   470
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   471
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   472
 * PlayL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   473
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   474
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   475
void CMMFTestUseOldCodecAudioController::PlayL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   476
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   477
	// [ assert the precondition that the
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   478
	//   play command is only activated in the primed state]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   479
	if ( State() != EPrimed)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   480
		User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   481
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   482
	// [ assert the Invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   483
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   484
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   485
	//[datapath propogates play to sink & source]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   486
	iDataPath->PlayL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   487
	SetState( EPlaying );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   488
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   489
	//[ assert the post condition we are playing ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   490
	//No - this assumption is not always true if an error occurs eg OOM
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   491
	//the state could be EStopped
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   492
	//	__ASSERT_ALWAYS( (State() == EPlaying ), Panic( EBadState));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   493
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   494
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   495
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   496
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   497
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   498
 *  PauseL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   499
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   500
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   501
void CMMFTestUseOldCodecAudioController::PauseL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   502
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   503
	// [ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   504
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   505
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   506
	//[ assert the precondition that we are playing ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   507
	if ( State() != EPlaying)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   508
		User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   509
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   510
	//[ datapath propogates pause to sink & source ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   511
	iDataPath->Pause();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   512
	SetState(EPrimed);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   513
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   514
	//[ assert the post condition we are primed ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   515
	__ASSERT_ALWAYS( (State() == EPrimed ), Panic( EBadState));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   516
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   517
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   518
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   519
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   520
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   521
 *  StopL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   522
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   523
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   524
void CMMFTestUseOldCodecAudioController::StopL(TMMFMessage& aMessage)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   525
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   526
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   527
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   528
	// [ precondition that we are not already stopped 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   529
	// && if we are stopped do nothing.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   530
	//If we are stopping a recording, we need to give the datapath chance to 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   531
	//process that data which has already been captured. We therefore stay in the EPlaying
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   532
	//state, but use iStoppingRecording to indicate that we are stopping.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   533
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   534
	if ((State() != EStopped) && !iStoppingRecording)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   535
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   536
		if((State() == EPlaying) && (iDataSource->DataSourceType()==KUidMmfAudioInput)) //we are recording
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   537
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   538
			// datapath is requested to stop recording but process any alreay captured buffers,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   539
			// the pause method is used for this purpose and as such, the data path must 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   540
			// determine that it is recording to be able to act accordingly.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   541
			// aMessgae is not completed until datapath advises that it has completed.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   542
			iDataPath->Pause();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   543
			iStoppingMessage = CMMFMessageHolder::NewL(aMessage);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   544
			iStoppingRecording = ETrue;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   545
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   546
		else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   547
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   548
			//  datapath propogates stop to sink & source
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   549
			iDataPath->Stop();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   550
			SetState(EStopped);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   551
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   552
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   553
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   554
	//complete message as request is complete.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   555
	if(State() == EStopped && !IsUnderTest())
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   556
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   557
		aMessage.Complete(KErrNone);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   558
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   559
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   560
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   561
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   562
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   563
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   564
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   565
 *  PositionL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   566
 * Preconditions:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   567
 * The Controller is in the state EPrimed
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   568
 * @return TTimeIntervalMicroSeconds
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   569
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   570
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   571
TTimeIntervalMicroSeconds CMMFTestUseOldCodecAudioController::PositionL() const
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   572
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   573
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   574
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   575
	// [ precondition that we are playing or primed ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   576
	if( !((State() == EPrimed) || (State() == EPlaying)))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   577
			User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   578
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   579
    TTimeIntervalMicroSeconds position = iDataPath->Position();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   580
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   581
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   582
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   583
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   584
	return position;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   585
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   586
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   587
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   588
* SetPositionL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   589
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   590
* @param aPosition
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   591
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   592
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   593
void CMMFTestUseOldCodecAudioController::SetPositionL(const TTimeIntervalMicroSeconds& aPosition)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   594
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   595
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   596
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   597
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   598
	// [ precondition that we are not already stopped ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   599
	if (iState == EStopped)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   600
		User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   601
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   602
	//[ precondition that the position is >= 0 && <= Duration ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   603
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   604
		TTimeIntervalMicroSeconds theDuration(0);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   605
		if (iSourceFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   606
			{ //if the source is a clip then the duration always refers to the source - even if the sink is a clip
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   607
			theDuration = iSourceFormat->Duration(iMediaId);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   608
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   609
		else if (iSinkFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   610
			{ //duration of recorded clip
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   611
			theDuration = iSinkFormat->Duration(iMediaId);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   612
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   613
		TTimeIntervalMicroSeconds theStart(0);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   614
		if( ( aPosition < theStart) || ( aPosition > theDuration) )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   615
			//[ invalid position before start and after end]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   616
			User::Leave(KErrArgument); 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   617
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   618
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   619
	//[ set the position on the data path ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   620
	iDataPath->SetPositionL(aPosition);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   621
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   622
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   623
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   624
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   625
    // [ post condition not checked ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   626
	//[ we do not compare the set position with get postion
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   627
    //  because the interface to do so is poor ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   628
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   629
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   630
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   631
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   632
* DurationL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   633
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   634
* @returns TTimeIntervalMicroSeconds 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   635
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   636
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   637
TTimeIntervalMicroSeconds CMMFTestUseOldCodecAudioController::DurationL() const
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   638
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   639
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   640
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   641
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   642
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   643
	// [ assert we have a format that supports duration ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   644
	if( !( iSourceFormat || iSinkFormat ) )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   645
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   646
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   647
	//[ now do the real work of getting the duration ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   648
	// ------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   649
	TTimeIntervalMicroSeconds theDuration(0);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   650
	if (iSourceFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   651
		{ //if the source is a clip then the duration always refers to the source - even if the sink is a clip
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   652
		theDuration = iSourceFormat->Duration(iMediaId);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   653
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   654
	else if (iSinkFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   655
		{ //duration of recorded clip
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   656
		theDuration = iSinkFormat->Duration(iMediaId);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   657
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   658
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   659
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   660
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   661
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   662
	return theDuration; 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   663
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   664
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   665
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   666
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   667
* GetNumberOfMetaDataEntriesL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   668
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   669
* @param "TInt"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   670
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   671
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   672
void CMMFTestUseOldCodecAudioController::GetNumberOfMetaDataEntriesL(TInt& aNumberOfEntries )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   673
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   674
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   675
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   676
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   677
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   678
	//[ precondition that we are in the primed state or stopped ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   679
	if( !((State() == EPrimed) || ( State() == EStopped)))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   680
		User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   681
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   682
    // [ precondition there is a sink format ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   683
	if (!iDataSink)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   684
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   685
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   686
	// [ precondition the sink format is an encode format ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   687
	if ((iDataSink->DataSinkType()!=KUidMmfAudioOutput) &&
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   688
		(iDataSource->DataSourceType()!= KUidMmfAudioInput) )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   689
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   690
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   691
	if (iDataSink->DataSinkType()==KUidMmfAudioOutput)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   692
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   693
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   694
		//[ precondition the format exists ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   695
		if( !iSourceFormat )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   696
			User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   697
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   698
		//[ Get the Number of meta data entries from the sink format ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   699
		iSourceFormat->GetNumberOfMetaDataEntriesL( aNumberOfEntries );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   700
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   701
	else if (iDataSource->DataSourceType()==KUidMmfAudioInput)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   702
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   703
		if( !iSinkFormat )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   704
			User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   705
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   706
		iSinkFormat->GetNumberOfMetaDataEntriesL( aNumberOfEntries );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   707
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   708
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   709
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   710
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   711
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   712
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   713
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   714
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   715
* GetMetaDataEntryL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   716
* @param aIndex
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   717
* @returns "CMMFMetaDataEntry*"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   718
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   719
CMMFMetaDataEntry* CMMFTestUseOldCodecAudioController::GetMetaDataEntryL(TInt aIndex )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   720
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   721
		//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   722
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   723
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   724
	//[ precondition that we are in the primed state or stopped ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   725
	if( !((State() == EPrimed) || ( State() == EStopped)))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   726
		User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   727
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   728
    // [ precondition there is a sink format ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   729
	if (!iDataSink)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   730
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   731
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   732
	iDataSink->DataSinkType();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   733
	iDataSource->DataSourceType();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   734
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   735
	// [ precondition the sink or source is either an audio output or input ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   736
	if ((iDataSink->DataSinkType()!= KUidMmfAudioOutput) &&
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   737
		(iDataSource->DataSourceType()!= KUidMmfAudioInput ))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   738
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   739
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   740
	//[ Get the meta data entry from the sink format ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   741
	CMMFMetaDataEntry*  theEntry = NULL;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   742
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   743
	if (iDataSink->DataSinkType()==KUidMmfAudioOutput)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   744
		{ 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   745
		//[ precondition the format exists ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   746
		if( !iSourceFormat )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   747
			User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   748
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   749
		//[ Get the Number of meta data entries from the sink format ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   750
		theEntry = iSourceFormat->MetaDataEntryL(aIndex);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   751
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   752
	else if (iDataSource->DataSourceType()==KUidMmfAudioInput)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   753
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   754
		//[ precondition the format exits ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   755
		if( !iSinkFormat )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   756
			User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   757
		theEntry = iSinkFormat->MetaDataEntryL(aIndex);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   758
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   759
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   760
	//[ assert the post condition that the entry is not null ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   761
	__ASSERT_ALWAYS( theEntry, Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   762
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   763
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   764
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   765
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   766
	return theEntry;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   767
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   768
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   769
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   770
* RemoveDataSourceL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   771
* @param aDataSource
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   772
* 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   773
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   774
void CMMFTestUseOldCodecAudioController::RemoveDataSourceL(MDataSource& aDataSource )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   775
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   776
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   777
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant) );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   778
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   779
	//[ precondition is that we have a data source ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   780
	if( !iDataSource )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   781
		User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   782
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   783
	//[precondition the data source is the data source we have]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   784
	if( iDataSource != &aDataSource )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   785
		User::Leave(KErrArgument);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   786
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   787
	//[ the controller is in the stopped state ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   788
	if(State() != EStopped)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   789
		User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   790
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   791
	//[ remove the data sink from the controller and delete the format]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   792
     if( iSourceAndSinkAdded )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   793
		 {
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   794
         __ASSERT_ALWAYS( iDataPath, Panic( EBadState )); 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   795
	     //[ Remove references to source and sink ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   796
	     iDataPath->ResetL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   797
		 iSourceAndSinkAdded = EFalse ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   798
		 }
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   799
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   800
	 // [ delete the data sink and format ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   801
	 iDataSource = NULL ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   802
	 delete iSourceFormat;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   803
	 iSourceFormat = NULL;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   804
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   805
	// [ assert postcondition we are stopped ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   806
	__ASSERT_ALWAYS( (State() == EStopped), Panic(EPostConditionViolation) );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   807
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   808
	//[ assert postcondition the SourceAndSinkAdded is false ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   809
	__ASSERT_ALWAYS( !iSourceAndSinkAdded, Panic( EPostConditionViolation ));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   810
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   811
	//[ assert postcondition the data sinkformat  is null ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   812
	__ASSERT_ALWAYS( (iSourceFormat == NULL ), Panic( EPostConditionViolation ));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   813
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   814
	//[ assert postcondition the data sink  is null ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   815
	__ASSERT_ALWAYS( (iDataSource == NULL ), Panic( EPostConditionViolation ));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   816
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   817
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   818
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   819
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   820
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   821
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   822
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   823
* RemoveDataSinkL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   824
* 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   825
* @param aDataSink
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   826
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   827
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   828
void CMMFTestUseOldCodecAudioController::RemoveDataSinkL(MDataSink& aDataSink )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   829
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   830
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   831
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant) );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   832
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   833
	//[ precondition is that we have a data sink ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   834
	if( !iDataSink )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   835
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   836
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   837
	//[precondition the data sink is the data sink we have]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   838
	if( iDataSink != &aDataSink )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   839
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   840
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   841
	//[ the controller is in the stopped state ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   842
	if(State() != EStopped)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   843
		User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   844
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   845
	//[ remove the data sink from the controller and delete the format]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   846
     if( iSourceAndSinkAdded )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   847
		 {
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   848
         __ASSERT_ALWAYS( iDataPath, Panic( EBadState ));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   849
         //[ Remove references to source and sink ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   850
	     iDataPath->ResetL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   851
		 iSourceAndSinkAdded = EFalse ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   852
		 }
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   853
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   854
	 // [ reset data sink referenece and remove the format ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   855
	 iDataSink = NULL ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   856
	 delete iSinkFormat;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   857
	 iSinkFormat = NULL;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   858
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   859
	// [ assert postcondition we are stopped ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   860
	__ASSERT_ALWAYS( (State() == EStopped), Panic(EPostConditionViolation) );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   861
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   862
	//[ assert postcondition the SourceAndSinkAdded is false ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   863
	__ASSERT_ALWAYS( !iSourceAndSinkAdded, Panic( EPostConditionViolation ));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   864
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   865
	//[ assert postcondition the data sinkformat  is null ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   866
	__ASSERT_ALWAYS( (iSinkFormat == NULL ), Panic( EPostConditionViolation ));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   867
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   868
	//[ assert postcondition the data sink  is null ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   869
	__ASSERT_ALWAYS( (iDataSink == NULL ), Panic( EPostConditionViolation ));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   870
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   871
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   872
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   873
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   874
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   875
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   876
 *  CustomCommand
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   877
 *  @param aMessage
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   878
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   879
void CMMFTestUseOldCodecAudioController::CustomCommand(TMMFMessage& aMessage)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   880
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   881
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   882
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   883
	// [ We do not have any custom commands ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   884
	aMessage.Complete(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   885
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   886
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   887
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   888
* NegotiateL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   889
* 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   890
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   891
void CMMFTestUseOldCodecAudioController::NegotiateL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   892
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   893
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   894
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   895
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   896
	//utility function used by custom to negotiate source sink settings after a change
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   897
	if ((iSourceFormat)&&(iSinkFormat)) //convert
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   898
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   899
		iSinkFormat->NegotiateL(*iSourceFormat);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   900
		iSourceFormat->NegotiateSourceL(*iSinkFormat);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   901
		iSinkFormat->NegotiateL(*iSourceFormat);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   902
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   903
		// check for upsampling attempts
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   904
		if (iSinkFormat->SampleRate() > iSourceFormat->SampleRate())
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   905
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   906
			// we don't support upsampling
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   907
			User::Leave( KErrNotSupported );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   908
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   909
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   910
	else if ((iDataSource)&&(iSinkFormat)) //record
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   911
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   912
		// need two step negotiation for record
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   913
		// first try to set the audio input settings to match the required settings for recording
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   914
		iDataSource->NegotiateSourceL(*iSinkFormat);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   915
		// now call negotiateL on the sink in order to tell it what the audio input was set to.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   916
		iSinkFormat->NegotiateL(*iDataSource);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   917
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   918
	else if ((iSourceFormat)&&(iDataSink)) //play
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   919
		iDataSink->NegotiateL(*iSourceFormat);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   920
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   921
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   922
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   923
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   924
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   925
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   926
 *  SetPrioritySettings
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   927
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   928
 *	@param aPrioritySettings
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   929
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   930
void CMMFTestUseOldCodecAudioController::SetPrioritySettings(const TMMFPrioritySettings& aPrioritySettings)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   931
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   932
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   933
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   934
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   935
	//[ assert the precondition ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   936
	if(State() != EStopped)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   937
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   938
		ASSERT(EFalse);		// used to leave here with KErrNotReady
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   939
		return;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   940
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   941
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   942
	//[ update the priority settings of the controller]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   943
	iPrioritySettings = aPrioritySettings;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   944
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   945
	//pass settings on to source and sink
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   946
	if (iDataSource)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   947
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   948
		iDataSource->SetSourcePrioritySettings(iPrioritySettings);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   949
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   950
	if (iDataSink)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   951
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   952
		iDataSink->SetSinkPrioritySettings(iPrioritySettings);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   953
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   954
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   955
    // assert the post condition
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   956
	//__ASSERT_ALWAYS( (iPrioritySettings == aPrioritySettings), Panic( ));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   957
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   958
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   959
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   960
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   961
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   962
 *  SendEventToClient
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   963
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   964
 *	@param aEvent
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   965
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   966
TInt CMMFTestUseOldCodecAudioController::SendEventToClient(const TMMFEvent& aEvent)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   967
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   968
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   969
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   970
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   971
	TMMFEvent controllerEvent;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   972
	//Were going to stop playing, force event type to be the correct type
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   973
	controllerEvent.iEventType = KMMFEventCategoryPlaybackComplete;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   974
	controllerEvent.iErrorCode = aEvent.iErrorCode;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   975
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   976
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   977
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   978
	//If we receive KErrNone from the DataPath, it indicates that it has 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   979
	//successfully completed playing/converting/recording.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   980
	if ((aEvent.iEventType == KMMFEventCategoryPlaybackComplete) && 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   981
		(aEvent.iErrorCode == KErrNone))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   982
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   983
		if(iStoppingRecording)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   984
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   985
			iStoppingRecording = EFalse;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   986
			iDataPath->Stop();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   987
			SetState( EStopped );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   988
			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   989
			//complete the clients stop request
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   990
			iStoppingMessage->Complete(KErrNone);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   991
			delete iStoppingMessage; iStoppingMessage=NULL;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   992
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   993
			//we don't want to send an event to the client
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   994
			return KErrNone;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   995
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   996
		else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   997
			{//datapath has reached end of file so set internal state to primed
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   998
			SetState( EPrimed );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   999
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1000
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1001
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1002
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1003
		if ( State()!= EStopped)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1004
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1005
			//datapath propogates stop to sink & source
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1006
			iDataPath->Stop();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1007
			SetState( EStopped );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1008
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1009
			if(iStoppingRecording)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1010
				{// an error has occurred while we were waiting for recording to stop, 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1011
				 //must complete clients request
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1012
				iStoppingRecording = EFalse;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1013
				iStoppingMessage->Complete(aEvent.iErrorCode);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1014
				delete iStoppingMessage; iStoppingMessage=NULL;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1015
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1016
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1017
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1018
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1019
	//now send event to client...
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1020
	TInt result = DoSendEventToClient(controllerEvent);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1021
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1022
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1023
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1024
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1025
	return result;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1026
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1027
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1028
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1029
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1030
* MapdSetVolumeL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1031
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1032
*  @param aVolume
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1033
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1034
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1035
void CMMFTestUseOldCodecAudioController::MapdSetVolumeL(TInt aVolume)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1036
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1037
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1038
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1039
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1040
	// [  precondition is true for state 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1041
	//    we can set the volume in any state ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1042
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1043
	//[ precondition we have a data sink ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1044
	if (!iDataSink)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1045
		User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1046
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1047
    // [ precondition that the data sink is an audio output ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1048
	// Make sure that iDataSink is an Audio Output
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1049
	if (iDataSink->DataSinkType() != KUidMmfAudioOutput)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1050
				User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1051
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1052
	MMMFAudioOutput* audioOutput = STATIC_CAST(MMMFAudioOutput*, iDataSink);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1053
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1054
	// [ assert the precondition that aVolume is in range ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1055
	TInt maxVolume = audioOutput->SoundDevice().MaxVolume();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1056
	if( ( aVolume < 0 ) || ( aVolume > maxVolume ))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1057
			User::Leave(KErrArgument);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1058
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1059
	//[ set the volume on the device ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1060
	audioOutput->SoundDevice().SetVolume(aVolume);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1061
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1062
	//[ assert the post condition volume is equal to a volume]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1063
	TInt soundVolume = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1064
	soundVolume = audioOutput->SoundDevice().Volume();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1065
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1066
    __ASSERT_ALWAYS( ( soundVolume == aVolume), Panic(EPostConditionViolation));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1067
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1068
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1069
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1070
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1071
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1072
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1073
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1074
* MapdGetMaxVolumeL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1075
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1076
* @param aMaxVolume
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1077
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1078
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1079
void CMMFTestUseOldCodecAudioController::MapdGetMaxVolumeL(TInt& aMaxVolume)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1080
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1081
	// [ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1082
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1083
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1084
	//[ we can get max volume in any state ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1085
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1086
	// [ precondition we must have a data sink ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1087
	if (!iDataSink)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1088
		User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1089
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1090
	//[ precondition the sink must be an audio output]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1091
	// Make sure that iDataSink is an Audio Output
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1092
	if (iDataSink->DataSinkType() != KUidMmfAudioOutput)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1093
			User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1094
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1095
	//[ get the volume from the device ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1096
	MMMFAudioOutput* audioOutput = STATIC_CAST(MMMFAudioOutput*, iDataSink);	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1097
	aMaxVolume = audioOutput->SoundDevice().MaxVolume();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1098
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1099
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1100
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1101
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1102
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1103
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1104
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1105
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1106
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1107
* MapdGetVolumeL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1108
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1109
* @param aVolume
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1110
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1111
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1112
void CMMFTestUseOldCodecAudioController::MapdGetVolumeL(TInt& aVolume)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1113
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1114
	// [ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1115
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1116
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1117
	//[  precondition that we have a data sink ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1118
	if (!iDataSink)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1119
		User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1120
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1121
	//[ precondition iDataSink is an Audio Output ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1122
	if (iDataSink->DataSinkType() != KUidMmfAudioOutput)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1123
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1124
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1125
	// [ get the volume ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1126
	MMMFAudioOutput* audioOutput = STATIC_CAST(MMMFAudioOutput*, iDataSink);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1127
	aVolume = audioOutput->SoundDevice().Volume();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1128
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1129
	// [ assert precondition that the volume is in range
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1130
	//     0.. aMaxVolume ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1131
	TInt aMaxVolume = audioOutput->SoundDevice().MaxVolume();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1132
	__ASSERT_ALWAYS( (aVolume <= aMaxVolume), Panic(EBadState));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1133
	__ASSERT_ALWAYS( (aVolume >= 0), Panic(EBadState));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1134
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1135
	// [ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1136
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1137
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1138
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1139
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1140
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1141
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1142
* MapdSetVolumeRampL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1143
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1144
* @param aRampDuration
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1145
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1146
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1147
void CMMFTestUseOldCodecAudioController::MapdSetVolumeRampL(const TTimeIntervalMicroSeconds& aRampDuration)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1148
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1149
     // [ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1150
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1151
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1152
	//[ precondition that we have a data sink ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1153
	if (!iDataSink)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1154
		User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1155
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1156
	// [ precondition iDataSink is an Audio Output ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1157
	if (iDataSink->DataSinkType() != KUidMmfAudioOutput)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1158
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1159
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1160
	//[ set the volume ramp ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1161
	MMMFAudioOutput* audioOutput = STATIC_CAST(MMMFAudioOutput*, iDataSink);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1162
	audioOutput->SoundDevice().SetVolumeRamp(aRampDuration);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1163
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1164
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1165
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1166
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1167
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1168
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1169
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1170
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1171
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1172
* MapdSetBalanceL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1173
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1174
* @param aBalance
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1175
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1176
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1177
void CMMFTestUseOldCodecAudioController::MapdSetBalanceL(TInt aBalance)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1178
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1179
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1180
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1181
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1182
	// [ precondition is that we have a data sink ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1183
	if (!iDataSink)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1184
		User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1185
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1186
	// [ precondition is that the data sink is an audio output]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1187
	if (iDataSink->DataSinkType() != KUidMmfAudioOutput)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1188
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1189
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1190
	//[ get the audio output ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1191
	MMMFAudioOutput* audioOutput = STATIC_CAST(MMMFAudioOutput*, iDataSink);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1192
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1193
	// [ separate out left and right balance ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1194
	TInt left  = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1195
	TInt right = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1196
	CalculateLeftRightBalance( left, right, aBalance );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1197
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1198
	//[ set the balance ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1199
	audioOutput->SoundDevice().SetPlayBalanceL(left, right); 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1200
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1201
	// [assert the post condition that the balance is set correctly]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1202
	TInt rightBalance = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1203
	TInt leftBalance  = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1204
	audioOutput->SoundDevice().GetPlayBalanceL(leftBalance, rightBalance); 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1205
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1206
	//[ assert post condition holds]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1207
	TBool postCondition = (( rightBalance == right) && ( leftBalance == left));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1208
	__ASSERT_ALWAYS( postCondition, Panic( EPostConditionViolation ) );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1209
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1210
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1211
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1212
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1213
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1214
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1215
* CalculateLeftRightBalance
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1216
* @param aLeft
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1217
* @param aRight
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1218
* @param aBalance
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1219
* Preconditions:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1220
* !(aBalance < KMMFBalanceMaxLeft || aBalance > KMMFBalanceMaxRight)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1221
* y = m x + c
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1222
* aLeft = m ( aBalance ) + c
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1223
* when aBalance = KMMFBalanceMaxLeft   aLeft = 100
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1224
* when aBalance = KMMFBalanceMaxRight  aLeft = 0
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1225
* 100 = m( KMMFBalanceMaxLeft ) + c
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1226
* 0   = m( KMMFBalanceMaxRight ) + c 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1227
* c = -(KMMFBalanceMaxRight) m
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1228
* 100 = m(KMMFBalanceMaxLeft ) - m(KMMFBalanceMaxRight)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1229
* m = 100/(KMMFBalanceMaxLeft - KMMFBalanceMaxRight )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1230
* c = -(KMMFBalanceMaxRight) * 100 /(KMMFBalanceMaxLeft - KMMFBalanceMaxRight )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1231
* aLeft = ( aBalance - KMMFBalanceMaxRight ) * 100 /( KMMFBalanceMaxLeft - KMMFBalanceMaxRight )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1232
* @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1233
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1234
void CMMFTestUseOldCodecAudioController::CalculateLeftRightBalance( TInt& aLeft, TInt& aRight, TInt aBalance ) const
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1235
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1236
	// Check the balance is within limits & modify to min or max values if necessary
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1237
	if (aBalance < KMMFBalanceMaxLeft)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1238
		aBalance = KMMFBalanceMaxLeft;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1239
	if (aBalance > KMMFBalanceMaxRight)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1240
		aBalance = KMMFBalanceMaxRight;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1241
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1242
	// [ assert precondition that aBalance is within limits ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1243
    __ASSERT_ALWAYS( !(aBalance < KMMFBalanceMaxLeft || aBalance > KMMFBalanceMaxRight), Panic(EBadArgument));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1244
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1245
	//[ Now separate percentage balances out from aBalance ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1246
	 aLeft = (100 * (aBalance-KMMFBalanceMaxRight)) / (KMMFBalanceMaxLeft-KMMFBalanceMaxRight);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1247
     aRight = 100 - aLeft;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1248
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1249
	 //[ assert post condition that left and right are within range ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1250
	 __ASSERT_ALWAYS( ( (aLeft <= 100) && (aLeft >= 0) ), Panic(EPostConditionViolation));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1251
	 __ASSERT_ALWAYS( ( (aRight <= 100) && (aRight >= 0) ), Panic(EPostConditionViolation));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1252
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1253
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1254
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1255
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1256
* MapdGetBalanceL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1257
* @param aBalance
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1258
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1259
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1260
void CMMFTestUseOldCodecAudioController::MapdGetBalanceL(TInt& aBalance)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1261
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1262
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1263
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1264
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1265
	//[ precondition that we have a sink]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1266
	if (!iDataSink)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1267
		User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1268
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1269
	// [ iDataSink is an Audio Output ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1270
	if (iDataSink->DataSinkType() != KUidMmfAudioOutput)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1271
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1272
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1273
	// [ get the play balance ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1274
	MMMFAudioOutput* audioOutput = STATIC_CAST(MMMFAudioOutput*, iDataSink);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1275
	TInt left = 50; // arbitrary values 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1276
	TInt right = 50;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1277
	audioOutput->SoundDevice().GetPlayBalanceL(left, right); 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1278
    CalculateBalance( aBalance, left, right );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1279
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1280
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1281
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1282
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1283
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1284
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1285
* CalculateBalance
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1286
* @param aBalance
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1287
* @param aLeft
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1288
* @param aRight
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1289
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1290
* follows a simple straight line transformation
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1291
* y = m x + c
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1292
* m = (KMMFBalanceMaxLeft-KMMFBalanceMaxRight)/ 100 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1293
* c = KMMFBalanceMaxRight
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1294
* by substitution
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1295
* when aLeft = 0
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1296
*   KMMFBalanceMaxRight = m * 0 + c
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1297
*   c = KMMFBalanceMaxRight
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1298
* when aLeft = 100
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1299
* KMMFBalanceMaxLeft = m * 100 + KMMFBalanceMaxRight
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1300
* m = ( KMMFBalanceMaxLeft - KMMFBalanceMaxRight ) /100
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1301
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1302
void CMMFTestUseOldCodecAudioController::CalculateBalance( TInt& aBalance, TInt aLeft, TInt aRight ) const
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1303
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1304
	//[ assert pre conditions ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1305
	__ASSERT_ALWAYS( (( 0 <= aLeft) && ( 100 >= aLeft)), Panic( EBadArgument) );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1306
	__ASSERT_ALWAYS( (( 0 <= aRight) && ( 100 >= aRight)), Panic( EBadArgument) );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1307
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1308
	if ((aLeft > 0) && (aRight > 0))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1309
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1310
		__ASSERT_ALWAYS( (( aLeft + aRight ) == 100 ), Panic( EBadArgument ));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1311
		aBalance = (aLeft * (KMMFBalanceMaxLeft-KMMFBalanceMaxRight))/100 + KMMFBalanceMaxRight;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1312
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1313
	else if ((aLeft == 0) && (aRight == 0))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1314
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1315
		aBalance = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1316
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1317
	else if ((aLeft == 0) && (aRight > 0))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1318
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1319
		aBalance = 100;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1320
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1321
	else if ((aLeft > 0) && (aRight == 0))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1322
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1323
		aBalance = -100;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1324
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1325
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1326
    //[ assert post condition that aBalance is within limits ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1327
	__ASSERT_ALWAYS( !(aBalance < KMMFBalanceMaxLeft || aBalance > KMMFBalanceMaxRight), Panic(EBadArgument));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1328
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1329
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1330
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1331
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1332
* MardSetGainL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1333
* @param aGain
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1334
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1335
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1336
void CMMFTestUseOldCodecAudioController::MardSetGainL(TInt aGain)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1337
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1338
	// [ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1339
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1340
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1341
	//[ precondition we are in the state stopped ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1342
	if(State() != EStopped)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1343
		User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1344
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1345
	// [ assert the precondition that we have a data sink ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1346
	if (!iDataSource)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1347
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1348
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1349
	//[ assert the precondition that the data sink is an audio input ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1350
	if (iDataSource->DataSourceType() != KUidMmfAudioInput)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1351
		User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1352
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1353
	// Set gain of sound device
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1354
	MMMFAudioInput* audioInput = STATIC_CAST(MMMFAudioInput*, iDataSource);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1355
	audioInput->SoundDevice().SetGain(aGain);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1356
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1357
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1358
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1359
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1360
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1361
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1362
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1363
* MardGetMaxGainL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1364
* @param aMaxGain
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1365
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1366
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1367
void CMMFTestUseOldCodecAudioController::MardGetMaxGainL(TInt& aMaxGain)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1368
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1369
	// [ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1370
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1371
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1372
	// [ assert the precondition that we have a source ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1373
	if (!iDataSource)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1374
		User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1375
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1376
	//[ assert the precondition that iDataSink is an Audio Input]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1377
	if (iDataSource->DataSourceType() != KUidMmfAudioInput)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1378
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1379
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1380
	MMMFAudioInput* audioInput = STATIC_CAST(MMMFAudioInput*, iDataSource);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1381
	aMaxGain = audioInput->SoundDevice().MaxGain();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1382
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1383
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1384
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1385
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1386
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1387
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1388
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1389
* MardGetGainL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1390
* @param aGain
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1391
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1392
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1393
void CMMFTestUseOldCodecAudioController::MardGetGainL(TInt& aGain)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1394
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1395
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1396
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1397
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1398
	// [ assert the precondition that we have a sink ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1399
	if (!iDataSource)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1400
		User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1401
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1402
	// [ assert the precondition that we have an audio input sink]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1403
	if (iDataSource->DataSourceType() != KUidMmfAudioInput)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1404
			User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1405
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1406
	MMMFAudioInput* audioInput = STATIC_CAST(MMMFAudioInput*, iDataSource);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1407
	aGain = audioInput->SoundDevice().Gain();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1408
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1409
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1410
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1411
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1412
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1413
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1414
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1415
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1416
 * MardSetBalanceL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1417
 *   @param aBalance
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1418
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1419
void CMMFTestUseOldCodecAudioController::MardSetBalanceL(TInt aBalance)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1420
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1421
	// [ assert the invaraiant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1422
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1423
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1424
	// [ precondition is that we have a data sink ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1425
	if (!iDataSink)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1426
		User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1427
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1428
	// [ precondition is that the balance is in range ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1429
	// Make sure aBalance is in the range -100 <-> 100
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1430
	if (aBalance < KMMFBalanceMaxLeft || aBalance > KMMFBalanceMaxRight)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1431
		User::Leave(KErrArgument);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1432
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1433
	// [ precondition is that the data sink is an audio output]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1434
	if (iDataSource->DataSourceType() != KUidMmfAudioInput)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1435
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1436
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1437
    
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1438
	//[ get the audio output ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1439
	MMMFAudioInput* audioInput = STATIC_CAST(MMMFAudioInput*, iDataSource);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1440
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1441
	// [ separate out left and right balance ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1442
	TInt left  = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1443
	TInt right = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1444
	CalculateLeftRightBalance( left, right, aBalance );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1445
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1446
	//[ set the balance ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1447
	audioInput->SoundDevice().SetRecordBalanceL(left, right); 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1448
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1449
	// [assert the post condition that the balance is set correctly]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1450
	TInt rightBalance = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1451
	TInt leftBalance  = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1452
	audioInput->SoundDevice().GetRecordBalanceL(leftBalance, rightBalance); 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1453
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1454
	//[ assert post condition holds]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1455
	TBool postCondition = (( rightBalance == right) && ( leftBalance == left));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1456
	__ASSERT_ALWAYS( postCondition, Panic( EPostConditionViolation ) );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1457
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1458
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1459
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1460
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1461
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1462
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1463
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1464
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1465
* MardGetBalanceL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1466
* @param aBalance
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1467
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1468
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1469
void CMMFTestUseOldCodecAudioController::MardGetBalanceL(TInt& aBalance)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1470
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1471
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1472
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1473
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1474
	//[ precondition that we have a sink]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1475
	if (!iDataSink)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1476
		User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1477
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1478
	// [ iDataSink is an Audio Output ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1479
	if (iDataSource->DataSourceType() != KUidMmfAudioInput)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1480
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1481
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1482
	// [ get the play balance ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1483
	MMMFAudioInput* audioInput = STATIC_CAST(MMMFAudioInput*, iDataSource);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1484
	TInt left = 50; // arbitrary values 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1485
	TInt right = 50;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1486
	audioInput->SoundDevice().GetRecordBalanceL(left, right); 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1487
    CalculateBalance( aBalance, left, right );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1488
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1489
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1490
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1491
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1492
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1493
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1494
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1495
* MapcSetPlaybackWindowL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1496
* @param aStart
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1497
* @param aEnd
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1498
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1499
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1500
void CMMFTestUseOldCodecAudioController::MapcSetPlaybackWindowL(const TTimeIntervalMicroSeconds& aStart, const TTimeIntervalMicroSeconds& aEnd)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1501
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1502
	iDataPath->SetPlayWindowL(aStart, aEnd);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1503
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1504
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1505
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1506
* MapcDeletePlaybackWindowL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1507
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1508
void CMMFTestUseOldCodecAudioController::MapcDeletePlaybackWindowL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1509
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1510
	iDataPath->ClearPlayWindowL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1511
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1512
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1513
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1514
* MapcGetLoadingProgressL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1515
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1516
void CMMFTestUseOldCodecAudioController::MapcGetLoadingProgressL(TInt& /*aPercentageComplete*/)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1517
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1518
	User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1519
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1520
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1521
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1522
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1523
* MarcGetRecordTimeAvailableL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1524
* @param aTime
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1525
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1526
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1527
void CMMFTestUseOldCodecAudioController::MarcGetRecordTimeAvailableL(TTimeIntervalMicroSeconds& aTime)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1528
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1529
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1530
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1531
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1532
	//[ assert the precondition ( in a friendly way for this api 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1533
	// that we minimally have a data sink ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1534
	if( !iDataSink )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1535
		User::Leave( KErrNotReady );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1536
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1537
	// Use the FormatEncode to get the bytes per second and the sink (clip) to get the bytes available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1538
	// return the calculated value.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1539
	if	((iDataSink->DataSinkType() != KUidMmfFileSink) && (iDataSink->DataSinkType() != KUidMmfDescriptorSink))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1540
		User::Leave(KErrNotSupported) ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1541
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1542
	// [ max file size ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1543
	//[ pre condition is that we have a sink ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1544
   	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1545
	// In order to get the record time available we need to take into consideration
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1546
	// that there may be a max file size ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1547
	TInt64 bytesFree       = STATIC_CAST(CMMFClip*, iDataSink)->BytesFree() ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1548
	TInt64 bytesPerSecond  = TInt64(0);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1549
	//[ set default time available ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1550
	       aTime           = TTimeIntervalMicroSeconds( 0 ) ; // just return zero
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1551
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1552
	if( iSinkFormat )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1553
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1554
		TInt maxFileSize = STATIC_CAST(CMMFFormatEncode*, iSinkFormat)->MaximumClipSize();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1555
		//[ if maxFileSize > 0 we need to limit the bytes free to this value - size ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1556
		if( maxFileSize > 0 )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1557
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1558
			// [ strangely the size of data written is a TInt ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1559
			TInt fileSize = STATIC_CAST(CMMFClip*, iDataSink)->Size();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1560
			bytesFree = maxFileSize - fileSize;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1561
			// [ note it can occur that the fileSize id greater than the MaxFileSize
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1562
			//  due to someone setting the max file size on an existing file ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1563
			if( bytesFree < 0 ) bytesFree = 0;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1564
			__ASSERT_DEBUG( ( bytesFree <= maxFileSize), Panic(	EBadInvariant) );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1565
			}		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1566
		bytesPerSecond = STATIC_CAST(CMMFFormatEncode*, iSinkFormat)->BytesPerSecond() ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1567
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1568
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1569
	//[ now lets perform the calculation of time available ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1570
	if ( bytesPerSecond != TInt64(0) )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1571
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1572
		aTime = TTimeIntervalMicroSeconds( bytesFree * KOneSecondInMicroSeconds / bytesPerSecond ) ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1573
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1574
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1575
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1576
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1577
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1578
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1579
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1580
* MarcSetMaxDurationL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1581
* @param aMaxDuration
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1582
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1583
void CMMFTestUseOldCodecAudioController::MarcSetMaxDurationL(const TTimeIntervalMicroSeconds& )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1584
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1585
	//[ this method is deprecated and no longer supported ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1586
	User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1587
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1588
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1589
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1590
* MarcSetMaxFileSizeL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1591
* @param aFileSize
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1592
* @precondition 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1593
* The argument aFileSize must be greater than -1
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1594
* zero is used as a sentinel value which means that the file
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1595
* can grow without limit
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1596
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1597
void CMMFTestUseOldCodecAudioController::MarcSetMaxFileSizeL(TInt aFileSize )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1598
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1599
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1600
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1601
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1602
	//[ assert the state is not playing since this opens open 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1603
	// nefarious posibilities
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1604
	if(State() == EPlaying )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1605
		User::Leave( KErrNotReady );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1606
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1607
	//[ assert we have a sink format ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1608
	if( !iSinkFormat )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1609
		User::Leave( KErrNotReady );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1610
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1611
	//[ assert file size > -1, as a basic sanity filter
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1612
	// 0 is the sentinel value which allows a file to grow
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1613
	// as needed ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1614
	if( aFileSize < 0 )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1615
		User::Leave( KErrArgument );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1616
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1617
    //[ pre condition is that we have a sink ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1618
    STATIC_CAST(CMMFFormatEncode*, iSinkFormat)->SetMaximumClipSizeL( aFileSize );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1619
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1620
	// [ assert the post condition ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1621
	// [since we have no means of querying the value
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1622
	// we have to assume all went well for now or we left]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1623
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1624
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1625
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1626
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1627
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1628
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1629
* MarcCropL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1630
* @param aToEnd
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1631
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1632
void CMMFTestUseOldCodecAudioController::MarcCropL(TBool aToEnd)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1633
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1634
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1635
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1636
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1637
	//[ precondition there is a sink format]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1638
	if (!iSinkFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1639
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1640
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1641
	iSinkFormat->CropL( PositionL(), aToEnd );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1642
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1643
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1644
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1645
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1646
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1647
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1648
* MarcAddMetaDataEntryL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1649
* @param aNewEntry
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1650
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1651
void CMMFTestUseOldCodecAudioController::MarcAddMetaDataEntryL(const CMMFMetaDataEntry& aNewEntry )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1652
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1653
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1654
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1655
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1656
	//[ precondition the format exists ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1657
	if( !iSinkFormat )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1658
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1659
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1660
	//[ Add the meta data entry ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1661
	iSinkFormat->AddMetaDataEntryL( aNewEntry );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1662
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1663
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1664
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1665
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1666
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1667
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1668
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1669
* MarcRemoveMetaDataEntryL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1670
* @param aIndex
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1671
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1672
void CMMFTestUseOldCodecAudioController::MarcRemoveMetaDataEntryL(TInt aIndex)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1673
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1674
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1675
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1676
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1677
	//[ precondition that we are in the primed state ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1678
	if( State() != EPrimed)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1679
		User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1680
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1681
    //[ precondition the format exists ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1682
	if( !iSinkFormat )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1683
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1684
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1685
	//[ remove the meta data entry ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1686
	iSinkFormat->RemoveMetaDataEntry( aIndex );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1687
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1688
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1689
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1690
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1691
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1692
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1693
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1694
* MarcReplaceMetaDataEntryL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1695
* @param aIndex
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1696
* @param aNewEntry
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1697
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1698
void CMMFTestUseOldCodecAudioController::MarcReplaceMetaDataEntryL(TInt aIndex, const CMMFMetaDataEntry& aNewEntry)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1699
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1700
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1701
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1702
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1703
	//[ precondition that we are in the primed state ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1704
	if( State() != EPrimed)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1705
		User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1706
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1707
   	//[ precondition the format exists ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1708
	if( !iSinkFormat )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1709
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1710
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1711
	//[ replace meta data entry ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1712
	iSinkFormat->ReplaceMetaDataEntryL( aIndex, aNewEntry );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1713
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1714
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1715
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1716
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1717
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1718
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1719
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1720
* MacSetSourceSampleRateL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1721
* @param aSampleRate
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1722
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1723
void CMMFTestUseOldCodecAudioController::MacSetSourceSampleRateL(TUint aSampleRate)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1724
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1725
	// [ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1726
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1727
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1728
	// [ assert the precondition we are stopped ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1729
	if( State() != EStopped )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1730
		User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1731
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1732
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1733
	if (iSourceFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1734
		{//only applicable to formats
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1735
		// don't throw an error if the clip already exists with a different sample rate
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1736
		TInt error = iSourceFormat->SetSampleRate(aSampleRate);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1737
		if (error != KErrNone && error != KErrAlreadyExists)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1738
			User::Leave(error);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1739
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1740
	else if (iDataSource && (iDataSource->DataSourceType()==KUidMmfAudioInput))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1741
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1742
		// cast iDataSource to audio input and set sample rate
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1743
		MMMFAudioInput* ai = STATIC_CAST(MMMFAudioInput*, iDataSource);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1744
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1745
		//note that it is safe to call SoundDevice()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1746
		//as the controller logs onto the iDataSource when it is added
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1747
		TMMFCapabilities devSoundConfig = ai->SoundDevice().Config();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1748
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1749
		ConvertFromSampleRateToDevSoundCapsL(aSampleRate, devSoundConfig);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1750
		ai->SoundDevice().SetConfigL(devSoundConfig);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1751
		//ReNegotiateL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1752
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1753
	else 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1754
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1755
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1756
	// [assert the post condition ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1757
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1758
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1759
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1760
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1761
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1762
* MacSetSourceNumChannelsL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1763
* @param aNumChannels
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1764
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1765
void CMMFTestUseOldCodecAudioController::MacSetSourceNumChannelsL(TUint aNumChannels)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1766
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1767
	// [ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1768
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1769
  
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1770
	// [assert the precondition that we are stopped ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1771
	if( State() != EStopped )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1772
		User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1773
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1774
	if (iSourceFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1775
		{//only applicable to formats
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1776
		// don't throw an error if the clip already exists with a different number of channels
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1777
		TInt error = iSourceFormat->SetNumChannels(aNumChannels);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1778
		if (error != KErrNone && error != KErrAlreadyExists)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1779
			User::Leave(error);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1780
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1781
	else if (iDataSource && (iDataSource->DataSourceType()==KUidMmfAudioInput))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1782
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1783
		// cast iDataSource to audio input and set num channels
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1784
		MMMFAudioInput* ai = STATIC_CAST(MMMFAudioInput*, iDataSource);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1785
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1786
		//note that it is safe to call SoundDevice()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1787
		//as the controller logs onto the iDataSource when it is added
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1788
		TMMFCapabilities devSoundConfig = ai->SoundDevice().Config();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1789
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1790
		ConvertFromNumChannelsToDevSoundCapsL(aNumChannels, devSoundConfig);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1791
		ai->SoundDevice().SetConfigL(devSoundConfig);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1792
		//ReNegotiateL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1793
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1794
	else 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1795
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1796
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1797
	// [ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1798
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant)); 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1799
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1800
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1801
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1802
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1803
* MacSetSourceFormatL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1804
* @param aFormatUid
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1805
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1806
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1807
void CMMFTestUseOldCodecAudioController::MacSetSourceFormatL(TUid aFormatUid)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1808
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1809
     //[ assert the invaraint ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1810
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant)); 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1811
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1812
	// [ precondition that the controller is stopped ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1813
    if( State() != EStopped )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1814
		User::Leave( KErrNotReady );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1815
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1816
	//[ precondition that the data source exists]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1817
	if (!iDataSource)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1818
		User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1819
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1820
	//[ precondition that we need a format ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1821
	if( !SourceFormatRequired( *iDataSource ) )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1822
		User::Leave(KErrNotSupported); //cant set source format if source isn't a clip
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1823
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1824
	//[ if the format exists and the uid of the requested
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1825
	//	format is the same as the existing format then simply 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1826
	// return otherwise create a new format ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1827
	if( !((iSourceFormat) && ( iSourceFormat->ImplementationUid() == aFormatUid)))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1828
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1829
		// [ delete the old format regardless ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1830
		delete iSourceFormat;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1831
		iSourceFormat = NULL;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1832
		iSourceFormat = CMMFFormatDecode::NewL(aFormatUid, iDataSource);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1833
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1834
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1835
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1836
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant)); 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1837
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1838
	//[ assert the post condition that a source format has been constructed ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1839
	__ASSERT_ALWAYS( (iSourceFormat != NULL), Panic( EPostConditionViolation ));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1840
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1841
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1842
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1843
* MacSetSinkSampleRateL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1844
* @param aSampleRate
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1845
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1846
void CMMFTestUseOldCodecAudioController::MacSetSinkSampleRateL(TUint aSampleRate)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1847
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1848
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1849
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1850
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1851
	// [ assert the precondition that we are stopped ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1852
	if (State() != EStopped )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1853
		User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1854
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1855
	if (iSinkFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1856
		{//only applicable to formats
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1857
		// don't throw an error if the clip already exists with a different sample rate
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1858
		TInt error = iSinkFormat->SetSampleRate(aSampleRate);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1859
		if (error != KErrNone && error != KErrAlreadyExists)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1860
			User::Leave(error);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1861
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1862
	else if (iDataSink && (iDataSink->DataSinkType()==KUidMmfAudioOutput))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1863
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1864
		// cast iDataSink to audio output and set sample rate
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1865
		MMMFAudioOutput* ao = STATIC_CAST(MMMFAudioOutput*, iDataSink);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1866
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1867
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1868
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1869
		TMMFCapabilities devSoundConfig = ao->SoundDevice().Config();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1870
		ConvertFromSampleRateToDevSoundCapsL(aSampleRate, devSoundConfig);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1871
		ao->SoundDevice().SetConfigL(devSoundConfig);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1872
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1873
	else 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1874
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1875
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1876
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1877
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1878
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1879
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1880
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1881
* MacSetSinkNumChannelsL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1882
* @param aNumChannels
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1883
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1884
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1885
void CMMFTestUseOldCodecAudioController::MacSetSinkNumChannelsL(TUint aNumChannels)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1886
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1887
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1888
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1889
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1890
	// [ assert the precondition that we are stopped ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1891
	if (State() != EStopped )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1892
		User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1893
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1894
	if (iSinkFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1895
		{//only applicable to formats
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1896
		// don't throw an error if the clip already exists with a different number of channels
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1897
		TInt error = iSinkFormat->SetNumChannels(aNumChannels);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1898
		if (error != KErrNone && error != KErrAlreadyExists)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1899
			User::Leave(error);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1900
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1901
	else if (iDataSink && (iDataSink->DataSinkType()==KUidMmfAudioOutput))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1902
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1903
		// cast iDataSink to audio output and set num channels
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1904
		MMMFAudioOutput* ao = STATIC_CAST(MMMFAudioOutput*, iDataSink);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1905
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1906
		//note that it is safe to call SoundDevice()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1907
		//as the controller logs onto the iDataSource when it is added
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1908
		TMMFCapabilities devSoundConfig = ao->SoundDevice().Config();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1909
		ConvertFromNumChannelsToDevSoundCapsL(aNumChannels, devSoundConfig);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1910
		ao->SoundDevice().SetConfigL(devSoundConfig);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1911
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1912
	else 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1913
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1914
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1915
	// [assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1916
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1917
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1918
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1919
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1920
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1921
* MacSetSinkFormatL 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1922
* @param aFormatUid
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1923
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1924
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1925
void CMMFTestUseOldCodecAudioController::MacSetSinkFormatL(TUid aFormatUid)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1926
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1927
    //[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1928
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1929
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1930
	// [ precondition that the controller is stopped ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1931
    if( State() != EStopped )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1932
		User::Leave( KErrNotReady );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1933
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1934
	//[ precondition that the data sink exists]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1935
	if (!iDataSink)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1936
		User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1937
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1938
	//[ precondition that we need a format ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1939
	if (!SinkFormatRequired( *iDataSink))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1940
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1941
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1942
	//[ if the format exists and the uid of the requested
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1943
	//	format is the same as the existing format then simply 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1944
	// return ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1945
	if( !((iSinkFormat) && ( iSinkFormat->ImplementationUid() == aFormatUid)))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1946
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1947
		// [ delete the old format regardless ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1948
		delete iSinkFormat;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1949
		iSinkFormat = NULL;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1950
		iSinkFormat = CMMFFormatEncode::NewL(aFormatUid, iDataSink);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1951
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1952
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1953
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1954
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1955
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1956
	//[ assert the post condition that a sink format has been constructed ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1957
	__ASSERT_ALWAYS( (iSinkFormat != NULL), Panic( EPostConditionViolation ));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1958
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1959
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1960
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1961
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1962
* MacSetCodecL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1963
* @param aSourceDataType
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1964
* @param aSinkDataType
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1965
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1966
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1967
void CMMFTestUseOldCodecAudioController::MacSetCodecL(TFourCC aSourceDataType, TFourCC aSinkDataType)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1968
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1969
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1970
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1971
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1972
	//[ assert the precondition ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1973
	if(State() != EStopped)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1974
		User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1975
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1976
	//don't set codec directly  -just set source & sink fourCC codes
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1977
	//[  ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1978
	TInt error(KErrNone);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1979
	if ((iSinkFormat)&&(aSinkDataType != KMMFFourCCCodeNULL))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1980
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1981
		error = iSinkFormat->SetSinkDataTypeCode(aSinkDataType,iMediaId);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1982
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1983
	else if((iDataSink) && (aSinkDataType != KMMFFourCCCodeNULL))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1984
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1985
		error = iDataSink->SetSinkDataTypeCode(aSinkDataType,iMediaId);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1986
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1987
	if ((iSourceFormat)&&(!error)&&(aSourceDataType != KMMFFourCCCodeNULL))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1988
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1989
		error = iSourceFormat->SetSourceDataTypeCode(aSourceDataType,iMediaId);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1990
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1991
	else if ((iDataSource) && (aSourceDataType != KMMFFourCCCodeNULL))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1992
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1993
		error = iDataSource->SetSourceDataTypeCode(aSourceDataType,iMediaId);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1994
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1995
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1996
	//[ leave if we are not ready or there was an error ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1997
	User::LeaveIfError(error);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1998
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  1999
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2000
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2001
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2002
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2003
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2004
* MacSetSourceBitRateL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2005
* @param "TUint"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2006
* Sets the source bit rate
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2007
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2008
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2009
void CMMFTestUseOldCodecAudioController::MacSetSourceBitRateL(TUint aBitRate)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2010
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2011
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2012
	__ASSERT_ALWAYS( Invariant(), Panic(EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2013
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2014
	//[ assert the precondition ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2015
	if(State() != EStopped)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2016
		User::Leave(KErrNotReady);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2017
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2018
	//[ pre condition  that we have a source format]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2019
	if (!iSourceFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2020
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2021
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2022
	//only applicable to formats
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2023
	User::LeaveIfError(iSourceFormat->SetBitRate(aBitRate));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2024
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2025
	//[ assert the set bit rate is the bit rate ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2026
	__ASSERT_ALWAYS( (aBitRate == iSourceFormat->BitRate()), Panic( EPostConditionViolation ));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2027
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2028
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2029
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2030
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2031
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2032
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2033
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2034
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2035
* MacSetSourceDataTypeL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2036
* @param "TFourCC"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2037
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2038
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2039
void CMMFTestUseOldCodecAudioController::MacSetSourceDataTypeL(TFourCC aDataType)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2040
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2041
	MacSetCodecL(aDataType, KMMFFourCCCodeNULL);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2042
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2043
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2044
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2045
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2046
* MacSetSinkBitRateL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2047
* @param "TUint"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2048
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2049
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2050
void CMMFTestUseOldCodecAudioController::MacSetSinkBitRateL(TUint aRate)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2051
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2052
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2053
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2054
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2055
    // [ assert we are stopped ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2056
	if( State() != EStopped)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2057
		User::Leave( KErrNotReady );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2058
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2059
	//[ pre condition we have a sink format ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2060
	if (!iSinkFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2061
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2062
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2063
	//only applicable to formats
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2064
	User::LeaveIfError(iSinkFormat->SetBitRate(aRate));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2065
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2066
	//[ assert the set bit rate is the bit rate ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2067
	__ASSERT_ALWAYS( (aRate == iSinkFormat->BitRate()), Panic( EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2068
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2069
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2070
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2071
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2072
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2073
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2074
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2075
* MacSetSinkDataTypeL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2076
* @param "TFourCC"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2077
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2078
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2079
void CMMFTestUseOldCodecAudioController::MacSetSinkDataTypeL(TFourCC aDataType)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2080
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2081
	MacSetCodecL(KMMFFourCCCodeNULL, aDataType);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2082
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2083
	if (iDataSink && (iDataSink->DataSinkType()==KUidMmfAudioOutput))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2084
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2085
		MMMFAudioOutput* ao = STATIC_CAST(MMMFAudioOutput*, iDataSink);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2086
		TMMFCapabilities devSoundConfig = ao->SoundDevice().Config();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2087
		RArray<TFourCC> dataTypes;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2088
		CleanupClosePushL(dataTypes);		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2089
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2090
		//[ set dev sound data type here ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2091
		ConvertFromDataTypeToDevSoundCapsL(aDataType, devSoundConfig);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2092
		ao->SoundDevice().SetConfigL(devSoundConfig);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2093
		CleanupStack::PopAndDestroy();//dataTypes
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2094
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2095
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2096
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2097
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2098
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2099
* MacGetSourceSampleRateL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2100
* @param "TUint"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2101
* 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2102
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2103
void CMMFTestUseOldCodecAudioController::MacGetSourceSampleRateL(TUint& aRate)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2104
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2105
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2106
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2107
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2108
	//[ precondition is that we have a source format ||
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2109
	// we have a data source and its an audio input ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2110
	if( !((iDataSource && (iDataSource->DataSourceType()==KUidMmfAudioInput)) ||
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2111
		( iSourceFormat )))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2112
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2113
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2114
	if (iSourceFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2115
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2116
		aRate = iSourceFormat->SampleRate();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2117
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2118
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2119
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2120
		// cast iDataSource to audio input and query sample rate
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2121
		MMMFAudioInput* ai = STATIC_CAST(MMMFAudioInput*, iDataSource);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2122
		TMMFCapabilities devSoundConfig = ai->SoundDevice().Config();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2123
		RArray<TUint> rates;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2124
		CleanupClosePushL(rates);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2125
		ConvertFromDevSoundCapsToSampleRatesL(devSoundConfig, rates);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2126
		ASSERT(rates.Count()==1);//make sure we've been given the correct config by devsound
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2127
		aRate = rates[0];
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2128
		CleanupStack::PopAndDestroy();//rates
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2129
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2130
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2131
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2132
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2133
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2134
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2135
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2136
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2137
* MacGetSourceBitRateL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2138
* @param "TUint"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2139
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2140
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2141
void CMMFTestUseOldCodecAudioController::MacGetSourceBitRateL(TUint& aRate)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2142
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2143
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2144
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2145
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2146
	// Can only query formats for bit rate - devsound doesn't do bit rates.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2147
	if (!iSourceFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2148
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2149
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2150
	aRate = iSourceFormat->BitRate();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2151
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2152
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2153
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2154
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2155
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2156
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2157
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2158
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2159
* MacGetSourceNumChannelsL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2160
* @param "TUint&"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2161
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2162
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2163
void CMMFTestUseOldCodecAudioController::MacGetSourceNumChannelsL(TUint& aNumChannels)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2164
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2165
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2166
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2167
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2168
	//[ assert the precondition ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2169
	if( !((iSourceFormat) ||
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2170
		(iDataSource && (iDataSource->DataSourceType()==KUidMmfAudioInput))))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2171
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2172
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2173
	if (iSourceFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2174
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2175
		aNumChannels = iSourceFormat->NumChannels();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2176
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2177
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2178
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2179
		// cast iDataSource to audio input and query num channels
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2180
		MMMFAudioInput* ai = STATIC_CAST(MMMFAudioInput*, iDataSource);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2181
		TMMFCapabilities devSoundConfig = ai->SoundDevice().Config();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2182
		RArray<TUint> numChannels;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2183
		CleanupClosePushL(numChannels);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2184
		ConvertFromDevSoundCapsToNumChannelsL(devSoundConfig, numChannels);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2185
		ASSERT(numChannels.Count()==1);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2186
		aNumChannels = numChannels[0];
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2187
		CleanupStack::PopAndDestroy();//numChannels
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2188
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2189
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2190
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2191
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2192
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2193
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2194
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2195
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2196
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2197
* MacGetSourceFormatL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2198
* @param "TUid"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2199
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2200
void CMMFTestUseOldCodecAudioController::MacGetSourceFormatL(TUid& aFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2201
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2202
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2203
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2204
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2205
	//[ precondition we have a format ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2206
	if (!iSourceFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2207
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2208
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2209
	// [ get the source format uid ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2210
	aFormat = iSourceFormat->ImplementationUid();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2211
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2212
	//[ assert the invariant ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2213
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2214
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2215
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2216
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2217
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2218
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2219
* MacGetSourceDataTypeL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2220
* @param "TFourCC&"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2221
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2222
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2223
void CMMFTestUseOldCodecAudioController::MacGetSourceDataTypeL(TFourCC& aDataType)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2224
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2225
	if (iSourceFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2226
		aDataType = iSourceFormat->SourceDataTypeCode(TMediaId(KUidMediaTypeAudio));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2227
	else if (iDataSource && (iDataSource->DataSourceType()==KUidMmfAudioInput))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2228
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2229
		// cast iDataSource to audio input and query num channels
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2230
		MMMFAudioInput* ai = STATIC_CAST(MMMFAudioInput*, iDataSource);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2231
		TMMFCapabilities devSoundConfig = ai->SoundDevice().Config();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2232
		RArray<TFourCC> dataTypes;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2233
		CleanupClosePushL(dataTypes);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2234
		ConvertFromDevSoundCapsToDataTypesL(devSoundConfig, dataTypes);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2235
		ASSERT(dataTypes.Count()==1);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2236
		aDataType = dataTypes[0];
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2237
		CleanupStack::PopAndDestroy();//dataTypes
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2238
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2239
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2240
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2241
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2242
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2243
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2244
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2245
* MacGetSinkSampleRateL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2246
* @param "TUint&"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2247
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2248
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2249
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2250
void CMMFTestUseOldCodecAudioController::MacGetSinkSampleRateL(TUint& aRate)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2251
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2252
	if (iSinkFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2253
		aRate = iSinkFormat->SampleRate();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2254
	else if (iDataSink && (iDataSink->DataSinkType()==KUidMmfAudioOutput))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2255
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2256
		// cast iDataSink to audio output and query sample rate
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2257
		MMMFAudioOutput* ao = STATIC_CAST(MMMFAudioOutput*, iDataSink);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2258
		TMMFCapabilities devSoundConfig = ao->SoundDevice().Config();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2259
		RArray<TUint> rates;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2260
		CleanupClosePushL(rates);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2261
		ConvertFromDevSoundCapsToSampleRatesL(devSoundConfig, rates);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2262
		ASSERT(rates.Count()==1);//make sure we've been given the correct config by devsound
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2263
		aRate = rates[0];
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2264
		CleanupStack::PopAndDestroy();//rates
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2265
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2266
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2267
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2268
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2269
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2270
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2271
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2272
* MacGetSinkBitRateL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2273
* @param "TUint&"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2274
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2275
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2276
void CMMFTestUseOldCodecAudioController::MacGetSinkBitRateL(TUint& aRate)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2277
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2278
	if (iSinkFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2279
		aRate = iSinkFormat->BitRate();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2280
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2281
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2282
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2283
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2284
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2285
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2286
* MacGetSinkNumChannelsL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2287
* @param "TUint&"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2288
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2289
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2290
void CMMFTestUseOldCodecAudioController::MacGetSinkNumChannelsL(TUint& aNumChannels)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2291
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2292
	if (iSinkFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2293
		aNumChannels = iSinkFormat->NumChannels();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2294
	else if (iDataSink && (iDataSink->DataSinkType()==KUidMmfAudioOutput))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2295
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2296
		// cast iDataSink to audio output and query num channels
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2297
		MMMFAudioOutput* ao = STATIC_CAST(MMMFAudioOutput*, iDataSink);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2298
		TMMFCapabilities devSoundConfig = ao->SoundDevice().Config();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2299
		RArray<TUint> numChannels;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2300
		CleanupClosePushL(numChannels);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2301
		ConvertFromDevSoundCapsToNumChannelsL(devSoundConfig, numChannels);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2302
		ASSERT(numChannels.Count()==1);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2303
		aNumChannels = numChannels[0];
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2304
		CleanupStack::PopAndDestroy();//numChannels
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2305
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2306
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2307
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2308
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2309
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2310
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2311
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2312
* MacGetSinkFormatL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2313
* @param "TUid&"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2314
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2315
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2316
void CMMFTestUseOldCodecAudioController::MacGetSinkFormatL(TUid& aFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2317
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2318
	if (iSinkFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2319
		aFormat = iSinkFormat->ImplementationUid();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2320
	else 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2321
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2322
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2323
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2324
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2325
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2326
* MacGetSinkDataTypeL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2327
* @param "TFourCC&"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2328
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2329
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2330
void CMMFTestUseOldCodecAudioController::MacGetSinkDataTypeL(TFourCC& aDataType)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2331
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2332
	if (iSinkFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2333
		aDataType = iSinkFormat->SinkDataTypeCode(TMediaId(KUidMediaTypeAudio));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2334
	else if (iDataSink && (iDataSink->DataSinkType()==KUidMmfAudioOutput))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2335
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2336
		// cast iDataSink to audio output and query data type
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2337
		MMMFAudioOutput* ao = STATIC_CAST(MMMFAudioOutput*, iDataSink);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2338
		TMMFCapabilities devSoundConfig = ao->SoundDevice().Config();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2339
		RArray<TFourCC> dataTypes;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2340
		CleanupClosePushL(dataTypes);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2341
		ConvertFromDevSoundCapsToDataTypesL(devSoundConfig, dataTypes);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2342
		ASSERT(dataTypes.Count()==1);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2343
		aDataType = dataTypes[0];
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2344
		CleanupStack::PopAndDestroy();//dataTypes
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2345
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2346
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2347
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2348
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2349
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2350
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2351
* 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2352
* MacGetSupportedSourceSampleRatesL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2353
* @param "RArray<TUint>&"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2354
* 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2355
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2356
void CMMFTestUseOldCodecAudioController::MacGetSupportedSourceSampleRatesL(RArray<TUint>& aSupportedRates)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2357
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2358
	aSupportedRates.Reset();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2359
	if (iSourceFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2360
		iSourceFormat->GetSupportedSampleRatesL(aSupportedRates);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2361
	else if (iDataSource && (iDataSource->DataSourceType()==KUidMmfAudioInput))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2362
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2363
		// cast iDataSource to audio input and query supported sample rates
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2364
		MMMFAudioInput* ai = STATIC_CAST(MMMFAudioInput*, iDataSource);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2365
		TMMFCapabilities devSoundConfig = ai->SoundDevice().Capabilities();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2366
		ConvertFromDevSoundCapsToSampleRatesL(devSoundConfig, aSupportedRates);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2367
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2368
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2369
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2370
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2371
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2372
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2373
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2374
* MacGetSupportedSourceBitRatesL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2375
* @param "RArray<TUint>&"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2376
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2377
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2378
void CMMFTestUseOldCodecAudioController::MacGetSupportedSourceBitRatesL(RArray<TUint>& aSupportedRates)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2379
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2380
	aSupportedRates.Reset();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2381
	if (iSourceFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2382
		iSourceFormat->GetSupportedBitRatesL(aSupportedRates);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2383
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2384
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2385
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2386
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2387
/***
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2388
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2389
* MacGetSupportedSourceNumChannelsL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2390
* @param "RArray<TUint>&"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2391
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2392
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2393
void CMMFTestUseOldCodecAudioController::MacGetSupportedSourceNumChannelsL(RArray<TUint>& aSupportedChannels)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2394
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2395
	aSupportedChannels.Reset();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2396
	if (iSourceFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2397
		iSourceFormat->GetSupportedNumChannelsL(aSupportedChannels);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2398
	else if (iDataSource && (iDataSource->DataSourceType()==KUidMmfAudioInput))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2399
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2400
		// cast iDataSource to audio input and query supported num channels
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2401
		MMMFAudioInput* ai = STATIC_CAST(MMMFAudioInput*, iDataSource);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2402
		TMMFCapabilities devSoundConfig = ai->SoundDevice().Capabilities();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2403
		ConvertFromDevSoundCapsToNumChannelsL(devSoundConfig, aSupportedChannels);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2404
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2405
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2406
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2407
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2408
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2409
/***
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2410
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2411
* MacGetSupportedSourceDataTypesL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2412
* @param "RArray<TFourCC>&"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2413
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2414
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2415
void CMMFTestUseOldCodecAudioController::MacGetSupportedSourceDataTypesL(RArray<TFourCC>& aSupportedDataTypes)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2416
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2417
	aSupportedDataTypes.Reset();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2418
	if (iSourceFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2419
		iSourceFormat->GetSupportedDataTypesL(TMediaId(KUidMediaTypeAudio), aSupportedDataTypes);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2420
	else if (iDataSource && (iDataSource->DataSourceType()==KUidMmfAudioInput))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2421
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2422
		// cast iDataSource to audio input and query supported data types
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2423
		MMMFAudioInput* ai = STATIC_CAST(MMMFAudioInput*, iDataSource);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2424
		TMMFCapabilities devSoundConfig = ai->SoundDevice().Capabilities();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2425
		ConvertFromDevSoundCapsToDataTypesL(devSoundConfig, aSupportedDataTypes);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2426
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2427
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2428
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2429
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2430
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2431
/***
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2432
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2433
* MacGetSupportedSinkSampleRatesL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2434
* @param "RArray<TUint>& "
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2435
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2436
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2437
void CMMFTestUseOldCodecAudioController::MacGetSupportedSinkSampleRatesL(RArray<TUint>& aSupportedRates)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2438
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2439
	aSupportedRates.Reset();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2440
	if (iSinkFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2441
		iSinkFormat->GetSupportedSampleRatesL(aSupportedRates);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2442
	else if (iDataSink && (iDataSink->DataSinkType()==KUidMmfAudioOutput))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2443
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2444
		// cast iDataSink to audio output and query supported sample rates
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2445
		MMMFAudioOutput* ao = STATIC_CAST(MMMFAudioOutput*, iDataSink);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2446
		TMMFCapabilities devSoundConfig = ao->SoundDevice().Capabilities();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2447
		ConvertFromDevSoundCapsToSampleRatesL(devSoundConfig, aSupportedRates);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2448
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2449
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2450
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2451
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2452
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2453
/***
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2454
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2455
* MacGetSupportedSinkBitRatesL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2456
* @param RArray<TUint>& 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2457
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2458
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2459
void CMMFTestUseOldCodecAudioController::MacGetSupportedSinkBitRatesL(RArray<TUint>& aSupportedRates)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2460
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2461
	if (iSinkFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2462
		iSinkFormat->GetSupportedBitRatesL(aSupportedRates);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2463
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2464
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2465
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2466
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2467
/***
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2468
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2469
* MacGetSupportedSinkNumChannelsL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2470
* @param RArray<TUint>&
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2471
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2472
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2473
void CMMFTestUseOldCodecAudioController::MacGetSupportedSinkNumChannelsL(RArray<TUint>& aSupportedChannels)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2474
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2475
	aSupportedChannels.Reset();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2476
	if (iSinkFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2477
		iSinkFormat->GetSupportedNumChannelsL(aSupportedChannels);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2478
	else if (iDataSink && (iDataSink->DataSinkType()==KUidMmfAudioOutput))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2479
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2480
		// cast iDataSink to audio output and query supported channels
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2481
		MMMFAudioOutput* ao = STATIC_CAST(MMMFAudioOutput*, iDataSink);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2482
		TMMFCapabilities devSoundConfig = ao->SoundDevice().Capabilities();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2483
		ConvertFromDevSoundCapsToNumChannelsL(devSoundConfig, aSupportedChannels);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2484
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2485
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2486
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2487
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2488
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2489
/***
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2490
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2491
* MacGetSupportedSinkDataTypesL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2492
* @param "RArray<TFourCC>&"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2493
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2494
void CMMFTestUseOldCodecAudioController::MacGetSupportedSinkDataTypesL(RArray<TFourCC>& aSupportedDataTypes)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2495
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2496
	aSupportedDataTypes.Reset();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2497
	if (iSinkFormat)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2498
		iSinkFormat->GetSupportedDataTypesL(TMediaId(KUidMediaTypeAudio), aSupportedDataTypes);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2499
	else if (iDataSink && (iDataSink->DataSinkType()==KUidMmfAudioOutput))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2500
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2501
		// cast iDataSink to audio output and query supported data types
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2502
		MMMFAudioOutput* ao = STATIC_CAST(MMMFAudioOutput*, iDataSink);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2503
		TMMFCapabilities devSoundConfig = ao->SoundDevice().Capabilities();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2504
		ConvertFromDevSoundCapsToDataTypesL(devSoundConfig, aSupportedDataTypes);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2505
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2506
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2507
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2508
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2509
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2510
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2511
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2512
* ConvertFromDevSoundCapsToSampleRatesL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2513
* @param "const TMMFCapabilities& "
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2514
* @param "RArray<TUint>&"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2515
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2516
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2517
void CMMFTestUseOldCodecAudioController::ConvertFromDevSoundCapsToSampleRatesL(const TMMFCapabilities& aDevSoundCaps, RArray<TUint>& aSampleRates)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2518
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2519
	if (aDevSoundCaps.iRate & EMMFSampleRate8000Hz)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2520
		User::LeaveIfError(aSampleRates.Append(KSampleRate8000Hz));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2521
	if (aDevSoundCaps.iRate & EMMFSampleRate11025Hz)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2522
		User::LeaveIfError(aSampleRates.Append(KSampleRate11025Hz));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2523
	if (aDevSoundCaps.iRate & EMMFSampleRate16000Hz)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2524
		User::LeaveIfError(aSampleRates.Append(KSampleRate16000Hz));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2525
	if (aDevSoundCaps.iRate & EMMFSampleRate22050Hz)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2526
		User::LeaveIfError(aSampleRates.Append(KSampleRate22050Hz));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2527
	if (aDevSoundCaps.iRate & EMMFSampleRate32000Hz)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2528
		User::LeaveIfError(aSampleRates.Append(KSampleRate32000Hz));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2529
	if (aDevSoundCaps.iRate & EMMFSampleRate44100Hz)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2530
		User::LeaveIfError(aSampleRates.Append(KSampleRate44100Hz));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2531
	if (aDevSoundCaps.iRate & EMMFSampleRate48000Hz)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2532
		User::LeaveIfError(aSampleRates.Append(KSampleRate48000Hz));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2533
	if (aDevSoundCaps.iRate & EMMFSampleRate88200Hz)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2534
		User::LeaveIfError(aSampleRates.Append(KSampleRate88200Hz));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2535
	if (aDevSoundCaps.iRate & EMMFSampleRate96000Hz)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2536
		User::LeaveIfError(aSampleRates.Append(KSampleRate96000Hz));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2537
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2538
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2539
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2540
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2541
* ConvertFromDevSoundCapsToNumChannelsL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2542
* @param "const TMMFCapabilities&"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2543
* @param "RArray<TUint>&"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2544
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2545
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2546
void CMMFTestUseOldCodecAudioController::ConvertFromDevSoundCapsToNumChannelsL(const TMMFCapabilities& aDevSoundCaps, RArray<TUint>& aNumChannels)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2547
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2548
	if (aDevSoundCaps.iChannels & EMMFMono)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2549
		User::LeaveIfError(aNumChannels.Append(KNumChannelsMono));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2550
	if (aDevSoundCaps.iChannels & EMMFStereo)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2551
		User::LeaveIfError(aNumChannels.Append(KNumChannelsStereo));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2552
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2553
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2554
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2555
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2556
* ConvertFromDevSoundCapsToDataTypesL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2557
* @param "const TMMFCapabilities&"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2558
* @param "TMMFCapabilities& aDevSoundCaps, RArray<TFourCC>&"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2559
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2560
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2561
void CMMFTestUseOldCodecAudioController::ConvertFromDevSoundCapsToDataTypesL(const TMMFCapabilities& aDevSoundCaps, RArray<TFourCC>& aDataTypes)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2562
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2563
	if (aDevSoundCaps.iEncoding & EMMFSoundEncoding8BitPCM)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2564
		User::LeaveIfError(aDataTypes.Append(KMMFFourCCCodePCM8));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2565
	if (aDevSoundCaps.iEncoding & EMMFSoundEncoding16BitPCM)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2566
		User::LeaveIfError(aDataTypes.Append(KMMFFourCCCodePCM16));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2567
	if (aDevSoundCaps.iEncoding & EMMFSoundEncoding8BitALaw)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2568
		User::LeaveIfError(aDataTypes.Append(KMMFFourCCCodeALAW));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2569
	if (aDevSoundCaps.iEncoding & EMMFSoundEncoding8BitMuLaw)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2570
		User::LeaveIfError(aDataTypes.Append(KMMFFourCCCodeMuLAW));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2571
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2572
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2573
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2574
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2575
* ConvertFromSampleRateToDevSoundCapsL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2576
* @param "TUint"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2577
* @param "TMMFCapabilities&"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2578
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2579
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2580
void CMMFTestUseOldCodecAudioController::ConvertFromSampleRateToDevSoundCapsL(TUint aSampleRate, TMMFCapabilities& aDevSoundCaps)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2581
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2582
	if (aSampleRate == KSampleRate8000Hz)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2583
		aDevSoundCaps.iRate = EMMFSampleRate8000Hz;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2584
	else if (aSampleRate == KSampleRate11025Hz)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2585
		aDevSoundCaps.iRate = EMMFSampleRate11025Hz;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2586
	else if (aSampleRate == KSampleRate16000Hz)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2587
		aDevSoundCaps.iRate = EMMFSampleRate16000Hz;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2588
	else if (aSampleRate == KSampleRate22050Hz)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2589
		aDevSoundCaps.iRate = EMMFSampleRate22050Hz;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2590
	else if (aSampleRate == KSampleRate32000Hz)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2591
		aDevSoundCaps.iRate = EMMFSampleRate32000Hz;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2592
	else if (aSampleRate == KSampleRate44100Hz)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2593
		aDevSoundCaps.iRate = EMMFSampleRate44100Hz;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2594
	else if (aSampleRate == KSampleRate48000Hz)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2595
		aDevSoundCaps.iRate = EMMFSampleRate48000Hz;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2596
	else if (aSampleRate == KSampleRate88200Hz)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2597
		aDevSoundCaps.iRate = EMMFSampleRate88200Hz;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2598
	else if (aSampleRate == KSampleRate96000Hz)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2599
		aDevSoundCaps.iRate = EMMFSampleRate96000Hz;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2600
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2601
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2602
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2603
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2604
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2605
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2606
* ConvertFromNumChannelsToDevSoundCapsL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2607
* @param "TUint"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2608
* @param  "TMMFCapabilities&"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2609
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2610
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2611
void CMMFTestUseOldCodecAudioController::ConvertFromNumChannelsToDevSoundCapsL(TUint aNumChannels, TMMFCapabilities& aDevSoundCaps)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2612
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2613
	if (aNumChannels == KNumChannelsMono)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2614
		aDevSoundCaps.iChannels = EMMFMono;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2615
	else if (aNumChannels == KNumChannelsStereo)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2616
		aDevSoundCaps.iChannels = EMMFStereo;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2617
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2618
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2619
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2620
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2621
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2622
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2623
* ConvertFromDataTypeToDevSoundCapsL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2624
* @param "TFourCC"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2625
* @param "TMMFCapabilities&"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2626
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2627
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2628
void CMMFTestUseOldCodecAudioController::ConvertFromDataTypeToDevSoundCapsL(TFourCC aDataType, TMMFCapabilities& aDevSoundCaps)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2629
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2630
	if (aDataType == KMMFFourCCCodePCM8)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2631
		aDevSoundCaps.iEncoding = EMMFSoundEncoding8BitPCM;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2632
	else if (aDataType == KMMFFourCCCodePCM16)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2633
		aDevSoundCaps.iEncoding = EMMFSoundEncoding16BitPCM;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2634
	else if (aDataType == KMMFFourCCCodeALAW)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2635
		aDevSoundCaps.iEncoding = EMMFSoundEncoding8BitALaw;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2636
	else if (aDataType == KMMFFourCCCodeMuLAW)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2637
		aDevSoundCaps.iEncoding = EMMFSoundEncoding8BitMuLaw;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2638
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2639
		User::Leave(KErrNotSupported);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2640
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2641
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2642
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2643
* IsValidStateTransition
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2644
* The function validates a state transition from iState to aState
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2645
* and returns ETrue if the transition is allowed.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2646
* @param TControllerState
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2647
* @returns "TBool"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2648
* @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2649
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2650
TBool CMMFTestUseOldCodecAudioController::IsValidStateTransition( TControllerState aState ) const
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2651
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2652
	 TBool result = ETrue ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2653
	//[ assert the precondition that aState is a valid State ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2654
	__ASSERT_ALWAYS( IsValidState(aState), Panic( EBadArgument ) );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2655
	//[ assert the invariant that iState is a valid State ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2656
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant ));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2657
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2658
	// [ check the valid state transitions ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2659
	  // the only invalid transition is
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2660
	  // stopped to playing
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2661
	if( ( iState == EStopped ) && ( aState == EPlaying ))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2662
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2663
         result = EFalse ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2664
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2665
  
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2666
	//[ assert the invariant that iState is a valid State ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2667
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant ));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2668
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2669
	return result ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2670
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2671
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2672
/*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2673
* Invariant
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2674
* @returns "TBool"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2675
* This function returns whether the invariant is valid
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2676
* @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2677
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2678
TBool  CMMFTestUseOldCodecAudioController::Invariant() const
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2679
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2680
	//[ The invariant is for now defined 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2681
	// as simply being in the correct state and
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2682
	// having iDataPath defined ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2683
	return ( iDataPath )&& IsValidState( iState);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2684
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2685
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2686
/*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2687
* SetState
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2688
*  This function sets the state of the controller.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2689
* @returns "TBool"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2690
* @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2691
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2692
TBool CMMFTestUseOldCodecAudioController::SetState(TControllerState aState)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2693
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2694
	TBool result = ETrue;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2695
	//[ assert the precondition that the state is a valid state ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2696
   	__ASSERT_ALWAYS( IsValidState( aState),  Panic( EBadArgument ) );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2697
	//[ assert the invariant the current state is valid ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2698
	__ASSERT_ALWAYS( Invariant(),  Panic( EBadInvariant ) );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2699
    //[ only allow valid state transitions ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2700
	if( IsValidStateTransition( aState ) )	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2701
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2702
		//[ valid state transition set the state]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2703
		iState = aState ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2704
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2705
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2706
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2707
		//[ invalid state transition return EFalse ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2708
		result = EFalse;         
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2709
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2710
	// [ assert the invariant on the state ]
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2711
	__ASSERT_ALWAYS( Invariant(), Panic( EBadState ));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2712
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2713
	return result ;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2714
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2715
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2716
/*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2717
* IsValidState 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2718
* checks whether a state is a valid 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2719
* @returns "TBool"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2720
* @param TControllerState
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2721
* @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2722
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2723
TBool  CMMFTestUseOldCodecAudioController::IsValidState( TControllerState aState ) const 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2724
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2725
	TBool result = EFalse;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2726
     if(( aState >= EStopped ) && ( aState <= EPlaying ))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2727
		 {
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2728
          result = ETrue;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2729
		 }
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2730
	 return result;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2731
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2732
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2733
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2734
* State
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2735
* The function State returns the current state of the audio controller
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2736
* @returns "TControllerState"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2737
* @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2738
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2739
CMMFTestUseOldCodecAudioController::TControllerState CMMFTestUseOldCodecAudioController::State() const
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2740
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2741
	__ASSERT_ALWAYS( Invariant(), Panic( EBadInvariant ) );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2742
	return iState;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2743
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2744
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2745
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2746
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2747
* SinkFormatRequired
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2748
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2749
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2750
TBool CMMFTestUseOldCodecAudioController::SinkFormatRequired( MDataSink& aDataSink ) const
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2751
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2752
     return (aDataSink.DataSinkType()==KUidMmfFileSink || 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2753
		     aDataSink.DataSinkType()==KUidMmfDescriptorSink);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2754
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2755
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2756
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2757
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2758
* SourceFormatRequired
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2759
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2760
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2761
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2762
TBool CMMFTestUseOldCodecAudioController::SourceFormatRequired(MDataSource& aDataSource) const
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2763
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2764
	return (aDataSource.DataSourceType()==KUidMmfFileSource || 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2765
		    aDataSource.DataSourceType()==KUidMmfDescriptorSource);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2766
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2767
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2768
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2769
* DevSoundInitialised
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2770
* Used in certain configurations to resume completion of PrimeL() when it is pending DevSound initialisation.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2771
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2772
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2773
void CMMFTestUseOldCodecAudioController::DevSoundInitialised(TInt /*aError*/)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2774
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2775
	iWaitForAsyncService->AsyncStop();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2776
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2777
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2778
CMMFTestUseOldCodecAudioController::TDevSoundEventHandler::TDevSoundEventHandler()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2779
: iInterceptedDevSoundObserver(NULL), iEventObserver(NULL)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2780
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2781
	}	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2782
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2783
void CMMFTestUseOldCodecAudioController::TDevSoundEventHandler::SetInterceptedDevSoundObserver(MDevSoundObserver* aObserver)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2784
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2785
	iInterceptedDevSoundObserver = aObserver;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2786
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2787
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2788
void CMMFTestUseOldCodecAudioController::TDevSoundEventHandler::SetEventObserver(CMMFTestUseOldCodecAudioController* aObserver)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2789
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2790
	iEventObserver = aObserver;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2791
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2792
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2793
void CMMFTestUseOldCodecAudioController::TDevSoundEventHandler::InitializeComplete(TInt aError)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2794
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2795
	iInterceptedDevSoundObserver->InitializeComplete(aError);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2796
	iEventObserver->DevSoundInitialised(aError);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2797
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2798
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2799
void CMMFTestUseOldCodecAudioController::TDevSoundEventHandler::ToneFinished(TInt aError)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2800
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2801
	iInterceptedDevSoundObserver->ToneFinished(aError);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2802
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2803
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2804
void CMMFTestUseOldCodecAudioController::TDevSoundEventHandler::BufferToBeFilled(CMMFBuffer* aBuffer)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2805
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2806
	iInterceptedDevSoundObserver->BufferToBeFilled(aBuffer);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2807
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2808
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2809
void CMMFTestUseOldCodecAudioController::TDevSoundEventHandler::PlayError(TInt aError)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2810
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2811
	iInterceptedDevSoundObserver->PlayError(aError);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2812
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2813
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2814
void CMMFTestUseOldCodecAudioController::TDevSoundEventHandler::BufferToBeEmptied(CMMFBuffer* aBuffer)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2815
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2816
	iInterceptedDevSoundObserver->BufferToBeEmptied(aBuffer);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2817
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2818
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2819
void CMMFTestUseOldCodecAudioController::TDevSoundEventHandler::RecordError(TInt aError)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2820
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2821
	iInterceptedDevSoundObserver->RecordError(aError);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2822
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2823
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2824
void CMMFTestUseOldCodecAudioController::TDevSoundEventHandler::ConvertError(TInt aError)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2825
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2826
	iInterceptedDevSoundObserver->ConvertError(aError);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2827
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2828
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2829
void CMMFTestUseOldCodecAudioController::TDevSoundEventHandler::DeviceMessage(TUid aMessageType, const TDesC8& aMsg)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2830
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2831
	iInterceptedDevSoundObserver->DeviceMessage(aMessageType, aMsg);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2832
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2833
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
  2834