Don't support IETF language elements explicitely

For now let's just ignore these elements explicitely until they are
actually supported. This way the warnings are at least more specific and
there will be no inconsistency when updating the track language.
This commit is contained in:
Martchus 2020-11-26 23:18:14 +01:00
parent 5d4a211d5d
commit f371efe642
3 changed files with 26 additions and 3 deletions

View File

@ -101,6 +101,11 @@ void MatroskaChapter::internalParse(Diagnostics &diag)
case MatroskaIds::ChapLanguage:
m_names.back().languages().emplace_back(chapterDisplayElement->readString());
break;
case MatroskaIds::ChapLanguageIETF:
diag.emplace_back(DiagLevel::Warning,
"\"ChapterDisplay\"-element contains a \"ChapLanguageIETF\"-element which is not supported yet. It will be ignored.",
context);
break;
case MatroskaIds::ChapCountry:
m_names.back().countries().emplace_back(chapterDisplayElement->readString());
break;

View File

@ -47,7 +47,7 @@ void MatroskaTagField::reparse(EbmlElement &simpleTagElement, Diagnostics &diag,
{
string context("parsing Matroska tag field");
simpleTagElement.parse(diag);
bool tagDefaultFound = false;
bool tagDefaultFound = false, tagLanguageFound = false, tagLanguageIETFFound = false;
for (EbmlElement *child = simpleTagElement.firstChild(); child; child = child->nextSibling()) {
try {
child->parse(diag);
@ -87,16 +87,30 @@ void MatroskaTagField::reparse(EbmlElement &simpleTagElement, Diagnostics &diag,
}
break;
case MatroskaIds::TagLanguage:
if (value().language().empty() || value().language() == "und") {
if (!tagLanguageFound && !tagLanguageIETFFound) {
tagLanguageFound = true;
string lng = child->readString();
if (lng != "und") {
value().setLanguage(lng);
}
} else {
} else if (tagLanguageFound) {
diag.emplace_back(DiagLevel::Warning,
"\"SimpleTag\"-element contains multiple \"TagLanguage\"-elements. Surplus \"TagLanguage\"-elements will be ignored.", context);
}
break;
case MatroskaIds::TagLanguageIETF:
if (!tagLanguageIETFFound) {
tagLanguageIETFFound = true;
diag.emplace_back(DiagLevel::Warning,
"\"SimpleTag\"-element contains a \"TagLanguageIETF\"-element. That's not supported at this point. The element will be dropped "
"when applying changes.",
context);
} else {
diag.emplace_back(DiagLevel::Warning,
"\"SimpleTag\"-element contains multiple \"TagLanguageIETF\"-elements. Surplus \"TagLanguageIETF\"-elements will be ignored.",
context);
}
break;
case MatroskaIds::TagDefault:
if (!tagDefaultFound) {
setDefault(child->readUInteger() > 0);

View File

@ -411,6 +411,10 @@ void MatroskaTrack::internalParseHeader(Diagnostics &diag)
case MatroskaIds::TrackLanguage:
m_language = trackInfoElement->readString();
break;
case MatroskaIds::TrackLanguageIETF:
diag.emplace_back(DiagLevel::Warning,
"\"TrackEntry\"-element contains a \"LanguageIETF\"-element which is not supported yet. It will be ignored.", context);
break;
case MatroskaIds::CodecID:
m_format = codecIdToMediaFormat(m_formatId = trackInfoElement->readString());
break;