[FFmpeg-cvslog] avfilter/vf_libplacebo: add `reset_sar` option
Niklas Haas
git at videolan.org
Fri Jun 20 16:13:50 EEST 2025
ffmpeg | branch: master | Niklas Haas <git at haasn.dev> | Mon Jun 16 20:01:48 2025 +0200| [7039a37e358ec93bd589f2ac25f3aad13c5cce7e] | committer: Niklas Haas
avfilter/vf_libplacebo: add `reset_sar` option
This was requested by users of `vf_libplacebo`, to mirror the existing
option on the other `vf_scale_*` family of filters. While we have
`vf_normalize`, it was not as useful in the event that the content
stretching was actually desired.
Bridges an important usability gap between `vf_scale` and `vf_libplacebo`
that made mixing and matching the filters needlessly difficult.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=7039a37e358ec93bd589f2ac25f3aad13c5cce7e
---
doc/filters.texi | 12 ++++++++----
libavfilter/vf_libplacebo.c | 5 +++--
2 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/doc/filters.texi b/doc/filters.texi
index f32fc23c70..21dab1045a 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -16291,11 +16291,15 @@ will be performed.
@item force_divisible_by
Work the same as the identical @ref{scale} filter options.
+ at item reset_sar
+If enabled, output frames will always have a pixel aspect ratio of 1:1. If
+disabled (the default), any aspect ratio mismatches, including those from
+e.g. anamorphic video sources, are forwarded to the output pixel aspect ratio.
+
@item normalize_sar
-If enabled, output frames will always have a pixel aspect ratio of 1:1. This
-will introduce additional padding/cropping as necessary. If disabled (the
-default), any aspect ratio mismatches, including those from e.g. anamorphic
-video sources, are forwarded to the output pixel aspect ratio.
+Like @option{reset_sar}, but instead of stretching the video content to fill
+the new output aspect ratio, the content is instead padded or cropped as
+necessary.
@item pad_crop_ratio
Specifies a ratio (between @code{0.0} and @code{1.0}) between padding and
diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c
index 52731caa6c..475030c80d 100644
--- a/libavfilter/vf_libplacebo.c
+++ b/libavfilter/vf_libplacebo.c
@@ -1298,7 +1298,7 @@ static int libplacebo_config_output(AVFilterLink *outlink)
RET(ff_scale_eval_dimensions(s, s->w_expr, s->h_expr, inlink, outlink,
&outlink->w, &outlink->h));
- s->reset_sar = s->normalize_sar || s->nb_inputs > 1;
+ s->reset_sar |= s->normalize_sar || s->nb_inputs > 1;
double sar_in = inlink->sample_aspect_ratio.num ?
av_q2d(inlink->sample_aspect_ratio) : 1.0;
@@ -1401,7 +1401,8 @@ static const AVOption libplacebo_options[] = {
{ "decrease", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = 1 }, 0, 0, STATIC, .unit = "force_oar" },
{ "increase", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = 2 }, 0, 0, STATIC, .unit = "force_oar" },
{ "force_divisible_by", "enforce that the output resolution is divisible by a defined integer when force_original_aspect_ratio is used", OFFSET(force_divisible_by), AV_OPT_TYPE_INT, { .i64 = 1 }, 1, 256, STATIC },
- { "normalize_sar", "force SAR normalization to 1:1 by adjusting pos_x/y/w/h", OFFSET(normalize_sar), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, STATIC },
+ { "reset_sar", "force SAR normalization to 1:1 by adjusting pos_x/y/w/h", OFFSET(reset_sar), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, STATIC },
+ { "normalize_sar", "like reset_sar, but pad/crop instead of stretching the video", OFFSET(normalize_sar), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, STATIC },
{ "pad_crop_ratio", "ratio between padding and cropping when normalizing SAR (0=pad, 1=crop)", OFFSET(pad_crop_ratio), AV_OPT_TYPE_FLOAT, {.dbl=0.0}, 0.0, 1.0, DYNAMIC },
{ "fillcolor", "Background fill color", OFFSET(fillcolor), AV_OPT_TYPE_COLOR, {.str = "black at 0"}, .flags = DYNAMIC },
{ "corner_rounding", "Corner rounding radius", OFFSET(corner_rounding), AV_OPT_TYPE_FLOAT, {.dbl = 0.0}, 0.0, 1.0, .flags = DYNAMIC },
More information about the ffmpeg-cvslog
mailing list