Coverage Report

Created: 2026-09-26 06:49

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/serenity/Userland/Libraries/LibMedia/Containers/Matroska/MatroskaDemuxer.h
Line
Count
Source
1
/*
2
 * Copyright (c) 2022, Gregory Bertilson <zaggy1024@gmail.com>
3
 *
4
 * SPDX-License-Identifier: BSD-2-Clause
5
 */
6
7
#pragma once
8
9
#include <AK/HashMap.h>
10
#include <LibMedia/Demuxer.h>
11
12
#include "Reader.h"
13
14
namespace Media::Matroska {
15
16
class MatroskaDemuxer final : public Demuxer {
17
public:
18
    // FIXME: We should instead accept some abstract data streaming type so that the demuxer
19
    //        can work with non-contiguous data.
20
    static DecoderErrorOr<NonnullOwnPtr<MatroskaDemuxer>> from_file(StringView filename);
21
    static DecoderErrorOr<NonnullOwnPtr<MatroskaDemuxer>> from_mapped_file(NonnullOwnPtr<Core::MappedFile> mapped_file);
22
23
    static DecoderErrorOr<NonnullOwnPtr<MatroskaDemuxer>> from_data(ReadonlyBytes data);
24
25
    MatroskaDemuxer(Reader&& reader)
26
0
        : m_reader(move(reader))
27
0
    {
28
0
    }
29
30
    DecoderErrorOr<Vector<Track>> get_tracks_for_type(TrackType type) override;
31
32
    DecoderErrorOr<Optional<Duration>> seek_to_most_recent_keyframe(Track track, Duration timestamp, Optional<Duration> earliest_available_sample = OptionalNone()) override;
33
34
    DecoderErrorOr<Duration> duration() override;
35
36
    DecoderErrorOr<CodecID> get_codec_id_for_track(Track track) override;
37
38
    DecoderErrorOr<ReadonlyBytes> get_codec_initialization_data_for_track(Track track) override;
39
40
    DecoderErrorOr<Sample> get_next_sample_for_track(Track track) override;
41
42
private:
43
    struct TrackStatus {
44
        SampleIterator iterator;
45
        Optional<Block> block {};
46
        size_t frame_index { 0 };
47
    };
48
49
    DecoderErrorOr<TrackStatus*> get_track_status(Track track);
50
    CodecID get_codec_id_for_string(FlyString const& codec_id);
51
52
    Reader m_reader;
53
54
    HashMap<Track, TrackStatus> m_track_statuses;
55
};
56
57
}