Change to mode early breakout rules for FILM mode.
authorPaul Wilkins <paulwilkins@google.com>
Thu, 28 Feb 2019 14:10:12 +0000 (14:10 +0000)
committerPaul Wilkins <paulwilkins@google.com>
Mon, 11 Mar 2019 13:50:33 +0000 (13:50 +0000)
The biggest offender in terms of preventing retention of film
grain in high rate film content is the use of DC-PRED mode.
Some of the directional modes whilst not strictly preserving
grain do better at at least preserving some texture.

This change blocks the early breakout of the rd loop based
on the reference frame giving the best result so far. In practice,
unless DC-PRED was chosen as the best mode so far, the other
directional intra modes would not even be considered.

As the film grain mode also tends to bias against DC-PRED (or
intra in general) this was pretty much blocking all use of directional
intra modes.

The patch also allows for a broader spectrum of DC modes at the
16x16 transform level than previously.

Change-Id: I860b7726ea9f5fcbb3ec1a90edbdd8cade2e8b28

vp9/encoder/vp9_speed_features.c

index 8c59662..1494c28 100644 (file)
@@ -265,14 +265,16 @@ static void set_good_speed_feature_framesize_independent(VP9_COMP *cpi,
     sf->mv.auto_mv_step_size = 1;
     sf->adaptive_rd_thresh = 2;
     sf->mv.subpel_search_level = 1;
-    sf->mode_skip_start = 10;
+    if (cpi->oxcf.content != VP9E_CONTENT_FILM) sf->mode_skip_start = 10;
     sf->adaptive_pred_interp_filter = 1;
     sf->allow_acl = 0;
 
     sf->intra_y_mode_mask[TX_32X32] = INTRA_DC_H_V;
     sf->intra_uv_mode_mask[TX_32X32] = INTRA_DC_H_V;
-    sf->intra_y_mode_mask[TX_16X16] = INTRA_DC_H_V;
-    sf->intra_uv_mode_mask[TX_16X16] = INTRA_DC_H_V;
+    if (cpi->oxcf.content != VP9E_CONTENT_FILM) {
+      sf->intra_y_mode_mask[TX_16X16] = INTRA_DC_H_V;
+      sf->intra_uv_mode_mask[TX_16X16] = INTRA_DC_H_V;
+    }
 
     sf->recode_tolerance_low = 15;
     sf->recode_tolerance_high = 30;