Changed duplicate scaled QP calculations to use a function

This commit is contained in:
Marko Viitanen 2014-02-21 15:41:55 +02:00
parent f1f293ae0c
commit 11bf11f33a
3 changed files with 25 additions and 37 deletions

View file

@ -286,19 +286,7 @@ void rdoq(encoder_control *encoder, coefficient *coef, coefficient *dest_coeff,
int32_t scalinglist_type= (block_type == CU_INTRA ? 0 : 3) + (int8_t)("\0\3\1\2"[type]); int32_t scalinglist_type= (block_type == CU_INTRA ? 0 : 3) + (int8_t)("\0\3\1\2"[type]);
int32_t qp_base = encoder->QP; int32_t qp_base = encoder->QP;
int32_t qp_scaled; int32_t qp_scaled = get_scaled_qp(type, encoder->QP, 0);
int32_t qp_offset = 0;
if(type == 0) {
qp_scaled = qp_base + qp_offset;
} else {
qp_scaled = CLIP(-qp_offset, 57, qp_base);
if(qp_scaled < 0) {
qp_scaled = qp_scaled + qp_offset;
} else {
qp_scaled = g_chroma_scale[qp_scaled] + qp_offset;
}
}
{ {
int32_t q_bits = QUANT_SHIFT + qp_scaled/6 + transform_shift; int32_t q_bits = QUANT_SHIFT + qp_scaled/6 + transform_shift;

View file

@ -169,6 +169,25 @@ const int16_t g_inv_quant_scales[6] = { 40,45,51,57,64,72 };
// FUNCTIONS // FUNCTIONS
// //
/**
* \brief Get scaled QP used in quantization
*
*/
int32_t get_scaled_qp(int8_t type, int8_t qp, int8_t qp_offset)
{
int32_t qp_scaled = 0;
if(type == 0) {
qp_scaled = qp + qp_offset;
} else {
qp_scaled = CLIP(-qp_offset, 57, qp);
if(qp_scaled < 0) {
qp_scaled = qp_scaled + qp_offset;
} else {
qp_scaled = g_chroma_scale[qp_scaled] + qp_offset;
}
}
return qp_scaled;
}
/** /**
* \brief Initialize scaling lists * \brief Initialize scaling lists
@ -798,19 +817,8 @@ void quant(encoder_control *encoder, int16_t *coef, int16_t *q_coef, int32_t wid
int32_t delta_u[LCU_WIDTH*LCU_WIDTH>>2]; int32_t delta_u[LCU_WIDTH*LCU_WIDTH>>2];
#endif #endif
int32_t qp_base = encoder->QP; int32_t qp_base = encoder->QP;
int32_t qp_scaled; int32_t qp_scaled = get_scaled_qp(type, encoder->QP, 0);
int32_t qp_offset = 0;
if(type == 0) {
qp_scaled = qp_base + qp_offset;
} else {
qp_scaled = CLIP(-qp_offset, 57, qp_base);
if(qp_scaled < 0) {
qp_scaled = qp_scaled + qp_offset;
} else {
qp_scaled = g_chroma_scale[qp_scaled] + qp_offset;
}
}
//New block for variable definitions //New block for variable definitions
{ {
@ -937,19 +945,9 @@ void dequant(encoder_control *encoder, int16_t *q_coef, int16_t *coef, int32_t w
int32_t shift,add,coeff_q,clip_q_coef; int32_t shift,add,coeff_q,clip_q_coef;
int32_t n; int32_t n;
int32_t transform_shift = 15 - g_bitdepth - (g_convert_to_bit[ width ] + 2); int32_t transform_shift = 15 - g_bitdepth - (g_convert_to_bit[ width ] + 2);
int32_t qp_scaled;
int32_t qp_base = encoder->QP; int32_t qp_base = encoder->QP;
if (type == 0) { int32_t qp_scaled = get_scaled_qp(type, encoder->QP, 0);
qp_scaled = qp_base;
} else {
qp_scaled = CLIP( 0, 57, qp_base);
if (qp_scaled < 0) {
qp_scaled = qp_scaled;
} else {
qp_scaled = g_chroma_scale[qp_scaled];
}
}
shift = 20 - QUANT_SHIFT - transform_shift; shift = 20 - QUANT_SHIFT - transform_shift;

View file

@ -68,4 +68,6 @@ void scalinglist_destroy();
int32_t *scalinglist_get_default(uint32_t size_id, uint32_t list_id); int32_t *scalinglist_get_default(uint32_t size_id, uint32_t list_id);
int scalinglist_parse(FILE *fp); int scalinglist_parse(FILE *fp);
int32_t get_scaled_qp(int8_t type, int8_t qp, int8_t qp_offset);
#endif #endif