blob: 057565411a11263197f9f202afbc0391cd410b43 [file] [log] [blame]
Bohan Lic1d42fe2020-12-21 13:27:47 -08001/*
2 * Copyright (c) 2021, 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
12#include "av1/arg_defs.h"
13
14static const struct arg_enum_list test_decode_enum[] = {
15 { "off", TEST_DECODE_OFF },
16 { "fatal", TEST_DECODE_FATAL },
17 { "warn", TEST_DECODE_WARN },
18 { NULL, 0 }
19};
20
21static const struct arg_enum_list bitdepth_enum[] = {
22 { "8", AOM_BITS_8 }, { "10", AOM_BITS_10 }, { "12", AOM_BITS_12 }, { NULL, 0 }
23};
24
25#if CONFIG_WEBM_IO
26static const struct arg_enum_list stereo_mode_enum[] = {
27 { "mono", STEREO_FORMAT_MONO },
28 { "left-right", STEREO_FORMAT_LEFT_RIGHT },
29 { "bottom-top", STEREO_FORMAT_BOTTOM_TOP },
30 { "top-bottom", STEREO_FORMAT_TOP_BOTTOM },
31 { "right-left", STEREO_FORMAT_RIGHT_LEFT },
32 { NULL, 0 }
33};
34#endif
35
36static const struct arg_enum_list end_usage_enum[] = { { "vbr", AOM_VBR },
37 { "cbr", AOM_CBR },
38 { "cq", AOM_CQ },
39 { "q", AOM_Q },
40 { NULL, 0 } };
41
42static const struct arg_enum_list tuning_enum[] = {
43 { "psnr", AOM_TUNE_PSNR },
44 { "ssim", AOM_TUNE_SSIM },
45 { "vmaf_with_preprocessing", AOM_TUNE_VMAF_WITH_PREPROCESSING },
46 { "vmaf_without_preprocessing", AOM_TUNE_VMAF_WITHOUT_PREPROCESSING },
47 { "vmaf", AOM_TUNE_VMAF_MAX_GAIN },
48 { "vmaf_neg", AOM_TUNE_VMAF_NEG_MAX_GAIN },
Sai Dengad5165d2021-02-10 09:52:03 -080049 { "butteraugli", AOM_TUNE_BUTTERAUGLI },
Lin Zheng2060c142023-02-18 00:32:23 +000050 { "vmaf_saliency_map", AOM_TUNE_VMAF_SALIENCY_MAP },
Bohan Lic1d42fe2020-12-21 13:27:47 -080051 { NULL, 0 }
52};
53
Luca Versari6807a7f2021-12-20 21:41:20 +010054static const struct arg_enum_list dist_metric_enum[] = {
55 { "psnr", AOM_DIST_METRIC_PSNR },
56 { "qm-psnr", AOM_DIST_METRIC_QM_PSNR },
57 { NULL, 0 }
58};
59
Bohan Lic1d42fe2020-12-21 13:27:47 -080060#if CONFIG_AV1_ENCODER
61static const struct arg_enum_list timing_info_enum[] = {
62 { "unspecified", AOM_TIMING_UNSPECIFIED },
63 { "constant", AOM_TIMING_EQUAL },
64 { "model", AOM_TIMING_DEC_MODEL },
65 { NULL, 0 }
66};
67
68static const struct arg_enum_list superblock_size_enum[] = {
69 { "dynamic", AOM_SUPERBLOCK_SIZE_DYNAMIC },
70 { "64", AOM_SUPERBLOCK_SIZE_64X64 },
71 { "128", AOM_SUPERBLOCK_SIZE_128X128 },
72 { NULL, 0 }
73};
74
75static const struct arg_enum_list matrix_coefficients_enum[] = {
76 { "identity", AOM_CICP_MC_IDENTITY },
77 { "bt709", AOM_CICP_MC_BT_709 },
78 { "unspecified", AOM_CICP_MC_UNSPECIFIED },
79 { "fcc73", AOM_CICP_MC_FCC },
80 { "bt470bg", AOM_CICP_MC_BT_470_B_G },
81 { "bt601", AOM_CICP_MC_BT_601 },
82 { "smpte240", AOM_CICP_CP_SMPTE_240 },
83 { "ycgco", AOM_CICP_MC_SMPTE_YCGCO },
84 { "bt2020ncl", AOM_CICP_MC_BT_2020_NCL },
85 { "bt2020cl", AOM_CICP_MC_BT_2020_CL },
86 { "smpte2085", AOM_CICP_MC_SMPTE_2085 },
87 { "chromncl", AOM_CICP_MC_CHROMAT_NCL },
88 { "chromcl", AOM_CICP_MC_CHROMAT_CL },
89 { "ictcp", AOM_CICP_MC_ICTCP },
90 { NULL, 0 }
91};
92
93static const struct arg_enum_list chroma_sample_position_enum[] = {
94 { "unknown", AOM_CSP_UNKNOWN },
95 { "vertical", AOM_CSP_VERTICAL },
96 { "colocated", AOM_CSP_COLOCATED },
97 { NULL, 0 }
98};
99
100static const struct arg_enum_list tune_content_enum[] = {
101 { "default", AOM_CONTENT_DEFAULT },
102 { "screen", AOM_CONTENT_SCREEN },
Jingning Hana524b842021-02-03 13:59:01 -0800103 { "film", AOM_CONTENT_FILM },
Bohan Lic1d42fe2020-12-21 13:27:47 -0800104 { NULL, 0 }
105};
106
107static const struct arg_enum_list transfer_characteristics_enum[] = {
108 { "unspecified", AOM_CICP_CP_UNSPECIFIED },
109 { "bt709", AOM_CICP_TC_BT_709 },
110 { "bt470m", AOM_CICP_TC_BT_470_M },
111 { "bt470bg", AOM_CICP_TC_BT_470_B_G },
112 { "bt601", AOM_CICP_TC_BT_601 },
113 { "smpte240", AOM_CICP_TC_SMPTE_240 },
114 { "lin", AOM_CICP_TC_LINEAR },
115 { "log100", AOM_CICP_TC_LOG_100 },
116 { "log100sq10", AOM_CICP_TC_LOG_100_SQRT10 },
117 { "iec61966", AOM_CICP_TC_IEC_61966 },
118 { "bt1361", AOM_CICP_TC_BT_1361 },
119 { "srgb", AOM_CICP_TC_SRGB },
120 { "bt2020-10bit", AOM_CICP_TC_BT_2020_10_BIT },
121 { "bt2020-12bit", AOM_CICP_TC_BT_2020_12_BIT },
122 { "smpte2084", AOM_CICP_TC_SMPTE_2084 },
123 { "hlg", AOM_CICP_TC_HLG },
124 { "smpte428", AOM_CICP_TC_SMPTE_428 },
125 { NULL, 0 }
126};
127
128static const struct arg_enum_list color_primaries_enum[] = {
129 { "bt709", AOM_CICP_CP_BT_709 },
130 { "unspecified", AOM_CICP_CP_UNSPECIFIED },
131 { "bt601", AOM_CICP_CP_BT_601 },
132 { "bt470m", AOM_CICP_CP_BT_470_M },
133 { "bt470bg", AOM_CICP_CP_BT_470_B_G },
134 { "smpte240", AOM_CICP_CP_SMPTE_240 },
135 { "film", AOM_CICP_CP_GENERIC_FILM },
136 { "bt2020", AOM_CICP_CP_BT_2020 },
137 { "xyz", AOM_CICP_CP_XYZ },
138 { "smpte431", AOM_CICP_CP_SMPTE_431 },
139 { "smpte432", AOM_CICP_CP_SMPTE_432 },
140 { "ebu3213", AOM_CICP_CP_EBU_3213 },
141 { NULL, 0 }
142};
143#endif // CONFIG_AV1_ENCODER
144
145const av1_codec_arg_definitions_t g_av1_codec_arg_defs = {
146 .help = ARG_DEF(NULL, "help", 0, "Show usage options and exit"),
147 .debugmode =
148 ARG_DEF("D", "debug", 0, "Debug mode (makes output deterministic)"),
149 .outputfile = ARG_DEF("o", "output", 1, "Output filename"),
Jerome Jiangd116cab2022-01-21 13:17:02 -0800150 .use_nv12 = ARG_DEF(NULL, "nv12", 0, "Input file is NV12"),
Wan-Teh Changca5281c2021-03-02 11:14:10 -0800151 .use_yv12 = ARG_DEF(NULL, "yv12", 0, "Input file is YV12"),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800152 .use_i420 = ARG_DEF(NULL, "i420", 0, "Input file is I420 (default)"),
153 .use_i422 = ARG_DEF(NULL, "i422", 0, "Input file is I422"),
154 .use_i444 = ARG_DEF(NULL, "i444", 0, "Input file is I444"),
155 .codecarg = ARG_DEF(NULL, "codec", 1, "Codec to use"),
Bohan Li445fdf62021-06-03 16:16:00 -0700156 .passes = ARG_DEF("p", "passes", 1, "Number of passes (1/2/3)"),
157 .pass_arg = ARG_DEF(NULL, "pass", 1, "Pass to execute (1/2/3)"),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800158 .fpf_name = ARG_DEF(NULL, "fpf", 1, "First pass statistics file name"),
159 .limit = ARG_DEF(NULL, "limit", 1, "Stop encoding after n input frames"),
160 .skip = ARG_DEF(NULL, "skip", 1, "Skip the first n input frames"),
161 .good_dl = ARG_DEF(NULL, "good", 0, "Use Good Quality Deadline"),
162 .rt_dl = ARG_DEF(NULL, "rt", 0, "Use Realtime Quality Deadline"),
Jingning Hanc5d38e02021-02-11 14:40:27 -0800163 .ai_dl = ARG_DEF(NULL, "allintra", 0, "Use all intra mode"),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800164 .quietarg = ARG_DEF("q", "quiet", 0, "Do not print encode progress"),
165 .verbosearg = ARG_DEF("v", "verbose", 0, "Show encoder parameters"),
166 .psnrarg = ARG_DEF(
167 NULL, "psnr", -1,
James Zern884af212022-06-06 16:29:57 -0700168 "Show PSNR in status line "
Bohan Lic1d42fe2020-12-21 13:27:47 -0800169 "(0: Disable PSNR status line display, 1: PSNR calculated using input "
James Zern884af212022-06-06 16:29:57 -0700170 "bit-depth (default), 2: PSNR calculated using stream bit-depth); "
Bohan Lic1d42fe2020-12-21 13:27:47 -0800171 "takes default option when arguments are not specified"),
172 .use_cfg = ARG_DEF("c", "cfg", 1, "Config file to use"),
173 .recontest = ARG_DEF_ENUM(NULL, "test-decode", 1,
174 "Test encode/decode mismatch", test_decode_enum),
175 .framerate = ARG_DEF(NULL, "fps", 1, "Stream frame rate (rate/scale)"),
176 .use_webm =
177 ARG_DEF(NULL, "webm", 0, "Output WebM (default when WebM IO is enabled)"),
178 .use_ivf = ARG_DEF(NULL, "ivf", 0, "Output IVF"),
179 .use_obu = ARG_DEF(NULL, "obu", 0, "Output OBU"),
180 .q_hist_n =
181 ARG_DEF(NULL, "q-hist", 1, "Show quantizer histogram (n-buckets)"),
182 .rate_hist_n =
183 ARG_DEF(NULL, "rate-hist", 1, "Show rate histogram (n-buckets)"),
184 .disable_warnings =
185 ARG_DEF(NULL, "disable-warnings", 0,
James Zern884af212022-06-06 16:29:57 -0700186 "Disable warnings about potentially incorrect encode settings"),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800187 .disable_warning_prompt =
188 ARG_DEF("y", "disable-warning-prompt", 0,
James Zern884af212022-06-06 16:29:57 -0700189 "Display warnings, but do not prompt user to continue"),
190 .bitdeptharg =
191 ARG_DEF_ENUM("b", "bit-depth", 1, "Bit depth for codec", bitdepth_enum),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800192 .inbitdeptharg = ARG_DEF(NULL, "input-bit-depth", 1, "Bit depth of input"),
193
194 .input_chroma_subsampling_x = ARG_DEF(NULL, "input-chroma-subsampling-x", 1,
James Zern884af212022-06-06 16:29:57 -0700195 "Chroma subsampling x value"),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800196 .input_chroma_subsampling_y = ARG_DEF(NULL, "input-chroma-subsampling-y", 1,
James Zern884af212022-06-06 16:29:57 -0700197 "Chroma subsampling y value"),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800198
Wan-Teh Chang05c26172021-02-16 10:30:56 -0800199 .usage = ARG_DEF("u", "usage", 1,
Wan-Teh Changca5281c2021-03-02 11:14:10 -0800200 "Usage profile number to use (0: good, 1: rt, 2: allintra)"),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800201 .threads = ARG_DEF("t", "threads", 1, "Max number of threads to use"),
202 .profile = ARG_DEF(NULL, "profile", 1, "Bitstream profile number to use"),
203 .width = ARG_DEF("w", "width", 1, "Frame width"),
204 .height = ARG_DEF("h", "height", 1, "Frame height"),
205 .forced_max_frame_width = ARG_DEF(NULL, "forced_max_frame_width", 1,
206 "Maximum frame width value to force"),
207 .forced_max_frame_height = ARG_DEF(NULL, "forced_max_frame_height", 1,
208 "Maximum frame height value to force"),
209#if CONFIG_WEBM_IO
210 .stereo_mode = ARG_DEF_ENUM(NULL, "stereo-mode", 1, "Stereo 3D video format",
211 stereo_mode_enum),
212#endif
213 .timebase = ARG_DEF(NULL, "timebase", 1,
214 "Output timestamp precision (fractional seconds)"),
215 .global_error_resilient = ARG_DEF(NULL, "global-error-resilient", 1,
216 "Enable global error resiliency features"),
217 .lag_in_frames =
218 ARG_DEF(NULL, "lag-in-frames", 1, "Max number of frames to lag"),
219 .large_scale_tile = ARG_DEF(
220 NULL, "large-scale-tile", 1,
221 "Large scale tile coding (0: off (default), 1: on (ivf output only))"),
222 .monochrome =
223 ARG_DEF(NULL, "monochrome", 0, "Monochrome video (no chroma planes)"),
224 .full_still_picture_hdr = ARG_DEF(NULL, "full-still-picture-hdr", 0,
225 "Use full header for still picture"),
226 .use_16bit_internal =
227 ARG_DEF(NULL, "use-16bit-internal", 0, "Force use of 16-bit pipeline"),
228 .dropframe_thresh =
229 ARG_DEF(NULL, "drop-frame", 1, "Temporal resampling threshold (buf %)"),
James Zern5c2b90a2023-05-10 10:30:50 -0700230 .resize_mode = ARG_DEF(
231 NULL, "resize-mode", 1,
232 "Frame resize mode (0: off (default), 1: fixed, 2: random, 3: dynamic)"),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800233 .resize_denominator =
234 ARG_DEF(NULL, "resize-denominator", 1, "Frame resize denominator"),
235 .resize_kf_denominator = ARG_DEF(NULL, "resize-kf-denominator", 1,
236 "Frame resize keyframe denominator"),
237 .superres_mode =
James Zern5c2b90a2023-05-10 10:30:50 -0700238 ARG_DEF(NULL, "superres-mode", 1,
239 "Frame super-resolution mode (0: disabled (default), 1: fixed, "
240 "2: random, 3: qthresh, 4: auto)"),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800241 .superres_denominator = ARG_DEF(NULL, "superres-denominator", 1,
242 "Frame super-resolution denominator"),
243 .superres_kf_denominator =
244 ARG_DEF(NULL, "superres-kf-denominator", 1,
245 "Frame super-resolution keyframe denominator"),
246 .superres_qthresh = ARG_DEF(NULL, "superres-qthresh", 1,
247 "Frame super-resolution qindex threshold"),
248 .superres_kf_qthresh =
249 ARG_DEF(NULL, "superres-kf-qthresh", 1,
250 "Frame super-resolution keyframe qindex threshold"),
251 .end_usage =
252 ARG_DEF_ENUM(NULL, "end-usage", 1, "Rate control mode", end_usage_enum),
253 .target_bitrate = ARG_DEF(NULL, "target-bitrate", 1, "Bitrate (kbps)"),
254 .min_quantizer = ARG_DEF(NULL, "min-q", 1, "Minimum (best) quantizer"),
255 .max_quantizer = ARG_DEF(NULL, "max-q", 1, "Maximum (worst) quantizer"),
256 .undershoot_pct = ARG_DEF(NULL, "undershoot-pct", 1,
257 "Datarate undershoot (min) target (%)"),
258 .overshoot_pct =
259 ARG_DEF(NULL, "overshoot-pct", 1, "Datarate overshoot (max) target (%)"),
260 .buf_sz = ARG_DEF(NULL, "buf-sz", 1, "Client buffer size (ms)"),
261 .buf_initial_sz =
262 ARG_DEF(NULL, "buf-initial-sz", 1, "Client initial buffer size (ms)"),
263 .buf_optimal_sz =
264 ARG_DEF(NULL, "buf-optimal-sz", 1, "Client optimal buffer size (ms)"),
265 .bias_pct = ARG_DEF(NULL, "bias-pct", 1, "CBR/VBR bias (0=CBR, 100=VBR)"),
266 .minsection_pct =
267 ARG_DEF(NULL, "minsection-pct", 1, "GOP min bitrate (% of target)"),
268 .maxsection_pct =
269 ARG_DEF(NULL, "maxsection-pct", 1, "GOP max bitrate (% of target)"),
270 .fwd_kf_enabled =
271 ARG_DEF(NULL, "enable-fwd-kf", 1, "Enable forward reference keyframes"),
272 .kf_min_dist =
273 ARG_DEF(NULL, "kf-min-dist", 1, "Minimum keyframe interval (frames)"),
274 .kf_max_dist =
275 ARG_DEF(NULL, "kf-max-dist", 1, "Maximum keyframe interval (frames)"),
276 .kf_disabled = ARG_DEF(NULL, "disable-kf", 0, "Disable keyframe placement"),
277 .sframe_dist = ARG_DEF(NULL, "sframe-dist", 1, "S-Frame interval (frames)"),
278 .sframe_mode =
279 ARG_DEF(NULL, "sframe-mode", 1, "S-Frame insertion mode (1..2)"),
280 .save_as_annexb = ARG_DEF(NULL, "annexb", 1, "Save as Annex-B"),
281 .noise_sens = ARG_DEF(NULL, "noise-sensitivity", 1,
282 "Noise sensitivity (frames to blur)"),
283 .sharpness = ARG_DEF(NULL, "sharpness", 1,
Jayasanker J04e45a82021-05-03 12:42:32 +0530284 "Bias towards block sharpness in rate-distortion "
285 "optimization of transform coefficients "
Jayasanker J371dfad2021-04-21 13:24:07 +0530286 "(0..7), default is 0"),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800287 .static_thresh =
288 ARG_DEF(NULL, "static-thresh", 1, "Motion detection threshold"),
289 .auto_altref =
290 ARG_DEF(NULL, "auto-alt-ref", 1, "Enable automatic alt reference frames"),
291 .arnr_maxframes =
292 ARG_DEF(NULL, "arnr-maxframes", 1, "AltRef max frames (0..15)"),
293 .arnr_strength =
294 ARG_DEF(NULL, "arnr-strength", 1, "AltRef filter strength (0..6)"),
295 .tune_metric = ARG_DEF_ENUM(NULL, "tune", 1, "Distortion metric tuned with",
296 tuning_enum),
Luca Versari6807a7f2021-12-20 21:41:20 +0100297 .dist_metric = ARG_DEF_ENUM(
298 NULL, "dist-metric", 1,
299 "Distortion metric to use for in-block optimization", dist_metric_enum),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800300 .cq_level =
301 ARG_DEF(NULL, "cq-level", 1, "Constant/Constrained Quality level"),
302 .max_intra_rate_pct =
303 ARG_DEF(NULL, "max-intra-rate", 1, "Max I-frame bitrate (pct)"),
304#if CONFIG_AV1_ENCODER
Wan-Teh Changcc7d10c2022-01-12 17:28:26 -0800305 .cpu_used_av1 = ARG_DEF(NULL, "cpu-used", 1,
Wan-Teh Chang7c566dc2023-10-09 14:16:50 -0700306 "Speed setting (0..6 in good mode, 5..11 in realtime "
Wan-Teh Changcc7d10c2022-01-12 17:28:26 -0800307 "mode, 0..9 in all intra mode)"),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800308 .rowmtarg =
309 ARG_DEF(NULL, "row-mt", 1,
310 "Enable row based multi-threading (0: off, 1: on (default))"),
Remya Prakasan93c1c372021-10-25 14:36:07 +0530311 .fpmtarg = ARG_DEF(
312 NULL, "fp-mt", 1,
313 "Enable frame parallel multi-threading (0: off (default), 1: on)"),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800314 .tile_cols =
315 ARG_DEF(NULL, "tile-columns", 1, "Number of tile columns to use, log2"),
316 .tile_rows =
317 ARG_DEF(NULL, "tile-rows", 1, "Number of tile rows to use, log2"),
318 .enable_tpl_model = ARG_DEF(NULL, "enable-tpl-model", 1,
319 "RDO based on frame temporal dependency "
James Zern884af212022-06-06 16:29:57 -0700320 "(0: off, 1: backward source based); "
321 "required for deltaq mode"),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800322 .enable_keyframe_filtering = ARG_DEF(
323 NULL, "enable-keyframe-filtering", 1,
James Zern884af212022-06-06 16:29:57 -0700324 "Apply temporal filtering on key frame "
Bohan Lic1d42fe2020-12-21 13:27:47 -0800325 "(0: no filter, 1: filter without overlay (default), "
326 "2: filter with overlay - experimental, may break random access in "
James Zern884af212022-06-06 16:29:57 -0700327 "players)"),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800328 .tile_width = ARG_DEF(NULL, "tile-width", 1, "Tile widths (comma separated)"),
329 .tile_height =
330 ARG_DEF(NULL, "tile-height", 1, "Tile heights (command separated)"),
331 .lossless = ARG_DEF(NULL, "lossless", 1,
332 "Lossless mode (0: false (default), 1: true)"),
333 .enable_cdef = ARG_DEF(
334 NULL, "enable-cdef", 1,
335 "Enable the constrained directional enhancement filter (0: false, "
Fyodor Kyslov32a00562021-11-09 12:14:16 -0800336 "1: true (default), 2: disable for non-reference frames)"),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800337 .enable_restoration = ARG_DEF(NULL, "enable-restoration", 1,
338 "Enable the loop restoration filter (0: false "
James Zern884af212022-06-06 16:29:57 -0700339 "(default in realtime mode), "
340 "1: true (default in non-realtime mode))"),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800341 .enable_rect_partitions = ARG_DEF(NULL, "enable-rect-partitions", 1,
342 "Enable rectangular partitions "
343 "(0: false, 1: true (default))"),
344 .enable_ab_partitions =
345 ARG_DEF(NULL, "enable-ab-partitions", 1,
346 "Enable ab partitions (0: false, 1: true (default))"),
347 .enable_1to4_partitions = ARG_DEF(NULL, "enable-1to4-partitions", 1,
348 "Enable 1:4 and 4:1 partitions "
349 "(0: false, 1: true (default))"),
350 .min_partition_size =
351 ARG_DEF(NULL, "min-partition-size", 1,
352 "Set min partition size "
James Zern884af212022-06-06 16:29:57 -0700353 "(4:4x4, 8:8x8, 16:16x16, 32:32x32, 64:64x64, 128:128x128); "
354 "with 4k+ resolutions or higher speed settings, min "
355 "partition size will have a minimum of 8"),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800356 .max_partition_size =
357 ARG_DEF(NULL, "max-partition-size", 1,
358 "Set max partition size "
359 "(4:4x4, 8:8x8, 16:16x16, 32:32x32, 64:64x64, 128:128x128)"),
360 .enable_dual_filter = ARG_DEF(NULL, "enable-dual-filter", 1,
361 "Enable dual filter "
362 "(0: false, 1: true (default))"),
363 .enable_chroma_deltaq = ARG_DEF(NULL, "enable-chroma-deltaq", 1,
364 "Enable chroma delta quant "
365 "(0: false (default), 1: true)"),
366 .enable_intra_edge_filter = ARG_DEF(NULL, "enable-intra-edge-filter", 1,
367 "Enable intra edge filtering "
368 "(0: false, 1: true (default))"),
369 .enable_order_hint = ARG_DEF(NULL, "enable-order-hint", 1,
370 "Enable order hint "
371 "(0: false, 1: true (default))"),
372 .enable_tx64 =
373 ARG_DEF(NULL, "enable-tx64", 1,
374 "Enable 64-pt transform (0: false, 1: true (default))"),
375 .enable_flip_idtx =
376 ARG_DEF(NULL, "enable-flip-idtx", 1,
377 "Enable extended transform type (0: false, 1: true (default)) "
378 "including FLIPADST_DCT, DCT_FLIPADST, FLIPADST_FLIPADST, "
379 "ADST_FLIPADST, FLIPADST_ADST, IDTX, V_DCT, H_DCT, V_ADST, "
380 "H_ADST, V_FLIPADST, H_FLIPADST"),
381 .enable_rect_tx =
382 ARG_DEF(NULL, "enable-rect-tx", 1,
383 "Enable rectangular transform (0: false, 1: true (default))"),
384 .enable_dist_wtd_comp = ARG_DEF(NULL, "enable-dist-wtd-comp", 1,
385 "Enable distance-weighted compound "
386 "(0: false, 1: true (default))"),
387 .enable_masked_comp = ARG_DEF(NULL, "enable-masked-comp", 1,
388 "Enable masked (wedge/diff-wtd) compound "
389 "(0: false, 1: true (default))"),
390 .enable_onesided_comp = ARG_DEF(NULL, "enable-onesided-comp", 1,
391 "Enable one sided compound "
392 "(0: false, 1: true (default))"),
393 .enable_interintra_comp = ARG_DEF(NULL, "enable-interintra-comp", 1,
394 "Enable interintra compound "
395 "(0: false, 1: true (default))"),
396 .enable_smooth_interintra = ARG_DEF(NULL, "enable-smooth-interintra", 1,
397 "Enable smooth interintra mode "
398 "(0: false, 1: true (default))"),
399 .enable_diff_wtd_comp = ARG_DEF(NULL, "enable-diff-wtd-comp", 1,
400 "Enable difference-weighted compound "
401 "(0: false, 1: true (default))"),
402 .enable_interinter_wedge = ARG_DEF(NULL, "enable-interinter-wedge", 1,
403 "Enable interinter wedge compound "
404 "(0: false, 1: true (default))"),
405 .enable_interintra_wedge = ARG_DEF(NULL, "enable-interintra-wedge", 1,
406 "Enable interintra wedge compound "
407 "(0: false, 1: true (default))"),
408 .enable_global_motion = ARG_DEF(NULL, "enable-global-motion", 1,
409 "Enable global motion "
410 "(0: false, 1: true (default))"),
411 .enable_warped_motion = ARG_DEF(NULL, "enable-warped-motion", 1,
412 "Enable local warped motion "
413 "(0: false, 1: true (default))"),
414 .enable_filter_intra = ARG_DEF(NULL, "enable-filter-intra", 1,
415 "Enable filter intra prediction mode "
416 "(0: false, 1: true (default))"),
417 .enable_smooth_intra = ARG_DEF(NULL, "enable-smooth-intra", 1,
418 "Enable smooth intra prediction modes "
419 "(0: false, 1: true (default))"),
420 .enable_paeth_intra = ARG_DEF(
421 NULL, "enable-paeth-intra", 1,
422 "Enable Paeth intra prediction mode (0: false, 1: true (default))"),
423 .enable_cfl_intra = ARG_DEF(NULL, "enable-cfl-intra", 1,
424 "Enable chroma from luma intra prediction mode "
425 "(0: false, 1: true (default))"),
Maryla4bb52812021-06-18 08:36:58 +0200426 .enable_directional_intra =
427 ARG_DEF(NULL, "enable-directional-intra", 1,
428 "Enable directional intra prediction modes "
429 "(0: false, 1: true (default))"),
Fyodor Kyslovc491c662021-03-09 11:11:20 -0800430 .enable_diagonal_intra =
431 ARG_DEF(NULL, "enable-diagonal-intra", 1,
Maryla4bb52812021-06-18 08:36:58 +0200432 "Enable diagonal (D45 to D203) intra prediction modes, which are "
James Zern884af212022-06-06 16:29:57 -0700433 "a subset of directional modes; has no effect if "
Maryla4bb52812021-06-18 08:36:58 +0200434 "enable-directional-intra is 0 (0: false, 1: true (default))"),
Wan-Teh Changb26b6402022-09-22 14:26:26 -0700435 .force_video_mode = ARG_DEF(
436 NULL, "force-video-mode", 1,
437 "Force video mode even for a single frame (0: false (default), 1: true)"),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800438 .enable_obmc = ARG_DEF(NULL, "enable-obmc", 1,
439 "Enable OBMC (0: false, 1: true (default))"),
440 .enable_overlay =
441 ARG_DEF(NULL, "enable-overlay", 1,
442 "Enable coding overlay frames (0: false, 1: true (default))"),
443 .enable_palette =
444 ARG_DEF(NULL, "enable-palette", 1,
445 "Enable palette prediction mode (0: false, 1: true (default))"),
446 .enable_intrabc = ARG_DEF(NULL, "enable-intrabc", 1,
447 "Enable intra block copy prediction mode "
448 "(0: false, 1: true (default))"),
449 .enable_angle_delta =
450 ARG_DEF(NULL, "enable-angle-delta", 1,
451 "Enable intra angle delta (0: false, 1: true (default))"),
452 .disable_trellis_quant = ARG_DEF(
453 NULL, "disable-trellis-quant", 1,
454 "Disable trellis optimization of quantized coefficients (0: false "
James Zern884af212022-06-06 16:29:57 -0700455 "1: true 2: true for rd search 3: true for estimate yrd search "
Bohan Lic1d42fe2020-12-21 13:27:47 -0800456 "(default))"),
457 .enable_qm =
458 ARG_DEF(NULL, "enable-qm", 1,
459 "Enable quantisation matrices (0: false (default), 1: true)"),
460 .qm_min = ARG_DEF(NULL, "qm-min", 1,
461 "Min quant matrix flatness (0..15), default is 8"),
462 .qm_max = ARG_DEF(NULL, "qm-max", 1,
463 "Max quant matrix flatness (0..15), default is 15"),
464 .reduced_tx_type_set = ARG_DEF(NULL, "reduced-tx-type-set", 1,
465 "Use reduced set of transform types"),
466 .use_intra_dct_only =
467 ARG_DEF(NULL, "use-intra-dct-only", 1, "Use DCT only for INTRA modes"),
468 .use_inter_dct_only =
469 ARG_DEF(NULL, "use-inter-dct-only", 1, "Use DCT only for INTER modes"),
470 .use_intra_default_tx_only =
471 ARG_DEF(NULL, "use-intra-default-tx-only", 1,
472 "Use Default-transform only for INTRA modes"),
473 .quant_b_adapt = ARG_DEF(NULL, "quant-b-adapt", 1, "Use adaptive quantize_b"),
474 .coeff_cost_upd_freq = ARG_DEF(NULL, "coeff-cost-upd-freq", 1,
chiyotsaicb037d72021-04-15 17:17:08 -0700475 "Update freq for coeff costs. "
Bohan Lic1d42fe2020-12-21 13:27:47 -0800476 "0: SB, 1: SB Row per Tile, 2: Tile, 3: Off"),
477 .mode_cost_upd_freq = ARG_DEF(NULL, "mode-cost-upd-freq", 1,
chiyotsaicb037d72021-04-15 17:17:08 -0700478 "Update freq for mode costs. "
Bohan Lic1d42fe2020-12-21 13:27:47 -0800479 "0: SB, 1: SB Row per Tile, 2: Tile, 3: Off"),
480 .mv_cost_upd_freq = ARG_DEF(NULL, "mv-cost-upd-freq", 1,
chiyotsaicb037d72021-04-15 17:17:08 -0700481 "Update freq for mv costs. "
482 "0: SB, 1: SB Row per Tile, 2: Tile, 3: Off"),
483 .dv_cost_upd_freq = ARG_DEF(NULL, "dv-cost-upd-freq", 1,
484 "Update freq for dv costs. "
Bohan Lic1d42fe2020-12-21 13:27:47 -0800485 "0: SB, 1: SB Row per Tile, 2: Tile, 3: Off"),
486 .num_tg = ARG_DEF(NULL, "num-tile-groups", 1,
487 "Maximum number of tile groups, default is 1"),
488 .mtu_size =
489 ARG_DEF(NULL, "mtu-size", 1,
490 "MTU size for a tile group, default is 0 (no MTU targeting), "
491 "overrides maximum number of tile groups"),
492 .timing_info = ARG_DEF_ENUM(
493 NULL, "timing-info", 1,
James Zern884af212022-06-06 16:29:57 -0700494 "Signal timing info in the bitstream (model only works for no "
Bohan Lic1d42fe2020-12-21 13:27:47 -0800495 "hidden frames, no super-res yet):",
496 timing_info_enum),
497#if CONFIG_TUNE_VMAF
498 .vmaf_model_path =
499 ARG_DEF(NULL, "vmaf-model-path", 1, "Path to the VMAF model file"),
500#endif
Cheng Chen9164dee2021-04-19 23:11:38 -0700501 .partition_info_path = ARG_DEF(NULL, "partition-info-path", 1,
502 "Partition information read and write path"),
Cheng Chen567038a2022-12-22 16:45:02 -0800503 .enable_rate_guide_deltaq =
504 ARG_DEF(NULL, "enable-rate-guide-deltaq", 1,
Cheng Chen8665ec32023-02-01 17:09:06 -0800505 "Enable rate guide deltaq (1), by default off (0). "
506 "It requires --deltaq-mode=3. "
507 "If turned on, it requires an input file specified "
508 "by --rate-distribution-info."),
Cheng Chen567038a2022-12-22 16:45:02 -0800509 .rate_distribution_info =
510 ARG_DEF(NULL, "rate-distribution-info", 1,
511 "Rate distribution information input."
512 "It requires --enable-rate-guide-deltaq=1."),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800513 .film_grain_test = ARG_DEF(
514 NULL, "film-grain-test", 1,
515 "Film grain test vectors (0: none (default), 1: test-1 2: test-2, "
516 "... 16: test-16)"),
517 .film_grain_table = ARG_DEF(NULL, "film-grain-table", 1,
518 "Path to file containing film grain parameters"),
519#if CONFIG_DENOISE
520 .denoise_noise_level =
521 ARG_DEF(NULL, "denoise-noise-level", 1,
522 "Amount of noise (from 0 = don't denoise, to 50)"),
523 .denoise_block_size = ARG_DEF(NULL, "denoise-block-size", 1,
524 "Denoise block size (default = 32)"),
n9Mtq408eb1d42021-02-18 00:13:10 -0500525 .enable_dnl_denoising = ARG_DEF(NULL, "enable-dnl-denoising", 1,
526 "Apply denoising to the frame "
527 "being encoded when denoise-noise-level is "
528 "enabled (0: false, 1: true (default))"),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800529#endif
530 .enable_ref_frame_mvs =
531 ARG_DEF(NULL, "enable-ref-frame-mvs", 1,
532 "Enable temporal mv prediction (default is 1)"),
533 .frame_parallel_decoding =
534 ARG_DEF(NULL, "frame-parallel", 1,
535 "Enable frame parallel decodability features "
536 "(0: false (default), 1: true)"),
537 .error_resilient_mode = ARG_DEF(NULL, "error-resilient", 1,
538 "Enable error resilient features "
539 "(0: false (default), 1: true)"),
540 .aq_mode = ARG_DEF(NULL, "aq-mode", 1,
541 "Adaptive quantization mode (0: off (default), 1: "
542 "variance 2: complexity, "
543 "3: cyclic refresh)"),
544 .deltaq_mode =
545 ARG_DEF(NULL, "deltaq-mode", 1,
546 "Delta qindex mode (0: off, 1: deltaq objective (default), "
Sai Deng039ef512021-08-03 10:13:43 -0700547 "2: deltaq placeholder, 3: key frame visual quality, 4: user "
James Zern884af212022-06-06 16:29:57 -0700548 "rating based visual quality optimization); "
549 "requires --enable-tpl-model=1"),
Sai Denga62022d2021-10-01 10:27:57 -0700550 .deltaq_strength = ARG_DEF(NULL, "deltaq-strength", 1,
551 "Deltaq strength for"
552 " --deltaq-mode=4 (%)"),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800553 .deltalf_mode = ARG_DEF(NULL, "delta-lf-mode", 1,
554 "Enable delta-lf-mode (0: off (default), 1: on)"),
555 .frame_periodic_boost =
556 ARG_DEF(NULL, "frame-boost", 1,
557 "Enable frame periodic boost (0: off (default), 1: on)"),
558 .gf_cbr_boost_pct = ARG_DEF(NULL, "gf-cbr-boost", 1,
559 "Boost for Golden Frame in CBR mode (pct)"),
560 .max_inter_rate_pct =
561 ARG_DEF(NULL, "max-inter-rate", 1, "Max P-frame bitrate (pct)"),
562 .min_gf_interval = ARG_DEF(
563 NULL, "min-gf-interval", 1,
James Zern884af212022-06-06 16:29:57 -0700564 "Min gf/arf frame interval (default 0, indicating in-built behavior)"),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800565 .max_gf_interval = ARG_DEF(
566 NULL, "max-gf-interval", 1,
James Zern884af212022-06-06 16:29:57 -0700567 "Max gf/arf frame interval (default 0, indicating in-built behavior)"),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800568 .gf_min_pyr_height =
569 ARG_DEF(NULL, "gf-min-pyr-height", 1,
570 "Min height for GF group pyramid structure (0 (default) to 5)"),
571 .gf_max_pyr_height = ARG_DEF(
572 NULL, "gf-max-pyr-height", 1,
James Zern884af212022-06-06 16:29:57 -0700573 "Maximum height for GF group pyramid structure (0 to 5 (default))"),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800574 .max_reference_frames = ARG_DEF(NULL, "max-reference-frames", 1,
James Zern884af212022-06-06 16:29:57 -0700575 "Maximum number of reference frames allowed "
Bohan Lic1d42fe2020-12-21 13:27:47 -0800576 "per frame (3 to 7 (default))"),
577 .reduced_reference_set =
578 ARG_DEF(NULL, "reduced-reference-set", 1,
579 "Use reduced set of single and compound references (0: off "
580 "(default), 1: on)"),
James Zern6d89b792022-06-03 12:13:43 -0700581 .target_seq_level_idx =
582 ARG_DEF(NULL, "target-seq-level-idx", 1,
583 "Target sequence level index. "
James Zern884af212022-06-06 16:29:57 -0700584 "Possible values are in the form of \"ABxy\". "
James Zern6d89b792022-06-03 12:13:43 -0700585 "AB: Operating point (OP) index, "
586 "xy: Target level index for the OP. "
587 "E.g. \"0\" means target level index 0 (2.0) for the 0th OP, "
588 "\"1019\" means target level index 19 (6.3) for the 10th OP."),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800589 .set_min_cr = ARG_DEF(
590 NULL, "min-cr", 1,
591 "Set minimum compression ratio. Take integer values. Default is 0. "
592 "If non-zero, encoder will try to keep the compression ratio of "
593 "each frame to be higher than the given value divided by 100."),
594
595 .input_color_primaries = ARG_DEF_ENUM(
596 NULL, "color-primaries", 1,
597 "Color primaries (CICP) of input content:", color_primaries_enum),
598
599 .input_transfer_characteristics =
600 ARG_DEF_ENUM(NULL, "transfer-characteristics", 1,
601 "Transfer characteristics (CICP) of input content:",
602 transfer_characteristics_enum),
603
604 .input_matrix_coefficients = ARG_DEF_ENUM(
605 NULL, "matrix-coefficients", 1,
606 "Matrix coefficients (CICP) of input content:", matrix_coefficients_enum),
607
608 .input_chroma_sample_position =
609 ARG_DEF_ENUM(NULL, "chroma-sample-position", 1,
610 "The chroma sample position when chroma 4:2:0 is signaled:",
611 chroma_sample_position_enum),
612
613 .tune_content = ARG_DEF_ENUM(NULL, "tune-content", 1, "Tune content type",
614 tune_content_enum),
615
616 .cdf_update_mode =
617 ARG_DEF(NULL, "cdf-update-mode", 1,
618 "CDF update mode for entropy coding "
James Zern884af212022-06-06 16:29:57 -0700619 "(0: no CDF update, 1: update CDF on all frames (default), "
Fyodor Kyslov7926ca62021-02-04 14:23:34 -0800620 "2: selectively update CDF on some frames)"),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800621
622 .superblock_size = ARG_DEF_ENUM(NULL, "sb-size", 1, "Superblock size to use",
623 superblock_size_enum),
624
625 .set_tier_mask =
626 ARG_DEF(NULL, "set-tier-mask", 1,
627 "Set bit mask to specify which tier each of the 32 possible "
628 "operating points conforms to. "
James Zern884af212022-06-06 16:29:57 -0700629 "Bit value 0 (default): Main Tier, 1: High Tier."),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800630
631 .use_fixed_qp_offsets =
632 ARG_DEF(NULL, "use-fixed-qp-offsets", 1,
633 "Enable fixed QP offsets for frames at different levels of the "
634 "pyramid. Selected automatically from --cq-level if "
635 "--fixed-qp-offsets is not provided. If this option is not "
636 "specified (default), offsets are adaptively chosen by the "
Wan-Teh Chang2ed99f82021-09-29 15:10:28 -0700637 "encoder."),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800638
639 .fixed_qp_offsets = ARG_DEF(
640 NULL, "fixed-qp-offsets", 1,
641 "Set fixed QP offsets for frames at different levels of the "
642 "pyramid. Comma-separated list of 5 offsets for keyframe, ALTREF, "
643 "and 3 levels of internal alt-refs. If this option is not "
644 "specified (default), offsets are adaptively chosen by the "
645 "encoder."),
646
647 .vbr_corpus_complexity_lap = ARG_DEF(
648 NULL, "vbr-corpus-complexity-lap", 1,
649 "Set average corpus complexity per mb for single pass VBR using lap. "
chiyotsaicb037d72021-04-15 17:17:08 -0700650 "(0..10000), default is 0"),
Jingning Han07eda7a2021-06-22 13:56:57 -0700651
James Zern884af212022-06-06 16:29:57 -0700652 .fwd_kf_dist = ARG_DEF(NULL, "fwd-kf-dist", -1,
653 "Set distance between forward keyframes. A value of "
654 "-1 (default) means no repetitive forward keyframes."),
Maryla36c2b992021-06-21 11:48:34 +0200655
656 .enable_tx_size_search = ARG_DEF(
657 NULL, "enable-tx-size-search", 1,
658 "Enable transform size search to find the best size for each block. "
659 "If false, transforms always have the largest possible size "
Cheng Chen31a1b762022-07-22 12:29:31 -0700660 "(0: false, 1: true (default)). Ignored in non rd pick mode in "
661 "real-time coding."),
Bohan Li86117812021-07-14 14:08:59 -0700662
Fyodor Kyslovd3be91b2021-11-10 19:52:00 -0800663 .loopfilter_control = ARG_DEF(
664 NULL, "loopfilter-control", 1,
665 "Control loop filtering "
James Zern884af212022-06-06 16:29:57 -0700666 "(0: Loopfilter disabled for all frames, 1: Enable loopfilter for all "
667 "frames (default), 2: Disable loopfilter for non-reference frames, 3: "
668 "Disable loopfilter for frames with low motion)"),
Fyodor Kyslov2372d3e2021-11-01 16:11:13 -0700669
Cheng Chenf15d9ea2021-11-15 16:52:13 -0800670 .auto_intra_tools_off = ARG_DEF(
671 NULL, "auto-intra-tools-off", 1,
James Zern884af212022-06-06 16:29:57 -0700672 "Automatically turn off several intra coding tools for allintra mode; "
673 "only in effect if --deltaq-mode=3"),
Cheng Chenf15d9ea2021-11-15 16:52:13 -0800674
Bohan Li86117812021-07-14 14:08:59 -0700675 .two_pass_input =
676 ARG_DEF(NULL, "two-pass-input", 1,
James Zern884af212022-06-06 16:29:57 -0700677 "The input file for the second pass for three-pass encoding"),
Bohan Li86117812021-07-14 14:08:59 -0700678 .two_pass_output = ARG_DEF(
679 NULL, "two-pass-output", 1,
James Zern884af212022-06-06 16:29:57 -0700680 "The output file for the first two passes for three-pass encoding"),
Bohan Li86117812021-07-14 14:08:59 -0700681 .two_pass_width =
James Zern884af212022-06-06 16:29:57 -0700682 ARG_DEF(NULL, "two-pass-width", 1, "The width of two-pass-input"),
Bohan Li86117812021-07-14 14:08:59 -0700683 .two_pass_height =
James Zern884af212022-06-06 16:29:57 -0700684 ARG_DEF(NULL, "two-pass-height", 1, "The height of two-pass-input"),
Bohan Liedec7cd2021-08-26 09:17:47 -0700685 .second_pass_log =
James Zern884af212022-06-06 16:29:57 -0700686 ARG_DEF("spf", "second-pass-log", 1, "Log file from second pass"),
Bohan Li239351d2022-01-21 11:42:17 -0800687 .strict_level_conformance =
688 ARG_DEF(NULL, "strict-level-conformance", 1,
689 "When set to 1, exit the encoder when it fails to encode "
690 "to a given target level"),
Bohan Li4e025702022-08-18 12:05:43 -0700691 .kf_max_pyr_height = ARG_DEF(
692 NULL, "kf-max-pyr-height", 1,
Bohan Lib90e1062022-08-22 11:14:33 -0700693 "Maximum height of pyramid structure used for the GOP starting with a "
Bohan Li4e025702022-08-18 12:05:43 -0700694 "key frame (-1 to 5). When set to -1 (default), it does not have any "
Bohan Lib90e1062022-08-22 11:14:33 -0700695 "effect. The actual maximum pyramid height will be the minimum of this "
696 "value and the value of gf_max_pyr_height."),
linzhen49073062022-10-31 00:42:59 +0000697 .sb_qp_sweep =
698 ARG_DEF(NULL, "sb-qp-sweep", 1,
699 "When set to 1, enable the superblock level qp sweep for a "
700 "given lambda to minimize the rdcost."),
Bohan Lic1d42fe2020-12-21 13:27:47 -0800701#endif // CONFIG_AV1_ENCODER
702};