summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibVideo/VP9/SyntaxElementCounter.h
blob: 740f7189bb92d572d1f38fb1a56b0ac2f96249e5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/*
 * Copyright (c) 2021, Hunter Salyer <thefalsehonesty@gmail.com>
 *
 * SPDX-License-Identifier: BSD-2-Clause
 */

#pragma once

#include "Symbols.h"
#include <AK/Types.h>

namespace Video::VP9 {

enum class SyntaxElementType {
    Partition,
    DefaultIntraMode,
    DefaultUVMode,
    IntraMode,
    SubIntraMode,
    UVMode,
    SegmentID,
    Skip,
    SegIDPredicted,
    IsInter,
    CompMode,
    CompRef,
    SingleRefP1,
    SingleRefP2,
    MVSign,
    MVClass0Bit,
    MVBit,
    TXSize,
    InterMode,
    InterpFilter,
    MVJoint,
    MVClass,
    MVClass0FR,
    MVClass0HP,
    MVFR,
    MVHP,
    Token,
    MoreCoefs,
};

class SyntaxElementCounter final {
public:
    /* (8.3) Clear Counts Process */
    void clear_counts();

    u8 m_counts_intra_mode[BLOCK_SIZE_GROUPS][INTRA_MODES];
    u8 m_counts_uv_mode[INTRA_MODES][INTRA_MODES];
    u8 m_counts_partition[PARTITION_CONTEXTS][PARTITION_TYPES];
    u8 m_counts_interp_filter[INTERP_FILTER_CONTEXTS][SWITCHABLE_FILTERS];
    u8 m_counts_inter_mode[INTER_MODE_CONTEXTS][INTER_MODES];
    u8 m_counts_tx_size[TX_SIZES][TX_SIZE_CONTEXTS][TX_SIZES];
    u8 m_counts_is_inter[IS_INTER_CONTEXTS][2];
    u8 m_counts_comp_mode[COMP_MODE_CONTEXTS][2];
    u8 m_counts_single_ref[REF_CONTEXTS][2][2];
    u8 m_counts_comp_ref[REF_CONTEXTS][2];
    u8 m_counts_skip[SKIP_CONTEXTS][2];
    u8 m_counts_mv_joint[MV_JOINTS];
    u8 m_counts_mv_sign[2][2];
    u8 m_counts_mv_class[2][MV_CLASSES];
    u8 m_counts_mv_class0_bit[2][CLASS0_SIZE];
    u8 m_counts_mv_class0_fr[2][CLASS0_SIZE][MV_FR_SIZE];
    u8 m_counts_mv_class0_hp[2][2];
    u8 m_counts_mv_bits[2][MV_OFFSET_BITS][2];
    u8 m_counts_mv_fr[2][MV_FR_SIZE];
    u8 m_counts_mv_hp[2][2];
    u8 m_counts_token[TX_SIZES][BLOCK_TYPES][REF_TYPES][COEF_BANDS][PREV_COEF_CONTEXTS][UNCONSTRAINED_NODES];
    u8 m_counts_more_coefs[TX_SIZES][BLOCK_TYPES][REF_TYPES][COEF_BANDS][PREV_COEF_CONTEXTS][2];
};

}