Introducing a model for pruning the TX size search

Use a neural-network-based binary classifier to predict the first split
decision on the highest level of the TX size RD search tree. Depending
on how confident we are in the prediction we either keep full unmodified
TX size search or use the largest possible TX size and stop any further
search.

Average speed-up: 3-4%
Quality loss (lowres): 0.062%
Quality loss (midres): 0.018%

Change-Id: I64c0317db74cbeddfbdf772147c43e99e275891f
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 75966bd..a4df6eb 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -1191,6 +1191,34 @@
   for (i = 0; i < esq_h - 1; i++) verdist[i] *= e_recip;
 }
 
+// Instead of 1D projections of the block energy distribution computed by
+// get_energy_distribution_finer() this function computes a full
+// two-dimensional energy distribution of the input block.
+static void get_2D_energy_distribution(const int16_t *diff, int stride, int bw,
+                                       int bh, float *edist) {
+  unsigned int esq[256] = { 0 };
+  const int esq_w = bw >> 2;
+  const int esq_h = bh >> 2;
+  const int esq_sz = esq_w * esq_h;
+  uint64_t total = 0;
+  for (int i = 0; i < bh; i += 4) {
+    for (int j = 0; j < bw; j += 4) {
+      unsigned int cur_sum_energy = 0;
+      for (int k = 0; k < 4; k++) {
+        const int16_t *cur_diff = diff + (i + k) * stride + j;
+        cur_sum_energy += cur_diff[0] * cur_diff[0] +
+                          cur_diff[1] * cur_diff[1] +
+                          cur_diff[2] * cur_diff[2] + cur_diff[3] * cur_diff[3];
+      }
+      esq[(i >> 2) * esq_w + (j >> 2)] = cur_sum_energy;
+      total += cur_sum_energy;
+    }
+  }
+
+  const float e_recip = 1.0f / (float)total;
+  for (int i = 0; i < esq_sz - 1; i++) edist[i] = esq[i] * e_recip;
+}
+
 // Similar to get_horver_correlation, but also takes into account first
 // row/column, when computing horizontal/vertical correlation.
 static void get_horver_correlation_full(const int16_t *diff, int stride, int w,
@@ -1302,13 +1330,65 @@
   for (i = 0; i < 16; i++) scores_2D[i] /= sum;
 }
 
-static int prune_tx_types_2D(BLOCK_SIZE bsize, const MACROBLOCK *x,
-                             int tx_set_type, int pruning_aggressiveness) {
+// Similarly to compute_1D_scores() performs a forward pass through a
+// neural network with two fully-connected layers. The only difference
+// is that it assumes 1 output neuron, as required by the classifier used
+// for TX size pruning.
+static float compute_tx_split_prune_score(float *features, int num_features,
+                                          const float *fc1, const float *b1,
+                                          const float *fc2, float b2,
+                                          int num_hidden_units) {
+  assert(num_hidden_units <= 64);
+  float hidden_layer[64];
+  for (int i = 0; i < num_hidden_units; i++) {
+    const float *cur_coef = fc1 + i * num_features;
+    hidden_layer[i] = 0.0f;
+    for (int j = 0; j < num_features; j++)
+      hidden_layer[i] += cur_coef[j] * features[j];
+    hidden_layer[i] = AOMMAX(hidden_layer[i] + b1[i], 0.0f);
+  }
+  float dst_score = 0.0f;
+  for (int j = 0; j < num_hidden_units; j++)
+    dst_score += fc2[j] * hidden_layer[j];
+  dst_score += b2;
+  return dst_score;
+}
+
+static int prune_tx_split(BLOCK_SIZE bsize, const int16_t *diff, float hcorr,
+                          float vcorr) {
+  if (bsize <= BLOCK_4X4 || bsize > BLOCK_16X16) return 0;
+
+  float features[17];
+  const int bw = block_size_wide[bsize], bh = block_size_high[bsize];
+  const int feature_num = (bw / 4) * (bh / 4) + 1;
+  assert(feature_num <= 17);
+
+  get_2D_energy_distribution(diff, bw, bw, bh, features);
+  features[feature_num - 2] = hcorr;
+  features[feature_num - 1] = vcorr;
+
+  const int bidx = bsize - BLOCK_4X4 - 1;
+  const float *fc1 = av1_prune_tx_split_learned_weights[bidx];
+  const float *b1 =
+      fc1 + av1_prune_tx_split_num_hidden_units[bidx] * feature_num;
+  const float *fc2 = b1 + av1_prune_tx_split_num_hidden_units[bidx];
+  float b2 = *(fc2 + av1_prune_tx_split_num_hidden_units[bidx]);
+  float score =
+      compute_tx_split_prune_score(features, feature_num, fc1, b1, fc2, b2,
+                                   av1_prune_tx_split_num_hidden_units[bidx]);
+
+  return (score > av1_prune_tx_split_thresholds[bidx]);
+}
+
+static int prune_tx_2D(BLOCK_SIZE bsize, const MACROBLOCK *x, int tx_set_type,
+                       int tx_type_pruning_aggressiveness,
+                       int use_tx_split_prune) {
   if (bsize >= BLOCK_32X32) return 0;
   const struct macroblock_plane *const p = &x->plane[0];
   const int bidx = AOMMAX(bsize - BLOCK_4X4, 0);
   const float score_thresh =
-      av1_prune_2D_adaptive_thresholds[bidx][pruning_aggressiveness - 1];
+      av1_prune_2D_adaptive_thresholds[bidx]
+                                      [tx_type_pruning_aggressiveness - 1];
 
   float hfeatures[16], vfeatures[16];
   float hscores[4], vscores[4];
@@ -1377,11 +1457,23 @@
       prune_bitmask |= (1 << tx_type_table_2D[i]);
   }
 
+  // Also apply TX size pruning if it's turned on. The value
+  // of prune_tx_split_flag indicates whether we should do
+  // full TX size search (flag=0) or use the largest available
+  // TX size without performing any further search (flag=1).
+  int prune_tx_split_flag = 0;
+  if (use_tx_split_prune) {
+    prune_tx_split_flag =
+        prune_tx_split(bsize, p->src_diff, hfeatures[hfeatures_num - 1],
+                       vfeatures[vfeatures_num - 1]);
+  }
+  prune_bitmask |= (prune_tx_split_flag << TX_TYPES);
   return prune_bitmask;
 }
 
-static int prune_tx_types(const AV1_COMP *cpi, BLOCK_SIZE bsize, MACROBLOCK *x,
-                          const MACROBLOCKD *const xd, int tx_set_type) {
+static int prune_tx(const AV1_COMP *cpi, BLOCK_SIZE bsize, MACROBLOCK *x,
+                    const MACROBLOCKD *const xd, int tx_set_type,
+                    int use_tx_split_prune) {
   int tx_set = ext_tx_set_index[1][tx_set_type];
   assert(tx_set >= 0);
   const int *tx_set_1D = ext_tx_used_inter_1D[tx_set];
@@ -1403,17 +1495,17 @@
       break;
     case PRUNE_2D_ACCURATE:
       if (tx_set_type == EXT_TX_SET_ALL16)
-        return prune_tx_types_2D(bsize, x, tx_set_type, 6);
+        return prune_tx_2D(bsize, x, tx_set_type, 6, use_tx_split_prune);
       else if (tx_set_type == EXT_TX_SET_DTT9_IDTX_1DDCT)
-        return prune_tx_types_2D(bsize, x, tx_set_type, 4);
+        return prune_tx_2D(bsize, x, tx_set_type, 4, use_tx_split_prune);
       else
         return 0;
       break;
     case PRUNE_2D_FAST:
       if (tx_set_type == EXT_TX_SET_ALL16)
-        return prune_tx_types_2D(bsize, x, tx_set_type, 10);
+        return prune_tx_2D(bsize, x, tx_set_type, 10, use_tx_split_prune);
       else if (tx_set_type == EXT_TX_SET_DTT9_IDTX_1DDCT)
-        return prune_tx_types_2D(bsize, x, tx_set_type, 7);
+        return prune_tx_2D(bsize, x, tx_set_type, 7, use_tx_split_prune);
       else
         return 0;
       break;
@@ -2499,7 +2591,7 @@
 
   if (is_inter && cpi->sf.tx_type_search.prune_mode > NO_PRUNE &&
       !x->use_default_inter_tx_type) {
-    prune = prune_tx_types(cpi, bs, x, xd, tx_set_type);
+    prune = prune_tx(cpi, bs, x, xd, tx_set_type, 0);
   }
   if (get_ext_tx_types(mbmi->tx_size, bs, is_inter, cm->reduced_tx_set_used) >
           1 &&
@@ -2772,7 +2864,7 @@
   int prune = 0;
   if (is_inter && cpi->sf.tx_type_search.prune_mode > NO_PRUNE &&
       !x->use_default_inter_tx_type) {
-    prune = prune_tx_types(cpi, bs, x, xd, EXT_TX_SET_ALL16);
+    prune = prune_tx(cpi, bs, x, xd, EXT_TX_SET_ALL16, 0);
   }
 
   last_rd = INT64_MAX;
@@ -3952,7 +4044,8 @@
                             ENTROPY_CONTEXT *ta, ENTROPY_CONTEXT *tl,
                             TXFM_CONTEXT *tx_above, TXFM_CONTEXT *tx_left,
                             RD_STATS *rd_stats, int64_t ref_best_rd,
-                            int *is_cost_valid, int fast) {
+                            int *is_cost_valid, int fast,
+                            int tx_split_prune_flag) {
   MACROBLOCKD *const xd = &x->e_mbd;
   MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi;
   struct macroblock_plane *const p = &x->plane[plane];
@@ -4172,7 +4265,7 @@
 #endif
   }
 
-  if (tx_size > TX_4X4 && depth < MAX_VARTX_DEPTH
+  if (tx_size > TX_4X4 && depth < MAX_VARTX_DEPTH && tx_split_prune_flag == 0
 #if CONFIG_MRC_TX
       // If the tx type we are trying is MRC_DCT, we cannot partition the
       // transform into anything smaller than TX_32X32
@@ -4203,7 +4296,7 @@
       select_tx_block(cpi, x, offsetr, offsetc, plane, block, sub_txs,
                       depth + 1, plane_bsize, ta, tl, tx_above, tx_left,
                       &this_rd_stats, ref_best_rd - tmp_rd, &this_cost_valid,
-                      fast);
+                      fast, 0);
 #if CONFIG_DIST_8X8
       if (x->using_dist_8x8 && plane == 0 && tx_size == TX_8X8) {
         sub8x8_eob[i] = p->eobs[block];
@@ -4388,7 +4481,8 @@
 
 static void select_inter_block_yrd(const AV1_COMP *cpi, MACROBLOCK *x,
                                    RD_STATS *rd_stats, BLOCK_SIZE bsize,
-                                   int64_t ref_best_rd, int fast) {
+                                   int64_t ref_best_rd, int fast,
+                                   int tx_split_prune_flag) {
   MACROBLOCKD *const xd = &x->e_mbd;
   int is_cost_valid = 1;
   int64_t this_rd = 0;
@@ -4426,7 +4520,7 @@
         select_tx_block(cpi, x, idy, idx, 0, block, max_tx_size, init_depth,
                         plane_bsize, ctxa, ctxl, tx_above, tx_left,
                         &pn_rd_stats, ref_best_rd - this_rd, &is_cost_valid,
-                        fast);
+                        fast, tx_split_prune_flag);
         if (!is_cost_valid || pn_rd_stats.rate == INT_MAX) {
           av1_invalid_rd_stats(rd_stats);
           return;
@@ -4452,7 +4546,8 @@
 static int64_t select_tx_size_fix_type(const AV1_COMP *cpi, MACROBLOCK *x,
                                        RD_STATS *rd_stats, BLOCK_SIZE bsize,
                                        int mi_row, int mi_col,
-                                       int64_t ref_best_rd, TX_TYPE tx_type) {
+                                       int64_t ref_best_rd, TX_TYPE tx_type,
+                                       int tx_split_prune_flag) {
   const int fast = cpi->sf.tx_size_search_method > USE_FULL_RD;
   const AV1_COMMON *const cm = &cpi->common;
   MACROBLOCKD *const xd = &x->e_mbd;
@@ -4477,7 +4572,8 @@
   (void)mi_col;
 
   mbmi->tx_type = tx_type;
-  select_inter_block_yrd(cpi, x, rd_stats, bsize, ref_best_rd, fast);
+  select_inter_block_yrd(cpi, x, rd_stats, bsize, ref_best_rd, fast,
+                         tx_split_prune_flag);
   if (rd_stats->rate == INT_MAX) return INT64_MAX;
 
   mbmi->min_tx_size = get_min_tx_size(mbmi->inter_tx_size[0][0]);
@@ -4950,11 +5046,16 @@
 
   if (is_inter && cpi->sf.tx_type_search.prune_mode > NO_PRUNE &&
       !x->use_default_inter_tx_type && !xd->lossless[mbmi->segment_id]) {
-    prune = prune_tx_types(cpi, bsize, x, xd, tx_set_type);
+    prune = prune_tx(cpi, bsize, x, xd, tx_set_type,
+                     cpi->sf.tx_type_search.use_tx_size_pruning);
   }
 
   int found = 0;
 
+  int tx_split_prune_flag = 0;
+  if (is_inter && cpi->sf.tx_type_search.prune_mode >= PRUNE_2D_ACCURATE)
+    tx_split_prune_flag = ((prune >> TX_TYPES) & 1);
+
   for (tx_type = txk_start; tx_type < txk_end; ++tx_type) {
     RD_STATS this_rd_stats;
     av1_init_rd_stats(&this_rd_stats);
@@ -4992,7 +5093,7 @@
       if (tx_type != DCT_DCT) continue;
 
     rd = select_tx_size_fix_type(cpi, x, &this_rd_stats, bsize, mi_row, mi_col,
-                                 ref_best_rd, tx_type);
+                                 ref_best_rd, tx_type, tx_split_prune_flag);
     // If the current tx_type is not included in the tx_set for the smallest
     // tx size found, then all vartx partitions were actually transformed with
     // DCT_DCT and we should avoid picking it.
@@ -5027,7 +5128,7 @@
     RD_STATS this_rd_stats;
     mbmi->use_lgt = 1;
     rd = select_tx_size_fix_type(cpi, x, &this_rd_stats, bsize, mi_row, mi_col,
-                                 ref_best_rd, 0);
+                                 ref_best_rd, 0, 0);
     if (rd < best_rd) {
       best_rd = rd;
       *rd_stats = this_rd_stats;
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index 6fe07ec..f6f91ab 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -397,6 +397,7 @@
   sf->alt_ref_search_fp = 0;
   sf->partition_search_type = SEARCH_PARTITION;
   sf->tx_type_search.prune_mode = PRUNE_2D_ACCURATE;
+  sf->tx_type_search.use_tx_size_pruning = 1;
   sf->tx_type_search.use_skip_flag_prediction = 1;
   sf->tx_type_search.fast_intra_tx_type_search = 0;
   sf->tx_type_search.fast_inter_tx_type_search = 0;
diff --git a/av1/encoder/speed_features.h b/av1/encoder/speed_features.h
index db62f02..e84e8ce 100644
--- a/av1/encoder/speed_features.h
+++ b/av1/encoder/speed_features.h
@@ -207,6 +207,12 @@
   // Use a skip flag prediction model to detect blocks with skip = 1 early
   // and avoid doing full TX type search for such blocks.
   int use_skip_flag_prediction;
+
+  // Use a model to predict TX block split decisions on the highest level
+  // of TX partition tree and apply adaptive pruning based on that to speed up
+  // RD search (currently works only when prune_mode equals to PRUNE_2D_ACCURATE
+  // or PRUNE_2D_FAST).
+  int use_tx_size_pruning;
 } TX_TYPE_SEARCH;
 
 typedef enum {
diff --git a/av1/encoder/tx_prune_model_weights.h b/av1/encoder/tx_prune_model_weights.h
index 92a072d..47c73cc 100644
--- a/av1/encoder/tx_prune_model_weights.h
+++ b/av1/encoder/tx_prune_model_weights.h
@@ -792,6 +792,399 @@
              0.06531f, 0.07336f, 0.08582f, 0.11072f },
 };
 
+static const int av1_prune_tx_split_num_hidden_units[6] = { 16, 16, 16,
+                                                            32, 32, 64 };
+static const float *av1_prune_tx_split_learned_weights[6] = {
+  /* BLOCK_4X8 */
+  (float[]){ 0.32030f,  1.52126f,  1.14809f,  -2.14866f, -0.08888f, -0.22737f,
+             -1.38105f, -0.51040f, 2.51004f,  2.17404f,  -0.55634f, 1.41842f,
+             -0.49649f, -0.44879f, 2.68777f,  -4.22827f, -0.60068f, 0.41569f,
+             -0.00639f, -0.26465f, 3.59964f,  1.05503f,  1.67338f,  1.21009f,
+             -1.94552f, -0.24265f, 1.44033f,  -0.73353f, -0.07009f, 0.94179f,
+             0.04023f,  1.07040f,  0.51453f,  -1.04236f, -0.25694f, -0.26323f,
+             0.82425f,  1.56855f,  1.22929f,  -0.63590f, -0.14229f, -1.23524f,
+             -0.06514f, -0.55427f, 0.21009f,  0.56361f,  -1.39779f, 1.36076f,
+             0.09111f,  1.17656f,  0.24083f,  -2.68367f, -1.22950f, 0.62489f,
+             -2.89232f, -0.78764f, 0.47787f,  -1.39686f, -0.17512f, -0.27895f,
+             1.50220f,  0.00000f,  -0.06392f, -0.41602f, 0.80551f,  -1.81964f,
+             1.81584f,  -3.88831f, 2.06815f,  -3.70215f, 3.83453f,  -1.55123f,
+             -1.94259f, 1.34788f,  -0.13279f, -0.79214f, 0.71301f,  -0.19471f,
+             -0.07253f, -1.05497f, -1.23037f },
+  /* BLOCK_8X4 */
+  (float[]){ -0.34959f, 3.09285f,  0.78709f,  -2.43502f, -0.10261f, -0.07371f,
+             0.36992f,  -0.07637f, 0.28320f,  2.25698f,  0.49487f,  -0.43731f,
+             0.72762f,  -0.16534f, 0.32642f,  -4.77212f, 0.38547f,  -0.17502f,
+             0.03277f,  2.37985f,  0.66447f,  -1.19182f, 3.21549f,  -0.15916f,
+             -3.76120f, -0.06682f, -0.45622f, 0.22224f,  0.40141f,  0.57949f,
+             0.45262f,  3.64971f,  -0.22332f, 0.21022f,  1.54482f,  0.46679f,
+             1.03831f,  -0.15273f, 0.33478f,  -0.63590f, -0.14229f, -1.23524f,
+             -1.57408f, -0.26338f, 1.56286f,  0.53111f,  -0.71675f, 1.38037f,
+             1.60338f,  1.28888f,  0.14721f,  -1.97339f, 0.20711f,  0.24843f,
+             -0.38865f, -2.29281f, 1.20972f,  0.08247f,  -3.16498f, -1.06884f,
+             0.36580f,  0.00000f,  -0.99106f, -1.15329f, 1.38434f,  -1.83397f,
+             -0.32715f, -3.67003f, -0.66115f, -4.61855f, -1.39752f, 3.10370f,
+             -1.25350f, 0.00505f,  3.51122f,  1.39872f,  -1.11827f, -0.19471f,
+             2.31759f,  2.11014f,  -0.26996f },
+  /* BLOCK_8X8 */
+  (float[]){ -2.47727f, 2.02291f,  0.50872f,  0.08612f,  -0.50731f, -4.17997f,
+             -4.99049f, -0.10378f, -0.13314f, 1.84303f,  0.16978f,  0.22674f,
+             0.04579f,  -1.73010f, -0.74034f, -0.41242f, 0.03099f,  -0.36317f,
+             2.96804f,  1.73384f,  -0.51191f, 0.08936f,  -0.11552f, 2.05849f,
+             2.38921f,  -1.71574f, 3.84163f,  0.03147f,  0.06774f,  -0.22495f,
+             0.00158f,  -0.14033f, 0.86344f,  1.18282f,  1.29665f,  -0.15054f,
+             -0.06339f, -4.68035f, 0.39699f,  0.33972f,  -3.02441f, 0.09658f,
+             1.55562f,  0.41954f,  0.15387f,  -1.50455f, 1.38531f,  0.95743f,
+             0.54309f,  1.42863f,  2.17137f,  2.80152f,  -0.12118f, -0.28639f,
+             -1.39431f, -0.13291f, -0.53808f, -3.61837f, -0.11427f, -0.16585f,
+             2.27990f,  2.36602f,  2.05427f,  0.13960f,  0.01552f,  0.01583f,
+             0.09690f,  0.02183f,  3.66735f,  -0.66999f, -0.11664f, -0.53856f,
+             -0.05054f, -0.80409f, 2.83509f,  -0.10204f, -0.11378f, 0.04303f,
+             -0.46864f, 4.37163f,  0.67772f,  -1.06375f, 0.29005f,  -3.82750f,
+             -2.63534f, -0.25700f, -1.10611f, -0.27371f, -0.01970f, -0.13272f,
+             1.52793f,  0.87452f,  -1.83178f, -2.67459f, -1.27264f, -3.56434f,
+             1.42888f,  -6.86701f, -1.98023f, 3.81828f,  1.40864f,  -2.24906f,
+             1.64376f,  -3.70196f, -2.11058f, 1.24140f,  1.69127f,  -2.04217f,
+             -3.04680f, 3.25083f,  1.31881f,  4.21563f,  -3.58924f },
+  /* BLOCK_8X16 */
+  (float[]){ -0.21895f, -0.45677f, 2.41986f,  0.45214f,  -2.74380f, -1.00732f,
+             0.19281f,  -0.07835f, -0.07427f, 0.11533f,  -0.05784f, 0.41050f,
+             0.45777f,  0.21196f,  0.28456f,  0.04115f,  -0.28650f, 5.25257f,
+             -0.21835f, -0.10548f, 0.32348f,  0.33489f,  -0.06561f, 0.35372f,
+             -0.64700f, -2.71813f, 2.06582f,  1.63493f,  0.65080f,  1.59359f,
+             1.62042f,  -1.55604f, -0.68386f, 0.37781f,  -0.47955f, -0.60442f,
+             1.29428f,  0.08807f,  1.47488f,  2.21390f,  -1.24883f, -1.30805f,
+             0.11024f,  0.61822f,  0.72328f,  -0.70267f, 0.06369f,  0.02753f,
+             0.23815f,  0.00898f,  0.37615f,  -0.09525f, -0.35903f, -0.64775f,
+             1.67392f,  1.30467f,  1.15131f,  1.25024f,  -1.69001f, -2.22747f,
+             -0.64590f, -0.76387f, 0.19835f,  0.13566f,  -0.32447f, 0.19677f,
+             0.37378f,  -0.15793f, 0.28234f,  0.41214f,  -0.33675f, -0.20085f,
+             -2.42429f, -0.36136f, -1.28244f, -1.00030f, 0.24530f,  -0.21880f,
+             0.20256f,  -1.16030f, 1.37917f,  -0.18824f, 0.08422f,  -0.26584f,
+             -0.28225f, -0.23964f, -0.93862f, 0.68627f,  -0.26600f, 1.45596f,
+             -0.01694f, 0.25936f,  0.16832f,  0.01620f,  -0.82569f, 0.17832f,
+             0.17576f,  0.03032f,  0.25926f,  -0.21567f, 0.23966f,  0.40671f,
+             0.98998f,  0.87764f,  0.53139f,  -0.19729f, -1.50531f, 1.18424f,
+             1.90402f,  1.55604f,  2.83617f,  3.64986f,  0.08722f,  -0.19534f,
+             -0.15563f, 0.11337f,  1.03154f,  -0.36714f, -0.71317f, -0.07648f,
+             -0.17883f, -0.34857f, -0.20126f, -0.57790f, 0.03437f,  -0.25365f,
+             -0.68480f, 0.64985f,  1.99386f,  1.96729f,  0.37909f,  0.57962f,
+             -0.31531f, 0.72729f,  -1.33276f, 1.55848f,  1.81548f,  2.32462f,
+             3.00107f,  0.77959f,  0.31942f,  0.21177f,  -0.36679f, 1.65274f,
+             0.55873f,  0.02198f,  0.01957f,  -0.40375f, 0.16472f,  -0.29589f,
+             0.23933f,  -0.66861f, -0.29314f, -0.12607f, 0.52150f,  -0.12359f,
+             0.52967f,  -0.26430f, -0.22729f, 0.31530f,  0.30190f,  -0.23286f,
+             -0.32586f, -0.37164f, 1.02935f,  1.35490f,  0.77903f,  0.67302f,
+             -0.33572f, -0.42498f, -1.27007f, -0.22194f, 0.48687f,  1.52368f,
+             0.79515f,  0.46112f,  0.75748f,  0.73060f,  1.12397f,  -1.63125f,
+             1.11975f,  1.75004f,  0.96453f,  2.78651f,  1.41828f,  -0.19729f,
+             1.06517f,  0.00775f,  -0.01563f, 1.09465f,  0.32625f,  0.02543f,
+             0.18515f,  -0.15120f, 0.31746f,  0.21150f,  0.57086f,  -0.72082f,
+             -0.90390f, 0.16707f,  -1.20865f, 0.18383f,  -2.11851f, 0.67133f,
+             -0.91545f, 0.72087f,  -0.29690f, -0.46287f, -0.27711f, 0.41903f,
+             0.30798f,  0.26662f,  0.36932f,  -0.38146f, -0.89384f, 3.66687f,
+             -0.37066f, 0.36173f,  -0.27265f, -0.63719f, 0.07813f,  1.17721f,
+             -0.05952f, -0.59288f, -0.42216f, 0.25272f,  0.17027f,  0.50658f,
+             0.55377f,  -0.09560f, -0.45030f, -0.37908f, -0.78157f, -0.10020f,
+             1.93944f,  2.06165f,  -0.43706f, 0.32571f,  -1.60805f, -2.79799f,
+             -0.37784f, -0.45904f, -0.77015f, -0.73018f, -0.01716f, -0.65036f,
+             -0.27082f, -1.08450f, -0.38493f, -0.04057f, -1.12733f, -0.50366f,
+             -0.68167f, -0.36223f, -1.24596f, -0.59888f, -0.78964f, 1.43948f,
+             -0.44269f, 0.57606f,  -0.99366f, 0.12273f,  0.16581f,  0.33016f,
+             0.07351f,  0.45060f,  0.15524f,  -0.23562f, -2.65111f, 1.62168f,
+             -0.48448f, -0.36170f, -0.10941f, 0.35546f,  -0.01819f, -0.14075f,
+             -0.39136f, -0.51852f, 0.79623f,  -0.85423f, -0.10289f, 0.22549f,
+             -0.02515f, -0.21602f, 0.18202f,  -0.00953f, -0.60522f, -0.00193f,
+             0.28200f,  -4.80451f, 0.89210f,  -0.57028f, -0.28017f, -0.29095f,
+             -0.47640f, -0.65244f, -0.15689f, 0.75246f,  0.46751f,  -2.15775f,
+             -1.32624f, 0.00000f,  -0.91779f, -1.24749f, -1.02625f, 0.31726f,
+             -1.04629f, 1.28548f,  -1.10129f, 1.53092f,  -0.04115f, -2.17324f,
+             -0.22625f, -0.63461f, -0.51780f, 1.29639f,  1.11356f,  0.74084f,
+             -1.01941f, -0.21135f, -2.47039f, 6.28151f,  2.51358f,  2.96845f,
+             2.26827f,  -0.17043f, -3.09551f, -0.50127f, -2.41836f, -1.09834f,
+             -0.04842f, 2.39667f,  -3.85959f, -0.13768f, 1.85736f,  3.77770f,
+             -0.28978f, 0.06029f,  2.14492f,  1.80605f,  -2.72664f, 0.18844f,
+             1.77425f,  1.68660f,  0.94666f,  -0.22735f, 3.40241f,  1.61752f,
+             -1.65457f, -2.26556f, 1.59808f,  -0.18132f, -3.72500f },
+  /* BLOCK_16X8 */
+  (float[]){ -0.30988f, 0.89705f,  0.69177f,  0.00918f,  -0.44076f, 0.78649f,
+             0.39568f,  0.01386f,  -1.07152f, -0.35747f, 0.01617f,  -0.13793f,
+             -0.41617f, 0.02432f,  -0.32516f, -0.63565f, -1.15714f, 0.52089f,
+             -0.04905f, 0.19824f,  -0.05926f, 0.24904f,  0.24725f,  0.02826f,
+             -0.11965f, -0.49540f, -0.20747f, 0.03385f,  -0.55323f, 0.18648f,
+             0.42333f,  -2.10646f, -2.63984f, 0.53993f,  -1.25692f, -0.24025f,
+             0.21869f,  0.34874f,  0.49216f,  0.55550f,  -0.02608f, -0.12440f,
+             0.05494f,  0.11575f,  0.67594f,  -0.68384f, 0.03205f,  0.00527f,
+             0.20160f,  0.13460f,  0.48271f,  -0.15768f, -0.22797f, -0.66164f,
+             -1.78311f, 1.23068f,  0.54538f,  -2.14877f, 0.50704f,  1.56410f,
+             1.36285f,  -1.12270f, 0.24664f,  1.29689f,  -0.19484f, 0.39357f,
+             1.29248f,  -0.43890f, -0.81965f, 1.52669f,  -0.60373f, 0.29783f,
+             -0.05030f, 0.73567f,  -2.03703f, -0.72944f, 0.43790f,  0.63765f,
+             -1.25707f, 0.63311f,  0.58912f,  -1.84147f, -1.45550f, -1.63134f,
+             -1.36352f, -1.88211f, -2.18492f, 2.27752f,  0.01232f,  0.44153f,
+             -0.49621f, 0.26048f,  0.10140f,  0.34128f,  -0.46378f, -0.16409f,
+             0.53591f,  -0.52306f, 1.66744f,  -0.30028f, -0.20330f, -0.61887f,
+             0.34184f,  0.88228f,  1.41874f,  -0.64436f, 0.08548f,  1.31631f,
+             -0.97002f, -0.41801f, 2.31711f,  -0.47594f, -1.03458f, -0.70169f,
+             2.10790f,  3.56833f,  0.09159f,  -0.36714f, -0.71317f, -0.07648f,
+             -0.17883f, -0.34857f, -0.20126f, -0.57790f, 0.03437f,  -0.25365f,
+             -1.86669f, -1.49512f, 0.94400f,  -0.49523f, -1.87793f, -1.49879f,
+             3.72050f,  0.79153f,  0.18599f,  2.19499f,  3.04410f,  0.14638f,
+             -0.07565f, 1.97951f,  2.21436f,  -0.02186f, 0.57101f,  0.12945f,
+             0.56481f,  0.10461f,  0.03206f,  -0.39151f, 0.08036f,  -0.29681f,
+             0.39939f,  -0.29424f, -0.25672f, -0.80800f, 0.53524f,  -0.14737f,
+             0.35326f,  -0.45341f, 0.15798f,  0.73941f,  0.98842f,  0.28433f,
+             0.12557f,  -0.01606f, 0.79575f,  0.26909f,  0.69944f,  0.97837f,
+             -0.22409f, -0.25213f, 0.61629f,  -0.36658f, -0.49956f, 0.30223f,
+             0.08560f,  -0.63470f, 0.38509f,  0.13281f,  -0.10986f, 2.73076f,
+             1.11713f,  1.60360f,  0.38607f,  0.18618f,  2.96707f,  4.08094f,
+             -0.36882f, 0.86829f,  0.32123f,  1.98524f,  -0.12393f, -1.19741f,
+             -0.96718f, -0.34738f, 0.54278f,  0.75701f,  -0.33370f, -0.99329f,
+             0.11300f,  1.62503f,  -0.79704f, 0.87669f,  -0.59378f, 0.91501f,
+             -1.99499f, -0.41999f, -0.52788f, -0.21153f, -0.01666f, -0.79854f,
+             0.62634f,  0.80216f,  0.54574f,  -1.56125f, 0.21361f,  1.70929f,
+             -0.27834f, 0.27556f,  -0.23068f, -0.73371f, 0.09880f,  0.75057f,
+             0.01522f,  -0.64572f, -0.49848f, 0.22367f,  0.22051f,  0.72267f,
+             0.74977f,  -0.05481f, -0.39457f, -0.42857f, -0.69357f, -0.25760f,
+             0.52356f,  0.54430f,  -0.17991f, -0.67622f, -0.25359f, -0.24338f,
+             -0.06314f, -0.32888f, -0.64012f, -0.11035f, -2.97207f, -1.29626f,
+             -0.18367f, 0.19849f,  -3.41530f, -1.36378f, -0.26733f, 0.35637f,
+             -0.16403f, 0.57318f,  0.46560f,  0.20525f,  0.00714f,  0.39762f,
+             0.82244f,  4.00631f,  -0.18352f, 0.77005f,  3.44857f,  -1.51708f,
+             -0.84663f, -0.42995f, -0.05492f, -0.16470f, 0.11422f,  0.41940f,
+             -0.96526f, -2.14667f, 3.28552f,  0.36121f,  -1.16834f, -0.83050f,
+             0.81684f,  0.22692f,  1.01164f,  -1.63012f, -1.28524f, 1.29725f,
+             -0.89197f, -1.20488f, -2.00215f, 1.34871f,  2.35261f,  0.04536f,
+             -0.84786f, -0.62404f, -0.48502f, 0.88151f,  0.26629f,  -0.29040f,
+             -0.49876f, 1.10704f,  0.34171f,  1.25023f,  -0.04490f, 0.17422f,
+             -2.22701f, 0.00000f,  0.88308f,  -0.61498f, -0.78462f, 0.05608f,
+             0.29389f,  -1.77892f, -1.48080f, -0.51852f, -0.05360f, -0.50509f,
+             -0.28875f, -0.16687f, -0.58397f, 0.19775f,  -3.65043f, -0.13175f,
+             -0.21219f, -0.96746f, 0.95524f,  0.31578f,  0.27905f,  2.52514f,
+             -0.11741f, -0.18626f, 1.42636f,  -1.93024f, 2.19224f,  -3.61233f,
+             1.50723f,  1.41080f,  2.59939f,  -0.13768f, 3.68902f,  2.69651f,
+             -0.25476f, -1.33222f, 0.45695f,  0.79734f,  -3.85996f, 2.34047f,
+             1.70438f,  -0.98010f, 0.10091f,  0.43924f,  -0.01962f, 2.82762f,
+             3.79446f,  -2.28532f, -2.18018f, -3.04076f, -1.87185f },
+  /* BLOCK_16X16 */
+  (float[]){ -2.33512f, -3.31371f, -1.76911f, -0.09432f, -0.77541f, -1.24532f,
+             -1.27991f, -0.06711f, -2.87110f, -0.45941f, -2.21170f, 0.22054f,
+             -2.08454f, -0.83189f, -1.51579f, -0.87875f, 0.41934f,  -0.33679f,
+             -0.23281f, -0.17464f, -0.55863f, 0.31429f,  0.05257f,  0.32980f,
+             -0.53877f, -0.14233f, -0.35298f, -0.07577f, 0.00490f,  -0.03767f,
+             -0.48037f, -0.36015f, 0.56203f,  -1.27163f, 0.30367f,  0.07610f,
+             0.27500f,  -0.07006f, 0.61161f,  0.31418f,  0.25491f,  0.01534f,
+             -4.98555f, -1.90110f, -0.46295f, 0.58215f,  -2.15540f, -0.22709f,
+             0.84783f,  -0.41374f, -0.03831f, -0.26255f, -0.01594f, -0.07867f,
+             -0.15332f, -0.13569f, -0.21399f, 0.19977f,  -0.22428f, 0.01776f,
+             0.29629f,  0.49830f,  -0.38453f, -0.03950f, -0.43206f, -0.54631f,
+             1.33911f,  0.61361f,  0.73860f,  0.03807f,  -0.05452f, -0.40985f,
+             0.04144f,  0.22968f,  -0.40100f, -0.14033f, -1.18733f, 2.17582f,
+             -0.73620f, -0.58648f, 0.06898f,  -2.63532f, -0.06405f, -1.17498f,
+             -0.89420f, -0.53436f, 0.01252f,  0.00458f,  -0.09173f, -0.48544f,
+             -0.42826f, 0.16666f,  0.32184f,  -0.25180f, -0.20395f, 0.13786f,
+             -0.03049f, -0.25886f, -0.33407f, -0.16972f, -0.25761f, -0.37955f,
+             0.67919f,  -0.56672f, 0.88734f,  -0.19436f, 1.48037f,  2.48978f,
+             0.79969f,  0.57480f,  1.50500f,  0.73033f,  1.64769f,  0.36873f,
+             -0.84495f, -0.53227f, -0.37862f, -0.22582f, 3.03188f,  0.50594f,
+             0.65847f,  -0.37011f, 1.47523f,  1.03132f,  1.51524f,  1.12154f,
+             -1.30232f, -1.81978f, -3.34859f, -0.24295f, 1.48982f,  -0.39040f,
+             -0.63671f, 0.92525f,  -1.05361f, -0.79484f, -3.14987f, -1.15602f,
+             1.16454f,  1.10114f,  -1.00434f, -2.96470f, 1.31625f,  1.02678f,
+             0.30036f,  -0.39549f, -0.54097f, 0.48701f,  0.54787f,  -0.01181f,
+             0.60000f,  1.64585f,  1.00371f,  -2.71307f, -1.03549f, -2.65811f,
+             -2.28853f, -0.56815f, -0.96702f, -2.64566f, -2.17605f, -1.39469f,
+             -2.52619f, -2.13329f, -1.62011f, -0.18950f, 0.58642f,  0.08398f,
+             -0.31374f, -0.98408f, -0.29162f, 0.02774f,  -0.66895f, 0.03855f,
+             -0.03334f, -0.07212f, -0.52247f, -0.03846f, -0.02792f, -0.08086f,
+             -0.03364f, 0.21672f,  0.38760f,  -0.24623f, -0.15059f, -0.53843f,
+             -0.59208f, 0.65516f,  1.20788f,  0.88467f,  2.01372f,  0.79246f,
+             1.89825f,  -2.23863f, -2.76141f, -1.37515f, -0.20132f, -0.66666f,
+             1.37773f,  -1.07868f, 1.79213f,  0.65714f,  -0.40879f, -0.25309f,
+             1.25617f,  0.61719f,  -0.41101f, 0.32894f,  0.97866f,  1.72194f,
+             -0.15114f, -0.01706f, -0.50834f, 0.06508f,  0.49365f,  -0.29428f,
+             0.06052f,  -0.25120f, 0.42977f,  0.29983f,  -0.43788f, -0.11882f,
+             0.05905f,  0.26469f,  -0.30147f, 0.05154f,  -0.14485f, -0.03873f,
+             0.46109f,  -0.00832f, 0.21570f,  0.32781f,  0.00352f,  -0.54660f,
+             0.09486f,  -0.40345f, 0.20868f,  -4.42580f, 0.72275f,  1.04957f,
+             0.99624f,  0.03210f,  0.06766f,  -0.45590f, -0.08285f, 0.78651f,
+             0.28569f,  1.40545f,  0.39110f,  -0.07548f, -0.33576f, 1.56881f,
+             0.45125f,  3.60580f,  0.21732f,  0.16976f,  -0.11470f, 0.75122f,
+             1.21495f,  0.50204f,  -1.60450f, 0.14497f,  -0.00937f, -2.60240f,
+             -0.50324f, 1.57232f,  1.84889f,  0.02458f,  -1.11006f, 0.96480f,
+             -1.50489f, -1.08920f, 0.21835f,  -0.01206f, 0.11513f,  0.28393f,
+             -0.06832f, 0.28597f,  -0.23074f, 0.19634f,  -0.01901f, 0.22133f,
+             -0.24419f, -0.01560f, 0.16752f,  0.00772f,  0.02161f,  -0.43692f,
+             -0.57426f, -1.43245f, -0.77790f, 0.36000f,  -0.13499f, 6.42653f,
+             0.87666f,  -0.94847f, -0.32941f, -0.46009f, -0.33631f, -0.45081f,
+             -0.06085f, -0.66110f, -0.48376f, -0.46241f, 0.16331f,  0.19306f,
+             -1.37989f, 0.69546f,  3.17194f,  -0.39886f, -0.23159f, -1.99281f,
+             0.54139f,  0.70301f,  -0.37723f, -0.78042f, 0.41053f,  -0.87789f,
+             1.41124f,  -0.52307f, -0.21651f, -1.14064f, -0.74715f, 0.47405f,
+             0.55225f,  -0.02987f, -0.34985f, 0.94306f,  1.04305f,  -0.10294f,
+             0.23896f,  -0.96580f, -0.38712f, 0.53116f,  -0.10182f, 0.22020f,
+             0.15310f,  0.03357f,  0.52802f,  0.29718f,  -0.81904f, -0.35359f,
+             0.42777f,  0.40530f,  1.20917f,  -0.07148f, 1.01195f,  -0.17957f,
+             0.06567f,  -0.90801f, 0.66297f,  0.50968f,  -0.07081f, -0.02788f,
+             0.42831f,  3.55926f,  -0.87908f, -1.01936f, -0.35544f, -0.08288f,
+             -0.38195f, -0.18536f, 0.19022f,  0.08396f,  0.00244f,  -0.05982f,
+             0.04072f,  0.72922f,  -0.50711f, -0.74963f, -0.20814f, -0.88009f,
+             3.82015f,  1.37695f,  0.03691f,  -0.10811f, 0.66275f,  -0.01252f,
+             -0.58312f, -0.20587f, 0.51406f,  0.61138f,  1.03561f,  0.94708f,
+             0.08672f,  -1.35773f, -0.04229f, -0.90443f, -0.57822f, -1.08403f,
+             4.47565f,  -0.29846f, 0.25272f,  0.23656f,  -0.31507f, 0.41373f,
+             0.31591f,  0.33692f,  0.00160f,  0.28474f,  0.13350f,  -0.05221f,
+             -0.28297f, -0.34498f, -0.21047f, -0.27648f, 0.54017f,  0.79063f,
+             -1.59267f, -1.50795f, -1.70413f, -1.72474f, -1.61887f, -1.77899f,
+             -2.60979f, -1.53344f, -2.03713f, -0.50553f, 3.23190f,  -0.89295f,
+             0.19830f,  -1.12027f, 0.94527f,  0.69205f,  -0.65026f, 0.36370f,
+             0.05224f,  -1.33191f, 0.33571f,  0.37836f,  1.15068f,  2.31161f,
+             -0.03106f, 0.09218f,  2.60355f,  1.12978f,  -2.23842f, 0.34438f,
+             0.88148f,  -0.76537f, 2.83534f,  1.50344f,  2.13674f,  1.68420f,
+             -0.70187f, -0.26895f, 2.85734f,  3.64933f,  -0.53855f, -0.30371f,
+             -0.40932f, 0.62377f,  1.59155f,  -1.21111f, -0.44629f, 0.61961f,
+             0.17024f,  2.47948f,  0.55465f,  0.83448f,  -1.60511f, 0.68983f,
+             -0.91949f, 0.24831f,  -1.59970f, -0.53816f, 0.76906f,  -0.29011f,
+             0.37242f,  0.93621f,  0.16127f,  -0.38060f, 1.11183f,  -0.74169f,
+             -0.94185f, 0.06568f,  -0.14310f, 0.04459f,  -0.35945f, -0.52075f,
+             -0.17030f, -0.00960f, -0.68422f, -0.34568f, -0.34345f, 0.09646f,
+             -0.05917f, -0.03713f, 0.13008f,  0.58439f,  0.10846f,  -0.32863f,
+             -0.21670f, -0.08252f, 0.34134f,  -0.48552f, -1.07047f, 1.39562f,
+             0.57768f,  0.88941f,  0.64666f,  -0.23164f, -0.14476f, 0.15838f,
+             -2.10622f, -0.39697f, -1.43269f, -0.65439f, -1.21578f, -0.54751f,
+             -0.23281f, -0.02770f, -0.12364f, -0.38259f, 0.24085f,  -0.59336f,
+             -0.05055f, -0.39094f, 0.16277f,  0.41241f,  0.07444f,  -0.21273f,
+             -0.39558f, -0.18603f, 0.29595f,  -0.34243f, -0.31262f, -0.73180f,
+             0.08943f,  -0.23874f, -0.06860f, 0.07157f,  -0.43196f, -0.08806f,
+             -0.08236f, -0.26871f, 0.00373f,  -0.25404f, -0.39984f, -0.56368f,
+             0.26565f,  -0.44527f, -1.52280f, -1.32908f, 0.15051f,  0.20677f,
+             0.63835f,  0.21811f,  0.46198f,  0.91307f,  0.97315f,  0.68176f,
+             0.24188f,  -0.00093f, 0.27706f,  -0.04180f, -0.24926f, 0.01682f,
+             -0.09650f, 0.81093f,  0.53121f,  0.51193f,  -1.89005f, -0.26113f,
+             0.63162f,  0.18064f,  -0.11625f, 0.33407f,  -0.61584f, 0.17743f,
+             2.22288f,  -0.18528f, -0.50951f, -1.68150f, 0.40667f,  -1.97424f,
+             2.98199f,  1.94396f,  0.02670f,  1.01438f,  -0.84409f, -0.98323f,
+             -2.12406f, 0.50851f,  -0.80447f, 0.15649f,  1.69056f,  1.53438f,
+             2.03117f,  0.64105f,  0.85359f,  -0.31000f, -0.14731f, -1.21840f,
+             -0.54542f, -0.66917f, 0.19683f,  -0.05916f, -0.23448f, -0.21854f,
+             0.11985f,  -0.11765f, -0.22837f, -0.40467f, 0.49581f,  0.13027f,
+             0.22608f,  -0.25892f, -0.23515f, -0.43008f, 0.64330f,  -0.15779f,
+             4.91596f,  3.74172f,  -0.01853f, -0.05633f, 3.52828f,  6.45093f,
+             -0.36485f, 0.18349f,  -0.00450f, -0.22926f, 0.68934f,  -0.21531f,
+             0.05716f,  -0.08060f, 0.11153f,  -0.05991f, -0.12007f, 0.27074f,
+             0.18030f,  0.24757f,  -0.39990f, -0.04836f, -0.28649f, -0.02310f,
+             -0.08648f, -0.28826f, -0.07254f, 0.21345f,  -0.11284f, 0.06600f,
+             0.49284f,  0.02827f,  -0.35973f, -0.28765f, 0.64441f,  -0.07901f,
+             -1.43341f, -1.32239f, 0.07653f,  -0.03691f, -1.39370f, 0.44687f,
+             0.53096f,  1.31946f,  2.14809f,  -2.00421f, -1.26628f, 1.03885f,
+             -2.60842f, 1.85814f,  0.75869f,  0.46057f,  0.31825f,  0.53240f,
+             -0.47724f, 0.53694f,  1.01443f,  -0.69209f, 0.17691f,  -0.45517f,
+             2.45806f,  -3.66425f, -1.72835f, -1.49468f, 1.32189f,  -0.49305f,
+             -1.24297f, 0.60277f,  -1.41445f, 0.16413f,  -0.66027f, -0.85327f,
+             -0.23208f, 0.55539f,  -1.25484f, 0.70927f,  0.90246f,  -0.39686f,
+             3.39510f,  -1.36411f, 0.37148f,  -3.24379f, -2.39433f, 0.47144f,
+             0.08939f,  -0.01514f, 0.80475f,  -1.44397f, -0.56830f, -0.19813f,
+             1.63175f,  -1.45228f, 1.44804f,  -1.08043f, -2.73050f, 0.36157f,
+             1.43198f,  -0.17064f, 0.04689f,  4.13204f,  -0.17145f, -0.45914f,
+             0.26951f,  -0.43331f, -0.92574f, -0.43302f, -0.76836f, 0.50895f,
+             -0.56016f, -2.15068f, 0.05734f,  1.57973f,  0.50136f,  -0.58979f,
+             0.32304f,  -0.20144f, -2.83504f, -1.59596f, 1.14075f,  -3.35506f,
+             -0.91743f, 0.52344f,  0.23030f,  0.26531f,  -2.53394f, 0.53946f,
+             -0.22607f, 0.04608f,  -0.03066f, 2.58096f,  1.07551f,  0.35917f,
+             2.70303f,  -0.39135f, -0.05870f, -0.42456f, 0.65547f,  1.17413f,
+             -1.01273f, 0.41903f,  0.60067f,  0.06475f,  1.40028f,  0.31375f,
+             -1.18827f, -1.79237f, -2.16054f, -0.18552f, 0.40779f,  2.47420f,
+             1.60598f,  2.51905f,  1.43856f,  -1.77980f, -0.89020f, -0.25304f,
+             -1.53063f, -2.07139f, -1.06641f, -1.49733f, 2.07209f,  1.08333f,
+             -0.38585f, -0.52260f, -3.96459f, -1.11392f, -1.34735f, -1.00715f,
+             -0.08676f, 0.02009f,  -0.04225f, 0.29525f,  -0.62457f, 1.25567f,
+             0.62074f,  -0.10845f, 1.08668f,  -1.72712f, -0.10162f, -3.73208f,
+             -1.36195f, 1.24945f,  0.40479f,  -0.44104f, 1.78835f,  -0.54711f,
+             -0.45704f, 0.13736f,  -0.26916f, 0.40053f,  0.00769f,  0.01737f,
+             -0.04449f, -0.45853f, 0.32574f,  -0.10066f, -0.20889f, -0.42063f,
+             -0.01880f, 0.02063f,  -0.57622f, 0.00220f,  -0.41481f, 0.21500f,
+             0.77856f,  0.52091f,  -0.37127f, -0.16602f, 1.50396f,  1.28713f,
+             0.08025f,  0.37687f,  -0.58758f, 0.26340f,  0.68237f,  -0.32561f,
+             -0.38597f, -0.03738f, 0.05094f,  0.35864f,  0.29402f,  1.97878f,
+             1.59610f,  0.06686f,  -0.56105f, 3.04528f,  2.98407f,  -2.56387f,
+             -0.14111f, -0.05276f, 0.05093f,  1.43481f,  -0.21868f, -0.03120f,
+             0.84077f,  -0.26040f, 0.83573f,  0.44524f,  -0.38470f, 0.32942f,
+             0.41419f,  0.03451f,  -0.39586f, 0.34182f,  -0.47267f, -0.44133f,
+             0.03274f,  0.64405f,  0.25461f,  0.34606f,  -0.24311f, -0.25747f,
+             -0.42828f, -0.16665f, -0.53530f, 1.60349f,  1.71093f,  -1.98463f,
+             -1.76171f, -4.02564f, -0.86771f, -2.01086f, -2.05039f, 0.75301f,
+             -1.58901f, 0.25703f,  -0.47220f, -0.03754f, -0.99208f, -0.34186f,
+             -0.66435f, -0.75609f, 1.97819f,  -1.84172f, -0.49220f, -0.45623f,
+             -2.53327f, 0.26828f,  -0.31886f, 1.39814f,  -1.92251f, -0.65512f,
+             -1.00151f, -0.65779f, -1.39199f, 0.52147f,  1.17518f,  -0.79185f,
+             -0.39961f, 0.71962f,  -0.88161f, 0.16256f,  -0.25754f, 1.08370f,
+             -0.92590f, -4.04821f, -0.54154f, 0.16665f,  -0.34683f, -1.51049f,
+             -1.52053f, 0.68547f,  -1.71874f, 0.33837f,  -1.04910f, 0.29365f,
+             0.18723f,  0.96826f,  -0.66771f, -1.19261f, -1.88262f, -0.06630f,
+             1.88106f,  -0.80050f, -1.71436f, -0.31941f, 0.63553f,  1.54756f,
+             -1.23407f, 0.52384f,  0.22354f,  -0.34108f, 0.08610f,  0.00699f,
+             0.37136f,  0.79371f,  0.17867f,  0.43125f,  -0.08364f, -0.00536f,
+             0.38589f,  -0.38192f, 2.46420f,  -4.95342f, -0.05129f, 0.24330f,
+             4.10377f,  -0.09634f, 0.06190f,  -0.10095f, 0.10639f,  0.84283f,
+             -0.66132f, 0.30070f,  -0.27125f, 0.10007f,  0.07156f,  0.12596f,
+             -0.84956f, -0.73166f, 2.29945f,  0.20016f,  -0.52447f, 0.53079f,
+             -5.11437f, -0.14355f, -0.56753f, 0.29894f,  1.36724f,  -4.18788f,
+             -4.54924f, -0.14036f, 1.08707f,  -0.46971f, -0.70524f, 0.40919f,
+             -0.36412f, 0.61871f,  0.36490f,  0.27959f,  0.31333f,  0.72363f,
+             -0.12954f, -0.29154f, 0.36509f,  -0.50947f, -0.16829f, -0.07787f,
+             -0.23850f, 0.56955f,  0.53635f,  -0.51060f, 0.40341f,  -0.25305f,
+             -0.24747f, 0.06249f,  0.29373f,  0.16034f,  0.19666f,  -0.55598f,
+             -0.51409f, 0.03709f,  -0.40533f, 0.04837f,  -0.01790f, -0.31404f,
+             -0.20858f, -7.44090f, -0.19129f, 0.34522f,  0.32686f,  0.26268f,
+             -0.14069f, -0.46890f, 0.00656f,  0.99568f,  -0.21409f, -0.04172f,
+             0.06155f,  -0.58416f, -0.00220f, 0.53917f,  -0.17184f, 0.12604f,
+             0.14324f,  -0.47364f, -0.44595f, 0.03335f,  0.05754f,  -0.10465f,
+             -0.60116f, 0.06808f,  0.74665f,  -0.09468f, -0.22019f, -0.37092f,
+             -0.15980f, 0.24710f,  0.09047f,  1.13834f,  0.98147f,  -0.67229f,
+             -0.94558f, -1.07998f, -0.77535f, 0.67678f,  0.91947f,  0.04130f,
+             0.24570f,  -0.23502f, 0.07140f,  5.01414f,  -0.42455f, 0.15214f,
+             -0.06943f, -0.02245f, 0.55778f,  0.19904f,  -0.11874f, -0.43990f,
+             0.10878f,  -0.28505f, 0.56417f,  -0.03703f, -0.13008f, 0.13934f,
+             -0.24387f, -1.04753f, -0.71977f, 0.03831f,  -0.04141f, 0.07736f,
+             -0.57109f, -0.13095f, -0.56810f, -0.08898f, -0.35147f, 0.43868f,
+             0.08960f,  0.10786f,  -0.21675f, 0.13877f,  -0.00299f, 0.07219f,
+             -0.99991f, -0.61501f, 0.65312f,  -0.83098f, 0.39323f,  -2.75927f,
+             0.81694f,  -0.28241f, -2.18768f, 0.34134f,  1.20591f,  1.22232f,
+             -0.64396f, -0.58826f, 1.01791f,  0.00321f,  -3.13828f, 1.13783f,
+             -0.86514f, -0.08370f, -0.35267f, 0.37178f,  -2.75818f, -6.59164f,
+             -3.23005f, -1.53321f, 1.42684f,  -4.39138f, 2.05253f,  -0.02781f,
+             -0.76007f, 0.92340f,  -0.08111f, -1.23684f, 0.48422f,  -0.40752f,
+             0.14077f,  -1.72232f, -0.00208f, -1.30060f, -1.78436f, -0.05391f,
+             -0.39061f, -0.63657f, 0.49918f,  0.20668f,  -3.85847f, 0.93580f,
+             0.32614f,  -0.14702f, 0.95100f,  0.19870f,  -0.35641f, 0.24500f,
+             -0.00832f, 0.11008f,  -0.18393f, -0.20785f, 0.33332f,  0.24374f,
+             -0.95761f, 0.33066f,  -0.92643f, -4.62375f, -0.43035f, -0.96366f,
+             4.00974f,  2.11254f,  -3.59420f, 0.85364f,  -2.31614f, 0.05530f,
+             1.73165f,  2.48115f,  -3.94476f, 3.64559f,  -0.29305f, 3.76776f,
+             1.98696f,  3.68108f,  1.98553f,  1.41208f,  -0.18020f, -2.48263f,
+             3.78622f,  1.55076f,  3.51036f,  3.33941f,  2.28655f,  1.00124f,
+             -3.92312f, 3.89978f,  3.90257f,  -2.99901f, -0.93003f, 1.65249f,
+             -0.11631f, 1.11693f,  0.65334f,  -2.34870f, 2.60394f,  2.17219f,
+             -8.45155f, -0.55153f, -2.00431f, 2.48126f,  2.76832f,  2.62461f,
+             -2.09580f, -2.12298f, 1.69051f,  -2.57117f, -2.58804f, -0.19290f,
+             1.89817f,  4.08995f,  -0.04311f, 5.18602f,  3.90296f,  3.64248f,
+             3.12903f,  -2.37662f, -2.83318f, -2.91755f, -0.60725f, -3.46475f,
+             -1.31273f, 3.65086f,  0.06778f,  -0.43647f, -3.21793f },
+};
+static const float av1_prune_tx_split_thresholds[6] = {
+  /* BLOCK_4X8 */
+  1.00f,
+  /* BLOCK_8X4 */
+  1.22f,
+  /* BLOCK_8X8 */
+  1.26f,
+  /* BLOCK_8X16 */
+  0.28f,
+  /* BLOCK_16X8 */
+  0.52f,
+  /* BLOCK_16X16 */
+  0.65f
+};
+
 #ifdef __cplusplus
 }  // extern "C"
 #endif