From c8ec59d8582f07ef759dd6e380bdfeef2433b29e Mon Sep 17 00:00:00 2001 From: "Ronald S. Bultje" Date: Tue, 7 Feb 2012 17:48:47 -0800 Subject: [PATCH] Fix dual prediction recode loop. Some conditions were conditional under a threshold, whereas they should always execute. Also, some conditions were testing an array instead of the values within it. Change-Id: Ia6892945cfbbe07322e6af6be42cd864bf9479c1 --- vp8/encoder/encodeframe.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/vp8/encoder/encodeframe.c b/vp8/encoder/encodeframe.c index 6b1a31f46..f767eb5ec 100644 --- a/vp8/encoder/encodeframe.c +++ b/vp8/encoder/encodeframe.c @@ -1511,18 +1511,21 @@ void vp8_encode_frame(VP8_COMP *cpi) cpi->common.dual_pred_mode = cpi->rd_single_diff > cpi->rd_hybrid_diff ? SINGLE_PREDICTION_ONLY : HYBRID_PREDICTION; } - else if (cpi->common.dual_pred_mode == HYBRID_PREDICTION && - (cpi->rd_single_diff >= 100 || cpi->rd_dual_diff >= 100)) + else if (cpi->common.dual_pred_mode == HYBRID_PREDICTION) { - if (cpi->dual_pred_count == 0) + if (cpi->dual_pred_count[0] == 0 && + cpi->dual_pred_count[1] == 0 && + cpi->dual_pred_count[2] == 0) { cpi->common.dual_pred_mode = SINGLE_PREDICTION_ONLY; } - else if (cpi->single_pred_count == 0) + else if (cpi->single_pred_count[0] == 0 && + cpi->single_pred_count[1] == 0 && + cpi->single_pred_count[2] == 0) { cpi->common.dual_pred_mode = DUAL_PREDICTION_ONLY; } - else + else if (cpi->rd_single_diff >= 100 || cpi->rd_dual_diff >= 100) { redo = 1; cpi->common.dual_pred_mode = cpi->rd_single_diff > cpi->rd_dual_diff ? @@ -1538,11 +1541,15 @@ void vp8_encode_frame(VP8_COMP *cpi) if (cpi->common.dual_pred_mode == HYBRID_PREDICTION) { - if (cpi->dual_pred_count == 0) + if (cpi->dual_pred_count[0] == 0 && + cpi->dual_pred_count[1] == 0 && + cpi->dual_pred_count[2] == 0) { cpi->common.dual_pred_mode = SINGLE_PREDICTION_ONLY; } - else if (cpi->single_pred_count == 0) + else if (cpi->single_pred_count[0] == 0 && + cpi->single_pred_count[1] == 0 && + cpi->single_pred_count[2] == 0) { cpi->common.dual_pred_mode = DUAL_PREDICTION_ONLY; } -- 2.40.0