Commit bb172c89e7 for aom

commit bb172c89e7c129c0e1ede17056fe5b590deb0074
Author: Marco Paniconi <marpan@google.com>
Date:   Wed Jul 8 18:20:32 2026 -0700

    rtc-screen: Prune intraBC search for nonrd pickmode

    Only test intraBC if palette was selected.
    Affects mainly speed 10 and 11, where
    sf->rt_sf.prune_palette_search_nonrd > 0.

    For rtc_screen set, with --enable-intrabc=1 and
    --kf-max/min-dist=1 (all intra):
    speedup ~13-15% for speeds 10 and 11, with overall
    ~neutral bdrate change.

    Change-Id: I3d70e2245831bdd55a418c332a14f86bcdea5bc3

diff --git a/av1/encoder/nonrd_pickmode.c b/av1/encoder/nonrd_pickmode.c
index 657d372837..e952ee8ddd 100644
--- a/av1/encoder/nonrd_pickmode.c
+++ b/av1/encoder/nonrd_pickmode.c
@@ -1762,6 +1762,7 @@ void av1_nonrd_pick_intra_mode(AV1_COMP *cpi, MACROBLOCK *x, RD_STATS *rd_cost,
   mi->mv[0].as_int = mi->mv[1].as_int = INVALID_MV;

   bool allow_skip_nondc = true;
+  bool palette_selected = false;
   // Change the limit of this loop to add other intra prediction
   // mode tests.
   for (int mode_index = 0; mode_index < RTC_INTRA_MODES; ++mode_index) {
@@ -1853,6 +1854,7 @@ void av1_nonrd_pick_intra_mode(AV1_COMP *cpi, MACROBLOCK *x, RD_STATS *rd_cost,
                                  &this_rdc, best_rdc.rdcost);
     // Update best mode data.
     if (this_rdc.rdcost < best_rdc.rdcost) {
+      palette_selected = true;
       best_mode = DC_PRED;
       mi->mv[0].as_int = INVALID_MV;
       mi->mv[1].as_int = INVALID_MV;
@@ -1866,8 +1868,10 @@ void av1_nonrd_pick_intra_mode(AV1_COMP *cpi, MACROBLOCK *x, RD_STATS *rd_cost,
     }
   }

-  bool try_intrabc = cpi->sf.rt_sf.rt_use_intrabc && av1_allow_intrabc(cm) &&
-                     bsize <= BLOCK_16X16;
+  bool try_intrabc =
+      cpi->sf.rt_sf.rt_use_intrabc && av1_allow_intrabc(cm) &&
+      bsize <= BLOCK_16X16 &&
+      (!cpi->sf.rt_sf.rt_prune_intrabc_nonrd || palette_selected);

   if (try_intrabc) {
     int_mv best_dv;
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index c2db5c295f..d9add56561 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -1766,6 +1766,7 @@ static void set_rt_speed_feature_framesize_dependent(const AV1_COMP *const cpi,
   // Screen settings.
   if (cpi->oxcf.tune_cfg.content == AOM_CONTENT_SCREEN) {
     sf->rt_sf.rt_use_intrabc = 1;
+    sf->rt_sf.rt_prune_intrabc_nonrd = 1;
     sf->mv_sf.intrabc_search_level = 1;
     sf->mv_sf.hash_max_8x8_intrabc_blocks = 1;
     sf->mv_sf.prune_intrabc_candidate_block_hash_search = 1;
@@ -2629,6 +2630,7 @@ static inline void init_rt_sf(REAL_TIME_SPEED_FEATURES *rt_sf) {
   rt_sf->increase_color_thresh_palette = false;
   rt_sf->selective_cdf_update = 0;
   rt_sf->rt_use_intrabc = 0;
+  rt_sf->rt_prune_intrabc_nonrd = 0;
   rt_sf->force_only_last_ref = 0;
   rt_sf->higher_thresh_scene_detection = 1;
   rt_sf->skip_newmv_flat_blocks_screen = 0;
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index 1d5161ba61..d1667ea64a 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -1854,6 +1854,8 @@ typedef struct REAL_TIME_SPEED_FEATURES {
   int selective_cdf_update;
   // Use IntraBC for realtime mode.
   int rt_use_intrabc;
+  // Prune IntraBC for nonrd pickmode.
+  int rt_prune_intrabc_nonrd;

   // Force only single reference (LAST) for prediction.
   int force_only_last_ref;