mmlibs/mmfw/tsrc/mmfunittest/MidiClnt/TestMidiClientMultiSharedHeap.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) 2006-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 "TestMidiClientSharedHeap.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    18
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    19
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    20
const TInt KMaxPlayers = 24; // easily enough to overflow the chunk if there were one
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    21
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    22
const TInt KNoSharedPlayer = 2;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    23
// which of the created players should be given its own heap on mixed style tests
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    24
// This must always be true: KNoSharedPlayer < KMaxPlayers
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    25
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    26
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    27
const TInt KRepeatAmount = 16;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    28
// how often CTestStepPlayerSharedHeapRepeatMultiFilePlayer should create and delete players
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    29
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    30
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    31
CTestMidiClntMultiSharedHeap::CTestMidiClntMultiSharedHeap(const TDesC& aTestName,const TDesC& aSectName,const TDesC& aKeyName, TBool aMixHeapStyle )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    32
	: CTestMmfMidiClntStep(aTestName, ETestValid)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    33
	, iMixHeapStyle( aMixHeapStyle )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    34
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    35
	iSectName = aSectName;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    36
	iKeyName = aKeyName;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    37
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    38
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    39
CTestMidiClntMultiSharedHeap* CTestMidiClntMultiSharedHeap::NewL(const TDesC& aTestName,const TDesC& aSectName,const TDesC& aKeyName, TBool aMixHeapStyle )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    40
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    41
	CTestMidiClntMultiSharedHeap* self = new(ELeave) CTestMidiClntMultiSharedHeap(aTestName, aSectName, aKeyName, aMixHeapStyle );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    42
	return self;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    43
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    44
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    45
TVerdict CTestMidiClntMultiSharedHeap::DoTestStepL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    46
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    47
	TPtrC filename;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    48
	if(!GetStringFromConfig(iSectName,iKeyName,filename))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    49
		return EInconclusive;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    50
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    51
	INFO_PRINTF2(_L("Check we can create lots of clients - creating %d clients"), KMaxPlayers );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    52
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    53
	// create lots of players
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    54
	RPointerArray<CMidiClientUtility> players;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    55
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    56
	TVerdict ret = EPass;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    57
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    58
	__MM_HEAP_MARK;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    59
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    60
	for( TInt i = 0; i < KMaxPlayers; ++i )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    61
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    62
		CMidiClientUtility* player = NULL;	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    63
		// create player with shared heap
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    64
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    65
		TBool useSharedHeap = ETrue;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    66
		if( i == KNoSharedPlayer && iMixHeapStyle )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    67
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    68
			INFO_PRINTF2(_L("MIDI client on iteration %d has own heap."), i );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    69
			useSharedHeap = EFalse;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    70
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    71
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    72
		TRAPD( err, player = CMidiClientUtility::NewL(*this, EMdaPriorityNormal, EMdaPriorityPreferenceTimeAndQuality, useSharedHeap ) );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    73
		if( err )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    74
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    75
			if( err == KErrNoMemory )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    76
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    77
				INFO_PRINTF2(_L("Could not create player #%d due to lack of memory."), i );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    78
				ret = EFail;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    79
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    80
			else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    81
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    82
				INFO_PRINTF3(_L("Error %d. Could not create player #%d."), err, i );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    83
				ret = EFail;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    84
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    85
			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    86
			delete player;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    87
			player = NULL;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    88
			break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    89
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    90
		else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    91
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    92
			if( players.Append( player ) )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    93
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    94
				// could not add to array
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    95
				delete player;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    96
				player = NULL;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    97
				ret = EInconclusive;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    98
				break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    99
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   100
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   101
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   102
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   103
	if( (ret == EPass) && (players.Count() > 0) ) // no errors so far
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   104
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   105
		// do fake play
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   106
		TMMFMessageDestinationPckg dummyPckg;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   107
		TInt dummyFunc = 0; //EDevMidiOff;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   108
		TBuf8<8> dummyBuff;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   109
		(players[0])->CustomCommandSyncL(dummyPckg, dummyFunc, dummyBuff, dummyBuff, dummyBuff);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   110
		(players[0])->OpenFile(filename);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   111
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   112
		// Wait for initialisation callback
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   113
		INFO_PRINTF1(_L("CMidiClientUtility: Opening file"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   114
		CActiveScheduler::Start();	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   115
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   116
		(players[0])->Play();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   117
		// wait for playback callback
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   118
		CActiveScheduler::Start();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   119
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   120
		if( iError )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   121
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   122
			// something went wrong
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   123
			INFO_PRINTF2(_L("Error %d during playback."), iError );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   124
			ret = EFail;	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   125
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   126
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   127
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   128
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   129
	// cleanup
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   130
	for( TInt i = 0; i < players.Count(); ++i )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   131
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   132
		delete players[i];
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   133
		players[i] = NULL;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   134
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   135
	players.Close();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   136
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   137
	__MM_HEAP_MARKEND;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   138
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   139
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   140
	return	ret;
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
// =======================================================================
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   145
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   146
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   147
CTestMidiClntRepeatMultiSharedHeap::CTestMidiClntRepeatMultiSharedHeap(const TDesC& aTestName,const TDesC& aSectName,const TDesC& aKeyName, TBool aMixHeapStyle )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   148
	: CTestMmfMidiClntStep(aTestName, ETestValid)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   149
	, iMixHeapStyle( aMixHeapStyle )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   150
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   151
	iSectName = aSectName;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   152
	iKeyName = aKeyName;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   153
	iHeapSize = 512 * 1024; // 512k rather than the usual 64k to avoid KErrNoMemory
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   154
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   155
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   156
CTestMidiClntRepeatMultiSharedHeap* CTestMidiClntRepeatMultiSharedHeap::NewL(const TDesC& aTestName,const TDesC& aSectName,const TDesC& aKeyName, TBool aMixHeapStyle )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   157
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   158
	CTestMidiClntRepeatMultiSharedHeap* self = new(ELeave) CTestMidiClntRepeatMultiSharedHeap(aTestName, aSectName, aKeyName, aMixHeapStyle );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   159
	return self;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   160
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   161
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   162
TVerdict CTestMidiClntRepeatMultiSharedHeap::DoTestStepL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   163
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   164
	TPtrC filename;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   165
	if(!GetStringFromConfig(iSectName,iKeyName,filename))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   166
		return EInconclusive;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   167
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   168
	INFO_PRINTF3(_L("Create and delete %d players %d times"), KMaxPlayers, KRepeatAmount );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   169
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   170
	TVerdict ret = EPass;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   171
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   172
	__MM_HEAP_MARK;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   173
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   174
	for( TInt j = 0; j < KRepeatAmount; ++j )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   175
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   176
		INFO_PRINTF2(_L("** Starting outter iteration %d."), j );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   177
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   178
		// create lots of players
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   179
		RPointerArray<CMidiClientUtility> players;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   180
		
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   181
		for( TInt i = 0; i < KMaxPlayers; ++i )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   182
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   183
			CMidiClientUtility* player = NULL;	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   184
			// create player with shared heap
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   185
			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   186
			TBool useSharedHeap = ETrue;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   187
			if( (i == KNoSharedPlayer) && iMixHeapStyle )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   188
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   189
				INFO_PRINTF2(_L("MIDI client on iteration %d has own heap."), i );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   190
				useSharedHeap = EFalse;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   191
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   192
			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   193
			TRAPD( err, player = CMidiClientUtility::NewL(*this, EMdaPriorityNormal, EMdaPriorityPreferenceTimeAndQuality, useSharedHeap ) );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   194
			if( err )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   195
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   196
				if( err == KErrNoMemory )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   197
					{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   198
					INFO_PRINTF2(_L("Could not create player #%d due to lack of memory."), i );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   199
					ret = EFail;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   200
					}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   201
				else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   202
					{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   203
					INFO_PRINTF3(_L("Error %d. Could not create player #%d."), err, i );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   204
					ret = EFail;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   205
					}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   206
				
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   207
				delete player;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   208
				player = NULL;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   209
				break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   210
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   211
			else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   212
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   213
				if( players.Append( player ) )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   214
					{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   215
					// could not add to array
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   216
					delete player;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   217
					player = NULL;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   218
					ret = EInconclusive;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   219
					break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   220
					}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   221
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   222
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   223
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   224
		if( (ret == EPass) && (players.Count() > 0) ) // no errors so far
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   225
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   226
			// do fake play
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   227
			TMMFMessageDestinationPckg dummyPckg;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   228
			TInt dummyFunc = 0; //EDevMidiOff;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   229
			TBuf8<8> dummyBuff;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   230
			(players[0])->CustomCommandSyncL(dummyPckg, dummyFunc, dummyBuff, dummyBuff, dummyBuff);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   231
			(players[0])->OpenFile(filename);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   232
			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   233
			// Wait for initialisation callback
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   234
			INFO_PRINTF1(_L("CMidiClientUtility: Opening file"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   235
			CActiveScheduler::Start();	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   236
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   237
			(players[0])->Play();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   238
			// wait for playback callback
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   239
			CActiveScheduler::Start();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   240
			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   241
			if( iError )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   242
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   243
				// something went wrong
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   244
				INFO_PRINTF2(_L("Error %d during playback."), iError );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   245
				ret = EFail;	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   246
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   247
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   248
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   249
		// cleanup
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   250
		for( TInt i = 0; i < players.Count(); ++i )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   251
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   252
			delete players[i];
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   253
			players[i] = NULL;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   254
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   255
		players.Close();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   256
			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   257
		if( ret != EPass )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   258
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   259
			INFO_PRINTF2(_L("Outter iteration %d failed. Stopping."), j);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   260
			break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   261
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   262
			
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   263
		}// end outter loop
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   264
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   265
	__MM_HEAP_MARKEND;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   266
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   267
	return	ret;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   268
	}