browserplugins/browseraudiovideoplugin/src/BavpControllerVideo.cpp
changeset 51 48e827313edd
parent 37 481242ead638
child 53 f427d27b98d8
--- a/browserplugins/browseraudiovideoplugin/src/BavpControllerVideo.cpp	Tue Feb 02 00:12:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1372 +0,0 @@
-/*
-* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "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:  Controller class for handling browser requests to play video
-*
-*/
-
-
-// INCLUDE FILES
-#include <mmf/common/mmferrors.h>
-#include <aknclearer.h>
-#include <AknUtils.h>
-
-#include "BavpPlugin.h"
-#include "BavpLogger.h"
-#include "BavpControllerVideo.h"
-#include "BavpView.h"
-#include "BavpViewFullScreen.h"
-#include <mmf/common/mmfcontrollerframework.h> 
-#include <MMFScalingCustomCommandConstants.h>
-
-using namespace RT_GestureHelper;
-
-// CONSTANTS
-// One second represented in microseconds
-const TInt KBavpOneSecond = 1000000;
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-CBavpControllerVideo* CBavpControllerVideo::NewL( MBavpView* aView,
-                                                  TUint aAccessPtId,
-                                                  TBavpMediaType aMediaType,
-                                                  const TDesC& aFileName )
-    {
-    CBavpControllerVideo* self = new( ELeave ) CBavpControllerVideo( aView, aAccessPtId );
-
-    Log( EFalse, _L("CBavpControllerVideo::NewL this="), (TInt)self );
-
-    CleanupStack::PushL( self );
-    self->ConstructL( aMediaType, aFileName );
-    CleanupStack::Pop( self );
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::~CBavpControllerVideo()
-// Destructor
-// -----------------------------------------------------------------------------
-CBavpControllerVideo::~CBavpControllerVideo()
-    {
-    Log( EFalse, _L("CBavpControllerVideo::~CBavpControllerVideo this="), (TInt)this );
-
-    // If currently playing, call Stop before you close and delete
-    if ( iCurrentState == EBavpPlaying && iVideoPlayer)
-        {
-        iVideoPlayer->Stop();
-        }
-
-    // Close the video plugin, and delete it
-    if ( iVideoPlayer )
-        {
-        iVideoPlayer->Close();
-        delete iVideoPlayer;
-        }
-
-    // CIdle AO used for display update
-    if ( iDisplayUpdater )
-        {
-        delete iDisplayUpdater;
-        }
-
-  if ( iBackLightUpdater )
-      {
-      iBackLightUpdater->Cancel();
-      delete iBackLightUpdater;
-      }
-    // Used for displaying content in full screen
-    if ( iBavpViewFullScreen )
-        {
-        delete iBavpViewFullScreen;
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::CBavpControllerVideo
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-CBavpControllerVideo::CBavpControllerVideo( MBavpView* aView, TUint aAccessPtId )
-    : CBavpController( aView, aAccessPtId )
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-void CBavpControllerVideo::ConstructL( TBavpMediaType aMediaType,
-                                       const TDesC& aFileName )
-    {
-    // Construct the BavpController base class
-    BaseConstructL( aMediaType, aFileName );
-
-    // Create CIdle (AO) to update the display
-    iDisplayUpdater = CIdle::NewL( CActive::EPriorityIdle );
-    iBackLightUpdater=CHeartbeat::NewL(CActive::EPriorityStandard);
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::PrepareCompleteL
-// Handle the leaving methods needed by MvpuoPrepareComplete
-// -----------------------------------------------------------------------------
-void CBavpControllerVideo::PrepareCompleteL()
-    {
-    // Resolution
-    TSize size;
-    iVideoPlayer->VideoFrameSizeL(size);
-    iClipInfo->iResolutionHeight = size.iHeight;
-    iClipInfo->iResolutionWidth = size.iWidth;
-
-    // Bitrate
-    iClipInfo->iBitrate = iVideoPlayer->VideoBitRateL() +
-                          iVideoPlayer->AudioBitRateL();
-
-    TInt iMetaCount = iVideoPlayer->NumberOfMetaDataEntriesL();
-    CMMFMetaDataEntry* metaData = NULL;
-
-    for ( TInt i = 0; i < iMetaCount; i++ )
-        {
-        metaData = iVideoPlayer->MetaDataEntryL( i );
-
-        Log( EFalse, _L("metaData index="), i );
-        Log( EFalse, metaData->Name() );
-        Log( EFalse, metaData->Value() );
-
-        // Check if seekable
-        if ( !metaData->Name().CompareF( KBavpSeekable ) )
-            {
-            if ( !metaData->Value().CompareF( KBavpFalse ) )
-                {
-                iClipInfo->iSeekable = EFalse;
-                }
-            }
-
-        // Check if live stream
-        if ( !metaData->Name().CompareF( KBavpLiveStream ) )
-            {
-            if ( !metaData->Value().CompareF( KBavpTrue ) )
-                {
-                // Live stream is not seekable
-                iClipInfo->iLiveStream = ETrue;
-                iClipInfo->iSeekable = EFalse;
-                }
-            }
-
-        delete metaData;
-        }   // end of for
-
-    // Set up the max volume
-    iClipInfo->iMaxVolume = iVideoPlayer->MaxVolume();
-    iPlayerMaxVolume = iClipInfo->iMaxVolume;
-
-    // Duration
-    iClipInfo->iDurationInSeconds = iVideoPlayer->DurationL();
-
-    // Audio track
-    iClipInfo->iAudioTrack = iVideoPlayer->AudioEnabledL();
-
-    // Video track
-    iClipInfo->iVideoTrack = iVideoPlayer->VideoBitRateL();
-
-    if ( IsClipSeekable() )
-        {
-        iVideoPlayer->SetPositionL( iClipInfo->iPosition );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::InitVideoPlayer
-// The non-leaving version that calls the leaving version. Closes the current
-// player and prepares the MMF to play the video
-// -----------------------------------------------------------------------------
-void CBavpControllerVideo::InitVideoPlayer()
-    {
-    TRAP_IGNORE( InitVideoPlayerL() );
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::InitVideoPlayerL
-// Closes the current player and prepares the MMF to play the video
-// -----------------------------------------------------------------------------
-void CBavpControllerVideo::InitVideoPlayerL()
-    {
-    Log( EFalse, _L("CBavpControllerVideo::InitVideoPlayerL()") );
-
-    // If videoplayer is already opened, close and delete it
-    if ( iVideoPlayer )
-        {
-        iVideoPlayer->Close();
-        delete iVideoPlayer;
-        iVideoPlayer = NULL;
-        }
-
-    // Get the rect to display
-    TRect rect( iBavpView->CoeControl().Rect() );
-    TPoint pt = iBavpView->WindowInst().AbsPosition();
-    rect.Move( pt.iX, pt.iY );
-
-    CEikonEnv* eikon = CEikonEnv::Static();
-    RWsSession& ws = eikon->WsSession();
-    CWsScreenDevice* screenDevice = eikon->ScreenDevice();
-
-    // Clip rect manipulation.
-    // Calculate the rect for display, including title and status pane
-    TRect clipRect = GetClipRect( rect );
-
-    Log( EFalse, _L("InitVideoPlayerL() - calling CVideoPlayerUtility::NewL") );
-
-    // Initialize the videoplayer
-    iVideoPlayer = CVideoPlayerUtility::NewL( *this, EMdaPriorityNormal,
-                                              EMdaPriorityPreferenceNone,
-                                              ws, *screenDevice,
-                                              iBavpView->WindowInst(), rect,
-                                              clipRect);
-
-    // Register for loading notification
-    iVideoPlayer->RegisterForVideoLoadingNotification( *this );
-
-    switch ( iClipInfo->iMediaType )
-        {
-        case ELocalVideoFile:
-            Log( EFalse, _L("InitVideoPlayerL() - calling OpenVideoFile") );
-            OpenVideoFileL();
-            break;
-
-        case ELocalRamFile:
-        case EUrl:
-        case ELocalSdpFile:
-#if defined(BRDO_ASX_FILE)
-		case ELocalAsxFile:
-#endif // BRDO_ASX_FILE
-            Log( EFalse, _L("InitVideoPlayerL() - calling OpenVideoUrlL") );
-            OpenVideoUrlL();
-            break;
-
-        // Not supported
-        case ELocalAudioPlaylist:
-        default:
-            User::Leave( KErrNotSupported );
-            break;
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::UnInitVideoPlayer
-// Closes the player and delete the instance
-// -----------------------------------------------------------------------------
-void CBavpControllerVideo::UnInitVideoPlayer()
-    {
-    Log( EFalse, _L("CBavpControllerVideo::UnInitVideoPlayer()") );
-
-    if ( iVideoPlayer )
-        {
-        iVideoPlayer->Close();
-        delete iVideoPlayer;
-        iVideoPlayer = NULL;
-        }
-
-    iCurrentState = EBavpNone;
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::RotateScreen90
-// Rotate the screen if needed
-// -----------------------------------------------------------------------------
-void CBavpControllerVideo::RotateScreen90()
-    {
-    Log( EFalse, _L("CBavpControllerVideo::RotateScreen90()") );
-
-    TRect screenRect;
-    AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, screenRect );
-
-    // Rotate only if screen rect height is greater than its width
-    if ( screenRect.Height() > screenRect.Width() )
-        {
-        TRAP_IGNORE( iVideoPlayer->SetRotationL( EVideoRotationClockwise90 ) );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::RevertToFullScreenL
-// Set full screen display mode
-// -----------------------------------------------------------------------------
-void CBavpControllerVideo::RevertToFullScreenL()
-    {
-    Log( EFalse, _L("CBavpControllerVideo::RevertToFullScreenL()"));
-    CBavpPluginEcomMain* npm = (CBavpPluginEcomMain*)Dll::Tls();
-    bool fullscreen = true;
-    
-    iVideoPlayer->StopDirectScreenAccessL();
-    iClipInfo->iInFullScreenMode = ETrue;
-
-    npm->Funcs()->setvalue(iBavpView->bavPlugin()->getNPP(), 
-                           NPPVpluginFullScreenBool, 
-                           static_cast<void*>(&fullscreen));
-    iBavpView->ControllerStateChangedL();
-    
-    CEikonEnv* eikon = CEikonEnv::Static();
-    RWsSession& ws = eikon->WsSession();
-    CWsScreenDevice* screenDevice = eikon->ScreenDevice();
-    
-    iNormalScreenRect = iBavpView->CoeControl().Rect();
-    TPoint pt = iBavpView->WindowInst().AbsPosition();
-    iNormalScreenRect.Move(pt.iX, pt.iY);
-    TRect screenRect = eikon->EikAppUi()->ApplicationRect();
-    
-    CCoeControl* parentView = iBavpView->CoeControl().Parent();
-    parentView->SetRect(screenRect);
-    iBavpView->CoeControl().SetExtent(TPoint(0,0), screenRect.Size());
-    
-    iVideoPlayer->SetDisplayWindowL( ws, *screenDevice,
-                                     iBavpView->WindowInst(),
-                                     screenRect, screenRect );
-                                         
-    RotateScreen90();
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::RevertToNormalScreenL
-// Set back to normal display mode
-// -----------------------------------------------------------------------------
-void CBavpControllerVideo::RevertToNormalScreenL()
-    {
-     Log( EFalse, _L("CBavpControllerVideo::RevertToNormalScreenL()") );
-    CEikonEnv* eikon = CEikonEnv::Static();
-    RWsSession& ws = eikon->WsSession();
-    CWsScreenDevice* screenDevice = eikon->ScreenDevice();
-    CBavpPluginEcomMain* npm = (CBavpPluginEcomMain*)Dll::Tls();
-    bool fullscreen = false;
-    
-    iVideoPlayer->StopDirectScreenAccessL();
-    
-    npm->Funcs()->setvalue(iBavpView->bavPlugin()->getNPP(), 
-                               NPPVpluginFullScreenBool, 
-                               static_cast<void*>(&fullscreen));
-
-    CCoeControl* parentView = iBavpView->CoeControl().Parent();
-    parentView->SetRect(iNormalScreenRect);
-    iBavpView->CoeControl().SetExtent(TPoint(0,0), iNormalScreenRect.Size());
-
-    iClipInfo->iInFullScreenMode = EFalse;
-    RefreshRectCoordinatesL();
-    iVideoPlayer->SetRotationL( EVideoRotationNone );
-    iBavpView->ControllerStateChangedL();
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::ToggleScreen
-// Start a call back for the display screen switches (Full Screen to
-// Normal Screen)
-// -----------------------------------------------------------------------------
-void CBavpControllerVideo::ToggleScreen()
-    {
-    if ( iDisplayUpdater->IsActive() )
-        {
-        iDisplayUpdater->Cancel();
-        }
-
-    iDisplayUpdater->Start( TCallBack( CBavpControllerVideo::WaitForScreenSwitch,
-                                       this ) );
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::RefreshRectCoordinatesL
-// Refresh the coordinates of rect for display
-// -----------------------------------------------------------------------------
-void CBavpControllerVideo::RefreshRectCoordinatesL()
-    {
-    Log( EFalse, _L("CBavpControllerVideo::RefreshRectCoordinatesL()") );
-
-    if ( IsClipFullScreen() ) {
-        return;
-    }
-    if ( iVideoPlayer )
-        {
-        TRect rect( iBavpView->CoeControl().Rect() );
-
-        TRect wr(iBavpView->WindowRect()); //can have negative coordinates 
-                                           //if video scrolled out of viewport
-        // Windows' absolute position, relative to the current screen
-        TPoint pt = iBavpView->WindowInst().AbsPosition();
-        rect.Move( pt.iX, pt.iY );
-        wr.Move( pt.iX, pt.iY );
-
-
-        CEikonEnv* eikon = CEikonEnv::Static();
-        RWsSession& ws = eikon->WsSession();
-        CWsScreenDevice* screenDevice = eikon->ScreenDevice();
-
-        // Reset clipRect
-        TRect clipRect = rect;
-        clipRect = GetClipRect( rect );
-
-        Log( EFalse, _L("\nPosition: == clipRect to DAS:  ==\n") );
-        Log( EFalse, _L("\nPosition:: clipRect.x = \n"), clipRect.iTl.iX );
-        Log( EFalse, _L("\nPosition:: clipRect.y = \n"), clipRect.iTl.iY );
-        Log( EFalse, _L("\nPosition:2: clipRect.x = \n"), clipRect.iBr.iX );
-        Log( EFalse, _L("\nPosition:2: clipRect.y = \n"), clipRect.iBr.iY );
-
-		TRAP_IGNORE
-		    (
-              iVideoPlayer->SetDisplayWindowL( ws, *screenDevice,
-            							     iBavpView->WindowInst(),
-            							     wr, clipRect );
-		    );
-    if( iCurrentState == EBavpPaused || iCurrentState == EBavpStopped || iCurrentState == EBavpPlayComplete )
-        {
-        iVideoPlayer->RefreshFrameL();
-        }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::WaitForScreenSwitch
-// Switches between normal screen and full screen
-// -----------------------------------------------------------------------------
-TInt CBavpControllerVideo::WaitForScreenSwitch( TAny* aThisData )
-    {
-    TRAP_IGNORE( WaitForScreenSwitchL( aThisData ) );
-    return KErrNone;
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::WaitForScreenSwitch
-// Switches between normal screen and full screen
-// -----------------------------------------------------------------------------
-void CBavpControllerVideo::WaitForScreenSwitchL( TAny* aThisData )
-    {
-    Log( EFalse, _L("CBavpControllerVideo::WaitForScreenSwitchL()") );
-
-    // Use static cast
-    CBavpControllerVideo* thisData = STATIC_CAST(CBavpControllerVideo*, aThisData);
-
-    // Switch from Normal screen mode to Full Screen mode
-    if ( !thisData->IsClipFullScreen() )
-        {
-        thisData->RevertToFullScreenL();
-     
-        }
-    else if ( thisData->IsClipFullScreen() )
-        {
-        // Switch from Full Screen mode to Normal Screen mode
-        thisData->RevertToNormalScreenL();
-     
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::DoFastForwardL
-// Fast forwards the video
-// -----------------------------------------------------------------------------
-TInt CBavpControllerVideo::DoFastForwardL( TAny* aThisData )
-    {
-    CBavpControllerVideo* thisData = STATIC_CAST( CBavpControllerVideo*, aThisData );
-    TTimeIntervalMicroSeconds skipPosition( 0 );
-    TTimeIntervalMicroSeconds currentPosition( thisData->iVideoPlayer->PositionL() );
-
-    Log( EFalse, _L("CBavpControllerVideo::DoFastForwardL() - currentPosition = "),
-         currentPosition.Int64() );
-
-    // If we're not at the end of clip, skip forward a few positions
-    if ( currentPosition < thisData->iClipInfo->iDurationInSeconds )
-        {
-        skipPosition = currentPosition.Int64() + KSkipToPosition;
-
-        // If skip pass end of clip, set to the end of clip
-        if ( skipPosition > thisData->iClipInfo->iDurationInSeconds )
-            {
-            skipPosition = thisData->iClipInfo->iDurationInSeconds;
-            }
-
-        Log( EFalse, _L("CBavpControllerVideo::DoFastForwardL() - skipPosition = "),
-             skipPosition.Int64() );
-
-        // Set the position
-        thisData->iVideoPlayer->SetPositionL( skipPosition );
-
-        // Refresh the frame
-        thisData->iVideoPlayer->RefreshFrameL();
-        thisData->iClipInfo->iPosition = skipPosition;
-        }
-    else
-        {
-        // Fast Forward reached the end of the clip, cancel the fast forward
-        thisData->iPositionUpdater->Cancel();
-        thisData->iClipInfo->iPosition = thisData->iClipInfo->iDurationInSeconds;
-        // Set the state to complete since it reached the end of the clip
-        thisData->iCurrentState = EBavpFastForwardComplete;
-        Log( EFalse, _L("CBavpControllerVideo::DoFastForwardL() - End of clip") );
-        }
-
-    return ETrue;
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::DoRewindL
-// Rewinds the video
-// -----------------------------------------------------------------------------
-TInt CBavpControllerVideo::DoRewindL( TAny* aThisData )
-    {
-    CBavpControllerVideo* thisData = STATIC_CAST( CBavpControllerVideo*, aThisData );
-    TTimeIntervalMicroSeconds skipPosition( 0 );
-    TTimeIntervalMicroSeconds currentPosition( thisData->iVideoPlayer->PositionL() );
-
-    Log( EFalse, _L("CBavpControllerVideo::DoFastForwardL() - currentPosition = "),
-         currentPosition.Int64() );
-
-    // We're not at the beginning of the clip, rewind a few positions
-    if ( currentPosition > 0 )
-        {
-        skipPosition = currentPosition.Int64() - KSkipToPosition;
-
-        // If skip pass beginning of clip, set to the beginning of clip
-        if ( skipPosition < 0 )
-            {
-            skipPosition = 0;
-            }
-
-        Log( EFalse, _L("CBavpControllerVideo::RewindL() - skipPosition = "),
-             skipPosition.Int64() );
-
-        // Set the position
-        thisData->iVideoPlayer->SetPositionL( skipPosition );
-
-        // Refresh the frame
-        thisData->iVideoPlayer->RefreshFrameL();
-        thisData->iClipInfo->iPosition = skipPosition;
-        }
-    else
-        {
-        // Rewind reached the beginning of the clip, cancel the rewind
-        thisData->iPositionUpdater->Cancel();
-        thisData->iClipInfo->iPosition = 0;
-        // Set the state to complete since it reached beginning of clip
-        thisData->iCurrentState = EBavpRewindComplete;
-        Log( EFalse, _L("CBavpControllerVideo::RewindL() - beginning of clip") );
-        }
-
-    return ETrue;
-    }
-
-// --------------------------------------------------------------------------
-// CBavpControllerVideo::HandleError
-// Handle error codes. We can receive errors from the MMF Video Player
-// and its MMF callbacks (mvpuoPlayComplete, etc).
-// The MMF errors are for handling content issues, such as decoding content
-// and network access.
-// NOTES:
-// MMF errors start at -12000, see /epoc32/include/mmf/common/MMFErrors.h
-// MMF also returns -1 (KErrNotFound) and few other system-wide errors
-// -----------------------------------------------------------------------------
-void CBavpControllerVideo::HandleError( TInt aError )
-    {
-    Log( EFalse, _L("In CBavpControllerVideo::HandleError(): err="), aError );
-
-    switch ( aError )
-        {
-        case KErrSessionClosed: // When we stop live streaming
-            if ( iCurrentState == EBavpBuffering ||
-                 iCurrentState == EBavpStopped )
-                {
-                Log( EFalse, _L("HandleError: iCurrentState=Buffering or Stopped and err=KErrSessionClosed") );
-                // Controller needs to be re-initialized, whenever
-                // live streaming is "Stopped"
-                // iCurrentState = EBavpNone, set by UnInitVideoPlayer
-                UnInitVideoPlayer();
-                // Set state to stopped, because we "stop" live content
-                iCurrentState = EBavpStopped;
-                }
-            else if ( iCurrentState == EBavpPlaying ||
-                      iCurrentState == EBavpPaused )
-                {
-                Log( EFalse, _L("HandleError:iCurrentState=Playing or Paused and err=KErrSessionClosed") );
-                // If the window is not on top, it might be a video or phone
-                // call interrupt
-                TRAP_IGNORE
-                    (
-                    if ( !iBavpView->IsTopWindowL() )
-                        {
-                        InitVideoPlayer();
-                        }
-                    )   // end of TRAP_IGNORE
-                }
-            else
-                {
-                }
-            break;
-
-        case KErrDisconnected:
-            // If the window is not on top, it might be a video or phone
-            // call interrupt
-            Log( EFalse, _L("HandleError: err=KErrDisconnected") );
-            TRAP_IGNORE
-                (
-                if ( !iBavpView->IsTopWindowL() )
-                    {
-                    InitVideoPlayer();
-                    }
-                )   // end of TRAP_IGNORE
-            break;
-
-        case KErrMMVideoDevice:
-        case KErrMMAudioDevice:
-            HandleMultiInstanceError();
-            break;
-
-        // Errors from MMF (i.e. MvpuoPrepareComplete, MvpuoPlayComplete...)
-        case KErrNotFound:
-        case KErrNotSupported:
-        case KErrCorrupt:
-        case KErrInUse:
-        case KErrNoMemory:
-        case KErrAbort:
-        case KErrArgument:
-        case KErrCouldNotConnect:
-        case KErrTimedOut:
-        case KErrHardwareNotAvailable:
-        case KErrOverflow:
-        case KErrMMNotEnoughBandwidth:
-        case KErrMMNetworkRead:
-        case KErrMMNetworkWrite:
-        case KErrMMServerNotSupported:
-        case KErrMMUDPReceive:
-        case KErrMMInvalidProtocol:
-        case KErrMMInvalidURL:
-        case KErrMMProxyServer:
-        case KErrMMDecoder:
-        case KErrMMPartialPlayback:
-            // Close the player and delete player instance.
-            // iCurrentState = EBavpNone, set by UnInitVideoPlayer.
-            UnInitVideoPlayer();
-
-            // Display we have bad content
-            Log( EFalse, _L("HandleError: state=BadContent") );
-            iCurrentState = EBavpBadContent;
-            iBavpView->UpdateView();
-            break;
-
-        default:
-            // Do nothing
-            break;
-
-        }   // end of switch
-
-    Log( EFalse, _L("Out CBavpControllerVideo::HandleError()") );
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::HandleKeysL
-// Handles user key presses when we're Activated (aka Top of CCoeControl stack)
-// -----------------------------------------------------------------------------
-TKeyResponse CBavpControllerVideo::HandleKeysL( const TKeyEvent& aKeyEvent,
-                                                TEventCode aType )
-    {
-    TKeyResponse keyResponse( EKeyWasNotConsumed );
-
-    // If we're in full screen mode, and any key is pressed, toggle to normal
-    // screen. Consume all key presses (down, key, up) when in full screen mode.
-    if ( IsClipFullScreen() )
-        {
-        if ( aType == EEventKeyDown )
-            {
-            ToggleScreen();
-            }
-        keyResponse = EKeyWasConsumed;
-        }
-    else
-        {
-        // Use the default HandleKeysL method
-        keyResponse = CBavpController::HandleKeysL( aKeyEvent, aType );
-        }
-
-    return keyResponse;
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::HandleCommandL
-// Default implementation, override as needed.
-// Handles the commands from the Option Menu defined in TBavpCommandIds
-// -----------------------------------------------------------------------------
-void CBavpControllerVideo::HandleCommandL( TBavpCommandIds aCommand )
-    {
-    Log( EFalse, _L("CBavpControllerVideo::HandleCommandL(): aCommand="), (TInt)aCommand );
-
-    switch ( aCommand )
-        {
-        case EBavpCmdPlayFullScreen:
-            ToggleScreen();
-            break;
-
-        default:
-            // Use the default HandleCommandL method
-            CBavpController::HandleCommandL( aCommand );
-            break;
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::PlayAudioVideoL
-// Handles request to open and play an audio or video content
-// -----------------------------------------------------------------------------
-void CBavpControllerVideo::PlayAudioVideoL()
-    {
-    Log( EFalse, _L("CBavpControllerVideo::PlayAudioVideoL() ") );
-
-    if ( iClipInfo->iMediaType == ELocalRamFile )
-        {
-        ParseRamFileL();
-        }
-#if defined(BRDO_ASX_FILE)
-    else if ( iClipInfo->iMediaType == ELocalAsxFile )
-        {
-        ParseAsxFileL();
-        }
-#endif // BRDO_ASX_FILE
-    // Check for the mediatype and open the file
-    InitVideoPlayerL();
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::Stop
-// Stops video from playing, if playing.
-// -----------------------------------------------------------------------------
-void CBavpControllerVideo::Stop()
-    {
-    Log( EFalse, _L("CBavpControllerVideo::Stop") );
-
-    // If we are fast forwarding or rewind, stop the position updater
-    iPositionUpdater->Cancel();
-
-    if ( iVideoPlayer )
-        {
-        // Stop video and set the state to stop
-        iVideoPlayer->Stop();
-        iCurrentState = EBavpStopped;
-
-        iClipInfo->iPosition = 0;
-        TRAP_IGNORE
-            (
-            iVideoPlayer->SetPositionL( iClipInfo->iPosition );
-            iVideoPlayer->RefreshFrameL();
-            );
-        }
-
-    // The videoPlayer can play audio-only content, so we need to updateDisplay
-    // to show the audio stop animation
-    if ( !IsClipVideo() )
-        {
-        iBavpView->UpdateView();
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::PlayL
-// Plays video
-//
-// NOTE: The MMF throws an error when interrupted by a telephone call, so
-// iCurrentState=EBavpBadContent and PlayL called after call is done.
-// -----------------------------------------------------------------------------
-void CBavpControllerVideo::PlayL()
-    {
-    Log( EFalse, _L("CBavpControllerVideo::PlayL") );
-
-    if ( !iVideoPlayer || !iPlayerInitialized )
-        {
-        // 1) Live-stream clip that was stopped will close the iVideoPlayer and
-        // need buffering, because Play() will have to be reinitialized with
-        // server.
-        // 2) The initialization of multiple video instances and a single
-        // playback hardware/software (ie Julie H/W) will cause the second plus
-        // instances to return an error. HandleError() will display stop animation,
-        // and if the user selects PlayL(), and the iVideoPlayer needs to be
-        // reinitialized.
-        //
-        // The buffering animation will be stopped, when MvpuoPrepareComplete()
-        // is called.
-        iCurrentState = EBavpBuffering;
-        iBavpView->UpdateView();
-        Log( EFalse, _L("PlayL - Calling InitVideoPlayerL()") );
-
-        // This calls OpenUrlL or OpenFileL, which will call iVideoPlayer->Play
-        InitVideoPlayerL();
-        return;
-        }
-
-    if ( iCurrentState == EBavpPaused ||
-         iCurrentState == EBavpFastForwarding ||
-         iCurrentState == EBavpRewinding )
-        {
-        // If we are fast forwarding or rewind, pause
-        if ( iPositionUpdater->IsActive() )
-            {
-            // PauseL stops the PositionUpdater
-            PauseL();
-            }
-
-        // We are resuming play and the clip is seekable, get the last
-        // position and adjust the last position, if needed
-        if ( iClipInfo->iPosition >=
-             iClipInfo->iDurationInSeconds.Int64() - KBavpOneSecond )
-            {
-            // Take back one second if too near end of clip
-            TTimeIntervalMicroSeconds adjustPosition =
-                iClipInfo->iPosition.Int64() - KBavpOneSecond;
-
-            // Negative value is not allowed, use beginning of clip
-            if ( adjustPosition.Int64() < 0 )
-                {
-                adjustPosition = 0;
-                }
-
-            // Use the adjusted position
-            iClipInfo->iPosition = adjustPosition;
-            }
-        }
-    else
-        {
-        // Handle all other states, EBavpStopped, EBavpPlayComplete,
-        // EBavpRewindComplete, EBavpFastForwardComplete, EBavpBadContent
-        iClipInfo->iPosition = 0;
-        }
-
-    if ( IsClipOnDemand() && iCurrentState == EBavpStopped )
-        {
-        // On-demand that was stopped will need buffering,
-        // because Play() will have to be reinitialized with server.
-        // The buffering animation is stopped, for on-demand when
-        // MvloLoadingComplete() is called
-        iCurrentState = EBavpBuffering;
-        Log( EFalse, _L("PlayL - Set EBavpBuffering") );
-        }
-    else
-        {
-        // Set state and update view to stop any animations running
-        iCurrentState = EBavpPlaying;
-        Log( EFalse, _L("PlayL - Set EBavpPlaying") );
-        }
-
-    iBavpView->UpdateView();
-
-    iVideoPlayer->SetPositionL( iClipInfo->iPosition );
-    iVideoPlayer->Play();
-  // ETwelveOClock: Timer tick is on the second - from Symbian
-  if (!iBackLightUpdater->IsActive())
-    {
-    iBackLightUpdater->Start( ETwelveOClock, this );
-    }
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::PauseL
-// Pauses video while playing. Saves the last position, if seekable content.
-// -----------------------------------------------------------------------------
-void CBavpControllerVideo::PauseL()
-    {
-    Log( EFalse, _L("CBavpControllerVideo::PauseL") );
-
-    // If the position updater is running, stop it
-    iPositionUpdater->Cancel();
-
-    if ( iVideoPlayer )
-        {
-    //disable screensaver
-    iBackLightUpdater->Cancel();
-        if ( IsClipSeekable() )
-            {
-            // Seekable content, save position for possible resume
-            iVideoPlayer->PauseL();
-            iClipInfo->iPosition = iVideoPlayer->PositionL();
-            iCurrentState = EBavpPaused;
-            }
-        else
-            {
-            // Not seekable content, i.e. Live stream
-            iVideoPlayer->Stop();
-            iClipInfo->iPosition = 0;
-            iVideoPlayer->SetPositionL( iClipInfo->iPosition );
-            iCurrentState = EBavpStopped;
-            }
-        }
-    // The videoPlayer can play audio-only content, so we need to updateDisplay
-    // to show the audio paused animation
-    if ( !IsClipVideo() )
-        {
-        iBavpView->UpdateView();
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerAudio::FastForwardL
-// Fast forwards the video. This is only called on seekable and local file
-// content.
-// -----------------------------------------------------------------------------
-void CBavpControllerVideo::FastForwardL()
-    {
-    // Check that the content can be Fast Forwarded, this is used when media key
-    // is pressed. We don't allow the user to select FF from Option Menu, if this
-    // condition is not already meet.
-    if ( !IsClipSeekable() && !IsClipLocalMedia() )
-        {
-        return;
-        }
-
-    // If playing, pause it (PauseL stops the PositionUpdater)
-    if ( iCurrentState == EBavpPlaying )
-        {
-        PauseL();
-        }
-
-    iCurrentState = EBavpFastForwarding;
-    iPositionUpdater->Start( KInitialDelay, KUpdateFrequency,
-                             TCallBack( &DoFastForwardL, this ) );
-  if (!iBackLightUpdater->IsActive())
-    {
-    iBackLightUpdater->Start( ETwelveOClock, this );
-    }
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerAudio::RewindL
-// Rewinds the video. This is only called on seekable and local file
-// content.
-// -----------------------------------------------------------------------------
-void CBavpControllerVideo::RewindL()
-    {
-    // Check that the content can be Rewound, this is used when media key
-    // is pressed. We don't allow the user to select FF from Option Menu, if this
-    // condition is not already meet.
-    if ( !IsClipSeekable() && !IsClipLocalMedia() )
-        {
-        return;
-        }
-
-    // If playing, pause it (PauseL stops the PositionUpdater)
-    if ( iCurrentState == EBavpPlaying )
-        {
-        PauseL();
-        }
-
-    iCurrentState = EBavpRewinding;
-    iPositionUpdater->Start( KInitialDelay, KUpdateFrequency,
-                             TCallBack( &DoRewindL, this ) );
-  if (!iBackLightUpdater->IsActive())
-    {
-    iBackLightUpdater->Start( ETwelveOClock, this );
-    }
-
-    }
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::OpenVideoUrlL
-// Handles request to open the url link
-// -----------------------------------------------------------------------------
-void CBavpControllerVideo::OpenVideoUrlL()
-    {
-    Log( EFalse, _L("CBavpControllerVideo::OpenUrlL() entered") );
-
-    // Note: Play() is called from MvpuoPrepareComplete()
-    iVideoPlayer->OpenUrlL( *iClipInfo->iUrl, iAccessPtId,
-                            KNullDesC8, KRopControllerUid );
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::OpenVideoFileL
-// Open a video file
-// -----------------------------------------------------------------------------
-void CBavpControllerVideo::OpenVideoFileL()
-    {
-    Log( EFalse, _L("CBavpControllerVideo::OpenFileL() ") );
-
-    // Note: Play() is called from MvpuoPrepareComplete()
-    iVideoPlayer->OpenFileL( *iClipInfo->iFileName );
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::SetPlayerVolume
-// -----------------------------------------------------------------------------
-void CBavpControllerVideo::SetPlayerVolume( TInt aVolume )
-    {
-    if ( iVideoPlayer && iPlayerInitialized )
-        {
-        // The CR volume is 0-10, convert to Video player volume 0-100
-        TInt playerVolume = ( aVolume * iPlayerMaxVolume ) / KCRVolumeMax;
-
-        // Set Video player volume
-        TRAP_IGNORE( iVideoPlayer->SetVolumeL( playerVolume) );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::GetPlayerVolume
-// -----------------------------------------------------------------------------
-TInt CBavpControllerVideo::GetPlayerVolume()
-    {
-    TInt playerVolume( 0 );
-    TInt CRVolume( 0 );
-
-    if ( iVideoPlayer && iPlayerInitialized )
-        {
-        // Video player returns 0-100
-        playerVolume = iVideoPlayer->Volume();
-
-        // Convert to CR volume 0-10
-        CRVolume = ( playerVolume * KCRVolumeMax ) / iPlayerMaxVolume;
-        }
-
-    return CRVolume;
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::MvpuoOpenComplete
-// Notification to the client that the opening of the video clip has completed,
-// successfully, or otherwise.
-// -----------------------------------------------------------------------------
-void CBavpControllerVideo::MvpuoOpenComplete( TInt aError )
-    {
-    Log( EFalse, _L("MvpuoOpenComplete err="), aError );
-
-    if ( aError != KErrNone )
-        {
-        // Got an error from the MMF callback
-        HandleError( aError );
-        }
-    else
-        {
-        // No error opening player, proceed with preparing player
-        iVideoPlayer->Prepare();
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::MvpuoPrepareComplete
-// Notification to the client that the opening of the video clip has been prepared
-// successfully, or otherwise.
-// This callback is called in response to a call to CVideoPlayerUtility::Prepare().
-// -----------------------------------------------------------------------------
-void CBavpControllerVideo::MvpuoPrepareComplete( TInt aError )
-    {
-    Log( EFalse, _L("MvpuoPrepareComplete err="), aError );
-
-    if ( aError != KErrNone )
-        {
-        HandleError( aError );
-        }
-    else
-        {
-        // Proceed with initialization and playing content
-
-        // Video player initialized and ready for interaction,
-        // volume, option menus, etc...
-        iPlayerInitialized = ETrue;
-
-        // Cleanup clip info
-        iClipInfo->ReInit();
-
-        // Handle all of the leaving methods of preparing the clip and
-        // controller. Reading meta data, max volume, ...
-        TRAP_IGNORE( PrepareCompleteL() );
-
-        // Full screen display mode, rotate if necessary
-        if ( IsClipFullScreen() )
-            {
-            RotateScreen90();
-            }
-
-        // Use the iCurrrentVolume, everytime we "set" the volume in the
-        // BavpController we check for Profile setting, so we can use it here
-        SetPlayerVolume( iCurrentVolume );
-
-        // Start to play this media object
-        iVideoPlayer->Play();
-
-        // Stop the buffering animation now, to avoid screen flicker
-        iCurrentState = EBavpPlaying;
-        iBavpView->UpdateView();
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::MvpuoPlayComplete
-// Notification that video playback has completed. This is not called if playback
-// is explicitly stopped by calling Stop.
-// -----------------------------------------------------------------------------
-void CBavpControllerVideo::MvpuoPlayComplete( TInt aError )
-    {
-    Log( EFalse, _L("MvpuoPlayComplete err="), aError );
-
-    if ( aError != KErrNone )
-        {
-        // Got an error from the MMF callback
-        HandleError( aError );
-        }
-    else
-        {
-        // No error, proceed with playing complete
-        iCurrentState = EBavpPlayComplete;
-        iClipInfo->iPosition = 0;
-
-        // Set the previous call state to complete, this will ensure we
-        // don't try to replay the content if a call comes in
-        iPreCallState = EBavpPlayComplete;
-
-        // Revert back to normal screen if it's full screen display
-        if ( IsClipFullScreen() )
-            {
-            TRAP_IGNORE
-                (
-                RevertToNormalScreenL();
-                iBavpView->ControllerStateChangedL();
-                );
-            }
-
-        iBavpView->UpdateView();
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::MvpuoEvent
-// General event notification from controller. These events are specified by the
-// supplier of the controller. Take the user initiaiated event, like selecting
-// "pause" from the menu item, or another MMF event and convert into a
-// "video plugin error", so we can process in HandleError().
-// -----------------------------------------------------------------------------
-void CBavpControllerVideo::MvpuoEvent( const TMMFEvent& aEvent )
-    {
-    Log( EFalse, _L("MvpuoEvent aEvent.iErrorCode="), aEvent.iErrorCode );
-
-    if ( aEvent.iEventType == KMMFEventCategoryVideoPlayerGeneralError )
-        {
-        HandleError( aEvent.iErrorCode );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::MvloLoadingComplete
-// Notification that video clip loading/rebuffering has started
-// -----------------------------------------------------------------------------
-void CBavpControllerVideo::MvloLoadingStarted()
-    {
-    Log( EFalse, _L("MvloLoadingStarted") );
-
-    if ( iCurrentState !=  EBavpPlaying )
-        {
-        // Start the buffering animation
-        iCurrentState = EBavpBuffering;
-        iBavpView->UpdateView();
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::MvloLoadingComplete
-// Notification that video clip loading/rebuffering has completed
-// and starting to play
-// -----------------------------------------------------------------------------
-void CBavpControllerVideo::MvloLoadingComplete()
-    {
-    Log( EFalse, _L("MvloLoadingComplete") );
-
-  if ( !iBackLightUpdater->IsActive() )
-    {
-    iBackLightUpdater->Start( ETwelveOClock, this );
-    }
-    // Stop the buffering animation
-    iCurrentState = EBavpPlaying;
-    iBavpView->UpdateView();
-    }
-
- // -----------------------------------------------------------------------------
-// CBavpControllerVideo::getPositionL
-// To get the current position of the clip
-// -----------------------------------------------------------------------------
-
- TTimeIntervalMicroSeconds CBavpControllerVideo::getPositionL()
-    {
-    if ( iVideoPlayer )
-    {
-        return iVideoPlayer->PositionL();
-    }
-    return NULL;
-    }
-
- // -----------------------------------------------------------------------------
-// CBavpControllerVideo::setPositionL
-// To set the position of the clip
-// -----------------------------------------------------------------------------
-
-  void CBavpControllerVideo::setPositionL(TTimeIntervalMicroSeconds val)
-    {
-        if ( iVideoPlayer )
-        {
-            if ( !IsClipSeekable() && !IsClipLocalMedia() )
-            {
-                return;
-            }
-
-            TBool didWePause = EFalse;
-            // If playing, pause it (PauseL stops the PositionUpdater)
-            if ( iCurrentState == EBavpPlaying )
-            {
-                PauseL();
-                didWePause = ETrue;
-            }
-
-            if ( (val > iClipInfo->iDurationInSeconds ) || (val < 0) )
-            {
-                val = 0;
-            }
-
-            iVideoPlayer->SetPositionL(val);
-            iVideoPlayer->RefreshFrameL();
-            iClipInfo->iPosition = val;
-            if ( didWePause )
-            {
-                PlayL();
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::Beat
-// Call HandleScreenSaver
-// -----------------------------------------------------------------------------
-//
-void CBavpControllerVideo::Beat()
-  {
-  HandleScreenSaver();
-  }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::Synchronize
-// Call HandleScreenSaver
-// -----------------------------------------------------------------------------
-//
-void CBavpControllerVideo::Synchronize()
-  {
-  HandleScreenSaver();
-  }
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::HandleScreenSaver
-// To disable backlight for screensaver if needed
-// -----------------------------------------------------------------------------
-//
-void CBavpControllerVideo::HandleScreenSaver()
-{
-   Log( EFalse, _L("CBavpControllerVideo::HandleScreenSaver() entered" ));
-
-    //disable screensaver when it's in playing|forwarding|backwarding mode
-    if ( NoScreenSaverMode() && iVideoPlayer )
-      {
-      User::ResetInactivityTime();
-      }
-}
-
-TBool CBavpControllerVideo::NoScreenSaverMode()
-{
-  return (iCurrentState == EBavpPlaying ||
-        iCurrentState == EBavpFastForwarding ||
-        iCurrentState == EBavpRewinding);
-}
-
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::SetDefaultAspectRatioL
-// Sets default aspect ratio (code is taken from mmplayer)
-// -----------------------------------------------------------------------------
-/*
- * This function was added for consistency with mmplayer.
- * Not used is 5.0 (tube) since we want to preserve correct 
- * aspect ratio and this function will stretch the video to
- * the full screen, which due to tube screen size doesn't match
- * to correct ratio.
- * If needed it should be called in  WaitForScreenSwitchL() after 
- * screen mode changed.
- */
-void CBavpControllerVideo::SetDefaultAspectRatioL()
-{
-  TSize frameSize;
-  TRect rect = iBavpView->CoeControl().Rect(); 
-  
-  if ( iVideoPlayer ) {
-
-    iVideoPlayer->VideoFrameSizeL( frameSize );
-  }
-
-  if ( frameSize.iWidth > 0 && frameSize.iHeight > 0) {
- 
-    TMMFScalingType scalingType = EMMFNatural;
- 
-    TReal32 videoAspectRatio = (TReal)frameSize.iWidth /
-                                (TReal)frameSize.iHeight;
-    TReal32 dispAspectRatio = (TReal)rect.Width() / (TReal)rect.Height(); 
- 
- // Choose the scaling type through the rule:
- // videoAspectRatio - iDisplayAspectRatio > 0.1 ==> zoom
- // videoAspectRatio - iDisplayAspectRatio < 0.1 ==> stretch
- // videoAspectRatio = iDisplayAspectRatio ==> natural
-     if ( videoAspectRatio - dispAspectRatio > 0.1 ) {
-       scalingType = EMMFZoom;
-     }
-     else if ( videoAspectRatio != dispAspectRatio ) {
-       scalingType = EMMFStretch;
-     }
-
-     TMMFMessageDestinationPckg destinationPckg(KUidInterfaceMMFControllerScalingMsg );
-      
-     TPckgBuf<TInt> scaleTypePckg( scalingType );
-     
-     iVideoPlayer->CustomCommandSync( destinationPckg,
-                                       EMMFSetScalingType,
-                                       scaleTypePckg,
-                                       KNullDesC8 );
-     iVideoPlayer->RefreshFrameL();
-
-   }
-}
-
-void CBavpControllerVideo::HandleInComingCallL()
-
-{
-	if ( IsClipFullScreen() )
-      {
-      RevertToNormalScreenL();
-      iBavpView->ControllerStateChangedL();
-      }	
-}
-
-// -----------------------------------------------------------------------------
-// CBavpControllerVideo::HandleGesture
-// -----------------------------------------------------------------------------
-TBool CBavpControllerVideo::HandleGesture(TGestureEvent *gesture)
-{
-    TBool ret = EFalse;
-    TGestureCode gtype =  gesture->Code(EAxisBoth); 
-    switch(gtype)
-        {
-        case EGestureTap:
-            {
-                if (IsClipFullScreen())
-                    {
-                    ToggleScreen();
-                    ret = ETrue;
-                    }
-                break;
-            }
-        }
-    return ret;
-}
-//  End of File