]> granicus.if.org Git - libvpx/commitdiff
Add adaptive midpoint for AQ1.
authorPaul Wilkins <paulwilkins@google.com>
Thu, 20 Nov 2014 23:03:01 +0000 (15:03 -0800)
committerPaul Wilkins <paulwilkins@google.com>
Fri, 21 Nov 2014 02:37:34 +0000 (18:37 -0800)
Make the midpoint variance used in AQ mode 1 segmentation
depend on the overall complexity of the frame in two pass.

Change-Id: I452814ec57f7a32352e41bb250e78066abe952dd

vp9/encoder/vp9_aq_variance.c
vp9/encoder/vp9_firstpass.c
vp9/encoder/vp9_firstpass.h

index df65696b1fb545e6169ba0867224799a94d66443..5a9f8a6617683e4424ecd463c6b166b5e53906c0 100644 (file)
@@ -132,8 +132,13 @@ double vp9_log_block_var(VP9_COMP *cpi, MACROBLOCK *x, BLOCK_SIZE bs) {
   return log(var + 1.0);
 }
 
+#define DEFAULT_E_MIDPOINT 10.0;
 int vp9_block_energy(VP9_COMP *cpi, MACROBLOCK *x, BLOCK_SIZE bs) {
   double energy;
-  energy = 0.9 * (vp9_log_block_var(cpi, x, bs) - 10.0);
+  double energy_midpoint;
+  vp9_clear_system_state();
+  energy_midpoint =
+    (cpi->oxcf.pass == 2) ? cpi->twopass.mb_av_energy : DEFAULT_E_MIDPOINT;
+  energy = vp9_log_block_var(cpi, x, bs) - energy_midpoint;
   return clamp((int)round(energy), ENERGY_MIN, ENERGY_MAX);
 }
index 2e33776fae472903c27e7c44e6fd55bd7e311c7e..8f14d4c8ed4417cb70c0bd708d4076b9bd6f5246 100644 (file)
@@ -2457,6 +2457,15 @@ void vp9_rc_get_second_pass_params(VP9_COMP *cpi) {
 
   rc->base_frame_target = target_rate;
 
+  {
+    const int num_mbs = (cpi->oxcf.resize_mode != RESIZE_NONE)
+                        ? cpi->initial_mbs : cpi->common.MBs;
+    // The multiplication by 256 reverses a scaling factor of (>> 8)
+    // applied when combining MB error values for the frame.
+    twopass->mb_av_energy =
+      log(((this_frame.intra_error * 256.0) / num_mbs) + 1.0);
+  }
+
   // Update the total stats remaining structure.
   subtract_stats(&twopass->total_left_stats, &this_frame);
 }
index 0a8f756bf0656f957d05b472df7a811b36499764..a8e4987ccbbb73f8d1266e363806b57ba0948d84 100644 (file)
@@ -96,6 +96,7 @@ typedef struct {
   double modified_error_min;
   double modified_error_max;
   double modified_error_left;
+  double mb_av_energy;
 
 #if CONFIG_FP_MB_STATS
   uint8_t *frame_mb_stats_buf;