diff --git a/av1/common/entropy.h b/av1/common/entropy.h
index 5dc7649..d84c233 100644
--- a/av1/common/entropy.h
+++ b/av1/common/entropy.h
@@ -82,12 +82,14 @@
 
 #define NUM_BASE_LEVELS 2
 
-#define BR_CDF_SIZE (4)
 #if CONFIG_ADAPTIVE_HR
-#define COEFF_BASE_RANGE (1 * (BR_CDF_SIZE - 1))
+#define BR_NUM_ITERATIONS 1
 #else
-#define COEFF_BASE_RANGE (4 * (BR_CDF_SIZE - 1))
+#define BR_NUM_ITERATIONS 4
 #endif  // CONFIG_ADAPTIVE_HR
+
+#define BR_CDF_SIZE (4)
+#define COEFF_BASE_RANGE (BR_NUM_ITERATIONS * (BR_CDF_SIZE - 1))
 #define COEFF_CONTEXT_BITS 3
 #define COEFF_CONTEXT_MASK ((1 << COEFF_CONTEXT_BITS) - 1)
 #define MAX_BASE_BR_RANGE (COEFF_BASE_RANGE + NUM_BASE_LEVELS + 1)
diff --git a/av1/common/hr_coding.c b/av1/common/hr_coding.c
index 782e6e7..6fb9673 100644
--- a/av1/common/hr_coding.c
+++ b/av1/common/hr_coding.c
@@ -64,46 +64,23 @@
 
 #if CONFIG_ADAPTIVE_HR
 
-typedef struct adaptive_table {
-  int *table;
-  int initial_param;
-  unsigned int table_size;
-} adaptive_table;
+static int adaptive_table[] = { 10, 20, 40, 75, 135 };
 
-int intra_table[] = { 10, 20, 40, 75, 135 };
-int inter_table[] = { 20, 35, 55, 95, 170 };
-int idtx_table[] = { 25, 50, 130 };
-
-adaptive_table tables[] = {
-  { .table = intra_table, .initial_param = 1, .table_size = 5 },  // Intra table
-  { .table = inter_table, .initial_param = 1, .table_size = 5 },  // Inter table
-  { .table = idtx_table,
-    .initial_param = 1,
-    .table_size = 3 },  // IDTX table (only for inter)
-};
-
-int get_adaptive_param(adaptive_hr_info *info) {
-  adaptive_table *adp_table;
-  adp_table = &tables[0];
-
-  int m = adp_table->initial_param;
-
-  for (unsigned int i = 0; i < adp_table->table_size; ++i) {
-    if (info->context < adp_table->table[i]) break;
-    ++m;
-  }
-
-  return m;
+static int get_adaptive_param(int ctx) {
+  const int table_size = sizeof(adaptive_table) / sizeof(int);
+  int m = 0;
+  while (m < table_size && ctx >= adaptive_table[m]) ++m;
+  return m + 1;
 }
 
 void write_truncated_rice(aom_writer *w, int level, int m, int k, int cmax) {
-  const int mask = (1 << m) - 1;
   int q = level >> m;
 
   if (q >= cmax) {
     aom_write_literal(w, 0, cmax);
     write_exp_golomb(w, level - (cmax << m), k);
   } else {
+    const int mask = (1 << m) - 1;
     aom_write_literal(w, 0, q);
     aom_write_literal(w, 1, 1);
     aom_write_literal(w, level & mask, m);
@@ -113,15 +90,13 @@
 int read_truncated_rice(MACROBLOCKD *xd, aom_reader *r, int m, int k,
                         int cmax) {
   int q = aom_read_unary(r, cmax, ACCT_INFO("hr"));
-  if (q == cmax) return read_exp_golomb(xd, r, k) + (cmax << m);
-
-  int rem = aom_read_literal(r, m, ACCT_INFO("hr"));
+  int rem = (q == cmax) ? read_exp_golomb(xd, r, k)
+                        : aom_read_literal(r, m, ACCT_INFO("hr"));
   return rem + (q << m);
 }
 
 int get_truncated_rice_length(int level, int m, int k, int cmax) {
   int q = level >> m;
-
   if (q >= cmax) return cmax + get_exp_golomb_length(level - (cmax << m), k);
 
   return q + 1 + m;
@@ -135,6 +110,7 @@
     int lshifted = level - (cmax << m);
     if (lshifted == 0) {
       int golomb_len0 = k + 1;
+      // diff = (cmax + golomb_len0) - (cmax - 1 + 1 + m)
       *diff = golomb_len0 - m;
       return cmax + golomb_len0;
     }
@@ -150,23 +126,23 @@
   return q + 1 + m;
 }
 
-void write_adaptive_hr(aom_writer *w, int level, adaptive_hr_info *info) {
-  int m = get_adaptive_param(info);
+void write_adaptive_hr(aom_writer *w, int level, int ctx) {
+  int m = get_adaptive_param(ctx);
   write_truncated_rice(w, level, m, m + 1, AOMMIN(m + 4, 6));
 }
 
-int read_adaptive_hr(MACROBLOCKD *xd, aom_reader *r, adaptive_hr_info *info) {
-  int m = get_adaptive_param(info);
+int read_adaptive_hr(MACROBLOCKD *xd, aom_reader *r, int ctx) {
+  int m = get_adaptive_param(ctx);
   return read_truncated_rice(xd, r, m, m + 1, AOMMIN(m + 4, 6));
 }
 
-int get_adaptive_hr_length(int level, adaptive_hr_info *info) {
-  int m = get_adaptive_param(info);
+int get_adaptive_hr_length(int level, int ctx) {
+  int m = get_adaptive_param(ctx);
   return get_truncated_rice_length(level, m, m + 1, AOMMIN(m + 4, 6));
 }
 
-int get_adaptive_hr_length_diff(int level, adaptive_hr_info *info, int *diff) {
-  int m = get_adaptive_param(info);
+int get_adaptive_hr_length_diff(int level, int ctx, int *diff) {
+  int m = get_adaptive_param(ctx);
   return get_truncated_rice_length_diff(level, m, m + 1, AOMMIN(m + 4, 6),
                                         diff);
 }
diff --git a/av1/common/hr_coding.h b/av1/common/hr_coding.h
index 4b56c37..81fc3f1 100644
--- a/av1/common/hr_coding.h
+++ b/av1/common/hr_coding.h
@@ -39,26 +39,16 @@
 
 #if CONFIG_ADAPTIVE_HR
 
-typedef struct adaptive_hr_info {
-  int context;
-  TX_SIZE tx_size;
-  TX_TYPE tx_type;
-  int qindex;
-  bool is_inter;
-  bool is_dc;
-  bool is_eob;
-} adaptive_hr_info;
-
 void write_truncated_rice(aom_writer *w, int level, int m, int k, int cmax);
 int read_truncated_rice(MACROBLOCKD *xd, aom_reader *r, int m, int k, int cmax);
 int get_truncated_rice_length(int level, int m, int k, int cmax);
 int get_truncated_rice_length_diff(int level, int m, int k, int cmax,
                                    int *diff);
 
-void write_adaptive_hr(aom_writer *w, int level, adaptive_hr_info *info);
-int read_adaptive_hr(MACROBLOCKD *xd, aom_reader *r, adaptive_hr_info *info);
-int get_adaptive_hr_length(int level, adaptive_hr_info *info);
-int get_adaptive_hr_length_diff(int level, adaptive_hr_info *info, int *diff);
+void write_adaptive_hr(aom_writer *w, int level, int ctx);
+int read_adaptive_hr(MACROBLOCKD *xd, aom_reader *r, int ctx);
+int get_adaptive_hr_length(int level, int ctx);
+int get_adaptive_hr_length_diff(int level, int ctx, int *diff);
 
 #endif  // CONFIG_ADAPTIVE_HR
 
diff --git a/av1/decoder/decodetxb.c b/av1/decoder/decodetxb.c
index 3313fb7..4c5edb2 100644
--- a/av1/decoder/decodetxb.c
+++ b/av1/decoder/decodetxb.c
@@ -403,11 +403,6 @@
 
 #if CONFIG_ADAPTIVE_HR
   const TX_CLASS tx_class = tx_type_to_class[get_primary_tx_type(tx_type)];
-  adaptive_hr_info hr_info = { .tx_size = tx_size,
-                               .tx_type = tx_type,
-                               .qindex = xd->qindex[mbmi->segment_id],
-                               .is_inter =
-                                   is_inter_block(mbmi, xd->tree_type) };
 #endif  // CONFIG_ADAPTIVE_HR
 
 #if CONFIG_INSPECTION
@@ -461,10 +456,8 @@
       if (level >= MAX_BASE_BR_RANGE) {
 #if CONFIG_ADAPTIVE_HR
         bool is_eob = c == (eob_data->eob - 1);
-        hr_info.is_dc = (c == 0);
-        hr_info.is_eob = is_eob;
-        hr_info.context = get_hr_ctx_skip(levels, pos, bwl, is_eob, tx_class);
-        level += read_adaptive_hr(xd, r, &hr_info);
+        int hr_ctx = get_hr_ctx_skip(levels, pos, bwl, is_eob, tx_class);
+        level += read_adaptive_hr(xd, r, hr_ctx);
 
         levels[get_padded_idx_left(pos, bwl)] =
             (uint8_t)(AOMMIN(level, UINT8_MAX));
@@ -580,14 +573,6 @@
   const qm_val_t *iqmatrix =
       av1_get_iqmatrix(&cm->quant_params, xd, plane, tx_size, tx_type);
 
-#if CONFIG_ADAPTIVE_HR
-  adaptive_hr_info hr_info = { .tx_size = tx_size,
-                               .tx_type = tx_type,
-                               .qindex = xd->qindex[mbmi->segment_id],
-                               .is_inter =
-                                   is_inter_block(mbmi, xd->tree_type) };
-#endif  // CONFIG_ADAPTIVE_HR
-
 #if CONFIG_INSPECTION
   for (int c = 0; c < width * height; c++) {
     dequant_values[c] = get_dqv(dequant, c, iqmatrix);
@@ -763,11 +748,9 @@
         if (level >= (MAX_BASE_BR_RANGE << 1)) {
 #if CONFIG_ADAPTIVE_HR
           bool is_eob = c == (*eob - 1);
-          hr_info.is_dc = (c == 0);
-          hr_info.is_eob = is_eob;
           // Use context divided by 2 since the coefficient is also divided by 2
-          hr_info.context = get_hr_ctx(levels, pos, bwl, is_eob, tx_class) >> 1;
-          level += (read_adaptive_hr(xd, r, &hr_info) << 1);
+          int hr_ctx = get_hr_ctx(levels, pos, bwl, is_eob, tx_class) >> 1;
+          level += (read_adaptive_hr(xd, r, hr_ctx) << 1);
 
           levels[get_padded_idx(pos, bwl)] =
               (uint8_t)(AOMMIN(level, UINT8_MAX));
@@ -783,10 +766,8 @@
           if (level >= LF_MAX_BASE_BR_RANGE) {
 #if CONFIG_ADAPTIVE_HR
             bool is_eob = c == (*eob - 1);
-            hr_info.is_dc = (c == 0);
-            hr_info.is_eob = is_eob;
-            hr_info.context = get_hr_ctx(levels, pos, bwl, is_eob, tx_class);
-            level += read_adaptive_hr(xd, r, &hr_info);
+            int hr_ctx = get_hr_ctx(levels, pos, bwl, is_eob, tx_class);
+            level += read_adaptive_hr(xd, r, hr_ctx);
 
             levels[get_padded_idx(pos, bwl)] =
                 (uint8_t)(AOMMIN(level, UINT8_MAX));
@@ -798,10 +779,8 @@
           if (level >= MAX_BASE_BR_RANGE) {
 #if CONFIG_ADAPTIVE_HR
             bool is_eob = c == (*eob - 1);
-            hr_info.is_dc = (c == 0);
-            hr_info.is_eob = is_eob;
-            hr_info.context = get_hr_ctx(levels, pos, bwl, is_eob, tx_class);
-            level += read_adaptive_hr(xd, r, &hr_info);
+            int hr_ctx = get_hr_ctx(levels, pos, bwl, is_eob, tx_class);
+            level += read_adaptive_hr(xd, r, hr_ctx);
 
             levels[get_padded_idx(pos, bwl)] =
                 (uint8_t)(AOMMIN(level, UINT8_MAX));
diff --git a/av1/encoder/encodetxb.c b/av1/encoder/encodetxb.c
index e8a24cb..b7a2ce8 100644
--- a/av1/encoder/encodetxb.c
+++ b/av1/encoder/encodetxb.c
@@ -278,32 +278,32 @@
 
 #if CONFIG_ADAPTIVE_HR
 static INLINE int get_br_cost(tran_low_t level, const int *coeff_lps,
-                              adaptive_hr_info *info) {
+                              int hr_ctx) {
   const int base_range = AOMMIN(level - 1 - NUM_BASE_LEVELS, COEFF_BASE_RANGE);
   int cost = coeff_lps[base_range];
 
   if (level >= 1 + NUM_BASE_LEVELS + COEFF_BASE_RANGE) {
     const int r = level - COEFF_BASE_RANGE - NUM_BASE_LEVELS - 1;
-    cost += av1_cost_literal(get_adaptive_hr_length(r, info));
+    cost += av1_cost_literal(get_adaptive_hr_length(r, hr_ctx));
   }
   return cost;
 }
 
 static INLINE int get_br_lf_cost(tran_low_t level, const int *coeff_lps,
-                                 adaptive_hr_info *info) {
+                                 int hr_ctx) {
   const int base_range =
       AOMMIN(level - 1 - LF_NUM_BASE_LEVELS, COEFF_BASE_RANGE);
   int cost = coeff_lps[base_range];
 
   if (level >= 1 + LF_NUM_BASE_LEVELS + COEFF_BASE_RANGE) {
     const int r = level - COEFF_BASE_RANGE - LF_NUM_BASE_LEVELS - 1;
-    cost += av1_cost_literal(get_adaptive_hr_length(r, info));
+    cost += av1_cost_literal(get_adaptive_hr_length(r, hr_ctx));
   }
   return cost;
 }
 
 static INLINE int get_br_cost_with_diff(tran_low_t level, const int *coeff_lps,
-                                        int *diff, adaptive_hr_info *info) {
+                                        int *diff, int hr_ctx) {
   const int base_range = AOMMIN(level - 1 - NUM_BASE_LEVELS, COEFF_BASE_RANGE);
   int cost = coeff_lps[base_range];
 
@@ -313,7 +313,7 @@
   if (level >= COEFF_BASE_RANGE + 1 + NUM_BASE_LEVELS) {
     const int r = level - COEFF_BASE_RANGE - NUM_BASE_LEVELS - 1;
     int bits, diff_bits;
-    bits = get_adaptive_hr_length_diff(r, info, &diff_bits);
+    bits = get_adaptive_hr_length_diff(r, hr_ctx, &diff_bits);
     *diff += av1_cost_literal(diff_bits);
     cost += av1_cost_literal(bits);
   }
@@ -323,7 +323,7 @@
 
 static INLINE int get_br_lf_cost_with_diff(tran_low_t level,
                                            const int *coeff_lps, int *diff,
-                                           adaptive_hr_info *info) {
+                                           int hr_ctx) {
   const int base_range =
       AOMMIN(level - 1 - LF_NUM_BASE_LEVELS, COEFF_BASE_RANGE);
   int cost = coeff_lps[base_range];
@@ -334,7 +334,7 @@
   if (level >= COEFF_BASE_RANGE + 1 + LF_NUM_BASE_LEVELS) {
     const int r = level - COEFF_BASE_RANGE - LF_NUM_BASE_LEVELS - 1;
     int bits, diff_bits;
-    bits = get_adaptive_hr_length_diff(r, info, &diff_bits);
+    bits = get_adaptive_hr_length_diff(r, hr_ctx, &diff_bits);
     *diff += av1_cost_literal(diff_bits);
     cost += av1_cost_literal(bits);
   }
@@ -748,12 +748,6 @@
 
 #if CONFIG_ADAPTIVE_HR
   const TX_CLASS tx_class = tx_type_to_class[get_primary_tx_type(tx_type)];
-  const MB_MODE_INFO *mbmi = xd->mi[0];
-  adaptive_hr_info hr_info = { .tx_size = tx_size,
-                               .tx_type = tx_type,
-                               .qindex = xd->qindex[mbmi->segment_id],
-                               .is_inter =
-                                   is_inter_block(mbmi, xd->tree_type) };
 #endif  // CONFIG_ADAPTIVE_HR
 
   DECLARE_ALIGNED(16, int8_t, coeff_contexts[MAX_TX_SQUARE]);
@@ -801,11 +795,9 @@
       if (level > COEFF_BASE_RANGE + NUM_BASE_LEVELS) {
 #if CONFIG_ADAPTIVE_HR
         bool is_eob = c == (eob - 1);
-        hr_info.is_dc = (c == 0);
-        hr_info.is_eob = is_eob;
-        hr_info.context = get_hr_ctx_skip(levels, pos, bwl, is_eob, tx_class);
+        int hr_ctx = get_hr_ctx_skip(levels, pos, bwl, is_eob, tx_class);
         write_adaptive_hr(w, level - COEFF_BASE_RANGE - 1 - NUM_BASE_LEVELS,
-                          &hr_info);
+                          hr_ctx);
 #else
         write_exp_golomb(w, level - COEFF_BASE_RANGE - 1 - NUM_BASE_LEVELS, 0);
 #endif  // CONFIG_ADAPTIVE_HR
@@ -904,15 +896,6 @@
 
   const int bwl = get_txb_bwl(tx_size);
 
-#if CONFIG_ADAPTIVE_HR
-  const MB_MODE_INFO *mbmi = xd->mi[0];
-  adaptive_hr_info hr_info = { .tx_size = tx_size,
-                               .tx_type = tx_type,
-                               .qindex = xd->qindex[mbmi->segment_id],
-                               .is_inter =
-                                   is_inter_block(mbmi, xd->tree_type) };
-#endif  // CONFIG_ADAPTIVE_HR
-
   bool enable_parity_hiding = cm->features.allow_parity_hiding &&
                               !xd->lossless[xd->mi[0]->segment_id] &&
                               plane == PLANE_TYPE_Y &&
@@ -1112,13 +1095,10 @@
         if (q_index > COEFF_BASE_RANGE + NUM_BASE_LEVELS) {
 #if CONFIG_ADAPTIVE_HR
           bool is_eob = c == (eob - 1);
-          hr_info.is_dc = (c == 0);
-          hr_info.is_eob = is_eob;
           // Use context divided by 2 since the coefficient is also divided by 2
-          hr_info.context =
-              get_hr_ctx(levels, scan[0], bwl, is_eob, tx_class) >> 1;
+          int hr_ctx = get_hr_ctx(levels, scan[0], bwl, is_eob, tx_class) >> 1;
           write_adaptive_hr(w, q_index - COEFF_BASE_RANGE - 1 - NUM_BASE_LEVELS,
-                            &hr_info);
+                            hr_ctx);
 #else
           write_exp_golomb(w, q_index - COEFF_BASE_RANGE - 1 - NUM_BASE_LEVELS,
                            0);
@@ -1133,11 +1113,9 @@
           if (level > COEFF_BASE_RANGE + LF_NUM_BASE_LEVELS) {
 #if CONFIG_ADAPTIVE_HR
             bool is_eob = c == (eob - 1);
-            hr_info.is_dc = (c == 0);
-            hr_info.is_eob = is_eob;
-            hr_info.context = get_hr_ctx(levels, pos, bwl, is_eob, tx_class);
+            int hr_ctx = get_hr_ctx(levels, pos, bwl, is_eob, tx_class);
             write_adaptive_hr(
-                w, level - COEFF_BASE_RANGE - 1 - LF_NUM_BASE_LEVELS, &hr_info);
+                w, level - COEFF_BASE_RANGE - 1 - LF_NUM_BASE_LEVELS, hr_ctx);
 #else
             write_exp_golomb(
                 w, level - COEFF_BASE_RANGE - 1 - LF_NUM_BASE_LEVELS, 0);
@@ -1147,11 +1125,9 @@
           if (level > COEFF_BASE_RANGE + NUM_BASE_LEVELS) {
 #if CONFIG_ADAPTIVE_HR
             bool is_eob = c == (eob - 1);
-            hr_info.is_dc = (c == 0);
-            hr_info.is_eob = is_eob;
-            hr_info.context = get_hr_ctx(levels, pos, bwl, is_eob, tx_class);
+            int hr_ctx = get_hr_ctx(levels, pos, bwl, is_eob, tx_class);
             write_adaptive_hr(w, level - COEFF_BASE_RANGE - 1 - NUM_BASE_LEVELS,
-                              &hr_info);
+                              hr_ctx);
 #else
             write_exp_golomb(w, level - COEFF_BASE_RANGE - 1 - NUM_BASE_LEVELS,
                              0);
@@ -1427,11 +1403,6 @@
 
 #if CONFIG_ADAPTIVE_HR
   const TX_CLASS tx_class = tx_type_to_class[get_primary_tx_type(tx_type)];
-  adaptive_hr_info hr_info = { .tx_size = tx_size,
-                               .tx_type = tx_type,
-                               .qindex = xd->qindex[mbmi->segment_id],
-                               .is_inter =
-                                   is_inter_block(mbmi, xd->tree_type) };
 #endif  // CONFIG_ADAPTIVE_HR
 
   const int eob_multi_size = txsize_log2_minus4[tx_size];
@@ -1467,10 +1438,8 @@
         const int ctx = get_br_ctx_skip(levels, pos, bwl);
 #if CONFIG_ADAPTIVE_HR
         bool is_eob = c == (eob - 1);
-        hr_info.is_dc = (c == 0);
-        hr_info.is_eob = is_eob;
-        hr_info.context = get_hr_ctx_skip(levels, pos, bwl, is_eob, tx_class);
-        cost += get_br_cost(level, lps_cost[ctx], &hr_info);
+        int hr_ctx = get_hr_ctx_skip(levels, pos, bwl, is_eob, tx_class);
+        cost += get_br_cost(level, lps_cost[ctx], hr_ctx);
 #else
         cost += get_br_cost(level, lps_cost[ctx]);
 #endif  // CONFIG_ADAPTIVE_HR
@@ -1538,15 +1507,6 @@
   int cost = coeff_costs->txb_skip_cost[txb_skip_ctx][0];
 #endif  // CONFIG_CONTEXT_DERIVATION
 
-#if CONFIG_ADAPTIVE_HR
-  const MB_MODE_INFO *mbmi = xd->mi[0];
-  adaptive_hr_info hr_info = { .tx_size = tx_size,
-                               .tx_type = tx_type,
-                               .qindex = xd->qindex[mbmi->segment_id],
-                               .is_inter =
-                                   is_inter_block(mbmi, xd->tree_type) };
-#endif  // CONFIG_ADAPTIVE_HR
-
   av1_txb_init_levels(qcoeff, width, height, levels);
 
   const int bob_code = p->bobs[block];
@@ -1597,10 +1557,8 @@
           const int ctx = get_br_ctx_lf_eob(pos, tx_class);
 #if CONFIG_ADAPTIVE_HR
           bool is_eob = c == (eob - 1);
-          hr_info.is_dc = (c == 0);
-          hr_info.is_eob = is_eob;
-          hr_info.context = get_hr_ctx(levels, pos, bwl, is_eob, tx_class);
-          cost += get_br_lf_cost(level, lps_lf_cost[ctx], &hr_info);
+          int hr_ctx = get_hr_ctx(levels, pos, bwl, is_eob, tx_class);
+          cost += get_br_lf_cost(level, lps_lf_cost[ctx], hr_ctx);
 #else
           cost += get_br_lf_cost(level, lps_lf_cost[ctx]);
 #endif  // CONFIG_ADAPTIVE_HR
@@ -1610,10 +1568,8 @@
           const int ctx = 7; /* get_lf_ctx_eob */
 #if CONFIG_ADAPTIVE_HR
           bool is_eob = c == (eob - 1);
-          hr_info.is_dc = (c == 0);
-          hr_info.is_eob = is_eob;
-          hr_info.context = get_hr_ctx(levels, pos, bwl, is_eob, tx_class);
-          cost += get_br_cost(level, lps_cost[ctx], &hr_info);
+          int hr_ctx = get_hr_ctx(levels, pos, bwl, is_eob, tx_class);
+          cost += get_br_cost(level, lps_cost[ctx], hr_ctx);
 #else
           cost += get_br_cost(level, lps_cost[ctx]);
 #endif  // CONFIG_ADAPTIVE_HR
@@ -1680,10 +1636,8 @@
           const int ctx = get_br_lf_ctx(levels, pos, bwl, tx_class);
 #if CONFIG_ADAPTIVE_HR
           bool is_eob = c == (eob - 1);
-          hr_info.is_dc = (c == 0);
-          hr_info.is_eob = is_eob;
-          hr_info.context = get_hr_ctx(levels, pos, bwl, is_eob, tx_class);
-          cost += get_br_lf_cost(level, lps_lf_cost[ctx], &hr_info);
+          int hr_ctx = get_hr_ctx(levels, pos, bwl, is_eob, tx_class);
+          cost += get_br_lf_cost(level, lps_lf_cost[ctx], hr_ctx);
 #else
           cost += get_br_lf_cost(level, lps_lf_cost[ctx]);
 #endif  // CONFIG_ADAPTIVE_HR
@@ -1693,10 +1647,8 @@
           const int ctx = get_br_ctx(levels, pos, bwl, tx_class);
 #if CONFIG_ADAPTIVE_HR
           bool is_eob = c == (eob - 1);
-          hr_info.is_dc = (c == 0);
-          hr_info.is_eob = is_eob;
-          hr_info.context = get_hr_ctx(levels, pos, bwl, is_eob, tx_class);
-          cost += get_br_cost(level, lps_cost[ctx], &hr_info);
+          int hr_ctx = get_hr_ctx(levels, pos, bwl, is_eob, tx_class);
+          cost += get_br_cost(level, lps_cost[ctx], hr_ctx);
 #else
           cost += get_br_cost(level, lps_cost[ctx]);
 #endif  // CONFIG_ADAPTIVE_HR
@@ -1726,12 +1678,9 @@
         const int ctx = get_par_br_ctx(levels, pos, bwl, tx_class);
 #if CONFIG_ADAPTIVE_HR
         bool is_eob = c == (eob - 1);
-        hr_info.is_dc = (c == 0);
-        hr_info.is_eob = is_eob;
         // Use context divided by 2 since the coefficient is also divided by 2
-        hr_info.context = get_hr_ctx(levels, pos, bwl, is_eob, tx_class) >> 1;
-        cost +=
-            get_br_cost(q_index, coeff_costs_ph->lps_ph_cost[ctx], &hr_info);
+        int hr_ctx = get_hr_ctx(levels, pos, bwl, is_eob, tx_class) >> 1;
+        cost += get_br_cost(q_index, coeff_costs_ph->lps_ph_cost[ctx], hr_ctx);
 #else
         cost += get_br_cost(q_index, coeff_costs_ph->lps_ph_cost[ctx]);
 #endif  // CONFIG_ADAPTIVE_HR
@@ -1773,10 +1722,8 @@
           const int ctx = get_br_lf_ctx(levels, pos, bwl, tx_class);
 #if CONFIG_ADAPTIVE_HR
           bool is_eob = c == (eob - 1);
-          hr_info.is_dc = (c == 0);
-          hr_info.is_eob = is_eob;
-          hr_info.context = get_hr_ctx(levels, pos, bwl, is_eob, tx_class);
-          cost += get_br_lf_cost(level, lps_lf_cost[ctx], &hr_info);
+          int hr_ctx = get_hr_ctx(levels, pos, bwl, is_eob, tx_class);
+          cost += get_br_lf_cost(level, lps_lf_cost[ctx], hr_ctx);
 #else
           cost += get_br_lf_cost(level, lps_lf_cost[ctx]);
 #endif  // CONFIG_ADAPTIVE_HR
@@ -1786,10 +1733,8 @@
           const int ctx = get_br_ctx(levels, pos, bwl, tx_class);
 #if CONFIG_ADAPTIVE_HR
           bool is_eob = c == (eob - 1);
-          hr_info.is_dc = (c == 0);
-          hr_info.is_eob = is_eob;
-          hr_info.context = get_hr_ctx(levels, pos, bwl, is_eob, tx_class);
-          cost += get_br_cost(level, lps_cost[ctx], &hr_info);
+          int hr_ctx = get_hr_ctx(levels, pos, bwl, is_eob, tx_class);
+          cost += get_br_cost(level, lps_cost[ctx], hr_ctx);
 #else
           cost += get_br_cost(level, lps_cost[ctx]);
 #endif  // CONFIG_ADAPTIVE_HR
@@ -2056,12 +2001,7 @@
 static AOM_FORCE_INLINE int get_two_coeff_cost_simple(
     int plane, int ci, tran_low_t abs_qc, int coeff_ctx,
     const LV_MAP_COEFF_COST *txb_costs, int bwl, TX_CLASS tx_class,
-    const uint8_t *levels, int *cost_low
-#if CONFIG_ADAPTIVE_HR
-    ,
-    adaptive_hr_info *hr_info
-#endif  // CONFIG_ADAPTIVE_HR
-) {
+    const uint8_t *levels, int *cost_low) {
   // this simple version assumes the coeff's scan_idx is not DC (scan_idx != 0)
   // and not the last (scan_idx != eob - 1)
   assert(ci > 0);
@@ -2121,11 +2061,9 @@
         const int br_ctx = get_br_lf_ctx(levels, ci, bwl, tx_class);
         int brcost_diff = 0;
 #if CONFIG_ADAPTIVE_HR
-        hr_info->is_dc = false;
-        hr_info->is_eob = false;
-        hr_info->context = get_hr_ctx(levels, ci, bwl, false, tx_class);
+        int hr_ctx = get_hr_ctx(levels, ci, bwl, false, tx_class);
         cost += get_br_lf_cost_with_diff(abs_qc, txb_costs->lps_lf_cost[br_ctx],
-                                         &brcost_diff, hr_info);
+                                         &brcost_diff, hr_ctx);
 #else
         cost += get_br_lf_cost_with_diff(abs_qc, txb_costs->lps_lf_cost[br_ctx],
                                          &brcost_diff);
@@ -2137,11 +2075,9 @@
         const int br_ctx = get_br_ctx(levels, ci, bwl, tx_class);
         int brcost_diff = 0;
 #if CONFIG_ADAPTIVE_HR
-        hr_info->is_dc = false;
-        hr_info->is_eob = false;
-        hr_info->context = get_hr_ctx(levels, ci, bwl, false, tx_class);
+        int hr_ctx = get_hr_ctx(levels, ci, bwl, false, tx_class);
         cost += get_br_cost_with_diff(abs_qc, txb_costs->lps_cost[br_ctx],
-                                      &brcost_diff, hr_info);
+                                      &brcost_diff, hr_ctx);
 #else
         cost += get_br_cost_with_diff(abs_qc, txb_costs->lps_cost[br_ctx],
                                       &brcost_diff);
@@ -2164,13 +2100,7 @@
                                      int32_t *tmp_sign
 #endif  // CONFIG_CONTEXT_DERIVATION
                                      ,
-                                     int plane
-#if CONFIG_ADAPTIVE_HR
-                                     ,
-                                     const uint8_t *levels,
-                                     adaptive_hr_info *hr_info
-#endif  // CONFIG_ADAPTIVE_HR
-) {
+                                     int plane) {
   int cost = 0;
   const int row = ci >> bwl;
   const int col = ci - (row << bwl);
@@ -2206,10 +2136,8 @@
       if (abs_qc > LF_NUM_BASE_LEVELS) {
         int br_ctx = get_br_ctx_lf_eob(ci, tx_class);
 #if CONFIG_ADAPTIVE_HR
-        hr_info->is_eob = true;
-        hr_info->is_dc = (ci == 0);
-        hr_info->context = get_hr_ctx(levels, ci, bwl, true, tx_class);
-        cost += get_br_lf_cost(abs_qc, txb_costs->lps_lf_cost[br_ctx], hr_info);
+        int hr_ctx = 0; /* get_hr_ctx */
+        cost += get_br_lf_cost(abs_qc, txb_costs->lps_lf_cost[br_ctx], hr_ctx);
 #else
         cost += get_br_lf_cost(abs_qc, txb_costs->lps_lf_cost[br_ctx]);
 #endif  // CONFIG_ADAPTIVE_HR
@@ -2218,10 +2146,8 @@
       if (abs_qc > NUM_BASE_LEVELS) {
         int br_ctx = 7; /* get_br_ctx_eob */
 #if CONFIG_ADAPTIVE_HR
-        hr_info->is_eob = true;
-        hr_info->is_dc = (ci == 0);
-        hr_info->context = get_hr_ctx(levels, ci, bwl, true, tx_class);
-        cost += get_br_cost(abs_qc, txb_costs->lps_cost[br_ctx], hr_info);
+        int hr_ctx = 0; /* get_hr_ctx */
+        cost += get_br_cost(abs_qc, txb_costs->lps_cost[br_ctx], hr_ctx);
 #else
         cost += get_br_cost(abs_qc, txb_costs->lps_cost[br_ctx]);
 #endif  // CONFIG_ADAPTIVE_HR
@@ -2242,12 +2168,7 @@
                                          int32_t *tmp_sign
 #endif  // CONFIG_CONTEXT_DERIVATION
                                          ,
-                                         int plane
-#if CONFIG_ADAPTIVE_HR
-                                         ,
-                                         adaptive_hr_info *hr_info
-#endif  // CONFIG_ADAPTIVE_HR
-) {
+                                         int plane) {
   int cost = 0;
   if (is_last) {
     const int row = ci >> bwl;
@@ -2304,10 +2225,8 @@
           br_ctx = get_br_lf_ctx(levels, ci, bwl, tx_class);
 
 #if CONFIG_ADAPTIVE_HR
-        hr_info->is_dc = (ci == 0);
-        hr_info->is_eob = is_last;
-        hr_info->context = get_hr_ctx(levels, ci, bwl, is_last, tx_class);
-        cost += get_br_lf_cost(abs_qc, txb_costs->lps_lf_cost[br_ctx], hr_info);
+        int hr_ctx = get_hr_ctx(levels, ci, bwl, is_last, tx_class);
+        cost += get_br_lf_cost(abs_qc, txb_costs->lps_lf_cost[br_ctx], hr_ctx);
 #else
         cost += get_br_lf_cost(abs_qc, txb_costs->lps_lf_cost[br_ctx]);
 #endif  // CONFIG_ADAPTIVE_HR
@@ -2321,10 +2240,8 @@
           br_ctx = get_br_ctx(levels, ci, bwl, tx_class);
 
 #if CONFIG_ADAPTIVE_HR
-        hr_info->is_dc = (ci == 0);
-        hr_info->is_eob = is_last;
-        hr_info->context = get_hr_ctx(levels, ci, bwl, is_last, tx_class);
-        cost += get_br_cost(abs_qc, txb_costs->lps_cost[br_ctx], hr_info);
+        int hr_ctx = get_hr_ctx(levels, ci, bwl, is_last, tx_class);
+        cost += get_br_cost(abs_qc, txb_costs->lps_cost[br_ctx], hr_ctx);
 #else
         cost += get_br_cost(abs_qc, txb_costs->lps_cost[br_ctx]);
 #endif  // CONFIG_ADAPTIVE_HR
@@ -2362,12 +2279,7 @@
     int32_t *tmp_sign
 #endif  // CONFIG_CONTEXT_DERIVATION
     ,
-    int plane, coeff_info *coef_info, bool enable_parity_hiding
-#if CONFIG_ADAPTIVE_HR
-    ,
-    adaptive_hr_info *hr_info
-#endif  // CONFIG_ADAPTIVE_HR
-) {
+    int plane, coeff_info *coef_info, bool enable_parity_hiding) {
   const int dqv = get_dqv(dequant, scan[si], iqmatrix);
   const int ci = scan[si];
   const tran_low_t qc = qcoeff[ci];
@@ -2398,12 +2310,7 @@
                                tmp_sign
 #endif  // CONFIG_CONTEXT_DERIVATION
                                ,
-                               plane
-#if CONFIG_ADAPTIVE_HR
-                               ,
-                               hr_info
-#endif  // CONFIG_ADAPTIVE_HR
-        );
+                               plane);
     const int64_t rd = RDCOST(rdmult, rate, dist);
 
     tran_low_t qc_low, dqc_low;
@@ -2433,12 +2340,7 @@
                                  tmp_sign
 #endif  // CONFIG_CONTEXT_DERIVATION
                                  ,
-                                 plane
-#if CONFIG_ADAPTIVE_HR
-                                 ,
-                                 hr_info
-#endif  // CONFIG_ADAPTIVE_HR
-          );
+                                 plane);
     }
 
     rd_low = RDCOST(rdmult, rate_low, dist_low);
@@ -2467,12 +2369,7 @@
     const LV_MAP_COEFF_COST *txb_costs, const tran_low_t *tcoeff,
     tran_low_t *qcoeff, tran_low_t *dqcoeff, uint8_t *levels,
     const qm_val_t *iqmatrix, coeff_info *coef_info, bool enable_parity_hiding,
-    int plane
-#if CONFIG_ADAPTIVE_HR
-    ,
-    adaptive_hr_info *hr_info
-#endif  // CONFIG_ADAPTIVE_HR
-) {
+    int plane) {
   const int dqv = get_dqv(dequant, scan[si], iqmatrix);
   (void)eob;
   // this simple version assumes the coeff's scan_idx is not DC (scan_idx != 0)
@@ -2509,12 +2406,7 @@
     int rate_low = 0;
     const int rate =
         get_two_coeff_cost_simple(plane, ci, abs_qc, coeff_ctx, txb_costs, bwl,
-                                  tx_class, levels, &rate_low
-#if CONFIG_ADAPTIVE_HR
-                                  ,
-                                  hr_info
-#endif  // CONFIG_ADAPTIVE_HR
-        );
+                                  tx_class, levels, &rate_low);
 
     if (abs_dqc < abs_tqc) {
       *accu_rate += rate;
@@ -2569,12 +2461,7 @@
     int32_t *tmp_sign
 #endif  // CONFIG_CONTEXT_DERIVATION
     ,
-    int plane, coeff_info *coef_info, bool enable_parity_hiding
-#if CONFIG_ADAPTIVE_HR
-    ,
-    adaptive_hr_info *hr_info
-#endif  // CONFIG_ADAPTIVE_HR
-) {
+    int plane, coeff_info *coef_info, bool enable_parity_hiding) {
   const int bwl = get_txb_bwl(tx_size);
   const int height = get_txb_high(tx_size);
   const int dqv = get_dqv(dequant, scan[si], iqmatrix);
@@ -2619,12 +2506,7 @@
                                tmp_sign
 #endif  // CONFIG_CONTEXT_DERIVATION
                                ,
-                               plane
-#if CONFIG_ADAPTIVE_HR
-                               ,
-                               hr_info
-#endif  // CONFIG_ADAPTIVE_HR
-        );
+                               plane);
     int64_t rd = RDCOST(rdmult, *accu_rate + rate, *accu_dist + dist);
 
     tran_low_t qc_low, dqc_low;
@@ -2653,12 +2535,7 @@
                                  tmp_sign
 #endif  // CONFIG_CONTEXT_DERIVATION
                                  ,
-                                 plane
-#if CONFIG_ADAPTIVE_HR
-                                 ,
-                                 hr_info
-#endif  // CONFIG_ADAPTIVE_HR
-          );
+                                 plane);
       rd_low = RDCOST(rdmult, *accu_rate + rate_low, *accu_dist + dist_low);
     }
     int rate_up_backup = rate;
@@ -2680,12 +2557,7 @@
                                           tmp_sign
 #endif  // CONFIG_CONTEXT_DERIVATION
                                           ,
-                                          plane
-#if CONFIG_ADAPTIVE_HR
-                                          ,
-                                          levels, hr_info
-#endif  // CONFIG_ADAPTIVE_HR
-                       );
+                                          plane);
     int64_t dist_new_eob = dist;
     int64_t rd_new_eob = RDCOST(rdmult, rate_coeff_eob, dist_new_eob);
     int rateeobup = rate_coeff_eob;
@@ -2700,12 +2572,7 @@
                                             tmp_sign
 #endif  // CONFIG_CONTEXT_DERIVATION
                                             ,
-                                            plane
-#if CONFIG_ADAPTIVE_HR
-                                            ,
-                                            levels, hr_info
-#endif  // CONFIG_ADAPTIVE_HR
-                         );
+                                            plane);
       const int64_t dist_new_eob_low = dist_low;
       const int64_t rd_new_eob_low =
           RDCOST(rdmult, rate_coeff_eob_low, dist_new_eob_low);
@@ -2793,10 +2660,6 @@
                                       ,
                                       int plane
 #endif  // CONFIG_CHROMA_TX_COEFF_CODING
-#if CONFIG_ADAPTIVE_HR
-                                      ,
-                                      adaptive_hr_info *hr_info
-#endif  // CONFIG_ADAPTIVE_HR
 ) {
   tran_low_t abslevel = abs(level), q_index = abslevel >> 1;
   int sign = level < 0;
@@ -2821,22 +2684,15 @@
                                  0
 #endif  // CONFIG_CONTEXT_DERIVATION
                                  ,
-                                 0
-#if CONFIG_ADAPTIVE_HR
-                                 ,
-                                 hr_info
-#endif  // CONFIG_ADAPTIVE_HR
-  );
+                                 0);
 
   const int base_ctx_ph = get_base_ctx_ph(levels, pos, bwl, tx_class);
   int rate_ph = txb_costs_ph->base_ph_cost[base_ctx_ph][AOMMIN(q_index, 3)];
   if (q_index > NUM_BASE_LEVELS) {
     int br_ctx = get_par_br_ctx(levels, pos, bwl, tx_class);
 #if CONFIG_ADAPTIVE_HR
-    hr_info->is_eob = false;
-    hr_info->is_dc = (pos == 0);
-    hr_info->context = get_hr_ctx(levels, pos, bwl, false, tx_class);
-    rate_ph += get_br_cost(q_index, txb_costs_ph->lps_ph_cost[br_ctx], hr_info);
+    int hr_ctx = get_hr_ctx(levels, pos, bwl, false, tx_class);
+    rate_ph += get_br_cost(q_index, txb_costs_ph->lps_ph_cost[br_ctx], hr_ctx);
 #else
     rate_ph += get_br_cost(q_index, txb_costs_ph->lps_ph_cost[br_ctx]);
 #endif  // CONFIG_ADAPTIVE_HR
@@ -2861,12 +2717,7 @@
     const LV_MAP_COEFF_COST *txb_costs_ph, int dc_sign_ctx, TX_CLASS tx_class,
     uint8_t *levels, const int bwl, const int64_t rdmult,
     const int32_t *dequant, const qm_val_t *iqmatrix, tune_cand *t_cand,
-    int rate_cur
-#if CONFIG_ADAPTIVE_HR
-    ,
-    adaptive_hr_info *hr_info
-#endif  // CONFIG_ADAPTIVE_HR
-) {
+    int rate_cur) {
   const int dqv = get_dqv(dequant, pos, iqmatrix);
   tran_low_t abslevel = abs(qcoeff), abstqc = abs(tcoeff);
   int64_t dist = get_coeff_dist(tcoeff, dqcoeff, shift);
@@ -2888,11 +2739,9 @@
     if (q_index > NUM_BASE_LEVELS) {
       int br_ctx = get_par_br_ctx(levels, pos, bwl, tx_class);
 #if CONFIG_ADAPTIVE_HR
-      hr_info->is_eob = false;
-      hr_info->is_dc = (pos == 0);
-      hr_info->context = get_hr_ctx(levels, pos, bwl, 0, tx_class);
+      int hr_ctx = get_hr_ctx(levels, pos, bwl, false, tx_class);
       rate_cand +=
-          get_br_cost(q_index, txb_costs_ph->lps_ph_cost[br_ctx], hr_info);
+          get_br_cost(q_index, txb_costs_ph->lps_ph_cost[br_ctx], hr_ctx);
 #else
       rate_cand += get_br_cost(q_index, txb_costs_ph->lps_ph_cost[br_ctx]);
 #endif  // CONFIG_ADAPTIVE_HR
@@ -3033,10 +2882,6 @@
     ,
     int plane
 #endif  // CONFIG_CHROMA_TX_COEFF_CODING
-#if CONFIG_ADAPTIVE_HR
-    ,
-    adaptive_hr_info *hr_info
-#endif  // CONFIG_ADAPTIVE_HR
 ) {
   int nzsbb = 0, sum_abs1 = 0;
   for (int scan_idx = eob - 1; scan_idx > 0; --scan_idx) {
@@ -3061,10 +2906,6 @@
                 ,
                 plane
 #endif  // CONFIG_CHROMA_TX_COEFF_CODING
-#if CONFIG_ADAPTIVE_HR
-                ,
-                hr_info
-#endif  // CONFIG_ADAPTIVE_HR
       );
 
   if (!needtune && nzsbb >= PHTHRESH) {
@@ -3079,12 +2920,7 @@
   if (nzsbb >= PHTHRESH) {
     cost_hide_par(qcoeff[hidepos], dqcoeff[hidepos], tcoeff[hidepos], shift,
                   txb_costs, hidepos, txb_costs_ph, dc_sign_ctx, tx_class,
-                  levels, bwl, rdmult, dequant, iqmatrix, &t_cand_dc, rate_cur
-#if CONFIG_ADAPTIVE_HR
-                  ,
-                  hr_info
-#endif  // CONFIG_ADAPTIVE_HR
-    );
+                  levels, bwl, rdmult, dequant, iqmatrix, &t_cand_dc, rate_cur);
   }
 
   // we change the level candidates to check the cost change.
@@ -3171,14 +3007,6 @@
     coef_info[scan_idx].upround = false;
   }
 
-#if CONFIG_ADAPTIVE_HR
-  adaptive_hr_info hr_info = { .tx_size = tx_size,
-                               .tx_type = tx_type,
-                               .qindex = xd->qindex[mbmi->segment_id],
-                               .is_inter =
-                                   is_inter_block(mbmi, xd->tree_type) };
-#endif  // CONFIG_ADAPTIVE_HR
-
   const int rshift =
       (sharpness +
        (cpi->oxcf.q_cfg.aq_mode == VARIANCE_AQ && mbmi->segment_id < 4
@@ -3250,12 +3078,7 @@
                          xd->tmp_sign
 #endif  // CONFIG_CONTEXT_DERIVATION
                          ,
-                         plane, coef_info, enable_parity_hiding
-#if CONFIG_ADAPTIVE_HR
-                         ,
-                         &hr_info
-#endif  // CONFIG_ADAPTIVE_HR
-    );
+                         plane, coef_info, enable_parity_hiding);
     --si;
   } else {
     assert(abs_qc == 1);
@@ -3268,12 +3091,7 @@
                            xd->tmp_sign
 #endif  // CONFIG_CONTEXT_DERIVATION
                            ,
-                           plane
-#if CONFIG_ADAPTIVE_HR
-                           ,
-                           levels, &hr_info
-#endif  // CONFIG_ADAPTIVE_HR
-        );
+                           plane);
     const tran_low_t tqc = tcoeff[ci];
     const tran_low_t dqc = dqcoeff[ci];
     const int64_t dist = get_coeff_dist(tqc, dqc, shift);
@@ -3294,12 +3112,7 @@
                      xd->tmp_sign
 #endif
                      ,
-                     plane, coef_info, enable_parity_hiding
-#if CONFIG_ADAPTIVE_HR
-                     ,
-                     &hr_info
-#endif  // CONFIG_ADAPTIVE_HR
-    );
+                     plane, coef_info, enable_parity_hiding);
   }
   if (si == -1 && nz_num <= max_nz_num) {
     update_skip(&accu_rate, accu_dist, &eob, nz_num, nz_ci, rdmult, skip_cost,
@@ -3309,12 +3122,8 @@
   for (; si >= 1; --si) {
     update_coeff_simple(&accu_rate, si, eob, tx_class, bwl, rdmult, shift,
                         dequant, scan, txb_costs, tcoeff, qcoeff, dqcoeff,
-                        levels, iqmatrix, coef_info, enable_parity_hiding, plane
-#if CONFIG_ADAPTIVE_HR
-                        ,
-                        &hr_info
-#endif  // CONFIG_ADAPTIVE_HR
-    );
+                        levels, iqmatrix, coef_info, enable_parity_hiding,
+                        plane);
   }
 
   // DC position
@@ -3330,12 +3139,7 @@
                          xd->tmp_sign
 #endif  // CONFIG_CONTEXT_DERIVATION
                          ,
-                         plane, coef_info, enable_parity_hiding
-#if CONFIG_ADAPTIVE_HR
-                         ,
-                         &hr_info
-#endif  // CONFIG_ADAPTIVE_HR
-    );
+                         plane, coef_info, enable_parity_hiding);
   }
 
   if (enable_parity_hiding) {
@@ -3346,10 +3150,6 @@
                    ,
                    plane
 #endif  // CONFIG_CHROMA_TX_COEFF_CODING
-#if CONFIG_ADAPTIVE_HR
-                   ,
-                   &hr_info
-#endif  // CONFIG_ADAPTIVE_HR
     );
   }
 
diff --git a/build/cmake/aom_config_defaults.cmake b/build/cmake/aom_config_defaults.cmake
index 3d308c3..b0fb3bf 100644
--- a/build/cmake/aom_config_defaults.cmake
+++ b/build/cmake/aom_config_defaults.cmake
@@ -339,7 +339,7 @@
                    "Keep optical flow refined MVs in TMVP list.")
 set_aom_config_var(CONFIG_AFFINE_REFINEMENT 1
                    "Decoder side affine motion refinement.")
-set_aom_config_var(CONFIG_ADAPTIVE_HR 1 "AV2 new adaptive HR coefficient level coding.")
+set_aom_config_var(CONFIG_ADAPTIVE_HR 1 "Base range reduction and adaptive HR coefficient coding from CWG-E005.")
 #
 # Variables in this section control optional features of the build system.
 #
