Skip to content

Commit 465fa34

Browse files
caoimhebyrneADKaster
authored andcommitted
LibVideo: Add PlaybackManager::from_mapped_file
This allows us to create a PlaybackManager from a file which has already been mapped, instead of passing a file name. This means that anyone who uses `PlaybackManager` can now use LibFSAC :)
1 parent 69396d4 commit 465fa34

File tree

6 files changed

+23
-1
lines changed

6 files changed

+23
-1
lines changed

Userland/Libraries/LibVideo/Containers/Matroska/MatroskaDemuxer.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ DecoderErrorOr<NonnullOwnPtr<MatroskaDemuxer>> MatroskaDemuxer::from_file(String
1414
return make<MatroskaDemuxer>(TRY(Reader::from_file(filename)));
1515
}
1616

17+
DecoderErrorOr<NonnullOwnPtr<MatroskaDemuxer>> MatroskaDemuxer::from_mapped_file(NonnullRefPtr<Core::MappedFile> mapped_file)
18+
{
19+
return make<MatroskaDemuxer>(TRY(Reader::from_mapped_file(move(mapped_file))));
20+
}
21+
1722
DecoderErrorOr<NonnullOwnPtr<MatroskaDemuxer>> MatroskaDemuxer::from_data(ReadonlyBytes data)
1823
{
1924
return make<MatroskaDemuxer>(TRY(Reader::from_data(data)));

Userland/Libraries/LibVideo/Containers/Matroska/MatroskaDemuxer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ class MatroskaDemuxer final : public Demuxer {
1818
// FIXME: We should instead accept some abstract data streaming type so that the demuxer
1919
// can work with non-contiguous data.
2020
static DecoderErrorOr<NonnullOwnPtr<MatroskaDemuxer>> from_file(StringView filename);
21+
static DecoderErrorOr<NonnullOwnPtr<MatroskaDemuxer>> from_mapped_file(NonnullRefPtr<Core::MappedFile> mapped_file);
22+
2123
static DecoderErrorOr<NonnullOwnPtr<MatroskaDemuxer>> from_data(ReadonlyBytes data);
2224

2325
MatroskaDemuxer(Reader&& reader)

Userland/Libraries/LibVideo/Containers/Matroska/Reader.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,13 @@ constexpr u32 CUE_REFERENCE_ID = 0xDB;
8181
DecoderErrorOr<Reader> Reader::from_file(StringView path)
8282
{
8383
auto mapped_file = DECODER_TRY(DecoderErrorCategory::IO, Core::MappedFile::map(path));
84+
return from_mapped_file(mapped_file);
85+
}
86+
87+
DecoderErrorOr<Reader> Reader::from_mapped_file(NonnullRefPtr<Core::MappedFile> mapped_file)
88+
{
8489
auto reader = TRY(from_data(mapped_file->bytes()));
85-
reader.m_mapped_file = mapped_file;
90+
reader.m_mapped_file = move(mapped_file);
8691
return reader;
8792
}
8893

Userland/Libraries/LibVideo/Containers/Matroska/Reader.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ class Reader {
2525
typedef Function<DecoderErrorOr<IterationDecision>(TrackEntry const&)> TrackEntryCallback;
2626

2727
static DecoderErrorOr<Reader> from_file(StringView path);
28+
static DecoderErrorOr<Reader> from_mapped_file(NonnullRefPtr<Core::MappedFile> mapped_file);
29+
2830
static DecoderErrorOr<Reader> from_data(ReadonlyBytes data);
2931

3032
EBMLHeader const& header() const { return m_header.value(); }

Userland/Libraries/LibVideo/PlaybackManager.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ DecoderErrorOr<NonnullOwnPtr<PlaybackManager>> PlaybackManager::from_file(String
3131
return create_with_demuxer(move(demuxer));
3232
}
3333

34+
DecoderErrorOr<NonnullOwnPtr<PlaybackManager>> PlaybackManager::from_mapped_file(NonnullRefPtr<Core::MappedFile> mapped_file)
35+
{
36+
auto demuxer = TRY(Matroska::MatroskaDemuxer::from_mapped_file(move(mapped_file)));
37+
return create_with_demuxer(move(demuxer));
38+
}
39+
3440
DecoderErrorOr<NonnullOwnPtr<PlaybackManager>> PlaybackManager::from_data(ReadonlyBytes data)
3541
{
3642
auto demuxer = TRY(Matroska::MatroskaDemuxer::from_data(data));

Userland/Libraries/LibVideo/PlaybackManager.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ class PlaybackManager {
101101
static constexpr SeekMode DEFAULT_SEEK_MODE = SeekMode::Accurate;
102102

103103
static DecoderErrorOr<NonnullOwnPtr<PlaybackManager>> from_file(StringView file);
104+
static DecoderErrorOr<NonnullOwnPtr<PlaybackManager>> from_mapped_file(NonnullRefPtr<Core::MappedFile> file);
105+
104106
static DecoderErrorOr<NonnullOwnPtr<PlaybackManager>> from_data(ReadonlyBytes data);
105107

106108
PlaybackManager(NonnullOwnPtr<Demuxer>& demuxer, Track video_track, NonnullOwnPtr<VideoDecoder>&& decoder);

0 commit comments

Comments
 (0)