• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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