devsound/devsoundrefplugin/tsrc/SwCodecDevices/TSU_MMF_SignConversionCodecs.cpp
author hgs
Fri, 08 Oct 2010 19:40:43 +0100
changeset 0 79dd3e2336a0
permissions -rw-r--r--
2010wk36_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
// TSU_MMF_CodecTests.cpp
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    15
// 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    16
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    17
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    18
// EPOC includes
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    19
#include <e32base.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    20
#include <e32math.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    21
#include <f32file.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    22
#include <s32file.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    23
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    24
// Test system includes
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    25
#include "TSU_MMF_DeviceSuite.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    26
#include "TSU_MMF_SignConversionCodecs.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    27
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    28
//[ codec includes ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    29
#include <mmf/plugin/mmfhwdeviceimplementationuids.hrh>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    30
#include "MmfPcm16toAlawhwDevice.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    31
#include "MmfALawToPcm16HwDevice.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    32
#include "mmfpcm16toMulawhwdevice.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    33
#include "MmfMuLawToPcm16hwDevice.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    34
#include "mmfpcmS8ToPcmS16HwDevice.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    35
#include "mmfpcmS16PcmS8HwDevice.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    36
#include "mmfpcm16topcmU16BEHwDevice.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    37
#include "mmfpcm16SwapEndianhwdevice.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    38
#include "mmfpcm16ToImaAdpcm.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    39
#include "MmfImaAdpcmtopcm16hwdevice.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    40
#include "MMFpcm16ToPcm16HwDevice.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    41
#include "MMFpcm16ToPcmU8HwDevice.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    42
#include "MMFpcmU8ToPcm16HwDevice.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    43
#include "mmfpcmS16PcmS8HwDevice.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    44
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 TSignConversionTestParams
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
	};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    57
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    58
// constant table of parameters for tests
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    59
const TSignConversionTestParams KSignConversionParameters[] =
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    60
	{	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    61
		{_S("MM-MMF-SWCODECDEVICES-U-0017-HP")},
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    62
		{_S("MM-MMF-SWCODECDEVICES-U-0018-HP")},
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    63
		{_S("MM-MMF-SWCODECDEVICES-U-0019-HP")},
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    64
		{_S("MM-MMF-SWCODECDEVICES-U-0020-HP")}, 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    65
		{_S("MM-MMF-SWCODECDEVICES-U-0021-HP")}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    66
	};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    67
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    68
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    69
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    70
* PrintComparisonDataL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    71
* @param aCodedData the coded data buffer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    72
* @param aRefCodedData the reference coded data buffer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    73
* 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    74
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    75
void CMMFDataGenerator::PrintComparisonDataL( CMMFDataBuffer& aCodedData, CMMFDataBuffer& aRefCodedData )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    76
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    77
	//[precondition reference coded data is equal in size or longer than coded data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    78
	if( aRefCodedData.Data().Length() < aCodedData.Data().Length() )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    79
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    80
         //[coded data is longer than reference data]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    81
	//	RDebug::Print(_L("Coded Data is longer than refernce data")); Commented under DEF105143
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    82
		User::Leave( KErrCorrupt );	 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    83
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    84
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    85
	TUint8* ptr1 = CONST_CAST(TUint8*, aCodedData.Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    86
	TUint8* ptr2 = CONST_CAST(TUint8*, aRefCodedData.Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    87
    TInt length = aCodedData.Data().Length();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    88
	//[ now print the results for comparison ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    89
	for( TInt i = 0; i < length; i++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    90
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    91
        RDebug::Print( _L("difference: %d, coded: %d, RefCoded: %d"), (*ptr1-*ptr2), *ptr1++, *ptr2++ );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    92
		} 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    93
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    94
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    95
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    96
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    97
* AssembleValue
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    98
* @param aData src data buffer 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    99
* @param aValue resultant value
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   100
* @param aBigEndian whether the value is in BigEndian format
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   101
* @precondition aData is not null and has length >= 2
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   102
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   103
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   104
void CMMFDataGenerator::AssembleValue( TUint8* aData, TInt16& aValue, TBool aBigEndian )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   105
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   106
	__ASSERT_DEBUG( aData, Panic(EBadArgument));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   107
    if( aBigEndian )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   108
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   109
		aValue  = static_cast<TInt16>( aData[1] &KAndMask8bit );  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   110
		aValue |=  static_cast<TInt16>((aData[0] << 8 ));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   111
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   112
	else
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   113
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   114
		aValue  = static_cast<TInt16>( aData[0] &KAndMask8bit);  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   115
		aValue |=  static_cast<TInt16>((aData[1] << 8 ));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   116
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   117
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   118
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   119
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   120
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   121
* AssembleValue
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   122
* @param aData src data buffer 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   123
* @param aValue resultant value
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   124
* @param aBigEndian whether the value is in BigEndian format
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   125
* @precondition aData is not null and has length >= 2
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   126
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   127
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   128
void CMMFDataGenerator::AssembleValue( TUint8* aData, TUint16& aValue, TBool aBigEndian )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   129
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   130
	__ASSERT_DEBUG( aData, Panic(EBadArgument));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   131
	if( aBigEndian )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   132
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   133
		aValue     = aData[1] ; //[ big endian format]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   134
		aValue    |= (aData[0] << 8 ); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   135
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   136
	else
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   137
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   138
		aValue     = aData[0] ; 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   139
		aValue    |= (aData[1] << 8 ); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   140
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   141
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   142
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   143
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   144
* CMMFPcmU16toPcmU16BGenerator
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   145
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   146
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   147
CMMFPcmU16toPcmU16BGenerator::CMMFPcmU16toPcmU16BGenerator()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   148
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   149
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   150
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   151
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   152
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   153
* ~CMMFPcmU16toPcmU16BGenerator
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   154
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   155
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   156
CMMFPcmU16toPcmU16BGenerator::~CMMFPcmU16toPcmU16BGenerator()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   157
	{
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
* GenerateSourceDataL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   163
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   164
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   165
void CMMFPcmU16toPcmU16BGenerator::GenerateSourceDataL( CMMFDataBuffer* &aBuffer, TInt aSize )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   166
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   167
	const TUint16 KScale2 = 32000;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   168
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   169
	 //[ create a buffer large enough to fill with the data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   170
	aBuffer = CMMFDescriptorBuffer::NewL(aSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   171
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   172
	TUint8* pDst = CONST_CAST(TUint8*,aBuffer->Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   173
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   174
	//[ lets fill it with a 400hz signal at approx -3db ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   175
	//[encode the data]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   176
	 TUint16 srcValue = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   177
	 TReal val   = 0.0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   178
	 TReal theta = 0.0; 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   179
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   180
	 TInt noSamples = aSize/sizeof(TInt16);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   181
	 for(TInt i=0; i< noSamples; i++)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   182
		 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   183
		 //[ assign data and place in buffer]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   184
		  theta = (KPi*i)/10; // fundamental of 400hz sampled @8khz has 20 db or
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   185
		                      // better reproduction through gsm codec
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   186
		  User::LeaveIfError(Math::Sin(val,theta));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   187
          srcValue = static_cast<TUint16>( (KScale2 * val ) + KScale2+0.5);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   188
          *pDst++ = static_cast<TUint8>( srcValue &KAndMask8bit);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   189
		  *pDst++ = static_cast<TUint8>( (srcValue >>8) &KAndMask8bit);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   190
		 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   191
    
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   192
	 aBuffer->Data().SetLength(aSize); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   193
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   194
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   195
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   196
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   197
* GenerateComparisonDataL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   198
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   199
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   200
void CMMFPcmU16toPcmU16BGenerator::GenerateComparisonDataL( CMMFDataBuffer* &aBuffer, TInt aSize )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   201
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   202
	const TUint16 KScale2 = 32000;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   203
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   204
	 //[ create a buffer large eneough to fill with the data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   205
	aBuffer = CMMFDescriptorBuffer::NewL(aSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   206
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   207
	TUint8* pDst = CONST_CAST(TUint8*,aBuffer->Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   208
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   209
	//[ lets fill it with a 400hz signal at approx -3db ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   210
	//[encode the data]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   211
	 TUint16 srcValue = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   212
	 TReal val   = 0.0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   213
	 TReal theta = 0.0; 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   214
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   215
	 TInt noSamples = aSize/sizeof(TInt16);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   216
	 for(TInt i=0; i< noSamples; i++)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   217
		 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   218
		 //[ assign data and place in buffer]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   219
		  theta = (KPi*i)/10; // fundamental of 400hz sampled @8khz has 20 db or
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   220
		                      // better reproduction through gsm codec
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   221
		  User::LeaveIfError(Math::Sin(val,theta));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   222
          srcValue = static_cast<TUint16>( (KScale2 * val)+KScale2 +0.5);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   223
          //[endian swap here ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   224
		  *pDst++ = static_cast<TUint8>( (srcValue >>8) &KAndMask8bit);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   225
		  *pDst++ = static_cast<TUint8>( srcValue &KAndMask8bit);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   226
		 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   227
    
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   228
	 aBuffer->Data().SetLength(aSize); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   229
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   230
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   231
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   232
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   233
* PrintComparisonDataL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   234
* Prints out coded results for comparison with the 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   235
* Reference values and is used when the results differ
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   236
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   237
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   238
void CMMFPcmU16toPcmU16BGenerator::PrintComparisonDataL( CMMFDataBuffer& aCodedData, CMMFDataBuffer& aRefCodedData )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   239
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   240
	//[precondition reference coded data is equal in size or longer than coded data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   241
	if( aRefCodedData.Data().Length() < aCodedData.Data().Length() )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   242
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   243
         //[coded data is longer than reference data]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   244
	//	RDebug::Print( _L("Coded Data is longer than refernce data"));Commented under DEF105143
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   245
		User::Leave( KErrCorrupt );	 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   246
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   247
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   248
	//[ now print the results for comparison ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   249
    TUint8* ptr1 = CONST_CAST(TUint8*, aCodedData.Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   250
	TUint8* ptr2 = CONST_CAST(TUint8*, aRefCodedData.Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   251
    TInt length = aCodedData.Data().Length();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   252
	length /= 2; // [for 16bit words length is half]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   253
	//[ assert invariant length is even ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   254
	__ASSERT_DEBUG( (length % 2 == 0 ), Panic(EBadInvariant));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   255
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   256
	TUint16 codedValue = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   257
	TUint16 refCodedValue = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   258
	//[ now print the results for comparison ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   259
	for( TInt i = 0; i < length; i++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   260
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   261
		//[ assemble 16bit values from buffer values ]    
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   262
		AssembleValue( ptr1, codedValue, ETrue );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   263
		AssembleValue( ptr2, refCodedValue, ETrue );       
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   264
		RDebug::Print( _L("difference: %u, coded: %u, RefCoded: %u"), (refCodedValue-codedValue), codedValue, refCodedValue );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   265
		if( i % 100 == 0 ) //deal with debug printf deficiencies
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   266
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   267
			User::After(100 );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   268
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   269
		ptr1+=2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   270
		ptr2+=2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   271
		} 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   272
 	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   273
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   274
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   275
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   276
* CMMFPcmU16BtoPcmU16Generator
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   277
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   278
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   279
CMMFPcmU16BtoPcmU16Generator::CMMFPcmU16BtoPcmU16Generator()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   280
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   281
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   282
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   283
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   284
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   285
* ~CMMFPcmU16BtoPcmU16Generator
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   286
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   287
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   288
CMMFPcmU16BtoPcmU16Generator::~CMMFPcmU16BtoPcmU16Generator()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   289
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   290
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   291
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   292
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   293
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   294
* GenerateSourceDataL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   295
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   296
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   297
void CMMFPcmU16BtoPcmU16Generator::GenerateSourceDataL( CMMFDataBuffer* &aBuffer, TInt aSize )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   298
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   299
	const TUint8 KScale2 = 127;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   300
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   301
	 //[ create a buffer large eneough to fill with the data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   302
	aBuffer = CMMFDescriptorBuffer::NewL(aSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   303
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   304
	TUint8* pDst = CONST_CAST(TUint8*,aBuffer->Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   305
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   306
	//[ lets fill it with a 400hz signal at approx -3db ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   307
	//[encode the data]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   308
	 TInt8 srcValue = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   309
	 TReal val   = 0.0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   310
	 TReal theta = 0.0; 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   311
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   312
	 TInt noSamples = aSize/sizeof(TInt16);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   313
	 for(TInt i=0; i< noSamples; i++)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   314
		 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   315
		 //[ assign data and place in buffer]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   316
		  theta = (KPi*i)/10; // fundamental of 400hz sampled @8khz has 20 db or
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   317
		                      // better reproduction through gsm codec
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   318
		  User::LeaveIfError(Math::Sin(val,theta));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   319
          srcValue = static_cast<TUint8>( (KScale2 * val) );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   320
          //[endian swap here ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   321
		  *pDst++ = static_cast<TUint8>( (srcValue >>8) &KAndMask8bit);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   322
		  *pDst++ = static_cast<TUint8>( srcValue &KAndMask8bit);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   323
		 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   324
    
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   325
	 aBuffer->Data().SetLength(aSize); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   326
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   327
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   328
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   329
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   330
* GenerateComparisonDataL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   331
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   332
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   333
void CMMFPcmU16BtoPcmU16Generator::GenerateComparisonDataL( CMMFDataBuffer* &aBuffer, TInt aSize )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   334
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   335
	const TUint8 KScale2 = 127;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   336
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   337
	 //[ create a buffer large eneough to fill with the data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   338
	aBuffer = CMMFDescriptorBuffer::NewL(aSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   339
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   340
	TUint8* pDst = CONST_CAST(TUint8*,aBuffer->Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   341
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   342
	//[ lets fill it with a 400hz signal at approx -3db ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   343
	//[encode the data]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   344
	 TUint16 srcValue = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   345
	 TReal val   = 0.0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   346
	 TReal theta = 0.0; 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   347
	 TInt noSamples = aSize/sizeof(TInt16);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   348
	 for(TInt i=0; i< noSamples; i++)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   349
		 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   350
		 //[ assign data and place in buffer]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   351
		  theta = (KPi*i)/10; // fundamental of 400hz sampled @8khz has 20 db or
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   352
		                      // better reproduction through gsm codec
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   353
		  User::LeaveIfError(Math::Sin(val,theta));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   354
          srcValue = static_cast<TUint16>( KScale2 * val );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   355
		  *pDst++ = static_cast<TUint8>( srcValue &KAndMask8bit);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   356
		  *pDst++ = static_cast<TUint8>( (srcValue >>8) &KAndMask8bit);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   357
		 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   358
    
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   359
	 aBuffer->Data().SetLength(aSize); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   360
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   361
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   362
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   363
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   364
* PrintComparisonDataL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   365
* Prints out coded results for comparison with the 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   366
* Reference values and is used when the results differ
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   367
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   368
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   369
void CMMFPcmU16BtoPcmU16Generator::PrintComparisonDataL( CMMFDataBuffer& aCodedData, CMMFDataBuffer& aRefCodedData )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   370
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   371
	//[precondition reference coded data is equal in size or longer than coded data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   372
	if( aRefCodedData.Data().Length() < aCodedData.Data().Length() )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   373
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   374
		//[coded data is longer than reference data]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   375
	//	RDebug::Print( _L("Coded Data is longer than refernce data"));Commented under DEF105143
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   376
		User::Leave( KErrCorrupt );	 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   377
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   378
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   379
	//[ now print the results for comparison ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   380
    TUint8* ptr1 = CONST_CAST(TUint8*, aCodedData.Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   381
	TUint8* ptr2 = CONST_CAST(TUint8*, aRefCodedData.Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   382
    TInt length = aCodedData.Data().Length();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   383
	length /= 2; //[ for 16bit words ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   384
	TUint16 codedValue = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   385
	TUint16 refCodedValue = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   386
	//[ now print the results for comparison ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   387
	for( TInt i = 0; i < length; i++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   388
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   389
		// assemble 16bit values
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   390
		AssembleValue( ptr1, codedValue, EFalse);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   391
		AssembleValue( ptr2, refCodedValue, EFalse );        
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   392
		RDebug::Print( _L("difference: %u, coded: %u, RefCoded: %u"), (refCodedValue-codedValue), codedValue, refCodedValue );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   393
		if( i % 100 == 0 ) //deal with debug printf deficiencies
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   394
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   395
			User::After( 100 );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   396
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   397
		ptr1+=2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   398
		ptr2+=2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   399
		} 	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   400
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   401
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   402
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   403
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   404
* CMMFPcm8ToPcm16Generator
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   405
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   406
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   407
CMMFPcm8ToPcm16Generator::CMMFPcm8ToPcm16Generator()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   408
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   409
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   410
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   411
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   412
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   413
* CMMFPcm8ToPcm16Generator
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   414
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   415
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   416
CMMFPcm8ToPcm16Generator::~CMMFPcm8ToPcm16Generator()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   417
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   418
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   419
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   420
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   421
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   422
* GenerateSourceDataL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   423
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   424
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   425
void CMMFPcm8ToPcm16Generator::GenerateSourceDataL( CMMFDataBuffer* &aBuffer, TInt aSize )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   426
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   427
	const TInt8 KScale2 = 127;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   428
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   429
	 //[ create a buffer large eneough to fill with the data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   430
	aBuffer = CMMFDescriptorBuffer::NewL(aSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   431
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   432
	TUint8* pDst = CONST_CAST(TUint8*,aBuffer->Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   433
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   434
	//[ lets fill it with a 400hz signal at approx -3db ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   435
	//[encode the data]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   436
	 TInt8 srcValue = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   437
	 TReal val   = 0.0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   438
	 TReal theta = 0.0; 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   439
     TInt noSamples = aSize/sizeof(TInt8);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   440
	 for(TInt i=0; i< noSamples; i++)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   441
		 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   442
		 //[ assign data and place in buffer]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   443
		  theta = (KPi*i)/10; // fundamental of 400hz sampled @8khz has 20 db or
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   444
		                      // better reproduction through gsm codec
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   445
		  User::LeaveIfError(Math::Sin(val,theta));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   446
          srcValue = static_cast<TInt8>( (KScale2 * val) );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   447
          *pDst++ = srcValue;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   448
		 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   449
    
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   450
	 aBuffer->Data().SetLength(aSize); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   451
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   452
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   453
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   454
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   455
* GenerateSourceDataL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   456
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   457
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   458
void CMMFPcm8ToPcm16Generator::GenerateComparisonDataL( CMMFDataBuffer* &aBuffer, TInt aSize )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   459
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   460
	const TInt8 KScale2 = 127;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   461
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   462
	 //[ create a buffer large eneough to fill with the data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   463
	aBuffer = CMMFDescriptorBuffer::NewL(aSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   464
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   465
	TUint8* pDst = CONST_CAST(TUint8*,aBuffer->Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   466
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   467
	//[ lets fill it with a 400hz signal at approx -3db ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   468
	//[encode the data]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   469
	 TInt16 srcValue = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   470
	 TReal val   = 0.0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   471
	 TReal theta = 0.0; 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   472
	 TInt noSamples = aSize/sizeof(TInt16);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   473
	 for(TInt i=0; i< noSamples; i++)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   474
		 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   475
		 //[ assign data and place in buffer]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   476
		  theta = (KPi*i)/10; // fundamental of 400hz sampled @8khz has 20 db or
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   477
		                      // better reproduction through gsm codec
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   478
		  User::LeaveIfError(Math::Sin(val,theta));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   479
		  TInt8 temp = static_cast<TInt8>((KScale2 * val));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   480
          srcValue =  static_cast<TInt16>( temp << 8); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   481
		  *pDst++ = static_cast<TInt8>( srcValue&KAndMask8bit);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   482
		  *pDst++ = static_cast<TInt8>((srcValue>>8)&KAndMask8bit);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   483
		 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   484
    
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   485
	 aBuffer->Data().SetLength(aSize); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   486
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   487
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   488
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   489
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   490
* PrintComparisonDataL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   491
* Prints out coded results for comparison with the 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   492
* Reference values and is used when the results differ
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   493
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   494
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   495
void CMMFPcm8ToPcm16Generator::PrintComparisonDataL( CMMFDataBuffer& aCodedData, CMMFDataBuffer& aRefCodedData )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   496
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   497
	//[precondition reference coded data is equal in size or longer than coded data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   498
	if( aRefCodedData.Data().Length() < aCodedData.Data().Length() )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   499
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   500
		//[coded data is longer than reference data]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   501
	//	RDebug::Print( _L("Coded Data is longer than refernce data"));Commented under DEF105143
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   502
		User::Leave( KErrCorrupt );	 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   503
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   504
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   505
	//[ now print the results for comparison ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   506
    TUint8* ptr1 = CONST_CAST(TUint8*, aCodedData.Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   507
	TUint8* ptr2 = CONST_CAST(TUint8*, aRefCodedData.Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   508
    TInt length = aCodedData.Data().Length();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   509
	length /= 2; //[ for 16bit words ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   510
	TInt16 codedValue = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   511
	TInt16 refCodedValue = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   512
	//[ now print the results for comparison ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   513
	for( TInt i = 0; i < length; i++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   514
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   515
		// assemble 16bit values
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   516
  		AssembleValue( ptr1, codedValue, EFalse );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   517
		AssembleValue( ptr2, refCodedValue, EFalse );        
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   518
		RDebug::Print( _L("difference: %d, coded: %d, RefCoded: %d"), (refCodedValue-codedValue), codedValue, refCodedValue );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   519
		if( i % 100 == 0 ) //deal with debug printf deficiencies
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   520
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   521
			User::After(100 );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   522
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   523
		ptr1+=2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   524
		ptr2+=2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   525
		} 	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   526
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   527
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   528
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   529
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   530
* CMMFPcmU8ToPcm16Generator
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   531
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   532
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   533
CMMFPcmU8ToPcm16Generator::CMMFPcmU8ToPcm16Generator()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   534
	 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   535
	 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   536
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   537
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   538
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   539
* ~CMMFPcmU8ToPcm16Generator
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   540
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   541
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   542
CMMFPcmU8ToPcm16Generator::~CMMFPcmU8ToPcm16Generator()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   543
	 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   544
	 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   545
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   546
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   547
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   548
* GenerateSourceDataL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   549
* @param aBuffer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   550
* @param aSize in bytes
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   551
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   552
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   553
void CMMFPcmU8ToPcm16Generator::GenerateSourceDataL( CMMFDataBuffer* &aBuffer, TInt aSize )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   554
	 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   555
	 const TUint8 KScale2 = 127;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   556
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   557
	 //[ create a buffer large eneough to fill with the data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   558
	aBuffer = CMMFDescriptorBuffer::NewL(aSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   559
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   560
	TUint8* pDst = CONST_CAST(TUint8*,aBuffer->Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   561
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   562
	//[ lets fill it with a 400hz signal at approx -3db ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   563
	//[encode the data]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   564
	 TUint8 srcValue = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   565
	 TReal val   = 0.0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   566
	 TReal theta = 0.0; 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   567
	 TInt noSamples = aSize/sizeof(TUint8);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   568
	 for(TInt i=0; i< noSamples; i++)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   569
		 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   570
		 //[ assign data and place in buffer]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   571
		  theta = KPi*i/10; // fundamental of 400hz sampled @8khz has 20 db or
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   572
		                      // better reproduction through gsm codec
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   573
		  User::LeaveIfError(Math::Sin(val,theta));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   574
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   575
          srcValue = static_cast<TUint8>((KScale2 * val+KScale2+0.5));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   576
          *pDst++ = srcValue;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   577
		   //RDebug::Print( _L("U8 = %u"), srcValue );  Statement commented under DEf105143
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   578
		 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   579
    
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   580
	 aBuffer->Data().SetLength(aSize); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   581
	 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   582
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   583
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   584
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   585
* GenerateComparisonDataL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   586
* @param aBuffer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   587
* @param aSize
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   588
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   589
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   590
void CMMFPcmU8ToPcm16Generator::GenerateComparisonDataL( CMMFDataBuffer* &aBuffer, TInt aSize )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   591
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   592
	const TInt8 KScale2 = 127;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   593
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   594
	//[ create a buffer large eneough to fill with the data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   595
	aBuffer = CMMFDescriptorBuffer::NewL(aSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   596
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   597
	TUint8* pDst = CONST_CAST(TUint8*,aBuffer->Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   598
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   599
	//[ lets fill it with a 400hz signal at approx -3db ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   600
	//[encode the data]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   601
//	RDebug::Print( _L("Generation"));Commented under DEF105143
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   602
	TUint8 theValue = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   603
	TReal val   = 0.0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   604
	TReal theta = 0.0; 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   605
	TUint8 rrr  = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   606
	TInt length = aSize/sizeof(TInt16);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   607
	for(TInt i=0; i< length; i++)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   608
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   609
		//[ assign data and place in buffer]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   610
		theta = KPi*i/10; // fundamental of 400hz sampled @8khz has 20 db or
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   611
		// better reproduction through gsm codec
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   612
		User::LeaveIfError(Math::Sin(val,theta));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   613
		theValue = static_cast<TUint8>(KScale2 *val + KScale2 + 0.5); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   614
		//[ apply the same transformation as the codec ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   615
		rrr = static_cast<TUint8>( theValue^KMaskSign8bit );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   616
		//RDebug::Print( _L("U8 = %u"), theValue ); Statement commented under DEf105143
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   617
		*pDst++ = rrr;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   618
		*pDst++ = rrr;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   619
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   620
    
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   621
	aBuffer->Data().SetLength(aSize); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   622
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   623
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   624
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   625
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   626
* PrintComparisonDataL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   627
* Prints out coded results for comparison with the 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   628
* Reference values and is used when the results differ
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   629
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   630
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   631
void CMMFPcmU8ToPcm16Generator::PrintComparisonDataL( CMMFDataBuffer& aCodedData, CMMFDataBuffer& aRefCodedData )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   632
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   633
	//[precondition reference coded data is equal in size or longer than coded data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   634
	if( aRefCodedData.Data().Length() < aCodedData.Data().Length() )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   635
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   636
		//[coded data is longer than reference data]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   637
	//	RDebug::Print( _L("Coded Data is longer than reference data"));Commented under DEF105143
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   638
		User::Leave( KErrCorrupt );	 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   639
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   640
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   641
	//[ now print the results for comparison ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   642
    TUint8* ptr1 = CONST_CAST(TUint8*, aCodedData.Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   643
	TUint8* ptr2 = CONST_CAST(TUint8*, aRefCodedData.Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   644
    TInt length = aCodedData.Data().Length();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   645
	length /= 2; //[ for 16bit words ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   646
	TInt16 codedValue = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   647
	TInt16 refCodedValue = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   648
	//[ now print the results for comparison ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   649
	for( TInt i = 0; i < length; i++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   650
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   651
		// assemble 16bit values
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   652
  		AssembleValue( ptr1, codedValue, EFalse );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   653
		AssembleValue( ptr2, refCodedValue, EFalse );        
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   654
		RDebug::Print( _L("delta %d c %d, rf %d"), (refCodedValue-codedValue), codedValue, refCodedValue );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   655
		if( i % 100 == 0 ) //deal with debug printf deficiencies
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   656
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   657
			User::After(100 );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   658
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   659
		ptr1+=2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   660
		ptr2+=2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   661
		} 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   662
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   663
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   664
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   665
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   666
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   667
* CMMFPcm16ToPcmU8Generator
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   668
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   669
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   670
CMMFPcm16ToPcmU8Generator::CMMFPcm16ToPcmU8Generator()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   671
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   672
     //Nothing doing
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   673
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   674
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   675
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   676
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   677
* CMMFPcm16ToPcmU8Generator
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   678
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   679
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   680
CMMFPcm16ToPcmU8Generator::~CMMFPcm16ToPcmU8Generator()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   681
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   682
     //Nothing doing
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   683
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   684
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   685
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   686
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   687
* GenerateSourceDataL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   688
* @param aBuffer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   689
* @param aSize in bytes
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   690
* This function generates a 400hz sine wav
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   691
* under the assumption the sampling frequency is 8khz
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   692
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   693
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   694
void CMMFPcm16ToPcmU8Generator::GenerateSourceDataL( CMMFDataBuffer* &aBuffer, TInt aSize )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   695
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   696
	const TInt KScale = 320;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   697
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   698
	 //[ create a buffer large eneough to fill with the data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   699
	aBuffer = CMMFDescriptorBuffer::NewL(aSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   700
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   701
	TUint8* pDst = CONST_CAST(TUint8*,aBuffer->Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   702
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   703
	//[ lets fill it with a 400hz signal at approx -3db ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   704
	//[encode the data]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   705
	 TInt16 srcValue = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   706
	 TReal val   = 0.0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   707
	 TReal theta = 0.0; 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   708
	 TInt noSamples = aSize/sizeof(TInt16);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   709
	 for(TInt i=0; i< noSamples; i++)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   710
		 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   711
		 //[ assign data and place in buffer]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   712
		  theta = (KPi*i)/10; // fundamental of 400hz sampled @8khz has 20 db or
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   713
		                      // better reproduction through gsm codec
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   714
		  User::LeaveIfError(Math::Sin(val,theta));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   715
          srcValue = static_cast<TInt16>( KScale * val );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   716
          *pDst++ = static_cast<TUint8>( srcValue & KAndMask8bit);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   717
		  *pDst++ = static_cast<TUint8>((srcValue >> 8) & KAndMask8bit );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   718
		 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   719
    
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   720
	 aBuffer->Data().SetLength(aSize); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   721
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   722
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   723
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   724
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   725
* GenerateComparisonDataL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   726
* @param aBuffer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   727
* @param aSize in bytes
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   728
* This function generates a 400hz sine wav
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   729
* under the assumption the sampling frequency is 8khz
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   730
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   731
//[ use partial sopecialization to provide copncrete implmentation]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   732
void CMMFPcm16ToPcmU8Generator::GenerateComparisonDataL( CMMFDataBuffer* &aBuffer, TInt aSize )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   733
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   734
	const TInt KScale2 = 320; //low value chosen to emphasize the distortion of this codec!
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   735
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   736
	 //[ create a buffer large eneough to fill with the data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   737
	aBuffer = CMMFDescriptorBuffer::NewL(aSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   738
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   739
	TUint8* pDst = CONST_CAST(TUint8*,aBuffer->Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   740
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   741
	//[ lets fill it with a 400hz signal at approx -3db ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   742
	//[encode the data]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   743
	 TInt16 srcValue = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   744
	 TReal val   = 0.0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   745
	 TReal theta = 0.0; 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   746
	 TInt noSamples = aSize/sizeof(TUint8);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   747
	 for(TInt i=0; i< noSamples; i++)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   748
		 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   749
		 //[ assign data and place in buffer]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   750
		  theta = (KPi*i)/10; // fundamental of 400hz sampled @8khz has 20 db or
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   751
		                      // better reproduction through gsm codec
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   752
		  User::LeaveIfError(Math::Sin(val,theta));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   753
          srcValue = static_cast<TInt16>( KScale2 * val );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   754
          *pDst++ = static_cast<TUint8>( (srcValue >> 8) - KMaskSign8bit);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   755
		 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   756
    
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   757
	 aBuffer->Data().SetLength(aSize); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   758
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   759
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   760
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   761
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   762
* PrintComparisonDataL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   763
* Prints out coded results for comparison with the 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   764
* Reference values and is used when the results differ
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   765
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   766
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   767
void CMMFPcm16ToPcmU8Generator::PrintComparisonDataL( CMMFDataBuffer& aCodedData, CMMFDataBuffer& aRefCodedData )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   768
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   769
	//[precondition reference coded data is equal in size or longer than coded data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   770
	if( aRefCodedData.Data().Length() < aCodedData.Data().Length() )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   771
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   772
         //[coded data is longer than reference data]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   773
	//	RDebug::Print( _L("Coded Data is longer than refernce data"));Commented under DEF105143
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   774
		User::Leave( KErrCorrupt );	 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   775
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   776
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   777
	//[ now print the results for comparison ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   778
    TUint8* ptr1 = CONST_CAST(TUint8*, aCodedData.Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   779
	TUint8* ptr2 = CONST_CAST(TUint8*, aRefCodedData.Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   780
    TInt length = aCodedData.Data().Length();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   781
	//[ now print the results for comparison ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   782
	for( TInt i = 0; i < length; i++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   783
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   784
		RDebug::Print( _L("difference: %u, coded: %u, RefCoded: %u"), (*ptr1-*ptr2), *ptr1, *ptr2 );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   785
		if( i % 100 == 0 ) //deal with debug printf deficiencies
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   786
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   787
			User::After(100 );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   788
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   789
		ptr1++;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   790
		ptr2++;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   791
		} 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   792
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   793
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   794
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   795
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   796
* CompareData
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   797
* @param aData1 first data buffer for comparison
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   798
* @param aData2 second data buffer for comparison
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   799
* result TBool data is the same
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   800
* @precondition aData1 has the same amount of data as aData2
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   801
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   802
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   803
template <class T, class Generator, TInt index>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   804
TBool CTestStepSignConversionTest<T, Generator, index>::CompareData( CMMFDataBuffer* aData1, CMMFDataBuffer* aData2)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   805
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   806
	TBool result = ETrue;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   807
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   808
	//[ precondition aData1 != NULL ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   809
	if( !aData1 )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   810
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   811
		User::Leave( KErrArgument );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   812
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   813
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   814
    //[ precondition aData2 != NULL ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   815
	if( !aData2 )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   816
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   817
		User::Leave( KErrArgument );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   818
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   819
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   820
    //[precondition aData1 length == aData2 length ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   821
	if( aData1->Data().Length() != aData2->Data().Length() )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   822
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   823
		User::Leave( KErrArgument );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   824
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   825
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   826
	//[Now Compare the data]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   827
	TUint8* ptr1 = CONST_CAST(TUint8*, aData1->Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   828
	TUint8* ptr2 = CONST_CAST(TUint8*, aData2->Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   829
	TInt dataLength = aData2->Data().Length();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   830
   	if( Mem::Compare( ptr1, dataLength, ptr2, dataLength )!=0)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   831
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   832
		TUint8* p1 = ptr1; 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   833
        TUint8* p2 = ptr2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   834
		TInt16 s1  = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   835
		TInt16 s2  = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   836
		INFO_PRINTF1(_L("------------------------------"));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   837
		for( TInt i = 0; i < dataLength/2; i++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   838
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   839
		    s1  = static_cast<TInt16>( p1[0] &KAndMask8bit);  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   840
		    s1 |=  static_cast<TInt16>((p1[1] << 8 ));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   841
		    s2  = static_cast<TInt16>( p2[0] &KAndMask8bit);  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   842
		    s2 |=  static_cast<TInt16>((p2[1] << 8 ));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   843
			INFO_PRINTF3(_L("%d  %d"), s1, s2);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   844
			p1+=2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   845
			p2+=2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   846
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   847
		INFO_PRINTF1(_L("------------------------------"));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   848
	//	RDebug::Print( _L("Comparison has failed")); Commented under DEF105143
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   849
		iGenerator->PrintComparisonDataL( *aData1, *aData2 );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   850
		result = EFalse ;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   851
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   852
	return result;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   853
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   854
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   855
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   856
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   857
* DoTestStepL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   858
* @result TVerdict
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   859
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   860
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   861
template <class T, class Generator, TInt index>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   862
TVerdict CTestStepSignConversionTest<T, Generator, index>::DoTestStepL()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   863
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   864
	__MM_HEAP_MARK;	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   865
	TVerdict result = EPass;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   866
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   867
	//[pre condition iSourceData ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   868
	if( !iSourceData )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   869
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   870
		INFO_PRINTF1(_L("Source Data Failure"));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   871
		User::Leave( KErrCorrupt);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   872
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   873
	//[precondition iCodedData  ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   874
	if( !iCodedData )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   875
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   876
		INFO_PRINTF1(_L("Coded Data Failure"));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   877
		User::Leave( KErrCorrupt);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   878
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   879
	//[precondition iRefData ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   880
	if( !iRefCodedData )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   881
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   882
		INFO_PRINTF1(_L("RefCodedData Argument Failure"));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   883
		User::Leave( KErrCorrupt);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   884
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   885
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   886
	//[ lets code the data and compare it to the reference data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   887
    iCodecUnderTest->ProcessL(*iSourceData, *iCodedData);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   888
    if(!CompareData(iCodedData, iRefCodedData))
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   889
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   890
		INFO_PRINTF1(_L("Coded Results do not match reference coded results"));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   891
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   892
		result = EFail;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   893
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   894
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   895
	__MM_HEAP_MARKEND;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   896
	return result;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   897
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   898
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   899
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   900
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   901
* DoTestStepPostambleL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   902
* @result TVerdict
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   903
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   904
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   905
template <class T, class Generator, TInt index>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   906
TVerdict CTestStepSignConversionTest<T, Generator, index>::DoTestStepPostambleL()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   907
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   908
	TVerdict result = EPass;	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   909
	//[delete the buffers & Codec]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   910
	delete iCodecUnderTest;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   911
	delete iGenerator;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   912
	delete iSourceData;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   913
	delete iCodedData;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   914
	delete iRefCodedData;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   915
	return result;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   916
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   917
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   918
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   919
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   920
* DoTestStepPreambleL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   921
* @result TVerdict
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   922
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   923
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   924
template <class T, class Generator, TInt index>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   925
TVerdict CTestStepSignConversionTest<T, Generator, index>::DoTestStepPreambleL()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   926
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   927
	TVerdict result = EPass;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   928
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   929
	iCodecUnderTest =  new(ELeave) T;   // a cmmfcodec ;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   930
	iGenerator = new(ELeave) Generator; // src generator
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   931
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   932
  	//[ensure the number of samples is >= srcbuffers]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   933
	const TInt KNumBuffers = 2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   934
	const TInt dataSrcSize = KNumBuffers *  iCodecUnderTest->SourceBufferSize();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   935
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   936
	//[generate src data]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   937
	iGenerator->GenerateSourceDataL( iSourceData, dataSrcSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   938
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   939
	const TInt dataSinkSize = KNumBuffers *  iCodecUnderTest->SinkBufferSize();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   940
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   941
	//[generate comparison data]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   942
	iGenerator->GenerateComparisonDataL( iRefCodedData, dataSinkSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   943
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   944
	//[reserve space for coded data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   945
    iCodedData = CMMFDescriptorBuffer::NewL(dataSinkSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   946
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   947
	return result;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   948
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   949
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   950
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   951
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   952
* CTestStepCodecUnitTest
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   953
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   954
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   955
template <class T, class Generator, TInt index>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   956
CTestStepSignConversionTest<T, Generator, index>::CTestStepSignConversionTest()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   957
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   958
	// store the name of this test case
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   959
	// this is the name that is used by the script file
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   960
	iTestStepName = (&KSignConversionParameters[index])->iTestName;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   961
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   962
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   963
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   964
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   965
* CTestStepCodecUnitTest
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   966
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   967
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   968
template <class T, class Generator, TInt index>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   969
CTestStepSignConversionTest<T, Generator, index>::~CTestStepSignConversionTest()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   970
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   971
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   972
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   973
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   974
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   975
* This is used for template instantiation.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   976
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   977
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   978
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   979
template class CTestStepSignConversionTest<CMMFPcm16ToPcmU8Codec,CMMFPcm16ToPcmU8Generator,0>;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   980
template class CTestStepSignConversionTest<CMMFPcm8ToPcm16Codec,CMMFPcm8ToPcm16Generator,1>;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   981
template class CTestStepSignConversionTest<CMMFPcm16SwapEndianCodec,CMMFPcmU16toPcmU16BGenerator,2>;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   982
template class CTestStepSignConversionTest<CMMFPcm16SwapEndianCodec,CMMFPcmU16BtoPcmU16Generator,3>;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   983
template class CTestStepSignConversionTest<CMMFPcmU8ToPcm16Codec,CMMFPcmU8ToPcm16Generator,4>;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   984