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] = {
BLOCK_4X4, BLOCK_4X4, BLOCK_4X4, BLOCK_4X4,
BLOCK_4X4, BLOCK_4X4, BLOCK_8X8, BLOCK_8X8,
BLOCK_8X8, BLOCK_16X16, BLOCK_16X16, BLOCK_16X16, BLOCK_16X16
BLOCK_4X4, BLOCK_4X4, BLOCK_4X4,
BLOCK_4X4, BLOCK_4X4, BLOCK_4X4,
BLOCK_8X8, BLOCK_8X8, BLOCK_8X8,
BLOCK_16X16, BLOCK_16X16, BLOCK_16X16,
BLOCK_16X16
};
static const BLOCK_SIZE max_partition_size[BLOCK_SIZES] = {
BLOCK_8X8, BLOCK_16X16, BLOCK_16X16, BLOCK_16X16,
BLOCK_32X32, BLOCK_32X32, BLOCK_32X32, BLOCK_64X64,
BLOCK_64X64, BLOCK_64X64, BLOCK_64X64, BLOCK_64X64, BLOCK_64X64
BLOCK_8X8, BLOCK_16X16, BLOCK_16X16,
BLOCK_16X16, BLOCK_32X32, BLOCK_32X32,
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
@ -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
if (cpi->sf.auto_min_max_partition_size == RELAXED_NEIGHBORING_MIN_MAX) {
*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.
*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) {
int i;
sf->disable_split_mask = DISABLE_ALL_SPLIT;
sf->auto_min_max_partition_size = 2;
sf->subpel_force_stop = 1;
for (i = 0; i < TX_SIZES; i++) {
sf->intra_y_mode_mask[i] = INTRA_DC_H_V;

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

@ -180,6 +180,12 @@ typedef enum {
USE_LARGESTALL
} 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 {
// Values should be powers of 2 so that they can be selected as bits of
// an integer flags field
@ -337,9 +343,8 @@ typedef struct {
BLOCK_SIZE always_this_block_size;
// 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
// in this block.
int auto_min_max_partition_size;
// same 64x64 in last encoded frame, and the left and above neighbor.
AUTO_MIN_MAX_MODE auto_min_max_partition_size;
// Min and max partition size we enable (block_size) as per auto
// min max, but also used by adjust partitioning, and pick_partitioning.