From 9040194d54de2453f54b3076ee321a5924fe7429 Mon Sep 17 00:00:00 2001 From: Zaggy1024 Date: Sat, 12 Nov 2022 02:28:15 -0600 Subject: [PATCH] LibVideo: Make Matroska Block and Cluster timestamps absolute --- .../LibVideo/Containers/Matroska/Document.h | 13 +++++++------ .../Containers/Matroska/MatroskaDemuxer.cpp | 4 +--- .../LibVideo/Containers/Matroska/Reader.cpp | 12 ++++++------ Userland/Utilities/matroska.cpp | 2 +- 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/Userland/Libraries/LibVideo/Containers/Matroska/Document.h b/Userland/Libraries/LibVideo/Containers/Matroska/Document.h index eb7d8e24d5..96b2962c74 100644 --- a/Userland/Libraries/LibVideo/Containers/Matroska/Document.h +++ b/Userland/Libraries/LibVideo/Containers/Matroska/Document.h @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -152,8 +153,8 @@ public: u64 track_number() const { return m_track_number; } void set_track_number(u64 track_number) { m_track_number = track_number; } - i16 timestamp() const { return m_timestamp; } - void set_timestamp(i16 timestamp) { m_timestamp = timestamp; } + Time timestamp() const { return m_timestamp; } + void set_timestamp(Time timestamp) { m_timestamp = timestamp; } bool only_keyframes() const { return m_only_keyframes; } void set_only_keyframes(bool only_keyframes) { m_only_keyframes = only_keyframes; } bool invisible() const { return m_invisible; } @@ -170,7 +171,7 @@ public: private: u64 m_track_number { 0 }; - i16 m_timestamp { 0 }; + Time m_timestamp { Time::zero() }; bool m_only_keyframes { false }; bool m_invisible { false }; Lacing m_lacing { None }; @@ -180,11 +181,11 @@ private: class Cluster { public: - u64 timestamp() const { return m_timestamp; } - void set_timestamp(u64 timestamp) { m_timestamp = timestamp; } + Time timestamp() const { return m_timestamp; } + void set_timestamp(Time timestamp) { m_timestamp = timestamp; } private: - u64 m_timestamp; + Time m_timestamp { Time::zero() }; }; } diff --git a/Userland/Libraries/LibVideo/Containers/Matroska/MatroskaDemuxer.cpp b/Userland/Libraries/LibVideo/Containers/Matroska/MatroskaDemuxer.cpp index 04920926f5..10984bd6de 100644 --- a/Userland/Libraries/LibVideo/Containers/Matroska/MatroskaDemuxer.cpp +++ b/Userland/Libraries/LibVideo/Containers/Matroska/MatroskaDemuxer.cpp @@ -72,10 +72,8 @@ DecoderErrorOr> MatroskaDemuxer::get_next_sample_for_track status.block = TRY(status.iterator.next_block()); status.frame_index = 0; } - auto const& cluster = status.iterator.current_cluster(); - Time timestamp = Time::from_nanoseconds((cluster.timestamp() + status.block->timestamp()) * TRY(m_reader.segment_information()).timestamp_scale()); auto cicp = TRY(m_reader.track_for_track_number(track.identifier())).video_track()->color_format.to_cicp(); - return make(status.block->frame(status.frame_index++), cicp, timestamp); + return make(status.block->frame(status.frame_index++), cicp, status.block->timestamp()); } DecoderErrorOr