From: Niklas Haas <ffmpeg@haasn.xyz> To: ffmpeg-devel@ffmpeg.org Cc: Niklas Haas <git@haasn.dev> Subject: [FFmpeg-devel] [PATCH 3/3] avfilter/vf_libplaceb: add `reset_sar` option Date: Mon, 16 Jun 2025 20:05:30 +0200 Message-ID: <20250616180530.140914-3-ffmpeg@haasn.xyz> (raw) In-Reply-To: <20250616180530.140914-1-ffmpeg@haasn.xyz> From: Niklas Haas <git@haasn.dev> 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. --- 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 63f55f5794..65788d872e 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. +@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 4775673127..2cf3ab712d 100644 --- a/libavfilter/vf_libplacebo.c +++ b/libavfilter/vf_libplacebo.c @@ -1280,7 +1280,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; @@ -1383,7 +1383,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@0"}, .flags = DYNAMIC }, { "corner_rounding", "Corner rounding radius", OFFSET(corner_rounding), AV_OPT_TYPE_FLOAT, {.dbl = 0.0}, 0.0, 1.0, .flags = DYNAMIC }, -- 2.49.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
prev parent reply other threads:[~2025-06-16 18:06 UTC|newest] Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top 2025-06-16 18:05 [FFmpeg-devel] [PATCH 1/3] avfilter/vf_libplacebo: list AV_PIX_FMT_VULKAN first Niklas Haas 2025-06-16 18:05 ` [FFmpeg-devel] [PATCH 2/3] avfilter/vf_libplacebo: correctly update SAR to reflect scaled result Niklas Haas 2025-06-16 18:05 ` Niklas Haas [this message]
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20250616180530.140914-3-ffmpeg@haasn.xyz \ --to=ffmpeg@haasn.xyz \ --cc=ffmpeg-devel@ffmpeg.org \ --cc=git@haasn.dev \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git