tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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