/*
 * Copyright (c) 2021, Alliance for Open Media. All rights reserved
 *
 * This source code is subject to the terms of the BSD 3-Clause Clear License
 * and the Alliance for Open Media Patent License 1.0. If the BSD 3-Clause Clear
 * License was not distributed with this source code in the LICENSE file, you
 * can obtain it at aomedia.org/license/software-license/bsd-3-c-c/.  If the
 * Alliance for Open Media Patent License 1.0 was not distributed with this
 * source code in the PATENTS file, you can obtain it at
 * aomedia.org/license/patent-license/.
 */

#ifndef AOM_AV1_COMMON_COMMON_DATA_H_
#define AOM_AV1_COMMON_COMMON_DATA_H_

#include <assert.h>
#include <stdbool.h>

#include "av1/common/enums.h"
#include "aom/aom_integer.h"
#include "aom_dsp/aom_dsp_common.h"

#ifdef __cplusplus
extern "C" {
#endif

// Log 2 conversion lookup tables in units of mode info (4x4).
// The Mi_Width_Log2 table in the spec (Section 9.3. Conversion tables).
static const uint8_t mi_size_wide_log2[BLOCK_SIZES_ALL] = {
  0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5,
  5, 6, 6, 0, 2, 1, 3, 2, 4, 0, 3, 1, 4, 0, 4,
};
// The Mi_Height_Log2 table in the spec (Section 9.3. Conversion tables).
static const uint8_t mi_size_high_log2[BLOCK_SIZES_ALL] = {
  0, 1, 0, 1, 2, 1, 2, 3, 2, 3, 4, 3, 4, 5, 4, 5,
  6, 5, 6, 2, 0, 3, 1, 4, 2, 3, 0, 4, 1, 4, 0,
};

// Width/height lookup tables in units of mode info (4x4).
// The Num_4x4_Blocks_Wide table in the spec (Section 9.3. Conversion tables).
static const uint8_t mi_size_wide[BLOCK_SIZES_ALL] = {
  1,  1,  2,  2, 2, 4, 4, 4, 8,  8, 8, 16, 16, 16, 32, 32,
  32, 64, 64, 1, 4, 2, 8, 4, 16, 1, 8, 2,  16, 1,  16,
};

// The Num_4x4_Blocks_High table in the spec (Section 9.3. Conversion tables).
static const uint8_t mi_size_high[BLOCK_SIZES_ALL] = {
  1,  2,  1,  2, 4, 2, 4, 8,  4, 8, 16, 8,  16, 32, 16, 32,
  64, 32, 64, 4, 1, 8, 2, 16, 4, 8, 1,  16, 2,  16, 1,
};

// Width/height lookup tables in units of samples.
// The Block_Width table in the spec (Section 9.3. Conversion tables).
static const uint16_t block_size_wide[BLOCK_SIZES_ALL] = {
  4,   4,   8,   8, 8,  16, 16, 16, 32, 32, 32, 64, 64, 64, 128, 128,
  128, 256, 256, 4, 16, 8,  32, 16, 64, 4,  32, 8,  64, 4,  64,
};

// The Block_Height table in the spec (Section 9.3. Conversion tables).
static const uint16_t block_size_high[BLOCK_SIZES_ALL] = {
  4,   8,   4,   8,  16, 8,  16, 32, 16, 32, 64, 32, 64, 128, 64, 128,
  256, 128, 256, 16, 4,  32, 8,  64, 16, 32, 4,  64, 8,  64,  4,
};

// Maps a block size to a context.
// The Size_Group table in the spec (Section 9.3. Conversion tables).
// AOMMIN(3, AOMMIN(mi_size_wide_log2(bsize), mi_size_high_log2(bsize)))
static const uint8_t size_group_lookup[BLOCK_SIZES_ALL] = {
  0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3,
  3, 3, 3, 0, 0, 1, 1, 2, 2, 1, 1, 2, 2, 2, 2,
};

#if CONFIG_NEW_TX_PARTITION
#if CONFIG_TX_PARTITION_CTX
// Maps a block size to a transform partition context.
// 1) 0: for block sizes do not allow 4way partition
// 2) For 8x8 <= square block size < 64x64, assuming i mapping value is a used
//    for NxN square block size, then (i + 1) is the mapping value of (N)x(2N)
//    and (2N)x(N) sizes.
// 3) For block size >= 64x64, the mapping value is 7
// 4) For 1:4/4:1 and 1:8/8:1 block sizes, mapping value is 8

static const uint8_t size_to_tx_part_group_lookup[BLOCK_SIZES_ALL] = {
  0, 0, 0, 1, 2, 2, 3, 4, 4, 5, 6, 6, 7, 7, 7, 7,
  7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8
};
#endif  // CONFIG_TX_PARTITION_CTX

#if CONFIG_BUGFIX_TX_PARTITION_TYPE_SIGNALING
/*
Maps a block size to a transform partition context.
size_to_tx_type_group_vert_and_horz_lookup - 1-2
size_to_tx_type_group_vert_or_horz_lookup - 0-13
size_to_tx_type_group_vert_and_horz_lookup - used when block can support
both vertical and horizontal TX partitions.
size_to_tx_type_group_vert_or_horz_lookup - used when block can support
either vertical or horizontal TX partitions.
0 in size_to_tx_type_group_vert_or_horz_lookup is case when there will not
be any TX partitions (TX_PARTITION_NONE)
*/
static const uint8_t
    size_to_tx_type_group_vert_and_horz_lookup[BLOCK_SIZES_ALL] = {
      BLOCK_INVALID,  // unused
      BLOCK_INVALID,  // unused
      BLOCK_INVALID,  // unused
      0,
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      9,
      9,
      9,
      9,
      9,
      9,
      BLOCK_INVALID,  // unused
      BLOCK_INVALID,  // unused
      10,
      11,
      12,
      13,
      BLOCK_INVALID,  // unused
      BLOCK_INVALID,  // unused
      10,
      11,
      BLOCK_INVALID,  // unused
      BLOCK_INVALID   // unused
    };

static const uint8_t
    size_to_tx_type_group_vert_or_horz_lookup[BLOCK_SIZES_ALL] = {
      0,
      0,
      0,
      BLOCK_INVALID,  // unused
      BLOCK_INVALID,  // unused
      BLOCK_INVALID,  // unused
      BLOCK_INVALID,  // unused
      BLOCK_INVALID,  // unused
      BLOCK_INVALID,  // unused
      BLOCK_INVALID,  // unused
      BLOCK_INVALID,  // unused
      BLOCK_INVALID,  // unused
      BLOCK_INVALID,  // unused
      BLOCK_INVALID,  // unused
      BLOCK_INVALID,  // unused
      BLOCK_INVALID,  // unused
      BLOCK_INVALID,  // unused
      BLOCK_INVALID,  // unused
      BLOCK_INVALID,  // unused
      1,
      2,
      BLOCK_INVALID,  // unused
      BLOCK_INVALID,  // unused
      BLOCK_INVALID,  // unused
      BLOCK_INVALID,  // unused
      1,
      2,
      BLOCK_INVALID,  // unused
      BLOCK_INVALID,  // unused
      1,
      2
    };
#endif  // CONFIG_BUGFIX_TX_PARTITION_TYPE_SIGNALING

static const uint8_t size_to_tx_type_group_lookup[BLOCK_SIZES_ALL] = {
  0,  0,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  10, 10, 10, 10,
  10, 10, 10, 11, 12, 13, 14, 15, 16, 11, 12, 13, 14, 11, 12
};
#else
#if CONFIG_TX_PARTITION_CTX
// Maps a block size to a transform partition context.
// 1) 0: for block sizes do not allow 4way partition
// 2) For 8x8 <= square block size < 64x64, assuming i mapping value is a used
//    for NxN square block size, then (i + 1) is the mapping value of (N)x(2N)
//    and (2N)x(N) sizes.
// 3) For block size >= 64x64, the mapping value is 7
// 4) For 1:4/4:1 and 1:8/8:1 block sizes, mapping value is 8
static const uint8_t size_to_tx_part_group_lookup[BLOCK_SIZES_ALL] = {
  0, 0, 0, 1, 2, 2, 3, 4, 4, 5, 6, 6, 7, 7, 7, 7,
  7, 7, 7, 0, 0, 8, 8, 8, 8, 0, 0, 8, 8, 0, 0
};
#endif  // CONFIG_TX_PARTITION_CTX
#endif  // CONFIG_NEW_TX_PARTITION

static const uint8_t fsc_bsize_groups[BLOCK_SIZES_ALL] = {
  0, 1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 6, 6, 6, 6, 6,
  6, 6, 6, 3, 3, 4, 4, 6, 6, 4, 4, 6, 6, 6, 6
};

static const uint8_t num_pels_log2_lookup[BLOCK_SIZES_ALL] = {
  4,  5,  5,  6, 7, 7, 8, 9,  9,  10, 11, 11, 12, 13, 13, 14,
  15, 15, 16, 6, 6, 8, 8, 10, 10, 7,  7,  9,  9,  8,  8,
};

// Supported weighting factor for compound weighted prediction
static const int8_t cwp_weighting_factor[2][MAX_CWP_NUM] = {
  { 8, 12, 4, 10, 6 },
  { 8, 12, 4, 20, -4 },
};

#if CONFIG_TIP_ENHANCEMENT
// Supported weighting factor for TIP
static const int8_t tip_weighting_factors[MAX_TIP_WTD_NUM] = { 8,  12, 16, 18,
                                                               20, 4,  6,  -4 };
#endif  // CONFIG_TIP_ENHANCEMENT

#if CONFIG_VQ_MVD_CODING
// Supported set of MVD values in unit of 1/8 pel for AMVD mode
static const int16_t amvd_index_to_mvd[MAX_AMVD_INDEX + 1] = { 0,  2,  4,
                                                               6,  8,  16,
                                                               32, 64, 128 };
#endif  // CONFIG_VQ_MVD_CODING

/* clang-format off */
// This table covers all block sizes.
static const BLOCK_SIZE
    subsize_lookup[ALL_PARTITION_TYPES][BLOCK_SIZES_ALL] = { {
    // PARTITION_NONE
    BLOCK_4X4,                                   // 4
    BLOCK_4X8,     BLOCK_8X4,     BLOCK_8X8,     // 8
    BLOCK_8X16,    BLOCK_16X8,    BLOCK_16X16,   // 16
    BLOCK_16X32,   BLOCK_32X16,   BLOCK_32X32,   // 32
    BLOCK_32X64,   BLOCK_64X32,   BLOCK_64X64,   // 64
    BLOCK_64X128,  BLOCK_128X64,  BLOCK_128X128, // 128
    BLOCK_128X256, BLOCK_256X128, BLOCK_256X256, // 256
    BLOCK_4X16,    BLOCK_16X4,                   // 4,16
    BLOCK_8X32,    BLOCK_32X8,                   // 8,32
    BLOCK_16X64,   BLOCK_64X16,                  // 16,64
    BLOCK_4X32,    BLOCK_32X4,                   // 4, 32
    BLOCK_8X64,    BLOCK_64X8,                   // 8, 64
    BLOCK_4X64,    BLOCK_64X4,                   // 4, 64
  }, {
    // PARTITION_HORZ
    BLOCK_INVALID,                               // 4
    BLOCK_4X4,     BLOCK_INVALID, BLOCK_8X4,     // 8
    BLOCK_8X8,     BLOCK_16X4,    BLOCK_16X8,    // 16
    BLOCK_16X16,   BLOCK_32X8,    BLOCK_32X16,   // 32
    BLOCK_32X32,   BLOCK_64X16,   BLOCK_64X32,   // 64
    BLOCK_64X64,   BLOCK_INVALID, BLOCK_128X64,  // 128
    BLOCK_128X128, BLOCK_INVALID, BLOCK_256X128, // 256
    BLOCK_4X8,     BLOCK_INVALID,                // 4,16
    BLOCK_8X16,    BLOCK_32X4,                   // 8,32
    BLOCK_16X32,   BLOCK_64X8,                   // 16,64
    BLOCK_4X16,    BLOCK_INVALID,                // 4, 32
    BLOCK_8X32,    BLOCK_64X4,                   // 8, 64
    BLOCK_4X32,    BLOCK_INVALID,                // 4, 64
  }, {
    // PARTITION_VERT
    BLOCK_INVALID,                               // 4
    BLOCK_INVALID, BLOCK_4X4,     BLOCK_4X8,     // 8
    BLOCK_4X16,    BLOCK_8X8,     BLOCK_8X16,    // 16
    BLOCK_8X32,    BLOCK_16X16,   BLOCK_16X32,   // 32
    BLOCK_16X64,   BLOCK_32X32,   BLOCK_32X64,   // 64
    BLOCK_INVALID, BLOCK_64X64,   BLOCK_64X128,  // 128
    BLOCK_INVALID, BLOCK_128X128, BLOCK_128X256, // 256
    BLOCK_INVALID, BLOCK_8X4,                    // 4,16
    BLOCK_4X32,    BLOCK_16X8,                   // 8,32
    BLOCK_8X64,    BLOCK_32X16,                  // 16,64
    BLOCK_INVALID, BLOCK_16X4,                   // 4, 32
    BLOCK_4X64,    BLOCK_32X8,                   // 8, 64
    BLOCK_INVALID, BLOCK_32X4,                   // 4, 64
  }, {
    // PARTITION_HORZ_3
    BLOCK_INVALID,                               // 4
    BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID, // 8
    BLOCK_8X4,     BLOCK_INVALID, BLOCK_16X4,    // 16
    BLOCK_16X8,    BLOCK_32X4, BLOCK_32X8,       // 32
    BLOCK_32X16,   BLOCK_64X8, BLOCK_64X16,      // 64
    BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID, // 128
    BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID, // 256
    BLOCK_INVALID, BLOCK_INVALID,                // 4,16
    BLOCK_8X8,     BLOCK_INVALID,                // 8,32
    BLOCK_16X16,   BLOCK_64X4,                   // 16,64
    BLOCK_INVALID, BLOCK_INVALID,                // 4, 32
    BLOCK_INVALID, BLOCK_INVALID,                // 8, 64
    BLOCK_INVALID, BLOCK_INVALID,                // 4, 64
  }, {
    // PARTITION_VERT_3
    BLOCK_INVALID,                               // 4
    BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID, // 8
    BLOCK_INVALID, BLOCK_4X8,     BLOCK_4X16,    // 16
    BLOCK_4X32,    BLOCK_8X16,    BLOCK_8X32,    // 32
    BLOCK_8X64,    BLOCK_16X32,   BLOCK_16X64,   // 64
    BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID, // 128
    BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID, // 256
    BLOCK_INVALID, BLOCK_INVALID,                // 4,16
    BLOCK_INVALID, BLOCK_8X8,                    // 8,32
    BLOCK_4X64,    BLOCK_16X16,                  // 16,64
    BLOCK_INVALID, BLOCK_INVALID,                // 4, 32
    BLOCK_INVALID, BLOCK_INVALID,                // 8, 64
    BLOCK_INVALID, BLOCK_INVALID,                // 4, 64
  }, {  // PARTITION_HORZ_4A
    BLOCK_INVALID,                               // 4
    BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID, // 8
    BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID, // 16
    BLOCK_16X4,    BLOCK_INVALID, BLOCK_32X4,    // 32
    BLOCK_32X8,    BLOCK_64X4,    BLOCK_64X8,    // 64
    BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID, // 128
    BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID, // 256
    BLOCK_INVALID, BLOCK_INVALID,                // 4,16
    BLOCK_8X4,     BLOCK_INVALID,                // 8,32
    BLOCK_16X8,    BLOCK_INVALID,                // 16,64
    BLOCK_INVALID, BLOCK_INVALID,                // 4, 32
    BLOCK_INVALID, BLOCK_INVALID,                // 8, 64
    BLOCK_INVALID, BLOCK_INVALID,                // 4, 64
  }, {  // PARTITION_HORZ_4B
    BLOCK_INVALID,                               // 4
    BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID, // 8
    BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID, // 16
    BLOCK_16X4,    BLOCK_INVALID, BLOCK_32X4,    // 32
    BLOCK_32X8,    BLOCK_64X4,    BLOCK_64X8,    // 64
    BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID, // 128
    BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID, // 256
    BLOCK_INVALID, BLOCK_INVALID,                // 4,16
    BLOCK_8X4,     BLOCK_INVALID,                // 8,32
    BLOCK_16X8,    BLOCK_INVALID,                // 16,64
    BLOCK_INVALID, BLOCK_INVALID,                // 4, 32
    BLOCK_INVALID, BLOCK_INVALID,                // 8, 64
    BLOCK_INVALID, BLOCK_INVALID,                // 4, 64
  }, {  // PARTITION_VERT_4A
    BLOCK_INVALID,                               // 4
    BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID, // 8
    BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID, // 16
    BLOCK_INVALID, BLOCK_4X16,    BLOCK_4X32,    // 32
    BLOCK_4X64,    BLOCK_8X32,    BLOCK_8X64,    // 64
    BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID, // 128
    BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID, // 256
    BLOCK_INVALID, BLOCK_INVALID,                // 4,16
    BLOCK_INVALID, BLOCK_4X8,                    // 8,32
    BLOCK_INVALID, BLOCK_8X16,                   // 16,64
    BLOCK_INVALID, BLOCK_INVALID,                // 4, 32
    BLOCK_INVALID, BLOCK_INVALID,                // 8, 64
    BLOCK_INVALID, BLOCK_INVALID,                // 4, 64
  }, {  // PARTITION_VERT_4B
     BLOCK_INVALID,                               // 4
    BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID, // 8
    BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID, // 16
    BLOCK_INVALID, BLOCK_4X16,    BLOCK_4X32,    // 32
    BLOCK_4X64,    BLOCK_8X32,    BLOCK_8X64,    // 64
    BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID, // 128
    BLOCK_INVALID, BLOCK_INVALID, BLOCK_INVALID, // 256
    BLOCK_INVALID, BLOCK_INVALID,                // 4,16
    BLOCK_INVALID, BLOCK_4X8,                    // 8,32
    BLOCK_INVALID, BLOCK_8X16,                   // 16,64
    BLOCK_INVALID, BLOCK_INVALID,                // 4, 32
    BLOCK_INVALID, BLOCK_INVALID,                // 8, 64
    BLOCK_INVALID, BLOCK_INVALID,                // 4, 64
  }, {
    // PARTITION_SPLIT
    BLOCK_INVALID,                               // 4
    BLOCK_INVALID, BLOCK_INVALID, BLOCK_4X4,     // 8
    BLOCK_INVALID, BLOCK_INVALID, BLOCK_8X8,     // 16
    BLOCK_INVALID, BLOCK_INVALID, BLOCK_16X16,   // 32
    BLOCK_INVALID, BLOCK_INVALID, BLOCK_32X32,   // 64
    BLOCK_INVALID, BLOCK_INVALID, BLOCK_64X64,   // 128
    BLOCK_INVALID, BLOCK_INVALID, BLOCK_128X128, // 256
    BLOCK_INVALID, BLOCK_INVALID,                // 4,16
    BLOCK_INVALID, BLOCK_INVALID,                // 8,32
    BLOCK_INVALID, BLOCK_INVALID,                // 16,64
    BLOCK_INVALID, BLOCK_INVALID,                // 4, 32
    BLOCK_INVALID, BLOCK_INVALID,                // 8, 64
    BLOCK_INVALID, BLOCK_INVALID,                // 4, 64
  },
};
/* clang-format on */

static AOM_INLINE PARTITION_TYPE sdp_chroma_part_from_luma(
    BLOCK_SIZE bsize, PARTITION_TYPE luma_part, int ssx, int ssy) {
  const int bh_chr = block_size_high[bsize] >> ssy;
  const int bw_chr = block_size_wide[bsize] >> ssx;
  assert(bh_chr >= 16 && bw_chr >= 16 &&
         "Current implementation cannot handle SDP for sub 16x16 blocks!");

  switch (luma_part) {
    case PARTITION_NONE: return PARTITION_NONE;
    case PARTITION_HORZ: return (bh_chr < 8) ? PARTITION_NONE : PARTITION_HORZ;
    case PARTITION_VERT: return (bw_chr < 8) ? PARTITION_NONE : PARTITION_VERT;
    case PARTITION_HORZ_4A:
      if (bh_chr >= 32) {
        return PARTITION_HORZ_4A;
      } else if (bh_chr >= 8) {
        return PARTITION_HORZ;
      } else {
        return PARTITION_NONE;
      }
    case PARTITION_HORZ_4B:
      if (bh_chr >= 32) {
        return PARTITION_HORZ_4B;
      } else if (bh_chr >= 8) {
        return PARTITION_HORZ;
      } else {
        return PARTITION_NONE;
      }
    case PARTITION_VERT_4A:
      if (bw_chr >= 32) {
        return PARTITION_VERT_4A;
      } else if (bw_chr >= 8) {
        return PARTITION_VERT;
      } else {
        return PARTITION_NONE;
      }
    case PARTITION_VERT_4B:
      if (bw_chr >= 32) {
        return PARTITION_VERT_4B;
      } else if (bw_chr >= 8) {
        return PARTITION_VERT;
      } else {
        return PARTITION_NONE;
      }
    case PARTITION_HORZ_3:
      if (bh_chr >= 16)
        return PARTITION_HORZ_3;
      else
        return (bh_chr < 8) ? PARTITION_NONE : PARTITION_HORZ;
    case PARTITION_VERT_3:
      if (bw_chr >= 16)
        return PARTITION_VERT_3;
      else
        return (bw_chr < 8) ? PARTITION_NONE : PARTITION_VERT;
    case PARTITION_SPLIT:
      return (bh_chr < 8 || bw_chr < 8) ? PARTITION_NONE : PARTITION_SPLIT;
    case PARTITION_INVALID: return PARTITION_INVALID;
    default: assert(0);
  }
  return PARTITION_INVALID;
}

/* clang-format off */

static const TX_SIZE max_txsize_lookup[BLOCK_SIZES_ALL] = {
  //                   4X4
                       TX_4X4,
  // 4X8,    8X4,      8X8
  TX_4X4,    TX_4X4,   TX_8X8,
  // 8X16,   16X8,     16X16
  TX_8X8,    TX_8X8,   TX_16X16,
  // 16X32,  32X16,    32X32
  TX_16X16,  TX_16X16, TX_32X32,
  // 32X64,  64X32,
  TX_32X32,  TX_32X32,
  // 64X64
  TX_64X64,
  // 64x128, 128x64,   128x128
  TX_64X64,  TX_64X64, TX_64X64,
  // 128X256,256X128,  256X256
  TX_64X64,  TX_64X64, TX_64X64,
  // 4x16,   16x4,     8x32
  TX_4X4,    TX_4X4,   TX_8X8,
  // 32x8,   16x64,    64x16
  TX_8X8,    TX_16X16, TX_16X16,
  // 4x32,   32x4,     8x64
  TX_4X4,    TX_4X4,   TX_8X8,
  // 64x8,   4x64,     64x4
  TX_8X8,    TX_4X4,   TX_4X4,
};

static const TX_SIZE max_txsize_rect_lookup[BLOCK_SIZES_ALL] = {
      // 4X4
      TX_4X4,
      // 4X8,    8X4,      8X8
      TX_4X8,    TX_8X4,   TX_8X8,
      // 8X16,   16X8,     16X16
      TX_8X16,   TX_16X8,  TX_16X16,
      // 16X32,  32X16,    32X32
      TX_16X32,  TX_32X16, TX_32X32,
      // 32X64,  64X32,
      TX_32X64,  TX_64X32,
      // 64X64
      TX_64X64,
      // 64x128, 128x64,   128x128
      TX_64X64,  TX_64X64, TX_64X64,
      // 128X256,256X128,  256X256
      TX_64X64,  TX_64X64, TX_64X64,
      // 4x16,   16x4,
      TX_4X16,   TX_16X4,
      // 8x32,   32x8
      TX_8X32,   TX_32X8,
      // 16x64,  64x16
      TX_16X64,  TX_64X16,
      // 4x32,   32x4,
      TX_4X32,   TX_32X4,
      // 8x64,   64x8
      TX_8X64,   TX_64X8,
      // 4x64,   64x4
      TX_4X64,   TX_64X4
};

static const TX_TYPE_1D vtx_tab[TX_TYPES] = {
  DCT_1D,      ADST_1D, DCT_1D,      ADST_1D,
  FLIPADST_1D, DCT_1D,  FLIPADST_1D, ADST_1D, FLIPADST_1D, IDTX_1D,
  DCT_1D,      IDTX_1D, ADST_1D,     IDTX_1D, FLIPADST_1D, IDTX_1D,
};

static const TX_TYPE_1D htx_tab[TX_TYPES] = {
  DCT_1D,  DCT_1D,      ADST_1D,     ADST_1D,
  DCT_1D,  FLIPADST_1D, FLIPADST_1D, FLIPADST_1D, ADST_1D, IDTX_1D,
  IDTX_1D, DCT_1D,      IDTX_1D,     ADST_1D,     IDTX_1D, FLIPADST_1D,
};

#define TXSIZE_CAT_INVALID (-1)

/* clang-format on */

#if CONFIG_NEW_TX_PARTITION && CONFIG_INSPECTION
// Smallest sub_tx size units. Used to compute the index in the
// tx type map.
// TODO(urvang): Is this even required?
static const TX_SIZE smallest_sub_tx_size_map[TX_SIZES_ALL] = {
  TX_4X4,    // TX_4X4
  TX_4X4,    // TX_8X8
  TX_4X4,    // TX_16X16
  TX_8X8,    // TX_32X32
  TX_16X16,  // TX_64X64
  TX_4X4,    // TX_4X8
  TX_4X4,    // TX_8X4
  TX_4X4,    // TX_8X16
  TX_4X4,    // TX_16X8
  TX_4X8,    // TX_16X32
  TX_8X4,    // TX_32X16
  TX_8X16,   // TX_32X64
  TX_16X8,   // TX_64X32
  TX_4X4,    // TX_4X16
  TX_4X4,    // TX_16X4
  TX_4X8,    // TX_8X32
  TX_8X4,    // TX_32X8
  TX_4X16,   // TX_16X64
  TX_16X4,   // TX_64X16
};
#endif  // CONFIG_NEW_TX_PARTITION && CONFIG_INSPECTION

static const TX_SIZE sub_tx_size_map[TX_SIZES_ALL] = {
  TX_4X4,    // TX_4X4
  TX_4X4,    // TX_8X8
  TX_8X8,    // TX_16X16
  TX_16X16,  // TX_32X32
  TX_32X32,  // TX_64X64
  TX_4X4,    // TX_4X8
  TX_4X4,    // TX_8X4
  TX_8X8,    // TX_8X16
  TX_8X8,    // TX_16X8
  TX_16X16,  // TX_16X32
  TX_16X16,  // TX_32X16
  TX_32X32,  // TX_32X64
  TX_32X32,  // TX_64X32
  TX_4X8,    // TX_4X16
  TX_8X4,    // TX_16X4
  TX_8X16,   // TX_8X32
  TX_16X8,   // TX_32X8
  TX_16X32,  // TX_16X64
  TX_32X16,  // TX_64X16
  TX_4X16,   // TX_4X32
  TX_16X4,   // TX_32X4
  TX_8X32,   // TX_8X64
  TX_32X8,   // TX_64X8
  TX_4X32,   // TX_4X64
  TX_32X4,   // TX_64X4
};

static const TX_SIZE txsize_horz_map[TX_SIZES_ALL] = {
  TX_4X4,    // TX_4X4
  TX_8X8,    // TX_8X8
  TX_16X16,  // TX_16X16
  TX_32X32,  // TX_32X32
  TX_64X64,  // TX_64X64
  TX_4X4,    // TX_4X8
  TX_8X8,    // TX_8X4
  TX_8X8,    // TX_8X16
  TX_16X16,  // TX_16X8
  TX_16X16,  // TX_16X32
  TX_32X32,  // TX_32X16
  TX_32X32,  // TX_32X64
  TX_64X64,  // TX_64X32
  TX_4X4,    // TX_4X16
  TX_16X16,  // TX_16X4
  TX_8X8,    // TX_8X32
  TX_32X32,  // TX_32X8
  TX_16X16,  // TX_16X64
  TX_64X64,  // TX_64X16
  TX_4X4,    // TX_4X32
  TX_32X32,  // TX_32X4
  TX_8X8,    // TX_8X64
  TX_64X64,  // TX_64X8
  TX_4X4,    // TX_4X64
  TX_64X64,  // TX_64X4
};

static const TX_SIZE txsize_vert_map[TX_SIZES_ALL] = {
  TX_4X4,    // TX_4X4
  TX_8X8,    // TX_8X8
  TX_16X16,  // TX_16X16
  TX_32X32,  // TX_32X32
  TX_64X64,  // TX_64X64
  TX_8X8,    // TX_4X8
  TX_4X4,    // TX_8X4
  TX_16X16,  // TX_8X16
  TX_8X8,    // TX_16X8
  TX_32X32,  // TX_16X32
  TX_16X16,  // TX_32X16
  TX_64X64,  // TX_32X64
  TX_32X32,  // TX_64X32
  TX_16X16,  // TX_4X16
  TX_4X4,    // TX_16X4
  TX_32X32,  // TX_8X32
  TX_8X8,    // TX_32X8
  TX_64X64,  // TX_16X64
  TX_16X16,  // TX_64X16
  TX_32X32,  // TX_4X32
  TX_4X4,    // TX_32X4
  TX_64X64,  // TX_8X64
  TX_8X8,    // TX_64X8
  TX_64X64,  // TX_4X64
  TX_4X4,    // TX_64X4
};

#define TX_SIZE_W_MIN 4

// Transform block width in pixels
static const int tx_size_wide[TX_SIZES_ALL] = {
  4, 8,  16, 32, 64, 4,  8, 8,  16, 16, 32, 32, 64,
  4, 16, 8,  32, 16, 64, 4, 32, 8,  64, 4,  64,
};

#define TX_SIZE_H_MIN 4

// Transform block height in pixels
static const int tx_size_high[TX_SIZES_ALL] = {
  4,  8, 16, 32, 64, 8,  4,  16, 8,  32, 16, 64, 32,
  16, 4, 32, 8,  64, 16, 32, 4,  64, 8,  64, 4,
};

// Transform block width in unit
static const int tx_size_wide_unit[TX_SIZES_ALL] = {
  1, 2, 4, 8, 16, 1,  2, 2, 4, 4,  8, 8,  16,
  1, 4, 2, 8, 4,  16, 1, 8, 2, 16, 1, 16,
};

// Transform block height in unit
static const int tx_size_high_unit[TX_SIZES_ALL] = {
  1, 2, 4, 8, 16, 2, 1, 4, 2,  8, 4,  16, 8,
  4, 1, 8, 2, 16, 4, 8, 1, 16, 2, 16, 1,
};

// Transform block width in log2
static const int tx_size_wide_log2[TX_SIZES_ALL] = {
  2, 3, 4, 5, 6, 2, 3, 3, 4, 4, 5, 5, 6, 2, 4, 3, 5, 4, 6, 2, 5, 3, 6, 2, 6,
};

// Transform block height in log2
static const int tx_size_high_log2[TX_SIZES_ALL] = {
  2, 3, 4, 5, 6, 3, 2, 4, 3, 5, 4, 6, 5, 4, 2, 5, 3, 6, 4, 5, 2, 6, 3, 6, 2,
};

static const int tx_size_2d[TX_SIZES_ALL + 1] = {
  16, 64, 256, 1024, 4096, 32,   32,  128, 128, 512, 512, 2048, 2048,
  64, 64, 256, 256,  1024, 1024, 128, 128, 512, 512, 256, 256,
};

static const BLOCK_SIZE txsize_to_bsize[TX_SIZES_ALL] = {
  BLOCK_4X4,    // TX_4X4
  BLOCK_8X8,    // TX_8X8
  BLOCK_16X16,  // TX_16X16
  BLOCK_32X32,  // TX_32X32
  BLOCK_64X64,  // TX_64X64
  BLOCK_4X8,    // TX_4X8
  BLOCK_8X4,    // TX_8X4
  BLOCK_8X16,   // TX_8X16
  BLOCK_16X8,   // TX_16X8
  BLOCK_16X32,  // TX_16X32
  BLOCK_32X16,  // TX_32X16
  BLOCK_32X64,  // TX_32X64
  BLOCK_64X32,  // TX_64X32
  BLOCK_4X16,   // TX_4X16
  BLOCK_16X4,   // TX_16X4
  BLOCK_8X32,   // TX_8X32
  BLOCK_32X8,   // TX_32X8
  BLOCK_16X64,  // TX_16X64
  BLOCK_64X16,  // TX_64X16
  BLOCK_4X32,   // TX_4X32
  BLOCK_32X4,   // TX_32X4
  BLOCK_8X64,   // TX_8X64
  BLOCK_64X8,   // TX_64X8
  BLOCK_4X64,   // TX_4X64
  BLOCK_64X4,   // TX_64X4
};

static const TX_SIZE txsize_sqr_map[TX_SIZES_ALL] = {
  TX_4X4,    // TX_4X4
  TX_8X8,    // TX_8X8
  TX_16X16,  // TX_16X16
  TX_32X32,  // TX_32X32
  TX_64X64,  // TX_64X64
  TX_4X4,    // TX_4X8
  TX_4X4,    // TX_8X4
  TX_8X8,    // TX_8X16
  TX_8X8,    // TX_16X8
  TX_16X16,  // TX_16X32
  TX_16X16,  // TX_32X16
  TX_32X32,  // TX_32X64
  TX_32X32,  // TX_64X32
  TX_4X4,    // TX_4X16
  TX_4X4,    // TX_16X4
  TX_8X8,    // TX_8X32
  TX_8X8,    // TX_32X8
  TX_16X16,  // TX_16X64
  TX_16X16,  // TX_64X16
  TX_4X4,    // TX_4X32
  TX_4X4,    // TX_32X4
  TX_8X8,    // TX_8X64
  TX_8X8,    // TX_64X8
  TX_4X4,    // TX_4X64
  TX_4X4,    // TX_64X4
};

static const TX_SIZE txsize_sqr_up_map[TX_SIZES_ALL] = {
  TX_4X4,    // TX_4X4
  TX_8X8,    // TX_8X8
  TX_16X16,  // TX_16X16
  TX_32X32,  // TX_32X32
  TX_64X64,  // TX_64X64
  TX_8X8,    // TX_4X8
  TX_8X8,    // TX_8X4
  TX_16X16,  // TX_8X16
  TX_16X16,  // TX_16X8
  TX_32X32,  // TX_16X32
  TX_32X32,  // TX_32X16
  TX_64X64,  // TX_32X64
  TX_64X64,  // TX_64X32
  TX_16X16,  // TX_4X16
  TX_16X16,  // TX_16X4
  TX_32X32,  // TX_8X32
  TX_32X32,  // TX_32X8
  TX_64X64,  // TX_16X64
  TX_64X64,  // TX_64X16
  TX_32X32,  // TX_4X32
  TX_32X32,  // TX_32X4
  TX_64X64,  // TX_8X64
  TX_64X64,  // TX_64X8
  TX_64X64,  // TX_4X64
  TX_64X64,  // TX_64X4
};

static const int8_t txsize_log2_minus4[TX_SIZES_ALL] = {
  0,  // TX_4X4
  2,  // TX_8X8
  4,  // TX_16X16
  6,  // TX_32X32
  6,  // TX_64X64
  1,  // TX_4X8
  1,  // TX_8X4
  3,  // TX_8X16
  3,  // TX_16X8
  5,  // TX_16X32
  5,  // TX_32X16
  6,  // TX_32X64
  6,  // TX_64X32
  2,  // TX_4X16
  2,  // TX_16X4
  4,  // TX_8X32
  4,  // TX_32X8
  5,  // TX_16X64
  5,  // TX_64X16
  3,  // TX_4X32
  3,  // TX_32X4
  4,  // TX_8X64
  4,  // TX_64X8
  3,  // TX_4X64
  3,  // TX_64X4
};

/* clang-format off */
static const TX_SIZE tx_mode_to_biggest_tx_size[TX_MODES] = {
  TX_4X4,    // ONLY_4X4
  TX_64X64,  // TX_MODE_LARGEST
  TX_64X64,  // TX_MODE_SELECT
};

// The Subsampled_Size table in the spec (Section 5.11.38. Get plane residual
// size function).
static const BLOCK_SIZE ss_size_lookup[BLOCK_SIZES_ALL][2][2] = {
  //  ss_x == 0      ss_x == 0          ss_x == 1      ss_x == 1
  //  ss_y == 0      ss_y == 1          ss_y == 0      ss_y == 1
  { { BLOCK_4X4,     BLOCK_4X4 },     { BLOCK_4X4,     BLOCK_4X4 } },
  { { BLOCK_4X8,     BLOCK_4X4 },     { BLOCK_INVALID, BLOCK_4X4 } },
  { { BLOCK_8X4,     BLOCK_INVALID }, { BLOCK_4X4,     BLOCK_4X4 } },
  { { BLOCK_8X8,     BLOCK_8X4 },     { BLOCK_4X8,     BLOCK_4X4 } },
  { { BLOCK_8X16,    BLOCK_8X8 },     { BLOCK_4X16,    BLOCK_4X8 } },
  { { BLOCK_16X8,    BLOCK_16X4 },    { BLOCK_8X8,     BLOCK_8X4 } },
  { { BLOCK_16X16,   BLOCK_16X8 },    { BLOCK_8X16,    BLOCK_8X8 } },
  { { BLOCK_16X32,   BLOCK_16X16 },   { BLOCK_8X32,    BLOCK_8X16 } },
  { { BLOCK_32X16,   BLOCK_32X8 },    { BLOCK_16X16,   BLOCK_16X8 } },
  { { BLOCK_32X32,   BLOCK_32X16 },   { BLOCK_16X32,   BLOCK_16X16 } },
  { { BLOCK_32X64,   BLOCK_32X32 },   { BLOCK_16X64,   BLOCK_16X32 } },
  { { BLOCK_64X32,   BLOCK_64X16 },   { BLOCK_32X32,   BLOCK_32X16 } },
  { { BLOCK_64X64,   BLOCK_64X32 },   { BLOCK_32X64,   BLOCK_32X32 } },
  { { BLOCK_64X128,  BLOCK_64X64 },   { BLOCK_INVALID, BLOCK_32X64 } },
  { { BLOCK_128X64,  BLOCK_INVALID }, { BLOCK_64X64,   BLOCK_64X32 } },
  { { BLOCK_128X128, BLOCK_128X64 },  { BLOCK_64X128,  BLOCK_64X64 } },
  { { BLOCK_128X256, BLOCK_128X128 }, { BLOCK_INVALID, BLOCK_64X128 } },
  { { BLOCK_256X128, BLOCK_INVALID }, { BLOCK_128X128, BLOCK_128X64 } },
  { { BLOCK_256X256, BLOCK_256X128 }, { BLOCK_128X256, BLOCK_128X128 } },
  { { BLOCK_4X16,    BLOCK_4X8 },     { BLOCK_INVALID, BLOCK_4X8 } },
  { { BLOCK_16X4,    BLOCK_INVALID }, { BLOCK_8X4,     BLOCK_8X4 } },
  { { BLOCK_8X32,    BLOCK_8X16 },    { BLOCK_4X32,    BLOCK_4X16 } },
  { { BLOCK_32X8,    BLOCK_32X4 },    { BLOCK_16X8,    BLOCK_16X4 } },
  { { BLOCK_16X64,   BLOCK_16X32 },   { BLOCK_8X64,    BLOCK_8X32 } },
  { { BLOCK_64X16,   BLOCK_64X8 },    { BLOCK_32X16,   BLOCK_32X8 } },
  { { BLOCK_4X32, BLOCK_4X16}, { BLOCK_INVALID, BLOCK_4X16 } },
  { { BLOCK_32X4, BLOCK_INVALID }, { BLOCK_16X4, BLOCK_16X4 } },
  { { BLOCK_8X64, BLOCK_8X32 }, { BLOCK_4X64, BLOCK_4X32 } },
  { { BLOCK_64X8, BLOCK_64X4 }, { BLOCK_32X8, BLOCK_32X4 } },
  { { BLOCK_4X64, BLOCK_4X32 }, { BLOCK_INVALID, BLOCK_4X32 } },
  { { BLOCK_64X4, BLOCK_INVALID}, { BLOCK_32X4, BLOCK_32X4 } },
};
/* clang-format on */

// Generates 6 bit field in which each bit set to 1 represents
// a blocksize partition. For example:
// - 111111 means we split 256x256, 128x128, 64x64, 32x32, 16x16 and 8x8 to 4x4.
// - 110000 means we split 256x256 and 128x128 to 64x64.
// - 000000 means we keep 256x256 (no splits).
/* clang-format off */
static const struct {
  PARTITION_CONTEXT above;
  PARTITION_CONTEXT left;
} partition_context_lookup[BLOCK_SIZES_ALL] = {
  { 32 + 31, 32 + 31 },  // 4X4   - {0b111111, 0b111111}
  { 32 + 31, 32 + 30 },  // 4X8   - {0b111111, 0b111110}
  { 32 + 30, 32 + 31 },  // 8X4   - {0b111110, 0b111111}
  { 32 + 30, 32 + 30 },  // 8X8   - {0b111110, 0b111110}
  { 32 + 30, 32 + 28 },  // 8X16  - {0b111110, 0b111100}
  { 32 + 28, 32 + 30 },  // 16X8  - {0b111100, 0b111110}
  { 32 + 28, 32 + 28 },  // 16X16 - {0b111100, 0b111100}
  { 32 + 28, 32 + 24 },  // 16X32 - {0b111100, 0b111000}
  { 32 + 24, 32 + 28 },  // 32X16 - {0b111000, 0b111100}
  { 32 + 24, 32 + 24 },  // 32X32 - {0b111000, 0b111000}
  { 32 + 24, 32 + 16 },  // 32X64 - {0b111000, 0b110000}
  { 32 + 16, 32 + 24 },  // 64X32 - {0b110000, 0b111000}
  { 32 + 16, 32 + 16 },  // 64X64 - {0b110000, 0b110000}
  { 32 + 16, 32 +  0 },  // 64X128- {0b110000, 0b100000}
  { 32 +  0, 32 + 16 },  // 128X64- {0b100000, 0b110000}
  { 32 +  0, 32 +  0 },  // 128X128-{0b100000, 0b100000}
  { 32 +  0,  0 +  0 },  // 128X256-{0b100000, 0b000000}
  {  0 +  0, 32 +  0 },  // 256X128-{0b000000, 0b100000}
  {  0 +  0,  0 +  0 },  // 256X256-{0b000000, 0b000000}
  { 32 + 31, 32 + 28 },  // 4X16  - {0b111111, 0b111100}
  { 32 + 28, 32 + 31 },  // 16X4  - {0b111100, 0b111111}
  { 32 + 30, 32 + 24 },  // 8X32  - {0b111110, 0b111000}
  { 32 + 24, 32 + 30 },  // 32X8  - {0b111000, 0b111110}
  { 32 + 28, 32 + 16 },  // 16X64 - {0b111100, 0b110000}
  { 32 + 16, 32 + 28 },  // 64X16 - {0b110000, 0b111100}
  { 32 + 31, 32 + 24 },  // 4X32  - {0b111111, 0b111000}
  { 32 + 24, 32 + 31 },  // 32X4  - {0b111000, 0b111111}
  { 32 + 30, 32 + 16 },  // 8X64  - {0b111110, 0b110000}
  { 32 + 16, 32 + 30 },  // 64X8  - {0b110000, 0b111110}
  { 32 + 31, 32 + 16 },  // 4X64  - {0b111110, 0b110000}
  { 32 + 16, 32 + 31 },  // 64X4  - {0b110000, 0b111110}
};
/* clang-format on */

static const int intra_mode_context[INTRA_MODES] = {
  0, 1, 2, 3, 4, 4, 4, 4, 3, 0, 1, 2, 0,
};

// Note: this is also used in unit tests. So whenever one changes the table,
// the unit tests need to be changed accordingly.
static const int quant_dist_weight[4][2] = {
  { 2, 3 }, { 2, 5 }, { 2, 7 }, { 1, MAX_FRAME_DISTANCE }
};

static const int quant_dist_lookup_table[4][2] = {
  { 9, 7 },
  { 11, 5 },
  { 12, 4 },
  { 13, 3 },
};

// Mapping of mode dependent TX  based on intra modes.
static const int av1_md_class[INTRA_MODES] = {
  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
};

// Mapping between mode dependent TX size groups based on allowed TX sizes.
static const int av1_size_class[TX_SIZES_ALL] = { 0, 1, 2, 3, 3, 0, 0, 1, 1,
                                                  3, 3, 3, 3, 0, 0, 3, 3, 3,
                                                  3, 3, 3, 3, 3, 3, 3 };

static AOM_INLINE bool is_bsize_geq(BLOCK_SIZE bsize1, BLOCK_SIZE bsize2) {
  if (bsize1 == BLOCK_INVALID || bsize2 == BLOCK_INVALID) {
    return false;
  }
  return block_size_wide[bsize1] >= block_size_wide[bsize2] &&
         block_size_high[bsize1] >= block_size_high[bsize2];
}

static AOM_INLINE bool is_bsize_gt(BLOCK_SIZE bsize1, BLOCK_SIZE bsize2) {
  if (bsize1 == BLOCK_INVALID || bsize2 == BLOCK_INVALID) {
    return false;
  }
  return block_size_wide[bsize1] > block_size_wide[bsize2] &&
         block_size_high[bsize1] > block_size_high[bsize2];
}

#if CONFIG_CORE_TX
static const int fwd_tx_shift[TX_SIZES_ALL][2] = {
  { 1, 10 },  // TX_4X4,    // 4x4 transform
  { 2, 10 },  // TX_8X8,    // 8x8 transform
  { 2, 11 },  // TX_16X16,  // 16x16 transform
  { 3, 12 },  // TX_32X32,  // 32x32 transform
  { 3, 14 },  // TX_64X64,  // 64x64 transform
  { 1, 11 },  // TX_4X8,    // 4x8 transform
  { 1, 11 },  // TX_8X4,    // 8x4 transform
  { 1, 12 },  // TX_8X16,   // 8x16 transform
  { 2, 11 },  // TX_16X8,   // 16x8 transform
  { 2, 13 },  // TX_16X32,  // 16x32 transform
  { 3, 12 },  // TX_32X16,  // 32x16 transform
  { 3, 14 },  // TX_32X64,  // 32x64 transform
  { 3, 14 },  // TX_64X32,  // 64x32 transform
  { 1, 11 },  // TX_4X16,   // 4x16 transform
  { 1, 11 },  // TX_16X4,   // 16x4 transform
  { 1, 12 },  // TX_8X32,   // 8x32 transform
  { 3, 10 },  // TX_32X8,   // 32x8 transform
  { 2, 13 },  // TX_16X64,  // 16x64 transform
  { 3, 12 },  // TX_64X16,  // 64x16 transform
  { 1, 12 },  // TX_4X32,   // 4x32 transform
  { 1, 12 },  // TX_32X4,   // 32x4 transform
  { 2, 13 },  // TX_8X64,   // 8x64 transform
  { 4, 11 },  // TX_64X8,   // 64x8 transform
  { 1, 12 },  // TX_4X64,   // 4x64 transform
  { 1, 12 },  // TX_64X4,   // 64x4 transform
};

static const int inv_tx_shift[TX_SIZES_ALL][2] = {
  { 7, 10 },  // TX_4X4,    // 4x4 transform
  { 7, 11 },  // TX_8X8,    // 8x8 transform
  { 6, 13 },  // TX_16X16,  // 16x16 transform
  { 6, 13 },  // TX_32X32,  // 32x32 transform
  { 6, 13 },  // TX_64X64,  // 64x64 transform
  { 7, 10 },  // TX_4X8,    // 4x8 transform
  { 7, 10 },  // TX_8X4,    // 8x4 transform
  { 7, 11 },  // TX_8X16,   // 8x16 transform
  { 7, 11 },  // TX_16X8,   // 16x8 transform
  { 6, 12 },  // TX_16X32,  // 16x32 transformß
  { 6, 12 },  // TX_32X16,  // 32x16 transform
  { 6, 12 },  // TX_32X64,  // 32x64 transform
  { 6, 12 },  // TX_64X32,  // 64x32 transform
  { 6, 12 },  // TX_4X16,   // 4x16 transform
  { 6, 12 },  // TX_16X4,   // 16x4 transform
  { 6, 13 },  // TX_8X32,   // 8x32 transform
  { 6, 13 },  // TX_32X8,   // 32x8 transform
  { 6, 13 },  // TX_16X64,  // 16x64 transform
  { 6, 13 },  // TX_64X16,  // 64x16 transform
  { 7, 11 },  // TX_4X32,   // 4x32 transform
  { 7, 11 },  // TX_32X4,   // 32x4 transform
  { 6, 12 },  // TX_8X64,   // 8x64 transform
  { 6, 12 },  // TX_64X8,   // 64x8 transform
  { 6, 13 },  // TX_4X64,   // 4x64 transform
  { 6, 13 },  // TX_64X4,   // 64x4 transform
};

static const int g_hor_tx_type[TX_TYPES] = {
  DCT2,  // DCT_DCT,            // DCT in both horizontal and vertical
  DCT2,  // ADST_DCT,           // ADST in vertical, DCT in horizontal
  DST7,  // DCT_ADST,           // DCT in vertical, ADST in horizontal
  DST7,  // ADST_ADST,          // ADST in both directions
  DCT2,  // FLIPADST_DCT,       // FLIPADST in vertical, DCT in horizontal
  DCT8,  // DCT_FLIPADST,       // DCT in vertical, FLIPADST in horizontal
  DCT8,  // FLIPADST_FLIPADST,  // FLIPADST in both directions
  DCT8,  // ADST_FLIPADST,      // ADST in vertical, FLIPADST in horizontal
  DST7,  // FLIPADST_ADST,      // FLIPADST in vertical, ADST in horizontal
  IDT,   // IDTX,               // Identity in both directions
  IDT,   // V_DCT,              // DCT in vertical, identity in horizontal
  DCT2,  // H_DCT,              // Identity in vertical, DCT in horizontal
  IDT,   // V_ADST,             // ADST in vertical, identity in horizontal
  DST7,  // H_ADST,             // Identity in vertical, ADST in horizontal
  IDT,   // V_FLIPADST,         // FLIPADST in vertical, identity in horizontal
  DCT8,  // H_FLIPADST,         // Identity in vertical, FLIPADST in horizontal
};

static const int g_ver_tx_type[TX_TYPES] = {
  DCT2,  // DCT_DCT,            // DCT in both horizontal and vertical
  DST7,  // ADST_DCT,           // ADST in vertical, DCT in horizontal
  DCT2,  // DCT_ADST,           // DCT in vertical, ADST in horizontal
  DST7,  // ADST_ADST,          // ADST in both directions
  DCT8,  // FLIPADST_DCT,       // FLIPADST in vertical, DCT in horizontal
  DCT2,  // DCT_FLIPADST,       // DCT in vertical, FLIPADST in horizontal
  DCT8,  // FLIPADST_FLIPADST,  // FLIPADST in both directions
  DST7,  // ADST_FLIPADST,      // ADST in vertical, FLIPADST in horizontal
  DCT8,  // FLIPADST_ADST,      // FLIPADST in vertical, ADST in horizontal
  IDT,   // IDTX,               // Identity in both directions
  DCT2,  // V_DCT,              // DCT in vertical, identity in horizontal
  IDT,   // H_DCT,              // Identity in vertical, DCT in horizontal
  DST7,  // V_ADST,             // ADST in vertical, identity in horizontal
  IDT,   // H_ADST,             // Identity in vertical, ADST in horizontal
  DCT8,  // V_FLIPADST,         // FLIPADST in vertical, identity in horizontal
  IDT,   // H_FLIPADST,         // Identity in vertical, FLIPADST in horizontal
};
#endif  // CONFIG_CORE_TX

static const int min_class_with_offset[7] = { 4, 3, 2, 0, 0, 0, 0 };

#ifdef __cplusplus
}  // extern "C"
#endif

#endif  // AOM_AV1_COMMON_COMMON_DATA_H_
