From 9ff32c566c01faa6f71775bcf8fc25829d89d897 Mon Sep 17 00:00:00 2001 From: Ari Koivula Date: Tue, 15 Apr 2014 14:40:33 +0300 Subject: [PATCH] Adjust SAO mode coding cost for zero offsets. - Coding zero with TR only takes one bit. - Even though offset 0 should be fairly common, this doesn't seem to help very much and actually increases bdrate on some sequences. --- src/sao.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/sao.c b/src/sao.c index e00c4579..29610208 100644 --- a/src/sao.c +++ b/src/sao.c @@ -148,9 +148,10 @@ static int sao_mode_bits_edge(int edge_class, int offsets[NUM_SAO_EDGE_CATEGORIE sao_eo_cat edge_cat; for (edge_cat = SAO_EO_CAT1; edge_cat <= SAO_EO_CAT4; ++edge_cat) { int abs_offset = abs(offsets[edge_cat]); - mode_bits += 2 + abs_offset; - if (abs_offset == SAO_ABS_OFFSET_MAX) { - mode_bits -= 1; + if (abs_offset == 0 || abs_offset == SAO_ABS_OFFSET_MAX) { + mode_bits += abs_offset + 1; + } else { + mode_bits += abs_offset + 2; } } } @@ -171,9 +172,10 @@ static int sao_mode_bits_band(int band_position, int offsets[NUM_SAO_EDGE_CATEGO sao_eo_cat edge_cat; for (edge_cat = SAO_EO_CAT1; edge_cat <= SAO_EO_CAT4; ++edge_cat) { int abs_offset = abs(offsets[edge_cat]); - mode_bits += 2 + abs_offset; - if (abs_offset == SAO_ABS_OFFSET_MAX) { - mode_bits -= 1; + if (abs_offset == 0 || abs_offset == SAO_ABS_OFFSET_MAX) { + mode_bits += abs_offset + 1; + } else { + mode_bits += abs_offset + 2; } } }