devsound/devsoundrefplugin/tsrc/SwCodecDevices/TSU_MMF_SWCODECDEVICES.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-2010 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 <mmfcodec/gsm610/gsm610common.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    20
#include <mmfcodec/mmfaudiocodecbase.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_SWCODECDEVICES.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    24
#include "TSU_MMF_SwCodecDevices_BufferSizes.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    25
#include "TSU_MMF_DeviceSuite.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    26
#include <mmfcodec/MMFAudioSPcm16ToALawCodec.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    27
#include <mmfcodec/MMFAudioALawToS16PcmCodec.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    28
#include <mmfcodec/MMFAudioMuLawToS16PcmCodec.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    29
#include <mmfcodec/MMFAudioSPcm16ToMuLawCodec.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    30
#include "mmfpcm16ToImaAdpcm.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    31
#include "MmfImaAdpcmtopcm16hwdevice.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    32
#include "GSM610.H"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    33
#include "gsm610_types.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    34
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    35
//The marco  is assumed to be identical to the original one defined in  sf\os\mmaudio\mmlibs\mmfw\codecs\Inc\Gsm610CodecCommon\gsm610fr.h
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    36
#define PACKSIZE 65 // Size of one bit packed block (2 frames)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    37
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    38
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    39
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    40
* CTestStep_MMF_SwCodecDevices
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    41
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    42
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    43
CTestStep_MMF_SwCodecDevices::CTestStep_MMF_SwCodecDevices()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    44
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    45
	iHeapSize = 300000;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    46
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    47
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    48
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    49
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    50
* ~CTestStep_MMF_SwCodecDevices
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    51
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    52
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    53
CTestStep_MMF_SwCodecDevices::~CTestStep_MMF_SwCodecDevices()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    54
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    55
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    56
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    57
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    58
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    59
* SetSuite
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    60
* @param aPtr ref to the test suite
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    61
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    62
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    63
void CTestStep_MMF_SwCodecDevices::SetSuite( CTestSuite_MMF_SwCodecDevices* aPtr )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    64
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    65
	iRefSuite = aPtr;
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
* GetSuite 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    70
* @return CTestSuite_MMF_SwCodecDevices*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    71
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    72
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    73
CTestSuite_MMF_SwCodecDevices* CTestStep_MMF_SwCodecDevices::GetSuite()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    74
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    75
	return iRefSuite;
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
* CTest_MMF_Gsm610
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    80
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    81
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    82
CTest_MMF_Gsm610::CTest_MMF_Gsm610()
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
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    87
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    88
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    89
* CTest_MMF_SwCodecDevices_U_0001
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    90
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    91
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    92
CTest_MMF_SwCodecDevices_U_0001::CTest_MMF_SwCodecDevices_U_0001()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    93
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    94
		// store the name of this test case
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    95
		// this is the name that is used by the script file
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    96
		iTestStepName = _L("MM-MMF-SWCODECDEVICES-U-0001-HP");
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
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   101
* CTest_MMF_SwCodecDevices_U_0001
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   102
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   103
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   104
CTest_MMF_SwCodecDevices_U_0001::~CTest_MMF_SwCodecDevices_U_0001()
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
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   110
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   111
* ~CTest_MMF_Gsm610
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   112
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   113
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   114
CTest_MMF_Gsm610::~CTest_MMF_Gsm610()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   115
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   116
     // nothing to do ..
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
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   122
* DoTestStepL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   123
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   124
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   125
TVerdict CTest_MMF_SwCodecDevices_U_0001::DoTestStepL()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   126
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   127
	__MM_HEAP_MARK;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   128
	TVerdict result = EPass ;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   129
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   130
	CMmfGsm610ToPcm16HwDevice* pDecoder = CMmfGsm610ToPcm16HwDevice::NewL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   131
	CleanupStack::PushL(pDecoder);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   132
	   
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   133
	// do the same for the inverse operation
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   134
	CMmfPcm16ToGsm610HwDevice* pEncoder = CMmfPcm16ToGsm610HwDevice::NewL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   135
	CleanupStack::PushL(pEncoder);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   136
	CMMFSwCodec& theEncode = pEncoder->Codec();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   137
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   138
	//[ create buffers of the appropriate size ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   139
	const TInt srcBufferSize   = theEncode.SourceBufferSize();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   140
	const TInt sinkBufferSize  = theEncode.SinkBufferSize();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   141
	const TInt codedBufferSize = 76*4* KNumFramesInABuffer; // number of coded buffers * size of coded buffer 63*2 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   142
	iNumCodedFrames =  KNumFramesInABuffer;                                //XXX claculate these constants soon <GK>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   143
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   144
	iScratchData    = CMMFDescriptorBuffer::NewL( codedBufferSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   145
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   146
	//[ pcm data buffers ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   147
	iRefSrcData     = CMMFDescriptorBuffer::NewL( srcBufferSize );      
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   148
	iDecodedData    = CMMFDescriptorBuffer::NewL( srcBufferSize ); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   149
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   150
	//[ coded data buffers ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   151
	iRefCodedData   = CMMFDescriptorBuffer::NewL( sinkBufferSize );  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   152
	iRefDecodedData = CMMFDescriptorBuffer::NewL( sinkBufferSize );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   153
	iCodedData      = CMMFDescriptorBuffer::NewL( sinkBufferSize );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   154
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   155
	//[ for now process only the first few buffers 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   156
	// and encode the data]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   157
	INFO_PRINTF1(_L("Encoding Frame..."));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   158
	TInt srcFileSize = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   159
	iSrcFile.Size( srcFileSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   160
	TInt buffLen =iRefSrcData->Data().MaxLength();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   161
	TInt numBuffers = srcFileSize/buffLen;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   162
	if( numBuffers > 4 )  // [ not all buffers are processed without error
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   163
		// and this is the intention probably of the test sequences]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   164
		numBuffers = 4;  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   165
	TInt badBufferCount = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   166
	TInt goodBufferCount = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   167
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   168
	for( TInt bufferCount = 0; bufferCount < numBuffers; bufferCount++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   169
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   170
		//[precondition pointers are ok]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   171
		ReadDataBufferL(iSrcFile, *iRefSrcData );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   172
		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   173
		ParseCodedDataL(iRefCodedData);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   174
		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   175
		CMMFSwCodec::TCodecProcessResult encodeRes = theEncode.ProcessL( *iRefSrcData, *iCodedData );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   176
		if( encodeRes !=  CMMFSwCodec::TCodecProcessResult::EProcessComplete  )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   177
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   178
			INFO_PRINTF1( _L("Error Failed to complete coding") );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   179
			return EFail;               
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   180
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   181
		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   182
		//[ compare results ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   183
		if( !CompareEncodeResults( iCodedData, iRefCodedData ) )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   184
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   185
			result = EFail;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   186
			badBufferCount++;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   187
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   188
		else
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   189
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   190
			goodBufferCount++;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   191
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   192
			
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   193
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   194
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   195
	 	//[ log number of good buffers & number of bad buffers ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   196
	INFO_PRINTF4(_L("Good Buffers %d, Bad Buffers %d, Total Buffers %d"), 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   197
		goodBufferCount, badBufferCount, badBufferCount+goodBufferCount );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   198
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   199
	 //[pop data from the cleanup stack ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   200
	 CleanupStack::PopAndDestroy(2, pDecoder); //pDecoder, theCodec
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   201
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   202
	 delete iRefSrcData;     // reference source data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   203
	 iRefSrcData = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   204
	 delete iRefCodedData;   //reference coded data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   205
	 iRefCodedData = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   206
	 delete iRefDecodedData; // reference decoded data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   207
	 iRefDecodedData = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   208
	 delete iCodedData;      // buffer of coded data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   209
	 iCodedData = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   210
	 delete iDecodedData;    // buffer of actual decoded data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   211
	 iDecodedData = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   212
	 delete iScratchData;    // scratch data buffer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   213
	 iScratchData = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   214
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   215
	__MM_HEAP_MARKEND;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   216
	  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   217
    return result;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   218
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   219
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   220
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   221
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   222
* ParseCodedDataL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   223
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   224
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   225
void  CTest_MMF_Gsm610::ParseCodedDataL( CMMFDataBuffer* aBuffer )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   226
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   227
   	codes frame0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   228
	codes frame1;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   229
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   230
	//[ read all the coded data into the scratch buffer from reference file ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   231
	ReadDataBufferL( iCodedFile, *iScratchData ); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   232
	TUint8* dest = const_cast<TUint8*>(aBuffer->Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   233
	TUint8* src  = const_cast<TUint8*>(iScratchData->Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   234
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   235
	//[ for all the coded frames parse these frames to proper coded form ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   236
	for( TInt count = 0; count < iNumCodedFrames; count++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   237
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   238
		// parse data to frame
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   239
		ParseFrameL( frame0, src );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   240
		ParseFrameL( frame1, src );		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   241
		//[ finally pack the two frames into the coded data buffer ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   242
		PackFrame0( &frame0, reinterpret_cast<TInt8*>(dest) );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   243
		PackFrame1( &frame1, reinterpret_cast<TInt8*>(dest) );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   244
		dest+= KGsmFrameSize;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   245
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   246
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   247
	  aBuffer->Data().SetLength(KGsmFrameSize*iNumCodedFrames);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   248
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   249
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   250
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   251
* ParseFrame
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   252
* @param aFrame this stores the gsm frame in an unpacked structure
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   253
* @param aBuffer this contains the reference file data as 76 words
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   254
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   255
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   256
void CTest_MMF_Gsm610::ParseFrameL( struct codes& aFrame, TUint8* &aSrc )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   257
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   258
	for(TInt i = 0; i < 8; i++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   259
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   260
		aFrame.LARc[i]  = static_cast<TInt16> (*aSrc++ &KAndMask8bit );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   261
		aFrame.LARc[i] |= static_cast<TInt16>(*aSrc++ << 8 );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   262
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   263
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   264
	for( TInt j = 0; j < 4; j++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   265
		{ 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   266
		aFrame.sfc[j].Nc  = static_cast<TInt16> (*aSrc++ &KAndMask8bit );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   267
		aFrame.sfc[j].Nc |= static_cast<TInt16>(*aSrc++ << 8 );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   268
		aFrame.sfc[j].bc  = static_cast<TInt16> (*aSrc++ &KAndMask8bit );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   269
		aFrame.sfc[j].bc |= static_cast<TInt16>(*aSrc++ << 8 );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   270
		aFrame.sfc[j].Mc  = static_cast<TInt16> (*aSrc++ &KAndMask8bit );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   271
		aFrame.sfc[j].Mc |= static_cast<TInt16>(*aSrc++ << 8 );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   272
		aFrame.sfc[j].xmaxc  = static_cast<TInt16> (*aSrc++ &KAndMask8bit );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   273
		aFrame.sfc[j].xmaxc |= static_cast<TInt16>(*aSrc++ << 8 );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   274
		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   275
		for( TInt k = 0; k < 13; k++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   276
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   277
			aFrame.sfc[j].xMc[k]  = static_cast<TInt16> (*aSrc++ &KAndMask8bit );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   278
			aFrame.sfc[j].xMc[k] |= static_cast<TInt16>(*aSrc++ << 8 );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   279
			}
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
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   286
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   287
* DoTestStepPreambleL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   288
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   289
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   290
enum TVerdict CTest_MMF_SwCodecDevices_U_0001::DoTestStepPreambleL(void)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   291
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   292
	TVerdict result = EPass;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   293
    //[ connect to the file server ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   294
	User::LeaveIfError( iFs.Connect());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   295
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   296
	//[ read the ref source data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   297
	if(!GetStringFromConfig(_L("SectionOne"), _L("SourceData01"), iSourceDataFile) ||
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   298
	   !GetStringFromConfig(_L("SectionOne"), _L("CodedData01"), iCodedDataFile) ||
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   299
	   !GetStringFromConfig(_L("SectionOne"), _L("DecodedData01"), iDecodedDataFile) )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   300
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   301
		return EInconclusive;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   302
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   303
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   304
	//[ open the data files]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   305
	OpenFileL(iSrcFile,iSourceDataFile );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   306
	OpenFileL(iCodedFile,iCodedDataFile );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   307
	OpenFileL(iDecodeFile,iDecodedDataFile);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   308
	return result;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   309
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   310
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   311
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   312
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   313
* CompareCodedResults
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   314
* @param aEncodedFrame
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   315
* @param aRefFrame
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   316
* @result TBool
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   317
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   318
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   319
TBool CTest_MMF_Gsm610::CompareEncodeResults( CMMFDataBuffer* aEncoded, CMMFDataBuffer* aRefFrame )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   320
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   321
    TBool result = ETrue;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   322
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   323
	//[precondition no encoded frames == refframes ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   324
	__ASSERT_DEBUG(aEncoded,Panic(EBadArgument));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   325
	__ASSERT_DEBUG(aRefFrame,Panic(EBadArgument));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   326
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   327
	TInt upperLimit = aEncoded->Data().Length()/KGsmFrameSize;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   328
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   329
	const CMMFDataBuffer* encoded = STATIC_CAST(const CMMFDataBuffer*, aEncoded);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   330
	const CMMFDataBuffer* reference = STATIC_CAST(CMMFDataBuffer*, aRefFrame);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   331
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   332
	TUint8* pFrames    = CONST_CAST(TUint8*,encoded->Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   333
	TUint8* pRefFrames = CONST_CAST(TUint8*,reference->Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   334
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   335
	TInt badFrameCount = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   336
	TInt goodFrameCount = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   337
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   338
    //[ for all frames ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   339
    for( TInt index = 0; index < upperLimit; index++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   340
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   341
	 //[ compare src and ref frame]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   342
	   if( !CompareGsm610Frames( pFrames, pRefFrames ))
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   343
		   {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   344
		   result = EFalse;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   345
		   badFrameCount++;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   346
		   INFO_PRINTF2(_L("Bad Frame Number: %d"), index );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   347
		   }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   348
	   else{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   349
		   goodFrameCount++;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   350
		   }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   351
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   352
	    //[ increment frame pointers by size of gsmencoded frame  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   353
	    pFrames    += KGsmFrameSize;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   354
		pRefFrames += KGsmFrameSize;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   355
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   356
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   357
		 	//[ log number of good frames & number of bad frames ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   358
	INFO_PRINTF4(_L("Good Frames %d, Bad Frames %d, Total Frames %d"), 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   359
		goodFrameCount, badFrameCount, badFrameCount+goodFrameCount );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   360
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   361
	 return result ;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   362
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   363
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   364
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   365
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   366
* CompareGsm610Frames
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   367
* This function compares two encoded gsm610 frames
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   368
* @result TBool Frames are the same or different
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   369
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   370
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   371
TBool CTest_MMF_Gsm610::CompareGsm610Frames( TUint8* aGsmFrame,TUint8* aRefGsmFrame )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   372
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   373
	 TBool result = ETrue;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   374
	 ASSERT( aGsmFrame );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   375
	 __ASSERT_DEBUG(aGsmFrame,Panic(EBadArgument));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   376
	 __ASSERT_DEBUG(aRefGsmFrame,Panic(EBadArgument));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   377
	 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   378
	 codes codeBuf0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   379
	 codes codeBuf1;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   380
	 codes refCodeBuf0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   381
	 codes refCodeBuf1; 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   382
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   383
	 UnpackFrame0(&codeBuf0, aGsmFrame );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   384
	 UnpackFrame1(&codeBuf1, aGsmFrame );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   385
	 UnpackFrame0(&refCodeBuf0, aRefGsmFrame );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   386
	 UnpackFrame1(&refCodeBuf1, aRefGsmFrame );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   387
    
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   388
	if( !Compare( codeBuf0, refCodeBuf0 ) ||
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   389
		!Compare( codeBuf1, refCodeBuf1) )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   390
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   391
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   392
		 //LogGsmFrames( codeBuf0, refCodeBuf0 ); // add for debug reasons
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   393
		 //LogGsmFrames( codeBuf1, refCodeBuf1 ); // add for debugging reasons
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   394
		result = EFalse;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   395
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   396
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   397
	 return result ;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   398
	}
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
* LogGsmFrames
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   403
* @param aGsmFrame
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   404
* @param aRefGsmFrame 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   405
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   406
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   407
void  CTest_MMF_Gsm610::LogGsmFrames( codes& aGsmFrame, codes& aRefGsmFrame )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   408
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   409
    //[ print the quantized lar coefficients ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   410
   	INFO_PRINTF1(_L("Coded Frame:")); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   411
	LogGsmFrame( aGsmFrame );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   412
	INFO_PRINTF1(_L("Reference Frame:")); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   413
	LogGsmFrame( aRefGsmFrame );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   414
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   415
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   416
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   417
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   418
* LogGsmFrame
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   419
* prints a GsmFrame to the test log
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   420
* @param aFrame 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   421
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   422
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   423
void  CTest_MMF_Gsm610::LogGsmFrame ( codes& aFrame )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   424
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   425
	INFO_PRINTF2(_L("LARc[0] = %d"), aFrame.LARc[0]); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   426
	INFO_PRINTF2(_L("LARc[1] = %d"), aFrame.LARc[1]);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   427
	INFO_PRINTF2(_L("LARc[2] = %d"), aFrame.LARc[2]);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   428
	INFO_PRINTF2(_L("LARc[3] = %d"), aFrame.LARc[3]);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   429
	INFO_PRINTF2(_L("LARc[4] = %d"), aFrame.LARc[4]); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   430
	INFO_PRINTF2(_L("LARc[5] = %d"), aFrame.LARc[5]);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   431
	INFO_PRINTF2(_L("LARc[6] = %d"), aFrame.LARc[6]);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   432
	INFO_PRINTF2(_L("LARc[7] = %d"), aFrame.LARc[7]);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   433
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   434
	//[ for each sub frame print its data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   435
	for( TInt i = 0; i < 4; i++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   436
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   437
         INFO_PRINTF2(_L("Nc = %d"), aFrame.sfc[i].Nc); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   438
		 INFO_PRINTF2(_L("bc = %d"), aFrame.sfc[i].bc);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   439
		 INFO_PRINTF2(_L("Mc= %d"), aFrame.sfc[i].Mc);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   440
		 INFO_PRINTF2(_L("xmaxc = %d"), aFrame.sfc[i].xmaxc);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   441
		 INFO_PRINTF2(_L("xMc[0] = %d"), aFrame.sfc[i].xMc[0]);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   442
		 INFO_PRINTF2(_L("xMc[1] = %d"), aFrame.sfc[i].xMc[1]);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   443
		 INFO_PRINTF2(_L("xMc[2] = %d"), aFrame.sfc[i].xMc[2]);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   444
		 INFO_PRINTF2(_L("xMc[3] = %d"), aFrame.sfc[i].xMc[3]);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   445
		 INFO_PRINTF2(_L("xMc[4] = %d"), aFrame.sfc[i].xMc[4]);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   446
		 INFO_PRINTF2(_L("xMc[5] = %d"), aFrame.sfc[i].xMc[5]);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   447
		 INFO_PRINTF2(_L("xMc[6] = %d"), aFrame.sfc[i].xMc[6]);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   448
		 INFO_PRINTF2(_L("xMc[7] = %d"), aFrame.sfc[i].xMc[7]);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   449
		 INFO_PRINTF2(_L("xMc[8] = %d"), aFrame.sfc[i].xMc[8]);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   450
		 INFO_PRINTF2(_L("xMc[9] = %d"), aFrame.sfc[i].xMc[9]);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   451
		 INFO_PRINTF2(_L("xMc[10] = %d"), aFrame.sfc[i].xMc[10]);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   452
		 INFO_PRINTF2(_L("xMc[11] = %d"), aFrame.sfc[i].xMc[11]);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   453
		 INFO_PRINTF2(_L("xMc[12] = %d"), aFrame.sfc[i].xMc[12]);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   454
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   455
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   456
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   457
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   458
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   459
* Compare
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   460
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   461
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   462
TBool CTest_MMF_Gsm610::Compare( codes& aFrame1, codes& aFrame2 )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   463
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   464
     TBool result = ETrue;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   465
     
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   466
	if( (aFrame1.LARc[0] != aFrame2.LARc[0] ) ||
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   467
	    (aFrame1.LARc[1] != aFrame2.LARc[1] ) ||
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   468
	    (aFrame1.LARc[2] != aFrame2.LARc[2] ) ||
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   469
	    (aFrame1.LARc[3] != aFrame2.LARc[3] ) ||
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   470
	    (aFrame1.LARc[4] != aFrame2.LARc[4] ) ||
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   471
	    (aFrame1.LARc[5] != aFrame2.LARc[5] ) ||
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   472
	    (aFrame1.LARc[6] != aFrame2.LARc[6] ) ||
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   473
	    (aFrame1.LARc[7] != aFrame2.LARc[7] ) )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   474
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   475
		result = EFalse;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   476
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   477
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   478
	for( TInt i = 0; i < 4; i++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   479
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   480
		if( 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   481
         (aFrame1.sfc[i].Nc !=  aFrame2.sfc[i].Nc) ||
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   482
		 (aFrame1.sfc[i].bc !=  aFrame2.sfc[i].bc) ||
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   483
		 (aFrame1.sfc[i].Mc !=  aFrame2.sfc[i].Mc) ||
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   484
		 (aFrame1.sfc[i].xmaxc !=	 aFrame2.sfc[i].xmaxc) ||
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   485
		 (aFrame1.sfc[i].xMc[0] != aFrame2.sfc[i].xMc[0]) ||
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   486
		 (aFrame1.sfc[i].xMc[1] !=	aFrame2.sfc[i].xMc[1]) ||
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   487
		 (aFrame1.sfc[i].xMc[2] !=	aFrame2.sfc[i].xMc[2]) ||
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   488
		 (aFrame1.sfc[i].xMc[3] !=	aFrame2.sfc[i].xMc[3]) ||
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   489
		 (aFrame1.sfc[i].xMc[4] !=	aFrame2.sfc[i].xMc[4]) ||
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   490
		 (aFrame1.sfc[i].xMc[5] !=	aFrame2.sfc[i].xMc[5]) ||
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   491
		 (aFrame1.sfc[i].xMc[6] !=	aFrame2.sfc[i].xMc[6]) ||
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   492
		 (aFrame1.sfc[i].xMc[7] !=	aFrame2.sfc[i].xMc[7]) ||
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   493
		 (aFrame1.sfc[i].xMc[8] !=	aFrame2.sfc[i].xMc[8]) ||
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   494
		 (aFrame1.sfc[i].xMc[9] !=	aFrame2.sfc[i].xMc[9]) ||
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   495
		 (aFrame1.sfc[i].xMc[10] !=	aFrame2.sfc[i].xMc[10]) ||
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   496
		 (aFrame1.sfc[i].xMc[11] !=	aFrame2.sfc[i].xMc[11]) ||
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   497
		 (aFrame1.sfc[i].xMc[12] !=	aFrame2.sfc[i].xMc[12]))
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   498
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   499
			result = EFail;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   500
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   501
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   502
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   503
	 return result;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   504
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   505
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   506
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   507
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   508
* CompareCodedResults
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   509
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   510
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   511
TBool CTest_MMF_Gsm610::CompareDecodeResults(CMMFDataBuffer* aEncoded, CMMFDataBuffer* aRefFrame )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   512
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   513
    TBool result = ETrue;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   514
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   515
    //[ precondition the buffers are of the same length ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   516
	__ASSERT_DEBUG(aEncoded,Panic(EBadArgument));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   517
	__ASSERT_DEBUG(aRefFrame,Panic(EBadArgument));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   518
	__ASSERT_DEBUG(aEncoded->Data().MaxLength() == aRefFrame->Data().MaxLength(),Panic(EBadArgument));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   519
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   520
	TUint8 *pResults = CONST_CAST(TUint8*,aEncoded->Data().Ptr());  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   521
	TUint8 *pRefData = CONST_CAST(TUint8*,aRefFrame->Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   522
	TInt numResults  = aEncoded->Data().MaxLength(); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   523
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   524
    if (Mem::Compare( pResults,numResults,pRefData,numResults)!=0)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   525
        {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   526
		result = EFalse;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   527
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   528
  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   529
    return result ;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   530
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   531
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   532
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   533
* ReadDataL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   534
* Reads entire data file into buffer 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   535
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   536
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   537
void CTest_MMF_Gsm610::ReadDataL( CMMFDataBuffer*& aBuffer, const TDesC& aFile1 )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   538
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   539
	TFileName fileName = GetSuite()->DefaultPath();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   540
	fileName.Append(aFile1);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   541
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   542
	RFile file1;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   543
	User::LeaveIfError(file1.Open(iFs, fileName, EFileShareAny | EFileStream | EFileRead));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   544
	CleanupClosePushL(file1);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   545
	TInt fileSize = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   546
	User::LeaveIfError(file1.Size(fileSize));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   547
	aBuffer = CMMFDescriptorBuffer::NewL(fileSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   548
	User::LeaveIfError(file1.Read( aBuffer->Data(),fileSize));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   549
	CleanupStack::PopAndDestroy(1); //file1
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   550
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   551
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   552
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   553
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   554
* OpenFileL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   555
* @param aFile
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   556
* @param aFileName
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   557
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   558
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   559
void CTest_MMF_Gsm610::OpenFileL( RFile& aFile, const TDesC& aFileName )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   560
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   561
	User::LeaveIfError(aFile.Open(iFs, aFileName, EFileShareAny | EFileStream | EFileRead));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   562
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   563
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   564
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   565
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   566
* CloseFileL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   567
* @param aFile
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   568
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   569
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   570
void CTest_MMF_Gsm610::CloseFileL( RFile& aFile )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   571
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   572
	aFile.Close();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   573
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   574
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   575
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   576
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   577
* ReadDataBuffer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   578
* @param aFile
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   579
* assumes file reads sufficient data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   580
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   581
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   582
void CTest_MMF_Gsm610::ReadDataBufferL( const RFile& aFile, CMMFDataBuffer& aBuffer )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   583
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   584
	//[ The read will set the length of the descriptor to the number of bytes read]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   585
	User::LeaveIfError(aFile.Read( aBuffer.Data(),aBuffer.Data().MaxLength() ));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   586
	INFO_PRINTF2(_L("Bytes read = %d"), aBuffer.Data().Length() );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   587
   	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   588
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   589
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   590
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   591
* FillPcmBuffer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   592
* @param aSrcBuffer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   593
* Fill a buffer with a sine wave
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   594
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   595
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   596
void CTest_MMF_Gsm610::FillPcmBuffer( CMMFDataBuffer& aSrcBuffer )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   597
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   598
	//fill the Src Buffer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   599
	 TUint8* pDst = CONST_CAST(TUint8*,aSrcBuffer.Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   600
	 TInt length =  aSrcBuffer.Data().MaxLength();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   601
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   602
	 //[encode the data]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   603
	 TInt16 srcValue = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   604
	 TReal val   = 0.0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   605
	 TReal theta = 0.0; 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   606
	 for(TInt i=0; i<length/2; i++)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   607
		 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   608
		 //[ assign data and place in buffer]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   609
		  theta = KPi*i/5; // fundamental of 800hz sampled @8khz has 20 db or
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   610
		                      // better reproduction through gsm codec
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   611
		  User::LeaveIfError(Math::Sin(val,theta));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   612
          srcValue = static_cast<TInt16>( 1000 * val );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   613
	      *pDst++ = static_cast<TUint8>( srcValue & KAndMask8bit);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   614
		  *pDst++ = static_cast<TUint8>((srcValue >> 8) & KAndMask8bit );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   615
		  //INFO_PRINTF2(_L("Sine = %d"), srcValue );  //uncomment for debugging purposes     
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   616
		 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   617
    
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   618
	 aSrcBuffer.Data().SetLength(length);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   619
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   620
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   621
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   622
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   623
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   624
* DoTestStepPostambleL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   625
* @result TVerdict
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   626
* 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   627
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   628
TVerdict CTest_MMF_SwCodecDevices_U_0001::DoTestStepPostambleL(void)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   629
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   630
	// close files
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   631
	CloseFileL( iSrcFile );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   632
	CloseFileL( iCodedFile );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   633
	CloseFileL( iDecodeFile );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   634
    //[ clean up the buffers etc ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   635
	delete iRefSrcData;     // reference source data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   636
	delete iRefCodedData;   //reference coded data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   637
	delete iRefDecodedData; // reference decoded data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   638
	delete iCodedData;      // buffer of coded data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   639
	delete iDecodedData;    // buffer of actual decoded data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   640
	delete iScratchData;    // scratch data buffer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   641
	return EPass;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   642
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   643
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   644
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   645
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   646
* UnpackFrame0
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   647
* @param aCodeBuf 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   648
* @param pbuf
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   649
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   650
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   651
void CTest_MMF_Gsm610::UnpackFrame0(codes* aCodeBuf,  TUint8* pbuf)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   652
    {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   653
    TInt16* LAR = aCodeBuf->LARc;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   654
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   655
    // unpack the LAR[0..7] from the first 4.5 bytes
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   656
    LAR[0] = (TInt16)((pbuf[0] & 0x3F));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   657
    LAR[1] = (TInt16)(((pbuf[0] & 0xC0) >> 6) | ((pbuf[1] & 0x0F) << 2));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   658
    LAR[2] = (TInt16)(((pbuf[1] & 0xF0) >> 4) | ((pbuf[2] & 0x01) << 4));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   659
    LAR[3] = (TInt16)(((pbuf[2] & 0x3E) >> 1));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   660
    LAR[4] = (TInt16)(((pbuf[2] & 0xC0) >> 6) | ((pbuf[3] & 0x03) << 2));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   661
    LAR[5] = (TInt16)(((pbuf[3] & 0x3C) >> 2));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   662
    LAR[6] = (TInt16)(((pbuf[3] & 0xC0) >> 6) | ((pbuf[4] & 0x01) << 2));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   663
    LAR[7] = (TInt16)(((pbuf[4] & 0x0E) >> 1));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   664
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   665
    // unpack Nc, bc, Mc, xmaxc, and xMc for each of the 4 sub-frames
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   666
    for(TInt i = 0; i < 4; i++)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   667
        {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   668
        struct sfcodes& c = aCodeBuf->sfc[i];
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   669
#define sfb(x) (pbuf[4+i*7+x])
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   670
        c.Nc = (TInt16)(((sfb(0) & 0xF0) >> 4) | ((sfb(1) & 0x07) << 4));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   671
        c.bc = (TInt16)(((sfb(1) & 0x18) >> 3));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   672
        c.Mc = (TInt16)(((sfb(1) & 0x60) >> 5));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   673
        c.xmaxc = (TInt16)(((sfb(1) & 0x80) >> 7) | ((sfb(2) & 0x1F) << 1));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   674
        c.xMc[0] = (TInt16)(((sfb(2) & 0xE0) >> 5));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   675
        c.xMc[1] = (TInt16)((sfb(3) & 0x07));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   676
        c.xMc[2] = (TInt16)(((sfb(3) & 0x3C) >> 3));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   677
        c.xMc[3] = (TInt16)(((sfb(3) & 0xC0) >> 6) | ((sfb(4) & 0x01) << 2));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   678
        c.xMc[4] = (TInt16)(((sfb(4) & 0x0E) >> 1));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   679
        c.xMc[5] = (TInt16)(((sfb(4) & 0x70) >> 4));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   680
        c.xMc[6] = (TInt16)(((sfb(4) & 0x80) >> 7) | ((sfb(5) & 0x03) << 1));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   681
        c.xMc[7] = (TInt16)(((sfb(5) & 0x1C) >> 2));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   682
        c.xMc[8] = (TInt16)(((sfb(5) & 0xE0) >> 5));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   683
        c.xMc[9] = (TInt16)((sfb(6) & 0x07));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   684
        c.xMc[10] = (TInt16)(((sfb(6) & 0x38) >> 3));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   685
        c.xMc[11] = (TInt16)(((sfb(6) & 0xC0) >> 6) | ((sfb(7) & 0x01) << 2));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   686
        c.xMc[12] = (TInt16)(((sfb(7) & 0x0E) >> 1));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   687
#undef sfb
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   688
        }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   689
    }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   690
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   691
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   692
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   693
* UnpackFrame1
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   694
* @param aCodeBuf 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   695
* @param pbuf
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   696
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   697
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   698
void CTest_MMF_Gsm610::UnpackFrame1(struct codes* aCodeBuf, TUint8* pbuf)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   699
{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   700
    TInt16* LAR = aCodeBuf->LARc;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   701
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   702
    // unpack the LAR[0..7] from the first 4.5 bytes
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   703
    LAR[0] = (TInt16)(((pbuf[32] & 0xF0) >> 4) | ((pbuf[33] & 0x03) << 4));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   704
    LAR[1] = (TInt16)(((pbuf[33] & 0xFC) >> 2));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   705
    LAR[2] = (TInt16)(((pbuf[34] & 0x1F)));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   706
    LAR[3] = (TInt16)(((pbuf[34] & 0xE0) >> 5) | ((pbuf[35] & 0x03) << 3));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   707
    LAR[4] = (TInt16)(((pbuf[35] & 0x3C) >> 2));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   708
    LAR[5] = (TInt16)(((pbuf[35] & 0xC0) >> 6) | ((pbuf[36] & 0x03) << 2));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   709
    LAR[6] = (TInt16)(((pbuf[36] & 0x1C) >> 2));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   710
    LAR[7] = (TInt16)(((pbuf[36] & 0xE0) >> 5));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   711
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   712
    // unpack Nc, bc, Mc, xmaxc, and xMc for each of the 4 sub-frames
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   713
    for(TInt i = 0; i < 4; i++)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   714
        {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   715
        struct sfcodes& c = aCodeBuf->sfc[i];
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   716
#define sfb(x) (pbuf[37+i*7+x])
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   717
        c.Nc = (TInt16)(sfb(0) & 0x7F);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   718
        c.bc = (TInt16)(((sfb(0) & 0x80) >> 7) | ((sfb(1) & 0x01) << 1));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   719
        c.Mc = (TInt16)(((sfb(1) & 0x06) >> 1));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   720
        c.xmaxc = (TInt16)(((sfb(1) & 0xF8) >> 3) | ((sfb(2) & 0x01) << 5));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   721
        c.xMc[0] = (TInt16)(((sfb(2) & 0x0E) >> 1));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   722
        c.xMc[1] = (TInt16)(((sfb(2) & 0x70) >> 4));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   723
        c.xMc[2] = (TInt16)(((sfb(2) & 0x80) >> 7) | ((sfb(3) & 0x03) << 1));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   724
        c.xMc[3] = (TInt16)(((sfb(3) & 0x1C) >> 2));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   725
        c.xMc[4] = (TInt16)(((sfb(3) & 0xE0) >> 5));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   726
        c.xMc[5] = (TInt16)(((sfb(4) & 0x07)));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   727
        c.xMc[6] = (TInt16)(((sfb(4) & 0x38) >> 3));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   728
        c.xMc[7] = (TInt16)(((sfb(4) & 0xC0) >> 6) | ((sfb(5) & 0x01) << 2));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   729
        c.xMc[8] = (TInt16)(((sfb(5) & 0x0E) >> 1));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   730
        c.xMc[9] = (TInt16)(((sfb(5) & 0x70) >> 4));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   731
        c.xMc[10] = (TInt16)(((sfb(5) & 0x80) >> 7) | ((sfb(6) & 0x03) << 1));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   732
        c.xMc[11] = (TInt16)(((sfb(6) & 0x1C) >> 2));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   733
        c.xMc[12] = (TInt16)(((sfb(6) & 0xE0) >> 5));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   734
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   735
#undef sfb
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   736
        }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   737
    }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   738
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   739
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   740
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   741
* PackFrame0 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   742
* Pack the codewords of the even frame into pack buffer.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   743
* Packing as in MS gsm610 encoder.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   744
* @param aCodeBuf  Code words for one speech frame.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   745
* @param pbuf the output buffer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   746
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   747
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   748
void CTest_MMF_Gsm610::PackFrame0(struct codes* aCodeBuf, TInt8* pbuf)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   749
    {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   750
    TInt16* LAR = aCodeBuf->LARc;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   751
    
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   752
    // pack the LARc[0..7] into the first 4.5 bytes
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   753
    *pbuf++ = (TUint8)(((LAR[0]     ) & 0x3F) | ((LAR[1] << 6) & 0xC0));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   754
    *pbuf++ = (TUint8)(((LAR[1] >> 2) & 0x0F) | ((LAR[2] << 4) & 0xF0));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   755
    *pbuf++ = (TUint8)(((LAR[2] >> 4) & 0x01) | ((LAR[3] << 1) & 0x3E) | ((LAR[4] << 6) & 0xC0));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   756
    *pbuf++ = (TUint8)(((LAR[4] >> 2) & 0x03) | ((LAR[5] << 2) & 0x3C) | ((LAR[6] << 6) & 0xC0));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   757
    *pbuf   = (TUint8)(((LAR[6] >> 2) & 0x01) | ((LAR[7] << 1) & 0x0E));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   758
    
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   759
    // pack Nc, bc, Mc, xmaxc, and xMc for each of the 4 sub-frames
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   760
    for(TInt i = 0; i < 4; i++)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   761
        {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   762
        struct sfcodes& c = aCodeBuf->sfc[i];
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   763
        *pbuf++ |= ((c.Nc << 4) & 0xF0);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   764
        *pbuf++ = (TUint8)(((c.Nc >> 4) & 0x07) | ((c.bc << 3) & 0x18) | ((c.Mc << 5) & 0x60) | ((c.xmaxc << 7) & 0x80));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   765
        *pbuf++ = (TUint8)(((c.xmaxc >> 1) & 0x1F) | ((c.xMc[0] << 5) & 0xE0));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   766
        *pbuf++ = (TUint8)((c.xMc[1] & 0x07) | ((c.xMc[2] << 3) & 0x38) | ((c.xMc[3] << 6) & 0xC0));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   767
        *pbuf++ = (TUint8)(((c.xMc[3] >> 2) & 0x01) | ((c.xMc[4] << 1) & 0x0E) | ((c.xMc[5] << 4) & 0x70) | ((c.xMc[6] << 7) & 0x80));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   768
        *pbuf++ = (TUint8)(((c.xMc[6] >> 1) & 0x03) | ((c.xMc[7] << 2) & 0x1C) | ((c.xMc[8] << 5) & 0xE0));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   769
        *pbuf++ = (TUint8)((c.xMc[9] & 0x07) | ((c.xMc[10] << 3) & 0x38) | ((c.xMc[11] << 6) & 0xC0));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   770
        *pbuf   = (TUint8)(((c.xMc[11] >> 2) & 0x01) | ((c.xMc[12] << 1) & 0x0E));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   771
        }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   772
    }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   773
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   774
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   775
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   776
* PackFrame1 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   777
* Pack the codewords of the even frame into pack buffer.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   778
* Packing as in MS gsm610 encoder.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   779
* @param aCodeBuf  Code words for one speech frame.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   780
* @param pbuf the output buffer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   781
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   782
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   783
void CTest_MMF_Gsm610::PackFrame1(struct codes* aCodeBuf, TInt8* pbuf)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   784
    {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   785
    TInt16* LAR = aCodeBuf->LARc;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   786
    
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   787
	pbuf += (PACKSIZE / 2);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   788
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   789
    // pack the LARc[0..7] into the first 4.5 bytes, starting with the msb of the first byte
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   790
    *pbuf++ = (TUint8) (pbuf[0] | ((LAR[0] << 4) & 0xF0));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   791
    *pbuf++ = (TUint8)(((LAR[0] >> 4) & 0x03) | ((LAR[1] << 2) & 0xFC));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   792
    *pbuf++ = (TUint8)(((LAR[2]     ) & 0x1F) | ((LAR[3] << 5) & 0xE0));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   793
    *pbuf++ = (TUint8)(((LAR[3] >> 3) & 0x03) | ((LAR[4] << 2) & 0x3C) | ((LAR[5] << 6) & 0xC0));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   794
    *pbuf++ = (TUint8)(((LAR[5] >> 2) & 0x03) | ((LAR[6] << 2) & 0x1C) | ((LAR[7] << 5) & 0xE0));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   795
    
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   796
    // pack Nc, bc, Mc, xmaxc, and xMc for each of the 4 sub-frames
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   797
    for(TInt i = 0; i < 4; i++)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   798
        {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   799
        struct sfcodes& c = aCodeBuf->sfc[i];
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   800
        *pbuf++ = (TUint8)((c.Nc & 0x7F) | ((c.bc << 7) & 0x80));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   801
        *pbuf++ = (TUint8)(((c.bc >> 1) & 0x01) | ((c.Mc << 1) & 0x06) | ((c.xmaxc << 3) & 0xF8));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   802
        *pbuf++ = (TUint8)(((c.xmaxc >> 5) & 0x01) | ((c.xMc[0] << 1) & 0x0E) | ((c.xMc[1] << 4) & 0x70) | ((c.xMc[2] << 7) & 0x80));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   803
        *pbuf++ = (TUint8)(((c.xMc[2] >> 1) & 0x03) | ((c.xMc[3] << 2) & 0x1C) | ((c.xMc[4] << 5) & 0xE0));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   804
        *pbuf++ = (TUint8)(((c.xMc[5]) & 0x07) | ((c.xMc[6] << 3) & 0x38) | ((c.xMc[7] << 6) & 0xC0));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   805
        *pbuf++ = (TUint8)(((c.xMc[7] >> 2) & 0x01) | ((c.xMc[8] << 1) & 0x0E) | ((c.xMc[9] << 4) & 0x70) | ((c.xMc[10] << 7) & 0x80));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   806
        *pbuf++ = (TUint8)(((c.xMc[10] >> 1) & 0x03) | ((c.xMc[11] << 2) & 0x1C) | ((c.xMc[12] << 5) & 0xE0));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   807
        }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   808
    }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   809
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   810
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   811
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   812
* CTest_MMF_SwCodecDevices_U_0001
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   813
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   814
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   815
CTest_MMF_SwCodecDevices_U_0002::CTest_MMF_SwCodecDevices_U_0002()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   816
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   817
		// store the name of this test case
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   818
		// this is the name that is used by the script file
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   819
		iTestStepName = _L("MM-MMF-SWCODECDEVICES-U-0002-HP");
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   820
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   821
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   822
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   823
* CTest_MMF_SwCodecDevices_U_0001
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   824
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   825
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   826
CTest_MMF_SwCodecDevices_U_0002::~CTest_MMF_SwCodecDevices_U_0002()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   827
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   828
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   829
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   830
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   831
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   832
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   833
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   834
* DoTestStepL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   835
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   836
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   837
TVerdict CTest_MMF_SwCodecDevices_U_0002::DoTestStepL()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   838
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   839
	__MM_HEAP_MARK;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   840
	TVerdict result = EPass ;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   841
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   842
	 CMmfGsm610ToPcm16HwDevice* pDecoder = CMmfGsm610ToPcm16HwDevice::NewL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   843
     CleanupStack::PushL(pDecoder);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   844
	 //[ note this reference should be a ptr ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   845
     CMMFSwCodec& theCodec = pDecoder->Codec();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   846
 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   847
	 //[ create buffers of the appropriate size ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   848
	 const TInt srcBufferSize  = theCodec.SourceBufferSize();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   849
	 const TInt sinkBufferSize = theCodec.SinkBufferSize();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   850
	 const TInt codedBufferSize = 76*4* KNumFramesInABuffer; // number of coded buffers * size of coded buffer 63*2 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   851
	 iNumCodedFrames =  KNumFramesInABuffer;                                //XXX claculate these constants soon <GK>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   852
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   853
	 iScratchData    = CMMFDescriptorBuffer::NewL( codedBufferSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   854
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   855
	 iRefCodedData   = CMMFDescriptorBuffer::NewL( srcBufferSize );  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   856
	 iCodedData      = CMMFDescriptorBuffer::NewL( srcBufferSize );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   857
	 iRefDecodedData = CMMFDescriptorBuffer::NewL( sinkBufferSize );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   858
	 iDecodedData    = CMMFDescriptorBuffer::NewL( sinkBufferSize); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   859
	 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   860
	 //[ for now process only the first buffer ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   861
	 //[encode the data]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   862
	 INFO_PRINTF1(_L("Decoding Frames..."));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   863
	 TInt codedFileSize = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   864
	 iCodedFile.Size( codedFileSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   865
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   866
     TInt numBuffers = codedFileSize/srcBufferSize;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   867
	 if(numBuffers > 4 )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   868
		 numBuffers = 4;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   869
	 TInt badBufferCount = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   870
	 TInt goodBufferCount = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   871
	 for( TInt bufferCount = 0; bufferCount < numBuffers; bufferCount++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   872
		 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   873
		 ReadDataBufferL(iDecodeFile, *iRefDecodedData );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   874
		 ParseCodedDataL(iCodedData);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   875
 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   876
		 CMMFSwCodec::TCodecProcessResult decodeRes = theCodec.ProcessL( *iCodedData, *iDecodedData );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   877
		 if( decodeRes !=  CMMFSwCodec::TCodecProcessResult::EProcessComplete  )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   878
			 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   879
			 INFO_PRINTF1( _L("Error Failed to complete decoding") );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   880
			 return EFail;               
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   881
			 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   882
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   883
		 //[ compare results ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   884
		 if(!CompareDecodeResults( iDecodedData, iRefDecodedData ))
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   885
			 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   886
			 result = EFail;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   887
		     badBufferCount++;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   888
			 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   889
		 else
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   890
			 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   891
			 goodBufferCount++;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   892
			 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   893
		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   894
		 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   895
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   896
	 	//[ log number of good frames & number of bad frames ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   897
	INFO_PRINTF4(_L("Good Frames %d, Bad Frames %d, Total Frames %d"), 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   898
		goodBufferCount, badBufferCount, badBufferCount+goodBufferCount );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   899
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   900
	 //[pop data from the cleanup stack ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   901
	 CleanupStack::PopAndDestroy(pDecoder); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   902
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   903
	 delete iRefCodedData;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   904
	 iRefCodedData = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   905
	 delete iRefDecodedData;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   906
	 iRefDecodedData = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   907
	 delete iDecodedData; 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   908
	 iDecodedData = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   909
	 delete iCodedData ;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   910
	 iCodedData = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   911
	 delete iScratchData;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   912
	 iScratchData = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   913
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   914
	__MM_HEAP_MARKEND;                         
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
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   922
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   923
enum TVerdict CTest_MMF_SwCodecDevices_U_0002::DoTestStepPreambleL(void)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   924
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   925
	TVerdict result = EPass;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   926
    //[ connect to the file server ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   927
	User::LeaveIfError( iFs.Connect());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   928
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   929
	//[ read the ref source data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   930
	if(!GetStringFromConfig(_L("SectionOne"), _L("SourceData01"), iSourceDataFile) ||
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   931
	   !GetStringFromConfig(_L("SectionOne"), _L("CodedData01"), iCodedDataFile) ||
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   932
	   !GetStringFromConfig(_L("SectionOne"), _L("DecodedData01"), iDecodedDataFile) )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   933
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   934
		return EInconclusive;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   935
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   936
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   937
	//[ open the data files]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   938
	OpenFileL(iSrcFile,iSourceDataFile );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   939
	OpenFileL(iCodedFile,iCodedDataFile );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   940
	OpenFileL(iDecodeFile,iDecodedDataFile);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   941
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   942
	iScratchData = CMMFDescriptorBuffer::NewL(KCodedBufferSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   943
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   944
	return result;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   945
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   946
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   947
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   948
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   949
* DoTestStepPostambleL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   950
* @result TVerdict
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   951
* 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   952
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   953
TVerdict CTest_MMF_SwCodecDevices_U_0002::DoTestStepPostambleL(void)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   954
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   955
	// close files
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   956
	CloseFileL( iCodedFile );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   957
	CloseFileL( iDecodeFile );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   958
    //[ clean up the buffers etc ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   959
	delete iRefSrcData;     // reference source data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   960
	delete iRefCodedData;   //reference coded data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   961
	delete iRefDecodedData; // refernce decoded data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   962
	delete iCodedData;      // buffer of coded data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   963
	delete iDecodedData;    // buffer of actual decoded data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   964
	delete iScratchData;    // scratch data buffer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   965
	return EPass;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   966
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   967
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   968
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   969
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   970
* CTest_MMF_SwCodecDevices_U_0003
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   971
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   972
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   973
CTest_MMF_SwCodecDevices_U_0003::CTest_MMF_SwCodecDevices_U_0003()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   974
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   975
		// store the name of this test case
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   976
		// this is the name that is used by the script file
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   977
		iTestStepName = _L("MM-MMF-SWCODECDEVICES-U-0003-HP");
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   978
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   979
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   980
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   981
* ~CTest_MMF_SwCodecDevices_U_0003
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   982
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   983
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   984
CTest_MMF_SwCodecDevices_U_0003::~CTest_MMF_SwCodecDevices_U_0003()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   985
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   986
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   987
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   988
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   989
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   990
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   991
* DoTestStepL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   992
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   993
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   994
TVerdict CTest_MMF_SwCodecDevices_U_0003::DoTestStepL()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   995
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   996
	__MM_HEAP_MARK;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   997
	TVerdict result = EPass ;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   998
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   999
	 CMmfGsm610ToPcm16HwDevice* pDecoder = CMmfGsm610ToPcm16HwDevice::NewL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1000
     CleanupStack::PushL(pDecoder);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1001
	 //[ note this reference should be a ptr ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1002
     CMMFSwCodec& theCodec = pDecoder->Codec();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1003
 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1004
	 // do the same for the inverse operation
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1005
	 CMmfPcm16ToGsm610HwDevice* pEncoder = CMmfPcm16ToGsm610HwDevice::NewL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1006
     CleanupStack::PushL(pEncoder);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1007
     CMMFSwCodec& theEncode = pEncoder->Codec();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1008
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1009
	 //[ create buffers of the appropriate size ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1010
	 const TInt srcBufferSize = theEncode.SourceBufferSize();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1011
	 const TInt sinkBufferSize = theEncode.SinkBufferSize();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1012
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1013
	 iRefSrcData     = CMMFDescriptorBuffer::NewL( srcBufferSize );   
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1014
	 iRefCodedData   = CMMFDescriptorBuffer::NewL( sinkBufferSize );  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1015
	 iRefDecodedData = CMMFDescriptorBuffer::NewL( srcBufferSize );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1016
	 iCodedData      = CMMFDescriptorBuffer::NewL( sinkBufferSize );   
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1017
	 iDecodedData    = CMMFDescriptorBuffer::NewL( srcBufferSize ); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1018
	 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1019
     //[ now get a sine wave of 800hz, code and decode and
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1020
	 // compare the results ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1021
	 FillPcmBuffer( *iRefSrcData );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1022
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1023
	 // encode
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1024
	CMMFSwCodec::TCodecProcessResult encodeRes = theEncode.ProcessL( *iRefSrcData, *iCodedData );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1025
	 if( encodeRes !=  CMMFSwCodec::TCodecProcessResult::EProcessComplete  )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1026
		 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1027
		 INFO_PRINTF1( _L("Error Failed to complete coding") );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1028
		 return EFail;               
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1029
		 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1030
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1031
	 //decode
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1032
	 CMMFSwCodec::TCodecProcessResult decodeRes = theCodec.ProcessL( *iCodedData, *iDecodedData );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1033
	 if( decodeRes !=  CMMFSwCodec::TCodecProcessResult::EProcessComplete  )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1034
		 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1035
		 INFO_PRINTF1( _L("Error Failed to complete decoding") );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1036
		 return EFail;               
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1037
		 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1038
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1039
	 //[ because the codec overwrites its input regenerate it ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1040
	 FillPcmBuffer( *iRefSrcData );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1041
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1042
     //[ NOW COMPARE THE RESULTS DISTORTION < 18 DB ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1043
	 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1044
	 TUint8 *pResults = (TUint8*)(iDecodedData->Data().Ptr());  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1045
	 TUint8 *pRefData = (TUint8*)(iRefSrcData->Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1046
	 TInt numResults  = iDecodedData->Data().MaxLength(); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1047
	 TReal sum1 = 0.0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1048
	 TReal sum2 = 0.0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1049
	 TReal ratio = 0.0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1050
	 TInt16 temp1 = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1051
	 TInt16 temp2 = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1052
	 numResults /= 2; // compensate for bytes to short conversion
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1053
	 //[print the results to allow analysis]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1054
	 for( TInt index = 0; index < numResults; index++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1055
		 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1056
		 temp1  = static_cast<TInt16>((*pResults++) &KAndMask8bit);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1057
		 temp1 |= static_cast<TInt16>((*pResults++ << 8));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1058
		 sum1 += temp1*temp1;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1059
		 temp2  = static_cast<TInt16>((*pRefData++) &KAndMask8bit);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1060
		 temp2 |= static_cast<TInt16>((*pRefData++ << 8));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1061
		 sum2 += (temp2-temp1)*(temp2-temp1);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1062
		 //INFO_PRINTF3( _L("S %d D %d"),temp2, temp1 ); // add for debugging purposes
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1063
		 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1064
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1065
	 //[calculate the ratio ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1066
	 ratio = sum1;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1067
	 ratio /=sum2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1068
	 TReal sn = 0.0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1069
	 // calculate as 18db
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1070
	 Math::Log( sn, ratio );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1071
	 sn *= 10;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1072
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1073
	 INFO_PRINTF2( _L("Signal to Noise Ratio @800Hz %f db"), sn );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1074
#ifdef EABI
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1075
	 if( sn < 18 ) //[ @800hz a sn of less than 18db is deemed a failure 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1076
		           // not that sn is a great measure of a voice coder's quality]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1077
		 result = EFail ;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1078
#else
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1079
	 if( sn < 14 ) //DEF086144 - Codec source buffer size is reduced
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1080
		 result = EFail ;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1081
#endif
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1082
	 //[pop data from the cleanup stack ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1083
	 CleanupStack::PopAndDestroy(2, pDecoder); //pDecoder, theCodec,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1084
     delete iRefSrcData;   
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1085
	 iRefSrcData = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1086
	 delete iRefCodedData;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1087
	 iRefCodedData = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1088
	 delete iRefDecodedData;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1089
	 iRefDecodedData = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1090
	 delete iCodedData;   
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1091
	 iCodedData = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1092
	 delete iDecodedData;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1093
	 iDecodedData = NULL;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1094
	 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1095
	__MM_HEAP_MARKEND;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1096
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1097
    return result;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1098
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1099
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1100
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1101
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1102
* DoTestStepPreambleL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1103
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1104
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1105
TVerdict CTest_MMF_SwCodecDevices_U_0003::DoTestStepPreambleL(void)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1106
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1107
	return EPass;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1108
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1109
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1110
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1111
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1112
* DoTestStepPostambleL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1113
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1114
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1115
TVerdict CTest_MMF_SwCodecDevices_U_0003::DoTestStepPostambleL(void)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1116
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1117
	return EPass;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1118
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1119
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1120
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1121
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1122
* FillSrcBufferL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1123
* @param aSrcData pointer to the src data which stores 16bit samples
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1124
* @param aNoSamples number of 16bit samples to store
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1125
* @param aOffset offset used to generate the samples (linear range)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1126
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1127
void TLawUtility::FillSrcBufferL( TUint8* aSrcData, TInt aNoSamples, TInt16 aOffset )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1128
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1129
	//[precondition aSrcData != NULL ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1130
	if( !aSrcData )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1131
		User::Leave( KErrArgument );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1132
	const TInt16 KUpperLimit = static_cast<TInt16>(aOffset + aNoSamples);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1133
	TUint8* pDest = aSrcData ;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1134
	for( TInt16 i = aOffset; i< KUpperLimit; i++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1135
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1136
	     *pDest++ = static_cast<TUint8>( i & 0xff);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1137
		 *pDest++ = static_cast<TUint8>( (i >>8) &0xff );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1138
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1139
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1140
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1141
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1142
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1143
* CompareCodedData
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1144
* @param aCodedData the data coded using symbian codec
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1145
* @param aRefCodedData the data coded using independent implementation
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1146
* @param aNoSamples the number of coded samples
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1147
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1148
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1149
TInt TLawUtility::CompareCodedDataL(TUint8* aCodedData,TUint8* aRefCodedData, TInt aNoSamples )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1150
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1151
	TInt result = KErrNone;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1152
	//[precondition aCodedData != NULL ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1153
     if( !aCodedData )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1154
		 User::Leave( KErrArgument);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1155
	 //[preciondition aRefCodedData != NULL ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1156
	 if( !aRefCodedData )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1157
		 User::Leave( KErrArgument );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1158
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1159
	 //[ use mem compare to compare the data Buffers ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1160
	if( Mem::Compare(aCodedData, aNoSamples, aRefCodedData, aNoSamples )!=0)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1161
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1162
		//[ data is not the same ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1163
		for( TInt count = 0; count < aNoSamples; count++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1164
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1165
		 //RDebug::Print(_L("c1 %u c2 %u"), *aCodedData++, *aRefCodedData++); Statement commented under DEF105143
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1166
		      *aCodedData++; 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1167
		      *aRefCodedData++; 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1168
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1169
		result = KErrCorrupt;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1170
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1171
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1172
	 return result;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1173
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1174
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1175
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1176
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1177
* AssembleValL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1178
* @param aDecodedData
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1179
* @return decoded value
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1180
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1181
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1182
TInt16 TLawUtility::AssembleValL(TUint8* aDecodedData)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1183
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1184
	TInt16 val;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1185
    if(!aDecodedData )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1186
		User::Leave( KErrArgument);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1187
 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1188
	//assemble the value 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1189
	val  = static_cast<TInt16>( aDecodedData[0] &KAndMask8bit);  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1190
	val |=  static_cast<TInt16>((aDecodedData[1] << 8 ));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1191
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1192
	return val;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1193
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1194
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1195
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1196
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1197
* SNRatio
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1198
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1199
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1200
TReal TLawUtility::SNRatioL(TUint8* aDecodedData, TUint8* aSrcData, TInt aNoSamples )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1201
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1202
	const TReal KThreshold = 0.0001;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1203
    TReal ratio = 0.0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1204
    //[precondition aDecodedData != NULL ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1205
    if( !aDecodedData )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1206
		User::Leave( KErrArgument );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1207
	//[ precondition aSrcData != NULL ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1208
	if( !aSrcData )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1209
		User::Leave( KErrArgument );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1210
    
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1211
	TReal   sumSig      = 0.0;    // numerator
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1212
	TReal   sumNoise    = 0.0; // denominator
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1213
	TInt    difference  = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1214
	TInt16  dataValue   = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1215
	TInt    decodeVal   = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1216
	for( TInt count = 0; count < aNoSamples; count++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1217
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1218
        decodeVal = AssembleValL(aDecodedData);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1219
        dataValue = AssembleValL(aSrcData);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1220
		difference = decodeVal - dataValue;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1221
		sumSig += (decodeVal*decodeVal);     // sum of the squares of the signal
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1222
		sumNoise += (difference * difference );  // sum of the square of the difference
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1223
		aDecodedData+=2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1224
		aSrcData+=2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1225
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1226
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1227
	//[ guard against division by zero ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1228
	if( !( sumNoise >= KThreshold ))
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1229
		User::Leave( KErrUnderflow );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1230
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1231
	//[ calculate the sn ratio ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1232
	//[ 10log10( sumSig/SumNoise ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1233
	Math::Log( ratio, (sumSig/sumNoise) );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1234
    ratio *= 10;  // ratio = 10*log( x**2/(error**2)) in db
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1235
    return ratio;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1236
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1237
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1238
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1239
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1240
* CompareSNRatiosL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1241
* @param aCodecSN   codec under test SN ratio in db
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1242
* @param aCodecSN2  refernce codec SN ratio in db
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1243
* @param aThreshold difference allowed in db
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1244
* @result within tolerance
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1245
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1246
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1247
TBool TLawUtility::CompareSNRatiosL( TReal aCodecSN, TReal aCodecSN2, TReal aTolerance )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1248
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1249
    TBool result = ETrue; 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1250
	TReal difference = (aCodecSN - aCodecSN2);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1251
	//[ it would be nice to replace this with a abs function ?]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1252
	if( difference < 0.0 )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1253
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1254
         if( aTolerance > difference )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1255
			 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1256
			 result = EFalse;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1257
			 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1258
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1259
	else
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1260
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1261
         if( aTolerance < difference )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1262
			 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1263
			 result = EFalse;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1264
			 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1265
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1266
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1267
	return result;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1268
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1269
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1270
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1271
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1272
* ComputeSNL compute the Signal to Noise Ratio
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1273
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1274
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1275
TReal TLawUtility::ComputeSNL( TReal aSumSigSquared, TReal aSumErrorSquared )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1276
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1277
	 TReal sn = 0.0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1278
     const TReal tolerance = 0.001;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1279
	 //[precondition error is >= tolerance ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1280
	 if( aSumErrorSquared < tolerance )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1281
		 User::Leave( KErrArgument );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1282
     //[claculate ratio safely ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1283
	 Math::Log( sn, (aSumSigSquared/aSumErrorSquared));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1284
	 sn*= 10;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1285
	 return sn;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1286
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1287
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1288
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1289
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1290
* SumSquaredL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1291
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1292
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1293
TReal TLawUtility::SumSquaredL( TUint8* aData, TInt aNoSamples )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1294
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1295
	//[precondition arg is ok ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1296
     if( !aData )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1297
		 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1298
		 User::Leave(KErrArgument);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1299
		 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1300
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1301
	 TUint8* pData = aData;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1302
	 TInt16 sample ;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1303
	 TReal sumSigSquared = 0.0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1304
	 for( TInt count = 0; count < aNoSamples; count++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1305
		 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1306
		 sample  = static_cast<TInt16>( pData[0] &KAndMask8bit);  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1307
		 sample |=  static_cast<TInt16>((pData[1] << 8 ));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1308
		 sumSigSquared += (sample*sample);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1309
		 pData+=2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1310
		 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1311
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1312
	 return sumSigSquared;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1313
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1314
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1315
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1316
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1317
* SumErrorSquaredL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1318
* @param aData
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1319
* @param aData2
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1320
* @param aNoSamples
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1321
* @result TReal
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1322
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1323
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1324
TReal TLawUtility::SumErrorSquaredL( TUint8* aData, TUint8* aData2, TInt aNoSamples )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1325
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1326
	//[precondition aData is not NULL]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1327
	 if( !aData )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1328
		 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1329
		 User::Leave(KErrArgument);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1330
		 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1331
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1332
	 //[precondition aData2 is not NULL ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1333
	if( !aData2 )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1334
		 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1335
		 User::Leave(KErrArgument);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1336
		 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1337
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1338
	 TUint8* pData = aData;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1339
	 TUint8* pData2 = aData2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1340
	 TInt16 sample ;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1341
	 TInt16 sample2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1342
	 TReal sumErrorSquared = 0.0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1343
	 TInt error;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1344
	 for( TInt count = 0; count < aNoSamples; count++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1345
		 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1346
		 error = 0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1347
		 sample  = static_cast<TInt16>( pData[0] &KAndMask8bit);  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1348
		 sample |=  static_cast<TInt16>((pData[1] << 8 ));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1349
		 sample2  = static_cast<TInt16>( pData2[0] &KAndMask8bit);  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1350
		 sample2 |=  static_cast<TInt16>((pData2[1] << 8 ));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1351
		 error = sample -sample2; // compute the error
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1352
		 sumErrorSquared += (error*error); // add error squared to the sum
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1353
		 pData  +=2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1354
		 pData2 +=2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1355
		 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1356
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1357
	 return sumErrorSquared;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1358
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1359
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1360
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1361
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1362
* CTestMuLawCodec_U_0006
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1363
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1364
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1365
CTestMuLawCodec_U_0006::CTestMuLawCodec_U_0006()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1366
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1367
     //[ set test name]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1368
	iTestStepName = _L("MM-MMF-SWCODECDEVICES-U-0006-HP");
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1369
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1370
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1371
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1372
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1373
* LinearToMuLawSample
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1374
* @param aSample a 16 bit pcm sample
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1375
* @result Mu Law encoded sample
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1376
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1377
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1378
TUint8 CTestMuLawCodec_U_0006::LinearToMuLawSample( TInt16 aSample)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1379
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1380
	const int KBias = 0x84;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1381
	const int KClip = 32635;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1382
	TInt sign = (aSample >> 8) & 0x80;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1383
	if(sign)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1384
		aSample = static_cast<TInt16>(-aSample);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1385
	if(aSample > KClip)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1386
		aSample = KClip;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1387
	aSample = static_cast<TInt16>(aSample + KBias);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1388
	TInt exponent = static_cast<TInt>( MuLawCompressTable[(aSample>>7) & 0xFF]);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1389
	TInt mantissa = (aSample >> (exponent+3)) & 0x0F;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1390
	TInt compressedByte = ~(sign | (exponent << 4) | mantissa);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1391
	return static_cast<TUint8>( compressedByte );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1392
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1393
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1394
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1395
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1396
* ConvertPcmMuLaw
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1397
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1398
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1399
void CTestMuLawCodec_U_0006::ConvertPcmMuLawL(TUint8* aSrcData, TUint8* aCodedData, TInt aNumSamples ) 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1400
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1401
	//[ precondition aSrcData ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1402
     if( !aSrcData )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1403
		 User::Leave( KErrArgument );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1404
	 //[precondition aCodedData ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1405
	 if( !aCodedData )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1406
		 User::Leave( KErrArgument );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1407
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1408
	 TUint8* pCoded = aCodedData;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1409
	 TUint8* pData  = aSrcData ;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1410
	 TInt16 pcmSample;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1411
	 for( TInt count = 0; count < aNumSamples; count++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1412
		 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1413
          //[ code the data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1414
		  pcmSample  = static_cast<TInt16>(pData[0]);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1415
		  pcmSample |= static_cast<TInt16>((pData[1] << 8 )); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1416
          *pCoded++ = LinearToMuLawSample(pcmSample);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1417
		  pData+=2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1418
		 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1419
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1420
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1421
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1422
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1423
* ConvertMuLawPcm
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1424
* 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1425
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1426
void CTestMuLawCodec_U_0006::ConvertMuLawPcmL(TUint8* aCoded, TUint8* aDecoded, TInt aNumSamples )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1427
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1428
	//[ precondition aCoded ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1429
	if( !aCoded )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1430
		User::Leave( KErrArgument );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1431
	//[precondition aDecoded ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1432
	if( !aDecoded )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1433
		User::Leave( KErrArgument );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1434
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1435
	TInt16  pcmSample;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1436
	TUint8* pCoded   = aCoded;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1437
	TUint8* pDecoded = aDecoded;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1438
	//[ lets convert the data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1439
	for(TInt count = 0; count < aNumSamples; count++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1440
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1441
		pcmSample = MuLawDecompressTable[*pCoded++];
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1442
		*pDecoded++ = static_cast<TUint8>( pcmSample & 0xFF);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1443
		*pDecoded++ = static_cast<TUint8>((pcmSample >> 8 ) & 0xFF);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1444
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1445
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1446
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1447
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1448
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1449
* DoTestStepL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1450
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1451
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1452
TVerdict CTestMuLawCodec_U_0006::DoTestStepL()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1453
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1454
	TVerdict result = EPass;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1455
	const TInt KSrcBufferSize     = 400;    // small buffer size
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1456
	const TInt KHalfSrcBufferSize = 200;    // small buffer size
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1457
	const TInt KCodedBufferSize   = 200;    // small buffer size
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1458
	const TInt KLowerLimit        = -800; //lower limit of test range
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1459
	const TInt KUpperLimit        = 800;  // upper limit of test range +1
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1460
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1461
	//[ allocate memory buffers]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1462
	TUint8* pSymbianSrcData = new(ELeave)TUint8[KSrcBufferSize];
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1463
	CleanupStack::PushL(pSymbianSrcData);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1464
	TUint8* pIndependentSrcData = new(ELeave)TUint8[KSrcBufferSize];
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1465
	CleanupStack::PushL(pIndependentSrcData);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1466
	TUint8* pSymbianCodedData = new(ELeave)TUint8[KCodedBufferSize];
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1467
	CleanupStack::PushL(pSymbianCodedData);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1468
	TUint8* pIndependentCodedData = new(ELeave)TUint8[KCodedBufferSize];
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1469
	CleanupStack::PushL(pIndependentCodedData);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1470
	TUint8* pSymbianDecodedData = new(ELeave)TUint8[KSrcBufferSize];
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1471
	CleanupStack::PushL(pSymbianDecodedData);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1472
	TUint8* pIndependentDecodedData = new(ELeave)TUint8[KSrcBufferSize];
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1473
	CleanupStack::PushL(pIndependentDecodedData);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1474
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1475
    TMMFAudioMuLawToS16PcmCodec decoder;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1476
	TMMFAudioSPcm16ToMuLawCodec encoder;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1477
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1478
	TLawUtility helper;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1479
	TReal symbianCodecSN = 0.0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1480
	TReal independentCodecSN = 0.0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1481
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1482
	TReal sumRefSig       = 0.0; // sum of sig squared
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1483
	TReal sumRefError     = 0.0; // sum of error sig squared
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1484
	TReal sumSymbianSig   = 0.0; // sum of sig squared
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1485
	TReal sumSymbianError = 0.0; // sum of error sig squared
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1486
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1487
	//[ interate over a suitable range and process each buffer]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1488
	for( TInt index = KLowerLimit; index < KUpperLimit; index+= KHalfSrcBufferSize )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1489
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1490
		TInt16 offset = static_cast<TInt16>( index);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1491
		//[ fill the src buffers ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1492
		helper.FillSrcBufferL( pSymbianSrcData, KHalfSrcBufferSize, offset );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1493
		helper.FillSrcBufferL( pIndependentSrcData, KHalfSrcBufferSize, offset );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1494
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1495
		//[encode the src data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1496
		encoder.Convert( pSymbianSrcData, pSymbianCodedData, KHalfSrcBufferSize );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1497
		ConvertPcmMuLawL(pIndependentSrcData,pIndependentCodedData,KHalfSrcBufferSize );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1498
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1499
		//[ decode the data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1500
        decoder.Convert( pSymbianCodedData, pSymbianDecodedData, KHalfSrcBufferSize );		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1501
	    ConvertMuLawPcmL( pIndependentCodedData,pIndependentDecodedData,KHalfSrcBufferSize);		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1502
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1503
		//[ check both codecs code the data similarly]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1504
		TInt errorCode =helper.CompareCodedDataL(pIndependentCodedData, pSymbianCodedData, KHalfSrcBufferSize );		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1505
		if( errorCode != KErrNone )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1506
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1507
			INFO_PRINTF1(_L("Forward Transformation for Mu-Law codec is not conformant to ref codec"));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1508
			User::LeaveIfError(errorCode);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1509
			}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1510
			//[ upate running total sums to be used for signal to noise
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1511
		// ratio calculations ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1512
		sumRefSig        += helper.SumSquaredL(pIndependentSrcData, KHalfSrcBufferSize);     
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1513
		sumRefError      += helper.SumErrorSquaredL(pIndependentSrcData,pIndependentDecodedData,KHalfSrcBufferSize); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1514
		sumSymbianSig    += helper.SumSquaredL(pSymbianSrcData,KHalfSrcBufferSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1515
		sumSymbianError  += helper.SumErrorSquaredL(pSymbianSrcData,pSymbianDecodedData,KHalfSrcBufferSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1516
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1517
 		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1518
	const TReal KTolerance = 1; // allow for a 1 db tolerance
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1519
	symbianCodecSN     = helper.ComputeSNL(sumSymbianSig,sumSymbianError);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1520
	independentCodecSN = helper.ComputeSNL(sumRefSig, sumRefError);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1521
    // Gamma = (dynamic range of codec /signal std deviation )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1522
	INFO_PRINTF1(_L("We would expect S/N ration to be greater than 35db for an MuLaw codec with Gamma = 10"));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1523
	INFO_PRINTF2(_L("Signal/Noise Ratio Symbian Codec %f"), symbianCodecSN ); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1524
	INFO_PRINTF2(_L("Signal/Noise Ratio Reference Codec %f"), independentCodecSN ); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1525
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1526
	//[ compare the s/n ratio's of the two codec implementations]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1527
	if( !helper.CompareSNRatiosL( symbianCodecSN, independentCodecSN, KTolerance ))
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1528
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1529
		//[ fail the test because the s/n ratios were divergent ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1530
		result = EFail;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1531
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1532
	CleanupStack::PopAndDestroy(6,pSymbianSrcData); //pSymbianSrcData,pIndependentSrcData,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1533
	                                                //pSymbianCodedData,pIndependentCodedData
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1534
	                                                //pSymbianDecodedData,pIndependentDecodedData 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1535
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1536
	return result;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1537
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1538
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1539
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1540
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1541
*  DoTestStepPreambleL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1542
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1543
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1544
TVerdict CTestMuLawCodec_U_0006::DoTestStepPreambleL(void)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1545
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1546
	TVerdict result = EPass;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1547
	return result; //nothing doing
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1548
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1549
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1550
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1551
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1552
* DoTestStepPostambleL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1553
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1554
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1555
TVerdict CTestMuLawCodec_U_0006::DoTestStepPostambleL(void)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1556
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1557
	TVerdict result = EPass;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1558
	return result; //nothing doing
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1559
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1560
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1561
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1562
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1563
* Mu-Law Compression Table
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1564
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1565
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1566
const TInt8 CTestMuLawCodec_U_0006::MuLawCompressTable[PcmToMuLawCompressionTableSize] =
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1567
{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1568
0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1569
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1570
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1571
5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1572
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1573
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1574
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1575
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1576
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1577
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1578
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1579
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1580
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1581
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1582
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1583
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1584
};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1585
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1586
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1587
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1588
* Mu-Law Decompression Table
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1589
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1590
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1591
const TInt16 CTestMuLawCodec_U_0006::MuLawDecompressTable[MuLawToPcmCompressionTableSize]=
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1592
{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1593
-32124,-31100,-30076,-29052,-28028,-27004,-25980,-24956,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1594
-23932,-22908,-21884,-20860,-19836,-18812,-17788,-16764,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1595
-15996,-15484,-14972,-14460,-13948,-13436,-12924,-12412,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1596
-11900,-11388,-10876,-10364, -9852, -9340, -8828, -8316,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1597
-7932, -7676, -7420, -7164, -6908, -6652, -6396, -6140,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1598
-5884, -5628, -5372, -5116, -4860, -4604, -4348, -4092,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1599
-3900, -3772, -3644, -3516, -3388, -3260, -3132, -3004,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1600
-2876, -2748, -2620, -2492, -2364, -2236, -2108, -1980,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1601
-1884, -1820, -1756, -1692, -1628, -1564, -1500, -1436,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1602
-1372, -1308, -1244, -1180, -1116, -1052, -988, -924,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1603
-876, -844, -812, -780, -748, -716, -684, -652,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1604
-620, -588, -556, -524, -492, -460, -428, -396,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1605
-372, -356, -340, -324, -308, -292, -276, -260,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1606
-244, -228, -212, -196, -180, -164, -148, -132,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1607
-120, -112, -104, -96, -88, -80, -72, -64,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1608
-56, -48, -40, -32, -24, -16, -8, 0,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1609
32124, 31100, 30076, 29052, 28028, 27004, 25980, 24956,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1610
23932, 22908, 21884, 20860, 19836, 18812, 17788, 16764,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1611
15996, 15484, 14972, 14460, 13948, 13436, 12924, 12412,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1612
11900, 11388, 10876, 10364, 9852, 9340, 8828, 8316,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1613
7932, 7676, 7420, 7164, 6908, 6652, 6396, 6140,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1614
5884, 5628, 5372, 5116, 4860, 4604, 4348, 4092,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1615
3900, 3772, 3644, 3516, 3388, 3260, 3132, 3004,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1616
2876, 2748, 2620, 2492, 2364, 2236, 2108, 1980,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1617
1884, 1820, 1756, 1692, 1628, 1564, 1500, 1436,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1618
1372, 1308, 1244, 1180, 1116, 1052, 988, 924,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1619
876, 844, 812, 780, 748, 716, 684, 652,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1620
620, 588, 556, 524, 492, 460, 428, 396,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1621
372, 356, 340, 324, 308, 292, 276, 260,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1622
244, 228, 212, 196, 180, 164, 148, 132,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1623
120, 112, 104, 96, 88, 80, 72, 64,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1624
56, 48, 40, 32, 24, 16, 8, 0
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1625
};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1626
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1627
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1628
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1629
* CTestALawCodec_U_0004
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1630
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1631
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1632
CTestALawCodec_U_0004::CTestALawCodec_U_0004()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1633
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1634
    //[ set test name ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1635
	iTestStepName = _L("MM-MMF-SWCODECDEVICES-U-0004-HP");
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1636
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1637
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1638
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1639
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1640
* ConvertPcmALaw converts Pcm 16 to 8bit ALaw
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1641
* @param aSrcData The src data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1642
* @param aCoded   The coded result
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1643
* @param aNumSamples The number of samples to be processed
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1644
* @precondition aSrcData is not NULL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1645
* @precondition aCodedData is not NULL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1646
* @precondition there is sufficient room in the destination
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1647
* to contain the coded samples
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1648
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1649
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1650
void CTestALawCodec_U_0004::ConvertPcmALawL(TUint8* aSrcData, TUint8* aCodedData, TInt aNumSamples )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1651
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1652
	//[ precondition aSrcData ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1653
     if( !aSrcData )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1654
		 User::Leave( KErrArgument );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1655
	 //[precondition aCodedData ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1656
	 if( !aCodedData )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1657
		 User::Leave( KErrArgument );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1658
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1659
	 TUint8* pCoded = aCodedData;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1660
	 TUint8* pData  = aSrcData ;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1661
	 TInt16 pcmSample;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1662
	 for( TInt count = 0; count < aNumSamples; count++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1663
		 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1664
          //[ code the data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1665
		  pcmSample  = static_cast<TInt16>(pData[0]);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1666
		  pcmSample |= static_cast<TInt16>((pData[1] << 8 )); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1667
          *pCoded++ = LinearToALawSample(pcmSample);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1668
		  pData+=2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1669
		 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1670
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1671
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1672
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1673
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1674
* ConvertALawPcm converts from 8bit ALaw to Pcm16
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1675
* @param aCoded The coded data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1676
* @param aDecoded The decoded result
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1677
* @param aNumSamples The number of samples to be processed
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1678
* @precondition aCoded is not NULL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1679
* @precondition aDecoded is not NULL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1680
* @precondition there is sufficient room in the destination
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1681
* to contain the coded samples
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1682
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1683
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1684
void CTestALawCodec_U_0004::ConvertALawPcmL(TUint8* aCoded, TUint8* aDecoded, TInt aNumSamples )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1685
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1686
	 //[ precondition aSrcData ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1687
     if( !aCoded )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1688
		 User::Leave( KErrArgument );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1689
	 //[precondition aCodedData ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1690
	 if( !aDecoded )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1691
		 User::Leave( KErrArgument );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1692
   
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1693
	 TInt16  pcmSample;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1694
     TUint8* pCoded   = aCoded;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1695
	 TUint8* pDecoded = aDecoded;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1696
	 //[ lets convert the data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1697
     for(TInt count = 0; count < aNumSamples; count++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1698
		 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1699
          pcmSample = ALawDecompressTable[*pCoded++];
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1700
          *pDecoded++ = static_cast<TUint8>(pcmSample & 0xFF);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1701
		  *pDecoded++ = static_cast<TUint8>((pcmSample >> 8 ) & 0xFF);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1702
		 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1703
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1704
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1705
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1706
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1707
* LinearToALawSample converts a Pcm16 sample to ALaw
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1708
* @param aSample the PCM 16 sample to be converted
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1709
* @result coded result
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1710
* 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1711
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1712
TUint8 CTestALawCodec_U_0004::LinearToALawSample(TInt16 aSample)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1713
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1714
	const TInt KClip = 32635;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1715
	TInt sign;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1716
	TInt exponent;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1717
	TInt mantissa;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1718
	TUint8 compressedByte;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1719
	sign = ((~aSample) >> 8) & 0x80;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1720
	if(!sign)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1721
		aSample = static_cast<TInt16>(-aSample);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1722
	if(aSample > KClip)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1723
		aSample = KClip;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1724
	if(aSample >= 256)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1725
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1726
		exponent = static_cast<TInt>( ALawCompressTable[(aSample >> 8) & 0x7F]);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1727
		mantissa = (aSample >> (exponent + 3) ) & 0x0F;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1728
		compressedByte = static_cast<TUint8> ((exponent << 4) | mantissa);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1729
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1730
	else
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1731
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1732
		compressedByte = static_cast<TUint8> (aSample >> 4);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1733
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1734
	compressedByte ^= (sign ^ 0x55);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1735
	return compressedByte;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1736
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1737
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1738
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1739
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1740
* DoTestStepL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1741
* 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1742
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1743
TVerdict CTestALawCodec_U_0004::DoTestStepL()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1744
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1745
	TVerdict result = EPass;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1746
	const TInt KSrcBufferSize     = 400;    // small buffer size
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1747
	const TInt KHalfSrcBufferSize = 200;    // small buffer size
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1748
	const TInt KCodedBufferSize   = 200;    // small buffer size
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1749
	const TInt KLowerLimit        = -400; //lower limit of test range
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1750
	const TInt KUpperLimit        = 400;  // upper limit of test range +1
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1751
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1752
	//[ allocate memory buffers]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1753
	TUint8* pSymbianSrcData = new(ELeave)TUint8[KSrcBufferSize];
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1754
	CleanupStack::PushL(pSymbianSrcData);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1755
	TUint8* pIndependentSrcData = new(ELeave)TUint8[KSrcBufferSize];
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1756
	CleanupStack::PushL(pIndependentSrcData);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1757
	TUint8* pSymbianCodedData = new(ELeave)TUint8[KCodedBufferSize];
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1758
	CleanupStack::PushL(pSymbianCodedData);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1759
	TUint8* pIndependentCodedData = new(ELeave)TUint8[KCodedBufferSize];
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1760
	CleanupStack::PushL(pIndependentCodedData);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1761
	TUint8* pSymbianDecodedData = new(ELeave)TUint8[KSrcBufferSize];
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1762
	CleanupStack::PushL(pSymbianDecodedData);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1763
	TUint8* pIndependentDecodedData = new(ELeave)TUint8[KSrcBufferSize];
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1764
	CleanupStack::PushL(pIndependentDecodedData);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1765
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1766
	TMMFAudioSPcm16ToAlawCodec encoder;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1767
	TMMFAudioALawToS16PcmCodec decoder;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1768
    
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1769
	TLawUtility helper;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1770
	TReal symbianCodecSN = 0.0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1771
	TReal independentCodecSN = 0.0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1772
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1773
	TReal sumRefSig       = 0.0; // sum of sig squared
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1774
	TReal sumRefError     = 0.0; // sum of error sig squared
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1775
	TReal sumSymbianSig   = 0.0; // sum of sig squared
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1776
	TReal sumSymbianError = 0.0; // sum of error sig squared
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1777
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1778
	//[ interate over a suitable range and process each buffer]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1779
	for( TInt index = KLowerLimit; index < KUpperLimit; index+= KHalfSrcBufferSize )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1780
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1781
		TInt16 offset = static_cast<TInt16>( index);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1782
		//[ fill the src buffers ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1783
		helper.FillSrcBufferL( pSymbianSrcData, KHalfSrcBufferSize, offset );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1784
		helper.FillSrcBufferL( pIndependentSrcData, KHalfSrcBufferSize, offset );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1785
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1786
		//[encode the src data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1787
		encoder.Convert( pSymbianSrcData, pSymbianCodedData, KHalfSrcBufferSize );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1788
		ConvertPcmALawL(pIndependentSrcData,pIndependentCodedData,KHalfSrcBufferSize );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1789
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1790
		//[ decode the data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1791
        decoder.Convert( pSymbianCodedData, pSymbianDecodedData, KHalfSrcBufferSize );		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1792
	    ConvertALawPcmL( pIndependentCodedData,pIndependentDecodedData,KHalfSrcBufferSize);		
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1793
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1794
		//[ check both codecs code the data similarly]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1795
		 TInt errorCode = helper.CompareCodedDataL(pIndependentCodedData, pSymbianCodedData, KHalfSrcBufferSize );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1796
		 if( errorCode != KErrNone )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1797
			 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1798
			 INFO_PRINTF1(_L("Forward Transformation for ALaw codec is not conformant to ref codec"));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1799
			 User::LeaveIfError(errorCode);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1800
			 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1801
	    
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1802
		//[ upate running total sums to be used for signal to noise
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1803
		// ratio calculations ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1804
		sumRefSig        += helper.SumSquaredL(pIndependentSrcData, KHalfSrcBufferSize);     
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1805
		sumRefError      += helper.SumErrorSquaredL(pIndependentSrcData,pIndependentDecodedData,KHalfSrcBufferSize); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1806
		sumSymbianSig    += helper.SumSquaredL(pSymbianSrcData,KHalfSrcBufferSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1807
		sumSymbianError  += helper.SumErrorSquaredL(pSymbianSrcData,pSymbianDecodedData,KHalfSrcBufferSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1808
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1809
	const TReal KTolerance = 1; // allow for a 1 db tolerance
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1810
	symbianCodecSN     = helper.ComputeSNL(sumSymbianSig,sumSymbianError);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1811
	independentCodecSN = helper.ComputeSNL(sumRefSig, sumRefError);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1812
    // Gamma = (dynamic range of codec /signal std deviation )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1813
	INFO_PRINTF1(_L("We would expect S/N ration to be greater than 30db for an ALaw codec with Gamma = 10"));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1814
	INFO_PRINTF2(_L("Signal/Noise Ratio Symbian Codec %f"), symbianCodecSN ); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1815
	INFO_PRINTF2(_L("Signal/Noise Ratio Reference Codec %f"), independentCodecSN ); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1816
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1817
	//[ compare the s/n ratio's of the two codec implementations]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1818
	if( !helper.CompareSNRatiosL( symbianCodecSN, independentCodecSN, KTolerance ))
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1819
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1820
		//[ fail the test because the s/n ratios were divergent ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1821
		result = EFail;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1822
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1823
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1824
	CleanupStack::PopAndDestroy(6,pSymbianSrcData); //pSymbianSrcData,pIndependentSrcData,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1825
	                                //pSymbianCodedData,pIndependentCodedData
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1826
	                                //pSymbianDecodedData,pIndependentDecodedData 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1827
	return result;                  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1828
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1829
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1830
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1831
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1832
* DoTestStepPreambleL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1833
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1834
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1835
TVerdict CTestALawCodec_U_0004::DoTestStepPreambleL(void)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1836
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1837
	TVerdict result = EPass;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1838
	return result; //nothing doing
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1839
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1840
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1841
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1842
* DoTestStepPostambleL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1843
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1844
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1845
TVerdict CTestALawCodec_U_0004::DoTestStepPostambleL(void)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1846
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1847
	TVerdict result = EPass;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1848
	return result; //nothing doing
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1849
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1850
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1851
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1852
* ALaw Compression Table
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1853
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1854
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1855
const TInt8 CTestALawCodec_U_0004::ALawCompressTable[PcmToALawCompressionTableSize] =
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1856
{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1857
1,1,2,2,3,3,3,3,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1858
4,4,4,4,4,4,4,4,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1859
5,5,5,5,5,5,5,5,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1860
5,5,5,5,5,5,5,5,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1861
6,6,6,6,6,6,6,6,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1862
6,6,6,6,6,6,6,6,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1863
6,6,6,6,6,6,6,6,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1864
6,6,6,6,6,6,6,6,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1865
7,7,7,7,7,7,7,7,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1866
7,7,7,7,7,7,7,7,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1867
7,7,7,7,7,7,7,7,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1868
7,7,7,7,7,7,7,7,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1869
7,7,7,7,7,7,7,7,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1870
7,7,7,7,7,7,7,7,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1871
7,7,7,7,7,7,7,7,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1872
7,7,7,7,7,7,7,7
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1873
};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1874
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1875
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1876
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1877
* ALaw Decompression Table 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1878
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1879
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1880
const TInt16 CTestALawCodec_U_0004::ALawDecompressTable[ALawToPcmCompressionTableSize] =
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1881
{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1882
-5504, -5248, -6016, -5760, -4480, -4224, -4992, -4736,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1883
-7552, -7296, -8064, -7808, -6528, -6272, -7040, -6784,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1884
-2752, -2624, -3008, -2880, -2240, -2112, -2496, -2368,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1885
-3776, -3648, -4032, -3904, -3264, -3136, -3520, -3392,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1886
-22016,-20992,-24064,-23040,-17920,-16896,-19968,-18944,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1887
-30208,-29184,-32256,-31232,-26112,-25088,-28160,-27136,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1888
-11008,-10496,-12032,-11520,-8960, -8448, -9984, -9472,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1889
-15104,-14592,-16128,-15616,-13056,-12544,-14080,-13568,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1890
-344, -328, -376, -360, -280, -264, -312, -296,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1891
-472, -456, -504, -488, -408, -392, -440, -424,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1892
-88, -72, -120, -104, -24, -8, -56, -40,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1893
-216, -200, -248, -232, -152, -136, -184, -168,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1894
-1376, -1312, -1504, -1440, -1120, -1056, -1248, -1184,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1895
-1888, -1824, -2016, -1952, -1632, -1568, -1760, -1696,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1896
-688, -656, -752, -720, -560, -528, -624, -592,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1897
-944, -912, -1008, -976, -816, -784, -880, -848,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1898
5504, 5248, 6016, 5760, 4480, 4224, 4992, 4736,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1899
7552, 7296, 8064, 7808, 6528, 6272, 7040, 6784,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1900
2752, 2624, 3008, 2880, 2240, 2112, 2496, 2368,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1901
3776, 3648, 4032, 3904, 3264, 3136, 3520, 3392,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1902
22016, 20992, 24064, 23040, 17920, 16896, 19968, 18944,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1903
30208, 29184, 32256, 31232, 26112, 25088, 28160, 27136,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1904
11008, 10496, 12032, 11520, 8960, 8448, 9984, 9472,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1905
15104, 14592, 16128, 15616, 13056, 12544, 14080, 13568,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1906
344, 328, 376, 360, 280, 264, 312, 296,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1907
472, 456, 504, 488, 408, 392, 440, 424,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1908
88, 72, 120, 104, 24, 8, 56, 40,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1909
216, 200, 248, 232, 152, 136, 184, 168,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1910
1376, 1312, 1504, 1440, 1120, 1056, 1248, 1184,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1911
1888, 1824, 2016, 1952, 1632, 1568, 1760, 1696,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1912
688, 656, 752, 720, 560, 528, 624, 592,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1913
944, 912, 1008, 976, 816, 784, 880, 848
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1914
};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1915
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1916
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1917
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1918
* CTestIMaadCodec
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1919
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1920
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1921
CTestIMaadCodec::CTestIMaadCodec()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1922
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1923
	//[ set test name ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1924
	iTestStepName = _L("MM-MMF-SWCODECDEVICES-U-0022-HP");
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1925
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1926
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1927
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1928
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1929
* DoTestStepL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1930
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1931
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1932
TVerdict CTestIMaadCodec::DoTestStepL()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1933
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1934
	__MM_HEAP_MARK;    
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1935
	TVerdict result = EPass;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1936
	TInt srcBufferSize;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1937
	TInt sinkBufferSize;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1938
	const TReal KExpectedSNRatioDb = 30.0; //30 db for now
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1939
   
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1940
	//[ Create coder and decoder codecs ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1941
	CMMFPcm16ToImaAdpcmHwDevice* pHwDevice = CMMFPcm16ToImaAdpcmHwDevice::NewL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1942
    CleanupStack::PushL( pHwDevice );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1943
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1944
	CMMFSwCodec& theCodec = pHwDevice->Codec();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1945
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1946
	CMMFImaAdpcmToPcm16CodecHwDevice* pHwDecoder = CMMFImaAdpcmToPcm16CodecHwDevice::NewL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1947
    CleanupStack::PushL( pHwDecoder );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1948
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1949
	CMMFSwCodec& theDecoder = pHwDecoder->Codec();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1950
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1951
	//[ Create data buffers with position != 0]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1952
	srcBufferSize  = 100; // arbitrary non zero size
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1953
	sinkBufferSize = 100;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1954
    CMMFDescriptorBuffer* pSrcBuffer =  CMMFDescriptorBuffer::NewL( srcBufferSize ); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1955
	CleanupStack::PushL( pSrcBuffer );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1956
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1957
	CMMFDescriptorBuffer* pSinkBuffer = CMMFDescriptorBuffer::NewL( sinkBufferSize ); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1958
	CleanupStack::PushL( pSinkBuffer );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1959
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1960
	//[ trap & check error code ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1961
	TInt errCode;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1962
	pSrcBuffer->Data().SetLength(srcBufferSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1963
	pSinkBuffer->Data().SetLength(sinkBufferSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1964
	pSrcBuffer->SetPosition(1);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1965
    TRAP( errCode, theCodec.ProcessL(*pSrcBuffer, *pSinkBuffer));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1966
	if( errCode != KErrArgument )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1967
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1968
		result = EFail;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1969
		return result;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1970
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1971
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1972
  	//[set position of sink buffer to nonzero value]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1973
	pSrcBuffer->SetPosition(0);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1974
    pSinkBuffer->SetPosition(1);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1975
    TRAP( errCode, theCodec.ProcessL(*pSrcBuffer, *pSinkBuffer));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1976
	if( errCode != KErrArgument )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1977
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1978
		result = EFail;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1979
		return result;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1980
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1981
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1982
	//[set position of sink and src to nonzero value ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1983
	pSrcBuffer->SetPosition(1);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1984
    pSinkBuffer->SetPosition(1);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1985
    TRAP( errCode, theCodec.ProcessL(*pSrcBuffer, *pSinkBuffer));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1986
	if( errCode != KErrArgument )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1987
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1988
		result = EFail;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1989
		return result;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1990
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1991
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1992
	//[ reset the position of both buffers to zero ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1993
    pSrcBuffer->SetPosition(0);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1994
    pSinkBuffer->SetPosition(0);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1995
    //[ set the src/sink buffer sizes to src and sink
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1996
	// buffer sizes and fill src with data ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1997
	CleanupStack::PopAndDestroy(2, pSrcBuffer); // pSrcBuffer, pSinkBuffer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1998
    
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  1999
	//[Create Source & Sink and fill source data in ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2000
	srcBufferSize = theCodec.SourceBufferSize();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2001
	pSrcBuffer  = CMMFDescriptorBuffer::NewL( srcBufferSize );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2002
	CleanupStack::PushL( pSrcBuffer );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2003
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2004
	CMMFDescriptorBuffer* pDecodedBuffer = CMMFDescriptorBuffer::NewL( srcBufferSize );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2005
	CleanupStack::PushL( pDecodedBuffer );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2006
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2007
	sinkBufferSize = theCodec.SinkBufferSize();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2008
	pSinkBuffer = CMMFDescriptorBuffer::NewL( sinkBufferSize );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2009
    CleanupStack::PushL( pSinkBuffer );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2010
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2011
	pSrcBuffer->Data().SetLength(srcBufferSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2012
	pDecodedBuffer->Data().SetLength(srcBufferSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2013
	pSinkBuffer->Data().SetLength(sinkBufferSize);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2014
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2015
	//[ fill src buffer with ramp] 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2016
	FillSrcBufferL( *pSrcBuffer );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2017
    // encode and decode the data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2018
    theCodec.ProcessL(*pSrcBuffer, *pSinkBuffer);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2019
	theDecoder.ProcessL( *pSinkBuffer, *pDecodedBuffer );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2020
    
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2021
	if(!CompareResults( KExpectedSNRatioDb, pSrcBuffer, pDecodedBuffer))
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2022
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2023
		//Test has failed because sn ratio was not good enough
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2024
		result = EFail;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2025
		}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2026
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2027
	//[ clean up ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2028
	CleanupStack::PopAndDestroy( 5, pHwDevice ); // pHwDevice, pHwDecoder, pSrcBuffer, pDecodedBuffer, pSinkBuffer 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2029
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2030
	__MM_HEAP_MARKEND;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2031
	return result;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2032
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2033
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2034
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2035
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2036
* DoTestStepPreambleL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2037
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2038
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2039
TVerdict CTestIMaadCodec::DoTestStepPreambleL(void)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2040
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2041
    return EPass;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2042
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2043
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2044
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2045
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2046
* DoTestStepPostambleL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2047
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2048
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2049
TVerdict CTestIMaadCodec::DoTestStepPostambleL(void)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2050
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2051
    return EPass;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2052
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2053
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2054
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2055
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2056
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2057
* FillSrcBuffer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2058
* @param aBuffer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2059
* This function fills the buffer with a ramp of linear pcm16 data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2060
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2061
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2062
void CTestIMaadCodec::FillSrcBufferL( CMMFDescriptorBuffer& aBuffer )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2063
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2064
	 TInt slope = 2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2065
     TInt dataLength = aBuffer.Data().Length(); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2066
	 TUint8* pData = const_cast<TUint8*>(aBuffer.Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2067
	 TInt noPc16Samples = dataLength/2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2068
	 ASSERT( noPc16Samples*slope < 32768 );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2069
	 for( TInt16 count = 0; count < noPc16Samples ; count++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2070
		 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2071
		 TInt16 pcmSample = static_cast<TInt16>( count * slope);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2072
          *pData++ = static_cast<TUint8>( pcmSample & 0xFF );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2073
		  *pData++ = static_cast<TUint8>( ( pcmSample >> 8 ));
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2074
		 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2075
	}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2076
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2077
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2078
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2079
* CompareResults
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2080
* @param aExpectedSNRatioDb
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2081
* @param aSrcBuffer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2082
* @param aSinkBuffer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2083
* @result TBool
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2084
* This function returns True if the computed Signal to Noise Ratio
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2085
* is Greater than or equal to the expected signal to noise ratio.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2086
* The function will also return EFalse if any of the preconditions
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2087
* are violated.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2088
* @precondition aSrcBuffer, aSinkBuffer are not NULL
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2089
* @precondition aSrcBuffer data lenegth == aSinkBuffer data length
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2090
* @precondition the data buffers contain pcm16 data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2091
* 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2092
**/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2093
TBool CTestIMaadCodec::CompareResults( TReal aExpectedSNRatioDb, 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2094
			                  CMMFDescriptorBuffer* aSrcBuffer,     
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2095
		                      CMMFDescriptorBuffer* aSinkBuffer)
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2096
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2097
     TBool result = EFalse;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2098
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2099
	 //[ precondition pointers are not NULL ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2100
	 if( !aSrcBuffer || !aSinkBuffer )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2101
		 return result;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2102
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2103
	 //[ precondition buffer lengths are equal ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2104
     TInt length = aSrcBuffer->Data().Length();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2105
	 if( length != aSinkBuffer->Data().Length() )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2106
		 return result;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2107
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2108
	 // buffers must be of even length
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2109
	 if( !(length % sizeof(TInt16) == 0 ))
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2110
		 return result;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2111
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2112
     TInt pcmLength = length/2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2113
     TReal sumSignalSquared = 0.0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2114
	 TReal sumNoiseSquared  = 0.0;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2115
     TUint8* pSrcData = const_cast<TUint8*>(aSrcBuffer->Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2116
	 TUint8* pDecodeData    = const_cast<TUint8*>(aSinkBuffer->Data().Ptr());
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2117
     TInt16 sampleOriginal;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2118
	 TInt16 sampleDecode;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2119
	 for( TInt count = 0; count < pcmLength; count++ )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2120
		 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2121
		  sampleOriginal  = static_cast<TInt16>( pSrcData[0] &KAndMask8bit);  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2122
		  sampleOriginal |=  static_cast<TInt16>((pSrcData[1] << 8 ));	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2123
          sampleDecode    = static_cast<TInt16>( pDecodeData[0] &KAndMask8bit);  
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2124
		  sampleDecode   |=  static_cast<TInt16>((pDecodeData[1] << 8 )); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2125
          pSrcData+=2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2126
		  pDecodeData+= 2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2127
		  sumSignalSquared += sampleOriginal * sampleOriginal;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2128
		  TInt noise = sampleOriginal - sampleDecode ;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2129
          sumNoiseSquared  += noise * noise;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2130
		 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2131
     
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2132
	 //[ if the noise is low the signals are equivalent and
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2133
	 // overflow can be avoided ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2134
	 if( sumNoiseSquared < 0.001 )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2135
		 {
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2136
		 result = ETrue;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2137
		 return result;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2138
		 }
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2139
	 TReal computedSNRatioDb;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2140
	 Math::Log( computedSNRatioDb, sumSignalSquared/sumNoiseSquared );	 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2141
	 computedSNRatioDb *= 10;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2142
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2143
	 //[ compare claculated s/n ratio against expected ]
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2144
     if( computedSNRatioDb >= aExpectedSNRatioDb )
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2145
		 result = ETrue;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2146
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2147
     return result;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
  2148
	}