devsound/devsoundrefplugin/tsrc/SwCodecDevices/TSU_MMF_CodecTests.cpp
author hgs
Wed, 13 Oct 2010 12:08:48 +0100
changeset 3 28bdc4aca325
parent 0 79dd3e2336a0
permissions -rw-r--r--
2010wk42_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     1
// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     2
// All rights reserved.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     7
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     8
// Initial Contributors:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    10
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    11
// Contributors:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    12
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    13
// Description:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    14
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    15
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    16
// EPOC includes
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    17
#include <e32base.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    18
#include <e32math.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    19
#include <f32file.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    20
#include <s32file.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    21
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    22
// Test system includes
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    23
#include "tsu_mmf_CodecTests.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    24
#include "TSU_MMF_DeviceSuite.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    25
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    26
//[codec includes ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    27
#include <mmf/plugin/mmfhwdeviceimplementationuids.hrh>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    28
#include "MmfPcm16toAlawhwDevice.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    29
#include "MmfALawToPcm16HwDevice.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    30
#include "mmfpcm16toMulawhwdevice.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    31
#include "MmfMuLawToPcm16hwDevice.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    32
#include "mmfpcmS8ToPcmS16HwDevice.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    33
#include "mmfpcmS16PcmS8HwDevice.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    34
#include "mmfpcm16topcmU16BEHwDevice.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    35
#include "mmfpcm16SwapEndianhwdevice.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    36
#include "mmfpcm16ToImaAdpcm.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    37
#include "MmfImaAdpcmtopcm16hwdevice.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    38
#include "MMFpcm16ToPcm16HwDevice.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    39
#include "MMFpcm16ToPcmU8HwDevice.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    40
#include "MMFpcmU8ToPcm16HwDevice.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    41
#include "mmfpcmS16PcmS8HwDevice.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    42
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    43
const TInt KFmtChunkSize = 16;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    44
const TInt KAuMagic = 0x2e736e64;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    45
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    46
//[ Codec Unit tests  structure 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    47
// The unit tests shall use text files
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    48
// for small portions of test data 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    49
// which should be stored are stored in a simple format
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    50
// containing the relevant parameters for the test
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    51
//]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    52
class TCodecUnitTestParams
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    53
	{	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    54
public:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    55
	const TText* iTestName;       // name of the test
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    56
	const TText* iInputFilename;  // input wav file
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    57
	const TText* iComparisonFileName;  // output wav file
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    58
	TInt		 iExpectedResult; // expected result
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    59
	};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    60
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    61
// constant table of parameters for tests
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    62
const TCodecUnitTestParams KTestParameters[] =
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    63
{	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    64
	{ 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    65
	_S("MM-MMF-SWCODECDEVICES-U-0010-HP"),   
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    66
	_S("Pcm16Mono8khz400hzTone.wav"),
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    67
	_S("Pcm16BMono8Khz400hzTone.Au"),
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    68
	KErrNone 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    69
	},
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    70
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    71
	{ 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    72
	_S("MM-MMF-SWCODECDEVICES-U-0011-HP"),   
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    73
	_S("Pcm16Mono8khz400hzTone.wav"),
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    74
	_S("Imaad4BitMono8Khz400hzTone.wav"),
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    75
	KErrNone 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    76
	},
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    77
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    78
	{ 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    79
	_S("MM-MMF-SWCODECDEVICES-U-0012-HP"),   
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    80
	_S("Imaad4BitMono8Khz400hzTone.wav"),
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    81
	_S("Pcm16Mono8khz400hzTone.wav"),
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    82
	KErrNone 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    83
	},
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    84
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    85
	{ 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    86
	_S("MM-MMF-SWCODECDEVICES-U-0014-HP"),
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    87
	_S("Pcm16Mono8khz400hzTone.wav"),
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    88
	_S("PcmU8Mono8khz400hzTone.wav"),
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    89
	KErrNone 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    90
	},
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    91
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    92
	{ 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    93
	_S("MM-MMF-SWCODECDEVICES-U-0015-HP"),
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    94
	_S("PcmU8Mono8khz400hzTone.wav"),
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    95
	_S("Pcm16Mono8khz400hzTone.wav"),
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    96
	KErrNone 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    97
	},
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    98
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    99
	{ 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   100
	_S("MM-MMF-SWCODECDEVICES-U-0016-HP"),
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   101
	_S("Pcm16Stereo8khz400hzTone.wav"),
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   102
	_S("PcmU8Stereo8khz400hzTone.wav"),
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   103
	KErrNone 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   104
	},
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   105
};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   106
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   107
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   108
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   109
* Print8BitResults
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   110
* @param aRefCodedData
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   111
* @param aCodedData
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   112
* @param aDataLength
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   113
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   114
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   115
template <class T, class Comparator, TInt A, TInt B, TInt C>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   116
void CTestStepCodecUnitTest<T,Comparator, A, B, C>::Print8BitResults( TUint8* aRefCodedData, TUint8* aCodedData, TInt aDataLength )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   117
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   118
     __ASSERT_DEBUG(aRefCodedData,Panic(EBadArgument));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   119
	 __ASSERT_DEBUG(aCodedData,Panic(EBadArgument));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   120
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   121
	for( TInt i = 0; i < aDataLength; i++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   122
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   123
        INFO_PRINTF6( _L("delta %u p1 %u p2 %u p1 %x p2 %x"), (*aRefCodedData-*aCodedData),*aRefCodedData, *aCodedData, *aRefCodedData, *aCodedData );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   124
		aRefCodedData++;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   125
		aCodedData++;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   126
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   127
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   128
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   129
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   130
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   131
* Print16BitResults
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   132
* @param aRefCodedData
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   133
* @param aCodedData
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   134
* @param aDataLength
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   135
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   136
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   137
template <class T, class Comparator, TInt A, TInt B, TInt C>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   138
void CTestStepCodecUnitTest<T,Comparator, A, B, C>::Print16BitResults( TUint8* aRefCodedData, TUint8* aCodedData, TInt aDataLength )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   139
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   140
	//[precondition pointers are aok]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   141
     __ASSERT_DEBUG(aRefCodedData,Panic(EBadArgument));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   142
	 __ASSERT_DEBUG(aCodedData,Panic(EBadArgument));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   143
	 //[precondition data is of even length ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   144
	 __ASSERT_DEBUG( (aDataLength % 2 == 0),Panic(EBadArgument));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   145
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   146
	TInt length = aDataLength /2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   147
	TInt16 refCodedValue = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   148
	TInt16 codedValue = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   149
	for( TInt i = 0; i < length; i++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   150
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   151
		refCodedValue  = static_cast<TInt16>( aRefCodedData[0] );  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   152
		refCodedValue |=  static_cast<TInt16>((aRefCodedData[1] << 8 ));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   153
		codedValue  = static_cast<TInt16>( aCodedData[0] &KAndMask8bit);  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   154
		codedValue |=  static_cast<TInt16>((aCodedData[1] << 8 ));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   155
        INFO_PRINTF6( _L("delta %d p1 %d p2 %d p1 %x p2 %x"), (refCodedValue-codedValue),refCodedValue, codedValue, refCodedValue, codedValue );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   156
		aRefCodedData+=2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   157
		aCodedData+=2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   158
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   159
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   160
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   161
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   162
* CTestStepCodecUnitTest
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   163
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   164
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   165
template <class T, class Comparator, TInt A, TInt B, TInt C>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   166
CTestStepCodecUnitTest<T,Comparator, A, B, C>::CTestStepCodecUnitTest( TUint aTestIndex )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   167
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   168
	//[precondition valid index ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   169
//	__ASSERT_DEBUG( (aTestIndex >= 0),Panic(EBadArgument));	// EABI warning removal
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   170
	__ASSERT_DEBUG( (aTestIndex < (sizeof(KTestParameters)/sizeof(TCodecUnitTestParams))),Panic(EBadArgument));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   171
	// store a pointer to the test parameters
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   172
	iTestParameters = &(KTestParameters[aTestIndex]);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   173
	// store the name of this test case
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   174
	// this is the name that is used by the script file
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   175
	iTestStepName = iTestParameters->iTestName;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   176
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   177
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   178
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   179
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   180
* ~CTestStepCodecUnitTest
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   181
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   182
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   183
template <class T, class Comparator, TInt A, TInt B, TInt C>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   184
CTestStepCodecUnitTest<T,Comparator, A, B, C>::~CTestStepCodecUnitTest()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   185
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   186
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   187
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   188
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   189
* DoTestStepL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   190
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   191
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   192
template <class T, class Comparator, TInt A, TInt B, TInt C>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   193
TVerdict CTestStepCodecUnitTest<T,Comparator, A, B, C>::DoTestStepL()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   194
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   195
	__MM_HEAP_MARK;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   196
	TVerdict result = EPass;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   197
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   198
	// code and decode the input file
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   199
    TInt numBuffersToProcess = ComputeBuffersToProcess();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   200
	TInt codedBufferSize = numBuffersToProcess*iCodecUnderTest->SinkBufferSize();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   201
	iCodedData = CMMFDescriptorBuffer::NewL( codedBufferSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   202
	// Compare the results and return test status
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   203
	TUint8* ptrSrc  = CONST_CAST(TUint8*,iSourceData->Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   204
	TUint8* ptrDest = CONST_CAST(TUint8*,iCodedData->Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   205
    CMMFDataBuffer* srcBuffer = CMMFDescriptorBuffer::NewL(iCodecUnderTest->SourceBufferSize());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   206
	CleanupStack::PushL(srcBuffer);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   207
	CMMFDataBuffer* destBuffer = CMMFDescriptorBuffer::NewL(iCodecUnderTest->SinkBufferSize());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   208
	TUint8* pInBuffer  = CONST_CAST(TUint8*,srcBuffer->Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   209
    TUint8* pOutBuffer = CONST_CAST(TUint8*,destBuffer->Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   210
	CleanupStack::PushL(destBuffer);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   211
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   212
	for( TInt i = 0; i < numBuffersToProcess;  i++)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   213
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   214
         //[ copy data & increment input pointer]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   215
		Mem::Copy( pInBuffer, ptrSrc, iCodecUnderTest->SourceBufferSize() );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   216
		srcBuffer->Data().SetLength( iCodecUnderTest->SourceBufferSize() );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   217
		ptrSrc+= iCodecUnderTest->SourceBufferSize();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   218
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   219
		 //[ code the data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   220
		iCodecUnderTest->ProcessL( *srcBuffer, *destBuffer);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   221
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   222
		 //[ copy out the data & increment pointer ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   223
		Mem::Copy( ptrDest, pOutBuffer, iCodecUnderTest->SinkBufferSize() );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   224
        iCodedData->Data().SetLength( (i+1)*iCodecUnderTest->SinkBufferSize() );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   225
		destBuffer->Data().SetLength(0); // reset buffer length
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   226
		ptrDest+=iCodecUnderTest->SinkBufferSize();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   227
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   228
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   229
	//[ compare the coded data against the reference data]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   230
	//[ compare the processed number of bytes in the 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   231
	// coded buffer to the reference data]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   232
	__ASSERT_DEBUG( iRefCodedData->Data().Length() >= iCodedData->Data().Length(),Panic(EBadInvariant));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   233
   
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   234
	TUint8* ptr1 = CONST_CAST(TUint8*,iRefCodedData->Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   235
	TUint8* ptr2 = CONST_CAST(TUint8*,iCodedData->Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   236
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   237
	if(!iComparator.CompareL( ptr1,ptr2, iCodedData->Data().Length())!=0)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   238
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   239
		 INFO_PRINTF1( _L("Comparison has failed"));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   240
		//(this->*iPrintFormats[ C ])( ptr1, ptr2, iCodedData->Data().Length() );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   241
		result = EFail ;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   242
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   243
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   244
	//[ pop buffers ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   245
	CleanupStack::PopAndDestroy(2,srcBuffer); //srcBuffer, destBuffer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   246
	delete iCodedData;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   247
	iCodedData = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   248
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   249
	__MM_HEAP_MARKEND;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   250
	return result;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   251
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   252
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   253
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   254
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   255
* DoTestStepPreambleL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   256
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   257
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   258
template <class T, class Comparator, TInt A, TInt B, TInt C>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   259
TVerdict CTestStepCodecUnitTest<T,Comparator,A,B, C>::DoTestStepPreambleL()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   260
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   261
	//[ assert preconditions on a and b ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   262
	__ASSERT_DEBUG( A >= 0, Panic(EBadInvariant)); //sanity check on data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   263
	__ASSERT_DEBUG( B >= 0, Panic(EBadInvariant)); //sanity check on data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   264
	__ASSERT_DEBUG( C >= 0, Panic(EBadInvariant)); //sanity check on data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   265
	__ASSERT_DEBUG( A < 2, Panic(EBadInvariant)); //sanity check on data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   266
	__ASSERT_DEBUG( B < 2, Panic(EBadInvariant)); //sanity check on data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   267
	__ASSERT_DEBUG( C < 2, Panic(EBadInvariant)); //sanity check on data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   268
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   269
	//[ initialise file reader callbacks ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   270
	iReaders[ 0 ] = &CTestStepCodecUnitTest<T,Comparator,A,B,C>::ReadWavFileL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   271
    iReaders[ 1 ] = &CTestStepCodecUnitTest<T,Comparator,A,B,C>::ReadAuFileL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   272
   
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   273
	//[ initialise print format callbacks ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   274
	iPrintFormats[ 0 ] = &CTestStepCodecUnitTest<T,Comparator,A,B,C>::Print8BitResults;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   275
    iPrintFormats[ 1 ] = &CTestStepCodecUnitTest<T,Comparator,A,B,C>::Print16BitResults;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   276
   
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   277
    // make codec
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   278
	iCodecUnderTest = new(ELeave) T; // a cmmfcodec 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   279
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   280
	// [ Parse files into buffers, input & comparison
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   281
	//   using the configured file readers ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   282
	TBuf<40> testFileName = iTestParameters->iInputFilename;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   283
	(this->*iReaders[ A ])(iSourceData, testFileName );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   284
	testFileName = iTestParameters->iComparisonFileName;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   285
    (this->*iReaders[ B ])(iRefCodedData,testFileName );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   286
	return EPass;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   287
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   288
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   289
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   290
* DoTestStepPostambleL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   291
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   292
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   293
template <class T, class Comparator, TInt A, TInt B, TInt C>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   294
TVerdict CTestStepCodecUnitTest<T,Comparator, A, B, C>::DoTestStepPostambleL(void)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   295
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   296
    //Destroy Codec
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   297
    delete iCodecUnderTest;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   298
	delete iSourceData;  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   299
	delete iCodedData;   
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   300
	delete iRefCodedData;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   301
	return EPass;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   302
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   303
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   304
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   305
* Reads wav file data into the supplied buffer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   306
* ReadFileL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   307
* @param
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   308
* @param
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   309
* This function reads the data portion of a wav file
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   310
* into a data buffer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   311
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   312
template <class T, class Comparator, TInt A, TInt B, TInt C>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   313
void CTestStepCodecUnitTest<T,Comparator, A, B, C>::ReadWavFileL( CMMFDataBuffer* &aBuffer, const TDesC& aFile )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   314
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   315
	// connect to the file server
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   316
	User::LeaveIfError(iFs.Connect());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   317
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   318
	// [open the file and read its data contents into the buffer ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   319
	// [the assumption will be the data is stored in wav format only]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   320
	TFileName fileName = GetSuite()->DefaultPath();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   321
	fileName.Append(aFile);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   322
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   323
	RFile file1;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   324
	User::LeaveIfError(file1.Open(iFs, fileName, EFileShareAny | EFileStream | EFileRead));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   325
	CleanupClosePushL(file1);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   326
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   327
    //[ get the size and position of the data from the wav file ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   328
	TInt pos  = KFmtChunkSize;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   329
	User::LeaveIfError(file1.Seek( ESeekStart, pos ));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   330
	TInt fmtChunkSize = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   331
	User::LeaveIfError(ReadInt(file1, fmtChunkSize));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   332
	//[ seek to data chunk size ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   333
    pos = KFmtChunkSize+fmtChunkSize+8;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   334
	User::LeaveIfError(file1.Seek(ESeekStart, pos ));    
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   335
	//read data chunk size
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   336
	TInt dataChunkSize = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   337
	User::LeaveIfError(ReadInt(file1, dataChunkSize));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   338
    //create buffer large eneough to deal with data size
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   339
	TInt fileSize = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   340
	User::LeaveIfError(file1.Size(fileSize));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   341
	__ASSERT_DEBUG( fileSize > dataChunkSize, Panic(EBadInvariant)); //sanity check on data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   342
	aBuffer = CMMFDescriptorBuffer::NewL(dataChunkSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   343
	User::LeaveIfError(file1.Read( aBuffer->Data(),dataChunkSize));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   344
	aBuffer->Data().SetLength(dataChunkSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   345
	file1.Close();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   346
	CleanupStack::PopAndDestroy(1); //file1
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   347
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   348
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   349
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   350
* Reads Au file data into the supplied buffer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   351
* ReadFileL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   352
* @param
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   353
* @param
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   354
* This function reads the data portion of a wav file
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   355
* into a data buffer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   356
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   357
template <class T, class Comparator, TInt A, TInt B, TInt C>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   358
void CTestStepCodecUnitTest<T,Comparator, A, B, C>::ReadAuFileL( CMMFDataBuffer* &aBuffer, const TDesC& aFile )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   359
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   360
	// connect to the file server
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   361
	User::LeaveIfError(iFs.Connect());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   362
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   363
	// [open the file and read its data contents into the buffer ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   364
	TFileName fileName = GetSuite()->DefaultPath();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   365
	fileName.Append(aFile);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   366
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   367
	RFile file1;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   368
	User::LeaveIfError(file1.Open(iFs, fileName, EFileShareAny | EFileStream | EFileRead));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   369
	CleanupClosePushL(file1);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   370
     
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   371
  	TInt magicNumber = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   372
	User::LeaveIfError(ReadIntB(file1, magicNumber));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   373
    if( magicNumber != KAuMagic )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   374
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   375
         // have not detected the appropriate header
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   376
		 INFO_PRINTF1(_L("Have not detected Au Header ie magic number 0x2e736e64"));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   377
		 User::Leave( KErrCorrupt );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   378
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   379
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   380
	//[ header size ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   381
    TInt headerSize = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   382
	User::LeaveIfError(ReadIntB(file1, headerSize));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   383
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   384
	TInt fileSize = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   385
	User::LeaveIfError(file1.Size(fileSize));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   386
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   387
    //[ filesize - headersize = datasize ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   388
    TInt dataSize = fileSize - headerSize;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   389
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   390
    // [ assert that the datasize >= 0 ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   391
	__ASSERT_DEBUG( dataSize >= 0, Panic(EBadInvariant)); //sanity check on data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   392
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   393
	//[Seek to the correct position and read data into Buffer]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   394
	User::LeaveIfError(file1.Seek(ESeekStart, headerSize )); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   395
	__ASSERT_DEBUG( fileSize > dataSize, Panic(EBadInvariant)); //sanity check on data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   396
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   397
	//[ read the data into a Buffer ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   398
	aBuffer = CMMFDescriptorBuffer::NewL(dataSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   399
	User::LeaveIfError(file1.Read( aBuffer->Data(),dataSize));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   400
	aBuffer->Data().SetLength(dataSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   401
	file1.Close();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   402
	CleanupStack::PopAndDestroy(1); //file1
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   403
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   404
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   405
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   406
* Reads file into buffer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   407
* ReadFileL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   408
* @param aFile the file from which to read the data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   409
* @param aValue the returned value
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   410
* This function reads a 32bit value in a rather inefficient way
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   411
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   412
template <class T, class Comparator, TInt A, TInt B, TInt C>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   413
TInt CTestStepCodecUnitTest<T,Comparator, A, B, C>::ReadInt( RFile& aFile, TInt& aValue )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   414
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   415
	 TUint8 data[4];
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   416
     TPtr8 theDes( data, 4 ); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   417
 	 User::LeaveIfError(aFile.Read( theDes, 4));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   418
     // now assemble the data from the buffer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   419
     aValue  = data[0];
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   420
	 aValue |= data[1] << 8;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   421
	 aValue |= data[2] << 16;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   422
	 aValue |= data[3] << 24;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   423
	 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   424
	 return KErrNone;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   425
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   426
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   427
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   428
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   429
* Reads file into buffer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   430
* ReadFileL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   431
* @param aFile the file from which to read the data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   432
* @param aValue the returned value
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   433
* This function reads a 32bit value in BigEndian forma
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   434
and coverts it to Little Endian in a rather inefficient way
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   435
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   436
template <class T, class Comparator, TInt A, TInt B, TInt C>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   437
TInt CTestStepCodecUnitTest<T,Comparator, A, B, C>::ReadIntB( RFile& aFile, TInt& aValue )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   438
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   439
	 TUint8 data[4];
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   440
     TPtr8 theDes( data, 4 ); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   441
 	 User::LeaveIfError(aFile.Read( theDes, 4));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   442
     // now assemble the data from the buffer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   443
     aValue  = data[3];
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   444
	 aValue |= data[2] << 8;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   445
	 aValue |= data[1] << 16;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   446
	 aValue |= data[0] << 24;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   447
	 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   448
	 return KErrNone;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   449
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   450
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   451
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   452
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   453
* ComputeBuffersToProcess
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   454
* @precondition InputBuffer has been setup
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   455
* @precondition Codec has been instantiated
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   456
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   457
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   458
template <class T, class Comparator, TInt A, TInt B, TInt C>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   459
TInt CTestStepCodecUnitTest<T,Comparator, A, B, C>::ComputeBuffersToProcess()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   460
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   461
   	TInt numWholeBuffers = (iSourceData->Data().MaxLength()/iCodecUnderTest->SourceBufferSize() );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   462
	return numWholeBuffers;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   463
    }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   464
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   465
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   466
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   467
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   468
* This is used for template instantiation.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   469
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   470
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   471
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   472
template class CTestStepCodecUnitTest<CMMFPcm16SwapEndianCodec,TComparator,0,1,1>;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   473
template class CTestStepCodecUnitTest<CMMFPcm16ToImaAdpcmCodec,TComparator>;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   474
template class CTestStepCodecUnitTest<CMMFImaAdpcmToPcm16Codec,TDbComparator<>,0,0,1>;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   475
template class CTestStepCodecUnitTest<CMMFPcm16ToPcmU8Codec,TComparator>;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   476
template class CTestStepCodecUnitTest<CMMFPcmU8ToPcm16Codec,TDbComparator<>,0,0,1>;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   477
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   478
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   479
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   480
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   481
* Compare
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   482
* @param aData
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   483
* @param aData2
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   484
* @param aNoSamples
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   485
* @return TBool
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   486
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   487
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   488
TBool TComparator::CompareL( TUint8* aData, TUint8* aData2, TInt aLength )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   489
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   490
	TBool result = ETrue;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   491
    if( !aData )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   492
		User::Leave(KErrArgument);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   493
	if( !aData2 )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   494
		User::Leave(KErrArgument);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   495
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   496
	if( Mem::Compare( aData,aLength, aData2, aLength )!=0)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   497
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   498
		result = EFalse;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   499
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   500
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   501
	return result;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   502
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   503
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   504
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   505
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   506
* Compare
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   507
* @param aData
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   508
* @param aData2
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   509
* @param aNoSamples
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   510
* @result TBool
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   511
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   512
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   513
template <TInt T>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   514
TBool TDbComparator<T>::CompareL( TUint8* aData, TUint8* aData2, TInt aLength )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   515
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   516
	TBool result = ETrue;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   517
    if( !aData )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   518
		User::Leave(KErrArgument);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   519
	if( !aData2 )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   520
		User::Leave(KErrArgument);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   521
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   522
    //[ lets compute the signal to noise ratio ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   523
    TReal sumSigSquared   = 0.0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   524
	TReal sumErrorSquared = 0.0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   525
	TUint8* pData = aData;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   526
	TUint8* pData2 = aData2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   527
	TInt numSamples = aLength/2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   528
	// compute the sum of sig and error squared
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   529
	for( TInt count = 0; count < numSamples; count++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   530
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   531
		TInt16 sample1  = static_cast<TInt16>( pData[0] &KAndMask8bit);  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   532
		       sample1 |=  static_cast<TInt16>((pData[1] << 8 ));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   533
		TInt16 sample2  = static_cast<TInt16>( pData2[0] &KAndMask8bit);  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   534
		       sample2 |=  static_cast<TInt16>((pData2[1] << 8 ));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   535
			   pData +=1;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   536
			   pData2+=2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   537
		sumSigSquared   += sample1*sample1;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   538
		sumErrorSquared += (sample1-sample2)*(sample1-sample2);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   539
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   540
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   541
	TReal sn = 0.0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   542
	const TReal tolerance = 0.001;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   543
	//[precondition error is >= tolerance ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   544
	if( sumErrorSquared < tolerance )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   545
		User::Leave( KErrArgument );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   546
	//[claculate ratio safely ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   547
	Math::Log( sn, (sumSigSquared/sumErrorSquared));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   548
	sn*= 10;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   549
	TReal threshold = T; // integer used as real with 100ths db accuracy
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   550
	      threshold /= 100.0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   551
	if( sn < threshold )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   552
		result = EFalse;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   553
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   554
	return result;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   555
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   556