فهرست منبع

LibGfx/ISOBMFF: Make BoxStream MaybeOwn its stream

...and make Reader always have a BoxStream.
Nico Weber 1 سال پیش
والد
کامیت
15ba0a7e18

+ 8 - 7
Userland/Libraries/LibGfx/ImageFormats/ISOBMFF/BoxStream.h

@@ -6,24 +6,25 @@
 
 
 #pragma once
 #pragma once
 
 
+#include <AK/MaybeOwned.h>
 #include <AK/Stream.h>
 #include <AK/Stream.h>
 
 
 namespace Gfx::ISOBMFF {
 namespace Gfx::ISOBMFF {
 
 
 class BoxStream final : public Stream {
 class BoxStream final : public Stream {
 public:
 public:
-    explicit BoxStream(Stream& stream, size_t size)
-        : m_stream(stream)
+    explicit BoxStream(MaybeOwned<Stream> stream, size_t size)
+        : m_stream(move(stream))
         , m_data_left(size)
         , m_data_left(size)
     {
     {
     }
     }
 
 
-    virtual bool is_eof() const override { return m_stream.is_eof() || remaining() == 0; }
-    virtual bool is_open() const override { return m_stream.is_open(); }
-    virtual void close() override { m_stream.close(); }
+    virtual bool is_eof() const override { return m_stream->is_eof() || remaining() == 0; }
+    virtual bool is_open() const override { return m_stream->is_open(); }
+    virtual void close() override { m_stream->close(); }
     virtual ErrorOr<Bytes> read_some(Bytes bytes) override
     virtual ErrorOr<Bytes> read_some(Bytes bytes) override
     {
     {
-        auto read_bytes = TRY(m_stream.read_some(bytes));
+        auto read_bytes = TRY(m_stream->read_some(bytes));
         m_data_left -= min(read_bytes.size(), m_data_left);
         m_data_left -= min(read_bytes.size(), m_data_left);
         return read_bytes;
         return read_bytes;
     }
     }
@@ -41,7 +42,7 @@ public:
     }
     }
 
 
 private:
 private:
-    Stream& m_stream;
+    MaybeOwned<Stream> m_stream;
     size_t m_data_left;
     size_t m_data_left;
 };
 };
 
 

+ 4 - 4
Userland/Libraries/LibGfx/ImageFormats/ISOBMFF/Reader.cpp

@@ -11,16 +11,16 @@ namespace Gfx::ISOBMFF {
 ErrorOr<Reader> Reader::create(MaybeOwned<SeekableStream> stream)
 ErrorOr<Reader> Reader::create(MaybeOwned<SeekableStream> stream)
 {
 {
     size_t size = TRY(stream->size());
     size_t size = TRY(stream->size());
-    return Reader(move(stream), size);
+    return Reader(make<BoxStream>(move(stream), size));
 }
 }
 
 
 ErrorOr<BoxList> Reader::read_entire_file()
 ErrorOr<BoxList> Reader::read_entire_file()
 {
 {
     BoxList top_level_boxes;
     BoxList top_level_boxes;
 
 
-    while (!m_stream->is_eof()) {
-        auto box_header = TRY(read_box_header(m_box_stream));
-        BoxStream box_stream { m_box_stream, static_cast<size_t>(box_header.contents_size) };
+    while (!m_box_stream->is_eof()) {
+        auto box_header = TRY(read_box_header(*m_box_stream));
+        BoxStream box_stream { MaybeOwned<Stream> { *m_box_stream }, static_cast<size_t>(box_header.contents_size) };
 
 
         switch (box_header.type) {
         switch (box_header.type) {
         case BoxType::FileTypeBox:
         case BoxType::FileTypeBox:

+ 3 - 5
Userland/Libraries/LibGfx/ImageFormats/ISOBMFF/Reader.h

@@ -20,14 +20,12 @@ public:
     ErrorOr<BoxList> read_entire_file();
     ErrorOr<BoxList> read_entire_file();
 
 
 private:
 private:
-    Reader(MaybeOwned<SeekableStream> stream, size_t size)
-        : m_stream(move(stream))
-        , m_box_stream(*m_stream, size)
+    Reader(MaybeOwned<BoxStream> stream)
+        : m_box_stream(move(stream))
     {
     {
     }
     }
 
 
-    MaybeOwned<SeekableStream> m_stream;
-    BoxStream m_box_stream;
+    MaybeOwned<BoxStream> m_box_stream;
 };
 };
 
 
 }
 }