summaryrefslogtreecommitdiffstats
path: root/src/plugins/gstreamer/mediaplayer/qgstreamerplayercontrol.cpp
diff options
context:
space:
mode:
authorLev Zelenskiy <lev.zelenskiy@nokia.com>2012-03-30 15:20:46 +1000
committerQt by Nokia <qt-info@nokia.com>2012-04-05 02:40:17 +0200
commitcc33b63fa53bac51aa38f126fe23b89e53e51fc2 (patch)
tree54c69520ea91c84fd2382215c62c8415607f7354 /src/plugins/gstreamer/mediaplayer/qgstreamerplayercontrol.cpp
parent5eefb835896d18591427fbaf1f6f89a969101f92 (diff)
Reset playbin state to NULL on end of stream signal.
According to GStreamer documentation "playbin should be set back to READY or NULL state, then the "uri" property should be set to the new location and then playbin be set to PLAYING state again." We reset playbin to NULL state and then call setMedia() again in case playback is restarted. Change-Id: If7efbf8d88e0aad461c3d1d8b802c6621af221f7 Reviewed-by: Mithra Pattison <mithra.pattison@nokia.com> Reviewed-by: Jonas Rabbe <jonas.rabbe@nokia.com> Reviewed-by: Dmytro Poplavskiy <dmytro.poplavskiy@nokia.com>
Diffstat (limited to 'src/plugins/gstreamer/mediaplayer/qgstreamerplayercontrol.cpp')
-rw-r--r--src/plugins/gstreamer/mediaplayer/qgstreamerplayercontrol.cpp22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamerplayercontrol.cpp b/src/plugins/gstreamer/mediaplayer/qgstreamerplayercontrol.cpp
index 0666ab4fa..aa77a5177 100644
--- a/src/plugins/gstreamer/mediaplayer/qgstreamerplayercontrol.cpp
+++ b/src/plugins/gstreamer/mediaplayer/qgstreamerplayercontrol.cpp
@@ -69,6 +69,7 @@ QGstreamerPlayerControl::QGstreamerPlayerControl(QGstreamerPlayerSession *sessio
, m_bufferProgress(-1)
, m_seekToStartPending(false)
, m_pendingSeekPosition(-1)
+ , m_setMediaPending(false)
, m_stream(0)
, m_fifoNotifier(0)
, m_fifoCanWrite(false)
@@ -238,6 +239,12 @@ void QGstreamerPlayerControl::playOrPause(QMediaPlayer::State newState)
return;
pushState();
+
+ if (m_setMediaPending) {
+ m_mediaStatus = QMediaPlayer::LoadingMedia;
+ setMedia(m_currentResource, m_stream);
+ }
+
#ifdef Q_WS_MAEMO_6
//this is a work around for the gstreamer bug,
//should be remove once it get fixed
@@ -246,11 +253,6 @@ void QGstreamerPlayerControl::playOrPause(QMediaPlayer::State newState)
}
#endif
- if (m_mediaStatus == QMediaPlayer::EndOfMedia) {
- m_mediaStatus = QMediaPlayer::BufferedMedia;
- m_seekToStartPending = true;
- }
-
if (!m_resources->isGranted())
m_resources->acquire();
@@ -356,6 +358,7 @@ void QGstreamerPlayerControl::setMedia(const QMediaContent &content, QIODevice *
QMediaContent oldMedia = m_currentResource;
m_pendingSeekPosition = -1;
m_session->showPrerollFrames(false); // do not show prerolled frames until pause() or play() explicitly called
+ m_setMediaPending = false;
if (!content.isNull() || stream) {
if (!m_resources->isGranted())
@@ -552,7 +555,14 @@ void QGstreamerPlayerControl::processEOS()
pushState();
m_mediaStatus = QMediaPlayer::EndOfMedia;
emit positionChanged(position());
- stop();
+ m_session->endOfMediaReset();
+ m_setMediaPending = true;
+
+ if (m_state != QMediaPlayer::StoppedState) {
+ m_state = QMediaPlayer::StoppedState;
+ m_session->showPrerollFrames(false); // stop showing prerolled frames in stop state
+ }
+
popAndNotifyState();
}