videoplayback/videoplaybackviews/src/mpxvideoplaybackdisplayhandler.cpp
branchRCL_3
changeset 9 5294c000a26d
parent 8 ce5ada96ab30
child 10 112a725ff2c2
--- 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 <sysutil.h>
 #include <s32file.h>
@@ -26,14 +28,19 @@
 #include "mpxvideoplaybackdisplayhandler.h"
 #include "mpxvideoregion.h"
 #include "mpxvideoplaybackviewfiledetails.h"
+#include "mpxvideoplaybackcontainer.h"
+#include "mpxcommonvideoplaybackview.hrh"
 #include <mpxvideoplaybackdefs.h>
 
 
 _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<TBool>( KMPXCommandGeneralDoSync, ETrue );
+    cmd->SetTObjectValueL<TBool>( KMPXCommandPlaybackGeneralNoBuffer, ETrue );
     cmd->SetTObjectValueL<TInt>( KMPXCommandGeneralId, KMPXMediaIdVideoPlayback );
     cmd->SetTObjectValueL<TMPXVideoPlaybackCommand>( 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<TMPXVideoDisplayCommand>(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();
     }