diff options
author | Marco Paniconi <marpan@google.com> | 2019-07-22 09:49:02 -0700 |
---|---|---|
committer | Marco Paniconi <marpan@google.com> | 2019-07-23 09:43:39 -0700 |
commit | c096a249c90c4c5e302e400eb9d8c7e64443d60f (patch) | |
tree | e629a2287f65c2b3802dc8a78494b6a6db23c907 /vp9 | |
parent | ad8f8150c078a26ded20d533b93cff2d07c1f49a (diff) | |
download | libvpx-c096a249c90c4c5e302e400eb9d8c7e64443d60f.tar libvpx-c096a249c90c4c5e302e400eb9d8c7e64443d60f.tar.gz libvpx-c096a249c90c4c5e302e400eb9d8c7e64443d60f.tar.bz2 libvpx-c096a249c90c4c5e302e400eb9d8c7e64443d60f.zip |
vp9-rtc: Add intra speed feature for speed >= 8
Add intra speed feature to force DC only under intra mode
testing when source sad for superblock is not high.
Feature is only enable at speed >=8. With this feature
enabled at speed 8 we now allow for H/V intra check as
well for speed 8.
This helps to redude artifacts for speed 8, by allowing H/V mode
to be checked for blocks when the superblock has high
source sad/content change.
Change-Id: I0495ce96b4cc844e8c625b5183eef180dbaaaa72
Diffstat (limited to 'vp9')
-rw-r--r-- | vp9/encoder/vp9_pickmode.c | 4 | ||||
-rw-r--r-- | vp9/encoder/vp9_speed_features.c | 14 | ||||
-rw-r--r-- | vp9/encoder/vp9_speed_features.h | 4 |
3 files changed, 16 insertions, 6 deletions
diff --git a/vp9/encoder/vp9_pickmode.c b/vp9/encoder/vp9_pickmode.c index 513b9f678..cfcf4f7af 100644 --- a/vp9/encoder/vp9_pickmode.c +++ b/vp9/encoder/vp9_pickmode.c @@ -2554,6 +2554,10 @@ void vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x, TileDataEnc *tile_data, if (!((1 << this_mode) & cpi->sf.intra_y_mode_bsize_mask[bsize])) continue; + if (cpi->sf.rt_intra_dc_only_low_content && this_mode != DC_PRED && + x->content_state_sb != kVeryHighSad) + continue; + if ((cpi->sf.adaptive_rd_thresh_row_mt && rd_less_than_thresh_row_mt(best_rdc.rdcost, mode_rd_thresh, &rd_thresh_freq_fact[mode_index])) || diff --git a/vp9/encoder/vp9_speed_features.c b/vp9/encoder/vp9_speed_features.c index 529dca040..cccafd85c 100644 --- a/vp9/encoder/vp9_speed_features.c +++ b/vp9/encoder/vp9_speed_features.c @@ -456,6 +456,7 @@ static void set_rt_speed_feature_framesize_independent( sf->variance_part_thresh_mult = 1; sf->cb_pred_filter_search = 0; sf->force_smooth_interpol = 0; + sf->rt_intra_dc_only_low_content = 0; if (speed >= 1) { sf->allow_txfm_domain_distortion = 1; @@ -740,12 +741,7 @@ static void set_rt_speed_feature_framesize_independent( sf->nonrd_use_ml_partition = 0; #endif if (content == VP9E_CONTENT_SCREEN) sf->mv.subpel_force_stop = HALF_PEL; - // Only keep INTRA_DC mode for speed 8. - if (!is_keyframe) { - int i = 0; - for (i = 0; i < BLOCK_SIZES; ++i) - sf->intra_y_mode_bsize_mask[i] = INTRA_DC; - } + sf->rt_intra_dc_only_low_content = 1; if (!cpi->use_svc && cpi->oxcf.rc_mode == VPX_CBR && content != VP9E_CONTENT_SCREEN) { // More aggressive short circuit for speed 8. @@ -771,6 +767,12 @@ static void set_rt_speed_feature_framesize_independent( } if (speed >= 9) { + // Only keep INTRA_DC mode for speed 9. + if (!is_keyframe) { + int i = 0; + for (i = 0; i < BLOCK_SIZES; ++i) + sf->intra_y_mode_bsize_mask[i] = INTRA_DC; + } sf->cb_pred_filter_search = 1; sf->mv.enable_adaptive_subpel_force_stop = 1; sf->mv.adapt_subpel_force_stop.mv_thresh = 1; diff --git a/vp9/encoder/vp9_speed_features.h b/vp9/encoder/vp9_speed_features.h index eb0628199..ca284ded8 100644 --- a/vp9/encoder/vp9_speed_features.h +++ b/vp9/encoder/vp9_speed_features.h @@ -608,6 +608,10 @@ typedef struct SPEED_FEATURES { // Force subpel motion filter to always use SMOOTH_FILTER. int force_smooth_interpol; + + // For real-time mode: force DC only under intra search when content + // does not have high souce SAD. + int rt_intra_dc_only_low_content; } SPEED_FEATURES; struct VP9_COMP; |