--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmlibs/mmfw/tsrc/mmfintegrationtest/ACLNT/testoutputstreamtruepause.cpp Thu Oct 07 22:34:12 2010 +0100
@@ -0,0 +1,1883 @@
+// Copyright (c) 2008-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:
+// Part of the TSI_MMFACLNT suite that tests CR1566 (TruePause) on AudioOutputStream
+//
+//
+
+/**
+ @file TestOutputStreamTruePause.cpp
+*/
+
+#include "testoutputstreamtruepause.h"
+
+/*
+ *
+ * RMdaOutputStreamTestBase - Test step constructor
+ *
+ */
+RMdaOutputStreamTestBase::RMdaOutputStreamTestBase(const TDesC& aTestName, const TDesC& aSectName)
+ : iAudioOutputStreamState(EStateAOSInitial),
+ iAudioOutputStream(NULL),
+ iTimer(NULL),
+ iWait(EFalse),
+ iConfig(EFalse),
+ iInvalidConfig(EFalse),
+ iGetBytes(EFalse),
+ iCount(0),
+ iVolume(0),
+ iBalance(0),
+ iDuration(0),
+ iPause(0),
+ iBytes(0),
+ iPosition(0),
+ iFilename(KNullDesC)
+ {
+ iTestStepName = aTestName;
+ iSectName = aSectName;
+ }
+
+/*
+ *
+ * ~RMdaOutputStreamTestBase - Test step destructor
+ *
+ */
+RMdaOutputStreamTestBase::~RMdaOutputStreamTestBase()
+ {
+ if (iAudioOutputStream)
+ {
+ delete iAudioOutputStream;
+ }
+ if(iTimer)
+ {
+ delete iTimer;
+ }
+ iFile.Close();
+ iFs.Close();
+ iBuffer.Close();
+ }
+
+/*
+ *
+ * KickoffTestL - Starts the test
+ *
+ */
+void RMdaOutputStreamTestBase::KickoffTestL()
+ {
+ User::LeaveIfError(iFs.Connect());
+ INFO_PRINTF1(_L("__________ Creating AudioOutputStream object ___________"));
+
+ TRAPD(err, iAudioOutputStream = CMdaAudioOutputStream::NewL(*this));
+ if (err != KErrNone)
+ {
+ ERR_PRINTF2(_L("Could not create Tone Utility object. Error = %d"), err);
+ StopTest(err);
+ return;
+ }
+ INFO_PRINTF1(_L("AudioOutputStream State: EStateCreated"));
+ iAudioOutputStreamState = EStateAOSCreated;
+
+ DoKickoffTestL();
+
+ INFO_PRINTF1(_L("AudioOutputStream: EEventInitialize"));
+ Fsm(EEventAOSInitialize, KErrNone);
+ }
+
+/*
+ *
+ * CloseTest
+ *
+ */
+void RMdaOutputStreamTestBase::CloseTest()
+ {
+ INFO_PRINTF1(_L("Deleting AudioOutputStream object"));
+ delete iAudioOutputStream;
+ delete iTimer;
+ }
+
+/*
+ *
+ * StartTimer - Starts timer and timer callback
+ *
+ */
+void RMdaOutputStreamTestBase::StartTimer(TTimeIntervalMicroSeconds32 aWaitTime)
+ {
+ TTimeIntervalMicroSeconds32 timeInterval;
+
+ if(aWaitTime <= TTimeIntervalMicroSeconds32(0))
+ {
+ timeInterval = KOneSecond;
+ }
+ else
+ {
+ timeInterval = aWaitTime;
+ }
+ TCallBack callback (TimerCallback, this);
+ iTimer->Start(timeInterval, timeInterval, callback);
+ INFO_PRINTF1(_L("Timer has been started"));
+ }
+
+/*
+ *
+ * TimerCallback
+ *
+ */
+TInt RMdaOutputStreamTestBase::TimerCallback(TAny* aPtr)
+ {
+ static_cast<RMdaOutputStreamTestBase*>(aPtr)->DoTimerCallback();
+ return KErrNone;
+ }
+
+/*
+ *
+ * Fsm - Executes playing events of AudioToneUtility in sequence
+ *
+ */
+void RMdaOutputStreamTestBase::Fsm(TMdaAOSEvent aMdaAudioOutputStreamEvent, TInt aError)
+ {
+ TInt error = 0;
+ TTimeIntervalMicroSeconds resumeposition;
+ switch (iAudioOutputStreamState)
+ {
+ case EStateAOSCreated:
+ {
+ if (aMdaAudioOutputStreamEvent == EEventAOSInitialize)
+ {
+ TMdaAudioDataSettings settings;
+ //Default settings
+ settings.Query();
+ settings.iChannels = TMdaAudioDataSettings::EChannelsMono;
+ settings.iSampleRate = TMdaAudioDataSettings::ESampleRate8000Hz;
+ INFO_PRINTF1(_L("Calling CMdaAudioOutputStream::Open"));
+ iAudioOutputStream->Open(&settings);
+ INFO_PRINTF1(_L("MdaAudioOutputStream State: EStateInitializing"));
+ iAudioOutputStreamState = EStateAOSInitializing;
+ }
+ else
+ {
+ ERR_PRINTF2(_L("MdaAudioOutputStream EEventInitialize not received as expected. Received event: %d"), aMdaAudioOutputStreamEvent);
+ StopTest(aError, EFail);
+ }
+ break;
+ }
+ case EStateAOSInitializing:
+ {
+ if (aMdaAudioOutputStreamEvent == EEventAOSOpenComplete && aError == KErrNone)
+ {
+ INFO_PRINTF1(_L("Calling SetVolume using MaxVolume/2"));
+ iAudioOutputStream->SetVolume(iAudioOutputStream->MaxVolume()/2);
+ INFO_PRINTF1(_L("Starting playback"));
+ iAudioOutputStream->WriteL(iBuffer);
+ iAudioOutputStreamState = EStateAOSPlaying;
+ StartTimer(iPause*KOneSecond);
+ }
+ else if (aMdaAudioOutputStreamEvent == EEventAOSOpenComplete && aError != KErrNone)
+ {
+ ERR_PRINTF2(_L("MaoscOpenComplete returned with error = %d"), aError);
+ StopTest(aError);
+ }
+ else
+ {
+ ERR_PRINTF2(_L("MdaAudioOutputStream EEventOpenComplete not received as expected. Received event: %d"), aMdaAudioOutputStreamEvent);
+ StopTest(aError, EFail);
+ }
+ break;
+ }
+ case EStateAOSPlaying:
+ {
+ if(aMdaAudioOutputStreamEvent == EEventAOSTimerComplete)
+ {
+ if(!iGetBytes)
+ {
+ INFO_PRINTF1(_L("Calling CMdaAudioOutputStream::Pause"));
+ error = iAudioOutputStream->Pause();
+ if(error == KErrNone)
+ {
+ INFO_PRINTF1(_L("Pause returned with KErrNone as expected"));
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Pause returned with %d instead of KErrNone as expected"),error);
+ StopTest(error);
+ }
+ iPosition = iAudioOutputStream->Position();
+ INFO_PRINTF2(_L("Stream was paused at %Ld"),iPosition.Int64());
+ INFO_PRINTF1(_L("MdaAudioOutputStream State: EStatePause"));
+ iAudioOutputStreamState = EStateAOSPause;
+ iWait = EFalse;
+ }
+ if(iGetBytes)
+ {
+ INFO_PRINTF1(_L("Calling CMdaAudioOutputStream::Pause"));
+ error = iAudioOutputStream->Pause();
+ if(error == KErrNone)
+ {
+ INFO_PRINTF1(_L("Pause returned with KErrNone as expected"));
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Pause returned with %d instead of KErrNone as expected"),error);
+ StopTest(error);
+ }
+ INFO_PRINTF1(_L("MdaAudioOutputStream State: EStatePause"));
+ iPosition = iAudioOutputStream->Position();
+ INFO_PRINTF2(_L("Stream was paused at %Ld"),iPosition.Int64());
+ INFO_PRINTF1(_L("MdaAudioOutputStream State: EStatePause"));
+ iAudioOutputStreamState = EStateAOSPause;
+ iWait = EFalse;
+ INFO_PRINTF1(_L("Calling GetBytes"));
+ iBytes = iAudioOutputStream->GetBytes();
+ }
+ }
+ else
+ {
+ ERR_PRINTF2(_L("DevSound EEventTimerComplete not received as expected. Received event: %d"), aMdaAudioOutputStreamEvent);
+ StopTest(aError, EFail);
+ }
+ break;
+ }
+ case EStateAOSPause:
+ {
+ if (aMdaAudioOutputStreamEvent == EEventAOSTimerComplete)
+ {
+ if(!iWait && !iConfig && !iInvalidConfig && !iGetBytes)
+ {
+ if(iPosition == iAudioOutputStream->Position())
+ {
+ INFO_PRINTF2(_L("Paused position was maintained at %Ld"),iPosition.Int64());
+ }
+ else
+ {
+ ERR_PRINTF3(_L("Position was not maintained during pause. Expected %Ld Retrieved %Ld"),iPosition.Int64(),iAudioOutputStream->Position().Int64());
+ StopTest(KErrGeneral);
+ }
+ INFO_PRINTF1(_L("Resuming playback. Calling CMdaAudioOutputStream::Resume"));
+ error = iAudioOutputStream->Resume();
+ resumeposition = iAudioOutputStream->Position();
+ if(error == KErrNone)
+ {
+ INFO_PRINTF1(_L("Resume returned with KErrNone as expected"));
+ iAudioOutputStreamState = EStateAOSPlaying;
+ if(Abs(resumeposition.Int64() - iPosition.Int64()) <= KOneSecond/2)
+ {
+ INFO_PRINTF2(_L("Playback resumed from expected position %Ld"),iPosition.Int64());
+ }
+ else
+ {
+ ERR_PRINTF3(_L("Playback did not resume from expected position. Expected %Ld Retrieved %Ld"),iPosition.Int64(),resumeposition.Int64());
+ StopTest(KErrGeneral);
+ }
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Resume returned with %d instead of KErrNone as expected"),error);
+ StopTest(error);
+ }
+ }
+ else if(!iWait && iConfig)
+ {
+ if(iPosition == iAudioOutputStream->Position())
+ {
+ INFO_PRINTF2(_L("Paused position was maintained at %Ld"),iPosition.Int64());
+ }
+ else
+ {
+ ERR_PRINTF3(_L("Position was not maintained during pause. Expected %Ld Retrieved %Ld"),iPosition.Int64(),iAudioOutputStream->Position().Int64());
+ StopTest(KErrGeneral);
+ }
+ INFO_PRINTF2(_L("Playback paused for %d seconds"),iPause);
+ INFO_PRINTF3(_L("Changing Volume and Balance while paused to Volume = %d and Balance = %d"),iVolume,iBalance);
+ iAudioOutputStream->SetVolume(iVolume);
+ iAudioOutputStream->SetBalanceL(iBalance);
+ INFO_PRINTF1(_L("Resuming playback. Calling CMdaAudioOutputStream::Resume"));
+ error = iAudioOutputStream->Resume();
+ resumeposition = iAudioOutputStream->Position();
+ if(error == KErrNone)
+ {
+ INFO_PRINTF1(_L("Resume returned with KErrNone as expected"));
+ iAudioOutputStreamState = EStateAOSPlaying;
+ if(Abs(resumeposition.Int64() - iPosition.Int64()) <= KOneSecond/2)
+ {
+ INFO_PRINTF2(_L("Playback resumed from expected position %Ld"),iPosition.Int64());
+ }
+ else
+ {
+ ERR_PRINTF3(_L("Playback did not resume from expected position. Expected %Ld Retrieved %Ld"),iPosition.Int64(),resumeposition.Int64());
+ StopTest(KErrGeneral);
+ }
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Resume returned with %d instead of KErrNone as expected"),error);
+ StopTest(error);
+ }
+ iConfig = EFalse;
+ }
+ else if(!iWait && iInvalidConfig)
+ {
+ if(iPosition == iAudioOutputStream->Position())
+ {
+ INFO_PRINTF2(_L("Paused position was maintained at %Ld"),iPosition.Int64());
+ }
+ else
+ {
+ ERR_PRINTF3(_L("Position was not maintained during pause. Expected %Ld Retrieved %Ld"),iPosition.Int64(),iAudioOutputStream->Position().Int64());
+ StopTest(KErrGeneral);
+ }
+ INFO_PRINTF2(_L("Playback paused for %d seconds"),iPause);
+ INFO_PRINTF1(_L("Changing AudioProperties while paused"));
+ TRAPD(err,iAudioOutputStream->SetAudioPropertiesL(TMdaAudioDataSettings::ESampleRate48000Hz, TMdaAudioDataSettings::EChannelsStereo));
+ if(err == KErrNotReady)
+ {
+ INFO_PRINTF1(_L("SetAudioPropertiesL returned with KErrNotReady as expected"));
+ INFO_PRINTF1(_L("Resuming playback. Calling CMdaAudioOutputStream::Resume"));
+ error = iAudioOutputStream->Resume();
+ resumeposition = iAudioOutputStream->Position();
+ if(error == KErrNone)
+ {
+ INFO_PRINTF1(_L("Resume returned with KErrNone as expected"));
+ iAudioOutputStreamState = EStateAOSPlaying;
+ if(Abs(resumeposition.Int64() - iPosition.Int64()) <= KOneSecond/2)
+ {
+ INFO_PRINTF2(_L("Playback resumed from expected position %Ld"),iPosition.Int64());
+ }
+ else
+ {
+ ERR_PRINTF3(_L("Playback did not resume from expected position. Expected %Ld Retrieved %Ld"),iPosition.Int64(),resumeposition.Int64());
+ StopTest(KErrGeneral);
+ }
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Resume returned with %d instead of KErrNone as expected"),err);
+ StopTest(err);
+ }
+ iInvalidConfig = EFalse;
+ }
+ else
+ {
+ ERR_PRINTF2(_L("SetAudioPropertiesL did not return with KErrNotSupported as expected, returned with %d instead"), err);
+ StopTest(KErrGeneral);
+ }
+ }
+ else if(!iWait && iGetBytes)
+ {
+ if(iPosition == iAudioOutputStream->Position())
+ {
+ INFO_PRINTF2(_L("Paused position was maintained at %Ld"),iPosition.Int64());
+ }
+ else
+ {
+ ERR_PRINTF3(_L("Position was not maintained during pause. Expected %Ld Retrieved %Ld"),iPosition.Int64(),iAudioOutputStream->Position().Int64());
+ StopTest(KErrGeneral);
+ }
+ INFO_PRINTF2(_L("Playback paused for %d seconds"),iPause);
+ INFO_PRINTF1(_L("Calling GetBytes to verify the value hasn't changed"));
+ TInt myBytes = iAudioOutputStream->GetBytes();
+ if(myBytes == iBytes)
+ {
+ INFO_PRINTF1(_L("GetBytes value did not change while in pause, this is expected."));
+ INFO_PRINTF1(_L("Resuming playback. Calling CMdaAudioOutputStream::Resume"));
+ error = iAudioOutputStream->Resume();
+ resumeposition = iAudioOutputStream->Position();
+ if(error == KErrNone)
+ {
+ INFO_PRINTF1(_L("Resume returned with KErrNone as expected"));
+ iAudioOutputStreamState = EStateAOSPlaying;
+ if(Abs(resumeposition.Int64() - iPosition.Int64()) <= KOneSecond/2)
+ {
+ INFO_PRINTF2(_L("Playback resumed from expected position %Ld"),iPosition.Int64());
+ }
+ else
+ {
+ ERR_PRINTF3(_L("Playback did not resume from expected position. Expected %Ld Retrieved %Ld"),iPosition.Int64(),resumeposition.Int64());
+ StopTest(KErrGeneral);
+ }
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Resume returned with %d instead of KErrNone as expected"),error);
+ StopTest(error);
+ }
+ iGetBytes = EFalse;
+ }
+ else
+ {
+ ERR_PRINTF3(_L("GetBytes value changed while in pause, this is unexpected. Expected = %d Retrieved = %d"),iBytes,myBytes);
+ StopTest(KErrGeneral);
+ }
+ }
+ }
+ else
+ {
+ ERR_PRINTF2(_L("EEventTimerComplete not received as expected. Received event: %d"), aMdaAudioOutputStreamEvent);
+ StopTest(aError, EFail);
+ }
+ break;
+ }
+ default:
+ {
+ ERR_PRINTF2(_L("Invalid MdaAudioOutputStream state received: %d"), iAudioOutputStreamState);
+ StopTest(KErrGeneral);
+ }
+ }
+ }
+
+/*
+ *
+ * MaoscOpenComplete - From MMdaAudioOutputStreamObserver
+ *
+ */
+void RMdaOutputStreamTestBase::MaoscOpenComplete(TInt aError)
+ {
+ INFO_PRINTF1(_L("========== AudioOutputStream MaoscOpenComplete() callback =========="));
+ if(iAudioOutputStreamState == EStateAOSInitializing)
+ {
+ INFO_PRINTF1(_L("AudioOutputStream MaoscOpenComplete"));
+ Fsm(EEventAOSOpenComplete, aError);
+ }
+ }
+
+/*
+ *
+ * MaoscBufferCopied - From MMdaAudioOutputStreamObserver
+ *
+ */
+void RMdaOutputStreamTestBase::MaoscBufferCopied(TInt /*aError*/, const TDesC8& /*aBuffer*/)
+ {
+ INFO_PRINTF1(_L("========== AudioOutputStream MaoscBufferCopied() callback =========="));
+ INFO_PRINTF1(_L("Reading file"));
+ TInt err = iFile.Read(iBuffer);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error reading iFile %d"), err);
+ StopTest(err);
+ }
+ if (iBuffer != KNullDesC8 && iAudioOutputStreamState != EStateAOSStopped)
+ {
+ INFO_PRINTF1(_L("Writing to stream"));
+ iAudioOutputStream->WriteL(iBuffer);
+ }
+ if(iAudioOutputStreamState == EStateAOSPlaying)
+ {
+ INFO_PRINTF1(_L("AudioOutputStream MaoscBufferCopied"));
+ }
+ else if(iAudioOutputStreamState == EStateAOSPause)
+ {
+ ERR_PRINTF1(_L("AudioOutputStream MaoscBufferCopied in Paused. This is unexpected"));
+ StopTest(KErrGeneral);
+ }
+ }
+
+/*
+ *
+ * MaoscPlayComplete - From MMdaAudioOutputStreamObserver
+ *
+ */
+void RMdaOutputStreamTestBase::MaoscPlayComplete(TInt aError)
+ {
+ INFO_PRINTF1(_L("========== AudioOutputStream MaoscPlayComplete() callback =========="));
+ if (aError == KErrUnderflow)
+ {
+ INFO_PRINTF2(_L("AudioOutputStream called MaoscPlayComplete with error = %d as expected"), aError);
+ StopTest(EPass);
+ }
+ else
+ {
+ ERR_PRINTF2(_L("AudioOutputStream called MaoscPlayComplete with error = %d"), aError);
+ ERR_PRINTF2(_L("Expected error = %d"), KErrUnderflow);
+ StopTest(aError);
+ }
+ }
+
+/*
+ *========================================================================================================
+ * MM-MMF-ACLNT-I-0175-HP
+ *========================================================================================================
+ */
+RMdaOutputStreamPauseResumeBeforeWriteTest::RMdaOutputStreamPauseResumeBeforeWriteTest(const TDesC& aTestName, const TDesC& aSectName)
+ : RMdaOutputStreamTestBase(aTestName,aSectName)
+ {
+ }
+
+/*
+ *
+ * NewL
+ *
+ */
+RMdaOutputStreamPauseResumeBeforeWriteTest* RMdaOutputStreamPauseResumeBeforeWriteTest::NewL(const TDesC& aTestName, const TDesC& aSectName)
+ {
+ RMdaOutputStreamPauseResumeBeforeWriteTest * self = new(ELeave)RMdaOutputStreamPauseResumeBeforeWriteTest(aTestName,aSectName);
+ return self;
+ }
+
+/*
+ *
+ * DoKickoffTestL
+ *
+ */
+void RMdaOutputStreamPauseResumeBeforeWriteTest::DoKickoffTestL()
+ {
+ TPtrC filename;
+ // Get the filename of the audio file to play
+ if (!GetStringFromConfig(iSectName, KRawFile, filename))
+ {
+ ERR_PRINTF1(_L("Filename could not be retrieved from ini file"));
+ StopTest(KErrNotFound);
+ return;
+ }
+ // open using RFile for playback
+ iFilename.Copy(filename);
+ TInt err = iFile.Open(iFs, iFilename, EFileRead);
+ if (err != KErrNone)
+ {
+ ERR_PRINTF3(_L("Could not open input file %S. Error = %d"), &iFilename, err);
+ iFs.Close();
+ StopTest(err);
+ return;
+ }
+ // Get size of iFile
+ TInt filesize = 0;
+ err = iFile.Size(filesize);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error getting size of iFile = %d"), err);
+ StopTest(err);
+ return;
+ }
+ // Initialise iBuf
+ iBuffer.CreateMaxL(filesize/KFileDivision);
+
+ //Read first half of the file
+ err = iFile.Read(iBuffer);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error reading iFile %d"), err);
+ StopTest(err);
+ }
+
+ iWait = ETrue;
+ iPause = KTimeout; //Set timeout to stop test if playback was paused
+ INFO_PRINTF2(_L("File under test -> %S"), &iFilename);
+ iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+ }
+
+/*
+ *
+ * Fsm - Executes playing events of AudioToneUtility in sequence
+ *
+ */
+void RMdaOutputStreamPauseResumeBeforeWriteTest::Fsm(TMdaAOSEvent aMdaAudioOutputStreamEvent, TInt aError)
+ {
+ TInt error = 0;
+ TTimeIntervalMicroSeconds resumeposition;
+ switch (iAudioOutputStreamState)
+ {
+ case EStateAOSCreated:
+ {
+ if (aMdaAudioOutputStreamEvent == EEventAOSInitialize)
+ {
+ TMdaAudioDataSettings settings;
+ //Default settings
+ settings.Query();
+ settings.iChannels = TMdaAudioDataSettings::EChannelsMono;
+ settings.iSampleRate = TMdaAudioDataSettings::ESampleRate8000Hz;
+ INFO_PRINTF1(_L("Calling CMdaAudioOutputStream::Pause before Open"));
+ error = iAudioOutputStream->Pause();
+ if(error == KErrNotReady)
+ {
+ INFO_PRINTF1(_L("Pause before open returned with KErrNotReady as expected"));
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Pause before open returned with %d instead of KErrNotReady as expected"),error);
+ StopTest(error);
+ }
+ INFO_PRINTF1(_L("Calling CMdaAudioOutputStream::Open"));
+ iAudioOutputStream->Open(&settings);
+ INFO_PRINTF1(_L("MdaAudioOutputStream State: EStateInitializing"));
+ iAudioOutputStreamState = EStateAOSInitializing;
+ }
+ else
+ {
+ ERR_PRINTF2(_L("MdaAudioOutputStream EEventInitialize not received as expected. Received event: %d"), aMdaAudioOutputStreamEvent);
+ StopTest(aError, EFail);
+ }
+ break;
+ }
+ case EStateAOSInitializing:
+ {
+ if (aMdaAudioOutputStreamEvent == EEventAOSOpenComplete && aError == KErrNone)
+ {
+ INFO_PRINTF1(_L("Calling SetVolume using MaxVolume/2"));
+ iAudioOutputStream->SetVolume(iAudioOutputStream->MaxVolume()/2);
+ INFO_PRINTF1(_L("Calling CMdaAudioOutputStream::Pause before first WriteL"));
+ error = iAudioOutputStream->Pause();
+ if(error == KErrNotReady)
+ {
+ INFO_PRINTF1(_L("Pause before first WriteL returned with KErrNotReady as expected"));
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Pause before first WriteL returned with %d instead of KErrNotReady as expected"),error);
+ StopTest(error);
+ }
+ INFO_PRINTF1(_L("Calling CMdaAudioOutputStream::Resume before first WriteL"));
+ error = iAudioOutputStream->Resume();
+ if(error == KErrNotReady)
+ {
+ INFO_PRINTF1(_L("Resume before first WriteL returned with KErrNotReady as expected"));
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Resume before first WriteL returned with %d instead of KErrNotReady as expected"),error);
+ StopTest(error);
+ }
+ INFO_PRINTF1(_L("Starting playback"));
+ iAudioOutputStream->WriteL(iBuffer);
+ iAudioOutputStreamState = EStateAOSPlaying;
+ StartTimer(iPause*KOneSecond);
+ }
+ else if (aMdaAudioOutputStreamEvent == EEventAOSOpenComplete && aError != KErrNone)
+ {
+ ERR_PRINTF2(_L("MaoscOpenComplete returned with error = %d"), aError);
+ StopTest(aError);
+ }
+ else
+ {
+ ERR_PRINTF2(_L("MdaAudioOutputStream EEventOpenComplete not received as expected. Received event: %d"), aMdaAudioOutputStreamEvent);
+ StopTest(aError, EFail);
+ }
+ break;
+ }
+ default:
+ {
+ ERR_PRINTF2(_L("Invalid MdaAudioOutputStream state received: %d"), iAudioOutputStreamState);
+ StopTest(KErrGeneral);
+ }
+ }
+ }
+
+/*
+ *
+ * DoTimerCallback
+ *
+ */
+void RMdaOutputStreamPauseResumeBeforeWriteTest::DoTimerCallback()
+ {
+ INFO_PRINTF1(_L("Cancelling timer"));
+ iTimer->Cancel();
+ ERR_PRINTF1(_L("Playback was paused when it shouldn't"));
+ StopTest(KErrGeneral);
+ }
+
+/*
+ *========================================================================================================
+ * MM-MMF-ACLNT-I-0176-HP
+ *========================================================================================================
+ */
+RMdaOutputStreamResumeTest::RMdaOutputStreamResumeTest(const TDesC& aTestName, const TDesC& aSectName)
+ : RMdaOutputStreamTestBase(aTestName,aSectName)
+ {
+ }
+
+/*
+ *
+ * NewL
+ *
+ */
+RMdaOutputStreamResumeTest* RMdaOutputStreamResumeTest::NewL(const TDesC& aTestName, const TDesC& aSectName)
+ {
+ RMdaOutputStreamResumeTest * self = new(ELeave)RMdaOutputStreamResumeTest(aTestName,aSectName);
+ return self;
+ }
+
+/*
+ *
+ * DoKickoffTestL
+ *
+ */
+void RMdaOutputStreamResumeTest::DoKickoffTestL()
+ {
+ TPtrC filename;
+ // Get the pause time
+ if (!GetIntFromConfig(iSectName, KPause, iPause))
+ {
+ ERR_PRINTF1(_L("Pause time could not be retrieved from ini file"));
+ StopTest(KErrNotFound);
+ return;
+ }
+ // Get the filename of the audio file to play
+ if (!GetStringFromConfig(iSectName, KRawFile, filename))
+ {
+ ERR_PRINTF1(_L("Filename could not be retrieved from ini file"));
+ StopTest(KErrNotFound);
+ return;
+ }
+ // open using RFile for playback
+ iFilename.Copy(filename);
+ TInt err = iFile.Open(iFs, iFilename, EFileRead);
+ if (err != KErrNone)
+ {
+ ERR_PRINTF3(_L("Could not open input file %S. Error = %d"), &iFilename, err);
+ iFs.Close();
+ StopTest(err);
+ return;
+ }
+ // Get size of iFile
+ TInt filesize = 0;
+ err = iFile.Size(filesize);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error getting size of iFile = %d"), err);
+ StopTest(err);
+ return;
+ }
+ // Initialise iBuf
+ iBuffer.CreateMaxL(filesize/KFileDivision);
+
+ //Read first half of the file
+ err = iFile.Read(iBuffer);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error reading iFile %d"), err);
+ StopTest(err);
+ }
+
+ iWait = ETrue;
+ INFO_PRINTF2(_L("File under test -> %S"), &iFilename);
+ iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+ }
+
+/*
+ *
+ * DoTimerCallback
+ *
+ */
+void RMdaOutputStreamResumeTest::DoTimerCallback()
+ {
+ if(!iWait)
+ {
+ INFO_PRINTF1(_L("Cancelling timer"));
+ iTimer->Cancel();
+ }
+ else
+ {
+ INFO_PRINTF1(_L("MdaAudioOutputStream Event: EEventTimerComplete"));
+ }
+ Fsm (EEventAOSTimerComplete, KErrNone);
+ }
+
+/*
+ *========================================================================================================
+ * MM-MMF-ACLNT-I-0177-HP
+ *========================================================================================================
+ */
+RMdaOutputStreamResumeThriceTest::RMdaOutputStreamResumeThriceTest(const TDesC& aTestName, const TDesC& aSectName)
+ : RMdaOutputStreamTestBase(aTestName,aSectName)
+ {
+ }
+
+/*
+ *
+ * NewL
+ *
+ */
+RMdaOutputStreamResumeThriceTest* RMdaOutputStreamResumeThriceTest::NewL(const TDesC& aTestName, const TDesC& aSectName)
+ {
+ RMdaOutputStreamResumeThriceTest * self = new(ELeave)RMdaOutputStreamResumeThriceTest(aTestName,aSectName);
+ return self;
+ }
+
+/*
+ *
+ * DoKickoffTestL
+ *
+ */
+void RMdaOutputStreamResumeThriceTest::DoKickoffTestL()
+ {
+ TPtrC filename;
+ // Get the pause time
+ if (!GetIntFromConfig(iSectName, KPause, iPause))
+ {
+ ERR_PRINTF1(_L("Pause time could not be retrieved from ini file"));
+ StopTest(KErrNotFound);
+ return;
+ }
+ // Get the filename of the audio file to play
+ if (!GetStringFromConfig(iSectName, KRawFile, filename))
+ {
+ ERR_PRINTF1(_L("Filename could not be retrieved from ini file"));
+ StopTest(KErrNotFound);
+ return;
+ }
+ // open using RFile for playback
+ iFilename.Copy(filename);
+ TInt err = iFile.Open(iFs, iFilename, EFileRead);
+ if (err != KErrNone)
+ {
+ ERR_PRINTF3(_L("Could not open input file %S. Error = %d"), &iFilename, err);
+ iFs.Close();
+ StopTest(err);
+ return;
+ }
+ // Get size of iFile
+ TInt filesize = 0;
+ err = iFile.Size(filesize);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error getting size of iFile = %d"), err);
+ StopTest(err);
+ return;
+ }
+ // Initialise iBuf
+ iBuffer.CreateMaxL(filesize/KFileDivision);
+
+ //Read first half of the file
+ err = iFile.Read(iBuffer);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error reading iFile %d"), err);
+ StopTest(err);
+ }
+
+ iWait = ETrue;
+ INFO_PRINTF2(_L("File under test -> %S"), &iFilename);
+ iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+ }
+
+/*
+ *
+ * DoTimerCallback
+ *
+ */
+void RMdaOutputStreamResumeThriceTest::DoTimerCallback()
+ {
+ iCount++;
+ if(!iWait && iCount == 2*KRepeatThrice) //Repeating Pause-Resume cycle three times. Timer should be called 6 times
+ {
+ iTimer->Cancel();
+ Fsm (EEventAOSTimerComplete, KErrNone);
+ }
+ else
+ {
+ INFO_PRINTF1(_L("MdaToneUtility Event: EEventTimerComplete"));
+ Fsm (EEventAOSTimerComplete, KErrNone);
+ }
+ }
+
+/*
+ *========================================================================================================
+ * MM-MMF-ACLNT-I-0178-HP
+ *========================================================================================================
+ */
+RMdaOutputStreamConfigInPauseTest::RMdaOutputStreamConfigInPauseTest(const TDesC& aTestName, const TDesC& aSectName)
+ : RMdaOutputStreamTestBase(aTestName,aSectName)
+ {
+ }
+
+/*
+ *
+ * NewL
+ *
+ */
+RMdaOutputStreamConfigInPauseTest* RMdaOutputStreamConfigInPauseTest::NewL(const TDesC& aTestName, const TDesC& aSectName)
+ {
+ RMdaOutputStreamConfigInPauseTest * self = new(ELeave)RMdaOutputStreamConfigInPauseTest(aTestName,aSectName);
+ return self;
+ }
+
+/*
+ *
+ * DoKickoffTestL
+ *
+ */
+void RMdaOutputStreamConfigInPauseTest::DoKickoffTestL()
+ {
+ TPtrC filename;
+ // Get the pause time
+ if (!GetIntFromConfig(iSectName, KPause, iPause))
+ {
+ ERR_PRINTF1(_L("Pause time could not be retrieved from ini file"));
+ StopTest(KErrNotFound);
+ return;
+ }
+ // Get the filename of the audio file to play
+ if (!GetStringFromConfig(iSectName, KRawFile, filename))
+ {
+ ERR_PRINTF1(_L("Filename could not be retrieved from ini file"));
+ StopTest(KErrNotFound);
+ return;
+ }
+ // Get the volume
+ if (!GetIntFromConfig(iSectName, KVolume, iVolume))
+ {
+ ERR_PRINTF1(_L("Volume could not be retrieved from ini file"));
+ StopTest(KErrNotFound);
+ return;
+ }
+ // Get the balance
+ if (!GetIntFromConfig(iSectName, KBalance, iBalance))
+ {
+ ERR_PRINTF1(_L("Balance could not be retrieved from ini file"));
+ StopTest(KErrNotFound);
+ return;
+ }
+ // open using RFile for playback
+ iFilename.Copy(filename);
+ TInt err = iFile.Open(iFs, iFilename, EFileRead);
+ if (err != KErrNone)
+ {
+ ERR_PRINTF3(_L("Could not open input file %S. Error = %d"), &iFilename, err);
+ iFs.Close();
+ StopTest(err);
+ return;
+ }
+ // Get size of iFile
+ TInt filesize = 0;
+ err = iFile.Size(filesize);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error getting size of iFile = %d"), err);
+ StopTest(err);
+ return;
+ }
+ // Initialise iBuf
+ iBuffer.CreateMaxL(filesize/KFileDivision);
+
+ //Read first half of the file
+ err = iFile.Read(iBuffer);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error reading iFile %d"), err);
+ StopTest(err);
+ }
+
+ iWait = ETrue;
+ iConfig = ETrue;
+ INFO_PRINTF2(_L("File under test -> %S"), &iFilename);
+ iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+ }
+
+/*
+ *
+ * DoTimerCallback
+ *
+ */
+void RMdaOutputStreamConfigInPauseTest::DoTimerCallback()
+ {
+ if(!iWait && !iConfig)
+ {
+ iTimer->Cancel();
+ INFO_PRINTF1(_L("Comparing Volume and Balance with values set"));
+ if (iVolume == iAudioOutputStream->Volume() && Abs(iBalance - iAudioOutputStream->GetBalanceL())<KBalanceTolerance)
+ {
+ INFO_PRINTF3(_L("Volume = %d and Balance = %d as expected"),iVolume,iBalance);
+ }
+ else
+ {
+ ERR_PRINTF1(_L("Retrieved values are different than expected"));
+ ERR_PRINTF5(_L("Retrieved Volume = %d and Balance = %d. Expected Volume = %d and Balance = %d"),iAudioOutputStream->Volume(),iAudioOutputStream->GetBalanceL(),iVolume,iBalance);
+ StopTest(KErrGeneral);
+ }
+ }
+ else
+ {
+ INFO_PRINTF1(_L("MdaToneUtility Event: EEventTimerComplete"));
+ Fsm (EEventAOSTimerComplete, KErrNone);
+ }
+ }
+
+/*
+ *========================================================================================================
+ * MM-MMF-ACLNT-I-0179-HP
+ *========================================================================================================
+ */
+RMdaOutputStreamInvalidConfigInPauseTest::RMdaOutputStreamInvalidConfigInPauseTest(const TDesC& aTestName, const TDesC& aSectName)
+ : RMdaOutputStreamTestBase(aTestName,aSectName)
+ {
+ }
+
+/*
+ *
+ * NewL
+ *
+ */
+RMdaOutputStreamInvalidConfigInPauseTest* RMdaOutputStreamInvalidConfigInPauseTest::NewL(const TDesC& aTestName, const TDesC& aSectName)
+ {
+ RMdaOutputStreamInvalidConfigInPauseTest * self = new(ELeave)RMdaOutputStreamInvalidConfigInPauseTest(aTestName,aSectName);
+ return self;
+ }
+
+/*
+ *
+ * DoKickoffTestL
+ *
+ */
+void RMdaOutputStreamInvalidConfigInPauseTest::DoKickoffTestL()
+ {
+ TPtrC filename;
+ // Get the pause time
+ if (!GetIntFromConfig(iSectName, KPause, iPause))
+ {
+ ERR_PRINTF1(_L("Pause time could not be retrieved from ini file"));
+ StopTest(KErrNotFound);
+ return;
+ }
+ // Get the filename of the audio file to play
+ if (!GetStringFromConfig(iSectName, KRawFile, filename))
+ {
+ ERR_PRINTF1(_L("Filename could not be retrieved from ini file"));
+ StopTest(KErrNotFound);
+ return;
+ }
+ // open using RFile for playback
+ iFilename.Copy(filename);
+ TInt err = iFile.Open(iFs, iFilename, EFileRead);
+ if (err != KErrNone)
+ {
+ ERR_PRINTF3(_L("Could not open input file %S. Error = %d"), &iFilename, err);
+ iFs.Close();
+ StopTest(err);
+ return;
+ }
+ // Get size of iFile
+ TInt filesize = 0;
+ err = iFile.Size(filesize);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error getting size of iFile = %d"), err);
+ StopTest(err);
+ return;
+ }
+ // Initialise iBuf
+ iBuffer.CreateMaxL(filesize/KFileDivision);
+
+ //Read first half of the file
+ err = iFile.Read(iBuffer);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error reading iFile %d"), err);
+ StopTest(err);
+ }
+
+ iWait = ETrue;
+ iInvalidConfig = ETrue;
+ INFO_PRINTF2(_L("File under test -> %S"), &iFilename);
+ iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+ }
+
+/*
+ *
+ * DoTimerCallback
+ *
+ */
+void RMdaOutputStreamInvalidConfigInPauseTest::DoTimerCallback()
+ {
+ if(!iWait)
+ {
+ INFO_PRINTF1(_L("Cancelling timer"));
+ iTimer->Cancel();
+ }
+ else
+ {
+ INFO_PRINTF1(_L("MdaAudioOutputStream Event: EEventTimerComplete"));
+ }
+ Fsm (EEventAOSTimerComplete, KErrNone);
+ }
+
+/*
+ *========================================================================================================
+ * MM-MMF-ACLNT-I-0180-HP
+ *========================================================================================================
+ */
+RMdaOutputStreamGetBytesInPauseTest::RMdaOutputStreamGetBytesInPauseTest(const TDesC& aTestName, const TDesC& aSectName)
+ : RMdaOutputStreamTestBase(aTestName,aSectName)
+ {
+ }
+
+/*
+ *
+ * NewL
+ *
+ */
+RMdaOutputStreamGetBytesInPauseTest* RMdaOutputStreamGetBytesInPauseTest::NewL(const TDesC& aTestName, const TDesC& aSectName)
+ {
+ RMdaOutputStreamGetBytesInPauseTest * self = new(ELeave)RMdaOutputStreamGetBytesInPauseTest(aTestName,aSectName);
+ return self;
+ }
+
+/*
+ *
+ * DoKickoffTestL
+ *
+ */
+void RMdaOutputStreamGetBytesInPauseTest::DoKickoffTestL()
+ {
+ TPtrC filename;
+ // Get the pause time
+ if (!GetIntFromConfig(iSectName, KPause, iPause))
+ {
+ ERR_PRINTF1(_L("Pause time could not be retrieved from ini file"));
+ StopTest(KErrNotFound);
+ return;
+ }
+ // Get the filename of the audio file to play
+ if (!GetStringFromConfig(iSectName, KRawFile, filename))
+ {
+ ERR_PRINTF1(_L("Filename could not be retrieved from ini file"));
+ StopTest(KErrNotFound);
+ return;
+ }
+ // open using RFile for playback
+ iFilename.Copy(filename);
+ TInt err = iFile.Open(iFs, iFilename, EFileRead);
+ if (err != KErrNone)
+ {
+ ERR_PRINTF3(_L("Could not open input file %S. Error = %d"), &iFilename, err);
+ iFs.Close();
+ StopTest(err);
+ return;
+ }
+ // Get size of iFile
+ TInt filesize = 0;
+ err = iFile.Size(filesize);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error getting size of iFile = %d"), err);
+ StopTest(err);
+ return;
+ }
+ // Initialise iBuf
+ iBuffer.CreateMaxL(filesize/KFileDivision);
+
+ //Read first half of the file
+ err = iFile.Read(iBuffer);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error reading iFile %d"), err);
+ StopTest(err);
+ }
+
+ iWait = ETrue;
+ iGetBytes = ETrue;
+ INFO_PRINTF2(_L("File under test -> %S"), &iFilename);
+ iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+ }
+
+/*
+ *
+ * DoTimerCallback
+ *
+ */
+void RMdaOutputStreamGetBytesInPauseTest::DoTimerCallback()
+ {
+ if(!iWait)
+ {
+ INFO_PRINTF1(_L("Cancelling timer"));
+ iTimer->Cancel();
+ }
+ else
+ {
+ INFO_PRINTF1(_L("MdaAudioOutputStream Event: EEventTimerComplete"));
+ }
+ Fsm (EEventAOSTimerComplete, KErrNone);
+ }
+
+/*
+ *========================================================================================================
+ * MM-MMF-ACLNT-I-0181-HP
+ *========================================================================================================
+ */
+RMdaOutputStreamPlayPauseStopPlayTest::RMdaOutputStreamPlayPauseStopPlayTest(const TDesC& aTestName, const TDesC& aSectName)
+ : RMdaOutputStreamTestBase(aTestName,aSectName)
+ {
+ }
+
+/*
+ *
+ * NewL
+ *
+ */
+RMdaOutputStreamPlayPauseStopPlayTest* RMdaOutputStreamPlayPauseStopPlayTest::NewL(const TDesC& aTestName, const TDesC& aSectName)
+ {
+ RMdaOutputStreamPlayPauseStopPlayTest * self = new(ELeave)RMdaOutputStreamPlayPauseStopPlayTest(aTestName,aSectName);
+ return self;
+ }
+
+/*
+ *
+ * DoKickoffTestL
+ *
+ */
+void RMdaOutputStreamPlayPauseStopPlayTest::DoKickoffTestL()
+ {
+ TPtrC filename;
+ // Get the pause time
+ if (!GetIntFromConfig(iSectName, KPause, iPause))
+ {
+ ERR_PRINTF1(_L("Pause time could not be retrieved from ini file"));
+ StopTest(KErrNotFound);
+ return;
+ }
+ // Get the filename of the audio file to play
+ if (!GetStringFromConfig(iSectName, KRawFile, filename))
+ {
+ ERR_PRINTF1(_L("Filename could not be retrieved from ini file"));
+ StopTest(KErrNotFound);
+ return;
+ }
+ // open using RFile for playback
+ iFilename.Copy(filename);
+ TInt err = iFile.Open(iFs, iFilename, EFileRead);
+ if (err != KErrNone)
+ {
+ ERR_PRINTF3(_L("Could not open input file %S. Error = %d"), &iFilename, err);
+ iFs.Close();
+ StopTest(err);
+ return;
+ }
+ // Get size of iFile
+ TInt filesize = 0;
+ err = iFile.Size(filesize);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error getting size of iFile = %d"), err);
+ StopTest(err);
+ return;
+ }
+ // Initialise iBuf
+ iBuffer.CreateMaxL(filesize/KFileDivision);
+
+ //Read first half of the file
+ err = iFile.Read(iBuffer);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error reading iFile %d"), err);
+ StopTest(err);
+ }
+
+ iWait = ETrue;
+ iStop = ETrue;
+ INFO_PRINTF2(_L("File under test -> %S"), &iFilename);
+ iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+ }
+
+/*
+ *
+ * DoTimerCallback
+ *
+ */
+void RMdaOutputStreamPlayPauseStopPlayTest::DoTimerCallback()
+ {
+ if(!iWait && iStop)
+ {
+ iAudioOutputStreamState = EStateAOSStopped;
+ iStop = EFalse;
+ iWait = ETrue;
+ INFO_PRINTF1(_L("MAudioOutputStream Event: EEventTimerComplete"));
+ Fsm (EEventAOSTimerComplete, KErrNone);
+ }
+ else if(!iWait && !iStop)
+ {
+ iTimer->Cancel();
+ Fsm (EEventAOSTimerComplete, KErrNone);
+ }
+ else
+ {
+ INFO_PRINTF1(_L("MdaToneUtility Event: EEventTimerComplete"));
+ Fsm (EEventAOSTimerComplete, KErrNone);
+ }
+ }
+
+/*
+ *
+ * Fsm - Executes playing events of AudioToneUtility in sequence
+ *
+ */
+void RMdaOutputStreamPlayPauseStopPlayTest::Fsm(TMdaAOSEvent aMdaAudioOutputStreamEvent, TInt aError)
+ {
+ TInt error = 0;
+ TTimeIntervalMicroSeconds resumeposition;
+ switch (iAudioOutputStreamState)
+ {
+ case EStateAOSCreated:
+ {
+ if (aMdaAudioOutputStreamEvent == EEventAOSInitialize)
+ {
+ TMdaAudioDataSettings settings;
+ //Default settings
+ settings.Query();
+ settings.iChannels = TMdaAudioDataSettings::EChannelsMono;
+ settings.iSampleRate = TMdaAudioDataSettings::ESampleRate8000Hz;
+ INFO_PRINTF1(_L("Calling CMdaAudioOutputStream::Open"));
+ iAudioOutputStream->Open(&settings);
+ INFO_PRINTF1(_L("MdaAudioOutputStream State: EStateInitializing"));
+ iAudioOutputStreamState = EStateAOSInitializing;
+ }
+ else
+ {
+ ERR_PRINTF2(_L("MdaAudioOutputStream EEventInitialize not received as expected. Received event: %d"), aMdaAudioOutputStreamEvent);
+ StopTest(aError, EFail);
+ }
+ break;
+ }
+ case EStateAOSInitializing:
+ {
+ if (aMdaAudioOutputStreamEvent == EEventAOSOpenComplete && aError == KErrNone)
+ {
+ INFO_PRINTF1(_L("Calling SetVolume using MaxVolume/2"));
+ iAudioOutputStream->SetVolume(iAudioOutputStream->MaxVolume()/2);
+ INFO_PRINTF1(_L("Starting playback"));
+ iAudioOutputStream->WriteL(iBuffer);
+ iAudioOutputStreamState = EStateAOSPlaying;
+ StartTimer(iPause*KOneSecond);
+ }
+ else if (aMdaAudioOutputStreamEvent == EEventAOSOpenComplete && aError != KErrNone)
+ {
+ ERR_PRINTF2(_L("MaoscOpenComplete returned with error = %d"), aError);
+ StopTest(aError);
+ }
+ else
+ {
+ ERR_PRINTF2(_L("MdaAudioOutputStream EEventOpenComplete not received as expected. Received event: %d"), aMdaAudioOutputStreamEvent);
+ StopTest(aError, EFail);
+ }
+ break;
+ }
+ case EStateAOSPlaying:
+ {
+ if(aMdaAudioOutputStreamEvent == EEventAOSTimerComplete)
+ {
+ INFO_PRINTF1(_L("Calling CMdaAudioOutputStream::Pause"));
+ error = iAudioOutputStream->Pause();
+ if(error == KErrNone)
+ {
+ INFO_PRINTF1(_L("Pause returned with KErrNone as expected"));
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Pause returned with %d instead of KErrNone as expected"),error);
+ StopTest(error);
+ }
+ iPosition = iAudioOutputStream->Position();
+ INFO_PRINTF2(_L("Stream was paused at %Ld"),iPosition.Int64());
+ INFO_PRINTF1(_L("MdaAudioOutputStream State: EStatePause"));
+ iAudioOutputStreamState = EStateAOSPause;
+ iWait = EFalse;
+ }
+ else
+ {
+ ERR_PRINTF2(_L("DevSound EEventTimerComplete not received as expected. Received event: %d"), aMdaAudioOutputStreamEvent);
+ StopTest(aError, EFail);
+ }
+ break;
+ }
+ case EStateAOSPause:
+ {
+ if (aMdaAudioOutputStreamEvent == EEventAOSTimerComplete)
+ {
+ if(iPosition == iAudioOutputStream->Position())
+ {
+ INFO_PRINTF2(_L("Paused position was maintained at %Ld"),iPosition.Int64());
+ }
+ else
+ {
+ ERR_PRINTF3(_L("Position was not maintained during pause. Expected %Ld Retrieved %Ld"),iPosition.Int64(),iAudioOutputStream->Position().Int64());
+ StopTest(KErrGeneral);
+ }
+ INFO_PRINTF1(_L("Resuming playback. Calling CMdaAudioOutputStream::Resume"));
+ error = iAudioOutputStream->Resume();
+ resumeposition = iAudioOutputStream->Position();
+ if(error == KErrNone)
+ {
+ INFO_PRINTF1(_L("Resume returned with KErrNone as expected"));
+ iAudioOutputStreamState = EStateAOSPlaying;
+ if(Abs(resumeposition.Int64() - iPosition.Int64()) <= KOneSecond/2)
+ {
+ INFO_PRINTF2(_L("Playback resumed from expected position %Ld"),iPosition.Int64());
+ }
+ else
+ {
+ ERR_PRINTF3(_L("Playback did not resume from expected position. Expected %Ld Retrieved %Ld"),iPosition.Int64(),resumeposition.Int64());
+ StopTest(KErrGeneral);
+ }
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Resume returned with %d instead of KErrNone as expected"),error);
+ StopTest(error);
+ }
+ }
+ else
+ {
+ ERR_PRINTF2(_L("EEventTimerComplete not received as expected. Received event: %d"), aMdaAudioOutputStreamEvent);
+ StopTest(aError, EFail);
+ }
+ break;
+ }
+ case EStateAOSStopped:
+ {
+ if (aMdaAudioOutputStreamEvent == EEventAOSTimerComplete)
+ {
+ if(iWait)
+ {
+ INFO_PRINTF1(_L("Stopping playback for 2 seconds"));
+ iAudioOutputStream->Stop();
+ iWait = EFalse;
+ }
+ else
+ {
+ INFO_PRINTF1(_L("Calling CMdaAudioOutputStream::Resume while in Stop"));
+ error = iAudioOutputStream->Resume();
+ if(error == KErrNotReady)
+ {
+ INFO_PRINTF1(_L("Resume returned with KErrNotReady as expected"));
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Resume returned with %d instead of KErrNotReady as expected"),error);
+ StopTest(error);
+ }
+ TInt filepos = 0;
+ INFO_PRINTF1(_L("Restarting file to start position"));
+ error = iFile.Seek(ESeekStart, filepos);
+ if (error != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error restarting iFile %d"), error);
+ StopTest(error);
+ }
+ error = iFile.Read(iBuffer);
+ if (error != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error reading iFile %d"), error);
+ StopTest(error);
+ }
+ INFO_PRINTF1(_L("Calling CMdaAudioOutputStream::WriteL while in Stop to restart playback"));
+ iAudioOutputStream->WriteL(iBuffer);
+ iAudioOutputStreamState = EStateAOSPlaying;
+ }
+ }
+ else
+ {
+ ERR_PRINTF2(_L("EEventTimerComplete not received as expected. Received event: %d"), aMdaAudioOutputStreamEvent);
+ StopTest(aError, EFail);
+ }
+ break;
+ }
+ default:
+ {
+ ERR_PRINTF2(_L("Invalid MdaAudioOutputStream state received: %d"), iAudioOutputStreamState);
+ StopTest(KErrGeneral);
+ }
+ }
+ }
+
+/*
+ *
+ * MaoscPlayComplete - From MMdaAudioOutputStreamObserver
+ *
+ */
+void RMdaOutputStreamPlayPauseStopPlayTest::MaoscPlayComplete(TInt aError)
+ {
+ INFO_PRINTF1(_L("========== AudioOutputStream MaoscPlayComplete() callback =========="));
+ if(iAudioOutputStreamState == EStateAOSStopped)
+ {
+ if (aError == KErrCancel)
+ {
+ INFO_PRINTF2(_L("AudioOutputStream called MaoscPlayComplete with error = %d as expected"), aError);
+ }
+ else
+ {
+ ERR_PRINTF2(_L("AudioOutputStream called MaoscPlayComplete with error = %d"), aError);
+ ERR_PRINTF2(_L("Expected error = %d"), KErrUnderflow);
+ StopTest(aError);
+ }
+ }
+ else if(iAudioOutputStreamState == EStateAOSPlaying)
+ {
+ if(aError == KErrUnderflow)
+ {
+ INFO_PRINTF2(_L("AudioOutputStream called MaoscPlayComplete with error = %d as expected"), aError);
+ StopTest(EPass);
+ }
+ else
+ {
+ ERR_PRINTF2(_L("AudioOutputStream called MaoscPlayComplete with error = %d"), aError);
+ ERR_PRINTF2(_L("Expected error = %d"), KErrUnderflow);
+ StopTest(aError);
+ }
+ }
+ else
+ {
+ ERR_PRINTF1(_L("AudioOutputStream called MaoscPlayComplete at invalid state"));
+ StopTest(KErrGeneral);
+ }
+ }
+
+/*
+ *========================================================================================================
+ * MM-MMF-ACLNT-I-0182-HP
+ *========================================================================================================
+ */
+RMdaOutputStreamInvalidFormatsTest::RMdaOutputStreamInvalidFormatsTest(const TDesC& aTestName, const TDesC& aSectName)
+ : RMdaOutputStreamTestBase(aTestName,aSectName)
+ {
+ }
+
+/*
+ *
+ * NewL
+ *
+ */
+RMdaOutputStreamInvalidFormatsTest* RMdaOutputStreamInvalidFormatsTest::NewL(const TDesC& aTestName, const TDesC& aSectName)
+ {
+ RMdaOutputStreamInvalidFormatsTest * self = new(ELeave)RMdaOutputStreamInvalidFormatsTest(aTestName,aSectName);
+ return self;
+ }
+
+/*
+ *
+ * DoKickoffTestL
+ *
+ */
+void RMdaOutputStreamInvalidFormatsTest::DoKickoffTestL()
+ {
+ TPtrC filename;
+ // Get the pause time
+ if (!GetIntFromConfig(iSectName, KPause, iPause))
+ {
+ ERR_PRINTF1(_L("Pause time could not be retrieved from ini file"));
+ StopTest(KErrNotFound);
+ return;
+ }
+ // Get the filename of the audio file to play
+ if (!GetStringFromConfig(iSectName, KOggFile, filename))
+ {
+ ERR_PRINTF1(_L("Filename could not be retrieved from ini file"));
+ StopTest(KErrNotFound);
+ return;
+ }
+ // open using RFile for playback
+ iFilename.Copy(filename);
+ TInt err = iFile.Open(iFs, iFilename, EFileRead);
+ if (err != KErrNone)
+ {
+ ERR_PRINTF3(_L("Could not open input file %S. Error = %d"), &iFilename, err);
+ iFs.Close();
+ StopTest(err);
+ return;
+ }
+ // Get size of iFile
+ TInt filesize = 0;
+ err = iFile.Size(filesize);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error getting size of iFile = %d"), err);
+ StopTest(err);
+ return;
+ }
+ // Initialise iBuf
+ iBuffer.CreateMaxL(filesize/KFileDivision);
+
+ //Read first half of the file
+ err = iFile.Read(iBuffer);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error reading iFile %d"), err);
+ StopTest(err);
+ }
+
+ iWait = ETrue;
+ INFO_PRINTF2(_L("File under test -> %S"), &iFilename);
+ iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+ }
+
+/*
+ *
+ * DoTimerCallback
+ *
+ */
+void RMdaOutputStreamInvalidFormatsTest::DoTimerCallback()
+ {
+ INFO_PRINTF1(_L("Cancelling timer"));
+ iTimer->Cancel();
+ Fsm (EEventAOSTimerComplete, KErrNone);
+ }
+
+/*
+ *
+ * Fsm - Executes playing events of AudioToneUtility in sequence
+ *
+ */
+void RMdaOutputStreamInvalidFormatsTest::Fsm(TMdaAOSEvent aMdaAudioOutputStreamEvent, TInt aError)
+ {
+ TInt error = 0;
+ TTimeIntervalMicroSeconds resumeposition;
+ switch (iAudioOutputStreamState)
+ {
+ case EStateAOSCreated:
+ {
+ if (aMdaAudioOutputStreamEvent == EEventAOSInitialize)
+ {
+ TMdaAudioDataSettings settings;
+ //setting for OGG file
+ settings.Query();
+ settings.iChannels = TMdaAudioDataSettings::EChannelsStereo;
+ settings.iSampleRate = TMdaAudioDataSettings::ESampleRate44100Hz;
+ INFO_PRINTF1(_L("Calling CMdaAudioOutputStream::Open"));
+ iAudioOutputStream->Open(&settings);
+ INFO_PRINTF1(_L("MdaAudioOutputStream State: EStateInitializing"));
+ iAudioOutputStreamState = EStateAOSInitializing;
+ }
+ else
+ {
+ ERR_PRINTF2(_L("MdaAudioOutputStream EEventInitialize not received as expected. Received event: %d"), aMdaAudioOutputStreamEvent);
+ StopTest(aError, EFail);
+ }
+ break;
+ }
+ case EStateAOSInitializing:
+ {
+ if (aMdaAudioOutputStreamEvent == EEventAOSOpenComplete && aError == KErrNone)
+ {
+ TFourCC KVORBDataType('V', 'O', 'R', 'B');
+ TRAPD(err,iAudioOutputStream->SetDataTypeL(KVORBDataType));
+ if(err != KErrNone)
+ {
+ INFO_PRINTF1(_L("Failed to set non-PCM Format"));
+ StopTest(err);
+ }
+ INFO_PRINTF1(_L("Calling SetVolume using MaxVolume/2"));
+ iAudioOutputStream->SetVolume(iAudioOutputStream->MaxVolume()/2);
+ INFO_PRINTF1(_L("Starting playback"));
+ iAudioOutputStream->WriteL(iBuffer);
+ iAudioOutputStreamState = EStateAOSPlaying;
+ StartTimer(iPause*KOneSecond);
+ }
+ else if (aMdaAudioOutputStreamEvent == EEventAOSOpenComplete && aError != KErrNone)
+ {
+ ERR_PRINTF2(_L("MaoscOpenComplete returned with error = %d"), aError);
+ StopTest(aError);
+ }
+ else
+ {
+ ERR_PRINTF2(_L("MdaAudioOutputStream EEventOpenComplete not received as expected. Received event: %d"), aMdaAudioOutputStreamEvent);
+ StopTest(aError, EFail);
+ }
+ break;
+ }
+ case EStateAOSPlaying:
+ {
+ if(aMdaAudioOutputStreamEvent == EEventAOSTimerComplete)
+ {
+ INFO_PRINTF1(_L("Calling CMdaAudioOutputStream::Pause while playing non-PCM format"));
+ error = iAudioOutputStream->Pause();
+ if(error == KErrNotSupported)
+ {
+ INFO_PRINTF1(_L("Pause while playing non-PCM format returned with KErrNotSupported as expected"));
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Pause while playing non-PCM format returned with %d instead of KErrNotReady as expected"),error);
+ StopTest(error);
+ }
+ }
+ else
+ {
+ ERR_PRINTF2(_L("DevSound EEventTimerComplete not received as expected. Received event: %d"), aMdaAudioOutputStreamEvent);
+ StopTest(aError, EFail);
+ }
+ break;
+ }
+ default:
+ {
+ ERR_PRINTF2(_L("Invalid MdaAudioOutputStream state received: %d"), iAudioOutputStreamState);
+ StopTest(KErrGeneral);
+ }
+ }
+ }
+
+/*
+ *========================================================================================================
+ * MM-MMF-ACLNT-I-0184-HP
+ *========================================================================================================
+ */
+RMdaOutputStreamPauseNonA3FTest::RMdaOutputStreamPauseNonA3FTest(const TDesC& aTestName, const TDesC& aSectName)
+ : RMdaOutputStreamTestBase(aTestName,aSectName)
+ {
+ }
+
+/*
+ *
+ * NewL
+ *
+ */
+RMdaOutputStreamPauseNonA3FTest* RMdaOutputStreamPauseNonA3FTest::NewL(const TDesC& aTestName, const TDesC& aSectName)
+ {
+ RMdaOutputStreamPauseNonA3FTest * self = new(ELeave)RMdaOutputStreamPauseNonA3FTest(aTestName,aSectName);
+ return self;
+ }
+
+/*
+ *
+ * DoKickoffTestL
+ *
+ */
+void RMdaOutputStreamPauseNonA3FTest::DoKickoffTestL()
+ {
+ TPtrC filename;
+ // Get the pause time
+ if (!GetIntFromConfig(iSectName, KPause, iPause))
+ {
+ ERR_PRINTF1(_L("Pause time could not be retrieved from ini file"));
+ StopTest(KErrNotFound);
+ return;
+ }
+ // Get the filename of the audio file to play
+ if (!GetStringFromConfig(iSectName, KRawFile, filename))
+ {
+ ERR_PRINTF1(_L("Filename could not be retrieved from ini file"));
+ StopTest(KErrNotFound);
+ return;
+ }
+ // open using RFile for playback
+ iFilename.Copy(filename);
+ TInt err = iFile.Open(iFs, iFilename, EFileRead);
+ if (err != KErrNone)
+ {
+ ERR_PRINTF3(_L("Could not open input file %S. Error = %d"), &iFilename, err);
+ iFs.Close();
+ StopTest(err);
+ return;
+ }
+ // Get size of iFile
+ TInt filesize = 0;
+ err = iFile.Size(filesize);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error getting size of iFile = %d"), err);
+ StopTest(err);
+ return;
+ }
+ // Initialise iBuf
+ iBuffer.CreateMaxL(filesize/KFileDivision);
+
+ //Read first half of the file
+ err = iFile.Read(iBuffer);
+ if (err != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error reading iFile %d"), err);
+ StopTest(err);
+ }
+
+ iPause = KTimeout; //Set timeout to stop test if playback was paused
+ iWait = ETrue;
+ INFO_PRINTF2(_L("File under test -> %S"), &iFilename);
+ iTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+ }
+
+/*
+ *
+ * DoTimerCallback
+ *
+ */
+void RMdaOutputStreamPauseNonA3FTest::DoTimerCallback()
+ {
+ INFO_PRINTF1(_L("Cancelling timer"));
+ iTimer->Cancel();
+ ERR_PRINTF1(_L("Playback was paused when it shouldn't"));
+ StopTest(KErrGeneral);
+ }
+
+/*
+ *
+ * Fsm - Executes playing events of AudioToneUtility in sequence
+ *
+ */
+void RMdaOutputStreamPauseNonA3FTest::Fsm(TMdaAOSEvent aMdaAudioOutputStreamEvent, TInt aError)
+ {
+ switch (iAudioOutputStreamState)
+ {
+ case EStateAOSCreated:
+ {
+ if (aMdaAudioOutputStreamEvent == EEventAOSInitialize)
+ {
+ TMdaAudioDataSettings settings;
+ //Default settings
+ settings.Query();
+ settings.iChannels = TMdaAudioDataSettings::EChannelsMono;
+ settings.iSampleRate = TMdaAudioDataSettings::ESampleRate8000Hz;
+ INFO_PRINTF1(_L("Calling CMdaAudioOutputStream::Open"));
+ iAudioOutputStream->Open(&settings);
+ INFO_PRINTF1(_L("MdaAudioOutputStream State: EStateInitializing"));
+ iAudioOutputStreamState = EStateAOSInitializing;
+ }
+ else
+ {
+ ERR_PRINTF2(_L("MdaAudioOutputStream EEventInitialize not received as expected. Received event: %d"), aMdaAudioOutputStreamEvent);
+ StopTest(aError, EFail);
+ }
+ break;
+ }
+ case EStateAOSInitializing:
+ {
+ if (aMdaAudioOutputStreamEvent == EEventAOSOpenComplete && aError == KErrNone)
+ {
+ INFO_PRINTF1(_L("Calling SetVolume using MaxVolume/2"));
+ iAudioOutputStream->SetVolume(iAudioOutputStream->MaxVolume()/2);
+ INFO_PRINTF1(_L("Starting playback"));
+ iAudioOutputStream->WriteL(iBuffer);
+ StartTimer(iPause*KOneSecond);
+ INFO_PRINTF1(_L("Calling CMdaAudioOutputStream::Pause in non-a3f configuration"));
+ TInt err = iAudioOutputStream->Pause();
+ if(err == KErrNotSupported)
+ {
+ INFO_PRINTF1(_L("Pause in CMdaAudioOutputStream returned with KErrNotSupported as expected"));
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Pause in CMdaAudioOutputStream returned with %d instead of KErrNotSupported as expected"),err);
+ StopTest(err);
+ }
+ INFO_PRINTF1(_L("Calling CMdaAudioOutputStream::Resume in non-a3f configuration"));
+ err = iAudioOutputStream->Resume();
+ if(err == KErrNotReady)
+ {
+ INFO_PRINTF1(_L("Resume in CMdaAudioOutputStream returned with KErrNotReady as expected"));
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Resume in CMdaAudioOutputStream returned with %d instead of KErrNotReady as expected"),err);
+ StopTest(err);
+ }
+ }
+ else if (aMdaAudioOutputStreamEvent == EEventAOSOpenComplete && aError != KErrNone)
+ {
+ ERR_PRINTF2(_L("MaoscOpenComplete returned with error = %d"), aError);
+ StopTest(aError);
+ }
+ else
+ {
+ ERR_PRINTF2(_L("MdaAudioOutputStream EEventOpenComplete not received as expected. Received event: %d"), aMdaAudioOutputStreamEvent);
+ StopTest(aError, EFail);
+ }
+ break;
+ }
+ default:
+ {
+ ERR_PRINTF2(_L("Invalid MdaAudioOutputStream state received: %d"), iAudioOutputStreamState);
+ StopTest(KErrGeneral);
+ }
+ }
+ }