WIP: Read display unit

This commit is contained in:
Martchus 2021-12-07 21:24:27 +01:00
parent ea8e70c807
commit a6aefce178
1 changed files with 14 additions and 0 deletions

View File

@ -296,6 +296,7 @@ void MatroskaTrack::internalParseHeader(Diagnostics &diag, AbortableProgressFeed
}
// read information about the track from the children of the track entry element
auto hasIsoLanguage = false;
auto displayUnit = std::uint64_t(0);
for (EbmlElement *trackInfoElement = m_trackElement->firstChild(), *subElement = nullptr; trackInfoElement;
trackInfoElement = trackInfoElement->nextSibling()) {
try {
@ -342,6 +343,9 @@ void MatroskaTrack::internalParseHeader(Diagnostics &diag, AbortableProgressFeed
case MatroskaIds::DisplayHeight:
m_displaySize.setHeight(static_cast<std::uint32_t>(subElement->readUInteger()));
break;
case MatroskaIds::DisplayUnit:
displayUnit = subElement->readUInteger();
break;
case MatroskaIds::PixelWidth:
m_pixelSize.setWidth(static_cast<std::uint32_t>(subElement->readUInteger()));
break;
@ -533,6 +537,16 @@ void MatroskaTrack::internalParseHeader(Diagnostics &diag, AbortableProgressFeed
m_formatName.append(" (unknown)");
}
// assign display unit
switch (displayUnit) {
case 0: // pixels
case 1: // centimeters
case 2: // inches
case 3: // display aspect ratio
default: // unknown
;
}
// use pixel size as display size if display size not specified
if (!m_displaySize.width()) {
m_displaySize.setWidth(m_pixelSize.width());