Coverage Report

Created: 2024-09-06 07:53

/src/libvpx/vp9/common/vp9_quant_common.c
Line
Count
Source (jump to first uncovered line)
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
164
38.6M
int16_t vp9_dc_quant(int qindex, int delta, vpx_bit_depth_t bit_depth) {
165
38.6M
#if CONFIG_VP9_HIGHBITDEPTH
166
38.6M
  switch (bit_depth) {
167
38.6M
    case VPX_BITS_8: return dc_qlookup[clamp(qindex + delta, 0, MAXQ)];
168
0
    case VPX_BITS_10: return dc_qlookup_10[clamp(qindex + delta, 0, MAXQ)];
169
0
    case VPX_BITS_12: return dc_qlookup_12[clamp(qindex + delta, 0, MAXQ)];
170
0
    default:
171
0
      assert(0 && "bit_depth should be VPX_BITS_8, VPX_BITS_10 or VPX_BITS_12");
172
0
      return -1;
173
38.6M
  }
174
#else
175
  (void)bit_depth;
176
  return dc_qlookup[clamp(qindex + delta, 0, MAXQ)];
177
#endif
178
38.6M
}
179
180
18.0M
int16_t vp9_ac_quant(int qindex, int delta, vpx_bit_depth_t bit_depth) {
181
18.0M
#if CONFIG_VP9_HIGHBITDEPTH
182
18.0M
  switch (bit_depth) {
183
17.7M
    case VPX_BITS_8: return ac_qlookup[clamp(qindex + delta, 0, MAXQ)];
184
125k
    case VPX_BITS_10: return ac_qlookup_10[clamp(qindex + delta, 0, MAXQ)];
185
126k
    case VPX_BITS_12: return ac_qlookup_12[clamp(qindex + delta, 0, MAXQ)];
186
0
    default:
187
0
      assert(0 && "bit_depth should be VPX_BITS_8, VPX_BITS_10 or VPX_BITS_12");
188
0
      return -1;
189
18.0M
  }
190
#else
191
  (void)bit_depth;
192
  return ac_qlookup[clamp(qindex + delta, 0, MAXQ)];
193
#endif
194
18.0M
}
195
196
int vp9_get_qindex(const struct segmentation *seg, int segment_id,
197
9.23M
                   int base_qindex) {
198
9.23M
  if (segfeature_active(seg, segment_id, SEG_LVL_ALT_Q)) {
199
0
    const int data = get_segdata(seg, segment_id, SEG_LVL_ALT_Q);
200
0
    const int seg_qindex =
201
0
        seg->abs_delta == SEGMENT_ABSDATA ? data : base_qindex + data;
202
0
    return clamp(seg_qindex, 0, MAXQ);
203
9.23M
  } else {
204
9.23M
    return base_qindex;
205
9.23M
  }
206
9.23M
}