OSDN Git Service

Code cleanup for vme/mfc initializing on SKL
[android-x86/hardware-intel-common-vaapi.git] / src / vp8_probs.h
1 /*
2  * Copyright © 2014 Intel Corporation
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the
6  * "Software"), to deal in the Software without restriction, including
7  * without limitation the rights to use, copy, modify, merge, publish,
8  * distribute, sub license, and/or sell copies of the Software, and to
9  * permit persons to whom the Software is furnished to do so, subject to
10  * the following conditions:
11  *
12  * The above copyright notice and this permission notice (including the
13  * next paragraph) shall be included in all copies or substantial portions
14  * of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
19  * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
20  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23  *
24  */
25
26 /*
27  * This file defines some vp8 probability tables, and
28  * they are ported from libvpx (https://github.com/mrchapp/libvpx/).
29  * The original copyright and licence statement as below.
30  */
31
32 /*
33  *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
34  *
35  *  Use of this source code is governed by a BSD-style license
36  *  that can be found in the LICENSE file in the root of the source
37  *  tree. An additional intellectual property rights grant can be found
38  *  in the file PATENTS.  All contributing project authors may
39  *  be found in the AUTHORS file in the root of the source tree.
40  */
41
42 #ifndef VP8_PROBS_H
43 #define VP8_PROBS_H
44
45 static const unsigned char vp8_ymode_prob[4] =
46 {
47     112, 86, 140, 37
48 };
49
50 static const unsigned char vp8_kf_ymode_prob[4] =
51 {
52     145, 156, 163, 128
53 };
54
55 static const unsigned char vp8_uv_mode_prob[3] =
56 {
57     162, 101, 204
58 };
59
60 static const unsigned char vp8_kf_uv_mode_prob[3] =
61 {
62     142, 114, 183
63 };
64
65 static const unsigned char vp8_base_skip_false_prob[128] =
66 {
67     255, 255, 255, 255, 255, 255, 255, 255,
68     255, 255, 255, 255, 255, 255, 255, 255,
69     255, 255, 255, 255, 255, 255, 255, 255,
70     255, 255, 255, 255, 255, 255, 255, 255,
71     255, 255, 255, 255, 255, 255, 255, 255,
72     255, 255, 255, 255, 255, 255, 255, 255,
73     255, 255, 255, 255, 255, 255, 255, 255,
74     251, 248, 244, 240, 236, 232, 229, 225,
75     221, 217, 213, 208, 204, 199, 194, 190,
76     187, 183, 179, 175, 172, 168, 164, 160,
77     157, 153, 149, 145, 142, 138, 134, 130,
78     127, 124, 120, 117, 114, 110, 107, 104,
79     101, 98,  95,  92,  89,  86,  83, 80,
80     77,  74,  71,  68,  65,  62,  59, 56,
81     53,  50,  47,  44,  41,  38,  35, 32,
82     30,  28,  26,  24,  22,  20,  18, 16,
83 };
84
85 static const unsigned char vp8_mv_update_probs[2][19] =
86 {
87     {
88         237,
89         246,
90         253, 253, 254, 254, 254, 254, 254,
91         254, 254, 254, 254, 254, 250, 250, 252, 254, 254
92     },
93     {
94         231,
95         243,
96         245, 253, 254, 254, 254, 254, 254,
97         254, 254, 254, 254, 254, 251, 251, 254, 254, 254
98     }
99 };
100
101 static const unsigned char vp8_default_mv_context[2][19] =
102 {
103     {
104         162,                                        /* is short */
105         128,                                        /* sign */
106         225, 146, 172, 147, 214,  39, 156,          /* short tree */
107         128, 129, 132,  75, 145, 178, 206, 239, 254, 254 /* long bits */
108     },
109
110     {
111         164,                            
112         128,
113         204, 170, 119, 235, 140, 230, 228,
114         128, 130, 130,  74, 148, 180, 203, 236, 254, 254
115
116     }
117 };
118
119 static const unsigned char vp8_default_coef_probs[4][8][3][11] =
120 {
121     { /* Block Type ( 0 ) */
122         { /* Coeff Band ( 0 )*/
123             { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
124             { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
125             { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }
126         },
127         { /* Coeff Band ( 1 )*/
128             { 253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128 },
129             { 189, 129, 242, 255, 227, 213, 255, 219, 128, 128, 128 },
130             { 106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128 }
131         },
132         { /* Coeff Band ( 2 )*/
133             {   1,  98, 248, 255, 236, 226, 255, 255, 128, 128, 128 },
134             { 181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128 },
135             {  78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128 }
136         },
137         { /* Coeff Band ( 3 )*/
138             {   1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128 },
139             { 184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128 },
140             {  77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128 }
141         },
142         { /* Coeff Band ( 4 )*/
143             {   1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128 },
144             { 170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128 },
145             {  37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128 }
146         },
147         { /* Coeff Band ( 5 )*/
148             {   1, 204, 254, 255, 245, 255, 128, 128, 128, 128, 128 },
149             { 207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128 },
150             { 102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128 }
151         },
152         { /* Coeff Band ( 6 )*/
153             {   1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128 },
154             { 177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128 },
155             {  80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128 }
156         },
157         { /* Coeff Band ( 7 )*/
158             {   1,   1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
159             { 246,   1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
160             { 255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }
161         }
162     },
163     { /* Block Type ( 1 ) */
164         { /* Coeff Band ( 0 )*/
165             { 198,  35, 237, 223, 193, 187, 162, 160, 145, 155,  62 },
166             { 131,  45, 198, 221, 172, 176, 220, 157, 252, 221,   1 },
167             {  68,  47, 146, 208, 149, 167, 221, 162, 255, 223, 128 }
168         },
169         { /* Coeff Band ( 1 )*/
170             {   1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128 },
171             { 184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128 },
172             {  81,  99, 181, 242, 176, 190, 249, 202, 255, 255, 128 }
173         },
174         { /* Coeff Band ( 2 )*/
175             {   1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128 },
176             {  99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128 },
177             {  23,  91, 163, 242, 170, 187, 247, 210, 255, 255, 128 }
178         },
179         { /* Coeff Band ( 3 )*/
180             {   1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128 },
181             { 109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128 },
182             {  44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128 }
183         },
184         { /* Coeff Band ( 4 )*/
185             {   1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128 },
186             {  94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128 },
187             {  22, 100, 174, 245, 186, 161, 255, 199, 128, 128, 128 }
188         },
189         { /* Coeff Band ( 5 )*/
190             {   1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128 },
191             { 124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128 },
192             {  35,  77, 181, 251, 193, 211, 255, 205, 128, 128, 128 }
193         },
194         { /* Coeff Band ( 6 )*/
195             {   1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128 },
196             { 121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128 },
197             {  45,  99, 188, 251, 195, 217, 255, 224, 128, 128, 128 }
198         },
199         { /* Coeff Band ( 7 )*/
200             {   1,   1, 251, 255, 213, 255, 128, 128, 128, 128, 128 },
201             { 203,   1, 248, 255, 255, 128, 128, 128, 128, 128, 128 },
202             { 137,   1, 177, 255, 224, 255, 128, 128, 128, 128, 128 }
203         }
204     },    
205     { /* Block Type ( 2 ) */
206         { /* Coeff Band ( 0 )*/
207             { 253,   9, 248, 251, 207, 208, 255, 192, 128, 128, 128 },
208             { 175,  13, 224, 243, 193, 185, 249, 198, 255, 255, 128 },
209             {  73,  17, 171, 221, 161, 179, 236, 167, 255, 234, 128 }
210         },
211         { /* Coeff Band ( 1 )*/
212             {   1,  95, 247, 253, 212, 183, 255, 255, 128, 128, 128 },
213             { 239,  90, 244, 250, 211, 209, 255, 255, 128, 128, 128 },
214             { 155,  77, 195, 248, 188, 195, 255, 255, 128, 128, 128 }
215         },
216         { /* Coeff Band ( 2 )*/
217             {   1,  24, 239, 251, 218, 219, 255, 205, 128, 128, 128 },
218             { 201,  51, 219, 255, 196, 186, 128, 128, 128, 128, 128 },
219             {  69,  46, 190, 239, 201, 218, 255, 228, 128, 128, 128 }
220         },
221         { /* Coeff Band ( 3 )*/
222             {   1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128 },
223             { 223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128 },
224             { 141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128 }
225         },
226         { /* Coeff Band ( 4 )*/
227             {   1,  16, 248, 255, 255, 128, 128, 128, 128, 128, 128 },
228             { 190,  36, 230, 255, 236, 255, 128, 128, 128, 128, 128 },
229             { 149,   1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }
230         },
231         { /* Coeff Band ( 5 )*/
232             {   1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
233             { 247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
234             { 240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128 }
235         },
236         { /* Coeff Band ( 6 )*/
237             {   1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128 },
238             { 213,  62, 250, 255, 255, 128, 128, 128, 128, 128, 128 },
239             {  55,  93, 255, 128, 128, 128, 128, 128, 128, 128, 128 }
240         },
241         { /* Coeff Band ( 7 )*/
242             { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
243             { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 },
244             { 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128 }
245         }
246     },
247     { /* Block Type ( 3 ) */
248         { /* Coeff Band ( 0 )*/
249             { 202,  24, 213, 235, 186, 191, 220, 160, 240, 175, 255 },
250             { 126,  38, 182, 232, 169, 184, 228, 174, 255, 187, 128 },
251             {  61,  46, 138, 219, 151, 178, 240, 170, 255, 216, 128 }
252         },
253         { /* Coeff Band ( 1 )*/
254             {   1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128 },
255             { 166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128 },
256             {  39,  77, 162, 232, 172, 180, 245, 178, 255, 255, 128 }
257         },
258         { /* Coeff Band ( 2 )*/
259             {   1,  52, 220, 246, 198, 199, 249, 220, 255, 255, 128 },
260             { 124,  74, 191, 243, 183, 193, 250, 221, 255, 255, 128 },
261             {  24,  71, 130, 219, 154, 170, 243, 182, 255, 255, 128 }
262         },
263         { /* Coeff Band ( 3 )*/
264             {   1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128 },
265             { 149, 150, 226, 252, 216, 205, 255, 171, 128, 128, 128 },
266             {  28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128 }
267         },
268         { /* Coeff Band ( 4 )*/
269             {   1,  81, 230, 252, 204, 203, 255, 192, 128, 128, 128 },
270             { 123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128 },
271             {  20,  95, 153, 243, 164, 173, 255, 203, 128, 128, 128 }
272         },
273         { /* Coeff Band ( 5 )*/
274             {   1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128 },
275             { 168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128 },
276             {  47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128 }
277         },
278         { /* Coeff Band ( 6 )*/
279             {   1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128 },
280             { 141,  84, 213, 252, 201, 202, 255, 219, 128, 128, 128 },
281             {  42,  80, 160, 240, 162, 185, 255, 205, 128, 128, 128 }
282         },
283         { /* Coeff Band ( 7 )*/
284             {   1,   1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
285             { 244,   1, 255, 128, 128, 128, 128, 128, 128, 128, 128 },
286             { 238,   1, 255, 128, 128, 128, 128, 128, 128, 128, 128 }
287         }
288     }
289 };
290
291 /* Work in progress recalibration of baseline rate tables based on
292  * the assumption that bits per mb is inversely proportional to the
293  * quantizer value.
294  * Note: this table value multiplied by 512
295  */
296 static const int vp8_bits_per_mb[2][128] =
297 {
298     /* Intra case 450000/Qintra */
299     {
300         1125000,900000, 750000, 642857, 562500, 500000, 450000, 450000,
301         409090, 375000, 346153, 321428, 300000, 281250, 264705, 264705,
302         250000, 236842, 225000, 225000, 214285, 214285, 204545, 204545,
303         195652, 195652, 187500, 180000, 180000, 173076, 166666, 160714,
304         155172, 150000, 145161, 140625, 136363, 132352, 128571, 125000,
305         121621, 121621, 118421, 115384, 112500, 109756, 107142, 104651,
306         102272, 100000, 97826,  97826,  95744,  93750,  91836,  90000,
307         88235,  86538,  84905,  83333,  81818,  80357,  78947,  77586,
308         76271,  75000,  73770,  72580,  71428,  70312,  69230,  68181,
309         67164,  66176,  65217,  64285,  63380,  62500,  61643,  60810,
310         60000,  59210,  59210,  58441,  57692,  56962,  56250,  55555,
311         54878,  54216,  53571,  52941,  52325,  51724,  51136,  50561,
312         49450,  48387,  47368,  46875,  45918,  45000,  44554,  44117,
313         43269,  42452,  41666,  40909,  40178,  39473,  38793,  38135,
314         36885,  36290,  35714,  35156,  34615,  34090,  33582,  33088,
315         32608,  32142,  31468,  31034,  30405,  29801,  29220,  28662,
316     },
317
318     /* Inter case 285000/Qinter */
319     {
320         712500, 570000, 475000, 407142, 356250, 316666, 285000, 259090,
321         237500, 219230, 203571, 190000, 178125, 167647, 158333, 150000,
322         142500, 135714, 129545, 123913, 118750, 114000, 109615, 105555,
323         101785, 98275,  95000,  91935,  89062,  86363,  83823,  81428,
324         79166,  77027,  75000,  73076,  71250,  69512,  67857,  66279,
325         64772,  63333,  61956,  60638,  59375,  58163,  57000,  55882,
326         54807,  53773,  52777,  51818,  50892,  50000,  49137,  47500,
327         45967,  44531,  43181,  41911,  40714,  39583,  38513,  37500,
328         36538,  35625,  34756,  33928,  33139,  32386,  31666,  30978,
329         30319,  29687,  29081,  28500,  27941,  27403,  26886,  26388,
330         25909,  25446,  25000,  24568,  23949,  23360,  22800,  22265,
331         21755,  21268,  20802,  20357,  19930,  19520,  19127,  18750,
332         18387,  18037,  17701,  17378,  17065,  16764,  16473,  16101,
333         15745,  15405,  15079,  14766,  14467,  14179,  13902,  13636,
334         13380,  13133,  12895,  12666,  12445,  12179,  11924,  11632,
335         11445,  11220,  11003,  10795,  10594,  10401,  10215,  10035,
336     }
337 };
338
339 #endif /* _VP8_PROBS_H_ */