From: "Martin Storsjö" <martin@martin.st> To: ffmpeg-devel@ffmpeg.org Subject: [FFmpeg-devel] [PATCH] libavfilter: vf_scale: Properly take in->color_range into account Date: Thu, 3 Mar 2022 14:06:45 +0200 Message-ID: <20220303120645.13076-1-martin@martin.st> (raw) While swscale can be reconfigured with sws_setColorspaceDetails, the in/out ranges also need to be set before calling sws_init_context, otherwise the initialization might choose fastpaths that don't take the ranges into account. Therefore, look at in->color_range too, when deciding on whether the scaler needs to be reconfigured. Add a new member variable for keeping track of this, for being able to differentiate between whether the scale filter parameter "in_range" has been set (which should override whatever the input frame has set) or whether it has been configured based on the latest frame (which should trigger reconfiguring the scaler if the input frame ranges change). Signed-off-by: Martin Storsjö <martin@martin.st> --- To test this (without risking running many conflicting swscale filters in one filter pipeline), we'd need to be able to tag the incoming raw yuv data with colorspace and range without setting the in_color_matrix and in_range options on the scale filter. When using the rawvideo demuxer, the pixel format is set via the ffmpeg -pix_fmt option, but there's no corresponding option for setting color matrix or range for it. --- libavfilter/vf_scale.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c index 44f85cb019..996f7aaa5b 100644 --- a/libavfilter/vf_scale.c +++ b/libavfilter/vf_scale.c @@ -138,6 +138,7 @@ typedef struct ScaleContext { char *out_color_matrix; int in_range; + int in_frame_range; int out_range; int out_h_chr_pos; @@ -322,6 +323,8 @@ static av_cold int init_dict(AVFilterContext *ctx, AVDictionary **opts) scale->opts = *opts; *opts = NULL; + scale->in_frame_range = AVCOL_RANGE_UNSPECIFIED; + return 0; } @@ -544,6 +547,9 @@ static int config_props(AVFilterLink *outlink) if (scale->in_range != AVCOL_RANGE_UNSPECIFIED) av_opt_set_int(s, "src_range", scale->in_range == AVCOL_RANGE_JPEG, 0); + else if (scale->in_frame_range != AVCOL_RANGE_UNSPECIFIED) + av_opt_set_int(s, "src_range", + scale->in_frame_range == AVCOL_RANGE_JPEG, 0); if (scale->out_range != AVCOL_RANGE_UNSPECIFIED) av_opt_set_int(s, "dst_range", scale->out_range == AVCOL_RANGE_JPEG, 0); @@ -690,6 +696,13 @@ static int scale_frame(AVFilterLink *link, AVFrame *in, AVFrame **frame_out) in->sample_aspect_ratio.den != link->sample_aspect_ratio.den || in->sample_aspect_ratio.num != link->sample_aspect_ratio.num; + if (in->color_range != AVCOL_RANGE_UNSPECIFIED && + scale->in_range == AVCOL_RANGE_UNSPECIFIED && + in->color_range != scale->in_frame_range) { + scale->in_frame_range = in->color_range; + frame_changed = 1; + } + if (scale->eval_mode == EVAL_MODE_FRAME || frame_changed) { unsigned vars_w[VARS_NB] = { 0 }, vars_h[VARS_NB] = { 0 }; -- 2.32.0 (Apple Git-132) _______________________________________________ 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:[~2022-03-03 12:06 UTC|newest] Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-03-03 12:06 Martin Storsjö [this message] 2022-03-03 12:08 ` Diederick C. Niehorster 2022-03-04 20:09 ` Michael Niedermayer 2022-03-05 21:33 ` Martin Storsjö 2022-03-05 23:08 ` Michael Niedermayer 2022-03-06 22:47 ` Martin Storsjö
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=20220303120645.13076-1-martin@martin.st \ --to=martin@martin.st \ --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