diff options
author | Anton Khirnov <anton@khirnov.net> | 2023-12-15 08:50:26 +0100 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2023-12-22 11:39:57 +0100 |
commit | d2e479a4296b1b3009a1e127ecddac5d550095e1 (patch) | |
tree | 62dcd815e91c221a9b88cfa414bea52e1d42e0b2 /fftools/ffmpeg_opt.c | |
parent | 074abeb57e210d7a13ac89026af2a3f0636c2907 (diff) | |
download | ffmpeg-d2e479a4296b1b3009a1e127ecddac5d550095e1.tar.gz |
fftools: split off option types from other flags
These values are not actually flags, as only one of them can be
meaningfully set.
Diffstat (limited to 'fftools/ffmpeg_opt.c')
-rw-r--r-- | fftools/ffmpeg_opt.c | 560 |
1 files changed, 330 insertions, 230 deletions
diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c index 2b69f3df55..5af7f068ad 100644 --- a/fftools/ffmpeg_opt.c +++ b/fftools/ffmpeg_opt.c @@ -105,7 +105,7 @@ static void uninit_options(OptionsContext *o) const OptionDef *po = options; int i; - /* all OPT_SPEC and OPT_STRING can be freed in generic way */ + /* all OPT_SPEC and OPT_TYPE_STRING can be freed in generic way */ while (po->name) { void *dst = (uint8_t*)o + po->u.off; @@ -114,12 +114,12 @@ static void uninit_options(OptionsContext *o) int i, *count = (int*)(so + 1); for (i = 0; i < *count; i++) { av_freep(&(*so)[i].specifier); - if (po->flags & OPT_STRING) + if (po->type == OPT_TYPE_STRING) av_freep(&(*so)[i].u.str); } av_freep(so); *count = 0; - } else if (po->flags & OPT_OFFSET && po->flags & OPT_STRING) + } else if (po->flags & OPT_OFFSET && po->type == OPT_TYPE_STRING) av_freep(dst); po++; } @@ -204,7 +204,7 @@ int parse_and_set_vsync(const char *arg, int *vsync_var, int file_idx, int st_id int ret; double num; - ret = parse_number("vsync", arg, OPT_INT, VSYNC_AUTO, VSYNC_VFR, &num); + ret = parse_number("vsync", arg, OPT_TYPE_INT, VSYNC_AUTO, VSYNC_VFR, &num); if (ret < 0) return ret; @@ -1393,7 +1393,7 @@ int opt_timelimit(void *optctx, const char *opt, const char *arg) double lim; struct rlimit rl; - ret = parse_number(opt, arg, OPT_INT64, 0, INT_MAX, &lim); + ret = parse_number(opt, arg, OPT_TYPE_INT64, 0, INT_MAX, &lim); if (ret < 0) return ret; @@ -1426,437 +1426,537 @@ static int opt_adrift_threshold(void *optctx, const char *opt, const char *arg) const OptionDef options[] = { /* main options */ CMDUTILS_COMMON_OPTIONS - { "f", OPT_STRING | OPT_OFFSET | - OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(format) }, + { "f", OPT_TYPE_STRING, OPT_OFFSET | OPT_INPUT | OPT_OUTPUT, + { .off = OFFSET(format) }, "force format", "fmt" }, - { "y", OPT_BOOL, { &file_overwrite }, + { "y", OPT_TYPE_BOOL, 0, + { &file_overwrite }, "overwrite output files" }, - { "n", OPT_BOOL, { &no_file_overwrite }, + { "n", OPT_TYPE_BOOL, 0, + { &no_file_overwrite }, "never overwrite output files" }, - { "ignore_unknown", OPT_BOOL, { &ignore_unknown_streams }, + { "ignore_unknown", OPT_TYPE_BOOL, 0, + { &ignore_unknown_streams }, "Ignore unknown stream types" }, - { "copy_unknown", OPT_BOOL | OPT_EXPERT, { ©_unknown_streams }, + { "copy_unknown", OPT_TYPE_BOOL, OPT_EXPERT, + { ©_unknown_streams }, "Copy unknown stream types" }, - { "recast_media", OPT_BOOL | OPT_EXPERT, { &recast_media }, + { "recast_media", OPT_TYPE_BOOL, OPT_EXPERT, + { &recast_media }, "allow recasting stream type in order to force a decoder of different media type" }, - { "c", OPT_STRING | OPT_SPEC | - OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(codec_names) }, + { "c", OPT_TYPE_STRING, OPT_SPEC | OPT_INPUT | OPT_OUTPUT, + { .off = OFFSET(codec_names) }, "codec name", "codec" }, - { "codec", OPT_STRING | OPT_SPEC | - OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(codec_names) }, + { "codec", OPT_TYPE_STRING, OPT_SPEC | OPT_INPUT | OPT_OUTPUT, + { .off = OFFSET(codec_names) }, "codec name", "codec" }, - { "pre", OPT_STRING | OPT_SPEC | - OPT_OUTPUT, { .off = OFFSET(presets) }, + { "pre", OPT_TYPE_STRING, OPT_SPEC | OPT_OUTPUT, + { .off = OFFSET(presets) }, "preset name", "preset" }, - { "map", HAS_ARG | OPT_EXPERT | OPT_PERFILE | - OPT_OUTPUT, { .func_arg = opt_map }, + { "map", OPT_TYPE_FUNC, HAS_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT, + { .func_arg = opt_map }, "set input stream mapping", "[-]input_file_id[:stream_specifier][,sync_file_id[:stream_specifier]]" }, - { "map_metadata", OPT_STRING | OPT_SPEC | - OPT_OUTPUT, { .off = OFFSET(metadata_map) }, + { "map_metadata", OPT_TYPE_STRING, OPT_SPEC | OPT_OUTPUT, + { .off = OFFSET(metadata_map) }, "set metadata information of outfile from infile", "outfile[,metadata]:infile[,metadata]" }, - { "map_chapters", OPT_INT | OPT_EXPERT | OPT_OFFSET | - OPT_OUTPUT, { .off = OFFSET(chapters_input_file) }, + { "map_chapters", OPT_TYPE_INT, OPT_EXPERT | OPT_OFFSET | OPT_OUTPUT, + { .off = OFFSET(chapters_input_file) }, "set chapters mapping", "input_file_index" }, - { "t", OPT_TIME | OPT_OFFSET | - OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(recording_time) }, + { "t", OPT_TYPE_TIME, OPT_OFFSET | OPT_INPUT | OPT_OUTPUT, + { .off = OFFSET(recording_time) }, "record or transcode \"duration\" seconds of audio/video", "duration" }, - { "to", OPT_TIME | OPT_OFFSET | OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(stop_time) }, + { "to", OPT_TYPE_TIME, OPT_OFFSET | OPT_INPUT | OPT_OUTPUT, + { .off = OFFSET(stop_time) }, "record or transcode stop time", "time_stop" }, - { "fs", OPT_INT64 | OPT_OFFSET | OPT_OUTPUT, { .off = OFFSET(limit_filesize) }, + { "fs", OPT_TYPE_INT64, OPT_OFFSET | OPT_OUTPUT, + { .off = OFFSET(limit_filesize) }, "set the limit file size in bytes", "limit_size" }, - { "ss", OPT_TIME | OPT_OFFSET | - OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(start_time) }, + { "ss", OPT_TYPE_TIME, OPT_OFFSET | OPT_INPUT | OPT_OUTPUT, + { .off = OFFSET(start_time) }, "set the start time offset", "time_off" }, - { "sseof", OPT_TIME | OPT_OFFSET | - OPT_INPUT, { .off = OFFSET(start_time_eof) }, + { "sseof", OPT_TYPE_TIME, OPT_OFFSET | OPT_INPUT, + { .off = OFFSET(start_time_eof) }, "set the start time offset relative to EOF", "time_off" }, - { "seek_timestamp", OPT_INT | OPT_OFFSET | - OPT_INPUT, { .off = OFFSET(seek_timestamp) }, + { "seek_timestamp", OPT_TYPE_INT, OPT_OFFSET | OPT_INPUT, + { .off = OFFSET(seek_timestamp) }, "enable/disable seeking by timestamp with -ss" }, - { "accurate_seek", OPT_BOOL | OPT_OFFSET | OPT_EXPERT | - OPT_INPUT, { .off = OFFSET(accurate_seek) }, + { "accurate_seek", OPT_TYPE_BOOL, OPT_OFFSET | OPT_EXPERT | OPT_INPUT, + { .off = OFFSET(accurate_seek) }, "enable/disable accurate seeking with -ss" }, - { "isync", OPT_INT | OPT_OFFSET | - OPT_EXPERT | OPT_INPUT, { .off = OFFSET(input_sync_ref) }, + { "isync", OPT_TYPE_INT, OPT_OFFSET | OPT_EXPERT | OPT_INPUT, + { .off = OFFSET(input_sync_ref) }, "Indicate the input index for sync reference", "sync ref" }, - { "itsoffset", OPT_TIME | OPT_OFFSET | - OPT_EXPERT | OPT_INPUT, { .off = OFFSET(input_ts_offset) }, + { "itsoffset", OPT_TYPE_TIME, OPT_OFFSET | OPT_EXPERT | OPT_INPUT, + { .off = OFFSET(input_ts_offset) }, "set the input ts offset", "time_off" }, - { "itsscale", OPT_DOUBLE | OPT_SPEC | - OPT_EXPERT | OPT_INPUT, { .off = OFFSET(ts_scale) }, + { "itsscale", OPT_TYPE_DOUBLE, OPT_SPEC | OPT_EXPERT | OPT_INPUT, + { .off = OFFSET(ts_scale) }, "set the input ts scale", "scale" }, - { "timestamp", HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_recording_timestamp }, + { "timestamp", OPT_TYPE_FUNC, HAS_ARG | OPT_PERFILE | OPT_OUTPUT, + { .func_arg = opt_recording_timestamp }, "set the recording timestamp ('now' to set the current time)", "time" }, - { "metadata", OPT_STRING | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(metadata) }, + { "metadata", OPT_TYPE_STRING, OPT_SPEC | OPT_OUTPUT, + { .off = OFFSET(metadata) }, "add metadata", "string=string" }, - { "program", OPT_STRING | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(program) }, + { "program", OPT_TYPE_STRING, OPT_SPEC | OPT_OUTPUT, + { .off = OFFSET(program) }, "add program with specified streams", "title=string:st=number..." }, - { "stream_group", OPT_STRING | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(stream_groups) }, + { "stream_group", OPT_TYPE_STRING, OPT_SPEC | OPT_OUTPUT, + { .off = OFFSET(stream_groups) }, "add stream group with specified streams and group type-specific arguments", "id=number:st=number..." }, - { "dframes", HAS_ARG | OPT_PERFILE | OPT_EXPERT | - OPT_OUTPUT, { .func_arg = opt_data_frames }, + { "dframes", OPT_TYPE_FUNC, HAS_ARG | OPT_PERFILE | OPT_EXPERT | OPT_OUTPUT, + { .func_arg = opt_data_frames }, "set the number of data frames to output", "number" }, - { "benchmark", OPT_BOOL | OPT_EXPERT, { &do_benchmark }, + { "benchmark", OPT_TYPE_BOOL, OPT_EXPERT, + { &do_benchmark }, "add timings for benchmarking" }, - { "benchmark_all", OPT_BOOL | OPT_EXPERT, { &do_benchmark_all }, + { "benchmark_all", OPT_TYPE_BOOL, OPT_EXPERT, + { &do_benchmark_all }, "add timings for each task" }, - { "progress", HAS_ARG | OPT_EXPERT, { .func_arg = opt_progress }, + { "progress", OPT_TYPE_FUNC, HAS_ARG | OPT_EXPERT, + { .func_arg = opt_progress }, "write program-readable progress information", "url" }, - { "stdin", OPT_BOOL | OPT_EXPERT, { &stdin_interaction }, + { "stdin", OPT_TYPE_BOOL, OPT_EXPERT, + { &stdin_interaction }, "enable or disable interaction on standard input" }, - { "timelimit", HAS_ARG | OPT_EXPERT, { .func_arg = opt_timelimit }, + { "timelimit", OPT_TYPE_FUNC, HAS_ARG | OPT_EXPERT, + { .func_arg = opt_timelimit }, "set max runtime in seconds in CPU user time", "limit" }, - { "dump", OPT_BOOL | OPT_EXPERT, { &do_pkt_dump }, + { "dump", OPT_TYPE_BOOL, OPT_EXPERT, + { &do_pkt_dump }, "dump each input packet" }, - { "hex", OPT_BOOL | OPT_EXPERT, { &do_hex_dump }, + { "hex", OPT_TYPE_BOOL, OPT_EXPERT, + { &do_hex_dump }, "when dumping packets, also dump the payload" }, - { "re", OPT_BOOL | OPT_EXPERT | OPT_OFFSET | - OPT_INPUT, { .off = OFFSET(rate_emu) }, + { "re", OPT_TYPE_BOOL, OPT_EXPERT | OPT_OFFSET | OPT_INPUT, + { .off = OFFSET(rate_emu) }, "read input at native frame rate; equivalent to -readrate 1", "" }, - { "readrate", OPT_FLOAT | OPT_OFFSET | - OPT_EXPERT | OPT_INPUT, { .off = OFFSET(readrate) }, + { "readrate", OPT_TYPE_FLOAT, OPT_OFFSET | OPT_EXPERT | OPT_INPUT, + { .off = OFFSET(readrate) }, "read input at specified rate", "speed" }, - { "readrate_initial_burst", OPT_DOUBLE | OPT_OFFSET | - OPT_EXPERT | OPT_INPUT, { .off = OFFSET(readrate_initial_burst) }, + { "readrate_initial_burst", OPT_TYPE_DOUBLE, OPT_OFFSET | OPT_EXPERT | OPT_INPUT, + { .off = OFFSET(readrate_initial_burst) }, "The initial amount of input to burst read before imposing any readrate", "seconds" }, - { "target", HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_target }, + { "target", OPT_TYPE_FUNC, HAS_ARG | OPT_PERFILE | OPT_OUTPUT, + { .func_arg = opt_target }, "specify target file type (\"vcd\", \"svcd\", \"dvd\", \"dv\" or \"dv50\" " "with optional prefixes \"pal-\", \"ntsc-\" or \"film-\")", "type" }, - { "vsync", HAS_ARG | OPT_EXPERT, { .func_arg = opt_vsync }, + { "vsync", OPT_TYPE_FUNC, HAS_ARG | OPT_EXPERT, + { .func_arg = opt_vsync }, "set video sync method globally; deprecated, use -fps_mode", "" }, - { "frame_drop_threshold", OPT_FLOAT | OPT_EXPERT, { &frame_drop_threshold }, + { "frame_drop_threshold", OPT_TYPE_FLOAT, OPT_EXPERT, + { &frame_drop_threshold }, "frame drop threshold", "" }, - { "copyts", OPT_BOOL | OPT_EXPERT, { ©_ts }, + { "copyts", OPT_TYPE_BOOL, OPT_EXPERT, + { ©_ts }, "copy timestamps" }, - { "start_at_zero", OPT_BOOL | OPT_EXPERT, { &start_at_zero }, + { "start_at_zero", OPT_TYPE_BOOL, OPT_EXPERT, + { &start_at_zero }, "shift input timestamps to start at 0 when using copyts" }, - { "copytb", OPT_INT | OPT_EXPERT, { ©_tb }, + { "copytb", OPT_TYPE_INT, OPT_EXPERT, + { ©_tb }, "copy input stream time base when stream copying", "mode" }, - { "shortest", OPT_BOOL | OPT_EXPERT | OPT_OFFSET | - OPT_OUTPUT, { .off = OFFSET(shortest) }, + { "shortest", OPT_TYPE_BOOL, OPT_EXPERT | OPT_OFFSET | OPT_OUTPUT, + { .off = OFFSET(shortest) }, "finish encoding within shortest input" }, - { "shortest_buf_duration", OPT_FLOAT | OPT_EXPERT | OPT_OFFSET | OPT_OUTPUT, { .off = OFFSET(shortest_buf_duration) }, + { "shortest_buf_duration", OPT_TYPE_FLOAT, OPT_EXPERT | OPT_OFFSET | OPT_OUTPUT, + { .off = OFFSET(shortest_buf_duration) }, "maximum buffering duration (in seconds) for the -shortest option" }, - { "bitexact", OPT_BOOL | OPT_EXPERT | OPT_OFFSET | - OPT_OUTPUT | OPT_INPUT, { .off = OFFSET(bitexact) }, + { "bitexact", OPT_TYPE_BOOL, OPT_EXPERT | OPT_OFFSET | OPT_OUTPUT | OPT_INPUT, + { .off = OFFSET(bitexact) }, "bitexact mode" }, - { "apad", OPT_STRING | OPT_SPEC | - OPT_OUTPUT, { .off = OFFSET(apad) }, + { "apad", OPT_TYPE_STRING, OPT_SPEC | OPT_OUTPUT, + { .off = OFFSET(apad) }, "audio pad", "" }, - { "dts_delta_threshold", OPT_FLOAT | OPT_EXPERT, { &dts_delta_threshold }, + { "dts_delta_threshold", OPT_TYPE_FLOAT, OPT_EXPERT, + { &dts_delta_threshold }, "timestamp discontinuity delta threshold", "threshold" }, - { "dts_error_threshold", OPT_FLOAT | OPT_EXPERT, { &dts_error_threshold }, + { "dts_error_threshold", OPT_TYPE_FLOAT, OPT_EXPERT, + { &dts_error_threshold }, "timestamp error delta threshold", "threshold" }, - { "xerror", OPT_BOOL | OPT_EXPERT, { &exit_on_error }, + { "xerror", OPT_TYPE_BOOL, OPT_EXPERT, + { &exit_on_error }, "exit on error", "error" }, - { "abort_on", HAS_ARG | OPT_EXPERT, { .func_arg = opt_abort_on }, + { "abort_on", OPT_TYPE_FUNC, HAS_ARG | OPT_EXPERT, + { .func_arg = opt_abort_on }, "abort on the specified condition flags", "flags" }, - { "copyinkf", OPT_BOOL | OPT_EXPERT | OPT_SPEC | - OPT_OUTPUT, { .off = OFFSET(copy_initial_nonkeyframes) }, + { "copyinkf", OPT_TYPE_BOOL, OPT_EXPERT | OPT_SPEC | OPT_OUTPUT, + { .off = OFFSET(copy_initial_nonkeyframes) }, "copy initial non-keyframes" }, - { "copypriorss", OPT_INT | OPT_EXPERT | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(copy_prior_start) }, + { "copypriorss", OPT_TYPE_INT, OPT_EXPERT | OPT_SPEC | OPT_OUTPUT, + { .off = OFFSET(copy_prior_start) }, "copy or discard frames before start time" }, - { "frames", OPT_INT64 | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(max_frames) }, + { "frames", OPT_TYPE_INT64, OPT_SPEC | OPT_OUTPUT, + { .off = OFFSET(max_frames) }, "set the number of frames to output", "number" }, - { "tag", OPT_STRING | OPT_SPEC | - OPT_EXPERT | OPT_OUTPUT | OPT_INPUT, { .off = OFFSET(codec_tags) }, + { "tag", OPT_TYPE_STRING, OPT_SPEC | OPT_EXPERT | OPT_OUTPUT | OPT_INPUT, + { .off = OFFSET(codec_tags) }, "force codec tag/fourcc", "fourcc/tag" }, - { "q", OPT_EXPERT | OPT_DOUBLE | - OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(qscale) }, + { "q", OPT_TYPE_DOUBLE, OPT_EXPERT | OPT_SPEC | OPT_OUTPUT, + { .off = OFFSET(qscale) }, "use fixed quality scale (VBR)", "q" }, - { "qscale", HAS_ARG | OPT_EXPERT | OPT_PERFILE | - OPT_OUTPUT, { .func_arg = opt_qscale }, + { "qscale", OPT_TYPE_FUNC, HAS_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT, + { .func_arg = opt_qscale }, "use fixed quality scale (VBR)", "q" }, - { "profile", HAS_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_profile }, + { "profile", OPT_TYPE_FUNC, HAS_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT, + { .func_arg = opt_profile }, "set profile", "profile" }, - { "filter", OPT_STRING | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(filters) }, + { "filter", OPT_TYPE_STRING, OPT_SPEC | OPT_OUTPUT, + { .off = OFFSET(filters) }, "set stream filtergraph", "filter_graph" }, - { "filter_threads", HAS_ARG, { .func_arg = opt_filter_threads }, + { "filter_threads", OPT_TYPE_FUNC, HAS_ARG, + { .func_arg = opt_filter_threads }, "number of non-complex filter threads" }, - { "filter_script", OPT_STRING | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(filter_scripts) }, + { "filter_script", OPT_TYPE_STRING, OPT_SPEC | OPT_OUTPUT, + { .off = OFFSET(filter_scripts) }, "read stream filtergraph description from a file", "filename" }, - { "reinit_filter", OPT_INT | OPT_SPEC | OPT_INPUT, { .off = OFFSET(reinit_filters) }, + { "reinit_filter", OPT_TYPE_INT, OPT_SPEC | OPT_INPUT, + { .off = OFFSET(reinit_filters) }, "reinit filtergraph on input parameter changes", "" }, - { "filter_complex", HAS_ARG | OPT_EXPERT, { .func_arg = opt_filter_complex }, + { "filter_complex", OPT_TYPE_FUNC, HAS_ARG | OPT_EXPERT, + { .func_arg = opt_filter_complex }, "create a complex filtergraph", "graph_description" }, - { "filter_complex_threads", OPT_INT, { &filter_complex_nbthreads }, + { "filter_complex_threads", OPT_TYPE_INT, 0, + { &filter_complex_nbthreads }, "number of threads for -filter_complex" }, - { "lavfi", HAS_ARG | OPT_EXPERT, { .func_arg = opt_filter_complex }, + { "lavfi", OPT_TYPE_FUNC, HAS_ARG | OPT_EXPERT, + { .func_arg = opt_filter_complex }, "create a complex filtergraph", "graph_description" }, - { "filter_complex_script", HAS_ARG | OPT_EXPERT, { .func_arg = opt_filter_complex_script }, + { "filter_complex_script", OPT_TYPE_FUNC, HAS_ARG | OPT_EXPERT, + { .func_arg = opt_filter_complex_script }, "read complex filtergraph description from a file", "filename" }, - { "auto_conversion_filters", OPT_BOOL | OPT_EXPERT, { &auto_conversion_filters }, + { "auto_conversion_filters", OPT_TYPE_BOOL, OPT_EXPERT, + { &auto_conversion_filters }, "enable automatic conversion filters globally" }, - { "stats", OPT_BOOL, { &print_stats }, + { "stats", OPT_TYPE_BOOL, 0, + { &print_stats }, "print progress report during encoding", }, - { "stats_period", HAS_ARG | OPT_EXPERT, { .func_arg = opt_stats_period }, + { "stats_period", OPT_TYPE_FUNC, HAS_ARG | OPT_EXPERT, + { .func_arg = opt_stats_period }, "set the period at which ffmpeg updates stats and -progress output", "time" }, - { "attach", HAS_ARG | OPT_PERFILE | OPT_EXPERT | - OPT_OUTPUT, { .func_arg = opt_attach }, + { "attach", OPT_TYPE_FUNC, HAS_ARG | OPT_PERFILE | OPT_EXPERT | OPT_OUTPUT, + { .func_arg = opt_attach }, "add an attachment to the output file", "filename" }, - { "dump_attachment", OPT_STRING | OPT_SPEC | - OPT_EXPERT | OPT_INPUT, { .off = OFFSET(dump_attachment) }, + { "dump_attachment", OPT_TYPE_STRING, OPT_SPEC | OPT_EXPERT | OPT_INPUT, + { .off = OFFSET(dump_attachment) }, "extract an attachment into a file", "filename" }, - { "stream_loop", OPT_INT | OPT_EXPERT | OPT_INPUT | - OPT_OFFSET, { .off = OFFSET(loop) }, "set number of times input stream shall be looped", "loop count" }, - { "debug_ts", OPT_BOOL | OPT_EXPERT, { &debug_ts }, + { "stream_loop", OPT_TYPE_INT, OPT_EXPERT | OPT_INPUT | OPT_OFFSET, + { .off = OFFSET(loop) }, "set number of times input stream shall be looped", "loop count" }, + { "debug_ts", OPT_TYPE_BOOL, OPT_EXPERT, + { &debug_ts }, "print timestamp debugging info" }, - { "max_error_rate", OPT_FLOAT, { &max_error_rate }, + { "max_error_rate", OPT_TYPE_FLOAT, 0, + { &max_error_rate }, "ratio of decoding errors (0.0: no errors, 1.0: 100% errors) above which ffmpeg returns an error instead of success.", "maximum error rate" }, - { "discard", OPT_STRING | OPT_SPEC | - OPT_INPUT, { .off = OFFSET(discard) }, + { "discard", OPT_TYPE_STRING, OPT_SPEC | OPT_INPUT, + { .off = OFFSET(discard) }, "discard", "" }, - { "disposition", OPT_STRING | OPT_SPEC | - OPT_OUTPUT, { .off = OFFSET(disposition) }, + { "disposition", OPT_TYPE_STRING, OPT_SPEC | OPT_OUTPUT, + { .off = OFFSET(disposition) }, "disposition", "" }, - { "thread_queue_size", OPT_INT | OPT_OFFSET | OPT_EXPERT | OPT_INPUT | OPT_OUTPUT, - { .off = OFFSET(thread_queue_size) }, + { "thread_queue_size", OPT_TYPE_INT, OPT_OFFSET | OPT_EXPERT | OPT_INPUT | OPT_OUTPUT, + { .off = OFFSET(thread_queue_size) }, "set the maximum number of queued packets from the demuxer" }, - { "find_stream_info", OPT_BOOL | OPT_INPUT | OPT_EXPERT | OPT_OFFSET, { .off = OFFSET(find_stream_info) }, + { "find_stream_info", OPT_TYPE_BOOL, OPT_INPUT | OPT_EXPERT | OPT_OFFSET, + { .off = OFFSET(find_stream_info) }, "read and decode the streams to fill missing information with heuristics" }, - { "bits_per_raw_sample", OPT_INT | OPT_EXPERT | OPT_SPEC | OPT_OUTPUT, + { "bits_per_raw_sample", OPT_TYPE_INT, OPT_EXPERT | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(bits_per_raw_sample) }, "set the number of bits per raw sample", "number" }, - { "stats_enc_pre", OPT_SPEC | OPT_EXPERT | OPT_OUTPUT | OPT_STRING, { .off = OFFSET(enc_stats_pre) }, + { "stats_enc_pre", OPT_TYPE_STRING, OPT_SPEC | OPT_EXPERT | OPT_OUTPUT, + { .off = OFFSET(enc_stats_pre) }, "write encoding stats before encoding" }, - { "stats_enc_post", OPT_SPEC | OPT_EXPERT | OPT_OUTPUT | OPT_STRING, { .off = OFFSET(enc_stats_post) }, + { "stats_enc_post", OPT_TYPE_STRING, OPT_SPEC | OPT_EXPERT | OPT_OUTPUT, + { .off = OFFSET(enc_stats_post) }, "write encoding stats after encoding" }, - { "stats_mux_pre", OPT_SPEC | OPT_EXPERT | OPT_OUTPUT | OPT_STRING, { .off = OFFSET(mux_stats) }, + { "stats_mux_pre", OPT_TYPE_STRING, OPT_SPEC | OPT_EXPERT | OPT_OUTPUT, + { .off = OFFSET(mux_stats) }, "write packets stats before muxing" }, - { "stats_enc_pre_fmt", OPT_SPEC | OPT_EXPERT | OPT_OUTPUT | OPT_STRING, { .off = OFFSET(enc_stats_pre_fmt) }, + { "stats_enc_pre_fmt", OPT_TYPE_STRING, OPT_SPEC | OPT_EXPERT | OPT_OUTPUT, + { .off = OFFSET(enc_stats_pre_fmt) }, "format of the stats written with -stats_enc_pre" }, - { "stats_enc_post_fmt", OPT_SPEC | OPT_EXPERT | OPT_OUTPUT | OPT_STRING, { .off = OFFSET(enc_stats_post_fmt) }, + { "stats_enc_post_fmt", OPT_TYPE_STRING, OPT_SPEC | OPT_EXPERT | OPT_OUTPUT, + { .off = OFFSET(enc_stats_post_fmt) }, "format of the stats written with -stats_enc_post" }, - { "stats_mux_pre_fmt", OPT_SPEC | OPT_EXPERT | OPT_OUTPUT | OPT_STRING, { .off = OFFSET(mux_stats_fmt) }, + { "stats_mux_pre_fmt", OPT_TYPE_STRING, OPT_SPEC | OPT_EXPERT | OPT_OUTPUT, + { .off = OFFSET(mux_stats_fmt) }, "format of the stats written with -stats_mux_pre" }, /* video options */ - { "vframes", OPT_VIDEO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_video_frames }, + { "vframes", OPT_TYPE_FUNC, OPT_VIDEO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, + { .func_arg = opt_video_frames }, "set the number of video frames to output", "number" }, - { "r", OPT_VIDEO | OPT_STRING | OPT_SPEC | - OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(frame_rates) }, + { "r", OPT_TYPE_STRING, OPT_VIDEO | OPT_SPEC | OPT_INPUT | OPT_OUTPUT, + { .off = OFFSET(frame_rates) }, "set frame rate (Hz value, fraction or abbreviation)", "rate" }, - { "fpsmax", OPT_VIDEO | OPT_STRING | OPT_SPEC | - OPT_OUTPUT, { .off = OFFSET(max_frame_rates) }, + { "fpsmax", OPT_TYPE_STRING, OPT_VIDEO | OPT_SPEC | OPT_OUTPUT, + { .off = OFFSET(max_frame_rates) }, "set max frame rate (Hz value, fraction or abbreviation)", "rate" }, - { "s", OPT_VIDEO | OPT_SUBTITLE | OPT_STRING | OPT_SPEC | - OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(frame_sizes) }, + { "s", OPT_TYPE_STRING, OPT_VIDEO | OPT_SUBTITLE | OPT_SPEC | OPT_INPUT | OPT_OUTPUT, + { .off = OFFSET(frame_sizes) }, "set frame size (WxH or abbreviation)", "size" }, - { "aspect", OPT_VIDEO | OPT_STRING | OPT_SPEC | - OPT_OUTPUT, { .off = OFFSET(frame_aspect_ratios) }, + { "aspect", OPT_TYPE_STRING, OPT_VIDEO | OPT_SPEC | OPT_OUTPUT, + { .off = OFFSET(frame_aspect_ratios) }, "set aspect ratio (4:3, 16:9 or 1.3333, 1.7777)", "aspect" }, - { "pix_fmt", OPT_VIDEO | OPT_EXPERT | OPT_STRING | OPT_SPEC | - OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(frame_pix_fmts) }, + { "pix_fmt", OPT_TYPE_STRING, OPT_VIDEO | OPT_EXPERT | OPT_SPEC | OPT_INPUT | OPT_OUTPUT, + { .off = OFFSET(frame_pix_fmts) }, "set pixel format", "format" }, - { "display_rotation", OPT_VIDEO | OPT_DOUBLE | OPT_SPEC | - OPT_INPUT, { .off = OFFSET(display_rotations) }, + { "display_rotation", OPT_TYPE_DOUBLE, OPT_VIDEO | OPT_SPEC | OPT_INPUT, + { .off = OFFSET(display_rotations) }, "set pure counter-clockwise rotation in degrees for stream(s)", "angle" }, - { "display_hflip", OPT_VIDEO | OPT_BOOL | OPT_SPEC | OPT_INPUT, { .off = OFFSET(display_hflips) }, + { "display_hflip", OPT_TYPE_BOOL, OPT_VIDEO | OPT_SPEC | OPT_INPUT, + { .off = OFFSET(display_hflips) }, "set display horizontal flip for stream(s) " "(overrides any display rotation if it is not set)"}, - { "display_vflip", OPT_VIDEO | OPT_BOOL | OPT_SPEC | OPT_INPUT, { .off = OFFSET(display_vflips) }, + { "display_vflip", OPT_TYPE_BOOL, OPT_VIDEO | OPT_SPEC | OPT_INPUT, + { .off = OFFSET(display_vflips) }, "set display vertical flip for stream(s) " "(overrides any display rotation if it is not set)"}, - { "vn", OPT_VIDEO | OPT_BOOL | OPT_OFFSET | OPT_INPUT | OPT_OUTPUT,{ .off = OFFSET(video_disable) }, + { "vn", OPT_TYPE_BOOL, OPT_VIDEO | OPT_OFFSET | OPT_INPUT | OPT_OUTPUT, + { .off = OFFSET(video_disable) }, "disable video" }, - { "rc_override", OPT_VIDEO | OPT_EXPERT | OPT_STRING | OPT_SPEC | - OPT_OUTPUT, { .off = OFFSET(rc_overrides) }, + { "rc_override", OPT_TYPE_STRING, OPT_VIDEO | OPT_EXPERT | OPT_SPEC | OPT_OUTPUT, + { .off = OFFSET(rc_overrides) }, "rate control override for specific intervals", "override" }, - { "vcodec", OPT_VIDEO | HAS_ARG | OPT_PERFILE | OPT_INPUT | - OPT_OUTPUT, { .func_arg = opt_video_codec }, + { "vcodec", OPT_TYPE_FUNC, OPT_VIDEO | HAS_ARG | OPT_PERFILE | OPT_INPUT | OPT_OUTPUT, + { .func_arg = opt_video_codec }, "force video codec ('copy' to copy stream)", "codec" }, - { "timecode", OPT_VIDEO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_timecode }, + { "timecode", OPT_TYPE_FUNC, OPT_VIDEO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, + { .func_arg = opt_timecode }, "set initial TimeCode value.", "hh:mm:ss[:;.]ff" }, - { "pass", OPT_VIDEO | OPT_SPEC | OPT_INT | OPT_OUTPUT, { .off = OFFSET(pass) }, + { "pass", OPT_TYPE_INT, OPT_VIDEO | OPT_SPEC | OPT_OUTPUT, + { .off = OFFSET(pass) }, "select the pass number (1 to 3)", "n" }, - { "passlogfile", OPT_VIDEO | OPT_STRING | OPT_EXPERT | OPT_SPEC | - OPT_OUTPUT, { .off = OFFSET(passlogfiles) }, + { "passlogfile", OPT_TYPE_STRING, OPT_VIDEO | OPT_EXPERT | OPT_SPEC | OPT_OUTPUT, + { .off = OFFSET(passlogfiles) }, "select two pass log file name prefix", "prefix" }, - { "vstats", OPT_VIDEO | OPT_EXPERT , { .func_arg = opt_vstats }, + { "vstats", OPT_TYPE_FUNC, OPT_VIDEO | OPT_EXPERT, + { .func_arg = opt_vstats }, "dump video coding statistics to file" }, - { "vstats_file", OPT_VIDEO | HAS_ARG | OPT_EXPERT , { .func_arg = opt_vstats_file }, + { "vstats_file", OPT_TYPE_FUNC, OPT_VIDEO | HAS_ARG | OPT_EXPERT, + { .func_arg = opt_vstats_file }, "dump video coding statistics to file", "file" }, - { "vstats_version", OPT_VIDEO | OPT_INT | OPT_EXPERT , { &vstats_version }, + { "vstats_version", OPT_TYPE_INT, OPT_VIDEO | OPT_EXPERT, + { &vstats_version }, "Version of the vstats format to use."}, - { "vf", OPT_VIDEO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_video_filters }, + { "vf", OPT_TYPE_FUNC, OPT_VIDEO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, + { .func_arg = opt_video_filters }, "set video filters", "filter_graph" }, - { "intra_matrix", OPT_VIDEO | OPT_EXPERT | OPT_STRING | OPT_SPEC | - OPT_OUTPUT, { .off = OFFSET(intra_matrices) }, + { "intra_matrix", OPT_TYPE_STRING, OPT_VIDEO | OPT_EXPERT | OPT_SPEC | OPT_OUTPUT, + { .off = OFFSET(intra_matrices) }, "specify intra matrix coeffs", "matrix" }, - { "inter_matrix", OPT_VIDEO | OPT_EXPERT | OPT_STRING | OPT_SPEC | - OPT_OUTPUT, { .off = OFFSET(inter_matrices) }, + { "inter_matrix", OPT_TYPE_STRING, OPT_VIDEO | OPT_EXPERT | OPT_SPEC | OPT_OUTPUT, + { .off = OFFSET(inter_matrices) }, "specify inter matrix coeffs", "matrix" }, - { "chroma_intra_matrix", OPT_VIDEO | OPT_EXPERT | OPT_STRING | OPT_SPEC | - OPT_OUTPUT, { .off = OFFSET(chroma_intra_matrices) }, + { "chroma_intra_matrix", OPT_TYPE_STRING, OPT_VIDEO | OPT_EXPERT | OPT_SPEC | OPT_OUTPUT, + { .off = OFFSET(chroma_intra_matrices) }, "specify intra matrix coeffs", "matrix" }, - { "vtag", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_PERFILE | - OPT_INPUT | OPT_OUTPUT, { .func_arg = opt_old2new }, + { "vtag", OPT_TYPE_FUNC, OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_PERFILE | OPT_INPUT | OPT_OUTPUT, + { .func_arg = opt_old2new }, "force video tag/fourcc", "fourcc/tag" }, - { "fps_mode", OPT_VIDEO | OPT_STRING | OPT_EXPERT | - OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(fps_mode) }, + { "fps_mode", OPT_TYPE_STRING, OPT_VIDEO | OPT_EXPERT | OPT_SPEC | OPT_OUTPUT, + { .off = OFFSET(fps_mode) }, "set framerate mode for matching video streams; overrides vsync" }, - { "force_fps", OPT_VIDEO | OPT_BOOL | OPT_EXPERT | OPT_SPEC | - OPT_OUTPUT, { .off = OFFSET(force_fps) }, + { "force_fps", OPT_TYPE_BOOL, OPT_VIDEO | OPT_EXPERT | OPT_SPEC | OPT_OUTPUT, + { .off = OFFSET(force_fps) }, "force the selected framerate, disable the best supported framerate selection" }, - { "streamid", OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_PERFILE | - OPT_OUTPUT, { .func_arg = opt_streamid }, + { "streamid", OPT_TYPE_FUNC, OPT_VIDEO | HAS_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT, + { .func_arg = opt_streamid }, "set the value of an outfile streamid", "streamIndex:value" }, - { "force_key_frames", OPT_VIDEO | OPT_STRING | OPT_EXPERT | - OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(forced_key_frames) }, + { "force_key_frames", OPT_TYPE_STRING, OPT_VIDEO | OPT_EXPERT | OPT_SPEC | OPT_OUTPUT, + { .off = OFFSET(forced_key_frames) }, "force key frames at specified timestamps", "timestamps" }, - { "b", OPT_VIDEO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_bitrate }, + { "b", OPT_TYPE_FUNC, OPT_VIDEO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, + { .func_arg = opt_bitrate }, "video bitrate (please use -b:v)", "bitrate" }, - { "hwaccel", OPT_VIDEO | OPT_STRING | OPT_EXPERT | - OPT_SPEC | OPT_INPUT, { .off = OFFSET(hwaccels) }, + { "hwaccel", OPT_TYPE_STRING, OPT_VIDEO | OPT_EXPERT | OPT_SPEC | OPT_INPUT, + { .off = OFFSET(hwaccels) }, "use HW accelerated decoding", "hwaccel name" }, - { "hwaccel_device", OPT_VIDEO | OPT_STRING | OPT_EXPERT | - OPT_SPEC | OPT_INPUT, { .off = OFFSET(hwaccel_devices) }, + { "hwaccel_device", OPT_TYPE_STRING, OPT_VIDEO | OPT_EXPERT | OPT_SPEC | OPT_INPUT, + { .off = OFFSET(hwaccel_devices) }, "select a device for HW acceleration", "devicename" }, - { "hwaccel_output_format", OPT_VIDEO | OPT_STRING | OPT_EXPERT | - OPT_SPEC | OPT_INPUT, { .off = OFFSET(hwaccel_output_formats) }, + { "hwaccel_output_format", OPT_TYPE_STRING, OPT_VIDEO | OPT_EXPERT | OPT_SPEC | OPT_INPUT, + { .off = OFFSET(hwaccel_output_formats) }, "select output format used with HW accelerated decoding", "format" }, - { "hwaccels", OPT_EXIT, { .func_arg = show_hwaccels }, + { "hwaccels", OPT_TYPE_FUNC, OPT_EXIT, + { .func_arg = show_hwaccels }, "show available HW acceleration methods" }, - { "autorotate", OPT_BOOL | OPT_SPEC | OPT_EXPERT | OPT_INPUT, { .off = OFFSET(autorotate) }, + { "autorotate", OPT_TYPE_BOOL, OPT_SPEC | OPT_EXPERT | OPT_INPUT, + { .off = OFFSET(autorotate) }, "automatically insert correct rotate filters" }, - { "autoscale", OPT_BOOL | OPT_SPEC | OPT_EXPERT | OPT_OUTPUT, { .off = OFFSET(autoscale) }, + { "autoscale", OPT_TYPE_BOOL, OPT_SPEC | OPT_EXPERT | OPT_OUTPUT, + { .off = OFFSET(autoscale) }, "automatically insert a scale filter at the end of the filter graph" }, - { "fix_sub_duration_heartbeat", OPT_VIDEO | OPT_BOOL | OPT_EXPERT | - OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(fix_sub_duration_heartbeat) }, + { "fix_sub_duration_heartbeat", OPT_TYPE_BOOL, OPT_VIDEO | OPT_EXPERT | OPT_SPEC | OPT_OUTPUT, + { .off = OFFSET(fix_sub_duration_heartbeat) }, "set this video output stream to be a heartbeat stream for " "fix_sub_duration, according to which subtitles should be split at " "random access points" }, /* audio options */ - { "aframes", OPT_AUDIO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_audio_frames }, + { "aframes", OPT_TYPE_FUNC, OPT_AUDIO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, + { .func_arg = opt_audio_frames }, "set the number of audio frames to output", "number" }, - { "aq", OPT_AUDIO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_audio_qscale }, + { "aq", OPT_TYPE_FUNC, OPT_AUDIO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, + { .func_arg = opt_audio_qscale }, "set audio quality (codec-specific)", "quality", }, - { "ar", OPT_AUDIO | OPT_INT | OPT_SPEC | - OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(audio_sample_rate) }, + { "ar", OPT_TYPE_INT, OPT_AUDIO | OPT_SPEC | OPT_INPUT | OPT_OUTPUT, + { .off = OFFSET(audio_sample_rate) }, "set audio sampling rate (in Hz)", "rate" }, - { "ac", OPT_AUDIO | OPT_INT | OPT_SPEC | - OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(audio_channels) }, + { "ac", OPT_TYPE_INT, OPT_AUDIO | OPT_SPEC | OPT_INPUT | OPT_OUTPUT, + { .off = OFFSET(audio_channels) }, "set number of audio channels", "channels" }, - { "an", OPT_AUDIO | OPT_BOOL | OPT_OFFSET | OPT_INPUT | OPT_OUTPUT,{ .off = OFFSET(audio_disable) }, + { "an", OPT_TYPE_BOOL, OPT_AUDIO | OPT_OFFSET | OPT_INPUT | OPT_OUTPUT, + { .off = OFFSET(audio_disable) }, "disable audio" }, - { "acodec", OPT_AUDIO | HAS_ARG | OPT_PERFILE | - OPT_INPUT | OPT_OUTPUT, { .func_arg = opt_audio_codec }, + { "acodec", OPT_TYPE_FUNC, OPT_AUDIO | HAS_ARG | OPT_PERFILE | OPT_INPUT | OPT_OUTPUT, + { .func_arg = opt_audio_codec }, "force audio codec ('copy' to copy stream)", "codec" }, - { "ab", OPT_AUDIO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_bitrate }, + { "ab", OPT_TYPE_FUNC, OPT_AUDIO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, + { .func_arg = opt_bitrate }, "audio bitrate (please use -b:a)", "bitrate" }, - { "atag", OPT_AUDIO | HAS_ARG | OPT_EXPERT | OPT_PERFILE | - OPT_OUTPUT, { .func_arg = opt_old2new }, + { "atag", OPT_TYPE_FUNC, OPT_AUDIO | HAS_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT, + { .func_arg = opt_old2new }, "force audio tag/fourcc", "fourcc/tag" }, - { "sample_fmt", OPT_AUDIO | OPT_EXPERT | OPT_SPEC | - OPT_STRING | OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(sample_fmts) }, + { "sample_fmt", OPT_TYPE_STRING, OPT_AUDIO | OPT_EXPERT | OPT_SPEC | OPT_INPUT | OPT_OUTPUT, + { .off = OFFSET(sample_fmts) }, "set sample format", "format" }, - { "channel_layout", OPT_AUDIO | OPT_EXPERT | OPT_SPEC | - OPT_STRING | OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(audio_ch_layouts) }, + { "channel_layout", OPT_TYPE_STRING, OPT_AUDIO | OPT_EXPERT | OPT_SPEC | OPT_INPUT | OPT_OUTPUT, + { .off = OFFSET(audio_ch_layouts) }, "set channel layout", "layout" }, - { "ch_layout", OPT_AUDIO | OPT_EXPERT | OPT_SPEC | - OPT_STRING | OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(audio_ch_layouts) }, + { "ch_layout", OPT_TYPE_STRING, OPT_AUDIO | OPT_EXPERT | OPT_SPEC | OPT_INPUT | OPT_OUTPUT, + { .off = OFFSET(audio_ch_layouts) }, "set channel layout", "layout" }, - { "af", OPT_AUDIO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_audio_filters }, + { "af", OPT_TYPE_FUNC, OPT_AUDIO | HAS_ARG | OPT_PERFILE | OPT_OUTPUT, + { .func_arg = opt_audio_filters }, "set audio filters", "filter_graph" }, - { "guess_layout_max", OPT_AUDIO | OPT_INT | OPT_SPEC | OPT_EXPERT | OPT_INPUT, { .off = OFFSET(guess_layout_max) }, + { "guess_layout_max", OPT_TYPE_INT, OPT_AUDIO | OPT_SPEC | OPT_EXPERT | OPT_INPUT, + { .off = OFFSET(guess_layout_max) }, "set the maximum number of channels to try to guess the channel layout" }, /* subtitle options */ - { "sn", OPT_SUBTITLE | OPT_BOOL | OPT_OFFSET | OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(subtitle_disable) }, + { "sn", OPT_TYPE_BOOL, OPT_SUBTITLE | OPT_OFFSET | OPT_INPUT | OPT_OUTPUT, + { .off = OFFSET(subtitle_disable) }, "disable subtitle" }, - { "scodec", OPT_SUBTITLE | HAS_ARG | OPT_PERFILE | OPT_INPUT | OPT_OUTPUT, { .func_arg = opt_subtitle_codec }, + { "scodec", OPT_TYPE_FUNC, OPT_SUBTITLE | HAS_ARG | OPT_PERFILE | OPT_INPUT | OPT_OUTPUT, + { .func_arg = opt_subtitle_codec }, "force subtitle codec ('copy' to copy stream)", "codec" }, - { "stag", OPT_SUBTITLE | HAS_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_old2new } + { "stag", OPT_TYPE_FUNC, OPT_SUBTITLE | HAS_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT, + { .func_arg = opt_old2new } , "force subtitle tag/fourcc", "fourcc/tag" }, - { "fix_sub_duration", OPT_BOOL | OPT_EXPERT | OPT_SUBTITLE | OPT_SPEC | OPT_INPUT, { .off = OFFSET(fix_sub_duration) }, + { "fix_sub_duration", OPT_TYPE_BOOL, OPT_EXPERT | OPT_SUBTITLE | OPT_SPEC | OPT_INPUT, + { .off = OFFSET(fix_sub_duration) }, "fix subtitles duration" }, - { "canvas_size", OPT_SUBTITLE | OPT_STRING | OPT_SPEC | OPT_INPUT, { .off = OFFSET(canvas_sizes) }, + { "canvas_size", OPT_TYPE_STRING, OPT_SUBTITLE | OPT_SPEC | OPT_INPUT, + { .off = OFFSET(canvas_sizes) }, "set canvas size (WxH or abbreviation)", "size" }, /* muxer options */ - { "muxdelay", OPT_FLOAT | OPT_EXPERT | OPT_OFFSET | OPT_OUTPUT, { .off = OFFSET(mux_max_delay) }, + { "muxdelay", OPT_TYPE_FLOAT, OPT_EXPERT | OPT_OFFSET | OPT_OUTPUT, + { .off = OFFSET(mux_max_delay) }, "set the maximum demux-decode delay", "seconds" }, - { "muxpreload", OPT_FLOAT | OPT_EXPERT | OPT_OFFSET | OPT_OUTPUT, { .off = OFFSET(mux_preload) }, + { "muxpreload", OPT_TYPE_FLOAT, OPT_EXPERT | OPT_OFFSET | OPT_OUTPUT, + { .off = OFFSET(mux_preload) }, "set the initial demux-decode delay", "seconds" }, - { "sdp_file", HAS_ARG | OPT_EXPERT | OPT_OUTPUT, { .func_arg = opt_sdp_file }, + { "sdp_file", OPT_TYPE_FUNC, HAS_ARG | OPT_EXPERT | OPT_OUTPUT, + { .func_arg = opt_sdp_file }, "specify a file in which to print sdp information", "file" }, - { "time_base", OPT_STRING | OPT_EXPERT | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(time_bases) }, + { "time_base", OPT_TYPE_STRING, OPT_EXPERT | OPT_SPEC | OPT_OUTPUT, + { .off = OFFSET(time_bases) }, "set the desired time base hint for output stream (1:24, 1:48000 or 0.04166, 2.0833e-5)", "ratio" }, - { "enc_time_base", OPT_STRING | OPT_EXPERT | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(enc_time_bases) }, + { "enc_time_base", OPT_TYPE_STRING, OPT_EXPERT | OPT_SPEC | OPT_OUTPUT, + { .off = OFFSET(enc_time_bases) }, "set the desired time base for the encoder (1:24, 1:48000 or 0.04166, 2.0833e-5). " "two special values are defined - " "0 = use frame rate (video) or sample rate (audio)," "-1 = match source time base", "ratio" }, - { "bsf", OPT_STRING | OPT_SPEC | OPT_EXPERT | OPT_OUTPUT, { .off = OFFSET(bitstream_filters) }, + { "bsf", OPT_TYPE_STRING, OPT_SPEC | OPT_EXPERT | OPT_OUTPUT, + { .off = OFFSET(bitstream_filters) }, "A comma-separated list of bitstream filters", "bitstream_filters" }, - { "absf", HAS_ARG | OPT_AUDIO | OPT_EXPERT| OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_old2new }, + { "absf", OPT_TYPE_FUNC, HAS_ARG | OPT_AUDIO | OPT_EXPERT| OPT_PERFILE | OPT_OUTPUT, + { .func_arg = opt_old2new }, "deprecated", "audio bitstream_filters" }, - { "vbsf", OPT_VIDEO | HAS_ARG | OPT_EXPERT| OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_old2new }, + { "vbsf", OPT_TYPE_FUNC, OPT_VIDEO | HAS_ARG | OPT_EXPERT| OPT_PERFILE | OPT_OUTPUT, + { .func_arg = opt_old2new }, "deprecated", "video bitstream_filters" }, - { "apre", HAS_ARG | OPT_AUDIO | OPT_EXPERT| OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_preset }, + { "apre", OPT_TYPE_FUNC, HAS_ARG | OPT_AUDIO | OPT_EXPERT| OPT_PERFILE | OPT_OUTPUT, + { .func_arg = opt_preset }, "set the audio options to the indicated preset", "preset" }, - { "vpre", OPT_VIDEO | HAS_ARG | OPT_EXPERT| OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_preset }, + { "vpre", OPT_TYPE_FUNC, OPT_VIDEO | HAS_ARG | OPT_EXPERT| OPT_PERFILE | OPT_OUTPUT, + { .func_arg = opt_preset }, "set the video options to the indicated preset", "preset" }, - { "spre", HAS_ARG | OPT_SUBTITLE | OPT_EXPERT| OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_preset }, + { "spre", OPT_TYPE_FUNC, HAS_ARG | OPT_SUBTITLE | OPT_EXPERT| OPT_PERFILE | OPT_OUTPUT, + { .func_arg = opt_preset }, "set the subtitle options to the indicated preset", "preset" }, - { "fpre", HAS_ARG | OPT_EXPERT| OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_preset }, + { "fpre", OPT_TYPE_FUNC, HAS_ARG | OPT_EXPERT| OPT_PERFILE | OPT_OUTPUT, + { .func_arg = opt_preset }, "set options from indicated preset file", "filename" }, - { "max_muxing_queue_size", OPT_INT | OPT_SPEC | OPT_EXPERT | OPT_OUTPUT, { .off = OFFSET(max_muxing_queue_size) }, + { "max_muxing_queue_size", OPT_TYPE_INT, OPT_SPEC | OPT_EXPERT | OPT_OUTPUT, + { .off = OFFSET(max_muxing_queue_size) }, "maximum number of packets that can be buffered while waiting for all streams to initialize", "packets" }, - { "muxing_queue_data_threshold", OPT_INT | OPT_SPEC | OPT_EXPERT | OPT_OUTPUT, { .off = OFFSET(muxing_queue_data_threshold) }, + { "muxing_queue_data_threshold", OPT_TYPE_INT, OPT_SPEC | OPT_EXPERT | OPT_OUTPUT, + { .off = OFFSET(muxing_queue_data_threshold) }, "set the threshold after which max_muxing_queue_size is taken into account", "bytes" }, /* data codec support */ - { "dcodec", HAS_ARG | OPT_DATA | OPT_PERFILE | OPT_EXPERT | OPT_INPUT | OPT_OUTPUT, { .func_arg = opt_data_codec }, + { "dcodec", OPT_TYPE_FUNC, HAS_ARG | OPT_DATA | OPT_PERFILE | OPT_EXPERT | OPT_INPUT | OPT_OUTPUT, + { .func_arg = opt_data_codec }, "force data codec ('copy' to copy stream)", "codec" }, - { "dn", OPT_BOOL | OPT_VIDEO | OPT_OFFSET | OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(data_disable) }, - "disable data" }, + { "dn", OPT_TYPE_BOOL, OPT_VIDEO | OPT_OFFSET | OPT_INPUT | OPT_OUTPUT, + { .off = OFFSET(data_disable) }, "disable data" }, #if CONFIG_VAAPI - { "vaapi_device", HAS_ARG | OPT_EXPERT, { .func_arg = opt_vaapi_device }, + { "vaapi_device", OPT_TYPE_FUNC, HAS_ARG | OPT_EXPERT, + { .func_arg = opt_vaapi_device }, "set VAAPI hardware device (DirectX adapter index, DRM path or X11 display name)", "device" }, #endif #if CONFIG_QSV - { "qsv_device", HAS_ARG | OPT_EXPERT, { .func_arg = opt_qsv_device }, + { "qsv_device", OPT_TYPE_FUNC, HAS_ARG | OPT_EXPERT, + { .func_arg = opt_qsv_device }, "set QSV hardware device (DirectX adapter index, DRM path or X11 display name)", "device"}, #endif - { "init_hw_device", HAS_ARG | OPT_EXPERT, { .func_arg = opt_init_hw_device }, + { "init_hw_device", OPT_TYPE_FUNC, HAS_ARG | OPT_EXPERT, + { .func_arg = opt_init_hw_device }, "initialise hardware device", "args" }, - { "filter_hw_device", HAS_ARG | OPT_EXPERT, { .func_arg = opt_filter_hw_device }, + { "filter_hw_device", OPT_TYPE_FUNC, HAS_ARG | OPT_EXPERT, + { .func_arg = opt_filter_hw_device }, "set hardware device used when filtering", "device" }, // deprecated options #if FFMPEG_OPT_MAP_CHANNEL - { "map_channel", HAS_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT, { .func_arg = opt_map_channel }, + { "map_channel", OPT_TYPE_FUNC, HAS_ARG | OPT_EXPERT | OPT_PERFILE | OPT_OUTPUT, + { .func_arg = opt_map_channel }, "map an audio channel from one stream to another (deprecated)", "file.stream.channel[:syncfile.syncstream]" }, #endif #if FFMPEG_OPT_ADRIFT_THRESHOLD - { "adrift_threshold", HAS_ARG | OPT_EXPERT, { .func_arg = opt_adrift_threshold }, + { "adrift_threshold", OPT_TYPE_FUNC, HAS_ARG | OPT_EXPERT, + { .func_arg = opt_adrift_threshold }, "deprecated, does nothing", "threshold" }, #endif #if FFMPEG_OPT_PSNR - { "psnr", OPT_VIDEO | OPT_BOOL | OPT_EXPERT, { &do_psnr }, + { "psnr", OPT_TYPE_BOOL, OPT_VIDEO | OPT_EXPERT, + { &do_psnr }, "calculate PSNR of compressed frames (deprecated, use -flags +psnr)" }, #endif #if FFMPEG_OPT_TOP - { "top", OPT_VIDEO | OPT_EXPERT | OPT_INT| OPT_SPEC | - OPT_INPUT | OPT_OUTPUT, { .off = OFFSET(top_field_first) }, + { "top", OPT_TYPE_INT, OPT_VIDEO | OPT_EXPERT | OPT_SPEC | OPT_INPUT | OPT_OUTPUT, + { .off = OFFSET(top_field_first) }, "deprecated, use the setfield video filter", "" }, #endif #if FFMPEG_OPT_QPHIST - { "qphist", OPT_VIDEO | OPT_EXPERT , { .func_arg = opt_qphist }, + { "qphist", OPT_TYPE_FUNC, OPT_VIDEO | OPT_EXPERT, + { .func_arg = opt_qphist }, "deprecated, does nothing" }, #endif |