AOMedia AV1 Codec
encoder.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2016, Alliance for Open Media. All rights reserved.
3 *
4 * This source code is subject to the terms of the BSD 2 Clause License and
5 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
6 * was not distributed with this source code in the LICENSE file, you can
7 * obtain it at www.aomedia.org/license/software. If the Alliance for Open
8 * Media Patent License 1.0 was not distributed with this source code in the
9 * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
10 */
11
15#ifndef AOM_AV1_ENCODER_ENCODER_H_
16#define AOM_AV1_ENCODER_ENCODER_H_
17
18#include <stdbool.h>
19#include <stdio.h>
20
21#include "config/aom_config.h"
22
23#include "aom/aomcx.h"
24#include "aom_util/aom_pthread.h"
25
26#include "av1/common/alloccommon.h"
27#include "av1/common/av1_common_int.h"
28#include "av1/common/blockd.h"
29#include "av1/common/entropymode.h"
30#include "av1/common/enums.h"
31#include "av1/common/reconintra.h"
32#include "av1/common/resize.h"
33#include "av1/common/thread_common.h"
34#include "av1/common/timing.h"
35
36#include "av1/encoder/aq_cyclicrefresh.h"
37#include "av1/encoder/av1_quantize.h"
38#include "av1/encoder/block.h"
39#include "av1/encoder/context_tree.h"
40#include "av1/encoder/enc_enums.h"
41#include "av1/encoder/encodemb.h"
42#include "av1/encoder/external_partition.h"
43#include "av1/encoder/firstpass.h"
44#include "av1/encoder/global_motion.h"
45#include "av1/encoder/level.h"
47#include "av1/encoder/mcomp.h"
48#include "av1/encoder/pickcdef.h"
49#include "av1/encoder/ratectrl.h"
50#include "av1/encoder/rd.h"
52#include "av1/encoder/svc_layercontext.h"
53#include "av1/encoder/temporal_filter.h"
54#if CONFIG_THREE_PASS
55#include "av1/encoder/thirdpass.h"
56#endif
57#include "av1/encoder/tokenize.h"
58#include "av1/encoder/tpl_model.h"
59#include "av1/encoder/av1_noise_estimate.h"
60#include "av1/encoder/bitstream.h"
61
62#if CONFIG_INTERNAL_STATS
63#include "aom_dsp/ssim.h"
64#endif
65#include "aom_dsp/variance.h"
66#if CONFIG_DENOISE
67#include "aom_dsp/noise_model.h"
68#endif
69#if CONFIG_TUNE_VMAF
70#include "av1/encoder/tune_vmaf.h"
71#endif
72#if CONFIG_AV1_TEMPORAL_DENOISING
73#include "av1/encoder/av1_temporal_denoiser.h"
74#endif
75#if CONFIG_TUNE_BUTTERAUGLI
76#include "av1/encoder/tune_butteraugli.h"
77#endif
78
79#include "aom/internal/aom_codec_internal.h"
80
81#ifdef __cplusplus
82extern "C" {
83#endif
84
85// TODO(yunqing, any): Added suppression tag to quiet Doxygen warnings. Need to
86// adjust it while we work on documentation.
88// Number of frames required to test for scene cut detection
89#define SCENE_CUT_KEY_TEST_INTERVAL 16
90
91// Lookahead index threshold to enable temporal filtering for second arf.
92#define TF_LOOKAHEAD_IDX_THR 7
93
94#define HDR_QP_LEVELS 10
95#define CHROMA_CB_QP_SCALE 1.04
96#define CHROMA_CR_QP_SCALE 1.04
97#define CHROMA_QP_SCALE -0.46
98#define CHROMA_QP_OFFSET 9.26
99#define QP_SCALE_FACTOR 2.0
100#define DISABLE_HDR_LUMA_DELTAQ 1
101
102// Rational number with an int64 numerator
103// This structure holds a fractional value
104typedef struct aom_rational64 {
105 int64_t num; // fraction numerator
106 int den; // fraction denominator
107} aom_rational64_t; // alias for struct aom_rational
108
109enum {
110 // Good Quality Fast Encoding. The encoder balances quality with the amount of
111 // time it takes to encode the output. Speed setting controls how fast.
112 GOOD,
113 // Realtime Fast Encoding. Will force some restrictions on bitrate
114 // constraints.
115 REALTIME,
116 // All intra mode. All the frames are coded as intra frames.
117 ALLINTRA
118} UENUM1BYTE(MODE);
119
120enum {
121 FRAMEFLAGS_KEY = 1 << 0,
122 FRAMEFLAGS_GOLDEN = 1 << 1,
123 FRAMEFLAGS_BWDREF = 1 << 2,
124 // TODO(zoeliu): To determine whether a frame flag is needed for ALTREF2_FRAME
125 FRAMEFLAGS_ALTREF = 1 << 3,
126 FRAMEFLAGS_INTRAONLY = 1 << 4,
127 FRAMEFLAGS_SWITCH = 1 << 5,
128 FRAMEFLAGS_ERROR_RESILIENT = 1 << 6,
129} UENUM1BYTE(FRAMETYPE_FLAGS);
130
131#if CONFIG_FPMT_TEST
132enum {
133 PARALLEL_ENCODE = 0,
134 PARALLEL_SIMULATION_ENCODE,
135 NUM_FPMT_TEST_ENCODES
136} UENUM1BYTE(FPMT_TEST_ENC_CFG);
137#endif // CONFIG_FPMT_TEST
138// 0 level frames are sometimes used for rate control purposes, but for
139// reference mapping purposes, the minimum level should be 1.
140#define MIN_PYR_LEVEL 1
141static inline int get_true_pyr_level(int frame_level, int frame_order,
142 int max_layer_depth) {
143 if (frame_order == 0) {
144 // Keyframe case
145 return MIN_PYR_LEVEL;
146 } else if (frame_level == MAX_ARF_LAYERS) {
147 // Leaves
148 return max_layer_depth;
149 } else if (frame_level == (MAX_ARF_LAYERS + 1)) {
150 // Altrefs
151 return MIN_PYR_LEVEL;
152 }
153 return AOMMAX(MIN_PYR_LEVEL, frame_level);
154}
155
156enum {
157 NO_AQ = 0,
158 VARIANCE_AQ = 1,
159 COMPLEXITY_AQ = 2,
160 CYCLIC_REFRESH_AQ = 3,
161 AQ_MODE_COUNT // This should always be the last member of the enum
162} UENUM1BYTE(AQ_MODE);
163enum {
164 NO_DELTA_Q = 0,
165 DELTA_Q_OBJECTIVE = 1, // Modulation to improve objective quality
166 DELTA_Q_PERCEPTUAL = 2, // Modulation to improve video perceptual quality
167 DELTA_Q_PERCEPTUAL_AI = 3, // Perceptual quality opt for all intra mode
168 DELTA_Q_USER_RATING_BASED = 4, // User rating based delta q mode
169 DELTA_Q_HDR = 5, // QP adjustment based on HDR block pixel average
170 DELTA_Q_MODE_COUNT // This should always be the last member of the enum
171} UENUM1BYTE(DELTAQ_MODE);
172
173enum {
174 RESIZE_NONE = 0, // No frame resizing allowed.
175 RESIZE_FIXED = 1, // All frames are coded at the specified scale.
176 RESIZE_RANDOM = 2, // All frames are coded at a random scale.
177 RESIZE_DYNAMIC = 3, // Frames coded at lower scale based on rate control.
178 RESIZE_MODES
179} UENUM1BYTE(RESIZE_MODE);
180
181enum {
182 SS_CFG_SRC = 0,
183 SS_CFG_LOOKAHEAD = 1,
184 SS_CFG_FPF = 2,
185 SS_CFG_TOTAL = 3
186} UENUM1BYTE(SS_CFG_OFFSET);
187
188enum {
189 DISABLE_SCENECUT, // For LAP, lag_in_frames < 19
190 ENABLE_SCENECUT_MODE_1, // For LAP, lag_in_frames >=19 and < 33
191 ENABLE_SCENECUT_MODE_2 // For twopass and LAP - lag_in_frames >=33
192} UENUM1BYTE(SCENECUT_MODE);
193
194#define MAX_VBR_CORPUS_COMPLEXITY 10000
195
196typedef enum {
197 MOD_FP, // First pass
198 MOD_TF, // Temporal filtering
199 MOD_TPL, // TPL
200 MOD_GME, // Global motion estimation
201 MOD_ENC, // Encode stage
202 MOD_LPF, // Deblocking loop filter
203 MOD_CDEF_SEARCH, // CDEF search
204 MOD_CDEF, // CDEF frame
205 MOD_LR, // Loop restoration filtering
206 MOD_PACK_BS, // Pack bitstream
207 MOD_FRAME_ENC, // Frame Parallel encode
208 MOD_AI, // All intra
209 NUM_MT_MODULES
210} MULTI_THREADED_MODULES;
211
213
227
238
243typedef enum {
244 SKIP_APPLY_RESTORATION = 1 << 0,
245 SKIP_APPLY_SUPERRES = 1 << 1,
246 SKIP_APPLY_CDEF = 1 << 2,
247 SKIP_APPLY_LOOPFILTER = 1 << 3,
249
253typedef struct {
257 RESIZE_MODE resize_mode;
268} ResizeCfg;
269
297
352
394
425
461
465typedef struct {
470
475
480
486
493
498
503
508
513
519
633
635typedef struct {
636 // Indicates the number of frames lag before encoding is started.
637 int lag_in_frames;
638 // Indicates the minimum gf/arf interval to be used.
639 int min_gf_interval;
640 // Indicates the maximum gf/arf interval to be used.
641 int max_gf_interval;
642 // Indicates the minimum height for GF group pyramid structure to be used.
643 int gf_min_pyr_height;
644 // Indicates the maximum height for GF group pyramid structure to be used.
645 int gf_max_pyr_height;
646 // Indicates if automatic set and use of altref frames should be enabled.
647 bool enable_auto_arf;
648 // Indicates if automatic set and use of (b)ackward (r)ef (f)rames should be
649 // enabled.
650 bool enable_auto_brf;
651} GFConfig;
652
653typedef struct {
654 // Indicates the number of tile groups.
655 unsigned int num_tile_groups;
656 // Indicates the MTU size for a tile group. If mtu is non-zero,
657 // num_tile_groups is set to DEFAULT_MAX_NUM_TG.
658 unsigned int mtu;
659 // Indicates the number of tile columns in log2.
660 int tile_columns;
661 // Indicates the number of tile rows in log2.
662 int tile_rows;
663 // Indicates the number of widths in the tile_widths[] array.
664 int tile_width_count;
665 // Indicates the number of heights in the tile_heights[] array.
666 int tile_height_count;
667 // Indicates the tile widths, and may be empty.
668 int tile_widths[MAX_TILE_COLS];
669 // Indicates the tile heights, and may be empty.
670 int tile_heights[MAX_TILE_ROWS];
671 // Indicates if large scale tile coding should be used.
672 bool enable_large_scale_tile;
673 // Indicates if single tile decoding mode should be enabled.
674 bool enable_single_tile_decoding;
675 // Indicates if EXT_TILE_DEBUG should be enabled.
676 bool enable_ext_tile_debug;
677} TileConfig;
678
679typedef struct {
680 // Indicates the width of the input frame.
681 int width;
682 // Indicates the height of the input frame.
683 int height;
684 // If forced_max_frame_width is non-zero then it is used to force the maximum
685 // frame width written in write_sequence_header().
686 int forced_max_frame_width;
687 // If forced_max_frame_width is non-zero then it is used to force the maximum
688 // frame height written in write_sequence_header().
689 int forced_max_frame_height;
690 // Indicates the frame width after applying both super-resolution and resize
691 // to the coded frame.
692 int render_width;
693 // Indicates the frame height after applying both super-resolution and resize
694 // to the coded frame.
695 int render_height;
696} FrameDimensionCfg;
697
698typedef struct {
699 // Indicates if warped motion should be enabled.
700 bool enable_warped_motion;
701 // Indicates if warped motion should be evaluated or not.
702 bool allow_warped_motion;
703 // Indicates if OBMC motion should be enabled.
704 bool enable_obmc;
705} MotionModeCfg;
706
707typedef struct {
708 // Timing info for each frame.
709 aom_timing_info_t timing_info;
710 // Indicates the number of time units of a decoding clock.
711 uint32_t num_units_in_decoding_tick;
712 // Indicates if decoder model information is present in the coded sequence
713 // header.
714 bool decoder_model_info_present_flag;
715 // Indicates if display model information is present in the coded sequence
716 // header.
717 bool display_model_info_present_flag;
718 // Indicates if timing info for each frame is present.
719 bool timing_info_present;
720} DecoderModelCfg;
721
722typedef struct {
723 // Indicates the update frequency for coeff costs.
724 COST_UPDATE_TYPE coeff;
725 // Indicates the update frequency for mode costs.
726 COST_UPDATE_TYPE mode;
727 // Indicates the update frequency for mv costs.
729 // Indicates the update frequency for dv costs.
731} CostUpdateFreq;
732
733typedef struct {
734 // Indicates the maximum number of reference frames allowed per frame.
735 unsigned int max_reference_frames;
736 // Indicates if the reduced set of references should be enabled.
737 bool enable_reduced_reference_set;
738 // Indicates if one-sided compound should be enabled.
739 bool enable_onesided_comp;
740} RefFrameCfg;
741
742typedef struct {
743 // Indicates the color space that should be used.
744 aom_color_primaries_t color_primaries;
745 // Indicates the characteristics of transfer function to be used.
746 aom_transfer_characteristics_t transfer_characteristics;
747 // Indicates the matrix coefficients to be used for the transfer function.
748 aom_matrix_coefficients_t matrix_coefficients;
749 // Indicates the chroma 4:2:0 sample position info.
750 aom_chroma_sample_position_t chroma_sample_position;
751 // Indicates if a limited color range or full color range should be used.
752 aom_color_range_t color_range;
753} ColorCfg;
754
755typedef struct {
756 // Indicates if extreme motion vector unit test should be enabled or not.
757 unsigned int motion_vector_unit_test;
758 // Indicates if superblock multipass unit test should be enabled or not.
759 unsigned int sb_multipass_unit_test;
760} UnitTestCfg;
761
762typedef struct {
763 // Indicates the file path to the VMAF model.
764 const char *vmaf_model_path;
765 // Indicates the path to the film grain parameters.
766 const char *film_grain_table_filename;
767 // Indicates the visual tuning metric.
768 aom_tune_metric tuning;
769 // Indicates if the current content is screen or default type.
770 aom_tune_content content;
771 // Indicates the film grain parameters.
772 int film_grain_test_vector;
773 // Indicates the in-block distortion metric to use.
774 aom_dist_metric dist_metric;
775} TuneCfg;
776
777typedef struct {
778 // Indicates the framerate of the input video.
779 double init_framerate;
780 // Indicates the bit-depth of the input video.
781 unsigned int input_bit_depth;
782 // Indicates the maximum number of frames to be encoded.
783 unsigned int limit;
784 // Indicates the chrome subsampling x value.
785 unsigned int chroma_subsampling_x;
786 // Indicates the chrome subsampling y value.
787 unsigned int chroma_subsampling_y;
788} InputCfg;
789
790typedef struct {
791 // If true, encoder will use fixed QP offsets, that are either:
792 // - Given by the user, and stored in 'fixed_qp_offsets' array, OR
793 // - Picked automatically from cq_level.
794 int use_fixed_qp_offsets;
795 // Indicates the minimum flatness of the quantization matrix.
796 int qm_minlevel;
797 // Indicates the maximum flatness of the quantization matrix.
798 int qm_maxlevel;
799 // Indicates if adaptive quantize_b should be enabled.
800 int quant_b_adapt;
801 // Indicates the Adaptive Quantization mode to be used.
802 AQ_MODE aq_mode;
803 // Indicates the delta q mode to be used.
804 DELTAQ_MODE deltaq_mode;
805 // Indicates the delta q mode strength.
806 DELTAQ_MODE deltaq_strength;
807 // Indicates if delta quantization should be enabled in chroma planes.
808 bool enable_chroma_deltaq;
809 // Indicates if delta quantization should be enabled for hdr video
810 bool enable_hdr_deltaq;
811 // Indicates if encoding with quantization matrices should be enabled.
812 bool using_qm;
813} QuantizationCfg;
814
881
882
883typedef struct {
884 // Indicates the codec bit-depth.
885 aom_bit_depth_t bit_depth;
886 // Indicates the superblock size that should be used by the encoder.
887 aom_superblock_size_t superblock_size;
888 // Indicates if loopfilter modulation should be enabled.
889 bool enable_deltalf_mode;
890 // Indicates how CDEF should be applied.
891 CDEF_CONTROL cdef_control;
892 // Indicates if loop restoration filter should be enabled.
893 bool enable_restoration;
894 // When enabled, video mode should be used even for single frame input.
895 bool force_video_mode;
896 // Indicates if the error resiliency features should be enabled.
897 bool error_resilient_mode;
898 // Indicates if frame parallel decoding feature should be enabled.
899 bool frame_parallel_decoding_mode;
900 // Indicates if the input should be encoded as monochrome.
901 bool enable_monochrome;
902 // When enabled, the encoder will use a full header even for still pictures.
903 // When disabled, a reduced header is used for still pictures.
904 bool full_still_picture_hdr;
905 // Indicates if dual interpolation filters should be enabled.
906 bool enable_dual_filter;
907 // Indicates if frame order hint should be enabled or not.
908 bool enable_order_hint;
909 // Indicates if ref_frame_mvs should be enabled at the sequence level.
910 bool ref_frame_mvs_present;
911 // Indicates if ref_frame_mvs should be enabled at the frame level.
912 bool enable_ref_frame_mvs;
913 // Indicates if interintra compound mode is enabled.
914 bool enable_interintra_comp;
915 // Indicates if global motion should be enabled.
916 bool enable_global_motion;
917 // Indicates if palette should be enabled.
918 bool enable_palette;
919} ToolCfg;
920
925typedef struct AV1EncoderConfig {
927 // Configuration related to the input video.
928 InputCfg input_cfg;
929
930 // Configuration related to frame-dimensions.
931 FrameDimensionCfg frm_dim_cfg;
932
938
943
949
950 // Configuration related to Quantization.
951 QuantizationCfg q_cfg;
952
953 // Internal frame size scaling.
954 ResizeCfg resize_cfg;
955
956 // Frame Super-Resolution size scaling.
957 SuperResCfg superres_cfg;
958
966
967 // Configuration related to encoder toolsets.
968 ToolCfg tool_cfg;
969
970 // Configuration related to Group of frames.
971 GFConfig gf_cfg;
972
973 // Tile related configuration parameters.
974 TileConfig tile_cfg;
975
976 // Configuration related to Tune.
977 TuneCfg tune_cfg;
978
979 // Configuration related to color.
980 ColorCfg color_cfg;
981
982 // Configuration related to decoder model.
983 DecoderModelCfg dec_model_cfg;
984
985 // Configuration related to reference frames.
986 RefFrameCfg ref_frm_cfg;
987
988 // Configuration related to unit tests.
989 UnitTestCfg unit_test_cfg;
990
991 // Flags related to motion mode.
992 MotionModeCfg motion_mode_cfg;
993
994 // Flags related to intra mode search.
995 IntraModeCfg intra_mode_cfg;
996
997 // Flags related to transform size/type.
998 TxfmSizeTypeCfg txfm_cfg;
999
1000 // Flags related to compound type.
1001 CompoundTypeCfg comp_type_cfg;
1002
1003 // Partition related information.
1004 PartitionCfg part_cfg;
1005
1006 // Configuration related to frequency of cost update.
1007 CostUpdateFreq cost_upd_freq;
1008
1009#if CONFIG_DENOISE
1010 // Indicates the noise level.
1011 float noise_level;
1012 // Indicates the the denoisers block size.
1013 int noise_block_size;
1014 // Indicates whether to apply denoising to the frame to be encoded
1015 int enable_dnl_denoising;
1016#endif
1017
1018#if CONFIG_AV1_TEMPORAL_DENOISING
1019 // Noise sensitivity.
1020 int noise_sensitivity;
1021#endif
1022 // Bit mask to specify which tier each of the 32 possible operating points
1023 // conforms to.
1024 unsigned int tier_mask;
1025
1026 // Indicates the number of pixels off the edge of a reference frame we're
1027 // allowed to go when forming an inter prediction.
1028 int border_in_pixels;
1029
1030 // Indicates the maximum number of threads that may be used by the encoder.
1031 int max_threads;
1032
1033 // Indicates the speed preset to be used.
1034 int speed;
1035
1036 // Indicates the target sequence level index for each operating point(OP).
1037 AV1_LEVEL target_seq_level_idx[MAX_NUM_OPERATING_POINTS];
1038
1039 // Indicates the bitstream profile to be used.
1040 BITSTREAM_PROFILE profile;
1041
1052
1053 // Total number of encoding passes.
1054 int passes;
1055
1056 // the name of the second pass output file when passes > 2
1057 const char *two_pass_output;
1058
1059 // the name of the second pass log file when passes > 2
1060 const char *second_pass_log;
1061
1062 // Indicates if the encoding is GOOD or REALTIME.
1063 MODE mode;
1064
1065 // Indicates if row-based multi-threading should be enabled or not.
1066 bool row_mt;
1067
1068 // Indicates if frame parallel multi-threading should be enabled or not.
1069 bool fp_mt;
1070
1071 // Indicates if 16bit frame buffers are to be used i.e., the content is >
1072 // 8-bit.
1073 bool use_highbitdepth;
1074
1075 // Indicates the bitstream syntax mode. 0 indicates bitstream is saved as
1076 // Section 5 bitstream, while 1 indicates the bitstream is saved in Annex - B
1077 // format.
1078 bool save_as_annexb;
1079
1080 // The path for partition stats reading and writing, used in the experiment
1081 // CONFIG_PARTITION_SEARCH_ORDER.
1082 const char *partition_info_path;
1083
1084 // The flag that indicates whether we use an external rate distribution to
1085 // guide adaptive quantization. It requires --deltaq-mode=3. The rate
1086 // distribution map file name is stored in |rate_distribution_info|.
1087 unsigned int enable_rate_guide_deltaq;
1088
1089 // The input file of rate distribution information used in all intra mode
1090 // to determine delta quantization.
1091 const char *rate_distribution_info;
1092
1093 // Exit the encoder when it fails to encode to a given level.
1094 int strict_level_conformance;
1095
1096 // Max depth for the GOP after a key frame
1097 int kf_max_pyr_height;
1098
1099 // A flag to control if we enable the superblock qp sweep for a given lambda
1100 int sb_qp_sweep;
1103
1105static inline int is_lossless_requested(const RateControlCfg *const rc_cfg) {
1106 return rc_cfg->best_allowed_q == 0 && rc_cfg->worst_allowed_q == 0;
1107}
1109
1113typedef struct {
1119 int obmc_probs[FRAME_UPDATE_TYPES][BLOCK_SIZES_ALL];
1120
1126 int warped_probs[FRAME_UPDATE_TYPES];
1127
1134 int tx_type_probs[FRAME_UPDATE_TYPES][TX_SIZES_ALL][TX_TYPES];
1135
1142 int switchable_interp_probs[FRAME_UPDATE_TYPES][SWITCHABLE_FILTER_CONTEXTS]
1143 [SWITCHABLE_FILTERS];
1145
1147
1148typedef struct FRAME_COUNTS {
1149// Note: This structure should only contain 'unsigned int' fields, or
1150// aggregates built solely from 'unsigned int' fields/elements
1151#if CONFIG_ENTROPY_STATS
1152 unsigned int kf_y_mode[KF_MODE_CONTEXTS][KF_MODE_CONTEXTS][INTRA_MODES];
1153 unsigned int angle_delta[DIRECTIONAL_MODES][2 * MAX_ANGLE_DELTA + 1];
1154 unsigned int y_mode[BLOCK_SIZE_GROUPS][INTRA_MODES];
1155 unsigned int uv_mode[CFL_ALLOWED_TYPES][INTRA_MODES][UV_INTRA_MODES];
1156 unsigned int cfl_sign[CFL_JOINT_SIGNS];
1157 unsigned int cfl_alpha[CFL_ALPHA_CONTEXTS][CFL_ALPHABET_SIZE];
1158 unsigned int palette_y_mode[PALATTE_BSIZE_CTXS][PALETTE_Y_MODE_CONTEXTS][2];
1159 unsigned int palette_uv_mode[PALETTE_UV_MODE_CONTEXTS][2];
1160 unsigned int palette_y_size[PALATTE_BSIZE_CTXS][PALETTE_SIZES];
1161 unsigned int palette_uv_size[PALATTE_BSIZE_CTXS][PALETTE_SIZES];
1162 unsigned int palette_y_color_index[PALETTE_SIZES]
1163 [PALETTE_COLOR_INDEX_CONTEXTS]
1164 [PALETTE_COLORS];
1165 unsigned int palette_uv_color_index[PALETTE_SIZES]
1166 [PALETTE_COLOR_INDEX_CONTEXTS]
1167 [PALETTE_COLORS];
1168 unsigned int partition[PARTITION_CONTEXTS][EXT_PARTITION_TYPES];
1169 unsigned int txb_skip[TOKEN_CDF_Q_CTXS][TX_SIZES][TXB_SKIP_CONTEXTS][2];
1170 unsigned int eob_extra[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1171 [EOB_COEF_CONTEXTS][2];
1172 unsigned int dc_sign[PLANE_TYPES][DC_SIGN_CONTEXTS][2];
1173 unsigned int coeff_lps[TX_SIZES][PLANE_TYPES][BR_CDF_SIZE - 1][LEVEL_CONTEXTS]
1174 [2];
1175 unsigned int eob_flag[TX_SIZES][PLANE_TYPES][EOB_COEF_CONTEXTS][2];
1176 unsigned int eob_multi16[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][5];
1177 unsigned int eob_multi32[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][6];
1178 unsigned int eob_multi64[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][7];
1179 unsigned int eob_multi128[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][8];
1180 unsigned int eob_multi256[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][9];
1181 unsigned int eob_multi512[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][10];
1182 unsigned int eob_multi1024[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][11];
1183 unsigned int coeff_lps_multi[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1184 [LEVEL_CONTEXTS][BR_CDF_SIZE];
1185 unsigned int coeff_base_multi[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1186 [SIG_COEF_CONTEXTS][NUM_BASE_LEVELS + 2];
1187 unsigned int coeff_base_eob_multi[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1188 [SIG_COEF_CONTEXTS_EOB][NUM_BASE_LEVELS + 1];
1189 unsigned int newmv_mode[NEWMV_MODE_CONTEXTS][2];
1190 unsigned int zeromv_mode[GLOBALMV_MODE_CONTEXTS][2];
1191 unsigned int refmv_mode[REFMV_MODE_CONTEXTS][2];
1192 unsigned int drl_mode[DRL_MODE_CONTEXTS][2];
1193 unsigned int inter_compound_mode[INTER_MODE_CONTEXTS][INTER_COMPOUND_MODES];
1194 unsigned int wedge_idx[BLOCK_SIZES_ALL][16];
1195 unsigned int interintra[BLOCK_SIZE_GROUPS][2];
1196 unsigned int interintra_mode[BLOCK_SIZE_GROUPS][INTERINTRA_MODES];
1197 unsigned int wedge_interintra[BLOCK_SIZES_ALL][2];
1198 unsigned int compound_type[BLOCK_SIZES_ALL][MASKED_COMPOUND_TYPES];
1199 unsigned int motion_mode[BLOCK_SIZES_ALL][MOTION_MODES];
1200 unsigned int obmc[BLOCK_SIZES_ALL][2];
1201 unsigned int intra_inter[INTRA_INTER_CONTEXTS][2];
1202 unsigned int comp_inter[COMP_INTER_CONTEXTS][2];
1203 unsigned int comp_ref_type[COMP_REF_TYPE_CONTEXTS][2];
1204 unsigned int uni_comp_ref[UNI_COMP_REF_CONTEXTS][UNIDIR_COMP_REFS - 1][2];
1205 unsigned int single_ref[REF_CONTEXTS][SINGLE_REFS - 1][2];
1206 unsigned int comp_ref[REF_CONTEXTS][FWD_REFS - 1][2];
1207 unsigned int comp_bwdref[REF_CONTEXTS][BWD_REFS - 1][2];
1208 unsigned int intrabc[2];
1209
1210 unsigned int txfm_partition[TXFM_PARTITION_CONTEXTS][2];
1211 unsigned int intra_tx_size[MAX_TX_CATS][TX_SIZE_CONTEXTS][MAX_TX_DEPTH + 1];
1212 unsigned int skip_mode[SKIP_MODE_CONTEXTS][2];
1213 unsigned int skip_txfm[SKIP_CONTEXTS][2];
1214 unsigned int compound_index[COMP_INDEX_CONTEXTS][2];
1215 unsigned int comp_group_idx[COMP_GROUP_IDX_CONTEXTS][2];
1216 unsigned int delta_q[DELTA_Q_PROBS][2];
1217 unsigned int delta_lf_multi[FRAME_LF_COUNT][DELTA_LF_PROBS][2];
1218 unsigned int delta_lf[DELTA_LF_PROBS][2];
1219
1220 unsigned int inter_ext_tx[EXT_TX_SETS_INTER][EXT_TX_SIZES][TX_TYPES];
1221 unsigned int intra_ext_tx[EXT_TX_SETS_INTRA][EXT_TX_SIZES][INTRA_MODES]
1222 [TX_TYPES];
1223 unsigned int filter_intra_mode[FILTER_INTRA_MODES];
1224 unsigned int filter_intra[BLOCK_SIZES_ALL][2];
1225 unsigned int switchable_restore[RESTORE_SWITCHABLE_TYPES];
1226 unsigned int wiener_restore[2];
1227 unsigned int sgrproj_restore[2];
1228#endif // CONFIG_ENTROPY_STATS
1229
1230 unsigned int switchable_interp[SWITCHABLE_FILTER_CONTEXTS]
1231 [SWITCHABLE_FILTERS];
1232} FRAME_COUNTS;
1233
1234#define INTER_MODE_RD_DATA_OVERALL_SIZE 6400
1235
1236typedef struct {
1237 int ready;
1238 double a;
1239 double b;
1240 double dist_mean;
1241 double ld_mean;
1242 double sse_mean;
1243 double sse_sse_mean;
1244 double sse_ld_mean;
1245 int num;
1246 double dist_sum;
1247 double ld_sum;
1248 double sse_sum;
1249 double sse_sse_sum;
1250 double sse_ld_sum;
1251} InterModeRdModel;
1252
1253typedef struct {
1254 int idx;
1255 int64_t rd;
1256} RdIdxPair;
1257// TODO(angiebird): This is an estimated size. We still need to figure what is
1258// the maximum number of modes.
1259#define MAX_INTER_MODES 1024
1260// TODO(any): rename this struct to something else. There is already another
1261// struct called inter_mode_info, which makes this terribly confusing.
1269typedef struct inter_modes_info {
1274 int num;
1278 MB_MODE_INFO mbmi_arr[MAX_INTER_MODES];
1282 int mode_rate_arr[MAX_INTER_MODES];
1286 int64_t sse_arr[MAX_INTER_MODES];
1290 int64_t est_rd_arr[MAX_INTER_MODES];
1294 RdIdxPair rd_idx_pair_arr[MAX_INTER_MODES];
1298 RD_STATS rd_cost_arr[MAX_INTER_MODES];
1302 RD_STATS rd_cost_y_arr[MAX_INTER_MODES];
1306 RD_STATS rd_cost_uv_arr[MAX_INTER_MODES];
1308
1310typedef struct {
1311 // TODO(kyslov): consider changing to 64bit
1312
1313 // This struct is used for computing variance in choose_partitioning(), where
1314 // the max number of samples within a superblock is 32x32 (with 4x4 avg).
1315 // With 8bit bitdepth, uint32_t is enough for sum_square_error (2^8 * 2^8 * 32
1316 // * 32 = 2^26). For high bitdepth we need to consider changing this to 64 bit
1317 uint32_t sum_square_error;
1318 int32_t sum_error;
1319 int log2_count;
1320 int variance;
1321} VPartVar;
1322
1323typedef struct {
1324 VPartVar none;
1325 VPartVar horz[2];
1326 VPartVar vert[2];
1327} VPVariance;
1328
1329typedef struct {
1330 VPVariance part_variances;
1331 VPartVar split[4];
1332} VP4x4;
1333
1334typedef struct {
1335 VPVariance part_variances;
1336 VP4x4 split[4];
1337} VP8x8;
1338
1339typedef struct {
1340 VPVariance part_variances;
1341 VP8x8 split[4];
1342} VP16x16;
1343
1344typedef struct {
1345 VPVariance part_variances;
1346 VP16x16 split[4];
1347} VP32x32;
1348
1349typedef struct {
1350 VPVariance part_variances;
1351 VP32x32 split[4];
1352} VP64x64;
1353
1354typedef struct {
1355 VPVariance part_variances;
1356 VP64x64 *split;
1357} VP128x128;
1358
1360
1364typedef struct {
1373 int64_t thresholds[5];
1374
1381
1385typedef struct {
1386#if CONFIG_MULTITHREAD
1391 pthread_mutex_t *mutex_;
1392 pthread_cond_t *cond_;
1394#endif // CONFIG_MULTITHREAD
1418 int rows;
1428
1430
1431// TODO(jingning) All spatially adaptive variables should go to TileDataEnc.
1432typedef struct TileDataEnc {
1433 TileInfo tile_info;
1434 DECLARE_ALIGNED(16, FRAME_CONTEXT, tctx);
1435 FRAME_CONTEXT *row_ctx;
1436 uint64_t abs_sum_level;
1437 uint8_t allow_update_cdf;
1438 InterModeRdModel inter_mode_rd_models[BLOCK_SIZES_ALL];
1439 AV1EncRowMultiThreadSync row_mt_sync;
1440 MV firstpass_top_mv;
1441} TileDataEnc;
1442
1443typedef struct RD_COUNTS {
1444 int compound_ref_used_flag;
1445 int skip_mode_used_flag;
1446 int tx_type_used[TX_SIZES_ALL][TX_TYPES];
1447 int obmc_used[BLOCK_SIZES_ALL][2];
1448 int warped_used[2];
1449 int newmv_or_intra_blocks;
1450 uint64_t seg_tmp_pred_cost[2];
1451} RD_COUNTS;
1452
1453typedef struct ThreadData {
1454 MACROBLOCK mb;
1455 MvCosts *mv_costs_alloc;
1456 IntraBCMVCosts *dv_costs_alloc;
1457 RD_COUNTS rd_counts;
1458 FRAME_COUNTS *counts;
1459 PC_TREE_SHARED_BUFFERS shared_coeff_buf;
1460 SIMPLE_MOTION_DATA_TREE *sms_tree;
1461 SIMPLE_MOTION_DATA_TREE *sms_root;
1462 uint32_t *hash_value_buffer[2][2];
1463 OBMCBuffer obmc_buffer;
1464 PALETTE_BUFFER *palette_buffer;
1465 CompoundTypeRdBuffers comp_rd_buffer;
1466 CONV_BUF_TYPE *tmp_conv_dst;
1467 uint64_t abs_sum_level;
1468 uint8_t *tmp_pred_bufs[2];
1469 uint8_t *wiener_tmp_pred_buf;
1470 int intrabc_used;
1471 int deltaq_used;
1472 int coefficient_size;
1473 int max_mv_magnitude;
1474 int interp_filter_selected[SWITCHABLE];
1475 FRAME_CONTEXT *tctx;
1476 VP64x64 *vt64x64;
1477 int32_t num_64x64_blocks;
1478 PICK_MODE_CONTEXT *firstpass_ctx;
1479 TemporalFilterData tf_data;
1480 TplBuffers tpl_tmp_buffers;
1481 TplTxfmStats tpl_txfm_stats;
1482 GlobalMotionData gm_data;
1483 // Pointer to the array of structures to store gradient information of each
1484 // pixel in a superblock. The buffer constitutes of MAX_SB_SQUARE pixel level
1485 // structures for each of the plane types (PLANE_TYPE_Y and PLANE_TYPE_UV).
1486 PixelLevelGradientInfo *pixel_gradient_info;
1487 // Pointer to the array of structures to store source variance information of
1488 // each 4x4 sub-block in a superblock. Block4x4VarInfo structure is used to
1489 // store source variance and log of source variance of each 4x4 sub-block
1490 // for subsequent retrieval.
1491 Block4x4VarInfo *src_var_info_of_4x4_sub_blocks;
1492 // Pointer to pc tree root.
1493 PC_TREE *pc_root;
1494} ThreadData;
1495
1496struct EncWorkerData;
1497
1499
1503typedef struct {
1526
1530 int thread_id_to_tile_id[MAX_NUM_THREADS];
1531
1537
1543
1549
1556
1563
1564#if CONFIG_MULTITHREAD
1568 pthread_mutex_t *mutex_;
1572 pthread_cond_t *cond_;
1573#endif
1574
1582 void (*sync_read_ptr)(AV1EncRowMultiThreadSync *const, int, int);
1586 void (*sync_write_ptr)(AV1EncRowMultiThreadSync *const, int, int, int);
1589
1593typedef struct {
1594#if CONFIG_MULTITHREAD
1598 pthread_mutex_t *mutex_;
1602 pthread_cond_t *cond_;
1603#endif
1604
1616 void (*intra_sync_write_ptr)(AV1EncRowMultiThreadSync *const, int, int, int);
1619
1623#define NUM_RECODES_PER_FRAME 10
1624
1628#define MAX_PARALLEL_FRAMES 4
1629
1634typedef struct RestoreStateBuffers {
1638 uint16_t *cdef_srcbuf;
1639
1643 uint16_t *cdef_colbuf[MAX_MB_PLANE];
1644
1648 int32_t *rst_tmpbuf;
1649
1653 RestorationLineBuffers *rlbs;
1655
1676
1682typedef struct {
1687 RestUnitSearchInfo *rusi[MAX_MB_PLANE];
1688
1692 int16_t *dgd_avg;
1694
1703
1707 int num_mod_workers[NUM_MT_MODULES];
1708
1712 AVxWorker *workers;
1713
1718 struct EncWorkerData *tile_thr_data;
1719
1723 AV1CdefWorkerData *cdef_worker;
1724
1730
1735
1741
1745typedef struct MultiThreadInfo {
1750
1754 int num_mod_workers[NUM_MT_MODULES];
1755
1759 AVxWorker *workers;
1760
1765 struct EncWorkerData *tile_thr_data;
1766
1772
1777
1782
1788
1792 AV1TplRowMultiThreadInfo tpl_row_mt;
1793
1797 AV1LfSync lf_row_sync;
1798
1802 AV1LrSync lr_row_sync;
1803
1807 AV1EncPackBSSync pack_bs_sync;
1808
1812 AV1GlobalMotionSync gm_sync;
1813
1817 AV1TemporalFilterSync tf_sync;
1818
1822 AV1CdefSync cdef_sync;
1823
1827 AV1CdefWorkerData *cdef_worker;
1828
1833
1840
1842
1843typedef struct ActiveMap {
1844 int enabled;
1845 int update;
1846 unsigned char *map;
1847} ActiveMap;
1848
1850
1854typedef struct {
1859 double cs_rate_array[32];
1869
1871
1872#if CONFIG_INTERNAL_STATS
1873// types of stats
1874enum {
1875 STAT_Y,
1876 STAT_U,
1877 STAT_V,
1878 STAT_ALL,
1879 NUM_STAT_TYPES // This should always be the last member of the enum
1880} UENUM1BYTE(StatType);
1881
1882typedef struct IMAGE_STAT {
1883 double stat[NUM_STAT_TYPES];
1884 double worst;
1885} ImageStat;
1886#endif // CONFIG_INTERNAL_STATS
1887
1888typedef struct {
1889 int ref_count;
1890 YV12_BUFFER_CONFIG buf;
1891} EncRefCntBuffer;
1892
1894
1915
1917
1918#if CONFIG_COLLECT_PARTITION_STATS
1919typedef struct FramePartitionTimingStats {
1920 int partition_decisions[6][EXT_PARTITION_TYPES];
1921 int partition_attempts[6][EXT_PARTITION_TYPES];
1922 int64_t partition_times[6][EXT_PARTITION_TYPES];
1923
1924 int partition_redo;
1925} FramePartitionTimingStats;
1926#endif // CONFIG_COLLECT_PARTITION_STATS
1927
1928#if CONFIG_COLLECT_COMPONENT_TIMING
1929#include "aom_ports/aom_timer.h"
1930// Adjust the following to add new components.
1931enum {
1932 av1_encode_strategy_time,
1933 av1_get_one_pass_rt_params_time,
1934 av1_get_second_pass_params_time,
1935 denoise_and_encode_time,
1936 apply_filtering_time,
1937 av1_tpl_setup_stats_time,
1938 encode_frame_to_data_rate_time,
1939 encode_with_or_without_recode_time,
1940 loop_filter_time,
1941 cdef_time,
1942 loop_restoration_time,
1943 av1_pack_bitstream_final_time,
1944 av1_encode_frame_time,
1945 av1_compute_global_motion_time,
1946 av1_setup_motion_field_time,
1947 encode_sb_row_time,
1948
1949 rd_pick_partition_time,
1950 rd_use_partition_time,
1951 choose_var_based_partitioning_time,
1952 av1_prune_partitions_time,
1953 none_partition_search_time,
1954 split_partition_search_time,
1955 rectangular_partition_search_time,
1956 ab_partitions_search_time,
1957 rd_pick_4partition_time,
1958 encode_sb_time,
1959
1960 rd_pick_sb_modes_time,
1961 av1_rd_pick_intra_mode_sb_time,
1962 av1_rd_pick_inter_mode_sb_time,
1963 set_params_rd_pick_inter_mode_time,
1964 skip_inter_mode_time,
1965 handle_inter_mode_time,
1966 evaluate_motion_mode_for_winner_candidates_time,
1967 do_tx_search_time,
1968 handle_intra_mode_time,
1969 refine_winner_mode_tx_time,
1970 av1_search_palette_mode_time,
1971 handle_newmv_time,
1972 compound_type_rd_time,
1973 interpolation_filter_search_time,
1974 motion_mode_rd_time,
1975
1976 nonrd_use_partition_time,
1977 pick_sb_modes_nonrd_time,
1978 hybrid_intra_mode_search_time,
1979 nonrd_pick_inter_mode_sb_time,
1980 encode_b_nonrd_time,
1981
1982 kTimingComponents,
1983} UENUM1BYTE(TIMING_COMPONENT);
1984
1985static inline char const *get_component_name(int index) {
1986 switch (index) {
1987 case av1_encode_strategy_time: return "av1_encode_strategy_time";
1988 case av1_get_one_pass_rt_params_time:
1989 return "av1_get_one_pass_rt_params_time";
1990 case av1_get_second_pass_params_time:
1991 return "av1_get_second_pass_params_time";
1992 case denoise_and_encode_time: return "denoise_and_encode_time";
1993 case apply_filtering_time: return "apply_filtering_time";
1994 case av1_tpl_setup_stats_time: return "av1_tpl_setup_stats_time";
1995 case encode_frame_to_data_rate_time:
1996 return "encode_frame_to_data_rate_time";
1997 case encode_with_or_without_recode_time:
1998 return "encode_with_or_without_recode_time";
1999 case loop_filter_time: return "loop_filter_time";
2000 case cdef_time: return "cdef_time";
2001 case loop_restoration_time: return "loop_restoration_time";
2002 case av1_pack_bitstream_final_time: return "av1_pack_bitstream_final_time";
2003 case av1_encode_frame_time: return "av1_encode_frame_time";
2004 case av1_compute_global_motion_time:
2005 return "av1_compute_global_motion_time";
2006 case av1_setup_motion_field_time: return "av1_setup_motion_field_time";
2007 case encode_sb_row_time: return "encode_sb_row_time";
2008
2009 case rd_pick_partition_time: return "rd_pick_partition_time";
2010 case rd_use_partition_time: return "rd_use_partition_time";
2011 case choose_var_based_partitioning_time:
2012 return "choose_var_based_partitioning_time";
2013 case av1_prune_partitions_time: return "av1_prune_partitions_time";
2014 case none_partition_search_time: return "none_partition_search_time";
2015 case split_partition_search_time: return "split_partition_search_time";
2016 case rectangular_partition_search_time:
2017 return "rectangular_partition_search_time";
2018 case ab_partitions_search_time: return "ab_partitions_search_time";
2019 case rd_pick_4partition_time: return "rd_pick_4partition_time";
2020 case encode_sb_time: return "encode_sb_time";
2021
2022 case rd_pick_sb_modes_time: return "rd_pick_sb_modes_time";
2023 case av1_rd_pick_intra_mode_sb_time:
2024 return "av1_rd_pick_intra_mode_sb_time";
2025 case av1_rd_pick_inter_mode_sb_time:
2026 return "av1_rd_pick_inter_mode_sb_time";
2027 case set_params_rd_pick_inter_mode_time:
2028 return "set_params_rd_pick_inter_mode_time";
2029 case skip_inter_mode_time: return "skip_inter_mode_time";
2030 case handle_inter_mode_time: return "handle_inter_mode_time";
2031 case evaluate_motion_mode_for_winner_candidates_time:
2032 return "evaluate_motion_mode_for_winner_candidates_time";
2033 case do_tx_search_time: return "do_tx_search_time";
2034 case handle_intra_mode_time: return "handle_intra_mode_time";
2035 case refine_winner_mode_tx_time: return "refine_winner_mode_tx_time";
2036 case av1_search_palette_mode_time: return "av1_search_palette_mode_time";
2037 case handle_newmv_time: return "handle_newmv_time";
2038 case compound_type_rd_time: return "compound_type_rd_time";
2039 case interpolation_filter_search_time:
2040 return "interpolation_filter_search_time";
2041 case motion_mode_rd_time: return "motion_mode_rd_time";
2042
2043 case nonrd_use_partition_time: return "nonrd_use_partition_time";
2044 case pick_sb_modes_nonrd_time: return "pick_sb_modes_nonrd_time";
2045 case hybrid_intra_mode_search_time: return "hybrid_intra_mode_search_time";
2046 case nonrd_pick_inter_mode_sb_time: return "nonrd_pick_inter_mode_sb_time";
2047 case encode_b_nonrd_time: return "encode_b_nonrd_time";
2048
2049 default: assert(0);
2050 }
2051 return "error";
2052}
2053#endif
2054
2055// The maximum number of internal ARFs except ALTREF_FRAME
2056#define MAX_INTERNAL_ARFS (REF_FRAMES - BWDREF_FRAME - 1)
2057
2059
2063typedef struct {
2068
2074 YV12_BUFFER_CONFIG *ref_buf[REF_FRAMES];
2075
2081 int num_ref_frames[MAX_DIRECTIONS];
2082
2089 FrameDistPair reference_frames[MAX_DIRECTIONS][REF_FRAMES - 1];
2090
2099
2114
2118typedef struct {
2138 fractional_mv_step_fp *find_fractional_mv_step;
2145 search_site_config search_site_cfg[SS_CFG_TOTAL][NUM_DISTINCT_SEARCH_METHODS];
2147
2161
2169typedef struct {
2170 int width;
2173
2177typedef struct {
2181 int ref_relative_dist[INTER_REFS_PER_FRAME];
2191
2207typedef struct {
2215 unsigned int coeff_opt_thresholds[MODE_EVAL_TYPES][2];
2216
2221 TX_SIZE_SEARCH_METHOD tx_size_search_methods[MODE_EVAL_TYPES];
2222
2229 unsigned int use_transform_domain_distortion[MODE_EVAL_TYPES];
2230
2236 unsigned int tx_domain_dist_threshold[MODE_EVAL_TYPES];
2237
2243 unsigned int skip_txfm_level[MODE_EVAL_TYPES];
2244
2250 unsigned int predict_dc_level[MODE_EVAL_TYPES];
2252
2271
2318
2320
2321typedef struct {
2322 // Some misc info
2323 int high_prec;
2324 int q;
2325 int order;
2326
2327 // MV counters
2328 int inter_count;
2329 int intra_count;
2330 int default_mvs;
2331 int mv_joint_count[4];
2332 int last_bit_zero;
2333 int last_bit_nonzero;
2334
2335 // Keep track of the rates
2336 int total_mv_rate;
2337 int hp_total_mv_rate;
2338 int lp_total_mv_rate;
2339
2340 // Texture info
2341 int horz_text;
2342 int vert_text;
2343 int diag_text;
2344
2345 // Whether the current struct contains valid data
2346 int valid;
2347} MV_STATS;
2348
2349typedef struct WeberStats {
2350 int64_t mb_wiener_variance;
2351 int64_t src_variance;
2352 int64_t rec_variance;
2353 int16_t src_pix_max;
2354 int16_t rec_pix_max;
2355 int64_t distortion;
2356 int64_t satd;
2357 double max_scale;
2358} WeberStats;
2359
2360typedef struct {
2361 struct loopfilter lf;
2362 CdefInfo cdef_info;
2363 YV12_BUFFER_CONFIG copy_buffer;
2364 RATE_CONTROL rc;
2365 MV_STATS mv_stats;
2366} CODING_CONTEXT;
2367
2368typedef struct {
2369 int frame_width;
2370 int frame_height;
2371 int mi_rows;
2372 int mi_cols;
2373 int mb_rows;
2374 int mb_cols;
2375 int num_mbs;
2376 aom_bit_depth_t bit_depth;
2377 int subsampling_x;
2378 int subsampling_y;
2379} FRAME_INFO;
2380
2384typedef struct {
2385 int show_frame_count;
2386} FRAME_INDEX_SET;
2387
2389
2393typedef struct {
2399 uint8_t *map;
2407
2411typedef struct {
2424} TimeStamps;
2425
2430typedef struct {
2434 tran_low_t *tcoeff;
2438 uint16_t *eobs;
2442 uint8_t *entropy_ctx;
2444
2445#if !CONFIG_REALTIME_ONLY
2447// DUCKY_ENCODE_FRAME_MODE is c version of EncodeFrameMode
2448enum {
2449 DUCKY_ENCODE_FRAME_MODE_NONE, // Let native AV1 determine q index and rdmult
2450 DUCKY_ENCODE_FRAME_MODE_QINDEX, // DuckyEncode determines q index and AV1
2451 // determines rdmult
2452 DUCKY_ENCODE_FRAME_MODE_QINDEX_RDMULT, // DuckyEncode determines q index and
2453 // rdmult
2454} UENUM1BYTE(DUCKY_ENCODE_FRAME_MODE);
2455
2456enum {
2457 DUCKY_ENCODE_GOP_MODE_NONE, // native AV1 decides GOP
2458 DUCKY_ENCODE_GOP_MODE_RCL, // rate control lib decides GOP
2459} UENUM1BYTE(DUCKY_ENCODE_GOP_MODE);
2460
2461typedef struct DuckyEncodeFrameInfo {
2462 DUCKY_ENCODE_FRAME_MODE qp_mode;
2463 DUCKY_ENCODE_GOP_MODE gop_mode;
2464 int q_index;
2465 int rdmult;
2466 // These two arrays are equivalent to std::vector<SuperblockEncodeParameters>
2467 int *superblock_encode_qindex;
2468 int *superblock_encode_rdmult;
2469 int delta_q_enabled;
2470} DuckyEncodeFrameInfo;
2471
2472typedef struct DuckyEncodeFrameResult {
2473 int global_order_idx;
2474 int q_index;
2475 int rdmult;
2476 int rate;
2477 int64_t dist;
2478 double psnr;
2479} DuckyEncodeFrameResult;
2480
2481typedef struct DuckyEncodeInfo {
2482 DuckyEncodeFrameInfo frame_info;
2483 DuckyEncodeFrameResult frame_result;
2484} DuckyEncodeInfo;
2486#endif
2487
2489typedef struct RTC_REF {
2494 int reference[INTER_REFS_PER_FRAME];
2495 int ref_idx[INTER_REFS_PER_FRAME];
2496 int refresh[REF_FRAMES];
2497 int set_ref_frame_config;
2498 int non_reference_frame;
2499 int ref_frame_comp[3];
2500 int gld_idx_1layer;
2504 unsigned int buffer_time_index[REF_FRAMES];
2508 unsigned char buffer_spatial_layer[REF_FRAMES];
2512 bool reference_was_previous_frame;
2517 bool bias_recovery_frame;
2518} RTC_REF;
2520
2524typedef struct AV1_COMP_DATA {
2528 unsigned char *cx_data;
2529
2534
2539
2543 unsigned int lib_flags;
2544
2549
2554
2559
2563 const aom_rational64_t *timestamp_ratio;
2564
2570
2574typedef struct AV1_PRIMARY {
2579
2585#if CONFIG_FPMT_TEST
2591 FPMT_TEST_ENC_CFG fpmt_unit_test_cfg;
2592
2596 FrameProbInfo temp_frame_probs;
2597
2603 FrameProbInfo temp_frame_probs_simulation;
2604
2609 int temp_valid_gm_model_found[FRAME_UPDATE_TYPES];
2610#endif // CONFIG_FPMT_TEST
2616 RefCntBuffer *ref_frame_map_copy[REF_FRAMES];
2617
2622
2627
2632
2637
2642
2647
2652 struct AV1_COMP *cpi;
2653
2658
2662 struct lookahead_ctx *lookahead;
2663
2670
2675 struct aom_codec_pkt_list *output_pkt_list;
2676
2681
2686
2691
2695 GF_STATE gf_state;
2696
2701
2705 AV1LevelParams level_params;
2706
2711
2716
2721
2726
2735 SequenceHeader seq_params;
2736
2741
2746
2751
2756
2760 struct aom_internal_error_info error;
2761
2767 aom_variance_fn_ptr_t fn_ptr[BLOCK_SIZES_ALL];
2768
2774
2779
2783 MV_STATS mv_stats;
2784
2785#if CONFIG_INTERNAL_STATS
2787 uint64_t total_time_receive_data;
2788 uint64_t total_time_compress_data;
2789
2790 unsigned int total_mode_chosen_counts[MAX_MODES];
2791
2792 int count[2];
2793 uint64_t total_sq_error[2];
2794 uint64_t total_samples[2];
2795 ImageStat psnr[2];
2796
2797 double total_blockiness;
2798 double worst_blockiness;
2799
2800 uint64_t total_bytes;
2801 double summed_quality;
2802 double summed_weights;
2803 double summed_quality_hbd;
2804 double summed_weights_hbd;
2805 unsigned int total_recode_hits;
2806 double worst_ssim;
2807 double worst_ssim_hbd;
2808
2809 ImageStat fastssim;
2810 ImageStat psnrhvs;
2811
2812 int b_calculate_blockiness;
2813 int b_calculate_consistency;
2814
2815 double total_inconsistency;
2816 double worst_consistency;
2817 Ssimv *ssim_vars;
2818 Metrics metrics;
2820#endif
2821
2822#if CONFIG_ENTROPY_STATS
2826 FRAME_COUNTS aggregate_fc;
2827#endif // CONFIG_ENTROPY_STATS
2828
2835 int fb_of_context_type[REF_FRAMES];
2836
2841
2846
2853 int valid_gm_model_found[FRAME_UPDATE_TYPES];
2854
2858 RTC_REF rtc_ref;
2859
2866
2870typedef struct AV1_COMP {
2875
2880 EncQuantDequantParams enc_quant_dequant_params;
2881
2885 ThreadData td;
2886
2890 FRAME_COUNTS counts;
2891
2896
2903
2909
2913 AV1_COMMON common;
2914
2919
2924 TRELLIS_OPT_TYPE optimize_seg_arr[MAX_SEGMENTS];
2925
2931 YV12_BUFFER_CONFIG *source;
2932
2940 YV12_BUFFER_CONFIG *last_source;
2941
2946 YV12_BUFFER_CONFIG *unscaled_source;
2947
2951 YV12_BUFFER_CONFIG scaled_source;
2952
2956 YV12_BUFFER_CONFIG *unscaled_last_source;
2957
2961 YV12_BUFFER_CONFIG scaled_last_source;
2962
2967 YV12_BUFFER_CONFIG *unfiltered_source;
2968
2973 YV12_BUFFER_CONFIG orig_source;
2974
2979
2989
2994
2998 CdefSearchCtx *cdef_search_ctx;
2999
3004
3009 RefCntBuffer *scaled_ref_buf[INTER_REFS_PER_FRAME];
3010
3014 RefCntBuffer *last_show_frame_buf;
3015
3020
3025
3030
3035 YV12_BUFFER_CONFIG last_frame_uf;
3036
3041 YV12_BUFFER_CONFIG trial_frame_rst;
3042
3047
3051 RD_OPT rd;
3052
3057 CODING_CONTEXT coding_context;
3058
3063
3068
3073
3078
3083
3088
3093
3098
3103
3109
3114
3123 ActiveMap active_map;
3124
3128 unsigned char gf_frame_index;
3129
3130#if CONFIG_INTERNAL_STATS
3132 uint64_t time_compress_data;
3133
3134 unsigned int mode_chosen_counts[MAX_MODES];
3135 int bytes;
3136 unsigned int frame_recode_hits;
3138#endif
3139
3140#if CONFIG_SPEED_STATS
3144 unsigned int tx_search_count;
3145#endif // CONFIG_SPEED_STATS
3146
3152
3156 FRAME_INFO frame_info;
3157
3161 FRAME_INDEX_SET frame_index_set;
3162
3169
3176
3184
3190
3196
3202
3207
3212 TileDataEnc *tile_data;
3217
3221 TokenInfo token_info;
3222
3227
3232
3237
3242
3247
3252
3257
3262
3263#if CONFIG_FPMT_TEST
3268 double temp_framerate;
3269#endif
3276
3281
3286
3293
3298
3303
3307 AV1LrStruct lr_ctxt;
3308
3313
3317 aom_film_grain_table_t *film_grain_table;
3318
3319#if CONFIG_DENOISE
3324 struct aom_denoise_and_model_t *denoise_and_model;
3325#endif
3326
3331
3340
3348
3349#if CONFIG_COLLECT_PARTITION_STATS
3353 FramePartitionTimingStats partition_stats;
3354#endif // CONFIG_COLLECT_PARTITION_STATS
3355
3356#if CONFIG_COLLECT_COMPONENT_TIMING
3360 uint64_t component_time[kTimingComponents];
3365 struct aom_usec_timer component_timer[kTimingComponents];
3369 uint64_t frame_component_time[kTimingComponents];
3370#endif
3371
3376
3381
3386
3393
3394#if CONFIG_TUNE_VMAF
3398 TuneVMAFInfo vmaf_info;
3399#endif
3400
3401#if CONFIG_TUNE_BUTTERAUGLI
3405 TuneButteraugliInfo butteraugli_info;
3406#endif
3407
3412
3416 COMPRESSOR_STAGE compressor_stage;
3417
3423
3428
3435
3439 FirstPassData firstpass_data;
3440
3444 NOISE_ESTIMATE noise_estimate;
3445
3446#if CONFIG_AV1_TEMPORAL_DENOISING
3450 AV1_DENOISER denoiser;
3451#endif
3452
3458
3463
3467 BLOCK_SIZE fp_block_size;
3468
3474
3479
3484 ExtPartController ext_part_controller;
3485
3490 MV_STATS mv_stats;
3495
3501
3508#if CONFIG_FPMT_TEST
3514
3515 int wanted_fb;
3516#endif // CONFIG_FPMT_TEST
3517
3524
3525#if CONFIG_RD_COMMAND
3529 RD_COMMAND rd_command;
3530#endif // CONFIG_RD_COMMAND
3531
3535 WeberStats *mb_weber_stats;
3536
3542
3548
3553
3557 BLOCK_SIZE weber_bsize;
3558
3563
3568
3573
3574#if CONFIG_BITRATE_ACCURACY
3578 VBR_RATECTRL_INFO vbr_rc_info;
3579#endif
3580
3581#if CONFIG_RATECTRL_LOG
3585 RATECTRL_LOG rc_log;
3586#endif // CONFIG_RATECTRL_LOG
3587
3592
3593#if CONFIG_THREE_PASS
3597 THIRD_PASS_DEC_CTX *third_pass_ctx;
3598#endif
3599
3604
3609
3615 uint64_t rec_sse;
3616
3622
3623#if !CONFIG_REALTIME_ONLY
3627 DuckyEncodeInfo ducky_encode_info;
3628#endif // CONFIG_REALTIME_ONLY
3629 //
3634
3638 unsigned int zeromv_skip_thresh_exit_part[BLOCK_SIZES_ALL];
3639
3645
3646#if CONFIG_SALIENCY_MAP
3650 uint8_t *saliency_map;
3651
3655 double *sm_scaling_factor;
3656#endif
3657
3663
3670
3674typedef struct EncodeFrameInput {
3676 YV12_BUFFER_CONFIG *source;
3677 YV12_BUFFER_CONFIG *last_source;
3678 int64_t ts_duration;
3681
3686typedef struct EncodeFrameParams {
3694 FRAME_TYPE frame_type;
3695
3697 int primary_ref_frame;
3698 int order_offset;
3699
3705
3707 int refresh_frame_flags;
3708
3709 int show_existing_frame;
3710 int existing_fb_idx_to_show;
3711
3717
3721 int remapped_ref_idx[REF_FRAMES];
3722
3728
3734
3736
3737void av1_initialize_enc(unsigned int usage, enum aom_rc_mode end_usage);
3738
3739struct AV1_COMP *av1_create_compressor(AV1_PRIMARY *ppi,
3740 const AV1EncoderConfig *oxcf,
3741 BufferPool *const pool,
3742 COMPRESSOR_STAGE stage,
3743 int lap_lag_in_frames);
3744
3745struct AV1_PRIMARY *av1_create_primary_compressor(
3746 struct aom_codec_pkt_list *pkt_list_head, int num_lap_buffers,
3747 const AV1EncoderConfig *oxcf);
3748
3749void av1_remove_compressor(AV1_COMP *cpi);
3750
3751void av1_remove_primary_compressor(AV1_PRIMARY *ppi);
3752
3753#if CONFIG_ENTROPY_STATS
3754void print_entropy_stats(AV1_PRIMARY *const ppi);
3755#endif
3756#if CONFIG_INTERNAL_STATS
3757void print_internal_stats(AV1_PRIMARY *ppi);
3758#endif
3759
3760void av1_change_config_seq(AV1_PRIMARY *ppi, const AV1EncoderConfig *oxcf,
3761 bool *sb_size_changed);
3762
3763void av1_change_config(AV1_COMP *cpi, const AV1EncoderConfig *oxcf,
3764 bool sb_size_changed);
3765
3766aom_codec_err_t av1_check_initial_width(AV1_COMP *cpi, int use_highbitdepth,
3767 int subsampling_x, int subsampling_y);
3768
3769void av1_post_encode_updates(AV1_COMP *const cpi,
3770 const AV1_COMP_DATA *const cpi_data);
3771
3772void av1_release_scaled_references_fpmt(AV1_COMP *cpi);
3773
3774void av1_decrement_ref_counts_fpmt(BufferPool *buffer_pool,
3775 int ref_buffers_used_map);
3776
3777void av1_init_sc_decisions(AV1_PRIMARY *const ppi);
3778
3779AV1_COMP *av1_get_parallel_frame_enc_data(AV1_PRIMARY *const ppi,
3780 AV1_COMP_DATA *const first_cpi_data);
3781
3782int av1_init_parallel_frame_context(const AV1_COMP_DATA *const first_cpi_data,
3783 AV1_PRIMARY *const ppi,
3784 int *ref_buffers_used_map);
3785
3787
3805 const YV12_BUFFER_CONFIG *sd, int64_t time_stamp,
3806 int64_t end_time_stamp);
3807
3829int av1_get_compressed_data(AV1_COMP *cpi, AV1_COMP_DATA *const cpi_data);
3830
3837int av1_encode(AV1_COMP *const cpi, uint8_t *const dest, size_t dest_size,
3838 const EncodeFrameInput *const frame_input,
3839 const EncodeFrameParams *const frame_params,
3840 size_t *const frame_size);
3841
3843int av1_get_preview_raw_frame(AV1_COMP *cpi, YV12_BUFFER_CONFIG *dest);
3844
3845int av1_get_last_show_frame(AV1_COMP *cpi, YV12_BUFFER_CONFIG *frame);
3846
3847aom_codec_err_t av1_copy_new_frame_enc(AV1_COMMON *cm,
3848 YV12_BUFFER_CONFIG *new_frame,
3849 YV12_BUFFER_CONFIG *sd);
3850
3851int av1_use_as_reference(int *ext_ref_frame_flags, int ref_frame_flags);
3852
3853int av1_copy_reference_enc(AV1_COMP *cpi, int idx, YV12_BUFFER_CONFIG *sd);
3854
3855int av1_set_reference_enc(AV1_COMP *cpi, int idx, YV12_BUFFER_CONFIG *sd);
3856
3857void av1_set_frame_size(AV1_COMP *cpi, int width, int height);
3858
3859void av1_set_mv_search_params(AV1_COMP *cpi);
3860
3861int av1_set_active_map(AV1_COMP *cpi, unsigned char *map, int rows, int cols);
3862
3863int av1_get_active_map(AV1_COMP *cpi, unsigned char *map, int rows, int cols);
3864
3865int av1_set_internal_size(AV1EncoderConfig *const oxcf,
3866 ResizePendingParams *resize_pending_params,
3867 AOM_SCALING_MODE horiz_mode,
3868 AOM_SCALING_MODE vert_mode);
3869
3870int av1_get_quantizer(struct AV1_COMP *cpi);
3871
3872// This function assumes that the input buffer contains valid OBUs. It should
3873// not be called on untrusted input.
3874int av1_convert_sect5obus_to_annexb(uint8_t *buffer, size_t buffer_size,
3875 size_t *input_size);
3876
3877void av1_alloc_mb_wiener_var_pred_buf(AV1_COMMON *cm, ThreadData *td);
3878
3879void av1_dealloc_mb_wiener_var_pred_buf(ThreadData *td);
3880
3881// Set screen content options.
3882// This function estimates whether to use screen content tools, by counting
3883// the portion of blocks that have few luma colors.
3884// Modifies:
3885// cpi->commom.features.allow_screen_content_tools
3886// cpi->common.features.allow_intrabc
3887// cpi->use_screen_content_tools
3888// cpi->is_screen_content_type
3889// However, the estimation is not accurate and may misclassify videos.
3890// A slower but more accurate approach that determines whether to use screen
3891// content tools is employed later. See av1_determine_sc_tools_with_encoding().
3892void av1_set_screen_content_options(struct AV1_COMP *cpi,
3893 FeatureFlags *features);
3894
3895void av1_update_frame_size(AV1_COMP *cpi);
3896
3897typedef struct {
3898 int pyr_level;
3899 int disp_order;
3900} RefFrameMapPair;
3901
3902static inline void init_ref_map_pair(
3903 AV1_COMP *cpi, RefFrameMapPair ref_frame_map_pairs[REF_FRAMES]) {
3904 if (cpi->ppi->gf_group.update_type[cpi->gf_frame_index] == KF_UPDATE) {
3905 memset(ref_frame_map_pairs, -1, sizeof(*ref_frame_map_pairs) * REF_FRAMES);
3906 return;
3907 }
3908 memset(ref_frame_map_pairs, 0, sizeof(*ref_frame_map_pairs) * REF_FRAMES);
3909 for (int map_idx = 0; map_idx < REF_FRAMES; map_idx++) {
3910 // Get reference frame buffer.
3911 const RefCntBuffer *const buf = cpi->common.ref_frame_map[map_idx];
3912 if (ref_frame_map_pairs[map_idx].disp_order == -1) continue;
3913 if (buf == NULL) {
3914 ref_frame_map_pairs[map_idx].disp_order = -1;
3915 ref_frame_map_pairs[map_idx].pyr_level = -1;
3916 continue;
3917 } else if (buf->ref_count > 1) {
3918 // Once the keyframe is coded, the slots in ref_frame_map will all
3919 // point to the same frame. In that case, all subsequent pointers
3920 // matching the current are considered "free" slots. This will find
3921 // the next occurrence of the current pointer if ref_count indicates
3922 // there are multiple instances of it and mark it as free.
3923 for (int idx2 = map_idx + 1; idx2 < REF_FRAMES; ++idx2) {
3924 const RefCntBuffer *const buf2 = cpi->common.ref_frame_map[idx2];
3925 if (buf2 == buf) {
3926 ref_frame_map_pairs[idx2].disp_order = -1;
3927 ref_frame_map_pairs[idx2].pyr_level = -1;
3928 }
3929 }
3930 }
3931 ref_frame_map_pairs[map_idx].disp_order = (int)buf->display_order_hint;
3932 ref_frame_map_pairs[map_idx].pyr_level = buf->pyramid_level;
3933 }
3934}
3935
3936#if CONFIG_FPMT_TEST
3937static inline void calc_frame_data_update_flag(
3938 GF_GROUP *const gf_group, int gf_frame_index,
3939 bool *const do_frame_data_update) {
3940 *do_frame_data_update = true;
3941 // Set the flag to false for all frames in a given parallel encode set except
3942 // the last frame in the set with frame_parallel_level = 2.
3943 if (gf_group->frame_parallel_level[gf_frame_index] == 1) {
3944 *do_frame_data_update = false;
3945 } else if (gf_group->frame_parallel_level[gf_frame_index] == 2) {
3946 // Check if this is the last frame in the set with frame_parallel_level = 2.
3947 for (int i = gf_frame_index + 1; i < gf_group->size; i++) {
3948 if ((gf_group->frame_parallel_level[i] == 0 &&
3949 (gf_group->update_type[i] == ARF_UPDATE ||
3950 gf_group->update_type[i] == INTNL_ARF_UPDATE)) ||
3951 gf_group->frame_parallel_level[i] == 1) {
3952 break;
3953 } else if (gf_group->frame_parallel_level[i] == 2) {
3954 *do_frame_data_update = false;
3955 break;
3956 }
3957 }
3958 }
3959}
3960#endif
3961
3962// av1 uses 10,000,000 ticks/second as time stamp
3963#define TICKS_PER_SEC 10000000LL
3964
3965static inline int64_t timebase_units_to_ticks(
3966 const aom_rational64_t *timestamp_ratio, int64_t n) {
3967 return n * timestamp_ratio->num / timestamp_ratio->den;
3968}
3969
3970static inline int64_t ticks_to_timebase_units(
3971 const aom_rational64_t *timestamp_ratio, int64_t n) {
3972 int64_t round = timestamp_ratio->num / 2;
3973 if (round > 0) --round;
3974 return (n * timestamp_ratio->den + round) / timestamp_ratio->num;
3975}
3976
3977static inline int frame_is_kf_gf_arf(const AV1_COMP *cpi) {
3978 const GF_GROUP *const gf_group = &cpi->ppi->gf_group;
3979 const FRAME_UPDATE_TYPE update_type =
3980 gf_group->update_type[cpi->gf_frame_index];
3981
3982 return frame_is_intra_only(&cpi->common) || update_type == ARF_UPDATE ||
3983 update_type == GF_UPDATE;
3984}
3985
3986// TODO(huisu@google.com, youzhou@microsoft.com): enable hash-me for HBD.
3987static inline int av1_use_hash_me(const AV1_COMP *const cpi) {
3990 frame_is_intra_only(&cpi->common));
3991}
3992
3993static inline const YV12_BUFFER_CONFIG *get_ref_frame_yv12_buf(
3994 const AV1_COMMON *const cm, MV_REFERENCE_FRAME ref_frame) {
3995 const RefCntBuffer *const buf = get_ref_frame_buf(cm, ref_frame);
3996 return buf != NULL ? &buf->buf : NULL;
3997}
3998
3999static inline void alloc_frame_mvs(AV1_COMMON *const cm, RefCntBuffer *buf) {
4000 assert(buf != NULL);
4001 ensure_mv_buffer(buf, cm);
4002 buf->width = cm->width;
4003 buf->height = cm->height;
4004}
4005
4006// Get the allocated token size for a tile. It does the same calculation as in
4007// the frame token allocation.
4008static inline unsigned int allocated_tokens(const TileInfo *tile,
4009 int sb_size_log2, int num_planes) {
4010 int tile_mb_rows =
4011 ROUND_POWER_OF_TWO(tile->mi_row_end - tile->mi_row_start, 2);
4012 int tile_mb_cols =
4013 ROUND_POWER_OF_TWO(tile->mi_col_end - tile->mi_col_start, 2);
4014
4015 return get_token_alloc(tile_mb_rows, tile_mb_cols, sb_size_log2, num_planes);
4016}
4017
4018static inline void get_start_tok(AV1_COMP *cpi, int tile_row, int tile_col,
4019 int mi_row, TokenExtra **tok, int sb_size_log2,
4020 int num_planes) {
4021 AV1_COMMON *const cm = &cpi->common;
4022 const int tile_cols = cm->tiles.cols;
4023 TileDataEnc *this_tile = &cpi->tile_data[tile_row * tile_cols + tile_col];
4024 const TileInfo *const tile_info = &this_tile->tile_info;
4025
4026 const int tile_mb_cols =
4027 (tile_info->mi_col_end - tile_info->mi_col_start + 2) >> 2;
4028 const int tile_mb_row = (mi_row - tile_info->mi_row_start + 2) >> 2;
4029
4030 *tok = cpi->token_info.tile_tok[tile_row][tile_col] +
4031 get_token_alloc(tile_mb_row, tile_mb_cols, sb_size_log2, num_planes);
4032}
4033
4034void av1_apply_encoding_flags(AV1_COMP *cpi, aom_enc_frame_flags_t flags);
4035
4036#define ALT_MIN_LAG 3
4037static inline int is_altref_enabled(int lag_in_frames, bool enable_auto_arf) {
4038 return lag_in_frames >= ALT_MIN_LAG && enable_auto_arf;
4039}
4040
4041static inline int can_disable_altref(const GFConfig *gf_cfg) {
4042 return is_altref_enabled(gf_cfg->lag_in_frames, gf_cfg->enable_auto_arf) &&
4043 (gf_cfg->gf_min_pyr_height == 0);
4044}
4045
4046// Helper function to compute number of blocks on either side of the frame.
4047static inline int get_num_blocks(const int frame_length, const int mb_length) {
4048 return (frame_length + mb_length - 1) / mb_length;
4049}
4050
4051// Check if statistics generation stage
4052static inline int is_stat_generation_stage(const AV1_COMP *const cpi) {
4053 assert(IMPLIES(cpi->compressor_stage == LAP_STAGE,
4054 cpi->oxcf.pass == AOM_RC_ONE_PASS && cpi->ppi->lap_enabled));
4055 return (cpi->oxcf.pass == AOM_RC_FIRST_PASS ||
4056 (cpi->compressor_stage == LAP_STAGE));
4057}
4058// Check if statistics consumption stage
4059static inline int is_stat_consumption_stage_twopass(const AV1_COMP *const cpi) {
4060 return (cpi->oxcf.pass >= AOM_RC_SECOND_PASS);
4061}
4062
4063// Check if statistics consumption stage
4064static inline int is_stat_consumption_stage(const AV1_COMP *const cpi) {
4065 return (is_stat_consumption_stage_twopass(cpi) ||
4066 (cpi->oxcf.pass == AOM_RC_ONE_PASS &&
4067 (cpi->compressor_stage == ENCODE_STAGE) && cpi->ppi->lap_enabled));
4068}
4069
4070// Decide whether 'dv_costs' need to be allocated/stored during the encoding.
4071static inline bool av1_need_dv_costs(const AV1_COMP *const cpi) {
4072 return !cpi->sf.rt_sf.use_nonrd_pick_mode &&
4073 av1_allow_intrabc(&cpi->common) && !is_stat_generation_stage(cpi);
4074}
4075
4085static inline int has_no_stats_stage(const AV1_COMP *const cpi) {
4086 assert(
4087 IMPLIES(!cpi->ppi->lap_enabled, cpi->compressor_stage == ENCODE_STAGE));
4088 return (cpi->oxcf.pass == AOM_RC_ONE_PASS && !cpi->ppi->lap_enabled);
4089}
4090
4092
4093static inline int is_one_pass_rt_params(const AV1_COMP *cpi) {
4094 return has_no_stats_stage(cpi) && cpi->oxcf.mode == REALTIME &&
4095 cpi->oxcf.gf_cfg.lag_in_frames == 0;
4096}
4097
4098// Use default/internal reference structure for single-layer RTC.
4099static inline int use_rtc_reference_structure_one_layer(const AV1_COMP *cpi) {
4100 return is_one_pass_rt_params(cpi) && cpi->ppi->number_spatial_layers == 1 &&
4101 cpi->ppi->number_temporal_layers == 1 &&
4102 !cpi->ppi->rtc_ref.set_ref_frame_config;
4103}
4104
4105// Check if postencode drop is allowed.
4106static inline int allow_postencode_drop_rtc(const AV1_COMP *cpi) {
4107 const AV1_COMMON *const cm = &cpi->common;
4108 return is_one_pass_rt_params(cpi) && cpi->oxcf.rc_cfg.mode == AOM_CBR &&
4110 !cpi->rc.rtc_external_ratectrl && !frame_is_intra_only(cm) &&
4111 cpi->svc.spatial_layer_id == 0;
4112}
4113
4114// Function return size of frame stats buffer
4115static inline int get_stats_buf_size(int num_lap_buffer, int num_lag_buffer) {
4116 /* if lookahead is enabled return num_lap_buffers else num_lag_buffers */
4117 return (num_lap_buffer > 0 ? num_lap_buffer + 1 : num_lag_buffer);
4118}
4119
4120// TODO(zoeliu): To set up cpi->oxcf.gf_cfg.enable_auto_brf
4121
4122static inline void set_ref_ptrs(const AV1_COMMON *cm, MACROBLOCKD *xd,
4123 MV_REFERENCE_FRAME ref0,
4124 MV_REFERENCE_FRAME ref1) {
4126 get_ref_scale_factors_const(cm, ref0 >= LAST_FRAME ? ref0 : 1);
4128 get_ref_scale_factors_const(cm, ref1 >= LAST_FRAME ? ref1 : 1);
4129}
4130
4131static inline int get_chessboard_index(int frame_index) {
4132 return frame_index & 0x1;
4133}
4134
4135static inline const int *cond_cost_list_const(const struct AV1_COMP *cpi,
4136 const int *cost_list) {
4137 const int use_cost_list = cpi->sf.mv_sf.subpel_search_method != SUBPEL_TREE &&
4138 cpi->sf.mv_sf.use_fullpel_costlist;
4139 return use_cost_list ? cost_list : NULL;
4140}
4141
4142static inline int *cond_cost_list(const struct AV1_COMP *cpi, int *cost_list) {
4143 const int use_cost_list = cpi->sf.mv_sf.subpel_search_method != SUBPEL_TREE &&
4144 cpi->sf.mv_sf.use_fullpel_costlist;
4145 return use_cost_list ? cost_list : NULL;
4146}
4147
4148// Compression ratio of current frame.
4149double av1_get_compression_ratio(const AV1_COMMON *const cm,
4150 size_t encoded_frame_size);
4151
4152void av1_new_framerate(AV1_COMP *cpi, double framerate);
4153
4154void av1_setup_frame_size(AV1_COMP *cpi);
4155
4156#define LAYER_IDS_TO_IDX(sl, tl, num_tl) ((sl) * (num_tl) + (tl))
4157
4158// Returns 1 if a frame is scaled and 0 otherwise.
4159static inline int av1_resize_scaled(const AV1_COMMON *cm) {
4160 return cm->superres_upscaled_width != cm->render_width ||
4162}
4163
4164static inline int av1_frame_scaled(const AV1_COMMON *cm) {
4165 return av1_superres_scaled(cm) || av1_resize_scaled(cm);
4166}
4167
4168// Don't allow a show_existing_frame to coincide with an error resilient
4169// frame. An exception can be made for a forward keyframe since it has no
4170// previous dependencies.
4171static inline int encode_show_existing_frame(const AV1_COMMON *cm) {
4173 cm->current_frame.frame_type == KEY_FRAME);
4174}
4175
4176// Get index into the 'cpi->mbmi_ext_info.frame_base' array for the given
4177// 'mi_row' and 'mi_col'.
4178static inline int get_mi_ext_idx(const int mi_row, const int mi_col,
4179 const BLOCK_SIZE mi_alloc_bsize,
4180 const int mbmi_ext_stride) {
4181 const int mi_ext_size_1d = mi_size_wide[mi_alloc_bsize];
4182 const int mi_ext_row = mi_row / mi_ext_size_1d;
4183 const int mi_ext_col = mi_col / mi_ext_size_1d;
4184 return mi_ext_row * mbmi_ext_stride + mi_ext_col;
4185}
4186
4187// Lighter version of set_offsets that only sets the mode info
4188// pointers.
4189static inline void set_mode_info_offsets(
4190 const CommonModeInfoParams *const mi_params,
4191 const MBMIExtFrameBufferInfo *const mbmi_ext_info, MACROBLOCK *const x,
4192 MACROBLOCKD *const xd, int mi_row, int mi_col) {
4193 set_mi_offsets(mi_params, xd, mi_row, mi_col);
4194 const int ext_idx = get_mi_ext_idx(mi_row, mi_col, mi_params->mi_alloc_bsize,
4195 mbmi_ext_info->stride);
4196 x->mbmi_ext_frame = mbmi_ext_info->frame_base + ext_idx;
4197}
4198
4199// Check to see if the given partition size is allowed for a specified number
4200// of mi block rows and columns remaining in the image.
4201// If not then return the largest allowed partition size
4202static inline BLOCK_SIZE find_partition_size(BLOCK_SIZE bsize, int rows_left,
4203 int cols_left, int *bh, int *bw) {
4204 int int_size = (int)bsize;
4205 if (rows_left <= 0 || cols_left <= 0) {
4206 return AOMMIN(bsize, BLOCK_8X8);
4207 } else {
4208 for (; int_size > 0; int_size -= 3) {
4209 *bh = mi_size_high[int_size];
4210 *bw = mi_size_wide[int_size];
4211 if ((*bh <= rows_left) && (*bw <= cols_left)) {
4212 break;
4213 }
4214 }
4215 }
4216 return (BLOCK_SIZE)int_size;
4217}
4218
4219static const uint8_t av1_ref_frame_flag_list[REF_FRAMES] = { 0,
4220 AOM_LAST_FLAG,
4221 AOM_LAST2_FLAG,
4222 AOM_LAST3_FLAG,
4223 AOM_GOLD_FLAG,
4224 AOM_BWD_FLAG,
4225 AOM_ALT2_FLAG,
4226 AOM_ALT_FLAG };
4227
4228// When more than 'max_allowed_refs' are available, we reduce the number of
4229// reference frames one at a time based on this order.
4230static const MV_REFERENCE_FRAME disable_order[] = {
4231 LAST3_FRAME,
4232 LAST2_FRAME,
4233 ALTREF2_FRAME,
4234 BWDREF_FRAME,
4235};
4236
4237static const MV_REFERENCE_FRAME
4238 ref_frame_priority_order[INTER_REFS_PER_FRAME] = {
4239 LAST_FRAME, ALTREF_FRAME, BWDREF_FRAME, GOLDEN_FRAME,
4240 ALTREF2_FRAME, LAST2_FRAME, LAST3_FRAME,
4241 };
4242
4243static inline int get_ref_frame_flags(const SPEED_FEATURES *const sf,
4244 const int use_one_pass_rt_params,
4245 const YV12_BUFFER_CONFIG **ref_frames,
4246 const int ext_ref_frame_flags) {
4247 // cpi->ext_flags.ref_frame_flags allows certain reference types to be
4248 // disabled by the external interface. These are set by
4249 // av1_apply_encoding_flags(). Start with what the external interface allows,
4250 // then suppress any reference types which we have found to be duplicates.
4251 int flags = ext_ref_frame_flags;
4252
4253 for (int i = 1; i < INTER_REFS_PER_FRAME; ++i) {
4254 const YV12_BUFFER_CONFIG *const this_ref = ref_frames[i];
4255 // If this_ref has appeared before, mark the corresponding ref frame as
4256 // invalid. For one_pass_rt mode, only disable GOLDEN_FRAME if it's the
4257 // same as LAST_FRAME or ALTREF_FRAME (if ALTREF is being used in nonrd).
4258 int index =
4259 (use_one_pass_rt_params && ref_frame_priority_order[i] == GOLDEN_FRAME)
4260 ? (1 + sf->rt_sf.use_nonrd_altref_frame)
4261 : i;
4262 for (int j = 0; j < index; ++j) {
4263 // If this_ref has appeared before (same as the reference corresponding
4264 // to lower index j), remove it as a reference only if that reference
4265 // (for index j) is actually used as a reference.
4266 if (this_ref == ref_frames[j] &&
4267 (flags & (1 << (ref_frame_priority_order[j] - 1)))) {
4268 flags &= ~(1 << (ref_frame_priority_order[i] - 1));
4269 break;
4270 }
4271 }
4272 }
4273 return flags;
4274}
4275
4276// Returns a Sequence Header OBU stored in an aom_fixed_buf_t, or NULL upon
4277// failure. When a non-NULL aom_fixed_buf_t pointer is returned by this
4278// function, the memory must be freed by the caller. Both the buf member of the
4279// aom_fixed_buf_t, and the aom_fixed_buf_t pointer itself must be freed. Memory
4280// returned must be freed via call to free().
4281//
4282// Note: The OBU returned is in Low Overhead Bitstream Format. Specifically,
4283// the obu_has_size_field bit is set, and the buffer contains the obu_size
4284// field.
4285aom_fixed_buf_t *av1_get_global_headers(AV1_PRIMARY *ppi);
4286
4287#define MAX_GFUBOOST_FACTOR 10.0
4288#define MIN_GFUBOOST_FACTOR 4.0
4289
4290static inline int is_frame_tpl_eligible(const GF_GROUP *const gf_group,
4291 uint8_t index) {
4292 const FRAME_UPDATE_TYPE update_type = gf_group->update_type[index];
4293 return update_type == ARF_UPDATE || update_type == GF_UPDATE ||
4294 update_type == KF_UPDATE;
4295}
4296
4297static inline int is_frame_eligible_for_ref_pruning(const GF_GROUP *gf_group,
4298 int selective_ref_frame,
4299 int prune_ref_frames,
4300 int gf_index) {
4301 return (selective_ref_frame > 0) && (prune_ref_frames > 0) &&
4302 !is_frame_tpl_eligible(gf_group, gf_index);
4303}
4304
4305// Get update type of the current frame.
4306static inline FRAME_UPDATE_TYPE get_frame_update_type(const GF_GROUP *gf_group,
4307 int gf_frame_index) {
4308 return gf_group->update_type[gf_frame_index];
4309}
4310
4311static inline int av1_pixels_to_mi(int pixels) {
4312 return ALIGN_POWER_OF_TWO(pixels, 3) >> MI_SIZE_LOG2;
4313}
4314
4315static inline int is_psnr_calc_enabled(const AV1_COMP *cpi) {
4316 const AV1_COMMON *const cm = &cpi->common;
4317
4318 return cpi->ppi->b_calculate_psnr && !is_stat_generation_stage(cpi) &&
4319 cm->show_frame && !cpi->is_dropped_frame;
4320}
4321
4322static inline int is_frame_resize_pending(const AV1_COMP *const cpi) {
4323 const ResizePendingParams *const resize_pending_params =
4325 return (resize_pending_params->width && resize_pending_params->height &&
4326 (cpi->common.width != resize_pending_params->width ||
4327 cpi->common.height != resize_pending_params->height));
4328}
4329
4330// Check if loop filter is used.
4331static inline int is_loopfilter_used(const AV1_COMMON *const cm) {
4332 return !cm->features.coded_lossless && !cm->tiles.large_scale;
4333}
4334
4335// Check if CDEF is used.
4336static inline int is_cdef_used(const AV1_COMMON *const cm) {
4337 return cm->seq_params->enable_cdef && !cm->features.coded_lossless &&
4338 !cm->tiles.large_scale;
4339}
4340
4341// Check if loop restoration filter is used.
4342static inline int is_restoration_used(const AV1_COMMON *const cm) {
4343 return cm->seq_params->enable_restoration && !cm->features.all_lossless &&
4344 !cm->tiles.large_scale;
4345}
4346
4347// Checks if post-processing filters need to be applied.
4348// NOTE: This function decides if the application of different post-processing
4349// filters on the reconstructed frame can be skipped at the encoder side.
4350// However the computation of different filter parameters that are signaled in
4351// the bitstream is still required.
4352static inline unsigned int derive_skip_apply_postproc_filters(
4353 const AV1_COMP *cpi, int use_loopfilter, int use_cdef, int use_superres,
4354 int use_restoration) {
4355 // Though CDEF parameter selection should be dependent on
4356 // deblocked/loop-filtered pixels for cdef_pick_method <=
4357 // CDEF_FAST_SEARCH_LVL5, CDEF strength values are calculated based on the
4358 // pixel values that are not loop-filtered in svc real-time encoding mode.
4359 // Hence this case is handled separately using the condition below.
4360 if (cpi->ppi->rtc_ref.non_reference_frame)
4361 return (SKIP_APPLY_LOOPFILTER | SKIP_APPLY_CDEF);
4362
4364 return 0;
4365 assert(cpi->oxcf.mode == ALLINTRA);
4366
4367 // The post-processing filters are applied one after the other in the
4368 // following order: deblocking->cdef->superres->restoration. In case of
4369 // ALLINTRA encoding, the reconstructed frame is not used as a reference
4370 // frame. Hence, the application of these filters can be skipped when
4371 // 1. filter parameters of the subsequent stages are not dependent on the
4372 // filtered output of the current stage or
4373 // 2. subsequent filtering stages are disabled
4374 if (use_restoration) return SKIP_APPLY_RESTORATION;
4375 if (use_superres) return SKIP_APPLY_SUPERRES;
4376 if (use_cdef) {
4377 // CDEF parameter selection is not dependent on the deblocked frame if
4378 // cdef_pick_method is CDEF_PICK_FROM_Q. Hence the application of deblocking
4379 // filters and cdef filters can be skipped in this case.
4380 return (cpi->sf.lpf_sf.cdef_pick_method == CDEF_PICK_FROM_Q &&
4381 use_loopfilter)
4382 ? (SKIP_APPLY_LOOPFILTER | SKIP_APPLY_CDEF)
4383 : SKIP_APPLY_CDEF;
4384 }
4385 if (use_loopfilter) return SKIP_APPLY_LOOPFILTER;
4386
4387 // If we reach here, all post-processing stages are disabled, so none need to
4388 // be skipped.
4389 return 0;
4390}
4391
4392static inline void set_postproc_filter_default_params(AV1_COMMON *cm) {
4393 struct loopfilter *const lf = &cm->lf;
4394 CdefInfo *const cdef_info = &cm->cdef_info;
4395 RestorationInfo *const rst_info = cm->rst_info;
4396
4397 lf->filter_level[0] = 0;
4398 lf->filter_level[1] = 0;
4399 cdef_info->cdef_bits = 0;
4400 cdef_info->cdef_strengths[0] = 0;
4401 cdef_info->nb_cdef_strengths = 1;
4402 cdef_info->cdef_uv_strengths[0] = 0;
4406}
4407
4408static inline int is_inter_tx_size_search_level_one(
4409 const TX_SPEED_FEATURES *tx_sf) {
4410 return (tx_sf->inter_tx_size_search_init_depth_rect >= 1 &&
4411 tx_sf->inter_tx_size_search_init_depth_sqr >= 1);
4412}
4413
4414static inline int get_lpf_opt_level(const SPEED_FEATURES *sf) {
4415 int lpf_opt_level = 0;
4416 if (is_inter_tx_size_search_level_one(&sf->tx_sf))
4417 lpf_opt_level = (sf->lpf_sf.lpf_pick == LPF_PICK_FROM_Q) ? 2 : 1;
4418 return lpf_opt_level;
4419}
4420
4421// Enable switchable motion mode only if warp and OBMC tools are allowed
4422static inline bool is_switchable_motion_mode_allowed(bool allow_warped_motion,
4423 bool enable_obmc) {
4424 return (allow_warped_motion || enable_obmc);
4425}
4426
4427#if CONFIG_AV1_TEMPORAL_DENOISING
4428static inline int denoise_svc(const struct AV1_COMP *const cpi) {
4429 return (!cpi->ppi->use_svc ||
4430 (cpi->ppi->use_svc &&
4431 cpi->svc.spatial_layer_id >= cpi->svc.first_layer_denoise));
4432}
4433#endif
4434
4435#if CONFIG_COLLECT_PARTITION_STATS == 2
4436static inline void av1_print_fr_partition_timing_stats(
4437 const FramePartitionTimingStats *part_stats, const char *filename) {
4438 FILE *f = fopen(filename, "w");
4439 if (!f) {
4440 return;
4441 }
4442
4443 fprintf(f, "bsize,redo,");
4444 for (int part = 0; part < EXT_PARTITION_TYPES; part++) {
4445 fprintf(f, "decision_%d,", part);
4446 }
4447 for (int part = 0; part < EXT_PARTITION_TYPES; part++) {
4448 fprintf(f, "attempt_%d,", part);
4449 }
4450 for (int part = 0; part < EXT_PARTITION_TYPES; part++) {
4451 fprintf(f, "time_%d,", part);
4452 }
4453 fprintf(f, "\n");
4454
4455 static const int bsizes[6] = { 128, 64, 32, 16, 8, 4 };
4456
4457 for (int bsize_idx = 0; bsize_idx < 6; bsize_idx++) {
4458 fprintf(f, "%d,%d,", bsizes[bsize_idx], part_stats->partition_redo);
4459 for (int part = 0; part < EXT_PARTITION_TYPES; part++) {
4460 fprintf(f, "%d,", part_stats->partition_decisions[bsize_idx][part]);
4461 }
4462 for (int part = 0; part < EXT_PARTITION_TYPES; part++) {
4463 fprintf(f, "%d,", part_stats->partition_attempts[bsize_idx][part]);
4464 }
4465 for (int part = 0; part < EXT_PARTITION_TYPES; part++) {
4466 fprintf(f, "%ld,", part_stats->partition_times[bsize_idx][part]);
4467 }
4468 fprintf(f, "\n");
4469 }
4470 fclose(f);
4471}
4472#endif // CONFIG_COLLECT_PARTITION_STATS == 2
4473
4474#if CONFIG_COLLECT_PARTITION_STATS
4475static inline int av1_get_bsize_idx_for_part_stats(BLOCK_SIZE bsize) {
4476 assert(bsize == BLOCK_128X128 || bsize == BLOCK_64X64 ||
4477 bsize == BLOCK_32X32 || bsize == BLOCK_16X16 || bsize == BLOCK_8X8 ||
4478 bsize == BLOCK_4X4);
4479 switch (bsize) {
4480 case BLOCK_128X128: return 0;
4481 case BLOCK_64X64: return 1;
4482 case BLOCK_32X32: return 2;
4483 case BLOCK_16X16: return 3;
4484 case BLOCK_8X8: return 4;
4485 case BLOCK_4X4: return 5;
4486 default: assert(0 && "Invalid bsize for partition_stats."); return -1;
4487 }
4488}
4489#endif // CONFIG_COLLECT_PARTITION_STATS
4490
4491#if CONFIG_COLLECT_COMPONENT_TIMING
4492static inline void start_timing(AV1_COMP *cpi, int component) {
4493 aom_usec_timer_start(&cpi->component_timer[component]);
4494}
4495static inline void end_timing(AV1_COMP *cpi, int component) {
4496 aom_usec_timer_mark(&cpi->component_timer[component]);
4497 cpi->frame_component_time[component] +=
4498 aom_usec_timer_elapsed(&cpi->component_timer[component]);
4499}
4500static inline char const *get_frame_type_enum(int type) {
4501 switch (type) {
4502 case 0: return "KEY_FRAME";
4503 case 1: return "INTER_FRAME";
4504 case 2: return "INTRA_ONLY_FRAME";
4505 case 3: return "S_FRAME";
4506 default: assert(0);
4507 }
4508 return "error";
4509}
4510#endif
4511
4513
4514#ifdef __cplusplus
4515} // extern "C"
4516#endif
4517
4518#endif // AOM_AV1_ENCODER_ENCODER_H_
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:220
@ COST_UPD_SBROW
Definition encoder.h:222
@ COST_UPD_TILE
Definition encoder.h:223
@ COST_UPD_OFF
Definition encoder.h:224
@ NUM_COST_UPDATE_TYPES
Definition encoder.h:225
@ COST_UPD_SB
Definition encoder.h:221
LOOPFILTER_CONTROL
This enum controls to which frames loopfilter is applied.
Definition encoder.h:231
@ LOOPFILTER_ALL
Definition encoder.h:233
@ LOOPFILTER_SELECTIVELY
Definition encoder.h:235
@ LOOPFILTER_REFERENCE
Definition encoder.h:234
@ LOOPFILTER_NONE
Definition encoder.h:232
#define NUM_RECODES_PER_FRAME
Max number of recodes used to track the frame probabilities.
Definition encoder.h:1623
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:243
#define MAX_PARALLEL_FRAMES
Max number of frames that can be encoded in a parallel encode set.
Definition encoder.h:1628
RestorationType
This enumeration defines various restoration types supported.
Definition enums.h:609
@ RESTORE_NONE
Definition enums.h:610
@ RESTORE_SWITCHABLE_TYPES
Definition enums.h:614
@ RESTORE_TYPES
Definition enums.h:615
aom_dist_metric
Distortion metric to use for RD optimization.
Definition aomcx.h:1683
aom_tune_content
Definition aomcx.h:1644
enum aom_scaling_mode_1d AOM_SCALING_MODE
aom 1-D scaling mode
aom_tune_metric
Model tuning parameters.
Definition aomcx.h:1663
enum aom_bit_depth aom_bit_depth_t
Bit depth for codecThis enumeration determines the bit depth of the codec.
enum aom_superblock_size aom_superblock_size_t
Superblock size selection.
aom_codec_err_t
Algorithm return codes.
Definition aom_codec.h:155
aom_superres_mode
Frame super-resolution mode.
Definition aom_encoder.h:207
aom_rc_mode
Rate control mode.
Definition aom_encoder.h:185
aom_enc_pass
Multi-pass Encoding Pass.
Definition aom_encoder.h:176
struct aom_fixed_buf aom_fixed_buf_t
Generic fixed size buffer structure.
long aom_enc_frame_flags_t
Encoded Frame Flags.
Definition aom_encoder.h:377
@ AOM_CBR
Definition aom_encoder.h:187
@ AOM_RC_ONE_PASS
Definition aom_encoder.h:177
@ AOM_RC_SECOND_PASS
Definition aom_encoder.h:179
@ AOM_RC_FIRST_PASS
Definition aom_encoder.h:178
int av1_get_compressed_data(AV1_COMP *cpi, AV1_COMP_DATA *const cpi_data)
Encode a frame.
Definition encoder.c:4722
int av1_encode(AV1_COMP *const cpi, uint8_t *const dest, size_t dest_size, const EncodeFrameInput *const frame_input, const EncodeFrameParams *const frame_params, size_t *const frame_size)
Run 1-pass/2-pass encoding.
Definition encoder.c:4014
int av1_receive_raw_frame(AV1_COMP *cpi, aom_enc_frame_flags_t frame_flags, const YV12_BUFFER_CONFIG *sd, int64_t time_stamp, int64_t end_time_stamp)
Obtain the raw frame data.
Definition encoder.c:4112
static int has_no_stats_stage(const AV1_COMP *const cpi)
Check if the current stage has statistics.
Definition encoder.h:4085
Describes look ahead buffer operations.
@ CDEF_PICK_FROM_Q
Definition speed_features.h:172
RestorationInfo rst_info[3]
Definition av1_common_int.h:953
int superres_upscaled_width
Definition av1_common_int.h:806
int superres_upscaled_height
Definition av1_common_int.h:807
SequenceHeader * seq_params
Definition av1_common_int.h:983
int width
Definition av1_common_int.h:782
CdefInfo cdef_info
Definition av1_common_int.h:962
CurrentFrame current_frame
Definition av1_common_int.h:761
int show_existing_frame
Definition av1_common_int.h:907
struct loopfilter lf
Definition av1_common_int.h:946
FeatureFlags features
Definition av1_common_int.h:912
int show_frame
Definition av1_common_int.h:892
RefCntBuffer * ref_frame_map[REF_FRAMES]
Definition av1_common_int.h:885
CommonTileParams tiles
Definition av1_common_int.h:999
int height
Definition av1_common_int.h:783
int render_width
Definition av1_common_int.h:793
int render_height
Definition av1_common_int.h:794
Encoder data related to multi-threading for allintra deltaq-mode=3.
Definition encoder.h:1593
pthread_mutex_t * mutex_
Definition encoder.h:1598
void(* intra_sync_read_ptr)(AV1EncRowMultiThreadSync *const, int, int)
Definition encoder.h:1612
pthread_cond_t * cond_
Definition encoder.h:1602
void(* intra_sync_write_ptr)(AV1EncRowMultiThreadSync *const, int, int, int)
Definition encoder.h:1616
Encoder data related to row-based multi-threading.
Definition encoder.h:1503
int allocated_sb_rows
Definition encoder.h:1542
pthread_mutex_t * mutex_
Definition encoder.h:1568
int allocated_tile_cols
Definition encoder.h:1511
bool firstpass_mt_exit
Definition encoder.h:1555
int allocated_cols
Definition encoder.h:1525
int thread_id_to_tile_id[64]
Definition encoder.h:1530
bool mb_wiener_mt_exit
Definition encoder.h:1562
void(* sync_write_ptr)(AV1EncRowMultiThreadSync *const, int, int, int)
Definition encoder.h:1586
pthread_cond_t * cond_
Definition encoder.h:1572
bool row_mt_exit
Definition encoder.h:1548
int allocated_tile_rows
Definition encoder.h:1507
int allocated_rows
Definition encoder.h:1518
int * num_tile_cols_done
Definition encoder.h:1536
void(* sync_read_ptr)(AV1EncRowMultiThreadSync *const, int, int)
Definition encoder.h:1582
Encoder parameters for synchronization of row based multi-threading.
Definition encoder.h:1385
int rows
Definition encoder.h:1418
int sync_range
Definition encoder.h:1407
int intrabc_extra_top_right_sb_delay
Definition encoder.h:1414
int next_mi_row
Definition encoder.h:1422
int * num_finished_cols
Definition encoder.h:1400
pthread_mutex_t * mutex_
Definition encoder.h:1391
pthread_cond_t * cond_
Definition encoder.h:1392
int num_threads_working
Definition encoder.h:1426
Main encoder configuration data structure.
Definition encoder.h:925
RateControlCfg rc_cfg
Definition encoder.h:947
KeyFrameCfg kf_cfg
Definition encoder.h:942
enum aom_enc_pass pass
Definition encoder.h:1050
AlgoCfg algo_cfg
Definition encoder.h:937
aom_fixed_buf_t twopass_stats_in
Definition encoder.h:964
Structure to hold search parameter per restoration unit and intermediate buffer of Wiener filter used...
Definition encoder.h:1682
RestUnitSearchInfo * rusi[3]
Definition encoder.h:1687
int16_t * dgd_avg
Definition encoder.h:1692
Structure to hold data corresponding to an encoded frame.
Definition encoder.h:2524
int64_t ts_frame_end
Definition encoder.h:2553
int pop_lookahead
Definition encoder.h:2568
int64_t ts_frame_start
Definition encoder.h:2548
unsigned char * cx_data
Definition encoder.h:2528
size_t cx_data_sz
Definition encoder.h:2533
int flush
Definition encoder.h:2558
unsigned int lib_flags
Definition encoder.h:2543
size_t frame_size
Definition encoder.h:2538
const aom_rational64_t * timestamp_ratio
Definition encoder.h:2563
Top level encoder structure.
Definition encoder.h:2870
double * ext_rate_distribution
Definition encoder.h:3547
int do_update_frame_probs_warp[10]
Definition encoder.h:3256
uint8_t * consec_zero_mv
Definition encoder.h:3457
int do_update_frame_probs_obmc[10]
Definition encoder.h:3251
struct aom_denoise_and_model_t * denoise_and_model
Definition encoder.h:3324
int skip_tpl_setup_stats
Definition encoder.h:2978
int frames_since_last_update
Definition encoder.h:3633
int * mb_delta_q
Definition encoder.h:3567
int vaq_refresh
Definition encoder.h:3226
FRAME_TYPE last_frame_type
Definition encoder.h:3422
YV12_BUFFER_CONFIG * unscaled_source
Definition encoder.h:2946
int palette_pixel_num
Definition encoder.h:3662
CYCLIC_REFRESH * cyclic_refresh
Definition encoder.h:3118
RATE_CONTROL rc
Definition encoder.h:3077
int deltaq_used
Definition encoder.h:3380
ActiveMap active_map
Definition encoder.h:3123
bool frame_size_related_setup_done
Definition encoder.h:3189
WeberStats * mb_weber_stats
Definition encoder.h:3535
bool refresh_idx_available
Definition encoder.h:3500
TokenInfo token_info
Definition encoder.h:3221
int64_t ambient_err
Definition encoder.h:3046
aom_film_grain_table_t * film_grain_table
Definition encoder.h:3317
int ref_refresh_index
Definition encoder.h:3494
size_t available_bs_size
Definition encoder.h:3478
SPEED_FEATURES sf
Definition encoder.h:3097
TRELLIS_OPT_TYPE optimize_seg_arr[8]
Definition encoder.h:2924
ExtPartController ext_part_controller
Definition encoder.h:3484
FILE * second_pass_log_stream
Definition encoder.h:3603
double * ssim_rdmult_scaling_factors
Definition encoder.h:3392
RD_OPT rd
Definition encoder.h:3051
int data_alloc_height
Definition encoder.h:3175
int num_tg
Definition encoder.h:3427
WinnerModeParams winner_mode_params
Definition encoder.h:3067
ExternalFlags ext_flags
Definition encoder.h:3029
bool alloc_pyramid
Definition encoder.h:3644
EncSegmentationInfo enc_seg
Definition encoder.h:3113
MotionVectorSearchParams mv_search_params
Definition encoder.h:3102
int use_screen_content_tools
Definition encoder.h:3339
int do_update_frame_probs_interpfilter[10]
Definition encoder.h:3261
CODING_CONTEXT coding_context
Definition encoder.h:3057
TemporalFilterCtx tf_ctx
Definition encoder.h:2993
ForceIntegerMVInfo force_intpel_info
Definition encoder.h:3003
GlobalMotionInfo gm_info
Definition encoder.h:3062
int consec_zero_mv_alloc_size
Definition encoder.h:3462
CoeffBufferPool coeff_buffer_pool
Definition encoder.h:2908
FRAME_INDEX_SET frame_index_set
Definition encoder.h:3161
int ref_frame_flags
Definition encoder.h:3087
RefCntBuffer * scaled_ref_buf[INTER_REFS_PER_FRAME]
Definition encoder.h:3009
unsigned char gf_frame_index
Definition encoder.h:3128
AV1EncoderConfig oxcf
Definition encoder.h:2918
AV1_COMMON common
Definition encoder.h:2913
AV1LrStruct lr_ctxt
Definition encoder.h:3307
bool do_frame_data_update
Definition encoder.h:3523
CdefSearchCtx * cdef_search_ctx
Definition encoder.h:2998
int data_alloc_width
Definition encoder.h:3168
int do_update_frame_probs_txtype[10]
Definition encoder.h:3246
FRAME_COUNTS counts
Definition encoder.h:2890
COMPRESSOR_STAGE compressor_stage
Definition encoder.h:3416
int intrabc_used
Definition encoder.h:3297
int num_frame_recode
Definition encoder.h:3236
int rt_reduce_num_ref_buffers
Definition encoder.h:3024
RefreshFrameInfo refresh_frame
Definition encoder.h:3019
int prune_ref_frame_mask
Definition encoder.h:3302
YV12_BUFFER_CONFIG * unscaled_last_source
Definition encoder.h:2956
int all_one_sided_refs
Definition encoder.h:3108
MultiThreadInfo mt_info
Definition encoder.h:3285
VarBasedPartitionInfo vbp_info
Definition encoder.h:3231
int scaled_last_source_available
Definition encoder.h:3668
YV12_BUFFER_CONFIG * last_source
Definition encoder.h:2940
int existing_fb_idx_to_show
Definition encoder.h:3292
YV12_BUFFER_CONFIG * unfiltered_source
Definition encoder.h:2967
unsigned int zeromv_skip_thresh_exit_part[BLOCK_SIZES_ALL]
Definition encoder.h:3638
FRAME_INFO frame_info
Definition encoder.h:3156
int last_coded_height
Definition encoder.h:3201
int frame_header_count
Definition encoder.h:3375
int droppable
Definition encoder.h:3151
RefCntBuffer * last_show_frame_buf
Definition encoder.h:3014
aom_superres_mode superres_mode
Definition encoder.h:3434
MBMIExtFrameBufferInfo mbmi_ext_info
Definition encoder.h:2895
AV1LrPickStruct pick_lr_ctxt
Definition encoder.h:3312
double new_framerate
Definition encoder.h:3275
AV1_PRIMARY * ppi
Definition encoder.h:2874
uint64_t * src_sad_blk_64x64
Definition encoder.h:3608
int64_t norm_wiener_variance
Definition encoder.h:3562
double * tpl_rdmult_scaling_factors
Definition encoder.h:2988
int sb_counter
Definition encoder.h:3473
int last_coded_width
Definition encoder.h:3195
TileDataEnc * tile_data
Definition encoder.h:3212
int is_screen_content_type
Definition encoder.h:3347
BLOCK_SIZE weber_bsize
Definition encoder.h:3557
InterpSearchFlags interp_search_flags
Definition encoder.h:3330
TimeStamps time_stamps
Definition encoder.h:3072
int ref_idx_to_skip
Definition encoder.h:3507
YV12_BUFFER_CONFIG orig_source
Definition encoder.h:2973
FirstPassData firstpass_data
Definition encoder.h:3439
double framerate
Definition encoder.h:3082
int speed
Definition encoder.h:3092
BLOCK_SIZE fp_block_size
Definition encoder.h:3467
int use_ducky_encode
Definition encoder.h:3621
YV12_BUFFER_CONFIG trial_frame_rst
Definition encoder.h:3041
bool is_dropped_frame
Definition encoder.h:3572
ThreadData td
Definition encoder.h:2885
ResizePendingParams resize_pending_params
Definition encoder.h:3206
YV12_BUFFER_CONFIG scaled_source
Definition encoder.h:2951
int do_update_vbr_bits_off_target_fast
Definition encoder.h:3280
YV12_BUFFER_CONFIG last_frame_uf
Definition encoder.h:3035
EncQuantDequantParams enc_quant_dequant_params
Definition encoder.h:2880
RefFrameDistanceInfo ref_frame_dist_info
Definition encoder.h:3385
int * prep_rate_estimates
Definition encoder.h:3541
DuckyEncodeInfo ducky_encode_info
Definition encoder.h:3627
double ext_rate_scale
Definition encoder.h:3552
int initial_mbs
Definition encoder.h:3183
uint64_t rec_sse
Definition encoder.h:3615
YV12_BUFFER_CONFIG scaled_last_source
Definition encoder.h:2961
MV_STATS mv_stats
Definition encoder.h:3490
FrameProbInfo frame_new_probs[10]
Definition encoder.h:3241
YV12_BUFFER_CONFIG * source
Definition encoder.h:2931
int allocated_tiles
Definition encoder.h:3216
SVC svc
Definition encoder.h:3411
CB_COEFF_BUFFER * coeff_buffer_base
Definition encoder.h:2902
NOISE_ESTIMATE noise_estimate
Definition encoder.h:3444
TWO_PASS_FRAME twopass_frame
Definition encoder.h:3591
Top level primary encoder structure.
Definition encoder.h:2574
int num_fp_contexts
Definition encoder.h:2631
AV1EncRowMultiThreadSync intra_row_mt_sync
Definition encoder.h:2864
bool buffer_removal_time_present
Definition encoder.h:2745
int valid_gm_model_found[FRAME_UPDATE_TYPES]
Definition encoder.h:2853
struct aom_codec_pkt_list * output_pkt_list
Definition encoder.h:2675
int filter_level[2]
Definition encoder.h:2636
SequenceHeader seq_params
Definition encoder.h:2735
MV_STATS mv_stats
Definition encoder.h:2783
struct AV1_COMP * cpi
Definition encoder.h:2652
AV1LevelParams level_params
Definition encoder.h:2705
int internal_altref_allowed
Definition encoder.h:2680
RTC_REF rtc_ref
Definition encoder.h:2858
int b_calculate_psnr
Definition encoder.h:2710
PrimaryMultiThreadInfo p_mt_info
Definition encoder.h:2840
TEMPORAL_FILTER_INFO tf_info
Definition encoder.h:2730
TWO_PASS twopass
Definition encoder.h:2720
int frames_left
Definition encoder.h:2715
int64_t ts_start_last_show_frame
Definition encoder.h:2621
PRIMARY_RATE_CONTROL p_rc
Definition encoder.h:2725
int lap_enabled
Definition encoder.h:2700
FrameProbInfo frame_probs
Definition encoder.h:2845
int show_existing_alt_ref
Definition encoder.h:2685
int fb_of_context_type[REF_FRAMES]
Definition encoder.h:2835
int use_svc
Definition encoder.h:2740
double * tpl_sb_rdmult_scaling_factors
Definition encoder.h:2773
int filter_level_v
Definition encoder.h:2646
int filter_level_u
Definition encoder.h:2641
struct AV1_COMP * cpi_lap
Definition encoder.h:2657
struct AV1_COMP * parallel_cpi[4]
Definition encoder.h:2578
int64_t ts_end_last_show_frame
Definition encoder.h:2626
struct lookahead_ctx * lookahead
Definition encoder.h:2662
RefCntBuffer * ref_frame_map_copy[REF_FRAMES]
Definition encoder.h:2616
GF_STATE gf_state
Definition encoder.h:2695
aom_variance_fn_ptr_t fn_ptr[BLOCK_SIZES_ALL]
Definition encoder.h:2767
GF_GROUP gf_group
Definition encoder.h:2690
struct AV1_COMP_DATA parallel_frames_data[4 - 1]
Definition encoder.h:2584
TplParams tpl_data
Definition encoder.h:2778
unsigned int number_temporal_layers
Definition encoder.h:2750
unsigned int number_spatial_layers
Definition encoder.h:2755
int seq_params_locked
Definition encoder.h:2669
struct aom_internal_error_info error
Definition encoder.h:2760
Algorithm configuration parameters.
Definition encoder.h:819
int disable_trellis_quant
Definition encoder.h:835
int sharpness
Definition encoder.h:826
bool skip_postproc_filtering
Definition encoder.h:879
int arnr_max_frames
Definition encoder.h:840
bool enable_tpl_model
Definition encoder.h:858
LOOPFILTER_CONTROL loopfilter_control
Definition encoder.h:873
uint8_t cdf_update_mode
Definition encoder.h:853
bool enable_overlay
Definition encoder.h:864
int arnr_strength
Definition encoder.h:845
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:200
int cdef_bits
Number of CDEF strength values in bits.
Definition av1_common_int.h:222
int cdef_uv_strengths[16]
CDEF strength values for chroma.
Definition av1_common_int.h:220
int cdef_strengths[16]
CDEF strength values for luma.
Definition av1_common_int.h:218
int nb_cdef_strengths
Number of CDEF strength values.
Definition av1_common_int.h:216
Definition encoder.h:2430
uint8_t * entropy_ctx
Definition encoder.h:2442
tran_low_t * tcoeff
Definition encoder.h:2434
uint16_t * eobs
Definition encoder.h:2438
Params related to MB_MODE_INFO arrays and related info.
Definition av1_common_int.h:508
BLOCK_SIZE mi_alloc_bsize
Definition av1_common_int.h:557
int cols
Definition av1_common_int.h:435
unsigned int large_scale
Definition av1_common_int.h:495
Encoder flags for compound prediction modes.
Definition encoder.h:398
bool enable_masked_comp
Definition encoder.h:407
bool enable_diff_wtd_comp
Definition encoder.h:415
bool enable_smooth_interintra
Definition encoder.h:411
bool enable_interintra_wedge
Definition encoder.h:423
bool enable_interinter_wedge
Definition encoder.h:419
bool enable_dist_wtd_comp
Definition encoder.h:402
Segmentation related information for the current frame.
Definition encoder.h:2393
uint8_t * map
Definition encoder.h:2399
bool has_lossless_segment
Definition encoder.h:2405
Input frames and last input frame.
Definition encoder.h:3674
contains per-frame encoding parameters decided upon by av1_encode_strategy() and passed down to av1_e...
Definition encoder.h:3686
int error_resilient_mode
Definition encoder.h:3690
int remapped_ref_idx[REF_FRAMES]
Definition encoder.h:3721
int ref_frame_flags
Definition encoder.h:3716
int speed
Definition encoder.h:3732
FRAME_TYPE frame_type
Definition encoder.h:3694
int show_frame
Definition encoder.h:3704
RefreshFrameInfo refresh_frame
Definition encoder.h:3727
Frame refresh flags set by the external interface.
Definition encoder.h:2260
bool golden_frame
Definition encoder.h:2262
bool bwd_ref_frame
Definition encoder.h:2263
bool update_pending
Definition encoder.h:2269
bool last_frame
Definition encoder.h:2261
bool alt_ref_frame
Definition encoder.h:2265
bool alt2_ref_frame
Definition encoder.h:2264
Flags signalled by the external interface at frame level.
Definition encoder.h:2275
bool use_primary_ref_none
Definition encoder.h:2316
bool use_ref_frame_mvs
Definition encoder.h:2300
ExtRefreshFrameFlagsInfo refresh_frame
Definition encoder.h:2284
int ref_frame_flags
Definition encoder.h:2279
bool use_error_resilient
Definition encoder.h:2305
bool use_s_frame
Definition encoder.h:2310
bool refresh_frame_context
Definition encoder.h:2289
bool refresh_frame_context_pending
Definition encoder.h:2295
Frame level features.
Definition av1_common_int.h:365
bool allow_screen_content_tools
Definition av1_common_int.h:382
bool allow_intrabc
Definition av1_common_int.h:383
bool coded_lossless
Definition av1_common_int.h:392
bool error_resilient_mode
Definition av1_common_int.h:407
bool all_lossless
Definition av1_common_int.h:396
Encoder info used for decision on forcing integer motion vectors.
Definition encoder.h:1854
double cs_rate_array[32]
Definition encoder.h:1859
int rate_size
Definition encoder.h:1867
int rate_index
Definition encoder.h:1863
Encoder-side probabilities for pruning of various AV1 tools.
Definition encoder.h:1113
int switchable_interp_probs[FRAME_UPDATE_TYPES][((SWITCHABLE_FILTERS+1) *4)][SWITCHABLE_FILTERS]
Definition encoder.h:1143
int obmc_probs[FRAME_UPDATE_TYPES][BLOCK_SIZES_ALL]
Definition encoder.h:1119
int warped_probs[FRAME_UPDATE_TYPES]
Definition encoder.h:1126
int tx_type_probs[FRAME_UPDATE_TYPES][TX_SIZES_ALL][TX_TYPES]
Definition encoder.h:1134
Data related to the current GF/ARF group and the individual frames within the group.
Definition firstpass.h:339
Parameters related to global motion search.
Definition encoder.h:2063
FrameDistPair reference_frames[2][REF_FRAMES - 1]
Definition encoder.h:2089
bool search_done
Definition encoder.h:2067
int segment_map_h
Definition encoder.h:2096
int num_ref_frames[2]
Definition encoder.h:2081
YV12_BUFFER_CONFIG * ref_buf[REF_FRAMES]
Definition encoder.h:2074
int segment_map_w
Definition encoder.h:2095
Flags related to interpolation filter search.
Definition encoder.h:2103
int default_interp_skip_flags
Definition encoder.h:2108
uint16_t interp_filter_search_mask
Definition encoder.h:2112
Encoder flags for intra prediction.
Definition encoder.h:301
bool enable_diagonal_intra
Definition encoder.h:331
bool enable_smooth_intra
Definition encoder.h:314
bool auto_intra_tools_off
Definition encoder.h:350
bool enable_filter_intra
Definition encoder.h:310
bool enable_directional_intra
Definition encoder.h:326
bool enable_paeth_intra
Definition encoder.h:318
bool enable_intra_edge_filter
Definition encoder.h:305
bool enable_cfl_intra
Definition encoder.h:322
bool enable_angle_delta
Definition encoder.h:336
Encoder config related to the coding of key frames.
Definition encoder.h:465
int key_freq_max
Definition encoder.h:474
int sframe_mode
Definition encoder.h:492
bool auto_key
Definition encoder.h:497
bool enable_intrabc
Definition encoder.h:517
int sframe_dist
Definition encoder.h:485
bool enable_sframe
Definition encoder.h:512
int enable_keyframe_filtering
Definition encoder.h:479
int fwd_kf_dist
Definition encoder.h:502
int key_freq_min
Definition encoder.h:469
bool fwd_kf_enabled
Definition encoder.h:507
Buffer to store mode information at mi_alloc_bsize (4x4 or 8x8) level.
Definition encoder.h:1900
int alloc_size
Definition encoder.h:1909
int stride
Definition encoder.h:1913
MB_MODE_INFO_EXT_FRAME * frame_base
Definition encoder.h:1905
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:2118
int max_mv_magnitude
Definition encoder.h:2124
fractional_mv_step_fp * find_fractional_mv_step
Definition encoder.h:2138
int mv_step_param
Definition encoder.h:2129
search_site_config search_site_cfg[SS_CFG_TOTAL][NUM_DISTINCT_SEARCH_METHODS]
Definition encoder.h:2145
Encoder parameters related to multi-threading.
Definition encoder.h:1745
RestoreStateBuffers restore_state_buf
Definition encoder.h:1832
AV1CdefWorkerData * cdef_worker
Definition encoder.h:1827
AV1LrSync lr_row_sync
Definition encoder.h:1802
struct EncWorkerData * tile_thr_data
Definition encoder.h:1765
AV1TplRowMultiThreadInfo tpl_row_mt
Definition encoder.h:1792
AV1EncPackBSSync pack_bs_sync
Definition encoder.h:1807
AV1EncRowMultiThreadInfo enc_row_mt
Definition encoder.h:1781
AV1LfSync lf_row_sync
Definition encoder.h:1797
AV1CdefSync cdef_sync
Definition encoder.h:1822
int num_mod_workers[NUM_MT_MODULES]
Definition encoder.h:1754
AV1EncAllIntraMultiThreadInfo intra_mt
Definition encoder.h:1787
int num_workers
Definition encoder.h:1749
int pipeline_lpf_mt_with_enc
Definition encoder.h:1838
AVxWorker * workers
Definition encoder.h:1759
bool pack_bs_mt_enabled
Definition encoder.h:1776
bool row_mt_enabled
Definition encoder.h:1771
AV1TemporalFilterSync tf_sync
Definition encoder.h:1817
AV1GlobalMotionSync gm_sync
Definition encoder.h:1812
Primary Rate Control parameters and status.
Definition ratectrl.h:300
Encoder config for coding block partitioning.
Definition encoder.h:273
bool enable_rect_partitions
Definition encoder.h:277
bool enable_1to4_partitions
Definition encoder.h:285
BLOCK_SIZE max_partition_size
Definition encoder.h:295
bool enable_ab_partitions
Definition encoder.h:281
BLOCK_SIZE min_partition_size
Definition encoder.h:290
Primary Encoder parameters related to multi-threading.
Definition encoder.h:1698
struct EncWorkerData * tile_thr_data
Definition encoder.h:1718
AV1CdefWorkerData * cdef_worker
Definition encoder.h:1723
int num_workers
Definition encoder.h:1702
int prev_num_enc_workers
Definition encoder.h:1739
AVxWorker * workers
Definition encoder.h:1712
AVxWorker * p_workers[4]
Definition encoder.h:1729
int p_num_workers
Definition encoder.h:1734
int num_mod_workers[NUM_MT_MODULES]
Definition encoder.h:1707
Rate Control parameters and status.
Definition ratectrl.h:134
Encoder rate control configuration parameters.
Definition encoder.h:523
int worst_allowed_q
Definition encoder.h:593
int over_shoot_pct
Definition encoder.h:588
unsigned int max_intra_bitrate_pct
Definition encoder.h:558
int drop_frames_water_mark
Definition encoder.h:576
int max_consec_drop_ms
Definition encoder.h:631
int vbrmax_section
Definition encoder.h:624
int64_t maximum_buffer_size_ms
Definition encoder.h:542
unsigned int vbr_corpus_complexity_lap
Definition encoder.h:553
unsigned int min_cr
Definition encoder.h:572
int vbrbias
Definition encoder.h:614
unsigned int gf_cbr_boost_pct
Definition encoder.h:567
int vbrmin_section
Definition encoder.h:619
enum aom_rc_mode mode
Definition encoder.h:607
unsigned int max_inter_bitrate_pct
Definition encoder.h:563
int64_t starting_buffer_level_ms
Definition encoder.h:532
int best_allowed_q
Definition encoder.h:598
int under_shoot_pct
Definition encoder.h:582
int64_t target_bandwidth
Definition encoder.h:547
int64_t optimal_buffer_level_ms
Definition encoder.h:537
int cq_level
Definition encoder.h:602
Refrence frame distance related variables.
Definition encoder.h:2177
int8_t nearest_past_ref
Definition encoder.h:2185
int ref_relative_dist[INTER_REFS_PER_FRAME]
Definition encoder.h:2181
int8_t nearest_future_ref
Definition encoder.h:2189
Refresh frame flags for different type of frames.
Definition encoder.h:2156
bool bwd_ref_frame
Definition encoder.h:2158
bool golden_frame
Definition encoder.h:2157
bool alt_ref_frame
Definition encoder.h:2159
Encoder config related to resize.
Definition encoder.h:253
uint8_t resize_scale_denominator
Definition encoder.h:262
uint8_t resize_kf_scale_denominator
Definition encoder.h:267
RESIZE_MODE resize_mode
Definition encoder.h:257
Desired dimensions for an externally triggered resize.
Definition encoder.h:2169
int width
Definition encoder.h:2170
int height
Definition encoder.h:2171
Parameters related to restoration types.
Definition encoder.h:1659
RestorationType best_rtype[RESTORE_TYPES - 1]
Definition encoder.h:1674
WienerInfo wiener
Definition encoder.h:1663
SgrprojInfo sgrproj
Definition encoder.h:1668
Parameters related to Restoration Info.
Definition restoration.h:246
RestorationType frame_restoration_type
Definition restoration.h:250
Buffers to be backed up during parallel encode set to be restored later.
Definition encoder.h:1634
int32_t * rst_tmpbuf
Definition encoder.h:1648
RestorationLineBuffers * rlbs
Definition encoder.h:1653
uint16_t * cdef_colbuf[3]
Definition encoder.h:1643
uint16_t * cdef_srcbuf
Definition encoder.h:1638
Top level speed vs quality trade off data struture.
Definition speed_features.h:1939
MV_SPEED_FEATURES mv_sf
Definition speed_features.h:1968
LOOP_FILTER_SPEED_FEATURES lpf_sf
Definition speed_features.h:2003
TX_SPEED_FEATURES tx_sf
Definition speed_features.h:1988
REAL_TIME_SPEED_FEATURES rt_sf
Definition speed_features.h:2008
The stucture of SVC.
Definition svc_layercontext.h:89
Parameters related to Sgrproj Filter.
Definition blockd.h:507
Encoder config related to frame super-resolution.
Definition encoder.h:429
uint8_t superres_kf_scale_denominator
Definition encoder.h:451
aom_superres_mode superres_mode
Definition encoder.h:455
int superres_kf_qthresh
Definition encoder.h:439
bool enable_superres
Definition encoder.h:459
uint8_t superres_scale_denominator
Definition encoder.h:445
int superres_qthresh
Definition encoder.h:434
Temporal filter info for a gop.
Definition temporal_filter.h:161
Frame level Two pass status and control data.
Definition firstpass.h:458
Two pass status and control data.
Definition firstpass.h:416
Parameters related to temporal filtering.
Definition temporal_filter.h:98
Frame time stamps.
Definition encoder.h:2411
int64_t prev_ts_start
Definition encoder.h:2415
int64_t first_ts_start
Definition encoder.h:2423
int64_t prev_ts_end
Definition encoder.h:2419
Params related to temporal dependency model.
Definition tpl_model.h:165
Encoder flags for transform sizes and types.
Definition encoder.h:356
bool enable_tx64
Definition encoder.h:360
bool use_inter_dct_only
Definition encoder.h:383
bool enable_flip_idtx
Definition encoder.h:364
bool use_intra_default_tx_only
Definition encoder.h:388
bool use_intra_dct_only
Definition encoder.h:378
bool enable_rect_tx
Definition encoder.h:368
bool reduced_tx_type_set
Definition encoder.h:373
bool enable_tx_size_search
Definition encoder.h:392
Thresholds for variance based partitioning.
Definition encoder.h:1364
int64_t thresholds[5]
Definition encoder.h:1373
int64_t threshold_minmax
Definition encoder.h:1379
Parameters related to Wiener Filter.
Definition blockd.h:494
Parameters used for winner mode processing.
Definition encoder.h:2207
unsigned int use_transform_domain_distortion[MODE_EVAL_TYPES]
Definition encoder.h:2229
TX_SIZE_SEARCH_METHOD tx_size_search_methods[MODE_EVAL_TYPES]
Definition encoder.h:2221
unsigned int skip_txfm_level[MODE_EVAL_TYPES]
Definition encoder.h:2243
unsigned int coeff_opt_thresholds[MODE_EVAL_TYPES][2]
Definition encoder.h:2215
unsigned int tx_domain_dist_threshold[MODE_EVAL_TYPES]
Definition encoder.h:2236
unsigned int predict_dc_level[MODE_EVAL_TYPES]
Definition encoder.h:2250
Struct used to hold inter mode data for fast tx search.
Definition encoder.h:1269
RD_STATS rd_cost_arr[MAX_INTER_MODES]
Definition encoder.h:1298
int64_t est_rd_arr[MAX_INTER_MODES]
Definition encoder.h:1290
int64_t sse_arr[MAX_INTER_MODES]
Definition encoder.h:1286
RD_STATS rd_cost_y_arr[MAX_INTER_MODES]
Definition encoder.h:1302
RD_STATS rd_cost_uv_arr[MAX_INTER_MODES]
Definition encoder.h:1306
MB_MODE_INFO mbmi_arr[MAX_INTER_MODES]
Definition encoder.h:1278
RdIdxPair rd_idx_pair_arr[MAX_INTER_MODES]
Definition encoder.h:1294
int mode_rate_arr[MAX_INTER_MODES]
Definition encoder.h:1282
int num
Definition encoder.h:1274
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