193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org/* 293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org * 493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org * Use of this source code is governed by a BSD-style license 593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org * that can be found in the LICENSE file in the root of the source 693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org * tree. An additional intellectual property rights grant can be found 793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org * in the file PATENTS. All contributing project authors may 893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org * be found in the AUTHORS file in the root of the source tree. 993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org */ 1093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 1193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org#ifndef VP9_ENCODER_VP9_SPEED_FEATURES_H_ 1293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org#define VP9_ENCODER_VP9_SPEED_FEATURES_H_ 1393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 1493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org#include "vp9/common/vp9_enums.h" 1593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 1693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org#ifdef __cplusplus 1793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgextern "C" { 1893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org#endif 1993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 2087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgenum { 2187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org INTRA_ALL = (1 << DC_PRED) | 2287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (1 << V_PRED) | (1 << H_PRED) | 2387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (1 << D45_PRED) | (1 << D135_PRED) | 2487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (1 << D117_PRED) | (1 << D153_PRED) | 2587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (1 << D207_PRED) | (1 << D63_PRED) | 2687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (1 << TM_PRED), 2787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org INTRA_DC = (1 << DC_PRED), 2887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org INTRA_DC_TM = (1 << DC_PRED) | (1 << TM_PRED), 2987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org INTRA_DC_H_V = (1 << DC_PRED) | (1 << V_PRED) | (1 << H_PRED), 3087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org INTRA_DC_TM_H_V = (1 << DC_PRED) | (1 << TM_PRED) | (1 << V_PRED) | 3187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (1 << H_PRED) 3287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org}; 3387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 3487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgenum { 3587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org INTER_ALL = (1 << NEARESTMV) | (1 << NEARMV) | (1 << ZEROMV) | (1 << NEWMV), 3687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org INTER_NEAREST = (1 << NEARESTMV), 3787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org INTER_NEAREST_NEAR_NEW = (1 << NEARESTMV) | (1 << NEARMV) | (1 << NEWMV), 3887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org INTER_NEAREST_NEAR_ZERO = (1 << NEARESTMV) | (1 << NEARMV) | (1 << ZEROMV), 3987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org}; 4087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 4187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.orgenum { 4287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org DISABLE_ALL_INTER_SPLIT = (1 << THR_COMP_GA) | 4387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (1 << THR_COMP_LA) | 4487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (1 << THR_ALTR) | 4587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (1 << THR_GOLD) | 4687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (1 << THR_LAST), 4787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 4887997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org DISABLE_ALL_SPLIT = (1 << THR_INTRA) | DISABLE_ALL_INTER_SPLIT, 4987997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 5087997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org DISABLE_COMPOUND_SPLIT = (1 << THR_COMP_GA) | (1 << THR_COMP_LA), 5187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 5287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org LAST_AND_INTRA_SPLIT_ONLY = (1 << THR_COMP_GA) | 5387997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (1 << THR_COMP_LA) | 5487997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (1 << THR_ALTR) | 5587997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org (1 << THR_GOLD) 5687997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org}; 5787997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 5893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgtypedef enum { 5993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org DIAMOND = 0, 6093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org NSTEP = 1, 6193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org HEX = 2, 6293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org BIGDIA = 3, 6393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org SQUARE = 4, 6493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org FAST_HEX = 5, 6593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org FAST_DIAMOND = 6 6693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org} SEARCH_METHODS; 6793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 6893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgtypedef enum { 6993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // No recode. 7093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org DISALLOW_RECODE = 0, 7193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Allow recode for KF and exceeding maximum frame bandwidth. 7293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org ALLOW_RECODE_KFMAXBW = 1, 7393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Allow recode only for KF/ARF/GF frames. 7493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org ALLOW_RECODE_KFARFGF = 2, 7593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Allow recode for all frames based on bitrate constraints. 7693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org ALLOW_RECODE = 3, 7793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org} RECODE_LOOP_TYPE; 7893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 7993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgtypedef enum { 8093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org SUBPEL_TREE = 0, 81d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org SUBPEL_TREE_PRUNED = 1, 8293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Other methods to come 8393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org} SUBPEL_SEARCH_METHODS; 8493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 8593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgtypedef enum { 86e2064011d36b2008099446503f28e64d445060ecjohannkoenig@chromium.org NO_MOTION_THRESHOLD = 0, 87e2064011d36b2008099446503f28e64d445060ecjohannkoenig@chromium.org LOW_MOTION_THRESHOLD = 7 8888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org} MOTION_THRESHOLD; 8988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org 9088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgtypedef enum { 9193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org LAST_FRAME_PARTITION_OFF = 0, 9293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org LAST_FRAME_PARTITION_LOW_MOTION = 1, 9393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org LAST_FRAME_PARTITION_ALL = 2 9493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org} LAST_FRAME_PARTITION_METHOD; 9593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 9693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgtypedef enum { 9793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org USE_FULL_RD = 0, 9888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org USE_LARGESTALL, 9988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org USE_TX_8X8 10093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org} TX_SIZE_SEARCH_METHOD; 10193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 10293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgtypedef enum { 10393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org NOT_IN_USE = 0, 10493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org RELAXED_NEIGHBORING_MIN_MAX = 1, 105ace65784417788374f0b19ce5a8abd06c9ccd007johannkoenig@chromium.org CONSTRAIN_NEIGHBORING_MIN_MAX = 2, 106ace65784417788374f0b19ce5a8abd06c9ccd007johannkoenig@chromium.org STRICT_NEIGHBORING_MIN_MAX = 3 10793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org} AUTO_MIN_MAX_MODE; 10893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 10993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgtypedef enum { 11093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Try the full image with different values. 11193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org LPF_PICK_FROM_FULL_IMAGE, 11293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Try a small portion of the image with different values. 11393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org LPF_PICK_FROM_SUBIMAGE, 11493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Estimate the level based on quantizer and frame type 11593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org LPF_PICK_FROM_Q, 116e2064011d36b2008099446503f28e64d445060ecjohannkoenig@chromium.org // Pick 0 to disable LPF if LPF was enabled last frame 117e2064011d36b2008099446503f28e64d445060ecjohannkoenig@chromium.org LPF_PICK_MINIMAL_LPF 11893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org} LPF_PICK_METHOD; 11993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 12093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgtypedef enum { 12193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Terminate search early based on distortion so far compared to 12293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // qp step, distortion in the neighborhood of the frame, etc. 12393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org FLAG_EARLY_TERMINATE = 1 << 0, 12493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 12593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Skips comp inter modes if the best so far is an intra mode. 12693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org FLAG_SKIP_COMP_BESTINTRA = 1 << 1, 12793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 12893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Skips oblique intra modes if the best so far is an inter mode. 12993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org FLAG_SKIP_INTRA_BESTINTER = 1 << 3, 13093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 13193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Skips oblique intra modes at angles 27, 63, 117, 153 if the best 13293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // intra so far is not one of the neighboring directions. 13393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org FLAG_SKIP_INTRA_DIRMISMATCH = 1 << 4, 13493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 13593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Skips intra modes other than DC_PRED if the source variance is small 13693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org FLAG_SKIP_INTRA_LOWVAR = 1 << 5, 13793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org} MODE_SEARCH_SKIP_LOGIC; 13893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 13993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgtypedef enum { 140d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org FLAG_SKIP_EIGHTTAP = 1 << EIGHTTAP, 141d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org FLAG_SKIP_EIGHTTAP_SMOOTH = 1 << EIGHTTAP_SMOOTH, 142d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org FLAG_SKIP_EIGHTTAP_SHARP = 1 << EIGHTTAP_SHARP, 143d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org} INTERP_FILTER_MASK; 144d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org 145d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.orgtypedef enum { 14693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Search partitions using RD/NONRD criterion 14793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org SEARCH_PARTITION = 0, 14893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 14993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Always use a fixed size partition 15093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org FIXED_PARTITION = 1, 15193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 15293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Use a fixed size partition in every 64X64 SB, where the size is 15393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // determined based on source variance 15493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org VAR_BASED_FIXED_PARTITION = 2, 15593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 15693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org REFERENCE_PARTITION = 3, 15793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 15893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Use an arbitrary partitioning scheme based on source variance within 15993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // a 64X64 SB 160693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com VAR_BASED_PARTITION, 161693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com 162693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com // Use non-fixed partitions based on source variance 163693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com SOURCE_VAR_BASED_PARTITION 16493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org} PARTITION_SEARCH_TYPE; 16593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 16693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgtypedef enum { 16793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Does a dry run to see if any of the contexts need to be updated or not, 16893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // before the final run. 16993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org TWO_LOOP = 0, 17093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 17193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // No dry run conducted. 17293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org ONE_LOOP = 1, 17393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 17493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // No dry run, also only half the coef contexts and bands are updated. 17593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // The rest are not updated at all. 17693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org ONE_LOOP_REDUCED = 2 17793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org} FAST_COEFF_UPDATE; 17893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 17988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgtypedef struct MV_SPEED_FEATURES { 18093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Motion search method (Diamond, NSTEP, Hex, Big Diamond, Square, etc). 18193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org SEARCH_METHODS search_method; 18293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 18388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org // This parameter controls which step in the n-step process we start at. 18488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org // It's changed adaptively based on circumstances. 18588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org int reduce_first_step_size; 18688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org 18788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org // If this is set to 1, we limit the motion search range to 2 times the 18888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org // largest motion vector found in the last frame. 18988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org int auto_mv_step_size; 19093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 19193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Subpel_search_method can only be subpel_tree which does a subpixel 19293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // logarithmic search that keeps stepping at 1/2 pixel units until 19393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // you stop getting a gain, and then goes on to 1/4 and repeats 19493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // the same process. Along the way it skips many diagonals. 19593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org SUBPEL_SEARCH_METHODS subpel_search_method; 19693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 19793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Maximum number of steps in logarithmic subpel search before giving up. 19893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int subpel_iters_per_step; 19993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 20093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Control when to stop subpel search 20193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int subpel_force_stop; 202e2064011d36b2008099446503f28e64d445060ecjohannkoenig@chromium.org 203e2064011d36b2008099446503f28e64d445060ecjohannkoenig@chromium.org // This variable sets the step_param used in full pel motion search. 204e2064011d36b2008099446503f28e64d445060ecjohannkoenig@chromium.org int fullpel_search_step_param; 20588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org} MV_SPEED_FEATURES; 20693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 20788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgtypedef struct SPEED_FEATURES { 20888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org MV_SPEED_FEATURES mv; 20993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 21088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org // Frame level coding parameter update 21188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org int frame_parameter_update; 21293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 21388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org RECODE_LOOP_TYPE recode_loop; 21493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 21593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Trellis (dynamic programming) optimization of quantized values (+1, 0). 21693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int optimize_coefficients; 21793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 21893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Always set to 0. If on it enables 0 cost background transmission 21993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // (except for the initial transmission of the segmentation). The feature is 22093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // disabled because the addition of very large block sizes make the 22193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // backgrounds very to cheap to encode, and the segmentation we have 22293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // adds overhead. 22393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int static_segmentation; 22493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 22593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // If 1 we iterate finding a best reference for 2 ref frames together - via 22693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // a log search that iterates 4 times (check around mv for last for best 22793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // error of combined predictor then check around mv for alt). If 0 we 22893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // we just use the best motion vector found for each frame by itself. 2297765c078fa920ba6c949c15f16b6cc979d8bb95bjohannkoenig@chromium.org BLOCK_SIZE comp_inter_joint_search_thresh; 23093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 23193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // This variable is used to cap the maximum number of times we skip testing a 23293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // mode to be evaluated. A high value means we will be faster. 23393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int adaptive_rd_thresh; 23493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 23593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Enables skipping the reconstruction step (idct, recon) in the 23693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // intermediate steps assuming the last frame didn't have too many intra 23793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // blocks and the q is less than a threshold. 23893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int skip_encode_sb; 23993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int skip_encode_frame; 24093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Speed feature to allow or disallow skipping of recode at block 24193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // level within a frame. 24293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int allow_skip_recode; 24393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 24493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // This variable allows us to reuse the last frames partition choices 24593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // (64x64 v 32x32 etc) for this frame. It can be set to only use the last 24693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // frame as a starting point in low motion scenes or always use it. If set 24793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // we use last partitioning_redo frequency to determine how often to redo 24893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // the partitioning from scratch. Adjust_partitioning_from_last_frame 24993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // enables us to adjust up or down one partitioning from the last frames 25093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // partitioning. 25193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org LAST_FRAME_PARTITION_METHOD use_lastframe_partitioning; 25293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 25388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org // The threshold is to determine how slow the motino is, it is used when 25488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org // use_lastframe_partitioning is set to LAST_FRAME_PARTITION_LOW_MOTION 25588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org MOTION_THRESHOLD lf_motion_threshold; 25688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org 25793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Determine which method we use to determine transform size. We can choose 25893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // between options like full rd, largest for prediction size, largest 25993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // for intra and model coefs for the rest. 26093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org TX_SIZE_SEARCH_METHOD tx_size_search_method; 26193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 26293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Low precision 32x32 fdct keeps everything in 16 bits and thus is less 26393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // precise but significantly faster than the non lp version. 26493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int use_lp32x32fdct; 26593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 26693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // TODO(JBB): remove this as its no longer used. 26793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 26893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // After looking at the first set of modes (set by index here), skip 26993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // checking modes for reference frames that don't match the reference frame 27093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // of the best so far. 27193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int mode_skip_start; 27293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 27393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // TODO(JBB): Remove this. 27493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int reference_masking; 27593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 27693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org PARTITION_SEARCH_TYPE partition_search_type; 27793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 27893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Used if partition_search_type = FIXED_SIZE_PARTITION 27993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org BLOCK_SIZE always_this_block_size; 28093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 28193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Skip rectangular partition test when partition type none gives better 28293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // rd than partition type split. 28393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int less_rectangular_check; 28493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 28593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Disable testing non square partitions. (eg 16x32) 28693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int use_square_partition_only; 28793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 28893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Sets min and max partition sizes for this 64x64 region based on the 28993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // same 64x64 in last encoded frame, and the left and above neighbor. 29093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org AUTO_MIN_MAX_MODE auto_min_max_partition_size; 29193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 29293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Min and max partition size we enable (block_size) as per auto 29393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // min max, but also used by adjust partitioning, and pick_partitioning. 29493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org BLOCK_SIZE min_partition_size; 29593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org BLOCK_SIZE max_partition_size; 29693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 29793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Whether or not we allow partitions one smaller or one greater than the last 29893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // frame's partitioning. Only used if use_lastframe_partitioning is set. 29993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int adjust_partitioning_from_last_frame; 30093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 30193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // How frequently we re do the partitioning from scratch. Only used if 30293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // use_lastframe_partitioning is set. 30393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int last_partitioning_redo_frequency; 30493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 30593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // This enables constrained copy partitioning, which, given an input block 30693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // size bsize, will copy previous partition for partitions less than bsize, 30793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // otherwise bsize partition is used. bsize is currently set to 16x16. 30893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Used for the case where motion is detected in superblock. 30993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int constrain_copy_partition; 31093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 31193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Disables sub 8x8 blocksizes in different scenarios: Choices are to disable 31293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // it always, to allow it for only Last frame and Intra, disable it for all 31393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // inter modes or to enable it always. 31493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int disable_split_mask; 31593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 31693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // TODO(jingning): combine the related motion search speed features 31793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // This allows us to use motion search at other sizes as a starting 31893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // point for this motion search and limits the search range around it. 31993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int adaptive_motion_search; 32093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 32187997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org int schedule_mode_search; 32287997d490ae52aa962a985c95b3cddf7f8832641johannkoenig@chromium.org 32393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Allows sub 8x8 modes to use the prediction filter that was determined 32493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // best for 8x8 mode. If set to 0 we always re check all the filters for 32593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // sizes less than 8x8, 1 means we check all filter modes if no 8x8 filter 32693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // was selected, and 2 means we use 8 tap if no 8x8 filter mode was selected. 32793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int adaptive_pred_interp_filter; 32893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 329d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org // Adaptive prediction mode search 330d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org int adaptive_mode_search; 331d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org 3323983288b51bb3c8f48a2d5f77523ef3ff1e94cd2johannkoenig@chromium.org // Chessboard pattern prediction filter type search 3333983288b51bb3c8f48a2d5f77523ef3ff1e94cd2johannkoenig@chromium.org int cb_pred_filter_search; 3343983288b51bb3c8f48a2d5f77523ef3ff1e94cd2johannkoenig@chromium.org 33541294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org int cb_partition_search; 33641294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 33741294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org int motion_field_mode_search; 33841294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org 339ace65784417788374f0b19ce5a8abd06c9ccd007johannkoenig@chromium.org int alt_ref_search_fp; 340ace65784417788374f0b19ce5a8abd06c9ccd007johannkoenig@chromium.org 341e2064011d36b2008099446503f28e64d445060ecjohannkoenig@chromium.org // Fast quantization process path 342e2064011d36b2008099446503f28e64d445060ecjohannkoenig@chromium.org int use_quant_fp; 343e2064011d36b2008099446503f28e64d445060ecjohannkoenig@chromium.org 34493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Search through variable block partition types in non-RD mode decision 34593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // encoding process for RTC. 34693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int partition_check; 34793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 34893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Use finer quantizer in every other few frames that run variable block 34993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // partition type search. 35093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int force_frame_boost; 35193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 35293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Maximally allowed base quantization index fluctuation. 35393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int max_delta_qindex; 35493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 35593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Implements various heuristics to skip searching modes 35693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // The heuristics selected are based on flags 35793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // defined in the MODE_SEARCH_SKIP_HEURISTICS enum 35893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org unsigned int mode_search_skip_flags; 35993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 36093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // A source variance threshold below which filter search is disabled 36193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Choose a very large value (UINT_MAX) to use 8-tap always 36293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org unsigned int disable_filter_search_var_thresh; 36393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 36493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // These bit masks allow you to enable or disable intra modes for each 36593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // transform size separately. 36693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int intra_y_mode_mask[TX_SIZES]; 36793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int intra_uv_mode_mask[TX_SIZES]; 36893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 36993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // This variable enables an early break out of mode testing if the model for 37093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // rd built from the prediction signal indicates a value that's much 37193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // higher than the best rd we've seen so far. 37293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int use_rd_breakout; 37393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 37493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // This enables us to use an estimate for intra rd based on dc mode rather 37593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // than choosing an actual uv mode in the stage of encoding before the actual 37693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // final encode. 37793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int use_uv_intra_rd_estimate; 37893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 37993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // This feature controls how the loop filter level is determined. 38093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org LPF_PICK_METHOD lpf_pick; 38193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 38293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // This feature limits the number of coefficients updates we actually do 38393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // by only looking at counts from 1/2 the bands. 38493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org FAST_COEFF_UPDATE use_fast_coef_updates; 38593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 38693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // This flag controls the use of non-RD mode decision. 38793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int use_nonrd_pick_mode; 38893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 38993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // A binary mask indicating if NEARESTMV, NEARMV, ZEROMV, NEWMV 39088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org // modes are used in order from LSB to MSB for each BLOCK_SIZE. 39188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org int inter_mode_mask[BLOCK_SIZES]; 39293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 39393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // This feature controls whether we do the expensive context update and 39493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // calculation in the rd coefficient costing loop. 39593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int use_fast_coef_costing; 39693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 39793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // This feature controls the tolerence vs target used in deciding whether to 39893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // recode a frame. It has no meaning if recode is disabled. 39993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int recode_tolerance; 40093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 40193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // This variable controls the maximum block size where intra blocks can be 40293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // used in inter frames. 40393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // TODO(aconverse): Fold this into one of the other many mode skips 40493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org BLOCK_SIZE max_intra_bsize; 405693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com 406693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com // The frequency that we check if SOURCE_VAR_BASED_PARTITION or 407693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com // FIXED_PARTITION search type should be used. 408693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com int search_type_check_frequency; 409693441efe611de7ca09c00f4e79776f604b689f4joeyparrish@google.com 410e2064011d36b2008099446503f28e64d445060ecjohannkoenig@chromium.org // When partition is pre-set, the inter prediction result from pick_inter_mode 411e2064011d36b2008099446503f28e64d445060ecjohannkoenig@chromium.org // can be reused in final block encoding process. It is enabled only for real- 412e2064011d36b2008099446503f28e64d445060ecjohannkoenig@chromium.org // time mode speed 6. 413e2064011d36b2008099446503f28e64d445060ecjohannkoenig@chromium.org int reuse_inter_pred_sby; 414e2064011d36b2008099446503f28e64d445060ecjohannkoenig@chromium.org 415e2064011d36b2008099446503f28e64d445060ecjohannkoenig@chromium.org // This variable sets the encode_breakout threshold. Currently, it is only 416e2064011d36b2008099446503f28e64d445060ecjohannkoenig@chromium.org // enabled in real time mode. 417e2064011d36b2008099446503f28e64d445060ecjohannkoenig@chromium.org int encode_breakout_thresh; 418e2064011d36b2008099446503f28e64d445060ecjohannkoenig@chromium.org 419e2064011d36b2008099446503f28e64d445060ecjohannkoenig@chromium.org // In real time encoding, increase the threshold for NEWMV. 420e2064011d36b2008099446503f28e64d445060ecjohannkoenig@chromium.org int elevate_newmv_thresh; 421ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org 422ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org // default interp filter choice 423ac4e313c19203132648a2a271703b6ee76fe4284johannkoenig@chromium.org INTERP_FILTER default_interp_filter; 424ace65784417788374f0b19ce5a8abd06c9ccd007johannkoenig@chromium.org 425ace65784417788374f0b19ce5a8abd06c9ccd007johannkoenig@chromium.org // Early termination in transform size search, which only applies while 426ace65784417788374f0b19ce5a8abd06c9ccd007johannkoenig@chromium.org // tx_size_search_method is USE_FULL_RD. 427ace65784417788374f0b19ce5a8abd06c9ccd007johannkoenig@chromium.org int tx_size_search_breakout; 428d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org 429d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org // adaptive interp_filter search to allow skip of certain filter types. 430d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org int adaptive_interp_filter_search; 431d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org 432d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org // mask for skip evaluation of certain interp_filter type. 433d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org INTERP_FILTER_MASK interp_filter_search_mask; 434d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org 435d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org // Partition search early breakout thresholds. 436d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org int64_t partition_search_breakout_dist_thr; 437d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org int partition_search_breakout_rate_thr; 43893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org} SPEED_FEATURES; 43993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 44093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgstruct VP9_COMP; 44193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 44293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgvoid vp9_set_speed_features(struct VP9_COMP *cpi); 44393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 44493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org#ifdef __cplusplus 44593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org} // extern "C" 44693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org#endif 44793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 44893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org#endif // VP9_ENCODER_VP9_SPEED_FEATURES_H_ 44993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 450