Skip the partition search for still frames
This patch re-enabled the feature in Pengchong's patch
(commit 1286126073). Originally, it
was turned on while use_lastframe_partitioning > 0(not used anymore).
Now it was added as a feature, and turned on while speed >= 2.
As described in the original patch, this feature helps speed up the
slideshows in YouTube.
Change-Id: I1b0f18d65da1ee1c8d1e117dabba910c5207c471
This commit is contained in:
@@ -2490,7 +2490,7 @@ static void encode_rd_sb_row(VP9_COMP *cpi, const TileInfo *const tile,
|
|||||||
sf->always_this_block_size);
|
sf->always_this_block_size);
|
||||||
rd_use_partition(cpi, tile, mi, tp, mi_row, mi_col, BLOCK_64X64,
|
rd_use_partition(cpi, tile, mi, tp, mi_row, mi_col, BLOCK_64X64,
|
||||||
&dummy_rate, &dummy_dist, 1, cpi->pc_root);
|
&dummy_rate, &dummy_dist, 1, cpi->pc_root);
|
||||||
} else if ((sf->use_lastframe_partitioning && cpi->skippable_frame) ||
|
} else if (cpi->partition_search_skippable_frame ||
|
||||||
sf->partition_search_type == VAR_BASED_FIXED_PARTITION) {
|
sf->partition_search_type == VAR_BASED_FIXED_PARTITION) {
|
||||||
BLOCK_SIZE bsize;
|
BLOCK_SIZE bsize;
|
||||||
set_offsets(cpi, tile, mi_row, mi_col, BLOCK_64X64);
|
set_offsets(cpi, tile, mi_row, mi_col, BLOCK_64X64);
|
||||||
|
|||||||
@@ -772,7 +772,7 @@ VP9_COMP *vp9_create_compressor(VP9EncoderConfig *oxcf) {
|
|||||||
vp9_rc_init(&cpi->oxcf, oxcf->pass, &cpi->rc);
|
vp9_rc_init(&cpi->oxcf, oxcf->pass, &cpi->rc);
|
||||||
|
|
||||||
cm->current_video_frame = 0;
|
cm->current_video_frame = 0;
|
||||||
cpi->skippable_frame = 0;
|
cpi->partition_search_skippable_frame = 0;
|
||||||
|
|
||||||
// Create the encoder segmentation map and set all entries to 0
|
// Create the encoder segmentation map and set all entries to 0
|
||||||
CHECK_MEM_ERROR(cm, cpi->segmentation_map,
|
CHECK_MEM_ERROR(cm, cpi->segmentation_map,
|
||||||
@@ -2203,9 +2203,9 @@ static void encode_frame_to_data_rate(VP9_COMP *cpi,
|
|||||||
|
|
||||||
// Check if the current frame is skippable for the partition search in the
|
// Check if the current frame is skippable for the partition search in the
|
||||||
// second pass according to the first pass stats
|
// second pass according to the first pass stats
|
||||||
if (oxcf->pass == 2 &&
|
if (cpi->sf.allow_partition_search_skip && oxcf->pass == 2 &&
|
||||||
(!cpi->use_svc || is_two_pass_svc(cpi))) {
|
(!cpi->use_svc || is_two_pass_svc(cpi))) {
|
||||||
cpi->skippable_frame = is_skippable_frame(cpi);
|
cpi->partition_search_skippable_frame = is_skippable_frame(cpi);
|
||||||
}
|
}
|
||||||
|
|
||||||
// For 1 pass CBR, check if we are dropping this frame.
|
// For 1 pass CBR, check if we are dropping this frame.
|
||||||
|
|||||||
@@ -241,7 +241,8 @@ typedef struct VP9_COMP {
|
|||||||
YV12_BUFFER_CONFIG *unscaled_last_source;
|
YV12_BUFFER_CONFIG *unscaled_last_source;
|
||||||
YV12_BUFFER_CONFIG scaled_last_source;
|
YV12_BUFFER_CONFIG scaled_last_source;
|
||||||
|
|
||||||
int skippable_frame;
|
// For a still frame, this flag is set to 1 to skip partition search.
|
||||||
|
int partition_search_skippable_frame;
|
||||||
|
|
||||||
int scaled_ref_idx[3];
|
int scaled_ref_idx[3];
|
||||||
int lst_fb_idx;
|
int lst_fb_idx;
|
||||||
|
|||||||
@@ -88,6 +88,8 @@ static void set_good_speed_feature(VP9_COMP *cpi, VP9_COMMON *cm,
|
|||||||
else
|
else
|
||||||
sf->partition_search_breakout_dist_thr = (1 << 22);
|
sf->partition_search_breakout_dist_thr = (1 << 22);
|
||||||
sf->partition_search_breakout_rate_thr = 700;
|
sf->partition_search_breakout_rate_thr = 700;
|
||||||
|
|
||||||
|
sf->allow_partition_search_skip = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (speed >= 3) {
|
if (speed >= 3) {
|
||||||
@@ -365,6 +367,7 @@ void vp9_set_speed_features(VP9_COMP *cpi) {
|
|||||||
sf->max_delta_qindex = 0;
|
sf->max_delta_qindex = 0;
|
||||||
sf->disable_filter_search_var_thresh = 0;
|
sf->disable_filter_search_var_thresh = 0;
|
||||||
sf->adaptive_interp_filter_search = 0;
|
sf->adaptive_interp_filter_search = 0;
|
||||||
|
sf->allow_partition_search_skip = 0;
|
||||||
|
|
||||||
for (i = 0; i < TX_SIZES; i++) {
|
for (i = 0; i < TX_SIZES; i++) {
|
||||||
sf->intra_y_mode_mask[i] = INTRA_ALL;
|
sf->intra_y_mode_mask[i] = INTRA_ALL;
|
||||||
|
|||||||
@@ -435,6 +435,9 @@ typedef struct SPEED_FEATURES {
|
|||||||
// Partition search early breakout thresholds.
|
// Partition search early breakout thresholds.
|
||||||
int64_t partition_search_breakout_dist_thr;
|
int64_t partition_search_breakout_dist_thr;
|
||||||
int partition_search_breakout_rate_thr;
|
int partition_search_breakout_rate_thr;
|
||||||
|
|
||||||
|
// Allow skipping partition search for still image frame
|
||||||
|
int allow_partition_search_skip;
|
||||||
} SPEED_FEATURES;
|
} SPEED_FEATURES;
|
||||||
|
|
||||||
struct VP9_COMP;
|
struct VP9_COMP;
|
||||||
|
|||||||
Reference in New Issue
Block a user