vp9: Speed 6 adapt_partition for live/vbr usage.
Enable adapt_partition for vbr mode for speed 6. This allows the usage of the pickmode-based partition (used in speed 5), but only selectively for superblocks with high source sad, otherwise the faster variance based partition scheme is used. For speed 6 on ytlive set: avgPSNR/SSIM metrics up by ~0.6%, several clips up by ~1.5%. Small/negligible decrease in speed. Change-Id: I12f3efef6b3e059391de330fdbe5a44c2587f1f8
This commit is contained in:
parent
34e48d6115
commit
a0de2692fc
@ -4178,7 +4178,10 @@ static void encode_nonrd_sb_row(VP9_COMP *cpi, ThreadData *td,
|
|||||||
int shift = cpi->Source->y_stride * (mi_row << 3) + (mi_col << 3);
|
int shift = cpi->Source->y_stride * (mi_row << 3) + (mi_col << 3);
|
||||||
int sb_offset2 = ((cm->mi_cols + 7) >> 3) * (mi_row >> 3) + (mi_col >> 3);
|
int sb_offset2 = ((cm->mi_cols + 7) >> 3) * (mi_row >> 3) + (mi_col >> 3);
|
||||||
int64_t source_sad = avg_source_sad(cpi, x, shift, sb_offset2);
|
int64_t source_sad = avg_source_sad(cpi, x, shift, sb_offset2);
|
||||||
if (sf->adapt_partition_source_sad && source_sad > 40000)
|
if (sf->adapt_partition_source_sad &&
|
||||||
|
(cpi->oxcf.rc_mode == VPX_VBR &&
|
||||||
|
source_sad > sf->adapt_partition_thresh &&
|
||||||
|
cpi->refresh_golden_frame))
|
||||||
partition_search_type = REFERENCE_PARTITION;
|
partition_search_type = REFERENCE_PARTITION;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -535,8 +535,9 @@ static void set_rt_speed_feature_framesize_independent(
|
|||||||
if (!cpi->external_resize && cm->width <= 1920) sf->use_source_sad = 1;
|
if (!cpi->external_resize && cm->width <= 1920) sf->use_source_sad = 1;
|
||||||
|
|
||||||
if (sf->use_source_sad) {
|
if (sf->use_source_sad) {
|
||||||
if (cm->width * cm->height <= 640 * 360)
|
sf->adapt_partition_source_sad = 1;
|
||||||
sf->adapt_partition_source_sad = 1;
|
sf->adapt_partition_thresh =
|
||||||
|
(cm->width * cm->height <= 640 * 360) ? 40000 : 80000;
|
||||||
if (cpi->content_state_sb_fd == NULL &&
|
if (cpi->content_state_sb_fd == NULL &&
|
||||||
(!cpi->use_svc ||
|
(!cpi->use_svc ||
|
||||||
cpi->svc.spatial_layer_id == cpi->svc.number_spatial_layers - 1)) {
|
cpi->svc.spatial_layer_id == cpi->svc.number_spatial_layers - 1)) {
|
||||||
|
@ -491,9 +491,11 @@ typedef struct SPEED_FEATURES {
|
|||||||
|
|
||||||
int use_simple_block_yrd;
|
int use_simple_block_yrd;
|
||||||
|
|
||||||
// If source sad of superblock is high, will switch from VARIANCE_PARTITION to
|
// If source sad of superblock is high (> adapt_partition_thresh), will switch
|
||||||
// REFERENCE_PARTITION (which selects partition based on the nonrd-pickmode).
|
// from VARIANCE_PARTITION to REFERENCE_PARTITION (which selects partition
|
||||||
|
// based on the nonrd-pickmode).
|
||||||
int adapt_partition_source_sad;
|
int adapt_partition_source_sad;
|
||||||
|
int adapt_partition_thresh;
|
||||||
} SPEED_FEATURES;
|
} SPEED_FEATURES;
|
||||||
|
|
||||||
struct VP9_COMP;
|
struct VP9_COMP;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user