summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYoann Lopes <yoann.lopes@digia.com>2014-03-21 19:10:23 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-04-09 13:43:42 +0200
commit464ed66119ba065a8604ceed9963b2626a9ca586 (patch)
treeeffd6f665339cb77588cd9c00243c526d986d257
parent08216062609dea47e78046dc0eeb12bc1ea8e49a (diff)
downloadqtmultimedia-464ed66119ba065a8604ceed9963b2626a9ca586.tar.gz
GStreamer: correctly get metadata from live sources.
For some unknown reason, "iradio-mode" was set to false on the source element, which was preventing new metadata to be received when playing live streams. Task-number: QTBUG-37640 Change-Id: Ib90297e81e26a99c3dfc753bdcd5cbd1ee2f6764 Reviewed-by: Christian Stromme <christian.stromme@digia.com>
-rw-r--r--src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp19
-rw-r--r--src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp15
2 files changed, 11 insertions, 23 deletions
diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp b/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp
index 22f203665..fa837d3f4 100644
--- a/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp
+++ b/src/plugins/gstreamer/mediaplayer/qgstreamermetadataprovider.cpp
@@ -162,25 +162,18 @@ void QGstreamerMetaDataProvider::updateTags()
{
QVariantMap oldTags = m_tags;
m_tags.clear();
-
- QSet<QString> allTags = QSet<QString>::fromList(m_tags.keys());
+ bool changed = false;
QMapIterator<QByteArray ,QVariant> i(m_session->tags());
while (i.hasNext()) {
i.next();
//use gstreamer native keys for elements not in m_keysMap
QString key = m_keysMap.value(i.key(), i.key());
- m_tags[key] = i.value();
- allTags.insert(key);
- }
-
- bool changed = false;
- foreach (const QString &key, allTags) {
- const QVariant value = m_tags.value(key);
- if (value != oldTags.value(key)) {
- changed = true;
- emit metaDataChanged(key, value);
- }
+ m_tags.insert(key, i.value());
+ if (i.value() != oldTags.value(key)) {
+ changed = true;
+ emit metaDataChanged(key, i.value());
+ }
}
if (changed)
diff --git a/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp b/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp
index f7522a5f7..27446e07d 100644
--- a/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp
+++ b/src/plugins/gstreamer/mediaplayer/qgstreamerplayersession.cpp
@@ -987,13 +987,15 @@ bool QGstreamerPlayerSession::processBusMessage(const QGstreamerMessage &message
if (gm) {
//tag message comes from elements inside playbin, not from playbin itself
if (GST_MESSAGE_TYPE(gm) == GST_MESSAGE_TAG) {
- //qDebug() << "tag message";
GstTagList *tag_list;
gst_message_parse_tag(gm, &tag_list);
- m_tags.unite(QGstUtils::gstTagListToMap(tag_list));
+
+ QMap<QByteArray, QVariant> newTags = QGstUtils::gstTagListToMap(tag_list);
+ QMap<QByteArray, QVariant>::const_iterator it = newTags.constBegin();
+ for ( ; it != newTags.constEnd(); ++it)
+ m_tags.insert(it.key(), it.value()); // overwrite existing tags
gst_tag_list_free(tag_list);
- //qDebug() << m_tags;
emit tagsChanged();
} else if (GST_MESSAGE_TYPE(gm) == GST_MESSAGE_DURATION) {
@@ -1459,13 +1461,6 @@ void QGstreamerPlayerSession::playbinNotifySource(GObject *o, GParamSpec *p, gpo
qDebug() << "Playbin source added:" << G_OBJECT_CLASS_NAME(G_OBJECT_GET_CLASS(source));
#endif
- // Turn off icecast metadata request, will be re-set if in QNetworkRequest
- // (souphttpsrc docs say is false by default, but header appears in request
- // @version 0.10.21)
- if (g_object_class_find_property(G_OBJECT_GET_CLASS(source), "iradio-mode") != 0)
- g_object_set(G_OBJECT(source), "iradio-mode", FALSE, NULL);
-
-
// Set Headers
const QByteArray userAgentString("User-Agent");