diff options
author | Bernd Weimer <bweimer@rim.com> | 2013-02-12 17:30:01 +0100 |
---|---|---|
committer | Bernd Weimer <bweimer@rim.com> | 2013-02-19 13:54:14 +0100 |
commit | 536219c6066aec1ff34e5fb4976f72e39ebcfb10 (patch) | |
tree | 4880f06d8c43382e9ae4b0df1450b922d9dc8d34 | |
parent | 0074eaee6c09691f566d5df23bc169489edaabd9 (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.
(Backport of commit 7df6aa0 from qtmultimedia)
Change-Id: I07e336853cb0984a91ba22d346567b51b055034a
Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com>
-rw-r--r-- | plugins/multimedia/blackberry/bbmediaplayercontrol.cpp | 11 | ||||
-rw-r--r-- | plugins/multimedia/blackberry/bbmetadata.cpp | 9 | ||||
-rw-r--r-- | plugins/multimedia/blackberry/bbmetadata.h | 2 |
3 files changed, 17 insertions, 5 deletions
diff --git a/plugins/multimedia/blackberry/bbmediaplayercontrol.cpp b/plugins/multimedia/blackberry/bbmediaplayercontrol.cpp index 73680a4146..abfbfe2efd 100644 --- a/plugins/multimedia/blackberry/bbmediaplayercontrol.cpp +++ b/plugins/multimedia/blackberry/bbmediaplayercontrol.cpp @@ -335,8 +335,10 @@ void BbMediaPlayerControl::setPositionInternal(qint64 position) if (!m_context) return; - if (mmr_seek(m_context, QString::number(position).toAscii()) != 0) - emitMmError("Seeking failed"); + if (m_metaData.isSeekable()) { + if (mmr_seek(m_context, QString::number(position).toAscii()) != 0) + emitMmError("Seeking failed"); + } } void BbMediaPlayerControl::setMediaStatus(QMediaPlayer::MediaStatus status) @@ -415,9 +417,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 @@ -615,6 +615,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/plugins/multimedia/blackberry/bbmetadata.cpp b/plugins/multimedia/blackberry/bbmetadata.cpp index 0502141caa..5ea308ac74 100644 --- a/plugins/multimedia/blackberry/bbmetadata.cpp +++ b/plugins/multimedia/blackberry/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/plugins/multimedia/blackberry/bbmetadata.h b/plugins/multimedia/blackberry/bbmetadata.h index 21aa032a81..9188daaf38 100644 --- a/plugins/multimedia/blackberry/bbmetadata.h +++ b/plugins/multimedia/blackberry/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 |