Merge "Hooks to use 32x32 masked transforms for ext-tx" into nextgenv2
This commit is contained in:
@@ -352,6 +352,8 @@ static INLINE int supertx_enabled(const MB_MODE_INFO *mbmi) {
|
|||||||
|
|
||||||
#if CONFIG_EXT_TX
|
#if CONFIG_EXT_TX
|
||||||
#define ALLOW_INTRA_EXT_TX 1
|
#define ALLOW_INTRA_EXT_TX 1
|
||||||
|
// whether masked transforms are used for 32X32
|
||||||
|
#define USE_MSKTX_FOR_32X32 1
|
||||||
|
|
||||||
static const int num_ext_tx_set_inter[EXT_TX_SETS_INTER] = {
|
static const int num_ext_tx_set_inter[EXT_TX_SETS_INTER] = {
|
||||||
1, 17, 10, 2
|
1, 17, 10, 2
|
||||||
@@ -360,25 +362,38 @@ static const int num_ext_tx_set_intra[EXT_TX_SETS_INTRA] = {
|
|||||||
1, 17, 10
|
1, 17, 10
|
||||||
};
|
};
|
||||||
|
|
||||||
#define USE_IDTX_FOR_32X32 0
|
#if EXT_TX_SIZES == 4
|
||||||
|
static INLINE int get_ext_tx_set(TX_SIZE tx_size, BLOCK_SIZE bs,
|
||||||
|
int is_inter) {
|
||||||
|
if (tx_size > TX_32X32 || bs < BLOCK_8X8) return 0;
|
||||||
|
if (tx_size == TX_32X32)
|
||||||
|
return is_inter ? 3 - 2 * USE_MSKTX_FOR_32X32 : 0;
|
||||||
|
return ((is_inter || tx_size < TX_16X16) ? 1 : 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const int use_intra_ext_tx_for_txsize[EXT_TX_SETS_INTRA][TX_SIZES] = {
|
||||||
|
{ 0, 0, 0, 0, }, // unused
|
||||||
|
{ 1, 1, 0, 0, },
|
||||||
|
{ 0, 0, 1, 0, },
|
||||||
|
};
|
||||||
|
|
||||||
|
static const int use_inter_ext_tx_for_txsize[EXT_TX_SETS_INTER][TX_SIZES] = {
|
||||||
|
{ 0, 0, 0, 0, }, // unused
|
||||||
|
{ 1, 1, 1, USE_MSKTX_FOR_32X32, },
|
||||||
|
{ 0, 0, 0, 0, },
|
||||||
|
{ 0, 0, 0, (!USE_MSKTX_FOR_32X32), },
|
||||||
|
};
|
||||||
|
|
||||||
|
#else // EXT_TX_SIZES == 4
|
||||||
|
|
||||||
static INLINE int get_ext_tx_set(TX_SIZE tx_size, BLOCK_SIZE bs,
|
static INLINE int get_ext_tx_set(TX_SIZE tx_size, BLOCK_SIZE bs,
|
||||||
int is_inter) {
|
int is_inter) {
|
||||||
(void) is_inter;
|
(void) is_inter;
|
||||||
if (tx_size > TX_32X32 || bs < BLOCK_8X8) return 0;
|
if (tx_size > TX_32X32 || bs < BLOCK_8X8) return 0;
|
||||||
#if USE_IDTX_FOR_32X32
|
|
||||||
if (tx_size == TX_32X32) return is_inter ? 3 : 0;
|
|
||||||
#else
|
|
||||||
if (tx_size == TX_32X32) return 0;
|
if (tx_size == TX_32X32) return 0;
|
||||||
#endif
|
|
||||||
return tx_size == TX_16X16 ? 2 : 1;
|
return tx_size == TX_16X16 ? 2 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static INLINE int get_ext_tx_types(TX_SIZE tx_size, BLOCK_SIZE bs,
|
|
||||||
int is_inter) {
|
|
||||||
const int set = get_ext_tx_set(tx_size, bs, is_inter);
|
|
||||||
return is_inter ? num_ext_tx_set_inter[set] : num_ext_tx_set_intra[set];
|
|
||||||
}
|
|
||||||
|
|
||||||
static const int use_intra_ext_tx_for_txsize[EXT_TX_SETS_INTRA][TX_SIZES] = {
|
static const int use_intra_ext_tx_for_txsize[EXT_TX_SETS_INTRA][TX_SIZES] = {
|
||||||
{ 0, 0, 0, 0, }, // unused
|
{ 0, 0, 0, 0, }, // unused
|
||||||
{ 1, 1, 0, 0, },
|
{ 1, 1, 0, 0, },
|
||||||
@@ -389,8 +404,9 @@ static const int use_inter_ext_tx_for_txsize[EXT_TX_SETS_INTER][TX_SIZES] = {
|
|||||||
{ 0, 0, 0, 0, }, // unused
|
{ 0, 0, 0, 0, }, // unused
|
||||||
{ 1, 1, 0, 0, },
|
{ 1, 1, 0, 0, },
|
||||||
{ 0, 0, 1, 0, },
|
{ 0, 0, 1, 0, },
|
||||||
{ 0, 0, 0, USE_IDTX_FOR_32X32, },
|
{ 0, 0, 0, 0, },
|
||||||
};
|
};
|
||||||
|
#endif // EXT_TX_SIZES == 4
|
||||||
|
|
||||||
// Transform types used in each intra set
|
// Transform types used in each intra set
|
||||||
static const int ext_tx_used_intra[EXT_TX_SETS_INTRA][TX_TYPES] = {
|
static const int ext_tx_used_intra[EXT_TX_SETS_INTRA][TX_TYPES] = {
|
||||||
@@ -406,6 +422,12 @@ static const int ext_tx_used_inter[EXT_TX_SETS_INTER][TX_TYPES] = {
|
|||||||
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, },
|
{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, },
|
||||||
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, },
|
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static INLINE int get_ext_tx_types(TX_SIZE tx_size, BLOCK_SIZE bs,
|
||||||
|
int is_inter) {
|
||||||
|
const int set = get_ext_tx_set(tx_size, bs, is_inter);
|
||||||
|
return is_inter ? num_ext_tx_set_inter[set] : num_ext_tx_set_intra[set];
|
||||||
|
}
|
||||||
#endif // CONFIG_EXT_TX
|
#endif // CONFIG_EXT_TX
|
||||||
|
|
||||||
#if CONFIG_EXT_INTRA
|
#if CONFIG_EXT_INTRA
|
||||||
@@ -504,7 +526,7 @@ static INLINE TX_TYPE get_tx_type(PLANE_TYPE plane_type,
|
|||||||
#endif // CONFIG_EXT_INTRA
|
#endif // CONFIG_EXT_INTRA
|
||||||
|
|
||||||
#if CONFIG_EXT_TX
|
#if CONFIG_EXT_TX
|
||||||
#if USE_IDTX_FOR_32X32
|
#if EXT_TX_SIZES == 4
|
||||||
if (xd->lossless[mbmi->segment_id] || tx_size > TX_32X32 ||
|
if (xd->lossless[mbmi->segment_id] || tx_size > TX_32X32 ||
|
||||||
(tx_size >= TX_32X32 && !is_inter_block(mbmi)))
|
(tx_size >= TX_32X32 && !is_inter_block(mbmi)))
|
||||||
#else
|
#else
|
||||||
|
|||||||
@@ -951,7 +951,7 @@ default_inter_ext_tx_prob[EXT_TX_SETS_INTER][EXT_TX_SIZES][TX_TYPES - 1] = {
|
|||||||
{ 12, 112, 16, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
|
{ 12, 112, 16, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
|
||||||
128 },
|
128 },
|
||||||
#if EXT_TX_SIZES == 4
|
#if EXT_TX_SIZES == 4
|
||||||
{ 12, 112, 16, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
|
{ 12, 160, 16, 144, 160, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
|
||||||
128 },
|
128 },
|
||||||
#endif
|
#endif
|
||||||
}, {
|
}, {
|
||||||
@@ -959,7 +959,7 @@ default_inter_ext_tx_prob[EXT_TX_SETS_INTER][EXT_TX_SIZES][TX_TYPES - 1] = {
|
|||||||
{ 12, 112, 128, 128, 128, 128, 128, 128, 128 },
|
{ 12, 112, 128, 128, 128, 128, 128, 128, 128 },
|
||||||
{ 12, 112, 128, 128, 128, 128, 128, 128, 128 },
|
{ 12, 112, 128, 128, 128, 128, 128, 128, 128 },
|
||||||
#if EXT_TX_SIZES == 4
|
#if EXT_TX_SIZES == 4
|
||||||
{ 12, 112, 128, 128, 128, 128, 128, 128, 128 },
|
{ 12, 160, 128, 128, 128, 128, 128, 128, 128 },
|
||||||
#endif
|
#endif
|
||||||
}, {
|
}, {
|
||||||
{ 12, },
|
{ 12, },
|
||||||
@@ -1240,7 +1240,9 @@ default_intra_ext_tx_prob[EXT_TX_SETS_INTRA][EXT_TX_SIZES]
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
const vpx_tree_index vp10_ext_tx_tree[TREE_SIZE(TX_TYPES)] = {
|
const vpx_tree_index vp10_ext_tx_tree[TREE_SIZE(TX_TYPES)] = {
|
||||||
-DCT_DCT, 2,
|
-DCT_DCT, 2,
|
||||||
-ADST_ADST, 4,
|
-ADST_ADST, 4,
|
||||||
|
|||||||
@@ -112,11 +112,13 @@ typedef enum {
|
|||||||
TX_TYPES,
|
TX_TYPES,
|
||||||
} TX_TYPE;
|
} TX_TYPE;
|
||||||
|
|
||||||
#define EXT_TX_SIZES 3 // number of sizes that use extended transforms
|
|
||||||
|
|
||||||
#if CONFIG_EXT_TX
|
#if CONFIG_EXT_TX
|
||||||
|
#define EXT_TX_SIZES 4 // number of sizes that use extended transforms
|
||||||
#define EXT_TX_SETS_INTER 4 // Sets of transform selections for INTER
|
#define EXT_TX_SETS_INTER 4 // Sets of transform selections for INTER
|
||||||
#define EXT_TX_SETS_INTRA 3 // Sets of transform selections for INTRA
|
#define EXT_TX_SETS_INTRA 3 // Sets of transform selections for INTRA
|
||||||
|
#else
|
||||||
|
#define EXT_TX_SIZES 3 // number of sizes that use extended transforms
|
||||||
#endif // CONFIG_EXT_TX
|
#endif // CONFIG_EXT_TX
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
|||||||
1188
vp10/common/scan.c
1188
vp10/common/scan.c
File diff suppressed because it is too large
Load Diff
@@ -178,15 +178,27 @@ static void fwd_txfm_32x32(int rd_transform, const int16_t *src_diff,
|
|||||||
vpx_fdct32x32_1(src_diff, coeff, diff_stride);
|
vpx_fdct32x32_1(src_diff, coeff, diff_stride);
|
||||||
break;
|
break;
|
||||||
#if CONFIG_EXT_TX
|
#if CONFIG_EXT_TX
|
||||||
|
case ADST_DCT:
|
||||||
|
case DCT_ADST:
|
||||||
|
case ADST_ADST:
|
||||||
|
case FLIPADST_DCT:
|
||||||
|
case DCT_FLIPADST:
|
||||||
|
case FLIPADST_FLIPADST:
|
||||||
|
case ADST_FLIPADST:
|
||||||
|
case FLIPADST_ADST:
|
||||||
|
case DST_DST:
|
||||||
|
case DCT_DST:
|
||||||
|
case DST_DCT:
|
||||||
|
case DST_ADST:
|
||||||
|
case ADST_DST:
|
||||||
|
case DST_FLIPADST:
|
||||||
|
case FLIPADST_DST:
|
||||||
|
vp10_fht32x32_c(src_diff, coeff, diff_stride, tx_type);
|
||||||
|
break;
|
||||||
case IDTX:
|
case IDTX:
|
||||||
fwd_idtx_c(src_diff, coeff, diff_stride, 32);
|
fwd_idtx_c(src_diff, coeff, diff_stride, 32);
|
||||||
break;
|
break;
|
||||||
#endif // CONFIG_EXT_TX
|
#endif // CONFIG_EXT_TX
|
||||||
case ADST_DCT:
|
|
||||||
case DCT_ADST:
|
|
||||||
case ADST_ADST:
|
|
||||||
assert(0);
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
assert(0);
|
assert(0);
|
||||||
break;
|
break;
|
||||||
@@ -332,15 +344,27 @@ static void highbd_fwd_txfm_32x32(int rd_transform, const int16_t *src_diff,
|
|||||||
vpx_highbd_fdct32x32_1(src_diff, coeff, diff_stride);
|
vpx_highbd_fdct32x32_1(src_diff, coeff, diff_stride);
|
||||||
break;
|
break;
|
||||||
#if CONFIG_EXT_TX
|
#if CONFIG_EXT_TX
|
||||||
|
case ADST_DCT:
|
||||||
|
case DCT_ADST:
|
||||||
|
case ADST_ADST:
|
||||||
|
case FLIPADST_DCT:
|
||||||
|
case DCT_FLIPADST:
|
||||||
|
case FLIPADST_FLIPADST:
|
||||||
|
case ADST_FLIPADST:
|
||||||
|
case FLIPADST_ADST:
|
||||||
|
case DST_DST:
|
||||||
|
case DCT_DST:
|
||||||
|
case DST_DCT:
|
||||||
|
case DST_ADST:
|
||||||
|
case ADST_DST:
|
||||||
|
case DST_FLIPADST:
|
||||||
|
case FLIPADST_DST:
|
||||||
|
vp10_highbd_fht32x32_c(src_diff, coeff, diff_stride, tx_type);
|
||||||
|
break;
|
||||||
case IDTX:
|
case IDTX:
|
||||||
fwd_idtx_c(src_diff, coeff, diff_stride, 32);
|
fwd_idtx_c(src_diff, coeff, diff_stride, 32);
|
||||||
break;
|
break;
|
||||||
#endif // CONFIG_EXT_TX
|
#endif // CONFIG_EXT_TX
|
||||||
case ADST_DCT:
|
|
||||||
case DCT_ADST:
|
|
||||||
case ADST_ADST:
|
|
||||||
assert(0);
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
assert(0);
|
assert(0);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -82,7 +82,7 @@
|
|||||||
#define NEW_MV_DISCOUNT_FACTOR 8
|
#define NEW_MV_DISCOUNT_FACTOR 8
|
||||||
|
|
||||||
#if CONFIG_EXT_TX
|
#if CONFIG_EXT_TX
|
||||||
const double ext_tx_th = 0.98;
|
const double ext_tx_th = 0.99;
|
||||||
#else
|
#else
|
||||||
const double ext_tx_th = 0.99;
|
const double ext_tx_th = 0.99;
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user