RIFF.h 1020 B

1234567891011121314151617181920212223242526272829303132333435
  1. /*
  2. * Copyright (c) 2018-2023, the SerenityOS developers.
  3. * Copyright (c) 2023, kleines Filmröllchen <filmroellchen@serenityos.org>
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #pragma once
  8. #include <AK/Forward.h>
  9. #include <AK/Vector.h>
  10. #include <LibRIFF/ChunkID.h>
  11. #include <LibRIFF/Details.h>
  12. // RIFF chunks (as often used by Microsoft's older formats) use little-endian fields.
  13. namespace RIFF {
  14. static constexpr StringView const riff_magic = "RIFF"sv;
  15. static constexpr StringView const list_chunk_id = "LIST"sv;
  16. using WordType = LittleEndian<u32>;
  17. using ChunkHeader = RIFF::Detail::ChunkHeader<WordType>;
  18. using FileHeader = RIFF::Detail::FileHeader<ChunkHeader>;
  19. using Chunk = RIFF::Detail::Chunk<ChunkHeader>;
  20. using OwnedChunk = RIFF::Detail::OwnedChunk<ChunkHeader>;
  21. // http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/Docs/riffmci.pdf page 23 (LIST type)
  22. struct OwnedList {
  23. static ErrorOr<OwnedList> read_from_stream(Stream& stream);
  24. ChunkID type;
  25. Vector<OwnedChunk> chunks;
  26. };
  27. }