From ebcc6605c1bd224fcb26494d74a1db81e981f3ab Mon Sep 17 00:00:00 2001 From: Yaowu Xu Date: Wed, 7 Dec 2011 20:08:31 -0800 Subject: [PATCH] fixed a crash caused invalid Q choice The commit fixed a problem by capping cpi->active_best_quality to be smaller than cpi->worst_quality. Also fixed a few line of code that was misplaced. Change-Id: Ie908264b72140c669122a0afde5d886619c33474 --- vp8/encoder/onyx_if.c | 3 +++ vp8/encoder/quantize.c | 15 +++++++-------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/vp8/encoder/onyx_if.c b/vp8/encoder/onyx_if.c index 0b95a02e2..6d9290675 100644 --- a/vp8/encoder/onyx_if.c +++ b/vp8/encoder/onyx_if.c @@ -4180,6 +4180,9 @@ static void encode_frame_to_data_rate if (cpi->active_best_quality < cpi->best_quality) cpi->active_best_quality = cpi->best_quality; + if (cpi->active_best_quality > cpi->worst_quality) + cpi->active_best_quality = cpi->worst_quality; + if ( cpi->active_worst_quality < cpi->active_best_quality ) cpi->active_worst_quality = cpi->active_best_quality; diff --git a/vp8/encoder/quantize.c b/vp8/encoder/quantize.c index 926a1cc79..d8a52f1ac 100644 --- a/vp8/encoder/quantize.c +++ b/vp8/encoder/quantize.c @@ -965,18 +965,17 @@ void vp8cx_init_quantizer(VP8_COMP *cpi) int i; int quant_val; int Q; - - int zbin_boost[16] = {0, 0, 8, 10, 12, 14, 16, 20, 24, 28, 32, 36, 40, 44, 44, 44}; - + int zbin_boost[16] = { 0, 0, 8, 10, 12, 14, 16, 20, + 24, 28, 32, 36, 40, 44, 44, 44}; int qrounding_factor = 48; -#if CONFIG_EXTEND_QRANGE - int qzbin_factor = (vp8_dc_quant(Q,0) < 148) ? 84 : 80; -#else - int qzbin_factor = (vp8_dc_quant(Q,0) < 37) ? 84: 80; -#endif for (Q = 0; Q < QINDEX_RANGE; Q++) { +#if CONFIG_EXTEND_QRANGE + int qzbin_factor = (vp8_dc_quant(Q,0) < 148) ? 84 : 80; +#else + int qzbin_factor = (vp8_dc_quant(Q,0) < 37) ? 84: 80; +#endif // dc values quant_val = vp8_dc_quant(Q, cpi->common.y1dc_delta_q); cpi->Y1quant_fast[Q][0] = (1 << 16) / quant_val;