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