summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBernd Weimer <bweimer@blackberry.com>2014-03-18 11:29:49 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-03-19 15:21:03 +0100
commitd8764171d6da1b87c32835cb68adf783d258efa6 (patch)
treee5887dc15025a079305b0e34ec18904c58cda6cf
parent19ce431f9feec52327d902ab7005db5aff655535 (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>
-rw-r--r--src/plugins/qnx/mediaplayer/bpsmediaplayercontrol.cpp10
-rw-r--r--src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.cpp33
-rw-r--r--src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.h3
-rw-r--r--src/plugins/qnx/mediaplayer/ppsmediaplayercontrol.cpp7
4 files changed, 38 insertions, 15 deletions
diff --git a/src/plugins/qnx/mediaplayer/bpsmediaplayercontrol.cpp b/src/plugins/qnx/mediaplayer/bpsmediaplayercontrol.cpp
index dde03ad59..2774a4c88 100644
--- a/src/plugins/qnx/mediaplayer/bpsmediaplayercontrol.cpp
+++ b/src/plugins/qnx/mediaplayer/bpsmediaplayercontrol.cpp
@@ -103,11 +103,15 @@ bool BpsMediaPlayerControl::nativeEventFilter(const QByteArray &eventType, void
}
if (bps_event_get_code(event) == MMRENDERER_STATUS_UPDATE) {
- const qint64 newPosition = QString::fromLatin1(mmrenderer_event_get_position(event)).toLongLong();
+ const qint64 newPosition = QString::fromLatin1(mmrenderer_event_get_position(event)).
+ toLongLong();
handleMmStatusUpdate(newPosition);
- const QString bufferStatus = QString::fromLatin1(mmrenderer_event_get_bufferlevel(event));
- setMmBufferStatus(bufferStatus);
+ const QString status = QString::fromLatin1(mmrenderer_event_get_bufferstatus(event));
+ setMmBufferStatus(status);
+
+ const QString level = QString::fromLatin1(mmrenderer_event_get_bufferlevel(event));
+ setMmBufferLevel(level);
}
}
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);
}
}
}
diff --git a/src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.h b/src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.h
index a22e71bfc..ffa8ae4fb 100644
--- a/src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.h
+++ b/src/plugins/qnx/mediaplayer/mmrenderermediaplayercontrol.h
@@ -115,6 +115,7 @@ protected:
void emitPError(const QString &msg);
void setMmPosition(qint64 newPosition);
void setMmBufferStatus(const QString &bufferStatus);
+ void setMmBufferLevel(const QString &bufferLevel);
void handleMmStopped();
void handleMmStatusUpdate(qint64 position);
@@ -162,7 +163,7 @@ private:
bool m_playAfterMediaLoaded;
bool m_inputAttached;
int m_stopEventsToIgnore;
- int m_bufferStatus;
+ int m_bufferLevel;
QString m_tempMediaFileName;
QTimer m_loadingTimer;
};
diff --git a/src/plugins/qnx/mediaplayer/ppsmediaplayercontrol.cpp b/src/plugins/qnx/mediaplayer/ppsmediaplayercontrol.cpp
index b54c7963f..de209c49b 100644
--- a/src/plugins/qnx/mediaplayer/ppsmediaplayercontrol.cpp
+++ b/src/plugins/qnx/mediaplayer/ppsmediaplayercontrol.cpp
@@ -171,9 +171,12 @@ void PpsMediaPlayerControl::ppsReadyRead(int fd)
pps_decoder_push(&decoder, 0);
const char *value = 0;
- if (pps_decoder_get_string(&decoder, "bufferlevel", &value) == PPS_DECODER_OK) {
+
+ if (pps_decoder_get_string(&decoder, "bufferstatus", &value) == PPS_DECODER_OK)
setMmBufferStatus(QString::fromLatin1(value));
- }
+
+ if (pps_decoder_get_string(&decoder, "bufferlevel", &value) == PPS_DECODER_OK)
+ setMmBufferLevel(QString::fromLatin1(value));
if (pps_decoder_get_string(&decoder, "state", &value) == PPS_DECODER_OK) {
const QByteArray state = value;