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/resize.h"
31#include "av1/common/thread_common.h"
32#include "av1/common/timing.h"
33#include "av1/encoder/aq_cyclicrefresh.h"
34#include "av1/encoder/av1_quantize.h"
36#include "av1/encoder/context_tree.h"
37#include "av1/encoder/encodemb.h"
38#include "av1/encoder/firstpass.h"
39#include "av1/encoder/global_motion.h"
40#include "av1/encoder/level.h"
42#include "av1/encoder/mcomp.h"
43#include "av1/encoder/pickcdef.h"
44#include "av1/encoder/ratectrl.h"
45#include "av1/encoder/rd.h"
47#include "av1/encoder/svc_layercontext.h"
48#include "av1/encoder/temporal_filter.h"
49#include "av1/encoder/tokenize.h"
50#include "av1/encoder/tpl_model.h"
51#include "av1/encoder/av1_noise_estimate.h"
53#if CONFIG_INTERNAL_STATS
54#include "aom_dsp/ssim.h"
56#include "aom_dsp/variance.h"
58#include "aom_dsp/noise_model.h"
61#include "av1/encoder/tune_vmaf.h"
63#if CONFIG_AV1_TEMPORAL_DENOISING
64#include "av1/encoder/av1_temporal_denoiser.h"
66#if CONFIG_TUNE_BUTTERAUGLI
67#include "av1/encoder/tune_butteraugli.h"
70#include "aom/internal/aom_codec_internal.h"
71#include "aom_util/aom_thread.h"
81#define SCENE_CUT_KEY_TEST_INTERVAL 16
85typedef struct aom_rational64 {
98} UENUM1BYTE(AOM_SCALING);
112 FRAMEFLAGS_KEY = 1 << 0,
113 FRAMEFLAGS_GOLDEN = 1 << 1,
114 FRAMEFLAGS_BWDREF = 1 << 2,
116 FRAMEFLAGS_ALTREF = 1 << 3,
117 FRAMEFLAGS_INTRAONLY = 1 << 4,
118 FRAMEFLAGS_SWITCH = 1 << 5,
119 FRAMEFLAGS_ERROR_RESILIENT = 1 << 6,
120} UENUM1BYTE(FRAMETYPE_FLAGS);
126 CYCLIC_REFRESH_AQ = 3,
128} UENUM1BYTE(AQ_MODE);
131 DELTA_Q_OBJECTIVE = 1,
132 DELTA_Q_PERCEPTUAL = 2,
134} UENUM1BYTE(DELTAQ_MODE);
142} UENUM1BYTE(RESIZE_MODE);
146 SS_CFG_LOOKAHEAD = 1,
149} UENUM1BYTE(SS_CFG_OFFSET);
153 ENABLE_SCENECUT_MODE_1,
154 ENABLE_SCENECUT_MODE_2
155} UENUM1BYTE(SCENECUT_MODE);
157#define MAX_VBR_CORPUS_COMPLEXITY 10000
171} MULTI_THREADED_MODULES;
192 RESIZE_MODE resize_mode;
197 uint8_t resize_scale_denominator;
202 uint8_t resize_kf_scale_denominator;
212 bool enable_rect_partitions;
216 bool enable_ab_partitions;
220 bool enable_1to4_partitions;
225 BLOCK_SIZE min_partition_size;
230 BLOCK_SIZE max_partition_size;
240 bool enable_intra_edge_filter;
245 bool enable_filter_intra;
249 bool enable_smooth_intra;
253 bool enable_paeth_intra;
257 bool enable_cfl_intra;
261 bool enable_diagonal_intra;
266 bool enable_angle_delta;
280 bool enable_flip_idtx;
289 bool reduced_tx_type_set;
294 bool use_intra_dct_only;
299 bool use_inter_dct_only;
304 bool use_intra_default_tx_only;
314 bool enable_dist_wtd_comp;
319 bool enable_masked_comp;
323 bool enable_smooth_interintra;
327 bool enable_diff_wtd_comp;
331 bool enable_interinter_wedge;
335 bool enable_interintra_wedge;
346 int superres_qthresh;
351 int superres_kf_qthresh;
357 uint8_t superres_scale_denominator;
363 uint8_t superres_kf_scale_denominator;
371 bool enable_superres;
391 int enable_keyframe_filtering;
439 int64_t starting_buffer_level_ms;
444 int64_t optimal_buffer_level_ms;
449 int64_t maximum_buffer_size_ms;
454 int64_t target_bandwidth;
460 unsigned int vbr_corpus_complexity_lap;
465 unsigned int max_intra_bitrate_pct;
470 unsigned int max_inter_bitrate_pct;
474 unsigned int gf_cbr_boost_pct;
483 int drop_frames_water_mark;
543 int gf_min_pyr_height;
545 int gf_max_pyr_height;
547 bool enable_auto_arf;
550 bool enable_auto_brf;
555 unsigned int num_tile_groups;
564 int tile_width_count;
566 int tile_height_count;
568 int tile_widths[MAX_TILE_COLS];
570 int tile_heights[MAX_TILE_ROWS];
572 bool enable_large_scale_tile;
574 bool enable_single_tile_decoding;
576 bool enable_ext_tile_debug;
586 int forced_max_frame_width;
589 int forced_max_frame_height;
600 bool enable_warped_motion;
602 bool allow_warped_motion;
609 aom_timing_info_t timing_info;
611 uint32_t num_units_in_decoding_tick;
614 bool decoder_model_info_present_flag;
617 bool display_model_info_present_flag;
619 bool timing_info_present;
624 COST_UPDATE_TYPE coeff;
626 COST_UPDATE_TYPE mode;
635 unsigned int max_reference_frames;
637 bool enable_reduced_reference_set;
639 bool enable_onesided_comp;
657 unsigned int motion_vector_unit_test;
659 unsigned int sb_multipass_unit_test;
664 const char *vmaf_model_path;
666 const char *film_grain_table_filename;
672 int film_grain_test_vector;
677 double init_framerate;
679 unsigned int input_bit_depth;
683 unsigned int chroma_subsampling_x;
685 unsigned int chroma_subsampling_y;
696 int use_fixed_qp_offsets;
706 DELTAQ_MODE deltaq_mode;
708 bool enable_chroma_deltaq;
730 int disable_trellis_quant;
748 uint8_t cdf_update_mode;
753 bool enable_tpl_model;
769 bool enable_deltalf_mode;
773 bool enable_restoration;
775 bool force_video_mode;
777 bool error_resilient_mode;
779 bool frame_parallel_decoding_mode;
781 bool enable_monochrome;
784 bool full_still_picture_hdr;
786 bool enable_dual_filter;
788 bool enable_order_hint;
790 bool ref_frame_mvs_present;
792 bool enable_ref_frame_mvs;
794 bool enable_interintra_comp;
796 bool enable_global_motion;
805typedef struct AV1EncoderConfig {
811 FrameDimensionCfg frm_dim_cfg;
827 RateControlCfg rc_cfg;
831 QuantizationCfg q_cfg;
834 ResizeCfg resize_cfg;
837 SuperResCfg superres_cfg;
863 DecoderModelCfg dec_model_cfg;
866 RefFrameCfg ref_frm_cfg;
869 UnitTestCfg unit_test_cfg;
872 MotionModeCfg motion_mode_cfg;
875 IntraModeCfg intra_mode_cfg;
878 TxfmSizeTypeCfg txfm_cfg;
881 CompoundTypeCfg comp_type_cfg;
884 PartitionCfg part_cfg;
887 CostUpdateFreq cost_upd_freq;
893 int noise_block_size;
895 int enable_dnl_denoising;
898#if CONFIG_AV1_TEMPORAL_DENOISING
900 int noise_sensitivity;
904 unsigned int tier_mask;
908 int border_in_pixels;
917 AV1_LEVEL target_seq_level_idx[MAX_NUM_OPERATING_POINTS];
920 BITSTREAM_PROFILE profile;
941 bool use_highbitdepth;
952static INLINE
int is_lossless_requested(
const RateControlCfg *
const rc_cfg) {
953 return rc_cfg->best_allowed_q == 0 && rc_cfg->worst_allowed_q == 0;
966 int obmc_probs[FRAME_UPDATE_TYPES][BLOCK_SIZES_ALL];
973 int warped_probs[FRAME_UPDATE_TYPES];
981 int tx_type_probs[FRAME_UPDATE_TYPES][TX_SIZES_ALL][TX_TYPES];
989 int switchable_interp_probs[FRAME_UPDATE_TYPES][SWITCHABLE_FILTER_CONTEXTS]
990 [SWITCHABLE_FILTERS];
995typedef struct FRAME_COUNTS {
998#if CONFIG_ENTROPY_STATS
999 unsigned int kf_y_mode[KF_MODE_CONTEXTS][KF_MODE_CONTEXTS][INTRA_MODES];
1000 unsigned int angle_delta[DIRECTIONAL_MODES][2 * MAX_ANGLE_DELTA + 1];
1001 unsigned int y_mode[BLOCK_SIZE_GROUPS][INTRA_MODES];
1002 unsigned int uv_mode[CFL_ALLOWED_TYPES][INTRA_MODES][UV_INTRA_MODES];
1003 unsigned int cfl_sign[CFL_JOINT_SIGNS];
1004 unsigned int cfl_alpha[CFL_ALPHA_CONTEXTS][CFL_ALPHABET_SIZE];
1005 unsigned int palette_y_mode[PALATTE_BSIZE_CTXS][PALETTE_Y_MODE_CONTEXTS][2];
1006 unsigned int palette_uv_mode[PALETTE_UV_MODE_CONTEXTS][2];
1007 unsigned int palette_y_size[PALATTE_BSIZE_CTXS][PALETTE_SIZES];
1008 unsigned int palette_uv_size[PALATTE_BSIZE_CTXS][PALETTE_SIZES];
1009 unsigned int palette_y_color_index[PALETTE_SIZES]
1010 [PALETTE_COLOR_INDEX_CONTEXTS]
1012 unsigned int palette_uv_color_index[PALETTE_SIZES]
1013 [PALETTE_COLOR_INDEX_CONTEXTS]
1015 unsigned int partition[PARTITION_CONTEXTS][EXT_PARTITION_TYPES];
1016 unsigned int txb_skip[TOKEN_CDF_Q_CTXS][TX_SIZES][TXB_SKIP_CONTEXTS][2];
1017 unsigned int eob_extra[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1018 [EOB_COEF_CONTEXTS][2];
1019 unsigned int dc_sign[PLANE_TYPES][DC_SIGN_CONTEXTS][2];
1020 unsigned int coeff_lps[TX_SIZES][PLANE_TYPES][BR_CDF_SIZE - 1][LEVEL_CONTEXTS]
1022 unsigned int eob_flag[TX_SIZES][PLANE_TYPES][EOB_COEF_CONTEXTS][2];
1023 unsigned int eob_multi16[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][5];
1024 unsigned int eob_multi32[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][6];
1025 unsigned int eob_multi64[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][7];
1026 unsigned int eob_multi128[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][8];
1027 unsigned int eob_multi256[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][9];
1028 unsigned int eob_multi512[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][10];
1029 unsigned int eob_multi1024[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][11];
1030 unsigned int coeff_lps_multi[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1031 [LEVEL_CONTEXTS][BR_CDF_SIZE];
1032 unsigned int coeff_base_multi[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1033 [SIG_COEF_CONTEXTS][NUM_BASE_LEVELS + 2];
1034 unsigned int coeff_base_eob_multi[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1035 [SIG_COEF_CONTEXTS_EOB][NUM_BASE_LEVELS + 1];
1036 unsigned int newmv_mode[NEWMV_MODE_CONTEXTS][2];
1037 unsigned int zeromv_mode[GLOBALMV_MODE_CONTEXTS][2];
1038 unsigned int refmv_mode[REFMV_MODE_CONTEXTS][2];
1039 unsigned int drl_mode[DRL_MODE_CONTEXTS][2];
1040 unsigned int inter_compound_mode[INTER_MODE_CONTEXTS][INTER_COMPOUND_MODES];
1041 unsigned int wedge_idx[BLOCK_SIZES_ALL][16];
1042 unsigned int interintra[BLOCK_SIZE_GROUPS][2];
1043 unsigned int interintra_mode[BLOCK_SIZE_GROUPS][INTERINTRA_MODES];
1044 unsigned int wedge_interintra[BLOCK_SIZES_ALL][2];
1045 unsigned int compound_type[BLOCK_SIZES_ALL][MASKED_COMPOUND_TYPES];
1046 unsigned int motion_mode[BLOCK_SIZES_ALL][MOTION_MODES];
1047 unsigned int obmc[BLOCK_SIZES_ALL][2];
1048 unsigned int intra_inter[INTRA_INTER_CONTEXTS][2];
1049 unsigned int comp_inter[COMP_INTER_CONTEXTS][2];
1050 unsigned int comp_ref_type[COMP_REF_TYPE_CONTEXTS][2];
1051 unsigned int uni_comp_ref[UNI_COMP_REF_CONTEXTS][UNIDIR_COMP_REFS - 1][2];
1052 unsigned int single_ref[REF_CONTEXTS][SINGLE_REFS - 1][2];
1053 unsigned int comp_ref[REF_CONTEXTS][FWD_REFS - 1][2];
1054 unsigned int comp_bwdref[REF_CONTEXTS][BWD_REFS - 1][2];
1055 unsigned int intrabc[2];
1057 unsigned int txfm_partition[TXFM_PARTITION_CONTEXTS][2];
1058 unsigned int intra_tx_size[MAX_TX_CATS][TX_SIZE_CONTEXTS][MAX_TX_DEPTH + 1];
1059 unsigned int skip_mode[SKIP_MODE_CONTEXTS][2];
1060 unsigned int skip_txfm[SKIP_CONTEXTS][2];
1061 unsigned int compound_index[COMP_INDEX_CONTEXTS][2];
1062 unsigned int comp_group_idx[COMP_GROUP_IDX_CONTEXTS][2];
1063 unsigned int delta_q[DELTA_Q_PROBS][2];
1064 unsigned int delta_lf_multi[FRAME_LF_COUNT][DELTA_LF_PROBS][2];
1065 unsigned int delta_lf[DELTA_LF_PROBS][2];
1067 unsigned int inter_ext_tx[EXT_TX_SETS_INTER][EXT_TX_SIZES][TX_TYPES];
1068 unsigned int intra_ext_tx[EXT_TX_SETS_INTRA][EXT_TX_SIZES][INTRA_MODES]
1070 unsigned int filter_intra_mode[FILTER_INTRA_MODES];
1071 unsigned int filter_intra[BLOCK_SIZES_ALL][2];
1073 unsigned int wiener_restore[2];
1074 unsigned int sgrproj_restore[2];
1077 unsigned int switchable_interp[SWITCHABLE_FILTER_CONTEXTS]
1078 [SWITCHABLE_FILTERS];
1081#define INTER_MODE_RD_DATA_OVERALL_SIZE 6400
1090 double sse_sse_mean;
1106#define MAX_INTER_MODES 1024
1116typedef struct inter_modes_info {
1125 MB_MODE_INFO mbmi_arr[MAX_INTER_MODES];
1129 int mode_rate_arr[MAX_INTER_MODES];
1133 int64_t sse_arr[MAX_INTER_MODES];
1137 int64_t est_rd_arr[MAX_INTER_MODES];
1141 RdIdxPair rd_idx_pair_arr[MAX_INTER_MODES];
1145 RD_STATS rd_cost_arr[MAX_INTER_MODES];
1149 RD_STATS rd_cost_y_arr[MAX_INTER_MODES];
1153 RD_STATS rd_cost_uv_arr[MAX_INTER_MODES];
1164 uint32_t sum_square_error;
1177 VPVariance part_variances;
1182 VPVariance part_variances;
1187 VPVariance part_variances;
1192 VPVariance part_variances;
1197 VPVariance part_variances;
1202 VPVariance part_variances;
1220 int64_t thresholds[5];
1226 int64_t threshold_minmax;
1227} VarBasedPartitionInfo;
1233#if CONFIG_MULTITHREAD
1238 pthread_mutex_t *mutex_;
1239 pthread_cond_t *cond_;
1247 int *num_finished_cols;
1265 int num_threads_working;
1266} AV1EncRowMultiThreadSync;
1271typedef struct TileDataEnc {
1273 DECLARE_ALIGNED(16, FRAME_CONTEXT, tctx);
1274 FRAME_CONTEXT *row_ctx;
1275 uint8_t allow_update_cdf;
1276 InterModeRdModel inter_mode_rd_models[BLOCK_SIZES_ALL];
1277 AV1EncRowMultiThreadSync row_mt_sync;
1278 MV firstpass_top_mv;
1281typedef struct RD_COUNTS {
1282 int64_t comp_pred_diff[REFERENCE_MODES];
1283 int compound_ref_used_flag;
1284 int skip_mode_used_flag;
1285 int tx_type_used[TX_SIZES_ALL][TX_TYPES];
1286 int obmc_used[BLOCK_SIZES_ALL][2];
1290typedef struct ThreadData {
1292 RD_COUNTS rd_counts;
1293 FRAME_COUNTS *counts;
1294 PC_TREE_SHARED_BUFFERS shared_coeff_buf;
1295 SIMPLE_MOTION_DATA_TREE *sms_tree;
1296 SIMPLE_MOTION_DATA_TREE *sms_root;
1297 InterModesInfo *inter_modes_info;
1298 uint32_t *hash_value_buffer[2][2];
1299 OBMCBuffer obmc_buffer;
1300 PALETTE_BUFFER *palette_buffer;
1301 CompoundTypeRdBuffers comp_rd_buffer;
1302 CONV_BUF_TYPE *tmp_conv_dst;
1303 uint8_t *tmp_pred_bufs[2];
1306 FRAME_CONTEXT *tctx;
1308 int32_t num_64x64_blocks;
1309 PICK_MODE_CONTEXT *firstpass_ctx;
1310 TemporalFilterData tf_data;
1311 TplTxfmStats tpl_txfm_stats;
1314struct EncWorkerData;
1325 int allocated_tile_rows;
1329 int allocated_tile_cols;
1348 int thread_id_to_tile_id[MAX_NUM_THREADS];
1350#if CONFIG_MULTITHREAD
1354 pthread_mutex_t *mutex_;
1364 void (*sync_read_ptr)(AV1EncRowMultiThreadSync *
const, int, int);
1368 void (*sync_write_ptr)(AV1EncRowMultiThreadSync *
const, int, int, int);
1370} AV1EncRowMultiThreadInfo;
1375typedef struct MultiThreadInfo {
1384 int num_mod_workers[NUM_MT_MODULES];
1390 int fp_mt_buf_init_done;
1396 int enc_mt_buf_init_done;
1407 struct EncWorkerData *tile_thr_data;
1413 bool row_mt_enabled;
1418 AV1EncRowMultiThreadInfo enc_row_mt;
1423 AV1TplRowMultiThreadInfo tpl_row_mt;
1428 AV1LfSync lf_row_sync;
1433 AV1LrSync lr_row_sync;
1438 AV1GlobalMotionSync gm_sync;
1443 AV1TemporalFilterSync tf_sync;
1448 AV1CdefSync cdef_sync;
1453typedef struct ActiveMap {
1469 double cs_rate_array[32];
1478} ForceIntegerMVInfo;
1482#if CONFIG_INTERNAL_STATS
1490} UENUM1BYTE(StatType);
1492typedef struct IMAGE_STAT {
1493 double stat[NUM_STAT_TYPES];
1500 YV12_BUFFER_CONFIG buf;
1524} MBMIExtFrameBufferInfo;
1528#if CONFIG_COLLECT_PARTITION_STATS
1529typedef struct FramePartitionTimingStats {
1530 int partition_decisions[6][EXT_PARTITION_TYPES];
1531 int partition_attempts[6][EXT_PARTITION_TYPES];
1532 int64_t partition_times[6][EXT_PARTITION_TYPES];
1535} FramePartitionTimingStats;
1538#if CONFIG_COLLECT_COMPONENT_TIMING
1539#include "aom_ports/aom_timer.h"
1542 av1_encode_strategy_time,
1543 av1_get_second_pass_params_time,
1544 denoise_and_encode_time,
1545 apply_filtering_time,
1546 av1_tpl_setup_stats_time,
1547 encode_frame_to_data_rate_time,
1548 encode_with_recode_loop_time,
1551 loop_restoration_time,
1552 av1_pack_bitstream_final_time,
1553 av1_encode_frame_time,
1554 av1_compute_global_motion_time,
1555 av1_setup_motion_field_time,
1558 rd_pick_partition_time,
1559 av1_prune_partitions_time,
1560 none_partition_search_time,
1561 split_partition_search_time,
1562 rectangular_partition_search_time,
1563 ab_partitions_search_time,
1564 rd_pick_4partition_time,
1567 rd_pick_sb_modes_time,
1568 av1_rd_pick_intra_mode_sb_time,
1569 av1_rd_pick_inter_mode_sb_time,
1570 handle_inter_mode_time,
1571 evaluate_motion_mode_for_winner_candidates_time,
1572 handle_intra_mode_time,
1574 av1_search_palette_mode_time,
1576 compound_type_rd_time,
1577 interpolation_filter_search_time,
1578 motion_mode_rd_time,
1580} UENUM1BYTE(TIMING_COMPONENT);
1582static INLINE
char const *get_component_name(
int index) {
1584 case av1_encode_strategy_time:
return "av1_encode_strategy_time";
1585 case av1_get_second_pass_params_time:
1586 return "av1_get_second_pass_params_time";
1587 case denoise_and_encode_time:
return "denoise_and_encode_time";
1588 case apply_filtering_time:
return "apply_filtering_time";
1589 case av1_tpl_setup_stats_time:
return "av1_tpl_setup_stats_time";
1590 case encode_frame_to_data_rate_time:
1591 return "encode_frame_to_data_rate_time";
1592 case encode_with_recode_loop_time:
return "encode_with_recode_loop_time";
1593 case loop_filter_time:
return "loop_filter_time";
1594 case cdef_time:
return "cdef_time";
1595 case loop_restoration_time:
return "loop_restoration_time";
1596 case av1_pack_bitstream_final_time:
return "av1_pack_bitstream_final_time";
1597 case av1_encode_frame_time:
return "av1_encode_frame_time";
1598 case av1_compute_global_motion_time:
1599 return "av1_compute_global_motion_time";
1600 case av1_setup_motion_field_time:
return "av1_setup_motion_field_time";
1601 case encode_sb_row_time:
return "encode_sb_row_time";
1603 case rd_pick_partition_time:
return "rd_pick_partition_time";
1604 case av1_prune_partitions_time:
return "av1_prune_partitions_time";
1605 case none_partition_search_time:
return "none_partition_search_time";
1606 case split_partition_search_time:
return "split_partition_search_time";
1607 case rectangular_partition_search_time:
1608 return "rectangular_partition_search_time";
1609 case ab_partitions_search_time:
return "ab_partitions_search_time";
1610 case rd_pick_4partition_time:
return "rd_pick_4partition_time";
1611 case encode_sb_time:
return "encode_sb_time";
1613 case rd_pick_sb_modes_time:
return "rd_pick_sb_modes_time";
1614 case av1_rd_pick_intra_mode_sb_time:
1615 return "av1_rd_pick_intra_mode_sb_time";
1616 case av1_rd_pick_inter_mode_sb_time:
1617 return "av1_rd_pick_inter_mode_sb_time";
1618 case handle_inter_mode_time:
return "handle_inter_mode_time";
1619 case evaluate_motion_mode_for_winner_candidates_time:
1620 return "evaluate_motion_mode_for_winner_candidates_time";
1621 case handle_intra_mode_time:
return "handle_intra_mode_time";
1622 case do_tx_search_time:
return "do_tx_search_time";
1623 case av1_search_palette_mode_time:
return "av1_search_palette_mode_time";
1624 case handle_newmv_time:
return "handle_newmv_time";
1625 case compound_type_rd_time:
return "compound_type_rd_time";
1626 case interpolation_filter_search_time:
1627 return "interpolation_filter_search_time";
1628 case motion_mode_rd_time:
return "motion_mode_rd_time";
1636#define MAX_INTERNAL_ARFS (REF_FRAMES - BWDREF_FRAME - 1)
1654 YV12_BUFFER_CONFIG *ref_buf[REF_FRAMES];
1659 unsigned char *src_buffer;
1666 int num_ref_frames[MAX_DIRECTIONS];
1674 FrameDistPair reference_frames[MAX_DIRECTIONS][REF_FRAMES - 1];
1687 int num_src_corners;
1694 int src_corners[2 * MAX_CORNERS];
1719 int default_interp_skip_flags;
1723 uint16_t interp_filter_search_mask;
1735 int max_mv_magnitude;
1749 fractional_mv_step_fp *find_fractional_mv_step;
1756 search_site_config search_site_cfg[SS_CFG_TOTAL][NUM_DISTINCT_SEARCH_METHODS];
1757} MotionVectorSearchParams;
1771} RefreshFrameFlagsInfo;
1783} ResizePendingParams;
1792 int ref_relative_dist[INTER_REFS_PER_FRAME];
1796 int8_t nearest_past_ref;
1800 int8_t nearest_future_ref;
1801} RefFrameDistanceInfo;
1826 unsigned int coeff_opt_thresholds[MODE_EVAL_TYPES][2];
1832 TX_SIZE_SEARCH_METHOD tx_size_search_methods[MODE_EVAL_TYPES];
1840 unsigned int use_transform_domain_distortion[MODE_EVAL_TYPES];
1847 unsigned int tx_domain_dist_threshold[MODE_EVAL_TYPES];
1854 unsigned int skip_txfm_level[MODE_EVAL_TYPES];
1861 unsigned int predict_dc_level[MODE_EVAL_TYPES];
1875 bool alt2_ref_frame;
1880 bool update_pending;
1881} ExtRefreshFrameFlagsInfo;
1890 int ref_frame_flags;
1895 ExtRefreshFrameFlagsInfo refresh_frame;
1900 bool refresh_frame_context;
1906 bool refresh_frame_context_pending;
1911 bool use_ref_frame_mvs;
1916 bool use_error_resilient;
1927 bool use_primary_ref_none;
1933 int arf_stack[FRAME_BUFFERS];
1935 int lst_stack[FRAME_BUFFERS];
1937 int gld_stack[FRAME_BUFFERS];
1951 int mv_joint_count[4];
1953 int last_bit_nonzero;
1957 int hp_total_mv_rate;
1958 int lp_total_mv_rate;
1970 struct loopfilter lf;
1972 YV12_BUFFER_CONFIG copy_buffer;
1994 int show_frame_count;
2014 bool has_lossless_segment;
2015} EncSegmentationInfo;
2024 int64_t prev_ts_start;
2028 int64_t prev_ts_end;
2032 int64_t first_ts_start;
2051 uint8_t *entropy_ctx;
2057typedef struct AV1_PRIMARY {
2061 struct AV1_COMP *cpi;
2066 struct AV1_COMP *cpi_lap;
2071 struct lookahead_ctx *lookahead;
2078 int seq_params_locked;
2084 struct aom_codec_pkt_list *output_pkt_list;
2089 int internal_altref_allowed;
2095typedef struct AV1_COMP {
2105 EncQuantDequantParams enc_quant_dequant_params;
2115 FRAME_COUNTS counts;
2120 MBMIExtFrameBufferInfo mbmi_ext_info;
2127 CB_COEFF_BUFFER *coeff_buffer_base;
2133 CoeffBufferPool coeff_buffer_pool;
2143 AV1EncoderConfig oxcf;
2154 TRELLIS_OPT_TYPE optimize_seg_arr[MAX_SEGMENTS];
2161 YV12_BUFFER_CONFIG *source;
2170 YV12_BUFFER_CONFIG *last_source;
2176 YV12_BUFFER_CONFIG *unscaled_source;
2181 YV12_BUFFER_CONFIG scaled_source;
2186 YV12_BUFFER_CONFIG *unscaled_last_source;
2191 YV12_BUFFER_CONFIG scaled_last_source;
2197 YV12_BUFFER_CONFIG *unfiltered_source;
2207 TemporalFilterCtx tf_ctx;
2212 int partition_search_skippable_frame;
2217 ForceIntegerMVInfo force_intpel_info;
2223 RefCntBuffer *scaled_ref_buf[INTER_REFS_PER_FRAME];
2228 RefCntBuffer *last_show_frame_buf;
2233 RefreshFrameFlagsInfo refresh_frame;
2241 int fb_of_context_type[REF_FRAMES];
2246 ExternalFlags ext_flags;
2252 YV12_BUFFER_CONFIG last_frame_uf;
2258 YV12_BUFFER_CONFIG trial_frame_rst;
2263 int64_t ambient_err;
2274 CODING_CONTEXT coding_context;
2279 GlobalMotionInfo gm_info;
2284 WinnerModeParams winner_mode_params;
2289 TimeStamps time_stamps;
2304 int ref_frame_flags;
2319 MotionVectorSearchParams mv_search_params;
2325 int all_one_sided_refs;
2330 EncSegmentationInfo enc_seg;
2335 CYCLIC_REFRESH *cyclic_refresh;
2340 ActiveMap active_map;
2347 aom_variance_fn_ptr_t fn_ptr[BLOCK_SIZES_ALL];
2362 unsigned char gf_frame_index;
2372 RefBufferStack ref_buffer_stack;
2378 YV12_BUFFER_CONFIG alt_ref_buffer;
2383 int show_existing_alt_ref;
2385#if CONFIG_INTERNAL_STATS
2387 uint64_t time_receive_data;
2388 uint64_t time_compress_data;
2390 unsigned int mode_chosen_counts[MAX_MODES];
2393 uint64_t total_sq_error[2];
2394 uint64_t total_samples[2];
2397 double total_blockiness;
2398 double worst_blockiness;
2401 double summed_quality;
2402 double summed_weights;
2403 double summed_quality_hbd;
2404 double summed_weights_hbd;
2405 unsigned int tot_recode_hits;
2407 double worst_ssim_hbd;
2412 int b_calculate_blockiness;
2413 int b_calculate_consistency;
2415 double total_inconsistency;
2416 double worst_consistency;
2425 int b_calculate_psnr;
2427#if CONFIG_SPEED_STATS
2431 unsigned int tx_search_count;
2443 FRAME_INFO frame_info;
2448 FRAME_INDEX_SET frame_index_set;
2453 InitialDimensions initial_dimensions;
2466 ResizePendingParams resize_pending_params;
2472 TileDataEnc *tile_data;
2476 int allocated_tiles;
2481 TokenInfo token_info;
2491 VarBasedPartitionInfo vbp_info;
2496 FrameProbInfo frame_probs;
2501 MultiThreadInfo mt_info;
2508 int existing_fb_idx_to_show;
2518 int prune_ref_frame_mask;
2523 AV1LrStruct lr_ctxt;
2528 aom_film_grain_table_t *film_grain_table;
2535 struct aom_denoise_and_model_t *denoise_and_model;
2541 InterpSearchFlags interp_search_flags;
2550 int use_screen_content_tools;
2558 int is_screen_content_type;
2560#if CONFIG_COLLECT_PARTITION_STATS
2564 FramePartitionTimingStats partition_stats;
2567#if CONFIG_COLLECT_COMPONENT_TIMING
2571 uint64_t component_time[kTimingComponents];
2572 struct aom_usec_timer component_timer[kTimingComponents];
2576 uint64_t frame_component_time[kTimingComponents];
2582 AV1LevelParams level_params;
2592 RefFrameDistanceInfo ref_frame_dist_info;
2602 double *tpl_rdmult_scaling_factors;
2607 double *tpl_sb_rdmult_scaling_factors;
2613 double *ssim_rdmult_scaling_factors;
2619 TuneVMAFInfo vmaf_info;
2622#if CONFIG_TUNE_BUTTERAUGLI
2626 TuneButteraugliInfo butteraugli_info;
2645 COMPRESSOR_STAGE compressor_stage;
2657 FRAME_TYPE last_frame_type;
2674 FirstPassData firstpass_data;
2679 NOISE_ESTIMATE noise_estimate;
2681#if CONFIG_AV1_TEMPORAL_DENOISING
2685 AV1_DENOISER denoiser;
2692 uint8_t *consec_zero_mv;
2702 BLOCK_SIZE fp_block_size;
2714typedef struct EncodeFrameInput {
2716 YV12_BUFFER_CONFIG *source;
2717 YV12_BUFFER_CONFIG *last_source;
2718 int64_t ts_duration;
2726typedef struct EncodeFrameParams {
2730 int error_resilient_mode;
2734 FRAME_TYPE frame_type;
2737 int primary_ref_frame;
2747 int refresh_frame_flags;
2749 int show_existing_frame;
2750 int existing_fb_idx_to_show;
2756 int ref_frame_flags;
2761 int remapped_ref_idx[REF_FRAMES];
2767 RefreshFrameFlagsInfo refresh_frame;
2781} EncodeFrameResults;
2784void av1_initialize_enc(
void);
2786struct AV1_COMP *av1_create_compressor(AV1_PRIMARY *ppi, AV1EncoderConfig *oxcf,
2787 BufferPool *
const pool,
2789 COMPRESSOR_STAGE stage,
2790 int num_lap_buffers,
2791 int lap_lag_in_frames,
2792 STATS_BUFFER_CTX *stats_buf_context);
2794struct AV1_PRIMARY *av1_create_primary_compressor(
2795 struct aom_codec_pkt_list *pkt_list_head);
2797void av1_remove_compressor(AV1_COMP *cpi);
2799void av1_remove_primary_compressor(AV1_PRIMARY *ppi);
2801void av1_change_config(AV1_COMP *cpi,
const AV1EncoderConfig *oxcf);
2803void av1_check_initial_width(AV1_COMP *cpi,
int use_highbitdepth,
2804 int subsampling_x,
int subsampling_y);
2806void av1_init_seq_coding_tools(SequenceHeader *seq, AV1_COMMON *cm,
2807 const AV1EncoderConfig *oxcf,
int use_svc);
2828 YV12_BUFFER_CONFIG *sd, int64_t time_stamp,
2829 int64_t end_time_stamp);
2855int av1_get_compressed_data(AV1_COMP *cpi,
unsigned int *frame_flags,
2856 size_t *size, uint8_t *dest, int64_t *time_stamp,
2857 int64_t *time_end,
int flush,
2858 const aom_rational64_t *timebase);
2866int av1_encode(AV1_COMP *
const cpi, uint8_t *
const dest,
2867 const EncodeFrameInput *
const frame_input,
2868 const EncodeFrameParams *
const frame_params,
2869 EncodeFrameResults *
const frame_results);
2872int av1_get_preview_raw_frame(AV1_COMP *cpi, YV12_BUFFER_CONFIG *dest);
2874int av1_get_last_show_frame(AV1_COMP *cpi, YV12_BUFFER_CONFIG *frame);
2877 YV12_BUFFER_CONFIG *new_frame,
2878 YV12_BUFFER_CONFIG *sd);
2880int av1_use_as_reference(
int *ext_ref_frame_flags,
int ref_frame_flags);
2882int av1_copy_reference_enc(AV1_COMP *cpi,
int idx, YV12_BUFFER_CONFIG *sd);
2884int av1_set_reference_enc(AV1_COMP *cpi,
int idx, YV12_BUFFER_CONFIG *sd);
2886int av1_set_size_literal(AV1_COMP *cpi,
int width,
int height);
2888void av1_set_frame_size(AV1_COMP *cpi,
int width,
int height);
2890int av1_set_active_map(AV1_COMP *cpi,
unsigned char *map,
int rows,
int cols);
2892int av1_get_active_map(AV1_COMP *cpi,
unsigned char *map,
int rows,
int cols);
2894int av1_set_internal_size(AV1EncoderConfig *
const oxcf,
2895 ResizePendingParams *resize_pending_params,
2896 AOM_SCALING horiz_mode, AOM_SCALING vert_mode);
2898int av1_get_quantizer(
struct AV1_COMP *cpi);
2900int av1_convert_sect5obus_to_annexb(uint8_t *buffer,
size_t *input_size);
2913void av1_set_screen_content_options(
struct AV1_COMP *cpi,
2916void av1_update_frame_size(AV1_COMP *cpi);
2920static INLINE
void stack_push(
int *stack,
int *stack_size,
int item) {
2921 for (
int i = *stack_size - 1; i >= 0; --i) stack[i + 1] = stack[i];
2926static INLINE
int stack_pop(
int *stack,
int *stack_size) {
2927 if (*stack_size <= 0)
return -1;
2929 int item = stack[0];
2930 for (
int i = 0; i < *stack_size; ++i) stack[i] = stack[i + 1];
2936static INLINE
int stack_pop_end(
int *stack,
int *stack_size) {
2937 int item = stack[*stack_size - 1];
2938 stack[*stack_size - 1] = -1;
2944static INLINE
void stack_reset(
int *stack,
int *stack_size) {
2945 for (
int i = 0; i < *stack_size; ++i) stack[i] = INVALID_IDX;
2950#define TICKS_PER_SEC 10000000LL
2952static INLINE int64_t
2953timebase_units_to_ticks(
const aom_rational64_t *timestamp_ratio, int64_t n) {
2954 return n * timestamp_ratio->num / timestamp_ratio->den;
2957static INLINE int64_t
2958ticks_to_timebase_units(
const aom_rational64_t *timestamp_ratio, int64_t n) {
2959 int64_t round = timestamp_ratio->num / 2;
2960 if (round > 0) --round;
2961 return (n * timestamp_ratio->den + round) / timestamp_ratio->num;
2964static INLINE
int frame_is_kf_gf_arf(
const AV1_COMP *cpi) {
2965 const GF_GROUP *
const gf_group = &cpi->gf_group;
2966 const FRAME_UPDATE_TYPE update_type =
2967 gf_group->update_type[cpi->gf_frame_index];
2969 return frame_is_intra_only(&cpi->common) || update_type == ARF_UPDATE ||
2970 update_type == GF_UPDATE;
2974static INLINE
int av1_use_hash_me(
const AV1_COMP *
const cpi) {
2975 return (cpi->common.features.allow_screen_content_tools &&
2976 cpi->common.features.allow_intrabc &&
2977 frame_is_intra_only(&cpi->common));
2980static INLINE
const YV12_BUFFER_CONFIG *get_ref_frame_yv12_buf(
2981 const AV1_COMMON *
const cm, MV_REFERENCE_FRAME ref_frame) {
2982 const RefCntBuffer *
const buf = get_ref_frame_buf(cm, ref_frame);
2983 return buf != NULL ? &buf->buf : NULL;
2986static INLINE
void alloc_frame_mvs(AV1_COMMON *
const cm, RefCntBuffer *buf) {
2987 assert(buf != NULL);
2988 ensure_mv_buffer(buf, cm);
2989 buf->width = cm->
width;
2990 buf->height = cm->
height;
2995static INLINE
unsigned int allocated_tokens(TileInfo tile,
int sb_size_log2,
2997 int tile_mb_rows = (tile.mi_row_end - tile.mi_row_start + 2) >> 2;
2998 int tile_mb_cols = (tile.mi_col_end - tile.mi_col_start + 2) >> 2;
3000 return get_token_alloc(tile_mb_rows, tile_mb_cols, sb_size_log2, num_planes);
3003static INLINE
void get_start_tok(AV1_COMP *cpi,
int tile_row,
int tile_col,
3004 int mi_row, TokenExtra **tok,
int sb_size_log2,
3006 AV1_COMMON *
const cm = &cpi->common;
3008 TileDataEnc *this_tile = &cpi->tile_data[tile_row * tile_cols + tile_col];
3009 const TileInfo *
const tile_info = &this_tile->tile_info;
3011 const int tile_mb_cols =
3012 (tile_info->mi_col_end - tile_info->mi_col_start + 2) >> 2;
3013 const int tile_mb_row = (mi_row - tile_info->mi_row_start + 2) >> 2;
3015 *tok = cpi->token_info.tile_tok[tile_row][tile_col] +
3016 get_token_alloc(tile_mb_row, tile_mb_cols, sb_size_log2, num_planes);
3021#define ALT_MIN_LAG 3
3022static INLINE
int is_altref_enabled(
int lag_in_frames,
bool enable_auto_arf) {
3023 return lag_in_frames >= ALT_MIN_LAG && enable_auto_arf;
3027static INLINE
int is_stat_generation_stage(
const AV1_COMP *
const cpi) {
3028 assert(IMPLIES(cpi->compressor_stage == LAP_STAGE,
3029 cpi->oxcf.pass == 0 && cpi->lap_enabled));
3030 return (cpi->oxcf.pass == 1 || (cpi->compressor_stage == LAP_STAGE));
3033static INLINE
int is_stat_consumption_stage_twopass(
const AV1_COMP *
const cpi) {
3034 return (cpi->oxcf.pass == 2);
3038static INLINE
int is_stat_consumption_stage(
const AV1_COMP *
const cpi) {
3039 return (is_stat_consumption_stage_twopass(cpi) ||
3040 (cpi->oxcf.pass == 0 && (cpi->compressor_stage == ENCODE_STAGE) &&
3053static INLINE
int has_no_stats_stage(
const AV1_COMP *
const cpi) {
3054 assert(IMPLIES(!cpi->lap_enabled, cpi->compressor_stage == ENCODE_STAGE));
3055 return (cpi->oxcf.pass == 0 && !cpi->lap_enabled);
3060static INLINE
int get_stats_buf_size(
int num_lap_buffer,
int num_lag_buffer) {
3062 return (num_lap_buffer > 0 ? num_lap_buffer + 1 : num_lag_buffer);
3067static INLINE
void set_ref_ptrs(
const AV1_COMMON *cm, MACROBLOCKD *xd,
3068 MV_REFERENCE_FRAME ref0,
3069 MV_REFERENCE_FRAME ref1) {
3071 get_ref_scale_factors_const(cm, ref0 >= LAST_FRAME ? ref0 : 1);
3073 get_ref_scale_factors_const(cm, ref1 >= LAST_FRAME ? ref1 : 1);
3076static INLINE
int get_chessboard_index(
int frame_index) {
3077 return frame_index & 0x1;
3080static INLINE
const int *cond_cost_list_const(
const struct AV1_COMP *cpi,
3081 const int *cost_list) {
3082 const int use_cost_list = cpi->sf.mv_sf.subpel_search_method != SUBPEL_TREE &&
3083 cpi->sf.mv_sf.use_fullpel_costlist;
3084 return use_cost_list ? cost_list : NULL;
3087static INLINE
int *cond_cost_list(
const struct AV1_COMP *cpi,
int *cost_list) {
3088 const int use_cost_list = cpi->sf.mv_sf.subpel_search_method != SUBPEL_TREE &&
3089 cpi->sf.mv_sf.use_fullpel_costlist;
3090 return use_cost_list ? cost_list : NULL;
3094double av1_get_compression_ratio(
const AV1_COMMON *
const cm,
3095 size_t encoded_frame_size);
3097void av1_new_framerate(AV1_COMP *cpi,
double framerate);
3099void av1_setup_frame_size(AV1_COMP *cpi);
3101#define LAYER_IDS_TO_IDX(sl, tl, num_tl) ((sl) * (num_tl) + (tl))
3104static INLINE
int av1_resize_scaled(
const AV1_COMMON *cm) {
3109static INLINE
int av1_frame_scaled(
const AV1_COMMON *cm) {
3110 return !av1_superres_scaled(cm) && av1_resize_scaled(cm);
3116static INLINE
int encode_show_existing_frame(
const AV1_COMMON *cm) {
3123static INLINE
int get_mi_ext_idx(
const int mi_row,
const int mi_col,
3124 const BLOCK_SIZE mi_alloc_bsize,
3125 const int mbmi_ext_stride) {
3126 const int mi_ext_size_1d = mi_size_wide[mi_alloc_bsize];
3127 const int mi_ext_row = mi_row / mi_ext_size_1d;
3128 const int mi_ext_col = mi_col / mi_ext_size_1d;
3129 return mi_ext_row * mbmi_ext_stride + mi_ext_col;
3134static INLINE
void set_mode_info_offsets(
3136 const MBMIExtFrameBufferInfo *
const mbmi_ext_info,
MACROBLOCK *
const x,
3137 MACROBLOCKD *
const xd,
int mi_row,
int mi_col) {
3138 set_mi_offsets(mi_params, xd, mi_row, mi_col);
3139 const int ext_idx = get_mi_ext_idx(mi_row, mi_col, mi_params->
mi_alloc_bsize,
3140 mbmi_ext_info->stride);
3147static INLINE BLOCK_SIZE find_partition_size(BLOCK_SIZE bsize,
int rows_left,
3148 int cols_left,
int *bh,
int *bw) {
3149 int int_size = (int)bsize;
3150 if (rows_left <= 0 || cols_left <= 0) {
3151 return AOMMIN(bsize, BLOCK_8X8);
3153 for (; int_size > 0; int_size -= 3) {
3154 *bh = mi_size_high[int_size];
3155 *bw = mi_size_wide[int_size];
3156 if ((*bh <= rows_left) && (*bw <= cols_left)) {
3161 return (BLOCK_SIZE)int_size;
3164static const uint8_t av1_ref_frame_flag_list[REF_FRAMES] = { 0,
3175static const MV_REFERENCE_FRAME disable_order[] = {
3182static const MV_REFERENCE_FRAME
3183 ref_frame_priority_order[INTER_REFS_PER_FRAME] = {
3184 LAST_FRAME, ALTREF_FRAME, BWDREF_FRAME, GOLDEN_FRAME,
3185 ALTREF2_FRAME, LAST2_FRAME, LAST3_FRAME,
3188static INLINE
int get_ref_frame_flags(
const SPEED_FEATURES *
const sf,
3189 const YV12_BUFFER_CONFIG **ref_frames,
3190 const int ext_ref_frame_flags) {
3195 int flags = ext_ref_frame_flags;
3197 for (
int i = 1; i < INTER_REFS_PER_FRAME; ++i) {
3198 const YV12_BUFFER_CONFIG *
const this_ref = ref_frames[i];
3202 int index = (sf->
rt_sf.use_nonrd_pick_mode &&
3203 ref_frame_priority_order[i] == GOLDEN_FRAME)
3204 ? (1 + sf->
rt_sf.use_nonrd_altref_frame)
3206 for (
int j = 0; j < index; ++j) {
3207 if (this_ref == ref_frames[j]) {
3208 flags &= ~(1 << (ref_frame_priority_order[i] - 1));
3227#define MAX_GFUBOOST_FACTOR 10.0
3228#define MIN_GFUBOOST_FACTOR 4.0
3230static INLINE
int is_frame_tpl_eligible(
const GF_GROUP *
const gf_group,
3232 const FRAME_UPDATE_TYPE update_type = gf_group->update_type[index];
3233 return update_type == ARF_UPDATE || update_type == GF_UPDATE ||
3234 update_type == KF_UPDATE;
3237static INLINE
int is_frame_eligible_for_ref_pruning(
const GF_GROUP *gf_group,
3238 int selective_ref_frame,
3239 int prune_ref_frames,
3241 return (selective_ref_frame > 0) && (prune_ref_frames > 0) &&
3242 !is_frame_tpl_eligible(gf_group, gf_index);
3246static INLINE FRAME_UPDATE_TYPE get_frame_update_type(
const GF_GROUP *gf_group,
3247 int gf_frame_index) {
3248 return gf_group->update_type[gf_frame_index];
3251static INLINE
int av1_pixels_to_mi(
int pixels) {
3252 return ALIGN_POWER_OF_TWO(pixels, 3) >> MI_SIZE_LOG2;
3255static AOM_INLINE
int is_psnr_calc_enabled(
const AV1_COMP *cpi) {
3256 const AV1_COMMON *
const cm = &cpi->common;
3258 return cpi->b_calculate_psnr && !is_stat_generation_stage(cpi) &&
3262#if CONFIG_AV1_TEMPORAL_DENOISING
3263static INLINE
int denoise_svc(
const struct AV1_COMP *
const cpi) {
3264 return (!cpi->use_svc || (cpi->use_svc && cpi->svc.spatial_layer_id >=
3265 cpi->svc.first_layer_denoise));
3269#if CONFIG_COLLECT_PARTITION_STATS == 2
3270static INLINE
void av1_print_fr_partition_timing_stats(
3271 const FramePartitionTimingStats *part_stats,
const char *filename) {
3272 FILE *f = fopen(filename,
"w");
3277 fprintf(f,
"bsize,redo,");
3278 for (
int part = 0; part < EXT_PARTITION_TYPES; part++) {
3279 fprintf(f,
"decision_%d,", part);
3281 for (
int part = 0; part < EXT_PARTITION_TYPES; part++) {
3282 fprintf(f,
"attempt_%d,", part);
3284 for (
int part = 0; part < EXT_PARTITION_TYPES; part++) {
3285 fprintf(f,
"time_%d,", part);
3289 static const int bsizes[6] = { 128, 64, 32, 16, 8, 4 };
3291 for (
int bsize_idx = 0; bsize_idx < 6; bsize_idx++) {
3292 fprintf(f,
"%d,%d,", bsizes[bsize_idx], part_stats->partition_redo);
3293 for (
int part = 0; part < EXT_PARTITION_TYPES; part++) {
3294 fprintf(f,
"%d,", part_stats->partition_decisions[bsize_idx][part]);
3296 for (
int part = 0; part < EXT_PARTITION_TYPES; part++) {
3297 fprintf(f,
"%d,", part_stats->partition_attempts[bsize_idx][part]);
3299 for (
int part = 0; part < EXT_PARTITION_TYPES; part++) {
3300 fprintf(f,
"%ld,", part_stats->partition_times[bsize_idx][part]);
3308#if CONFIG_COLLECT_PARTITION_STATS
3309static INLINE
int av1_get_bsize_idx_for_part_stats(BLOCK_SIZE bsize) {
3310 assert(bsize == BLOCK_128X128 || bsize == BLOCK_64X64 ||
3311 bsize == BLOCK_32X32 || bsize == BLOCK_16X16 || bsize == BLOCK_8X8 ||
3312 bsize == BLOCK_4X4);
3314 case BLOCK_128X128:
return 0;
3315 case BLOCK_64X64:
return 1;
3316 case BLOCK_32X32:
return 2;
3317 case BLOCK_16X16:
return 3;
3318 case BLOCK_8X8:
return 4;
3319 case BLOCK_4X4:
return 5;
3320 default: assert(0 &&
"Invalid bsize for partition_stats.");
return -1;
3325#if CONFIG_COLLECT_COMPONENT_TIMING
3326static INLINE
void start_timing(AV1_COMP *cpi,
int component) {
3327 aom_usec_timer_start(&cpi->component_timer[component]);
3329static INLINE
void end_timing(AV1_COMP *cpi,
int component) {
3330 aom_usec_timer_mark(&cpi->component_timer[component]);
3331 cpi->frame_component_time[component] +=
3332 aom_usec_timer_elapsed(&cpi->component_timer[component]);
3334static INLINE
char const *get_frame_type_enum(
int type) {
3336 case 0:
return "KEY_FRAME";
3337 case 1:
return "INTER_FRAME";
3338 case 2:
return "INTRA_ONLY_FRAME";
3339 case 3:
return "S_FRAME";
#define FIXED_QP_OFFSET_COUNT
Number of fixed QP offsets.
Definition aom_encoder.h:876
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.
@ RESTORE_SWITCHABLE_TYPES
Definition enums.h:655
struct SVC SVC
The stucture of SVC.
aom_tune_content
Definition aomcx.h:1400
aom_tune_metric
Model tuning parameters.
Definition aomcx.h:1419
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:187
aom_rc_mode
Rate control mode.
Definition aom_encoder.h:165
aom_enc_pass
Multi-pass Encoding Pass.
Definition aom_encoder.h:158
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:357
Describes look ahead buffer operations.
struct SPEED_FEATURES SPEED_FEATURES
Top level speed vs quality trade off data struture.
int superres_upscaled_width
Definition av1_common_int.h:772
int superres_upscaled_height
Definition av1_common_int.h:773
int width
Definition av1_common_int.h:748
CurrentFrame current_frame
Definition av1_common_int.h:727
int show_existing_frame
Definition av1_common_int.h:877
FeatureFlags features
Definition av1_common_int.h:882
int show_frame
Definition av1_common_int.h:862
CommonTileParams tiles
Definition av1_common_int.h:969
int height
Definition av1_common_int.h:749
int render_width
Definition av1_common_int.h:759
int render_height
Definition av1_common_int.h:760
Parameters related to CDEF.
Definition av1_common_int.h:194
Params related to MB_MODE_INFO arrays and related info.
Definition av1_common_int.h:477
BLOCK_SIZE mi_alloc_bsize
Definition av1_common_int.h:526
int cols
Definition av1_common_int.h:404
The stucture of acummulated frame stats in the first pass.
Definition firstpass.h:36
Frame level features.
Definition av1_common_int.h:334
bool error_resilient_mode
Definition av1_common_int.h:376
Data related to the current GF/ARF group and the individual frames within the group.
Definition firstpass.h:171
Stores best extended mode information at frame level.
Definition block.h:216
Rate Control parameters and status.
Definition ratectrl.h:118
Top level speed vs quality trade off data struture.
Definition speed_features.h:1120
REAL_TIME_SPEED_FEATURES rt_sf
Definition speed_features.h:1184
MB_MODE_INFO_EXT_FRAME * mbmi_ext_frame
Finalized mbmi_ext for the whole frame.
Definition block.h:878
const struct scale_factors * block_ref_scale_factors[2]
Definition blockd.h:685