diff -r 000000000000 -r b8ed18f6c07b mmlibs/mmfw/tsrc/mmfintegrationtest/ACLNT/TestOldCodec.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmlibs/mmfw/tsrc/mmfintegrationtest/ACLNT/TestOldCodec.cpp Thu Oct 07 22:34:12 2010 +0100 @@ -0,0 +1,236 @@ + +// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// This program is designed the test of the MMF_ACLNT. +// Test DEF039267 +// +// + +/** + @file TestOldCodec.cpp +*/ + + +#include "TestOldCodec.h" + + +/** + * Constructor + */ + +CTestMmfAclntOldCodecFile::CTestMmfAclntOldCodecFile(const TDesC& aTestName,const TDesC& aSectName, + const TDesC& aKeyName,const TBool aPlay, + const TInt aExpectedError) + :iPlay (aPlay) + ,iExpectedError (aExpectedError) + { + // store the name of this test case + // this is the name that is used by the script file + // Each test step initialises it's own name + iTestStepName = aTestName; + iSectName = aSectName; + iKeyName = aKeyName; + } + +CTestMmfAclntOldCodecFile* CTestMmfAclntOldCodecFile::NewL(const TDesC& aTestName, const TDesC& aSectName, + const TDesC& aKeyName,const TBool aPlay, + const TInt aExpectedError = KErrNone) + { + CTestMmfAclntOldCodecFile* self = new (ELeave) CTestMmfAclntOldCodecFile(aTestName,aSectName,aKeyName,aPlay,aExpectedError); + return self; + } + +CTestMmfAclntOldCodecFile* CTestMmfAclntOldCodecFile::NewLC(const TDesC& aTestName, const TDesC& aSectName, + const TDesC& aKeyName, + const TBool aPlay, + const TInt aExpectedError) + { + CTestMmfAclntOldCodecFile* self = CTestMmfAclntOldCodecFile::NewL(aTestName,aSectName,aKeyName,aPlay,aExpectedError); + CleanupStack::PushL(self); + return self; + } + +void CTestMmfAclntOldCodecFile::MoscoStateChangeEvent(CBase* /*aObject*/, TInt aPreviousState, TInt aCurrentState, TInt aErrorCode) + { + iError = aErrorCode; + if (iError != KErrNone) + { + INFO_PRINTF1( _L("CTestMmfAclntRecFile : MMdaObjectStateChangeObserver Callback for CMdaAudioRecorderUtility complete")); + INFO_PRINTF2( _L("Previous State %d "), aPreviousState); + INFO_PRINTF2( _L("State %d "), aCurrentState); + INFO_PRINTF2( _L("iError %d "), iError); + } + if (aCurrentState != CMdaAudioClipUtility::EPlaying) + {//don't want to stop AS from transition EOpen->EPlaying + CActiveScheduler::Stop(); + } + } + + +/** Play and record an audio file using the UseOldCodecAudioController + * which uses CMMFCodecs and the 'null' pcm16->pcm16 hw device plugin + * This is for DEF039267 + */ +TVerdict CTestMmfAclntOldCodecFile::DoTestStepL( void ) + { + INFO_PRINTF1( _L("TestPlayerUtils : File")); + TVerdict ret = EFail; + + iError = KErrTimedOut; + + TBuf filename; + TPtrC filename1; + if(!GetStringFromConfig(iSectName,iKeyName,filename1)) + return EInconclusive; + GetDriveName(filename); + filename.Append(filename1); + TUid useCMMFCodecAudioController; + + useCMMFCodecAudioController.iUid = KMmfUidUseOldCodecAudioController; + + CMdaAudioRecorderUtility* recUtil = CMdaAudioRecorderUtility::NewL(*this); + + TRAPD(err, recUtil->OpenFileL(filename,useCMMFCodecAudioController)); + + if (err) + { + INFO_PRINTF2( _L("error opening record to file %d "), err); + } + else + { + CActiveScheduler::Start(); + TTimeIntervalMicroSeconds duration = recUtil->Duration(); + // Wait for initialisation callback + INFO_PRINTF1( _L("Initialise CMdaAudioPlayerUtility")); + + // Check for errors. + if (iError == KErrNone && recUtil != NULL) + { + if(iPlay) + { + iError = KErrTimedOut; + TRAPD(err, recUtil->PlayL()); + if (err) + { + INFO_PRINTF2( _L("error opening record to file %d "), err); + } + else + { + //lets time how long the file plays for and check + //it has played for the full time + TTime startTime(0); + TTime endTime(0); + startTime.HomeTime(); + // Wait for init callback + CActiveScheduler::Start(); + endTime.HomeTime(); + //check file played for the expected time - allow margin of error + 1S -0.5S + TTimeIntervalMicroSeconds playduration = endTime.MicroSecondsFrom(startTime); + if ( (playduration.Int64() < (duration.Int64()-KOneSecond/2)) || + (playduration.Int64() > (duration.Int64()+KOneSecond)) ) + { + INFO_PRINTF2(_L("file didn't play for the expected duration expected %ld"), duration.Int64()); + INFO_PRINTF2(_L("but actual duration was %ld"), playduration.Int64()); + } + else if(iError == KErrNone) + ret = EPass; + } + } + } + + recUtil->Close(); + } + + //now try recording file + + TFourCC recordedDataType; + TUid format; + format.iUid = KMmfUidFormatWAVWrite; + + //check that the datatype is a valid datatype to record + if (!iKeyName.Compare(_L("ALAW "))) + recordedDataType.Set(KMMFFourCCCodeALAW); + else if (!iKeyName.Compare(_L("PCMU8"))) + recordedDataType.Set(KMMFFourCCCodePCMU8); + else if (!iKeyName.Compare(_L("MULAW"))) + recordedDataType.Set(KMMFFourCCCodeMuLAW); + else if (!iKeyName.Compare(_L("IMAD"))) + recordedDataType.Set(KMMFFourCCCodeIMAD); + else if (!iKeyName.Compare(_L("GSM610"))) + recordedDataType.Set(KMMFFourCCCodeGSM610); + + //rename file to indicate it is recorded + if (recordedDataType != KMMFFourCCCodeNULL) + { + TInt matchpos = filename.Find(_L(".wav"));//get position of extension + filename.Insert(matchpos,_L("recorded"));//change filename to indicate it is recorded + + //delete file prior to recording + RFs fs; + fs.Connect(); + fs.Delete(filename); + fs.Close(); + + TRAPD(err,recUtil->OpenFileL(filename,useCMMFCodecAudioController,useCMMFCodecAudioController,format,recordedDataType)); + + if (err) + { + ret = EFail; + INFO_PRINTF2( _L("error opening record to file %d "), err); + } + else + { + INFO_PRINTF1( _L("Initialise CMdaAudioRecorderUtility")); + CActiveScheduler::Start(); // idle -> open + + recUtil->RecordL(); + + // Commented this line of code as a fix for DEF 40709 as it looks like sending a trace message + // to the TestFramework server(for some reason)and taking a very long time on beech/lubbock + + //INFO_PRINTF1( _L("Record CMdaAudioRecorderUtility")); + CActiveScheduler::Start(); // open -> record + User::After(KTwoSeconds); + + recUtil->Stop(); + + TTimeIntervalMicroSeconds expectedDuration(KTwoSeconds); + TTimeIntervalMicroSeconds duration = recUtil->Duration(); + //we'll alow +/- 0.5 variance + if (duration > TTimeIntervalMicroSeconds(expectedDuration.Int64() + KDeviation/2)) + { + INFO_PRINTF3( _L("Duration too long expected %ld actual %ld "), expectedDuration.Int64(), duration.Int64()); + ret = EFail; + } + else if (duration < TTimeIntervalMicroSeconds(expectedDuration.Int64() - KDeviation/2)) + { + INFO_PRINTF3( _L("Duration too short expected %ld actual %ld "), expectedDuration.Int64(), duration.Int64()); + ret = EFail; + } + + recUtil->Close(); + } + } + + delete recUtil; + User::After(KOneSecond); // wait for deletion to shut down devsound + if(iError != KErrNone) + ERR_PRINTF2( _L("CMdaAudioPlayerUtility failed with error %d"),iError ); + return ret; + } + + + + +