Port simplified rdmult computation from libvpx

Change-Id: Id4d4e1c87d8df8657d7b3c488a777d67906f4491
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);