1 /*
2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 #include "vp9/common/vp9_entropy.h"
12 #include "vp9/common/vp9_blockd.h"
13 #include "vp9/common/vp9_onyxc_int.h"
14 #include "vp9/common/vp9_entropymode.h"
15 #include "vpx_mem/vpx_mem.h"
16 #include "vpx/vpx_integer.h"
17
18 const vp9_prob vp9_cat1_prob[] = { 159 };
19 const vp9_prob vp9_cat2_prob[] = { 165, 145 };
20 const vp9_prob vp9_cat3_prob[] = { 173, 148, 140 };
21 const vp9_prob vp9_cat4_prob[] = { 176, 155, 140, 135 };
22 const vp9_prob vp9_cat5_prob[] = { 180, 157, 141, 134, 130 };
23 const vp9_prob vp9_cat6_prob[] = {
24 254, 254, 254, 252, 249, 243, 230, 196, 177, 153, 140, 133, 130, 129
25 };
26 #if CONFIG_VP9_HIGHBITDEPTH
27 const vp9_prob vp9_cat1_prob_high10[] = { 159 };
28 const vp9_prob vp9_cat2_prob_high10[] = { 165, 145 };
29 const vp9_prob vp9_cat3_prob_high10[] = { 173, 148, 140 };
30 const vp9_prob vp9_cat4_prob_high10[] = { 176, 155, 140, 135 };
31 const vp9_prob vp9_cat5_prob_high10[] = { 180, 157, 141, 134, 130 };
32 const vp9_prob vp9_cat6_prob_high10[] = {
33 255, 255, 254, 254, 254, 252, 249, 243,
34 230, 196, 177, 153, 140, 133, 130, 129
35 };
36 const vp9_prob vp9_cat1_prob_high12[] = { 159 };
37 const vp9_prob vp9_cat2_prob_high12[] = { 165, 145 };
38 const vp9_prob vp9_cat3_prob_high12[] = { 173, 148, 140 };
39 const vp9_prob vp9_cat4_prob_high12[] = { 176, 155, 140, 135 };
40 const vp9_prob vp9_cat5_prob_high12[] = { 180, 157, 141, 134, 130 };
41 const vp9_prob vp9_cat6_prob_high12[] = {
42 255, 255, 255, 255, 254, 254, 254, 252, 249,
43 243, 230, 196, 177, 153, 140, 133, 130, 129
44 };
45 #endif
46
47 const uint8_t vp9_coefband_trans_8x8plus[1024] = {
48 0, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4,
49 4, 4, 4, 4, 4, 5,
50 // beyond MAXBAND_INDEX+1 all values are filled as 5
51 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
52 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
53 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
54 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
55 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
56 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
57 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
58 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
59 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
60 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
61 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
62 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
63 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
64 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
65 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
66 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
67 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
68 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
69 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
70 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
71 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
72 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
73 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
74 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
75 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
76 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
77 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
78 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
79 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
80 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
81 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
82 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
83 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
84 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
85 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
86 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
87 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
88 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
89 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
90 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
91 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
92 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
93 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
94 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
95 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
96 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
97 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
98 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
99 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
100 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
101 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
102 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
103 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
104 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
105 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
106 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
107 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
108 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
109 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
110 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
111 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
112 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
113 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
114 };
115
116 const uint8_t vp9_coefband_trans_4x4[16] = {
117 0, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5,
118 };
119
120 const uint8_t vp9_pt_energy_class[ENTROPY_TOKENS] = {
121 0, 1, 2, 3, 3, 4, 4, 5, 5, 5, 5, 5
122 };
123
124 const vp9_tree_index vp9_coefmodel_tree[TREE_SIZE(UNCONSTRAINED_NODES + 1)] = {
125 -EOB_MODEL_TOKEN, 2,
126 -ZERO_TOKEN, 4,
127 -ONE_TOKEN, -TWO_TOKEN,
128 };
129
130 // Model obtained from a 2-sided zero-centerd distribuition derived
131 // from a Pareto distribution. The cdf of the distribution is:
132 // cdf(x) = 0.5 + 0.5 * sgn(x) * [1 - {alpha/(alpha + |x|)} ^ beta]
133 //
134 // For a given beta and a given probablity of the 1-node, the alpha
135 // is first solved, and then the {alpha, beta} pair is used to generate
136 // the probabilities for the rest of the nodes.
137
138 // beta = 8
139
140 // Every odd line in this table can be generated from the even lines
141 // by averaging :
142 // vp9_pareto8_full[l][node] = (vp9_pareto8_full[l-1][node] +
143 // vp9_pareto8_full[l+1][node] ) >> 1;
144 const vp9_prob vp9_pareto8_full[COEFF_PROB_MODELS][MODEL_NODES] = {
145 { 3, 86, 128, 6, 86, 23, 88, 29},
146 { 6, 86, 128, 11, 87, 42, 91, 52},
147 { 9, 86, 129, 17, 88, 61, 94, 76},
148 { 12, 86, 129, 22, 88, 77, 97, 93},
149 { 15, 87, 129, 28, 89, 93, 100, 110},
150 { 17, 87, 129, 33, 90, 105, 103, 123},
151 { 20, 88, 130, 38, 91, 118, 106, 136},
152 { 23, 88, 130, 43, 91, 128, 108, 146},
153 { 26, 89, 131, 48, 92, 139, 111, 156},
154 { 28, 89, 131, 53, 93, 147, 114, 163},
155 { 31, 90, 131, 58, 94, 156, 117, 171},
156 { 34, 90, 131, 62, 94, 163, 119, 177},
157 { 37, 90, 132, 66, 95, 171, 122, 184},
158 { 39, 90, 132, 70, 96, 177, 124, 189},
159 { 42, 91, 132, 75, 97, 183, 127, 194},
160 { 44, 91, 132, 79, 97, 188, 129, 198},
161 { 47, 92, 133, 83, 98, 193, 132, 202},
162 { 49, 92, 133, 86, 99, 197, 134, 205},
163 { 52, 93, 133, 90, 100, 201, 137, 208},
164 { 54, 93, 133, 94, 100, 204, 139, 211},
165 { 57, 94, 134, 98, 101, 208, 142, 214},
166 { 59, 94, 134, 101, 102, 211, 144, 216},
167 { 62, 94, 135, 105, 103, 214, 146, 218},
168 { 64, 94, 135, 108, 103, 216, 148, 220},
169 { 66, 95, 135, 111, 104, 219, 151, 222},
170 { 68, 95, 135, 114, 105, 221, 153, 223},
171 { 71, 96, 136, 117, 106, 224, 155, 225},
172 { 73, 96, 136, 120, 106, 225, 157, 226},
173 { 76, 97, 136, 123, 107, 227, 159, 228},
174 { 78, 97, 136, 126, 108, 229, 160, 229},
175 { 80, 98, 137, 129, 109, 231, 162, 231},
176 { 82, 98, 137, 131, 109, 232, 164, 232},
177 { 84, 98, 138, 134, 110, 234, 166, 233},
178 { 86, 98, 138, 137, 111, 235, 168, 234},
179 { 89, 99, 138, 140, 112, 236, 170, 235},
180 { 91, 99, 138, 142, 112, 237, 171, 235},
181 { 93, 100, 139, 145, 113, 238, 173, 236},
182 { 95, 100, 139, 147, 114, 239, 174, 237},
183 { 97, 101, 140, 149, 115, 240, 176, 238},
184 { 99, 101, 140, 151, 115, 241, 177, 238},
185 {101, 102, 140, 154, 116, 242, 179, 239},
186 {103, 102, 140, 156, 117, 242, 180, 239},
187 {105, 103, 141, 158, 118, 243, 182, 240},
188 {107, 103, 141, 160, 118, 243, 183, 240},
189 {109, 104, 141, 162, 119, 244, 185, 241},
190 {111, 104, 141, 164, 119, 244, 186, 241},
191 {113, 104, 142, 166, 120, 245, 187, 242},
192 {114, 104, 142, 168, 121, 245, 188, 242},
193 {116, 105, 143, 170, 122, 246, 190, 243},
194 {118, 105, 143, 171, 122, 246, 191, 243},
195 {120, 106, 143, 173, 123, 247, 192, 244},
196 {121, 106, 143, 175, 124, 247, 193, 244},
197 {123, 107, 144, 177, 125, 248, 195, 244},
198 {125, 107, 144, 178, 125, 248, 196, 244},
199 {127, 108, 145, 180, 126, 249, 197, 245},
200 {128, 108, 145, 181, 127, 249, 198, 245},
201 {130, 109, 145, 183, 128, 249, 199, 245},
202 {132, 109, 145, 184, 128, 249, 200, 245},
203 {134, 110, 146, 186, 129, 250, 201, 246},
204 {135, 110, 146, 187, 130, 250, 202, 246},
205 {137, 111, 147, 189, 131, 251, 203, 246},
206 {138, 111, 147, 190, 131, 251, 204, 246},
207 {140, 112, 147, 192, 132, 251, 205, 247},
208 {141, 112, 147, 193, 132, 251, 206, 247},
209 {143, 113, 148, 194, 133, 251, 207, 247},
210 {144, 113, 148, 195, 134, 251, 207, 247},
211 {146, 114, 149, 197, 135, 252, 208, 248},
212 {147, 114, 149, 198, 135, 252, 209, 248},
213 {149, 115, 149, 199, 136, 252, 210, 248},
214 {150, 115, 149, 200, 137, 252, 210, 248},
215 {152, 115, 150, 201, 138, 252, 211, 248},
216 {153, 115, 150, 202, 138, 252, 212, 248},
217 {155, 116, 151, 204, 139, 253, 213, 249},
218 {156, 116, 151, 205, 139, 253, 213, 249},
219 {158, 117, 151, 206, 140, 253, 214, 249},
220 {159, 117, 151, 207, 141, 253, 215, 249},
221 {161, 118, 152, 208, 142, 253, 216, 249},
222 {162, 118, 152, 209, 142, 253, 216, 249},
223 {163, 119, 153, 210, 143, 253, 217, 249},
224 {164, 119, 153, 211, 143, 253, 217, 249},
225 {166, 120, 153, 212, 144, 254, 218, 250},
226 {167, 120, 153, 212, 145, 254, 219, 250},
227 {168, 121, 154, 213, 146, 254, 220, 250},
228 {169, 121, 154, 214, 146, 254, 220, 250},
229 {171, 122, 155, 215, 147, 254, 221, 250},
230 {172, 122, 155, 216, 147, 254, 221, 250},
231 {173, 123, 155, 217, 148, 254, 222, 250},
232 {174, 123, 155, 217, 149, 254, 222, 250},
233 {176, 124, 156, 218, 150, 254, 223, 250},
234 {177, 124, 156, 219, 150, 254, 223, 250},
235 {178, 125, 157, 220, 151, 254, 224, 251},
236 {179, 125, 157, 220, 151, 254, 224, 251},
237 {180, 126, 157, 221, 152, 254, 225, 251},
238 {181, 126, 157, 221, 152, 254, 225, 251},
239 {183, 127, 158, 222, 153, 254, 226, 251},
240 {184, 127, 158, 223, 154, 254, 226, 251},
241 {185, 128, 159, 224, 155, 255, 227, 251},
242 {186, 128, 159, 224, 155, 255, 227, 251},
243 {187, 129, 160, 225, 156, 255, 228, 251},
244 {188, 130, 160, 225, 156, 255, 228, 251},
245 {189, 131, 160, 226, 157, 255, 228, 251},
246 {190, 131, 160, 226, 158, 255, 228, 251},
247 {191, 132, 161, 227, 159, 255, 229, 251},
248 {192, 132, 161, 227, 159, 255, 229, 251},
249 {193, 133, 162, 228, 160, 255, 230, 252},
250 {194, 133, 162, 229, 160, 255, 230, 252},
251 {195, 134, 163, 230, 161, 255, 231, 252},
252 {196, 134, 163, 230, 161, 255, 231, 252},
253 {197, 135, 163, 231, 162, 255, 231, 252},
254 {198, 135, 163, 231, 162, 255, 231, 252},
255 {199, 136, 164, 232, 163, 255, 232, 252},
256 {200, 136, 164, 232, 164, 255, 232, 252},
257 {201, 137, 165, 233, 165, 255, 233, 252},
258 {201, 137, 165, 233, 165, 255, 233, 252},
259 {202, 138, 166, 233, 166, 255, 233, 252},
260 {203, 138, 166, 233, 166, 255, 233, 252},
261 {204, 139, 166, 234, 167, 255, 234, 252},
262 {205, 139, 166, 234, 167, 255, 234, 252},
263 {206, 140, 167, 235, 168, 255, 235, 252},
264 {206, 140, 167, 235, 168, 255, 235, 252},
265 {207, 141, 168, 236, 169, 255, 235, 252},
266 {208, 141, 168, 236, 170, 255, 235, 252},
267 {209, 142, 169, 237, 171, 255, 236, 252},
268 {209, 143, 169, 237, 171, 255, 236, 252},
269 {210, 144, 169, 237, 172, 255, 236, 252},
270 {211, 144, 169, 237, 172, 255, 236, 252},
271 {212, 145, 170, 238, 173, 255, 237, 252},
272 {213, 145, 170, 238, 173, 255, 237, 252},
273 {214, 146, 171, 239, 174, 255, 237, 253},
274 {214, 146, 171, 239, 174, 255, 237, 253},
275 {215, 147, 172, 240, 175, 255, 238, 253},
276 {215, 147, 172, 240, 175, 255, 238, 253},
277 {216, 148, 173, 240, 176, 255, 238, 253},
278 {217, 148, 173, 240, 176, 255, 238, 253},
279 {218, 149, 173, 241, 177, 255, 239, 253},
280 {218, 149, 173, 241, 178, 255, 239, 253},
281 {219, 150, 174, 241, 179, 255, 239, 253},
282 {219, 151, 174, 241, 179, 255, 239, 253},
283 {220, 152, 175, 242, 180, 255, 240, 253},
284 {221, 152, 175, 242, 180, 255, 240, 253},
285 {222, 153, 176, 242, 181, 255, 240, 253},
286 {222, 153, 176, 242, 181, 255, 240, 253},
287 {223, 154, 177, 243, 182, 255, 240, 253},
288 {223, 154, 177, 243, 182, 255, 240, 253},
289 {224, 155, 178, 244, 183, 255, 241, 253},
290 {224, 155, 178, 244, 183, 255, 241, 253},
291 {225, 156, 178, 244, 184, 255, 241, 253},
292 {225, 157, 178, 244, 184, 255, 241, 253},
293 {226, 158, 179, 244, 185, 255, 242, 253},
294 {227, 158, 179, 244, 185, 255, 242, 253},
295 {228, 159, 180, 245, 186, 255, 242, 253},
296 {228, 159, 180, 245, 186, 255, 242, 253},
297 {229, 160, 181, 245, 187, 255, 242, 253},
298 {229, 160, 181, 245, 187, 255, 242, 253},
299 {230, 161, 182, 246, 188, 255, 243, 253},
300 {230, 162, 182, 246, 188, 255, 243, 253},
301 {231, 163, 183, 246, 189, 255, 243, 253},
302 {231, 163, 183, 246, 189, 255, 243, 253},
303 {232, 164, 184, 247, 190, 255, 243, 253},
304 {232, 164, 184, 247, 190, 255, 243, 253},
305 {233, 165, 185, 247, 191, 255, 244, 253},
306 {233, 165, 185, 247, 191, 255, 244, 253},
307 {234, 166, 185, 247, 192, 255, 244, 253},
308 {234, 167, 185, 247, 192, 255, 244, 253},
309 {235, 168, 186, 248, 193, 255, 244, 253},
310 {235, 168, 186, 248, 193, 255, 244, 253},
311 {236, 169, 187, 248, 194, 255, 244, 253},
312 {236, 169, 187, 248, 194, 255, 244, 253},
313 {236, 170, 188, 248, 195, 255, 245, 253},
314 {236, 170, 188, 248, 195, 255, 245, 253},
315 {237, 171, 189, 249, 196, 255, 245, 254},
316 {237, 172, 189, 249, 196, 255, 245, 254},
317 {238, 173, 190, 249, 197, 255, 245, 254},
318 {238, 173, 190, 249, 197, 255, 245, 254},
319 {239, 174, 191, 249, 198, 255, 245, 254},
320 {239, 174, 191, 249, 198, 255, 245, 254},
321 {240, 175, 192, 249, 199, 255, 246, 254},
322 {240, 176, 192, 249, 199, 255, 246, 254},
323 {240, 177, 193, 250, 200, 255, 246, 254},
324 {240, 177, 193, 250, 200, 255, 246, 254},
325 {241, 178, 194, 250, 201, 255, 246, 254},
326 {241, 178, 194, 250, 201, 255, 246, 254},
327 {242, 179, 195, 250, 202, 255, 246, 254},
328 {242, 180, 195, 250, 202, 255, 246, 254},
329 {242, 181, 196, 250, 203, 255, 247, 254},
330 {242, 181, 196, 250, 203, 255, 247, 254},
331 {243, 182, 197, 251, 204, 255, 247, 254},
332 {243, 183, 197, 251, 204, 255, 247, 254},
333 {244, 184, 198, 251, 205, 255, 247, 254},
334 {244, 184, 198, 251, 205, 255, 247, 254},
335 {244, 185, 199, 251, 206, 255, 247, 254},
336 {244, 185, 199, 251, 206, 255, 247, 254},
337 {245, 186, 200, 251, 207, 255, 247, 254},
338 {245, 187, 200, 251, 207, 255, 247, 254},
339 {246, 188, 201, 252, 207, 255, 248, 254},
340 {246, 188, 201, 252, 207, 255, 248, 254},
341 {246, 189, 202, 252, 208, 255, 248, 254},
342 {246, 190, 202, 252, 208, 255, 248, 254},
343 {247, 191, 203, 252, 209, 255, 248, 254},
344 {247, 191, 203, 252, 209, 255, 248, 254},
345 {247, 192, 204, 252, 210, 255, 248, 254},
346 {247, 193, 204, 252, 210, 255, 248, 254},
347 {248, 194, 205, 252, 211, 255, 248, 254},
348 {248, 194, 205, 252, 211, 255, 248, 254},
349 {248, 195, 206, 252, 212, 255, 249, 254},
350 {248, 196, 206, 252, 212, 255, 249, 254},
351 {249, 197, 207, 253, 213, 255, 249, 254},
352 {249, 197, 207, 253, 213, 255, 249, 254},
353 {249, 198, 208, 253, 214, 255, 249, 254},
354 {249, 199, 209, 253, 214, 255, 249, 254},
355 {250, 200, 210, 253, 215, 255, 249, 254},
356 {250, 200, 210, 253, 215, 255, 249, 254},
357 {250, 201, 211, 253, 215, 255, 249, 254},
358 {250, 202, 211, 253, 215, 255, 249, 254},
359 {250, 203, 212, 253, 216, 255, 249, 254},
360 {250, 203, 212, 253, 216, 255, 249, 254},
361 {251, 204, 213, 253, 217, 255, 250, 254},
362 {251, 205, 213, 253, 217, 255, 250, 254},
363 {251, 206, 214, 254, 218, 255, 250, 254},
364 {251, 206, 215, 254, 218, 255, 250, 254},
365 {252, 207, 216, 254, 219, 255, 250, 254},
366 {252, 208, 216, 254, 219, 255, 250, 254},
367 {252, 209, 217, 254, 220, 255, 250, 254},
368 {252, 210, 217, 254, 220, 255, 250, 254},
369 {252, 211, 218, 254, 221, 255, 250, 254},
370 {252, 212, 218, 254, 221, 255, 250, 254},
371 {253, 213, 219, 254, 222, 255, 250, 254},
372 {253, 213, 220, 254, 222, 255, 250, 254},
373 {253, 214, 221, 254, 223, 255, 250, 254},
374 {253, 215, 221, 254, 223, 255, 250, 254},
375 {253, 216, 222, 254, 224, 255, 251, 254},
376 {253, 217, 223, 254, 224, 255, 251, 254},
377 {253, 218, 224, 254, 225, 255, 251, 254},
378 {253, 219, 224, 254, 225, 255, 251, 254},
379 {254, 220, 225, 254, 225, 255, 251, 254},
380 {254, 221, 226, 254, 225, 255, 251, 254},
381 {254, 222, 227, 255, 226, 255, 251, 254},
382 {254, 223, 227, 255, 226, 255, 251, 254},
383 {254, 224, 228, 255, 227, 255, 251, 254},
384 {254, 225, 229, 255, 227, 255, 251, 254},
385 {254, 226, 230, 255, 228, 255, 251, 254},
386 {254, 227, 230, 255, 229, 255, 251, 254},
387 {255, 228, 231, 255, 230, 255, 251, 254},
388 {255, 229, 232, 255, 230, 255, 251, 254},
389 {255, 230, 233, 255, 231, 255, 252, 254},
390 {255, 231, 234, 255, 231, 255, 252, 254},
391 {255, 232, 235, 255, 232, 255, 252, 254},
392 {255, 233, 236, 255, 232, 255, 252, 254},
393 {255, 235, 237, 255, 233, 255, 252, 254},
394 {255, 236, 238, 255, 234, 255, 252, 254},
395 {255, 238, 240, 255, 235, 255, 252, 255},
396 {255, 239, 241, 255, 235, 255, 252, 254},
397 {255, 241, 243, 255, 236, 255, 252, 254},
398 {255, 243, 245, 255, 237, 255, 252, 254},
399 {255, 246, 247, 255, 239, 255, 253, 255},
400 {255, 246, 247, 255, 239, 255, 253, 255},
401 };
402
403 static const vp9_coeff_probs_model default_coef_probs_4x4[PLANE_TYPES] = {
404 { // Y plane
405 { // Intra
406 { // Band 0
407 { 195, 29, 183 }, { 84, 49, 136 }, { 8, 42, 71 }
408 }, { // Band 1
409 { 31, 107, 169 }, { 35, 99, 159 }, { 17, 82, 140 },
410 { 8, 66, 114 }, { 2, 44, 76 }, { 1, 19, 32 }
411 }, { // Band 2
412 { 40, 132, 201 }, { 29, 114, 187 }, { 13, 91, 157 },
413 { 7, 75, 127 }, { 3, 58, 95 }, { 1, 28, 47 }
414 }, { // Band 3
415 { 69, 142, 221 }, { 42, 122, 201 }, { 15, 91, 159 },
416 { 6, 67, 121 }, { 1, 42, 77 }, { 1, 17, 31 }
417 }, { // Band 4
418 { 102, 148, 228 }, { 67, 117, 204 }, { 17, 82, 154 },
419 { 6, 59, 114 }, { 2, 39, 75 }, { 1, 15, 29 }
420 }, { // Band 5
421 { 156, 57, 233 }, { 119, 57, 212 }, { 58, 48, 163 },
422 { 29, 40, 124 }, { 12, 30, 81 }, { 3, 12, 31 }
423 }
424 }, { // Inter
425 { // Band 0
426 { 191, 107, 226 }, { 124, 117, 204 }, { 25, 99, 155 }
427 }, { // Band 1
428 { 29, 148, 210 }, { 37, 126, 194 }, { 8, 93, 157 },
429 { 2, 68, 118 }, { 1, 39, 69 }, { 1, 17, 33 }
430 }, { // Band 2
431 { 41, 151, 213 }, { 27, 123, 193 }, { 3, 82, 144 },
432 { 1, 58, 105 }, { 1, 32, 60 }, { 1, 13, 26 }
433 }, { // Band 3
434 { 59, 159, 220 }, { 23, 126, 198 }, { 4, 88, 151 },
435 { 1, 66, 114 }, { 1, 38, 71 }, { 1, 18, 34 }
436 }, { // Band 4
437 { 114, 136, 232 }, { 51, 114, 207 }, { 11, 83, 155 },
438 { 3, 56, 105 }, { 1, 33, 65 }, { 1, 17, 34 }
439 }, { // Band 5
440 { 149, 65, 234 }, { 121, 57, 215 }, { 61, 49, 166 },
441 { 28, 36, 114 }, { 12, 25, 76 }, { 3, 16, 42 }
442 }
443 }
444 }, { // UV plane
445 { // Intra
446 { // Band 0
447 { 214, 49, 220 }, { 132, 63, 188 }, { 42, 65, 137 }
448 }, { // Band 1
449 { 85, 137, 221 }, { 104, 131, 216 }, { 49, 111, 192 },
450 { 21, 87, 155 }, { 2, 49, 87 }, { 1, 16, 28 }
451 }, { // Band 2
452 { 89, 163, 230 }, { 90, 137, 220 }, { 29, 100, 183 },
453 { 10, 70, 135 }, { 2, 42, 81 }, { 1, 17, 33 }
454 }, { // Band 3
455 { 108, 167, 237 }, { 55, 133, 222 }, { 15, 97, 179 },
456 { 4, 72, 135 }, { 1, 45, 85 }, { 1, 19, 38 }
457 }, { // Band 4
458 { 124, 146, 240 }, { 66, 124, 224 }, { 17, 88, 175 },
459 { 4, 58, 122 }, { 1, 36, 75 }, { 1, 18, 37 }
460 }, { // Band 5
461 { 141, 79, 241 }, { 126, 70, 227 }, { 66, 58, 182 },
462 { 30, 44, 136 }, { 12, 34, 96 }, { 2, 20, 47 }
463 }
464 }, { // Inter
465 { // Band 0
466 { 229, 99, 249 }, { 143, 111, 235 }, { 46, 109, 192 }
467 }, { // Band 1
468 { 82, 158, 236 }, { 94, 146, 224 }, { 25, 117, 191 },
469 { 9, 87, 149 }, { 3, 56, 99 }, { 1, 33, 57 }
470 }, { // Band 2
471 { 83, 167, 237 }, { 68, 145, 222 }, { 10, 103, 177 },
472 { 2, 72, 131 }, { 1, 41, 79 }, { 1, 20, 39 }
473 }, { // Band 3
474 { 99, 167, 239 }, { 47, 141, 224 }, { 10, 104, 178 },
475 { 2, 73, 133 }, { 1, 44, 85 }, { 1, 22, 47 }
476 }, { // Band 4
477 { 127, 145, 243 }, { 71, 129, 228 }, { 17, 93, 177 },
478 { 3, 61, 124 }, { 1, 41, 84 }, { 1, 21, 52 }
479 }, { // Band 5
480 { 157, 78, 244 }, { 140, 72, 231 }, { 69, 58, 184 },
481 { 31, 44, 137 }, { 14, 38, 105 }, { 8, 23, 61 }
482 }
483 }
484 }
485 };
486
487 static const vp9_coeff_probs_model default_coef_probs_8x8[PLANE_TYPES] = {
488 { // Y plane
489 { // Intra
490 { // Band 0
491 { 125, 34, 187 }, { 52, 41, 133 }, { 6, 31, 56 }
492 }, { // Band 1
493 { 37, 109, 153 }, { 51, 102, 147 }, { 23, 87, 128 },
494 { 8, 67, 101 }, { 1, 41, 63 }, { 1, 19, 29 }
495 }, { // Band 2
496 { 31, 154, 185 }, { 17, 127, 175 }, { 6, 96, 145 },
497 { 2, 73, 114 }, { 1, 51, 82 }, { 1, 28, 45 }
498 }, { // Band 3
499 { 23, 163, 200 }, { 10, 131, 185 }, { 2, 93, 148 },
500 { 1, 67, 111 }, { 1, 41, 69 }, { 1, 14, 24 }
501 }, { // Band 4
502 { 29, 176, 217 }, { 12, 145, 201 }, { 3, 101, 156 },
503 { 1, 69, 111 }, { 1, 39, 63 }, { 1, 14, 23 }
504 }, { // Band 5
505 { 57, 192, 233 }, { 25, 154, 215 }, { 6, 109, 167 },
506 { 3, 78, 118 }, { 1, 48, 69 }, { 1, 21, 29 }
507 }
508 }, { // Inter
509 { // Band 0
510 { 202, 105, 245 }, { 108, 106, 216 }, { 18, 90, 144 }
511 }, { // Band 1
512 { 33, 172, 219 }, { 64, 149, 206 }, { 14, 117, 177 },
513 { 5, 90, 141 }, { 2, 61, 95 }, { 1, 37, 57 }
514 }, { // Band 2
515 { 33, 179, 220 }, { 11, 140, 198 }, { 1, 89, 148 },
516 { 1, 60, 104 }, { 1, 33, 57 }, { 1, 12, 21 }
517 }, { // Band 3
518 { 30, 181, 221 }, { 8, 141, 198 }, { 1, 87, 145 },
519 { 1, 58, 100 }, { 1, 31, 55 }, { 1, 12, 20 }
520 }, { // Band 4
521 { 32, 186, 224 }, { 7, 142, 198 }, { 1, 86, 143 },
522 { 1, 58, 100 }, { 1, 31, 55 }, { 1, 12, 22 }
523 }, { // Band 5
524 { 57, 192, 227 }, { 20, 143, 204 }, { 3, 96, 154 },
525 { 1, 68, 112 }, { 1, 42, 69 }, { 1, 19, 32 }
526 }
527 }
528 }, { // UV plane
529 { // Intra
530 { // Band 0
531 { 212, 35, 215 }, { 113, 47, 169 }, { 29, 48, 105 }
532 }, { // Band 1
533 { 74, 129, 203 }, { 106, 120, 203 }, { 49, 107, 178 },
534 { 19, 84, 144 }, { 4, 50, 84 }, { 1, 15, 25 }
535 }, { // Band 2
536 { 71, 172, 217 }, { 44, 141, 209 }, { 15, 102, 173 },
537 { 6, 76, 133 }, { 2, 51, 89 }, { 1, 24, 42 }
538 }, { // Band 3
539 { 64, 185, 231 }, { 31, 148, 216 }, { 8, 103, 175 },
540 { 3, 74, 131 }, { 1, 46, 81 }, { 1, 18, 30 }
541 }, { // Band 4
542 { 65, 196, 235 }, { 25, 157, 221 }, { 5, 105, 174 },
543 { 1, 67, 120 }, { 1, 38, 69 }, { 1, 15, 30 }
544 }, { // Band 5
545 { 65, 204, 238 }, { 30, 156, 224 }, { 7, 107, 177 },
546 { 2, 70, 124 }, { 1, 42, 73 }, { 1, 18, 34 }
547 }
548 }, { // Inter
549 { // Band 0
550 { 225, 86, 251 }, { 144, 104, 235 }, { 42, 99, 181 }
551 }, { // Band 1
552 { 85, 175, 239 }, { 112, 165, 229 }, { 29, 136, 200 },
553 { 12, 103, 162 }, { 6, 77, 123 }, { 2, 53, 84 }
554 }, { // Band 2
555 { 75, 183, 239 }, { 30, 155, 221 }, { 3, 106, 171 },
556 { 1, 74, 128 }, { 1, 44, 76 }, { 1, 17, 28 }
557 }, { // Band 3
558 { 73, 185, 240 }, { 27, 159, 222 }, { 2, 107, 172 },
559 { 1, 75, 127 }, { 1, 42, 73 }, { 1, 17, 29 }
560 }, { // Band 4
561 { 62, 190, 238 }, { 21, 159, 222 }, { 2, 107, 172 },
562 { 1, 72, 122 }, { 1, 40, 71 }, { 1, 18, 32 }
563 }, { // Band 5
564 { 61, 199, 240 }, { 27, 161, 226 }, { 4, 113, 180 },
565 { 1, 76, 129 }, { 1, 46, 80 }, { 1, 23, 41 }
566 }
567 }
568 }
569 };
570
571 static const vp9_coeff_probs_model default_coef_probs_16x16[PLANE_TYPES] = {
572 { // Y plane
573 { // Intra
574 { // Band 0
575 { 7, 27, 153 }, { 5, 30, 95 }, { 1, 16, 30 }
576 }, { // Band 1
577 { 50, 75, 127 }, { 57, 75, 124 }, { 27, 67, 108 },
578 { 10, 54, 86 }, { 1, 33, 52 }, { 1, 12, 18 }
579 }, { // Band 2
580 { 43, 125, 151 }, { 26, 108, 148 }, { 7, 83, 122 },
581 { 2, 59, 89 }, { 1, 38, 60 }, { 1, 17, 27 }
582 }, { // Band 3
583 { 23, 144, 163 }, { 13, 112, 154 }, { 2, 75, 117 },
584 { 1, 50, 81 }, { 1, 31, 51 }, { 1, 14, 23 }
585 }, { // Band 4
586 { 18, 162, 185 }, { 6, 123, 171 }, { 1, 78, 125 },
587 { 1, 51, 86 }, { 1, 31, 54 }, { 1, 14, 23 }
588 }, { // Band 5
589 { 15, 199, 227 }, { 3, 150, 204 }, { 1, 91, 146 },
590 { 1, 55, 95 }, { 1, 30, 53 }, { 1, 11, 20 }
591 }
592 }, { // Inter
593 { // Band 0
594 { 19, 55, 240 }, { 19, 59, 196 }, { 3, 52, 105 }
595 }, { // Band 1
596 { 41, 166, 207 }, { 104, 153, 199 }, { 31, 123, 181 },
597 { 14, 101, 152 }, { 5, 72, 106 }, { 1, 36, 52 }
598 }, { // Band 2
599 { 35, 176, 211 }, { 12, 131, 190 }, { 2, 88, 144 },
600 { 1, 60, 101 }, { 1, 36, 60 }, { 1, 16, 28 }
601 }, { // Band 3
602 { 28, 183, 213 }, { 8, 134, 191 }, { 1, 86, 142 },
603 { 1, 56, 96 }, { 1, 30, 53 }, { 1, 12, 20 }
604 }, { // Band 4
605 { 20, 190, 215 }, { 4, 135, 192 }, { 1, 84, 139 },
606 { 1, 53, 91 }, { 1, 28, 49 }, { 1, 11, 20 }
607 }, { // Band 5
608 { 13, 196, 216 }, { 2, 137, 192 }, { 1, 86, 143 },
609 { 1, 57, 99 }, { 1, 32, 56 }, { 1, 13, 24 }
610 }
611 }
612 }, { // UV plane
613 { // Intra
614 { // Band 0
615 { 211, 29, 217 }, { 96, 47, 156 }, { 22, 43, 87 }
616 }, { // Band 1
617 { 78, 120, 193 }, { 111, 116, 186 }, { 46, 102, 164 },
618 { 15, 80, 128 }, { 2, 49, 76 }, { 1, 18, 28 }
619 }, { // Band 2
620 { 71, 161, 203 }, { 42, 132, 192 }, { 10, 98, 150 },
621 { 3, 69, 109 }, { 1, 44, 70 }, { 1, 18, 29 }
622 }, { // Band 3
623 { 57, 186, 211 }, { 30, 140, 196 }, { 4, 93, 146 },
624 { 1, 62, 102 }, { 1, 38, 65 }, { 1, 16, 27 }
625 }, { // Band 4
626 { 47, 199, 217 }, { 14, 145, 196 }, { 1, 88, 142 },
627 { 1, 57, 98 }, { 1, 36, 62 }, { 1, 15, 26 }
628 }, { // Band 5
629 { 26, 219, 229 }, { 5, 155, 207 }, { 1, 94, 151 },
630 { 1, 60, 104 }, { 1, 36, 62 }, { 1, 16, 28 }
631 }
632 }, { // Inter
633 { // Band 0
634 { 233, 29, 248 }, { 146, 47, 220 }, { 43, 52, 140 }
635 }, { // Band 1
636 { 100, 163, 232 }, { 179, 161, 222 }, { 63, 142, 204 },
637 { 37, 113, 174 }, { 26, 89, 137 }, { 18, 68, 97 }
638 }, { // Band 2
639 { 85, 181, 230 }, { 32, 146, 209 }, { 7, 100, 164 },
640 { 3, 71, 121 }, { 1, 45, 77 }, { 1, 18, 30 }
641 }, { // Band 3
642 { 65, 187, 230 }, { 20, 148, 207 }, { 2, 97, 159 },
643 { 1, 68, 116 }, { 1, 40, 70 }, { 1, 14, 29 }
644 }, { // Band 4
645 { 40, 194, 227 }, { 8, 147, 204 }, { 1, 94, 155 },
646 { 1, 65, 112 }, { 1, 39, 66 }, { 1, 14, 26 }
647 }, { // Band 5
648 { 16, 208, 228 }, { 3, 151, 207 }, { 1, 98, 160 },
649 { 1, 67, 117 }, { 1, 41, 74 }, { 1, 17, 31 }
650 }
651 }
652 }
653 };
654
655 static const vp9_coeff_probs_model default_coef_probs_32x32[PLANE_TYPES] = {
656 { // Y plane
657 { // Intra
658 { // Band 0
659 { 17, 38, 140 }, { 7, 34, 80 }, { 1, 17, 29 }
660 }, { // Band 1
661 { 37, 75, 128 }, { 41, 76, 128 }, { 26, 66, 116 },
662 { 12, 52, 94 }, { 2, 32, 55 }, { 1, 10, 16 }
663 }, { // Band 2
664 { 50, 127, 154 }, { 37, 109, 152 }, { 16, 82, 121 },
665 { 5, 59, 85 }, { 1, 35, 54 }, { 1, 13, 20 }
666 }, { // Band 3
667 { 40, 142, 167 }, { 17, 110, 157 }, { 2, 71, 112 },
668 { 1, 44, 72 }, { 1, 27, 45 }, { 1, 11, 17 }
669 }, { // Band 4
670 { 30, 175, 188 }, { 9, 124, 169 }, { 1, 74, 116 },
671 { 1, 48, 78 }, { 1, 30, 49 }, { 1, 11, 18 }
672 }, { // Band 5
673 { 10, 222, 223 }, { 2, 150, 194 }, { 1, 83, 128 },
674 { 1, 48, 79 }, { 1, 27, 45 }, { 1, 11, 17 }
675 }
676 }, { // Inter
677 { // Band 0
678 { 36, 41, 235 }, { 29, 36, 193 }, { 10, 27, 111 }
679 }, { // Band 1
680 { 85, 165, 222 }, { 177, 162, 215 }, { 110, 135, 195 },
681 { 57, 113, 168 }, { 23, 83, 120 }, { 10, 49, 61 }
682 }, { // Band 2
683 { 85, 190, 223 }, { 36, 139, 200 }, { 5, 90, 146 },
684 { 1, 60, 103 }, { 1, 38, 65 }, { 1, 18, 30 }
685 }, { // Band 3
686 { 72, 202, 223 }, { 23, 141, 199 }, { 2, 86, 140 },
687 { 1, 56, 97 }, { 1, 36, 61 }, { 1, 16, 27 }
688 }, { // Band 4
689 { 55, 218, 225 }, { 13, 145, 200 }, { 1, 86, 141 },
690 { 1, 57, 99 }, { 1, 35, 61 }, { 1, 13, 22 }
691 }, { // Band 5
692 { 15, 235, 212 }, { 1, 132, 184 }, { 1, 84, 139 },
693 { 1, 57, 97 }, { 1, 34, 56 }, { 1, 14, 23 }
694 }
695 }
696 }, { // UV plane
697 { // Intra
698 { // Band 0
699 { 181, 21, 201 }, { 61, 37, 123 }, { 10, 38, 71 }
700 }, { // Band 1
701 { 47, 106, 172 }, { 95, 104, 173 }, { 42, 93, 159 },
702 { 18, 77, 131 }, { 4, 50, 81 }, { 1, 17, 23 }
703 }, { // Band 2
704 { 62, 147, 199 }, { 44, 130, 189 }, { 28, 102, 154 },
705 { 18, 75, 115 }, { 2, 44, 65 }, { 1, 12, 19 }
706 }, { // Band 3
707 { 55, 153, 210 }, { 24, 130, 194 }, { 3, 93, 146 },
708 { 1, 61, 97 }, { 1, 31, 50 }, { 1, 10, 16 }
709 }, { // Band 4
710 { 49, 186, 223 }, { 17, 148, 204 }, { 1, 96, 142 },
711 { 1, 53, 83 }, { 1, 26, 44 }, { 1, 11, 17 }
712 }, { // Band 5
713 { 13, 217, 212 }, { 2, 136, 180 }, { 1, 78, 124 },
714 { 1, 50, 83 }, { 1, 29, 49 }, { 1, 14, 23 }
715 }
716 }, { // Inter
717 { // Band 0
718 { 197, 13, 247 }, { 82, 17, 222 }, { 25, 17, 162 }
719 }, { // Band 1
720 { 126, 186, 247 }, { 234, 191, 243 }, { 176, 177, 234 },
721 { 104, 158, 220 }, { 66, 128, 186 }, { 55, 90, 137 }
722 }, { // Band 2
723 { 111, 197, 242 }, { 46, 158, 219 }, { 9, 104, 171 },
724 { 2, 65, 125 }, { 1, 44, 80 }, { 1, 17, 91 }
725 }, { // Band 3
726 { 104, 208, 245 }, { 39, 168, 224 }, { 3, 109, 162 },
727 { 1, 79, 124 }, { 1, 50, 102 }, { 1, 43, 102 }
728 }, { // Band 4
729 { 84, 220, 246 }, { 31, 177, 231 }, { 2, 115, 180 },
730 { 1, 79, 134 }, { 1, 55, 77 }, { 1, 60, 79 }
731 }, { // Band 5
732 { 43, 243, 240 }, { 8, 180, 217 }, { 1, 115, 166 },
733 { 1, 84, 121 }, { 1, 51, 67 }, { 1, 16, 6 }
734 }
735 }
736 }
737 };
738
extend_to_full_distribution(vp9_prob * probs,vp9_prob p)739 static void extend_to_full_distribution(vp9_prob *probs, vp9_prob p) {
740 vpx_memcpy(probs, vp9_pareto8_full[p = 0 ? 0 : p - 1],
741 MODEL_NODES * sizeof(vp9_prob));
742 }
743
vp9_model_to_full_probs(const vp9_prob * model,vp9_prob * full)744 void vp9_model_to_full_probs(const vp9_prob *model, vp9_prob *full) {
745 if (full != model)
746 vpx_memcpy(full, model, sizeof(vp9_prob) * UNCONSTRAINED_NODES);
747 extend_to_full_distribution(&full[UNCONSTRAINED_NODES], model[PIVOT_NODE]);
748 }
749
vp9_default_coef_probs(VP9_COMMON * cm)750 void vp9_default_coef_probs(VP9_COMMON *cm) {
751 vp9_copy(cm->fc.coef_probs[TX_4X4], default_coef_probs_4x4);
752 vp9_copy(cm->fc.coef_probs[TX_8X8], default_coef_probs_8x8);
753 vp9_copy(cm->fc.coef_probs[TX_16X16], default_coef_probs_16x16);
754 vp9_copy(cm->fc.coef_probs[TX_32X32], default_coef_probs_32x32);
755 }
756
757 #define COEF_COUNT_SAT 24
758 #define COEF_MAX_UPDATE_FACTOR 112
759 #define COEF_COUNT_SAT_KEY 24
760 #define COEF_MAX_UPDATE_FACTOR_KEY 112
761 #define COEF_COUNT_SAT_AFTER_KEY 24
762 #define COEF_MAX_UPDATE_FACTOR_AFTER_KEY 128
763
adapt_coef_probs(VP9_COMMON * cm,TX_SIZE tx_size,unsigned int count_sat,unsigned int update_factor)764 static void adapt_coef_probs(VP9_COMMON *cm, TX_SIZE tx_size,
765 unsigned int count_sat,
766 unsigned int update_factor) {
767 const FRAME_CONTEXT *pre_fc = &cm->frame_contexts[cm->frame_context_idx];
768 vp9_coeff_probs_model *const probs = cm->fc.coef_probs[tx_size];
769 const vp9_coeff_probs_model *const pre_probs = pre_fc->coef_probs[tx_size];
770 vp9_coeff_count_model *counts = cm->counts.coef[tx_size];
771 unsigned int (*eob_counts)[REF_TYPES][COEF_BANDS][COEFF_CONTEXTS] =
772 cm->counts.eob_branch[tx_size];
773 int i, j, k, l, m;
774
775 for (i = 0; i < PLANE_TYPES; ++i)
776 for (j = 0; j < REF_TYPES; ++j)
777 for (k = 0; k < COEF_BANDS; ++k)
778 for (l = 0; l < BAND_COEFF_CONTEXTS(k); ++l) {
779 const int n0 = counts[i][j][k][l][ZERO_TOKEN];
780 const int n1 = counts[i][j][k][l][ONE_TOKEN];
781 const int n2 = counts[i][j][k][l][TWO_TOKEN];
782 const int neob = counts[i][j][k][l][EOB_MODEL_TOKEN];
783 const unsigned int branch_ct[UNCONSTRAINED_NODES][2] = {
784 { neob, eob_counts[i][j][k][l] - neob },
785 { n0, n1 + n2 },
786 { n1, n2 }
787 };
788 for (m = 0; m < UNCONSTRAINED_NODES; ++m)
789 probs[i][j][k][l][m] = merge_probs(pre_probs[i][j][k][l][m],
790 branch_ct[m],
791 count_sat, update_factor);
792 }
793 }
794
vp9_adapt_coef_probs(VP9_COMMON * cm)795 void vp9_adapt_coef_probs(VP9_COMMON *cm) {
796 TX_SIZE t;
797 unsigned int count_sat, update_factor;
798
799 if (frame_is_intra_only(cm)) {
800 update_factor = COEF_MAX_UPDATE_FACTOR_KEY;
801 count_sat = COEF_COUNT_SAT_KEY;
802 } else if (cm->last_frame_type == KEY_FRAME) {
803 update_factor = COEF_MAX_UPDATE_FACTOR_AFTER_KEY; /* adapt quickly */
804 count_sat = COEF_COUNT_SAT_AFTER_KEY;
805 } else {
806 update_factor = COEF_MAX_UPDATE_FACTOR;
807 count_sat = COEF_COUNT_SAT;
808 }
809 for (t = TX_4X4; t <= TX_32X32; t++)
810 adapt_coef_probs(cm, t, count_sat, update_factor);
811 }
812