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