From a6aefce178e577373c527c1966209428b762d4a8 Mon Sep 17 00:00:00 2001 From: Martchus Date: Tue, 7 Dec 2021 21:24:27 +0100 Subject: [PATCH] WIP: Read display unit --- matroska/matroskatrack.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/matroska/matroskatrack.cpp b/matroska/matroskatrack.cpp index 9e4c28d..56b56ff 100644 --- a/matroska/matroskatrack.cpp +++ b/matroska/matroskatrack.cpp @@ -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(subElement->readUInteger())); break; + case MatroskaIds::DisplayUnit: + displayUnit = subElement->readUInteger(); + break; case MatroskaIds::PixelWidth: m_pixelSize.setWidth(static_cast(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());