qtmobility/plugins/multimedia/symbian/mmf/mediaplayer/s60videoplayersession.cpp
changeset 5 453da2cfceef
parent 4 90517678cc4f
child 11 06b8e2af4411
--- a/qtmobility/plugins/multimedia/symbian/mmf/mediaplayer/s60videoplayersession.cpp	Mon May 03 13:18:40 2010 +0300
+++ b/qtmobility/plugins/multimedia/symbian/mmf/mediaplayer/s60videoplayersession.cpp	Fri May 14 16:41:33 2010 +0300
@@ -44,7 +44,6 @@
 #include "s60mediaplayerservice.h"
 #include "s60videooverlay.h"
 
-#include <QtCore/private/qcore_symbian_p.h> // For qt_TRect2QRect 
 #include <QtCore/qdebug.h>
 #include <QtGui/qwidget.h>
 #include <QtCore/qtimer.h>
@@ -55,6 +54,8 @@
 #include <w32std.h>
 #include <mmf/common/mmfcontrollerframeworkbase.h>
 
+#include <AudioOutput.h>
+#include <MAudioOutputObserver.h>
 
 S60VideoPlayerSession::S60VideoPlayerSession(QMediaService *service)
     : S60MediaPlayerSession(service)
@@ -71,6 +72,7 @@
     , m_aspectRatioMode(Qt::KeepAspectRatio)
     , m_originalSize(1, 1)
     , m_audioOutput(0)
+    , m_audioEndpoint("Default")
 {  
     resetNativeHandles();
     QT_TRAP_THROWING(m_player = CVideoPlayerUtility::NewL(
@@ -84,15 +86,11 @@
         m_rect));
     m_dsaActive = true;
     m_player->RegisterForVideoLoadingNotification(*this);
-#if !defined(HAS_NO_AUDIOROUTING)
-    //QT_TRAP_THROWING(m_audioOutput = CAudioOutput::NewL(*m_player));
-    //QT_TRAP_THROWING(m_audioOutput->RegisterObserverL(*this));
-#endif
 }
 
 S60VideoPlayerSession::~S60VideoPlayerSession()
 {
-#if !defined(HAS_NO_AUDIOROUTING)
+#if !defined(HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER)
     if (m_audioOutput)
         m_audioOutput->UnregisterObserver(*this);
     delete m_audioOutput;
@@ -103,17 +101,29 @@
 
 void S60VideoPlayerSession::doLoadL(const TDesC &path)
 {
+    // m_audioOutput needs to be reinitialized after MapcInitComplete
+    if (m_audioOutput)
+        m_audioOutput->UnregisterObserver(*this);
+    delete m_audioOutput;
+    m_audioOutput = NULL;
+
     m_player->OpenFileL(path);
 }
 
 void S60VideoPlayerSession::doLoadUrlL(const TDesC &path)
 {
+    // m_audioOutput needs to be reinitialized after MapcInitComplete
+    if (m_audioOutput)
+        m_audioOutput->UnregisterObserver(*this);
+    delete m_audioOutput;
+    m_audioOutput = NULL;
+
     m_player->OpenUrlL(path);
 }
 
 int S60VideoPlayerSession::doGetBufferStatusL() const
 {
-	int progress = 0;
+    int progress = 0;
     m_player->GetVideoLoadingProgressL(progress);
     return progress;
 }
@@ -246,9 +256,9 @@
 {
     QSize scaled = m_originalSize;
     if (m_aspectRatioMode == Qt::IgnoreAspectRatio)
-        scaled.scale(qt_TRect2QRect(m_rect).size(), Qt::IgnoreAspectRatio);    
+        scaled.scale(TRect2QRect(m_rect).size(), Qt::IgnoreAspectRatio);    
     else if(m_aspectRatioMode == Qt::KeepAspectRatio)
-        scaled.scale(qt_TRect2QRect(m_rect).size(), Qt::KeepAspectRatio);    
+        scaled.scale(TRect2QRect(m_rect).size(), Qt::KeepAspectRatio);    
     
     qreal width = qreal(scaled.width()) / qreal(m_originalSize.width()) * qreal(100);
     qreal height = qreal(scaled.height()) / qreal(m_originalSize.height()) * qreal(100);
@@ -302,6 +312,14 @@
 
     setError(err);
     m_dsaActive = true;
+#if !defined(HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER)
+    TRAP(err, 
+        m_audioOutput = CAudioOutput::NewL(*m_player);
+        m_audioOutput->RegisterObserverL(*this);
+    );
+    setActiveEndpoint(m_audioEndpoint);
+    setError(err);
+#endif
     loaded();
 }
 
@@ -383,10 +401,15 @@
     buffered();
 }
 
+void S60VideoPlayerSession::doSetAudioEndpoint(const QString& audioEndpoint)
+{
+    m_audioEndpoint = audioEndpoint;
+}
+
 QString S60VideoPlayerSession::activeEndpoint() const
 {
-    QString outputName;
-#if !defined(HAS_NO_AUDIOROUTING)
+    QString outputName = QString("Default");
+#if !defined(HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER)
     if (m_audioOutput) {
         CAudioOutput::TAudioOutputPreference output = m_audioOutput->AudioOutput();
         outputName = qStringFromTAudioOutputPreference(output);
@@ -397,15 +420,14 @@
 
 QString S60VideoPlayerSession::defaultEndpoint() const
 {
-    QString outputName;
-#if !defined(HAS_NO_AUDIOROUTING)
+    QString outputName = QString("Default");
+#if !defined(HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER)
     if (m_audioOutput) {
         CAudioOutput::TAudioOutputPreference output = m_audioOutput->DefaultAudioOutput();
         outputName = qStringFromTAudioOutputPreference(output);
     }
+#endif
     return outputName;
-#endif
-    return QString("Default");
 }
 
 void S60VideoPlayerSession::setActiveEndpoint(const QString& name)
@@ -422,10 +444,15 @@
         output = CAudioOutput::EPrivate;
     else if (name == QString("Speaker"))
         output = CAudioOutput::EPublic;
-#if !defined(HAS_NO_AUDIOROUTING)
+#if !defined(HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER)
     if (m_audioOutput) {
         TRAPD(err, m_audioOutput->SetAudioOutputL(output));
         setError(err);
+        
+        if (m_audioEndpoint != name) {
+            m_audioEndpoint = name;
+            emit activeEndpointChanged(name);
+        }
     }
 #endif
 }
@@ -433,24 +460,9 @@
 void S60VideoPlayerSession::DefaultAudioOutputChanged( CAudioOutput& aAudioOutput,
                                         CAudioOutput::TAudioOutputPreference aNewDefault )
 {
-#if !defined(HAS_NO_AUDIOROUTING)
-    if (m_audioOutput) {
-        CAudioOutput::TAudioOutputPreference output = m_audioOutput->AudioOutput();
-        if (output == CAudioOutput::ENoPreference) {
-            QString name;
-            if (output == CAudioOutput::EAll)
-                name = QString("All");
-            else if (output == CAudioOutput::ENoOutput)
-                name = QString("None");
-            else if (output == CAudioOutput::EPrivate)
-                name = QString("Earphone");
-            else if (output == CAudioOutput::EPublic)
-                name = QString("Speaker");
-            if (!name.isEmpty())
-                emit activeEndpointChanged(name);
-        }
-    }
-#endif
+    // Emit already implemented in setActiveEndpoint function
+    Q_UNUSED(aAudioOutput)
+    Q_UNUSED(aNewDefault)
 }
 
 QString S60VideoPlayerSession::qStringFromTAudioOutputPreference(CAudioOutput::TAudioOutputPreference output) const
@@ -460,10 +472,10 @@
     else if (output == CAudioOutput::EAll)
         return QString("All");
     else if (output == CAudioOutput::ENoOutput)
-            return QString("None");
+        return QString("None");
     else if (output == CAudioOutput::EPrivate)
-            return QString("Earphone");
+        return QString("Earphone");
     else if (output == CAudioOutput::EPublic)
-            return QString("Speaker");
-    return QString();
+        return QString("Speaker");
+    return QString("Default");
 }