From: Niklas Haas <ffmpeg@haasn.xyz> To: ffmpeg-devel@ffmpeg.org Cc: Damiano Galassi <damiog@gmail.com> Subject: Re: [FFmpeg-devel] [PATCH v2] avfilter: propagate colorspace and color_range from buffer filter and between AVFilterLink. Date: Sun, 24 Mar 2024 13:23:28 +0100 Message-ID: <20240324132328.GC37148@haasn.xyz> (raw) In-Reply-To: <20240324092635.17850-1-damiog@gmail.com> On Sun, 24 Mar 2024 10:26:35 +0100 Damiano Galassi <damiog@gmail.com> wrote: > There two new fields were never sent down the filter chain, > and no filter after the first had colorspace and color_range set, > causing breakage in zscale and possible other filters. > --- > libavfilter/avfilter.c | 4 ++++ > libavfilter/buffersrc.c | 2 ++ > 2 files changed, 6 insertions(+) > > diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c > index 831871de90..66733f5ecf 100644 > --- a/libavfilter/avfilter.c > +++ b/libavfilter/avfilter.c > @@ -391,6 +391,10 @@ int ff_filter_config_links(AVFilterContext *filter) > link->w = inlink->w; > if (!link->h) > link->h = inlink->h; > + if (link->colorspace == AVCOL_SPC_UNSPECIFIED) > + link->colorspace = inlink->colorspace; > + if (link->color_range == AVCOL_RANGE_UNSPECIFIED) > + link->color_range = inlink->color_range; > } else if (!link->w || !link->h) { > av_log(link->src, AV_LOG_ERROR, > "Video source filters must set their output link's " > diff --git a/libavfilter/buffersrc.c b/libavfilter/buffersrc.c > index ddcd403785..2760097edf 100644 > --- a/libavfilter/buffersrc.c > +++ b/libavfilter/buffersrc.c > @@ -499,6 +499,8 @@ static int config_props(AVFilterLink *link) > link->w = c->w; > link->h = c->h; > link->sample_aspect_ratio = c->pixel_aspect; > + link->colorspace = c->color_space; > + link->color_range = c->color_range; > > if (c->hw_frames_ctx) { > link->hw_frames_ctx = av_buffer_ref(c->hw_frames_ctx); This still breaks FATE. I think the problem is that AVCOL_SPC_UNSPECIFIED is a valid, configurable possibility for this field. So we need to set it to -1 initially to distinguish "not set" from "unspecified". This diff resolves the FATE breakage: diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c index 153fb700d30..2f22c9143df 100644 --- a/libavfilter/avfilter.c +++ b/libavfilter/avfilter.c @@ -186,7 +186,8 @@ int avfilter_link(AVFilterContext *src, unsigned srcpad, link->type = src->output_pads[srcpad].type; av_assert0(AV_PIX_FMT_NONE == -1 && AV_SAMPLE_FMT_NONE == -1); link->format = -1; - link->colorspace = AVCOL_SPC_UNSPECIFIED; + link->colorspace = AVCOL_SPC_NONE; + link->color_range = AVCOL_RANGE_NONE; ff_framequeue_init(&li->fifo, &fffiltergraph(src->graph)->frame_queues); return 0; @@ -391,9 +392,9 @@ int ff_filter_config_links(AVFilterContext *filter) link->w = inlink->w; if (!link->h) link->h = inlink->h; - if (link->colorspace == AVCOL_SPC_UNSPECIFIED) + if (link->colorspace < 0) link->colorspace = inlink->color_range; - if (link->color_range == AVCOL_RANGE_UNSPECIFIED) + if (link->color_range < 0) link->color_range = inlink->color_range; } else if (!link->w || !link->h) { av_log(link->src, AV_LOG_ERROR, diff --git a/libavutil/pixfmt.h b/libavutil/pixfmt.h index 4aa20e4e585..605881a43de 100644 --- a/libavutil/pixfmt.h +++ b/libavutil/pixfmt.h @@ -607,6 +607,7 @@ enum AVColorTransferCharacteristic { * These values match the ones defined by ISO/IEC 23091-2_2019 subclause 8.3. */ enum AVColorSpace { + AVCOL_SPC_NONE = -1, ///< invalid (reserved for internal use) AVCOL_SPC_RGB = 0, ///< order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB), YZX and ST 428-1 AVCOL_SPC_BT709 = 1, ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / derived in SMPTE RP 177 Annex B AVCOL_SPC_UNSPECIFIED = 2, @@ -646,6 +647,7 @@ enum AVColorSpace { * bit unsigned integer range, please refer to BT.2100 (Table 9). */ enum AVColorRange { + AVCOL_RANGE_NONE = -1, ///< invalid (reserved for internal use) AVCOL_RANGE_UNSPECIFIED = 0, /** diff --git a/tests/ref/fate/rgb24-mkv b/tests/ref/fate/rgb24-mkv index 1cbed136dde..99234f10523 100644 --- a/tests/ref/fate/rgb24-mkv +++ b/tests/ref/fate/rgb24-mkv @@ -1,5 +1,5 @@ -7d767e8238c674ecfa80458cb281c09e *tests/data/fate/rgb24-mkv.matroska -58236 tests/data/fate/rgb24-mkv.matroska +e181dc84058c3584598333dabd110123 *tests/data/fate/rgb24-mkv.matroska +58225 tests/data/fate/rgb24-mkv.matroska #tb 0: 1/10 #media_type 0: video #codec_id 0: rawvideo _______________________________________________ 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 prev parent reply other threads:[~2024-03-24 12:23 UTC|newest] Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top 2024-03-24 9:26 Damiano Galassi 2024-03-24 12:23 ` Niklas Haas [this message] 2024-03-24 12:25 ` Niklas Haas 2024-03-24 12:49 ` Damiano Galassi 2024-03-24 13:14 ` Niklas Haas 2024-03-24 13:47 ` Damiano Galassi 2024-03-24 17:53 ` Niklas Haas 2024-03-24 19:03 ` Damiano Galassi 2024-03-25 13:25 ` Niklas Haas 2024-03-25 13:40 ` Niklas Haas 2024-03-25 14:36 ` Damiano Galassi 2024-03-25 15:02 ` Niklas Haas 2024-03-25 15:07 ` Niklas Haas
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=20240324132328.GC37148@haasn.xyz \ --to=ffmpeg@haasn.xyz \ --cc=damiog@gmail.com \ --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