/* * Copyright (c) 2016, Alliance for Open Media. All rights reserved. * * This source code is subject to the terms of the BSD 2 Clause License and * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License * was not distributed with this source code in the LICENSE file, you can * obtain it at www.aomedia.org/license/software. If the Alliance for Open * Media Patent License 1.0 was not distributed with this source code in the * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
*/
// The QUANTS structure is used only for internal quantizer setup in // av1_quantize.c. // All of its fields use the same coefficient shift/scaling at TX. typedefstruct { // 0: dc 1: ac 2-8: ac repeated to SIMD width
DECLARE_ALIGNED(16, int16_t, y_quant[QINDEX_RANGE][8]);
DECLARE_ALIGNED(16, int16_t, y_quant_shift[QINDEX_RANGE][8]);
DECLARE_ALIGNED(16, int16_t, y_zbin[QINDEX_RANGE][8]);
DECLARE_ALIGNED(16, int16_t, y_round[QINDEX_RANGE][8]);
// TODO(jingning): in progress of re-working the quantization. will decide // if we want to deprecate the current use of y_quant.
DECLARE_ALIGNED(16, int16_t, y_quant_fp[QINDEX_RANGE][8]);
DECLARE_ALIGNED(16, int16_t, u_quant_fp[QINDEX_RANGE][8]);
DECLARE_ALIGNED(16, int16_t, v_quant_fp[QINDEX_RANGE][8]);
DECLARE_ALIGNED(16, int16_t, y_round_fp[QINDEX_RANGE][8]);
DECLARE_ALIGNED(16, int16_t, u_round_fp[QINDEX_RANGE][8]);
DECLARE_ALIGNED(16, int16_t, v_round_fp[QINDEX_RANGE][8]);
// The Dequants structure is used only for internal quantizer setup in // av1_quantize.c. // Fields are suffixed according to whether or not they're expressed in // the same coefficient shift/precision as TX or a fixed Q3 format. typedefstruct {
DECLARE_ALIGNED(16, int16_t,
y_dequant_QTX[QINDEX_RANGE][8]); // 8: SIMD width
DECLARE_ALIGNED(16, int16_t,
u_dequant_QTX[QINDEX_RANGE][8]); // 8: SIMD width
DECLARE_ALIGNED(16, int16_t,
v_dequant_QTX[QINDEX_RANGE][8]); // 8: SIMD width
} Dequants;
// The DeltaQuantParams structure holds the dc/ac deltaq parameters. typedefstruct { 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;
} DeltaQuantParams;
typedefstruct { // Quantization parameters for internal quantizer setup.
QUANTS quants; // Dequantization parameters for internal quantizer setup.
Dequants dequants; // Deltaq parameters to track the state of the dc/ac deltaq parameters in // cm->quant_params. It is used to decide whether the quantizer tables need // to be re-initialized.
DeltaQuantParams prev_deltaq_params;
} EncQuantDequantParams;
void av1_init_plane_quantizers(conststruct AV1_COMP *cpi, MACROBLOCK *x, int segment_id, constint do_update);
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);
void av1_set_quantizer(struct AV1Common *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);
/*!\brief Quantize transform coefficients without using qmatrix * * quant_ptr, dequant_ptr and round_ptr are size 2 arrays, * where index 0 corresponds to dc coeff and index 1 corresponds to ac coeffs. * * \param[in] quant_ptr 16-bit fixed point representation of inverse * quantize step size, i.e. 2^16/dequant * \param[in] dequant_ptr quantize step size * \param[in] round_ptr rounding * \param[in] log_scale the relative log scale of the transform * coefficients * \param[in] scan scan[i] indicates the position of ith to-be-coded * coefficient * \param[in] coeff_count number of coefficients * \param[out] qcoeff_ptr quantized coefficients * \param[out] dqcoeff_ptr dequantized coefficients * * \return The last non-zero coefficient's scan index plus 1
*/ int av1_quantize_fp_no_qmatrix(const int16_t quant_ptr[2], const int16_t dequant_ptr[2], const int16_t round_ptr[2], int log_scale, const int16_t *scan, int coeff_count, const tran_low_t *coeff_ptr,
tran_low_t *qcoeff_ptr, tran_low_t *dqcoeff_ptr);
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.