Rework partition search skip scheme
This commit enables the encoder to skip split partition search if the bigger block size has all non-zero quantized coefficients in low frequency area and the total rate cost is below a certain threshold. It logarithmatically scales the rate threshold according to the current block size. For speed 3, the compression performance loss: derf -0.093% stdhd -0.066% Local experiments show 4% - 20% encoding speed-up for speed 3. blue_sky_1080p, 1500 kbps 51051 b/f, 35.891 dB, 67236 ms -> 50554 b/f, 35.857 dB, 59270 ms (12% speed-up) old_town_cross_720p, 1500 kbps 14431 b/f, 36.249 dB, 57687 ms -> 14108 b/f, 36.172 dB, 46586 ms (19% speed-up) pedestrian_area_1080p, 1500 kbps 50812 b/f, 40.124 dB, 100439 ms -> 50755 b/f, 40.118 dB, 96549 ms (4% speed-up) mobile_calendar_720p, 1000 kbps 10352 b/f, 35.055 dB, 51837 ms -> 10172 b/f, 35.003 dB, 44076 ms (15% speed-up) Change-Id: I412e34db49060775b3b89ba1738522317c3239c8
This commit is contained in:
@@ -1948,11 +1948,17 @@ static void store_coding_context(MACROBLOCK *x, PICK_MODE_CONTEXT *ctx,
|
||||
int64_t best_filter_diff[SWITCHABLE_FILTER_CONTEXTS],
|
||||
int skippable) {
|
||||
MACROBLOCKD *const xd = &x->e_mbd;
|
||||
int plane, has_high_freq_coeff = 0;
|
||||
BLOCK_SIZE bsize = xd->mi[0].src_mi->mbmi.sb_type;
|
||||
|
||||
if (bsize >= BLOCK_8X8)
|
||||
for (plane = 0; plane < MAX_MB_PLANE; ++plane)
|
||||
has_high_freq_coeff |= vp9_has_high_freq_in_plane(x, bsize, plane);
|
||||
|
||||
// Take a snapshot of the coding context so it can be
|
||||
// restored if we decide to encode this way
|
||||
ctx->skip = x->skip;
|
||||
ctx->skippable = skippable;
|
||||
ctx->skippable = skippable || !has_high_freq_coeff;
|
||||
ctx->best_mode_index = mode_index;
|
||||
ctx->mic = *xd->mi[0].src_mi;
|
||||
ctx->single_pred_diff = (int)comp_pred_diff[SINGLE_REFERENCE];
|
||||
|
||||
Reference in New Issue
Block a user