Commit 3f6c6ffc authored by Dmitry Kovalev's avatar Dmitry Kovalev

Adding vp9_get_qindex function.

Moving common code from encoder and decoder to vp9_get_qindex function.
Also moving quant-related constants from vp9_onyxc_int.h to
vp9_quant_common.h.

Change-Id: I70c5bfbaa1c8bf00fde0bfc459d077f88b6d46c8
parent 347ad7ff
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include "vp9/common/vp9_entropymv.h" #include "vp9/common/vp9_entropymv.h"
#include "vp9/common/vp9_entropy.h" #include "vp9/common/vp9_entropy.h"
#include "vp9/common/vp9_entropymode.h" #include "vp9/common/vp9_entropymode.h"
#include "vp9/common/vp9_quant_common.h"
#if CONFIG_POSTPROC #if CONFIG_POSTPROC
#include "vp9/common/vp9_postproc.h" #include "vp9/common/vp9_postproc.h"
...@@ -31,13 +32,6 @@ ...@@ -31,13 +32,6 @@
void vp9_initialize_common(void); void vp9_initialize_common(void);
#define MINQ 0
#define MAXQ 255
#define QINDEX_BITS 8
#define QINDEX_RANGE (MAXQ + 1)
#if CONFIG_MULTIPLE_ARF #if CONFIG_MULTIPLE_ARF
#define NUM_REF_FRAMES 8 #define NUM_REF_FRAMES 8
#define NUM_REF_FRAMES_LG2 3 #define NUM_REF_FRAMES_LG2 3
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "vp9/common/vp9_common.h" #include "vp9/common/vp9_common.h"
#include "vp9/common/vp9_quant_common.h" #include "vp9/common/vp9_quant_common.h"
#include "vp9/common/vp9_seg_common.h"
static int16_t dc_qlookup[QINDEX_RANGE]; static int16_t dc_qlookup[QINDEX_RANGE];
static int16_t ac_qlookup[QINDEX_RANGE]; static int16_t ac_qlookup[QINDEX_RANGE];
...@@ -44,3 +45,16 @@ int16_t vp9_dc_quant(int qindex, int delta) { ...@@ -44,3 +45,16 @@ int16_t vp9_dc_quant(int qindex, int delta) {
int16_t vp9_ac_quant(int qindex, int delta) { int16_t vp9_ac_quant(int qindex, int delta) {
return ac_qlookup[clamp(qindex + delta, 0, MAXQ)]; return ac_qlookup[clamp(qindex + delta, 0, MAXQ)];
} }
int vp9_get_qindex(MACROBLOCKD *xd, int segment_id, int base_qindex) {
if (vp9_segfeature_active(xd, segment_id, SEG_LVL_ALT_Q)) {
const int data = vp9_get_segdata(xd, segment_id, SEG_LVL_ALT_Q);
return xd->mb_segment_abs_delta == SEGMENT_ABSDATA ?
data : // Abs value
clamp(base_qindex + data, 0, MAXQ); // Delta value
} else {
return base_qindex;
}
}
...@@ -12,11 +12,17 @@ ...@@ -12,11 +12,17 @@
#define VP9_COMMON_VP9_QUANT_COMMON_H_ #define VP9_COMMON_VP9_QUANT_COMMON_H_
#include "vp9/common/vp9_blockd.h" #include "vp9/common/vp9_blockd.h"
#include "vp9/common/vp9_onyxc_int.h"
#define MINQ 0
#define MAXQ 255
#define QINDEX_RANGE (MAXQ - MINQ + 1)
#define QINDEX_BITS 8
void vp9_init_quant_tables(); void vp9_init_quant_tables();
int16_t vp9_dc_quant(int qindex, int delta); int16_t vp9_dc_quant(int qindex, int delta);
int16_t vp9_ac_quant(int qindex, int delta); int16_t vp9_ac_quant(int qindex, int delta);
int vp9_get_qindex(MACROBLOCKD *mb, int segment_id, int base_qindex);
#endif // VP9_COMMON_VP9_QUANT_COMMON_H_ #endif // VP9_COMMON_VP9_QUANT_COMMON_H_
...@@ -181,22 +181,10 @@ void vp9_init_dequantizer(VP9_COMMON *pc) { ...@@ -181,22 +181,10 @@ void vp9_init_dequantizer(VP9_COMMON *pc) {
} }
} }
static int get_qindex(MACROBLOCKD *mb, int segment_id, int base_qindex) {
// Set the Q baseline allowing for any segment level adjustment
if (vp9_segfeature_active(mb, segment_id, SEG_LVL_ALT_Q)) {
const int data = vp9_get_segdata(mb, segment_id, SEG_LVL_ALT_Q);
return mb->mb_segment_abs_delta == SEGMENT_ABSDATA ?
data : // Abs value
clamp(base_qindex + data, 0, MAXQ); // Delta value
} else {
return base_qindex;
}
}
static void mb_init_dequantizer(VP9_COMMON *pc, MACROBLOCKD *xd) { static void mb_init_dequantizer(VP9_COMMON *pc, MACROBLOCKD *xd) {
int i; int i;
const int segment_id = xd->mode_info_context->mbmi.segment_id; const int segment_id = xd->mode_info_context->mbmi.segment_id;
xd->q_index = get_qindex(xd, segment_id, pc->base_qindex); xd->q_index = vp9_get_qindex(xd, segment_id, pc->base_qindex);
xd->plane[0].dequant = pc->y_dequant[xd->q_index]; xd->plane[0].dequant = pc->y_dequant[xd->q_index];
for (i = 1; i < MAX_MB_PLANE; i++) for (i = 1; i < MAX_MB_PLANE; i++)
......
...@@ -318,27 +318,10 @@ void vp9_init_quantizer(VP9_COMP *cpi) { ...@@ -318,27 +318,10 @@ void vp9_init_quantizer(VP9_COMP *cpi) {
void vp9_mb_init_quantizer(VP9_COMP *cpi, MACROBLOCK *x) { void vp9_mb_init_quantizer(VP9_COMP *cpi, MACROBLOCK *x) {
int i; int i;
int qindex;
MACROBLOCKD *xd = &x->e_mbd; MACROBLOCKD *xd = &x->e_mbd;
int zbin_extra; int zbin_extra;
int segment_id = xd->mode_info_context->mbmi.segment_id; int segment_id = xd->mode_info_context->mbmi.segment_id;
const int qindex = vp9_get_qindex(xd, segment_id, cpi->common.base_qindex);
// Select the baseline MB Q index allowing for any segment level change.
if (vp9_segfeature_active(xd, segment_id, SEG_LVL_ALT_Q)) {
if (xd->mb_segment_abs_delta == SEGMENT_ABSDATA) {
// Abs Value
qindex = vp9_get_segdata(xd, segment_id, SEG_LVL_ALT_Q);
} else {
// Delta Value
qindex = cpi->common.base_qindex +
vp9_get_segdata(xd, segment_id, SEG_LVL_ALT_Q);
// Clamp to valid range
qindex = clamp(qindex, 0, MAXQ);
}
} else {
qindex = cpi->common.base_qindex;
}
// Y // Y
zbin_extra = (cpi->common.y_dequant[qindex][1] * zbin_extra = (cpi->common.y_dequant[qindex][1] *
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment