diff options
author | Lars Knoll <lars.knoll@qt.io> | 2021-06-01 14:53:06 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2021-06-01 22:50:03 +0200 |
commit | 5d23bd8a7685dc23935168a5c0fc5b71febbc189 (patch) | |
tree | 6838c08ccfb49e6270e2fb585aec5dff44b087d3 | |
parent | 3f77f3592aa36633bf8aa7ff6e22c413fa95884b (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.cpp | 1 | ||||
-rw-r--r-- | src/multimedia/platform/gstreamer/common/qgstreamermetadata.cpp | 13 | ||||
-rw-r--r-- | src/multimedia/qmediametadata.cpp | 7 |
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(); |