xref: /rockchip-linux_mpp/mpp/hal/rkdec/vp9d/hal_vp9d_com.c (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka /*
2*437bfbebSnyanmisaka  * Copyright 2020 Rockchip Electronics Co. LTD
3*437bfbebSnyanmisaka  *
4*437bfbebSnyanmisaka  * Licensed under the Apache License, Version 2.0 (the "License");
5*437bfbebSnyanmisaka  * you may not use this file except in compliance with the License.
6*437bfbebSnyanmisaka  * You may obtain a copy of the License at
7*437bfbebSnyanmisaka  *
8*437bfbebSnyanmisaka  *      http://www.apache.org/licenses/LICENSE-2.0
9*437bfbebSnyanmisaka  *
10*437bfbebSnyanmisaka  * Unless required by applicable law or agreed to in writing, software
11*437bfbebSnyanmisaka  * distributed under the License is distributed on an "AS IS" BASIS,
12*437bfbebSnyanmisaka  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*437bfbebSnyanmisaka  * See the License for the specific language governing permissions and
14*437bfbebSnyanmisaka  * limitations under the License.
15*437bfbebSnyanmisaka  */
16*437bfbebSnyanmisaka 
17*437bfbebSnyanmisaka #include <string.h>
18*437bfbebSnyanmisaka 
19*437bfbebSnyanmisaka #include "mpp_mem.h"
20*437bfbebSnyanmisaka #include "mpp_bitput.h"
21*437bfbebSnyanmisaka 
22*437bfbebSnyanmisaka #include "vp9d_syntax.h"
23*437bfbebSnyanmisaka #include "hal_vp9d_com.h"
24*437bfbebSnyanmisaka 
25*437bfbebSnyanmisaka typedef struct {
26*437bfbebSnyanmisaka     RK_U8 y_mode[4][9];
27*437bfbebSnyanmisaka     RK_U8 uv_mode[10][9];
28*437bfbebSnyanmisaka     RK_U8 filter[4][2];
29*437bfbebSnyanmisaka     RK_U8 mv_mode[7][3];
30*437bfbebSnyanmisaka     RK_U8 intra[4];
31*437bfbebSnyanmisaka     RK_U8 comp[5];
32*437bfbebSnyanmisaka     RK_U8 single_ref[5][2];
33*437bfbebSnyanmisaka     RK_U8 comp_ref[5];
34*437bfbebSnyanmisaka     RK_U8 tx32p[2][3];
35*437bfbebSnyanmisaka     RK_U8 tx16p[2][2];
36*437bfbebSnyanmisaka     RK_U8 tx8p[2];
37*437bfbebSnyanmisaka     RK_U8 skip[3];
38*437bfbebSnyanmisaka     RK_U8 mv_joint[3];
39*437bfbebSnyanmisaka     struct {
40*437bfbebSnyanmisaka         RK_U8 sign;
41*437bfbebSnyanmisaka         RK_U8 classes[10];
42*437bfbebSnyanmisaka         RK_U8 class0;
43*437bfbebSnyanmisaka         RK_U8 bits[10];
44*437bfbebSnyanmisaka         RK_U8 class0_fp[2][3];
45*437bfbebSnyanmisaka         RK_U8 fp[3];
46*437bfbebSnyanmisaka         RK_U8 class0_hp;
47*437bfbebSnyanmisaka         RK_U8 hp;
48*437bfbebSnyanmisaka     } mv_comp[2];
49*437bfbebSnyanmisaka     RK_U8 partition[4][4][3];
50*437bfbebSnyanmisaka } prob_context;
51*437bfbebSnyanmisaka 
52*437bfbebSnyanmisaka static const prob_context vp9_default_probs = {
53*437bfbebSnyanmisaka     { /* y_mode */
54*437bfbebSnyanmisaka         {  65,  32,  18, 144, 162, 194,  41,  51,  98 } /* bsize < 8x8 */,
55*437bfbebSnyanmisaka         { 132,  68,  18, 165, 217, 196,  45,  40,  78 } /* bsize < 16x16 */,
56*437bfbebSnyanmisaka         { 173,  80,  19, 176, 240, 193,  64,  35,  46 } /* bsize < 32x32 */,
57*437bfbebSnyanmisaka         { 221, 135,  38, 194, 248, 121,  96,  85,  29 } /* bsize >= 32x32 */
58*437bfbebSnyanmisaka     }, { /* uv_mode */
59*437bfbebSnyanmisaka         {  48,  12, 154, 155, 139,  90,  34, 117, 119 } /* y = v */,
60*437bfbebSnyanmisaka         {  67,   6,  25, 204, 243, 158,  13,  21,  96 } /* y = h */,
61*437bfbebSnyanmisaka         { 120,   7,  76, 176, 208, 126,  28,  54, 103 } /* y = dc */,
62*437bfbebSnyanmisaka         {  97,   5,  44, 131, 176, 139,  48,  68,  97 } /* y = d45 */,
63*437bfbebSnyanmisaka         {  83,   5,  42, 156, 111, 152,  26,  49, 152 } /* y = d135 */,
64*437bfbebSnyanmisaka         {  80,   5,  58, 178,  74,  83,  33,  62, 145 } /* y = d117 */,
65*437bfbebSnyanmisaka         {  86,   5,  32, 154, 192, 168,  14,  22, 163 } /* y = d153 */,
66*437bfbebSnyanmisaka         {  77,   7,  64, 116, 132, 122,  37, 126, 120 } /* y = d63 */,
67*437bfbebSnyanmisaka         {  85,   5,  32, 156, 216, 148,  19,  29,  73 } /* y = d207 */,
68*437bfbebSnyanmisaka         { 101,  21, 107, 181, 192, 103,  19,  67, 125 } /* y = tm */
69*437bfbebSnyanmisaka     }, { /* filter */
70*437bfbebSnyanmisaka         { 235, 162, },
71*437bfbebSnyanmisaka         {  36, 255, },
72*437bfbebSnyanmisaka         {  34,   3, },
73*437bfbebSnyanmisaka         { 149, 144, },
74*437bfbebSnyanmisaka     }, { /* mv_mode */
75*437bfbebSnyanmisaka         {  2, 173,  34},  // 0 = both zero mv
76*437bfbebSnyanmisaka         {  7, 145,  85},  // 1 = one zero mv + one a predicted mv
77*437bfbebSnyanmisaka         {  7, 166,  63},  // 2 = two predicted mvs
78*437bfbebSnyanmisaka         {  7,  94,  66},  // 3 = one predicted/zero and one new mv
79*437bfbebSnyanmisaka         {  8,  64,  46},  // 4 = two new mvs
80*437bfbebSnyanmisaka         { 17,  81,  31},  // 5 = one intra neighbour + x
81*437bfbebSnyanmisaka         { 25,  29,  30},  // 6 = two intra neighbours
82*437bfbebSnyanmisaka     }, { /* intra */
83*437bfbebSnyanmisaka         9, 102, 187, 225
84*437bfbebSnyanmisaka     }, { /* comp */
85*437bfbebSnyanmisaka         239, 183, 119,  96,  41
86*437bfbebSnyanmisaka     }, { /* single_ref */
87*437bfbebSnyanmisaka         {  33,  16 },
88*437bfbebSnyanmisaka         {  77,  74 },
89*437bfbebSnyanmisaka         { 142, 142 },
90*437bfbebSnyanmisaka         { 172, 170 },
91*437bfbebSnyanmisaka         { 238, 247 }
92*437bfbebSnyanmisaka     }, { /* comp_ref */
93*437bfbebSnyanmisaka         50, 126, 123, 221, 226
94*437bfbebSnyanmisaka     }, { /* tx32p */
95*437bfbebSnyanmisaka         { 3, 136, 37, },
96*437bfbebSnyanmisaka         { 5,  52, 13, },
97*437bfbebSnyanmisaka     }, { /* tx16p */
98*437bfbebSnyanmisaka         { 20, 152, },
99*437bfbebSnyanmisaka         { 15, 101, },
100*437bfbebSnyanmisaka     }, { /* tx8p */
101*437bfbebSnyanmisaka         100, 66
102*437bfbebSnyanmisaka     }, { /* skip */
103*437bfbebSnyanmisaka         192, 128, 64
104*437bfbebSnyanmisaka     }, { /* mv_joint */
105*437bfbebSnyanmisaka         32, 64, 96
106*437bfbebSnyanmisaka     }, {
107*437bfbebSnyanmisaka         { /* mv vertical component */
108*437bfbebSnyanmisaka             128, /* sign */
109*437bfbebSnyanmisaka             { 224, 144, 192, 168, 192, 176, 192, 198, 198, 245 }, /* class */
110*437bfbebSnyanmisaka             216, /* class0 */
111*437bfbebSnyanmisaka             { 136, 140, 148, 160, 176, 192, 224, 234, 234, 240}, /* bits */
112*437bfbebSnyanmisaka             { /* class0_fp */
113*437bfbebSnyanmisaka                 { 128, 128, 64 },
114*437bfbebSnyanmisaka                 {  96, 112, 64 }
115*437bfbebSnyanmisaka             },
116*437bfbebSnyanmisaka             { 64, 96, 64 }, /* fp */
117*437bfbebSnyanmisaka             160, /* class0_hp bit */
118*437bfbebSnyanmisaka             128, /* hp */
119*437bfbebSnyanmisaka         }, { /* mv horizontal component */
120*437bfbebSnyanmisaka             128, /* sign */
121*437bfbebSnyanmisaka             { 216, 128, 176, 160, 176, 176, 192, 198, 198, 208 }, /* class */
122*437bfbebSnyanmisaka             208, /* class0 */
123*437bfbebSnyanmisaka             { 136, 140, 148, 160, 176, 192, 224, 234, 234, 240 }, /* bits */
124*437bfbebSnyanmisaka             { /* class0_fp */
125*437bfbebSnyanmisaka                 { 128, 128, 64 },
126*437bfbebSnyanmisaka                 {  96, 112, 64 }
127*437bfbebSnyanmisaka             },
128*437bfbebSnyanmisaka             { 64, 96, 64 }, /* fp */
129*437bfbebSnyanmisaka             160, /* class0_hp bit */
130*437bfbebSnyanmisaka             128, /* hp */
131*437bfbebSnyanmisaka         }
132*437bfbebSnyanmisaka     }, { /* partition */
133*437bfbebSnyanmisaka         { /* 64x64 -> 32x32 */
134*437bfbebSnyanmisaka             { 222,  34,  30 } /* a/l both not split */,
135*437bfbebSnyanmisaka             {  72,  16,  44 } /* a split, l not split */,
136*437bfbebSnyanmisaka             {  58,  32,  12 } /* l split, a not split */,
137*437bfbebSnyanmisaka             {  10,   7,   6 } /* a/l both split */,
138*437bfbebSnyanmisaka         }, { /* 32x32 -> 16x16 */
139*437bfbebSnyanmisaka             { 177,  58,  59 } /* a/l both not split */,
140*437bfbebSnyanmisaka             {  68,  26,  63 } /* a split, l not split */,
141*437bfbebSnyanmisaka             {  52,  79,  25 } /* l split, a not split */,
142*437bfbebSnyanmisaka             {  17,  14,  12 } /* a/l both split */,
143*437bfbebSnyanmisaka         }, { /* 16x16 -> 8x8 */
144*437bfbebSnyanmisaka             { 174,  73,  87 } /* a/l both not split */,
145*437bfbebSnyanmisaka             {  92,  41,  83 } /* a split, l not split */,
146*437bfbebSnyanmisaka             {  82,  99,  50 } /* l split, a not split */,
147*437bfbebSnyanmisaka             {  53,  39,  39 } /* a/l both split */,
148*437bfbebSnyanmisaka         }, { /* 8x8 -> 4x4 */
149*437bfbebSnyanmisaka             { 199, 122, 141 } /* a/l both not split */,
150*437bfbebSnyanmisaka             { 147,  63, 159 } /* a split, l not split */,
151*437bfbebSnyanmisaka             { 148, 133, 118 } /* l split, a not split */,
152*437bfbebSnyanmisaka             { 121, 104, 114 } /* a/l both split */,
153*437bfbebSnyanmisaka         }
154*437bfbebSnyanmisaka     },
155*437bfbebSnyanmisaka };
156*437bfbebSnyanmisaka 
157*437bfbebSnyanmisaka static const RK_U8 vp9_default_coef_probs[4][2][2][6][6][3] = {
158*437bfbebSnyanmisaka     { /* tx = 4x4 */
159*437bfbebSnyanmisaka         { /* block Type 0 */
160*437bfbebSnyanmisaka             { /* Intra */
161*437bfbebSnyanmisaka                 { /* Coeff Band 0 */
162*437bfbebSnyanmisaka                     { 195,  29, 183 },
163*437bfbebSnyanmisaka                     {  84,  49, 136 },
164*437bfbebSnyanmisaka                     {   8,  42,  71 }
165*437bfbebSnyanmisaka                 }, { /* Coeff Band 1 */
166*437bfbebSnyanmisaka                     {  31, 107, 169 },
167*437bfbebSnyanmisaka                     {  35,  99, 159 },
168*437bfbebSnyanmisaka                     {  17,  82, 140 },
169*437bfbebSnyanmisaka                     {   8,  66, 114 },
170*437bfbebSnyanmisaka                     {   2,  44,  76 },
171*437bfbebSnyanmisaka                     {   1,  19,  32 }
172*437bfbebSnyanmisaka                 }, { /* Coeff Band 2 */
173*437bfbebSnyanmisaka                     {  40, 132, 201 },
174*437bfbebSnyanmisaka                     {  29, 114, 187 },
175*437bfbebSnyanmisaka                     {  13,  91, 157 },
176*437bfbebSnyanmisaka                     {   7,  75, 127 },
177*437bfbebSnyanmisaka                     {   3,  58,  95 },
178*437bfbebSnyanmisaka                     {   1,  28,  47 }
179*437bfbebSnyanmisaka                 }, { /* Coeff Band 3 */
180*437bfbebSnyanmisaka                     {  69, 142, 221 },
181*437bfbebSnyanmisaka                     {  42, 122, 201 },
182*437bfbebSnyanmisaka                     {  15,  91, 159 },
183*437bfbebSnyanmisaka                     {   6,  67, 121 },
184*437bfbebSnyanmisaka                     {   1,  42,  77 },
185*437bfbebSnyanmisaka                     {   1,  17,  31 }
186*437bfbebSnyanmisaka                 }, { /* Coeff Band 4 */
187*437bfbebSnyanmisaka                     { 102, 148, 228 },
188*437bfbebSnyanmisaka                     {  67, 117, 204 },
189*437bfbebSnyanmisaka                     {  17,  82, 154 },
190*437bfbebSnyanmisaka                     {   6,  59, 114 },
191*437bfbebSnyanmisaka                     {   2,  39,  75 },
192*437bfbebSnyanmisaka                     {   1,  15,  29 }
193*437bfbebSnyanmisaka                 }, { /* Coeff Band 5 */
194*437bfbebSnyanmisaka                     { 156,  57, 233 },
195*437bfbebSnyanmisaka                     { 119,  57, 212 },
196*437bfbebSnyanmisaka                     {  58,  48, 163 },
197*437bfbebSnyanmisaka                     {  29,  40, 124 },
198*437bfbebSnyanmisaka                     {  12,  30,  81 },
199*437bfbebSnyanmisaka                     {   3,  12,  31 }
200*437bfbebSnyanmisaka                 }
201*437bfbebSnyanmisaka             }, { /* Inter */
202*437bfbebSnyanmisaka                 { /* Coeff Band 0 */
203*437bfbebSnyanmisaka                     { 191, 107, 226 },
204*437bfbebSnyanmisaka                     { 124, 117, 204 },
205*437bfbebSnyanmisaka                     {  25,  99, 155 }
206*437bfbebSnyanmisaka                 }, { /* Coeff Band 1 */
207*437bfbebSnyanmisaka                     {  29, 148, 210 },
208*437bfbebSnyanmisaka                     {  37, 126, 194 },
209*437bfbebSnyanmisaka                     {   8,  93, 157 },
210*437bfbebSnyanmisaka                     {   2,  68, 118 },
211*437bfbebSnyanmisaka                     {   1,  39,  69 },
212*437bfbebSnyanmisaka                     {   1,  17,  33 }
213*437bfbebSnyanmisaka                 }, { /* Coeff Band 2 */
214*437bfbebSnyanmisaka                     {  41, 151, 213 },
215*437bfbebSnyanmisaka                     {  27, 123, 193 },
216*437bfbebSnyanmisaka                     {   3,  82, 144 },
217*437bfbebSnyanmisaka                     {   1,  58, 105 },
218*437bfbebSnyanmisaka                     {   1,  32,  60 },
219*437bfbebSnyanmisaka                     {   1,  13,  26 }
220*437bfbebSnyanmisaka                 }, { /* Coeff Band 3 */
221*437bfbebSnyanmisaka                     {  59, 159, 220 },
222*437bfbebSnyanmisaka                     {  23, 126, 198 },
223*437bfbebSnyanmisaka                     {   4,  88, 151 },
224*437bfbebSnyanmisaka                     {   1,  66, 114 },
225*437bfbebSnyanmisaka                     {   1,  38,  71 },
226*437bfbebSnyanmisaka                     {   1,  18,  34 }
227*437bfbebSnyanmisaka                 }, { /* Coeff Band 4 */
228*437bfbebSnyanmisaka                     { 114, 136, 232 },
229*437bfbebSnyanmisaka                     {  51, 114, 207 },
230*437bfbebSnyanmisaka                     {  11,  83, 155 },
231*437bfbebSnyanmisaka                     {   3,  56, 105 },
232*437bfbebSnyanmisaka                     {   1,  33,  65 },
233*437bfbebSnyanmisaka                     {   1,  17,  34 }
234*437bfbebSnyanmisaka                 }, { /* Coeff Band 5 */
235*437bfbebSnyanmisaka                     { 149,  65, 234 },
236*437bfbebSnyanmisaka                     { 121,  57, 215 },
237*437bfbebSnyanmisaka                     {  61,  49, 166 },
238*437bfbebSnyanmisaka                     {  28,  36, 114 },
239*437bfbebSnyanmisaka                     {  12,  25,  76 },
240*437bfbebSnyanmisaka                     {   3,  16,  42 }
241*437bfbebSnyanmisaka                 }
242*437bfbebSnyanmisaka             }
243*437bfbebSnyanmisaka         }, { /* block Type 1 */
244*437bfbebSnyanmisaka             { /* Intra */
245*437bfbebSnyanmisaka                 { /* Coeff Band 0 */
246*437bfbebSnyanmisaka                     { 214,  49, 220 },
247*437bfbebSnyanmisaka                     { 132,  63, 188 },
248*437bfbebSnyanmisaka                     {  42,  65, 137 }
249*437bfbebSnyanmisaka                 }, { /* Coeff Band 1 */
250*437bfbebSnyanmisaka                     {  85, 137, 221 },
251*437bfbebSnyanmisaka                     { 104, 131, 216 },
252*437bfbebSnyanmisaka                     {  49, 111, 192 },
253*437bfbebSnyanmisaka                     {  21,  87, 155 },
254*437bfbebSnyanmisaka                     {   2,  49,  87 },
255*437bfbebSnyanmisaka                     {   1,  16,  28 }
256*437bfbebSnyanmisaka                 }, { /* Coeff Band 2 */
257*437bfbebSnyanmisaka                     {  89, 163, 230 },
258*437bfbebSnyanmisaka                     {  90, 137, 220 },
259*437bfbebSnyanmisaka                     {  29, 100, 183 },
260*437bfbebSnyanmisaka                     {  10,  70, 135 },
261*437bfbebSnyanmisaka                     {   2,  42,  81 },
262*437bfbebSnyanmisaka                     {   1,  17,  33 }
263*437bfbebSnyanmisaka                 }, { /* Coeff Band 3 */
264*437bfbebSnyanmisaka                     { 108, 167, 237 },
265*437bfbebSnyanmisaka                     {  55, 133, 222 },
266*437bfbebSnyanmisaka                     {  15,  97, 179 },
267*437bfbebSnyanmisaka                     {   4,  72, 135 },
268*437bfbebSnyanmisaka                     {   1,  45,  85 },
269*437bfbebSnyanmisaka                     {   1,  19,  38 }
270*437bfbebSnyanmisaka                 }, { /* Coeff Band 4 */
271*437bfbebSnyanmisaka                     { 124, 146, 240 },
272*437bfbebSnyanmisaka                     {  66, 124, 224 },
273*437bfbebSnyanmisaka                     {  17,  88, 175 },
274*437bfbebSnyanmisaka                     {   4,  58, 122 },
275*437bfbebSnyanmisaka                     {   1,  36,  75 },
276*437bfbebSnyanmisaka                     {   1,  18,  37 }
277*437bfbebSnyanmisaka                 }, { /* Coeff Band 5 */
278*437bfbebSnyanmisaka                     { 141,  79, 241 },
279*437bfbebSnyanmisaka                     { 126,  70, 227 },
280*437bfbebSnyanmisaka                     {  66,  58, 182 },
281*437bfbebSnyanmisaka                     {  30,  44, 136 },
282*437bfbebSnyanmisaka                     {  12,  34,  96 },
283*437bfbebSnyanmisaka                     {   2,  20,  47 }
284*437bfbebSnyanmisaka                 }
285*437bfbebSnyanmisaka             }, { /* Inter */
286*437bfbebSnyanmisaka                 { /* Coeff Band 0 */
287*437bfbebSnyanmisaka                     { 229,  99, 249 },
288*437bfbebSnyanmisaka                     { 143, 111, 235 },
289*437bfbebSnyanmisaka                     {  46, 109, 192 }
290*437bfbebSnyanmisaka                 }, { /* Coeff Band 1 */
291*437bfbebSnyanmisaka                     {  82, 158, 236 },
292*437bfbebSnyanmisaka                     {  94, 146, 224 },
293*437bfbebSnyanmisaka                     {  25, 117, 191 },
294*437bfbebSnyanmisaka                     {   9,  87, 149 },
295*437bfbebSnyanmisaka                     {   3,  56,  99 },
296*437bfbebSnyanmisaka                     {   1,  33,  57 }
297*437bfbebSnyanmisaka                 }, { /* Coeff Band 2 */
298*437bfbebSnyanmisaka                     {  83, 167, 237 },
299*437bfbebSnyanmisaka                     {  68, 145, 222 },
300*437bfbebSnyanmisaka                     {  10, 103, 177 },
301*437bfbebSnyanmisaka                     {   2,  72, 131 },
302*437bfbebSnyanmisaka                     {   1,  41,  79 },
303*437bfbebSnyanmisaka                     {   1,  20,  39 }
304*437bfbebSnyanmisaka                 }, { /* Coeff Band 3 */
305*437bfbebSnyanmisaka                     {  99, 167, 239 },
306*437bfbebSnyanmisaka                     {  47, 141, 224 },
307*437bfbebSnyanmisaka                     {  10, 104, 178 },
308*437bfbebSnyanmisaka                     {   2,  73, 133 },
309*437bfbebSnyanmisaka                     {   1,  44,  85 },
310*437bfbebSnyanmisaka                     {   1,  22,  47 }
311*437bfbebSnyanmisaka                 }, { /* Coeff Band 4 */
312*437bfbebSnyanmisaka                     { 127, 145, 243 },
313*437bfbebSnyanmisaka                     {  71, 129, 228 },
314*437bfbebSnyanmisaka                     {  17,  93, 177 },
315*437bfbebSnyanmisaka                     {   3,  61, 124 },
316*437bfbebSnyanmisaka                     {   1,  41,  84 },
317*437bfbebSnyanmisaka                     {   1,  21,  52 }
318*437bfbebSnyanmisaka                 }, { /* Coeff Band 5 */
319*437bfbebSnyanmisaka                     { 157,  78, 244 },
320*437bfbebSnyanmisaka                     { 140,  72, 231 },
321*437bfbebSnyanmisaka                     {  69,  58, 184 },
322*437bfbebSnyanmisaka                     {  31,  44, 137 },
323*437bfbebSnyanmisaka                     {  14,  38, 105 },
324*437bfbebSnyanmisaka                     {   8,  23,  61 }
325*437bfbebSnyanmisaka                 }
326*437bfbebSnyanmisaka             }
327*437bfbebSnyanmisaka         }
328*437bfbebSnyanmisaka     }, { /* tx = 8x8 */
329*437bfbebSnyanmisaka         { /* block Type 0 */
330*437bfbebSnyanmisaka             { /* Intra */
331*437bfbebSnyanmisaka                 { /* Coeff Band 0 */
332*437bfbebSnyanmisaka                     { 125,  34, 187 },
333*437bfbebSnyanmisaka                     {  52,  41, 133 },
334*437bfbebSnyanmisaka                     {   6,  31,  56 }
335*437bfbebSnyanmisaka                 }, { /* Coeff Band 1 */
336*437bfbebSnyanmisaka                     {  37, 109, 153 },
337*437bfbebSnyanmisaka                     {  51, 102, 147 },
338*437bfbebSnyanmisaka                     {  23,  87, 128 },
339*437bfbebSnyanmisaka                     {   8,  67, 101 },
340*437bfbebSnyanmisaka                     {   1,  41,  63 },
341*437bfbebSnyanmisaka                     {   1,  19,  29 }
342*437bfbebSnyanmisaka                 }, { /* Coeff Band 2 */
343*437bfbebSnyanmisaka                     {  31, 154, 185 },
344*437bfbebSnyanmisaka                     {  17, 127, 175 },
345*437bfbebSnyanmisaka                     {   6,  96, 145 },
346*437bfbebSnyanmisaka                     {   2,  73, 114 },
347*437bfbebSnyanmisaka                     {   1,  51,  82 },
348*437bfbebSnyanmisaka                     {   1,  28,  45 }
349*437bfbebSnyanmisaka                 }, { /* Coeff Band 3 */
350*437bfbebSnyanmisaka                     {  23, 163, 200 },
351*437bfbebSnyanmisaka                     {  10, 131, 185 },
352*437bfbebSnyanmisaka                     {   2,  93, 148 },
353*437bfbebSnyanmisaka                     {   1,  67, 111 },
354*437bfbebSnyanmisaka                     {   1,  41,  69 },
355*437bfbebSnyanmisaka                     {   1,  14,  24 }
356*437bfbebSnyanmisaka                 }, { /* Coeff Band 4 */
357*437bfbebSnyanmisaka                     {  29, 176, 217 },
358*437bfbebSnyanmisaka                     {  12, 145, 201 },
359*437bfbebSnyanmisaka                     {   3, 101, 156 },
360*437bfbebSnyanmisaka                     {   1,  69, 111 },
361*437bfbebSnyanmisaka                     {   1,  39,  63 },
362*437bfbebSnyanmisaka                     {   1,  14,  23 }
363*437bfbebSnyanmisaka                 }, { /* Coeff Band 5 */
364*437bfbebSnyanmisaka                     {  57, 192, 233 },
365*437bfbebSnyanmisaka                     {  25, 154, 215 },
366*437bfbebSnyanmisaka                     {   6, 109, 167 },
367*437bfbebSnyanmisaka                     {   3,  78, 118 },
368*437bfbebSnyanmisaka                     {   1,  48,  69 },
369*437bfbebSnyanmisaka                     {   1,  21,  29 }
370*437bfbebSnyanmisaka                 }
371*437bfbebSnyanmisaka             }, { /* Inter */
372*437bfbebSnyanmisaka                 { /* Coeff Band 0 */
373*437bfbebSnyanmisaka                     { 202, 105, 245 },
374*437bfbebSnyanmisaka                     { 108, 106, 216 },
375*437bfbebSnyanmisaka                     {  18,  90, 144 }
376*437bfbebSnyanmisaka                 }, { /* Coeff Band 1 */
377*437bfbebSnyanmisaka                     {  33, 172, 219 },
378*437bfbebSnyanmisaka                     {  64, 149, 206 },
379*437bfbebSnyanmisaka                     {  14, 117, 177 },
380*437bfbebSnyanmisaka                     {   5,  90, 141 },
381*437bfbebSnyanmisaka                     {   2,  61,  95 },
382*437bfbebSnyanmisaka                     {   1,  37,  57 }
383*437bfbebSnyanmisaka                 }, { /* Coeff Band 2 */
384*437bfbebSnyanmisaka                     {  33, 179, 220 },
385*437bfbebSnyanmisaka                     {  11, 140, 198 },
386*437bfbebSnyanmisaka                     {   1,  89, 148 },
387*437bfbebSnyanmisaka                     {   1,  60, 104 },
388*437bfbebSnyanmisaka                     {   1,  33,  57 },
389*437bfbebSnyanmisaka                     {   1,  12,  21 }
390*437bfbebSnyanmisaka                 }, { /* Coeff Band 3 */
391*437bfbebSnyanmisaka                     {  30, 181, 221 },
392*437bfbebSnyanmisaka                     {   8, 141, 198 },
393*437bfbebSnyanmisaka                     {   1,  87, 145 },
394*437bfbebSnyanmisaka                     {   1,  58, 100 },
395*437bfbebSnyanmisaka                     {   1,  31,  55 },
396*437bfbebSnyanmisaka                     {   1,  12,  20 }
397*437bfbebSnyanmisaka                 }, { /* Coeff Band 4 */
398*437bfbebSnyanmisaka                     {  32, 186, 224 },
399*437bfbebSnyanmisaka                     {   7, 142, 198 },
400*437bfbebSnyanmisaka                     {   1,  86, 143 },
401*437bfbebSnyanmisaka                     {   1,  58, 100 },
402*437bfbebSnyanmisaka                     {   1,  31,  55 },
403*437bfbebSnyanmisaka                     {   1,  12,  22 }
404*437bfbebSnyanmisaka                 }, { /* Coeff Band 5 */
405*437bfbebSnyanmisaka                     {  57, 192, 227 },
406*437bfbebSnyanmisaka                     {  20, 143, 204 },
407*437bfbebSnyanmisaka                     {   3,  96, 154 },
408*437bfbebSnyanmisaka                     {   1,  68, 112 },
409*437bfbebSnyanmisaka                     {   1,  42,  69 },
410*437bfbebSnyanmisaka                     {   1,  19,  32 }
411*437bfbebSnyanmisaka                 }
412*437bfbebSnyanmisaka             }
413*437bfbebSnyanmisaka         }, { /* block Type 1 */
414*437bfbebSnyanmisaka             { /* Intra */
415*437bfbebSnyanmisaka                 { /* Coeff Band 0 */
416*437bfbebSnyanmisaka                     { 212,  35, 215 },
417*437bfbebSnyanmisaka                     { 113,  47, 169 },
418*437bfbebSnyanmisaka                     {  29,  48, 105 }
419*437bfbebSnyanmisaka                 }, { /* Coeff Band 1 */
420*437bfbebSnyanmisaka                     {  74, 129, 203 },
421*437bfbebSnyanmisaka                     { 106, 120, 203 },
422*437bfbebSnyanmisaka                     {  49, 107, 178 },
423*437bfbebSnyanmisaka                     {  19,  84, 144 },
424*437bfbebSnyanmisaka                     {   4,  50,  84 },
425*437bfbebSnyanmisaka                     {   1,  15,  25 }
426*437bfbebSnyanmisaka                 }, { /* Coeff Band 2 */
427*437bfbebSnyanmisaka                     {  71, 172, 217 },
428*437bfbebSnyanmisaka                     {  44, 141, 209 },
429*437bfbebSnyanmisaka                     {  15, 102, 173 },
430*437bfbebSnyanmisaka                     {   6,  76, 133 },
431*437bfbebSnyanmisaka                     {   2,  51,  89 },
432*437bfbebSnyanmisaka                     {   1,  24,  42 }
433*437bfbebSnyanmisaka                 }, { /* Coeff Band 3 */
434*437bfbebSnyanmisaka                     {  64, 185, 231 },
435*437bfbebSnyanmisaka                     {  31, 148, 216 },
436*437bfbebSnyanmisaka                     {   8, 103, 175 },
437*437bfbebSnyanmisaka                     {   3,  74, 131 },
438*437bfbebSnyanmisaka                     {   1,  46,  81 },
439*437bfbebSnyanmisaka                     {   1,  18,  30 }
440*437bfbebSnyanmisaka                 }, { /* Coeff Band 4 */
441*437bfbebSnyanmisaka                     {  65, 196, 235 },
442*437bfbebSnyanmisaka                     {  25, 157, 221 },
443*437bfbebSnyanmisaka                     {   5, 105, 174 },
444*437bfbebSnyanmisaka                     {   1,  67, 120 },
445*437bfbebSnyanmisaka                     {   1,  38,  69 },
446*437bfbebSnyanmisaka                     {   1,  15,  30 }
447*437bfbebSnyanmisaka                 }, { /* Coeff Band 5 */
448*437bfbebSnyanmisaka                     {  65, 204, 238 },
449*437bfbebSnyanmisaka                     {  30, 156, 224 },
450*437bfbebSnyanmisaka                     {   7, 107, 177 },
451*437bfbebSnyanmisaka                     {   2,  70, 124 },
452*437bfbebSnyanmisaka                     {   1,  42,  73 },
453*437bfbebSnyanmisaka                     {   1,  18,  34 }
454*437bfbebSnyanmisaka                 }
455*437bfbebSnyanmisaka             }, { /* Inter */
456*437bfbebSnyanmisaka                 { /* Coeff Band 0 */
457*437bfbebSnyanmisaka                     { 225,  86, 251 },
458*437bfbebSnyanmisaka                     { 144, 104, 235 },
459*437bfbebSnyanmisaka                     {  42,  99, 181 }
460*437bfbebSnyanmisaka                 }, { /* Coeff Band 1 */
461*437bfbebSnyanmisaka                     {  85, 175, 239 },
462*437bfbebSnyanmisaka                     { 112, 165, 229 },
463*437bfbebSnyanmisaka                     {  29, 136, 200 },
464*437bfbebSnyanmisaka                     {  12, 103, 162 },
465*437bfbebSnyanmisaka                     {   6,  77, 123 },
466*437bfbebSnyanmisaka                     {   2,  53,  84 }
467*437bfbebSnyanmisaka                 }, { /* Coeff Band 2 */
468*437bfbebSnyanmisaka                     {  75, 183, 239 },
469*437bfbebSnyanmisaka                     {  30, 155, 221 },
470*437bfbebSnyanmisaka                     {   3, 106, 171 },
471*437bfbebSnyanmisaka                     {   1,  74, 128 },
472*437bfbebSnyanmisaka                     {   1,  44,  76 },
473*437bfbebSnyanmisaka                     {   1,  17,  28 }
474*437bfbebSnyanmisaka                 }, { /* Coeff Band 3 */
475*437bfbebSnyanmisaka                     {  73, 185, 240 },
476*437bfbebSnyanmisaka                     {  27, 159, 222 },
477*437bfbebSnyanmisaka                     {   2, 107, 172 },
478*437bfbebSnyanmisaka                     {   1,  75, 127 },
479*437bfbebSnyanmisaka                     {   1,  42,  73 },
480*437bfbebSnyanmisaka                     {   1,  17,  29 }
481*437bfbebSnyanmisaka                 }, { /* Coeff Band 4 */
482*437bfbebSnyanmisaka                     {  62, 190, 238 },
483*437bfbebSnyanmisaka                     {  21, 159, 222 },
484*437bfbebSnyanmisaka                     {   2, 107, 172 },
485*437bfbebSnyanmisaka                     {   1,  72, 122 },
486*437bfbebSnyanmisaka                     {   1,  40,  71 },
487*437bfbebSnyanmisaka                     {   1,  18,  32 }
488*437bfbebSnyanmisaka                 }, { /* Coeff Band 5 */
489*437bfbebSnyanmisaka                     {  61, 199, 240 },
490*437bfbebSnyanmisaka                     {  27, 161, 226 },
491*437bfbebSnyanmisaka                     {   4, 113, 180 },
492*437bfbebSnyanmisaka                     {   1,  76, 129 },
493*437bfbebSnyanmisaka                     {   1,  46,  80 },
494*437bfbebSnyanmisaka                     {   1,  23,  41 }
495*437bfbebSnyanmisaka                 }
496*437bfbebSnyanmisaka             }
497*437bfbebSnyanmisaka         }
498*437bfbebSnyanmisaka     }, { /* tx = 16x16 */
499*437bfbebSnyanmisaka         { /* block Type 0 */
500*437bfbebSnyanmisaka             { /* Intra */
501*437bfbebSnyanmisaka                 { /* Coeff Band 0 */
502*437bfbebSnyanmisaka                     {   7,  27, 153 },
503*437bfbebSnyanmisaka                     {   5,  30,  95 },
504*437bfbebSnyanmisaka                     {   1,  16,  30 }
505*437bfbebSnyanmisaka                 }, { /* Coeff Band 1 */
506*437bfbebSnyanmisaka                     {  50,  75, 127 },
507*437bfbebSnyanmisaka                     {  57,  75, 124 },
508*437bfbebSnyanmisaka                     {  27,  67, 108 },
509*437bfbebSnyanmisaka                     {  10,  54,  86 },
510*437bfbebSnyanmisaka                     {   1,  33,  52 },
511*437bfbebSnyanmisaka                     {   1,  12,  18 }
512*437bfbebSnyanmisaka                 }, { /* Coeff Band 2 */
513*437bfbebSnyanmisaka                     {  43, 125, 151 },
514*437bfbebSnyanmisaka                     {  26, 108, 148 },
515*437bfbebSnyanmisaka                     {   7,  83, 122 },
516*437bfbebSnyanmisaka                     {   2,  59,  89 },
517*437bfbebSnyanmisaka                     {   1,  38,  60 },
518*437bfbebSnyanmisaka                     {   1,  17,  27 }
519*437bfbebSnyanmisaka                 }, { /* Coeff Band 3 */
520*437bfbebSnyanmisaka                     {  23, 144, 163 },
521*437bfbebSnyanmisaka                     {  13, 112, 154 },
522*437bfbebSnyanmisaka                     {   2,  75, 117 },
523*437bfbebSnyanmisaka                     {   1,  50,  81 },
524*437bfbebSnyanmisaka                     {   1,  31,  51 },
525*437bfbebSnyanmisaka                     {   1,  14,  23 }
526*437bfbebSnyanmisaka                 }, { /* Coeff Band 4 */
527*437bfbebSnyanmisaka                     {  18, 162, 185 },
528*437bfbebSnyanmisaka                     {   6, 123, 171 },
529*437bfbebSnyanmisaka                     {   1,  78, 125 },
530*437bfbebSnyanmisaka                     {   1,  51,  86 },
531*437bfbebSnyanmisaka                     {   1,  31,  54 },
532*437bfbebSnyanmisaka                     {   1,  14,  23 }
533*437bfbebSnyanmisaka                 }, { /* Coeff Band 5 */
534*437bfbebSnyanmisaka                     {  15, 199, 227 },
535*437bfbebSnyanmisaka                     {   3, 150, 204 },
536*437bfbebSnyanmisaka                     {   1,  91, 146 },
537*437bfbebSnyanmisaka                     {   1,  55,  95 },
538*437bfbebSnyanmisaka                     {   1,  30,  53 },
539*437bfbebSnyanmisaka                     {   1,  11,  20 }
540*437bfbebSnyanmisaka                 }
541*437bfbebSnyanmisaka             }, { /* Inter */
542*437bfbebSnyanmisaka                 { /* Coeff Band 0 */
543*437bfbebSnyanmisaka                     {  19,  55, 240 },
544*437bfbebSnyanmisaka                     {  19,  59, 196 },
545*437bfbebSnyanmisaka                     {   3,  52, 105 }
546*437bfbebSnyanmisaka                 }, { /* Coeff Band 1 */
547*437bfbebSnyanmisaka                     {  41, 166, 207 },
548*437bfbebSnyanmisaka                     { 104, 153, 199 },
549*437bfbebSnyanmisaka                     {  31, 123, 181 },
550*437bfbebSnyanmisaka                     {  14, 101, 152 },
551*437bfbebSnyanmisaka                     {   5,  72, 106 },
552*437bfbebSnyanmisaka                     {   1,  36,  52 }
553*437bfbebSnyanmisaka                 }, { /* Coeff Band 2 */
554*437bfbebSnyanmisaka                     {  35, 176, 211 },
555*437bfbebSnyanmisaka                     {  12, 131, 190 },
556*437bfbebSnyanmisaka                     {   2,  88, 144 },
557*437bfbebSnyanmisaka                     {   1,  60, 101 },
558*437bfbebSnyanmisaka                     {   1,  36,  60 },
559*437bfbebSnyanmisaka                     {   1,  16,  28 }
560*437bfbebSnyanmisaka                 }, { /* Coeff Band 3 */
561*437bfbebSnyanmisaka                     {  28, 183, 213 },
562*437bfbebSnyanmisaka                     {   8, 134, 191 },
563*437bfbebSnyanmisaka                     {   1,  86, 142 },
564*437bfbebSnyanmisaka                     {   1,  56,  96 },
565*437bfbebSnyanmisaka                     {   1,  30,  53 },
566*437bfbebSnyanmisaka                     {   1,  12,  20 }
567*437bfbebSnyanmisaka                 }, { /* Coeff Band 4 */
568*437bfbebSnyanmisaka                     {  20, 190, 215 },
569*437bfbebSnyanmisaka                     {   4, 135, 192 },
570*437bfbebSnyanmisaka                     {   1,  84, 139 },
571*437bfbebSnyanmisaka                     {   1,  53,  91 },
572*437bfbebSnyanmisaka                     {   1,  28,  49 },
573*437bfbebSnyanmisaka                     {   1,  11,  20 }
574*437bfbebSnyanmisaka                 }, { /* Coeff Band 5 */
575*437bfbebSnyanmisaka                     {  13, 196, 216 },
576*437bfbebSnyanmisaka                     {   2, 137, 192 },
577*437bfbebSnyanmisaka                     {   1,  86, 143 },
578*437bfbebSnyanmisaka                     {   1,  57,  99 },
579*437bfbebSnyanmisaka                     {   1,  32,  56 },
580*437bfbebSnyanmisaka                     {   1,  13,  24 }
581*437bfbebSnyanmisaka                 }
582*437bfbebSnyanmisaka             }
583*437bfbebSnyanmisaka         }, { /* block Type 1 */
584*437bfbebSnyanmisaka             { /* Intra */
585*437bfbebSnyanmisaka                 { /* Coeff Band 0 */
586*437bfbebSnyanmisaka                     { 211,  29, 217 },
587*437bfbebSnyanmisaka                     {  96,  47, 156 },
588*437bfbebSnyanmisaka                     {  22,  43,  87 }
589*437bfbebSnyanmisaka                 }, { /* Coeff Band 1 */
590*437bfbebSnyanmisaka                     {  78, 120, 193 },
591*437bfbebSnyanmisaka                     { 111, 116, 186 },
592*437bfbebSnyanmisaka                     {  46, 102, 164 },
593*437bfbebSnyanmisaka                     {  15,  80, 128 },
594*437bfbebSnyanmisaka                     {   2,  49,  76 },
595*437bfbebSnyanmisaka                     {   1,  18,  28 }
596*437bfbebSnyanmisaka                 }, { /* Coeff Band 2 */
597*437bfbebSnyanmisaka                     {  71, 161, 203 },
598*437bfbebSnyanmisaka                     {  42, 132, 192 },
599*437bfbebSnyanmisaka                     {  10,  98, 150 },
600*437bfbebSnyanmisaka                     {   3,  69, 109 },
601*437bfbebSnyanmisaka                     {   1,  44,  70 },
602*437bfbebSnyanmisaka                     {   1,  18,  29 }
603*437bfbebSnyanmisaka                 }, { /* Coeff Band 3 */
604*437bfbebSnyanmisaka                     {  57, 186, 211 },
605*437bfbebSnyanmisaka                     {  30, 140, 196 },
606*437bfbebSnyanmisaka                     {   4,  93, 146 },
607*437bfbebSnyanmisaka                     {   1,  62, 102 },
608*437bfbebSnyanmisaka                     {   1,  38,  65 },
609*437bfbebSnyanmisaka                     {   1,  16,  27 }
610*437bfbebSnyanmisaka                 }, { /* Coeff Band 4 */
611*437bfbebSnyanmisaka                     {  47, 199, 217 },
612*437bfbebSnyanmisaka                     {  14, 145, 196 },
613*437bfbebSnyanmisaka                     {   1,  88, 142 },
614*437bfbebSnyanmisaka                     {   1,  57,  98 },
615*437bfbebSnyanmisaka                     {   1,  36,  62 },
616*437bfbebSnyanmisaka                     {   1,  15,  26 }
617*437bfbebSnyanmisaka                 }, { /* Coeff Band 5 */
618*437bfbebSnyanmisaka                     {  26, 219, 229 },
619*437bfbebSnyanmisaka                     {   5, 155, 207 },
620*437bfbebSnyanmisaka                     {   1,  94, 151 },
621*437bfbebSnyanmisaka                     {   1,  60, 104 },
622*437bfbebSnyanmisaka                     {   1,  36,  62 },
623*437bfbebSnyanmisaka                     {   1,  16,  28 }
624*437bfbebSnyanmisaka                 }
625*437bfbebSnyanmisaka             }, { /* Inter */
626*437bfbebSnyanmisaka                 { /* Coeff Band 0 */
627*437bfbebSnyanmisaka                     { 233,  29, 248 },
628*437bfbebSnyanmisaka                     { 146,  47, 220 },
629*437bfbebSnyanmisaka                     {  43,  52, 140 }
630*437bfbebSnyanmisaka                 }, { /* Coeff Band 1 */
631*437bfbebSnyanmisaka                     { 100, 163, 232 },
632*437bfbebSnyanmisaka                     { 179, 161, 222 },
633*437bfbebSnyanmisaka                     {  63, 142, 204 },
634*437bfbebSnyanmisaka                     {  37, 113, 174 },
635*437bfbebSnyanmisaka                     {  26,  89, 137 },
636*437bfbebSnyanmisaka                     {  18,  68,  97 }
637*437bfbebSnyanmisaka                 }, { /* Coeff Band 2 */
638*437bfbebSnyanmisaka                     {  85, 181, 230 },
639*437bfbebSnyanmisaka                     {  32, 146, 209 },
640*437bfbebSnyanmisaka                     {   7, 100, 164 },
641*437bfbebSnyanmisaka                     {   3,  71, 121 },
642*437bfbebSnyanmisaka                     {   1,  45,  77 },
643*437bfbebSnyanmisaka                     {   1,  18,  30 }
644*437bfbebSnyanmisaka                 }, { /* Coeff Band 3 */
645*437bfbebSnyanmisaka                     {  65, 187, 230 },
646*437bfbebSnyanmisaka                     {  20, 148, 207 },
647*437bfbebSnyanmisaka                     {   2,  97, 159 },
648*437bfbebSnyanmisaka                     {   1,  68, 116 },
649*437bfbebSnyanmisaka                     {   1,  40,  70 },
650*437bfbebSnyanmisaka                     {   1,  14,  29 }
651*437bfbebSnyanmisaka                 }, { /* Coeff Band 4 */
652*437bfbebSnyanmisaka                     {  40, 194, 227 },
653*437bfbebSnyanmisaka                     {   8, 147, 204 },
654*437bfbebSnyanmisaka                     {   1,  94, 155 },
655*437bfbebSnyanmisaka                     {   1,  65, 112 },
656*437bfbebSnyanmisaka                     {   1,  39,  66 },
657*437bfbebSnyanmisaka                     {   1,  14,  26 }
658*437bfbebSnyanmisaka                 }, { /* Coeff Band 5 */
659*437bfbebSnyanmisaka                     {  16, 208, 228 },
660*437bfbebSnyanmisaka                     {   3, 151, 207 },
661*437bfbebSnyanmisaka                     {   1,  98, 160 },
662*437bfbebSnyanmisaka                     {   1,  67, 117 },
663*437bfbebSnyanmisaka                     {   1,  41,  74 },
664*437bfbebSnyanmisaka                     {   1,  17,  31 }
665*437bfbebSnyanmisaka                 }
666*437bfbebSnyanmisaka             }
667*437bfbebSnyanmisaka         }
668*437bfbebSnyanmisaka     }, { /* tx = 32x32 */
669*437bfbebSnyanmisaka         { /* block Type 0 */
670*437bfbebSnyanmisaka             { /* Intra */
671*437bfbebSnyanmisaka                 { /* Coeff Band 0 */
672*437bfbebSnyanmisaka                     {  17,  38, 140 },
673*437bfbebSnyanmisaka                     {   7,  34,  80 },
674*437bfbebSnyanmisaka                     {   1,  17,  29 }
675*437bfbebSnyanmisaka                 }, { /* Coeff Band 1 */
676*437bfbebSnyanmisaka                     {  37,  75, 128 },
677*437bfbebSnyanmisaka                     {  41,  76, 128 },
678*437bfbebSnyanmisaka                     {  26,  66, 116 },
679*437bfbebSnyanmisaka                     {  12,  52,  94 },
680*437bfbebSnyanmisaka                     {   2,  32,  55 },
681*437bfbebSnyanmisaka                     {   1,  10,  16 }
682*437bfbebSnyanmisaka                 }, { /* Coeff Band 2 */
683*437bfbebSnyanmisaka                     {  50, 127, 154 },
684*437bfbebSnyanmisaka                     {  37, 109, 152 },
685*437bfbebSnyanmisaka                     {  16,  82, 121 },
686*437bfbebSnyanmisaka                     {   5,  59,  85 },
687*437bfbebSnyanmisaka                     {   1,  35,  54 },
688*437bfbebSnyanmisaka                     {   1,  13,  20 }
689*437bfbebSnyanmisaka                 }, { /* Coeff Band 3 */
690*437bfbebSnyanmisaka                     {  40, 142, 167 },
691*437bfbebSnyanmisaka                     {  17, 110, 157 },
692*437bfbebSnyanmisaka                     {   2,  71, 112 },
693*437bfbebSnyanmisaka                     {   1,  44,  72 },
694*437bfbebSnyanmisaka                     {   1,  27,  45 },
695*437bfbebSnyanmisaka                     {   1,  11,  17 }
696*437bfbebSnyanmisaka                 }, { /* Coeff Band 4 */
697*437bfbebSnyanmisaka                     {  30, 175, 188 },
698*437bfbebSnyanmisaka                     {   9, 124, 169 },
699*437bfbebSnyanmisaka                     {   1,  74, 116 },
700*437bfbebSnyanmisaka                     {   1,  48,  78 },
701*437bfbebSnyanmisaka                     {   1,  30,  49 },
702*437bfbebSnyanmisaka                     {   1,  11,  18 }
703*437bfbebSnyanmisaka                 }, { /* Coeff Band 5 */
704*437bfbebSnyanmisaka                     {  10, 222, 223 },
705*437bfbebSnyanmisaka                     {   2, 150, 194 },
706*437bfbebSnyanmisaka                     {   1,  83, 128 },
707*437bfbebSnyanmisaka                     {   1,  48,  79 },
708*437bfbebSnyanmisaka                     {   1,  27,  45 },
709*437bfbebSnyanmisaka                     {   1,  11,  17 }
710*437bfbebSnyanmisaka                 }
711*437bfbebSnyanmisaka             }, { /* Inter */
712*437bfbebSnyanmisaka                 { /* Coeff Band 0 */
713*437bfbebSnyanmisaka                     {  36,  41, 235 },
714*437bfbebSnyanmisaka                     {  29,  36, 193 },
715*437bfbebSnyanmisaka                     {  10,  27, 111 }
716*437bfbebSnyanmisaka                 }, { /* Coeff Band 1 */
717*437bfbebSnyanmisaka                     {  85, 165, 222 },
718*437bfbebSnyanmisaka                     { 177, 162, 215 },
719*437bfbebSnyanmisaka                     { 110, 135, 195 },
720*437bfbebSnyanmisaka                     {  57, 113, 168 },
721*437bfbebSnyanmisaka                     {  23,  83, 120 },
722*437bfbebSnyanmisaka                     {  10,  49,  61 }
723*437bfbebSnyanmisaka                 }, { /* Coeff Band 2 */
724*437bfbebSnyanmisaka                     {  85, 190, 223 },
725*437bfbebSnyanmisaka                     {  36, 139, 200 },
726*437bfbebSnyanmisaka                     {   5,  90, 146 },
727*437bfbebSnyanmisaka                     {   1,  60, 103 },
728*437bfbebSnyanmisaka                     {   1,  38,  65 },
729*437bfbebSnyanmisaka                     {   1,  18,  30 }
730*437bfbebSnyanmisaka                 }, { /* Coeff Band 3 */
731*437bfbebSnyanmisaka                     {  72, 202, 223 },
732*437bfbebSnyanmisaka                     {  23, 141, 199 },
733*437bfbebSnyanmisaka                     {   2,  86, 140 },
734*437bfbebSnyanmisaka                     {   1,  56,  97 },
735*437bfbebSnyanmisaka                     {   1,  36,  61 },
736*437bfbebSnyanmisaka                     {   1,  16,  27 }
737*437bfbebSnyanmisaka                 }, { /* Coeff Band 4 */
738*437bfbebSnyanmisaka                     {  55, 218, 225 },
739*437bfbebSnyanmisaka                     {  13, 145, 200 },
740*437bfbebSnyanmisaka                     {   1,  86, 141 },
741*437bfbebSnyanmisaka                     {   1,  57,  99 },
742*437bfbebSnyanmisaka                     {   1,  35,  61 },
743*437bfbebSnyanmisaka                     {   1,  13,  22 }
744*437bfbebSnyanmisaka                 }, { /* Coeff Band 5 */
745*437bfbebSnyanmisaka                     {  15, 235, 212 },
746*437bfbebSnyanmisaka                     {   1, 132, 184 },
747*437bfbebSnyanmisaka                     {   1,  84, 139 },
748*437bfbebSnyanmisaka                     {   1,  57,  97 },
749*437bfbebSnyanmisaka                     {   1,  34,  56 },
750*437bfbebSnyanmisaka                     {   1,  14,  23 }
751*437bfbebSnyanmisaka                 }
752*437bfbebSnyanmisaka             }
753*437bfbebSnyanmisaka         }, { /* block Type 1 */
754*437bfbebSnyanmisaka             { /* Intra */
755*437bfbebSnyanmisaka                 { /* Coeff Band 0 */
756*437bfbebSnyanmisaka                     { 181,  21, 201 },
757*437bfbebSnyanmisaka                     {  61,  37, 123 },
758*437bfbebSnyanmisaka                     {  10,  38,  71 }
759*437bfbebSnyanmisaka                 }, { /* Coeff Band 1 */
760*437bfbebSnyanmisaka                     {  47, 106, 172 },
761*437bfbebSnyanmisaka                     {  95, 104, 173 },
762*437bfbebSnyanmisaka                     {  42,  93, 159 },
763*437bfbebSnyanmisaka                     {  18,  77, 131 },
764*437bfbebSnyanmisaka                     {   4,  50,  81 },
765*437bfbebSnyanmisaka                     {   1,  17,  23 }
766*437bfbebSnyanmisaka                 }, { /* Coeff Band 2 */
767*437bfbebSnyanmisaka                     {  62, 147, 199 },
768*437bfbebSnyanmisaka                     {  44, 130, 189 },
769*437bfbebSnyanmisaka                     {  28, 102, 154 },
770*437bfbebSnyanmisaka                     {  18,  75, 115 },
771*437bfbebSnyanmisaka                     {   2,  44,  65 },
772*437bfbebSnyanmisaka                     {   1,  12,  19 }
773*437bfbebSnyanmisaka                 }, { /* Coeff Band 3 */
774*437bfbebSnyanmisaka                     {  55, 153, 210 },
775*437bfbebSnyanmisaka                     {  24, 130, 194 },
776*437bfbebSnyanmisaka                     {   3,  93, 146 },
777*437bfbebSnyanmisaka                     {   1,  61,  97 },
778*437bfbebSnyanmisaka                     {   1,  31,  50 },
779*437bfbebSnyanmisaka                     {   1,  10,  16 }
780*437bfbebSnyanmisaka                 }, { /* Coeff Band 4 */
781*437bfbebSnyanmisaka                     {  49, 186, 223 },
782*437bfbebSnyanmisaka                     {  17, 148, 204 },
783*437bfbebSnyanmisaka                     {   1,  96, 142 },
784*437bfbebSnyanmisaka                     {   1,  53,  83 },
785*437bfbebSnyanmisaka                     {   1,  26,  44 },
786*437bfbebSnyanmisaka                     {   1,  11,  17 }
787*437bfbebSnyanmisaka                 }, { /* Coeff Band 5 */
788*437bfbebSnyanmisaka                     {  13, 217, 212 },
789*437bfbebSnyanmisaka                     {   2, 136, 180 },
790*437bfbebSnyanmisaka                     {   1,  78, 124 },
791*437bfbebSnyanmisaka                     {   1,  50,  83 },
792*437bfbebSnyanmisaka                     {   1,  29,  49 },
793*437bfbebSnyanmisaka                     {   1,  14,  23 }
794*437bfbebSnyanmisaka                 }
795*437bfbebSnyanmisaka             }, { /* Inter */
796*437bfbebSnyanmisaka                 { /* Coeff Band 0 */
797*437bfbebSnyanmisaka                     { 197,  13, 247 },
798*437bfbebSnyanmisaka                     {  82,  17, 222 },
799*437bfbebSnyanmisaka                     {  25,  17, 162 }
800*437bfbebSnyanmisaka                 }, { /* Coeff Band 1 */
801*437bfbebSnyanmisaka                     { 126, 186, 247 },
802*437bfbebSnyanmisaka                     { 234, 191, 243 },
803*437bfbebSnyanmisaka                     { 176, 177, 234 },
804*437bfbebSnyanmisaka                     { 104, 158, 220 },
805*437bfbebSnyanmisaka                     {  66, 128, 186 },
806*437bfbebSnyanmisaka                     {  55,  90, 137 }
807*437bfbebSnyanmisaka                 }, { /* Coeff Band 2 */
808*437bfbebSnyanmisaka                     { 111, 197, 242 },
809*437bfbebSnyanmisaka                     {  46, 158, 219 },
810*437bfbebSnyanmisaka                     {   9, 104, 171 },
811*437bfbebSnyanmisaka                     {   2,  65, 125 },
812*437bfbebSnyanmisaka                     {   1,  44,  80 },
813*437bfbebSnyanmisaka                     {   1,  17,  91 }
814*437bfbebSnyanmisaka                 }, { /* Coeff Band 3 */
815*437bfbebSnyanmisaka                     { 104, 208, 245 },
816*437bfbebSnyanmisaka                     {  39, 168, 224 },
817*437bfbebSnyanmisaka                     {   3, 109, 162 },
818*437bfbebSnyanmisaka                     {   1,  79, 124 },
819*437bfbebSnyanmisaka                     {   1,  50, 102 },
820*437bfbebSnyanmisaka                     {   1,  43, 102 }
821*437bfbebSnyanmisaka                 }, { /* Coeff Band 4 */
822*437bfbebSnyanmisaka                     {  84, 220, 246 },
823*437bfbebSnyanmisaka                     {  31, 177, 231 },
824*437bfbebSnyanmisaka                     {   2, 115, 180 },
825*437bfbebSnyanmisaka                     {   1,  79, 134 },
826*437bfbebSnyanmisaka                     {   1,  55,  77 },
827*437bfbebSnyanmisaka                     {   1,  60,  79 }
828*437bfbebSnyanmisaka                 }, { /* Coeff Band 5 */
829*437bfbebSnyanmisaka                     {  43, 243, 240 },
830*437bfbebSnyanmisaka                     {   8, 180, 217 },
831*437bfbebSnyanmisaka                     {   1, 115, 166 },
832*437bfbebSnyanmisaka                     {   1,  84, 121 },
833*437bfbebSnyanmisaka                     {   1,  51,  67 },
834*437bfbebSnyanmisaka                     {   1,  16,   6 }
835*437bfbebSnyanmisaka                 }
836*437bfbebSnyanmisaka             }
837*437bfbebSnyanmisaka         }
838*437bfbebSnyanmisaka     }
839*437bfbebSnyanmisaka };
840*437bfbebSnyanmisaka 
841*437bfbebSnyanmisaka const vp9_prob vp9_kf_y_mode_prob[INTRA_MODES][INTRA_MODES][INTRA_MODES - 1] = {
842*437bfbebSnyanmisaka     {
843*437bfbebSnyanmisaka         // above = dc
844*437bfbebSnyanmisaka         { 137,  30,  42, 148, 151, 207,  70,  52,  91 },  // left = dc
845*437bfbebSnyanmisaka         {  92,  45, 102, 136, 116, 180,  74,  90, 100 },  // left = v
846*437bfbebSnyanmisaka         {  73,  32,  19, 187, 222, 215,  46,  34, 100 },  // left = h
847*437bfbebSnyanmisaka         {  91,  30,  32, 116, 121, 186,  93,  86,  94 },  // left = d45
848*437bfbebSnyanmisaka         {  72,  35,  36, 149,  68, 206,  68,  63, 105 },  // left = d135
849*437bfbebSnyanmisaka         {  73,  31,  28, 138,  57, 124,  55, 122, 151 },  // left = d117
850*437bfbebSnyanmisaka         {  67,  23,  21, 140, 126, 197,  40,  37, 171 },  // left = d153
851*437bfbebSnyanmisaka         {  86,  27,  28, 128, 154, 212,  45,  43,  53 },  // left = d207
852*437bfbebSnyanmisaka         {  74,  32,  27, 107,  86, 160,  63, 134, 102 },  // left = d63
853*437bfbebSnyanmisaka         {  59,  67,  44, 140, 161, 202,  78,  67, 119 }   // left = tm
854*437bfbebSnyanmisaka     }, {  // above = v
855*437bfbebSnyanmisaka         {  63,  36, 126, 146, 123, 158,  60,  90,  96 },  // left = dc
856*437bfbebSnyanmisaka         {  43,  46, 168, 134, 107, 128,  69, 142,  92 },  // left = v
857*437bfbebSnyanmisaka         {  44,  29,  68, 159, 201, 177,  50,  57,  77 },  // left = h
858*437bfbebSnyanmisaka         {  58,  38,  76, 114,  97, 172,  78, 133,  92 },  // left = d45
859*437bfbebSnyanmisaka         {  46,  41,  76, 140,  63, 184,  69, 112,  57 },  // left = d135
860*437bfbebSnyanmisaka         {  38,  32,  85, 140,  46, 112,  54, 151, 133 },  // left = d117
861*437bfbebSnyanmisaka         {  39,  27,  61, 131, 110, 175,  44,  75, 136 },  // left = d153
862*437bfbebSnyanmisaka         {  52,  30,  74, 113, 130, 175,  51,  64,  58 },  // left = d207
863*437bfbebSnyanmisaka         {  47,  35,  80, 100,  74, 143,  64, 163,  74 },  // left = d63
864*437bfbebSnyanmisaka         {  36,  61, 116, 114, 128, 162,  80, 125,  82 }   // left = tm
865*437bfbebSnyanmisaka     }, {  // above = h
866*437bfbebSnyanmisaka         {  82,  26,  26, 171, 208, 204,  44,  32, 105 },  // left = dc
867*437bfbebSnyanmisaka         {  55,  44,  68, 166, 179, 192,  57,  57, 108 },  // left = v
868*437bfbebSnyanmisaka         {  42,  26,  11, 199, 241, 228,  23,  15,  85 },  // left = h
869*437bfbebSnyanmisaka         {  68,  42,  19, 131, 160, 199,  55,  52,  83 },  // left = d45
870*437bfbebSnyanmisaka         {  58,  50,  25, 139, 115, 232,  39,  52, 118 },  // left = d135
871*437bfbebSnyanmisaka         {  50,  35,  33, 153, 104, 162,  64,  59, 131 },  // left = d117
872*437bfbebSnyanmisaka         {  44,  24,  16, 150, 177, 202,  33,  19, 156 },  // left = d153
873*437bfbebSnyanmisaka         {  55,  27,  12, 153, 203, 218,  26,  27,  49 },  // left = d207
874*437bfbebSnyanmisaka         {  53,  49,  21, 110, 116, 168,  59,  80,  76 },  // left = d63
875*437bfbebSnyanmisaka         {  38,  72,  19, 168, 203, 212,  50,  50, 107 }   // left = tm
876*437bfbebSnyanmisaka     }, {  // above = d45
877*437bfbebSnyanmisaka         { 103,  26,  36, 129, 132, 201,  83,  80,  93 },  // left = dc
878*437bfbebSnyanmisaka         {  59,  38,  83, 112, 103, 162,  98, 136,  90 },  // left = v
879*437bfbebSnyanmisaka         {  62,  30,  23, 158, 200, 207,  59,  57,  50 },  // left = h
880*437bfbebSnyanmisaka         {  67,  30,  29,  84,  86, 191, 102,  91,  59 },  // left = d45
881*437bfbebSnyanmisaka         {  60,  32,  33, 112,  71, 220,  64,  89, 104 },  // left = d135
882*437bfbebSnyanmisaka         {  53,  26,  34, 130,  56, 149,  84, 120, 103 },  // left = d117
883*437bfbebSnyanmisaka         {  53,  21,  23, 133, 109, 210,  56,  77, 172 },  // left = d153
884*437bfbebSnyanmisaka         {  77,  19,  29, 112, 142, 228,  55,  66,  36 },  // left = d207
885*437bfbebSnyanmisaka         {  61,  29,  29,  93,  97, 165,  83, 175, 162 },  // left = d63
886*437bfbebSnyanmisaka         {  47,  47,  43, 114, 137, 181, 100,  99,  95 }   // left = tm
887*437bfbebSnyanmisaka     }, {  // above = d135
888*437bfbebSnyanmisaka         {  69,  23,  29, 128,  83, 199,  46,  44, 101 },  // left = dc
889*437bfbebSnyanmisaka         {  53,  40,  55, 139,  69, 183,  61,  80, 110 },  // left = v
890*437bfbebSnyanmisaka         {  40,  29,  19, 161, 180, 207,  43,  24,  91 },  // left = h
891*437bfbebSnyanmisaka         {  60,  34,  19, 105,  61, 198,  53,  64,  89 },  // left = d45
892*437bfbebSnyanmisaka         {  52,  31,  22, 158,  40, 209,  58,  62,  89 },  // left = d135
893*437bfbebSnyanmisaka         {  44,  31,  29, 147,  46, 158,  56, 102, 198 },  // left = d117
894*437bfbebSnyanmisaka         {  35,  19,  12, 135,  87, 209,  41,  45, 167 },  // left = d153
895*437bfbebSnyanmisaka         {  55,  25,  21, 118,  95, 215,  38,  39,  66 },  // left = d207
896*437bfbebSnyanmisaka         {  51,  38,  25, 113,  58, 164,  70,  93,  97 },  // left = d63
897*437bfbebSnyanmisaka         {  47,  54,  34, 146, 108, 203,  72, 103, 151 }   // left = tm
898*437bfbebSnyanmisaka     }, {  // above = d117
899*437bfbebSnyanmisaka         {  64,  19,  37, 156,  66, 138,  49,  95, 133 },  // left = dc
900*437bfbebSnyanmisaka         {  46,  27,  80, 150,  55, 124,  55, 121, 135 },  // left = v
901*437bfbebSnyanmisaka         {  36,  23,  27, 165, 149, 166,  54,  64, 118 },  // left = h
902*437bfbebSnyanmisaka         {  53,  21,  36, 131,  63, 163,  60, 109,  81 },  // left = d45
903*437bfbebSnyanmisaka         {  40,  26,  35, 154,  40, 185,  51,  97, 123 },  // left = d135
904*437bfbebSnyanmisaka         {  35,  19,  34, 179,  19,  97,  48, 129, 124 },  // left = d117
905*437bfbebSnyanmisaka         {  36,  20,  26, 136,  62, 164,  33,  77, 154 },  // left = d153
906*437bfbebSnyanmisaka         {  45,  18,  32, 130,  90, 157,  40,  79,  91 },  // left = d207
907*437bfbebSnyanmisaka         {  45,  26,  28, 129,  45, 129,  49, 147, 123 },  // left = d63
908*437bfbebSnyanmisaka         {  38,  44,  51, 136,  74, 162,  57,  97, 121 }   // left = tm
909*437bfbebSnyanmisaka     }, {  // above = d153
910*437bfbebSnyanmisaka         {  75,  17,  22, 136, 138, 185,  32,  34, 166 },  // left = dc
911*437bfbebSnyanmisaka         {  56,  39,  58, 133, 117, 173,  48,  53, 187 },  // left = v
912*437bfbebSnyanmisaka         {  35,  21,  12, 161, 212, 207,  20,  23, 145 },  // left = h
913*437bfbebSnyanmisaka         {  56,  29,  19, 117, 109, 181,  55,  68, 112 },  // left = d45
914*437bfbebSnyanmisaka         {  47,  29,  17, 153,  64, 220,  59,  51, 114 },  // left = d135
915*437bfbebSnyanmisaka         {  46,  16,  24, 136,  76, 147,  41,  64, 172 },  // left = d117
916*437bfbebSnyanmisaka         {  34,  17,  11, 108, 152, 187,  13,  15, 209 },  // left = d153
917*437bfbebSnyanmisaka         {  51,  24,  14, 115, 133, 209,  32,  26, 104 },  // left = d207
918*437bfbebSnyanmisaka         {  55,  30,  18, 122,  79, 179,  44,  88, 116 },  // left = d63
919*437bfbebSnyanmisaka         {  37,  49,  25, 129, 168, 164,  41,  54, 148 }   // left = tm
920*437bfbebSnyanmisaka     }, {  // above = d207
921*437bfbebSnyanmisaka         {  82,  22,  32, 127, 143, 213,  39,  41,  70 },  // left = dc
922*437bfbebSnyanmisaka         {  62,  44,  61, 123, 105, 189,  48,  57,  64 },  // left = v
923*437bfbebSnyanmisaka         {  47,  25,  17, 175, 222, 220,  24,  30,  86 },  // left = h
924*437bfbebSnyanmisaka         {  68,  36,  17, 106, 102, 206,  59,  74,  74 },  // left = d45
925*437bfbebSnyanmisaka         {  57,  39,  23, 151,  68, 216,  55,  63,  58 },  // left = d135
926*437bfbebSnyanmisaka         {  49,  30,  35, 141,  70, 168,  82,  40, 115 },  // left = d117
927*437bfbebSnyanmisaka         {  51,  25,  15, 136, 129, 202,  38,  35, 139 },  // left = d153
928*437bfbebSnyanmisaka         {  68,  26,  16, 111, 141, 215,  29,  28,  28 },  // left = d207
929*437bfbebSnyanmisaka         {  59,  39,  19, 114,  75, 180,  77, 104,  42 },  // left = d63
930*437bfbebSnyanmisaka         {  40,  61,  26, 126, 152, 206,  61,  59,  93 }   // left = tm
931*437bfbebSnyanmisaka     }, {  // above = d63
932*437bfbebSnyanmisaka         {  78,  23,  39, 111, 117, 170,  74, 124,  94 },  // left = dc
933*437bfbebSnyanmisaka         {  48,  34,  86, 101,  92, 146,  78, 179, 134 },  // left = v
934*437bfbebSnyanmisaka         {  47,  22,  24, 138, 187, 178,  68,  69,  59 },  // left = h
935*437bfbebSnyanmisaka         {  56,  25,  33, 105, 112, 187,  95, 177, 129 },  // left = d45
936*437bfbebSnyanmisaka         {  48,  31,  27, 114,  63, 183,  82, 116,  56 },  // left = d135
937*437bfbebSnyanmisaka         {  43,  28,  37, 121,  63, 123,  61, 192, 169 },  // left = d117
938*437bfbebSnyanmisaka         {  42,  17,  24, 109,  97, 177,  56,  76, 122 },  // left = d153
939*437bfbebSnyanmisaka         {  58,  18,  28, 105, 139, 182,  70,  92,  63 },  // left = d207
940*437bfbebSnyanmisaka         {  46,  23,  32,  74,  86, 150,  67, 183,  88 },  // left = d63
941*437bfbebSnyanmisaka         {  36,  38,  48,  92, 122, 165,  88, 137,  91 }   // left = tm
942*437bfbebSnyanmisaka     }, {  // above = tm
943*437bfbebSnyanmisaka         {  65,  70,  60, 155, 159, 199,  61,  60,  81 },  // left = dc
944*437bfbebSnyanmisaka         {  44,  78, 115, 132, 119, 173,  71, 112,  93 },  // left = v
945*437bfbebSnyanmisaka         {  39,  38,  21, 184, 227, 206,  42,  32,  64 },  // left = h
946*437bfbebSnyanmisaka         {  58,  47,  36, 124, 137, 193,  80,  82,  78 },  // left = d45
947*437bfbebSnyanmisaka         {  49,  50,  35, 144,  95, 205,  63,  78,  59 },  // left = d135
948*437bfbebSnyanmisaka         {  41,  53,  52, 148,  71, 142,  65, 128,  51 },  // left = d117
949*437bfbebSnyanmisaka         {  40,  36,  28, 143, 143, 202,  40,  55, 137 },  // left = d153
950*437bfbebSnyanmisaka         {  52,  34,  29, 129, 183, 227,  42,  35,  43 },  // left = d207
951*437bfbebSnyanmisaka         {  42,  44,  44, 104, 105, 164,  64, 130,  80 },  // left = d63
952*437bfbebSnyanmisaka         {  43,  81,  53, 140, 169, 204,  68,  84,  72 }   // left = tm
953*437bfbebSnyanmisaka     }
954*437bfbebSnyanmisaka };
955*437bfbebSnyanmisaka 
956*437bfbebSnyanmisaka const vp9_prob vp9_kf_uv_mode_prob[INTRA_MODES][INTRA_MODES - 1] = {
957*437bfbebSnyanmisaka     { 144,  11,  54, 157, 195, 130,  46,  58, 108 },  // y = dc
958*437bfbebSnyanmisaka     { 118,  15, 123, 148, 131, 101,  44,  93, 131 },  // y = v
959*437bfbebSnyanmisaka     { 113,  12,  23, 188, 226, 142,  26,  32, 125 },  // y = h
960*437bfbebSnyanmisaka     { 120,  11,  50, 123, 163, 135,  64,  77, 103 },  // y = d45
961*437bfbebSnyanmisaka     { 113,   9,  36, 155, 111, 157,  32,  44, 161 },  // y = d135
962*437bfbebSnyanmisaka     { 116,   9,  55, 176,  76,  96,  37,  61, 149 },  // y = d117
963*437bfbebSnyanmisaka     { 115,   9,  28, 141, 161, 167,  21,  25, 193 },  // y = d153
964*437bfbebSnyanmisaka     { 120,  12,  32, 145, 195, 142,  32,  38,  86 },  // y = d207
965*437bfbebSnyanmisaka     { 116,  12,  64, 120, 140, 125,  49, 115, 121 },  // y = d63
966*437bfbebSnyanmisaka     { 102,  19,  66, 162, 182, 122,  35,  59, 128 }   // y = tm
967*437bfbebSnyanmisaka };
968*437bfbebSnyanmisaka 
969*437bfbebSnyanmisaka const vp9_prob vp9_kf_partition_probs[PARTITION_CONTEXTS][PARTITION_TYPES - 1] = {
970*437bfbebSnyanmisaka     // 8x8 -> 4x4
971*437bfbebSnyanmisaka     { 158,  97,  94 },  // a/l both not split
972*437bfbebSnyanmisaka     {  93,  24,  99 },  // a split, l not split
973*437bfbebSnyanmisaka     {  85, 119,  44 },  // l split, a not split
974*437bfbebSnyanmisaka     {  62,  59,  67 },  // a/l both split
975*437bfbebSnyanmisaka     // 16x16 -> 8x8
976*437bfbebSnyanmisaka     { 149,  53,  53 },  // a/l both not split
977*437bfbebSnyanmisaka     {  94,  20,  48 },  // a split, l not split
978*437bfbebSnyanmisaka     {  83,  53,  24 },  // l split, a not split
979*437bfbebSnyanmisaka     {  52,  18,  18 },  // a/l both split
980*437bfbebSnyanmisaka     // 32x32 -> 16x16
981*437bfbebSnyanmisaka     { 150,  40,  39 },  // a/l both not split
982*437bfbebSnyanmisaka     {  78,  12,  26 },  // a split, l not split
983*437bfbebSnyanmisaka     {  67,  33,  11 },  // l split, a not split
984*437bfbebSnyanmisaka     {  24,   7,   5 },  // a/l both split
985*437bfbebSnyanmisaka     // 64x64 -> 32x32
986*437bfbebSnyanmisaka     { 174,  35,  49 },  // a/l both not split
987*437bfbebSnyanmisaka     {  68,  11,  27 },  // a split, l not split
988*437bfbebSnyanmisaka     {  57,  15,   9 },  // l split, a not split
989*437bfbebSnyanmisaka     {  12,   3,   3 },  // a/l both split
990*437bfbebSnyanmisaka };
991*437bfbebSnyanmisaka 
vp9_ver_align(RK_U32 val)992*437bfbebSnyanmisaka RK_U32 vp9_ver_align(RK_U32 val)
993*437bfbebSnyanmisaka {
994*437bfbebSnyanmisaka     return MPP_ALIGN(val, 64);
995*437bfbebSnyanmisaka }
996*437bfbebSnyanmisaka 
vp9_hor_align(RK_U32 val)997*437bfbebSnyanmisaka RK_U32 vp9_hor_align(RK_U32 val)
998*437bfbebSnyanmisaka {
999*437bfbebSnyanmisaka     return MPP_ALIGN(val, 256) | 256;
1000*437bfbebSnyanmisaka }
1001*437bfbebSnyanmisaka 
hal_vp9d_output_probe(void * buf,void * dxva)1002*437bfbebSnyanmisaka MPP_RET hal_vp9d_output_probe(void *buf, void *dxva)
1003*437bfbebSnyanmisaka {
1004*437bfbebSnyanmisaka     RK_S32 i, j, k, m, n;
1005*437bfbebSnyanmisaka     RK_S32 fifo_len = 304;
1006*437bfbebSnyanmisaka     RK_U64 *probe_packet = NULL;
1007*437bfbebSnyanmisaka     BitputCtx_t bp;
1008*437bfbebSnyanmisaka     DXVA_PicParams_VP9 *pic_param = (DXVA_PicParams_VP9*)dxva;
1009*437bfbebSnyanmisaka     RK_S32 intraFlag = (!pic_param->frame_type || pic_param->intra_only);
1010*437bfbebSnyanmisaka     vp9_prob partition_probs[PARTITION_CONTEXTS][PARTITION_TYPES - 1];
1011*437bfbebSnyanmisaka     vp9_prob uv_mode_prob[INTRA_MODES][INTRA_MODES - 1];
1012*437bfbebSnyanmisaka 
1013*437bfbebSnyanmisaka     memset(buf, 0, 304 * 8);
1014*437bfbebSnyanmisaka 
1015*437bfbebSnyanmisaka     if (intraFlag) {
1016*437bfbebSnyanmisaka         memcpy(partition_probs, vp9_kf_partition_probs, sizeof(partition_probs));
1017*437bfbebSnyanmisaka         memcpy(uv_mode_prob, vp9_kf_uv_mode_prob, sizeof(uv_mode_prob));
1018*437bfbebSnyanmisaka     } else {
1019*437bfbebSnyanmisaka         memcpy(partition_probs, pic_param->prob.partition, sizeof(partition_probs));
1020*437bfbebSnyanmisaka         memcpy(uv_mode_prob, pic_param->prob.uv_mode, sizeof(uv_mode_prob));
1021*437bfbebSnyanmisaka     }
1022*437bfbebSnyanmisaka 
1023*437bfbebSnyanmisaka     probe_packet = mpp_calloc(RK_U64, fifo_len + 1);
1024*437bfbebSnyanmisaka     mpp_set_bitput_ctx(&bp, probe_packet, fifo_len);
1025*437bfbebSnyanmisaka     //sb info  5 x 128 bit
1026*437bfbebSnyanmisaka     for (i = 0; i < PARTITION_CONTEXTS; i++) //kf_partition_prob
1027*437bfbebSnyanmisaka         for (j = 0; j < PARTITION_TYPES - 1; j++)
1028*437bfbebSnyanmisaka             mpp_put_bits(&bp, partition_probs[i][j], 8); //48
1029*437bfbebSnyanmisaka 
1030*437bfbebSnyanmisaka     for (i = 0; i < PREDICTION_PROBS; i++) //Segment_id_pred_prob //3
1031*437bfbebSnyanmisaka         mpp_put_bits(&bp, pic_param->stVP9Segments.pred_probs[i], 8);
1032*437bfbebSnyanmisaka 
1033*437bfbebSnyanmisaka     for (i = 0; i < SEG_TREE_PROBS; i++) //Segment_id_probs
1034*437bfbebSnyanmisaka         mpp_put_bits(&bp, pic_param->stVP9Segments.tree_probs[i], 8); //7
1035*437bfbebSnyanmisaka 
1036*437bfbebSnyanmisaka     for (i = 0; i < SKIP_CONTEXTS; i++) //Skip_flag_probs //3
1037*437bfbebSnyanmisaka         mpp_put_bits(&bp, pic_param->prob.skip[i], 8);
1038*437bfbebSnyanmisaka 
1039*437bfbebSnyanmisaka     for (i = 0; i < TX_SIZE_CONTEXTS; i++) //Tx_size_probs //6
1040*437bfbebSnyanmisaka         for (j = 0; j < TX_SIZES - 1; j++)
1041*437bfbebSnyanmisaka             mpp_put_bits(&bp, pic_param->prob.tx32p[i][j], 8);
1042*437bfbebSnyanmisaka 
1043*437bfbebSnyanmisaka     for (i = 0; i < TX_SIZE_CONTEXTS; i++) //Tx_size_probs //4
1044*437bfbebSnyanmisaka         for (j = 0; j < TX_SIZES - 2; j++)
1045*437bfbebSnyanmisaka             mpp_put_bits(&bp, pic_param->prob.tx16p[i][j], 8);
1046*437bfbebSnyanmisaka 
1047*437bfbebSnyanmisaka     for (i = 0; i < TX_SIZE_CONTEXTS; i++) //Tx_size_probs //2
1048*437bfbebSnyanmisaka         mpp_put_bits(&bp, pic_param->prob.tx8p[i], 8);
1049*437bfbebSnyanmisaka 
1050*437bfbebSnyanmisaka     for (i = 0; i < INTRA_INTER_CONTEXTS; i++) //Tx_size_probs //4
1051*437bfbebSnyanmisaka         mpp_put_bits(&bp, pic_param->prob.intra[i], 8);
1052*437bfbebSnyanmisaka 
1053*437bfbebSnyanmisaka     mpp_put_align(&bp, 128, 0);
1054*437bfbebSnyanmisaka     if (intraFlag) { //intra probs
1055*437bfbebSnyanmisaka         //intra only //149 x 128 bit ,aligned to 152 x 128 bit
1056*437bfbebSnyanmisaka         //coeff releated prob   64 x 128 bit
1057*437bfbebSnyanmisaka         for (i = 0; i < TX_SIZES; i++)
1058*437bfbebSnyanmisaka             for (j = 0; j < PLANE_TYPES; j++) {
1059*437bfbebSnyanmisaka                 RK_S32 byte_count = 0;
1060*437bfbebSnyanmisaka                 for (k = 0; k < COEF_BANDS; k++) {
1061*437bfbebSnyanmisaka                     for (m = 0; m < COEFF_CONTEXTS; m++)
1062*437bfbebSnyanmisaka                         for (n = 0; n < UNCONSTRAINED_NODES; n++) {
1063*437bfbebSnyanmisaka                             mpp_put_bits(&bp, pic_param->prob.coef[i][j][0][k][m][n], 8);
1064*437bfbebSnyanmisaka 
1065*437bfbebSnyanmisaka                             byte_count++;
1066*437bfbebSnyanmisaka                             if (byte_count == 27) {
1067*437bfbebSnyanmisaka                                 mpp_put_align(&bp, 128, 0);
1068*437bfbebSnyanmisaka                                 byte_count = 0;
1069*437bfbebSnyanmisaka                             }
1070*437bfbebSnyanmisaka                         }
1071*437bfbebSnyanmisaka                 }
1072*437bfbebSnyanmisaka                 mpp_put_align(&bp, 128, 0);
1073*437bfbebSnyanmisaka             }
1074*437bfbebSnyanmisaka 
1075*437bfbebSnyanmisaka         //intra mode prob  80 x 128 bit
1076*437bfbebSnyanmisaka         for (i = 0; i < INTRA_MODES; i++) { //vp9_kf_y_mode_prob
1077*437bfbebSnyanmisaka             RK_S32 byte_count = 0;
1078*437bfbebSnyanmisaka             for (j = 0; j < INTRA_MODES; j++)
1079*437bfbebSnyanmisaka                 for (k = 0; k < INTRA_MODES - 1; k++) {
1080*437bfbebSnyanmisaka                     mpp_put_bits(&bp, vp9_kf_y_mode_prob[i][j][k], 8);
1081*437bfbebSnyanmisaka                     byte_count++;
1082*437bfbebSnyanmisaka                     if (byte_count == 27) {
1083*437bfbebSnyanmisaka                         byte_count = 0;
1084*437bfbebSnyanmisaka                         mpp_put_align(&bp, 128, 0);
1085*437bfbebSnyanmisaka                     }
1086*437bfbebSnyanmisaka 
1087*437bfbebSnyanmisaka                 }
1088*437bfbebSnyanmisaka             if (i < 4) {
1089*437bfbebSnyanmisaka                 for (m = 0; m < (i < 3 ? 23 : 21); m++)
1090*437bfbebSnyanmisaka                     mpp_put_bits(&bp, ((vp9_prob *)(&vp9_kf_uv_mode_prob[0][0]))[i * 23 + m], 8);
1091*437bfbebSnyanmisaka                 for (; m < 23; m++)
1092*437bfbebSnyanmisaka                     mpp_put_bits(&bp, 0, 8);
1093*437bfbebSnyanmisaka             } else {
1094*437bfbebSnyanmisaka                 for (m = 0; m < 23; m++)
1095*437bfbebSnyanmisaka                     mpp_put_bits(&bp, 0, 8);
1096*437bfbebSnyanmisaka             }
1097*437bfbebSnyanmisaka             mpp_put_align(&bp, 128, 0);
1098*437bfbebSnyanmisaka         }
1099*437bfbebSnyanmisaka         //align to 152 x 128 bit
1100*437bfbebSnyanmisaka         for (i = 0; i < INTER_PROB_SIZE_ALIGN_TO_128 - INTRA_PROB_SIZE_ALIGN_TO_128; i++) { //aligned to 153 x 256 bit
1101*437bfbebSnyanmisaka             mpp_put_bits(&bp, 0, 8);
1102*437bfbebSnyanmisaka             mpp_put_align(&bp, 128, 0);
1103*437bfbebSnyanmisaka         }
1104*437bfbebSnyanmisaka     } else {
1105*437bfbebSnyanmisaka         //inter probs
1106*437bfbebSnyanmisaka         //151 x 128 bit ,aligned to 152 x 128 bit
1107*437bfbebSnyanmisaka         //inter only
1108*437bfbebSnyanmisaka 
1109*437bfbebSnyanmisaka         //intra_y_mode & inter_block info   6 x 128 bit
1110*437bfbebSnyanmisaka         for (i = 0; i < BLOCK_SIZE_GROUPS; i++) //intra_y_mode
1111*437bfbebSnyanmisaka             for (j = 0; j < INTRA_MODES - 1; j++)
1112*437bfbebSnyanmisaka                 mpp_put_bits(&bp, pic_param->prob.y_mode[i][j], 8);
1113*437bfbebSnyanmisaka 
1114*437bfbebSnyanmisaka         for (i = 0; i < COMP_INTER_CONTEXTS; i++) //reference_mode prob
1115*437bfbebSnyanmisaka             mpp_put_bits(&bp, pic_param->prob.comp[i], 8);
1116*437bfbebSnyanmisaka 
1117*437bfbebSnyanmisaka         for (i = 0; i < REF_CONTEXTS; i++) //comp ref bit
1118*437bfbebSnyanmisaka             mpp_put_bits(&bp, pic_param->prob.comp_ref[i], 8);
1119*437bfbebSnyanmisaka 
1120*437bfbebSnyanmisaka         for (i = 0; i < REF_CONTEXTS; i++) //single ref bit
1121*437bfbebSnyanmisaka             for (j = 0; j < 2; j++)
1122*437bfbebSnyanmisaka                 mpp_put_bits(&bp, pic_param->prob.single_ref[i][j], 8);
1123*437bfbebSnyanmisaka 
1124*437bfbebSnyanmisaka         for (i = 0; i < INTER_MODE_CONTEXTS; i++) //mv mode bit
1125*437bfbebSnyanmisaka             for (j = 0; j < INTER_MODES - 1; j++)
1126*437bfbebSnyanmisaka                 mpp_put_bits(&bp, pic_param->prob.mv_mode[i][j], 8);
1127*437bfbebSnyanmisaka 
1128*437bfbebSnyanmisaka 
1129*437bfbebSnyanmisaka         for (i = 0; i < SWITCHABLE_FILTER_CONTEXTS; i++) //comp ref bit
1130*437bfbebSnyanmisaka             for (j = 0; j < SWITCHABLE_FILTERS - 1; j++)
1131*437bfbebSnyanmisaka                 mpp_put_bits(&bp, pic_param->prob.filter[i][j], 8);
1132*437bfbebSnyanmisaka 
1133*437bfbebSnyanmisaka         mpp_put_align(&bp, 128, 0);
1134*437bfbebSnyanmisaka 
1135*437bfbebSnyanmisaka         //128 x 128bit
1136*437bfbebSnyanmisaka         //coeff releated
1137*437bfbebSnyanmisaka         for (i = 0; i < TX_SIZES; i++)
1138*437bfbebSnyanmisaka             for (j = 0; j < PLANE_TYPES; j++) {
1139*437bfbebSnyanmisaka                 RK_S32 byte_count = 0;
1140*437bfbebSnyanmisaka                 for (k = 0; k < COEF_BANDS; k++) {
1141*437bfbebSnyanmisaka                     for (m = 0; m < COEFF_CONTEXTS; m++)
1142*437bfbebSnyanmisaka                         for (n = 0; n < UNCONSTRAINED_NODES; n++) {
1143*437bfbebSnyanmisaka                             mpp_put_bits(&bp, pic_param->prob.coef[i][j][0][k][m][n], 8);
1144*437bfbebSnyanmisaka                             byte_count++;
1145*437bfbebSnyanmisaka                             if (byte_count == 27) {
1146*437bfbebSnyanmisaka                                 mpp_put_align(&bp, 128, 0);
1147*437bfbebSnyanmisaka                                 byte_count = 0;
1148*437bfbebSnyanmisaka                             }
1149*437bfbebSnyanmisaka                         }
1150*437bfbebSnyanmisaka                 }
1151*437bfbebSnyanmisaka                 mpp_put_align(&bp, 128, 0);
1152*437bfbebSnyanmisaka             }
1153*437bfbebSnyanmisaka         for (i = 0; i < TX_SIZES; i++)
1154*437bfbebSnyanmisaka             for (j = 0; j < PLANE_TYPES; j++) {
1155*437bfbebSnyanmisaka                 RK_S32 byte_count = 0;
1156*437bfbebSnyanmisaka                 for (k = 0; k < COEF_BANDS; k++) {
1157*437bfbebSnyanmisaka                     for (m = 0; m < COEFF_CONTEXTS; m++) {
1158*437bfbebSnyanmisaka                         for (n = 0; n < UNCONSTRAINED_NODES; n++) {
1159*437bfbebSnyanmisaka                             mpp_put_bits(&bp, pic_param->prob.coef[i][j][1][k][m][n], 8);
1160*437bfbebSnyanmisaka                             byte_count++;
1161*437bfbebSnyanmisaka                             if (byte_count == 27) {
1162*437bfbebSnyanmisaka                                 mpp_put_align(&bp, 128, 0);
1163*437bfbebSnyanmisaka                                 byte_count = 0;
1164*437bfbebSnyanmisaka                             }
1165*437bfbebSnyanmisaka                         }
1166*437bfbebSnyanmisaka 
1167*437bfbebSnyanmisaka                     }
1168*437bfbebSnyanmisaka                 }
1169*437bfbebSnyanmisaka                 mpp_put_align(&bp, 128, 0);
1170*437bfbebSnyanmisaka             }
1171*437bfbebSnyanmisaka 
1172*437bfbebSnyanmisaka         //intra uv mode 6 x 128
1173*437bfbebSnyanmisaka         for (i = 0; i < 3; i++) //intra_uv_mode
1174*437bfbebSnyanmisaka             for (j = 0; j < INTRA_MODES - 1; j++)
1175*437bfbebSnyanmisaka                 mpp_put_bits(&bp, uv_mode_prob[i][j], 8);
1176*437bfbebSnyanmisaka         mpp_put_align(&bp, 128, 0);
1177*437bfbebSnyanmisaka 
1178*437bfbebSnyanmisaka         for (; i < 6; i++) //intra_uv_mode
1179*437bfbebSnyanmisaka             for (j = 0; j < INTRA_MODES - 1; j++)
1180*437bfbebSnyanmisaka                 mpp_put_bits(&bp, uv_mode_prob[i][j], 8);
1181*437bfbebSnyanmisaka         mpp_put_align(&bp, 128, 0);
1182*437bfbebSnyanmisaka 
1183*437bfbebSnyanmisaka         for (; i < 9; i++) //intra_uv_mode
1184*437bfbebSnyanmisaka             for (j = 0; j < INTRA_MODES - 1; j++)
1185*437bfbebSnyanmisaka                 mpp_put_bits(&bp, uv_mode_prob[i][j], 8);
1186*437bfbebSnyanmisaka         mpp_put_align(&bp, 128, 0);
1187*437bfbebSnyanmisaka         for (; i < INTRA_MODES; i++) //intra_uv_mode
1188*437bfbebSnyanmisaka             for (j = 0; j < INTRA_MODES - 1; j++)
1189*437bfbebSnyanmisaka                 mpp_put_bits(&bp, uv_mode_prob[i][j], 8);
1190*437bfbebSnyanmisaka 
1191*437bfbebSnyanmisaka         mpp_put_align(&bp, 128, 0);
1192*437bfbebSnyanmisaka         mpp_put_bits(&bp, 0, 8);
1193*437bfbebSnyanmisaka         mpp_put_align(&bp, 128, 0);
1194*437bfbebSnyanmisaka 
1195*437bfbebSnyanmisaka         //mv releated 6 x 128
1196*437bfbebSnyanmisaka         for (i = 0; i < MV_JOINTS - 1; i++) //mv_joint_type
1197*437bfbebSnyanmisaka             mpp_put_bits(&bp, pic_param->prob.mv_joint[i], 8);
1198*437bfbebSnyanmisaka 
1199*437bfbebSnyanmisaka         for (i = 0; i < 2; i++) { //sign bit
1200*437bfbebSnyanmisaka             mpp_put_bits(&bp, pic_param->prob.mv_comp[i].sign, 8);
1201*437bfbebSnyanmisaka         }
1202*437bfbebSnyanmisaka         for (i = 0; i < 2; i++) { //classes bit
1203*437bfbebSnyanmisaka             for (j = 0; j < MV_CLASSES - 1; j++)
1204*437bfbebSnyanmisaka                 mpp_put_bits(&bp, pic_param->prob.mv_comp[i].classes[j], 8);
1205*437bfbebSnyanmisaka         }
1206*437bfbebSnyanmisaka         for (i = 0; i < 2; i++) { //classe0 bit
1207*437bfbebSnyanmisaka             mpp_put_bits(&bp, pic_param->prob.mv_comp[i].class0, 8);
1208*437bfbebSnyanmisaka         }
1209*437bfbebSnyanmisaka         for (i = 0; i < 2; i++) { // bits
1210*437bfbebSnyanmisaka             for (j = 0; j < MV_OFFSET_BITS; j++)
1211*437bfbebSnyanmisaka                 mpp_put_bits(&bp, pic_param->prob.mv_comp[i].bits[j], 8);
1212*437bfbebSnyanmisaka         }
1213*437bfbebSnyanmisaka         for (i = 0; i < 2; i++) { //class0_fp bit
1214*437bfbebSnyanmisaka             for (j = 0; j < CLASS0_SIZE; j++)
1215*437bfbebSnyanmisaka                 for (k = 0; k < MV_FP_SIZE - 1; k++)
1216*437bfbebSnyanmisaka                     mpp_put_bits(&bp, pic_param->prob.mv_comp[i].class0_fp[j][k], 8);
1217*437bfbebSnyanmisaka         }
1218*437bfbebSnyanmisaka         for (i = 0; i < 2; i++) { //comp ref bit
1219*437bfbebSnyanmisaka             for (j = 0; j < MV_FP_SIZE - 1; j++)
1220*437bfbebSnyanmisaka                 mpp_put_bits(&bp, pic_param->prob.mv_comp[i].fp[j], 8);
1221*437bfbebSnyanmisaka         }
1222*437bfbebSnyanmisaka         for (i = 0; i < 2; i++) { //class0_hp bit
1223*437bfbebSnyanmisaka 
1224*437bfbebSnyanmisaka             mpp_put_bits(&bp, pic_param->prob.mv_comp[i].class0_hp, 8);
1225*437bfbebSnyanmisaka         }
1226*437bfbebSnyanmisaka         for (i = 0; i < 2; i++) { //hp bit
1227*437bfbebSnyanmisaka             mpp_put_bits(&bp, pic_param->prob.mv_comp[i].hp, 8);
1228*437bfbebSnyanmisaka         }
1229*437bfbebSnyanmisaka         mpp_put_align(&bp, 128, 0);
1230*437bfbebSnyanmisaka     }
1231*437bfbebSnyanmisaka 
1232*437bfbebSnyanmisaka     memcpy(buf, probe_packet, 304 * 8);
1233*437bfbebSnyanmisaka 
1234*437bfbebSnyanmisaka #ifdef dump
1235*437bfbebSnyanmisaka     if (intraFlag) {
1236*437bfbebSnyanmisaka         fwrite(probe_packet, 1, 302 * 8, vp9_fp);
1237*437bfbebSnyanmisaka     } else {
1238*437bfbebSnyanmisaka         fwrite(probe_packet, 1, 304 * 8, vp9_fp);
1239*437bfbebSnyanmisaka     }
1240*437bfbebSnyanmisaka     fflush(vp9_fp);
1241*437bfbebSnyanmisaka #endif
1242*437bfbebSnyanmisaka     MPP_FREE(probe_packet);
1243*437bfbebSnyanmisaka 
1244*437bfbebSnyanmisaka     return 0;
1245*437bfbebSnyanmisaka }
1246*437bfbebSnyanmisaka 
hal_vp9d_prob_default(void * buf,void * dxva)1247*437bfbebSnyanmisaka MPP_RET hal_vp9d_prob_default(void *buf, void *dxva)
1248*437bfbebSnyanmisaka {
1249*437bfbebSnyanmisaka     RK_S32 i, j, k, m, n;
1250*437bfbebSnyanmisaka     RK_S32 fifo_len = PROB_SIZE >> 3;
1251*437bfbebSnyanmisaka     RK_U64 *probe_packet = NULL;
1252*437bfbebSnyanmisaka     BitputCtx_t bp;
1253*437bfbebSnyanmisaka     DXVA_PicParams_VP9 *pic_param = (DXVA_PicParams_VP9*)dxva;
1254*437bfbebSnyanmisaka     RK_S32 intraFlag = (!pic_param->frame_type || pic_param->intra_only);
1255*437bfbebSnyanmisaka     vp9_prob partition_probs[PARTITION_CONTEXTS][PARTITION_TYPES - 1];
1256*437bfbebSnyanmisaka     memset(buf, 0, PROB_SIZE);
1257*437bfbebSnyanmisaka 
1258*437bfbebSnyanmisaka     if (intraFlag) {
1259*437bfbebSnyanmisaka         memcpy(&pic_param->prob.tx32p, &vp9_default_probs.tx32p, sizeof(vp9_default_probs.tx32p));
1260*437bfbebSnyanmisaka         memcpy(&pic_param->prob.tx16p, &vp9_default_probs.tx16p, sizeof(vp9_default_probs.tx16p));
1261*437bfbebSnyanmisaka         memcpy(&pic_param->prob.tx8p,  &vp9_default_probs.tx8p, sizeof(vp9_default_probs.tx8p));
1262*437bfbebSnyanmisaka         memcpy(&pic_param->prob.skip,  &vp9_default_probs.skip, sizeof(vp9_default_probs.skip));
1263*437bfbebSnyanmisaka         memcpy(&pic_param->prob.coef,  &vp9_default_coef_probs, sizeof(vp9_default_coef_probs));
1264*437bfbebSnyanmisaka     }
1265*437bfbebSnyanmisaka     memcpy(partition_probs, pic_param->prob.partition, sizeof(partition_probs));
1266*437bfbebSnyanmisaka 
1267*437bfbebSnyanmisaka     probe_packet = mpp_calloc(RK_U64, fifo_len);
1268*437bfbebSnyanmisaka     memset(probe_packet, 0, fifo_len);
1269*437bfbebSnyanmisaka     mpp_set_bitput_ctx(&bp, probe_packet, fifo_len);
1270*437bfbebSnyanmisaka 
1271*437bfbebSnyanmisaka     //sb info  5 x 128 bit
1272*437bfbebSnyanmisaka     for (i = 0; i < 16; i++) //kf_partition_prob
1273*437bfbebSnyanmisaka         for (j = 0; j < 3; j++)
1274*437bfbebSnyanmisaka             mpp_put_bits(&bp, partition_probs[i][j], 8); //48
1275*437bfbebSnyanmisaka 
1276*437bfbebSnyanmisaka     for (i = 0; i < PREDICTION_PROBS; i++) //Segment_id_pred_prob //3
1277*437bfbebSnyanmisaka         mpp_put_bits(&bp, 0, 8);
1278*437bfbebSnyanmisaka 
1279*437bfbebSnyanmisaka     for (i = 0; i < SEG_TREE_PROBS; i++) //Segment_id_probs
1280*437bfbebSnyanmisaka         mpp_put_bits(&bp, 0, 8); //7
1281*437bfbebSnyanmisaka 
1282*437bfbebSnyanmisaka     for (i = 0; i < SKIP_CONTEXTS; i++) //Skip_flag_probs //3
1283*437bfbebSnyanmisaka         mpp_put_bits(&bp, pic_param->prob.skip[i], 8);
1284*437bfbebSnyanmisaka 
1285*437bfbebSnyanmisaka     for (i = 0; i < TX_SIZE_CONTEXTS; i++) //Tx_size_probs //6
1286*437bfbebSnyanmisaka         for (j = 0; j < TX_SIZES - 1; j++)
1287*437bfbebSnyanmisaka             mpp_put_bits(&bp, pic_param->prob.tx32p[i][j], 8);
1288*437bfbebSnyanmisaka 
1289*437bfbebSnyanmisaka     for (i = 0; i < TX_SIZE_CONTEXTS; i++) //Tx_size_probs //4
1290*437bfbebSnyanmisaka         for (j = 0; j < TX_SIZES - 2; j++)
1291*437bfbebSnyanmisaka             mpp_put_bits(&bp, pic_param->prob.tx16p[i][j], 8);
1292*437bfbebSnyanmisaka 
1293*437bfbebSnyanmisaka     for (i = 0; i < TX_SIZE_CONTEXTS; i++) //Tx_size_probs //2
1294*437bfbebSnyanmisaka         mpp_put_bits(&bp, pic_param->prob.tx8p[i], 8);
1295*437bfbebSnyanmisaka 
1296*437bfbebSnyanmisaka     for (i = 0; i < INTRA_INTER_CONTEXTS; i++) //Tx_size_probs //4
1297*437bfbebSnyanmisaka         mpp_put_bits(&bp, pic_param->prob.intra[i], 8);
1298*437bfbebSnyanmisaka 
1299*437bfbebSnyanmisaka     mpp_put_align(&bp, 128, 0);
1300*437bfbebSnyanmisaka 
1301*437bfbebSnyanmisaka     //intra_y_mode & inter_block info   6 x 128 bit
1302*437bfbebSnyanmisaka     for (i = 0; i < BLOCK_SIZE_GROUPS; i++) //intra_y_mode
1303*437bfbebSnyanmisaka         for (j = 0; j < INTRA_MODES - 1; j++)
1304*437bfbebSnyanmisaka             mpp_put_bits(&bp, pic_param->prob.y_mode[i][j], 8);
1305*437bfbebSnyanmisaka 
1306*437bfbebSnyanmisaka     for (i = 0; i < COMP_INTER_CONTEXTS; i++) //reference_mode prob
1307*437bfbebSnyanmisaka         mpp_put_bits(&bp, pic_param->prob.comp[i], 8);
1308*437bfbebSnyanmisaka 
1309*437bfbebSnyanmisaka     for (i = 0; i < REF_CONTEXTS; i++) //comp ref bit
1310*437bfbebSnyanmisaka         mpp_put_bits(&bp, pic_param->prob.comp_ref[i], 8);
1311*437bfbebSnyanmisaka 
1312*437bfbebSnyanmisaka     for (i = 0; i < REF_CONTEXTS; i++) //single ref bit
1313*437bfbebSnyanmisaka         for (j = 0; j < 2; j++)
1314*437bfbebSnyanmisaka             mpp_put_bits(&bp, pic_param->prob.single_ref[i][j], 8);
1315*437bfbebSnyanmisaka 
1316*437bfbebSnyanmisaka     for (i = 0; i < INTER_MODE_CONTEXTS; i++) //mv mode bit
1317*437bfbebSnyanmisaka         for (j = 0; j < INTER_MODES - 1; j++)
1318*437bfbebSnyanmisaka             mpp_put_bits(&bp, pic_param->prob.mv_mode[i][j], 8);
1319*437bfbebSnyanmisaka 
1320*437bfbebSnyanmisaka 
1321*437bfbebSnyanmisaka     for (i = 0; i < SWITCHABLE_FILTER_CONTEXTS; i++) //comp ref bit
1322*437bfbebSnyanmisaka         for (j = 0; j < SWITCHABLE_FILTERS - 1; j++)
1323*437bfbebSnyanmisaka             mpp_put_bits(&bp, pic_param->prob.filter[i][j], 8);
1324*437bfbebSnyanmisaka 
1325*437bfbebSnyanmisaka     mpp_put_align(&bp, 128, 0);
1326*437bfbebSnyanmisaka 
1327*437bfbebSnyanmisaka     //128 x 128bit
1328*437bfbebSnyanmisaka     //coeff releated
1329*437bfbebSnyanmisaka     for (i = 0; i < TX_SIZES; i++)
1330*437bfbebSnyanmisaka         for (j = 0; j < PLANE_TYPES; j++) {
1331*437bfbebSnyanmisaka             RK_S32 byte_count = 0;
1332*437bfbebSnyanmisaka             for (k = 0; k < COEF_BANDS; k++) {
1333*437bfbebSnyanmisaka                 for (m = 0; m < COEFF_CONTEXTS; m++)
1334*437bfbebSnyanmisaka                     for (n = 0; n < UNCONSTRAINED_NODES; n++) {
1335*437bfbebSnyanmisaka                         mpp_put_bits(&bp, pic_param->prob.coef[i][j][0][k][m][n], 8);
1336*437bfbebSnyanmisaka                         byte_count++;
1337*437bfbebSnyanmisaka                         if (byte_count == 27) {
1338*437bfbebSnyanmisaka                             mpp_put_align(&bp, 128, 0);
1339*437bfbebSnyanmisaka                             byte_count = 0;
1340*437bfbebSnyanmisaka                         }
1341*437bfbebSnyanmisaka                     }
1342*437bfbebSnyanmisaka             }
1343*437bfbebSnyanmisaka             mpp_put_align(&bp, 128, 0);
1344*437bfbebSnyanmisaka         }
1345*437bfbebSnyanmisaka     for (i = 0; i < TX_SIZES; i++)
1346*437bfbebSnyanmisaka         for (j = 0; j < PLANE_TYPES; j++) {
1347*437bfbebSnyanmisaka             RK_S32 byte_count = 0;
1348*437bfbebSnyanmisaka             for (k = 0; k < COEF_BANDS; k++) {
1349*437bfbebSnyanmisaka                 for (m = 0; m < COEFF_CONTEXTS; m++) {
1350*437bfbebSnyanmisaka                     for (n = 0; n < UNCONSTRAINED_NODES; n++) {
1351*437bfbebSnyanmisaka                         mpp_put_bits(&bp, pic_param->prob.coef[i][j][1][k][m][n], 8);
1352*437bfbebSnyanmisaka                         byte_count++;
1353*437bfbebSnyanmisaka                         if (byte_count == 27) {
1354*437bfbebSnyanmisaka                             mpp_put_align(&bp, 128, 0);
1355*437bfbebSnyanmisaka                             byte_count = 0;
1356*437bfbebSnyanmisaka                         }
1357*437bfbebSnyanmisaka                     }
1358*437bfbebSnyanmisaka 
1359*437bfbebSnyanmisaka                 }
1360*437bfbebSnyanmisaka             }
1361*437bfbebSnyanmisaka             mpp_put_align(&bp, 128, 0);
1362*437bfbebSnyanmisaka         }
1363*437bfbebSnyanmisaka 
1364*437bfbebSnyanmisaka     //intra uv mode 6 x 128
1365*437bfbebSnyanmisaka     for (i = 0; i < 3; i++) //intra_uv_mode
1366*437bfbebSnyanmisaka         for (j = 0; j < INTRA_MODES - 1; j++)
1367*437bfbebSnyanmisaka             mpp_put_bits(&bp, pic_param->prob.uv_mode[i][j], 8);
1368*437bfbebSnyanmisaka     mpp_put_align(&bp, 128, 0);
1369*437bfbebSnyanmisaka 
1370*437bfbebSnyanmisaka     for (; i < 6; i++) //intra_uv_mode
1371*437bfbebSnyanmisaka         for (j = 0; j < INTRA_MODES - 1; j++)
1372*437bfbebSnyanmisaka             mpp_put_bits(&bp, pic_param->prob.uv_mode[i][j], 8);
1373*437bfbebSnyanmisaka     mpp_put_align(&bp, 128, 0);
1374*437bfbebSnyanmisaka 
1375*437bfbebSnyanmisaka     for (; i < 9; i++) //intra_uv_mode
1376*437bfbebSnyanmisaka         for (j = 0; j < INTRA_MODES - 1; j++)
1377*437bfbebSnyanmisaka             mpp_put_bits(&bp, pic_param->prob.uv_mode[i][j], 8);
1378*437bfbebSnyanmisaka     mpp_put_align(&bp, 128, 0);
1379*437bfbebSnyanmisaka     for (; i < INTRA_MODES; i++) //intra_uv_mode
1380*437bfbebSnyanmisaka         for (j = 0; j < INTRA_MODES - 1; j++)
1381*437bfbebSnyanmisaka             mpp_put_bits(&bp, pic_param->prob.uv_mode[i][j], 8);
1382*437bfbebSnyanmisaka 
1383*437bfbebSnyanmisaka     mpp_put_align(&bp, 128, 0);
1384*437bfbebSnyanmisaka     mpp_put_bits(&bp, 0, 8);
1385*437bfbebSnyanmisaka     mpp_put_align(&bp, 128, 0);
1386*437bfbebSnyanmisaka 
1387*437bfbebSnyanmisaka     //mv releated 6 x 128
1388*437bfbebSnyanmisaka     for (i = 0; i < MV_JOINTS - 1; i++) //mv_joint_type
1389*437bfbebSnyanmisaka         mpp_put_bits(&bp, pic_param->prob.mv_joint[i], 8);
1390*437bfbebSnyanmisaka 
1391*437bfbebSnyanmisaka     for (i = 0; i < 2; i++) { //sign bit
1392*437bfbebSnyanmisaka         mpp_put_bits(&bp, pic_param->prob.mv_comp[i].sign, 8);
1393*437bfbebSnyanmisaka     }
1394*437bfbebSnyanmisaka     for (i = 0; i < 2; i++) { //classes bit
1395*437bfbebSnyanmisaka         for (j = 0; j < MV_CLASSES - 1; j++)
1396*437bfbebSnyanmisaka             mpp_put_bits(&bp, pic_param->prob.mv_comp[i].classes[j], 8);
1397*437bfbebSnyanmisaka     }
1398*437bfbebSnyanmisaka     for (i = 0; i < 2; i++) { //classe0 bit
1399*437bfbebSnyanmisaka         mpp_put_bits(&bp, pic_param->prob.mv_comp[i].class0, 8);
1400*437bfbebSnyanmisaka     }
1401*437bfbebSnyanmisaka     for (i = 0; i < 2; i++) { // bits
1402*437bfbebSnyanmisaka         for (j = 0; j < MV_OFFSET_BITS; j++)
1403*437bfbebSnyanmisaka             mpp_put_bits(&bp, pic_param->prob.mv_comp[i].bits[j], 8);
1404*437bfbebSnyanmisaka     }
1405*437bfbebSnyanmisaka     for (i = 0; i < 2; i++) { //class0_fp bit
1406*437bfbebSnyanmisaka         for (j = 0; j < CLASS0_SIZE; j++)
1407*437bfbebSnyanmisaka             for (k = 0; k < MV_FP_SIZE - 1; k++)
1408*437bfbebSnyanmisaka                 mpp_put_bits(&bp, pic_param->prob.mv_comp[i].class0_fp[j][k], 8);
1409*437bfbebSnyanmisaka     }
1410*437bfbebSnyanmisaka     for (i = 0; i < 2; i++) { //comp ref bit
1411*437bfbebSnyanmisaka         for (j = 0; j < MV_FP_SIZE - 1; j++)
1412*437bfbebSnyanmisaka             mpp_put_bits(&bp, pic_param->prob.mv_comp[i].fp[j], 8);
1413*437bfbebSnyanmisaka     }
1414*437bfbebSnyanmisaka     for (i = 0; i < 2; i++) { //class0_hp bit
1415*437bfbebSnyanmisaka 
1416*437bfbebSnyanmisaka         mpp_put_bits(&bp, pic_param->prob.mv_comp[i].class0_hp, 8);
1417*437bfbebSnyanmisaka     }
1418*437bfbebSnyanmisaka     for (i = 0; i < 2; i++) { //hp bit
1419*437bfbebSnyanmisaka         mpp_put_bits(&bp, pic_param->prob.mv_comp[i].hp, 8);
1420*437bfbebSnyanmisaka     }
1421*437bfbebSnyanmisaka     mpp_put_align(&bp, 128, 0);
1422*437bfbebSnyanmisaka     mpp_put_bits(&bp, 0, 8);
1423*437bfbebSnyanmisaka     mpp_put_align(&bp, 128, 0);
1424*437bfbebSnyanmisaka 
1425*437bfbebSnyanmisaka     memcpy(buf, probe_packet, fifo_len << 3);
1426*437bfbebSnyanmisaka 
1427*437bfbebSnyanmisaka #if VP9_DUMP
1428*437bfbebSnyanmisaka     {
1429*437bfbebSnyanmisaka         static RK_U32 file_cnt = 0;
1430*437bfbebSnyanmisaka         char file_name[128];
1431*437bfbebSnyanmisaka         sprintf(file_name, "/data/vp9/prob_default_%d.txt", file_cnt);
1432*437bfbebSnyanmisaka         FILE *vp9_fp = fopen(file_name, "wb");
1433*437bfbebSnyanmisaka         RK_U32 *tmp = (RK_U32 *)buf;
1434*437bfbebSnyanmisaka         for (i = 0; i < bp.index * 2; i += 2) {
1435*437bfbebSnyanmisaka             fprintf(vp9_fp, "%08x%08x\n", tmp[i + 1], tmp[i]);
1436*437bfbebSnyanmisaka         }
1437*437bfbebSnyanmisaka         file_cnt++;
1438*437bfbebSnyanmisaka         fflush(vp9_fp);
1439*437bfbebSnyanmisaka         fclose(vp9_fp);
1440*437bfbebSnyanmisaka     }
1441*437bfbebSnyanmisaka #endif
1442*437bfbebSnyanmisaka     MPP_FREE(probe_packet);
1443*437bfbebSnyanmisaka 
1444*437bfbebSnyanmisaka     return 0;
1445*437bfbebSnyanmisaka }
1446*437bfbebSnyanmisaka 
1447*437bfbebSnyanmisaka 
hal_vp9d_prob_flag_delta(void * buf,void * dxva)1448*437bfbebSnyanmisaka MPP_RET hal_vp9d_prob_flag_delta(void *buf, void *dxva)
1449*437bfbebSnyanmisaka {
1450*437bfbebSnyanmisaka     RK_S32 i, j, k, m, n;
1451*437bfbebSnyanmisaka     RK_S32 fifo_len = PROB_SIZE >> 3;
1452*437bfbebSnyanmisaka     BitputCtx_t bp;
1453*437bfbebSnyanmisaka     DXVA_PicParams_VP9 *pic_param = (DXVA_PicParams_VP9*)dxva;
1454*437bfbebSnyanmisaka     RK_S32 intraFlag = (!pic_param->frame_type || pic_param->intra_only);
1455*437bfbebSnyanmisaka     vp9_prob partition_flag[PARTITION_CONTEXTS][PARTITION_TYPES - 1];
1456*437bfbebSnyanmisaka     vp9_prob partition_delta[PARTITION_CONTEXTS][PARTITION_TYPES - 1];
1457*437bfbebSnyanmisaka     vp9_prob partition_probs[PARTITION_CONTEXTS][PARTITION_TYPES - 1];
1458*437bfbebSnyanmisaka     DXVA_prob_vp9 *prob_flag = &pic_param->prob_flag_delta.p_flag;
1459*437bfbebSnyanmisaka     DXVA_prob_vp9 *prob_delta = &pic_param->prob_flag_delta.p_delta;
1460*437bfbebSnyanmisaka 
1461*437bfbebSnyanmisaka     memset(buf, 0, PROB_SIZE);
1462*437bfbebSnyanmisaka 
1463*437bfbebSnyanmisaka     if (intraFlag) {
1464*437bfbebSnyanmisaka         memcpy(partition_probs, vp9_kf_partition_probs, sizeof(partition_probs));
1465*437bfbebSnyanmisaka     } else {
1466*437bfbebSnyanmisaka         memcpy(partition_flag, prob_flag->partition, sizeof(partition_flag));
1467*437bfbebSnyanmisaka         memcpy(partition_delta, prob_delta->partition, sizeof(partition_delta));
1468*437bfbebSnyanmisaka     }
1469*437bfbebSnyanmisaka 
1470*437bfbebSnyanmisaka     mpp_set_bitput_ctx(&bp, buf, fifo_len);
1471*437bfbebSnyanmisaka 
1472*437bfbebSnyanmisaka     if (intraFlag) { //intra probs
1473*437bfbebSnyanmisaka         //sb info  5 x 128 bit
1474*437bfbebSnyanmisaka         for (i = 0; i < PARTITION_CONTEXTS; i++) //kf_partition_prob
1475*437bfbebSnyanmisaka             for (j = 0; j < PARTITION_TYPES - 1; j++)
1476*437bfbebSnyanmisaka                 mpp_put_bits(&bp, 0, 1); //48
1477*437bfbebSnyanmisaka 
1478*437bfbebSnyanmisaka         for (i = 0; i < PREDICTION_PROBS; i++) //Segment_id_pred_prob //3
1479*437bfbebSnyanmisaka             mpp_put_bits(&bp, 0, 1);
1480*437bfbebSnyanmisaka 
1481*437bfbebSnyanmisaka         for (i = 0; i < SEG_TREE_PROBS; i++) //Segment_id_probs
1482*437bfbebSnyanmisaka             mpp_put_bits(&bp, 0, 1); //7
1483*437bfbebSnyanmisaka 
1484*437bfbebSnyanmisaka         for (i = 0; i < SKIP_CONTEXTS; i++) //Skip_flag_probs //3
1485*437bfbebSnyanmisaka             mpp_put_bits(&bp, prob_flag->skip[i], 1);
1486*437bfbebSnyanmisaka 
1487*437bfbebSnyanmisaka         for (i = 0; i < TX_SIZE_CONTEXTS; i++) //Tx_size_probs //6
1488*437bfbebSnyanmisaka             for (j = 0; j < TX_SIZES - 1; j++)
1489*437bfbebSnyanmisaka                 mpp_put_bits(&bp, prob_flag->tx32p[i][j], 1);
1490*437bfbebSnyanmisaka 
1491*437bfbebSnyanmisaka         for (i = 0; i < TX_SIZE_CONTEXTS; i++) //Tx_size_probs //4
1492*437bfbebSnyanmisaka             for (j = 0; j < TX_SIZES - 2; j++)
1493*437bfbebSnyanmisaka                 mpp_put_bits(&bp, prob_flag->tx16p[i][j], 1);
1494*437bfbebSnyanmisaka 
1495*437bfbebSnyanmisaka         for (i = 0; i < TX_SIZE_CONTEXTS; i++) //Tx_size_probs //2
1496*437bfbebSnyanmisaka             mpp_put_bits(&bp, prob_flag->tx8p[i], 1);
1497*437bfbebSnyanmisaka 
1498*437bfbebSnyanmisaka         for (i = 0; i < INTRA_INTER_CONTEXTS; i++) //Tx_size_probs //4
1499*437bfbebSnyanmisaka             mpp_put_bits(&bp, 0, 1);
1500*437bfbebSnyanmisaka 
1501*437bfbebSnyanmisaka         mpp_put_bits(&bp, 0, 3); //reserve
1502*437bfbebSnyanmisaka         //intra coeff related prob   64 x 128 bit
1503*437bfbebSnyanmisaka         for (i = 0; i < 4; i++)
1504*437bfbebSnyanmisaka             for (j = 0; j < 2; j++) {
1505*437bfbebSnyanmisaka                 RK_U8 *pp = &pic_param->prob_flag_delta.coef_flag[i][j][0][0][0][0];
1506*437bfbebSnyanmisaka                 for (k = 0; k < 4; k++) {
1507*437bfbebSnyanmisaka                     for (m = 0; m < 27; m++) {
1508*437bfbebSnyanmisaka                         mpp_put_bits(&bp, pp[m + 27 * k], 1);// "coeff_intra_prob"
1509*437bfbebSnyanmisaka                     }
1510*437bfbebSnyanmisaka                     mpp_put_bits(&bp, 0, 5);//"reserve"
1511*437bfbebSnyanmisaka                 }
1512*437bfbebSnyanmisaka             }
1513*437bfbebSnyanmisaka         //inter coeff related prob   64 x 128 bit
1514*437bfbebSnyanmisaka         for (i = 0; i < 4; i++)
1515*437bfbebSnyanmisaka             for (j = 0; j < 2; j++) {
1516*437bfbebSnyanmisaka                 RK_U8 *pp = &pic_param->prob_flag_delta.coef_flag[i][j][1][0][0][0];
1517*437bfbebSnyanmisaka                 for (k = 0; k < 4; k++) {
1518*437bfbebSnyanmisaka                     for (m = 0; m < 27; m++) {
1519*437bfbebSnyanmisaka                         mpp_put_bits(&bp, pp[m + 27 * k], 1);// "coeff_intra_prob"
1520*437bfbebSnyanmisaka                     }
1521*437bfbebSnyanmisaka                     mpp_put_bits(&bp, 0, 5);//"reserve"
1522*437bfbebSnyanmisaka                 }
1523*437bfbebSnyanmisaka             }
1524*437bfbebSnyanmisaka         mpp_put_align(&bp, 128, 0);
1525*437bfbebSnyanmisaka         /* ---------------- intra flag prob end -----------------  */
1526*437bfbebSnyanmisaka         /* ---------------- intra delat prob start -----------------  */
1527*437bfbebSnyanmisaka         for (i = 0; i < PARTITION_CONTEXTS; i++) //kf_partition_prob
1528*437bfbebSnyanmisaka             for (j = 0; j < PARTITION_TYPES - 1; j++)
1529*437bfbebSnyanmisaka                 mpp_put_bits(&bp, partition_probs[i][j], 8); //48
1530*437bfbebSnyanmisaka 
1531*437bfbebSnyanmisaka         for (i = 0; i < PREDICTION_PROBS; i++) //Segment_id_pred_prob //3
1532*437bfbebSnyanmisaka             mpp_put_bits(&bp, pic_param->stVP9Segments.pred_probs[i], 8);
1533*437bfbebSnyanmisaka 
1534*437bfbebSnyanmisaka         for (i = 0; i < SEG_TREE_PROBS; i++) //Segment_id_probs
1535*437bfbebSnyanmisaka             mpp_put_bits(&bp, pic_param->stVP9Segments.tree_probs[i], 8); //7
1536*437bfbebSnyanmisaka 
1537*437bfbebSnyanmisaka         for (i = 0; i < SKIP_CONTEXTS; i++) //Skip_flag_probs //3
1538*437bfbebSnyanmisaka             mpp_put_bits(&bp, prob_delta->skip[i], 8);
1539*437bfbebSnyanmisaka 
1540*437bfbebSnyanmisaka         for (i = 0; i < TX_SIZE_CONTEXTS; i++) //Tx_size_probs //6
1541*437bfbebSnyanmisaka             for (j = 0; j < TX_SIZES - 1; j++)
1542*437bfbebSnyanmisaka                 mpp_put_bits(&bp, prob_delta->tx32p[i][j], 8);
1543*437bfbebSnyanmisaka 
1544*437bfbebSnyanmisaka         for (i = 0; i < TX_SIZE_CONTEXTS; i++) //Tx_size_probs //4
1545*437bfbebSnyanmisaka             for (j = 0; j < TX_SIZES - 2; j++)
1546*437bfbebSnyanmisaka                 mpp_put_bits(&bp, prob_delta->tx16p[i][j], 8);
1547*437bfbebSnyanmisaka 
1548*437bfbebSnyanmisaka         for (i = 0; i < TX_SIZE_CONTEXTS; i++) //Tx_size_probs //2
1549*437bfbebSnyanmisaka             mpp_put_bits(&bp, prob_delta->tx8p[i], 8);
1550*437bfbebSnyanmisaka 
1551*437bfbebSnyanmisaka         for (i = 0; i < INTRA_INTER_CONTEXTS; i++) //Tx_size_probs //4
1552*437bfbebSnyanmisaka             mpp_put_bits(&bp, prob_delta->intra[i], 8);
1553*437bfbebSnyanmisaka 
1554*437bfbebSnyanmisaka         mpp_put_align(&bp, 128, 0);
1555*437bfbebSnyanmisaka         //coeff releated prob   64 x 128 bit
1556*437bfbebSnyanmisaka         for (i = 0; i < TX_SIZES; i++)
1557*437bfbebSnyanmisaka             for (j = 0; j < PLANE_TYPES; j++) {
1558*437bfbebSnyanmisaka                 RK_S32 byte_count = 0;
1559*437bfbebSnyanmisaka                 for (k = 0; k < COEF_BANDS; k++) {
1560*437bfbebSnyanmisaka                     for (m = 0; m < COEFF_CONTEXTS; m++)
1561*437bfbebSnyanmisaka                         for (n = 0; n < UNCONSTRAINED_NODES; n++) {
1562*437bfbebSnyanmisaka                             mpp_put_bits(&bp, pic_param->prob_flag_delta.coef_delta[i][j][0][k][m][n], 8);
1563*437bfbebSnyanmisaka 
1564*437bfbebSnyanmisaka                             byte_count++;
1565*437bfbebSnyanmisaka                             if (byte_count == 27) {
1566*437bfbebSnyanmisaka                                 mpp_put_align(&bp, 128, 0);
1567*437bfbebSnyanmisaka                                 byte_count = 0;
1568*437bfbebSnyanmisaka                             }
1569*437bfbebSnyanmisaka                         }
1570*437bfbebSnyanmisaka                 }
1571*437bfbebSnyanmisaka                 mpp_put_align(&bp, 128, 0);
1572*437bfbebSnyanmisaka             }
1573*437bfbebSnyanmisaka 
1574*437bfbebSnyanmisaka         //intra mode prob  80 x 128 bit
1575*437bfbebSnyanmisaka         for (i = 0; i < INTRA_MODES; i++) { //vp9_kf_y_mode_prob
1576*437bfbebSnyanmisaka             RK_S32 byte_count = 0;
1577*437bfbebSnyanmisaka             for (j = 0; j < INTRA_MODES; j++)
1578*437bfbebSnyanmisaka                 for (k = 0; k < INTRA_MODES - 1; k++) {
1579*437bfbebSnyanmisaka                     mpp_put_bits(&bp, vp9_kf_y_mode_prob[i][j][k], 8);
1580*437bfbebSnyanmisaka                     byte_count++;
1581*437bfbebSnyanmisaka                     if (byte_count == 27) {
1582*437bfbebSnyanmisaka                         byte_count = 0;
1583*437bfbebSnyanmisaka                         mpp_put_align(&bp, 128, 0);
1584*437bfbebSnyanmisaka                     }
1585*437bfbebSnyanmisaka 
1586*437bfbebSnyanmisaka                 }
1587*437bfbebSnyanmisaka             if (i < 4) {
1588*437bfbebSnyanmisaka                 for (m = 0; m < (i < 3 ? 23 : 21); m++)
1589*437bfbebSnyanmisaka                     mpp_put_bits(&bp, ((vp9_prob *)(&vp9_kf_uv_mode_prob[0][0]))[i * 23 + m], 8);
1590*437bfbebSnyanmisaka                 for (; m < 23; m++)
1591*437bfbebSnyanmisaka                     mpp_put_bits(&bp, 0, 8);
1592*437bfbebSnyanmisaka             } else {
1593*437bfbebSnyanmisaka                 for (m = 0; m < 23; m++)
1594*437bfbebSnyanmisaka                     mpp_put_bits(&bp, 0, 8);
1595*437bfbebSnyanmisaka             }
1596*437bfbebSnyanmisaka             mpp_put_align(&bp, 128, 0);
1597*437bfbebSnyanmisaka         }
1598*437bfbebSnyanmisaka 
1599*437bfbebSnyanmisaka         //inter coeff releated prob   64 x 128 bit
1600*437bfbebSnyanmisaka         for (i = 0; i < 4; i++)
1601*437bfbebSnyanmisaka             for (j = 0; j < 2; j++) {
1602*437bfbebSnyanmisaka                 int32_t byte_count = 0; // 8 x128bit
1603*437bfbebSnyanmisaka                 for (k = 0; k < 6; k++)
1604*437bfbebSnyanmisaka                     for (m = 0; m < 6; m++)
1605*437bfbebSnyanmisaka                         for (n = 0; n < 3; n++) {
1606*437bfbebSnyanmisaka                             mpp_put_bits(&bp, pic_param->prob_flag_delta.coef_delta[i][j][1][k][m][n], 8);
1607*437bfbebSnyanmisaka                             byte_count++;
1608*437bfbebSnyanmisaka                             if (byte_count == 27) {
1609*437bfbebSnyanmisaka                                 mpp_put_align(&bp, 128, 0);
1610*437bfbebSnyanmisaka                                 byte_count = 0;
1611*437bfbebSnyanmisaka                             }
1612*437bfbebSnyanmisaka                         }
1613*437bfbebSnyanmisaka                 mpp_put_align(&bp, 128, 0);
1614*437bfbebSnyanmisaka             }
1615*437bfbebSnyanmisaka     } else {
1616*437bfbebSnyanmisaka         //inter probs
1617*437bfbebSnyanmisaka         //151 x 128 bit ,aligned to 152 x 128 bit
1618*437bfbebSnyanmisaka         //inter only
1619*437bfbebSnyanmisaka         //sb info  5 x 128 bit
1620*437bfbebSnyanmisaka         for (i = 0; i < PARTITION_CONTEXTS; i++) //kf_partition_prob
1621*437bfbebSnyanmisaka             for (j = 0; j < PARTITION_TYPES - 1; j++)
1622*437bfbebSnyanmisaka                 mpp_put_bits(&bp, partition_flag[i][j], 1); //48
1623*437bfbebSnyanmisaka 
1624*437bfbebSnyanmisaka         for (i = 0; i < PREDICTION_PROBS; i++) //Segment_id_pred_prob //3
1625*437bfbebSnyanmisaka             mpp_put_bits(&bp, 0, 1);
1626*437bfbebSnyanmisaka 
1627*437bfbebSnyanmisaka         for (i = 0; i < SEG_TREE_PROBS; i++) //Segment_id_probs
1628*437bfbebSnyanmisaka             mpp_put_bits(&bp, 0, 1); //7
1629*437bfbebSnyanmisaka 
1630*437bfbebSnyanmisaka         for (i = 0; i < SKIP_CONTEXTS; i++) //Skip_flag_probs //3
1631*437bfbebSnyanmisaka             mpp_put_bits(&bp, prob_flag->skip[i], 1);
1632*437bfbebSnyanmisaka 
1633*437bfbebSnyanmisaka         for (i = 0; i < TX_SIZE_CONTEXTS; i++) //Tx_size_probs //6
1634*437bfbebSnyanmisaka             for (j = 0; j < TX_SIZES - 1; j++)
1635*437bfbebSnyanmisaka                 mpp_put_bits(&bp, prob_flag->tx32p[i][j], 1);
1636*437bfbebSnyanmisaka 
1637*437bfbebSnyanmisaka         for (i = 0; i < TX_SIZE_CONTEXTS; i++) //Tx_size_probs //4
1638*437bfbebSnyanmisaka             for (j = 0; j < TX_SIZES - 2; j++)
1639*437bfbebSnyanmisaka                 mpp_put_bits(&bp, prob_flag->tx16p[i][j], 1);
1640*437bfbebSnyanmisaka 
1641*437bfbebSnyanmisaka         for (i = 0; i < TX_SIZE_CONTEXTS; i++) //Tx_size_probs //2
1642*437bfbebSnyanmisaka             mpp_put_bits(&bp, prob_flag->tx8p[i], 1);
1643*437bfbebSnyanmisaka 
1644*437bfbebSnyanmisaka         for (i = 0; i < INTRA_INTER_CONTEXTS; i++) //Tx_size_probs //4
1645*437bfbebSnyanmisaka             mpp_put_bits(&bp, prob_flag->intra[i], 1);
1646*437bfbebSnyanmisaka 
1647*437bfbebSnyanmisaka         mpp_put_bits(&bp, 0, 3); //reserve
1648*437bfbebSnyanmisaka 
1649*437bfbebSnyanmisaka         //intra_y_mode & inter_block info   6 x 128 bit
1650*437bfbebSnyanmisaka         for (i = 0; i < BLOCK_SIZE_GROUPS; i++) //intra_y_mode
1651*437bfbebSnyanmisaka             for (j = 0; j < INTRA_MODES - 1; j++)
1652*437bfbebSnyanmisaka                 mpp_put_bits(&bp, prob_flag->y_mode[i][j], 1);
1653*437bfbebSnyanmisaka 
1654*437bfbebSnyanmisaka         for (i = 0; i < COMP_INTER_CONTEXTS; i++) //reference_mode prob
1655*437bfbebSnyanmisaka             mpp_put_bits(&bp, prob_flag->comp[i], 1);
1656*437bfbebSnyanmisaka 
1657*437bfbebSnyanmisaka         for (i = 0; i < REF_CONTEXTS; i++) //comp ref bit
1658*437bfbebSnyanmisaka             mpp_put_bits(&bp, prob_flag->comp_ref[i], 1);
1659*437bfbebSnyanmisaka 
1660*437bfbebSnyanmisaka         for (i = 0; i < REF_CONTEXTS; i++) //single ref bit
1661*437bfbebSnyanmisaka             for (j = 0; j < 2; j++)
1662*437bfbebSnyanmisaka                 mpp_put_bits(&bp, prob_flag->single_ref[i][j], 1);
1663*437bfbebSnyanmisaka 
1664*437bfbebSnyanmisaka         for (i = 0; i < INTER_MODE_CONTEXTS; i++) //mv mode bit
1665*437bfbebSnyanmisaka             for (j = 0; j < INTER_MODES - 1; j++)
1666*437bfbebSnyanmisaka                 mpp_put_bits(&bp, prob_flag->mv_mode[i][j], 1);
1667*437bfbebSnyanmisaka 
1668*437bfbebSnyanmisaka 
1669*437bfbebSnyanmisaka         for (i = 0; i < SWITCHABLE_FILTER_CONTEXTS; i++) //comp ref bit
1670*437bfbebSnyanmisaka             for (j = 0; j < SWITCHABLE_FILTERS - 1; j++)
1671*437bfbebSnyanmisaka                 mpp_put_bits(&bp, prob_flag->filter[i][j], 1);
1672*437bfbebSnyanmisaka 
1673*437bfbebSnyanmisaka         mpp_put_bits(&bp, 0, 11);//reserve
1674*437bfbebSnyanmisaka 
1675*437bfbebSnyanmisaka         //intra coeff related prob   64 x 128 bit
1676*437bfbebSnyanmisaka         for (i = 0; i < 4; i++)
1677*437bfbebSnyanmisaka             for (j = 0; j < 2; j++) {
1678*437bfbebSnyanmisaka                 RK_U8 *pp = &pic_param->prob_flag_delta.coef_flag[i][j][0][0][0][0];
1679*437bfbebSnyanmisaka                 for (k = 0; k < 4; k++) {
1680*437bfbebSnyanmisaka                     for (m = 0; m < 27; m++) {
1681*437bfbebSnyanmisaka                         mpp_put_bits(&bp, pp[m + 27 * k], 1);// "coeff_intra_prob"
1682*437bfbebSnyanmisaka                     }
1683*437bfbebSnyanmisaka                     mpp_put_bits(&bp, 0, 5);//"reserve"
1684*437bfbebSnyanmisaka                 }
1685*437bfbebSnyanmisaka             }
1686*437bfbebSnyanmisaka         //inter coeff related prob   64 x 128 bit
1687*437bfbebSnyanmisaka         for (i = 0; i < 4; i++)
1688*437bfbebSnyanmisaka             for (j = 0; j < 2; j++) {
1689*437bfbebSnyanmisaka                 RK_U8 *pp = &pic_param->prob_flag_delta.coef_flag[i][j][1][0][0][0];
1690*437bfbebSnyanmisaka                 for (k = 0; k < 4; k++) {
1691*437bfbebSnyanmisaka                     for (m = 0; m < 27; m++) {
1692*437bfbebSnyanmisaka                         mpp_put_bits(&bp, pp[m + 27 * k], 1);// "coeff_intra_prob"
1693*437bfbebSnyanmisaka                     }
1694*437bfbebSnyanmisaka                     mpp_put_bits(&bp, 0, 5);//"reserve"
1695*437bfbebSnyanmisaka                 }
1696*437bfbebSnyanmisaka             }
1697*437bfbebSnyanmisaka 
1698*437bfbebSnyanmisaka         //intra uv mode 6 x 128
1699*437bfbebSnyanmisaka         for (i = 0; i < 3; i++) //intra_uv_mode
1700*437bfbebSnyanmisaka             for (j = 0; j < INTRA_MODES - 1; j++)
1701*437bfbebSnyanmisaka                 mpp_put_bits(&bp, prob_flag->uv_mode[i][j], 1);
1702*437bfbebSnyanmisaka         mpp_put_bits(&bp, 0, 5);//reserve
1703*437bfbebSnyanmisaka         for (; i < 6; i++) //intra_uv_mode
1704*437bfbebSnyanmisaka             for (j = 0; j < INTRA_MODES - 1; j++)
1705*437bfbebSnyanmisaka                 mpp_put_bits(&bp, prob_flag->uv_mode[i][j], 1);
1706*437bfbebSnyanmisaka         mpp_put_bits(&bp, 0, 5);//reserve
1707*437bfbebSnyanmisaka 
1708*437bfbebSnyanmisaka         for (; i < 9; i++) //intra_uv_mode
1709*437bfbebSnyanmisaka             for (j = 0; j < INTRA_MODES - 1; j++)
1710*437bfbebSnyanmisaka                 mpp_put_bits(&bp, prob_flag->uv_mode[i][j], 1);
1711*437bfbebSnyanmisaka         mpp_put_bits(&bp, 0, 5);//reserve
1712*437bfbebSnyanmisaka         for (; i < INTRA_MODES; i++) //intra_uv_mode
1713*437bfbebSnyanmisaka             for (j = 0; j < INTRA_MODES - 1; j++)
1714*437bfbebSnyanmisaka                 mpp_put_bits(&bp, prob_flag->uv_mode[i][j], 1);
1715*437bfbebSnyanmisaka         mpp_put_bits(&bp, 0, 23);//reserve
1716*437bfbebSnyanmisaka 
1717*437bfbebSnyanmisaka         //mv releated 6 x 128
1718*437bfbebSnyanmisaka         for (i = 0; i < MV_JOINTS - 1; i++) //mv_joint_type
1719*437bfbebSnyanmisaka             mpp_put_bits(&bp, prob_flag->mv_joint[i], 1);
1720*437bfbebSnyanmisaka 
1721*437bfbebSnyanmisaka         for (i = 0; i < 2; i++) { //sign bit
1722*437bfbebSnyanmisaka             mpp_put_bits(&bp, prob_flag->mv_comp[i].sign, 1);
1723*437bfbebSnyanmisaka         }
1724*437bfbebSnyanmisaka         for (i = 0; i < 2; i++) { //classes bit
1725*437bfbebSnyanmisaka             for (j = 0; j < MV_CLASSES - 1; j++)
1726*437bfbebSnyanmisaka                 mpp_put_bits(&bp, prob_flag->mv_comp[i].classes[j], 1);
1727*437bfbebSnyanmisaka         }
1728*437bfbebSnyanmisaka         for (i = 0; i < 2; i++) { //classe0 bit
1729*437bfbebSnyanmisaka             mpp_put_bits(&bp, prob_flag->mv_comp[i].class0, 1);
1730*437bfbebSnyanmisaka         }
1731*437bfbebSnyanmisaka         for (i = 0; i < 2; i++) { // bits
1732*437bfbebSnyanmisaka             for (j = 0; j < MV_OFFSET_BITS; j++)
1733*437bfbebSnyanmisaka                 mpp_put_bits(&bp, prob_flag->mv_comp[i].bits[j], 1);
1734*437bfbebSnyanmisaka         }
1735*437bfbebSnyanmisaka         for (i = 0; i < 2; i++) { //class0_fp bit
1736*437bfbebSnyanmisaka             for (j = 0; j < CLASS0_SIZE; j++)
1737*437bfbebSnyanmisaka                 for (k = 0; k < MV_FP_SIZE - 1; k++)
1738*437bfbebSnyanmisaka                     mpp_put_bits(&bp, prob_flag->mv_comp[i].class0_fp[j][k], 1);
1739*437bfbebSnyanmisaka         }
1740*437bfbebSnyanmisaka         for (i = 0; i < 2; i++) { //comp ref bit
1741*437bfbebSnyanmisaka             for (j = 0; j < MV_FP_SIZE - 1; j++)
1742*437bfbebSnyanmisaka                 mpp_put_bits(&bp, prob_flag->mv_comp[i].fp[j], 1);
1743*437bfbebSnyanmisaka         }
1744*437bfbebSnyanmisaka         for (i = 0; i < 2; i++) { //class0_hp bit
1745*437bfbebSnyanmisaka             mpp_put_bits(&bp, prob_flag->mv_comp[i].class0_hp, 1);
1746*437bfbebSnyanmisaka         }
1747*437bfbebSnyanmisaka         for (i = 0; i < 2; i++) { //hp bit
1748*437bfbebSnyanmisaka             mpp_put_bits(&bp, prob_flag->mv_comp[i].hp, 1);
1749*437bfbebSnyanmisaka         }
1750*437bfbebSnyanmisaka         mpp_put_bits(&bp, 0, 11);//reserve
1751*437bfbebSnyanmisaka 
1752*437bfbebSnyanmisaka         for (i = 0; i < 8; i++) {
1753*437bfbebSnyanmisaka             mpp_put_bits(&bp, 0, 16);//reserve
1754*437bfbebSnyanmisaka         }
1755*437bfbebSnyanmisaka         //sb info  5 x 128 bit
1756*437bfbebSnyanmisaka         for (i = 0; i < PARTITION_CONTEXTS; i++) //kf_partition_prob
1757*437bfbebSnyanmisaka             for (j = 0; j < PARTITION_TYPES - 1; j++)
1758*437bfbebSnyanmisaka                 mpp_put_bits(&bp, partition_delta[i][j], 8); //48
1759*437bfbebSnyanmisaka 
1760*437bfbebSnyanmisaka         for (i = 0; i < PREDICTION_PROBS; i++) //Segment_id_pred_prob //3
1761*437bfbebSnyanmisaka             mpp_put_bits(&bp, pic_param->stVP9Segments.pred_probs[i], 8);
1762*437bfbebSnyanmisaka 
1763*437bfbebSnyanmisaka         for (i = 0; i < SEG_TREE_PROBS; i++) //Segment_id_probs
1764*437bfbebSnyanmisaka             mpp_put_bits(&bp, pic_param->stVP9Segments.tree_probs[i], 8); //7
1765*437bfbebSnyanmisaka 
1766*437bfbebSnyanmisaka         for (i = 0; i < SKIP_CONTEXTS; i++) //Skip_flag_probs //3
1767*437bfbebSnyanmisaka             mpp_put_bits(&bp, prob_delta->skip[i], 8);
1768*437bfbebSnyanmisaka 
1769*437bfbebSnyanmisaka         for (i = 0; i < TX_SIZE_CONTEXTS; i++) //Tx_size_probs //6
1770*437bfbebSnyanmisaka             for (j = 0; j < TX_SIZES - 1; j++)
1771*437bfbebSnyanmisaka                 mpp_put_bits(&bp, prob_delta->tx32p[i][j], 8);
1772*437bfbebSnyanmisaka 
1773*437bfbebSnyanmisaka         for (i = 0; i < TX_SIZE_CONTEXTS; i++) //Tx_size_probs //4
1774*437bfbebSnyanmisaka             for (j = 0; j < TX_SIZES - 2; j++)
1775*437bfbebSnyanmisaka                 mpp_put_bits(&bp, prob_delta->tx16p[i][j], 8);
1776*437bfbebSnyanmisaka 
1777*437bfbebSnyanmisaka         for (i = 0; i < TX_SIZE_CONTEXTS; i++) //Tx_size_probs //2
1778*437bfbebSnyanmisaka             mpp_put_bits(&bp, prob_delta->tx8p[i], 8);
1779*437bfbebSnyanmisaka 
1780*437bfbebSnyanmisaka         for (i = 0; i < INTRA_INTER_CONTEXTS; i++) //Tx_size_probs //4
1781*437bfbebSnyanmisaka             mpp_put_bits(&bp, prob_delta->intra[i], 8);
1782*437bfbebSnyanmisaka 
1783*437bfbebSnyanmisaka         mpp_put_bits(&bp, 0, 24); //reserve
1784*437bfbebSnyanmisaka 
1785*437bfbebSnyanmisaka         //intra_y_mode & inter_block info   6 x 128 bit
1786*437bfbebSnyanmisaka         for (i = 0; i < BLOCK_SIZE_GROUPS; i++) //intra_y_mode
1787*437bfbebSnyanmisaka             for (j = 0; j < INTRA_MODES - 1; j++)
1788*437bfbebSnyanmisaka                 mpp_put_bits(&bp, prob_delta->y_mode[i][j], 8);
1789*437bfbebSnyanmisaka 
1790*437bfbebSnyanmisaka         for (i = 0; i < COMP_INTER_CONTEXTS; i++) //reference_mode prob
1791*437bfbebSnyanmisaka             mpp_put_bits(&bp, prob_delta->comp[i], 8);
1792*437bfbebSnyanmisaka 
1793*437bfbebSnyanmisaka         for (i = 0; i < REF_CONTEXTS; i++) //comp ref bit
1794*437bfbebSnyanmisaka             mpp_put_bits(&bp, prob_delta->comp_ref[i], 8);
1795*437bfbebSnyanmisaka 
1796*437bfbebSnyanmisaka         for (i = 0; i < REF_CONTEXTS; i++) //single ref bit
1797*437bfbebSnyanmisaka             for (j = 0; j < 2; j++)
1798*437bfbebSnyanmisaka                 mpp_put_bits(&bp, prob_delta->single_ref[i][j], 8);
1799*437bfbebSnyanmisaka 
1800*437bfbebSnyanmisaka         for (i = 0; i < INTER_MODE_CONTEXTS; i++) //mv mode bit
1801*437bfbebSnyanmisaka             for (j = 0; j < INTER_MODES - 1; j++)
1802*437bfbebSnyanmisaka                 mpp_put_bits(&bp, prob_delta->mv_mode[i][j], 8);
1803*437bfbebSnyanmisaka 
1804*437bfbebSnyanmisaka 
1805*437bfbebSnyanmisaka         for (i = 0; i < SWITCHABLE_FILTER_CONTEXTS; i++) //comp ref bit
1806*437bfbebSnyanmisaka             for (j = 0; j < SWITCHABLE_FILTERS - 1; j++)
1807*437bfbebSnyanmisaka                 mpp_put_bits(&bp, prob_delta->filter[i][j], 8);
1808*437bfbebSnyanmisaka         for (i = 0; i < 11; i++)
1809*437bfbebSnyanmisaka             mpp_put_bits(&bp, 0, 8);//reserve
1810*437bfbebSnyanmisaka 
1811*437bfbebSnyanmisaka         //intra coeff related prob   64 x 128 bit
1812*437bfbebSnyanmisaka         for (i = 0; i < 4; i++)
1813*437bfbebSnyanmisaka             for (j = 0; j < 2; j++) {
1814*437bfbebSnyanmisaka                 RK_U32 byte_count = 0;
1815*437bfbebSnyanmisaka                 for (k = 0; k < 6; k++) {
1816*437bfbebSnyanmisaka                     for (m = 0; m < 6; m++)
1817*437bfbebSnyanmisaka                         for (n = 0; n < 3; n++) {
1818*437bfbebSnyanmisaka                             mpp_put_bits(&bp, pic_param->prob_flag_delta.coef_delta[i][j][0][k][m][n], 8);
1819*437bfbebSnyanmisaka                             byte_count++;
1820*437bfbebSnyanmisaka                             if (byte_count == 27) {
1821*437bfbebSnyanmisaka                                 mpp_put_bits(&bp, 0, 40);//aline
1822*437bfbebSnyanmisaka                                 byte_count = 0;
1823*437bfbebSnyanmisaka                             }
1824*437bfbebSnyanmisaka                         }
1825*437bfbebSnyanmisaka                 }
1826*437bfbebSnyanmisaka             }
1827*437bfbebSnyanmisaka         for (i = 0; i < 4; i++)
1828*437bfbebSnyanmisaka             for (j = 0; j < 2; j++) {
1829*437bfbebSnyanmisaka                 int32_t byte_count = 0;
1830*437bfbebSnyanmisaka                 for (k = 0; k < 6; k++) {
1831*437bfbebSnyanmisaka                     for (m = 0; m < 6; m++)
1832*437bfbebSnyanmisaka                         for (n = 0; n < 3; n++) {
1833*437bfbebSnyanmisaka                             mpp_put_bits(&bp, pic_param->prob_flag_delta.coef_delta[i][j][1][k][m][n], 8);//"coeff_inter_prob"
1834*437bfbebSnyanmisaka                             byte_count++;
1835*437bfbebSnyanmisaka                             if (byte_count == 27) {
1836*437bfbebSnyanmisaka                                 mpp_put_bits(&bp, 0, 40);//aline
1837*437bfbebSnyanmisaka                                 byte_count = 0;
1838*437bfbebSnyanmisaka                             }
1839*437bfbebSnyanmisaka                         }
1840*437bfbebSnyanmisaka                 }
1841*437bfbebSnyanmisaka             }
1842*437bfbebSnyanmisaka 
1843*437bfbebSnyanmisaka         //intra uv mode 6 x 128
1844*437bfbebSnyanmisaka         for (i = 0; i < 3; i++) //intra_uv_mode
1845*437bfbebSnyanmisaka             for (j = 0; j < INTRA_MODES - 1; j++)
1846*437bfbebSnyanmisaka                 mpp_put_bits(&bp, prob_delta->uv_mode[i][j], 8);
1847*437bfbebSnyanmisaka         mpp_put_bits(&bp, 0, 40);//reserve
1848*437bfbebSnyanmisaka         for (; i < 6; i++) //intra_uv_mode
1849*437bfbebSnyanmisaka             for (j = 0; j < INTRA_MODES - 1; j++)
1850*437bfbebSnyanmisaka                 mpp_put_bits(&bp, prob_delta->uv_mode[i][j], 8);
1851*437bfbebSnyanmisaka         mpp_put_bits(&bp, 0, 40);//reserve
1852*437bfbebSnyanmisaka 
1853*437bfbebSnyanmisaka         for (; i < 9; i++) //intra_uv_mode
1854*437bfbebSnyanmisaka             for (j = 0; j < INTRA_MODES - 1; j++)
1855*437bfbebSnyanmisaka                 mpp_put_bits(&bp, prob_delta->uv_mode[i][j], 8);
1856*437bfbebSnyanmisaka         mpp_put_bits(&bp, 0, 40);//reserve
1857*437bfbebSnyanmisaka         for (; i < INTRA_MODES; i++) //intra_uv_mode
1858*437bfbebSnyanmisaka             for (j = 0; j < INTRA_MODES - 1; j++)
1859*437bfbebSnyanmisaka                 mpp_put_bits(&bp, prob_delta->uv_mode[i][j], 8);
1860*437bfbebSnyanmisaka         for (i = 0; i < 23; i++)
1861*437bfbebSnyanmisaka             mpp_put_bits(&bp, 0xff, 8);//reserve
1862*437bfbebSnyanmisaka 
1863*437bfbebSnyanmisaka         //mv releated 6 x 128
1864*437bfbebSnyanmisaka         for (i = 0; i < MV_JOINTS - 1; i++) //mv_joint_type
1865*437bfbebSnyanmisaka             mpp_put_bits(&bp, prob_delta->mv_joint[i], 8);
1866*437bfbebSnyanmisaka 
1867*437bfbebSnyanmisaka         for (i = 0; i < 2; i++) { //sign bit
1868*437bfbebSnyanmisaka             mpp_put_bits(&bp, prob_delta->mv_comp[i].sign, 8);
1869*437bfbebSnyanmisaka         }
1870*437bfbebSnyanmisaka         for (i = 0; i < 2; i++) { //classes bit
1871*437bfbebSnyanmisaka             for (j = 0; j < MV_CLASSES - 1; j++)
1872*437bfbebSnyanmisaka                 mpp_put_bits(&bp, prob_delta->mv_comp[i].classes[j], 8);
1873*437bfbebSnyanmisaka         }
1874*437bfbebSnyanmisaka         for (i = 0; i < 2; i++) { //classe0 bit
1875*437bfbebSnyanmisaka             mpp_put_bits(&bp, prob_delta->mv_comp[i].class0, 8);
1876*437bfbebSnyanmisaka         }
1877*437bfbebSnyanmisaka         for (i = 0; i < 2; i++) { // bits
1878*437bfbebSnyanmisaka             for (j = 0; j < MV_OFFSET_BITS; j++)
1879*437bfbebSnyanmisaka                 mpp_put_bits(&bp, prob_delta->mv_comp[i].bits[j], 8);
1880*437bfbebSnyanmisaka         }
1881*437bfbebSnyanmisaka         for (i = 0; i < 2; i++) { //class0_fp bit
1882*437bfbebSnyanmisaka             for (j = 0; j < CLASS0_SIZE; j++)
1883*437bfbebSnyanmisaka                 for (k = 0; k < MV_FP_SIZE - 1; k++)
1884*437bfbebSnyanmisaka                     mpp_put_bits(&bp, prob_delta->mv_comp[i].class0_fp[j][k], 8);
1885*437bfbebSnyanmisaka         }
1886*437bfbebSnyanmisaka         for (i = 0; i < 2; i++) { //comp ref bit
1887*437bfbebSnyanmisaka             for (j = 0; j < MV_FP_SIZE - 1; j++)
1888*437bfbebSnyanmisaka                 mpp_put_bits(&bp, prob_delta->mv_comp[i].fp[j], 8);
1889*437bfbebSnyanmisaka         }
1890*437bfbebSnyanmisaka         for (i = 0; i < 2; i++) { //class0_hp bit
1891*437bfbebSnyanmisaka             mpp_put_bits(&bp, prob_delta->mv_comp[i].class0_hp, 8);
1892*437bfbebSnyanmisaka         }
1893*437bfbebSnyanmisaka         for (i = 0; i < 2; i++) { //hp bit
1894*437bfbebSnyanmisaka             mpp_put_bits(&bp, prob_delta->mv_comp[i].hp, 8);
1895*437bfbebSnyanmisaka         }
1896*437bfbebSnyanmisaka         for (i = 0; i < 27; i++)
1897*437bfbebSnyanmisaka             mpp_put_bits(&bp, 0, 8);//reserve
1898*437bfbebSnyanmisaka 
1899*437bfbebSnyanmisaka     }
1900*437bfbebSnyanmisaka     mpp_put_align(&bp, 128, 0);
1901*437bfbebSnyanmisaka 
1902*437bfbebSnyanmisaka #if VP9_DUMP
1903*437bfbebSnyanmisaka     static RK_U32 file_cnt = 0;
1904*437bfbebSnyanmisaka     char file_name[128];
1905*437bfbebSnyanmisaka     sprintf(file_name, "/data/vp9/prob_%d.txt", file_cnt);
1906*437bfbebSnyanmisaka     FILE *vp9_fp = fopen(file_name, "wb");
1907*437bfbebSnyanmisaka     RK_U32 *tmp = (RK_U32 *)buf;
1908*437bfbebSnyanmisaka     for (i = 0; i < bp.index * 2; i += 2) {
1909*437bfbebSnyanmisaka         fprintf(vp9_fp, "%08x%08x\n", tmp[i + 1], tmp[i]);
1910*437bfbebSnyanmisaka     }
1911*437bfbebSnyanmisaka     file_cnt++;
1912*437bfbebSnyanmisaka     fflush(vp9_fp);
1913*437bfbebSnyanmisaka     fclose(vp9_fp);
1914*437bfbebSnyanmisaka #endif
1915*437bfbebSnyanmisaka 
1916*437bfbebSnyanmisaka     return 0;
1917*437bfbebSnyanmisaka }
1918*437bfbebSnyanmisaka 
hal_vp9d_prob_kf(void * buf)1919*437bfbebSnyanmisaka MPP_RET hal_vp9d_prob_kf(void *buf)
1920*437bfbebSnyanmisaka {
1921*437bfbebSnyanmisaka     RK_S32 i, j, k, m;
1922*437bfbebSnyanmisaka     RK_S32 fifo_len = PROB_KF_SIZE >> 3;
1923*437bfbebSnyanmisaka     BitputCtx_t bp;
1924*437bfbebSnyanmisaka 
1925*437bfbebSnyanmisaka     memset(buf, 0, PROB_KF_SIZE);
1926*437bfbebSnyanmisaka     mpp_set_bitput_ctx(&bp, buf, fifo_len);
1927*437bfbebSnyanmisaka 
1928*437bfbebSnyanmisaka     for (i = 0; i < 16; i++)//kf_partition_prob
1929*437bfbebSnyanmisaka         for (j = 0; j < 3; j++)
1930*437bfbebSnyanmisaka             mpp_put_bits(&bp, vp9_kf_partition_probs[i][j], 8);
1931*437bfbebSnyanmisaka 
1932*437bfbebSnyanmisaka     //intra mode prob  80 x 128 bit, 10x 8x 128bit
1933*437bfbebSnyanmisaka     for (i = 0; i < 10; i++) {
1934*437bfbebSnyanmisaka         RK_S32 byte_count = 0;// 4x128 bit
1935*437bfbebSnyanmisaka         RK_U8 val = 0;
1936*437bfbebSnyanmisaka         for (j = 0; j < 10; j++)
1937*437bfbebSnyanmisaka             for (k = 0; k < 9; k++) {
1938*437bfbebSnyanmisaka                 mpp_put_bits(&bp, vp9_kf_y_mode_prob[i][j][k], 8);
1939*437bfbebSnyanmisaka                 byte_count++;
1940*437bfbebSnyanmisaka                 if (byte_count == 27) {
1941*437bfbebSnyanmisaka                     byte_count = 0;
1942*437bfbebSnyanmisaka                     mpp_put_align(&bp, 128, 0);
1943*437bfbebSnyanmisaka                 }
1944*437bfbebSnyanmisaka             }
1945*437bfbebSnyanmisaka         // 6x128 bit, 23x4 bytes
1946*437bfbebSnyanmisaka         if (i < 4) {
1947*437bfbebSnyanmisaka             for (m = 0; m < (i < 3 ? 23 : 21); m++) {
1948*437bfbebSnyanmisaka                 val = ((RK_U8 *)(&vp9_kf_uv_mode_prob[0][0]))[i * 23 + m];
1949*437bfbebSnyanmisaka                 mpp_put_bits(&bp, val, 8);
1950*437bfbebSnyanmisaka             }
1951*437bfbebSnyanmisaka             for (; m < 23; m++)
1952*437bfbebSnyanmisaka                 mpp_put_bits(&bp, 0, 8);
1953*437bfbebSnyanmisaka         } else {
1954*437bfbebSnyanmisaka             for (m = 0; m < 23; m++)
1955*437bfbebSnyanmisaka                 mpp_put_bits(&bp, 0, 8);
1956*437bfbebSnyanmisaka         }
1957*437bfbebSnyanmisaka         mpp_put_align(&bp, 128, 0);
1958*437bfbebSnyanmisaka     }
1959*437bfbebSnyanmisaka 
1960*437bfbebSnyanmisaka     mpp_put_align(&bp, 128, 0);
1961*437bfbebSnyanmisaka 
1962*437bfbebSnyanmisaka     return MPP_OK;
1963*437bfbebSnyanmisaka }
1964*437bfbebSnyanmisaka 
hal_vp9d_update_counts(void * buf,void * dxva)1965*437bfbebSnyanmisaka void hal_vp9d_update_counts(void *buf, void *dxva)
1966*437bfbebSnyanmisaka {
1967*437bfbebSnyanmisaka     DXVA_PicParams_VP9 *s = (DXVA_PicParams_VP9*)dxva;
1968*437bfbebSnyanmisaka     RK_S32 i, j, m, n, k;
1969*437bfbebSnyanmisaka     RK_U32 *eob_coef;
1970*437bfbebSnyanmisaka     RK_S32 ref_type;
1971*437bfbebSnyanmisaka #ifdef dump
1972*437bfbebSnyanmisaka     RK_U32 count_length;
1973*437bfbebSnyanmisaka #endif
1974*437bfbebSnyanmisaka     RK_U32 com_len = 0;
1975*437bfbebSnyanmisaka 
1976*437bfbebSnyanmisaka #ifdef dump
1977*437bfbebSnyanmisaka     if (!(s->frame_type == 0 || s->intra_only)) //inter
1978*437bfbebSnyanmisaka         count_length = (213 * 64 + 576 * 5 * 32) / 8;
1979*437bfbebSnyanmisaka     else //intra
1980*437bfbebSnyanmisaka         count_length = (49 * 64 + 288 * 5 * 32) / 8;
1981*437bfbebSnyanmisaka 
1982*437bfbebSnyanmisaka     fwrite(buf, 1, count_length, vp9_fp1);
1983*437bfbebSnyanmisaka     fflush(vp9_fp1);
1984*437bfbebSnyanmisaka #endif
1985*437bfbebSnyanmisaka     if ((s->frame_type == 0 || s->intra_only)) {
1986*437bfbebSnyanmisaka         com_len = sizeof(s->counts.partition) + sizeof(s->counts.skip) + sizeof(s->counts.intra)
1987*437bfbebSnyanmisaka                   + sizeof(s->counts.tx32p) + sizeof(s->counts.tx16p) + sizeof(s->counts.tx8p);
1988*437bfbebSnyanmisaka     } else {
1989*437bfbebSnyanmisaka         com_len = sizeof(s->counts) - sizeof(s->counts.coef) - sizeof(s->counts.eob);
1990*437bfbebSnyanmisaka     }
1991*437bfbebSnyanmisaka     eob_coef = (RK_U32 *)(buf + com_len);
1992*437bfbebSnyanmisaka     memcpy(&s->counts, buf, com_len);
1993*437bfbebSnyanmisaka     ref_type = (!(s->frame_type == 0 || s->intra_only)) ? 2 : 1;
1994*437bfbebSnyanmisaka     if (ref_type == 1) {
1995*437bfbebSnyanmisaka         memset(s->counts.eob, 0, sizeof(s->counts.eob));
1996*437bfbebSnyanmisaka         memset(s->counts.coef, 0, sizeof(s->counts.coef));
1997*437bfbebSnyanmisaka     }
1998*437bfbebSnyanmisaka     for (i = 0; i < ref_type; i++) {
1999*437bfbebSnyanmisaka         for (j = 0; j < 4; j++) {
2000*437bfbebSnyanmisaka             for (m = 0; m < 2; m++) {
2001*437bfbebSnyanmisaka                 for (n = 0; n < 6; n++) {
2002*437bfbebSnyanmisaka                     for (k = 0; k < 6; k++) {
2003*437bfbebSnyanmisaka                         s->counts.eob[j][m][i][n][k][0] = eob_coef[1];
2004*437bfbebSnyanmisaka                         // ff need do  branch_ct[UNCONSTRAINED_NODES][2] = { neob, eob_counts[i][j][k][l] - neob },
2005*437bfbebSnyanmisaka                         s->counts.eob[j][m][i][n][k][1] = eob_coef[0] - eob_coef[1];
2006*437bfbebSnyanmisaka                         s->counts.coef[j][m][i][n][k][0] = eob_coef[2];
2007*437bfbebSnyanmisaka                         s->counts.coef[j][m][i][n][k][1] = eob_coef[3];
2008*437bfbebSnyanmisaka                         s->counts.coef[j][m][i][n][k][2] = eob_coef[4];
2009*437bfbebSnyanmisaka                         eob_coef += 5;
2010*437bfbebSnyanmisaka                     }
2011*437bfbebSnyanmisaka                 }
2012*437bfbebSnyanmisaka             }
2013*437bfbebSnyanmisaka         }
2014*437bfbebSnyanmisaka     }
2015*437bfbebSnyanmisaka }
2016