summaryrefslogtreecommitdiffstats
path: root/src/plugins/directshow/player/directshowplayercontrol.cpp
diff options
context:
space:
mode:
authorYoann Lopes <yoann.lopes@theqtcompany.com>2015-11-01 17:17:12 +0100
committerYoann Lopes <yoann.lopes@theqtcompany.com>2016-01-06 15:20:50 +0000
commit4fcf153d688097f504d6ee454adfeecb7ec6bfd8 (patch)
tree66b2551d65036634e38c1cbdb3c4f07c7baf1cfb /src/plugins/directshow/player/directshowplayercontrol.cpp
parent315a946e4088f9b5e8c4aad76fbb155654688172 (diff)
DirectShow: fix media player's positionChanged() signal.
The signal was not emitted at the right time or with incorrect values under certain circumstances. Change-Id: Ib8b1d38381d908399752856db7b0a987c4422bb1 Reviewed-by: Christian Stromme <christian.stromme@theqtcompany.com>
Diffstat (limited to 'src/plugins/directshow/player/directshowplayercontrol.cpp')
-rw-r--r--src/plugins/directshow/player/directshowplayercontrol.cpp15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/plugins/directshow/player/directshowplayercontrol.cpp b/src/plugins/directshow/player/directshowplayercontrol.cpp
index 967674288..3449c9270 100644
--- a/src/plugins/directshow/player/directshowplayercontrol.cpp
+++ b/src/plugins/directshow/player/directshowplayercontrol.cpp
@@ -64,7 +64,7 @@ DirectShowPlayerControl::DirectShowPlayerControl(DirectShowPlayerService *servic
, m_streamTypes(0)
, m_volume(100)
, m_muted(false)
- , m_position(0)
+ , m_emitPosition(-1)
, m_pendingPosition(-1)
, m_duration(0)
, m_playbackRate(0)
@@ -98,7 +98,7 @@ qint64 DirectShowPlayerControl::position() const
if (m_pendingPosition != -1)
return m_pendingPosition;
- return const_cast<qint64 &>(m_position) = m_service->position();
+ return m_service->position();
}
void DirectShowPlayerControl::setPosition(qint64 position)
@@ -215,6 +215,7 @@ const QIODevice *DirectShowPlayerControl::mediaStream() const
void DirectShowPlayerControl::setMedia(const QMediaContent &media, QIODevice *stream)
{
m_pendingPosition = -1;
+ m_emitPosition = -1;
m_media = media;
m_stream = stream;
@@ -247,6 +248,7 @@ void DirectShowPlayerControl::playOrPause(QMediaPlayer::State state)
return;
}
+ m_emitPosition = -1;
m_state = state;
if (m_pendingPosition != -1)
@@ -262,6 +264,7 @@ void DirectShowPlayerControl::playOrPause(QMediaPlayer::State state)
void DirectShowPlayerControl::stop()
{
+ m_emitPosition = -1;
m_service->stop();
emit stateChanged(m_state = QMediaPlayer::StoppedState);
}
@@ -293,8 +296,8 @@ void DirectShowPlayerControl::emitPropertyChanges()
emit videoAvailableChanged(m_streamTypes & DirectShowPlayerService::VideoStream);
}
- if (properties & PositionProperty)
- emit positionChanged(m_position);
+ if (properties & PositionProperty && m_emitPosition != -1)
+ emit positionChanged(m_emitPosition);
if (properties & DurationProperty)
emit durationChanged(m_duration);
@@ -389,8 +392,8 @@ void DirectShowPlayerControl::updateError(QMediaPlayer::Error error, const QStri
void DirectShowPlayerControl::updatePosition(qint64 position)
{
- if (m_position != position) {
- m_position = position;
+ if (m_emitPosition != position) {
+ m_emitPosition = position;
scheduleUpdate(PositionProperty);
}