From 532215dd29dc8c5192cac4fc3c1d7769864205ff Mon Sep 17 00:00:00 2001 From: hui su Date: Wed, 14 Sep 2016 10:34:25 -0700 Subject: [PATCH] Change the rule of picking UV mode in MBAnalyzeBestUVMode() Pick the mode with the smallest alpha. It only affects m0, in which case the mode decision is not re-examined later in VP8Decimate(). Tests on some natural content png images show PSNR increase as well as visual quality improvement. Change-Id: Iea997e718cd7477160fa05eb7cfb35f4cec2fa9a (cherry picked from commit 1377ac2ec1cb81e4a74fa6294ff30a9e4cc584aa) --- src/enc/analysis.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/enc/analysis.c b/src/enc/analysis.c index b55128fd..136c3312 100644 --- a/src/enc/analysis.c +++ b/src/enc/analysis.c @@ -307,6 +307,7 @@ static int MBAnalyzeBestIntra4Mode(VP8EncIterator* const it, static int MBAnalyzeBestUVMode(VP8EncIterator* const it) { int best_alpha = DEFAULT_ALPHA; + int smallest_alpha = 0; int best_mode = 0; const int max_mode = MAX_UV_MODE; int mode; @@ -322,6 +323,10 @@ static int MBAnalyzeBestUVMode(VP8EncIterator* const it) { alpha = GetAlpha(&histo); if (IS_BETTER_ALPHA(alpha, best_alpha)) { best_alpha = alpha; + } + // The best prediction mode tends to be the one with the smallest alpha. + if (mode == 0 || alpha < smallest_alpha) { + smallest_alpha = alpha; best_mode = mode; } }