summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew den Exter <andrew.den-exter@nokia.com>2010-10-07 16:17:30 +1000
committerAndrew den Exter <andrew.den-exter@nokia.com>2010-10-07 16:17:30 +1000
commitfe97907352f901bfe10b98aff9804d0a51f9ea9d (patch)
treedfae53169c5ec785d5f9652c7143352af0fb469e
parentc9c52483e64d4b58b30f296a7bd4ba0822352f5f (diff)
parentcd828e68bd471232ad0010582ca8b3d3d848ad63 (diff)
Merge branch '1.0' into 1.1
Conflicts: plugins/multimedia/gstreamer/mediaplayer/qgstreamerplayersession.cpp
-rw-r--r--examples/slideshow/slideshow.cpp103
-rw-r--r--examples/slideshow/slideshow.h14
-rw-r--r--plugins/multimedia/gstreamer/mediaplayer/qgstreamerplayersession.cpp14
-rw-r--r--plugins/multimedia/wmp/qwmpplayercontrol.cpp147
-rw-r--r--plugins/multimedia/wmp/qwmpplayercontrol.h14
5 files changed, 157 insertions, 135 deletions
diff --git a/examples/slideshow/slideshow.cpp b/examples/slideshow/slideshow.cpp
index c9d688c8d2..733eee9294 100644
--- a/examples/slideshow/slideshow.cpp
+++ b/examples/slideshow/slideshow.cpp
@@ -47,13 +47,13 @@
#include <QtGui>
SlideShow::SlideShow(QWidget *parent)
- : QWidget(parent)
+ : QMainWindow(parent)
, imageViewer(0)
, playlist(0)
, statusLabel(0)
- , countdownLabel(0)
- , playButton(0)
- , stopButton(0)
+ , countdownAction(0)
+ , playAction(0)
+ , stopAction(0)
, viewerLayout(0)
{
imageViewer = new QMediaImageViewer(this);
@@ -92,61 +92,40 @@ SlideShow::SlideShow(QWidget *parent)
viewerLayout->addWidget(videoWidget);
viewerLayout->addWidget(statusLabel);
- QMenu *openMenu = new QMenu(this);
- openMenu->addAction(tr("Directory..."), this, SLOT(openDirectory()));
- openMenu->addAction(tr("Playlist..."), this, SLOT(openPlaylist()));
+ menuBar()->addAction(tr("Open Directory..."), this, SLOT(openDirectory()));
+ menuBar()->addAction(tr("Open Playlist..."), this, SLOT(openPlaylist()));
- QToolButton *openButton = new QToolButton;
- openButton->setIcon(style()->standardIcon(QStyle::SP_DialogOpenButton));
- openButton->setMenu(openMenu);
- openButton->setPopupMode(QToolButton::InstantPopup);
+ toolBar = new QToolBar;
+ toolBar->setMovable(false);
+ toolBar->setFloatable(false);
+ toolBar->setEnabled(false);
- playButton = new QToolButton;
- playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
- playButton->setEnabled(false);
+ toolBar->addAction(
+ style()->standardIcon(QStyle::SP_MediaSkipBackward),
+ tr("Previous"),
+ playlist,
+ SLOT(previous()));
+ stopAction = toolBar->addAction(
+ style()->standardIcon(QStyle::SP_MediaStop), tr("Stop"), imageViewer, SLOT(stop()));
+ playAction = toolBar->addAction(
+ style()->standardIcon(QStyle::SP_MediaPlay), tr("Play"), this, SLOT(play()));
+ toolBar->addAction(
+ style()->standardIcon(QStyle::SP_MediaSkipForward), tr("Next"), playlist, SLOT(next()));
- connect(playButton, SIGNAL(clicked()), this, SLOT(play()));
- connect(this, SIGNAL(enableButtons(bool)), playButton, SLOT(setEnabled(bool)));
+ QToolBar *countdownToolBar = new QToolBar;
+ countdownToolBar->setMovable(false);
+ countdownToolBar->setFloatable(false);
+ countdownToolBar->setToolButtonStyle(Qt::ToolButtonTextOnly);
+ countdownAction = countdownToolBar->addAction(QString());
- stopButton = new QToolButton;
- stopButton->setIcon(style()->standardIcon(QStyle::SP_MediaStop));
- stopButton->setEnabled(false);
- connect(stopButton, SIGNAL(clicked()), imageViewer, SLOT(stop()));
+ addToolBar(Qt::BottomToolBarArea, toolBar);
+ addToolBar(Qt::BottomToolBarArea, countdownToolBar);
- QAbstractButton *nextButton = new QToolButton;
- nextButton->setIcon(style()->standardIcon(QStyle::SP_MediaSkipForward));
- nextButton->setEnabled(false);
-
- connect(nextButton, SIGNAL(clicked()), playlist, SLOT(next()));
- connect(this, SIGNAL(enableButtons(bool)), nextButton, SLOT(setEnabled(bool)));
-
- QAbstractButton *previousButton = new QToolButton;
- previousButton->setIcon(style()->standardIcon(QStyle::SP_MediaSkipBackward));
- previousButton->setEnabled(false);
-
- connect(previousButton, SIGNAL(clicked()), playlist, SLOT(previous()));
- connect(this, SIGNAL(enableButtons(bool)), previousButton, SLOT(setEnabled(bool)));
-
- countdownLabel = new QLabel;
-
- QBoxLayout *controlLayout = new QHBoxLayout;
- controlLayout->setMargin(0);
- controlLayout->addWidget(openButton);
- controlLayout->addStretch(1);
- controlLayout->addWidget(previousButton);
- controlLayout->addWidget(stopButton);
- controlLayout->addWidget(playButton);
- controlLayout->addWidget(nextButton);
- controlLayout->addStretch(1);
- controlLayout->addWidget(countdownLabel);
-
- QBoxLayout *layout = new QVBoxLayout;
- layout->addLayout(viewerLayout);
- layout->addLayout(controlLayout);
-
- setLayout(layout);
+ QWidget *centralWidget = new QWidget;
+ centralWidget->setLayout(viewerLayout);
+ setCentralWidget(centralWidget);
}
void SlideShow::openPlaylist()
@@ -173,7 +152,7 @@ void SlideShow::openDirectory()
statusChanged(imageViewer->mediaStatus());
- emit enableButtons(playlist->mediaCount() > 0);
+ toolBar->setEnabled(playlist->mediaCount() > 0);
}
}
@@ -194,16 +173,16 @@ void SlideShow::stateChanged(QMediaImageViewer::State state)
{
switch (state) {
case QMediaImageViewer::StoppedState:
- stopButton->setEnabled(false);
- playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
+ stopAction->setEnabled(false);
+ playAction->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
break;
case QMediaImageViewer::PlayingState:
- stopButton->setEnabled(true);
- playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPause));
+ stopAction->setEnabled(true);
+ playAction->setIcon(style()->standardIcon(QStyle::SP_MediaPause));
break;
case QMediaImageViewer::PausedState:
- stopButton->setEnabled(true);
- playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
+ stopAction->setEnabled(true);
+ playAction->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
break;
}
}
@@ -242,7 +221,7 @@ void SlideShow::playlistLoaded()
{
statusChanged(imageViewer->mediaStatus());
- emit enableButtons(playlist->mediaCount() > 0);
+ toolBar->setEnabled(playlist->mediaCount() > 0);
}
void SlideShow::playlistLoadFailed()
@@ -250,14 +229,14 @@ void SlideShow::playlistLoadFailed()
statusLabel->setText(playlist->errorString());
viewerLayout->setCurrentIndex(1);
- emit enableButtons(false);
+ toolBar->setEnabled(false);
}
void SlideShow::elapsedTimeChanged(int time)
{
const int remaining = (imageViewer->timeout() - time) / 1000;
- countdownLabel->setText(tr("%1:%2")
+ countdownAction->setText(tr("%1:%2")
.arg(remaining / 60, 2, 10, QLatin1Char('0'))
.arg(remaining % 60, 2, 10, QLatin1Char('0')));
}
diff --git a/examples/slideshow/slideshow.h b/examples/slideshow/slideshow.h
index d86a064ba9..d077be0757 100644
--- a/examples/slideshow/slideshow.h
+++ b/examples/slideshow/slideshow.h
@@ -41,7 +41,7 @@
#ifndef SLIDESHOW_H
#define SLIDESHOW_H
-#include <QWidget>
+#include <QMainWindow>
#include <qmediaimageviewer.h>
QT_BEGIN_NAMESPACE
@@ -54,15 +54,12 @@ QT_END_NAMESPACE
QT_USE_NAMESPACE
-class SlideShow : public QWidget
+class SlideShow : public QMainWindow
{
Q_OBJECT
public:
SlideShow(QWidget *parent = 0);
-signals:
- void enableButtons(bool enable);
-
private slots:
void openPlaylist();
void openDirectory();
@@ -81,9 +78,10 @@ private:
QMediaImageViewer *imageViewer;
QMediaPlaylist *playlist;
QLabel *statusLabel;
- QLabel *countdownLabel;
- QAbstractButton *playButton;
- QAbstractButton *stopButton;
+ QAction *countdownAction;
+ QAction *playAction;
+ QAction *stopAction;
+ QToolBar *toolBar;
QStackedLayout *viewerLayout;
};
diff --git a/plugins/multimedia/gstreamer/mediaplayer/qgstreamerplayersession.cpp b/plugins/multimedia/gstreamer/mediaplayer/qgstreamerplayersession.cpp
index dce0803ae9..6b7f4671dc 100644
--- a/plugins/multimedia/gstreamer/mediaplayer/qgstreamerplayersession.cpp
+++ b/plugins/multimedia/gstreamer/mediaplayer/qgstreamerplayersession.cpp
@@ -857,10 +857,6 @@ void QGstreamerPlayerSession::busMessage(const QGstreamerMessage &message)
m_playbackRate = 1.0;
setPlaybackRate(rate);
}
-
- if (m_renderer)
- m_renderer->precessNewStream();
-
}
if (m_state != prevState)
@@ -972,6 +968,16 @@ void QGstreamerPlayerSession::busMessage(const QGstreamerMessage &message)
default:
break;
}
+ } else if (m_videoSink
+ && m_renderer
+ && GST_MESSAGE_SRC(gm) == GST_OBJECT_CAST(m_videoSink)
+ && GST_MESSAGE_TYPE(gm) == GST_MESSAGE_STATE_CHANGED) {
+ GstState oldState;
+ GstState newState;
+ gst_message_parse_state_changed(gm, &oldState, &newState, 0);
+
+ if (oldState == GST_STATE_READY && newState == GST_STATE_PAUSED)
+ m_renderer->precessNewStream();
}
}
}
diff --git a/plugins/multimedia/wmp/qwmpplayercontrol.cpp b/plugins/multimedia/wmp/qwmpplayercontrol.cpp
index ed3b4e0998..be8f107b8a 100644
--- a/plugins/multimedia/wmp/qwmpplayercontrol.cpp
+++ b/plugins/multimedia/wmp/qwmpplayercontrol.cpp
@@ -49,7 +49,8 @@
#include <qmediaplayer.h>
#include <qmediaplaylist.h>
-#include <QtCore/qdebug.h>
+#include <QtCore/qcoreapplication.h>
+#include <QtCore/qcoreevent.h>
#include <QtCore/qurl.h>
#include <QtCore/qvariant.h>
@@ -59,7 +60,7 @@ QWmpPlayerControl::QWmpPlayerControl(IWMPCore3 *player, QWmpEvents *events, QObj
, m_controls(0)
, m_settings(0)
, m_state(QMediaPlayer::StoppedState)
- , m_duration(0)
+ , m_changes(0)
, m_buffering(false)
, m_audioAvailable(false)
, m_videoAvailable(false)
@@ -108,16 +109,15 @@ qint64 QWmpPlayerControl::duration() const
IWMPMedia *media = 0;
if (m_controls && m_controls->get_currentItem(&media) == S_OK) {
media->get_duration(&duration);
-
media->Release();
}
- return m_duration * 1000;
+ return duration * 1000;
}
qint64 QWmpPlayerControl::position() const
{
- double position;
+ double position = 0.0;
if (m_controls)
m_controls->get_currentPosition(&position);
@@ -277,25 +277,49 @@ void QWmpPlayerControl::setMedia(const QMediaContent &content, QIODevice *stream
setUrl(QUrl());
}
+bool QWmpPlayerControl::event(QEvent *event)
+{
+ if (event->type() == QEvent::UpdateRequest) {
+ const int changes = m_changes;
+ m_changes = 0;
+
+ if (changes & DurationChanged)
+ emit durationChanged(duration());
+ if (changes & PositionChanged)
+ emit positionChanged(position());
+ if (changes & StatusChanged)
+ emit mediaStatusChanged(m_status);
+ if (changes & StateChanged)
+ emit stateChanged(m_state);
+
+ return true;
+ } else {
+ return QMediaPlayerControl::event(event);
+ }
+}
+
+void QWmpPlayerControl::scheduleUpdate(int change)
+{
+ if (m_changes == 0)
+ QCoreApplication::postEvent(this, new QEvent(QEvent::UpdateRequest));
+
+ m_changes |= change;
+}
+
void QWmpPlayerControl::bufferingEvent(VARIANT_BOOL buffering)
{
if (m_state != QMediaPlayer::StoppedState) {
- emit mediaStatusChanged(m_status = buffering
+ m_status = buffering
? QMediaPlayer::BufferingMedia
- : QMediaPlayer::BufferedMedia);
+ : QMediaPlayer::BufferedMedia;
+
+ scheduleUpdate(StatusChanged);
}
}
-void QWmpPlayerControl::currentItemChangeEvent(IDispatch *dispatch)
+void QWmpPlayerControl::currentItemChangeEvent(IDispatch *)
{
- IWMPMedia *media = 0;
- if (dispatch && dispatch->QueryInterface(
- __uuidof(IWMPMedia), reinterpret_cast<void **>(&media)) == S_OK) {
- double duration = 0;
-
- if (media->get_duration(&duration) == S_OK)
- emit durationChanged(duration * 1000);
- }
+ scheduleUpdate(DurationChanged);
}
void QWmpPlayerControl::mediaChangeEvent(IDispatch *dispatch)
@@ -306,23 +330,18 @@ void QWmpPlayerControl::mediaChangeEvent(IDispatch *dispatch)
IWMPMedia *currentMedia = 0;
if (m_controls && m_controls->get_currentItem(&currentMedia) == S_OK) {
VARIANT_BOOL isEqual = VARIANT_FALSE;
- if (media->get_isIdentical(currentMedia, &isEqual) == S_OK && isEqual) {
- double duration = 0;
+ if (media->get_isIdentical(currentMedia, &isEqual) == S_OK && isEqual)
+ scheduleUpdate(DurationChanged);
- if (media->get_duration(&duration) == S_OK)
- emit durationChanged(duration * 1000);
- }
currentMedia->Release();
}
media->Release();
}
}
-void QWmpPlayerControl::positionChangeEvent(double from, double to)
+void QWmpPlayerControl::positionChangeEvent(double , double)
{
- Q_UNUSED(from);
-
- emit positionChanged(to * 1000);
+ scheduleUpdate(PositionChanged);
}
void QWmpPlayerControl::playStateChangeEvent(long state)
@@ -331,30 +350,31 @@ void QWmpPlayerControl::playStateChangeEvent(long state)
case wmppsUndefined:
m_state = QMediaPlayer::StoppedState;
m_status = QMediaPlayer::UnknownMediaStatus;
-
- emit stateChanged(m_state);
- emit mediaStatusChanged(m_status);
+ scheduleUpdate(StatusChanged | StateChanged);
break;
case wmppsStopped:
if (m_state != QMediaPlayer::StoppedState) {
m_state = QMediaPlayer::StoppedState;
- m_status = QMediaPlayer::LoadedMedia;
+ scheduleUpdate(StateChanged);
- emit stateChanged(m_state);
- emit mediaStatusChanged(m_status);
+ if (m_status != QMediaPlayer::EndOfMedia) {
+ m_status = QMediaPlayer::LoadedMedia;
+ scheduleUpdate(StatusChanged);
+ }
}
break;
case wmppsPaused:
if (m_state != QMediaPlayer::PausedState && m_status != QMediaPlayer::BufferedMedia) {
m_state = QMediaPlayer::PausedState;
m_status = QMediaPlayer::BufferedMedia;
-
- emit stateChanged(m_state);
- emit mediaStatusChanged(m_status);
+ scheduleUpdate(StatusChanged | StateChanged);
} else if (m_state != QMediaPlayer::PausedState) {
- emit stateChanged(m_state = QMediaPlayer::PausedState);
+ m_state = QMediaPlayer::PausedState;
+ scheduleUpdate(StateChanged);
} else if (m_status != QMediaPlayer::BufferedMedia) {
- emit mediaStatusChanged(m_status = QMediaPlayer::BufferedMedia);
+ m_status = QMediaPlayer::BufferedMedia;
+
+ scheduleUpdate(StatusChanged);
}
break;
case wmppsPlaying:
@@ -363,49 +383,56 @@ void QWmpPlayerControl::playStateChangeEvent(long state)
if (m_state != QMediaPlayer::PlayingState && m_status != QMediaPlayer::BufferedMedia) {
m_state = QMediaPlayer::PlayingState;
m_status = QMediaPlayer::BufferedMedia;
-
- emit stateChanged(m_state);
- emit mediaStatusChanged(m_status);
+ scheduleUpdate(StatusChanged | StateChanged);
} else if (m_state != QMediaPlayer::PlayingState) {
- emit stateChanged(m_state = QMediaPlayer::PlayingState);
+ m_state = QMediaPlayer::PlayingState;
+ scheduleUpdate(StateChanged);
} else if (m_status != QMediaPlayer::BufferedMedia) {
- emit mediaStatusChanged(m_status = QMediaPlayer::BufferedMedia);
+ m_status = QMediaPlayer::BufferedMedia;
+ scheduleUpdate(StatusChanged);
}
- if (m_state != QMediaPlayer::PlayingState)
- emit stateChanged(m_state = QMediaPlayer::PlayingState);
- if (m_status != QMediaPlayer::BufferedMedia)
- emit mediaStatusChanged(m_status = QMediaPlayer::BufferedMedia);
+ if (m_state != QMediaPlayer::PlayingState) {
+ m_state = QMediaPlayer::PlayingState;
+ scheduleUpdate(StateChanged);
+ }
+ if (m_status != QMediaPlayer::BufferedMedia) {
+ m_status = QMediaPlayer::BufferedMedia;
+ scheduleUpdate(StatusChanged);
+ }
break;
case wmppsBuffering:
case wmppsWaiting:
- if (m_status != QMediaPlayer::StalledMedia && m_state != QMediaPlayer::StoppedState)
- emit mediaStatusChanged(m_status = QMediaPlayer::StalledMedia);
+ if (m_status != QMediaPlayer::StalledMedia && m_state != QMediaPlayer::StoppedState) {
+ m_status = QMediaPlayer::StalledMedia;
+ scheduleUpdate(StatusChanged);
+ }
break;
case wmppsMediaEnded:
if (m_status != QMediaPlayer::EndOfMedia && m_state != QMediaPlayer::StoppedState) {
m_state = QMediaPlayer::StoppedState;
- m_status = QMediaPlayer::StalledMedia;
-
- emit stateChanged(m_state);
- emit mediaStatusChanged(m_status);
+ m_status = QMediaPlayer::EndOfMedia;
+ scheduleUpdate(StatusChanged | StateChanged);
}
break;
case wmppsTransitioning:
- if (m_status != QMediaPlayer::LoadingMedia)
- emit mediaStatusChanged(m_status = QMediaPlayer::LoadingMedia);
break;
case wmppsReady:
- if (m_status != QMediaPlayer::LoadedMedia)
- m_status = m_status = QMediaPlayer::LoadedMedia;
+ if (m_status != QMediaPlayer::LoadedMedia) {
+ m_status = QMediaPlayer::LoadedMedia;
+ scheduleUpdate(StatusChanged);
+ }
- if (m_state != QMediaPlayer::StoppedState)
- emit stateChanged(QMediaPlayer::StoppedState);
- emit mediaStatusChanged(m_status);
+ if (m_state != QMediaPlayer::StoppedState) {
+ m_state = QMediaPlayer::StoppedState;
+ scheduleUpdate(StateChanged);
+ }
break;
case wmppsReconnecting:
- if (m_status != QMediaPlayer::StalledMedia && m_state != QMediaPlayer::StoppedState)
- emit mediaStatusChanged(m_status = QMediaPlayer::StalledMedia);
+ if (m_status != QMediaPlayer::StalledMedia && m_state != QMediaPlayer::StoppedState) {
+ m_status = QMediaPlayer::StalledMedia;
+ scheduleUpdate(StatusChanged);
+ }
break;
default:
break;
diff --git a/plugins/multimedia/wmp/qwmpplayercontrol.h b/plugins/multimedia/wmp/qwmpplayercontrol.h
index 52bb3cbb95..d966b38b23 100644
--- a/plugins/multimedia/wmp/qwmpplayercontrol.h
+++ b/plugins/multimedia/wmp/qwmpplayercontrol.h
@@ -103,6 +103,8 @@ public:
QUrl url() const;
void setUrl(const QUrl &url);
+ bool event(QEvent *event);
+
using QMediaPlayerControl::positionChanged;
private Q_SLOTS:
@@ -114,13 +116,23 @@ private Q_SLOTS:
void playStateChangeEvent(long state);
private:
+ enum Change
+ {
+ StateChanged = 0x01,
+ StatusChanged = 0x02,
+ PositionChanged = 0x04,
+ DurationChanged = 0x08
+ };
+
+ void scheduleUpdate(int change);
+
IWMPCore3 *m_player;
IWMPControls *m_controls;
IWMPSettings *m_settings;
IWMPNetwork *m_network;
QMediaPlayer::State m_state;
QMediaPlayer::MediaStatus m_status;
- qint64 m_duration;
+ int m_changes;
bool m_buffering;
bool m_audioAvailable;
bool m_videoAvailable;