Merge "Add a strict mode for auto_min_max_partition_size feature"
This commit is contained in:
Коммит
08b912b4d1
|
@ -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.
|
||||||
|
|
Загрузка…
Ссылка в новой задаче