}
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);
}
}
m_playAfterMediaLoaded(false),
m_inputAttached(false),
m_stopEventsToIgnore(0),
- m_bufferStatus(0)
+ m_bufferLevel(0)
{
m_loadingTimer.setSingleShot(true);
m_loadingTimer.setInterval(0);
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()
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
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);
}
}
}
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);
bool m_playAfterMediaLoaded;
bool m_inputAttached;
int m_stopEventsToIgnore;
- int m_bufferStatus;
+ int m_bufferLevel;
QString m_tempMediaFileName;
QTimer m_loadingTimer;
};
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;