javauis/mmapi_qt/audiostreaming/src.emc/cmmaaudiostreamplayer.cpp
branchRCL_3
changeset 18 9ac0a0a7da70
parent 17 0fd27995241b
child 19 71c436fe3ce0
--- 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 <AudioPreference.h>
-#include <logger.h>
-
-#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