mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 23:27:43 +00:00
LibVideo: Make Matroska element parsing functions static
Making these functions static makes it easier to implement lazy-loading since the parsing functions can now be called at any time. The functions were reorganized because they were not defined in the order they are called. However, instead of moving every function to that order, I've declared some but defined them further into the file, which allows the next commit's diff to be more readable.
This commit is contained in:
parent
be9de58932
commit
f4c476b26f
2 changed files with 211 additions and 219 deletions
|
@ -18,6 +18,55 @@
|
|||
|
||||
namespace Video::Matroska {
|
||||
|
||||
class Streamer {
|
||||
public:
|
||||
Streamer(ReadonlyBytes data)
|
||||
: m_data(data)
|
||||
{
|
||||
}
|
||||
|
||||
u8 const* data() { return m_data.data() + m_position; }
|
||||
|
||||
char const* data_as_chars() { return reinterpret_cast<char const*>(data()); }
|
||||
|
||||
size_t octets_read() { return m_octets_read.last(); }
|
||||
|
||||
void push_octets_read() { m_octets_read.append(0); }
|
||||
|
||||
void pop_octets_read()
|
||||
{
|
||||
auto popped = m_octets_read.take_last();
|
||||
if (!m_octets_read.is_empty())
|
||||
m_octets_read.last() += popped;
|
||||
}
|
||||
|
||||
ErrorOr<u8> read_octet();
|
||||
|
||||
ErrorOr<i16> read_i16();
|
||||
|
||||
ErrorOr<u64> read_variable_size_integer(bool mask_length = true);
|
||||
ErrorOr<i64> read_variable_size_signed_integer();
|
||||
|
||||
ErrorOr<u64> read_u64();
|
||||
ErrorOr<double> read_float();
|
||||
|
||||
ErrorOr<String> read_string();
|
||||
|
||||
ErrorOr<void> read_unknown_element();
|
||||
|
||||
ErrorOr<void> drop_octets(size_t num_octets);
|
||||
|
||||
bool at_end() const { return remaining() == 0; }
|
||||
bool has_octet() const { return remaining() >= 1; }
|
||||
|
||||
size_t remaining() const { return m_data.size() - m_position; }
|
||||
|
||||
private:
|
||||
ReadonlyBytes m_data;
|
||||
size_t m_position { 0 };
|
||||
Vector<size_t> m_octets_read { 0 };
|
||||
};
|
||||
|
||||
class Reader {
|
||||
public:
|
||||
Reader(ReadonlyBytes data)
|
||||
|
@ -31,69 +80,6 @@ public:
|
|||
DecoderErrorOr<NonnullOwnPtr<MatroskaDocument>> parse();
|
||||
|
||||
private:
|
||||
class Streamer {
|
||||
public:
|
||||
Streamer(ReadonlyBytes data)
|
||||
: m_data(data)
|
||||
{
|
||||
}
|
||||
|
||||
u8 const* data() { return m_data.data() + m_position; }
|
||||
|
||||
char const* data_as_chars() { return reinterpret_cast<char const*>(data()); }
|
||||
|
||||
size_t octets_read() { return m_octets_read.last(); }
|
||||
|
||||
void push_octets_read() { m_octets_read.append(0); }
|
||||
|
||||
void pop_octets_read()
|
||||
{
|
||||
auto popped = m_octets_read.take_last();
|
||||
if (!m_octets_read.is_empty())
|
||||
m_octets_read.last() += popped;
|
||||
}
|
||||
|
||||
ErrorOr<u8> read_octet();
|
||||
|
||||
ErrorOr<i16> read_i16();
|
||||
|
||||
ErrorOr<u64> read_variable_size_integer(bool mask_length = true);
|
||||
ErrorOr<i64> read_variable_size_signed_integer();
|
||||
|
||||
ErrorOr<u64> read_u64();
|
||||
ErrorOr<double> read_float();
|
||||
|
||||
ErrorOr<String> read_string();
|
||||
|
||||
ErrorOr<void> read_unknown_element();
|
||||
|
||||
ErrorOr<void> drop_octets(size_t num_octets);
|
||||
|
||||
bool at_end() const { return remaining() == 0; }
|
||||
bool has_octet() const { return remaining() >= 1; }
|
||||
|
||||
size_t remaining() const { return m_data.size() - m_position; }
|
||||
|
||||
private:
|
||||
ReadonlyBytes m_data;
|
||||
size_t m_position { 0 };
|
||||
Vector<size_t> m_octets_read { 0 };
|
||||
};
|
||||
|
||||
DecoderErrorOr<void> parse_master_element(StringView element_name, Function<DecoderErrorOr<void>(u64 element_id)> element_consumer);
|
||||
DecoderErrorOr<EBMLHeader> parse_ebml_header();
|
||||
|
||||
DecoderErrorOr<void> parse_segment_elements(MatroskaDocument&);
|
||||
DecoderErrorOr<NonnullOwnPtr<SegmentInformation>> parse_information();
|
||||
|
||||
DecoderErrorOr<void> parse_tracks(MatroskaDocument&);
|
||||
DecoderErrorOr<NonnullOwnPtr<TrackEntry>> parse_track_entry();
|
||||
DecoderErrorOr<TrackEntry::VideoTrack> parse_video_track_information();
|
||||
DecoderErrorOr<TrackEntry::ColorFormat> parse_video_color_information();
|
||||
DecoderErrorOr<TrackEntry::AudioTrack> parse_audio_track_information();
|
||||
DecoderErrorOr<NonnullOwnPtr<Cluster>> parse_cluster();
|
||||
DecoderErrorOr<NonnullOwnPtr<Block>> parse_simple_block();
|
||||
|
||||
Streamer m_streamer;
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue