sl@0: // Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: sl@0: #include "TSU_MMF_SbcCodec.h" sl@0: #include "TSU_MMF_SbcCodecSuite.h" sl@0: sl@0: /** sl@0: * Size of PCM16 wave file header is 44 sl@0: */ sl@0: const TInt KWavFileHeaderSize = 44; sl@0: /** sl@0: * The default buffer size sl@0: */ sl@0: const TUint KDefaultBufferSize = 4096; sl@0: sl@0: /** sl@0: * UID of sbc encoder ECom plugin sl@0: */ sl@0: const TUid KSbcCodecPluginUid = { KMmfUidCodecPCM16ToSBC }; sl@0: /** sl@0: * UID of sbc encoder configuration sl@0: */ sl@0: const TUid KSbcCodecConfigUid = { KMmfUidSBCConfigure }; sl@0: sl@0: #ifdef __WINS__ sl@0: sl@0: _LIT(KSourceFileDir, "c:\\mm\\mmf\\testfiles\\sbc\\"); sl@0: _LIT(KOutputFileDir, "c:\\mm\\mmf\\testfiles\\sbc\\"); sl@0: _LIT(KReferenceFileDir, "c:\\mm\\mmf\\ref\\sbc\\"); sl@0: sl@0: #else sl@0: sl@0: /** sl@0: * armv5 directories sl@0: * All source and comparison files need to be copied manually onto the flash card. sl@0: * This code assumes the flash card is represented by drive E: on the target board. sl@0: */ sl@0: sl@0: /** sl@0: * we don't copy all the wave files onto C: as they are too big, leave them on E: sl@0: */ sl@0: _LIT(KSourceFileDir, "e:\\"); sl@0: /** sl@0: * This folder keeps all the output files sl@0: */ sl@0: _LIT(KOutputFileDir, "c:\\sbc\\"); sl@0: /** sl@0: * This folder keeps all the reference files for comparison sl@0: */ sl@0: _LIT(KReferenceFileDir, "c:\\sbc\\ref\\"); sl@0: sl@0: #endif sl@0: sl@0: // Test source files names sl@0: _LIT(KTestWavFile01, "sbc_test_01.wav"); sl@0: _LIT(KTestWavFile02, "sbc_test_02.wav"); sl@0: _LIT(KTestWavFile03, "sbc_test_03.wav"); sl@0: _LIT(KTestWavFile04, "sbc_test_04.wav"); sl@0: _LIT(KTestWavFile05, "sbc_test_05.wav"); sl@0: _LIT(KTestWavFile06, "sbc_test_06.wav"); sl@0: _LIT(KTestWavFile07, "sbc_test_07.wav"); sl@0: _LIT(KTestWavFile08, "sbc_test_08.wav"); sl@0: _LIT(KTestWavFile09, "sbc_test_09.wav"); sl@0: _LIT(KTestWavFile10, "sbc_test_10.wav"); sl@0: sl@0: _LIT(KTestWavFile11, "sbc_test_11.wav"); sl@0: _LIT(KTestWavFile12, "sbc_test_12.wav"); sl@0: _LIT(KTestWavFile13, "sbc_test_13.wav"); sl@0: _LIT(KTestWavFile14, "sbc_test_14.wav"); sl@0: _LIT(KTestWavFile15, "sbc_test_15.wav"); sl@0: _LIT(KTestWavFile16, "sbc_test_16.wav"); sl@0: _LIT(KTestWavFile17, "sbc_test_17.wav"); sl@0: _LIT(KTestWavFile18, "sbc_test_18.wav"); sl@0: _LIT(KTestWavFile19, "sbc_test_19.wav"); sl@0: _LIT(KTestWavFile20, "sbc_test_20.wav"); sl@0: sl@0: _LIT(KTestWavFile21, "sbc_test_21.wav"); sl@0: _LIT(KTestWavFile22, "sbc_test_22.wav"); sl@0: _LIT(KTestWavFile23, "sbc_test_23.wav"); sl@0: _LIT(KTestWavFile24, "sbc_test_24.wav"); sl@0: _LIT(KTestWavFile25, "sbc_test_25.wav"); sl@0: _LIT(KTestWavFile26, "sbc_test_26.wav"); sl@0: _LIT(KTestWavFile27, "sbc_test_27.wav"); sl@0: _LIT(KTestWavFile28, "sbc_test_28.wav"); sl@0: sl@0: // Test reference file name sl@0: _LIT(KRefSbcFile01, "sbc_test_01.sbc"); sl@0: _LIT(KRefSbcFile02, "sbc_test_02.sbc"); sl@0: _LIT(KRefSbcFile03, "sbc_test_03.sbc"); sl@0: _LIT(KRefSbcFile04, "sbc_test_04.sbc"); sl@0: _LIT(KRefSbcFile05, "sbc_test_05.sbc"); sl@0: _LIT(KRefSbcFile06, "sbc_test_06.sbc"); sl@0: _LIT(KRefSbcFile07, "sbc_test_07.sbc"); sl@0: _LIT(KRefSbcFile08, "sbc_test_08.sbc"); sl@0: _LIT(KRefSbcFile09, "sbc_test_09.sbc"); sl@0: _LIT(KRefSbcFile10, "sbc_test_10.sbc"); sl@0: sl@0: _LIT(KRefSbcFile11, "sbc_test_11.sbc"); sl@0: _LIT(KRefSbcFile12, "sbc_test_12.sbc"); sl@0: _LIT(KRefSbcFile13, "sbc_test_13.sbc"); sl@0: _LIT(KRefSbcFile14, "sbc_test_14.sbc"); sl@0: _LIT(KRefSbcFile15, "sbc_test_15.sbc"); sl@0: _LIT(KRefSbcFile16, "sbc_test_16.sbc"); sl@0: _LIT(KRefSbcFile17, "sbc_test_17.sbc"); sl@0: _LIT(KRefSbcFile18, "sbc_test_18.sbc"); sl@0: _LIT(KRefSbcFile19, "sbc_test_19.sbc"); sl@0: _LIT(KRefSbcFile20, "sbc_test_20.sbc"); sl@0: sl@0: _LIT(KRefSbcFile21, "sbc_test_21.sbc"); sl@0: _LIT(KRefSbcFile22, "sbc_test_22.sbc"); sl@0: _LIT(KRefSbcFile23, "sbc_test_23.sbc"); sl@0: _LIT(KRefSbcFile24, "sbc_test_24.sbc"); sl@0: _LIT(KRefSbcFile25, "sbc_test_25.sbc"); sl@0: _LIT(KRefSbcFile26, "sbc_test_26.sbc"); sl@0: _LIT(KRefSbcFile27, "sbc_test_27.sbc"); sl@0: _LIT(KRefSbcFile28, "sbc_test_28.sbc"); sl@0: sl@0: /** sl@0: * List of channel mode settings sl@0: */ sl@0: enum TChannelMode sl@0: { sl@0: /** sl@0: channel mode is Mono sl@0: */ sl@0: EMono, sl@0: /** sl@0: channel mode is Dual Channel sl@0: */ sl@0: EDual, sl@0: /** sl@0: channel mode is Stereo sl@0: */ sl@0: EStereo, sl@0: /** sl@0: channel mode is Joint Stereo sl@0: */ sl@0: EJoint sl@0: }; sl@0: sl@0: /** sl@0: * List of allocation method settings sl@0: */ sl@0: enum TAllocMethod sl@0: { sl@0: /** sl@0: allocation method is SNR sl@0: */ sl@0: ESNR, sl@0: /** sl@0: allocation method is Loudness sl@0: */ sl@0: ELoud sl@0: }; sl@0: sl@0: /** sl@0: * Table of all 28 tests configurations, each row contains the following fields in order sl@0: * subbands, block length, sampling frequency, channel mode, allocation method, bitpool sl@0: */ sl@0: const TInt gSbcConfig[28][6] = sl@0: { sl@0: // configuration tests (8) sl@0: { 4, 16, 48000, EMono, ESNR, 18 }, sl@0: { 4, 16, 48000, EDual, ESNR, 16 }, sl@0: { 8, 8, 44100, EMono, ELoud, 32 }, sl@0: { 8, 8, 44100, EJoint, ELoud, 56 }, sl@0: { 8, 4, 32000, EMono, ESNR, 24 }, sl@0: { 8, 4, 32000, EStereo, ESNR, 48 }, sl@0: { 4, 12, 16000, EMono, ELoud, 20 }, sl@0: { 4, 12, 16000, EJoint, ELoud, 42 }, sl@0: sl@0: // vbr tests (2) sl@0: { 4, 16, 44100, EMono, ELoud, 15 }, sl@0: { 8, 12, 48000, EJoint, ELoud, 51 }, sl@0: sl@0: // maximum bit rate tests (8) sl@0: { 8, 16, 16000, EMono, ELoud, 128 }, sl@0: { 8, 16, 16000, EJoint, ESNR, 249 }, sl@0: { 8, 16, 32000, EMono, ELoud, 76 }, sl@0: { 8, 16, 32000, EJoint, ESNR, 121 }, sl@0: { 8, 16, 44100, EMono, ELoud, 54 }, sl@0: { 8, 16, 44100, EJoint, ESNR, 86 }, sl@0: { 8, 16, 48000, EMono, ELoud, 49 }, sl@0: { 8, 16, 48000, EJoint, ESNR, 78 }, sl@0: sl@0: // special tests (2) sl@0: { 8, 16, 48000, EMono, ESNR, 29 }, sl@0: { 8, 16, 44100, EJoint, ESNR, 53 }, sl@0: sl@0: // typical tests (8) sl@0: { 8, 16, 44100, EMono, ELoud, 19 }, sl@0: { 8, 16, 48000, EMono, ELoud, 18 }, sl@0: { 8, 16, 44100, EJoint, ELoud, 35 }, sl@0: { 8, 16, 48000, EJoint, ELoud, 33 }, sl@0: { 8, 16, 44100, EMono, ELoud, 31 }, sl@0: { 8, 16, 48000, EMono, ELoud, 29 }, sl@0: { 8, 16, 44100, EJoint, ELoud, 53 }, sl@0: { 8, 16, 48000, EJoint, ELoud, 51 } sl@0: }; sl@0: sl@0: /** sl@0: * This function converts number of subbands into TSBCFrameParameters::TSubbands value sl@0: * @param "TInt aSubbands" sl@0: * number of subbands sl@0: * @return "TSBCFrameParameters::TSubbands" sl@0: * TSBCFrameParameters::TSubbands value sl@0: */ sl@0: static inline TSBCFrameParameters::TSubbands GetSubbandsL(TInt aSubbands) sl@0: { sl@0: switch (aSubbands) sl@0: { sl@0: case 4: return TSBCFrameParameters::E4Subbands; sl@0: case 8: return TSBCFrameParameters::E8Subbands; sl@0: } sl@0: User::Leave(KErrArgument); sl@0: return TSBCFrameParameters::E4Subbands; // just make the compiler happy sl@0: } sl@0: sl@0: /** sl@0: * This function converts number of blocks into TSBCFrameParameters::TBlockLength value sl@0: * @param "TInt aBlocks" sl@0: * number of blocks sl@0: * @return "TSBCFrameParameters::TBlockLength" sl@0: * TSBCFrameParameters::TBlockLength value sl@0: */ sl@0: static inline TSBCFrameParameters::TBlockLength GetBlockLengthL(TInt aBlocks) sl@0: { sl@0: switch (aBlocks) sl@0: { sl@0: case 4: return TSBCFrameParameters::E4Blocks; sl@0: case 8: return TSBCFrameParameters::E8Blocks; sl@0: case 12: return TSBCFrameParameters::E12Blocks; sl@0: case 16: return TSBCFrameParameters::E16Blocks; sl@0: } sl@0: User::Leave(KErrArgument); sl@0: return TSBCFrameParameters::E4Blocks; //just make the compiler happy sl@0: } sl@0: sl@0: /** sl@0: * This function converts sampling frequency value into TSBCFrameParameters::TSamplingFrequency value sl@0: * @param "TInt aSampFreq" sl@0: * real sampling frequency value sl@0: * @return "TSBCFrameParameters::TSamplingFrequency" sl@0: * TSBCFrameParameters::TSamplingFrequency value sl@0: */ sl@0: static inline TSBCFrameParameters::TSamplingFrequency GetSampFreqL(TInt aSampFreq) sl@0: { sl@0: switch (aSampFreq) sl@0: { sl@0: case 16000: return TSBCFrameParameters::E16000Hz; sl@0: case 32000: return TSBCFrameParameters::E32000Hz; sl@0: case 44100: return TSBCFrameParameters::E44100Hz; sl@0: case 48000: return TSBCFrameParameters::E48000Hz; sl@0: } sl@0: User::Leave(KErrArgument); sl@0: return TSBCFrameParameters::E16000Hz; // just make the compiler happy sl@0: } sl@0: sl@0: /** sl@0: * This function converts ChannelMode enum value into TSBCFrameParameters::TChannelMode value sl@0: * @param "TInt aChnlMode" sl@0: * ChannelMode enum value sl@0: * @return "TSBCFrameParameters::TChannelMode" sl@0: * TSBCFrameParameters::TChannelMode value sl@0: */ sl@0: static inline TSBCFrameParameters::TChannelMode GetChannelModeL(TInt aChnlMode) sl@0: { sl@0: switch (aChnlMode) sl@0: { sl@0: case EMono: return TSBCFrameParameters::EMono; sl@0: case EDual: return TSBCFrameParameters::EDualChannel; sl@0: case EStereo: return TSBCFrameParameters::EStereo; sl@0: case EJoint: return TSBCFrameParameters::EJointStereo; sl@0: } sl@0: User::Leave(KErrArgument); sl@0: return TSBCFrameParameters::EMono; // just make the compiler happy sl@0: } sl@0: sl@0: /** sl@0: * This function converts AllocMethod enum value into TSBCFrameParameters::TAllocationMethod value sl@0: * @param "TInt aAllocMthd" sl@0: * AllocMethod enum value sl@0: * @return "TSBCFrameParameters::TAllocationMethod" sl@0: * TSBCFrameParameters::TAllocationMethod value sl@0: */ sl@0: static inline TSBCFrameParameters::TAllocationMethod GetAllocMethodL(TInt aAllocMthd) sl@0: { sl@0: switch (aAllocMthd) sl@0: { sl@0: case ESNR: return TSBCFrameParameters::ESNR; sl@0: case ELoud: return TSBCFrameParameters::ELoudness; sl@0: } sl@0: User::Leave(KErrArgument); sl@0: return TSBCFrameParameters::ESNR; sl@0: } sl@0: sl@0: /** sl@0: * This function gets the configuration for one test from SbcConfig[28] sl@0: * @param "TInt aTestNumber" sl@0: * test number sl@0: * @return "TSBCFrameParameters" sl@0: * the sbc frame parameters used to configure sbc codec sl@0: */ sl@0: static TSBCFrameParameters SbcParametersL(TInt aTestNumber) sl@0: { sl@0: if (aTestNumber < 0 || aTestNumber > 28) sl@0: { sl@0: User::Leave(KErrArgument); sl@0: } sl@0: sl@0: TSBCFrameParameters param; sl@0: param.SetSubbands(GetSubbandsL(gSbcConfig[aTestNumber - 1][0]) ); sl@0: param.SetBlockLength(GetBlockLengthL(gSbcConfig[aTestNumber - 1][1]) ); sl@0: param.SetSamplingFrequency(GetSampFreqL(gSbcConfig[aTestNumber - 1][2]) ); sl@0: param.SetChannelMode(GetChannelModeL(gSbcConfig[aTestNumber - 1][3]) ); sl@0: param.SetAllocationMethod(GetAllocMethodL(gSbcConfig[aTestNumber - 1][4]) ); sl@0: param.SetBitpool(static_cast(gSbcConfig[aTestNumber - 1][5]) ); sl@0: return param; sl@0: } sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTestStep_MMF_SbcCodec::CTestStep_MMF_SbcCodec() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * Destructor sl@0: */ sl@0: CTestStep_MMF_SbcCodec::~CTestStep_MMF_SbcCodec() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * This function gets test source file name for one test sl@0: * @param "TInt aTestNumber" sl@0: * test number sl@0: * @return "const TDesC&" sl@0: * test file name sl@0: */ sl@0: const TDesC& CTestStep_MMF_SbcCodec::GetTestFileName(TInt aTestNumber) sl@0: { sl@0: switch (aTestNumber) sl@0: { sl@0: case 1 : return KTestWavFile01; sl@0: case 2 : return KTestWavFile02; sl@0: case 3 : return KTestWavFile03; sl@0: case 4 : return KTestWavFile04; sl@0: case 5 : return KTestWavFile05; sl@0: case 6 : return KTestWavFile06; sl@0: case 7 : return KTestWavFile07; sl@0: case 8 : return KTestWavFile08; sl@0: case 9 : return KTestWavFile09; sl@0: case 10: return KTestWavFile10; sl@0: sl@0: case 11: return KTestWavFile11; sl@0: case 12: return KTestWavFile12; sl@0: case 13: return KTestWavFile13; sl@0: case 14: return KTestWavFile14; sl@0: case 15: return KTestWavFile15; sl@0: case 16: return KTestWavFile16; sl@0: case 17: return KTestWavFile17; sl@0: case 18: return KTestWavFile18; sl@0: case 19: return KTestWavFile19; sl@0: case 20: return KTestWavFile20; sl@0: sl@0: case 21: return KTestWavFile21; sl@0: case 22: return KTestWavFile22; sl@0: case 23: return KTestWavFile23; sl@0: case 24: return KTestWavFile24; sl@0: case 25: return KTestWavFile25; sl@0: case 26: return KTestWavFile26; sl@0: case 27: return KTestWavFile27; sl@0: case 28: return KTestWavFile28; sl@0: } sl@0: User::Panic(_L("Invalid test number"), KErrArgument); sl@0: return KTestWavFile01; sl@0: } sl@0: sl@0: /** sl@0: * This function gets test reference file name for one test sl@0: * @param "TInt aTestNumber" sl@0: * test number sl@0: * @return "const TDesC&" sl@0: * reference file name sl@0: */ sl@0: const TDesC& CTestStep_MMF_SbcCodec::GetRefFileName(TInt aTestNumber) sl@0: { sl@0: switch (aTestNumber) sl@0: { sl@0: case 1 : return KRefSbcFile01; sl@0: case 2 : return KRefSbcFile02; sl@0: case 3 : return KRefSbcFile03; sl@0: case 4 : return KRefSbcFile04; sl@0: case 5 : return KRefSbcFile05; sl@0: case 6 : return KRefSbcFile06; sl@0: case 7 : return KRefSbcFile07; sl@0: case 8 : return KRefSbcFile08; sl@0: case 9 : return KRefSbcFile09; sl@0: case 10: return KRefSbcFile10; sl@0: sl@0: case 11: return KRefSbcFile11; sl@0: case 12: return KRefSbcFile12; sl@0: case 13: return KRefSbcFile13; sl@0: case 14: return KRefSbcFile14; sl@0: case 15: return KRefSbcFile15; sl@0: case 16: return KRefSbcFile16; sl@0: case 17: return KRefSbcFile17; sl@0: case 18: return KRefSbcFile18; sl@0: case 19: return KRefSbcFile19; sl@0: case 20: return KRefSbcFile20; sl@0: sl@0: case 21: return KRefSbcFile21; sl@0: case 22: return KRefSbcFile22; sl@0: case 23: return KRefSbcFile23; sl@0: case 24: return KRefSbcFile24; sl@0: case 25: return KRefSbcFile25; sl@0: case 26: return KRefSbcFile26; sl@0: case 27: return KRefSbcFile27; sl@0: case 28: return KRefSbcFile28; sl@0: } sl@0: User::Panic(_L("Invalid test number"), KErrArgument); sl@0: return KRefSbcFile01; sl@0: } sl@0: sl@0: /** sl@0: * This function reads source out from source file from a specific position sl@0: and fill the srouce into the source buffer. sl@0: * @param "const TDesC& aFileName" sl@0: * the source file name sl@0: * @param "TDes8& aSrcBuffer" sl@0: * the source buffer sl@0: * @param "TInt aFilePos" sl@0: * the file position sl@0: * @leave if reading file failed sl@0: */ sl@0: void CTestStep_MMF_SbcCodec::ReadSourceL(const TDesC& aFileName, TDes8& aSrcBuffer, TInt aFilePos) sl@0: { sl@0: TFileName srcFileName(KSourceFileDir); sl@0: srcFileName.Append(aFileName); sl@0: sl@0: // connect to file service sl@0: RFs fs; sl@0: User::LeaveIfError(fs.Connect()); sl@0: CleanupClosePushL(fs); sl@0: sl@0: RFile srcFile; sl@0: User::LeaveIfError(srcFile.Open(fs, srcFileName, EFileRead | EFileShareAny) ); sl@0: CleanupClosePushL(srcFile); sl@0: sl@0: aFilePos += KWavFileHeaderSize; // skip wave file header sl@0: User::LeaveIfError(srcFile.Seek(ESeekStart, aFilePos) ); sl@0: User::LeaveIfError(srcFile.Read(aSrcBuffer) ); sl@0: sl@0: CleanupStack::PopAndDestroy(2); sl@0: } sl@0: sl@0: /** sl@0: * This function writes destination into destination file from a specific position. sl@0: * @param "const TDesC& aFileName" sl@0: * the destination file name sl@0: * @param "TDes8& aDstBuffer" sl@0: * the destination buffer sl@0: * @param "TInt aFilePos" sl@0: * the file position sl@0: * @leave if writing file failed sl@0: */ sl@0: void CTestStep_MMF_SbcCodec::WriteDstToFileL(const TDesC& aFileName, const TDes8& aDstBuffer, TInt aFilePos) sl@0: { sl@0: TFileName dstFileName(KOutputFileDir); sl@0: dstFileName.Append(aFileName); sl@0: sl@0: // connect to file service sl@0: RFs fs; sl@0: User::LeaveIfError(fs.Connect()); sl@0: CleanupClosePushL(fs); sl@0: sl@0: RFile dstFile; sl@0: TInt err = dstFile.Open(fs, dstFileName, EFileWrite); sl@0: if (err == KErrNotFound) // file does not exist - create it sl@0: { sl@0: err = dstFile.Create(fs, dstFileName, EFileWrite); sl@0: } sl@0: if (err != KErrNone) sl@0: { sl@0: User::Leave(err); sl@0: } sl@0: CleanupClosePushL(dstFile); sl@0: sl@0: User::LeaveIfError(dstFile.Seek(ESeekStart, aFilePos) ); sl@0: User::LeaveIfError(dstFile.Write(aDstBuffer) ); sl@0: sl@0: CleanupStack::PopAndDestroy(2); sl@0: } sl@0: sl@0: /** sl@0: * This function compares two files to check if they are the same. sl@0: * @param "const TDesC& aFileName" sl@0: * the compare and reference files name sl@0: * @return "TInt" sl@0: * 0: two files are the same sl@0: * -1: two files are NOT the same sl@0: * @leave if reading tow files failed sl@0: */ sl@0: TInt CTestStep_MMF_SbcCodec::CompareFileL(const TDesC& aFileName) sl@0: { sl@0: TFileName cmpFileName(KOutputFileDir); sl@0: cmpFileName.Append(aFileName); sl@0: sl@0: TFileName refFileName(KReferenceFileDir); sl@0: refFileName.Append(aFileName); sl@0: sl@0: // connect to file service sl@0: RFs fs; sl@0: User::LeaveIfError(fs.Connect()); sl@0: CleanupClosePushL(fs); sl@0: sl@0: RFile cmpFile; sl@0: User::LeaveIfError(cmpFile.Open(fs, cmpFileName, EFileRead) ); sl@0: CleanupClosePushL(cmpFile); sl@0: sl@0: RFile refFile; sl@0: User::LeaveIfError(refFile.Open(fs, refFileName, EFileRead) ); sl@0: CleanupClosePushL(refFile); sl@0: sl@0: TInt cmpFileSize = 0; sl@0: TInt refFileSize = 0; sl@0: sl@0: cmpFile.Size(cmpFileSize); sl@0: refFile.Size(refFileSize); sl@0: sl@0: if (cmpFileSize != refFileSize) sl@0: { sl@0: CleanupStack::PopAndDestroy(3); // refFile, cmpFile, fs sl@0: return -1; sl@0: } sl@0: sl@0: CMMFDataBuffer* cmpFileBuf = CMMFDataBuffer::NewL(KDefaultBufferSize); sl@0: CleanupStack::PushL(cmpFileBuf); sl@0: CMMFDataBuffer* refFileBuf = CMMFDataBuffer::NewL(KDefaultBufferSize); sl@0: CleanupStack::PushL(refFileBuf); sl@0: sl@0: TInt result = 0; sl@0: for (;;) sl@0: { sl@0: User::LeaveIfError(cmpFile.Read(cmpFileBuf->Data() ) ); sl@0: if (cmpFileBuf->Data().Length() == 0) // end of file sl@0: { sl@0: break; sl@0: } sl@0: sl@0: User::LeaveIfError(refFile.Read(refFileBuf->Data() ) ); sl@0: if (cmpFileBuf->Data() != refFileBuf->Data() ) sl@0: { sl@0: result = -1; sl@0: break; sl@0: } sl@0: sl@0: cmpFileBuf->Data().Zero(); sl@0: refFileBuf->Data().Zero(); sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(5); // refFileBuff, cmpFileBuff, refFile, cmpFile, fs sl@0: return result; sl@0: } sl@0: sl@0: /** sl@0: * This function is called by two TestNewL() tests, it calls ProcessL() once sl@0: * and checks the result. sl@0: * @param "CMMFCodec* aCodec" sl@0: * the codec for test sl@0: * @return "TVerdict" sl@0: * EPass: at least one byte src processed and one byte of dst generated and no error sl@0: * EFail: other wise. sl@0: * @leave if out of memory or ProcessL() leaves sl@0: */ sl@0: TVerdict CTestStep_MMF_SbcCodec::ProcessOnceForNewL(CMMFCodec* aCodec) sl@0: { sl@0: TVerdict testResult = EFail; sl@0: sl@0: // create buffers sl@0: CMMFDataBuffer* srcBuffer = CMMFDataBuffer::NewL(KDefaultBufferSize); sl@0: CleanupStack::PushL(srcBuffer); sl@0: CMMFDataBuffer* dstBuffer = CMMFDataBuffer::NewL(KDefaultBufferSize); sl@0: CleanupStack::PushL(dstBuffer); sl@0: sl@0: TInt testNumber = 28; sl@0: TPckgBuf config(SbcParametersL(testNumber) ); sl@0: aCodec->ConfigureL(KSbcCodecConfigUid, config); sl@0: sl@0: ReadSourceL(GetTestFileName(testNumber), srcBuffer->Data(), 0); sl@0: sl@0: if (srcBuffer->Data().Length() > 0) // end of file sl@0: { sl@0: TCodecProcessResult result = aCodec->ProcessL(*srcBuffer, *dstBuffer); sl@0: sl@0: if (result.iDstBytesAdded > 0 && result.iSrcBytesProcessed > 0) sl@0: { sl@0: testResult = EPass; sl@0: } sl@0: } sl@0: else sl@0: { sl@0: ERR_PRINTF1(_L(">> CTestStep_MMF_SbcCodec::ProcessOnceForNewL no source read") ); sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(2); // dstBuffer, srcBuffer sl@0: sl@0: return testResult; sl@0: } sl@0: sl@0: /** sl@0: * This function tests codec instantiation by ECom plugin UID. sl@0: * @param "TUid aCodecUID" sl@0: * the codec ECom UID sl@0: * @return "TVerdict" sl@0: * EPass: ProcessOnceForNewL() passes sl@0: * EFail: ProcessOnceForNewL() fails sl@0: * @leave if CMMFCodec::NewL() leaves sl@0: */ sl@0: TVerdict CTestStep_MMF_SbcCodec::TestNewL(TUid aCodecUID) sl@0: { sl@0: //create codec from uid sl@0: CMMFCodec* codec = NULL; sl@0: TRAPD(err, codec = CMMFCodec::NewL(aCodecUID) ); sl@0: sl@0: if (err != KErrNone) sl@0: { sl@0: ERR_PRINTF2(_L(">> CTestStep_MMF_SbcCodec::TestNewL Leave occurred in NewL, error code %d"), err); sl@0: return EFail; sl@0: } sl@0: if (!codec) sl@0: { sl@0: ERR_PRINTF1(_L(">> CTestStep_MMF_SbcCodec::TestNewL NewL returned NULL") ); sl@0: return EFail; sl@0: } sl@0: sl@0: CleanupStack::PushL(codec); sl@0: TVerdict result = ProcessOnceForNewL(codec); sl@0: CleanupStack::PopAndDestroy(); //codec sl@0: return result; sl@0: } sl@0: sl@0: /** sl@0: * This function tests codec instantiation by two FourCC codes. sl@0: * @param "const TFourCC& aSrcFourCC" sl@0: * the FourCC code of source media type sl@0: * @param "const TFourCC& aDstFourCC" sl@0: * the FourCC code of destination media type sl@0: * @return "TVerdict" sl@0: * EPass: ProcessOnceForNewL() passes sl@0: * EFail: ProcessOnceForNewL() fails sl@0: * @leave if CMMFCodec::NewL() or ProcessOnceForNewL() leaves sl@0: */ sl@0: TVerdict CTestStep_MMF_SbcCodec::TestNewL(const TFourCC& aSrcFourCC, const TFourCC& aDstFourCC) sl@0: { sl@0: //create codec from uid sl@0: CMMFCodec* codec = NULL; sl@0: TRAPD(err, codec = CMMFCodec::NewL(aSrcFourCC, aDstFourCC) ); sl@0: sl@0: if (err != KErrNone) sl@0: { sl@0: ERR_PRINTF2(_L(">> CTestStep_MMF_SbcCodec::TestNewL Leave occurred in NewL, error code %d"), err); sl@0: return EFail; sl@0: } sl@0: if (!codec) sl@0: { sl@0: ERR_PRINTF1(_L(">> CTestStep_MMF_SbcCodec::TestNewL NewL returned NULL") ); sl@0: return EFail; sl@0: } sl@0: sl@0: CleanupStack::PushL(codec); sl@0: TVerdict result = ProcessOnceForNewL(codec); sl@0: CleanupStack::PopAndDestroy(); //codec sl@0: return result; sl@0: } sl@0: sl@0: /** sl@0: * Performance test sl@0: * This function tests ProcessL() function, it checks if ProcessL() returns the sl@0: * correct result with different buffer size settings sl@0: * @return "TVerdict" sl@0: * EPass: the results are expected ones. sl@0: * EFail: otherwise. sl@0: * @leave if out of memory or ProcessL(), ReadSourceL() leaves sl@0: */ sl@0: TVerdict CTestStep_MMF_SbcCodec::TestProcessL() sl@0: { sl@0: //create codec from uid sl@0: CMMFCodec* codec = NULL; sl@0: TRAPD(err, codec = CMMFCodec::NewL(KSbcCodecPluginUid) ); sl@0: sl@0: if (err != KErrNone) sl@0: { sl@0: ERR_PRINTF2(_L(">> CTestStep_MMF_SbcCodec::TestProcessL Leave occurred in NewL, error code %d"), err); sl@0: return EFail; sl@0: } sl@0: if (!codec) sl@0: { sl@0: ERR_PRINTF1(_L(">> CTestStep_MMF_SbcCodec::TestProcessL NewL returned NULL") ); sl@0: return EFail; sl@0: } sl@0: sl@0: CleanupStack::PushL(codec); sl@0: sl@0: const TInt testNumber = 28; sl@0: sl@0: TSBCFrameParameters param = SbcParametersL(testNumber); sl@0: sl@0: const TUint sbcFrameLength = param.CalcFrameLength(); sl@0: const TUint pcmFrameSize = sizeof(TInt16) * param.BlockLength() * param.Channels() * param.Subbands(); sl@0: sl@0: // create src buffer sl@0: CMMFDataBuffer* srcBuffer = CMMFDataBuffer::NewL(pcmFrameSize); sl@0: CleanupStack::PushL(srcBuffer); sl@0: sl@0: // dummy buffer, smaller than one frame length sl@0: CMMFDataBuffer* dummyBuffer = CMMFDataBuffer::NewL(sbcFrameLength - 1); sl@0: CleanupStack::PushL(dummyBuffer); sl@0: sl@0: // create dst buffer sl@0: CMMFDataBuffer* dstBuffer = CMMFDataBuffer::NewL(sbcFrameLength); sl@0: CleanupStack::PushL(dstBuffer); sl@0: sl@0: ReadSourceL(GetTestFileName(testNumber), srcBuffer->Data(), 0); sl@0: sl@0: if (static_cast(srcBuffer->Data().Length() ) != pcmFrameSize) sl@0: { sl@0: ERR_PRINTF1(_L(">> CTestStep_MMF_SbcCodec::TestProcessL read source failed") ); sl@0: CleanupStack::PopAndDestroy(3); // dstBuffer, srcBuffer, codec sl@0: return EFail; sl@0: } sl@0: sl@0: TVerdict testResult = EPass; sl@0: TCodecProcessResult procResult; sl@0: sl@0: /** test ProcessL() without ConfigureL() called, should leave with KErrAbort */ sl@0: sl@0: TRAP(err, procResult = codec->ProcessL(*srcBuffer, *dstBuffer) ); sl@0: sl@0: if (err != KErrAbort || sl@0: procResult.iSrcBytesProcessed != 0 || sl@0: procResult.iDstBytesAdded != 0 || sl@0: procResult.iStatus != TCodecProcessResult::EProcessError) sl@0: { sl@0: ERR_PRINTF1(_L(">> CTestStep_MMF_SbcCodec::TestProcessL failed, ProcessL didn't leave with KErrAbort when ConfigureL() is not called") ); sl@0: testResult = EFail; sl@0: } sl@0: sl@0: /** test ProcessL() with small dst buffer size, should leave with KErrArgument */ sl@0: sl@0: TPckgBuf config(param); sl@0: codec->ConfigureL(KSbcCodecConfigUid, config); sl@0: sl@0: codec->ResetL(); sl@0: TRAP(err, procResult = codec->ProcessL(*srcBuffer, *dummyBuffer) ); sl@0: sl@0: if (err != KErrArgument || sl@0: procResult.iSrcBytesProcessed != 0 || sl@0: procResult.iDstBytesAdded != 0 || sl@0: procResult.iStatus != TCodecProcessResult::EProcessError) sl@0: { sl@0: ERR_PRINTF1(_L(">> CTestStep_MMF_SbcCodec::TestProcessL failed in ProcessL") ); sl@0: testResult = EFail; sl@0: } sl@0: sl@0: /** test ProcessL() with correct settings, should return EProcessComplete */ sl@0: sl@0: codec->ResetL(); sl@0: TRAP(err, procResult = codec->ProcessL(*srcBuffer, *dstBuffer) ); sl@0: sl@0: if (err != KErrNone || sl@0: procResult.iSrcBytesProcessed != pcmFrameSize || sl@0: procResult.iDstBytesAdded != sbcFrameLength || sl@0: procResult.iStatus != TCodecProcessResult::EProcessComplete) sl@0: { sl@0: ERR_PRINTF1(_L(">> CTestStep_MMF_SbcCodec::TestProcessL failed, ProcessL didn't work propertly with correct settings") ); sl@0: testResult = EFail; sl@0: } sl@0: sl@0: /** test ProcessL() with not enough dst buffer remained, should return EProcessIncomplete */ sl@0: sl@0: // now the remaining dst buffer size is one byte less than one frame length sl@0: dstBuffer->SetPosition(1); sl@0: sl@0: codec->ResetL(); sl@0: TRAP(err, procResult = codec->ProcessL(*srcBuffer, *dstBuffer) ); sl@0: sl@0: if (err != KErrNone || sl@0: procResult.iSrcBytesProcessed != 0 || sl@0: procResult.iDstBytesAdded != 0 || sl@0: procResult.iStatus != TCodecProcessResult::EProcessIncomplete) sl@0: { sl@0: ERR_PRINTF1(_L(">> CTestStep_MMF_SbcCodec::TestProcessL failed, ProcessL didn't return EProcessIncomplete when there is not enough dst buffer") ); sl@0: testResult = EFail; sl@0: } sl@0: sl@0: /** test ProcessL() with not enough src buffer remained, should return EDstNotFilled */ sl@0: sl@0: // set this position to an even value as only even number of samples will be cached sl@0: const TInt srcPos = 2; sl@0: // the remaining src buffer size is less than one frame, it should be cached, sl@0: // and return EProcessDstNotFilled sl@0: srcBuffer->SetPosition(srcPos); sl@0: // now the remaining dst buffer size is one frame length sl@0: dstBuffer->SetPosition(0); sl@0: sl@0: codec->ResetL(); sl@0: TRAP(err, procResult = codec->ProcessL(*srcBuffer, *dstBuffer) ); sl@0: sl@0: if (err != KErrNone || sl@0: procResult.iSrcBytesProcessed != pcmFrameSize - srcPos || sl@0: procResult.iDstBytesAdded != 0 || sl@0: procResult.iStatus != TCodecProcessResult::EDstNotFilled) sl@0: { sl@0: ERR_PRINTF1(_L(">> CTestStep_MMF_SbcCodec::TestProcessL failed, ProcessL didn't return EDstNotFilled when there is not enough src buffer") ); sl@0: testResult = EFail; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(4); // dstBuffer, dummyBuffer, srcBuffer, codec sl@0: return testResult; sl@0: } sl@0: sl@0: /** sl@0: * This function tests the whole encoding routine with a specific settings (e.g. sl@0: * sbc frameparameters, src buffer size, dst buffer size) and compares the result sl@0: * file with reference file. sl@0: * @param "TInt aTestNumber" sl@0: * the test number. sl@0: * @param "TInt aSrcBufSize" sl@0: * the source buffer size. sl@0: * @param "TInt aDstBufSize" sl@0: * the destination buffer size. sl@0: * @return "TVerdict" sl@0: * EPass: encoded file is the same as the reference file. sl@0: * EFail: encoded file is NOT the same as the reference file. sl@0: * @leave if out of memory or ProcessL(), ReadSourceL(), WriteDstToFileL() leaves sl@0: */ sl@0: TVerdict CTestStep_MMF_SbcCodec::TestEncodeL(TInt aTestNumber, TInt aSrcBufSize, TInt aDstBufSize) sl@0: { sl@0: //create codec from uid sl@0: CMMFCodec* codec = NULL; sl@0: TRAPD(err, codec = CMMFCodec::NewL(KSbcCodecPluginUid) ); sl@0: sl@0: if (err != KErrNone) sl@0: { sl@0: ERR_PRINTF2(_L(">> CTestStep_MMF_SbcCodec::TestEncodeL Leave occurred in NewL, error code %d"), err); sl@0: return EFail; sl@0: } sl@0: if (!codec) sl@0: { sl@0: ERR_PRINTF1(_L(">> CTestStep_MMF_SbcCodec::TestEncodeL NewL returned NULL") ); sl@0: return EFail; sl@0: } sl@0: sl@0: CleanupStack::PushL(codec); sl@0: sl@0: // create buffers sl@0: CMMFDataBuffer* srcBuffer = CMMFDataBuffer::NewL(aSrcBufSize); sl@0: CleanupStack::PushL(srcBuffer); sl@0: CMMFDataBuffer* dstBuffer = CMMFDataBuffer::NewL(aDstBufSize); sl@0: CleanupStack::PushL(dstBuffer); sl@0: sl@0: TPckgBuf config(SbcParametersL(aTestNumber) ); sl@0: codec->ConfigureL(KSbcCodecConfigUid, config); sl@0: sl@0: TInt srcFilePos = 0; sl@0: TInt dstFilePos = 0; sl@0: sl@0: for (;;) sl@0: { sl@0: ReadSourceL(GetTestFileName(aTestNumber), srcBuffer->Data(), srcFilePos); sl@0: sl@0: if (srcBuffer->Data().Length() == 0) // end of file sl@0: { sl@0: break; sl@0: } sl@0: sl@0: TCodecProcessResult result = codec->ProcessL(*srcBuffer, *dstBuffer); sl@0: sl@0: WriteDstToFileL(GetRefFileName(aTestNumber), dstBuffer->Data(), dstFilePos); sl@0: sl@0: srcBuffer->Data().Zero(); sl@0: dstBuffer->Data().Zero(); sl@0: sl@0: srcFilePos += result.iSrcBytesProcessed; sl@0: dstFilePos += result.iDstBytesAdded; sl@0: } sl@0: sl@0: TVerdict result = EPass; sl@0: if (CompareFileL(GetRefFileName(aTestNumber) ) != 0) sl@0: { sl@0: result = EFail; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); // dstBuffer, srcBuffer, codec sl@0: return result; sl@0: } sl@0: sl@0: /** sl@0: * This function tests codec ResetL() function make sure the cach buffer sl@0: * gets cleared when it gets called. It compares the encoded file with the reference file sl@0: * @return "TVerdict" sl@0: * EPass: encoded file is the same as the reference file. sl@0: * EFail: encoded file is NOT the same as the reference file. sl@0: * @leave if out of memory or ProcessL(), ReadSourceL(), WriteDstToFileL() leaves sl@0: */ sl@0: TVerdict CTestStep_MMF_SbcCodec::TestRepositionL() sl@0: { sl@0: //create codec from uid sl@0: CMMFCodec* codec = NULL; sl@0: TRAPD(err, codec = CMMFCodec::NewL(KSbcCodecPluginUid) ); sl@0: sl@0: if (err != KErrNone) sl@0: { sl@0: ERR_PRINTF2(_L(">> CTestStep_MMF_SbcCodec::TestRepositionL Leave occurred in NewL, error code %d"), err); sl@0: return EFail; sl@0: } sl@0: if (!codec) sl@0: { sl@0: ERR_PRINTF1(_L(">> CTestStep_MMF_SbcCodec::TestRepositionL NewL returned NULL") ); sl@0: return EFail; sl@0: } sl@0: sl@0: CleanupStack::PushL(codec); sl@0: sl@0: const TInt testNumber = 28; sl@0: // this size will make sure some samples will be cached, sl@0: // also make sure it is an EVEN number sl@0: const TInt srcBufSize = 4094; sl@0: const TInt dstBufSize = 2048; sl@0: sl@0: // create buffers sl@0: CMMFDataBuffer* srcBuffer = CMMFDataBuffer::NewL(srcBufSize); sl@0: CleanupStack::PushL(srcBuffer); sl@0: CMMFDataBuffer* dstBuffer = CMMFDataBuffer::NewL(dstBufSize); sl@0: CleanupStack::PushL(dstBuffer); sl@0: sl@0: TSBCFrameParameters param = SbcParametersL(testNumber); sl@0: sl@0: TPckgBuf config(param); sl@0: codec->ConfigureL(KSbcCodecConfigUid, config); sl@0: sl@0: const TUint pcmFrameSize = sizeof(TInt16) * param.BlockLength() * param.Channels() * param.Subbands(); sl@0: sl@0: TInt srcFilePos = 0; sl@0: TInt dstFilePos = 0; sl@0: sl@0: for (;;) sl@0: { sl@0: ReadSourceL(GetTestFileName(testNumber), srcBuffer->Data(), srcFilePos); sl@0: sl@0: if (srcBuffer->Data().Length() == 0) // end of file sl@0: { sl@0: break; sl@0: } sl@0: sl@0: TCodecProcessResult result = codec->ProcessL(*srcBuffer, *dstBuffer); sl@0: sl@0: WriteDstToFileL(GetRefFileName(testNumber), dstBuffer->Data(), dstFilePos); sl@0: sl@0: // clear up any cached samples sl@0: codec->ResetL(); sl@0: // the iSrcBytesProcessed includes the encoded src size plus the cached src size, sl@0: // here set the iSrcBytesProcessed to the encoded src size only as we cleared up sl@0: // the cached samples sl@0: result.iSrcBytesProcessed -= srcBuffer->Data().Length() % pcmFrameSize; sl@0: sl@0: srcBuffer->Data().Zero(); sl@0: dstBuffer->Data().Zero(); sl@0: sl@0: // set new src file position, which is the end of encoded src (no cached src) sl@0: srcFilePos += result.iSrcBytesProcessed; sl@0: // set new dst file position sl@0: dstFilePos += result.iDstBytesAdded; sl@0: } sl@0: sl@0: TVerdict result = EPass; sl@0: if (CompareFileL(GetRefFileName(testNumber) ) != 0) sl@0: { sl@0: result = EFail; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); // dstBuffer, srcBuffer, codec sl@0: return result; sl@0: } sl@0: sl@0: /** sl@0: * This test tests changing configuration for the codec. It calls ConfigureL() once to sl@0: * encode one sbc bitstream, then changes a different configuration by calling ConfigureL() sl@0: * and encode another sbc bitstream. sl@0: * @return "TVerdict" sl@0: * EPass: if encoded sbc files are the same as the reference files. sl@0: * EFail: if not. sl@0: * @leave if ReadSourceL(), ProcessL() leaves sl@0: */ sl@0: TVerdict CTestStep_MMF_SbcCodec::TestChangeConfigL() sl@0: { sl@0: //create codec from uid sl@0: CMMFCodec* codec = NULL; sl@0: TRAPD(err, codec = CMMFCodec::NewL(KSbcCodecPluginUid) ); sl@0: sl@0: if (err != KErrNone) sl@0: { sl@0: ERR_PRINTF2(_L(">> CTestStep_MMF_SbcCodec::TestChangeConfigL Leave occurred in NewL, error code %d"), err); sl@0: return EFail; sl@0: } sl@0: if (!codec) sl@0: { sl@0: ERR_PRINTF1(_L(">> CTestStep_MMF_SbcCodec::TestChangeConfigL NewL returned NULL") ); sl@0: return EFail; sl@0: } sl@0: sl@0: CleanupStack::PushL(codec); sl@0: sl@0: const TInt testNumber[2] = {1, 28}; sl@0: // this size will make sure some samples will be cached, sl@0: // also make sure it is an EVEN number sl@0: const TInt srcBufSize = 4094; sl@0: const TInt dstBufSize = 2048; sl@0: sl@0: // create buffers sl@0: CMMFDataBuffer* srcBuffer = CMMFDataBuffer::NewL(srcBufSize); sl@0: CleanupStack::PushL(srcBuffer); sl@0: CMMFDataBuffer* dstBuffer = CMMFDataBuffer::NewL(dstBufSize); sl@0: CleanupStack::PushL(dstBuffer); sl@0: sl@0: TVerdict result = EPass; sl@0: for (TInt test = 0; test < 2; test++) sl@0: { sl@0: TSBCFrameParameters param = SbcParametersL(testNumber[test]); sl@0: sl@0: TPckgBuf config(param); sl@0: codec->ConfigureL(KSbcCodecConfigUid, config); sl@0: codec->ResetL(); sl@0: sl@0: TInt srcFilePos = 0; sl@0: TInt dstFilePos = 0; sl@0: sl@0: for (;;) sl@0: { sl@0: ReadSourceL(GetTestFileName(testNumber[test]), srcBuffer->Data(), srcFilePos); sl@0: sl@0: if (srcBuffer->Data().Length() == 0) // end of file sl@0: { sl@0: break; sl@0: } sl@0: sl@0: TCodecProcessResult result = codec->ProcessL(*srcBuffer, *dstBuffer); sl@0: sl@0: WriteDstToFileL(GetRefFileName(testNumber[test]), dstBuffer->Data(), dstFilePos); sl@0: sl@0: srcBuffer->Data().Zero(); sl@0: dstBuffer->Data().Zero(); sl@0: sl@0: srcFilePos += result.iSrcBytesProcessed; sl@0: dstFilePos += result.iDstBytesAdded; sl@0: } sl@0: sl@0: if (CompareFileL(GetRefFileName(testNumber[test]) ) != 0) sl@0: { sl@0: result = EFail; sl@0: } sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(3); // dstBuffer, srcBuffer, codec sl@0: return result; sl@0: } sl@0: sl@0: /** sl@0: * This tests memory scribble for ProcessL(). It creates a buffer size of frame_length + 2, sl@0: * the first byte and last byte are used to detect memory scribble, sl@0: * the middle frame_length bytes are used for destination buffer. It calls ProcessL() once. sl@0: * and checks if the first or last byte value changed to check memory scribble. sl@0: * @return "TVerdict" sl@0: * EPass: if there is no momery scribble. sl@0: * EFail: if there is momery scribble. sl@0: * @leave if ReadSourceL(), ProcessL() leaves sl@0: */ sl@0: TVerdict CTestStep_MMF_SbcCodec::TestMemoryScribbleL() sl@0: { sl@0: //create codec from uid sl@0: CMMFCodec* codec = NULL; sl@0: TRAPD(err, codec = CMMFCodec::NewL(KSbcCodecPluginUid) ); sl@0: sl@0: if (err != KErrNone) sl@0: { sl@0: ERR_PRINTF2(_L(">> CTestStep_MMF_SbcCodec::TestMemoryScribbleL Leave occurred in NewL, error code %d"), err); sl@0: return EFail; sl@0: } sl@0: if (!codec) sl@0: { sl@0: ERR_PRINTF1(_L(">> CTestStep_MMF_SbcCodec::TestMemoryScribbleL NewL returned NULL") ); sl@0: return EFail; sl@0: } sl@0: sl@0: CleanupStack::PushL(codec); sl@0: sl@0: const TInt testNumber = 28; sl@0: sl@0: TSBCFrameParameters param = SbcParametersL(testNumber); sl@0: sl@0: TPckgBuf config(param); sl@0: codec->ConfigureL(KSbcCodecConfigUid, config); sl@0: sl@0: const TUint sbcFrameLength = param.CalcFrameLength(); sl@0: const TUint pcmFrameSize = sizeof(TInt16) * param.BlockLength() * param.Channels() * param.Subbands(); sl@0: sl@0: // create buffers sl@0: CMMFDataBuffer* srcBuffer = CMMFDataBuffer::NewL(pcmFrameSize); sl@0: CleanupStack::PushL(srcBuffer); sl@0: sl@0: // front and end bytes are used to detect memory scribble sl@0: CMMFDataBuffer* buffer = CMMFDataBuffer::NewL(sbcFrameLength + 2); sl@0: CleanupStack::PushL(buffer); sl@0: sl@0: TUint8* firstByte = const_cast(buffer->Data().Ptr() ); sl@0: TUint8* lastByte = firstByte + sbcFrameLength + 1; sl@0: sl@0: const TUint8 initValue = 0xaa; // 10101010 sl@0: sl@0: *firstByte = initValue; sl@0: *lastByte = initValue; sl@0: sl@0: CMMFPtrBuffer* dstBuffer = CMMFPtrBuffer::NewL(TPtr8(firstByte + 1, sbcFrameLength) ); sl@0: CleanupStack::PushL(dstBuffer); sl@0: sl@0: ReadSourceL(GetTestFileName(testNumber), srcBuffer->Data(), 0); sl@0: sl@0: TVerdict testResult = EPass; sl@0: if (static_cast(srcBuffer->Data().Length() ) == pcmFrameSize) sl@0: { sl@0: TCodecProcessResult result = codec->ProcessL(*srcBuffer, *dstBuffer); sl@0: sl@0: if (result.iSrcBytesProcessed != pcmFrameSize || sl@0: result.iDstBytesAdded != sbcFrameLength || sl@0: result.iStatus != TCodecProcessResult::EProcessComplete) sl@0: { sl@0: ERR_PRINTF1(_L(">> CTestStep_MMF_SbcCodec::TestMemoryScribbleL failed in ProcessL") ); sl@0: testResult = EFail; sl@0: } sl@0: sl@0: if (*firstByte != initValue || *lastByte != initValue ) // memory been scribbled sl@0: { sl@0: ERR_PRINTF1(_L(">> CTestStep_MMF_SbcCodec::TestMemoryScribbleL memory scribble occured") ); sl@0: testResult = EFail; sl@0: } sl@0: } sl@0: else sl@0: { sl@0: ERR_PRINTF1(_L(">> CTestStep_MMF_SbcCodec::TestMemoryScribbleL read source failed") ); sl@0: testResult = EFail; sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(4); // dstBuffer, buffer, srcBuffer, codec sl@0: return testResult; sl@0: } sl@0: sl@0: /** sl@0: * This tests all the codec APIs (here we are using TestRepositionL() test as it sl@0: * uses all the APIs) and checks if there is any memory leak, it panics if so. sl@0: * @return "TVerdict" sl@0: * EPass: if there is no momery leak. sl@0: * EFail: if there is momery leak. sl@0: * @leave if TestRepositionL() leaves sl@0: */ sl@0: TVerdict CTestStep_MMF_SbcCodec::TestMemoryLeakL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: TestRepositionL(); sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: sl@0: return EPass; sl@0: } sl@0: sl@0: /** sl@0: * This function tests how NewL deals with a memory allocation failure. This test sl@0: * will pass if NewL leaves with the correct error code on every memory allocation. sl@0: * sl@0: * @return "TVerdict" sl@0: * EPass: if the test passes. sl@0: * EFail: if the test fails. sl@0: */ sl@0: TVerdict CTestStep_MMF_SbcCodec::TestNewLOutOfMemoryL() sl@0: { sl@0: TVerdict testResult = EPass; sl@0: TInt failCount = 1; sl@0: sl@0: for (;;) sl@0: { sl@0: __MM_HEAP_MARK; sl@0: __UHEAP_FAILNEXT(failCount); sl@0: sl@0: CMMFCodec* codec = NULL; sl@0: TRAPD(err, codec = CMMFCodec::NewL(KSbcCodecPluginUid) ); sl@0: sl@0: // it should return either KErrNone or KErrNoMemory, sl@0: // ideally should only return KErrNone when codec is created. sl@0: if (err == KErrNone) sl@0: { sl@0: TAny *testAlloc = User::Alloc(1); sl@0: sl@0: delete codec; sl@0: if (testAlloc == NULL) sl@0: { sl@0: break; sl@0: } sl@0: User::Free(testAlloc); sl@0: } sl@0: else if (err != KErrNoMemory) sl@0: { sl@0: delete codec; sl@0: testResult = EFail; sl@0: break; sl@0: } sl@0: sl@0: failCount++; sl@0: sl@0: __UHEAP_RESET; sl@0: __MM_HEAP_MARKEND; sl@0: } // while(1) sl@0: sl@0: INFO_PRINTF2(_L("NewL out of memory test finished at round %d"), failCount); sl@0: sl@0: return testResult; sl@0: } sl@0: sl@0: /** sl@0: * This function tests how the ProcessL() would deal with a memory allocation failure. sl@0: * @return "TVerdict" sl@0: * EPass: if the test passes. sl@0: * EFail: if the test fails. sl@0: * @leave if out of memory or ConfigureL(), ReadSourceL leaves sl@0: */ sl@0: TVerdict CTestStep_MMF_SbcCodec::TestProcessLOutOfMemoryL() sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: CMMFCodec* codec = CMMFCodec::NewL(KSbcCodecPluginUid); sl@0: if (!codec) sl@0: { sl@0: ERR_PRINTF1(_L(">> CTestStep_MMF_SbcCodec::TestProcessLOutOfMemoryL returned NULL") ); sl@0: return EFail; sl@0: } sl@0: sl@0: CleanupStack::PushL(codec); sl@0: sl@0: const TInt testNumber = 28; sl@0: // this size will make sure some samples will be cached, sl@0: // also make sure it is an EVEN number sl@0: const TInt srcBufSize = 4094; sl@0: const TInt dstBufSize = 2048; sl@0: sl@0: TPckgBuf config(SbcParametersL(testNumber) ); sl@0: codec->ConfigureL(KSbcCodecConfigUid, config); sl@0: sl@0: // create buffers sl@0: CMMFDataBuffer* srcBuffer = CMMFDataBuffer::NewL(srcBufSize); sl@0: CleanupStack::PushL(srcBuffer); sl@0: CMMFDataBuffer* dstBuffer = CMMFDataBuffer::NewL(dstBufSize); sl@0: CleanupStack::PushL(dstBuffer); sl@0: sl@0: ReadSourceL(GetTestFileName(testNumber), srcBuffer->Data(), 0); sl@0: if (srcBuffer->Data().Length() == 0) // end of file sl@0: { sl@0: ERR_PRINTF1(_L(">> CTestStep_MMF_SbcCodec::TestProcessLOutOfMemoryL no source read") ); sl@0: return EFail; sl@0: } sl@0: sl@0: TVerdict testResult = EPass; sl@0: TInt failCount = 1; sl@0: sl@0: for (;;) sl@0: { sl@0: __UHEAP_FAILNEXT(failCount); sl@0: sl@0: TCodecProcessResult dummyResult; // don't care about this result sl@0: TRAPD(err, dummyResult = codec->ProcessL(*srcBuffer, *dstBuffer) ); sl@0: sl@0: // it should return either KErrNone or KErrNoMemory, sl@0: // ideally should only return KErrNone when codec is created. sl@0: if (err == KErrNone) sl@0: { sl@0: // attempt to allocate another cell. If this fails, sl@0: // we have tested all of the memory allocs carried out by NewL. sl@0: TAny *testAlloc = User::Alloc(1); sl@0: sl@0: if (testAlloc == NULL) sl@0: { sl@0: break; sl@0: } sl@0: User::Free(testAlloc); sl@0: } sl@0: else if (err != KErrNoMemory) sl@0: { sl@0: testResult = EFail; sl@0: break; sl@0: } sl@0: sl@0: failCount++; sl@0: sl@0: __UHEAP_RESET; sl@0: } // while(1) sl@0: sl@0: INFO_PRINTF2(_L("ProcessL out of memory test finished at round %d"), failCount); sl@0: sl@0: CleanupStack::PopAndDestroy(3); // dstBuffer, srcBuffer, codec sl@0: sl@0: __MM_HEAP_MARKEND; sl@0: sl@0: return testResult; sl@0: } sl@0: sl@0: //------------------------------------------------------------------ sl@0: // ** TEST MMF_SBCCODEC STEPS *** sl@0: //------------------------------------------------------------------ sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTest_MMF_SbcCodec_U_001::CTest_MMF_SbcCodec_U_001() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SbcCodec-U-001-HP"); sl@0: } sl@0: sl@0: /** sl@0: * Instantiate a codec with plugin UID sl@0: * @test Req. under test REQ2716 sl@0: */ sl@0: TVerdict CTest_MMF_SbcCodec_U_001::DoTestStepL() sl@0: { sl@0: TVerdict testResult = EFail; sl@0: TRAPD(err, testResult = TestNewL(KSbcCodecPluginUid) ); sl@0: sl@0: if (err) sl@0: { sl@0: INFO_PRINTF2(_L("Test left with status %d"), err); sl@0: } sl@0: return testResult; sl@0: } sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTest_MMF_SbcCodec_U_002::CTest_MMF_SbcCodec_U_002() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SbcCodec-U-002-HP"); sl@0: } sl@0: sl@0: /** sl@0: * Instantiate a codec with FourCC Codes sl@0: * @test Req. under test REQ2716 sl@0: */ sl@0: TVerdict CTest_MMF_SbcCodec_U_002::DoTestStepL() sl@0: { sl@0: TVerdict testResult = EFail; sl@0: TRAPD(err, testResult = TestNewL(KMMFFourCCCodePCM16, KMMFFourCCCodeSBC) ); sl@0: sl@0: if (err) sl@0: { sl@0: INFO_PRINTF2(_L("Test left with status %d"), err); sl@0: } sl@0: return testResult; sl@0: } sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTest_MMF_SbcCodec_U_010::CTest_MMF_SbcCodec_U_010() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SbcCodec-U-010-HP"); sl@0: } sl@0: sl@0: /** sl@0: * ProcessL() test sl@0: * This test tests the ProcessL() function with different buffer size settings, and sl@0: * check the returned results sl@0: * @test Req. under test REQ2716 sl@0: */ sl@0: TVerdict CTest_MMF_SbcCodec_U_010::DoTestStepL() sl@0: { sl@0: TVerdict testResult = EFail; sl@0: TRAPD(err, testResult = TestProcessL() ); sl@0: sl@0: if (err) sl@0: { sl@0: INFO_PRINTF2(_L("Test left with status %d"), err); sl@0: } sl@0: return testResult; sl@0: } sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTest_MMF_SbcCodec_U_011::CTest_MMF_SbcCodec_U_011() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SbcCodec-U-011-HP"); sl@0: } sl@0: sl@0: /** sl@0: * Configuration tests sl@0: * This test tests if codec supports 8 different settings (see TSS & TP for A2DP spec) sl@0: * @test Req. under test REQ2716 sl@0: */ sl@0: TVerdict CTest_MMF_SbcCodec_U_011::DoTestStepL() sl@0: { sl@0: TVerdict testResult = EPass; sl@0: TInt srcBufSize = KDefaultBufferSize; sl@0: TInt dstBufSize = KDefaultBufferSize >> 1; sl@0: sl@0: for (TInt testNumber = 1; testNumber <= 8; testNumber++) sl@0: { sl@0: TVerdict result = EFail; sl@0: sl@0: TRAPD(err, result = TestEncodeL(testNumber, srcBufSize, dstBufSize) ); sl@0: sl@0: if (err) sl@0: { sl@0: INFO_PRINTF3(_L("Configuration test %d left with status %d"), testNumber, err); sl@0: testResult = EFail; sl@0: } sl@0: if (result == EFail) sl@0: { sl@0: INFO_PRINTF2(_L("Configuration test %d failed"), testNumber); sl@0: testResult = EFail; sl@0: } sl@0: sl@0: // This is simulating different src buffer size by decreasing the sl@0: // src buffer size number each time, it covers sample caching and sl@0: // no caching various cases to make sure the codec can handle different sl@0: // src buffer size correctly sl@0: srcBufSize--; sl@0: } sl@0: return testResult; sl@0: } sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTest_MMF_SbcCodec_U_012::CTest_MMF_SbcCodec_U_012() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SbcCodec-U-012-HP"); sl@0: } sl@0: sl@0: /** sl@0: * Maximum Bit Rate tests sl@0: * This test tests sbc coded handles 8 different maximum bit rate settings (see TSS & TP for A2DP spec) sl@0: * @test Req. under test REQ2716 sl@0: */ sl@0: TVerdict CTest_MMF_SbcCodec_U_012::DoTestStepL() sl@0: { sl@0: TVerdict testResult = EPass; sl@0: TInt srcBufSize = KDefaultBufferSize; sl@0: TInt dstBufSize = KDefaultBufferSize >> 1; sl@0: sl@0: for (TInt testNumber = 11; testNumber <= 18; testNumber++) sl@0: { sl@0: TVerdict result = EFail; sl@0: TRAPD(err, result = TestEncodeL(testNumber, srcBufSize, dstBufSize) ); sl@0: sl@0: if (err) sl@0: { sl@0: INFO_PRINTF3(_L("Max Bit Rate test %d left with status %d"), testNumber, err); sl@0: testResult = EFail; sl@0: } sl@0: if (result == EFail) sl@0: { sl@0: INFO_PRINTF2(_L("Max Bit Rate test %d failed"), testNumber); sl@0: testResult = EFail; sl@0: } sl@0: sl@0: // This is simulating different src buffer size by decreasing the sl@0: // src buffer size number each time, it covers sample caching and sl@0: // no caching various cases to make sure the codec can handle different sl@0: // src buffer size correctly sl@0: srcBufSize--; sl@0: } sl@0: return testResult; sl@0: } sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTest_MMF_SbcCodec_U_013::CTest_MMF_SbcCodec_U_013() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SbcCodec-U-013-HP"); sl@0: } sl@0: sl@0: /** sl@0: * Special tests sl@0: * This test tests sbc codec handles 2 special cases (see TSS & TP for A2DP spec) sl@0: * @test Req. under test REQ2716 sl@0: */ sl@0: TVerdict CTest_MMF_SbcCodec_U_013::DoTestStepL() sl@0: { sl@0: TVerdict testResult = EPass; sl@0: TInt srcBufSize = KDefaultBufferSize; sl@0: TInt dstBufSize = KDefaultBufferSize >> 1; sl@0: sl@0: for (TInt testNumber = 19; testNumber <= 20; testNumber++) sl@0: { sl@0: TVerdict result = EFail; sl@0: TRAPD(err, result = TestEncodeL(testNumber, srcBufSize, dstBufSize) ); sl@0: sl@0: if (err) sl@0: { sl@0: INFO_PRINTF3(_L("Special test %d left with status %d"), testNumber, err); sl@0: testResult = EFail; sl@0: } sl@0: if (result == EFail) sl@0: { sl@0: INFO_PRINTF2(_L("Special test %d failed"), testNumber); sl@0: testResult = EFail; sl@0: } sl@0: sl@0: // This is simulating different src buffer size by decreasing the sl@0: // src buffer size number each time, it covers sample caching and sl@0: // no caching various cases to make sure the codec can handle different sl@0: // src buffer size correctly sl@0: srcBufSize--; sl@0: } sl@0: return testResult; sl@0: } sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTest_MMF_SbcCodec_U_014::CTest_MMF_SbcCodec_U_014() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SbcCodec-U-014-HP"); sl@0: } sl@0: sl@0: /** sl@0: * Typical tests sl@0: * This test tests sbc codec handles 8 typical settings (see TSS & TP for A2DP spec) which sl@0: * are required in REQ2716, our sbc encoder has to support these settings. sl@0: * @test Req. under test REQ2716 sl@0: */ sl@0: TVerdict CTest_MMF_SbcCodec_U_014::DoTestStepL() sl@0: { sl@0: TVerdict testResult = EPass; sl@0: TInt srcBufSize = KDefaultBufferSize; sl@0: TInt dstBufSize = KDefaultBufferSize >> 1; sl@0: sl@0: for (TInt testNumber = 21; testNumber <= 28; testNumber++) sl@0: { sl@0: TVerdict result = EFail; sl@0: TRAPD(err, result = TestEncodeL(testNumber, srcBufSize, dstBufSize) ); sl@0: sl@0: if (err) sl@0: { sl@0: INFO_PRINTF3(_L("Typical test %d left with status %d"), testNumber, err); sl@0: testResult = EFail; sl@0: } sl@0: if (result == EFail) sl@0: { sl@0: INFO_PRINTF2(_L("Typical test %d failed"), testNumber); sl@0: testResult = EFail; sl@0: } sl@0: sl@0: // This is simulating different src buffer size by decreasing the sl@0: // src buffer size number each time, it covers sample caching and sl@0: // no caching various cases to make sure the codec can handle different sl@0: // src buffer size correctly sl@0: srcBufSize--; sl@0: } sl@0: return testResult; sl@0: } sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTest_MMF_SbcCodec_U_015::CTest_MMF_SbcCodec_U_015() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SbcCodec-U-015-HP"); sl@0: } sl@0: sl@0: /** sl@0: * Reposition tests sl@0: * This test tests ResetL() function and audio sample cach issue sl@0: * @test Req. under test REQ2716 sl@0: */ sl@0: TVerdict CTest_MMF_SbcCodec_U_015::DoTestStepL() sl@0: { sl@0: TVerdict testResult = EFail; sl@0: TRAPD(err, testResult = TestRepositionL() ); sl@0: sl@0: if (err) sl@0: { sl@0: INFO_PRINTF2(_L("Reposition test left with status %d"), err); sl@0: testResult = EFail; sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF1(_L("Reposition test passes") ); sl@0: } sl@0: sl@0: return testResult; sl@0: } sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTest_MMF_SbcCodec_U_016::CTest_MMF_SbcCodec_U_016() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SbcCodec-U-016-HP"); sl@0: } sl@0: sl@0: /** sl@0: * Change configuration test sl@0: * This test tests reconfigure sbc codec by calling ConfigureL() function sl@0: * @test Req. under test REQ2716 sl@0: */ sl@0: TVerdict CTest_MMF_SbcCodec_U_016::DoTestStepL() sl@0: { sl@0: TVerdict testResult = EFail; sl@0: TRAPD(err, testResult = TestChangeConfigL() ); sl@0: sl@0: if (err) sl@0: { sl@0: INFO_PRINTF2(_L("Change conguration test left with status %d"), err); sl@0: testResult = EFail; sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF1(_L("Change conguration test passes") ); sl@0: } sl@0: sl@0: return testResult; sl@0: } sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTest_MMF_SbcCodec_U_021::CTest_MMF_SbcCodec_U_021() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SbcCodec-U-021-HP"); sl@0: } sl@0: sl@0: /** sl@0: * Memory Scribble test sl@0: * @test Req. under test REQ2716 sl@0: */ sl@0: TVerdict CTest_MMF_SbcCodec_U_021::DoTestStepL() sl@0: { sl@0: TVerdict testResult = EPass; sl@0: sl@0: TRAPD(err, testResult = TestMemoryScribbleL() ); sl@0: sl@0: if (err) sl@0: { sl@0: INFO_PRINTF2(_L("Memory scribble test left with status %d"), err); sl@0: testResult = EFail; sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF1(_L("Memory scribble test passes") ); sl@0: } sl@0: sl@0: return testResult; sl@0: } sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTest_MMF_SbcCodec_U_022::CTest_MMF_SbcCodec_U_022() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SbcCodec-U-022-HP"); sl@0: } sl@0: sl@0: /** sl@0: * Memory Leak test sl@0: * @test Req. under test REQ2716 sl@0: */ sl@0: TVerdict CTest_MMF_SbcCodec_U_022::DoTestStepL() sl@0: { sl@0: TVerdict testResult = EPass; sl@0: sl@0: TRAPD(err, testResult = TestMemoryLeakL() ); sl@0: sl@0: if (err) sl@0: { sl@0: INFO_PRINTF2(_L("Memory leak test left with status %d"), err); sl@0: testResult = EFail; sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF1(_L("Memory leak test passes") ); sl@0: } sl@0: sl@0: return testResult; sl@0: } sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTest_MMF_SbcCodec_U_023::CTest_MMF_SbcCodec_U_023() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SbcCodec-U-023-HP"); sl@0: } sl@0: sl@0: /** sl@0: * Out of Memory test for NewL() sl@0: * @test Req. under test REQ2716 sl@0: */ sl@0: TVerdict CTest_MMF_SbcCodec_U_023::DoTestStepL() sl@0: { sl@0: TVerdict testResult = EPass; sl@0: sl@0: TRAPD(err, testResult = TestNewLOutOfMemoryL() ); sl@0: sl@0: if (err) sl@0: { sl@0: INFO_PRINTF2(_L("NewL out of memory test left with status %d"), err); sl@0: testResult = EFail; sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF1(_L("NewL out of memory test passes") ); sl@0: } sl@0: sl@0: return testResult; sl@0: } sl@0: sl@0: /** sl@0: * Constructor sl@0: */ sl@0: CTest_MMF_SbcCodec_U_024::CTest_MMF_SbcCodec_U_024() sl@0: { sl@0: iTestStepName = _L("MM-MMF-SbcCodec-U-024-HP"); sl@0: } sl@0: sl@0: /** sl@0: * Out of Memory test for ProcessL() sl@0: * @test Req. under test REQ2716 sl@0: */ sl@0: TVerdict CTest_MMF_SbcCodec_U_024::DoTestStepL() sl@0: { sl@0: TVerdict testResult = EPass; sl@0: sl@0: TRAPD(err, testResult = TestProcessLOutOfMemoryL() ); sl@0: sl@0: if (err) sl@0: { sl@0: INFO_PRINTF2(_L("ProcessL out of memory test left with status %d"), err); sl@0: testResult = EFail; sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF1(_L("ProcessL out of memory test passes") ); sl@0: } sl@0: sl@0: return testResult; sl@0: }