AOMedia AV1 Codec
encoder.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2016, Alliance for Open Media. All rights reserved.
3 *
4 * This source code is subject to the terms of the BSD 2 Clause License and
5 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
6 * was not distributed with this source code in the LICENSE file, you can
7 * obtain it at www.aomedia.org/license/software. If the Alliance for Open
8 * Media Patent License 1.0 was not distributed with this source code in the
9 * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
10 */
11
15#ifndef AOM_AV1_ENCODER_ENCODER_H_
16#define AOM_AV1_ENCODER_ENCODER_H_
17
18#include <stdbool.h>
19#include <stdio.h>
20
21#include "config/aom_config.h"
22
23#include "aom/aomcx.h"
24#include "aom_util/aom_pthread.h"
25
26#include "av1/common/alloccommon.h"
27#include "av1/common/av1_common_int.h"
28#include "av1/common/blockd.h"
29#include "av1/common/entropymode.h"
30#include "av1/common/enums.h"
31#include "av1/common/reconintra.h"
32#include "av1/common/resize.h"
33#include "av1/common/thread_common.h"
34#include "av1/common/timing.h"
35
36#include "av1/encoder/aq_cyclicrefresh.h"
37#include "av1/encoder/av1_quantize.h"
38#include "av1/encoder/block.h"
39#include "av1/encoder/context_tree.h"
40#include "av1/encoder/enc_enums.h"
41#include "av1/encoder/encodemb.h"
42#include "av1/encoder/external_partition.h"
43#include "av1/encoder/firstpass.h"
44#include "av1/encoder/global_motion.h"
45#include "av1/encoder/level.h"
47#include "av1/encoder/mcomp.h"
48#include "av1/encoder/pickcdef.h"
49#include "av1/encoder/ratectrl.h"
50#include "av1/encoder/rd.h"
52#include "av1/encoder/svc_layercontext.h"
53#include "av1/encoder/temporal_filter.h"
54#if CONFIG_THREE_PASS
55#include "av1/encoder/thirdpass.h"
56#endif
57#include "av1/encoder/tokenize.h"
58#include "av1/encoder/tpl_model.h"
59#include "av1/encoder/av1_noise_estimate.h"
60#include "av1/encoder/bitstream.h"
61
62#if CONFIG_INTERNAL_STATS
63#include "aom_dsp/ssim.h"
64#endif
65#include "aom_dsp/variance.h"
66#if CONFIG_DENOISE
67#include "aom_dsp/noise_model.h"
68#endif
69#if CONFIG_TUNE_VMAF
70#include "av1/encoder/tune_vmaf.h"
71#endif
72#if CONFIG_AV1_TEMPORAL_DENOISING
73#include "av1/encoder/av1_temporal_denoiser.h"
74#endif
75#if CONFIG_TUNE_BUTTERAUGLI
76#include "av1/encoder/tune_butteraugli.h"
77#endif
78
79#include "aom/internal/aom_codec_internal.h"
80
81#ifdef __cplusplus
82extern "C" {
83#endif
84
85// TODO(yunqing, any): Added suppression tag to quiet Doxygen warnings. Need to
86// adjust it while we work on documentation.
88// Number of frames required to test for scene cut detection
89#define SCENE_CUT_KEY_TEST_INTERVAL 16
90
91// Lookahead index threshold to enable temporal filtering for second arf.
92#define TF_LOOKAHEAD_IDX_THR 7
93
94#define HDR_QP_LEVELS 10
95#define CHROMA_CB_QP_SCALE 1.04
96#define CHROMA_CR_QP_SCALE 1.04
97#define CHROMA_QP_SCALE -0.46
98#define CHROMA_QP_OFFSET 9.26
99#define QP_SCALE_FACTOR 2.0
100#define DISABLE_HDR_LUMA_DELTAQ 1
101
102// Rational number with an int64 numerator
103// This structure holds a fractional value
104typedef struct aom_rational64 {
105 int64_t num; // fraction numerator
106 int den; // fraction denominator
107} aom_rational64_t; // alias for struct aom_rational
108
109enum {
110 // Good Quality Fast Encoding. The encoder balances quality with the amount of
111 // time it takes to encode the output. Speed setting controls how fast.
112 GOOD,
113 // Realtime Fast Encoding. Will force some restrictions on bitrate
114 // constraints.
115 REALTIME,
116 // All intra mode. All the frames are coded as intra frames.
117 ALLINTRA
118} UENUM1BYTE(MODE);
119
120enum {
121 FRAMEFLAGS_KEY = 1 << 0,
122 FRAMEFLAGS_GOLDEN = 1 << 1,
123 FRAMEFLAGS_BWDREF = 1 << 2,
124 // TODO(zoeliu): To determine whether a frame flag is needed for ALTREF2_FRAME
125 FRAMEFLAGS_ALTREF = 1 << 3,
126 FRAMEFLAGS_INTRAONLY = 1 << 4,
127 FRAMEFLAGS_SWITCH = 1 << 5,
128 FRAMEFLAGS_ERROR_RESILIENT = 1 << 6,
129} UENUM1BYTE(FRAMETYPE_FLAGS);
130
131#if CONFIG_FPMT_TEST
132enum {
133 PARALLEL_ENCODE = 0,
134 PARALLEL_SIMULATION_ENCODE,
135 NUM_FPMT_TEST_ENCODES
136} UENUM1BYTE(FPMT_TEST_ENC_CFG);
137#endif // CONFIG_FPMT_TEST
138// 0 level frames are sometimes used for rate control purposes, but for
139// reference mapping purposes, the minimum level should be 1.
140#define MIN_PYR_LEVEL 1
141static inline int get_true_pyr_level(int frame_level, int frame_order,
142 int max_layer_depth) {
143 if (frame_order == 0) {
144 // Keyframe case
145 return MIN_PYR_LEVEL;
146 } else if (frame_level == MAX_ARF_LAYERS) {
147 // Leaves
148 return max_layer_depth;
149 } else if (frame_level == (MAX_ARF_LAYERS + 1)) {
150 // Altrefs
151 return MIN_PYR_LEVEL;
152 }
153 return AOMMAX(MIN_PYR_LEVEL, frame_level);
154}
155
156enum {
157 NO_AQ = 0,
158 VARIANCE_AQ = 1,
159 COMPLEXITY_AQ = 2,
160 CYCLIC_REFRESH_AQ = 3,
161 AQ_MODE_COUNT // This should always be the last member of the enum
162} UENUM1BYTE(AQ_MODE);
163enum {
164 NO_DELTA_Q = 0,
165 DELTA_Q_OBJECTIVE = 1, // Modulation to improve objective quality
166 DELTA_Q_PERCEPTUAL = 2, // Modulation to improve video perceptual quality
167 DELTA_Q_PERCEPTUAL_AI = 3, // Perceptual quality opt for all intra mode
168 DELTA_Q_USER_RATING_BASED = 4, // User rating based delta q mode
169 DELTA_Q_HDR = 5, // QP adjustment based on HDR block pixel average
170 DELTA_Q_VARIANCE_BOOST =
171 6, // Variance Boost style modulation for all intra mode
172 DELTA_Q_MODE_COUNT // This should always be the last member of the enum
173} UENUM1BYTE(DELTAQ_MODE);
174
175enum {
176 RESIZE_NONE = 0, // No frame resizing allowed.
177 RESIZE_FIXED = 1, // All frames are coded at the specified scale.
178 RESIZE_RANDOM = 2, // All frames are coded at a random scale.
179 RESIZE_DYNAMIC = 3, // Frames coded at lower scale based on rate control.
180 RESIZE_MODES
181} UENUM1BYTE(RESIZE_MODE);
182
183enum {
184 SS_CFG_SRC = 0,
185 SS_CFG_LOOKAHEAD = 1,
186 SS_CFG_FPF = 2,
187 SS_CFG_TOTAL = 3
188} UENUM1BYTE(SS_CFG_OFFSET);
189
190enum {
191 DISABLE_SCENECUT, // For LAP, lag_in_frames < 19
192 ENABLE_SCENECUT_MODE_1, // For LAP, lag_in_frames >=19 and < 33
193 ENABLE_SCENECUT_MODE_2 // For twopass and LAP - lag_in_frames >=33
194} UENUM1BYTE(SCENECUT_MODE);
195
196#define MAX_VBR_CORPUS_COMPLEXITY 10000
197
198typedef enum {
199 MOD_FP, // First pass
200 MOD_TF, // Temporal filtering
201 MOD_TPL, // TPL
202 MOD_GME, // Global motion estimation
203 MOD_ENC, // Encode stage
204 MOD_LPF, // Deblocking loop filter
205 MOD_CDEF_SEARCH, // CDEF search
206 MOD_CDEF, // CDEF frame
207 MOD_LR, // Loop restoration filtering
208 MOD_PACK_BS, // Pack bitstream
209 MOD_FRAME_ENC, // Frame Parallel encode
210 MOD_AI, // All intra
211 NUM_MT_MODULES
212} MULTI_THREADED_MODULES;
213
215
229
240
245typedef enum {
246 SKIP_APPLY_RESTORATION = 1 << 0,
247 SKIP_APPLY_SUPERRES = 1 << 1,
248 SKIP_APPLY_CDEF = 1 << 2,
249 SKIP_APPLY_LOOPFILTER = 1 << 3,
251
255typedef struct {
259 RESIZE_MODE resize_mode;
270} ResizeCfg;
271
299
354
396
427
463
467typedef struct {
472
477
482
488
495
500
505
510
515
521
635
637typedef struct {
638 // Indicates the number of frames lag before encoding is started.
639 int lag_in_frames;
640 // Indicates the minimum gf/arf interval to be used.
641 int min_gf_interval;
642 // Indicates the maximum gf/arf interval to be used.
643 int max_gf_interval;
644 // Indicates the minimum height for GF group pyramid structure to be used.
645 int gf_min_pyr_height;
646 // Indicates the maximum height for GF group pyramid structure to be used.
647 int gf_max_pyr_height;
648 // Indicates if automatic set and use of altref frames should be enabled.
649 bool enable_auto_arf;
650 // Indicates if automatic set and use of (b)ackward (r)ef (f)rames should be
651 // enabled.
652 bool enable_auto_brf;
653} GFConfig;
654
655typedef struct {
656 // Indicates the number of tile groups.
657 unsigned int num_tile_groups;
658 // Indicates the MTU size for a tile group. If mtu is non-zero,
659 // num_tile_groups is set to DEFAULT_MAX_NUM_TG.
660 unsigned int mtu;
661 // Indicates the number of tile columns in log2.
662 int tile_columns;
663 // Indicates the number of tile rows in log2.
664 int tile_rows;
665 // Indicates the number of widths in the tile_widths[] array.
666 int tile_width_count;
667 // Indicates the number of heights in the tile_heights[] array.
668 int tile_height_count;
669 // Indicates the tile widths, and may be empty.
670 int tile_widths[MAX_TILE_COLS];
671 // Indicates the tile heights, and may be empty.
672 int tile_heights[MAX_TILE_ROWS];
673 // Indicates if large scale tile coding should be used.
674 bool enable_large_scale_tile;
675 // Indicates if single tile decoding mode should be enabled.
676 bool enable_single_tile_decoding;
677 // Indicates if EXT_TILE_DEBUG should be enabled.
678 bool enable_ext_tile_debug;
679} TileConfig;
680
681typedef struct {
682 // Indicates the width of the input frame.
683 int width;
684 // Indicates the height of the input frame.
685 int height;
686 // If forced_max_frame_width is non-zero then it is used to force the maximum
687 // frame width written in write_sequence_header().
688 int forced_max_frame_width;
689 // If forced_max_frame_width is non-zero then it is used to force the maximum
690 // frame height written in write_sequence_header().
691 int forced_max_frame_height;
692 // Indicates the frame width after applying both super-resolution and resize
693 // to the coded frame.
694 int render_width;
695 // Indicates the frame height after applying both super-resolution and resize
696 // to the coded frame.
697 int render_height;
698} FrameDimensionCfg;
699
700typedef struct {
701 // Indicates if warped motion should be enabled.
702 bool enable_warped_motion;
703 // Indicates if warped motion should be evaluated or not.
704 bool allow_warped_motion;
705 // Indicates if OBMC motion should be enabled.
706 bool enable_obmc;
707} MotionModeCfg;
708
709typedef struct {
710 // Timing info for each frame.
711 aom_timing_info_t timing_info;
712 // Indicates the number of time units of a decoding clock.
713 uint32_t num_units_in_decoding_tick;
714 // Indicates if decoder model information is present in the coded sequence
715 // header.
716 bool decoder_model_info_present_flag;
717 // Indicates if display model information is present in the coded sequence
718 // header.
719 bool display_model_info_present_flag;
720 // Indicates if timing info for each frame is present.
721 bool timing_info_present;
722} DecoderModelCfg;
723
724typedef struct {
725 // Indicates the update frequency for coeff costs.
726 COST_UPDATE_TYPE coeff;
727 // Indicates the update frequency for mode costs.
728 COST_UPDATE_TYPE mode;
729 // Indicates the update frequency for mv costs.
731 // Indicates the update frequency for dv costs.
733} CostUpdateFreq;
734
735typedef struct {
736 // Indicates the maximum number of reference frames allowed per frame.
737 unsigned int max_reference_frames;
738 // Indicates if the reduced set of references should be enabled.
739 bool enable_reduced_reference_set;
740 // Indicates if one-sided compound should be enabled.
741 bool enable_onesided_comp;
742} RefFrameCfg;
743
744typedef struct {
745 // Indicates the color space that should be used.
746 aom_color_primaries_t color_primaries;
747 // Indicates the characteristics of transfer function to be used.
748 aom_transfer_characteristics_t transfer_characteristics;
749 // Indicates the matrix coefficients to be used for the transfer function.
750 aom_matrix_coefficients_t matrix_coefficients;
751 // Indicates the chroma 4:2:0 sample position info.
752 aom_chroma_sample_position_t chroma_sample_position;
753 // Indicates if a limited color range or full color range should be used.
754 aom_color_range_t color_range;
755} ColorCfg;
756
757typedef struct {
758 // Indicates if extreme motion vector unit test should be enabled or not.
759 unsigned int motion_vector_unit_test;
760 // Indicates if superblock multipass unit test should be enabled or not.
761 unsigned int sb_multipass_unit_test;
762} UnitTestCfg;
763
764typedef struct {
765 // Indicates the file path to the VMAF model.
766 const char *vmaf_model_path;
767 // Indicates the path to the film grain parameters.
768 const char *film_grain_table_filename;
769 // Indicates the visual tuning metric.
770 aom_tune_metric tuning;
771 // Indicates if the current content is screen or default type.
772 aom_tune_content content;
773 // Indicates the film grain parameters.
774 int film_grain_test_vector;
775 // Indicates the in-block distortion metric to use.
776 aom_dist_metric dist_metric;
777} TuneCfg;
778
779typedef struct {
780 // Indicates the framerate of the input video.
781 double init_framerate;
782 // Indicates the bit-depth of the input video.
783 unsigned int input_bit_depth;
784 // Indicates the maximum number of frames to be encoded.
785 unsigned int limit;
786 // Indicates the chrome subsampling x value.
787 unsigned int chroma_subsampling_x;
788 // Indicates the chrome subsampling y value.
789 unsigned int chroma_subsampling_y;
790} InputCfg;
791
792typedef struct {
793 // If true, encoder will use fixed QP offsets, that are either:
794 // - Given by the user, and stored in 'fixed_qp_offsets' array, OR
795 // - Picked automatically from cq_level.
796 int use_fixed_qp_offsets;
797 // Indicates the minimum flatness of the quantization matrix.
798 int qm_minlevel;
799 // Indicates the maximum flatness of the quantization matrix.
800 int qm_maxlevel;
801 // Indicates if adaptive quantize_b should be enabled.
802 int quant_b_adapt;
803 // Indicates the Adaptive Quantization mode to be used.
804 AQ_MODE aq_mode;
805 // Indicates the delta q mode to be used.
806 DELTAQ_MODE deltaq_mode;
807 // Indicates the delta q mode strength.
808 DELTAQ_MODE deltaq_strength;
809 // Indicates if delta quantization should be enabled in chroma planes.
810 bool enable_chroma_deltaq;
811 // Indicates if delta quantization should be enabled for hdr video
812 bool enable_hdr_deltaq;
813 // Indicates if encoding with quantization matrices should be enabled.
814 bool using_qm;
815} QuantizationCfg;
816
889
890
891typedef struct {
892 // Indicates the codec bit-depth.
893 aom_bit_depth_t bit_depth;
894 // Indicates the superblock size that should be used by the encoder.
895 aom_superblock_size_t superblock_size;
896 // Indicates if loopfilter modulation should be enabled.
897 bool enable_deltalf_mode;
898 // Indicates how CDEF should be applied.
899 CDEF_CONTROL cdef_control;
900 // Indicates if loop restoration filter should be enabled.
901 bool enable_restoration;
902 // When enabled, video mode should be used even for single frame input.
903 bool force_video_mode;
904 // Indicates if the error resiliency features should be enabled.
905 bool error_resilient_mode;
906 // Indicates if frame parallel decoding feature should be enabled.
907 bool frame_parallel_decoding_mode;
908 // Indicates if the input should be encoded as monochrome.
909 bool enable_monochrome;
910 // When enabled, the encoder will use a full header even for still pictures.
911 // When disabled, a reduced header is used for still pictures.
912 bool full_still_picture_hdr;
913 // Indicates if dual interpolation filters should be enabled.
914 bool enable_dual_filter;
915 // Indicates if frame order hint should be enabled or not.
916 bool enable_order_hint;
917 // Indicates if ref_frame_mvs should be enabled at the sequence level.
918 bool ref_frame_mvs_present;
919 // Indicates if ref_frame_mvs should be enabled at the frame level.
920 bool enable_ref_frame_mvs;
921 // Indicates if interintra compound mode is enabled.
922 bool enable_interintra_comp;
923 // Indicates if global motion should be enabled.
924 bool enable_global_motion;
925 // Indicates if palette should be enabled.
926 bool enable_palette;
927} ToolCfg;
928
933typedef struct AV1EncoderConfig {
935 // Configuration related to the input video.
936 InputCfg input_cfg;
937
938 // Configuration related to frame-dimensions.
939 FrameDimensionCfg frm_dim_cfg;
940
946
951
957
958 // Configuration related to Quantization.
959 QuantizationCfg q_cfg;
960
961 // Internal frame size scaling.
962 ResizeCfg resize_cfg;
963
964 // Frame Super-Resolution size scaling.
965 SuperResCfg superres_cfg;
966
974
975 // Configuration related to encoder toolsets.
976 ToolCfg tool_cfg;
977
978 // Configuration related to Group of frames.
979 GFConfig gf_cfg;
980
981 // Tile related configuration parameters.
982 TileConfig tile_cfg;
983
984 // Configuration related to Tune.
985 TuneCfg tune_cfg;
986
987 // Configuration related to color.
988 ColorCfg color_cfg;
989
990 // Configuration related to decoder model.
991 DecoderModelCfg dec_model_cfg;
992
993 // Configuration related to reference frames.
994 RefFrameCfg ref_frm_cfg;
995
996 // Configuration related to unit tests.
997 UnitTestCfg unit_test_cfg;
998
999 // Flags related to motion mode.
1000 MotionModeCfg motion_mode_cfg;
1001
1002 // Flags related to intra mode search.
1003 IntraModeCfg intra_mode_cfg;
1004
1005 // Flags related to transform size/type.
1006 TxfmSizeTypeCfg txfm_cfg;
1007
1008 // Flags related to compound type.
1009 CompoundTypeCfg comp_type_cfg;
1010
1011 // Partition related information.
1012 PartitionCfg part_cfg;
1013
1014 // Configuration related to frequency of cost update.
1015 CostUpdateFreq cost_upd_freq;
1016
1017#if CONFIG_DENOISE
1018 // Indicates the noise level.
1019 float noise_level;
1020 // Indicates the the denoisers block size.
1021 int noise_block_size;
1022 // Indicates whether to apply denoising to the frame to be encoded
1023 int enable_dnl_denoising;
1024#endif
1025
1026#if CONFIG_AV1_TEMPORAL_DENOISING
1027 // Noise sensitivity.
1028 int noise_sensitivity;
1029#endif
1030 // Bit mask to specify which tier each of the 32 possible operating points
1031 // conforms to.
1032 unsigned int tier_mask;
1033
1034 // Indicates the number of pixels off the edge of a reference frame we're
1035 // allowed to go when forming an inter prediction.
1036 int border_in_pixels;
1037
1038 // Indicates the maximum number of threads that may be used by the encoder.
1039 int max_threads;
1040
1041 // Indicates the speed preset to be used.
1042 int speed;
1043
1044 // Indicates the target sequence level index for each operating point(OP).
1045 AV1_LEVEL target_seq_level_idx[MAX_NUM_OPERATING_POINTS];
1046
1047 // Indicates the bitstream profile to be used.
1048 BITSTREAM_PROFILE profile;
1049
1060
1061 // Total number of encoding passes.
1062 int passes;
1063
1064 // the name of the second pass output file when passes > 2
1065 const char *two_pass_output;
1066
1067 // the name of the second pass log file when passes > 2
1068 const char *second_pass_log;
1069
1070 // Indicates if the encoding is GOOD or REALTIME.
1071 MODE mode;
1072
1073 // Indicates if row-based multi-threading should be enabled or not.
1074 bool row_mt;
1075
1076 // Indicates if frame parallel multi-threading should be enabled or not.
1077 bool fp_mt;
1078
1079 // Indicates if 16bit frame buffers are to be used i.e., the content is >
1080 // 8-bit.
1081 bool use_highbitdepth;
1082
1083 // Indicates the bitstream syntax mode. 0 indicates bitstream is saved as
1084 // Section 5 bitstream, while 1 indicates the bitstream is saved in Annex - B
1085 // format.
1086 bool save_as_annexb;
1087
1088 // The path for partition stats reading and writing, used in the experiment
1089 // CONFIG_PARTITION_SEARCH_ORDER.
1090 const char *partition_info_path;
1091
1092 // The flag that indicates whether we use an external rate distribution to
1093 // guide adaptive quantization. It requires --deltaq-mode=3. The rate
1094 // distribution map file name is stored in |rate_distribution_info|.
1095 unsigned int enable_rate_guide_deltaq;
1096
1097 // The input file of rate distribution information used in all intra mode
1098 // to determine delta quantization.
1099 const char *rate_distribution_info;
1100
1101 // Exit the encoder when it fails to encode to a given level.
1102 int strict_level_conformance;
1103
1104 // Max depth for the GOP after a key frame
1105 int kf_max_pyr_height;
1106
1107 // A flag to control if we enable the superblock qp sweep for a given lambda
1108 int sb_qp_sweep;
1111
1113static inline int is_lossless_requested(const RateControlCfg *const rc_cfg) {
1114 return rc_cfg->best_allowed_q == 0 && rc_cfg->worst_allowed_q == 0;
1115}
1117
1121typedef struct {
1127 int obmc_probs[FRAME_UPDATE_TYPES][BLOCK_SIZES_ALL];
1128
1134 int warped_probs[FRAME_UPDATE_TYPES];
1135
1142 int tx_type_probs[FRAME_UPDATE_TYPES][TX_SIZES_ALL][TX_TYPES];
1143
1150 int switchable_interp_probs[FRAME_UPDATE_TYPES][SWITCHABLE_FILTER_CONTEXTS]
1151 [SWITCHABLE_FILTERS];
1153
1155
1156typedef struct FRAME_COUNTS {
1157// Note: This structure should only contain 'unsigned int' fields, or
1158// aggregates built solely from 'unsigned int' fields/elements
1159#if CONFIG_ENTROPY_STATS
1160 unsigned int kf_y_mode[KF_MODE_CONTEXTS][KF_MODE_CONTEXTS][INTRA_MODES];
1161 unsigned int angle_delta[DIRECTIONAL_MODES][2 * MAX_ANGLE_DELTA + 1];
1162 unsigned int y_mode[BLOCK_SIZE_GROUPS][INTRA_MODES];
1163 unsigned int uv_mode[CFL_ALLOWED_TYPES][INTRA_MODES][UV_INTRA_MODES];
1164 unsigned int cfl_sign[CFL_JOINT_SIGNS];
1165 unsigned int cfl_alpha[CFL_ALPHA_CONTEXTS][CFL_ALPHABET_SIZE];
1166 unsigned int palette_y_mode[PALATTE_BSIZE_CTXS][PALETTE_Y_MODE_CONTEXTS][2];
1167 unsigned int palette_uv_mode[PALETTE_UV_MODE_CONTEXTS][2];
1168 unsigned int palette_y_size[PALATTE_BSIZE_CTXS][PALETTE_SIZES];
1169 unsigned int palette_uv_size[PALATTE_BSIZE_CTXS][PALETTE_SIZES];
1170 unsigned int palette_y_color_index[PALETTE_SIZES]
1171 [PALETTE_COLOR_INDEX_CONTEXTS]
1172 [PALETTE_COLORS];
1173 unsigned int palette_uv_color_index[PALETTE_SIZES]
1174 [PALETTE_COLOR_INDEX_CONTEXTS]
1175 [PALETTE_COLORS];
1176 unsigned int partition[PARTITION_CONTEXTS][EXT_PARTITION_TYPES];
1177 unsigned int txb_skip[TOKEN_CDF_Q_CTXS][TX_SIZES][TXB_SKIP_CONTEXTS][2];
1178 unsigned int eob_extra[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1179 [EOB_COEF_CONTEXTS][2];
1180 unsigned int dc_sign[PLANE_TYPES][DC_SIGN_CONTEXTS][2];
1181 unsigned int coeff_lps[TX_SIZES][PLANE_TYPES][BR_CDF_SIZE - 1][LEVEL_CONTEXTS]
1182 [2];
1183 unsigned int eob_flag[TX_SIZES][PLANE_TYPES][EOB_COEF_CONTEXTS][2];
1184 unsigned int eob_multi16[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][5];
1185 unsigned int eob_multi32[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][6];
1186 unsigned int eob_multi64[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][7];
1187 unsigned int eob_multi128[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][8];
1188 unsigned int eob_multi256[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][9];
1189 unsigned int eob_multi512[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][10];
1190 unsigned int eob_multi1024[TOKEN_CDF_Q_CTXS][PLANE_TYPES][2][11];
1191 unsigned int coeff_lps_multi[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1192 [LEVEL_CONTEXTS][BR_CDF_SIZE];
1193 unsigned int coeff_base_multi[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1194 [SIG_COEF_CONTEXTS][NUM_BASE_LEVELS + 2];
1195 unsigned int coeff_base_eob_multi[TOKEN_CDF_Q_CTXS][TX_SIZES][PLANE_TYPES]
1196 [SIG_COEF_CONTEXTS_EOB][NUM_BASE_LEVELS + 1];
1197 unsigned int newmv_mode[NEWMV_MODE_CONTEXTS][2];
1198 unsigned int zeromv_mode[GLOBALMV_MODE_CONTEXTS][2];
1199 unsigned int refmv_mode[REFMV_MODE_CONTEXTS][2];
1200 unsigned int drl_mode[DRL_MODE_CONTEXTS][2];
1201 unsigned int inter_compound_mode[INTER_MODE_CONTEXTS][INTER_COMPOUND_MODES];
1202 unsigned int wedge_idx[BLOCK_SIZES_ALL][16];
1203 unsigned int interintra[BLOCK_SIZE_GROUPS][2];
1204 unsigned int interintra_mode[BLOCK_SIZE_GROUPS][INTERINTRA_MODES];
1205 unsigned int wedge_interintra[BLOCK_SIZES_ALL][2];
1206 unsigned int compound_type[BLOCK_SIZES_ALL][MASKED_COMPOUND_TYPES];
1207 unsigned int motion_mode[BLOCK_SIZES_ALL][MOTION_MODES];
1208 unsigned int obmc[BLOCK_SIZES_ALL][2];
1209 unsigned int intra_inter[INTRA_INTER_CONTEXTS][2];
1210 unsigned int comp_inter[COMP_INTER_CONTEXTS][2];
1211 unsigned int comp_ref_type[COMP_REF_TYPE_CONTEXTS][2];
1212 unsigned int uni_comp_ref[UNI_COMP_REF_CONTEXTS][UNIDIR_COMP_REFS - 1][2];
1213 unsigned int single_ref[REF_CONTEXTS][SINGLE_REFS - 1][2];
1214 unsigned int comp_ref[REF_CONTEXTS][FWD_REFS - 1][2];
1215 unsigned int comp_bwdref[REF_CONTEXTS][BWD_REFS - 1][2];
1216 unsigned int intrabc[2];
1217
1218 unsigned int txfm_partition[TXFM_PARTITION_CONTEXTS][2];
1219 unsigned int intra_tx_size[MAX_TX_CATS][TX_SIZE_CONTEXTS][MAX_TX_DEPTH + 1];
1220 unsigned int skip_mode[SKIP_MODE_CONTEXTS][2];
1221 unsigned int skip_txfm[SKIP_CONTEXTS][2];
1222 unsigned int compound_index[COMP_INDEX_CONTEXTS][2];
1223 unsigned int comp_group_idx[COMP_GROUP_IDX_CONTEXTS][2];
1224 unsigned int delta_q[DELTA_Q_PROBS][2];
1225 unsigned int delta_lf_multi[FRAME_LF_COUNT][DELTA_LF_PROBS][2];
1226 unsigned int delta_lf[DELTA_LF_PROBS][2];
1227
1228 unsigned int inter_ext_tx[EXT_TX_SETS_INTER][EXT_TX_SIZES][TX_TYPES];
1229 unsigned int intra_ext_tx[EXT_TX_SETS_INTRA][EXT_TX_SIZES][INTRA_MODES]
1230 [TX_TYPES];
1231 unsigned int filter_intra_mode[FILTER_INTRA_MODES];
1232 unsigned int filter_intra[BLOCK_SIZES_ALL][2];
1233 unsigned int switchable_restore[RESTORE_SWITCHABLE_TYPES];
1234 unsigned int wiener_restore[2];
1235 unsigned int sgrproj_restore[2];
1236#endif // CONFIG_ENTROPY_STATS
1237
1238 unsigned int switchable_interp[SWITCHABLE_FILTER_CONTEXTS]
1239 [SWITCHABLE_FILTERS];
1240} FRAME_COUNTS;
1241
1242#define INTER_MODE_RD_DATA_OVERALL_SIZE 6400
1243
1244typedef struct {
1245 int ready;
1246 double a;
1247 double b;
1248 double dist_mean;
1249 double ld_mean;
1250 double sse_mean;
1251 double sse_sse_mean;
1252 double sse_ld_mean;
1253 int num;
1254 double dist_sum;
1255 double ld_sum;
1256 double sse_sum;
1257 double sse_sse_sum;
1258 double sse_ld_sum;
1259} InterModeRdModel;
1260
1261typedef struct {
1262 int idx;
1263 int64_t rd;
1264} RdIdxPair;
1265// TODO(angiebird): This is an estimated size. We still need to figure what is
1266// the maximum number of modes.
1267#define MAX_INTER_MODES 1024
1268// TODO(any): rename this struct to something else. There is already another
1269// struct called inter_mode_info, which makes this terribly confusing.
1277typedef struct inter_modes_info {
1282 int num;
1286 MB_MODE_INFO mbmi_arr[MAX_INTER_MODES];
1290 int mode_rate_arr[MAX_INTER_MODES];
1294 int64_t sse_arr[MAX_INTER_MODES];
1298 int64_t est_rd_arr[MAX_INTER_MODES];
1302 RdIdxPair rd_idx_pair_arr[MAX_INTER_MODES];
1306 RD_STATS rd_cost_arr[MAX_INTER_MODES];
1310 RD_STATS rd_cost_y_arr[MAX_INTER_MODES];
1314 RD_STATS rd_cost_uv_arr[MAX_INTER_MODES];
1316
1318typedef struct {
1319 // TODO(kyslov): consider changing to 64bit
1320
1321 // This struct is used for computing variance in choose_partitioning(), where
1322 // the max number of samples within a superblock is 32x32 (with 4x4 avg).
1323 // With 8bit bitdepth, uint32_t is enough for sum_square_error (2^8 * 2^8 * 32
1324 // * 32 = 2^26). For high bitdepth we need to consider changing this to 64 bit
1325 uint32_t sum_square_error;
1326 int32_t sum_error;
1327 int log2_count;
1328 int variance;
1329} VPartVar;
1330
1331typedef struct {
1332 VPartVar none;
1333 VPartVar horz[2];
1334 VPartVar vert[2];
1335} VPVariance;
1336
1337typedef struct {
1338 VPVariance part_variances;
1339 VPartVar split[4];
1340} VP4x4;
1341
1342typedef struct {
1343 VPVariance part_variances;
1344 VP4x4 split[4];
1345} VP8x8;
1346
1347typedef struct {
1348 VPVariance part_variances;
1349 VP8x8 split[4];
1350} VP16x16;
1351
1352typedef struct {
1353 VPVariance part_variances;
1354 VP16x16 split[4];
1355} VP32x32;
1356
1357typedef struct {
1358 VPVariance part_variances;
1359 VP32x32 split[4];
1360} VP64x64;
1361
1362typedef struct {
1363 VPVariance part_variances;
1364 VP64x64 *split;
1365} VP128x128;
1366
1368
1372typedef struct {
1381 int64_t thresholds[5];
1382
1389
1393typedef struct {
1394#if CONFIG_MULTITHREAD
1399 pthread_mutex_t *mutex_;
1400 pthread_cond_t *cond_;
1402#endif // CONFIG_MULTITHREAD
1426 int rows;
1436
1438
1439// TODO(jingning) All spatially adaptive variables should go to TileDataEnc.
1440typedef struct TileDataEnc {
1441 TileInfo tile_info;
1442 DECLARE_ALIGNED(16, FRAME_CONTEXT, tctx);
1443 FRAME_CONTEXT *row_ctx;
1444 uint64_t abs_sum_level;
1445 uint8_t allow_update_cdf;
1446 InterModeRdModel inter_mode_rd_models[BLOCK_SIZES_ALL];
1447 AV1EncRowMultiThreadSync row_mt_sync;
1448 MV firstpass_top_mv;
1449} TileDataEnc;
1450
1451typedef struct RD_COUNTS {
1452 int compound_ref_used_flag;
1453 int skip_mode_used_flag;
1454 int tx_type_used[TX_SIZES_ALL][TX_TYPES];
1455 int obmc_used[BLOCK_SIZES_ALL][2];
1456 int warped_used[2];
1457 int newmv_or_intra_blocks;
1458 uint64_t seg_tmp_pred_cost[2];
1459} RD_COUNTS;
1460
1461typedef struct ThreadData {
1462 MACROBLOCK mb;
1463 MvCosts *mv_costs_alloc;
1464 IntraBCMVCosts *dv_costs_alloc;
1465 RD_COUNTS rd_counts;
1466 FRAME_COUNTS *counts;
1467 PC_TREE_SHARED_BUFFERS shared_coeff_buf;
1468 SIMPLE_MOTION_DATA_TREE *sms_tree;
1469 SIMPLE_MOTION_DATA_TREE *sms_root;
1470 uint32_t *hash_value_buffer[2][2];
1471 OBMCBuffer obmc_buffer;
1472 PALETTE_BUFFER *palette_buffer;
1473 CompoundTypeRdBuffers comp_rd_buffer;
1474 CONV_BUF_TYPE *tmp_conv_dst;
1475 uint64_t abs_sum_level;
1476 uint8_t *tmp_pred_bufs[2];
1477 uint8_t *wiener_tmp_pred_buf;
1478 int intrabc_used;
1479 int deltaq_used;
1480 int coefficient_size;
1481 int max_mv_magnitude;
1482 int interp_filter_selected[SWITCHABLE];
1483 FRAME_CONTEXT *tctx;
1484 VP64x64 *vt64x64;
1485 int32_t num_64x64_blocks;
1486 PICK_MODE_CONTEXT *firstpass_ctx;
1487 TemporalFilterData tf_data;
1488 TplBuffers tpl_tmp_buffers;
1489 TplTxfmStats tpl_txfm_stats;
1490 GlobalMotionData gm_data;
1491 // Pointer to the array of structures to store gradient information of each
1492 // pixel in a superblock. The buffer constitutes of MAX_SB_SQUARE pixel level
1493 // structures for each of the plane types (PLANE_TYPE_Y and PLANE_TYPE_UV).
1494 PixelLevelGradientInfo *pixel_gradient_info;
1495 // Pointer to the array of structures to store source variance information of
1496 // each 4x4 sub-block in a superblock. Block4x4VarInfo structure is used to
1497 // store source variance and log of source variance of each 4x4 sub-block
1498 // for subsequent retrieval.
1499 Block4x4VarInfo *src_var_info_of_4x4_sub_blocks;
1500 // Pointer to pc tree root.
1501 PC_TREE *pc_root;
1502} ThreadData;
1503
1504struct EncWorkerData;
1505
1507
1511typedef struct {
1534
1538 int thread_id_to_tile_id[MAX_NUM_THREADS];
1539
1545
1551
1557
1564
1571
1572#if CONFIG_MULTITHREAD
1576 pthread_mutex_t *mutex_;
1580 pthread_cond_t *cond_;
1581#endif
1582
1590 void (*sync_read_ptr)(AV1EncRowMultiThreadSync *const, int, int);
1594 void (*sync_write_ptr)(AV1EncRowMultiThreadSync *const, int, int, int);
1597
1601typedef struct {
1602#if CONFIG_MULTITHREAD
1606 pthread_mutex_t *mutex_;
1610 pthread_cond_t *cond_;
1611#endif
1612
1624 void (*intra_sync_write_ptr)(AV1EncRowMultiThreadSync *const, int, int, int);
1627
1631#define NUM_RECODES_PER_FRAME 10
1632
1636#define MAX_PARALLEL_FRAMES 4
1637
1642typedef struct RestoreStateBuffers {
1646 uint16_t *cdef_srcbuf;
1647
1651 uint16_t *cdef_colbuf[MAX_MB_PLANE];
1652
1656 int32_t *rst_tmpbuf;
1657
1661 RestorationLineBuffers *rlbs;
1663
1684
1690typedef struct {
1695 RestUnitSearchInfo *rusi[MAX_MB_PLANE];
1696
1700 int16_t *dgd_avg;
1702
1711
1715 int num_mod_workers[NUM_MT_MODULES];
1716
1720 AVxWorker *workers;
1721
1726 struct EncWorkerData *tile_thr_data;
1727
1731 AV1CdefWorkerData *cdef_worker;
1732
1738
1743
1749
1753typedef struct MultiThreadInfo {
1758
1762 int num_mod_workers[NUM_MT_MODULES];
1763
1767 AVxWorker *workers;
1768
1773 struct EncWorkerData *tile_thr_data;
1774
1780
1785
1790
1796
1800 AV1TplRowMultiThreadInfo tpl_row_mt;
1801
1805 AV1LfSync lf_row_sync;
1806
1810 AV1LrSync lr_row_sync;
1811
1815 AV1EncPackBSSync pack_bs_sync;
1816
1820 AV1GlobalMotionSync gm_sync;
1821
1825 AV1TemporalFilterSync tf_sync;
1826
1830 AV1CdefSync cdef_sync;
1831
1835 AV1CdefWorkerData *cdef_worker;
1836
1841
1848
1850
1851typedef struct ActiveMap {
1852 int enabled;
1853 int update;
1854 unsigned char *map;
1855} ActiveMap;
1856
1858
1862typedef struct {
1867 double cs_rate_array[32];
1877
1879
1880#if CONFIG_INTERNAL_STATS
1881// types of stats
1882enum {
1883 STAT_Y,
1884 STAT_U,
1885 STAT_V,
1886 STAT_ALL,
1887 NUM_STAT_TYPES // This should always be the last member of the enum
1888} UENUM1BYTE(StatType);
1889
1890typedef struct IMAGE_STAT {
1891 double stat[NUM_STAT_TYPES];
1892 double worst;
1893} ImageStat;
1894#endif // CONFIG_INTERNAL_STATS
1895
1896typedef struct {
1897 int ref_count;
1898 YV12_BUFFER_CONFIG buf;
1899} EncRefCntBuffer;
1900
1902
1923
1925
1926#if CONFIG_COLLECT_PARTITION_STATS
1927typedef struct FramePartitionTimingStats {
1928 int partition_decisions[6][EXT_PARTITION_TYPES];
1929 int partition_attempts[6][EXT_PARTITION_TYPES];
1930 int64_t partition_times[6][EXT_PARTITION_TYPES];
1931
1932 int partition_redo;
1933} FramePartitionTimingStats;
1934#endif // CONFIG_COLLECT_PARTITION_STATS
1935
1936#if CONFIG_COLLECT_COMPONENT_TIMING
1937#include "aom_ports/aom_timer.h"
1938// Adjust the following to add new components.
1939enum {
1940 av1_encode_strategy_time,
1941 av1_get_one_pass_rt_params_time,
1942 av1_get_second_pass_params_time,
1943 denoise_and_encode_time,
1944 apply_filtering_time,
1945 av1_tpl_setup_stats_time,
1946 encode_frame_to_data_rate_time,
1947 encode_with_or_without_recode_time,
1948 loop_filter_time,
1949 cdef_time,
1950 loop_restoration_time,
1951 av1_pack_bitstream_final_time,
1952 av1_encode_frame_time,
1953 av1_compute_global_motion_time,
1954 av1_setup_motion_field_time,
1955 encode_sb_row_time,
1956
1957 rd_pick_partition_time,
1958 rd_use_partition_time,
1959 choose_var_based_partitioning_time,
1960 av1_prune_partitions_time,
1961 none_partition_search_time,
1962 split_partition_search_time,
1963 rectangular_partition_search_time,
1964 ab_partitions_search_time,
1965 rd_pick_4partition_time,
1966 encode_sb_time,
1967
1968 rd_pick_sb_modes_time,
1969 av1_rd_pick_intra_mode_sb_time,
1970 av1_rd_pick_inter_mode_sb_time,
1971 set_params_rd_pick_inter_mode_time,
1972 skip_inter_mode_time,
1973 handle_inter_mode_time,
1974 evaluate_motion_mode_for_winner_candidates_time,
1975 do_tx_search_time,
1976 handle_intra_mode_time,
1977 refine_winner_mode_tx_time,
1978 av1_search_palette_mode_time,
1979 handle_newmv_time,
1980 compound_type_rd_time,
1981 interpolation_filter_search_time,
1982 motion_mode_rd_time,
1983
1984 nonrd_use_partition_time,
1985 pick_sb_modes_nonrd_time,
1986 hybrid_intra_mode_search_time,
1987 nonrd_pick_inter_mode_sb_time,
1988 encode_b_nonrd_time,
1989
1990 kTimingComponents,
1991} UENUM1BYTE(TIMING_COMPONENT);
1992
1993static inline char const *get_component_name(int index) {
1994 switch (index) {
1995 case av1_encode_strategy_time: return "av1_encode_strategy_time";
1996 case av1_get_one_pass_rt_params_time:
1997 return "av1_get_one_pass_rt_params_time";
1998 case av1_get_second_pass_params_time:
1999 return "av1_get_second_pass_params_time";
2000 case denoise_and_encode_time: return "denoise_and_encode_time";
2001 case apply_filtering_time: return "apply_filtering_time";
2002 case av1_tpl_setup_stats_time: return "av1_tpl_setup_stats_time";
2003 case encode_frame_to_data_rate_time:
2004 return "encode_frame_to_data_rate_time";
2005 case encode_with_or_without_recode_time:
2006 return "encode_with_or_without_recode_time";
2007 case loop_filter_time: return "loop_filter_time";
2008 case cdef_time: return "cdef_time";
2009 case loop_restoration_time: return "loop_restoration_time";
2010 case av1_pack_bitstream_final_time: return "av1_pack_bitstream_final_time";
2011 case av1_encode_frame_time: return "av1_encode_frame_time";
2012 case av1_compute_global_motion_time:
2013 return "av1_compute_global_motion_time";
2014 case av1_setup_motion_field_time: return "av1_setup_motion_field_time";
2015 case encode_sb_row_time: return "encode_sb_row_time";
2016
2017 case rd_pick_partition_time: return "rd_pick_partition_time";
2018 case rd_use_partition_time: return "rd_use_partition_time";
2019 case choose_var_based_partitioning_time:
2020 return "choose_var_based_partitioning_time";
2021 case av1_prune_partitions_time: return "av1_prune_partitions_time";
2022 case none_partition_search_time: return "none_partition_search_time";
2023 case split_partition_search_time: return "split_partition_search_time";
2024 case rectangular_partition_search_time:
2025 return "rectangular_partition_search_time";
2026 case ab_partitions_search_time: return "ab_partitions_search_time";
2027 case rd_pick_4partition_time: return "rd_pick_4partition_time";
2028 case encode_sb_time: return "encode_sb_time";
2029
2030 case rd_pick_sb_modes_time: return "rd_pick_sb_modes_time";
2031 case av1_rd_pick_intra_mode_sb_time:
2032 return "av1_rd_pick_intra_mode_sb_time";
2033 case av1_rd_pick_inter_mode_sb_time:
2034 return "av1_rd_pick_inter_mode_sb_time";
2035 case set_params_rd_pick_inter_mode_time:
2036 return "set_params_rd_pick_inter_mode_time";
2037 case skip_inter_mode_time: return "skip_inter_mode_time";
2038 case handle_inter_mode_time: return "handle_inter_mode_time";
2039 case evaluate_motion_mode_for_winner_candidates_time:
2040 return "evaluate_motion_mode_for_winner_candidates_time";
2041 case do_tx_search_time: return "do_tx_search_time";
2042 case handle_intra_mode_time: return "handle_intra_mode_time";
2043 case refine_winner_mode_tx_time: return "refine_winner_mode_tx_time";
2044 case av1_search_palette_mode_time: return "av1_search_palette_mode_time";
2045 case handle_newmv_time: return "handle_newmv_time";
2046 case compound_type_rd_time: return "compound_type_rd_time";
2047 case interpolation_filter_search_time:
2048 return "interpolation_filter_search_time";
2049 case motion_mode_rd_time: return "motion_mode_rd_time";
2050
2051 case nonrd_use_partition_time: return "nonrd_use_partition_time";
2052 case pick_sb_modes_nonrd_time: return "pick_sb_modes_nonrd_time";
2053 case hybrid_intra_mode_search_time: return "hybrid_intra_mode_search_time";
2054 case nonrd_pick_inter_mode_sb_time: return "nonrd_pick_inter_mode_sb_time";
2055 case encode_b_nonrd_time: return "encode_b_nonrd_time";
2056
2057 default: assert(0);
2058 }
2059 return "error";
2060}
2061#endif
2062
2063// The maximum number of internal ARFs except ALTREF_FRAME
2064#define MAX_INTERNAL_ARFS (REF_FRAMES - BWDREF_FRAME - 1)
2065
2067
2071typedef struct {
2076
2082 YV12_BUFFER_CONFIG *ref_buf[REF_FRAMES];
2083
2089 int num_ref_frames[MAX_DIRECTIONS];
2090
2097 FrameDistPair reference_frames[MAX_DIRECTIONS][REF_FRAMES - 1];
2098
2107
2122
2126typedef struct {
2146 fractional_mv_step_fp *find_fractional_mv_step;
2153 search_site_config search_site_cfg[SS_CFG_TOTAL][NUM_DISTINCT_SEARCH_METHODS];
2155
2169
2177typedef struct {
2178 int width;
2181
2185typedef struct {
2189 int ref_relative_dist[INTER_REFS_PER_FRAME];
2199
2215typedef struct {
2223 unsigned int coeff_opt_thresholds[MODE_EVAL_TYPES][2];
2224
2229 TX_SIZE_SEARCH_METHOD tx_size_search_methods[MODE_EVAL_TYPES];
2230
2237 unsigned int use_transform_domain_distortion[MODE_EVAL_TYPES];
2238
2244 unsigned int tx_domain_dist_threshold[MODE_EVAL_TYPES];
2245
2251 unsigned int skip_txfm_level[MODE_EVAL_TYPES];
2252
2258 unsigned int predict_dc_level[MODE_EVAL_TYPES];
2260
2279
2326
2328
2329typedef struct {
2330 // Some misc info
2331 int high_prec;
2332 int q;
2333 int order;
2334
2335 // MV counters
2336 int inter_count;
2337 int intra_count;
2338 int default_mvs;
2339 int mv_joint_count[4];
2340 int last_bit_zero;
2341 int last_bit_nonzero;
2342
2343 // Keep track of the rates
2344 int total_mv_rate;
2345 int hp_total_mv_rate;
2346 int lp_total_mv_rate;
2347
2348 // Texture info
2349 int horz_text;
2350 int vert_text;
2351 int diag_text;
2352
2353 // Whether the current struct contains valid data
2354 int valid;
2355} MV_STATS;
2356
2357typedef struct WeberStats {
2358 int64_t mb_wiener_variance;
2359 int64_t src_variance;
2360 int64_t rec_variance;
2361 int16_t src_pix_max;
2362 int16_t rec_pix_max;
2363 int64_t distortion;
2364 int64_t satd;
2365 double max_scale;
2366} WeberStats;
2367
2368typedef struct {
2369 struct loopfilter lf;
2370 CdefInfo cdef_info;
2371 YV12_BUFFER_CONFIG copy_buffer;
2372 RATE_CONTROL rc;
2373 MV_STATS mv_stats;
2374} CODING_CONTEXT;
2375
2376typedef struct {
2377 int frame_width;
2378 int frame_height;
2379 int mi_rows;
2380 int mi_cols;
2381 int mb_rows;
2382 int mb_cols;
2383 int num_mbs;
2384 aom_bit_depth_t bit_depth;
2385 int subsampling_x;
2386 int subsampling_y;
2387} FRAME_INFO;
2388
2392typedef struct {
2393 int show_frame_count;
2394} FRAME_INDEX_SET;
2395
2397
2401typedef struct {
2407 uint8_t *map;
2415
2419typedef struct {
2432} TimeStamps;
2433
2438typedef struct {
2442 tran_low_t *tcoeff;
2446 uint16_t *eobs;
2450 uint8_t *entropy_ctx;
2452
2453#if !CONFIG_REALTIME_ONLY
2455// DUCKY_ENCODE_FRAME_MODE is c version of EncodeFrameMode
2456enum {
2457 DUCKY_ENCODE_FRAME_MODE_NONE, // Let native AV1 determine q index and rdmult
2458 DUCKY_ENCODE_FRAME_MODE_QINDEX, // DuckyEncode determines q index and AV1
2459 // determines rdmult
2460 DUCKY_ENCODE_FRAME_MODE_QINDEX_RDMULT, // DuckyEncode determines q index and
2461 // rdmult
2462} UENUM1BYTE(DUCKY_ENCODE_FRAME_MODE);
2463
2464enum {
2465 DUCKY_ENCODE_GOP_MODE_NONE, // native AV1 decides GOP
2466 DUCKY_ENCODE_GOP_MODE_RCL, // rate control lib decides GOP
2467} UENUM1BYTE(DUCKY_ENCODE_GOP_MODE);
2468
2469typedef struct DuckyEncodeFrameInfo {
2470 DUCKY_ENCODE_FRAME_MODE qp_mode;
2471 DUCKY_ENCODE_GOP_MODE gop_mode;
2472 int q_index;
2473 int rdmult;
2474 // These two arrays are equivalent to std::vector<SuperblockEncodeParameters>
2475 int *superblock_encode_qindex;
2476 int *superblock_encode_rdmult;
2477 int delta_q_enabled;
2478} DuckyEncodeFrameInfo;
2479
2480typedef struct DuckyEncodeFrameResult {
2481 int global_order_idx;
2482 int q_index;
2483 int rdmult;
2484 int rate;
2485 int64_t dist;
2486 double psnr;
2487} DuckyEncodeFrameResult;
2488
2489typedef struct DuckyEncodeInfo {
2490 DuckyEncodeFrameInfo frame_info;
2491 DuckyEncodeFrameResult frame_result;
2492} DuckyEncodeInfo;
2494#endif
2495
2497typedef struct RTC_REF {
2502 int reference[INTER_REFS_PER_FRAME];
2503 int ref_idx[INTER_REFS_PER_FRAME];
2504 int refresh[REF_FRAMES];
2505 int set_ref_frame_config;
2506 int non_reference_frame;
2507 int ref_frame_comp[3];
2508 int gld_idx_1layer;
2512 unsigned int buffer_time_index[REF_FRAMES];
2516 unsigned char buffer_spatial_layer[REF_FRAMES];
2520 bool reference_was_previous_frame;
2525 bool bias_recovery_frame;
2526} RTC_REF;
2528
2532typedef struct AV1_COMP_DATA {
2536 unsigned char *cx_data;
2537
2542
2547
2551 unsigned int lib_flags;
2552
2557
2562
2567
2571 const aom_rational64_t *timestamp_ratio;
2572
2578
2582typedef struct AV1_PRIMARY {
2587
2593#if CONFIG_FPMT_TEST
2599 FPMT_TEST_ENC_CFG fpmt_unit_test_cfg;
2600
2604 FrameProbInfo temp_frame_probs;
2605
2611 FrameProbInfo temp_frame_probs_simulation;
2612
2617 int temp_valid_gm_model_found[FRAME_UPDATE_TYPES];
2618#endif // CONFIG_FPMT_TEST
2624 RefCntBuffer *ref_frame_map_copy[REF_FRAMES];
2625
2630
2635
2640
2645
2650
2655
2660 struct AV1_COMP *cpi;
2661
2666
2670 struct lookahead_ctx *lookahead;
2671
2678
2683 struct aom_codec_pkt_list *output_pkt_list;
2684
2689
2694
2699
2703 GF_STATE gf_state;
2704
2709
2713 AV1LevelParams level_params;
2714
2719
2724
2729
2734
2743 SequenceHeader seq_params;
2744
2749
2754
2759
2764
2768 struct aom_internal_error_info error;
2769
2775 aom_variance_fn_ptr_t fn_ptr[BLOCK_SIZES_ALL];
2776
2782
2787
2791 MV_STATS mv_stats;
2792
2793#if CONFIG_INTERNAL_STATS
2795 uint64_t total_time_receive_data;
2796 uint64_t total_time_compress_data;
2797
2798 unsigned int total_mode_chosen_counts[MAX_MODES];
2799
2800 int count[2];
2801 uint64_t total_sq_error[2];
2802 uint64_t total_samples[2];
2803 ImageStat psnr[2];
2804
2805 double total_blockiness;
2806 double worst_blockiness;
2807
2808 uint64_t total_bytes;
2809 double summed_quality;
2810 double summed_weights;
2811 double summed_quality_hbd;
2812 double summed_weights_hbd;
2813 unsigned int total_recode_hits;
2814 double worst_ssim;
2815 double worst_ssim_hbd;
2816
2817 ImageStat fastssim;
2818 ImageStat psnrhvs;
2819
2820 int b_calculate_blockiness;
2821 int b_calculate_consistency;
2822
2823 double total_inconsistency;
2824 double worst_consistency;
2825 Ssimv *ssim_vars;
2826 Metrics metrics;
2828#endif
2829
2830#if CONFIG_ENTROPY_STATS
2834 FRAME_COUNTS aggregate_fc;
2835#endif // CONFIG_ENTROPY_STATS
2836
2843 int fb_of_context_type[REF_FRAMES];
2844
2849
2854
2861 int valid_gm_model_found[FRAME_UPDATE_TYPES];
2862
2866 RTC_REF rtc_ref;
2867
2874
2878typedef struct AV1_COMP {
2883
2888 EncQuantDequantParams enc_quant_dequant_params;
2889
2893 ThreadData td;
2894
2898 FRAME_COUNTS counts;
2899
2904
2911
2917
2921 AV1_COMMON common;
2922
2927
2932 TRELLIS_OPT_TYPE optimize_seg_arr[MAX_SEGMENTS];
2933
2939 YV12_BUFFER_CONFIG *source;
2940
2948 YV12_BUFFER_CONFIG *last_source;
2949
2954 YV12_BUFFER_CONFIG *unscaled_source;
2955
2959 YV12_BUFFER_CONFIG scaled_source;
2960
2964 YV12_BUFFER_CONFIG *unscaled_last_source;
2965
2969 YV12_BUFFER_CONFIG scaled_last_source;
2970
2975 YV12_BUFFER_CONFIG *unfiltered_source;
2976
2981 YV12_BUFFER_CONFIG orig_source;
2982
2987
2997
3002
3006 CdefSearchCtx *cdef_search_ctx;
3007
3012
3017 RefCntBuffer *scaled_ref_buf[INTER_REFS_PER_FRAME];
3018
3022 RefCntBuffer *last_show_frame_buf;
3023
3028
3033
3038
3043 YV12_BUFFER_CONFIG last_frame_uf;
3044
3049 YV12_BUFFER_CONFIG trial_frame_rst;
3050
3055
3059 RD_OPT rd;
3060
3065 CODING_CONTEXT coding_context;
3066
3071
3076
3081
3086
3091
3096
3101
3106
3111
3117
3122
3131 ActiveMap active_map;
3132
3136 unsigned char gf_frame_index;
3137
3138#if CONFIG_INTERNAL_STATS
3140 uint64_t time_compress_data;
3141
3142 unsigned int mode_chosen_counts[MAX_MODES];
3143 int bytes;
3144 unsigned int frame_recode_hits;
3146#endif
3147
3148#if CONFIG_SPEED_STATS
3152 unsigned int tx_search_count;
3153#endif // CONFIG_SPEED_STATS
3154
3160
3164 FRAME_INFO frame_info;
3165
3169 FRAME_INDEX_SET frame_index_set;
3170
3177
3184
3192
3198
3204
3210
3215
3220 TileDataEnc *tile_data;
3225
3229 TokenInfo token_info;
3230
3235
3240
3245
3250
3255
3260
3265
3270
3271#if CONFIG_FPMT_TEST
3276 double temp_framerate;
3277#endif
3284
3289
3294
3301
3306
3311
3315 AV1LrStruct lr_ctxt;
3316
3321
3325 aom_film_grain_table_t *film_grain_table;
3326
3327#if CONFIG_DENOISE
3332 struct aom_denoise_and_model_t *denoise_and_model;
3333#endif
3334
3339
3348
3356
3357#if CONFIG_COLLECT_PARTITION_STATS
3361 FramePartitionTimingStats partition_stats;
3362#endif // CONFIG_COLLECT_PARTITION_STATS
3363
3364#if CONFIG_COLLECT_COMPONENT_TIMING
3368 uint64_t component_time[kTimingComponents];
3373 struct aom_usec_timer component_timer[kTimingComponents];
3377 uint64_t frame_component_time[kTimingComponents];
3378#endif
3379
3384
3389
3394
3401
3402#if CONFIG_TUNE_VMAF
3406 TuneVMAFInfo vmaf_info;
3407#endif
3408
3409#if CONFIG_TUNE_BUTTERAUGLI
3413 TuneButteraugliInfo butteraugli_info;
3414#endif
3415
3420
3424 COMPRESSOR_STAGE compressor_stage;
3425
3431
3436
3443
3447 FirstPassData firstpass_data;
3448
3452 NOISE_ESTIMATE noise_estimate;
3453
3454#if CONFIG_AV1_TEMPORAL_DENOISING
3458 AV1_DENOISER denoiser;
3459#endif
3460
3466
3471
3475 BLOCK_SIZE fp_block_size;
3476
3482
3487
3492 ExtPartController ext_part_controller;
3493
3498 MV_STATS mv_stats;
3503
3509
3516#if CONFIG_FPMT_TEST
3522
3523 int wanted_fb;
3524#endif // CONFIG_FPMT_TEST
3525
3532
3533#if CONFIG_RD_COMMAND
3537 RD_COMMAND rd_command;
3538#endif // CONFIG_RD_COMMAND
3539
3543 WeberStats *mb_weber_stats;
3544
3550
3556
3561
3565 BLOCK_SIZE weber_bsize;
3566
3571
3576
3581
3582#if CONFIG_BITRATE_ACCURACY
3586 VBR_RATECTRL_INFO vbr_rc_info;
3587#endif
3588
3589#if CONFIG_RATECTRL_LOG
3593 RATECTRL_LOG rc_log;
3594#endif // CONFIG_RATECTRL_LOG
3595
3600
3601#if CONFIG_THREE_PASS
3605 THIRD_PASS_DEC_CTX *third_pass_ctx;
3606#endif
3607
3612
3617
3623 uint64_t rec_sse;
3624
3630
3631#if !CONFIG_REALTIME_ONLY
3635 DuckyEncodeInfo ducky_encode_info;
3636#endif // CONFIG_REALTIME_ONLY
3637 //
3642
3646 unsigned int zeromv_skip_thresh_exit_part[BLOCK_SIZES_ALL];
3647
3653
3654#if CONFIG_SALIENCY_MAP
3658 uint8_t *saliency_map;
3659
3663 double *sm_scaling_factor;
3664#endif
3665
3671
3678
3682typedef struct EncodeFrameInput {
3684 YV12_BUFFER_CONFIG *source;
3685 YV12_BUFFER_CONFIG *last_source;
3686 int64_t ts_duration;
3689
3694typedef struct EncodeFrameParams {
3702 FRAME_TYPE frame_type;
3703
3705 int primary_ref_frame;
3706 int order_offset;
3707
3713
3715 int refresh_frame_flags;
3716
3717 int show_existing_frame;
3718 int existing_fb_idx_to_show;
3719
3725
3729 int remapped_ref_idx[REF_FRAMES];
3730
3736
3742
3744
3745void av1_initialize_enc(unsigned int usage, enum aom_rc_mode end_usage);
3746
3747struct AV1_COMP *av1_create_compressor(AV1_PRIMARY *ppi,
3748 const AV1EncoderConfig *oxcf,
3749 BufferPool *const pool,
3750 COMPRESSOR_STAGE stage,
3751 int lap_lag_in_frames);
3752
3753struct AV1_PRIMARY *av1_create_primary_compressor(
3754 struct aom_codec_pkt_list *pkt_list_head, int num_lap_buffers,
3755 const AV1EncoderConfig *oxcf);
3756
3757void av1_remove_compressor(AV1_COMP *cpi);
3758
3759void av1_remove_primary_compressor(AV1_PRIMARY *ppi);
3760
3761#if CONFIG_ENTROPY_STATS
3762void print_entropy_stats(AV1_PRIMARY *const ppi);
3763#endif
3764#if CONFIG_INTERNAL_STATS
3765void print_internal_stats(AV1_PRIMARY *ppi);
3766#endif
3767
3768void av1_change_config_seq(AV1_PRIMARY *ppi, const AV1EncoderConfig *oxcf,
3769 bool *sb_size_changed);
3770
3771void av1_change_config(AV1_COMP *cpi, const AV1EncoderConfig *oxcf,
3772 bool sb_size_changed);
3773
3774aom_codec_err_t av1_check_initial_width(AV1_COMP *cpi, int use_highbitdepth,
3775 int subsampling_x, int subsampling_y);
3776
3777void av1_post_encode_updates(AV1_COMP *const cpi,
3778 const AV1_COMP_DATA *const cpi_data);
3779
3780void av1_release_scaled_references_fpmt(AV1_COMP *cpi);
3781
3782void av1_decrement_ref_counts_fpmt(BufferPool *buffer_pool,
3783 int ref_buffers_used_map);
3784
3785void av1_init_sc_decisions(AV1_PRIMARY *const ppi);
3786
3787AV1_COMP *av1_get_parallel_frame_enc_data(AV1_PRIMARY *const ppi,
3788 AV1_COMP_DATA *const first_cpi_data);
3789
3790int av1_init_parallel_frame_context(const AV1_COMP_DATA *const first_cpi_data,
3791 AV1_PRIMARY *const ppi,
3792 int *ref_buffers_used_map);
3793
3795
3813 const YV12_BUFFER_CONFIG *sd, int64_t time_stamp,
3814 int64_t end_time_stamp);
3815
3837int av1_get_compressed_data(AV1_COMP *cpi, AV1_COMP_DATA *const cpi_data);
3838
3845int av1_encode(AV1_COMP *const cpi, uint8_t *const dest, size_t dest_size,
3846 const EncodeFrameInput *const frame_input,
3847 const EncodeFrameParams *const frame_params,
3848 size_t *const frame_size);
3849
3851int av1_get_preview_raw_frame(AV1_COMP *cpi, YV12_BUFFER_CONFIG *dest);
3852
3853int av1_get_last_show_frame(AV1_COMP *cpi, YV12_BUFFER_CONFIG *frame);
3854
3855aom_codec_err_t av1_copy_new_frame_enc(AV1_COMMON *cm,
3856 YV12_BUFFER_CONFIG *new_frame,
3857 YV12_BUFFER_CONFIG *sd);
3858
3859int av1_use_as_reference(int *ext_ref_frame_flags, int ref_frame_flags);
3860
3861int av1_copy_reference_enc(AV1_COMP *cpi, int idx, YV12_BUFFER_CONFIG *sd);
3862
3863int av1_set_reference_enc(AV1_COMP *cpi, int idx, YV12_BUFFER_CONFIG *sd);
3864
3865void av1_set_frame_size(AV1_COMP *cpi, int width, int height);
3866
3867void av1_set_mv_search_params(AV1_COMP *cpi);
3868
3869int av1_set_active_map(AV1_COMP *cpi, unsigned char *map, int rows, int cols);
3870
3871int av1_get_active_map(AV1_COMP *cpi, unsigned char *map, int rows, int cols);
3872
3873int av1_set_internal_size(AV1EncoderConfig *const oxcf,
3874 ResizePendingParams *resize_pending_params,
3875 AOM_SCALING_MODE horiz_mode,
3876 AOM_SCALING_MODE vert_mode);
3877
3878int av1_get_quantizer(struct AV1_COMP *cpi);
3879
3880// This function assumes that the input buffer contains valid OBUs. It should
3881// not be called on untrusted input.
3882int av1_convert_sect5obus_to_annexb(uint8_t *buffer, size_t buffer_size,
3883 size_t *input_size);
3884
3885void av1_alloc_mb_wiener_var_pred_buf(AV1_COMMON *cm, ThreadData *td);
3886
3887void av1_dealloc_mb_wiener_var_pred_buf(ThreadData *td);
3888
3889// Set screen content options.
3890// This function estimates whether to use screen content tools, by counting
3891// the portion of blocks that have few luma colors.
3892// Modifies:
3893// cpi->commom.features.allow_screen_content_tools
3894// cpi->common.features.allow_intrabc
3895// cpi->use_screen_content_tools
3896// cpi->is_screen_content_type
3897// However, the estimation is not accurate and may misclassify videos.
3898// A slower but more accurate approach that determines whether to use screen
3899// content tools is employed later. See av1_determine_sc_tools_with_encoding().
3900void av1_set_screen_content_options(struct AV1_COMP *cpi,
3901 FeatureFlags *features);
3902
3903void av1_update_frame_size(AV1_COMP *cpi);
3904
3905typedef struct {
3906 int pyr_level;
3907 int disp_order;
3908} RefFrameMapPair;
3909
3910static inline void init_ref_map_pair(
3911 AV1_COMP *cpi, RefFrameMapPair ref_frame_map_pairs[REF_FRAMES]) {
3912 if (cpi->ppi->gf_group.update_type[cpi->gf_frame_index] == KF_UPDATE) {
3913 memset(ref_frame_map_pairs, -1, sizeof(*ref_frame_map_pairs) * REF_FRAMES);
3914 return;
3915 }
3916 memset(ref_frame_map_pairs, 0, sizeof(*ref_frame_map_pairs) * REF_FRAMES);
3917 for (int map_idx = 0; map_idx < REF_FRAMES; map_idx++) {
3918 // Get reference frame buffer.
3919 const RefCntBuffer *const buf = cpi->common.ref_frame_map[map_idx];
3920 if (ref_frame_map_pairs[map_idx].disp_order == -1) continue;
3921 if (buf == NULL) {
3922 ref_frame_map_pairs[map_idx].disp_order = -1;
3923 ref_frame_map_pairs[map_idx].pyr_level = -1;
3924 continue;
3925 } else if (buf->ref_count > 1) {
3926 // Once the keyframe is coded, the slots in ref_frame_map will all
3927 // point to the same frame. In that case, all subsequent pointers
3928 // matching the current are considered "free" slots. This will find
3929 // the next occurrence of the current pointer if ref_count indicates
3930 // there are multiple instances of it and mark it as free.
3931 for (int idx2 = map_idx + 1; idx2 < REF_FRAMES; ++idx2) {
3932 const RefCntBuffer *const buf2 = cpi->common.ref_frame_map[idx2];
3933 if (buf2 == buf) {
3934 ref_frame_map_pairs[idx2].disp_order = -1;
3935 ref_frame_map_pairs[idx2].pyr_level = -1;
3936 }
3937 }
3938 }
3939 ref_frame_map_pairs[map_idx].disp_order = (int)buf->display_order_hint;
3940 ref_frame_map_pairs[map_idx].pyr_level = buf->pyramid_level;
3941 }
3942}
3943
3944#if CONFIG_FPMT_TEST
3945static inline void calc_frame_data_update_flag(
3946 GF_GROUP *const gf_group, int gf_frame_index,
3947 bool *const do_frame_data_update) {
3948 *do_frame_data_update = true;
3949 // Set the flag to false for all frames in a given parallel encode set except
3950 // the last frame in the set with frame_parallel_level = 2.
3951 if (gf_group->frame_parallel_level[gf_frame_index] == 1) {
3952 *do_frame_data_update = false;
3953 } else if (gf_group->frame_parallel_level[gf_frame_index] == 2) {
3954 // Check if this is the last frame in the set with frame_parallel_level = 2.
3955 for (int i = gf_frame_index + 1; i < gf_group->size; i++) {
3956 if ((gf_group->frame_parallel_level[i] == 0 &&
3957 (gf_group->update_type[i] == ARF_UPDATE ||
3958 gf_group->update_type[i] == INTNL_ARF_UPDATE)) ||
3959 gf_group->frame_parallel_level[i] == 1) {
3960 break;
3961 } else if (gf_group->frame_parallel_level[i] == 2) {
3962 *do_frame_data_update = false;
3963 break;
3964 }
3965 }
3966 }
3967}
3968#endif
3969
3970// av1 uses 10,000,000 ticks/second as time stamp
3971#define TICKS_PER_SEC 10000000LL
3972
3973static inline int64_t timebase_units_to_ticks(
3974 const aom_rational64_t *timestamp_ratio, int64_t n) {
3975 return n * timestamp_ratio->num / timestamp_ratio->den;
3976}
3977
3978static inline int64_t ticks_to_timebase_units(
3979 const aom_rational64_t *timestamp_ratio, int64_t n) {
3980 int64_t round = timestamp_ratio->num / 2;
3981 if (round > 0) --round;
3982 return (n * timestamp_ratio->den + round) / timestamp_ratio->num;
3983}
3984
3985static inline int frame_is_kf_gf_arf(const AV1_COMP *cpi) {
3986 const GF_GROUP *const gf_group = &cpi->ppi->gf_group;
3987 const FRAME_UPDATE_TYPE update_type =
3988 gf_group->update_type[cpi->gf_frame_index];
3989
3990 return frame_is_intra_only(&cpi->common) || update_type == ARF_UPDATE ||
3991 update_type == GF_UPDATE;
3992}
3993
3994// TODO(huisu@google.com, youzhou@microsoft.com): enable hash-me for HBD.
3995static inline int av1_use_hash_me(const AV1_COMP *const cpi) {
3998 frame_is_intra_only(&cpi->common));
3999}
4000
4001static inline const YV12_BUFFER_CONFIG *get_ref_frame_yv12_buf(
4002 const AV1_COMMON *const cm, MV_REFERENCE_FRAME ref_frame) {
4003 const RefCntBuffer *const buf = get_ref_frame_buf(cm, ref_frame);
4004 return buf != NULL ? &buf->buf : NULL;
4005}
4006
4007static inline void alloc_frame_mvs(AV1_COMMON *const cm, RefCntBuffer *buf) {
4008 assert(buf != NULL);
4009 ensure_mv_buffer(buf, cm);
4010 buf->width = cm->width;
4011 buf->height = cm->height;
4012}
4013
4014// Get the allocated token size for a tile. It does the same calculation as in
4015// the frame token allocation.
4016static inline unsigned int allocated_tokens(const TileInfo *tile,
4017 int sb_size_log2, int num_planes) {
4018 int tile_mb_rows =
4019 ROUND_POWER_OF_TWO(tile->mi_row_end - tile->mi_row_start, 2);
4020 int tile_mb_cols =
4021 ROUND_POWER_OF_TWO(tile->mi_col_end - tile->mi_col_start, 2);
4022
4023 return get_token_alloc(tile_mb_rows, tile_mb_cols, sb_size_log2, num_planes);
4024}
4025
4026static inline void get_start_tok(AV1_COMP *cpi, int tile_row, int tile_col,
4027 int mi_row, TokenExtra **tok, int sb_size_log2,
4028 int num_planes) {
4029 AV1_COMMON *const cm = &cpi->common;
4030 const int tile_cols = cm->tiles.cols;
4031 TileDataEnc *this_tile = &cpi->tile_data[tile_row * tile_cols + tile_col];
4032 const TileInfo *const tile_info = &this_tile->tile_info;
4033
4034 const int tile_mb_cols =
4035 (tile_info->mi_col_end - tile_info->mi_col_start + 2) >> 2;
4036 const int tile_mb_row = (mi_row - tile_info->mi_row_start + 2) >> 2;
4037
4038 *tok = cpi->token_info.tile_tok[tile_row][tile_col] +
4039 get_token_alloc(tile_mb_row, tile_mb_cols, sb_size_log2, num_planes);
4040}
4041
4042void av1_apply_encoding_flags(AV1_COMP *cpi, aom_enc_frame_flags_t flags);
4043
4044#define ALT_MIN_LAG 3
4045static inline int is_altref_enabled(int lag_in_frames, bool enable_auto_arf) {
4046 return lag_in_frames >= ALT_MIN_LAG && enable_auto_arf;
4047}
4048
4049static inline int can_disable_altref(const GFConfig *gf_cfg) {
4050 return is_altref_enabled(gf_cfg->lag_in_frames, gf_cfg->enable_auto_arf) &&
4051 (gf_cfg->gf_min_pyr_height == 0);
4052}
4053
4054// Helper function to compute number of blocks on either side of the frame.
4055static inline int get_num_blocks(const int frame_length, const int mb_length) {
4056 return (frame_length + mb_length - 1) / mb_length;
4057}
4058
4059// Check if statistics generation stage
4060static inline int is_stat_generation_stage(const AV1_COMP *const cpi) {
4061 assert(IMPLIES(cpi->compressor_stage == LAP_STAGE,
4062 cpi->oxcf.pass == AOM_RC_ONE_PASS && cpi->ppi->lap_enabled));
4063 return (cpi->oxcf.pass == AOM_RC_FIRST_PASS ||
4064 (cpi->compressor_stage == LAP_STAGE));
4065}
4066// Check if statistics consumption stage
4067static inline int is_stat_consumption_stage_twopass(const AV1_COMP *const cpi) {
4068 return (cpi->oxcf.pass >= AOM_RC_SECOND_PASS);
4069}
4070
4071// Check if statistics consumption stage
4072static inline int is_stat_consumption_stage(const AV1_COMP *const cpi) {
4073 return (is_stat_consumption_stage_twopass(cpi) ||
4074 (cpi->oxcf.pass == AOM_RC_ONE_PASS &&
4075 (cpi->compressor_stage == ENCODE_STAGE) && cpi->ppi->lap_enabled));
4076}
4077
4078// Decide whether 'dv_costs' need to be allocated/stored during the encoding.
4079static inline bool av1_need_dv_costs(const AV1_COMP *const cpi) {
4080 return !cpi->sf.rt_sf.use_nonrd_pick_mode &&
4081 av1_allow_intrabc(&cpi->common) && !is_stat_generation_stage(cpi);
4082}
4083
4093static inline int has_no_stats_stage(const AV1_COMP *const cpi) {
4094 assert(
4095 IMPLIES(!cpi->ppi->lap_enabled, cpi->compressor_stage == ENCODE_STAGE));
4096 return (cpi->oxcf.pass == AOM_RC_ONE_PASS && !cpi->ppi->lap_enabled);
4097}
4098
4100
4101static inline int is_one_pass_rt_params(const AV1_COMP *cpi) {
4102 return has_no_stats_stage(cpi) && cpi->oxcf.mode == REALTIME &&
4103 cpi->oxcf.gf_cfg.lag_in_frames == 0;
4104}
4105
4106// Use default/internal reference structure for single-layer RTC.
4107static inline int use_rtc_reference_structure_one_layer(const AV1_COMP *cpi) {
4108 return is_one_pass_rt_params(cpi) && cpi->ppi->number_spatial_layers == 1 &&
4109 cpi->ppi->number_temporal_layers == 1 &&
4110 !cpi->ppi->rtc_ref.set_ref_frame_config;
4111}
4112
4113// Check if postencode drop is allowed.
4114static inline int allow_postencode_drop_rtc(const AV1_COMP *cpi) {
4115 const AV1_COMMON *const cm = &cpi->common;
4116 return is_one_pass_rt_params(cpi) && cpi->oxcf.rc_cfg.mode == AOM_CBR &&
4118 !cpi->rc.rtc_external_ratectrl && !frame_is_intra_only(cm) &&
4119 cpi->svc.spatial_layer_id == 0;
4120}
4121
4122// Function return size of frame stats buffer
4123static inline int get_stats_buf_size(int num_lap_buffer, int num_lag_buffer) {
4124 /* if lookahead is enabled return num_lap_buffers else num_lag_buffers */
4125 return (num_lap_buffer > 0 ? num_lap_buffer + 1 : num_lag_buffer);
4126}
4127
4128// TODO(zoeliu): To set up cpi->oxcf.gf_cfg.enable_auto_brf
4129
4130static inline void set_ref_ptrs(const AV1_COMMON *cm, MACROBLOCKD *xd,
4131 MV_REFERENCE_FRAME ref0,
4132 MV_REFERENCE_FRAME ref1) {
4134 get_ref_scale_factors_const(cm, ref0 >= LAST_FRAME ? ref0 : 1);
4136 get_ref_scale_factors_const(cm, ref1 >= LAST_FRAME ? ref1 : 1);
4137}
4138
4139static inline int get_chessboard_index(int frame_index) {
4140 return frame_index & 0x1;
4141}
4142
4143static inline const int *cond_cost_list_const(const struct AV1_COMP *cpi,
4144 const int *cost_list) {
4145 const int use_cost_list = cpi->sf.mv_sf.subpel_search_method != SUBPEL_TREE &&
4146 cpi->sf.mv_sf.use_fullpel_costlist;
4147 return use_cost_list ? cost_list : NULL;
4148}
4149
4150static inline int *cond_cost_list(const struct AV1_COMP *cpi, int *cost_list) {
4151 const int use_cost_list = cpi->sf.mv_sf.subpel_search_method != SUBPEL_TREE &&
4152 cpi->sf.mv_sf.use_fullpel_costlist;
4153 return use_cost_list ? cost_list : NULL;
4154}
4155
4156// Compression ratio of current frame.
4157double av1_get_compression_ratio(const AV1_COMMON *const cm,
4158 size_t encoded_frame_size);
4159
4160void av1_new_framerate(AV1_COMP *cpi, double framerate);
4161
4162void av1_setup_frame_size(AV1_COMP *cpi);
4163
4164#define LAYER_IDS_TO_IDX(sl, tl, num_tl) ((sl) * (num_tl) + (tl))
4165
4166// Returns 1 if a frame is scaled and 0 otherwise.
4167static inline int av1_resize_scaled(const AV1_COMMON *cm) {
4168 return cm->superres_upscaled_width != cm->render_width ||
4170}
4171
4172static inline int av1_frame_scaled(const AV1_COMMON *cm) {
4173 return av1_superres_scaled(cm) || av1_resize_scaled(cm);
4174}
4175
4176// Don't allow a show_existing_frame to coincide with an error resilient
4177// frame. An exception can be made for a forward keyframe since it has no
4178// previous dependencies.
4179static inline int encode_show_existing_frame(const AV1_COMMON *cm) {
4181 cm->current_frame.frame_type == KEY_FRAME);
4182}
4183
4184// Get index into the 'cpi->mbmi_ext_info.frame_base' array for the given
4185// 'mi_row' and 'mi_col'.
4186static inline int get_mi_ext_idx(const int mi_row, const int mi_col,
4187 const BLOCK_SIZE mi_alloc_bsize,
4188 const int mbmi_ext_stride) {
4189 const int mi_ext_size_1d = mi_size_wide[mi_alloc_bsize];
4190 const int mi_ext_row = mi_row / mi_ext_size_1d;
4191 const int mi_ext_col = mi_col / mi_ext_size_1d;
4192 return mi_ext_row * mbmi_ext_stride + mi_ext_col;
4193}
4194
4195// Lighter version of set_offsets that only sets the mode info
4196// pointers.
4197static inline void set_mode_info_offsets(
4198 const CommonModeInfoParams *const mi_params,
4199 const MBMIExtFrameBufferInfo *const mbmi_ext_info, MACROBLOCK *const x,
4200 MACROBLOCKD *const xd, int mi_row, int mi_col) {
4201 set_mi_offsets(mi_params, xd, mi_row, mi_col);
4202 const int ext_idx = get_mi_ext_idx(mi_row, mi_col, mi_params->mi_alloc_bsize,
4203 mbmi_ext_info->stride);
4204 x->mbmi_ext_frame = mbmi_ext_info->frame_base + ext_idx;
4205}
4206
4207// Check to see if the given partition size is allowed for a specified number
4208// of mi block rows and columns remaining in the image.
4209// If not then return the largest allowed partition size
4210static inline BLOCK_SIZE find_partition_size(BLOCK_SIZE bsize, int rows_left,
4211 int cols_left, int *bh, int *bw) {
4212 int int_size = (int)bsize;
4213 if (rows_left <= 0 || cols_left <= 0) {
4214 return AOMMIN(bsize, BLOCK_8X8);
4215 } else {
4216 for (; int_size > 0; int_size -= 3) {
4217 *bh = mi_size_high[int_size];
4218 *bw = mi_size_wide[int_size];
4219 if ((*bh <= rows_left) && (*bw <= cols_left)) {
4220 break;
4221 }
4222 }
4223 }
4224 return (BLOCK_SIZE)int_size;
4225}
4226
4227static const uint8_t av1_ref_frame_flag_list[REF_FRAMES] = { 0,
4228 AOM_LAST_FLAG,
4229 AOM_LAST2_FLAG,
4230 AOM_LAST3_FLAG,
4231 AOM_GOLD_FLAG,
4232 AOM_BWD_FLAG,
4233 AOM_ALT2_FLAG,
4234 AOM_ALT_FLAG };
4235
4236// When more than 'max_allowed_refs' are available, we reduce the number of
4237// reference frames one at a time based on this order.
4238static const MV_REFERENCE_FRAME disable_order[] = {
4239 LAST3_FRAME,
4240 LAST2_FRAME,
4241 ALTREF2_FRAME,
4242 BWDREF_FRAME,
4243};
4244
4245static const MV_REFERENCE_FRAME
4246 ref_frame_priority_order[INTER_REFS_PER_FRAME] = {
4247 LAST_FRAME, ALTREF_FRAME, BWDREF_FRAME, GOLDEN_FRAME,
4248 ALTREF2_FRAME, LAST2_FRAME, LAST3_FRAME,
4249 };
4250
4251static inline int get_ref_frame_flags(const SPEED_FEATURES *const sf,
4252 const int use_one_pass_rt_params,
4253 const YV12_BUFFER_CONFIG **ref_frames,
4254 const int ext_ref_frame_flags) {
4255 // cpi->ext_flags.ref_frame_flags allows certain reference types to be
4256 // disabled by the external interface. These are set by
4257 // av1_apply_encoding_flags(). Start with what the external interface allows,
4258 // then suppress any reference types which we have found to be duplicates.
4259 int flags = ext_ref_frame_flags;
4260
4261 for (int i = 1; i < INTER_REFS_PER_FRAME; ++i) {
4262 const YV12_BUFFER_CONFIG *const this_ref = ref_frames[i];
4263 // If this_ref has appeared before, mark the corresponding ref frame as
4264 // invalid. For one_pass_rt mode, only disable GOLDEN_FRAME if it's the
4265 // same as LAST_FRAME or ALTREF_FRAME (if ALTREF is being used in nonrd).
4266 int index =
4267 (use_one_pass_rt_params && ref_frame_priority_order[i] == GOLDEN_FRAME)
4268 ? (1 + sf->rt_sf.use_nonrd_altref_frame)
4269 : i;
4270 for (int j = 0; j < index; ++j) {
4271 // If this_ref has appeared before (same as the reference corresponding
4272 // to lower index j), remove it as a reference only if that reference
4273 // (for index j) is actually used as a reference.
4274 if (this_ref == ref_frames[j] &&
4275 (flags & (1 << (ref_frame_priority_order[j] - 1)))) {
4276 flags &= ~(1 << (ref_frame_priority_order[i] - 1));
4277 break;
4278 }
4279 }
4280 }
4281 return flags;
4282}
4283
4284// Returns a Sequence Header OBU stored in an aom_fixed_buf_t, or NULL upon
4285// failure. When a non-NULL aom_fixed_buf_t pointer is returned by this
4286// function, the memory must be freed by the caller. Both the buf member of the
4287// aom_fixed_buf_t, and the aom_fixed_buf_t pointer itself must be freed. Memory
4288// returned must be freed via call to free().
4289//
4290// Note: The OBU returned is in Low Overhead Bitstream Format. Specifically,
4291// the obu_has_size_field bit is set, and the buffer contains the obu_size
4292// field.
4293aom_fixed_buf_t *av1_get_global_headers(AV1_PRIMARY *ppi);
4294
4295#define MAX_GFUBOOST_FACTOR 10.0
4296#define MIN_GFUBOOST_FACTOR 4.0
4297
4298static inline int is_frame_tpl_eligible(const GF_GROUP *const gf_group,
4299 uint8_t index) {
4300 const FRAME_UPDATE_TYPE update_type = gf_group->update_type[index];
4301 return update_type == ARF_UPDATE || update_type == GF_UPDATE ||
4302 update_type == KF_UPDATE;
4303}
4304
4305static inline int is_frame_eligible_for_ref_pruning(const GF_GROUP *gf_group,
4306 int selective_ref_frame,
4307 int prune_ref_frames,
4308 int gf_index) {
4309 return (selective_ref_frame > 0) && (prune_ref_frames > 0) &&
4310 !is_frame_tpl_eligible(gf_group, gf_index);
4311}
4312
4313// Get update type of the current frame.
4314static inline FRAME_UPDATE_TYPE get_frame_update_type(const GF_GROUP *gf_group,
4315 int gf_frame_index) {
4316 return gf_group->update_type[gf_frame_index];
4317}
4318
4319static inline int av1_pixels_to_mi(int pixels) {
4320 return ALIGN_POWER_OF_TWO(pixels, 3) >> MI_SIZE_LOG2;
4321}
4322
4323static inline int is_psnr_calc_enabled(const AV1_COMP *cpi) {
4324 const AV1_COMMON *const cm = &cpi->common;
4325
4326 return cpi->ppi->b_calculate_psnr && !is_stat_generation_stage(cpi) &&
4327 cm->show_frame && !cpi->is_dropped_frame;
4328}
4329
4330static inline int is_frame_resize_pending(const AV1_COMP *const cpi) {
4331 const ResizePendingParams *const resize_pending_params =
4333 return (resize_pending_params->width && resize_pending_params->height &&
4334 (cpi->common.width != resize_pending_params->width ||
4335 cpi->common.height != resize_pending_params->height));
4336}
4337
4338// Check if loop filter is used.
4339static inline int is_loopfilter_used(const AV1_COMMON *const cm) {
4340 return !cm->features.coded_lossless && !cm->tiles.large_scale;
4341}
4342
4343// Check if CDEF is used.
4344static inline int is_cdef_used(const AV1_COMMON *const cm) {
4345 return cm->seq_params->enable_cdef && !cm->features.coded_lossless &&
4346 !cm->tiles.large_scale;
4347}
4348
4349// Check if loop restoration filter is used.
4350static inline int is_restoration_used(const AV1_COMMON *const cm) {
4351 return cm->seq_params->enable_restoration && !cm->features.all_lossless &&
4352 !cm->tiles.large_scale;
4353}
4354
4355// Checks if post-processing filters need to be applied.
4356// NOTE: This function decides if the application of different post-processing
4357// filters on the reconstructed frame can be skipped at the encoder side.
4358// However the computation of different filter parameters that are signaled in
4359// the bitstream is still required.
4360static inline unsigned int derive_skip_apply_postproc_filters(
4361 const AV1_COMP *cpi, int use_loopfilter, int use_cdef, int use_superres,
4362 int use_restoration) {
4363 // Though CDEF parameter selection should be dependent on
4364 // deblocked/loop-filtered pixels for cdef_pick_method <=
4365 // CDEF_FAST_SEARCH_LVL5, CDEF strength values are calculated based on the
4366 // pixel values that are not loop-filtered in svc real-time encoding mode.
4367 // Hence this case is handled separately using the condition below.
4368 if (cpi->ppi->rtc_ref.non_reference_frame)
4369 return (SKIP_APPLY_LOOPFILTER | SKIP_APPLY_CDEF);
4370
4372 return 0;
4373 assert(cpi->oxcf.mode == ALLINTRA);
4374
4375 // The post-processing filters are applied one after the other in the
4376 // following order: deblocking->cdef->superres->restoration. In case of
4377 // ALLINTRA encoding, the reconstructed frame is not used as a reference
4378 // frame. Hence, the application of these filters can be skipped when
4379 // 1. filter parameters of the subsequent stages are not dependent on the
4380 // filtered output of the current stage or
4381 // 2. subsequent filtering stages are disabled
4382 if (use_restoration) return SKIP_APPLY_RESTORATION;
4383 if (use_superres) return SKIP_APPLY_SUPERRES;
4384 if (use_cdef) {
4385 // CDEF parameter selection is not dependent on the deblocked frame if
4386 // cdef_pick_method is CDEF_PICK_FROM_Q. Hence the application of deblocking
4387 // filters and cdef filters can be skipped in this case.
4388 return (cpi->sf.lpf_sf.cdef_pick_method == CDEF_PICK_FROM_Q &&
4389 use_loopfilter)
4390 ? (SKIP_APPLY_LOOPFILTER | SKIP_APPLY_CDEF)
4391 : SKIP_APPLY_CDEF;
4392 }
4393 if (use_loopfilter) return SKIP_APPLY_LOOPFILTER;
4394
4395 // If we reach here, all post-processing stages are disabled, so none need to
4396 // be skipped.
4397 return 0;
4398}
4399
4400static inline void set_postproc_filter_default_params(AV1_COMMON *cm) {
4401 struct loopfilter *const lf = &cm->lf;
4402 CdefInfo *const cdef_info = &cm->cdef_info;
4403 RestorationInfo *const rst_info = cm->rst_info;
4404
4405 lf->filter_level[0] = 0;
4406 lf->filter_level[1] = 0;
4407 cdef_info->cdef_bits = 0;
4408 cdef_info->cdef_strengths[0] = 0;
4409 cdef_info->nb_cdef_strengths = 1;
4410 cdef_info->cdef_uv_strengths[0] = 0;
4414}
4415
4416static inline int is_inter_tx_size_search_level_one(
4417 const TX_SPEED_FEATURES *tx_sf) {
4418 return (tx_sf->inter_tx_size_search_init_depth_rect >= 1 &&
4419 tx_sf->inter_tx_size_search_init_depth_sqr >= 1);
4420}
4421
4422static inline int get_lpf_opt_level(const SPEED_FEATURES *sf) {
4423 int lpf_opt_level = 0;
4424 if (is_inter_tx_size_search_level_one(&sf->tx_sf))
4425 lpf_opt_level = (sf->lpf_sf.lpf_pick == LPF_PICK_FROM_Q) ? 2 : 1;
4426 return lpf_opt_level;
4427}
4428
4429// Enable switchable motion mode only if warp and OBMC tools are allowed
4430static inline bool is_switchable_motion_mode_allowed(bool allow_warped_motion,
4431 bool enable_obmc) {
4432 return (allow_warped_motion || enable_obmc);
4433}
4434
4435#if CONFIG_AV1_TEMPORAL_DENOISING
4436static inline int denoise_svc(const struct AV1_COMP *const cpi) {
4437 return (!cpi->ppi->use_svc ||
4438 (cpi->ppi->use_svc &&
4439 cpi->svc.spatial_layer_id >= cpi->svc.first_layer_denoise));
4440}
4441#endif
4442
4443#if CONFIG_COLLECT_PARTITION_STATS == 2
4444static inline void av1_print_fr_partition_timing_stats(
4445 const FramePartitionTimingStats *part_stats, const char *filename) {
4446 FILE *f = fopen(filename, "w");
4447 if (!f) {
4448 return;
4449 }
4450
4451 fprintf(f, "bsize,redo,");
4452 for (int part = 0; part < EXT_PARTITION_TYPES; part++) {
4453 fprintf(f, "decision_%d,", part);
4454 }
4455 for (int part = 0; part < EXT_PARTITION_TYPES; part++) {
4456 fprintf(f, "attempt_%d,", part);
4457 }
4458 for (int part = 0; part < EXT_PARTITION_TYPES; part++) {
4459 fprintf(f, "time_%d,", part);
4460 }
4461 fprintf(f, "\n");
4462
4463 static const int bsizes[6] = { 128, 64, 32, 16, 8, 4 };
4464
4465 for (int bsize_idx = 0; bsize_idx < 6; bsize_idx++) {
4466 fprintf(f, "%d,%d,", bsizes[bsize_idx], part_stats->partition_redo);
4467 for (int part = 0; part < EXT_PARTITION_TYPES; part++) {
4468 fprintf(f, "%d,", part_stats->partition_decisions[bsize_idx][part]);
4469 }
4470 for (int part = 0; part < EXT_PARTITION_TYPES; part++) {
4471 fprintf(f, "%d,", part_stats->partition_attempts[bsize_idx][part]);
4472 }
4473 for (int part = 0; part < EXT_PARTITION_TYPES; part++) {
4474 fprintf(f, "%ld,", part_stats->partition_times[bsize_idx][part]);
4475 }
4476 fprintf(f, "\n");
4477 }
4478 fclose(f);
4479}
4480#endif // CONFIG_COLLECT_PARTITION_STATS == 2
4481
4482#if CONFIG_COLLECT_PARTITION_STATS
4483static inline int av1_get_bsize_idx_for_part_stats(BLOCK_SIZE bsize) {
4484 assert(bsize == BLOCK_128X128 || bsize == BLOCK_64X64 ||
4485 bsize == BLOCK_32X32 || bsize == BLOCK_16X16 || bsize == BLOCK_8X8 ||
4486 bsize == BLOCK_4X4);
4487 switch (bsize) {
4488 case BLOCK_128X128: return 0;
4489 case BLOCK_64X64: return 1;
4490 case BLOCK_32X32: return 2;
4491 case BLOCK_16X16: return 3;
4492 case BLOCK_8X8: return 4;
4493 case BLOCK_4X4: return 5;
4494 default: assert(0 && "Invalid bsize for partition_stats."); return -1;
4495 }
4496}
4497#endif // CONFIG_COLLECT_PARTITION_STATS
4498
4499#if CONFIG_COLLECT_COMPONENT_TIMING
4500static inline void start_timing(AV1_COMP *cpi, int component) {
4501 aom_usec_timer_start(&cpi->component_timer[component]);
4502}
4503static inline void end_timing(AV1_COMP *cpi, int component) {
4504 aom_usec_timer_mark(&cpi->component_timer[component]);
4505 cpi->frame_component_time[component] +=
4506 aom_usec_timer_elapsed(&cpi->component_timer[component]);
4507}
4508static inline char const *get_frame_type_enum(int type) {
4509 switch (type) {
4510 case 0: return "KEY_FRAME";
4511 case 1: return "INTER_FRAME";
4512 case 2: return "INTRA_ONLY_FRAME";
4513 case 3: return "S_FRAME";
4514 default: assert(0);
4515 }
4516 return "error";
4517}
4518#endif
4519
4521
4522#ifdef __cplusplus
4523} // extern "C"
4524#endif
4525
4526#endif // AOM_AV1_ENCODER_ENCODER_H_
enum aom_chroma_sample_position aom_chroma_sample_position_t
List of chroma sample positions.
enum aom_transfer_characteristics aom_transfer_characteristics_t
List of supported transfer functions.
enum aom_color_range aom_color_range_t
List of supported color range.
enum aom_color_primaries aom_color_primaries_t
List of supported color primaries.
enum aom_matrix_coefficients aom_matrix_coefficients_t
List of supported matrix coefficients.
Provides definitions for using AOM or AV1 encoder algorithm within the aom Codec Interface.
struct macroblock MACROBLOCK
Encoder's parameters related to the current coding block.
COST_UPDATE_TYPE
This enum controls how often the entropy costs should be updated.
Definition encoder.h:222
@ COST_UPD_SBROW
Definition encoder.h:224
@ COST_UPD_TILE
Definition encoder.h:225
@ COST_UPD_OFF
Definition encoder.h:226
@ NUM_COST_UPDATE_TYPES
Definition encoder.h:227
@ COST_UPD_SB
Definition encoder.h:223
LOOPFILTER_CONTROL
This enum controls to which frames loopfilter is applied.
Definition encoder.h:233
@ LOOPFILTER_ALL
Definition encoder.h:235
@ LOOPFILTER_SELECTIVELY
Definition encoder.h:237
@ LOOPFILTER_REFERENCE
Definition encoder.h:236
@ LOOPFILTER_NONE
Definition encoder.h:234
#define NUM_RECODES_PER_FRAME
Max number of recodes used to track the frame probabilities.
Definition encoder.h:1631
struct inter_modes_info InterModesInfo
Struct used to hold inter mode data for fast tx search.
SKIP_APPLY_POSTPROC_FILTER
This enum controls the application of post-processing filters on a reconstructed frame.
Definition encoder.h:245
#define MAX_PARALLEL_FRAMES
Max number of frames that can be encoded in a parallel encode set.
Definition encoder.h:1636
RestorationType
This enumeration defines various restoration types supported.
Definition enums.h:609
@ RESTORE_NONE
Definition enums.h:610
@ RESTORE_SWITCHABLE_TYPES
Definition enums.h:614
@ RESTORE_TYPES
Definition enums.h:615
aom_dist_metric
Distortion metric to use for RD optimization.
Definition aomcx.h:1711
aom_tune_content
Definition aomcx.h:1653
enum aom_scaling_mode_1d AOM_SCALING_MODE
aom 1-D scaling mode
aom_tune_metric
Model tuning parameters.
Definition aomcx.h:1684
enum aom_bit_depth aom_bit_depth_t
Bit depth for codecThis enumeration determines the bit depth of the codec.
enum aom_superblock_size aom_superblock_size_t
Superblock size selection.
aom_codec_err_t
Algorithm return codes.
Definition aom_codec.h:155
aom_superres_mode
Frame super-resolution mode.
Definition aom_encoder.h:207
aom_rc_mode
Rate control mode.
Definition aom_encoder.h:185
aom_enc_pass
Multi-pass Encoding Pass.
Definition aom_encoder.h:176
struct aom_fixed_buf aom_fixed_buf_t
Generic fixed size buffer structure.
long aom_enc_frame_flags_t
Encoded Frame Flags.
Definition aom_encoder.h:377
@ AOM_CBR
Definition aom_encoder.h:187
@ AOM_RC_ONE_PASS
Definition aom_encoder.h:177
@ AOM_RC_SECOND_PASS
Definition aom_encoder.h:179
@ AOM_RC_FIRST_PASS
Definition aom_encoder.h:178
int av1_get_compressed_data(AV1_COMP *cpi, AV1_COMP_DATA *const cpi_data)
Encode a frame.
Definition encoder.c:4710
int av1_encode(AV1_COMP *const cpi, uint8_t *const dest, size_t dest_size, const EncodeFrameInput *const frame_input, const EncodeFrameParams *const frame_params, size_t *const frame_size)
Run 1-pass/2-pass encoding.
Definition encoder.c:4002
int av1_receive_raw_frame(AV1_COMP *cpi, aom_enc_frame_flags_t frame_flags, const YV12_BUFFER_CONFIG *sd, int64_t time_stamp, int64_t end_time_stamp)
Obtain the raw frame data.
Definition encoder.c:4100
static int has_no_stats_stage(const AV1_COMP *const cpi)
Check if the current stage has statistics.
Definition encoder.h:4093
Describes look ahead buffer operations.
@ CDEF_PICK_FROM_Q
Definition speed_features.h:172
RestorationInfo rst_info[3]
Definition av1_common_int.h:953
int superres_upscaled_width
Definition av1_common_int.h:806
int superres_upscaled_height
Definition av1_common_int.h:807
SequenceHeader * seq_params
Definition av1_common_int.h:983
int width
Definition av1_common_int.h:782
CdefInfo cdef_info
Definition av1_common_int.h:962
CurrentFrame current_frame
Definition av1_common_int.h:761
int show_existing_frame
Definition av1_common_int.h:907
struct loopfilter lf
Definition av1_common_int.h:946
FeatureFlags features
Definition av1_common_int.h:912
int show_frame
Definition av1_common_int.h:892
RefCntBuffer * ref_frame_map[REF_FRAMES]
Definition av1_common_int.h:885
CommonTileParams tiles
Definition av1_common_int.h:999
int height
Definition av1_common_int.h:783
int render_width
Definition av1_common_int.h:793
int render_height
Definition av1_common_int.h:794
Encoder data related to multi-threading for allintra deltaq-mode=3.
Definition encoder.h:1601
pthread_mutex_t * mutex_
Definition encoder.h:1606
void(* intra_sync_read_ptr)(AV1EncRowMultiThreadSync *const, int, int)
Definition encoder.h:1620
pthread_cond_t * cond_
Definition encoder.h:1610
void(* intra_sync_write_ptr)(AV1EncRowMultiThreadSync *const, int, int, int)
Definition encoder.h:1624
Encoder data related to row-based multi-threading.
Definition encoder.h:1511
int allocated_sb_rows
Definition encoder.h:1550
pthread_mutex_t * mutex_
Definition encoder.h:1576
int allocated_tile_cols
Definition encoder.h:1519
bool firstpass_mt_exit
Definition encoder.h:1563
int allocated_cols
Definition encoder.h:1533
int thread_id_to_tile_id[64]
Definition encoder.h:1538
bool mb_wiener_mt_exit
Definition encoder.h:1570
void(* sync_write_ptr)(AV1EncRowMultiThreadSync *const, int, int, int)
Definition encoder.h:1594
pthread_cond_t * cond_
Definition encoder.h:1580
bool row_mt_exit
Definition encoder.h:1556
int allocated_tile_rows
Definition encoder.h:1515
int allocated_rows
Definition encoder.h:1526
int * num_tile_cols_done
Definition encoder.h:1544
void(* sync_read_ptr)(AV1EncRowMultiThreadSync *const, int, int)
Definition encoder.h:1590
Encoder parameters for synchronization of row based multi-threading.
Definition encoder.h:1393
int rows
Definition encoder.h:1426
int sync_range
Definition encoder.h:1415
int intrabc_extra_top_right_sb_delay
Definition encoder.h:1422
int next_mi_row
Definition encoder.h:1430
int * num_finished_cols
Definition encoder.h:1408
pthread_mutex_t * mutex_
Definition encoder.h:1399
pthread_cond_t * cond_
Definition encoder.h:1400
int num_threads_working
Definition encoder.h:1434
Main encoder configuration data structure.
Definition encoder.h:933
RateControlCfg rc_cfg
Definition encoder.h:955
KeyFrameCfg kf_cfg
Definition encoder.h:950
enum aom_enc_pass pass
Definition encoder.h:1058
AlgoCfg algo_cfg
Definition encoder.h:945
aom_fixed_buf_t twopass_stats_in
Definition encoder.h:972
Structure to hold search parameter per restoration unit and intermediate buffer of Wiener filter used...
Definition encoder.h:1690
RestUnitSearchInfo * rusi[3]
Definition encoder.h:1695
int16_t * dgd_avg
Definition encoder.h:1700
Structure to hold data corresponding to an encoded frame.
Definition encoder.h:2532
int64_t ts_frame_end
Definition encoder.h:2561
int pop_lookahead
Definition encoder.h:2576
int64_t ts_frame_start
Definition encoder.h:2556
unsigned char * cx_data
Definition encoder.h:2536
size_t cx_data_sz
Definition encoder.h:2541
int flush
Definition encoder.h:2566
unsigned int lib_flags
Definition encoder.h:2551
size_t frame_size
Definition encoder.h:2546
const aom_rational64_t * timestamp_ratio
Definition encoder.h:2571
Top level encoder structure.
Definition encoder.h:2878
double * ext_rate_distribution
Definition encoder.h:3555
int do_update_frame_probs_warp[10]
Definition encoder.h:3264
uint8_t * consec_zero_mv
Definition encoder.h:3465
int do_update_frame_probs_obmc[10]
Definition encoder.h:3259
struct aom_denoise_and_model_t * denoise_and_model
Definition encoder.h:3332
int skip_tpl_setup_stats
Definition encoder.h:2986
int frames_since_last_update
Definition encoder.h:3641
int * mb_delta_q
Definition encoder.h:3575
int vaq_refresh
Definition encoder.h:3234
FRAME_TYPE last_frame_type
Definition encoder.h:3430
YV12_BUFFER_CONFIG * unscaled_source
Definition encoder.h:2954
int palette_pixel_num
Definition encoder.h:3670
CYCLIC_REFRESH * cyclic_refresh
Definition encoder.h:3126
RATE_CONTROL rc
Definition encoder.h:3085
int deltaq_used
Definition encoder.h:3388
ActiveMap active_map
Definition encoder.h:3131
bool frame_size_related_setup_done
Definition encoder.h:3197
WeberStats * mb_weber_stats
Definition encoder.h:3543
bool refresh_idx_available
Definition encoder.h:3508
TokenInfo token_info
Definition encoder.h:3229
int64_t ambient_err
Definition encoder.h:3054
aom_film_grain_table_t * film_grain_table
Definition encoder.h:3325
int ref_refresh_index
Definition encoder.h:3502
size_t available_bs_size
Definition encoder.h:3486
SPEED_FEATURES sf
Definition encoder.h:3105
TRELLIS_OPT_TYPE optimize_seg_arr[8]
Definition encoder.h:2932
ExtPartController ext_part_controller
Definition encoder.h:3492
FILE * second_pass_log_stream
Definition encoder.h:3611
double * ssim_rdmult_scaling_factors
Definition encoder.h:3400
RD_OPT rd
Definition encoder.h:3059
int data_alloc_height
Definition encoder.h:3183
int num_tg
Definition encoder.h:3435
WinnerModeParams winner_mode_params
Definition encoder.h:3075
ExternalFlags ext_flags
Definition encoder.h:3037
bool alloc_pyramid
Definition encoder.h:3652
EncSegmentationInfo enc_seg
Definition encoder.h:3121
MotionVectorSearchParams mv_search_params
Definition encoder.h:3110
int use_screen_content_tools
Definition encoder.h:3347
int do_update_frame_probs_interpfilter[10]
Definition encoder.h:3269
CODING_CONTEXT coding_context
Definition encoder.h:3065
TemporalFilterCtx tf_ctx
Definition encoder.h:3001
ForceIntegerMVInfo force_intpel_info
Definition encoder.h:3011
GlobalMotionInfo gm_info
Definition encoder.h:3070
int consec_zero_mv_alloc_size
Definition encoder.h:3470
CoeffBufferPool coeff_buffer_pool
Definition encoder.h:2916
FRAME_INDEX_SET frame_index_set
Definition encoder.h:3169
int ref_frame_flags
Definition encoder.h:3095
RefCntBuffer * scaled_ref_buf[INTER_REFS_PER_FRAME]
Definition encoder.h:3017
unsigned char gf_frame_index
Definition encoder.h:3136
AV1EncoderConfig oxcf
Definition encoder.h:2926
AV1_COMMON common
Definition encoder.h:2921
AV1LrStruct lr_ctxt
Definition encoder.h:3315
bool do_frame_data_update
Definition encoder.h:3531
CdefSearchCtx * cdef_search_ctx
Definition encoder.h:3006
int data_alloc_width
Definition encoder.h:3176
int do_update_frame_probs_txtype[10]
Definition encoder.h:3254
FRAME_COUNTS counts
Definition encoder.h:2898
COMPRESSOR_STAGE compressor_stage
Definition encoder.h:3424
int intrabc_used
Definition encoder.h:3305
int num_frame_recode
Definition encoder.h:3244
int rt_reduce_num_ref_buffers
Definition encoder.h:3032
RefreshFrameInfo refresh_frame
Definition encoder.h:3027
int prune_ref_frame_mask
Definition encoder.h:3310
YV12_BUFFER_CONFIG * unscaled_last_source
Definition encoder.h:2964
int all_one_sided_refs
Definition encoder.h:3116
MultiThreadInfo mt_info
Definition encoder.h:3293
VarBasedPartitionInfo vbp_info
Definition encoder.h:3239
int scaled_last_source_available
Definition encoder.h:3676
YV12_BUFFER_CONFIG * last_source
Definition encoder.h:2948
int existing_fb_idx_to_show
Definition encoder.h:3300
YV12_BUFFER_CONFIG * unfiltered_source
Definition encoder.h:2975
unsigned int zeromv_skip_thresh_exit_part[BLOCK_SIZES_ALL]
Definition encoder.h:3646
FRAME_INFO frame_info
Definition encoder.h:3164
int last_coded_height
Definition encoder.h:3209
int frame_header_count
Definition encoder.h:3383
int droppable
Definition encoder.h:3159
RefCntBuffer * last_show_frame_buf
Definition encoder.h:3022
aom_superres_mode superres_mode
Definition encoder.h:3442
MBMIExtFrameBufferInfo mbmi_ext_info
Definition encoder.h:2903
AV1LrPickStruct pick_lr_ctxt
Definition encoder.h:3320
double new_framerate
Definition encoder.h:3283
AV1_PRIMARY * ppi
Definition encoder.h:2882
uint64_t * src_sad_blk_64x64
Definition encoder.h:3616
int64_t norm_wiener_variance
Definition encoder.h:3570
double * tpl_rdmult_scaling_factors
Definition encoder.h:2996
int sb_counter
Definition encoder.h:3481
int last_coded_width
Definition encoder.h:3203
TileDataEnc * tile_data
Definition encoder.h:3220
int is_screen_content_type
Definition encoder.h:3355
BLOCK_SIZE weber_bsize
Definition encoder.h:3565
InterpSearchFlags interp_search_flags
Definition encoder.h:3338
TimeStamps time_stamps
Definition encoder.h:3080
int ref_idx_to_skip
Definition encoder.h:3515
YV12_BUFFER_CONFIG orig_source
Definition encoder.h:2981
FirstPassData firstpass_data
Definition encoder.h:3447
double framerate
Definition encoder.h:3090
int speed
Definition encoder.h:3100
BLOCK_SIZE fp_block_size
Definition encoder.h:3475
int use_ducky_encode
Definition encoder.h:3629
YV12_BUFFER_CONFIG trial_frame_rst
Definition encoder.h:3049
bool is_dropped_frame
Definition encoder.h:3580
ThreadData td
Definition encoder.h:2893
ResizePendingParams resize_pending_params
Definition encoder.h:3214
YV12_BUFFER_CONFIG scaled_source
Definition encoder.h:2959
int do_update_vbr_bits_off_target_fast
Definition encoder.h:3288
YV12_BUFFER_CONFIG last_frame_uf
Definition encoder.h:3043
EncQuantDequantParams enc_quant_dequant_params
Definition encoder.h:2888
RefFrameDistanceInfo ref_frame_dist_info
Definition encoder.h:3393
int * prep_rate_estimates
Definition encoder.h:3549
DuckyEncodeInfo ducky_encode_info
Definition encoder.h:3635
double ext_rate_scale
Definition encoder.h:3560
int initial_mbs
Definition encoder.h:3191
uint64_t rec_sse
Definition encoder.h:3623
YV12_BUFFER_CONFIG scaled_last_source
Definition encoder.h:2969
MV_STATS mv_stats
Definition encoder.h:3498
FrameProbInfo frame_new_probs[10]
Definition encoder.h:3249
YV12_BUFFER_CONFIG * source
Definition encoder.h:2939
int allocated_tiles
Definition encoder.h:3224
SVC svc
Definition encoder.h:3419
CB_COEFF_BUFFER * coeff_buffer_base
Definition encoder.h:2910
NOISE_ESTIMATE noise_estimate
Definition encoder.h:3452
TWO_PASS_FRAME twopass_frame
Definition encoder.h:3599
Top level primary encoder structure.
Definition encoder.h:2582
int num_fp_contexts
Definition encoder.h:2639
AV1EncRowMultiThreadSync intra_row_mt_sync
Definition encoder.h:2872
bool buffer_removal_time_present
Definition encoder.h:2753
int valid_gm_model_found[FRAME_UPDATE_TYPES]
Definition encoder.h:2861
struct aom_codec_pkt_list * output_pkt_list
Definition encoder.h:2683
int filter_level[2]
Definition encoder.h:2644
SequenceHeader seq_params
Definition encoder.h:2743
MV_STATS mv_stats
Definition encoder.h:2791
struct AV1_COMP * cpi
Definition encoder.h:2660
AV1LevelParams level_params
Definition encoder.h:2713
int internal_altref_allowed
Definition encoder.h:2688
RTC_REF rtc_ref
Definition encoder.h:2866
int b_calculate_psnr
Definition encoder.h:2718
PrimaryMultiThreadInfo p_mt_info
Definition encoder.h:2848
TEMPORAL_FILTER_INFO tf_info
Definition encoder.h:2738
TWO_PASS twopass
Definition encoder.h:2728
int frames_left
Definition encoder.h:2723
int64_t ts_start_last_show_frame
Definition encoder.h:2629
PRIMARY_RATE_CONTROL p_rc
Definition encoder.h:2733
int lap_enabled
Definition encoder.h:2708
FrameProbInfo frame_probs
Definition encoder.h:2853
int show_existing_alt_ref
Definition encoder.h:2693
int fb_of_context_type[REF_FRAMES]
Definition encoder.h:2843
int use_svc
Definition encoder.h:2748
double * tpl_sb_rdmult_scaling_factors
Definition encoder.h:2781
int filter_level_v
Definition encoder.h:2654
int filter_level_u
Definition encoder.h:2649
struct AV1_COMP * cpi_lap
Definition encoder.h:2665
struct AV1_COMP * parallel_cpi[4]
Definition encoder.h:2586
int64_t ts_end_last_show_frame
Definition encoder.h:2634
struct lookahead_ctx * lookahead
Definition encoder.h:2670
RefCntBuffer * ref_frame_map_copy[REF_FRAMES]
Definition encoder.h:2624
GF_STATE gf_state
Definition encoder.h:2703
aom_variance_fn_ptr_t fn_ptr[BLOCK_SIZES_ALL]
Definition encoder.h:2775
GF_GROUP gf_group
Definition encoder.h:2698
struct AV1_COMP_DATA parallel_frames_data[4 - 1]
Definition encoder.h:2592
TplParams tpl_data
Definition encoder.h:2786
unsigned int number_temporal_layers
Definition encoder.h:2758
unsigned int number_spatial_layers
Definition encoder.h:2763
int seq_params_locked
Definition encoder.h:2677
struct aom_internal_error_info error
Definition encoder.h:2768
Algorithm configuration parameters.
Definition encoder.h:821
int disable_trellis_quant
Definition encoder.h:843
int sharpness
Definition encoder.h:834
bool skip_postproc_filtering
Definition encoder.h:887
int arnr_max_frames
Definition encoder.h:848
bool enable_tpl_model
Definition encoder.h:866
LOOPFILTER_CONTROL loopfilter_control
Definition encoder.h:881
uint8_t cdf_update_mode
Definition encoder.h:861
bool enable_overlay
Definition encoder.h:872
int arnr_strength
Definition encoder.h:853
Stores the transforms coefficients for the whole superblock.
Definition block.h:206
The stucture of CYCLIC_REFRESH.
Definition aq_cyclicrefresh.h:36
Parameters related to CDEF.
Definition av1_common_int.h:200
int cdef_bits
Number of CDEF strength values in bits.
Definition av1_common_int.h:222
int cdef_uv_strengths[16]
CDEF strength values for chroma.
Definition av1_common_int.h:220
int cdef_strengths[16]
CDEF strength values for luma.
Definition av1_common_int.h:218
int nb_cdef_strengths
Number of CDEF strength values.
Definition av1_common_int.h:216
Definition encoder.h:2438
uint8_t * entropy_ctx
Definition encoder.h:2450
tran_low_t * tcoeff
Definition encoder.h:2442
uint16_t * eobs
Definition encoder.h:2446
Params related to MB_MODE_INFO arrays and related info.
Definition av1_common_int.h:508
BLOCK_SIZE mi_alloc_bsize
Definition av1_common_int.h:557
int cols
Definition av1_common_int.h:435
unsigned int large_scale
Definition av1_common_int.h:495
Encoder flags for compound prediction modes.
Definition encoder.h:400
bool enable_masked_comp
Definition encoder.h:409
bool enable_diff_wtd_comp
Definition encoder.h:417
bool enable_smooth_interintra
Definition encoder.h:413
bool enable_interintra_wedge
Definition encoder.h:425
bool enable_interinter_wedge
Definition encoder.h:421
bool enable_dist_wtd_comp
Definition encoder.h:404
Segmentation related information for the current frame.
Definition encoder.h:2401
uint8_t * map
Definition encoder.h:2407
bool has_lossless_segment
Definition encoder.h:2413
Input frames and last input frame.
Definition encoder.h:3682
contains per-frame encoding parameters decided upon by av1_encode_strategy() and passed down to av1_e...
Definition encoder.h:3694
int error_resilient_mode
Definition encoder.h:3698
int remapped_ref_idx[REF_FRAMES]
Definition encoder.h:3729
int ref_frame_flags
Definition encoder.h:3724
int speed
Definition encoder.h:3740
FRAME_TYPE frame_type
Definition encoder.h:3702
int show_frame
Definition encoder.h:3712
RefreshFrameInfo refresh_frame
Definition encoder.h:3735
Frame refresh flags set by the external interface.
Definition encoder.h:2268
bool golden_frame
Definition encoder.h:2270
bool bwd_ref_frame
Definition encoder.h:2271
bool update_pending
Definition encoder.h:2277
bool last_frame
Definition encoder.h:2269
bool alt_ref_frame
Definition encoder.h:2273
bool alt2_ref_frame
Definition encoder.h:2272
Flags signalled by the external interface at frame level.
Definition encoder.h:2283
bool use_primary_ref_none
Definition encoder.h:2324
bool use_ref_frame_mvs
Definition encoder.h:2308
ExtRefreshFrameFlagsInfo refresh_frame
Definition encoder.h:2292
int ref_frame_flags
Definition encoder.h:2287
bool use_error_resilient
Definition encoder.h:2313
bool use_s_frame
Definition encoder.h:2318
bool refresh_frame_context
Definition encoder.h:2297
bool refresh_frame_context_pending
Definition encoder.h:2303
Frame level features.
Definition av1_common_int.h:365
bool allow_screen_content_tools
Definition av1_common_int.h:382
bool allow_intrabc
Definition av1_common_int.h:383
bool coded_lossless
Definition av1_common_int.h:392
bool error_resilient_mode
Definition av1_common_int.h:407
bool all_lossless
Definition av1_common_int.h:396
Encoder info used for decision on forcing integer motion vectors.
Definition encoder.h:1862
double cs_rate_array[32]
Definition encoder.h:1867
int rate_size
Definition encoder.h:1875
int rate_index
Definition encoder.h:1871
Encoder-side probabilities for pruning of various AV1 tools.
Definition encoder.h:1121
int switchable_interp_probs[FRAME_UPDATE_TYPES][((SWITCHABLE_FILTERS+1) *4)][SWITCHABLE_FILTERS]
Definition encoder.h:1151
int obmc_probs[FRAME_UPDATE_TYPES][BLOCK_SIZES_ALL]
Definition encoder.h:1127
int warped_probs[FRAME_UPDATE_TYPES]
Definition encoder.h:1134
int tx_type_probs[FRAME_UPDATE_TYPES][TX_SIZES_ALL][TX_TYPES]
Definition encoder.h:1142
Data related to the current GF/ARF group and the individual frames within the group.
Definition firstpass.h:339
Parameters related to global motion search.
Definition encoder.h:2071
FrameDistPair reference_frames[2][REF_FRAMES - 1]
Definition encoder.h:2097
bool search_done
Definition encoder.h:2075
int segment_map_h
Definition encoder.h:2104
int num_ref_frames[2]
Definition encoder.h:2089
YV12_BUFFER_CONFIG * ref_buf[REF_FRAMES]
Definition encoder.h:2082
int segment_map_w
Definition encoder.h:2103
Flags related to interpolation filter search.
Definition encoder.h:2111
int default_interp_skip_flags
Definition encoder.h:2116
uint16_t interp_filter_search_mask
Definition encoder.h:2120
Encoder flags for intra prediction.
Definition encoder.h:303
bool enable_diagonal_intra
Definition encoder.h:333
bool enable_smooth_intra
Definition encoder.h:316
bool auto_intra_tools_off
Definition encoder.h:352
bool enable_filter_intra
Definition encoder.h:312
bool enable_directional_intra
Definition encoder.h:328
bool enable_paeth_intra
Definition encoder.h:320
bool enable_intra_edge_filter
Definition encoder.h:307
bool enable_cfl_intra
Definition encoder.h:324
bool enable_angle_delta
Definition encoder.h:338
Encoder config related to the coding of key frames.
Definition encoder.h:467
int key_freq_max
Definition encoder.h:476
int sframe_mode
Definition encoder.h:494
bool auto_key
Definition encoder.h:499
bool enable_intrabc
Definition encoder.h:519
int sframe_dist
Definition encoder.h:487
bool enable_sframe
Definition encoder.h:514
int enable_keyframe_filtering
Definition encoder.h:481
int fwd_kf_dist
Definition encoder.h:504
int key_freq_min
Definition encoder.h:471
bool fwd_kf_enabled
Definition encoder.h:509
Buffer to store mode information at mi_alloc_bsize (4x4 or 8x8) level.
Definition encoder.h:1908
int alloc_size
Definition encoder.h:1917
int stride
Definition encoder.h:1921
MB_MODE_INFO_EXT_FRAME * frame_base
Definition encoder.h:1913
Stores best extended mode information at frame level.
Definition block.h:242
Stores the prediction/txfm mode of the current coding block.
Definition blockd.h:222
Parameters for motion vector search process.
Definition encoder.h:2126
int max_mv_magnitude
Definition encoder.h:2132
fractional_mv_step_fp * find_fractional_mv_step
Definition encoder.h:2146
int mv_step_param
Definition encoder.h:2137
search_site_config search_site_cfg[SS_CFG_TOTAL][NUM_DISTINCT_SEARCH_METHODS]
Definition encoder.h:2153
Encoder parameters related to multi-threading.
Definition encoder.h:1753
RestoreStateBuffers restore_state_buf
Definition encoder.h:1840
AV1CdefWorkerData * cdef_worker
Definition encoder.h:1835
AV1LrSync lr_row_sync
Definition encoder.h:1810
struct EncWorkerData * tile_thr_data
Definition encoder.h:1773
AV1TplRowMultiThreadInfo tpl_row_mt
Definition encoder.h:1800
AV1EncPackBSSync pack_bs_sync
Definition encoder.h:1815
AV1EncRowMultiThreadInfo enc_row_mt
Definition encoder.h:1789
AV1LfSync lf_row_sync
Definition encoder.h:1805
AV1CdefSync cdef_sync
Definition encoder.h:1830
int num_mod_workers[NUM_MT_MODULES]
Definition encoder.h:1762
AV1EncAllIntraMultiThreadInfo intra_mt
Definition encoder.h:1795
int num_workers
Definition encoder.h:1757
int pipeline_lpf_mt_with_enc
Definition encoder.h:1846
AVxWorker * workers
Definition encoder.h:1767
bool pack_bs_mt_enabled
Definition encoder.h:1784
bool row_mt_enabled
Definition encoder.h:1779
AV1TemporalFilterSync tf_sync
Definition encoder.h:1825
AV1GlobalMotionSync gm_sync
Definition encoder.h:1820
Primary Rate Control parameters and status.
Definition ratectrl.h:300
Encoder config for coding block partitioning.
Definition encoder.h:275
bool enable_rect_partitions
Definition encoder.h:279
bool enable_1to4_partitions
Definition encoder.h:287
BLOCK_SIZE max_partition_size
Definition encoder.h:297
bool enable_ab_partitions
Definition encoder.h:283
BLOCK_SIZE min_partition_size
Definition encoder.h:292
Primary Encoder parameters related to multi-threading.
Definition encoder.h:1706
struct EncWorkerData * tile_thr_data
Definition encoder.h:1726
AV1CdefWorkerData * cdef_worker
Definition encoder.h:1731
int num_workers
Definition encoder.h:1710
int prev_num_enc_workers
Definition encoder.h:1747
AVxWorker * workers
Definition encoder.h:1720
AVxWorker * p_workers[4]
Definition encoder.h:1737
int p_num_workers
Definition encoder.h:1742
int num_mod_workers[NUM_MT_MODULES]
Definition encoder.h:1715
Rate Control parameters and status.
Definition ratectrl.h:134
Encoder rate control configuration parameters.
Definition encoder.h:525
int worst_allowed_q
Definition encoder.h:595
int over_shoot_pct
Definition encoder.h:590
unsigned int max_intra_bitrate_pct
Definition encoder.h:560
int drop_frames_water_mark
Definition encoder.h:578
int max_consec_drop_ms
Definition encoder.h:633
int vbrmax_section
Definition encoder.h:626
int64_t maximum_buffer_size_ms
Definition encoder.h:544
unsigned int vbr_corpus_complexity_lap
Definition encoder.h:555
unsigned int min_cr
Definition encoder.h:574
int vbrbias
Definition encoder.h:616
unsigned int gf_cbr_boost_pct
Definition encoder.h:569
int vbrmin_section
Definition encoder.h:621
enum aom_rc_mode mode
Definition encoder.h:609
unsigned int max_inter_bitrate_pct
Definition encoder.h:565
int64_t starting_buffer_level_ms
Definition encoder.h:534
int best_allowed_q
Definition encoder.h:600
int under_shoot_pct
Definition encoder.h:584
int64_t target_bandwidth
Definition encoder.h:549
int64_t optimal_buffer_level_ms
Definition encoder.h:539
int cq_level
Definition encoder.h:604
Refrence frame distance related variables.
Definition encoder.h:2185
int8_t nearest_past_ref
Definition encoder.h:2193
int ref_relative_dist[INTER_REFS_PER_FRAME]
Definition encoder.h:2189
int8_t nearest_future_ref
Definition encoder.h:2197
Refresh frame flags for different type of frames.
Definition encoder.h:2164
bool bwd_ref_frame
Definition encoder.h:2166
bool golden_frame
Definition encoder.h:2165
bool alt_ref_frame
Definition encoder.h:2167
Encoder config related to resize.
Definition encoder.h:255
uint8_t resize_scale_denominator
Definition encoder.h:264
uint8_t resize_kf_scale_denominator
Definition encoder.h:269
RESIZE_MODE resize_mode
Definition encoder.h:259
Desired dimensions for an externally triggered resize.
Definition encoder.h:2177
int width
Definition encoder.h:2178
int height
Definition encoder.h:2179
Parameters related to restoration types.
Definition encoder.h:1667
RestorationType best_rtype[RESTORE_TYPES - 1]
Definition encoder.h:1682
WienerInfo wiener
Definition encoder.h:1671
SgrprojInfo sgrproj
Definition encoder.h:1676
Parameters related to Restoration Info.
Definition restoration.h:246
RestorationType frame_restoration_type
Definition restoration.h:250
Buffers to be backed up during parallel encode set to be restored later.
Definition encoder.h:1642
int32_t * rst_tmpbuf
Definition encoder.h:1656
RestorationLineBuffers * rlbs
Definition encoder.h:1661
uint16_t * cdef_colbuf[3]
Definition encoder.h:1651
uint16_t * cdef_srcbuf
Definition encoder.h:1646
Top level speed vs quality trade off data struture.
Definition speed_features.h:1939
MV_SPEED_FEATURES mv_sf
Definition speed_features.h:1968
LOOP_FILTER_SPEED_FEATURES lpf_sf
Definition speed_features.h:2003
TX_SPEED_FEATURES tx_sf
Definition speed_features.h:1988
REAL_TIME_SPEED_FEATURES rt_sf
Definition speed_features.h:2008
The stucture of SVC.
Definition svc_layercontext.h:89
Parameters related to Sgrproj Filter.
Definition blockd.h:507
Encoder config related to frame super-resolution.
Definition encoder.h:431
uint8_t superres_kf_scale_denominator
Definition encoder.h:453
aom_superres_mode superres_mode
Definition encoder.h:457
int superres_kf_qthresh
Definition encoder.h:441
bool enable_superres
Definition encoder.h:461
uint8_t superres_scale_denominator
Definition encoder.h:447
int superres_qthresh
Definition encoder.h:436
Temporal filter info for a gop.
Definition temporal_filter.h:161
Frame level Two pass status and control data.
Definition firstpass.h:458
Two pass status and control data.
Definition firstpass.h:416
Parameters related to temporal filtering.
Definition temporal_filter.h:98
Frame time stamps.
Definition encoder.h:2419
int64_t prev_ts_start
Definition encoder.h:2423
int64_t first_ts_start
Definition encoder.h:2431
int64_t prev_ts_end
Definition encoder.h:2427
Params related to temporal dependency model.
Definition tpl_model.h:165
Encoder flags for transform sizes and types.
Definition encoder.h:358
bool enable_tx64
Definition encoder.h:362
bool use_inter_dct_only
Definition encoder.h:385
bool enable_flip_idtx
Definition encoder.h:366
bool use_intra_default_tx_only
Definition encoder.h:390
bool use_intra_dct_only
Definition encoder.h:380
bool enable_rect_tx
Definition encoder.h:370
bool reduced_tx_type_set
Definition encoder.h:375
bool enable_tx_size_search
Definition encoder.h:394
Thresholds for variance based partitioning.
Definition encoder.h:1372
int64_t thresholds[5]
Definition encoder.h:1381
int64_t threshold_minmax
Definition encoder.h:1387
Parameters related to Wiener Filter.
Definition blockd.h:494
Parameters used for winner mode processing.
Definition encoder.h:2215
unsigned int use_transform_domain_distortion[MODE_EVAL_TYPES]
Definition encoder.h:2237
TX_SIZE_SEARCH_METHOD tx_size_search_methods[MODE_EVAL_TYPES]
Definition encoder.h:2229
unsigned int skip_txfm_level[MODE_EVAL_TYPES]
Definition encoder.h:2251
unsigned int coeff_opt_thresholds[MODE_EVAL_TYPES][2]
Definition encoder.h:2223
unsigned int tx_domain_dist_threshold[MODE_EVAL_TYPES]
Definition encoder.h:2244
unsigned int predict_dc_level[MODE_EVAL_TYPES]
Definition encoder.h:2258
Struct used to hold inter mode data for fast tx search.
Definition encoder.h:1277
RD_STATS rd_cost_arr[MAX_INTER_MODES]
Definition encoder.h:1306
int64_t est_rd_arr[MAX_INTER_MODES]
Definition encoder.h:1298
int64_t sse_arr[MAX_INTER_MODES]
Definition encoder.h:1294
RD_STATS rd_cost_y_arr[MAX_INTER_MODES]
Definition encoder.h:1310
RD_STATS rd_cost_uv_arr[MAX_INTER_MODES]
Definition encoder.h:1314
MB_MODE_INFO mbmi_arr[MAX_INTER_MODES]
Definition encoder.h:1286
RdIdxPair rd_idx_pair_arr[MAX_INTER_MODES]
Definition encoder.h:1302
int mode_rate_arr[MAX_INTER_MODES]
Definition encoder.h:1290
int num
Definition encoder.h:1282
MB_MODE_INFO_EXT_FRAME * mbmi_ext_frame
Finalized mbmi_ext for the whole frame.
Definition block.h:910
const struct scale_factors * block_ref_scale_factors[2]
Definition blockd.h:687