• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #include "vp9/common/vp9_common.h"
12 #include "vp9/common/vp9_quant_common.h"
13 #include "vp9/common/vp9_seg_common.h"
14 
15 static const int16_t dc_qlookup[QINDEX_RANGE] = {
16   4,       8,    8,    9,   10,   11,   12,   12,
17   13,     14,   15,   16,   17,   18,   19,   19,
18   20,     21,   22,   23,   24,   25,   26,   26,
19   27,     28,   29,   30,   31,   32,   32,   33,
20   34,     35,   36,   37,   38,   38,   39,   40,
21   41,     42,   43,   43,   44,   45,   46,   47,
22   48,     48,   49,   50,   51,   52,   53,   53,
23   54,     55,   56,   57,   57,   58,   59,   60,
24   61,     62,   62,   63,   64,   65,   66,   66,
25   67,     68,   69,   70,   70,   71,   72,   73,
26   74,     74,   75,   76,   77,   78,   78,   79,
27   80,     81,   81,   82,   83,   84,   85,   85,
28   87,     88,   90,   92,   93,   95,   96,   98,
29   99,    101,  102,  104,  105,  107,  108,  110,
30   111,   113,  114,  116,  117,  118,  120,  121,
31   123,   125,  127,  129,  131,  134,  136,  138,
32   140,   142,  144,  146,  148,  150,  152,  154,
33   156,   158,  161,  164,  166,  169,  172,  174,
34   177,   180,  182,  185,  187,  190,  192,  195,
35   199,   202,  205,  208,  211,  214,  217,  220,
36   223,   226,  230,  233,  237,  240,  243,  247,
37   250,   253,  257,  261,  265,  269,  272,  276,
38   280,   284,  288,  292,  296,  300,  304,  309,
39   313,   317,  322,  326,  330,  335,  340,  344,
40   349,   354,  359,  364,  369,  374,  379,  384,
41   389,   395,  400,  406,  411,  417,  423,  429,
42   435,   441,  447,  454,  461,  467,  475,  482,
43   489,   497,  505,  513,  522,  530,  539,  549,
44   559,   569,  579,  590,  602,  614,  626,  640,
45   654,   668,  684,  700,  717,  736,  755,  775,
46   796,   819,  843,  869,  896,  925,  955,  988,
47   1022, 1058, 1098, 1139, 1184, 1232, 1282, 1336,
48 };
49 
50 #if CONFIG_VP9_HIGHBITDEPTH
51 static const int16_t dc_qlookup_10[QINDEX_RANGE] = {
52   4,     9,    10,    13,    15,    17,    20,    22,
53   25,    28,    31,    34,    37,    40,    43,    47,
54   50,    53,    57,    60,    64,    68,    71,    75,
55   78,    82,    86,    90,    93,    97,   101,   105,
56   109,   113,   116,   120,   124,   128,   132,   136,
57   140,   143,   147,   151,   155,   159,   163,   166,
58   170,   174,   178,   182,   185,   189,   193,   197,
59   200,   204,   208,   212,   215,   219,   223,   226,
60   230,   233,   237,   241,   244,   248,   251,   255,
61   259,   262,   266,   269,   273,   276,   280,   283,
62   287,   290,   293,   297,   300,   304,   307,   310,
63   314,   317,   321,   324,   327,   331,   334,   337,
64   343,   350,   356,   362,   369,   375,   381,   387,
65   394,   400,   406,   412,   418,   424,   430,   436,
66   442,   448,   454,   460,   466,   472,   478,   484,
67   490,   499,   507,   516,   525,   533,   542,   550,
68   559,   567,   576,   584,   592,   601,   609,   617,
69   625,   634,   644,   655,   666,   676,   687,   698,
70   708,   718,   729,   739,   749,   759,   770,   782,
71   795,   807,   819,   831,   844,   856,   868,   880,
72   891,   906,   920,   933,   947,   961,   975,   988,
73   1001,  1015,  1030,  1045,  1061,  1076,  1090,  1105,
74   1120,  1137,  1153,  1170,  1186,  1202,  1218,  1236,
75   1253,  1271,  1288,  1306,  1323,  1342,  1361,  1379,
76   1398,  1416,  1436,  1456,  1476,  1496,  1516,  1537,
77   1559,  1580,  1601,  1624,  1647,  1670,  1692,  1717,
78   1741,  1766,  1791,  1817,  1844,  1871,  1900,  1929,
79   1958,  1990,  2021,  2054,  2088,  2123,  2159,  2197,
80   2236,  2276,  2319,  2363,  2410,  2458,  2508,  2561,
81   2616,  2675,  2737,  2802,  2871,  2944,  3020,  3102,
82   3188,  3280,  3375,  3478,  3586,  3702,  3823,  3953,
83   4089,  4236,  4394,  4559,  4737,  4929,  5130,  5347,
84 };
85 
86 static const int16_t dc_qlookup_12[QINDEX_RANGE] = {
87   4,    12,    18,    25,    33,    41,    50,    60,
88   70,    80,    91,   103,   115,   127,   140,   153,
89   166,   180,   194,   208,   222,   237,   251,   266,
90   281,   296,   312,   327,   343,   358,   374,   390,
91   405,   421,   437,   453,   469,   484,   500,   516,
92   532,   548,   564,   580,   596,   611,   627,   643,
93   659,   674,   690,   706,   721,   737,   752,   768,
94   783,   798,   814,   829,   844,   859,   874,   889,
95   904,   919,   934,   949,   964,   978,   993,  1008,
96   1022,  1037,  1051,  1065,  1080,  1094,  1108,  1122,
97   1136,  1151,  1165,  1179,  1192,  1206,  1220,  1234,
98   1248,  1261,  1275,  1288,  1302,  1315,  1329,  1342,
99   1368,  1393,  1419,  1444,  1469,  1494,  1519,  1544,
100   1569,  1594,  1618,  1643,  1668,  1692,  1717,  1741,
101   1765,  1789,  1814,  1838,  1862,  1885,  1909,  1933,
102   1957,  1992,  2027,  2061,  2096,  2130,  2165,  2199,
103   2233,  2267,  2300,  2334,  2367,  2400,  2434,  2467,
104   2499,  2532,  2575,  2618,  2661,  2704,  2746,  2788,
105   2830,  2872,  2913,  2954,  2995,  3036,  3076,  3127,
106   3177,  3226,  3275,  3324,  3373,  3421,  3469,  3517,
107   3565,  3621,  3677,  3733,  3788,  3843,  3897,  3951,
108   4005,  4058,  4119,  4181,  4241,  4301,  4361,  4420,
109   4479,  4546,  4612,  4677,  4742,  4807,  4871,  4942,
110   5013,  5083,  5153,  5222,  5291,  5367,  5442,  5517,
111   5591,  5665,  5745,  5825,  5905,  5984,  6063,  6149,
112   6234,  6319,  6404,  6495,  6587,  6678,  6769,  6867,
113   6966,  7064,  7163,  7269,  7376,  7483,  7599,  7715,
114   7832,  7958,  8085,  8214,  8352,  8492,  8635,  8788,
115   8945,  9104,  9275,  9450,  9639,  9832, 10031, 10245,
116   10465, 10702, 10946, 11210, 11482, 11776, 12081, 12409,
117   12750, 13118, 13501, 13913, 14343, 14807, 15290, 15812,
118   16356, 16943, 17575, 18237, 18949, 19718, 20521, 21387,
119 };
120 #endif
121 
122 static const int16_t ac_qlookup[QINDEX_RANGE] = {
123   4,       8,    9,   10,   11,   12,   13,   14,
124   15,     16,   17,   18,   19,   20,   21,   22,
125   23,     24,   25,   26,   27,   28,   29,   30,
126   31,     32,   33,   34,   35,   36,   37,   38,
127   39,     40,   41,   42,   43,   44,   45,   46,
128   47,     48,   49,   50,   51,   52,   53,   54,
129   55,     56,   57,   58,   59,   60,   61,   62,
130   63,     64,   65,   66,   67,   68,   69,   70,
131   71,     72,   73,   74,   75,   76,   77,   78,
132   79,     80,   81,   82,   83,   84,   85,   86,
133   87,     88,   89,   90,   91,   92,   93,   94,
134   95,     96,   97,   98,   99,  100,  101,  102,
135   104,   106,  108,  110,  112,  114,  116,  118,
136   120,   122,  124,  126,  128,  130,  132,  134,
137   136,   138,  140,  142,  144,  146,  148,  150,
138   152,   155,  158,  161,  164,  167,  170,  173,
139   176,   179,  182,  185,  188,  191,  194,  197,
140   200,   203,  207,  211,  215,  219,  223,  227,
141   231,   235,  239,  243,  247,  251,  255,  260,
142   265,   270,  275,  280,  285,  290,  295,  300,
143   305,   311,  317,  323,  329,  335,  341,  347,
144   353,   359,  366,  373,  380,  387,  394,  401,
145   408,   416,  424,  432,  440,  448,  456,  465,
146   474,   483,  492,  501,  510,  520,  530,  540,
147   550,   560,  571,  582,  593,  604,  615,  627,
148   639,   651,  663,  676,  689,  702,  715,  729,
149   743,   757,  771,  786,  801,  816,  832,  848,
150   864,   881,  898,  915,  933,  951,  969,  988,
151   1007, 1026, 1046, 1066, 1087, 1108, 1129, 1151,
152   1173, 1196, 1219, 1243, 1267, 1292, 1317, 1343,
153   1369, 1396, 1423, 1451, 1479, 1508, 1537, 1567,
154   1597, 1628, 1660, 1692, 1725, 1759, 1793, 1828,
155 };
156 
157 #if CONFIG_VP9_HIGHBITDEPTH
158 static const int16_t ac_qlookup_10[QINDEX_RANGE] = {
159   4,     9,    11,    13,    16,    18,    21,    24,
160   27,    30,    33,    37,    40,    44,    48,    51,
161   55,    59,    63,    67,    71,    75,    79,    83,
162   88,    92,    96,   100,   105,   109,   114,   118,
163   122,   127,   131,   136,   140,   145,   149,   154,
164   158,   163,   168,   172,   177,   181,   186,   190,
165   195,   199,   204,   208,   213,   217,   222,   226,
166   231,   235,   240,   244,   249,   253,   258,   262,
167   267,   271,   275,   280,   284,   289,   293,   297,
168   302,   306,   311,   315,   319,   324,   328,   332,
169   337,   341,   345,   349,   354,   358,   362,   367,
170   371,   375,   379,   384,   388,   392,   396,   401,
171   409,   417,   425,   433,   441,   449,   458,   466,
172   474,   482,   490,   498,   506,   514,   523,   531,
173   539,   547,   555,   563,   571,   579,   588,   596,
174   604,   616,   628,   640,   652,   664,   676,   688,
175   700,   713,   725,   737,   749,   761,   773,   785,
176   797,   809,   825,   841,   857,   873,   889,   905,
177   922,   938,   954,   970,   986,  1002,  1018,  1038,
178   1058,  1078,  1098,  1118,  1138,  1158,  1178,  1198,
179   1218,  1242,  1266,  1290,  1314,  1338,  1362,  1386,
180   1411,  1435,  1463,  1491,  1519,  1547,  1575,  1603,
181   1631,  1663,  1695,  1727,  1759,  1791,  1823,  1859,
182   1895,  1931,  1967,  2003,  2039,  2079,  2119,  2159,
183   2199,  2239,  2283,  2327,  2371,  2415,  2459,  2507,
184   2555,  2603,  2651,  2703,  2755,  2807,  2859,  2915,
185   2971,  3027,  3083,  3143,  3203,  3263,  3327,  3391,
186   3455,  3523,  3591,  3659,  3731,  3803,  3876,  3952,
187   4028,  4104,  4184,  4264,  4348,  4432,  4516,  4604,
188   4692,  4784,  4876,  4972,  5068,  5168,  5268,  5372,
189   5476,  5584,  5692,  5804,  5916,  6032,  6148,  6268,
190   6388,  6512,  6640,  6768,  6900,  7036,  7172,  7312,
191 };
192 
193 static const int16_t ac_qlookup_12[QINDEX_RANGE] = {
194   4,    13,    19,    27,    35,    44,    54,    64,
195   75,    87,    99,   112,   126,   139,   154,   168,
196   183,   199,   214,   230,   247,   263,   280,   297,
197   314,   331,   349,   366,   384,   402,   420,   438,
198   456,   475,   493,   511,   530,   548,   567,   586,
199   604,   623,   642,   660,   679,   698,   716,   735,
200   753,   772,   791,   809,   828,   846,   865,   884,
201   902,   920,   939,   957,   976,   994,  1012,  1030,
202   1049,  1067,  1085,  1103,  1121,  1139,  1157,  1175,
203   1193,  1211,  1229,  1246,  1264,  1282,  1299,  1317,
204   1335,  1352,  1370,  1387,  1405,  1422,  1440,  1457,
205   1474,  1491,  1509,  1526,  1543,  1560,  1577,  1595,
206   1627,  1660,  1693,  1725,  1758,  1791,  1824,  1856,
207   1889,  1922,  1954,  1987,  2020,  2052,  2085,  2118,
208   2150,  2183,  2216,  2248,  2281,  2313,  2346,  2378,
209   2411,  2459,  2508,  2556,  2605,  2653,  2701,  2750,
210   2798,  2847,  2895,  2943,  2992,  3040,  3088,  3137,
211   3185,  3234,  3298,  3362,  3426,  3491,  3555,  3619,
212   3684,  3748,  3812,  3876,  3941,  4005,  4069,  4149,
213   4230,  4310,  4390,  4470,  4550,  4631,  4711,  4791,
214   4871,  4967,  5064,  5160,  5256,  5352,  5448,  5544,
215   5641,  5737,  5849,  5961,  6073,  6185,  6297,  6410,
216   6522,  6650,  6778,  6906,  7034,  7162,  7290,  7435,
217   7579,  7723,  7867,  8011,  8155,  8315,  8475,  8635,
218   8795,  8956,  9132,  9308,  9484,  9660,  9836, 10028,
219   10220, 10412, 10604, 10812, 11020, 11228, 11437, 11661,
220   11885, 12109, 12333, 12573, 12813, 13053, 13309, 13565,
221   13821, 14093, 14365, 14637, 14925, 15213, 15502, 15806,
222   16110, 16414, 16734, 17054, 17390, 17726, 18062, 18414,
223   18766, 19134, 19502, 19886, 20270, 20670, 21070, 21486,
224   21902, 22334, 22766, 23214, 23662, 24126, 24590, 25070,
225   25551, 26047, 26559, 27071, 27599, 28143, 28687, 29247,
226 };
227 #endif
228 
vp9_dc_quant(int qindex,int delta,vpx_bit_depth_t bit_depth)229 int16_t vp9_dc_quant(int qindex, int delta, vpx_bit_depth_t bit_depth) {
230 #if CONFIG_VP9_HIGHBITDEPTH
231   switch (bit_depth) {
232     case VPX_BITS_8:
233       return dc_qlookup[clamp(qindex + delta, 0, MAXQ)];
234     case VPX_BITS_10:
235       return dc_qlookup_10[clamp(qindex + delta, 0, MAXQ)];
236     case VPX_BITS_12:
237       return dc_qlookup_12[clamp(qindex + delta, 0, MAXQ)];
238     default:
239       assert(0 && "bit_depth should be VPX_BITS_8, VPX_BITS_10 or VPX_BITS_12");
240       return -1;
241   }
242 #else
243   (void) bit_depth;
244   return dc_qlookup[clamp(qindex + delta, 0, MAXQ)];
245 #endif
246 }
247 
vp9_ac_quant(int qindex,int delta,vpx_bit_depth_t bit_depth)248 int16_t vp9_ac_quant(int qindex, int delta, vpx_bit_depth_t bit_depth) {
249 #if CONFIG_VP9_HIGHBITDEPTH
250   switch (bit_depth) {
251     case VPX_BITS_8:
252       return ac_qlookup[clamp(qindex + delta, 0, MAXQ)];
253     case VPX_BITS_10:
254       return ac_qlookup_10[clamp(qindex + delta, 0, MAXQ)];
255     case VPX_BITS_12:
256       return ac_qlookup_12[clamp(qindex + delta, 0, MAXQ)];
257     default:
258       assert(0 && "bit_depth should be VPX_BITS_8, VPX_BITS_10 or VPX_BITS_12");
259       return -1;
260   }
261 #else
262   (void) bit_depth;
263   return ac_qlookup[clamp(qindex + delta, 0, MAXQ)];
264 #endif
265 }
266 
vp9_get_qindex(const struct segmentation * seg,int segment_id,int base_qindex)267 int vp9_get_qindex(const struct segmentation *seg, int segment_id,
268                    int base_qindex) {
269   if (segfeature_active(seg, segment_id, SEG_LVL_ALT_Q)) {
270     const int data = get_segdata(seg, segment_id, SEG_LVL_ALT_Q);
271     const int seg_qindex = seg->abs_delta == SEGMENT_ABSDATA ?
272         data : base_qindex + data;
273     return clamp(seg_qindex, 0, MAXQ);
274   } else {
275     return base_qindex;
276   }
277 }
278 
279