summaryrefslogtreecommitdiff
path: root/vp9
diff options
context:
space:
mode:
authorMarco Paniconi <marpan@google.com>2019-07-22 09:49:02 -0700
committerMarco Paniconi <marpan@google.com>2019-07-23 09:43:39 -0700
commitc096a249c90c4c5e302e400eb9d8c7e64443d60f (patch)
treee629a2287f65c2b3802dc8a78494b6a6db23c907 /vp9
parentad8f8150c078a26ded20d533b93cff2d07c1f49a (diff)
downloadlibvpx-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.c4
-rw-r--r--vp9/encoder/vp9_speed_features.c14
-rw-r--r--vp9/encoder/vp9_speed_features.h4
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;