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 
25 #include "av1/common/alloccommon.h"
26 #include "av1/common/av1_common_int.h"
27 #include "av1/common/blockd.h"
28 #include "av1/common/entropymode.h"
29 #include "av1/common/enums.h"
30 #include "av1/common/reconintra.h"
31 #include "av1/common/resize.h"
32 #include "av1/common/thread_common.h"
33 #include "av1/common/timing.h"
34 
35 #include "av1/encoder/aq_cyclicrefresh.h"
36 #include "av1/encoder/av1_quantize.h"
37 #include "av1/encoder/block.h"
38 #include "av1/encoder/context_tree.h"
39 #include "av1/encoder/encodemb.h"
40 #include "av1/encoder/external_partition.h"
41 #include "av1/encoder/firstpass.h"
42 #include "av1/encoder/global_motion.h"
43 #include "av1/encoder/level.h"
44 #include "av1/encoder/lookahead.h"
45 #include "av1/encoder/mcomp.h"
46 #include "av1/encoder/pickcdef.h"
47 #include "av1/encoder/ratectrl.h"
48 #include "av1/encoder/rd.h"
50 #include "av1/encoder/svc_layercontext.h"
51 #include "av1/encoder/temporal_filter.h"
52 #include "av1/encoder/thirdpass.h"
53 #include "av1/encoder/tokenize.h"
54 #include "av1/encoder/tpl_model.h"
55 #include "av1/encoder/av1_noise_estimate.h"
56 #include "av1/encoder/bitstream.h"
57 
58 #if CONFIG_INTERNAL_STATS
59 #include "aom_dsp/ssim.h"
60 #endif
61 #include "aom_dsp/variance.h"
62 #if CONFIG_DENOISE
63 #include "aom_dsp/noise_model.h"
64 #endif
65 #if CONFIG_TUNE_VMAF
66 #include "av1/encoder/tune_vmaf.h"
67 #endif
68 #if CONFIG_AV1_TEMPORAL_DENOISING
69 #include "av1/encoder/av1_temporal_denoiser.h"
70 #endif
71 #if CONFIG_TUNE_BUTTERAUGLI
72 #include "av1/encoder/tune_butteraugli.h"
73 #endif
74 
75 #include "aom/internal/aom_codec_internal.h"
76 #include "aom_util/aom_thread.h"
77 
78 #ifdef __cplusplus
79 extern "C" {
80 #endif
81 
82 // TODO(yunqing, any): Added suppression tag to quiet Doxygen warnings. Need to
83 // adjust it while we work on documentation.
85 // Number of frames required to test for scene cut detection
86 #define SCENE_CUT_KEY_TEST_INTERVAL 16
87 
88 // Lookahead index threshold to enable temporal filtering for second arf.
89 #define TF_LOOKAHEAD_IDX_THR 7
90 
91 #define HDR_QP_LEVELS 10
92 #define CHROMA_CB_QP_SCALE 1.04
93 #define CHROMA_CR_QP_SCALE 1.04
94 #define CHROMA_QP_SCALE -0.46
95 #define CHROMA_QP_OFFSET 9.26
96 #define QP_SCALE_FACTOR 2.0
97 #define DISABLE_HDR_LUMA_DELTAQ 1
98 
99 // Rational number with an int64 numerator
100 // This structure holds a fractional value
101 typedef struct aom_rational64 {
102  int64_t num; // fraction numerator
103  int den; // fraction denominator
104 } aom_rational64_t; // alias for struct aom_rational
105 
106 enum {
107  NORMAL = 0,
108  FOURFIVE = 1,
109  THREEFIVE = 2,
110  THREEFOUR = 3,
111  ONEFOUR = 4,
112  ONEEIGHT = 5,
113  ONETWO = 6
114 } UENUM1BYTE(AOM_SCALING);
115 
116 enum {
117  // Good Quality Fast Encoding. The encoder balances quality with the amount of
118  // time it takes to encode the output. Speed setting controls how fast.
119  GOOD,
120  // Realtime Fast Encoding. Will force some restrictions on bitrate
121  // constraints.
122  REALTIME,
123  // All intra mode. All the frames are coded as intra frames.
124  ALLINTRA
125 } UENUM1BYTE(MODE);
126 
127 enum {
128  FRAMEFLAGS_KEY = 1 << 0,
129  FRAMEFLAGS_GOLDEN = 1 << 1,
130  FRAMEFLAGS_BWDREF = 1 << 2,
131  // TODO(zoeliu): To determine whether a frame flag is needed for ALTREF2_FRAME
132  FRAMEFLAGS_ALTREF = 1 << 3,
133  FRAMEFLAGS_INTRAONLY = 1 << 4,
134  FRAMEFLAGS_SWITCH = 1 << 5,
135  FRAMEFLAGS_ERROR_RESILIENT = 1 << 6,
136 } UENUM1BYTE(FRAMETYPE_FLAGS);
137 
138 #if CONFIG_FPMT_TEST
139 enum {
140  PARALLEL_ENCODE = 0,
141  PARALLEL_SIMULATION_ENCODE,
142  NUM_FPMT_TEST_ENCODES
143 } UENUM1BYTE(FPMT_TEST_ENC_CFG);
144 #endif // CONFIG_FPMT_TEST
145 // 0 level frames are sometimes used for rate control purposes, but for
146 // reference mapping purposes, the minimum level should be 1.
147 #define MIN_PYR_LEVEL 1
148 static INLINE int get_true_pyr_level(int frame_level, int frame_order,
149  int max_layer_depth) {
150  if (frame_order == 0) {
151  // Keyframe case
152  return MIN_PYR_LEVEL;
153  } else if (frame_level == MAX_ARF_LAYERS) {
154  // Leaves
155  return max_layer_depth;
156  } else if (frame_level == (MAX_ARF_LAYERS + 1)) {
157  // Altrefs
158  return MIN_PYR_LEVEL;
159  }
160  return AOMMAX(MIN_PYR_LEVEL, frame_level);
161 }
162 
163 enum {
164  NO_AQ = 0,
165  VARIANCE_AQ = 1,
166  COMPLEXITY_AQ = 2,
167  CYCLIC_REFRESH_AQ = 3,
168  AQ_MODE_COUNT // This should always be the last member of the enum
169 } UENUM1BYTE(AQ_MODE);
170 enum {
171  NO_DELTA_Q = 0,
172  DELTA_Q_OBJECTIVE = 1, // Modulation to improve objective quality
173  DELTA_Q_PERCEPTUAL = 2, // Modulation to improve video perceptual quality
174  DELTA_Q_PERCEPTUAL_AI = 3, // Perceptual quality opt for all intra mode
175  DELTA_Q_USER_RATING_BASED = 4, // User rating based delta q mode
176  DELTA_Q_HDR = 5, // QP adjustment based on HDR block pixel average
177  DELTA_Q_MODE_COUNT // This should always be the last member of the enum
178 } UENUM1BYTE(DELTAQ_MODE);
179 
180 enum {
181  RESIZE_NONE = 0, // No frame resizing allowed.
182  RESIZE_FIXED = 1, // All frames are coded at the specified scale.
183  RESIZE_RANDOM = 2, // All frames are coded at a random scale.
184  RESIZE_DYNAMIC = 3, // Frames coded at lower scale based on rate control.
185  RESIZE_MODES
186 } UENUM1BYTE(RESIZE_MODE);
187 
188 enum {
189  SS_CFG_SRC = 0,
190  SS_CFG_LOOKAHEAD = 1,
191  SS_CFG_FPF = 2,
192  SS_CFG_TOTAL = 3
193 } UENUM1BYTE(SS_CFG_OFFSET);
194 
195 enum {
196  DISABLE_SCENECUT, // For LAP, lag_in_frames < 19
197  ENABLE_SCENECUT_MODE_1, // For LAP, lag_in_frames >=19 and < 33
198  ENABLE_SCENECUT_MODE_2 // For twopass and LAP - lag_in_frames >=33
199 } UENUM1BYTE(SCENECUT_MODE);
200 
201 #define MAX_VBR_CORPUS_COMPLEXITY 10000
202 
205 typedef enum {
206  MOD_FP, // First pass
207  MOD_TF, // Temporal filtering
208  MOD_TPL, // TPL
209  MOD_GME, // Global motion estimation
210  MOD_ENC, // Encode stage
211  MOD_LPF, // Deblocking loop filter
212  MOD_CDEF_SEARCH, // CDEF search
213  MOD_CDEF, // CDEF frame
214  MOD_LR, // Loop restoration filtering
215  MOD_PACK_BS, // Pack bitstream
216  MOD_FRAME_ENC, // Frame Parallel encode
217  NUM_MT_MODULES
218 } MULTI_THREADED_MODULES;
219 
228 typedef enum {
235 
239 typedef enum {
244  3,
246 
250 typedef struct {
254  RESIZE_MODE resize_mode;
265 } ResizeCfg;
266 
270 typedef struct {
287  BLOCK_SIZE min_partition_size;
292  BLOCK_SIZE max_partition_size;
293 } PartitionCfg;
294 
298 typedef struct {
348 } IntraModeCfg;
349 
353 typedef struct {
391 
395 typedef struct {
422 
426 typedef struct {
457 } SuperResCfg;
458 
462 typedef struct {
467 
472 
477 
483 
490 
494  bool auto_key;
495 
500 
505 
510 
515 } KeyFrameCfg;
516 
520 typedef struct {
522  // BUFFERING PARAMETERS
540 
545 
555  unsigned int max_intra_bitrate_pct;
560  unsigned int max_inter_bitrate_pct;
564  unsigned int gf_cbr_boost_pct;
569  unsigned int min_cr;
599  int cq_level;
604  enum aom_rc_mode mode;
611  int vbrbias;
623 
625 typedef struct {
626  // Indicates the number of frames lag before encoding is started.
627  int lag_in_frames;
628  // Indicates the minimum gf/arf interval to be used.
629  int min_gf_interval;
630  // Indicates the maximum gf/arf interval to be used.
631  int max_gf_interval;
632  // Indicates the minimum height for GF group pyramid structure to be used.
633  int gf_min_pyr_height;
634  // Indicates the maximum height for GF group pyramid structure to be used.
635  int gf_max_pyr_height;
636  // Indicates if automatic set and use of altref frames should be enabled.
637  bool enable_auto_arf;
638  // Indicates if automatic set and use of (b)ackward (r)ef (f)rames should be
639  // enabled.
640  bool enable_auto_brf;
641 } GFConfig;
642 
643 typedef struct {
644  // Indicates the number of tile groups.
645  unsigned int num_tile_groups;
646  // Indicates the MTU size for a tile group. If mtu is non-zero,
647  // num_tile_groups is set to DEFAULT_MAX_NUM_TG.
648  unsigned int mtu;
649  // Indicates the number of tile columns in log2.
650  int tile_columns;
651  // Indicates the number of tile rows in log2.
652  int tile_rows;
653  // Indicates the number of widths in the tile_widths[] array.
654  int tile_width_count;
655  // Indicates the number of heights in the tile_heights[] array.
656  int tile_height_count;
657  // Indicates the tile widths, and may be empty.
658  int tile_widths[MAX_TILE_COLS];
659  // Indicates the tile heights, and may be empty.
660  int tile_heights[MAX_TILE_ROWS];
661  // Indicates if large scale tile coding should be used.
662  bool enable_large_scale_tile;
663  // Indicates if single tile decoding mode should be enabled.
664  bool enable_single_tile_decoding;
665  // Indicates if EXT_TILE_DEBUG should be enabled.
666  bool enable_ext_tile_debug;
667 } TileConfig;
668 
669 typedef struct {
670  // Indicates the width of the input frame.
671  int width;
672  // Indicates the height of the input frame.
673  int height;
674  // If forced_max_frame_width is non-zero then it is used to force the maximum
675  // frame width written in write_sequence_header().
676  int forced_max_frame_width;
677  // If forced_max_frame_width is non-zero then it is used to force the maximum
678  // frame height written in write_sequence_header().
679  int forced_max_frame_height;
680  // Indicates the frame width after applying both super-resolution and resize
681  // to the coded frame.
682  int render_width;
683  // Indicates the frame height after applying both super-resolution and resize
684  // to the coded frame.
685  int render_height;
686 } FrameDimensionCfg;
687 
688 typedef struct {
689  // Indicates if warped motion should be enabled.
690  bool enable_warped_motion;
691  // Indicates if warped motion should be evaluated or not.
692  bool allow_warped_motion;
693  // Indicates if OBMC motion should be enabled.
694  bool enable_obmc;
695 } MotionModeCfg;
696 
697 typedef struct {
698  // Timing info for each frame.
699  aom_timing_info_t timing_info;
700  // Indicates the number of time units of a decoding clock.
701  uint32_t num_units_in_decoding_tick;
702  // Indicates if decoder model information is present in the coded sequence
703  // header.
704  bool decoder_model_info_present_flag;
705  // Indicates if display model information is present in the coded sequence
706  // header.
707  bool display_model_info_present_flag;
708  // Indicates if timing info for each frame is present.
709  bool timing_info_present;
710 } DecoderModelCfg;
711 
712 typedef struct {
713  // Indicates the update frequency for coeff costs.
714  COST_UPDATE_TYPE coeff;
715  // Indicates the update frequency for mode costs.
716  COST_UPDATE_TYPE mode;
717  // Indicates the update frequency for mv costs.
718  COST_UPDATE_TYPE mv;
719  // Indicates the update frequency for dv costs.
720  COST_UPDATE_TYPE dv;
721 } CostUpdateFreq;
722 
723 typedef struct {
724  // Indicates the maximum number of reference frames allowed per frame.
725  unsigned int max_reference_frames;
726  // Indicates if the reduced set of references should be enabled.
727  bool enable_reduced_reference_set;
728  // Indicates if one-sided compound should be enabled.
729  bool enable_onesided_comp;
730 } RefFrameCfg;
731 
732 typedef struct {
733  // Indicates the color space that should be used.
734  aom_color_primaries_t color_primaries;
735  // Indicates the characteristics of transfer function to be used.
736  aom_transfer_characteristics_t transfer_characteristics;
737  // Indicates the matrix coefficients to be used for the transfer function.
738  aom_matrix_coefficients_t matrix_coefficients;
739  // Indicates the chroma 4:2:0 sample position info.
740  aom_chroma_sample_position_t chroma_sample_position;
741  // Indicates if a limited color range or full color range should be used.
742  aom_color_range_t color_range;
743 } ColorCfg;
744 
745 typedef struct {
746  // Indicates if extreme motion vector unit test should be enabled or not.
747  unsigned int motion_vector_unit_test;
748  // Indicates if superblock multipass unit test should be enabled or not.
749  unsigned int sb_multipass_unit_test;
750 } UnitTestCfg;
751 
752 typedef struct {
753  // Indicates the file path to the VMAF model.
754  const char *vmaf_model_path;
755  // Indicates the path to the film grain parameters.
756  const char *film_grain_table_filename;
757  // Indicates the visual tuning metric.
758  aom_tune_metric tuning;
759  // Indicates if the current content is screen or default type.
760  aom_tune_content content;
761  // Indicates the film grain parameters.
762  int film_grain_test_vector;
763  // Indicates the in-block distortion metric to use.
764  aom_dist_metric dist_metric;
765 } TuneCfg;
766 
767 typedef struct {
768  // Indicates the framerate of the input video.
769  double init_framerate;
770  // Indicates the bit-depth of the input video.
771  unsigned int input_bit_depth;
772  // Indicates the maximum number of frames to be encoded.
773  unsigned int limit;
774  // Indicates the chrome subsampling x value.
775  unsigned int chroma_subsampling_x;
776  // Indicates the chrome subsampling y value.
777  unsigned int chroma_subsampling_y;
778 } InputCfg;
779 
780 typedef struct {
781  // If true, encoder will use fixed QP offsets, that are either:
782  // - Given by the user, and stored in 'fixed_qp_offsets' array, OR
783  // - Picked automatically from cq_level.
784  int use_fixed_qp_offsets;
785  // Indicates the minimum flatness of the quantization matrix.
786  int qm_minlevel;
787  // Indicates the maximum flatness of the quantization matrix.
788  int qm_maxlevel;
789  // Indicates if adaptive quantize_b should be enabled.
790  int quant_b_adapt;
791  // Indicates the Adaptive Quantization mode to be used.
792  AQ_MODE aq_mode;
793  // Indicates the delta q mode to be used.
794  DELTAQ_MODE deltaq_mode;
795  // Indicates the delta q mode strength.
796  DELTAQ_MODE deltaq_strength;
797  // Indicates if delta quantization should be enabled in chroma planes.
798  bool enable_chroma_deltaq;
799  // Indicates if delta quantization should be enabled for hdr video
800  bool enable_hdr_deltaq;
801  // Indicates if encoding with quantization matrices should be enabled.
802  bool using_qm;
803 } QuantizationCfg;
804 
809 typedef struct {
817 
826 
831 
836 
844 
849 
855 
864 } AlgoCfg;
867 typedef struct {
868  // Indicates the codec bit-depth.
869  aom_bit_depth_t bit_depth;
870  // Indicates the superblock size that should be used by the encoder.
871  aom_superblock_size_t superblock_size;
872  // Indicates if loopfilter modulation should be enabled.
873  bool enable_deltalf_mode;
874  // Indicates how CDEF should be applied.
875  CDEF_CONTROL cdef_control;
876  // Indicates if loop restoration filter should be enabled.
877  bool enable_restoration;
878  // When enabled, video mode should be used even for single frame input.
879  bool force_video_mode;
880  // Indicates if the error resiliency features should be enabled.
881  bool error_resilient_mode;
882  // Indicates if frame parallel decoding feature should be enabled.
883  bool frame_parallel_decoding_mode;
884  // Indicates if the input should be encoded as monochrome.
885  bool enable_monochrome;
886  // When enabled, the encoder will use a full header even for still pictures.
887  // When disabled, a reduced header is used for still pictures.
888  bool full_still_picture_hdr;
889  // Indicates if dual interpolation filters should be enabled.
890  bool enable_dual_filter;
891  // Indicates if frame order hint should be enabled or not.
892  bool enable_order_hint;
893  // Indicates if ref_frame_mvs should be enabled at the sequence level.
894  bool ref_frame_mvs_present;
895  // Indicates if ref_frame_mvs should be enabled at the frame level.
896  bool enable_ref_frame_mvs;
897  // Indicates if interintra compound mode is enabled.
898  bool enable_interintra_comp;
899  // Indicates if global motion should be enabled.
900  bool enable_global_motion;
901  // Indicates if palette should be enabled.
902  bool enable_palette;
903 } ToolCfg;
904 
909 typedef struct AV1EncoderConfig {
911  // Configuration related to the input video.
912  InputCfg input_cfg;
913 
914  // Configuration related to frame-dimensions.
915  FrameDimensionCfg frm_dim_cfg;
916 
922 
927 
934  // Configuration related to Quantization.
935  QuantizationCfg q_cfg;
936 
937  // Internal frame size scaling.
938  ResizeCfg resize_cfg;
939 
940  // Frame Super-Resolution size scaling.
941  SuperResCfg superres_cfg;
942 
951  // Configuration related to encoder toolsets.
952  ToolCfg tool_cfg;
953 
954  // Configuration related to Group of frames.
955  GFConfig gf_cfg;
956 
957  // Tile related configuration parameters.
958  TileConfig tile_cfg;
959 
960  // Configuration related to Tune.
961  TuneCfg tune_cfg;
962 
963  // Configuration related to color.
964  ColorCfg color_cfg;
965 
966  // Configuration related to decoder model.
967  DecoderModelCfg dec_model_cfg;
968 
969  // Configuration related to reference frames.
970  RefFrameCfg ref_frm_cfg;
971 
972  // Configuration related to unit tests.
973  UnitTestCfg unit_test_cfg;
974 
975  // Flags related to motion mode.
976  MotionModeCfg motion_mode_cfg;
977 
978  // Flags related to intra mode search.
979  IntraModeCfg intra_mode_cfg;
980 
981  // Flags related to transform size/type.
982  TxfmSizeTypeCfg txfm_cfg;
983 
984  // Flags related to compound type.
985  CompoundTypeCfg comp_type_cfg;
986 
987  // Partition related information.
988  PartitionCfg part_cfg;
989 
990  // Configuration related to frequency of cost update.
991  CostUpdateFreq cost_upd_freq;
992 
993 #if CONFIG_DENOISE
994  // Indicates the noise level.
995  float noise_level;
996  // Indicates the the denoisers block size.
997  int noise_block_size;
998  // Indicates whether to apply denoising to the frame to be encoded
999  int enable_dnl_denoising;
1000 #endif
1001 
1002 #if CONFIG_AV1_TEMPORAL_DENOISING
1003  // Noise sensitivity.
1004  int noise_sensitivity;
1005 #endif
1006  // Bit mask to specify which tier each of the 32 possible operating points
1007  // conforms to.
1008  unsigned int tier_mask;
1009 
1010  // Indicates the number of pixels off the edge of a reference frame we're
1011  // allowed to go when forming an inter prediction.
1012  int border_in_pixels;
1013 
1014  // Indicates the maximum number of threads that may be used by the encoder.
1015  int max_threads;
1016 
1017  // Indicates the speed preset to be used.
1018  int speed;
1019 
1020  // Indicates the target sequence level index for each operating point(OP).
1021  AV1_LEVEL target_seq_level_idx[MAX_NUM_OPERATING_POINTS];
1022 
1023  // Indicates the bitstream profile to be used.
1024  BITSTREAM_PROFILE profile;
1025 
1034  enum aom_enc_pass pass;
1037  // Total number of encoding passes.
1038  int passes;
1039 
1040  // the name of the second pass output file when passes > 2
1041  const char *two_pass_output;
1042 
1043  // the name of the second pass log file when passes > 2
1044  const char *second_pass_log;
1045 
1046  // Indicates if the encoding is GOOD or REALTIME.
1047  MODE mode;
1048 
1049  // Indicates if row-based multi-threading should be enabled or not.
1050  bool row_mt;
1051 
1052  // Indicates if frame parallel multi-threading should be enabled or not.
1053  bool fp_mt;
1054 
1055  // Indicates if 16bit frame buffers are to be used i.e., the content is >
1056  // 8-bit.
1057  bool use_highbitdepth;
1058 
1059  // Indicates the bitstream syntax mode. 0 indicates bitstream is saved as
1060  // Section 5 bitstream, while 1 indicates the bitstream is saved in Annex - B
1061  // format.
1062  bool save_as_annexb;
1063 
1064  // The path for partition stats reading and writing, used in the experiment
1065  // CONFIG_PARTITION_SEARCH_ORDER.
1066  const char *partition_info_path;
1067 
1068  // Exit the encoder when it fails to encode to a given level.
1069  int strict_level_conformance;
1072 
1074 static INLINE int is_lossless_requested(const RateControlCfg *const rc_cfg) {
1075  return rc_cfg->best_allowed_q == 0 && rc_cfg->worst_allowed_q == 0;
1076 }
1082 typedef struct {
1088  int obmc_probs[FRAME_UPDATE_TYPES][BLOCK_SIZES_ALL];
1089 
1095  int warped_probs[FRAME_UPDATE_TYPES];
1096 
1103  int tx_type_probs[FRAME_UPDATE_TYPES][TX_SIZES_ALL][TX_TYPES];
1104 
1111  int switchable_interp_probs[FRAME_UPDATE_TYPES][SWITCHABLE_FILTER_CONTEXTS]
1112  [SWITCHABLE_FILTERS];
1113 } FrameProbInfo;
1114 
1117 typedef struct FRAME_COUNTS {
1118 // Note: This structure should only contain 'unsigned int' fields, or
1119 // aggregates built solely from 'unsigned int' fields/elements
1120 #if CONFIG_ENTROPY_STATS
1121  unsigned int kf_y_mode[KF_MODE_CONTEXTS][KF_MODE_CONTEXTS][INTRA_MODES];
1122  unsigned int angle_delta[DIRECTIONAL_MODES][2 * MAX_ANGLE_DELTA + 1];
1123  unsigned int y_mode[BLOCK_SIZE_GROUPS][INTRA_MODES];
1124  unsigned int uv_mode[CFL_ALLOWED_TYPES][INTRA_MODES][UV_INTRA_MODES];
1125  unsigned int cfl_sign[CFL_JOINT_SIGNS];
1126  unsigned int cfl_alpha[CFL_ALPHA_CONTEXTS][CFL_ALPHABET_SIZE];
1127  unsigned int palette_y_mode[PALATTE_BSIZE_CTXS][PALETTE_Y_MODE_CONTEXTS][2];
1128  unsigned int palette_uv_mode[PALETTE_UV_MODE_CONTEXTS][2];
1129  unsigned int palette_y_size[PALATTE_BSIZE_CTXS][PALETTE_SIZES];
1130  unsigned int palette_uv_size[PALATTE_BSIZE_CTXS][PALETTE_SIZES];
1131  unsigned int palette_y_color_index[PALETTE_SIZES]
1132  [PALETTE_COLOR_INDEX_CONTEXTS]
1133  [PALETTE_COLORS];
1134  unsigned int palette_uv_color_index[PALETTE_SIZES]
1135  [PALETTE_COLOR_INDEX_CONTEXTS]
1136  [PALETTE_COLORS];
1137  unsigned int partition[PARTITION_CONTEXTS][EXT_PARTITION_TYPES];
1138  unsigned int txb_skip[TOKEN_CDF_Q_CTXS][TX_SIZES][TXB_SKIP_CONTEXTS][2];
1139  unsigned int eob_extra[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1140  [EOB_COEF_CONTEXTS][2];
1141  unsigned int dc_sign[PLANE_TYPES][DC_SIGN_CONTEXTS][2];
1142  unsigned int coeff_lps[TX_SIZES][PLANE_TYPES][BR_CDF_SIZE - 1][LEVEL_CONTEXTS]
1143  [2];
1144  unsigned int eob_flag[TX_SIZES][PLANE_TYPES][EOB_COEF_CONTEXTS][2];
1145  unsigned int eob_multi16[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][5];
1146  unsigned int eob_multi32[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][6];
1147  unsigned int eob_multi64[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][7];
1148  unsigned int eob_multi128[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][8];
1149  unsigned int eob_multi256[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][9];
1150  unsigned int eob_multi512[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][10];
1151  unsigned int eob_multi1024[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][11];
1152  unsigned int coeff_lps_multi[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1153  [LEVEL_CONTEXTS][BR_CDF_SIZE];
1154  unsigned int coeff_base_multi[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1155  [SIG_COEF_CONTEXTS][NUM_BASE_LEVELS + 2];
1156  unsigned int coeff_base_eob_multi[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1157  [SIG_COEF_CONTEXTS_EOB][NUM_BASE_LEVELS + 1];
1158  unsigned int newmv_mode[NEWMV_MODE_CONTEXTS][2];
1159  unsigned int zeromv_mode[GLOBALMV_MODE_CONTEXTS][2];
1160  unsigned int refmv_mode[REFMV_MODE_CONTEXTS][2];
1161  unsigned int drl_mode[DRL_MODE_CONTEXTS][2];
1162  unsigned int inter_compound_mode[INTER_MODE_CONTEXTS][INTER_COMPOUND_MODES];
1163  unsigned int wedge_idx[BLOCK_SIZES_ALL][16];
1164  unsigned int interintra[BLOCK_SIZE_GROUPS][2];
1165  unsigned int interintra_mode[BLOCK_SIZE_GROUPS][INTERINTRA_MODES];
1166  unsigned int wedge_interintra[BLOCK_SIZES_ALL][2];
1167  unsigned int compound_type[BLOCK_SIZES_ALL][MASKED_COMPOUND_TYPES];
1168  unsigned int motion_mode[BLOCK_SIZES_ALL][MOTION_MODES];
1169  unsigned int obmc[BLOCK_SIZES_ALL][2];
1170  unsigned int intra_inter[INTRA_INTER_CONTEXTS][2];
1171  unsigned int comp_inter[COMP_INTER_CONTEXTS][2];
1172  unsigned int comp_ref_type[COMP_REF_TYPE_CONTEXTS][2];
1173  unsigned int uni_comp_ref[UNI_COMP_REF_CONTEXTS][UNIDIR_COMP_REFS - 1][2];
1174  unsigned int single_ref[REF_CONTEXTS][SINGLE_REFS - 1][2];
1175  unsigned int comp_ref[REF_CONTEXTS][FWD_REFS - 1][2];
1176  unsigned int comp_bwdref[REF_CONTEXTS][BWD_REFS - 1][2];
1177  unsigned int intrabc[2];
1178 
1179  unsigned int txfm_partition[TXFM_PARTITION_CONTEXTS][2];
1180  unsigned int intra_tx_size[MAX_TX_CATS][TX_SIZE_CONTEXTS][MAX_TX_DEPTH + 1];
1181  unsigned int skip_mode[SKIP_MODE_CONTEXTS][2];
1182  unsigned int skip_txfm[SKIP_CONTEXTS][2];
1183  unsigned int compound_index[COMP_INDEX_CONTEXTS][2];
1184  unsigned int comp_group_idx[COMP_GROUP_IDX_CONTEXTS][2];
1185  unsigned int delta_q[DELTA_Q_PROBS][2];
1186  unsigned int delta_lf_multi[FRAME_LF_COUNT][DELTA_LF_PROBS][2];
1187  unsigned int delta_lf[DELTA_LF_PROBS][2];
1188 
1189  unsigned int inter_ext_tx[EXT_TX_SETS_INTER][EXT_TX_SIZES][TX_TYPES];
1190  unsigned int intra_ext_tx[EXT_TX_SETS_INTRA][EXT_TX_SIZES][INTRA_MODES]
1191  [TX_TYPES];
1192  unsigned int filter_intra_mode[FILTER_INTRA_MODES];
1193  unsigned int filter_intra[BLOCK_SIZES_ALL][2];
1194  unsigned int switchable_restore[RESTORE_SWITCHABLE_TYPES];
1195  unsigned int wiener_restore[2];
1196  unsigned int sgrproj_restore[2];
1197 #endif // CONFIG_ENTROPY_STATS
1198 
1199  unsigned int switchable_interp[SWITCHABLE_FILTER_CONTEXTS]
1200  [SWITCHABLE_FILTERS];
1201 } FRAME_COUNTS;
1202 
1203 #define INTER_MODE_RD_DATA_OVERALL_SIZE 6400
1204 
1205 typedef struct {
1206  int ready;
1207  double a;
1208  double b;
1209  double dist_mean;
1210  double ld_mean;
1211  double sse_mean;
1212  double sse_sse_mean;
1213  double sse_ld_mean;
1214  int num;
1215  double dist_sum;
1216  double ld_sum;
1217  double sse_sum;
1218  double sse_sse_sum;
1219  double sse_ld_sum;
1220 } InterModeRdModel;
1221 
1222 typedef struct {
1223  int idx;
1224  int64_t rd;
1225 } RdIdxPair;
1226 // TODO(angiebird): This is an estimated size. We still need to figure what is
1227 // the maximum number of modes.
1228 #define MAX_INTER_MODES 1024
1229 // TODO(any): rename this struct to something else. There is already another
1230 // struct called inter_mode_info, which makes this terribly confusing.
1238 typedef struct inter_modes_info {
1243  int num;
1247  MB_MODE_INFO mbmi_arr[MAX_INTER_MODES];
1251  int mode_rate_arr[MAX_INTER_MODES];
1255  int64_t sse_arr[MAX_INTER_MODES];
1259  int64_t est_rd_arr[MAX_INTER_MODES];
1263  RdIdxPair rd_idx_pair_arr[MAX_INTER_MODES];
1267  RD_STATS rd_cost_arr[MAX_INTER_MODES];
1271  RD_STATS rd_cost_y_arr[MAX_INTER_MODES];
1275  RD_STATS rd_cost_uv_arr[MAX_INTER_MODES];
1277 
1279 typedef struct {
1280  // TODO(kyslov): consider changing to 64bit
1281 
1282  // This struct is used for computing variance in choose_partitioning(), where
1283  // the max number of samples within a superblock is 32x32 (with 4x4 avg).
1284  // With 8bit bitdepth, uint32_t is enough for sum_square_error (2^8 * 2^8 * 32
1285  // * 32 = 2^26). For high bitdepth we need to consider changing this to 64 bit
1286  uint32_t sum_square_error;
1287  int32_t sum_error;
1288  int log2_count;
1289  int variance;
1290 } VPartVar;
1291 
1292 typedef struct {
1293  VPartVar none;
1294  VPartVar horz[2];
1295  VPartVar vert[2];
1296 } VPVariance;
1297 
1298 typedef struct {
1299  VPVariance part_variances;
1300  VPartVar split[4];
1301 } VP4x4;
1302 
1303 typedef struct {
1304  VPVariance part_variances;
1305  VP4x4 split[4];
1306 } VP8x8;
1307 
1308 typedef struct {
1309  VPVariance part_variances;
1310  VP8x8 split[4];
1311 } VP16x16;
1312 
1313 typedef struct {
1314  VPVariance part_variances;
1315  VP16x16 split[4];
1316 } VP32x32;
1317 
1318 typedef struct {
1319  VPVariance part_variances;
1320  VP32x32 split[4];
1321 } VP64x64;
1322 
1323 typedef struct {
1324  VPVariance part_variances;
1325  VP64x64 *split;
1326 } VP128x128;
1327 
1333 typedef struct {
1342  int64_t thresholds[5];
1343 
1350 
1354 typedef struct {
1355 #if CONFIG_MULTITHREAD
1360  pthread_mutex_t *mutex_;
1361  pthread_cond_t *cond_;
1363 #endif // CONFIG_MULTITHREAD
1369  int *num_finished_cols;
1387  int rows;
1397 
1400 // TODO(jingning) All spatially adaptive variables should go to TileDataEnc.
1401 typedef struct TileDataEnc {
1402  TileInfo tile_info;
1403  DECLARE_ALIGNED(16, FRAME_CONTEXT, tctx);
1404  FRAME_CONTEXT *row_ctx;
1405  uint64_t abs_sum_level;
1406  uint8_t allow_update_cdf;
1407  InterModeRdModel inter_mode_rd_models[BLOCK_SIZES_ALL];
1408  AV1EncRowMultiThreadSync row_mt_sync;
1409  MV firstpass_top_mv;
1410 } TileDataEnc;
1411 
1412 typedef struct RD_COUNTS {
1413  int compound_ref_used_flag;
1414  int skip_mode_used_flag;
1415  int tx_type_used[TX_SIZES_ALL][TX_TYPES];
1416  int obmc_used[BLOCK_SIZES_ALL][2];
1417  int warped_used[2];
1418  int newmv_or_intra_blocks;
1419  uint64_t seg_tmp_pred_cost[2];
1420 } RD_COUNTS;
1421 
1422 typedef struct ThreadData {
1423  MACROBLOCK mb;
1424  RD_COUNTS rd_counts;
1425  FRAME_COUNTS *counts;
1426  PC_TREE_SHARED_BUFFERS shared_coeff_buf;
1427  SIMPLE_MOTION_DATA_TREE *sms_tree;
1428  SIMPLE_MOTION_DATA_TREE *sms_root;
1429  uint32_t *hash_value_buffer[2][2];
1430  OBMCBuffer obmc_buffer;
1431  PALETTE_BUFFER *palette_buffer;
1432  CompoundTypeRdBuffers comp_rd_buffer;
1433  CONV_BUF_TYPE *tmp_conv_dst;
1434  uint64_t abs_sum_level;
1435  uint8_t *tmp_pred_bufs[2];
1436  int intrabc_used;
1437  int deltaq_used;
1438  int coefficient_size;
1439  int max_mv_magnitude;
1440  int interp_filter_selected[SWITCHABLE];
1441  FRAME_CONTEXT *tctx;
1442  VP64x64 *vt64x64;
1443  int32_t num_64x64_blocks;
1444  PICK_MODE_CONTEXT *firstpass_ctx;
1445  TemporalFilterData tf_data;
1446  TplTxfmStats tpl_txfm_stats;
1447  // Pointer to the array of structures to store gradient information of each
1448  // pixel in a superblock. The buffer constitutes of MAX_SB_SQUARE pixel level
1449  // structures for each of the plane types (PLANE_TYPE_Y and PLANE_TYPE_UV).
1450  PixelLevelGradientInfo *pixel_gradient_info;
1451  // Pointer to the array of structures to store source variance information of
1452  // each 4x4 sub-block in a superblock. Block4x4VarInfo structure is used to
1453  // store source variance and log of source variance of each 4x4 sub-block
1454  // for subsequent retrieval.
1455  Block4x4VarInfo *src_var_info_of_4x4_sub_blocks;
1456  // The pc tree root for RTC non-rd case.
1457  PC_TREE *rt_pc_root;
1458 } ThreadData;
1459 
1460 struct EncWorkerData;
1461 
1467 typedef struct {
1490 
1494  int thread_id_to_tile_id[MAX_NUM_THREADS];
1495 
1496 #if CONFIG_MULTITHREAD
1500  pthread_mutex_t *mutex_;
1501 #endif
1502 
1510  void (*sync_read_ptr)(AV1EncRowMultiThreadSync *const, int, int);
1514  void (*sync_write_ptr)(AV1EncRowMultiThreadSync *const, int, int, int);
1517 
1521 #define NUM_RECODES_PER_FRAME 10
1522 
1526 #define MAX_PARALLEL_FRAMES 4
1527 
1532 typedef struct RestoreStateBuffers {
1536  uint16_t *cdef_srcbuf;
1537 
1541  uint16_t *cdef_colbuf[MAX_MB_PLANE];
1542 
1546  int32_t *rst_tmpbuf;
1547 
1551  RestorationLineBuffers *rlbs;
1553 
1557 typedef struct PrimaryMultiThreadInfo {
1562 
1566  int num_mod_workers[NUM_MT_MODULES];
1567 
1571  AVxWorker *workers;
1572 
1577  struct EncWorkerData *tile_thr_data;
1578 
1582  AV1CdefWorkerData *cdef_worker;
1583 
1589 
1595 
1599 typedef struct MultiThreadInfo {
1604 
1608  int num_mod_workers[NUM_MT_MODULES];
1609 
1613  AVxWorker *workers;
1614 
1619  struct EncWorkerData *tile_thr_data;
1620 
1626 
1631 
1636 
1640  AV1TplRowMultiThreadInfo tpl_row_mt;
1641 
1645  AV1LfSync lf_row_sync;
1646 
1650  AV1LrSync lr_row_sync;
1651 
1655  AV1EncPackBSSync pack_bs_sync;
1656 
1660  AV1GlobalMotionSync gm_sync;
1661 
1665  AV1TemporalFilterSync tf_sync;
1666 
1670  AV1CdefSync cdef_sync;
1671 
1675  AV1CdefWorkerData *cdef_worker;
1676 
1682 
1685 typedef struct ActiveMap {
1686  int enabled;
1687  int update;
1688  unsigned char *map;
1689 } ActiveMap;
1690 
1696 typedef struct {
1701  double cs_rate_array[32];
1711 
1714 #if CONFIG_INTERNAL_STATS
1715 // types of stats
1716 enum {
1717  STAT_Y,
1718  STAT_U,
1719  STAT_V,
1720  STAT_ALL,
1721  NUM_STAT_TYPES // This should always be the last member of the enum
1722 } UENUM1BYTE(StatType);
1723 
1724 typedef struct IMAGE_STAT {
1725  double stat[NUM_STAT_TYPES];
1726  double worst;
1727 } ImageStat;
1728 #endif // CONFIG_INTERNAL_STATS
1729 
1730 typedef struct {
1731  int ref_count;
1732  YV12_BUFFER_CONFIG buf;
1733 } EncRefCntBuffer;
1734 
1742 typedef struct {
1755  int stride;
1757 
1760 #if CONFIG_COLLECT_PARTITION_STATS
1761 typedef struct FramePartitionTimingStats {
1762  int partition_decisions[6][EXT_PARTITION_TYPES];
1763  int partition_attempts[6][EXT_PARTITION_TYPES];
1764  int64_t partition_times[6][EXT_PARTITION_TYPES];
1765 
1766  int partition_redo;
1767 } FramePartitionTimingStats;
1768 #endif // CONFIG_COLLECT_PARTITION_STATS
1769 
1770 #if CONFIG_COLLECT_COMPONENT_TIMING
1771 #include "aom_ports/aom_timer.h"
1772 // Adjust the following to add new components.
1773 enum {
1774  av1_encode_strategy_time,
1775  av1_get_one_pass_rt_params_time,
1776  av1_get_second_pass_params_time,
1777  denoise_and_encode_time,
1778  apply_filtering_time,
1779  av1_tpl_setup_stats_time,
1780  encode_frame_to_data_rate_time,
1781  encode_with_or_without_recode_time,
1782  loop_filter_time,
1783  cdef_time,
1784  loop_restoration_time,
1785  av1_pack_bitstream_final_time,
1786  av1_encode_frame_time,
1787  av1_compute_global_motion_time,
1788  av1_setup_motion_field_time,
1789  encode_sb_row_time,
1790 
1791  rd_pick_partition_time,
1792  rd_use_partition_time,
1793  choose_var_based_partitioning_time,
1794  av1_prune_partitions_time,
1795  none_partition_search_time,
1796  split_partition_search_time,
1797  rectangular_partition_search_time,
1798  ab_partitions_search_time,
1799  rd_pick_4partition_time,
1800  encode_sb_time,
1801 
1802  rd_pick_sb_modes_time,
1803  av1_rd_pick_intra_mode_sb_time,
1804  av1_rd_pick_inter_mode_sb_time,
1805  set_params_rd_pick_inter_mode_time,
1806  skip_inter_mode_time,
1807  handle_inter_mode_time,
1808  evaluate_motion_mode_for_winner_candidates_time,
1809  do_tx_search_time,
1810  handle_intra_mode_time,
1811  refine_winner_mode_tx_time,
1812  av1_search_palette_mode_time,
1813  handle_newmv_time,
1814  compound_type_rd_time,
1815  interpolation_filter_search_time,
1816  motion_mode_rd_time,
1817 
1818  nonrd_use_partition_time,
1819  pick_sb_modes_nonrd_time,
1820  hybrid_intra_mode_search_time,
1821  nonrd_pick_inter_mode_sb_time,
1822  encode_b_nonrd_time,
1823 
1824  kTimingComponents,
1825 } UENUM1BYTE(TIMING_COMPONENT);
1826 
1827 static INLINE char const *get_component_name(int index) {
1828  switch (index) {
1829  case av1_encode_strategy_time: return "av1_encode_strategy_time";
1830  case av1_get_one_pass_rt_params_time:
1831  return "av1_get_one_pass_rt_params_time";
1832  case av1_get_second_pass_params_time:
1833  return "av1_get_second_pass_params_time";
1834  case denoise_and_encode_time: return "denoise_and_encode_time";
1835  case apply_filtering_time: return "apply_filtering_time";
1836  case av1_tpl_setup_stats_time: return "av1_tpl_setup_stats_time";
1837  case encode_frame_to_data_rate_time:
1838  return "encode_frame_to_data_rate_time";
1839  case encode_with_or_without_recode_time:
1840  return "encode_with_or_without_recode_time";
1841  case loop_filter_time: return "loop_filter_time";
1842  case cdef_time: return "cdef_time";
1843  case loop_restoration_time: return "loop_restoration_time";
1844  case av1_pack_bitstream_final_time: return "av1_pack_bitstream_final_time";
1845  case av1_encode_frame_time: return "av1_encode_frame_time";
1846  case av1_compute_global_motion_time:
1847  return "av1_compute_global_motion_time";
1848  case av1_setup_motion_field_time: return "av1_setup_motion_field_time";
1849  case encode_sb_row_time: return "encode_sb_row_time";
1850 
1851  case rd_pick_partition_time: return "rd_pick_partition_time";
1852  case rd_use_partition_time: return "rd_use_partition_time";
1853  case choose_var_based_partitioning_time:
1854  return "choose_var_based_partitioning_time";
1855  case av1_prune_partitions_time: return "av1_prune_partitions_time";
1856  case none_partition_search_time: return "none_partition_search_time";
1857  case split_partition_search_time: return "split_partition_search_time";
1858  case rectangular_partition_search_time:
1859  return "rectangular_partition_search_time";
1860  case ab_partitions_search_time: return "ab_partitions_search_time";
1861  case rd_pick_4partition_time: return "rd_pick_4partition_time";
1862  case encode_sb_time: return "encode_sb_time";
1863 
1864  case rd_pick_sb_modes_time: return "rd_pick_sb_modes_time";
1865  case av1_rd_pick_intra_mode_sb_time:
1866  return "av1_rd_pick_intra_mode_sb_time";
1867  case av1_rd_pick_inter_mode_sb_time:
1868  return "av1_rd_pick_inter_mode_sb_time";
1869  case set_params_rd_pick_inter_mode_time:
1870  return "set_params_rd_pick_inter_mode_time";
1871  case skip_inter_mode_time: return "skip_inter_mode_time";
1872  case handle_inter_mode_time: return "handle_inter_mode_time";
1873  case evaluate_motion_mode_for_winner_candidates_time:
1874  return "evaluate_motion_mode_for_winner_candidates_time";
1875  case do_tx_search_time: return "do_tx_search_time";
1876  case handle_intra_mode_time: return "handle_intra_mode_time";
1877  case refine_winner_mode_tx_time: return "refine_winner_mode_tx_time";
1878  case av1_search_palette_mode_time: return "av1_search_palette_mode_time";
1879  case handle_newmv_time: return "handle_newmv_time";
1880  case compound_type_rd_time: return "compound_type_rd_time";
1881  case interpolation_filter_search_time:
1882  return "interpolation_filter_search_time";
1883  case motion_mode_rd_time: return "motion_mode_rd_time";
1884 
1885  case nonrd_use_partition_time: return "nonrd_use_partition_time";
1886  case pick_sb_modes_nonrd_time: return "pick_sb_modes_nonrd_time";
1887  case hybrid_intra_mode_search_time: return "hybrid_intra_mode_search_time";
1888  case nonrd_pick_inter_mode_sb_time: return "nonrd_pick_inter_mode_sb_time";
1889  case encode_b_nonrd_time: return "encode_b_nonrd_time";
1890 
1891  default: assert(0);
1892  }
1893  return "error";
1894 }
1895 #endif
1896 
1897 // The maximum number of internal ARFs except ALTREF_FRAME
1898 #define MAX_INTERNAL_ARFS (REF_FRAMES - BWDREF_FRAME - 1)
1899 
1905 typedef struct {
1910 
1916  YV12_BUFFER_CONFIG *ref_buf[REF_FRAMES];
1917 
1921  unsigned char *src_buffer;
1922 
1928  int num_ref_frames[MAX_DIRECTIONS];
1929 
1936  FrameDistPair reference_frames[MAX_DIRECTIONS][REF_FRAMES - 1];
1937 
1950 
1956  int src_corners[2 * MAX_CORNERS];
1958 
1968 typedef struct {
1969  int width;
1970  int height;
1972 
1976 typedef struct {
1987 
1991 typedef struct {
2011  fractional_mv_step_fp *find_fractional_mv_step;
2018  search_site_config search_site_cfg[SS_CFG_TOTAL][NUM_DISTINCT_SEARCH_METHODS];
2020 
2029 typedef struct {
2034 
2042 typedef struct {
2043  int width;
2044  int height;
2046 
2050 typedef struct {
2054  int ref_relative_dist[INTER_REFS_PER_FRAME];
2064 
2080 typedef struct {
2088  unsigned int coeff_opt_thresholds[MODE_EVAL_TYPES][2];
2089 
2094  TX_SIZE_SEARCH_METHOD tx_size_search_methods[MODE_EVAL_TYPES];
2095 
2102  unsigned int use_transform_domain_distortion[MODE_EVAL_TYPES];
2103 
2109  unsigned int tx_domain_dist_threshold[MODE_EVAL_TYPES];
2110 
2116  unsigned int skip_txfm_level[MODE_EVAL_TYPES];
2117 
2123  unsigned int predict_dc_level[MODE_EVAL_TYPES];
2125 
2133 typedef struct {
2134  bool last_frame;
2144 
2148 typedef struct {
2153 
2158 
2163 
2169 
2174 
2179 
2184 
2190 } ExternalFlags;
2191 
2194 typedef struct {
2195  // Some misc info
2196  int high_prec;
2197  int q;
2198  int order;
2199 
2200  // MV counters
2201  int inter_count;
2202  int intra_count;
2203  int default_mvs;
2204  int mv_joint_count[4];
2205  int last_bit_zero;
2206  int last_bit_nonzero;
2207 
2208  // Keep track of the rates
2209  int total_mv_rate;
2210  int hp_total_mv_rate;
2211  int lp_total_mv_rate;
2212 
2213  // Texture info
2214  int horz_text;
2215  int vert_text;
2216  int diag_text;
2217 
2218  // Whether the current struct contains valid data
2219  int valid;
2220 } MV_STATS;
2221 
2222 typedef struct WeberStats {
2223  int64_t mb_wiener_variance;
2224  int64_t src_variance;
2225  int64_t rec_variance;
2226  int16_t src_pix_max;
2227  int16_t rec_pix_max;
2228  int64_t distortion;
2229  int64_t satd;
2230  double max_scale;
2231 } WeberStats;
2232 
2233 typedef struct {
2234  struct loopfilter lf;
2235  CdefInfo cdef_info;
2236  YV12_BUFFER_CONFIG copy_buffer;
2237  RATE_CONTROL rc;
2238  MV_STATS mv_stats;
2239 } CODING_CONTEXT;
2240 
2241 typedef struct {
2242  int frame_width;
2243  int frame_height;
2244  int mi_rows;
2245  int mi_cols;
2246  int mb_rows;
2247  int mb_cols;
2248  int num_mbs;
2249  aom_bit_depth_t bit_depth;
2250  int subsampling_x;
2251  int subsampling_y;
2252 } FRAME_INFO;
2253 
2257 typedef struct {
2258  int show_frame_count;
2259 } FRAME_INDEX_SET;
2260 
2266 typedef struct {
2272  uint8_t *map;
2280 
2284 typedef struct {
2288  int64_t prev_ts_start;
2292  int64_t prev_ts_end;
2297 } TimeStamps;
2298 
2303 typedef struct {
2307  tran_low_t *tcoeff;
2311  uint16_t *eobs;
2315  uint8_t *entropy_ctx;
2316 } CoeffBufferPool;
2317 
2318 #if !CONFIG_REALTIME_ONLY
2320 // DUCKY_ENCODE_FRAME_MODE is c version of EncodeFrameMode
2321 enum {
2322  DUCKY_ENCODE_FRAME_MODE_NONE, // Let native AV1 determine q index and rdmult
2323  DUCKY_ENCODE_FRAME_MODE_QINDEX, // DuckyEncode determines q index and AV1
2324  // determines rdmult
2325  DUCKY_ENCODE_FRAME_MODE_QINDEX_RDMULT, // DuckyEncode determines q index and
2326  // rdmult
2327 } UENUM1BYTE(DUCKY_ENCODE_FRAME_MODE);
2328 
2329 enum {
2330  DUCKY_ENCODE_GOP_MODE_NONE, // native AV1 decides GOP
2331  DUCKY_ENCODE_GOP_MODE_RCL, // rate control lib decides GOP
2332 } UENUM1BYTE(DUCKY_ENCODE_GOP_MODE);
2333 
2334 typedef struct DuckyEncodeFrameInfo {
2335  DUCKY_ENCODE_FRAME_MODE qp_mode;
2336  DUCKY_ENCODE_GOP_MODE gop_mode;
2337  int q_index;
2338  int rdmult;
2339 } DuckyEncodeFrameInfo;
2340 
2341 typedef struct DuckyEncodeFrameResult {
2342  int global_order_idx;
2343  int q_index;
2344  int rdmult;
2345  int rate;
2346  int64_t dist;
2347  double psnr;
2348 } DuckyEncodeFrameResult;
2349 
2350 typedef struct DuckyEncodeInfo {
2351  DuckyEncodeFrameInfo frame_info;
2352  DuckyEncodeFrameResult frame_result;
2353 } DuckyEncodeInfo;
2355 #endif
2356 
2360 typedef struct AV1_COMP_DATA {
2364  unsigned char *cx_data;
2365 
2369  size_t cx_data_sz;
2370 
2374  size_t frame_size;
2375 
2379  unsigned int lib_flags;
2380 
2385 
2389  int64_t ts_frame_end;
2390 
2394  int flush;
2395 
2399  const aom_rational64_t *timestamp_ratio;
2400 
2405 
2411 
2415 typedef struct AV1_PRIMARY {
2420 
2426 #if CONFIG_FPMT_TEST
2432  FPMT_TEST_ENC_CFG fpmt_unit_test_cfg;
2433 
2437  FrameProbInfo temp_frame_probs;
2438 
2444  FrameProbInfo temp_frame_probs_simulation;
2445 
2450  int temp_valid_gm_model_found[FRAME_UPDATE_TYPES];
2451 #endif // CONFIG_FPMT_TEST
2457  RefCntBuffer *ref_frame_map_copy[REF_FRAMES];
2458 
2463 
2468 
2473 
2478 
2483 
2488 
2493  struct AV1_COMP *cpi;
2494 
2499 
2503  struct lookahead_ctx *lookahead;
2504 
2511 
2516  struct aom_codec_pkt_list *output_pkt_list;
2517 
2522 
2527 
2532 
2536  GF_STATE gf_state;
2537 
2542 
2546  AV1LevelParams level_params;
2547 
2552 
2557 
2562 
2567 
2576  SequenceHeader seq_params;
2577 
2581  int use_svc;
2582 
2587 
2592 
2597 
2601  struct aom_internal_error_info error;
2602 
2608  aom_variance_fn_ptr_t fn_ptr[BLOCK_SIZES_ALL];
2609 
2615 
2620 
2624  MV_STATS mv_stats;
2625 
2626 #if CONFIG_INTERNAL_STATS
2628  uint64_t total_time_receive_data;
2629  uint64_t total_time_compress_data;
2630 
2631  unsigned int total_mode_chosen_counts[MAX_MODES];
2632 
2633  int count[2];
2634  uint64_t total_sq_error[2];
2635  uint64_t total_samples[2];
2636  ImageStat psnr[2];
2637 
2638  double total_blockiness;
2639  double worst_blockiness;
2640 
2641  int total_bytes;
2642  double summed_quality;
2643  double summed_weights;
2644  double summed_quality_hbd;
2645  double summed_weights_hbd;
2646  unsigned int total_recode_hits;
2647  double worst_ssim;
2648  double worst_ssim_hbd;
2649 
2650  ImageStat fastssim;
2651  ImageStat psnrhvs;
2652 
2653  int b_calculate_blockiness;
2654  int b_calculate_consistency;
2655 
2656  double total_inconsistency;
2657  double worst_consistency;
2658  Ssimv *ssim_vars;
2659  Metrics metrics;
2661 #endif
2662 
2663 #if CONFIG_ENTROPY_STATS
2667  FRAME_COUNTS aggregate_fc;
2668 #endif // CONFIG_ENTROPY_STATS
2669 
2676  int fb_of_context_type[REF_FRAMES];
2677 
2682 
2687 
2694  int valid_gm_model_found[FRAME_UPDATE_TYPES];
2696 
2700 typedef struct AV1_COMP {
2705 
2710  EncQuantDequantParams enc_quant_dequant_params;
2711 
2715  ThreadData td;
2716 
2720  FRAME_COUNTS counts;
2721 
2726 
2733 
2739 
2744 
2749 
2754  TRELLIS_OPT_TYPE optimize_seg_arr[MAX_SEGMENTS];
2755 
2762 
2771 
2777 
2782 
2787 
2792 
2798 
2804 
2809 
2819 
2824 
2829 
2834  RefCntBuffer *scaled_ref_buf[INTER_REFS_PER_FRAME];
2835 
2839  RefCntBuffer *last_show_frame_buf;
2840 
2845 
2850 
2855 
2861 
2867 
2871  int64_t ambient_err;
2872 
2876  RD_OPT rd;
2877 
2882  CODING_CONTEXT coding_context;
2883 
2888 
2893 
2898 
2903 
2907  double framerate;
2908 
2913 
2917  int speed;
2918 
2923 
2928 
2934 
2939 
2948  ActiveMap active_map;
2949 
2953  unsigned char gf_frame_index;
2954 
2955 #if CONFIG_INTERNAL_STATS
2957  uint64_t time_compress_data;
2958 
2959  unsigned int mode_chosen_counts[MAX_MODES];
2960  int bytes;
2961  unsigned int frame_recode_hits;
2963 #endif
2964 
2965 #if CONFIG_SPEED_STATS
2969  unsigned int tx_search_count;
2970 #endif // CONFIG_SPEED_STATS
2971 
2977 
2981  FRAME_INFO frame_info;
2982 
2986  FRAME_INDEX_SET frame_index_set;
2987 
2992 
3000 
3005 
3010  TileDataEnc *tile_data;
3015 
3019  TokenInfo token_info;
3020 
3025 
3030 
3035 
3040 
3045 
3050 
3055 
3060 
3061 #if CONFIG_FPMT_TEST
3066  double temp_framerate;
3067 #endif
3074 
3079 
3084 
3091 
3096 
3101 
3105  AV1LrStruct lr_ctxt;
3106 
3110  aom_film_grain_table_t *film_grain_table;
3111 
3112 #if CONFIG_DENOISE
3117  struct aom_denoise_and_model_t *denoise_and_model;
3118 #endif
3119 
3124 
3133 
3141 
3142 #if CONFIG_COLLECT_PARTITION_STATS
3146  FramePartitionTimingStats partition_stats;
3147 #endif // CONFIG_COLLECT_PARTITION_STATS
3148 
3149 #if CONFIG_COLLECT_COMPONENT_TIMING
3153  uint64_t component_time[kTimingComponents];
3158  struct aom_usec_timer component_timer[kTimingComponents];
3162  uint64_t frame_component_time[kTimingComponents];
3163 #endif
3164 
3169 
3174 
3179 
3186 
3187 #if CONFIG_TUNE_VMAF
3191  TuneVMAFInfo vmaf_info;
3192 #endif
3193 
3194 #if CONFIG_TUNE_BUTTERAUGLI
3198  TuneButteraugliInfo butteraugli_info;
3199 #endif
3200 
3205 
3209  COMPRESSOR_STAGE compressor_stage;
3210 
3215  FRAME_TYPE last_frame_type;
3216 
3220  int num_tg;
3221 
3228 
3232  FirstPassData firstpass_data;
3233 
3237  NOISE_ESTIMATE noise_estimate;
3238 
3239 #if CONFIG_AV1_TEMPORAL_DENOISING
3243  AV1_DENOISER denoiser;
3244 #endif
3245 
3250  uint8_t *consec_zero_mv;
3251 
3255  BLOCK_SIZE fp_block_size;
3256 
3262 
3267 
3272  ExtPartController ext_part_controller;
3273 
3278  MV_STATS mv_stats;
3283 
3289 
3296 #if CONFIG_FPMT_TEST
3303  int wanted_fb;
3304 #endif // CONFIG_FPMT_TEST
3305 
3312 
3313 #if CONFIG_RD_COMMAND
3317  RD_COMMAND rd_command;
3318 #endif // CONFIG_RD_COMMAND
3319 
3323  WeberStats *mb_weber_stats;
3324 
3328  BLOCK_SIZE weber_bsize;
3329 
3334 
3339 
3344 
3345 #if CONFIG_BITRATE_ACCURACY
3349  VBR_RATECTRL_INFO vbr_rc_info;
3350 #endif
3351 
3352 #if CONFIG_RATECTRL_LOG
3356  RATECTRL_LOG rc_log;
3357 #endif // CONFIG_RATECTRL_LOG
3358 
3363 
3367  THIRD_PASS_DEC_CTX *third_pass_ctx;
3368 
3373 
3378 
3384 
3385 #if !CONFIG_REALTIME_ONLY
3389  DuckyEncodeInfo ducky_encode_info;
3390 #endif // CONFIG_REALTIME_ONLY
3391  //
3397 
3401 typedef struct EncodeFrameInput {
3403  YV12_BUFFER_CONFIG *source;
3404  YV12_BUFFER_CONFIG *last_source;
3405  int64_t ts_duration;
3408 
3413 typedef struct EncodeFrameParams {
3421  FRAME_TYPE frame_type;
3422 
3424  int primary_ref_frame;
3425  int order_offset;
3426 
3432 
3434  int refresh_frame_flags;
3435 
3436  int show_existing_frame;
3437  int existing_fb_idx_to_show;
3438 
3444 
3448  int remapped_ref_idx[REF_FRAMES];
3449 
3455 
3459  int speed;
3461 
3464 // EncodeFrameResults contains information about the result of encoding a
3465 // single frame
3466 typedef struct {
3467  size_t size; // Size of resulting bitstream
3468 } EncodeFrameResults;
3469 
3470 void av1_initialize_enc(unsigned int usage, enum aom_rc_mode end_usage);
3471 
3472 struct AV1_COMP *av1_create_compressor(AV1_PRIMARY *ppi,
3473  const AV1EncoderConfig *oxcf,
3474  BufferPool *const pool,
3475  COMPRESSOR_STAGE stage,
3476  int lap_lag_in_frames);
3477 
3478 struct AV1_PRIMARY *av1_create_primary_compressor(
3479  struct aom_codec_pkt_list *pkt_list_head, int num_lap_buffers,
3480  const AV1EncoderConfig *oxcf);
3481 
3482 void av1_remove_compressor(AV1_COMP *cpi);
3483 
3484 void av1_remove_primary_compressor(AV1_PRIMARY *ppi);
3485 
3486 #if CONFIG_ENTROPY_STATS
3487 void print_entropy_stats(AV1_PRIMARY *const ppi);
3488 #endif
3489 #if CONFIG_INTERNAL_STATS
3490 void print_internal_stats(AV1_PRIMARY *ppi);
3491 #endif
3492 
3493 void av1_change_config_seq(AV1_PRIMARY *ppi, const AV1EncoderConfig *oxcf,
3494  bool *sb_size_changed);
3495 
3496 void av1_change_config(AV1_COMP *cpi, const AV1EncoderConfig *oxcf,
3497  bool sb_size_changed);
3498 
3499 void av1_check_initial_width(AV1_COMP *cpi, int use_highbitdepth,
3500  int subsampling_x, int subsampling_y);
3501 
3502 void av1_init_seq_coding_tools(AV1_PRIMARY *const ppi,
3503  const AV1EncoderConfig *oxcf, int use_svc);
3504 
3505 void av1_post_encode_updates(AV1_COMP *const cpi,
3506  const AV1_COMP_DATA *const cpi_data);
3507 
3508 void av1_scale_references_fpmt(AV1_COMP *cpi, int *ref_buffers_used_map);
3509 
3510 void av1_increment_scaled_ref_counts_fpmt(BufferPool *buffer_pool,
3511  int ref_buffers_used_map);
3512 
3513 void av1_release_scaled_references_fpmt(AV1_COMP *cpi);
3514 
3515 void av1_decrement_ref_counts_fpmt(BufferPool *buffer_pool,
3516  int ref_buffers_used_map);
3517 
3518 void av1_init_sc_decisions(AV1_PRIMARY *const ppi);
3519 
3520 AV1_COMP *av1_get_parallel_frame_enc_data(AV1_PRIMARY *const ppi,
3521  AV1_COMP_DATA *const first_cpi_data);
3522 
3523 int av1_init_parallel_frame_context(const AV1_COMP_DATA *const first_cpi_data,
3524  AV1_PRIMARY *const ppi,
3525  int *ref_buffers_used_map);
3545  YV12_BUFFER_CONFIG *sd, int64_t time_stamp,
3546  int64_t end_time_stamp);
3547 
3567 int av1_get_compressed_data(AV1_COMP *cpi, AV1_COMP_DATA *const cpi_data);
3568 
3575 int av1_encode(AV1_COMP *const cpi, uint8_t *const dest,
3576  const EncodeFrameInput *const frame_input,
3577  const EncodeFrameParams *const frame_params,
3578  EncodeFrameResults *const frame_results);
3579 
3581 int av1_get_preview_raw_frame(AV1_COMP *cpi, YV12_BUFFER_CONFIG *dest);
3582 
3583 int av1_get_last_show_frame(AV1_COMP *cpi, YV12_BUFFER_CONFIG *frame);
3584 
3585 aom_codec_err_t av1_copy_new_frame_enc(AV1_COMMON *cm,
3586  YV12_BUFFER_CONFIG *new_frame,
3587  YV12_BUFFER_CONFIG *sd);
3588 
3589 int av1_use_as_reference(int *ext_ref_frame_flags, int ref_frame_flags);
3590 
3591 int av1_copy_reference_enc(AV1_COMP *cpi, int idx, YV12_BUFFER_CONFIG *sd);
3592 
3593 int av1_set_reference_enc(AV1_COMP *cpi, int idx, YV12_BUFFER_CONFIG *sd);
3594 
3595 int av1_set_size_literal(AV1_COMP *cpi, int width, int height);
3596 
3597 void av1_set_frame_size(AV1_COMP *cpi, int width, int height);
3598 
3599 void av1_set_mv_search_params(AV1_COMP *cpi);
3600 
3601 int av1_set_active_map(AV1_COMP *cpi, unsigned char *map, int rows, int cols);
3602 
3603 int av1_get_active_map(AV1_COMP *cpi, unsigned char *map, int rows, int cols);
3604 
3605 int av1_set_internal_size(AV1EncoderConfig *const oxcf,
3606  ResizePendingParams *resize_pending_params,
3607  AOM_SCALING horiz_mode, AOM_SCALING vert_mode);
3608 
3609 int av1_get_quantizer(struct AV1_COMP *cpi);
3610 
3611 int av1_convert_sect5obus_to_annexb(uint8_t *buffer, size_t *input_size);
3612 
3613 // Set screen content options.
3614 // This function estimates whether to use screen content tools, by counting
3615 // the portion of blocks that have few luma colors.
3616 // Modifies:
3617 // cpi->commom.features.allow_screen_content_tools
3618 // cpi->common.features.allow_intrabc
3619 // cpi->use_screen_content_tools
3620 // cpi->is_screen_content_type
3621 // However, the estimation is not accurate and may misclassify videos.
3622 // A slower but more accurate approach that determines whether to use screen
3623 // content tools is employed later. See av1_determine_sc_tools_with_encoding().
3624 void av1_set_screen_content_options(struct AV1_COMP *cpi,
3625  FeatureFlags *features);
3626 
3627 void av1_update_frame_size(AV1_COMP *cpi);
3628 
3629 typedef struct {
3630  int pyr_level;
3631  int disp_order;
3632 } RefFrameMapPair;
3633 
3634 static INLINE void init_ref_map_pair(
3635  AV1_COMP *cpi, RefFrameMapPair ref_frame_map_pairs[REF_FRAMES]) {
3636  if (cpi->ppi->gf_group.update_type[cpi->gf_frame_index] == KF_UPDATE) {
3637  memset(ref_frame_map_pairs, -1, sizeof(*ref_frame_map_pairs) * REF_FRAMES);
3638  return;
3639  }
3640  memset(ref_frame_map_pairs, 0, sizeof(*ref_frame_map_pairs) * REF_FRAMES);
3641  for (int map_idx = 0; map_idx < REF_FRAMES; map_idx++) {
3642  // Get reference frame buffer.
3643  const RefCntBuffer *const buf = cpi->common.ref_frame_map[map_idx];
3644  if (ref_frame_map_pairs[map_idx].disp_order == -1) continue;
3645  if (buf == NULL) {
3646  ref_frame_map_pairs[map_idx].disp_order = -1;
3647  ref_frame_map_pairs[map_idx].pyr_level = -1;
3648  continue;
3649  } else if (buf->ref_count > 1) {
3650  // Once the keyframe is coded, the slots in ref_frame_map will all
3651  // point to the same frame. In that case, all subsequent pointers
3652  // matching the current are considered "free" slots. This will find
3653  // the next occurrence of the current pointer if ref_count indicates
3654  // there are multiple instances of it and mark it as free.
3655  for (int idx2 = map_idx + 1; idx2 < REF_FRAMES; ++idx2) {
3656  const RefCntBuffer *const buf2 = cpi->common.ref_frame_map[idx2];
3657  if (buf2 == buf) {
3658  ref_frame_map_pairs[idx2].disp_order = -1;
3659  ref_frame_map_pairs[idx2].pyr_level = -1;
3660  }
3661  }
3662  }
3663  ref_frame_map_pairs[map_idx].disp_order = (int)buf->display_order_hint;
3664  ref_frame_map_pairs[map_idx].pyr_level = buf->pyramid_level;
3665  }
3666 }
3667 
3668 #if CONFIG_FPMT_TEST
3669 static AOM_INLINE void calc_frame_data_update_flag(
3670  GF_GROUP *const gf_group, int gf_frame_index,
3671  bool *const do_frame_data_update) {
3672  *do_frame_data_update = true;
3673  // Set the flag to false for all frames in a given parallel encode set except
3674  // the last frame in the set with frame_parallel_level = 2.
3675  if (gf_group->frame_parallel_level[gf_frame_index] == 1) {
3676  *do_frame_data_update = false;
3677  } else if (gf_group->frame_parallel_level[gf_frame_index] == 2) {
3678  // Check if this is the last frame in the set with frame_parallel_level = 2.
3679  for (int i = gf_frame_index + 1; i < gf_group->size; i++) {
3680  if ((gf_group->frame_parallel_level[i] == 0 &&
3681  (gf_group->update_type[i] == ARF_UPDATE ||
3682  gf_group->update_type[i] == INTNL_ARF_UPDATE)) ||
3683  gf_group->frame_parallel_level[i] == 1) {
3684  break;
3685  } else if (gf_group->frame_parallel_level[i] == 2) {
3686  *do_frame_data_update = false;
3687  break;
3688  }
3689  }
3690  }
3691 }
3692 #endif
3693 
3694 // av1 uses 10,000,000 ticks/second as time stamp
3695 #define TICKS_PER_SEC 10000000LL
3696 
3697 static INLINE int64_t
3698 timebase_units_to_ticks(const aom_rational64_t *timestamp_ratio, int64_t n) {
3699  return n * timestamp_ratio->num / timestamp_ratio->den;
3700 }
3701 
3702 static INLINE int64_t
3703 ticks_to_timebase_units(const aom_rational64_t *timestamp_ratio, int64_t n) {
3704  int64_t round = timestamp_ratio->num / 2;
3705  if (round > 0) --round;
3706  return (n * timestamp_ratio->den + round) / timestamp_ratio->num;
3707 }
3708 
3709 static INLINE int frame_is_kf_gf_arf(const AV1_COMP *cpi) {
3710  const GF_GROUP *const gf_group = &cpi->ppi->gf_group;
3711  const FRAME_UPDATE_TYPE update_type =
3712  gf_group->update_type[cpi->gf_frame_index];
3713 
3714  return frame_is_intra_only(&cpi->common) || update_type == ARF_UPDATE ||
3715  update_type == GF_UPDATE;
3716 }
3717 
3718 // TODO(huisu@google.com, youzhou@microsoft.com): enable hash-me for HBD.
3719 static INLINE int av1_use_hash_me(const AV1_COMP *const cpi) {
3721  cpi->common.features.allow_intrabc &&
3722  frame_is_intra_only(&cpi->common));
3723 }
3724 
3725 static INLINE const YV12_BUFFER_CONFIG *get_ref_frame_yv12_buf(
3726  const AV1_COMMON *const cm, MV_REFERENCE_FRAME ref_frame) {
3727  const RefCntBuffer *const buf = get_ref_frame_buf(cm, ref_frame);
3728  return buf != NULL ? &buf->buf : NULL;
3729 }
3730 
3731 static INLINE void alloc_frame_mvs(AV1_COMMON *const cm, RefCntBuffer *buf) {
3732  assert(buf != NULL);
3733  ensure_mv_buffer(buf, cm);
3734  buf->width = cm->width;
3735  buf->height = cm->height;
3736 }
3737 
3738 // Get the allocated token size for a tile. It does the same calculation as in
3739 // the frame token allocation.
3740 static INLINE unsigned int allocated_tokens(const TileInfo *tile,
3741  int sb_size_log2, int num_planes) {
3742  int tile_mb_rows = (tile->mi_row_end - tile->mi_row_start + 2) >> 2;
3743  int tile_mb_cols = (tile->mi_col_end - tile->mi_col_start + 2) >> 2;
3744 
3745  return get_token_alloc(tile_mb_rows, tile_mb_cols, sb_size_log2, num_planes);
3746 }
3747 
3748 static INLINE void get_start_tok(AV1_COMP *cpi, int tile_row, int tile_col,
3749  int mi_row, TokenExtra **tok, int sb_size_log2,
3750  int num_planes) {
3751  AV1_COMMON *const cm = &cpi->common;
3752  const int tile_cols = cm->tiles.cols;
3753  TileDataEnc *this_tile = &cpi->tile_data[tile_row * tile_cols + tile_col];
3754  const TileInfo *const tile_info = &this_tile->tile_info;
3755 
3756  const int tile_mb_cols =
3757  (tile_info->mi_col_end - tile_info->mi_col_start + 2) >> 2;
3758  const int tile_mb_row = (mi_row - tile_info->mi_row_start + 2) >> 2;
3759 
3760  *tok = cpi->token_info.tile_tok[tile_row][tile_col] +
3761  get_token_alloc(tile_mb_row, tile_mb_cols, sb_size_log2, num_planes);
3762 }
3763 
3764 void av1_apply_encoding_flags(AV1_COMP *cpi, aom_enc_frame_flags_t flags);
3765 
3766 #define ALT_MIN_LAG 3
3767 static INLINE int is_altref_enabled(int lag_in_frames, bool enable_auto_arf) {
3768  return lag_in_frames >= ALT_MIN_LAG && enable_auto_arf;
3769 }
3770 
3771 static AOM_INLINE int can_disable_altref(const GFConfig *gf_cfg) {
3772  return is_altref_enabled(gf_cfg->lag_in_frames, gf_cfg->enable_auto_arf) &&
3773  (gf_cfg->gf_min_pyr_height == 0);
3774 }
3775 
3776 // Helper function to compute number of blocks on either side of the frame.
3777 static INLINE int get_num_blocks(const int frame_length, const int mb_length) {
3778  return (frame_length + mb_length - 1) / mb_length;
3779 }
3780 
3781 // Check if statistics generation stage
3782 static INLINE int is_stat_generation_stage(const AV1_COMP *const cpi) {
3783  assert(IMPLIES(cpi->compressor_stage == LAP_STAGE,
3784  cpi->oxcf.pass == AOM_RC_ONE_PASS && cpi->ppi->lap_enabled));
3785  return (cpi->oxcf.pass == AOM_RC_FIRST_PASS ||
3786  (cpi->compressor_stage == LAP_STAGE));
3787 }
3788 // Check if statistics consumption stage
3789 static INLINE int is_stat_consumption_stage_twopass(const AV1_COMP *const cpi) {
3790  return (cpi->oxcf.pass >= AOM_RC_SECOND_PASS);
3791 }
3792 
3793 // Check if statistics consumption stage
3794 static INLINE int is_stat_consumption_stage(const AV1_COMP *const cpi) {
3795  return (is_stat_consumption_stage_twopass(cpi) ||
3796  (cpi->oxcf.pass == AOM_RC_ONE_PASS &&
3797  (cpi->compressor_stage == ENCODE_STAGE) && cpi->ppi->lap_enabled));
3798 }
3799 
3800 // Decide whether 'dv_costs' need to be allocated/stored during the encoding.
3801 static AOM_INLINE bool av1_need_dv_costs(const AV1_COMP *const cpi) {
3802  return !cpi->sf.rt_sf.use_nonrd_pick_mode &&
3803  av1_allow_intrabc(&cpi->common) && !is_stat_generation_stage(cpi);
3804 }
3805 
3815 static INLINE int has_no_stats_stage(const AV1_COMP *const cpi) {
3816  assert(
3817  IMPLIES(!cpi->ppi->lap_enabled, cpi->compressor_stage == ENCODE_STAGE));
3818  return (cpi->oxcf.pass == AOM_RC_ONE_PASS && !cpi->ppi->lap_enabled);
3819 }
3820 
3823 static INLINE int is_one_pass_rt_params(const AV1_COMP *cpi) {
3824  return has_no_stats_stage(cpi) && cpi->oxcf.mode == REALTIME &&
3825  cpi->oxcf.gf_cfg.lag_in_frames == 0;
3826 }
3827 
3828 static INLINE int use_one_pass_rt_reference_structure(const AV1_COMP *cpi) {
3829  return cpi->oxcf.speed >= 5 && cpi->ppi->number_spatial_layers == 1 &&
3830  cpi->ppi->number_temporal_layers == 1;
3831 }
3832 
3833 // Function return size of frame stats buffer
3834 static INLINE int get_stats_buf_size(int num_lap_buffer, int num_lag_buffer) {
3835  /* if lookahead is enabled return num_lap_buffers else num_lag_buffers */
3836  return (num_lap_buffer > 0 ? num_lap_buffer + 1 : num_lag_buffer);
3837 }
3838 
3839 // TODO(zoeliu): To set up cpi->oxcf.gf_cfg.enable_auto_brf
3840 
3841 static INLINE void set_ref_ptrs(const AV1_COMMON *cm, MACROBLOCKD *xd,
3842  MV_REFERENCE_FRAME ref0,
3843  MV_REFERENCE_FRAME ref1) {
3844  xd->block_ref_scale_factors[0] =
3845  get_ref_scale_factors_const(cm, ref0 >= LAST_FRAME ? ref0 : 1);
3846  xd->block_ref_scale_factors[1] =
3847  get_ref_scale_factors_const(cm, ref1 >= LAST_FRAME ? ref1 : 1);
3848 }
3849 
3850 static INLINE int get_chessboard_index(int frame_index) {
3851  return frame_index & 0x1;
3852 }
3853 
3854 static INLINE const int *cond_cost_list_const(const struct AV1_COMP *cpi,
3855  const int *cost_list) {
3856  const int use_cost_list = cpi->sf.mv_sf.subpel_search_method != SUBPEL_TREE &&
3857  cpi->sf.mv_sf.use_fullpel_costlist;
3858  return use_cost_list ? cost_list : NULL;
3859 }
3860 
3861 static INLINE int *cond_cost_list(const struct AV1_COMP *cpi, int *cost_list) {
3862  const int use_cost_list = cpi->sf.mv_sf.subpel_search_method != SUBPEL_TREE &&
3863  cpi->sf.mv_sf.use_fullpel_costlist;
3864  return use_cost_list ? cost_list : NULL;
3865 }
3866 
3867 // Compression ratio of current frame.
3868 double av1_get_compression_ratio(const AV1_COMMON *const cm,
3869  size_t encoded_frame_size);
3870 
3871 void av1_new_framerate(AV1_COMP *cpi, double framerate);
3872 
3873 void av1_setup_frame_size(AV1_COMP *cpi);
3874 
3875 #define LAYER_IDS_TO_IDX(sl, tl, num_tl) ((sl) * (num_tl) + (tl))
3876 
3877 // Returns 1 if a frame is scaled and 0 otherwise.
3878 static INLINE int av1_resize_scaled(const AV1_COMMON *cm) {
3879  return !(cm->superres_upscaled_width == cm->render_width &&
3881 }
3882 
3883 static INLINE int av1_frame_scaled(const AV1_COMMON *cm) {
3884  return !av1_superres_scaled(cm) && av1_resize_scaled(cm);
3885 }
3886 
3887 // Don't allow a show_existing_frame to coincide with an error resilient
3888 // frame. An exception can be made for a forward keyframe since it has no
3889 // previous dependencies.
3890 static INLINE int encode_show_existing_frame(const AV1_COMMON *cm) {
3891  return cm->show_existing_frame && (!cm->features.error_resilient_mode ||
3892  cm->current_frame.frame_type == KEY_FRAME);
3893 }
3894 
3895 // Get index into the 'cpi->mbmi_ext_info.frame_base' array for the given
3896 // 'mi_row' and 'mi_col'.
3897 static INLINE int get_mi_ext_idx(const int mi_row, const int mi_col,
3898  const BLOCK_SIZE mi_alloc_bsize,
3899  const int mbmi_ext_stride) {
3900  const int mi_ext_size_1d = mi_size_wide[mi_alloc_bsize];
3901  const int mi_ext_row = mi_row / mi_ext_size_1d;
3902  const int mi_ext_col = mi_col / mi_ext_size_1d;
3903  return mi_ext_row * mbmi_ext_stride + mi_ext_col;
3904 }
3905 
3906 // Lighter version of set_offsets that only sets the mode info
3907 // pointers.
3908 static INLINE void set_mode_info_offsets(
3909  const CommonModeInfoParams *const mi_params,
3910  const MBMIExtFrameBufferInfo *const mbmi_ext_info, MACROBLOCK *const x,
3911  MACROBLOCKD *const xd, int mi_row, int mi_col) {
3912  set_mi_offsets(mi_params, xd, mi_row, mi_col);
3913  const int ext_idx = get_mi_ext_idx(mi_row, mi_col, mi_params->mi_alloc_bsize,
3914  mbmi_ext_info->stride);
3915  x->mbmi_ext_frame = mbmi_ext_info->frame_base + ext_idx;
3916 }
3917 
3918 // Check to see if the given partition size is allowed for a specified number
3919 // of mi block rows and columns remaining in the image.
3920 // If not then return the largest allowed partition size
3921 static INLINE BLOCK_SIZE find_partition_size(BLOCK_SIZE bsize, int rows_left,
3922  int cols_left, int *bh, int *bw) {
3923  int int_size = (int)bsize;
3924  if (rows_left <= 0 || cols_left <= 0) {
3925  return AOMMIN(bsize, BLOCK_8X8);
3926  } else {
3927  for (; int_size > 0; int_size -= 3) {
3928  *bh = mi_size_high[int_size];
3929  *bw = mi_size_wide[int_size];
3930  if ((*bh <= rows_left) && (*bw <= cols_left)) {
3931  break;
3932  }
3933  }
3934  }
3935  return (BLOCK_SIZE)int_size;
3936 }
3937 
3938 static const uint8_t av1_ref_frame_flag_list[REF_FRAMES] = { 0,
3939  AOM_LAST_FLAG,
3940  AOM_LAST2_FLAG,
3941  AOM_LAST3_FLAG,
3942  AOM_GOLD_FLAG,
3943  AOM_BWD_FLAG,
3944  AOM_ALT2_FLAG,
3945  AOM_ALT_FLAG };
3946 
3947 // When more than 'max_allowed_refs' are available, we reduce the number of
3948 // reference frames one at a time based on this order.
3949 static const MV_REFERENCE_FRAME disable_order[] = {
3950  LAST3_FRAME,
3951  LAST2_FRAME,
3952  ALTREF2_FRAME,
3953  BWDREF_FRAME,
3954 };
3955 
3956 static const MV_REFERENCE_FRAME
3957  ref_frame_priority_order[INTER_REFS_PER_FRAME] = {
3958  LAST_FRAME, ALTREF_FRAME, BWDREF_FRAME, GOLDEN_FRAME,
3959  ALTREF2_FRAME, LAST2_FRAME, LAST3_FRAME,
3960  };
3961 
3962 static INLINE int get_ref_frame_flags(const SPEED_FEATURES *const sf,
3963  const int use_one_pass_rt_params,
3964  const YV12_BUFFER_CONFIG **ref_frames,
3965  const int ext_ref_frame_flags) {
3966  // cpi->ext_flags.ref_frame_flags allows certain reference types to be
3967  // disabled by the external interface. These are set by
3968  // av1_apply_encoding_flags(). Start with what the external interface allows,
3969  // then suppress any reference types which we have found to be duplicates.
3970  int flags = ext_ref_frame_flags;
3971 
3972  for (int i = 1; i < INTER_REFS_PER_FRAME; ++i) {
3973  const YV12_BUFFER_CONFIG *const this_ref = ref_frames[i];
3974  // If this_ref has appeared before, mark the corresponding ref frame as
3975  // invalid. For one_pass_rt mode, only disable GOLDEN_FRAME if it's the
3976  // same as LAST_FRAME or ALTREF_FRAME (if ALTREF is being used in nonrd).
3977  int index =
3978  (use_one_pass_rt_params && ref_frame_priority_order[i] == GOLDEN_FRAME)
3979  ? (1 + sf->rt_sf.use_nonrd_altref_frame)
3980  : i;
3981  for (int j = 0; j < index; ++j) {
3982  // If this_ref has appeared before (same as the reference corresponding
3983  // to lower index j), remove it as a reference only if that reference
3984  // (for index j) is actually used as a reference.
3985  if (this_ref == ref_frames[j] &&
3986  (flags & (1 << (ref_frame_priority_order[j] - 1)))) {
3987  flags &= ~(1 << (ref_frame_priority_order[i] - 1));
3988  break;
3989  }
3990  }
3991  }
3992  return flags;
3993 }
3994 
3995 // Returns a Sequence Header OBU stored in an aom_fixed_buf_t, or NULL upon
3996 // failure. When a non-NULL aom_fixed_buf_t pointer is returned by this
3997 // function, the memory must be freed by the caller. Both the buf member of the
3998 // aom_fixed_buf_t, and the aom_fixed_buf_t pointer itself must be freed. Memory
3999 // returned must be freed via call to free().
4000 //
4001 // Note: The OBU returned is in Low Overhead Bitstream Format. Specifically,
4002 // the obu_has_size_field bit is set, and the buffer contains the obu_size
4003 // field.
4004 aom_fixed_buf_t *av1_get_global_headers(AV1_PRIMARY *ppi);
4005 
4006 #define MAX_GFUBOOST_FACTOR 10.0
4007 #define MIN_GFUBOOST_FACTOR 4.0
4008 
4009 static INLINE int is_frame_tpl_eligible(const GF_GROUP *const gf_group,
4010  uint8_t index) {
4011  const FRAME_UPDATE_TYPE update_type = gf_group->update_type[index];
4012  return update_type == ARF_UPDATE || update_type == GF_UPDATE ||
4013  update_type == KF_UPDATE;
4014 }
4015 
4016 static INLINE int is_frame_eligible_for_ref_pruning(const GF_GROUP *gf_group,
4017  int selective_ref_frame,
4018  int prune_ref_frames,
4019  int gf_index) {
4020  return (selective_ref_frame > 0) && (prune_ref_frames > 0) &&
4021  !is_frame_tpl_eligible(gf_group, gf_index);
4022 }
4023 
4024 // Get update type of the current frame.
4025 static INLINE FRAME_UPDATE_TYPE get_frame_update_type(const GF_GROUP *gf_group,
4026  int gf_frame_index) {
4027  return gf_group->update_type[gf_frame_index];
4028 }
4029 
4030 static INLINE int av1_pixels_to_mi(int pixels) {
4031  return ALIGN_POWER_OF_TWO(pixels, 3) >> MI_SIZE_LOG2;
4032 }
4033 
4034 static AOM_INLINE int is_psnr_calc_enabled(const AV1_COMP *cpi) {
4035  const AV1_COMMON *const cm = &cpi->common;
4036 
4037  return cpi->ppi->b_calculate_psnr && !is_stat_generation_stage(cpi) &&
4038  cm->show_frame;
4039 }
4040 
4041 static INLINE int is_frame_resize_pending(const AV1_COMP *const cpi) {
4042  const ResizePendingParams *const resize_pending_params =
4043  &cpi->resize_pending_params;
4044  return (resize_pending_params->width && resize_pending_params->height &&
4045  (cpi->common.width != resize_pending_params->width ||
4046  cpi->common.height != resize_pending_params->height));
4047 }
4048 
4049 // Check if loop restoration filter is used.
4050 static INLINE int is_restoration_used(const AV1_COMMON *const cm) {
4051  return cm->seq_params->enable_restoration && !cm->features.all_lossless &&
4052  !cm->tiles.large_scale;
4053 }
4054 
4055 static INLINE int is_inter_tx_size_search_level_one(
4056  const TX_SPEED_FEATURES *tx_sf) {
4057  return (tx_sf->inter_tx_size_search_init_depth_rect >= 1 &&
4058  tx_sf->inter_tx_size_search_init_depth_sqr >= 1);
4059 }
4060 
4061 #if CONFIG_AV1_TEMPORAL_DENOISING
4062 static INLINE int denoise_svc(const struct AV1_COMP *const cpi) {
4063  return (!cpi->ppi->use_svc ||
4064  (cpi->ppi->use_svc &&
4065  cpi->svc.spatial_layer_id >= cpi->svc.first_layer_denoise));
4066 }
4067 #endif
4068 
4069 #if CONFIG_COLLECT_PARTITION_STATS == 2
4070 static INLINE void av1_print_fr_partition_timing_stats(
4071  const FramePartitionTimingStats *part_stats, const char *filename) {
4072  FILE *f = fopen(filename, "w");
4073  if (!f) {
4074  return;
4075  }
4076 
4077  fprintf(f, "bsize,redo,");
4078  for (int part = 0; part < EXT_PARTITION_TYPES; part++) {
4079  fprintf(f, "decision_%d,", part);
4080  }
4081  for (int part = 0; part < EXT_PARTITION_TYPES; part++) {
4082  fprintf(f, "attempt_%d,", part);
4083  }
4084  for (int part = 0; part < EXT_PARTITION_TYPES; part++) {
4085  fprintf(f, "time_%d,", part);
4086  }
4087  fprintf(f, "\n");
4088 
4089  static const int bsizes[6] = { 128, 64, 32, 16, 8, 4 };
4090 
4091  for (int bsize_idx = 0; bsize_idx < 6; bsize_idx++) {
4092  fprintf(f, "%d,%d,", bsizes[bsize_idx], part_stats->partition_redo);
4093  for (int part = 0; part < EXT_PARTITION_TYPES; part++) {
4094  fprintf(f, "%d,", part_stats->partition_decisions[bsize_idx][part]);
4095  }
4096  for (int part = 0; part < EXT_PARTITION_TYPES; part++) {
4097  fprintf(f, "%d,", part_stats->partition_attempts[bsize_idx][part]);
4098  }
4099  for (int part = 0; part < EXT_PARTITION_TYPES; part++) {
4100  fprintf(f, "%ld,", part_stats->partition_times[bsize_idx][part]);
4101  }
4102  fprintf(f, "\n");
4103  }
4104  fclose(f);
4105 }
4106 #endif // CONFIG_COLLECT_PARTITION_STATS == 2
4107 
4108 #if CONFIG_COLLECT_PARTITION_STATS
4109 static INLINE int av1_get_bsize_idx_for_part_stats(BLOCK_SIZE bsize) {
4110  assert(bsize == BLOCK_128X128 || bsize == BLOCK_64X64 ||
4111  bsize == BLOCK_32X32 || bsize == BLOCK_16X16 || bsize == BLOCK_8X8 ||
4112  bsize == BLOCK_4X4);
4113  switch (bsize) {
4114  case BLOCK_128X128: return 0;
4115  case BLOCK_64X64: return 1;
4116  case BLOCK_32X32: return 2;
4117  case BLOCK_16X16: return 3;
4118  case BLOCK_8X8: return 4;
4119  case BLOCK_4X4: return 5;
4120  default: assert(0 && "Invalid bsize for partition_stats."); return -1;
4121  }
4122 }
4123 #endif // CONFIG_COLLECT_PARTITION_STATS
4124 
4125 #if CONFIG_COLLECT_COMPONENT_TIMING
4126 static INLINE void start_timing(AV1_COMP *cpi, int component) {
4127  aom_usec_timer_start(&cpi->component_timer[component]);
4128 }
4129 static INLINE void end_timing(AV1_COMP *cpi, int component) {
4130  aom_usec_timer_mark(&cpi->component_timer[component]);
4131  cpi->frame_component_time[component] +=
4132  aom_usec_timer_elapsed(&cpi->component_timer[component]);
4133 }
4134 static INLINE char const *get_frame_type_enum(int type) {
4135  switch (type) {
4136  case 0: return "KEY_FRAME";
4137  case 1: return "INTER_FRAME";
4138  case 2: return "INTRA_ONLY_FRAME";
4139  case 3: return "S_FRAME";
4140  default: assert(0);
4141  }
4142  return "error";
4143 }
4144 #endif
4145 
4148 #ifdef __cplusplus
4149 } // extern "C"
4150 #endif
4151 
4152 #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 AV1_COMP AV1_COMP
Top level encoder structure.
COST_UPDATE_TYPE
This enum controls how often the entropy costs should be updated.
Definition: encoder.h:228
@ COST_UPD_SBROW
Definition: encoder.h:230
@ COST_UPD_TILE
Definition: encoder.h:231
@ COST_UPD_OFF
Definition: encoder.h:232
@ NUM_COST_UPDATE_TYPES
Definition: encoder.h:233
@ COST_UPD_SB
Definition: encoder.h:229
struct EncodeFrameParams EncodeFrameParams
contains per-frame encoding parameters decided upon by av1_encode_strategy() and passed down to av1_e...
struct PrimaryMultiThreadInfo PrimaryMultiThreadInfo
Primary Encoder parameters related to multi-threading.
struct EncodeFrameInput EncodeFrameInput
Input frames and last input frame.
struct MultiThreadInfo MultiThreadInfo
Encoder parameters related to multi-threading.
struct AV1_COMP_DATA AV1_COMP_DATA
Structure to hold data corresponding to an encoded frame.
LOOPFILTER_CONTROL
This enum controls to which frames loopfilter is applied.
Definition: encoder.h:239
@ LOOPFILTER_ALL
Definition: encoder.h:241
@ LOOPFILTER_SELECTIVELY
Definition: encoder.h:243
@ LOOPFILTER_REFERENCE
Definition: encoder.h:242
@ LOOPFILTER_NONE
Definition: encoder.h:240
#define NUM_RECODES_PER_FRAME
Max number of recodes used to track the frame probabilities.
Definition: encoder.h:1521
struct AV1_PRIMARY AV1_PRIMARY
Top level primary encoder structure.
struct inter_modes_info InterModesInfo
Struct used to hold inter mode data for fast tx search.
struct RestoreStateBuffers RestoreStateBuffers
Buffers to be backed up during parallel encode set to be restored later.
struct AV1EncoderConfig AV1EncoderConfig
Main encoder configuration data structure.
#define MAX_PARALLEL_FRAMES
Max number of frames that can be encoded in a parallel encode set.
Definition: encoder.h:1526
@ RESTORE_SWITCHABLE_TYPES
Definition: enums.h:602
aom_dist_metric
Distortion metric to use for RD optimization.
Definition: aomcx.h:1566
aom_tune_content
Definition: aomcx.h:1528
aom_tune_metric
Model tuning parameters.
Definition: aomcx.h:1547
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:206
aom_rc_mode
Rate control mode.
Definition: aom_encoder.h:184
aom_enc_pass
Multi-pass Encoding Pass.
Definition: aom_encoder.h:175
long aom_enc_frame_flags_t
Encoded Frame Flags.
Definition: aom_encoder.h:376
@ AOM_RC_ONE_PASS
Definition: aom_encoder.h:176
@ AOM_RC_SECOND_PASS
Definition: aom_encoder.h:178
@ AOM_RC_FIRST_PASS
Definition: aom_encoder.h:177
int av1_get_compressed_data(AV1_COMP *cpi, AV1_COMP_DATA *const cpi_data)
Encode a frame.
Definition: encoder.c:4419
int av1_receive_raw_frame(AV1_COMP *cpi, aom_enc_frame_flags_t frame_flags, YV12_BUFFER_CONFIG *sd, int64_t time_stamp, int64_t end_time_stamp)
Obtain the raw frame data.
Definition: encoder.c:3833
int av1_encode(AV1_COMP *const cpi, uint8_t *const dest, const EncodeFrameInput *const frame_input, const EncodeFrameParams *const frame_params, EncodeFrameResults *const frame_results)
Run 1-pass/2-pass encoding.
Definition: encoder.c:3735
static int has_no_stats_stage(const AV1_COMP *const cpi)
Check if the current stage has statistics.
Definition: encoder.h:3815
Describes look ahead buffer operations.
Top level common structure used by both encoder and decoder.
Definition: av1_common_int.h:750
int superres_upscaled_width
Definition: av1_common_int.h:799
int superres_upscaled_height
Definition: av1_common_int.h:800
SequenceHeader * seq_params
Definition: av1_common_int.h:976
int width
Definition: av1_common_int.h:775
CurrentFrame current_frame
Definition: av1_common_int.h:754
int show_existing_frame
Definition: av1_common_int.h:900
FeatureFlags features
Definition: av1_common_int.h:905
int show_frame
Definition: av1_common_int.h:885
RefCntBuffer * ref_frame_map[REF_FRAMES]
Definition: av1_common_int.h:878
CommonTileParams tiles
Definition: av1_common_int.h:992
int height
Definition: av1_common_int.h:776
int render_width
Definition: av1_common_int.h:786
int render_height
Definition: av1_common_int.h:787
Encoder data related to row-based multi-threading.
Definition: encoder.h:1467
pthread_mutex_t * mutex_
Definition: encoder.h:1500
int allocated_tile_cols
Definition: encoder.h:1475
int allocated_cols
Definition: encoder.h:1489
int allocated_tile_rows
Definition: encoder.h:1471
int allocated_rows
Definition: encoder.h:1482
Encoder parameters for synchronization of row based multi-threading.
Definition: encoder.h:1354
int rows
Definition: encoder.h:1387
int sync_range
Definition: encoder.h:1376
int intrabc_extra_top_right_sb_delay
Definition: encoder.h:1383
int next_mi_row
Definition: encoder.h:1391
pthread_mutex_t * mutex_
Definition: encoder.h:1360
pthread_cond_t * cond_
Definition: encoder.h:1361
int num_threads_working
Definition: encoder.h:1395
Main encoder configuration data structure.
Definition: encoder.h:909
RateControlCfg rc_cfg
Definition: encoder.h:931
KeyFrameCfg kf_cfg
Definition: encoder.h:926
enum aom_enc_pass pass
Definition: encoder.h:1034
AlgoCfg algo_cfg
Definition: encoder.h:921
aom_fixed_buf_t twopass_stats_in
Definition: encoder.h:948
Structure to hold data corresponding to an encoded frame.
Definition: encoder.h:2360
int64_t ts_frame_end
Definition: encoder.h:2389
int pop_lookahead
Definition: encoder.h:2404
int64_t ts_frame_start
Definition: encoder.h:2384
unsigned char * cx_data
Definition: encoder.h:2364
size_t cx_data_sz
Definition: encoder.h:2369
int flush
Definition: encoder.h:2394
int frame_display_order_hint
Definition: encoder.h:2409
unsigned int lib_flags
Definition: encoder.h:2379
size_t frame_size
Definition: encoder.h:2374
const aom_rational64_t * timestamp_ratio
Definition: encoder.h:2399
Top level encoder structure.
Definition: encoder.h:2700
int do_update_frame_probs_warp[10]
Definition: encoder.h:3054
uint8_t * consec_zero_mv
Definition: encoder.h:3250
int do_update_frame_probs_obmc[10]
Definition: encoder.h:3049
struct aom_denoise_and_model_t * denoise_and_model
Definition: encoder.h:3117
int skip_tpl_setup_stats
Definition: encoder.h:2808
int frames_since_last_update
Definition: encoder.h:3395
int * mb_delta_q
Definition: encoder.h:3338
int vaq_refresh
Definition: encoder.h:3024
FRAME_TYPE last_frame_type
Definition: encoder.h:3215
YV12_BUFFER_CONFIG * unscaled_source
Definition: encoder.h:2776
CYCLIC_REFRESH * cyclic_refresh
Definition: encoder.h:2943
InitialDimensions initial_dimensions
Definition: encoder.h:2991
RATE_CONTROL rc
Definition: encoder.h:2902
int deltaq_used
Definition: encoder.h:3173
ActiveMap active_map
Definition: encoder.h:2948
TuneVMAFInfo vmaf_info
Definition: encoder.h:3191
WeberStats * mb_weber_stats
Definition: encoder.h:3323
bool refresh_idx_available
Definition: encoder.h:3288
TokenInfo token_info
Definition: encoder.h:3019
int64_t ambient_err
Definition: encoder.h:2871
aom_film_grain_table_t * film_grain_table
Definition: encoder.h:3110
int ref_refresh_index
Definition: encoder.h:3282
size_t available_bs_size
Definition: encoder.h:3266
SPEED_FEATURES sf
Definition: encoder.h:2922
TRELLIS_OPT_TYPE optimize_seg_arr[8]
Definition: encoder.h:2754
ExtPartController ext_part_controller
Definition: encoder.h:3272
FILE * second_pass_log_stream
Definition: encoder.h:3372
double * ssim_rdmult_scaling_factors
Definition: encoder.h:3185
RD_OPT rd
Definition: encoder.h:2876
int num_tg
Definition: encoder.h:3220
WinnerModeParams winner_mode_params
Definition: encoder.h:2892
ExternalFlags ext_flags
Definition: encoder.h:2854
EncSegmentationInfo enc_seg
Definition: encoder.h:2938
MotionVectorSearchParams mv_search_params
Definition: encoder.h:2927
int use_screen_content_tools
Definition: encoder.h:3132
int do_update_frame_probs_interpfilter[10]
Definition: encoder.h:3059
CODING_CONTEXT coding_context
Definition: encoder.h:2882
TemporalFilterCtx tf_ctx
Definition: encoder.h:2823
TuneButteraugliInfo butteraugli_info
Definition: encoder.h:3198
ForceIntegerMVInfo force_intpel_info
Definition: encoder.h:2828
GlobalMotionInfo gm_info
Definition: encoder.h:2887
CoeffBufferPool coeff_buffer_pool
Definition: encoder.h:2738
FRAME_INDEX_SET frame_index_set
Definition: encoder.h:2986
int ref_frame_flags
Definition: encoder.h:2912
RefCntBuffer * scaled_ref_buf[INTER_REFS_PER_FRAME]
Definition: encoder.h:2834
unsigned char gf_frame_index
Definition: encoder.h:2953
AV1EncoderConfig oxcf
Definition: encoder.h:2748
AV1_COMMON common
Definition: encoder.h:2743
AV1LrStruct lr_ctxt
Definition: encoder.h:3105
bool do_frame_data_update
Definition: encoder.h:3311
int do_update_frame_probs_txtype[10]
Definition: encoder.h:3044
FRAME_COUNTS counts
Definition: encoder.h:2720
COMPRESSOR_STAGE compressor_stage
Definition: encoder.h:3209
int intrabc_used
Definition: encoder.h:3095
int num_frame_recode
Definition: encoder.h:3034
int rt_reduce_num_ref_buffers
Definition: encoder.h:2849
RefreshFrameInfo refresh_frame
Definition: encoder.h:2844
int prune_ref_frame_mask
Definition: encoder.h:3100
YV12_BUFFER_CONFIG * unscaled_last_source
Definition: encoder.h:2786
THIRD_PASS_DEC_CTX * third_pass_ctx
Definition: encoder.h:3367
int all_one_sided_refs
Definition: encoder.h:2933
MultiThreadInfo mt_info
Definition: encoder.h:3083
VarBasedPartitionInfo vbp_info
Definition: encoder.h:3029
YV12_BUFFER_CONFIG * last_source
Definition: encoder.h:2770
int existing_fb_idx_to_show
Definition: encoder.h:3090
YV12_BUFFER_CONFIG * unfiltered_source
Definition: encoder.h:2797
FRAME_INFO frame_info
Definition: encoder.h:2981
int frame_header_count
Definition: encoder.h:3168
int droppable
Definition: encoder.h:2976
RefCntBuffer * last_show_frame_buf
Definition: encoder.h:2839
aom_superres_mode superres_mode
Definition: encoder.h:3227
MBMIExtFrameBufferInfo mbmi_ext_info
Definition: encoder.h:2725
double new_framerate
Definition: encoder.h:3073
AV1_PRIMARY * ppi
Definition: encoder.h:2704
uint64_t * src_sad_blk_64x64
Definition: encoder.h:3377
int64_t norm_wiener_variance
Definition: encoder.h:3333
double * tpl_rdmult_scaling_factors
Definition: encoder.h:2818
int sb_counter
Definition: encoder.h:3261
TileDataEnc * tile_data
Definition: encoder.h:3010
int is_screen_content_type
Definition: encoder.h:3140
BLOCK_SIZE weber_bsize
Definition: encoder.h:3328
InterpSearchFlags interp_search_flags
Definition: encoder.h:3123
TimeStamps time_stamps
Definition: encoder.h:2897
int ref_idx_to_skip
Definition: encoder.h:3295
YV12_BUFFER_CONFIG orig_source
Definition: encoder.h:2803
FirstPassData firstpass_data
Definition: encoder.h:3232
double framerate
Definition: encoder.h:2907
int speed
Definition: encoder.h:2917
BLOCK_SIZE fp_block_size
Definition: encoder.h:3255
int use_ducky_encode
Definition: encoder.h:3383
YV12_BUFFER_CONFIG trial_frame_rst
Definition: encoder.h:2866
bool is_dropped_frame
Definition: encoder.h:3343
ThreadData td
Definition: encoder.h:2715
ResizePendingParams resize_pending_params
Definition: encoder.h:3004
YV12_BUFFER_CONFIG scaled_source
Definition: encoder.h:2781
int do_update_vbr_bits_off_target_fast
Definition: encoder.h:3078
YV12_BUFFER_CONFIG last_frame_uf
Definition: encoder.h:2860
EncQuantDequantParams enc_quant_dequant_params
Definition: encoder.h:2710
RefFrameDistanceInfo ref_frame_dist_info
Definition: encoder.h:3178
DuckyEncodeInfo ducky_encode_info
Definition: encoder.h:3389
int initial_mbs
Definition: encoder.h:2999
YV12_BUFFER_CONFIG scaled_last_source
Definition: encoder.h:2791
MV_STATS mv_stats
Definition: encoder.h:3278
FrameProbInfo frame_new_probs[10]
Definition: encoder.h:3039
YV12_BUFFER_CONFIG * source
Definition: encoder.h:2761
int allocated_tiles
Definition: encoder.h:3014
SVC svc
Definition: encoder.h:3204
CB_COEFF_BUFFER * coeff_buffer_base
Definition: encoder.h:2732
NOISE_ESTIMATE noise_estimate
Definition: encoder.h:3237
TWO_PASS_FRAME twopass_frame
Definition: encoder.h:3362
Top level primary encoder structure.
Definition: encoder.h:2415
int num_fp_contexts
Definition: encoder.h:2472
bool buffer_removal_time_present
Definition: encoder.h:2586
int valid_gm_model_found[FRAME_UPDATE_TYPES]
Definition: encoder.h:2694
struct aom_codec_pkt_list * output_pkt_list
Definition: encoder.h:2516
int filter_level[2]
Definition: encoder.h:2477
SequenceHeader seq_params
Definition: encoder.h:2576
MV_STATS mv_stats
Definition: encoder.h:2624
struct AV1_COMP * cpi
Definition: encoder.h:2493
AV1LevelParams level_params
Definition: encoder.h:2546
int internal_altref_allowed
Definition: encoder.h:2521
int b_calculate_psnr
Definition: encoder.h:2551
PrimaryMultiThreadInfo p_mt_info
Definition: encoder.h:2681
TEMPORAL_FILTER_INFO tf_info
Definition: encoder.h:2571
TWO_PASS twopass
Definition: encoder.h:2561
int frames_left
Definition: encoder.h:2556
int64_t ts_start_last_show_frame
Definition: encoder.h:2462
PRIMARY_RATE_CONTROL p_rc
Definition: encoder.h:2566
int lap_enabled
Definition: encoder.h:2541
FrameProbInfo frame_probs
Definition: encoder.h:2686
int show_existing_alt_ref
Definition: encoder.h:2526
int fb_of_context_type[REF_FRAMES]
Definition: encoder.h:2676
int use_svc
Definition: encoder.h:2581
double * tpl_sb_rdmult_scaling_factors
Definition: encoder.h:2614
int filter_level_v
Definition: encoder.h:2487
int filter_level_u
Definition: encoder.h:2482
struct AV1_COMP * cpi_lap
Definition: encoder.h:2498
struct AV1_COMP * parallel_cpi[4]
Definition: encoder.h:2419
int64_t ts_end_last_show_frame
Definition: encoder.h:2467
struct lookahead_ctx * lookahead
Definition: encoder.h:2503
GF_STATE gf_state
Definition: encoder.h:2536
aom_variance_fn_ptr_t fn_ptr[BLOCK_SIZES_ALL]
Definition: encoder.h:2608
GF_GROUP gf_group
Definition: encoder.h:2531
struct AV1_COMP_DATA parallel_frames_data[4 - 1]
Definition: encoder.h:2425
TplParams tpl_data
Definition: encoder.h:2619
unsigned int number_temporal_layers
Definition: encoder.h:2591
unsigned int number_spatial_layers
Definition: encoder.h:2596
int seq_params_locked
Definition: encoder.h:2510
struct aom_internal_error_info error
Definition: encoder.h:2601
Algorithm configuration parameters.
Definition: encoder.h:809
int disable_trellis_quant
Definition: encoder.h:825
int sharpness
Definition: encoder.h:816
int arnr_max_frames
Definition: encoder.h:830
bool enable_tpl_model
Definition: encoder.h:848
LOOPFILTER_CONTROL loopfilter_control
Definition: encoder.h:863
uint8_t cdf_update_mode
Definition: encoder.h:843
bool enable_overlay
Definition: encoder.h:854
int arnr_strength
Definition: encoder.h:835
Stores the transforms coefficients for the whole superblock.
Definition: block.h:177
The stucture of CYCLIC_REFRESH.
Definition: aq_cyclicrefresh.h:36
Parameters related to CDEF.
Definition: av1_common_int.h:196
Definition: encoder.h:2303
uint8_t * entropy_ctx
Definition: encoder.h:2315
tran_low_t * tcoeff
Definition: encoder.h:2307
uint16_t * eobs
Definition: encoder.h:2311
Params related to MB_MODE_INFO arrays and related info.
Definition: av1_common_int.h:501
BLOCK_SIZE mi_alloc_bsize
Definition: av1_common_int.h:550
int cols
Definition: av1_common_int.h:428
unsigned int large_scale
Definition: av1_common_int.h:488
Encoder flags for compound prediction modes.
Definition: encoder.h:395
bool enable_masked_comp
Definition: encoder.h:404
bool enable_diff_wtd_comp
Definition: encoder.h:412
bool enable_smooth_interintra
Definition: encoder.h:408
bool enable_interintra_wedge
Definition: encoder.h:420
bool enable_interinter_wedge
Definition: encoder.h:416
bool enable_dist_wtd_comp
Definition: encoder.h:399
Contains buffers used by av1_compound_type_rd()
Definition: block.h:337
Segmentation related information for the current frame.
Definition: encoder.h:2266
uint8_t * map
Definition: encoder.h:2272
bool has_lossless_segment
Definition: encoder.h:2278
Input frames and last input frame.
Definition: encoder.h:3401
contains per-frame encoding parameters decided upon by av1_encode_strategy() and passed down to av1_e...
Definition: encoder.h:3413
int error_resilient_mode
Definition: encoder.h:3417
int remapped_ref_idx[REF_FRAMES]
Definition: encoder.h:3448
int ref_frame_flags
Definition: encoder.h:3443
int speed
Definition: encoder.h:3459
FRAME_TYPE frame_type
Definition: encoder.h:3421
int show_frame
Definition: encoder.h:3431
RefreshFrameInfo refresh_frame
Definition: encoder.h:3454
Frame refresh flags set by the external interface.
Definition: encoder.h:2133
bool golden_frame
Definition: encoder.h:2135
bool bwd_ref_frame
Definition: encoder.h:2136
bool update_pending
Definition: encoder.h:2142
bool last_frame
Definition: encoder.h:2134
bool alt_ref_frame
Definition: encoder.h:2138
bool alt2_ref_frame
Definition: encoder.h:2137
Flags signalled by the external interface at frame level.
Definition: encoder.h:2148
bool use_primary_ref_none
Definition: encoder.h:2189
bool use_ref_frame_mvs
Definition: encoder.h:2173
ExtRefreshFrameFlagsInfo refresh_frame
Definition: encoder.h:2157
int ref_frame_flags
Definition: encoder.h:2152
bool use_error_resilient
Definition: encoder.h:2178
bool use_s_frame
Definition: encoder.h:2183
bool refresh_frame_context
Definition: encoder.h:2162
bool refresh_frame_context_pending
Definition: encoder.h:2168
Frame level features.
Definition: av1_common_int.h:358
bool allow_screen_content_tools
Definition: av1_common_int.h:375
bool allow_intrabc
Definition: av1_common_int.h:376
bool error_resilient_mode
Definition: av1_common_int.h:400
bool all_lossless
Definition: av1_common_int.h:389
Encoder info used for decision on forcing integer motion vectors.
Definition: encoder.h:1696
int rate_size
Definition: encoder.h:1709
int rate_index
Definition: encoder.h:1705
Encoder-side probabilities for pruning of various AV1 tools.
Definition: encoder.h:1082
Data related to the current GF/ARF group and the individual frames within the group.
Definition: firstpass.h:344
Parameters related to global motion search.
Definition: encoder.h:1905
bool search_done
Definition: encoder.h:1909
int segment_map_h
Definition: encoder.h:1943
int num_src_corners
Definition: encoder.h:1949
unsigned char * src_buffer
Definition: encoder.h:1921
int segment_map_w
Definition: encoder.h:1942
Initial frame dimensions.
Definition: encoder.h:1968
int height
Definition: encoder.h:1970
int width
Definition: encoder.h:1969
Flags related to interpolation filter search.
Definition: encoder.h:1976
int default_interp_skip_flags
Definition: encoder.h:1981
uint16_t interp_filter_search_mask
Definition: encoder.h:1985
Encoder flags for intra prediction.
Definition: encoder.h:298
bool enable_diagonal_intra
Definition: encoder.h:328
bool enable_smooth_intra
Definition: encoder.h:311
bool auto_intra_tools_off
Definition: encoder.h:347
bool enable_filter_intra
Definition: encoder.h:307
bool enable_directional_intra
Definition: encoder.h:323
bool enable_paeth_intra
Definition: encoder.h:315
bool enable_intra_edge_filter
Definition: encoder.h:302
bool enable_cfl_intra
Definition: encoder.h:319
bool enable_angle_delta
Definition: encoder.h:333
Encoder config related to the coding of key frames.
Definition: encoder.h:462
int key_freq_max
Definition: encoder.h:471
int sframe_mode
Definition: encoder.h:489
bool auto_key
Definition: encoder.h:494
bool enable_intrabc
Definition: encoder.h:514
int sframe_dist
Definition: encoder.h:482
bool enable_sframe
Definition: encoder.h:509
int enable_keyframe_filtering
Definition: encoder.h:476
int fwd_kf_dist
Definition: encoder.h:499
int key_freq_min
Definition: encoder.h:466
bool fwd_kf_enabled
Definition: encoder.h:504
Buffer to store mode information at mi_alloc_bsize (4x4 or 8x8) level.
Definition: encoder.h:1742
int alloc_size
Definition: encoder.h:1751
int stride
Definition: encoder.h:1755
MB_MODE_INFO_EXT_FRAME * frame_base
Definition: encoder.h:1747
Stores best extended mode information at frame level.
Definition: block.h:213
Stores the prediction/txfm mode of the current coding block.
Definition: blockd.h:222
Parameters for motion vector search process.
Definition: encoder.h:1991
int max_mv_magnitude
Definition: encoder.h:1997
fractional_mv_step_fp * find_fractional_mv_step
Definition: encoder.h:2011
int mv_step_param
Definition: encoder.h:2002
Encoder parameters related to multi-threading.
Definition: encoder.h:1599
RestoreStateBuffers restore_state_buf
Definition: encoder.h:1680
AV1CdefWorkerData * cdef_worker
Definition: encoder.h:1675
AV1LrSync lr_row_sync
Definition: encoder.h:1650
struct EncWorkerData * tile_thr_data
Definition: encoder.h:1619
AV1TplRowMultiThreadInfo tpl_row_mt
Definition: encoder.h:1640
AV1EncPackBSSync pack_bs_sync
Definition: encoder.h:1655
AV1EncRowMultiThreadInfo enc_row_mt
Definition: encoder.h:1635
AV1LfSync lf_row_sync
Definition: encoder.h:1645
AV1CdefSync cdef_sync
Definition: encoder.h:1670
int num_mod_workers[NUM_MT_MODULES]
Definition: encoder.h:1608
int num_workers
Definition: encoder.h:1603
AVxWorker * workers
Definition: encoder.h:1613
bool pack_bs_mt_enabled
Definition: encoder.h:1630
bool row_mt_enabled
Definition: encoder.h:1625
AV1TemporalFilterSync tf_sync
Definition: encoder.h:1665
AV1GlobalMotionSync gm_sync
Definition: encoder.h:1660
Contains buffers used to speed up rdopt for obmc.
Definition: block.h:300
Contains color maps used in palette mode.
Definition: block.h:325
Primary Rate Control parameters and status.
Definition: ratectrl.h:262
Encoder config for coding block partitioning.
Definition: encoder.h:270
bool enable_rect_partitions
Definition: encoder.h:274
bool enable_1to4_partitions
Definition: encoder.h:282
BLOCK_SIZE max_partition_size
Definition: encoder.h:292
bool enable_ab_partitions
Definition: encoder.h:278
BLOCK_SIZE min_partition_size
Definition: encoder.h:287
Primary Encoder parameters related to multi-threading.
Definition: encoder.h:1557
struct EncWorkerData * tile_thr_data
Definition: encoder.h:1577
AV1CdefWorkerData * cdef_worker
Definition: encoder.h:1582
int num_workers
Definition: encoder.h:1561
AVxWorker * workers
Definition: encoder.h:1571
AVxWorker * p_workers[4]
Definition: encoder.h:1588
int p_num_workers
Definition: encoder.h:1593
int num_mod_workers[NUM_MT_MODULES]
Definition: encoder.h:1566
Rate Control parameters and status.
Definition: ratectrl.h:134
Encoder rate control configuration parameters.
Definition: encoder.h:520
int worst_allowed_q
Definition: encoder.h:590
int over_shoot_pct
Definition: encoder.h:585
unsigned int max_intra_bitrate_pct
Definition: encoder.h:555
int drop_frames_water_mark
Definition: encoder.h:573
int vbrmax_section
Definition: encoder.h:621
int64_t maximum_buffer_size_ms
Definition: encoder.h:539
unsigned int vbr_corpus_complexity_lap
Definition: encoder.h:550
unsigned int min_cr
Definition: encoder.h:569
int vbrbias
Definition: encoder.h:611
unsigned int gf_cbr_boost_pct
Definition: encoder.h:564
int vbrmin_section
Definition: encoder.h:616
unsigned int max_inter_bitrate_pct
Definition: encoder.h:560
int64_t starting_buffer_level_ms
Definition: encoder.h:529
int best_allowed_q
Definition: encoder.h:595
int under_shoot_pct
Definition: encoder.h:579
int64_t target_bandwidth
Definition: encoder.h:544
int64_t optimal_buffer_level_ms
Definition: encoder.h:534
int cq_level
Definition: encoder.h:599
Refrence frame distance related variables.
Definition: encoder.h:2050
int8_t nearest_past_ref
Definition: encoder.h:2058
int8_t nearest_future_ref
Definition: encoder.h:2062
Refresh frame flags for different type of frames.
Definition: encoder.h:2029
bool bwd_ref_frame
Definition: encoder.h:2031
bool golden_frame
Definition: encoder.h:2030
bool alt_ref_frame
Definition: encoder.h:2032
Encoder config related to resize.
Definition: encoder.h:250
uint8_t resize_scale_denominator
Definition: encoder.h:259
uint8_t resize_kf_scale_denominator
Definition: encoder.h:264
RESIZE_MODE resize_mode
Definition: encoder.h:254
Desired dimensions for an externally triggered resize.
Definition: encoder.h:2042
int width
Definition: encoder.h:2043
int height
Definition: encoder.h:2044
Buffers to be backed up during parallel encode set to be restored later.
Definition: encoder.h:1532
int32_t * rst_tmpbuf
Definition: encoder.h:1546
RestorationLineBuffers * rlbs
Definition: encoder.h:1551
uint16_t * cdef_colbuf[3]
Definition: encoder.h:1541
uint16_t * cdef_srcbuf
Definition: encoder.h:1536
Top level speed vs quality trade off data struture.
Definition: speed_features.h:1606
MV_SPEED_FEATURES mv_sf
Definition: speed_features.h:1635
REAL_TIME_SPEED_FEATURES rt_sf
Definition: speed_features.h:1675
The stucture of SVC.
Definition: svc_layercontext.h:87
Encoder config related to frame super-resolution.
Definition: encoder.h:426
uint8_t superres_kf_scale_denominator
Definition: encoder.h:448
aom_superres_mode superres_mode
Definition: encoder.h:452
int superres_kf_qthresh
Definition: encoder.h:436
bool enable_superres
Definition: encoder.h:456
uint8_t superres_scale_denominator
Definition: encoder.h:442
int superres_qthresh
Definition: encoder.h:431
Temporal filter info for a gop.
Definition: temporal_filter.h:156
Frame level Two pass status and control data.
Definition: firstpass.h:463
Two pass status and control data.
Definition: firstpass.h:420
Parameters related to temporal filtering.
Definition: temporal_filter.h:93
Frame time stamps.
Definition: encoder.h:2284
int64_t prev_ts_start
Definition: encoder.h:2288
int64_t first_ts_start
Definition: encoder.h:2296
int64_t prev_ts_end
Definition: encoder.h:2292
Params related to temporal dependency model.
Definition: tpl_model.h:142
Encoder flags for transform sizes and types.
Definition: encoder.h:353
bool enable_tx64
Definition: encoder.h:357
bool use_inter_dct_only
Definition: encoder.h:380
bool enable_flip_idtx
Definition: encoder.h:361
bool use_intra_default_tx_only
Definition: encoder.h:385
bool use_intra_dct_only
Definition: encoder.h:375
bool enable_rect_tx
Definition: encoder.h:365
bool reduced_tx_type_set
Definition: encoder.h:370
bool enable_tx_size_search
Definition: encoder.h:389
Thresholds for variance based partitioning.
Definition: encoder.h:1333
int64_t threshold_minmax
Definition: encoder.h:1348
Parameters used for winner mode processing.
Definition: encoder.h:2080
Generic fixed size buffer structure.
Definition: aom_encoder.h:87
Struct used to hold inter mode data for fast tx search.
Definition: encoder.h:1238
RD_STATS rd_cost_arr[MAX_INTER_MODES]
Definition: encoder.h:1267
int64_t est_rd_arr[MAX_INTER_MODES]
Definition: encoder.h:1259
int64_t sse_arr[MAX_INTER_MODES]
Definition: encoder.h:1255
RD_STATS rd_cost_y_arr[MAX_INTER_MODES]
Definition: encoder.h:1271
RD_STATS rd_cost_uv_arr[MAX_INTER_MODES]
Definition: encoder.h:1275
MB_MODE_INFO mbmi_arr[MAX_INTER_MODES]
Definition: encoder.h:1247
RdIdxPair rd_idx_pair_arr[MAX_INTER_MODES]
Definition: encoder.h:1263
int mode_rate_arr[MAX_INTER_MODES]
Definition: encoder.h:1251
int num
Definition: encoder.h:1243
Encoder's parameters related to the current coding block.
Definition: block.h:848
MB_MODE_INFO_EXT_FRAME * mbmi_ext_frame
Finalized mbmi_ext for the whole frame.
Definition: block.h:880
Variables related to current coding block.
Definition: blockd.h:577
const struct scale_factors * block_ref_scale_factors[2]
Definition: blockd.h:694
YV12 frame buffer data structure.
Definition: yv12config.h:39