khronosfws/openmax_al/src/mmf_adaptation/cmmfbackendengine.cpp
branchRCL_3
changeset 20 0ac9a5310753
parent 19 095bea5f582e
child 21 999b2818a0eb
--- a/khronosfws/openmax_al/src/mmf_adaptation/cmmfbackendengine.cpp	Tue Aug 31 15:43:02 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1930 +0,0 @@
-/*
- * Copyright (c) 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:
- *
- */
-
-#include <string.h>
-#include <ctype.h>
-#include <uri8.h>
-#include <uri16.h>
-#include "cmmfbackendengine.h"
-#include "markerpositiontimer.h"
-#include "positionupdatetimer.h"
-#include "profileutilmacro.h"
-#include <mmf/common/mmfvideoenums.h>
-
-extern "C"
-    {
-#include "xaadaptationmmf.h"
-    }
-
-#define RET_IF_ERR(res, val) if (res != KErrNone) return val
-
-const XAuint32 XA_PLAYSTATE_PLAYERUNINITIALIZED = 0;
-
-CMMFBackendEngine* CMMFBackendEngine::NewL()
-    {
-    CMMFBackendEngine* self = new (ELeave) CMMFBackendEngine();
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop(self);
-    return self;
-    }
-
-CMMFBackendEngine::~CMMFBackendEngine()
-    {
-    Close();
-    Destroy();
-    }
-
-CMMFBackendEngine::CMMFBackendEngine() :
-    iPositionUpdatePeriod(1000), /* default is 1000 millisec */
-    iUriPtr(NULL, 0)
-    {
-    iRecordState = ERecorderNotReady;
-    iPositionUpdateTimer = NULL;
-    iMediaPlayerState = XA_PLAYSTATE_PLAYERUNINITIALIZED;
-    iMMFPlayerState = EPlayerClosed;
-    }
-
-void CMMFBackendEngine::ConstructL()
-    {
-    iAPIBeingUsed = ENoUtility;
-    iActiveSchedulerWait = new (ELeave) CActiveSchedulerWait;
-    }
-
-void CMMFBackendEngine::InitAudioRecorderUtilityL()
-    {
-    if (!iAudioRecorder)
-        {
-        iBaseAudioRecorder = CMdaAudioRecorderUtility::NewL(*this);
-        iAudioRecorder = (CMdaAudioRecorderUtility*) iBaseAudioRecorder;
-        }
-    }
-
-void CMMFBackendEngine::InitAudioPlayerUtilityL()
-    {
-    if (!iAudioPlayer)
-        {
-        iBaseAudioPlayer = CMdaAudioPlayerUtility::NewL(*this);
-        iAudioPlayer = (CMdaAudioPlayerUtility*) iBaseAudioPlayer;
-        }
-    InitPlayerTimersL();
-    }
-
-void CMMFBackendEngine::InitVideoPlayerUtilityL()
-    {
-    if (!iVideoPlayer)
-        {
-        iBaseVideoPlayer = CVideoPlayerUtility2::NewL(*this,
-                EMdaPriorityNormal, EMdaPriorityPreferenceTimeAndQuality);
-        iVideoPlayer = (CVideoPlayerUtility2*) iBaseVideoPlayer;
-        iVideoPlayer->RegisterForVideoLoadingNotification(*this);
-        }
-    InitPlayerTimersL();
-    }
-
-void CMMFBackendEngine::InitPlayerTimersL()
-    {
-    if (!iMarkerPositionTimer)
-        {
-        iMarkerPositionTimer = CMarkerPositionTimer::NewL(iAudioPlayer,
-                iVideoPlayer);
-        iMarkerPositionTimer->SetContext(iAdaptContext);
-        }
-    if (!iPlayItfPositionUpdateTimer)
-        {
-        iPlayItfPositionUpdateTimer = CPositionUpdateTimer::NewL(
-                iAudioPlayer, iVideoPlayer);
-        iPlayItfPositionUpdateTimer->SetContext(iAdaptContext);
-        }
-    iMarkerPositionTimer->Stop();
-    iPlayItfPositionUpdateTimer->Stop();
-    }
-
-TInt CMMFBackendEngine::SetFileName(char* uri, XAuint32 format,
-        TFuncInUse func)
-    {
-    TInt err(KErrNone);
-    _LIT8(KFileSlash,"file:///");
-    TInt fileslashlen = KFileSlash().Length();
-    if (func == ERecord)
-        {
-        if (iRecordState == ERecorderNotReady)
-            {
-            iFileFormat = format;
-            iAPIBeingUsed = DetermineAPIToUse(uri, ERecord);
-            err = XA_RESULT_INTERNAL_ERROR;
-            if (iAPIBeingUsed == EAudioRecorderUtility)
-                {
-                /* Initialize URI as needed by MMF utilities */
-                err = InitializeURIForMMFUtil(uri);
-                RET_IF_ERR(err, XA_RESULT_INTERNAL_ERROR);
-                /* Initalize Recorder related objects */
-                TRAP(err, InitAudioRecorderUtilityL());
-                RET_IF_ERR(err, XA_RESULT_INTERNAL_ERROR);
-
-                TRAP(err, iAudioRecorder->OpenFileL(iUriPtr));
-                RET_IF_ERR(err, XA_RESULT_INTERNAL_ERROR);
-                /* Wait until we receive moscostatechanged callback */
-                if (iActiveSchedulerWait && !iActiveSchedulerWait->IsStarted())
-                    {
-                    iActiveSchedulerWait->Start();
-                    }
-                RET_IF_ERR(iErrorCode, XA_RESULT_INTERNAL_ERROR);
-                }
-            }
-        }
-    else
-        {
-        /* The second one is needed for dynamic source interface */
-        if ((iMediaPlayerState == XA_PLAYSTATE_PLAYERUNINITIALIZED)
-                || (iMediaPlayerState == XA_PLAYSTATE_STOPPED))
-            {
-            iFileFormat = format;
-            iAPIBeingUsed = DetermineAPIToUse(uri, EPlay);
-            err = XA_RESULT_INTERNAL_ERROR;
-            if (iAPIBeingUsed == EAudioPlayerUtility)
-                {
-                /* Initialize URI as needed by MMF utilities */
-                err = InitializeURIForMMFUtil(uri);
-                RET_IF_ERR(err, XA_RESULT_INTERNAL_ERROR);
-                /* Initalize Player related objects */
-                TRAP(err, InitAudioPlayerUtilityL());
-                RET_IF_ERR(err, XA_RESULT_INTERNAL_ERROR);
-
-                TAG_TIME_PROFILING_BEGIN;
-                TRAP(err, iAudioPlayer->OpenFileL(iUriPtr));
-                RET_IF_ERR(err, XA_RESULT_INTERNAL_ERROR); 
-                TAG_TIME_PROFILING_END; 
-                PRINT_TO_CONSOLE_TIME_DIFF;
-
-                /* Wait until we receive mapc init complete */
-                PRINT_TO_CONSOLE_HOME_TIME;
-                if (iActiveSchedulerWait && !iActiveSchedulerWait->IsStarted())
-                    {
-                    iActiveSchedulerWait->Start();
-                    }
-                RET_IF_ERR(iErrorCode, XA_RESULT_INTERNAL_ERROR);
-                }
-            else if (iAPIBeingUsed == EVideoPlayerUtility)
-                {
-                /* Initialize URI as needed by MMF utilities */
-                err = InitializeURIForMMFUtil(uri);
-                RET_IF_ERR(err, XA_RESULT_INTERNAL_ERROR);
-                /* Initalize Player related objects */
-                TRAP(err, InitVideoPlayerUtilityL());
-                RET_IF_ERR(err, XA_RESULT_INTERNAL_ERROR);
-
-                if (iUriType == ELocal)
-                    {
-                    /* Open file */
-                    TAG_TIME_PROFILING_BEGIN;
-                    TRAP(err, iVideoPlayer->OpenFileL(iUriPtr));
-                    RET_IF_ERR(err, XA_RESULT_INTERNAL_ERROR); 
-                    TAG_TIME_PROFILING_END; 
-                    PRINT_TO_CONSOLE_TIME_DIFF;
-                    }
-                else
-                    {
-                    /* Open URL */
-                    TAG_TIME_PROFILING_BEGIN;
-                    TRAP(err, iVideoPlayer->OpenUrlL(iUriPtr));
-                    RET_IF_ERR(err, XA_RESULT_INTERNAL_ERROR); 
-                    TAG_TIME_PROFILING_END; 
-                    PRINT_TO_CONSOLE_TIME_DIFF;
-                    }
-                /* Wait until we receive  MvpuoOpenComplete */
-                PRINT_TO_CONSOLE_HOME_TIME;
-                if (iActiveSchedulerWait && !iActiveSchedulerWait->IsStarted())
-                    {
-                    iActiveSchedulerWait->Start();
-                    }
-                RET_IF_ERR(iErrorCode, XA_RESULT_INTERNAL_ERROR);
-
-                /* Prepare utility */
-                TAG_TIME_PROFILING_BEGIN_NO_VAR_DEF;
-                iVideoPlayer->Prepare();
-                TAG_TIME_PROFILING_END_NO_VAR_DEF; 
-                PRINT_TO_CONSOLE_TIME_DIFF;
-
-                /* Wait until we receive  MvpuoPrepareComplete */
-                PRINT_TO_CONSOLE_HOME_TIME_NO_VAR_DEF;
-                if (iActiveSchedulerWait && !iActiveSchedulerWait->IsStarted())
-                    {
-                    iActiveSchedulerWait->Start();
-                    }
-                RET_IF_ERR(iErrorCode, XA_RESULT_INTERNAL_ERROR);
-                }
-            }
-        }
-    if (err != KErrNone)
-        {
-        err = XA_RESULT_INTERNAL_ERROR;
-        }
-    return err;
-    }
-
-TInt CMMFBackendEngine::DetermineAPIToUse(char* uri, TFuncInUse aFunc)
-    {
-    char* dotPtr = NULL;
-    char ext[MAX_EXTENSION_SIZE] =
-        {
-        0
-        };
-    int extLen;
-
-    int colpos;
-    char urischeme[MAX_EXTENSION_SIZE] =
-        {
-        0
-        };
-    int urischemeLen;
-
-    dotPtr = strrchr(uri, (int) '.');
-    if (!dotPtr)
-        {
-        return KErrNotFound;
-        }
-
-    strncpy(ext, dotPtr, strlen(dotPtr));
-    /*Null terminate the string*/
-    ext[strlen(dotPtr)] = '\0';
-    extLen = sizeof(ext);
-    for (unsigned int i = 0; i < extLen; i++)
-        {
-        ext[i] = tolower(ext[i]);
-        }
-
-    colpos = strcspn(uri, ":");
-
-    strncpy(urischeme, uri, colpos + 1);
-    /*Null terminate the string*/
-    urischeme[colpos + 1] = '\0';
-    urischemeLen = sizeof(urischeme);
-    for (unsigned int i = 0; i < urischemeLen; i++)
-        {
-        urischeme[i] = tolower(urischeme[i]);
-        }
-
-    if (aFunc == ERecord)
-        {
-        return EAudioRecorderUtility;
-        }
-    else
-        {
-        if (!strcmp(urischeme, "file:"))
-            {
-            if (!strcmp(ext, ".mp3") || !strcmp(ext, ".amr")
-                    || !strcmp(ext, ".aac") || !strcmp(ext, ".mid")
-                    || !strcmp(ext, ".wav") || !strcmp(ext, ".awb"))
-                {
-                return EAudioPlayerUtility;
-                }
-            else
-                {
-                return EVideoPlayerUtility;
-                }
-            }
-        else
-            {
-            return EVideoPlayerUtility;
-            }
-        }
-    }
-
-//From MVidePlayerUtilityObserver
-void CMMFBackendEngine::MvpuoOpenComplete(TInt aError)
-    {
-    PRINT_TO_CONSOLE_HOME_TIME;
-
-    iErrorCode = aError;
-    if (iErrorCode == KErrNone)
-        {
-        iMMFPlayerState = EPlayerOpened;
-        }
-    if (iActiveSchedulerWait && iActiveSchedulerWait->IsStarted())
-        {
-        iActiveSchedulerWait->AsyncStop();
-        }
-    }
-
-void CMMFBackendEngine::MvpuoPrepareComplete(TInt aError)
-    {
-    PRINT_TO_CONSOLE_HOME_TIME;
-
-    TAutoScaleType autoScale = EAutoScaleBestFit;
-    iErrorCode = aError;
-    iMediaPlayerState = XA_PLAYSTATE_PLAYERUNINITIALIZED;
-    iMediaDuration = 0;
-    iMarkerPositionTimer->ResetPlayer();
-    iPlayItfPositionUpdateTimer->ResetPlayer();
-    if (iErrorCode == KErrNone)
-        {
-        iMMFPlayerState = EPlayerPrepared;
-        TAG_TIME_PROFILING_BEGIN;
-        TRAP(iErrorCode, iMediaDuration = iVideoPlayer->DurationL()); 
-        TAG_TIME_PROFILING_END; 
-        PRINT_TO_CONSOLE_TIME_DIFF;
-        if (iErrorCode == KErrNone)
-            {
-            iPlaybackHead = 0;
-            iMediaPlayerState = XA_PLAYSTATE_STOPPED;
-            iMarkerPositionTimer->UseVideoPlayer();
-            iPlayItfPositionUpdateTimer->UseVideoPlayer();
-            if (m_pWs && m_pScr && m_pWindow)
-                {
-                TRect videoExtent = TRect(m_pWindow->Size());
-                TRect clipRect = TRect(m_pWindow->Size());
-                TAG_TIME_PROFILING_BEGIN;
-                TRAP_IGNORE(iVideoPlayer->AddDisplayWindowL(*m_pWs, *m_pScr, *m_pWindow, videoExtent, clipRect));
-                TRAP_IGNORE(iVideoPlayer->SetAutoScaleL(*m_pWindow, autoScale)); 
-                TAG_TIME_PROFILING_END; 
-                PRINT_TO_CONSOLE_TIME_DIFF;
-                }
-            }
-        }
-    if (iActiveSchedulerWait && iActiveSchedulerWait->IsStarted())
-        {
-        iActiveSchedulerWait->AsyncStop();
-        }
-    }
-
-void CMMFBackendEngine::MvpuoFrameReady(CFbsBitmap& /*aFrame*/, TInt /*aError*/)
-    {
-
-    }
-void CMMFBackendEngine::MvpuoPlayComplete(TInt aError)
-    {
-    iErrorCode = aError;
-    if (iErrorCode == KErrNone)
-        {
-        iPlaybackHead = iMediaDuration;
-        /* Per OpenMAX AL Spec, when playback is completed, media player stays in
-         * paused state with playhead at the end of the media clip */
-        iMediaPlayerState = XA_PLAYSTATE_PAUSED;
-        DoPostEvent(XA_PLAYEVENT_HEADATEND);
-        }
-    else
-        {
-        iPlaybackHead = 0;
-        iMediaPlayerState = XA_PLAYSTATE_STOPPED;
-        XAAdaptEvent event =
-            {
-            XA_PLAYITFEVENTS, XA_OBJECT_EVENT_RESOURCES_LOST, 0, NULL
-            };
-        XAAdaptationBase_SendAdaptEvents(
-                (XAAdaptationBaseCtx*) iAdaptContext, &event);
-        }
-    iMMFPlayerState = EPlayerPrepared;
-    iMarkerPositionTimer->Stop();
-    iPlayItfPositionUpdateTimer->Stop();
-    }
-
-void CMMFBackendEngine::MvpuoEvent(class TMMFEvent const & event)
-    {
-    //RDebug::Print(_L("CMMFBackendEngine::MvpuoEvent (0x%x %d)"), event.iEventType, event.iErrorCode);
-
-    if (event.iEventType == KMMFEventCategoryVideoPlayerGeneralError
-            && event.iErrorCode == KErrHardwareNotAvailable)
-        {
-        //RDebug::Print(_L("CMMFBackendEngine::MvpuoEvent: Hardware Not Available"));
-        }
-
-    else if (event.iEventType == KMMFEventCategoryVideoPlayerGeneralError
-            && event.iErrorCode == KErrMMPartialPlayback)
-        {
-        //RDebug::Print(_L("CMMFBackendEngine::MvpuoEvent: Partial playback"));
-        }
-    if (event.iEventType == KMMFEventCategoryVideoPlayerGeneralError
-            && event.iErrorCode == -12014)
-        {
-        //RDebug::Print(_L("CMMFBackendEngine::MvpuoEvent: Audio Device taken"));
-        PausePlayback();
-        XAAdaptEvent alEvent =
-            {
-            XA_PLAYITFEVENTS, XA_OBJECT_EVENT_RESOURCES_LOST, 0, NULL
-            };
-        XAAdaptationBase_SendAdaptEvents(
-                (XAAdaptationBaseCtx*) iAdaptContext, &alEvent);
-        }
-    else if (event.iEventType == KMMFRefreshMetaData)
-        {
-        //RDebug::Print(_L("CMMFBackendEngine::MvpuoEvent: EventType == KMMFRefreshMetaData"));
-        }
-    else
-        {
-        //RDebug::Print(_L("CMMFBackendEngine::MvpuoEvent: Unhandled event"));
-        }
-
-    }
-
-// From MRebufferCallback
-void CMMFBackendEngine::MvloLoadingStarted()
-    {
-    }
-
-void CMMFBackendEngine::MvloLoadingComplete()
-    {
-    //file playing
-    }
-
-//MMdaAudioPlayerCallback
-void CMMFBackendEngine::MapcInitComplete(TInt aError,
-        const TTimeIntervalMicroSeconds& aDuration)
-    {
-    PRINT_TO_CONSOLE_HOME_TIME;
-
-    iErrorCode = aError;
-    iMediaPlayerState = XA_PLAYSTATE_PLAYERUNINITIALIZED;
-    iMMFPlayerState = EPlayerClosed;
-    iMediaDuration = 0;
-    iMarkerPositionTimer->ResetPlayer();
-    iPlayItfPositionUpdateTimer->ResetPlayer();
-    if (iErrorCode == KErrNone)
-        {
-        iMediaDuration = aDuration;
-        iPlaybackHead = 0;
-        iMediaPlayerState = XA_PLAYSTATE_STOPPED;
-        iMMFPlayerState = EPlayerOpened;
-        iMarkerPositionTimer->UseAudioPlayer();
-        iPlayItfPositionUpdateTimer->UseAudioPlayer();
-        }
-    if (iActiveSchedulerWait && iActiveSchedulerWait->IsStarted())
-        {
-        iActiveSchedulerWait->AsyncStop();
-        }
-    }
-
-void CMMFBackendEngine::MapcPlayComplete(TInt aError)
-    {
-    iErrorCode = aError;
-    if (iErrorCode == KErrNone)
-        {
-        /* Now we should have better value. Start using that */
-        iAudioPlayer->Duration(iMediaDuration);
-        iPlaybackHead = iMediaDuration;
-        /* Per OpenMAX AL Spec, when playback is completed, media player stays in
-         * paused state with playhead at the end of the media clip */
-        iMediaPlayerState = XA_PLAYSTATE_PAUSED;
-        DoPostEvent(XA_PLAYEVENT_HEADATEND);
-        iMMFPlayerState = EPlayerOpened;
-        }
-    else
-        {
-        iAudioPlayer->GetPosition(iPlaybackHead);
-        iMediaPlayerState = XA_PLAYSTATE_PAUSED;
-        iMMFPlayerState = EPlayerPaused;
-        XAAdaptEvent event =
-            {
-            XA_PLAYITFEVENTS, XA_OBJECT_EVENT_RESOURCES_LOST, 0, NULL
-            };
-        XAAdaptationBase_SendAdaptEvents(
-                (XAAdaptationBaseCtx*) iAdaptContext, &event);
-        }
-    iMarkerPositionTimer->Stop();
-    iPlayItfPositionUpdateTimer->Stop();
-    }
-
-// from MMdaObjectStateChangeObserver
-void CMMFBackendEngine::MoscoStateChangeEvent(CBase* /*aObject*/,
-        TInt aPreviousState, TInt aCurrentState, TInt aErrorCode)
-    {
-    TInt err(KErrNone);
-    iPreviousRecordState = aPreviousState;
-    iCurrentRecordState = aCurrentState;
-    iErrorCode = aErrorCode;
-    //RDebug::Print(_L("CMMFBackendEngine::MoscoStateChangeEvent 1 Error[%d]"),aErrorCode);
-    if (iCurrentRecordState == CMdaAudioClipUtility::EOpen) //EOpen
-        {
-        //outputfile is open and ready for recording
-        iRecordState = CMMFBackendEngine::ERecorderOpen;
-        if (iErrorCode == KErrNone)
-            {
-            if (iPreviousRecordState == CMdaAudioClipUtility::ENotReady)
-                {
-                //RDebug::Print(_L("CMMFBackendEngine::MoscoStateChangeEvent 2"));
-                TRAP(err,iAudioInputRecord = CAudioInput::NewL( *iAudioRecorder ));
-                if (err == KErrNone)
-                    {
-                    RArray<CAudioInput::TAudioInputPreference> inputArray;
-                    inputArray.Append(CAudioInput::EDefaultMic);
-                    // Set Audio Input
-                    TRAP(err, iAudioInputRecord->SetAudioInputL( inputArray.Array( ) ));
-                    inputArray.Close();
-                    }
-                TMMFMessageDestination destination(
-                        KUidMetaDataWriteCustomCommand);
-                TMMFMessageDestinationPckg pckg = TMMFMessageDestinationPckg(
-                        destination);
-                TInt ret = iAudioRecorder->RecordControllerCustomCommandSync(
-                        pckg, 0, KNullDesC8, KNullDesC8);
-                //RDebug::Print(_L("CMMFBackendEngine::MoscoStateChangeEvent 3 [%d]"),ret);
-                if (ret != KErrNone && iFileFormat == XA_CONTAINERTYPE_MP4)
-                    {
-                    iPauseSupportMP4 = FALSE;
-                    }
-                if (iActiveSchedulerWait && iActiveSchedulerWait->IsStarted())
-                    {
-                    iActiveSchedulerWait->AsyncStop();
-                    }
-                }
-            }
-        else
-            {
-            XAAdaptEvent event =
-                {
-                XA_RECORDITFEVENTS, XA_OBJECT_EVENT_RESOURCES_LOST, 0, NULL
-                };
-            XAAdaptationBase_SendAdaptEvents(
-                    (XAAdaptationBaseCtx*) iAdaptContext, &event);
-            }
-        }
-    else if (iCurrentRecordState == CMdaAudioClipUtility::ERecording) //ERecording
-        {
-        iRecordState = CMMFBackendEngine::ERecorderRecording;
-        iPositionUpdateTimer->Start(iTimerDelay);
-        XAAdaptEvent event =
-            {
-            XA_RECORDITFEVENTS, XA_RECORDEVENT_HEADMOVING, 0, NULL
-            };
-        XAAdaptationBase_SendAdaptEvents(
-                (XAAdaptationBaseCtx*) iAdaptContext, &event);
-        }
-    else //ENotReady
-        {
-        //outputfile is not open
-        iRecordState = CMMFBackendEngine::ERecorderNotReady;
-        }
-    }
-
-TInt CMMFBackendEngine::SetRecorderState(TRecorderState state,
-        XAboolean stopCalled)
-    {
-    TInt err(KErrNone);
-
-    if (iAPIBeingUsed != EAudioRecorderUtility)
-        {
-        return XA_RESULT_INTERNAL_ERROR;
-        }
-
-    switch (state)
-        {
-        case ERecorderNotReady:
-            iAudioRecorder->Close();
-            iRecordState = ERecorderNotReady;
-            break;
-        case ERecorderOpen:
-            if (iFileFormat == XA_CONTAINERTYPE_MP4 && !iPauseSupportMP4
-                    && !stopCalled)
-                {
-                err = KErrNotSupported;
-                return err;
-                }
-            iPositionUpdateTimer->Stop();
-            iAudioRecorder->Stop();
-            iRecordState = ERecorderOpen;
-            break;
-        case ERecorderRecording:
-            TRAP(err, iAudioRecorder->RecordL())
-            ;
-            break;
-        }
-    return err;
-    }
-
-void CMMFBackendEngine::Close()
-    {
-    if (iMarkerPositionTimer)
-        {
-        iMarkerPositionTimer->Stop();
-        }
-    if (iPlayItfPositionUpdateTimer)
-        {
-        iPlayItfPositionUpdateTimer->Stop();
-        }
-
-    if (iBaseVideoPlayer && iVideoPlayer)
-        {
-        switch (iMMFPlayerState)
-            {
-            case EPlayerPlaying:
-            case EPlayerPaused:
-            case EPlayerPrepared:
-                iVideoPlayer->Stop();
-            case EPlayerOpened:
-                if (m_pWs && m_pScr && m_pWindow)
-                    {
-                    iVideoPlayer->RemoveDisplayWindow(*m_pWindow);
-                    }
-                iVideoPlayer->Close();
-            case EPlayerClosed:
-            default:
-                break;
-            };
-        }
-
-    // deleting the AudioInput object
-    if (iAudioInputRecord)
-        {
-        delete iAudioInputRecord;
-        iAudioInputRecord = NULL;
-        }
-
-    if (iBaseAudioPlayer && iAudioPlayer)
-        {
-        iAudioPlayer->Close();
-        }
-
-    if (iBaseAudioRecorder)
-        {
-        iAudioRecorder->Close();
-        }
-
-    if (iPositionUpdateTimer)
-        {
-        iPositionUpdateTimer->Stop();
-        }
-
-    if (iActiveSchedulerWait && iActiveSchedulerWait->IsStarted())
-        {
-        iActiveSchedulerWait->AsyncStop();
-        }
-    }
-
-void CMMFBackendEngine::Destroy()
-    {
-    delete iPositionUpdateTimer;
-    iPositionUpdateTimer = NULL;
-    delete iUri;
-    iUri = NULL;
-    delete iMarkerPositionTimer;
-    iMarkerPositionTimer = NULL;
-    delete iPlayItfPositionUpdateTimer;
-    iPlayItfPositionUpdateTimer = NULL;
-    delete iBaseVideoPlayer;
-    iBaseVideoPlayer = NULL;
-    iVideoPlayer = NULL;
-    delete iBaseAudioPlayer;
-    iBaseAudioPlayer = NULL;
-    iAudioPlayer = NULL;
-    delete iBaseAudioRecorder;
-    iBaseAudioRecorder = NULL;
-    iAudioRecorder = NULL;
-    delete iActiveSchedulerWait;
-    iActiveSchedulerWait = NULL;
-    delete m_pScr;
-    m_pScr = NULL;
-    }
-
-TInt CMMFBackendEngine::GetRecordPosition(XAuint64* position)
-    {
-    TInt err(KErrNone);
-    *position = iAudioRecorder->Position().Int64();
-    return err;
-    }
-
-TInt CMMFBackendEngine::SetPositionUpdatePerioed(XAmillisecond period)
-    {
-    TInt err(KErrNone);
-    iTimerDelay = period;
-    return err;
-    }
-
-TInt CMMFBackendEngine::SetAdaptContext(void* adaptcontext)
-    {
-    TInt err(KErrNone);
-    iAdaptContext = adaptcontext;
-    TRAP(err, iPositionUpdateTimer = new (ELeave) LocalTimer(this, iAdaptContext));
-    if (!err)
-        {
-        iPositionUpdateTimer->PostInit();
-        }
-    return err;
-    }
-
-TInt CMMFBackendEngine::GetCodecId(XAuint32* codecid)
-    {
-    TInt err(KErrNone);
-
-    if (iAPIBeingUsed == EAudioRecorderUtility)
-        {
-        if (iRecordState != CMMFBackendEngine::ERecorderNotReady)
-            {
-            TFourCC dest;
-            TRAP(err, dest = iAudioRecorder->DestinationDataTypeL());
-            if (err == KErrNone)
-                {
-                *codecid = dest.FourCC();
-                }
-            }
-        }
-    else if (iAPIBeingUsed == EAudioPlayerUtility)
-        {
-        if (iMediaPlayerState != XA_PLAYSTATE_PLAYERUNINITIALIZED)
-            {
-            TMMFMessageDestinationPckg pckg(KUidInterfaceMMFAudioController);
-            TPckgBuf<TMMFAudioConfig> configPackage;
-            TInt err = iAudioPlayer->CustomCommandSync(pckg,
-                    EMMFAudioControllerGetSourceDataType, KNullDesC8,
-                    KNullDesC8, configPackage);
-            if (err == KErrNone)
-                {
-                *codecid = configPackage().iSourceDataTypeCode.FourCC();
-                }
-            }
-        }
-    return err;
-    }
-
-TInt CMMFBackendEngine::GetBitRate(XAuint32* bitrate)
-    {
-    TInt err(KErrNone);
-    TUint br(0);
-    if (iAPIBeingUsed == EAudioRecorderUtility)
-        {
-        if (iRecordState != CMMFBackendEngine::ERecorderNotReady)
-            {
-            TRAP(err, br = iAudioRecorder->DestinationBitRateL());
-            if (err == KErrNone)
-                {
-                *bitrate = br;
-                }
-            }
-        }
-    else if (iAPIBeingUsed == EAudioPlayerUtility)
-        {
-        if (iMediaPlayerState != XA_PLAYSTATE_PLAYERUNINITIALIZED)
-            {
-            TInt err = iAudioPlayer->GetBitRate(br);
-            *bitrate = br;
-            }
-        }
-    return err;
-    }
-
-TInt CMMFBackendEngine::GetSampleRate(XAmilliHertz* samplerate)
-    {
-    TInt err(KErrNone);
-    TUint sr(0);
-    if (iAPIBeingUsed == EAudioRecorderUtility)
-        {
-        if (iRecordState != CMMFBackendEngine::ERecorderNotReady)
-            {
-            TRAP(err, sr = iAudioRecorder->DestinationSampleRateL());
-            if (err == KErrNone)
-                {
-                *samplerate = sr * 1000;
-                }
-            }
-        }
-    else if (iAPIBeingUsed == EAudioPlayerUtility)
-        {
-        if (iMediaPlayerState != XA_PLAYSTATE_PLAYERUNINITIALIZED)
-            {
-            TMMFMessageDestinationPckg pckg(KUidInterfaceMMFAudioController);
-            TPckgBuf<TMMFAudioConfig> configPackage;
-            TInt err = iAudioPlayer->CustomCommandSync(pckg,
-                    EMMFAudioControllerGetSourceSampleRate, KNullDesC8,
-                    KNullDesC8, configPackage);
-            if (err == KErrNone)
-                {
-                *samplerate = configPackage().iSampleRate * 1000;
-                }
-            }
-        }
-    return err;
-    }
-
-TInt CMMFBackendEngine::GetChannels(XAuint32* channels)
-    {
-    TInt err(KErrNone);
-    TUint ch(0);
-    if (iAPIBeingUsed == EAudioRecorderUtility)
-        {
-        if (iRecordState != CMMFBackendEngine::ERecorderNotReady)
-            {
-            TRAP(err,ch = iAudioRecorder->DestinationNumberOfChannelsL());
-            if (err == KErrNone)
-                {
-                *channels = ch;
-                }
-            }
-        }
-    else if (iAPIBeingUsed == EAudioPlayerUtility)
-        {
-        if (iMediaPlayerState != XA_PLAYSTATE_PLAYERUNINITIALIZED)
-            {
-            TMMFMessageDestinationPckg pckg(KUidInterfaceMMFAudioController);
-            TPckgBuf<TMMFAudioConfig> configPackage;
-            TInt err = iAudioPlayer->CustomCommandSync(pckg,
-                    EMMFAudioControllerGetSourceNumChannels, KNullDesC8,
-                    KNullDesC8, configPackage);
-            if (err == KErrNone)
-                {
-                *channels = configPackage().iChannels;
-                }
-            }
-        }
-    return err;
-    }
-
-TInt CMMFBackendEngine::SetDestinationBitRate(XAuint32* bitrate)
-    {
-    TInt err(KErrNone);
-    if (iRecordState == CMMFBackendEngine::ERecorderOpen)
-        {
-        TRAP(err, iAudioRecorder->SetDestinationBitRateL(*bitrate));
-        if (err != KErrNone)
-            {
-            return XA_RESULT_PARAMETER_INVALID;
-            }
-        }
-    return err;
-    }
-
-TInt CMMFBackendEngine::SetDestinationSampleRate(XAmilliHertz* samplerate)
-    {
-    TInt err(KErrNone);
-    if (iRecordState == CMMFBackendEngine::ERecorderOpen)
-        {
-        TRAP(err, iAudioRecorder->SetDestinationSampleRateL(*samplerate/1000));
-        if (err != KErrNone)
-            {
-            return XA_RESULT_PARAMETER_INVALID;
-            }
-        }
-    return err;
-    }
-
-TInt CMMFBackendEngine::SetDestinationChannels(XAuint32* channels)
-    {
-    TInt err(KErrNone);
-    if (iRecordState == CMMFBackendEngine::ERecorderOpen)
-        {
-        TRAP(err,iAudioRecorder->SetDestinationNumberOfChannelsL(*channels));
-        if (err != KErrNone)
-            {
-            return XA_RESULT_PARAMETER_INVALID;
-            }
-        }
-    return err;
-    }
-
-/*
- XAresult CMMFBackendEngine::SetWindowHandle(void* display_info)
- {
- XADataLocator_NativeDisplay* nativeDisplay;
- XADataSink* videoSink = (XADataSink*)display_info;
-
- nativeDisplay = (XADataLocator_NativeDisplay*) (videoSink->pLocator);
-
- m_pWindow = ((RWindow*)(nativeDisplay->hWindow));
- m_pWs =     ((RWsSession*)(nativeDisplay->hDisplay));
-
- m_bWindowReferencePassed = TRUE;
- return XA_RESULT_SUCCESS;
- }
-
- */
-XAresult CMMFBackendEngine::CreateAndConfigureWindowL()
-    {
-#ifdef USE_LOCAL_WINDOW_RESOURCES
-    // create window for attaching the surface as its background
-    //RWsSession ws;
-    //TInt err2(KErrNone);
-    TInt err2 = m_ws.Connect();
-    m_pScr = new(ELeave) CWsScreenDevice(m_ws);
-    err2 = m_pScr->Construct();
-    CWindowGc* gc = NULL;
-    err2 = m_pScr->CreateContext(gc);
-    RWindowGroup grp(m_ws);
-    err2 = grp.Construct(0xf00f00);
-    const TSize KWinSize(320, 240);
-    m_pWindow = new (ELeave) RWindow(m_ws);
-    err2 = m_pWindow->Construct(grp, 0xfeefee);
-    m_pWindow->SetExtent(TPoint(), KWinSize);
-    m_pWindow->SetBackgroundColor(TRgb(255,0,0,128));
-    //win.SetBackgroundColor(TRgb(0,0,0,0));
-    m_pWindow->Activate();
-    m_pWindow->Invalidate();
-    m_pWindow->BeginRedraw();
-    gc->Activate(*m_pWindow);
-    m_pWindow->EndRedraw();
-    m_ws.Flush();
-
-    //Create MediaClientUitlity for NGA Surfaces
-    TInt displayId = m_pScr->GetScreenNumber();
-
-    // Add the display window
-    m_cropRegion = TRect(m_pWindow->Size());
-    m_clipRect = TRect(m_pWindow->Size());
-    m_videoExtent = TRect(m_pWindow->Size());
-    m_rotation = EVideoRotationNone;
-#endif /* USE_LOCAL_WINDOW_RESOURCES */
-
-    return XA_RESULT_SUCCESS;
-    }
-
-XAresult CMMFBackendEngine::SetNativeDisplayInformation(void* display_info)
-    {
-    XAresult retVal(XA_RESULT_SUCCESS);
-    //display_info is of type XADataSink
-    //display_info.pLocator is of type XADataLocator_NativeDisplay
-    XADataLocator_NativeDisplay* nativeDisplay;
-    XADataSink* videoSink = (XADataSink*) display_info;
-
-    if (videoSink)
-        {
-        nativeDisplay = (XADataLocator_NativeDisplay*) (videoSink->pLocator);
-        m_pWindow = ((RWindow*) (nativeDisplay->hWindow));
-        m_pWs = ((RWsSession*) (nativeDisplay->hDisplay));
-        /*
-         m_cropRegion = TRect(m_pWindow->Size());
-         m_videoExtent = TRect(m_pWindow->Size());
-         m_cropRect = TRect(m_pWindow->Size());
-         m_clipRect = TRect(m_pWindow->Size());
-         m_cropRegion = TRect(m_pWindow->Size());
-         */
-        if (m_pWs)
-            {
-            delete m_pScr;
-            m_pScr = NULL;
-            TRAPD(err, m_pScr = new CWsScreenDevice(*m_pWs));
-            RET_IF_ERR(err, XA_RESULT_MEMORY_FAILURE);
-            m_pScr->Construct();
-            }
-        }
-    return retVal;
-    }
-
-XAresult CMMFBackendEngine::ResumePlayback()
-    {
-    XAresult retVal(XA_RESULT_SUCCESS);
-    TBool postHeadMovingEvent(EFalse);
-    switch (iMediaPlayerState)
-        {
-        case XA_PLAYSTATE_STOPPED:
-        case XA_PLAYSTATE_PAUSED:
-            /* If we are already at the end of clip, do nothing
-             * check ::MapcPlayComplete for documentation */
-            if ((iPlaybackHead < iMediaDuration) && ((iAPIBeingUsed
-                    == EAudioPlayerUtility) || (iAPIBeingUsed
-                    == EVideoPlayerUtility)))
-                {
-                if (iAPIBeingUsed == EAudioPlayerUtility)
-                    {
-                    TAG_TIME_PROFILING_BEGIN;
-                    iAudioPlayer->Play();
-                    TAG_TIME_PROFILING_END; PRINT_TO_CONSOLE_TIME_DIFF;
-                    }
-                else if (iAPIBeingUsed == EVideoPlayerUtility)
-                    {
-                    TAG_TIME_PROFILING_BEGIN;
-                    //iVideoPlayer->Play( iPlaybackHead, iMediaDuration);
-                    iVideoPlayer->Play();
-                    TAG_TIME_PROFILING_END; PRINT_TO_CONSOLE_TIME_DIFF;
-                    }
-                postHeadMovingEvent = ETrue;
-                iMediaPlayerState = XA_PLAYSTATE_PLAYING;
-                iMMFPlayerState = EPlayerPlaying;
-                iMarkerPositionTimer->Start();
-                iPlayItfPositionUpdateTimer->Start();
-                }
-            break;
-        case XA_PLAYSTATE_PLAYING:
-            break;
-        case XA_PLAYSTATE_PLAYERUNINITIALIZED:
-        default:
-            retVal = XA_RESULT_INTERNAL_ERROR;
-            break;
-        }
-
-    if (postHeadMovingEvent)
-        {
-        DoPostEvent(XA_PLAYEVENT_HEADMOVING);
-        }
-    return retVal;
-    }
-
-XAresult CMMFBackendEngine::PausePlayback()
-    {
-    XAresult retVal(XA_RESULT_SUCCESS);
-    switch (iMediaPlayerState)
-        {
-        case XA_PLAYSTATE_PLAYING:
-        case XA_PLAYSTATE_STOPPED:
-            if ((iAPIBeingUsed == EAudioPlayerUtility) || (iAPIBeingUsed
-                    == EVideoPlayerUtility))
-                {
-                TInt pauseOpRes(KErrNone);
-                if (iAPIBeingUsed == EAudioPlayerUtility)
-                    {
-                    TAG_TIME_PROFILING_BEGIN;
-                    pauseOpRes = iAudioPlayer->Pause();
-                    TAG_TIME_PROFILING_END; PRINT_TO_CONSOLE_TIME_DIFF;
-                    }
-                else if (iAPIBeingUsed == EVideoPlayerUtility)
-                    {
-                    TAG_TIME_PROFILING_BEGIN;
-                    TRAP(pauseOpRes, iVideoPlayer->PauseL());
-                    if (pauseOpRes == KErrNone)
-                        {
-                        TRAPD(err, iPlaybackHead = iVideoPlayer->PositionL());
-                        if (err != KErrNone)
-                            {
-                            iPlaybackHead = 0;
-                            }
-                        } TAG_TIME_PROFILING_END; PRINT_TO_CONSOLE_TIME_DIFF;
-                    }
-                if (pauseOpRes == KErrNone)
-                    {
-                    iMediaPlayerState = XA_PLAYSTATE_PAUSED;
-                    iMMFPlayerState = EPlayerPaused;
-                    iMarkerPositionTimer->Stop();
-                    iPlayItfPositionUpdateTimer->Stop();
-                    }
-                }
-            break;
-        case XA_PLAYSTATE_PAUSED:
-            break;
-        case XA_PLAYSTATE_PLAYERUNINITIALIZED:
-        default:
-            retVal = XA_RESULT_INTERNAL_ERROR;
-            break;
-        }
-    return retVal;
-    }
-
-XAresult CMMFBackendEngine::StopPlayback()
-    {
-    XAresult retVal(XA_RESULT_SUCCESS);
-    switch (iMediaPlayerState)
-        {
-        case XA_PLAYSTATE_PAUSED:
-        case XA_PLAYSTATE_PLAYING:
-            if ((iAPIBeingUsed == EAudioPlayerUtility) || (iAPIBeingUsed
-                    == EVideoPlayerUtility))
-                {
-                if (iAPIBeingUsed == EAudioPlayerUtility)
-                    {
-                    TAG_TIME_PROFILING_BEGIN;
-                    iAudioPlayer->Stop();
-                    TAG_TIME_PROFILING_END; PRINT_TO_CONSOLE_TIME_DIFF;
-
-                    iMMFPlayerState = EPlayerOpened;
-                    }
-                else if (iAPIBeingUsed == EVideoPlayerUtility)
-                    {
-                    TAG_TIME_PROFILING_BEGIN;
-                    iVideoPlayer->Stop();
-                    TAG_TIME_PROFILING_END; PRINT_TO_CONSOLE_TIME_DIFF;
-
-                    iMMFPlayerState = EPlayerPrepared;
-                    }
-                iMediaPlayerState = XA_PLAYSTATE_STOPPED;
-                iPlaybackHead = 0;
-                iMarkerPositionTimer->Stop();
-                iPlayItfPositionUpdateTimer->Stop();
-                }
-            break;
-        case XA_PLAYSTATE_STOPPED:
-            break;
-        case XA_PLAYSTATE_PLAYERUNINITIALIZED:
-        default:
-            retVal = XA_RESULT_INTERNAL_ERROR;
-            break;
-        }
-    return retVal;
-    }
-XAresult CMMFBackendEngine::GetPlayState(XAuint32 *pState)
-    {
-    XAresult retVal(XA_RESULT_INTERNAL_ERROR);
-    switch (iMediaPlayerState)
-        {
-        case XA_PLAYSTATE_STOPPED:
-        case XA_PLAYSTATE_PAUSED:
-        case XA_PLAYSTATE_PLAYING:
-            *pState = iMediaPlayerState;
-            retVal = XA_RESULT_SUCCESS;
-            break;
-        case XA_PLAYSTATE_PLAYERUNINITIALIZED:
-        default:
-            break;
-        }
-    return retVal;
-    }
-
-XAresult CMMFBackendEngine::GetDuration(XAmillisecond *pMsec)
-    {
-    XAresult retVal(XA_RESULT_INTERNAL_ERROR);
-    /* to convert from microseconds to milliseconds */
-    TInt64 divider(1000);
-    switch (iMediaPlayerState)
-        {
-        case XA_PLAYSTATE_STOPPED:
-        case XA_PLAYSTATE_PAUSED:
-        case XA_PLAYSTATE_PLAYING:
-            /* TODO Check if we query from MMF*/
-            *pMsec = iMediaDuration.Int64() / divider;
-            retVal = XA_RESULT_SUCCESS;
-            break;
-        case XA_PLAYSTATE_PLAYERUNINITIALIZED:
-        default:
-            break;
-        }
-    return retVal;
-    }
-
-XAresult CMMFBackendEngine::GetPosition(XAmillisecond *pMsec)
-    {
-    XAresult retVal(XA_RESULT_INTERNAL_ERROR);
-    TInt64 divider(1000);
-    TTimeIntervalMicroSeconds pos;
-    switch (iMediaPlayerState)
-        {
-        case XA_PLAYSTATE_STOPPED:
-        case XA_PLAYSTATE_PAUSED:
-        case XA_PLAYSTATE_PLAYING:
-            if (iAPIBeingUsed == EAudioPlayerUtility)
-                {
-                if (iAudioPlayer->GetPosition(pos) == KErrNone)
-                    {
-                    *pMsec = pos.Int64() / divider;
-                    retVal = XA_RESULT_SUCCESS;
-                    }
-                }
-            else if (iAPIBeingUsed == EVideoPlayerUtility)
-                {
-                TInt err(KErrNone);
-                TRAP(err, pos = iVideoPlayer->PositionL());
-                if (err == KErrNone)
-                    {
-                    *pMsec = pos.Int64() / divider;
-                    retVal = XA_RESULT_SUCCESS;
-                    }
-                }
-            break;
-        case XA_PLAYSTATE_PLAYERUNINITIALIZED:
-        default:
-            break;
-        }
-    return retVal;
-    }
-
-XAresult CMMFBackendEngine::SetPosition(XAmillisecond pMsec)
-    {
-    XAresult retVal(XA_RESULT_INTERNAL_ERROR);
-    TInt64 multiplier(1000);
-    TTimeIntervalMicroSeconds pos;
-    switch (iMediaPlayerState)
-        {
-        case XA_PLAYSTATE_STOPPED:
-        case XA_PLAYSTATE_PAUSED:
-        case XA_PLAYSTATE_PLAYING:
-            if (iAPIBeingUsed == EAudioPlayerUtility)
-                {
-                pos = pMsec * multiplier;
-                TAG_TIME_PROFILING_BEGIN;
-                iAudioPlayer->SetPosition(pos);
-                TAG_TIME_PROFILING_END; PRINT_TO_CONSOLE_TIME_DIFF;
-
-                retVal = XA_RESULT_SUCCESS;
-                }
-            else if (iAPIBeingUsed == EVideoPlayerUtility)
-                {
-                pos = pMsec * multiplier;
-                TAG_TIME_PROFILING_BEGIN;
-                TRAPD(err, iVideoPlayer->SetPositionL(pos)); 
-                TAG_TIME_PROFILING_END; 
-                PRINT_TO_CONSOLE_TIME_DIFF;
-                if (err == KErrNone)
-                    {
-                    retVal = XA_RESULT_SUCCESS;
-                    }
-                }
-            break;
-        case XA_PLAYSTATE_PLAYERUNINITIALIZED:
-        default:
-            break;
-        }
-    return retVal;
-    }
-
-XAresult CMMFBackendEngine::SetRepeats(XAboolean repeat)
-    {
-    XAresult retVal(XA_RESULT_INTERNAL_ERROR);
-    TInt numRepeats(0);
-    switch (iMediaPlayerState)
-        {
-        case XA_PLAYSTATE_STOPPED:
-        case XA_PLAYSTATE_PAUSED:
-        case XA_PLAYSTATE_PLAYING:
-            if (iAPIBeingUsed == EAudioPlayerUtility)
-                {
-                numRepeats = repeat ? -2 : 0;
-                iAudioPlayer->SetRepeats(numRepeats, 0);
-                retVal = XA_RESULT_SUCCESS;
-                }
-            else
-                {
-                }
-            break;
-        case XA_PLAYSTATE_PLAYERUNINITIALIZED:
-        default:
-            break;
-        }
-    return retVal;
-    }
-
-XAresult CMMFBackendEngine::SetPlayWindow(XAmillisecond start,
-        XAmillisecond end)
-    {
-    XAresult retVal(XA_RESULT_INTERNAL_ERROR);
-    TInt64 multiplier(1000);
-    TTimeIntervalMicroSeconds startpos(0);
-    TTimeIntervalMicroSeconds endpos(0);
-
-    switch (iMediaPlayerState)
-        {
-        case XA_PLAYSTATE_STOPPED:
-        case XA_PLAYSTATE_PAUSED:
-        case XA_PLAYSTATE_PLAYING:
-            if (iAPIBeingUsed == EAudioPlayerUtility)
-                {
-                startpos = start * multiplier;
-                endpos = end * multiplier;
-                retVal = iAudioPlayer->SetPlayWindow(startpos, endpos);
-                }
-            else
-                {
-                }
-            break;
-        case XA_PLAYSTATE_PLAYERUNINITIALIZED:
-        default:
-            break;
-        }
-    return retVal;
-    }
-
-XAresult CMMFBackendEngine::SetPlayAdaptContext(void * adaptcontext)
-    {
-    XAresult retVal(XA_RESULT_SUCCESS);
-
-    iAdaptContext = adaptcontext;
-
-    return retVal;
-    }
-
-XAresult CMMFBackendEngine::RegisterCallback(xaPlayCallback cbFunction)
-    {
-    iPlayItfCBFunction = cbFunction;
-    return DoHandlePlayItfAttributesChanged();
-    }
-
-XAresult CMMFBackendEngine::SetCallbackEventsMask(XAuint32 eventflags)
-    {
-    iPlayItfEventFlags = eventflags;
-    return DoHandlePlayItfAttributesChanged();
-    }
-
-XAresult CMMFBackendEngine::SetMarkerPosition(XAmillisecond mSec)
-    {
-    iMarkerPosition = mSec;
-    return DoHandlePlayItfAttributesChanged();
-    }
-
-XAresult CMMFBackendEngine::ClearMarkerPosition()
-    {
-    iMarkerPosition = XA_TIME_UNKNOWN;
-    DoHandlePlayItfAttributesChanged();
-    return XA_RESULT_SUCCESS;
-    }
-
-XAresult CMMFBackendEngine::SetPositionUpdatePeriod(XAmillisecond mSec)
-    {
-    iPositionUpdatePeriod = mSec;
-    DoHandlePlayItfAttributesChanged();
-    return XA_RESULT_SUCCESS;
-    }
-
-XAresult CMMFBackendEngine::DoHandlePlayItfAttributesChanged()
-    {
-    XAresult retVal(XA_RESULT_SUCCESS);
-
-    iMarkerPositionTimer->SetCallbackEventMask(iPlayItfEventFlags);
-    iMarkerPositionTimer->RegisterCallback(iPlayItfCBFunction);
-    iMarkerPositionTimer->SetMarkerPosition(iMarkerPosition);
-
-    iPlayItfPositionUpdateTimer->SetCallbackEventMask(iPlayItfEventFlags);
-    iPlayItfPositionUpdateTimer->RegisterCallback(iPlayItfCBFunction);
-    iPlayItfPositionUpdateTimer->SetPositionUpdatePeriod(
-            iPositionUpdatePeriod);
-
-    switch (iMediaPlayerState)
-        {
-        case XA_PLAYSTATE_STOPPED:
-        case XA_PLAYSTATE_PAUSED:
-            break;
-        case XA_PLAYSTATE_PLAYING:
-            iMarkerPositionTimer->Start();
-            iPlayItfPositionUpdateTimer->Start();
-            break;
-        case XA_PLAYSTATE_PLAYERUNINITIALIZED:
-        default:
-            break;
-        }
-    return retVal;
-    }
-
-void CMMFBackendEngine::DoPostEvent(XAuint32 event)
-    {
-    if ((iPlayItfEventFlags & event) && (iPlayItfCBFunction != NULL))
-        {
-        XAAdaptEvent xaevent =
-            {
-            XA_PLAYITFEVENTS, event, 0, 0
-            };
-        XAAdaptationBase_SendAdaptEvents(
-                (XAAdaptationBaseCtx*) iAdaptContext, &xaevent);
-        }
-    }
-
-XAresult CMMFBackendEngine::GetNumStreams(XAuint32* numstreams)
-    {
-    XAresult retVal(XA_RESULT_SUCCESS);
-    TInt bitRate(0);
-    TInt numS(0);
-    if (iAPIBeingUsed == EAudioPlayerUtility)
-        {
-        numS = 1;
-        *numstreams = numS;
-        }
-    else if (iAPIBeingUsed == EVideoPlayerUtility)
-        {
-        TRAPD(err, bitRate = iVideoPlayer->VideoBitRateL());
-        if (!err && bitRate)
-            {
-            numS++;
-            *numstreams = numS;
-            }
-
-        bitRate = 0;
-        TRAP(err, bitRate = iVideoPlayer->AudioBitRateL());
-        if (!err && bitRate)
-            {
-            numS++;
-            *numstreams = numS;
-            }
-        }
-    return retVal;
-    }
-
-XAresult CMMFBackendEngine::GetStreamInfo(XAuint32 streamindex,
-        XAuint32* streamtype)
-    {
-    XAresult retVal(XA_RESULT_SUCCESS);
-    if (iAPIBeingUsed == EAudioPlayerUtility)
-        {
-        *streamtype = XA_DOMAINTYPE_AUDIO;
-        }
-    else if (iAPIBeingUsed == EVideoPlayerUtility)
-        {
-        switch (streamindex)
-            {
-            case 1:
-                *streamtype = XA_DOMAINTYPE_VIDEO;
-                break;
-            case 2:
-                *streamtype = XA_DOMAINTYPE_AUDIO;
-                break;
-            default:
-                retVal = XA_RESULT_PARAMETER_INVALID;
-                break;
-            }
-        }
-    return retVal;
-    }
-
-XAresult CMMFBackendEngine::GetVideoFrameSize(XAuint32* height,
-        XAuint32* width, XAuint32* frameRate)
-    {
-    XAresult retVal(XA_RESULT_SUCCESS);
-    if (iAPIBeingUsed == EVideoPlayerUtility)
-        {
-        if (iMediaPlayerState != XA_PLAYSTATE_PLAYERUNINITIALIZED)
-            {
-            TSize size;
-            TReal32 framerate(0);
-            TRAPD(err, iVideoPlayer->VideoFrameSizeL(size));
-            if (!err)
-                {
-                *height = size.iHeight;
-                *width = size.iWidth;
-                }
-            else
-                {
-                retVal = err;
-                }
-
-            TRAP(err, framerate = iVideoPlayer->VideoFrameRateL());
-            if (!err)
-                {
-                *frameRate = framerate;
-                }
-            }
-        else
-            {
-            retVal = XA_RESULT_PRECONDITIONS_VIOLATED;
-            }
-        }
-    else
-        {
-        retVal = XA_RESULT_FEATURE_UNSUPPORTED;
-        }
-    return retVal;
-    }
-
-XAresult CMMFBackendEngine::SetActiveState(XAuint32 streamindex,
-        XAboolean active)
-    {
-    XAresult retVal(XA_RESULT_SUCCESS);
-    TInt err(KErrNone);
-    if (iAPIBeingUsed == EAudioPlayerUtility)
-        {
-        retVal = XA_RESULT_FEATURE_UNSUPPORTED;
-        }
-    else if (iAPIBeingUsed == EVideoPlayerUtility)
-        {
-        switch (streamindex)
-            {
-            case 1:
-                TRAP(err, iVideoPlayer->SetVideoEnabledL(active))
-                ;
-                retVal = err;
-                break;
-            case 2:
-                TRAP(err, iVideoPlayer->SetAudioEnabledL(active))
-                ;
-                retVal = err;
-                break;
-            default:
-                retVal = XA_RESULT_PARAMETER_INVALID;
-                break;
-            }
-        }
-    return retVal;
-    }
-
-TInt CMMFBackendEngine::InitializeURIForMMFUtil(char *uri)
-    {
-    /* Initializes and save uri param into iUri structure */
-    TInt err(KErrNone);
-    TInt uriLen;
-
-    if (!uri)
-        return KErrArgument;
-
-    if (iUri)
-        {
-        delete iUri;
-        iUri = NULL;
-        }
-
-    uriLen = strlen(uri);
-    TPtr8 uriParam((TUint8*) uri, uriLen, uriLen);
-
-    TRAP(err, iUri = HBufC::NewL(uriLen));
-    if (err != KErrNone)
-        return err;
-
-    iUriPtr.Set(iUri->Des());
-    iUriPtr.Copy(uriParam); /* Copy data*/
-    //iUriPtr.LowerCase();
-    /* For file scheme convert from file:///c:/folder/file.ext
-     * format to c:\\folder\\file.ext using TUriParser. */
-    _LIT(KFileScheme,"file:///");
-    if (iUriPtr.Find(KFileScheme) >= 0)
-        {
-        iUriType = ELocal;
-        TPtr tmp(const_cast<TUint16 *> (iUriPtr.Ptr())
-                + KFileScheme().Length(), iUriPtr.Length(), iUriPtr.Length());
-        /* Convert from c:/folder/file.ext format to
-         * c:\\folder\\file.ext using TUriParser.
-         * TUriParser8 accepts uri in format file:///c/folder/file.ext,
-         * so get rid of ':' after drive letter (if any) */
-        TInt pos = tmp.Find(_L(":"));
-        if (pos != KErrNotFound)
-            {
-            iUriPtr.Delete(KFileScheme().Length() + pos, 1);
-            }
-
-        TUriParser16 uriParser;
-        err = uriParser.Parse(iUriPtr);
-        if (err != KErrNone)
-            return err;
-
-        HBufC* file = NULL;
-        TRAP(err, file = uriParser.GetFileNameL());
-        if (err != KErrNone)
-            return err;
-
-        iUriPtr.Copy(file->Des());
-        delete file;
-        file = NULL;
-
-        }
-    else
-        {
-        iUriType = EStreaming;
-        }
-    return err;
-    }
-
-XAresult CMMFBackendEngine::SetVolume(XAuint32 volume)
-    {
-    XAresult retVal(XA_RESULT_SUCCESS);
-    TInt err(KErrNone);
-    if (iAPIBeingUsed == EAudioPlayerUtility)
-        {
-        retVal = iAudioPlayer->SetVolume(volume);
-        }
-    else if (iAPIBeingUsed == EVideoPlayerUtility)
-        {
-        TRAP(err, iVideoPlayer->SetVolumeL(volume));
-        retVal = err;
-        }
-    else if (iAPIBeingUsed == EAudioRecorderUtility)
-        {
-        retVal = iAudioRecorder->SetVolume(volume);
-        }
-    return retVal;
-    }
-
-XAresult CMMFBackendEngine::GetMaxVolume(XAuint32* maxvolume)
-    {
-    XAresult retVal(XA_RESULT_SUCCESS);
-    if (iAPIBeingUsed == EAudioPlayerUtility)
-        {
-        *maxvolume = iAudioPlayer->MaxVolume();
-        }
-    else if (iAPIBeingUsed == EVideoPlayerUtility)
-        {
-        *maxvolume = iVideoPlayer->MaxVolume();
-        }
-    else if (iAPIBeingUsed == EAudioRecorderUtility)
-        {
-        *maxvolume = iAudioRecorder->MaxVolume();
-        }
-    return retVal;
-    }
-
-XAresult CMMFBackendEngine::GetVolume(XAuint32* volume)
-    {
-    XAresult retVal(XA_RESULT_SUCCESS);
-    TInt mmfvolume(0);
-    if (iAPIBeingUsed == EAudioPlayerUtility)
-        {
-        retVal = iAudioPlayer->GetVolume(mmfvolume);
-        if (retVal == XA_RESULT_SUCCESS)
-            {
-            *volume = mmfvolume;
-            }
-        }
-    else if (iAPIBeingUsed == EVideoPlayerUtility)
-        {
-        *volume = iVideoPlayer->Volume();
-        }
-    else if (iAPIBeingUsed == EAudioRecorderUtility)
-        {
-        retVal = iAudioRecorder->GetVolume(mmfvolume);
-        if (retVal == XA_RESULT_SUCCESS)
-            {
-            *volume = mmfvolume;
-            }
-        }
-    return retVal;
-    }
-
-XAresult CMMFBackendEngine::SetPlaybackRate(XAint16 rate)
-    {
-    XAresult retVal(XA_RESULT_INTERNAL_ERROR);
-
-    switch (iMediaPlayerState)
-        {
-        case XA_PLAYSTATE_STOPPED:
-        case XA_PLAYSTATE_PAUSED:
-        case XA_PLAYSTATE_PLAYING:
-            if (iAPIBeingUsed == EAudioPlayerUtility)
-                {
-                retVal = XA_RESULT_FEATURE_UNSUPPORTED;
-                }
-            else
-                {
-                TRAPD(err, iVideoPlayer->SetPlayVelocityL(rate));
-                if(!err)
-                    {
-                    retVal = XA_RESULT_SUCCESS; 
-                    }
-                }
-            break;
-        case XA_PLAYSTATE_PLAYERUNINITIALIZED:
-        default:
-            break;
-        }
-    return retVal;
-    }
-
-XAresult CMMFBackendEngine::GetPlaybackRateCapabilities(XAboolean* forward,
-                                                        XAboolean* backward)
-    {
-    XAresult retVal(XA_RESULT_PARAMETER_INVALID);
-    
-    switch (iMediaPlayerState)
-        {
-        case XA_PLAYSTATE_STOPPED:
-        case XA_PLAYSTATE_PAUSED:
-        case XA_PLAYSTATE_PLAYING:
-            if (iAPIBeingUsed == EAudioPlayerUtility)
-                {
-                retVal = XA_RESULT_FEATURE_UNSUPPORTED;
-                }
-            else
-                {
-                TVideoPlayRateCapabilities capability;
-                TRAPD(err, iVideoPlayer->GetPlayRateCapabilitiesL(capability));
-                if(!err)
-                    {
-                    *forward = capability.iPlayForward;
-                    *backward = capability.iPlayBackward;
-                    retVal = XA_RESULT_SUCCESS; 
-                    }
-                }
-            break;
-        case XA_PLAYSTATE_PLAYERUNINITIALIZED:
-        default:
-            break;
-        }
-    return retVal;
-    }
-
-extern "C"
-    {
-
-    int mmf_backend_engine_init(void** engine)
-        {
-        TRAPD(err, *engine = CMMFBackendEngine::NewL());
-        return err;
-        }
-
-    void mmf_backend_engine_deinit(void* engine)
-        {
-        delete ((CMMFBackendEngine*) engine);
-        }
-
-    int mmf_set_recorder_uri(void* context, char* uri, XAuint32 format)
-        {
-        return ((CMMFBackendEngine*) (context))->SetFileName(uri, format,
-                CMMFBackendEngine::ERecord);
-        }
-
-    int mmf_set_adapt_context(void* context, void* adaptcontext)
-        {
-        return ((CMMFBackendEngine*) (context))->SetAdaptContext(adaptcontext);
-        }
-
-    void mmf_close(void* context)
-        {
-        ((CMMFBackendEngine*) context)->Close();
-        }
-
-    int mmf_start_recording(void* context)
-        {
-        return ((CMMFBackendEngine*) (context))->SetRecorderState(
-                CMMFBackendEngine::ERecorderRecording, FALSE);
-        }
-
-    int mmf_stop_recording(void* context, XAboolean stopCalled)
-        {
-        return ((CMMFBackendEngine*) (context))->SetRecorderState(
-                CMMFBackendEngine::ERecorderOpen, stopCalled);
-        }
-
-    int mmf_get_record_position(void* context, XAuint64* position)
-        {
-        return ((CMMFBackendEngine*) (context))->GetRecordPosition(position);
-        }
-
-    int mmf_set_record_position_update_period(void* context,
-            XAmillisecond msec)
-        {
-        return ((CMMFBackendEngine*) (context))->SetPositionUpdatePerioed(
-                msec);
-        }
-
-    int mmf_get_codec_id(void* context, XAuint32* encoderId)
-        {
-        return ((CMMFBackendEngine*) (context))->GetCodecId(encoderId);
-        }
-
-    int mmf_get_channels(void* context, XAuint32* channelsIn)
-        {
-        return ((CMMFBackendEngine*) (context))->GetChannels(channelsIn);
-        }
-
-    int mmf_get_samplerate(void* context, XAmilliHertz* sampleRate)
-        {
-        return ((CMMFBackendEngine*) (context))->GetSampleRate(sampleRate);
-        }
-
-    int mmf_get_bitrate(void* context, XAuint32* bitRate)
-        {
-        return ((CMMFBackendEngine*) (context))->GetBitRate(bitRate);
-        }
-
-    int mmf_set_destination_channels(void* context, XAuint32* channelsIn)
-        {
-        return ((CMMFBackendEngine*) (context))->SetDestinationChannels(
-                channelsIn);
-        }
-
-    int mmf_set_destination_samplerate(void* context,
-            XAmilliHertz* sampleRate)
-        {
-        return ((CMMFBackendEngine*) (context))->SetDestinationSampleRate(
-                sampleRate);
-        }
-
-    int mmf_set_destination_bitrate(void* context, XAuint32* bitRate)
-        {
-        return ((CMMFBackendEngine*) (context))->SetDestinationBitRate(
-                bitRate);
-        }
-
-    XAresult mmf_set_play_adapt_context(void * context, void * adaptcontext)
-        {
-        return ((CMMFBackendEngine *) (context))->SetPlayAdaptContext(
-                adaptcontext);
-        }
-
-    XAresult mmf_set_player_uri(void * context, char * uri, XAuint32 format)
-        {
-        return ((CMMFBackendEngine *) (context))->SetFileName(uri, format,
-                CMMFBackendEngine::EPlay);
-        }
-
-    /*
-     XAresult mmf_set_window_handle(void * context, void *  display_info)
-     {
-     return ((CMMFBackendEngine *)(context))->SetWindowHandle(display_info);
-     }
-
-     */
-    XAresult mmf_setup_native_display(void * context, void * display_info)
-        {
-        return ((CMMFBackendEngine *) (context))->SetNativeDisplayInformation(
-                display_info);
-        }
-
-    XAresult mmf_playitf_resume_playback(void * context)
-        {
-        return ((CMMFBackendEngine *) (context))->ResumePlayback();
-        }
-
-    XAresult mmf_playitf_pause_playback(void * context)
-        {
-        return ((CMMFBackendEngine *) (context))->PausePlayback();
-        }
-
-    XAresult mmf_playitf_stop_playback(void * context)
-        {
-        return ((CMMFBackendEngine *) (context))->StopPlayback();
-        }
-
-    XAresult mmf_playitf_get_play_state(void * context, XAuint32 * pState)
-        {
-        return ((CMMFBackendEngine *) (context))->GetPlayState(pState);
-        }
-
-    XAresult mmf_playitf_get_duration(void * context, XAmillisecond * pMsec)
-        {
-        return ((CMMFBackendEngine *) (context))->GetDuration(pMsec);
-        }
-
-    XAresult mmf_playitf_get_position(void * context, XAmillisecond * pMsec)
-        {
-        return ((CMMFBackendEngine *) (context))->GetPosition(pMsec);
-        }
-
-    XAresult mmf_playitf_register_callback(void * context,
-            xaPlayCallback callback)
-        {
-        return ((CMMFBackendEngine *) (context))->RegisterCallback(callback);
-        }
-
-    XAresult mmf_playitf_set_callback_events_mask(void * context,
-            XAuint32 eventflags)
-        {
-        return ((CMMFBackendEngine *) (context))->SetCallbackEventsMask(
-                eventflags);
-        }
-
-    XAresult mmf_playitf_set_marker_position(void * context,
-            XAmillisecond mSec)
-        {
-        return ((CMMFBackendEngine *) (context))->SetMarkerPosition(mSec);
-        }
-
-    XAresult mmf_playitf_clear_marker_position(void * context)
-        {
-        return ((CMMFBackendEngine *) (context))->ClearMarkerPosition();
-
-        }
-
-    XAresult mmf_playitf_set_position_update_period(void * context,
-            XAmillisecond mSec)
-        {
-        return ((CMMFBackendEngine *) (context))->SetPositionUpdatePeriod(
-                mSec);
-        }
-
-    XAresult mmf_seekitf_set_position(void * context, XAmillisecond pMsec)
-        {
-        return ((CMMFBackendEngine *) (context))->SetPosition(pMsec);
-        }
-
-    XAresult mmf_seekitf_set_playwindow(void * context, XAmillisecond start,
-            XAmillisecond end)
-        {
-        return ((CMMFBackendEngine *) (context))->SetPlayWindow(start, end);
-        }
-
-    XAresult mmf_seekitf_set_repeats(void * context, XAboolean repeat)
-        {
-        return ((CMMFBackendEngine *) (context))->SetRepeats(repeat);
-        }
-
-    XAresult mmf_streaminformationitf_get_streaminfo(void * context,
-            XAuint32 streamindex, XAuint32* streamtype)
-        {
-        return ((CMMFBackendEngine *) (context))->GetStreamInfo(streamindex,
-                streamtype);
-        }
-
-    XAresult mmf_streaminformationitf_get_numstreams(void * context,
-            XAuint32* numstreams)
-        {
-        return ((CMMFBackendEngine *) (context))->GetNumStreams(numstreams);
-        }
-
-    XAresult mmf_streaminformationitf_get_videoframesize(void * context,
-            XAuint32* height, XAuint32* width, XAuint32* frameRate)
-        {
-        return ((CMMFBackendEngine *) (context))->GetVideoFrameSize(height,
-                width, frameRate);
-        }
-
-    XAresult mmf_streaminformationitf_set_activestream(void * context,
-            XAuint32 streamindex, XAboolean active)
-        {
-        return ((CMMFBackendEngine *) (context))->SetActiveState(streamindex,
-                active);
-        }
-
-    XAresult mmf_volumeitf_set_volume(void * context, XAuint32 volume)
-        {
-        return ((CMMFBackendEngine *) (context))->SetVolume(volume);
-        }
-
-    XAresult mmf_volumeitf_get_maxvolume(void * context, XAuint32* volume)
-        {
-        return ((CMMFBackendEngine *) (context))->GetMaxVolume(volume);
-        }
-
-    XAresult mmf_volumeitf_get_volume(void * context, XAuint32* volume)
-        {
-        return ((CMMFBackendEngine *) (context))->GetVolume(volume);
-        }
-
-    XAresult mmf_playbackrateitf_set_playbackrate(void * context, XAint16 rate)
-        {
-        return ((CMMFBackendEngine *) (context))->SetPlaybackRate(rate);
-        }
-
-    XAresult mmf_playbackrateitf_get_playbackratecaps(void * context, XAboolean* forward, XAboolean* backward)
-        {
-        return ((CMMFBackendEngine *) (context))->GetPlaybackRateCapabilities(forward,backward);
-        }
-    }