mirror of
https://github.com/RGBCube/serenity
synced 2025-05-17 13:15:06 +00:00

This doesn't appear to have had a measurable impact on performance, and behavior is the same. With the tiles using independent BooleanDecoders with their own backing BitStreams, we're even one step closer to threaded tiles!
41 lines
1,006 B
C++
41 lines
1,006 B
C++
/*
|
|
* Copyright (c) 2021, Hunter Salyer <thefalsehonesty@gmail.com>
|
|
* Copyright (c) 2022, Gregory Bertilson <zaggy1024@gmail.com>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/BitStream.h>
|
|
#include <AK/Error.h>
|
|
#include <AK/Optional.h>
|
|
#include <AK/Types.h>
|
|
|
|
namespace Video::VP9 {
|
|
|
|
class BooleanDecoder {
|
|
public:
|
|
/* (9.2) */
|
|
static ErrorOr<BooleanDecoder> initialize(MaybeOwned<BigEndianInputBitStream> bit_stream, size_t bytes);
|
|
ErrorOr<bool> read_bool(u8 probability);
|
|
ErrorOr<u8> read_literal(u8 bits);
|
|
size_t bits_remaining() const;
|
|
ErrorOr<void> finish_decode();
|
|
|
|
private:
|
|
BooleanDecoder(MaybeOwned<BigEndianInputBitStream>&& 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<BigEndianInputBitStream> m_bit_stream;
|
|
u8 m_value { 0 };
|
|
u8 m_range { 0 };
|
|
u64 m_bits_left { 0 };
|
|
};
|
|
|
|
}
|