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 #ifndef AOM_AV1_COMMON_QUANT_COMMON_H_ 13 #define AOM_AV1_COMMON_QUANT_COMMON_H_ 14 15 #include "aom/aom_codec.h" 16 #include "av1/common/seg_common.h" 17 #include "av1/common/enums.h" 18 #include "av1/common/entropy.h" 19 20 #ifdef __cplusplus 21 extern "C" { 22 #endif 23 24 #define MINQ 0 25 #define MAXQ 255 26 #define QINDEX_RANGE (MAXQ - MINQ + 1) 27 #define QINDEX_BITS 8 28 // Total number of QM sets stored 29 #define QM_LEVEL_BITS 4 30 #define NUM_QM_LEVELS (1 << QM_LEVEL_BITS) 31 /* Range of QMS is between first and last value, with offset applied to inter 32 * blocks*/ 33 #define DEFAULT_QM_Y 10 34 #define DEFAULT_QM_U 11 35 #define DEFAULT_QM_V 12 36 #define DEFAULT_QM_FIRST 5 37 #define DEFAULT_QM_LAST 9 38 39 struct AV1Common; 40 41 int16_t av1_dc_quant_Q3(int qindex, int delta, aom_bit_depth_t bit_depth); 42 int16_t av1_ac_quant_Q3(int qindex, int delta, aom_bit_depth_t bit_depth); 43 int16_t av1_dc_quant_QTX(int qindex, int delta, aom_bit_depth_t bit_depth); 44 int16_t av1_ac_quant_QTX(int qindex, int delta, aom_bit_depth_t bit_depth); 45 46 int av1_get_qindex(const struct segmentation *seg, int segment_id, 47 int base_qindex); 48 // Reduce the large number of quantizers to a smaller number of levels for which 49 // different matrices may be defined 50 static INLINE int aom_get_qmlevel(int qindex, int first, int last) { 51 return first + (qindex * (last + 1 - first)) / QINDEX_RANGE; 52 } 53 void av1_qm_init(struct AV1Common *cm); 54 const qm_val_t *av1_iqmatrix(struct AV1Common *cm, int qindex, int comp, 55 TX_SIZE tx_size); 56 const qm_val_t *av1_qmatrix(struct AV1Common *cm, int qindex, int comp, 57 TX_SIZE tx_size); 58 59 #ifdef __cplusplus 60 } // extern "C" 61 #endif 62 63 #endif // AOM_AV1_COMMON_QUANT_COMMON_H_ 64