shithub: libvpx

Download patch

ref: c64667c3387cbbb399174bf81f8f9b500c62b5bf
parent: 37cdd3bfc27ef2e73da8d07e6f0fc571f52f62f5
parent: c5c31b9eb6ddbcf413d5333b7a5bd77b89a15b78
author: Marco Paniconi <marpan@google.com>
date: Thu May 11 19:37:30 EDT 2017

Merge "vp9: SVC: Increase the partiiton and acskip thresholds"

--- a/vp9/encoder/vp9_denoiser.c
+++ b/vp9/encoder/vp9_denoiser.c
@@ -572,21 +572,26 @@
 
 // Scale/increase the partition threshold for denoiser speed-up.
 int64_t vp9_scale_part_thresh(int64_t threshold, VP9_DENOISER_LEVEL noise_level,
-                              int content_state) {
+                              int content_state, int temporal_layer_id) {
   if ((content_state == kLowSadLowSumdiff) ||
       (content_state == kHighSadLowSumdiff) ||
-      (content_state == kLowVarHighSumdiff) || noise_level == kDenHigh)
-    return (3 * threshold) >> 1;
-  else
+      (content_state == kLowVarHighSumdiff) || (noise_level == kDenHigh) ||
+      (temporal_layer_id != 0)) {
+    int64_t scaled_thr =
+        (temporal_layer_id < 2) ? (3 * threshold) >> 1 : (7 * threshold) >> 2;
+    return scaled_thr;
+  } else {
     return (5 * threshold) >> 2;
+  }
 }
 
 //  Scale/increase the ac skip threshold for denoiser speed-up.
 int64_t vp9_scale_acskip_thresh(int64_t threshold,
-                                VP9_DENOISER_LEVEL noise_level,
-                                int abs_sumdiff) {
+                                VP9_DENOISER_LEVEL noise_level, int abs_sumdiff,
+                                int temporal_layer_id) {
   if (noise_level >= kDenLow && abs_sumdiff < 5)
-    return threshold *= (noise_level == kDenLow) ? 2 : 6;
+    return threshold *=
+           (noise_level == kDenLow) ? 2 : (temporal_layer_id == 2) ? 10 : 6;
   else
     return threshold;
 }
--- a/vp9/encoder/vp9_denoiser.h
+++ b/vp9/encoder/vp9_denoiser.h
@@ -95,11 +95,11 @@
 void vp9_denoiser_set_noise_level(VP9_DENOISER *denoiser, int noise_level);
 
 int64_t vp9_scale_part_thresh(int64_t threshold, VP9_DENOISER_LEVEL noise_level,
-                              int content_state);
+                              int content_state, int temporal_layer_id);
 
 int64_t vp9_scale_acskip_thresh(int64_t threshold,
-                                VP9_DENOISER_LEVEL noise_level,
-                                int abs_sumdiff);
+                                VP9_DENOISER_LEVEL noise_level, int abs_sumdiff,
+                                int temporal_layer_id);
 
 #ifdef __cplusplus
 }  // extern "C"
--- a/vp9/encoder/vp9_encodeframe.c
+++ b/vp9/encoder/vp9_encodeframe.c
@@ -540,8 +540,9 @@
 #if CONFIG_VP9_TEMPORAL_DENOISING
     if (cpi->oxcf.noise_sensitivity > 0 && denoise_svc(cpi) &&
         cpi->oxcf.speed > 5 && cpi->denoiser.denoising_level >= kDenLow)
-      threshold_base = vp9_scale_part_thresh(
-          threshold_base, cpi->denoiser.denoising_level, content_state);
+      threshold_base =
+          vp9_scale_part_thresh(threshold_base, cpi->denoiser.denoising_level,
+                                content_state, cpi->svc.temporal_layer_id);
     else
       threshold_base =
           scale_part_thresh_sumdiff(threshold_base, cpi->oxcf.speed, cm->width,
--- a/vp9/encoder/vp9_pickmode.c
+++ b/vp9/encoder/vp9_pickmode.c
@@ -363,7 +363,8 @@
   if (cpi->oxcf.noise_sensitivity > 0 && denoise_svc(cpi) &&
       cpi->oxcf.speed > 5)
     ac_thr = vp9_scale_acskip_thresh(ac_thr, cpi->denoiser.denoising_level,
-                                     (abs(sum) >> (bw + bh)));
+                                     (abs(sum) >> (bw + bh)),
+                                     cpi->svc.temporal_layer_id);
   else
     ac_thr *= ac_thr_factor(cpi->oxcf.speed, cpi->common.width,
                             cpi->common.height, abs(sum) >> (bw + bh));