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:
commit
270d3c96ec
@ -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}.
|
||||||
|
@ -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 "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"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user