Merge "Add a strict mode for auto_min_max_partition_size feature"

This commit is contained in:
Yaowu Xu 2014-01-29 16:36:06 -08:00 коммит произвёл Gerrit Code Review
Родитель afc8f43448 1ca1186529
Коммит 08b912b4d1
3 изменённых файлов: 24 добавлений и 12 удалений

Просмотреть файл

@ -1446,15 +1446,19 @@ static void rd_use_partition(VP9_COMP *cpi,
} }
static const BLOCK_SIZE min_partition_size[BLOCK_SIZES] = { static const BLOCK_SIZE min_partition_size[BLOCK_SIZES] = {
BLOCK_4X4, BLOCK_4X4, BLOCK_4X4, BLOCK_4X4, BLOCK_4X4, BLOCK_4X4, BLOCK_4X4,
BLOCK_4X4, BLOCK_4X4, BLOCK_8X8, BLOCK_8X8, BLOCK_4X4, BLOCK_4X4, BLOCK_4X4,
BLOCK_8X8, BLOCK_16X16, BLOCK_16X16, BLOCK_16X16, BLOCK_16X16 BLOCK_8X8, BLOCK_8X8, BLOCK_8X8,
BLOCK_16X16, BLOCK_16X16, BLOCK_16X16,
BLOCK_16X16
}; };
static const BLOCK_SIZE max_partition_size[BLOCK_SIZES] = { static const BLOCK_SIZE max_partition_size[BLOCK_SIZES] = {
BLOCK_8X8, BLOCK_16X16, BLOCK_16X16, BLOCK_16X16, BLOCK_8X8, BLOCK_16X16, BLOCK_16X16,
BLOCK_32X32, BLOCK_32X32, BLOCK_32X32, BLOCK_64X64, BLOCK_16X16, BLOCK_32X32, BLOCK_32X32,
BLOCK_64X64, BLOCK_64X64, BLOCK_64X64, BLOCK_64X64, BLOCK_64X64 BLOCK_32X32, BLOCK_64X64, BLOCK_64X64,
BLOCK_64X64, BLOCK_64X64, BLOCK_64X64,
BLOCK_64X64
}; };
// Look at all the mode_info entries for blocks that are part of this // Look at all the mode_info entries for blocks that are part of this
@ -1540,9 +1544,11 @@ static void rd_auto_partition_range(VP9_COMP *cpi, const TileInfo *const tile,
} }
} }
// Give a bit of leaway either side of the observed min and max // adjust observed min and max
*min_block_size = min_partition_size[*min_block_size]; if (cpi->sf.auto_min_max_partition_size == RELAXED_NEIGHBORING_MIN_MAX) {
*max_block_size = max_partition_size[*max_block_size]; *min_block_size = min_partition_size[*min_block_size];
*max_block_size = max_partition_size[*max_block_size];
}
// Check border cases where max and min from neighbours may not be legal. // Check border cases where max and min from neighbours may not be legal.
*max_block_size = find_partition_size(*max_block_size, *max_block_size = find_partition_size(*max_block_size,

Просмотреть файл

@ -839,6 +839,7 @@ static void set_rt_speed_feature(VP9_COMMON *cm,
if (speed >= 5) { if (speed >= 5) {
int i; int i;
sf->disable_split_mask = DISABLE_ALL_SPLIT; sf->disable_split_mask = DISABLE_ALL_SPLIT;
sf->auto_min_max_partition_size = 2;
sf->subpel_force_stop = 1; sf->subpel_force_stop = 1;
for (i = 0; i < TX_SIZES; i++) { for (i = 0; i < TX_SIZES; i++) {
sf->intra_y_mode_mask[i] = INTRA_DC_H_V; sf->intra_y_mode_mask[i] = INTRA_DC_H_V;

Просмотреть файл

@ -180,6 +180,12 @@ typedef enum {
USE_LARGESTALL USE_LARGESTALL
} TX_SIZE_SEARCH_METHOD; } TX_SIZE_SEARCH_METHOD;
typedef enum {
NOT_IN_USE = 0,
RELAXED_NEIGHBORING_MIN_MAX = 1,
STRICT_NEIGHBORING_MIN_MAX = 2
} AUTO_MIN_MAX_MODE;
typedef enum { typedef enum {
// Values should be powers of 2 so that they can be selected as bits of // Values should be powers of 2 so that they can be selected as bits of
// an integer flags field // an integer flags field
@ -337,9 +343,8 @@ typedef struct {
BLOCK_SIZE always_this_block_size; BLOCK_SIZE always_this_block_size;
// Sets min and max partition sizes for this 64x64 region based on the // Sets min and max partition sizes for this 64x64 region based on the
// same superblock in last encoded frame, and the left and above neighbor // same 64x64 in last encoded frame, and the left and above neighbor.
// in this block. AUTO_MIN_MAX_MODE auto_min_max_partition_size;
int auto_min_max_partition_size;
// Min and max partition size we enable (block_size) as per auto // Min and max partition size we enable (block_size) as per auto
// min max, but also used by adjust partitioning, and pick_partitioning. // min max, but also used by adjust partitioning, and pick_partitioning.