Merge remote-tracking branch 'ubitux/shorthand-cleanup'

* 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>
This commit is contained in:
Michael Niedermayer 2013-04-10 23:28:51 +02:00
commit 270d3c96ec
16 changed files with 83 additions and 135 deletions

View File

@ -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} The filter accepts the following options:
pairs, separated by ":". If the key of the first options is omitted,
the arguments are interpreted according to the syntax
@var{src}:@var{dst}.
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} The filter accepts the following options:
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.
@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 filter accepts the following options:
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:
@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 The filter accepts the following options:
sequence of @var{key}=@var{value} pairs, separated by ":".
@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} The filter accepts the following options:
pairs, separated by ":". If the key of the first options is omitted,
the arguments are interpreted according to the syntax
thumbnail[=@var{n}].
@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, The filters accept the following options:
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.
@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}.

View File

@ -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,

View File

@ -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),

View File

@ -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

View File

@ -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)

View File

@ -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 */

View File

@ -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,
}; };

View File

@ -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,
}; };

View File

@ -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;

View File

@ -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,
}; };

View File

@ -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,
}; };

View File

@ -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

View File

@ -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,
}; };

View File

@ -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;

View File

@ -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, \

View File

@ -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 "pp2" "pp=be/fq|16/h1/v1/lb"
do_lavfi "pp3" "pp=be/fq:8/ha:128:7/va/li" 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"