AllIntra: Redefine all-intra mode speed features for speed 7+ Make all-intra mode speed 7 approximately equal to real-time speed 6, all-intra speed 8 close to real-time speed 7, and all-intra speed 9 close to real-time speed 8 Bumping up ABI version to handle this change properly in libavif BUG=aomedia:3022 Change-Id: I2fa00eba55cf6ded4d090a28e4f886c836f8501e
diff --git a/aom/aom_encoder.h b/aom/aom_encoder.h index 3a4afa0..d548001 100644 --- a/aom/aom_encoder.h +++ b/aom/aom_encoder.h
@@ -42,7 +42,7 @@ * fields to structures */ #define AOM_ENCODER_ABI_VERSION \ - (9 + AOM_CODEC_ABI_VERSION + AOM_EXT_PART_ABI_VERSION) /**<\hideinitializer*/ + (10 + AOM_CODEC_ABI_VERSION + AOM_EXT_PART_ABI_VERSION) /**<\hideinitializer*/ /*! \brief Encoder capabilities bitfield *
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c index aef9ba5..f104644 100644 --- a/av1/encoder/speed_features.c +++ b/av1/encoder/speed_features.c
@@ -277,13 +277,13 @@ } if (speed >= 7) { - if (!is_480p_or_larger) { - sf->rt_sf.nonrd_check_partition_merge_mode = 2; - } + // TODO(kyslov): add more speed features to control speed/quality } if (speed >= 8) { - // TODO(kyslov): add more speed features to control speed/quality + if (!is_480p_or_larger) { + sf->rt_sf.nonrd_check_partition_merge_mode = 2; + } } if (speed >= 9) { @@ -483,18 +483,22 @@ sf->winner_mode_sf.multi_winner_mode_type = MULTI_WINNER_MODE_OFF; } - + // The following should make all-intra mode speed 7 approximately equal + // to real-time speed 6, + // all-intra speed 8 close to real-time speed 7, and all-intra speed 9 + // close to real-time speed 8 if (speed >= 7) { sf->part_sf.default_min_partition_size = BLOCK_8X8; sf->part_sf.partition_search_type = VAR_BASED_PARTITION; - sf->lpf_sf.cdef_pick_method = CDEF_PICK_FROM_Q; - sf->rt_sf.mode_search_skip_flags |= FLAG_SKIP_INTRA_DIRMISMATCH; + } + + if (speed >= 8) { + sf->rt_sf.hybrid_intra_pickmode = 1; sf->rt_sf.use_nonrd_pick_mode = 1; sf->rt_sf.nonrd_check_partition_merge_mode = 1; sf->rt_sf.nonrd_check_partition_split = 0; - sf->rt_sf.skip_intra_pred_if_tx_skip = 1; // Set mask for intra modes. for (int i = 0; i < BLOCK_SIZES; ++i) if (i >= BLOCK_32X32) @@ -504,12 +508,9 @@ sf->rt_sf.intra_y_mode_bsize_mask_nrd[i] = INTRA_DC_H_V; } - if (speed >= 8) { - // TODO(kyslov): add more speed features to control speed/quality - } - if (speed >= 9) { - // TODO(kyslov): add more speed features to control speed/quality + sf->rt_sf.nonrd_check_partition_merge_mode = 0; + sf->rt_sf.hybrid_intra_pickmode = 0; } // Intra txb hash is currently not compatible with multi-winner mode as the