Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
 help / color / mirror / Atom feed
* [FFmpeg-devel] [RFC PATCH 00/25] YUVJ removal + filter negotiation
@ 2023-11-09 12:19 Niklas Haas
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 01/25] avfilter/formats: document ff_default_query_formats Niklas Haas
                   ` (24 more replies)
  0 siblings, 25 replies; 37+ messages in thread
From: Niklas Haas @ 2023-11-09 12:19 UTC (permalink / raw)
  To: ffmpeg-devel

Following up on the previous attempts at YUVJ removal, this series
implements full filter negotiation. It is WIP because I still need to go
through the remaining AVCodec (which are not covered by FATE) and
properly tag their colorspace and color range support. (See patch 19/25)

The rest should be good, though, so please feel free to review them with
scrutiny.

I decided to combine YUV range negotiation with YUV colorspace
negotiation. Several important points:

1. We now explicitly ignore YUV metadata for non-YUV (RGB/XYZ/PAL)
   formats, as these have no hope of being useful. In particular, we
   force the colorspace to AVCOL_SPC_RGB, mostly for sanity/consistency.

2. We currently continue treating GRAY formats as forced full range,
   which is the swscale status quo. I have a separate series that adds
   full range negotiation to grayscale formats, but it is out of scope
   of this already ominous series.

It was a delicate balancing act to get the new filter negotiation API
integrated into all core filters (in particular vf_scale and
vf_buffersrc) while maintaining forward and backward compatibility and
not breaking FATE, but I managed to find an order that works, by first
adding support to vf_buffersrc to make sure accurate metadata is
available downstream _before_ we insert any conversion filters.


_______________________________________________
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] 37+ messages in thread

* [FFmpeg-devel] [PATCH 01/25] avfilter/formats: document ff_default_query_formats
  2023-11-09 12:19 [FFmpeg-devel] [RFC PATCH 00/25] YUVJ removal + filter negotiation Niklas Haas
@ 2023-11-09 12:19 ` Niklas Haas
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 02/25] avfilter: always call ff_default_query_formats Niklas Haas
                   ` (23 subsequent siblings)
  24 siblings, 0 replies; 37+ messages in thread
From: Niklas Haas @ 2023-11-09 12:19 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Niklas Haas

From: Niklas Haas <git@haasn.dev>

In particular, make it clear that this function will not touch format
lists which were already set by the caller before calling into this
function.
---
 libavfilter/formats.h | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/libavfilter/formats.h b/libavfilter/formats.h
index 22224dce2d..d44890109e 100644
--- a/libavfilter/formats.h
+++ b/libavfilter/formats.h
@@ -198,6 +198,10 @@ void ff_channel_layouts_unref(AVFilterChannelLayouts **ref);
 void ff_channel_layouts_changeref(AVFilterChannelLayouts **oldref,
                                   AVFilterChannelLayouts **newref);
 
+/**
+ * Sets all remaining unset filter lists for all inputs/outputs to their
+ * corresponding `ff_all_*()` lists.
+ */
 av_warn_unused_result
 int ff_default_query_formats(AVFilterContext *ctx);
 
-- 
2.42.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] 37+ messages in thread

* [FFmpeg-devel] [PATCH 02/25] avfilter: always call ff_default_query_formats
  2023-11-09 12:19 [FFmpeg-devel] [RFC PATCH 00/25] YUVJ removal + filter negotiation Niklas Haas
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 01/25] avfilter/formats: document ff_default_query_formats Niklas Haas
@ 2023-11-09 12:19 ` Niklas Haas
  2023-11-27 16:56   ` Anton Khirnov
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 03/25] avfilter: add negotiation API for color space/range Niklas Haas
                   ` (22 subsequent siblings)
  24 siblings, 1 reply; 37+ messages in thread
From: Niklas Haas @ 2023-11-09 12:19 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Niklas Haas

From: Niklas Haas <git@haasn.dev>

Even if a query func is set. This is safe to do, because
ff_default_query_formats is documented not to touch any filter lists
that were already set by the query func.

The reason to do this is because it allows us to extend
AVFilterFormatsConfig without having to touch every filter in existence.
An alternative implementation of this commit would be to explicitly add
a `ff_default_query_formats` call at the end of every query_formats
function, but that would end up functionally equivalent to this change
while touching a whole lot more code paths for no reason.

As a bonus, eliminates some code/logic duplication from this function.
---
 libavfilter/avfiltergraph.c | 39 ++++++++++++-------------------------
 1 file changed, 12 insertions(+), 27 deletions(-)

diff --git a/libavfilter/avfiltergraph.c b/libavfilter/avfiltergraph.c
index 68daa93e61..625cbc022e 100644
--- a/libavfilter/avfiltergraph.c
+++ b/libavfilter/avfiltergraph.c
@@ -341,33 +341,21 @@ static int filter_check_formats(AVFilterContext *ctx)
 static int filter_query_formats(AVFilterContext *ctx)
 {
     int ret;
-    AVFilterFormats *formats;
-    AVFilterChannelLayouts *chlayouts;
-    enum AVMediaType type = ctx->inputs  && ctx->inputs [0] ? ctx->inputs [0]->type :
-                            ctx->outputs && ctx->outputs[0] ? ctx->outputs[0]->type :
-                            AVMEDIA_TYPE_VIDEO;
-
-    if ((ret = ctx->filter->formats.query_func(ctx)) < 0) {
-        if (ret != AVERROR(EAGAIN))
-            av_log(ctx, AV_LOG_ERROR, "Query format failed for '%s': %s\n",
-                   ctx->name, av_err2str(ret));
-        return ret;
-    }
-    ret = filter_check_formats(ctx);
-    if (ret < 0)
-        return ret;
 
-    formats = ff_all_formats(type);
-    if ((ret = ff_set_common_formats(ctx, formats)) < 0)
-        return ret;
-    if (type == AVMEDIA_TYPE_AUDIO) {
-        if ((ret = ff_set_common_all_samplerates(ctx)) < 0)
+    if (ctx->filter->formats_state == FF_FILTER_FORMATS_QUERY_FUNC) {
+        if ((ret = ctx->filter->formats.query_func(ctx)) < 0) {
+            if (ret != AVERROR(EAGAIN))
+                av_log(ctx, AV_LOG_ERROR, "Query format failed for '%s': %s\n",
+                       ctx->name, av_err2str(ret));
             return ret;
-        chlayouts = ff_all_channel_layouts();
-        if ((ret = ff_set_common_channel_layouts(ctx, chlayouts)) < 0)
+        }
+
+        ret = filter_check_formats(ctx);
+        if (ret < 0)
             return ret;
     }
-    return 0;
+
+    return ff_default_query_formats(ctx);
 }
 
 static int formats_declared(AVFilterContext *f)
@@ -416,10 +404,7 @@ static int query_formats(AVFilterGraph *graph, void *log_ctx)
         AVFilterContext *f = graph->filters[i];
         if (formats_declared(f))
             continue;
-        if (f->filter->formats_state == FF_FILTER_FORMATS_QUERY_FUNC)
-            ret = filter_query_formats(f);
-        else
-            ret = ff_default_query_formats(f);
+        ret = filter_query_formats(f);
         if (ret < 0 && ret != AVERROR(EAGAIN))
             return ret;
         /* note: EAGAIN could indicate a partial success, not counted yet */
-- 
2.42.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] 37+ messages in thread

* [FFmpeg-devel] [PATCH 03/25] avfilter: add negotiation API for color space/range
  2023-11-09 12:19 [FFmpeg-devel] [RFC PATCH 00/25] YUVJ removal + filter negotiation Niklas Haas
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 01/25] avfilter/formats: document ff_default_query_formats Niklas Haas
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 02/25] avfilter: always call ff_default_query_formats Niklas Haas
@ 2023-11-09 12:19 ` Niklas Haas
  2023-12-06 15:03   ` Anton Khirnov
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 04/25] fftools/ffmpeg_filter: don't clear buffersrc params Niklas Haas
                   ` (21 subsequent siblings)
  24 siblings, 1 reply; 37+ messages in thread
From: Niklas Haas @ 2023-11-09 12:19 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Niklas Haas

From: Niklas Haas <git@haasn.dev>

Motivated by YUVJ removal. This change will allow full negotiation
between color ranges and matrices as needed. By default, all ranges and
matrices are marked as supported.

Because grayscale formats are currently handled very inconsistently (and
in particular, assumed as forced full-range by swscale), we exclude them
from negotiation altogether for the time being, to get this API merged.

After filter negotiation is available, we can relax the
grayscale-is-forced-jpeg restriction again, when it will be more
feasible to do so without breaking a million test cases.

Note that this commit updates one FATE test as a consequence of the
sanity fallback for non-YUV formats. In particular, the test case now
writes rgb24(pc, gbr/unspecified/unspecified) to the matroska file,
instead of rgb24(unspecified/unspecified/unspecified) as before.
---
 doc/APIchanges              |   8 ++
 libavfilter/avfilter.c      |  19 ++++-
 libavfilter/avfilter.h      |  28 ++++++
 libavfilter/avfiltergraph.c | 166 +++++++++++++++++++++++++++++++++++-
 libavfilter/formats.c       | 122 +++++++++++++++++++++++++-
 libavfilter/formats.h       |  54 ++++++++++++
 libavfilter/internal.h      |   6 ++
 libavfilter/vaapi_vpp.c     |   4 +
 libavfilter/version.h       |   2 +-
 libavfilter/video.c         |   2 +
 tests/ref/fate/shortest-sub |   4 +-
 11 files changed, 405 insertions(+), 10 deletions(-)

diff --git a/doc/APIchanges b/doc/APIchanges
index 12383a28d3..ce3f90a674 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -2,6 +2,14 @@ The last version increases of all libraries were on 2023-02-09
 
 API changes, most recent first:
 
+2023-11-xx - xxxxxxxxxx - lavf 58.14.100 - avfilter.h formats.h
+  Add AVFilterFormatsConfig.color_spaces, AVFilterFormatsConfig.color_ranges,
+  AVFilterLink.colorspace, AVFilterLink.color_range, ff_all_color_spaces,
+  ff_all_color_ranges, ff_set_common_color_spaces, ff_set_common_color_ranges,
+  ff_set_common_color_spaces_from_list, ff_set_common_color_ranges_from_list,
+  ff_set_common_all_color_spaces, ff_set_common_all_color_ranges,
+  ff_formats_check_color_spaces, ff_formats_check_color_ranges.
+
 2023-11-08 - xxxxxxxxxx - lavu 58.32.100 - channel_layout.h
   Add AV_CH_LAYOUT_7POINT2POINT3 and AV_CHANNEL_LAYOUT_7POINT2POINT3.
   Add AV_CH_LAYOUT_9POINT1POINT4_BACK and AV_CHANNEL_LAYOUT_9POINT1POINT4_BACK.
diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
index ab7782862a..77bfec00c5 100644
--- a/libavfilter/avfilter.c
+++ b/libavfilter/avfilter.c
@@ -185,6 +185,7 @@ 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;
     ff_framequeue_init(&link->fifo, &src->graph->internal->frame_queues);
 
     return 0;
@@ -286,6 +287,12 @@ int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt,
     if (link->outcfg.formats)
         ff_formats_changeref(&link->outcfg.formats,
                              &filt->outputs[filt_dstpad_idx]->outcfg.formats);
+    if (link->outcfg.color_spaces)
+        ff_formats_changeref(&link->outcfg.color_spaces,
+                             &filt->outputs[filt_dstpad_idx]->outcfg.color_spaces);
+    if (link->outcfg.color_ranges)
+        ff_formats_changeref(&link->outcfg.color_ranges,
+                             &filt->outputs[filt_dstpad_idx]->outcfg.color_ranges);
     if (link->outcfg.samplerates)
         ff_formats_changeref(&link->outcfg.samplerates,
                              &filt->outputs[filt_dstpad_idx]->outcfg.samplerates);
@@ -730,6 +737,10 @@ static void free_link(AVFilterLink *link)
 
     ff_formats_unref(&link->incfg.formats);
     ff_formats_unref(&link->outcfg.formats);
+    ff_formats_unref(&link->incfg.color_spaces);
+    ff_formats_unref(&link->outcfg.color_spaces);
+    ff_formats_unref(&link->incfg.color_ranges);
+    ff_formats_unref(&link->outcfg.color_ranges);
     ff_formats_unref(&link->incfg.samplerates);
     ff_formats_unref(&link->outcfg.samplerates);
     ff_channel_layouts_unref(&link->incfg.channel_layouts);
@@ -987,9 +998,11 @@ int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
             strcmp(link->dst->filter->name, "idet") &&
             strcmp(link->dst->filter->name, "null") &&
             strcmp(link->dst->filter->name, "scale")) {
-            av_assert1(frame->format                 == link->format);
-            av_assert1(frame->width               == link->w);
-            av_assert1(frame->height               == link->h);
+            av_assert1(frame->format        == link->format);
+            av_assert1(frame->width         == link->w);
+            av_assert1(frame->height        == link->h);
+            av_assert1(frame->colorspace    == link->color_space);
+            av_assert1(frame->color_range   == link->color_range);
         }
 
         frame->sample_aspect_ratio = link->sample_aspect_ratio;
diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h
index d69381aed4..246d000251 100644
--- a/libavfilter/avfilter.h
+++ b/libavfilter/avfilter.h
@@ -301,6 +301,14 @@ typedef struct AVFilter {
          * @ref AVFilterFormatsConfig.formats "incfg.formats"
          * on every output link to a list of pixel/sample formats that the filter
          * supports on that link.
+         * For video links, this filter may also set
+         * @ref AVFilterFormatsConfig.color_spaces "incfg.color_spaces"
+         *  /
+         * @ref AVFilterFormatsConfig.color_spaces "outcfg.color_spaces"
+         * and @ref AVFilterFormatsConfig.color_ranges "incfg.color_ranges"
+         *  /
+         * @ref AVFilterFormatsConfig.color_ranges "outcfg.color_ranges"
+         * analogously.
          * For audio links, this filter must also set
          * @ref AVFilterFormatsConfig.samplerates "incfg.samplerates"
          *  /
@@ -322,6 +330,10 @@ typedef struct AVFilter {
          * to indicate that this filter supports each of these pixel formats,
          * provided that all inputs and outputs use the same pixel format.
          *
+         * In addition to that the generic code will mark all inputs
+         * and all outputs as supporting all color spaces and ranges, as
+         * long as all inputs and outputs use the same color space/range.
+         *
          * This list must never be NULL if the union is in this state.
          * The type of all inputs and outputs of filters using this must
          * be AVMEDIA_TYPE_VIDEO.
@@ -514,6 +526,12 @@ typedef struct AVFilterFormatsConfig {
      */
     AVFilterChannelLayouts  *channel_layouts;
 
+    /**
+     * Lists of supported YUV color metadata, only for YUV video.
+     */
+    AVFilterFormats *color_spaces;  ///< AVColorSpace
+    AVFilterFormats *color_ranges;  ///< AVColorRange
+
 } AVFilterFormatsConfig;
 
 /**
@@ -565,6 +583,16 @@ struct AVFilterLink {
 
     AVChannelLayout ch_layout;  ///< channel layout of current buffer (see libavutil/channel_layout.h)
 
+    /**
+     * For non-YUV links, these are respectively set to fallback values (as
+     * appropriate for that colorspace).
+     *
+     * Note: This includes grayscale formats, as these are currently treated
+     * as forced full range always.
+     */
+    enum AVColorSpace colorspace;   ///< agreed upon YUV color space
+    enum AVColorRange color_range;  ///< agreed upon YUV color range
+
     /*****************************************************************
      * All fields below this line are not part of the public API. They
      * may not be used outside of libavfilter and can be changed and
diff --git a/libavfilter/avfiltergraph.c b/libavfilter/avfiltergraph.c
index 625cbc022e..e7fabe85ea 100644
--- a/libavfilter/avfiltergraph.c
+++ b/libavfilter/avfiltergraph.c
@@ -298,7 +298,9 @@ static int filter_link_check_formats(void *log, AVFilterLink *link, AVFilterForm
     switch (link->type) {
 
     case AVMEDIA_TYPE_VIDEO:
-        if ((ret = ff_formats_check_pixel_formats(log, cfg->formats)) < 0)
+        if ((ret = ff_formats_check_pixel_formats(log, cfg->formats)) < 0 ||
+            (ret = ff_formats_check_color_spaces(log, cfg->color_spaces)) < 0 ||
+            (ret = ff_formats_check_color_ranges(log, cfg->color_ranges)) < 0)
             return ret;
         break;
 
@@ -365,6 +367,10 @@ static int formats_declared(AVFilterContext *f)
     for (i = 0; i < f->nb_inputs; i++) {
         if (!f->inputs[i]->outcfg.formats)
             return 0;
+        if (f->inputs[i]->type == AVMEDIA_TYPE_VIDEO &&
+            !(f->inputs[i]->outcfg.color_ranges &&
+              f->inputs[i]->outcfg.color_spaces))
+            return 0;
         if (f->inputs[i]->type == AVMEDIA_TYPE_AUDIO &&
             !(f->inputs[i]->outcfg.samplerates &&
               f->inputs[i]->outcfg.channel_layouts))
@@ -373,6 +379,10 @@ static int formats_declared(AVFilterContext *f)
     for (i = 0; i < f->nb_outputs; i++) {
         if (!f->outputs[i]->incfg.formats)
             return 0;
+        if (f->outputs[i]->type == AVMEDIA_TYPE_VIDEO &&
+            !(f->outputs[i]->incfg.color_ranges &&
+              f->outputs[i]->incfg.color_spaces))
+            return 0;
         if (f->outputs[i]->type == AVMEDIA_TYPE_AUDIO &&
             !(f->outputs[i]->incfg.samplerates &&
               f->outputs[i]->incfg.channel_layouts))
@@ -493,7 +503,16 @@ static int query_formats(AVFilterGraph *graph, void *log_ctx)
                 av_assert0( inlink->outcfg.formats->refcount > 0);
                 av_assert0(outlink->incfg.formats->refcount > 0);
                 av_assert0(outlink->outcfg.formats->refcount > 0);
-                if (outlink->type == AVMEDIA_TYPE_AUDIO) {
+                if (outlink->type == AVMEDIA_TYPE_VIDEO) {
+                    av_assert0( inlink-> incfg.color_spaces->refcount > 0);
+                    av_assert0( inlink->outcfg.color_spaces->refcount > 0);
+                    av_assert0(outlink-> incfg.color_spaces->refcount > 0);
+                    av_assert0(outlink->outcfg.color_spaces->refcount > 0);
+                    av_assert0( inlink-> incfg.color_ranges->refcount > 0);
+                    av_assert0( inlink->outcfg.color_ranges->refcount > 0);
+                    av_assert0(outlink-> incfg.color_ranges->refcount > 0);
+                    av_assert0(outlink->outcfg.color_ranges->refcount > 0);
+                } else if (outlink->type == AVMEDIA_TYPE_AUDIO) {
                     av_assert0( inlink-> incfg.samplerates->refcount > 0);
                     av_assert0( inlink->outcfg.samplerates->refcount > 0);
                     av_assert0(outlink-> incfg.samplerates->refcount > 0);
@@ -583,6 +602,29 @@ static enum AVSampleFormat find_best_sample_fmt_of_2(enum AVSampleFormat dst_fmt
     return score1 < score2 ? dst_fmt1 : dst_fmt2;
 }
 
+int ff_fmt_is_regular_yuv(enum AVPixelFormat fmt)
+{
+    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(fmt);
+    if (!desc)
+        return 0;
+    if (desc->nb_components < 3)
+        return 0; /* Grayscale is explicitly full-range in swscale */
+    if (desc->flags & (AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_PAL |
+                       AV_PIX_FMT_FLAG_XYZ | AV_PIX_FMT_FLAG_FLOAT))
+        return 0;
+
+    switch (fmt) {
+    case AV_PIX_FMT_YUVJ420P:
+    case AV_PIX_FMT_YUVJ422P:
+    case AV_PIX_FMT_YUVJ444P:
+    case AV_PIX_FMT_YUVJ440P:
+    case AV_PIX_FMT_YUVJ411P:
+        return 0;
+    default:
+        return 1;
+    }
+}
+
 static int pick_format(AVFilterLink *link, AVFilterLink *ref)
 {
     if (!link || !link->incfg.formats)
@@ -603,6 +645,7 @@ static int pick_format(AVFilterLink *link, AVFilterLink *ref)
                    av_get_pix_fmt_name(ref->format), has_alpha);
             link->incfg.formats->formats[0] = best;
         }
+
     } else if (link->type == AVMEDIA_TYPE_AUDIO) {
         if(ref && ref->type == AVMEDIA_TYPE_AUDIO){
             enum AVSampleFormat best= AV_SAMPLE_FMT_NONE;
@@ -621,7 +664,40 @@ static int pick_format(AVFilterLink *link, AVFilterLink *ref)
     link->incfg.formats->nb_formats = 1;
     link->format = link->incfg.formats->formats[0];
 
-    if (link->type == AVMEDIA_TYPE_AUDIO) {
+    if (link->type == AVMEDIA_TYPE_VIDEO) {
+        if (!ff_fmt_is_regular_yuv(link->format)) {
+            const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(link->format);
+            /* These fields are explicitly documented as affecting YUV only,
+             * so set them to sane values for other formats. */
+            if (desc->flags & AV_PIX_FMT_FLAG_FLOAT)
+                link->color_range = AVCOL_RANGE_UNSPECIFIED;
+            else
+                link->color_range = AVCOL_RANGE_JPEG;
+            if (desc->flags & (AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_XYZ)) {
+                link->colorspace = AVCOL_SPC_RGB;
+            } else {
+                link->colorspace = AVCOL_SPC_UNSPECIFIED;
+            }
+        } else {
+            if (!link->incfg.color_spaces->nb_formats) {
+                av_log(link->src, AV_LOG_ERROR, "Cannot select color space for"
+                       " the link between filters %s and %s.\n", link->src->name,
+                       link->dst->name);
+                return AVERROR(EINVAL);
+            }
+            link->incfg.color_spaces->nb_formats = 1;
+            link->colorspace = link->incfg.color_spaces->formats[0];
+
+            if (!link->incfg.color_ranges->nb_formats) {
+                av_log(link->src, AV_LOG_ERROR, "Cannot select color range for"
+                       " the link between filters %s and %s.\n", link->src->name,
+                       link->dst->name);
+                return AVERROR(EINVAL);
+            }
+            link->incfg.color_ranges->nb_formats = 1;
+            link->color_range = link->incfg.color_ranges->formats[0];
+        }
+    } else if (link->type == AVMEDIA_TYPE_AUDIO) {
         int ret;
 
         if (!link->incfg.samplerates->nb_formats) {
@@ -661,6 +737,10 @@ FF_ENABLE_DEPRECATION_WARNINGS
     ff_formats_unref(&link->outcfg.samplerates);
     ff_channel_layouts_unref(&link->incfg.channel_layouts);
     ff_channel_layouts_unref(&link->outcfg.channel_layouts);
+    ff_formats_unref(&link->incfg.color_spaces);
+    ff_formats_unref(&link->outcfg.color_spaces);
+    ff_formats_unref(&link->incfg.color_ranges);
+    ff_formats_unref(&link->outcfg.color_ranges);
 
     return 0;
 }
@@ -822,6 +902,82 @@ static void swap_samplerates(AVFilterGraph *graph)
         swap_samplerates_on_filter(graph->filters[i]);
 }
 
+static void swap_color_spaces_on_filter(AVFilterContext *filter)
+{
+    AVFilterLink *link = NULL;
+    enum AVColorSpace csp;
+    int i;
+
+    for (i = 0; i < filter->nb_inputs; i++) {
+        link = filter->inputs[i];
+        if (link->type == AVMEDIA_TYPE_VIDEO &&
+            link->outcfg.color_spaces->nb_formats == 1)
+            break;
+    }
+    if (i == filter->nb_inputs)
+        return;
+
+    csp = link->outcfg.color_spaces->formats[0];
+
+    for (i = 0; i < filter->nb_outputs; i++) {
+        AVFilterLink *outlink = filter->outputs[i];
+        if (outlink->type != AVMEDIA_TYPE_VIDEO)
+            continue;
+        /* there is no meaningful 'score' between different yuv matrices,
+         * so just prioritize an exact match if it exists */
+        for (int j = 0; j < outlink->incfg.color_spaces->nb_formats; j++) {
+            if (csp == outlink->incfg.color_spaces->formats[j]) {
+                FFSWAP(int, outlink->incfg.color_spaces->formats[0],
+                       outlink->incfg.color_spaces->formats[j]);
+                break;
+            }
+        }
+    }
+}
+
+static void swap_color_spaces(AVFilterGraph *graph)
+{
+    for (int i = 0; i < graph->nb_filters; i++)
+        swap_color_spaces_on_filter(graph->filters[i]);
+}
+
+static void swap_color_ranges_on_filter(AVFilterContext *filter)
+{
+    AVFilterLink *link = NULL;
+    enum AVColorRange range;
+    int i;
+
+    for (i = 0; i < filter->nb_inputs; i++) {
+        link = filter->inputs[i];
+        if (link->type == AVMEDIA_TYPE_VIDEO &&
+            link->outcfg.color_ranges->nb_formats == 1)
+            break;
+    }
+    if (i == filter->nb_inputs)
+        return;
+
+    range = link->outcfg.color_ranges->formats[0];
+
+    for (i = 0; i < filter->nb_outputs; i++) {
+        AVFilterLink *outlink = filter->outputs[i];
+        if (outlink->type != AVMEDIA_TYPE_VIDEO)
+            continue;
+        for (int j = 0; j < outlink->incfg.color_ranges->nb_formats; j++) {
+            if (range == outlink->incfg.color_ranges->formats[j]) {
+                FFSWAP(int, outlink->incfg.color_ranges->formats[0],
+                       outlink->incfg.color_ranges->formats[j]);
+                break;
+            }
+        }
+    }
+}
+
+static void swap_color_ranges(AVFilterGraph *graph)
+{
+    for (int i = 0; i < graph->nb_filters; i++)
+        swap_color_ranges_on_filter(graph->filters[i]);
+}
+
 #define CH_CENTER_PAIR (AV_CH_FRONT_LEFT_OF_CENTER | AV_CH_FRONT_RIGHT_OF_CENTER)
 #define CH_FRONT_PAIR  (AV_CH_FRONT_LEFT           | AV_CH_FRONT_RIGHT)
 #define CH_STEREO_PAIR (AV_CH_STEREO_LEFT          | AV_CH_STEREO_RIGHT)
@@ -1098,6 +1254,10 @@ static int graph_config_formats(AVFilterGraph *graph, void *log_ctx)
     if ((ret = reduce_formats(graph)) < 0)
         return ret;
 
+    /* for video filters, ensure that the best colorspace metadata is selected */
+    swap_color_spaces(graph);
+    swap_color_ranges(graph);
+
     /* for audio filters, ensure the best format, sample rate and channel layout
      * is selected */
     swap_sample_fmts(graph);
diff --git a/libavfilter/formats.c b/libavfilter/formats.c
index d1c97daf64..20f00d2db4 100644
--- a/libavfilter/formats.c
+++ b/libavfilter/formats.c
@@ -321,12 +321,46 @@ static int merge_channel_layouts(void *a, void *b)
     return merge_channel_layouts_internal(a, b, 0);
 }
 
+static int merge_generic_internal(AVFilterFormats *a,
+                                  AVFilterFormats *b, int check)
+{
+    av_assert2(check || (a->refcount && b->refcount));
+
+    if (a == b)
+        return 1;
+
+    MERGE_FORMATS(a, b, formats, nb_formats, AVFilterFormats, check, 0);
+
+    return 1;
+}
+
+static int can_merge_generic(const void *a, const void *b)
+{
+    return merge_generic_internal((AVFilterFormats *)a,
+                                  (AVFilterFormats *)b, 1);
+}
+
+static int merge_generic(void *a, void *b)
+{
+    return merge_generic_internal(a, b, 0);
+}
+
 static const AVFilterFormatsMerger mergers_video[] = {
     {
         .offset     = offsetof(AVFilterFormatsConfig, formats),
         .merge      = merge_pix_fmts,
         .can_merge  = can_merge_pix_fmts,
     },
+    {
+        .offset     = offsetof(AVFilterFormatsConfig, color_spaces),
+        .merge      = merge_generic,
+        .can_merge  = can_merge_generic,
+    },
+    {
+        .offset     = offsetof(AVFilterFormatsConfig, color_ranges),
+        .merge      = merge_generic,
+        .can_merge  = can_merge_generic,
+    },
 };
 
 static const AVFilterFormatsMerger mergers_audio[] = {
@@ -594,6 +628,33 @@ AVFilterChannelLayouts *ff_all_channel_counts(void)
     return ret;
 }
 
+AVFilterFormats *ff_all_color_spaces(void)
+{
+    AVFilterFormats *ret = NULL;
+    if (ff_add_format(&ret, AVCOL_SPC_UNSPECIFIED) < 0)
+        return NULL;
+    for (int csp = 0; csp < AVCOL_SPC_NB; csp++) {
+        if (csp == AVCOL_SPC_RESERVED ||
+            csp == AVCOL_SPC_UNSPECIFIED)
+            continue;
+        if (ff_add_format(&ret, csp) < 0)
+            return NULL;
+    }
+
+    return ret;
+}
+
+AVFilterFormats *ff_all_color_ranges(void)
+{
+    AVFilterFormats *ret = NULL;
+    for (int range = 0; range < AVCOL_RANGE_NB; range++) {
+        if (ff_add_format(&ret, range) < 0)
+            return NULL;
+    }
+
+    return ret;
+}
+
 #define FORMATS_REF(f, ref, unref_fn)                                           \
     void *tmp;                                                                  \
                                                                                 \
@@ -763,6 +824,42 @@ int ff_set_common_all_samplerates(AVFilterContext *ctx)
     return ff_set_common_samplerates(ctx, ff_all_samplerates());
 }
 
+int ff_set_common_color_spaces(AVFilterContext *ctx,
+                               AVFilterFormats *color_spaces)
+{
+    SET_COMMON_FORMATS(ctx, color_spaces, AVMEDIA_TYPE_VIDEO,
+                       ff_formats_ref, ff_formats_unref);
+}
+
+int ff_set_common_color_spaces_from_list(AVFilterContext *ctx,
+                                         const int *color_ranges)
+{
+    return ff_set_common_color_spaces(ctx, ff_make_format_list(color_ranges));
+}
+
+int ff_set_common_all_color_spaces(AVFilterContext *ctx)
+{
+    return ff_set_common_color_spaces(ctx, ff_all_color_spaces());
+}
+
+int ff_set_common_color_ranges(AVFilterContext *ctx,
+                               AVFilterFormats *color_ranges)
+{
+    SET_COMMON_FORMATS(ctx, color_ranges, AVMEDIA_TYPE_VIDEO,
+                       ff_formats_ref, ff_formats_unref);
+}
+
+int ff_set_common_color_ranges_from_list(AVFilterContext *ctx,
+                                         const int *color_ranges)
+{
+    return ff_set_common_color_ranges(ctx, ff_make_format_list(color_ranges));
+}
+
+int ff_set_common_all_color_ranges(AVFilterContext *ctx)
+{
+    return ff_set_common_color_ranges(ctx, ff_all_color_ranges());
+}
+
 /**
  * A helper for query_formats() which sets all links to the same list of
  * formats. If there are no links hooked to this filter, the list of formats is
@@ -817,7 +914,14 @@ int ff_default_query_formats(AVFilterContext *ctx)
     ret = ff_set_common_formats(ctx, formats);
     if (ret < 0)
         return ret;
-    if (type == AVMEDIA_TYPE_AUDIO) {
+    if (type == AVMEDIA_TYPE_VIDEO) {
+        ret = ff_set_common_all_color_spaces(ctx);
+        if (ret < 0)
+            return ret;
+        ret = ff_set_common_all_color_ranges(ctx);
+        if (ret < 0)
+            return ret;
+    } else if (type == AVMEDIA_TYPE_AUDIO) {
         ret = ff_set_common_all_channel_counts(ctx);
         if (ret < 0)
             return ret;
@@ -935,6 +1039,22 @@ int ff_formats_check_sample_rates(void *log, const AVFilterFormats *fmts)
     return check_list(log, "sample rate", fmts);
 }
 
+int ff_formats_check_color_spaces(void *log, const AVFilterFormats *fmts)
+{
+    for (int i = 0; fmts && i < fmts->nb_formats; i++) {
+        if (fmts->formats[i] == AVCOL_SPC_RESERVED) {
+            av_log(log, AV_LOG_ERROR, "Invalid color range\n");
+            return AVERROR(EINVAL);
+        }
+    }
+    return check_list(log, "color space", fmts);
+}
+
+int ff_formats_check_color_ranges(void *log, const AVFilterFormats *fmts)
+{
+    return check_list(log, "color range", fmts);
+}
+
 static int layouts_compatible(const AVChannelLayout *a, const AVChannelLayout *b)
 {
     return !av_channel_layout_compare(a, b) ||
diff --git a/libavfilter/formats.h b/libavfilter/formats.h
index d44890109e..82b3af4be1 100644
--- a/libavfilter/formats.h
+++ b/libavfilter/formats.h
@@ -130,6 +130,20 @@ AVFilterChannelLayouts *ff_all_channel_counts(void);
 av_warn_unused_result
 AVFilterChannelLayouts *ff_make_channel_layout_list(const AVChannelLayout *fmts);
 
+/**
+ * Construct an AVFilterFormats representing all possible color spaces.
+ *
+ * Note: This list does not include AVCOL_SPC_RESERVED.
+ */
+av_warn_unused_result
+AVFilterFormats *ff_all_color_spaces(void);
+
+/**
+ * Construct an AVFilterFormats representing all possible color ranges.
+ */
+av_warn_unused_result
+AVFilterFormats *ff_all_color_ranges(void);
+
 /**
  * Helpers for query_formats() which set all free audio links to the same list
  * of channel layouts/sample rates. If there are no links hooked to this list,
@@ -165,6 +179,38 @@ int ff_set_common_samplerates_from_list(AVFilterContext *ctx,
 av_warn_unused_result
 int ff_set_common_all_samplerates(AVFilterContext *ctx);
 
+av_warn_unused_result
+int ff_set_common_color_spaces(AVFilterContext *ctx,
+                               AVFilterFormats *color_spaces);
+/**
+ * Equivalent to ff_set_common_color_spaces(ctx, ff_make_format_list(color_spaces))
+ */
+av_warn_unused_result
+int ff_set_common_color_spaces_from_list(AVFilterContext *ctx,
+                                         const int *color_spaces);
+
+/**
+ * Equivalent to ff_set_common_color_spaces(ctx, ff_all_color_spaces())
+ */
+av_warn_unused_result
+int ff_set_common_all_color_spaces(AVFilterContext *ctx);
+
+av_warn_unused_result
+int ff_set_common_color_ranges(AVFilterContext *ctx,
+                               AVFilterFormats *color_ranges);
+/**
+ * Equivalent to ff_set_common_color_ranges(ctx, ff_make_format_list(color_ranges))
+ */
+av_warn_unused_result
+int ff_set_common_color_ranges_from_list(AVFilterContext *ctx,
+                                         const int *color_ranges);
+
+/**
+ * Equivalent to ff_set_common_color_ranges(ctx, ff_all_color_ranges())
+ */
+av_warn_unused_result
+int ff_set_common_all_color_ranges(AVFilterContext *ctx);
+
 /**
  * A helper for query_formats() which sets all links to the same list of
  * formats. If there are no links hooked to this filter, the list of formats is
@@ -328,6 +374,14 @@ int ff_formats_check_sample_rates(void *log, const AVFilterFormats *fmts);
  */
 int ff_formats_check_channel_layouts(void *log, const AVFilterChannelLayouts *fmts);
 
+/**
+ * Check that fmts is a valid formats list for YUV colorspace metadata.
+ *
+ * In particular, check for duplicates.
+ */
+int ff_formats_check_color_spaces(void *log, const AVFilterFormats *fmts);
+int ff_formats_check_color_ranges(void *log, const AVFilterFormats *fmts);
+
 typedef struct AVFilterFormatMerger {
     unsigned offset;
     int (*merge)(void *a, void *b);
diff --git a/libavfilter/internal.h b/libavfilter/internal.h
index 2dbc5def0a..a6cdf9994c 100644
--- a/libavfilter/internal.h
+++ b/libavfilter/internal.h
@@ -203,6 +203,12 @@ enum FilterFormatsState {
  */
 int ff_fmt_is_in(int fmt, const int *fmts);
 
+/**
+ * Returns true if a pixel format is "regular YUV", which includes all pixel
+ * formats that are affected by YUV colorspace negotiation.
+ */
+int ff_fmt_is_regular_yuv(enum AVPixelFormat fmt);
+
 /* Functions to parse audio format arguments */
 
 /**
diff --git a/libavfilter/vaapi_vpp.c b/libavfilter/vaapi_vpp.c
index cf2592e068..59961bfa4a 100644
--- a/libavfilter/vaapi_vpp.c
+++ b/libavfilter/vaapi_vpp.c
@@ -38,6 +38,10 @@ int ff_vaapi_vpp_query_formats(AVFilterContext *avctx)
                               &avctx->outputs[0]->incfg.formats)) < 0)
         return err;
 
+    if ((err = ff_set_common_all_color_spaces(avctx)) < 0 ||
+        (err = ff_set_common_all_color_ranges(avctx)) < 0)
+        return err;
+
     return 0;
 }
 
diff --git a/libavfilter/version.h b/libavfilter/version.h
index 537df129cd..7642b670d1 100644
--- a/libavfilter/version.h
+++ b/libavfilter/version.h
@@ -31,7 +31,7 @@
 
 #include "version_major.h"
 
-#define LIBAVFILTER_VERSION_MINOR  13
+#define LIBAVFILTER_VERSION_MINOR  14
 #define LIBAVFILTER_VERSION_MICRO 100
 
 
diff --git a/libavfilter/video.c b/libavfilter/video.c
index 42eeb98c28..243762c8fd 100644
--- a/libavfilter/video.c
+++ b/libavfilter/video.c
@@ -96,6 +96,8 @@ AVFrame *ff_default_get_video_buffer2(AVFilterLink *link, int w, int h, int alig
         return NULL;
 
     frame->sample_aspect_ratio = link->sample_aspect_ratio;
+    frame->colorspace  = link->colorspace;
+    frame->color_range = link->color_range;
 
     return frame;
 }
diff --git a/tests/ref/fate/shortest-sub b/tests/ref/fate/shortest-sub
index 9caee587ce..16b1324e83 100644
--- a/tests/ref/fate/shortest-sub
+++ b/tests/ref/fate/shortest-sub
@@ -1,5 +1,5 @@
-73d142a80965f9e0884a5863abde0dab *tests/data/fate/shortest-sub.matroska
-139249 tests/data/fate/shortest-sub.matroska
+d6608277c93097383e62388196dc62f0 *tests/data/fate/shortest-sub.matroska
+139260 tests/data/fate/shortest-sub.matroska
 #extradata 1:      167, 0xf7272d5f
 #tb 0: 1/1000
 #media_type 0: video
-- 
2.42.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] 37+ messages in thread

* [FFmpeg-devel] [PATCH 04/25] fftools/ffmpeg_filter: don't clear buffersrc params
  2023-11-09 12:19 [FFmpeg-devel] [RFC PATCH 00/25] YUVJ removal + filter negotiation Niklas Haas
                   ` (2 preceding siblings ...)
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 03/25] avfilter: add negotiation API for color space/range Niklas Haas
@ 2023-11-09 12:19 ` Niklas Haas
  2023-11-27 16:05   ` Anton Khirnov
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 05/25] avfilter/buffersrc: add color_space/range parameters Niklas Haas
                   ` (20 subsequent siblings)
  24 siblings, 1 reply; 37+ messages in thread
From: Niklas Haas @ 2023-11-09 12:19 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Niklas Haas

From: Niklas Haas <git@haasn.dev>

This memset is bogus, it accomplishes nothing in the best case and
regresses future additions to AVBufferSrcParameters in the worst case.
---
 fftools/ffmpeg_filter.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c
index b7da105141..e699798897 100644
--- a/fftools/ffmpeg_filter.c
+++ b/fftools/ffmpeg_filter.c
@@ -1400,11 +1400,8 @@ static int configure_input_video_filter(FilterGraph *fg, InputFilter *ifilter,
     int ret, pad_idx = 0;
     int64_t tsoffset = 0;
     AVBufferSrcParameters *par = av_buffersrc_parameters_alloc();
-
     if (!par)
         return AVERROR(ENOMEM);
-    memset(par, 0, sizeof(*par));
-    par->format = AV_PIX_FMT_NONE;
 
     if (ist->dec_ctx->codec_type == AVMEDIA_TYPE_AUDIO) {
         av_log(fg, AV_LOG_ERROR, "Cannot connect video filter to audio input\n");
-- 
2.42.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] 37+ messages in thread

* [FFmpeg-devel] [PATCH 05/25] avfilter/buffersrc: add color_space/range parameters
  2023-11-09 12:19 [FFmpeg-devel] [RFC PATCH 00/25] YUVJ removal + filter negotiation Niklas Haas
                   ` (3 preceding siblings ...)
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 04/25] fftools/ffmpeg_filter: don't clear buffersrc params Niklas Haas
@ 2023-11-09 12:19 ` Niklas Haas
  2023-12-06 15:10   ` Anton Khirnov
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 06/25] fftools/ffmpeg_filter: configure buffersrc with csp/range Niklas Haas
                   ` (19 subsequent siblings)
  24 siblings, 1 reply; 37+ messages in thread
From: Niklas Haas @ 2023-11-09 12:19 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Niklas Haas

From: Niklas Haas <git@haasn.dev>

To allow adding proper negotiation, in particular, to fftools.

These values will simply be negotiated downstream for YUV formats, and
ignored otherwise.
---
 doc/filters.texi        | 10 +++++++
 libavfilter/buffersrc.c | 62 ++++++++++++++++++++++++++++++++++++-----
 libavfilter/buffersrc.h |  6 ++++
 3 files changed, 71 insertions(+), 7 deletions(-)

diff --git a/doc/filters.texi b/doc/filters.texi
index 12113d7802..55a333680c 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -27939,6 +27939,16 @@ Specify the timebase assumed by the timestamps of the buffered frames.
 @item frame_rate
 Specify the frame rate expected for the video stream.
 
+@item colorspace
+A string representing the color space of the buffered video frames.
+It may be a number corresponding to a color space, or a color space
+name.
+
+@item range
+A string representing the color range of the buffered video frames.
+It may be a number corresponding to a color range, or a color range
+name.
+
 @item pixel_aspect, sar
 The sample (pixel) aspect ratio of the input video.
 
diff --git a/libavfilter/buffersrc.c b/libavfilter/buffersrc.c
index 453fc0fd5c..76f3f1d7a5 100644
--- a/libavfilter/buffersrc.c
+++ b/libavfilter/buffersrc.c
@@ -49,6 +49,8 @@ typedef struct BufferSourceContext {
     /* video only */
     int               w, h;
     enum AVPixelFormat  pix_fmt;
+    enum AVColorSpace color_space;
+    enum AVColorRange color_range;
     AVRational        pixel_aspect;
 
     AVBufferRef *hw_frames_ctx;
@@ -64,10 +66,13 @@ typedef struct BufferSourceContext {
     int64_t last_pts;
 } BufferSourceContext;
 
-#define CHECK_VIDEO_PARAM_CHANGE(s, c, width, height, format, pts)\
-    if (c->w != width || c->h != height || c->pix_fmt != format) {\
-        av_log(s, AV_LOG_INFO, "filter context - w: %d h: %d fmt: %d, incoming frame - w: %d h: %d fmt: %d pts_time: %s\n",\
-               c->w, c->h, c->pix_fmt, width, height, format, av_ts2timestr(pts, &s->outputs[0]->time_base));\
+#define CHECK_VIDEO_PARAM_CHANGE(s, c, width, height, format, csp, range, pts)\
+    if (c->w != width || c->h != height || c->pix_fmt != format ||\
+        c->color_space != csp || c->color_range != range) {\
+        av_log(s, AV_LOG_INFO, "filter context - w: %d h: %d fmt: %d csp: %s range: %s, incoming frame - w: %d h: %d fmt: %d csp: %s range: %s pts_time: %s\n",\
+               c->w, c->h, c->pix_fmt, av_color_space_name(c->color_space), av_color_range_name(c->color_range),\
+               width, height, format, av_color_space_name(csp), av_color_range_name(range),\
+               av_ts2timestr(pts, &s->outputs[0]->time_base));\
         av_log(s, AV_LOG_WARNING, "Changing video frame properties on the fly is not supported by all filters.\n");\
     }
 
@@ -88,6 +93,8 @@ AVBufferSrcParameters *av_buffersrc_parameters_alloc(void)
         return NULL;
 
     par->format = -1;
+    par->color_range = AVCOL_RANGE_UNSPECIFIED;
+    par->color_space = AVCOL_SPC_UNSPECIFIED;
 
     return par;
 }
@@ -118,6 +125,10 @@ int av_buffersrc_parameters_set(AVFilterContext *ctx, AVBufferSrcParameters *par
             if (!s->hw_frames_ctx)
                 return AVERROR(ENOMEM);
         }
+        if (param->color_space != AVCOL_SPC_UNSPECIFIED)
+            s->color_space = param->color_space;
+        if (param->color_range != AVCOL_RANGE_UNSPECIFIED)
+            s->color_range = param->color_range;
         break;
     case AVMEDIA_TYPE_AUDIO:
         if (param->format != AV_SAMPLE_FMT_NONE) {
@@ -205,7 +216,8 @@ FF_ENABLE_DEPRECATION_WARNINGS
         switch (ctx->outputs[0]->type) {
         case AVMEDIA_TYPE_VIDEO:
             CHECK_VIDEO_PARAM_CHANGE(ctx, s, frame->width, frame->height,
-                                     frame->format, frame->pts);
+                                     frame->format, frame->colorspace,
+                                     frame->color_range, frame->pts);
             break;
         case AVMEDIA_TYPE_AUDIO:
             /* For layouts unknown on input but known on link after negotiation. */
@@ -302,10 +314,11 @@ static av_cold int init_video(AVFilterContext *ctx)
         return AVERROR(EINVAL);
     }
 
-    av_log(ctx, AV_LOG_VERBOSE, "w:%d h:%d pixfmt:%s tb:%d/%d fr:%d/%d sar:%d/%d\n",
+    av_log(ctx, AV_LOG_VERBOSE, "w:%d h:%d pixfmt:%s tb:%d/%d fr:%d/%d sar:%d/%d csp:%s range:%s\n",
            c->w, c->h, av_get_pix_fmt_name(c->pix_fmt),
            c->time_base.num, c->time_base.den, c->frame_rate.num, c->frame_rate.den,
-           c->pixel_aspect.num, c->pixel_aspect.den);
+           c->pixel_aspect.num, c->pixel_aspect.den,
+           av_color_space_name(c->color_space), av_color_range_name(c->color_range));
 
     return 0;
 }
@@ -328,6 +341,30 @@ static const AVOption buffer_options[] = {
     { "pixel_aspect",  "sample aspect ratio",    OFFSET(pixel_aspect),     AV_OPT_TYPE_RATIONAL, { .dbl = 0 }, 0, DBL_MAX, V },
     { "time_base",     NULL,                     OFFSET(time_base),        AV_OPT_TYPE_RATIONAL, { .dbl = 0 }, 0, DBL_MAX, V },
     { "frame_rate",    NULL,                     OFFSET(frame_rate),       AV_OPT_TYPE_RATIONAL, { .dbl = 0 }, 0, DBL_MAX, V },
+    { "colorspace", "select colorspace", OFFSET(color_space), AV_OPT_TYPE_INT, {.i64=AVCOL_SPC_UNSPECIFIED}, 0, AVCOL_SPC_NB-1, V, "colorspace"},
+    {   "gbr",         NULL,  0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_RGB},               INT_MIN, INT_MAX, V, "colorspace"},
+    {   "bt709",       NULL,  0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_BT709},             INT_MIN, INT_MAX, V, "colorspace"},
+    {   "unknown",     NULL,  0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_UNSPECIFIED},       INT_MIN, INT_MAX, V, "colorspace"},
+    {   "fcc",         NULL,  0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_FCC},               INT_MIN, INT_MAX, V, "colorspace"},
+    {   "bt470bg",     NULL,  0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_BT470BG},           INT_MIN, INT_MAX, V, "colorspace"},
+    {   "smpte170m",   NULL,  0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_SMPTE170M},         INT_MIN, INT_MAX, V, "colorspace"},
+    {   "smpte240m",   NULL,  0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_SMPTE240M},         INT_MIN, INT_MAX, V, "colorspace"},
+    {   "ycgco",       NULL,  0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_YCGCO},             INT_MIN, INT_MAX, V, "colorspace"},
+    {   "bt2020nc",    NULL,  0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_BT2020_NCL},        INT_MIN, INT_MAX, V, "colorspace"},
+    {   "bt2020c",     NULL,  0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_BT2020_CL},         INT_MIN, INT_MAX, V, "colorspace"},
+    {   "smpte2085",   NULL,  0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_SMPTE2085},         INT_MIN, INT_MAX, V, "colorspace"},
+    {   "chroma-derived-nc",  NULL,  0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_CHROMA_DERIVED_NCL},INT_MIN, INT_MAX, V, "colorspace"},
+    {   "chroma-derived-c",   NULL,  0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_CHROMA_DERIVED_CL}, INT_MIN, INT_MAX, V, "colorspace"},
+    {   "ictcp",       NULL,  0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_ICTCP},             INT_MIN, INT_MAX, V, "colorspace"},
+    { "range", "select color range", OFFSET(color_range), AV_OPT_TYPE_INT, {.i64=AVCOL_RANGE_UNSPECIFIED}, 0, AVCOL_RANGE_NB-1, V, "range"},
+    {   "unspecified", NULL,   0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_UNSPECIFIED},  0, 0, V, "range"},
+    {   "unknown",     NULL,   0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_UNSPECIFIED},  0, 0, V, "range"},
+    {   "limited",     NULL,   0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_MPEG},         0, 0, V, "range"},
+    {   "tv",          NULL,   0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_MPEG},         0, 0, V, "range"},
+    {   "mpeg",        NULL,   0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_MPEG},         0, 0, V, "range"},
+    {   "full",        NULL,   0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_JPEG},         0, 0, V, "range"},
+    {   "pc",          NULL,   0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_JPEG},         0, 0, V, "range"},
+    {   "jpeg",        NULL,   0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_JPEG},         0, 0, V, "range"},
     { NULL },
 };
 
@@ -425,6 +462,8 @@ static int query_formats(AVFilterContext *ctx)
     AVFilterChannelLayouts *channel_layouts = NULL;
     AVFilterFormats *formats = NULL;
     AVFilterFormats *samplerates = NULL;
+    AVFilterFormats *color_spaces = NULL;
+    AVFilterFormats *color_ranges = NULL;
     int ret;
 
     switch (ctx->outputs[0]->type) {
@@ -432,6 +471,15 @@ static int query_formats(AVFilterContext *ctx)
         if ((ret = ff_add_format         (&formats, c->pix_fmt)) < 0 ||
             (ret = ff_set_common_formats (ctx     , formats   )) < 0)
             return ret;
+        /* force specific colorspace/range downstream only for ordinary YUV */
+        if (ff_fmt_is_regular_yuv(c->pix_fmt)) {
+            if ((ret = ff_add_format(&color_spaces, c->color_space)) < 0 ||
+                (ret = ff_set_common_color_spaces(ctx, color_spaces)) < 0)
+                return ret;
+            if ((ret = ff_add_format(&color_ranges, c->color_range)) < 0 ||
+                (ret = ff_set_common_color_ranges(ctx, color_ranges)) < 0)
+                return ret;
+        }
         break;
     case AVMEDIA_TYPE_AUDIO:
         if ((ret = ff_add_format             (&formats    , c->sample_fmt )) < 0 ||
diff --git a/libavfilter/buffersrc.h b/libavfilter/buffersrc.h
index 3b248b37cd..4357a7bbfb 100644
--- a/libavfilter/buffersrc.h
+++ b/libavfilter/buffersrc.h
@@ -105,6 +105,12 @@ typedef struct AVBufferSrcParameters {
      */
     AVBufferRef *hw_frames_ctx;
 
+    /**
+     * Video only, the YUV colorspace and range
+     */
+    enum AVColorSpace color_space;
+    enum AVColorRange color_range;
+
     /**
      * Audio only, the audio sampling rate in samples per second.
      */
-- 
2.42.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] 37+ messages in thread

* [FFmpeg-devel] [PATCH 06/25] fftools/ffmpeg_filter: configure buffersrc with csp/range
  2023-11-09 12:19 [FFmpeg-devel] [RFC PATCH 00/25] YUVJ removal + filter negotiation Niklas Haas
                   ` (4 preceding siblings ...)
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 05/25] avfilter/buffersrc: add color_space/range parameters Niklas Haas
@ 2023-11-09 12:19 ` Niklas Haas
  2023-12-06 15:13   ` Anton Khirnov
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 07/25] vf_scale: use colorspace negotiation API Niklas Haas
                   ` (18 subsequent siblings)
  24 siblings, 1 reply; 37+ messages in thread
From: Niklas Haas @ 2023-11-09 12:19 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Niklas Haas

From: Niklas Haas <git@haasn.dev>

Propagates input metadata to the input filter graph.
---
 fftools/ffmpeg_filter.c | 24 +++++++++++++++++++++---
 1 file changed, 21 insertions(+), 3 deletions(-)

diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c
index e699798897..dd5cfe4481 100644
--- a/fftools/ffmpeg_filter.c
+++ b/fftools/ffmpeg_filter.c
@@ -98,6 +98,8 @@ typedef struct InputFilterPriv {
 
     int width, height;
     AVRational sample_aspect_ratio;
+    enum AVColorSpace color_space;
+    enum AVColorRange color_range;
 
     int sample_rate;
     AVChannelLayout ch_layout;
@@ -118,6 +120,8 @@ typedef struct InputFilterPriv {
         int                 width;
         int                 height;
         AVRational          sample_aspect_ratio;
+        enum AVColorSpace   color_space;
+        enum AVColorRange   color_range;
 
         int                 sample_rate;
         AVChannelLayout     ch_layout;
@@ -212,6 +216,8 @@ static int sub2video_get_blank_frame(InputFilterPriv *ifp)
     frame->width  = ifp->width;
     frame->height = ifp->height;
     frame->format = ifp->format;
+    frame->colorspace = ifp->color_space;
+    frame->color_range = ifp->color_range;
 
     ret = av_frame_get_buffer(frame, 0);
     if (ret < 0)
@@ -789,6 +795,8 @@ static InputFilter *ifilter_alloc(FilterGraph *fg)
 
     ifp->format          = -1;
     ifp->fallback.format = -1;
+    ifp->color_space = ifp->fallback.color_space = AVCOL_SPC_UNSPECIFIED;
+    ifp->color_range = ifp->fallback.color_range = AVCOL_RANGE_UNSPECIFIED;
 
     ifp->frame_queue = av_fifo_alloc2(8, sizeof(AVFrame*), AV_FIFO_FLAG_AUTO_GROW);
     if (!ifp->frame_queue)
@@ -1424,9 +1432,11 @@ static int configure_input_video_filter(FilterGraph *fg, InputFilter *ifilter,
     av_bprint_init(&args, 0, AV_BPRINT_SIZE_AUTOMATIC);
     av_bprintf(&args,
              "video_size=%dx%d:pix_fmt=%d:time_base=%d/%d:"
-             "pixel_aspect=%d/%d",
+             "pixel_aspect=%d/%d:colorspace=%s:range=%s",
              ifp->width, ifp->height, ifp->format,
-             ifp->time_base.num, ifp->time_base.den, sar.num, sar.den);
+             ifp->time_base.num, ifp->time_base.den, sar.num, sar.den,
+             av_color_space_name(ifp->color_space),
+             av_color_range_name(ifp->color_range));
     if (fr.num && fr.den)
         av_bprintf(&args, ":frame_rate=%d/%d", fr.num, fr.den);
     snprintf(name, sizeof(name), "graph %d input from stream %d:%d", fg->index,
@@ -1760,6 +1770,8 @@ int ifilter_parameters_from_dec(InputFilter *ifilter, const AVCodecContext *dec)
         ifp->fallback.width                  = dec->width;
         ifp->fallback.height                 = dec->height;
         ifp->fallback.sample_aspect_ratio    = dec->sample_aspect_ratio;
+        ifp->fallback.color_space            = dec->colorspace;
+        ifp->fallback.color_range            = dec->color_range;
     } else if (dec->codec_type == AVMEDIA_TYPE_AUDIO) {
         int ret;
 
@@ -1800,6 +1812,8 @@ static int ifilter_parameters_from_frame(InputFilter *ifilter, const AVFrame *fr
     ifp->width               = frame->width;
     ifp->height              = frame->height;
     ifp->sample_aspect_ratio = frame->sample_aspect_ratio;
+    ifp->color_space         = frame->colorspace;
+    ifp->color_range         = frame->color_range;
 
     ifp->sample_rate         = frame->sample_rate;
     ret = av_channel_layout_copy(&ifp->ch_layout, &frame->ch_layout);
@@ -2331,6 +2345,8 @@ int ifilter_send_eof(InputFilter *ifilter, int64_t pts, AVRational tb)
             ifp->width                  = ifp->fallback.width;
             ifp->height                 = ifp->fallback.height;
             ifp->sample_aspect_ratio    = ifp->fallback.sample_aspect_ratio;
+            ifp->color_space            = ifp->fallback.color_space;
+            ifp->color_range            = ifp->fallback.color_range;
 
             ret = av_channel_layout_copy(&ifp->ch_layout,
                                          &ifp->fallback.ch_layout);
@@ -2374,7 +2390,9 @@ int ifilter_send_frame(InputFilter *ifilter, AVFrame *frame, int keep_reference)
         break;
     case AVMEDIA_TYPE_VIDEO:
         need_reinit |= ifp->width  != frame->width ||
-                       ifp->height != frame->height;
+                       ifp->height != frame->height ||
+                       ifp->color_space != frame->colorspace ||
+                       ifp->color_range != frame->color_range;
         break;
     }
 
-- 
2.42.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] 37+ messages in thread

* [FFmpeg-devel] [PATCH 07/25] vf_scale: use colorspace negotiation API
  2023-11-09 12:19 [FFmpeg-devel] [RFC PATCH 00/25] YUVJ removal + filter negotiation Niklas Haas
                   ` (5 preceding siblings ...)
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 06/25] fftools/ffmpeg_filter: configure buffersrc with csp/range Niklas Haas
@ 2023-11-09 12:19 ` Niklas Haas
  2023-12-07 16:02   ` Anton Khirnov
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 08/25] avfilter/vf_scale: remove YCgCo check Niklas Haas
                   ` (17 subsequent siblings)
  24 siblings, 1 reply; 37+ messages in thread
From: Niklas Haas @ 2023-11-09 12:19 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Niklas Haas

From: Niklas Haas <git@haasn.dev>

This filter will always accept any input format, even if the user sets
a specific in_range/in_color_matrix. This is to preserve status quo with
current behavior, where passing a specific in_color_matrix merely
overrides the incoming frames' attributes. (Use `vf_format` to force
a specific input range)

Because changing colorspace and color_range now requires reconfiguring
the link, we can lift sws_setColorspaceDetails out of scale_frame and
into config_props. (This will also get re-called if the input frame
properties change)
---
 libavfilter/vf_scale.c | 188 ++++++++++++++++++++++-------------------
 1 file changed, 103 insertions(+), 85 deletions(-)

diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c
index b45035907b..44dc1f2bf8 100644
--- a/libavfilter/vf_scale.c
+++ b/libavfilter/vf_scale.c
@@ -143,7 +143,6 @@ typedef struct ScaleContext {
     int out_color_matrix;
 
     int in_range;
-    int in_frame_range;
     int out_range;
 
     int out_h_chr_pos;
@@ -292,6 +291,18 @@ static av_cold int preinit(AVFilterContext *ctx)
     return 0;
 }
 
+static const int sws_colorspaces[] = {
+    AVCOL_SPC_UNSPECIFIED,
+    AVCOL_SPC_RGB,
+    AVCOL_SPC_BT709,
+    AVCOL_SPC_BT470BG,
+    AVCOL_SPC_SMPTE170M,
+    AVCOL_SPC_FCC,
+    AVCOL_SPC_SMPTE240M,
+    AVCOL_SPC_BT2020_NCL,
+    -1
+};
+
 static av_cold int init(AVFilterContext *ctx)
 {
     ScaleContext *scale = ctx->priv;
@@ -332,6 +343,19 @@ static av_cold int init(AVFilterContext *ctx)
     if (ret < 0)
         return ret;
 
+    if (scale->in_color_matrix != -1 &&
+        !ff_fmt_is_in(scale->in_color_matrix, sws_colorspaces)) {
+        av_log(ctx, AV_LOG_ERROR, "Unsupported input color matrix '%s'\n",
+               av_color_space_name(scale->in_color_matrix));
+        return AVERROR(EINVAL);
+    }
+
+    if (!ff_fmt_is_in(scale->out_color_matrix, sws_colorspaces)) {
+        av_log(ctx, AV_LOG_ERROR, "Unsupported output color matrix '%s'\n",
+               av_color_space_name(scale->out_color_matrix));
+        return AVERROR(EINVAL);
+    }
+
     av_log(ctx, AV_LOG_VERBOSE, "w:%s h:%s flags:'%s' interl:%d\n",
            scale->w_expr, scale->h_expr, (char *)av_x_if_null(scale->flags_str, ""), scale->interlaced);
 
@@ -356,8 +380,6 @@ static av_cold int init(AVFilterContext *ctx)
     if (!threads)
         av_opt_set_int(scale->sws_opts, "threads", ff_filter_get_nb_threads(ctx), 0);
 
-    scale->in_frame_range = AVCOL_RANGE_UNSPECIFIED;
-
     return 0;
 }
 
@@ -376,6 +398,7 @@ static av_cold void uninit(AVFilterContext *ctx)
 
 static int query_formats(AVFilterContext *ctx)
 {
+    ScaleContext *scale = ctx->priv;
     AVFilterFormats *formats;
     const AVPixFmtDescriptor *desc;
     enum AVPixelFormat pix_fmt;
@@ -407,6 +430,28 @@ static int query_formats(AVFilterContext *ctx)
     if ((ret = ff_formats_ref(formats, &ctx->outputs[0]->incfg.formats)) < 0)
         return ret;
 
+    /* accept all supported inputs, even if user overrides their properties */
+    if ((ret = ff_formats_ref(ff_make_format_list(sws_colorspaces),
+                              &ctx->inputs[0]->outcfg.color_spaces)) < 0)
+        return ret;
+
+    if ((ret = ff_formats_ref(ff_all_color_ranges(),
+                              &ctx->inputs[0]->outcfg.color_ranges)) < 0)
+        return ret;
+
+    /* propagate output properties if overridden */
+    formats = scale->out_color_matrix != AVCOL_SPC_UNSPECIFIED
+                ? ff_make_formats_list_singleton(scale->out_color_matrix)
+                : ff_make_format_list(sws_colorspaces);
+    if ((ret = ff_formats_ref(formats, &ctx->outputs[0]->incfg.color_spaces)) < 0)
+        return ret;
+
+    formats = scale->out_range != AVCOL_RANGE_UNSPECIFIED
+                ? ff_make_formats_list_singleton(scale->out_range)
+                : ff_all_color_ranges();
+    if ((ret = ff_formats_ref(formats, &ctx->outputs[0]->incfg.color_ranges)) < 0)
+        return ret;
+
     return 0;
 }
 
@@ -497,6 +542,7 @@ static int config_props(AVFilterLink *outlink)
     const AVPixFmtDescriptor *outdesc = av_pix_fmt_desc_get(outfmt);
     ScaleContext *scale = ctx->priv;
     uint8_t *flags_val = NULL;
+    int in_range, in_colorspace;
     int ret;
 
     if ((ret = scale_eval_dimensions(ctx)) < 0)
@@ -521,6 +567,14 @@ static int config_props(AVFilterLink *outlink)
     if (outfmt == AV_PIX_FMT_PAL8) outfmt = AV_PIX_FMT_BGR8;
     scale->output_is_pal = av_pix_fmt_desc_get(outfmt)->flags & AV_PIX_FMT_FLAG_PAL;
 
+    in_range = scale->in_range;
+    if (in_range == AVCOL_RANGE_UNSPECIFIED)
+        in_range = inlink0->color_range;
+
+    in_colorspace = scale->in_color_matrix;
+    if (in_colorspace == -1 /* auto */)
+        in_colorspace = inlink0->colorspace;
+
     if (scale->sws)
         sws_freeContext(scale->sws);
     if (scale->isws[0])
@@ -530,8 +584,8 @@ static int config_props(AVFilterLink *outlink)
     scale->isws[0] = scale->isws[1] = scale->sws = NULL;
     if (inlink0->w == outlink->w &&
         inlink0->h == outlink->h &&
-        scale->out_color_matrix == AVCOL_SPC_UNSPECIFIED &&
-        scale->in_range == scale->out_range &&
+        in_range == outlink->color_range &&
+        in_colorspace == outlink->colorspace &&
         inlink0->format == outlink->format)
         ;
     else {
@@ -540,6 +594,8 @@ static int config_props(AVFilterLink *outlink)
 
         for (i = 0; i < 3; i++) {
             int in_v_chr_pos = scale->in_v_chr_pos, out_v_chr_pos = scale->out_v_chr_pos;
+            int in_full, out_full, brightness, contrast, saturation;
+            const int *inv_table, *table;
             struct SwsContext *const s = sws_alloc_context();
             if (!s)
                 return AVERROR(ENOMEM);
@@ -555,15 +611,12 @@ static int config_props(AVFilterLink *outlink)
             av_opt_set_int(s, "dstw", outlink->w, 0);
             av_opt_set_int(s, "dsth", outlink->h >> !!i, 0);
             av_opt_set_int(s, "dst_format", outfmt, 0);
-            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)
+            if (in_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)
+                               in_range == AVCOL_RANGE_JPEG, 0);
+            if (outlink->color_range != AVCOL_RANGE_UNSPECIFIED)
                 av_opt_set_int(s, "dst_range",
-                               scale->out_range == AVCOL_RANGE_JPEG, 0);
+                               outlink->color_range == AVCOL_RANGE_JPEG, 0);
 
             /* Override chroma location default settings to have the correct
              * chroma positions. MPEG chroma positions are used by convention.
@@ -584,6 +637,24 @@ static int config_props(AVFilterLink *outlink)
 
             if ((ret = sws_init_context(s, NULL, NULL)) < 0)
                 return ret;
+
+            sws_getColorspaceDetails(s, (int **)&inv_table, &in_full,
+                                     (int **)&table, &out_full,
+                                     &brightness, &contrast, &saturation);
+
+            if (scale->in_color_matrix == -1 /* auto */)
+                inv_table = sws_getCoefficients(inlink0->colorspace);
+            else if (scale->in_color_matrix != AVCOL_SPC_UNSPECIFIED)
+                inv_table = sws_getCoefficients(scale->in_color_matrix);
+            if (outlink->colorspace != AVCOL_SPC_UNSPECIFIED)
+                table = sws_getCoefficients(outlink->colorspace);
+            else if (scale->in_color_matrix != AVCOL_SPC_UNSPECIFIED)
+                table = inv_table;
+
+            sws_setColorspaceDetails(s, inv_table, in_full,
+                                     table, out_full,
+                                     brightness, contrast, saturation);
+
             if (!scale->interlaced)
                 break;
         }
@@ -597,10 +668,12 @@ static int config_props(AVFilterLink *outlink)
     if (scale->sws)
         av_opt_get(scale->sws, "sws_flags", 0, &flags_val);
 
-    av_log(ctx, AV_LOG_VERBOSE, "w:%d h:%d fmt:%s sar:%d/%d -> w:%d h:%d fmt:%s sar:%d/%d flags:%s\n",
+    av_log(ctx, AV_LOG_VERBOSE, "w:%d h:%d fmt:%s csp:%s range:%s sar:%d/%d -> w:%d h:%d fmt:%s csp:%s range:%s sar:%d/%d flags:%s\n",
            inlink ->w, inlink ->h, av_get_pix_fmt_name( inlink->format),
+           av_color_space_name(inlink->colorspace), av_color_range_name(inlink->color_range),
            inlink->sample_aspect_ratio.num, inlink->sample_aspect_ratio.den,
            outlink->w, outlink->h, av_get_pix_fmt_name(outlink->format),
+           av_color_space_name(outlink->colorspace), av_color_range_name(outlink->color_range),
            outlink->sample_aspect_ratio.num, outlink->sample_aspect_ratio.den,
            flags_val);
     av_freep(&flags_val);
@@ -620,6 +693,8 @@ static int config_props_ref(AVFilterLink *outlink)
     outlink->sample_aspect_ratio = inlink->sample_aspect_ratio;
     outlink->time_base = inlink->time_base;
     outlink->frame_rate = inlink->frame_rate;
+    outlink->colorspace = inlink->colorspace;
+    outlink->color_range = inlink->color_range;
 
     return 0;
 }
@@ -693,7 +768,6 @@ static int scale_frame(AVFilterLink *link, AVFrame *in, AVFrame **frame_out)
     const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(link->format);
     char buf[32];
     int ret;
-    int in_range;
     int frame_changed;
 
     *frame_out = NULL;
@@ -704,14 +778,9 @@ static int scale_frame(AVFilterLink *link, AVFrame *in, AVFrame **frame_out)
                     in->height != link->h ||
                     in->format != link->format ||
                     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;
-    }
+                    in->sample_aspect_ratio.num != link->sample_aspect_ratio.num ||
+                    in->colorspace != link->colorspace ||
+                    in->color_range != link->color_range;
 
     if (scale->eval_mode == EVAL_MODE_FRAME || frame_changed) {
         unsigned vars_w[VARS_NB] = { 0 }, vars_h[VARS_NB] = { 0 };
@@ -768,9 +837,11 @@ FF_ENABLE_DEPRECATION_WARNINGS
 #endif
         }
 
-        link->dst->inputs[0]->format = in->format;
-        link->dst->inputs[0]->w      = in->width;
-        link->dst->inputs[0]->h      = in->height;
+        link->dst->inputs[0]->format        = in->format;
+        link->dst->inputs[0]->w             = in->width;
+        link->dst->inputs[0]->h             = in->height;
+        link->dst->inputs[0]->colorspace    = in->colorspace;
+        link->dst->inputs[0]->color_range   = in->color_range;
 
         link->dst->inputs[0]->sample_aspect_ratio.den = in->sample_aspect_ratio.den;
         link->dst->inputs[0]->sample_aspect_ratio.num = in->sample_aspect_ratio.num;
@@ -798,69 +869,12 @@ scale:
     av_frame_copy_props(out, in);
     out->width  = outlink->w;
     out->height = outlink->h;
+    out->color_range = outlink->color_range;
+    out->colorspace = outlink->colorspace;
 
     if (scale->output_is_pal)
         avpriv_set_systematic_pal2((uint32_t*)out->data[1], outlink->format == AV_PIX_FMT_PAL8 ? AV_PIX_FMT_BGR8 : outlink->format);
 
-    in_range = in->color_range;
-
-    if (   scale->in_color_matrix != AVCOL_SPC_UNSPECIFIED
-        || scale->out_color_matrix != AVCOL_SPC_UNSPECIFIED
-        || scale-> in_range != AVCOL_RANGE_UNSPECIFIED
-        || in_range != AVCOL_RANGE_UNSPECIFIED
-        || scale->out_range != AVCOL_RANGE_UNSPECIFIED) {
-        int in_full, out_full, brightness, contrast, saturation;
-        const int *inv_table, *table;
-
-        sws_getColorspaceDetails(scale->sws, (int **)&inv_table, &in_full,
-                                 (int **)&table, &out_full,
-                                 &brightness, &contrast, &saturation);
-
-        if (scale->in_color_matrix == -1 /* auto */)
-            inv_table = sws_getCoefficients(in->colorspace);
-        else if (scale->in_color_matrix != AVCOL_SPC_UNSPECIFIED)
-            inv_table = sws_getCoefficients(scale->in_color_matrix);
-        if (scale->out_color_matrix != AVCOL_SPC_UNSPECIFIED)
-            table     = sws_getCoefficients(scale->out_color_matrix);
-        else if (scale->in_color_matrix != AVCOL_SPC_UNSPECIFIED)
-            table = inv_table;
-
-        if (scale-> in_range != AVCOL_RANGE_UNSPECIFIED)
-            in_full  = (scale-> in_range == AVCOL_RANGE_JPEG);
-        else if (in_range != AVCOL_RANGE_UNSPECIFIED)
-            in_full  = (in_range == AVCOL_RANGE_JPEG);
-        if (scale->out_range != AVCOL_RANGE_UNSPECIFIED)
-            out_full = (scale->out_range == AVCOL_RANGE_JPEG);
-
-        sws_setColorspaceDetails(scale->sws, inv_table, in_full,
-                                 table, out_full,
-                                 brightness, contrast, saturation);
-        if (scale->isws[0])
-            sws_setColorspaceDetails(scale->isws[0], inv_table, in_full,
-                                     table, out_full,
-                                     brightness, contrast, saturation);
-        if (scale->isws[1])
-            sws_setColorspaceDetails(scale->isws[1], inv_table, in_full,
-                                     table, out_full,
-                                     brightness, contrast, saturation);
-
-        out->color_range = out_full ? AVCOL_RANGE_JPEG : AVCOL_RANGE_MPEG;
-        if (scale->out_color_matrix != AVCOL_SPC_UNSPECIFIED)
-            out->colorspace = scale->out_color_matrix;
-    }
-
-    // Sanity checks:
-    //   1. If the output is RGB, set the matrix coefficients to RGB.
-    //   2. If the output is not RGB and we've got the RGB/XYZ (identity)
-    //      matrix configured, unset the matrix.
-    //   In theory these should be in swscale itself as the AVFrame
-    //   based API gets in, so that not every swscale API user has
-    //   to go through duplicating such sanity checks.
-    if (av_pix_fmt_desc_get(out->format)->flags & AV_PIX_FMT_FLAG_RGB)
-        out->colorspace = AVCOL_SPC_RGB;
-    else if (out->colorspace == AVCOL_SPC_RGB)
-        out->colorspace = AVCOL_SPC_UNSPECIFIED;
-
     av_reduce(&out->sample_aspect_ratio.num, &out->sample_aspect_ratio.den,
               (int64_t)in->sample_aspect_ratio.num * outlink->h * link->w,
               (int64_t)in->sample_aspect_ratio.den * outlink->w * link->h,
@@ -905,7 +919,9 @@ static int filter_frame_ref(AVFilterLink *link, AVFrame *in)
                     in->height != link->h ||
                     in->format != link->format ||
                     in->sample_aspect_ratio.den != link->sample_aspect_ratio.den ||
-                    in->sample_aspect_ratio.num != link->sample_aspect_ratio.num;
+                    in->sample_aspect_ratio.num != link->sample_aspect_ratio.num ||
+                    in->colorspace != link->colorspace ||
+                    in->color_range != link->color_range;
 
     if (frame_changed) {
         link->format = in->format;
@@ -913,6 +929,8 @@ static int filter_frame_ref(AVFilterLink *link, AVFrame *in)
         link->h = in->height;
         link->sample_aspect_ratio.num = in->sample_aspect_ratio.num;
         link->sample_aspect_ratio.den = in->sample_aspect_ratio.den;
+        link->colorspace = in->colorspace;
+        link->color_range = in->color_range;
 
         config_props_ref(outlink);
     }
-- 
2.42.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] 37+ messages in thread

* [FFmpeg-devel] [PATCH 08/25] avfilter/vf_scale: remove YCgCo check
  2023-11-09 12:19 [FFmpeg-devel] [RFC PATCH 00/25] YUVJ removal + filter negotiation Niklas Haas
                   ` (6 preceding siblings ...)
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 07/25] vf_scale: use colorspace negotiation API Niklas Haas
@ 2023-11-09 12:19 ` Niklas Haas
  2023-12-07 16:04   ` Anton Khirnov
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 09/25] avfilter/vf_zscale: remove unused variables Niklas Haas
                   ` (16 subsequent siblings)
  24 siblings, 1 reply; 37+ messages in thread
From: Niklas Haas @ 2023-11-09 12:19 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Niklas Haas

From: Niklas Haas <git@haasn.dev>

This is never avertised as supported to upstream filters.
---
 libavfilter/vf_scale.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c
index 44dc1f2bf8..dbe380d4c0 100644
--- a/libavfilter/vf_scale.c
+++ b/libavfilter/vf_scale.c
@@ -771,9 +771,6 @@ static int scale_frame(AVFilterLink *link, AVFrame *in, AVFrame **frame_out)
     int frame_changed;
 
     *frame_out = NULL;
-    if (in->colorspace == AVCOL_SPC_YCGCO)
-        av_log(link->dst, AV_LOG_WARNING, "Detected unsupported YCgCo colorspace.\n");
-
     frame_changed = in->width  != link->w ||
                     in->height != link->h ||
                     in->format != link->format ||
-- 
2.42.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] 37+ messages in thread

* [FFmpeg-devel] [PATCH 09/25] avfilter/vf_zscale: remove unused variables
  2023-11-09 12:19 [FFmpeg-devel] [RFC PATCH 00/25] YUVJ removal + filter negotiation Niklas Haas
                   ` (7 preceding siblings ...)
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 08/25] avfilter/vf_scale: remove YCgCo check Niklas Haas
@ 2023-11-09 12:19 ` Niklas Haas
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 10/25] avfilter/vf_zscale: switch to colorspace negotiation API Niklas Haas
                   ` (15 subsequent siblings)
  24 siblings, 0 replies; 37+ messages in thread
From: Niklas Haas @ 2023-11-09 12:19 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Niklas Haas

From: Niklas Haas <git@haasn.dev>

Only assigned, never read.
---
 libavfilter/vf_zscale.c | 15 ---------------
 1 file changed, 15 deletions(-)

diff --git a/libavfilter/vf_zscale.c b/libavfilter/vf_zscale.c
index 788870ffaf..f76c9954cd 100644
--- a/libavfilter/vf_zscale.c
+++ b/libavfilter/vf_zscale.c
@@ -132,12 +132,6 @@ typedef struct ZScaleContext {
     zimg_graph_builder_params alpha_params, params;
     zimg_graph_builder_params alpha_params_tmp, params_tmp;
     zimg_filter_graph *alpha_graph[MAX_THREADS], *graph[MAX_THREADS];
-
-    enum AVColorSpace in_colorspace, out_colorspace;
-    enum AVColorTransferCharacteristic in_trc, out_trc;
-    enum AVColorPrimaries in_primaries, out_primaries;
-    enum AVColorRange in_range, out_range;
-    enum AVChromaLocation in_chromal, out_chromal;
 } ZScaleContext;
 
 typedef struct ThreadData {
@@ -816,15 +810,6 @@ static int filter_frame(AVFilterLink *link, AVFrame *in)
         link->dst->inputs[0]->h      = in->height;
 
         s->nb_threads = av_clip(FFMIN(ff_filter_get_nb_threads(ctx), FFMIN(link->h, outlink->h) / MIN_TILESIZE), 1, MAX_THREADS);
-        s->in_colorspace = in->colorspace;
-        s->in_trc = in->color_trc;
-        s->in_primaries = in->color_primaries;
-        s->in_range = in->color_range;
-        s->out_colorspace = out->colorspace;
-        s->out_trc = out->color_trc;
-        s->out_primaries = out->color_primaries;
-        s->out_range = out->color_range;
-
         slice_params(s, out->height, in->height);
 
         zimg_image_format_default(&s->src_format, ZIMG_API_VERSION);
-- 
2.42.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] 37+ messages in thread

* [FFmpeg-devel] [PATCH 10/25] avfilter/vf_zscale: switch to colorspace negotiation API
  2023-11-09 12:19 [FFmpeg-devel] [RFC PATCH 00/25] YUVJ removal + filter negotiation Niklas Haas
                   ` (8 preceding siblings ...)
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 09/25] avfilter/vf_zscale: remove unused variables Niklas Haas
@ 2023-11-09 12:19 ` Niklas Haas
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 11/25] avfilter/vf_libplacebo: don't force dovi frames to bt.2020-ncl Niklas Haas
                   ` (14 subsequent siblings)
  24 siblings, 0 replies; 37+ messages in thread
From: Niklas Haas @ 2023-11-09 12:19 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Niklas Haas

From: Niklas Haas <git@haasn.dev>

Following the same design as vf_scale.
---
 libavfilter/vf_zscale.c | 44 +++++++++++++++++++++++++++++++----------
 1 file changed, 34 insertions(+), 10 deletions(-)

diff --git a/libavfilter/vf_zscale.c b/libavfilter/vf_zscale.c
index f76c9954cd..3b14ce4f33 100644
--- a/libavfilter/vf_zscale.c
+++ b/libavfilter/vf_zscale.c
@@ -187,8 +187,12 @@ static av_cold int init(AVFilterContext *ctx)
     return 0;
 }
 
+static enum AVColorRange convert_range_from_zimg(enum zimg_pixel_range_e color_range);
+
 static int query_formats(AVFilterContext *ctx)
 {
+    ZScaleContext *s = ctx->priv;
+    AVFilterFormats *formats;
     static const enum AVPixelFormat pixel_fmts[] = {
         AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
         AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
@@ -217,7 +221,27 @@ static int query_formats(AVFilterContext *ctx)
     ret = ff_formats_ref(ff_make_format_list(pixel_fmts), &ctx->inputs[0]->outcfg.formats);
     if (ret < 0)
         return ret;
-    return ff_formats_ref(ff_make_format_list(pixel_fmts), &ctx->outputs[0]->incfg.formats);
+    ret = ff_formats_ref(ff_make_format_list(pixel_fmts), &ctx->outputs[0]->incfg.formats);
+    if (ret < 0)
+        return ret;
+
+    if ((ret = ff_formats_ref(ff_all_color_spaces(), &ctx->inputs[0]->outcfg.formats)) < 0 ||
+        (ret = ff_formats_ref(ff_all_color_ranges(), &ctx->inputs[0]->outcfg.formats)) < 0)
+        return ret;
+
+    formats = s->colorspace != ZIMG_MATRIX_UNSPECIFIED && s->colorspace > 0
+        ? ff_make_formats_list_singleton(s->colorspace)
+        : ff_all_color_spaces();
+    if ((ret = ff_formats_ref(formats, &ctx->outputs[0]->incfg.formats)) < 0)
+        return ret;
+
+    formats = s->range != -1
+        ? ff_make_formats_list_singleton(convert_range_from_zimg(s->range))
+        : ff_all_color_ranges();
+    if ((ret = ff_formats_ref(formats, &ctx->outputs[0]->incfg.formats)) < 0)
+        return ret;
+
+    return 0;
 }
 
 static void slice_params(ZScaleContext *s, int out_h, int in_h)
@@ -678,15 +702,9 @@ fail:
 
 static void update_output_color_information(ZScaleContext *s, AVFrame *frame)
 {
-    if (s->colorspace != -1)
-        frame->colorspace = (int)s->dst_format.matrix_coefficients;
-
     if (s->primaries != -1)
         frame->color_primaries = (int)s->dst_format.color_primaries;
 
-    if (s->range != -1)
-        frame->color_range = convert_range_from_zimg(s->dst_format.pixel_range);
-
     if (s->trc != -1)
         frame->color_trc = (int)s->dst_format.transfer_characteristics;
 
@@ -775,6 +793,8 @@ static int filter_frame(AVFilterLink *link, AVFrame *in)
     if ((link->format != outlink->format) ||
         (link->w != outlink->w) ||
         (link->h != outlink->h) ||
+        (link->colorspace != outlink->colorspace) ||
+        (link->color_range != outlink->color_range) ||
         s->first_time ||
         (s->src_format.chroma_location != s->dst_format.chroma_location) ||
         (s->src_format.color_family !=s->dst_format.color_family) ||
@@ -796,6 +816,8 @@ static int filter_frame(AVFilterLink *link, AVFrame *in)
             goto fail;
 
         av_frame_copy_props(out, in);
+        out->colorspace = outlink->colorspace;
+        out->color_range = outlink->color_range;
 
         if ((ret = realign_frame(desc, &in, 1)) < 0)
             goto fail;
@@ -805,9 +827,11 @@ static int filter_frame(AVFilterLink *link, AVFrame *in)
         snprintf(buf, sizeof(buf)-1, "%d", outlink->h);
         av_opt_set(s, "h", buf, 0);
 
-        link->dst->inputs[0]->format = in->format;
-        link->dst->inputs[0]->w      = in->width;
-        link->dst->inputs[0]->h      = in->height;
+        link->dst->inputs[0]->format      = in->format;
+        link->dst->inputs[0]->w           = in->width;
+        link->dst->inputs[0]->h           = in->height;
+        link->dst->inputs[0]->colorspace  = in->colorspace;
+        link->dst->inputs[0]->color_range = in->color_range;
 
         s->nb_threads = av_clip(FFMIN(ff_filter_get_nb_threads(ctx), FFMIN(link->h, outlink->h) / MIN_TILESIZE), 1, MAX_THREADS);
         slice_params(s, out->height, in->height);
-- 
2.42.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] 37+ messages in thread

* [FFmpeg-devel] [PATCH 11/25] avfilter/vf_libplacebo: don't force dovi frames to bt.2020-ncl
  2023-11-09 12:19 [FFmpeg-devel] [RFC PATCH 00/25] YUVJ removal + filter negotiation Niklas Haas
                   ` (9 preceding siblings ...)
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 10/25] avfilter/vf_zscale: switch to colorspace negotiation API Niklas Haas
@ 2023-11-09 12:19 ` Niklas Haas
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 12/25] avfilter/vf_libplacebo: switch to colorspace negotiation API Niklas Haas
                   ` (13 subsequent siblings)
  24 siblings, 0 replies; 37+ messages in thread
From: Niklas Haas @ 2023-11-09 12:19 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Niklas Haas

From: Niklas Haas <git@haasn.dev>

This is at odds with the YUV matrix negotiation API, in which such
dynamic changes in YUV encoding are no longer easily possible. There is
also no really strong motivating reason to do this, since the choice of
YUV matrix is essentially arbitrary and not actually related to the
Dolby Vision decoding process.
---
 libavfilter/vf_libplacebo.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c
index 8534945ba6..b6e82a61e0 100644
--- a/libavfilter/vf_libplacebo.c
+++ b/libavfilter/vf_libplacebo.c
@@ -888,7 +888,6 @@ static int output_frame(AVFilterContext *ctx, int64_t pts)
     if (s->apply_dovi && av_frame_get_side_data(ref, AV_FRAME_DATA_DOVI_METADATA)) {
         /* Output of dovi reshaping is always BT.2020+PQ, so infer the correct
          * output colorspace defaults */
-        out->colorspace = AVCOL_SPC_BT2020_NCL;
         out->color_primaries = AVCOL_PRI_BT2020;
         out->color_trc = AVCOL_TRC_SMPTE2084;
     }
-- 
2.42.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] 37+ messages in thread

* [FFmpeg-devel] [PATCH 12/25] avfilter/vf_libplacebo: switch to colorspace negotiation API
  2023-11-09 12:19 [FFmpeg-devel] [RFC PATCH 00/25] YUVJ removal + filter negotiation Niklas Haas
                   ` (10 preceding siblings ...)
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 11/25] avfilter/vf_libplacebo: don't force dovi frames to bt.2020-ncl Niklas Haas
@ 2023-11-09 12:19 ` Niklas Haas
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 13/25] avfilter/buffersink: add color space/range accessors Niklas Haas
                   ` (12 subsequent siblings)
  24 siblings, 0 replies; 37+ messages in thread
From: Niklas Haas @ 2023-11-09 12:19 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Niklas Haas

From: Niklas Haas <git@haasn.dev>

---
 libavfilter/vf_libplacebo.c | 25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/libavfilter/vf_libplacebo.c b/libavfilter/vf_libplacebo.c
index b6e82a61e0..a9a3d884ce 100644
--- a/libavfilter/vf_libplacebo.c
+++ b/libavfilter/vf_libplacebo.c
@@ -882,6 +882,8 @@ static int output_frame(AVFilterContext *ctx, int64_t pts)
     out->pts = pts;
     out->width = outlink->w;
     out->height = outlink->h;
+    out->colorspace = outlink->colorspace;
+    out->color_range = outlink->color_range;
     if (s->fps.num)
         out->duration = 1;
 
@@ -892,22 +894,11 @@ static int output_frame(AVFilterContext *ctx, int64_t pts)
         out->color_trc = AVCOL_TRC_SMPTE2084;
     }
 
-    if (s->colorspace >= 0)
-        out->colorspace = s->colorspace;
-    if (s->color_range >= 0)
-        out->color_range = s->color_range;
     if (s->color_trc >= 0)
         out->color_trc = s->color_trc;
     if (s->color_primaries >= 0)
         out->color_primaries = s->color_primaries;
 
-    /* Sanity colorspace overrides */
-    if (outdesc->flags & AV_PIX_FMT_FLAG_RGB) {
-        out->colorspace = AVCOL_SPC_RGB;
-    } else if (out->colorspace == AVCOL_SPC_RGB) {
-        out->colorspace = AVCOL_SPC_UNSPECIFIED;
-    }
-
     changed_csp = ref->colorspace      != out->colorspace     ||
                   ref->color_range     != out->color_range    ||
                   ref->color_trc       != out->color_trc      ||
@@ -1203,6 +1194,18 @@ static int libplacebo_query_format(AVFilterContext *ctx)
     for (int i = 0; i < s->nb_inputs; i++)
         RET(ff_formats_ref(infmts, &ctx->inputs[i]->outcfg.formats));
     RET(ff_formats_ref(outfmts, &ctx->outputs[0]->incfg.formats));
+
+    /* Set colorspace properties */
+    RET(ff_formats_ref(ff_all_color_spaces(), &ctx->inputs[0]->outcfg.color_spaces));
+    RET(ff_formats_ref(ff_all_color_ranges(), &ctx->inputs[0]->outcfg.color_ranges));
+
+    outfmts = s->colorspace > 0 ? ff_make_formats_list_singleton(s->colorspace)
+                                : ff_all_color_spaces();
+    RET(ff_formats_ref(outfmts, &ctx->outputs[0]->incfg.color_spaces));
+
+    outfmts = s->color_range > 0 ? ff_make_formats_list_singleton(s->color_range)
+                                 : ff_all_color_ranges();
+    RET(ff_formats_ref(outfmts, &ctx->outputs[0]->incfg.color_ranges));
     return 0;
 
 fail:
-- 
2.42.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] 37+ messages in thread

* [FFmpeg-devel] [PATCH 13/25] avfilter/buffersink: add color space/range accessors
  2023-11-09 12:19 [FFmpeg-devel] [RFC PATCH 00/25] YUVJ removal + filter negotiation Niklas Haas
                   ` (11 preceding siblings ...)
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 12/25] avfilter/vf_libplacebo: switch to colorspace negotiation API Niklas Haas
@ 2023-11-09 12:19 ` Niklas Haas
  2023-12-12 13:08   ` Anton Khirnov
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 14/25] avfilter/vf_format: re-use AVFilterList for pix_fmt parsing Niklas Haas
                   ` (11 subsequent siblings)
  24 siblings, 1 reply; 37+ messages in thread
From: Niklas Haas @ 2023-11-09 12:19 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Niklas Haas

From: Niklas Haas <git@haasn.dev>

Needed for fftools.
---
 doc/APIchanges           | 3 +++
 libavfilter/buffersink.c | 2 ++
 libavfilter/buffersink.h | 2 ++
 libavfilter/version.h    | 2 +-
 4 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/doc/APIchanges b/doc/APIchanges
index ce3f90a674..97b6de8276 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -2,6 +2,9 @@ The last version increases of all libraries were on 2023-02-09
 
 API changes, most recent first:
 
+2023-11-xx - xxxxxxxxxx - lavf 58.15.100 - buffersink.h
+  Add av_buffersink_get_colorspace and av_buffersink_get_color_range.
+
 2023-11-xx - xxxxxxxxxx - lavf 58.14.100 - avfilter.h formats.h
   Add AVFilterFormatsConfig.color_spaces, AVFilterFormatsConfig.color_ranges,
   AVFilterLink.colorspace, AVFilterLink.color_range, ff_all_color_spaces,
diff --git a/libavfilter/buffersink.c b/libavfilter/buffersink.c
index ca2af1bc07..8fb9ba0fa4 100644
--- a/libavfilter/buffersink.c
+++ b/libavfilter/buffersink.c
@@ -202,6 +202,8 @@ MAKE_AVFILTERLINK_ACCESSOR(AVRational       , frame_rate         )
 MAKE_AVFILTERLINK_ACCESSOR(int              , w                  )
 MAKE_AVFILTERLINK_ACCESSOR(int              , h                  )
 MAKE_AVFILTERLINK_ACCESSOR(AVRational       , sample_aspect_ratio)
+MAKE_AVFILTERLINK_ACCESSOR(enum AVColorSpace, colorspace)
+MAKE_AVFILTERLINK_ACCESSOR(enum AVColorRange, color_range)
 
 #if FF_API_OLD_CHANNEL_LAYOUT
 FF_DISABLE_DEPRECATION_WARNINGS
diff --git a/libavfilter/buffersink.h b/libavfilter/buffersink.h
index 64e08de53e..a9374b8b4f 100644
--- a/libavfilter/buffersink.h
+++ b/libavfilter/buffersink.h
@@ -117,6 +117,8 @@ AVRational       av_buffersink_get_frame_rate          (const AVFilterContext *c
 int              av_buffersink_get_w                   (const AVFilterContext *ctx);
 int              av_buffersink_get_h                   (const AVFilterContext *ctx);
 AVRational       av_buffersink_get_sample_aspect_ratio (const AVFilterContext *ctx);
+enum AVColorSpace av_buffersink_get_colorspace         (const AVFilterContext *ctx);
+enum AVColorRange av_buffersink_get_color_range        (const AVFilterContext *ctx);
 
 int              av_buffersink_get_channels            (const AVFilterContext *ctx);
 #if FF_API_OLD_CHANNEL_LAYOUT
diff --git a/libavfilter/version.h b/libavfilter/version.h
index 7642b670d1..59330858bd 100644
--- a/libavfilter/version.h
+++ b/libavfilter/version.h
@@ -31,7 +31,7 @@
 
 #include "version_major.h"
 
-#define LIBAVFILTER_VERSION_MINOR  14
+#define LIBAVFILTER_VERSION_MINOR  15
 #define LIBAVFILTER_VERSION_MICRO 100
 
 
-- 
2.42.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] 37+ messages in thread

* [FFmpeg-devel] [PATCH 14/25] avfilter/vf_format: re-use AVFilterList for pix_fmt parsing
  2023-11-09 12:19 [FFmpeg-devel] [RFC PATCH 00/25] YUVJ removal + filter negotiation Niklas Haas
                   ` (12 preceding siblings ...)
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 13/25] avfilter/buffersink: add color space/range accessors Niklas Haas
@ 2023-11-09 12:19 ` Niklas Haas
  2023-12-13  8:48   ` Anton Khirnov
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 15/25] avfilter/vf_format: add color_ranges/spaces Niklas Haas
                   ` (10 subsequent siblings)
  24 siblings, 1 reply; 37+ messages in thread
From: Niklas Haas @ 2023-11-09 12:19 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Niklas Haas

From: Niklas Haas <git@haasn.dev>

Rewrite the format parsing code to make it more easily generalizable. In
particular, `invert_formats` does not depend on the type of format list
passed to it, which allows me to re-use this helper in an upcoming
commit.

Slightly shortens the code, at the sole cost of doing several malloc
(ff_add_format) instead of a single malloc.
---
 libavfilter/vf_format.c | 103 +++++++++++++++++-----------------------
 1 file changed, 43 insertions(+), 60 deletions(-)

diff --git a/libavfilter/vf_format.c b/libavfilter/vf_format.c
index 1189bd61c2..b137e3075e 100644
--- a/libavfilter/vf_format.c
+++ b/libavfilter/vf_format.c
@@ -41,25 +41,48 @@ typedef struct FormatContext {
     const AVClass *class;
     char *pix_fmts;
 
-    /**
-     * pix_fmts parsed into AVPixelFormats and terminated with
-     * AV_PIX_FMT_NONE
-     */
-    enum AVPixelFormat *formats;
+    AVFilterFormats *formats; ///< parsed from `pix_fmts`
 } FormatContext;
 
 static av_cold void uninit(AVFilterContext *ctx)
 {
     FormatContext *s = ctx->priv;
-    av_freep(&s->formats);
+    ff_formats_unref(&s->formats);
+}
+
+static av_cold int invert_formats(AVFilterFormats **fmts,
+                                   AVFilterFormats *allfmts)
+{
+    if (!allfmts)
+        return AVERROR(ENOMEM);
+    if (!*fmts) {
+        /* empty fmt list means no restriction, regardless of filter type */
+        ff_formats_unref(&allfmts);
+        return 0;
+    }
+
+    for (int i = 0; i < allfmts->nb_formats; i++) {
+        for (int j = 0; j < (*fmts)->nb_formats; j++) {
+            if (allfmts->formats[i] == (*fmts)->formats[j]) {
+                /* format is forbidden, remove it from allfmts list */
+                memmove(&allfmts->formats[i], &allfmts->formats[i+1],
+                        (allfmts->nb_formats - (i+1)) * sizeof(*allfmts->formats));
+                allfmts->nb_formats--;
+                i--; /* repeat loop with same idx */
+                break;
+            }
+        }
+    }
+
+    ff_formats_unref(fmts);
+    *fmts = allfmts;
+    return 0;
 }
 
 static av_cold int init(AVFilterContext *ctx)
 {
     FormatContext *s = ctx->priv;
-    char *cur, *sep;
-    int nb_formats = 1;
-    int i;
+    enum AVPixelFormat pix_fmt;
     int ret;
 
     if (!s->pix_fmts) {
@@ -67,64 +90,24 @@ static av_cold int init(AVFilterContext *ctx)
         return AVERROR(EINVAL);
     }
 
-    /* count the formats */
-    cur = s->pix_fmts;
-    while ((cur = strchr(cur, '|'))) {
-        nb_formats++;
-        if (*cur)
-            cur++;
-    }
-
-    s->formats = av_malloc_array(nb_formats + 1, sizeof(*s->formats));
-    if (!s->formats)
-        return AVERROR(ENOMEM);
-
-    /* parse the list of formats */
-    cur = s->pix_fmts;
-    for (i = 0; i < nb_formats; i++) {
+    for (char *sep, *cur = s->pix_fmts; cur; cur = sep) {
         sep = strchr(cur, '|');
-        if (sep)
+        if (sep && *sep)
             *sep++ = 0;
-
-        if ((ret = ff_parse_pixel_format(&s->formats[i], cur, ctx)) < 0)
+        if ((ret = ff_parse_pixel_format(&pix_fmt, cur, ctx)) < 0 ||
+            (ret = ff_add_format(&s->formats, pix_fmt)) < 0)
             return ret;
-
-        cur = sep;
     }
-    s->formats[nb_formats] = AV_PIX_FMT_NONE;
 
     if (!strcmp(ctx->filter->name, "noformat")) {
-        const AVPixFmtDescriptor *desc = NULL;
-        enum AVPixelFormat *formats_allowed;
-        int nb_formats_lavu = 0, nb_formats_allowed = 0;
-
-        /* count the formats known to lavu */
-        while ((desc = av_pix_fmt_desc_next(desc)))
-            nb_formats_lavu++;
-
-        formats_allowed = av_malloc_array(nb_formats_lavu + 1, sizeof(*formats_allowed));
-        if (!formats_allowed)
-            return AVERROR(ENOMEM);
-
-        /* for each format known to lavu, check if it's in the list of
-         * forbidden formats */
-        while ((desc = av_pix_fmt_desc_next(desc))) {
-            enum AVPixelFormat pix_fmt = av_pix_fmt_desc_get_id(desc);
-
-            for (i = 0; i < nb_formats; i++) {
-                if (s->formats[i] == pix_fmt)
-                    break;
-            }
-            if (i < nb_formats)
-                continue;
-
-            formats_allowed[nb_formats_allowed++] = pix_fmt;
-        }
-        formats_allowed[nb_formats_allowed] = AV_PIX_FMT_NONE;
-        av_freep(&s->formats);
-        s->formats = formats_allowed;
+        if ((ret = invert_formats(&s->formats, ff_all_formats(AVMEDIA_TYPE_VIDEO))) < 0)
+            return ret;
     }
 
+    /* hold on to a ref for the lifetime of the filter */
+    if ((ret = ff_formats_ref(s->formats, &s->formats)) < 0)
+        return ret;
+
     return 0;
 }
 
@@ -132,7 +115,7 @@ static int query_formats(AVFilterContext *ctx)
 {
     FormatContext *s = ctx->priv;
 
-    return ff_set_common_formats_from_list(ctx, s->formats);
+    return ff_set_common_formats(ctx, s->formats);
 }
 
 
-- 
2.42.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] 37+ messages in thread

* [FFmpeg-devel] [PATCH 15/25] avfilter/vf_format: add color_ranges/spaces
  2023-11-09 12:19 [FFmpeg-devel] [RFC PATCH 00/25] YUVJ removal + filter negotiation Niklas Haas
                   ` (13 preceding siblings ...)
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 14/25] avfilter/vf_format: re-use AVFilterList for pix_fmt parsing Niklas Haas
@ 2023-11-09 12:19 ` Niklas Haas
  2023-12-13 11:33   ` Anton Khirnov
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 16/25] avfilter/vf_format: allow empty pix_fmts list Niklas Haas
                   ` (9 subsequent siblings)
  24 siblings, 1 reply; 37+ messages in thread
From: Niklas Haas @ 2023-11-09 12:19 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Niklas Haas

From: Niklas Haas <git@haasn.dev>

Needed for fftools/ffmpeg_filter to be able to force specific output
formats via the filter chain.
---
 doc/filters.texi        |  8 ++++++++
 libavfilter/vf_format.c | 44 +++++++++++++++++++++++++++++++++++++----
 2 files changed, 48 insertions(+), 4 deletions(-)

diff --git a/doc/filters.texi b/doc/filters.texi
index 55a333680c..4599d575a6 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -14241,6 +14241,14 @@ It accepts the following parameters:
 A '|'-separated list of pixel format names, such as
 "pix_fmts=yuv420p|monow|rgb24".
 
+@item color_spaces
+A '|'-separated list of color space names, such as
+"color_spaces=bt709|bt470bg|bt2020nc".
+
+@item color_ranges
+A '|'-separated list of color rangee names, such as
+"color_spaces=tv|pc".
+
 @end table
 
 @subsection Examples
diff --git a/libavfilter/vf_format.c b/libavfilter/vf_format.c
index b137e3075e..d1bb9daa97 100644
--- a/libavfilter/vf_format.c
+++ b/libavfilter/vf_format.c
@@ -40,18 +40,24 @@
 typedef struct FormatContext {
     const AVClass *class;
     char *pix_fmts;
+    char *csps;
+    char *ranges;
 
     AVFilterFormats *formats; ///< parsed from `pix_fmts`
+    AVFilterFormats *color_spaces; ///< parsed from `csps`
+    AVFilterFormats *color_ranges; ///< parsed from `ranges`
 } FormatContext;
 
 static av_cold void uninit(AVFilterContext *ctx)
 {
     FormatContext *s = ctx->priv;
     ff_formats_unref(&s->formats);
+    ff_formats_unref(&s->color_spaces);
+    ff_formats_unref(&s->color_ranges);
 }
 
 static av_cold int invert_formats(AVFilterFormats **fmts,
-                                   AVFilterFormats *allfmts)
+                                  AVFilterFormats *allfmts)
 {
     if (!allfmts)
         return AVERROR(ENOMEM);
@@ -99,13 +105,35 @@ static av_cold int init(AVFilterContext *ctx)
             return ret;
     }
 
+    for (char *sep, *cur = s->csps; cur; cur = sep) {
+        sep = strchr(cur, '|');
+        if (sep && *sep)
+            *sep++ = 0;
+        if ((ret = av_color_space_from_name(cur)) < 0 ||
+            (ret = ff_add_format(&s->color_spaces, ret)) < 0)
+            return ret;
+    }
+
+    for (char *sep, *cur = s->ranges; cur; cur = sep) {
+        sep = strchr(cur, '|');
+        if (sep && *sep)
+            *sep++ = 0;
+        if ((ret = av_color_range_from_name(cur)) < 0 ||
+            (ret = ff_add_format(&s->color_ranges, ret)) < 0)
+            return ret;
+    }
+
     if (!strcmp(ctx->filter->name, "noformat")) {
-        if ((ret = invert_formats(&s->formats, ff_all_formats(AVMEDIA_TYPE_VIDEO))) < 0)
+        if ((ret = invert_formats(&s->formats,      ff_all_formats(AVMEDIA_TYPE_VIDEO))) < 0 ||
+            (ret = invert_formats(&s->color_spaces, ff_all_color_spaces())) < 0 ||
+            (ret = invert_formats(&s->color_ranges, ff_all_color_ranges())) < 0)
             return ret;
     }
 
     /* hold on to a ref for the lifetime of the filter */
-    if ((ret = ff_formats_ref(s->formats, &s->formats)) < 0)
+    if ((ret = ff_formats_ref(s->formats, &s->formats)) < 0 ||
+        s->color_spaces && (ret = ff_formats_ref(s->color_spaces, &s->color_spaces)) < 0 ||
+        s->color_ranges && (ret = ff_formats_ref(s->color_ranges, &s->color_ranges)) < 0)
         return ret;
 
     return 0;
@@ -114,14 +142,22 @@ static av_cold int init(AVFilterContext *ctx)
 static int query_formats(AVFilterContext *ctx)
 {
     FormatContext *s = ctx->priv;
+    int ret;
+
+    if ((ret = ff_set_common_formats(ctx, s->formats)) < 0 ||
+        s->color_spaces && (ret = ff_set_common_color_spaces(ctx, s->color_spaces)) < 0 ||
+        s->color_ranges && (ret = ff_set_common_color_ranges(ctx, s->color_ranges)) < 0)
+        return ret;
 
-    return ff_set_common_formats(ctx, s->formats);
+    return 0;
 }
 
 
 #define OFFSET(x) offsetof(FormatContext, x)
 static const AVOption options[] = {
     { "pix_fmts", "A '|'-separated list of pixel formats", OFFSET(pix_fmts), AV_OPT_TYPE_STRING, .flags = AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_FILTERING_PARAM },
+    { "color_spaces", "A '|'-separated list of color spaces", OFFSET(csps), AV_OPT_TYPE_STRING, .flags = AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_FILTERING_PARAM },
+    { "color_ranges", "A '|'-separated list of color ranges", OFFSET(ranges), AV_OPT_TYPE_STRING, .flags = AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_FILTERING_PARAM },
     { NULL }
 };
 
-- 
2.42.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] 37+ messages in thread

* [FFmpeg-devel] [PATCH 16/25] avfilter/vf_format: allow empty pix_fmts list
  2023-11-09 12:19 [FFmpeg-devel] [RFC PATCH 00/25] YUVJ removal + filter negotiation Niklas Haas
                   ` (14 preceding siblings ...)
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 15/25] avfilter/vf_format: add color_ranges/spaces Niklas Haas
@ 2023-11-09 12:19 ` Niklas Haas
  2023-12-13 11:38   ` Anton Khirnov
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 17/25] avcodec: add YUV color space metadata to AVCodec Niklas Haas
                   ` (8 subsequent siblings)
  24 siblings, 1 reply; 37+ messages in thread
From: Niklas Haas @ 2023-11-09 12:19 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Niklas Haas

From: Niklas Haas <git@haasn.dev>

Which will impose no restriction. This makes sense when using e.g.
`color_ranges=pc` to limit the color range, without also limiting the
pixel format.
---
 libavfilter/vf_format.c | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/libavfilter/vf_format.c b/libavfilter/vf_format.c
index d1bb9daa97..3a353bbb0d 100644
--- a/libavfilter/vf_format.c
+++ b/libavfilter/vf_format.c
@@ -91,11 +91,6 @@ static av_cold int init(AVFilterContext *ctx)
     enum AVPixelFormat pix_fmt;
     int ret;
 
-    if (!s->pix_fmts) {
-        av_log(ctx, AV_LOG_ERROR, "Empty output format string.\n");
-        return AVERROR(EINVAL);
-    }
-
     for (char *sep, *cur = s->pix_fmts; cur; cur = sep) {
         sep = strchr(cur, '|');
         if (sep && *sep)
@@ -131,7 +126,7 @@ static av_cold int init(AVFilterContext *ctx)
     }
 
     /* hold on to a ref for the lifetime of the filter */
-    if ((ret = ff_formats_ref(s->formats, &s->formats)) < 0 ||
+    if (s->formats      && (ret = ff_formats_ref(s->formats,      &s->formats)) < 0 ||
         s->color_spaces && (ret = ff_formats_ref(s->color_spaces, &s->color_spaces)) < 0 ||
         s->color_ranges && (ret = ff_formats_ref(s->color_ranges, &s->color_ranges)) < 0)
         return ret;
@@ -144,7 +139,7 @@ static int query_formats(AVFilterContext *ctx)
     FormatContext *s = ctx->priv;
     int ret;
 
-    if ((ret = ff_set_common_formats(ctx, s->formats)) < 0 ||
+    if (s->formats      && (ret = ff_set_common_formats(ctx,      s->formats)) < 0 ||
         s->color_spaces && (ret = ff_set_common_color_spaces(ctx, s->color_spaces)) < 0 ||
         s->color_ranges && (ret = ff_set_common_color_ranges(ctx, s->color_ranges)) < 0)
         return ret;
-- 
2.42.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] 37+ messages in thread

* [FFmpeg-devel] [PATCH 17/25] avcodec: add YUV color space metadata to AVCodec
  2023-11-09 12:19 [FFmpeg-devel] [RFC PATCH 00/25] YUVJ removal + filter negotiation Niklas Haas
                   ` (15 preceding siblings ...)
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 16/25] avfilter/vf_format: allow empty pix_fmts list Niklas Haas
@ 2023-11-09 12:19 ` Niklas Haas
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 18/25] lavc: set color_ranges for YUVJ-only codecs Niklas Haas
                   ` (7 subsequent siblings)
  24 siblings, 0 replies; 37+ messages in thread
From: Niklas Haas @ 2023-11-09 12:19 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Niklas Haas

From: Niklas Haas <git@haasn.dev>

This is motivated primarily by a desire for YUVJ removal, which will
require signalling the supported color ranges as part of the codec
capabilities. But since we're adding YUV range, we might as well add the
YUV color matrix as well - since some codecs (e.g. VP8, JPEG) only
support certain values.

I decided to preserve the ambiguous and misleading "color_spaces" name,
for symmetry with AVFrame.colorspace. (Though this would IMO be better
called "color_matrix" or "color_system")

I also decided to omit the other AVColor* fields for now, because
vf_scale cannot handle auto-conversion between primaries/transfer/etc.
There is little value in adding metadata we cannot do anything with, and
no harm in extending the API again in the future. In theory, vf_scale
can handle conversion between chroma locations, but also the signalling
for this is annoying, so I'll defer it to a future commit.
---
 doc/APIchanges       | 3 +++
 libavcodec/codec.h   | 6 ++++++
 libavcodec/version.h | 2 +-
 3 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/doc/APIchanges b/doc/APIchanges
index 97b6de8276..87f4368e03 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -2,6 +2,9 @@ The last version increases of all libraries were on 2023-02-09
 
 API changes, most recent first:
 
+2023-11-xx - xxxxxxxxxx - lavc 60.34.100 - avcodec.h
+  Add AVCodec.color_ranges and AVCodec.color_spaces.
+
 2023-11-xx - xxxxxxxxxx - lavf 58.15.100 - buffersink.h
   Add av_buffersink_get_colorspace and av_buffersink_get_color_range.
 
diff --git a/libavcodec/codec.h b/libavcodec/codec.h
index 8034f1a53c..8bd678de7a 100644
--- a/libavcodec/codec.h
+++ b/libavcodec/codec.h
@@ -235,6 +235,12 @@ typedef struct AVCodec {
      * Array of supported channel layouts, terminated with a zeroed layout.
      */
     const AVChannelLayout *ch_layouts;
+
+    /**
+     * Array of supported YUV color formats. Ignored for RGB/Gray formats.
+     */
+    const enum AVColorRange *color_ranges; ///< terminated by AVCOL_RANGE_UNSPECIFIED
+    const enum AVColorSpace *color_spaces; ///< terminated by AVCOL_SPC_UNSPECIFIED
 } AVCodec;
 
 /**
diff --git a/libavcodec/version.h b/libavcodec/version.h
index 2a08e42d7e..0ef6c991f3 100644
--- a/libavcodec/version.h
+++ b/libavcodec/version.h
@@ -29,7 +29,7 @@
 
 #include "version_major.h"
 
-#define LIBAVCODEC_VERSION_MINOR  33
+#define LIBAVCODEC_VERSION_MINOR  34
 #define LIBAVCODEC_VERSION_MICRO 100
 
 #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
-- 
2.42.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] 37+ messages in thread

* [FFmpeg-devel] [PATCH 18/25] lavc: set color_ranges for YUVJ-only codecs
  2023-11-09 12:19 [FFmpeg-devel] [RFC PATCH 00/25] YUVJ removal + filter negotiation Niklas Haas
                   ` (16 preceding siblings ...)
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 17/25] avcodec: add YUV color space metadata to AVCodec Niklas Haas
@ 2023-11-09 12:19 ` Niklas Haas
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 19/25] (WIP) lavc: set color_ranges for MPEG-only codecs Niklas Haas
                   ` (6 subsequent siblings)
  24 siblings, 0 replies; 37+ messages in thread
From: Niklas Haas @ 2023-11-09 12:19 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Niklas Haas

From: Niklas Haas <git@haasn.dev>

Only affects amv and roqvideo. (mjpeg is handled separately by fftools)
---
 libavcodec/mjpegenc.c    | 3 +++
 libavcodec/roqvideoenc.c | 2 ++
 2 files changed, 5 insertions(+)

diff --git a/libavcodec/mjpegenc.c b/libavcodec/mjpegenc.c
index 508772987f..c827a47e59 100644
--- a/libavcodec/mjpegenc.c
+++ b/libavcodec/mjpegenc.c
@@ -685,6 +685,9 @@ const FFCodec ff_amv_encoder = {
     .p.pix_fmts     = (const enum AVPixelFormat[]) {
         AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_NONE
     },
+    .p.color_ranges = (const enum AVColorRange[]) {
+        AVCOL_RANGE_JPEG, AVCOL_RANGE_UNSPECIFIED
+    },
     .p.priv_class   = &amv_class,
     .p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
 };
diff --git a/libavcodec/roqvideoenc.c b/libavcodec/roqvideoenc.c
index 0933abf4f9..b584ee1142 100644
--- a/libavcodec/roqvideoenc.c
+++ b/libavcodec/roqvideoenc.c
@@ -1127,6 +1127,8 @@ const FFCodec ff_roq_encoder = {
     .close                = roq_encode_end,
     .p.pix_fmts           = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUVJ444P,
                                                         AV_PIX_FMT_NONE },
+    .p.color_ranges       = (const enum AVColorRange[]){ AVCOL_RANGE_JPEG,
+                                                        AVCOL_RANGE_UNSPECIFIED },
     .p.priv_class   = &roq_class,
     .caps_internal        = FF_CODEC_CAP_INIT_CLEANUP,
 };
-- 
2.42.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] 37+ messages in thread

* [FFmpeg-devel] [PATCH 19/25] (WIP) lavc: set color_ranges for MPEG-only codecs
  2023-11-09 12:19 [FFmpeg-devel] [RFC PATCH 00/25] YUVJ removal + filter negotiation Niklas Haas
                   ` (17 preceding siblings ...)
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 18/25] lavc: set color_ranges for YUVJ-only codecs Niklas Haas
@ 2023-11-09 12:19 ` Niklas Haas
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 20/25] fftools/ffmpeg_filter: simplify choose_pix_fmts Niklas Haas
                   ` (5 subsequent siblings)
  24 siblings, 0 replies; 37+ messages in thread
From: Niklas Haas @ 2023-11-09 12:19 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Niklas Haas

From: Niklas Haas <git@haasn.dev>

Mirroring the previous commit, all codecs which previously never
accepted YUVJ now need to be labelled as MPEG range only.

TODO:
- add the rest of the codecs
---
 libavcodec/mpeg4videoenc.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/libavcodec/mpeg4videoenc.c b/libavcodec/mpeg4videoenc.c
index d1e50612dd..bb98c84eab 100644
--- a/libavcodec/mpeg4videoenc.c
+++ b/libavcodec/mpeg4videoenc.c
@@ -1403,6 +1403,9 @@ const FFCodec ff_mpeg4_encoder = {
     FF_CODEC_ENCODE_CB(ff_mpv_encode_picture),
     .close          = ff_mpv_encode_end,
     .p.pix_fmts     = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE },
+    .p.color_ranges = (const enum AVColorRange[]) {
+        AVCOL_RANGE_MPEG, AVCOL_RANGE_UNSPECIFIED
+    },
     .p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_SLICE_THREADS |
                       AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
     .caps_internal  = FF_CODEC_CAP_INIT_CLEANUP,
-- 
2.42.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] 37+ messages in thread

* [FFmpeg-devel] [PATCH 20/25] fftools/ffmpeg_filter: simplify choose_pix_fmts
  2023-11-09 12:19 [FFmpeg-devel] [RFC PATCH 00/25] YUVJ removal + filter negotiation Niklas Haas
                   ` (18 preceding siblings ...)
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 19/25] (WIP) lavc: set color_ranges for MPEG-only codecs Niklas Haas
@ 2023-11-09 12:19 ` Niklas Haas
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 21/25] fftools/ffmpeg_filter: propagate codec yuv metadata to filters Niklas Haas
                   ` (4 subsequent siblings)
  24 siblings, 0 replies; 37+ messages in thread
From: Niklas Haas @ 2023-11-09 12:19 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Niklas Haas

From: Niklas Haas <git@haasn.dev>

The only meaningful difference between choose_pix_fmts and the default
code was the inclusion of an extra branch for `keep_pix_fmt` being true.

However, in this case, we either:
1. Force the specific `ofp->format` that we inherited from
   ofilter_bind_ost, or if no format was set:
2. Print an empty format list

Both of these goals can be accomplished by simply moving the decision
logic to ofilter_bind_ost, to avoid setting any format list when
keep_pix_fmt is enabled. This is arguably cleaner as it moves format
selection logic to a single function. In the case of branch 1, nothing
else needs to be done as we already force the format provided in
ofp->format, if any is set. Add an assertion to verify this assumption
just in case.

(Side note: The "choose_*" family of functions are arguably misnomers,
as they should really be called "print_*" - their current behavior is to
print the relevant format lists to the `vf/af_format` filter arguments)
---
 fftools/ffmpeg_filter.c | 49 ++++++++---------------------------------
 1 file changed, 9 insertions(+), 40 deletions(-)

diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c
index dd5cfe4481..5b99c4ba40 100644
--- a/fftools/ffmpeg_filter.c
+++ b/fftools/ffmpeg_filter.c
@@ -313,36 +313,6 @@ static void sub2video_update(InputFilterPriv *ifp, int64_t heartbeat_pts,
     ifp->sub2video.initialize = 0;
 }
 
-/* *dst may return be set to NULL (no pixel format found), a static string or a
- * string backed by the bprint. Nothing has been written to the AVBPrint in case
- * NULL is returned. The AVBPrint provided should be clean. */
-static int choose_pix_fmts(OutputFilter *ofilter, AVBPrint *bprint,
-                           const char **dst)
-{
-    OutputFilterPriv *ofp = ofp_from_ofilter(ofilter);
-    OutputStream *ost = ofilter->ost;
-
-    *dst = NULL;
-
-    if (ost->keep_pix_fmt || ofp->format != AV_PIX_FMT_NONE) {
-        *dst = ofp->format == AV_PIX_FMT_NONE ? NULL :
-               av_get_pix_fmt_name(ofp->format);
-    } else if (ofp->formats) {
-        const enum AVPixelFormat *p = ofp->formats;
-
-        for (; *p != AV_PIX_FMT_NONE; p++) {
-            const char *name = av_get_pix_fmt_name(*p);
-            av_bprintf(bprint, "%s%c", name, p[1] == AV_PIX_FMT_NONE ? '\0' : '|');
-        }
-        if (!av_bprint_is_complete(bprint))
-            return AVERROR(ENOMEM);
-
-        *dst = bprint->str;
-    }
-
-    return 0;
-}
-
 /* Define a function for appending a list of allowed formats
  * to an AVBPrint. If nonempty, the list will have a header. */
 #define DEF_CHOOSE_FORMAT(name, type, var, supported_list, none, printf_format, get_name) \
@@ -365,8 +335,8 @@ static void choose_ ## name (OutputFilterPriv *ofp, AVBPrint *bprint)          \
     av_bprint_chars(bprint, ':', 1);                                           \
 }
 
-//DEF_CHOOSE_FORMAT(pix_fmts, enum AVPixelFormat, format, formats, AV_PIX_FMT_NONE,
-//                  GET_PIX_FMT_NAME)
+DEF_CHOOSE_FORMAT(pix_fmts, enum AVPixelFormat, format, formats,
+                  AV_PIX_FMT_NONE, "%s", av_get_pix_fmt_name)
 
 DEF_CHOOSE_FORMAT(sample_fmts, enum AVSampleFormat, format, formats,
                   AV_SAMPLE_FMT_NONE, "%s", av_get_sample_fmt_name)
@@ -690,7 +660,7 @@ int ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost)
         ofp->height     = ost->enc_ctx->height;
         if (ost->enc_ctx->pix_fmt != AV_PIX_FMT_NONE) {
             ofp->format = ost->enc_ctx->pix_fmt;
-        } else {
+        } else if (!ost->keep_pix_fmt) {
             ofp->formats = c->pix_fmts;
 
             // MJPEG encoder exports a full list of supported pixel formats,
@@ -1169,7 +1139,6 @@ static int configure_output_video_filter(FilterGraph *fg, OutputFilter *ofilter,
     AVBPrint bprint;
     int pad_idx = out->pad_idx;
     int ret;
-    const char *pix_fmts;
     char name[255];
 
     snprintf(name, sizeof(name), "out_%d_%d", ost->file_index, ost->index);
@@ -1204,17 +1173,17 @@ static int configure_output_video_filter(FilterGraph *fg, OutputFilter *ofilter,
         pad_idx = 0;
     }
 
+    av_assert0(!ost->keep_pix_fmt || (!ofp->format && !ofp->formats));
     av_bprint_init(&bprint, 0, AV_BPRINT_SIZE_UNLIMITED);
-    ret = choose_pix_fmts(ofilter, &bprint, &pix_fmts);
-    if (ret < 0)
-        return ret;
-
-    if (pix_fmts) {
+    choose_pix_fmts(ofp, &bprint);
+    if (!av_bprint_is_complete(&bprint))
+        return AVERROR(ENOMEM);
+    if (bprint.len) {
         AVFilterContext *filter;
 
         ret = avfilter_graph_create_filter(&filter,
                                            avfilter_get_by_name("format"),
-                                           "format", pix_fmts, NULL, fg->graph);
+                                           "format", bprint.str, NULL, fg->graph);
         av_bprint_finalize(&bprint, NULL);
         if (ret < 0)
             return ret;
-- 
2.42.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] 37+ messages in thread

* [FFmpeg-devel] [PATCH 21/25] fftools/ffmpeg_filter: propagate codec yuv metadata to filters
  2023-11-09 12:19 [FFmpeg-devel] [RFC PATCH 00/25] YUVJ removal + filter negotiation Niklas Haas
                   ` (19 preceding siblings ...)
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 20/25] fftools/ffmpeg_filter: simplify choose_pix_fmts Niklas Haas
@ 2023-11-09 12:19 ` Niklas Haas
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 22/25] tests/fate: force MPEG range for rawvideo tests Niklas Haas
                   ` (3 subsequent siblings)
  24 siblings, 0 replies; 37+ messages in thread
From: Niklas Haas @ 2023-11-09 12:19 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Niklas Haas

From: Niklas Haas <git@haasn.dev>

To convert between color spaces/ranges, if needed by the codec
properties. We momentarily duplicate the mjpeg strictness logic to also
enfoce full range. This duplication will be cleaned up in an upcoming
commit.

Due to avcodec_open2 being called after ofilter_bind_ost, we need to
look up the eventual encoder options from the options dictionary
directly, following the same design as the "strict" option.
---
 fftools/ffmpeg_filter.c | 55 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 55 insertions(+)

diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c
index 5b99c4ba40..da770ef650 100644
--- a/fftools/ffmpeg_filter.c
+++ b/fftools/ffmpeg_filter.c
@@ -173,6 +173,8 @@ typedef struct OutputFilterPriv {
     int width, height;
     int sample_rate;
     AVChannelLayout ch_layout;
+    enum AVColorSpace color_space;
+    enum AVColorRange color_range;
 
     // time base in which the output is sent to our downstream
     // does not need to match the filtersink's timebase
@@ -188,6 +190,8 @@ typedef struct OutputFilterPriv {
     const int *formats;
     const AVChannelLayout *ch_layouts;
     const int *sample_rates;
+    const enum AVColorSpace *color_spaces;
+    const enum AVColorRange *color_ranges;
 
     AVRational enc_timebase;
     // offset for output timestamps, in AV_TIME_BASE_Q
@@ -344,6 +348,12 @@ DEF_CHOOSE_FORMAT(sample_fmts, enum AVSampleFormat, format, formats,
 DEF_CHOOSE_FORMAT(sample_rates, int, sample_rate, sample_rates, 0,
                   "%d", )
 
+DEF_CHOOSE_FORMAT(color_spaces, enum AVColorSpace, color_space, color_spaces,
+                  AVCOL_SPC_UNSPECIFIED, "%s", av_color_space_name);
+
+DEF_CHOOSE_FORMAT(color_ranges, enum AVColorRange, color_range, color_ranges,
+                  AVCOL_RANGE_UNSPECIFIED, "%s", av_color_range_name);
+
 static void choose_channel_layouts(OutputFilterPriv *ofp, AVBPrint *bprint)
 {
     if (av_channel_layout_check(&ofp->ch_layout)) {
@@ -570,6 +580,8 @@ static OutputFilter *ofilter_alloc(FilterGraph *fg)
     ofilter           = &ofp->ofilter;
     ofilter->graph    = fg;
     ofp->format       = -1;
+    ofp->color_space  = AVCOL_SPC_UNSPECIFIED;
+    ofp->color_range  = AVCOL_RANGE_UNSPECIFIED;
     ofilter->last_pts = AV_NOPTS_VALUE;
 
     return ofilter;
@@ -638,6 +650,17 @@ static int set_channel_layout(OutputFilterPriv *f, OutputStream *ost)
     return 0;
 }
 
+static int ost_opt_int(OutputStream *ost, const char *name, int defval)
+{
+    const AVDictionaryEntry *e = av_dict_get(ost->encoder_opts, name, NULL, 0);
+    if (e) {
+        const AVOption *o = av_opt_find(ost->enc_ctx, e->key, NULL, 0, 0);
+        av_assert0(o);
+        av_opt_eval_int(ost->enc_ctx, o, e->value, &defval);
+    }
+    return defval;
+}
+
 int ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost)
 {
     const OutputFile  *of = output_files[ost->file_index];
@@ -645,6 +668,8 @@ int ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost)
     FilterGraph  *fg = ofilter->graph;
     FilterGraphPriv *fgp = fgp_from_fg(fg);
     const AVCodec *c = ost->enc_ctx->codec;
+    enum AVColorSpace color_space;
+    enum AVColorRange color_range;
 
     av_assert0(!ofilter->ost);
 
@@ -658,6 +683,8 @@ int ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost)
     case AVMEDIA_TYPE_VIDEO:
         ofp->width      = ost->enc_ctx->width;
         ofp->height     = ost->enc_ctx->height;
+        color_space     = ost_opt_int(ost, "color_space", ost->enc_ctx->colorspace);
+        color_range     = ost_opt_int(ost, "color_range", ost->enc_ctx->color_range);
         if (ost->enc_ctx->pix_fmt != AV_PIX_FMT_NONE) {
             ofp->format = ost->enc_ctx->pix_fmt;
         } else if (!ost->keep_pix_fmt) {
@@ -687,6 +714,30 @@ int ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost)
                     ofp->formats = mjpeg_formats;
             }
         }
+        if (color_space != AVCOL_SPC_UNSPECIFIED) {
+            ofp->color_space = color_space;
+        } else {
+            ofp->color_spaces = c->color_spaces;
+        }
+        if (color_range != AVCOL_RANGE_UNSPECIFIED) {
+            ofp->color_range = color_range;
+        } else {
+            ofp->color_ranges = c->color_ranges;
+
+            // MJPEG encoder exports a full list of supported pixel formats,
+            // but the full-range ones are experimental-only.
+            // Restrict the auto-conversion list unless -strict experimental
+            // has been specified.
+            if (!strcmp(c->name, "mjpeg")) {
+                static const enum AVColorRange mjpeg_ranges[] =
+                    { AVCOL_RANGE_JPEG, AVCOL_RANGE_UNSPECIFIED };
+
+                int strict_val = ost->enc_ctx->strict_std_compliance;
+                strict_val = ost_opt_int(ost, "strict", strict_val);
+                if (strict_val > FF_COMPLIANCE_UNOFFICIAL)
+                    ofp->color_ranges = mjpeg_ranges;
+            }
+        }
 
         fgp->disable_conversions |= ost->keep_pix_fmt;
 
@@ -1176,6 +1227,8 @@ static int configure_output_video_filter(FilterGraph *fg, OutputFilter *ofilter,
     av_assert0(!ost->keep_pix_fmt || (!ofp->format && !ofp->formats));
     av_bprint_init(&bprint, 0, AV_BPRINT_SIZE_UNLIMITED);
     choose_pix_fmts(ofp, &bprint);
+    choose_color_spaces(ofp, &bprint);
+    choose_color_ranges(ofp, &bprint);
     if (!av_bprint_is_complete(&bprint))
         return AVERROR(ENOMEM);
     if (bprint.len) {
@@ -1678,6 +1731,8 @@ static int configure_filtergraph(FilterGraph *fg)
 
         ofp->width  = av_buffersink_get_w(sink);
         ofp->height = av_buffersink_get_h(sink);
+        ofp->color_space = av_buffersink_get_colorspace(sink);
+        ofp->color_range = av_buffersink_get_color_range(sink);
 
         // If the timing parameters are not locked yet, get the tentative values
         // here but don't lock them. They will only be used if no output frames
-- 
2.42.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] 37+ messages in thread

* [FFmpeg-devel] [PATCH 22/25] tests/fate: force MPEG range for rawvideo tests
  2023-11-09 12:19 [FFmpeg-devel] [RFC PATCH 00/25] YUVJ removal + filter negotiation Niklas Haas
                   ` (20 preceding siblings ...)
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 21/25] fftools/ffmpeg_filter: propagate codec yuv metadata to filters Niklas Haas
@ 2023-11-09 12:19 ` Niklas Haas
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 23/25] lavfi/lavu/lavc: remove YUVJ pixel formats Niklas Haas
                   ` (2 subsequent siblings)
  24 siblings, 0 replies; 37+ messages in thread
From: Niklas Haas @ 2023-11-09 12:19 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Niklas Haas

From: Niklas Haas <git@haasn.dev>

The input file is MPEG range, so we should also encode to MPEG range
before comparing against it. This bug was avoided in the past because
JPEG range YUV inputs were tagged as YUVJ, which resulted in an
automatic conversion to PC range by default.

After YUVJ removal, we will need to explicitly specify that we want MPEG
range, since rawvideo does not care (or signal) if the output is JPEG or
MPEG range.

Affects both vsynth and owdenoise.
---
 tests/fate/filter-video.mak | 2 +-
 tests/fate/vcodec.mak       | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/tests/fate/filter-video.mak b/tests/fate/filter-video.mak
index 58edc70f46..2a9c5c682e 100644
--- a/tests/fate/filter-video.mak
+++ b/tests/fate/filter-video.mak
@@ -2,7 +2,7 @@
 VIDEO_FILTER = $(call ALLYES, $(1:%=%_FILTER) $(2) FILE_PROTOCOL IMAGE2_DEMUXER PGMYUV_DECODER RAWVIDEO_ENCODER NUT_MUXER MD5_PROTOCOL)
 
 FATE_FILTER_SAMPLES-$(call FILTERDEMDECENCMUX, PERMS OWDENOISE TRIM SCALE, SMJPEG, MJPEG, RAWVIDEO, RAWVIDEO, PIPE_PROTOCOL) += fate-filter-owdenoise-sample
-fate-filter-owdenoise-sample: CMD = ffmpeg -auto_conversion_filters -idct simple -i $(TARGET_SAMPLES)/smjpeg/scenwin.mjpg -vf "trim=duration=0.5,perms=random,owdenoise=10:20:20:enable=not(between(t\,0.2\,1.2))" -an -f rawvideo -
+fate-filter-owdenoise-sample: CMD = ffmpeg -auto_conversion_filters -idct simple -i $(TARGET_SAMPLES)/smjpeg/scenwin.mjpg -vf "trim=duration=0.5,perms=random,owdenoise=10:20:20:enable=not(between(t\,0.2\,1.2))" -an -f rawvideo -color_range mpeg -
 fate-filter-owdenoise-sample: REF = $(SAMPLES)/filter-reference/owdenoise-scenwin.raw
 fate-filter-owdenoise-sample: CMP_TARGET = 1
 fate-filter-owdenoise-sample: FUZZ = 3539
diff --git a/tests/fate/vcodec.mak b/tests/fate/vcodec.mak
index 45ed88da96..e3205127ff 100644
--- a/tests/fate/vcodec.mak
+++ b/tests/fate/vcodec.mak
@@ -6,7 +6,7 @@ fate-vsynth%: CODEC = $(word 3, $(subst -, ,$(@)))
 fate-vsynth%: FMT = avi
 fate-vsynth%: DEFAULT_SIZE = -s 352x288
 fate-vsynth3-%: DEFAULT_SIZE = -s $(FATEW)x$(FATEH)
-fate-vsynth%: CMD = enc_dec "rawvideo $(DEFAULT_SIZE) -pix_fmt yuv420p $(RAWDECOPTS)" $(SRC) $(FMT) "-c $(CODEC) $(ENCOPTS)" rawvideo "-pix_fmt yuv420p -vsync passthrough $(DECOPTS)" "" "" ${TWOPASS}
+fate-vsynth%: CMD = enc_dec "rawvideo $(DEFAULT_SIZE) -color_range mpeg -pix_fmt yuv420p $(RAWDECOPTS)" $(SRC) $(FMT) "-c $(CODEC) $(ENCOPTS)" rawvideo "-pix_fmt yuv420p -color_range mpeg -vsync passthrough $(DECOPTS)" "" "" ${TWOPASS}
 fate-vsynth%: CMP_UNIT = 1
 fate-vsynth%: REF = $(SRC_PATH)/tests/ref/vsynth/$(@:fate-%=%)
 
-- 
2.42.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] 37+ messages in thread

* [FFmpeg-devel] [PATCH 23/25] lavfi/lavu/lavc: remove YUVJ pixel formats
  2023-11-09 12:19 [FFmpeg-devel] [RFC PATCH 00/25] YUVJ removal + filter negotiation Niklas Haas
                   ` (21 preceding siblings ...)
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 22/25] tests/fate: force MPEG range for rawvideo tests Niklas Haas
@ 2023-11-09 12:19 ` Niklas Haas
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 24/25] avutil/pixdesc: remove old yuvj pixel format check Niklas Haas
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 25/25] avcodec/encode: enforce AVCodec capabilities at encode time Niklas Haas
  24 siblings, 0 replies; 37+ messages in thread
From: Niklas Haas @ 2023-11-09 12:19 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Niklas Haas

From: Niklas Haas <git@haasn.dev>

To avoid regressing any particular filter or codec, and to ensure every
commit still passes FATE while bisecting, removal of the YUVJ pixel
format and removal of YUVJ pixel format handling code was done in a
single, atomic commit.

Because this is a broad, sweeping change, the commit touches very many
places in the code. However, while this commit is very large, all of the
changes can be described as either:

- Setting the pixel format to YUV instead of YUVJ (for decoders which
  already correctly set range metadata)
- Removing YUVJ from pixel format lists (for filters/encoders that already
  natively handle color range metadata correctly)
- Replacing `pix_fmt = YUVJ` by `pix_fmt = YUV, color_ranges = JPEG`
  (for encoders which only supported YUVJ)
- Replacing a check of type (range == JPEG || pixfmt == YUVJ) by just
  (range == JPEG).

The only non-trivial exception to this is the change to ffmpeg_filter.c,
in which case the special handling of mjpeg was simply removed entirely,
since the new logic of setting c->color_ranges replaces it.
---
 doc/APIchanges                                |  4 ++
 fftools/ffmpeg_filter.c                       | 24 --------
 libavcodec/encode.c                           |  6 --
 libavcodec/fraps.c                            |  2 +-
 libavcodec/h264_slice.c                       | 26 +-------
 libavcodec/hevc_ps.c                          |  2 -
 libavcodec/hevcdec.c                          |  1 -
 libavcodec/libopenh264enc.c                   |  5 +-
 libavcodec/librav1e.c                         | 17 +-----
 libavcodec/libx264.c                          | 14 -----
 libavcodec/libx265.c                          | 14 +----
 libavcodec/ljpegenc.c                         |  1 -
 libavcodec/mdec.c                             |  2 +-
 libavcodec/mjpegdec.c                         | 28 ++++-----
 libavcodec/mjpegenc.c                         |  3 +-
 libavcodec/mjpegenc_common.c                  |  2 +-
 libavcodec/mpegvideo_enc.c                    |  3 -
 libavcodec/nvenc.c                            |  9 +--
 libavcodec/qsv.c                              |  1 -
 libavcodec/raw.c                              | 14 -----
 libavcodec/roqvideodec.c                      |  2 +-
 libavcodec/roqvideoenc.c                      |  2 +-
 libavcodec/svq3.c                             |  4 +-
 libavcodec/tdsc.c                             |  2 +-
 libavcodec/utils.c                            |  5 --
 libavcodec/vdpau.c                            |  3 -
 libavfilter/avf_showcwt.c                     |  2 +-
 libavfilter/avf_showspectrum.c                |  2 +-
 libavfilter/avfiltergraph.c                   | 12 +---
 libavfilter/drawutils.c                       |  5 +-
 libavfilter/f_select.c                        |  4 +-
 libavfilter/vaf_spectrumsynth.c               |  6 +-
 libavfilter/vf_amplify.c                      |  3 -
 libavfilter/vf_atadenoise.c                   |  3 -
 libavfilter/vf_avgblur.c                      |  4 +-
 libavfilter/vf_bbox.c                         |  3 -
 libavfilter/vf_bilateral.c                    |  4 +-
 libavfilter/vf_bitplanenoise.c                |  2 -
 libavfilter/vf_blackdetect.c                  | 11 +---
 libavfilter/vf_blend.c                        |  1 -
 libavfilter/vf_blockdetect.c                  |  2 -
 libavfilter/vf_blurdetect.c                   |  2 -
 libavfilter/vf_bm3d.c                         |  3 -
 libavfilter/vf_bwdif.c                        |  2 -
 libavfilter/vf_cas.c                          |  3 -
 libavfilter/vf_chromanr.c                     |  1 -
 libavfilter/vf_chromashift.c                  |  1 -
 libavfilter/vf_colorcorrect.c                 |  1 -
 libavfilter/vf_colorize.c                     |  3 -
 libavfilter/vf_colorspace.c                   |  1 -
 libavfilter/vf_convolution.c                  |  4 +-
 libavfilter/vf_convolve.c                     |  4 +-
 libavfilter/vf_corr.c                         |  2 -
 libavfilter/vf_cover_rect.c                   |  4 +-
 libavfilter/vf_cropdetect.c                   |  6 +-
 libavfilter/vf_dblur.c                        |  4 +-
 libavfilter/vf_deband.c                       |  4 +-
 libavfilter/vf_deblock.c                      |  4 +-
 libavfilter/vf_decimate.c                     |  2 -
 libavfilter/vf_dedot.c                        |  4 +-
 libavfilter/vf_deflicker.c                    |  3 -
 libavfilter/vf_deshake.c                      |  3 +-
 libavfilter/vf_displace.c                     |  4 +-
 libavfilter/vf_drawbox.c                      |  4 +-
 libavfilter/vf_entropy.c                      |  2 -
 libavfilter/vf_estdif.c                       |  3 -
 libavfilter/vf_extractplanes.c                |  3 -
 libavfilter/vf_fade.c                         |  4 +-
 libavfilter/vf_fftdnoiz.c                     |  3 -
 libavfilter/vf_fftfilt.c                      |  4 +-
 libavfilter/vf_fieldmatch.c                   |  3 -
 libavfilter/vf_fillborders.c                  |  4 +-
 libavfilter/vf_find_rect.c                    |  2 +-
 libavfilter/vf_framepack.c                    |  3 -
 libavfilter/vf_framerate.c                    | 10 ++--
 libavfilter/vf_freezedetect.c                 |  5 +-
 libavfilter/vf_fspp.c                         |  2 -
 libavfilter/vf_gblur.c                        |  4 +-
 libavfilter/vf_guided.c                       |  4 +-
 libavfilter/vf_histogram.c                    |  8 +--
 libavfilter/vf_hqdn3d.c                       |  1 -
 libavfilter/vf_hysteresis.c                   |  4 +-
 libavfilter/vf_identity.c                     |  2 -
 libavfilter/vf_idet.c                         |  4 --
 libavfilter/vf_lagfun.c                       |  3 -
 libavfilter/vf_lenscorrection.c               |  3 -
 libavfilter/vf_limitdiff.c                    |  4 +-
 libavfilter/vf_limiter.c                      |  4 +-
 libavfilter/vf_lut.c                          |  2 -
 libavfilter/vf_lut2.c                         |  4 +-
 libavfilter/vf_maskedclamp.c                  |  4 +-
 libavfilter/vf_maskedmerge.c                  |  4 +-
 libavfilter/vf_maskedminmax.c                 |  4 +-
 libavfilter/vf_maskedthreshold.c              |  4 +-
 libavfilter/vf_maskfun.c                      |  4 +-
 libavfilter/vf_median.c                       |  4 +-
 libavfilter/vf_mestimate.c                    |  3 -
 libavfilter/vf_midequalizer.c                 |  4 +-
 libavfilter/vf_minterpolate.c                 |  3 -
 libavfilter/vf_monochrome.c                   |  3 -
 libavfilter/vf_morpho.c                       |  4 +-
 libavfilter/vf_mpdecimate.c                   |  2 -
 libavfilter/vf_negate.c                       |  2 -
 libavfilter/vf_neighbor.c                     |  4 +-
 libavfilter/vf_nlmeans.c                      |  3 -
 libavfilter/vf_nnedi.c                        |  3 -
 libavfilter/vf_ocr.c                          |  3 -
 libavfilter/vf_overlay.c                      |  6 +-
 libavfilter/vf_perspective.c                  |  1 -
 libavfilter/vf_phase.c                        |  3 -
 libavfilter/vf_pixelize.c                     |  3 -
 libavfilter/vf_pp.c                           | 12 ++--
 libavfilter/vf_pp7.c                          |  2 -
 libavfilter/vf_premultiply.c                  | 10 +---
 libavfilter/vf_psnr.c                         |  2 -
 libavfilter/vf_pullup.c                       |  4 +-
 libavfilter/vf_readeia608.c                   |  3 -
 libavfilter/vf_readvitc.c                     |  5 --
 libavfilter/vf_remap.c                        |  1 -
 libavfilter/vf_removegrain.c                  |  2 -
 libavfilter/vf_rotate.c                       |  4 +-
 libavfilter/vf_scdet.c                        |  8 +--
 libavfilter/vf_scroll.c                       |  4 +-
 libavfilter/vf_shear.c                        |  3 -
 libavfilter/vf_signalstats.c                  |  2 -
 libavfilter/vf_signature.c                    |  3 -
 libavfilter/vf_siti.c                         | 12 +---
 libavfilter/vf_spp.c                          |  2 -
 libavfilter/vf_ssim.c                         |  2 -
 libavfilter/vf_ssim360.c                      |  2 -
 libavfilter/vf_stereo3d.c                     |  5 --
 libavfilter/vf_threshold.c                    |  4 +-
 libavfilter/vf_thumbnail.c                    |  3 -
 libavfilter/vf_tinterlace.c                   | 25 +++-----
 libavfilter/vf_tmidequalizer.c                |  4 +-
 libavfilter/vf_unsharp.c                      |  4 +-
 libavfilter/vf_uspp.c                         |  2 -
 libavfilter/vf_v360.c                         |  5 --
 libavfilter/vf_vaguedenoiser.c                |  3 -
 libavfilter/vf_varblur.c                      |  4 +-
 libavfilter/vf_vectorscope.c                  | 10 ++--
 libavfilter/vf_vif.c                          |  2 -
 libavfilter/vf_w3fdif.c                       |  3 -
 libavfilter/vf_waveform.c                     |  8 +--
 libavfilter/vf_xfade.c                        |  1 -
 libavfilter/vf_xmedian.c                      |  3 -
 libavfilter/vf_yadif.c                        |  2 -
 libavfilter/vf_yaepblur.c                     |  4 +-
 libavfilter/vf_zoompan.c                      |  3 -
 libavfilter/vf_zscale.c                       |  3 -
 libavfilter/vsrc_testsrc.c                    |  2 +-
 libavformat/yuv4mpegenc.c                     | 16 -----
 libavutil/pixdesc.c                           | 60 -------------------
 libavutil/pixfmt.h                            |  5 --
 libavutil/version.h                           |  2 +-
 libswscale/utils.c                            | 32 +---------
 tests/fate/lavf-image.mak                     |  2 +-
 tests/fate/pixfmt.mak                         |  4 --
 tests/fate/vcodec.mak                         | 12 ++--
 tests/ref/fate/exif-image-embedded            |  2 +-
 tests/ref/fate/exif-image-jpg                 |  2 +-
 tests/ref/fate/filter-pixdesc-yuvj411p        |  1 -
 tests/ref/fate/filter-pixdesc-yuvj420p        |  1 -
 tests/ref/fate/filter-pixdesc-yuvj422p        |  1 -
 tests/ref/fate/filter-pixdesc-yuvj440p        |  1 -
 tests/ref/fate/filter-pixdesc-yuvj444p        |  1 -
 tests/ref/fate/filter-pixfmts-copy            |  5 --
 tests/ref/fate/filter-pixfmts-crop            |  5 --
 tests/ref/fate/filter-pixfmts-field           |  5 --
 tests/ref/fate/filter-pixfmts-fieldorder      |  3 -
 tests/ref/fate/filter-pixfmts-hflip           |  5 --
 tests/ref/fate/filter-pixfmts-il              |  5 --
 tests/ref/fate/filter-pixfmts-lut             |  4 --
 tests/ref/fate/filter-pixfmts-null            |  5 --
 tests/ref/fate/filter-pixfmts-pad             |  5 --
 tests/ref/fate/filter-pixfmts-pullup          |  5 --
 tests/ref/fate/filter-pixfmts-rotate          |  2 -
 tests/ref/fate/filter-pixfmts-scale           |  5 --
 tests/ref/fate/filter-pixfmts-swapuv          |  5 --
 .../ref/fate/filter-pixfmts-tinterlace_cvlpf  |  4 --
 .../ref/fate/filter-pixfmts-tinterlace_merge  |  4 --
 tests/ref/fate/filter-pixfmts-tinterlace_pad  |  4 --
 tests/ref/fate/filter-pixfmts-tinterlace_vlpf |  4 --
 tests/ref/fate/filter-pixfmts-transpose       |  2 -
 tests/ref/fate/filter-pixfmts-vflip           |  5 --
 tests/ref/fate/imgutils                       |  5 --
 tests/ref/fate/jpg-icc                        |  2 +-
 tests/ref/fate/sws-pixdesc-query              | 15 -----
 tests/ref/pixfmt/yuvj420p                     |  2 -
 tests/ref/pixfmt/yuvj422p                     |  2 -
 tests/ref/pixfmt/yuvj440p                     |  2 -
 tests/ref/pixfmt/yuvj444p                     |  2 -
 192 files changed, 139 insertions(+), 793 deletions(-)
 delete mode 100644 tests/ref/fate/filter-pixdesc-yuvj411p
 delete mode 100644 tests/ref/fate/filter-pixdesc-yuvj420p
 delete mode 100644 tests/ref/fate/filter-pixdesc-yuvj422p
 delete mode 100644 tests/ref/fate/filter-pixdesc-yuvj440p
 delete mode 100644 tests/ref/fate/filter-pixdesc-yuvj444p
 delete mode 100644 tests/ref/pixfmt/yuvj420p
 delete mode 100644 tests/ref/pixfmt/yuvj422p
 delete mode 100644 tests/ref/pixfmt/yuvj440p
 delete mode 100644 tests/ref/pixfmt/yuvj444p

diff --git a/doc/APIchanges b/doc/APIchanges
index 87f4368e03..508b215bc0 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -2,6 +2,10 @@ The last version increases of all libraries were on 2023-02-09
 
 API changes, most recent first:
 
+2023-10-xx - xxxxxxxxxx - lavu 58.33.100 - pixfmt.h
+  Remove AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ444P,
+  AV_PIX_FMT_YUVJ440P and AV_PIX_FMT_YUVJ411P.
+
 2023-11-xx - xxxxxxxxxx - lavc 60.34.100 - avcodec.h
   Add AVCodec.color_ranges and AVCodec.color_spaces.
 
diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c
index da770ef650..4aa4b8b84c 100644
--- a/fftools/ffmpeg_filter.c
+++ b/fftools/ffmpeg_filter.c
@@ -689,30 +689,6 @@ int ofilter_bind_ost(OutputFilter *ofilter, OutputStream *ost)
             ofp->format = ost->enc_ctx->pix_fmt;
         } else if (!ost->keep_pix_fmt) {
             ofp->formats = c->pix_fmts;
-
-            // MJPEG encoder exports a full list of supported pixel formats,
-            // but the full-range ones are experimental-only.
-            // Restrict the auto-conversion list unless -strict experimental
-            // has been specified.
-            if (!strcmp(c->name, "mjpeg")) {
-                // FIXME: YUV420P etc. are actually supported with full color range,
-                // yet the latter information isn't available here.
-                static const enum AVPixelFormat mjpeg_formats[] =
-                    { AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ444P,
-                      AV_PIX_FMT_NONE };
-
-                const AVDictionaryEntry *strict = av_dict_get(ost->encoder_opts, "strict", NULL, 0);
-                int strict_val = ost->enc_ctx->strict_std_compliance;
-
-                if (strict) {
-                    const AVOption *o = av_opt_find(ost->enc_ctx, strict->key, NULL, 0, 0);
-                    av_assert0(o);
-                    av_opt_eval_int(ost->enc_ctx, o, strict->value, &strict_val);
-                }
-
-                if (strict_val > FF_COMPLIANCE_UNOFFICIAL)
-                    ofp->formats = mjpeg_formats;
-            }
         }
         if (color_space != AVCOL_SPC_UNSPECIFIED) {
             ofp->color_space = color_space;
diff --git a/libavcodec/encode.c b/libavcodec/encode.c
index a436be2657..31565638fa 100644
--- a/libavcodec/encode.c
+++ b/libavcodec/encode.c
@@ -603,12 +603,6 @@ static int encode_preinit_video(AVCodecContext *avctx)
 
             return AVERROR(EINVAL);
         }
-        if (c->pix_fmts[i] == AV_PIX_FMT_YUVJ420P ||
-            c->pix_fmts[i] == AV_PIX_FMT_YUVJ411P ||
-            c->pix_fmts[i] == AV_PIX_FMT_YUVJ422P ||
-            c->pix_fmts[i] == AV_PIX_FMT_YUVJ440P ||
-            c->pix_fmts[i] == AV_PIX_FMT_YUVJ444P)
-            avctx->color_range = AVCOL_RANGE_JPEG;
     }
 
     if (    avctx->bits_per_raw_sample < 0
diff --git a/libavcodec/fraps.c b/libavcodec/fraps.c
index bed244e4e9..77f6e68e34 100644
--- a/libavcodec/fraps.c
+++ b/libavcodec/fraps.c
@@ -217,7 +217,7 @@ static int decode_frame(AVCodecContext *avctx, AVFrame *f,
     f->pict_type = AV_PICTURE_TYPE_I;
     f->flags |= AV_FRAME_FLAG_KEY;
 
-    avctx->pix_fmt = version & 1 ? is_pal ? AV_PIX_FMT_PAL8 : AV_PIX_FMT_BGR24 : AV_PIX_FMT_YUVJ420P;
+    avctx->pix_fmt = version & 1 ? is_pal ? AV_PIX_FMT_PAL8 : AV_PIX_FMT_BGR24 : AV_PIX_FMT_YUV420P;
     avctx->color_range = version & 1 ? AVCOL_RANGE_UNSPECIFIED
                                      : AVCOL_RANGE_JPEG;
     avctx->colorspace = version & 1 ? AVCOL_SPC_UNSPECIFIED : AVCOL_SPC_BT709;
diff --git a/libavcodec/h264_slice.c b/libavcodec/h264_slice.c
index 07cc1b094f..c2bc8f2448 100644
--- a/libavcodec/h264_slice.c
+++ b/libavcodec/h264_slice.c
@@ -869,15 +869,10 @@ static enum AVPixelFormat get_pixel_format(H264Context *h, int force_callback)
         if (CHROMA444(h)) {
             if (h->avctx->colorspace == AVCOL_SPC_RGB)
                 *fmt++ = AV_PIX_FMT_GBRP;
-            else if (h->avctx->color_range == AVCOL_RANGE_JPEG)
-                *fmt++ = AV_PIX_FMT_YUVJ444P;
             else
                 *fmt++ = AV_PIX_FMT_YUV444P;
         } else if (CHROMA422(h)) {
-            if (h->avctx->color_range == AVCOL_RANGE_JPEG)
-                *fmt++ = AV_PIX_FMT_YUVJ422P;
-            else
-                *fmt++ = AV_PIX_FMT_YUV422P;
+            *fmt++ = AV_PIX_FMT_YUV422P;
         } else {
 #if CONFIG_H264_DXVA2_HWACCEL
             *fmt++ = AV_PIX_FMT_DXVA2_VLD;
@@ -889,10 +884,7 @@ static enum AVPixelFormat get_pixel_format(H264Context *h, int force_callback)
 #if CONFIG_H264_VAAPI_HWACCEL
             *fmt++ = AV_PIX_FMT_VAAPI;
 #endif
-            if (h->avctx->color_range == AVCOL_RANGE_JPEG)
-                *fmt++ = AV_PIX_FMT_YUVJ420P;
-            else
-                *fmt++ = AV_PIX_FMT_YUV420P;
+            *fmt++ = AV_PIX_FMT_YUV420P;
         }
         break;
     default:
@@ -1032,17 +1024,6 @@ fail:
     return ret;
 }
 
-static enum AVPixelFormat non_j_pixfmt(enum AVPixelFormat a)
-{
-    switch (a) {
-    case AV_PIX_FMT_YUVJ420P: return AV_PIX_FMT_YUV420P;
-    case AV_PIX_FMT_YUVJ422P: return AV_PIX_FMT_YUV422P;
-    case AV_PIX_FMT_YUVJ444P: return AV_PIX_FMT_YUV444P;
-    default:
-        return a;
-    }
-}
-
 static int h264_init_ps(H264Context *h, const H264SliceContext *sl, int first_slice)
 {
     const SPS *sps;
@@ -1075,8 +1056,7 @@ static int h264_init_ps(H264Context *h, const H264SliceContext *sl, int first_sl
                      || h->mb_width  != sps->mb_width
                      || h->mb_height != sps->mb_height
                     ));
-    if (h->avctx->pix_fmt == AV_PIX_FMT_NONE
-        || (non_j_pixfmt(h->avctx->pix_fmt) != non_j_pixfmt(get_pixel_format(h, 0))))
+    if (h->avctx->pix_fmt == AV_PIX_FMT_NONE || (h->avctx->pix_fmt != get_pixel_format(h, 0)))
         must_reinit = 1;
 
     if (first_slice && av_cmp_q(sps->vui.sar, h->avctx->sample_aspect_ratio))
diff --git a/libavcodec/hevc_ps.c b/libavcodec/hevc_ps.c
index fb997066d9..e69fa60ba1 100644
--- a/libavcodec/hevc_ps.c
+++ b/libavcodec/hevc_ps.c
@@ -577,8 +577,6 @@ static void decode_vui(GetBitContext *gb, AVCodecContext *avctx,
     ff_h2645_decode_common_vui_params(gb, &sps->vui.common, avctx);
 
     if (vui->common.video_signal_type_present_flag) {
-        if (vui->common.video_full_range_flag && sps->pix_fmt == AV_PIX_FMT_YUV420P)
-            sps->pix_fmt = AV_PIX_FMT_YUVJ420P;
         if (vui->common.colour_description_present_flag) {
             if (vui->common.matrix_coeffs == AVCOL_SPC_RGB) {
                 switch (sps->pix_fmt) {
diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c
index 3ce845dddb..0859e1d2d0 100644
--- a/libavcodec/hevcdec.c
+++ b/libavcodec/hevcdec.c
@@ -407,7 +407,6 @@ static enum AVPixelFormat get_format(HEVCContext *s, const HEVCSPS *sps)
 
     switch (sps->pix_fmt) {
     case AV_PIX_FMT_YUV420P:
-    case AV_PIX_FMT_YUVJ420P:
 #if CONFIG_HEVC_DXVA2_HWACCEL
         *fmt++ = AV_PIX_FMT_DXVA2_VLD;
 #endif
diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c
index f518d0894e..d3e7b0c746 100644
--- a/libavcodec/libopenh264enc.c
+++ b/libavcodec/libopenh264enc.c
@@ -313,10 +313,8 @@ FF_ENABLE_DEPRECATION_WARNINGS
 #if OPENH264_VER_AT_LEAST(1, 6)
     param.sSpatialLayers[0].uiVideoFormat = VF_UNDEF;
 
-    if (avctx->color_range != AVCOL_RANGE_UNSPECIFIED) {
+    if (avctx->color_range != AVCOL_RANGE_UNSPECIFIED)
         param.sSpatialLayers[0].bFullRange = (avctx->color_range == AVCOL_RANGE_JPEG);
-    }  else if (avctx->pix_fmt == AV_PIX_FMT_YUVJ420P)
-        param.sSpatialLayers[0].bFullRange = 1;
 
     if (avctx->colorspace != AVCOL_SPC_UNSPECIFIED      ||
         avctx->color_primaries != AVCOL_PRI_UNSPECIFIED ||
@@ -447,7 +445,6 @@ const FFCodec ff_libopenh264_encoder = {
     .caps_internal  = FF_CODEC_CAP_INIT_CLEANUP |
                       FF_CODEC_CAP_AUTO_THREADS,
     .p.pix_fmts     = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P,
-                                                    AV_PIX_FMT_YUVJ420P,
                                                     AV_PIX_FMT_NONE },
     .defaults       = svc_enc_defaults,
     .p.priv_class   = &class,
diff --git a/libavcodec/librav1e.c b/libavcodec/librav1e.c
index 56539435a7..dc18869e87 100644
--- a/libavcodec/librav1e.c
+++ b/libavcodec/librav1e.c
@@ -65,15 +65,8 @@ typedef struct FrameData {
     AVBufferRef *frame_opaque_ref;
 } FrameData;
 
-static inline RaPixelRange range_map(enum AVPixelFormat pix_fmt, enum AVColorRange range)
+static inline RaPixelRange range_map(enum AVColorRange range)
 {
-    switch (pix_fmt) {
-    case AV_PIX_FMT_YUVJ420P:
-    case AV_PIX_FMT_YUVJ422P:
-    case AV_PIX_FMT_YUVJ444P:
-        return RA_PIXEL_RANGE_FULL;
-    }
-
     switch (range) {
     case AVCOL_RANGE_JPEG:
         return RA_PIXEL_RANGE_FULL;
@@ -87,17 +80,14 @@ static inline RaChromaSampling pix_fmt_map(enum AVPixelFormat pix_fmt)
 {
     switch (pix_fmt) {
     case AV_PIX_FMT_YUV420P:
-    case AV_PIX_FMT_YUVJ420P:
     case AV_PIX_FMT_YUV420P10:
     case AV_PIX_FMT_YUV420P12:
         return RA_CHROMA_SAMPLING_CS420;
     case AV_PIX_FMT_YUV422P:
-    case AV_PIX_FMT_YUVJ422P:
     case AV_PIX_FMT_YUV422P10:
     case AV_PIX_FMT_YUV422P12:
         return RA_CHROMA_SAMPLING_CS422;
     case AV_PIX_FMT_YUV444P:
-    case AV_PIX_FMT_YUVJ444P:
     case AV_PIX_FMT_YUV444P10:
     case AV_PIX_FMT_YUV444P12:
         return RA_CHROMA_SAMPLING_CS444;
@@ -384,7 +374,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
     rret = rav1e_config_set_pixel_format(cfg, desc->comp[0].depth,
                                          pix_fmt_map(avctx->pix_fmt),
                                          chroma_loc_map(avctx->chroma_sample_location),
-                                         range_map(avctx->pix_fmt, avctx->color_range));
+                                         range_map(avctx->color_range));
     if (rret < 0) {
         av_log(avctx, AV_LOG_ERROR, "Failed to set pixel format properties.\n");
         ret = AVERROR_INVALIDDATA;
@@ -651,15 +641,12 @@ static const FFCodecDefault librav1e_defaults[] = {
 
 const enum AVPixelFormat librav1e_pix_fmts[] = {
     AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ420P,
     AV_PIX_FMT_YUV420P10,
     AV_PIX_FMT_YUV420P12,
     AV_PIX_FMT_YUV422P,
-    AV_PIX_FMT_YUVJ422P,
     AV_PIX_FMT_YUV422P10,
     AV_PIX_FMT_YUV422P12,
     AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ444P,
     AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV444P12,
     AV_PIX_FMT_NONE
diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c
index 182e20f622..bab4e3627b 100644
--- a/libavcodec/libx264.c
+++ b/libavcodec/libx264.c
@@ -834,14 +834,11 @@ static int convert_pix_fmt(enum AVPixelFormat pix_fmt)
 {
     switch (pix_fmt) {
     case AV_PIX_FMT_YUV420P:
-    case AV_PIX_FMT_YUVJ420P:
     case AV_PIX_FMT_YUV420P9:
     case AV_PIX_FMT_YUV420P10: return X264_CSP_I420;
     case AV_PIX_FMT_YUV422P:
-    case AV_PIX_FMT_YUVJ422P:
     case AV_PIX_FMT_YUV422P10: return X264_CSP_I422;
     case AV_PIX_FMT_YUV444P:
-    case AV_PIX_FMT_YUVJ444P:
     case AV_PIX_FMT_YUV444P9:
     case AV_PIX_FMT_YUV444P10: return X264_CSP_I444;
     case AV_PIX_FMT_BGR0:
@@ -1157,11 +1154,6 @@ FF_ENABLE_DEPRECATION_WARNINGS
 
     if (avctx->color_range != AVCOL_RANGE_UNSPECIFIED)
         x4->params.vui.b_fullrange = avctx->color_range == AVCOL_RANGE_JPEG;
-    else if (avctx->pix_fmt == AV_PIX_FMT_YUVJ420P ||
-             avctx->pix_fmt == AV_PIX_FMT_YUVJ422P ||
-             avctx->pix_fmt == AV_PIX_FMT_YUVJ444P)
-        x4->params.vui.b_fullrange = 1;
-
     if (avctx->colorspace != AVCOL_SPC_UNSPECIFIED)
         x4->params.vui.i_colmatrix = avctx->colorspace;
     if (avctx->color_primaries != AVCOL_PRI_UNSPECIFIED)
@@ -1281,11 +1273,8 @@ FF_ENABLE_DEPRECATION_WARNINGS
 
 static const enum AVPixelFormat pix_fmts_8bit[] = {
     AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ420P,
     AV_PIX_FMT_YUV422P,
-    AV_PIX_FMT_YUVJ422P,
     AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ444P,
     AV_PIX_FMT_NV12,
     AV_PIX_FMT_NV16,
 #ifdef X264_CSP_NV21
@@ -1307,11 +1296,8 @@ static const enum AVPixelFormat pix_fmts_10bit[] = {
 };
 static const enum AVPixelFormat pix_fmts_all[] = {
     AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ420P,
     AV_PIX_FMT_YUV422P,
-    AV_PIX_FMT_YUVJ422P,
     AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ444P,
     AV_PIX_FMT_NV12,
     AV_PIX_FMT_NV16,
 #ifdef X264_CSP_NV21
diff --git a/libavcodec/libx265.c b/libavcodec/libx265.c
index 447e6da25f..7ffc61bdce 100644
--- a/libavcodec/libx265.c
+++ b/libavcodec/libx265.c
@@ -252,10 +252,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
             avctx->color_range == AVCOL_RANGE_JPEG;
     else
         ctx->params->vui.bEnableVideoFullRangeFlag =
-            (desc->flags & AV_PIX_FMT_FLAG_RGB) ||
-            avctx->pix_fmt == AV_PIX_FMT_YUVJ420P ||
-            avctx->pix_fmt == AV_PIX_FMT_YUVJ422P ||
-            avctx->pix_fmt == AV_PIX_FMT_YUVJ444P;
+            desc->flags & AV_PIX_FMT_FLAG_RGB;
 
     if ((avctx->color_primaries <= AVCOL_PRI_SMPTE432 &&
          avctx->color_primaries != AVCOL_PRI_UNSPECIFIED) ||
@@ -797,11 +794,8 @@ FF_ENABLE_DEPRECATION_WARNINGS
 
 static const enum AVPixelFormat x265_csp_eight[] = {
     AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ420P,
     AV_PIX_FMT_YUV422P,
-    AV_PIX_FMT_YUVJ422P,
     AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ444P,
     AV_PIX_FMT_GBRP,
     AV_PIX_FMT_GRAY8,
     AV_PIX_FMT_NONE
@@ -809,11 +803,8 @@ static const enum AVPixelFormat x265_csp_eight[] = {
 
 static const enum AVPixelFormat x265_csp_ten[] = {
     AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ420P,
     AV_PIX_FMT_YUV422P,
-    AV_PIX_FMT_YUVJ422P,
     AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ444P,
     AV_PIX_FMT_GBRP,
     AV_PIX_FMT_YUV420P10,
     AV_PIX_FMT_YUV422P10,
@@ -826,11 +817,8 @@ static const enum AVPixelFormat x265_csp_ten[] = {
 
 static const enum AVPixelFormat x265_csp_twelve[] = {
     AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ420P,
     AV_PIX_FMT_YUV422P,
-    AV_PIX_FMT_YUVJ422P,
     AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ444P,
     AV_PIX_FMT_GBRP,
     AV_PIX_FMT_YUV420P10,
     AV_PIX_FMT_YUV422P10,
diff --git a/libavcodec/ljpegenc.c b/libavcodec/ljpegenc.c
index aa62beac71..1b63b77829 100644
--- a/libavcodec/ljpegenc.c
+++ b/libavcodec/ljpegenc.c
@@ -325,7 +325,6 @@ const FFCodec ff_ljpeg_encoder = {
     .close          = ljpeg_encode_close,
     .p.pix_fmts     = (const enum AVPixelFormat[]){
         AV_PIX_FMT_BGR24   , AV_PIX_FMT_BGRA    , AV_PIX_FMT_BGR0,
-        AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ422P,
         AV_PIX_FMT_YUV420P , AV_PIX_FMT_YUV444P , AV_PIX_FMT_YUV422P,
         AV_PIX_FMT_NONE},
 };
diff --git a/libavcodec/mdec.c b/libavcodec/mdec.c
index 44b12471a9..96b5c55ba3 100644
--- a/libavcodec/mdec.c
+++ b/libavcodec/mdec.c
@@ -225,7 +225,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
     ff_permute_scantable(a->permutated_scantable, ff_zigzag_direct,
                          a->idsp.idct_permutation);
 
-    avctx->pix_fmt  = AV_PIX_FMT_YUVJ420P;
+    avctx->pix_fmt  = AV_PIX_FMT_YUV420P;
     avctx->color_range = AVCOL_RANGE_JPEG;
 
     /* init q matrix */
diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c
index 8676155ecf..931aa137d8 100644
--- a/libavcodec/mjpegdec.c
+++ b/libavcodec/mjpegdec.c
@@ -527,7 +527,7 @@ int ff_mjpeg_decode_sof(MJpegDecodeContext *s)
                     || s->component_id[0] == 'R' && s->component_id[1] == 'G' && s->component_id[2] == 'B') {
                     s->avctx->pix_fmt = s->bits <= 8 ? AV_PIX_FMT_GBRP : AV_PIX_FMT_GBRP16;
                 } else {
-                    if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV444P : AV_PIX_FMT_YUVJ444P;
+                    if (s->bits <= 8) s->avctx->pix_fmt = AV_PIX_FMT_YUV444P;
                     else              s->avctx->pix_fmt = AV_PIX_FMT_YUV444P16;
                 s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
                 }
@@ -591,7 +591,7 @@ int ff_mjpeg_decode_sof(MJpegDecodeContext *s)
                     s->component_id[1] == 'G' && s->component_id[2] == 'B') {
                 s->avctx->pix_fmt = AV_PIX_FMT_GBRP;
             } else {
-                s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV444P : AV_PIX_FMT_YUVJ444P;
+                s->avctx->pix_fmt = AV_PIX_FMT_YUV444P;
                 s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
             }
             break;
@@ -622,7 +622,7 @@ int ff_mjpeg_decode_sof(MJpegDecodeContext *s)
             } else {
                 if (pix_fmt_id == 0x14111100)
                     s->upscale_v[1] = s->upscale_v[2] = 1;
-                if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV440P : AV_PIX_FMT_YUVJ440P;
+                if (s->bits <= 8) s->avctx->pix_fmt = AV_PIX_FMT_YUV440P;
                 else
                     goto unk_pixfmt;
                 s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
@@ -635,7 +635,7 @@ int ff_mjpeg_decode_sof(MJpegDecodeContext *s)
                     goto unk_pixfmt;
                 s->upscale_h[1] = s->upscale_h[2] = 1;
             } else {
-                if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV422P : AV_PIX_FMT_YUVJ422P;
+                if (s->bits <= 8) s->avctx->pix_fmt = AV_PIX_FMT_YUV422P;
                 else              s->avctx->pix_fmt = AV_PIX_FMT_YUV422P16;
                 s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
             }
@@ -652,14 +652,14 @@ int ff_mjpeg_decode_sof(MJpegDecodeContext *s)
         case 0x31111100:
             if (s->bits > 8)
                 goto unk_pixfmt;
-            s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV444P : AV_PIX_FMT_YUVJ444P;
+            s->avctx->pix_fmt = AV_PIX_FMT_YUV444P;
             s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
             s->upscale_h[1] = s->upscale_h[2] = 2;
             break;
         case 0x22121100:
         case 0x22111200:
         case 0x41211100:
-            if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV422P : AV_PIX_FMT_YUVJ422P;
+            if (s->bits <= 8) s->avctx->pix_fmt = AV_PIX_FMT_YUV422P;
             else
                 goto unk_pixfmt;
             s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
@@ -668,7 +668,7 @@ int ff_mjpeg_decode_sof(MJpegDecodeContext *s)
         case 0x23111100:
         case 0x42111100:
         case 0x24111100:
-            if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV420P : AV_PIX_FMT_YUVJ420P;
+            if (s->bits <= 8) s->avctx->pix_fmt = AV_PIX_FMT_YUV420P;
             else              s->avctx->pix_fmt = AV_PIX_FMT_YUV420P16;
             s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
             if (pix_fmt_id == 0x42111100) {
@@ -686,7 +686,7 @@ int ff_mjpeg_decode_sof(MJpegDecodeContext *s)
             }
             break;
         case 0x41111100:
-            if (s->bits <= 8) s->avctx->pix_fmt = s->cs_itu601 ? AV_PIX_FMT_YUV411P : AV_PIX_FMT_YUVJ411P;
+            if (s->bits <= 8) s->avctx->pix_fmt = AV_PIX_FMT_YUV411P;
             else
                 goto unk_pixfmt;
             s->avctx->color_range = s->cs_itu601 ? AVCOL_RANGE_MPEG : AVCOL_RANGE_JPEG;
@@ -2625,14 +2625,10 @@ the_end:
 
     if (AV_RB32(s->upscale_h)) {
         int p;
-        av_assert0(avctx->pix_fmt == AV_PIX_FMT_YUVJ444P ||
-                   avctx->pix_fmt == AV_PIX_FMT_YUV444P  ||
-                   avctx->pix_fmt == AV_PIX_FMT_YUVJ440P ||
+        av_assert0(avctx->pix_fmt == AV_PIX_FMT_YUV444P  ||
                    avctx->pix_fmt == AV_PIX_FMT_YUV440P  ||
                    avctx->pix_fmt == AV_PIX_FMT_YUVA444P ||
-                   avctx->pix_fmt == AV_PIX_FMT_YUVJ422P ||
                    avctx->pix_fmt == AV_PIX_FMT_YUV422P  ||
-                   avctx->pix_fmt == AV_PIX_FMT_YUVJ420P ||
                    avctx->pix_fmt == AV_PIX_FMT_YUV420P  ||
                    avctx->pix_fmt == AV_PIX_FMT_YUV420P16||
                    avctx->pix_fmt == AV_PIX_FMT_YUVA420P  ||
@@ -2706,14 +2702,10 @@ the_end:
     }
     if (AV_RB32(s->upscale_v)) {
         int p;
-        av_assert0(avctx->pix_fmt == AV_PIX_FMT_YUVJ444P ||
-                   avctx->pix_fmt == AV_PIX_FMT_YUV444P  ||
-                   avctx->pix_fmt == AV_PIX_FMT_YUVJ422P ||
+        av_assert0(avctx->pix_fmt == AV_PIX_FMT_YUV444P  ||
                    avctx->pix_fmt == AV_PIX_FMT_YUV422P  ||
-                   avctx->pix_fmt == AV_PIX_FMT_YUVJ420P ||
                    avctx->pix_fmt == AV_PIX_FMT_YUV420P  ||
                    avctx->pix_fmt == AV_PIX_FMT_YUV440P  ||
-                   avctx->pix_fmt == AV_PIX_FMT_YUVJ440P ||
                    avctx->pix_fmt == AV_PIX_FMT_YUVA444P ||
                    avctx->pix_fmt == AV_PIX_FMT_YUVA420P  ||
                    avctx->pix_fmt == AV_PIX_FMT_YUVA420P16||
diff --git a/libavcodec/mjpegenc.c b/libavcodec/mjpegenc.c
index c827a47e59..55fd250b35 100644
--- a/libavcodec/mjpegenc.c
+++ b/libavcodec/mjpegenc.c
@@ -655,7 +655,6 @@ const FFCodec ff_mjpeg_encoder = {
                       AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
     .caps_internal  = FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_ICC_PROFILES,
     .p.pix_fmts     = (const enum AVPixelFormat[]) {
-        AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ444P,
         AV_PIX_FMT_YUV420P,  AV_PIX_FMT_YUV422P,  AV_PIX_FMT_YUV444P,
         AV_PIX_FMT_NONE
     },
@@ -683,7 +682,7 @@ const FFCodec ff_amv_encoder = {
     .close          = mjpeg_encode_close,
     .caps_internal  = FF_CODEC_CAP_INIT_CLEANUP,
     .p.pix_fmts     = (const enum AVPixelFormat[]) {
-        AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_NONE
+        AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE
     },
     .p.color_ranges = (const enum AVColorRange[]) {
         AVCOL_RANGE_JPEG, AVCOL_RANGE_UNSPECIFIED
diff --git a/libavcodec/mjpegenc_common.c b/libavcodec/mjpegenc_common.c
index 049ae3d929..7b5ca29b34 100644
--- a/libavcodec/mjpegenc_common.c
+++ b/libavcodec/mjpegenc_common.c
@@ -257,7 +257,7 @@ void ff_mjpeg_init_hvsample(AVCodecContext *avctx, int hsample[4], int vsample[4
         vsample[1] = hsample[1] =
         vsample[2] = hsample[2] =
         vsample[3] = hsample[3] = 1;
-    } else if (avctx->pix_fmt == AV_PIX_FMT_YUV444P || avctx->pix_fmt == AV_PIX_FMT_YUVJ444P) {
+    } else if (avctx->pix_fmt == AV_PIX_FMT_YUV444P) {
         vsample[0] = vsample[1] = vsample[2] = 2;
         hsample[0] = hsample[1] = hsample[2] = 1;
     } else {
diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c
index 6d2d417454..f0a376995a 100644
--- a/libavcodec/mpegvideo_enc.c
+++ b/libavcodec/mpegvideo_enc.c
@@ -317,15 +317,12 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx)
     mpv_encode_defaults(s);
 
     switch (avctx->pix_fmt) {
-    case AV_PIX_FMT_YUVJ444P:
     case AV_PIX_FMT_YUV444P:
         s->chroma_format = CHROMA_444;
         break;
-    case AV_PIX_FMT_YUVJ422P:
     case AV_PIX_FMT_YUV422P:
         s->chroma_format = CHROMA_422;
         break;
-    case AV_PIX_FMT_YUVJ420P:
     case AV_PIX_FMT_YUV420P:
     default:
         s->chroma_format = CHROMA_420;
diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c
index 626f10d20a..498e9e06fe 100644
--- a/libavcodec/nvenc.c
+++ b/libavcodec/nvenc.c
@@ -1163,8 +1163,7 @@ static av_cold int nvenc_setup_h264_config(AVCodecContext *avctx)
         vui->colourMatrix = IS_GBRP(ctx->data_pix_fmt) ? AVCOL_SPC_RGB : avctx->colorspace;
         vui->colourPrimaries = avctx->color_primaries;
         vui->transferCharacteristics = avctx->color_trc;
-        vui->videoFullRangeFlag = (avctx->color_range == AVCOL_RANGE_JPEG
-            || ctx->data_pix_fmt == AV_PIX_FMT_YUVJ420P || ctx->data_pix_fmt == AV_PIX_FMT_YUVJ422P || ctx->data_pix_fmt == AV_PIX_FMT_YUVJ444P);
+        vui->videoFullRangeFlag = avctx->color_range == AVCOL_RANGE_JPEG;
     }
 
     vui->colourDescriptionPresentFlag =
@@ -1289,8 +1288,7 @@ static av_cold int nvenc_setup_hevc_config(AVCodecContext *avctx)
         vui->colourMatrix = IS_GBRP(ctx->data_pix_fmt) ? AVCOL_SPC_RGB : avctx->colorspace;
         vui->colourPrimaries = avctx->color_primaries;
         vui->transferCharacteristics = avctx->color_trc;
-        vui->videoFullRangeFlag = (avctx->color_range == AVCOL_RANGE_JPEG
-            || ctx->data_pix_fmt == AV_PIX_FMT_YUVJ420P || ctx->data_pix_fmt == AV_PIX_FMT_YUVJ422P || ctx->data_pix_fmt == AV_PIX_FMT_YUVJ444P);
+        vui->videoFullRangeFlag = avctx->color_range == AVCOL_RANGE_JPEG;
     }
 
     vui->colourDescriptionPresentFlag =
@@ -1407,8 +1405,7 @@ static av_cold int nvenc_setup_av1_config(AVCodecContext *avctx)
         av1->matrixCoefficients = IS_GBRP(ctx->data_pix_fmt) ? AVCOL_SPC_RGB : avctx->colorspace;
         av1->colorPrimaries = avctx->color_primaries;
         av1->transferCharacteristics = avctx->color_trc;
-        av1->colorRange = (avctx->color_range == AVCOL_RANGE_JPEG
-            || ctx->data_pix_fmt == AV_PIX_FMT_YUVJ420P || ctx->data_pix_fmt == AV_PIX_FMT_YUVJ422P || ctx->data_pix_fmt == AV_PIX_FMT_YUVJ444P);
+        av1->colorRange = avctx->color_range == AVCOL_RANGE_JPEG;
     }
 
     if (IS_YUV444(ctx->data_pix_fmt)) {
diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c
index 7563625627..540c766db5 100644
--- a/libavcodec/qsv.c
+++ b/libavcodec/qsv.c
@@ -225,7 +225,6 @@ int ff_qsv_map_pixfmt(enum AVPixelFormat format, uint32_t *fourcc, uint16_t *shi
 {
     switch (format) {
     case AV_PIX_FMT_YUV420P:
-    case AV_PIX_FMT_YUVJ420P:
     case AV_PIX_FMT_NV12:
         *fourcc = MFX_FOURCC_NV12;
         *shift = 0;
diff --git a/libavcodec/raw.c b/libavcodec/raw.c
index b73b80e5fd..478b4e38b7 100644
--- a/libavcodec/raw.c
+++ b/libavcodec/raw.c
@@ -39,13 +39,6 @@ static const PixelFormatTag raw_pix_fmt_tags[] = {
     { AV_PIX_FMT_YUV422P, MKTAG('Y', '4', '2', 'B') },
     { AV_PIX_FMT_YUV422P, MKTAG('P', '4', '2', '2') },
     { AV_PIX_FMT_YUV422P, MKTAG('Y', 'V', '1', '6') },
-    /* yuvjXXX formats are deprecated hacks specific to libav*,
-       they are identical to yuvXXX  */
-    { AV_PIX_FMT_YUVJ420P, MKTAG('I', '4', '2', '0') }, /* Planar formats */
-    { AV_PIX_FMT_YUVJ420P, MKTAG('I', 'Y', 'U', 'V') },
-    { AV_PIX_FMT_YUVJ420P, MKTAG('Y', 'V', '1', '2') },
-    { AV_PIX_FMT_YUVJ422P, MKTAG('Y', '4', '2', 'B') },
-    { AV_PIX_FMT_YUVJ422P, MKTAG('P', '4', '2', '2') },
     { AV_PIX_FMT_GRAY8,    MKTAG('Y', '8', '0', '0') },
     { AV_PIX_FMT_GRAY8,    MKTAG('Y', '8', ' ', ' ') },
 
@@ -103,11 +96,8 @@ static const PixelFormatTag raw_pix_fmt_tags[] = {
     { AV_PIX_FMT_BGR24,    MKTAG('B', 'G', 'R', 24 ) },
     { AV_PIX_FMT_YUV411P,  MKTAG('4', '1', '1', 'P') },
     { AV_PIX_FMT_YUV422P,  MKTAG('4', '2', '2', 'P') },
-    { AV_PIX_FMT_YUVJ422P, MKTAG('4', '2', '2', 'P') },
     { AV_PIX_FMT_YUV440P,  MKTAG('4', '4', '0', 'P') },
-    { AV_PIX_FMT_YUVJ440P, MKTAG('4', '4', '0', 'P') },
     { AV_PIX_FMT_YUV444P,  MKTAG('4', '4', '4', 'P') },
-    { AV_PIX_FMT_YUVJ444P, MKTAG('4', '4', '4', 'P') },
     { AV_PIX_FMT_MONOWHITE,MKTAG('B', '1', 'W', '0') },
     { AV_PIX_FMT_MONOBLACK,MKTAG('B', '0', 'W', '1') },
     { AV_PIX_FMT_BGR8,     MKTAG('B', 'G', 'R',  8 ) },
@@ -257,10 +247,6 @@ static const PixelFormatTag raw_pix_fmt_tags[] = {
     { AV_PIX_FMT_YUV422P,     MKTAG('I', '4', '2', '2') },
     { AV_PIX_FMT_YUV440P,     MKTAG('I', '4', '4', '0') },
     { AV_PIX_FMT_YUV444P,     MKTAG('I', '4', '4', '4') },
-    { AV_PIX_FMT_YUVJ420P,    MKTAG('J', '4', '2', '0') },
-    { AV_PIX_FMT_YUVJ422P,    MKTAG('J', '4', '2', '2') },
-    { AV_PIX_FMT_YUVJ440P,    MKTAG('J', '4', '4', '0') },
-    { AV_PIX_FMT_YUVJ444P,    MKTAG('J', '4', '4', '4') },
     { AV_PIX_FMT_YUVA444P,    MKTAG('Y', 'U', 'V', 'A') },
     { AV_PIX_FMT_YUVA420P,    MKTAG('I', '4', '0', 'A') },
     { AV_PIX_FMT_YUVA422P,    MKTAG('I', '4', '2', 'A') },
diff --git a/libavcodec/roqvideodec.c b/libavcodec/roqvideodec.c
index bfc69a65c9..50e14934b6 100644
--- a/libavcodec/roqvideodec.c
+++ b/libavcodec/roqvideodec.c
@@ -184,7 +184,7 @@ static av_cold int roq_decode_init(AVCodecContext *avctx)
     if (!s->current_frame || !s->last_frame)
         return AVERROR(ENOMEM);
 
-    avctx->pix_fmt = AV_PIX_FMT_YUVJ444P;
+    avctx->pix_fmt = AV_PIX_FMT_YUV444P;
     avctx->color_range = AVCOL_RANGE_JPEG;
 
     return 0;
diff --git a/libavcodec/roqvideoenc.c b/libavcodec/roqvideoenc.c
index b584ee1142..3cc4ddaa8b 100644
--- a/libavcodec/roqvideoenc.c
+++ b/libavcodec/roqvideoenc.c
@@ -1125,7 +1125,7 @@ const FFCodec ff_roq_encoder = {
     .init                 = roq_encode_init,
     FF_CODEC_ENCODE_CB(roq_encode_frame),
     .close                = roq_encode_end,
-    .p.pix_fmts           = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUVJ444P,
+    .p.pix_fmts           = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV444P,
                                                         AV_PIX_FMT_NONE },
     .p.color_ranges       = (const enum AVColorRange[]){ AVCOL_RANGE_JPEG,
                                                         AVCOL_RANGE_UNSPECIFIED },
diff --git a/libavcodec/svq3.c b/libavcodec/svq3.c
index 2d03dbc457..9217c60182 100644
--- a/libavcodec/svq3.c
+++ b/libavcodec/svq3.c
@@ -1143,7 +1143,7 @@ static av_cold int svq3_decode_init(AVCodecContext *avctx)
     ff_hpeldsp_init(&s->hdsp, avctx->flags);
     ff_tpeldsp_init(&s->tdsp);
 
-    avctx->pix_fmt     = AV_PIX_FMT_YUVJ420P;
+    avctx->pix_fmt     = AV_PIX_FMT_YUV420P;
     avctx->color_range = AVCOL_RANGE_JPEG;
 
     s->avctx         = avctx;
@@ -1602,7 +1602,7 @@ const FFCodec ff_svq3_decoder = {
     .p.capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND |
                       AV_CODEC_CAP_DR1             |
                       AV_CODEC_CAP_DELAY,
-    .p.pix_fmts     = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUVJ420P,
+    .p.pix_fmts     = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P,
                                                      AV_PIX_FMT_NONE},
     .caps_internal  = FF_CODEC_CAP_INIT_CLEANUP,
 };
diff --git a/libavcodec/tdsc.c b/libavcodec/tdsc.c
index 739738d9b1..d4f5953524 100644
--- a/libavcodec/tdsc.c
+++ b/libavcodec/tdsc.c
@@ -360,7 +360,7 @@ static int tdsc_decode_jpeg_tile(AVCodecContext *avctx, int tile_size,
     }
 
     ret = avcodec_receive_frame(ctx->jpeg_avctx, ctx->jpgframe);
-    if (ret < 0 || ctx->jpgframe->format != AV_PIX_FMT_YUVJ420P) {
+    if (ret < 0 || ctx->jpgframe->format != AV_PIX_FMT_YUV420P) {
         av_log(avctx, AV_LOG_ERROR,
                "JPEG decoding error (%d).\n", ret);
 
diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index 39b83c7791..b9688820d1 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -167,10 +167,6 @@ void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height,
     case AV_PIX_FMT_GRAY8:
     case AV_PIX_FMT_GRAY16BE:
     case AV_PIX_FMT_GRAY16LE:
-    case AV_PIX_FMT_YUVJ420P:
-    case AV_PIX_FMT_YUVJ422P:
-    case AV_PIX_FMT_YUVJ440P:
-    case AV_PIX_FMT_YUVJ444P:
     case AV_PIX_FMT_YUVA420P:
     case AV_PIX_FMT_YUVA422P:
     case AV_PIX_FMT_YUVA444P:
@@ -250,7 +246,6 @@ void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height,
             w_align = 16*2;
         break;
     case AV_PIX_FMT_YUV411P:
-    case AV_PIX_FMT_YUVJ411P:
     case AV_PIX_FMT_UYYVYY411:
         w_align = 32;
         h_align = 16 * 2;
diff --git a/libavcodec/vdpau.c b/libavcodec/vdpau.c
index 2b9b78d8d0..680e0784cc 100644
--- a/libavcodec/vdpau.c
+++ b/libavcodec/vdpau.c
@@ -88,7 +88,6 @@ int av_vdpau_get_surface_parameters(AVCodecContext *avctx,
     /* See <vdpau/vdpau.h> for per-type alignment constraints. */
     switch (avctx->sw_pix_fmt) {
     case AV_PIX_FMT_YUV420P:
-    case AV_PIX_FMT_YUVJ420P:
     case AV_PIX_FMT_YUV420P10:
     case AV_PIX_FMT_YUV420P12:
         t = VDP_CHROMA_TYPE_420;
@@ -96,13 +95,11 @@ int av_vdpau_get_surface_parameters(AVCodecContext *avctx,
         h = (h + 3) & ~3;
         break;
     case AV_PIX_FMT_YUV422P:
-    case AV_PIX_FMT_YUVJ422P:
         t = VDP_CHROMA_TYPE_422;
         w = (w + 1) & ~1;
         h = (h + 1) & ~1;
         break;
     case AV_PIX_FMT_YUV444P:
-    case AV_PIX_FMT_YUVJ444P:
     case AV_PIX_FMT_YUV444P10:
     case AV_PIX_FMT_YUV444P12:
         t = VDP_CHROMA_TYPE_444;
diff --git a/libavfilter/avf_showcwt.c b/libavfilter/avf_showcwt.c
index d5bc920a4b..9753d9212e 100644
--- a/libavfilter/avf_showcwt.c
+++ b/libavfilter/avf_showcwt.c
@@ -228,7 +228,7 @@ static int query_formats(AVFilterContext *ctx)
     AVFilterLink *inlink = ctx->inputs[0];
     AVFilterLink *outlink = ctx->outputs[0];
     static const enum AVSampleFormat sample_fmts[] = { AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_NONE };
-    static const enum AVPixelFormat pix_fmts[] = { AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVA444P, AV_PIX_FMT_NONE };
+    static const enum AVPixelFormat pix_fmts[] = { AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVA444P, AV_PIX_FMT_NONE };
     int ret;
 
     formats = ff_make_format_list(sample_fmts);
diff --git a/libavfilter/avf_showspectrum.c b/libavfilter/avf_showspectrum.c
index 8cf73fce70..530f98e023 100644
--- a/libavfilter/avf_showspectrum.c
+++ b/libavfilter/avf_showspectrum.c
@@ -365,7 +365,7 @@ static int query_formats(AVFilterContext *ctx)
     AVFilterLink *inlink = ctx->inputs[0];
     AVFilterLink *outlink = ctx->outputs[0];
     static const enum AVSampleFormat sample_fmts[] = { AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_NONE };
-    static const enum AVPixelFormat pix_fmts[] = { AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVA444P, AV_PIX_FMT_NONE };
+    static const enum AVPixelFormat pix_fmts[] = { AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVA444P, AV_PIX_FMT_NONE };
     int ret;
 
     /* set input audio formats */
diff --git a/libavfilter/avfiltergraph.c b/libavfilter/avfiltergraph.c
index e7fabe85ea..f5697f9824 100644
--- a/libavfilter/avfiltergraph.c
+++ b/libavfilter/avfiltergraph.c
@@ -612,17 +612,7 @@ int ff_fmt_is_regular_yuv(enum AVPixelFormat fmt)
     if (desc->flags & (AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_PAL |
                        AV_PIX_FMT_FLAG_XYZ | AV_PIX_FMT_FLAG_FLOAT))
         return 0;
-
-    switch (fmt) {
-    case AV_PIX_FMT_YUVJ420P:
-    case AV_PIX_FMT_YUVJ422P:
-    case AV_PIX_FMT_YUVJ444P:
-    case AV_PIX_FMT_YUVJ440P:
-    case AV_PIX_FMT_YUVJ411P:
-        return 0;
-    default:
-        return 1;
-    }
+    return 1;
 }
 
 static int pick_format(AVFilterLink *link, AVFilterLink *ref)
diff --git a/libavfilter/drawutils.c b/libavfilter/drawutils.c
index 1081938d86..d5ee122c1f 100644
--- a/libavfilter/drawutils.c
+++ b/libavfilter/drawutils.c
@@ -98,10 +98,7 @@ int ff_draw_init2(FFDrawContext *draw, enum AVPixelFormat format, enum AVColorSp
     if (!(desc->flags & AV_PIX_FMT_FLAG_RGB) && !(luma = av_csp_luma_coeffs_from_avcsp(csp)))
         return AVERROR(EINVAL);
     if (range == AVCOL_RANGE_UNSPECIFIED)
-        range = (format == AV_PIX_FMT_YUVJ420P || format == AV_PIX_FMT_YUVJ422P ||
-                 format == AV_PIX_FMT_YUVJ444P || format == AV_PIX_FMT_YUVJ411P ||
-                 format == AV_PIX_FMT_YUVJ440P || csp == AVCOL_SPC_RGB)
-                ? AVCOL_RANGE_JPEG : AVCOL_RANGE_MPEG;
+        range = csp == AVCOL_SPC_RGB ? AVCOL_RANGE_JPEG : AVCOL_RANGE_MPEG;
     if (range != AVCOL_RANGE_JPEG && range != AVCOL_RANGE_MPEG)
         return AVERROR(EINVAL);
     for (i = 0; i < desc->nb_components; i++) {
diff --git a/libavfilter/f_select.c b/libavfilter/f_select.c
index 47e36f0014..7f082ffb29 100644
--- a/libavfilter/f_select.c
+++ b/libavfilter/f_select.c
@@ -502,9 +502,7 @@ static int query_formats(AVFilterContext *ctx)
         static const enum AVPixelFormat pix_fmts[] = {
             AV_PIX_FMT_RGB24, AV_PIX_FMT_BGR24, AV_PIX_FMT_RGBA,
             AV_PIX_FMT_ABGR, AV_PIX_FMT_BGRA, AV_PIX_FMT_GRAY8,
-            AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVJ420P,
-            AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVJ422P,
-            AV_PIX_FMT_YUV420P10,
+            AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV420P10,
             AV_PIX_FMT_NONE
         };
         return ff_set_common_formats_from_list(ctx, pix_fmts);
diff --git a/libavfilter/vaf_spectrumsynth.c b/libavfilter/vaf_spectrumsynth.c
index 896eba558e..2b0f277f5c 100644
--- a/libavfilter/vaf_spectrumsynth.c
+++ b/libavfilter/vaf_spectrumsynth.c
@@ -106,8 +106,8 @@ static int query_formats(AVFilterContext *ctx)
     AVFilterLink *outlink = ctx->outputs[0];
     static const enum AVSampleFormat sample_fmts[] = { AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_NONE };
     static const enum AVPixelFormat pix_fmts[] = { AV_PIX_FMT_GRAY8, AV_PIX_FMT_GRAY16,
-                                                   AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVJ444P,
-                                                   AV_PIX_FMT_YUV444P16, AV_PIX_FMT_NONE };
+                                                   AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV444P16,
+                                                   AV_PIX_FMT_NONE };
     int ret, sample_rates[] = { 48000, -1 };
 
     formats = ff_make_format_list(sample_fmts);
@@ -293,7 +293,6 @@ static void read_fft_data(AVFilterContext *ctx, int x, int h, int ch)
                 read16_fft_bin(s, x, y, f, ch);
             }
             break;
-        case AV_PIX_FMT_YUVJ444P:
         case AV_PIX_FMT_YUV444P:
         case AV_PIX_FMT_GRAY8:
             for (y = start, f = 0; y >= end; y--, f++) {
@@ -310,7 +309,6 @@ static void read_fft_data(AVFilterContext *ctx, int x, int h, int ch)
                 read16_fft_bin(s, y, x, f, ch);
             }
             break;
-        case AV_PIX_FMT_YUVJ444P:
         case AV_PIX_FMT_YUV444P:
         case AV_PIX_FMT_GRAY8:
             for (y = end, f = 0; y <= start; y++, f++) {
diff --git a/libavfilter/vf_amplify.c b/libavfilter/vf_amplify.c
index 0ebca60ea2..9e1910951b 100644
--- a/libavfilter/vf_amplify.c
+++ b/libavfilter/vf_amplify.c
@@ -55,9 +55,6 @@ static const enum AVPixelFormat pixel_fmts[] = {
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
-    AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV440P10,
diff --git a/libavfilter/vf_atadenoise.c b/libavfilter/vf_atadenoise.c
index eed12acfa4..36a9dcefda 100644
--- a/libavfilter/vf_atadenoise.c
+++ b/libavfilter/vf_atadenoise.c
@@ -99,9 +99,6 @@ static const enum AVPixelFormat pixel_fmts[] = {
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
-    AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV440P10,
diff --git a/libavfilter/vf_avgblur.c b/libavfilter/vf_avgblur.c
index 8ff6111bcc..ce7dd5a306 100644
--- a/libavfilter/vf_avgblur.c
+++ b/libavfilter/vf_avgblur.c
@@ -247,10 +247,8 @@ static void averageiir2d(AVFilterContext *ctx, AVFrame *in, AVFrame *out, int pl
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
+    AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV440P12,
diff --git a/libavfilter/vf_bbox.c b/libavfilter/vf_bbox.c
index 02893d500d..b382d1ccf5 100644
--- a/libavfilter/vf_bbox.c
+++ b/libavfilter/vf_bbox.c
@@ -53,9 +53,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
-    AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV440P10,
diff --git a/libavfilter/vf_bilateral.c b/libavfilter/vf_bilateral.c
index fe16419026..2291501291 100644
--- a/libavfilter/vf_bilateral.c
+++ b/libavfilter/vf_bilateral.c
@@ -68,10 +68,8 @@ AVFILTER_DEFINE_CLASS(bilateral);
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
+    AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV440P12,
diff --git a/libavfilter/vf_bitplanenoise.c b/libavfilter/vf_bitplanenoise.c
index 32235ff230..e1388d3e99 100644
--- a/libavfilter/vf_bitplanenoise.c
+++ b/libavfilter/vf_bitplanenoise.c
@@ -49,8 +49,6 @@ AVFILTER_DEFINE_CLASS(bitplanenoise);
 static const enum AVPixelFormat pixfmts[] = {
     AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ411P,
-    AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUV444P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV420P9,
     AV_PIX_FMT_YUV444P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV420P10,
     AV_PIX_FMT_YUV440P10,
diff --git a/libavfilter/vf_blackdetect.c b/libavfilter/vf_blackdetect.c
index 55033ba5ea..98c0e2a107 100644
--- a/libavfilter/vf_blackdetect.c
+++ b/libavfilter/vf_blackdetect.c
@@ -67,20 +67,12 @@ static const AVOption blackdetect_options[] = {
 
 AVFILTER_DEFINE_CLASS(blackdetect);
 
-#define YUVJ_FORMATS \
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P
-
-static const enum AVPixelFormat yuvj_formats[] = {
-    YUVJ_FORMATS, AV_PIX_FMT_NONE
-};
-
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_GRAY8,
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
     AV_PIX_FMT_NV12, AV_PIX_FMT_NV21,
-    YUVJ_FORMATS,
     AV_PIX_FMT_GRAY10, AV_PIX_FMT_GRAY12, AV_PIX_FMT_GRAY14,
     AV_PIX_FMT_GRAY16,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
@@ -177,8 +169,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *picref)
     double picture_black_ratio = 0;
     const int max = (1 << s->depth) - 1;
     const int factor = (1 << (s->depth - 8));
-    const int full = picref->color_range == AVCOL_RANGE_JPEG ||
-                     ff_fmt_is_in(picref->format, yuvj_formats);
+    const int full = picref->color_range == AVCOL_RANGE_JPEG;
 
     s->pixel_black_th_i = full ? s->pixel_black_th * max :
         // luminance_minimum_value + pixel_black_th * luminance_range_size
diff --git a/libavfilter/vf_blend.c b/libavfilter/vf_blend.c
index ecabb78e61..e14786e255 100644
--- a/libavfilter/vf_blend.c
+++ b/libavfilter/vf_blend.c
@@ -253,7 +253,6 @@ static av_cold int init(AVFilterContext *ctx)
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA420P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ422P,AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP, AV_PIX_FMT_GRAY8,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
diff --git a/libavfilter/vf_blockdetect.c b/libavfilter/vf_blockdetect.c
index d787aff5e4..a7b8902b1a 100644
--- a/libavfilter/vf_blockdetect.c
+++ b/libavfilter/vf_blockdetect.c
@@ -258,8 +258,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV422P,  AV_PIX_FMT_YUV420P,
     AV_PIX_FMT_YUV444P,  AV_PIX_FMT_YUV440P,
     AV_PIX_FMT_YUV411P,  AV_PIX_FMT_YUV410P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ444P,
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA420P,
     AV_PIX_FMT_NONE
 };
diff --git a/libavfilter/vf_blurdetect.c b/libavfilter/vf_blurdetect.c
index 354a6b6100..5f7b1f89eb 100644
--- a/libavfilter/vf_blurdetect.c
+++ b/libavfilter/vf_blurdetect.c
@@ -342,8 +342,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV422P,  AV_PIX_FMT_YUV420P,
     AV_PIX_FMT_YUV444P,  AV_PIX_FMT_YUV440P,
     AV_PIX_FMT_YUV411P,  AV_PIX_FMT_YUV410P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ444P,
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA420P,
     AV_PIX_FMT_NONE
 };
diff --git a/libavfilter/vf_bm3d.c b/libavfilter/vf_bm3d.c
index cdced50ba3..9be1faba8e 100644
--- a/libavfilter/vf_bm3d.c
+++ b/libavfilter/vf_bm3d.c
@@ -169,9 +169,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
-    AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV440P10,
diff --git a/libavfilter/vf_bwdif.c b/libavfilter/vf_bwdif.c
index 137cd5ef13..17f33207be 100644
--- a/libavfilter/vf_bwdif.c
+++ b/libavfilter/vf_bwdif.c
@@ -151,8 +151,6 @@ static av_cold void uninit(AVFilterContext *ctx)
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV420P,
     AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12,
diff --git a/libavfilter/vf_cas.c b/libavfilter/vf_cas.c
index 5fa5055d76..b99250d797 100644
--- a/libavfilter/vf_cas.c
+++ b/libavfilter/vf_cas.c
@@ -207,9 +207,6 @@ static const enum AVPixelFormat pixel_fmts[] = {
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
-    AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV440P10,
diff --git a/libavfilter/vf_chromanr.c b/libavfilter/vf_chromanr.c
index dd49d8670a..0f4a27add5 100644
--- a/libavfilter/vf_chromanr.c
+++ b/libavfilter/vf_chromanr.c
@@ -57,7 +57,6 @@ typedef struct ChromaNRContext {
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV444P,
     AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA444P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_YUV420P9,   AV_PIX_FMT_YUV422P9,   AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10,  AV_PIX_FMT_YUV422P10,  AV_PIX_FMT_YUV440P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV444P12,  AV_PIX_FMT_YUV422P12,  AV_PIX_FMT_YUV440P12, AV_PIX_FMT_YUV420P12,
diff --git a/libavfilter/vf_chromashift.c b/libavfilter/vf_chromashift.c
index 39b96a749e..06e3053ccc 100644
--- a/libavfilter/vf_chromashift.c
+++ b/libavfilter/vf_chromashift.c
@@ -380,7 +380,6 @@ static const AVFilterPad inputs[] = {
 
 static const enum AVPixelFormat yuv_pix_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA420P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ422P,AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10, AV_PIX_FMT_YUV440P10,
diff --git a/libavfilter/vf_colorcorrect.c b/libavfilter/vf_colorcorrect.c
index 1c4dea531b..b23ede296d 100644
--- a/libavfilter/vf_colorcorrect.c
+++ b/libavfilter/vf_colorcorrect.c
@@ -430,7 +430,6 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
 static const enum AVPixelFormat pixel_fmts[] = {
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV444P,
     AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA444P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_YUV420P9,   AV_PIX_FMT_YUV422P9,   AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10,  AV_PIX_FMT_YUV422P10,  AV_PIX_FMT_YUV440P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV444P12,  AV_PIX_FMT_YUV422P12,  AV_PIX_FMT_YUV440P12, AV_PIX_FMT_YUV420P12,
diff --git a/libavfilter/vf_colorize.c b/libavfilter/vf_colorize.c
index e6c563e3e2..236b53a6c5 100644
--- a/libavfilter/vf_colorize.c
+++ b/libavfilter/vf_colorize.c
@@ -212,9 +212,6 @@ static const enum AVPixelFormat pixel_fmts[] = {
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
-    AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV440P10,
diff --git a/libavfilter/vf_colorspace.c b/libavfilter/vf_colorspace.c
index 2a30434401..d51f4e2d0c 100644
--- a/libavfilter/vf_colorspace.c
+++ b/libavfilter/vf_colorspace.c
@@ -835,7 +835,6 @@ static int query_formats(AVFilterContext *ctx)
         AV_PIX_FMT_YUV420P,   AV_PIX_FMT_YUV422P,   AV_PIX_FMT_YUV444P,
         AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
         AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12,
-        AV_PIX_FMT_YUVJ420P,  AV_PIX_FMT_YUVJ422P,  AV_PIX_FMT_YUVJ444P,
         AV_PIX_FMT_NONE
     };
     int res;
diff --git a/libavfilter/vf_convolution.c b/libavfilter/vf_convolution.c
index c1a63c9aa9..ee46b42099 100644
--- a/libavfilter/vf_convolution.c
+++ b/libavfilter/vf_convolution.c
@@ -80,10 +80,8 @@ static const int same7x7[49] = {0, 0, 0, 0, 0, 0, 0,
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
+    AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV440P12,
diff --git a/libavfilter/vf_convolve.c b/libavfilter/vf_convolve.c
index 25dc92e988..cbe1a3262c 100644
--- a/libavfilter/vf_convolve.c
+++ b/libavfilter/vf_convolve.c
@@ -92,10 +92,8 @@ static const AVOption convolve_options[] = {
 
 static const enum AVPixelFormat pixel_fmts_fftfilt[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
+    AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV440P12,
diff --git a/libavfilter/vf_corr.c b/libavfilter/vf_corr.c
index fb2770539e..7fd1b313fa 100644
--- a/libavfilter/vf_corr.c
+++ b/libavfilter/vf_corr.c
@@ -191,8 +191,6 @@ static const enum AVPixelFormat pix_fmts[] = {
 #define PF(suf)         PF_NOALPHA(suf), PF_ALPHA(suf)
     PF(P), PF(P9), PF(P10), PF_NOALPHA(P12), PF_NOALPHA(P14), PF(P16),
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
     AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRP9, AV_PIX_FMT_GBRP10,
     AV_PIX_FMT_GBRP12, AV_PIX_FMT_GBRP14, AV_PIX_FMT_GBRP16,
     AV_PIX_FMT_GBRAP, AV_PIX_FMT_GBRAP10, AV_PIX_FMT_GBRAP12, AV_PIX_FMT_GBRAP16,
diff --git a/libavfilter/vf_cover_rect.c b/libavfilter/vf_cover_rect.c
index 7f34311589..12b821b9a4 100644
--- a/libavfilter/vf_cover_rect.c
+++ b/libavfilter/vf_cover_rect.c
@@ -215,7 +215,7 @@ static av_cold int init(AVFilterContext *ctx)
                                 &cover->cover_frame->format, cover->cover_filename, ctx)) < 0)
             return ret;
 
-        if (cover->cover_frame->format != AV_PIX_FMT_YUV420P && cover->cover_frame->format != AV_PIX_FMT_YUVJ420P) {
+        if (cover->cover_frame->format != AV_PIX_FMT_YUV420P) {
             av_log(ctx, AV_LOG_ERROR, "cover image is not a YUV420 image\n");
             return AVERROR(EINVAL);
         }
@@ -241,6 +241,6 @@ const AVFilter ff_vf_cover_rect = {
     .uninit          = uninit,
     FILTER_INPUTS(cover_rect_inputs),
     FILTER_OUTPUTS(ff_video_default_filterpad),
-    FILTER_PIXFMTS(AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVJ420P),
+    FILTER_PIXFMTS(AV_PIX_FMT_YUV420P),
     .priv_class      = &cover_rect_class,
 };
diff --git a/libavfilter/vf_cropdetect.c b/libavfilter/vf_cropdetect.c
index 58755fc356..08740e50a7 100644
--- a/libavfilter/vf_cropdetect.c
+++ b/libavfilter/vf_cropdetect.c
@@ -59,9 +59,9 @@ typedef struct CropDetectContext {
 } CropDetectContext;
 
 static const enum AVPixelFormat pix_fmts[] = {
-    AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVJ444P,
+    AV_PIX_FMT_YUV420P,
+    AV_PIX_FMT_YUV422P,
+    AV_PIX_FMT_YUV444P,
     AV_PIX_FMT_YUV411P, AV_PIX_FMT_GRAY8,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_YUV420P9 , AV_PIX_FMT_YUV422P9 , AV_PIX_FMT_YUV444P9,
diff --git a/libavfilter/vf_dblur.c b/libavfilter/vf_dblur.c
index 3110d19271..6ee6ece03c 100644
--- a/libavfilter/vf_dblur.c
+++ b/libavfilter/vf_dblur.c
@@ -113,10 +113,8 @@ static void diriir2d(AVFilterContext *ctx, int plane)
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
+    AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV440P12,
diff --git a/libavfilter/vf_deband.c b/libavfilter/vf_deband.c
index 177d888bed..befc7df2da 100644
--- a/libavfilter/vf_deband.c
+++ b/libavfilter/vf_deband.c
@@ -79,8 +79,6 @@ static int query_formats(AVFilterContext *ctx)
         AV_PIX_FMT_GRAY12, AV_PIX_FMT_GRAY14, AV_PIX_FMT_GRAY16,
         AV_PIX_FMT_YUV444P,  AV_PIX_FMT_YUV422P,  AV_PIX_FMT_YUV420P,
         AV_PIX_FMT_YUV411P,  AV_PIX_FMT_YUV410P,  AV_PIX_FMT_YUV440P,
-        AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-        AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUVJ440P,
         AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA444P,
         AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
         AV_PIX_FMT_YUVA420P9, AV_PIX_FMT_YUVA422P9, AV_PIX_FMT_YUVA444P9,
@@ -97,7 +95,7 @@ static int query_formats(AVFilterContext *ctx)
     };
 
     static const enum AVPixelFormat cpix_fmts[] = {
-        AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVJ444P,
+        AV_PIX_FMT_YUV444P,
         AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P9,
         AV_PIX_FMT_YUVA444P9, AV_PIX_FMT_YUVA444P10,
         AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV444P14,
diff --git a/libavfilter/vf_deblock.c b/libavfilter/vf_deblock.c
index d35b22e3be..3bdd3ec075 100644
--- a/libavfilter/vf_deblock.c
+++ b/libavfilter/vf_deblock.c
@@ -62,10 +62,8 @@ typedef struct DeblockContext {
 
 static const enum AVPixelFormat pixel_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
+    AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV440P12,
diff --git a/libavfilter/vf_decimate.c b/libavfilter/vf_decimate.c
index dbeca427f1..8651f976cb 100644
--- a/libavfilter/vf_decimate.c
+++ b/libavfilter/vf_decimate.c
@@ -372,8 +372,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     PF(P), PF(P9), PF(P10), PF_NOALPHA(P12), PF_NOALPHA(P14), PF(P16),
     AV_PIX_FMT_YUV440P10, AV_PIX_FMT_YUV440P12,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_GRAY8, AV_PIX_FMT_GRAY9, AV_PIX_FMT_GRAY10, AV_PIX_FMT_GRAY12, AV_PIX_FMT_GRAY14,
     AV_PIX_FMT_GRAY16,
     AV_PIX_FMT_NONE
diff --git a/libavfilter/vf_dedot.c b/libavfilter/vf_dedot.c
index 7aa2583184..b52338f11a 100644
--- a/libavfilter/vf_dedot.c
+++ b/libavfilter/vf_dedot.c
@@ -56,10 +56,8 @@ typedef struct DedotContext {
 
 static const enum AVPixelFormat pixel_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
+    AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV440P12,
diff --git a/libavfilter/vf_deflicker.c b/libavfilter/vf_deflicker.c
index 25172135ed..4146385b33 100644
--- a/libavfilter/vf_deflicker.c
+++ b/libavfilter/vf_deflicker.c
@@ -96,9 +96,6 @@ static const enum AVPixelFormat pixel_fmts[] = {
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
-    AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV440P10,
diff --git a/libavfilter/vf_deshake.c b/libavfilter/vf_deshake.c
index 299814fd65..b3650bf9e3 100644
--- a/libavfilter/vf_deshake.c
+++ b/libavfilter/vf_deshake.c
@@ -426,8 +426,7 @@ static av_cold int init(AVFilterContext *ctx)
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV420P,  AV_PIX_FMT_YUV422P,  AV_PIX_FMT_YUV444P,  AV_PIX_FMT_YUV410P,
-    AV_PIX_FMT_YUV411P,  AV_PIX_FMT_YUV440P,  AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_NONE
+    AV_PIX_FMT_YUV411P,  AV_PIX_FMT_YUV440P,  AV_PIX_FMT_NONE
 };
 
 static int config_props(AVFilterLink *link)
diff --git a/libavfilter/vf_displace.c b/libavfilter/vf_displace.c
index 8cc11f07ba..3890b6bc27 100644
--- a/libavfilter/vf_displace.c
+++ b/libavfilter/vf_displace.c
@@ -62,10 +62,8 @@ AVFILTER_DEFINE_CLASS(displace);
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
+    AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_RGB24, AV_PIX_FMT_BGR24,
     AV_PIX_FMT_ARGB, AV_PIX_FMT_ABGR, AV_PIX_FMT_RGBA, AV_PIX_FMT_BGRA,
     AV_PIX_FMT_0RGB, AV_PIX_FMT_0BGR, AV_PIX_FMT_RGB0, AV_PIX_FMT_BGR0,
diff --git a/libavfilter/vf_drawbox.c b/libavfilter/vf_drawbox.c
index 27739dc89f..1d0dfb4cb9 100644
--- a/libavfilter/vf_drawbox.c
+++ b/libavfilter/vf_drawbox.c
@@ -256,9 +256,7 @@ static av_cold int init(AVFilterContext *ctx)
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV444P,  AV_PIX_FMT_YUV422P,  AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUV411P,  AV_PIX_FMT_YUV410P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUV440P,  AV_PIX_FMT_YUVJ440P,
+    AV_PIX_FMT_YUV411P,  AV_PIX_FMT_YUV410P,  AV_PIX_FMT_YUV440P,
     AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA444P,
     AV_PIX_FMT_RGB24,  AV_PIX_FMT_BGR24,
     AV_PIX_FMT_RGBA,   AV_PIX_FMT_BGRA,
diff --git a/libavfilter/vf_entropy.c b/libavfilter/vf_entropy.c
index 694a3ee872..84ca584e43 100644
--- a/libavfilter/vf_entropy.c
+++ b/libavfilter/vf_entropy.c
@@ -54,8 +54,6 @@ AVFILTER_DEFINE_CLASS(entropy);
 static const enum AVPixelFormat pixfmts[] = {
     AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ411P,
-    AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUV444P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV420P9,
     AV_PIX_FMT_YUV444P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV420P10,
     AV_PIX_FMT_YUV440P10,
diff --git a/libavfilter/vf_estdif.c b/libavfilter/vf_estdif.c
index 471def9fa7..dd0c347fc0 100644
--- a/libavfilter/vf_estdif.c
+++ b/libavfilter/vf_estdif.c
@@ -109,9 +109,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA444P,
     AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP,
     AV_PIX_FMT_GRAY8,
diff --git a/libavfilter/vf_extractplanes.c b/libavfilter/vf_extractplanes.c
index ca406ff323..855735c9bd 100644
--- a/libavfilter/vf_extractplanes.c
+++ b/libavfilter/vf_extractplanes.c
@@ -72,9 +72,6 @@ AVFILTER_DEFINE_CLASS(extractplanes);
         AV_PIX_FMT_YUV440P,                        \
         AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVA420P,   \
         AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA422P,   \
-        AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,  \
-        AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,  \
-        AV_PIX_FMT_YUVJ411P,                       \
         AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVA444P,   \
         AV_PIX_FMT_GRAY8, AV_PIX_FMT_GRAY8A,       \
         AV_PIX_FMT_RGB24, AV_PIX_FMT_BGR24,        \
diff --git a/libavfilter/vf_fade.c b/libavfilter/vf_fade.c
index f903db0415..17367af3d6 100644
--- a/libavfilter/vf_fade.c
+++ b/libavfilter/vf_fade.c
@@ -106,9 +106,7 @@ static int query_formats(AVFilterContext *ctx)
     const FadeContext *s = ctx->priv;
     static const enum AVPixelFormat pix_fmts[] = {
         AV_PIX_FMT_YUV444P,  AV_PIX_FMT_YUV422P,  AV_PIX_FMT_YUV420P,
-        AV_PIX_FMT_YUV411P,  AV_PIX_FMT_YUV410P,
-        AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-        AV_PIX_FMT_YUV440P,  AV_PIX_FMT_YUVJ440P,
+        AV_PIX_FMT_YUV411P,  AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV440P,
         AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA444P,
         AV_PIX_FMT_RGB24,    AV_PIX_FMT_BGR24,
         AV_PIX_FMT_ARGB,     AV_PIX_FMT_ABGR,
diff --git a/libavfilter/vf_fftdnoiz.c b/libavfilter/vf_fftdnoiz.c
index 1489f3282b..f0a17d4e7f 100644
--- a/libavfilter/vf_fftdnoiz.c
+++ b/libavfilter/vf_fftdnoiz.c
@@ -119,9 +119,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
-    AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV440P10,
diff --git a/libavfilter/vf_fftfilt.c b/libavfilter/vf_fftfilt.c
index aea83dc19c..0b13511025 100644
--- a/libavfilter/vf_fftfilt.c
+++ b/libavfilter/vf_fftfilt.c
@@ -569,9 +569,7 @@ static const enum AVPixelFormat pixel_fmts_fftfilt[] = {
     AV_PIX_FMT_GRAY8,
     AV_PIX_FMT_GRAY9, AV_PIX_FMT_GRAY10, AV_PIX_FMT_GRAY12,
     AV_PIX_FMT_GRAY14, AV_PIX_FMT_GRAY16,
-    AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVJ444P,
-    AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVJ422P,
+    AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV420P10,
     AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV420P14,
     AV_PIX_FMT_YUV420P16,
diff --git a/libavfilter/vf_fieldmatch.c b/libavfilter/vf_fieldmatch.c
index 55671d8517..8b49e2093a 100644
--- a/libavfilter/vf_fieldmatch.c
+++ b/libavfilter/vf_fieldmatch.c
@@ -920,9 +920,6 @@ static int query_formats(AVFilterContext *ctx)
         AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
         AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
         AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
-        AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
-        AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
-        AV_PIX_FMT_YUVJ411P,
         AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
         AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
         AV_PIX_FMT_YUV440P10,
diff --git a/libavfilter/vf_fillborders.c b/libavfilter/vf_fillborders.c
index 34e7b5f637..831c6b5dc8 100644
--- a/libavfilter/vf_fillborders.c
+++ b/libavfilter/vf_fillborders.c
@@ -56,10 +56,8 @@ typedef struct FillBordersContext {
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
+    AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV440P12,
diff --git a/libavfilter/vf_find_rect.c b/libavfilter/vf_find_rect.c
index 9f4ee1e32f..d524c74978 100644
--- a/libavfilter/vf_find_rect.c
+++ b/libavfilter/vf_find_rect.c
@@ -291,6 +291,6 @@ const AVFilter ff_vf_find_rect = {
     .flags           = AVFILTER_FLAG_METADATA_ONLY,
     FILTER_INPUTS(foc_inputs),
     FILTER_OUTPUTS(ff_video_default_filterpad),
-    FILTER_PIXFMTS(AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVJ420P),
+    FILTER_PIXFMTS(AV_PIX_FMT_YUV420P),
     .priv_class      = &find_rect_class,
 };
diff --git a/libavfilter/vf_framepack.c b/libavfilter/vf_framepack.c
index 3b915ddddf..4541ac0397 100644
--- a/libavfilter/vf_framepack.c
+++ b/libavfilter/vf_framepack.c
@@ -58,9 +58,6 @@ static const enum AVPixelFormat formats_supported[] = {
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
-    AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV440P10,
diff --git a/libavfilter/vf_framerate.c b/libavfilter/vf_framerate.c
index 6d448be74c..366809e358 100644
--- a/libavfilter/vf_framerate.c
+++ b/libavfilter/vf_framerate.c
@@ -218,11 +218,11 @@ static av_cold void uninit(AVFilterContext *ctx)
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV410P,
-    AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUVJ411P,
-    AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUVJ440P,
-    AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVJ444P,
+    AV_PIX_FMT_YUV411P,
+    AV_PIX_FMT_YUV420P,
+    AV_PIX_FMT_YUV422P,
+    AV_PIX_FMT_YUV440P,
+    AV_PIX_FMT_YUV444P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV420P12,
     AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV422P12,
     AV_PIX_FMT_YUV444P9, AV_PIX_FMT_YUV444P10, AV_PIX_FMT_YUV444P12,
diff --git a/libavfilter/vf_freezedetect.c b/libavfilter/vf_freezedetect.c
index 18d392d9ae..8deb5383b4 100644
--- a/libavfilter/vf_freezedetect.c
+++ b/libavfilter/vf_freezedetect.c
@@ -66,10 +66,9 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUYV422, AV_PIX_FMT_RGB24,
     AV_PIX_FMT_BGR24, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV444P,
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_GRAY8,
-    AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ444P,
     AV_PIX_FMT_UYVY422, AV_PIX_FMT_NV12, AV_PIX_FMT_NV21, AV_PIX_FMT_ARGB,
     AV_PIX_FMT_RGBA, AV_PIX_FMT_ABGR, AV_PIX_FMT_BGRA, AV_PIX_FMT_GRAY16,
-    AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVA420P,
+    AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUVA420P,
     AV_PIX_FMT_YUV420P16, AV_PIX_FMT_YUV422P16, AV_PIX_FMT_YUV444P16,
     AV_PIX_FMT_YA8, AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV420P10,
     AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P9, AV_PIX_FMT_YUV444P10,
@@ -82,7 +81,7 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_GBRAP, AV_PIX_FMT_GBRAP16, AV_PIX_FMT_YUV420P12,
     AV_PIX_FMT_YUV420P14, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV422P14,
     AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV444P14, AV_PIX_FMT_GBRP12,
-    AV_PIX_FMT_GBRP14, AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV440P10,
+    AV_PIX_FMT_GBRP14, AV_PIX_FMT_YUV440P10,
     AV_PIX_FMT_YUV440P12, AV_PIX_FMT_GBRAP12, AV_PIX_FMT_GBRAP10,
     AV_PIX_FMT_GRAY12, AV_PIX_FMT_GRAY10, AV_PIX_FMT_GRAY9,
     AV_PIX_FMT_GRAY14,
diff --git a/libavfilter/vf_fspp.c b/libavfilter/vf_fspp.c
index 8f44390117..6babebccdd 100644
--- a/libavfilter/vf_fspp.c
+++ b/libavfilter/vf_fspp.c
@@ -497,8 +497,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV444P,  AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV420P,  AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV410P,  AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_GBRP, AV_PIX_FMT_GRAY8,
     AV_PIX_FMT_NONE
 };
diff --git a/libavfilter/vf_gblur.c b/libavfilter/vf_gblur.c
index 6ce2c84736..5e20b7a1a6 100644
--- a/libavfilter/vf_gblur.c
+++ b/libavfilter/vf_gblur.c
@@ -138,10 +138,8 @@ static void gaussianiir2d(AVFilterContext *ctx, int plane)
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
+    AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV440P12,
diff --git a/libavfilter/vf_guided.c b/libavfilter/vf_guided.c
index 8c0e5e454e..ea070cea76 100644
--- a/libavfilter/vf_guided.c
+++ b/libavfilter/vf_guided.c
@@ -143,10 +143,8 @@ static int box_slice(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
+    AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV440P12,
diff --git a/libavfilter/vf_histogram.c b/libavfilter/vf_histogram.c
index 83477692cd..9926a65963 100644
--- a/libavfilter/vf_histogram.c
+++ b/libavfilter/vf_histogram.c
@@ -105,11 +105,11 @@ static const AVOption histogram_options[] = {
 AVFILTER_DEFINE_CLASS(histogram);
 
 static const enum AVPixelFormat levels_in_pix_fmts[] = {
-    AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUV411P,  AV_PIX_FMT_YUVJ411P,
+    AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
+    AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P,
+    AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV440P,  AV_PIX_FMT_YUV410P,
-    AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVJ444P,
+    AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUVA420P9, AV_PIX_FMT_YUVA422P9, AV_PIX_FMT_YUVA444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
diff --git a/libavfilter/vf_hqdn3d.c b/libavfilter/vf_hqdn3d.c
index d95ae8f898..16c1f88137 100644
--- a/libavfilter/vf_hqdn3d.c
+++ b/libavfilter/vf_hqdn3d.c
@@ -232,7 +232,6 @@ static av_cold void uninit(AVFilterContext *ctx)
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV444P,
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV440P10,
diff --git a/libavfilter/vf_hysteresis.c b/libavfilter/vf_hysteresis.c
index d2fd3011b8..d1ef30e932 100644
--- a/libavfilter/vf_hysteresis.c
+++ b/libavfilter/vf_hysteresis.c
@@ -59,10 +59,8 @@ static const AVOption hysteresis_options[] = {
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
+    AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV440P12,
diff --git a/libavfilter/vf_identity.c b/libavfilter/vf_identity.c
index d3a5ec14f6..68e86235cc 100644
--- a/libavfilter/vf_identity.c
+++ b/libavfilter/vf_identity.c
@@ -248,8 +248,6 @@ static const enum AVPixelFormat pix_fmts[] = {
 #define PF(suf)         PF_NOALPHA(suf), PF_ALPHA(suf)
     PF(P), PF(P9), PF(P10), PF_NOALPHA(P12), PF_NOALPHA(P14), PF(P16),
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
     AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRP9, AV_PIX_FMT_GBRP10,
     AV_PIX_FMT_GBRP12, AV_PIX_FMT_GBRP14, AV_PIX_FMT_GBRP16,
     AV_PIX_FMT_GBRAP, AV_PIX_FMT_GBRAP10, AV_PIX_FMT_GBRAP12, AV_PIX_FMT_GBRAP16,
diff --git a/libavfilter/vf_idet.c b/libavfilter/vf_idet.c
index abd375230a..9bb3ab83a3 100644
--- a/libavfilter/vf_idet.c
+++ b/libavfilter/vf_idet.c
@@ -400,12 +400,8 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_GRAY8,
-    AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ444P,
     AV_PIX_FMT_GRAY16,
     AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUV420P9,
     AV_PIX_FMT_YUV422P9,
     AV_PIX_FMT_YUV444P9,
diff --git a/libavfilter/vf_lagfun.c b/libavfilter/vf_lagfun.c
index 20cdd9fa65..de2c0dd602 100644
--- a/libavfilter/vf_lagfun.c
+++ b/libavfilter/vf_lagfun.c
@@ -49,9 +49,6 @@ static const enum AVPixelFormat pixel_fmts[] = {
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
-    AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV440P10,
diff --git a/libavfilter/vf_lenscorrection.c b/libavfilter/vf_lenscorrection.c
index 413eabefba..e9224b277b 100644
--- a/libavfilter/vf_lenscorrection.c
+++ b/libavfilter/vf_lenscorrection.c
@@ -182,9 +182,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
-    AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV440P10,
diff --git a/libavfilter/vf_limitdiff.c b/libavfilter/vf_limitdiff.c
index 1e903d45a8..5b78a40faf 100644
--- a/libavfilter/vf_limitdiff.c
+++ b/libavfilter/vf_limitdiff.c
@@ -65,10 +65,8 @@ static const AVOption limitdiff_options[] = {
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
+    AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV440P12,
diff --git a/libavfilter/vf_limiter.c b/libavfilter/vf_limiter.c
index f67f590d60..b41926eae6 100644
--- a/libavfilter/vf_limiter.c
+++ b/libavfilter/vf_limiter.c
@@ -67,10 +67,8 @@ static av_cold int init(AVFilterContext *ctx)
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
+    AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV440P12,
diff --git a/libavfilter/vf_lut.c b/libavfilter/vf_lut.c
index 1a6ca06546..375a1d25d3 100644
--- a/libavfilter/vf_lut.c
+++ b/libavfilter/vf_lut.c
@@ -115,8 +115,6 @@ static av_cold void uninit(AVFilterContext *ctx)
     AV_PIX_FMT_YUV444P,  AV_PIX_FMT_YUV422P,  AV_PIX_FMT_YUV420P,    \
     AV_PIX_FMT_YUV411P,  AV_PIX_FMT_YUV410P,  AV_PIX_FMT_YUV440P,    \
     AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA444P,   \
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,   \
-    AV_PIX_FMT_YUVJ440P,                                             \
     AV_PIX_FMT_YUV444P9LE, AV_PIX_FMT_YUV422P9LE, AV_PIX_FMT_YUV420P9LE, \
     AV_PIX_FMT_YUV444P10LE, AV_PIX_FMT_YUV422P10LE, AV_PIX_FMT_YUV420P10LE, AV_PIX_FMT_YUV440P10LE, \
     AV_PIX_FMT_YUV444P12LE, AV_PIX_FMT_YUV422P12LE, AV_PIX_FMT_YUV420P12LE, AV_PIX_FMT_YUV440P12LE, \
diff --git a/libavfilter/vf_lut2.c b/libavfilter/vf_lut2.c
index 49755544b0..a4818b08ba 100644
--- a/libavfilter/vf_lut2.c
+++ b/libavfilter/vf_lut2.c
@@ -110,10 +110,8 @@ static av_cold void uninit(AVFilterContext *ctx)
 
 #define BIT8_FMTS \
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P, \
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P, \
     AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P, \
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P, \
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P, \
+    AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P, \
     AV_PIX_FMT_GRAY8, AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP,
 
 #define BIT9_FMTS \
diff --git a/libavfilter/vf_maskedclamp.c b/libavfilter/vf_maskedclamp.c
index e6fbb1a6d5..021c5d84bd 100644
--- a/libavfilter/vf_maskedclamp.c
+++ b/libavfilter/vf_maskedclamp.c
@@ -61,10 +61,8 @@ AVFILTER_DEFINE_CLASS(maskedclamp);
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
+    AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV440P12,
diff --git a/libavfilter/vf_maskedmerge.c b/libavfilter/vf_maskedmerge.c
index 4ca0c571c8..2717e6b76a 100644
--- a/libavfilter/vf_maskedmerge.c
+++ b/libavfilter/vf_maskedmerge.c
@@ -38,10 +38,8 @@ AVFILTER_DEFINE_CLASS(maskedmerge);
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
+    AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10, AV_PIX_FMT_YUV440P10,
     AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV440P12,
diff --git a/libavfilter/vf_maskedminmax.c b/libavfilter/vf_maskedminmax.c
index b1c309cc7d..80221bdd96 100644
--- a/libavfilter/vf_maskedminmax.c
+++ b/libavfilter/vf_maskedminmax.c
@@ -64,10 +64,8 @@ static av_cold int maskedmin_init(AVFilterContext *ctx)
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
+    AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV440P12,
diff --git a/libavfilter/vf_maskedthreshold.c b/libavfilter/vf_maskedthreshold.c
index 36c4050b98..54f17f6e75 100644
--- a/libavfilter/vf_maskedthreshold.c
+++ b/libavfilter/vf_maskedthreshold.c
@@ -61,10 +61,8 @@ static const AVOption maskedthreshold_options[] = {
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
+    AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV440P12,
diff --git a/libavfilter/vf_maskfun.c b/libavfilter/vf_maskfun.c
index 1ac152fc8b..d6dca71a67 100644
--- a/libavfilter/vf_maskfun.c
+++ b/libavfilter/vf_maskfun.c
@@ -63,10 +63,8 @@ AVFILTER_DEFINE_CLASS(maskfun);
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
+    AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV440P12,
diff --git a/libavfilter/vf_median.c b/libavfilter/vf_median.c
index 57514f9289..975738513a 100644
--- a/libavfilter/vf_median.c
+++ b/libavfilter/vf_median.c
@@ -84,10 +84,8 @@ static void hmuladd(htype *dst, const htype *src, int f, int bins)
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
+    AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP, AV_PIX_FMT_GRAY8, AV_PIX_FMT_GRAY9,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9, AV_PIX_FMT_GBRP9,
     AV_PIX_FMT_YUVA420P9, AV_PIX_FMT_YUVA422P9, AV_PIX_FMT_YUVA444P9,
diff --git a/libavfilter/vf_mestimate.c b/libavfilter/vf_mestimate.c
index 4ec34cd7fb..d533d4d7d3 100644
--- a/libavfilter/vf_mestimate.c
+++ b/libavfilter/vf_mestimate.c
@@ -68,9 +68,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA444P,
     AV_PIX_FMT_GRAY8,
     AV_PIX_FMT_NONE
diff --git a/libavfilter/vf_midequalizer.c b/libavfilter/vf_midequalizer.c
index fae2b7ef19..0c2749d271 100644
--- a/libavfilter/vf_midequalizer.c
+++ b/libavfilter/vf_midequalizer.c
@@ -58,10 +58,8 @@ AVFILTER_DEFINE_CLASS(midequalizer);
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
+    AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP,
     AV_PIX_FMT_GRAY8, AV_PIX_FMT_GRAY9, AV_PIX_FMT_GRAY10, AV_PIX_FMT_GRAY12, AV_PIX_FMT_GRAY14,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
diff --git a/libavfilter/vf_minterpolate.c b/libavfilter/vf_minterpolate.c
index 9920210ece..17b4c238ac 100644
--- a/libavfilter/vf_minterpolate.c
+++ b/libavfilter/vf_minterpolate.c
@@ -237,9 +237,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA444P,
     AV_PIX_FMT_GRAY8,
     AV_PIX_FMT_NONE
diff --git a/libavfilter/vf_monochrome.c b/libavfilter/vf_monochrome.c
index 05c001707a..09b0a30005 100644
--- a/libavfilter/vf_monochrome.c
+++ b/libavfilter/vf_monochrome.c
@@ -225,9 +225,6 @@ static const enum AVPixelFormat pixel_fmts[] = {
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
-    AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV440P10,
diff --git a/libavfilter/vf_morpho.c b/libavfilter/vf_morpho.c
index bd1d6b230f..09a126326a 100644
--- a/libavfilter/vf_morpho.c
+++ b/libavfilter/vf_morpho.c
@@ -147,10 +147,8 @@ FRAMESYNC_DEFINE_CLASS(morpho, MorphoContext, fs);
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
+    AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP, AV_PIX_FMT_GRAY8, AV_PIX_FMT_GRAY9,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9, AV_PIX_FMT_GBRP9,
     AV_PIX_FMT_YUVA420P9, AV_PIX_FMT_YUVA422P9, AV_PIX_FMT_YUVA444P9,
diff --git a/libavfilter/vf_mpdecimate.c b/libavfilter/vf_mpdecimate.c
index dab8941e46..200d5aa256 100644
--- a/libavfilter/vf_mpdecimate.c
+++ b/libavfilter/vf_mpdecimate.c
@@ -172,8 +172,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV444P,      AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV420P,      AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV410P,      AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P,     AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ420P,     AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUVA420P,
 
     AV_PIX_FMT_GBRP,
diff --git a/libavfilter/vf_negate.c b/libavfilter/vf_negate.c
index 58be43a44b..b04c875663 100644
--- a/libavfilter/vf_negate.c
+++ b/libavfilter/vf_negate.c
@@ -80,8 +80,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV444P,  AV_PIX_FMT_YUV422P,  AV_PIX_FMT_YUV420P,
     AV_PIX_FMT_YUV411P,  AV_PIX_FMT_YUV410P,  AV_PIX_FMT_YUV440P,
     AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA444P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUV444P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV420P9,
     AV_PIX_FMT_YUV444P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV440P10,
     AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV440P12,
diff --git a/libavfilter/vf_neighbor.c b/libavfilter/vf_neighbor.c
index 915347d6ba..86f7e35cad 100644
--- a/libavfilter/vf_neighbor.c
+++ b/libavfilter/vf_neighbor.c
@@ -52,10 +52,8 @@ typedef struct NContext {
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
+    AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV440P12,
diff --git a/libavfilter/vf_nlmeans.c b/libavfilter/vf_nlmeans.c
index dc935538f0..42c5c2f2f1 100644
--- a/libavfilter/vf_nlmeans.c
+++ b/libavfilter/vf_nlmeans.c
@@ -77,9 +77,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_GRAY8, AV_PIX_FMT_GBRP,
     AV_PIX_FMT_NONE
 };
diff --git a/libavfilter/vf_nnedi.c b/libavfilter/vf_nnedi.c
index 1bb8c21e10..3face927b9 100644
--- a/libavfilter/vf_nnedi.c
+++ b/libavfilter/vf_nnedi.c
@@ -185,9 +185,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA444P,
     AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
diff --git a/libavfilter/vf_ocr.c b/libavfilter/vf_ocr.c
index 3cece91edf..678da4ecaf 100644
--- a/libavfilter/vf_ocr.c
+++ b/libavfilter/vf_ocr.c
@@ -77,9 +77,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
-    AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA420P,
     AV_PIX_FMT_NONE
 };
diff --git a/libavfilter/vf_overlay.c b/libavfilter/vf_overlay.c
index fa39abb23a..8848dc2c77 100644
--- a/libavfilter/vf_overlay.c
+++ b/libavfilter/vf_overlay.c
@@ -167,7 +167,7 @@ static int query_formats(AVFilterContext *ctx)
 
     /* overlay formats contains alpha, for avoiding conversion with alpha information loss */
     static const enum AVPixelFormat main_pix_fmts_yuv420[] = {
-        AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVA420P,
+        AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVA420P,
         AV_PIX_FMT_NV12, AV_PIX_FMT_NV21,
         AV_PIX_FMT_NONE
     };
@@ -184,7 +184,7 @@ static int query_formats(AVFilterContext *ctx)
     };
 
     static const enum AVPixelFormat main_pix_fmts_yuv422[] = {
-        AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_NONE
+        AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_NONE
     };
     static const enum AVPixelFormat overlay_pix_fmts_yuv422[] = {
         AV_PIX_FMT_YUVA422P, AV_PIX_FMT_NONE
@@ -198,7 +198,7 @@ static int query_formats(AVFilterContext *ctx)
     };
 
     static const enum AVPixelFormat main_pix_fmts_yuv444[] = {
-        AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVA444P, AV_PIX_FMT_NONE
+        AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVA444P, AV_PIX_FMT_NONE
     };
     static const enum AVPixelFormat overlay_pix_fmts_yuv444[] = {
         AV_PIX_FMT_YUVA444P, AV_PIX_FMT_NONE
diff --git a/libavfilter/vf_perspective.c b/libavfilter/vf_perspective.c
index f06c44b33a..fc9879baa1 100644
--- a/libavfilter/vf_perspective.c
+++ b/libavfilter/vf_perspective.c
@@ -95,7 +95,6 @@ AVFILTER_DEFINE_CLASS(perspective);
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA420P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ422P,AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP, AV_PIX_FMT_GRAY8, AV_PIX_FMT_NONE
 };
diff --git a/libavfilter/vf_phase.c b/libavfilter/vf_phase.c
index 02dd08e002..090ad13111 100644
--- a/libavfilter/vf_phase.c
+++ b/libavfilter/vf_phase.c
@@ -102,9 +102,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
-    AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV440P10,
diff --git a/libavfilter/vf_pixelize.c b/libavfilter/vf_pixelize.c
index a436515986..06204f47cd 100644
--- a/libavfilter/vf_pixelize.c
+++ b/libavfilter/vf_pixelize.c
@@ -66,9 +66,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
-    AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV440P10,
diff --git a/libavfilter/vf_pp.c b/libavfilter/vf_pp.c
index aa37325a24..774e006172 100644
--- a/libavfilter/vf_pp.c
+++ b/libavfilter/vf_pp.c
@@ -77,12 +77,12 @@ static int pp_process_command(AVFilterContext *ctx, const char *cmd, const char
 }
 
 static const enum AVPixelFormat pix_fmts[] = {
-    AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVJ422P,
+    AV_PIX_FMT_YUV420P,
+    AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_GBRP,
-    AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVJ444P,
-    AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUVJ440P,
+    AV_PIX_FMT_YUV444P,
+    AV_PIX_FMT_YUV440P,
     AV_PIX_FMT_GRAY8,
     AV_PIX_FMT_NONE
 };
@@ -94,15 +94,11 @@ static int pp_config_props(AVFilterLink *inlink)
 
     switch (inlink->format) {
     case AV_PIX_FMT_GRAY8:
-    case AV_PIX_FMT_YUVJ420P:
     case AV_PIX_FMT_YUV420P: flags |= PP_FORMAT_420; break;
-    case AV_PIX_FMT_YUVJ422P:
     case AV_PIX_FMT_YUV422P: flags |= PP_FORMAT_422; break;
     case AV_PIX_FMT_YUV411P: flags |= PP_FORMAT_411; break;
     case AV_PIX_FMT_GBRP:
-    case AV_PIX_FMT_YUVJ444P:
     case AV_PIX_FMT_YUV444P: flags |= PP_FORMAT_444; break;
-    case AV_PIX_FMT_YUVJ440P:
     case AV_PIX_FMT_YUV440P: flags |= PP_FORMAT_440; break;
     default: av_assert0(0);
     }
diff --git a/libavfilter/vf_pp7.c b/libavfilter/vf_pp7.c
index 24a094f00c..0db4b94b5d 100644
--- a/libavfilter/vf_pp7.c
+++ b/libavfilter/vf_pp7.c
@@ -270,8 +270,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV444P,  AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV420P,  AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV410P,  AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_GBRP,
     AV_PIX_FMT_GRAY8,    AV_PIX_FMT_NONE
 };
diff --git a/libavfilter/vf_premultiply.c b/libavfilter/vf_premultiply.c
index e077d46a9a..0ebb94058c 100644
--- a/libavfilter/vf_premultiply.c
+++ b/libavfilter/vf_premultiply.c
@@ -69,7 +69,7 @@ static int query_formats(AVFilterContext *ctx)
     PreMultiplyContext *s = ctx->priv;
 
     static const enum AVPixelFormat no_alpha_pix_fmts[] = {
-        AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVJ444P,
+        AV_PIX_FMT_YUV444P,
         AV_PIX_FMT_YUV444P9, AV_PIX_FMT_YUV444P10,
         AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV444P14,
         AV_PIX_FMT_YUV444P16,
@@ -534,10 +534,6 @@ static int filter_frame(AVFilterContext *ctx,
                 s->premultiply[0] = full ? unpremultiply8 : unpremultiply8offset;
                 s->premultiply[1] = s->premultiply[2] = unpremultiply8yuv;
                 break;
-            case AV_PIX_FMT_YUVJ444P:
-                s->premultiply[0] = unpremultiply8;
-                s->premultiply[1] = s->premultiply[2] = unpremultiply8yuv;
-                break;
             case AV_PIX_FMT_GBRP:
             case AV_PIX_FMT_GBRAP:
                 s->premultiply[0] = s->premultiply[1] = s->premultiply[2] = limited ? unpremultiply8offset : unpremultiply8;
@@ -586,10 +582,6 @@ static int filter_frame(AVFilterContext *ctx,
                 s->premultiply[0] = full ? premultiply8 : premultiply8offset;
                 s->premultiply[1] = s->premultiply[2] = premultiply8yuv;
                 break;
-            case AV_PIX_FMT_YUVJ444P:
-                s->premultiply[0] = premultiply8;
-                s->premultiply[1] = s->premultiply[2] = premultiply8yuv;
-                break;
             case AV_PIX_FMT_GBRP:
             case AV_PIX_FMT_GBRAP:
                 s->premultiply[0] = s->premultiply[1] = s->premultiply[2] = limited ? premultiply8offset : premultiply8;
diff --git a/libavfilter/vf_psnr.c b/libavfilter/vf_psnr.c
index 058a8932f4..dd05e61059 100644
--- a/libavfilter/vf_psnr.c
+++ b/libavfilter/vf_psnr.c
@@ -309,8 +309,6 @@ static const enum AVPixelFormat pix_fmts[] = {
 #define PF(suf)         PF_NOALPHA(suf), PF_ALPHA(suf)
     PF(P), PF(P9), PF(P10), PF_NOALPHA(P12), PF_NOALPHA(P14), PF(P16),
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
     AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRP9, AV_PIX_FMT_GBRP10,
     AV_PIX_FMT_GBRP12, AV_PIX_FMT_GBRP14, AV_PIX_FMT_GBRP16,
     AV_PIX_FMT_GBRAP, AV_PIX_FMT_GBRAP10, AV_PIX_FMT_GBRAP12, AV_PIX_FMT_GBRAP16,
diff --git a/libavfilter/vf_pullup.c b/libavfilter/vf_pullup.c
index 14beb972c5..ce4052abb0 100644
--- a/libavfilter/vf_pullup.c
+++ b/libavfilter/vf_pullup.c
@@ -53,12 +53,10 @@ static const AVOption pullup_options[] = {
 AVFILTER_DEFINE_CLASS(pullup);
 
 static const enum AVPixelFormat pix_fmts[] = {
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
     AV_PIX_FMT_YUV444P,  AV_PIX_FMT_YUV440P,
     AV_PIX_FMT_YUV422P,  AV_PIX_FMT_YUV420P,
     AV_PIX_FMT_YUV411P,  AV_PIX_FMT_YUV410P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_GRAY8,
+    AV_PIX_FMT_GRAY8,
     AV_PIX_FMT_NONE
 };
 
diff --git a/libavfilter/vf_readeia608.c b/libavfilter/vf_readeia608.c
index 50bf915765..49ac554176 100644
--- a/libavfilter/vf_readeia608.c
+++ b/libavfilter/vf_readeia608.c
@@ -105,9 +105,6 @@ static const enum AVPixelFormat pixel_fmts[] = {
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
-    AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV440P10,
diff --git a/libavfilter/vf_readvitc.c b/libavfilter/vf_readvitc.c
index cb63a4d127..9055507ca6 100644
--- a/libavfilter/vf_readvitc.c
+++ b/libavfilter/vf_readvitc.c
@@ -197,11 +197,6 @@ static const enum AVPixelFormat pixel_fmts[] = {
     AV_PIX_FMT_YUVA420P,
     AV_PIX_FMT_YUVA422P,
     AV_PIX_FMT_YUVA444P,
-    AV_PIX_FMT_YUVJ411P,
-    AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ440P,
-    AV_PIX_FMT_YUVJ444P,
     AV_PIX_FMT_NONE
 };
 
diff --git a/libavfilter/vf_remap.c b/libavfilter/vf_remap.c
index f536580a90..4f53c1e14a 100644
--- a/libavfilter/vf_remap.c
+++ b/libavfilter/vf_remap.c
@@ -88,7 +88,6 @@ static int query_formats(AVFilterContext *ctx)
     static const enum AVPixelFormat pix_fmts[] = {
         AV_PIX_FMT_YUVA444P,
         AV_PIX_FMT_YUV444P,
-        AV_PIX_FMT_YUVJ444P,
         AV_PIX_FMT_RGB24, AV_PIX_FMT_BGR24,
         AV_PIX_FMT_ARGB, AV_PIX_FMT_ABGR, AV_PIX_FMT_RGBA, AV_PIX_FMT_BGRA,
         AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP,
diff --git a/libavfilter/vf_removegrain.c b/libavfilter/vf_removegrain.c
index 6e6e99198c..25f5a18882 100644
--- a/libavfilter/vf_removegrain.c
+++ b/libavfilter/vf_removegrain.c
@@ -48,8 +48,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV444P,
     AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA444P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
     AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP,
     AV_PIX_FMT_NONE
 };
diff --git a/libavfilter/vf_rotate.c b/libavfilter/vf_rotate.c
index 96c250a459..38f98d75ab 100644
--- a/libavfilter/vf_rotate.c
+++ b/libavfilter/vf_rotate.c
@@ -141,8 +141,8 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_RGB24,  AV_PIX_FMT_BGR24,
     AV_PIX_FMT_GRAY8,
     AV_PIX_FMT_YUV410P,
-    AV_PIX_FMT_YUV444P,  AV_PIX_FMT_YUVJ444P,
-    AV_PIX_FMT_YUV420P,  AV_PIX_FMT_YUVJ420P,
+    AV_PIX_FMT_YUV444P,
+    AV_PIX_FMT_YUV420P,
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUVA420P,
     AV_PIX_FMT_YUV420P10LE, AV_PIX_FMT_YUVA420P10LE,
     AV_PIX_FMT_YUV444P10LE, AV_PIX_FMT_YUVA444P10LE,
diff --git a/libavfilter/vf_scdet.c b/libavfilter/vf_scdet.c
index 15399cfebf..ac7e1314d9 100644
--- a/libavfilter/vf_scdet.c
+++ b/libavfilter/vf_scdet.c
@@ -63,10 +63,10 @@ AVFILTER_DEFINE_CLASS(scdet);
 static const enum AVPixelFormat pix_fmts[] = {
         AV_PIX_FMT_RGB24, AV_PIX_FMT_BGR24, AV_PIX_FMT_RGBA,
         AV_PIX_FMT_ABGR, AV_PIX_FMT_BGRA, AV_PIX_FMT_GRAY8,
-        AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVJ420P,
-        AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVJ422P,
-        AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUVJ440P,
-        AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVJ444P,
+        AV_PIX_FMT_YUV420P,
+        AV_PIX_FMT_YUV422P,
+        AV_PIX_FMT_YUV440P,
+        AV_PIX_FMT_YUV444P,
         AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV420P12,
         AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV422P12,
         AV_PIX_FMT_YUV444P9, AV_PIX_FMT_YUV444P10, AV_PIX_FMT_YUV444P12,
diff --git a/libavfilter/vf_scroll.c b/libavfilter/vf_scroll.c
index eebf12e902..f1e1bd61f2 100644
--- a/libavfilter/vf_scroll.c
+++ b/libavfilter/vf_scroll.c
@@ -44,10 +44,8 @@ typedef struct ScrollContext {
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
+    AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV440P12,
diff --git a/libavfilter/vf_shear.c b/libavfilter/vf_shear.c
index 760caa5011..58b84e0975 100644
--- a/libavfilter/vf_shear.c
+++ b/libavfilter/vf_shear.c
@@ -92,9 +92,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
-    AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV440P10,
diff --git a/libavfilter/vf_signalstats.c b/libavfilter/vf_signalstats.c
index b4d1029296..3112baa69f 100644
--- a/libavfilter/vf_signalstats.c
+++ b/libavfilter/vf_signalstats.c
@@ -121,8 +121,6 @@ static av_cold void uninit(AVFilterContext *ctx)
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ411P,
-    AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUV444P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV420P9,
     AV_PIX_FMT_YUV444P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV420P10,
     AV_PIX_FMT_YUV440P10,
diff --git a/libavfilter/vf_signature.c b/libavfilter/vf_signature.c
index 4896e8f2c1..1a3d1b2bc1 100644
--- a/libavfilter/vf_signature.c
+++ b/libavfilter/vf_signature.c
@@ -73,9 +73,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ444P,
-    AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_NV12, AV_PIX_FMT_NV21,
     AV_PIX_FMT_NONE
 };
diff --git a/libavfilter/vf_siti.c b/libavfilter/vf_siti.c
index 1b6ff32d6e..ad8d90d9ec 100644
--- a/libavfilter/vf_siti.c
+++ b/libavfilter/vf_siti.c
@@ -66,7 +66,6 @@ typedef struct SiTiContext {
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
-    AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10,
     AV_PIX_FMT_NONE
 };
@@ -140,15 +139,6 @@ static int config_input(AVFilterLink *inlink)
     return 0;
 }
 
-// Determine whether the video is in full or limited range. If not defined, assume limited.
-static int is_full_range(AVFrame* frame)
-{
-    // If color range not specified, fallback to pixel format
-    if (frame->color_range == AVCOL_RANGE_UNSPECIFIED || frame->color_range == AVCOL_RANGE_NB)
-        return frame->format == AV_PIX_FMT_YUVJ420P || frame->format == AV_PIX_FMT_YUVJ422P;
-    return frame->color_range == AVCOL_RANGE_JPEG;
-}
-
 // Check frame's color range and convert to full range if needed
 static uint16_t convert_full_range(int factor, uint16_t y)
 {
@@ -284,7 +274,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
     float si;
     float ti;
 
-    s->full_range = is_full_range(frame);
+    s->full_range = frame->color_range == AVCOL_RANGE_JPEG;
     s->nb_frames++;
 
     // Calculate si and ti
diff --git a/libavfilter/vf_spp.c b/libavfilter/vf_spp.c
index bb74b20e0e..05285e6be5 100644
--- a/libavfilter/vf_spp.c
+++ b/libavfilter/vf_spp.c
@@ -316,8 +316,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV444P,  AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV420P,  AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV410P,  AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUV444P10,  AV_PIX_FMT_YUV422P10,
     AV_PIX_FMT_YUV420P10,
     AV_PIX_FMT_YUV444P9,  AV_PIX_FMT_YUV422P9,
diff --git a/libavfilter/vf_ssim.c b/libavfilter/vf_ssim.c
index 53eb72fe6a..5168ac387b 100644
--- a/libavfilter/vf_ssim.c
+++ b/libavfilter/vf_ssim.c
@@ -431,8 +431,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_GRAY12, AV_PIX_FMT_GRAY14, AV_PIX_FMT_GRAY16,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV444P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
     AV_PIX_FMT_GBRP,
 #define PF(suf) AV_PIX_FMT_YUV420##suf,  AV_PIX_FMT_YUV422##suf,  AV_PIX_FMT_YUV444##suf, AV_PIX_FMT_GBR##suf
     PF(P9), PF(P10), PF(P12), PF(P14), PF(P16),
diff --git a/libavfilter/vf_ssim360.c b/libavfilter/vf_ssim360.c
index 3dec430bff..1dc08e12b6 100644
--- a/libavfilter/vf_ssim360.c
+++ b/libavfilter/vf_ssim360.c
@@ -1716,8 +1716,6 @@ static const enum AVPixelFormat ssim360_pixfmts[] = {
     AV_PIX_FMT_GRAY8,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV444P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
     AV_PIX_FMT_GBRP,
     PF(P9), PF(P10), PF(P12), PF(P14), PF(P16),
     AV_PIX_FMT_NONE
diff --git a/libavfilter/vf_stereo3d.c b/libavfilter/vf_stereo3d.c
index 71041d2fee..3ffecea448 100644
--- a/libavfilter/vf_stereo3d.c
+++ b/libavfilter/vf_stereo3d.c
@@ -247,11 +247,6 @@ static const enum AVPixelFormat other_pix_fmts[] = {
     AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA422P,
     AV_PIX_FMT_YUV440P,
     AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVA444P,
-    AV_PIX_FMT_YUVJ411P,
-    AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ440P,
-    AV_PIX_FMT_YUVJ444P,
     AV_PIX_FMT_YUV420P9LE,  AV_PIX_FMT_YUVA420P9LE,
     AV_PIX_FMT_YUV420P9BE,  AV_PIX_FMT_YUVA420P9BE,
     AV_PIX_FMT_YUV422P9LE,  AV_PIX_FMT_YUVA422P9LE,
diff --git a/libavfilter/vf_threshold.c b/libavfilter/vf_threshold.c
index dc73c277d3..36e392fff5 100644
--- a/libavfilter/vf_threshold.c
+++ b/libavfilter/vf_threshold.c
@@ -46,10 +46,8 @@ AVFILTER_DEFINE_CLASS(threshold);
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
+    AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV440P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV440P12, AV_PIX_FMT_YUV444P12,
diff --git a/libavfilter/vf_thumbnail.c b/libavfilter/vf_thumbnail.c
index 4d6b0aef04..6f2ba813a1 100644
--- a/libavfilter/vf_thumbnail.c
+++ b/libavfilter/vf_thumbnail.c
@@ -298,9 +298,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
-    AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA444P,
     AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP,
     AV_PIX_FMT_NONE
diff --git a/libavfilter/vf_tinterlace.c b/libavfilter/vf_tinterlace.c
index e221a6f941..96a4b6c567 100644
--- a/libavfilter/vf_tinterlace.c
+++ b/libavfilter/vf_tinterlace.c
@@ -75,13 +75,6 @@ static const AVOption interlace_options[] = {
 
 AVFILTER_DEFINE_CLASS(interlace);
 
-#define FULL_SCALE_YUVJ_FORMATS \
-    AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P
-
-static const enum AVPixelFormat full_scale_yuvj_pix_fmts[] = {
-    FULL_SCALE_YUVJ_FORMATS, AV_PIX_FMT_NONE
-};
-
 static const AVRational standard_tbs[] = {
     {1, 25},
     {1, 30},
@@ -98,7 +91,7 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV440P12LE, AV_PIX_FMT_YUV444P12LE,
     AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA444P,
     AV_PIX_FMT_YUVA420P10LE, AV_PIX_FMT_YUVA422P10LE, AV_PIX_FMT_YUVA444P10LE,
-    AV_PIX_FMT_GRAY8, FULL_SCALE_YUVJ_FORMATS,
+    AV_PIX_FMT_GRAY8,
     AV_PIX_FMT_NONE
 };
 
@@ -228,14 +221,12 @@ static int config_out_props(AVFilterLink *outlink)
         ff_draw_init(&tinterlace->draw, outlink->format, 0);
         ff_draw_color(&tinterlace->draw, &tinterlace->color, black);
         /* limited range */
-        if (!ff_fmt_is_in(outlink->format, full_scale_yuvj_pix_fmts)) {
-            ret = av_image_alloc(tinterlace->black_data[0], tinterlace->black_linesize,
-                                 outlink->w, outlink->h, outlink->format, 16);
-            if (ret < 0)
-                return ret;
-            ff_fill_rectangle(&tinterlace->draw, &tinterlace->color, tinterlace->black_data[0],
-                              tinterlace->black_linesize, 0, 0, outlink->w, outlink->h);
-        }
+        ret = av_image_alloc(tinterlace->black_data[0], tinterlace->black_linesize,
+                             outlink->w, outlink->h, outlink->format, 16);
+        if (ret < 0)
+            return ret;
+        ff_fill_rectangle(&tinterlace->draw, &tinterlace->color, tinterlace->black_data[0],
+                          tinterlace->black_linesize, 0, 0, outlink->w, outlink->h);
         /* full range */
         tinterlace->color.comp[0].u8[0] = 0;
         ret = av_image_alloc(tinterlace->black_data[1], tinterlace->black_linesize,
@@ -441,7 +432,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
         out->sample_aspect_ratio = av_mul_q(cur->sample_aspect_ratio, av_make_q(2, 1));
 
         field = (1 + outlink->frame_count_in) & 1 ? FIELD_UPPER : FIELD_LOWER;
-        full = out->color_range == AVCOL_RANGE_JPEG || ff_fmt_is_in(out->format, full_scale_yuvj_pix_fmts);
+        full = out->color_range == AVCOL_RANGE_JPEG;
         /* copy upper and lower fields */
         copy_picture_field(tinterlace, out->data, out->linesize,
                            (const uint8_t **)cur->data, cur->linesize,
diff --git a/libavfilter/vf_tmidequalizer.c b/libavfilter/vf_tmidequalizer.c
index 650aa36636..13ab5b5aac 100644
--- a/libavfilter/vf_tmidequalizer.c
+++ b/libavfilter/vf_tmidequalizer.c
@@ -68,10 +68,8 @@ AVFILTER_DEFINE_CLASS(tmidequalizer);
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
+    AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP,
     AV_PIX_FMT_GRAY8, AV_PIX_FMT_GRAY9, AV_PIX_FMT_GRAY10, AV_PIX_FMT_GRAY12, AV_PIX_FMT_GRAY14,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
diff --git a/libavfilter/vf_unsharp.c b/libavfilter/vf_unsharp.c
index 2705ac5270..8c75dce3b2 100644
--- a/libavfilter/vf_unsharp.c
+++ b/libavfilter/vf_unsharp.c
@@ -218,12 +218,12 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUVA422P9, AV_PIX_FMT_YUVA422P10, AV_PIX_FMT_YUVA422P12, AV_PIX_FMT_YUVA422P16,
     AV_PIX_FMT_YUVA420P9, AV_PIX_FMT_YUVA420P10, AV_PIX_FMT_YUVA420P16,
     AV_PIX_FMT_YUV420P,  AV_PIX_FMT_YUV422P,  AV_PIX_FMT_YUV444P,  AV_PIX_FMT_YUV410P,
-    AV_PIX_FMT_YUV411P,  AV_PIX_FMT_YUV440P,  AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
+    AV_PIX_FMT_YUV411P,  AV_PIX_FMT_YUV440P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10, AV_PIX_FMT_YUV440P10,
     AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV440P12,
     AV_PIX_FMT_YUV420P16, AV_PIX_FMT_YUV422P16, AV_PIX_FMT_YUV444P16,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_NONE
+    AV_PIX_FMT_NONE
 };
 
 static int init_filter_param(AVFilterContext *ctx, UnsharpFilterParam *fp, const char *effect_type, int width)
diff --git a/libavfilter/vf_uspp.c b/libavfilter/vf_uspp.c
index 10c8aaeb6c..444bad5add 100644
--- a/libavfilter/vf_uspp.c
+++ b/libavfilter/vf_uspp.c
@@ -339,8 +339,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV444P,
     AV_PIX_FMT_YUV420P,
     AV_PIX_FMT_YUV410P,
-    AV_PIX_FMT_YUVJ444P,
-    AV_PIX_FMT_YUVJ420P,
     AV_PIX_FMT_GRAY8,
     AV_PIX_FMT_NONE
 };
diff --git a/libavfilter/vf_v360.c b/libavfilter/vf_v360.c
index 2ac9b688dc..ede5bb04a0 100644
--- a/libavfilter/vf_v360.c
+++ b/libavfilter/vf_v360.c
@@ -190,11 +190,6 @@ static int query_formats(AVFilterContext *ctx)
         AV_PIX_FMT_YUVA420P,   AV_PIX_FMT_YUVA420P9,
         AV_PIX_FMT_YUVA420P10, AV_PIX_FMT_YUVA420P16,
 
-        // YUVJ
-        AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
-        AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-        AV_PIX_FMT_YUVJ411P,
-
         // YUV444
         AV_PIX_FMT_YUV444P,   AV_PIX_FMT_YUV444P9,
         AV_PIX_FMT_YUV444P10, AV_PIX_FMT_YUV444P12,
diff --git a/libavfilter/vf_vaguedenoiser.c b/libavfilter/vf_vaguedenoiser.c
index bfb6e9e262..3cf4afa945 100644
--- a/libavfilter/vf_vaguedenoiser.c
+++ b/libavfilter/vf_vaguedenoiser.c
@@ -109,9 +109,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
-    AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV440P10,
diff --git a/libavfilter/vf_varblur.c b/libavfilter/vf_varblur.c
index 6ebb9c0663..8912a9581a 100644
--- a/libavfilter/vf_varblur.c
+++ b/libavfilter/vf_varblur.c
@@ -73,10 +73,8 @@ FRAMESYNC_DEFINE_CLASS(varblur, VarBlurContext, fs);
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
+    AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV440P12,
diff --git a/libavfilter/vf_vectorscope.c b/libavfilter/vf_vectorscope.c
index 6a45b11463..6e04226ac5 100644
--- a/libavfilter/vf_vectorscope.c
+++ b/libavfilter/vf_vectorscope.c
@@ -181,7 +181,7 @@ static const enum AVPixelFormat out_rgb12_pix_fmts[] = {
 };
 
 static const enum AVPixelFormat in1_pix_fmts[] = {
-    AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVJ444P,
+    AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P,
     AV_PIX_FMT_YUV444P9, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUVA444P9, AV_PIX_FMT_YUVA444P10,
     AV_PIX_FMT_YUVA444P12, AV_PIX_FMT_YUV444P12,
@@ -192,10 +192,10 @@ static const enum AVPixelFormat in1_pix_fmts[] = {
 };
 
 static const enum AVPixelFormat in2_pix_fmts[] = {
-    AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVJ444P,
-    AV_PIX_FMT_YUV411P,  AV_PIX_FMT_YUVJ411P,
+    AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
+    AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P,
+    AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P,
+    AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV440P,  AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_GBRAP, AV_PIX_FMT_GBRP,
     AV_PIX_FMT_GBRP9, AV_PIX_FMT_GBRP10, AV_PIX_FMT_GBRAP10,
diff --git a/libavfilter/vf_vif.c b/libavfilter/vf_vif.c
index a927abaf6f..3af32d5b9f 100644
--- a/libavfilter/vf_vif.c
+++ b/libavfilter/vf_vif.c
@@ -470,8 +470,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_GRAY12, AV_PIX_FMT_GRAY14, AV_PIX_FMT_GRAY16,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV444P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
 #define PF(suf) AV_PIX_FMT_YUV420##suf,  AV_PIX_FMT_YUV422##suf,  AV_PIX_FMT_YUV444##suf
     PF(P9), PF(P10), PF(P12), PF(P14), PF(P16),
     AV_PIX_FMT_NONE
diff --git a/libavfilter/vf_w3fdif.c b/libavfilter/vf_w3fdif.c
index f2264efe2b..44a7d8047a 100644
--- a/libavfilter/vf_w3fdif.c
+++ b/libavfilter/vf_w3fdif.c
@@ -76,9 +76,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA444P,
     AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP,
     AV_PIX_FMT_GRAY8,
diff --git a/libavfilter/vf_waveform.c b/libavfilter/vf_waveform.c
index a6a8ec78e7..7a765e7e14 100644
--- a/libavfilter/vf_waveform.c
+++ b/libavfilter/vf_waveform.c
@@ -211,8 +211,6 @@ static const enum AVPixelFormat in_lowpass_pix_fmts[] = {
     AV_PIX_FMT_YUV422P,  AV_PIX_FMT_YUV420P,
     AV_PIX_FMT_YUV444P,  AV_PIX_FMT_YUV440P,
     AV_PIX_FMT_YUV411P,  AV_PIX_FMT_YUV410P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ444P,
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA420P,
     AV_PIX_FMT_GRAY8, AV_PIX_FMT_GRAY9, AV_PIX_FMT_GRAY10, AV_PIX_FMT_GRAY12,
     AV_PIX_FMT_YUV444P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV420P9,
@@ -230,8 +228,6 @@ static const enum AVPixelFormat in_color_pix_fmts[] = {
     AV_PIX_FMT_YUV422P,  AV_PIX_FMT_YUV420P,
     AV_PIX_FMT_YUV444P,  AV_PIX_FMT_YUV440P,
     AV_PIX_FMT_YUV411P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ444P,
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA420P,
     AV_PIX_FMT_YUV444P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV420P9,
     AV_PIX_FMT_YUVA444P9, AV_PIX_FMT_YUVA422P9, AV_PIX_FMT_YUVA420P9,
@@ -246,8 +242,6 @@ static const enum AVPixelFormat in_flat_pix_fmts[] = {
     AV_PIX_FMT_YUV422P,  AV_PIX_FMT_YUV420P,
     AV_PIX_FMT_YUV444P,  AV_PIX_FMT_YUV440P,
     AV_PIX_FMT_YUV411P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ444P,
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA420P,
     AV_PIX_FMT_YUV444P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV420P9,
     AV_PIX_FMT_YUVA444P9, AV_PIX_FMT_YUVA422P9, AV_PIX_FMT_YUVA420P9,
@@ -279,7 +273,7 @@ static const enum AVPixelFormat out_rgb12_lowpass_pix_fmts[] = {
 };
 
 static const enum AVPixelFormat out_yuv8_lowpass_pix_fmts[] = {
-    AV_PIX_FMT_YUV444P,  AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVA444P,
+    AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVA444P,
     AV_PIX_FMT_NONE
 };
 
diff --git a/libavfilter/vf_xfade.c b/libavfilter/vf_xfade.c
index 890995a608..bc320aeef6 100644
--- a/libavfilter/vf_xfade.c
+++ b/libavfilter/vf_xfade.c
@@ -141,7 +141,6 @@ typedef struct ThreadData {
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUVA444P,
-    AV_PIX_FMT_YUVJ444P,
     AV_PIX_FMT_YUV444P,
     AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP, AV_PIX_FMT_GRAY8,
     AV_PIX_FMT_YUVA444P9, AV_PIX_FMT_GBRP9,
diff --git a/libavfilter/vf_xmedian.c b/libavfilter/vf_xmedian.c
index ebcbea97ed..56017a57d0 100644
--- a/libavfilter/vf_xmedian.c
+++ b/libavfilter/vf_xmedian.c
@@ -69,9 +69,6 @@ static const enum AVPixelFormat pixel_fmts[] = {
     AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
     AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
     AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
-    AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
-    AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
-    AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV440P10,
diff --git a/libavfilter/vf_yadif.c b/libavfilter/vf_yadif.c
index a5a856bf5f..3c6bf7f43c 100644
--- a/libavfilter/vf_yadif.c
+++ b/libavfilter/vf_yadif.c
@@ -265,8 +265,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV420P,   AV_PIX_FMT_YUV422P,   AV_PIX_FMT_YUV444P,
     AV_PIX_FMT_YUV410P,   AV_PIX_FMT_YUV411P,   AV_PIX_FMT_YUV440P,
     AV_PIX_FMT_GRAY8,     AV_PIX_FMT_GRAY16,
-    AV_PIX_FMT_YUVJ420P,  AV_PIX_FMT_YUVJ422P,  AV_PIX_FMT_YUVJ444P,
-    AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUV420P9,  AV_PIX_FMT_YUV422P9,  AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12,
diff --git a/libavfilter/vf_yaepblur.c b/libavfilter/vf_yaepblur.c
index b39738b577..fd67fa3cbf 100644
--- a/libavfilter/vf_yaepblur.c
+++ b/libavfilter/vf_yaepblur.c
@@ -62,10 +62,8 @@ static av_cold void uninit(AVFilterContext *ctx)
 
 static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV440P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
     AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_YUV420P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P, AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
+    AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV410P,
     AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
     AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV440P12,
diff --git a/libavfilter/vf_zoompan.c b/libavfilter/vf_zoompan.c
index e729bda56d..873b73788b 100644
--- a/libavfilter/vf_zoompan.c
+++ b/libavfilter/vf_zoompan.c
@@ -330,9 +330,6 @@ static const enum AVPixelFormat pix_fmts[] = {
     AV_PIX_FMT_YUV410P,  AV_PIX_FMT_YUV440P,
     AV_PIX_FMT_YUVA444P, AV_PIX_FMT_YUVA422P,
     AV_PIX_FMT_YUVA420P,
-    AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ440P,
-    AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-    AV_PIX_FMT_YUVJ411P,
     AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP,
     AV_PIX_FMT_GRAY8,
     AV_PIX_FMT_NONE
diff --git a/libavfilter/vf_zscale.c b/libavfilter/vf_zscale.c
index 3b14ce4f33..4932b32901 100644
--- a/libavfilter/vf_zscale.c
+++ b/libavfilter/vf_zscale.c
@@ -197,9 +197,6 @@ static int query_formats(AVFilterContext *ctx)
         AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
         AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P,
         AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUV444P,
-        AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P,
-        AV_PIX_FMT_YUVJ440P, AV_PIX_FMT_YUVJ444P,
-        AV_PIX_FMT_YUVJ411P,
         AV_PIX_FMT_YUV420P9, AV_PIX_FMT_YUV422P9, AV_PIX_FMT_YUV444P9,
         AV_PIX_FMT_YUV420P10, AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
         AV_PIX_FMT_YUV420P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV444P12,
diff --git a/libavfilter/vsrc_testsrc.c b/libavfilter/vsrc_testsrc.c
index da17e950d8..d3ba9f7514 100644
--- a/libavfilter/vsrc_testsrc.c
+++ b/libavfilter/vsrc_testsrc.c
@@ -1266,7 +1266,7 @@ static av_cold int yuvtest_init(AVFilterContext *ctx)
 }
 
 static const enum AVPixelFormat yuvtest_pix_fmts[] = {
-    AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVJ444P,
+    AV_PIX_FMT_YUV444P,
     AV_PIX_FMT_YUV444P9, AV_PIX_FMT_YUV444P10,
     AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV444P14,
     AV_PIX_FMT_YUV444P16,
diff --git a/libavformat/yuv4mpegenc.c b/libavformat/yuv4mpegenc.c
index 1d641eb9e4..34acb0820a 100644
--- a/libavformat/yuv4mpegenc.c
+++ b/libavformat/yuv4mpegenc.c
@@ -90,18 +90,6 @@ static int yuv4_write_header(AVFormatContext *s)
     case AV_PIX_FMT_YUV411P:
         colorspace = " C411 XYSCSS=411";
         break;
-    case AV_PIX_FMT_YUVJ420P:
-        colorspace = " C420jpeg XYSCSS=420JPEG";
-        colorrange = " XCOLORRANGE=FULL";
-        break;
-    case AV_PIX_FMT_YUVJ422P:
-        colorspace = " C422 XYSCSS=422";
-        colorrange = " XCOLORRANGE=FULL";
-        break;
-    case AV_PIX_FMT_YUVJ444P:
-        colorspace = " C444 XYSCSS=444";
-        colorrange = " XCOLORRANGE=FULL";
-        break;
     case AV_PIX_FMT_YUV420P:
         switch (st->codecpar->chroma_location) {
         case AVCHROMA_LOC_TOPLEFT: colorspace = " C420paldv XYSCSS=420PALDV"; break;
@@ -239,10 +227,6 @@ static int yuv4_init(AVFormatContext *s)
     case AV_PIX_FMT_YUV420P:
     case AV_PIX_FMT_YUV422P:
     case AV_PIX_FMT_YUV444P:
-    // TODO: remove YUVJ pixel formats when they are completely removed from the codebase.
-    case AV_PIX_FMT_YUVJ420P:
-    case AV_PIX_FMT_YUVJ422P:
-    case AV_PIX_FMT_YUVJ444P:
         break;
     case AV_PIX_FMT_GRAY9:
     case AV_PIX_FMT_GRAY10:
diff --git a/libavutil/pixdesc.c b/libavutil/pixdesc.c
index 4e4a63e287..2886c9e0f5 100644
--- a/libavutil/pixdesc.c
+++ b/libavutil/pixdesc.c
@@ -372,18 +372,6 @@ static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = {
         },
         .flags = AV_PIX_FMT_FLAG_PLANAR,
     },
-    [AV_PIX_FMT_YUVJ411P] = {
-        .name = "yuvj411p",
-        .nb_components = 3,
-        .log2_chroma_w = 2,
-        .log2_chroma_h = 0,
-        .comp = {
-            { 0, 1, 0, 0, 8 },        /* Y */
-            { 1, 1, 0, 0, 8 },        /* U */
-            { 2, 1, 0, 0, 8 },        /* V */
-        },
-        .flags = AV_PIX_FMT_FLAG_PLANAR,
-    },
     [AV_PIX_FMT_GRAY8] = {
         .name = "gray",
         .nb_components = 1,
@@ -424,42 +412,6 @@ static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = {
         },
         .flags = AV_PIX_FMT_FLAG_PAL | AV_PIX_FMT_FLAG_ALPHA,
     },
-    [AV_PIX_FMT_YUVJ420P] = {
-        .name = "yuvj420p",
-        .nb_components = 3,
-        .log2_chroma_w = 1,
-        .log2_chroma_h = 1,
-        .comp = {
-            { 0, 1, 0, 0, 8 },        /* Y */
-            { 1, 1, 0, 0, 8 },        /* U */
-            { 2, 1, 0, 0, 8 },        /* V */
-        },
-        .flags = AV_PIX_FMT_FLAG_PLANAR,
-    },
-    [AV_PIX_FMT_YUVJ422P] = {
-        .name = "yuvj422p",
-        .nb_components = 3,
-        .log2_chroma_w = 1,
-        .log2_chroma_h = 0,
-        .comp = {
-            { 0, 1, 0, 0, 8 },        /* Y */
-            { 1, 1, 0, 0, 8 },        /* U */
-            { 2, 1, 0, 0, 8 },        /* V */
-        },
-        .flags = AV_PIX_FMT_FLAG_PLANAR,
-    },
-    [AV_PIX_FMT_YUVJ444P] = {
-        .name = "yuvj444p",
-        .nb_components = 3,
-        .log2_chroma_w = 0,
-        .log2_chroma_h = 0,
-        .comp = {
-            { 0, 1, 0, 0, 8 },        /* Y */
-            { 1, 1, 0, 0, 8 },        /* U */
-            { 2, 1, 0, 0, 8 },        /* V */
-        },
-        .flags = AV_PIX_FMT_FLAG_PLANAR,
-    },
 #if FF_API_XVMC
     [AV_PIX_FMT_XVMC] = {
         .name = "xvmc",
@@ -801,18 +753,6 @@ static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = {
         },
         .flags = AV_PIX_FMT_FLAG_PLANAR,
     },
-    [AV_PIX_FMT_YUVJ440P] = {
-        .name = "yuvj440p",
-        .nb_components = 3,
-        .log2_chroma_w = 0,
-        .log2_chroma_h = 1,
-        .comp = {
-            { 0, 1, 0, 0, 8 },        /* Y */
-            { 1, 1, 0, 0, 8 },        /* U */
-            { 2, 1, 0, 0, 8 },        /* V */
-        },
-        .flags = AV_PIX_FMT_FLAG_PLANAR,
-    },
     [AV_PIX_FMT_YUV440P10LE] = {
         .name = "yuv440p10le",
         .nb_components = 3,
diff --git a/libavutil/pixfmt.h b/libavutil/pixfmt.h
index a26c72d56b..ee941b2fbb 100644
--- a/libavutil/pixfmt.h
+++ b/libavutil/pixfmt.h
@@ -75,9 +75,6 @@ enum AVPixelFormat {
     AV_PIX_FMT_MONOWHITE, ///<        Y        ,  1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb
     AV_PIX_FMT_MONOBLACK, ///<        Y        ,  1bpp, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb
     AV_PIX_FMT_PAL8,      ///< 8 bits with AV_PIX_FMT_RGB32 palette
-    AV_PIX_FMT_YUVJ420P,  ///< planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting color_range
-    AV_PIX_FMT_YUVJ422P,  ///< planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting color_range
-    AV_PIX_FMT_YUVJ444P,  ///< planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting color_range
     AV_PIX_FMT_UYVY422,   ///< packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1
     AV_PIX_FMT_UYYVYY411, ///< packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3
     AV_PIX_FMT_BGR8,      ///< packed RGB 3:3:2,  8bpp, (msb)2B 3G 3R(lsb)
@@ -97,7 +94,6 @@ enum AVPixelFormat {
     AV_PIX_FMT_GRAY16BE,  ///<        Y        , 16bpp, big-endian
     AV_PIX_FMT_GRAY16LE,  ///<        Y        , 16bpp, little-endian
     AV_PIX_FMT_YUV440P,   ///< planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples)
-    AV_PIX_FMT_YUVJ440P,  ///< planar YUV 4:4:0 full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV440P and setting color_range
     AV_PIX_FMT_YUVA420P,  ///< planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples)
     AV_PIX_FMT_RGB48BE,   ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as big-endian
     AV_PIX_FMT_RGB48LE,   ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as little-endian
@@ -273,7 +269,6 @@ enum AVPixelFormat {
     AV_PIX_FMT_GBRP12LE,    ///< planar GBR 4:4:4 36bpp, little-endian
     AV_PIX_FMT_GBRP14BE,    ///< planar GBR 4:4:4 42bpp, big-endian
     AV_PIX_FMT_GBRP14LE,    ///< planar GBR 4:4:4 42bpp, little-endian
-    AV_PIX_FMT_YUVJ411P,    ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV411P and setting color_range
 
     AV_PIX_FMT_BAYER_BGGR8,    ///< bayer, BGBG..(odd line), GRGR..(even line), 8-bit samples
     AV_PIX_FMT_BAYER_RGGB8,    ///< bayer, RGRG..(odd line), GBGB..(even line), 8-bit samples
diff --git a/libavutil/version.h b/libavutil/version.h
index c5fa7c3692..0684996bf2 100644
--- a/libavutil/version.h
+++ b/libavutil/version.h
@@ -79,7 +79,7 @@
  */
 
 #define LIBAVUTIL_VERSION_MAJOR  58
-#define LIBAVUTIL_VERSION_MINOR  32
+#define LIBAVUTIL_VERSION_MINOR  33
 #define LIBAVUTIL_VERSION_MICRO 100
 
 #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
diff --git a/libswscale/utils.c b/libswscale/utils.c
index ec822ff5d9..debf26e92e 100644
--- a/libswscale/utils.c
+++ b/libswscale/utils.c
@@ -78,10 +78,6 @@ static const FormatEntry format_entries[] = {
     [AV_PIX_FMT_MONOWHITE]   = { 1, 1 },
     [AV_PIX_FMT_MONOBLACK]   = { 1, 1 },
     [AV_PIX_FMT_PAL8]        = { 1, 0 },
-    [AV_PIX_FMT_YUVJ420P]    = { 1, 1 },
-    [AV_PIX_FMT_YUVJ411P]    = { 1, 1 },
-    [AV_PIX_FMT_YUVJ422P]    = { 1, 1 },
-    [AV_PIX_FMT_YUVJ444P]    = { 1, 1 },
     [AV_PIX_FMT_YVYU422]     = { 1, 1 },
     [AV_PIX_FMT_UYVY422]     = { 1, 1 },
     [AV_PIX_FMT_UYYVYY411]   = { 0, 0 },
@@ -112,7 +108,6 @@ static const FormatEntry format_entries[] = {
     [AV_PIX_FMT_GRAY16BE]    = { 1, 1 },
     [AV_PIX_FMT_GRAY16LE]    = { 1, 1 },
     [AV_PIX_FMT_YUV440P]     = { 1, 1 },
-    [AV_PIX_FMT_YUVJ440P]    = { 1, 1 },
     [AV_PIX_FMT_YUV440P10LE] = { 1, 1 },
     [AV_PIX_FMT_YUV440P10BE] = { 1, 1 },
     [AV_PIX_FMT_YUV440P12LE] = { 1, 1 },
@@ -925,24 +920,9 @@ static void fill_xyztables(struct SwsContext *c)
     }
 }
 
-static int handle_jpeg(enum AVPixelFormat *format)
+static int is_luma_only(enum AVPixelFormat *format)
 {
     switch (*format) {
-    case AV_PIX_FMT_YUVJ420P:
-        *format = AV_PIX_FMT_YUV420P;
-        return 1;
-    case AV_PIX_FMT_YUVJ411P:
-        *format = AV_PIX_FMT_YUV411P;
-        return 1;
-    case AV_PIX_FMT_YUVJ422P:
-        *format = AV_PIX_FMT_YUV422P;
-        return 1;
-    case AV_PIX_FMT_YUVJ444P:
-        *format = AV_PIX_FMT_YUV444P;
-        return 1;
-    case AV_PIX_FMT_YUVJ440P:
-        *format = AV_PIX_FMT_YUV440P;
-        return 1;
     case AV_PIX_FMT_GRAY8:
     case AV_PIX_FMT_YA8:
     case AV_PIX_FMT_GRAY9LE:
@@ -2032,7 +2012,6 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter,
                              SwsFilter *dstFilter)
 {
     static AVOnce rgb2rgb_once = AV_ONCE_INIT;
-    enum AVPixelFormat src_format, dst_format;
     int ret;
 
     c->frame_src = av_frame_alloc();
@@ -2043,13 +2022,8 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter,
     if (ff_thread_once(&rgb2rgb_once, ff_sws_rgb2rgb_init) != 0)
         return AVERROR_UNKNOWN;
 
-    src_format = c->srcFormat;
-    dst_format = c->dstFormat;
-    c->srcRange |= handle_jpeg(&c->srcFormat);
-    c->dstRange |= handle_jpeg(&c->dstFormat);
-
-    if (src_format != c->srcFormat || dst_format != c->dstFormat)
-        av_log(c, AV_LOG_WARNING, "deprecated pixel format used, make sure you did set range correctly\n");
+    c->srcRange |= is_luma_only(&c->srcFormat);
+    c->dstRange |= is_luma_only(&c->dstFormat);
 
     if (c->nb_threads != 1) {
         ret = context_init_threaded(c, srcFilter, dstFilter);
diff --git a/tests/fate/lavf-image.mak b/tests/fate/lavf-image.mak
index 4177e091b3..d6113f9071 100644
--- a/tests/fate/lavf-image.mak
+++ b/tests/fate/lavf-image.mak
@@ -72,7 +72,7 @@ fate-lavf-none.gbrapf32le.exr:  CMD = lavf_image "-compression none  -pix_fmt gb
 fate-lavf-rle.gbrapf32le.exr:   CMD = lavf_image "-compression rle   -pix_fmt gbrapf32le" "" "no_file_checksums"
 fate-lavf-zip1.gbrapf32le.exr:  CMD = lavf_image "-compression zip1  -pix_fmt gbrapf32le" "" "no_file_checksums"
 fate-lavf-zip16.gbrapf32le.exr: CMD = lavf_image "-compression zip16 -pix_fmt gbrapf32le" "" "no_file_checksums"
-fate-lavf-jpg: CMD = lavf_image "-pix_fmt yuvj420p"
+fate-lavf-jpg: CMD = lavf_image "-pix_fmt yuv420p"
 fate-lavf-tiff: CMD = lavf_image "-pix_fmt rgb24"
 fate-lavf-gbrp10le.dpx: CMD = lavf_image "-pix_fmt gbrp10le" "-pix_fmt gbrp10le"
 fate-lavf-gbrp12le.dpx: CMD = lavf_image "-pix_fmt gbrp12le" "-pix_fmt gbrp12le"
diff --git a/tests/fate/pixfmt.mak b/tests/fate/pixfmt.mak
index 715a4763d4..a637f27059 100644
--- a/tests/fate/pixfmt.mak
+++ b/tests/fate/pixfmt.mak
@@ -13,10 +13,6 @@ FATE_PIXFMT-$(CONFIG_SCALE_FILTER) =           bgr24           \
                         yuv422p         \
                         yuv440p         \
                         yuv444p         \
-                        yuvj420p        \
-                        yuvj422p        \
-                        yuvj440p        \
-                        yuvj444p        \
                         yuyv422         \
 
 FATE_PIXFMT := $(FATE_PIXFMT-yes:%=fate-pixfmt-%)
diff --git a/tests/fate/vcodec.mak b/tests/fate/vcodec.mak
index e3205127ff..ada541cffc 100644
--- a/tests/fate/vcodec.mak
+++ b/tests/fate/vcodec.mak
@@ -229,12 +229,12 @@ FATE_VCODEC-$(call ENCDEC, LJPEG MJPEG, AVI) += ljpeg
 fate-vsynth%-ljpeg:              ENCOPTS = -strict -1
 
 FATE_VCODEC_SCALE-$(call ENCDEC, MJPEG, AVI) += mjpeg mjpeg-422 mjpeg-444 mjpeg-trell mjpeg-huffman mjpeg-trell-huffman
-fate-vsynth%-mjpeg:                   ENCOPTS = -qscale 9 -pix_fmt yuvj420p
-fate-vsynth%-mjpeg-422:               ENCOPTS = -qscale 9 -pix_fmt yuvj422p
-fate-vsynth%-mjpeg-444:               ENCOPTS = -qscale 9 -pix_fmt yuvj444p
-fate-vsynth%-mjpeg-trell:             ENCOPTS = -qscale 9 -pix_fmt yuvj420p -trellis 1
-fate-vsynth%-mjpeg-huffman:           ENCOPTS = -qscale 9 -pix_fmt yuvj420p -huffman optimal
-fate-vsynth%-mjpeg-trell-huffman:     ENCOPTS = -qscale 9 -pix_fmt yuvj420p -trellis 1 -huffman optimal
+fate-vsynth%-mjpeg:                   ENCOPTS = -qscale 9 -pix_fmt yuv420p
+fate-vsynth%-mjpeg-422:               ENCOPTS = -qscale 9 -pix_fmt yuv422p
+fate-vsynth%-mjpeg-444:               ENCOPTS = -qscale 9 -pix_fmt yuv444p
+fate-vsynth%-mjpeg-trell:             ENCOPTS = -qscale 9 -pix_fmt yuv420p -trellis 1
+fate-vsynth%-mjpeg-huffman:           ENCOPTS = -qscale 9 -pix_fmt yuv420p -huffman optimal
+fate-vsynth%-mjpeg-trell-huffman:     ENCOPTS = -qscale 9 -pix_fmt yuv420p -trellis 1 -huffman optimal
 
 FATE_VCODEC-$(call ENCDEC, MPEG1VIDEO, MPEG1VIDEO MPEGVIDEO) += mpeg1 mpeg1b
 fate-vsynth%-mpeg1:              FMT     = mpeg1video
diff --git a/tests/ref/fate/exif-image-embedded b/tests/ref/fate/exif-image-embedded
index d5937e9f86..3311d90132 100644
--- a/tests/ref/fate/exif-image-embedded
+++ b/tests/ref/fate/exif-image-embedded
@@ -20,7 +20,7 @@ crop_top=0
 crop_bottom=0
 crop_left=0
 crop_right=0
-pix_fmt=yuvj420p
+pix_fmt=yuv420p
 sample_aspect_ratio=1:1
 pict_type=I
 coded_picture_number=0
diff --git a/tests/ref/fate/exif-image-jpg b/tests/ref/fate/exif-image-jpg
index bed265b717..8d1bbe42e7 100644
--- a/tests/ref/fate/exif-image-jpg
+++ b/tests/ref/fate/exif-image-jpg
@@ -20,7 +20,7 @@ crop_top=0
 crop_bottom=0
 crop_left=0
 crop_right=0
-pix_fmt=yuvj422p
+pix_fmt=yuv422p
 sample_aspect_ratio=1:1
 pict_type=I
 coded_picture_number=0
diff --git a/tests/ref/fate/filter-pixdesc-yuvj411p b/tests/ref/fate/filter-pixdesc-yuvj411p
deleted file mode 100644
index 5dfc0dc4cd..0000000000
--- a/tests/ref/fate/filter-pixdesc-yuvj411p
+++ /dev/null
@@ -1 +0,0 @@
-pixdesc-yuvj411p    cac93399031ad86e8de0796b60b5bb8a
diff --git a/tests/ref/fate/filter-pixdesc-yuvj420p b/tests/ref/fate/filter-pixdesc-yuvj420p
deleted file mode 100644
index ad2f968a1f..0000000000
--- a/tests/ref/fate/filter-pixdesc-yuvj420p
+++ /dev/null
@@ -1 +0,0 @@
-pixdesc-yuvj420p    5244374882cf07c3cbcde71940caf8e5
diff --git a/tests/ref/fate/filter-pixdesc-yuvj422p b/tests/ref/fate/filter-pixdesc-yuvj422p
deleted file mode 100644
index 5f80d585d6..0000000000
--- a/tests/ref/fate/filter-pixdesc-yuvj422p
+++ /dev/null
@@ -1 +0,0 @@
-pixdesc-yuvj422p    6c9722aa9e0c1b8f9d953efeb93dc318
diff --git a/tests/ref/fate/filter-pixdesc-yuvj440p b/tests/ref/fate/filter-pixdesc-yuvj440p
deleted file mode 100644
index c98669285b..0000000000
--- a/tests/ref/fate/filter-pixdesc-yuvj440p
+++ /dev/null
@@ -1 +0,0 @@
-pixdesc-yuvj440p    34e6e86ca3ec4e6ef62d533aa2290e8f
diff --git a/tests/ref/fate/filter-pixdesc-yuvj444p b/tests/ref/fate/filter-pixdesc-yuvj444p
deleted file mode 100644
index 3e182fa6e2..0000000000
--- a/tests/ref/fate/filter-pixdesc-yuvj444p
+++ /dev/null
@@ -1 +0,0 @@
-pixdesc-yuvj444p    f67694103bb42d74742918adf9ea31c5
diff --git a/tests/ref/fate/filter-pixfmts-copy b/tests/ref/fate/filter-pixfmts-copy
index eb3e61b4f2..e4864dfc7a 100644
--- a/tests/ref/fate/filter-pixfmts-copy
+++ b/tests/ref/fate/filter-pixfmts-copy
@@ -175,10 +175,5 @@ yuva444p16be        c80c1899789a6411d0025730efc8f01c
 yuva444p16le        2ed56ea50fafda4d226c9b133755dad8
 yuva444p9be         4903fde22b15d28da90761ac1cfcb1c5
 yuva444p9le         4eeb5988df0740fea720da1e31bbb829
-yuvj411p            e003eefa7e2a20f20d33767775417216
-yuvj420p            8f3d8f1b4577d11082d5ab8a901e048d
-yuvj422p            79d480e99e610112f266c833c6cb3d35
-yuvj440p            f4b18310c7174868fc92579f87460876
-yuvj444p            b161e6d5a941e2a4bb7bc56ef8af623f
 yuyv422             435c92283b538aa3d8fa2a020b0afd49
 yvyu422             8436c2a760291cc979e0dd62ab8cede0
diff --git a/tests/ref/fate/filter-pixfmts-crop b/tests/ref/fate/filter-pixfmts-crop
index 01cb88bc54..9a2f8aa920 100644
--- a/tests/ref/fate/filter-pixfmts-crop
+++ b/tests/ref/fate/filter-pixfmts-crop
@@ -170,8 +170,3 @@ yuva444p16be        f817caf234aaf5848b2bc9679582ed56
 yuva444p16le        b32ad623fc423f897ff31c4073ea2a6f
 yuva444p9be         48498d994c3c9070f31773e39da306dd
 yuva444p9le         431b0ac211a8f81c15f38fb57a73530c
-yuvj411p            241d393eeaa1517f6b4b23034222994b
-yuvj420p            35583968261c636b9c57ff03fd60eb54
-yuvj422p            c29a94439e96cd5dab7f65eb6dfc2f5c
-yuvj440p            8899d4ce717e32937d58a76df473ba7a
-yuvj444p            6c0d0ad629baaa96fe4dcb00f0f5d9de
diff --git a/tests/ref/fate/filter-pixfmts-field b/tests/ref/fate/filter-pixfmts-field
index c7d9b8f133..3cb9480b0f 100644
--- a/tests/ref/fate/filter-pixfmts-field
+++ b/tests/ref/fate/filter-pixfmts-field
@@ -175,10 +175,5 @@ yuva444p16be        b10fd7c1b61ac22bdb285f0d91a390f1
 yuva444p16le        cac82ffc36b7052747407663fc5ed510
 yuva444p9be         a6f66d08b3370fdd90987a6143b7b91c
 yuva444p9le         8d0f0b0840096127613920984078ce53
-yuvj411p            0c7caab687fbd33cba04702366b6c401
-yuvj420p            c9bef7e5c1dba1024be992167806ef07
-yuvj422p            ac900a0f9854dc2a0ec2e016ff5487dc
-yuvj440p            6f0d66982a3b96efb341a512314317ca
-yuvj444p            d559f8cf2e68b0cd3abadbb2f3642dd7
 yuyv422             449ca8d4b5a28ccaaa342860b24aeb3c
 yvyu422             6b226a0d4fce5478294d3bd4ecfb46a5
diff --git a/tests/ref/fate/filter-pixfmts-fieldorder b/tests/ref/fate/filter-pixfmts-fieldorder
index 2f64bd3b14..b9a9ef6dfe 100644
--- a/tests/ref/fate/filter-pixfmts-fieldorder
+++ b/tests/ref/fate/filter-pixfmts-fieldorder
@@ -140,8 +140,5 @@ yuva444p16be        2f80d411847856e1364659dee8b23485
 yuva444p16le        5796be8d66371b60037fc8053c27e900
 yuva444p9be         a83599c0e9fca08f6b7c6e02c2413fcf
 yuva444p9le         390fcd8f72ee407a8c338667944e3f72
-yuvj411p            73fa99cb96d2f7171bff15bc2e43d963
-yuvj422p            d5e67ce1db5347cf3416069286359f57
-yuvj444p            e915da6b5aa0ee5298771ba0ca187cad
 yuyv422             a923c5bd4889bec92d872237f6a578ec
 yvyu422             d7a8697f1f5e6a2a27b0df17811b2613
diff --git a/tests/ref/fate/filter-pixfmts-hflip b/tests/ref/fate/filter-pixfmts-hflip
index 66274890a7..77c127ea54 100644
--- a/tests/ref/fate/filter-pixfmts-hflip
+++ b/tests/ref/fate/filter-pixfmts-hflip
@@ -170,8 +170,3 @@ yuva444p16be        635fb2720470e0042a7c9b70bf908a2c
 yuva444p16le        6d5bd13f8bb804bd1158c1af732a24e1
 yuva444p9be         3d3e7491192aa4e396015bf8e3755a24
 yuva444p9le         31727b34bc3d5ce726681e90557d39e4
-yuvj411p            70a0abb56a538376aff33c275584b61e
-yuvj420p            83af439c504d41f986adc17059b7fda8
-yuvj422p            daf02a72b26d17d1855b977aa04609fb
-yuvj440p            a4af7a9e3cff6cfc1c8924590ae69807
-yuvj444p            f5937e0183439411673d2ebf8df62e2b
diff --git a/tests/ref/fate/filter-pixfmts-il b/tests/ref/fate/filter-pixfmts-il
index 03519f2a9d..415ccc7307 100644
--- a/tests/ref/fate/filter-pixfmts-il
+++ b/tests/ref/fate/filter-pixfmts-il
@@ -174,10 +174,5 @@ yuva444p16be        97f8cb6ed835c7c5cd2fb112b1e135c7
 yuva444p16le        47170401a8c348d3f05f6530607d066b
 yuva444p9be         d5c0170b41221a9607e6ae586880a383
 yuva444p9le         4948983313f46180666dec85ef30130c
-yuvj411p            91e137f54b2cbbb1c1423c36f031d5f2
-yuvj420p            2b6d8e3b527af5de94963d1bdefe20a9
-yuvj422p            4ce16aa04a5e785b29fd9cdf54bc9ca1
-yuvj440p            36a248ec6f1dc67555ee590651388b15
-yuvj444p            279790fe3c83b07f0a09085d36849c30
 yuyv422             09af5b85deecfeaef2e00e00fbc12a49
 yvyu422             62c62a80939c34fb7890c0e7791a0321
diff --git a/tests/ref/fate/filter-pixfmts-lut b/tests/ref/fate/filter-pixfmts-lut
index 41c66e2bfc..fd4d1bc4b3 100644
--- a/tests/ref/fate/filter-pixfmts-lut
+++ b/tests/ref/fate/filter-pixfmts-lut
@@ -51,7 +51,3 @@ yuva422p            5938a7c7588febb069bd0cd4c447305e
 yuva422p16le        c5ccfdc1a0dc6cb130c07ea61df6f727
 yuva444p            fbcbdc3521d17c702ee521b0893098e4
 yuva444p16le        b7142d28d4d069d7eb019dcaf8b323b1
-yuvj420p            65bc88887c7f06a6221155ca7f9cfca4
-yuvj422p            ff5baffefc8ffe4547653092fd7da200
-yuvj440p            ef3f27270e60ac06582e3ac7c2f3e6fa
-yuvj444p            29378d3fd132c760522c51c3378067b8
diff --git a/tests/ref/fate/filter-pixfmts-null b/tests/ref/fate/filter-pixfmts-null
index eb3e61b4f2..e4864dfc7a 100644
--- a/tests/ref/fate/filter-pixfmts-null
+++ b/tests/ref/fate/filter-pixfmts-null
@@ -175,10 +175,5 @@ yuva444p16be        c80c1899789a6411d0025730efc8f01c
 yuva444p16le        2ed56ea50fafda4d226c9b133755dad8
 yuva444p9be         4903fde22b15d28da90761ac1cfcb1c5
 yuva444p9le         4eeb5988df0740fea720da1e31bbb829
-yuvj411p            e003eefa7e2a20f20d33767775417216
-yuvj420p            8f3d8f1b4577d11082d5ab8a901e048d
-yuvj422p            79d480e99e610112f266c833c6cb3d35
-yuvj440p            f4b18310c7174868fc92579f87460876
-yuvj444p            b161e6d5a941e2a4bb7bc56ef8af623f
 yuyv422             435c92283b538aa3d8fa2a020b0afd49
 yvyu422             8436c2a760291cc979e0dd62ab8cede0
diff --git a/tests/ref/fate/filter-pixfmts-pad b/tests/ref/fate/filter-pixfmts-pad
index b4d236d408..b22442bd13 100644
--- a/tests/ref/fate/filter-pixfmts-pad
+++ b/tests/ref/fate/filter-pixfmts-pad
@@ -82,8 +82,3 @@ yuva444p10le        89491ef450706faf23341e401750d907
 yuva444p12le        06c47dba21328165dbb7ebb3da0a2fde
 yuva444p16le        d089b119c8dc964de9af12bfb38f89a0
 yuva444p9le         b824d34ac49a1dc483c772e15310afcd
-yuvj411p            87dbac57b211ab4823c1abbd702f1516
-yuvj420p            1abef62bce65131ca4913eb2006fd860
-yuvj422p            198c57b519e2be14b150889bd7f94898
-yuvj440p            e6533260d197ad15e39319117c57473e
-yuvj444p            26a44748960513783ea676eff409d89a
diff --git a/tests/ref/fate/filter-pixfmts-pullup b/tests/ref/fate/filter-pixfmts-pullup
index c6ddb3489a..d2f927a0c9 100644
--- a/tests/ref/fate/filter-pixfmts-pullup
+++ b/tests/ref/fate/filter-pixfmts-pullup
@@ -5,8 +5,3 @@ yuv420p             dba6303cd02cc39cb0db7b546793d565
 yuv422p             d7d3224dd900bb1b96608a28a704360d
 yuv440p             d4c5f20701cfceb4bbf7d75cfcc13514
 yuv444p             7e405274037e7f2ab845d7413a71e16d
-yuvj411p            dc602e7bd3449d16e17e695815616b1e
-yuvj420p            b98ec86eeef2d512aeb2fc4d32ffa656
-yuvj422p            f09c3240bb662477b76ce4da34b4feed
-yuvj440p            8d3ab69e2bbbbbd2f9be323c18922533
-yuvj444p            2dc27560eed5d685354796dcccce853c
diff --git a/tests/ref/fate/filter-pixfmts-rotate b/tests/ref/fate/filter-pixfmts-rotate
index e4ed81e71a..3aa21aff77 100644
--- a/tests/ref/fate/filter-pixfmts-rotate
+++ b/tests/ref/fate/filter-pixfmts-rotate
@@ -30,5 +30,3 @@ yuva444p            459fad5abfd16db9bb6a52761dc74cc1
 yuva444p10le        92f820d3481b7ebcb48b98a73e7b4c90
 yuva444p16le        2ed56ea50fafda4d226c9b133755dad8
 yuva444p9le         4eeb5988df0740fea720da1e31bbb829
-yuvj420p            8f3d8f1b4577d11082d5ab8a901e048d
-yuvj444p            b161e6d5a941e2a4bb7bc56ef8af623f
diff --git a/tests/ref/fate/filter-pixfmts-scale b/tests/ref/fate/filter-pixfmts-scale
index b11384068b..13f885a6a6 100644
--- a/tests/ref/fate/filter-pixfmts-scale
+++ b/tests/ref/fate/filter-pixfmts-scale
@@ -175,10 +175,5 @@ yuva444p16be        39ca2e32aa61b210b6c528855d24a16b
 yuva444p16le        cd2e0a001d8175f2204b2eb411c6a801
 yuva444p9be         58add24afbf43ff0ff7079cc1948fb56
 yuva444p9le         077c8cec2c374163d7f7eae27e797bdb
-yuvj411p            d1076331c75ca66bf62497edbd8384f9
-yuvj420p            10390e6dda9cbb4c61fb88bcbb49fc3c
-yuvj422p            996f6672566a4dcd8d272f48f058d49e
-yuvj440p            3d80c9f67f8ef9b2d8a9ae2d37b464a2
-yuvj444p            9f858b9ca3fe949611147414573a904f
 yuyv422             1704675eff94ad0a03a9a6a3ddf5e0df
 yvyu422             516705a40f43d00e9c41ff47f4f7b802
diff --git a/tests/ref/fate/filter-pixfmts-swapuv b/tests/ref/fate/filter-pixfmts-swapuv
index 676a440699..bf6e5c08c3 100644
--- a/tests/ref/fate/filter-pixfmts-swapuv
+++ b/tests/ref/fate/filter-pixfmts-swapuv
@@ -63,8 +63,3 @@ yuva444p16be        356d72791dfd91861b21630e315d40cb
 yuva444p16le        176591ce074ba8befc5fb279446ca1be
 yuva444p9be         675f0ed3e6572b05f06d9e44611bdff5
 yuva444p9le         bf3ea2bf123a3a1ceedf587682b85cb9
-yuvj411p            361c32e086bd27cf3ded194dc00dc9c5
-yuvj420p            553ac1af571391271d9715e2e8a4a5cc
-yuvj422p            39b613d01cacfcdd9eecf9e0d379a393
-yuvj440p            afed4ad98d6accf5811d439f3a687aa1
-yuvj444p            8de64aff4b7b3895d8cedd67cc10722b
diff --git a/tests/ref/fate/filter-pixfmts-tinterlace_cvlpf b/tests/ref/fate/filter-pixfmts-tinterlace_cvlpf
index 99703fa1af..df269b9a7c 100644
--- a/tests/ref/fate/filter-pixfmts-tinterlace_cvlpf
+++ b/tests/ref/fate/filter-pixfmts-tinterlace_cvlpf
@@ -19,7 +19,3 @@ yuva422p            a8da2806e21a88449079faa7f4303ffa
 yuva422p10le        d2965b5b5a43a7165badaff0718a17d8
 yuva444p            a3f57734d6f72bdf37f8f612ea7cce63
 yuva444p10le        e020512901fd9ac7088898a4e3a8c7c1
-yuvj420p            9f358e311b694bcd01e1a07d1120ade5
-yuvj422p            9a7628a9f1630d35c7176951ddc1b2f6
-yuvj440p            112fe35292c687746ec0c622a42c611b
-yuvj444p            f894438f40950229baa02545daa8812a
diff --git a/tests/ref/fate/filter-pixfmts-tinterlace_merge b/tests/ref/fate/filter-pixfmts-tinterlace_merge
index fa6151c272..7b0026faee 100644
--- a/tests/ref/fate/filter-pixfmts-tinterlace_merge
+++ b/tests/ref/fate/filter-pixfmts-tinterlace_merge
@@ -19,7 +19,3 @@ yuva422p            ca200be80e5bfdb159e1aea57129ed3a
 yuva422p10le        06d4f79ee2ddf31d9fe15af8ca573f46
 yuva444p            9f39c35d6899dcb8b9a9b07c339ca365
 yuva444p10le        b0c54fc3efad73f252d86127407aa1fd
-yuvj420p            844359293bb6ff81549f3fc0090cc587
-yuvj422p            526af049d43974822baa7b48aa1e1098
-yuvj440p            af9285194da8efbc40d93bf8109f9dc5
-yuvj444p            2a3f18b02c17a0c39c6245b8b3639b91
diff --git a/tests/ref/fate/filter-pixfmts-tinterlace_pad b/tests/ref/fate/filter-pixfmts-tinterlace_pad
index 29321e542b..5cf2bc95dd 100644
--- a/tests/ref/fate/filter-pixfmts-tinterlace_pad
+++ b/tests/ref/fate/filter-pixfmts-tinterlace_pad
@@ -19,7 +19,3 @@ yuva422p            3426ed1ac9429202d8c29fa62a04d4c3
 yuva422p10le        5c62eaf71afec3f7bc7ae5a327431434
 yuva444p            1b9fc791c7d774b4ba8c9dc836f78cf5
 yuva444p10le        b6161c0f6f5548ba4346a9fda20ea8a8
-yuvj420p            9a872e0c1b3c0b6fe856415696b758bd
-yuvj422p            da3c9ef25528a2ee96746ce44e6969f3
-yuvj440p            a9a5495c6b0e2bf6e561998ea1c356a7
-yuvj444p            085214844e83ad47b4f33303db0ebee6
diff --git a/tests/ref/fate/filter-pixfmts-tinterlace_vlpf b/tests/ref/fate/filter-pixfmts-tinterlace_vlpf
index 5a5f80b115..0f64dd882c 100644
--- a/tests/ref/fate/filter-pixfmts-tinterlace_vlpf
+++ b/tests/ref/fate/filter-pixfmts-tinterlace_vlpf
@@ -19,7 +19,3 @@ yuva422p            ef8fdbe910d68e88e98227b0e99fb5a6
 yuva422p10le        257a4aec41f9b5412179272d8a7fb6f7
 yuva444p            3662eadd5f61a6edbc9d715ea8591415
 yuva444p10le        0905cf5b7f42c11be3f0486a66533c71
-yuvj420p            14c4390b319c5d679184503309060ac3
-yuvj422p            bbe00a26526931b72a024febe1cd6b90
-yuvj440p            f654cf28b7879c6a6c950c3cb9612580
-yuvj444p            c162a4fe7a665f4abf257443703f0d72
diff --git a/tests/ref/fate/filter-pixfmts-transpose b/tests/ref/fate/filter-pixfmts-transpose
index ec157dee0c..9d0d9df86d 100644
--- a/tests/ref/fate/filter-pixfmts-transpose
+++ b/tests/ref/fate/filter-pixfmts-transpose
@@ -136,5 +136,3 @@ yuva444p16be        9fd2f00ea9bef8e488228bc0b47b28cb
 yuva444p16le        ae9fd8d1baea0f8626b963816d667d2d
 yuva444p9be         4ce11ae57780f74c78cdd5c06be4bded
 yuva444p9le         1b9cc85fd6ab0c7e240915a99e98d1c1
-yuvj420p            9603b8dd64daec41f0514197989c2b19
-yuvj444p            66ec9b3219df9eb2c1315d293602ab42
diff --git a/tests/ref/fate/filter-pixfmts-vflip b/tests/ref/fate/filter-pixfmts-vflip
index 9a7972d6cf..53f6b76f66 100644
--- a/tests/ref/fate/filter-pixfmts-vflip
+++ b/tests/ref/fate/filter-pixfmts-vflip
@@ -175,10 +175,5 @@ yuva444p16be        b8801dccf64b3eadc2a5b5db67ae0b0f
 yuva444p16le        8e72ae66754badf5d1eeb094e6bf0ddc
 yuva444p9be         bcd845394351ca6d15e947342802957d
 yuva444p9le         7727a93765ed38dfd25e3d6b7a38fa63
-yuvj411p            260f51b360dc00b2222f4cb39fa05e36
-yuvj420p            fab4394239b08bdb7638215a42d56eaf
-yuvj422p            0309c2b34aa4d74f58048fe320a02b83
-yuvj440p            f5e3a92fa46e57e2c613fc9aaad18e9d
-yuvj444p            ca4b3662259ba15a6297a44ef64414b7
 yuyv422             8f02b2332fe9bb782f88627c99f32ee8
 yvyu422             bd8cb985c2e1f9c32dc6b865bdf20637
diff --git a/tests/ref/fate/imgutils b/tests/ref/fate/imgutils
index f166cb67fb..94b274d831 100644
--- a/tests/ref/fate/imgutils
+++ b/tests/ref/fate/imgutils
@@ -66,9 +66,6 @@ gray            planes: 1, linesizes:  64   0   0   0, plane_sizes:  3072     0
 monow           planes: 1, linesizes:   8   0   0   0, plane_sizes:   384     0     0     0, plane_offsets:     0     0     0, total_size: 384
 monob           planes: 1, linesizes:   8   0   0   0, plane_sizes:   384     0     0     0, plane_offsets:     0     0     0, total_size: 384
 pal8            planes: 2, linesizes:  64   0   0   0, plane_sizes:  3072  1024     0     0, plane_offsets:  3072     0     0, total_size: 4096
-yuvj420p        planes: 3, linesizes:  64  32  32   0, plane_sizes:  3072   768   768     0, plane_offsets:  3072   768     0, total_size: 4608
-yuvj422p        planes: 3, linesizes:  64  32  32   0, plane_sizes:  3072  1536  1536     0, plane_offsets:  3072  1536     0, total_size: 6144
-yuvj444p        planes: 3, linesizes:  64  64  64   0, plane_sizes:  3072  3072  3072     0, plane_offsets:  3072  3072     0, total_size: 9216
 uyvy422         planes: 1, linesizes: 128   0   0   0, plane_sizes:  6144     0     0     0, plane_offsets:     0     0     0, total_size: 6144
 uyyvyy411       planes: 1, linesizes:  96   0   0   0, plane_sizes:  4608     0     0     0, plane_offsets:     0     0     0, total_size: 4608
 bgr8            planes: 1, linesizes:  64   0   0   0, plane_sizes:  3072     0     0     0, plane_offsets:     0     0     0, total_size: 3072
@@ -86,7 +83,6 @@ bgra            planes: 1, linesizes: 256   0   0   0, plane_sizes: 12288     0
 gray16be        planes: 1, linesizes: 128   0   0   0, plane_sizes:  6144     0     0     0, plane_offsets:     0     0     0, total_size: 6144
 gray16le        planes: 1, linesizes: 128   0   0   0, plane_sizes:  6144     0     0     0, plane_offsets:     0     0     0, total_size: 6144
 yuv440p         planes: 3, linesizes:  64  64  64   0, plane_sizes:  3072  1536  1536     0, plane_offsets:  3072  1536     0, total_size: 6144
-yuvj440p        planes: 3, linesizes:  64  64  64   0, plane_sizes:  3072  1536  1536     0, plane_offsets:  3072  1536     0, total_size: 6144
 yuva420p        planes: 4, linesizes:  64  32  32  64, plane_sizes:  3072   768   768  3072, plane_offsets:  3072   768   768, total_size: 7680
 rgb48be         planes: 1, linesizes: 384   0   0   0, plane_sizes: 18432     0     0     0, plane_offsets:     0     0     0, total_size: 18432
 rgb48le         planes: 1, linesizes: 384   0   0   0, plane_sizes: 18432     0     0     0, plane_offsets:     0     0     0, total_size: 18432
@@ -185,7 +181,6 @@ gbrp12be        planes: 3, linesizes: 128 128 128   0, plane_sizes:  6144  6144
 gbrp12le        planes: 3, linesizes: 128 128 128   0, plane_sizes:  6144  6144  6144     0, plane_offsets:  6144  6144     0, total_size: 18432
 gbrp14be        planes: 3, linesizes: 128 128 128   0, plane_sizes:  6144  6144  6144     0, plane_offsets:  6144  6144     0, total_size: 18432
 gbrp14le        planes: 3, linesizes: 128 128 128   0, plane_sizes:  6144  6144  6144     0, plane_offsets:  6144  6144     0, total_size: 18432
-yuvj411p        planes: 3, linesizes:  64  16  16   0, plane_sizes:  3072   768   768     0, plane_offsets:  3072   768     0, total_size: 4608
 bayer_bggr8     planes: 1, linesizes:  64   0   0   0, plane_sizes:  3072     0     0     0, plane_offsets:     0     0     0, total_size: 3072
 bayer_rggb8     planes: 1, linesizes:  64   0   0   0, plane_sizes:  3072     0     0     0, plane_offsets:     0     0     0, total_size: 3072
 bayer_gbrg8     planes: 1, linesizes:  64   0   0   0, plane_sizes:  3072     0     0     0, plane_offsets:     0     0     0, total_size: 3072
diff --git a/tests/ref/fate/jpg-icc b/tests/ref/fate/jpg-icc
index cc7ab604e1..41494e3383 100644
--- a/tests/ref/fate/jpg-icc
+++ b/tests/ref/fate/jpg-icc
@@ -28,7 +28,7 @@ crop_top=0
 crop_bottom=0
 crop_left=0
 crop_right=0
-pix_fmt=yuvj444p
+pix_fmt=yuv444p
 sample_aspect_ratio=1:1
 pict_type=I
 coded_picture_number=0
diff --git a/tests/ref/fate/sws-pixdesc-query b/tests/ref/fate/sws-pixdesc-query
index fff93bbf0e..58283b4430 100644
--- a/tests/ref/fate/sws-pixdesc-query
+++ b/tests/ref/fate/sws-pixdesc-query
@@ -327,11 +327,6 @@ isYUV:
   yuva444p16le
   yuva444p9be
   yuva444p9le
-  yuvj411p
-  yuvj420p
-  yuvj422p
-  yuvj440p
-  yuvj444p
   yuyv422
   yvyu422
 
@@ -426,11 +421,6 @@ isPlanarYUV:
   yuva444p16le
   yuva444p9be
   yuva444p9le
-  yuvj411p
-  yuvj420p
-  yuvj422p
-  yuvj440p
-  yuvj444p
 
 isSemiPlanarYUV:
   nv12
@@ -957,11 +947,6 @@ Planar:
   yuva444p16le
   yuva444p9be
   yuva444p9le
-  yuvj411p
-  yuvj420p
-  yuvj422p
-  yuvj440p
-  yuvj444p
 
 PackedRGB:
   0bgr
diff --git a/tests/ref/pixfmt/yuvj420p b/tests/ref/pixfmt/yuvj420p
deleted file mode 100644
index 47a729ed45..0000000000
--- a/tests/ref/pixfmt/yuvj420p
+++ /dev/null
@@ -1,2 +0,0 @@
-e176bd14185788110e055f945de7f95f *tests/data/pixfmt/yuvj420p.yuv
-304128 tests/data/pixfmt/yuvj420p.yuv
diff --git a/tests/ref/pixfmt/yuvj422p b/tests/ref/pixfmt/yuvj422p
deleted file mode 100644
index 6ab97d59db..0000000000
--- a/tests/ref/pixfmt/yuvj422p
+++ /dev/null
@@ -1,2 +0,0 @@
-472028e46a81c98d9b2477507def4723 *tests/data/pixfmt/yuvj422p.yuv
-304128 tests/data/pixfmt/yuvj422p.yuv
diff --git a/tests/ref/pixfmt/yuvj440p b/tests/ref/pixfmt/yuvj440p
deleted file mode 100644
index 2beeae52c1..0000000000
--- a/tests/ref/pixfmt/yuvj440p
+++ /dev/null
@@ -1,2 +0,0 @@
-4d8d402c45d913038d4b725396719111 *tests/data/pixfmt/yuvj440p.yuv
-304128 tests/data/pixfmt/yuvj440p.yuv
diff --git a/tests/ref/pixfmt/yuvj444p b/tests/ref/pixfmt/yuvj444p
deleted file mode 100644
index 63fb813d4b..0000000000
--- a/tests/ref/pixfmt/yuvj444p
+++ /dev/null
@@ -1,2 +0,0 @@
-c10442da177c9f1d12be3c53be6fa12c *tests/data/pixfmt/yuvj444p.yuv
-304128 tests/data/pixfmt/yuvj444p.yuv
-- 
2.42.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] 37+ messages in thread

* [FFmpeg-devel] [PATCH 24/25] avutil/pixdesc: remove old yuvj pixel format check
  2023-11-09 12:19 [FFmpeg-devel] [RFC PATCH 00/25] YUVJ removal + filter negotiation Niklas Haas
                   ` (22 preceding siblings ...)
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 23/25] lavfi/lavu/lavc: remove YUVJ pixel formats Niklas Haas
@ 2023-11-09 12:19 ` Niklas Haas
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 25/25] avcodec/encode: enforce AVCodec capabilities at encode time Niklas Haas
  24 siblings, 0 replies; 37+ messages in thread
From: Niklas Haas @ 2023-11-09 12:19 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Niklas Haas

From: Niklas Haas <git@haasn.dev>

These no longer exist.
---
 libavutil/pixdesc.c | 14 +-------------
 1 file changed, 1 insertion(+), 13 deletions(-)

diff --git a/libavutil/pixdesc.c b/libavutil/pixdesc.c
index 2886c9e0f5..9244b9d7a8 100644
--- a/libavutil/pixdesc.c
+++ b/libavutil/pixdesc.c
@@ -2977,8 +2977,7 @@ enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt)
 #define FF_COLOR_NA      -1
 #define FF_COLOR_RGB      0 /**< RGB color space */
 #define FF_COLOR_GRAY     1 /**< gray color space */
-#define FF_COLOR_YUV      2 /**< YUV color space. 16 <= Y <= 235, 16 <= U, V <= 240 */
-#define FF_COLOR_YUV_JPEG 3 /**< YUV color space. 0 <= Y <= 255, 0 <= U, V <= 255 */
+#define FF_COLOR_YUV      2 /**< YUV color space */
 #define FF_COLOR_XYZ      4
 
 #define pixdesc_has_alpha(pixdesc) \
@@ -2992,11 +2991,6 @@ static int get_color_type(const AVPixFmtDescriptor *desc) {
     if(desc->nb_components == 1 || desc->nb_components == 2)
         return FF_COLOR_GRAY;
 
-    if (desc->name) {
-        if (av_strstart(desc->name, "yuvj", NULL))
-            return FF_COLOR_YUV_JPEG;
-    }
-
     if(desc->flags & AV_PIX_FMT_FLAG_RGB)
         return FF_COLOR_RGB;
 
@@ -3135,12 +3129,6 @@ static int get_pix_fmt_score(enum AVPixelFormat dst_pix_fmt,
         if (src_color != FF_COLOR_YUV)
             loss |= FF_LOSS_COLORSPACE;
         break;
-    case FF_COLOR_YUV_JPEG:
-        if (src_color != FF_COLOR_YUV_JPEG &&
-            src_color != FF_COLOR_YUV &&
-            src_color != FF_COLOR_GRAY)
-            loss |= FF_LOSS_COLORSPACE;
-        break;
     default:
         /* fail safe test */
         if (src_color != dst_color)
-- 
2.42.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] 37+ messages in thread

* [FFmpeg-devel] [PATCH 25/25] avcodec/encode: enforce AVCodec capabilities at encode time
  2023-11-09 12:19 [FFmpeg-devel] [RFC PATCH 00/25] YUVJ removal + filter negotiation Niklas Haas
                   ` (23 preceding siblings ...)
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 24/25] avutil/pixdesc: remove old yuvj pixel format check Niklas Haas
@ 2023-11-09 12:19 ` Niklas Haas
  24 siblings, 0 replies; 37+ messages in thread
From: Niklas Haas @ 2023-11-09 12:19 UTC (permalink / raw)
  To: ffmpeg-devel; +Cc: Niklas Haas

From: Niklas Haas <git@haasn.dev>

In general, the logic is always the same: if the codec supports only a
single format, enforce it if possible. Otherwise, throw an error when
an incompatible format is thrown.

To preserve backwards compatibility and make this check less pedantic
than it needs to be, always consider 'AVCOL_*_UNSPECIFIED' a valid
value. That way, we will only throw an error if the user explicitly set
a color value that we explicitly know is unsupported.
---
 libavcodec/encode.c | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/libavcodec/encode.c b/libavcodec/encode.c
index 31565638fa..73c3c4cd41 100644
--- a/libavcodec/encode.c
+++ b/libavcodec/encode.c
@@ -605,6 +605,45 @@ static int encode_preinit_video(AVCodecContext *avctx)
         }
     }
 
+    if (avctx->colorspace != AVCOL_SPC_UNSPECIFIED && c->color_spaces) {
+        for (i = 0; c->color_spaces[i] != AVCOL_SPC_UNSPECIFIED; i++)
+            if (avctx->colorspace == c->color_spaces[i])
+                break;
+        if (c->color_spaces[i] == AVCOL_SPC_UNSPECIFIED) {
+            av_log(avctx, AV_LOG_ERROR,
+                   "Specified color space %s is not supported by the %s encoder.\n",
+                   av_color_space_name(avctx->colorspace), c->name);
+            av_log(avctx, AV_LOG_ERROR, "Supported color spaces:\n");
+            for (int p = 0; c->color_spaces[p] != AVCOL_SPC_UNSPECIFIED; p++) {
+                av_log(avctx, AV_LOG_ERROR, "  %s\n",
+                       av_color_space_name(c->color_spaces[p]));
+            }
+            return AVERROR(EINVAL);
+        }
+    }
+
+    if (avctx->color_range != AVCOL_RANGE_UNSPECIFIED && c->color_ranges) {
+        for (i = 0; c->color_ranges[i] != AVCOL_RANGE_UNSPECIFIED; i++) {
+            if (avctx->color_range == c->color_ranges[i])
+                break;
+        }
+        if (c->color_ranges[i] == AVCOL_RANGE_UNSPECIFIED) {
+            if (i == 1 && !avctx->color_range) {
+                avctx->color_range = c->color_ranges[0];
+            } else if (avctx->color_range) {
+                av_log(avctx, AV_LOG_ERROR,
+                       "Specified color range %s is not supported by the %s encoder.\n",
+                       av_color_range_name(avctx->color_range), c->name);
+                av_log(avctx, AV_LOG_ERROR, "Supported color ranges:\n");
+                for (int p = 0; c->color_ranges[p] != AVCOL_RANGE_UNSPECIFIED; p++) {
+                    av_log(avctx, AV_LOG_ERROR, "  %s\n",
+                           av_color_range_name(c->color_ranges[p]));
+                }
+                return AVERROR(EINVAL);
+            }
+        }
+    }
+
     if (    avctx->bits_per_raw_sample < 0
         || (avctx->bits_per_raw_sample > 8 && pixdesc->comp[0].depth <= 8)) {
         av_log(avctx, AV_LOG_WARNING, "Specified bit depth %d not possible with the specified pixel formats depth %d\n",
-- 
2.42.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] 37+ messages in thread

* Re: [FFmpeg-devel] [PATCH 04/25] fftools/ffmpeg_filter: don't clear buffersrc params
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 04/25] fftools/ffmpeg_filter: don't clear buffersrc params Niklas Haas
@ 2023-11-27 16:05   ` Anton Khirnov
  0 siblings, 0 replies; 37+ messages in thread
From: Anton Khirnov @ 2023-11-27 16:05 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Niklas Haas

Quoting Niklas Haas (2023-11-09 13:19:36)
> From: Niklas Haas <git@haasn.dev>
> 
> This memset is bogus, it accomplishes nothing in the best case and
> regresses future additions to AVBufferSrcParameters in the worst case.
> ---
>  fftools/ffmpeg_filter.c | 3 ---
>  1 file changed, 3 deletions(-)

Looks very ok.

-- 
Anton Khirnov
_______________________________________________
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] 37+ messages in thread

* Re: [FFmpeg-devel] [PATCH 02/25] avfilter: always call ff_default_query_formats
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 02/25] avfilter: always call ff_default_query_formats Niklas Haas
@ 2023-11-27 16:56   ` Anton Khirnov
  0 siblings, 0 replies; 37+ messages in thread
From: Anton Khirnov @ 2023-11-27 16:56 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Niklas Haas

Quoting Niklas Haas (2023-11-09 13:19:34)
> From: Niklas Haas <git@haasn.dev>
> 
> Even if a query func is set. This is safe to do, because
> ff_default_query_formats is documented not to touch any filter lists
> that were already set by the query func.
> 
> The reason to do this is because it allows us to extend
> AVFilterFormatsConfig without having to touch every filter in existence.
> An alternative implementation of this commit would be to explicitly add
> a `ff_default_query_formats` call at the end of every query_formats
> function, but that would end up functionally equivalent to this change
> while touching a whole lot more code paths for no reason.
> 
> As a bonus, eliminates some code/logic duplication from this function.
> ---
>  libavfilter/avfiltergraph.c | 39 ++++++++++++-------------------------
>  1 file changed, 12 insertions(+), 27 deletions(-)

Looks ok.

I'm also wondering whether we could/should now remove all
ff_default_query_formats() calls from the filters and make that function
filtergraph-only.

-- 
Anton Khirnov
_______________________________________________
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] 37+ messages in thread

* Re: [FFmpeg-devel] [PATCH 03/25] avfilter: add negotiation API for color space/range
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 03/25] avfilter: add negotiation API for color space/range Niklas Haas
@ 2023-12-06 15:03   ` Anton Khirnov
  0 siblings, 0 replies; 37+ messages in thread
From: Anton Khirnov @ 2023-12-06 15:03 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Niklas Haas

Quoting Niklas Haas (2023-11-09 13:19:35)
> diff --git a/doc/APIchanges b/doc/APIchanges
> index 12383a28d3..ce3f90a674 100644
> --- a/doc/APIchanges
> +++ b/doc/APIchanges
> @@ -2,6 +2,14 @@ The last version increases of all libraries were on 2023-02-09
>  
>  API changes, most recent first:
>  
> +2023-11-xx - xxxxxxxxxx - lavf 58.14.100 - avfilter.h formats.h
> +  Add AVFilterFormatsConfig.color_spaces, AVFilterFormatsConfig.color_ranges,
> +  AVFilterLink.colorspace, AVFilterLink.color_range, ff_all_color_spaces,
> +  ff_all_color_ranges, ff_set_common_color_spaces, ff_set_common_color_ranges,
> +  ff_set_common_color_spaces_from_list, ff_set_common_color_ranges_from_list,
> +  ff_set_common_all_color_spaces, ff_set_common_all_color_ranges,
> +  ff_formats_check_color_spaces, ff_formats_check_color_ranges.

ff* are private and so shouldn't be mentioned in APIchanges

AVFilterFormatsConfig lives in a public header, but seems not to be
usable by API users.

> +
>  2023-11-08 - xxxxxxxxxx - lavu 58.32.100 - channel_layout.h
>    Add AV_CH_LAYOUT_7POINT2POINT3 and AV_CHANNEL_LAYOUT_7POINT2POINT3.
>    Add AV_CH_LAYOUT_9POINT1POINT4_BACK and AV_CHANNEL_LAYOUT_9POINT1POINT4_BACK.
> diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
> index ab7782862a..77bfec00c5 100644
> --- a/libavfilter/avfilter.c
> +++ b/libavfilter/avfilter.c
> @@ -185,6 +185,7 @@ 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;
>      ff_framequeue_init(&link->fifo, &src->graph->internal->frame_queues);
>  
>      return 0;
> @@ -286,6 +287,12 @@ int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt,
>      if (link->outcfg.formats)
>          ff_formats_changeref(&link->outcfg.formats,
>                               &filt->outputs[filt_dstpad_idx]->outcfg.formats);
> +    if (link->outcfg.color_spaces)
> +        ff_formats_changeref(&link->outcfg.color_spaces,
> +                             &filt->outputs[filt_dstpad_idx]->outcfg.color_spaces);
> +    if (link->outcfg.color_ranges)
> +        ff_formats_changeref(&link->outcfg.color_ranges,
> +                             &filt->outputs[filt_dstpad_idx]->outcfg.color_ranges);
>      if (link->outcfg.samplerates)
>          ff_formats_changeref(&link->outcfg.samplerates,
>                               &filt->outputs[filt_dstpad_idx]->outcfg.samplerates);
> @@ -730,6 +737,10 @@ static void free_link(AVFilterLink *link)
>  
>      ff_formats_unref(&link->incfg.formats);
>      ff_formats_unref(&link->outcfg.formats);
> +    ff_formats_unref(&link->incfg.color_spaces);
> +    ff_formats_unref(&link->outcfg.color_spaces);
> +    ff_formats_unref(&link->incfg.color_ranges);
> +    ff_formats_unref(&link->outcfg.color_ranges);
>      ff_formats_unref(&link->incfg.samplerates);
>      ff_formats_unref(&link->outcfg.samplerates);
>      ff_channel_layouts_unref(&link->incfg.channel_layouts);
> @@ -987,9 +998,11 @@ int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
>              strcmp(link->dst->filter->name, "idet") &&
>              strcmp(link->dst->filter->name, "null") &&
>              strcmp(link->dst->filter->name, "scale")) {
> -            av_assert1(frame->format                 == link->format);
> -            av_assert1(frame->width               == link->w);
> -            av_assert1(frame->height               == link->h);
> +            av_assert1(frame->format        == link->format);
> +            av_assert1(frame->width         == link->w);
> +            av_assert1(frame->height        == link->h);
> +            av_assert1(frame->colorspace    == link->color_space);
                                                             ^
Should not be there.

Also, these fail a LOT with this patch. Most of them seem fixed by later
patches, so it's probably better to move them to the end of the set?

> @@ -583,6 +602,29 @@ static enum AVSampleFormat find_best_sample_fmt_of_2(enum AVSampleFormat dst_fmt
>      return score1 < score2 ? dst_fmt1 : dst_fmt2;
>  }
>  
> +int ff_fmt_is_regular_yuv(enum AVPixelFormat fmt)
> +{
> +    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(fmt);
> +    if (!desc)
> +        return 0;
> +    if (desc->nb_components < 3)
> +        return 0; /* Grayscale is explicitly full-range in swscale */
> +    if (desc->flags & (AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_PAL |
> +                       AV_PIX_FMT_FLAG_XYZ | AV_PIX_FMT_FLAG_FLOAT))

Should this include AV_PIX_FMT_FLAG_HWACCEL too?

> +        return 0;
> +
> +    switch (fmt) {
> +    case AV_PIX_FMT_YUVJ420P:
> +    case AV_PIX_FMT_YUVJ422P:
> +    case AV_PIX_FMT_YUVJ444P:
> +    case AV_PIX_FMT_YUVJ440P:
> +    case AV_PIX_FMT_YUVJ411P:
> +        return 0;
> +    default:
> +        return 1;
> +    }
> +}
> +
>  static int pick_format(AVFilterLink *link, AVFilterLink *ref)
>  {
>      if (!link || !link->incfg.formats)
> @@ -603,6 +645,7 @@ static int pick_format(AVFilterLink *link, AVFilterLink *ref)
>                     av_get_pix_fmt_name(ref->format), has_alpha);
>              link->incfg.formats->formats[0] = best;
>          }
> +

unrelated

-- 
Anton Khirnov
_______________________________________________
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] 37+ messages in thread

* Re: [FFmpeg-devel] [PATCH 05/25] avfilter/buffersrc: add color_space/range parameters
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 05/25] avfilter/buffersrc: add color_space/range parameters Niklas Haas
@ 2023-12-06 15:10   ` Anton Khirnov
  0 siblings, 0 replies; 37+ messages in thread
From: Anton Khirnov @ 2023-12-06 15:10 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Niklas Haas

Quoting Niklas Haas (2023-11-09 13:19:37)
> @@ -328,6 +341,30 @@ static const AVOption buffer_options[] = {
>      { "pixel_aspect",  "sample aspect ratio",    OFFSET(pixel_aspect),     AV_OPT_TYPE_RATIONAL, { .dbl = 0 }, 0, DBL_MAX, V },
>      { "time_base",     NULL,                     OFFSET(time_base),        AV_OPT_TYPE_RATIONAL, { .dbl = 0 }, 0, DBL_MAX, V },
>      { "frame_rate",    NULL,                     OFFSET(frame_rate),       AV_OPT_TYPE_RATIONAL, { .dbl = 0 }, 0, DBL_MAX, V },
> +    { "colorspace", "select colorspace", OFFSET(color_space), AV_OPT_TYPE_INT, {.i64=AVCOL_SPC_UNSPECIFIED}, 0, AVCOL_SPC_NB-1, V, "colorspace"},
> +    {   "gbr",         NULL,  0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_RGB},               INT_MIN, INT_MAX, V, "colorspace"},
            ^^^
        is that intentional?

> @@ -432,6 +471,15 @@ static int query_formats(AVFilterContext *ctx)
>          if ((ret = ff_add_format         (&formats, c->pix_fmt)) < 0 ||
>              (ret = ff_set_common_formats (ctx     , formats   )) < 0)
>              return ret;
> +        /* force specific colorspace/range downstream only for ordinary YUV */
> +        if (ff_fmt_is_regular_yuv(c->pix_fmt)) {

What will this do when the colorspace is not set, as it will not be with
existing callers.

> diff --git a/libavfilter/buffersrc.h b/libavfilter/buffersrc.h
> index 3b248b37cd..4357a7bbfb 100644
> --- a/libavfilter/buffersrc.h
> +++ b/libavfilter/buffersrc.h
> @@ -105,6 +105,12 @@ typedef struct AVBufferSrcParameters {
>       */
>      AVBufferRef *hw_frames_ctx;
>  
> +    /**
> +     * Video only, the YUV colorspace and range
> +     */
> +    enum AVColorSpace color_space;
> +    enum AVColorRange color_range;

This has to go at the end of the struct, otherwise you're breaking ABI.

-- 
Anton Khirnov
_______________________________________________
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] 37+ messages in thread

* Re: [FFmpeg-devel] [PATCH 06/25] fftools/ffmpeg_filter: configure buffersrc with csp/range
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 06/25] fftools/ffmpeg_filter: configure buffersrc with csp/range Niklas Haas
@ 2023-12-06 15:13   ` Anton Khirnov
  0 siblings, 0 replies; 37+ messages in thread
From: Anton Khirnov @ 2023-12-06 15:13 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Niklas Haas

Quoting Niklas Haas (2023-11-09 13:19:38)
> From: Niklas Haas <git@haasn.dev>
> 
> Propagates input metadata to the input filter graph.
> ---
>  fftools/ffmpeg_filter.c | 24 +++++++++++++++++++++---
>  1 file changed, 21 insertions(+), 3 deletions(-)

Looks ok

-- 
Anton Khirnov
_______________________________________________
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] 37+ messages in thread

* Re: [FFmpeg-devel] [PATCH 07/25] vf_scale: use colorspace negotiation API
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 07/25] vf_scale: use colorspace negotiation API Niklas Haas
@ 2023-12-07 16:02   ` Anton Khirnov
  0 siblings, 0 replies; 37+ messages in thread
From: Anton Khirnov @ 2023-12-07 16:02 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Niklas Haas

Quoting Niklas Haas (2023-11-09 13:19:39)
> From: Niklas Haas <git@haasn.dev>
> 
> This filter will always accept any input format, even if the user sets
> a specific in_range/in_color_matrix. This is to preserve status quo with
> current behavior, where passing a specific in_color_matrix merely
> overrides the incoming frames' attributes. (Use `vf_format` to force
> a specific input range)
> 
> Because changing colorspace and color_range now requires reconfiguring
> the link, we can lift sws_setColorspaceDetails out of scale_frame and
> into config_props. (This will also get re-called if the input frame
> properties change)
> ---
>  libavfilter/vf_scale.c | 188 ++++++++++++++++++++++-------------------
>  1 file changed, 103 insertions(+), 85 deletions(-)

Can't say I understand all the code in detail, but looks generally
reasonable.

-- 
Anton Khirnov
_______________________________________________
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] 37+ messages in thread

* Re: [FFmpeg-devel] [PATCH 08/25] avfilter/vf_scale: remove YCgCo check
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 08/25] avfilter/vf_scale: remove YCgCo check Niklas Haas
@ 2023-12-07 16:04   ` Anton Khirnov
  0 siblings, 0 replies; 37+ messages in thread
From: Anton Khirnov @ 2023-12-07 16:04 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Niklas Haas

Quoting Niklas Haas (2023-11-09 13:19:40)
> From: Niklas Haas <git@haasn.dev>
> 
> This is never avertised as supported to upstream filters.

So what happens when such a frame is sent to lavfi?

-- 
Anton Khirnov
_______________________________________________
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] 37+ messages in thread

* Re: [FFmpeg-devel] [PATCH 13/25] avfilter/buffersink: add color space/range accessors
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 13/25] avfilter/buffersink: add color space/range accessors Niklas Haas
@ 2023-12-12 13:08   ` Anton Khirnov
  0 siblings, 0 replies; 37+ messages in thread
From: Anton Khirnov @ 2023-12-12 13:08 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Niklas Haas

Quoting Niklas Haas (2023-11-09 13:19:45)
> From: Niklas Haas <git@haasn.dev>
> 
> Needed for fftools.
> ---
>  doc/APIchanges           | 3 +++
>  libavfilter/buffersink.c | 2 ++
>  libavfilter/buffersink.h | 2 ++
>  libavfilter/version.h    | 2 +-
>  4 files changed, 8 insertions(+), 1 deletion(-)

Looks trivial enough.

-- 
Anton Khirnov
_______________________________________________
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] 37+ messages in thread

* Re: [FFmpeg-devel] [PATCH 14/25] avfilter/vf_format: re-use AVFilterList for pix_fmt parsing
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 14/25] avfilter/vf_format: re-use AVFilterList for pix_fmt parsing Niklas Haas
@ 2023-12-13  8:48   ` Anton Khirnov
  0 siblings, 0 replies; 37+ messages in thread
From: Anton Khirnov @ 2023-12-13  8:48 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Niklas Haas

Quoting Niklas Haas (2023-11-09 13:19:46)
>Subject: avfilter/vf_format: re-use AVFilterList for pix_fmt parsing
                                     ^^^^^^^^^^^^
You mean AVFilterFormats

> From: Niklas Haas <git@haasn.dev>
> 
> Rewrite the format parsing code to make it more easily generalizable. In
> particular, `invert_formats` does not depend on the type of format list
> passed to it, which allows me to re-use this helper in an upcoming
> commit.
> 
> Slightly shortens the code, at the sole cost of doing several malloc
> (ff_add_format) instead of a single malloc.
> ---
>  libavfilter/vf_format.c | 103 +++++++++++++++++-----------------------
>  1 file changed, 43 insertions(+), 60 deletions(-)
> 
> diff --git a/libavfilter/vf_format.c b/libavfilter/vf_format.c
> index 1189bd61c2..b137e3075e 100644
> --- a/libavfilter/vf_format.c
> +++ b/libavfilter/vf_format.c
> @@ -41,25 +41,48 @@ typedef struct FormatContext {
>      const AVClass *class;
>      char *pix_fmts;
>  
> -    /**
> -     * pix_fmts parsed into AVPixelFormats and terminated with
> -     * AV_PIX_FMT_NONE
> -     */
> -    enum AVPixelFormat *formats;
> +    AVFilterFormats *formats; ///< parsed from `pix_fmts`
>  } FormatContext;
>  
>  static av_cold void uninit(AVFilterContext *ctx)
>  {
>      FormatContext *s = ctx->priv;
> -    av_freep(&s->formats);
> +    ff_formats_unref(&s->formats);
> +}
> +
> +static av_cold int invert_formats(AVFilterFormats **fmts,
> +                                   AVFilterFormats *allfmts)

This would look better with AVFilterFormats vertically aligned as well.

Looks ok otherwise, though I'm slightly surprised we don't seem to have
a function for "is format in list?".

-- 
Anton Khirnov
_______________________________________________
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] 37+ messages in thread

* Re: [FFmpeg-devel] [PATCH 15/25] avfilter/vf_format: add color_ranges/spaces
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 15/25] avfilter/vf_format: add color_ranges/spaces Niklas Haas
@ 2023-12-13 11:33   ` Anton Khirnov
  0 siblings, 0 replies; 37+ messages in thread
From: Anton Khirnov @ 2023-12-13 11:33 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Niklas Haas

Quoting Niklas Haas (2023-11-09 13:19:47)
> From: Niklas Haas <git@haasn.dev>
> 
> Needed for fftools/ffmpeg_filter to be able to force specific output
> formats via the filter chain.
> ---
>  doc/filters.texi        |  8 ++++++++
>  libavfilter/vf_format.c | 44 +++++++++++++++++++++++++++++++++++++----
>  2 files changed, 48 insertions(+), 4 deletions(-)
> 
> diff --git a/doc/filters.texi b/doc/filters.texi
> index 55a333680c..4599d575a6 100644
> --- a/doc/filters.texi
> +++ b/doc/filters.texi
> @@ -14241,6 +14241,14 @@ It accepts the following parameters:
>  A '|'-separated list of pixel format names, such as
>  "pix_fmts=yuv420p|monow|rgb24".
>  
> +@item color_spaces
> +A '|'-separated list of color space names, such as
> +"color_spaces=bt709|bt470bg|bt2020nc".
> +
> +@item color_ranges
> +A '|'-separated list of color rangee names, such as
                                      ^
extra e

> +"color_spaces=tv|pc".
> +
>  @end table
>  
>  @subsection Examples
> diff --git a/libavfilter/vf_format.c b/libavfilter/vf_format.c
> index b137e3075e..d1bb9daa97 100644
> --- a/libavfilter/vf_format.c
> +++ b/libavfilter/vf_format.c
> @@ -40,18 +40,24 @@
>  typedef struct FormatContext {
>      const AVClass *class;
>      char *pix_fmts;
> +    char *csps;
> +    char *ranges;
>  
>      AVFilterFormats *formats; ///< parsed from `pix_fmts`
> +    AVFilterFormats *color_spaces; ///< parsed from `csps`
> +    AVFilterFormats *color_ranges; ///< parsed from `ranges`
>  } FormatContext;
>  
>  static av_cold void uninit(AVFilterContext *ctx)
>  {
>      FormatContext *s = ctx->priv;
>      ff_formats_unref(&s->formats);
> +    ff_formats_unref(&s->color_spaces);
> +    ff_formats_unref(&s->color_ranges);
>  }
>  
>  static av_cold int invert_formats(AVFilterFormats **fmts,
> -                                   AVFilterFormats *allfmts)
> +                                  AVFilterFormats *allfmts)
>  {
>      if (!allfmts)
>          return AVERROR(ENOMEM);
> @@ -99,13 +105,35 @@ static av_cold int init(AVFilterContext *ctx)
>              return ret;
>      }
>  
> +    for (char *sep, *cur = s->csps; cur; cur = sep) {
> +        sep = strchr(cur, '|');
> +        if (sep && *sep)
> +            *sep++ = 0;
> +        if ((ret = av_color_space_from_name(cur)) < 0 ||
> +            (ret = ff_add_format(&s->color_spaces, ret)) < 0)

I find this style of assigning inside a condition far more error-prone
and harder to read. Especially when you have three of them in a single
if() below.

Otherwise looks ok.

-- 
Anton Khirnov
_______________________________________________
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] 37+ messages in thread

* Re: [FFmpeg-devel] [PATCH 16/25] avfilter/vf_format: allow empty pix_fmts list
  2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 16/25] avfilter/vf_format: allow empty pix_fmts list Niklas Haas
@ 2023-12-13 11:38   ` Anton Khirnov
  0 siblings, 0 replies; 37+ messages in thread
From: Anton Khirnov @ 2023-12-13 11:38 UTC (permalink / raw)
  To: FFmpeg development discussions and patches; +Cc: Niklas Haas

Quoting Niklas Haas (2023-11-09 13:19:48)
> From: Niklas Haas <git@haasn.dev>
> 
> Which will impose no restriction. This makes sense when using e.g.
> `color_ranges=pc` to limit the color range, without also limiting the
> pixel format.
> ---
>  libavfilter/vf_format.c | 9 ++-------
>  1 file changed, 2 insertions(+), 7 deletions(-)

Looks ok

-- 
Anton Khirnov
_______________________________________________
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] 37+ messages in thread

end of thread, other threads:[~2023-12-13 11:39 UTC | newest]

Thread overview: 37+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-11-09 12:19 [FFmpeg-devel] [RFC PATCH 00/25] YUVJ removal + filter negotiation Niklas Haas
2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 01/25] avfilter/formats: document ff_default_query_formats Niklas Haas
2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 02/25] avfilter: always call ff_default_query_formats Niklas Haas
2023-11-27 16:56   ` Anton Khirnov
2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 03/25] avfilter: add negotiation API for color space/range Niklas Haas
2023-12-06 15:03   ` Anton Khirnov
2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 04/25] fftools/ffmpeg_filter: don't clear buffersrc params Niklas Haas
2023-11-27 16:05   ` Anton Khirnov
2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 05/25] avfilter/buffersrc: add color_space/range parameters Niklas Haas
2023-12-06 15:10   ` Anton Khirnov
2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 06/25] fftools/ffmpeg_filter: configure buffersrc with csp/range Niklas Haas
2023-12-06 15:13   ` Anton Khirnov
2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 07/25] vf_scale: use colorspace negotiation API Niklas Haas
2023-12-07 16:02   ` Anton Khirnov
2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 08/25] avfilter/vf_scale: remove YCgCo check Niklas Haas
2023-12-07 16:04   ` Anton Khirnov
2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 09/25] avfilter/vf_zscale: remove unused variables Niklas Haas
2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 10/25] avfilter/vf_zscale: switch to colorspace negotiation API Niklas Haas
2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 11/25] avfilter/vf_libplacebo: don't force dovi frames to bt.2020-ncl Niklas Haas
2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 12/25] avfilter/vf_libplacebo: switch to colorspace negotiation API Niklas Haas
2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 13/25] avfilter/buffersink: add color space/range accessors Niklas Haas
2023-12-12 13:08   ` Anton Khirnov
2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 14/25] avfilter/vf_format: re-use AVFilterList for pix_fmt parsing Niklas Haas
2023-12-13  8:48   ` Anton Khirnov
2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 15/25] avfilter/vf_format: add color_ranges/spaces Niklas Haas
2023-12-13 11:33   ` Anton Khirnov
2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 16/25] avfilter/vf_format: allow empty pix_fmts list Niklas Haas
2023-12-13 11:38   ` Anton Khirnov
2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 17/25] avcodec: add YUV color space metadata to AVCodec Niklas Haas
2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 18/25] lavc: set color_ranges for YUVJ-only codecs Niklas Haas
2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 19/25] (WIP) lavc: set color_ranges for MPEG-only codecs Niklas Haas
2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 20/25] fftools/ffmpeg_filter: simplify choose_pix_fmts Niklas Haas
2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 21/25] fftools/ffmpeg_filter: propagate codec yuv metadata to filters Niklas Haas
2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 22/25] tests/fate: force MPEG range for rawvideo tests Niklas Haas
2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 23/25] lavfi/lavu/lavc: remove YUVJ pixel formats Niklas Haas
2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 24/25] avutil/pixdesc: remove old yuvj pixel format check Niklas Haas
2023-11-09 12:19 ` [FFmpeg-devel] [PATCH 25/25] avcodec/encode: enforce AVCodec capabilities at encode time Niklas Haas

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