diff --git a/Userland/Libraries/LibGfx/ImageFormats/ISOBMFF/Boxes.cpp b/Userland/Libraries/LibGfx/ImageFormats/ISOBMFF/Boxes.cpp index 3658dd9b085..af8c916a59d 100644 --- a/Userland/Libraries/LibGfx/ImageFormats/ISOBMFF/Boxes.cpp +++ b/Userland/Libraries/LibGfx/ImageFormats/ISOBMFF/Boxes.cpp @@ -120,4 +120,28 @@ void SuperBox::dump(String const& prepend) const child_box->dump(indented_prepend); } +ErrorOr UserExtensionBox::read_from_stream(BoxStream& stream) +{ + // unsigned int(8)[16] uuid; + TRY(stream.read_until_filled(uuid)); + // unsigned int(8) data[]; + data = TRY(ByteBuffer::create_uninitialized(stream.remaining())); + TRY(stream.read_until_filled(data)); + return {}; +} + +void UserExtensionBox::dump(String const& prepend) const +{ + Box::dump(prepend); + + auto indented_prepend = add_indent(prepend); + + out("{}- uuid = ", prepend); + for (auto byte : uuid) + out("{:02x}"sv, byte); + outln(); + + outln("{}- data = [ {} bytes ]", prepend, data.size()); +} + } diff --git a/Userland/Libraries/LibGfx/ImageFormats/ISOBMFF/Boxes.h b/Userland/Libraries/LibGfx/ImageFormats/ISOBMFF/Boxes.h index ea3935764e9..d909e1fddb1 100644 --- a/Userland/Libraries/LibGfx/ImageFormats/ISOBMFF/Boxes.h +++ b/Userland/Libraries/LibGfx/ImageFormats/ISOBMFF/Boxes.h @@ -106,4 +106,11 @@ private: BoxList m_child_boxes; }; +struct UserExtensionBox final : public Box { + BOX_SUBTYPE(UserExtensionBox); + + Array uuid; + ByteBuffer data; +}; + } diff --git a/Userland/Libraries/LibGfx/ImageFormats/ISOBMFF/Reader.cpp b/Userland/Libraries/LibGfx/ImageFormats/ISOBMFF/Reader.cpp index e5466d45d6e..aa7fabba964 100644 --- a/Userland/Libraries/LibGfx/ImageFormats/ISOBMFF/Reader.cpp +++ b/Userland/Libraries/LibGfx/ImageFormats/ISOBMFF/Reader.cpp @@ -35,6 +35,8 @@ ErrorOr Reader::read_entire_file() return TRY(JPEG2000SignatureBox::create_from_stream(stream)); case BoxType::JPEG2000UUIDInfoBox: return TRY(JPEG2000UUIDInfoBox::create_from_stream(stream)); + case BoxType::UserExtensionBox: + return TRY(UserExtensionBox::create_from_stream(stream)); default: return OptionalNone {}; }