From c4514c27ab70f2171048194cd45302a0dc3cc397 Mon Sep 17 00:00:00 2001 From: Zaggy1024 Date: Sun, 29 Mar 2026 01:45:55 -0500 Subject: [PATCH] LibMedia: Add a method to get the available bytes from a MediaStream This will be used to determine the buffered time ranges. --- Libraries/LibMedia/IncrementallyPopulatedStream.cpp | 9 +++++++++ Libraries/LibMedia/IncrementallyPopulatedStream.h | 2 ++ Libraries/LibMedia/MediaStream.h | 7 +++++++ 3 files changed, 18 insertions(+) diff --git a/Libraries/LibMedia/IncrementallyPopulatedStream.cpp b/Libraries/LibMedia/IncrementallyPopulatedStream.cpp index 008802cbd3..738ca1d3e4 100644 --- a/Libraries/LibMedia/IncrementallyPopulatedStream.cpp +++ b/Libraries/LibMedia/IncrementallyPopulatedStream.cpp @@ -101,6 +101,15 @@ void IncrementallyPopulatedStream::add_chunk_at(u64 offset, ReadonlyBytes data) m_state_changed.broadcast(); } +Vector IncrementallyPopulatedStream::available_byte_ranges() const +{ + Sync::MutexLocker locker { m_mutex }; + Vector ranges; + for (auto it = m_chunks.begin(); it != m_chunks.end(); ++it) + ranges.empend(it->offset(), it->end()); + return ranges; +} + void IncrementallyPopulatedStream::close() { Sync::MutexLocker locker { m_mutex }; diff --git a/Libraries/LibMedia/IncrementallyPopulatedStream.h b/Libraries/LibMedia/IncrementallyPopulatedStream.h index e1b625ba38..6ab1c2850e 100644 --- a/Libraries/LibMedia/IncrementallyPopulatedStream.h +++ b/Libraries/LibMedia/IncrementallyPopulatedStream.h @@ -43,6 +43,8 @@ public: void close(); + virtual Vector available_byte_ranges() const override; + u64 size(); void set_expected_size(u64); Optional expected_size() const; diff --git a/Libraries/LibMedia/MediaStream.h b/Libraries/LibMedia/MediaStream.h index 4eee59810a..6e70b14be2 100644 --- a/Libraries/LibMedia/MediaStream.h +++ b/Libraries/LibMedia/MediaStream.h @@ -32,9 +32,16 @@ public: class MediaStream : public AtomicRefCounted { public: + struct ByteRange { + size_t start { 0 }; + size_t end { 0 }; + }; + virtual ~MediaStream() = default; virtual NonnullRefPtr create_cursor() = 0; + + virtual Vector available_byte_ranges() const = 0; }; }