diff -r 6c158198356e -r ae942d28ec0e javauis/mmapi_qt/baseline/src.emc/cmmaemcaudioplayer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javauis/mmapi_qt/baseline/src.emc/cmmaemcaudioplayer.cpp Tue Aug 31 15:09:22 2010 +0300 @@ -0,0 +1,178 @@ +/* +* Copyright (c) 2002-2007 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 class is used for playing sounds +* +*/ + + +// INCLUDE FILES +#include +#include +#include "cmmaemcaudioplayer.h" + +CMMAEMCAudioPlayer* CMMAEMCAudioPlayer::NewLC( + CMMAEMCResolver* aResolver) +{ + CMMAEMCAudioPlayer* self = new(ELeave) CMMAEMCAudioPlayer(aResolver); + CleanupStack::PushL(self); + self->ConstructL(); + return self; +} + +EXPORT_C CMMAEMCAudioPlayer::~CMMAEMCAudioPlayer() +{ +} + +EXPORT_C CMMAEMCAudioPlayer::CMMAEMCAudioPlayer( + CMMAEMCResolver* aResolver): + CMMAEMCPlayerBase(aResolver) +{ + LOG(EJavaMMAPI, EInfo, "MMA::CMMAEMCAudioPlayer::CMMAEMCAudioPlayer"); +} + +EXPORT_C void CMMAEMCAudioPlayer::ConstructL() +{ + LOG(EJavaMMAPI, EInfo, "MMA::CMMAEMCAudioPlayer::ConstructL +"); + CMMAEMCPlayerBase::ConstructL(); + LOG(EJavaMMAPI, EInfo, "MMA::CMMAEMCAudioPlayer::ConstructL -"); +} + +EXPORT_C void CMMAEMCAudioPlayer::PrefetchDataL(const TDesC8& /*aData*/) +{ + LOG(EJavaMMAPI, EInfo, "MMA::CMMAEMCAudioPlayer::PrefetchDataL +"); + + User::LeaveIfError(iMStreamControl->Prime()); + LOG(EJavaMMAPI, EInfo, "MMA::CMMAEMCAudioPlayer::PrefetchDataL -"); +} + +EXPORT_C void CMMAEMCAudioPlayer::PrefetchFileL() +{ + LOG(EJavaMMAPI, EInfo, "MMA::CMMAEMCAudioPlayer::Prefetching from file"); +} + +EXPORT_C void CMMAEMCAudioPlayer::PlayCompleteL(TInt aError) +{ + LOG(EJavaMMAPI, EInfo, "MMA::CMMAEMCAudioPlayer::PlayCompleteL +"); + TInt64 time; + GetDuration(&time); + iMediaTime = time; + iStartedEventTime = 0; + + ChangeState(EPrefetched); // ready to play again + + // Send 'Stopped' only when stop() is called. + PostLongEvent(CMMAPlayerEvent::EEndOfMedia, time); + + if (aError == KErrNone) + { + iRepeatCount++; + + // priming again for allowing e.g. media time setting + User::LeaveIfError(iMStreamControl->Prime()); + + if (iRepeatForever || iRepeatCount < iRepeatNumberOfTimes) + { + StartL(); + } + else + { + iRepeatCount = 0; + + TInt64 position(0); + User::LeaveIfError(iMStreamControl->SetPosition(position)); + } + } + else + { + // error has occured, setting correct number of + // repeats for next start + SetLoopCount(iRepeatNumberOfTimes); + } + LOG(EJavaMMAPI, EInfo, "MMA::CMMAEMCAudioPlayer::PlayCompleteL -"); +} + +EXPORT_C void CMMAEMCAudioPlayer::RealizeL() +{ + LOG(EJavaMMAPI, EInfo, "CMMAEMCAudioPlayer::RealizeL +"); + // DataSource must have at least 1 stream or + // we must have file to play + if ((iSourceStreams.Count() == 0) && !iFileName) + { + LOG(EJavaMMAPI, EInfo, "CMMAEMCAudioPlayer::RealizeL : Not Enough Streams"); + User::Leave(KErrNotEnoughStreams); + } + User::LeaveIfError(iMStreamControl->Open()); + + if (!iActiveSchedulerWait->IsStarted()) + { + iActiveSchedulerWait->Start(); + } + CMMAPlayer::RealizeL(); + LOG(EJavaMMAPI, EInfo, "CMMAEMCAudioPlayer::RealizeL -"); +} + +EXPORT_C void CMMAEMCAudioPlayer::PrefetchL() +{ + LOG(EJavaMMAPI, EInfo, "CMMAEMCAudioPlayer::PrefetchL +"); + __ASSERT_DEBUG((iSourceStreams.Count() > 0) || iFileName, User::Invariant()); + + if (iFileName) + { + // prefetching the file + PrefetchFileL(); + // we can go to prefetched state immediately + ChangeState(EPrefetched); + PostActionCompleted(KErrNone); + } + else + { + // Using TDes -- load the whole sound + iSourceStreams[ 0 ]->ReadAllL(); + } + // CMMASourceStream will notify with ReadCompleted + LOG(EJavaMMAPI, EInfo, "CMMAEMCAudioPlayer::PrefetchL -"); +} + +EXPORT_C const TDesC& CMMAEMCAudioPlayer::Type() +{ + // Should be used in AMMS Implementation to differentiate between + // this new kind of player with others + return KMMAEMCAudioPlayer; +} + +// +// CMMASourceStreamReader finished read operation +// This is called when ReadL is completed in Prefetch() +// +EXPORT_C void CMMAEMCAudioPlayer::ReadCompletedL(TInt aStatus, const TDesC8& aData) +{ + LOG(EJavaMMAPI, EInfo, "CMMAEMCAudioPlayer::ReadCompletedL +"); + LOG1(EJavaMMAPI, EInfo, "CMMAEMCAudioPlayer::ReadCompletedL: status = %d", aStatus); + if (aStatus < KErrNone) + { + PostActionCompleted(aStatus); + } + else + { + TRAPD(err, PrefetchDataL(aData)); + if (err == KErrNone) + { + ChangeState(EPrefetched); + } + PostActionCompleted(err); + } + LOG(EJavaMMAPI, EInfo, "CMMAEMCAudioPlayer::ReadCompletedL -"); +} + +// END OF FILE