os/mm/mmlibs/mmfw/tsrc/mmfintegrationtest/SDevSound/SDSCapTestServer/src/CapTestStep0008.cpp
Update contrib.
1 // Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // under the terms of "Eclipse Public License v1.0"
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
16 #include "CapTestStep0008.h"
18 CSecDevSndTS0008* CSecDevSndTS0008::NewL()
20 CSecDevSndTS0008* self = new (ELeave) CSecDevSndTS0008;
21 CleanupStack::PushL(self);
27 void CSecDevSndTS0008::ConstructL()
33 void CSecDevSndTS0008::StartProcessing(TRequestStatus& aStatus)
36 if ( (iVerdict = DoTestStepPreambleL() ) == EPass)
38 // only do this when DoTestStepPreambleL() pass, if it fails, it means
39 // devsound is not ready for play data yet.
40 iVerdict = DoPlayData();
44 CSecDevSndTS0008::~CSecDevSndTS0008()
48 /******************************************************************************
52 *****************************************************************************/
61 TVerdict CSecDevSndTS0008::DoPlayData()
64 TVerdict initOK = TestInitialize(EMMFStatePlaying);
70 TestSetPriority(KDevSoundPriorityHigh);
72 initOK = TestPlayInit();
78 User::RequestComplete(iStatus, KErrNone);
80 TestSetVolume(iMMFDevSound->MaxVolume() / 2);
82 _LIT(KTestFileName, "C:\\sdevsoundinttestdata\\mainTst.wav");
83 TFileName aFilename(KTestFileName);
85 return PlayDataFile(aFilename);
97 TVerdict CSecDevSndTS0008::PlayDataFile(TDesC& aFilename)
99 TInt initOK = KErrNone;
100 TInt aNumSamples = -1;
105 TInt err = fs.Connect();
108 return EInconclusive;
111 err = file.Open(fs, aFilename, EFileRead);
115 return EInconclusive;
118 TInt bufferCount = 0;
121 while (initOK == KErrNone && iCallbackError == KErrNone)
123 //read sizeof buffer from file
124 CMMFDataBuffer* buffer = STATIC_CAST (CMMFDataBuffer*, iBuffer);
125 file.Read(buffer->Data());
126 if (buffer->Data().Length()!= buffer->RequestSize())
128 iBuffer->SetLastBuffer(ETrue);
132 initOK = TestPlayData();
138 while (bufferCount < aNumSamples && initOK == KErrNone && iCallbackError == KErrNone)
140 //read sizeof buffer from file
141 CMMFDataBuffer* buffer = STATIC_CAST (CMMFDataBuffer*, iBuffer);
142 file.Read(buffer->Data());
143 if (buffer->Data().Length()!= buffer->RequestSize())
145 iBuffer->SetLastBuffer(ETrue);
149 initOK = TestPlayData();
157 if (initOK != KErrNone)
162 if (aNumSamples >= 0 && bufferCount != aNumSamples)
178 TVerdict CSecDevSndTS0008::TestInitialize(TMMFState aMode)
180 TFourCC pcm16(KMMFFourCCCodePCM16); //default to pcm16 data type
182 iCallbackError = KErrNone;
183 iExpectedValue = KErrNone;
186 TRAPD(err, iMMFDevSound->InitializeL(*this, pcm16, aMode));
189 return EInconclusive;
193 CActiveScheduler::Start();
195 if (iCallbackError != iExpectedValue)
199 if (iCallbackArray[EInitComplete] != 1)
213 TVerdict CSecDevSndTS0008::TestPlayInit()
217 //get buffer from devsound
218 TRAPD(err, iMMFDevSound->PlayInitL());
219 // Start the active scheduler and catch the callback
220 CActiveScheduler::Start();
227 if (iCallbackArray[EBuffToFill] != 1)
231 TInt tot = GetCallbackTotal();
246 TVerdict CSecDevSndTS0008::TestPlayData()
250 iMMFDevSound->PlayData();
251 // Start the active scheduler and catch the callback
252 CActiveScheduler::Start();
254 if (iCallbackArray[EBuffToFill] != 1)
256 if (iCallbackArray[EBuffToFill] == 0 && iCallbackArray[EPlayError] == 1)
258 // DevSound PlayError was called 1 time. Must be EOF.
266 TInt tot = GetCallbackTotal();
274 /******************************************************************************
276 * DevSound mixin methods
278 *****************************************************************************/
286 void CSecDevSndTS0008::BufferToBeFilled (CMMFBuffer* aBuffer)
295 iCallbackError = KErrNone;
299 iCallbackError = KErrNotFound;
301 iCallbackArray[EBuffToFill] ++;
302 CActiveScheduler::Stop();
311 void CSecDevSndTS0008::PlayError (TInt aError)
313 if( aError != KErrInUse )
315 // should get interrupted by client
319 iCallbackError = aError;
320 iCallbackArray[EPlayError] ++;
321 CActiveScheduler::Stop();