diff options
author | Bernd Weimer <bweimer@rim.com> | 2013-02-08 15:52:09 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-02-12 11:57:42 +0100 |
commit | 7df6aa0f6595508dfac07cd4cb8fe543ad3f17e9 (patch) | |
tree | 0d0345ec133ece2e239a13d42652942927ecc630 | |
parent | 4510c494ff84852cbe6a27faa8da2d44173b694f (diff) |
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.cpp | 11 | ||||
-rw-r--r-- | src/plugins/blackberry/mediaservice/bbmetadata.cpp | 9 | ||||
-rw-r--r-- | src/plugins/blackberry/mediaservice/bbmetadata.h | 2 |
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 |