Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
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 */
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"
18 #define MODEL_NODES (ENTROPY_NODES - UNCONSTRAINED_NODES)
20 DECLARE_ALIGNED(16, const uint8_t, vp9_norm[256]) = {
21 0, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4,
22 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
23 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
24 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
25 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
26 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
27 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
28 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
29 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
30 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
31 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
32 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
33 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
34 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
35 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
36 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
37 };
39 DECLARE_ALIGNED(16, const uint8_t,
40 vp9_coefband_trans_8x8plus[1024]) = {
41 0, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4,
42 4, 4, 4, 4, 4, 5,
43 // beyond MAXBAND_INDEX+1 all values are filled as 5
44 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
45 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
46 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
47 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
48 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
49 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
50 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
51 5, 5, 5, 5, 5, 5, 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 };
109 DECLARE_ALIGNED(16, const uint8_t,
110 vp9_coefband_trans_4x4[16]) = {
111 0, 1, 1, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 5, 5, 5,
112 };
114 DECLARE_ALIGNED(16, const uint8_t, vp9_pt_energy_class[MAX_ENTROPY_TOKENS]) = {
115 0, 1, 2, 3, 3, 4, 4, 5, 5, 5, 5, 5
116 };
120 /* Array indices are identical to previously-existing CONTEXT_NODE indices */
122 const vp9_tree_index vp9_coef_tree[TREE_SIZE(MAX_ENTROPY_TOKENS)] = {
123 -DCT_EOB_TOKEN, 2, /* 0 = EOB */
124 -ZERO_TOKEN, 4, /* 1 = ZERO */
125 -ONE_TOKEN, 6, /* 2 = ONE */
126 8, 12, /* 3 = LOW_VAL */
127 -TWO_TOKEN, 10, /* 4 = TWO */
128 -THREE_TOKEN, -FOUR_TOKEN, /* 5 = THREE */
129 14, 16, /* 6 = HIGH_LOW */
130 -DCT_VAL_CATEGORY1, -DCT_VAL_CATEGORY2, /* 7 = CAT_ONE */
131 18, 20, /* 8 = CAT_THREEFOUR */
132 -DCT_VAL_CATEGORY3, -DCT_VAL_CATEGORY4, /* 9 = CAT_THREE */
133 -DCT_VAL_CATEGORY5, -DCT_VAL_CATEGORY6 /* 10 = CAT_FIVE */
134 };
136 struct vp9_token vp9_coef_encodings[MAX_ENTROPY_TOKENS];
138 /* Trees for extra bits. Probabilities are constant and
139 do not depend on previously encoded bits */
141 static const vp9_prob Pcat1[] = { 159};
142 static const vp9_prob Pcat2[] = { 165, 145};
143 static const vp9_prob Pcat3[] = { 173, 148, 140};
144 static const vp9_prob Pcat4[] = { 176, 155, 140, 135};
145 static const vp9_prob Pcat5[] = { 180, 157, 141, 134, 130};
146 static const vp9_prob Pcat6[] = {
147 254, 254, 254, 252, 249, 243, 230, 196, 177, 153, 140, 133, 130, 129
148 };
150 const vp9_tree_index vp9_coefmodel_tree[6] = {
151 -DCT_EOB_MODEL_TOKEN, 2, /* 0 = EOB */
152 -ZERO_TOKEN, 4, /* 1 = ZERO */
153 -ONE_TOKEN, -TWO_TOKEN,
154 };
156 // Model obtained from a 2-sided zero-centerd distribuition derived
157 // from a Pareto distribution. The cdf of the distribution is:
158 // cdf(x) = 0.5 + 0.5 * sgn(x) * [1 - {alpha/(alpha + |x|)} ^ beta]
159 //
160 // For a given beta and a given probablity of the 1-node, the alpha
161 // is first solved, and then the {alpha, beta} pair is used to generate
162 // the probabilities for the rest of the nodes.
164 // beta = 8
165 static const vp9_prob modelcoefprobs_pareto8[COEFPROB_MODELS][MODEL_NODES] = {
166 { 3, 86, 128, 6, 86, 23, 88, 29},
167 { 9, 86, 129, 17, 88, 61, 94, 76},
168 { 15, 87, 129, 28, 89, 93, 100, 110},
169 { 20, 88, 130, 38, 91, 118, 106, 136},
170 { 26, 89, 131, 48, 92, 139, 111, 156},
171 { 31, 90, 131, 58, 94, 156, 117, 171},
172 { 37, 90, 132, 66, 95, 171, 122, 184},
173 { 42, 91, 132, 75, 97, 183, 127, 194},
174 { 47, 92, 133, 83, 98, 193, 132, 202},
175 { 52, 93, 133, 90, 100, 201, 137, 208},
176 { 57, 94, 134, 98, 101, 208, 142, 214},
177 { 62, 94, 135, 105, 103, 214, 146, 218},
178 { 66, 95, 135, 111, 104, 219, 151, 222},
179 { 71, 96, 136, 117, 106, 224, 155, 225},
180 { 76, 97, 136, 123, 107, 227, 159, 228},
181 { 80, 98, 137, 129, 109, 231, 162, 231},
182 { 84, 98, 138, 134, 110, 234, 166, 233},
183 { 89, 99, 138, 140, 112, 236, 170, 235},
184 { 93, 100, 139, 145, 113, 238, 173, 236},
185 { 97, 101, 140, 149, 115, 240, 176, 238},
186 {101, 102, 140, 154, 116, 242, 179, 239},
187 {105, 103, 141, 158, 118, 243, 182, 240},
188 {109, 104, 141, 162, 119, 244, 185, 241},
189 {113, 104, 142, 166, 120, 245, 187, 242},
190 {116, 105, 143, 170, 122, 246, 190, 243},
191 {120, 106, 143, 173, 123, 247, 192, 244},
192 {123, 107, 144, 177, 125, 248, 195, 244},
193 {127, 108, 145, 180, 126, 249, 197, 245},
194 {130, 109, 145, 183, 128, 249, 199, 245},
195 {134, 110, 146, 186, 129, 250, 201, 246},
196 {137, 111, 147, 189, 131, 251, 203, 246},
197 {140, 112, 147, 192, 132, 251, 205, 247},
198 {143, 113, 148, 194, 133, 251, 207, 247},
199 {146, 114, 149, 197, 135, 252, 208, 248},
200 {149, 115, 149, 199, 136, 252, 210, 248},
201 {152, 115, 150, 201, 138, 252, 211, 248},
202 {155, 116, 151, 204, 139, 253, 213, 249},
203 {158, 117, 151, 206, 140, 253, 214, 249},
204 {161, 118, 152, 208, 142, 253, 216, 249},
205 {163, 119, 153, 210, 143, 253, 217, 249},
206 {166, 120, 153, 212, 144, 254, 218, 250},
207 {168, 121, 154, 213, 146, 254, 220, 250},
208 {171, 122, 155, 215, 147, 254, 221, 250},
209 {173, 123, 155, 217, 148, 254, 222, 250},
210 {176, 124, 156, 218, 150, 254, 223, 250},
211 {178, 125, 157, 220, 151, 254, 224, 251},
212 {180, 126, 157, 221, 152, 254, 225, 251},
213 {183, 127, 158, 222, 153, 254, 226, 251},
214 {185, 128, 159, 224, 155, 255, 227, 251},
215 {187, 129, 160, 225, 156, 255, 228, 251},
216 {189, 131, 160, 226, 157, 255, 228, 251},
217 {191, 132, 161, 227, 159, 255, 229, 251},
218 {193, 133, 162, 228, 160, 255, 230, 252},
219 {195, 134, 163, 230, 161, 255, 231, 252},
220 {197, 135, 163, 231, 162, 255, 231, 252},
221 {199, 136, 164, 232, 163, 255, 232, 252},
222 {201, 137, 165, 233, 165, 255, 233, 252},
223 {202, 138, 166, 233, 166, 255, 233, 252},
224 {204, 139, 166, 234, 167, 255, 234, 252},
225 {206, 140, 167, 235, 168, 255, 235, 252},
226 {207, 141, 168, 236, 169, 255, 235, 252},
227 {209, 142, 169, 237, 171, 255, 236, 252},
228 {210, 144, 169, 237, 172, 255, 236, 252},
229 {212, 145, 170, 238, 173, 255, 237, 252},
230 {214, 146, 171, 239, 174, 255, 237, 253},
231 {215, 147, 172, 240, 175, 255, 238, 253},
232 {216, 148, 173, 240, 176, 255, 238, 253},
233 {218, 149, 173, 241, 177, 255, 239, 253},
234 {219, 150, 174, 241, 179, 255, 239, 253},
235 {220, 152, 175, 242, 180, 255, 240, 253},
236 {222, 153, 176, 242, 181, 255, 240, 253},
237 {223, 154, 177, 243, 182, 255, 240, 253},
238 {224, 155, 178, 244, 183, 255, 241, 253},
239 {225, 156, 178, 244, 184, 255, 241, 253},
240 {226, 158, 179, 244, 185, 255, 242, 253},
241 {228, 159, 180, 245, 186, 255, 242, 253},
242 {229, 160, 181, 245, 187, 255, 242, 253},
243 {230, 161, 182, 246, 188, 255, 243, 253},
244 {231, 163, 183, 246, 189, 255, 243, 253},
245 {232, 164, 184, 247, 190, 255, 243, 253},
246 {233, 165, 185, 247, 191, 255, 244, 253},
247 {234, 166, 185, 247, 192, 255, 244, 253},
248 {235, 168, 186, 248, 193, 255, 244, 253},
249 {236, 169, 187, 248, 194, 255, 244, 253},
250 {236, 170, 188, 248, 195, 255, 245, 253},
251 {237, 171, 189, 249, 196, 255, 245, 254},
252 {238, 173, 190, 249, 197, 255, 245, 254},
253 {239, 174, 191, 249, 198, 255, 245, 254},
254 {240, 175, 192, 249, 199, 255, 246, 254},
255 {240, 177, 193, 250, 200, 255, 246, 254},
256 {241, 178, 194, 250, 201, 255, 246, 254},
257 {242, 179, 195, 250, 202, 255, 246, 254},
258 {242, 181, 196, 250, 203, 255, 247, 254},
259 {243, 182, 197, 251, 204, 255, 247, 254},
260 {244, 184, 198, 251, 205, 255, 247, 254},
261 {244, 185, 199, 251, 206, 255, 247, 254},
262 {245, 186, 200, 251, 207, 255, 247, 254},
263 {246, 188, 201, 252, 207, 255, 248, 254},
264 {246, 189, 202, 252, 208, 255, 248, 254},
265 {247, 191, 203, 252, 209, 255, 248, 254},
266 {247, 192, 204, 252, 210, 255, 248, 254},
267 {248, 194, 205, 252, 211, 255, 248, 254},
268 {248, 195, 206, 252, 212, 255, 249, 254},
269 {249, 197, 207, 253, 213, 255, 249, 254},
270 {249, 198, 208, 253, 214, 255, 249, 254},
271 {250, 200, 210, 253, 215, 255, 249, 254},
272 {250, 201, 211, 253, 215, 255, 249, 254},
273 {250, 203, 212, 253, 216, 255, 249, 254},
274 {251, 204, 213, 253, 217, 255, 250, 254},
275 {251, 206, 214, 254, 218, 255, 250, 254},
276 {252, 207, 216, 254, 219, 255, 250, 254},
277 {252, 209, 217, 254, 220, 255, 250, 254},
278 {252, 211, 218, 254, 221, 255, 250, 254},
279 {253, 213, 219, 254, 222, 255, 250, 254},
280 {253, 214, 221, 254, 223, 255, 250, 254},
281 {253, 216, 222, 254, 224, 255, 251, 254},
282 {253, 218, 224, 254, 225, 255, 251, 254},
283 {254, 220, 225, 254, 225, 255, 251, 254},
284 {254, 222, 227, 255, 226, 255, 251, 254},
285 {254, 224, 228, 255, 227, 255, 251, 254},
286 {254, 226, 230, 255, 228, 255, 251, 254},
287 {255, 228, 231, 255, 230, 255, 251, 254},
288 {255, 230, 233, 255, 231, 255, 252, 254},
289 {255, 232, 235, 255, 232, 255, 252, 254},
290 {255, 235, 237, 255, 233, 255, 252, 254},
291 {255, 238, 240, 255, 235, 255, 252, 255},
292 {255, 241, 243, 255, 236, 255, 252, 254},
293 {255, 246, 247, 255, 239, 255, 253, 255}
294 };
296 static void extend_model_to_full_distribution(vp9_prob p,
297 vp9_prob *tree_probs) {
298 const int l = (p - 1) / 2;
299 const vp9_prob (*model)[MODEL_NODES] = modelcoefprobs_pareto8;
300 if (p & 1) {
301 vpx_memcpy(tree_probs + UNCONSTRAINED_NODES,
302 model[l], MODEL_NODES * sizeof(vp9_prob));
303 } else {
304 // interpolate
305 int i;
306 for (i = UNCONSTRAINED_NODES; i < ENTROPY_NODES; ++i)
307 tree_probs[i] = (model[l][i - UNCONSTRAINED_NODES] +
308 model[l + 1][i - UNCONSTRAINED_NODES]) >> 1;
309 }
310 }
312 void vp9_model_to_full_probs(const vp9_prob *model, vp9_prob *full) {
313 if (full != model)
314 vpx_memcpy(full, model, sizeof(vp9_prob) * UNCONSTRAINED_NODES);
315 extend_model_to_full_distribution(model[PIVOT_NODE], full);
316 }
318 static vp9_tree_index cat1[2], cat2[4], cat3[6], cat4[8], cat5[10], cat6[28];
320 static void init_bit_tree(vp9_tree_index *p, int n) {
321 int i = 0;
323 while (++i < n) {
324 p[0] = p[1] = i << 1;
325 p += 2;
326 }
328 p[0] = p[1] = 0;
329 }
331 static void init_bit_trees() {
332 init_bit_tree(cat1, 1);
333 init_bit_tree(cat2, 2);
334 init_bit_tree(cat3, 3);
335 init_bit_tree(cat4, 4);
336 init_bit_tree(cat5, 5);
337 init_bit_tree(cat6, 14);
338 }
340 const vp9_extra_bit vp9_extra_bits[MAX_ENTROPY_TOKENS] = {
341 { 0, 0, 0, 0},
342 { 0, 0, 0, 1},
343 { 0, 0, 0, 2},
344 { 0, 0, 0, 3},
345 { 0, 0, 0, 4},
346 { cat1, Pcat1, 1, 5},
347 { cat2, Pcat2, 2, 7},
348 { cat3, Pcat3, 3, 11},
349 { cat4, Pcat4, 4, 19},
350 { cat5, Pcat5, 5, 35},
351 { cat6, Pcat6, 14, 67},
352 { 0, 0, 0, 0}
353 };
355 #include "vp9/common/vp9_default_coef_probs.h"
357 void vp9_default_coef_probs(VP9_COMMON *cm) {
358 vp9_copy(cm->fc.coef_probs[TX_4X4], default_coef_probs_4x4);
359 vp9_copy(cm->fc.coef_probs[TX_8X8], default_coef_probs_8x8);
360 vp9_copy(cm->fc.coef_probs[TX_16X16], default_coef_probs_16x16);
361 vp9_copy(cm->fc.coef_probs[TX_32X32], default_coef_probs_32x32);
362 }
364 void vp9_coef_tree_initialize() {
365 init_bit_trees();
366 vp9_tokens_from_tree(vp9_coef_encodings, vp9_coef_tree);
367 }
369 // #define COEF_COUNT_TESTING
371 #define COEF_COUNT_SAT 24
372 #define COEF_MAX_UPDATE_FACTOR 112
373 #define COEF_COUNT_SAT_KEY 24
374 #define COEF_MAX_UPDATE_FACTOR_KEY 112
375 #define COEF_COUNT_SAT_AFTER_KEY 24
376 #define COEF_MAX_UPDATE_FACTOR_AFTER_KEY 128
378 static void adapt_coef_probs(VP9_COMMON *cm, TX_SIZE tx_size,
379 unsigned int count_sat,
380 unsigned int update_factor) {
381 const FRAME_CONTEXT *pre_fc = &cm->frame_contexts[cm->frame_context_idx];
383 vp9_coeff_probs_model *dst_coef_probs = cm->fc.coef_probs[tx_size];
384 const vp9_coeff_probs_model *pre_coef_probs = pre_fc->coef_probs[tx_size];
385 vp9_coeff_count_model *coef_counts = cm->counts.coef[tx_size];
386 unsigned int (*eob_branch_count)[REF_TYPES][COEF_BANDS][PREV_COEF_CONTEXTS] =
387 cm->counts.eob_branch[tx_size];
388 int i, j, k, l, m;
389 unsigned int branch_ct[UNCONSTRAINED_NODES][2];
391 for (i = 0; i < BLOCK_TYPES; ++i)
392 for (j = 0; j < REF_TYPES; ++j)
393 for (k = 0; k < COEF_BANDS; ++k)
394 for (l = 0; l < PREV_COEF_CONTEXTS; ++l) {
395 if (l >= 3 && k == 0)
396 continue;
397 vp9_tree_probs_from_distribution(vp9_coefmodel_tree, branch_ct,
398 coef_counts[i][j][k][l]);
399 branch_ct[0][1] = eob_branch_count[i][j][k][l] - branch_ct[0][0];
400 for (m = 0; m < UNCONSTRAINED_NODES; ++m)
401 dst_coef_probs[i][j][k][l][m] = merge_probs(
402 pre_coef_probs[i][j][k][l][m],
403 branch_ct[m],
404 count_sat, update_factor);
405 }
406 }
408 void vp9_adapt_coef_probs(VP9_COMMON *cm) {
409 TX_SIZE t;
410 unsigned int count_sat, update_factor;
412 if (frame_is_intra_only(cm)) {
413 update_factor = COEF_MAX_UPDATE_FACTOR_KEY;
414 count_sat = COEF_COUNT_SAT_KEY;
415 } else if (cm->last_frame_type == KEY_FRAME) {
416 update_factor = COEF_MAX_UPDATE_FACTOR_AFTER_KEY; /* adapt quickly */
417 count_sat = COEF_COUNT_SAT_AFTER_KEY;
418 } else {
419 update_factor = COEF_MAX_UPDATE_FACTOR;
420 count_sat = COEF_COUNT_SAT;
421 }
422 for (t = TX_4X4; t <= TX_32X32; t++)
423 adapt_coef_probs(cm, t, count_sat, update_factor);
424 }