diff --git a/aom/aomcx.h b/aom/aomcx.h
index 5aa320d..9673fa2 100644
--- a/aom/aomcx.h
+++ b/aom/aomcx.h
@@ -350,6 +350,13 @@
    */
   AV1E_SET_TUNE_CONTENT,
 
+  /*!\brief Codec control function to set CDF update mode.
+   *
+   *  0: no update                  1: update all the time
+   *  2: update half of the time    3: update quarter of the time
+   */
+  AV1E_SET_CDF_UPDATE_MODE,
+
   /*!\brief Codec control function to set color space info.
    * \note Valid ranges: 0..23, default is "Unspecified".
    *                     0 = For future use
@@ -1017,6 +1024,9 @@
 AOM_CTRL_USE_TYPE(AV1E_SET_FILM_GRAIN_TEST_VECTOR, unsigned int)
 #define AOM_CTRL_AV1E_SET_FILM_GRAIN_TEST_VECTOR
 
+AOM_CTRL_USE_TYPE(AV1E_SET_CDF_UPDATE_MODE, int)
+#define AOM_CTRL_AV1E_SET_CDF_UPDATE_MODE
+
 /*!\endcond */
 /*! @} - end defgroup aom_encoder */
 #ifdef __cplusplus
diff --git a/aomenc.c b/aomenc.c
index 2493449..44f11c2 100644
--- a/aomenc.c
+++ b/aomenc.c
@@ -645,9 +645,16 @@
 
 static const arg_def_t tune_content = ARG_DEF_ENUM(
     NULL, "tune-content", 1, "Tune content type", tune_content_enum);
-#endif
 
-#if CONFIG_AV1_ENCODER
+#if CONFIG_CDF_UPDATE_MODE
+static const arg_def_t cdf_update_mode =
+    ARG_DEF(NULL, "cdf-update-mode", 1,
+            "CDF update rate for entropy coding "
+            "(0: off; 1: update all the time(default); "
+            "2: update half the time; "
+            "3: update quarter of the time)");
+#endif  // CONFIG_CDF_UPDATE_MODE
+
 #if CONFIG_EXT_PARTITION
 static const struct arg_enum_list superblock_size_enum[] = {
   { "dynamic", AOM_SUPERBLOCK_SIZE_DYNAMIC },
@@ -705,6 +712,9 @@
                                        &frame_periodic_boost,
                                        &noise_sens,
                                        &tune_content,
+#if CONFIG_CDF_UPDATE_MODE
+                                       &cdf_update_mode,
+#endif  // CONFIG_CDF_UPDATE_MODE
 #if CONFIG_CICP
                                        &input_color_primaries,
                                        &input_transfer_characteristics,
@@ -777,6 +787,9 @@
                                         AV1E_SET_FRAME_PERIODIC_BOOST,
                                         AV1E_SET_NOISE_SENSITIVITY,
                                         AV1E_SET_TUNE_CONTENT,
+#if CONFIG_CDF_UPDATE_MODE
+                                        AV1E_SET_CDF_UPDATE_MODE,
+#endif  // CONFIG_CDF_UPDATE_MODE
 #if CONFIG_CICP
                                         AV1E_SET_COLOR_PRIMARIES,
                                         AV1E_SET_TRANSFER_CHARACTERISTICS,
@@ -801,7 +814,7 @@
 #endif
                                         AV1E_SET_DISABLE_TEMPMV,
                                         0 };
-#endif
+#endif  // CONFIG_AV1_ENCODER
 
 static const arg_def_t *no_args[] = { NULL };
 
diff --git a/av1/av1_cx_iface.c b/av1/av1_cx_iface.c
index 9430a47..0e069bf 100644
--- a/av1/av1_cx_iface.c
+++ b/av1/av1_cx_iface.c
@@ -113,6 +113,9 @@
   int film_grain_test_vector;
 #endif
   unsigned int motion_vector_unit_test;
+#if CONFIG_CDF_UPDATE_MODE
+  unsigned int cdf_update_mode;
+#endif  // CONFIG_CDF_UPDATE_MODE
 };
 
 static struct av1_extracfg default_extra_cfg = {
@@ -195,6 +198,9 @@
   0,
 #endif
   0,  // motion_vector_unit_test
+#if CONFIG_CDF_UPDATE_MODE
+  1,    // CDF update mode
+#endif  // CONFIG_CDF_UPDATE_MODE
 };
 
 struct aom_codec_alg_priv {
@@ -306,6 +312,9 @@
   RANGE_CHECK(cfg, rc_superres_qthresh, 1, 63);
   RANGE_CHECK(cfg, rc_superres_kf_qthresh, 1, 63);
 #endif  // CONFIG_HORZONLY_FRAME_SUPERRES
+#if CONFIG_CDF_UPDATE_MODE
+  RANGE_CHECK_HI(extra_cfg, cdf_update_mode, 3);
+#endif  // CONFIG_CDF_UPDATE_MODE
 
   // AV1 does not support a lower bound on the keyframe interval in
   // automatic keyframe placement mode.
@@ -691,6 +700,10 @@
   oxcf->tuning = extra_cfg->tuning;
   oxcf->content = extra_cfg->content;
 
+#if CONFIG_CDF_UPDATE_MODE
+  oxcf->cdf_update_mode = (uint8_t)extra_cfg->cdf_update_mode;
+#endif  // CONFIG_CDF_UPDATE_MODE
+
 #if CONFIG_EXT_PARTITION
   oxcf->superblock_size = extra_cfg->superblock_size;
 #endif  // CONFIG_EXT_PARTITION
@@ -1682,6 +1695,15 @@
   return update_extra_cfg(ctx, &extra_cfg);
 }
 
+#if CONFIG_CDF_UPDATE_MODE
+static aom_codec_err_t ctrl_set_cdf_update_mode(aom_codec_alg_priv_t *ctx,
+                                                va_list args) {
+  struct av1_extracfg extra_cfg = ctx->extra_cfg;
+  extra_cfg.cdf_update_mode = CAST(AV1E_SET_CDF_UPDATE_MODE, args);
+  return update_extra_cfg(ctx, &extra_cfg);
+}
+#endif  // CONFIG_CDF_UPDATE_MODE
+
 #if CONFIG_CICP
 static aom_codec_err_t ctrl_set_color_primaries(aom_codec_alg_priv_t *ctx,
                                                 va_list args) {
@@ -1831,6 +1853,9 @@
 #endif
   { AV1E_SET_FRAME_PERIODIC_BOOST, ctrl_set_frame_periodic_boost },
   { AV1E_SET_TUNE_CONTENT, ctrl_set_tune_content },
+#if CONFIG_CDF_UPDATE_MODE
+  { AV1E_SET_CDF_UPDATE_MODE, ctrl_set_cdf_update_mode },
+#endif  // CONFIG_CDF_UPDATE_MODE
 #if CONFIG_CICP
   { AV1E_SET_COLOR_PRIMARIES, ctrl_set_color_primaries },
   { AV1E_SET_TRANSFER_CHARACTERISTICS, ctrl_set_transfer_characteristics },
diff --git a/av1/common/onyxc_int.h b/av1/common/onyxc_int.h
index 6bbcdac..a5c96d4 100644
--- a/av1/common/onyxc_int.h
+++ b/av1/common/onyxc_int.h
@@ -319,6 +319,9 @@
   // Flag signaling that the frame is encoded using only INTRA modes.
   uint8_t intra_only;
   uint8_t last_intra_only;
+#if CONFIG_CDF_UPDATE_MODE
+  uint8_t cdf_update_mode;
+#endif  // CONFIG_CDF_UPDATE_MODE
 
   int allow_high_precision_mv;
 #if CONFIG_AMVR
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index b5fa065..7fa8d2d 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -2887,6 +2887,9 @@
 #endif  // CONFIG_HORZONLY_FRAME_SUPERRES
       cm->allow_intrabc = aom_rb_read_bit(rb);
 #endif  // CONFIG_INTRABC
+#if CONFIG_CDF_UPDATE_MODE
+    cm->cdf_update_mode = aom_rb_read_literal(rb, 2);
+#endif  // CONFIG_CDF_UPDATE_MODE
     cm->use_prev_frame_mvs = 0;
   } else {
     if (cm->intra_only || cm->error_resilient_mode) cm->use_prev_frame_mvs = 0;
@@ -2943,6 +2946,9 @@
 #endif  // CONFIG_HORZONLY_FRAME_SUPERRES
         cm->allow_intrabc = aom_rb_read_bit(rb);
 #endif  // CONFIG_INTRABC                               // CONFIG_INTRABC
+#if CONFIG_CDF_UPDATE_MODE
+      cm->cdf_update_mode = aom_rb_read_literal(rb, 2);
+#endif                                  // CONFIG_CDF_UPDATE_MODE
     } else if (pbi->need_resync != 1) { /* Skip if need resync */
 #if CONFIG_OBU
       pbi->refresh_frame_flags = (cm->frame_type == S_FRAME)
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 4152165..a17c810 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -3757,6 +3757,9 @@
 #endif
       aom_wb_write_bit(wb, cm->allow_intrabc);
 #endif  // CONFIG_INTRABC
+#if CONFIG_CDF_UPDATE_MODE
+    aom_wb_write_literal(wb, cm->cdf_update_mode, 2);
+#endif  // CONFIG_CDF_UPDATE_MODE
   } else {
 #if !CONFIG_NO_FRAME_CONTEXT_SIGNALING
     if (!cm->error_resilient_mode) {
@@ -3800,6 +3803,9 @@
 #endif
         aom_wb_write_bit(wb, cm->allow_intrabc);
 #endif  // CONFIG_INTRABC
+#if CONFIG_CDF_UPDATE_MODE
+      aom_wb_write_literal(wb, cm->cdf_update_mode, 2);
+#endif  // CONFIG_CDF_UPDATE_MODE
     } else {
       aom_wb_write_literal(wb, cpi->refresh_frame_mask, REF_FRAMES);
 
@@ -4108,6 +4114,9 @@
 #endif
       aom_wb_write_bit(wb, cm->allow_intrabc);
 #endif  // CONFIG_INTRABC
+#if CONFIG_CDF_UPDATE_MODE
+    aom_wb_write_literal(wb, cm->cdf_update_mode, 2);
+#endif  // CONFIG_CDF_UPDATE_MODE
   } else if (cm->frame_type == INTRA_ONLY_FRAME) {
 #if !CONFIG_NO_FRAME_CONTEXT_SIGNALING
     if (!cm->error_resilient_mode) {
@@ -4137,6 +4146,9 @@
 #endif
         aom_wb_write_bit(wb, cm->allow_intrabc);
 #endif  // CONFIG_INTRABC
+#if CONFIG_CDF_UPDATE_MODE
+      aom_wb_write_literal(wb, cm->cdf_update_mode, 2);
+#endif  // CONFIG_CDF_UPDATE_MODE
     }
   } else if (cm->frame_type == INTER_FRAME) {
     MV_REFERENCE_FRAME ref_frame;
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index b4e2623..80637f2 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -356,9 +356,10 @@
       InterpFilter filter =
           av1_extract_interp_filter(mbmi->interp_filters, dir);
       ++counts->switchable_interp[ctx][filter];
-      if (allow_update_cdf)
+      if (allow_update_cdf) {
         update_cdf(xd->tile_ctx->switchable_interp_cdf[ctx], filter,
                    SWITCHABLE_FILTERS);
+      }
     }
   }
 }
@@ -824,10 +825,11 @@
     }
 #endif  // CONFIG_ENTROPY_STATS
     if (allow_update_cdf) {
-      if (use_filter_intra_mode)
+      if (use_filter_intra_mode) {
         update_cdf(fc->filter_intra_mode_cdf,
                    mbmi->filter_intra_mode_info.filter_intra_mode,
                    FILTER_INTRA_MODES);
+      }
       update_cdf(fc->filter_intra_cdfs[mbmi->tx_size], use_filter_intra_mode,
                  2);
     }
@@ -840,10 +842,11 @@
     ++counts->angle_delta[mbmi->mode - V_PRED]
                          [mbmi->angle_delta[PLANE_TYPE_Y] + MAX_ANGLE_DELTA];
 #endif
-    if (allow_update_cdf)
+    if (allow_update_cdf) {
       update_cdf(fc->angle_delta_cdf[mbmi->mode - V_PRED],
                  mbmi->angle_delta[PLANE_TYPE_Y] + MAX_ANGLE_DELTA,
                  2 * MAX_ANGLE_DELTA + 1);
+    }
   }
 #endif  // CONFIG_EXT_INTRA_MOD
 
@@ -858,10 +861,11 @@
     ++counts->angle_delta[mbmi->uv_mode - V_PRED]
                          [mbmi->angle_delta[PLANE_TYPE_UV] + MAX_ANGLE_DELTA];
 #endif
-    if (allow_update_cdf)
+    if (allow_update_cdf) {
       update_cdf(fc->angle_delta_cdf[mbmi->uv_mode - V_PRED],
                  mbmi->angle_delta[PLANE_TYPE_UV] + MAX_ANGLE_DELTA,
                  2 * MAX_ANGLE_DELTA + 1);
+    }
   }
 #endif  // CONFIG_EXT_INTRA_MOD
 #if CONFIG_ENTROPY_STATS
@@ -1005,13 +1009,13 @@
                     frame_is_intra_only(cm), mi_row, mi_col,
                     tile_data->allow_update_cdf);
     if (av1_allow_palette(cm->allow_screen_content_tools, bsize) &&
-        tile_data->allow_update_cdf)
+        allow_update_cdf)
       update_palette_cdf(xd, mi);
   }
 
 #if CONFIG_INTRABC
   if (frame_is_intra_only(cm) && av1_allow_intrabc(cm)) {
-    if (tile_data->allow_update_cdf)
+    if (allow_update_cdf)
       update_cdf(fc->intrabc_cdf, is_intrabc_block(mbmi), 2);
 #if CONFIG_ENTROPY_STATS
     ++td->counts->intrabc[is_intrabc_block(mbmi)];
@@ -1040,9 +1044,10 @@
 
     if (!seg_ref_active) {
       counts->intra_inter[av1_get_intra_inter_context(xd)][inter_block]++;
-      if (allow_update_cdf)
+      if (allow_update_cdf) {
         update_cdf(fc->intra_inter_cdf[av1_get_intra_inter_context(xd)],
                    inter_block, 2);
+      }
       // If the segment reference feature is enabled we have only a single
       // reference frame allowed for the segment so exclude it from
       // the reference frame counts used to work out probabilities.
@@ -1061,9 +1066,10 @@
             counts->comp_inter[av1_get_reference_mode_context(cm, xd)]
                               [has_second_ref(mbmi)]++;
 #endif  // CONFIG_ENTROPY_STATS
-            if (allow_update_cdf)
+            if (allow_update_cdf) {
               update_cdf(av1_get_reference_mode_cdf(cm, xd),
                          has_second_ref(mbmi), 2);
+            }
           }
         }
 
@@ -1220,14 +1226,16 @@
             if (allow_update_cdf)
               update_cdf(fc->interintra_cdf[bsize_group], 1, 2);
             counts->interintra_mode[bsize_group][mbmi->interintra_mode]++;
-            if (allow_update_cdf)
+            if (allow_update_cdf) {
               update_cdf(fc->interintra_mode_cdf[bsize_group],
                          mbmi->interintra_mode, INTERINTRA_MODES);
+            }
             if (is_interintra_wedge_used(bsize)) {
               counts->wedge_interintra[bsize][mbmi->use_wedge_interintra]++;
-              if (allow_update_cdf)
+              if (allow_update_cdf) {
                 update_cdf(fc->wedge_interintra_cdf[bsize],
                            mbmi->use_wedge_interintra, 2);
+              }
             }
           } else {
             counts->interintra[bsize_group][0]++;
@@ -1242,14 +1250,16 @@
         if (mbmi->ref_frame[1] != INTRA_FRAME) {
           if (motion_allowed == WARPED_CAUSAL) {
             counts->motion_mode[bsize][mbmi->motion_mode]++;
-            if (allow_update_cdf)
+            if (allow_update_cdf) {
               update_cdf(fc->motion_mode_cdf[bsize], mbmi->motion_mode,
                          MOTION_MODES);
+            }
           } else if (motion_allowed == OBMC_CAUSAL) {
             counts->obmc[bsize][mbmi->motion_mode == OBMC_CAUSAL]++;
-            if (allow_update_cdf)
+            if (allow_update_cdf) {
               update_cdf(fc->obmc_cdf[bsize], mbmi->motion_mode == OBMC_CAUSAL,
                          2);
+            }
           }
         }
 
@@ -1264,26 +1274,29 @@
           if (masked_compound_used) {
             const int comp_group_idx_ctx = get_comp_group_idx_context(xd);
             ++counts->comp_group_idx[comp_group_idx_ctx][mbmi->comp_group_idx];
-            if (allow_update_cdf)
+            if (allow_update_cdf) {
               update_cdf(fc->comp_group_idx_cdf[comp_group_idx_ctx],
                          mbmi->comp_group_idx, 2);
+            }
           }
 
           if (mbmi->comp_group_idx == 0) {
             const int comp_index_ctx = get_comp_index_context(cm, xd);
             ++counts->compound_index[comp_index_ctx][mbmi->compound_idx];
-            if (allow_update_cdf)
+            if (allow_update_cdf) {
               update_cdf(fc->compound_index_cdf[comp_index_ctx],
                          mbmi->compound_idx, 2);
+            }
           } else {
             assert(masked_compound_used);
             if (is_interinter_compound_used(COMPOUND_WEDGE, bsize)) {
               counts->compound_interinter[bsize]
                                          [mbmi->interinter_compound_type - 1]++;
-              if (allow_update_cdf)
+              if (allow_update_cdf) {
                 update_cdf(fc->compound_type_cdf[bsize],
                            mbmi->interinter_compound_type - 1,
                            COMPOUND_TYPES - 1);
+              }
             }
           }
         }
@@ -1294,9 +1307,10 @@
           if (is_interinter_compound_used(COMPOUND_WEDGE, bsize)) {
             counts
                 ->compound_interinter[bsize][mbmi->interinter_compound_type]++;
-            if (allow_update_cdf)
+            if (allow_update_cdf) {
               update_cdf(fc->compound_type_cdf[bsize],
                          mbmi->interinter_compound_type, COMPOUND_TYPES);
+            }
           }
         }
 #endif  // CONFIG_JNT_COMP
@@ -1323,9 +1337,10 @@
       if (has_second_ref(mbmi)) {
         mode_ctx = mbmi_ext->compound_mode_context[mbmi->ref_frame[0]];
         ++counts->inter_compound_mode[mode_ctx][INTER_COMPOUND_OFFSET(mode)];
-        if (allow_update_cdf)
+        if (allow_update_cdf) {
           update_cdf(fc->inter_compound_mode_cdf[mode_ctx],
                      INTER_COMPOUND_OFFSET(mode), INTER_COMPOUND_MODES);
+        }
       } else {
         mode_ctx =
             av1_mode_context_analyzer(mbmi_ext->mode_context, mbmi->ref_frame);
@@ -3868,7 +3883,6 @@
       pre_tok = cpi->tile_tok[tile_row][tile_col];
       tile_tok = allocated_tokens(
           *tile_info, cm->seq_params.mib_size_log2 + MI_SIZE_LOG2, num_planes);
-
 #if CONFIG_EXT_TILE
       tile_data->allow_update_cdf = !cm->large_scale_tile;
 #else
@@ -4251,6 +4265,9 @@
       cm->allow_screen_content_tools =
           cm->seq_params.force_screen_content_tools;
     }
+#if CONFIG_CDF_UPDATE_MODE
+    cm->cdf_update_mode = cpi->oxcf.cdf_update_mode;
+#endif  // CONFIG_CDF_UPDATE_MODE
   }
 
 #if CONFIG_INTRABC
@@ -4861,10 +4878,11 @@
       const TxSetType tx_set_type = get_ext_tx_set_type(
           tx_size, bsize, is_inter, cm->reduced_tx_set_used);
       if (is_inter) {
-        if (allow_update_cdf)
+        if (allow_update_cdf) {
           update_cdf(fc->inter_ext_tx_cdf[eset][txsize_sqr_map[tx_size]],
                      av1_ext_tx_ind[tx_set_type][tx_type],
                      av1_num_ext_tx_set[tx_set_type]);
+        }
 #if CONFIG_ENTROPY_STATS
         ++counts->inter_ext_tx[eset][txsize_sqr_map[tx_size]][tx_type];
 #endif  // CONFIG_ENTROPY_STATS
@@ -4880,21 +4898,23 @@
         ++counts
               ->intra_ext_tx[eset][txsize_sqr_map[tx_size]][intra_dir][tx_type];
 #endif  // CONFIG_ENTROPY_STATS
-        if (allow_update_cdf)
+        if (allow_update_cdf) {
           update_cdf(
               fc->intra_ext_tx_cdf[eset][txsize_sqr_map[tx_size]][intra_dir],
               av1_ext_tx_ind[tx_set_type][tx_type],
               av1_num_ext_tx_set[tx_set_type]);
+        }
 #else
 #if CONFIG_ENTROPY_STATS
         ++counts->intra_ext_tx[eset][txsize_sqr_map[tx_size]][mbmi->mode]
                               [tx_type];
 #endif  // CONFIG_ENTROPY_STATS
-        if (allow_update_cdf)
+        if (allow_update_cdf) {
           update_cdf(
               fc->intra_ext_tx_cdf[eset][txsize_sqr_map[tx_size]][mbmi->mode],
               av1_ext_tx_ind[tx_set_type][tx_type],
               av1_num_ext_tx_set[tx_set_type]);
+        }
 #endif
       }
     }
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index 9c18941..d2c391e 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -309,6 +309,9 @@
   int film_grain_test_vector;
 #endif
 
+#if CONFIG_CDF_UPDATE_MODE
+  uint8_t cdf_update_mode;
+#endif  // CONFIG_CDF_UPDATE_MODE
 #if CONFIG_EXT_PARTITION
   aom_superblock_size_t superblock_size;
 #endif  // CONFIG_EXT_PARTITION
diff --git a/av1/encoder/encodetxb.c b/av1/encoder/encodetxb.c
index 83d4598..569b3d2 100644
--- a/av1/encoder/encodetxb.c
+++ b/av1/encoder/encodetxb.c
@@ -209,28 +209,32 @@
       break;
     case 3:
       ++counts->eob_multi128[plane][eob_multi_ctx][eob_pt - 1];
-      if (allow_update_cdf)
+      if (allow_update_cdf) {
         update_cdf(ec_ctx->eob_flag_cdf128[plane][eob_multi_ctx], eob_pt - 1,
                    8);
+      }
       break;
     case 4:
       ++counts->eob_multi256[plane][eob_multi_ctx][eob_pt - 1];
-      if (allow_update_cdf)
+      if (allow_update_cdf) {
         update_cdf(ec_ctx->eob_flag_cdf256[plane][eob_multi_ctx], eob_pt - 1,
                    9);
+      }
       break;
     case 5:
       ++counts->eob_multi512[plane][eob_multi_ctx][eob_pt - 1];
-      if (allow_update_cdf)
+      if (allow_update_cdf) {
         update_cdf(ec_ctx->eob_flag_cdf512[plane][eob_multi_ctx], eob_pt - 1,
                    10);
+      }
       break;
     case 6:
     default:
       ++counts->eob_multi1024[plane][eob_multi_ctx][eob_pt - 1];
-      if (allow_update_cdf)
+      if (allow_update_cdf) {
         update_cdf(ec_ctx->eob_flag_cdf1024[plane][eob_multi_ctx], eob_pt - 1,
                    11);
+      }
       break;
   }
 
diff --git a/build/cmake/aom_config_defaults.cmake b/build/cmake/aom_config_defaults.cmake
index 92d9ae1..6b8cda1 100644
--- a/build/cmake/aom_config_defaults.cmake
+++ b/build/cmake/aom_config_defaults.cmake
@@ -92,6 +92,7 @@
 set(CONFIG_AOM_QM_EXT 0 CACHE NUMBER "AV1 experiment flag.")
 set(CONFIG_BGSPRITE 0 CACHE NUMBER "AV1 experiment flag.")
 set(CONFIG_CDF_STORAGE_REDUCTION 0 CACHE NUMBER "AV1 experiment flag.")
+set(CONFIG_CDF_UPDATE_MODE 0 CACHE NUMBER "AV1 experiment flag.")
 set(CONFIG_CFL 1 CACHE NUMBER "AV1 experiment flag.")
 set(CONFIG_CICP 0 CACHE NUMBER "AV1 experiment flag.")
 set(CONFIG_COLORSPACE_HEADERS 0 CACHE NUMBER "AV1 experiment flag.")
