Use cached xd->qindex and xd->lossless values.

setup_segmentation_dequant() is only called after
read_uncompressed_header() has set up the xd->qindex and xd->lossless
arrays, so setup_segmentation_dequant() can just use the cached values.

read_uncompressed_header() can just call av1_get_qindex() without
checking cm->seg.enabled, because av1_get_qindex() checks cm->seg.enabled
internally.

av1_read_tx_type() can just use xd->qindex[i] directly, because
xd->qindex[i] is equal to cm->base_qindex if cm->seg.enabled is false.

Change-Id: I714f25dff278cc686b5bc36bfbbc041b20f4a4ea
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index 128a657..e098041 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -2250,14 +2250,15 @@
 }
 
 // Build y/uv dequant values based on segmentation.
-static void setup_segmentation_dequant(AV1_COMMON *const cm) {
+static void setup_segmentation_dequant(AV1_COMMON *const cm,
+                                       MACROBLOCKD *const xd) {
   const int bit_depth = cm->seq_params.bit_depth;
   const int using_qm = cm->using_qmatrix;
   // When segmentation is disabled, only the first value is used.  The
   // remaining are don't cares.
   const int max_segments = cm->seg.enabled ? MAX_SEGMENTS : 1;
   for (int i = 0; i < max_segments; ++i) {
-    const int qindex = av1_get_qindex(&cm->seg, i, cm->base_qindex);
+    const int qindex = xd->qindex[i];
     cm->y_dequant_QTX[i][0] =
         av1_dc_quant_QTX(qindex, cm->y_dc_delta_q, bit_depth);
     cm->y_dequant_QTX[i][1] = av1_ac_quant_QTX(qindex, 0, bit_depth);
@@ -2269,9 +2270,7 @@
         av1_dc_quant_QTX(qindex, cm->v_dc_delta_q, bit_depth);
     cm->v_dequant_QTX[i][1] =
         av1_ac_quant_QTX(qindex, cm->v_ac_delta_q, bit_depth);
-    const int lossless = qindex == 0 && cm->y_dc_delta_q == 0 &&
-                         cm->u_dc_delta_q == 0 && cm->u_ac_delta_q == 0 &&
-                         cm->v_dc_delta_q == 0 && cm->v_ac_delta_q == 0;
+    const int lossless = xd->lossless[i];
     // NB: depends on base index so there is only 1 set per frame
     // No quant weighting when lossless or signalled not using QM
     int qmlevel = (lossless || using_qm == 0) ? NUM_QM_LEVELS - 1 : cm->qm_y;
@@ -5324,9 +5323,7 @@
   xd->cur_frame_force_integer_mv = cm->cur_frame_force_integer_mv;
 
   for (int i = 0; i < MAX_SEGMENTS; ++i) {
-    const int qindex = cm->seg.enabled
-                           ? av1_get_qindex(&cm->seg, i, cm->base_qindex)
-                           : cm->base_qindex;
+    const int qindex = av1_get_qindex(&cm->seg, i, cm->base_qindex);
     xd->lossless[i] = qindex == 0 && cm->y_dc_delta_q == 0 &&
                       cm->u_dc_delta_q == 0 && cm->u_ac_delta_q == 0 &&
                       cm->v_dc_delta_q == 0 && cm->v_ac_delta_q == 0;
@@ -5334,7 +5331,7 @@
   }
   cm->coded_lossless = is_coded_lossless(cm, xd);
   cm->all_lossless = cm->coded_lossless && !av1_superres_scaled(cm);
-  setup_segmentation_dequant(cm);
+  setup_segmentation_dequant(cm, xd);
   if (cm->coded_lossless) {
     cm->lf.filter_level[0] = 0;
     cm->lf.filter_level[1] = 0;
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index 551e4d5..1cf1ac3 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -612,9 +612,8 @@
     return;
 
   // No need to read transform type for lossless mode(qindex==0).
-  const int qindex =
-      cm->seg.enabled ? xd->qindex[mbmi->segment_id] : cm->base_qindex;
-  if (qindex <= 0) return;
+  const int qindex = xd->qindex[mbmi->segment_id];
+  if (qindex == 0) return;
 
   const int inter_block = is_inter_block(mbmi);
   if (get_ext_tx_types(tx_size, inter_block, cm->reduced_tx_set_used) > 1) {