diff options
-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 |