summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernd Weimer <bweimer@rim.com>2013-02-08 15:52:09 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-02-12 11:57:42 +0100
commit7df6aa0f6595508dfac07cd4cb8fe543ad3f17e9 (patch)
tree0d0345ec133ece2e239a13d42652942927ecc630
parent4510c494ff84852cbe6a27faa8da2d44173b694f (diff)
downloadqtmultimedia-7df6aa0f6595508dfac07cd4cb8fe543ad3f17e9.tar.gz
BlackBerry: Fixed playback of streamed audio
Before audio is played we always seek to position 0. Unfortunately, due to a recent change in mmrenderer, playback stopped working for "non-seekable" media. There is a check now, whether the media is seekable or not. Change-Id: Ieafd8d1364f7ce0194f4fa17d3efe894aa1b289b Reviewed-by: Fabian Bumberger <fbumberger@rim.com> Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com>
-rw-r--r--src/plugins/blackberry/mediaservice/bbmediaplayercontrol.cpp11
-rw-r--r--src/plugins/blackberry/mediaservice/bbmetadata.cpp9
-rw-r--r--src/plugins/blackberry/mediaservice/bbmetadata.h2
3 files changed, 17 insertions, 5 deletions
diff --git a/src/plugins/blackberry/mediaservice/bbmediaplayercontrol.cpp b/src/plugins/blackberry/mediaservice/bbmediaplayercontrol.cpp
index 41d3bc479..55c8a7f69 100644
--- a/src/plugins/blackberry/mediaservice/bbmediaplayercontrol.cpp
+++ b/src/plugins/blackberry/mediaservice/bbmediaplayercontrol.cpp
@@ -304,8 +304,10 @@ void BbMediaPlayerControl::setPositionInternal(qint64 position)
if (!m_context)
return;
- if (mmr_seek(m_context, QString::number(position).toLatin1()) != 0)
- emitMmError("Seeking failed");
+ if (m_metaData.isSeekable()) {
+ if (mmr_seek(m_context, QString::number(position).toLatin1()) != 0)
+ emitMmError("Seeking failed");
+ }
}
void BbMediaPlayerControl::setMediaStatus(QMediaPlayer::MediaStatus status)
@@ -384,9 +386,7 @@ bool BbMediaPlayerControl::isVideoAvailable() const
bool BbMediaPlayerControl::isSeekable() const
{
- // We can currently not get that information from the mmrenderer API. Just pretend we can seek,
- // it will fail at runtime if we can not.
- return true;
+ return m_metaData.isSeekable();
}
QMediaTimeRange BbMediaPlayerControl::availablePlaybackRanges() const
@@ -596,6 +596,7 @@ void BbMediaPlayerControl::updateMetaData()
emit audioAvailableChanged(m_metaData.hasAudio());
emit videoAvailableChanged(m_metaData.hasVideo());
emit availablePlaybackRangesChanged(availablePlaybackRanges());
+ emit seekableChanged(m_metaData.isSeekable());
}
void BbMediaPlayerControl::emitMmError(const QString &msg)
diff --git a/src/plugins/blackberry/mediaservice/bbmetadata.cpp b/src/plugins/blackberry/mediaservice/bbmetadata.cpp
index b34b63e72..c2650354e 100644
--- a/src/plugins/blackberry/mediaservice/bbmetadata.cpp
+++ b/src/plugins/blackberry/mediaservice/bbmetadata.cpp
@@ -57,6 +57,7 @@ static const char * heightKey = "md_video_height";
static const char * mediaTypeKey = "md_title_mediatype";
static const char * pixelWidthKey = "md_video_pixel_height";
static const char * pixelHeightKey = "md_video_pixel_width";
+static const char * seekableKey = "md_title_seekable";
static const int mediaTypeAudioFlag = 4;
static const int mediaTypeVideoFlag = 2;
@@ -102,6 +103,8 @@ bool BbMetaData::parse(const QString &contextName)
m_pixelWidth = value.toFloat();
else if (key == pixelHeightKey)
m_pixelHeight = value.toFloat();
+ else if (key == seekableKey)
+ m_seekable = !(value == QLatin1String("0"));
}
}
@@ -116,6 +119,7 @@ void BbMetaData::clear()
m_mediaType = -1;
m_pixelWidth = 1;
m_pixelHeight = 1;
+ m_seekable = true;
}
qlonglong BbMetaData::duration() const
@@ -161,4 +165,9 @@ bool BbMetaData::hasAudio() const
return (m_mediaType & mediaTypeAudioFlag);
}
+bool BbMetaData::isSeekable() const
+{
+ return m_seekable;
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/blackberry/mediaservice/bbmetadata.h b/src/plugins/blackberry/mediaservice/bbmetadata.h
index a983a6af1..e3ac9d5c4 100644
--- a/src/plugins/blackberry/mediaservice/bbmetadata.h
+++ b/src/plugins/blackberry/mediaservice/bbmetadata.h
@@ -59,6 +59,7 @@ public:
int width() const;
bool hasVideo() const;
bool hasAudio() const;
+ bool isSeekable() const;
private:
qlonglong m_duration;
@@ -67,6 +68,7 @@ private:
int m_mediaType;
float m_pixelWidth;
float m_pixelHeight;
+ bool m_seekable;
};
QT_END_NAMESPACE