Fix checks in MB quantizer initialization
vp8cx_mb_init_quantizer() needs to be called at least once to get
all values calculated. This change added one check to decide if
we could skip initialization or not.
Change-Id: I3f65eb548be57580a61444328336bc18c25c085b
diff --git a/vp8/encoder/encodeframe.c b/vp8/encoder/encodeframe.c
index 7f2b46d..e996368 100644
--- a/vp8/encoder/encodeframe.c
+++ b/vp8/encoder/encodeframe.c
@@ -465,7 +465,7 @@
else
xd->mode_info_context->mbmi.segment_id = 0;
- vp8cx_mb_init_quantizer(cpi, x);
+ vp8cx_mb_init_quantizer(cpi, x, 1);
}
else
xd->mode_info_context->mbmi.segment_id = 0; // Set to Segment 0 by default
@@ -1255,7 +1255,7 @@
xd->mode_info_context->mbmi.segment_id = 0;
/* segment_id changed, so update */
- vp8cx_mb_init_quantizer(cpi, x);
+ vp8cx_mb_init_quantizer(cpi, x, 1);
}
}
}
diff --git a/vp8/encoder/ethreading.c b/vp8/encoder/ethreading.c
index 748942b..557080d 100644
--- a/vp8/encoder/ethreading.c
+++ b/vp8/encoder/ethreading.c
@@ -20,7 +20,7 @@
int recon_uvoffset);
extern int vp8cx_encode_intra_macro_block(VP8_COMP *cpi, MACROBLOCK *x,
TOKENEXTRA **t);
-extern void vp8cx_mb_init_quantizer(VP8_COMP *cpi, MACROBLOCK *x);
+extern void vp8cx_mb_init_quantizer(VP8_COMP *cpi, MACROBLOCK *x, int ok_to_skip);
extern void vp8_build_block_offsets(MACROBLOCK *x);
extern void vp8_setup_block_ptrs(MACROBLOCK *x);
@@ -163,7 +163,7 @@
else
xd->mode_info_context->mbmi.segment_id = 0;
- vp8cx_mb_init_quantizer(cpi, x);
+ vp8cx_mb_init_quantizer(cpi, x, 1);
}
else
xd->mode_info_context->mbmi.segment_id = 0; // Set to Segment 0 by default
diff --git a/vp8/encoder/quantize.c b/vp8/encoder/quantize.c
index 9c759fd..e57a264 100644
--- a/vp8/encoder/quantize.c
+++ b/vp8/encoder/quantize.c
@@ -583,7 +583,7 @@
cpi->zbin_mode_boost + \
x->act_zbin_adj ) ) >> 7)
-void vp8cx_mb_init_quantizer(VP8_COMP *cpi, MACROBLOCK *x)
+void vp8cx_mb_init_quantizer(VP8_COMP *cpi, MACROBLOCK *x, int ok_to_skip)
{
int i;
int QIndex;
@@ -607,7 +607,10 @@
else
QIndex = cpi->common.base_qindex;
- if (QIndex != x->q_index)
+ /* This initialization should be called at least once. Use ok_to_skip to
+ * decide if it is ok to skip.
+ */
+ if (!ok_to_skip || QIndex != x->q_index)
{
// Y
zbin_extra = ZBIN_EXTRA_Y;
@@ -716,7 +719,7 @@
cpi->zbin_mode_boost = 0;
// MB level quantizer setup
- vp8cx_mb_init_quantizer(cpi, &cpi->mb);
+ vp8cx_mb_init_quantizer(cpi, &cpi->mb, 0);
}
diff --git a/vp8/encoder/quantize.h b/vp8/encoder/quantize.h
index f1f0156..07b8813 100644
--- a/vp8/encoder/quantize.h
+++ b/vp8/encoder/quantize.h
@@ -86,7 +86,7 @@
extern void vp8_set_quantizer(struct VP8_COMP *cpi, int Q);
extern void vp8cx_frame_init_quantizer(struct VP8_COMP *cpi);
extern void vp8_update_zbin_extra(struct VP8_COMP *cpi, MACROBLOCK *x);
-extern void vp8cx_mb_init_quantizer(struct VP8_COMP *cpi, MACROBLOCK *x);
+extern void vp8cx_mb_init_quantizer(struct VP8_COMP *cpi, MACROBLOCK *x, int ok_to_skip);
extern void vp8cx_init_quantizer(struct VP8_COMP *cpi);
#endif
diff --git a/vp8/encoder/rdopt.c b/vp8/encoder/rdopt.c
index 7950960..3e3fd86 100644
--- a/vp8/encoder/rdopt.c
+++ b/vp8/encoder/rdopt.c
@@ -43,7 +43,6 @@
#endif
-extern void vp8cx_mb_init_quantizer(VP8_COMP *cpi, MACROBLOCK *x);
extern void vp8_update_zbin_extra(VP8_COMP *cpi, MACROBLOCK *x);
#define MAXF(a,b) (((a) > (b)) ? (a) : (b))