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