* ubitux/shorthand-cleanup: lavfi/subtitles: switch to an AVOptions-based system. lavfi/pp: switch to an AVOptions-based system. lavfi/geq: switch to an AVOptions-based system. lavfi/edgedetect: switch to an AVOptions-based system. lavfi/curves: switch to an AVOptions-based system. lavfi/colormatrix: switch to an AVOptions-based system. lavfi/perms: switch to an AVOptions-based system. lavfi/ebur128: switch to an AVOptions-based system. lavfi/showspectrum: switch to an AVOptions-based system. lavfi/silencedetect: switch to an AVOptions-based system. lavfi/thumbnail: switch to an AVOptions-based system. Merged-by: Michael Niedermayer <michaelni@gmx.at>tags/n2.0
| @@ -1117,6 +1117,8 @@ minimum detected noise duration. | |||||
| The printed times and duration are expressed in seconds. | The printed times and duration are expressed in seconds. | ||||
| The filter accepts the following options: | |||||
| @table @option | @table @option | ||||
| @item duration, d | @item duration, d | ||||
| Set silence duration until notification (default is 2 seconds). | Set silence duration until notification (default is 2 seconds). | ||||
| @@ -2100,12 +2102,8 @@ boxblur=luma_radius=min(h\,w)/10:luma_power=1:chroma_radius=min(cw\,ch)/10:chrom | |||||
| Convert color matrix. | Convert color matrix. | ||||
| The filter accepts parameters as a list of @var{key}=@var{value} | |||||
| pairs, separated by ":". If the key of the first options is omitted, | |||||
| the arguments are interpreted according to the syntax | |||||
| @var{src}:@var{dst}. | |||||
| The filter accepts the following options: | |||||
| A description of the accepted options follows: | |||||
| @table @option | @table @option | ||||
| @item src | @item src | ||||
| @item dst | @item dst | ||||
| @@ -2371,30 +2369,15 @@ If there is no key point defined in @code{x=0}, the filter will automatically | |||||
| insert a @var{(0;0)} point. In the same way, if there is no key point defined | insert a @var{(0;0)} point. In the same way, if there is no key point defined | ||||
| in @code{x=1}, the filter will automatically insert a @var{(1;1)} point. | in @code{x=1}, the filter will automatically insert a @var{(1;1)} point. | ||||
| The filter accepts parameters as a list of @var{key}=@var{value} | |||||
| pairs, separated by ":". If the key of the first options is omitted, | |||||
| the arguments are interpreted according to the syntax | |||||
| curves[=@var{preset}]. | |||||
| A description of the accepted parameters follows. | |||||
| The filter accepts the following options: | |||||
| @table @option | @table @option | ||||
| @item red, r | |||||
| Set the key points for the red component. | |||||
| @item green, g | |||||
| Set the key points for the green component. | |||||
| @item blue, b | |||||
| Set the key points for the blue component. | |||||
| @item all | |||||
| Set the key points for all components. | |||||
| Can be used in addition to the other key points component | |||||
| options. In this case, the unset component(s) will fallback on this | |||||
| @option{all} setting. | |||||
| @item preset | @item preset | ||||
| Select one of the available color presets. This option can not be used in | Select one of the available color presets. This option can not be used in | ||||
| addition to the @option{r}, @option{g}, @option{b} parameters. | addition to the @option{r}, @option{g}, @option{b} parameters. | ||||
| Available presets are: | Available presets are: | ||||
| @table @samp | @table @samp | ||||
| @item none | |||||
| @item color_negative | @item color_negative | ||||
| @item cross_process | @item cross_process | ||||
| @item darker | @item darker | ||||
| @@ -2406,7 +2389,18 @@ Available presets are: | |||||
| @item strong_contrast | @item strong_contrast | ||||
| @item vintage | @item vintage | ||||
| @end table | @end table | ||||
| Default is unset. | |||||
| Default is @code{none}. | |||||
| @item red, r | |||||
| Set the key points for the red component. | |||||
| @item green, g | |||||
| Set the key points for the green component. | |||||
| @item blue, b | |||||
| Set the key points for the blue component. | |||||
| @item all | |||||
| Set the key points for all components. | |||||
| Can be used in addition to the other key points component | |||||
| options. In this case, the unset component(s) will fallback on this | |||||
| @option{all} setting. | |||||
| @end table | @end table | ||||
| To avoid some filtergraph syntax conflicts, each key points list need to be | To avoid some filtergraph syntax conflicts, each key points list need to be | ||||
| @@ -3014,7 +3008,7 @@ For more information about fontconfig, check: | |||||
| Detect and draw edges. The filter uses the Canny Edge Detection algorithm. | Detect and draw edges. The filter uses the Canny Edge Detection algorithm. | ||||
| This filter accepts the following optional named parameters: | |||||
| The filter accepts the following options: | |||||
| @table @option | @table @option | ||||
| @item low, high | @item low, high | ||||
| @@ -3308,11 +3302,7 @@ For more information see: | |||||
| @section geq | @section geq | ||||
| The filter takes one, two, three or four equations as parameter, separated by ':'. | |||||
| The first equation is mandatory and applies to the luma plane. The two | |||||
| following are respectively for chroma blue and chroma red planes. | |||||
| The filter syntax allows named parameters: | |||||
| The filter accepts the following options: | |||||
| @table @option | @table @option | ||||
| @item lum_expr | @item lum_expr | ||||
| @@ -4615,6 +4605,13 @@ Subfilters must be separated by '/' and can be disabled by prepending a '-'. | |||||
| Each subfilter and some options have a short and a long name that can be used | Each subfilter and some options have a short and a long name that can be used | ||||
| interchangeably, i.e. dr/dering are the same. | interchangeably, i.e. dr/dering are the same. | ||||
| The filters accept the following options: | |||||
| @table @option | |||||
| @item subfilters | |||||
| Set postprocessing subfilters string. | |||||
| @end table | |||||
| All subfilters share common options to determine their scope: | All subfilters share common options to determine their scope: | ||||
| @table @option | @table @option | ||||
| @@ -4631,12 +4628,12 @@ Do luminance filtering only (no chrominance). | |||||
| Do chrominance filtering only (no luminance). | Do chrominance filtering only (no luminance). | ||||
| @end table | @end table | ||||
| These options can be appended after the subfilter name, separated by a ':'. | |||||
| These options can be appended after the subfilter name, separated by a '|'. | |||||
| Available subfilters are: | Available subfilters are: | ||||
| @table @option | @table @option | ||||
| @item hb/hdeblock[:difference[:flatness]] | |||||
| @item hb/hdeblock[|difference[|flatness]] | |||||
| Horizontal deblocking filter | Horizontal deblocking filter | ||||
| @table @option | @table @option | ||||
| @item difference | @item difference | ||||
| @@ -4645,7 +4642,7 @@ Difference factor where higher values mean more deblocking (default: @code{32}). | |||||
| Flatness threshold where lower values mean more deblocking (default: @code{39}). | Flatness threshold where lower values mean more deblocking (default: @code{39}). | ||||
| @end table | @end table | ||||
| @item vb/vdeblock[:difference[:flatness]] | |||||
| @item vb/vdeblock[|difference[|flatness]] | |||||
| Vertical deblocking filter | Vertical deblocking filter | ||||
| @table @option | @table @option | ||||
| @item difference | @item difference | ||||
| @@ -4654,7 +4651,7 @@ Difference factor where higher values mean more deblocking (default: @code{32}). | |||||
| Flatness threshold where lower values mean more deblocking (default: @code{39}). | Flatness threshold where lower values mean more deblocking (default: @code{39}). | ||||
| @end table | @end table | ||||
| @item ha/hadeblock[:difference[:flatness]] | |||||
| @item ha/hadeblock[|difference[|flatness]] | |||||
| Accurate horizontal deblocking filter | Accurate horizontal deblocking filter | ||||
| @table @option | @table @option | ||||
| @item difference | @item difference | ||||
| @@ -4663,7 +4660,7 @@ Difference factor where higher values mean more deblocking (default: @code{32}). | |||||
| Flatness threshold where lower values mean more deblocking (default: @code{39}). | Flatness threshold where lower values mean more deblocking (default: @code{39}). | ||||
| @end table | @end table | ||||
| @item va/vadeblock[:difference[:flatness]] | |||||
| @item va/vadeblock[|difference[|flatness]] | |||||
| Accurate vertical deblocking filter | Accurate vertical deblocking filter | ||||
| @table @option | @table @option | ||||
| @item difference | @item difference | ||||
| @@ -4687,7 +4684,7 @@ Experimental vertical deblocking filter | |||||
| @item dr/dering | @item dr/dering | ||||
| Deringing filter | Deringing filter | ||||
| @item tn/tmpnoise[:threshold1[:threshold2[:threshold3]]], temporal noise reducer | |||||
| @item tn/tmpnoise[|threshold1[|threshold2[|threshold3]]], temporal noise reducer | |||||
| @table @option | @table @option | ||||
| @item threshold1 | @item threshold1 | ||||
| larger -> stronger filtering | larger -> stronger filtering | ||||
| @@ -4727,7 +4724,7 @@ second line with a @code{(-1 4 2 4 -1)} filter. | |||||
| Vertically applied FIR lowpass deinterlacing filter that deinterlaces the given | Vertically applied FIR lowpass deinterlacing filter that deinterlaces the given | ||||
| block by filtering all lines with a @code{(-1 2 6 2 -1)} filter. | block by filtering all lines with a @code{(-1 2 6 2 -1)} filter. | ||||
| @item fq/forceQuant[:quantizer] | |||||
| @item fq/forceQuant[|quantizer] | |||||
| Overrides the quantizer table from the input with the constant quantizer you | Overrides the quantizer table from the input with the constant quantizer you | ||||
| specify. | specify. | ||||
| @table @option | @table @option | ||||
| @@ -4736,13 +4733,13 @@ Quantizer to use | |||||
| @end table | @end table | ||||
| @item de/default | @item de/default | ||||
| Default pp filter combination (@code{hb:a,vb:a,dr:a}) | |||||
| Default pp filter combination (@code{hb|a,vb|a,dr|a}) | |||||
| @item fa/fast | @item fa/fast | ||||
| Fast pp filter combination (@code{h1:a,v1:a,dr:a}) | |||||
| Fast pp filter combination (@code{h1|a,v1|a,dr|a}) | |||||
| @item ac | @item ac | ||||
| High quality pp filter combination (@code{ha:a:128:7,va:a,dr:a}) | |||||
| High quality pp filter combination (@code{ha|a|128|7,va|a,dr|a}) | |||||
| @end table | @end table | ||||
| @subsection Examples | @subsection Examples | ||||
| @@ -4764,14 +4761,14 @@ pp=de/-al | |||||
| @item | @item | ||||
| Apply default filters and temporal denoiser: | Apply default filters and temporal denoiser: | ||||
| @example | @example | ||||
| pp=default/tmpnoise:1:2:3 | |||||
| pp=default/tmpnoise|1|2|3 | |||||
| @end example | @end example | ||||
| @item | @item | ||||
| Apply deblocking on luminance only, and switch vertical deblocking on or off | Apply deblocking on luminance only, and switch vertical deblocking on or off | ||||
| automatically depending on available CPU time: | automatically depending on available CPU time: | ||||
| @example | @example | ||||
| pp=hb:y/vb:a | |||||
| pp=hb|y/vb|a | |||||
| @end example | @end example | ||||
| @end itemize | @end itemize | ||||
| @@ -5325,8 +5322,7 @@ To enable compilation of this filter you need to configure FFmpeg with | |||||
| libavformat to convert the passed subtitles file to ASS (Advanced Substation | libavformat to convert the passed subtitles file to ASS (Advanced Substation | ||||
| Alpha) subtitles format. | Alpha) subtitles format. | ||||
| This filter accepts the following named options, expressed as a | |||||
| sequence of @var{key}=@var{value} pairs, separated by ":". | |||||
| The filter accepts the following options: | |||||
| @table @option | @table @option | ||||
| @item filename, f | @item filename, f | ||||
| @@ -5392,10 +5388,7 @@ Swap U & V plane. | |||||
| @section thumbnail | @section thumbnail | ||||
| Select the most representative frame in a given sequence of consecutive frames. | Select the most representative frame in a given sequence of consecutive frames. | ||||
| The filter accepts parameters as a list of @var{key}=@var{value} | |||||
| pairs, separated by ":". If the key of the first options is omitted, | |||||
| the arguments are interpreted according to the syntax | |||||
| thumbnail[=@var{n}]. | |||||
| The filter accepts the following options: | |||||
| @table @option | @table @option | ||||
| @item n | @item n | ||||
| @@ -6345,11 +6338,7 @@ Set read/write permissions for the output frames. | |||||
| These filters are mainly aimed at developers to test direct path in the | These filters are mainly aimed at developers to test direct path in the | ||||
| following filter in the filtergraph. | following filter in the filtergraph. | ||||
| The filters accept parameters as a list of @var{key}=@var{value} pairs, | |||||
| separated by ":". If the key of the first options is omitted, the argument is | |||||
| assumed to be the @var{mode}. | |||||
| A description of the accepted parameters follows. | |||||
| The filters accept the following options: | |||||
| @table @option | @table @option | ||||
| @item mode | @item mode | ||||
| @@ -6848,7 +6837,7 @@ the momentary loudness (400 milliseconds). | |||||
| More information about the Loudness Recommendation EBU R128 on | More information about the Loudness Recommendation EBU R128 on | ||||
| @url{http://tech.ebu.ch/loudness}. | @url{http://tech.ebu.ch/loudness}. | ||||
| The filter accepts the following named parameters: | |||||
| The filter accepts the following options: | |||||
| @table @option | @table @option | ||||
| @@ -7036,7 +7025,8 @@ do not have exactly the same duration in the first file. | |||||
| Convert input audio to a video output, representing the audio frequency | Convert input audio to a video output, representing the audio frequency | ||||
| spectrum. | spectrum. | ||||
| The filter accepts the following named parameters: | |||||
| The filter accepts the following options: | |||||
| @table @option | @table @option | ||||
| @item size, s | @item size, s | ||||
| Specify the video size for the output. Default value is @code{640x512}. | Specify the video size for the output. Default value is @code{640x512}. | ||||
| @@ -54,22 +54,6 @@ static const AVOption silencedetect_options[] = { | |||||
| AVFILTER_DEFINE_CLASS(silencedetect); | AVFILTER_DEFINE_CLASS(silencedetect); | ||||
| static av_cold int init(AVFilterContext *ctx, const char *args) | |||||
| { | |||||
| int ret; | |||||
| SilenceDetectContext *silence = ctx->priv; | |||||
| silence->class = &silencedetect_class; | |||||
| av_opt_set_defaults(silence); | |||||
| if ((ret = av_set_options_string(silence, args, "=", ":")) < 0) | |||||
| return ret; | |||||
| av_opt_free(silence); | |||||
| return 0; | |||||
| } | |||||
| static char *get_metadata_val(AVFrame *insamples, const char *key) | static char *get_metadata_val(AVFrame *insamples, const char *key) | ||||
| { | { | ||||
| AVDictionaryEntry *e = av_dict_get(insamples->metadata, key, NULL, 0); | AVDictionaryEntry *e = av_dict_get(insamples->metadata, key, NULL, 0); | ||||
| @@ -176,7 +160,6 @@ AVFilter avfilter_af_silencedetect = { | |||||
| .name = "silencedetect", | .name = "silencedetect", | ||||
| .description = NULL_IF_CONFIG_SMALL("Detect silence."), | .description = NULL_IF_CONFIG_SMALL("Detect silence."), | ||||
| .priv_size = sizeof(SilenceDetectContext), | .priv_size = sizeof(SilenceDetectContext), | ||||
| .init = init, | |||||
| .query_formats = query_formats, | .query_formats = query_formats, | ||||
| .inputs = silencedetect_inputs, | .inputs = silencedetect_inputs, | ||||
| .outputs = silencedetect_outputs, | .outputs = silencedetect_outputs, | ||||
| @@ -97,20 +97,6 @@ static const struct { | |||||
| { 1, 1, 0, 0 } | { 1, 1, 0, 0 } | ||||
| }; | }; | ||||
| static av_cold int init(AVFilterContext *ctx, const char *args) | |||||
| { | |||||
| ShowSpectrumContext *showspectrum = ctx->priv; | |||||
| int err; | |||||
| showspectrum->class = &showspectrum_class; | |||||
| av_opt_set_defaults(showspectrum); | |||||
| if ((err = av_set_options_string(showspectrum, args, "=", ":")) < 0) | |||||
| return err; | |||||
| return 0; | |||||
| } | |||||
| static av_cold void uninit(AVFilterContext *ctx) | static av_cold void uninit(AVFilterContext *ctx) | ||||
| { | { | ||||
| ShowSpectrumContext *showspectrum = ctx->priv; | ShowSpectrumContext *showspectrum = ctx->priv; | ||||
| @@ -505,7 +491,6 @@ static const AVFilterPad showspectrum_outputs[] = { | |||||
| AVFilter avfilter_avf_showspectrum = { | AVFilter avfilter_avf_showspectrum = { | ||||
| .name = "showspectrum", | .name = "showspectrum", | ||||
| .description = NULL_IF_CONFIG_SMALL("Convert input audio to a spectrum video output."), | .description = NULL_IF_CONFIG_SMALL("Convert input audio to a spectrum video output."), | ||||
| .init = init, | |||||
| .uninit = uninit, | .uninit = uninit, | ||||
| .query_formats = query_formats, | .query_formats = query_formats, | ||||
| .priv_size = sizeof(ShowSpectrumContext), | .priv_size = sizeof(ShowSpectrumContext), | ||||
| @@ -657,18 +657,24 @@ int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque | |||||
| int ret=0; | int ret=0; | ||||
| int anton_options = | int anton_options = | ||||
| !strcmp(filter->filter->name, "aformat") || | !strcmp(filter->filter->name, "aformat") || | ||||
| !strcmp(filter->filter->name, "ass") || | |||||
| !strcmp(filter->filter->name, "blackframe") || | !strcmp(filter->filter->name, "blackframe") || | ||||
| !strcmp(filter->filter->name, "boxblur" ) || | !strcmp(filter->filter->name, "boxblur" ) || | ||||
| !strcmp(filter->filter->name, "colormatrix") || | |||||
| !strcmp(filter->filter->name, "crop" ) || | !strcmp(filter->filter->name, "crop" ) || | ||||
| !strcmp(filter->filter->name, "cropdetect") || | !strcmp(filter->filter->name, "cropdetect") || | ||||
| !strcmp(filter->filter->name, "curves" ) || | |||||
| !strcmp(filter->filter->name, "delogo" ) || | !strcmp(filter->filter->name, "delogo" ) || | ||||
| !strcmp(filter->filter->name, "drawbox" ) || | !strcmp(filter->filter->name, "drawbox" ) || | ||||
| !strcmp(filter->filter->name, "drawtext" ) || | !strcmp(filter->filter->name, "drawtext" ) || | ||||
| !strcmp(filter->filter->name, "ebur128" ) || | |||||
| !strcmp(filter->filter->name, "edgedetect") || | |||||
| !strcmp(filter->filter->name, "fade" ) || | !strcmp(filter->filter->name, "fade" ) || | ||||
| !strcmp(filter->filter->name, "fieldorder") || | !strcmp(filter->filter->name, "fieldorder") || | ||||
| !strcmp(filter->filter->name, "fps" ) || | !strcmp(filter->filter->name, "fps" ) || | ||||
| !strcmp(filter->filter->name, "frei0r" ) || | !strcmp(filter->filter->name, "frei0r" ) || | ||||
| !strcmp(filter->filter->name, "frei0r_src") || | !strcmp(filter->filter->name, "frei0r_src") || | ||||
| !strcmp(filter->filter->name, "geq" ) || | |||||
| !strcmp(filter->filter->name, "gradfun" ) || | !strcmp(filter->filter->name, "gradfun" ) || | ||||
| !strcmp(filter->filter->name, "hqdn3d" ) || | !strcmp(filter->filter->name, "hqdn3d" ) || | ||||
| !strcmp(filter->filter->name, "ocv" ) || | !strcmp(filter->filter->name, "ocv" ) || | ||||
| @@ -680,7 +686,14 @@ int avfilter_init_filter(AVFilterContext *filter, const char *args, void *opaque | |||||
| !strcmp(filter->filter->name, "pad" ) || | !strcmp(filter->filter->name, "pad" ) || | ||||
| !strcmp(filter->filter->name, "format") || | !strcmp(filter->filter->name, "format") || | ||||
| !strcmp(filter->filter->name, "noformat") || | !strcmp(filter->filter->name, "noformat") || | ||||
| !strcmp(filter->filter->name, "perms") || | |||||
| !strcmp(filter->filter->name, "pp" ) || | |||||
| !strcmp(filter->filter->name, "aperms") || | |||||
| !strcmp(filter->filter->name, "resample") || | !strcmp(filter->filter->name, "resample") || | ||||
| !strcmp(filter->filter->name, "showspectrum") || | |||||
| !strcmp(filter->filter->name, "silencedetect") || | |||||
| !strcmp(filter->filter->name, "subtitles") || | |||||
| !strcmp(filter->filter->name, "thumbnail") || | |||||
| // !strcmp(filter->filter->name, "scale" ) || | // !strcmp(filter->filter->name, "scale" ) || | ||||
| !strcmp(filter->filter->name, "select") || | !strcmp(filter->filter->name, "select") || | ||||
| 0 | 0 | ||||
| @@ -405,16 +405,9 @@ static struct hist_entry *get_histogram(void) | |||||
| static av_cold int init(AVFilterContext *ctx, const char *args) | static av_cold int init(AVFilterContext *ctx, const char *args) | ||||
| { | { | ||||
| int ret; | |||||
| EBUR128Context *ebur128 = ctx->priv; | EBUR128Context *ebur128 = ctx->priv; | ||||
| AVFilterPad pad; | AVFilterPad pad; | ||||
| ebur128->class = &ebur128_class; | |||||
| av_opt_set_defaults(ebur128); | |||||
| if ((ret = av_set_options_string(ebur128, args, "=", ":")) < 0) | |||||
| return ret; | |||||
| if (ebur128->loglevel != AV_LOG_INFO && | if (ebur128->loglevel != AV_LOG_INFO && | ||||
| ebur128->loglevel != AV_LOG_VERBOSE) { | ebur128->loglevel != AV_LOG_VERBOSE) { | ||||
| if (ebur128->do_video || ebur128->metadata) | if (ebur128->do_video || ebur128->metadata) | ||||
| @@ -111,8 +111,6 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame) | |||||
| return ret; | return ret; | ||||
| } | } | ||||
| static const char *const shorthand[] = { "mode", NULL }; | |||||
| #if CONFIG_APERMS_FILTER | #if CONFIG_APERMS_FILTER | ||||
| #define aperms_options options | #define aperms_options options | ||||
| @@ -143,7 +141,6 @@ AVFilter avfilter_af_aperms = { | |||||
| .inputs = aperms_inputs, | .inputs = aperms_inputs, | ||||
| .outputs = aperms_outputs, | .outputs = aperms_outputs, | ||||
| .priv_class = &aperms_class, | .priv_class = &aperms_class, | ||||
| .shorthand = shorthand, | |||||
| }; | }; | ||||
| #endif /* CONFIG_APERMS_FILTER */ | #endif /* CONFIG_APERMS_FILTER */ | ||||
| @@ -177,6 +174,5 @@ AVFilter avfilter_vf_perms = { | |||||
| .inputs = perms_inputs, | .inputs = perms_inputs, | ||||
| .outputs = perms_outputs, | .outputs = perms_outputs, | ||||
| .priv_class = &perms_class, | .priv_class = &perms_class, | ||||
| .shorthand = shorthand, | |||||
| }; | }; | ||||
| #endif /* CONFIG_PERMS_FILTER */ | #endif /* CONFIG_PERMS_FILTER */ | ||||
| @@ -375,8 +375,6 @@ static const AVFilterPad colormatrix_outputs[] = { | |||||
| { NULL } | { NULL } | ||||
| }; | }; | ||||
| static const char *const shorthand[] = { "src", "dst", NULL }; | |||||
| AVFilter avfilter_vf_colormatrix = { | AVFilter avfilter_vf_colormatrix = { | ||||
| .name = "colormatrix", | .name = "colormatrix", | ||||
| .description = NULL_IF_CONFIG_SMALL("Convert color matrix."), | .description = NULL_IF_CONFIG_SMALL("Convert color matrix."), | ||||
| @@ -387,5 +385,4 @@ AVFilter avfilter_vf_colormatrix = { | |||||
| .inputs = colormatrix_inputs, | .inputs = colormatrix_inputs, | ||||
| .outputs = colormatrix_outputs, | .outputs = colormatrix_outputs, | ||||
| .priv_class = &colormatrix_class, | .priv_class = &colormatrix_class, | ||||
| .shorthand = shorthand, | |||||
| }; | }; | ||||
| @@ -59,14 +59,8 @@ typedef struct { | |||||
| #define OFFSET(x) offsetof(CurvesContext, x) | #define OFFSET(x) offsetof(CurvesContext, x) | ||||
| #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM | #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM | ||||
| static const AVOption curves_options[] = { | static const AVOption curves_options[] = { | ||||
| { "red", "set red points coordinates", OFFSET(comp_points_str[0]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS }, | |||||
| { "r", "set red points coordinates", OFFSET(comp_points_str[0]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS }, | |||||
| { "green", "set green points coordinates", OFFSET(comp_points_str[1]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS }, | |||||
| { "g", "set green points coordinates", OFFSET(comp_points_str[1]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS }, | |||||
| { "blue", "set blue points coordinates", OFFSET(comp_points_str[2]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS }, | |||||
| { "b", "set blue points coordinates", OFFSET(comp_points_str[2]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS }, | |||||
| { "all", "set points coordinates for all components", OFFSET(comp_points_str_all),AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS }, | |||||
| { "preset", "select a color curves preset", OFFSET(preset), AV_OPT_TYPE_INT, {.i64=PRESET_NONE}, PRESET_NONE, NB_PRESETS-1, FLAGS, "preset_name" }, | { "preset", "select a color curves preset", OFFSET(preset), AV_OPT_TYPE_INT, {.i64=PRESET_NONE}, PRESET_NONE, NB_PRESETS-1, FLAGS, "preset_name" }, | ||||
| { "none", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_NONE}, INT_MIN, INT_MAX, FLAGS, "preset_name" }, | |||||
| { "color_negative", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_COLOR_NEGATIVE}, INT_MIN, INT_MAX, FLAGS, "preset_name" }, | { "color_negative", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_COLOR_NEGATIVE}, INT_MIN, INT_MAX, FLAGS, "preset_name" }, | ||||
| { "cross_process", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_CROSS_PROCESS}, INT_MIN, INT_MAX, FLAGS, "preset_name" }, | { "cross_process", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_CROSS_PROCESS}, INT_MIN, INT_MAX, FLAGS, "preset_name" }, | ||||
| { "darker", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_DARKER}, INT_MIN, INT_MAX, FLAGS, "preset_name" }, | { "darker", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_DARKER}, INT_MIN, INT_MAX, FLAGS, "preset_name" }, | ||||
| @@ -77,6 +71,13 @@ static const AVOption curves_options[] = { | |||||
| { "negative", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_NEGATIVE}, INT_MIN, INT_MAX, FLAGS, "preset_name" }, | { "negative", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_NEGATIVE}, INT_MIN, INT_MAX, FLAGS, "preset_name" }, | ||||
| { "strong_contrast", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_STRONG_CONTRAST}, INT_MIN, INT_MAX, FLAGS, "preset_name" }, | { "strong_contrast", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_STRONG_CONTRAST}, INT_MIN, INT_MAX, FLAGS, "preset_name" }, | ||||
| { "vintage", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_VINTAGE}, INT_MIN, INT_MAX, FLAGS, "preset_name" }, | { "vintage", NULL, 0, AV_OPT_TYPE_CONST, {.i64=PRESET_VINTAGE}, INT_MIN, INT_MAX, FLAGS, "preset_name" }, | ||||
| { "red", "set red points coordinates", OFFSET(comp_points_str[0]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS }, | |||||
| { "r", "set red points coordinates", OFFSET(comp_points_str[0]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS }, | |||||
| { "green", "set green points coordinates", OFFSET(comp_points_str[1]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS }, | |||||
| { "g", "set green points coordinates", OFFSET(comp_points_str[1]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS }, | |||||
| { "blue", "set blue points coordinates", OFFSET(comp_points_str[2]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS }, | |||||
| { "b", "set blue points coordinates", OFFSET(comp_points_str[2]), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS }, | |||||
| { "all", "set points coordinates for all components", OFFSET(comp_points_str_all),AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS }, | |||||
| { NULL } | { NULL } | ||||
| }; | }; | ||||
| @@ -447,8 +448,6 @@ static const AVFilterPad curves_outputs[] = { | |||||
| { NULL } | { NULL } | ||||
| }; | }; | ||||
| static const char *const shorthand[] = { "preset", NULL }; | |||||
| AVFilter avfilter_vf_curves = { | AVFilter avfilter_vf_curves = { | ||||
| .name = "curves", | .name = "curves", | ||||
| .description = NULL_IF_CONFIG_SMALL("Adjust components curves."), | .description = NULL_IF_CONFIG_SMALL("Adjust components curves."), | ||||
| @@ -458,5 +457,4 @@ AVFilter avfilter_vf_curves = { | |||||
| .inputs = curves_inputs, | .inputs = curves_inputs, | ||||
| .outputs = curves_outputs, | .outputs = curves_outputs, | ||||
| .priv_class = &curves_class, | .priv_class = &curves_class, | ||||
| .shorthand = shorthand, | |||||
| }; | }; | ||||
| @@ -52,15 +52,8 @@ AVFILTER_DEFINE_CLASS(edgedetect); | |||||
| static av_cold int init(AVFilterContext *ctx, const char *args) | static av_cold int init(AVFilterContext *ctx, const char *args) | ||||
| { | { | ||||
| int ret; | |||||
| EdgeDetectContext *edgedetect = ctx->priv; | EdgeDetectContext *edgedetect = ctx->priv; | ||||
| edgedetect->class = &edgedetect_class; | |||||
| av_opt_set_defaults(edgedetect); | |||||
| if ((ret = av_set_options_string(edgedetect, args, "=", ":")) < 0) | |||||
| return ret; | |||||
| edgedetect->low_u8 = edgedetect->low * 255. + .5; | edgedetect->low_u8 = edgedetect->low * 255. + .5; | ||||
| edgedetect->high_u8 = edgedetect->high * 255. + .5; | edgedetect->high_u8 = edgedetect->high * 255. + .5; | ||||
| return 0; | return 0; | ||||
| @@ -228,8 +228,6 @@ static const AVFilterPad geq_outputs[] = { | |||||
| { NULL } | { NULL } | ||||
| }; | }; | ||||
| static const char *const shorthand[] = { "lum_expr", "cb_expr", "cr_expr", "alpha_expr", NULL }; | |||||
| AVFilter avfilter_vf_geq = { | AVFilter avfilter_vf_geq = { | ||||
| .name = "geq", | .name = "geq", | ||||
| .description = NULL_IF_CONFIG_SMALL("Apply generic equation to each pixel."), | .description = NULL_IF_CONFIG_SMALL("Apply generic equation to each pixel."), | ||||
| @@ -240,5 +238,4 @@ AVFilter avfilter_vf_geq = { | |||||
| .inputs = geq_inputs, | .inputs = geq_inputs, | ||||
| .outputs = geq_outputs, | .outputs = geq_outputs, | ||||
| .priv_class = &geq_class, | .priv_class = &geq_class, | ||||
| .shorthand = shorthand, | |||||
| }; | }; | ||||
| @@ -31,21 +31,29 @@ | |||||
| #include "libpostproc/postprocess.h" | #include "libpostproc/postprocess.h" | ||||
| typedef struct { | typedef struct { | ||||
| const AVClass *class; | |||||
| char *subfilters; | |||||
| int mode_id; | int mode_id; | ||||
| pp_mode *modes[PP_QUALITY_MAX + 1]; | pp_mode *modes[PP_QUALITY_MAX + 1]; | ||||
| void *pp_ctx; | void *pp_ctx; | ||||
| } PPFilterContext; | } PPFilterContext; | ||||
| #define OFFSET(x) offsetof(PPFilterContext, x) | |||||
| #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM | |||||
| static const AVOption pp_options[] = { | |||||
| { "subfilters", "set postprocess subfilters", OFFSET(subfilters), AV_OPT_TYPE_STRING, {.str="de"}, .flags = FLAGS }, | |||||
| { NULL } | |||||
| }; | |||||
| AVFILTER_DEFINE_CLASS(pp); | |||||
| static av_cold int pp_init(AVFilterContext *ctx, const char *args) | static av_cold int pp_init(AVFilterContext *ctx, const char *args) | ||||
| { | { | ||||
| int i; | int i; | ||||
| PPFilterContext *pp = ctx->priv; | PPFilterContext *pp = ctx->priv; | ||||
| if (!args || !*args) | |||||
| args = "de"; | |||||
| for (i = 0; i <= PP_QUALITY_MAX; i++) { | for (i = 0; i <= PP_QUALITY_MAX; i++) { | ||||
| pp->modes[i] = pp_get_mode_by_name_and_quality(args, i); | |||||
| pp->modes[i] = pp_get_mode_by_name_and_quality(pp->subfilters, i); | |||||
| if (!pp->modes[i]) | if (!pp->modes[i]) | ||||
| return AVERROR_EXTERNAL; | return AVERROR_EXTERNAL; | ||||
| } | } | ||||
| @@ -171,4 +179,6 @@ AVFilter avfilter_vf_pp = { | |||||
| .inputs = pp_inputs, | .inputs = pp_inputs, | ||||
| .outputs = pp_outputs, | .outputs = pp_outputs, | ||||
| .process_command = pp_process_command, | .process_command = pp_process_command, | ||||
| .priv_class = &pp_class, | |||||
| }; | }; | ||||
| @@ -201,8 +201,6 @@ static const AVFilterPad ass_outputs[] = { | |||||
| { NULL } | { NULL } | ||||
| }; | }; | ||||
| static const char *const shorthand[] = { "filename", NULL }; | |||||
| #if CONFIG_ASS_FILTER | #if CONFIG_ASS_FILTER | ||||
| static const AVOption ass_options[] = { | static const AVOption ass_options[] = { | ||||
| @@ -240,7 +238,6 @@ AVFilter avfilter_vf_ass = { | |||||
| .inputs = ass_inputs, | .inputs = ass_inputs, | ||||
| .outputs = ass_outputs, | .outputs = ass_outputs, | ||||
| .priv_class = &ass_class, | .priv_class = &ass_class, | ||||
| .shorthand = shorthand, | |||||
| }; | }; | ||||
| #endif | #endif | ||||
| @@ -365,6 +362,5 @@ AVFilter avfilter_vf_subtitles = { | |||||
| .inputs = ass_inputs, | .inputs = ass_inputs, | ||||
| .outputs = ass_outputs, | .outputs = ass_outputs, | ||||
| .priv_class = &subtitles_class, | .priv_class = &subtitles_class, | ||||
| .shorthand = shorthand, | |||||
| }; | }; | ||||
| #endif | #endif | ||||
| @@ -227,8 +227,6 @@ static const AVFilterPad thumbnail_outputs[] = { | |||||
| { NULL } | { NULL } | ||||
| }; | }; | ||||
| static const char *const shorthand[] = { "n", NULL }; | |||||
| AVFilter avfilter_vf_thumbnail = { | AVFilter avfilter_vf_thumbnail = { | ||||
| .name = "thumbnail", | .name = "thumbnail", | ||||
| .description = NULL_IF_CONFIG_SMALL("Select the most representative frame in a given sequence of consecutive frames."), | .description = NULL_IF_CONFIG_SMALL("Select the most representative frame in a given sequence of consecutive frames."), | ||||
| @@ -239,5 +237,4 @@ AVFilter avfilter_vf_thumbnail = { | |||||
| .inputs = thumbnail_inputs, | .inputs = thumbnail_inputs, | ||||
| .outputs = thumbnail_outputs, | .outputs = thumbnail_outputs, | ||||
| .priv_class = &thumbnail_class, | .priv_class = &thumbnail_class, | ||||
| .shorthand = shorthand, | |||||
| }; | }; | ||||
| @@ -666,7 +666,7 @@ pp_mode *pp_get_mode_by_name_and_quality(const char *name, int quality) | |||||
| char temp[GET_MODE_BUFFER_SIZE]; | char temp[GET_MODE_BUFFER_SIZE]; | ||||
| char *p= temp; | char *p= temp; | ||||
| static const char filterDelimiters[] = ",/"; | static const char filterDelimiters[] = ",/"; | ||||
| static const char optionDelimiters[] = ":"; | |||||
| static const char optionDelimiters[] = ":|"; | |||||
| struct PPMode *ppMode; | struct PPMode *ppMode; | ||||
| char *filterToken; | char *filterToken; | ||||
| @@ -29,7 +29,7 @@ | |||||
| #include "libavutil/avutil.h" | #include "libavutil/avutil.h" | ||||
| #define LIBPOSTPROC_VERSION_MAJOR 52 | #define LIBPOSTPROC_VERSION_MAJOR 52 | ||||
| #define LIBPOSTPROC_VERSION_MINOR 2 | |||||
| #define LIBPOSTPROC_VERSION_MINOR 3 | |||||
| #define LIBPOSTPROC_VERSION_MICRO 100 | #define LIBPOSTPROC_VERSION_MICRO 100 | ||||
| #define LIBPOSTPROC_VERSION_INT AV_VERSION_INT(LIBPOSTPROC_VERSION_MAJOR, \ | #define LIBPOSTPROC_VERSION_INT AV_VERSION_INT(LIBPOSTPROC_VERSION_MAJOR, \ | ||||
| @@ -52,8 +52,8 @@ do_lavfi "overlay_yuv420" "split[m],scale=88:72,pad=96:80:4:4[o2];[m]fifo[o1 | |||||
| do_lavfi "overlay_yuv444" "split[m],scale=88:72,pad=96:80:4:4[o2];[m]fifo[o1],[o1][o2]overlay=240:16:format=yuv444" | do_lavfi "overlay_yuv444" "split[m],scale=88:72,pad=96:80:4:4[o2];[m]fifo[o1],[o1][o2]overlay=240:16:format=yuv444" | ||||
| do_lavfi "pad" "pad=iw*1.5:ih*1.5:iw*0.3:ih*0.2" | do_lavfi "pad" "pad=iw*1.5:ih*1.5:iw*0.3:ih*0.2" | ||||
| do_lavfi "pp" "pp=be/hb/vb/tn/l5/al" | do_lavfi "pp" "pp=be/hb/vb/tn/l5/al" | ||||
| do_lavfi "pp2" "pp=be/fq:16/h1/v1/lb" | |||||
| do_lavfi "pp3" "pp=be/fq:8/ha:128:7/va/li" | |||||
| do_lavfi "pp2" "pp=be/fq|16/h1/v1/lb" | |||||
| do_lavfi "pp3" "pp=be/fq|8/ha|128|7/va/li" | |||||
| do_lavfi "pp4" "pp=be/ci" | do_lavfi "pp4" "pp=be/ci" | ||||
| do_lavfi "pp5" "pp=md" | do_lavfi "pp5" "pp=md" | ||||
| do_lavfi "pp6" "pp=be/fd" | do_lavfi "pp6" "pp=be/fd" | ||||