ref: 9ce7bf835a8dceca891dbce05fecd5b5417b3856
parent: 855a71dfda9fb2620ae5567a5bb0897aa4fc0d47
author: Paul Wilkins <paulwilkins@google.com>
date: Thu Feb 28 08:19:11 EST 2019
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
--- 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
@@ -2655,6 +2654,10 @@
// 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
--- a/vp9/encoder/vp9_firstpass.h
+++ b/vp9/encoder/vp9_firstpass.h
@@ -44,6 +44,7 @@
#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 @@
int gf_group_size;
int max_layer_depth;
int allowed_max_layer_depth;
+ int group_noise_energy;
} GF_GROUP;
typedef struct {