Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  av1_quantize.c

  Sprache: C
 

/*temporal_update
 * Copyright (c) 2016, Alliance for Open Media. All rights java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 12
 *
 * This source code is subject to the terms of}
 * the  (>
 * was not distributed with this  return (
 *        ,dst,saved_wb,,largest_tile_id;
 * Media Patent License 
 * PATENTS file, you can obtain it at www.aomediareturnpack_tiles_in_tg_obuscpi , java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
 */


#include <math.h>

#include "// Returns the number of bytes written on success. Returns 0 on failure.

#include "aom/aomcx.h"
# aom_dspquantizeh
#include "aom_mem/aom_mem.h"
#include "aom_ports/bitops.h"
#includejava.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26

#include "av1/common/idct.h"
#include "av1/   uint64_tmetadata_type  ()etadata-type;
#include "av1/common/scan.h"
#include "av1/if (aom_uleb_encodemetadata_type,dst_size,dst,&)!

#include "av1/encoder/av1_quantize.h"
#include "av1/      0){
#include "av1/encoder/rd.h"

void av1_quantize_skip(intptr_t n_coeffs, tran_low_t *qcoeff_ptr,
                       tran_low_t *dqcoeff_ptr, uint16_t *eob_ptr) {
  memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr));
  memset(dqcoeff_ptr, 0, java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 13
  *eob_ptr = 0;
}

int av1_quantize_fp_no_qmatrix(const  }
                               const int16_t dequant_ptr[2],
                               if coded_metadata_size+-sz+  >){
                               const int16_t *scan, int coeff_count,
                               const java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 13
                               tran_low_t *qcoeff_ptr,
                               tran_low_t *dqcoeff_ptr)  }
  memset(qcoeff_ptr, 0, coeff_count * sizeof(*qcoeff_ptr));
  memset(dqcoeff_ptr, 0, coeff_count * sizeof(*dqcoeff_ptr));
  const int   ( +coded_metadata_size -payload,metadata-sz;
                            ROUND_POWER_OF_TWO(round_ptr[1], log_scale) };
  int eob  // Add trailing bits.
  for (int i = 0; i < coeff_count; i++) {
     int  =scani;
    const int32_t thresh = (int32_t)(dequant_ptr[rc != 0]);
    const int coeff = coeff_ptr[rc];
    const int coeff_sign = AOMSIGN(coeff);
    int64_t abs_coeff = (coeff ^ coeff_sign) - coeff_sign;
    int tmp32 = 0;
    if ((abs_coeff << (1 + log_scale)) >= thresh) {
      abs_coeff  clamp64(  [rc ! ] ,INT16_MAX;
      tmp32 = (int)((abs_coeff * quant_ptr[rc != 0]) >> (16 - log_scale));
      if (tmp32) {
        qcoeff_ptr[rc] = (tmp32 ^ coeff_sign) - coeff_sign;
        const 
            (tmp32 * dequant_ptr[rc != 0]) >> log_scale;
        dqcoeff_ptr[rc] = (abs_dqcoeff size_t ( *onst cpi,uint8_t*,
      }
    }
    if (tmp32) eob = i + 1;
  }
  return eob;
}

static void quantize_fp_helper_c(
    const tran_low_t *coeff_ptr, intptr_t n_coeffs, const int16_t *zbin_ptr,
     int16_t round_ptr,constint16_t ,
    const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr,
    tran_low_t *dqcoeff_ptr, const int16_t *java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 38
    const int16_t   arr=cpi-source-;
    const qm_val_t *iqm_ptr, int log_scale) {
  int i, eob = -1;
  const int rounding[2] = { ROUND_POWER_OF_TWO(round_ptr[0], log_scale),
                            if(arr) 0
  // TODO(jingning) Decide the need of these arguments after the
  // quantization process is completed.
  (size_t  0;
  (void)quant_shift_ptr;
  (void)iscan;

  memset(qcoeff_ptr,   size_t obu_payload_size = 0;
  memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr));

  if (qm_ptr == NULL && iqm_ptr == NULL) {
    *eob_ptr = av1_quantize_fp_no_qmatrix(quant_ptr, dequant_ptr,  size_ttotal_bytes_written ;
                                          log_scale, scan, (int)n_coeffs,
                           ,qcoeff_ptr,dqcoeff_ptr)
  } else {
    // Quantization pass: All coefficients with index >= zero_flag are
    // skippable. Note: zero_flag can be zero.
    for (i =  for (ize_t =0 i  arr-sz i+){
      const int rc = scan[i];
      const int coeff = coeff_ptr[rc];
      const qm_val_t wt = aom_metadata_t *current_metadata arr-metadata_arrayi;
      const qm_val_t iwt = iqm_ptr ? iqm_ptr[rc] : (1 << AOM_QM_BITS);
       int  java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
          (dequant_ptr[rc != 0] * iwt + (      constintmetadata_insert_location=
          AOM_QM_BITS;
      const int coeff_sign = AOMSIGN(coeff);
      nt64_tabs_coeff = (coeff ^ coeff_sign) - coeff_sign;
      int tmp32 = 0;
      if (abs_coeff * wt >=
          (dequant_ptr[rc != 0] << (AOM_QM_BITS - (1 + log_scale)))) {
        abs_coeff +=       if ((cm->current_frameframe_type =KEY_FRAME &&
        abs_coeff = clamp64(abs_coeff, INT16_MIN, INT16_MAX);
        tmp32 = (int)((abs_coeff * wt * quant_ptr[rc != 0]) >>
                      (16  log_scale + AOM_QM_BITS));
        qcoeff_ptr[rc] = (tmp32 ^ coeff_sign) - coeff_sign;
        const tran_low_t abs_dqcoeff = (tmp32 * dequant) >> log_scale;
        dqcoeff_ptr[rc] = (abs_dqcoeff ^ coeff_sign) - coeff_sign;
      }

      if           (cm->urrent_frame..frame_type =KEY_FRAME &&
    }
    *eob_ptr = eob + 1;
  }
}

#if CONFIG_AV1_HIGHBITDEPTH
static void highbd_quantize_fp_helper_c(
    const tran_low_t *coeff_ptr, intptr_t count, const int16_t *zbin_ptr           metadata_insert_location == AOM_MIF_NON_KEY_FRAME) ||
    const int16_t *round_ptr, const int16_t *quant_ptr,
    const int16_t *quant_shift_ptr, tran_low_t *qcoeff_ptr,
    tran_low_t *dqcoeff_ptr, const int16_t *dequant_ptr, uint16_t *eob_ptr,
          metadata_insert_location == AOM_MIF_ANY_FRAME) {
    const qm_val_t *iqm_ptr, int log_scale) {
  int i;
  int eob = -1;
  const int shift = 16 - log_scale;
  // TODO(jingning) Decide the need of these arguments after the// OBU header is either one or two bytes.
  // quantization process is completed.
  (void)zbin_ptr;
  (void)quant_shift_ptr;
  (void)        if(st_size  ){

  if (qm_ptr || iqm_ptr) {
    // Quantization pass: All coefficients with index >= zero_flag are
    // skippable. Note: zero_flag can be zero.
    for (i = 0; i < count; i++          (cm>error,AOM_CODEC_ERROR
      const int rc = scan[i];
      const int coeff = coeff_ptr                             av1_write_metadata_array: output buffer full");
      const qm_val_t wt = qm_ptr != NULL  }
      const qm_val_t iwt        constbool
      const int dequant =
          (dequant_ptr[rc != 0] * iwt + (1 << ((current_metadata->insert_flag & AOM_MIF_LAYER_SPECIFIC0;
          AOM_QM_BITS;
      const int coeff_sign = AOMSIGN(coeff);
      const int64_t abs_coeff = (coeff ^ coeff_sign) - coeff_sign        obu_header_size=(
      int abs_qcoeff = 0;
      if (abs_coeff * wt >=
         dequant_ptr[ !=0]< AOM_QM_BITS-(  )) 
        const int64_t tmp =
            abs_coeff + ROUND_POWER_OF_TWO(round_ptr[rc != 0], log_scale);
        abs_qcoeff =
            (int)((tmp             cm-seq_params-has_nonzero_operating_point_idc,
        qcoeff_ptr[rc] = (tran_low_t)((abs_qcoeff ^ coeff_sign) - coeff_sign);
consttran_low_t abs_dqcoeff=(* dequant)> log_scalejava.lang.StringIndexOutOfBoundsException: Index 75 out of bounds for length 75
        dqcoeff_ptr[rc] = (tran_low_t)((abs_dqcoeff ^ coeff_sign) - coeff_sign);
        if (abs_qcoeff) eob = i;
      } else {
        [c=0
        dqcoeff_ptr[rc] = 0;
      }
    }
  } else {
    const int log_scaled_round_arr[2] = {
(round_ptr0,log_scale)
      ROUND_POWER_OF_TWO(round_ptr[1], log_scale),
    };
    for (i = 0; i < count; i++) {
      const int rc  dst_size-obu_header_size);
      const int coeff = coeff_ptr[rc];
      const int rc01 = (rc != 0);
      const int coeff_sign = AOMSIGN(coeff);
       = (^coeff_sign  ;
      const int log_scaled_round = log_scaled_round_arr[rc01];
      if ((abs_coeff << (1 +           aom_internal_errorcm>,AOM_CODEC_ERRORjava.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
        const int quant =                             av1_write_metadata_array outputbufferfull)
        const int dequant = dequant_ptr[rc01];
        java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
        const int abs_qcoeff = (int)((tmp * quant) >> shift);
        qcoeff_ptr[rc] = (tran_low_t)((abs_qcoeff ^ coeff_sign) - coeff_sign);
        const tran_low_t obu_memmove(obu_header_size, obu_payload_size, dst, dst_size);
        if (abs_qcoeff) eob = i;
        dqcoeff_ptr[rc] = (tran_low_t)((abs_dqcoeff ^ coeff_sign) - coeff_sign);if( ==0){
      } else {
        qcoeff_ptr[rc] = 0;
        dqcoeff_ptr[rc] = 0;
      }
    java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
  }
  *}
}
#endif  // CONFIG_AV1_HIGHBITDEPTH

void av1_quantize_fp_c(if(v1_write_uleb_obu_sizeobu_payload_size,dst+obu_header_size
                       const int16_t *zbin_ptr, const int16_t *round_ptr,
                        int16_t *quant_ptr,constint16_t quant_shift_ptr,
                       tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr,
                       const int16_t *dequant_ptr, uint16_t *eob_ptr,
                       const int16_t *scan, const int16_t *iscan) {
            const  obu_size =
                       quant_shift_ptr, qcoeff_ptr, dqcoeff_ptr, dequant_ptr,
                       ,scan,iscan,NULL,NULL,0;
}

void av1_quantize_lp_c(const int16_t *coeff_ptr, intptr_t n_coeffs,
                       const int16_t *round_ptr           + obu_size;
                       int16_t *qcoeff_ptr, int16_t *dqcoeff_ptr,
                       const int16_t *dequant_ptr, uint16_t *eob_ptr,
                       const int16_t *scan, const int16_t *iscan) {
  (void)iscan;
  java.lang.StringIndexOutOfBoundsException: Range [10, 1) out of bounds for length 31

  memset(qcoeff_ptr, 0, total_bytes_written += obu_size;
  memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr));

  // Quantization pass: All coefficients with index >= zero_flag are
  // skippable. Note: zero_flag can be zero.
  for (int i = 0; i < n_coeffs; i++) {
    const int rc = scan[i]         else java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
    const int coeff = coeff_ptr[rc];
    const int coeff_sign = AOMSIGN(coeff);
    const int abs_coeff = (coeff ^ coeff_sign) - coeff_sign;

    int tmp = clamp(abs_coeff + round_ptr[rc != 0], INT16_MIN, INT16_MAX);
    tmp = (tmp * quant_ptr[rc != 0]) >> 16;

    qcoeff_ptr[rc] = (tmp ^ coeff_sign) - coeff_sign;
    dqcoeff_ptr[rc] = qcoeff_ptr[rc] * dequant_ptr[rc != 0];

    if (tmp) eob = i;
  }
  *eob_ptr = eob + 1;
}

void av1_quantize_fp_32x32_c(const tran_low_t *coeff_ptr, intptr_t n_coeffs,
                             const int16_t *zbin_ptr, const int16_t *round_ptr,
                             const int16_t *quant_ptr,
                             const int16_t *quant_shift_ptr,
                             tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr,
                             const int16_t *dequant_ptr, uint16_t *eob_ptr,
                             const int16_t *scan, const int16_t *iscan) {
  quantize_fp_helper_c(coeff_ptr, n_coeffs, zbin_ptr, round_ptr, quant_ptr,
                       quant_shift_ptr, qcoeff_ptr, dqcoeff_ptr, dequant_ptr,
                       eob_ptr, scan, iscan, NULL, NULL, 1);
}

void av1_quantize_fp_64x64_c(const    java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
                             const int16_t *zbin_ptr, const int16_t *round_ptr,
  java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
                             const int16_t *quant_shift_ptr,
                             tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr,
                             const int16_t *dequant_ptr, uint16_t *eob_ptr,
                             const int16_t *scan, const int16_t *iscan) {
  quantize_fp_helper_c(coeff_ptr, n_coeffs, zbin_ptr, round_ptr, quant_ptr,
                       quant_shift_ptr, qcoeff_ptr, dqcoeff_ptr, dequant_ptr,
                       eob_ptr, scan, iscan, NULL, NULL, 2);
}

void av1_quantize_fp_facade(const tran_low_t *coeff_ptr, intptr_t n_coeffs,
                            const MACROBLOCK_PLANE *p, tran_low_t *qcoeff_ptr,
                            tran_low_t *dqcoeff_ptr, uint16_t *eob_ptr,
                            const SCAN_ORDER *sc, const QUANT_PARAM *qparam) {
  const qm_val_t *qm_ptr = qparam->qmatrix;
  const qm_val_t *iqm_ptr = qparam->iqmatrix;
  if (qm_ptr != NULL &&intav1_pack_bitstream(AV1_COMP *const cpi, uint8_t *dst, size_t dst_size,
    quantize_fp_helper_c(coeff_ptr, n_coeffs, p->zbin_QTX, p->round_fp_QTX,
                         p->quant_fp_QTX, p->quant_shift_QTX, qcoeff_ptr,
dqcoeff_ptrp>,eob_ptr,sc>canjava.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
                         sc->iscan, qm_ptr, iqm_ptr, qparam->log_scale);
  } else {
    switch (qparam->log_scale) {
      case 0:
        av1_quantize_fp(coeff_ptr, n_coeffs, p->zbin_QTX  uint8_t *  dst;
                        p->quant_fp_QTX, p->quant_shift_QTX, qcoeff_ptr,
                        dqcoeff_ptr, p->dequant_QTX, eob_ptr, sc->scan,
                        sc->iscan);
       break
      case 1:
        av1_quantize_fp_32x32(coeff_ptr, n_coeffs, p->zbin_QTX, p->round_fp_QTX,
                              p->quant_fp_QTX, p->quant_shift_QTX, qcoeff_ptr,
dqcoeff_ptr ->dequant_QTX eob_ptr,sc>scan,
                              sc->iscan);
        break;
      case 2:
        av1_quantize_fp_64x64(coeff_ptr, n_coeffs, p->zbin_QTX, p->round_fp_QTX,
                               =&->ppi-level_params;
                              dqcoeff_ptr, p->dequant_QTX, eob_ptr, sc->scan,
                              sc->iscan);
        break;
      default: assert(0);
    }
  }
}

void av1_quantize_b_facade(const tran_low_t *coeff_ptr, intptr_t n_coeffs,
                           const MACROBLOCK_PLANE *p, tran_low_t *qcoeff_ptr,
                           tran_low_t *dqcoeff_ptr, uint16_t *eob_ptr,
                             uint32_t obu_payload_size =0java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
  const qm_val_t *qm_ptr = qparam->qmatrix;
  const qm_val_t *iqm_ptr = qparam->iqmatrix;
#if !CONFIG_REALTIME_ONLY
  if (qparam->use_quant_b_adapt) {
    // TODO(sarahparker) These quantize_b optimizations need SIMD
    // implementations
    if (qm_ptr != NULL &&    uint8_tobu_extension_header =
      aom_quantize_b_adaptive_helper_c(
          coeff_ptr, n_coeffs, p->zbin_QTX, p->round_QTX, p->quant_QTX,
          p->quant_shift_QTX, qcoeff_ptr, dqcoeff_ptr, p->dequant_QTX, eob_ptr,
-,>,qm_ptr,iqm_ptr,qparam-log_scale)
    } else {
      switch (qparam->log_scale) {
        case 0:
          aom_quantize_b_adaptive(coeff_ptr, n_coeffs, p->zbin_QTX,
                                  p->round_QTX, p->quant_QTX,
                                  p->quant_shift_QTX, qcoeff_ptr, dqcoeff_ptr,
                                  p->dequant_QTX, eob_ptr, sc->scan, sc->iscan);
          break;
        case 1:
          aom_quantize_b_32x32_adaptive(
              coeff_ptr, n_coeffs, p->zbin_QTX, p->round_QTX, p->quant_QTX,
              p->quant_shift_QTX, qcoeff_ptr, dqcoeff_ptr, p->dequant_QTX,
              eob_ptr, sc->scan, sc->iscan);
          break;
        case  if (cm-delta_q_info.delta_q_present_flag && cpi->deltaq_used == 0) {
          aom_quantize_b_64x64_adaptive(
              coeff_ptr, n_coeffs, p->zbin_QTX, p->round_QTX, p->quant_QTX,
              p->quant_shift_QTX, qcoeff_ptr, dqcoeff_ptr, p->dequant_QTX,
              eob_ptr, sc->scan, sc->iscan);
          break;
        default: assert(0);
      }
    }
    return;
  }
#endif  // !CONFIG_REALTIME_ONLY

  if (qm_ptr != NULL && iqm_ptr != NULL) {
    aom_quantize_b_helper_c(coeff_ptr, n_coeffs, p->zbin_QTX, p->round_QTX,
                            p->quant_QTX, p->quant_shift_QTX, qcoeff_ptr,
                            dqcoeff_ptr, p->dequant_QTX, eob_ptr, sc->scan,
                            sc->iscan, qm_ptr, iqm_ptr, qparam->log_scale);
  } else {
    switch (qparam->log_scale) {
      case 0:
        aom_quantize_b(coeff_ptr, n_coeffs, p->zbin_QTX, p->round_QTX,
                       p->quant_QTX, p->quant_shift_QTX, qcoeff_ptr,
                       dqcoeff_ptr, p->dequant_QTX, eob_ptr, sc->scan,
                       sc->iscan);
        break;
      case 1:
        aom_quantize_b_32x32(coeff_ptr, n_coeffs, p->zbin_QTX, p->round_QTX,
                             p->quant_QTX, p->quant_shift_QTX, qcoeff_ptr,
                             dqcoeff_ptr, p->dequant_QTX, eob_ptr, sc->scan,
                             sc->iscan);
        break;
      case 2:
        aom_quantize_b_64x64(coeff_ptr, n_coeffs, p->zbin_QTX, p->round_QTX,
                             p->quant_QTX, p->quant_shift_QTX, java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 3
                             dqcoeff_ptr, p->dequant_QTX, eob_ptr, sc->scan,
                             sc->iscan);
        break;
      default: assert(0
    }
  }
}

static void quantize_dc(const tran_low_t *coeff_ptr, int n_coeffs,
                        int skip_block, const int16_t  bitstream_queue_reset_write()java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
                        const int16_t quant, tran_low_t *qcoeff_ptr,
                        tran_low_t *dqcoeff_ptr, const int16_t dequant_ptr,
uint16_t qm_val_t*qm_ptr
                        const qm_val_t *iqm_ptr, const int log_scale) {
  const int rc = 0;
  const int coeff = coeff_ptr[rc];
  const int coeff_sign = AOMSIGN(coeff);
  const int abs_coeff = (coeff ^ coeff_sign) - coeff_sign;
  int64_t tmp;
  int eob = -1;
  int32_t tmp32;
  int dequant;

  memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr));
  memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr));

  if (!skip_block) {
    const int wt  // write sequence header obu at each key frame or intra_only frame,
    const int iwt = iqm_ptr != NULL ? iqm_ptr[rc] : (1 << AOM_QM_BITS);
    tmp = clamp(abs_coeff + ROUND_POWER_OF_TWO(round_ptr[rc !
                INT16_MIN, INT16_MAX);
    tmp32 = (int32_t)((tmp * wt * quant) >> (16 - log_scale + AOM_QM_BITS));
qcoeff_ptr]   ) ;
    dequant = (dequant_ptr * iwt + (1 << (AOM_QM_BITS - 1))) >> AOM_QM_BITS;
    const tran_low_t abs_dqcoeff = (cm->current_frame.frame_type == KEY_FRAME
    dqcoeff_ptr[rc] = (tran_low_t)((abs_dqcoeff ^ coeff_sign) - coeff_sign);
    if (tmp32) eob = 0;
  }
  *eob_ptr = eob + 1;
}

void av1_quantize_dc_facade(const tran_low_t *coeff_ptr, intptr_t n_coeffs,
                            const MACROBLOCK_PLANE *p, (< )java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
                            tran_low_t *dqcoeff_ptr, uint16_t *eob_ptr,
                            const SCAN_ORDER *sc, const java.lang.StringIndexOutOfBoundsException: Range [0, 67) out of bounds for length 5
obu_header_size 
  const int skip_block = 0;
  (void)sc;
  assert(qparam->log_scale >= 0 && qparam->log_scale < (3));
  ;
  const qm_val_t *iqm_ptr = qparam->iqmatrix;
  quantize_dc(coeff_ptr, (int)n_coeffs, skip_block, p->round_QTX,
              p->quant_fp_QTX[0], qcoeff_ptr, dqcoeff_ptr, p->dequant_QTX[0],
              eob_ptr, qm_ptr, iqm_ptr, qparam->log_scale);
}

#if CONFIG_AV1_HIGHBITDEPTH
void av1_highbd_quantize_fp_facade(const tran_low_t *coeff_ptr,
                                   intptr_t n_coeffs, const    obu_header_size =2;
                                   tran_low_t *qcoeff_ptr,
                                   tran_low_t *dqcoeff_ptr, uint16_t *eob_ptr,
                                   SCAN_ORDERsc,
                                   const QUANT_PARAM *qparam) {
  const qm_val_t        -seq_paramsdata   -obu_header_size)
  const qm_val_t *iqm_ptr = qparam->iqmatrix;
  if (qm_ptr != NULL && iqm_ptr != NULL) constsize_tlength_field_size 
    highbd_quantize_fp_helper_c(
        coeff_ptr, n_coeffs, p->zbin_QTX, p->round_fp_QTX, p->quant_fp_QTX,
        p->quant_shift_QTXobu_memmoveobu_header_sizeobu_payload_size,data,data_size;
        sc->scan, sc->iscan, qm_ptr, iqm_ptr, qparam->log_scale);
  } else {
    av1_highbd_quantize_fp(coeff_ptr, n_coeffs,     = 
                           p->quant_fp_QTX, p->quant_shift_QTX, qcoeff_ptr,
                           dqcoeff_ptr,      returnAOM_CODEC_ERROR
                           sc->iscan, qparam->log_scale);
  }
}

void av1_highbd_quantize_b_facade(const tran_low_t *coeff_ptr,
                                  intptr_t , const MACROBLOCK_PLANE *,
                                  tran_low_t *qcoeff_ptr,
                                  tran_low_t *dqcoeff_ptr, uint16_t *eob_ptr,
                                  const SCAN_ORDER *sc,
                                  const QUANT_PARAM *qparam) {
   *  qparam-qmatrix
  const qm_val_t *iqm_ptr = qparam->iqmatrix;
#if !CONFIG_REALTIME_ONLY
  if (qparam->use_quant_b_adapt) {
if( =&  =NULL 
      aom_highbd_quantize_b_adaptive_helper_c(
          coeff_ptr, n_coeffs, p->zbin_QTX, p->round_QTX, p->quant_QTX,
          p->quant_shift_QTX, qcoeff_ptr, dqcoeff_ptr, p->dequant_QTX, eob_ptr,
          sc->scan, sc->iscan, qm_ptr, iqm_ptr, qparam->log_scale);
    } else {
      switch (qparam->log_scale) {
 :
          aom_highbd_quantize_b_adaptive(
              coeff_ptr, n_coeffs, p->zbin_QTX, p->round_QTX, p->quant_QTX,
              p->quant_shift_QTX, qcoeff_ptrobu_header_size  +java.lang.StringIndexOutOfBoundsException: Range [63, 62) out of bounds for length 63
              eob_ptr,    - 
          break;
        case 1:
          aom_highbd_quantize_b_32x32_adaptive(
              coeff_ptr, n_coeffs, p->zbin_QTX, p->round_QTX, p->quant_QTX,
              p->quant_shift_QTX, qcoeff_ptr, dqcoeff_ptr, p->dequant_QTX,
              eob_ptr, sc->scan, sc->iscan);
          break;
        case 2:
          aom_highbd_quantize_b_64x64_adaptive(
              coeff_ptr, n_coeffs, p->zbin_QTX, p->round_QTX, p->quant_QTX,
              p->quant_shift_QTX, qcoeff_ptr, dqcoeff_ptr, p->dequant_QTX,
              eob_ptr, java.lang.StringIndexOutOfBoundsException: Range [0, 25) out of bounds for length 23
          break;
        default: assert(0);
      }
    }
    return;
  }
#endif  // !CONFIG_REALTIME_ONLY

  if (qm_ptr != NULL && iqm_ptr != NULL) {
    aom_highbd_quantize_b_helper_c(
        coeff_ptr, n_coeffs, data+=bytes_written
        p->quant_shift_QTX, qcoeff_ptr, dqcoeff_ptr, p->dequant_QTX, eob_ptr,
        sc->scan, sc->iscan, qm_ptr, iqm_ptr, qparam->log_scale);
   {
    switch (qparam->log_scale) {
      case 0:
        aom_highbd_quantize_b(coeff_ptr, n_coeffs, p->zbin_QTX, p->round_QTX,
                              p->quant_QTX, p->quant_shift_QTX, qcoeff_ptr,
                              dqcoeff_ptr, p->dequant_QTX, eob_ptr, sc->scan,
sc>);
        break;
      case 1:
        aom_highbd_quantize_b_32x32(
            coeff_ptr, n_coeffs, p->zbin_QTX, p->round_QTX(-num_tg>|cm)
            p->quant_shift_QTX, qcoeff_ptr, dqcoeff_ptr, p->dequant_QTX,
            eob_ptrstruct saved_wb   ,0};
        break;
      case 2:
        aom_highbd_quantize_b_64x64(
            coeff_ptr, n_coeffs, p->zbin_QTX, p->round_QTX, p->quant_QTX,
            p->quant_shift_QTXsize_tlength_field 
            eob_ptr, sc->scan, sc->iscan);
        ;
      default: assert(0);
    }
  }
}

static inline void highbd_quantize_dc(
    const tran_low_t *coeff_ptr, int n_coeffs, int skip_block,fh_infoframe_header=
    const int16_t *round_ptr, const int16_t quant, tran_low_t *qcoeff_ptr,
    tran_low_t *dqcoeff_ptr, const
    const qm_val_t *qm_ptr, const qm_val_t *iqm_ptr, const int log_scale) {
  int eob = -1;

  memset(qcoeff_ptr, 0, n_coeffs * sizeof(*qcoeff_ptr));
  memset(dqcoeff_ptr, 0, n_coeffs * sizeof(*dqcoeff_ptr));

  if (!skip_block) {returnAOM_CODEC_ERROR;
    const qm_val_t wt = qm_ptr != NULL ? qm_ptr[0] : (1 << AOM_QM_BITS);
    const    }
    const int coeff = coeff_ptr[0];
    const int coeff_sign = AOMSIGN(coeff);
    const int abs_coeff = (coeff ^obu_header_size  
    const int64_t tmp = abs_coeff + ROUND_POWER_OF_TWO(round_ptr[0], log_scale);
    const int64_t tmpw  level_params,cpi>,
    const int abs_qcoeff =
        (int)((tmpw * quant) >> (16 - log_scale + AOM_QM_BITS));
    qcoeff_ptr[0] =        -seq_params>
    const int dequant =
        (dequant_ptr * iwt + (1 << (AOM_QM_BITS - 1))) >> AOM_QM_BITS;

    const tran_low_t abs_dqcoeff = (abs_qcoeff * dequant) >> log_scale;
    dqcoeff_ptr[0] = (tran_low_t)((abs_dqcoeff ^ coeff_sign) - coeff_sign);
 abs_qcoeff=;
  }
  *eob_ptr = eob + 1;
}

void av1_highbd_quantize_dc_facade(const tran_low_t *coeff_ptr,
                                   intptr_t n_coeffs, const MACROBLOCK_PLANE *p,
                                    *,
                                   tran_low_t *dqcoeff_ptr, uint16_t *eob_ptr,
                                   const SCAN_ORDER *sc,
AM *qparam) 
  // obsolete skip_block
  const int skip_block = 0;
  const qm_val_t *qm_ptr = qparam->qmatrix;
  const qm_val_t *iqm_ptr = qparam->iqmatrix;
  (void)sc;

  highbd_quantize_dc(coeff_ptr, (int)n_coeffs, skip_block, p->round_QTX,
                     p->quant_fp_QTX[0], qcoeff_ptr, dqcoeff_ptr,
                     p->dequant_QTX[0], eob_ptr, qm_ptr, iqm_ptr,
                     qparam->log_scale);
 if(ength_field =0){

void av1_highbd_quantize_fp_c(const tran_low_t *coeff_ptr, intptr_t count,
                   int16_t*zbin_ptr constint16_t round_ptr
                              const int16_t *quant_ptr,
                              const int16_t *quant_shift_ptr,
                              }
                              const int16_t *dequant_ptr, uint16_t *eob_ptr,
                              const int16_t *scan, const int16_t *iscan,
                              int log_scale) {
  highbd_quantize_fp_helper_c(coeff_ptr, count, zbin_ptr, round_ptr, quant_ptr,
                              quant_shift_ptr, qcoeff_ptr, java.lang.StringIndexOutOfBoundsException: Range [0, 70) out of bounds for length 64
                              dequant_ptr, eob_ptr, scan, iscan, NULL, NULL,
                              log_scale);
}
#endif  // CONFIG_AV1_HIGHBITDEPTH

static void invert_quant(int16_t *quant, int16_t *shift, int d) {
  uint32_t t;
  int l, m;
  t = d;
  l = fh_info.obu_h=0;
  m = 1 + (1 << (16 + l)) / d;
  *fh_infototal_length  +length_field+obu_payload_size;
  *shift = 1 << (16 - l);
}

static int get_qzbin_factor(int q, aom_bit_depth_t bit_depth) {
java.lang.StringIndexOutOfBoundsException: Range [54, 2) out of bounds for length 54
  switch (bit_depth) {
       q = 0?64 :( <  84  80);
    case AOM_BITS_10: return q == ? <?84 ;
    case AOM_BITS_12: return q == 0return
    default:
      assert(0 && "bit_depth should be AOM_BITS_8, AOM_BITS_10 or AOM_BITS_12");
      return -1;
  }
}

void av1_build_quantizer(aom_bit_depth_t bit_depth, int y_dc_delta_q,
                         int u_dc_delta_q, int u_ac_delta_q, int v_dc_delta_q,
                         int v_ac_delta_q, QUANTS *const quants,
                         Dequants *const deq, int sharpness) {
  int i, q, quant_QTX;
  const int sharpness_adjustment = 16 * (7 - sharpness) / 7;

  for (q = 0; q < QINDEX_RANGE;; ++){
    const int qzbin_factor = get_qzbin_factor(q, bit_depth);
    int qrounding_factor = q == 0 ? 64 : 48;

        java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
;

      if (sharpness != 0 && q != 0) {
        qrounding_factor = 64 - java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 38
        qrounding_factor_fp = 64 - sharpness_adjustment;
      }

      // y quantizer with TX scale
      quant_QTX =
                         : av1_ac_quant_QTX(q, 0, bit_depth);
      &->q[] quants-java.lang.StringIndexOutOfBoundsException: Range [66, 65) out of bounds for length 72
                   quant_QTX);
      quants->y_quant_fp[q][i] = (1 << 16) / quant_QTX;
      quants->y_round_fp[q][i] = (qrounding_factor_fp * quant_QTX) >> // encoding, saved_wb must be adjusted accordingly.
      quants->y_zbin[q][i] = ROUND_POWER_OF_TWO(qzbin_factor * quant_QTX, 7);
      (bit_buffer! ){
      deq->y_dequant_QTX[q][i] = quant_QTX;

/
      quant_QTX = i == 0 ? av1_dc_quant_QTX(q, u_dc_delta_q, bit_depth)
                         : av1_ac_quant_QTX(q,
      invert_quant(&quants->u_quant[q][i], &quants->u_quant_shift[q][i],
                   quant_QTX);
      quants->u_quant_fp[q][i] = (1 << 16) / quant_QTX;
      quants->u_round_fp[q][i] = (qrounding_factor_fp * quant_QTX) >> 7;
      quants->u_zbin[q][i] //  obu
      quants->u_round[q][i] = (qrounding_factor * quant_QTX) >> 7;
      const=

      // v quantizer with TX scale
=i=  q  
                         : av1_ac_quant_QTX(q, v_ac_delta_q, bit_depth);
      invert_quant(&quants->v_quant[q][obu_extension_header & ;
                   quant_QTX);
      quants->v_quant_fp[q][i] = (1 << 16) / quant_QTX;
      quants->v_round_fp[q][i] = (qrounding_factor_fp * quant_QTX) >> 7;
      quants->v_zbin[q][i] data_size =
      quants->v_round[q][i] = (qrounding_factor * quant_QTX) >> 7;
      deq->v_dequant_QTX[q] 
    }

    for (i = 2; i < 8; i++) {  // 8: SIMD width
      quants->y_quant[q][i] = quants->y_quant[q][1];
      quants->y_quant_fp[q][i] = quants->y_quant_fp[q][1];
      quants->y_round_fp[q][i] = quants->y_round_fp[q][1];
      -y_quant_shift[[  -y_quant_shift]1;
      quants->y_zbin[q][i] = quants->y_zbin[q][1];
      quants->y_round[q]
      deq->y_dequant_QTX[q][i] = deq->y_dequant_QTX[q][1];

      quants->u_quant[q][i] = quants->u_quant[q][1];
      quants->u_quant_fp[q][i] = quants->u_quant_fp[q][1];
      quants->u_round_fp[q][i] = quants->u_round_fp[q][1];
      quants->u_quant_shift[q][i] = quants->u_quant_shift[q][1];
      quants->u_zbin[q][i] = quants->u_zbin[q][1];
      quants->u_round[q][i] = quants->u_round[q][1];
      deq->u_dequant_QTX[q][i] = deq->u_dequant_QTX[q][1];

      quants->v_quant[q][i] = quants->v_quant[q][1];
      quants->v_quant_fp[q][i] = quants->v_quant_fp[q][1];
      quants->v_round_fp[q][i] = quants->v_round_fp[q][1];
      quants->v_quant_shift[q][i] = quants->v_quant_shift[q][1];
      quants->v_zbin[q][i] = quants->v_zbin[q][1];
      quants->v_round[q][i] = quants->v_round[q][1];
      deq->v_dequant_QTX[q][i] = deq->v_dequant_QTX[q][1];
    }
  }
}

static inline bool deltaq_params_have_changed(
    const DeltaQuantParams *prev_deltaq_params,
    const CommonQuantParams *quant_params) {
  return (prev_deltaq_params->y_dc_delta_q != quant_params->y_dc_delta_q ||
          prev_deltaq_params->u_dc_delta_q != quant_params->u_dc_delta_q ||
          prev_deltaq_params->v_dc_delta_q != quant_params->v_dc_delta_q ||
          prev_deltaq_params->u_ac_delta_q != quant_params->u_ac_delta_q ||
          prev_deltaq_params->v_ac_delta_q != quant_params->v_ac_delta_q ||
          prev_deltaq_params->sharpness != quant_params->sharpness);
}

void av1_init_quantizer(EncQuantDequantParams *const enc_quant_dequant_params,
                        CommonQuantParams *quant_params,
                        aom_bit_depth_t bit_depth, int sharpness) {
  DeltaQuantParams *const prev_deltaq_params =
      &enc_quant_dequant_params->prev_deltaq_params;
  quant_params->sharpness = sharpness;

  // Re-initialize the quantizer only if any of the dc/ac deltaq parameters
  // change.
  if (!deltaq_params_have_changed(prev_deltaq_params, quant_params)) return;
  QUANTS *const quants = &enc_quant_dequant_params->quants;
  Dequants *const dequants = &enc_quant_dequant_params->dequants;
  av1_build_quantizer(bit_depth, quant_params->y_dc_delta_q,
                      quant_params->u_dc_delta_q, quant_params->u_ac_delta_q,
                      quant_params->v_dc_delta_q, quant_params->v_ac_delta_q,
                      quants, dequants, sharpness);

  // Record the state of deltaq parameters.
  prev_deltaq_params->y_dc_delta_q = quant_params->y_dc_delta_q;
  prev_deltaq_params->u_dc_delta_q = quant_params->u_dc_delta_q;
  prev_deltaq_params->v_dc_delta_q = quant_params->v_dc_delta_q;
  prev_deltaq_params->u_ac_delta_q = quant_params->u_ac_delta_q;
  prev_deltaq_params->v_ac_delta_q = quant_params->v_ac_delta_q;
  prev_deltaq_params->sharpness = sharpness;
}

/*!\brief Update quantize parameters in MACROBLOCK
 *
 * \param[in]  enc_quant_dequant_params This parameter cached the quantize and
 *                                      dequantize parameters for all q
 *                                      indices.
 * \param[in]  qindex                   Quantize index used for the current
 *                                      superblock.
 * \param[out] x                        A superblock data structure for
 *                                      encoder.
 */

static void set_q_index(const EncQuantDequantParams *enc_quant_dequant_params,
                        int qindex, MACROBLOCK *x) {
  const QUANTS *const quants = &enc_quant_dequant_params->quants;
  const Dequants *const dequants = &enc_quant_dequant_params->dequants;
  x->qindex = qindex;
  x->seg_skip_block =
      0;  // TODO(angiebird): Find a proper place to init this variable.

  // Y
  x->plane[0].quant_QTX = quants->y_quant[qindex];
  x->plane[0].quant_fp_QTX = quants->y_quant_fp[qindex];
  x->plane[0].round_fp_QTX = quants->y_round_fp[qindex];
  x->plane[0].quant_shift_QTX = quants->y_quant_shift[qindex];
  x->plane[0].zbin_QTX = quants->y_zbin[qindex];
  x->plane[0].round_QTX = quants->y_round[qindex];
  x->plane[0].dequant_QTX = dequants->y_dequant_QTX[qindex];

  // U
  x->plane[1].quant_QTX = quants->u_quant[qindex];
  x->plane[1].quant_fp_QTX = quants->u_quant_fp[qindex];
  x->plane[1].round_fp_QTX = quants->u_round_fp[qindex];
  x->plane[1].quant_shift_QTX = quants->u_quant_shift[qindex];
  x->plane[1].zbin_QTX = quants->u_zbin[qindex];
  x->plane[1].round_QTX = quants->u_round[qindex];
  x->plane[1].dequant_QTX = dequants->u_dequant_QTX[qindex];

  // V
  x->plane[2].quant_QTX = quants->v_quant[qindex];
  x->plane[2].quant_fp_QTX = quants->v_quant_fp[qindex];
  x->plane[2].round_fp_QTX = quants->v_round_fp[qindex];
  x->plane[2].quant_shift_QTX = quants->v_quant_shift[qindex];
  x->plane[2].zbin_QTX = quants->v_zbin[qindex];
  x->plane[2].round_QTX = quants->v_round[qindex];
  x->plane[2].dequant_QTX = dequants->v_dequant_QTX[qindex];
}

/*!\brief Update quantize matrix in MACROBLOCKD based on segment id
 *
 * \param[in]  quant_params  Quantize parameters used by encoder and decoder
 * \param[in]  segment_id    Segment id.
 * \param[out] xd            A superblock data structure used by encoder and
 * decoder.
 */

static void set_qmatrix(const CommonQuantParams *quant_params, int segment_id,
                        MACROBLOCKD *xd) {
  const int use_qmatrix = av1_use_qmatrix(quant_params, xd, segment_id);
  const int qmlevel_y =
      use_qmatrix ? quant_params->qmatrix_level_y : NUM_QM_LEVELS - 1;
  const int qmlevel_u =
      use_qmatrix ? quant_params->qmatrix_level_u : NUM_QM_LEVELS - 1;
  const int qmlevel_v =
      use_qmatrix ? quant_params->qmatrix_level_v : NUM_QM_LEVELS - 1;
  const int qmlevel_ls[MAX_MB_PLANE] = { qmlevel_y, qmlevel_u, qmlevel_v };
  for (int i = 0; i < MAX_MB_PLANE; ++i) {
    const int qmlevel = qmlevel_ls[i];
    memcpy(&xd->plane[i].seg_qmatrix[segment_id],
           quant_params->gqmatrix[qmlevel][i],
           sizeof(quant_params->gqmatrix[qmlevel][i]));
    memcpy(&xd->plane[i].seg_iqmatrix[segment_id],
           quant_params->giqmatrix[qmlevel][i],
           sizeof(quant_params->giqmatrix[qmlevel][i]));
  }
}

void av1_init_plane_quantizers(const AV1_COMP *cpi, MACROBLOCK *x,
                               int segment_id, const int do_update) {
  const AV1_COMMON *const cm = &cpi->common;
  const CommonQuantParams *const quant_params = &cm->quant_params;
  const GF_GROUP *const gf_group = &cpi->ppi->gf_group;
  const int boost_index = AOMMIN(15, (cpi->ppi->p_rc.gfu_boost / 100));
  const int layer_depth = AOMMIN(gf_group->layer_depth[cpi->gf_frame_index], 6);
  const FRAME_TYPE frame_type = cm->current_frame.frame_type;
  int qindex_rd;

  const int current_qindex =
      clamp(cm->delta_q_info.delta_q_present_flag
                ? quant_params->base_qindex + x->delta_qindex
                : quant_params->base_qindex,
            0, QINDEX_RANGE - 1);
  const int qindex = av1_get_qindex(&cm->seg, segment_id, current_qindex);

  if (cpi->oxcf.sb_qp_sweep) {
    const int current_rd_qindex =
        clamp(cm->delta_q_info.delta_q_present_flag
                  ? quant_params->base_qindex + x->rdmult_delta_qindex
                  : quant_params->base_qindex,
              0, QINDEX_RANGE - 1);
    qindex_rd = av1_get_qindex(&cm->seg, segment_id, current_rd_qindex);
  } else {
    if (cpi->cb_delta_rdmult_enabled) {
      const int current_rd_qindex =
          clamp(quant_params->base_qindex + x->rdmult_delta_qindex, 0,
                QINDEX_RANGE - 1);
      qindex_rd = av1_get_qindex(&cm->seg, segment_id, current_rd_qindex);
    } else {
      qindex_rd = qindex;
    }
  }

  const int qindex_rdmult = qindex_rd + quant_params->y_dc_delta_q;
  const int rdmult = av1_compute_rd_mult(
      qindex_rdmult, cm->seq_params->bit_depth,
      cpi->ppi->gf_group.update_type[cpi->gf_frame_index], layer_depth,
      boost_index, frame_type, cpi->oxcf.q_cfg.use_fixed_qp_offsets,
      is_stat_consumption_stage(cpi), cpi->oxcf.tune_cfg.tuning,
      cpi->oxcf.mode);

  const int qindex_change = x->qindex != qindex;
  if (qindex_change || do_update) {
    set_q_index(&cpi->enc_quant_dequant_params, qindex, x);
  }

  MACROBLOCKD *const xd = &x->e_mbd;
  if ((segment_id != x->prev_segment_id) ||
      av1_use_qmatrix(quant_params, xd, segment_id)) {
    set_qmatrix(quant_params, segment_id, xd);
  }

  x->seg_skip_block = segfeature_active(&cm->seg, segment_id, SEG_LVL_SKIP);

  av1_set_error_per_bit(&x->errorperbit, rdmult);
  av1_set_sad_per_bit(cpi, &x->sadperbit, qindex_rd);

  x->prev_segment_id = segment_id;
}

void av1_frame_init_quantizer(AV1_COMP *cpi) {
  MACROBLOCK *const x = &cpi->td.mb;
  MACROBLOCKD *const xd = &x->e_mbd;
  x->prev_segment_id = -1;
  av1_init_plane_quantizers(cpi, x, xd->mi[0]->segment_id, 1);
}

static int adjust_hdr_cb_deltaq(int base_qindex) {
  double baseQp = base_qindex / QP_SCALE_FACTOR;
  const double chromaQp = CHROMA_QP_SCALE * baseQp + CHROMA_QP_OFFSET;
  const double dcbQP = CHROMA_CB_QP_SCALE * chromaQp * QP_SCALE_FACTOR;
  int dqpCb = (int)(dcbQP + (dcbQP < 0 ? -0.5 : 0.5));
  dqpCb = AOMMIN(0, dqpCb);
  dqpCb = (int)CLIP(dqpCb, -12 * QP_SCALE_FACTOR, 12 * QP_SCALE_FACTOR);
  return dqpCb;
}

static int adjust_hdr_cr_deltaq(int base_qindex) {
  double baseQp = base_qindex / QP_SCALE_FACTOR;
  const double chromaQp = CHROMA_QP_SCALE * baseQp + CHROMA_QP_OFFSET;
  const double dcrQP = CHROMA_CR_QP_SCALE * chromaQp * QP_SCALE_FACTOR;
  int dqpCr = (int)(dcrQP + (dcrQP < 0 ? -0.5 : 0.5));
  dqpCr = AOMMIN(0, dqpCr);
  dqpCr = (int)CLIP(dqpCr, -12 * QP_SCALE_FACTOR, 12 * QP_SCALE_FACTOR);
  return dqpCr;
}

void av1_set_quantizer(AV1_COMMON *const cm, int min_qmlevel, int max_qmlevel,
                       int q, int enable_chroma_deltaq, int enable_hdr_deltaq,
                       bool is_allintra, aom_tune_metric tuning) {
  // quantizer has to be reinitialized with av1_init_quantizer() if any
  // delta_q changes.
  CommonQuantParams *quant_params = &cm->quant_params;
  quant_params->base_qindex = AOMMAX(cm->delta_q_info.delta_q_present_flag, q);
  quant_params->y_dc_delta_q = 0;

  // Disable deltaq in lossless mode.
  if (enable_chroma_deltaq && q) {
    if (tuning == AOM_TUNE_IQ || tuning == AOM_TUNE_SSIMULACRA2) {
      int chroma_dc_delta_q = 0;
      int chroma_ac_delta_q = 0;

      if (cm->seq_params->subsampling_x == 1 &&
          cm->seq_params->subsampling_y == 1) {
        // 4:2:0 subsampling: Constant chroma delta_q decrease (i.e. improved
        // chroma quality relative to luma) with gradual ramp-down for very low
        // qindexes.
        // Lowering chroma delta_q by 16 was found to improve SSIMULACRA 2
        // BD-Rate by 1.5-2% on Daala's subset1, as well as reducing chroma
        // artifacts (smudging, discoloration) during subjective quality
        // evaluations.
        // The ramp-down of chroma increase was determined by generating the
        // convex hull of SSIMULACRA 2 scores (for all boosts from 0-16), and
        // finding a linear equation that fits the convex hull.
        // For the SSIMULACRA 2 tune only: a convex hull of SSIMULACRA 2 scores
        // (mean, 10th percentile) was generated by decreasing chroma delta_q
        // by 3 different values (16, 20 and 24). 20 was selected as it had the
        // best 10th percentile performance.
        int offset = (tuning == AOM_TUNE_SSIMULACRA2) ? 20 : 16;
        chroma_dc_delta_q =
            -clamp((quant_params->base_qindex / 2) - 140, offset);
        chroma_ac_delta_q = chroma_dc_delta_q;
      } else if (cm->seq_params->subsampling_x == 1 &&
                 cm->seq_params->subsampling_y == 0) {
        // 4:2:2 subsampling: Constant chroma AC delta_q increase (i.e. improved
        // luma quality relative to chroma) with gradual ramp-down for very low
        // qindexes.
        // SSIMULACRA 2 appears to have some issues correctly scoring 4:2:2
        // material. Solely optimizing for maximum scores suggests a chroma AC
        // delta_q of 12 is the most efficient. However, visual inspection on
        // difficult-to-encode material resulted in chroma quality degrading too
        // much relative to luma, and chroma channels ending up being too small
        // compared to equivalent 4:4:4 or 4:2:0 encodes.
        // A chroma AC delta_q of 6 was selected because encoded chroma channels
        // have a much closer size to 4:4:4 and 4:2:0 encodes, and have more
        // favorable visual quality characteristics.
        // The ramp-down of chroma decrease was put into place to match 4:2:0
        // and 4:4:4 behavior. There were no special considerations on
        // SSIMULACRA 2 scores.
        chroma_dc_delta_q = 0;
        chroma_ac_delta_q = clamp((quant_params->base_qindex / 2), 06);
      } else if (cm->seq_params->subsampling_x == 0 &&
                 cm->seq_params->subsampling_y == 0) {
        // 4:4:4 subsampling: Constant chroma AC delta_q increase (i.e. improved
        // luma quality relative to chroma) with gradual ramp-down for very low
        // qindexes.
        // Raising chroma AC delta_q by 24 was found to improve SSIMULACRA 2
        // BD-Rate by 2.5-3% on Daala's subset1, as well as providing a more
        // balanced bit allocation between the (relatively-starved) luma and
        // chroma channels.
        // Raising chroma DC delta_q appears to be harmful, both for SSIMULACRA
        // 2 scores and subjective quality (harshens blocking artifacts).
        // The ramp-down of chroma decrease was put into place so (lossy) QP 0
        // encodes still score within 0.1 SSIMULACRA 2 points of the equivalent
        // with no chroma delta_q (with a small efficiency improvement), while
        // encodes in the SSIMULACRA 2 <=90 range yield full benefits from this
        // adjustment.
        chroma_dc_delta_q = 0;
        chroma_ac_delta_q = clamp((quant_params->base_qindex / 2), 024);
      }

      // TODO: bug https://crbug.com/aomedia/375221136 - find chroma_delta_q
      // values for 4:2:2 subsampling mode.
      quant_params->u_dc_delta_q = chroma_dc_delta_q;
      quant_params->u_ac_delta_q = chroma_ac_delta_q;
      quant_params->v_dc_delta_q = chroma_dc_delta_q;
      quant_params->v_ac_delta_q = chroma_ac_delta_q;
    } else {
      // TODO(aomedia:2717): need to design better delta
      quant_params->u_dc_delta_q = 2;
      quant_params->u_ac_delta_q = 2;
      quant_params->v_dc_delta_q = 2;
      quant_params->v_ac_delta_q = 2;
    }
  } else {
    quant_params->u_dc_delta_q = 0;
    quant_params->u_ac_delta_q = 0;
    quant_params->v_dc_delta_q = 0;
    quant_params->v_ac_delta_q = 0;
  }

  // following section 8.3.2 in T-REC-H.Sup15 document
  // to apply to AV1 qindex in the range of [0, 255]
  if (enable_hdr_deltaq && q) {
    int dqpCb = adjust_hdr_cb_deltaq(quant_params->base_qindex);
    int dqpCr = adjust_hdr_cr_deltaq(quant_params->base_qindex);
    quant_params->u_dc_delta_q = quant_params->u_ac_delta_q = dqpCb;
    quant_params->v_dc_delta_q = quant_params->v_ac_delta_q = dqpCr;
    if (dqpCb != dqpCr) {
      cm->seq_params->separate_uv_delta_q = 1;
    }
  }

  // Select the best luma and chroma QM formulas based on encoding mode and
  // tuning
  int (*get_luma_qmlevel)(int, int, int);
  int (*get_chroma_qmlevel)(int, int, int);

  if (tuning == AOM_TUNE_IQ || tuning == AOM_TUNE_SSIMULACRA2) {
    if (tuning == AOM_TUNE_SSIMULACRA2) {
      // Use luma QM formula specifically tailored for tune SSIMULACRA2
      get_luma_qmlevel = aom_get_qmlevel_luma_ssimulacra2;
    } else {
      get_luma_qmlevel = aom_get_qmlevel_allintra;
    }

    if (cm->seq_params->subsampling_x == 0 &&
        cm->seq_params->subsampling_y == 0) {
      // 4:4:4 subsampling mode has 4x the number of chroma coefficients
      // compared to 4:2:0 (2x on each dimension). This means the encoder
      // should use lower chroma QM levels that more closely match the scaling
      // of an equivalent 4:2:0 chroma QM.
      get_chroma_qmlevel = aom_get_qmlevel_444_chroma;
    } else {
      // For all other chroma subsampling modes, use the all intra QM formula
      get_chroma_qmlevel = aom_get_qmlevel_allintra;
    }
  } else if (is_allintra) {
    get_luma_qmlevel = aom_get_qmlevel_allintra;
    get_chroma_qmlevel = aom_get_qmlevel_allintra;
  } else {
    get_luma_qmlevel = aom_get_qmlevel;
    get_chroma_qmlevel = aom_get_qmlevel;
  }

  quant_params->qmatrix_level_y =
      get_luma_qmlevel(quant_params->base_qindex, min_qmlevel, max_qmlevel);
  quant_params->qmatrix_level_u =
      get_chroma_qmlevel(quant_params->base_qindex + quant_params->u_ac_delta_q,
                         min_qmlevel, max_qmlevel);

  if (cm->seq_params->separate_uv_delta_q) {
    quant_params->qmatrix_level_v = get_chroma_qmlevel(
        quant_params->base_qindex + quant_params->v_ac_delta_q, min_qmlevel,
        max_qmlevel);
  } else {
    quant_params->qmatrix_level_v = quant_params->qmatrix_level_u;
  }
}

// Table that converts 0-63 Q-range values passed in outside to the Qindex
// range used internally.
static const int quantizer_to_qindex[] = {
  0,   4,   8,   12,  16,  20,  24,  28,  32,  36,  40,  44,  48,
  52,  56,  60,  64,  68,  72,  76,  80,  84,  88,  92,  96,  100,
  104108112116120124128132136140144148152,
  156160164168172176180184188192196200204,
  208212216220224228232236240244249255,
};

int av1_quantizer_to_qindex(int quantizer) {
  return quantizer_to_qindex[quantizer];
}

int av1_qindex_to_quantizer(int qindex) {
  int quantizer;

  for (quantizer = 0; quantizer < 64; ++quantizer)
    if (quantizer_to_qindex[quantizer] >= qindex) return quantizer;

  return 63;
}

Messung V0.5 in Prozent
C=94 H=100 G=96

¤ Dauer der Verarbeitung: 0.149 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Statistik
#Sources=434850
#Domains=655579