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"
67 #include "aom/internal/aom_codec_internal.h"
68 #include "aom_util/aom_thread.h"
78 #define SCENE_CUT_KEY_TEST_INTERVAL 16
82 typedef struct aom_rational64 {
95 } UENUM1BYTE(AOM_SCALING);
107 FRAMEFLAGS_KEY = 1 << 0,
108 FRAMEFLAGS_GOLDEN = 1 << 1,
109 FRAMEFLAGS_BWDREF = 1 << 2,
111 FRAMEFLAGS_ALTREF = 1 << 3,
112 FRAMEFLAGS_INTRAONLY = 1 << 4,
113 FRAMEFLAGS_SWITCH = 1 << 5,
114 FRAMEFLAGS_ERROR_RESILIENT = 1 << 6,
115 } UENUM1BYTE(FRAMETYPE_FLAGS);
121 CYCLIC_REFRESH_AQ = 3,
123 } UENUM1BYTE(AQ_MODE);
126 DELTA_Q_OBJECTIVE = 1,
127 DELTA_Q_PERCEPTUAL = 2,
129 } UENUM1BYTE(DELTAQ_MODE);
137 } UENUM1BYTE(RESIZE_MODE);
141 SS_CFG_LOOKAHEAD = 1,
144 } UENUM1BYTE(SS_CFG_OFFSET);
148 ENABLE_SCENECUT_MODE_1,
149 ENABLE_SCENECUT_MODE_2
150 } UENUM1BYTE(SCENECUT_MODE);
152 #define MAX_VBR_CORPUS_COMPLEXITY 10000
173 } MULTI_THREADED_MODULES;
531 int gf_min_pyr_height;
533 int gf_max_pyr_height;
535 bool enable_auto_arf;
538 bool enable_auto_brf;
543 unsigned int num_tile_groups;
552 int tile_width_count;
554 int tile_height_count;
556 int tile_widths[MAX_TILE_COLS];
558 int tile_heights[MAX_TILE_ROWS];
560 bool enable_large_scale_tile;
562 bool enable_single_tile_decoding;
564 bool enable_ext_tile_debug;
574 int forced_max_frame_width;
577 int forced_max_frame_height;
588 bool enable_warped_motion;
590 bool allow_warped_motion;
597 aom_timing_info_t timing_info;
599 uint32_t num_units_in_decoding_tick;
602 bool decoder_model_info_present_flag;
605 bool display_model_info_present_flag;
607 bool timing_info_present;
612 COST_UPDATE_TYPE coeff;
614 COST_UPDATE_TYPE mode;
621 unsigned int max_reference_frames;
623 bool enable_reduced_reference_set;
625 bool enable_onesided_comp;
643 unsigned int motion_vector_unit_test;
645 unsigned int sb_multipass_unit_test;
650 const char *vmaf_model_path;
652 const char *film_grain_table_filename;
658 int film_grain_test_vector;
663 double init_framerate;
665 unsigned int input_bit_depth;
669 unsigned int chroma_subsampling_x;
671 unsigned int chroma_subsampling_y;
682 int use_fixed_qp_offsets;
692 DELTAQ_MODE deltaq_mode;
694 bool enable_chroma_deltaq;
755 bool enable_deltalf_mode;
759 bool enable_restoration;
761 bool force_video_mode;
763 bool error_resilient_mode;
765 bool frame_parallel_decoding_mode;
767 bool enable_monochrome;
770 bool full_still_picture_hdr;
772 bool enable_dual_filter;
774 bool enable_order_hint;
776 bool ref_frame_mvs_present;
778 bool enable_ref_frame_mvs;
780 bool enable_interintra_comp;
782 bool enable_global_motion;
797 FrameDimensionCfg frm_dim_cfg;
817 QuantizationCfg q_cfg;
849 DecoderModelCfg dec_model_cfg;
852 RefFrameCfg ref_frm_cfg;
855 UnitTestCfg unit_test_cfg;
858 MotionModeCfg motion_mode_cfg;
873 CostUpdateFreq cost_upd_freq;
879 int noise_block_size;
881 int enable_dnl_denoising;
884 #if CONFIG_AV1_TEMPORAL_DENOISING
886 int noise_sensitivity;
890 unsigned int tier_mask;
894 int border_in_pixels;
903 AV1_LEVEL target_seq_level_idx[MAX_NUM_OPERATING_POINTS];
906 BITSTREAM_PROFILE profile;
927 bool use_highbitdepth;
938 static INLINE
int is_lossless_requested(
const RateControlCfg *
const rc_cfg) {
952 int obmc_probs[FRAME_UPDATE_TYPES][BLOCK_SIZES_ALL];
959 int warped_probs[FRAME_UPDATE_TYPES];
967 int tx_type_probs[FRAME_UPDATE_TYPES][TX_SIZES_ALL][TX_TYPES];
975 int switchable_interp_probs[FRAME_UPDATE_TYPES][SWITCHABLE_FILTER_CONTEXTS]
976 [SWITCHABLE_FILTERS];
981 typedef struct FRAME_COUNTS {
984 #if CONFIG_ENTROPY_STATS
985 unsigned int kf_y_mode[KF_MODE_CONTEXTS][KF_MODE_CONTEXTS][INTRA_MODES];
986 unsigned int angle_delta[DIRECTIONAL_MODES][2 * MAX_ANGLE_DELTA + 1];
987 unsigned int y_mode[BLOCK_SIZE_GROUPS][INTRA_MODES];
988 unsigned int uv_mode[CFL_ALLOWED_TYPES][INTRA_MODES][UV_INTRA_MODES];
989 unsigned int cfl_sign[CFL_JOINT_SIGNS];
990 unsigned int cfl_alpha[CFL_ALPHA_CONTEXTS][CFL_ALPHABET_SIZE];
991 unsigned int palette_y_mode[PALATTE_BSIZE_CTXS][PALETTE_Y_MODE_CONTEXTS][2];
992 unsigned int palette_uv_mode[PALETTE_UV_MODE_CONTEXTS][2];
993 unsigned int palette_y_size[PALATTE_BSIZE_CTXS][PALETTE_SIZES];
994 unsigned int palette_uv_size[PALATTE_BSIZE_CTXS][PALETTE_SIZES];
995 unsigned int palette_y_color_index[PALETTE_SIZES]
996 [PALETTE_COLOR_INDEX_CONTEXTS]
998 unsigned int palette_uv_color_index[PALETTE_SIZES]
999 [PALETTE_COLOR_INDEX_CONTEXTS]
1001 unsigned int partition[PARTITION_CONTEXTS][EXT_PARTITION_TYPES];
1002 unsigned int txb_skip[TOKEN_CDF_Q_CTXS][TX_SIZES][TXB_SKIP_CONTEXTS][2];
1003 unsigned int eob_extra[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1004 [EOB_COEF_CONTEXTS][2];
1005 unsigned int dc_sign[PLANE_TYPES][DC_SIGN_CONTEXTS][2];
1006 unsigned int coeff_lps[TX_SIZES][PLANE_TYPES][BR_CDF_SIZE - 1][LEVEL_CONTEXTS]
1008 unsigned int eob_flag[TX_SIZES][PLANE_TYPES][EOB_COEF_CONTEXTS][2];
1009 unsigned int eob_multi16[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][5];
1010 unsigned int eob_multi32[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][6];
1011 unsigned int eob_multi64[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][7];
1012 unsigned int eob_multi128[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][8];
1013 unsigned int eob_multi256[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][9];
1014 unsigned int eob_multi512[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][10];
1015 unsigned int eob_multi1024[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][11];
1016 unsigned int coeff_lps_multi[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1017 [LEVEL_CONTEXTS][BR_CDF_SIZE];
1018 unsigned int coeff_base_multi[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1019 [SIG_COEF_CONTEXTS][NUM_BASE_LEVELS + 2];
1020 unsigned int coeff_base_eob_multi[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1021 [SIG_COEF_CONTEXTS_EOB][NUM_BASE_LEVELS + 1];
1022 unsigned int newmv_mode[NEWMV_MODE_CONTEXTS][2];
1023 unsigned int zeromv_mode[GLOBALMV_MODE_CONTEXTS][2];
1024 unsigned int refmv_mode[REFMV_MODE_CONTEXTS][2];
1025 unsigned int drl_mode[DRL_MODE_CONTEXTS][2];
1026 unsigned int inter_compound_mode[INTER_MODE_CONTEXTS][INTER_COMPOUND_MODES];
1027 unsigned int wedge_idx[BLOCK_SIZES_ALL][16];
1028 unsigned int interintra[BLOCK_SIZE_GROUPS][2];
1029 unsigned int interintra_mode[BLOCK_SIZE_GROUPS][INTERINTRA_MODES];
1030 unsigned int wedge_interintra[BLOCK_SIZES_ALL][2];
1031 unsigned int compound_type[BLOCK_SIZES_ALL][MASKED_COMPOUND_TYPES];
1032 unsigned int motion_mode[BLOCK_SIZES_ALL][MOTION_MODES];
1033 unsigned int obmc[BLOCK_SIZES_ALL][2];
1034 unsigned int intra_inter[INTRA_INTER_CONTEXTS][2];
1035 unsigned int comp_inter[COMP_INTER_CONTEXTS][2];
1036 unsigned int comp_ref_type[COMP_REF_TYPE_CONTEXTS][2];
1037 unsigned int uni_comp_ref[UNI_COMP_REF_CONTEXTS][UNIDIR_COMP_REFS - 1][2];
1038 unsigned int single_ref[REF_CONTEXTS][SINGLE_REFS - 1][2];
1039 unsigned int comp_ref[REF_CONTEXTS][FWD_REFS - 1][2];
1040 unsigned int comp_bwdref[REF_CONTEXTS][BWD_REFS - 1][2];
1041 unsigned int intrabc[2];
1043 unsigned int txfm_partition[TXFM_PARTITION_CONTEXTS][2];
1044 unsigned int intra_tx_size[MAX_TX_CATS][TX_SIZE_CONTEXTS][MAX_TX_DEPTH + 1];
1045 unsigned int skip_mode[SKIP_MODE_CONTEXTS][2];
1046 unsigned int skip_txfm[SKIP_CONTEXTS][2];
1047 unsigned int compound_index[COMP_INDEX_CONTEXTS][2];
1048 unsigned int comp_group_idx[COMP_GROUP_IDX_CONTEXTS][2];
1049 unsigned int delta_q[DELTA_Q_PROBS][2];
1050 unsigned int delta_lf_multi[FRAME_LF_COUNT][DELTA_LF_PROBS][2];
1051 unsigned int delta_lf[DELTA_LF_PROBS][2];
1053 unsigned int inter_ext_tx[EXT_TX_SETS_INTER][EXT_TX_SIZES][TX_TYPES];
1054 unsigned int intra_ext_tx[EXT_TX_SETS_INTRA][EXT_TX_SIZES][INTRA_MODES]
1056 unsigned int filter_intra_mode[FILTER_INTRA_MODES];
1057 unsigned int filter_intra[BLOCK_SIZES_ALL][2];
1059 unsigned int wiener_restore[2];
1060 unsigned int sgrproj_restore[2];
1063 unsigned int switchable_interp[SWITCHABLE_FILTER_CONTEXTS]
1064 [SWITCHABLE_FILTERS];
1067 #define INTER_MODE_RD_DATA_OVERALL_SIZE 6400
1076 double sse_sse_mean;
1092 #define MAX_INTER_MODES 1024
1150 uint32_t sum_square_error;
1163 VPVariance part_variances;
1168 VPVariance part_variances;
1173 VPVariance part_variances;
1178 VPVariance part_variances;
1183 VPVariance part_variances;
1188 VPVariance part_variances;
1206 int64_t thresholds[5];
1219 #if CONFIG_MULTITHREAD
1233 int *num_finished_cols;
1257 typedef struct TileDataEnc {
1259 DECLARE_ALIGNED(16, FRAME_CONTEXT, tctx);
1260 FRAME_CONTEXT *row_ctx;
1261 uint8_t allow_update_cdf;
1262 InterModeRdModel inter_mode_rd_models[BLOCK_SIZES_ALL];
1264 MV firstpass_top_mv;
1267 typedef struct RD_COUNTS {
1268 int64_t comp_pred_diff[REFERENCE_MODES];
1269 int compound_ref_used_flag;
1270 int skip_mode_used_flag;
1271 int tx_type_used[TX_SIZES_ALL][TX_TYPES];
1272 int obmc_used[BLOCK_SIZES_ALL][2];
1276 typedef struct ThreadData {
1278 RD_COUNTS rd_counts;
1279 FRAME_COUNTS *counts;
1280 PC_TREE_SHARED_BUFFERS shared_coeff_buf;
1281 SIMPLE_MOTION_DATA_TREE *sms_tree;
1282 SIMPLE_MOTION_DATA_TREE *sms_root;
1284 uint32_t *hash_value_buffer[2][2];
1288 CONV_BUF_TYPE *tmp_conv_dst;
1289 uint8_t *tmp_pred_bufs[2];
1292 FRAME_CONTEXT *tctx;
1294 int32_t num_64x64_blocks;
1295 PICK_MODE_CONTEXT *firstpass_ctx;
1296 TemporalFilterData tf_data;
1299 struct EncWorkerData;
1333 int thread_id_to_tile_id[MAX_NUM_THREADS];
1335 #if CONFIG_MULTITHREAD
1438 typedef struct ActiveMap {
1454 double cs_rate_array[32];
1467 #if CONFIG_INTERNAL_STATS
1475 } UENUM1BYTE(StatType);
1477 typedef struct IMAGE_STAT {
1478 double stat[NUM_STAT_TYPES];
1513 #if CONFIG_COLLECT_PARTITION_STATS
1514 typedef struct FramePartitionTimingStats {
1515 int partition_decisions[6][EXT_PARTITION_TYPES];
1516 int partition_attempts[6][EXT_PARTITION_TYPES];
1517 int64_t partition_times[6][EXT_PARTITION_TYPES];
1520 } FramePartitionTimingStats;
1523 #if CONFIG_COLLECT_COMPONENT_TIMING
1524 #include "aom_ports/aom_timer.h"
1527 av1_encode_strategy_time,
1528 av1_get_second_pass_params_time,
1529 denoise_and_encode_time,
1530 apply_filtering_time,
1531 av1_tpl_setup_stats_time,
1532 encode_frame_to_data_rate_time,
1533 encode_with_recode_loop_time,
1536 loop_restoration_time,
1537 av1_pack_bitstream_final_time,
1538 av1_encode_frame_time,
1539 av1_compute_global_motion_time,
1540 av1_setup_motion_field_time,
1543 rd_pick_partition_time,
1544 av1_prune_partitions_time,
1545 none_partition_search_time,
1546 split_partition_search_time,
1547 rectangular_partition_search_time,
1548 ab_partitions_search_time,
1549 rd_pick_4partition_time,
1552 rd_pick_sb_modes_time,
1553 av1_rd_pick_intra_mode_sb_time,
1554 av1_rd_pick_inter_mode_sb_time,
1555 handle_inter_mode_time,
1556 evaluate_motion_mode_for_winner_candidates_time,
1557 handle_intra_mode_time,
1559 av1_search_palette_mode_time,
1561 compound_type_rd_time,
1562 interpolation_filter_search_time,
1563 motion_mode_rd_time,
1565 } UENUM1BYTE(TIMING_COMPONENT);
1567 static INLINE
char const *get_component_name(
int index) {
1569 case av1_encode_strategy_time:
return "av1_encode_strategy_time";
1570 case av1_get_second_pass_params_time:
1571 return "av1_get_second_pass_params_time";
1572 case denoise_and_encode_time:
return "denoise_and_encode_time";
1573 case apply_filtering_time:
return "apply_filtering_time";
1574 case av1_tpl_setup_stats_time:
return "av1_tpl_setup_stats_time";
1575 case encode_frame_to_data_rate_time:
1576 return "encode_frame_to_data_rate_time";
1577 case encode_with_recode_loop_time:
return "encode_with_recode_loop_time";
1578 case loop_filter_time:
return "loop_filter_time";
1579 case cdef_time:
return "cdef_time";
1580 case loop_restoration_time:
return "loop_restoration_time";
1581 case av1_pack_bitstream_final_time:
return "av1_pack_bitstream_final_time";
1582 case av1_encode_frame_time:
return "av1_encode_frame_time";
1583 case av1_compute_global_motion_time:
1584 return "av1_compute_global_motion_time";
1585 case av1_setup_motion_field_time:
return "av1_setup_motion_field_time";
1586 case encode_sb_row_time:
return "encode_sb_row_time";
1588 case rd_pick_partition_time:
return "rd_pick_partition_time";
1589 case av1_prune_partitions_time:
return "av1_prune_partitions_time";
1590 case none_partition_search_time:
return "none_partition_search_time";
1591 case split_partition_search_time:
return "split_partition_search_time";
1592 case rectangular_partition_search_time:
1593 return "rectangular_partition_search_time";
1594 case ab_partitions_search_time:
return "ab_partitions_search_time";
1595 case rd_pick_4partition_time:
return "rd_pick_4partition_time";
1596 case encode_sb_time:
return "encode_sb_time";
1598 case rd_pick_sb_modes_time:
return "rd_pick_sb_modes_time";
1599 case av1_rd_pick_intra_mode_sb_time:
1600 return "av1_rd_pick_intra_mode_sb_time";
1601 case av1_rd_pick_inter_mode_sb_time:
1602 return "av1_rd_pick_inter_mode_sb_time";
1603 case handle_inter_mode_time:
return "handle_inter_mode_time";
1604 case evaluate_motion_mode_for_winner_candidates_time:
1605 return "evaluate_motion_mode_for_winner_candidates_time";
1606 case handle_intra_mode_time:
return "handle_intra_mode_time";
1607 case do_tx_search_time:
return "do_tx_search_time";
1608 case av1_search_palette_mode_time:
return "av1_search_palette_mode_time";
1609 case handle_newmv_time:
return "handle_newmv_time";
1610 case compound_type_rd_time:
return "compound_type_rd_time";
1611 case interpolation_filter_search_time:
1612 return "interpolation_filter_search_time";
1613 case motion_mode_rd_time:
return "motion_mode_rd_time";
1621 #define MAX_INTERNAL_ARFS (REF_FRAMES - BWDREF_FRAME - 1)
1651 int num_ref_frames[MAX_DIRECTIONS];
1659 FrameDistPair reference_frames[MAX_DIRECTIONS][REF_FRAMES - 1];
1679 int src_corners[2 * MAX_CORNERS];
1741 search_site_config search_site_cfg[SS_CFG_TOTAL][NUM_DISTINCT_SEARCH_METHODS];
1777 int ref_relative_dist[INTER_REFS_PER_FRAME];
1811 unsigned int coeff_opt_thresholds[MODE_EVAL_TYPES][2];
1817 TX_SIZE_SEARCH_METHOD tx_size_search_methods[MODE_EVAL_TYPES];
1825 unsigned int use_transform_domain_distortion[MODE_EVAL_TYPES];
1832 unsigned int tx_domain_dist_threshold[MODE_EVAL_TYPES];
1839 unsigned int skip_txfm_level[MODE_EVAL_TYPES];
1846 unsigned int predict_dc_level[MODE_EVAL_TYPES];
1918 int arf_stack[FRAME_BUFFERS];
1920 int lst_stack[FRAME_BUFFERS];
1922 int gld_stack[FRAME_BUFFERS];
1936 int mv_joint_count[4];
1938 int last_bit_nonzero;
1942 int hp_total_mv_rate;
1943 int lp_total_mv_rate;
1955 struct loopfilter lf;
1979 int show_frame_count;
2297 aom_variance_fn_ptr_t
fn_ptr[BLOCK_SIZES_ALL];
2330 #if CONFIG_INTERNAL_STATS
2332 uint64_t time_receive_data;
2333 uint64_t time_compress_data;
2335 unsigned int mode_chosen_counts[MAX_MODES];
2338 uint64_t total_sq_error[2];
2339 uint64_t total_samples[2];
2342 double total_blockiness;
2343 double worst_blockiness;
2346 double summed_quality;
2347 double summed_weights;
2348 double summed_quality_hbd;
2349 double summed_weights_hbd;
2350 unsigned int tot_recode_hits;
2352 double worst_ssim_hbd;
2357 int b_calculate_blockiness;
2358 int b_calculate_consistency;
2360 double total_inconsistency;
2361 double worst_consistency;
2372 #if CONFIG_SPEED_STATS
2376 unsigned int tx_search_count;
2522 #if CONFIG_COLLECT_PARTITION_STATS
2526 FramePartitionTimingStats partition_stats;
2529 #if CONFIG_COLLECT_COMPONENT_TIMING
2533 uint64_t component_time[kTimingComponents];
2534 struct aom_usec_timer component_timer[kTimingComponents];
2538 uint64_t frame_component_time[kTimingComponents];
2577 #if CONFIG_TUNE_VMAF
2581 TuneVMAFInfo vmaf_info;
2636 #if CONFIG_AV1_TEMPORAL_DENOISING
2640 AV1_DENOISER denoiser;
2667 int64_t ts_duration;
2686 int primary_ref_frame;
2696 int refresh_frame_flags;
2698 int show_existing_frame;
2699 int existing_fb_idx_to_show;
2730 } EncodeFrameResults;
2733 void av1_initialize_enc(
void);
2736 BufferPool *
const pool,
2738 COMPRESSOR_STAGE stage,
2739 int num_lap_buffers,
2740 int lap_lag_in_frames,
2741 STATS_BUFFER_CTX *stats_buf_context);
2742 void av1_remove_compressor(
AV1_COMP *cpi);
2746 void av1_check_initial_width(
AV1_COMP *cpi,
int use_highbitdepth,
2747 int subsampling_x,
int subsampling_y);
2749 void av1_init_seq_coding_tools(SequenceHeader *seq,
AV1_COMMON *cm,
2772 int64_t end_time_stamp);
2799 size_t *size, uint8_t *dest, int64_t *time_stamp,
2800 int64_t *time_end,
int flush,
2801 const aom_rational64_t *timebase);
2812 EncodeFrameResults *
const frame_results);
2823 int av1_use_as_reference(
int *ext_ref_frame_flags,
int ref_frame_flags);
2829 int av1_set_size_literal(
AV1_COMP *cpi,
int width,
int height);
2831 void av1_set_frame_size(
AV1_COMP *cpi,
int width,
int height);
2833 int av1_set_active_map(
AV1_COMP *cpi,
unsigned char *map,
int rows,
int cols);
2835 int av1_get_active_map(
AV1_COMP *cpi,
unsigned char *map,
int rows,
int cols);
2839 AOM_SCALING horiz_mode, AOM_SCALING vert_mode);
2841 int av1_get_quantizer(
struct AV1_COMP *cpi);
2843 int av1_convert_sect5obus_to_annexb(uint8_t *buffer,
size_t *input_size);
2856 void av1_set_screen_content_options(
struct AV1_COMP *cpi,
2859 void av1_update_frame_size(
AV1_COMP *cpi);
2863 static INLINE
void stack_push(
int *stack,
int *stack_size,
int item) {
2864 for (
int i = *stack_size - 1; i >= 0; --i) stack[i + 1] = stack[i];
2869 static INLINE
int stack_pop(
int *stack,
int *stack_size) {
2870 if (*stack_size <= 0)
return -1;
2872 int item = stack[0];
2873 for (
int i = 0; i < *stack_size; ++i) stack[i] = stack[i + 1];
2879 static INLINE
int stack_pop_end(
int *stack,
int *stack_size) {
2880 int item = stack[*stack_size - 1];
2881 stack[*stack_size - 1] = -1;
2887 static INLINE
void stack_reset(
int *stack,
int *stack_size) {
2888 for (
int i = 0; i < *stack_size; ++i) stack[i] = INVALID_IDX;
2893 #define TICKS_PER_SEC 10000000LL
2895 static INLINE int64_t
2896 timebase_units_to_ticks(
const aom_rational64_t *timestamp_ratio, int64_t n) {
2897 return n * timestamp_ratio->num / timestamp_ratio->den;
2900 static INLINE int64_t
2901 ticks_to_timebase_units(
const aom_rational64_t *timestamp_ratio, int64_t n) {
2902 int64_t round = timestamp_ratio->num / 2;
2903 if (round > 0) --round;
2904 return (n * timestamp_ratio->den + round) / timestamp_ratio->num;
2907 static INLINE
int frame_is_kf_gf_arf(
const AV1_COMP *cpi) {
2909 const FRAME_UPDATE_TYPE update_type =
gf_group->update_type[
gf_group->index];
2911 return frame_is_intra_only(&cpi->
common) || update_type == ARF_UPDATE ||
2912 update_type == GF_UPDATE;
2916 static INLINE
int av1_use_hash_me(
const AV1_COMP *
const cpi) {
2919 frame_is_intra_only(&cpi->
common));
2923 const AV1_COMMON *
const cm, MV_REFERENCE_FRAME ref_frame) {
2924 const RefCntBuffer *
const buf = get_ref_frame_buf(cm, ref_frame);
2925 return buf != NULL ? &buf->buf : NULL;
2928 static INLINE
int enc_is_ref_frame_buf(
const AV1_COMMON *
const cm,
2929 const RefCntBuffer *
const frame_buf) {
2930 MV_REFERENCE_FRAME ref_frame;
2931 for (ref_frame = LAST_FRAME; ref_frame <= ALTREF_FRAME; ++ref_frame) {
2932 const RefCntBuffer *
const buf = get_ref_frame_buf(cm, ref_frame);
2933 if (buf == NULL)
continue;
2934 if (frame_buf == buf)
break;
2936 return (ref_frame <= ALTREF_FRAME);
2939 static INLINE
void alloc_frame_mvs(
AV1_COMMON *
const cm, RefCntBuffer *buf) {
2940 assert(buf != NULL);
2941 ensure_mv_buffer(buf, cm);
2942 buf->width = cm->
width;
2943 buf->height = cm->
height;
2948 static INLINE
unsigned int allocated_tokens(TileInfo tile,
int sb_size_log2,
2950 int tile_mb_rows = (tile.mi_row_end - tile.mi_row_start + 2) >> 2;
2951 int tile_mb_cols = (tile.mi_col_end - tile.mi_col_start + 2) >> 2;
2953 return get_token_alloc(tile_mb_rows, tile_mb_cols, sb_size_log2, num_planes);
2956 static INLINE
void get_start_tok(
AV1_COMP *cpi,
int tile_row,
int tile_col,
2957 int mi_row, TokenExtra **tok,
int sb_size_log2,
2961 TileDataEnc *this_tile = &cpi->
tile_data[tile_row * tile_cols + tile_col];
2962 const TileInfo *
const tile_info = &this_tile->tile_info;
2964 const int tile_mb_cols =
2965 (tile_info->mi_col_end - tile_info->mi_col_start + 2) >> 2;
2966 const int tile_mb_row = (mi_row - tile_info->mi_row_start + 2) >> 2;
2968 *tok = cpi->
token_info.tile_tok[tile_row][tile_col] +
2969 get_token_alloc(tile_mb_row, tile_mb_cols, sb_size_log2, num_planes);
2974 #define ALT_MIN_LAG 3
2975 static INLINE
int is_altref_enabled(
int lag_in_frames,
bool enable_auto_arf) {
2976 return lag_in_frames >= ALT_MIN_LAG && enable_auto_arf;
2980 static INLINE
int is_stat_generation_stage(
const AV1_COMP *
const cpi) {
2986 static INLINE
int is_stat_consumption_stage_twopass(
const AV1_COMP *
const cpi) {
2991 static INLINE
int is_stat_consumption_stage(
const AV1_COMP *
const cpi) {
2992 return (is_stat_consumption_stage_twopass(cpi) ||
3013 static INLINE
int get_stats_buf_size(
int num_lap_buffer,
int num_lag_buffer) {
3015 return (num_lap_buffer > 0 ? num_lap_buffer + 1 : num_lag_buffer);
3021 MV_REFERENCE_FRAME ref0,
3022 MV_REFERENCE_FRAME ref1) {
3024 get_ref_scale_factors_const(cm, ref0 >= LAST_FRAME ? ref0 : 1);
3026 get_ref_scale_factors_const(cm, ref1 >= LAST_FRAME ? ref1 : 1);
3029 static INLINE
int get_chessboard_index(
int frame_index) {
3030 return frame_index & 0x1;
3033 static INLINE
const int *cond_cost_list_const(
const struct AV1_COMP *cpi,
3034 const int *cost_list) {
3035 const int use_cost_list = cpi->
sf.
mv_sf.subpel_search_method != SUBPEL_TREE &&
3036 cpi->
sf.
mv_sf.use_fullpel_costlist;
3037 return use_cost_list ? cost_list : NULL;
3040 static INLINE
int *cond_cost_list(
const struct AV1_COMP *cpi,
int *cost_list) {
3041 const int use_cost_list = cpi->
sf.
mv_sf.subpel_search_method != SUBPEL_TREE &&
3042 cpi->
sf.
mv_sf.use_fullpel_costlist;
3043 return use_cost_list ? cost_list : NULL;
3047 double av1_get_compression_ratio(
const AV1_COMMON *
const cm,
3048 size_t encoded_frame_size);
3052 void av1_setup_frame_size(
AV1_COMP *cpi);
3054 #define LAYER_IDS_TO_IDX(sl, tl, num_tl) ((sl) * (num_tl) + (tl))
3057 static INLINE
int av1_resize_scaled(
const AV1_COMMON *cm) {
3062 static INLINE
int av1_frame_scaled(
const AV1_COMMON *cm) {
3063 return !av1_superres_scaled(cm) && av1_resize_scaled(cm);
3069 static INLINE
int encode_show_existing_frame(
const AV1_COMMON *cm) {
3076 static INLINE
int get_mi_ext_idx(
const int mi_row,
const int mi_col,
3077 const BLOCK_SIZE mi_alloc_bsize,
3078 const int mbmi_ext_stride) {
3079 const int mi_ext_size_1d = mi_size_wide[mi_alloc_bsize];
3080 const int mi_ext_row = mi_row / mi_ext_size_1d;
3081 const int mi_ext_col = mi_col / mi_ext_size_1d;
3082 return mi_ext_row * mbmi_ext_stride + mi_ext_col;
3087 static INLINE
void set_mode_info_offsets(
3091 set_mi_offsets(mi_params, xd, mi_row, mi_col);
3092 const int ext_idx = get_mi_ext_idx(mi_row, mi_col, mi_params->
mi_alloc_bsize,
3100 static INLINE BLOCK_SIZE find_partition_size(BLOCK_SIZE bsize,
int rows_left,
3101 int cols_left,
int *bh,
int *bw) {
3102 int int_size = (int)bsize;
3103 if (rows_left <= 0 || cols_left <= 0) {
3104 return AOMMIN(bsize, BLOCK_8X8);
3106 for (; int_size > 0; int_size -= 3) {
3107 *bh = mi_size_high[int_size];
3108 *bw = mi_size_wide[int_size];
3109 if ((*bh <= rows_left) && (*bw <= cols_left)) {
3114 return (BLOCK_SIZE)int_size;
3117 static const uint8_t av1_ref_frame_flag_list[REF_FRAMES] = { 0,
3128 static const MV_REFERENCE_FRAME disable_order[] = {
3135 static const MV_REFERENCE_FRAME
3136 ref_frame_priority_order[INTER_REFS_PER_FRAME] = {
3137 LAST_FRAME, ALTREF_FRAME, BWDREF_FRAME, GOLDEN_FRAME,
3138 ALTREF2_FRAME, LAST2_FRAME, LAST3_FRAME,
3143 const int ext_ref_frame_flags) {
3148 int flags = ext_ref_frame_flags;
3150 for (
int i = 1; i < INTER_REFS_PER_FRAME; ++i) {
3155 int index = (
sf->
rt_sf.use_nonrd_pick_mode &&
3156 ref_frame_priority_order[i] == GOLDEN_FRAME)
3157 ? (1 +
sf->
rt_sf.use_nonrd_altref_frame)
3159 for (
int j = 0; j < index; ++j) {
3160 if (this_ref == ref_frames[j]) {
3161 flags &= ~(1 << (ref_frame_priority_order[i] - 1));
3180 #define MAX_GFUBOOST_FACTOR 10.0
3181 #define MIN_GFUBOOST_FACTOR 4.0
3185 const FRAME_UPDATE_TYPE update_type =
gf_group->update_type[index];
3186 return update_type == ARF_UPDATE || update_type == GF_UPDATE ||
3187 update_type == KF_UPDATE;
3190 static INLINE
int is_frame_eligible_for_ref_pruning(
const GF_GROUP *
gf_group,
3191 int selective_ref_frame,
3192 int prune_ref_frames,
3194 return (selective_ref_frame > 0) && (prune_ref_frames > 0) &&
3195 !is_frame_tpl_eligible(
gf_group, gf_index);
3199 static INLINE FRAME_UPDATE_TYPE
3204 static INLINE
int av1_pixels_to_mi(
int pixels) {
3205 return ALIGN_POWER_OF_TWO(pixels, 3) >> MI_SIZE_LOG2;
3208 static AOM_INLINE
int is_psnr_calc_enabled(
const AV1_COMP *cpi) {
3215 #if CONFIG_AV1_TEMPORAL_DENOISING
3216 static INLINE
int denoise_svc(
const struct AV1_COMP *
const cpi) {
3218 cpi->
svc.first_layer_denoise));
3222 #if CONFIG_COLLECT_PARTITION_STATS == 2
3223 static INLINE
void av1_print_fr_partition_timing_stats(
3224 const FramePartitionTimingStats *part_stats,
const char *filename) {
3225 FILE *f = fopen(filename,
"w");
3230 fprintf(f,
"bsize,redo,");
3231 for (
int part = 0; part < EXT_PARTITION_TYPES; part++) {
3232 fprintf(f,
"decision_%d,", part);
3234 for (
int part = 0; part < EXT_PARTITION_TYPES; part++) {
3235 fprintf(f,
"attempt_%d,", part);
3237 for (
int part = 0; part < EXT_PARTITION_TYPES; part++) {
3238 fprintf(f,
"time_%d,", part);
3242 static const int bsizes[6] = { 128, 64, 32, 16, 8, 4 };
3244 for (
int bsize_idx = 0; bsize_idx < 6; bsize_idx++) {
3245 fprintf(f,
"%d,%d,", bsizes[bsize_idx], part_stats->partition_redo);
3246 for (
int part = 0; part < EXT_PARTITION_TYPES; part++) {
3247 fprintf(f,
"%d,", part_stats->partition_decisions[bsize_idx][part]);
3249 for (
int part = 0; part < EXT_PARTITION_TYPES; part++) {
3250 fprintf(f,
"%d,", part_stats->partition_attempts[bsize_idx][part]);
3252 for (
int part = 0; part < EXT_PARTITION_TYPES; part++) {
3253 fprintf(f,
"%ld,", part_stats->partition_times[bsize_idx][part]);
3261 #if CONFIG_COLLECT_PARTITION_STATS
3262 static INLINE
int av1_get_bsize_idx_for_part_stats(BLOCK_SIZE bsize) {
3263 assert(bsize == BLOCK_128X128 || bsize == BLOCK_64X64 ||
3264 bsize == BLOCK_32X32 || bsize == BLOCK_16X16 || bsize == BLOCK_8X8 ||
3265 bsize == BLOCK_4X4);
3267 case BLOCK_128X128:
return 0;
3268 case BLOCK_64X64:
return 1;
3269 case BLOCK_32X32:
return 2;
3270 case BLOCK_16X16:
return 3;
3271 case BLOCK_8X8:
return 4;
3272 case BLOCK_4X4:
return 5;
3273 default: assert(0 &&
"Invalid bsize for partition_stats.");
return -1;
3278 #if CONFIG_COLLECT_COMPONENT_TIMING
3279 static INLINE
void start_timing(
AV1_COMP *cpi,
int component) {
3280 aom_usec_timer_start(&cpi->component_timer[component]);
3282 static INLINE
void end_timing(
AV1_COMP *cpi,
int component) {
3283 aom_usec_timer_mark(&cpi->component_timer[component]);
3284 cpi->frame_component_time[component] +=
3285 aom_usec_timer_elapsed(&cpi->component_timer[component]);
3287 static INLINE
char const *get_frame_type_enum(
int type) {
3289 case 0:
return "KEY_FRAME";
3290 case 1:
return "INTER_FRAME";
3291 case 2:
return "INTRA_ONLY_FRAME";
3292 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 AV1_COMP AV1_COMP
Top level encoder structure.
struct EncodeFrameParams EncodeFrameParams
contains per-frame encoding parameters decided upon by av1_encode_strategy() and passed down to av1_e...
struct EncodeFrameInput EncodeFrameInput
Input frames and last input frame.
struct MultiThreadInfo MultiThreadInfo
Encoder parameters related to multi-threading.
struct inter_modes_info InterModesInfo
Struct used to hold inter mode data for fast tx search.
struct AV1EncoderConfig AV1EncoderConfig
Main encoder configuration data structure.
@ RESTORE_SWITCHABLE_TYPES
Definition: enums.h:654
aom_tune_content
Definition: aomcx.h:1388
aom_tune_metric
Model tuning parameters.
Definition: aomcx.h:1407
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
long aom_enc_frame_flags_t
Encoded Frame Flags.
Definition: aom_encoder.h:357
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:3407
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:3318
int av1_get_compressed_data(AV1_COMP *cpi, unsigned int *frame_flags, size_t *size, uint8_t *dest, int64_t *time_stamp, int64_t *time_end, int flush, const aom_rational64_t *timebase)
Encode a frame.
Definition: encoder.c:3608
static int has_no_stats_stage(const AV1_COMP *const cpi)
Check if the current stage has statistics.
Definition: encoder.h:3006
Describes look ahead buffer operations.
Top level common structure used by both encoder and decoder.
Definition: av1_common_int.h:723
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
Encoder data related to row-based multi-threading.
Definition: encoder.h:1306
pthread_mutex_t * mutex_
Definition: encoder.h:1339
int allocated_tile_cols
Definition: encoder.h:1314
int allocated_cols
Definition: encoder.h:1328
int allocated_tile_rows
Definition: encoder.h:1310
int allocated_rows
Definition: encoder.h:1321
Encoder parameters for synchronization of row based multi-threading.
Definition: encoder.h:1218
int rows
Definition: encoder.h:1243
int sync_range
Definition: encoder.h:1239
int next_mi_row
Definition: encoder.h:1247
pthread_mutex_t * mutex_
Definition: encoder.h:1224
pthread_cond_t * cond_
Definition: encoder.h:1225
int num_threads_working
Definition: encoder.h:1251
Main encoder configuration data structure.
Definition: encoder.h:791
RateControlCfg rc_cfg
Definition: encoder.h:813
KeyFrameCfg kf_cfg
Definition: encoder.h:808
enum aom_enc_pass pass
Definition: encoder.h:916
AlgoCfg algo_cfg
Definition: encoder.h:803
aom_fixed_buf_t twopass_stats_in
Definition: encoder.h:830
Top level encoder structure.
Definition: encoder.h:2042
uint8_t * consec_zero_mv
Definition: encoder.h:2647
struct aom_denoise_and_model_t * denoise_and_model
Definition: encoder.h:2497
int vaq_refresh
Definition: encoder.h:2438
FRAME_TYPE last_frame_type
Definition: encoder.h:2612
YV12_BUFFER_CONFIG * unscaled_source
Definition: encoder.h:2120
CYCLIC_REFRESH * cyclic_refresh
Definition: encoder.h:2285
int partition_search_skippable_frame
Definition: encoder.h:2156
aom_variance_fn_ptr_t fn_ptr[BLOCK_SIZES_ALL]
Definition: encoder.h:2297
InitialDimensions initial_dimensions
Definition: encoder.h:2398
RATE_CONTROL rc
Definition: encoder.h:2238
int deltaq_used
Definition: encoder.h:2549
ActiveMap active_map
Definition: encoder.h:2290
TokenInfo token_info
Definition: encoder.h:2426
struct lookahead_ctx * lookahead
Definition: encoder.h:2090
int64_t ambient_err
Definition: encoder.h:2207
aom_film_grain_table_t * film_grain_table
Definition: encoder.h:2490
int b_calculate_psnr
Definition: encoder.h:2370
int lap_enabled
Definition: encoder.h:2596
IntraBCMVCosts dv_costs
Definition: encoder.h:2475
SPEED_FEATURES sf
Definition: encoder.h:2264
TRELLIS_OPT_TYPE optimize_seg_arr[8]
Definition: encoder.h:2101
double * ssim_rdmult_scaling_factors
Definition: encoder.h:2575
RD_OPT rd
Definition: encoder.h:2212
int num_tg
Definition: encoder.h:2617
FrameProbInfo frame_probs
Definition: encoder.h:2448
WinnerModeParams winner_mode_params
Definition: encoder.h:2228
double * tpl_sb_rdmult_scaling_factors
Definition: encoder.h:2569
ExternalFlags ext_flags
Definition: encoder.h:2190
EncSegmentationInfo enc_seg
Definition: encoder.h:2280
MotionVectorSearchParams mv_search_params
Definition: encoder.h:2269
int use_screen_content_tools
Definition: encoder.h:2512
CODING_CONTEXT coding_context
Definition: encoder.h:2218
TemporalFilterCtx tf_ctx
Definition: encoder.h:2151
ForceIntegerMVInfo force_intpel_info
Definition: encoder.h:2161
GlobalMotionInfo gm_info
Definition: encoder.h:2223
CoeffBufferPool coeff_buffer_pool
Definition: encoder.h:2075
FRAME_INDEX_SET frame_index_set
Definition: encoder.h:2393
int ref_frame_flags
Definition: encoder.h:2254
RefCntBuffer * scaled_ref_buf[INTER_REFS_PER_FRAME]
Definition: encoder.h:2167
AV1EncoderConfig oxcf
Definition: encoder.h:2085
AV1_COMMON common
Definition: encoder.h:2080
int show_existing_alt_ref
Definition: encoder.h:2328
AV1LrStruct lr_ctxt
Definition: encoder.h:2485
TplParams tpl_data
Definition: encoder.h:2146
FRAME_COUNTS counts
Definition: encoder.h:2057
GF_GROUP gf_group
Definition: encoder.h:2307
COMPRESSOR_STAGE compressor_stage
Definition: encoder.h:2600
int intrabc_used
Definition: encoder.h:2470
int seq_params_locked
Definition: encoder.h:2433
int no_show_fwd_kf
Definition: encoder.h:2095
int prune_ref_frame_mask
Definition: encoder.h:2480
YV12_BUFFER_CONFIG * unscaled_last_source
Definition: encoder.h:2130
int all_one_sided_refs
Definition: encoder.h:2275
MultiThreadInfo mt_info
Definition: encoder.h:2453
VarBasedPartitionInfo vbp_info
Definition: encoder.h:2443
YV12_BUFFER_CONFIG * last_source
Definition: encoder.h:2114
int existing_fb_idx_to_show
Definition: encoder.h:2460
YV12_BUFFER_CONFIG alt_ref_buffer
Definition: encoder.h:2323
YV12_BUFFER_CONFIG * unfiltered_source
Definition: encoder.h:2141
GF_STATE gf_state
Definition: encoder.h:2312
FRAME_INFO frame_info
Definition: encoder.h:2388
int droppable
Definition: encoder.h:2383
RefCntBuffer * last_show_frame_buf
Definition: encoder.h:2172
aom_superres_mode superres_mode
Definition: encoder.h:2624
MBMIExtFrameBufferInfo mbmi_ext_info
Definition: encoder.h:2062
int use_svc
Definition: encoder.h:2587
double * tpl_rdmult_scaling_factors
Definition: encoder.h:2564
int internal_altref_allowed
Definition: encoder.h:2465
RefBufferStack ref_buffer_stack
Definition: encoder.h:2317
TileDataEnc * tile_data
Definition: encoder.h:2417
int is_screen_content_type
Definition: encoder.h:2520
InterpSearchFlags interp_search_flags
Definition: encoder.h:2503
AV1LevelParams level_params
Definition: encoder.h:2544
TimeStamps time_stamps
Definition: encoder.h:2233
int frames_left
Definition: encoder.h:2652
FirstPassData firstpass_data
Definition: encoder.h:2629
double framerate
Definition: encoder.h:2243
TWO_PASS twopass
Definition: encoder.h:2302
int speed
Definition: encoder.h:2259
BLOCK_SIZE fp_block_size
Definition: encoder.h:2657
int fb_of_context_type[REF_FRAMES]
Definition: encoder.h:2185
YV12_BUFFER_CONFIG trial_frame_rst
Definition: encoder.h:2202
ThreadData td
Definition: encoder.h:2052
ResizePendingParams resize_pending_params
Definition: encoder.h:2411
YV12_BUFFER_CONFIG scaled_source
Definition: encoder.h:2125
YV12_BUFFER_CONFIG last_frame_uf
Definition: encoder.h:2196
EncQuantDequantParams enc_quant_dequant_params
Definition: encoder.h:2047
RefFrameDistanceInfo ref_frame_dist_info
Definition: encoder.h:2554
int initial_mbs
Definition: encoder.h:2406
YV12_BUFFER_CONFIG scaled_last_source
Definition: encoder.h:2135
MV_STATS mv_stats
Definition: encoder.h:2606
YV12_BUFFER_CONFIG * source
Definition: encoder.h:2108
int allocated_tiles
Definition: encoder.h:2421
RefreshFrameFlagsInfo refresh_frame
Definition: encoder.h:2177
struct aom_codec_pkt_list * output_pkt_list
Definition: encoder.h:2249
SVC svc
Definition: encoder.h:2591
CB_COEFF_BUFFER * coeff_buffer_base
Definition: encoder.h:2069
NOISE_ESTIMATE noise_estimate
Definition: encoder.h:2634
Algorithm configuration parameters.
Definition: encoder.h:703
int disable_trellis_quant
Definition: encoder.h:716
int sharpness
Definition: encoder.h:707
int arnr_max_frames
Definition: encoder.h:721
bool enable_tpl_model
Definition: encoder.h:739
uint8_t cdf_update_mode
Definition: encoder.h:734
bool enable_overlay
Definition: encoder.h:745
int arnr_strength
Definition: encoder.h:726
Stores the transforms coefficients for the whole superblock.
Definition: block.h:180
The stucture of CYCLIC_REFRESH.
Definition: aq_cyclicrefresh.h:34
Parameters related to CDEF.
Definition: av1_common_int.h:194
Definition: encoder.h:2024
uint8_t * entropy_ctx
Definition: encoder.h:2036
tran_low_t * tcoeff
Definition: encoder.h:2028
uint16_t * eobs
Definition: encoder.h:2032
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
Encoder flags for compound prediction modes.
Definition: encoder.h:298
bool enable_masked_comp
Definition: encoder.h:307
bool enable_diff_wtd_comp
Definition: encoder.h:315
bool enable_smooth_interintra
Definition: encoder.h:311
bool enable_interintra_wedge
Definition: encoder.h:323
bool enable_interinter_wedge
Definition: encoder.h:319
bool enable_dist_wtd_comp
Definition: encoder.h:302
Contains buffers used by av1_compound_type_rd()
Definition: block.h:372
Segmentation related information for the current frame.
Definition: encoder.h:1987
uint8_t * map
Definition: encoder.h:1993
bool has_lossless_segment
Definition: encoder.h:1999
contains per-frame encoding parameters decided upon by av1_encode_strategy() and passed down to av1_e...
Definition: encoder.h:2675
int error_resilient_mode
Definition: encoder.h:2679
int remapped_ref_idx[REF_FRAMES]
Definition: encoder.h:2710
int ref_frame_flags
Definition: encoder.h:2705
int speed
Definition: encoder.h:2721
FRAME_TYPE frame_type
Definition: encoder.h:2683
int show_frame
Definition: encoder.h:2693
RefreshFrameFlagsInfo refresh_frame
Definition: encoder.h:2716
Frame refresh flags set by the external interface.
Definition: encoder.h:1856
bool golden_frame
Definition: encoder.h:1858
bool bwd_ref_frame
Definition: encoder.h:1859
bool update_pending
Definition: encoder.h:1865
bool last_frame
Definition: encoder.h:1857
bool alt_ref_frame
Definition: encoder.h:1861
bool alt2_ref_frame
Definition: encoder.h:1860
Flags signalled by the external interface at frame level.
Definition: encoder.h:1871
bool use_primary_ref_none
Definition: encoder.h:1912
bool use_ref_frame_mvs
Definition: encoder.h:1896
ExtRefreshFrameFlagsInfo refresh_frame
Definition: encoder.h:1880
int ref_frame_flags
Definition: encoder.h:1875
bool use_error_resilient
Definition: encoder.h:1901
bool use_s_frame
Definition: encoder.h:1906
bool refresh_frame_context
Definition: encoder.h:1885
bool refresh_frame_context_pending
Definition: encoder.h:1891
The stucture of acummulated frame stats in the first pass.
Definition: firstpass.h:36
Frame level features.
Definition: av1_common_int.h:334
bool allow_screen_content_tools
Definition: av1_common_int.h:351
bool allow_intrabc
Definition: av1_common_int.h:352
bool error_resilient_mode
Definition: av1_common_int.h:376
Encoder info used for decision on forcing integer motion vectors.
Definition: encoder.h:1449
int rate_size
Definition: encoder.h:1462
int rate_index
Definition: encoder.h:1458
Encoder-side probabilities for pruning of various AV1 tools.
Definition: encoder.h:946
Data related to the current GF/ARF group and the individual frames within the group.
Definition: firstpass.h:171
Parameters related to global motion search.
Definition: encoder.h:1628
bool search_done
Definition: encoder.h:1632
int segment_map_h
Definition: encoder.h:1666
int num_src_corners
Definition: encoder.h:1672
unsigned char * src_buffer
Definition: encoder.h:1644
int segment_map_w
Definition: encoder.h:1665
Initial frame dimensions.
Definition: encoder.h:1691
int height
Definition: encoder.h:1693
int width
Definition: encoder.h:1692
Flags related to interpolation filter search.
Definition: encoder.h:1699
int default_interp_skip_flags
Definition: encoder.h:1704
uint16_t interp_filter_search_mask
Definition: encoder.h:1708
Encoder flags for intra prediction.
Definition: encoder.h:228
bool enable_smooth_intra
Definition: encoder.h:241
bool enable_filter_intra
Definition: encoder.h:237
bool enable_paeth_intra
Definition: encoder.h:245
bool enable_intra_edge_filter
Definition: encoder.h:232
bool enable_cfl_intra
Definition: encoder.h:249
bool enable_angle_delta
Definition: encoder.h:254
Encoder config related to the coding of key frames.
Definition: encoder.h:365
int key_freq_max
Definition: encoder.h:374
int sframe_mode
Definition: encoder.h:392
bool auto_key
Definition: encoder.h:397
bool enable_intrabc
Definition: encoder.h:412
int sframe_dist
Definition: encoder.h:385
bool enable_sframe
Definition: encoder.h:407
int enable_keyframe_filtering
Definition: encoder.h:379
int key_freq_min
Definition: encoder.h:369
bool fwd_kf_enabled
Definition: encoder.h:402
Buffer to store mode information at mi_alloc_bsize (4x4 or 8x8) level.
Definition: encoder.h:1495
int alloc_size
Definition: encoder.h:1504
int stride
Definition: encoder.h:1508
MB_MODE_INFO_EXT_FRAME * frame_base
Definition: encoder.h:1500
Stores best extended mode information at frame level.
Definition: block.h:216
Stores the prediction/txfm mode of the current coding block.
Definition: blockd.h:221
Parameters for motion vector search process.
Definition: encoder.h:1714
int max_mv_magnitude
Definition: encoder.h:1720
fractional_mv_step_fp * find_fractional_mv_step
Definition: encoder.h:1734
int mv_step_param
Definition: encoder.h:1725
Encoder parameters related to multi-threading.
Definition: encoder.h:1360
AV1LrSync lr_row_sync
Definition: encoder.h:1418
struct EncWorkerData * tile_thr_data
Definition: encoder.h:1392
AV1TplRowMultiThreadInfo tpl_row_mt
Definition: encoder.h:1408
int enc_mt_buf_init_done
Definition: encoder.h:1381
AV1EncRowMultiThreadInfo enc_row_mt
Definition: encoder.h:1403
AV1LfSync lf_row_sync
Definition: encoder.h:1413
AV1CdefSync cdef_sync
Definition: encoder.h:1433
int num_mod_workers[NUM_MT_MODULES]
Definition: encoder.h:1369
int num_workers
Definition: encoder.h:1364
AVxWorker * workers
Definition: encoder.h:1386
int fp_mt_buf_init_done
Definition: encoder.h:1375
bool row_mt_enabled
Definition: encoder.h:1398
AV1TemporalFilterSync tf_sync
Definition: encoder.h:1428
AV1GlobalMotionSync gm_sync
Definition: encoder.h:1423
Contains buffers used to speed up rdopt for obmc.
Definition: block.h:335
Contains color maps used in palette mode.
Definition: block.h:360
Encoder config for coding block partitioning.
Definition: encoder.h:200
bool enable_rect_partitions
Definition: encoder.h:204
bool enable_1to4_partitions
Definition: encoder.h:212
BLOCK_SIZE max_partition_size
Definition: encoder.h:222
bool enable_ab_partitions
Definition: encoder.h:208
BLOCK_SIZE min_partition_size
Definition: encoder.h:217
Rate Control parameters and status.
Definition: ratectrl.h:118
Encoder rate control configuration parameters.
Definition: encoder.h:418
int worst_allowed_q
Definition: encoder.h:488
int over_shoot_pct
Definition: encoder.h:483
unsigned int max_intra_bitrate_pct
Definition: encoder.h:453
int drop_frames_water_mark
Definition: encoder.h:471
int vbrmax_section
Definition: encoder.h:519
int64_t maximum_buffer_size_ms
Definition: encoder.h:437
unsigned int vbr_corpus_complexity_lap
Definition: encoder.h:448
unsigned int min_cr
Definition: encoder.h:467
int vbrbias
Definition: encoder.h:509
unsigned int gf_cbr_boost_pct
Definition: encoder.h:462
int vbrmin_section
Definition: encoder.h:514
unsigned int max_inter_bitrate_pct
Definition: encoder.h:458
int64_t starting_buffer_level_ms
Definition: encoder.h:427
int best_allowed_q
Definition: encoder.h:493
int under_shoot_pct
Definition: encoder.h:477
int64_t target_bandwidth
Definition: encoder.h:442
int64_t optimal_buffer_level_ms
Definition: encoder.h:432
int cq_level
Definition: encoder.h:497
Refrence frame distance related variables.
Definition: encoder.h:1773
int8_t nearest_past_ref
Definition: encoder.h:1781
int8_t nearest_future_ref
Definition: encoder.h:1785
Refresh frame flags for different type of frames.
Definition: encoder.h:1752
bool alt_ref_frame
Definition: encoder.h:1755
bool bwd_ref_frame
Definition: encoder.h:1754
bool golden_frame
Definition: encoder.h:1753
Encoder config related to resize.
Definition: encoder.h:180
uint8_t resize_scale_denominator
Definition: encoder.h:189
uint8_t resize_kf_scale_denominator
Definition: encoder.h:194
RESIZE_MODE resize_mode
Definition: encoder.h:184
Desired dimensions for an externally triggered resize.
Definition: encoder.h:1765
int width
Definition: encoder.h:1766
int height
Definition: encoder.h:1767
Top level speed vs quality trade off data struture.
Definition: speed_features.h:1064
MV_SPEED_FEATURES mv_sf
Definition: speed_features.h:1088
REAL_TIME_SPEED_FEATURES rt_sf
Definition: speed_features.h:1128
The stucture of SVC.
Definition: svc_layercontext.h:91
Encoder config related to frame super-resolution.
Definition: encoder.h:329
uint8_t superres_kf_scale_denominator
Definition: encoder.h:351
aom_superres_mode superres_mode
Definition: encoder.h:355
int superres_kf_qthresh
Definition: encoder.h:339
bool enable_superres
Definition: encoder.h:359
uint8_t superres_scale_denominator
Definition: encoder.h:345
int superres_qthresh
Definition: encoder.h:334
Two pass status and control data.
Definition: firstpass.h:216
Parameters related to temporal filtering.
Definition: temporal_filter.h:75
Frame time stamps.
Definition: encoder.h:2005
int64_t prev_ts_start
Definition: encoder.h:2009
int64_t first_ts_start
Definition: encoder.h:2017
int64_t prev_ts_end
Definition: encoder.h:2013
Params related to temporal dependency model.
Definition: tpl_model.h:120
Encoder flags for transform sizes and types.
Definition: encoder.h:260
bool enable_tx64
Definition: encoder.h:264
bool use_inter_dct_only
Definition: encoder.h:287
bool enable_flip_idtx
Definition: encoder.h:268
bool use_intra_default_tx_only
Definition: encoder.h:292
bool use_intra_dct_only
Definition: encoder.h:282
bool enable_rect_tx
Definition: encoder.h:272
bool reduced_tx_type_set
Definition: encoder.h:277
Thresholds for variance based partitioning.
Definition: encoder.h:1197
int64_t threshold_minmax
Definition: encoder.h:1212
Parameters used for winner mode processing.
Definition: encoder.h:1803
Generic fixed size buffer structure.
Definition: aom_encoder.h:76
Struct used to hold inter mode data for fast tx search.
Definition: encoder.h:1102
RD_STATS rd_cost_arr[MAX_INTER_MODES]
Definition: encoder.h:1131
int64_t est_rd_arr[MAX_INTER_MODES]
Definition: encoder.h:1123
int64_t sse_arr[MAX_INTER_MODES]
Definition: encoder.h:1119
RD_STATS rd_cost_y_arr[MAX_INTER_MODES]
Definition: encoder.h:1135
RD_STATS rd_cost_uv_arr[MAX_INTER_MODES]
Definition: encoder.h:1139
MB_MODE_INFO mbmi_arr[MAX_INTER_MODES]
Definition: encoder.h:1111
RdIdxPair rd_idx_pair_arr[MAX_INTER_MODES]
Definition: encoder.h:1127
int mode_rate_arr[MAX_INTER_MODES]
Definition: encoder.h:1115
int num
Definition: encoder.h:1107
Encoder's parameters related to the current coding block.
Definition: block.h:829
MB_MODE_INFO_EXT_FRAME * mbmi_ext_frame
Finalized mbmi_ext for the whole frame.
Definition: block.h:861
Variables related to current coding block.
Definition: blockd.h:577
const struct scale_factors * block_ref_scale_factors[2]
Definition: blockd.h:694
YV12 frame buffer data structure.
Definition: yv12config.h:38