/* * Copyright (c) 2021, Hunter Salyer * Copyright (c) 2022, Gregory Bertilson * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include namespace Video::VP9 { class BooleanDecoder { public: /* (9.2) */ static ErrorOr initialize(MaybeOwned bit_stream, size_t bytes); ErrorOr read_bool(u8 probability); ErrorOr read_literal(u8 bits); size_t bits_remaining() const; ErrorOr finish_decode(); private: BooleanDecoder(MaybeOwned&& bit_stream, u8 value, u8 range, u64 bits_left) : m_bit_stream(move(bit_stream)) , m_value(value) , m_range(range) , m_bits_left(bits_left) { } MaybeOwned m_bit_stream; u8 m_value { 0 }; u8 m_range { 0 }; u64 m_bits_left { 0 }; }; }