src/3rdparty/phonon/mmf/videoplayer_surface.cpp
changeset 33 3e2da88830cd
parent 22 79de32ba3296
--- a/src/3rdparty/phonon/mmf/videoplayer_surface.cpp	Tue Jul 06 15:10:48 2010 +0300
+++ b/src/3rdparty/phonon/mmf/videoplayer_surface.cpp	Wed Aug 18 10:37:55 2010 +0300
@@ -59,7 +59,8 @@
 
 void MMF::SurfaceVideoPlayer::videoWindowSizeChanged()
 {
-    updateScaleFactors(m_videoOutput->videoWindowSize());
+    if (m_videoOutput)
+        updateScaleFactors(m_videoOutput->videoWindowSize());
 }
 
 
@@ -80,6 +81,8 @@
 
 void MMF::SurfaceVideoPlayer::initVideoOutput()
 {
+    Q_ASSERT(m_videoOutput);
+
     bool connected = connect(
         m_videoOutput, SIGNAL(videoWindowSizeChanged()),
         this, SLOT(videoWindowSizeChanged())
@@ -104,6 +107,9 @@
 
 void MMF::SurfaceVideoPlayer::handleParametersChanged(VideoParameters parameters)
 {
+    TRACE_CONTEXT(SurfaceVideoPlayer::handleParametersChanged, EVideoApi);
+    TRACE_ENTRY("parameters 0x%x", parameters.operator int());
+
     TRect rect;
     if (m_videoOutput) {
         m_videoOutput->dump();
@@ -115,23 +121,14 @@
     if (player) {
         int err = KErrNone;
         if (parameters & WindowHandle) {
-            if (m_displayWindow)
-                player->RemoveDisplayWindow(*m_displayWindow);
-
-            RWindow *window = static_cast<RWindow *>(m_window);
-            if (window) {
-                window->SetBackgroundColor(TRgb(0, 0, 0, 255));
-                TRAP(err, player->AddDisplayWindowL(m_wsSession, m_screenDevice, *window, rect, rect));
-                if (KErrNone != err) {
-                    setError(tr("Video display error"), err);
-                    window = 0;
-                }
-            }
-            m_displayWindow = window;
+            removeDisplayWindow();
+            addDisplayWindow(rect);
         }
 
         if (KErrNone == err) {
             if (parameters & ScaleFactors) {
+                if (!m_displayWindow)
+                    addDisplayWindow(rect);
                 Q_ASSERT(m_displayWindow);
                 TRAP(err, player->SetVideoExtentL(*m_displayWindow, rect));
                 if (KErrNone == err)
@@ -143,6 +140,45 @@
             }
         }
     }
+
+    TRACE_EXIT_0();
+}
+
+void MMF::SurfaceVideoPlayer::addDisplayWindow(const TRect &rect)
+{
+    TRACE_CONTEXT(SurfaceVideoPlayer::addDisplayWindow, EVideoApi);
+    TRACE_ENTRY("rect %d %d - %d %d", rect.iTl.iX, rect.iTl.iY, rect.iBr.iX, rect.iBr.iY);
+
+    Q_ASSERT(!m_displayWindow);
+    RWindow *window = static_cast<RWindow *>(m_window);
+
+    TRACE("window 0x%08x", window);
+
+    if (window) {
+        window->SetBackgroundColor(TRgb(0, 0, 0, 255));
+        CVideoPlayerUtility2 *player = static_cast<CVideoPlayerUtility2 *>(m_player.data());
+        Q_ASSERT(player);
+        TRAPD(err, player->AddDisplayWindowL(m_wsSession, m_screenDevice, *window, rect, rect));
+        if (KErrNone == err)
+            m_displayWindow = window;
+        else
+            setError(tr("Video display error"), err);
+	TRACE("err %d", err);
+    }
+
+    TRACE_EXIT_0();
+}
+
+void MMF::SurfaceVideoPlayer::removeDisplayWindow()
+{
+    TRACE_CONTEXT(SurfaceVideoPlayer::removeDisplayWindow, EVideoApi);
+    TRACE("player 0x%08x window 0x%08x", m_player.data(), m_displayWindow);
+
+    CVideoPlayerUtility2 *player = static_cast<CVideoPlayerUtility2 *>(m_player.data());
+    if (player && m_displayWindow) {
+        player->RemoveDisplayWindow(*m_displayWindow);
+        m_displayWindow = 0;
+    }
 }
 
 QT_END_NAMESPACE