--- 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)