Serenity Operating System
1/*
2 * Copyright (c) 2021, Hunter Salyer <thefalsehonesty@gmail.com>
3 * Copyright (c) 2022, Gregory Bertilson <zaggy1024@gmail.com>
4 *
5 * SPDX-License-Identifier: BSD-2-Clause
6 */
7
8#pragma once
9
10#include <AK/BitStream.h>
11#include <AK/Error.h>
12#include <AK/Optional.h>
13#include <AK/Types.h>
14
15namespace Video::VP9 {
16
17class BooleanDecoder {
18public:
19 /* (9.2) */
20 static ErrorOr<BooleanDecoder> initialize(MaybeOwned<BigEndianInputBitStream> bit_stream, size_t bytes);
21 ErrorOr<bool> read_bool(u8 probability);
22 ErrorOr<u8> read_literal(u8 bits);
23 size_t bits_remaining() const;
24 ErrorOr<void> finish_decode();
25
26private:
27 BooleanDecoder(MaybeOwned<BigEndianInputBitStream>&& bit_stream, u8 value, u8 range, u64 bits_left)
28 : m_bit_stream(move(bit_stream))
29 , m_value(value)
30 , m_range(range)
31 , m_bits_left(bits_left)
32 {
33 }
34
35 MaybeOwned<BigEndianInputBitStream> m_bit_stream;
36 u8 m_value { 0 };
37 u8 m_range { 0 };
38 u64 m_bits_left { 0 };
39};
40
41}