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
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
typedef struct {
const AVClass *class;
AVRational aspect;
- char *ratio_str;
int max;
#if FF_API_OLD_FILTER_OPTS
float aspect_num, aspect_den;
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;
}
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);
}
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);