Coverage Report

Created: 2025-03-04 07:22

/src/serenity/Userland/Libraries/LibMedia/Video/VP9/ProbabilityTables.h
Line
Count
Source
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/Array.h>
11
#include <AK/Types.h>
12
13
#include "Symbols.h"
14
15
namespace Media::Video::VP9 {
16
17
typedef u8 ParetoTable[128][8];
18
typedef u8 KfPartitionProbs[PARTITION_CONTEXTS][PARTITION_TYPES - 1];
19
typedef u8 KfYModeProbs[INTRA_MODES][INTRA_MODES][INTRA_MODES - 1];
20
typedef u8 KfUVModeProbs[INTRA_MODES][INTRA_MODES - 1];
21
typedef u8 PartitionProbs[PARTITION_CONTEXTS][PARTITION_TYPES - 1];
22
typedef u8 YModeProbs[BLOCK_SIZE_GROUPS][INTRA_MODES - 1];
23
typedef u8 UVModeProbs[INTRA_MODES][INTRA_MODES - 1];
24
typedef u8 SkipProb[SKIP_CONTEXTS];
25
typedef u8 IsInterProb[IS_INTER_CONTEXTS];
26
typedef u8 CompModeProb[COMP_MODE_CONTEXTS];
27
typedef u8 CompRefProb[REF_CONTEXTS];
28
typedef u8 SingleRefProb[REF_CONTEXTS][2];
29
typedef u8 MvSignProb[2];
30
typedef u8 MvBitsProb[2][MV_OFFSET_BITS];
31
typedef u8 MvClass0BitProb[2];
32
typedef u8 TxProbs[TX_SIZES][TX_SIZE_CONTEXTS][TX_SIZES - 1];
33
typedef u8 InterModeProbs[INTER_MODE_CONTEXTS][INTER_MODES - 1];
34
typedef u8 InterpFilterProbs[INTERP_FILTER_CONTEXTS][SWITCHABLE_FILTERS - 1];
35
typedef u8 MvJointProbs[3];
36
typedef u8 MvClassProbs[2][MV_CLASSES - 1];
37
typedef u8 MvClass0FrProbs[2][CLASS0_SIZE][3];
38
typedef u8 MvClass0HpProbs[2];
39
typedef u8 MvFrProbs[2][3];
40
typedef u8 MvHpProb[2];
41
typedef u8 CoefProbs[TX_SIZES][BLOCK_TYPES][REF_TYPES][COEF_BANDS][PREV_COEF_CONTEXTS][UNCONSTRAINED_NODES];
42
43
class ProbabilityTables final {
44
public:
45
    void save_probs(u8 index);
46
    void reset_probs();
47
    void load_probs(u8 index);
48
    void load_probs2(u8 index);
49
50
    ParetoTable const& pareto_table() const;
51
    KfPartitionProbs const& kf_partition_probs() const;
52
    KfYModeProbs const& kf_y_mode_probs() const;
53
    KfUVModeProbs const& kf_uv_mode_prob() const;
54
55
72.6k
    PartitionProbs& partition_probs() { return m_current_probability_table.partition_probs; }
56
63.4k
    PartitionProbs const& partition_probs() const { return m_current_probability_table.partition_probs; }
57
48.5k
    YModeProbs& y_mode_probs() { return m_current_probability_table.y_mode_probs; }
58
10.6k
    YModeProbs const& y_mode_probs() const { return m_current_probability_table.y_mode_probs; }
59
7.41k
    UVModeProbs& uv_mode_probs() { return m_current_probability_table.uv_mode_probs; }
60
9.35k
    UVModeProbs const& uv_mode_probs() const { return m_current_probability_table.uv_mode_probs; }
61
15.1k
    SkipProb& skip_prob() { return m_current_probability_table.skip_prob; }
62
434k
    SkipProb const& skip_prob() const { return m_current_probability_table.skip_prob; }
63
13.1k
    IsInterProb& is_inter_prob() { return m_current_probability_table.is_inter_prob; }
64
37.7k
    IsInterProb const& is_inter_prob() const { return m_current_probability_table.is_inter_prob; }
65
7.23k
    CompModeProb& comp_mode_prob() { return m_current_probability_table.comp_mode_prob; }
66
13.3k
    CompModeProb const& comp_mode_prob() const { return m_current_probability_table.comp_mode_prob; }
67
8.37k
    CompRefProb& comp_ref_prob() { return m_current_probability_table.comp_ref_prob; }
68
11.8k
    CompRefProb const& comp_ref_prob() const { return m_current_probability_table.comp_ref_prob; }
69
20.0k
    SingleRefProb& single_ref_prob() { return m_current_probability_table.single_ref_prob; }
70
23.2k
    SingleRefProb const& single_ref_prob() const { return m_current_probability_table.single_ref_prob; }
71
5.49k
    MvSignProb& mv_sign_prob() { return m_current_probability_table.mv_sign_prob; }
72
20.2k
    MvSignProb const& mv_sign_prob() const { return m_current_probability_table.mv_sign_prob; }
73
54.9k
    MvBitsProb& mv_bits_prob() { return m_current_probability_table.mv_bits_prob; }
74
12.6k
    MvBitsProb const& mv_bits_prob() const { return m_current_probability_table.mv_bits_prob; }
75
5.49k
    MvClass0BitProb& mv_class0_bit_prob() { return m_current_probability_table.mv_class0_bit_prob; }
76
16.6k
    MvClass0BitProb const& mv_class0_bit_prob() const { return m_current_probability_table.mv_class0_bit_prob; }
77
421
    TxProbs& tx_probs() { return m_current_probability_table.tx_probs; }
78
23.4k
    TxProbs const& tx_probs() const { return m_current_probability_table.tx_probs; }
79
58.4k
    InterModeProbs& inter_mode_probs() { return m_current_probability_table.inter_mode_probs; }
80
38.5k
    InterModeProbs const& inter_mode_probs() const { return m_current_probability_table.inter_mode_probs; }
81
17.6k
    InterpFilterProbs& interp_filter_probs() { return m_current_probability_table.interp_filter_probs; }
82
18.3k
    InterpFilterProbs const& interp_filter_probs() const { return m_current_probability_table.interp_filter_probs; }
83
4.54k
    MvJointProbs& mv_joint_probs() { return m_current_probability_table.mv_joint_probs; }
84
43.3k
    MvJointProbs const& mv_joint_probs() const { return m_current_probability_table.mv_joint_probs; }
85
26.8k
    MvClassProbs& mv_class_probs() { return m_current_probability_table.mv_class_probs; }
86
30.8k
    MvClassProbs const& mv_class_probs() const { return m_current_probability_table.mv_class_probs; }
87
18.1k
    MvClass0FrProbs& mv_class0_fr_probs() { return m_current_probability_table.mv_class0_fr_probs; }
88
29.2k
    MvClass0FrProbs const& mv_class0_fr_probs() const { return m_current_probability_table.mv_class0_fr_probs; }
89
4.01k
    MvClass0HpProbs& mv_class0_hp_prob() { return m_current_probability_table.mv_class0_hp_prob; }
90
6.64k
    MvClass0HpProbs const& mv_class0_hp_prob() const { return m_current_probability_table.mv_class0_hp_prob; }
91
9.08k
    MvFrProbs& mv_fr_probs() { return m_current_probability_table.mv_fr_probs; }
92
8.36k
    MvFrProbs const& mv_fr_probs() const { return m_current_probability_table.mv_fr_probs; }
93
4.01k
    MvHpProb& mv_hp_prob() { return m_current_probability_table.mv_hp_prob; }
94
1.36k
    MvHpProb const& mv_hp_prob() const { return m_current_probability_table.mv_hp_prob; }
95
645k
    CoefProbs& coef_probs() { return m_current_probability_table.coef_probs; }
96
45.3M
    CoefProbs const& coef_probs() const { return m_current_probability_table.coef_probs; }
97
98
private:
99
    struct ProbabilityTable {
100
        PartitionProbs partition_probs;
101
        YModeProbs y_mode_probs;
102
        UVModeProbs uv_mode_probs;
103
        SkipProb skip_prob;
104
        IsInterProb is_inter_prob;
105
        CompModeProb comp_mode_prob;
106
        CompRefProb comp_ref_prob;
107
        SingleRefProb single_ref_prob;
108
        MvSignProb mv_sign_prob;
109
        MvBitsProb mv_bits_prob;
110
        MvClass0BitProb mv_class0_bit_prob;
111
        TxProbs tx_probs;
112
        InterModeProbs inter_mode_probs;
113
        InterpFilterProbs interp_filter_probs;
114
        MvJointProbs mv_joint_probs;
115
        MvClassProbs mv_class_probs;
116
        MvClass0FrProbs mv_class0_fr_probs;
117
        MvClass0HpProbs mv_class0_hp_prob;
118
        MvFrProbs mv_fr_probs;
119
        MvHpProb mv_hp_prob;
120
        CoefProbs coef_probs;
121
    };
122
123
    Array<ProbabilityTable, 4> m_saved_probability_tables;
124
    ProbabilityTable m_current_probability_table;
125
};
126
127
}