qtmobility/plugins/multimedia/symbian/mmf/mediaplayer/s60videoplayersession.cpp
changeset 14 6fbed849b4f4
parent 11 06b8e2af4411
child 15 1f895d8a5b2b
--- a/qtmobility/plugins/multimedia/symbian/mmf/mediaplayer/s60videoplayersession.cpp	Fri Jun 11 14:26:25 2010 +0300
+++ b/qtmobility/plugins/multimedia/symbian/mmf/mediaplayer/s60videoplayersession.cpp	Wed Jun 23 19:08:38 2010 +0300
@@ -54,43 +54,52 @@
 #include <w32std.h>
 #include <mmf/common/mmfcontrollerframeworkbase.h>
 
-#include <AudioOutput.h>
-#include <MAudioOutputObserver.h>
-
 S60VideoPlayerSession::S60VideoPlayerSession(QMediaService *service)
     : S60MediaPlayerSession(service)
     , m_player(0)
     , m_rect(0, 0, 0, 0)
-    , m_output(QVideoOutputControl::NoOutput)
+//FIXME    , m_output(QVideoOutputControl::NoOutput)
     , m_windowId(0)
     , m_dsaActive(false)
     , m_dsaStopped(false)
     , m_wsSession(CCoeEnv::Static()->WsSession())
     , m_screenDevice(*CCoeEnv::Static()->ScreenDevice())
     , m_window(0)
+    , m_displayWindow(0)
     , m_service(*service)
     , m_aspectRatioMode(Qt::KeepAspectRatio)
     , m_originalSize(1, 1)
-    , m_audioOutput(0)
     , m_audioEndpoint("Default")
-{  
+{
+#ifdef HAS_AUDIOROUTING_IN_VIDEOPLAYER
+    m_audioOutput = 0;
+#endif
+
     resetNativeHandles();
+#ifdef MMF_VIDEO_SURFACES_SUPPORTED
+    QT_TRAP_THROWING(m_player = CVideoPlayerUtility2::NewL(
+        *this,
+        0,
+        EMdaPriorityPreferenceNone
+        ));
+#else
     QT_TRAP_THROWING(m_player = CVideoPlayerUtility::NewL(
-        *this, 
-        0, 
-        EMdaPriorityPreferenceNone, 
-        m_wsSession, 
-        m_screenDevice, 
-        *m_window, 
-        m_rect, 
+        *this,
+        0,
+        EMdaPriorityPreferenceNone,
+        m_wsSession,
+        m_screenDevice,
+        *m_window,
+        m_rect,
         m_rect));
     m_dsaActive = true;
     m_player->RegisterForVideoLoadingNotification(*this);
+#endif // MMF_VIDEO_SURFACES_SUPPORTED
 }
 
 S60VideoPlayerSession::~S60VideoPlayerSession()
 {
-#if !defined(HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER)
+#ifdef HAS_AUDIOROUTING_IN_VIDEOPLAYER
     if (m_audioOutput)
         m_audioOutput->UnregisterObserver(*this);
     delete m_audioOutput;
@@ -101,23 +110,25 @@
 
 void S60VideoPlayerSession::doLoadL(const TDesC &path)
 {
+#ifdef HAS_AUDIOROUTING_IN_VIDEOPLAYER
     // m_audioOutput needs to be reinitialized after MapcInitComplete
     if (m_audioOutput)
         m_audioOutput->UnregisterObserver(*this);
     delete m_audioOutput;
     m_audioOutput = NULL;
-
+#endif
     m_player->OpenFileL(path);
 }
 
 void S60VideoPlayerSession::doLoadUrlL(const TDesC &path)
 {
+#ifdef HAS_AUDIOROUTING_IN_VIDEOPLAYER
     // m_audioOutput needs to be reinitialized after MapcInitComplete
     if (m_audioOutput)
         m_audioOutput->UnregisterObserver(*this);
     delete m_audioOutput;
     m_audioOutput = NULL;
-
+#endif
     m_player->OpenUrlL(path);
 }
 
@@ -136,9 +147,9 @@
 void S60VideoPlayerSession::setVideoRenderer(QObject *videoOutput)
 {
     Q_UNUSED(videoOutput)
-    QVideoOutputControl *videoControl = qobject_cast<QVideoOutputControl *>(m_service.control(QVideoOutputControl_iid));
+/*FIXME    QVideoOutputControl *videoControl = qobject_cast<QVideoOutputControl *>(m_service.control(QVideoOutputControl_iid));
     
-    //Render changes
+    //Renderer changes
     if (m_output != videoControl->output()) {
         
         if (m_output == QVideoOutputControl::WidgetOutput) {
@@ -160,11 +171,12 @@
         m_output = videoControl->output();
         resetVideoDisplay();
     }
+*/
 }
 
 bool S60VideoPlayerSession::resetNativeHandles()
 {
-    QVideoOutputControl* videoControl = qobject_cast<QVideoOutputControl *>(m_service.control(QVideoOutputControl_iid));
+/*FIXME    QVideoOutputControl* videoControl = qobject_cast<QVideoOutputControl *>(m_service.control(QVideoOutputControl_iid));
     WId newId = 0;
     TRect newRect = TRect(0,0,0,0);
     Qt::AspectRatioMode aspectRatioMode = Qt::KeepAspectRatio;
@@ -189,8 +201,9 @@
         Q_ASSERT(newId != 0);
     }
     
-    if (newRect == m_rect &&  newId == m_windowId && aspectRatioMode == m_aspectRatioMode) 
+    if (newRect == m_rect &&  newId == m_windowId && aspectRatioMode == m_aspectRatioMode) {
         return false;
+    }
     
     if (newId) {
         m_rect = newRect;
@@ -200,6 +213,7 @@
         return true;
     }
     return false;
+*/    
 }
 
 bool S60VideoPlayerSession::isVideoAvailable() const
@@ -296,6 +310,42 @@
     m_player->Prepare();
 }
 
+#ifdef MMF_VIDEO_SURFACES_SUPPORTED
+void S60VideoPlayerSession::MvpuoPrepareComplete(TInt aError)
+{
+/*FIXME    setError(aError);
+    TRect rect;
+    S60VideoWidgetControl* widgetControl = qobject_cast<S60VideoWidgetControl *>(m_service.control(QVideoWidgetControl_iid));
+    const QSize size = widgetControl->videoWidgetSize();
+    rect.SetSize(TSize(size.width(), size.height()));
+
+    if (m_displayWindow)
+        m_player->RemoveDisplayWindow(*m_displayWindow);
+
+    RWindow *window = static_cast<RWindow *>(m_window);
+    if (window) {
+        window->SetBackgroundColor(TRgb(0, 0, 0, 255));
+        TRAPD(error,
+            m_player->AddDisplayWindowL(m_wsSession, m_screenDevice, *window, rect, rect);
+            TSize originalSize;
+            m_player->VideoFrameSizeL(originalSize);
+            m_originalSize = QSize(originalSize.iWidth, originalSize.iHeight);
+            m_player->SetScaleFactorL(*window, scaleFactor().first, scaleFactor().second));
+        setError(error);
+    }
+    m_displayWindow = window;
+#ifdef HAS_AUDIOROUTING_IN_VIDEOPLAYER
+    TRAPD(err,
+        m_audioOutput = CAudioOutput::NewL(*m_player);
+        m_audioOutput->RegisterObserverL(*this);
+    );
+    setActiveEndpoint(m_audioEndpoint);
+    setError(err);
+#endif
+    loaded();
+    */
+}
+#else
 void S60VideoPlayerSession::MvpuoPrepareComplete(TInt aError)
 {
     setError(aError);
@@ -312,7 +362,7 @@
 
     setError(err);
     m_dsaActive = true;
-#if !defined(HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER)
+#ifdef HAS_AUDIOROUTING_IN_VIDEOPLAYER
     TRAP(err, 
         m_audioOutput = CAudioOutput::NewL(*m_player);
         m_audioOutput->RegisterObserverL(*this);
@@ -322,6 +372,7 @@
 #endif
     loaded();
 }
+#endif // MMF_VIDEO_SURFACES_SUPPORTED
 
 void S60VideoPlayerSession::MvpuoFrameReady(CFbsBitmap &aFrame, TInt aError)
 {
@@ -355,7 +406,40 @@
     }
     emit metaDataChanged();
 }
-
+#ifdef MMF_VIDEO_SURFACES_SUPPORTED
+void S60VideoPlayerSession::resetVideoDisplay()
+{
+    if (resetNativeHandles()) {
+        TRect rect;
+//FIXME        S60VideoWidgetControl* widgetControl = qobject_cast<S60VideoWidgetControl *>(m_service.control(QVideoWidgetControl_iid));
+//FIXME        const QSize size = widgetControl->videoWidgetSize();
+//FIXME        rect.SetSize(TSize(size.width(), size.height()));
+        if (m_displayWindow)
+            m_player->RemoveDisplayWindow(*m_displayWindow);
+        RWindow *window = static_cast<RWindow *>(m_window);
+        if (window) {
+            window->SetBackgroundColor(TRgb(0, 0, 0, 255));
+            TRAPD(err,
+               m_player->AddDisplayWindowL(m_wsSession,
+                                           m_screenDevice,
+                                           *window,
+                                           rect,
+                                           rect));
+            setError(err);
+        }
+        m_displayWindow = window;
+        if(    mediaStatus() == QMediaPlayer::LoadedMedia
+            || mediaStatus() == QMediaPlayer::StalledMedia
+            || mediaStatus() == QMediaPlayer::BufferingMedia
+            || mediaStatus() == QMediaPlayer::BufferedMedia
+            || mediaStatus() == QMediaPlayer::EndOfMedia) {
+            Q_ASSERT(m_displayWindow != 0);
+            TRAPD(err, m_player->SetScaleFactorL(*m_displayWindow, scaleFactor().first, scaleFactor().second));
+            setError(err);
+        }
+    }
+}
+#else
 void S60VideoPlayerSession::resetVideoDisplay()
 {
     if (resetNativeHandles()) {
@@ -376,6 +460,7 @@
         }
     }
 }
+#endif //MMF_VIDEO_SURFACES_SUPPORTED
 
 void S60VideoPlayerSession::suspendDirectScreenAccess()
 {
@@ -409,7 +494,7 @@
 QString S60VideoPlayerSession::activeEndpoint() const
 {
     QString outputName = QString("Default");
-#if !defined(HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER)
+#ifdef HAS_AUDIOROUTING_IN_VIDEOPLAYER
     if (m_audioOutput) {
         CAudioOutput::TAudioOutputPreference output = m_audioOutput->AudioOutput();
         outputName = qStringFromTAudioOutputPreference(output);
@@ -421,7 +506,7 @@
 QString S60VideoPlayerSession::defaultEndpoint() const
 {
     QString outputName = QString("Default");
-#if !defined(HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER)
+#ifdef HAS_AUDIOROUTING_IN_VIDEOPLAYER
     if (m_audioOutput) {
         CAudioOutput::TAudioOutputPreference output = m_audioOutput->DefaultAudioOutput();
         outputName = qStringFromTAudioOutputPreference(output);
@@ -432,6 +517,7 @@
 
 void S60VideoPlayerSession::setActiveEndpoint(const QString& name)
 {
+#ifdef HAS_AUDIOROUTING_IN_VIDEOPLAYER
     CAudioOutput::TAudioOutputPreference output = CAudioOutput::ENoPreference;
 
     if (name == QString("Default"))
@@ -444,7 +530,7 @@
         output = CAudioOutput::EPrivate;
     else if (name == QString("Speaker"))
         output = CAudioOutput::EPublic;
-#if !defined(HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER)
+
     if (m_audioOutput) {
         TRAPD(err, m_audioOutput->SetAudioOutputL(output));
         setError(err);
@@ -456,7 +542,7 @@
     }
 #endif
 }
-
+#ifdef HAS_AUDIOROUTING_IN_VIDEOPLAYER
 void S60VideoPlayerSession::DefaultAudioOutputChanged( CAudioOutput& aAudioOutput,
                                         CAudioOutput::TAudioOutputPreference aNewDefault )
 {
@@ -479,3 +565,4 @@
         return QString("Speaker");
     return QString("Default");
 }
+#endif //HAS_AUDIOROUTING_IN_VIDEOPLAYER)