diff --git a/LICENSE.md b/LICENSE.md
index 613070e1b6..7e5ad9f7e4 100644
--- a/LICENSE.md
+++ b/LICENSE.md
@@ -39,7 +39,6 @@ Specifically, the GPL parts of FFmpeg are:
     - `vf_hqdn3d.c`
     - `vf_kerndeint.c`
     - `vf_lensfun.c` (GPL version 3 or later)
-    - `vf_mcdeint.c`
     - `vf_mpdecimate.c`
     - `vf_nnedi.c`
     - `vf_owdenoise.c`
@@ -56,7 +55,6 @@ Specifically, the GPL parts of FFmpeg are:
     - `vf_stereo3d.c`
     - `vf_super2xsai.c`
     - `vf_tinterlace.c`
-    - `vf_uspp.c`
     - `vf_vaguedenoiser.c`
     - `vsrc_mptestsrc.c`
 
diff --git a/configure b/configure
index 03d3c429a5..6bc7a4382f 100755
--- a/configure
+++ b/configure
@@ -3686,7 +3686,6 @@ ladspa_filter_deps="ladspa libdl"
 lensfun_filter_deps="liblensfun version3"
 libplacebo_filter_deps="libplacebo vulkan"
 lv2_filter_deps="lv2"
-mcdeint_filter_deps="avcodec gpl"
 metadata_filter_deps="avformat"
 movie_filter_deps="avcodec avformat"
 mpdecimate_filter_deps="gpl"
@@ -3752,7 +3751,6 @@ transpose_opencl_filter_deps="opencl"
 transpose_vaapi_filter_deps="vaapi VAProcPipelineCaps_rotation_flags"
 transpose_vulkan_filter_deps="vulkan spirv_compiler"
 unsharp_opencl_filter_deps="opencl"
-uspp_filter_deps="gpl avcodec"
 vaguedenoiser_filter_deps="gpl"
 vflip_vulkan_filter_deps="vulkan spirv_compiler"
 vidstabdetect_filter_deps="libvidstab"
@@ -7355,12 +7353,6 @@ esac
 
 enable frame_thread_encoder
 
-# these filters depend on removed avcodec APIs
-# they are kept disabled for now, but will be removed if
-# nobody updates and re-enables them
-disable mcdeint_filter
-disable uspp_filter
-
 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
 
 check_deps $CONFIG_LIST       \
@@ -7470,7 +7462,6 @@ enabled cover_rect_filter   && prepend avfilter_deps "avformat avcodec"
 enabled ebur128_filter && enabled swresample && prepend avfilter_deps "swresample"
 enabled elbg_filter         && prepend avfilter_deps "avcodec"
 enabled find_rect_filter    && prepend avfilter_deps "avformat avcodec"
-enabled mcdeint_filter      && prepend avfilter_deps "avcodec"
 enabled movie_filter    && prepend avfilter_deps "avformat avcodec"
 enabled pan_filter          && prepend avfilter_deps "swresample"
 enabled pp_filter           && prepend avfilter_deps "postproc"
@@ -7484,7 +7475,6 @@ enabled smartblur_filter    && prepend avfilter_deps "swscale"
 enabled spp_filter          && prepend avfilter_deps "avcodec"
 enabled sr_filter           && prepend avfilter_deps "avformat swscale"
 enabled subtitles_filter    && prepend avfilter_deps "avformat avcodec"
-enabled uspp_filter         && prepend avfilter_deps "avcodec"
 enabled zoompan_filter      && prepend avfilter_deps "swscale"
 
 enabled lavfi_indev         && prepend avdevice_deps "avfilter"
diff --git a/doc/filters.texi b/doc/filters.texi
index 7a7b2ba4e7..e8826ba2a3 100644
--- a/doc/filters.texi
+++ b/doc/filters.texi
@@ -16984,52 +16984,6 @@ Typically useful for scene changes when used in combination with @code{tblend} f
 
 This filter supports the all above options as @ref{commands}.
 
-@section mcdeint
-
-Apply motion-compensation deinterlacing.
-
-It needs one field per frame as input and must thus be used together
-with yadif=1/3 or equivalent.
-
-This filter is only available in ffmpeg version 4.4 or earlier.
-
-This filter accepts the following options:
-@table @option
-@item mode
-Set the deinterlacing mode.
-
-It accepts one of the following values:
-@table @samp
-@item fast
-@item medium
-@item slow
-use iterative motion estimation
-@item extra_slow
-like @samp{slow}, but use multiple reference frames.
-@end table
-Default value is @samp{fast}.
-
-@item parity
-Set the picture field parity assumed for the input video. It must be
-one of the following values:
-
-@table @samp
-@item 0, tff
-assume top field first
-@item 1, bff
-assume bottom field first
-@end table
-
-Default value is @samp{bff}.
-
-@item qp
-Set per-block quantization parameter (QP) used by the internal
-encoder.
-
-Higher values should result in a smoother motion vector field but less
-optimal individual vectors. Default value is 1.
-@end table
-
 @section median
 
 Pick median pixel from certain rectangle defined by radius.
@@ -23342,33 +23296,6 @@ ffmpeg -r 1 -i image.jpg -vf untile=1x25 movie.mkv
 @end example
 @end itemize
 
-@section uspp
-
-Apply ultra slow/simple postprocessing filter that compresses and decompresses
-the image at several (or - in the case of @option{quality} level @code{8} - all)
-shifts and average the results.
-
-The way this differs from the behavior of spp is that uspp actually encodes &
-decodes each case with libavcodec Snow, whereas spp uses a simplified intra only 8x8
-DCT similar to MJPEG.
-
-This filter is only available in ffmpeg version 4.4 or earlier.
-
-The filter accepts the following options:
-
-@table @option
-@item quality
-Set quality. This option defines the number of levels for averaging. It accepts
-an integer in the range 0-8. If set to @code{0}, the filter will have no
-effect. A value of @code{8} means the higher quality. For each increment of
-that value the speed drops by a factor of approximately 2.  Default value is
-@code{3}.
-
-@item qp
-Force a constant quantization parameter. If not set, the filter will use the QP
-from the video stream (if available).
-@end table
-
 @section v360
 
 Convert 360 videos between various formats.
diff --git a/libavfilter/Makefile b/libavfilter/Makefile
index b3d3d981dd..8b0b908617 100644
--- a/libavfilter/Makefile
+++ b/libavfilter/Makefile
@@ -370,7 +370,6 @@ OBJS-$(CONFIG_MASKEDMERGE_FILTER)            += vf_maskedmerge.o framesync.o
 OBJS-$(CONFIG_MASKEDMIN_FILTER)              += vf_maskedminmax.o framesync.o
 OBJS-$(CONFIG_MASKEDTHRESHOLD_FILTER)        += vf_maskedthreshold.o framesync.o
 OBJS-$(CONFIG_MASKFUN_FILTER)                += vf_maskfun.o
-OBJS-$(CONFIG_MCDEINT_FILTER)                += vf_mcdeint.o
 OBJS-$(CONFIG_MEDIAN_FILTER)                 += vf_median.o
 OBJS-$(CONFIG_MERGEPLANES_FILTER)            += vf_mergeplanes.o framesync.o
 OBJS-$(CONFIG_MESTIMATE_FILTER)              += vf_mestimate.o motion_estimation.o
@@ -522,7 +521,6 @@ OBJS-$(CONFIG_UNSHARP_FILTER)                += vf_unsharp.o
 OBJS-$(CONFIG_UNSHARP_OPENCL_FILTER)         += vf_unsharp_opencl.o opencl.o \
                                                 opencl/unsharp.o
 OBJS-$(CONFIG_UNTILE_FILTER)                 += vf_untile.o
-OBJS-$(CONFIG_USPP_FILTER)                   += vf_uspp.o qp_table.o
 OBJS-$(CONFIG_V360_FILTER)                   += vf_v360.o
 OBJS-$(CONFIG_VAGUEDENOISER_FILTER)          += vf_vaguedenoiser.o
 OBJS-$(CONFIG_VARBLUR_FILTER)                += vf_varblur.o framesync.o
diff --git a/libavfilter/allfilters.c b/libavfilter/allfilters.c
index d7db46c2af..f4b36e88d6 100644
--- a/libavfilter/allfilters.c
+++ b/libavfilter/allfilters.c
@@ -348,7 +348,6 @@ extern const AVFilter ff_vf_maskedmerge;
 extern const AVFilter ff_vf_maskedmin;
 extern const AVFilter ff_vf_maskedthreshold;
 extern const AVFilter ff_vf_maskfun;
-extern const AVFilter ff_vf_mcdeint;
 extern const AVFilter ff_vf_median;
 extern const AVFilter ff_vf_mergeplanes;
 extern const AVFilter ff_vf_mestimate;
@@ -491,7 +490,6 @@ extern const AVFilter ff_vf_unpremultiply;
 extern const AVFilter ff_vf_unsharp;
 extern const AVFilter ff_vf_unsharp_opencl;
 extern const AVFilter ff_vf_untile;
-extern const AVFilter ff_vf_uspp;
 extern const AVFilter ff_vf_v360;
 extern const AVFilter ff_vf_vaguedenoiser;
 extern const AVFilter ff_vf_varblur;
diff --git a/libavfilter/vf_mcdeint.c b/libavfilter/vf_mcdeint.c
deleted file mode 100644
index e747521c0a..0000000000
--- a/libavfilter/vf_mcdeint.c
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
- * Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
- *
- * This file is part of FFmpeg.
- *
- * FFmpeg is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * FFmpeg is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with FFmpeg; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-/**
- * @file
- * Motion Compensation Deinterlacer
- * Ported from MPlayer libmpcodecs/vf_mcdeint.c.
- *
- * Known Issues:
- *
- * The motion estimation is somewhat at the mercy of the input, if the
- * input frames are created purely based on spatial interpolation then
- * for example a thin black line or another random and not
- * interpolateable pattern will cause problems.
- * Note: completely ignoring the "unavailable" lines during motion
- * estimation did not look any better, so the most obvious solution
- * would be to improve tfields or penalize problematic motion vectors.
- *
- * If non iterative ME is used then snow currently ignores the OBMC
- * window and as a result sometimes creates artifacts.
- *
- * Only past frames are used, we should ideally use future frames too,
- * something like filtering the whole movie in forward and then
- * backward direction seems like an interesting idea but the current
- * filter framework is FAR from supporting such things.
- *
- * Combining the motion compensated image with the input image also is
- * not as trivial as it seems, simple blindly taking even lines from
- * one and odd ones from the other does not work at all as ME/MC
- * sometimes has nothing in the previous frames which matches the
- * current. The current algorithm has been found by trial and error
- * and almost certainly can be improved...
- */
-
-#include "libavutil/opt.h"
-#include "libavutil/pixdesc.h"
-#include "libavcodec/avcodec.h"
-#include "avfilter.h"
-#include "formats.h"
-#include "internal.h"
-
-enum MCDeintMode {
-    MODE_FAST = 0,
-    MODE_MEDIUM,
-    MODE_SLOW,
-    MODE_EXTRA_SLOW,
-    MODE_NB,
-};
-
-enum MCDeintParity {
-    PARITY_TFF  =  0, ///< top field first
-    PARITY_BFF  =  1, ///< bottom field first
-};
-
-typedef struct MCDeintContext {
-    const AVClass *class;
-    int mode;           ///< MCDeintMode
-    int parity;         ///< MCDeintParity
-    int qp;
-    AVPacket *pkt;
-    AVCodecContext *enc_ctx;
-} MCDeintContext;
-
-#define OFFSET(x) offsetof(MCDeintContext, x)
-#define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
-#define CONST(name, help, val, unit) { name, help, 0, AV_OPT_TYPE_CONST, {.i64=val}, INT_MIN, INT_MAX, FLAGS, unit }
-
-static const AVOption mcdeint_options[] = {
-    { "mode", "set mode", OFFSET(mode), AV_OPT_TYPE_INT, {.i64=MODE_FAST}, 0, MODE_NB-1, FLAGS, .unit="mode" },
-    CONST("fast",       NULL, MODE_FAST,       "mode"),
-    CONST("medium",     NULL, MODE_MEDIUM,     "mode"),
-    CONST("slow",       NULL, MODE_SLOW,       "mode"),
-    CONST("extra_slow", NULL, MODE_EXTRA_SLOW, "mode"),
-
-    { "parity", "set the assumed picture field parity", OFFSET(parity), AV_OPT_TYPE_INT, {.i64=PARITY_BFF}, -1, 1, FLAGS, "parity" },
-    CONST("tff", "assume top field first",    PARITY_TFF, "parity"),
-    CONST("bff", "assume bottom field first", PARITY_BFF, "parity"),
-
-    { "qp", "set qp", OFFSET(qp), AV_OPT_TYPE_INT, {.i64=1}, INT_MIN, INT_MAX, FLAGS },
-    { NULL }
-};
-
-AVFILTER_DEFINE_CLASS(mcdeint);
-
-static int config_props(AVFilterLink *inlink)
-{
-    AVFilterContext *ctx = inlink->dst;
-    MCDeintContext *mcdeint = ctx->priv;
-    const AVCodec *enc;
-    AVCodecContext *enc_ctx;
-    AVDictionary *opts = NULL;
-    int ret;
-
-    if (!(enc = avcodec_find_encoder(AV_CODEC_ID_SNOW))) {
-        av_log(ctx, AV_LOG_ERROR, "Snow encoder is not enabled in libavcodec\n");
-        return AVERROR(EINVAL);
-    }
-
-    mcdeint->pkt = av_packet_alloc();
-    if (!mcdeint->pkt)
-        return AVERROR(ENOMEM);
-    mcdeint->enc_ctx = avcodec_alloc_context3(enc);
-    if (!mcdeint->enc_ctx)
-        return AVERROR(ENOMEM);
-    enc_ctx = mcdeint->enc_ctx;
-    enc_ctx->width  = inlink->w;
-    enc_ctx->height = inlink->h;
-    enc_ctx->time_base = (AVRational){1,25};  // meaningless
-    enc_ctx->gop_size = INT_MAX;
-    enc_ctx->max_b_frames = 0;
-    enc_ctx->pix_fmt = AV_PIX_FMT_YUV420P;
-    enc_ctx->flags = AV_CODEC_FLAG_QSCALE | AV_CODEC_FLAG_LOW_DELAY;
-    enc_ctx->strict_std_compliance = FF_COMPLIANCE_EXPERIMENTAL;
-    enc_ctx->global_quality = 1;
-    enc_ctx->me_cmp = enc_ctx->me_sub_cmp = FF_CMP_SAD;
-    enc_ctx->mb_cmp = FF_CMP_SSE;
-    av_dict_set(&opts, "memc_only", "1", 0);
-    av_dict_set(&opts, "no_bitstream", "1", 0);
-
-    switch (mcdeint->mode) {
-    case MODE_EXTRA_SLOW:
-        enc_ctx->refs = 3;
-    case MODE_SLOW:
-        av_dict_set(&opts, "motion_est", "iter", 0);
-    case MODE_MEDIUM:
-        enc_ctx->flags |= AV_CODEC_FLAG_4MV;
-        enc_ctx->dia_size = 2;
-    case MODE_FAST:
-        enc_ctx->flags |= AV_CODEC_FLAG_QPEL;
-    }
-
-    ret = avcodec_open2(enc_ctx, enc, &opts);
-    av_dict_free(&opts);
-    if (ret < 0)
-        return ret;
-
-    return 0;
-}
-
-static av_cold void uninit(AVFilterContext *ctx)
-{
-    MCDeintContext *mcdeint = ctx->priv;
-
-    av_packet_free(&mcdeint->pkt);
-    avcodec_free_context(&mcdeint->enc_ctx);
-}
-
-static int filter_frame(AVFilterLink *inlink, AVFrame *inpic)
-{
-    MCDeintContext *mcdeint = inlink->dst->priv;
-    AVFilterLink *outlink = inlink->dst->outputs[0];
-    AVFrame *outpic, *frame_dec;
-    AVPacket *pkt = mcdeint->pkt;
-    int x, y, i, ret, got_frame = 0;
-
-    outpic = ff_get_video_buffer(outlink, outlink->w, outlink->h);
-    if (!outpic) {
-        av_frame_free(&inpic);
-        return AVERROR(ENOMEM);
-    }
-    av_frame_copy_props(outpic, inpic);
-    inpic->quality = mcdeint->qp * FF_QP2LAMBDA;
-
-    ret = avcodec_encode_video2(mcdeint->enc_ctx, pkt, inpic, &got_frame);
-    if (ret < 0)
-        goto end;
-
-    frame_dec = mcdeint->enc_ctx->coded_frame;
-
-    for (i = 0; i < 3; i++) {
-        int is_chroma = !!i;
-        int w = AV_CEIL_RSHIFT(inlink->w, is_chroma);
-        int h = AV_CEIL_RSHIFT(inlink->h, is_chroma);
-        int fils = frame_dec->linesize[i];
-        int srcs = inpic    ->linesize[i];
-        int dsts = outpic   ->linesize[i];
-
-        for (y = 0; y < h; y++) {
-            if ((y ^ mcdeint->parity) & 1) {
-                for (x = 0; x < w; x++) {
-                    uint8_t *filp = &frame_dec->data[i][x + y*fils];
-                    uint8_t *srcp = &inpic    ->data[i][x + y*srcs];
-                    uint8_t *dstp = &outpic   ->data[i][x + y*dsts];
-
-                    if (y > 0 && y < h-1){
-                        int is_edge = x < 3 || x > w-4;
-                        int diff0 = filp[-fils] - srcp[-srcs];
-                        int diff1 = filp[+fils] - srcp[+srcs];
-                        int temp = filp[0];
-
-#define DELTA(j) av_clip(j, -x, w-1-x)
-
-#define GET_SCORE_EDGE(j)\
-   FFABS(srcp[-srcs+DELTA(-1+(j))] - srcp[+srcs+DELTA(-1-(j))])+\
-   FFABS(srcp[-srcs+DELTA(j)     ] - srcp[+srcs+DELTA(  -(j))])+\
-   FFABS(srcp[-srcs+DELTA(1+(j)) ] - srcp[+srcs+DELTA( 1-(j))])
-
-#define GET_SCORE(j)\
-   FFABS(srcp[-srcs-1+(j)] - srcp[+srcs-1-(j)])+\
-   FFABS(srcp[-srcs  +(j)] - srcp[+srcs  -(j)])+\
-   FFABS(srcp[-srcs+1+(j)] - srcp[+srcs+1-(j)])
-
-#define CHECK_EDGE(j)\
-    {   int score = GET_SCORE_EDGE(j);\
-        if (score < spatial_score){\
-            spatial_score = score;\
-            diff0 = filp[-fils+DELTA(j)]    - srcp[-srcs+DELTA(j)];\
-            diff1 = filp[+fils+DELTA(-(j))] - srcp[+srcs+DELTA(-(j))];\
-
-#define CHECK(j)\
-    {   int score = GET_SCORE(j);\
-        if (score < spatial_score){\
-            spatial_score= score;\
-            diff0 = filp[-fils+(j)] - srcp[-srcs+(j)];\
-            diff1 = filp[+fils-(j)] - srcp[+srcs-(j)];\
-
-                        if (is_edge) {
-                            int spatial_score = GET_SCORE_EDGE(0) - 1;
-                            CHECK_EDGE(-1) CHECK_EDGE(-2) }} }}
-                            CHECK_EDGE( 1) CHECK_EDGE( 2) }} }}
-                        } else {
-                            int spatial_score = GET_SCORE(0) - 1;
-                            CHECK(-1) CHECK(-2) }} }}
-                            CHECK( 1) CHECK( 2) }} }}
-                        }
-
-
-                        if (diff0 + diff1 > 0)
-                            temp -= (diff0 + diff1 - FFABS(FFABS(diff0) - FFABS(diff1)) / 2) / 2;
-                        else
-                            temp -= (diff0 + diff1 + FFABS(FFABS(diff0) - FFABS(diff1)) / 2) / 2;
-                        *filp = *dstp = temp > 255U ? ~(temp>>31) : temp;
-                    } else {
-                        *dstp = *filp;
-                    }
-                }
-            }
-        }
-
-        for (y = 0; y < h; y++) {
-            if (!((y ^ mcdeint->parity) & 1)) {
-                for (x = 0; x < w; x++) {
-                    frame_dec->data[i][x + y*fils] =
-                    outpic   ->data[i][x + y*dsts] = inpic->data[i][x + y*srcs];
-                }
-            }
-        }
-    }
-    mcdeint->parity ^= 1;
-
-end:
-    av_packet_unref(pkt);
-    av_frame_free(&inpic);
-    if (ret < 0) {
-        av_frame_free(&outpic);
-        return ret;
-    }
-    return ff_filter_frame(outlink, outpic);
-}
-
-static const AVFilterPad mcdeint_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .filter_frame = filter_frame,
-        .config_props = config_props,
-    },
-};
-
-static const AVFilterPad mcdeint_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
-const AVFilter ff_vf_mcdeint = {
-    .name          = "mcdeint",
-    .description   = NULL_IF_CONFIG_SMALL("Apply motion compensating deinterlacing."),
-    .priv_size     = sizeof(MCDeintContext),
-    .uninit        = uninit,
-    FILTER_INPUTS(mcdeint_inputs),
-    FILTER_OUTPUTS(mcdeint_outputs),
-    FILTER_SINGLE_PIXFMT(AV_PIX_FMT_YUV420P),
-    .priv_class    = &mcdeint_class,
-};
diff --git a/libavfilter/vf_uspp.c b/libavfilter/vf_uspp.c
deleted file mode 100644
index 051de00771..0000000000
--- a/libavfilter/vf_uspp.c
+++ /dev/null
@@ -1,498 +0,0 @@
-/*
- * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
- * Copyright (c) 2014 Arwa Arif <arwaarif1994@gmail.com>
- *
- * This file is part of FFmpeg.
- *
- * FFmpeg is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * FFmpeg is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with FFmpeg; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-/**
- * @file
- * Ultra Slow/Simple Post-processing filter.
- *
- * Originally written by Michael Niedermayer for the MPlayer project, and
- * ported by Arwa Arif for FFmpeg.
- */
-
-#include "libavutil/avassert.h"
-#include "libavutil/imgutils.h"
-#include "libavutil/mem_internal.h"
-#include "libavutil/opt.h"
-#include "libavutil/pixdesc.h"
-#include "libavutil/video_enc_params.h"
-#include "libavcodec/avcodec.h"
-#include "internal.h"
-#include "qp_table.h"
-#include "avfilter.h"
-
-#define MAX_LEVEL 8 /* quality levels */
-#define BLOCK 16
-
-typedef struct USPPContext {
-    const AVClass *av_class;
-    int log2_count;
-    int hsub, vsub;
-    int qp;
-    enum AVVideoEncParamsType qscale_type;
-    int temp_stride[3];
-    uint8_t *src[3];
-    uint16_t *temp[3];
-    int outbuf_size;
-    uint8_t *outbuf;
-    AVCodecContext *avctx_enc[BLOCK*BLOCK];
-    AVPacket *pkt;
-    AVFrame *frame;
-    AVFrame *frame_dec;
-    int8_t *non_b_qp_table;
-    int non_b_qp_stride;
-    int use_bframe_qp;
-} USPPContext;
-
-#define OFFSET(x) offsetof(USPPContext, x)
-#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
-static const AVOption uspp_options[] = {
-    { "quality",       "set quality",                          OFFSET(log2_count),    AV_OPT_TYPE_INT, {.i64 = 3}, 0, MAX_LEVEL, FLAGS },
-    { "qp",            "force a constant quantizer parameter", OFFSET(qp),            AV_OPT_TYPE_INT, {.i64 = 0}, 0, 63,        FLAGS },
-    { "use_bframe_qp", "use B-frames' QP",                     OFFSET(use_bframe_qp), AV_OPT_TYPE_BOOL,{.i64 = 0}, 0, 1,         FLAGS },
-    { NULL }
-};
-
-AVFILTER_DEFINE_CLASS(uspp);
-
-DECLARE_ALIGNED(8, static const uint8_t, dither)[8][8] = {
-    {  0*4,  48*4,  12*4,  60*4,   3*4,  51*4,  15*4,  63*4, },
-    { 32*4,  16*4,  44*4,  28*4,  35*4,  19*4,  47*4,  31*4, },
-    {  8*4,  56*4,   4*4,  52*4,  11*4,  59*4,   7*4,  55*4, },
-    { 40*4,  24*4,  36*4,  20*4,  43*4,  27*4,  39*4,  23*4, },
-    {  2*4,  50*4,  14*4,  62*4,   1*4,  49*4,  13*4,  61*4, },
-    { 34*4,  18*4,  46*4,  30*4,  33*4,  17*4,  45*4,  29*4, },
-    { 10*4,  58*4,   6*4,  54*4,   9*4,  57*4,   5*4,  53*4, },
-    { 42*4,  26*4,  38*4,  22*4,  41*4,  25*4,  37*4,  21*4, },
-};
-
-static const uint8_t offset[511][2] = {
-    { 0, 0},
-    { 0, 0}, { 8, 8},                                                              // quality 1
-    { 0, 0}, { 4, 4}, {12, 8}, { 8,12},                                            // quality 2
-    { 0, 0}, {10, 2}, { 4, 4}, {14, 6}, { 8, 8}, { 2,10}, {12,12}, { 6,14},        // quality 3
-
-    { 0, 0}, {10, 2}, { 4, 4}, {14, 6}, { 8, 8}, { 2,10}, {12,12}, { 6,14},
-    { 5, 1}, {15, 3}, { 9, 5}, { 3, 7}, {13, 9}, { 7,11}, { 1,13}, {11,15},        // quality 4
-
-    { 0, 0}, { 8, 0}, { 0, 8}, { 8, 8}, { 5, 1}, {13, 1}, { 5, 9}, {13, 9},
-    { 2, 2}, {10, 2}, { 2,10}, {10,10}, { 7, 3}, {15, 3}, { 7,11}, {15,11},
-    { 4, 4}, {12, 4}, { 4,12}, {12,12}, { 1, 5}, { 9, 5}, { 1,13}, { 9,13},
-    { 6, 6}, {14, 6}, { 6,14}, {14,14}, { 3, 7}, {11, 7}, { 3,15}, {11,15},        // quality 5
-
-    { 0, 0}, { 8, 0}, { 0, 8}, { 8, 8}, { 4, 0}, {12, 0}, { 4, 8}, {12, 8},
-    { 1, 1}, { 9, 1}, { 1, 9}, { 9, 9}, { 5, 1}, {13, 1}, { 5, 9}, {13, 9},
-    { 3, 2}, {11, 2}, { 3,10}, {11,10}, { 7, 2}, {15, 2}, { 7,10}, {15,10},
-    { 2, 3}, {10, 3}, { 2,11}, {10,11}, { 6, 3}, {14, 3}, { 6,11}, {14,11},
-    { 0, 4}, { 8, 4}, { 0,12}, { 8,12}, { 4, 4}, {12, 4}, { 4,12}, {12,12},
-    { 1, 5}, { 9, 5}, { 1,13}, { 9,13}, { 5, 5}, {13, 5}, { 5,13}, {13,13},
-    { 3, 6}, {11, 6}, { 3,14}, {11,14}, { 7, 6}, {15, 6}, { 7,14}, {15,14},
-    { 2, 7}, {10, 7}, { 2,15}, {10,15}, { 6, 7}, {14, 7}, { 6,15}, {14,15},        // quality 6
-
-    { 0, 0}, { 8, 0}, { 0, 8}, { 8, 8}, { 0, 2}, { 8, 2}, { 0,10}, { 8,10},
-    { 0, 4}, { 8, 4}, { 0,12}, { 8,12}, { 0, 6}, { 8, 6}, { 0,14}, { 8,14},
-    { 1, 1}, { 9, 1}, { 1, 9}, { 9, 9}, { 1, 3}, { 9, 3}, { 1,11}, { 9,11},
-    { 1, 5}, { 9, 5}, { 1,13}, { 9,13}, { 1, 7}, { 9, 7}, { 1,15}, { 9,15},
-    { 2, 0}, {10, 0}, { 2, 8}, {10, 8}, { 2, 2}, {10, 2}, { 2,10}, {10,10},
-    { 2, 4}, {10, 4}, { 2,12}, {10,12}, { 2, 6}, {10, 6}, { 2,14}, {10,14},
-    { 3, 1}, {11, 1}, { 3, 9}, {11, 9}, { 3, 3}, {11, 3}, { 3,11}, {11,11},
-    { 3, 5}, {11, 5}, { 3,13}, {11,13}, { 3, 7}, {11, 7}, { 3,15}, {11,15},
-    { 4, 0}, {12, 0}, { 4, 8}, {12, 8}, { 4, 2}, {12, 2}, { 4,10}, {12,10},
-    { 4, 4}, {12, 4}, { 4,12}, {12,12}, { 4, 6}, {12, 6}, { 4,14}, {12,14},
-    { 5, 1}, {13, 1}, { 5, 9}, {13, 9}, { 5, 3}, {13, 3}, { 5,11}, {13,11},
-    { 5, 5}, {13, 5}, { 5,13}, {13,13}, { 5, 7}, {13, 7}, { 5,15}, {13,15},
-    { 6, 0}, {14, 0}, { 6, 8}, {14, 8}, { 6, 2}, {14, 2}, { 6,10}, {14,10},
-    { 6, 4}, {14, 4}, { 6,12}, {14,12}, { 6, 6}, {14, 6}, { 6,14}, {14,14},
-    { 7, 1}, {15, 1}, { 7, 9}, {15, 9}, { 7, 3}, {15, 3}, { 7,11}, {15,11},
-    { 7, 5}, {15, 5}, { 7,13}, {15,13}, { 7, 7}, {15, 7}, { 7,15}, {15,15},        // quality 7
-
-    { 0, 0}, { 8, 0}, { 0, 8}, { 8, 8}, { 4, 4}, {12, 4}, { 4,12}, {12,12},
-    { 0, 4}, { 8, 4}, { 0,12}, { 8,12}, { 4, 0}, {12, 0}, { 4, 8}, {12, 8},
-    { 2, 2}, {10, 2}, { 2,10}, {10,10}, { 6, 6}, {14, 6}, { 6,14}, {14,14},
-    { 2, 6}, {10, 6}, { 2,14}, {10,14}, { 6, 2}, {14, 2}, { 6,10}, {14,10},
-    { 0, 2}, { 8, 2}, { 0,10}, { 8,10}, { 4, 6}, {12, 6}, { 4,14}, {12,14},
-    { 0, 6}, { 8, 6}, { 0,14}, { 8,14}, { 4, 2}, {12, 2}, { 4,10}, {12,10},
-    { 2, 0}, {10, 0}, { 2, 8}, {10, 8}, { 6, 4}, {14, 4}, { 6,12}, {14,12},
-    { 2, 4}, {10, 4}, { 2,12}, {10,12}, { 6, 0}, {14, 0}, { 6, 8}, {14, 8},
-    { 1, 1}, { 9, 1}, { 1, 9}, { 9, 9}, { 5, 5}, {13, 5}, { 5,13}, {13,13},
-    { 1, 5}, { 9, 5}, { 1,13}, { 9,13}, { 5, 1}, {13, 1}, { 5, 9}, {13, 9},
-    { 3, 3}, {11, 3}, { 3,11}, {11,11}, { 7, 7}, {15, 7}, { 7,15}, {15,15},
-    { 3, 7}, {11, 7}, { 3,15}, {11,15}, { 7, 3}, {15, 3}, { 7,11}, {15,11},
-    { 1, 3}, { 9, 3}, { 1,11}, { 9,11}, { 5, 7}, {13, 7}, { 5,15}, {13,15},
-    { 1, 7}, { 9, 7}, { 1,15}, { 9,15}, { 5, 3}, {13, 3}, { 5,11}, {13,11},        // quality 8
-    { 3, 1}, {11, 1}, { 3, 9}, {11, 9}, { 7, 5}, {15, 5}, { 7,13}, {15,13},
-    { 3, 5}, {11, 5}, { 3,13}, {11,13}, { 7, 1}, {15, 1}, { 7, 9}, {15, 9},
-    { 0, 1}, { 8, 1}, { 0, 9}, { 8, 9}, { 4, 5}, {12, 5}, { 4,13}, {12,13},
-    { 0, 5}, { 8, 5}, { 0,13}, { 8,13}, { 4, 1}, {12, 1}, { 4, 9}, {12, 9},
-    { 2, 3}, {10, 3}, { 2,11}, {10,11}, { 6, 7}, {14, 7}, { 6,15}, {14,15},
-    { 2, 7}, {10, 7}, { 2,15}, {10,15}, { 6, 3}, {14, 3}, { 6,11}, {14,11},
-    { 0, 3}, { 8, 3}, { 0,11}, { 8,11}, { 4, 7}, {12, 7}, { 4,15}, {12,15},
-    { 0, 7}, { 8, 7}, { 0,15}, { 8,15}, { 4, 3}, {12, 3}, { 4,11}, {12,11},
-    { 2, 1}, {10, 1}, { 2, 9}, {10, 9}, { 6, 5}, {14, 5}, { 6,13}, {14,13},
-    { 2, 5}, {10, 5}, { 2,13}, {10,13}, { 6, 1}, {14, 1}, { 6, 9}, {14, 9},
-    { 1, 0}, { 9, 0}, { 1, 8}, { 9, 8}, { 5, 4}, {13, 4}, { 5,12}, {13,12},
-    { 1, 4}, { 9, 4}, { 1,12}, { 9,12}, { 5, 0}, {13, 0}, { 5, 8}, {13, 8},
-    { 3, 2}, {11, 2}, { 3,10}, {11,10}, { 7, 6}, {15, 6}, { 7,14}, {15,14},
-    { 3, 6}, {11, 6}, { 3,14}, {11,14}, { 7, 2}, {15, 2}, { 7,10}, {15,10},
-    { 1, 2}, { 9, 2}, { 1,10}, { 9,10}, { 5, 6}, {13, 6}, { 5,14}, {13,14},
-    { 1, 6}, { 9, 6}, { 1,14}, { 9,14}, { 5, 2}, {13, 2}, { 5,10}, {13,10},
-    { 3, 0}, {11, 0}, { 3, 8}, {11, 8}, { 7, 4}, {15, 4}, { 7,12}, {15,12},
-    { 3, 4}, {11, 4}, { 3,12}, {11,12}, { 7, 0}, {15, 0}, { 7, 8}, {15, 8},
-};
-
-static void store_slice_c(uint8_t *dst, const uint16_t *src,
-                          int dst_stride, int src_stride,
-                          int width, int height, int log2_scale)
-{
-    int y, x;
-
-#define STORE(pos) do {                                                     \
-    temp = ((src[x + y * src_stride + pos] << log2_scale) + d[pos]) >> 8;   \
-    if (temp & 0x100) temp = ~(temp >> 31);                                 \
-    dst[x + y * dst_stride + pos] = temp;                                   \
-} while (0)
-
-    for (y = 0; y < height; y++) {
-        const uint8_t *d = dither[y&7];
-        for (x = 0; x < width; x += 8) {
-            int temp;
-            STORE(0);
-            STORE(1);
-            STORE(2);
-            STORE(3);
-            STORE(4);
-            STORE(5);
-            STORE(6);
-            STORE(7);
-        }
-    }
-}
-
-static void filter(USPPContext *p, uint8_t *dst[3], uint8_t *src[3],
-                   int dst_stride[3], int src_stride[3], int width,
-                   int height, uint8_t *qp_store, int qp_stride)
-{
-    int x, y, i, j;
-    const int count = 1<<p->log2_count;
-    int ret;
-
-    for (i = 0; i < 3; i++) {
-        int is_chroma = !!i;
-        int w = AV_CEIL_RSHIFT(width,  is_chroma ? p->hsub : 0);
-        int h = AV_CEIL_RSHIFT(height, is_chroma ? p->vsub : 0);
-        int stride = p->temp_stride[i];
-        int block = BLOCK >> (is_chroma ? p->hsub : 0);
-
-        if (!src[i] || !dst[i])
-            continue;
-        for (y = 0; y < h; y++) {
-            int index = block + block * stride + y * stride;
-
-            memcpy(p->src[i] + index, src[i] + y * src_stride[i], w );
-            for (x = 0; x < block; x++) {
-                p->src[i][index     - x - 1] = p->src[i][index +     x    ];
-                p->src[i][index + w + x    ] = p->src[i][index + w - x - 1];
-            }
-        }
-        for (y = 0; y < block; y++) {
-            memcpy(p->src[i] + (  block-1-y) * stride, p->src[i] + (  y+block  ) * stride, stride);
-            memcpy(p->src[i] + (h+block  +y) * stride, p->src[i] + (h-y+block-1) * stride, stride);
-        }
-
-        p->frame->linesize[i] = stride;
-        memset(p->temp[i], 0, (h + 2 * block) * stride * sizeof(int16_t));
-    }
-
-    if (p->qp)
-        p->frame->quality = p->qp * FF_QP2LAMBDA;
-    else {
-        int qpsum=0;
-        int qpcount = (height>>4) * (height>>4);
-
-        for (y = 0; y < (height>>4); y++) {
-            for (x = 0; x < (width>>4); x++)
-                qpsum += qp_store[x + y * qp_stride];
-        }
-        p->frame->quality = ff_norm_qscale((qpsum + qpcount/2) / qpcount, p->qscale_type) * FF_QP2LAMBDA;
-    }
-//    init per MB qscale stuff FIXME
-    p->frame->height = height + BLOCK;
-    p->frame->width  = width + BLOCK;
-
-    for (i = 0; i < count; i++) {
-        const int x1 = offset[i+count-1][0];
-        const int y1 = offset[i+count-1][1];
-        const int x1c = x1 >> p->hsub;
-        const int y1c = y1 >> p->vsub;
-        const int BLOCKc = BLOCK >> p->hsub;
-        int offset;
-        AVPacket *pkt = p->pkt;
-        int got_pkt_ptr;
-
-        av_packet_unref(pkt);
-        pkt->data = p->outbuf;
-        pkt->size = p->outbuf_size;
-
-        p->frame->data[0] = p->src[0] + x1   + y1   * p->frame->linesize[0];
-        p->frame->data[1] = p->src[1] + x1c  + y1c  * p->frame->linesize[1];
-        p->frame->data[2] = p->src[2] + x1c  + y1c  * p->frame->linesize[2];
-        p->frame->format  = p->avctx_enc[i]->pix_fmt;
-
-        ret = avcodec_encode_video2(p->avctx_enc[i], pkt, p->frame, &got_pkt_ptr);
-        if (ret < 0) {
-            av_log(p->avctx_enc[i], AV_LOG_ERROR, "Encoding failed\n");
-            continue;
-        }
-        av_packet_unref(pkt);
-
-        p->frame_dec = p->avctx_enc[i]->coded_frame;
-
-        offset = (BLOCK-x1) + (BLOCK-y1) * p->frame_dec->linesize[0];
-
-        for (y = 0; y < height; y++)
-            for (x = 0; x < width; x++)
-                p->temp[0][x + y * p->temp_stride[0]] += p->frame_dec->data[0][x + y * p->frame_dec->linesize[0] + offset];
-
-        if (!src[2] || !dst[2])
-            continue;
-
-        offset = (BLOCKc-x1c) + (BLOCKc-y1c) * p->frame_dec->linesize[1];
-
-        for (y = 0; y < AV_CEIL_RSHIFT(height, p->vsub); y++) {
-            for (x = 0; x < AV_CEIL_RSHIFT(width, p->hsub); x++) {
-                p->temp[1][x + y * p->temp_stride[1]] += p->frame_dec->data[1][x + y * p->frame_dec->linesize[1] + offset];
-                p->temp[2][x + y * p->temp_stride[2]] += p->frame_dec->data[2][x + y * p->frame_dec->linesize[2] + offset];
-            }
-        }
-    }
-
-    for (j = 0; j < 3; j++) {
-        int is_chroma = !!j;
-        if (!dst[j])
-            continue;
-        store_slice_c(dst[j], p->temp[j], dst_stride[j], p->temp_stride[j],
-                      AV_CEIL_RSHIFT(width,  is_chroma ? p->hsub : 0),
-                      AV_CEIL_RSHIFT(height, is_chroma ? p->vsub : 0),
-                      8-p->log2_count);
-    }
-}
-
-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
-};
-
-static int config_input(AVFilterLink *inlink)
-{
-
-    AVFilterContext *ctx = inlink->dst;
-    USPPContext *uspp = ctx->priv;
-    const int height = inlink->h;
-    const int width  = inlink->w;
-    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(inlink->format);
-    int i;
-
-    const AVCodec *enc = avcodec_find_encoder(AV_CODEC_ID_SNOW);
-    if (!enc) {
-        av_log(ctx, AV_LOG_ERROR, "SNOW encoder not found.\n");
-        return AVERROR(EINVAL);
-    }
-
-    uspp->hsub = desc->log2_chroma_w;
-    uspp->vsub = desc->log2_chroma_h;
-
-    for (i = 0; i < 3; i++) {
-        int is_chroma = !!i;
-        int w = (width  + 4 * BLOCK-1) & (~(2 * BLOCK-1));
-        int h = (height + 4 * BLOCK-1) & (~(2 * BLOCK-1));
-
-        if (is_chroma) {
-            w = AV_CEIL_RSHIFT(w, uspp->hsub);
-            h = AV_CEIL_RSHIFT(h, uspp->vsub);
-        }
-
-        uspp->temp_stride[i] = w;
-        if (!(uspp->temp[i] = av_malloc_array(uspp->temp_stride[i], h * sizeof(int16_t))))
-            return AVERROR(ENOMEM);
-        if (!(uspp->src [i] = av_malloc_array(uspp->temp_stride[i], h * sizeof(uint8_t))))
-            return AVERROR(ENOMEM);
-    }
-
-    for (i = 0; i < (1<<uspp->log2_count); i++) {
-        AVCodecContext *avctx_enc;
-        AVDictionary *opts = NULL;
-        int ret;
-
-        if (!(uspp->avctx_enc[i] = avcodec_alloc_context3(NULL)))
-            return AVERROR(ENOMEM);
-
-        avctx_enc = uspp->avctx_enc[i];
-        avctx_enc->width = width + BLOCK;
-        avctx_enc->height = height + BLOCK;
-        avctx_enc->time_base = (AVRational){1,25};  // meaningless
-        avctx_enc->gop_size = INT_MAX;
-        avctx_enc->max_b_frames = 0;
-        avctx_enc->pix_fmt = inlink->format;
-        avctx_enc->flags = AV_CODEC_FLAG_QSCALE | AV_CODEC_FLAG_LOW_DELAY;
-        avctx_enc->strict_std_compliance = FF_COMPLIANCE_EXPERIMENTAL;
-        avctx_enc->global_quality = 123;
-        av_dict_set(&opts, "no_bitstream", "1", 0);
-        ret = avcodec_open2(avctx_enc, enc, &opts);
-        av_dict_free(&opts);
-        if (ret < 0)
-            return ret;
-        av_assert0(avctx_enc->codec);
-    }
-
-    uspp->outbuf_size = (width + BLOCK) * (height + BLOCK) * 10;
-    if (!(uspp->frame = av_frame_alloc()))
-        return AVERROR(ENOMEM);
-    if (!(uspp->pkt = av_packet_alloc()))
-        return AVERROR(ENOMEM);
-    if (!(uspp->outbuf = av_malloc(uspp->outbuf_size)))
-        return AVERROR(ENOMEM);
-
-    return 0;
-}
-
-static int filter_frame(AVFilterLink *inlink, AVFrame *in)
-{
-    AVFilterContext *ctx = inlink->dst;
-    USPPContext *uspp = ctx->priv;
-    AVFilterLink *outlink = ctx->outputs[0];
-    AVFrame *out = in;
-
-    int qp_stride = 0;
-    int8_t *qp_table = NULL;
-    int ret = 0;
-
-    /* if we are not in a constant user quantizer mode and we don't want to use
-     * the quantizers from the B-frames (B-frames often have a higher QP), we
-     * need to save the qp table from the last non B-frame; this is what the
-     * following code block does */
-    if (!uspp->qp && (uspp->use_bframe_qp || in->pict_type != AV_PICTURE_TYPE_B)) {
-        ret = ff_qp_table_extract(in, &qp_table, &qp_stride, NULL, &uspp->qscale_type);
-        if (ret < 0) {
-            av_frame_free(&in);
-            return ret;
-        }
-
-        if (!uspp->use_bframe_qp && in->pict_type != AV_PICTURE_TYPE_B) {
-            av_freep(&uspp->non_b_qp_table);
-            uspp->non_b_qp_table  = qp_table;
-            uspp->non_b_qp_stride = qp_stride;
-        }
-    }
-
-    if (uspp->log2_count && !ctx->is_disabled) {
-        if (!uspp->use_bframe_qp && uspp->non_b_qp_table) {
-            qp_table = uspp->non_b_qp_table;
-            qp_stride = uspp->non_b_qp_stride;
-        }
-
-        if (qp_table || uspp->qp) {
-
-            /* get a new frame if in-place is not possible or if the dimensions
-             * are not multiple of 8 */
-            if (!av_frame_is_writable(in) || (inlink->w & 7) || (inlink->h & 7)) {
-                const int aligned_w = FFALIGN(inlink->w, 8);
-                const int aligned_h = FFALIGN(inlink->h, 8);
-
-                out = ff_get_video_buffer(outlink, aligned_w, aligned_h);
-                if (!out) {
-                    av_frame_free(&in);
-                    if (qp_table != uspp->non_b_qp_table)
-                        av_free(qp_table);
-                    return AVERROR(ENOMEM);
-                }
-                av_frame_copy_props(out, in);
-                out->width  = in->width;
-                out->height = in->height;
-            }
-
-            filter(uspp, out->data, in->data, out->linesize, in->linesize,
-                   inlink->w, inlink->h, qp_table, qp_stride);
-        }
-    }
-
-    if (in != out) {
-        if (in->data[3])
-            av_image_copy_plane(out->data[3], out->linesize[3],
-                                in ->data[3], in ->linesize[3],
-                                inlink->w, inlink->h);
-        av_frame_free(&in);
-    }
-    ret = ff_filter_frame(outlink, out);
-    if (qp_table != uspp->non_b_qp_table)
-        av_freep(&qp_table);
-    return ret;
-}
-
-static av_cold void uninit(AVFilterContext *ctx)
-{
-    USPPContext *uspp = ctx->priv;
-    int i;
-
-    for (i = 0; i < 3; i++) {
-        av_freep(&uspp->temp[i]);
-        av_freep(&uspp->src[i]);
-    }
-
-    for (i = 0; i < (1 << uspp->log2_count); i++)
-        avcodec_free_context(&uspp->avctx_enc[i]);
-
-    av_freep(&uspp->non_b_qp_table);
-    av_freep(&uspp->outbuf);
-    av_packet_free(&uspp->pkt);
-    av_frame_free(&uspp->frame);
-}
-
-static const AVFilterPad uspp_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .config_props = config_input,
-        .filter_frame = filter_frame,
-    },
-};
-
-static const AVFilterPad uspp_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-};
-
-const AVFilter ff_vf_uspp = {
-    .name            = "uspp",
-    .description     = NULL_IF_CONFIG_SMALL("Apply Ultra Simple / Slow Post-processing filter."),
-    .priv_size       = sizeof(USPPContext),
-    .uninit          = uninit,
-    FILTER_INPUTS(uspp_inputs),
-    FILTER_OUTPUTS(uspp_outputs),
-    FILTER_PIXFMTS_ARRAY(pix_fmts),
-    .priv_class      = &uspp_class,
-    .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
-};
diff --git a/tests/fate/filter-video.mak b/tests/fate/filter-video.mak
index 704087b835..426e27f61e 100644
--- a/tests/fate/filter-video.mak
+++ b/tests/fate/filter-video.mak
@@ -29,14 +29,6 @@ fate-filter-w3fdif-complex: CMD = framecrc -flags bitexact -idct simple -i $(TAR
 
 FATE_FILTER_SAMPLES-$(call FILTERDEMDEC, W3FDIF, MPEGTS, MPEG2VIDEO) += $(FATE_W3FDIF)
 
-FATE_MCDEINT += fate-filter-mcdeint-fast
-fate-filter-mcdeint-fast: CMD = framecrc -flags bitexact -idct simple -i $(TARGET_SAMPLES)/mpeg2/mpeg2_field_encoding.ts -frames:v 30 -vf mcdeint=fast
-
-FATE_MCDEINT += fate-filter-mcdeint-medium
-fate-filter-mcdeint-medium: CMD = framecrc -flags bitexact -idct simple -i $(TARGET_SAMPLES)/mpeg2/mpeg2_field_encoding.ts -frames:v 30 -vf mcdeint=mode=medium
-
-FATE_FILTER_SAMPLES-$(call FILTERDEMDEC, MCDEINT, MPEGTS, MPEG2VIDEO, SNOW_ENCODER) += $(FATE_MCDEINT)
-
 FATE_FILTER_SAMPLES-$(call FILTERDEMDEC, CODECVIEW, RM, RV40) += fate-filter-codecview-mvs
 fate-filter-codecview-mvs: CMD = framecrc -flags2 +export_mvs -i $(TARGET_SAMPLES)/real/spygames-2MB.rmvb -vf codecview=mv=pf+bf+bb -frames:v 60 -an
 
diff --git a/tests/ref/fate/filter-mcdeint-fast b/tests/ref/fate/filter-mcdeint-fast
deleted file mode 100644
index e4c2f8a337..0000000000
--- a/tests/ref/fate/filter-mcdeint-fast
+++ /dev/null
@@ -1,35 +0,0 @@
-#tb 0: 1/25
-#media_type 0: video
-#codec_id 0: rawvideo
-#dimensions 0: 720x576
-#sar 0: 16/15
-0,          9,          9,        1,   622080, 0xff496bf5
-0,         10,         10,        1,   622080, 0x513c8bd9
-0,         11,         11,        1,   622080, 0x4e474368
-0,         12,         12,        1,   622080, 0x1248abe9
-0,         13,         13,        1,   622080, 0xa705c158
-0,         14,         14,        1,   622080, 0xf9048e95
-0,         15,         15,        1,   622080, 0x78b5c1a2
-0,         16,         16,        1,   622080, 0x0efa8be8
-0,         17,         17,        1,   622080, 0xd3396eac
-0,         18,         18,        1,   622080, 0x5870cbdd
-0,         19,         19,        1,   622080, 0x086fa311
-0,         20,         20,        1,   622080, 0x7ce9bced
-0,         21,         21,        1,   622080, 0xe7e0e0e1
-0,         22,         22,        1,   622080, 0x5af3e14b
-0,         23,         23,        1,   622080, 0xbf221d96
-0,         24,         24,        1,   622080, 0x43d90a62
-0,         25,         25,        1,   622080, 0x267a57b6
-0,         26,         26,        1,   622080, 0x88d942eb
-0,         27,         27,        1,   622080, 0x34ff87bf
-0,         28,         28,        1,   622080, 0xa849b5ec
-0,         29,         29,        1,   622080, 0x8302f51f
-0,         30,         30,        1,   622080, 0xac9e7315
-0,         31,         31,        1,   622080, 0x38b284fc
-0,         32,         32,        1,   622080, 0x1ff0c6c4
-0,         33,         33,        1,   622080, 0x50bf1ba5
-0,         34,         34,        1,   622080, 0xe9bd1240
-0,         35,         35,        1,   622080, 0x22116da3
-0,         36,         36,        1,   622080, 0x6f3e887a
-0,         37,         37,        1,   622080, 0x46b82bc5
-0,         38,         38,        1,   622080, 0xeaaf69ee
diff --git a/tests/ref/fate/filter-mcdeint-medium b/tests/ref/fate/filter-mcdeint-medium
deleted file mode 100644
index 1b0261960e..0000000000
--- a/tests/ref/fate/filter-mcdeint-medium
+++ /dev/null
@@ -1,35 +0,0 @@
-#tb 0: 1/25
-#media_type 0: video
-#codec_id 0: rawvideo
-#dimensions 0: 720x576
-#sar 0: 16/15
-0,          9,          9,        1,   622080, 0xff496bf5
-0,         10,         10,        1,   622080, 0xc0e4912c
-0,         11,         11,        1,   622080, 0xa8aedd7e
-0,         12,         12,        1,   622080, 0x2054deb9
-0,         13,         13,        1,   622080, 0x1005d0ca
-0,         14,         14,        1,   622080, 0x60f085dc
-0,         15,         15,        1,   622080, 0x4da0d261
-0,         16,         16,        1,   622080, 0x968e940e
-0,         17,         17,        1,   622080, 0x86687b04
-0,         18,         18,        1,   622080, 0xd63bc93d
-0,         19,         19,        1,   622080, 0x7ab0a6e6
-0,         20,         20,        1,   622080, 0x883dab85
-0,         21,         21,        1,   622080, 0x9f6ef6b5
-0,         22,         22,        1,   622080, 0xceccee25
-0,         23,         23,        1,   622080, 0x2aa823a5
-0,         24,         24,        1,   622080, 0xb20d0f48
-0,         25,         25,        1,   622080, 0x571560b9
-0,         26,         26,        1,   622080, 0xc0904764
-0,         27,         27,        1,   622080, 0xdb5b89c3
-0,         28,         28,        1,   622080, 0x707aadc5
-0,         29,         29,        1,   622080, 0x6383ef1b
-0,         30,         30,        1,   622080, 0xf9e56040
-0,         31,         31,        1,   622080, 0x86ce7ff0
-0,         32,         32,        1,   622080, 0x0c76bd84
-0,         33,         33,        1,   622080, 0xd7192781
-0,         34,         34,        1,   622080, 0x83b70cdc
-0,         35,         35,        1,   622080, 0xaae87453
-0,         36,         36,        1,   622080, 0xfafa92e2
-0,         37,         37,        1,   622080, 0x28323354
-0,         38,         38,        1,   622080, 0x34d47484
