Wedge refactoring to handle signs better
Mostly refactoring. Handles signs better though results are more or less neutral. Change-Id: If499537c8f8da4f34d104ebfda072eb4c85fb12f
This commit is contained in:
		@@ -23,7 +23,11 @@
 | 
				
			|||||||
#endif  // CONFIG_OBMC
 | 
					#endif  // CONFIG_OBMC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if CONFIG_EXT_INTER
 | 
					#if CONFIG_EXT_INTER
 | 
				
			||||||
#define NSMOOTHERS  2
 | 
					
 | 
				
			||||||
 | 
					// Set to one to use larger codebooks
 | 
				
			||||||
 | 
					#define USE_LARGE_WEDGE_CODEBOOK  0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define NSMOOTHERS  1
 | 
				
			||||||
static int get_masked_weight(int m, int smoothness) {
 | 
					static int get_masked_weight(int m, int smoothness) {
 | 
				
			||||||
#define SMOOTHER_LEN  32
 | 
					#define SMOOTHER_LEN  32
 | 
				
			||||||
  static const uint8_t smoothfn[NSMOOTHERS][2 * SMOOTHER_LEN + 1] = {
 | 
					  static const uint8_t smoothfn[NSMOOTHERS][2 * SMOOTHER_LEN + 1] = {
 | 
				
			||||||
@@ -37,16 +41,6 @@ static int get_masked_weight(int m, int smoothness) {
 | 
				
			|||||||
      64, 64, 64, 64, 64, 64, 64, 64,
 | 
					      64, 64, 64, 64, 64, 64, 64, 64,
 | 
				
			||||||
      64, 64, 64, 64, 64, 64, 64, 64,
 | 
					      64, 64, 64, 64, 64, 64, 64, 64,
 | 
				
			||||||
      64, 64, 64, 64, 64, 64, 64, 64,
 | 
					      64, 64, 64, 64, 64, 64, 64, 64,
 | 
				
			||||||
    }, {
 | 
					 | 
				
			||||||
      0,  0,  0,  0,  0,  0,  0,  0,
 | 
					 | 
				
			||||||
      1,  1,  1,  1,  1,  1,  2,  2,
 | 
					 | 
				
			||||||
      3,  3,  4,  4,  5,  6,  8,  9,
 | 
					 | 
				
			||||||
      11, 13, 15, 17, 20, 23, 26, 29,
 | 
					 | 
				
			||||||
      32,
 | 
					 | 
				
			||||||
      35, 38, 41, 44, 47, 49, 51, 53,
 | 
					 | 
				
			||||||
      55, 56, 58, 59, 60, 60, 61, 61,
 | 
					 | 
				
			||||||
      62, 62, 63, 63, 63, 63, 63, 63,
 | 
					 | 
				
			||||||
      64, 64, 64, 64, 64, 64, 64, 64,
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
  if (m < -SMOOTHER_LEN)
 | 
					  if (m < -SMOOTHER_LEN)
 | 
				
			||||||
@@ -57,18 +51,6 @@ static int get_masked_weight(int m, int smoothness) {
 | 
				
			|||||||
    return smoothfn[smoothness][m + SMOOTHER_LEN];
 | 
					    return smoothfn[smoothness][m + SMOOTHER_LEN];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Angles are with respect to horizontal anti-clockwise
 | 
					 | 
				
			||||||
typedef enum {
 | 
					 | 
				
			||||||
  WEDGE_HORIZONTAL = 0,
 | 
					 | 
				
			||||||
  WEDGE_VERTICAL = 1,
 | 
					 | 
				
			||||||
  WEDGE_OBLIQUE27 = 2,
 | 
					 | 
				
			||||||
  WEDGE_OBLIQUE63 = 3,
 | 
					 | 
				
			||||||
  WEDGE_OBLIQUE117 = 4,
 | 
					 | 
				
			||||||
  WEDGE_OBLIQUE153 = 5,
 | 
					 | 
				
			||||||
  WEDGE_DIRECTIONS
 | 
					 | 
				
			||||||
} WedgeDirectionType;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define WEDGE_PARMS    4
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
// [smoother][negative][direction]
 | 
					// [smoother][negative][direction]
 | 
				
			||||||
DECLARE_ALIGNED(
 | 
					DECLARE_ALIGNED(
 | 
				
			||||||
@@ -76,6 +58,314 @@ DECLARE_ALIGNED(
 | 
				
			|||||||
    wedge_mask_obl[NSMOOTHERS][2][WEDGE_DIRECTIONS]
 | 
					    wedge_mask_obl[NSMOOTHERS][2][WEDGE_DIRECTIONS]
 | 
				
			||||||
                  [MASK_MASTER_SIZE * MASK_MASTER_SIZE]);
 | 
					                  [MASK_MASTER_SIZE * MASK_MASTER_SIZE]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DECLARE_ALIGNED(
 | 
				
			||||||
 | 
					    16, static uint8_t,
 | 
				
			||||||
 | 
					    wedge_signflip_lookup[BLOCK_SIZES][MAX_WEDGE_TYPES]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Some unused wedge codebooks left temporarily to facilitate experiments.
 | 
				
			||||||
 | 
					// To be removed when setteld.
 | 
				
			||||||
 | 
					static wedge_code_type wedge_codebook_8_hgtw[8] = {
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 2},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 6},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 2},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 6},
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static wedge_code_type wedge_codebook_8_hltw[8] = {
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  2, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  6, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 2, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 6, 4},
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static wedge_code_type wedge_codebook_8_heqw[8] = {
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_HORIZONTAL, 4, 2},
 | 
				
			||||||
 | 
					    {WEDGE_HORIZONTAL, 4, 6},
 | 
				
			||||||
 | 
					    {WEDGE_VERTICAL,   2, 4},
 | 
				
			||||||
 | 
					    {WEDGE_VERTICAL,   6, 4},
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if !USE_LARGE_WEDGE_CODEBOOK
 | 
				
			||||||
 | 
					static const wedge_code_type wedge_codebook_16_hgtw[16] = {
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_HORIZONTAL, 4, 2},
 | 
				
			||||||
 | 
					    {WEDGE_HORIZONTAL, 4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_HORIZONTAL, 4, 6},
 | 
				
			||||||
 | 
					    {WEDGE_VERTICAL,   4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 2},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 6},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 2},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 6},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  2, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  6, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 2, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 6, 4},
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const wedge_code_type wedge_codebook_16_hltw[16] = {
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_VERTICAL,   2, 4},
 | 
				
			||||||
 | 
					    {WEDGE_VERTICAL,   4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_VERTICAL,   6, 4},
 | 
				
			||||||
 | 
					    {WEDGE_HORIZONTAL, 4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 2},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 6},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 2},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 6},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  2, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  6, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 2, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 6, 4},
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const wedge_code_type wedge_codebook_16_heqw[16] = {
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_HORIZONTAL, 4, 2},
 | 
				
			||||||
 | 
					    {WEDGE_HORIZONTAL, 4, 6},
 | 
				
			||||||
 | 
					    {WEDGE_VERTICAL,   2, 4},
 | 
				
			||||||
 | 
					    {WEDGE_VERTICAL,   6, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 2},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 6},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 2},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 6},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  2, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  6, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 2, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 6, 4},
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const wedge_params_type wedge_params_lookup[BLOCK_SIZES] = {
 | 
				
			||||||
 | 
					  {0, NULL, NULL, 0},
 | 
				
			||||||
 | 
					  {0, NULL, NULL, 0},
 | 
				
			||||||
 | 
					  {0, NULL, NULL, 0},
 | 
				
			||||||
 | 
					  {4, wedge_codebook_16_heqw, wedge_signflip_lookup[3], 0},
 | 
				
			||||||
 | 
					  {4, wedge_codebook_16_hgtw, wedge_signflip_lookup[4], 0},
 | 
				
			||||||
 | 
					  {4, wedge_codebook_16_hltw, wedge_signflip_lookup[5], 0},
 | 
				
			||||||
 | 
					  {4, wedge_codebook_16_heqw, wedge_signflip_lookup[6], 0},
 | 
				
			||||||
 | 
					  {4, wedge_codebook_16_hgtw, wedge_signflip_lookup[7], 0},
 | 
				
			||||||
 | 
					  {4, wedge_codebook_16_hltw, wedge_signflip_lookup[8], 0},
 | 
				
			||||||
 | 
					  {4, wedge_codebook_16_heqw, wedge_signflip_lookup[9], 0},
 | 
				
			||||||
 | 
					  {0, wedge_codebook_8_hgtw, wedge_signflip_lookup[10], 0},
 | 
				
			||||||
 | 
					  {0, wedge_codebook_8_hltw, wedge_signflip_lookup[11], 0},
 | 
				
			||||||
 | 
					  {0, wedge_codebook_8_heqw, wedge_signflip_lookup[12], 0},
 | 
				
			||||||
 | 
					#if CONFIG_EXT_PARTITION
 | 
				
			||||||
 | 
					  {0, NULL, NULL, 0},
 | 
				
			||||||
 | 
					  {0, NULL, NULL, 0},
 | 
				
			||||||
 | 
					  {0, NULL, NULL, 0},
 | 
				
			||||||
 | 
					#endif  // CONFIG_EXT_PARTITION
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const wedge_code_type wedge_codebook_32_hgtw[32] = {
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_HORIZONTAL, 4, 2},
 | 
				
			||||||
 | 
					    {WEDGE_HORIZONTAL, 4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_HORIZONTAL, 4, 6},
 | 
				
			||||||
 | 
					    {WEDGE_VERTICAL,   4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 1},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 2},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 3},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 5},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 6},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 7},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 1},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 2},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 3},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 5},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 6},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 7},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  1, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  2, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  3, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  5, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  6, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  7, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 1, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 2, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 3, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 5, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 6, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 7, 4},
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const wedge_code_type wedge_codebook_32_hltw[32] = {
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_VERTICAL,   2, 4},
 | 
				
			||||||
 | 
					    {WEDGE_VERTICAL,   4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_VERTICAL,   6, 4},
 | 
				
			||||||
 | 
					    {WEDGE_HORIZONTAL, 4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 1},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 2},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 3},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 5},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 6},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 7},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 1},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 2},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 3},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 5},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 6},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 7},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  1, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  2, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  3, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  5, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  6, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  7, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 1, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 2, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 3, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 5, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 6, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 7, 4},
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const wedge_code_type wedge_codebook_32_heqw[32] = {
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 4},
 | 
				
			||||||
 | 
					    {WEDGE_HORIZONTAL, 4, 2},
 | 
				
			||||||
 | 
					    {WEDGE_HORIZONTAL, 4, 6},
 | 
				
			||||||
 | 
					    {WEDGE_VERTICAL,   2, 4},
 | 
				
			||||||
 | 
					    {WEDGE_VERTICAL,   6, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 1},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 2},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 3},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 5},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 6},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE27,  4, 7},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 1},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 2},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 3},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 5},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 6},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE153, 4, 7},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  1, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  2, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  3, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  5, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  6, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE63,  7, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 1, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 2, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 3, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 5, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 6, 4},
 | 
				
			||||||
 | 
					    {WEDGE_OBLIQUE117, 7, 4},
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const wedge_params_type wedge_params_lookup[BLOCK_SIZES] = {
 | 
				
			||||||
 | 
					  {0, NULL, NULL, 0},
 | 
				
			||||||
 | 
					  {0, NULL, NULL, 0},
 | 
				
			||||||
 | 
					  {0, NULL, NULL, 0},
 | 
				
			||||||
 | 
					  {5, wedge_codebook_32_heqw, wedge_signflip_lookup[3], 0},
 | 
				
			||||||
 | 
					  {5, wedge_codebook_32_hgtw, wedge_signflip_lookup[4], 0},
 | 
				
			||||||
 | 
					  {5, wedge_codebook_32_hltw, wedge_signflip_lookup[5], 0},
 | 
				
			||||||
 | 
					  {5, wedge_codebook_32_heqw, wedge_signflip_lookup[6], 0},
 | 
				
			||||||
 | 
					  {5, wedge_codebook_32_hgtw, wedge_signflip_lookup[7], 0},
 | 
				
			||||||
 | 
					  {5, wedge_codebook_32_hltw, wedge_signflip_lookup[8], 0},
 | 
				
			||||||
 | 
					  {5, wedge_codebook_32_heqw, wedge_signflip_lookup[9], 0},
 | 
				
			||||||
 | 
					  {0, wedge_codebook_8_hgtw, wedge_signflip_lookup[10], 0},
 | 
				
			||||||
 | 
					  {0, wedge_codebook_8_hltw, wedge_signflip_lookup[11], 0},
 | 
				
			||||||
 | 
					  {0, wedge_codebook_8_heqw, wedge_signflip_lookup[12], 0},
 | 
				
			||||||
 | 
					#if CONFIG_EXT_PARTITION
 | 
				
			||||||
 | 
					  {0, NULL, NULL, 0},
 | 
				
			||||||
 | 
					  {0, NULL, NULL, 0},
 | 
				
			||||||
 | 
					  {0, NULL, NULL, 0},
 | 
				
			||||||
 | 
					#endif  // CONFIG_EXT_PARTITION
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					#endif  // USE_LARGE_WEDGE_CODEBOOK
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const uint8_t *get_wedge_mask_inplace(int wedge_index,
 | 
				
			||||||
 | 
					                                             int neg,
 | 
				
			||||||
 | 
					                                             BLOCK_SIZE sb_type) {
 | 
				
			||||||
 | 
					  const uint8_t *master;
 | 
				
			||||||
 | 
					  const int bh = 4 << b_height_log2_lookup[sb_type];
 | 
				
			||||||
 | 
					  const int bw = 4 << b_width_log2_lookup[sb_type];
 | 
				
			||||||
 | 
					  const wedge_code_type *a =
 | 
				
			||||||
 | 
					      wedge_params_lookup[sb_type].codebook + wedge_index;
 | 
				
			||||||
 | 
					  const int smoother = wedge_params_lookup[sb_type].smoother;
 | 
				
			||||||
 | 
					  int woff, hoff;
 | 
				
			||||||
 | 
					  const uint8_t wsignflip = wedge_params_lookup[sb_type].signflip[wedge_index];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  assert(wedge_index >= 0 &&
 | 
				
			||||||
 | 
					         wedge_index < (1 << get_wedge_bits_lookup(sb_type)));
 | 
				
			||||||
 | 
					  woff = (a->x_offset * bw) >> 3;
 | 
				
			||||||
 | 
					  hoff = (a->y_offset * bh) >> 3;
 | 
				
			||||||
 | 
					  master = wedge_mask_obl[smoother][neg ^ wsignflip][a->direction] +
 | 
				
			||||||
 | 
					      MASK_MASTER_STRIDE * (MASK_MASTER_SIZE / 2 - hoff) +
 | 
				
			||||||
 | 
					      MASK_MASTER_SIZE / 2 - woff;
 | 
				
			||||||
 | 
					  return master;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const uint8_t *vp10_get_soft_mask(int wedge_index,
 | 
				
			||||||
 | 
					                                  int wedge_sign,
 | 
				
			||||||
 | 
					                                  BLOCK_SIZE sb_type,
 | 
				
			||||||
 | 
					                                  int offset_x,
 | 
				
			||||||
 | 
					                                  int offset_y) {
 | 
				
			||||||
 | 
					  const uint8_t *mask =
 | 
				
			||||||
 | 
					      get_wedge_mask_inplace(wedge_index, wedge_sign, sb_type);
 | 
				
			||||||
 | 
					  if (mask)
 | 
				
			||||||
 | 
					    mask -= (offset_x + offset_y * MASK_MASTER_STRIDE);
 | 
				
			||||||
 | 
					  return mask;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// If the signs for the wedges for various blocksizes are
 | 
				
			||||||
 | 
					// inconsistent flip the sign flag. Do it only once for every
 | 
				
			||||||
 | 
					// wedge codebook.
 | 
				
			||||||
 | 
					static void init_wedge_signs() {
 | 
				
			||||||
 | 
					  BLOCK_SIZE sb_type;
 | 
				
			||||||
 | 
					  memset(wedge_signflip_lookup, 0, sizeof(wedge_signflip_lookup));
 | 
				
			||||||
 | 
					  for (sb_type = BLOCK_4X4; sb_type < BLOCK_SIZES; ++sb_type) {
 | 
				
			||||||
 | 
					    const int bw = 4 * num_4x4_blocks_wide_lookup[sb_type];
 | 
				
			||||||
 | 
					    const int bh = 4 * num_4x4_blocks_high_lookup[sb_type];
 | 
				
			||||||
 | 
					    const wedge_params_type wedge_params = wedge_params_lookup[sb_type];
 | 
				
			||||||
 | 
					    const int wbits = wedge_params.bits;
 | 
				
			||||||
 | 
					    const int wtypes = 1 << wbits;
 | 
				
			||||||
 | 
					    int i, w;
 | 
				
			||||||
 | 
					    if (wbits == 0) continue;
 | 
				
			||||||
 | 
					    for (w = 0; w < wtypes; ++w) {
 | 
				
			||||||
 | 
					      const uint8_t *mask = get_wedge_mask_inplace(w, 0, sb_type);
 | 
				
			||||||
 | 
					      int sum = 0;
 | 
				
			||||||
 | 
					      for (i = 0; i < bw; ++i)
 | 
				
			||||||
 | 
					        sum += mask[i];
 | 
				
			||||||
 | 
					      for (i = 0; i < bh; ++i)
 | 
				
			||||||
 | 
					        sum += mask[i * MASK_MASTER_STRIDE];
 | 
				
			||||||
 | 
					      sum = (sum + (bw + bh) / 2) / (bw + bh);
 | 
				
			||||||
 | 
					      wedge_params.signflip[w] = (sum < 32);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Equation of line: f(x, y) = a[0]*(x - a[2]*w/8) + a[1]*(y - a[3]*h/8) = 0
 | 
					// Equation of line: f(x, y) = a[0]*(x - a[2]*w/8) + a[1]*(y - a[3]*h/8) = 0
 | 
				
			||||||
void vp10_init_wedge_masks() {
 | 
					void vp10_init_wedge_masks() {
 | 
				
			||||||
  int i, j, s;
 | 
					  int i, j, s;
 | 
				
			||||||
@@ -110,304 +400,7 @@ void vp10_init_wedge_masks() {
 | 
				
			|||||||
            (1 << WEDGE_WEIGHT_BITS) - get_masked_weight(x, s);
 | 
					            (1 << WEDGE_WEIGHT_BITS) - get_masked_weight(x, s);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					  init_wedge_signs();
 | 
				
			||||||
 | 
					 | 
				
			||||||
static const int wedge_params_4[1 << WEDGE_BITS_2]
 | 
					 | 
				
			||||||
                               [WEDGE_PARMS] = {
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 4, 1},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  4, 4, 1},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 4, 4, 1},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 4, 1},
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static const int wedge_params_8_hgtw[1 << WEDGE_BITS_3]
 | 
					 | 
				
			||||||
                                    [WEDGE_PARMS] = {
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 4, 1},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  4, 4, 1},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 4, 4, 1},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 4, 1},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 2, 1},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 6, 1},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 2, 1},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 6, 1},
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static const int wedge_params_8_hltw[1 << WEDGE_BITS_3]
 | 
					 | 
				
			||||||
                                    [WEDGE_PARMS] = {
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 4, 1},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  4, 4, 1},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 4, 4, 1},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 4, 1},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  2, 4, 1},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  6, 4, 1},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 2, 4, 1},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 6, 4, 1},
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static const int wedge_params_8_heqw[1 << WEDGE_BITS_3]
 | 
					 | 
				
			||||||
                                     [WEDGE_PARMS] = {
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 4, 1},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  4, 4, 1},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 4, 4, 1},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 4, 1},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    {WEDGE_HORIZONTAL, 4, 2, 1},
 | 
					 | 
				
			||||||
    {WEDGE_HORIZONTAL, 4, 6, 1},
 | 
					 | 
				
			||||||
    {WEDGE_VERTICAL,   2, 4, 1},
 | 
					 | 
				
			||||||
    {WEDGE_VERTICAL,   6, 4, 1},
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static const int wedge_params_16_hgtw[1 << WEDGE_BITS_4]
 | 
					 | 
				
			||||||
                                     [WEDGE_PARMS] = {
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  4, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 4, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 4, 0},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    {WEDGE_HORIZONTAL, 4, 2, 0},
 | 
					 | 
				
			||||||
    {WEDGE_HORIZONTAL, 4, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_HORIZONTAL, 4, 6, 0},
 | 
					 | 
				
			||||||
    {WEDGE_VERTICAL,   4, 4, 0},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 2, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 6, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 2, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 6, 0},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  2, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  6, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 2, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 6, 4, 0},
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static const int wedge_params_16_hltw[1 << WEDGE_BITS_4]
 | 
					 | 
				
			||||||
                                     [WEDGE_PARMS] = {
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  4, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 4, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 4, 0},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    {WEDGE_VERTICAL,   2, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_VERTICAL,   4, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_VERTICAL,   6, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_HORIZONTAL, 4, 4, 0},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 2, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 6, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 2, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 6, 0},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  2, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  6, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 2, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 6, 4, 0},
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static const int wedge_params_16_heqw[1 << WEDGE_BITS_4]
 | 
					 | 
				
			||||||
                                     [WEDGE_PARMS] = {
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  4, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 4, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 4, 0},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    {WEDGE_HORIZONTAL, 4, 2, 0},
 | 
					 | 
				
			||||||
    {WEDGE_HORIZONTAL, 4, 6, 0},
 | 
					 | 
				
			||||||
    {WEDGE_VERTICAL,   2, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_VERTICAL,   6, 4, 0},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 2, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 6, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 2, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 6, 0},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  2, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  6, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 2, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 6, 4, 0},
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static const int wedge_params_32_hgtw[1 << WEDGE_BITS_5]
 | 
					 | 
				
			||||||
                                     [WEDGE_PARMS] = {
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  4, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 4, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 4, 0},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    {WEDGE_HORIZONTAL, 4, 2, 0},
 | 
					 | 
				
			||||||
    {WEDGE_HORIZONTAL, 4, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_HORIZONTAL, 4, 6, 0},
 | 
					 | 
				
			||||||
    {WEDGE_VERTICAL,   4, 4, 0},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 1, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 2, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 3, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 5, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 6, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 7, 0},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 1, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 2, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 3, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 5, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 6, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 7, 0},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  1, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  2, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  3, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  5, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  6, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  7, 4, 0},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 1, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 2, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 3, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 5, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 6, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 7, 4, 0},
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static const int wedge_params_32_hltw[1 << WEDGE_BITS_5]
 | 
					 | 
				
			||||||
                                     [WEDGE_PARMS] = {
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  4, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 4, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 4, 0},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    {WEDGE_VERTICAL,   2, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_VERTICAL,   4, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_VERTICAL,   6, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_HORIZONTAL, 4, 4, 0},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 1, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 2, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 3, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 5, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 6, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 7, 0},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 1, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 2, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 3, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 5, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 6, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 7, 0},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  1, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  2, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  3, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  5, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  6, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  7, 4, 0},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 1, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 2, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 3, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 5, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 6, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 7, 4, 0},
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static const int wedge_params_32_heqw[1 << WEDGE_BITS_5]
 | 
					 | 
				
			||||||
                                     [WEDGE_PARMS] = {
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  4, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 4, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 4, 0},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    {WEDGE_HORIZONTAL, 4, 2, 0},
 | 
					 | 
				
			||||||
    {WEDGE_HORIZONTAL, 4, 6, 0},
 | 
					 | 
				
			||||||
    {WEDGE_VERTICAL,   2, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_VERTICAL,   6, 4, 0},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 1, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 2, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 3, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 5, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 6, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE27,  4, 7, 0},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 1, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 2, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 3, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 5, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 6, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE153, 4, 7, 0},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  1, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  2, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  3, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  5, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  6, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE63,  7, 4, 0},
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 1, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 2, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 3, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 5, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 6, 4, 0},
 | 
					 | 
				
			||||||
    {WEDGE_OBLIQUE117, 7, 4, 0},
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static const int *get_wedge_params_lookup[BLOCK_SIZES] = {
 | 
					 | 
				
			||||||
  NULL,
 | 
					 | 
				
			||||||
  NULL,
 | 
					 | 
				
			||||||
  NULL,
 | 
					 | 
				
			||||||
  &wedge_params_16_heqw[0][0],
 | 
					 | 
				
			||||||
  &wedge_params_16_hgtw[0][0],
 | 
					 | 
				
			||||||
  &wedge_params_16_hltw[0][0],
 | 
					 | 
				
			||||||
  &wedge_params_16_heqw[0][0],
 | 
					 | 
				
			||||||
  &wedge_params_16_hgtw[0][0],
 | 
					 | 
				
			||||||
  &wedge_params_16_hltw[0][0],
 | 
					 | 
				
			||||||
  &wedge_params_16_heqw[0][0],
 | 
					 | 
				
			||||||
  NULL,
 | 
					 | 
				
			||||||
  NULL,
 | 
					 | 
				
			||||||
  NULL,
 | 
					 | 
				
			||||||
#if CONFIG_EXT_PARTITION
 | 
					 | 
				
			||||||
  NULL,
 | 
					 | 
				
			||||||
  NULL,
 | 
					 | 
				
			||||||
  NULL,
 | 
					 | 
				
			||||||
#endif  // CONFIG_EXT_PARTITION
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static const int *get_wedge_params(int wedge_index,
 | 
					 | 
				
			||||||
                                   BLOCK_SIZE sb_type) {
 | 
					 | 
				
			||||||
  const int *a = NULL;
 | 
					 | 
				
			||||||
  if (wedge_index != WEDGE_NONE) {
 | 
					 | 
				
			||||||
    return get_wedge_params_lookup[sb_type] + WEDGE_PARMS * wedge_index;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  return a;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static const uint8_t *get_wedge_mask_inplace(int wedge_index,
 | 
					 | 
				
			||||||
                                             int neg,
 | 
					 | 
				
			||||||
                                             BLOCK_SIZE sb_type) {
 | 
					 | 
				
			||||||
  const uint8_t *master;
 | 
					 | 
				
			||||||
  const int bh = 4 << b_height_log2_lookup[sb_type];
 | 
					 | 
				
			||||||
  const int bw = 4 << b_width_log2_lookup[sb_type];
 | 
					 | 
				
			||||||
  const int *a = get_wedge_params(wedge_index, sb_type);
 | 
					 | 
				
			||||||
  int woff, hoff;
 | 
					 | 
				
			||||||
  if (!a) return NULL;
 | 
					 | 
				
			||||||
  woff = (a[1] * bw) >> 3;
 | 
					 | 
				
			||||||
  hoff = (a[2] * bh) >> 3;
 | 
					 | 
				
			||||||
  master = wedge_mask_obl[a[3]][neg][a[0]] +
 | 
					 | 
				
			||||||
      MASK_MASTER_STRIDE * (MASK_MASTER_SIZE / 2 - hoff) +
 | 
					 | 
				
			||||||
      MASK_MASTER_SIZE / 2 - woff;
 | 
					 | 
				
			||||||
  return master;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const uint8_t *vp10_get_soft_mask(int wedge_index,
 | 
					 | 
				
			||||||
                                  int wedge_sign,
 | 
					 | 
				
			||||||
                                  BLOCK_SIZE sb_type,
 | 
					 | 
				
			||||||
                                  int offset_x,
 | 
					 | 
				
			||||||
                                  int offset_y) {
 | 
					 | 
				
			||||||
  const uint8_t *mask =
 | 
					 | 
				
			||||||
      get_wedge_mask_inplace(wedge_index, wedge_sign, sb_type);
 | 
					 | 
				
			||||||
  if (mask)
 | 
					 | 
				
			||||||
    mask -= (offset_x + offset_y * MASK_MASTER_STRIDE);
 | 
					 | 
				
			||||||
  return mask;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void build_masked_compound(uint8_t *dst, int dst_stride,
 | 
					static void build_masked_compound(uint8_t *dst, int dst_stride,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -147,51 +147,60 @@ static INLINE void highbd_inter_predictor(const uint8_t *src, int src_stride,
 | 
				
			|||||||
#endif  // CONFIG_VP9_HIGHBITDEPTH
 | 
					#endif  // CONFIG_VP9_HIGHBITDEPTH
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if CONFIG_EXT_INTER
 | 
					#if CONFIG_EXT_INTER
 | 
				
			||||||
#define WEDGE_BITS_2      2
 | 
					#define MAX_WEDGE_TYPES   (1 << 5)
 | 
				
			||||||
#define WEDGE_BITS_3      3
 | 
					
 | 
				
			||||||
#define WEDGE_BITS_4      4
 | 
					 | 
				
			||||||
#define WEDGE_BITS_5      5
 | 
					 | 
				
			||||||
#define WEDGE_NONE       -1
 | 
					 | 
				
			||||||
#define WEDGE_WEIGHT_BITS 6
 | 
					#define WEDGE_WEIGHT_BITS 6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const int get_wedge_bits_lookup[BLOCK_SIZES] = {
 | 
					#define WEDGE_NONE       -1
 | 
				
			||||||
  0,
 | 
					
 | 
				
			||||||
  0,
 | 
					// Angles are with respect to horizontal anti-clockwise
 | 
				
			||||||
  0,
 | 
					typedef enum {
 | 
				
			||||||
  WEDGE_BITS_4,
 | 
					  WEDGE_HORIZONTAL = 0,
 | 
				
			||||||
  WEDGE_BITS_4,
 | 
					  WEDGE_VERTICAL = 1,
 | 
				
			||||||
  WEDGE_BITS_4,
 | 
					  WEDGE_OBLIQUE27 = 2,
 | 
				
			||||||
  WEDGE_BITS_4,
 | 
					  WEDGE_OBLIQUE63 = 3,
 | 
				
			||||||
  WEDGE_BITS_4,
 | 
					  WEDGE_OBLIQUE117 = 4,
 | 
				
			||||||
  WEDGE_BITS_4,
 | 
					  WEDGE_OBLIQUE153 = 5,
 | 
				
			||||||
  WEDGE_BITS_4,
 | 
					  WEDGE_DIRECTIONS
 | 
				
			||||||
  0,
 | 
					} WedgeDirectionType;
 | 
				
			||||||
  0,
 | 
					
 | 
				
			||||||
  0,
 | 
					// 3-tuple: {direction, x_offset, y_offset}
 | 
				
			||||||
#if CONFIG_EXT_PARTITION
 | 
					typedef struct {
 | 
				
			||||||
  0,
 | 
					  WedgeDirectionType direction;
 | 
				
			||||||
  0,
 | 
					  int x_offset;
 | 
				
			||||||
  0,
 | 
					  int y_offset;
 | 
				
			||||||
#endif  // CONFIG_EXT_PARTITION
 | 
					} wedge_code_type;
 | 
				
			||||||
};
 | 
					
 | 
				
			||||||
 | 
					typedef struct {
 | 
				
			||||||
 | 
					  int bits;
 | 
				
			||||||
 | 
					  const wedge_code_type *codebook;
 | 
				
			||||||
 | 
					  uint8_t *signflip;
 | 
				
			||||||
 | 
					  int smoother;
 | 
				
			||||||
 | 
					} wedge_params_type;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern const wedge_params_type wedge_params_lookup[BLOCK_SIZES];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static INLINE int get_wedge_bits_lookup(BLOCK_SIZE sb_type) {
 | 
				
			||||||
 | 
					  return wedge_params_lookup[sb_type].bits;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static INLINE int is_interinter_wedge_used(BLOCK_SIZE sb_type) {
 | 
					static INLINE int is_interinter_wedge_used(BLOCK_SIZE sb_type) {
 | 
				
			||||||
  (void) sb_type;
 | 
					  (void) sb_type;
 | 
				
			||||||
  return get_wedge_bits_lookup[sb_type] > 0;
 | 
					  return wedge_params_lookup[sb_type].bits > 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static INLINE int get_interinter_wedge_bits(BLOCK_SIZE sb_type) {
 | 
					static INLINE int get_interinter_wedge_bits(BLOCK_SIZE sb_type) {
 | 
				
			||||||
  const int wbits = get_wedge_bits_lookup[sb_type];
 | 
					  const int wbits = wedge_params_lookup[sb_type].bits;
 | 
				
			||||||
  return (wbits > 0) ? wbits + 1 : 0;
 | 
					  return (wbits > 0) ? wbits + 1 : 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static INLINE int is_interintra_wedge_used(BLOCK_SIZE sb_type) {
 | 
					static INLINE int is_interintra_wedge_used(BLOCK_SIZE sb_type) {
 | 
				
			||||||
  (void) sb_type;
 | 
					  (void) sb_type;
 | 
				
			||||||
  return get_wedge_bits_lookup[sb_type] > 0;
 | 
					  return wedge_params_lookup[sb_type].bits > 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static INLINE int get_interintra_wedge_bits(BLOCK_SIZE sb_type) {
 | 
					static INLINE int get_interintra_wedge_bits(BLOCK_SIZE sb_type) {
 | 
				
			||||||
  return get_wedge_bits_lookup[sb_type];
 | 
					  return wedge_params_lookup[sb_type].bits;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#endif  // CONFIG_EXT_INTER
 | 
					#endif  // CONFIG_EXT_INTER
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1577,7 +1577,7 @@ static void read_inter_block_mode_info(VP10Decoder *const pbi,
 | 
				
			|||||||
          xd->counts->wedge_interintra[bsize][mbmi->use_wedge_interintra]++;
 | 
					          xd->counts->wedge_interintra[bsize][mbmi->use_wedge_interintra]++;
 | 
				
			||||||
        if (mbmi->use_wedge_interintra) {
 | 
					        if (mbmi->use_wedge_interintra) {
 | 
				
			||||||
          mbmi->interintra_wedge_index =
 | 
					          mbmi->interintra_wedge_index =
 | 
				
			||||||
              vp10_read_literal(r, get_wedge_bits_lookup[bsize]);
 | 
					              vp10_read_literal(r, get_wedge_bits_lookup(bsize));
 | 
				
			||||||
          mbmi->interintra_wedge_sign = 0;
 | 
					          mbmi->interintra_wedge_sign = 0;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
@@ -1610,7 +1610,7 @@ static void read_inter_block_mode_info(VP10Decoder *const pbi,
 | 
				
			|||||||
      xd->counts->wedge_interinter[bsize][mbmi->use_wedge_interinter]++;
 | 
					      xd->counts->wedge_interinter[bsize][mbmi->use_wedge_interinter]++;
 | 
				
			||||||
    if (mbmi->use_wedge_interinter) {
 | 
					    if (mbmi->use_wedge_interinter) {
 | 
				
			||||||
      mbmi->interinter_wedge_index =
 | 
					      mbmi->interinter_wedge_index =
 | 
				
			||||||
          vp10_read_literal(r, get_wedge_bits_lookup[bsize]);
 | 
					          vp10_read_literal(r, get_wedge_bits_lookup(bsize));
 | 
				
			||||||
      mbmi->interinter_wedge_sign = vp10_read_bit(r);
 | 
					      mbmi->interinter_wedge_sign = vp10_read_bit(r);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1338,7 +1338,7 @@ static void pack_inter_mode_mvs(VP10_COMP *cpi, const MODE_INFO *mi,
 | 
				
			|||||||
                     cm->fc->wedge_interintra_prob[bsize]);
 | 
					                     cm->fc->wedge_interintra_prob[bsize]);
 | 
				
			||||||
          if (mbmi->use_wedge_interintra) {
 | 
					          if (mbmi->use_wedge_interintra) {
 | 
				
			||||||
            vp10_write_literal(w, mbmi->interintra_wedge_index,
 | 
					            vp10_write_literal(w, mbmi->interintra_wedge_index,
 | 
				
			||||||
                              get_wedge_bits_lookup[bsize]);
 | 
					                              get_wedge_bits_lookup(bsize));
 | 
				
			||||||
            assert(mbmi->interintra_wedge_sign == 0);
 | 
					            assert(mbmi->interintra_wedge_sign == 0);
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -1368,7 +1368,7 @@ static void pack_inter_mode_mvs(VP10_COMP *cpi, const MODE_INFO *mi,
 | 
				
			|||||||
                 cm->fc->wedge_interinter_prob[bsize]);
 | 
					                 cm->fc->wedge_interinter_prob[bsize]);
 | 
				
			||||||
      if (mbmi->use_wedge_interinter) {
 | 
					      if (mbmi->use_wedge_interinter) {
 | 
				
			||||||
        vp10_write_literal(w, mbmi->interinter_wedge_index,
 | 
					        vp10_write_literal(w, mbmi->interinter_wedge_index,
 | 
				
			||||||
                           get_wedge_bits_lookup[bsize]);
 | 
					                           get_wedge_bits_lookup(bsize));
 | 
				
			||||||
        vp10_write_bit(w, mbmi->interinter_wedge_sign);
 | 
					        vp10_write_bit(w, mbmi->interinter_wedge_sign);
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7146,7 +7146,7 @@ static int64_t handle_inter_mode(VP10_COMP *cpi, MACROBLOCK *x,
 | 
				
			|||||||
      mbmi->use_wedge_interinter = 1;
 | 
					      mbmi->use_wedge_interinter = 1;
 | 
				
			||||||
      rs = vp10_cost_literal(get_interinter_wedge_bits(bsize)) +
 | 
					      rs = vp10_cost_literal(get_interinter_wedge_bits(bsize)) +
 | 
				
			||||||
          vp10_cost_bit(cm->fc->wedge_interinter_prob[bsize], 1);
 | 
					          vp10_cost_bit(cm->fc->wedge_interinter_prob[bsize], 1);
 | 
				
			||||||
      wedge_types = (1 << get_wedge_bits_lookup[bsize]);
 | 
					      wedge_types = (1 << get_wedge_bits_lookup(bsize));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      vp10_build_inter_predictors_for_planes_single_buf(
 | 
					      vp10_build_inter_predictors_for_planes_single_buf(
 | 
				
			||||||
          xd, bsize, 0, 0,  mi_row, mi_col, 0, preds0, strides);
 | 
					          xd, bsize, 0, 0,  mi_row, mi_col, 0, preds0, strides);
 | 
				
			||||||
@@ -7384,7 +7384,7 @@ static int64_t handle_inter_mode(VP10_COMP *cpi, MACROBLOCK *x,
 | 
				
			|||||||
      // Disbale wedge search if source variance is small
 | 
					      // Disbale wedge search if source variance is small
 | 
				
			||||||
      if (x->source_variance > cpi->sf.disable_wedge_search_var_thresh) {
 | 
					      if (x->source_variance > cpi->sf.disable_wedge_search_var_thresh) {
 | 
				
			||||||
        mbmi->use_wedge_interintra = 1;
 | 
					        mbmi->use_wedge_interintra = 1;
 | 
				
			||||||
        wedge_types = (1 << get_wedge_bits_lookup[bsize]);
 | 
					        wedge_types = (1 << get_wedge_bits_lookup(bsize));
 | 
				
			||||||
        rwedge = vp10_cost_literal(get_interintra_wedge_bits(bsize)) +
 | 
					        rwedge = vp10_cost_literal(get_interintra_wedge_bits(bsize)) +
 | 
				
			||||||
            vp10_cost_bit(cm->fc->wedge_interintra_prob[bsize], 1);
 | 
					            vp10_cost_bit(cm->fc->wedge_interintra_prob[bsize], 1);
 | 
				
			||||||
        for (wedge_index = 0; wedge_index < wedge_types; ++wedge_index) {
 | 
					        for (wedge_index = 0; wedge_index < wedge_types; ++wedge_index) {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user