diff options
author | Bernd Weimer <bweimer@blackberry.com> | 2014-03-18 11:29:49 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-03-19 15:21:03 +0100 |
commit | d8764171d6da1b87c32835cb68adf783d258efa6 (patch) | |
tree | e5887dc15025a079305b0e34ec18904c58cda6cf /src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.cpp | |
parent | 19ce431f9feec52327d902ab7005db5aff655535 (diff) |
QNX: Evaluate mm-renderer buffer status
In the playing (or paused) state the media status should reflect the
buffer state, it should not stay in the loaded media state.
Mm-renderer differentiates between buffer "status" and "level".
Unfortunately, QMediaPlayer's buffer status maps to mm-renderer's
buffer level.
Change-Id: I22ea8dc83cee975fc4aa1a6de4f172def042a9a8
QT-BUG: 37166
Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
Reviewed-by: Fabian Bumberger <fbumberger@rim.com>
Diffstat (limited to 'src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.cpp')
-rw-r--r-- | src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.cpp | 33 |
1 files changed, 24 insertions, 9 deletions
diff --git a/src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.cpp b/src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.cpp index ba3cbfdff..004eca36d 100644 --- a/src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.cpp +++ b/src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.cpp @@ -73,7 +73,7 @@ MmRendererMediaPlayerControl::MmRendererMediaPlayerControl(QObject *parent) m_playAfterMediaLoaded(false), m_inputAttached(false), m_stopEventsToIgnore(0), - m_bufferStatus(0) + m_bufferLevel(0) { m_loadingTimer.setSingleShot(true); m_loadingTimer.setInterval(0); @@ -234,8 +234,11 @@ void MmRendererMediaPlayerControl::attach() m_inputAttached = true; setMediaStatus(QMediaPlayer::LoadedMedia); - m_bufferStatus = 0; - emit bufferStatusChanged(m_bufferStatus); + + // mm-renderer has buffer properties "status" and "level" + // QMediaPlayer's buffer status maps to mm-renderer's buffer level + m_bufferLevel = 0; + emit bufferStatusChanged(m_bufferLevel); } void MmRendererMediaPlayerControl::detach() @@ -406,7 +409,9 @@ void MmRendererMediaPlayerControl::setMuted(bool muted) int MmRendererMediaPlayerControl::bufferStatus() const { - return m_bufferStatus; + // mm-renderer has buffer properties "status" and "level" + // QMediaPlayer's buffer status maps to mm-renderer's buffer level + return m_bufferLevel; } bool MmRendererMediaPlayerControl::isAudioAvailable() const @@ -585,13 +590,23 @@ void MmRendererMediaPlayerControl::setMmPosition(qint64 newPosition) void MmRendererMediaPlayerControl::setMmBufferStatus(const QString &bufferStatus) { - const int slashPos = bufferStatus.indexOf('/'); + if (bufferStatus == QLatin1String("buffering")) + setMediaStatus(QMediaPlayer::BufferingMedia); + else if (bufferStatus == QLatin1String("playing")) + setMediaStatus(QMediaPlayer::BufferedMedia); + // ignore "idle" buffer status +} + +void MmRendererMediaPlayerControl::setMmBufferLevel(const QString &bufferLevel) +{ + // buffer level has format level/capacity, e.g. "91319/124402" + const int slashPos = bufferLevel.indexOf('/'); if (slashPos != -1) { - const int fill = bufferStatus.leftRef(slashPos).toInt(); - const int capacity = bufferStatus.midRef(slashPos + 1).toInt(); + const int fill = bufferLevel.leftRef(slashPos).toInt(); + const int capacity = bufferLevel.midRef(slashPos + 1).toInt(); if (capacity != 0) { - m_bufferStatus = fill / static_cast<float>(capacity) * 100.0f; - emit bufferStatusChanged(m_bufferStatus); + m_bufferLevel = fill / static_cast<float>(capacity) * 100.0f; + emit bufferStatusChanged(m_bufferLevel); } } } |