lavfi/aspect: switch to an AVOptions-based system.
This is heavily based on 2831b307
by Anton Khirnov <anton@khirnov.net>
This commit is contained in:
parent
647fe2e777
commit
71ef1ec7b4
@ -5030,18 +5030,10 @@ Keep in mind that the sample aspect ratio set by the @code{setsar}
|
||||
filter may be changed by later filters in the filterchain, e.g. if
|
||||
another "setsar" or a "setdar" filter is applied.
|
||||
|
||||
The @code{setdar} and @code{setsar} filters accept a string in the
|
||||
form @var{num}:@var{den} expressing an aspect ratio, or the following
|
||||
named options, expressed as a sequence of @var{key}=@var{value} pairs,
|
||||
separated by ":".
|
||||
The filters accept the following options:
|
||||
|
||||
@table @option
|
||||
@item max
|
||||
Set the maximum integer value to use for expressing numerator and
|
||||
denominator when reducing the expressed aspect ratio to a rational.
|
||||
Default value is @code{100}.
|
||||
|
||||
@item r, ratio, dar, sar:
|
||||
@item r, ratio, dar (@code{setdar} only), sar (@code{setsar} only)
|
||||
Set the aspect ratio used by the filter.
|
||||
|
||||
The parameter can be a floating point number string, an expression, or
|
||||
@ -5050,33 +5042,41 @@ a string of the form @var{num}:@var{den}, where @var{num} and
|
||||
the parameter is not specified, it is assumed the value "0".
|
||||
In case the form "@var{num}:@var{den}" the @code{:} character should
|
||||
be escaped.
|
||||
|
||||
@item max
|
||||
Set the maximum integer value to use for expressing numerator and
|
||||
denominator when reducing the expressed aspect ratio to a rational.
|
||||
Default value is @code{100}.
|
||||
|
||||
@end table
|
||||
|
||||
If the keys are omitted in the named options list, the specifed values
|
||||
are assumed to be @var{ratio} and @var{max} in that order.
|
||||
@subsection Examples
|
||||
|
||||
For example to change the display aspect ratio to 16:9, specify:
|
||||
@itemize
|
||||
|
||||
@item
|
||||
To change the display aspect ratio to 16:9, specify one of the following:
|
||||
@example
|
||||
setdar='16:9'
|
||||
# the above is equivalent to
|
||||
setdar=1.77777
|
||||
setdar=dar=1.77777
|
||||
setdar=dar=16/9
|
||||
setdar=dar=1.77777
|
||||
@end example
|
||||
|
||||
@item
|
||||
To change the sample aspect ratio to 10:11, specify:
|
||||
@example
|
||||
setsar='10:11'
|
||||
# the above is equivalent to
|
||||
setsar='sar=10/11'
|
||||
setsar=sar=10/11
|
||||
@end example
|
||||
|
||||
@item
|
||||
To set a display aspect ratio of 16:9, and specify a maximum integer value of
|
||||
1000 in the aspect ratio reduction, use the command:
|
||||
@example
|
||||
setdar=ratio='16:9':max=1000
|
||||
setdar=ratio=16/9:max=1000
|
||||
@end example
|
||||
|
||||
@end itemize
|
||||
|
||||
@anchor{setfield}
|
||||
@section setfield
|
||||
|
||||
|
@ -681,8 +681,6 @@ static const char *const filters_left_to_update[] = {
|
||||
"mp",
|
||||
"pan",
|
||||
"scale",
|
||||
"setdar",
|
||||
"setsar",
|
||||
};
|
||||
|
||||
static int filter_use_deprecated_init(const char *name)
|
||||
|
@ -38,7 +38,6 @@
|
||||
typedef struct {
|
||||
const AVClass *class;
|
||||
AVRational aspect;
|
||||
char *ratio_str;
|
||||
int max;
|
||||
#if FF_API_OLD_FILTER_OPTS
|
||||
float aspect_num, aspect_den;
|
||||
@ -49,26 +48,11 @@ typedef struct {
|
||||
static av_cold int init(AVFilterContext *ctx, const char *args)
|
||||
{
|
||||
AspectContext *s = ctx->priv;
|
||||
static const char *shorthand[] = { "ratio", "max", NULL };
|
||||
char c;
|
||||
int ret;
|
||||
AVRational q;
|
||||
|
||||
if (args && sscanf(args, "%d:%d%c", &q.num, &q.den, &c) == 2) {
|
||||
s->ratio_str = av_strdup(args);
|
||||
if (s->aspect_num > 0 && s->aspect_den > 0) {
|
||||
av_log(ctx, AV_LOG_WARNING,
|
||||
"num:den syntax is deprecated, please use num/den or named options instead\n");
|
||||
} else if ((ret = av_opt_set_from_string(s, args, shorthand, "=", ":")) < 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (s->ratio_str) {
|
||||
ret = av_parse_ratio(&s->aspect, s->ratio_str, s->max, 0, ctx);
|
||||
if (ret < 0 || s->aspect.num < 0 || s->aspect.den <= 0) {
|
||||
av_log(ctx, AV_LOG_ERROR,
|
||||
"Invalid string '%s' for aspect ratio\n", args);
|
||||
return AVERROR(EINVAL);
|
||||
}
|
||||
s->aspect = av_d2q(s->aspect_num / s->aspect_den, INT_MAX);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -111,11 +95,15 @@ static int setdar_config_props(AVFilterLink *inlink)
|
||||
}
|
||||
|
||||
static const AVOption setdar_options[] = {
|
||||
{"max", "set max value for nominator or denominator in the ratio", OFFSET(max), AV_OPT_TYPE_INT, {.i64=100}, 1, INT_MAX, FLAGS },
|
||||
{"ratio", "display aspect ratio", OFFSET(ratio_str), AV_OPT_TYPE_STRING, {.str="0"}, 0, 0, FLAGS },
|
||||
{"r", "display aspect ratio", OFFSET(ratio_str), AV_OPT_TYPE_STRING, {.str="0"}, 0, 0, FLAGS },
|
||||
{"dar", "display aspect ratio", OFFSET(ratio_str), AV_OPT_TYPE_STRING, {.str="0"}, 0, 0, FLAGS },
|
||||
{NULL}
|
||||
#if FF_API_OLD_FILTER_OPTS
|
||||
{ "dar_num", NULL, OFFSET(aspect_num), AV_OPT_TYPE_FLOAT, { .dbl = 0 }, 0, FLT_MAX, FLAGS },
|
||||
{ "dar_den", NULL, OFFSET(aspect_den), AV_OPT_TYPE_FLOAT, { .dbl = 0 }, 0, FLT_MAX, FLAGS },
|
||||
#endif
|
||||
{ "dar", "set display aspect ratio", OFFSET(aspect), AV_OPT_TYPE_RATIONAL, {.dbl=0}, 0, INT_MAX, FLAGS },
|
||||
{ "ratio", "set display aspect ratio", OFFSET(aspect), AV_OPT_TYPE_RATIONAL, {.dbl=0}, 0, INT_MAX, FLAGS },
|
||||
{ "r", "set display aspect ratio", OFFSET(aspect), AV_OPT_TYPE_RATIONAL, {.dbl=0}, 0, INT_MAX, FLAGS },
|
||||
{ "max", "set max value for nominator or denominator in the ratio", OFFSET(max), AV_OPT_TYPE_INT, {.i64=100}, 1, INT_MAX, FLAGS },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
AVFILTER_DEFINE_CLASS(setdar);
|
||||
@ -170,11 +158,15 @@ static int setsar_config_props(AVFilterLink *inlink)
|
||||
}
|
||||
|
||||
static const AVOption setsar_options[] = {
|
||||
{"max", "set max value for nominator or denominator in the ratio", OFFSET(max), AV_OPT_TYPE_INT, {.i64=100}, 1, INT_MAX, FLAGS },
|
||||
{"ratio", "sample (pixel) aspect ratio", OFFSET(ratio_str), AV_OPT_TYPE_STRING, {.str="0"}, 0, 0, FLAGS },
|
||||
{"r", "sample (pixel) aspect ratio", OFFSET(ratio_str), AV_OPT_TYPE_STRING, {.str="0"}, 0, 0, FLAGS },
|
||||
{"sar", "sample (pixel) aspect ratio", OFFSET(ratio_str), AV_OPT_TYPE_STRING, {.str="0"}, 0, 0, FLAGS },
|
||||
{NULL}
|
||||
#if FF_API_OLD_FILTER_OPTS
|
||||
{ "sar_num", NULL, OFFSET(aspect_num), AV_OPT_TYPE_FLOAT, { .dbl = 0 }, 0, FLT_MAX, FLAGS },
|
||||
{ "sar_den", NULL, OFFSET(aspect_den), AV_OPT_TYPE_FLOAT, { .dbl = 0 }, 0, FLT_MAX, FLAGS },
|
||||
#endif
|
||||
{ "sar", "set sample (pixel) aspect ratio", OFFSET(aspect), AV_OPT_TYPE_RATIONAL, {.dbl=0}, 0, INT_MAX, FLAGS },
|
||||
{ "ratio", "set sample (pixel) aspect ratio", OFFSET(aspect), AV_OPT_TYPE_RATIONAL, {.dbl=0}, 0, INT_MAX, FLAGS },
|
||||
{ "r", "set sample (pixel) aspect ratio", OFFSET(aspect), AV_OPT_TYPE_RATIONAL, {.dbl=0}, 0, INT_MAX, FLAGS },
|
||||
{ "max", "set max value for nominator or denominator in the ratio", OFFSET(max), AV_OPT_TYPE_INT, {.i64=100}, 1, INT_MAX, FLAGS },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
AVFILTER_DEFINE_CLASS(setsar);
|
||||
|
@ -60,8 +60,8 @@ do_lavfi "pp6" "pp=be/fd"
|
||||
do_lavfi "scale200" "scale=200:200"
|
||||
do_lavfi "scale500" "scale=500:500"
|
||||
do_lavfi "select" "select=not(eq(mod(n\,2)\,0)+eq(mod(n\,3)\,0))"
|
||||
do_lavfi "setdar" "setdar=16/9"
|
||||
do_lavfi "setsar" "setsar=16/11"
|
||||
do_lavfi "setdar" "setdar=dar=16/9"
|
||||
do_lavfi "setsar" "setsar=sar=16/11"
|
||||
do_lavfi "thumbnail" "thumbnail=10"
|
||||
do_lavfi "tile" "tile=3x3:nb_frames=5:padding=7:margin=2"
|
||||
do_lavfi "transpose" "transpose"
|
||||
|
Loading…
Reference in New Issue
Block a user