summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2021-06-01 14:53:06 +0200
committerLars Knoll <lars.knoll@qt.io>2021-06-01 22:50:03 +0200
commit5d23bd8a7685dc23935168a5c0fc5b71febbc189 (patch)
tree6838c08ccfb49e6270e2fb585aec5dff44b087d3
parent3f77f3592aa36633bf8aa7ff6e22c413fa95884b (diff)
Fix some issues with language tags
Correctly set the Language metadata up as a QLocale on gstreamer, and convert it to a human readable language for display. Add "No Subtitles" entry to the subtitle selection menu in the player. Change-Id: I58628456aa845a0a61872a894c6c4859dc752e54 Reviewed-by: André de la Rocha <andre.rocha@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
-rw-r--r--examples/multimediawidgets/player/player.cpp1
-rw-r--r--src/multimedia/platform/gstreamer/common/qgstreamermetadata.cpp13
-rw-r--r--src/multimedia/qmediametadata.cpp7
3 files changed, 19 insertions, 2 deletions
diff --git a/examples/multimediawidgets/player/player.cpp b/examples/multimediawidgets/player/player.cpp
index e0723c12d..318a333af 100644
--- a/examples/multimediawidgets/player/player.cpp
+++ b/examples/multimediawidgets/player/player.cpp
@@ -359,6 +359,7 @@ void Player::tracksChanged()
m_videoTracks->addItem(videoTracks.at(i).stringValue(QMediaMetaData::Language), i);
m_videoTracks->setCurrentIndex(m_player->activeVideoTrack());
+ m_subtitleTracks->addItem(QString::fromUtf8("No subtitles"), -1);
const auto subtitleTracks = m_player->subtitleTracks();
for (int i = 0; i < subtitleTracks.size(); ++i)
m_subtitleTracks->addItem(subtitleTracks.at(i).stringValue(QMediaMetaData::Language), i);
diff --git a/src/multimedia/platform/gstreamer/common/qgstreamermetadata.cpp b/src/multimedia/platform/gstreamer/common/qgstreamermetadata.cpp
index 0fc2161c7..3cf3146a3 100644
--- a/src/multimedia/platform/gstreamer/common/qgstreamermetadata.cpp
+++ b/src/multimedia/platform/gstreamer/common/qgstreamermetadata.cpp
@@ -134,6 +134,10 @@ static void addTagToMap(const GstTagList *list,
case G_TYPE_STRING:
{
const gchar *str_value = g_value_get_string(&val);
+ if (key == QMediaMetaData::Language) {
+ map->insert(key, QLocale::codeToLanguage(QString::fromUtf8(str_value)));
+ break;
+ }
map->insert(key, QString::fromUtf8(str_value));
break;
}
@@ -271,6 +275,15 @@ void QGstreamerMetaData::setMetaData(GstElement *element) const
nullptr);
break;
}
+ case QMetaType::QLocale: {
+ QString language = QLocale::languageToCode(tagValue.value<QLocale::Language>());
+ gst_tag_setter_add_tags(GST_TAG_SETTER(element),
+ GST_TAG_MERGE_REPLACE,
+ tagName,
+ language.toUtf8().constData(),
+ nullptr);
+ }
+
default:
break;
}
diff --git a/src/multimedia/qmediametadata.cpp b/src/multimedia/qmediametadata.cpp
index 311922a9e..e01f88b16 100644
--- a/src/multimedia/qmediametadata.cpp
+++ b/src/multimedia/qmediametadata.cpp
@@ -64,7 +64,7 @@ QT_BEGIN_NAMESPACE
\row \li Description \li A description of the media. \li QString
\row \li Genre \li The genre of the media. \li QStringList
\row \li Date \li The date of the media. \li QDate.
- \row \li Language \li The language of media, as an ISO 639-2 code. \li QString
+ \row \li Language \li The language of media. \li QLocale::Language
\row \li Publisher \li The publisher of the media. \li QString
\row \li Copyright \li The media's copyright notice. \li QString
@@ -229,7 +229,6 @@ QString QMediaMetaData::stringValue(QMediaMetaData::Key key) const
case Comment:
case Description:
case Genre:
- case Language:
case Publisher:
case Copyright:
case Date:
@@ -246,6 +245,10 @@ QString QMediaMetaData::stringValue(QMediaMetaData::Key key) const
case Orientation:
case LeadPerformer:
return value.toString();
+ case Language: {
+ auto l = value.value<QLocale::Language>();
+ return QLocale::languageToString(l);
+ }
case Duration: {
QTime time = QTime::fromMSecsSinceStartOfDay(value.toInt());
return time.toString();