From: Timo Rothenpieler <timo@rothenpieler.org> To: ffmpeg-devel@ffmpeg.org Cc: Timo Rothenpieler <timo@rothenpieler.org> Subject: [FFmpeg-devel] [PATCH] avfilter/vf_amf_common: implement reset_sar options Date: Mon, 10 Feb 2025 14:34:38 +0100 Message-ID: <20250210133459.1205-1-timo@rothenpieler.org> (raw) 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".
next reply other threads:[~2025-02-10 13:34 UTC|newest] Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top 2025-02-10 13:34 Timo Rothenpieler [this message] 2025-02-10 13:44 ` Gyan Doshi 2025-02-10 13:47 ` Timo Rothenpieler
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=20250210133459.1205-1-timo@rothenpieler.org \ --to=timo@rothenpieler.org \ --cc=ffmpeg-devel@ffmpeg.org \ /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