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