From 9ce7bf835a8dceca891dbce05fecd5b5417b3856 Mon Sep 17 00:00:00 2001 From: Paul Wilkins Date: Thu, 28 Feb 2019 13:19:11 +0000 Subject: [PATCH] Store a group level noise metric from first pass. Adds a variable to GF group structure to store a noise energy metric for the current group that can be used in things like film grain retention code. Change-Id: I81b07630d3242f7928110f19a6c1ed4c86125f05 --- vp9/encoder/vp9_firstpass.c | 5 ++++- vp9/encoder/vp9_firstpass.h | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/vp9/encoder/vp9_firstpass.c b/vp9/encoder/vp9_firstpass.c index 620d21f5a..094524f66 100644 --- a/vp9/encoder/vp9_firstpass.c +++ b/vp9/encoder/vp9_firstpass.c @@ -49,7 +49,6 @@ #define MIN_DECAY_FACTOR 0.01 #define NEW_MV_MODE_PENALTY 32 #define DARK_THRESH 64 -#define SECTION_NOISE_DEF 250.0 #define LOW_I_THRESH 24000 #define NCOUNT_INTRA_THRESH 8192 @@ -2656,6 +2655,10 @@ static void define_gf_group(VP9_COMP *cpi, FIRSTPASS_STATS *this_frame) { // Calculate the bits to be allocated to the gf/arf group as a whole gf_group_bits = calculate_total_gf_group_bits(cpi, gf_group_err); + // Store the average moise level measured for the group + twopass->gf_group.group_noise_energy = + (int)(gf_group_noise / rc->baseline_gf_interval); + // Calculate an estimate of the maxq needed for the group. // We are more aggressive about correcting for sections // where there could be significant overshoot than for easier diff --git a/vp9/encoder/vp9_firstpass.h b/vp9/encoder/vp9_firstpass.h index 0807097ac..d2490f99d 100644 --- a/vp9/encoder/vp9_firstpass.h +++ b/vp9/encoder/vp9_firstpass.h @@ -44,6 +44,7 @@ typedef struct { #define INVALID_ROW -1 #define MAX_ARF_LAYERS 6 +#define SECTION_NOISE_DEF 250.0 typedef struct { double frame_mb_intra_factor; @@ -142,6 +143,7 @@ typedef struct { int gf_group_size; int max_layer_depth; int allowed_max_layer_depth; + int group_noise_energy; } GF_GROUP; typedef struct { -- 2.40.0