Merge "Hooks to use 32x32 masked transforms for ext-tx" into nextgenv2
This commit is contained in:
		@@ -351,7 +351,9 @@ static INLINE int supertx_enabled(const MB_MODE_INFO *mbmi) {
 | 
				
			|||||||
#endif  // CONFIG_SUPERTX
 | 
					#endif  // CONFIG_SUPERTX
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#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