diff -r ce5ada96ab30 -r 5294c000a26d videoplayback/videoplaybackviews/src/mpxvideoplaybackdisplayhandler.cpp --- a/videoplayback/videoplaybackviews/src/mpxvideoplaybackdisplayhandler.cpp Fri Mar 12 15:43:00 2010 +0200 +++ b/videoplayback/videoplaybackviews/src/mpxvideoplaybackdisplayhandler.cpp Mon Mar 15 12:40:47 2010 +0200 @@ -15,7 +15,9 @@ * */ -// Version : %version: 10 % + +// Version : %version: 11 % + #include #include @@ -26,14 +28,19 @@ #include "mpxvideoplaybackdisplayhandler.h" #include "mpxvideoregion.h" #include "mpxvideoplaybackviewfiledetails.h" +#include "mpxvideoplaybackcontainer.h" +#include "mpxcommonvideoplaybackview.hrh" #include _LIT( KAspectRatioFile, "c:\\private\\200159b2\\mpxvideoplayer_aspect_ratio.dat" ); -CMPXVideoPlaybackDisplayHandler::CMPXVideoPlaybackDisplayHandler( MMPXPlaybackUtility* aPlayUtil ) +CMPXVideoPlaybackDisplayHandler::CMPXVideoPlaybackDisplayHandler( + MMPXPlaybackUtility* aPlayUtil, + CMPXVideoPlaybackContainer* aContainer) : iPlaybackUtility( aPlayUtil ) + , iContainer( aContainer ) #ifdef SYMBIAN_BUILD_GCE , iScaleWidth( 100.0f ) , iScaleHeight( 100.0f ) @@ -65,12 +72,13 @@ } CMPXVideoPlaybackDisplayHandler* -CMPXVideoPlaybackDisplayHandler::NewL( MMPXPlaybackUtility* aPlayUtil ) +CMPXVideoPlaybackDisplayHandler::NewL( MMPXPlaybackUtility* aPlayUtil, + CMPXVideoPlaybackContainer* aContainer ) { MPX_ENTER_EXIT(_L("CMPXVideoPlaybackDisplayHandler::NewL()")); CMPXVideoPlaybackDisplayHandler* self = - new(ELeave) CMPXVideoPlaybackDisplayHandler( aPlayUtil ); + new(ELeave) CMPXVideoPlaybackDisplayHandler( aPlayUtil, aContainer ); CleanupStack::PushL( self ); self->ConstructL(); @@ -91,9 +99,8 @@ // CMPXVideoPlaybackDisplayHandler::CreateDisplayWindowL() // ------------------------------------------------------------------------------------------------- // -void CMPXVideoPlaybackDisplayHandler::CreateDisplayWindowL( - CWsScreenDevice& aScreenDevice, - RWindow& aWin ) +void CMPXVideoPlaybackDisplayHandler::CreateDisplayWindowL( CWsScreenDevice& aScreenDevice, + RWindow& aWin ) { MPX_ENTER_EXIT(_L("CMPXVideoPlaybackDisplayHandler::CreateDisplayWindowL()")); @@ -114,6 +121,7 @@ CleanupStack::PushL( cmd ); cmd->SetTObjectValueL( KMPXCommandGeneralDoSync, ETrue ); + cmd->SetTObjectValueL( KMPXCommandPlaybackGeneralNoBuffer, ETrue ); cmd->SetTObjectValueL( KMPXCommandGeneralId, KMPXMediaIdVideoPlayback ); cmd->SetTObjectValueL( KMPXMediaVideoPlaybackCommand, EPbCmdSurfaceRemoved ); @@ -127,13 +135,22 @@ // CMPXVideoPlaybackDisplayHandler::RemoveDisplayWindow() // ------------------------------------------------------------------------------------------------- // -void CMPXVideoPlaybackDisplayHandler::RemoveDisplayWindow() +void CMPXVideoPlaybackDisplayHandler::RemoveDisplayWindow( TBool aSignalPlaybackPlugin ) { - MPX_ENTER_EXIT(_L("CMPXVideoPlaybackDisplayHandler::RemoveDisplayWindow()")); + MPX_ENTER_EXIT(_L("CMPXVideoPlaybackDisplayHandler::RemoveDisplayWindow()"), + _L("aSignalPlaybackPlugin = %d"), aSignalPlaybackPlugin ); #ifdef SYMBIAN_BUILD_GCE if ( iVideoDisplay ) { + // + // Surface is being removed, signal the container so it can reset the background + // + if ( iContainer ) + { + iContainer->HandleCommandL( EMPXPbvSurfaceRemoved ); + } + delete iVideoDisplay; iVideoDisplay = NULL; } @@ -141,29 +158,32 @@ if ( ! iSurfaceId.IsNull() ) { - // - // Signal to the Playback Plugin that the surface has been removed - // - TRAP_IGNORE( SignalSurfaceRemovedL() ); + if ( aSignalPlaybackPlugin ) + { + // + // Signal to the Playback Plugin that the surface has been removed + // + TRAP_IGNORE( SignalSurfaceRemovedL() ); + } iSurfaceId = TSurfaceId::CreateNullId(); } } // ------------------------------------------------------------------------------------------------- -// CMPXVideoPlaybackDisplayHandler::HandleVideoDisplayMessageL() +// CMPXVideoPlaybackDisplayHandler::HandleVideoDisplaySyncMessageL() // ------------------------------------------------------------------------------------------------- // -TMPXVideoDisplayCommand -CMPXVideoPlaybackDisplayHandler::HandleVideoDisplayMessageL( CMPXMessage* aMessage ) +void +CMPXVideoPlaybackDisplayHandler::HandleVideoDisplaySyncMessageL( CMPXMessage* aMessage ) { - MPX_ENTER_EXIT(_L("CMPXVideoPlaybackDisplayHandler::HandleVideoDisplayMessage()")); + MPX_ENTER_EXIT(_L("CMPXVideoPlaybackDisplayHandler::HandleVideoDisplaySyncMessageL()")); TMPXVideoDisplayCommand message = ( *(aMessage->Value(KMPXMediaVideoDisplayCommand)) ); MPX_DEBUG( - _L("CMPXVideoPlaybackDisplayHandler::HandleVideoDisplayMessageL() message = %d"), message ); + _L("CMPXVideoPlaybackDisplayHandler::HandleVideoDisplaySyncMessageL() message = %d"), message ); switch ( message ) { @@ -185,23 +205,18 @@ } case EPbMsgVideoRemoveDisplayWindow: { - if ( iVideoDisplay ) - { - delete iVideoDisplay; - iVideoDisplay = NULL; - } - - iSurfaceId = TSurfaceId::CreateNullId(); - + RemoveDisplayWindow( EFalse ); break; } #endif } - return message; + // + // Signal Sync Message handling is complete + // + iPlaybackUtility->CommandL( EPbCmdSyncMsgComplete ); } - // ------------------------------------------------------------------------------------------------- // CMPXVideoPlaybackDisplayHandler::SetAspectRatioL() // ------------------------------------------------------------------------------------------------- @@ -229,7 +244,6 @@ return aspectRatio; } - // ------------------------------------------------------------------------------------------------- // CMPXVideoPlaybackDisplayHandler::SetDefaultAspectRatioL // ------------------------------------------------------------------------------------------------- @@ -363,7 +377,6 @@ CleanupStack::PopAndDestroy(); } - // ------------------------------------------------------------------------------------------------- // CMPXVideoPlaybackDisplayHandler::LoadAspectRatioL // ------------------------------------------------------------------------------------------------- @@ -427,7 +440,8 @@ TRect cropRect = TRect( aWin->Size() ); - MPX_DEBUG(_L("CMPXVideoPlaybackDisplayHandler::AddDisplayWindowL() cropRect (%d, %d), (%d, %d)"), + MPX_DEBUG( + _L("CMPXVideoPlaybackDisplayHandler::AddDisplayWindowL() cropRect (%d, %d), (%d, %d)"), cropRect.iTl.iX, cropRect.iTl.iY, cropRect.iBr.iX, cropRect.iBr.iY); MPX_TRAPD( dispError, @@ -453,6 +467,11 @@ { iVideoDisplay->SurfaceCreated( iSurfaceId, iCropRect, iAspectRatio, iCropRect ); + if ( iContainer ) + { + iContainer->HandleCommandL( EMPXPbvSurfaceCreated ); + } + iSurfaceCached = EFalse; } } @@ -488,6 +507,11 @@ // Add new surface // iVideoDisplay->SurfaceCreated( iSurfaceId, iCropRect, iAspectRatio, iCropRect ); + + if ( iContainer ) + { + iContainer->HandleCommandL( EMPXPbvSurfaceCreated ); + } } else { @@ -535,6 +559,11 @@ if ( iVideoDisplay ) { + if ( iContainer ) + { + iContainer->HandleCommandL( EMPXPbvSurfaceRemoved ); + } + iVideoDisplay->RemoveSurface(); }