diff -r 0fd27995241b -r 9ac0a0a7da70 javauis/mmapi_qt/audiostreaming/src.emc/cmmaaudiostreamplayer.cpp --- a/javauis/mmapi_qt/audiostreaming/src.emc/cmmaaudiostreamplayer.cpp Tue May 11 16:07:20 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,469 +0,0 @@ -/* -* Copyright (c) 2002 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 streaming audio. -* -*/ - - -// INCLUDE FILES -#include -#include - -#include "cmmaaudiostreamplayer.h" -#include "cmmadatasourcestream.h" -#include "mmafunctionserver.h" -#include "cmmastreamhandler.h" - -_LIT(KMMAStreamErrorMessage, "Internal error: %d"); - - -CMMAAudioStreamPlayer* CMMAAudioStreamPlayer::NewLC( - CMMAEMCResolver* aResolver) -{ - LOG( EJavaMMAPI, EInfo, "MMA::CMMAAudioStreamPlayer::NewLC +"); - CMMAAudioStreamPlayer* self = new(ELeave) CMMAAudioStreamPlayer(aResolver); - CleanupStack::PushL(self); - self->ConstructL(); - LOG( EJavaMMAPI, EInfo, "MMA::CMMAAudioStreamPlayer::NewLC -"); - return self; -} - -CMMAAudioStreamPlayer::~CMMAAudioStreamPlayer() -{ - LOG( EJavaMMAPI, EInfo, "MMA::CMMAAudioStreamPlayer::~CMMAAudioStreamPlayer +"); - - if (iMStreamControl->GetState() > MStreamControl::CLOSED) - { - iMStreamControl->Close(); - } - - delete iStreamHandler; - - LOG( EJavaMMAPI, EInfo, "MMA::CMMAAudioStreamPlayer::~CMMAAudioStreamPlayer -"); -} - - -CMMAAudioStreamPlayer::CMMAAudioStreamPlayer( - CMMAEMCResolver* aResolver): - CMMAEMCAudioPlayer(aResolver) -{ - LOG( EJavaMMAPI, EInfo, "MMA::CMMAAudioStreamPlayer::CMMAAudioStreamPlayer"); -} - -void CMMAAudioStreamPlayer::ConstructL() -{ - LOG( EJavaMMAPI, EInfo, "MMA::CMMAAudioStreamPlayer::ConstructL +"); - iControllerPrimed = EFalse; - CMMAEMCAudioPlayer::ConstructL(); - iMetaDataUtility = CMetaDataUtility::NewL(); - iStreamHandler = CMMAStreamHandler::NewL(*this, - *iMStreamControl, - *iMDataBufferSource, - *iFactory, - *iMetaDataUtility); - iActiveSchedulerWait = new(ELeave)CActiveSchedulerWait(); - LOG( EJavaMMAPI, EInfo, "MMA::CMMAAudioStreamPlayer::ConstructL -"); -} - -CMMASourceStream* CMMAAudioStreamPlayer::AddSourceStreamL(JNIEnv* aJNIEnv, - MMAFunctionServer* aEventSource, - jobject aReader) -{ - LOG( EJavaMMAPI, EInfo, "MMA::CMMAAudioStreamPlayer::AddSourceStreamL +"); - CMMADataSourceStream* sourceStream = CMMADataSourceStream::NewLC(aJNIEnv, - aEventSource, - aReader, - this, - aEventSource); - User::LeaveIfError(iSourceStreams.Append(sourceStream)); - CleanupStack::Pop(sourceStream); - iStreamHandler->SetSourceStream(sourceStream); - LOG( EJavaMMAPI, EInfo, "MMA::CMMAAudioStreamPlayer::AddSourceStreamL -"); - return sourceStream; -} - -CMetaDataUtility* CMMAAudioStreamPlayer::MetaDataUtilityOwnership() -{ - CMetaDataUtility* temp = iMetaDataUtility; - iMetaDataUtility = NULL; - return temp; -} - -void CMMAAudioStreamPlayer::DeallocateL() -{ - LOG( EJavaMMAPI, EInfo, "MMA::CMMAAudioStreamPlayer::DeallocateL +"); - iStreamHandler->Stop(); - iControllerPrimed = EFalse; - CMMAEMCPlayerBase::DeallocateL(); - LOG( EJavaMMAPI, EInfo, "MMA::CMMAAudioStreamPlayer::DeallocateL -"); -} - -void CMMAAudioStreamPlayer::PrefetchL() -{ - LOG( EJavaMMAPI, EInfo, "CMMAAudioStreamPlayer::PrefetchL +"); - __ASSERT_DEBUG(iSourceStreams.Count() > 0, User::Invariant()); - iStreamHandler->Prepare(*iMimeType); - LOG( EJavaMMAPI, EInfo, "CMMAAudioStreamPlayer::PrefetchL -"); -} - -void CMMAAudioStreamPlayer::StartL() -{ - LOG( EJavaMMAPI, EInfo, "MMA::CMMAAudioStreamPlayer::StartL +"); - if (iStreamHandler->LastBufferWritten() && - (iMStreamControl ->GetState() == MStreamControl::PAUSED)) - { - LOG( EJavaMMAPI, EInfo, "MMA::CMMAAudioStreamPlayer::StartL If outer+"); - TInt64 time; - GetMediaTime(&time); - TInt err = iMStreamControl->Start(); - if (err == KErrNone && iState != EStarted) - { LOG( EJavaMMAPI, EInfo, "MMA::CMMAAudioStreamPlayer::StartL If inner+"); - // move to started state and post started event - ChangeState(EStarted); - PostLongEvent(CMMAPlayerEvent::EStarted, time); - } - else - { LOG( EJavaMMAPI, EInfo, "MMA::CMMAAudioStreamPlayer::StartL else inner+"); - HandleError(err); - } - } - else - { LOG( EJavaMMAPI, EInfo, "MMA::CMMAAudioStreamPlayer::StartL else outer+"); - iStreamHandler->Start(); - } - - LOG( EJavaMMAPI, EInfo, "MMA::CMMAAudioStreamPlayer::StartL -"); -} - -void CMMAAudioStreamPlayer::StopL(TBool aPostEvent) -{ - LOG1( EJavaMMAPI, EInfo, "CMMAAudioStreamPlayer::Stop state %d", iState); - if (iState == EStarted) - { - User::LeaveIfError(Pause()); - // go back to prefetched state - ChangeState(EPrefetched); - if (aPostEvent) - { - TInt64 time; - GetMediaTime(&time); - PostLongEvent(CMMAPlayerEvent::EStopped, time); - } - } - LOG( EJavaMMAPI, EInfo, "CMMAAudioStreamPlayer::Stop OK"); -} - -TInt CMMAAudioStreamPlayer::Pause() -{ - LOG( EJavaMMAPI, EInfo, "MMA::CMMAAudioStreamPlayer::Pause +"); - iStreamHandler->Pause(); - LOG1( EJavaMMAPI, EInfo, "MMA::CMMAAudioStreamPlayer:: iStreamControl State = %d",iMStreamControl->GetState()); - - TInt err = KErrNone; - if (iMStreamControl->GetState() != MStreamControl::PAUSED) - { - err = iMStreamControl->Pause(); - ELOG1( EJavaMMAPI, "MMA::CMMAAudioStreamPlayer:: iStreamControl Pause error = %d", err); - if ((!iActiveSchedulerWait->IsStarted()) && (err == KErrNone)) - { - iActiveSchedulerWait->Start(); - } - } - LOG( EJavaMMAPI, EInfo, "MMA::CMMAAudioStreamPlayer::Pause -"); - return err; -} - -void CMMAAudioStreamPlayer::PlayCompleteL(TInt aError) -{ - ELOG1( EJavaMMAPI, "MMA::CMMAAudioStreamPlayer::PlayCompleteL error %d", - aError); - - // Before controller is started it must be primed - iControllerPrimed = EFalse; - - TInt64 time; - GetDuration(&time); - - // Send 'Stopped' only when stop() is called. - PostLongEvent(CMMAPlayerEvent::EEndOfMedia, time); - - ChangeState(EPrefetched); // ready to play again - - if (aError == KErrNone) - { - iRepeatCount++; - - if (iRepeatForever || iRepeatCount < iRepeatNumberOfTimes) - { - StartL(); - } - else - { - iRepeatCount = 0; - } - } - else - { - // error has occured, setting correct number of - // repeats for next start - SetLoopCount(iRepeatNumberOfTimes); - } -} - -void CMMAAudioStreamPlayer::GetDuration(TInt64* aDuration) -{ - CMMAPlayer::GetDuration(aDuration); -} - -void CMMAAudioStreamPlayer::PrepareComplete(TInt aError) -{ - ELOG1( EJavaMMAPI, "MMA::CMMAAudioStreamPlayer::PrepareComplete error %d", - aError); - - if (aError == KErrNone) - { - ChangeState(EPrefetched); - } - PostActionCompleted(aError); // java prefetch return -} - -void CMMAAudioStreamPlayer::StartComplete(TInt aError) -{ - ELOG1( EJavaMMAPI, "MMA::CMMAAudioStreamPlayer::StartComplete error %d", - aError); - - // do not start if player is deallocated or closed - // RateControl start can start controller in started state - if ((iState != EStarted) && - (iState != EPrefetched)) - { - PostActionCompleted(KErrNone); // java start return - return; - } - - TInt err = aError; - if (!iControllerPrimed) - { - // Prime must be called when player is started first time or restarted - err = iMStreamControl->Prime(); - - ELOG1( EJavaMMAPI, "MMA::CMMAAudioStreamPlayer::StartComplete prime error %d", - err); - } - else - { - err = KErrNone; - } - - if (iControllerPrimed && (iState == EPrefetched)) - { - - TInt64 time; - if (err == KErrNone) - { - // must be primed before media time can be get - GetMediaTime(&time); - err = iMStreamControl->Start(); - ELOG1( EJavaMMAPI, "MMA::CMMAAudioStreamPlayer::StartComplete play error %d", - err); - - } - - // RateControl can start controller in started state, then Java event is - // not sent - if (err == KErrNone && iState != EStarted) - { // move to started state and post started event - PostLongEvent(CMMAPlayerEvent::EStarted, time); - ChangeState(EStarted); - } - else - { // post error event - HandleError(aError); - PostActionCompleted(aError); // java start return - } - } - -} - -void CMMAAudioStreamPlayer::HandleError(TInt aError) -{ - ELOG1( EJavaMMAPI, "MMA::CMMAAudioStreamPlayer::HandleError error %d", - aError); - - TName errorMessage; - errorMessage.Format(KMMAStreamErrorMessage, aError); - PostStringEvent(CMMAPlayerEvent::EError, errorMessage); -} - -void CMMAAudioStreamPlayer::Event(MControl* aControl, TUint aEventType, TAny* aEventObject) -{ - - switch (aEventType) - { - - case MStreamControlObserver::KStateChangedEvent: - { - MStateChangedEvent* evt = (MStateChangedEvent*)aEventObject; - MStreamControl* control1 = (MStreamControl*)(aControl); - switch (control1->GetState()) - { - case MStreamControl::CLOSED: - { - iPrevStreamControlState = MStreamControl::CLOSED; - LOG( EJavaMMAPI, EInfo, "MMA::CMMAAudioStreamPlayer::Event:KStateChangedEvent :CLOSED"); - } - break; - - case MStreamControl::INITIALIZED: - { - LOG( EJavaMMAPI, EInfo, "MMA::CMMAAudioStreamPlayer::Event:KStateChangedEvent :INITIALIZED"); - switch (iPrevStreamControlState) - { - case MStreamControl::CLOSED: - { - iPrevStreamControlState = MStreamControl::INITIALIZED; - if (iActiveSchedulerWait->IsStarted()) - { - iActiveSchedulerWait->AsyncStop(); - } - } - break; - - case MStreamControl::INITIALIZED: - { - iPrevStreamControlState = MStreamControl::INITIALIZED; - LOG( EJavaMMAPI, EInfo, "inner Switch case: MStreamControl::INITIALIZED "); - ELOG1( EJavaMMAPI, "MMA::CMMAAudioStreamPlayer::Event:KStateChangedEvent:ErrorCode = %d ",evt->GetErrorCode()); - // error occured during prime operation - // move player back to prefetched state - if (iState == EStarted) - { - ChangeState(EPrefetched); - } - PostActionCompleted(evt->GetErrorCode()); // java start return - } - break; - - case MStreamControl::PRIMED: - { - iPrevStreamControlState = MStreamControl::INITIALIZED; - LOG( EJavaMMAPI, EInfo, "inner Switch case: MStreamControl::PRIMED "); - - } - break; - - case MStreamControl::EXECUTING: - { - iPrevStreamControlState = MStreamControl::INITIALIZED; - LOG( EJavaMMAPI, EInfo, "inner Switch case: MStreamControl::EXECUTING "); - ELOG1( EJavaMMAPI, "MMA::CMMAAudioStreamPlayer::Event:KStateChangedEvent:ErrorCode = %d ",evt->GetErrorCode()); - if (KErrEof == evt->GetErrorCode()) - { - TRAPD(error, PlayCompleteL(KErrNone)); - if (KErrNone != error) - { - ELOG1( EJavaMMAPI, "MMA::CMMAAudioStreamPlayer::Event:PlayCompleteL Error = %d", error); - } - } - } - break; - - case MStreamControl::BUFFERING: - { - iPrevStreamControlState = MStreamControl::INITIALIZED; - LOG( EJavaMMAPI, EInfo, "inner Switch case: MStreamControl::BUFFERING "); - } - break; - - case MStreamControl::PAUSED: - { - iPrevStreamControlState = MStreamControl::INITIALIZED; - LOG( EJavaMMAPI, EInfo, "inner Switch case: MStreamControl::PAUSED "); - } - break; - } - } - break; - - case MStreamControl::PRIMED: - { - LOG( EJavaMMAPI, EInfo, "MMA::CMMAAudioStreamPlayer::Event:KStateChangedEvent :PRIMED"); - iPrevStreamControlState = MStreamControl::PRIMED; - iControllerPrimed = ETrue; - TInt64 time; - // must be primed before media time can be get - GetMediaTime(&time); - TInt err = iMStreamControl->Start(); - ELOG1( EJavaMMAPI, "MMA::CMMAAudioStreamPlayer::Event play error %d", - err); - - // RateControl can start controller in started state, then Java event is - // not sent - if (err == KErrNone && iState != EStarted) - { // move to started state and post started event - PostLongEvent(CMMAPlayerEvent::EStarted, time); - ChangeState(EStarted); - } - else - { - PostLongEvent(CMMAPlayerEvent::EStarted, time); - } - } - break; - - case MStreamControl::EXECUTING: - { - LOG( EJavaMMAPI, EInfo, "MMA::CMMAAudioStreamPlayer::Event:KStateChangedEvent :EXECUTING"); - iPrevStreamControlState = MStreamControl::EXECUTING; - PostActionCompleted(KErrNone); // java start return - } - break; - - case MStreamControl::BUFFERING: - { - iPrevStreamControlState = MStreamControl::BUFFERING; - LOG( EJavaMMAPI, EInfo, "MMA::CMMAAudioStreamPlayer::Event:KStateChangedEvent :BUFFERING"); - } - break; - - case MStreamControl::PAUSED: - { - iPrevStreamControlState = MStreamControl::PAUSED; - if (iActiveSchedulerWait->IsStarted()) - { - iActiveSchedulerWait->AsyncStop(); - } - LOG( EJavaMMAPI, EInfo, "MMA::CMMAAudioStreamPlayer::Event:KStateChangedEvent :PAUSED"); - } - break; - - default: - LOG( EJavaMMAPI, EInfo, "MMA::CMMAAudioStreamPlayer::Event:KStateChangedEvent :DEFAULT"); - break; - } - } - break; - - case MControlObserver::KErrorEvent: - { - MErrorCode* evt = (MErrorCode*)aEventObject; - if (KErrNone != evt->GetErrorCode()) - { - ELOG1( EJavaMMAPI, "MMA::CMMAAudioStreamPlayer::Event:KErrorEvent, err = %d", evt->GetErrorCode()); - } - } - break; - } -} -// END OF FILE