qtmobility/plugins/multimedia/symbian/mmf/mediaplayer/s60videoplayersession.cpp
changeset 5 453da2cfceef
parent 4 90517678cc4f
child 11 06b8e2af4411
equal deleted inserted replaced
4:90517678cc4f 5:453da2cfceef
    42 #include "s60videoplayersession.h"
    42 #include "s60videoplayersession.h"
    43 #include "s60videowidget.h"
    43 #include "s60videowidget.h"
    44 #include "s60mediaplayerservice.h"
    44 #include "s60mediaplayerservice.h"
    45 #include "s60videooverlay.h"
    45 #include "s60videooverlay.h"
    46 
    46 
    47 #include <QtCore/private/qcore_symbian_p.h> // For qt_TRect2QRect 
       
    48 #include <QtCore/qdebug.h>
    47 #include <QtCore/qdebug.h>
    49 #include <QtGui/qwidget.h>
    48 #include <QtGui/qwidget.h>
    50 #include <QtCore/qtimer.h>
    49 #include <QtCore/qtimer.h>
    51 #include <QApplication>
    50 #include <QApplication>
    52 
    51 
    53 #include <coecntrl.h>
    52 #include <coecntrl.h>
    54 #include <coemain.h>    // For CCoeEnv
    53 #include <coemain.h>    // For CCoeEnv
    55 #include <w32std.h>
    54 #include <w32std.h>
    56 #include <mmf/common/mmfcontrollerframeworkbase.h>
    55 #include <mmf/common/mmfcontrollerframeworkbase.h>
    57 
    56 
       
    57 #include <AudioOutput.h>
       
    58 #include <MAudioOutputObserver.h>
    58 
    59 
    59 S60VideoPlayerSession::S60VideoPlayerSession(QMediaService *service)
    60 S60VideoPlayerSession::S60VideoPlayerSession(QMediaService *service)
    60     : S60MediaPlayerSession(service)
    61     : S60MediaPlayerSession(service)
    61     , m_player(0)
    62     , m_player(0)
    62     , m_rect(0, 0, 0, 0)
    63     , m_rect(0, 0, 0, 0)
    69     , m_window(0)
    70     , m_window(0)
    70     , m_service(*service)
    71     , m_service(*service)
    71     , m_aspectRatioMode(Qt::KeepAspectRatio)
    72     , m_aspectRatioMode(Qt::KeepAspectRatio)
    72     , m_originalSize(1, 1)
    73     , m_originalSize(1, 1)
    73     , m_audioOutput(0)
    74     , m_audioOutput(0)
       
    75     , m_audioEndpoint("Default")
    74 {  
    76 {  
    75     resetNativeHandles();
    77     resetNativeHandles();
    76     QT_TRAP_THROWING(m_player = CVideoPlayerUtility::NewL(
    78     QT_TRAP_THROWING(m_player = CVideoPlayerUtility::NewL(
    77         *this, 
    79         *this, 
    78         0, 
    80         0, 
    82         *m_window, 
    84         *m_window, 
    83         m_rect, 
    85         m_rect, 
    84         m_rect));
    86         m_rect));
    85     m_dsaActive = true;
    87     m_dsaActive = true;
    86     m_player->RegisterForVideoLoadingNotification(*this);
    88     m_player->RegisterForVideoLoadingNotification(*this);
    87 #if !defined(HAS_NO_AUDIOROUTING)
       
    88     //QT_TRAP_THROWING(m_audioOutput = CAudioOutput::NewL(*m_player));
       
    89     //QT_TRAP_THROWING(m_audioOutput->RegisterObserverL(*this));
       
    90 #endif
       
    91 }
    89 }
    92 
    90 
    93 S60VideoPlayerSession::~S60VideoPlayerSession()
    91 S60VideoPlayerSession::~S60VideoPlayerSession()
    94 {
    92 {
    95 #if !defined(HAS_NO_AUDIOROUTING)
    93 #if !defined(HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER)
    96     if (m_audioOutput)
    94     if (m_audioOutput)
    97         m_audioOutput->UnregisterObserver(*this);
    95         m_audioOutput->UnregisterObserver(*this);
    98     delete m_audioOutput;
    96     delete m_audioOutput;
    99 #endif
    97 #endif
   100     m_player->Close();
    98     m_player->Close();
   101     delete m_player;
    99     delete m_player;
   102 }
   100 }
   103 
   101 
   104 void S60VideoPlayerSession::doLoadL(const TDesC &path)
   102 void S60VideoPlayerSession::doLoadL(const TDesC &path)
   105 {
   103 {
       
   104     // m_audioOutput needs to be reinitialized after MapcInitComplete
       
   105     if (m_audioOutput)
       
   106         m_audioOutput->UnregisterObserver(*this);
       
   107     delete m_audioOutput;
       
   108     m_audioOutput = NULL;
       
   109 
   106     m_player->OpenFileL(path);
   110     m_player->OpenFileL(path);
   107 }
   111 }
   108 
   112 
   109 void S60VideoPlayerSession::doLoadUrlL(const TDesC &path)
   113 void S60VideoPlayerSession::doLoadUrlL(const TDesC &path)
   110 {
   114 {
       
   115     // m_audioOutput needs to be reinitialized after MapcInitComplete
       
   116     if (m_audioOutput)
       
   117         m_audioOutput->UnregisterObserver(*this);
       
   118     delete m_audioOutput;
       
   119     m_audioOutput = NULL;
       
   120 
   111     m_player->OpenUrlL(path);
   121     m_player->OpenUrlL(path);
   112 }
   122 }
   113 
   123 
   114 int S60VideoPlayerSession::doGetBufferStatusL() const
   124 int S60VideoPlayerSession::doGetBufferStatusL() const
   115 {
   125 {
   116 	int progress = 0;
   126     int progress = 0;
   117     m_player->GetVideoLoadingProgressL(progress);
   127     m_player->GetVideoLoadingProgressL(progress);
   118     return progress;
   128     return progress;
   119 }
   129 }
   120 
   130 
   121 qint64 S60VideoPlayerSession::doGetDurationL() const
   131 qint64 S60VideoPlayerSession::doGetDurationL() const
   244 
   254 
   245 QPair<qreal, qreal> S60VideoPlayerSession::scaleFactor()
   255 QPair<qreal, qreal> S60VideoPlayerSession::scaleFactor()
   246 {
   256 {
   247     QSize scaled = m_originalSize;
   257     QSize scaled = m_originalSize;
   248     if (m_aspectRatioMode == Qt::IgnoreAspectRatio)
   258     if (m_aspectRatioMode == Qt::IgnoreAspectRatio)
   249         scaled.scale(qt_TRect2QRect(m_rect).size(), Qt::IgnoreAspectRatio);    
   259         scaled.scale(TRect2QRect(m_rect).size(), Qt::IgnoreAspectRatio);    
   250     else if(m_aspectRatioMode == Qt::KeepAspectRatio)
   260     else if(m_aspectRatioMode == Qt::KeepAspectRatio)
   251         scaled.scale(qt_TRect2QRect(m_rect).size(), Qt::KeepAspectRatio);    
   261         scaled.scale(TRect2QRect(m_rect).size(), Qt::KeepAspectRatio);    
   252     
   262     
   253     qreal width = qreal(scaled.width()) / qreal(m_originalSize.width()) * qreal(100);
   263     qreal width = qreal(scaled.width()) / qreal(m_originalSize.width()) * qreal(100);
   254     qreal height = qreal(scaled.height()) / qreal(m_originalSize.height()) * qreal(100);
   264     qreal height = qreal(scaled.height()) / qreal(m_originalSize.height()) * qreal(100);
   255     
   265     
   256     return QPair<qreal, qreal>(width, height);
   266     return QPair<qreal, qreal>(width, height);
   300         m_originalSize = QSize(originalSize.iWidth, originalSize.iHeight);
   310         m_originalSize = QSize(originalSize.iWidth, originalSize.iHeight);
   301         m_player->SetScaleFactorL(scaleFactor().first, scaleFactor().second, true));
   311         m_player->SetScaleFactorL(scaleFactor().first, scaleFactor().second, true));
   302 
   312 
   303     setError(err);
   313     setError(err);
   304     m_dsaActive = true;
   314     m_dsaActive = true;
       
   315 #if !defined(HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER)
       
   316     TRAP(err, 
       
   317         m_audioOutput = CAudioOutput::NewL(*m_player);
       
   318         m_audioOutput->RegisterObserverL(*this);
       
   319     );
       
   320     setActiveEndpoint(m_audioEndpoint);
       
   321     setError(err);
       
   322 #endif
   305     loaded();
   323     loaded();
   306 }
   324 }
   307 
   325 
   308 void S60VideoPlayerSession::MvpuoFrameReady(CFbsBitmap &aFrame, TInt aError)
   326 void S60VideoPlayerSession::MvpuoFrameReady(CFbsBitmap &aFrame, TInt aError)
   309 {
   327 {
   381 void S60VideoPlayerSession::MvloLoadingComplete()
   399 void S60VideoPlayerSession::MvloLoadingComplete()
   382 {
   400 {
   383     buffered();
   401     buffered();
   384 }
   402 }
   385 
   403 
       
   404 void S60VideoPlayerSession::doSetAudioEndpoint(const QString& audioEndpoint)
       
   405 {
       
   406     m_audioEndpoint = audioEndpoint;
       
   407 }
       
   408 
   386 QString S60VideoPlayerSession::activeEndpoint() const
   409 QString S60VideoPlayerSession::activeEndpoint() const
   387 {
   410 {
   388     QString outputName;
   411     QString outputName = QString("Default");
   389 #if !defined(HAS_NO_AUDIOROUTING)
   412 #if !defined(HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER)
   390     if (m_audioOutput) {
   413     if (m_audioOutput) {
   391         CAudioOutput::TAudioOutputPreference output = m_audioOutput->AudioOutput();
   414         CAudioOutput::TAudioOutputPreference output = m_audioOutput->AudioOutput();
   392         outputName = qStringFromTAudioOutputPreference(output);
   415         outputName = qStringFromTAudioOutputPreference(output);
   393     }
   416     }
   394 #endif
   417 #endif
   395     return outputName;
   418     return outputName;
   396 }
   419 }
   397 
   420 
   398 QString S60VideoPlayerSession::defaultEndpoint() const
   421 QString S60VideoPlayerSession::defaultEndpoint() const
   399 {
   422 {
   400     QString outputName;
   423     QString outputName = QString("Default");
   401 #if !defined(HAS_NO_AUDIOROUTING)
   424 #if !defined(HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER)
   402     if (m_audioOutput) {
   425     if (m_audioOutput) {
   403         CAudioOutput::TAudioOutputPreference output = m_audioOutput->DefaultAudioOutput();
   426         CAudioOutput::TAudioOutputPreference output = m_audioOutput->DefaultAudioOutput();
   404         outputName = qStringFromTAudioOutputPreference(output);
   427         outputName = qStringFromTAudioOutputPreference(output);
   405     }
   428     }
       
   429 #endif
   406     return outputName;
   430     return outputName;
   407 #endif
       
   408     return QString("Default");
       
   409 }
   431 }
   410 
   432 
   411 void S60VideoPlayerSession::setActiveEndpoint(const QString& name)
   433 void S60VideoPlayerSession::setActiveEndpoint(const QString& name)
   412 {
   434 {
   413     CAudioOutput::TAudioOutputPreference output = CAudioOutput::ENoPreference;
   435     CAudioOutput::TAudioOutputPreference output = CAudioOutput::ENoPreference;
   420         output = CAudioOutput::ENoOutput;
   442         output = CAudioOutput::ENoOutput;
   421     else if (name == QString("Earphone"))
   443     else if (name == QString("Earphone"))
   422         output = CAudioOutput::EPrivate;
   444         output = CAudioOutput::EPrivate;
   423     else if (name == QString("Speaker"))
   445     else if (name == QString("Speaker"))
   424         output = CAudioOutput::EPublic;
   446         output = CAudioOutput::EPublic;
   425 #if !defined(HAS_NO_AUDIOROUTING)
   447 #if !defined(HAS_NO_AUDIOROUTING_IN_VIDEOPLAYER)
   426     if (m_audioOutput) {
   448     if (m_audioOutput) {
   427         TRAPD(err, m_audioOutput->SetAudioOutputL(output));
   449         TRAPD(err, m_audioOutput->SetAudioOutputL(output));
   428         setError(err);
   450         setError(err);
       
   451         
       
   452         if (m_audioEndpoint != name) {
       
   453             m_audioEndpoint = name;
       
   454             emit activeEndpointChanged(name);
       
   455         }
   429     }
   456     }
   430 #endif
   457 #endif
   431 }
   458 }
   432 
   459 
   433 void S60VideoPlayerSession::DefaultAudioOutputChanged( CAudioOutput& aAudioOutput,
   460 void S60VideoPlayerSession::DefaultAudioOutputChanged( CAudioOutput& aAudioOutput,
   434                                         CAudioOutput::TAudioOutputPreference aNewDefault )
   461                                         CAudioOutput::TAudioOutputPreference aNewDefault )
   435 {
   462 {
   436 #if !defined(HAS_NO_AUDIOROUTING)
   463     // Emit already implemented in setActiveEndpoint function
   437     if (m_audioOutput) {
   464     Q_UNUSED(aAudioOutput)
   438         CAudioOutput::TAudioOutputPreference output = m_audioOutput->AudioOutput();
   465     Q_UNUSED(aNewDefault)
   439         if (output == CAudioOutput::ENoPreference) {
       
   440             QString name;
       
   441             if (output == CAudioOutput::EAll)
       
   442                 name = QString("All");
       
   443             else if (output == CAudioOutput::ENoOutput)
       
   444                 name = QString("None");
       
   445             else if (output == CAudioOutput::EPrivate)
       
   446                 name = QString("Earphone");
       
   447             else if (output == CAudioOutput::EPublic)
       
   448                 name = QString("Speaker");
       
   449             if (!name.isEmpty())
       
   450                 emit activeEndpointChanged(name);
       
   451         }
       
   452     }
       
   453 #endif
       
   454 }
   466 }
   455 
   467 
   456 QString S60VideoPlayerSession::qStringFromTAudioOutputPreference(CAudioOutput::TAudioOutputPreference output) const
   468 QString S60VideoPlayerSession::qStringFromTAudioOutputPreference(CAudioOutput::TAudioOutputPreference output) const
   457 {
   469 {
   458     if (output == CAudioOutput::ENoPreference)
   470     if (output == CAudioOutput::ENoPreference)
   459         return QString("Default");
   471         return QString("Default");
   460     else if (output == CAudioOutput::EAll)
   472     else if (output == CAudioOutput::EAll)
   461         return QString("All");
   473         return QString("All");
   462     else if (output == CAudioOutput::ENoOutput)
   474     else if (output == CAudioOutput::ENoOutput)
   463             return QString("None");
   475         return QString("None");
   464     else if (output == CAudioOutput::EPrivate)
   476     else if (output == CAudioOutput::EPrivate)
   465             return QString("Earphone");
   477         return QString("Earphone");
   466     else if (output == CAudioOutput::EPublic)
   478     else if (output == CAudioOutput::EPublic)
   467             return QString("Speaker");
   479         return QString("Speaker");
   468     return QString();
   480     return QString("Default");
   469 }
   481 }