/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 | | } |