diff --git a/av1/common/quant_common.c b/av1/common/quant_common.c
index 72bcee3..d4bdb98 100644
--- a/av1/common/quant_common.c
+++ b/av1/common/quant_common.c
@@ -191,10 +191,11 @@
 // underflow to 0 in the actual quantization routines.
 
 int16_t av1_dc_quant_Q3(int qindex, int delta, aom_bit_depth_t bit_depth) {
+  const int q_clamped = clamp(qindex + delta, 0, MAXQ);
   switch (bit_depth) {
-    case AOM_BITS_8: return dc_qlookup_Q3[clamp(qindex + delta, 0, MAXQ)];
-    case AOM_BITS_10: return dc_qlookup_10_Q3[clamp(qindex + delta, 0, MAXQ)];
-    case AOM_BITS_12: return dc_qlookup_12_Q3[clamp(qindex + delta, 0, MAXQ)];
+    case AOM_BITS_8: return dc_qlookup_Q3[q_clamped];
+    case AOM_BITS_10: return dc_qlookup_10_Q3[q_clamped];
+    case AOM_BITS_12: return dc_qlookup_12_Q3[q_clamped];
     default:
       assert(0 && "bit_depth should be AOM_BITS_8, AOM_BITS_10 or AOM_BITS_12");
       return -1;
@@ -202,10 +203,11 @@
 }
 
 int16_t av1_ac_quant_Q3(int qindex, int delta, aom_bit_depth_t bit_depth) {
+  const int q_clamped = clamp(qindex + delta, 0, MAXQ);
   switch (bit_depth) {
-    case AOM_BITS_8: return ac_qlookup_Q3[clamp(qindex + delta, 0, MAXQ)];
-    case AOM_BITS_10: return ac_qlookup_10_Q3[clamp(qindex + delta, 0, MAXQ)];
-    case AOM_BITS_12: return ac_qlookup_12_Q3[clamp(qindex + delta, 0, MAXQ)];
+    case AOM_BITS_8: return ac_qlookup_Q3[q_clamped];
+    case AOM_BITS_10: return ac_qlookup_10_Q3[q_clamped];
+    case AOM_BITS_12: return ac_qlookup_12_Q3[q_clamped];
     default:
       assert(0 && "bit_depth should be AOM_BITS_8, AOM_BITS_10 or AOM_BITS_12");
       return -1;
diff --git a/av1/encoder/rd.c b/av1/encoder/rd.c
index f273f2e..f3019b4 100644
--- a/av1/encoder/rd.c
+++ b/av1/encoder/rd.c
@@ -353,19 +353,19 @@
   128   // INTNL_ARF_UPDATE
 };
 
-int64_t av1_compute_rd_mult_based_on_qindex(const AV1_COMP *cpi, int qindex) {
-  const int64_t q =
-      av1_dc_quant_Q3(qindex, 0, cpi->common.seq_params.bit_depth);
-  int64_t rdmult = 0;
+int av1_compute_rd_mult_based_on_qindex(const AV1_COMP *cpi, int qindex) {
+  const int q = av1_dc_quant_Q3(qindex, 0, cpi->common.seq_params.bit_depth);
+  int rdmult = q * q;
+  rdmult = rdmult * 3 + (rdmult * 2 / 3);
   switch (cpi->common.seq_params.bit_depth) {
-    case AOM_BITS_8: rdmult = 88 * q * q / 24; break;
-    case AOM_BITS_10: rdmult = ROUND_POWER_OF_TWO(88 * q * q / 24, 4); break;
-    case AOM_BITS_12: rdmult = ROUND_POWER_OF_TWO(88 * q * q / 24, 8); break;
+    case AOM_BITS_8: break;
+    case AOM_BITS_10: rdmult = ROUND_POWER_OF_TWO(rdmult, 4); break;
+    case AOM_BITS_12: rdmult = ROUND_POWER_OF_TWO(rdmult, 8); break;
     default:
       assert(0 && "bit_depth should be AOM_BITS_8, AOM_BITS_10 or AOM_BITS_12");
       return -1;
   }
-  return rdmult;
+  return rdmult > 0 ? rdmult : 1;
 }
 
 int av1_compute_rd_mult(const AV1_COMP *cpi, int qindex) {
@@ -378,7 +378,6 @@
     rdmult = (rdmult * rd_frame_type_factor[frame_type]) >> 7;
     rdmult += ((rdmult * rd_boost_factor[boost_index]) >> 7);
   }
-  if (rdmult < 1) rdmult = 1;
   return (int)rdmult;
 }
 
diff --git a/av1/encoder/rd.h b/av1/encoder/rd.h
index 6250df6..2e2a30d 100644
--- a/av1/encoder/rd.h
+++ b/av1/encoder/rd.h
@@ -643,8 +643,7 @@
 struct AV1_COMP;
 struct macroblock;
 
-int64_t av1_compute_rd_mult_based_on_qindex(const struct AV1_COMP *cpi,
-                                            int qindex);
+int av1_compute_rd_mult_based_on_qindex(const struct AV1_COMP *cpi, int qindex);
 
 int av1_compute_rd_mult(const struct AV1_COMP *cpi, int qindex);
 
diff --git a/av1/encoder/temporal_filter.c b/av1/encoder/temporal_filter.c
index 2769b52..da707a1 100644
--- a/av1/encoder/temporal_filter.c
+++ b/av1/encoder/temporal_filter.c
@@ -713,8 +713,7 @@
   }
 
   // Initialize errorperbit, sadperbit16 and sadperbit4.
-  rdmult = (int)av1_compute_rd_mult_based_on_qindex(cpi, ARNR_FILT_QINDEX);
-  if (rdmult < 1) rdmult = 1;
+  rdmult = av1_compute_rd_mult_based_on_qindex(cpi, ARNR_FILT_QINDEX);
   set_error_per_bit(&cpi->td.mb, rdmult);
   av1_initialize_me_consts(cpi, &cpi->td.mb, ARNR_FILT_QINDEX);
   av1_initialize_cost_tables(&cpi->common, &cpi->td.mb);
