File tree Expand file tree Collapse file tree 3 files changed +13
-9
lines changed
Userland/Libraries/LibVideo/Containers/Matroska Expand file tree Collapse file tree 3 files changed +13
-9
lines changed Original file line number Diff line number Diff line change @@ -31,14 +31,20 @@ class SegmentInformation {
31
31
void set_muxing_app (String muxing_app) { m_muxing_app = move (muxing_app); }
32
32
Utf8View writing_app () const { return Utf8View (m_writing_app); }
33
33
void set_writing_app (String writing_app) { m_writing_app = move (writing_app); }
34
- Optional<double > duration () const { return m_duration; }
35
- void set_duration (double duration) { m_duration.emplace (duration); }
34
+ Optional<double > duration_unscaled () const { return m_duration_unscaled; }
35
+ void set_duration_unscaled (double duration) { m_duration_unscaled.emplace (duration); }
36
+ Optional<Time> duration () const
37
+ {
38
+ if (!duration_unscaled ().has_value ())
39
+ return {};
40
+ return Time::from_nanoseconds (static_cast <i64 >(static_cast <double >(timestamp_scale ()) * duration_unscaled ().value ()));
41
+ }
36
42
37
43
private:
38
44
u64 m_timestamp_scale { 1'000'000 };
39
45
String m_muxing_app;
40
46
String m_writing_app;
41
- Optional<double > m_duration ;
47
+ Optional<double > m_duration_unscaled ;
42
48
};
43
49
44
50
class TrackEntry {
Original file line number Diff line number Diff line change @@ -82,10 +82,8 @@ DecoderErrorOr<NonnullOwnPtr<Sample>> MatroskaDemuxer::get_next_sample_for_track
82
82
83
83
DecoderErrorOr<Time> MatroskaDemuxer::duration ()
84
84
{
85
- auto segment_information = TRY (m_reader.segment_information ());
86
- if (!segment_information.duration ().has_value ())
87
- return Time::zero ();
88
- return Time::from_nanoseconds (static_cast <i64 >(segment_information.duration ().value () * segment_information.timestamp_scale ()));
85
+ auto duration = TRY (m_reader.segment_information ()).duration ();
86
+ return duration.value_or (Time::zero ());
89
87
}
90
88
91
89
}
Original file line number Diff line number Diff line change @@ -270,8 +270,8 @@ static DecoderErrorOr<SegmentInformation> parse_information(Streamer& streamer)
270
270
dbgln_if (MATROSKA_DEBUG, " Read WritingApp attribute: {}" , segment_information.writing_app ().as_string ());
271
271
break ;
272
272
case DURATION_ID:
273
- segment_information.set_duration (TRY_READ (streamer.read_float ()));
274
- dbgln_if (MATROSKA_DEBUG, " Read Duration attribute: {}" , segment_information.duration ().value ());
273
+ segment_information.set_duration_unscaled (TRY_READ (streamer.read_float ()));
274
+ dbgln_if (MATROSKA_DEBUG, " Read Duration attribute: {}" , segment_information.duration_unscaled ().value ());
275
275
break ;
276
276
default :
277
277
TRY_READ (streamer.read_unknown_element ());
You can’t perform that action at this time.
0 commit comments