From ef7840c623e92245a37753ec32a94544c891cdcb Mon Sep 17 00:00:00 2001 From: Ari Koivula Date: Tue, 15 Apr 2014 14:55:13 +0300 Subject: [PATCH] Add SAO coding costs for sao_eo_class, band position and offset sign. - This reduces bdrate a little bit. - It seems like increasing the bit cost of using SAO in general increases bdrate. --- src/sao.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/sao.c b/src/sao.c index 29610208..d161f75f 100644 --- a/src/sao.c +++ b/src/sao.c @@ -154,6 +154,14 @@ static int sao_mode_bits_edge(int edge_class, int offsets[NUM_SAO_EDGE_CATEGORIE mode_bits += abs_offset + 2; } } + + // TR coded sao_eo_class_ + if (edge_class == SAO_EO0 || edge_class == SAO_EO3) { + mode_bits += 1; + } else { + mode_bits += 2; + } + } return mode_bits; @@ -172,12 +180,16 @@ 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]); - if (abs_offset == 0 || abs_offset == SAO_ABS_OFFSET_MAX) { + if (abs_offset == 0) { mode_bits += abs_offset + 1; + } else if (abs_offset == SAO_ABS_OFFSET_MAX) { + mode_bits += abs_offset + 1 + 1; } else { - mode_bits += abs_offset + 2; + mode_bits += abs_offset + 2 + 1; } } + + mode_bits += 5; // FL coded band position. } return mode_bits;