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>
This commit is contained in:
committed by
The Qt Project
parent
4510c494ff
commit
7df6aa0f65
@@ -304,8 +304,10 @@ void BbMediaPlayerControl::setPositionInternal(qint64 position)
|
|||||||
if (!m_context)
|
if (!m_context)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (mmr_seek(m_context, QString::number(position).toLatin1()) != 0)
|
if (m_metaData.isSeekable()) {
|
||||||
emitMmError("Seeking failed");
|
if (mmr_seek(m_context, QString::number(position).toLatin1()) != 0)
|
||||||
|
emitMmError("Seeking failed");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMediaPlayerControl::setMediaStatus(QMediaPlayer::MediaStatus status)
|
void BbMediaPlayerControl::setMediaStatus(QMediaPlayer::MediaStatus status)
|
||||||
@@ -384,9 +386,7 @@ bool BbMediaPlayerControl::isVideoAvailable() const
|
|||||||
|
|
||||||
bool BbMediaPlayerControl::isSeekable() const
|
bool BbMediaPlayerControl::isSeekable() const
|
||||||
{
|
{
|
||||||
// We can currently not get that information from the mmrenderer API. Just pretend we can seek,
|
return m_metaData.isSeekable();
|
||||||
// it will fail at runtime if we can not.
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QMediaTimeRange BbMediaPlayerControl::availablePlaybackRanges() const
|
QMediaTimeRange BbMediaPlayerControl::availablePlaybackRanges() const
|
||||||
@@ -596,6 +596,7 @@ void BbMediaPlayerControl::updateMetaData()
|
|||||||
emit audioAvailableChanged(m_metaData.hasAudio());
|
emit audioAvailableChanged(m_metaData.hasAudio());
|
||||||
emit videoAvailableChanged(m_metaData.hasVideo());
|
emit videoAvailableChanged(m_metaData.hasVideo());
|
||||||
emit availablePlaybackRangesChanged(availablePlaybackRanges());
|
emit availablePlaybackRangesChanged(availablePlaybackRanges());
|
||||||
|
emit seekableChanged(m_metaData.isSeekable());
|
||||||
}
|
}
|
||||||
|
|
||||||
void BbMediaPlayerControl::emitMmError(const QString &msg)
|
void BbMediaPlayerControl::emitMmError(const QString &msg)
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ static const char * heightKey = "md_video_height";
|
|||||||
static const char * mediaTypeKey = "md_title_mediatype";
|
static const char * mediaTypeKey = "md_title_mediatype";
|
||||||
static const char * pixelWidthKey = "md_video_pixel_height";
|
static const char * pixelWidthKey = "md_video_pixel_height";
|
||||||
static const char * pixelHeightKey = "md_video_pixel_width";
|
static const char * pixelHeightKey = "md_video_pixel_width";
|
||||||
|
static const char * seekableKey = "md_title_seekable";
|
||||||
|
|
||||||
static const int mediaTypeAudioFlag = 4;
|
static const int mediaTypeAudioFlag = 4;
|
||||||
static const int mediaTypeVideoFlag = 2;
|
static const int mediaTypeVideoFlag = 2;
|
||||||
@@ -102,6 +103,8 @@ bool BbMetaData::parse(const QString &contextName)
|
|||||||
m_pixelWidth = value.toFloat();
|
m_pixelWidth = value.toFloat();
|
||||||
else if (key == pixelHeightKey)
|
else if (key == pixelHeightKey)
|
||||||
m_pixelHeight = value.toFloat();
|
m_pixelHeight = value.toFloat();
|
||||||
|
else if (key == seekableKey)
|
||||||
|
m_seekable = !(value == QLatin1String("0"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,6 +119,7 @@ void BbMetaData::clear()
|
|||||||
m_mediaType = -1;
|
m_mediaType = -1;
|
||||||
m_pixelWidth = 1;
|
m_pixelWidth = 1;
|
||||||
m_pixelHeight = 1;
|
m_pixelHeight = 1;
|
||||||
|
m_seekable = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
qlonglong BbMetaData::duration() const
|
qlonglong BbMetaData::duration() const
|
||||||
@@ -161,4 +165,9 @@ bool BbMetaData::hasAudio() const
|
|||||||
return (m_mediaType & mediaTypeAudioFlag);
|
return (m_mediaType & mediaTypeAudioFlag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool BbMetaData::isSeekable() const
|
||||||
|
{
|
||||||
|
return m_seekable;
|
||||||
|
}
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ public:
|
|||||||
int width() const;
|
int width() const;
|
||||||
bool hasVideo() const;
|
bool hasVideo() const;
|
||||||
bool hasAudio() const;
|
bool hasAudio() const;
|
||||||
|
bool isSeekable() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
qlonglong m_duration;
|
qlonglong m_duration;
|
||||||
@@ -67,6 +68,7 @@ private:
|
|||||||
int m_mediaType;
|
int m_mediaType;
|
||||||
float m_pixelWidth;
|
float m_pixelWidth;
|
||||||
float m_pixelHeight;
|
float m_pixelHeight;
|
||||||
|
bool m_seekable;
|
||||||
};
|
};
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|||||||
Reference in New Issue
Block a user