Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [PATCH] avfilter/vf_amf_common: implement reset_sar options
@ 2025-02-10 13:34 Timo Rothenpieler
  2025-02-10 13:44 ` Gyan Doshi
  0 siblings, 1 reply; 3+ messages in thread
From: Timo Rothenpieler @ 2025-02-10 13:34 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Timo Rothenpieler

Implements the new reset_sar option from a28dc06869fe1f98c07e42f9b0a411d2744ff7d7.

While at it, this also moves assigning the output sar on the outlink
from the filter frame function to config props.
---
 libavfilter/vf_amf_common.c | 18 ++++++++++++------
 libavfilter/vf_amf_common.h |  1 +
 libavfilter/vf_vpp_amf.c    |  5 +++--
 3 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/libavfilter/vf_amf_common.c b/libavfilter/vf_amf_common.c
index fbf364eac1..75339c9f01 100644
--- a/libavfilter/vf_amf_common.c
+++ b/libavfilter/vf_amf_common.c
@@ -158,11 +158,6 @@ int amf_filter_filter_frame(AVFilterLink *inlink, AVFrame *in)
         goto fail;
     }
 
-    if (inlink->sample_aspect_ratio.num) {
-        outlink->sample_aspect_ratio = av_mul_q((AVRational){outlink->h * inlink->w, outlink->w * inlink->h}, inlink->sample_aspect_ratio);
-    } else
-        outlink->sample_aspect_ratio = inlink->sample_aspect_ratio;
-
     av_frame_free(&in);
     return ff_filter_frame(outlink, out);
 fail:
@@ -274,6 +269,7 @@ int amf_init_filter_config(AVFilterLink *outlink, enum AVPixelFormat *in_format)
     enum AVPixelFormat out_sw_format = ctx->format;
     FilterLink        *inl = ff_filter_link(inlink);
     FilterLink        *outl = ff_filter_link(outlink);
+    double w_adj = 1.0;
 
     if ((err = ff_scale_eval_dimensions(avctx,
                                         ctx->w_expr, ctx->h_expr,
@@ -281,8 +277,11 @@ int amf_init_filter_config(AVFilterLink *outlink, enum AVPixelFormat *in_format)
                                         &ctx->width, &ctx->height)) < 0)
         return err;
 
+    if (ctx->reset_sar && inlink->sample_aspect_ratio.num)
+        w_adj = (double)inlink->sample_aspect_ratio.num / inlink->sample_aspect_ratio.den;
+
     ff_scale_adjust_dimensions(inlink, &ctx->width, &ctx->height,
-                               ctx->force_original_aspect_ratio, ctx->force_divisible_by, 1.0);
+                               ctx->force_original_aspect_ratio, ctx->force_divisible_by, w_adj);
 
     av_buffer_unref(&ctx->amf_device_ref);
     av_buffer_unref(&ctx->hwframes_in_ref);
@@ -343,6 +342,13 @@ int amf_init_filter_config(AVFilterLink *outlink, enum AVPixelFormat *in_format)
     outlink->w = ctx->width;
     outlink->h = ctx->height;
 
+    if (ctx->reset_sar)
+        outlink->sample_aspect_ratio = (AVRational){1, 1};
+    else if (inlink->sample_aspect_ratio.num)
+        outlink->sample_aspect_ratio = av_mul_q((AVRational){outlink->h * inlink->w, outlink->w * inlink->h}, inlink->sample_aspect_ratio);
+    else
+        outlink->sample_aspect_ratio = inlink->sample_aspect_ratio;
+
     hwframes_out->width = outlink->w;
     hwframes_out->height = outlink->h;
 
diff --git a/libavfilter/vf_amf_common.h b/libavfilter/vf_amf_common.h
index c4b5ba659a..d0a0214978 100644
--- a/libavfilter/vf_amf_common.h
+++ b/libavfilter/vf_amf_common.h
@@ -48,6 +48,7 @@ typedef struct AMFFilterContext {
     char *format_str;
     int force_original_aspect_ratio;
     int force_divisible_by;
+    int reset_sar;
 
     AMFComponent        *component;
     AVBufferRef         *amf_device_ref;
diff --git a/libavfilter/vf_vpp_amf.c b/libavfilter/vf_vpp_amf.c
index 87bd68074f..2d9df50632 100644
--- a/libavfilter/vf_vpp_amf.c
+++ b/libavfilter/vf_vpp_amf.c
@@ -216,11 +216,12 @@ static const AVOption vpp_amf_options[] = {
     { "smpte428",       "SMPTE428",                 0,  AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_SMPTE428 }, 0, 0, FLAGS, "trc" },
     { "arib-std-b67",   "ARIB_STD_B67",             0,  AV_OPT_TYPE_CONST, { .i64 = AMF_COLOR_TRANSFER_CHARACTERISTIC_ARIB_STD_B67 }, 0, 0, FLAGS, "trc" },
 
-    { "force_original_aspect_ratio", "decrease or increase w/h if necessary to keep the original AR", OFFSET(force_original_aspect_ratio), AV_OPT_TYPE_INT, { .i64 = 0}, 0, 2, FLAGS, "force_oar" },
+    { "force_original_aspect_ratio", "decrease or increase w/h if necessary to keep the original AR", OFFSET(force_original_aspect_ratio), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 2, FLAGS, "force_oar" },
     { "disable",  NULL, 0, AV_OPT_TYPE_CONST, {.i64 = 0 }, 0, 0, FLAGS, "force_oar" },
     { "decrease", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = 1 }, 0, 0, FLAGS, "force_oar" },
     { "increase", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = 2 }, 0, 0, FLAGS, "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, FLAGS },
+    { "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, FLAGS },
+    { "reset_sar", "reset SAR to 1 and scale to square pixels if scaling proportionally", OFFSET(reset_sar), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, FLAGS },
 
     { NULL },
 };
-- 
2.43.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".

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [FFmpeg-devel] [PATCH] avfilter/vf_amf_common: implement reset_sar options
  2025-02-10 13:34 [FFmpeg-devel] [PATCH] avfilter/vf_amf_common: implement reset_sar options Timo Rothenpieler
@ 2025-02-10 13:44 ` Gyan Doshi
  2025-02-10 13:47   ` Timo Rothenpieler
  0 siblings, 1 reply; 3+ messages in thread
From: Gyan Doshi @ 2025-02-10 13:44 UTC (permalink / raw)
  To: ffmpeg-devel



On 2025-02-10 07:04 pm, Timo Rothenpieler wrote:
> Implements the new reset_sar option from a28dc06869fe1f98c07e42f9b0a411d2744ff7d7.

Already posted a patch. Will push soon.

Regards,
Gyan

_______________________________________________
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".

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [FFmpeg-devel] [PATCH] avfilter/vf_amf_common: implement reset_sar options
  2025-02-10 13:44 ` Gyan Doshi
@ 2025-02-10 13:47   ` Timo Rothenpieler
  0 siblings, 0 replies; 3+ messages in thread
From: Timo Rothenpieler @ 2025-02-10 13:47 UTC (permalink / raw)
  To: ffmpeg-devel

On 10/02/2025 14:44, Gyan Doshi wrote:
> 
> 
> On 2025-02-10 07:04 pm, Timo Rothenpieler wrote:
>> Implements the new reset_sar option from 
>> a28dc06869fe1f98c07e42f9b0a411d2744ff7d7.
> 
> Already posted a patch. Will push soon.

Ah, you might wanna look into moving the sar assignment as well then, 
cause assigning it on the outlink on every frame, but not in config 
props, seems wrong.
_______________________________________________
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".

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2025-02-10 13:47 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-02-10 13:34 [FFmpeg-devel] [PATCH] avfilter/vf_amf_common: implement reset_sar options Timo Rothenpieler
2025-02-10 13:44 ` Gyan Doshi
2025-02-10 13:47   ` Timo Rothenpieler

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