src/3rdparty/phonon/mmf/videoplayer_surface.cpp
changeset 33 3e2da88830cd
parent 22 79de32ba3296
equal deleted inserted replaced
30:5dc02b23752f 33:3e2da88830cd
    57 // Public functions
    57 // Public functions
    58 //-----------------------------------------------------------------------------
    58 //-----------------------------------------------------------------------------
    59 
    59 
    60 void MMF::SurfaceVideoPlayer::videoWindowSizeChanged()
    60 void MMF::SurfaceVideoPlayer::videoWindowSizeChanged()
    61 {
    61 {
    62     updateScaleFactors(m_videoOutput->videoWindowSize());
    62     if (m_videoOutput)
       
    63         updateScaleFactors(m_videoOutput->videoWindowSize());
    63 }
    64 }
    64 
    65 
    65 
    66 
    66 //-----------------------------------------------------------------------------
    67 //-----------------------------------------------------------------------------
    67 // Private functions
    68 // Private functions
    78     m_player.reset(player);
    79     m_player.reset(player);
    79 }
    80 }
    80 
    81 
    81 void MMF::SurfaceVideoPlayer::initVideoOutput()
    82 void MMF::SurfaceVideoPlayer::initVideoOutput()
    82 {
    83 {
       
    84     Q_ASSERT(m_videoOutput);
       
    85 
    83     bool connected = connect(
    86     bool connected = connect(
    84         m_videoOutput, SIGNAL(videoWindowSizeChanged()),
    87         m_videoOutput, SIGNAL(videoWindowSizeChanged()),
    85         this, SLOT(videoWindowSizeChanged())
    88         this, SLOT(videoWindowSizeChanged())
    86     );
    89     );
    87     Q_ASSERT(connected);
    90     Q_ASSERT(connected);
   102     parametersChanged(WindowHandle);
   105     parametersChanged(WindowHandle);
   103 }
   106 }
   104 
   107 
   105 void MMF::SurfaceVideoPlayer::handleParametersChanged(VideoParameters parameters)
   108 void MMF::SurfaceVideoPlayer::handleParametersChanged(VideoParameters parameters)
   106 {
   109 {
       
   110     TRACE_CONTEXT(SurfaceVideoPlayer::handleParametersChanged, EVideoApi);
       
   111     TRACE_ENTRY("parameters 0x%x", parameters.operator int());
       
   112 
   107     TRect rect;
   113     TRect rect;
   108     if (m_videoOutput) {
   114     if (m_videoOutput) {
   109         m_videoOutput->dump();
   115         m_videoOutput->dump();
   110         const QSize size = m_videoOutput->videoWindowSize();
   116         const QSize size = m_videoOutput->videoWindowSize();
   111         rect.SetSize(TSize(size.width(), size.height()));
   117         rect.SetSize(TSize(size.width(), size.height()));
   113 
   119 
   114     CVideoPlayerUtility2 *player = static_cast<CVideoPlayerUtility2 *>(m_player.data());
   120     CVideoPlayerUtility2 *player = static_cast<CVideoPlayerUtility2 *>(m_player.data());
   115     if (player) {
   121     if (player) {
   116         int err = KErrNone;
   122         int err = KErrNone;
   117         if (parameters & WindowHandle) {
   123         if (parameters & WindowHandle) {
   118             if (m_displayWindow)
   124             removeDisplayWindow();
   119                 player->RemoveDisplayWindow(*m_displayWindow);
   125             addDisplayWindow(rect);
   120 
       
   121             RWindow *window = static_cast<RWindow *>(m_window);
       
   122             if (window) {
       
   123                 window->SetBackgroundColor(TRgb(0, 0, 0, 255));
       
   124                 TRAP(err, player->AddDisplayWindowL(m_wsSession, m_screenDevice, *window, rect, rect));
       
   125                 if (KErrNone != err) {
       
   126                     setError(tr("Video display error"), err);
       
   127                     window = 0;
       
   128                 }
       
   129             }
       
   130             m_displayWindow = window;
       
   131         }
   126         }
   132 
   127 
   133         if (KErrNone == err) {
   128         if (KErrNone == err) {
   134             if (parameters & ScaleFactors) {
   129             if (parameters & ScaleFactors) {
       
   130                 if (!m_displayWindow)
       
   131                     addDisplayWindow(rect);
   135                 Q_ASSERT(m_displayWindow);
   132                 Q_ASSERT(m_displayWindow);
   136                 TRAP(err, player->SetVideoExtentL(*m_displayWindow, rect));
   133                 TRAP(err, player->SetVideoExtentL(*m_displayWindow, rect));
   137                 if (KErrNone == err)
   134                 if (KErrNone == err)
   138                     TRAP(err, player->SetWindowClipRectL(*m_displayWindow, rect));
   135                     TRAP(err, player->SetWindowClipRectL(*m_displayWindow, rect));
   139                 if (KErrNone == err)
   136                 if (KErrNone == err)
   141                 if (KErrNone != err)
   138                 if (KErrNone != err)
   142                     setError(tr("Video display error"), err);
   139                     setError(tr("Video display error"), err);
   143             }
   140             }
   144         }
   141         }
   145     }
   142     }
       
   143 
       
   144     TRACE_EXIT_0();
       
   145 }
       
   146 
       
   147 void MMF::SurfaceVideoPlayer::addDisplayWindow(const TRect &rect)
       
   148 {
       
   149     TRACE_CONTEXT(SurfaceVideoPlayer::addDisplayWindow, EVideoApi);
       
   150     TRACE_ENTRY("rect %d %d - %d %d", rect.iTl.iX, rect.iTl.iY, rect.iBr.iX, rect.iBr.iY);
       
   151 
       
   152     Q_ASSERT(!m_displayWindow);
       
   153     RWindow *window = static_cast<RWindow *>(m_window);
       
   154 
       
   155     TRACE("window 0x%08x", window);
       
   156 
       
   157     if (window) {
       
   158         window->SetBackgroundColor(TRgb(0, 0, 0, 255));
       
   159         CVideoPlayerUtility2 *player = static_cast<CVideoPlayerUtility2 *>(m_player.data());
       
   160         Q_ASSERT(player);
       
   161         TRAPD(err, player->AddDisplayWindowL(m_wsSession, m_screenDevice, *window, rect, rect));
       
   162         if (KErrNone == err)
       
   163             m_displayWindow = window;
       
   164         else
       
   165             setError(tr("Video display error"), err);
       
   166 	TRACE("err %d", err);
       
   167     }
       
   168 
       
   169     TRACE_EXIT_0();
       
   170 }
       
   171 
       
   172 void MMF::SurfaceVideoPlayer::removeDisplayWindow()
       
   173 {
       
   174     TRACE_CONTEXT(SurfaceVideoPlayer::removeDisplayWindow, EVideoApi);
       
   175     TRACE("player 0x%08x window 0x%08x", m_player.data(), m_displayWindow);
       
   176 
       
   177     CVideoPlayerUtility2 *player = static_cast<CVideoPlayerUtility2 *>(m_player.data());
       
   178     if (player && m_displayWindow) {
       
   179         player->RemoveDisplayWindow(*m_displayWindow);
       
   180         m_displayWindow = 0;
       
   181     }
   146 }
   182 }
   147 
   183 
   148 QT_END_NAMESPACE
   184 QT_END_NAMESPACE
   149 
   185