quantize.c (21686B)
1 /* 2 * Copyright (c) 2016, Alliance for Open Media. All rights reserved. 3 * 4 * This source code is subject to the terms of the BSD 2 Clause License and 5 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License 6 * was not distributed with this source code in the LICENSE file, you can 7 * obtain it at www.aomedia.org/license/software. If the Alliance for Open 8 * Media Patent License 1.0 was not distributed with this source code in the 9 * PATENTS file, you can obtain it at www.aomedia.org/license/patent. 10 */ 11 12 #include "aom_dsp/quantize.h" 13 #include "aom_mem/aom_mem.h" 14 #include "config/aom_dsp_rtcd.h" 15 16 #if !CONFIG_REALTIME_ONLY 17 void aom_quantize_b_adaptive_helper_c( 18 const tran_low_t *coeff_ptr, intptr_t n_coeffs, const int16_t *zbin_ptr, 19 const int16_t *round_ptr, const int16_t *quant_ptr, 20 const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, 21 tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, 22 const int16_t *scan, const int16_t *iscan, const qm_val_t *qm_ptr, 23 const qm_val_t *iqm_ptr, const int log_scale) { 24 const int zbins[2] = { ROUND_POWER_OF_TWO(zbin_ptr[0], log_scale), 25 ROUND_POWER_OF_TWO(zbin_ptr[1], log_scale) }; 26 const int nzbins[2] = { zbins[0] * -1, zbins[1] * -1 }; 27 int i, non_zero_count = (int)n_coeffs, eob = -1; 28 (void)iscan; 29 30 memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr)); 31 memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr)); 32 33 int prescan_add[2]; 34 for (i = 0; i < 2; ++i) 35 prescan_add[i] = ROUND_POWER_OF_TWO(dequant_ptr[i] * EOB_FACTOR, 7); 36 37 // Pre-scan pass 38 for (i = (int)n_coeffs - 1; i >= 0; i--) { 39 const int rc = scan[i]; 40 const qm_val_t wt = qm_ptr != NULL ? qm_ptr[rc] : (1 << AOM_QM_BITS); 41 const int coeff = coeff_ptr[rc] * wt; 42 const int prescan_add_val = prescan_add[rc != 0]; 43 if (coeff < (zbins[rc != 0] * (1 << AOM_QM_BITS) + prescan_add_val) && 44 coeff > (nzbins[rc != 0] * (1 << AOM_QM_BITS) - prescan_add_val)) 45 non_zero_count--; 46 else 47 break; 48 } 49 50 // Quantization pass: All coefficients with index >= zero_flag are 51 // skippable. Note: zero_flag can be zero. 52 #if SKIP_EOB_FACTOR_ADJUST 53 int first = -1; 54 #endif // SKIP_EOB_FACTOR_ADJUST 55 for (i = 0; i < non_zero_count; i++) { 56 const int rc = scan[i]; 57 const int coeff = coeff_ptr[rc]; 58 const int coeff_sign = AOMSIGN(coeff); 59 const int abs_coeff = (coeff ^ coeff_sign) - coeff_sign; 60 int tmp32; 61 62 const qm_val_t wt = qm_ptr != NULL ? qm_ptr[rc] : (1 << AOM_QM_BITS); 63 if (abs_coeff * wt >= (zbins[rc != 0] << AOM_QM_BITS)) { 64 int64_t tmp = 65 clamp(abs_coeff + ROUND_POWER_OF_TWO(round_ptr[rc != 0], log_scale), 66 INT16_MIN, INT16_MAX); 67 tmp *= wt; 68 tmp32 = (int)(((((tmp * quant_ptr[rc != 0]) >> 16) + tmp) * 69 quant_shift_ptr[rc != 0]) >> 70 (16 - log_scale + AOM_QM_BITS)); // quantization 71 qcoeff_ptr[rc] = (tmp32 ^ coeff_sign) - coeff_sign; 72 const int iwt = iqm_ptr != NULL ? iqm_ptr[rc] : (1 << AOM_QM_BITS); 73 const int dequant = 74 (dequant_ptr[rc != 0] * iwt + (1 << (AOM_QM_BITS - 1))) >> 75 AOM_QM_BITS; 76 const tran_low_t abs_dqcoeff = (tmp32 * dequant) >> log_scale; 77 dqcoeff_ptr[rc] = (tran_low_t)((abs_dqcoeff ^ coeff_sign) - coeff_sign); 78 79 if (tmp32) { 80 eob = i; 81 #if SKIP_EOB_FACTOR_ADJUST 82 if (first == -1) first = i; 83 #endif // SKIP_EOB_FACTOR_ADJUST 84 } 85 } 86 } 87 #if SKIP_EOB_FACTOR_ADJUST 88 if (eob >= 0 && first == eob) { 89 const int rc = scan[eob]; 90 if (qcoeff_ptr[rc] == 1 || qcoeff_ptr[rc] == -1) { 91 const qm_val_t wt = qm_ptr != NULL ? qm_ptr[rc] : (1 << AOM_QM_BITS); 92 const int coeff = coeff_ptr[rc] * wt; 93 const int factor = EOB_FACTOR + SKIP_EOB_FACTOR_ADJUST; 94 const int prescan_add_val = 95 ROUND_POWER_OF_TWO(dequant_ptr[rc != 0] * factor, 7); 96 if (coeff < (zbins[rc != 0] * (1 << AOM_QM_BITS) + prescan_add_val) && 97 coeff > (nzbins[rc != 0] * (1 << AOM_QM_BITS) - prescan_add_val)) { 98 qcoeff_ptr[rc] = 0; 99 dqcoeff_ptr[rc] = 0; 100 eob = -1; 101 } 102 } 103 } 104 #endif // SKIP_EOB_FACTOR_ADJUST 105 *eob_ptr = eob + 1; 106 } 107 #endif // !CONFIG_REALTIME_ONLY 108 109 void aom_quantize_b_helper_c(const tran_low_t *coeff_ptr, intptr_t n_coeffs, 110 const int16_t *zbin_ptr, const int16_t *round_ptr, 111 const int16_t *quant_ptr, 112 const int16_t *quant_shift_ptr, 113 tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, 114 const int16_t *dequant_ptr, uint16_t *eob_ptr, 115 const int16_t *scan, const int16_t *iscan, 116 const qm_val_t *qm_ptr, const qm_val_t *iqm_ptr, 117 const int log_scale) { 118 const int zbins[2] = { ROUND_POWER_OF_TWO(zbin_ptr[0], log_scale), 119 ROUND_POWER_OF_TWO(zbin_ptr[1], log_scale) }; 120 const int nzbins[2] = { zbins[0] * -1, zbins[1] * -1 }; 121 int i, non_zero_count = (int)n_coeffs, eob = -1; 122 (void)iscan; 123 124 memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr)); 125 memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr)); 126 127 // Pre-scan pass 128 for (i = (int)n_coeffs - 1; i >= 0; i--) { 129 const int rc = scan[i]; 130 const qm_val_t wt = qm_ptr != NULL ? qm_ptr[rc] : (1 << AOM_QM_BITS); 131 const int coeff = coeff_ptr[rc] * wt; 132 133 if (coeff < (zbins[rc != 0] * (1 << AOM_QM_BITS)) && 134 coeff > (nzbins[rc != 0] * (1 << AOM_QM_BITS))) 135 non_zero_count--; 136 else 137 break; 138 } 139 140 // Quantization pass: All coefficients with index >= zero_flag are 141 // skippable. Note: zero_flag can be zero. 142 for (i = 0; i < non_zero_count; i++) { 143 const int rc = scan[i]; 144 const int coeff = coeff_ptr[rc]; 145 const int coeff_sign = AOMSIGN(coeff); 146 const int abs_coeff = (coeff ^ coeff_sign) - coeff_sign; 147 int tmp32; 148 149 const qm_val_t wt = qm_ptr != NULL ? qm_ptr[rc] : (1 << AOM_QM_BITS); 150 if (abs_coeff * wt >= (zbins[rc != 0] << AOM_QM_BITS)) { 151 int64_t tmp = 152 clamp(abs_coeff + ROUND_POWER_OF_TWO(round_ptr[rc != 0], log_scale), 153 INT16_MIN, INT16_MAX); 154 tmp *= wt; 155 tmp32 = (int)(((((tmp * quant_ptr[rc != 0]) >> 16) + tmp) * 156 quant_shift_ptr[rc != 0]) >> 157 (16 - log_scale + AOM_QM_BITS)); // quantization 158 qcoeff_ptr[rc] = (tmp32 ^ coeff_sign) - coeff_sign; 159 const int iwt = iqm_ptr != NULL ? iqm_ptr[rc] : (1 << AOM_QM_BITS); 160 const int dequant = 161 (dequant_ptr[rc != 0] * iwt + (1 << (AOM_QM_BITS - 1))) >> 162 AOM_QM_BITS; 163 const tran_low_t abs_dqcoeff = (tmp32 * dequant) >> log_scale; 164 dqcoeff_ptr[rc] = (tran_low_t)((abs_dqcoeff ^ coeff_sign) - coeff_sign); 165 166 if (tmp32) eob = i; 167 } 168 } 169 *eob_ptr = eob + 1; 170 } 171 172 #if CONFIG_AV1_HIGHBITDEPTH 173 #if !CONFIG_REALTIME_ONLY 174 void aom_highbd_quantize_b_adaptive_helper_c( 175 const tran_low_t *coeff_ptr, intptr_t n_coeffs, const int16_t *zbin_ptr, 176 const int16_t *round_ptr, const int16_t *quant_ptr, 177 const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, 178 tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, 179 const int16_t *scan, const int16_t *iscan, const qm_val_t *qm_ptr, 180 const qm_val_t *iqm_ptr, const int log_scale) { 181 const int zbins[2] = { ROUND_POWER_OF_TWO(zbin_ptr[0], log_scale), 182 ROUND_POWER_OF_TWO(zbin_ptr[1], log_scale) }; 183 const int nzbins[2] = { zbins[0] * -1, zbins[1] * -1 }; 184 (void)iscan; 185 int i, non_zero_count = (int)n_coeffs, eob = -1; 186 187 memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr)); 188 memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr)); 189 190 int prescan_add[2]; 191 for (i = 0; i < 2; ++i) 192 prescan_add[i] = ROUND_POWER_OF_TWO(dequant_ptr[i] * EOB_FACTOR, 7); 193 194 // Pre-scan pass 195 for (i = (int)n_coeffs - 1; i >= 0; i--) { 196 const int rc = scan[i]; 197 const qm_val_t wt = qm_ptr != NULL ? qm_ptr[rc] : (1 << AOM_QM_BITS); 198 const int coeff = coeff_ptr[rc] * wt; 199 const int prescan_add_val = prescan_add[rc != 0]; 200 if (coeff < (zbins[rc != 0] * (1 << AOM_QM_BITS) + prescan_add_val) && 201 coeff > (nzbins[rc != 0] * (1 << AOM_QM_BITS) - prescan_add_val)) 202 non_zero_count--; 203 else 204 break; 205 } 206 207 // Quantization pass: All coefficients with index >= zero_flag are 208 // skippable. Note: zero_flag can be zero. 209 #if SKIP_EOB_FACTOR_ADJUST 210 int first = -1; 211 #endif // SKIP_EOB_FACTOR_ADJUST 212 for (i = 0; i < non_zero_count; i++) { 213 const int rc = scan[i]; 214 const int coeff = coeff_ptr[rc]; 215 const int coeff_sign = AOMSIGN(coeff); 216 const qm_val_t wt = qm_ptr != NULL ? qm_ptr[rc] : (1 << AOM_QM_BITS); 217 const int abs_coeff = (coeff ^ coeff_sign) - coeff_sign; 218 if (abs_coeff * wt >= (zbins[rc != 0] << AOM_QM_BITS)) { 219 const int64_t tmp1 = 220 abs_coeff + ROUND_POWER_OF_TWO(round_ptr[rc != 0], log_scale); 221 const int64_t tmpw = tmp1 * wt; 222 const int64_t tmp2 = ((tmpw * quant_ptr[rc != 0]) >> 16) + tmpw; 223 const int abs_qcoeff = (int)((tmp2 * quant_shift_ptr[rc != 0]) >> 224 (16 - log_scale + AOM_QM_BITS)); 225 qcoeff_ptr[rc] = (tran_low_t)((abs_qcoeff ^ coeff_sign) - coeff_sign); 226 const qm_val_t iwt = iqm_ptr != NULL ? iqm_ptr[rc] : (1 << AOM_QM_BITS); 227 const int dequant = 228 (dequant_ptr[rc != 0] * iwt + (1 << (AOM_QM_BITS - 1))) >> 229 AOM_QM_BITS; 230 const tran_low_t abs_dqcoeff = (abs_qcoeff * dequant) >> log_scale; 231 dqcoeff_ptr[rc] = (tran_low_t)((abs_dqcoeff ^ coeff_sign) - coeff_sign); 232 if (abs_qcoeff) { 233 eob = i; 234 #if SKIP_EOB_FACTOR_ADJUST 235 if (first == -1) first = eob; 236 #endif // SKIP_EOB_FACTOR_ADJUST 237 } 238 } 239 } 240 #if SKIP_EOB_FACTOR_ADJUST 241 if (eob >= 0 && first == eob) { 242 const int rc = scan[eob]; 243 if (qcoeff_ptr[rc] == 1 || qcoeff_ptr[rc] == -1) { 244 const qm_val_t wt = qm_ptr != NULL ? qm_ptr[rc] : (1 << AOM_QM_BITS); 245 const int coeff = coeff_ptr[rc] * wt; 246 const int factor = EOB_FACTOR + SKIP_EOB_FACTOR_ADJUST; 247 const int prescan_add_val = 248 ROUND_POWER_OF_TWO(dequant_ptr[rc != 0] * factor, 7); 249 if (coeff < (zbins[rc != 0] * (1 << AOM_QM_BITS) + prescan_add_val) && 250 coeff > (nzbins[rc != 0] * (1 << AOM_QM_BITS) - prescan_add_val)) { 251 qcoeff_ptr[rc] = 0; 252 dqcoeff_ptr[rc] = 0; 253 eob = -1; 254 } 255 } 256 } 257 #endif // SKIP_EOB_FACTOR_ADJUST 258 *eob_ptr = eob + 1; 259 } 260 #endif // !CONFIG_REALTIME_ONLY 261 262 void aom_highbd_quantize_b_helper_c( 263 const tran_low_t *coeff_ptr, intptr_t n_coeffs, const int16_t *zbin_ptr, 264 const int16_t *round_ptr, const int16_t *quant_ptr, 265 const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, 266 tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, 267 const int16_t *scan, const int16_t *iscan, const qm_val_t *qm_ptr, 268 const qm_val_t *iqm_ptr, const int log_scale) { 269 int i, eob = -1; 270 const int zbins[2] = { ROUND_POWER_OF_TWO(zbin_ptr[0], log_scale), 271 ROUND_POWER_OF_TWO(zbin_ptr[1], log_scale) }; 272 const int nzbins[2] = { zbins[0] * -1, zbins[1] * -1 }; 273 int dequant; 274 int idx_arr[4096]; 275 (void)iscan; 276 int idx = 0; 277 278 memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr)); 279 memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr)); 280 281 // Pre-scan pass 282 for (i = 0; i < n_coeffs; i++) { 283 const int rc = scan[i]; 284 const qm_val_t wt = qm_ptr != NULL ? qm_ptr[rc] : (1 << AOM_QM_BITS); 285 const int coeff = coeff_ptr[rc] * wt; 286 287 // If the coefficient is out of the base ZBIN range, keep it for 288 // quantization. 289 if (coeff >= (zbins[rc != 0] * (1 << AOM_QM_BITS)) || 290 coeff <= (nzbins[rc != 0] * (1 << AOM_QM_BITS))) 291 idx_arr[idx++] = i; 292 } 293 294 // Quantization pass: only process the coefficients selected in 295 // pre-scan pass. Note: idx can be zero. 296 for (i = 0; i < idx; i++) { 297 const int rc = scan[idx_arr[i]]; 298 const int coeff = coeff_ptr[rc]; 299 const int coeff_sign = AOMSIGN(coeff); 300 const qm_val_t wt = qm_ptr != NULL ? qm_ptr[rc] : (1 << AOM_QM_BITS); 301 const qm_val_t iwt = iqm_ptr != NULL ? iqm_ptr[rc] : (1 << AOM_QM_BITS); 302 const int abs_coeff = (coeff ^ coeff_sign) - coeff_sign; 303 const int64_t tmp1 = 304 abs_coeff + ROUND_POWER_OF_TWO(round_ptr[rc != 0], log_scale); 305 const int64_t tmpw = tmp1 * wt; 306 const int64_t tmp2 = ((tmpw * quant_ptr[rc != 0]) >> 16) + tmpw; 307 const int abs_qcoeff = (int)((tmp2 * quant_shift_ptr[rc != 0]) >> 308 (16 - log_scale + AOM_QM_BITS)); 309 qcoeff_ptr[rc] = (tran_low_t)((abs_qcoeff ^ coeff_sign) - coeff_sign); 310 dequant = 311 (dequant_ptr[rc != 0] * iwt + (1 << (AOM_QM_BITS - 1))) >> AOM_QM_BITS; 312 const tran_low_t abs_dqcoeff = (abs_qcoeff * dequant) >> log_scale; 313 dqcoeff_ptr[rc] = (tran_low_t)((abs_dqcoeff ^ coeff_sign) - coeff_sign); 314 if (abs_qcoeff) eob = idx_arr[i]; 315 } 316 *eob_ptr = eob + 1; 317 } 318 #endif // CONFIG_AV1_HIGHBITDEPTH 319 320 #if !CONFIG_REALTIME_ONLY 321 /* These functions should only be called when quantisation matrices 322 are not used. */ 323 void aom_quantize_b_adaptive_c(const tran_low_t *coeff_ptr, intptr_t n_coeffs, 324 const int16_t *zbin_ptr, 325 const int16_t *round_ptr, 326 const int16_t *quant_ptr, 327 const int16_t *quant_shift_ptr, 328 tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, 329 const int16_t *dequant_ptr, uint16_t *eob_ptr, 330 const int16_t *scan, const int16_t *iscan) { 331 aom_quantize_b_adaptive_helper_c(coeff_ptr, n_coeffs, zbin_ptr, round_ptr, 332 quant_ptr, quant_shift_ptr, qcoeff_ptr, 333 dqcoeff_ptr, dequant_ptr, eob_ptr, scan, 334 iscan, NULL, NULL, 0); 335 } 336 337 void aom_quantize_b_32x32_adaptive_c( 338 const tran_low_t *coeff_ptr, intptr_t n_coeffs, const int16_t *zbin_ptr, 339 const int16_t *round_ptr, const int16_t *quant_ptr, 340 const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, 341 tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, 342 const int16_t *scan, const int16_t *iscan) { 343 aom_quantize_b_adaptive_helper_c(coeff_ptr, n_coeffs, zbin_ptr, round_ptr, 344 quant_ptr, quant_shift_ptr, qcoeff_ptr, 345 dqcoeff_ptr, dequant_ptr, eob_ptr, scan, 346 iscan, NULL, NULL, 1); 347 } 348 349 void aom_quantize_b_64x64_adaptive_c( 350 const tran_low_t *coeff_ptr, intptr_t n_coeffs, const int16_t *zbin_ptr, 351 const int16_t *round_ptr, const int16_t *quant_ptr, 352 const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, 353 tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, 354 const int16_t *scan, const int16_t *iscan) { 355 aom_quantize_b_adaptive_helper_c(coeff_ptr, n_coeffs, zbin_ptr, round_ptr, 356 quant_ptr, quant_shift_ptr, qcoeff_ptr, 357 dqcoeff_ptr, dequant_ptr, eob_ptr, scan, 358 iscan, NULL, NULL, 2); 359 } 360 361 #if CONFIG_AV1_HIGHBITDEPTH 362 void aom_highbd_quantize_b_adaptive_c( 363 const tran_low_t *coeff_ptr, intptr_t n_coeffs, const int16_t *zbin_ptr, 364 const int16_t *round_ptr, const int16_t *quant_ptr, 365 const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, 366 tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, 367 const int16_t *scan, const int16_t *iscan) { 368 aom_highbd_quantize_b_adaptive_helper_c(coeff_ptr, n_coeffs, zbin_ptr, 369 round_ptr, quant_ptr, quant_shift_ptr, 370 qcoeff_ptr, dqcoeff_ptr, dequant_ptr, 371 eob_ptr, scan, iscan, NULL, NULL, 0); 372 } 373 374 void aom_highbd_quantize_b_32x32_adaptive_c( 375 const tran_low_t *coeff_ptr, intptr_t n_coeffs, const int16_t *zbin_ptr, 376 const int16_t *round_ptr, const int16_t *quant_ptr, 377 const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, 378 tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, 379 const int16_t *scan, const int16_t *iscan) { 380 aom_highbd_quantize_b_adaptive_helper_c(coeff_ptr, n_coeffs, zbin_ptr, 381 round_ptr, quant_ptr, quant_shift_ptr, 382 qcoeff_ptr, dqcoeff_ptr, dequant_ptr, 383 eob_ptr, scan, iscan, NULL, NULL, 1); 384 } 385 386 void aom_highbd_quantize_b_64x64_adaptive_c( 387 const tran_low_t *coeff_ptr, intptr_t n_coeffs, const int16_t *zbin_ptr, 388 const int16_t *round_ptr, const int16_t *quant_ptr, 389 const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, 390 tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, 391 const int16_t *scan, const int16_t *iscan) { 392 aom_highbd_quantize_b_adaptive_helper_c(coeff_ptr, n_coeffs, zbin_ptr, 393 round_ptr, quant_ptr, quant_shift_ptr, 394 qcoeff_ptr, dqcoeff_ptr, dequant_ptr, 395 eob_ptr, scan, iscan, NULL, NULL, 2); 396 } 397 #endif // CONFIG_AV1_HIGHBITDEPTH 398 #endif // !CONFIG_REALTIME_ONLY 399 400 void aom_quantize_b_c(const tran_low_t *coeff_ptr, intptr_t n_coeffs, 401 const int16_t *zbin_ptr, const int16_t *round_ptr, 402 const int16_t *quant_ptr, const int16_t *quant_shift_ptr, 403 tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, 404 const int16_t *dequant_ptr, uint16_t *eob_ptr, 405 const int16_t *scan, const int16_t *iscan) { 406 aom_quantize_b_helper_c(coeff_ptr, n_coeffs, zbin_ptr, round_ptr, quant_ptr, 407 quant_shift_ptr, qcoeff_ptr, dqcoeff_ptr, dequant_ptr, 408 eob_ptr, scan, iscan, NULL, NULL, 0); 409 } 410 411 void aom_quantize_b_32x32_c(const tran_low_t *coeff_ptr, intptr_t n_coeffs, 412 const int16_t *zbin_ptr, const int16_t *round_ptr, 413 const int16_t *quant_ptr, 414 const int16_t *quant_shift_ptr, 415 tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, 416 const int16_t *dequant_ptr, uint16_t *eob_ptr, 417 const int16_t *scan, const int16_t *iscan) { 418 aom_quantize_b_helper_c(coeff_ptr, n_coeffs, zbin_ptr, round_ptr, quant_ptr, 419 quant_shift_ptr, qcoeff_ptr, dqcoeff_ptr, dequant_ptr, 420 eob_ptr, scan, iscan, NULL, NULL, 1); 421 } 422 423 void aom_quantize_b_64x64_c(const tran_low_t *coeff_ptr, intptr_t n_coeffs, 424 const int16_t *zbin_ptr, const int16_t *round_ptr, 425 const int16_t *quant_ptr, 426 const int16_t *quant_shift_ptr, 427 tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, 428 const int16_t *dequant_ptr, uint16_t *eob_ptr, 429 const int16_t *scan, const int16_t *iscan) { 430 aom_quantize_b_helper_c(coeff_ptr, n_coeffs, zbin_ptr, round_ptr, quant_ptr, 431 quant_shift_ptr, qcoeff_ptr, dqcoeff_ptr, dequant_ptr, 432 eob_ptr, scan, iscan, NULL, NULL, 2); 433 } 434 435 #if CONFIG_AV1_HIGHBITDEPTH 436 void aom_highbd_quantize_b_c(const tran_low_t *coeff_ptr, intptr_t n_coeffs, 437 const int16_t *zbin_ptr, const int16_t *round_ptr, 438 const int16_t *quant_ptr, 439 const int16_t *quant_shift_ptr, 440 tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr, 441 const int16_t *dequant_ptr, uint16_t *eob_ptr, 442 const int16_t *scan, const int16_t *iscan) { 443 aom_highbd_quantize_b_helper_c(coeff_ptr, n_coeffs, zbin_ptr, round_ptr, 444 quant_ptr, quant_shift_ptr, qcoeff_ptr, 445 dqcoeff_ptr, dequant_ptr, eob_ptr, scan, iscan, 446 NULL, NULL, 0); 447 } 448 449 void aom_highbd_quantize_b_32x32_c( 450 const tran_low_t *coeff_ptr, intptr_t n_coeffs, const int16_t *zbin_ptr, 451 const int16_t *round_ptr, const int16_t *quant_ptr, 452 const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, 453 tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, 454 const int16_t *scan, const int16_t *iscan) { 455 aom_highbd_quantize_b_helper_c(coeff_ptr, n_coeffs, zbin_ptr, round_ptr, 456 quant_ptr, quant_shift_ptr, qcoeff_ptr, 457 dqcoeff_ptr, dequant_ptr, eob_ptr, scan, iscan, 458 NULL, NULL, 1); 459 } 460 461 void aom_highbd_quantize_b_64x64_c( 462 const tran_low_t *coeff_ptr, intptr_t n_coeffs, const int16_t *zbin_ptr, 463 const int16_t *round_ptr, const int16_t *quant_ptr, 464 const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr, 465 tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr, 466 const int16_t *scan, const int16_t *iscan) { 467 aom_highbd_quantize_b_helper_c(coeff_ptr, n_coeffs, zbin_ptr, round_ptr, 468 quant_ptr, quant_shift_ptr, qcoeff_ptr, 469 dqcoeff_ptr, dequant_ptr, eob_ptr, scan, iscan, 470 NULL, NULL, 2); 471 } 472 #endif // CONFIG_AV1_HIGHBITDEPTH