15#ifndef AOM_AV1_ENCODER_ENCODER_H_
16#define AOM_AV1_ENCODER_ENCODER_H_
21#include "config/aom_config.h"
24#include "aom_util/aom_pthread.h"
26#include "av1/common/alloccommon.h"
27#include "av1/common/av1_common_int.h"
28#include "av1/common/blockd.h"
29#include "av1/common/entropymode.h"
31#include "av1/common/reconintra.h"
32#include "av1/common/resize.h"
33#include "av1/common/thread_common.h"
34#include "av1/common/timing.h"
36#include "av1/encoder/aq_cyclicrefresh.h"
37#include "av1/encoder/av1_quantize.h"
39#include "av1/encoder/context_tree.h"
40#include "av1/encoder/enc_enums.h"
41#include "av1/encoder/encodemb.h"
42#include "av1/encoder/external_partition.h"
43#include "av1/encoder/firstpass.h"
44#include "av1/encoder/global_motion.h"
45#include "av1/encoder/level.h"
47#include "av1/encoder/mcomp.h"
48#include "av1/encoder/pickcdef.h"
49#include "av1/encoder/ratectrl.h"
50#include "av1/encoder/rd.h"
52#include "av1/encoder/svc_layercontext.h"
53#include "av1/encoder/temporal_filter.h"
55#include "av1/encoder/thirdpass.h"
57#include "av1/encoder/tokenize.h"
58#include "av1/encoder/tpl_model.h"
59#include "av1/encoder/av1_noise_estimate.h"
60#include "av1/encoder/bitstream.h"
62#if CONFIG_INTERNAL_STATS
63#include "aom_dsp/ssim.h"
65#include "aom_dsp/variance.h"
67#include "aom_dsp/noise_model.h"
70#include "av1/encoder/tune_vmaf.h"
72#if CONFIG_AV1_TEMPORAL_DENOISING
73#include "av1/encoder/av1_temporal_denoiser.h"
75#if CONFIG_TUNE_BUTTERAUGLI
76#include "av1/encoder/tune_butteraugli.h"
79#include "aom/internal/aom_codec_internal.h"
89#define SCENE_CUT_KEY_TEST_INTERVAL 16
92#define TF_LOOKAHEAD_IDX_THR 7
94#define HDR_QP_LEVELS 10
95#define CHROMA_CB_QP_SCALE 1.04
96#define CHROMA_CR_QP_SCALE 1.04
97#define CHROMA_QP_SCALE -0.46
98#define CHROMA_QP_OFFSET 9.26
99#define QP_SCALE_FACTOR 2.0
100#define DISABLE_HDR_LUMA_DELTAQ 1
104typedef struct aom_rational64 {
121 FRAMEFLAGS_KEY = 1 << 0,
122 FRAMEFLAGS_GOLDEN = 1 << 1,
123 FRAMEFLAGS_BWDREF = 1 << 2,
125 FRAMEFLAGS_ALTREF = 1 << 3,
126 FRAMEFLAGS_INTRAONLY = 1 << 4,
127 FRAMEFLAGS_SWITCH = 1 << 5,
128 FRAMEFLAGS_ERROR_RESILIENT = 1 << 6,
129} UENUM1BYTE(FRAMETYPE_FLAGS);
134 PARALLEL_SIMULATION_ENCODE,
135 NUM_FPMT_TEST_ENCODES
136} UENUM1BYTE(FPMT_TEST_ENC_CFG);
140#define MIN_PYR_LEVEL 1
141static inline int get_true_pyr_level(
int frame_level,
int frame_order,
142 int max_layer_depth) {
143 if (frame_order == 0) {
145 return MIN_PYR_LEVEL;
146 }
else if (frame_level == MAX_ARF_LAYERS) {
148 return max_layer_depth;
149 }
else if (frame_level == (MAX_ARF_LAYERS + 1)) {
151 return MIN_PYR_LEVEL;
153 return AOMMAX(MIN_PYR_LEVEL, frame_level);
160 CYCLIC_REFRESH_AQ = 3,
162} UENUM1BYTE(AQ_MODE);
165 DELTA_Q_OBJECTIVE = 1,
166 DELTA_Q_PERCEPTUAL = 2,
167 DELTA_Q_PERCEPTUAL_AI = 3,
168 DELTA_Q_USER_RATING_BASED = 4,
170 DELTA_Q_VARIANCE_BOOST =
173} UENUM1BYTE(DELTAQ_MODE);
181} UENUM1BYTE(RESIZE_MODE);
185 SS_CFG_LOOKAHEAD = 1,
188} UENUM1BYTE(SS_CFG_OFFSET);
192 ENABLE_SCENECUT_MODE_1,
193 ENABLE_SCENECUT_MODE_2
194} UENUM1BYTE(SCENECUT_MODE);
196#define MAX_VBR_CORPUS_COMPLEXITY 10000
212} MULTI_THREADED_MODULES;
246 SKIP_APPLY_RESTORATION = 1 << 0,
247 SKIP_APPLY_SUPERRES = 1 << 1,
248 SKIP_APPLY_CDEF = 1 << 2,
249 SKIP_APPLY_LOOPFILTER = 1 << 3,
645 int gf_min_pyr_height;
647 int gf_max_pyr_height;
649 bool enable_auto_arf;
652 bool enable_auto_brf;
657 unsigned int num_tile_groups;
666 int tile_width_count;
668 int tile_height_count;
670 int tile_widths[MAX_TILE_COLS];
672 int tile_heights[MAX_TILE_ROWS];
674 bool enable_large_scale_tile;
676 bool enable_single_tile_decoding;
678 bool enable_ext_tile_debug;
688 int forced_max_frame_width;
691 int forced_max_frame_height;
702 bool enable_warped_motion;
704 bool allow_warped_motion;
711 aom_timing_info_t timing_info;
713 uint32_t num_units_in_decoding_tick;
716 bool decoder_model_info_present_flag;
719 bool display_model_info_present_flag;
721 bool timing_info_present;
737 unsigned int max_reference_frames;
739 bool enable_reduced_reference_set;
741 bool enable_onesided_comp;
759 unsigned int motion_vector_unit_test;
761 unsigned int sb_multipass_unit_test;
766 const char *vmaf_model_path;
768 const char *film_grain_table_filename;
774 int film_grain_test_vector;
781 double init_framerate;
783 unsigned int input_bit_depth;
787 unsigned int chroma_subsampling_x;
789 unsigned int chroma_subsampling_y;
796 int use_fixed_qp_offsets;
806 DELTAQ_MODE deltaq_mode;
808 unsigned int deltaq_strength;
810 bool enable_chroma_deltaq;
812 bool enable_hdr_deltaq;
907 bool enable_deltalf_mode;
909 CDEF_CONTROL cdef_control;
911 bool enable_restoration;
913 bool force_video_mode;
915 bool error_resilient_mode;
917 bool frame_parallel_decoding_mode;
919 bool enable_monochrome;
922 bool full_still_picture_hdr;
924 bool enable_dual_filter;
926 bool enable_order_hint;
928 bool ref_frame_mvs_present;
930 bool enable_ref_frame_mvs;
932 bool enable_interintra_comp;
934 bool enable_global_motion;
949 FrameDimensionCfg frm_dim_cfg;
969 QuantizationCfg q_cfg;
1001 DecoderModelCfg dec_model_cfg;
1004 RefFrameCfg ref_frm_cfg;
1007 UnitTestCfg unit_test_cfg;
1010 MotionModeCfg motion_mode_cfg;
1025 CostUpdateFreq cost_upd_freq;
1031 int noise_block_size;
1033 int enable_dnl_denoising;
1036#if CONFIG_AV1_TEMPORAL_DENOISING
1038 int noise_sensitivity;
1042 unsigned int tier_mask;
1046 int border_in_pixels;
1055 unsigned int enable_low_complexity_decode;
1058 AV1_LEVEL target_seq_level_idx[MAX_NUM_OPERATING_POINTS];
1061 BITSTREAM_PROFILE profile;
1078 const char *two_pass_output;
1081 const char *second_pass_log;
1094 bool use_highbitdepth;
1099 bool save_as_annexb;
1103 const char *partition_info_path;
1108 unsigned int enable_rate_guide_deltaq;
1112 const char *rate_distribution_info;
1115 int strict_level_conformance;
1118 int kf_max_pyr_height;
1126static inline int is_lossless_requested(
const RateControlCfg *
const rc_cfg) {
1164 [SWITCHABLE_FILTERS];
1169typedef struct FRAME_COUNTS {
1172#if CONFIG_ENTROPY_STATS
1173 unsigned int kf_y_mode[KF_MODE_CONTEXTS][KF_MODE_CONTEXTS][INTRA_MODES];
1174 unsigned int angle_delta[DIRECTIONAL_MODES][2 * MAX_ANGLE_DELTA + 1];
1175 unsigned int y_mode[BLOCK_SIZE_GROUPS][INTRA_MODES];
1176 unsigned int uv_mode[CFL_ALLOWED_TYPES][INTRA_MODES][UV_INTRA_MODES];
1177 unsigned int cfl_sign[CFL_JOINT_SIGNS];
1178 unsigned int cfl_alpha[CFL_ALPHA_CONTEXTS][CFL_ALPHABET_SIZE];
1179 unsigned int palette_y_mode[PALATTE_BSIZE_CTXS][PALETTE_Y_MODE_CONTEXTS][2];
1180 unsigned int palette_uv_mode[PALETTE_UV_MODE_CONTEXTS][2];
1181 unsigned int palette_y_size[PALATTE_BSIZE_CTXS][PALETTE_SIZES];
1182 unsigned int palette_uv_size[PALATTE_BSIZE_CTXS][PALETTE_SIZES];
1183 unsigned int palette_y_color_index[PALETTE_SIZES]
1184 [PALETTE_COLOR_INDEX_CONTEXTS]
1186 unsigned int palette_uv_color_index[PALETTE_SIZES]
1187 [PALETTE_COLOR_INDEX_CONTEXTS]
1189 unsigned int partition[PARTITION_CONTEXTS][EXT_PARTITION_TYPES];
1190 unsigned int txb_skip[TOKEN_CDF_Q_CTXS][TX_SIZES][TXB_SKIP_CONTEXTS][2];
1191 unsigned int eob_extra[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1192 [EOB_COEF_CONTEXTS][2];
1193 unsigned int dc_sign[PLANE_TYPES][DC_SIGN_CONTEXTS][2];
1194 unsigned int coeff_lps[TX_SIZES][PLANE_TYPES][BR_CDF_SIZE - 1][LEVEL_CONTEXTS]
1196 unsigned int eob_flag[TX_SIZES][PLANE_TYPES][EOB_COEF_CONTEXTS][2];
1197 unsigned int eob_multi16[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][5];
1198 unsigned int eob_multi32[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][6];
1199 unsigned int eob_multi64[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][7];
1200 unsigned int eob_multi128[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][8];
1201 unsigned int eob_multi256[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][9];
1202 unsigned int eob_multi512[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][10];
1203 unsigned int eob_multi1024[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][11];
1204 unsigned int coeff_lps_multi[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1205 [LEVEL_CONTEXTS][BR_CDF_SIZE];
1206 unsigned int coeff_base_multi[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1207 [SIG_COEF_CONTEXTS][NUM_BASE_LEVELS + 2];
1208 unsigned int coeff_base_eob_multi[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1209 [SIG_COEF_CONTEXTS_EOB][NUM_BASE_LEVELS + 1];
1210 unsigned int newmv_mode[NEWMV_MODE_CONTEXTS][2];
1211 unsigned int zeromv_mode[GLOBALMV_MODE_CONTEXTS][2];
1212 unsigned int refmv_mode[REFMV_MODE_CONTEXTS][2];
1213 unsigned int drl_mode[DRL_MODE_CONTEXTS][2];
1214 unsigned int inter_compound_mode[INTER_MODE_CONTEXTS][INTER_COMPOUND_MODES];
1215 unsigned int wedge_idx[BLOCK_SIZES_ALL][16];
1216 unsigned int interintra[BLOCK_SIZE_GROUPS][2];
1217 unsigned int interintra_mode[BLOCK_SIZE_GROUPS][INTERINTRA_MODES];
1218 unsigned int wedge_interintra[BLOCK_SIZES_ALL][2];
1219 unsigned int compound_type[BLOCK_SIZES_ALL][MASKED_COMPOUND_TYPES];
1220 unsigned int motion_mode[BLOCK_SIZES_ALL][MOTION_MODES];
1221 unsigned int obmc[BLOCK_SIZES_ALL][2];
1222 unsigned int intra_inter[INTRA_INTER_CONTEXTS][2];
1223 unsigned int comp_inter[COMP_INTER_CONTEXTS][2];
1224 unsigned int comp_ref_type[COMP_REF_TYPE_CONTEXTS][2];
1225 unsigned int uni_comp_ref[UNI_COMP_REF_CONTEXTS][UNIDIR_COMP_REFS - 1][2];
1226 unsigned int single_ref[REF_CONTEXTS][SINGLE_REFS - 1][2];
1227 unsigned int comp_ref[REF_CONTEXTS][FWD_REFS - 1][2];
1228 unsigned int comp_bwdref[REF_CONTEXTS][BWD_REFS - 1][2];
1229 unsigned int intrabc[2];
1231 unsigned int txfm_partition[TXFM_PARTITION_CONTEXTS][2];
1232 unsigned int intra_tx_size[MAX_TX_CATS][TX_SIZE_CONTEXTS][MAX_TX_DEPTH + 1];
1233 unsigned int skip_mode[SKIP_MODE_CONTEXTS][2];
1234 unsigned int skip_txfm[SKIP_CONTEXTS][2];
1235 unsigned int compound_index[COMP_INDEX_CONTEXTS][2];
1236 unsigned int comp_group_idx[COMP_GROUP_IDX_CONTEXTS][2];
1237 unsigned int delta_q[DELTA_Q_PROBS][2];
1238 unsigned int delta_lf_multi[FRAME_LF_COUNT][DELTA_LF_PROBS][2];
1239 unsigned int delta_lf[DELTA_LF_PROBS][2];
1241 unsigned int inter_ext_tx[EXT_TX_SETS_INTER][EXT_TX_SIZES][TX_TYPES];
1242 unsigned int intra_ext_tx[EXT_TX_SETS_INTRA][EXT_TX_SIZES][INTRA_MODES]
1244 unsigned int filter_intra_mode[FILTER_INTRA_MODES];
1245 unsigned int filter_intra[BLOCK_SIZES_ALL][2];
1247 unsigned int wiener_restore[2];
1248 unsigned int sgrproj_restore[2];
1251 unsigned int switchable_interp[SWITCHABLE_FILTER_CONTEXTS]
1252 [SWITCHABLE_FILTERS];
1255#define INTER_MODE_RD_DATA_OVERALL_SIZE 6400
1264 double sse_sse_mean;
1280#define MAX_INTER_MODES 1024
1338 uint32_t sum_square_error;
1351 VPVariance part_variances;
1356 VPVariance part_variances;
1361 VPVariance part_variances;
1366 VPVariance part_variances;
1371 VPVariance part_variances;
1376 VPVariance part_variances;
1407#if CONFIG_MULTITHREAD
1453typedef struct TileDataEnc {
1455 DECLARE_ALIGNED(16, FRAME_CONTEXT, tctx);
1456 FRAME_CONTEXT *row_ctx;
1457 uint64_t abs_sum_level;
1458 uint8_t allow_update_cdf;
1459 InterModeRdModel inter_mode_rd_models[BLOCK_SIZES_ALL];
1461 MV firstpass_top_mv;
1464typedef struct RD_COUNTS {
1465 int compound_ref_used_flag;
1466 int skip_mode_used_flag;
1467 int tx_type_used[TX_SIZES_ALL][TX_TYPES];
1468 int obmc_used[BLOCK_SIZES_ALL][2];
1470 int newmv_or_intra_blocks;
1471 uint64_t seg_tmp_pred_cost[2];
1474typedef struct ThreadData {
1476 MvCosts *mv_costs_alloc;
1477 IntraBCMVCosts *dv_costs_alloc;
1478 RD_COUNTS rd_counts;
1479 FRAME_COUNTS *counts;
1480 PC_TREE_SHARED_BUFFERS shared_coeff_buf;
1481 SIMPLE_MOTION_DATA_TREE *sms_tree;
1482 SIMPLE_MOTION_DATA_TREE *sms_root;
1484 uint32_t *hash_value_buffer[2];
1485 OBMCBuffer obmc_buffer;
1486 PALETTE_BUFFER *palette_buffer;
1487 CompoundTypeRdBuffers comp_rd_buffer;
1488 CONV_BUF_TYPE *tmp_conv_dst;
1489 uint64_t abs_sum_level;
1490 uint8_t *tmp_pred_bufs[2];
1491 uint8_t *wiener_tmp_pred_buf;
1494 int coefficient_size;
1495 int max_mv_magnitude;
1496 int interp_filter_selected[SWITCHABLE];
1497 FRAME_CONTEXT *tctx;
1499 int32_t num_64x64_blocks;
1500 PICK_MODE_CONTEXT *firstpass_ctx;
1501 TemporalFilterData tf_data;
1502 TplBuffers tpl_tmp_buffers;
1503 TplTxfmStats tpl_txfm_stats;
1504 GlobalMotionData gm_data;
1508 PixelLevelGradientInfo *pixel_gradient_info;
1513 Block4x4VarInfo *src_var_info_of_4x4_sub_blocks;
1518struct EncWorkerData;
1586#if CONFIG_MULTITHREAD
1616#if CONFIG_MULTITHREAD
1645#define NUM_RECODES_PER_FRAME 10
1650#define MAX_PARALLEL_FRAMES 4
1865typedef struct ActiveMap {
1894#if CONFIG_INTERNAL_STATS
1902} UENUM1BYTE(StatType);
1904typedef struct IMAGE_STAT {
1905 double stat[NUM_STAT_TYPES];
1912 YV12_BUFFER_CONFIG buf;
1940#if CONFIG_COLLECT_PARTITION_STATS
1941typedef struct FramePartitionTimingStats {
1942 int partition_decisions[6][EXT_PARTITION_TYPES];
1943 int partition_attempts[6][EXT_PARTITION_TYPES];
1944 int64_t partition_times[6][EXT_PARTITION_TYPES];
1947} FramePartitionTimingStats;
1950#if CONFIG_COLLECT_COMPONENT_TIMING
1951#include "aom_ports/aom_timer.h"
1954 av1_encode_strategy_time,
1955 av1_get_one_pass_rt_params_time,
1956 av1_get_second_pass_params_time,
1957 denoise_and_encode_time,
1958 apply_filtering_time,
1959 av1_tpl_setup_stats_time,
1960 encode_frame_to_data_rate_time,
1961 encode_with_or_without_recode_time,
1964 loop_restoration_time,
1965 av1_pack_bitstream_final_time,
1966 av1_encode_frame_time,
1967 av1_compute_global_motion_time,
1968 av1_setup_motion_field_time,
1971 rd_pick_partition_time,
1972 rd_use_partition_time,
1973 choose_var_based_partitioning_time,
1974 av1_prune_partitions_time,
1975 none_partition_search_time,
1976 split_partition_search_time,
1977 rectangular_partition_search_time,
1978 ab_partitions_search_time,
1979 rd_pick_4partition_time,
1982 rd_pick_sb_modes_time,
1983 av1_rd_pick_intra_mode_sb_time,
1984 av1_rd_pick_inter_mode_sb_time,
1985 set_params_rd_pick_inter_mode_time,
1986 skip_inter_mode_time,
1987 handle_inter_mode_time,
1988 evaluate_motion_mode_for_winner_candidates_time,
1990 handle_intra_mode_time,
1991 refine_winner_mode_tx_time,
1992 av1_search_palette_mode_time,
1994 compound_type_rd_time,
1995 interpolation_filter_search_time,
1996 motion_mode_rd_time,
1998 nonrd_use_partition_time,
1999 pick_sb_modes_nonrd_time,
2000 hybrid_intra_mode_search_time,
2001 nonrd_pick_inter_mode_sb_time,
2002 encode_b_nonrd_time,
2005} UENUM1BYTE(TIMING_COMPONENT);
2007static inline char const *get_component_name(
int index) {
2009 case av1_encode_strategy_time:
return "av1_encode_strategy_time";
2010 case av1_get_one_pass_rt_params_time:
2011 return "av1_get_one_pass_rt_params_time";
2012 case av1_get_second_pass_params_time:
2013 return "av1_get_second_pass_params_time";
2014 case denoise_and_encode_time:
return "denoise_and_encode_time";
2015 case apply_filtering_time:
return "apply_filtering_time";
2016 case av1_tpl_setup_stats_time:
return "av1_tpl_setup_stats_time";
2017 case encode_frame_to_data_rate_time:
2018 return "encode_frame_to_data_rate_time";
2019 case encode_with_or_without_recode_time:
2020 return "encode_with_or_without_recode_time";
2021 case loop_filter_time:
return "loop_filter_time";
2022 case cdef_time:
return "cdef_time";
2023 case loop_restoration_time:
return "loop_restoration_time";
2024 case av1_pack_bitstream_final_time:
return "av1_pack_bitstream_final_time";
2025 case av1_encode_frame_time:
return "av1_encode_frame_time";
2026 case av1_compute_global_motion_time:
2027 return "av1_compute_global_motion_time";
2028 case av1_setup_motion_field_time:
return "av1_setup_motion_field_time";
2029 case encode_sb_row_time:
return "encode_sb_row_time";
2031 case rd_pick_partition_time:
return "rd_pick_partition_time";
2032 case rd_use_partition_time:
return "rd_use_partition_time";
2033 case choose_var_based_partitioning_time:
2034 return "choose_var_based_partitioning_time";
2035 case av1_prune_partitions_time:
return "av1_prune_partitions_time";
2036 case none_partition_search_time:
return "none_partition_search_time";
2037 case split_partition_search_time:
return "split_partition_search_time";
2038 case rectangular_partition_search_time:
2039 return "rectangular_partition_search_time";
2040 case ab_partitions_search_time:
return "ab_partitions_search_time";
2041 case rd_pick_4partition_time:
return "rd_pick_4partition_time";
2042 case encode_sb_time:
return "encode_sb_time";
2044 case rd_pick_sb_modes_time:
return "rd_pick_sb_modes_time";
2045 case av1_rd_pick_intra_mode_sb_time:
2046 return "av1_rd_pick_intra_mode_sb_time";
2047 case av1_rd_pick_inter_mode_sb_time:
2048 return "av1_rd_pick_inter_mode_sb_time";
2049 case set_params_rd_pick_inter_mode_time:
2050 return "set_params_rd_pick_inter_mode_time";
2051 case skip_inter_mode_time:
return "skip_inter_mode_time";
2052 case handle_inter_mode_time:
return "handle_inter_mode_time";
2053 case evaluate_motion_mode_for_winner_candidates_time:
2054 return "evaluate_motion_mode_for_winner_candidates_time";
2055 case do_tx_search_time:
return "do_tx_search_time";
2056 case handle_intra_mode_time:
return "handle_intra_mode_time";
2057 case refine_winner_mode_tx_time:
return "refine_winner_mode_tx_time";
2058 case av1_search_palette_mode_time:
return "av1_search_palette_mode_time";
2059 case handle_newmv_time:
return "handle_newmv_time";
2060 case compound_type_rd_time:
return "compound_type_rd_time";
2061 case interpolation_filter_search_time:
2062 return "interpolation_filter_search_time";
2063 case motion_mode_rd_time:
return "motion_mode_rd_time";
2065 case nonrd_use_partition_time:
return "nonrd_use_partition_time";
2066 case pick_sb_modes_nonrd_time:
return "pick_sb_modes_nonrd_time";
2067 case hybrid_intra_mode_search_time:
return "hybrid_intra_mode_search_time";
2068 case nonrd_pick_inter_mode_sb_time:
return "nonrd_pick_inter_mode_sb_time";
2069 case encode_b_nonrd_time:
return "encode_b_nonrd_time";
2078#define MAX_INTERNAL_ARFS (REF_FRAMES - BWDREF_FRAME - 1)
2353 int mv_joint_count[4];
2355 int last_bit_nonzero;
2359 int hp_total_mv_rate;
2360 int lp_total_mv_rate;
2371typedef struct WeberStats {
2372 int64_t mb_wiener_variance;
2373 int64_t src_variance;
2374 int64_t rec_variance;
2375 int16_t src_pix_max;
2376 int16_t rec_pix_max;
2383 struct loopfilter lf;
2385 YV12_BUFFER_CONFIG copy_buffer;
2407 int show_frame_count;
2467#if !CONFIG_REALTIME_ONLY
2471 DUCKY_ENCODE_FRAME_MODE_NONE,
2472 DUCKY_ENCODE_FRAME_MODE_QINDEX,
2474 DUCKY_ENCODE_FRAME_MODE_QINDEX_RDMULT,
2476} UENUM1BYTE(DUCKY_ENCODE_FRAME_MODE);
2479 DUCKY_ENCODE_GOP_MODE_NONE,
2480 DUCKY_ENCODE_GOP_MODE_RCL,
2481} UENUM1BYTE(DUCKY_ENCODE_GOP_MODE);
2483typedef struct DuckyEncodeFrameInfo {
2484 DUCKY_ENCODE_FRAME_MODE qp_mode;
2485 DUCKY_ENCODE_GOP_MODE gop_mode;
2489 int *superblock_encode_qindex;
2490 int *superblock_encode_rdmult;
2491 int delta_q_enabled;
2492} DuckyEncodeFrameInfo;
2494typedef struct DuckyEncodeFrameResult {
2495 int global_order_idx;
2501} DuckyEncodeFrameResult;
2503typedef struct DuckyEncodeInfo {
2504 DuckyEncodeFrameInfo frame_info;
2505 DuckyEncodeFrameResult frame_result;
2511typedef struct RTC_REF {
2516 int reference[INTER_REFS_PER_FRAME];
2517 int ref_idx[INTER_REFS_PER_FRAME];
2518 int refresh[REF_FRAMES];
2519 int set_ref_frame_config;
2520 int non_reference_frame;
2521 int ref_frame_comp[3];
2526 unsigned int buffer_time_index[REF_FRAMES];
2530 unsigned char buffer_spatial_layer[REF_FRAMES];
2534 bool reference_was_previous_frame;
2539 bool bias_recovery_frame;
2613 FPMT_TEST_ENC_CFG fpmt_unit_test_cfg;
2631 int temp_valid_gm_model_found[FRAME_UPDATE_TYPES];
2793 aom_variance_fn_ptr_t
fn_ptr[BLOCK_SIZES_ALL];
2811#if CONFIG_INTERNAL_STATS
2813 uint64_t total_time_receive_data;
2814 uint64_t total_time_compress_data;
2816 unsigned int total_mode_chosen_counts[MAX_MODES];
2819 uint64_t total_sq_error[2];
2820 uint64_t total_samples[2];
2823 double total_blockiness;
2824 double worst_blockiness;
2826 uint64_t total_bytes;
2827 double summed_quality;
2828 double summed_weights;
2829 double summed_quality_hbd;
2830 double summed_weights_hbd;
2831 unsigned int total_recode_hits;
2833 double worst_ssim_hbd;
2838 int b_calculate_blockiness;
2839 int b_calculate_consistency;
2841 double total_inconsistency;
2842 double worst_consistency;
2848#if CONFIG_ENTROPY_STATS
2852 FRAME_COUNTS aggregate_fc;
3156#if CONFIG_INTERNAL_STATS
3158 uint64_t time_compress_data;
3160 unsigned int mode_chosen_counts[MAX_MODES];
3162 unsigned int frame_recode_hits;
3166#if CONFIG_SPEED_STATS
3170 unsigned int tx_search_count;
3294 double temp_framerate;
3375#if CONFIG_COLLECT_PARTITION_STATS
3379 FramePartitionTimingStats partition_stats;
3382#if CONFIG_COLLECT_COMPONENT_TIMING
3386 uint64_t component_time[kTimingComponents];
3391 struct aom_usec_timer component_timer[kTimingComponents];
3395 uint64_t frame_component_time[kTimingComponents];
3424 TuneVMAFInfo vmaf_info;
3427#if CONFIG_TUNE_BUTTERAUGLI
3431 TuneButteraugliInfo butteraugli_info;
3472#if CONFIG_AV1_TEMPORAL_DENOISING
3476 AV1_DENOISER denoiser;
3551#if CONFIG_RD_COMMAND
3555 RD_COMMAND rd_command;
3600#if CONFIG_BITRATE_ACCURACY
3604 VBR_RATECTRL_INFO vbr_rc_info;
3607#if CONFIG_RATECTRL_LOG
3611 RATECTRL_LOG rc_log;
3619#if CONFIG_THREE_PASS
3623 THIRD_PASS_DEC_CTX *third_pass_ctx;
3649#if !CONFIG_REALTIME_ONLY
3672#if CONFIG_SALIENCY_MAP
3676 uint8_t *saliency_map;
3681 double *sm_scaling_factor;
3707 YV12_BUFFER_CONFIG *source;
3708 YV12_BUFFER_CONFIG *last_source;
3709 int64_t ts_duration;
3728 int primary_ref_frame;
3738 int refresh_frame_flags;
3740 int show_existing_frame;
3741 int existing_fb_idx_to_show;
3768void av1_initialize_enc(
unsigned int usage,
enum aom_rc_mode end_usage);
3772 BufferPool *
const pool,
3773 COMPRESSOR_STAGE stage,
3774 int lap_lag_in_frames);
3777 struct aom_codec_pkt_list *pkt_list_head,
int num_lap_buffers,
3782void av1_remove_primary_compressor(
AV1_PRIMARY *ppi);
3784#if CONFIG_ENTROPY_STATS
3787#if CONFIG_INTERNAL_STATS
3792 bool *sb_size_changed);
3795 bool sb_size_changed);
3798 int subsampling_x,
int subsampling_y);
3803void av1_release_scaled_references_fpmt(
AV1_COMP *
cpi);
3805void av1_decrement_ref_counts_fpmt(BufferPool *buffer_pool,
3806 int ref_buffers_used_map);
3808void av1_init_sc_decisions(
AV1_PRIMARY *
const ppi);
3813int av1_init_parallel_frame_context(
const AV1_COMP_DATA *
const first_cpi_data,
3815 int *ref_buffers_used_map);
3836 const YV12_BUFFER_CONFIG *sd, int64_t time_stamp,
3837 int64_t end_time_stamp);
3871 size_t *
const frame_size);
3874int av1_get_preview_raw_frame(
AV1_COMP *
cpi, YV12_BUFFER_CONFIG *dest);
3876int av1_get_last_show_frame(
AV1_COMP *
cpi, YV12_BUFFER_CONFIG *frame);
3879 YV12_BUFFER_CONFIG *new_frame,
3880 YV12_BUFFER_CONFIG *sd);
3882int av1_use_as_reference(
int *ext_ref_frame_flags,
int ref_frame_flags);
3884int av1_copy_reference_enc(
AV1_COMP *
cpi,
int idx, YV12_BUFFER_CONFIG *sd);
3886int av1_set_reference_enc(
AV1_COMP *
cpi,
int idx, YV12_BUFFER_CONFIG *sd);
3888void av1_set_frame_size(
AV1_COMP *
cpi,
int width,
int height);
3892int av1_set_roi_map(
AV1_COMP *
cpi,
unsigned char *map,
unsigned int rows,
3893 unsigned int cols,
int delta_q[8],
int delta_lf[8],
3894 int skip[8],
int ref_frame[8]);
3896int av1_set_active_map(
AV1_COMP *
cpi,
unsigned char *map,
int rows,
int cols);
3898int av1_get_active_map(
AV1_COMP *
cpi,
unsigned char *map,
int rows,
int cols);
3909int av1_convert_sect5obus_to_annexb(uint8_t *buffer,
size_t buffer_size,
3910 size_t *input_size);
3912void av1_alloc_mb_wiener_var_pred_buf(AV1_COMMON *cm, ThreadData *td);
3914void av1_dealloc_mb_wiener_var_pred_buf(ThreadData *td);
3916uint8_t av1_find_dominant_value(
const uint8_t *src,
int stride,
int rows,
3919void av1_dilate_block(
const uint8_t *src,
int src_stride, uint8_t *dilated,
3920 int dilated_stride,
int rows,
int cols);
3933void av1_set_screen_content_options(
struct AV1_COMP *
cpi,
3938void av1_set_svc_seq_params(
AV1_PRIMARY *
const ppi);
3945static inline void init_ref_map_pair(
3946 AV1_COMP *cpi, RefFrameMapPair ref_frame_map_pairs[REF_FRAMES]) {
3948 memset(ref_frame_map_pairs, -1,
sizeof(*ref_frame_map_pairs) * REF_FRAMES);
3951 memset(ref_frame_map_pairs, 0,
sizeof(*ref_frame_map_pairs) * REF_FRAMES);
3952 for (
int map_idx = 0; map_idx < REF_FRAMES; map_idx++) {
3955 if (ref_frame_map_pairs[map_idx].disp_order == -1)
continue;
3957 ref_frame_map_pairs[map_idx].disp_order = -1;
3958 ref_frame_map_pairs[map_idx].pyr_level = -1;
3960 }
else if (buf->ref_count > 1) {
3966 for (
int idx2 = map_idx + 1; idx2 < REF_FRAMES; ++idx2) {
3969 ref_frame_map_pairs[idx2].disp_order = -1;
3970 ref_frame_map_pairs[idx2].pyr_level = -1;
3974 ref_frame_map_pairs[map_idx].disp_order = (int)buf->display_order_hint;
3975 ref_frame_map_pairs[map_idx].pyr_level = buf->pyramid_level;
3980static inline void calc_frame_data_update_flag(
3981 GF_GROUP *
const gf_group,
int gf_frame_index,
3982 bool *
const do_frame_data_update) {
3983 *do_frame_data_update =
true;
3986 if (gf_group->frame_parallel_level[gf_frame_index] == 1) {
3987 *do_frame_data_update =
false;
3988 }
else if (gf_group->frame_parallel_level[gf_frame_index] == 2) {
3990 for (
int i = gf_frame_index + 1; i < gf_group->size; i++) {
3991 if ((gf_group->frame_parallel_level[i] == 0 &&
3992 (gf_group->update_type[i] == ARF_UPDATE ||
3993 gf_group->update_type[i] == INTNL_ARF_UPDATE)) ||
3994 gf_group->frame_parallel_level[i] == 1) {
3996 }
else if (gf_group->frame_parallel_level[i] == 2) {
3997 *do_frame_data_update =
false;
4006#define TICKS_PER_SEC 10000000LL
4008static inline int64_t timebase_units_to_ticks(
4009 const aom_rational64_t *timestamp_ratio, int64_t n) {
4010 return n * timestamp_ratio->num / timestamp_ratio->den;
4013static inline int64_t ticks_to_timebase_units(
4014 const aom_rational64_t *timestamp_ratio, int64_t n) {
4015 int64_t round = timestamp_ratio->num / 2;
4016 if (round > 0) --round;
4017 return (n * timestamp_ratio->den + round) / timestamp_ratio->num;
4020static inline int frame_is_kf_gf_arf(
const AV1_COMP *cpi) {
4022 const FRAME_UPDATE_TYPE update_type =
4025 return frame_is_intra_only(&cpi->
common) || update_type == ARF_UPDATE ||
4026 update_type == GF_UPDATE;
4030static inline int av1_use_hash_me(
const AV1_COMP *
const cpi) {
4033 frame_is_intra_only(&cpi->
common));
4036static inline const YV12_BUFFER_CONFIG *get_ref_frame_yv12_buf(
4037 const AV1_COMMON *
const cm, MV_REFERENCE_FRAME ref_frame) {
4038 const RefCntBuffer *
const buf = get_ref_frame_buf(cm, ref_frame);
4039 return buf != NULL ? &buf->buf : NULL;
4042static inline void alloc_frame_mvs(AV1_COMMON *
const cm, RefCntBuffer *buf) {
4043 assert(buf != NULL);
4044 ensure_mv_buffer(buf, cm);
4045 buf->width = cm->
width;
4046 buf->height = cm->
height;
4051static inline unsigned int allocated_tokens(
const TileInfo *tile,
4052 int sb_size_log2,
int num_planes) {
4054 ROUND_POWER_OF_TWO(tile->mi_row_end - tile->mi_row_start, 2);
4056 ROUND_POWER_OF_TWO(tile->mi_col_end - tile->mi_col_start, 2);
4058 return get_token_alloc(tile_mb_rows, tile_mb_cols, sb_size_log2, num_planes);
4061static inline void get_start_tok(
AV1_COMP *cpi,
int tile_row,
int tile_col,
4062 int mi_row, TokenExtra **tok,
int sb_size_log2,
4064 AV1_COMMON *
const cm = &cpi->
common;
4066 TileDataEnc *this_tile = &cpi->
tile_data[tile_row * tile_cols + tile_col];
4067 const TileInfo *
const tile_info = &this_tile->tile_info;
4069 const int tile_mb_cols =
4070 (tile_info->mi_col_end - tile_info->mi_col_start + 2) >> 2;
4071 const int tile_mb_row = (mi_row - tile_info->mi_row_start + 2) >> 2;
4073 *tok = cpi->
token_info.tile_tok[tile_row][tile_col] +
4074 get_token_alloc(tile_mb_row, tile_mb_cols, sb_size_log2, num_planes);
4079#define ALT_MIN_LAG 3
4080static inline int is_altref_enabled(
int lag_in_frames,
bool enable_auto_arf) {
4081 return lag_in_frames >= ALT_MIN_LAG && enable_auto_arf;
4084static inline int can_disable_altref(
const GFConfig *gf_cfg) {
4085 return is_altref_enabled(gf_cfg->lag_in_frames, gf_cfg->enable_auto_arf) &&
4086 (gf_cfg->gf_min_pyr_height == 0);
4090static inline int get_num_blocks(
const int frame_length,
const int mb_length) {
4091 return (frame_length + mb_length - 1) / mb_length;
4095static inline int is_stat_generation_stage(
const AV1_COMP *
const cpi) {
4102static inline int is_stat_consumption_stage_twopass(
const AV1_COMP *
const cpi) {
4107static inline int is_stat_consumption_stage(
const AV1_COMP *
const cpi) {
4108 return (is_stat_consumption_stage_twopass(cpi) ||
4114static inline bool av1_need_dv_costs(
const AV1_COMP *
const cpi) {
4115 return !cpi->
sf.
rt_sf.use_nonrd_pick_mode &&
4116 av1_allow_intrabc(&cpi->
common) && !is_stat_generation_stage(cpi);
4136static inline int is_one_pass_rt_params(
const AV1_COMP *cpi) {
4138 (cpi->
oxcf.mode == REALTIME || cpi->
svc.number_spatial_layers > 1);
4142static inline int use_rtc_reference_structure_one_layer(
const AV1_COMP *cpi) {
4149static inline int allow_postencode_drop_rtc(
const AV1_COMP *cpi) {
4150 const AV1_COMMON *
const cm = &cpi->
common;
4153 !cpi->
rc.rtc_external_ratectrl && !frame_is_intra_only(cm) &&
4154 cpi->
svc.spatial_layer_id == 0;
4158static inline int get_stats_buf_size(
int num_lap_buffer,
int num_lag_buffer) {
4160 return (num_lap_buffer > 0 ? num_lap_buffer + 1 : num_lag_buffer);
4165static inline void set_ref_ptrs(
const AV1_COMMON *cm, MACROBLOCKD *xd,
4166 MV_REFERENCE_FRAME ref0,
4167 MV_REFERENCE_FRAME ref1) {
4169 get_ref_scale_factors_const(cm, ref0 >= LAST_FRAME ? ref0 : 1);
4171 get_ref_scale_factors_const(cm, ref1 >= LAST_FRAME ? ref1 : 1);
4174static inline int get_chessboard_index(
int frame_index) {
4175 return frame_index & 0x1;
4178static inline const int *cond_cost_list_const(
const struct AV1_COMP *cpi,
4179 const int *cost_list) {
4180 const int use_cost_list = cpi->
sf.
mv_sf.subpel_search_method != SUBPEL_TREE &&
4181 cpi->
sf.
mv_sf.use_fullpel_costlist;
4182 return use_cost_list ? cost_list : NULL;
4185static inline int *cond_cost_list(
const struct AV1_COMP *cpi,
int *cost_list) {
4186 const int use_cost_list = cpi->
sf.
mv_sf.subpel_search_method != SUBPEL_TREE &&
4187 cpi->
sf.
mv_sf.use_fullpel_costlist;
4188 return use_cost_list ? cost_list : NULL;
4192double av1_get_compression_ratio(
const AV1_COMMON *
const cm,
4193 size_t encoded_frame_size);
4195void av1_new_framerate(
AV1_COMP *cpi,
double framerate);
4197void av1_setup_frame_size(
AV1_COMP *cpi);
4199#define LAYER_IDS_TO_IDX(sl, tl, num_tl) ((sl) * (num_tl) + (tl))
4202static inline int av1_resize_scaled(
const AV1_COMMON *cm) {
4207static inline int av1_frame_scaled(
const AV1_COMMON *cm) {
4208 return av1_superres_scaled(cm) || av1_resize_scaled(cm);
4214static inline int encode_show_existing_frame(
const AV1_COMMON *cm) {
4221static inline int get_mi_ext_idx(
const int mi_row,
const int mi_col,
4222 const BLOCK_SIZE mi_alloc_bsize,
4223 const int mbmi_ext_stride) {
4224 const int mi_ext_size_1d = mi_size_wide[mi_alloc_bsize];
4225 const int mi_ext_row = mi_row / mi_ext_size_1d;
4226 const int mi_ext_col = mi_col / mi_ext_size_1d;
4227 return mi_ext_row * mbmi_ext_stride + mi_ext_col;
4232static inline void set_mode_info_offsets(
4235 MACROBLOCKD *
const xd,
int mi_row,
int mi_col) {
4236 set_mi_offsets(mi_params, xd, mi_row, mi_col);
4237 const int ext_idx = get_mi_ext_idx(mi_row, mi_col, mi_params->
mi_alloc_bsize,
4245static inline BLOCK_SIZE find_partition_size(BLOCK_SIZE bsize,
int rows_left,
4246 int cols_left,
int *bh,
int *bw) {
4247 int int_size = (int)bsize;
4248 if (rows_left <= 0 || cols_left <= 0) {
4249 return AOMMIN(bsize, BLOCK_8X8);
4251 for (; int_size > 0; int_size -= 3) {
4252 *bh = mi_size_high[int_size];
4253 *bw = mi_size_wide[int_size];
4254 if ((*bh <= rows_left) && (*bw <= cols_left)) {
4259 return (BLOCK_SIZE)int_size;
4262static const uint8_t av1_ref_frame_flag_list[REF_FRAMES] = { 0,
4273static const MV_REFERENCE_FRAME disable_order[] = {
4280static const MV_REFERENCE_FRAME
4281 ref_frame_priority_order[INTER_REFS_PER_FRAME] = {
4282 LAST_FRAME, ALTREF_FRAME, BWDREF_FRAME, GOLDEN_FRAME,
4283 ALTREF2_FRAME, LAST2_FRAME, LAST3_FRAME,
4286static inline int get_ref_frame_flags(
const SPEED_FEATURES *
const sf,
4287 const int use_one_pass_rt_params,
4288 const YV12_BUFFER_CONFIG **ref_frames,
4289 const int ext_ref_frame_flags) {
4294 int flags = ext_ref_frame_flags;
4296 for (
int i = 1; i < INTER_REFS_PER_FRAME; ++i) {
4297 const YV12_BUFFER_CONFIG *
const this_ref = ref_frames[i];
4302 (use_one_pass_rt_params && ref_frame_priority_order[i] == GOLDEN_FRAME)
4303 ? (1 + sf->
rt_sf.use_nonrd_altref_frame)
4305 for (
int j = 0; j < index; ++j) {
4309 if (this_ref == ref_frames[j] &&
4310 (flags & (1 << (ref_frame_priority_order[j] - 1)))) {
4311 flags &= ~(1 << (ref_frame_priority_order[i] - 1));
4330#define MAX_GFUBOOST_FACTOR 10.0
4331#define MIN_GFUBOOST_FACTOR 4.0
4333static inline int is_frame_tpl_eligible(
const GF_GROUP *
const gf_group,
4335 const FRAME_UPDATE_TYPE update_type = gf_group->update_type[index];
4336 return update_type == ARF_UPDATE || update_type == GF_UPDATE ||
4337 update_type == KF_UPDATE;
4340static inline int is_frame_eligible_for_ref_pruning(
const GF_GROUP *gf_group,
4341 int selective_ref_frame,
4342 int prune_ref_frames,
4344 return (selective_ref_frame > 0) && (prune_ref_frames > 0) &&
4345 !is_frame_tpl_eligible(gf_group, gf_index);
4349static inline FRAME_UPDATE_TYPE get_frame_update_type(
const GF_GROUP *gf_group,
4350 int gf_frame_index) {
4351 return gf_group->update_type[gf_frame_index];
4354static inline int av1_pixels_to_mi(
int pixels) {
4355 return ALIGN_POWER_OF_TWO(pixels, 3) >> MI_SIZE_LOG2;
4358static inline int is_psnr_calc_enabled(
const AV1_COMP *cpi) {
4359 const AV1_COMMON *
const cm = &cpi->
common;
4365static inline int is_frame_resize_pending(
const AV1_COMP *
const cpi) {
4368 return (resize_pending_params->
width && resize_pending_params->
height &&
4374static inline int is_loopfilter_used(
const AV1_COMMON *
const cm) {
4379static inline int is_cdef_used(
const AV1_COMMON *
const cm) {
4385static inline int is_restoration_used(
const AV1_COMMON *
const cm) {
4395static inline unsigned int derive_skip_apply_postproc_filters(
4396 const AV1_COMP *cpi,
int use_loopfilter,
int use_cdef,
int use_superres,
4397 int use_restoration) {
4404 return (SKIP_APPLY_LOOPFILTER | SKIP_APPLY_CDEF);
4408 assert(cpi->
oxcf.mode == ALLINTRA);
4417 if (use_restoration)
return SKIP_APPLY_RESTORATION;
4418 if (use_superres)
return SKIP_APPLY_SUPERRES;
4425 ? (SKIP_APPLY_LOOPFILTER | SKIP_APPLY_CDEF)
4428 if (use_loopfilter)
return SKIP_APPLY_LOOPFILTER;
4435static inline void set_postproc_filter_default_params(AV1_COMMON *cm) {
4436 struct loopfilter *
const lf = &cm->
lf;
4440 lf->filter_level[0] = 0;
4441 lf->filter_level[1] = 0;
4442 lf->backup_filter_level[0] = 0;
4443 lf->backup_filter_level[1] = 0;
4453static inline int is_inter_tx_size_search_level_one(
4454 const TX_SPEED_FEATURES *tx_sf) {
4455 return (tx_sf->inter_tx_size_search_init_depth_rect >= 1 &&
4456 tx_sf->inter_tx_size_search_init_depth_sqr >= 1);
4460 int lpf_opt_level = 0;
4461 if (is_inter_tx_size_search_level_one(&sf->
tx_sf))
4462 lpf_opt_level = (sf->
lpf_sf.lpf_pick == LPF_PICK_FROM_Q) ? 2 : 1;
4463 return lpf_opt_level;
4467static inline bool is_switchable_motion_mode_allowed(
bool allow_warped_motion,
4469 return (allow_warped_motion || enable_obmc);
4472#if CONFIG_AV1_TEMPORAL_DENOISING
4473static inline int denoise_svc(
const struct AV1_COMP *
const cpi) {
4476 cpi->
svc.spatial_layer_id >= cpi->
svc.first_layer_denoise));
4480#if CONFIG_COLLECT_PARTITION_STATS == 2
4481static inline void av1_print_fr_partition_timing_stats(
4482 const FramePartitionTimingStats *part_stats,
const char *filename) {
4483 FILE *f = fopen(filename,
"w");
4488 fprintf(f,
"bsize,redo,");
4489 for (
int part = 0; part < EXT_PARTITION_TYPES; part++) {
4490 fprintf(f,
"decision_%d,", part);
4492 for (
int part = 0; part < EXT_PARTITION_TYPES; part++) {
4493 fprintf(f,
"attempt_%d,", part);
4495 for (
int part = 0; part < EXT_PARTITION_TYPES; part++) {
4496 fprintf(f,
"time_%d,", part);
4500 static const int bsizes[6] = { 128, 64, 32, 16, 8, 4 };
4502 for (
int bsize_idx = 0; bsize_idx < 6; bsize_idx++) {
4503 fprintf(f,
"%d,%d,", bsizes[bsize_idx], part_stats->partition_redo);
4504 for (
int part = 0; part < EXT_PARTITION_TYPES; part++) {
4505 fprintf(f,
"%d,", part_stats->partition_decisions[bsize_idx][part]);
4507 for (
int part = 0; part < EXT_PARTITION_TYPES; part++) {
4508 fprintf(f,
"%d,", part_stats->partition_attempts[bsize_idx][part]);
4510 for (
int part = 0; part < EXT_PARTITION_TYPES; part++) {
4511 fprintf(f,
"%ld,", part_stats->partition_times[bsize_idx][part]);
4519#if CONFIG_COLLECT_PARTITION_STATS
4520static inline int av1_get_bsize_idx_for_part_stats(BLOCK_SIZE bsize) {
4521 assert(bsize == BLOCK_128X128 || bsize == BLOCK_64X64 ||
4522 bsize == BLOCK_32X32 || bsize == BLOCK_16X16 || bsize == BLOCK_8X8 ||
4523 bsize == BLOCK_4X4);
4525 case BLOCK_128X128:
return 0;
4526 case BLOCK_64X64:
return 1;
4527 case BLOCK_32X32:
return 2;
4528 case BLOCK_16X16:
return 3;
4529 case BLOCK_8X8:
return 4;
4530 case BLOCK_4X4:
return 5;
4531 default: assert(0 &&
"Invalid bsize for partition_stats.");
return -1;
4536#if CONFIG_COLLECT_COMPONENT_TIMING
4537static inline void start_timing(
AV1_COMP *cpi,
int component) {
4538 aom_usec_timer_start(&cpi->component_timer[component]);
4540static inline void end_timing(
AV1_COMP *cpi,
int component) {
4541 aom_usec_timer_mark(&cpi->component_timer[component]);
4542 cpi->frame_component_time[component] +=
4543 aom_usec_timer_elapsed(&cpi->component_timer[component]);
4545static inline char const *get_frame_type_enum(
int type) {
4547 case 0:
return "KEY_FRAME";
4548 case 1:
return "INTER_FRAME";
4549 case 2:
return "INTRA_ONLY_FRAME";
4550 case 3:
return "S_FRAME";
enum aom_chroma_sample_position aom_chroma_sample_position_t
List of chroma sample positions.
enum aom_transfer_characteristics aom_transfer_characteristics_t
List of supported transfer functions.
enum aom_color_range aom_color_range_t
List of supported color range.
enum aom_color_primaries aom_color_primaries_t
List of supported color primaries.
enum aom_matrix_coefficients aom_matrix_coefficients_t
List of supported matrix coefficients.
Provides definitions for using AOM or AV1 encoder algorithm within the aom Codec Interface.
struct macroblock MACROBLOCK
Encoder's parameters related to the current coding block.
COST_UPDATE_TYPE
This enum controls how often the entropy costs should be updated.
Definition encoder.h:222
@ COST_UPD_SBROW
Definition encoder.h:224
@ COST_UPD_TILE
Definition encoder.h:225
@ COST_UPD_OFF
Definition encoder.h:226
@ NUM_COST_UPDATE_TYPES
Definition encoder.h:227
@ COST_UPD_SB
Definition encoder.h:223
LOOPFILTER_CONTROL
This enum controls to which frames loopfilter is applied.
Definition encoder.h:233
@ LOOPFILTER_ALL
Definition encoder.h:235
@ LOOPFILTER_SELECTIVELY
Definition encoder.h:237
@ LOOPFILTER_REFERENCE
Definition encoder.h:236
@ LOOPFILTER_NONE
Definition encoder.h:234
#define NUM_RECODES_PER_FRAME
Max number of recodes used to track the frame probabilities.
Definition encoder.h:1645
struct inter_modes_info InterModesInfo
Struct used to hold inter mode data for fast tx search.
SKIP_APPLY_POSTPROC_FILTER
This enum controls the application of post-processing filters on a reconstructed frame.
Definition encoder.h:245
#define MAX_PARALLEL_FRAMES
Max number of frames that can be encoded in a parallel encode set.
Definition encoder.h:1650
RestorationType
This enumeration defines various restoration types supported.
Definition enums.h:609
@ RESTORE_NONE
Definition enums.h:610
@ RESTORE_SWITCHABLE_TYPES
Definition enums.h:614
@ RESTORE_TYPES
Definition enums.h:615
aom_dist_metric
Distortion metric to use for RD optimization.
Definition aomcx.h:1770
aom_tune_content
AV1 encoder content type.
Definition aomcx.h:1694
enum aom_scaling_mode_1d AOM_SCALING_MODE
aom 1-D scaling mode
aom_tune_metric
Model tuning parameters.
Definition aomcx.h:1737
struct aom_roi_map aom_roi_map_t
aom region of interest map
aom_screen_detection_mode
Screen content detection mode.
Definition aomcx.h:1702
enum aom_bit_depth aom_bit_depth_t
Bit depth for codecThis enumeration determines the bit depth of the codec.
enum aom_superblock_size aom_superblock_size_t
Superblock size selection.
aom_codec_err_t
Algorithm return codes.
Definition aom_codec.h:155
aom_superres_mode
Frame super-resolution mode.
Definition aom_encoder.h:207
aom_rc_mode
Rate control mode.
Definition aom_encoder.h:185
aom_enc_pass
Multi-pass Encoding Pass.
Definition aom_encoder.h:176
struct aom_fixed_buf aom_fixed_buf_t
Generic fixed size buffer structure.
long aom_enc_frame_flags_t
Encoded Frame Flags.
Definition aom_encoder.h:377
@ AOM_CBR
Definition aom_encoder.h:187
@ AOM_RC_ONE_PASS
Definition aom_encoder.h:177
@ AOM_RC_SECOND_PASS
Definition aom_encoder.h:179
@ AOM_RC_FIRST_PASS
Definition aom_encoder.h:178
int av1_get_compressed_data(AV1_COMP *cpi, AV1_COMP_DATA *const cpi_data)
Encode a frame.
Definition encoder.c:5180
int av1_encode(AV1_COMP *const cpi, uint8_t *const dest, size_t dest_size, const EncodeFrameInput *const frame_input, const EncodeFrameParams *const frame_params, size_t *const frame_size)
Run 1-pass/2-pass encoding.
Definition encoder.c:4472
int av1_receive_raw_frame(AV1_COMP *cpi, aom_enc_frame_flags_t frame_flags, const YV12_BUFFER_CONFIG *sd, int64_t time_stamp, int64_t end_time_stamp)
Obtain the raw frame data.
Definition encoder.c:4570
static int has_no_stats_stage(const AV1_COMP *const cpi)
Check if the current stage has statistics.
Definition encoder.h:4128
Describes look ahead buffer operations.
@ CDEF_PICK_FROM_Q
Definition speed_features.h:172
RestorationInfo rst_info[3]
Definition av1_common_int.h:960
int superres_upscaled_width
Definition av1_common_int.h:813
int superres_upscaled_height
Definition av1_common_int.h:814
SequenceHeader * seq_params
Definition av1_common_int.h:990
int width
Definition av1_common_int.h:789
CdefInfo cdef_info
Definition av1_common_int.h:969
CurrentFrame current_frame
Definition av1_common_int.h:768
int show_existing_frame
Definition av1_common_int.h:914
struct loopfilter lf
Definition av1_common_int.h:953
FeatureFlags features
Definition av1_common_int.h:919
int show_frame
Definition av1_common_int.h:899
RefCntBuffer * ref_frame_map[REF_FRAMES]
Definition av1_common_int.h:892
CommonTileParams tiles
Definition av1_common_int.h:1006
int height
Definition av1_common_int.h:790
int render_width
Definition av1_common_int.h:800
int render_height
Definition av1_common_int.h:801
Encoder data related to multi-threading for allintra deltaq-mode=3.
Definition encoder.h:1615
pthread_mutex_t * mutex_
Definition encoder.h:1620
void(* intra_sync_read_ptr)(AV1EncRowMultiThreadSync *const, int, int)
Definition encoder.h:1634
pthread_cond_t * cond_
Definition encoder.h:1624
void(* intra_sync_write_ptr)(AV1EncRowMultiThreadSync *const, int, int, int)
Definition encoder.h:1638
Encoder data related to row-based multi-threading.
Definition encoder.h:1525
int allocated_sb_rows
Definition encoder.h:1564
pthread_mutex_t * mutex_
Definition encoder.h:1590
int allocated_tile_cols
Definition encoder.h:1533
bool firstpass_mt_exit
Definition encoder.h:1577
int allocated_cols
Definition encoder.h:1547
int thread_id_to_tile_id[64]
Definition encoder.h:1552
bool mb_wiener_mt_exit
Definition encoder.h:1584
void(* sync_write_ptr)(AV1EncRowMultiThreadSync *const, int, int, int)
Definition encoder.h:1608
pthread_cond_t * cond_
Definition encoder.h:1594
bool row_mt_exit
Definition encoder.h:1570
int allocated_tile_rows
Definition encoder.h:1529
int allocated_rows
Definition encoder.h:1540
int * num_tile_cols_done
Definition encoder.h:1558
void(* sync_read_ptr)(AV1EncRowMultiThreadSync *const, int, int)
Definition encoder.h:1604
Encoder parameters for synchronization of row based multi-threading.
Definition encoder.h:1406
int rows
Definition encoder.h:1439
int sync_range
Definition encoder.h:1428
int intrabc_extra_top_right_sb_delay
Definition encoder.h:1435
int next_mi_row
Definition encoder.h:1443
int * num_finished_cols
Definition encoder.h:1421
pthread_mutex_t * mutex_
Definition encoder.h:1412
pthread_cond_t * cond_
Definition encoder.h:1413
int num_threads_working
Definition encoder.h:1447
Main encoder configuration data structure.
Definition encoder.h:943
RateControlCfg rc_cfg
Definition encoder.h:965
KeyFrameCfg kf_cfg
Definition encoder.h:960
enum aom_enc_pass pass
Definition encoder.h:1071
AlgoCfg algo_cfg
Definition encoder.h:955
aom_fixed_buf_t twopass_stats_in
Definition encoder.h:982
Structure to hold search parameter per restoration unit and intermediate buffer of Wiener filter used...
Definition encoder.h:1704
RestUnitSearchInfo * rusi[3]
Definition encoder.h:1709
int16_t * dgd_avg
Definition encoder.h:1714
Structure to hold data corresponding to an encoded frame.
Definition encoder.h:2546
int64_t ts_frame_end
Definition encoder.h:2575
int pop_lookahead
Definition encoder.h:2590
int64_t ts_frame_start
Definition encoder.h:2570
unsigned char * cx_data
Definition encoder.h:2550
size_t cx_data_sz
Definition encoder.h:2555
int flush
Definition encoder.h:2580
unsigned int lib_flags
Definition encoder.h:2565
size_t frame_size
Definition encoder.h:2560
const aom_rational64_t * timestamp_ratio
Definition encoder.h:2585
Top level encoder structure.
Definition encoder.h:2896
double * ext_rate_distribution
Definition encoder.h:3573
int do_update_frame_probs_warp[10]
Definition encoder.h:3282
uint8_t * consec_zero_mv
Definition encoder.h:3483
int do_update_frame_probs_obmc[10]
Definition encoder.h:3277
struct aom_denoise_and_model_t * denoise_and_model
Definition encoder.h:3350
int skip_tpl_setup_stats
Definition encoder.h:3004
int frames_since_last_update
Definition encoder.h:3659
int * mb_delta_q
Definition encoder.h:3593
int vaq_refresh
Definition encoder.h:3252
FRAME_TYPE last_frame_type
Definition encoder.h:3448
YV12_BUFFER_CONFIG * unscaled_source
Definition encoder.h:2972
int palette_pixel_num
Definition encoder.h:3688
CYCLIC_REFRESH * cyclic_refresh
Definition encoder.h:3144
RATE_CONTROL rc
Definition encoder.h:3103
int deltaq_used
Definition encoder.h:3406
ActiveMap active_map
Definition encoder.h:3149
bool frame_size_related_setup_done
Definition encoder.h:3215
WeberStats * mb_weber_stats
Definition encoder.h:3561
bool refresh_idx_available
Definition encoder.h:3526
TokenInfo token_info
Definition encoder.h:3247
int64_t ambient_err
Definition encoder.h:3072
aom_film_grain_table_t * film_grain_table
Definition encoder.h:3343
int ref_refresh_index
Definition encoder.h:3520
size_t available_bs_size
Definition encoder.h:3504
SPEED_FEATURES sf
Definition encoder.h:3123
TRELLIS_OPT_TYPE optimize_seg_arr[8]
Definition encoder.h:2950
ExtPartController ext_part_controller
Definition encoder.h:3510
FILE * second_pass_log_stream
Definition encoder.h:3629
double * ssim_rdmult_scaling_factors
Definition encoder.h:3418
RD_OPT rd
Definition encoder.h:3077
int data_alloc_height
Definition encoder.h:3201
int num_tg
Definition encoder.h:3453
WinnerModeParams winner_mode_params
Definition encoder.h:3093
ExternalFlags ext_flags
Definition encoder.h:3055
bool alloc_pyramid
Definition encoder.h:3670
EncSegmentationInfo enc_seg
Definition encoder.h:3139
MotionVectorSearchParams mv_search_params
Definition encoder.h:3128
int use_screen_content_tools
Definition encoder.h:3365
int do_update_frame_probs_interpfilter[10]
Definition encoder.h:3287
CODING_CONTEXT coding_context
Definition encoder.h:3083
TemporalFilterCtx tf_ctx
Definition encoder.h:3019
ForceIntegerMVInfo force_intpel_info
Definition encoder.h:3029
GlobalMotionInfo gm_info
Definition encoder.h:3088
int consec_zero_mv_alloc_size
Definition encoder.h:3488
CoeffBufferPool coeff_buffer_pool
Definition encoder.h:2934
FRAME_INDEX_SET frame_index_set
Definition encoder.h:3187
int ref_frame_flags
Definition encoder.h:3113
RefCntBuffer * scaled_ref_buf[INTER_REFS_PER_FRAME]
Definition encoder.h:3035
unsigned char gf_frame_index
Definition encoder.h:3154
AV1EncoderConfig oxcf
Definition encoder.h:2944
AV1_COMMON common
Definition encoder.h:2939
AV1LrStruct lr_ctxt
Definition encoder.h:3333
bool do_frame_data_update
Definition encoder.h:3549
CdefSearchCtx * cdef_search_ctx
Definition encoder.h:3024
int data_alloc_width
Definition encoder.h:3194
int do_update_frame_probs_txtype[10]
Definition encoder.h:3272
FRAME_COUNTS counts
Definition encoder.h:2916
COMPRESSOR_STAGE compressor_stage
Definition encoder.h:3442
int intrabc_used
Definition encoder.h:3323
int num_frame_recode
Definition encoder.h:3262
int rt_reduce_num_ref_buffers
Definition encoder.h:3050
RefreshFrameInfo refresh_frame
Definition encoder.h:3045
int prune_ref_frame_mask
Definition encoder.h:3328
YV12_BUFFER_CONFIG * unscaled_last_source
Definition encoder.h:2982
int all_one_sided_refs
Definition encoder.h:3134
MultiThreadInfo mt_info
Definition encoder.h:3311
VarBasedPartitionInfo vbp_info
Definition encoder.h:3257
int scaled_last_source_available
Definition encoder.h:3694
YV12_BUFFER_CONFIG * last_source
Definition encoder.h:2966
int existing_fb_idx_to_show
Definition encoder.h:3318
YV12_BUFFER_CONFIG * unfiltered_source
Definition encoder.h:2993
unsigned int zeromv_skip_thresh_exit_part[BLOCK_SIZES_ALL]
Definition encoder.h:3664
FRAME_INFO frame_info
Definition encoder.h:3182
int last_coded_height
Definition encoder.h:3227
int frame_header_count
Definition encoder.h:3401
int droppable
Definition encoder.h:3177
RefCntBuffer * last_show_frame_buf
Definition encoder.h:3040
aom_superres_mode superres_mode
Definition encoder.h:3460
MBMIExtFrameBufferInfo mbmi_ext_info
Definition encoder.h:2921
AV1LrPickStruct pick_lr_ctxt
Definition encoder.h:3338
double new_framerate
Definition encoder.h:3301
AV1_PRIMARY * ppi
Definition encoder.h:2900
uint64_t * src_sad_blk_64x64
Definition encoder.h:3634
int64_t norm_wiener_variance
Definition encoder.h:3588
double * tpl_rdmult_scaling_factors
Definition encoder.h:3014
int sb_counter
Definition encoder.h:3499
int last_coded_width
Definition encoder.h:3221
TileDataEnc * tile_data
Definition encoder.h:3238
int is_screen_content_type
Definition encoder.h:3373
BLOCK_SIZE weber_bsize
Definition encoder.h:3583
InterpSearchFlags interp_search_flags
Definition encoder.h:3356
TimeStamps time_stamps
Definition encoder.h:3098
aom_roi_map_t roi
Definition encoder.h:3699
int ref_idx_to_skip
Definition encoder.h:3533
YV12_BUFFER_CONFIG orig_source
Definition encoder.h:2999
FirstPassData firstpass_data
Definition encoder.h:3465
double framerate
Definition encoder.h:3108
int speed
Definition encoder.h:3118
BLOCK_SIZE fp_block_size
Definition encoder.h:3493
int use_ducky_encode
Definition encoder.h:3647
YV12_BUFFER_CONFIG trial_frame_rst
Definition encoder.h:3067
bool is_dropped_frame
Definition encoder.h:3598
ThreadData td
Definition encoder.h:2911
ResizePendingParams resize_pending_params
Definition encoder.h:3232
YV12_BUFFER_CONFIG scaled_source
Definition encoder.h:2977
int do_update_vbr_bits_off_target_fast
Definition encoder.h:3306
YV12_BUFFER_CONFIG last_frame_uf
Definition encoder.h:3061
EncQuantDequantParams enc_quant_dequant_params
Definition encoder.h:2906
RefFrameDistanceInfo ref_frame_dist_info
Definition encoder.h:3411
int * prep_rate_estimates
Definition encoder.h:3567
DuckyEncodeInfo ducky_encode_info
Definition encoder.h:3653
double ext_rate_scale
Definition encoder.h:3578
int initial_mbs
Definition encoder.h:3209
uint64_t rec_sse
Definition encoder.h:3641
YV12_BUFFER_CONFIG scaled_last_source
Definition encoder.h:2987
MV_STATS mv_stats
Definition encoder.h:3516
FrameProbInfo frame_new_probs[10]
Definition encoder.h:3267
YV12_BUFFER_CONFIG * source
Definition encoder.h:2957
int allocated_tiles
Definition encoder.h:3242
SVC svc
Definition encoder.h:3437
CB_COEFF_BUFFER * coeff_buffer_base
Definition encoder.h:2928
NOISE_ESTIMATE noise_estimate
Definition encoder.h:3470
TWO_PASS_FRAME twopass_frame
Definition encoder.h:3617
Top level primary encoder structure.
Definition encoder.h:2596
int num_fp_contexts
Definition encoder.h:2653
AV1EncRowMultiThreadSync intra_row_mt_sync
Definition encoder.h:2890
bool buffer_removal_time_present
Definition encoder.h:2771
int valid_gm_model_found[FRAME_UPDATE_TYPES]
Definition encoder.h:2879
struct aom_codec_pkt_list * output_pkt_list
Definition encoder.h:2701
int filter_level[2]
Definition encoder.h:2658
SequenceHeader seq_params
Definition encoder.h:2761
MV_STATS mv_stats
Definition encoder.h:2809
struct AV1_COMP * cpi
Definition encoder.h:2674
AV1LevelParams level_params
Definition encoder.h:2731
int internal_altref_allowed
Definition encoder.h:2706
RTC_REF rtc_ref
Definition encoder.h:2884
int b_calculate_psnr
Definition encoder.h:2736
PrimaryMultiThreadInfo p_mt_info
Definition encoder.h:2866
TEMPORAL_FILTER_INFO tf_info
Definition encoder.h:2756
TWO_PASS twopass
Definition encoder.h:2746
int frames_left
Definition encoder.h:2741
int64_t ts_start_last_show_frame
Definition encoder.h:2643
PRIMARY_RATE_CONTROL p_rc
Definition encoder.h:2751
int lap_enabled
Definition encoder.h:2726
FrameProbInfo frame_probs
Definition encoder.h:2871
int show_existing_alt_ref
Definition encoder.h:2711
int fb_of_context_type[REF_FRAMES]
Definition encoder.h:2861
int use_svc
Definition encoder.h:2766
double * tpl_sb_rdmult_scaling_factors
Definition encoder.h:2799
int filter_level_v
Definition encoder.h:2668
int filter_level_u
Definition encoder.h:2663
struct AV1_COMP * cpi_lap
Definition encoder.h:2679
struct AV1_COMP * parallel_cpi[4]
Definition encoder.h:2600
int64_t ts_end_last_show_frame
Definition encoder.h:2648
struct lookahead_ctx * lookahead
Definition encoder.h:2684
RefCntBuffer * ref_frame_map_copy[REF_FRAMES]
Definition encoder.h:2638
GF_STATE gf_state
Definition encoder.h:2721
aom_variance_fn_ptr_t fn_ptr[BLOCK_SIZES_ALL]
Definition encoder.h:2793
GF_GROUP gf_group
Definition encoder.h:2716
struct AV1_COMP_DATA parallel_frames_data[4 - 1]
Definition encoder.h:2606
TplParams tpl_data
Definition encoder.h:2804
unsigned int number_temporal_layers
Definition encoder.h:2776
unsigned int number_spatial_layers
Definition encoder.h:2781
int seq_params_locked
Definition encoder.h:2695
struct aom_internal_error_info error
Definition encoder.h:2786
Algorithm configuration parameters.
Definition encoder.h:821
int disable_trellis_quant
Definition encoder.h:848
int sharpness
Definition encoder.h:834
bool skip_postproc_filtering
Definition encoder.h:892
bool enable_adaptive_sharpness
Definition encoder.h:839
int arnr_max_frames
Definition encoder.h:853
aom_screen_detection_mode screen_detection_mode
Definition encoder.h:897
bool enable_tpl_model
Definition encoder.h:871
LOOPFILTER_CONTROL loopfilter_control
Definition encoder.h:886
uint8_t cdf_update_mode
Definition encoder.h:866
bool enable_overlay
Definition encoder.h:877
int arnr_strength
Definition encoder.h:858
Stores the transforms coefficients for the whole superblock.
Definition block.h:206
The stucture of CYCLIC_REFRESH.
Definition aq_cyclicrefresh.h:36
Parameters related to CDEF.
Definition av1_common_int.h:202
int cdef_bits
Number of CDEF strength values in bits.
Definition av1_common_int.h:224
int cdef_uv_strengths[16]
CDEF strength values for chroma.
Definition av1_common_int.h:222
int cdef_strengths[16]
CDEF strength values for luma.
Definition av1_common_int.h:220
int nb_cdef_strengths
Number of CDEF strength values.
Definition av1_common_int.h:218
Definition encoder.h:2452
uint8_t * entropy_ctx
Definition encoder.h:2464
tran_low_t * tcoeff
Definition encoder.h:2456
uint16_t * eobs
Definition encoder.h:2460
Params related to MB_MODE_INFO arrays and related info.
Definition av1_common_int.h:510
BLOCK_SIZE mi_alloc_bsize
Definition av1_common_int.h:559
int cols
Definition av1_common_int.h:437
unsigned int large_scale
Definition av1_common_int.h:497
Encoder flags for compound prediction modes.
Definition encoder.h:400
bool enable_masked_comp
Definition encoder.h:409
bool enable_diff_wtd_comp
Definition encoder.h:417
bool enable_smooth_interintra
Definition encoder.h:413
bool enable_interintra_wedge
Definition encoder.h:425
bool enable_interinter_wedge
Definition encoder.h:421
bool enable_dist_wtd_comp
Definition encoder.h:404
Segmentation related information for the current frame.
Definition encoder.h:2415
uint8_t * map
Definition encoder.h:2421
bool has_lossless_segment
Definition encoder.h:2427
contains per-frame encoding parameters decided upon by av1_encode_strategy() and passed down to av1_e...
Definition encoder.h:3717
int error_resilient_mode
Definition encoder.h:3721
int remapped_ref_idx[REF_FRAMES]
Definition encoder.h:3752
int ref_frame_flags
Definition encoder.h:3747
int speed
Definition encoder.h:3763
FRAME_TYPE frame_type
Definition encoder.h:3725
int show_frame
Definition encoder.h:3735
RefreshFrameInfo refresh_frame
Definition encoder.h:3758
Frame refresh flags set by the external interface.
Definition encoder.h:2282
bool golden_frame
Definition encoder.h:2284
bool bwd_ref_frame
Definition encoder.h:2285
bool update_pending
Definition encoder.h:2291
bool last_frame
Definition encoder.h:2283
bool alt_ref_frame
Definition encoder.h:2287
bool alt2_ref_frame
Definition encoder.h:2286
Flags signalled by the external interface at frame level.
Definition encoder.h:2297
bool use_primary_ref_none
Definition encoder.h:2338
bool use_ref_frame_mvs
Definition encoder.h:2322
ExtRefreshFrameFlagsInfo refresh_frame
Definition encoder.h:2306
int ref_frame_flags
Definition encoder.h:2301
bool use_error_resilient
Definition encoder.h:2327
bool use_s_frame
Definition encoder.h:2332
bool refresh_frame_context
Definition encoder.h:2311
bool refresh_frame_context_pending
Definition encoder.h:2317
Frame level features.
Definition av1_common_int.h:367
bool allow_screen_content_tools
Definition av1_common_int.h:384
bool allow_intrabc
Definition av1_common_int.h:385
bool coded_lossless
Definition av1_common_int.h:394
bool error_resilient_mode
Definition av1_common_int.h:409
bool all_lossless
Definition av1_common_int.h:398
Encoder info used for decision on forcing integer motion vectors.
Definition encoder.h:1876
double cs_rate_array[32]
Definition encoder.h:1881
int rate_size
Definition encoder.h:1889
int rate_index
Definition encoder.h:1885
Encoder-side probabilities for pruning of various AV1 tools.
Definition encoder.h:1134
int switchable_interp_probs[FRAME_UPDATE_TYPES][((SWITCHABLE_FILTERS+1) *4)][SWITCHABLE_FILTERS]
Definition encoder.h:1164
int obmc_probs[FRAME_UPDATE_TYPES][BLOCK_SIZES_ALL]
Definition encoder.h:1140
int warped_probs[FRAME_UPDATE_TYPES]
Definition encoder.h:1147
int tx_type_probs[FRAME_UPDATE_TYPES][TX_SIZES_ALL][TX_TYPES]
Definition encoder.h:1155
Data related to the current GF/ARF group and the individual frames within the group.
Definition firstpass.h:339
Parameters related to global motion search.
Definition encoder.h:2085
FrameDistPair reference_frames[2][REF_FRAMES - 1]
Definition encoder.h:2111
bool search_done
Definition encoder.h:2089
int segment_map_h
Definition encoder.h:2118
int num_ref_frames[2]
Definition encoder.h:2103
YV12_BUFFER_CONFIG * ref_buf[REF_FRAMES]
Definition encoder.h:2096
int segment_map_w
Definition encoder.h:2117
Flags related to interpolation filter search.
Definition encoder.h:2125
int default_interp_skip_flags
Definition encoder.h:2130
uint16_t interp_filter_search_mask
Definition encoder.h:2134
Encoder flags for intra prediction.
Definition encoder.h:303
bool enable_diagonal_intra
Definition encoder.h:333
bool enable_smooth_intra
Definition encoder.h:316
bool auto_intra_tools_off
Definition encoder.h:352
bool enable_filter_intra
Definition encoder.h:312
bool enable_directional_intra
Definition encoder.h:328
bool enable_paeth_intra
Definition encoder.h:320
bool enable_intra_edge_filter
Definition encoder.h:307
bool enable_cfl_intra
Definition encoder.h:324
bool enable_angle_delta
Definition encoder.h:338
Encoder config related to the coding of key frames.
Definition encoder.h:467
int key_freq_max
Definition encoder.h:476
int sframe_mode
Definition encoder.h:494
bool auto_key
Definition encoder.h:499
bool enable_intrabc
Definition encoder.h:519
int sframe_dist
Definition encoder.h:487
bool enable_sframe
Definition encoder.h:514
int enable_keyframe_filtering
Definition encoder.h:481
int fwd_kf_dist
Definition encoder.h:504
int key_freq_min
Definition encoder.h:471
bool fwd_kf_enabled
Definition encoder.h:509
Buffer to store mode information at mi_alloc_bsize (4x4 or 8x8) level.
Definition encoder.h:1922
int alloc_size
Definition encoder.h:1931
int stride
Definition encoder.h:1935
MB_MODE_INFO_EXT_FRAME * frame_base
Definition encoder.h:1927
Stores best extended mode information at frame level.
Definition block.h:242
Stores the prediction/txfm mode of the current coding block.
Definition blockd.h:222
Parameters for motion vector search process.
Definition encoder.h:2140
int max_mv_magnitude
Definition encoder.h:2146
fractional_mv_step_fp * find_fractional_mv_step
Definition encoder.h:2160
int mv_step_param
Definition encoder.h:2151
search_site_config search_site_cfg[SS_CFG_TOTAL][NUM_DISTINCT_SEARCH_METHODS]
Definition encoder.h:2167
Encoder parameters related to multi-threading.
Definition encoder.h:1767
RestoreStateBuffers restore_state_buf
Definition encoder.h:1854
AV1CdefWorkerData * cdef_worker
Definition encoder.h:1849
AV1LrSync lr_row_sync
Definition encoder.h:1824
struct EncWorkerData * tile_thr_data
Definition encoder.h:1787
AV1TplRowMultiThreadInfo tpl_row_mt
Definition encoder.h:1814
AV1EncPackBSSync pack_bs_sync
Definition encoder.h:1829
AV1EncRowMultiThreadInfo enc_row_mt
Definition encoder.h:1803
AV1LfSync lf_row_sync
Definition encoder.h:1819
AV1CdefSync cdef_sync
Definition encoder.h:1844
int num_mod_workers[NUM_MT_MODULES]
Definition encoder.h:1776
AV1EncAllIntraMultiThreadInfo intra_mt
Definition encoder.h:1809
int num_workers
Definition encoder.h:1771
int pipeline_lpf_mt_with_enc
Definition encoder.h:1860
AVxWorker * workers
Definition encoder.h:1781
bool pack_bs_mt_enabled
Definition encoder.h:1798
bool row_mt_enabled
Definition encoder.h:1793
AV1TemporalFilterSync tf_sync
Definition encoder.h:1839
AV1GlobalMotionSync gm_sync
Definition encoder.h:1834
Primary Rate Control parameters and status.
Definition ratectrl.h:302
Encoder config for coding block partitioning.
Definition encoder.h:275
bool enable_rect_partitions
Definition encoder.h:279
bool enable_1to4_partitions
Definition encoder.h:287
BLOCK_SIZE max_partition_size
Definition encoder.h:297
bool enable_ab_partitions
Definition encoder.h:283
BLOCK_SIZE min_partition_size
Definition encoder.h:292
Primary Encoder parameters related to multi-threading.
Definition encoder.h:1720
struct EncWorkerData * tile_thr_data
Definition encoder.h:1740
AV1CdefWorkerData * cdef_worker
Definition encoder.h:1745
int num_workers
Definition encoder.h:1724
int prev_num_enc_workers
Definition encoder.h:1761
AVxWorker * workers
Definition encoder.h:1734
AVxWorker * p_workers[4]
Definition encoder.h:1751
int p_num_workers
Definition encoder.h:1756
int num_mod_workers[NUM_MT_MODULES]
Definition encoder.h:1729
Rate Control parameters and status.
Definition ratectrl.h:134
Encoder rate control configuration parameters.
Definition encoder.h:525
int worst_allowed_q
Definition encoder.h:595
int over_shoot_pct
Definition encoder.h:590
unsigned int max_intra_bitrate_pct
Definition encoder.h:560
int drop_frames_water_mark
Definition encoder.h:578
int max_consec_drop_ms
Definition encoder.h:633
int vbrmax_section
Definition encoder.h:626
int64_t maximum_buffer_size_ms
Definition encoder.h:544
unsigned int vbr_corpus_complexity_lap
Definition encoder.h:555
unsigned int min_cr
Definition encoder.h:574
int vbrbias
Definition encoder.h:616
unsigned int gf_cbr_boost_pct
Definition encoder.h:569
int vbrmin_section
Definition encoder.h:621
enum aom_rc_mode mode
Definition encoder.h:609
unsigned int max_inter_bitrate_pct
Definition encoder.h:565
int64_t starting_buffer_level_ms
Definition encoder.h:534
int best_allowed_q
Definition encoder.h:600
int under_shoot_pct
Definition encoder.h:584
int64_t target_bandwidth
Definition encoder.h:549
int64_t optimal_buffer_level_ms
Definition encoder.h:539
int cq_level
Definition encoder.h:604
Refrence frame distance related variables.
Definition encoder.h:2199
int8_t nearest_past_ref
Definition encoder.h:2207
int ref_relative_dist[INTER_REFS_PER_FRAME]
Definition encoder.h:2203
int8_t nearest_future_ref
Definition encoder.h:2211
Refresh frame flags for different type of frames.
Definition encoder.h:2178
bool bwd_ref_frame
Definition encoder.h:2180
bool golden_frame
Definition encoder.h:2179
bool alt_ref_frame
Definition encoder.h:2181
Encoder config related to resize.
Definition encoder.h:255
uint8_t resize_scale_denominator
Definition encoder.h:264
uint8_t resize_kf_scale_denominator
Definition encoder.h:269
RESIZE_MODE resize_mode
Definition encoder.h:259
Desired dimensions for an externally triggered resize.
Definition encoder.h:2191
int width
Definition encoder.h:2192
int height
Definition encoder.h:2193
Parameters related to restoration types.
Definition encoder.h:1681
RestorationType best_rtype[RESTORE_TYPES - 1]
Definition encoder.h:1696
WienerInfo wiener
Definition encoder.h:1685
SgrprojInfo sgrproj
Definition encoder.h:1690
Parameters related to Restoration Info.
Definition restoration.h:246
RestorationType frame_restoration_type
Definition restoration.h:250
Buffers to be backed up during parallel encode set to be restored later.
Definition encoder.h:1656
int32_t * rst_tmpbuf
Definition encoder.h:1670
RestorationLineBuffers * rlbs
Definition encoder.h:1675
uint16_t * cdef_colbuf[3]
Definition encoder.h:1665
uint16_t * cdef_srcbuf
Definition encoder.h:1660
Top level speed vs quality trade off data struture.
Definition speed_features.h:2015
MV_SPEED_FEATURES mv_sf
Definition speed_features.h:2044
LOOP_FILTER_SPEED_FEATURES lpf_sf
Definition speed_features.h:2079
TX_SPEED_FEATURES tx_sf
Definition speed_features.h:2064
REAL_TIME_SPEED_FEATURES rt_sf
Definition speed_features.h:2084
The stucture of SVC.
Definition svc_layercontext.h:89
Parameters related to Sgrproj Filter.
Definition blockd.h:507
Encoder config related to frame super-resolution.
Definition encoder.h:431
uint8_t superres_kf_scale_denominator
Definition encoder.h:453
aom_superres_mode superres_mode
Definition encoder.h:457
int superres_kf_qthresh
Definition encoder.h:441
bool enable_superres
Definition encoder.h:461
uint8_t superres_scale_denominator
Definition encoder.h:447
int superres_qthresh
Definition encoder.h:436
Temporal filter info for a gop.
Definition temporal_filter.h:161
Frame level Two pass status and control data.
Definition firstpass.h:460
Two pass status and control data.
Definition firstpass.h:418
Parameters related to temporal filtering.
Definition temporal_filter.h:98
Frame time stamps.
Definition encoder.h:2433
int64_t prev_ts_start
Definition encoder.h:2437
int64_t first_ts_start
Definition encoder.h:2445
int64_t prev_ts_end
Definition encoder.h:2441
Params related to temporal dependency model.
Definition tpl_model.h:165
Encoder flags for transform sizes and types.
Definition encoder.h:358
bool enable_tx64
Definition encoder.h:362
bool use_inter_dct_only
Definition encoder.h:385
bool enable_flip_idtx
Definition encoder.h:366
bool use_intra_default_tx_only
Definition encoder.h:390
bool use_intra_dct_only
Definition encoder.h:380
bool enable_rect_tx
Definition encoder.h:370
bool reduced_tx_type_set
Definition encoder.h:375
bool enable_tx_size_search
Definition encoder.h:394
Thresholds for variance based partitioning.
Definition encoder.h:1385
int64_t thresholds[5]
Definition encoder.h:1394
int64_t threshold_minmax
Definition encoder.h:1400
Parameters related to Wiener Filter.
Definition blockd.h:494
Parameters used for winner mode processing.
Definition encoder.h:2229
unsigned int use_transform_domain_distortion[MODE_EVAL_TYPES]
Definition encoder.h:2251
TX_SIZE_SEARCH_METHOD tx_size_search_methods[MODE_EVAL_TYPES]
Definition encoder.h:2243
unsigned int skip_txfm_level[MODE_EVAL_TYPES]
Definition encoder.h:2265
unsigned int coeff_opt_thresholds[MODE_EVAL_TYPES][2]
Definition encoder.h:2237
unsigned int tx_domain_dist_threshold[MODE_EVAL_TYPES]
Definition encoder.h:2258
unsigned int predict_dc_level[MODE_EVAL_TYPES]
Definition encoder.h:2272
Struct used to hold inter mode data for fast tx search.
Definition encoder.h:1290
RD_STATS rd_cost_arr[MAX_INTER_MODES]
Definition encoder.h:1319
int64_t est_rd_arr[MAX_INTER_MODES]
Definition encoder.h:1311
int64_t sse_arr[MAX_INTER_MODES]
Definition encoder.h:1307
RD_STATS rd_cost_y_arr[MAX_INTER_MODES]
Definition encoder.h:1323
RD_STATS rd_cost_uv_arr[MAX_INTER_MODES]
Definition encoder.h:1327
MB_MODE_INFO mbmi_arr[MAX_INTER_MODES]
Definition encoder.h:1299
RdIdxPair rd_idx_pair_arr[MAX_INTER_MODES]
Definition encoder.h:1315
int mode_rate_arr[MAX_INTER_MODES]
Definition encoder.h:1303
int num
Definition encoder.h:1295
MB_MODE_INFO_EXT_FRAME * mbmi_ext_frame
Finalized mbmi_ext for the whole frame.
Definition block.h:910
const struct scale_factors * block_ref_scale_factors[2]
Definition blockd.h:687