15#ifndef AOM_AV1_ENCODER_ENCODER_H_
16#define AOM_AV1_ENCODER_ENCODER_H_
21#include "config/aom_config.h"
25#include "av1/common/alloccommon.h"
26#include "av1/common/av1_common_int.h"
27#include "av1/common/blockd.h"
28#include "av1/common/entropymode.h"
30#include "av1/common/reconintra.h"
31#include "av1/common/resize.h"
32#include "av1/common/thread_common.h"
33#include "av1/common/timing.h"
35#include "av1/encoder/aq_cyclicrefresh.h"
36#include "av1/encoder/av1_quantize.h"
38#include "av1/encoder/context_tree.h"
39#include "av1/encoder/encodemb.h"
40#include "av1/encoder/external_partition.h"
41#include "av1/encoder/firstpass.h"
42#include "av1/encoder/global_motion.h"
43#include "av1/encoder/level.h"
45#include "av1/encoder/mcomp.h"
46#include "av1/encoder/pickcdef.h"
47#include "av1/encoder/ratectrl.h"
48#include "av1/encoder/rd.h"
50#include "av1/encoder/svc_layercontext.h"
51#include "av1/encoder/temporal_filter.h"
52#include "av1/encoder/thirdpass.h"
53#include "av1/encoder/tokenize.h"
54#include "av1/encoder/tpl_model.h"
55#include "av1/encoder/av1_noise_estimate.h"
56#include "av1/encoder/bitstream.h"
58#if CONFIG_INTERNAL_STATS
59#include "aom_dsp/ssim.h"
61#include "aom_dsp/variance.h"
63#include "aom_dsp/noise_model.h"
66#include "av1/encoder/tune_vmaf.h"
68#if CONFIG_AV1_TEMPORAL_DENOISING
69#include "av1/encoder/av1_temporal_denoiser.h"
71#if CONFIG_TUNE_BUTTERAUGLI
72#include "av1/encoder/tune_butteraugli.h"
75#include "aom/internal/aom_codec_internal.h"
76#include "aom_util/aom_thread.h"
86#define SCENE_CUT_KEY_TEST_INTERVAL 16
89#define TF_LOOKAHEAD_IDX_THR 7
91#define HDR_QP_LEVELS 10
92#define CHROMA_CB_QP_SCALE 1.04
93#define CHROMA_CR_QP_SCALE 1.04
94#define CHROMA_QP_SCALE -0.46
95#define CHROMA_QP_OFFSET 9.26
96#define QP_SCALE_FACTOR 2.0
97#define DISABLE_HDR_LUMA_DELTAQ 1
101typedef struct aom_rational64 {
118 FRAMEFLAGS_KEY = 1 << 0,
119 FRAMEFLAGS_GOLDEN = 1 << 1,
120 FRAMEFLAGS_BWDREF = 1 << 2,
122 FRAMEFLAGS_ALTREF = 1 << 3,
123 FRAMEFLAGS_INTRAONLY = 1 << 4,
124 FRAMEFLAGS_SWITCH = 1 << 5,
125 FRAMEFLAGS_ERROR_RESILIENT = 1 << 6,
126} UENUM1BYTE(FRAMETYPE_FLAGS);
131 PARALLEL_SIMULATION_ENCODE,
132 NUM_FPMT_TEST_ENCODES
133} UENUM1BYTE(FPMT_TEST_ENC_CFG);
137#define MIN_PYR_LEVEL 1
138static INLINE
int get_true_pyr_level(
int frame_level,
int frame_order,
139 int max_layer_depth) {
140 if (frame_order == 0) {
142 return MIN_PYR_LEVEL;
143 }
else if (frame_level == MAX_ARF_LAYERS) {
145 return max_layer_depth;
146 }
else if (frame_level == (MAX_ARF_LAYERS + 1)) {
148 return MIN_PYR_LEVEL;
150 return AOMMAX(MIN_PYR_LEVEL, frame_level);
157 CYCLIC_REFRESH_AQ = 3,
159} UENUM1BYTE(AQ_MODE);
162 DELTA_Q_OBJECTIVE = 1,
163 DELTA_Q_PERCEPTUAL = 2,
164 DELTA_Q_PERCEPTUAL_AI = 3,
165 DELTA_Q_USER_RATING_BASED = 4,
168} UENUM1BYTE(DELTAQ_MODE);
176} UENUM1BYTE(RESIZE_MODE);
180 SS_CFG_LOOKAHEAD = 1,
183} UENUM1BYTE(SS_CFG_OFFSET);
187 ENABLE_SCENECUT_MODE_1,
188 ENABLE_SCENECUT_MODE_2
189} UENUM1BYTE(SCENECUT_MODE);
191#define MAX_VBR_CORPUS_COMPLEXITY 10000
207} MULTI_THREADED_MODULES;
241 SKIP_APPLY_RESTORATION = 1 << 0,
242 SKIP_APPLY_SUPERRES = 1 << 1,
243 SKIP_APPLY_CDEF = 1 << 2,
244 SKIP_APPLY_LOOPFILTER = 1 << 3,
633 int gf_min_pyr_height;
635 int gf_max_pyr_height;
637 bool enable_auto_arf;
640 bool enable_auto_brf;
645 unsigned int num_tile_groups;
654 int tile_width_count;
656 int tile_height_count;
658 int tile_widths[MAX_TILE_COLS];
660 int tile_heights[MAX_TILE_ROWS];
662 bool enable_large_scale_tile;
664 bool enable_single_tile_decoding;
666 bool enable_ext_tile_debug;
676 int forced_max_frame_width;
679 int forced_max_frame_height;
690 bool enable_warped_motion;
692 bool allow_warped_motion;
699 aom_timing_info_t timing_info;
701 uint32_t num_units_in_decoding_tick;
704 bool decoder_model_info_present_flag;
707 bool display_model_info_present_flag;
709 bool timing_info_present;
725 unsigned int max_reference_frames;
727 bool enable_reduced_reference_set;
729 bool enable_onesided_comp;
747 unsigned int motion_vector_unit_test;
749 unsigned int sb_multipass_unit_test;
754 const char *vmaf_model_path;
756 const char *film_grain_table_filename;
762 int film_grain_test_vector;
769 double init_framerate;
771 unsigned int input_bit_depth;
775 unsigned int chroma_subsampling_x;
777 unsigned int chroma_subsampling_y;
784 int use_fixed_qp_offsets;
794 DELTAQ_MODE deltaq_mode;
796 DELTAQ_MODE deltaq_strength;
798 bool enable_chroma_deltaq;
800 bool enable_hdr_deltaq;
879 bool enable_deltalf_mode;
881 CDEF_CONTROL cdef_control;
883 bool enable_restoration;
885 bool force_video_mode;
887 bool error_resilient_mode;
889 bool frame_parallel_decoding_mode;
891 bool enable_monochrome;
894 bool full_still_picture_hdr;
896 bool enable_dual_filter;
898 bool enable_order_hint;
900 bool ref_frame_mvs_present;
902 bool enable_ref_frame_mvs;
904 bool enable_interintra_comp;
906 bool enable_global_motion;
921 FrameDimensionCfg frm_dim_cfg;
941 QuantizationCfg q_cfg;
973 DecoderModelCfg dec_model_cfg;
976 RefFrameCfg ref_frm_cfg;
979 UnitTestCfg unit_test_cfg;
982 MotionModeCfg motion_mode_cfg;
997 CostUpdateFreq cost_upd_freq;
1003 int noise_block_size;
1005 int enable_dnl_denoising;
1008#if CONFIG_AV1_TEMPORAL_DENOISING
1010 int noise_sensitivity;
1014 unsigned int tier_mask;
1018 int border_in_pixels;
1027 AV1_LEVEL target_seq_level_idx[MAX_NUM_OPERATING_POINTS];
1030 BITSTREAM_PROFILE profile;
1047 const char *two_pass_output;
1050 const char *second_pass_log;
1063 bool use_highbitdepth;
1068 bool save_as_annexb;
1072 const char *partition_info_path;
1077 unsigned int enable_rate_guide_deltaq;
1081 const char *rate_distribution_info;
1084 int strict_level_conformance;
1087 int kf_max_pyr_height;
1095static INLINE
int is_lossless_requested(
const RateControlCfg *
const rc_cfg) {
1133 [SWITCHABLE_FILTERS];
1138typedef struct FRAME_COUNTS {
1141#if CONFIG_ENTROPY_STATS
1142 unsigned int kf_y_mode[KF_MODE_CONTEXTS][KF_MODE_CONTEXTS][INTRA_MODES];
1143 unsigned int angle_delta[DIRECTIONAL_MODES][2 * MAX_ANGLE_DELTA + 1];
1144 unsigned int y_mode[BLOCK_SIZE_GROUPS][INTRA_MODES];
1145 unsigned int uv_mode[CFL_ALLOWED_TYPES][INTRA_MODES][UV_INTRA_MODES];
1146 unsigned int cfl_sign[CFL_JOINT_SIGNS];
1147 unsigned int cfl_alpha[CFL_ALPHA_CONTEXTS][CFL_ALPHABET_SIZE];
1148 unsigned int palette_y_mode[PALATTE_BSIZE_CTXS][PALETTE_Y_MODE_CONTEXTS][2];
1149 unsigned int palette_uv_mode[PALETTE_UV_MODE_CONTEXTS][2];
1150 unsigned int palette_y_size[PALATTE_BSIZE_CTXS][PALETTE_SIZES];
1151 unsigned int palette_uv_size[PALATTE_BSIZE_CTXS][PALETTE_SIZES];
1152 unsigned int palette_y_color_index[PALETTE_SIZES]
1153 [PALETTE_COLOR_INDEX_CONTEXTS]
1155 unsigned int palette_uv_color_index[PALETTE_SIZES]
1156 [PALETTE_COLOR_INDEX_CONTEXTS]
1158 unsigned int partition[PARTITION_CONTEXTS][EXT_PARTITION_TYPES];
1159 unsigned int txb_skip[TOKEN_CDF_Q_CTXS][TX_SIZES][TXB_SKIP_CONTEXTS][2];
1160 unsigned int eob_extra[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1161 [EOB_COEF_CONTEXTS][2];
1162 unsigned int dc_sign[PLANE_TYPES][DC_SIGN_CONTEXTS][2];
1163 unsigned int coeff_lps[TX_SIZES][PLANE_TYPES][BR_CDF_SIZE - 1][LEVEL_CONTEXTS]
1165 unsigned int eob_flag[TX_SIZES][PLANE_TYPES][EOB_COEF_CONTEXTS][2];
1166 unsigned int eob_multi16[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][5];
1167 unsigned int eob_multi32[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][6];
1168 unsigned int eob_multi64[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][7];
1169 unsigned int eob_multi128[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][8];
1170 unsigned int eob_multi256[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][9];
1171 unsigned int eob_multi512[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][10];
1172 unsigned int eob_multi1024[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][11];
1173 unsigned int coeff_lps_multi[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1174 [LEVEL_CONTEXTS][BR_CDF_SIZE];
1175 unsigned int coeff_base_multi[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1176 [SIG_COEF_CONTEXTS][NUM_BASE_LEVELS + 2];
1177 unsigned int coeff_base_eob_multi[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1178 [SIG_COEF_CONTEXTS_EOB][NUM_BASE_LEVELS + 1];
1179 unsigned int newmv_mode[NEWMV_MODE_CONTEXTS][2];
1180 unsigned int zeromv_mode[GLOBALMV_MODE_CONTEXTS][2];
1181 unsigned int refmv_mode[REFMV_MODE_CONTEXTS][2];
1182 unsigned int drl_mode[DRL_MODE_CONTEXTS][2];
1183 unsigned int inter_compound_mode[INTER_MODE_CONTEXTS][INTER_COMPOUND_MODES];
1184 unsigned int wedge_idx[BLOCK_SIZES_ALL][16];
1185 unsigned int interintra[BLOCK_SIZE_GROUPS][2];
1186 unsigned int interintra_mode[BLOCK_SIZE_GROUPS][INTERINTRA_MODES];
1187 unsigned int wedge_interintra[BLOCK_SIZES_ALL][2];
1188 unsigned int compound_type[BLOCK_SIZES_ALL][MASKED_COMPOUND_TYPES];
1189 unsigned int motion_mode[BLOCK_SIZES_ALL][MOTION_MODES];
1190 unsigned int obmc[BLOCK_SIZES_ALL][2];
1191 unsigned int intra_inter[INTRA_INTER_CONTEXTS][2];
1192 unsigned int comp_inter[COMP_INTER_CONTEXTS][2];
1193 unsigned int comp_ref_type[COMP_REF_TYPE_CONTEXTS][2];
1194 unsigned int uni_comp_ref[UNI_COMP_REF_CONTEXTS][UNIDIR_COMP_REFS - 1][2];
1195 unsigned int single_ref[REF_CONTEXTS][SINGLE_REFS - 1][2];
1196 unsigned int comp_ref[REF_CONTEXTS][FWD_REFS - 1][2];
1197 unsigned int comp_bwdref[REF_CONTEXTS][BWD_REFS - 1][2];
1198 unsigned int intrabc[2];
1200 unsigned int txfm_partition[TXFM_PARTITION_CONTEXTS][2];
1201 unsigned int intra_tx_size[MAX_TX_CATS][TX_SIZE_CONTEXTS][MAX_TX_DEPTH + 1];
1202 unsigned int skip_mode[SKIP_MODE_CONTEXTS][2];
1203 unsigned int skip_txfm[SKIP_CONTEXTS][2];
1204 unsigned int compound_index[COMP_INDEX_CONTEXTS][2];
1205 unsigned int comp_group_idx[COMP_GROUP_IDX_CONTEXTS][2];
1206 unsigned int delta_q[DELTA_Q_PROBS][2];
1207 unsigned int delta_lf_multi[FRAME_LF_COUNT][DELTA_LF_PROBS][2];
1208 unsigned int delta_lf[DELTA_LF_PROBS][2];
1210 unsigned int inter_ext_tx[EXT_TX_SETS_INTER][EXT_TX_SIZES][TX_TYPES];
1211 unsigned int intra_ext_tx[EXT_TX_SETS_INTRA][EXT_TX_SIZES][INTRA_MODES]
1213 unsigned int filter_intra_mode[FILTER_INTRA_MODES];
1214 unsigned int filter_intra[BLOCK_SIZES_ALL][2];
1216 unsigned int wiener_restore[2];
1217 unsigned int sgrproj_restore[2];
1220 unsigned int switchable_interp[SWITCHABLE_FILTER_CONTEXTS]
1221 [SWITCHABLE_FILTERS];
1224#define INTER_MODE_RD_DATA_OVERALL_SIZE 6400
1233 double sse_sse_mean;
1249#define MAX_INTER_MODES 1024
1307 uint32_t sum_square_error;
1320 VPVariance part_variances;
1325 VPVariance part_variances;
1330 VPVariance part_variances;
1335 VPVariance part_variances;
1340 VPVariance part_variances;
1345 VPVariance part_variances;
1376#if CONFIG_MULTITHREAD
1422typedef struct TileDataEnc {
1424 DECLARE_ALIGNED(16, FRAME_CONTEXT, tctx);
1425 FRAME_CONTEXT *row_ctx;
1426 uint64_t abs_sum_level;
1427 uint8_t allow_update_cdf;
1428 InterModeRdModel inter_mode_rd_models[BLOCK_SIZES_ALL];
1430 MV firstpass_top_mv;
1433typedef struct RD_COUNTS {
1434 int compound_ref_used_flag;
1435 int skip_mode_used_flag;
1436 int tx_type_used[TX_SIZES_ALL][TX_TYPES];
1437 int obmc_used[BLOCK_SIZES_ALL][2];
1439 int newmv_or_intra_blocks;
1440 uint64_t seg_tmp_pred_cost[2];
1443typedef struct ThreadData {
1445 RD_COUNTS rd_counts;
1446 FRAME_COUNTS *counts;
1447 PC_TREE_SHARED_BUFFERS shared_coeff_buf;
1448 SIMPLE_MOTION_DATA_TREE *sms_tree;
1449 SIMPLE_MOTION_DATA_TREE *sms_root;
1450 uint32_t *hash_value_buffer[2][2];
1451 OBMCBuffer obmc_buffer;
1452 PALETTE_BUFFER *palette_buffer;
1453 CompoundTypeRdBuffers comp_rd_buffer;
1454 CONV_BUF_TYPE *tmp_conv_dst;
1455 uint64_t abs_sum_level;
1456 uint8_t *tmp_pred_bufs[2];
1459 int coefficient_size;
1460 int max_mv_magnitude;
1461 int interp_filter_selected[SWITCHABLE];
1462 FRAME_CONTEXT *tctx;
1464 int32_t num_64x64_blocks;
1465 PICK_MODE_CONTEXT *firstpass_ctx;
1466 TemporalFilterData tf_data;
1467 TplTxfmStats tpl_txfm_stats;
1471 PixelLevelGradientInfo *pixel_gradient_info;
1476 Block4x4VarInfo *src_var_info_of_4x4_sub_blocks;
1478 PC_TREE *rt_pc_root;
1481struct EncWorkerData;
1529#if CONFIG_MULTITHREAD
1559#if CONFIG_MULTITHREAD
1588#define NUM_RECODES_PER_FRAME 10
1593#define MAX_PARALLEL_FRAMES 4
1769typedef struct ActiveMap {
1798#if CONFIG_INTERNAL_STATS
1806} UENUM1BYTE(StatType);
1808typedef struct IMAGE_STAT {
1809 double stat[NUM_STAT_TYPES];
1816 YV12_BUFFER_CONFIG buf;
1844#if CONFIG_COLLECT_PARTITION_STATS
1845typedef struct FramePartitionTimingStats {
1846 int partition_decisions[6][EXT_PARTITION_TYPES];
1847 int partition_attempts[6][EXT_PARTITION_TYPES];
1848 int64_t partition_times[6][EXT_PARTITION_TYPES];
1851} FramePartitionTimingStats;
1854#if CONFIG_COLLECT_COMPONENT_TIMING
1855#include "aom_ports/aom_timer.h"
1858 av1_encode_strategy_time,
1859 av1_get_one_pass_rt_params_time,
1860 av1_get_second_pass_params_time,
1861 denoise_and_encode_time,
1862 apply_filtering_time,
1863 av1_tpl_setup_stats_time,
1864 encode_frame_to_data_rate_time,
1865 encode_with_or_without_recode_time,
1868 loop_restoration_time,
1869 av1_pack_bitstream_final_time,
1870 av1_encode_frame_time,
1871 av1_compute_global_motion_time,
1872 av1_setup_motion_field_time,
1875 rd_pick_partition_time,
1876 rd_use_partition_time,
1877 choose_var_based_partitioning_time,
1878 av1_prune_partitions_time,
1879 none_partition_search_time,
1880 split_partition_search_time,
1881 rectangular_partition_search_time,
1882 ab_partitions_search_time,
1883 rd_pick_4partition_time,
1886 rd_pick_sb_modes_time,
1887 av1_rd_pick_intra_mode_sb_time,
1888 av1_rd_pick_inter_mode_sb_time,
1889 set_params_rd_pick_inter_mode_time,
1890 skip_inter_mode_time,
1891 handle_inter_mode_time,
1892 evaluate_motion_mode_for_winner_candidates_time,
1894 handle_intra_mode_time,
1895 refine_winner_mode_tx_time,
1896 av1_search_palette_mode_time,
1898 compound_type_rd_time,
1899 interpolation_filter_search_time,
1900 motion_mode_rd_time,
1902 nonrd_use_partition_time,
1903 pick_sb_modes_nonrd_time,
1904 hybrid_intra_mode_search_time,
1905 nonrd_pick_inter_mode_sb_time,
1906 encode_b_nonrd_time,
1909} UENUM1BYTE(TIMING_COMPONENT);
1911static INLINE
char const *get_component_name(
int index) {
1913 case av1_encode_strategy_time:
return "av1_encode_strategy_time";
1914 case av1_get_one_pass_rt_params_time:
1915 return "av1_get_one_pass_rt_params_time";
1916 case av1_get_second_pass_params_time:
1917 return "av1_get_second_pass_params_time";
1918 case denoise_and_encode_time:
return "denoise_and_encode_time";
1919 case apply_filtering_time:
return "apply_filtering_time";
1920 case av1_tpl_setup_stats_time:
return "av1_tpl_setup_stats_time";
1921 case encode_frame_to_data_rate_time:
1922 return "encode_frame_to_data_rate_time";
1923 case encode_with_or_without_recode_time:
1924 return "encode_with_or_without_recode_time";
1925 case loop_filter_time:
return "loop_filter_time";
1926 case cdef_time:
return "cdef_time";
1927 case loop_restoration_time:
return "loop_restoration_time";
1928 case av1_pack_bitstream_final_time:
return "av1_pack_bitstream_final_time";
1929 case av1_encode_frame_time:
return "av1_encode_frame_time";
1930 case av1_compute_global_motion_time:
1931 return "av1_compute_global_motion_time";
1932 case av1_setup_motion_field_time:
return "av1_setup_motion_field_time";
1933 case encode_sb_row_time:
return "encode_sb_row_time";
1935 case rd_pick_partition_time:
return "rd_pick_partition_time";
1936 case rd_use_partition_time:
return "rd_use_partition_time";
1937 case choose_var_based_partitioning_time:
1938 return "choose_var_based_partitioning_time";
1939 case av1_prune_partitions_time:
return "av1_prune_partitions_time";
1940 case none_partition_search_time:
return "none_partition_search_time";
1941 case split_partition_search_time:
return "split_partition_search_time";
1942 case rectangular_partition_search_time:
1943 return "rectangular_partition_search_time";
1944 case ab_partitions_search_time:
return "ab_partitions_search_time";
1945 case rd_pick_4partition_time:
return "rd_pick_4partition_time";
1946 case encode_sb_time:
return "encode_sb_time";
1948 case rd_pick_sb_modes_time:
return "rd_pick_sb_modes_time";
1949 case av1_rd_pick_intra_mode_sb_time:
1950 return "av1_rd_pick_intra_mode_sb_time";
1951 case av1_rd_pick_inter_mode_sb_time:
1952 return "av1_rd_pick_inter_mode_sb_time";
1953 case set_params_rd_pick_inter_mode_time:
1954 return "set_params_rd_pick_inter_mode_time";
1955 case skip_inter_mode_time:
return "skip_inter_mode_time";
1956 case handle_inter_mode_time:
return "handle_inter_mode_time";
1957 case evaluate_motion_mode_for_winner_candidates_time:
1958 return "evaluate_motion_mode_for_winner_candidates_time";
1959 case do_tx_search_time:
return "do_tx_search_time";
1960 case handle_intra_mode_time:
return "handle_intra_mode_time";
1961 case refine_winner_mode_tx_time:
return "refine_winner_mode_tx_time";
1962 case av1_search_palette_mode_time:
return "av1_search_palette_mode_time";
1963 case handle_newmv_time:
return "handle_newmv_time";
1964 case compound_type_rd_time:
return "compound_type_rd_time";
1965 case interpolation_filter_search_time:
1966 return "interpolation_filter_search_time";
1967 case motion_mode_rd_time:
return "motion_mode_rd_time";
1969 case nonrd_use_partition_time:
return "nonrd_use_partition_time";
1970 case pick_sb_modes_nonrd_time:
return "pick_sb_modes_nonrd_time";
1971 case hybrid_intra_mode_search_time:
return "hybrid_intra_mode_search_time";
1972 case nonrd_pick_inter_mode_sb_time:
return "nonrd_pick_inter_mode_sb_time";
1973 case encode_b_nonrd_time:
return "encode_b_nonrd_time";
1982#define MAX_INTERNAL_ARFS (REF_FRAMES - BWDREF_FRAME - 1)
2271 int mv_joint_count[4];
2273 int last_bit_nonzero;
2277 int hp_total_mv_rate;
2278 int lp_total_mv_rate;
2289typedef struct WeberStats {
2290 int64_t mb_wiener_variance;
2291 int64_t src_variance;
2292 int64_t rec_variance;
2293 int16_t src_pix_max;
2294 int16_t rec_pix_max;
2301 struct loopfilter lf;
2303 YV12_BUFFER_CONFIG copy_buffer;
2325 int show_frame_count;
2385#if !CONFIG_REALTIME_ONLY
2389 DUCKY_ENCODE_FRAME_MODE_NONE,
2390 DUCKY_ENCODE_FRAME_MODE_QINDEX,
2392 DUCKY_ENCODE_FRAME_MODE_QINDEX_RDMULT,
2394} UENUM1BYTE(DUCKY_ENCODE_FRAME_MODE);
2397 DUCKY_ENCODE_GOP_MODE_NONE,
2398 DUCKY_ENCODE_GOP_MODE_RCL,
2399} UENUM1BYTE(DUCKY_ENCODE_GOP_MODE);
2401typedef struct DuckyEncodeFrameInfo {
2402 DUCKY_ENCODE_FRAME_MODE qp_mode;
2403 DUCKY_ENCODE_GOP_MODE gop_mode;
2407 int *superblock_encode_qindex;
2408 int *superblock_encode_rdmult;
2409 int delta_q_enabled;
2410} DuckyEncodeFrameInfo;
2412typedef struct DuckyEncodeFrameResult {
2413 int global_order_idx;
2419} DuckyEncodeFrameResult;
2421typedef struct DuckyEncodeInfo {
2422 DuckyEncodeFrameInfo frame_info;
2423 DuckyEncodeFrameResult frame_result;
2429typedef struct RTC_REF {
2434 int reference[INTER_REFS_PER_FRAME];
2435 int ref_idx[INTER_REFS_PER_FRAME];
2436 int refresh[REF_FRAMES];
2437 int set_ref_frame_config;
2438 int non_reference_frame;
2439 int ref_frame_comp[3];
2444 unsigned int buffer_time_index[REF_FRAMES];
2448 unsigned char buffer_spatial_layer[REF_FRAMES];
2452 bool reference_was_previous_frame;
2457 bool bias_recovery_frame;
2536 FPMT_TEST_ENC_CFG fpmt_unit_test_cfg;
2554 int temp_valid_gm_model_found[FRAME_UPDATE_TYPES];
2712 aom_variance_fn_ptr_t
fn_ptr[BLOCK_SIZES_ALL];
2730#if CONFIG_INTERNAL_STATS
2732 uint64_t total_time_receive_data;
2733 uint64_t total_time_compress_data;
2735 unsigned int total_mode_chosen_counts[MAX_MODES];
2738 uint64_t total_sq_error[2];
2739 uint64_t total_samples[2];
2742 double total_blockiness;
2743 double worst_blockiness;
2746 double summed_quality;
2747 double summed_weights;
2748 double summed_quality_hbd;
2749 double summed_weights_hbd;
2750 unsigned int total_recode_hits;
2752 double worst_ssim_hbd;
2757 int b_calculate_blockiness;
2758 int b_calculate_consistency;
2760 double total_inconsistency;
2761 double worst_consistency;
2767#if CONFIG_ENTROPY_STATS
2771 FRAME_COUNTS aggregate_fc;
3070#if CONFIG_INTERNAL_STATS
3072 uint64_t time_compress_data;
3074 unsigned int mode_chosen_counts[MAX_MODES];
3076 unsigned int frame_recode_hits;
3080#if CONFIG_SPEED_STATS
3084 unsigned int tx_search_count;
3181 double temp_framerate;
3257#if CONFIG_COLLECT_PARTITION_STATS
3261 FramePartitionTimingStats partition_stats;
3264#if CONFIG_COLLECT_COMPONENT_TIMING
3268 uint64_t component_time[kTimingComponents];
3273 struct aom_usec_timer component_timer[kTimingComponents];
3277 uint64_t frame_component_time[kTimingComponents];
3306 TuneVMAFInfo vmaf_info;
3309#if CONFIG_TUNE_BUTTERAUGLI
3313 TuneButteraugliInfo butteraugli_info;
3354#if CONFIG_AV1_TEMPORAL_DENOISING
3358 AV1_DENOISER denoiser;
3433#if CONFIG_RD_COMMAND
3437 RD_COMMAND rd_command;
3482#if CONFIG_BITRATE_ACCURACY
3486 VBR_RATECTRL_INFO vbr_rc_info;
3489#if CONFIG_RATECTRL_LOG
3493 RATECTRL_LOG rc_log;
3527#if !CONFIG_REALTIME_ONLY
3550#if CONFIG_SALIENCY_MAP
3554 uint8_t *saliency_map;
3559 double *sm_scaling_factor;
3574 YV12_BUFFER_CONFIG *source;
3575 YV12_BUFFER_CONFIG *last_source;
3576 int64_t ts_duration;
3595 int primary_ref_frame;
3605 int refresh_frame_flags;
3607 int show_existing_frame;
3608 int existing_fb_idx_to_show;
3639} EncodeFrameResults;
3641void av1_initialize_enc(
unsigned int usage,
enum aom_rc_mode end_usage);
3645 BufferPool *
const pool,
3646 COMPRESSOR_STAGE stage,
3647 int lap_lag_in_frames);
3650 struct aom_codec_pkt_list *pkt_list_head,
int num_lap_buffers,
3655void av1_remove_primary_compressor(
AV1_PRIMARY *ppi);
3657#if CONFIG_ENTROPY_STATS
3660#if CONFIG_INTERNAL_STATS
3665 bool *sb_size_changed);
3668 bool sb_size_changed);
3670void av1_check_initial_width(
AV1_COMP *
cpi,
int use_highbitdepth,
3671 int subsampling_x,
int subsampling_y);
3673void av1_init_seq_coding_tools(
AV1_PRIMARY *
const ppi,
3679void av1_scale_references_fpmt(
AV1_COMP *
cpi,
int *ref_buffers_used_map);
3681void av1_increment_scaled_ref_counts_fpmt(BufferPool *buffer_pool,
3682 int ref_buffers_used_map);
3684void av1_release_scaled_references_fpmt(
AV1_COMP *
cpi);
3686void av1_decrement_ref_counts_fpmt(BufferPool *buffer_pool,
3687 int ref_buffers_used_map);
3689void av1_init_sc_decisions(
AV1_PRIMARY *
const ppi);
3694int av1_init_parallel_frame_context(
const AV1_COMP_DATA *
const first_cpi_data,
3696 int *ref_buffers_used_map);
3716 YV12_BUFFER_CONFIG *sd, int64_t time_stamp,
3717 int64_t end_time_stamp);
3749 EncodeFrameResults *
const frame_results);
3752int av1_get_preview_raw_frame(
AV1_COMP *
cpi, YV12_BUFFER_CONFIG *dest);
3754int av1_get_last_show_frame(
AV1_COMP *
cpi, YV12_BUFFER_CONFIG *frame);
3757 YV12_BUFFER_CONFIG *new_frame,
3758 YV12_BUFFER_CONFIG *sd);
3760int av1_use_as_reference(
int *ext_ref_frame_flags,
int ref_frame_flags);
3762int av1_copy_reference_enc(
AV1_COMP *
cpi,
int idx, YV12_BUFFER_CONFIG *sd);
3764int av1_set_reference_enc(
AV1_COMP *
cpi,
int idx, YV12_BUFFER_CONFIG *sd);
3766int av1_set_size_literal(
AV1_COMP *
cpi,
int width,
int height);
3768void av1_set_frame_size(
AV1_COMP *
cpi,
int width,
int height);
3772int av1_set_active_map(
AV1_COMP *
cpi,
unsigned char *map,
int rows,
int cols);
3774int av1_get_active_map(
AV1_COMP *
cpi,
unsigned char *map,
int rows,
int cols);
3783int av1_convert_sect5obus_to_annexb(uint8_t *buffer,
size_t *input_size);
3796void av1_set_screen_content_options(
struct AV1_COMP *
cpi,
3806static INLINE
void init_ref_map_pair(
3807 AV1_COMP *cpi, RefFrameMapPair ref_frame_map_pairs[REF_FRAMES]) {
3809 memset(ref_frame_map_pairs, -1,
sizeof(*ref_frame_map_pairs) * REF_FRAMES);
3812 memset(ref_frame_map_pairs, 0,
sizeof(*ref_frame_map_pairs) * REF_FRAMES);
3813 for (
int map_idx = 0; map_idx < REF_FRAMES; map_idx++) {
3816 if (ref_frame_map_pairs[map_idx].disp_order == -1)
continue;
3818 ref_frame_map_pairs[map_idx].disp_order = -1;
3819 ref_frame_map_pairs[map_idx].pyr_level = -1;
3821 }
else if (buf->ref_count > 1) {
3827 for (
int idx2 = map_idx + 1; idx2 < REF_FRAMES; ++idx2) {
3830 ref_frame_map_pairs[idx2].disp_order = -1;
3831 ref_frame_map_pairs[idx2].pyr_level = -1;
3835 ref_frame_map_pairs[map_idx].disp_order = (int)buf->display_order_hint;
3836 ref_frame_map_pairs[map_idx].pyr_level = buf->pyramid_level;
3841static AOM_INLINE
void calc_frame_data_update_flag(
3842 GF_GROUP *
const gf_group,
int gf_frame_index,
3843 bool *
const do_frame_data_update) {
3844 *do_frame_data_update =
true;
3847 if (gf_group->frame_parallel_level[gf_frame_index] == 1) {
3848 *do_frame_data_update =
false;
3849 }
else if (gf_group->frame_parallel_level[gf_frame_index] == 2) {
3851 for (
int i = gf_frame_index + 1; i < gf_group->size; i++) {
3852 if ((gf_group->frame_parallel_level[i] == 0 &&
3853 (gf_group->update_type[i] == ARF_UPDATE ||
3854 gf_group->update_type[i] == INTNL_ARF_UPDATE)) ||
3855 gf_group->frame_parallel_level[i] == 1) {
3857 }
else if (gf_group->frame_parallel_level[i] == 2) {
3858 *do_frame_data_update =
false;
3867#define TICKS_PER_SEC 10000000LL
3869static INLINE int64_t
3870timebase_units_to_ticks(
const aom_rational64_t *timestamp_ratio, int64_t n) {
3871 return n * timestamp_ratio->num / timestamp_ratio->den;
3874static INLINE int64_t
3875ticks_to_timebase_units(
const aom_rational64_t *timestamp_ratio, int64_t n) {
3876 int64_t round = timestamp_ratio->num / 2;
3877 if (round > 0) --round;
3878 return (n * timestamp_ratio->den + round) / timestamp_ratio->num;
3881static INLINE
int frame_is_kf_gf_arf(
const AV1_COMP *cpi) {
3883 const FRAME_UPDATE_TYPE update_type =
3886 return frame_is_intra_only(&cpi->
common) || update_type == ARF_UPDATE ||
3887 update_type == GF_UPDATE;
3891static INLINE
int av1_use_hash_me(
const AV1_COMP *
const cpi) {
3894 frame_is_intra_only(&cpi->
common));
3897static INLINE
const YV12_BUFFER_CONFIG *get_ref_frame_yv12_buf(
3898 const AV1_COMMON *
const cm, MV_REFERENCE_FRAME ref_frame) {
3899 const RefCntBuffer *
const buf = get_ref_frame_buf(cm, ref_frame);
3900 return buf != NULL ? &buf->buf : NULL;
3903static INLINE
void alloc_frame_mvs(AV1_COMMON *
const cm, RefCntBuffer *buf) {
3904 assert(buf != NULL);
3905 ensure_mv_buffer(buf, cm);
3906 buf->width = cm->
width;
3907 buf->height = cm->
height;
3912static INLINE
unsigned int allocated_tokens(
const TileInfo *tile,
3913 int sb_size_log2,
int num_planes) {
3915 ROUND_POWER_OF_TWO(tile->mi_row_end - tile->mi_row_start, 2);
3917 ROUND_POWER_OF_TWO(tile->mi_col_end - tile->mi_col_start, 2);
3919 return get_token_alloc(tile_mb_rows, tile_mb_cols, sb_size_log2, num_planes);
3922static INLINE
void get_start_tok(
AV1_COMP *cpi,
int tile_row,
int tile_col,
3923 int mi_row, TokenExtra **tok,
int sb_size_log2,
3925 AV1_COMMON *
const cm = &cpi->
common;
3927 TileDataEnc *this_tile = &cpi->
tile_data[tile_row * tile_cols + tile_col];
3928 const TileInfo *
const tile_info = &this_tile->tile_info;
3930 const int tile_mb_cols =
3931 (tile_info->mi_col_end - tile_info->mi_col_start + 2) >> 2;
3932 const int tile_mb_row = (mi_row - tile_info->mi_row_start + 2) >> 2;
3934 *tok = cpi->
token_info.tile_tok[tile_row][tile_col] +
3935 get_token_alloc(tile_mb_row, tile_mb_cols, sb_size_log2, num_planes);
3940#define ALT_MIN_LAG 3
3941static INLINE
int is_altref_enabled(
int lag_in_frames,
bool enable_auto_arf) {
3942 return lag_in_frames >= ALT_MIN_LAG && enable_auto_arf;
3945static AOM_INLINE
int can_disable_altref(
const GFConfig *gf_cfg) {
3946 return is_altref_enabled(gf_cfg->lag_in_frames, gf_cfg->enable_auto_arf) &&
3947 (gf_cfg->gf_min_pyr_height == 0);
3951static INLINE
int get_num_blocks(
const int frame_length,
const int mb_length) {
3952 return (frame_length + mb_length - 1) / mb_length;
3956static INLINE
int is_stat_generation_stage(
const AV1_COMP *
const cpi) {
3963static INLINE
int is_stat_consumption_stage_twopass(
const AV1_COMP *
const cpi) {
3968static INLINE
int is_stat_consumption_stage(
const AV1_COMP *
const cpi) {
3969 return (is_stat_consumption_stage_twopass(cpi) ||
3975static AOM_INLINE
bool av1_need_dv_costs(
const AV1_COMP *
const cpi) {
3976 return !cpi->
sf.
rt_sf.use_nonrd_pick_mode &&
3977 av1_allow_intrabc(&cpi->
common) && !is_stat_generation_stage(cpi);
3997static INLINE
int is_one_pass_rt_params(
const AV1_COMP *cpi) {
3999 cpi->
oxcf.gf_cfg.lag_in_frames == 0;
4003static INLINE
int use_rtc_reference_structure_one_layer(
const AV1_COMP *cpi) {
4010static INLINE
int get_stats_buf_size(
int num_lap_buffer,
int num_lag_buffer) {
4012 return (num_lap_buffer > 0 ? num_lap_buffer + 1 : num_lag_buffer);
4017static INLINE
void set_ref_ptrs(
const AV1_COMMON *cm, MACROBLOCKD *xd,
4018 MV_REFERENCE_FRAME ref0,
4019 MV_REFERENCE_FRAME ref1) {
4021 get_ref_scale_factors_const(cm, ref0 >= LAST_FRAME ? ref0 : 1);
4023 get_ref_scale_factors_const(cm, ref1 >= LAST_FRAME ? ref1 : 1);
4026static INLINE
int get_chessboard_index(
int frame_index) {
4027 return frame_index & 0x1;
4030static INLINE
const int *cond_cost_list_const(
const struct AV1_COMP *cpi,
4031 const int *cost_list) {
4032 const int use_cost_list = cpi->
sf.
mv_sf.subpel_search_method != SUBPEL_TREE &&
4033 cpi->
sf.
mv_sf.use_fullpel_costlist;
4034 return use_cost_list ? cost_list : NULL;
4037static INLINE
int *cond_cost_list(
const struct AV1_COMP *cpi,
int *cost_list) {
4038 const int use_cost_list = cpi->
sf.
mv_sf.subpel_search_method != SUBPEL_TREE &&
4039 cpi->
sf.
mv_sf.use_fullpel_costlist;
4040 return use_cost_list ? cost_list : NULL;
4044double av1_get_compression_ratio(
const AV1_COMMON *
const cm,
4045 size_t encoded_frame_size);
4047void av1_new_framerate(
AV1_COMP *cpi,
double framerate);
4049void av1_setup_frame_size(
AV1_COMP *cpi);
4051#define LAYER_IDS_TO_IDX(sl, tl, num_tl) ((sl) * (num_tl) + (tl))
4054static INLINE
int av1_resize_scaled(
const AV1_COMMON *cm) {
4059static INLINE
int av1_frame_scaled(
const AV1_COMMON *cm) {
4060 return av1_superres_scaled(cm) || av1_resize_scaled(cm);
4066static INLINE
int encode_show_existing_frame(
const AV1_COMMON *cm) {
4073static INLINE
int get_mi_ext_idx(
const int mi_row,
const int mi_col,
4074 const BLOCK_SIZE mi_alloc_bsize,
4075 const int mbmi_ext_stride) {
4076 const int mi_ext_size_1d = mi_size_wide[mi_alloc_bsize];
4077 const int mi_ext_row = mi_row / mi_ext_size_1d;
4078 const int mi_ext_col = mi_col / mi_ext_size_1d;
4079 return mi_ext_row * mbmi_ext_stride + mi_ext_col;
4084static INLINE
void set_mode_info_offsets(
4087 MACROBLOCKD *
const xd,
int mi_row,
int mi_col) {
4088 set_mi_offsets(mi_params, xd, mi_row, mi_col);
4089 const int ext_idx = get_mi_ext_idx(mi_row, mi_col, mi_params->
mi_alloc_bsize,
4097static INLINE BLOCK_SIZE find_partition_size(BLOCK_SIZE bsize,
int rows_left,
4098 int cols_left,
int *bh,
int *bw) {
4099 int int_size = (int)bsize;
4100 if (rows_left <= 0 || cols_left <= 0) {
4101 return AOMMIN(bsize, BLOCK_8X8);
4103 for (; int_size > 0; int_size -= 3) {
4104 *bh = mi_size_high[int_size];
4105 *bw = mi_size_wide[int_size];
4106 if ((*bh <= rows_left) && (*bw <= cols_left)) {
4111 return (BLOCK_SIZE)int_size;
4114static const uint8_t av1_ref_frame_flag_list[REF_FRAMES] = { 0,
4125static const MV_REFERENCE_FRAME disable_order[] = {
4132static const MV_REFERENCE_FRAME
4133 ref_frame_priority_order[INTER_REFS_PER_FRAME] = {
4134 LAST_FRAME, ALTREF_FRAME, BWDREF_FRAME, GOLDEN_FRAME,
4135 ALTREF2_FRAME, LAST2_FRAME, LAST3_FRAME,
4138static INLINE
int get_ref_frame_flags(
const SPEED_FEATURES *
const sf,
4139 const int use_one_pass_rt_params,
4140 const YV12_BUFFER_CONFIG **ref_frames,
4141 const int ext_ref_frame_flags) {
4146 int flags = ext_ref_frame_flags;
4148 for (
int i = 1; i < INTER_REFS_PER_FRAME; ++i) {
4149 const YV12_BUFFER_CONFIG *
const this_ref = ref_frames[i];
4154 (use_one_pass_rt_params && ref_frame_priority_order[i] == GOLDEN_FRAME)
4155 ? (1 + sf->
rt_sf.use_nonrd_altref_frame)
4157 for (
int j = 0; j < index; ++j) {
4161 if (this_ref == ref_frames[j] &&
4162 (flags & (1 << (ref_frame_priority_order[j] - 1)))) {
4163 flags &= ~(1 << (ref_frame_priority_order[i] - 1));
4182#define MAX_GFUBOOST_FACTOR 10.0
4183#define MIN_GFUBOOST_FACTOR 4.0
4185static INLINE
int is_frame_tpl_eligible(
const GF_GROUP *
const gf_group,
4187 const FRAME_UPDATE_TYPE update_type = gf_group->update_type[index];
4188 return update_type == ARF_UPDATE || update_type == GF_UPDATE ||
4189 update_type == KF_UPDATE;
4192static INLINE
int is_frame_eligible_for_ref_pruning(
const GF_GROUP *gf_group,
4193 int selective_ref_frame,
4194 int prune_ref_frames,
4196 return (selective_ref_frame > 0) && (prune_ref_frames > 0) &&
4197 !is_frame_tpl_eligible(gf_group, gf_index);
4201static INLINE FRAME_UPDATE_TYPE get_frame_update_type(
const GF_GROUP *gf_group,
4202 int gf_frame_index) {
4203 return gf_group->update_type[gf_frame_index];
4206static INLINE
int av1_pixels_to_mi(
int pixels) {
4207 return ALIGN_POWER_OF_TWO(pixels, 3) >> MI_SIZE_LOG2;
4210static AOM_INLINE
int is_psnr_calc_enabled(
const AV1_COMP *cpi) {
4211 const AV1_COMMON *
const cm = &cpi->
common;
4217static INLINE
int is_frame_resize_pending(
const AV1_COMP *
const cpi) {
4220 return (resize_pending_params->
width && resize_pending_params->
height &&
4226static INLINE
int is_loopfilter_used(
const AV1_COMMON *
const cm) {
4231static INLINE
int is_cdef_used(
const AV1_COMMON *
const cm) {
4237static INLINE
int is_restoration_used(
const AV1_COMMON *
const cm) {
4247static INLINE
unsigned int derive_skip_apply_postproc_filters(
4248 const AV1_COMP *cpi,
int use_loopfilter,
int use_cdef,
int use_superres,
4249 int use_restoration) {
4256 return (SKIP_APPLY_LOOPFILTER | SKIP_APPLY_CDEF);
4260 assert(cpi->
oxcf.mode == ALLINTRA);
4269 if (use_restoration)
return SKIP_APPLY_RESTORATION;
4270 if (use_superres)
return SKIP_APPLY_SUPERRES;
4277 ? (SKIP_APPLY_LOOPFILTER | SKIP_APPLY_CDEF)
4280 if (use_loopfilter)
return SKIP_APPLY_LOOPFILTER;
4287static INLINE
void set_postproc_filter_default_params(AV1_COMMON *cm) {
4288 struct loopfilter *
const lf = &cm->
lf;
4292 lf->filter_level[0] = 0;
4293 lf->filter_level[1] = 0;
4303static INLINE
int is_inter_tx_size_search_level_one(
4304 const TX_SPEED_FEATURES *tx_sf) {
4305 return (tx_sf->inter_tx_size_search_init_depth_rect >= 1 &&
4306 tx_sf->inter_tx_size_search_init_depth_sqr >= 1);
4310 int lpf_opt_level = 0;
4311 if (is_inter_tx_size_search_level_one(&sf->
tx_sf))
4312 lpf_opt_level = (sf->
lpf_sf.lpf_pick == LPF_PICK_FROM_Q) ? 2 : 1;
4313 return lpf_opt_level;
4317static INLINE
bool is_switchable_motion_mode_allowed(
bool allow_warped_motion,
4319 return (allow_warped_motion || enable_obmc);
4322#if CONFIG_AV1_TEMPORAL_DENOISING
4323static INLINE
int denoise_svc(
const struct AV1_COMP *
const cpi) {
4326 cpi->
svc.spatial_layer_id >= cpi->
svc.first_layer_denoise));
4330#if CONFIG_COLLECT_PARTITION_STATS == 2
4331static INLINE
void av1_print_fr_partition_timing_stats(
4332 const FramePartitionTimingStats *part_stats,
const char *filename) {
4333 FILE *f = fopen(filename,
"w");
4338 fprintf(f,
"bsize,redo,");
4339 for (
int part = 0; part < EXT_PARTITION_TYPES; part++) {
4340 fprintf(f,
"decision_%d,", part);
4342 for (
int part = 0; part < EXT_PARTITION_TYPES; part++) {
4343 fprintf(f,
"attempt_%d,", part);
4345 for (
int part = 0; part < EXT_PARTITION_TYPES; part++) {
4346 fprintf(f,
"time_%d,", part);
4350 static const int bsizes[6] = { 128, 64, 32, 16, 8, 4 };
4352 for (
int bsize_idx = 0; bsize_idx < 6; bsize_idx++) {
4353 fprintf(f,
"%d,%d,", bsizes[bsize_idx], part_stats->partition_redo);
4354 for (
int part = 0; part < EXT_PARTITION_TYPES; part++) {
4355 fprintf(f,
"%d,", part_stats->partition_decisions[bsize_idx][part]);
4357 for (
int part = 0; part < EXT_PARTITION_TYPES; part++) {
4358 fprintf(f,
"%d,", part_stats->partition_attempts[bsize_idx][part]);
4360 for (
int part = 0; part < EXT_PARTITION_TYPES; part++) {
4361 fprintf(f,
"%ld,", part_stats->partition_times[bsize_idx][part]);
4369#if CONFIG_COLLECT_PARTITION_STATS
4370static INLINE
int av1_get_bsize_idx_for_part_stats(BLOCK_SIZE bsize) {
4371 assert(bsize == BLOCK_128X128 || bsize == BLOCK_64X64 ||
4372 bsize == BLOCK_32X32 || bsize == BLOCK_16X16 || bsize == BLOCK_8X8 ||
4373 bsize == BLOCK_4X4);
4375 case BLOCK_128X128:
return 0;
4376 case BLOCK_64X64:
return 1;
4377 case BLOCK_32X32:
return 2;
4378 case BLOCK_16X16:
return 3;
4379 case BLOCK_8X8:
return 4;
4380 case BLOCK_4X4:
return 5;
4381 default: assert(0 &&
"Invalid bsize for partition_stats.");
return -1;
4386#if CONFIG_COLLECT_COMPONENT_TIMING
4387static INLINE
void start_timing(
AV1_COMP *cpi,
int component) {
4388 aom_usec_timer_start(&cpi->component_timer[component]);
4390static INLINE
void end_timing(
AV1_COMP *cpi,
int component) {
4391 aom_usec_timer_mark(&cpi->component_timer[component]);
4392 cpi->frame_component_time[component] +=
4393 aom_usec_timer_elapsed(&cpi->component_timer[component]);
4395static INLINE
char const *get_frame_type_enum(
int type) {
4397 case 0:
return "KEY_FRAME";
4398 case 1:
return "INTER_FRAME";
4399 case 2:
return "INTRA_ONLY_FRAME";
4400 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:217
@ COST_UPD_SBROW
Definition encoder.h:219
@ COST_UPD_TILE
Definition encoder.h:220
@ COST_UPD_OFF
Definition encoder.h:221
@ NUM_COST_UPDATE_TYPES
Definition encoder.h:222
@ COST_UPD_SB
Definition encoder.h:218
LOOPFILTER_CONTROL
This enum controls to which frames loopfilter is applied.
Definition encoder.h:228
@ LOOPFILTER_ALL
Definition encoder.h:230
@ LOOPFILTER_SELECTIVELY
Definition encoder.h:232
@ LOOPFILTER_REFERENCE
Definition encoder.h:231
@ LOOPFILTER_NONE
Definition encoder.h:229
#define NUM_RECODES_PER_FRAME
Max number of recodes used to track the frame probabilities.
Definition encoder.h:1588
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:240
#define MAX_PARALLEL_FRAMES
Max number of frames that can be encoded in a parallel encode set.
Definition encoder.h:1593
@ RESTORE_NONE
Definition enums.h:612
@ RESTORE_SWITCHABLE_TYPES
Definition enums.h:616
aom_dist_metric
Distortion metric to use for RD optimization.
Definition aomcx.h:1641
aom_tune_content
Definition aomcx.h:1602
enum aom_scaling_mode_1d AOM_SCALING_MODE
aom 1-D scaling mode
aom_tune_metric
Model tuning parameters.
Definition aomcx.h:1621
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:205
aom_rc_mode
Rate control mode.
Definition aom_encoder.h:183
aom_enc_pass
Multi-pass Encoding Pass.
Definition aom_encoder.h:174
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:375
@ AOM_RC_ONE_PASS
Definition aom_encoder.h:175
@ AOM_RC_SECOND_PASS
Definition aom_encoder.h:177
@ AOM_RC_FIRST_PASS
Definition aom_encoder.h:176
int av1_get_compressed_data(AV1_COMP *cpi, AV1_COMP_DATA *const cpi_data)
Encode a frame.
Definition encoder.c:4693
int av1_receive_raw_frame(AV1_COMP *cpi, aom_enc_frame_flags_t frame_flags, YV12_BUFFER_CONFIG *sd, int64_t time_stamp, int64_t end_time_stamp)
Obtain the raw frame data.
Definition encoder.c:4089
int av1_encode(AV1_COMP *const cpi, uint8_t *const dest, const EncodeFrameInput *const frame_input, const EncodeFrameParams *const frame_params, EncodeFrameResults *const frame_results)
Run 1-pass/2-pass encoding.
Definition encoder.c:3991
static int has_no_stats_stage(const AV1_COMP *const cpi)
Check if the current stage has statistics.
Definition encoder.h:3989
Describes look ahead buffer operations.
@ CDEF_PICK_FROM_Q
Definition speed_features.h:170
RestorationInfo rst_info[3]
Definition av1_common_int.h:948
int superres_upscaled_width
Definition av1_common_int.h:801
int superres_upscaled_height
Definition av1_common_int.h:802
SequenceHeader * seq_params
Definition av1_common_int.h:978
int width
Definition av1_common_int.h:777
CdefInfo cdef_info
Definition av1_common_int.h:957
CurrentFrame current_frame
Definition av1_common_int.h:756
int show_existing_frame
Definition av1_common_int.h:902
struct loopfilter lf
Definition av1_common_int.h:941
FeatureFlags features
Definition av1_common_int.h:907
int show_frame
Definition av1_common_int.h:887
RefCntBuffer * ref_frame_map[REF_FRAMES]
Definition av1_common_int.h:880
CommonTileParams tiles
Definition av1_common_int.h:994
int height
Definition av1_common_int.h:778
int render_width
Definition av1_common_int.h:788
int render_height
Definition av1_common_int.h:789
Encoder data related to multi-threading for allintra deltaq-mode=3.
Definition encoder.h:1558
pthread_mutex_t * mutex_
Definition encoder.h:1563
void(* intra_sync_read_ptr)(AV1EncRowMultiThreadSync *const, int, int)
Definition encoder.h:1577
pthread_cond_t * cond_
Definition encoder.h:1567
void(* intra_sync_write_ptr)(AV1EncRowMultiThreadSync *const, int, int, int)
Definition encoder.h:1581
Encoder data related to row-based multi-threading.
Definition encoder.h:1488
int allocated_sb_rows
Definition encoder.h:1527
pthread_mutex_t * mutex_
Definition encoder.h:1533
int allocated_tile_cols
Definition encoder.h:1496
int allocated_cols
Definition encoder.h:1510
int thread_id_to_tile_id[64]
Definition encoder.h:1515
void(* sync_write_ptr)(AV1EncRowMultiThreadSync *const, int, int, int)
Definition encoder.h:1551
pthread_cond_t * cond_
Definition encoder.h:1537
int allocated_tile_rows
Definition encoder.h:1492
int allocated_rows
Definition encoder.h:1503
int * num_tile_cols_done
Definition encoder.h:1521
void(* sync_read_ptr)(AV1EncRowMultiThreadSync *const, int, int)
Definition encoder.h:1547
Encoder parameters for synchronization of row based multi-threading.
Definition encoder.h:1375
int rows
Definition encoder.h:1408
int sync_range
Definition encoder.h:1397
int intrabc_extra_top_right_sb_delay
Definition encoder.h:1404
int next_mi_row
Definition encoder.h:1412
int * num_finished_cols
Definition encoder.h:1390
pthread_mutex_t * mutex_
Definition encoder.h:1381
pthread_cond_t * cond_
Definition encoder.h:1382
int num_threads_working
Definition encoder.h:1416
Main encoder configuration data structure.
Definition encoder.h:915
RateControlCfg rc_cfg
Definition encoder.h:937
KeyFrameCfg kf_cfg
Definition encoder.h:932
enum aom_enc_pass pass
Definition encoder.h:1040
AlgoCfg algo_cfg
Definition encoder.h:927
aom_fixed_buf_t twopass_stats_in
Definition encoder.h:954
Structure to hold data corresponding to an encoded frame.
Definition encoder.h:2464
int64_t ts_frame_end
Definition encoder.h:2493
int pop_lookahead
Definition encoder.h:2508
int64_t ts_frame_start
Definition encoder.h:2488
unsigned char * cx_data
Definition encoder.h:2468
size_t cx_data_sz
Definition encoder.h:2473
int flush
Definition encoder.h:2498
int frame_display_order_hint
Definition encoder.h:2513
unsigned int lib_flags
Definition encoder.h:2483
size_t frame_size
Definition encoder.h:2478
const aom_rational64_t * timestamp_ratio
Definition encoder.h:2503
Top level encoder structure.
Definition encoder.h:2815
double * ext_rate_distribution
Definition encoder.h:3455
int do_update_frame_probs_warp[10]
Definition encoder.h:3169
uint8_t * consec_zero_mv
Definition encoder.h:3365
int do_update_frame_probs_obmc[10]
Definition encoder.h:3164
struct aom_denoise_and_model_t * denoise_and_model
Definition encoder.h:3232
int skip_tpl_setup_stats
Definition encoder.h:2923
int frames_since_last_update
Definition encoder.h:3537
int * mb_delta_q
Definition encoder.h:3475
int vaq_refresh
Definition encoder.h:3139
FRAME_TYPE last_frame_type
Definition encoder.h:3330
YV12_BUFFER_CONFIG * unscaled_source
Definition encoder.h:2891
int palette_pixel_num
Definition encoder.h:3566
CYCLIC_REFRESH * cyclic_refresh
Definition encoder.h:3058
InitialDimensions initial_dimensions
Definition encoder.h:3106
RATE_CONTROL rc
Definition encoder.h:3017
int deltaq_used
Definition encoder.h:3288
ActiveMap active_map
Definition encoder.h:3063
WeberStats * mb_weber_stats
Definition encoder.h:3443
bool refresh_idx_available
Definition encoder.h:3408
TokenInfo token_info
Definition encoder.h:3134
int64_t ambient_err
Definition encoder.h:2986
aom_film_grain_table_t * film_grain_table
Definition encoder.h:3225
int ref_refresh_index
Definition encoder.h:3402
size_t available_bs_size
Definition encoder.h:3386
SPEED_FEATURES sf
Definition encoder.h:3037
TRELLIS_OPT_TYPE optimize_seg_arr[8]
Definition encoder.h:2869
ExtPartController ext_part_controller
Definition encoder.h:3392
FILE * second_pass_log_stream
Definition encoder.h:3509
double * ssim_rdmult_scaling_factors
Definition encoder.h:3300
RD_OPT rd
Definition encoder.h:2991
int num_tg
Definition encoder.h:3335
WinnerModeParams winner_mode_params
Definition encoder.h:3007
ExternalFlags ext_flags
Definition encoder.h:2969
EncSegmentationInfo enc_seg
Definition encoder.h:3053
MotionVectorSearchParams mv_search_params
Definition encoder.h:3042
int use_screen_content_tools
Definition encoder.h:3247
int do_update_frame_probs_interpfilter[10]
Definition encoder.h:3174
CODING_CONTEXT coding_context
Definition encoder.h:2997
TemporalFilterCtx tf_ctx
Definition encoder.h:2938
int image_pyramid_levels
Definition encoder.h:3548
ForceIntegerMVInfo force_intpel_info
Definition encoder.h:2943
GlobalMotionInfo gm_info
Definition encoder.h:3002
int consec_zero_mv_alloc_size
Definition encoder.h:3370
CoeffBufferPool coeff_buffer_pool
Definition encoder.h:2853
FRAME_INDEX_SET frame_index_set
Definition encoder.h:3101
int ref_frame_flags
Definition encoder.h:3027
RefCntBuffer * scaled_ref_buf[INTER_REFS_PER_FRAME]
Definition encoder.h:2949
unsigned char gf_frame_index
Definition encoder.h:3068
AV1EncoderConfig oxcf
Definition encoder.h:2863
AV1_COMMON common
Definition encoder.h:2858
AV1LrStruct lr_ctxt
Definition encoder.h:3220
bool do_frame_data_update
Definition encoder.h:3431
int do_update_frame_probs_txtype[10]
Definition encoder.h:3159
FRAME_COUNTS counts
Definition encoder.h:2835
COMPRESSOR_STAGE compressor_stage
Definition encoder.h:3324
int intrabc_used
Definition encoder.h:3210
int num_frame_recode
Definition encoder.h:3149
int rt_reduce_num_ref_buffers
Definition encoder.h:2964
RefreshFrameInfo refresh_frame
Definition encoder.h:2959
int prune_ref_frame_mask
Definition encoder.h:3215
YV12_BUFFER_CONFIG * unscaled_last_source
Definition encoder.h:2901
THIRD_PASS_DEC_CTX * third_pass_ctx
Definition encoder.h:3504
int all_one_sided_refs
Definition encoder.h:3048
MultiThreadInfo mt_info
Definition encoder.h:3198
VarBasedPartitionInfo vbp_info
Definition encoder.h:3144
YV12_BUFFER_CONFIG * last_source
Definition encoder.h:2885
int existing_fb_idx_to_show
Definition encoder.h:3205
YV12_BUFFER_CONFIG * unfiltered_source
Definition encoder.h:2912
unsigned int zeromv_skip_thresh_exit_part[BLOCK_SIZES_ALL]
Definition encoder.h:3542
FRAME_INFO frame_info
Definition encoder.h:3096
int frame_header_count
Definition encoder.h:3283
int droppable
Definition encoder.h:3091
RefCntBuffer * last_show_frame_buf
Definition encoder.h:2954
aom_superres_mode superres_mode
Definition encoder.h:3342
MBMIExtFrameBufferInfo mbmi_ext_info
Definition encoder.h:2840
double new_framerate
Definition encoder.h:3188
AV1_PRIMARY * ppi
Definition encoder.h:2819
uint64_t * src_sad_blk_64x64
Definition encoder.h:3514
int64_t norm_wiener_variance
Definition encoder.h:3470
double * tpl_rdmult_scaling_factors
Definition encoder.h:2933
int sb_counter
Definition encoder.h:3381
TileDataEnc * tile_data
Definition encoder.h:3125
int is_screen_content_type
Definition encoder.h:3255
BLOCK_SIZE weber_bsize
Definition encoder.h:3465
InterpSearchFlags interp_search_flags
Definition encoder.h:3238
TimeStamps time_stamps
Definition encoder.h:3012
int ref_idx_to_skip
Definition encoder.h:3415
YV12_BUFFER_CONFIG orig_source
Definition encoder.h:2918
FirstPassData firstpass_data
Definition encoder.h:3347
double framerate
Definition encoder.h:3022
int speed
Definition encoder.h:3032
BLOCK_SIZE fp_block_size
Definition encoder.h:3375
int use_ducky_encode
Definition encoder.h:3525
YV12_BUFFER_CONFIG trial_frame_rst
Definition encoder.h:2981
bool is_dropped_frame
Definition encoder.h:3480
ThreadData td
Definition encoder.h:2830
ResizePendingParams resize_pending_params
Definition encoder.h:3119
YV12_BUFFER_CONFIG scaled_source
Definition encoder.h:2896
int do_update_vbr_bits_off_target_fast
Definition encoder.h:3193
YV12_BUFFER_CONFIG last_frame_uf
Definition encoder.h:2975
EncQuantDequantParams enc_quant_dequant_params
Definition encoder.h:2825
RefFrameDistanceInfo ref_frame_dist_info
Definition encoder.h:3293
int * prep_rate_estimates
Definition encoder.h:3449
DuckyEncodeInfo ducky_encode_info
Definition encoder.h:3531
double ext_rate_scale
Definition encoder.h:3460
int initial_mbs
Definition encoder.h:3114
uint64_t rec_sse
Definition encoder.h:3519
YV12_BUFFER_CONFIG scaled_last_source
Definition encoder.h:2906
MV_STATS mv_stats
Definition encoder.h:3398
FrameProbInfo frame_new_probs[10]
Definition encoder.h:3154
YV12_BUFFER_CONFIG * source
Definition encoder.h:2876
int allocated_tiles
Definition encoder.h:3129
SVC svc
Definition encoder.h:3319
CB_COEFF_BUFFER * coeff_buffer_base
Definition encoder.h:2847
NOISE_ESTIMATE noise_estimate
Definition encoder.h:3352
TWO_PASS_FRAME twopass_frame
Definition encoder.h:3499
Top level primary encoder structure.
Definition encoder.h:2519
int num_fp_contexts
Definition encoder.h:2576
AV1EncRowMultiThreadSync intra_row_mt_sync
Definition encoder.h:2809
bool buffer_removal_time_present
Definition encoder.h:2690
int valid_gm_model_found[FRAME_UPDATE_TYPES]
Definition encoder.h:2798
struct aom_codec_pkt_list * output_pkt_list
Definition encoder.h:2620
int filter_level[2]
Definition encoder.h:2581
SequenceHeader seq_params
Definition encoder.h:2680
MV_STATS mv_stats
Definition encoder.h:2728
struct AV1_COMP * cpi
Definition encoder.h:2597
AV1LevelParams level_params
Definition encoder.h:2650
int internal_altref_allowed
Definition encoder.h:2625
RTC_REF rtc_ref
Definition encoder.h:2803
int b_calculate_psnr
Definition encoder.h:2655
PrimaryMultiThreadInfo p_mt_info
Definition encoder.h:2785
TEMPORAL_FILTER_INFO tf_info
Definition encoder.h:2675
TWO_PASS twopass
Definition encoder.h:2665
int frames_left
Definition encoder.h:2660
int64_t ts_start_last_show_frame
Definition encoder.h:2566
PRIMARY_RATE_CONTROL p_rc
Definition encoder.h:2670
int lap_enabled
Definition encoder.h:2645
FrameProbInfo frame_probs
Definition encoder.h:2790
int show_existing_alt_ref
Definition encoder.h:2630
int fb_of_context_type[REF_FRAMES]
Definition encoder.h:2780
int use_svc
Definition encoder.h:2685
double * tpl_sb_rdmult_scaling_factors
Definition encoder.h:2718
int filter_level_v
Definition encoder.h:2591
int filter_level_u
Definition encoder.h:2586
struct AV1_COMP * cpi_lap
Definition encoder.h:2602
struct AV1_COMP * parallel_cpi[4]
Definition encoder.h:2523
int64_t ts_end_last_show_frame
Definition encoder.h:2571
struct lookahead_ctx * lookahead
Definition encoder.h:2607
RefCntBuffer * ref_frame_map_copy[REF_FRAMES]
Definition encoder.h:2561
GF_STATE gf_state
Definition encoder.h:2640
aom_variance_fn_ptr_t fn_ptr[BLOCK_SIZES_ALL]
Definition encoder.h:2712
GF_GROUP gf_group
Definition encoder.h:2635
struct AV1_COMP_DATA parallel_frames_data[4 - 1]
Definition encoder.h:2529
TplParams tpl_data
Definition encoder.h:2723
unsigned int number_temporal_layers
Definition encoder.h:2695
unsigned int number_spatial_layers
Definition encoder.h:2700
int seq_params_locked
Definition encoder.h:2614
struct aom_internal_error_info error
Definition encoder.h:2705
Algorithm configuration parameters.
Definition encoder.h:809
int disable_trellis_quant
Definition encoder.h:825
int sharpness
Definition encoder.h:816
bool skip_postproc_filtering
Definition encoder.h:869
int arnr_max_frames
Definition encoder.h:830
bool enable_tpl_model
Definition encoder.h:848
LOOPFILTER_CONTROL loopfilter_control
Definition encoder.h:863
uint8_t cdf_update_mode
Definition encoder.h:843
bool enable_overlay
Definition encoder.h:854
int arnr_strength
Definition encoder.h:835
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:198
int cdef_bits
Number of CDEF strength values in bits.
Definition av1_common_int.h:220
int cdef_uv_strengths[16]
CDEF strength values for chroma.
Definition av1_common_int.h:218
int cdef_strengths[16]
CDEF strength values for luma.
Definition av1_common_int.h:216
int nb_cdef_strengths
Number of CDEF strength values.
Definition av1_common_int.h:214
Definition encoder.h:2370
uint8_t * entropy_ctx
Definition encoder.h:2382
tran_low_t * tcoeff
Definition encoder.h:2374
uint16_t * eobs
Definition encoder.h:2378
Params related to MB_MODE_INFO arrays and related info.
Definition av1_common_int.h:503
BLOCK_SIZE mi_alloc_bsize
Definition av1_common_int.h:552
int cols
Definition av1_common_int.h:430
unsigned int large_scale
Definition av1_common_int.h:490
Encoder flags for compound prediction modes.
Definition encoder.h:395
bool enable_masked_comp
Definition encoder.h:404
bool enable_diff_wtd_comp
Definition encoder.h:412
bool enable_smooth_interintra
Definition encoder.h:408
bool enable_interintra_wedge
Definition encoder.h:420
bool enable_interinter_wedge
Definition encoder.h:416
bool enable_dist_wtd_comp
Definition encoder.h:399
Segmentation related information for the current frame.
Definition encoder.h:2333
uint8_t * map
Definition encoder.h:2339
bool has_lossless_segment
Definition encoder.h:2345
contains per-frame encoding parameters decided upon by av1_encode_strategy() and passed down to av1_e...
Definition encoder.h:3584
int error_resilient_mode
Definition encoder.h:3588
int remapped_ref_idx[REF_FRAMES]
Definition encoder.h:3619
int ref_frame_flags
Definition encoder.h:3614
int speed
Definition encoder.h:3630
FRAME_TYPE frame_type
Definition encoder.h:3592
int show_frame
Definition encoder.h:3602
RefreshFrameInfo refresh_frame
Definition encoder.h:3625
Frame refresh flags set by the external interface.
Definition encoder.h:2200
bool golden_frame
Definition encoder.h:2202
bool bwd_ref_frame
Definition encoder.h:2203
bool update_pending
Definition encoder.h:2209
bool last_frame
Definition encoder.h:2201
bool alt_ref_frame
Definition encoder.h:2205
bool alt2_ref_frame
Definition encoder.h:2204
Flags signalled by the external interface at frame level.
Definition encoder.h:2215
bool use_primary_ref_none
Definition encoder.h:2256
bool use_ref_frame_mvs
Definition encoder.h:2240
ExtRefreshFrameFlagsInfo refresh_frame
Definition encoder.h:2224
int ref_frame_flags
Definition encoder.h:2219
bool use_error_resilient
Definition encoder.h:2245
bool use_s_frame
Definition encoder.h:2250
bool refresh_frame_context
Definition encoder.h:2229
bool refresh_frame_context_pending
Definition encoder.h:2235
Frame level features.
Definition av1_common_int.h:360
bool allow_screen_content_tools
Definition av1_common_int.h:377
bool allow_intrabc
Definition av1_common_int.h:378
bool coded_lossless
Definition av1_common_int.h:387
bool error_resilient_mode
Definition av1_common_int.h:402
bool all_lossless
Definition av1_common_int.h:391
Encoder info used for decision on forcing integer motion vectors.
Definition encoder.h:1780
double cs_rate_array[32]
Definition encoder.h:1785
int rate_size
Definition encoder.h:1793
int rate_index
Definition encoder.h:1789
Encoder-side probabilities for pruning of various AV1 tools.
Definition encoder.h:1103
int switchable_interp_probs[FRAME_UPDATE_TYPES][((SWITCHABLE_FILTERS+1) *4)][SWITCHABLE_FILTERS]
Definition encoder.h:1133
int obmc_probs[FRAME_UPDATE_TYPES][BLOCK_SIZES_ALL]
Definition encoder.h:1109
int warped_probs[FRAME_UPDATE_TYPES]
Definition encoder.h:1116
int tx_type_probs[FRAME_UPDATE_TYPES][TX_SIZES_ALL][TX_TYPES]
Definition encoder.h:1124
Data related to the current GF/ARF group and the individual frames within the group.
Definition firstpass.h:354
Parameters related to global motion search.
Definition encoder.h:1989
FrameDistPair reference_frames[2][REF_FRAMES - 1]
Definition encoder.h:2015
bool search_done
Definition encoder.h:1993
int segment_map_h
Definition encoder.h:2022
int num_ref_frames[2]
Definition encoder.h:2007
YV12_BUFFER_CONFIG * ref_buf[REF_FRAMES]
Definition encoder.h:2000
int segment_map_w
Definition encoder.h:2021
Initial frame dimensions.
Definition encoder.h:2035
int height
Definition encoder.h:2037
int width
Definition encoder.h:2036
Flags related to interpolation filter search.
Definition encoder.h:2043
int default_interp_skip_flags
Definition encoder.h:2048
uint16_t interp_filter_search_mask
Definition encoder.h:2052
Encoder flags for intra prediction.
Definition encoder.h:298
bool enable_diagonal_intra
Definition encoder.h:328
bool enable_smooth_intra
Definition encoder.h:311
bool auto_intra_tools_off
Definition encoder.h:347
bool enable_filter_intra
Definition encoder.h:307
bool enable_directional_intra
Definition encoder.h:323
bool enable_paeth_intra
Definition encoder.h:315
bool enable_intra_edge_filter
Definition encoder.h:302
bool enable_cfl_intra
Definition encoder.h:319
bool enable_angle_delta
Definition encoder.h:333
Encoder config related to the coding of key frames.
Definition encoder.h:462
int key_freq_max
Definition encoder.h:471
int sframe_mode
Definition encoder.h:489
bool auto_key
Definition encoder.h:494
bool enable_intrabc
Definition encoder.h:514
int sframe_dist
Definition encoder.h:482
bool enable_sframe
Definition encoder.h:509
int enable_keyframe_filtering
Definition encoder.h:476
int fwd_kf_dist
Definition encoder.h:499
int key_freq_min
Definition encoder.h:466
bool fwd_kf_enabled
Definition encoder.h:504
Buffer to store mode information at mi_alloc_bsize (4x4 or 8x8) level.
Definition encoder.h:1826
int alloc_size
Definition encoder.h:1835
int stride
Definition encoder.h:1839
MB_MODE_INFO_EXT_FRAME * frame_base
Definition encoder.h:1831
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:2058
int max_mv_magnitude
Definition encoder.h:2064
fractional_mv_step_fp * find_fractional_mv_step
Definition encoder.h:2078
int mv_step_param
Definition encoder.h:2069
search_site_config search_site_cfg[SS_CFG_TOTAL][NUM_DISTINCT_SEARCH_METHODS]
Definition encoder.h:2085
Encoder parameters related to multi-threading.
Definition encoder.h:1671
RestoreStateBuffers restore_state_buf
Definition encoder.h:1758
AV1CdefWorkerData * cdef_worker
Definition encoder.h:1753
AV1LrSync lr_row_sync
Definition encoder.h:1728
struct EncWorkerData * tile_thr_data
Definition encoder.h:1691
AV1TplRowMultiThreadInfo tpl_row_mt
Definition encoder.h:1718
AV1EncPackBSSync pack_bs_sync
Definition encoder.h:1733
AV1EncRowMultiThreadInfo enc_row_mt
Definition encoder.h:1707
AV1LfSync lf_row_sync
Definition encoder.h:1723
AV1CdefSync cdef_sync
Definition encoder.h:1748
int num_mod_workers[NUM_MT_MODULES]
Definition encoder.h:1680
AV1EncAllIntraMultiThreadInfo intra_mt
Definition encoder.h:1713
int num_workers
Definition encoder.h:1675
int pipeline_lpf_mt_with_enc
Definition encoder.h:1764
AVxWorker * workers
Definition encoder.h:1685
bool pack_bs_mt_enabled
Definition encoder.h:1702
bool row_mt_enabled
Definition encoder.h:1697
AV1TemporalFilterSync tf_sync
Definition encoder.h:1743
AV1GlobalMotionSync gm_sync
Definition encoder.h:1738
Primary Rate Control parameters and status.
Definition ratectrl.h:286
Encoder config for coding block partitioning.
Definition encoder.h:270
bool enable_rect_partitions
Definition encoder.h:274
bool enable_1to4_partitions
Definition encoder.h:282
BLOCK_SIZE max_partition_size
Definition encoder.h:292
bool enable_ab_partitions
Definition encoder.h:278
BLOCK_SIZE min_partition_size
Definition encoder.h:287
Primary Encoder parameters related to multi-threading.
Definition encoder.h:1624
struct EncWorkerData * tile_thr_data
Definition encoder.h:1644
AV1CdefWorkerData * cdef_worker
Definition encoder.h:1649
int num_workers
Definition encoder.h:1628
int prev_num_enc_workers
Definition encoder.h:1665
AVxWorker * workers
Definition encoder.h:1638
AVxWorker * p_workers[4]
Definition encoder.h:1655
int p_num_workers
Definition encoder.h:1660
int num_mod_workers[NUM_MT_MODULES]
Definition encoder.h:1633
Rate Control parameters and status.
Definition ratectrl.h:134
Encoder rate control configuration parameters.
Definition encoder.h:520
int worst_allowed_q
Definition encoder.h:590
int over_shoot_pct
Definition encoder.h:585
unsigned int max_intra_bitrate_pct
Definition encoder.h:555
int drop_frames_water_mark
Definition encoder.h:573
int vbrmax_section
Definition encoder.h:621
int64_t maximum_buffer_size_ms
Definition encoder.h:539
unsigned int vbr_corpus_complexity_lap
Definition encoder.h:550
unsigned int min_cr
Definition encoder.h:569
int vbrbias
Definition encoder.h:611
unsigned int gf_cbr_boost_pct
Definition encoder.h:564
int vbrmin_section
Definition encoder.h:616
enum aom_rc_mode mode
Definition encoder.h:604
unsigned int max_inter_bitrate_pct
Definition encoder.h:560
int64_t starting_buffer_level_ms
Definition encoder.h:529
int best_allowed_q
Definition encoder.h:595
int under_shoot_pct
Definition encoder.h:579
int64_t target_bandwidth
Definition encoder.h:544
int64_t optimal_buffer_level_ms
Definition encoder.h:534
int cq_level
Definition encoder.h:599
Refrence frame distance related variables.
Definition encoder.h:2117
int8_t nearest_past_ref
Definition encoder.h:2125
int ref_relative_dist[INTER_REFS_PER_FRAME]
Definition encoder.h:2121
int8_t nearest_future_ref
Definition encoder.h:2129
Refresh frame flags for different type of frames.
Definition encoder.h:2096
bool bwd_ref_frame
Definition encoder.h:2098
bool golden_frame
Definition encoder.h:2097
bool alt_ref_frame
Definition encoder.h:2099
Encoder config related to resize.
Definition encoder.h:250
uint8_t resize_scale_denominator
Definition encoder.h:259
uint8_t resize_kf_scale_denominator
Definition encoder.h:264
RESIZE_MODE resize_mode
Definition encoder.h:254
Desired dimensions for an externally triggered resize.
Definition encoder.h:2109
int width
Definition encoder.h:2110
int height
Definition encoder.h:2111
Parameters related to Restoration Info.
Definition restoration.h:256
RestorationType frame_restoration_type
Definition restoration.h:260
Buffers to be backed up during parallel encode set to be restored later.
Definition encoder.h:1599
int32_t * rst_tmpbuf
Definition encoder.h:1613
RestorationLineBuffers * rlbs
Definition encoder.h:1618
uint16_t * cdef_colbuf[3]
Definition encoder.h:1608
uint16_t * cdef_srcbuf
Definition encoder.h:1603
Top level speed vs quality trade off data struture.
Definition speed_features.h:1808
MV_SPEED_FEATURES mv_sf
Definition speed_features.h:1837
LOOP_FILTER_SPEED_FEATURES lpf_sf
Definition speed_features.h:1872
TX_SPEED_FEATURES tx_sf
Definition speed_features.h:1857
REAL_TIME_SPEED_FEATURES rt_sf
Definition speed_features.h:1877
The stucture of SVC.
Definition svc_layercontext.h:88
Encoder config related to frame super-resolution.
Definition encoder.h:426
uint8_t superres_kf_scale_denominator
Definition encoder.h:448
aom_superres_mode superres_mode
Definition encoder.h:452
int superres_kf_qthresh
Definition encoder.h:436
bool enable_superres
Definition encoder.h:456
uint8_t superres_scale_denominator
Definition encoder.h:442
int superres_qthresh
Definition encoder.h:431
Temporal filter info for a gop.
Definition temporal_filter.h:159
Frame level Two pass status and control data.
Definition firstpass.h:473
Two pass status and control data.
Definition firstpass.h:431
Parameters related to temporal filtering.
Definition temporal_filter.h:96
Frame time stamps.
Definition encoder.h:2351
int64_t prev_ts_start
Definition encoder.h:2355
int64_t first_ts_start
Definition encoder.h:2363
int64_t prev_ts_end
Definition encoder.h:2359
Params related to temporal dependency model.
Definition tpl_model.h:146
Encoder flags for transform sizes and types.
Definition encoder.h:353
bool enable_tx64
Definition encoder.h:357
bool use_inter_dct_only
Definition encoder.h:380
bool enable_flip_idtx
Definition encoder.h:361
bool use_intra_default_tx_only
Definition encoder.h:385
bool use_intra_dct_only
Definition encoder.h:375
bool enable_rect_tx
Definition encoder.h:365
bool reduced_tx_type_set
Definition encoder.h:370
bool enable_tx_size_search
Definition encoder.h:389
Thresholds for variance based partitioning.
Definition encoder.h:1354
int64_t thresholds[5]
Definition encoder.h:1363
int64_t threshold_minmax
Definition encoder.h:1369
Parameters used for winner mode processing.
Definition encoder.h:2147
unsigned int use_transform_domain_distortion[MODE_EVAL_TYPES]
Definition encoder.h:2169
TX_SIZE_SEARCH_METHOD tx_size_search_methods[MODE_EVAL_TYPES]
Definition encoder.h:2161
unsigned int skip_txfm_level[MODE_EVAL_TYPES]
Definition encoder.h:2183
unsigned int coeff_opt_thresholds[MODE_EVAL_TYPES][2]
Definition encoder.h:2155
unsigned int tx_domain_dist_threshold[MODE_EVAL_TYPES]
Definition encoder.h:2176
unsigned int predict_dc_level[MODE_EVAL_TYPES]
Definition encoder.h:2190
Struct used to hold inter mode data for fast tx search.
Definition encoder.h:1259
RD_STATS rd_cost_arr[MAX_INTER_MODES]
Definition encoder.h:1288
int64_t est_rd_arr[MAX_INTER_MODES]
Definition encoder.h:1280
int64_t sse_arr[MAX_INTER_MODES]
Definition encoder.h:1276
RD_STATS rd_cost_y_arr[MAX_INTER_MODES]
Definition encoder.h:1292
RD_STATS rd_cost_uv_arr[MAX_INTER_MODES]
Definition encoder.h:1296
MB_MODE_INFO mbmi_arr[MAX_INTER_MODES]
Definition encoder.h:1268
RdIdxPair rd_idx_pair_arr[MAX_INTER_MODES]
Definition encoder.h:1284
int mode_rate_arr[MAX_INTER_MODES]
Definition encoder.h:1272
int num
Definition encoder.h:1264
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