diff --git a/BUILD.gn b/BUILD.gn
new file mode 100644
index 0000000..a7d14048
--- /dev/null
+++ b/BUILD.gn
@@ -0,0 +1,235 @@
+# Copyright 2017 The Fuchsia Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("ffmpeg_options.gni")
+import("ffmpeg_generated.gni")
+
+# Path to configuration files.
+ffmpeg_config_root = "fuchsia/config/$ffmpeg_profile/$current_cpu"
+
+has_yasm_deps = ffmpeg_yasm_sources != [] && current_cpu == "x64"
+if (has_yasm_deps) {
+  import("//third_party/yasm/yasm_assemble.gni")
+  yasm_assemble("ffmpeg_yasm") {
+    sources = ffmpeg_yasm_sources
+
+    # Ensure the architecture defines go in the command line before the -P
+    # file below, so don't use defines.
+    yasm_flags = []
+    if (current_cpu == "x86") {
+      yasm_flags += [ "-DARCH_X86_32" ]
+    } else if (current_cpu == "x64") {
+      yasm_flags += [ "-DARCH_X86_64" ]
+    }
+
+    inputs = [
+      # Sets visibility hidden for cglobal functions. Explicitly included
+      # to avoid overlooking changes to this file in incremental builds.
+      "libavutil/x86/x86inc.asm",
+    ]
+
+    defines = [ "PIC" ]
+    include_dirs = [
+      ffmpeg_config_root,
+      "libavcodec/x86",
+      "libavutil/x86",
+      ".",
+    ]
+
+    # Disable warnings, prevents log spam for things we won't fix.
+    yasm_flags += [
+      "-w",
+      "-P",
+      rebase_path("$ffmpeg_config_root/config.asm", root_build_dir),
+    ]
+
+    if (is_mac) {
+      # Necessary to ensure symbols end up with a _ prefix; added by
+      # yasm_assemble.gni for Windows, but not Mac.
+      defines += [ "PREFIX" ]
+    }
+  }
+}
+
+config("ffmpeg_dependent_config") {
+  include_dirs = [
+    ffmpeg_config_root,
+    ".",
+  ]
+}
+
+# gn orders flags on a target before flags from configs. The default config
+# adds -Wall, and these flags have to be after -Wall -- so they need to come
+# from a config and can't be on the target directly.
+config("ffmpegsumo_warnings") {
+  cflags = [
+    "-Wno-absolute-value",
+
+    # ffmpeg uses its own deprecated functions.
+    "-Wno-deprecated-declarations",
+
+    # ffmpeg doesn't care about pointer constness.
+    "-Wno-incompatible-pointer-types",
+
+    # ffmpeg doesn't follow usual parentheses conventions.
+    "-Wno-logical-op-parentheses",
+
+    # ffmpeg doesn't care about pointer signedness.
+    "-Wno-parentheses",
+
+    # ffmpeg doesn't care about pointer signedness.
+    "-Wno-pointer-sign",
+
+    # ffmpeg doesn't believe in exhaustive switch statements.
+    "-Wno-switch",
+
+    # matroskadec.c has a "failed:" label that's only used if some
+    # CONFIG_ flags we don't set are set.
+    "-Wno-unused-label",
+
+    # ffmpeg has a lot of unused variables.
+    "-Wno-unused-variable",
+
+    # This fires on `av_assert0(!"valid element size")` in utils.c
+    "-Wno-string-conversion",
+
+    # This fires on `pos_min` and `pos_max` in
+    # autorename_libavformat_utils.c
+    "-Wno-sometimes-uninitialized",
+
+    # ffmpeg contains static functions in header files, which lead
+    # to unused function warnings. There are a few legit unused
+    # functions too.
+    "-Wno-unused-function",
+
+    # vp3data.h's vp31_inter_dequant stores '128' in an int8_t array.
+    "-Wno-constant-conversion",
+
+    "-Wno-string-plus-int",
+
+    # ffmpeg compares ints and floats.
+    "-Wno-implicit-int-float-conversion",
+
+    # fmmpeg may have questionable indentation. We should come back later
+    # to confirm if this indentation is expected.
+    "-Wno-misleading-indentation",
+  ]
+}
+
+config("ffmpeg_warnings") {
+  cflags = [
+    "-Wno-sign-compare",
+    "-Wno-missing-field-initializers",
+    "-Wno-pointer-bool-conversion",
+    "-Wno-implicit-int-float-conversion",
+    "-Wno-string-plus-int",
+    "-Wno-misleading-indentation",
+  ]
+}
+
+shared_library("ffmpeg") {
+  sources = ffmpeg_c_sources + ffmpeg_gas_sources + [
+              "$ffmpeg_config_root/config.h",
+              "$ffmpeg_config_root/libavutil/avconfig.h",
+            ]
+  public_configs = [ ":ffmpeg_dependent_config" ]
+  defines = [
+    "HAVE_AV_CONFIG_H",
+    "_POSIX_C_SOURCE=200112",
+    "_XOPEN_SOURCE=600",
+    "PIC",
+
+    # Disable deprecated features that generate spammy warnings.
+    "FF_API_CONVERGENCE_DURATION=0",
+
+    # Upstream libavcodec/utils.c still uses the deprecated
+    # av_dup_packet(), avcodec_encode_{audio,video}2(), and
+    # libavformat/utils.c still accesses the deprecated AVStream.codec,
+    # causing deprecation warnings.
+    # The normal fix for such things is to disable the features like setting
+    # "FF_API_AVPACKET_OLD_API=0", but the upstream code does not yet compile
+    # with it disabled (in the case of av_dup_packet()), and has no FF_API*
+    # gate for avcodec_encode_{audio,video}2() or AVStream.codec.  In the
+    # meantime, we directly disable those warnings locally in the C files.
+  ]
+
+  # So we can append below and assume they're defined.
+  cflags = []
+  ldflags = []
+  libs = []
+  deps = [
+    "//third_party/opus",
+  ]
+
+  configs += [
+    ":ffmpeg_warnings",
+    ":ffmpegsumo_warnings",
+  ]
+
+  # Since we are not often debugging FFmpeg, and performance is
+  # unacceptable without optimization, freeze the optimizations to -O2.
+  # If someone really wants -O1 , they can change these in their checkout.
+  # If you want -O0, see the Gotchas in README.fuchsia for why that
+  # won't work.
+  #
+  # In addition to the above reasons, /Od optimization won't remove symbols
+  # that are under "if (0)" style sections.  Which lead to link time errors
+  # when for example it tries to link an ARM symbol on X86.
+  if (is_debug) {
+    configs -= [ "//build/config:debug" ]
+    configs += [ "//build/config:release" ]
+  }
+
+  # Make all symbols visible.
+  configs -= [ "//build/config:symbol_visibility_hidden" ]
+
+  cflags += [
+    # ffmpeg uses its own deprecated functions.
+    "-Wno-deprecated-declarations",
+  ]
+
+  if (current_cpu == "arm64") {
+    asmflags = []
+    if (arm_float_abi == "hard") {
+      asmflags += [ "-DHAVE_VFP_ARGS=1" ]
+    } else {
+      asmflags += [ "-DHAVE_VFP_ARGS=0" ]
+    }
+  }
+
+  defines += [
+    "_ISOC99_SOURCE",
+    "_LARGEFILE_SOURCE",
+  ]
+
+  cflags += [
+    "-std=c99",
+    "-pthread",
+    "-fno-math-errno",
+    "-fno-signed-zeros",
+    "-fno-tree-vectorize",
+    "-fomit-frame-pointer",
+  ]
+  ldflags = [
+    # Avoid PIC relocation errors from assembly code.
+    "-Wl,-Bsymbolic",
+    "-L",
+    rebase_path(target_gen_dir, root_build_dir),
+  ]
+
+  if (has_yasm_deps) {
+    deps += [ ":ffmpeg_yasm" ]
+  }
+
+  # TODO(46940): UBSan has found an instance of undefined behavior in this target.
+  # Disable UBSan for this target temporarily until it is migrated into CI/CQ.
+  configs += [ "//build/config:temporarily_disable_ubsan_do_not_use" ]
+}
+
+group("ffmpeg_variants") {
+  deps = []
+  foreach(variant, select_variant) {
+    deps += [ ":ffmpeg(${toolchain_variant.base}-${variant}-shared)" ]
+  }
+}
diff --git a/CREDITS.fuchsia b/CREDITS.fuchsia
new file mode 100644
index 0000000..31e50f7
--- /dev/null
+++ b/CREDITS.fuchsia
@@ -0,0 +1,952 @@
+# License
+
+Most files in FFmpeg are under the GNU Lesser General Public License version 2.1
+or later (LGPL v2.1+). Read the file `COPYING.LGPLv2.1` for details. Some other
+files have MIT/X11/BSD-style licenses. In combination the LGPL v2.1+ applies to
+FFmpeg.
+
+Some optional parts of FFmpeg are licensed under the GNU General Public License
+version 2 or later (GPL v2+). See the file `COPYING.GPLv2` for details. None of
+these parts are used by default, you have to explicitly pass `--enable-gpl` to
+configure to activate them. In this case, FFmpeg's license changes to GPL v2+.
+
+Specifically, the GPL parts of FFmpeg are:
+
+- libpostproc
+- optional x86 optimization in the files
+    - `libavcodec/x86/flac_dsp_gpl.asm`
+    - `libavcodec/x86/idct_mmx.c`
+    - `libavfilter/x86/vf_removegrain.asm`
+- the following building and testing tools
+    - `compat/solaris/make_sunver.pl`
+    - `doc/t2h.pm`
+    - `doc/texi2pod.pl`
+    - `libswresample/tests/swresample.c`
+    - `tests/checkasm/*`
+    - `tests/tiny_ssim.c`
+- the following filters in libavfilter:
+    - `signature_lookup.c`
+    - `vf_blackframe.c`
+    - `vf_boxblur.c`
+    - `vf_colormatrix.c`
+    - `vf_cover_rect.c`
+    - `vf_cropdetect.c`
+    - `vf_delogo.c`
+    - `vf_eq.c`
+    - `vf_find_rect.c`
+    - `vf_fspp.c`
+    - `vf_histeq.c`
+    - `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`
+    - `vf_perspective.c`
+    - `vf_phase.c`
+    - `vf_pp.c`
+    - `vf_pp7.c`
+    - `vf_pullup.c`
+    - `vf_repeatfields.c`
+    - `vf_sab.c`
+    - `vf_signature.c`
+    - `vf_smartblur.c`
+    - `vf_spp.c`
+    - `vf_stereo3d.c`
+    - `vf_super2xsai.c`
+    - `vf_tinterlace.c`
+    - `vf_uspp.c`
+    - `vf_vaguedenoiser.c`
+    - `vsrc_mptestsrc.c`
+
+Should you, for whatever reason, prefer to use version 3 of the (L)GPL, then
+the configure parameter `--enable-version3` will activate this licensing option
+for you. Read the file `COPYING.LGPLv3` or, if you have enabled GPL parts,
+`COPYING.GPLv3` to learn the exact legal terms that apply in this case.
+
+There are a handful of files under other licensing terms, namely:
+
+* The files `libavcodec/jfdctfst.c`, `libavcodec/jfdctint_template.c` and
+  `libavcodec/jrevdct.c` are taken from libjpeg, see the top of the files for
+  licensing details. Specifically note that you must credit the IJG in the
+  documentation accompanying your program if you only distribute executables.
+  You must also indicate any changes including additions and deletions to
+  those three files in the documentation.
+* `tests/reference.pnm` is under the expat license.
+
+
+## External libraries
+
+FFmpeg can be combined with a number of external libraries, which sometimes
+affect the licensing of binaries resulting from the combination.
+
+### Compatible libraries
+
+The following libraries are under GPL version 2:
+- avisynth
+- frei0r
+- libcdio
+- libdavs2
+- librubberband
+- libvidstab
+- libx264
+- libx265
+- libxavs
+- libxavs2
+- libxvid
+
+When combining them with FFmpeg, FFmpeg needs to be licensed as GPL as well by
+passing `--enable-gpl` to configure.
+
+The following libraries are under LGPL version 3:
+- gmp
+- libaribb24
+- liblensfun
+
+When combining them with FFmpeg, use the configure option `--enable-version3` to
+upgrade FFmpeg to the LGPL v3.
+
+The VMAF, mbedTLS, RK MPI, OpenCORE and VisualOn libraries are under the Apache License
+2.0. That license is incompatible with the LGPL v2.1 and the GPL v2, but not with
+version 3 of those licenses. So to combine these libraries with FFmpeg, the
+license version needs to be upgraded by passing `--enable-version3` to configure.
+
+The smbclient library is under the GPL v3, to combine it with FFmpeg,
+the options `--enable-gpl` and `--enable-version3` have to be passed to
+configure to upgrade FFmpeg to the GPL v3.
+
+### Incompatible libraries
+
+There are certain libraries you can combine with FFmpeg whose licenses are not
+compatible with the GPL and/or the LGPL. If you wish to enable these
+libraries, even in circumstances that their license may be incompatible, pass
+`--enable-nonfree` to configure. This will cause the resulting binary to be
+unredistributable.
+
+The Fraunhofer FDK AAC and OpenSSL libraries are under licenses which are
+incompatible with the GPLv2 and v3. To the best of our knowledge, they are
+compatible with the LGPL.
+
+
+********************************************************************************
+
+libavformat/oggparsespeex.c
+
+Copyright (C) 2008  Reimar Döffinger
+
+      Permission is hereby granted, free of charge, to any person
+      obtaining a copy of this software and associated documentation
+      files (the "Software"), to deal in the Software without
+      restriction, including without limitation the rights to use, copy,
+      modify, merge, publish, distribute, sublicense, and/or sell copies
+      of the Software, and to permit persons to whom the Software is
+      furnished to do so, subject to the following conditions:
+
+      The above copyright notice and this permission notice shall be
+      included in all copies or substantial portions of the Software.
+
+      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+      EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+      MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+      NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+      HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+      WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+      OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+      DEALINGS IN THE SOFTWARE.
+
+********************************************************************************
+
+libavutil/avsscanf.c
+
+Copyright (c) 2005-2014 Rich Felker, et al.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+********************************************************************************
+
+libavcodec/x86/xvididct.asm
+
+XVID MPEG-4 VIDEO CODEC
+
+ Conversion from gcc syntax to x264asm syntax with modifications
+ by Christophe Gisquet <christophe.gisquet@gmail.com>
+
+ ===========     SSE2 inverse discrete cosine transform     ===========
+
+ Copyright(C) 2003 Pascal Massimino <skal@planet-d.net>
+
+ Conversion to gcc syntax with modifications
+ by Alexander Strange <astrange@ithinksw.com>
+
+ Originally from dct/x86_asm/fdct_sse2_skal.asm in Xvid.
+
+ Vertical pass is an implementation of the scheme:
+  Loeffler C., Ligtenberg A., and Moschytz C.S.:
+  Practical Fast 1D DCT Algorithm with Eleven Multiplications,
+  Proc. ICASSP 1989, 988-991.
+
+ Horizontal pass is a double 4x4 vector/matrix multiplication,
+ (see also Intel's Application Note 922:
+  http://developer.intel.com/vtune/cbts/strmsimd/922down.htm
+  Copyright (C) 1999 Intel Corporation)
+
+ More details at http://skal.planet-d.net/coding/dct.html
+
+ =======     MMX and XMM forward discrete cosine transform     =======
+
+ Copyright(C) 2001 Peter Ross <pross@xvid.org>
+
+ Originally provided by Intel at AP-922
+ http://developer.intel.com/vtune/cbts/strmsimd/922down.htm
+ (See more app notes at http://developer.intel.com/vtune/cbts/strmsimd/appnotes.htm)
+ but in a limited edition.
+ New macro implements a column part for precise iDCT
+ The routine precision now satisfies IEEE standard 1180-1990.
+
+ Copyright(C) 2000-2001 Peter Gubanov <peter@elecard.net.ru>
+ Rounding trick Copyright(C) 2000 Michel Lespinasse <walken@zoy.org>
+
+ http://www.elecard.com/peter/idct.html
+ http://www.linuxvideo.org/mpeg2dec/
+
+ These examples contain code fragments for first stage iDCT 8x8
+ (for rows) and first stage DCT 8x8 (for columns)
+
+ conversion to gcc syntax by Michael Niedermayer
+
+ ======================================================================
+
+ This file is part of FFmpeg.
+
+ FFmpeg is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 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
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser 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
+
+********************************************************************************
+
+libswresample/version.h
+
+Version macros.
+
+This file is part of libswresample
+
+libswresample is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+libswresample 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
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with libswresample; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+********************************************************************************
+
+libavformat/oggparsetheora.c
+
+Copyright (C) 2005  Matthieu CASTET, Alex Beregszaszi
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use, copy,
+modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+********************************************************************************
+
+libswresample/swresample.h
+
+Copyright (C) 2011-2013 Michael Niedermayer (michaelni@gmx.at)
+
+This file is part of libswresample
+
+libswresample is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+libswresample 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
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with libswresample; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+********************************************************************************
+
+libavcodec/jfdctfst.c
+libavcodec/jfdctint_template.c
+libavcodec/jrevdct.c
+
+This file is part of the Independent JPEG Group's software.
+
+The authors make NO WARRANTY or representation, either express or implied,
+with respect to this software, its quality, accuracy, merchantability, or
+fitness for a particular purpose.  This software is provided "AS IS", and
+you, its user, assume the entire risk as to its quality and accuracy.
+
+This software is copyright (C) 1994-1996, Thomas G. Lane.
+All Rights Reserved except as specified below.
+
+Permission is hereby granted to use, copy, modify, and distribute this
+software (or portions thereof) for any purpose, without fee, subject to
+these conditions:
+(1) If any part of the source code for this software is distributed, then
+this README file must be included, with this copyright and no-warranty
+notice unaltered; and any additions, deletions, or changes to the original
+files must be clearly indicated in accompanying documentation.
+(2) If only executable code is distributed, then the accompanying
+documentation must state that "this software is based in part on the work
+of the Independent JPEG Group".
+(3) Permission for use of this software is granted only if the user accepts
+full responsibility for any undesirable consequences; the authors accept
+NO LIABILITY for damages of any kind.
+
+These conditions apply to any software derived from or based on the IJG
+code, not just to the unmodified library.  If you use our work, you ought
+to acknowledge us.
+
+Permission is NOT granted for the use of any IJG author's name or company
+name in advertising or publicity relating to this software or products
+derived from it.  This software may be referred to only as "the Independent
+JPEG Group's software".
+
+We specifically permit and encourage the use of this software as the basis
+of commercial products, provided that all warranty or liability claims are
+assumed by the product vendor.
+
+********************************************************************************
+
+libavcodec/fft_fixed_32.c
+libavcodec/fft_init_table.c
+libavcodec/fft_table.h
+libavcodec/mdct_fixed_32.c
+libavcodec/mips/aacdec_mips.h
+libavcodec/mips/aacsbr_mips.h
+libavcodec/mips/amrwbdec_mips.h
+libavcodec/mips/compute_antialias_fixed.h
+libavcodec/mips/compute_antialias_float.h
+libavcodec/mips/lsp_mips.h
+libavutil/fixed_dsp.c
+libavutil/fixed_dsp.h
+libavutil/mips/libm_mips.h
+libavutil/softfloat_tables.h
+
+Copyright (c) 2012
+MIPS Technologies, Inc., California.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+3. Neither the name of the MIPS Technologies, Inc., nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+Authors:
+Branimir Vasic   (bvasic@mips.com)
+Darko Laus       (darko@mips.com)
+Djordje Pesut    (djordje@mips.com)
+Goran Cordasic   (goran@mips.com)
+Nedeljko Babic   (nedeljko.babic imgtec com)
+Mirjana Vulin    (mvulin@mips.com)
+Stanislav Ocovaj (socovaj@mips.com)
+Zoran Lukic      (zoranl@mips.com)
+
+********************************************************************************
+
+libavformat/oggdec.c
+libavformat/oggdec.h
+libavformat/oggparseogm.c
+libavformat/oggparsevorbis.c
+
+Copyright (C) 2005  Michael Ahlberg, MÃ¥ns RullgÃ¥rd
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use, copy,
+modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
+
+********************************************************************************
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library 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
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
\ No newline at end of file
diff --git a/README.fuchsia b/README.fuchsia
new file mode 100644
index 0000000..9ef4359
--- /dev/null
+++ b/README.fuchsia
@@ -0,0 +1,102 @@
+Name: ffmpeg
+URL: http://ffmpeg.org/
+License: LGPL 2.1
+License File: CREDITS.fuchsia
+Upstream Git: git://source.ffmpeg.org/ffmpeg.git
+Last Upstream Merge: 6a97ba521558ce131fe839eed2d51ff745280e1d, Feb 11 2018
+Description:
+
+This file documents the layout of the Fuchsia copy of FFmpeg, some common
+tasks, and how to create the build files and related configurations.
+
+FFmpeg Layout:
+==============
+
+Fuchsia's copy of FFmpeg is a fork of the upstream git repository, see the
+tags above for the latest merged upstream revision.  All of the
+Fuchsia-specific bits, minus the gn files, are located under the fuchsia/
+folder off the root.
+
+    BUILD.gn: Has the targets for building FFmpeg for Fuchsia.
+
+    ffmpeg_generated.gni: Pregenerated listing of files necessary to build
+      every variation.  See fuchsia/scripts/generate_gn.py for more details.
+
+    fuchsia/scripts: Utilities for building the gn and config files.
+
+    fuchsia/config/...: Pregenerated FFmpeg config options for each profile
+      and architecture.
+
+    fuchsia/patches/README: Details of Fuchsia-specific changes that haven't
+      yet made it upstream.
+
+
+Help w/ Common Tasks:
+=====================
+
+-- Submitting changes to Fuchsia's FFmpeg Git repository.
+
+The goal of Fuchsia's FFmpeg repository is to just be a mirror of the upstream
+Git repository.  This means every change made must be upstreamed.  If you make
+a change, please add an entry to fuchsia/patches/README with a link to the
+tracking issue and code review for your change.
+
+-- Upstreaming a patch.
+
+  <checkout copy of upstream repo>
+  git checkout <hash of last Fuchsia FFmpeg, see tag above> -b my_patch
+  git apply <patch. pulled from code review or cherry-picked from this repo>
+  git rebase origin/master
+  < Follow FFmpeg guide: http://ffmpeg.org/developer.html#Submitting-patches-1 >
+
+Once your change has been upstreamed, please update the fuchsia/patches/README
+file with the status.  The next time an upstream merge is done, the committer
+will clear out all the patches which have been upstreamed.
+
+-- Cherry-picking a patch from upstream.
+
+  # Tell our repo about the upstream one.
+  git remote add upstream git://source.ffmpeg.org/ffmpeg.git
+  git fetch upstream
+
+  # Create a new branch based off of master for committing our patch.
+  git checkout origin/master -b my_new_branch
+
+  # Pull the patch out of upstream.
+  git cherry-pick -x <hash of commit in upstream>
+
+  <Follow rest of "Submitting changes to Fuchsia's FFmpeg Git repository.">
+
+
+Performing An Upstream Merge
+============================
+
+  # Note: upstream/master automatically tracks upstream.
+
+  # Make sure your path is set up to use the right yasm and clang. yasm needs
+  # to be installed, and clang is in prebuilt/third_party/clang/linux-x64/bin.
+
+  # Make sure that sysroot is available, namely
+  # ../../prebuilt/third_party/sysroot/linux
+
+  # Create a new branch based off of master.
+  git checkout origin/master -b my_new_branch
+
+  # Merge with master, taking theirs in case of conflicts.
+  git merge -X theirs upstream/master
+
+  # Remove removed files.
+  git diff --name-only --diff-filter=U | xargs git rm
+
+  # Build the ffmpeg for all profiles and architectures
+  ./fuchsia/scripts/build_ffmpeg.py x64
+  ./fuchsia/scripts/build_ffmpeg.py arm64
+
+  # Update Fuchsia stuff based on the results of the builds
+  ./fuchsia/scripts/copy_config.sh
+  ./fuchsia/scripts/generate_gn.py
+
+  # Use 'git add' to add new files as necessary (not the build.* dirs)
+  # Commit changes
+  # Test for regressions
+  # Submit
diff --git a/RELEASE_NOTES b/RELEASE_NOTES
new file mode 100644
index 0000000..d649c77
--- /dev/null
+++ b/RELEASE_NOTES
@@ -0,0 +1,15 @@
+
+              ┌───────────────────────────────────────┐
+              │ RELEASE NOTES for FFmpeg 3.4 "Cantor" │
+              └───────────────────────────────────────┘
+
+   The FFmpeg Project proudly presents FFmpeg 3.4 "Cantor", about 6
+   months after the release of FFmpeg 3.3.
+
+   A complete Changelog is available at the root of the project, and the
+   complete Git history on http://source.ffmpeg.org.
+
+   We hope you will like this release as much as we enjoyed working on it, and
+   as usual, if you have any questions about it, or any FFmpeg related topic,
+   feel free to join us on the #ffmpeg IRC channel (on irc.freenode.net) or ask
+   on the mailing-lists.
diff --git a/compat/solaris/make_sunver.pl b/compat/solaris/make_sunver.pl
deleted file mode 100755
index 0e9ed1d..0000000
--- a/compat/solaris/make_sunver.pl
+++ /dev/null
@@ -1,352 +0,0 @@
-#!/usr/bin/env perl
-
-# make_sunver.pl
-#
-#   Copyright (C) 2010, 2011, 2012, 2013
-#   Free Software Foundation, Inc.
-#
-# This file 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 3 of the License, or
-# (at your option) any later version.
-#
-# This program 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 this program; see the file COPYING.GPLv3.  If not see
-# <http://www.gnu.org/licenses/>.
-
-# This script takes at least two arguments, a GNU style version script and
-# a list of object and archive files, and generates a corresponding Sun
-# style version script as follows:
-#
-# Each glob pattern, C++ mangled pattern or literal in the input script is
-# matched against all global symbols in the input objects, emitting those
-# that matched (or nothing if no match was found).
-# A comment with the original pattern and its type is left in the output
-# file to make it easy to understand the matches.
-#
-# It uses elfdump when present (native), GNU readelf otherwise.
-# It depends on the GNU version of c++filt, since it must understand the
-# GNU mangling style.
-
-use FileHandle;
-use IPC::Open2;
-
-# Enforce C locale.
-$ENV{'LC_ALL'} = "C";
-$ENV{'LANG'} = "C";
-
-# Input version script, GNU style.
-my $symvers = shift;
-
-##########
-# Get all the symbols from the library, match them, and add them to a hash.
-
-my %sym_hash = ();
-
-# List of objects and archives to process.
-my @OBJECTS = ();
-
-# List of shared objects to omit from processing.
-my @SHAREDOBJS = ();
-
-# Filter out those input archives that have corresponding shared objects to
-# avoid adding all symbols matched in the archive to the output map.
-foreach $file (@ARGV) {
-    if (($so = $file) =~ s/\.a$/.so/ && -e $so) {
-    printf STDERR "omitted $file -> $so\n";
-    push (@SHAREDOBJS, $so);
-    } else {
-    push (@OBJECTS, $file);
-    }
-}
-
-# We need to detect and ignore hidden symbols.  Solaris nm can only detect
-# this in the harder to parse default output format, and GNU nm not at all,
-# so use elfdump -s in the native case and GNU readelf -s otherwise.
-# GNU objdump -t cannot be used since it produces a variable number of
-# columns.
-
-# The path to elfdump.
-my $elfdump = "/usr/ccs/bin/elfdump";
-
-if (-f $elfdump) {
-    open ELFDUMP,$elfdump.' -s '.(join ' ',@OBJECTS).'|' or die $!;
-    my $skip_arsym = 0;
-
-    while (<ELFDUMP>) {
-    chomp;
-
-    # Ignore empty lines.
-    if (/^$/) {
-        # End of archive symbol table, stop skipping.
-        $skip_arsym = 0 if $skip_arsym;
-        next;
-    }
-
-    # Keep skipping until end of archive symbol table.
-    next if ($skip_arsym);
-
-    # Ignore object name header for individual objects and archives.
-    next if (/:$/);
-
-    # Ignore table header lines.
-    next if (/^Symbol Table Section:/);
-    next if (/index.*value.*size/);
-
-    # Start of archive symbol table: start skipping.
-    if (/^Symbol Table: \(archive/) {
-        $skip_arsym = 1;
-        next;
-    }
-
-    # Split table.
-    (undef, undef, undef, undef, $bind, $oth, undef, $shndx, $name) = split;
-
-    # Error out for unknown input.
-    die "unknown input line:\n$_" unless defined($bind);
-
-    # Ignore local symbols.
-    next if ($bind eq "LOCL");
-    # Ignore hidden symbols.
-    next if ($oth eq "H");
-    # Ignore undefined symbols.
-    next if ($shndx eq "UNDEF");
-    # Error out for unhandled cases.
-    if ($bind !~ /^(GLOB|WEAK)/ or $oth ne "D") {
-        die "unhandled symbol:\n$_";
-    }
-
-    # Remember symbol.
-    $sym_hash{$name}++;
-    }
-    close ELFDUMP or die "$elfdump error";
-} else {
-    open READELF, 'readelf -s -W '.(join ' ',@OBJECTS).'|' or die $!;
-    # Process each symbol.
-    while (<READELF>) {
-    chomp;
-
-    # Ignore empty lines.
-    next if (/^$/);
-
-    # Ignore object name header.
-    next if (/^File: .*$/);
-
-    # Ignore table header lines.
-    next if (/^Symbol table.*contains.*:/);
-    next if (/Num:.*Value.*Size/);
-
-    # Split table.
-    (undef, undef, undef, undef, $bind, $vis, $ndx, $name) = split;
-
-    # Error out for unknown input.
-    die "unknown input line:\n$_" unless defined($bind);
-
-    # Ignore local symbols.
-    next if ($bind eq "LOCAL");
-    # Ignore hidden symbols.
-    next if ($vis eq "HIDDEN");
-    # Ignore undefined symbols.
-    next if ($ndx eq "UND");
-    # Error out for unhandled cases.
-    if ($bind !~ /^(GLOBAL|WEAK)/ or $vis ne "DEFAULT") {
-        die "unhandled symbol:\n$_";
-    }
-
-    # Remember symbol.
-    $sym_hash{$name}++;
-    }
-    close READELF or die "readelf error";
-}
-
-##########
-# The various types of glob patterns.
-#
-# A glob pattern that is to be applied to the demangled name: 'cxx'.
-# A glob patterns that applies directly to the name in the .o files: 'glob'.
-# This pattern is ignored; used for local variables (usually just '*'): 'ign'.
-
-# The type of the current pattern.
-my $glob = 'glob';
-
-# We're currently inside `extern "C++"', which Sun ld doesn't understand.
-my $in_extern = 0;
-
-# The c++filt command to use.  This *must* be GNU c++filt; the Sun Studio
-# c++filt doesn't handle the GNU mangling style.
-my $cxxfilt = $ENV{'CXXFILT'} || "c++filt";
-
-# The current version name.
-my $current_version = "";
-
-# Was there any attempt to match a symbol to this version?
-my $matches_attempted;
-
-# The number of versions which matched this symbol.
-my $matched_symbols;
-
-open F,$symvers or die $!;
-
-# Print information about generating this file
-print "# This file was generated by make_sunver.pl.  DO NOT EDIT!\n";
-print "# It was generated by:\n";
-printf "# %s %s %s\n", $0, $symvers, (join ' ',@ARGV);
-printf "# Omitted archives with corresponding shared libraries: %s\n",
-    (join ' ', @SHAREDOBJS) if $#SHAREDOBJS >= 0;
-print "#\n\n";
-
-print "\$mapfile_version 2\n";
-
-while (<F>) {
-    # Lines of the form '};'
-    if (/^([ \t]*)(\}[ \t]*;[ \t]*)$/) {
-    $glob = 'glob';
-    if ($in_extern) {
-        $in_extern--;
-        print "$1##$2\n";
-    } else {
-        print;
-    }
-    next;
-    }
-
-    # Lines of the form '} SOME_VERSION_NAME_1.0;'
-    if (/^[ \t]*\}[ \tA-Z0-9_.a-z]+;[ \t]*$/) {
-    $glob = 'glob';
-    # We tried to match symbols agains this version, but none matched.
-    # Emit dummy hidden symbol to avoid marking this version WEAK.
-    if ($matches_attempted && $matched_symbols == 0) {
-        print "  hidden:\n";
-        print "    .force_WEAK_off_$current_version = DATA S0x0 V0x0;\n";
-    }
-    print; next;
-    }
-
-    # Comment and blank lines
-    if (/^[ \t]*\#/) { print; next; }
-    if (/^[ \t]*$/) { print; next; }
-
-    # Lines of the form '{'
-    if (/^([ \t]*){$/) {
-    if ($in_extern) {
-        print "$1##{\n";
-    } else {
-        print;
-    }
-    next;
-    }
-
-    # Lines of the form 'SOME_VERSION_NAME_1.1 {'
-    if (/^([A-Z0-9_.]+)[ \t]+{$/) {
-    # Record version name.
-    $current_version = $1;
-    # Reset match attempts, #matched symbols for this version.
-    $matches_attempted = 0;
-    $matched_symbols = 0;
-    print "SYMBOL_VERSION $1 {\n";
-    next;
-    }
-
-    # Ignore 'global:'
-    if (/^[ \t]*global:$/) { print; next; }
-
-    # After 'local:', globs should be ignored, they won't be exported.
-    if (/^[ \t]*local:$/) {
-    $glob = 'ign';
-    print;
-    next;
-    }
-
-    # After 'extern "C++"', globs are C++ patterns
-    if (/^([ \t]*)(extern \"C\+\+\"[ \t]*)$/) {
-    $in_extern++;
-    $glob = 'cxx';
-    # Need to comment, Sun ld cannot handle this.
-    print "$1##$2\n"; next;
-    }
-
-    # Chomp newline now we're done with passing through the input file.
-    chomp;
-
-    # Catch globs.  Note that '{}' is not allowed in globs by this script,
-    # so only '*' and '[]' are available.
-    if (/^([ \t]*)([^ \t;{}#]+);?[ \t]*$/) {
-    my $ws = $1;
-    my $ptn = $2;
-    # Turn the glob into a regex by replacing '*' with '.*', '?' with '.'.
-    # Keep $ptn so we can still print the original form.
-    ($pattern = $ptn) =~ s/\*/\.\*/g;
-    $pattern =~ s/\?/\./g;
-
-    if ($glob eq 'ign') {
-        # We're in a local: * section; just continue.
-        print "$_\n";
-        next;
-    }
-
-    # Print the glob commented for human readers.
-    print "$ws##$ptn ($glob)\n";
-    # We tried to match a symbol to this version.
-    $matches_attempted++;
-
-    if ($glob eq 'glob') {
-        my %ptn_syms = ();
-
-        # Match ptn against symbols in %sym_hash.
-        foreach my $sym (keys %sym_hash) {
-        # Maybe it matches one of the patterns based on the symbol in
-        # the .o file.
-        $ptn_syms{$sym}++ if ($sym =~ /^$pattern$/);
-        }
-
-        foreach my $sym (sort keys(%ptn_syms)) {
-        $matched_symbols++;
-        print "$ws$sym;\n";
-        }
-    } elsif ($glob eq 'cxx') {
-        my %dem_syms = ();
-
-        # Verify that we're actually using GNU c++filt.  Other versions
-        # most likely cannot handle GNU style symbol mangling.
-        my $cxxout = `$cxxfilt --version 2>&1`;
-        $cxxout =~ m/GNU/ or die "$0 requires GNU c++filt to function";
-
-        # Talk to c++filt through a pair of file descriptors.
-        # Need to start a fresh instance per pattern, otherwise the
-        # process grows to 500+ MB.
-        my $pid = open2(*FILTIN, *FILTOUT, $cxxfilt) or die $!;
-
-        # Match ptn against symbols in %sym_hash.
-        foreach my $sym (keys %sym_hash) {
-        # No?  Well, maybe its demangled form matches one of those
-        # patterns.
-        printf FILTOUT "%s\n",$sym;
-        my $dem = <FILTIN>;
-        chomp $dem;
-        $dem_syms{$sym}++ if ($dem =~ /^$pattern$/);
-        }
-
-        close FILTOUT or die "c++filt error";
-        close FILTIN or die "c++filt error";
-        # Need to wait for the c++filt process to avoid lots of zombies.
-        waitpid $pid, 0;
-
-        foreach my $sym (sort keys(%dem_syms)) {
-        $matched_symbols++;
-        print "$ws$sym;\n";
-        }
-    } else {
-        # No?  Well, then ignore it.
-    }
-    next;
-    }
-    # Important sanity check.  This script can't handle lots of formats
-    # that GNU ld can, so be sure to error out if one is seen!
-    die "strange line `$_'";
-}
-close F;
diff --git a/configure b/configure
index 080d93a..2595ee7 100755
--- a/configure
+++ b/configure
@@ -6331,14 +6331,15 @@
 enabled libopenjpeg       && { check_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version ||
                                { require_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } }
 enabled libopenmpt        && require_pkg_config libopenmpt "libopenmpt >= 0.2.6557" libopenmpt/libopenmpt.h openmpt_module_create -lstdc++ && append libopenmpt_extralibs "-lstdc++"
-enabled libopus           && {
-    enabled libopus_decoder && {
-        require_pkg_config libopus opus opus_multistream.h opus_multistream_decoder_create
-    }
-    enabled libopus_encoder && {
-        require_pkg_config libopus opus opus_multistream.h opus_multistream_surround_encoder_create
-    }
-}
+# Fuchsia uses a built in copy of libopus that is not visible to pkg-config.
+# enabled libopus           && {
+#     enabled libopus_decoder && {
+#         require_pkg_config libopus opus opus_multistream.h opus_multistream_decoder_create
+#     }
+#     enabled libopus_encoder && {
+#         require_pkg_config libopus opus opus_multistream.h opus_multistream_surround_encoder_create
+#     }
+# }
 enabled libpulse          && require_pkg_config libpulse libpulse pulse/pulseaudio.h pa_context_new
 enabled librabbitmq       && require_pkg_config librabbitmq "librabbitmq >= 0.7.1" amqp.h amqp_new_connection
 enabled librav1e          && require_pkg_config librav1e "rav1e >= 0.1.0" rav1e.h rav1e_context_new
diff --git a/doc/Doxyfile b/doc/Doxyfile
index 0891899..4f0c5ab 100644
--- a/doc/Doxyfile
+++ b/doc/Doxyfile
@@ -38,7 +38,7 @@
 # could be handy for archiving the generated documentation or if some version
 # control system is used.
 
-PROJECT_NUMBER         =
+PROJECT_NUMBER         = 3.4.2
 
 # Using the PROJECT_BRIEF tag one can provide an optional one line description
 # for a project that appears at the top of each page and should give viewer a
diff --git a/doc/t2h.pm b/doc/t2h.pm
deleted file mode 100644
index e83d564..0000000
--- a/doc/t2h.pm
+++ /dev/null
@@ -1,339 +0,0 @@
-# makeinfo HTML output init file
-#
-# Copyright (c) 2011, 2012 Free Software Foundation, Inc.
-# Copyright (c) 2014 Andreas Cadhalpun
-# Copyright (c) 2014 Tiancheng "Timothy" Gu
-#
-# 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 3 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
-
-# no navigation elements
-set_from_init_file('HEADERS', 0);
-
-sub ffmpeg_heading_command($$$$$)
-{
-    my $self = shift;
-    my $cmdname = shift;
-    my $command = shift;
-    my $args = shift;
-    my $content = shift;
-
-    my $result = '';
-
-    # not clear that it may really happen
-    if ($self->in_string) {
-        $result .= $self->command_string($command) ."\n" if ($cmdname ne 'node');
-        $result .= $content if (defined($content));
-        return $result;
-    }
-
-    my $element_id = $self->command_id($command);
-    $result .= "<a name=\"$element_id\"></a>\n"
-        if (defined($element_id) and $element_id ne '');
-
-    print STDERR "Process $command "
-        .Texinfo::Structuring::_print_root_command_texi($command)."\n"
-            if ($self->get_conf('DEBUG'));
-    my $element;
-    if ($Texinfo::Common::root_commands{$command->{'cmdname'}}
-        and $command->{'parent'}
-        and $command->{'parent'}->{'type'}
-        and $command->{'parent'}->{'type'} eq 'element') {
-        $element = $command->{'parent'};
-    }
-    if ($element) {
-        $result .= &{$self->{'format_element_header'}}($self, $cmdname,
-                                                       $command, $element);
-    }
-
-    my $heading_level;
-    # node is used as heading if there is nothing else.
-    if ($cmdname eq 'node') {
-        if (!$element or (!$element->{'extra'}->{'section'}
-            and $element->{'extra'}->{'node'}
-            and $element->{'extra'}->{'node'} eq $command
-             # bogus node may not have been normalized
-            and defined($command->{'extra'}->{'normalized'}))) {
-            if ($command->{'extra'}->{'normalized'} eq 'Top') {
-                $heading_level = 0;
-            } else {
-                $heading_level = 3;
-            }
-        }
-    } else {
-        $heading_level = $command->{'level'};
-    }
-
-    my $heading = $self->command_text($command);
-    # $heading not defined may happen if the command is a @node, for example
-    # if there is an error in the node.
-    if (defined($heading) and $heading ne '' and defined($heading_level)) {
-
-        if ($Texinfo::Common::root_commands{$cmdname}
-            and $Texinfo::Common::sectioning_commands{$cmdname}) {
-            my $content_href = $self->command_contents_href($command, 'contents',
-                                                            $self->{'current_filename'});
-            if ($content_href) {
-                my $this_href = $content_href =~ s/^\#toc-/\#/r;
-                $heading .= '<span class="pull-right">'.
-                              '<a class="anchor hidden-xs" '.
-                                 "href=\"$this_href\" aria-hidden=\"true\">".
-            ($ENV{"FA_ICONS"} ? '<i class="fa fa-link"></i>'
-                              : '#').
-                              '</a> '.
-                              '<a class="anchor hidden-xs"'.
-                                 "href=\"$content_href\" aria-hidden=\"true\">".
-            ($ENV{"FA_ICONS"} ? '<i class="fa fa-navicon"></i>'
-                              : 'TOC').
-                              '</a>'.
-                            '</span>';
-            }
-        }
-
-        if ($self->in_preformatted()) {
-            $result .= $heading."\n";
-        } else {
-            # if the level was changed, set the command name right
-            if ($cmdname ne 'node'
-                and $heading_level ne $Texinfo::Common::command_structuring_level{$cmdname}) {
-                $cmdname
-                    = $Texinfo::Common::level_to_structuring_command{$cmdname}->[$heading_level];
-            }
-            $result .= &{$self->{'format_heading_text'}}(
-                        $self, $cmdname, $heading,
-                        $heading_level +
-                        $self->get_conf('CHAPTER_HEADER_LEVEL') - 1, $command);
-        }
-    }
-    $result .= $content if (defined($content));
-    return $result;
-}
-
-foreach my $command (keys(%Texinfo::Common::sectioning_commands), 'node') {
-    texinfo_register_command_formatting($command, \&ffmpeg_heading_command);
-}
-
-# print the TOC where @contents is used
-set_from_init_file('INLINE_CONTENTS', 1);
-
-# make chapters <h2>
-set_from_init_file('CHAPTER_HEADER_LEVEL', 2);
-
-# Do not add <hr>
-set_from_init_file('DEFAULT_RULE', '');
-set_from_init_file('BIG_RULE', '');
-
-# Customized file beginning
-sub ffmpeg_begin_file($$$)
-{
-    my $self = shift;
-    my $filename = shift;
-    my $element = shift;
-
-    my $command;
-    if ($element and $self->get_conf('SPLIT')) {
-        $command = $self->element_command($element);
-    }
-
-    my ($title, $description, $encoding, $date, $css_lines,
-        $doctype, $bodytext, $copying_comment, $after_body_open,
-        $extra_head, $program_and_version, $program_homepage,
-        $program, $generator) = $self->_file_header_informations($command);
-
-    my $links = $self->_get_links ($filename, $element);
-
-    my $head1 = $ENV{"FFMPEG_HEADER1"} || <<EOT;
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<!-- Created by $program_and_version, $program_homepage -->
-  <head>
-    <meta charset="utf-8">
-    <title>
-EOT
-    my $head_title = <<EOT;
-      $title
-EOT
-
-    my $head2 = $ENV{"FFMPEG_HEADER2"} || <<EOT;
-    </title>
-    <meta name="viewport" content="width=device-width,initial-scale=1.0">
-    <link rel="stylesheet" type="text/css" href="bootstrap.min.css">
-    <link rel="stylesheet" type="text/css" href="style.min.css">
-  </head>
-  <body>
-    <div class="container">
-      <h1>
-EOT
-
-    my $head3 = $ENV{"FFMPEG_HEADER3"} || <<EOT;
-      </h1>
-EOT
-
-    return $head1 . $head_title . $head2 . $head_title . $head3;
-}
-texinfo_register_formatting_function('begin_file', \&ffmpeg_begin_file);
-
-sub ffmpeg_program_string($)
-{
-  my $self = shift;
-  if (defined($self->get_conf('PROGRAM'))
-      and $self->get_conf('PROGRAM') ne ''
-      and defined($self->get_conf('PACKAGE_URL'))) {
-    return $self->convert_tree(
-      $self->gdt('This document was generated using @uref{{program_homepage}, @emph{{program}}}.',
-         { 'program_homepage' => $self->get_conf('PACKAGE_URL'),
-           'program' => $self->get_conf('PROGRAM') }));
-  } else {
-    return $self->convert_tree(
-      $self->gdt('This document was generated automatically.'));
-  }
-}
-texinfo_register_formatting_function('program_string', \&ffmpeg_program_string);
-
-# Customized file ending
-sub ffmpeg_end_file($)
-{
-    my $self = shift;
-    my $program_string = &{$self->{'format_program_string'}}($self);
-    my $program_text = <<EOT;
-      <p style="font-size: small;">
-        $program_string
-      </p>
-EOT
-    my $footer = $ENV{FFMPEG_FOOTER} || <<EOT;
-    </div>
-  </body>
-</html>
-EOT
-    return $program_text . $footer;
-}
-texinfo_register_formatting_function('end_file', \&ffmpeg_end_file);
-
-# Dummy title command
-# Ignore title. Title is handled through ffmpeg_begin_file().
-set_from_init_file('USE_TITLEPAGE_FOR_TITLE', 1);
-sub ffmpeg_title($$$$)
-{
-    return '';
-}
-
-texinfo_register_command_formatting('titlefont',
-                                    \&ffmpeg_title);
-
-# Customized float command. Part of code borrowed from GNU Texinfo.
-sub ffmpeg_float($$$$$)
-{
-    my $self = shift;
-    my $cmdname = shift;
-    my $command = shift;
-    my $args = shift;
-    my $content = shift;
-
-    my ($caption, $prepended) = Texinfo::Common::float_name_caption($self,
-                                                                $command);
-    my $caption_text = '';
-    my $prepended_text;
-    my $prepended_save = '';
-
-    if ($self->in_string()) {
-        if ($prepended) {
-            $prepended_text = $self->convert_tree_new_formatting_context(
-                $prepended, 'float prepended');
-        } else {
-            $prepended_text = '';
-        }
-        if ($caption) {
-            $caption_text = $self->convert_tree_new_formatting_context(
-                {'contents' => $caption->{'args'}->[0]->{'contents'}},
-                'float caption');
-        }
-        return $prepended.$content.$caption_text;
-    }
-
-    my $id = $self->command_id($command);
-    my $label;
-    if (defined($id) and $id ne '') {
-        $label = "<a name=\"$id\"></a>";
-    } else {
-        $label = '';
-    }
-
-    if ($prepended) {
-        if ($caption) {
-            # prepend the prepended tree to the first paragraph
-            my @caption_original_contents = @{$caption->{'args'}->[0]->{'contents'}};
-            my @caption_contents;
-            my $new_paragraph;
-            while (@caption_original_contents) {
-                my $content = shift @caption_original_contents;
-                if ($content->{'type'} and $content->{'type'} eq 'paragraph') {
-                    %{$new_paragraph} = %{$content};
-                    $new_paragraph->{'contents'} = [@{$content->{'contents'}}];
-                    unshift (@{$new_paragraph->{'contents'}}, {'cmdname' => 'strong',
-                             'args' => [{'type' => 'brace_command_arg',
-                                                    'contents' => [$prepended]}]});
-                    push @caption_contents, $new_paragraph;
-                    last;
-                } else {
-                    push @caption_contents, $content;
-                }
-            }
-            push @caption_contents, @caption_original_contents;
-            if ($new_paragraph) {
-                $caption_text = $self->convert_tree_new_formatting_context(
-                 {'contents' => \@caption_contents}, 'float caption');
-                $prepended_text = '';
-            }
-        }
-        if ($caption_text eq '') {
-            $prepended_text = $self->convert_tree_new_formatting_context(
-                $prepended, 'float prepended');
-            if ($prepended_text ne '') {
-                $prepended_save = $prepended_text;
-                $prepended_text = '<p><strong>'.$prepended_text.'</strong></p>';
-            }
-        }
-    } else {
-        $prepended_text = '';
-    }
-
-    if ($caption and $caption_text eq '') {
-        $caption_text = $self->convert_tree_new_formatting_context(
-            $caption->{'args'}->[0], 'float caption');
-    }
-    if ($prepended_text.$caption_text ne '') {
-        $prepended_text = $self->_attribute_class('div','float-caption'). '>'
-                . $prepended_text;
-        $caption_text .= '</div>';
-    }
-    my $html_class = '';
-    if ($prepended_save =~ /NOTE/) {
-        $html_class = 'info';
-        $prepended_text = '';
-        $caption_text   = '';
-    } elsif ($prepended_save =~ /IMPORTANT/) {
-        $html_class = 'warning';
-        $prepended_text = '';
-        $caption_text   = '';
-    }
-    return $self->_attribute_class('div', $html_class). '>' . "\n" .
-        $prepended_text . $caption_text . $content . '</div>';
-}
-
-texinfo_register_command_formatting('float',
-                                    \&ffmpeg_float);
-
-1;
diff --git a/doc/texi2pod.pl b/doc/texi2pod.pl
deleted file mode 100644
index 9a9b34f..0000000
--- a/doc/texi2pod.pl
+++ /dev/null
@@ -1,464 +0,0 @@
-#!/usr/bin/env perl
-
-#   Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
-
-# This file is part of GNU CC.
-
-# GNU CC 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, or (at your option)
-# any later version.
-
-# GNU CC 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 GNU CC; see the file COPYING.  If not, write to
-# the Free Software Foundation, 51 Franklin Street, Fifth Floor,
-# Boston, MA 02110-1301 USA
-
-# This does trivial (and I mean _trivial_) conversion of Texinfo
-# markup to Perl POD format.  It's intended to be used to extract
-# something suitable for a manpage from a Texinfo document.
-
-use warnings;
-
-$output = 0;
-$skipping = 0;
-%chapters = ();
-@chapters_sequence = ();
-$chapter = "";
-@icstack = ();
-@endwstack = ();
-@skstack = ();
-@instack = ();
-$shift = "";
-%defs = ();
-$fnno = 1;
-$inf = "";
-@ibase = ();
-
-while ($_ = shift) {
-    if (/^-D(.*)$/) {
-        if ($1 ne "") {
-            $flag = $1;
-        } else {
-            $flag = shift;
-        }
-        $value = "";
-        ($flag, $value) = ($flag =~ /^([^=]+)(?:=(.+))?/);
-        die "no flag specified for -D\n"
-            unless $flag ne "";
-        die "flags may only contain letters, digits, hyphens, dashes and underscores\n"
-            unless $flag =~ /^[a-zA-Z0-9_-]+$/;
-        $defs{$flag} = $value;
-    } elsif (/^-I(.*)$/) {
-        push @ibase, $1 ne "" ? $1 : shift;
-    } elsif (/^-/) {
-        usage();
-    } else {
-        $in = $_, next unless defined $in;
-        $out = $_, next unless defined $out;
-        usage();
-    }
-}
-
-push @ibase, ".";
-
-if (defined $in) {
-    $inf = gensym();
-    open($inf, "<$in") or die "opening \"$in\": $!\n";
-    push @ibase, $1 if $in =~ m|^(.+)/[^/]+$|;
-} else {
-    $inf = \*STDIN;
-}
-
-if (defined $out) {
-    open(STDOUT, ">$out") or die "opening \"$out\": $!\n";
-}
-
-while(defined $inf) {
-INF: while(<$inf>) {
-    # Certain commands are discarded without further processing.
-    /^\@(?:
-         [a-z]+index            # @*index: useful only in complete manual
-         |need                  # @need: useful only in printed manual
-         |(?:end\s+)?group      # @group .. @end group: ditto
-         |page                  # @page: ditto
-         |node                  # @node: useful only in .info file
-         |(?:end\s+)?ifnottex   # @ifnottex .. @end ifnottex: use contents
-        )\b/x and next;
-
-    chomp;
-
-    # Look for filename and title markers.
-    /^\@setfilename\s+([^.]+)/ and $fn = $1, next;
-    /^\@settitle\s+([^.]+)/ and $tl = postprocess($1), next;
-
-    # Identify a man title but keep only the one we are interested in.
-    /^\@c\s+man\s+title\s+([A-Za-z0-9-]+)\s+(.+)/ and do {
-        if (exists $defs{$1}) {
-            $fn = $1;
-            $tl = postprocess($2);
-        }
-        next;
-    };
-
-    /^\@include\s+(.+)$/ and do {
-        push @instack, $inf;
-        $inf = gensym();
-
-        for (@ibase) {
-            open($inf, "<" . $_ . "/" . $1) and next INF;
-        }
-        die "cannot open $1: $!\n";
-    };
-
-    /^\@chapter\s+([A-Za-z ]+)/ and do {
-        # close old chapter
-        $chapters{$chapter_name} .= postprocess($chapter) if ($chapter_name);
-
-        # start new chapter
-        $chapter_name = $1, push (@chapters_sequence, $chapter_name) unless $skipping;
-        $chapters{$chapter_name} = "" unless exists $chapters{$chapter_name};
-        $chapter = "";
-        $output = 1;
-        next;
-    };
-
-    /^\@bye/ and do {
-        # close old chapter
-        $chapters{$chapter_name} .= postprocess($chapter) if ($chapter_name);
-        last INF;
-    };
-
-    # handle variables
-    /^\@set\s+([a-zA-Z0-9_-]+)\s*(.*)$/ and do {
-        $defs{$1} = $2;
-        next;
-    };
-    /^\@clear\s+([a-zA-Z0-9_-]+)/ and do {
-        delete $defs{$1};
-        next;
-    };
-
-    next unless $output;
-
-    # Discard comments.  (Can't do it above, because then we'd never see
-    # @c man lines.)
-    /^\@c\b/ and next;
-
-    # End-block handler goes up here because it needs to operate even
-    # if we are skipping.
-    /^\@end\s+([a-z]+)/ and do {
-        # Ignore @end foo, where foo is not an operation which may
-        # cause us to skip, if we are presently skipping.
-        my $ended = $1;
-        next if $skipping && $ended !~ /^(?:ifset|ifclear|ignore|menu|iftex|ifhtml|ifnothtml)$/;
-
-        die "\@end $ended without \@$ended at line $.\n" unless defined $endw;
-        die "\@$endw ended by \@end $ended at line $.\n" unless $ended eq $endw;
-
-        $endw = pop @endwstack;
-
-        if ($ended =~ /^(?:ifset|ifclear|ignore|menu|iftex|ifhtml|ifnothtml)$/) {
-            $skipping = pop @skstack;
-            next;
-        } elsif ($ended =~ /^(?:example|smallexample|verbatim|display)$/) {
-            $shift = "";
-            $_ = "";        # need a paragraph break
-        } elsif ($ended =~ /^(?:itemize|enumerate|(?:multi|[fv])?table)$/) {
-            $_ = "\n=back\n";
-            $ic = pop @icstack;
-        } else {
-            die "unknown command \@end $ended at line $.\n";
-        }
-    };
-
-    # We must handle commands which can cause skipping even while we
-    # are skipping, otherwise we will not process nested conditionals
-    # correctly.
-    /^\@ifset\s+([a-zA-Z0-9_-]+)/ and do {
-        push @endwstack, $endw;
-        push @skstack, $skipping;
-        $endw = "ifset";
-        $skipping = 1 unless exists $defs{$1};
-        next;
-    };
-
-    /^\@ifclear\s+([a-zA-Z0-9_-]+)/ and do {
-        push @endwstack, $endw;
-        push @skstack, $skipping;
-        $endw = "ifclear";
-        $skipping = 1 if exists $defs{$1};
-        next;
-    };
-
-    /^\@(ignore|menu|iftex|ifhtml|ifnothtml)\b/ and do {
-        push @endwstack, $endw;
-        push @skstack, $skipping;
-        $endw = $1;
-        $skipping = $endw !~ /ifnothtml/;
-        next;
-    };
-
-    next if $skipping;
-
-    # Character entities.  First the ones that can be replaced by raw text
-    # or discarded outright:
-    s/\@copyright\{\}/(c)/g;
-    s/\@dots\{\}/.../g;
-    s/\@enddots\{\}/..../g;
-    s/\@([.!? ])/$1/g;
-    s/\@[:-]//g;
-    s/\@bullet(?:\{\})?/*/g;
-    s/\@TeX\{\}/TeX/g;
-    s/\@pounds\{\}/\#/g;
-    s/\@minus(?:\{\})?/-/g;
-
-    # Now the ones that have to be replaced by special escapes
-    # (which will be turned back into text by unmunge())
-    s/&/&amp;/g;
-    s/\@\{/&lbrace;/g;
-    s/\@\}/&rbrace;/g;
-    s/\@\@/&at;/g;
-
-    # Inside a verbatim block, handle @var specially.
-    if ($shift ne "") {
-        s/\@var\{([^\}]*)\}/<$1>/g;
-    }
-
-    # POD doesn't interpret E<> inside a verbatim block.
-    if ($shift eq "") {
-        s/</&lt;/g;
-        s/>/&gt;/g;
-    } else {
-        s/</&LT;/g;
-        s/>/&GT;/g;
-    }
-
-    # Single line command handlers.
-
-    /^\@(?:section|unnumbered|unnumberedsec|center|heading)\s+(.+)$/
-        and $_ = "\n=head2 $1\n";
-    /^\@(?:subsection|subheading)\s+(.+)$/
-        and $_ = "\n=head3 $1\n";
-    /^\@(?:subsubsection|subsubheading)\s+(.+)$/
-        and $_ = "\n=head4 $1\n";
-
-    # Block command handlers:
-    /^\@itemize\s*(\@[a-z]+|\*|-)?/ and do {
-        push @endwstack, $endw;
-        push @icstack, $ic;
-        $ic = $1 ? $1 : "*";
-        $_ = "\n=over 4\n";
-        $endw = "itemize";
-    };
-
-    /^\@enumerate(?:\s+([a-zA-Z0-9]+))?/ and do {
-        push @endwstack, $endw;
-        push @icstack, $ic;
-        if (defined $1) {
-            $ic = $1 . ".";
-        } else {
-            $ic = "1.";
-        }
-        $_ = "\n=over 4\n";
-        $endw = "enumerate";
-    };
-
-    /^\@((?:multi|[fv])?table)\s+(\@[a-z]+)/ and do {
-        push @endwstack, $endw;
-        push @icstack, $ic;
-        $endw = $1;
-        $ic = $2;
-        $ic =~ s/\@(?:samp|strong|key|gcctabopt|option|env|command)/B/;
-        $ic =~ s/\@(?:code|kbd)/C/;
-        $ic =~ s/\@(?:dfn|var|emph|cite|i)/I/;
-        $ic =~ s/\@(?:file)/F/;
-        $ic =~ s/\@(?:columnfractions)//;
-        $_ = "\n=over 4\n";
-    };
-
-    /^\@(multitable)\s+{.*/ and do {
-        push @endwstack, $endw;
-        push @icstack, $ic;
-        $endw = $1;
-        $ic = "";
-        $_ = "\n=over 4\n";
-    };
-
-    /^\@((?:small)?example|verbatim|display)/ and do {
-        push @endwstack, $endw;
-        $endw = $1;
-        $shift = "\t";
-        $_ = "";        # need a paragraph break
-    };
-
-    /^\@item\s+(.*\S)\s*$/ and $endw eq "multitable" and do {
-        my $columns = $1;
-        $columns =~ s/\@tab/ : /;
-
-        $_ = "\n=item B&LT;". $columns ."&GT;\n";
-    };
-
-    /^\@tab\s+(.*\S)\s*$/ and $endw eq "multitable" and do {
-        my $columns = $1;
-        $columns =~ s/\@tab//;
-
-        $_ = $columns;
-        $chapter =~ s/$//;
-    };
-
-    /^\@itemx?\s*(.+)?$/ and do {
-        if (defined $1) {
-            # Entity escapes prevent munging by the <> processing below.
-            $_ = "\n=item $ic\&LT;$1\&GT;\n";
-        } else {
-            $_ = "\n=item $ic\n";
-            $ic =~ y/A-Ya-y/B-Zb-z/;
-            $ic =~ s/(\d+)/$1 + 1/eg;
-        }
-    };
-
-    $chapter .= $shift.$_."\n";
-}
-# End of current file.
-close($inf);
-$inf = pop @instack;
-}
-
-die "No filename or title\n" unless defined $fn && defined $tl;
-
-# always use utf8
-print "=encoding utf8\n\n";
-
-$chapters{NAME} = "$fn \- $tl\n";
-$chapters{FOOTNOTES} .= "=back\n" if exists $chapters{FOOTNOTES};
-
-unshift @chapters_sequence, "NAME";
-for $chapter (@chapters_sequence) {
-    if (exists $chapters{$chapter}) {
-        $head = uc($chapter);
-        print "=head1 $head\n\n";
-        print scalar unmunge ($chapters{$chapter});
-        print "\n";
-    }
-}
-
-sub usage
-{
-    die "usage: $0 [-D toggle...] [infile [outfile]]\n";
-}
-
-sub postprocess
-{
-    local $_ = $_[0];
-
-    # @value{foo} is replaced by whatever 'foo' is defined as.
-    while (m/(\@value\{([a-zA-Z0-9_-]+)\})/g) {
-        if (! exists $defs{$2}) {
-            print STDERR "Option $2 not defined\n";
-            s/\Q$1\E//;
-        } else {
-            $value = $defs{$2};
-            s/\Q$1\E/$value/;
-        }
-    }
-
-    # Formatting commands.
-    # Temporary escape for @r.
-    s/\@r\{([^\}]*)\}/R<$1>/g;
-    s/\@(?:dfn|var|emph|cite|i)\{([^\}]*)\}/I<$1>/g;
-    s/\@(?:code|kbd)\{([^\}]*)\}/C<$1>/g;
-    s/\@(?:gccoptlist|samp|strong|key|option|env|command|b)\{([^\}]*)\}/B<$1>/g;
-    s/\@sc\{([^\}]*)\}/\U$1/g;
-    s/\@file\{([^\}]*)\}/F<$1>/g;
-    s/\@w\{([^\}]*)\}/S<$1>/g;
-    s/\@(?:dmn|math)\{([^\}]*)\}/$1/g;
-
-    # Cross references are thrown away, as are @noindent and @refill.
-    # (@noindent is impossible in .pod, and @refill is unnecessary.)
-    # @* is also impossible in .pod; we discard it and any newline that
-    # follows it.  Similarly, our macro @gol must be discarded.
-
-    s/\@anchor\{(?:[^\}]*)\}//g;
-    s/\(?\@xref\{(?:[^\}]*)\}(?:[^.<]|(?:<[^<>]*>))*\.\)?//g;
-    s/\s+\(\@pxref\{(?:[^\}]*)\}\)//g;
-    s/;\s+\@pxref\{(?:[^\}]*)\}//g;
-    s/\@ref\{(?:[^,\}]*,)(?:[^,\}]*,)([^,\}]*).*\}/B<$1>/g;
-    s/\@ref\{([^\}]*)\}/B<$1>/g;
-    s/\@noindent\s*//g;
-    s/\@refill//g;
-    s/\@gol//g;
-    s/\@\*\s*\n?//g;
-
-    # @uref can take one, two, or three arguments, with different
-    # semantics each time.  @url and @email are just like @uref with
-    # one argument, for our purposes.
-    s/\@(?:uref|url|email)\{([^\},]*),?[^\}]*\}/&lt;B<$1>&gt;/g;
-    s/\@uref\{([^\},]*),([^\},]*)\}/$2 (C<$1>)/g;
-    s/\@uref\{([^\},]*),([^\},]*),([^\},]*)\}/$3/g;
-
-    # Turn B<blah I<blah> blah> into B<blah> I<blah> B<blah> to
-    # match Texinfo semantics of @emph inside @samp.  Also handle @r
-    # inside bold.
-    s/&LT;/</g;
-    s/&GT;/>/g;
-    1 while s/B<((?:[^<>]|I<[^<>]*>)*)R<([^>]*)>/B<$1>${2}B</g;
-    1 while (s/B<([^<>]*)I<([^>]+)>/B<$1>I<$2>B</g);
-    1 while (s/I<([^<>]*)B<([^>]+)>/I<$1>B<$2>I</g);
-    s/[BI]<>//g;
-    s/([BI])<(\s+)([^>]+)>/$2$1<$3>/g;
-    s/([BI])<([^>]+?)(\s+)>/$1<$2>$3/g;
-
-    # Extract footnotes.  This has to be done after all other
-    # processing because otherwise the regexp will choke on formatting
-    # inside @footnote.
-    while (/\@footnote/g) {
-        s/\@footnote\{([^\}]+)\}/[$fnno]/;
-        add_footnote($1, $fnno);
-        $fnno++;
-    }
-
-    return $_;
-}
-
-sub unmunge
-{
-    # Replace escaped symbols with their equivalents.
-    local $_ = $_[0];
-
-    s/&lt;/E<lt>/g;
-    s/&gt;/E<gt>/g;
-    s/&lbrace;/\{/g;
-    s/&rbrace;/\}/g;
-    s/&at;/\@/g;
-    s/&amp;/&/g;
-    return $_;
-}
-
-sub add_footnote
-{
-    unless (exists $chapters{FOOTNOTES}) {
-        $chapters{FOOTNOTES} = "\n=over 4\n\n";
-    }
-
-    $chapters{FOOTNOTES} .= "=item $fnno.\n\n"; $fnno++;
-    $chapters{FOOTNOTES} .= $_[0];
-    $chapters{FOOTNOTES} .= "\n\n";
-}
-
-# stolen from Symbol.pm
-{
-    my $genseq = 0;
-    sub gensym
-    {
-        my $name = "GEN" . $genseq++;
-        my $ref = \*{$name};
-        delete $::{$name};
-        return $ref;
-    }
-}
diff --git a/ffmpeg_generated.gni b/ffmpeg_generated.gni
new file mode 100644
index 0000000..6ba41ef
--- /dev/null
+++ b/ffmpeg_generated.gni
@@ -0,0 +1,464 @@
+# Copyright 2020 The Fuchsia Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# NOTE: this file is autogenerated by ffmpeg/fuchsia/scripts/generate_gn.py
+
+import("//build/config/arm.gni")
+import("ffmpeg_options.gni")
+
+# Declare empty versions of each variable for easier +=ing later.
+ffmpeg_c_sources = []
+ffmpeg_gas_sources = []
+ffmpeg_yasm_sources = []
+
+ffmpeg_c_sources += [
+  "libavcodec/ac3_parser.c",
+  "libavcodec/ac3tab.c",
+  "libavcodec/adts_parser.c",
+  "libavcodec/allcodecs.c",
+  "libavcodec/aptx.c",
+  "libavcodec/aptxdec.c",
+  "libavcodec/audio_frame_queue.c",
+  "libavcodec/avdct.c",
+  "libavcodec/avfft.c",
+  "libavcodec/avpacket.c",
+  "libavcodec/avpicture.c",
+  "libavcodec/bitstream.c",
+  "libavcodec/bitstream_filter.c",
+  "libavcodec/bitstream_filters.c",
+  "libavcodec/bsf.c",
+  "libavcodec/codec_desc.c",
+  "libavcodec/d3d11va.c",
+  "libavcodec/dct.c",
+  "libavcodec/dct32_fixed.c",
+  "libavcodec/dct32_float.c",
+  "libavcodec/decode.c",
+  "libavcodec/dirac.c",
+  "libavcodec/dv_profile.c",
+  "libavcodec/encode.c",
+  "libavcodec/fft_fixed.c",
+  "libavcodec/fft_fixed_32.c",
+  "libavcodec/fft_float.c",
+  "libavcodec/fft_init_table.c",
+  "libavcodec/flac.c",
+  "libavcodec/flac_parser.c",
+  "libavcodec/flacdata.c",
+  "libavcodec/flacdec.c",
+  "libavcodec/flacdsp.c",
+  "libavcodec/golomb.c",
+  "libavcodec/h264pred.c",
+  "libavcodec/hpeldsp.c",
+  "libavcodec/imgconvert.c",
+  "libavcodec/jni.c",
+  "libavcodec/libopus.c",
+  "libavcodec/libopusdec.c",
+  "libavcodec/mathtables.c",
+  "libavcodec/mdct_fixed.c",
+  "libavcodec/mdct_fixed_32.c",
+  "libavcodec/mdct_float.c",
+  "libavcodec/mediacodec.c",
+  "libavcodec/mjpegenc_huffman.c",
+  "libavcodec/mpeg12framerate.c",
+  "libavcodec/mpeg4audio.c",
+  "libavcodec/mpegaudio.c",
+  "libavcodec/mpegaudio_parser.c",
+  "libavcodec/mpegaudiodata.c",
+  "libavcodec/mpegaudiodec_fixed.c",
+  "libavcodec/mpegaudiodecheader.c",
+  "libavcodec/mpegaudiodsp.c",
+  "libavcodec/mpegaudiodsp_data.c",
+  "libavcodec/mpegaudiodsp_fixed.c",
+  "libavcodec/mpegaudiodsp_float.c",
+  "libavcodec/null_bsf.c",
+  "libavcodec/options.c",
+  "libavcodec/opus.c",
+  "libavcodec/opus_parser.c",
+  "libavcodec/opus_rc.c",
+  "libavcodec/opustab.c",
+  "libavcodec/parser.c",
+  "libavcodec/parsers.c",
+  "libavcodec/pcm.c",
+  "libavcodec/profiles.c",
+  "libavcodec/pthread.c",
+  "libavcodec/pthread_frame.c",
+  "libavcodec/pthread_slice.c",
+  "libavcodec/qsv_api.c",
+  "libavcodec/raw.c",
+  "libavcodec/rdft.c",
+  "libavcodec/sbc.c",
+  "libavcodec/sbcdec.c",
+  "libavcodec/sbcdec_data.c",
+  "libavcodec/utils.c",
+  "libavcodec/videodsp.c",
+  "libavcodec/vorbis.c",
+  "libavcodec/vorbis_data.c",
+  "libavcodec/vorbis_parser.c",
+  "libavcodec/vorbisdec.c",
+  "libavcodec/vorbisdsp.c",
+  "libavcodec/vp3.c",
+  "libavcodec/vp3_parser.c",
+  "libavcodec/vp3dsp.c",
+  "libavcodec/vp56rac.c",
+  "libavcodec/vp8.c",
+  "libavcodec/vp8_parser.c",
+  "libavcodec/vp8dsp.c",
+  "libavcodec/xiph.c",
+  "libavformat/allformats.c",
+  "libavformat/avio.c",
+  "libavformat/aviobuf.c",
+  "libavformat/cutils.c",
+  "libavformat/dump.c",
+  "libavformat/flac_picture.c",
+  "libavformat/flacdec.c",
+  "libavformat/format.c",
+  "libavformat/id3v1.c",
+  "libavformat/id3v2.c",
+  "libavformat/isom.c",
+  "libavformat/matroska.c",
+  "libavformat/matroskadec.c",
+  "libavformat/metadata.c",
+  "libavformat/mov.c",
+  "libavformat/mov_chan.c",
+  "libavformat/mov_esds.c",
+  "libavformat/mp3dec.c",
+  "libavformat/mux.c",
+  "libavformat/oggdec.c",
+  "libavformat/oggparsecelt.c",
+  "libavformat/oggparsedaala.c",
+  "libavformat/oggparsedirac.c",
+  "libavformat/oggparseflac.c",
+  "libavformat/oggparseogm.c",
+  "libavformat/oggparseopus.c",
+  "libavformat/oggparseskeleton.c",
+  "libavformat/oggparsespeex.c",
+  "libavformat/oggparsetheora.c",
+  "libavformat/oggparsevorbis.c",
+  "libavformat/oggparsevp8.c",
+  "libavformat/options.c",
+  "libavformat/os_support.c",
+  "libavformat/pcm.c",
+  "libavformat/protocols.c",
+  "libavformat/qtpalette.c",
+  "libavformat/rawdec.c",
+  "libavformat/replaygain.c",
+  "libavformat/riff.c",
+  "libavformat/riffdec.c",
+  "libavformat/rmsipr.c",
+  "libavformat/url.c",
+  "libavformat/utils.c",
+  "libavformat/vorbiscomment.c",
+  "libavformat/wavdec.c",
+  "libavutil/aes.c",
+  "libavutil/aes_ctr.c",
+  "libavutil/avsscanf.c",
+  "libavutil/avstring.c",
+  "libavutil/base64.c",
+  "libavutil/bprint.c",
+  "libavutil/buffer.c",
+  "libavutil/camellia.c",
+  "libavutil/channel_layout.c",
+  "libavutil/color_utils.c",
+  "libavutil/cpu.c",
+  "libavutil/crc.c",
+  "libavutil/dict.c",
+  "libavutil/display.c",
+  "libavutil/dovi_meta.c",
+  "libavutil/downmix_info.c",
+  "libavutil/encryption_info.c",
+  "libavutil/error.c",
+  "libavutil/eval.c",
+  "libavutil/fifo.c",
+  "libavutil/file_open.c",
+  "libavutil/fixed_dsp.c",
+  "libavutil/float_dsp.c",
+  "libavutil/frame.c",
+  "libavutil/hdr_dynamic_metadata.c",
+  "libavutil/hwcontext.c",
+  "libavutil/imgutils.c",
+  "libavutil/integer.c",
+  "libavutil/intmath.c",
+  "libavutil/lfg.c",
+  "libavutil/log.c",
+  "libavutil/log2_tab.c",
+  "libavutil/mastering_display_metadata.c",
+  "libavutil/mathematics.c",
+  "libavutil/md5.c",
+  "libavutil/mem.c",
+  "libavutil/opt.c",
+  "libavutil/parseutils.c",
+  "libavutil/pixdesc.c",
+  "libavutil/pixelutils.c",
+  "libavutil/random_seed.c",
+  "libavutil/rational.c",
+  "libavutil/reverse.c",
+  "libavutil/samplefmt.c",
+  "libavutil/sha.c",
+  "libavutil/slicethread.c",
+  "libavutil/spherical.c",
+  "libavutil/stereo3d.c",
+  "libavutil/tea.c",
+  "libavutil/threadmessage.c",
+  "libavutil/time.c",
+  "libavutil/timecode.c",
+  "libavutil/twofish.c",
+  "libavutil/tx.c",
+  "libavutil/tx_double.c",
+  "libavutil/tx_float.c",
+  "libavutil/tx_int32.c",
+  "libavutil/utils.c",
+]
+
+if (current_cpu == "arm64") {
+  ffmpeg_c_sources += [
+    "libavcodec/aarch64/fft_init_aarch64.c",
+    "libavcodec/aarch64/h264pred_init.c",
+    "libavcodec/aarch64/hpeldsp_init_aarch64.c",
+    "libavcodec/aarch64/mpegaudiodsp_init.c",
+    "libavcodec/aarch64/videodsp_init.c",
+    "libavcodec/aarch64/vorbisdsp_init.c",
+    "libavcodec/aarch64/vp8dsp_init_aarch64.c",
+    "libavutil/aarch64/cpu.c",
+    "libavutil/aarch64/float_dsp_init.c",
+  ]
+  ffmpeg_gas_sources += [
+    "libavcodec/aarch64/fft_neon.S",
+    "libavcodec/aarch64/h264pred_neon.S",
+    "libavcodec/aarch64/hpeldsp_neon.S",
+    "libavcodec/aarch64/mdct_neon.S",
+    "libavcodec/aarch64/mpegaudiodsp_neon.S",
+    "libavcodec/aarch64/videodsp.S",
+    "libavcodec/aarch64/vorbisdsp_neon.S",
+    "libavcodec/aarch64/vp8dsp_neon.S",
+    "libavutil/aarch64/float_dsp_neon.S",
+  ]
+}
+
+if (ffmpeg_profile == "max") {
+  ffmpeg_c_sources += [
+    "libavcodec/aac_ac3_parser.c",
+    "libavcodec/aac_parser.c",
+    "libavcodec/aacdec.c",
+    "libavcodec/aacps_float.c",
+    "libavcodec/aacpsdsp_float.c",
+    "libavcodec/aacsbr.c",
+    "libavcodec/aactab.c",
+    "libavcodec/acelp_filters.c",
+    "libavcodec/acelp_pitch_delay.c",
+    "libavcodec/acelp_vectors.c",
+    "libavcodec/adts_header.c",
+    "libavcodec/amrnbdec.c",
+    "libavcodec/amrwbdec.c",
+    "libavcodec/blockdsp.c",
+    "libavcodec/cabac.c",
+    "libavcodec/cbrt_data.c",
+    "libavcodec/celp_filters.c",
+    "libavcodec/celp_math.c",
+    "libavcodec/error_resilience.c",
+    "libavcodec/exif.c",
+    "libavcodec/fdctdsp.c",
+    "libavcodec/flvdec.c",
+    "libavcodec/gsm_parser.c",
+    "libavcodec/gsmdec.c",
+    "libavcodec/gsmdec_data.c",
+    "libavcodec/h263.c",
+    "libavcodec/h263_parser.c",
+    "libavcodec/h263data.c",
+    "libavcodec/h263dec.c",
+    "libavcodec/h263dsp.c",
+    "libavcodec/h2645_parse.c",
+    "libavcodec/h264_cabac.c",
+    "libavcodec/h264_cavlc.c",
+    "libavcodec/h264_direct.c",
+    "libavcodec/h264_loopfilter.c",
+    "libavcodec/h264_mb.c",
+    "libavcodec/h264_parse.c",
+    "libavcodec/h264_parser.c",
+    "libavcodec/h264_picture.c",
+    "libavcodec/h264_ps.c",
+    "libavcodec/h264_refs.c",
+    "libavcodec/h264_sei.c",
+    "libavcodec/h264_slice.c",
+    "libavcodec/h264chroma.c",
+    "libavcodec/h264data.c",
+    "libavcodec/h264dec.c",
+    "libavcodec/h264dsp.c",
+    "libavcodec/h264idct.c",
+    "libavcodec/h264qpel.c",
+    "libavcodec/idctdsp.c",
+    "libavcodec/intelh263dec.c",
+    "libavcodec/ituh263dec.c",
+    "libavcodec/jfdctfst.c",
+    "libavcodec/jfdctint.c",
+    "libavcodec/jrevdct.c",
+    "libavcodec/kbdwin.c",
+    "libavcodec/latm_parser.c",
+    "libavcodec/lsp.c",
+    "libavcodec/mdct15.c",
+    "libavcodec/me_cmp.c",
+    "libavcodec/mpeg4video.c",
+    "libavcodec/mpeg4video_parser.c",
+    "libavcodec/mpeg4videodec.c",
+    "libavcodec/mpeg_er.c",
+    "libavcodec/mpegpicture.c",
+    "libavcodec/mpegutils.c",
+    "libavcodec/mpegvideo.c",
+    "libavcodec/mpegvideo_motion.c",
+    "libavcodec/mpegvideodata.c",
+    "libavcodec/mpegvideodsp.c",
+    "libavcodec/msgsmdec.c",
+    "libavcodec/pixblockdsp.c",
+    "libavcodec/qpeldsp.c",
+    "libavcodec/rl.c",
+    "libavcodec/sbrdsp.c",
+    "libavcodec/simple_idct.c",
+    "libavcodec/sinewin.c",
+    "libavcodec/sinewin_fixed.c",
+    "libavcodec/startcode.c",
+    "libavcodec/tiff_common.c",
+    "libavcodec/xvididct.c",
+    "libavformat/aacdec.c",
+    "libavformat/amr.c",
+    "libavformat/apetag.c",
+    "libavformat/avidec.c",
+    "libavformat/gsmdec.c",
+    "libavformat/img2.c",
+  ]
+}
+
+if (current_cpu == "x64") {
+  ffmpeg_c_sources += [
+    "libavcodec/vp9.c",
+    "libavcodec/vp9_parser.c",
+    "libavcodec/vp9_superframe_split_bsf.c",
+    "libavcodec/vp9block.c",
+    "libavcodec/vp9data.c",
+    "libavcodec/vp9dsp.c",
+    "libavcodec/vp9dsp_10bpp.c",
+    "libavcodec/vp9dsp_12bpp.c",
+    "libavcodec/vp9dsp_8bpp.c",
+    "libavcodec/vp9lpf.c",
+    "libavcodec/vp9mvs.c",
+    "libavcodec/vp9prob.c",
+    "libavcodec/vp9recon.c",
+    "libavcodec/x86/constants.c",
+    "libavcodec/x86/dct_init.c",
+    "libavcodec/x86/fft_init.c",
+    "libavcodec/x86/flacdsp_init.c",
+    "libavcodec/x86/h264_intrapred_init.c",
+    "libavcodec/x86/hpeldsp_init.c",
+    "libavcodec/x86/hpeldsp_vp3_init.c",
+    "libavcodec/x86/mpegaudiodsp.c",
+    "libavcodec/x86/videodsp_init.c",
+    "libavcodec/x86/vorbisdsp_init.c",
+    "libavcodec/x86/vp3dsp_init.c",
+    "libavcodec/x86/vp8dsp_init.c",
+    "libavcodec/x86/vp9dsp_init.c",
+    "libavcodec/x86/vp9dsp_init_10bpp.c",
+    "libavcodec/x86/vp9dsp_init_12bpp.c",
+    "libavcodec/x86/vp9dsp_init_16bpp.c",
+    "libavutil/x86/cpu.c",
+    "libavutil/x86/fixed_dsp_init.c",
+    "libavutil/x86/float_dsp_init.c",
+    "libavutil/x86/imgutils_init.c",
+    "libavutil/x86/lls_init.c",
+  ]
+  ffmpeg_yasm_sources += [
+    "libavcodec/x86/dct32.asm",
+    "libavcodec/x86/fft.asm",
+    "libavcodec/x86/flacdsp.asm",
+    "libavcodec/x86/fpel.asm",
+    "libavcodec/x86/h264_intrapred.asm",
+    "libavcodec/x86/h264_intrapred_10bit.asm",
+    "libavcodec/x86/hpeldsp.asm",
+    "libavcodec/x86/hpeldsp_vp3.asm",
+    "libavcodec/x86/imdct36.asm",
+    "libavcodec/x86/videodsp.asm",
+    "libavcodec/x86/vorbisdsp.asm",
+    "libavcodec/x86/vp3dsp.asm",
+    "libavcodec/x86/vp8dsp.asm",
+    "libavcodec/x86/vp8dsp_loopfilter.asm",
+    "libavcodec/x86/vp9intrapred.asm",
+    "libavcodec/x86/vp9intrapred_16bpp.asm",
+    "libavcodec/x86/vp9itxfm.asm",
+    "libavcodec/x86/vp9itxfm_16bpp.asm",
+    "libavcodec/x86/vp9lpf.asm",
+    "libavcodec/x86/vp9lpf_16bpp.asm",
+    "libavcodec/x86/vp9mc.asm",
+    "libavcodec/x86/vp9mc_16bpp.asm",
+    "libavutil/x86/cpuid.asm",
+    "libavutil/x86/fixed_dsp.asm",
+    "libavutil/x86/float_dsp.asm",
+    "libavutil/x86/imgutils.asm",
+    "libavutil/x86/lls.asm",
+  ]
+}
+
+if (current_cpu == "arm64" && ffmpeg_profile == "max") {
+  ffmpeg_c_sources += [
+    "libavcodec/aarch64/aacpsdsp_init_aarch64.c",
+    "libavcodec/aarch64/h264chroma_init_aarch64.c",
+    "libavcodec/aarch64/h264dsp_init_aarch64.c",
+    "libavcodec/aarch64/h264qpel_init_aarch64.c",
+    "libavcodec/aarch64/idctdsp_init_aarch64.c",
+    "libavcodec/aarch64/sbrdsp_init_aarch64.c",
+    "libavcodec/neon/mpegvideo.c",
+  ]
+  ffmpeg_gas_sources += [
+    "libavcodec/aarch64/aacpsdsp_neon.S",
+    "libavcodec/aarch64/h264cmc_neon.S",
+    "libavcodec/aarch64/h264dsp_neon.S",
+    "libavcodec/aarch64/h264idct_neon.S",
+    "libavcodec/aarch64/h264qpel_neon.S",
+    "libavcodec/aarch64/sbrdsp_neon.S",
+    "libavcodec/aarch64/simple_idct_neon.S",
+  ]
+}
+
+if (current_cpu == "x64" && ffmpeg_profile == "max") {
+  ffmpeg_c_sources += [
+    "libavcodec/x86/aacpsdsp_init.c",
+    "libavcodec/x86/blockdsp_init.c",
+    "libavcodec/x86/fdct.c",
+    "libavcodec/x86/fdctdsp_init.c",
+    "libavcodec/x86/h263dsp_init.c",
+    "libavcodec/x86/h264_qpel.c",
+    "libavcodec/x86/h264chroma_init.c",
+    "libavcodec/x86/h264dsp_init.c",
+    "libavcodec/x86/idctdsp_init.c",
+    "libavcodec/x86/mdct15_init.c",
+    "libavcodec/x86/me_cmp_init.c",
+    "libavcodec/x86/mpegvideo.c",
+    "libavcodec/x86/mpegvideodsp.c",
+    "libavcodec/x86/pixblockdsp_init.c",
+    "libavcodec/x86/qpeldsp_init.c",
+    "libavcodec/x86/sbrdsp_init.c",
+    "libavcodec/x86/xvididct_init.c",
+  ]
+  ffmpeg_yasm_sources += [
+    "libavcodec/x86/aacpsdsp.asm",
+    "libavcodec/x86/blockdsp.asm",
+    "libavcodec/x86/h263_loopfilter.asm",
+    "libavcodec/x86/h264_chromamc.asm",
+    "libavcodec/x86/h264_chromamc_10bit.asm",
+    "libavcodec/x86/h264_deblock.asm",
+    "libavcodec/x86/h264_deblock_10bit.asm",
+    "libavcodec/x86/h264_idct.asm",
+    "libavcodec/x86/h264_idct_10bit.asm",
+    "libavcodec/x86/h264_qpel_10bit.asm",
+    "libavcodec/x86/h264_qpel_8bit.asm",
+    "libavcodec/x86/h264_weight.asm",
+    "libavcodec/x86/h264_weight_10bit.asm",
+    "libavcodec/x86/idctdsp.asm",
+    "libavcodec/x86/mdct15.asm",
+    "libavcodec/x86/me_cmp.asm",
+    "libavcodec/x86/pixblockdsp.asm",
+    "libavcodec/x86/qpel.asm",
+    "libavcodec/x86/qpeldsp.asm",
+    "libavcodec/x86/sbrdsp.asm",
+    "libavcodec/x86/simple_idct.asm",
+    "libavcodec/x86/simple_idct10.asm",
+    "libavcodec/x86/xvididct.asm",
+  ]
+}
+
diff --git a/ffmpeg_options.gni b/ffmpeg_options.gni
new file mode 100644
index 0000000..5112be9
--- /dev/null
+++ b/ffmpeg_options.gni
@@ -0,0 +1,11 @@
+# Copyright 2017 The Fuchsia Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+declare_args() {
+  # Controls what formats are supported. Legal values are [default|max].
+  ffmpeg_profile = "max"
+}
+
+assert(ffmpeg_profile == "default" || ffmpeg_profile == "max")
+assert(current_cpu == "x64" || current_cpu == "arm64")
diff --git a/fftools/cmdutils.c b/fftools/cmdutils.c
deleted file mode 100644
index 7f5a5ca..0000000
--- a/fftools/cmdutils.c
+++ /dev/null
@@ -1,2383 +0,0 @@
-/*
- * Various utilities for command line tools
- * Copyright (c) 2000-2003 Fabrice Bellard
- *
- * This file is part of FFmpeg.
- *
- * FFmpeg is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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
- */
-
-#include <string.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <math.h>
-
-/* Include only the enabled headers since some compilers (namely, Sun
-   Studio) will not omit unused inline functions and create undefined
-   references to libraries that are not being built. */
-
-#include "config.h"
-#include "compat/va_copy.h"
-#include "libavformat/avformat.h"
-#include "libavfilter/avfilter.h"
-#include "libavdevice/avdevice.h"
-#include "libavresample/avresample.h"
-#include "libswscale/swscale.h"
-#include "libswresample/swresample.h"
-#include "libpostproc/postprocess.h"
-#include "libavutil/attributes.h"
-#include "libavutil/avassert.h"
-#include "libavutil/avstring.h"
-#include "libavutil/bprint.h"
-#include "libavutil/display.h"
-#include "libavutil/mathematics.h"
-#include "libavutil/imgutils.h"
-#include "libavutil/libm.h"
-#include "libavutil/parseutils.h"
-#include "libavutil/pixdesc.h"
-#include "libavutil/eval.h"
-#include "libavutil/dict.h"
-#include "libavutil/opt.h"
-#include "libavutil/cpu.h"
-#include "libavutil/ffversion.h"
-#include "libavutil/version.h"
-#include "cmdutils.h"
-#if CONFIG_NETWORK
-#include "libavformat/network.h"
-#endif
-#if HAVE_SYS_RESOURCE_H
-#include <sys/time.h>
-#include <sys/resource.h>
-#endif
-#ifdef _WIN32
-#include <windows.h>
-#endif
-
-static int init_report(const char *env);
-
-AVDictionary *sws_dict;
-AVDictionary *swr_opts;
-AVDictionary *format_opts, *codec_opts, *resample_opts;
-
-static FILE *report_file;
-static int report_file_level = AV_LOG_DEBUG;
-int hide_banner = 0;
-
-enum show_muxdemuxers {
-    SHOW_DEFAULT,
-    SHOW_DEMUXERS,
-    SHOW_MUXERS,
-};
-
-void init_opts(void)
-{
-    av_dict_set(&sws_dict, "flags", "bicubic", 0);
-}
-
-void uninit_opts(void)
-{
-    av_dict_free(&swr_opts);
-    av_dict_free(&sws_dict);
-    av_dict_free(&format_opts);
-    av_dict_free(&codec_opts);
-    av_dict_free(&resample_opts);
-}
-
-void log_callback_help(void *ptr, int level, const char *fmt, va_list vl)
-{
-    vfprintf(stdout, fmt, vl);
-}
-
-static void log_callback_report(void *ptr, int level, const char *fmt, va_list vl)
-{
-    va_list vl2;
-    char line[1024];
-    static int print_prefix = 1;
-
-    va_copy(vl2, vl);
-    av_log_default_callback(ptr, level, fmt, vl);
-    av_log_format_line(ptr, level, fmt, vl2, line, sizeof(line), &print_prefix);
-    va_end(vl2);
-    if (report_file_level >= level) {
-        fputs(line, report_file);
-        fflush(report_file);
-    }
-}
-
-void init_dynload(void)
-{
-#if HAVE_SETDLLDIRECTORY && defined(_WIN32)
-    /* Calling SetDllDirectory with the empty string (but not NULL) removes the
-     * current working directory from the DLL search path as a security pre-caution. */
-    SetDllDirectory("");
-#endif
-}
-
-static void (*program_exit)(int ret);
-
-void register_exit(void (*cb)(int ret))
-{
-    program_exit = cb;
-}
-
-void exit_program(int ret)
-{
-    if (program_exit)
-        program_exit(ret);
-
-    exit(ret);
-}
-
-double parse_number_or_die(const char *context, const char *numstr, int type,
-                           double min, double max)
-{
-    char *tail;
-    const char *error;
-    double d = av_strtod(numstr, &tail);
-    if (*tail)
-        error = "Expected number for %s but found: %s\n";
-    else if (d < min || d > max)
-        error = "The value for %s was %s which is not within %f - %f\n";
-    else if (type == OPT_INT64 && (int64_t)d != d)
-        error = "Expected int64 for %s but found %s\n";
-    else if (type == OPT_INT && (int)d != d)
-        error = "Expected int for %s but found %s\n";
-    else
-        return d;
-    av_log(NULL, AV_LOG_FATAL, error, context, numstr, min, max);
-    exit_program(1);
-    return 0;
-}
-
-int64_t parse_time_or_die(const char *context, const char *timestr,
-                          int is_duration)
-{
-    int64_t us;
-    if (av_parse_time(&us, timestr, is_duration) < 0) {
-        av_log(NULL, AV_LOG_FATAL, "Invalid %s specification for %s: %s\n",
-               is_duration ? "duration" : "date", context, timestr);
-        exit_program(1);
-    }
-    return us;
-}
-
-void show_help_options(const OptionDef *options, const char *msg, int req_flags,
-                       int rej_flags, int alt_flags)
-{
-    const OptionDef *po;
-    int first;
-
-    first = 1;
-    for (po = options; po->name; po++) {
-        char buf[128];
-
-        if (((po->flags & req_flags) != req_flags) ||
-            (alt_flags && !(po->flags & alt_flags)) ||
-            (po->flags & rej_flags))
-            continue;
-
-        if (first) {
-            printf("%s\n", msg);
-            first = 0;
-        }
-        av_strlcpy(buf, po->name, sizeof(buf));
-        if (po->argname) {
-            av_strlcat(buf, " ", sizeof(buf));
-            av_strlcat(buf, po->argname, sizeof(buf));
-        }
-        printf("-%-17s  %s\n", buf, po->help);
-    }
-    printf("\n");
-}
-
-void show_help_children(const AVClass *class, int flags)
-{
-    const AVClass *child = NULL;
-    if (class->option) {
-        av_opt_show2(&class, NULL, flags, 0);
-        printf("\n");
-    }
-
-    while (child = av_opt_child_class_next(class, child))
-        show_help_children(child, flags);
-}
-
-static const OptionDef *find_option(const OptionDef *po, const char *name)
-{
-    const char *p = strchr(name, ':');
-    int len = p ? p - name : strlen(name);
-
-    while (po->name) {
-        if (!strncmp(name, po->name, len) && strlen(po->name) == len)
-            break;
-        po++;
-    }
-    return po;
-}
-
-/* _WIN32 means using the windows libc - cygwin doesn't define that
- * by default. HAVE_COMMANDLINETOARGVW is true on cygwin, while
- * it doesn't provide the actual command line via GetCommandLineW(). */
-#if HAVE_COMMANDLINETOARGVW && defined(_WIN32)
-#include <shellapi.h>
-/* Will be leaked on exit */
-static char** win32_argv_utf8 = NULL;
-static int win32_argc = 0;
-
-/**
- * Prepare command line arguments for executable.
- * For Windows - perform wide-char to UTF-8 conversion.
- * Input arguments should be main() function arguments.
- * @param argc_ptr Arguments number (including executable)
- * @param argv_ptr Arguments list.
- */
-static void prepare_app_arguments(int *argc_ptr, char ***argv_ptr)
-{
-    char *argstr_flat;
-    wchar_t **argv_w;
-    int i, buffsize = 0, offset = 0;
-
-    if (win32_argv_utf8) {
-        *argc_ptr = win32_argc;
-        *argv_ptr = win32_argv_utf8;
-        return;
-    }
-
-    win32_argc = 0;
-    argv_w = CommandLineToArgvW(GetCommandLineW(), &win32_argc);
-    if (win32_argc <= 0 || !argv_w)
-        return;
-
-    /* determine the UTF-8 buffer size (including NULL-termination symbols) */
-    for (i = 0; i < win32_argc; i++)
-        buffsize += WideCharToMultiByte(CP_UTF8, 0, argv_w[i], -1,
-                                        NULL, 0, NULL, NULL);
-
-    win32_argv_utf8 = av_mallocz(sizeof(char *) * (win32_argc + 1) + buffsize);
-    argstr_flat     = (char *)win32_argv_utf8 + sizeof(char *) * (win32_argc + 1);
-    if (!win32_argv_utf8) {
-        LocalFree(argv_w);
-        return;
-    }
-
-    for (i = 0; i < win32_argc; i++) {
-        win32_argv_utf8[i] = &argstr_flat[offset];
-        offset += WideCharToMultiByte(CP_UTF8, 0, argv_w[i], -1,
-                                      &argstr_flat[offset],
-                                      buffsize - offset, NULL, NULL);
-    }
-    win32_argv_utf8[i] = NULL;
-    LocalFree(argv_w);
-
-    *argc_ptr = win32_argc;
-    *argv_ptr = win32_argv_utf8;
-}
-#else
-static inline void prepare_app_arguments(int *argc_ptr, char ***argv_ptr)
-{
-    /* nothing to do */
-}
-#endif /* HAVE_COMMANDLINETOARGVW */
-
-static int write_option(void *optctx, const OptionDef *po, const char *opt,
-                        const char *arg)
-{
-    /* new-style options contain an offset into optctx, old-style address of
-     * a global var*/
-    void *dst = po->flags & (OPT_OFFSET | OPT_SPEC) ?
-                (uint8_t *)optctx + po->u.off : po->u.dst_ptr;
-    int *dstcount;
-
-    if (po->flags & OPT_SPEC) {
-        SpecifierOpt **so = dst;
-        char *p = strchr(opt, ':');
-        char *str;
-
-        dstcount = (int *)(so + 1);
-        *so = grow_array(*so, sizeof(**so), dstcount, *dstcount + 1);
-        str = av_strdup(p ? p + 1 : "");
-        if (!str)
-            return AVERROR(ENOMEM);
-        (*so)[*dstcount - 1].specifier = str;
-        dst = &(*so)[*dstcount - 1].u;
-    }
-
-    if (po->flags & OPT_STRING) {
-        char *str;
-        str = av_strdup(arg);
-        av_freep(dst);
-        if (!str)
-            return AVERROR(ENOMEM);
-        *(char **)dst = str;
-    } else if (po->flags & OPT_BOOL || po->flags & OPT_INT) {
-        *(int *)dst = parse_number_or_die(opt, arg, OPT_INT64, INT_MIN, INT_MAX);
-    } else if (po->flags & OPT_INT64) {
-        *(int64_t *)dst = parse_number_or_die(opt, arg, OPT_INT64, INT64_MIN, INT64_MAX);
-    } else if (po->flags & OPT_TIME) {
-        *(int64_t *)dst = parse_time_or_die(opt, arg, 1);
-    } else if (po->flags & OPT_FLOAT) {
-        *(float *)dst = parse_number_or_die(opt, arg, OPT_FLOAT, -INFINITY, INFINITY);
-    } else if (po->flags & OPT_DOUBLE) {
-        *(double *)dst = parse_number_or_die(opt, arg, OPT_DOUBLE, -INFINITY, INFINITY);
-    } else if (po->u.func_arg) {
-        int ret = po->u.func_arg(optctx, opt, arg);
-        if (ret < 0) {
-            av_log(NULL, AV_LOG_ERROR,
-                   "Failed to set value '%s' for option '%s': %s\n",
-                   arg, opt, av_err2str(ret));
-            return ret;
-        }
-    }
-    if (po->flags & OPT_EXIT)
-        exit_program(0);
-
-    return 0;
-}
-
-int parse_option(void *optctx, const char *opt, const char *arg,
-                 const OptionDef *options)
-{
-    const OptionDef *po;
-    int ret;
-
-    po = find_option(options, opt);
-    if (!po->name && opt[0] == 'n' && opt[1] == 'o') {
-        /* handle 'no' bool option */
-        po = find_option(options, opt + 2);
-        if ((po->name && (po->flags & OPT_BOOL)))
-            arg = "0";
-    } else if (po->flags & OPT_BOOL)
-        arg = "1";
-
-    if (!po->name)
-        po = find_option(options, "default");
-    if (!po->name) {
-        av_log(NULL, AV_LOG_ERROR, "Unrecognized option '%s'\n", opt);
-        return AVERROR(EINVAL);
-    }
-    if (po->flags & HAS_ARG && !arg) {
-        av_log(NULL, AV_LOG_ERROR, "Missing argument for option '%s'\n", opt);
-        return AVERROR(EINVAL);
-    }
-
-    ret = write_option(optctx, po, opt, arg);
-    if (ret < 0)
-        return ret;
-
-    return !!(po->flags & HAS_ARG);
-}
-
-void parse_options(void *optctx, int argc, char **argv, const OptionDef *options,
-                   void (*parse_arg_function)(void *, const char*))
-{
-    const char *opt;
-    int optindex, handleoptions = 1, ret;
-
-    /* perform system-dependent conversions for arguments list */
-    prepare_app_arguments(&argc, &argv);
-
-    /* parse options */
-    optindex = 1;
-    while (optindex < argc) {
-        opt = argv[optindex++];
-
-        if (handleoptions && opt[0] == '-' && opt[1] != '\0') {
-            if (opt[1] == '-' && opt[2] == '\0') {
-                handleoptions = 0;
-                continue;
-            }
-            opt++;
-
-            if ((ret = parse_option(optctx, opt, argv[optindex], options)) < 0)
-                exit_program(1);
-            optindex += ret;
-        } else {
-            if (parse_arg_function)
-                parse_arg_function(optctx, opt);
-        }
-    }
-}
-
-int parse_optgroup(void *optctx, OptionGroup *g)
-{
-    int i, ret;
-
-    av_log(NULL, AV_LOG_DEBUG, "Parsing a group of options: %s %s.\n",
-           g->group_def->name, g->arg);
-
-    for (i = 0; i < g->nb_opts; i++) {
-        Option *o = &g->opts[i];
-
-        if (g->group_def->flags &&
-            !(g->group_def->flags & o->opt->flags)) {
-            av_log(NULL, AV_LOG_ERROR, "Option %s (%s) cannot be applied to "
-                   "%s %s -- you are trying to apply an input option to an "
-                   "output file or vice versa. Move this option before the "
-                   "file it belongs to.\n", o->key, o->opt->help,
-                   g->group_def->name, g->arg);
-            return AVERROR(EINVAL);
-        }
-
-        av_log(NULL, AV_LOG_DEBUG, "Applying option %s (%s) with argument %s.\n",
-               o->key, o->opt->help, o->val);
-
-        ret = write_option(optctx, o->opt, o->key, o->val);
-        if (ret < 0)
-            return ret;
-    }
-
-    av_log(NULL, AV_LOG_DEBUG, "Successfully parsed a group of options.\n");
-
-    return 0;
-}
-
-int locate_option(int argc, char **argv, const OptionDef *options,
-                  const char *optname)
-{
-    const OptionDef *po;
-    int i;
-
-    for (i = 1; i < argc; i++) {
-        const char *cur_opt = argv[i];
-
-        if (*cur_opt++ != '-')
-            continue;
-
-        po = find_option(options, cur_opt);
-        if (!po->name && cur_opt[0] == 'n' && cur_opt[1] == 'o')
-            po = find_option(options, cur_opt + 2);
-
-        if ((!po->name && !strcmp(cur_opt, optname)) ||
-             (po->name && !strcmp(optname, po->name)))
-            return i;
-
-        if (!po->name || po->flags & HAS_ARG)
-            i++;
-    }
-    return 0;
-}
-
-static void dump_argument(const char *a)
-{
-    const unsigned char *p;
-
-    for (p = a; *p; p++)
-        if (!((*p >= '+' && *p <= ':') || (*p >= '@' && *p <= 'Z') ||
-              *p == '_' || (*p >= 'a' && *p <= 'z')))
-            break;
-    if (!*p) {
-        fputs(a, report_file);
-        return;
-    }
-    fputc('"', report_file);
-    for (p = a; *p; p++) {
-        if (*p == '\\' || *p == '"' || *p == '$' || *p == '`')
-            fprintf(report_file, "\\%c", *p);
-        else if (*p < ' ' || *p > '~')
-            fprintf(report_file, "\\x%02x", *p);
-        else
-            fputc(*p, report_file);
-    }
-    fputc('"', report_file);
-}
-
-static void check_options(const OptionDef *po)
-{
-    while (po->name) {
-        if (po->flags & OPT_PERFILE)
-            av_assert0(po->flags & (OPT_INPUT | OPT_OUTPUT));
-        po++;
-    }
-}
-
-void parse_loglevel(int argc, char **argv, const OptionDef *options)
-{
-    int idx = locate_option(argc, argv, options, "loglevel");
-    const char *env;
-
-    check_options(options);
-
-    if (!idx)
-        idx = locate_option(argc, argv, options, "v");
-    if (idx && argv[idx + 1])
-        opt_loglevel(NULL, "loglevel", argv[idx + 1]);
-    idx = locate_option(argc, argv, options, "report");
-    if ((env = getenv("FFREPORT")) || idx) {
-        init_report(env);
-        if (report_file) {
-            int i;
-            fprintf(report_file, "Command line:\n");
-            for (i = 0; i < argc; i++) {
-                dump_argument(argv[i]);
-                fputc(i < argc - 1 ? ' ' : '\n', report_file);
-            }
-            fflush(report_file);
-        }
-    }
-    idx = locate_option(argc, argv, options, "hide_banner");
-    if (idx)
-        hide_banner = 1;
-}
-
-static const AVOption *opt_find(void *obj, const char *name, const char *unit,
-                            int opt_flags, int search_flags)
-{
-    const AVOption *o = av_opt_find(obj, name, unit, opt_flags, search_flags);
-    if(o && !o->flags)
-        return NULL;
-    return o;
-}
-
-#define FLAGS (o->type == AV_OPT_TYPE_FLAGS && (arg[0]=='-' || arg[0]=='+')) ? AV_DICT_APPEND : 0
-int opt_default(void *optctx, const char *opt, const char *arg)
-{
-    const AVOption *o;
-    int consumed = 0;
-    char opt_stripped[128];
-    const char *p;
-    const AVClass *cc = avcodec_get_class(), *fc = avformat_get_class();
-#if CONFIG_AVRESAMPLE
-    const AVClass *rc = avresample_get_class();
-#endif
-#if CONFIG_SWSCALE
-    const AVClass *sc = sws_get_class();
-#endif
-#if CONFIG_SWRESAMPLE
-    const AVClass *swr_class = swr_get_class();
-#endif
-
-    if (!strcmp(opt, "debug") || !strcmp(opt, "fdebug"))
-        av_log_set_level(AV_LOG_DEBUG);
-
-    if (!(p = strchr(opt, ':')))
-        p = opt + strlen(opt);
-    av_strlcpy(opt_stripped, opt, FFMIN(sizeof(opt_stripped), p - opt + 1));
-
-    if ((o = opt_find(&cc, opt_stripped, NULL, 0,
-                         AV_OPT_SEARCH_CHILDREN | AV_OPT_SEARCH_FAKE_OBJ)) ||
-        ((opt[0] == 'v' || opt[0] == 'a' || opt[0] == 's') &&
-         (o = opt_find(&cc, opt + 1, NULL, 0, AV_OPT_SEARCH_FAKE_OBJ)))) {
-        av_dict_set(&codec_opts, opt, arg, FLAGS);
-        consumed = 1;
-    }
-    if ((o = opt_find(&fc, opt, NULL, 0,
-                         AV_OPT_SEARCH_CHILDREN | AV_OPT_SEARCH_FAKE_OBJ))) {
-        av_dict_set(&format_opts, opt, arg, FLAGS);
-        if (consumed)
-            av_log(NULL, AV_LOG_VERBOSE, "Routing option %s to both codec and muxer layer\n", opt);
-        consumed = 1;
-    }
-#if CONFIG_SWSCALE
-    if (!consumed && (o = opt_find(&sc, opt, NULL, 0,
-                         AV_OPT_SEARCH_CHILDREN | AV_OPT_SEARCH_FAKE_OBJ))) {
-        struct SwsContext *sws = sws_alloc_context();
-        int ret = av_opt_set(sws, opt, arg, 0);
-        sws_freeContext(sws);
-        if (!strcmp(opt, "srcw") || !strcmp(opt, "srch") ||
-            !strcmp(opt, "dstw") || !strcmp(opt, "dsth") ||
-            !strcmp(opt, "src_format") || !strcmp(opt, "dst_format")) {
-            av_log(NULL, AV_LOG_ERROR, "Directly using swscale dimensions/format options is not supported, please use the -s or -pix_fmt options\n");
-            return AVERROR(EINVAL);
-        }
-        if (ret < 0) {
-            av_log(NULL, AV_LOG_ERROR, "Error setting option %s.\n", opt);
-            return ret;
-        }
-
-        av_dict_set(&sws_dict, opt, arg, FLAGS);
-
-        consumed = 1;
-    }
-#else
-    if (!consumed && !strcmp(opt, "sws_flags")) {
-        av_log(NULL, AV_LOG_WARNING, "Ignoring %s %s, due to disabled swscale\n", opt, arg);
-        consumed = 1;
-    }
-#endif
-#if CONFIG_SWRESAMPLE
-    if (!consumed && (o=opt_find(&swr_class, opt, NULL, 0,
-                                    AV_OPT_SEARCH_CHILDREN | AV_OPT_SEARCH_FAKE_OBJ))) {
-        struct SwrContext *swr = swr_alloc();
-        int ret = av_opt_set(swr, opt, arg, 0);
-        swr_free(&swr);
-        if (ret < 0) {
-            av_log(NULL, AV_LOG_ERROR, "Error setting option %s.\n", opt);
-            return ret;
-        }
-        av_dict_set(&swr_opts, opt, arg, FLAGS);
-        consumed = 1;
-    }
-#endif
-#if CONFIG_AVRESAMPLE
-    if ((o=opt_find(&rc, opt, NULL, 0,
-                       AV_OPT_SEARCH_CHILDREN | AV_OPT_SEARCH_FAKE_OBJ))) {
-        av_dict_set(&resample_opts, opt, arg, FLAGS);
-        consumed = 1;
-    }
-#endif
-
-    if (consumed)
-        return 0;
-    return AVERROR_OPTION_NOT_FOUND;
-}
-
-/*
- * Check whether given option is a group separator.
- *
- * @return index of the group definition that matched or -1 if none
- */
-static int match_group_separator(const OptionGroupDef *groups, int nb_groups,
-                                 const char *opt)
-{
-    int i;
-
-    for (i = 0; i < nb_groups; i++) {
-        const OptionGroupDef *p = &groups[i];
-        if (p->sep && !strcmp(p->sep, opt))
-            return i;
-    }
-
-    return -1;
-}
-
-/*
- * Finish parsing an option group.
- *
- * @param group_idx which group definition should this group belong to
- * @param arg argument of the group delimiting option
- */
-static void finish_group(OptionParseContext *octx, int group_idx,
-                         const char *arg)
-{
-    OptionGroupList *l = &octx->groups[group_idx];
-    OptionGroup *g;
-
-    GROW_ARRAY(l->groups, l->nb_groups);
-    g = &l->groups[l->nb_groups - 1];
-
-    *g             = octx->cur_group;
-    g->arg         = arg;
-    g->group_def   = l->group_def;
-    g->sws_dict    = sws_dict;
-    g->swr_opts    = swr_opts;
-    g->codec_opts  = codec_opts;
-    g->format_opts = format_opts;
-    g->resample_opts = resample_opts;
-
-    codec_opts  = NULL;
-    format_opts = NULL;
-    resample_opts = NULL;
-    sws_dict    = NULL;
-    swr_opts    = NULL;
-    init_opts();
-
-    memset(&octx->cur_group, 0, sizeof(octx->cur_group));
-}
-
-/*
- * Add an option instance to currently parsed group.
- */
-static void add_opt(OptionParseContext *octx, const OptionDef *opt,
-                    const char *key, const char *val)
-{
-    int global = !(opt->flags & (OPT_PERFILE | OPT_SPEC | OPT_OFFSET));
-    OptionGroup *g = global ? &octx->global_opts : &octx->cur_group;
-
-    GROW_ARRAY(g->opts, g->nb_opts);
-    g->opts[g->nb_opts - 1].opt = opt;
-    g->opts[g->nb_opts - 1].key = key;
-    g->opts[g->nb_opts - 1].val = val;
-}
-
-static void init_parse_context(OptionParseContext *octx,
-                               const OptionGroupDef *groups, int nb_groups)
-{
-    static const OptionGroupDef global_group = { "global" };
-    int i;
-
-    memset(octx, 0, sizeof(*octx));
-
-    octx->nb_groups = nb_groups;
-    octx->groups    = av_mallocz_array(octx->nb_groups, sizeof(*octx->groups));
-    if (!octx->groups)
-        exit_program(1);
-
-    for (i = 0; i < octx->nb_groups; i++)
-        octx->groups[i].group_def = &groups[i];
-
-    octx->global_opts.group_def = &global_group;
-    octx->global_opts.arg       = "";
-
-    init_opts();
-}
-
-void uninit_parse_context(OptionParseContext *octx)
-{
-    int i, j;
-
-    for (i = 0; i < octx->nb_groups; i++) {
-        OptionGroupList *l = &octx->groups[i];
-
-        for (j = 0; j < l->nb_groups; j++) {
-            av_freep(&l->groups[j].opts);
-            av_dict_free(&l->groups[j].codec_opts);
-            av_dict_free(&l->groups[j].format_opts);
-            av_dict_free(&l->groups[j].resample_opts);
-
-            av_dict_free(&l->groups[j].sws_dict);
-            av_dict_free(&l->groups[j].swr_opts);
-        }
-        av_freep(&l->groups);
-    }
-    av_freep(&octx->groups);
-
-    av_freep(&octx->cur_group.opts);
-    av_freep(&octx->global_opts.opts);
-
-    uninit_opts();
-}
-
-int split_commandline(OptionParseContext *octx, int argc, char *argv[],
-                      const OptionDef *options,
-                      const OptionGroupDef *groups, int nb_groups)
-{
-    int optindex = 1;
-    int dashdash = -2;
-
-    /* perform system-dependent conversions for arguments list */
-    prepare_app_arguments(&argc, &argv);
-
-    init_parse_context(octx, groups, nb_groups);
-    av_log(NULL, AV_LOG_DEBUG, "Splitting the commandline.\n");
-
-    while (optindex < argc) {
-        const char *opt = argv[optindex++], *arg;
-        const OptionDef *po;
-        int ret;
-
-        av_log(NULL, AV_LOG_DEBUG, "Reading option '%s' ...", opt);
-
-        if (opt[0] == '-' && opt[1] == '-' && !opt[2]) {
-            dashdash = optindex;
-            continue;
-        }
-        /* unnamed group separators, e.g. output filename */
-        if (opt[0] != '-' || !opt[1] || dashdash+1 == optindex) {
-            finish_group(octx, 0, opt);
-            av_log(NULL, AV_LOG_DEBUG, " matched as %s.\n", groups[0].name);
-            continue;
-        }
-        opt++;
-
-#define GET_ARG(arg)                                                           \
-do {                                                                           \
-    arg = argv[optindex++];                                                    \
-    if (!arg) {                                                                \
-        av_log(NULL, AV_LOG_ERROR, "Missing argument for option '%s'.\n", opt);\
-        return AVERROR(EINVAL);                                                \
-    }                                                                          \
-} while (0)
-
-        /* named group separators, e.g. -i */
-        if ((ret = match_group_separator(groups, nb_groups, opt)) >= 0) {
-            GET_ARG(arg);
-            finish_group(octx, ret, arg);
-            av_log(NULL, AV_LOG_DEBUG, " matched as %s with argument '%s'.\n",
-                   groups[ret].name, arg);
-            continue;
-        }
-
-        /* normal options */
-        po = find_option(options, opt);
-        if (po->name) {
-            if (po->flags & OPT_EXIT) {
-                /* optional argument, e.g. -h */
-                arg = argv[optindex++];
-            } else if (po->flags & HAS_ARG) {
-                GET_ARG(arg);
-            } else {
-                arg = "1";
-            }
-
-            add_opt(octx, po, opt, arg);
-            av_log(NULL, AV_LOG_DEBUG, " matched as option '%s' (%s) with "
-                   "argument '%s'.\n", po->name, po->help, arg);
-            continue;
-        }
-
-        /* AVOptions */
-        if (argv[optindex]) {
-            ret = opt_default(NULL, opt, argv[optindex]);
-            if (ret >= 0) {
-                av_log(NULL, AV_LOG_DEBUG, " matched as AVOption '%s' with "
-                       "argument '%s'.\n", opt, argv[optindex]);
-                optindex++;
-                continue;
-            } else if (ret != AVERROR_OPTION_NOT_FOUND) {
-                av_log(NULL, AV_LOG_ERROR, "Error parsing option '%s' "
-                       "with argument '%s'.\n", opt, argv[optindex]);
-                return ret;
-            }
-        }
-
-        /* boolean -nofoo options */
-        if (opt[0] == 'n' && opt[1] == 'o' &&
-            (po = find_option(options, opt + 2)) &&
-            po->name && po->flags & OPT_BOOL) {
-            add_opt(octx, po, opt, "0");
-            av_log(NULL, AV_LOG_DEBUG, " matched as option '%s' (%s) with "
-                   "argument 0.\n", po->name, po->help);
-            continue;
-        }
-
-        av_log(NULL, AV_LOG_ERROR, "Unrecognized option '%s'.\n", opt);
-        return AVERROR_OPTION_NOT_FOUND;
-    }
-
-    if (octx->cur_group.nb_opts || codec_opts || format_opts || resample_opts)
-        av_log(NULL, AV_LOG_WARNING, "Trailing option(s) found in the "
-               "command: may be ignored.\n");
-
-    av_log(NULL, AV_LOG_DEBUG, "Finished splitting the commandline.\n");
-
-    return 0;
-}
-
-int opt_cpuflags(void *optctx, const char *opt, const char *arg)
-{
-    int ret;
-    unsigned flags = av_get_cpu_flags();
-
-    if ((ret = av_parse_cpu_caps(&flags, arg)) < 0)
-        return ret;
-
-    av_force_cpu_flags(flags);
-    return 0;
-}
-
-int opt_loglevel(void *optctx, const char *opt, const char *arg)
-{
-    const struct { const char *name; int level; } log_levels[] = {
-        { "quiet"  , AV_LOG_QUIET   },
-        { "panic"  , AV_LOG_PANIC   },
-        { "fatal"  , AV_LOG_FATAL   },
-        { "error"  , AV_LOG_ERROR   },
-        { "warning", AV_LOG_WARNING },
-        { "info"   , AV_LOG_INFO    },
-        { "verbose", AV_LOG_VERBOSE },
-        { "debug"  , AV_LOG_DEBUG   },
-        { "trace"  , AV_LOG_TRACE   },
-    };
-    const char *token;
-    char *tail;
-    int flags = av_log_get_flags();
-    int level = av_log_get_level();
-    int cmd, i = 0;
-
-    av_assert0(arg);
-    while (*arg) {
-        token = arg;
-        if (*token == '+' || *token == '-') {
-            cmd = *token++;
-        } else {
-            cmd = 0;
-        }
-        if (!i && !cmd) {
-            flags = 0;  /* missing relative prefix, build absolute value */
-        }
-        if (!strncmp(token, "repeat", 6)) {
-            if (cmd == '-') {
-                flags |= AV_LOG_SKIP_REPEATED;
-            } else {
-                flags &= ~AV_LOG_SKIP_REPEATED;
-            }
-            arg = token + 6;
-        } else if (!strncmp(token, "level", 5)) {
-            if (cmd == '-') {
-                flags &= ~AV_LOG_PRINT_LEVEL;
-            } else {
-                flags |= AV_LOG_PRINT_LEVEL;
-            }
-            arg = token + 5;
-        } else {
-            break;
-        }
-        i++;
-    }
-    if (!*arg) {
-        goto end;
-    } else if (*arg == '+') {
-        arg++;
-    } else if (!i) {
-        flags = av_log_get_flags();  /* level value without prefix, reset flags */
-    }
-
-    for (i = 0; i < FF_ARRAY_ELEMS(log_levels); i++) {
-        if (!strcmp(log_levels[i].name, arg)) {
-            level = log_levels[i].level;
-            goto end;
-        }
-    }
-
-    level = strtol(arg, &tail, 10);
-    if (*tail) {
-        av_log(NULL, AV_LOG_FATAL, "Invalid loglevel \"%s\". "
-               "Possible levels are numbers or:\n", arg);
-        for (i = 0; i < FF_ARRAY_ELEMS(log_levels); i++)
-            av_log(NULL, AV_LOG_FATAL, "\"%s\"\n", log_levels[i].name);
-        exit_program(1);
-    }
-
-end:
-    av_log_set_flags(flags);
-    av_log_set_level(level);
-    return 0;
-}
-
-static void expand_filename_template(AVBPrint *bp, const char *template,
-                                     struct tm *tm)
-{
-    int c;
-
-    while ((c = *(template++))) {
-        if (c == '%') {
-            if (!(c = *(template++)))
-                break;
-            switch (c) {
-            case 'p':
-                av_bprintf(bp, "%s", program_name);
-                break;
-            case 't':
-                av_bprintf(bp, "%04d%02d%02d-%02d%02d%02d",
-                           tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
-                           tm->tm_hour, tm->tm_min, tm->tm_sec);
-                break;
-            case '%':
-                av_bprint_chars(bp, c, 1);
-                break;
-            }
-        } else {
-            av_bprint_chars(bp, c, 1);
-        }
-    }
-}
-
-static int init_report(const char *env)
-{
-    char *filename_template = NULL;
-    char *key, *val;
-    int ret, count = 0;
-    int prog_loglevel, envlevel = 0;
-    time_t now;
-    struct tm *tm;
-    AVBPrint filename;
-
-    if (report_file) /* already opened */
-        return 0;
-    time(&now);
-    tm = localtime(&now);
-
-    while (env && *env) {
-        if ((ret = av_opt_get_key_value(&env, "=", ":", 0, &key, &val)) < 0) {
-            if (count)
-                av_log(NULL, AV_LOG_ERROR,
-                       "Failed to parse FFREPORT environment variable: %s\n",
-                       av_err2str(ret));
-            break;
-        }
-        if (*env)
-            env++;
-        count++;
-        if (!strcmp(key, "file")) {
-            av_free(filename_template);
-            filename_template = val;
-            val = NULL;
-        } else if (!strcmp(key, "level")) {
-            char *tail;
-            report_file_level = strtol(val, &tail, 10);
-            if (*tail) {
-                av_log(NULL, AV_LOG_FATAL, "Invalid report file level\n");
-                exit_program(1);
-            }
-            envlevel = 1;
-        } else {
-            av_log(NULL, AV_LOG_ERROR, "Unknown key '%s' in FFREPORT\n", key);
-        }
-        av_free(val);
-        av_free(key);
-    }
-
-    av_bprint_init(&filename, 0, AV_BPRINT_SIZE_AUTOMATIC);
-    expand_filename_template(&filename,
-                             av_x_if_null(filename_template, "%p-%t.log"), tm);
-    av_free(filename_template);
-    if (!av_bprint_is_complete(&filename)) {
-        av_log(NULL, AV_LOG_ERROR, "Out of memory building report file name\n");
-        return AVERROR(ENOMEM);
-    }
-
-    prog_loglevel = av_log_get_level();
-    if (!envlevel)
-        report_file_level = FFMAX(report_file_level, prog_loglevel);
-
-    report_file = fopen(filename.str, "w");
-    if (!report_file) {
-        int ret = AVERROR(errno);
-        av_log(NULL, AV_LOG_ERROR, "Failed to open report \"%s\": %s\n",
-               filename.str, strerror(errno));
-        return ret;
-    }
-    av_log_set_callback(log_callback_report);
-    av_log(NULL, AV_LOG_INFO,
-           "%s started on %04d-%02d-%02d at %02d:%02d:%02d\n"
-           "Report written to \"%s\"\n"
-           "Log level: %d\n",
-           program_name,
-           tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
-           tm->tm_hour, tm->tm_min, tm->tm_sec,
-           filename.str, report_file_level);
-    av_bprint_finalize(&filename, NULL);
-    return 0;
-}
-
-int opt_report(void *optctx, const char *opt, const char *arg)
-{
-    return init_report(NULL);
-}
-
-int opt_max_alloc(void *optctx, const char *opt, const char *arg)
-{
-    char *tail;
-    size_t max;
-
-    max = strtol(arg, &tail, 10);
-    if (*tail) {
-        av_log(NULL, AV_LOG_FATAL, "Invalid max_alloc \"%s\".\n", arg);
-        exit_program(1);
-    }
-    av_max_alloc(max);
-    return 0;
-}
-
-int opt_timelimit(void *optctx, const char *opt, const char *arg)
-{
-#if HAVE_SETRLIMIT
-    int lim = parse_number_or_die(opt, arg, OPT_INT64, 0, INT_MAX);
-    struct rlimit rl = { lim, lim + 1 };
-    if (setrlimit(RLIMIT_CPU, &rl))
-        perror("setrlimit");
-#else
-    av_log(NULL, AV_LOG_WARNING, "-%s not implemented on this OS\n", opt);
-#endif
-    return 0;
-}
-
-void print_error(const char *filename, int err)
-{
-    char errbuf[128];
-    const char *errbuf_ptr = errbuf;
-
-    if (av_strerror(err, errbuf, sizeof(errbuf)) < 0)
-        errbuf_ptr = strerror(AVUNERROR(err));
-    av_log(NULL, AV_LOG_ERROR, "%s: %s\n", filename, errbuf_ptr);
-}
-
-static int warned_cfg = 0;
-
-#define INDENT        1
-#define SHOW_VERSION  2
-#define SHOW_CONFIG   4
-#define SHOW_COPYRIGHT 8
-
-#define PRINT_LIB_INFO(libname, LIBNAME, flags, level)                  \
-    if (CONFIG_##LIBNAME) {                                             \
-        const char *indent = flags & INDENT? "  " : "";                 \
-        if (flags & SHOW_VERSION) {                                     \
-            unsigned int version = libname##_version();                 \
-            av_log(NULL, level,                                         \
-                   "%slib%-11s %2d.%3d.%3d / %2d.%3d.%3d\n",            \
-                   indent, #libname,                                    \
-                   LIB##LIBNAME##_VERSION_MAJOR,                        \
-                   LIB##LIBNAME##_VERSION_MINOR,                        \
-                   LIB##LIBNAME##_VERSION_MICRO,                        \
-                   AV_VERSION_MAJOR(version), AV_VERSION_MINOR(version),\
-                   AV_VERSION_MICRO(version));                          \
-        }                                                               \
-        if (flags & SHOW_CONFIG) {                                      \
-            const char *cfg = libname##_configuration();                \
-            if (strcmp(FFMPEG_CONFIGURATION, cfg)) {                    \
-                if (!warned_cfg) {                                      \
-                    av_log(NULL, level,                                 \
-                            "%sWARNING: library configuration mismatch\n", \
-                            indent);                                    \
-                    warned_cfg = 1;                                     \
-                }                                                       \
-                av_log(NULL, level, "%s%-11s configuration: %s\n",      \
-                        indent, #libname, cfg);                         \
-            }                                                           \
-        }                                                               \
-    }                                                                   \
-
-static void print_all_libs_info(int flags, int level)
-{
-    PRINT_LIB_INFO(avutil,     AVUTIL,     flags, level);
-    PRINT_LIB_INFO(avcodec,    AVCODEC,    flags, level);
-    PRINT_LIB_INFO(avformat,   AVFORMAT,   flags, level);
-    PRINT_LIB_INFO(avdevice,   AVDEVICE,   flags, level);
-    PRINT_LIB_INFO(avfilter,   AVFILTER,   flags, level);
-    PRINT_LIB_INFO(avresample, AVRESAMPLE, flags, level);
-    PRINT_LIB_INFO(swscale,    SWSCALE,    flags, level);
-    PRINT_LIB_INFO(swresample, SWRESAMPLE, flags, level);
-    PRINT_LIB_INFO(postproc,   POSTPROC,   flags, level);
-}
-
-static void print_program_info(int flags, int level)
-{
-    const char *indent = flags & INDENT? "  " : "";
-
-    av_log(NULL, level, "%s version " FFMPEG_VERSION, program_name);
-    if (flags & SHOW_COPYRIGHT)
-        av_log(NULL, level, " Copyright (c) %d-%d the FFmpeg developers",
-               program_birth_year, CONFIG_THIS_YEAR);
-    av_log(NULL, level, "\n");
-    av_log(NULL, level, "%sbuilt with %s\n", indent, CC_IDENT);
-
-    av_log(NULL, level, "%sconfiguration: " FFMPEG_CONFIGURATION "\n", indent);
-}
-
-static void print_buildconf(int flags, int level)
-{
-    const char *indent = flags & INDENT ? "  " : "";
-    char str[] = { FFMPEG_CONFIGURATION };
-    char *conflist, *remove_tilde, *splitconf;
-
-    // Change all the ' --' strings to '~--' so that
-    // they can be identified as tokens.
-    while ((conflist = strstr(str, " --")) != NULL) {
-        strncpy(conflist, "~--", 3);
-    }
-
-    // Compensate for the weirdness this would cause
-    // when passing 'pkg-config --static'.
-    while ((remove_tilde = strstr(str, "pkg-config~")) != NULL) {
-        strncpy(remove_tilde, "pkg-config ", 11);
-    }
-
-    splitconf = strtok(str, "~");
-    av_log(NULL, level, "\n%sconfiguration:\n", indent);
-    while (splitconf != NULL) {
-        av_log(NULL, level, "%s%s%s\n", indent, indent, splitconf);
-        splitconf = strtok(NULL, "~");
-    }
-}
-
-void show_banner(int argc, char **argv, const OptionDef *options)
-{
-    int idx = locate_option(argc, argv, options, "version");
-    if (hide_banner || idx)
-        return;
-
-    print_program_info (INDENT|SHOW_COPYRIGHT, AV_LOG_INFO);
-    print_all_libs_info(INDENT|SHOW_CONFIG,  AV_LOG_INFO);
-    print_all_libs_info(INDENT|SHOW_VERSION, AV_LOG_INFO);
-}
-
-int show_version(void *optctx, const char *opt, const char *arg)
-{
-    av_log_set_callback(log_callback_help);
-    print_program_info (SHOW_COPYRIGHT, AV_LOG_INFO);
-    print_all_libs_info(SHOW_VERSION, AV_LOG_INFO);
-
-    return 0;
-}
-
-int show_buildconf(void *optctx, const char *opt, const char *arg)
-{
-    av_log_set_callback(log_callback_help);
-    print_buildconf      (INDENT|0, AV_LOG_INFO);
-
-    return 0;
-}
-
-int show_license(void *optctx, const char *opt, const char *arg)
-{
-#if CONFIG_NONFREE
-    printf(
-    "This version of %s has nonfree parts compiled in.\n"
-    "Therefore it is not legally redistributable.\n",
-    program_name );
-#elif CONFIG_GPLV3
-    printf(
-    "%s is free software; you can redistribute it and/or modify\n"
-    "it under the terms of the GNU General Public License as published by\n"
-    "the Free Software Foundation; either version 3 of the License, or\n"
-    "(at your option) any later version.\n"
-    "\n"
-    "%s is distributed in the hope that it will be useful,\n"
-    "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-    "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"
-    "GNU General Public License for more details.\n"
-    "\n"
-    "You should have received a copy of the GNU General Public License\n"
-    "along with %s.  If not, see <http://www.gnu.org/licenses/>.\n",
-    program_name, program_name, program_name );
-#elif CONFIG_GPL
-    printf(
-    "%s is free software; you can redistribute it and/or modify\n"
-    "it under the terms of the GNU General Public License as published by\n"
-    "the Free Software Foundation; either version 2 of the License, or\n"
-    "(at your option) any later version.\n"
-    "\n"
-    "%s is distributed in the hope that it will be useful,\n"
-    "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-    "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"
-    "GNU General Public License for more details.\n"
-    "\n"
-    "You should have received a copy of the GNU General Public License\n"
-    "along with %s; if not, write to the Free Software\n"
-    "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n",
-    program_name, program_name, program_name );
-#elif CONFIG_LGPLV3
-    printf(
-    "%s is free software; you can redistribute it and/or modify\n"
-    "it under the terms of the GNU Lesser General Public License as published by\n"
-    "the Free Software Foundation; either version 3 of the License, or\n"
-    "(at your option) any later version.\n"
-    "\n"
-    "%s is distributed in the hope that it will be useful,\n"
-    "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-    "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n"
-    "GNU Lesser General Public License for more details.\n"
-    "\n"
-    "You should have received a copy of the GNU Lesser General Public License\n"
-    "along with %s.  If not, see <http://www.gnu.org/licenses/>.\n",
-    program_name, program_name, program_name );
-#else
-    printf(
-    "%s is free software; you can redistribute it and/or\n"
-    "modify it under the terms of the GNU Lesser General Public\n"
-    "License as published by the Free Software Foundation; either\n"
-    "version 2.1 of the License, or (at your option) any later version.\n"
-    "\n"
-    "%s is distributed in the hope that it will be useful,\n"
-    "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-    "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n"
-    "Lesser General Public License for more details.\n"
-    "\n"
-    "You should have received a copy of the GNU Lesser General Public\n"
-    "License along with %s; if not, write to the Free Software\n"
-    "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\n",
-    program_name, program_name, program_name );
-#endif
-
-    return 0;
-}
-
-static int is_device(const AVClass *avclass)
-{
-    if (!avclass)
-        return 0;
-    return AV_IS_INPUT_DEVICE(avclass->category) || AV_IS_OUTPUT_DEVICE(avclass->category);
-}
-
-static int show_formats_devices(void *optctx, const char *opt, const char *arg, int device_only, int muxdemuxers)
-{
-    void *ifmt_opaque = NULL;
-    const AVInputFormat *ifmt  = NULL;
-    void *ofmt_opaque = NULL;
-    const AVOutputFormat *ofmt = NULL;
-    const char *last_name;
-    int is_dev;
-
-    printf("%s\n"
-           " D. = Demuxing supported\n"
-           " .E = Muxing supported\n"
-           " --\n", device_only ? "Devices:" : "File formats:");
-    last_name = "000";
-    for (;;) {
-        int decode = 0;
-        int encode = 0;
-        const char *name      = NULL;
-        const char *long_name = NULL;
-
-        if (muxdemuxers !=SHOW_DEMUXERS) {
-            ofmt_opaque = NULL;
-            while ((ofmt = av_muxer_iterate(&ofmt_opaque))) {
-                is_dev = is_device(ofmt->priv_class);
-                if (!is_dev && device_only)
-                    continue;
-                if ((!name || strcmp(ofmt->name, name) < 0) &&
-                    strcmp(ofmt->name, last_name) > 0) {
-                    name      = ofmt->name;
-                    long_name = ofmt->long_name;
-                    encode    = 1;
-                }
-            }
-        }
-        if (muxdemuxers != SHOW_MUXERS) {
-            ifmt_opaque = NULL;
-            while ((ifmt = av_demuxer_iterate(&ifmt_opaque))) {
-                is_dev = is_device(ifmt->priv_class);
-                if (!is_dev && device_only)
-                    continue;
-                if ((!name || strcmp(ifmt->name, name) < 0) &&
-                    strcmp(ifmt->name, last_name) > 0) {
-                    name      = ifmt->name;
-                    long_name = ifmt->long_name;
-                    encode    = 0;
-                }
-                if (name && strcmp(ifmt->name, name) == 0)
-                    decode = 1;
-            }
-        }
-        if (!name)
-            break;
-        last_name = name;
-
-        printf(" %s%s %-15s %s\n",
-               decode ? "D" : " ",
-               encode ? "E" : " ",
-               name,
-            long_name ? long_name:" ");
-    }
-    return 0;
-}
-
-int show_formats(void *optctx, const char *opt, const char *arg)
-{
-    return show_formats_devices(optctx, opt, arg, 0, SHOW_DEFAULT);
-}
-
-int show_muxers(void *optctx, const char *opt, const char *arg)
-{
-    return show_formats_devices(optctx, opt, arg, 0, SHOW_MUXERS);
-}
-
-int show_demuxers(void *optctx, const char *opt, const char *arg)
-{
-    return show_formats_devices(optctx, opt, arg, 0, SHOW_DEMUXERS);
-}
-
-int show_devices(void *optctx, const char *opt, const char *arg)
-{
-    return show_formats_devices(optctx, opt, arg, 1, SHOW_DEFAULT);
-}
-
-#define PRINT_CODEC_SUPPORTED(codec, field, type, list_name, term, get_name) \
-    if (codec->field) {                                                      \
-        const type *p = codec->field;                                        \
-                                                                             \
-        printf("    Supported " list_name ":");                              \
-        while (*p != term) {                                                 \
-            get_name(*p);                                                    \
-            printf(" %s", name);                                             \
-            p++;                                                             \
-        }                                                                    \
-        printf("\n");                                                        \
-    }                                                                        \
-
-static void print_codec(const AVCodec *c)
-{
-    int encoder = av_codec_is_encoder(c);
-
-    printf("%s %s [%s]:\n", encoder ? "Encoder" : "Decoder", c->name,
-           c->long_name ? c->long_name : "");
-
-    printf("    General capabilities: ");
-    if (c->capabilities & AV_CODEC_CAP_DRAW_HORIZ_BAND)
-        printf("horizband ");
-    if (c->capabilities & AV_CODEC_CAP_DR1)
-        printf("dr1 ");
-    if (c->capabilities & AV_CODEC_CAP_TRUNCATED)
-        printf("trunc ");
-    if (c->capabilities & AV_CODEC_CAP_DELAY)
-        printf("delay ");
-    if (c->capabilities & AV_CODEC_CAP_SMALL_LAST_FRAME)
-        printf("small ");
-    if (c->capabilities & AV_CODEC_CAP_SUBFRAMES)
-        printf("subframes ");
-    if (c->capabilities & AV_CODEC_CAP_EXPERIMENTAL)
-        printf("exp ");
-    if (c->capabilities & AV_CODEC_CAP_CHANNEL_CONF)
-        printf("chconf ");
-    if (c->capabilities & AV_CODEC_CAP_PARAM_CHANGE)
-        printf("paramchange ");
-    if (c->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE)
-        printf("variable ");
-    if (c->capabilities & (AV_CODEC_CAP_FRAME_THREADS |
-                           AV_CODEC_CAP_SLICE_THREADS |
-                           AV_CODEC_CAP_AUTO_THREADS))
-        printf("threads ");
-    if (c->capabilities & AV_CODEC_CAP_AVOID_PROBING)
-        printf("avoidprobe ");
-    if (c->capabilities & AV_CODEC_CAP_INTRA_ONLY)
-        printf("intraonly ");
-    if (c->capabilities & AV_CODEC_CAP_LOSSLESS)
-        printf("lossless ");
-    if (c->capabilities & AV_CODEC_CAP_HARDWARE)
-        printf("hardware ");
-    if (c->capabilities & AV_CODEC_CAP_HYBRID)
-        printf("hybrid ");
-    if (!c->capabilities)
-        printf("none");
-    printf("\n");
-
-    if (c->type == AVMEDIA_TYPE_VIDEO ||
-        c->type == AVMEDIA_TYPE_AUDIO) {
-        printf("    Threading capabilities: ");
-        switch (c->capabilities & (AV_CODEC_CAP_FRAME_THREADS |
-                                   AV_CODEC_CAP_SLICE_THREADS |
-                                   AV_CODEC_CAP_AUTO_THREADS)) {
-        case AV_CODEC_CAP_FRAME_THREADS |
-             AV_CODEC_CAP_SLICE_THREADS: printf("frame and slice"); break;
-        case AV_CODEC_CAP_FRAME_THREADS: printf("frame");           break;
-        case AV_CODEC_CAP_SLICE_THREADS: printf("slice");           break;
-        case AV_CODEC_CAP_AUTO_THREADS : printf("auto");            break;
-        default:                         printf("none");            break;
-        }
-        printf("\n");
-    }
-
-    if (avcodec_get_hw_config(c, 0)) {
-        printf("    Supported hardware devices: ");
-        for (int i = 0;; i++) {
-            const AVCodecHWConfig *config = avcodec_get_hw_config(c, i);
-            if (!config)
-                break;
-            printf("%s ", av_hwdevice_get_type_name(config->device_type));
-        }
-        printf("\n");
-    }
-
-    if (c->supported_framerates) {
-        const AVRational *fps = c->supported_framerates;
-
-        printf("    Supported framerates:");
-        while (fps->num) {
-            printf(" %d/%d", fps->num, fps->den);
-            fps++;
-        }
-        printf("\n");
-    }
-    PRINT_CODEC_SUPPORTED(c, pix_fmts, enum AVPixelFormat, "pixel formats",
-                          AV_PIX_FMT_NONE, GET_PIX_FMT_NAME);
-    PRINT_CODEC_SUPPORTED(c, supported_samplerates, int, "sample rates", 0,
-                          GET_SAMPLE_RATE_NAME);
-    PRINT_CODEC_SUPPORTED(c, sample_fmts, enum AVSampleFormat, "sample formats",
-                          AV_SAMPLE_FMT_NONE, GET_SAMPLE_FMT_NAME);
-    PRINT_CODEC_SUPPORTED(c, channel_layouts, uint64_t, "channel layouts",
-                          0, GET_CH_LAYOUT_DESC);
-
-    if (c->priv_class) {
-        show_help_children(c->priv_class,
-                           AV_OPT_FLAG_ENCODING_PARAM |
-                           AV_OPT_FLAG_DECODING_PARAM);
-    }
-}
-
-static char get_media_type_char(enum AVMediaType type)
-{
-    switch (type) {
-        case AVMEDIA_TYPE_VIDEO:    return 'V';
-        case AVMEDIA_TYPE_AUDIO:    return 'A';
-        case AVMEDIA_TYPE_DATA:     return 'D';
-        case AVMEDIA_TYPE_SUBTITLE: return 'S';
-        case AVMEDIA_TYPE_ATTACHMENT:return 'T';
-        default:                    return '?';
-    }
-}
-
-static const AVCodec *next_codec_for_id(enum AVCodecID id, void **iter,
-                                        int encoder)
-{
-    const AVCodec *c;
-    while ((c = av_codec_iterate(iter))) {
-        if (c->id == id &&
-            (encoder ? av_codec_is_encoder(c) : av_codec_is_decoder(c)))
-            return c;
-    }
-    return NULL;
-}
-
-static int compare_codec_desc(const void *a, const void *b)
-{
-    const AVCodecDescriptor * const *da = a;
-    const AVCodecDescriptor * const *db = b;
-
-    return (*da)->type != (*db)->type ? FFDIFFSIGN((*da)->type, (*db)->type) :
-           strcmp((*da)->name, (*db)->name);
-}
-
-static unsigned get_codecs_sorted(const AVCodecDescriptor ***rcodecs)
-{
-    const AVCodecDescriptor *desc = NULL;
-    const AVCodecDescriptor **codecs;
-    unsigned nb_codecs = 0, i = 0;
-
-    while ((desc = avcodec_descriptor_next(desc)))
-        nb_codecs++;
-    if (!(codecs = av_calloc(nb_codecs, sizeof(*codecs)))) {
-        av_log(NULL, AV_LOG_ERROR, "Out of memory\n");
-        exit_program(1);
-    }
-    desc = NULL;
-    while ((desc = avcodec_descriptor_next(desc)))
-        codecs[i++] = desc;
-    av_assert0(i == nb_codecs);
-    qsort(codecs, nb_codecs, sizeof(*codecs), compare_codec_desc);
-    *rcodecs = codecs;
-    return nb_codecs;
-}
-
-static void print_codecs_for_id(enum AVCodecID id, int encoder)
-{
-    void *iter = NULL;
-    const AVCodec *codec;
-
-    printf(" (%s: ", encoder ? "encoders" : "decoders");
-
-    while ((codec = next_codec_for_id(id, &iter, encoder)))
-        printf("%s ", codec->name);
-
-    printf(")");
-}
-
-int show_codecs(void *optctx, const char *opt, const char *arg)
-{
-    const AVCodecDescriptor **codecs;
-    unsigned i, nb_codecs = get_codecs_sorted(&codecs);
-
-    printf("Codecs:\n"
-           " D..... = Decoding supported\n"
-           " .E.... = Encoding supported\n"
-           " ..V... = Video codec\n"
-           " ..A... = Audio codec\n"
-           " ..S... = Subtitle codec\n"
-           " ...I.. = Intra frame-only codec\n"
-           " ....L. = Lossy compression\n"
-           " .....S = Lossless compression\n"
-           " -------\n");
-    for (i = 0; i < nb_codecs; i++) {
-        const AVCodecDescriptor *desc = codecs[i];
-        const AVCodec *codec;
-        void *iter = NULL;
-
-        if (strstr(desc->name, "_deprecated"))
-            continue;
-
-        printf(" ");
-        printf(avcodec_find_decoder(desc->id) ? "D" : ".");
-        printf(avcodec_find_encoder(desc->id) ? "E" : ".");
-
-        printf("%c", get_media_type_char(desc->type));
-        printf((desc->props & AV_CODEC_PROP_INTRA_ONLY) ? "I" : ".");
-        printf((desc->props & AV_CODEC_PROP_LOSSY)      ? "L" : ".");
-        printf((desc->props & AV_CODEC_PROP_LOSSLESS)   ? "S" : ".");
-
-        printf(" %-20s %s", desc->name, desc->long_name ? desc->long_name : "");
-
-        /* print decoders/encoders when there's more than one or their
-         * names are different from codec name */
-        while ((codec = next_codec_for_id(desc->id, &iter, 0))) {
-            if (strcmp(codec->name, desc->name)) {
-                print_codecs_for_id(desc->id, 0);
-                break;
-            }
-        }
-        iter = NULL;
-        while ((codec = next_codec_for_id(desc->id, &iter, 1))) {
-            if (strcmp(codec->name, desc->name)) {
-                print_codecs_for_id(desc->id, 1);
-                break;
-            }
-        }
-
-        printf("\n");
-    }
-    av_free(codecs);
-    return 0;
-}
-
-static void print_codecs(int encoder)
-{
-    const AVCodecDescriptor **codecs;
-    unsigned i, nb_codecs = get_codecs_sorted(&codecs);
-
-    printf("%s:\n"
-           " V..... = Video\n"
-           " A..... = Audio\n"
-           " S..... = Subtitle\n"
-           " .F.... = Frame-level multithreading\n"
-           " ..S... = Slice-level multithreading\n"
-           " ...X.. = Codec is experimental\n"
-           " ....B. = Supports draw_horiz_band\n"
-           " .....D = Supports direct rendering method 1\n"
-           " ------\n",
-           encoder ? "Encoders" : "Decoders");
-    for (i = 0; i < nb_codecs; i++) {
-        const AVCodecDescriptor *desc = codecs[i];
-        const AVCodec *codec;
-        void *iter = NULL;
-
-        while ((codec = next_codec_for_id(desc->id, &iter, encoder))) {
-            printf(" %c", get_media_type_char(desc->type));
-            printf((codec->capabilities & AV_CODEC_CAP_FRAME_THREADS) ? "F" : ".");
-            printf((codec->capabilities & AV_CODEC_CAP_SLICE_THREADS) ? "S" : ".");
-            printf((codec->capabilities & AV_CODEC_CAP_EXPERIMENTAL)  ? "X" : ".");
-            printf((codec->capabilities & AV_CODEC_CAP_DRAW_HORIZ_BAND)?"B" : ".");
-            printf((codec->capabilities & AV_CODEC_CAP_DR1)           ? "D" : ".");
-
-            printf(" %-20s %s", codec->name, codec->long_name ? codec->long_name : "");
-            if (strcmp(codec->name, desc->name))
-                printf(" (codec %s)", desc->name);
-
-            printf("\n");
-        }
-    }
-    av_free(codecs);
-}
-
-int show_decoders(void *optctx, const char *opt, const char *arg)
-{
-    print_codecs(0);
-    return 0;
-}
-
-int show_encoders(void *optctx, const char *opt, const char *arg)
-{
-    print_codecs(1);
-    return 0;
-}
-
-int show_bsfs(void *optctx, const char *opt, const char *arg)
-{
-    const AVBitStreamFilter *bsf = NULL;
-    void *opaque = NULL;
-
-    printf("Bitstream filters:\n");
-    while ((bsf = av_bsf_iterate(&opaque)))
-        printf("%s\n", bsf->name);
-    printf("\n");
-    return 0;
-}
-
-int show_protocols(void *optctx, const char *opt, const char *arg)
-{
-    void *opaque = NULL;
-    const char *name;
-
-    printf("Supported file protocols:\n"
-           "Input:\n");
-    while ((name = avio_enum_protocols(&opaque, 0)))
-        printf("  %s\n", name);
-    printf("Output:\n");
-    while ((name = avio_enum_protocols(&opaque, 1)))
-        printf("  %s\n", name);
-    return 0;
-}
-
-int show_filters(void *optctx, const char *opt, const char *arg)
-{
-#if CONFIG_AVFILTER
-    const AVFilter *filter = NULL;
-    char descr[64], *descr_cur;
-    void *opaque = NULL;
-    int i, j;
-    const AVFilterPad *pad;
-
-    printf("Filters:\n"
-           "  T.. = Timeline support\n"
-           "  .S. = Slice threading\n"
-           "  ..C = Command support\n"
-           "  A = Audio input/output\n"
-           "  V = Video input/output\n"
-           "  N = Dynamic number and/or type of input/output\n"
-           "  | = Source or sink filter\n");
-    while ((filter = av_filter_iterate(&opaque))) {
-        descr_cur = descr;
-        for (i = 0; i < 2; i++) {
-            if (i) {
-                *(descr_cur++) = '-';
-                *(descr_cur++) = '>';
-            }
-            pad = i ? filter->outputs : filter->inputs;
-            for (j = 0; pad && avfilter_pad_get_name(pad, j); j++) {
-                if (descr_cur >= descr + sizeof(descr) - 4)
-                    break;
-                *(descr_cur++) = get_media_type_char(avfilter_pad_get_type(pad, j));
-            }
-            if (!j)
-                *(descr_cur++) = ((!i && (filter->flags & AVFILTER_FLAG_DYNAMIC_INPUTS)) ||
-                                  ( i && (filter->flags & AVFILTER_FLAG_DYNAMIC_OUTPUTS))) ? 'N' : '|';
-        }
-        *descr_cur = 0;
-        printf(" %c%c%c %-17s %-10s %s\n",
-               filter->flags & AVFILTER_FLAG_SUPPORT_TIMELINE ? 'T' : '.',
-               filter->flags & AVFILTER_FLAG_SLICE_THREADS    ? 'S' : '.',
-               filter->process_command                        ? 'C' : '.',
-               filter->name, descr, filter->description);
-    }
-#else
-    printf("No filters available: libavfilter disabled\n");
-#endif
-    return 0;
-}
-
-int show_colors(void *optctx, const char *opt, const char *arg)
-{
-    const char *name;
-    const uint8_t *rgb;
-    int i;
-
-    printf("%-32s #RRGGBB\n", "name");
-
-    for (i = 0; name = av_get_known_color_name(i, &rgb); i++)
-        printf("%-32s #%02x%02x%02x\n", name, rgb[0], rgb[1], rgb[2]);
-
-    return 0;
-}
-
-int show_pix_fmts(void *optctx, const char *opt, const char *arg)
-{
-    const AVPixFmtDescriptor *pix_desc = NULL;
-
-    printf("Pixel formats:\n"
-           "I.... = Supported Input  format for conversion\n"
-           ".O... = Supported Output format for conversion\n"
-           "..H.. = Hardware accelerated format\n"
-           "...P. = Paletted format\n"
-           "....B = Bitstream format\n"
-           "FLAGS NAME            NB_COMPONENTS BITS_PER_PIXEL\n"
-           "-----\n");
-
-#if !CONFIG_SWSCALE
-#   define sws_isSupportedInput(x)  0
-#   define sws_isSupportedOutput(x) 0
-#endif
-
-    while ((pix_desc = av_pix_fmt_desc_next(pix_desc))) {
-        enum AVPixelFormat av_unused pix_fmt = av_pix_fmt_desc_get_id(pix_desc);
-        printf("%c%c%c%c%c %-16s       %d            %2d\n",
-               sws_isSupportedInput (pix_fmt)              ? 'I' : '.',
-               sws_isSupportedOutput(pix_fmt)              ? 'O' : '.',
-               pix_desc->flags & AV_PIX_FMT_FLAG_HWACCEL   ? 'H' : '.',
-               pix_desc->flags & AV_PIX_FMT_FLAG_PAL       ? 'P' : '.',
-               pix_desc->flags & AV_PIX_FMT_FLAG_BITSTREAM ? 'B' : '.',
-               pix_desc->name,
-               pix_desc->nb_components,
-               av_get_bits_per_pixel(pix_desc));
-    }
-    return 0;
-}
-
-int show_layouts(void *optctx, const char *opt, const char *arg)
-{
-    int i = 0;
-    uint64_t layout, j;
-    const char *name, *descr;
-
-    printf("Individual channels:\n"
-           "NAME           DESCRIPTION\n");
-    for (i = 0; i < 63; i++) {
-        name = av_get_channel_name((uint64_t)1 << i);
-        if (!name)
-            continue;
-        descr = av_get_channel_description((uint64_t)1 << i);
-        printf("%-14s %s\n", name, descr);
-    }
-    printf("\nStandard channel layouts:\n"
-           "NAME           DECOMPOSITION\n");
-    for (i = 0; !av_get_standard_channel_layout(i, &layout, &name); i++) {
-        if (name) {
-            printf("%-14s ", name);
-            for (j = 1; j; j <<= 1)
-                if ((layout & j))
-                    printf("%s%s", (layout & (j - 1)) ? "+" : "", av_get_channel_name(j));
-            printf("\n");
-        }
-    }
-    return 0;
-}
-
-int show_sample_fmts(void *optctx, const char *opt, const char *arg)
-{
-    int i;
-    char fmt_str[128];
-    for (i = -1; i < AV_SAMPLE_FMT_NB; i++)
-        printf("%s\n", av_get_sample_fmt_string(fmt_str, sizeof(fmt_str), i));
-    return 0;
-}
-
-static void show_help_codec(const char *name, int encoder)
-{
-    const AVCodecDescriptor *desc;
-    const AVCodec *codec;
-
-    if (!name) {
-        av_log(NULL, AV_LOG_ERROR, "No codec name specified.\n");
-        return;
-    }
-
-    codec = encoder ? avcodec_find_encoder_by_name(name) :
-                      avcodec_find_decoder_by_name(name);
-
-    if (codec)
-        print_codec(codec);
-    else if ((desc = avcodec_descriptor_get_by_name(name))) {
-        void *iter = NULL;
-        int printed = 0;
-
-        while ((codec = next_codec_for_id(desc->id, &iter, encoder))) {
-            printed = 1;
-            print_codec(codec);
-        }
-
-        if (!printed) {
-            av_log(NULL, AV_LOG_ERROR, "Codec '%s' is known to FFmpeg, "
-                   "but no %s for it are available. FFmpeg might need to be "
-                   "recompiled with additional external libraries.\n",
-                   name, encoder ? "encoders" : "decoders");
-        }
-    } else {
-        av_log(NULL, AV_LOG_ERROR, "Codec '%s' is not recognized by FFmpeg.\n",
-               name);
-    }
-}
-
-static void show_help_demuxer(const char *name)
-{
-    const AVInputFormat *fmt = av_find_input_format(name);
-
-    if (!fmt) {
-        av_log(NULL, AV_LOG_ERROR, "Unknown format '%s'.\n", name);
-        return;
-    }
-
-    printf("Demuxer %s [%s]:\n", fmt->name, fmt->long_name);
-
-    if (fmt->extensions)
-        printf("    Common extensions: %s.\n", fmt->extensions);
-
-    if (fmt->priv_class)
-        show_help_children(fmt->priv_class, AV_OPT_FLAG_DECODING_PARAM);
-}
-
-static void show_help_protocol(const char *name)
-{
-    const AVClass *proto_class;
-
-    if (!name) {
-        av_log(NULL, AV_LOG_ERROR, "No protocol name specified.\n");
-        return;
-    }
-
-    proto_class = avio_protocol_get_class(name);
-    if (!proto_class) {
-        av_log(NULL, AV_LOG_ERROR, "Unknown protocol '%s'.\n", name);
-        return;
-    }
-
-    show_help_children(proto_class, AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_ENCODING_PARAM);
-}
-
-static void show_help_muxer(const char *name)
-{
-    const AVCodecDescriptor *desc;
-    const AVOutputFormat *fmt = av_guess_format(name, NULL, NULL);
-
-    if (!fmt) {
-        av_log(NULL, AV_LOG_ERROR, "Unknown format '%s'.\n", name);
-        return;
-    }
-
-    printf("Muxer %s [%s]:\n", fmt->name, fmt->long_name);
-
-    if (fmt->extensions)
-        printf("    Common extensions: %s.\n", fmt->extensions);
-    if (fmt->mime_type)
-        printf("    Mime type: %s.\n", fmt->mime_type);
-    if (fmt->video_codec != AV_CODEC_ID_NONE &&
-        (desc = avcodec_descriptor_get(fmt->video_codec))) {
-        printf("    Default video codec: %s.\n", desc->name);
-    }
-    if (fmt->audio_codec != AV_CODEC_ID_NONE &&
-        (desc = avcodec_descriptor_get(fmt->audio_codec))) {
-        printf("    Default audio codec: %s.\n", desc->name);
-    }
-    if (fmt->subtitle_codec != AV_CODEC_ID_NONE &&
-        (desc = avcodec_descriptor_get(fmt->subtitle_codec))) {
-        printf("    Default subtitle codec: %s.\n", desc->name);
-    }
-
-    if (fmt->priv_class)
-        show_help_children(fmt->priv_class, AV_OPT_FLAG_ENCODING_PARAM);
-}
-
-#if CONFIG_AVFILTER
-static void show_help_filter(const char *name)
-{
-#if CONFIG_AVFILTER
-    const AVFilter *f = avfilter_get_by_name(name);
-    int i, count;
-
-    if (!name) {
-        av_log(NULL, AV_LOG_ERROR, "No filter name specified.\n");
-        return;
-    } else if (!f) {
-        av_log(NULL, AV_LOG_ERROR, "Unknown filter '%s'.\n", name);
-        return;
-    }
-
-    printf("Filter %s\n", f->name);
-    if (f->description)
-        printf("  %s\n", f->description);
-
-    if (f->flags & AVFILTER_FLAG_SLICE_THREADS)
-        printf("    slice threading supported\n");
-
-    printf("    Inputs:\n");
-    count = avfilter_pad_count(f->inputs);
-    for (i = 0; i < count; i++) {
-        printf("       #%d: %s (%s)\n", i, avfilter_pad_get_name(f->inputs, i),
-               media_type_string(avfilter_pad_get_type(f->inputs, i)));
-    }
-    if (f->flags & AVFILTER_FLAG_DYNAMIC_INPUTS)
-        printf("        dynamic (depending on the options)\n");
-    else if (!count)
-        printf("        none (source filter)\n");
-
-    printf("    Outputs:\n");
-    count = avfilter_pad_count(f->outputs);
-    for (i = 0; i < count; i++) {
-        printf("       #%d: %s (%s)\n", i, avfilter_pad_get_name(f->outputs, i),
-               media_type_string(avfilter_pad_get_type(f->outputs, i)));
-    }
-    if (f->flags & AVFILTER_FLAG_DYNAMIC_OUTPUTS)
-        printf("        dynamic (depending on the options)\n");
-    else if (!count)
-        printf("        none (sink filter)\n");
-
-    if (f->priv_class)
-        show_help_children(f->priv_class, AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_FILTERING_PARAM |
-                                          AV_OPT_FLAG_AUDIO_PARAM);
-    if (f->flags & AVFILTER_FLAG_SUPPORT_TIMELINE)
-        printf("This filter has support for timeline through the 'enable' option.\n");
-#else
-    av_log(NULL, AV_LOG_ERROR, "Build without libavfilter; "
-           "can not to satisfy request\n");
-#endif
-}
-#endif
-
-static void show_help_bsf(const char *name)
-{
-    const AVBitStreamFilter *bsf = av_bsf_get_by_name(name);
-
-    if (!name) {
-        av_log(NULL, AV_LOG_ERROR, "No bitstream filter name specified.\n");
-        return;
-    } else if (!bsf) {
-        av_log(NULL, AV_LOG_ERROR, "Unknown bit stream filter '%s'.\n", name);
-        return;
-    }
-
-    printf("Bit stream filter %s\n", bsf->name);
-    PRINT_CODEC_SUPPORTED(bsf, codec_ids, enum AVCodecID, "codecs",
-                          AV_CODEC_ID_NONE, GET_CODEC_NAME);
-    if (bsf->priv_class)
-        show_help_children(bsf->priv_class, AV_OPT_FLAG_BSF_PARAM);
-}
-
-int show_help(void *optctx, const char *opt, const char *arg)
-{
-    char *topic, *par;
-    av_log_set_callback(log_callback_help);
-
-    topic = av_strdup(arg ? arg : "");
-    if (!topic)
-        return AVERROR(ENOMEM);
-    par = strchr(topic, '=');
-    if (par)
-        *par++ = 0;
-
-    if (!*topic) {
-        show_help_default(topic, par);
-    } else if (!strcmp(topic, "decoder")) {
-        show_help_codec(par, 0);
-    } else if (!strcmp(topic, "encoder")) {
-        show_help_codec(par, 1);
-    } else if (!strcmp(topic, "demuxer")) {
-        show_help_demuxer(par);
-    } else if (!strcmp(topic, "muxer")) {
-        show_help_muxer(par);
-    } else if (!strcmp(topic, "protocol")) {
-        show_help_protocol(par);
-#if CONFIG_AVFILTER
-    } else if (!strcmp(topic, "filter")) {
-        show_help_filter(par);
-#endif
-    } else if (!strcmp(topic, "bsf")) {
-        show_help_bsf(par);
-    } else {
-        show_help_default(topic, par);
-    }
-
-    av_freep(&topic);
-    return 0;
-}
-
-int read_yesno(void)
-{
-    int c = getchar();
-    int yesno = (av_toupper(c) == 'Y');
-
-    while (c != '\n' && c != EOF)
-        c = getchar();
-
-    return yesno;
-}
-
-FILE *get_preset_file(char *filename, size_t filename_size,
-                      const char *preset_name, int is_path,
-                      const char *codec_name)
-{
-    FILE *f = NULL;
-    int i;
-    const char *base[3] = { getenv("FFMPEG_DATADIR"),
-                            getenv("HOME"),
-                            FFMPEG_DATADIR, };
-
-    if (is_path) {
-        av_strlcpy(filename, preset_name, filename_size);
-        f = fopen(filename, "r");
-    } else {
-#if HAVE_GETMODULEHANDLE && defined(_WIN32)
-        char datadir[MAX_PATH], *ls;
-        base[2] = NULL;
-
-        if (GetModuleFileNameA(GetModuleHandleA(NULL), datadir, sizeof(datadir) - 1))
-        {
-            for (ls = datadir; ls < datadir + strlen(datadir); ls++)
-                if (*ls == '\\') *ls = '/';
-
-            if (ls = strrchr(datadir, '/'))
-            {
-                *ls = 0;
-                strncat(datadir, "/ffpresets",  sizeof(datadir) - 1 - strlen(datadir));
-                base[2] = datadir;
-            }
-        }
-#endif
-        for (i = 0; i < 3 && !f; i++) {
-            if (!base[i])
-                continue;
-            snprintf(filename, filename_size, "%s%s/%s.ffpreset", base[i],
-                     i != 1 ? "" : "/.ffmpeg", preset_name);
-            f = fopen(filename, "r");
-            if (!f && codec_name) {
-                snprintf(filename, filename_size,
-                         "%s%s/%s-%s.ffpreset",
-                         base[i], i != 1 ? "" : "/.ffmpeg", codec_name,
-                         preset_name);
-                f = fopen(filename, "r");
-            }
-        }
-    }
-
-    return f;
-}
-
-int check_stream_specifier(AVFormatContext *s, AVStream *st, const char *spec)
-{
-    int ret = avformat_match_stream_specifier(s, st, spec);
-    if (ret < 0)
-        av_log(s, AV_LOG_ERROR, "Invalid stream specifier: %s.\n", spec);
-    return ret;
-}
-
-AVDictionary *filter_codec_opts(AVDictionary *opts, enum AVCodecID codec_id,
-                                AVFormatContext *s, AVStream *st, AVCodec *codec)
-{
-    AVDictionary    *ret = NULL;
-    AVDictionaryEntry *t = NULL;
-    int            flags = s->oformat ? AV_OPT_FLAG_ENCODING_PARAM
-                                      : AV_OPT_FLAG_DECODING_PARAM;
-    char          prefix = 0;
-    const AVClass    *cc = avcodec_get_class();
-
-    if (!codec)
-        codec            = s->oformat ? avcodec_find_encoder(codec_id)
-                                      : avcodec_find_decoder(codec_id);
-
-    switch (st->codecpar->codec_type) {
-    case AVMEDIA_TYPE_VIDEO:
-        prefix  = 'v';
-        flags  |= AV_OPT_FLAG_VIDEO_PARAM;
-        break;
-    case AVMEDIA_TYPE_AUDIO:
-        prefix  = 'a';
-        flags  |= AV_OPT_FLAG_AUDIO_PARAM;
-        break;
-    case AVMEDIA_TYPE_SUBTITLE:
-        prefix  = 's';
-        flags  |= AV_OPT_FLAG_SUBTITLE_PARAM;
-        break;
-    }
-
-    while (t = av_dict_get(opts, "", t, AV_DICT_IGNORE_SUFFIX)) {
-        char *p = strchr(t->key, ':');
-
-        /* check stream specification in opt name */
-        if (p)
-            switch (check_stream_specifier(s, st, p + 1)) {
-            case  1: *p = 0; break;
-            case  0:         continue;
-            default:         exit_program(1);
-            }
-
-        if (av_opt_find(&cc, t->key, NULL, flags, AV_OPT_SEARCH_FAKE_OBJ) ||
-            !codec ||
-            (codec->priv_class &&
-             av_opt_find(&codec->priv_class, t->key, NULL, flags,
-                         AV_OPT_SEARCH_FAKE_OBJ)))
-            av_dict_set(&ret, t->key, t->value, 0);
-        else if (t->key[0] == prefix &&
-                 av_opt_find(&cc, t->key + 1, NULL, flags,
-                             AV_OPT_SEARCH_FAKE_OBJ))
-            av_dict_set(&ret, t->key + 1, t->value, 0);
-
-        if (p)
-            *p = ':';
-    }
-    return ret;
-}
-
-AVDictionary **setup_find_stream_info_opts(AVFormatContext *s,
-                                           AVDictionary *codec_opts)
-{
-    int i;
-    AVDictionary **opts;
-
-    if (!s->nb_streams)
-        return NULL;
-    opts = av_mallocz_array(s->nb_streams, sizeof(*opts));
-    if (!opts) {
-        av_log(NULL, AV_LOG_ERROR,
-               "Could not alloc memory for stream options.\n");
-        return NULL;
-    }
-    for (i = 0; i < s->nb_streams; i++)
-        opts[i] = filter_codec_opts(codec_opts, s->streams[i]->codecpar->codec_id,
-                                    s, s->streams[i], NULL);
-    return opts;
-}
-
-void *grow_array(void *array, int elem_size, int *size, int new_size)
-{
-    if (new_size >= INT_MAX / elem_size) {
-        av_log(NULL, AV_LOG_ERROR, "Array too big.\n");
-        exit_program(1);
-    }
-    if (*size < new_size) {
-        uint8_t *tmp = av_realloc_array(array, new_size, elem_size);
-        if (!tmp) {
-            av_log(NULL, AV_LOG_ERROR, "Could not alloc buffer.\n");
-            exit_program(1);
-        }
-        memset(tmp + *size*elem_size, 0, (new_size-*size) * elem_size);
-        *size = new_size;
-        return tmp;
-    }
-    return array;
-}
-
-double get_rotation(AVStream *st)
-{
-    uint8_t* displaymatrix = av_stream_get_side_data(st,
-                                                     AV_PKT_DATA_DISPLAYMATRIX, NULL);
-    double theta = 0;
-    if (displaymatrix)
-        theta = -av_display_rotation_get((int32_t*) displaymatrix);
-
-    theta -= 360*floor(theta/360 + 0.9/360);
-
-    if (fabs(theta - 90*round(theta/90)) > 2)
-        av_log(NULL, AV_LOG_WARNING, "Odd rotation angle.\n"
-               "If you want to help, upload a sample "
-               "of this file to ftp://upload.ffmpeg.org/incoming/ "
-               "and contact the ffmpeg-devel mailing list. (ffmpeg-devel@ffmpeg.org)");
-
-    return theta;
-}
-
-#if CONFIG_AVDEVICE
-static int print_device_sources(AVInputFormat *fmt, AVDictionary *opts)
-{
-    int ret, i;
-    AVDeviceInfoList *device_list = NULL;
-
-    if (!fmt || !fmt->priv_class  || !AV_IS_INPUT_DEVICE(fmt->priv_class->category))
-        return AVERROR(EINVAL);
-
-    printf("Auto-detected sources for %s:\n", fmt->name);
-    if (!fmt->get_device_list) {
-        ret = AVERROR(ENOSYS);
-        printf("Cannot list sources. Not implemented.\n");
-        goto fail;
-    }
-
-    if ((ret = avdevice_list_input_sources(fmt, NULL, opts, &device_list)) < 0) {
-        printf("Cannot list sources.\n");
-        goto fail;
-    }
-
-    for (i = 0; i < device_list->nb_devices; i++) {
-        printf("%s %s [%s]\n", device_list->default_device == i ? "*" : " ",
-               device_list->devices[i]->device_name, device_list->devices[i]->device_description);
-    }
-
-  fail:
-    avdevice_free_list_devices(&device_list);
-    return ret;
-}
-
-static int print_device_sinks(AVOutputFormat *fmt, AVDictionary *opts)
-{
-    int ret, i;
-    AVDeviceInfoList *device_list = NULL;
-
-    if (!fmt || !fmt->priv_class  || !AV_IS_OUTPUT_DEVICE(fmt->priv_class->category))
-        return AVERROR(EINVAL);
-
-    printf("Auto-detected sinks for %s:\n", fmt->name);
-    if (!fmt->get_device_list) {
-        ret = AVERROR(ENOSYS);
-        printf("Cannot list sinks. Not implemented.\n");
-        goto fail;
-    }
-
-    if ((ret = avdevice_list_output_sinks(fmt, NULL, opts, &device_list)) < 0) {
-        printf("Cannot list sinks.\n");
-        goto fail;
-    }
-
-    for (i = 0; i < device_list->nb_devices; i++) {
-        printf("%s %s [%s]\n", device_list->default_device == i ? "*" : " ",
-               device_list->devices[i]->device_name, device_list->devices[i]->device_description);
-    }
-
-  fail:
-    avdevice_free_list_devices(&device_list);
-    return ret;
-}
-
-static int show_sinks_sources_parse_arg(const char *arg, char **dev, AVDictionary **opts)
-{
-    int ret;
-    if (arg) {
-        char *opts_str = NULL;
-        av_assert0(dev && opts);
-        *dev = av_strdup(arg);
-        if (!*dev)
-            return AVERROR(ENOMEM);
-        if ((opts_str = strchr(*dev, ','))) {
-            *(opts_str++) = '\0';
-            if (opts_str[0] && ((ret = av_dict_parse_string(opts, opts_str, "=", ":", 0)) < 0)) {
-                av_freep(dev);
-                return ret;
-            }
-        }
-    } else
-        printf("\nDevice name is not provided.\n"
-                "You can pass devicename[,opt1=val1[,opt2=val2...]] as an argument.\n\n");
-    return 0;
-}
-
-int show_sources(void *optctx, const char *opt, const char *arg)
-{
-    AVInputFormat *fmt = NULL;
-    char *dev = NULL;
-    AVDictionary *opts = NULL;
-    int ret = 0;
-    int error_level = av_log_get_level();
-
-    av_log_set_level(AV_LOG_ERROR);
-
-    if ((ret = show_sinks_sources_parse_arg(arg, &dev, &opts)) < 0)
-        goto fail;
-
-    do {
-        fmt = av_input_audio_device_next(fmt);
-        if (fmt) {
-            if (!strcmp(fmt->name, "lavfi"))
-                continue; //it's pointless to probe lavfi
-            if (dev && !av_match_name(dev, fmt->name))
-                continue;
-            print_device_sources(fmt, opts);
-        }
-    } while (fmt);
-    do {
-        fmt = av_input_video_device_next(fmt);
-        if (fmt) {
-            if (dev && !av_match_name(dev, fmt->name))
-                continue;
-            print_device_sources(fmt, opts);
-        }
-    } while (fmt);
-  fail:
-    av_dict_free(&opts);
-    av_free(dev);
-    av_log_set_level(error_level);
-    return ret;
-}
-
-int show_sinks(void *optctx, const char *opt, const char *arg)
-{
-    AVOutputFormat *fmt = NULL;
-    char *dev = NULL;
-    AVDictionary *opts = NULL;
-    int ret = 0;
-    int error_level = av_log_get_level();
-
-    av_log_set_level(AV_LOG_ERROR);
-
-    if ((ret = show_sinks_sources_parse_arg(arg, &dev, &opts)) < 0)
-        goto fail;
-
-    do {
-        fmt = av_output_audio_device_next(fmt);
-        if (fmt) {
-            if (dev && !av_match_name(dev, fmt->name))
-                continue;
-            print_device_sinks(fmt, opts);
-        }
-    } while (fmt);
-    do {
-        fmt = av_output_video_device_next(fmt);
-        if (fmt) {
-            if (dev && !av_match_name(dev, fmt->name))
-                continue;
-            print_device_sinks(fmt, opts);
-        }
-    } while (fmt);
-  fail:
-    av_dict_free(&opts);
-    av_free(dev);
-    av_log_set_level(error_level);
-    return ret;
-}
-
-#endif
diff --git a/fuchsia/config/default/arm64/config.h b/fuchsia/config/default/arm64/config.h
new file mode 100644
index 0000000..0556857
--- /dev/null
+++ b/fuchsia/config/default/arm64/config.h
@@ -0,0 +1,2588 @@
+/* Automatically generated by configure - do not modify! */
+#ifndef FFMPEG_CONFIG_H
+#define FFMPEG_CONFIG_H
+#define FFMPEG_CONFIGURATION "--disable-everything --disable-all --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-static --enable-avcodec --enable-avformat --enable-avutil --enable-fft --enable-rdft --enable-static --enable-libopus --disable-debug --disable-bzlib --disable-iconv --disable-lzo --disable-network --disable-schannel --disable-sdl2 --disable-symver --disable-xlib --disable-zlib --disable-securetransport --disable-faan --disable-alsa --disable-autodetect --enable-decoder='vorbis,libopus,flac' --enable-decoder='pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le,mp3' --enable-decoder='pcm_s16be,pcm_s24be,pcm_mulaw,pcm_alaw' --enable-decoder='theora,vp8,sbc,aptx' --enable-demuxer='ogg,matroska,wav,flac,mp3,mov' --enable-parser='opus,vorbis,flac,mpegaudio' --extra-cflags=-I/usr/local/google/home/dalesat/fuchsia/third_party/opus/include --enable-parser='vp3,vp8' --optflags='\"-O2\"' --enable-pic --x86asmexe=yasm --enable-pic --enable-lto --cc=clang --cxx=clang++ --ld=clang --enable-cross-compile --cross-prefix=/usr/bin/x86_64-linux-gnu- --target-os=linux --arch=aarch64 --enable-armv8 --extra-cflags='-march=armv8-a' --sysroot=/usr/local/google/home/dalesat/fuchsia/third_party/ffmpeg/../../prebuilt/third_party/sysroot/linux --extra-cflags='--target=aarch64-linux-gnu' --extra-ldflags='--target=aarch64-linux-gnu' --disable-linux-perf --disable-error-resilience"
+#define FFMPEG_LICENSE "LGPL version 2.1 or later"
+#define CONFIG_THIS_YEAR 2020
+#define FFMPEG_DATADIR "/usr/local/share/ffmpeg"
+#define AVCONV_DATADIR "/usr/local/share/ffmpeg"
+#define CC_IDENT "Fuchsia clang version 11.0.0 (https://fuchsia.googlesource.com/a/third_party/llvm-project dd484baffdf4a92e564c38a17d35a742e633b0e0)"
+#define av_restrict restrict
+#define EXTERN_PREFIX ""
+#define EXTERN_ASM 
+#define BUILDSUF ""
+#define SLIBSUF ".so"
+#define HAVE_MMX2 HAVE_MMXEXT
+#define SWS_MAX_FILTER_SIZE 256
+#define ARCH_AARCH64 1
+#define ARCH_ALPHA 0
+#define ARCH_ARM 0
+#define ARCH_AVR32 0
+#define ARCH_AVR32_AP 0
+#define ARCH_AVR32_UC 0
+#define ARCH_BFIN 0
+#define ARCH_IA64 0
+#define ARCH_M68K 0
+#define ARCH_MIPS 0
+#define ARCH_MIPS64 0
+#define ARCH_PARISC 0
+#define ARCH_PPC 0
+#define ARCH_PPC64 0
+#define ARCH_S390 0
+#define ARCH_SH4 0
+#define ARCH_SPARC 0
+#define ARCH_SPARC64 0
+#define ARCH_TILEGX 0
+#define ARCH_TILEPRO 0
+#define ARCH_TOMI 0
+#define ARCH_X86 0
+#define ARCH_X86_32 0
+#define ARCH_X86_64 0
+#define HAVE_ARMV5TE 0
+#define HAVE_ARMV6 0
+#define HAVE_ARMV6T2 0
+#define HAVE_ARMV8 1
+#define HAVE_NEON 1
+#define HAVE_VFP 1
+#define HAVE_VFPV3 0
+#define HAVE_SETEND 0
+#define HAVE_ALTIVEC 0
+#define HAVE_DCBZL 0
+#define HAVE_LDBRX 0
+#define HAVE_POWER8 0
+#define HAVE_PPC4XX 0
+#define HAVE_VSX 0
+#define HAVE_AESNI 0
+#define HAVE_AMD3DNOW 0
+#define HAVE_AMD3DNOWEXT 0
+#define HAVE_AVX 0
+#define HAVE_AVX2 0
+#define HAVE_AVX512 0
+#define HAVE_FMA3 0
+#define HAVE_FMA4 0
+#define HAVE_MMX 0
+#define HAVE_MMXEXT 0
+#define HAVE_SSE 0
+#define HAVE_SSE2 0
+#define HAVE_SSE3 0
+#define HAVE_SSE4 0
+#define HAVE_SSE42 0
+#define HAVE_SSSE3 0
+#define HAVE_XOP 0
+#define HAVE_CPUNOP 0
+#define HAVE_I686 0
+#define HAVE_MIPSFPU 0
+#define HAVE_MIPS32R2 0
+#define HAVE_MIPS32R5 0
+#define HAVE_MIPS64R2 0
+#define HAVE_MIPS32R6 0
+#define HAVE_MIPS64R6 0
+#define HAVE_MIPSDSP 0
+#define HAVE_MIPSDSPR2 0
+#define HAVE_MSA 0
+#define HAVE_MSA2 0
+#define HAVE_LOONGSON2 0
+#define HAVE_LOONGSON3 0
+#define HAVE_MMI 0
+#define HAVE_ARMV5TE_EXTERNAL 0
+#define HAVE_ARMV6_EXTERNAL 0
+#define HAVE_ARMV6T2_EXTERNAL 0
+#define HAVE_ARMV8_EXTERNAL 1
+#define HAVE_NEON_EXTERNAL 1
+#define HAVE_VFP_EXTERNAL 1
+#define HAVE_VFPV3_EXTERNAL 0
+#define HAVE_SETEND_EXTERNAL 0
+#define HAVE_ALTIVEC_EXTERNAL 0
+#define HAVE_DCBZL_EXTERNAL 0
+#define HAVE_LDBRX_EXTERNAL 0
+#define HAVE_POWER8_EXTERNAL 0
+#define HAVE_PPC4XX_EXTERNAL 0
+#define HAVE_VSX_EXTERNAL 0
+#define HAVE_AESNI_EXTERNAL 0
+#define HAVE_AMD3DNOW_EXTERNAL 0
+#define HAVE_AMD3DNOWEXT_EXTERNAL 0
+#define HAVE_AVX_EXTERNAL 0
+#define HAVE_AVX2_EXTERNAL 0
+#define HAVE_AVX512_EXTERNAL 0
+#define HAVE_FMA3_EXTERNAL 0
+#define HAVE_FMA4_EXTERNAL 0
+#define HAVE_MMX_EXTERNAL 0
+#define HAVE_MMXEXT_EXTERNAL 0
+#define HAVE_SSE_EXTERNAL 0
+#define HAVE_SSE2_EXTERNAL 0
+#define HAVE_SSE3_EXTERNAL 0
+#define HAVE_SSE4_EXTERNAL 0
+#define HAVE_SSE42_EXTERNAL 0
+#define HAVE_SSSE3_EXTERNAL 0
+#define HAVE_XOP_EXTERNAL 0
+#define HAVE_CPUNOP_EXTERNAL 0
+#define HAVE_I686_EXTERNAL 0
+#define HAVE_MIPSFPU_EXTERNAL 0
+#define HAVE_MIPS32R2_EXTERNAL 0
+#define HAVE_MIPS32R5_EXTERNAL 0
+#define HAVE_MIPS64R2_EXTERNAL 0
+#define HAVE_MIPS32R6_EXTERNAL 0
+#define HAVE_MIPS64R6_EXTERNAL 0
+#define HAVE_MIPSDSP_EXTERNAL 0
+#define HAVE_MIPSDSPR2_EXTERNAL 0
+#define HAVE_MSA_EXTERNAL 0
+#define HAVE_MSA2_EXTERNAL 0
+#define HAVE_LOONGSON2_EXTERNAL 0
+#define HAVE_LOONGSON3_EXTERNAL 0
+#define HAVE_MMI_EXTERNAL 0
+#define HAVE_ARMV5TE_INLINE 0
+#define HAVE_ARMV6_INLINE 0
+#define HAVE_ARMV6T2_INLINE 0
+#define HAVE_ARMV8_INLINE 1
+#define HAVE_NEON_INLINE 1
+#define HAVE_VFP_INLINE 1
+#define HAVE_VFPV3_INLINE 0
+#define HAVE_SETEND_INLINE 0
+#define HAVE_ALTIVEC_INLINE 0
+#define HAVE_DCBZL_INLINE 0
+#define HAVE_LDBRX_INLINE 0
+#define HAVE_POWER8_INLINE 0
+#define HAVE_PPC4XX_INLINE 0
+#define HAVE_VSX_INLINE 0
+#define HAVE_AESNI_INLINE 0
+#define HAVE_AMD3DNOW_INLINE 0
+#define HAVE_AMD3DNOWEXT_INLINE 0
+#define HAVE_AVX_INLINE 0
+#define HAVE_AVX2_INLINE 0
+#define HAVE_AVX512_INLINE 0
+#define HAVE_FMA3_INLINE 0
+#define HAVE_FMA4_INLINE 0
+#define HAVE_MMX_INLINE 0
+#define HAVE_MMXEXT_INLINE 0
+#define HAVE_SSE_INLINE 0
+#define HAVE_SSE2_INLINE 0
+#define HAVE_SSE3_INLINE 0
+#define HAVE_SSE4_INLINE 0
+#define HAVE_SSE42_INLINE 0
+#define HAVE_SSSE3_INLINE 0
+#define HAVE_XOP_INLINE 0
+#define HAVE_CPUNOP_INLINE 0
+#define HAVE_I686_INLINE 0
+#define HAVE_MIPSFPU_INLINE 0
+#define HAVE_MIPS32R2_INLINE 0
+#define HAVE_MIPS32R5_INLINE 0
+#define HAVE_MIPS64R2_INLINE 0
+#define HAVE_MIPS32R6_INLINE 0
+#define HAVE_MIPS64R6_INLINE 0
+#define HAVE_MIPSDSP_INLINE 0
+#define HAVE_MIPSDSPR2_INLINE 0
+#define HAVE_MSA_INLINE 0
+#define HAVE_MSA2_INLINE 0
+#define HAVE_LOONGSON2_INLINE 0
+#define HAVE_LOONGSON3_INLINE 0
+#define HAVE_MMI_INLINE 0
+#define HAVE_ALIGNED_STACK 1
+#define HAVE_FAST_64BIT 1
+#define HAVE_FAST_CLZ 1
+#define HAVE_FAST_CMOV 0
+#define HAVE_LOCAL_ALIGNED 0
+#define HAVE_SIMD_ALIGN_16 1
+#define HAVE_SIMD_ALIGN_32 0
+#define HAVE_SIMD_ALIGN_64 0
+#define HAVE_ATOMIC_CAS_PTR 0
+#define HAVE_MACHINE_RW_BARRIER 0
+#define HAVE_MEMORYBARRIER 0
+#define HAVE_MM_EMPTY 0
+#define HAVE_RDTSC 0
+#define HAVE_SEM_TIMEDWAIT 1
+#define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1
+#define HAVE_CABS 0
+#define HAVE_CEXP 0
+#define HAVE_INLINE_ASM 1
+#define HAVE_SYMVER 0
+#define HAVE_X86ASM 0
+#define HAVE_BIGENDIAN 0
+#define HAVE_FAST_UNALIGNED 1
+#define HAVE_ARPA_INET_H 0
+#define HAVE_ASM_TYPES_H 1
+#define HAVE_CDIO_PARANOIA_H 0
+#define HAVE_CDIO_PARANOIA_PARANOIA_H 0
+#define HAVE_CUDA_H 0
+#define HAVE_DISPATCH_DISPATCH_H 0
+#define HAVE_DEV_BKTR_IOCTL_BT848_H 0
+#define HAVE_DEV_BKTR_IOCTL_METEOR_H 0
+#define HAVE_DEV_IC_BT8XX_H 0
+#define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0
+#define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0
+#define HAVE_DIRECT_H 0
+#define HAVE_DIRENT_H 1
+#define HAVE_DXGIDEBUG_H 0
+#define HAVE_DXVA_H 0
+#define HAVE_ES2_GL_H 0
+#define HAVE_GSM_H 0
+#define HAVE_IO_H 0
+#define HAVE_LINUX_PERF_EVENT_H 1
+#define HAVE_MACHINE_IOCTL_BT848_H 0
+#define HAVE_MACHINE_IOCTL_METEOR_H 0
+#define HAVE_MALLOC_H 1
+#define HAVE_OPENCV2_CORE_CORE_C_H 0
+#define HAVE_OPENGL_GL3_H 0
+#define HAVE_POLL_H 1
+#define HAVE_SYS_PARAM_H 1
+#define HAVE_SYS_RESOURCE_H 1
+#define HAVE_SYS_SELECT_H 1
+#define HAVE_SYS_SOUNDCARD_H 1
+#define HAVE_SYS_TIME_H 1
+#define HAVE_SYS_UN_H 1
+#define HAVE_SYS_VIDEOIO_H 0
+#define HAVE_TERMIOS_H 1
+#define HAVE_UDPLITE_H 0
+#define HAVE_UNISTD_H 1
+#define HAVE_VALGRIND_VALGRIND_H 0
+#define HAVE_WINDOWS_H 0
+#define HAVE_WINSOCK2_H 0
+#define HAVE_INTRINSICS_NEON 1
+#define HAVE_ATANF 1
+#define HAVE_ATAN2F 1
+#define HAVE_CBRT 1
+#define HAVE_CBRTF 1
+#define HAVE_COPYSIGN 1
+#define HAVE_COSF 1
+#define HAVE_ERF 1
+#define HAVE_EXP2 1
+#define HAVE_EXP2F 1
+#define HAVE_EXPF 1
+#define HAVE_HYPOT 1
+#define HAVE_ISFINITE 1
+#define HAVE_ISINF 1
+#define HAVE_ISNAN 1
+#define HAVE_LDEXPF 1
+#define HAVE_LLRINT 1
+#define HAVE_LLRINTF 1
+#define HAVE_LOG2 1
+#define HAVE_LOG2F 1
+#define HAVE_LOG10F 1
+#define HAVE_LRINT 1
+#define HAVE_LRINTF 1
+#define HAVE_POWF 1
+#define HAVE_RINT 1
+#define HAVE_ROUND 1
+#define HAVE_ROUNDF 1
+#define HAVE_SINF 1
+#define HAVE_TRUNC 1
+#define HAVE_TRUNCF 1
+#define HAVE_DOS_PATHS 0
+#define HAVE_LIBC_MSVCRT 0
+#define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0
+#define HAVE_SECTION_DATA_REL_RO 1
+#define HAVE_THREADS 1
+#define HAVE_UWP 0
+#define HAVE_WINRT 0
+#define HAVE_ACCESS 1
+#define HAVE_ALIGNED_MALLOC 0
+#define HAVE_ARC4RANDOM 0
+#define HAVE_CLOCK_GETTIME 1
+#define HAVE_CLOSESOCKET 0
+#define HAVE_COMMANDLINETOARGVW 0
+#define HAVE_FCNTL 1
+#define HAVE_GETADDRINFO 0
+#define HAVE_GETHRTIME 0
+#define HAVE_GETOPT 1
+#define HAVE_GETMODULEHANDLE 0
+#define HAVE_GETPROCESSAFFINITYMASK 0
+#define HAVE_GETPROCESSMEMORYINFO 0
+#define HAVE_GETPROCESSTIMES 0
+#define HAVE_GETRUSAGE 1
+#define HAVE_GETSTDHANDLE 0
+#define HAVE_GETSYSTEMTIMEASFILETIME 0
+#define HAVE_GETTIMEOFDAY 1
+#define HAVE_GLOB 1
+#define HAVE_GLXGETPROCADDRESS 0
+#define HAVE_GMTIME_R 1
+#define HAVE_INET_ATON 0
+#define HAVE_ISATTY 1
+#define HAVE_KBHIT 0
+#define HAVE_LOCALTIME_R 1
+#define HAVE_LSTAT 1
+#define HAVE_LZO1X_999_COMPRESS 0
+#define HAVE_MACH_ABSOLUTE_TIME 0
+#define HAVE_MAPVIEWOFFILE 0
+#define HAVE_MEMALIGN 1
+#define HAVE_MKSTEMP 1
+#define HAVE_MMAP 1
+#define HAVE_MPROTECT 1
+#define HAVE_NANOSLEEP 1
+#define HAVE_PEEKNAMEDPIPE 0
+#define HAVE_POSIX_MEMALIGN 1
+#define HAVE_PTHREAD_CANCEL 1
+#define HAVE_SCHED_GETAFFINITY 1
+#define HAVE_SECITEMIMPORT 0
+#define HAVE_SETCONSOLETEXTATTRIBUTE 0
+#define HAVE_SETCONSOLECTRLHANDLER 0
+#define HAVE_SETDLLDIRECTORY 0
+#define HAVE_SETMODE 0
+#define HAVE_SETRLIMIT 1
+#define HAVE_SLEEP 0
+#define HAVE_STRERROR_R 1
+#define HAVE_SYSCONF 1
+#define HAVE_SYSCTL 0
+#define HAVE_USLEEP 1
+#define HAVE_UTGETOSTYPEFROMSTRING 0
+#define HAVE_VIRTUALALLOC 0
+#define HAVE_WGLGETPROCADDRESS 0
+#define HAVE_BCRYPT 0
+#define HAVE_VAAPI_DRM 0
+#define HAVE_VAAPI_X11 0
+#define HAVE_VDPAU_X11 0
+#define HAVE_PTHREADS 1
+#define HAVE_OS2THREADS 0
+#define HAVE_W32THREADS 0
+#define HAVE_AS_ARCH_DIRECTIVE 0
+#define HAVE_AS_DN_DIRECTIVE 0
+#define HAVE_AS_FPU_DIRECTIVE 0
+#define HAVE_AS_FUNC 0
+#define HAVE_AS_OBJECT_ARCH 0
+#define HAVE_ASM_MOD_Q 0
+#define HAVE_BLOCKS_EXTENSION 0
+#define HAVE_EBP_AVAILABLE 0
+#define HAVE_EBX_AVAILABLE 0
+#define HAVE_GNU_AS 0
+#define HAVE_GNU_WINDRES 0
+#define HAVE_IBM_ASM 0
+#define HAVE_INLINE_ASM_DIRECT_SYMBOL_REFS 0
+#define HAVE_INLINE_ASM_LABELS 1
+#define HAVE_INLINE_ASM_NONLOCAL_LABELS 1
+#define HAVE_PRAGMA_DEPRECATED 1
+#define HAVE_RSYNC_CONTIMEOUT 1
+#define HAVE_SYMVER_ASM_LABEL 1
+#define HAVE_SYMVER_GNU_ASM 1
+/* #define HAVE_VFP_ARGS 0 -- softfp/hardfp selection is done by the fuchsia build */
+#define HAVE_XFORM_ASM 0
+#define HAVE_XMM_CLOBBERS 0
+#define HAVE_KCMVIDEOCODECTYPE_HEVC 0
+#define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0
+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0
+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0
+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0
+#define HAVE_SOCKLEN_T 0
+#define HAVE_STRUCT_ADDRINFO 0
+#define HAVE_STRUCT_GROUP_SOURCE_REQ 0
+#define HAVE_STRUCT_IP_MREQ_SOURCE 0
+#define HAVE_STRUCT_IPV6_MREQ 0
+#define HAVE_STRUCT_MSGHDR_MSG_FLAGS 0
+#define HAVE_STRUCT_POLLFD 0
+#define HAVE_STRUCT_RUSAGE_RU_MAXRSS 1
+#define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0
+#define HAVE_STRUCT_SOCKADDR_IN6 0
+#define HAVE_STRUCT_SOCKADDR_SA_LEN 0
+#define HAVE_STRUCT_SOCKADDR_STORAGE 0
+#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1
+#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0
+#define HAVE_MAKEINFO 0
+#define HAVE_MAKEINFO_HTML 0
+#define HAVE_OPENCL_D3D11 0
+#define HAVE_OPENCL_DRM_ARM 0
+#define HAVE_OPENCL_DRM_BEIGNET 0
+#define HAVE_OPENCL_DXVA2 0
+#define HAVE_OPENCL_VAAPI_BEIGNET 0
+#define HAVE_OPENCL_VAAPI_INTEL_MEDIA 0
+#define HAVE_PERL 1
+#define HAVE_POD2MAN 1
+#define HAVE_TEXI2HTML 0
+#define CONFIG_DOC 0
+#define CONFIG_HTMLPAGES 0
+#define CONFIG_MANPAGES 0
+#define CONFIG_PODPAGES 0
+#define CONFIG_TXTPAGES 0
+#define CONFIG_AVIO_LIST_DIR_EXAMPLE 1
+#define CONFIG_AVIO_READING_EXAMPLE 1
+#define CONFIG_DECODE_AUDIO_EXAMPLE 1
+#define CONFIG_DECODE_VIDEO_EXAMPLE 1
+#define CONFIG_DEMUXING_DECODING_EXAMPLE 1
+#define CONFIG_ENCODE_AUDIO_EXAMPLE 1
+#define CONFIG_ENCODE_VIDEO_EXAMPLE 1
+#define CONFIG_EXTRACT_MVS_EXAMPLE 1
+#define CONFIG_FILTER_AUDIO_EXAMPLE 0
+#define CONFIG_FILTERING_AUDIO_EXAMPLE 0
+#define CONFIG_FILTERING_VIDEO_EXAMPLE 0
+#define CONFIG_HTTP_MULTICLIENT_EXAMPLE 1
+#define CONFIG_HW_DECODE_EXAMPLE 1
+#define CONFIG_METADATA_EXAMPLE 1
+#define CONFIG_MUXING_EXAMPLE 0
+#define CONFIG_QSVDEC_EXAMPLE 0
+#define CONFIG_REMUXING_EXAMPLE 1
+#define CONFIG_RESAMPLING_AUDIO_EXAMPLE 0
+#define CONFIG_SCALING_VIDEO_EXAMPLE 0
+#define CONFIG_TRANSCODE_AAC_EXAMPLE 0
+#define CONFIG_TRANSCODING_EXAMPLE 0
+#define CONFIG_VAAPI_ENCODE_EXAMPLE 0
+#define CONFIG_VAAPI_TRANSCODE_EXAMPLE 0
+#define CONFIG_AVISYNTH 0
+#define CONFIG_FREI0R 0
+#define CONFIG_LIBCDIO 0
+#define CONFIG_LIBDAVS2 0
+#define CONFIG_LIBRUBBERBAND 0
+#define CONFIG_LIBVIDSTAB 0
+#define CONFIG_LIBX264 0
+#define CONFIG_LIBX265 0
+#define CONFIG_LIBXAVS 0
+#define CONFIG_LIBXAVS2 0
+#define CONFIG_LIBXVID 0
+#define CONFIG_DECKLINK 0
+#define CONFIG_LIBFDK_AAC 0
+#define CONFIG_OPENSSL 0
+#define CONFIG_LIBTLS 0
+#define CONFIG_GMP 0
+#define CONFIG_LIBARIBB24 0
+#define CONFIG_LIBLENSFUN 0
+#define CONFIG_LIBOPENCORE_AMRNB 0
+#define CONFIG_LIBOPENCORE_AMRWB 0
+#define CONFIG_LIBVMAF 0
+#define CONFIG_LIBVO_AMRWBENC 0
+#define CONFIG_MBEDTLS 0
+#define CONFIG_RKMPP 0
+#define CONFIG_LIBSMBCLIENT 0
+#define CONFIG_CHROMAPRINT 0
+#define CONFIG_GCRYPT 0
+#define CONFIG_GNUTLS 0
+#define CONFIG_JNI 0
+#define CONFIG_LADSPA 0
+#define CONFIG_LIBAOM 0
+#define CONFIG_LIBASS 0
+#define CONFIG_LIBBLURAY 0
+#define CONFIG_LIBBS2B 0
+#define CONFIG_LIBCACA 0
+#define CONFIG_LIBCELT 0
+#define CONFIG_LIBCODEC2 0
+#define CONFIG_LIBDAV1D 0
+#define CONFIG_LIBDC1394 0
+#define CONFIG_LIBDRM 0
+#define CONFIG_LIBFLITE 0
+#define CONFIG_LIBFONTCONFIG 0
+#define CONFIG_LIBFREETYPE 0
+#define CONFIG_LIBFRIBIDI 0
+#define CONFIG_LIBGLSLANG 0
+#define CONFIG_LIBGME 0
+#define CONFIG_LIBGSM 0
+#define CONFIG_LIBIEC61883 0
+#define CONFIG_LIBILBC 0
+#define CONFIG_LIBJACK 0
+#define CONFIG_LIBKLVANC 0
+#define CONFIG_LIBKVAZAAR 0
+#define CONFIG_LIBMODPLUG 0
+#define CONFIG_LIBMP3LAME 0
+#define CONFIG_LIBMYSOFA 0
+#define CONFIG_LIBOPENCV 0
+#define CONFIG_LIBOPENH264 0
+#define CONFIG_LIBOPENJPEG 0
+#define CONFIG_LIBOPENMPT 0
+#define CONFIG_LIBOPUS 1
+#define CONFIG_LIBPULSE 0
+#define CONFIG_LIBRABBITMQ 0
+#define CONFIG_LIBRAV1E 0
+#define CONFIG_LIBRSVG 0
+#define CONFIG_LIBRTMP 0
+#define CONFIG_LIBSHINE 0
+#define CONFIG_LIBSMBCLIENT 0
+#define CONFIG_LIBSNAPPY 0
+#define CONFIG_LIBSOXR 0
+#define CONFIG_LIBSPEEX 0
+#define CONFIG_LIBSRT 0
+#define CONFIG_LIBSSH 0
+#define CONFIG_LIBTENSORFLOW 0
+#define CONFIG_LIBTESSERACT 0
+#define CONFIG_LIBTHEORA 0
+#define CONFIG_LIBTWOLAME 0
+#define CONFIG_LIBV4L2 0
+#define CONFIG_LIBVORBIS 0
+#define CONFIG_LIBVPX 0
+#define CONFIG_LIBWAVPACK 0
+#define CONFIG_LIBWEBP 0
+#define CONFIG_LIBXML2 0
+#define CONFIG_LIBZIMG 0
+#define CONFIG_LIBZMQ 0
+#define CONFIG_LIBZVBI 0
+#define CONFIG_LV2 0
+#define CONFIG_MEDIACODEC 0
+#define CONFIG_OPENAL 0
+#define CONFIG_OPENGL 0
+#define CONFIG_POCKETSPHINX 0
+#define CONFIG_VAPOURSYNTH 0
+#define CONFIG_ALSA 0
+#define CONFIG_APPKIT 0
+#define CONFIG_AVFOUNDATION 0
+#define CONFIG_BZLIB 0
+#define CONFIG_COREIMAGE 0
+#define CONFIG_ICONV 0
+#define CONFIG_LIBXCB 0
+#define CONFIG_LIBXCB_SHM 0
+#define CONFIG_LIBXCB_SHAPE 0
+#define CONFIG_LIBXCB_XFIXES 0
+#define CONFIG_LZMA 0
+#define CONFIG_SCHANNEL 0
+#define CONFIG_SDL2 0
+#define CONFIG_SECURETRANSPORT 0
+#define CONFIG_SNDIO 0
+#define CONFIG_XLIB 0
+#define CONFIG_ZLIB 0
+#define CONFIG_CUDA_NVCC 0
+#define CONFIG_CUDA_SDK 0
+#define CONFIG_LIBNPP 0
+#define CONFIG_LIBMFX 0
+#define CONFIG_MMAL 0
+#define CONFIG_OMX 0
+#define CONFIG_OPENCL 0
+#define CONFIG_VULKAN 0
+#define CONFIG_AMF 0
+#define CONFIG_AUDIOTOOLBOX 0
+#define CONFIG_CRYSTALHD 0
+#define CONFIG_CUDA 0
+#define CONFIG_CUDA_LLVM 0
+#define CONFIG_CUVID 0
+#define CONFIG_D3D11VA 0
+#define CONFIG_DXVA2 0
+#define CONFIG_FFNVCODEC 0
+#define CONFIG_NVDEC 0
+#define CONFIG_NVENC 0
+#define CONFIG_VAAPI 0
+#define CONFIG_VDPAU 0
+#define CONFIG_VIDEOTOOLBOX 0
+#define CONFIG_V4L2_M2M 0
+#define CONFIG_XVMC 0
+#define CONFIG_FTRAPV 0
+#define CONFIG_GRAY 0
+#define CONFIG_HARDCODED_TABLES 0
+#define CONFIG_OMX_RPI 0
+#define CONFIG_RUNTIME_CPUDETECT 1
+#define CONFIG_SAFE_BITSTREAM_READER 1
+#define CONFIG_SHARED 0
+#define CONFIG_SMALL 0
+#define CONFIG_STATIC 1
+#define CONFIG_SWSCALE_ALPHA 1
+#define CONFIG_GPL 0
+#define CONFIG_NONFREE 0
+#define CONFIG_VERSION3 0
+#define CONFIG_AVDEVICE 0
+#define CONFIG_AVFILTER 0
+#define CONFIG_SWSCALE 0
+#define CONFIG_POSTPROC 0
+#define CONFIG_AVFORMAT 1
+#define CONFIG_AVCODEC 1
+#define CONFIG_SWRESAMPLE 0
+#define CONFIG_AVRESAMPLE 0
+#define CONFIG_AVUTIL 1
+#define CONFIG_FFPLAY 0
+#define CONFIG_FFPROBE 0
+#define CONFIG_FFMPEG 0
+#define CONFIG_DCT 1
+#define CONFIG_DWT 0
+#define CONFIG_ERROR_RESILIENCE 0
+#define CONFIG_FAAN 0
+#define CONFIG_FAST_UNALIGNED 1
+#define CONFIG_FFT 1
+#define CONFIG_LSP 0
+#define CONFIG_LZO 0
+#define CONFIG_MDCT 1
+#define CONFIG_PIXELUTILS 0
+#define CONFIG_NETWORK 0
+#define CONFIG_RDFT 1
+#define CONFIG_AUTODETECT 0
+#define CONFIG_FONTCONFIG 0
+#define CONFIG_LARGE_TESTS 1
+#define CONFIG_LINUX_PERF 0
+#define CONFIG_MEMORY_POISONING 0
+#define CONFIG_NEON_CLOBBER_TEST 0
+#define CONFIG_OSSFUZZ 0
+#define CONFIG_PIC 1
+#define CONFIG_THUMB 0
+#define CONFIG_VALGRIND_BACKTRACE 0
+#define CONFIG_XMM_CLOBBER_TEST 0
+#define CONFIG_BSFS 1
+#define CONFIG_DECODERS 1
+#define CONFIG_ENCODERS 0
+#define CONFIG_HWACCELS 0
+#define CONFIG_PARSERS 1
+#define CONFIG_INDEVS 0
+#define CONFIG_OUTDEVS 0
+#define CONFIG_FILTERS 0
+#define CONFIG_DEMUXERS 1
+#define CONFIG_MUXERS 0
+#define CONFIG_PROTOCOLS 0
+#define CONFIG_AANDCTTABLES 0
+#define CONFIG_AC3DSP 0
+#define CONFIG_ADTS_HEADER 0
+#define CONFIG_AUDIO_FRAME_QUEUE 1
+#define CONFIG_AUDIODSP 0
+#define CONFIG_BLOCKDSP 0
+#define CONFIG_BSWAPDSP 0
+#define CONFIG_CABAC 0
+#define CONFIG_CBS 0
+#define CONFIG_CBS_AV1 0
+#define CONFIG_CBS_H264 0
+#define CONFIG_CBS_H265 0
+#define CONFIG_CBS_JPEG 0
+#define CONFIG_CBS_MPEG2 0
+#define CONFIG_CBS_VP9 0
+#define CONFIG_DIRAC_PARSE 1
+#define CONFIG_DNN 0
+#define CONFIG_DVPROFILE 0
+#define CONFIG_EXIF 0
+#define CONFIG_FAANDCT 0
+#define CONFIG_FAANIDCT 0
+#define CONFIG_FDCTDSP 0
+#define CONFIG_FLACDSP 1
+#define CONFIG_FMTCONVERT 0
+#define CONFIG_FRAME_THREAD_ENCODER 0
+#define CONFIG_G722DSP 0
+#define CONFIG_GOLOMB 1
+#define CONFIG_GPLV3 0
+#define CONFIG_H263DSP 0
+#define CONFIG_H264CHROMA 0
+#define CONFIG_H264DSP 0
+#define CONFIG_H264PARSE 0
+#define CONFIG_H264PRED 1
+#define CONFIG_H264QPEL 0
+#define CONFIG_HEVCPARSE 0
+#define CONFIG_HPELDSP 1
+#define CONFIG_HUFFMAN 0
+#define CONFIG_HUFFYUVDSP 0
+#define CONFIG_HUFFYUVENCDSP 0
+#define CONFIG_IDCTDSP 0
+#define CONFIG_IIRFILTER 0
+#define CONFIG_MDCT15 0
+#define CONFIG_INTRAX8 0
+#define CONFIG_ISO_MEDIA 1
+#define CONFIG_IVIDSP 0
+#define CONFIG_JPEGTABLES 0
+#define CONFIG_LGPLV3 0
+#define CONFIG_LIBX262 0
+#define CONFIG_LLAUDDSP 0
+#define CONFIG_LLVIDDSP 0
+#define CONFIG_LLVIDENCDSP 0
+#define CONFIG_LPC 0
+#define CONFIG_LZF 0
+#define CONFIG_ME_CMP 0
+#define CONFIG_MPEG_ER 0
+#define CONFIG_MPEGAUDIO 1
+#define CONFIG_MPEGAUDIODSP 1
+#define CONFIG_MPEGAUDIOHEADER 1
+#define CONFIG_MPEGVIDEO 0
+#define CONFIG_MPEGVIDEOENC 0
+#define CONFIG_MSS34DSP 0
+#define CONFIG_PIXBLOCKDSP 0
+#define CONFIG_QPELDSP 0
+#define CONFIG_QSV 0
+#define CONFIG_QSVDEC 0
+#define CONFIG_QSVENC 0
+#define CONFIG_QSVVPP 0
+#define CONFIG_RANGECODER 0
+#define CONFIG_RIFFDEC 1
+#define CONFIG_RIFFENC 0
+#define CONFIG_RTPDEC 0
+#define CONFIG_RTPENC_CHAIN 0
+#define CONFIG_RV34DSP 0
+#define CONFIG_SCENE_SAD 0
+#define CONFIG_SINEWIN 0
+#define CONFIG_SNAPPY 0
+#define CONFIG_SRTP 0
+#define CONFIG_STARTCODE 0
+#define CONFIG_TEXTUREDSP 0
+#define CONFIG_TEXTUREDSPENC 0
+#define CONFIG_TPELDSP 0
+#define CONFIG_VAAPI_1 0
+#define CONFIG_VAAPI_ENCODE 0
+#define CONFIG_VC1DSP 0
+#define CONFIG_VIDEODSP 1
+#define CONFIG_VP3DSP 1
+#define CONFIG_VP56DSP 0
+#define CONFIG_VP8DSP 1
+#define CONFIG_WMA_FREQS 0
+#define CONFIG_WMV2DSP 0
+#define CONFIG_AAC_ADTSTOASC_BSF 0
+#define CONFIG_AV1_FRAME_MERGE_BSF 0
+#define CONFIG_AV1_FRAME_SPLIT_BSF 0
+#define CONFIG_AV1_METADATA_BSF 0
+#define CONFIG_CHOMP_BSF 0
+#define CONFIG_DUMP_EXTRADATA_BSF 0
+#define CONFIG_DCA_CORE_BSF 0
+#define CONFIG_EAC3_CORE_BSF 0
+#define CONFIG_EXTRACT_EXTRADATA_BSF 0
+#define CONFIG_FILTER_UNITS_BSF 0
+#define CONFIG_H264_METADATA_BSF 0
+#define CONFIG_H264_MP4TOANNEXB_BSF 0
+#define CONFIG_H264_REDUNDANT_PPS_BSF 0
+#define CONFIG_HAPQA_EXTRACT_BSF 0
+#define CONFIG_HEVC_METADATA_BSF 0
+#define CONFIG_HEVC_MP4TOANNEXB_BSF 0
+#define CONFIG_IMX_DUMP_HEADER_BSF 0
+#define CONFIG_MJPEG2JPEG_BSF 0
+#define CONFIG_MJPEGA_DUMP_HEADER_BSF 0
+#define CONFIG_MP3_HEADER_DECOMPRESS_BSF 0
+#define CONFIG_MPEG2_METADATA_BSF 0
+#define CONFIG_MPEG4_UNPACK_BFRAMES_BSF 0
+#define CONFIG_MOV2TEXTSUB_BSF 0
+#define CONFIG_NOISE_BSF 0
+#define CONFIG_NULL_BSF 1
+#define CONFIG_PRORES_METADATA_BSF 0
+#define CONFIG_REMOVE_EXTRADATA_BSF 0
+#define CONFIG_TEXT2MOVSUB_BSF 0
+#define CONFIG_TRACE_HEADERS_BSF 0
+#define CONFIG_TRUEHD_CORE_BSF 0
+#define CONFIG_VP9_METADATA_BSF 0
+#define CONFIG_VP9_RAW_REORDER_BSF 0
+#define CONFIG_VP9_SUPERFRAME_BSF 0
+#define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 0
+#define CONFIG_AASC_DECODER 0
+#define CONFIG_AIC_DECODER 0
+#define CONFIG_ALIAS_PIX_DECODER 0
+#define CONFIG_AGM_DECODER 0
+#define CONFIG_AMV_DECODER 0
+#define CONFIG_ANM_DECODER 0
+#define CONFIG_ANSI_DECODER 0
+#define CONFIG_APNG_DECODER 0
+#define CONFIG_ARBC_DECODER 0
+#define CONFIG_ASV1_DECODER 0
+#define CONFIG_ASV2_DECODER 0
+#define CONFIG_AURA_DECODER 0
+#define CONFIG_AURA2_DECODER 0
+#define CONFIG_AVRP_DECODER 0
+#define CONFIG_AVRN_DECODER 0
+#define CONFIG_AVS_DECODER 0
+#define CONFIG_AVUI_DECODER 0
+#define CONFIG_AYUV_DECODER 0
+#define CONFIG_BETHSOFTVID_DECODER 0
+#define CONFIG_BFI_DECODER 0
+#define CONFIG_BINK_DECODER 0
+#define CONFIG_BITPACKED_DECODER 0
+#define CONFIG_BMP_DECODER 0
+#define CONFIG_BMV_VIDEO_DECODER 0
+#define CONFIG_BRENDER_PIX_DECODER 0
+#define CONFIG_C93_DECODER 0
+#define CONFIG_CAVS_DECODER 0
+#define CONFIG_CDGRAPHICS_DECODER 0
+#define CONFIG_CDTOONS_DECODER 0
+#define CONFIG_CDXL_DECODER 0
+#define CONFIG_CFHD_DECODER 0
+#define CONFIG_CINEPAK_DECODER 0
+#define CONFIG_CLEARVIDEO_DECODER 0
+#define CONFIG_CLJR_DECODER 0
+#define CONFIG_CLLC_DECODER 0
+#define CONFIG_COMFORTNOISE_DECODER 0
+#define CONFIG_CPIA_DECODER 0
+#define CONFIG_CSCD_DECODER 0
+#define CONFIG_CYUV_DECODER 0
+#define CONFIG_DDS_DECODER 0
+#define CONFIG_DFA_DECODER 0
+#define CONFIG_DIRAC_DECODER 0
+#define CONFIG_DNXHD_DECODER 0
+#define CONFIG_DPX_DECODER 0
+#define CONFIG_DSICINVIDEO_DECODER 0
+#define CONFIG_DVAUDIO_DECODER 0
+#define CONFIG_DVVIDEO_DECODER 0
+#define CONFIG_DXA_DECODER 0
+#define CONFIG_DXTORY_DECODER 0
+#define CONFIG_DXV_DECODER 0
+#define CONFIG_EACMV_DECODER 0
+#define CONFIG_EAMAD_DECODER 0
+#define CONFIG_EATGQ_DECODER 0
+#define CONFIG_EATGV_DECODER 0
+#define CONFIG_EATQI_DECODER 0
+#define CONFIG_EIGHTBPS_DECODER 0
+#define CONFIG_EIGHTSVX_EXP_DECODER 0
+#define CONFIG_EIGHTSVX_FIB_DECODER 0
+#define CONFIG_ESCAPE124_DECODER 0
+#define CONFIG_ESCAPE130_DECODER 0
+#define CONFIG_EXR_DECODER 0
+#define CONFIG_FFV1_DECODER 0
+#define CONFIG_FFVHUFF_DECODER 0
+#define CONFIG_FIC_DECODER 0
+#define CONFIG_FITS_DECODER 0
+#define CONFIG_FLASHSV_DECODER 0
+#define CONFIG_FLASHSV2_DECODER 0
+#define CONFIG_FLIC_DECODER 0
+#define CONFIG_FLV_DECODER 0
+#define CONFIG_FMVC_DECODER 0
+#define CONFIG_FOURXM_DECODER 0
+#define CONFIG_FRAPS_DECODER 0
+#define CONFIG_FRWU_DECODER 0
+#define CONFIG_G2M_DECODER 0
+#define CONFIG_GDV_DECODER 0
+#define CONFIG_GIF_DECODER 0
+#define CONFIG_H261_DECODER 0
+#define CONFIG_H263_DECODER 0
+#define CONFIG_H263I_DECODER 0
+#define CONFIG_H263P_DECODER 0
+#define CONFIG_H263_V4L2M2M_DECODER 0
+#define CONFIG_H264_DECODER 0
+#define CONFIG_H264_CRYSTALHD_DECODER 0
+#define CONFIG_H264_V4L2M2M_DECODER 0
+#define CONFIG_H264_MEDIACODEC_DECODER 0
+#define CONFIG_H264_MMAL_DECODER 0
+#define CONFIG_H264_QSV_DECODER 0
+#define CONFIG_H264_RKMPP_DECODER 0
+#define CONFIG_HAP_DECODER 0
+#define CONFIG_HEVC_DECODER 0
+#define CONFIG_HEVC_QSV_DECODER 0
+#define CONFIG_HEVC_RKMPP_DECODER 0
+#define CONFIG_HEVC_V4L2M2M_DECODER 0
+#define CONFIG_HNM4_VIDEO_DECODER 0
+#define CONFIG_HQ_HQA_DECODER 0
+#define CONFIG_HQX_DECODER 0
+#define CONFIG_HUFFYUV_DECODER 0
+#define CONFIG_HYMT_DECODER 0
+#define CONFIG_IDCIN_DECODER 0
+#define CONFIG_IFF_ILBM_DECODER 0
+#define CONFIG_IMM4_DECODER 0
+#define CONFIG_IMM5_DECODER 0
+#define CONFIG_INDEO2_DECODER 0
+#define CONFIG_INDEO3_DECODER 0
+#define CONFIG_INDEO4_DECODER 0
+#define CONFIG_INDEO5_DECODER 0
+#define CONFIG_INTERPLAY_VIDEO_DECODER 0
+#define CONFIG_JPEG2000_DECODER 0
+#define CONFIG_JPEGLS_DECODER 0
+#define CONFIG_JV_DECODER 0
+#define CONFIG_KGV1_DECODER 0
+#define CONFIG_KMVC_DECODER 0
+#define CONFIG_LAGARITH_DECODER 0
+#define CONFIG_LOCO_DECODER 0
+#define CONFIG_LSCR_DECODER 0
+#define CONFIG_M101_DECODER 0
+#define CONFIG_MAGICYUV_DECODER 0
+#define CONFIG_MDEC_DECODER 0
+#define CONFIG_MIMIC_DECODER 0
+#define CONFIG_MJPEG_DECODER 0
+#define CONFIG_MJPEGB_DECODER 0
+#define CONFIG_MMVIDEO_DECODER 0
+#define CONFIG_MOTIONPIXELS_DECODER 0
+#define CONFIG_MPEG1VIDEO_DECODER 0
+#define CONFIG_MPEG2VIDEO_DECODER 0
+#define CONFIG_MPEG4_DECODER 0
+#define CONFIG_MPEG4_CRYSTALHD_DECODER 0
+#define CONFIG_MPEG4_V4L2M2M_DECODER 0
+#define CONFIG_MPEG4_MMAL_DECODER 0
+#define CONFIG_MPEGVIDEO_DECODER 0
+#define CONFIG_MPEG1_V4L2M2M_DECODER 0
+#define CONFIG_MPEG2_MMAL_DECODER 0
+#define CONFIG_MPEG2_CRYSTALHD_DECODER 0
+#define CONFIG_MPEG2_V4L2M2M_DECODER 0
+#define CONFIG_MPEG2_QSV_DECODER 0
+#define CONFIG_MPEG2_MEDIACODEC_DECODER 0
+#define CONFIG_MSA1_DECODER 0
+#define CONFIG_MSCC_DECODER 0
+#define CONFIG_MSMPEG4V1_DECODER 0
+#define CONFIG_MSMPEG4V2_DECODER 0
+#define CONFIG_MSMPEG4V3_DECODER 0
+#define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0
+#define CONFIG_MSRLE_DECODER 0
+#define CONFIG_MSS1_DECODER 0
+#define CONFIG_MSS2_DECODER 0
+#define CONFIG_MSVIDEO1_DECODER 0
+#define CONFIG_MSZH_DECODER 0
+#define CONFIG_MTS2_DECODER 0
+#define CONFIG_MV30_DECODER 0
+#define CONFIG_MVC1_DECODER 0
+#define CONFIG_MVC2_DECODER 0
+#define CONFIG_MVDV_DECODER 0
+#define CONFIG_MVHA_DECODER 0
+#define CONFIG_MWSC_DECODER 0
+#define CONFIG_MXPEG_DECODER 0
+#define CONFIG_NUV_DECODER 0
+#define CONFIG_PAF_VIDEO_DECODER 0
+#define CONFIG_PAM_DECODER 0
+#define CONFIG_PBM_DECODER 0
+#define CONFIG_PCX_DECODER 0
+#define CONFIG_PGM_DECODER 0
+#define CONFIG_PGMYUV_DECODER 0
+#define CONFIG_PICTOR_DECODER 0
+#define CONFIG_PIXLET_DECODER 0
+#define CONFIG_PNG_DECODER 0
+#define CONFIG_PPM_DECODER 0
+#define CONFIG_PRORES_DECODER 0
+#define CONFIG_PROSUMER_DECODER 0
+#define CONFIG_PSD_DECODER 0
+#define CONFIG_PTX_DECODER 0
+#define CONFIG_QDRAW_DECODER 0
+#define CONFIG_QPEG_DECODER 0
+#define CONFIG_QTRLE_DECODER 0
+#define CONFIG_R10K_DECODER 0
+#define CONFIG_R210_DECODER 0
+#define CONFIG_RASC_DECODER 0
+#define CONFIG_RAWVIDEO_DECODER 0
+#define CONFIG_RL2_DECODER 0
+#define CONFIG_ROQ_DECODER 0
+#define CONFIG_RPZA_DECODER 0
+#define CONFIG_RSCC_DECODER 0
+#define CONFIG_RV10_DECODER 0
+#define CONFIG_RV20_DECODER 0
+#define CONFIG_RV30_DECODER 0
+#define CONFIG_RV40_DECODER 0
+#define CONFIG_S302M_DECODER 0
+#define CONFIG_SANM_DECODER 0
+#define CONFIG_SCPR_DECODER 0
+#define CONFIG_SCREENPRESSO_DECODER 0
+#define CONFIG_SGI_DECODER 0
+#define CONFIG_SGIRLE_DECODER 0
+#define CONFIG_SHEERVIDEO_DECODER 0
+#define CONFIG_SMACKER_DECODER 0
+#define CONFIG_SMC_DECODER 0
+#define CONFIG_SMVJPEG_DECODER 0
+#define CONFIG_SNOW_DECODER 0
+#define CONFIG_SP5X_DECODER 0
+#define CONFIG_SPEEDHQ_DECODER 0
+#define CONFIG_SRGC_DECODER 0
+#define CONFIG_SUNRAST_DECODER 0
+#define CONFIG_SVQ1_DECODER 0
+#define CONFIG_SVQ3_DECODER 0
+#define CONFIG_TARGA_DECODER 0
+#define CONFIG_TARGA_Y216_DECODER 0
+#define CONFIG_TDSC_DECODER 0
+#define CONFIG_THEORA_DECODER 1
+#define CONFIG_THP_DECODER 0
+#define CONFIG_TIERTEXSEQVIDEO_DECODER 0
+#define CONFIG_TIFF_DECODER 0
+#define CONFIG_TMV_DECODER 0
+#define CONFIG_TRUEMOTION1_DECODER 0
+#define CONFIG_TRUEMOTION2_DECODER 0
+#define CONFIG_TRUEMOTION2RT_DECODER 0
+#define CONFIG_TSCC_DECODER 0
+#define CONFIG_TSCC2_DECODER 0
+#define CONFIG_TXD_DECODER 0
+#define CONFIG_ULTI_DECODER 0
+#define CONFIG_UTVIDEO_DECODER 0
+#define CONFIG_V210_DECODER 0
+#define CONFIG_V210X_DECODER 0
+#define CONFIG_V308_DECODER 0
+#define CONFIG_V408_DECODER 0
+#define CONFIG_V410_DECODER 0
+#define CONFIG_VB_DECODER 0
+#define CONFIG_VBLE_DECODER 0
+#define CONFIG_VC1_DECODER 0
+#define CONFIG_VC1_CRYSTALHD_DECODER 0
+#define CONFIG_VC1IMAGE_DECODER 0
+#define CONFIG_VC1_MMAL_DECODER 0
+#define CONFIG_VC1_QSV_DECODER 0
+#define CONFIG_VC1_V4L2M2M_DECODER 0
+#define CONFIG_VCR1_DECODER 0
+#define CONFIG_VMDVIDEO_DECODER 0
+#define CONFIG_VMNC_DECODER 0
+#define CONFIG_VP3_DECODER 1
+#define CONFIG_VP4_DECODER 0
+#define CONFIG_VP5_DECODER 0
+#define CONFIG_VP6_DECODER 0
+#define CONFIG_VP6A_DECODER 0
+#define CONFIG_VP6F_DECODER 0
+#define CONFIG_VP7_DECODER 0
+#define CONFIG_VP8_DECODER 1
+#define CONFIG_VP8_RKMPP_DECODER 0
+#define CONFIG_VP8_V4L2M2M_DECODER 0
+#define CONFIG_VP9_DECODER 0
+#define CONFIG_VP9_RKMPP_DECODER 0
+#define CONFIG_VP9_V4L2M2M_DECODER 0
+#define CONFIG_VQA_DECODER 0
+#define CONFIG_WEBP_DECODER 0
+#define CONFIG_WCMV_DECODER 0
+#define CONFIG_WRAPPED_AVFRAME_DECODER 0
+#define CONFIG_WMV1_DECODER 0
+#define CONFIG_WMV2_DECODER 0
+#define CONFIG_WMV3_DECODER 0
+#define CONFIG_WMV3_CRYSTALHD_DECODER 0
+#define CONFIG_WMV3IMAGE_DECODER 0
+#define CONFIG_WNV1_DECODER 0
+#define CONFIG_XAN_WC3_DECODER 0
+#define CONFIG_XAN_WC4_DECODER 0
+#define CONFIG_XBM_DECODER 0
+#define CONFIG_XFACE_DECODER 0
+#define CONFIG_XL_DECODER 0
+#define CONFIG_XPM_DECODER 0
+#define CONFIG_XWD_DECODER 0
+#define CONFIG_Y41P_DECODER 0
+#define CONFIG_YLC_DECODER 0
+#define CONFIG_YOP_DECODER 0
+#define CONFIG_YUV4_DECODER 0
+#define CONFIG_ZERO12V_DECODER 0
+#define CONFIG_ZEROCODEC_DECODER 0
+#define CONFIG_ZLIB_DECODER 0
+#define CONFIG_ZMBV_DECODER 0
+#define CONFIG_AAC_DECODER 0
+#define CONFIG_AAC_FIXED_DECODER 0
+#define CONFIG_AAC_LATM_DECODER 0
+#define CONFIG_AC3_DECODER 0
+#define CONFIG_AC3_FIXED_DECODER 0
+#define CONFIG_ACELP_KELVIN_DECODER 0
+#define CONFIG_ALAC_DECODER 0
+#define CONFIG_ALS_DECODER 0
+#define CONFIG_AMRNB_DECODER 0
+#define CONFIG_AMRWB_DECODER 0
+#define CONFIG_APE_DECODER 0
+#define CONFIG_APTX_DECODER 1
+#define CONFIG_APTX_HD_DECODER 0
+#define CONFIG_ATRAC1_DECODER 0
+#define CONFIG_ATRAC3_DECODER 0
+#define CONFIG_ATRAC3AL_DECODER 0
+#define CONFIG_ATRAC3P_DECODER 0
+#define CONFIG_ATRAC3PAL_DECODER 0
+#define CONFIG_ATRAC9_DECODER 0
+#define CONFIG_BINKAUDIO_DCT_DECODER 0
+#define CONFIG_BINKAUDIO_RDFT_DECODER 0
+#define CONFIG_BMV_AUDIO_DECODER 0
+#define CONFIG_COOK_DECODER 0
+#define CONFIG_DCA_DECODER 0
+#define CONFIG_DOLBY_E_DECODER 0
+#define CONFIG_DSD_LSBF_DECODER 0
+#define CONFIG_DSD_MSBF_DECODER 0
+#define CONFIG_DSD_LSBF_PLANAR_DECODER 0
+#define CONFIG_DSD_MSBF_PLANAR_DECODER 0
+#define CONFIG_DSICINAUDIO_DECODER 0
+#define CONFIG_DSS_SP_DECODER 0
+#define CONFIG_DST_DECODER 0
+#define CONFIG_EAC3_DECODER 0
+#define CONFIG_EVRC_DECODER 0
+#define CONFIG_FFWAVESYNTH_DECODER 0
+#define CONFIG_FLAC_DECODER 1
+#define CONFIG_G723_1_DECODER 0
+#define CONFIG_G729_DECODER 0
+#define CONFIG_GSM_DECODER 0
+#define CONFIG_GSM_MS_DECODER 0
+#define CONFIG_HCA_DECODER 0
+#define CONFIG_HCOM_DECODER 0
+#define CONFIG_IAC_DECODER 0
+#define CONFIG_ILBC_DECODER 0
+#define CONFIG_IMC_DECODER 0
+#define CONFIG_INTERPLAY_ACM_DECODER 0
+#define CONFIG_MACE3_DECODER 0
+#define CONFIG_MACE6_DECODER 0
+#define CONFIG_METASOUND_DECODER 0
+#define CONFIG_MLP_DECODER 0
+#define CONFIG_MP1_DECODER 0
+#define CONFIG_MP1FLOAT_DECODER 0
+#define CONFIG_MP2_DECODER 0
+#define CONFIG_MP2FLOAT_DECODER 0
+#define CONFIG_MP3FLOAT_DECODER 0
+#define CONFIG_MP3_DECODER 1
+#define CONFIG_MP3ADUFLOAT_DECODER 0
+#define CONFIG_MP3ADU_DECODER 0
+#define CONFIG_MP3ON4FLOAT_DECODER 0
+#define CONFIG_MP3ON4_DECODER 0
+#define CONFIG_MPC7_DECODER 0
+#define CONFIG_MPC8_DECODER 0
+#define CONFIG_NELLYMOSER_DECODER 0
+#define CONFIG_ON2AVC_DECODER 0
+#define CONFIG_OPUS_DECODER 0
+#define CONFIG_PAF_AUDIO_DECODER 0
+#define CONFIG_QCELP_DECODER 0
+#define CONFIG_QDM2_DECODER 0
+#define CONFIG_QDMC_DECODER 0
+#define CONFIG_RA_144_DECODER 0
+#define CONFIG_RA_288_DECODER 0
+#define CONFIG_RALF_DECODER 0
+#define CONFIG_SBC_DECODER 1
+#define CONFIG_SHORTEN_DECODER 0
+#define CONFIG_SIPR_DECODER 0
+#define CONFIG_SIREN_DECODER 0
+#define CONFIG_SMACKAUD_DECODER 0
+#define CONFIG_SONIC_DECODER 0
+#define CONFIG_TAK_DECODER 0
+#define CONFIG_TRUEHD_DECODER 0
+#define CONFIG_TRUESPEECH_DECODER 0
+#define CONFIG_TTA_DECODER 0
+#define CONFIG_TWINVQ_DECODER 0
+#define CONFIG_VMDAUDIO_DECODER 0
+#define CONFIG_VORBIS_DECODER 1
+#define CONFIG_WAVPACK_DECODER 0
+#define CONFIG_WMALOSSLESS_DECODER 0
+#define CONFIG_WMAPRO_DECODER 0
+#define CONFIG_WMAV1_DECODER 0
+#define CONFIG_WMAV2_DECODER 0
+#define CONFIG_WMAVOICE_DECODER 0
+#define CONFIG_WS_SND1_DECODER 0
+#define CONFIG_XMA1_DECODER 0
+#define CONFIG_XMA2_DECODER 0
+#define CONFIG_PCM_ALAW_DECODER 1
+#define CONFIG_PCM_BLURAY_DECODER 0
+#define CONFIG_PCM_DVD_DECODER 0
+#define CONFIG_PCM_F16LE_DECODER 0
+#define CONFIG_PCM_F24LE_DECODER 0
+#define CONFIG_PCM_F32BE_DECODER 0
+#define CONFIG_PCM_F32LE_DECODER 1
+#define CONFIG_PCM_F64BE_DECODER 0
+#define CONFIG_PCM_F64LE_DECODER 0
+#define CONFIG_PCM_LXF_DECODER 0
+#define CONFIG_PCM_MULAW_DECODER 1
+#define CONFIG_PCM_S8_DECODER 0
+#define CONFIG_PCM_S8_PLANAR_DECODER 0
+#define CONFIG_PCM_S16BE_DECODER 1
+#define CONFIG_PCM_S16BE_PLANAR_DECODER 0
+#define CONFIG_PCM_S16LE_DECODER 1
+#define CONFIG_PCM_S16LE_PLANAR_DECODER 0
+#define CONFIG_PCM_S24BE_DECODER 1
+#define CONFIG_PCM_S24DAUD_DECODER 0
+#define CONFIG_PCM_S24LE_DECODER 1
+#define CONFIG_PCM_S24LE_PLANAR_DECODER 0
+#define CONFIG_PCM_S32BE_DECODER 0
+#define CONFIG_PCM_S32LE_DECODER 1
+#define CONFIG_PCM_S32LE_PLANAR_DECODER 0
+#define CONFIG_PCM_S64BE_DECODER 0
+#define CONFIG_PCM_S64LE_DECODER 0
+#define CONFIG_PCM_U8_DECODER 1
+#define CONFIG_PCM_U16BE_DECODER 0
+#define CONFIG_PCM_U16LE_DECODER 0
+#define CONFIG_PCM_U24BE_DECODER 0
+#define CONFIG_PCM_U24LE_DECODER 0
+#define CONFIG_PCM_U32BE_DECODER 0
+#define CONFIG_PCM_U32LE_DECODER 0
+#define CONFIG_PCM_VIDC_DECODER 0
+#define CONFIG_DERF_DPCM_DECODER 0
+#define CONFIG_GREMLIN_DPCM_DECODER 0
+#define CONFIG_INTERPLAY_DPCM_DECODER 0
+#define CONFIG_ROQ_DPCM_DECODER 0
+#define CONFIG_SDX2_DPCM_DECODER 0
+#define CONFIG_SOL_DPCM_DECODER 0
+#define CONFIG_XAN_DPCM_DECODER 0
+#define CONFIG_ADPCM_4XM_DECODER 0
+#define CONFIG_ADPCM_ADX_DECODER 0
+#define CONFIG_ADPCM_AFC_DECODER 0
+#define CONFIG_ADPCM_AGM_DECODER 0
+#define CONFIG_ADPCM_AICA_DECODER 0
+#define CONFIG_ADPCM_ARGO_DECODER 0
+#define CONFIG_ADPCM_CT_DECODER 0
+#define CONFIG_ADPCM_DTK_DECODER 0
+#define CONFIG_ADPCM_EA_DECODER 0
+#define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0
+#define CONFIG_ADPCM_EA_R1_DECODER 0
+#define CONFIG_ADPCM_EA_R2_DECODER 0
+#define CONFIG_ADPCM_EA_R3_DECODER 0
+#define CONFIG_ADPCM_EA_XAS_DECODER 0
+#define CONFIG_ADPCM_G722_DECODER 0
+#define CONFIG_ADPCM_G726_DECODER 0
+#define CONFIG_ADPCM_G726LE_DECODER 0
+#define CONFIG_ADPCM_IMA_AMV_DECODER 0
+#define CONFIG_ADPCM_IMA_ALP_DECODER 0
+#define CONFIG_ADPCM_IMA_APC_DECODER 0
+#define CONFIG_ADPCM_IMA_APM_DECODER 0
+#define CONFIG_ADPCM_IMA_DAT4_DECODER 0
+#define CONFIG_ADPCM_IMA_DK3_DECODER 0
+#define CONFIG_ADPCM_IMA_DK4_DECODER 0
+#define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0
+#define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0
+#define CONFIG_ADPCM_IMA_ISS_DECODER 0
+#define CONFIG_ADPCM_IMA_MTF_DECODER 0
+#define CONFIG_ADPCM_IMA_OKI_DECODER 0
+#define CONFIG_ADPCM_IMA_QT_DECODER 0
+#define CONFIG_ADPCM_IMA_RAD_DECODER 0
+#define CONFIG_ADPCM_IMA_SSI_DECODER 0
+#define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0
+#define CONFIG_ADPCM_IMA_WAV_DECODER 0
+#define CONFIG_ADPCM_IMA_WS_DECODER 0
+#define CONFIG_ADPCM_MS_DECODER 0
+#define CONFIG_ADPCM_MTAF_DECODER 0
+#define CONFIG_ADPCM_PSX_DECODER 0
+#define CONFIG_ADPCM_SBPRO_2_DECODER 0
+#define CONFIG_ADPCM_SBPRO_3_DECODER 0
+#define CONFIG_ADPCM_SBPRO_4_DECODER 0
+#define CONFIG_ADPCM_SWF_DECODER 0
+#define CONFIG_ADPCM_THP_DECODER 0
+#define CONFIG_ADPCM_THP_LE_DECODER 0
+#define CONFIG_ADPCM_VIMA_DECODER 0
+#define CONFIG_ADPCM_XA_DECODER 0
+#define CONFIG_ADPCM_YAMAHA_DECODER 0
+#define CONFIG_ADPCM_ZORK_DECODER 0
+#define CONFIG_SSA_DECODER 0
+#define CONFIG_ASS_DECODER 0
+#define CONFIG_CCAPTION_DECODER 0
+#define CONFIG_DVBSUB_DECODER 0
+#define CONFIG_DVDSUB_DECODER 0
+#define CONFIG_JACOSUB_DECODER 0
+#define CONFIG_MICRODVD_DECODER 0
+#define CONFIG_MOVTEXT_DECODER 0
+#define CONFIG_MPL2_DECODER 0
+#define CONFIG_PGSSUB_DECODER 0
+#define CONFIG_PJS_DECODER 0
+#define CONFIG_REALTEXT_DECODER 0
+#define CONFIG_SAMI_DECODER 0
+#define CONFIG_SRT_DECODER 0
+#define CONFIG_STL_DECODER 0
+#define CONFIG_SUBRIP_DECODER 0
+#define CONFIG_SUBVIEWER_DECODER 0
+#define CONFIG_SUBVIEWER1_DECODER 0
+#define CONFIG_TEXT_DECODER 0
+#define CONFIG_VPLAYER_DECODER 0
+#define CONFIG_WEBVTT_DECODER 0
+#define CONFIG_XSUB_DECODER 0
+#define CONFIG_AAC_AT_DECODER 0
+#define CONFIG_AC3_AT_DECODER 0
+#define CONFIG_ADPCM_IMA_QT_AT_DECODER 0
+#define CONFIG_ALAC_AT_DECODER 0
+#define CONFIG_AMR_NB_AT_DECODER 0
+#define CONFIG_EAC3_AT_DECODER 0
+#define CONFIG_GSM_MS_AT_DECODER 0
+#define CONFIG_ILBC_AT_DECODER 0
+#define CONFIG_MP1_AT_DECODER 0
+#define CONFIG_MP2_AT_DECODER 0
+#define CONFIG_MP3_AT_DECODER 0
+#define CONFIG_PCM_ALAW_AT_DECODER 0
+#define CONFIG_PCM_MULAW_AT_DECODER 0
+#define CONFIG_QDMC_AT_DECODER 0
+#define CONFIG_QDM2_AT_DECODER 0
+#define CONFIG_LIBARIBB24_DECODER 0
+#define CONFIG_LIBCELT_DECODER 0
+#define CONFIG_LIBCODEC2_DECODER 0
+#define CONFIG_LIBDAV1D_DECODER 0
+#define CONFIG_LIBDAVS2_DECODER 0
+#define CONFIG_LIBFDK_AAC_DECODER 0
+#define CONFIG_LIBGSM_DECODER 0
+#define CONFIG_LIBGSM_MS_DECODER 0
+#define CONFIG_LIBILBC_DECODER 0
+#define CONFIG_LIBOPENCORE_AMRNB_DECODER 0
+#define CONFIG_LIBOPENCORE_AMRWB_DECODER 0
+#define CONFIG_LIBOPENJPEG_DECODER 0
+#define CONFIG_LIBOPUS_DECODER 1
+#define CONFIG_LIBRSVG_DECODER 0
+#define CONFIG_LIBSPEEX_DECODER 0
+#define CONFIG_LIBVORBIS_DECODER 0
+#define CONFIG_LIBVPX_VP8_DECODER 0
+#define CONFIG_LIBVPX_VP9_DECODER 0
+#define CONFIG_LIBZVBI_TELETEXT_DECODER 0
+#define CONFIG_BINTEXT_DECODER 0
+#define CONFIG_XBIN_DECODER 0
+#define CONFIG_IDF_DECODER 0
+#define CONFIG_LIBAOM_AV1_DECODER 0
+#define CONFIG_LIBOPENH264_DECODER 0
+#define CONFIG_H264_CUVID_DECODER 0
+#define CONFIG_HEVC_CUVID_DECODER 0
+#define CONFIG_HEVC_MEDIACODEC_DECODER 0
+#define CONFIG_MJPEG_CUVID_DECODER 0
+#define CONFIG_MJPEG_QSV_DECODER 0
+#define CONFIG_MPEG1_CUVID_DECODER 0
+#define CONFIG_MPEG2_CUVID_DECODER 0
+#define CONFIG_MPEG4_CUVID_DECODER 0
+#define CONFIG_MPEG4_MEDIACODEC_DECODER 0
+#define CONFIG_VC1_CUVID_DECODER 0
+#define CONFIG_VP8_CUVID_DECODER 0
+#define CONFIG_VP8_MEDIACODEC_DECODER 0
+#define CONFIG_VP8_QSV_DECODER 0
+#define CONFIG_VP9_CUVID_DECODER 0
+#define CONFIG_VP9_MEDIACODEC_DECODER 0
+#define CONFIG_VP9_QSV_DECODER 0
+#define CONFIG_A64MULTI_ENCODER 0
+#define CONFIG_A64MULTI5_ENCODER 0
+#define CONFIG_ALIAS_PIX_ENCODER 0
+#define CONFIG_AMV_ENCODER 0
+#define CONFIG_APNG_ENCODER 0
+#define CONFIG_ASV1_ENCODER 0
+#define CONFIG_ASV2_ENCODER 0
+#define CONFIG_AVRP_ENCODER 0
+#define CONFIG_AVUI_ENCODER 0
+#define CONFIG_AYUV_ENCODER 0
+#define CONFIG_BMP_ENCODER 0
+#define CONFIG_CINEPAK_ENCODER 0
+#define CONFIG_CLJR_ENCODER 0
+#define CONFIG_COMFORTNOISE_ENCODER 0
+#define CONFIG_DNXHD_ENCODER 0
+#define CONFIG_DPX_ENCODER 0
+#define CONFIG_DVVIDEO_ENCODER 0
+#define CONFIG_FFV1_ENCODER 0
+#define CONFIG_FFVHUFF_ENCODER 0
+#define CONFIG_FITS_ENCODER 0
+#define CONFIG_FLASHSV_ENCODER 0
+#define CONFIG_FLASHSV2_ENCODER 0
+#define CONFIG_FLV_ENCODER 0
+#define CONFIG_GIF_ENCODER 0
+#define CONFIG_H261_ENCODER 0
+#define CONFIG_H263_ENCODER 0
+#define CONFIG_H263P_ENCODER 0
+#define CONFIG_HAP_ENCODER 0
+#define CONFIG_HUFFYUV_ENCODER 0
+#define CONFIG_JPEG2000_ENCODER 0
+#define CONFIG_JPEGLS_ENCODER 0
+#define CONFIG_LJPEG_ENCODER 0
+#define CONFIG_MAGICYUV_ENCODER 0
+#define CONFIG_MJPEG_ENCODER 0
+#define CONFIG_MPEG1VIDEO_ENCODER 0
+#define CONFIG_MPEG2VIDEO_ENCODER 0
+#define CONFIG_MPEG4_ENCODER 0
+#define CONFIG_MSMPEG4V2_ENCODER 0
+#define CONFIG_MSMPEG4V3_ENCODER 0
+#define CONFIG_MSVIDEO1_ENCODER 0
+#define CONFIG_PAM_ENCODER 0
+#define CONFIG_PBM_ENCODER 0
+#define CONFIG_PCX_ENCODER 0
+#define CONFIG_PGM_ENCODER 0
+#define CONFIG_PGMYUV_ENCODER 0
+#define CONFIG_PNG_ENCODER 0
+#define CONFIG_PPM_ENCODER 0
+#define CONFIG_PRORES_ENCODER 0
+#define CONFIG_PRORES_AW_ENCODER 0
+#define CONFIG_PRORES_KS_ENCODER 0
+#define CONFIG_QTRLE_ENCODER 0
+#define CONFIG_R10K_ENCODER 0
+#define CONFIG_R210_ENCODER 0
+#define CONFIG_RAWVIDEO_ENCODER 0
+#define CONFIG_ROQ_ENCODER 0
+#define CONFIG_RV10_ENCODER 0
+#define CONFIG_RV20_ENCODER 0
+#define CONFIG_S302M_ENCODER 0
+#define CONFIG_SGI_ENCODER 0
+#define CONFIG_SNOW_ENCODER 0
+#define CONFIG_SUNRAST_ENCODER 0
+#define CONFIG_SVQ1_ENCODER 0
+#define CONFIG_TARGA_ENCODER 0
+#define CONFIG_TIFF_ENCODER 0
+#define CONFIG_UTVIDEO_ENCODER 0
+#define CONFIG_V210_ENCODER 0
+#define CONFIG_V308_ENCODER 0
+#define CONFIG_V408_ENCODER 0
+#define CONFIG_V410_ENCODER 0
+#define CONFIG_VC2_ENCODER 0
+#define CONFIG_WRAPPED_AVFRAME_ENCODER 0
+#define CONFIG_WMV1_ENCODER 0
+#define CONFIG_WMV2_ENCODER 0
+#define CONFIG_XBM_ENCODER 0
+#define CONFIG_XFACE_ENCODER 0
+#define CONFIG_XWD_ENCODER 0
+#define CONFIG_Y41P_ENCODER 0
+#define CONFIG_YUV4_ENCODER 0
+#define CONFIG_ZLIB_ENCODER 0
+#define CONFIG_ZMBV_ENCODER 0
+#define CONFIG_AAC_ENCODER 0
+#define CONFIG_AC3_ENCODER 0
+#define CONFIG_AC3_FIXED_ENCODER 0
+#define CONFIG_ALAC_ENCODER 0
+#define CONFIG_APTX_ENCODER 0
+#define CONFIG_APTX_HD_ENCODER 0
+#define CONFIG_DCA_ENCODER 0
+#define CONFIG_EAC3_ENCODER 0
+#define CONFIG_FLAC_ENCODER 0
+#define CONFIG_G723_1_ENCODER 0
+#define CONFIG_MLP_ENCODER 0
+#define CONFIG_MP2_ENCODER 0
+#define CONFIG_MP2FIXED_ENCODER 0
+#define CONFIG_NELLYMOSER_ENCODER 0
+#define CONFIG_OPUS_ENCODER 0
+#define CONFIG_RA_144_ENCODER 0
+#define CONFIG_SBC_ENCODER 0
+#define CONFIG_SONIC_ENCODER 0
+#define CONFIG_SONIC_LS_ENCODER 0
+#define CONFIG_TRUEHD_ENCODER 0
+#define CONFIG_TTA_ENCODER 0
+#define CONFIG_VORBIS_ENCODER 0
+#define CONFIG_WAVPACK_ENCODER 0
+#define CONFIG_WMAV1_ENCODER 0
+#define CONFIG_WMAV2_ENCODER 0
+#define CONFIG_PCM_ALAW_ENCODER 0
+#define CONFIG_PCM_DVD_ENCODER 0
+#define CONFIG_PCM_F32BE_ENCODER 0
+#define CONFIG_PCM_F32LE_ENCODER 0
+#define CONFIG_PCM_F64BE_ENCODER 0
+#define CONFIG_PCM_F64LE_ENCODER 0
+#define CONFIG_PCM_MULAW_ENCODER 0
+#define CONFIG_PCM_S8_ENCODER 0
+#define CONFIG_PCM_S8_PLANAR_ENCODER 0
+#define CONFIG_PCM_S16BE_ENCODER 0
+#define CONFIG_PCM_S16BE_PLANAR_ENCODER 0
+#define CONFIG_PCM_S16LE_ENCODER 0
+#define CONFIG_PCM_S16LE_PLANAR_ENCODER 0
+#define CONFIG_PCM_S24BE_ENCODER 0
+#define CONFIG_PCM_S24DAUD_ENCODER 0
+#define CONFIG_PCM_S24LE_ENCODER 0
+#define CONFIG_PCM_S24LE_PLANAR_ENCODER 0
+#define CONFIG_PCM_S32BE_ENCODER 0
+#define CONFIG_PCM_S32LE_ENCODER 0
+#define CONFIG_PCM_S32LE_PLANAR_ENCODER 0
+#define CONFIG_PCM_S64BE_ENCODER 0
+#define CONFIG_PCM_S64LE_ENCODER 0
+#define CONFIG_PCM_U8_ENCODER 0
+#define CONFIG_PCM_U16BE_ENCODER 0
+#define CONFIG_PCM_U16LE_ENCODER 0
+#define CONFIG_PCM_U24BE_ENCODER 0
+#define CONFIG_PCM_U24LE_ENCODER 0
+#define CONFIG_PCM_U32BE_ENCODER 0
+#define CONFIG_PCM_U32LE_ENCODER 0
+#define CONFIG_PCM_VIDC_ENCODER 0
+#define CONFIG_ROQ_DPCM_ENCODER 0
+#define CONFIG_ADPCM_ADX_ENCODER 0
+#define CONFIG_ADPCM_G722_ENCODER 0
+#define CONFIG_ADPCM_G726_ENCODER 0
+#define CONFIG_ADPCM_G726LE_ENCODER 0
+#define CONFIG_ADPCM_IMA_QT_ENCODER 0
+#define CONFIG_ADPCM_IMA_WAV_ENCODER 0
+#define CONFIG_ADPCM_MS_ENCODER 0
+#define CONFIG_ADPCM_SWF_ENCODER 0
+#define CONFIG_ADPCM_YAMAHA_ENCODER 0
+#define CONFIG_SSA_ENCODER 0
+#define CONFIG_ASS_ENCODER 0
+#define CONFIG_DVBSUB_ENCODER 0
+#define CONFIG_DVDSUB_ENCODER 0
+#define CONFIG_MOVTEXT_ENCODER 0
+#define CONFIG_SRT_ENCODER 0
+#define CONFIG_SUBRIP_ENCODER 0
+#define CONFIG_TEXT_ENCODER 0
+#define CONFIG_WEBVTT_ENCODER 0
+#define CONFIG_XSUB_ENCODER 0
+#define CONFIG_AAC_AT_ENCODER 0
+#define CONFIG_ALAC_AT_ENCODER 0
+#define CONFIG_ILBC_AT_ENCODER 0
+#define CONFIG_PCM_ALAW_AT_ENCODER 0
+#define CONFIG_PCM_MULAW_AT_ENCODER 0
+#define CONFIG_LIBAOM_AV1_ENCODER 0
+#define CONFIG_LIBCODEC2_ENCODER 0
+#define CONFIG_LIBFDK_AAC_ENCODER 0
+#define CONFIG_LIBGSM_ENCODER 0
+#define CONFIG_LIBGSM_MS_ENCODER 0
+#define CONFIG_LIBILBC_ENCODER 0
+#define CONFIG_LIBMP3LAME_ENCODER 0
+#define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0
+#define CONFIG_LIBOPENJPEG_ENCODER 0
+#define CONFIG_LIBOPUS_ENCODER 0
+#define CONFIG_LIBRAV1E_ENCODER 0
+#define CONFIG_LIBSHINE_ENCODER 0
+#define CONFIG_LIBSPEEX_ENCODER 0
+#define CONFIG_LIBTHEORA_ENCODER 0
+#define CONFIG_LIBTWOLAME_ENCODER 0
+#define CONFIG_LIBVO_AMRWBENC_ENCODER 0
+#define CONFIG_LIBVORBIS_ENCODER 0
+#define CONFIG_LIBVPX_VP8_ENCODER 0
+#define CONFIG_LIBVPX_VP9_ENCODER 0
+#define CONFIG_LIBWAVPACK_ENCODER 0
+#define CONFIG_LIBWEBP_ANIM_ENCODER 0
+#define CONFIG_LIBWEBP_ENCODER 0
+#define CONFIG_LIBX262_ENCODER 0
+#define CONFIG_LIBX264_ENCODER 0
+#define CONFIG_LIBX264RGB_ENCODER 0
+#define CONFIG_LIBX265_ENCODER 0
+#define CONFIG_LIBXAVS_ENCODER 0
+#define CONFIG_LIBXAVS2_ENCODER 0
+#define CONFIG_LIBXVID_ENCODER 0
+#define CONFIG_H263_V4L2M2M_ENCODER 0
+#define CONFIG_LIBOPENH264_ENCODER 0
+#define CONFIG_H264_AMF_ENCODER 0
+#define CONFIG_H264_NVENC_ENCODER 0
+#define CONFIG_H264_OMX_ENCODER 0
+#define CONFIG_H264_QSV_ENCODER 0
+#define CONFIG_H264_V4L2M2M_ENCODER 0
+#define CONFIG_H264_VAAPI_ENCODER 0
+#define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0
+#define CONFIG_NVENC_ENCODER 0
+#define CONFIG_NVENC_H264_ENCODER 0
+#define CONFIG_NVENC_HEVC_ENCODER 0
+#define CONFIG_HEVC_AMF_ENCODER 0
+#define CONFIG_HEVC_NVENC_ENCODER 0
+#define CONFIG_HEVC_QSV_ENCODER 0
+#define CONFIG_HEVC_V4L2M2M_ENCODER 0
+#define CONFIG_HEVC_VAAPI_ENCODER 0
+#define CONFIG_HEVC_VIDEOTOOLBOX_ENCODER 0
+#define CONFIG_LIBKVAZAAR_ENCODER 0
+#define CONFIG_MJPEG_QSV_ENCODER 0
+#define CONFIG_MJPEG_VAAPI_ENCODER 0
+#define CONFIG_MPEG2_QSV_ENCODER 0
+#define CONFIG_MPEG2_VAAPI_ENCODER 0
+#define CONFIG_MPEG4_OMX_ENCODER 0
+#define CONFIG_MPEG4_V4L2M2M_ENCODER 0
+#define CONFIG_VP8_V4L2M2M_ENCODER 0
+#define CONFIG_VP8_VAAPI_ENCODER 0
+#define CONFIG_VP9_VAAPI_ENCODER 0
+#define CONFIG_VP9_QSV_ENCODER 0
+#define CONFIG_H263_VAAPI_HWACCEL 0
+#define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0
+#define CONFIG_H264_D3D11VA_HWACCEL 0
+#define CONFIG_H264_D3D11VA2_HWACCEL 0
+#define CONFIG_H264_DXVA2_HWACCEL 0
+#define CONFIG_H264_NVDEC_HWACCEL 0
+#define CONFIG_H264_VAAPI_HWACCEL 0
+#define CONFIG_H264_VDPAU_HWACCEL 0
+#define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0
+#define CONFIG_HEVC_D3D11VA_HWACCEL 0
+#define CONFIG_HEVC_D3D11VA2_HWACCEL 0
+#define CONFIG_HEVC_DXVA2_HWACCEL 0
+#define CONFIG_HEVC_NVDEC_HWACCEL 0
+#define CONFIG_HEVC_VAAPI_HWACCEL 0
+#define CONFIG_HEVC_VDPAU_HWACCEL 0
+#define CONFIG_HEVC_VIDEOTOOLBOX_HWACCEL 0
+#define CONFIG_MJPEG_NVDEC_HWACCEL 0
+#define CONFIG_MJPEG_VAAPI_HWACCEL 0
+#define CONFIG_MPEG1_NVDEC_HWACCEL 0
+#define CONFIG_MPEG1_VDPAU_HWACCEL 0
+#define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0
+#define CONFIG_MPEG1_XVMC_HWACCEL 0
+#define CONFIG_MPEG2_D3D11VA_HWACCEL 0
+#define CONFIG_MPEG2_D3D11VA2_HWACCEL 0
+#define CONFIG_MPEG2_NVDEC_HWACCEL 0
+#define CONFIG_MPEG2_DXVA2_HWACCEL 0
+#define CONFIG_MPEG2_VAAPI_HWACCEL 0
+#define CONFIG_MPEG2_VDPAU_HWACCEL 0
+#define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0
+#define CONFIG_MPEG2_XVMC_HWACCEL 0
+#define CONFIG_MPEG4_NVDEC_HWACCEL 0
+#define CONFIG_MPEG4_VAAPI_HWACCEL 0
+#define CONFIG_MPEG4_VDPAU_HWACCEL 0
+#define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0
+#define CONFIG_VC1_D3D11VA_HWACCEL 0
+#define CONFIG_VC1_D3D11VA2_HWACCEL 0
+#define CONFIG_VC1_DXVA2_HWACCEL 0
+#define CONFIG_VC1_NVDEC_HWACCEL 0
+#define CONFIG_VC1_VAAPI_HWACCEL 0
+#define CONFIG_VC1_VDPAU_HWACCEL 0
+#define CONFIG_VP8_NVDEC_HWACCEL 0
+#define CONFIG_VP8_VAAPI_HWACCEL 0
+#define CONFIG_VP9_D3D11VA_HWACCEL 0
+#define CONFIG_VP9_D3D11VA2_HWACCEL 0
+#define CONFIG_VP9_DXVA2_HWACCEL 0
+#define CONFIG_VP9_NVDEC_HWACCEL 0
+#define CONFIG_VP9_VAAPI_HWACCEL 0
+#define CONFIG_VP9_VDPAU_HWACCEL 0
+#define CONFIG_WMV3_D3D11VA_HWACCEL 0
+#define CONFIG_WMV3_D3D11VA2_HWACCEL 0
+#define CONFIG_WMV3_DXVA2_HWACCEL 0
+#define CONFIG_WMV3_NVDEC_HWACCEL 0
+#define CONFIG_WMV3_VAAPI_HWACCEL 0
+#define CONFIG_WMV3_VDPAU_HWACCEL 0
+#define CONFIG_AAC_PARSER 0
+#define CONFIG_AAC_LATM_PARSER 0
+#define CONFIG_AC3_PARSER 0
+#define CONFIG_ADX_PARSER 0
+#define CONFIG_AV1_PARSER 0
+#define CONFIG_AVS2_PARSER 0
+#define CONFIG_BMP_PARSER 0
+#define CONFIG_CAVSVIDEO_PARSER 0
+#define CONFIG_COOK_PARSER 0
+#define CONFIG_DCA_PARSER 0
+#define CONFIG_DIRAC_PARSER 0
+#define CONFIG_DNXHD_PARSER 0
+#define CONFIG_DPX_PARSER 0
+#define CONFIG_DVAUDIO_PARSER 0
+#define CONFIG_DVBSUB_PARSER 0
+#define CONFIG_DVDSUB_PARSER 0
+#define CONFIG_DVD_NAV_PARSER 0
+#define CONFIG_FLAC_PARSER 1
+#define CONFIG_G723_1_PARSER 0
+#define CONFIG_G729_PARSER 0
+#define CONFIG_GIF_PARSER 0
+#define CONFIG_GSM_PARSER 0
+#define CONFIG_H261_PARSER 0
+#define CONFIG_H263_PARSER 0
+#define CONFIG_H264_PARSER 0
+#define CONFIG_HEVC_PARSER 0
+#define CONFIG_MJPEG_PARSER 0
+#define CONFIG_MLP_PARSER 0
+#define CONFIG_MPEG4VIDEO_PARSER 0
+#define CONFIG_MPEGAUDIO_PARSER 1
+#define CONFIG_MPEGVIDEO_PARSER 0
+#define CONFIG_OPUS_PARSER 1
+#define CONFIG_PNG_PARSER 0
+#define CONFIG_PNM_PARSER 0
+#define CONFIG_RV30_PARSER 0
+#define CONFIG_RV40_PARSER 0
+#define CONFIG_SBC_PARSER 0
+#define CONFIG_SIPR_PARSER 0
+#define CONFIG_TAK_PARSER 0
+#define CONFIG_VC1_PARSER 0
+#define CONFIG_VORBIS_PARSER 1
+#define CONFIG_VP3_PARSER 1
+#define CONFIG_VP8_PARSER 1
+#define CONFIG_VP9_PARSER 0
+#define CONFIG_WEBP_PARSER 0
+#define CONFIG_XMA_PARSER 0
+#define CONFIG_ALSA_INDEV 0
+#define CONFIG_ANDROID_CAMERA_INDEV 0
+#define CONFIG_AVFOUNDATION_INDEV 0
+#define CONFIG_BKTR_INDEV 0
+#define CONFIG_DECKLINK_INDEV 0
+#define CONFIG_DSHOW_INDEV 0
+#define CONFIG_FBDEV_INDEV 0
+#define CONFIG_GDIGRAB_INDEV 0
+#define CONFIG_IEC61883_INDEV 0
+#define CONFIG_JACK_INDEV 0
+#define CONFIG_KMSGRAB_INDEV 0
+#define CONFIG_LAVFI_INDEV 0
+#define CONFIG_OPENAL_INDEV 0
+#define CONFIG_OSS_INDEV 0
+#define CONFIG_PULSE_INDEV 0
+#define CONFIG_SNDIO_INDEV 0
+#define CONFIG_V4L2_INDEV 0
+#define CONFIG_VFWCAP_INDEV 0
+#define CONFIG_XCBGRAB_INDEV 0
+#define CONFIG_LIBCDIO_INDEV 0
+#define CONFIG_LIBDC1394_INDEV 0
+#define CONFIG_ALSA_OUTDEV 0
+#define CONFIG_CACA_OUTDEV 0
+#define CONFIG_DECKLINK_OUTDEV 0
+#define CONFIG_FBDEV_OUTDEV 0
+#define CONFIG_OPENGL_OUTDEV 0
+#define CONFIG_OSS_OUTDEV 0
+#define CONFIG_PULSE_OUTDEV 0
+#define CONFIG_SDL2_OUTDEV 0
+#define CONFIG_SNDIO_OUTDEV 0
+#define CONFIG_V4L2_OUTDEV 0
+#define CONFIG_XV_OUTDEV 0
+#define CONFIG_ABENCH_FILTER 0
+#define CONFIG_ACOMPRESSOR_FILTER 0
+#define CONFIG_ACONTRAST_FILTER 0
+#define CONFIG_ACOPY_FILTER 0
+#define CONFIG_ACUE_FILTER 0
+#define CONFIG_ACROSSFADE_FILTER 0
+#define CONFIG_ACROSSOVER_FILTER 0
+#define CONFIG_ACRUSHER_FILTER 0
+#define CONFIG_ADECLICK_FILTER 0
+#define CONFIG_ADECLIP_FILTER 0
+#define CONFIG_ADELAY_FILTER 0
+#define CONFIG_ADERIVATIVE_FILTER 0
+#define CONFIG_AECHO_FILTER 0
+#define CONFIG_AEMPHASIS_FILTER 0
+#define CONFIG_AEVAL_FILTER 0
+#define CONFIG_AFADE_FILTER 0
+#define CONFIG_AFFTDN_FILTER 0
+#define CONFIG_AFFTFILT_FILTER 0
+#define CONFIG_AFIR_FILTER 0
+#define CONFIG_AFORMAT_FILTER 0
+#define CONFIG_AGATE_FILTER 0
+#define CONFIG_AIIR_FILTER 0
+#define CONFIG_AINTEGRAL_FILTER 0
+#define CONFIG_AINTERLEAVE_FILTER 0
+#define CONFIG_ALIMITER_FILTER 0
+#define CONFIG_ALLPASS_FILTER 0
+#define CONFIG_ALOOP_FILTER 0
+#define CONFIG_AMERGE_FILTER 0
+#define CONFIG_AMETADATA_FILTER 0
+#define CONFIG_AMIX_FILTER 0
+#define CONFIG_AMULTIPLY_FILTER 0
+#define CONFIG_ANEQUALIZER_FILTER 0
+#define CONFIG_ANLMDN_FILTER 0
+#define CONFIG_ANLMS_FILTER 0
+#define CONFIG_ANULL_FILTER 0
+#define CONFIG_APAD_FILTER 0
+#define CONFIG_APERMS_FILTER 0
+#define CONFIG_APHASER_FILTER 0
+#define CONFIG_APULSATOR_FILTER 0
+#define CONFIG_AREALTIME_FILTER 0
+#define CONFIG_ARESAMPLE_FILTER 0
+#define CONFIG_AREVERSE_FILTER 0
+#define CONFIG_ARNNDN_FILTER 0
+#define CONFIG_ASELECT_FILTER 0
+#define CONFIG_ASENDCMD_FILTER 0
+#define CONFIG_ASETNSAMPLES_FILTER 0
+#define CONFIG_ASETPTS_FILTER 0
+#define CONFIG_ASETRATE_FILTER 0
+#define CONFIG_ASETTB_FILTER 0
+#define CONFIG_ASHOWINFO_FILTER 0
+#define CONFIG_ASIDEDATA_FILTER 0
+#define CONFIG_ASOFTCLIP_FILTER 0
+#define CONFIG_ASPLIT_FILTER 0
+#define CONFIG_ASR_FILTER 0
+#define CONFIG_ASTATS_FILTER 0
+#define CONFIG_ASTREAMSELECT_FILTER 0
+#define CONFIG_ATEMPO_FILTER 0
+#define CONFIG_ATRIM_FILTER 0
+#define CONFIG_AXCORRELATE_FILTER 0
+#define CONFIG_AZMQ_FILTER 0
+#define CONFIG_BANDPASS_FILTER 0
+#define CONFIG_BANDREJECT_FILTER 0
+#define CONFIG_BASS_FILTER 0
+#define CONFIG_BIQUAD_FILTER 0
+#define CONFIG_BS2B_FILTER 0
+#define CONFIG_CHROMABER_VULKAN_FILTER 0
+#define CONFIG_CHANNELMAP_FILTER 0
+#define CONFIG_CHANNELSPLIT_FILTER 0
+#define CONFIG_CHORUS_FILTER 0
+#define CONFIG_COMPAND_FILTER 0
+#define CONFIG_COMPENSATIONDELAY_FILTER 0
+#define CONFIG_CROSSFEED_FILTER 0
+#define CONFIG_CRYSTALIZER_FILTER 0
+#define CONFIG_DCSHIFT_FILTER 0
+#define CONFIG_DEESSER_FILTER 0
+#define CONFIG_DRMETER_FILTER 0
+#define CONFIG_DYNAUDNORM_FILTER 0
+#define CONFIG_EARWAX_FILTER 0
+#define CONFIG_EBUR128_FILTER 0
+#define CONFIG_EQUALIZER_FILTER 0
+#define CONFIG_EXTRASTEREO_FILTER 0
+#define CONFIG_FIREQUALIZER_FILTER 0
+#define CONFIG_FLANGER_FILTER 0
+#define CONFIG_HAAS_FILTER 0
+#define CONFIG_HDCD_FILTER 0
+#define CONFIG_HEADPHONE_FILTER 0
+#define CONFIG_HIGHPASS_FILTER 0
+#define CONFIG_HIGHSHELF_FILTER 0
+#define CONFIG_JOIN_FILTER 0
+#define CONFIG_LADSPA_FILTER 0
+#define CONFIG_LOUDNORM_FILTER 0
+#define CONFIG_LOWPASS_FILTER 0
+#define CONFIG_LOWSHELF_FILTER 0
+#define CONFIG_LV2_FILTER 0
+#define CONFIG_MCOMPAND_FILTER 0
+#define CONFIG_PAN_FILTER 0
+#define CONFIG_REPLAYGAIN_FILTER 0
+#define CONFIG_RESAMPLE_FILTER 0
+#define CONFIG_RUBBERBAND_FILTER 0
+#define CONFIG_SIDECHAINCOMPRESS_FILTER 0
+#define CONFIG_SIDECHAINGATE_FILTER 0
+#define CONFIG_SILENCEDETECT_FILTER 0
+#define CONFIG_SILENCEREMOVE_FILTER 0
+#define CONFIG_SOFALIZER_FILTER 0
+#define CONFIG_STEREOTOOLS_FILTER 0
+#define CONFIG_STEREOWIDEN_FILTER 0
+#define CONFIG_SUPEREQUALIZER_FILTER 0
+#define CONFIG_SURROUND_FILTER 0
+#define CONFIG_TREBLE_FILTER 0
+#define CONFIG_TREMOLO_FILTER 0
+#define CONFIG_VIBRATO_FILTER 0
+#define CONFIG_VOLUME_FILTER 0
+#define CONFIG_VOLUMEDETECT_FILTER 0
+#define CONFIG_AEVALSRC_FILTER 0
+#define CONFIG_AFIRSRC_FILTER 0
+#define CONFIG_ANOISESRC_FILTER 0
+#define CONFIG_ANULLSRC_FILTER 0
+#define CONFIG_FLITE_FILTER 0
+#define CONFIG_HILBERT_FILTER 0
+#define CONFIG_SINC_FILTER 0
+#define CONFIG_SINE_FILTER 0
+#define CONFIG_ANULLSINK_FILTER 0
+#define CONFIG_ADDROI_FILTER 0
+#define CONFIG_ALPHAEXTRACT_FILTER 0
+#define CONFIG_ALPHAMERGE_FILTER 0
+#define CONFIG_AMPLIFY_FILTER 0
+#define CONFIG_ASS_FILTER 0
+#define CONFIG_ATADENOISE_FILTER 0
+#define CONFIG_AVGBLUR_FILTER 0
+#define CONFIG_AVGBLUR_OPENCL_FILTER 0
+#define CONFIG_AVGBLUR_VULKAN_FILTER 0
+#define CONFIG_BBOX_FILTER 0
+#define CONFIG_BENCH_FILTER 0
+#define CONFIG_BILATERAL_FILTER 0
+#define CONFIG_BITPLANENOISE_FILTER 0
+#define CONFIG_BLACKDETECT_FILTER 0
+#define CONFIG_BLACKFRAME_FILTER 0
+#define CONFIG_BLEND_FILTER 0
+#define CONFIG_BM3D_FILTER 0
+#define CONFIG_BOXBLUR_FILTER 0
+#define CONFIG_BOXBLUR_OPENCL_FILTER 0
+#define CONFIG_BWDIF_FILTER 0
+#define CONFIG_CAS_FILTER 0
+#define CONFIG_CHROMAHOLD_FILTER 0
+#define CONFIG_CHROMAKEY_FILTER 0
+#define CONFIG_CHROMASHIFT_FILTER 0
+#define CONFIG_CIESCOPE_FILTER 0
+#define CONFIG_CODECVIEW_FILTER 0
+#define CONFIG_COLORBALANCE_FILTER 0
+#define CONFIG_COLORCHANNELMIXER_FILTER 0
+#define CONFIG_COLORKEY_FILTER 0
+#define CONFIG_COLORKEY_OPENCL_FILTER 0
+#define CONFIG_COLORHOLD_FILTER 0
+#define CONFIG_COLORLEVELS_FILTER 0
+#define CONFIG_COLORMATRIX_FILTER 0
+#define CONFIG_COLORSPACE_FILTER 0
+#define CONFIG_CONVOLUTION_FILTER 0
+#define CONFIG_CONVOLUTION_OPENCL_FILTER 0
+#define CONFIG_CONVOLVE_FILTER 0
+#define CONFIG_COPY_FILTER 0
+#define CONFIG_COREIMAGE_FILTER 0
+#define CONFIG_COVER_RECT_FILTER 0
+#define CONFIG_CROP_FILTER 0
+#define CONFIG_CROPDETECT_FILTER 0
+#define CONFIG_CUE_FILTER 0
+#define CONFIG_CURVES_FILTER 0
+#define CONFIG_DATASCOPE_FILTER 0
+#define CONFIG_DCTDNOIZ_FILTER 0
+#define CONFIG_DEBAND_FILTER 0
+#define CONFIG_DEBLOCK_FILTER 0
+#define CONFIG_DECIMATE_FILTER 0
+#define CONFIG_DECONVOLVE_FILTER 0
+#define CONFIG_DEDOT_FILTER 0
+#define CONFIG_DEFLATE_FILTER 0
+#define CONFIG_DEFLICKER_FILTER 0
+#define CONFIG_DEINTERLACE_QSV_FILTER 0
+#define CONFIG_DEINTERLACE_VAAPI_FILTER 0
+#define CONFIG_DEJUDDER_FILTER 0
+#define CONFIG_DELOGO_FILTER 0
+#define CONFIG_DENOISE_VAAPI_FILTER 0
+#define CONFIG_DERAIN_FILTER 0
+#define CONFIG_DESHAKE_FILTER 0
+#define CONFIG_DESHAKE_OPENCL_FILTER 0
+#define CONFIG_DESPILL_FILTER 0
+#define CONFIG_DETELECINE_FILTER 0
+#define CONFIG_DILATION_FILTER 0
+#define CONFIG_DILATION_OPENCL_FILTER 0
+#define CONFIG_DISPLACE_FILTER 0
+#define CONFIG_DNN_PROCESSING_FILTER 0
+#define CONFIG_DOUBLEWEAVE_FILTER 0
+#define CONFIG_DRAWBOX_FILTER 0
+#define CONFIG_DRAWGRAPH_FILTER 0
+#define CONFIG_DRAWGRID_FILTER 0
+#define CONFIG_DRAWTEXT_FILTER 0
+#define CONFIG_EDGEDETECT_FILTER 0
+#define CONFIG_ELBG_FILTER 0
+#define CONFIG_ENTROPY_FILTER 0
+#define CONFIG_EQ_FILTER 0
+#define CONFIG_EROSION_FILTER 0
+#define CONFIG_EROSION_OPENCL_FILTER 0
+#define CONFIG_EXTRACTPLANES_FILTER 0
+#define CONFIG_FADE_FILTER 0
+#define CONFIG_FFTDNOIZ_FILTER 0
+#define CONFIG_FFTFILT_FILTER 0
+#define CONFIG_FIELD_FILTER 0
+#define CONFIG_FIELDHINT_FILTER 0
+#define CONFIG_FIELDMATCH_FILTER 0
+#define CONFIG_FIELDORDER_FILTER 0
+#define CONFIG_FILLBORDERS_FILTER 0
+#define CONFIG_FIND_RECT_FILTER 0
+#define CONFIG_FLOODFILL_FILTER 0
+#define CONFIG_FORMAT_FILTER 0
+#define CONFIG_FPS_FILTER 0
+#define CONFIG_FRAMEPACK_FILTER 0
+#define CONFIG_FRAMERATE_FILTER 0
+#define CONFIG_FRAMESTEP_FILTER 0
+#define CONFIG_FREEZEDETECT_FILTER 0
+#define CONFIG_FREEZEFRAMES_FILTER 0
+#define CONFIG_FREI0R_FILTER 0
+#define CONFIG_FSPP_FILTER 0
+#define CONFIG_GBLUR_FILTER 0
+#define CONFIG_GEQ_FILTER 0
+#define CONFIG_GRADFUN_FILTER 0
+#define CONFIG_GRAPHMONITOR_FILTER 0
+#define CONFIG_GREYEDGE_FILTER 0
+#define CONFIG_HALDCLUT_FILTER 0
+#define CONFIG_HFLIP_FILTER 0
+#define CONFIG_HISTEQ_FILTER 0
+#define CONFIG_HISTOGRAM_FILTER 0
+#define CONFIG_HQDN3D_FILTER 0
+#define CONFIG_HQX_FILTER 0
+#define CONFIG_HSTACK_FILTER 0
+#define CONFIG_HUE_FILTER 0
+#define CONFIG_HWDOWNLOAD_FILTER 0
+#define CONFIG_HWMAP_FILTER 0
+#define CONFIG_HWUPLOAD_FILTER 0
+#define CONFIG_HWUPLOAD_CUDA_FILTER 0
+#define CONFIG_HYSTERESIS_FILTER 0
+#define CONFIG_IDET_FILTER 0
+#define CONFIG_IL_FILTER 0
+#define CONFIG_INFLATE_FILTER 0
+#define CONFIG_INTERLACE_FILTER 0
+#define CONFIG_INTERLEAVE_FILTER 0
+#define CONFIG_KERNDEINT_FILTER 0
+#define CONFIG_LAGFUN_FILTER 0
+#define CONFIG_LENSCORRECTION_FILTER 0
+#define CONFIG_LENSFUN_FILTER 0
+#define CONFIG_LIBVMAF_FILTER 0
+#define CONFIG_LIMITER_FILTER 0
+#define CONFIG_LOOP_FILTER 0
+#define CONFIG_LUMAKEY_FILTER 0
+#define CONFIG_LUT_FILTER 0
+#define CONFIG_LUT1D_FILTER 0
+#define CONFIG_LUT2_FILTER 0
+#define CONFIG_LUT3D_FILTER 0
+#define CONFIG_LUTRGB_FILTER 0
+#define CONFIG_LUTYUV_FILTER 0
+#define CONFIG_MASKEDCLAMP_FILTER 0
+#define CONFIG_MASKEDMAX_FILTER 0
+#define CONFIG_MASKEDMERGE_FILTER 0
+#define CONFIG_MASKEDMIN_FILTER 0
+#define CONFIG_MASKEDTHRESHOLD_FILTER 0
+#define CONFIG_MASKFUN_FILTER 0
+#define CONFIG_MCDEINT_FILTER 0
+#define CONFIG_MEDIAN_FILTER 0
+#define CONFIG_MERGEPLANES_FILTER 0
+#define CONFIG_MESTIMATE_FILTER 0
+#define CONFIG_METADATA_FILTER 0
+#define CONFIG_MIDEQUALIZER_FILTER 0
+#define CONFIG_MINTERPOLATE_FILTER 0
+#define CONFIG_MIX_FILTER 0
+#define CONFIG_MPDECIMATE_FILTER 0
+#define CONFIG_NEGATE_FILTER 0
+#define CONFIG_NLMEANS_FILTER 0
+#define CONFIG_NLMEANS_OPENCL_FILTER 0
+#define CONFIG_NNEDI_FILTER 0
+#define CONFIG_NOFORMAT_FILTER 0
+#define CONFIG_NOISE_FILTER 0
+#define CONFIG_NORMALIZE_FILTER 0
+#define CONFIG_NULL_FILTER 0
+#define CONFIG_OCR_FILTER 0
+#define CONFIG_OCV_FILTER 0
+#define CONFIG_OSCILLOSCOPE_FILTER 0
+#define CONFIG_OVERLAY_FILTER 0
+#define CONFIG_OVERLAY_OPENCL_FILTER 0
+#define CONFIG_OVERLAY_QSV_FILTER 0
+#define CONFIG_OVERLAY_VULKAN_FILTER 0
+#define CONFIG_OVERLAY_CUDA_FILTER 0
+#define CONFIG_OWDENOISE_FILTER 0
+#define CONFIG_PAD_FILTER 0
+#define CONFIG_PAD_OPENCL_FILTER 0
+#define CONFIG_PALETTEGEN_FILTER 0
+#define CONFIG_PALETTEUSE_FILTER 0
+#define CONFIG_PERMS_FILTER 0
+#define CONFIG_PERSPECTIVE_FILTER 0
+#define CONFIG_PHASE_FILTER 0
+#define CONFIG_PHOTOSENSITIVITY_FILTER 0
+#define CONFIG_PIXDESCTEST_FILTER 0
+#define CONFIG_PIXSCOPE_FILTER 0
+#define CONFIG_PP_FILTER 0
+#define CONFIG_PP7_FILTER 0
+#define CONFIG_PREMULTIPLY_FILTER 0
+#define CONFIG_PREWITT_FILTER 0
+#define CONFIG_PREWITT_OPENCL_FILTER 0
+#define CONFIG_PROCAMP_VAAPI_FILTER 0
+#define CONFIG_PROGRAM_OPENCL_FILTER 0
+#define CONFIG_PSEUDOCOLOR_FILTER 0
+#define CONFIG_PSNR_FILTER 0
+#define CONFIG_PULLUP_FILTER 0
+#define CONFIG_QP_FILTER 0
+#define CONFIG_RANDOM_FILTER 0
+#define CONFIG_READEIA608_FILTER 0
+#define CONFIG_READVITC_FILTER 0
+#define CONFIG_REALTIME_FILTER 0
+#define CONFIG_REMAP_FILTER 0
+#define CONFIG_REMOVEGRAIN_FILTER 0
+#define CONFIG_REMOVELOGO_FILTER 0
+#define CONFIG_REPEATFIELDS_FILTER 0
+#define CONFIG_REVERSE_FILTER 0
+#define CONFIG_RGBASHIFT_FILTER 0
+#define CONFIG_ROBERTS_FILTER 0
+#define CONFIG_ROBERTS_OPENCL_FILTER 0
+#define CONFIG_ROTATE_FILTER 0
+#define CONFIG_SAB_FILTER 0
+#define CONFIG_SCALE_FILTER 0
+#define CONFIG_SCALE_CUDA_FILTER 0
+#define CONFIG_SCALE_NPP_FILTER 0
+#define CONFIG_SCALE_QSV_FILTER 0
+#define CONFIG_SCALE_VAAPI_FILTER 0
+#define CONFIG_SCALE_VULKAN_FILTER 0
+#define CONFIG_SCALE2REF_FILTER 0
+#define CONFIG_SCROLL_FILTER 0
+#define CONFIG_SELECT_FILTER 0
+#define CONFIG_SELECTIVECOLOR_FILTER 0
+#define CONFIG_SENDCMD_FILTER 0
+#define CONFIG_SEPARATEFIELDS_FILTER 0
+#define CONFIG_SETDAR_FILTER 0
+#define CONFIG_SETFIELD_FILTER 0
+#define CONFIG_SETPARAMS_FILTER 0
+#define CONFIG_SETPTS_FILTER 0
+#define CONFIG_SETRANGE_FILTER 0
+#define CONFIG_SETSAR_FILTER 0
+#define CONFIG_SETTB_FILTER 0
+#define CONFIG_SHARPNESS_VAAPI_FILTER 0
+#define CONFIG_SHOWINFO_FILTER 0
+#define CONFIG_SHOWPALETTE_FILTER 0
+#define CONFIG_SHUFFLEFRAMES_FILTER 0
+#define CONFIG_SHUFFLEPLANES_FILTER 0
+#define CONFIG_SIDEDATA_FILTER 0
+#define CONFIG_SIGNALSTATS_FILTER 0
+#define CONFIG_SIGNATURE_FILTER 0
+#define CONFIG_SMARTBLUR_FILTER 0
+#define CONFIG_SOBEL_FILTER 0
+#define CONFIG_SOBEL_OPENCL_FILTER 0
+#define CONFIG_SPLIT_FILTER 0
+#define CONFIG_SPP_FILTER 0
+#define CONFIG_SR_FILTER 0
+#define CONFIG_SSIM_FILTER 0
+#define CONFIG_STEREO3D_FILTER 0
+#define CONFIG_STREAMSELECT_FILTER 0
+#define CONFIG_SUBTITLES_FILTER 0
+#define CONFIG_SUPER2XSAI_FILTER 0
+#define CONFIG_SWAPRECT_FILTER 0
+#define CONFIG_SWAPUV_FILTER 0
+#define CONFIG_TBLEND_FILTER 0
+#define CONFIG_TELECINE_FILTER 0
+#define CONFIG_THISTOGRAM_FILTER 0
+#define CONFIG_THRESHOLD_FILTER 0
+#define CONFIG_THUMBNAIL_FILTER 0
+#define CONFIG_THUMBNAIL_CUDA_FILTER 0
+#define CONFIG_TILE_FILTER 0
+#define CONFIG_TINTERLACE_FILTER 0
+#define CONFIG_TLUT2_FILTER 0
+#define CONFIG_TMEDIAN_FILTER 0
+#define CONFIG_TMIX_FILTER 0
+#define CONFIG_TONEMAP_FILTER 0
+#define CONFIG_TONEMAP_OPENCL_FILTER 0
+#define CONFIG_TONEMAP_VAAPI_FILTER 0
+#define CONFIG_TPAD_FILTER 0
+#define CONFIG_TRANSPOSE_FILTER 0
+#define CONFIG_TRANSPOSE_NPP_FILTER 0
+#define CONFIG_TRANSPOSE_OPENCL_FILTER 0
+#define CONFIG_TRANSPOSE_VAAPI_FILTER 0
+#define CONFIG_TRIM_FILTER 0
+#define CONFIG_UNPREMULTIPLY_FILTER 0
+#define CONFIG_UNSHARP_FILTER 0
+#define CONFIG_UNSHARP_OPENCL_FILTER 0
+#define CONFIG_USPP_FILTER 0
+#define CONFIG_V360_FILTER 0
+#define CONFIG_VAGUEDENOISER_FILTER 0
+#define CONFIG_VECTORSCOPE_FILTER 0
+#define CONFIG_VFLIP_FILTER 0
+#define CONFIG_VFRDET_FILTER 0
+#define CONFIG_VIBRANCE_FILTER 0
+#define CONFIG_VIDSTABDETECT_FILTER 0
+#define CONFIG_VIDSTABTRANSFORM_FILTER 0
+#define CONFIG_VIGNETTE_FILTER 0
+#define CONFIG_VMAFMOTION_FILTER 0
+#define CONFIG_VPP_QSV_FILTER 0
+#define CONFIG_VSTACK_FILTER 0
+#define CONFIG_W3FDIF_FILTER 0
+#define CONFIG_WAVEFORM_FILTER 0
+#define CONFIG_WEAVE_FILTER 0
+#define CONFIG_XBR_FILTER 0
+#define CONFIG_XFADE_FILTER 0
+#define CONFIG_XFADE_OPENCL_FILTER 0
+#define CONFIG_XMEDIAN_FILTER 0
+#define CONFIG_XSTACK_FILTER 0
+#define CONFIG_YADIF_FILTER 0
+#define CONFIG_YADIF_CUDA_FILTER 0
+#define CONFIG_YAEPBLUR_FILTER 0
+#define CONFIG_ZMQ_FILTER 0
+#define CONFIG_ZOOMPAN_FILTER 0
+#define CONFIG_ZSCALE_FILTER 0
+#define CONFIG_ALLRGB_FILTER 0
+#define CONFIG_ALLYUV_FILTER 0
+#define CONFIG_CELLAUTO_FILTER 0
+#define CONFIG_COLOR_FILTER 0
+#define CONFIG_COREIMAGESRC_FILTER 0
+#define CONFIG_FREI0R_SRC_FILTER 0
+#define CONFIG_HALDCLUTSRC_FILTER 0
+#define CONFIG_LIFE_FILTER 0
+#define CONFIG_MANDELBROT_FILTER 0
+#define CONFIG_MPTESTSRC_FILTER 0
+#define CONFIG_NULLSRC_FILTER 0
+#define CONFIG_OPENCLSRC_FILTER 0
+#define CONFIG_PAL75BARS_FILTER 0
+#define CONFIG_PAL100BARS_FILTER 0
+#define CONFIG_RGBTESTSRC_FILTER 0
+#define CONFIG_SIERPINSKI_FILTER 0
+#define CONFIG_SMPTEBARS_FILTER 0
+#define CONFIG_SMPTEHDBARS_FILTER 0
+#define CONFIG_TESTSRC_FILTER 0
+#define CONFIG_TESTSRC2_FILTER 0
+#define CONFIG_YUVTESTSRC_FILTER 0
+#define CONFIG_NULLSINK_FILTER 0
+#define CONFIG_ABITSCOPE_FILTER 0
+#define CONFIG_ADRAWGRAPH_FILTER 0
+#define CONFIG_AGRAPHMONITOR_FILTER 0
+#define CONFIG_AHISTOGRAM_FILTER 0
+#define CONFIG_APHASEMETER_FILTER 0
+#define CONFIG_AVECTORSCOPE_FILTER 0
+#define CONFIG_CONCAT_FILTER 0
+#define CONFIG_SHOWCQT_FILTER 0
+#define CONFIG_SHOWFREQS_FILTER 0
+#define CONFIG_SHOWSPATIAL_FILTER 0
+#define CONFIG_SHOWSPECTRUM_FILTER 0
+#define CONFIG_SHOWSPECTRUMPIC_FILTER 0
+#define CONFIG_SHOWVOLUME_FILTER 0
+#define CONFIG_SHOWWAVES_FILTER 0
+#define CONFIG_SHOWWAVESPIC_FILTER 0
+#define CONFIG_SPECTRUMSYNTH_FILTER 0
+#define CONFIG_AMOVIE_FILTER 0
+#define CONFIG_MOVIE_FILTER 0
+#define CONFIG_AFIFO_FILTER 0
+#define CONFIG_FIFO_FILTER 0
+#define CONFIG_AA_DEMUXER 0
+#define CONFIG_AAC_DEMUXER 0
+#define CONFIG_AC3_DEMUXER 0
+#define CONFIG_ACM_DEMUXER 0
+#define CONFIG_ACT_DEMUXER 0
+#define CONFIG_ADF_DEMUXER 0
+#define CONFIG_ADP_DEMUXER 0
+#define CONFIG_ADS_DEMUXER 0
+#define CONFIG_ADX_DEMUXER 0
+#define CONFIG_AEA_DEMUXER 0
+#define CONFIG_AFC_DEMUXER 0
+#define CONFIG_AIFF_DEMUXER 0
+#define CONFIG_AIX_DEMUXER 0
+#define CONFIG_ALP_DEMUXER 0
+#define CONFIG_AMR_DEMUXER 0
+#define CONFIG_AMRNB_DEMUXER 0
+#define CONFIG_AMRWB_DEMUXER 0
+#define CONFIG_ANM_DEMUXER 0
+#define CONFIG_APC_DEMUXER 0
+#define CONFIG_APE_DEMUXER 0
+#define CONFIG_APM_DEMUXER 0
+#define CONFIG_APNG_DEMUXER 0
+#define CONFIG_APTX_DEMUXER 0
+#define CONFIG_APTX_HD_DEMUXER 0
+#define CONFIG_AQTITLE_DEMUXER 0
+#define CONFIG_ARGO_ASF_DEMUXER 0
+#define CONFIG_ASF_DEMUXER 0
+#define CONFIG_ASF_O_DEMUXER 0
+#define CONFIG_ASS_DEMUXER 0
+#define CONFIG_AST_DEMUXER 0
+#define CONFIG_AU_DEMUXER 0
+#define CONFIG_AV1_DEMUXER 0
+#define CONFIG_AVI_DEMUXER 0
+#define CONFIG_AVISYNTH_DEMUXER 0
+#define CONFIG_AVR_DEMUXER 0
+#define CONFIG_AVS_DEMUXER 0
+#define CONFIG_AVS2_DEMUXER 0
+#define CONFIG_BETHSOFTVID_DEMUXER 0
+#define CONFIG_BFI_DEMUXER 0
+#define CONFIG_BINTEXT_DEMUXER 0
+#define CONFIG_BINK_DEMUXER 0
+#define CONFIG_BIT_DEMUXER 0
+#define CONFIG_BMV_DEMUXER 0
+#define CONFIG_BFSTM_DEMUXER 0
+#define CONFIG_BRSTM_DEMUXER 0
+#define CONFIG_BOA_DEMUXER 0
+#define CONFIG_C93_DEMUXER 0
+#define CONFIG_CAF_DEMUXER 0
+#define CONFIG_CAVSVIDEO_DEMUXER 0
+#define CONFIG_CDG_DEMUXER 0
+#define CONFIG_CDXL_DEMUXER 0
+#define CONFIG_CINE_DEMUXER 0
+#define CONFIG_CODEC2_DEMUXER 0
+#define CONFIG_CODEC2RAW_DEMUXER 0
+#define CONFIG_CONCAT_DEMUXER 0
+#define CONFIG_DASH_DEMUXER 0
+#define CONFIG_DATA_DEMUXER 0
+#define CONFIG_DAUD_DEMUXER 0
+#define CONFIG_DCSTR_DEMUXER 0
+#define CONFIG_DERF_DEMUXER 0
+#define CONFIG_DFA_DEMUXER 0
+#define CONFIG_DHAV_DEMUXER 0
+#define CONFIG_DIRAC_DEMUXER 0
+#define CONFIG_DNXHD_DEMUXER 0
+#define CONFIG_DSF_DEMUXER 0
+#define CONFIG_DSICIN_DEMUXER 0
+#define CONFIG_DSS_DEMUXER 0
+#define CONFIG_DTS_DEMUXER 0
+#define CONFIG_DTSHD_DEMUXER 0
+#define CONFIG_DV_DEMUXER 0
+#define CONFIG_DVBSUB_DEMUXER 0
+#define CONFIG_DVBTXT_DEMUXER 0
+#define CONFIG_DXA_DEMUXER 0
+#define CONFIG_EA_DEMUXER 0
+#define CONFIG_EA_CDATA_DEMUXER 0
+#define CONFIG_EAC3_DEMUXER 0
+#define CONFIG_EPAF_DEMUXER 0
+#define CONFIG_FFMETADATA_DEMUXER 0
+#define CONFIG_FILMSTRIP_DEMUXER 0
+#define CONFIG_FITS_DEMUXER 0
+#define CONFIG_FLAC_DEMUXER 1
+#define CONFIG_FLIC_DEMUXER 0
+#define CONFIG_FLV_DEMUXER 0
+#define CONFIG_LIVE_FLV_DEMUXER 0
+#define CONFIG_FOURXM_DEMUXER 0
+#define CONFIG_FRM_DEMUXER 0
+#define CONFIG_FSB_DEMUXER 0
+#define CONFIG_FWSE_DEMUXER 0
+#define CONFIG_G722_DEMUXER 0
+#define CONFIG_G723_1_DEMUXER 0
+#define CONFIG_G726_DEMUXER 0
+#define CONFIG_G726LE_DEMUXER 0
+#define CONFIG_G729_DEMUXER 0
+#define CONFIG_GDV_DEMUXER 0
+#define CONFIG_GENH_DEMUXER 0
+#define CONFIG_GIF_DEMUXER 0
+#define CONFIG_GSM_DEMUXER 0
+#define CONFIG_GXF_DEMUXER 0
+#define CONFIG_H261_DEMUXER 0
+#define CONFIG_H263_DEMUXER 0
+#define CONFIG_H264_DEMUXER 0
+#define CONFIG_HCA_DEMUXER 0
+#define CONFIG_HCOM_DEMUXER 0
+#define CONFIG_HEVC_DEMUXER 0
+#define CONFIG_HLS_DEMUXER 0
+#define CONFIG_HNM_DEMUXER 0
+#define CONFIG_ICO_DEMUXER 0
+#define CONFIG_IDCIN_DEMUXER 0
+#define CONFIG_IDF_DEMUXER 0
+#define CONFIG_IFF_DEMUXER 0
+#define CONFIG_IFV_DEMUXER 0
+#define CONFIG_ILBC_DEMUXER 0
+#define CONFIG_IMAGE2_DEMUXER 0
+#define CONFIG_IMAGE2PIPE_DEMUXER 0
+#define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0
+#define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0
+#define CONFIG_INGENIENT_DEMUXER 0
+#define CONFIG_IPMOVIE_DEMUXER 0
+#define CONFIG_IRCAM_DEMUXER 0
+#define CONFIG_ISS_DEMUXER 0
+#define CONFIG_IV8_DEMUXER 0
+#define CONFIG_IVF_DEMUXER 0
+#define CONFIG_IVR_DEMUXER 0
+#define CONFIG_JACOSUB_DEMUXER 0
+#define CONFIG_JV_DEMUXER 0
+#define CONFIG_KUX_DEMUXER 0
+#define CONFIG_KVAG_DEMUXER 0
+#define CONFIG_LMLM4_DEMUXER 0
+#define CONFIG_LOAS_DEMUXER 0
+#define CONFIG_LRC_DEMUXER 0
+#define CONFIG_LVF_DEMUXER 0
+#define CONFIG_LXF_DEMUXER 0
+#define CONFIG_M4V_DEMUXER 0
+#define CONFIG_MATROSKA_DEMUXER 1
+#define CONFIG_MGSTS_DEMUXER 0
+#define CONFIG_MICRODVD_DEMUXER 0
+#define CONFIG_MJPEG_DEMUXER 0
+#define CONFIG_MJPEG_2000_DEMUXER 0
+#define CONFIG_MLP_DEMUXER 0
+#define CONFIG_MLV_DEMUXER 0
+#define CONFIG_MM_DEMUXER 0
+#define CONFIG_MMF_DEMUXER 0
+#define CONFIG_MOV_DEMUXER 1
+#define CONFIG_MP3_DEMUXER 1
+#define CONFIG_MPC_DEMUXER 0
+#define CONFIG_MPC8_DEMUXER 0
+#define CONFIG_MPEGPS_DEMUXER 0
+#define CONFIG_MPEGTS_DEMUXER 0
+#define CONFIG_MPEGTSRAW_DEMUXER 0
+#define CONFIG_MPEGVIDEO_DEMUXER 0
+#define CONFIG_MPJPEG_DEMUXER 0
+#define CONFIG_MPL2_DEMUXER 0
+#define CONFIG_MPSUB_DEMUXER 0
+#define CONFIG_MSF_DEMUXER 0
+#define CONFIG_MSNWC_TCP_DEMUXER 0
+#define CONFIG_MTAF_DEMUXER 0
+#define CONFIG_MTV_DEMUXER 0
+#define CONFIG_MUSX_DEMUXER 0
+#define CONFIG_MV_DEMUXER 0
+#define CONFIG_MVI_DEMUXER 0
+#define CONFIG_MXF_DEMUXER 0
+#define CONFIG_MXG_DEMUXER 0
+#define CONFIG_NC_DEMUXER 0
+#define CONFIG_NISTSPHERE_DEMUXER 0
+#define CONFIG_NSP_DEMUXER 0
+#define CONFIG_NSV_DEMUXER 0
+#define CONFIG_NUT_DEMUXER 0
+#define CONFIG_NUV_DEMUXER 0
+#define CONFIG_OGG_DEMUXER 1
+#define CONFIG_OMA_DEMUXER 0
+#define CONFIG_PAF_DEMUXER 0
+#define CONFIG_PCM_ALAW_DEMUXER 0
+#define CONFIG_PCM_MULAW_DEMUXER 0
+#define CONFIG_PCM_VIDC_DEMUXER 0
+#define CONFIG_PCM_F64BE_DEMUXER 0
+#define CONFIG_PCM_F64LE_DEMUXER 0
+#define CONFIG_PCM_F32BE_DEMUXER 0
+#define CONFIG_PCM_F32LE_DEMUXER 0
+#define CONFIG_PCM_S32BE_DEMUXER 0
+#define CONFIG_PCM_S32LE_DEMUXER 0
+#define CONFIG_PCM_S24BE_DEMUXER 0
+#define CONFIG_PCM_S24LE_DEMUXER 0
+#define CONFIG_PCM_S16BE_DEMUXER 0
+#define CONFIG_PCM_S16LE_DEMUXER 0
+#define CONFIG_PCM_S8_DEMUXER 0
+#define CONFIG_PCM_U32BE_DEMUXER 0
+#define CONFIG_PCM_U32LE_DEMUXER 0
+#define CONFIG_PCM_U24BE_DEMUXER 0
+#define CONFIG_PCM_U24LE_DEMUXER 0
+#define CONFIG_PCM_U16BE_DEMUXER 0
+#define CONFIG_PCM_U16LE_DEMUXER 0
+#define CONFIG_PCM_U8_DEMUXER 0
+#define CONFIG_PJS_DEMUXER 0
+#define CONFIG_PMP_DEMUXER 0
+#define CONFIG_PVA_DEMUXER 0
+#define CONFIG_PVF_DEMUXER 0
+#define CONFIG_QCP_DEMUXER 0
+#define CONFIG_R3D_DEMUXER 0
+#define CONFIG_RAWVIDEO_DEMUXER 0
+#define CONFIG_REALTEXT_DEMUXER 0
+#define CONFIG_REDSPARK_DEMUXER 0
+#define CONFIG_RL2_DEMUXER 0
+#define CONFIG_RM_DEMUXER 0
+#define CONFIG_ROQ_DEMUXER 0
+#define CONFIG_RPL_DEMUXER 0
+#define CONFIG_RSD_DEMUXER 0
+#define CONFIG_RSO_DEMUXER 0
+#define CONFIG_RTP_DEMUXER 0
+#define CONFIG_RTSP_DEMUXER 0
+#define CONFIG_S337M_DEMUXER 0
+#define CONFIG_SAMI_DEMUXER 0
+#define CONFIG_SAP_DEMUXER 0
+#define CONFIG_SBC_DEMUXER 0
+#define CONFIG_SBG_DEMUXER 0
+#define CONFIG_SCC_DEMUXER 0
+#define CONFIG_SDP_DEMUXER 0
+#define CONFIG_SDR2_DEMUXER 0
+#define CONFIG_SDS_DEMUXER 0
+#define CONFIG_SDX_DEMUXER 0
+#define CONFIG_SEGAFILM_DEMUXER 0
+#define CONFIG_SER_DEMUXER 0
+#define CONFIG_SHORTEN_DEMUXER 0
+#define CONFIG_SIFF_DEMUXER 0
+#define CONFIG_SLN_DEMUXER 0
+#define CONFIG_SMACKER_DEMUXER 0
+#define CONFIG_SMJPEG_DEMUXER 0
+#define CONFIG_SMUSH_DEMUXER 0
+#define CONFIG_SOL_DEMUXER 0
+#define CONFIG_SOX_DEMUXER 0
+#define CONFIG_SPDIF_DEMUXER 0
+#define CONFIG_SRT_DEMUXER 0
+#define CONFIG_STR_DEMUXER 0
+#define CONFIG_STL_DEMUXER 0
+#define CONFIG_SUBVIEWER1_DEMUXER 0
+#define CONFIG_SUBVIEWER_DEMUXER 0
+#define CONFIG_SUP_DEMUXER 0
+#define CONFIG_SVAG_DEMUXER 0
+#define CONFIG_SWF_DEMUXER 0
+#define CONFIG_TAK_DEMUXER 0
+#define CONFIG_TEDCAPTIONS_DEMUXER 0
+#define CONFIG_THP_DEMUXER 0
+#define CONFIG_THREEDOSTR_DEMUXER 0
+#define CONFIG_TIERTEXSEQ_DEMUXER 0
+#define CONFIG_TMV_DEMUXER 0
+#define CONFIG_TRUEHD_DEMUXER 0
+#define CONFIG_TTA_DEMUXER 0
+#define CONFIG_TXD_DEMUXER 0
+#define CONFIG_TTY_DEMUXER 0
+#define CONFIG_TY_DEMUXER 0
+#define CONFIG_V210_DEMUXER 0
+#define CONFIG_V210X_DEMUXER 0
+#define CONFIG_VAG_DEMUXER 0
+#define CONFIG_VC1_DEMUXER 0
+#define CONFIG_VC1T_DEMUXER 0
+#define CONFIG_VIVIDAS_DEMUXER 0
+#define CONFIG_VIVO_DEMUXER 0
+#define CONFIG_VMD_DEMUXER 0
+#define CONFIG_VOBSUB_DEMUXER 0
+#define CONFIG_VOC_DEMUXER 0
+#define CONFIG_VPK_DEMUXER 0
+#define CONFIG_VPLAYER_DEMUXER 0
+#define CONFIG_VQF_DEMUXER 0
+#define CONFIG_W64_DEMUXER 0
+#define CONFIG_WAV_DEMUXER 1
+#define CONFIG_WC3_DEMUXER 0
+#define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0
+#define CONFIG_WEBVTT_DEMUXER 0
+#define CONFIG_WSAUD_DEMUXER 0
+#define CONFIG_WSD_DEMUXER 0
+#define CONFIG_WSVQA_DEMUXER 0
+#define CONFIG_WTV_DEMUXER 0
+#define CONFIG_WVE_DEMUXER 0
+#define CONFIG_WV_DEMUXER 0
+#define CONFIG_XA_DEMUXER 0
+#define CONFIG_XBIN_DEMUXER 0
+#define CONFIG_XMV_DEMUXER 0
+#define CONFIG_XVAG_DEMUXER 0
+#define CONFIG_XWMA_DEMUXER 0
+#define CONFIG_YOP_DEMUXER 0
+#define CONFIG_YUV4MPEGPIPE_DEMUXER 0
+#define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_GIF_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PSD_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_SVG_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_XPM_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_XWD_PIPE_DEMUXER 0
+#define CONFIG_LIBGME_DEMUXER 0
+#define CONFIG_LIBMODPLUG_DEMUXER 0
+#define CONFIG_LIBOPENMPT_DEMUXER 0
+#define CONFIG_VAPOURSYNTH_DEMUXER 0
+#define CONFIG_A64_MUXER 0
+#define CONFIG_AC3_MUXER 0
+#define CONFIG_ADTS_MUXER 0
+#define CONFIG_ADX_MUXER 0
+#define CONFIG_AIFF_MUXER 0
+#define CONFIG_AMR_MUXER 0
+#define CONFIG_APNG_MUXER 0
+#define CONFIG_APTX_MUXER 0
+#define CONFIG_APTX_HD_MUXER 0
+#define CONFIG_ASF_MUXER 0
+#define CONFIG_ASS_MUXER 0
+#define CONFIG_AST_MUXER 0
+#define CONFIG_ASF_STREAM_MUXER 0
+#define CONFIG_AU_MUXER 0
+#define CONFIG_AVI_MUXER 0
+#define CONFIG_AVM2_MUXER 0
+#define CONFIG_AVS2_MUXER 0
+#define CONFIG_BIT_MUXER 0
+#define CONFIG_CAF_MUXER 0
+#define CONFIG_CAVSVIDEO_MUXER 0
+#define CONFIG_CODEC2_MUXER 0
+#define CONFIG_CODEC2RAW_MUXER 0
+#define CONFIG_CRC_MUXER 0
+#define CONFIG_DASH_MUXER 0
+#define CONFIG_DATA_MUXER 0
+#define CONFIG_DAUD_MUXER 0
+#define CONFIG_DIRAC_MUXER 0
+#define CONFIG_DNXHD_MUXER 0
+#define CONFIG_DTS_MUXER 0
+#define CONFIG_DV_MUXER 0
+#define CONFIG_EAC3_MUXER 0
+#define CONFIG_F4V_MUXER 0
+#define CONFIG_FFMETADATA_MUXER 0
+#define CONFIG_FIFO_MUXER 0
+#define CONFIG_FIFO_TEST_MUXER 0
+#define CONFIG_FILMSTRIP_MUXER 0
+#define CONFIG_FITS_MUXER 0
+#define CONFIG_FLAC_MUXER 0
+#define CONFIG_FLV_MUXER 0
+#define CONFIG_FRAMECRC_MUXER 0
+#define CONFIG_FRAMEHASH_MUXER 0
+#define CONFIG_FRAMEMD5_MUXER 0
+#define CONFIG_G722_MUXER 0
+#define CONFIG_G723_1_MUXER 0
+#define CONFIG_G726_MUXER 0
+#define CONFIG_G726LE_MUXER 0
+#define CONFIG_GIF_MUXER 0
+#define CONFIG_GSM_MUXER 0
+#define CONFIG_GXF_MUXER 0
+#define CONFIG_H261_MUXER 0
+#define CONFIG_H263_MUXER 0
+#define CONFIG_H264_MUXER 0
+#define CONFIG_HASH_MUXER 0
+#define CONFIG_HDS_MUXER 0
+#define CONFIG_HEVC_MUXER 0
+#define CONFIG_HLS_MUXER 0
+#define CONFIG_ICO_MUXER 0
+#define CONFIG_ILBC_MUXER 0
+#define CONFIG_IMAGE2_MUXER 0
+#define CONFIG_IMAGE2PIPE_MUXER 0
+#define CONFIG_IPOD_MUXER 0
+#define CONFIG_IRCAM_MUXER 0
+#define CONFIG_ISMV_MUXER 0
+#define CONFIG_IVF_MUXER 0
+#define CONFIG_JACOSUB_MUXER 0
+#define CONFIG_LATM_MUXER 0
+#define CONFIG_LRC_MUXER 0
+#define CONFIG_M4V_MUXER 0
+#define CONFIG_MD5_MUXER 0
+#define CONFIG_MATROSKA_MUXER 0
+#define CONFIG_MATROSKA_AUDIO_MUXER 0
+#define CONFIG_MICRODVD_MUXER 0
+#define CONFIG_MJPEG_MUXER 0
+#define CONFIG_MLP_MUXER 0
+#define CONFIG_MMF_MUXER 0
+#define CONFIG_MOV_MUXER 0
+#define CONFIG_MP2_MUXER 0
+#define CONFIG_MP3_MUXER 0
+#define CONFIG_MP4_MUXER 0
+#define CONFIG_MPEG1SYSTEM_MUXER 0
+#define CONFIG_MPEG1VCD_MUXER 0
+#define CONFIG_MPEG1VIDEO_MUXER 0
+#define CONFIG_MPEG2DVD_MUXER 0
+#define CONFIG_MPEG2SVCD_MUXER 0
+#define CONFIG_MPEG2VIDEO_MUXER 0
+#define CONFIG_MPEG2VOB_MUXER 0
+#define CONFIG_MPEGTS_MUXER 0
+#define CONFIG_MPJPEG_MUXER 0
+#define CONFIG_MXF_MUXER 0
+#define CONFIG_MXF_D10_MUXER 0
+#define CONFIG_MXF_OPATOM_MUXER 0
+#define CONFIG_NULL_MUXER 0
+#define CONFIG_NUT_MUXER 0
+#define CONFIG_OGA_MUXER 0
+#define CONFIG_OGG_MUXER 0
+#define CONFIG_OGV_MUXER 0
+#define CONFIG_OMA_MUXER 0
+#define CONFIG_OPUS_MUXER 0
+#define CONFIG_PCM_ALAW_MUXER 0
+#define CONFIG_PCM_MULAW_MUXER 0
+#define CONFIG_PCM_VIDC_MUXER 0
+#define CONFIG_PCM_F64BE_MUXER 0
+#define CONFIG_PCM_F64LE_MUXER 0
+#define CONFIG_PCM_F32BE_MUXER 0
+#define CONFIG_PCM_F32LE_MUXER 0
+#define CONFIG_PCM_S32BE_MUXER 0
+#define CONFIG_PCM_S32LE_MUXER 0
+#define CONFIG_PCM_S24BE_MUXER 0
+#define CONFIG_PCM_S24LE_MUXER 0
+#define CONFIG_PCM_S16BE_MUXER 0
+#define CONFIG_PCM_S16LE_MUXER 0
+#define CONFIG_PCM_S8_MUXER 0
+#define CONFIG_PCM_U32BE_MUXER 0
+#define CONFIG_PCM_U32LE_MUXER 0
+#define CONFIG_PCM_U24BE_MUXER 0
+#define CONFIG_PCM_U24LE_MUXER 0
+#define CONFIG_PCM_U16BE_MUXER 0
+#define CONFIG_PCM_U16LE_MUXER 0
+#define CONFIG_PCM_U8_MUXER 0
+#define CONFIG_PSP_MUXER 0
+#define CONFIG_RAWVIDEO_MUXER 0
+#define CONFIG_RM_MUXER 0
+#define CONFIG_ROQ_MUXER 0
+#define CONFIG_RSO_MUXER 0
+#define CONFIG_RTP_MUXER 0
+#define CONFIG_RTP_MPEGTS_MUXER 0
+#define CONFIG_RTSP_MUXER 0
+#define CONFIG_SAP_MUXER 0
+#define CONFIG_SBC_MUXER 0
+#define CONFIG_SCC_MUXER 0
+#define CONFIG_SEGAFILM_MUXER 0
+#define CONFIG_SEGMENT_MUXER 0
+#define CONFIG_STREAM_SEGMENT_MUXER 0
+#define CONFIG_SINGLEJPEG_MUXER 0
+#define CONFIG_SMJPEG_MUXER 0
+#define CONFIG_SMOOTHSTREAMING_MUXER 0
+#define CONFIG_SOX_MUXER 0
+#define CONFIG_SPX_MUXER 0
+#define CONFIG_SPDIF_MUXER 0
+#define CONFIG_SRT_MUXER 0
+#define CONFIG_STREAMHASH_MUXER 0
+#define CONFIG_SUP_MUXER 0
+#define CONFIG_SWF_MUXER 0
+#define CONFIG_TEE_MUXER 0
+#define CONFIG_TG2_MUXER 0
+#define CONFIG_TGP_MUXER 0
+#define CONFIG_MKVTIMESTAMP_V2_MUXER 0
+#define CONFIG_TRUEHD_MUXER 0
+#define CONFIG_TTA_MUXER 0
+#define CONFIG_UNCODEDFRAMECRC_MUXER 0
+#define CONFIG_VC1_MUXER 0
+#define CONFIG_VC1T_MUXER 0
+#define CONFIG_VOC_MUXER 0
+#define CONFIG_W64_MUXER 0
+#define CONFIG_WAV_MUXER 0
+#define CONFIG_WEBM_MUXER 0
+#define CONFIG_WEBM_DASH_MANIFEST_MUXER 0
+#define CONFIG_WEBM_CHUNK_MUXER 0
+#define CONFIG_WEBP_MUXER 0
+#define CONFIG_WEBVTT_MUXER 0
+#define CONFIG_WTV_MUXER 0
+#define CONFIG_WV_MUXER 0
+#define CONFIG_YUV4MPEGPIPE_MUXER 0
+#define CONFIG_CHROMAPRINT_MUXER 0
+#define CONFIG_ASYNC_PROTOCOL 0
+#define CONFIG_BLURAY_PROTOCOL 0
+#define CONFIG_CACHE_PROTOCOL 0
+#define CONFIG_CONCAT_PROTOCOL 0
+#define CONFIG_CRYPTO_PROTOCOL 0
+#define CONFIG_DATA_PROTOCOL 0
+#define CONFIG_FFRTMPCRYPT_PROTOCOL 0
+#define CONFIG_FFRTMPHTTP_PROTOCOL 0
+#define CONFIG_FILE_PROTOCOL 0
+#define CONFIG_FTP_PROTOCOL 0
+#define CONFIG_GOPHER_PROTOCOL 0
+#define CONFIG_HLS_PROTOCOL 0
+#define CONFIG_HTTP_PROTOCOL 0
+#define CONFIG_HTTPPROXY_PROTOCOL 0
+#define CONFIG_HTTPS_PROTOCOL 0
+#define CONFIG_ICECAST_PROTOCOL 0
+#define CONFIG_MMSH_PROTOCOL 0
+#define CONFIG_MMST_PROTOCOL 0
+#define CONFIG_MD5_PROTOCOL 0
+#define CONFIG_PIPE_PROTOCOL 0
+#define CONFIG_PROMPEG_PROTOCOL 0
+#define CONFIG_RTMP_PROTOCOL 0
+#define CONFIG_RTMPE_PROTOCOL 0
+#define CONFIG_RTMPS_PROTOCOL 0
+#define CONFIG_RTMPT_PROTOCOL 0
+#define CONFIG_RTMPTE_PROTOCOL 0
+#define CONFIG_RTMPTS_PROTOCOL 0
+#define CONFIG_RTP_PROTOCOL 0
+#define CONFIG_SCTP_PROTOCOL 0
+#define CONFIG_SRTP_PROTOCOL 0
+#define CONFIG_SUBFILE_PROTOCOL 0
+#define CONFIG_TEE_PROTOCOL 0
+#define CONFIG_TCP_PROTOCOL 0
+#define CONFIG_TLS_PROTOCOL 0
+#define CONFIG_UDP_PROTOCOL 0
+#define CONFIG_UDPLITE_PROTOCOL 0
+#define CONFIG_UNIX_PROTOCOL 0
+#define CONFIG_LIBAMQP_PROTOCOL 0
+#define CONFIG_LIBRTMP_PROTOCOL 0
+#define CONFIG_LIBRTMPE_PROTOCOL 0
+#define CONFIG_LIBRTMPS_PROTOCOL 0
+#define CONFIG_LIBRTMPT_PROTOCOL 0
+#define CONFIG_LIBRTMPTE_PROTOCOL 0
+#define CONFIG_LIBSRT_PROTOCOL 0
+#define CONFIG_LIBSSH_PROTOCOL 0
+#define CONFIG_LIBSMBCLIENT_PROTOCOL 0
+#define CONFIG_LIBZMQ_PROTOCOL 0
+#endif /* FFMPEG_CONFIG_H */
diff --git a/fuchsia/config/default/arm64/libavcodec/bsf_list.c b/fuchsia/config/default/arm64/libavcodec/bsf_list.c
new file mode 100644
index 0000000..d31ece9
--- /dev/null
+++ b/fuchsia/config/default/arm64/libavcodec/bsf_list.c
@@ -0,0 +1,3 @@
+static const AVBitStreamFilter * const bitstream_filters[] = {
+    &ff_null_bsf,
+    NULL };
diff --git a/fuchsia/config/default/arm64/libavcodec/codec_list.c b/fuchsia/config/default/arm64/libavcodec/codec_list.c
new file mode 100644
index 0000000..6c53695
--- /dev/null
+++ b/fuchsia/config/default/arm64/libavcodec/codec_list.c
@@ -0,0 +1,20 @@
+static const AVCodec * const codec_list[] = {
+    &ff_theora_decoder,
+    &ff_vp3_decoder,
+    &ff_vp8_decoder,
+    &ff_aptx_decoder,
+    &ff_flac_decoder,
+    &ff_mp3_decoder,
+    &ff_sbc_decoder,
+    &ff_vorbis_decoder,
+    &ff_pcm_alaw_decoder,
+    &ff_pcm_f32le_decoder,
+    &ff_pcm_mulaw_decoder,
+    &ff_pcm_s16be_decoder,
+    &ff_pcm_s16le_decoder,
+    &ff_pcm_s24be_decoder,
+    &ff_pcm_s24le_decoder,
+    &ff_pcm_s32le_decoder,
+    &ff_pcm_u8_decoder,
+    &ff_libopus_decoder,
+    NULL };
diff --git a/fuchsia/config/default/arm64/libavcodec/parser_list.c b/fuchsia/config/default/arm64/libavcodec/parser_list.c
new file mode 100644
index 0000000..4c59b89
--- /dev/null
+++ b/fuchsia/config/default/arm64/libavcodec/parser_list.c
@@ -0,0 +1,8 @@
+static const AVCodecParser * const parser_list[] = {
+    &ff_flac_parser,
+    &ff_mpegaudio_parser,
+    &ff_opus_parser,
+    &ff_vorbis_parser,
+    &ff_vp3_parser,
+    &ff_vp8_parser,
+    NULL };
diff --git a/fuchsia/config/default/arm64/libavformat/demuxer_list.c b/fuchsia/config/default/arm64/libavformat/demuxer_list.c
new file mode 100644
index 0000000..1908ba1
--- /dev/null
+++ b/fuchsia/config/default/arm64/libavformat/demuxer_list.c
@@ -0,0 +1,8 @@
+static const AVInputFormat * const demuxer_list[] = {
+    &ff_flac_demuxer,
+    &ff_matroska_demuxer,
+    &ff_mov_demuxer,
+    &ff_mp3_demuxer,
+    &ff_ogg_demuxer,
+    &ff_wav_demuxer,
+    NULL };
diff --git a/fuchsia/config/default/arm64/libavformat/muxer_list.c b/fuchsia/config/default/arm64/libavformat/muxer_list.c
new file mode 100644
index 0000000..f36d949
--- /dev/null
+++ b/fuchsia/config/default/arm64/libavformat/muxer_list.c
@@ -0,0 +1,2 @@
+static const AVOutputFormat * const muxer_list[] = {
+    NULL };
diff --git a/fuchsia/config/default/arm64/libavformat/protocol_list.c b/fuchsia/config/default/arm64/libavformat/protocol_list.c
new file mode 100644
index 0000000..247e1e4
--- /dev/null
+++ b/fuchsia/config/default/arm64/libavformat/protocol_list.c
@@ -0,0 +1,2 @@
+static const URLProtocol * const url_protocols[] = {
+    NULL };
diff --git a/fuchsia/config/default/arm64/libavutil/avconfig.h b/fuchsia/config/default/arm64/libavutil/avconfig.h
new file mode 100644
index 0000000..c289fbb
--- /dev/null
+++ b/fuchsia/config/default/arm64/libavutil/avconfig.h
@@ -0,0 +1,6 @@
+/* Generated by ffmpeg configure */
+#ifndef AVUTIL_AVCONFIG_H
+#define AVUTIL_AVCONFIG_H
+#define AV_HAVE_BIGENDIAN 0
+#define AV_HAVE_FAST_UNALIGNED 1
+#endif /* AVUTIL_AVCONFIG_H */
diff --git a/fuchsia/config/default/arm64/libavutil/ffversion.h b/fuchsia/config/default/arm64/libavutil/ffversion.h
new file mode 100644
index 0000000..fc76199
--- /dev/null
+++ b/fuchsia/config/default/arm64/libavutil/ffversion.h
@@ -0,0 +1,5 @@
+/* Automatically generated by version.sh, do not manually edit! */
+#ifndef AVUTIL_FFVERSION_H
+#define AVUTIL_FFVERSION_H
+#define FFMPEG_VERSION "N-97662-gaaac2c26d9"
+#endif /* AVUTIL_FFVERSION_H */
diff --git a/fuchsia/config/default/x64/config.asm b/fuchsia/config/default/x64/config.asm
new file mode 100644
index 0000000..46239d0
--- /dev/null
+++ b/fuchsia/config/default/x64/config.asm
@@ -0,0 +1,2572 @@
+; Automatically generated by configure - do not modify!
+%define ARCH_AARCH64 0
+%define ARCH_ALPHA 0
+%define ARCH_ARM 0
+%define ARCH_AVR32 0
+%define ARCH_AVR32_AP 0
+%define ARCH_AVR32_UC 0
+%define ARCH_BFIN 0
+%define ARCH_IA64 0
+%define ARCH_M68K 0
+%define ARCH_MIPS 0
+%define ARCH_MIPS64 0
+%define ARCH_PARISC 0
+%define ARCH_PPC 0
+%define ARCH_PPC64 0
+%define ARCH_S390 0
+%define ARCH_SH4 0
+%define ARCH_SPARC 0
+%define ARCH_SPARC64 0
+%define ARCH_TILEGX 0
+%define ARCH_TILEPRO 0
+%define ARCH_TOMI 0
+%define ARCH_X86 1
+%define ARCH_X86_32 0
+%define ARCH_X86_64 1
+%define HAVE_ARMV5TE 0
+%define HAVE_ARMV6 0
+%define HAVE_ARMV6T2 0
+%define HAVE_ARMV8 0
+%define HAVE_NEON 0
+%define HAVE_VFP 0
+%define HAVE_VFPV3 0
+%define HAVE_SETEND 0
+%define HAVE_ALTIVEC 0
+%define HAVE_DCBZL 0
+%define HAVE_LDBRX 0
+%define HAVE_POWER8 0
+%define HAVE_PPC4XX 0
+%define HAVE_VSX 0
+%define HAVE_AESNI 1
+%define HAVE_AMD3DNOW 1
+%define HAVE_AMD3DNOWEXT 1
+%define HAVE_AVX 1
+%define HAVE_AVX2 1
+%define HAVE_AVX512 1
+%define HAVE_FMA3 1
+%define HAVE_FMA4 1
+%define HAVE_MMX 1
+%define HAVE_MMXEXT 1
+%define HAVE_SSE 1
+%define HAVE_SSE2 1
+%define HAVE_SSE3 1
+%define HAVE_SSE4 1
+%define HAVE_SSE42 1
+%define HAVE_SSSE3 1
+%define HAVE_XOP 1
+%define HAVE_CPUNOP 1
+%define HAVE_I686 1
+%define HAVE_MIPSFPU 0
+%define HAVE_MIPS32R2 0
+%define HAVE_MIPS32R5 0
+%define HAVE_MIPS64R2 0
+%define HAVE_MIPS32R6 0
+%define HAVE_MIPS64R6 0
+%define HAVE_MIPSDSP 0
+%define HAVE_MIPSDSPR2 0
+%define HAVE_MSA 0
+%define HAVE_MSA2 0
+%define HAVE_LOONGSON2 0
+%define HAVE_LOONGSON3 0
+%define HAVE_MMI 0
+%define HAVE_ARMV5TE_EXTERNAL 0
+%define HAVE_ARMV6_EXTERNAL 0
+%define HAVE_ARMV6T2_EXTERNAL 0
+%define HAVE_ARMV8_EXTERNAL 0
+%define HAVE_NEON_EXTERNAL 0
+%define HAVE_VFP_EXTERNAL 0
+%define HAVE_VFPV3_EXTERNAL 0
+%define HAVE_SETEND_EXTERNAL 0
+%define HAVE_ALTIVEC_EXTERNAL 0
+%define HAVE_DCBZL_EXTERNAL 0
+%define HAVE_LDBRX_EXTERNAL 0
+%define HAVE_POWER8_EXTERNAL 0
+%define HAVE_PPC4XX_EXTERNAL 0
+%define HAVE_VSX_EXTERNAL 0
+%define HAVE_AESNI_EXTERNAL 1
+%define HAVE_AMD3DNOW_EXTERNAL 1
+%define HAVE_AMD3DNOWEXT_EXTERNAL 1
+%define HAVE_AVX_EXTERNAL 1
+%define HAVE_AVX2_EXTERNAL 1
+%define HAVE_AVX512_EXTERNAL 0
+%define HAVE_FMA3_EXTERNAL 1
+%define HAVE_FMA4_EXTERNAL 1
+%define HAVE_MMX_EXTERNAL 1
+%define HAVE_MMXEXT_EXTERNAL 1
+%define HAVE_SSE_EXTERNAL 1
+%define HAVE_SSE2_EXTERNAL 1
+%define HAVE_SSE3_EXTERNAL 1
+%define HAVE_SSE4_EXTERNAL 1
+%define HAVE_SSE42_EXTERNAL 1
+%define HAVE_SSSE3_EXTERNAL 1
+%define HAVE_XOP_EXTERNAL 1
+%define HAVE_CPUNOP_EXTERNAL 0
+%define HAVE_I686_EXTERNAL 0
+%define HAVE_MIPSFPU_EXTERNAL 0
+%define HAVE_MIPS32R2_EXTERNAL 0
+%define HAVE_MIPS32R5_EXTERNAL 0
+%define HAVE_MIPS64R2_EXTERNAL 0
+%define HAVE_MIPS32R6_EXTERNAL 0
+%define HAVE_MIPS64R6_EXTERNAL 0
+%define HAVE_MIPSDSP_EXTERNAL 0
+%define HAVE_MIPSDSPR2_EXTERNAL 0
+%define HAVE_MSA_EXTERNAL 0
+%define HAVE_MSA2_EXTERNAL 0
+%define HAVE_LOONGSON2_EXTERNAL 0
+%define HAVE_LOONGSON3_EXTERNAL 0
+%define HAVE_MMI_EXTERNAL 0
+%define HAVE_ARMV5TE_INLINE 0
+%define HAVE_ARMV6_INLINE 0
+%define HAVE_ARMV6T2_INLINE 0
+%define HAVE_ARMV8_INLINE 0
+%define HAVE_NEON_INLINE 0
+%define HAVE_VFP_INLINE 0
+%define HAVE_VFPV3_INLINE 0
+%define HAVE_SETEND_INLINE 0
+%define HAVE_ALTIVEC_INLINE 0
+%define HAVE_DCBZL_INLINE 0
+%define HAVE_LDBRX_INLINE 0
+%define HAVE_POWER8_INLINE 0
+%define HAVE_PPC4XX_INLINE 0
+%define HAVE_VSX_INLINE 0
+%define HAVE_AESNI_INLINE 1
+%define HAVE_AMD3DNOW_INLINE 1
+%define HAVE_AMD3DNOWEXT_INLINE 1
+%define HAVE_AVX_INLINE 1
+%define HAVE_AVX2_INLINE 1
+%define HAVE_AVX512_INLINE 1
+%define HAVE_FMA3_INLINE 1
+%define HAVE_FMA4_INLINE 1
+%define HAVE_MMX_INLINE 1
+%define HAVE_MMXEXT_INLINE 1
+%define HAVE_SSE_INLINE 1
+%define HAVE_SSE2_INLINE 1
+%define HAVE_SSE3_INLINE 1
+%define HAVE_SSE4_INLINE 1
+%define HAVE_SSE42_INLINE 1
+%define HAVE_SSSE3_INLINE 1
+%define HAVE_XOP_INLINE 1
+%define HAVE_CPUNOP_INLINE 0
+%define HAVE_I686_INLINE 0
+%define HAVE_MIPSFPU_INLINE 0
+%define HAVE_MIPS32R2_INLINE 0
+%define HAVE_MIPS32R5_INLINE 0
+%define HAVE_MIPS64R2_INLINE 0
+%define HAVE_MIPS32R6_INLINE 0
+%define HAVE_MIPS64R6_INLINE 0
+%define HAVE_MIPSDSP_INLINE 0
+%define HAVE_MIPSDSPR2_INLINE 0
+%define HAVE_MSA_INLINE 0
+%define HAVE_MSA2_INLINE 0
+%define HAVE_LOONGSON2_INLINE 0
+%define HAVE_LOONGSON3_INLINE 0
+%define HAVE_MMI_INLINE 0
+%define HAVE_ALIGNED_STACK 1
+%define HAVE_FAST_64BIT 1
+%define HAVE_FAST_CLZ 1
+%define HAVE_FAST_CMOV 1
+%define HAVE_LOCAL_ALIGNED 1
+%define HAVE_SIMD_ALIGN_16 1
+%define HAVE_SIMD_ALIGN_32 1
+%define HAVE_SIMD_ALIGN_64 1
+%define HAVE_ATOMIC_CAS_PTR 0
+%define HAVE_MACHINE_RW_BARRIER 0
+%define HAVE_MEMORYBARRIER 0
+%define HAVE_MM_EMPTY 1
+%define HAVE_RDTSC 0
+%define HAVE_SEM_TIMEDWAIT 1
+%define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1
+%define HAVE_CABS 0
+%define HAVE_CEXP 0
+%define HAVE_INLINE_ASM 1
+%define HAVE_SYMVER 0
+%define HAVE_X86ASM 1
+%define HAVE_BIGENDIAN 0
+%define HAVE_FAST_UNALIGNED 1
+%define HAVE_ARPA_INET_H 0
+%define HAVE_ASM_TYPES_H 1
+%define HAVE_CDIO_PARANOIA_H 0
+%define HAVE_CDIO_PARANOIA_PARANOIA_H 0
+%define HAVE_CUDA_H 0
+%define HAVE_DISPATCH_DISPATCH_H 0
+%define HAVE_DEV_BKTR_IOCTL_BT848_H 0
+%define HAVE_DEV_BKTR_IOCTL_METEOR_H 0
+%define HAVE_DEV_IC_BT8XX_H 0
+%define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0
+%define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0
+%define HAVE_DIRECT_H 0
+%define HAVE_DIRENT_H 1
+%define HAVE_DXGIDEBUG_H 0
+%define HAVE_DXVA_H 0
+%define HAVE_ES2_GL_H 0
+%define HAVE_GSM_H 0
+%define HAVE_IO_H 0
+%define HAVE_LINUX_PERF_EVENT_H 1
+%define HAVE_MACHINE_IOCTL_BT848_H 0
+%define HAVE_MACHINE_IOCTL_METEOR_H 0
+%define HAVE_MALLOC_H 1
+%define HAVE_OPENCV2_CORE_CORE_C_H 0
+%define HAVE_OPENGL_GL3_H 0
+%define HAVE_POLL_H 1
+%define HAVE_SYS_PARAM_H 1
+%define HAVE_SYS_RESOURCE_H 1
+%define HAVE_SYS_SELECT_H 1
+%define HAVE_SYS_SOUNDCARD_H 1
+%define HAVE_SYS_TIME_H 1
+%define HAVE_SYS_UN_H 1
+%define HAVE_SYS_VIDEOIO_H 0
+%define HAVE_TERMIOS_H 1
+%define HAVE_UDPLITE_H 0
+%define HAVE_UNISTD_H 1
+%define HAVE_VALGRIND_VALGRIND_H 0
+%define HAVE_WINDOWS_H 0
+%define HAVE_WINSOCK2_H 0
+%define HAVE_INTRINSICS_NEON 0
+%define HAVE_ATANF 1
+%define HAVE_ATAN2F 1
+%define HAVE_CBRT 1
+%define HAVE_CBRTF 1
+%define HAVE_COPYSIGN 1
+%define HAVE_COSF 1
+%define HAVE_ERF 1
+%define HAVE_EXP2 1
+%define HAVE_EXP2F 1
+%define HAVE_EXPF 1
+%define HAVE_HYPOT 1
+%define HAVE_ISFINITE 1
+%define HAVE_ISINF 1
+%define HAVE_ISNAN 1
+%define HAVE_LDEXPF 1
+%define HAVE_LLRINT 1
+%define HAVE_LLRINTF 1
+%define HAVE_LOG2 1
+%define HAVE_LOG2F 1
+%define HAVE_LOG10F 1
+%define HAVE_LRINT 1
+%define HAVE_LRINTF 1
+%define HAVE_POWF 1
+%define HAVE_RINT 1
+%define HAVE_ROUND 1
+%define HAVE_ROUNDF 1
+%define HAVE_SINF 1
+%define HAVE_TRUNC 1
+%define HAVE_TRUNCF 1
+%define HAVE_DOS_PATHS 0
+%define HAVE_LIBC_MSVCRT 0
+%define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0
+%define HAVE_SECTION_DATA_REL_RO 1
+%define HAVE_THREADS 1
+%define HAVE_UWP 0
+%define HAVE_WINRT 0
+%define HAVE_ACCESS 1
+%define HAVE_ALIGNED_MALLOC 0
+%define HAVE_ARC4RANDOM 0
+%define HAVE_CLOCK_GETTIME 1
+%define HAVE_CLOSESOCKET 0
+%define HAVE_COMMANDLINETOARGVW 0
+%define HAVE_FCNTL 1
+%define HAVE_GETADDRINFO 0
+%define HAVE_GETHRTIME 0
+%define HAVE_GETOPT 1
+%define HAVE_GETMODULEHANDLE 0
+%define HAVE_GETPROCESSAFFINITYMASK 0
+%define HAVE_GETPROCESSMEMORYINFO 0
+%define HAVE_GETPROCESSTIMES 0
+%define HAVE_GETRUSAGE 1
+%define HAVE_GETSTDHANDLE 0
+%define HAVE_GETSYSTEMTIMEASFILETIME 0
+%define HAVE_GETTIMEOFDAY 1
+%define HAVE_GLOB 1
+%define HAVE_GLXGETPROCADDRESS 0
+%define HAVE_GMTIME_R 1
+%define HAVE_INET_ATON 0
+%define HAVE_ISATTY 1
+%define HAVE_KBHIT 0
+%define HAVE_LOCALTIME_R 1
+%define HAVE_LSTAT 1
+%define HAVE_LZO1X_999_COMPRESS 0
+%define HAVE_MACH_ABSOLUTE_TIME 0
+%define HAVE_MAPVIEWOFFILE 0
+%define HAVE_MEMALIGN 1
+%define HAVE_MKSTEMP 1
+%define HAVE_MMAP 1
+%define HAVE_MPROTECT 1
+%define HAVE_NANOSLEEP 1
+%define HAVE_PEEKNAMEDPIPE 0
+%define HAVE_POSIX_MEMALIGN 1
+%define HAVE_PTHREAD_CANCEL 1
+%define HAVE_SCHED_GETAFFINITY 1
+%define HAVE_SECITEMIMPORT 0
+%define HAVE_SETCONSOLETEXTATTRIBUTE 0
+%define HAVE_SETCONSOLECTRLHANDLER 0
+%define HAVE_SETDLLDIRECTORY 0
+%define HAVE_SETMODE 0
+%define HAVE_SETRLIMIT 1
+%define HAVE_SLEEP 0
+%define HAVE_STRERROR_R 1
+%define HAVE_SYSCONF 1
+%define HAVE_SYSCTL 1
+%define HAVE_USLEEP 1
+%define HAVE_UTGETOSTYPEFROMSTRING 0
+%define HAVE_VIRTUALALLOC 0
+%define HAVE_WGLGETPROCADDRESS 0
+%define HAVE_BCRYPT 0
+%define HAVE_VAAPI_DRM 0
+%define HAVE_VAAPI_X11 0
+%define HAVE_VDPAU_X11 0
+%define HAVE_PTHREADS 1
+%define HAVE_OS2THREADS 0
+%define HAVE_W32THREADS 0
+%define HAVE_AS_ARCH_DIRECTIVE 0
+%define HAVE_AS_DN_DIRECTIVE 0
+%define HAVE_AS_FPU_DIRECTIVE 0
+%define HAVE_AS_FUNC 0
+%define HAVE_AS_OBJECT_ARCH 0
+%define HAVE_ASM_MOD_Q 0
+%define HAVE_BLOCKS_EXTENSION 0
+%define HAVE_EBP_AVAILABLE 1
+%define HAVE_EBX_AVAILABLE 1
+%define HAVE_GNU_AS 0
+%define HAVE_GNU_WINDRES 0
+%define HAVE_IBM_ASM 0
+%define HAVE_INLINE_ASM_DIRECT_SYMBOL_REFS 0
+%define HAVE_INLINE_ASM_LABELS 1
+%define HAVE_INLINE_ASM_NONLOCAL_LABELS 1
+%define HAVE_PRAGMA_DEPRECATED 1
+%define HAVE_RSYNC_CONTIMEOUT 1
+%define HAVE_SYMVER_ASM_LABEL 1
+%define HAVE_SYMVER_GNU_ASM 1
+%define HAVE_VFP_ARGS 0
+%define HAVE_XFORM_ASM 0
+%define HAVE_XMM_CLOBBERS 1
+%define HAVE_KCMVIDEOCODECTYPE_HEVC 0
+%define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0
+%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0
+%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0
+%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0
+%define HAVE_SOCKLEN_T 0
+%define HAVE_STRUCT_ADDRINFO 0
+%define HAVE_STRUCT_GROUP_SOURCE_REQ 0
+%define HAVE_STRUCT_IP_MREQ_SOURCE 0
+%define HAVE_STRUCT_IPV6_MREQ 0
+%define HAVE_STRUCT_MSGHDR_MSG_FLAGS 0
+%define HAVE_STRUCT_POLLFD 0
+%define HAVE_STRUCT_RUSAGE_RU_MAXRSS 1
+%define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0
+%define HAVE_STRUCT_SOCKADDR_IN6 0
+%define HAVE_STRUCT_SOCKADDR_SA_LEN 0
+%define HAVE_STRUCT_SOCKADDR_STORAGE 0
+%define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1
+%define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0
+%define HAVE_MAKEINFO 0
+%define HAVE_MAKEINFO_HTML 0
+%define HAVE_OPENCL_D3D11 0
+%define HAVE_OPENCL_DRM_ARM 0
+%define HAVE_OPENCL_DRM_BEIGNET 0
+%define HAVE_OPENCL_DXVA2 0
+%define HAVE_OPENCL_VAAPI_BEIGNET 0
+%define HAVE_OPENCL_VAAPI_INTEL_MEDIA 0
+%define HAVE_PERL 1
+%define HAVE_POD2MAN 1
+%define HAVE_TEXI2HTML 0
+%define CONFIG_DOC 0
+%define CONFIG_HTMLPAGES 0
+%define CONFIG_MANPAGES 0
+%define CONFIG_PODPAGES 0
+%define CONFIG_TXTPAGES 0
+%define CONFIG_AVIO_LIST_DIR_EXAMPLE 1
+%define CONFIG_AVIO_READING_EXAMPLE 1
+%define CONFIG_DECODE_AUDIO_EXAMPLE 1
+%define CONFIG_DECODE_VIDEO_EXAMPLE 1
+%define CONFIG_DEMUXING_DECODING_EXAMPLE 1
+%define CONFIG_ENCODE_AUDIO_EXAMPLE 1
+%define CONFIG_ENCODE_VIDEO_EXAMPLE 1
+%define CONFIG_EXTRACT_MVS_EXAMPLE 1
+%define CONFIG_FILTER_AUDIO_EXAMPLE 0
+%define CONFIG_FILTERING_AUDIO_EXAMPLE 0
+%define CONFIG_FILTERING_VIDEO_EXAMPLE 0
+%define CONFIG_HTTP_MULTICLIENT_EXAMPLE 1
+%define CONFIG_HW_DECODE_EXAMPLE 1
+%define CONFIG_METADATA_EXAMPLE 1
+%define CONFIG_MUXING_EXAMPLE 0
+%define CONFIG_QSVDEC_EXAMPLE 0
+%define CONFIG_REMUXING_EXAMPLE 1
+%define CONFIG_RESAMPLING_AUDIO_EXAMPLE 0
+%define CONFIG_SCALING_VIDEO_EXAMPLE 0
+%define CONFIG_TRANSCODE_AAC_EXAMPLE 0
+%define CONFIG_TRANSCODING_EXAMPLE 0
+%define CONFIG_VAAPI_ENCODE_EXAMPLE 0
+%define CONFIG_VAAPI_TRANSCODE_EXAMPLE 0
+%define CONFIG_AVISYNTH 0
+%define CONFIG_FREI0R 0
+%define CONFIG_LIBCDIO 0
+%define CONFIG_LIBDAVS2 0
+%define CONFIG_LIBRUBBERBAND 0
+%define CONFIG_LIBVIDSTAB 0
+%define CONFIG_LIBX264 0
+%define CONFIG_LIBX265 0
+%define CONFIG_LIBXAVS 0
+%define CONFIG_LIBXAVS2 0
+%define CONFIG_LIBXVID 0
+%define CONFIG_DECKLINK 0
+%define CONFIG_LIBFDK_AAC 0
+%define CONFIG_OPENSSL 0
+%define CONFIG_LIBTLS 0
+%define CONFIG_GMP 0
+%define CONFIG_LIBARIBB24 0
+%define CONFIG_LIBLENSFUN 0
+%define CONFIG_LIBOPENCORE_AMRNB 0
+%define CONFIG_LIBOPENCORE_AMRWB 0
+%define CONFIG_LIBVMAF 0
+%define CONFIG_LIBVO_AMRWBENC 0
+%define CONFIG_MBEDTLS 0
+%define CONFIG_RKMPP 0
+%define CONFIG_LIBSMBCLIENT 0
+%define CONFIG_CHROMAPRINT 0
+%define CONFIG_GCRYPT 0
+%define CONFIG_GNUTLS 0
+%define CONFIG_JNI 0
+%define CONFIG_LADSPA 0
+%define CONFIG_LIBAOM 0
+%define CONFIG_LIBASS 0
+%define CONFIG_LIBBLURAY 0
+%define CONFIG_LIBBS2B 0
+%define CONFIG_LIBCACA 0
+%define CONFIG_LIBCELT 0
+%define CONFIG_LIBCODEC2 0
+%define CONFIG_LIBDAV1D 0
+%define CONFIG_LIBDC1394 0
+%define CONFIG_LIBDRM 0
+%define CONFIG_LIBFLITE 0
+%define CONFIG_LIBFONTCONFIG 0
+%define CONFIG_LIBFREETYPE 0
+%define CONFIG_LIBFRIBIDI 0
+%define CONFIG_LIBGLSLANG 0
+%define CONFIG_LIBGME 0
+%define CONFIG_LIBGSM 0
+%define CONFIG_LIBIEC61883 0
+%define CONFIG_LIBILBC 0
+%define CONFIG_LIBJACK 0
+%define CONFIG_LIBKLVANC 0
+%define CONFIG_LIBKVAZAAR 0
+%define CONFIG_LIBMODPLUG 0
+%define CONFIG_LIBMP3LAME 0
+%define CONFIG_LIBMYSOFA 0
+%define CONFIG_LIBOPENCV 0
+%define CONFIG_LIBOPENH264 0
+%define CONFIG_LIBOPENJPEG 0
+%define CONFIG_LIBOPENMPT 0
+%define CONFIG_LIBOPUS 1
+%define CONFIG_LIBPULSE 0
+%define CONFIG_LIBRABBITMQ 0
+%define CONFIG_LIBRAV1E 0
+%define CONFIG_LIBRSVG 0
+%define CONFIG_LIBRTMP 0
+%define CONFIG_LIBSHINE 0
+%define CONFIG_LIBSMBCLIENT 0
+%define CONFIG_LIBSNAPPY 0
+%define CONFIG_LIBSOXR 0
+%define CONFIG_LIBSPEEX 0
+%define CONFIG_LIBSRT 0
+%define CONFIG_LIBSSH 0
+%define CONFIG_LIBTENSORFLOW 0
+%define CONFIG_LIBTESSERACT 0
+%define CONFIG_LIBTHEORA 0
+%define CONFIG_LIBTWOLAME 0
+%define CONFIG_LIBV4L2 0
+%define CONFIG_LIBVORBIS 0
+%define CONFIG_LIBVPX 0
+%define CONFIG_LIBWAVPACK 0
+%define CONFIG_LIBWEBP 0
+%define CONFIG_LIBXML2 0
+%define CONFIG_LIBZIMG 0
+%define CONFIG_LIBZMQ 0
+%define CONFIG_LIBZVBI 0
+%define CONFIG_LV2 0
+%define CONFIG_MEDIACODEC 0
+%define CONFIG_OPENAL 0
+%define CONFIG_OPENGL 0
+%define CONFIG_POCKETSPHINX 0
+%define CONFIG_VAPOURSYNTH 0
+%define CONFIG_ALSA 0
+%define CONFIG_APPKIT 0
+%define CONFIG_AVFOUNDATION 0
+%define CONFIG_BZLIB 0
+%define CONFIG_COREIMAGE 0
+%define CONFIG_ICONV 0
+%define CONFIG_LIBXCB 0
+%define CONFIG_LIBXCB_SHM 0
+%define CONFIG_LIBXCB_SHAPE 0
+%define CONFIG_LIBXCB_XFIXES 0
+%define CONFIG_LZMA 0
+%define CONFIG_SCHANNEL 0
+%define CONFIG_SDL2 0
+%define CONFIG_SECURETRANSPORT 0
+%define CONFIG_SNDIO 0
+%define CONFIG_XLIB 0
+%define CONFIG_ZLIB 0
+%define CONFIG_CUDA_NVCC 0
+%define CONFIG_CUDA_SDK 0
+%define CONFIG_LIBNPP 0
+%define CONFIG_LIBMFX 0
+%define CONFIG_MMAL 0
+%define CONFIG_OMX 0
+%define CONFIG_OPENCL 0
+%define CONFIG_VULKAN 0
+%define CONFIG_AMF 0
+%define CONFIG_AUDIOTOOLBOX 0
+%define CONFIG_CRYSTALHD 0
+%define CONFIG_CUDA 0
+%define CONFIG_CUDA_LLVM 0
+%define CONFIG_CUVID 0
+%define CONFIG_D3D11VA 0
+%define CONFIG_DXVA2 0
+%define CONFIG_FFNVCODEC 0
+%define CONFIG_NVDEC 0
+%define CONFIG_NVENC 0
+%define CONFIG_VAAPI 0
+%define CONFIG_VDPAU 0
+%define CONFIG_VIDEOTOOLBOX 0
+%define CONFIG_V4L2_M2M 0
+%define CONFIG_XVMC 0
+%define CONFIG_FTRAPV 0
+%define CONFIG_GRAY 0
+%define CONFIG_HARDCODED_TABLES 0
+%define CONFIG_OMX_RPI 0
+%define CONFIG_RUNTIME_CPUDETECT 1
+%define CONFIG_SAFE_BITSTREAM_READER 1
+%define CONFIG_SHARED 0
+%define CONFIG_SMALL 0
+%define CONFIG_STATIC 1
+%define CONFIG_SWSCALE_ALPHA 1
+%define CONFIG_GPL 0
+%define CONFIG_NONFREE 0
+%define CONFIG_VERSION3 0
+%define CONFIG_AVDEVICE 0
+%define CONFIG_AVFILTER 0
+%define CONFIG_SWSCALE 0
+%define CONFIG_POSTPROC 0
+%define CONFIG_AVFORMAT 1
+%define CONFIG_AVCODEC 1
+%define CONFIG_SWRESAMPLE 0
+%define CONFIG_AVRESAMPLE 0
+%define CONFIG_AVUTIL 1
+%define CONFIG_FFPLAY 0
+%define CONFIG_FFPROBE 0
+%define CONFIG_FFMPEG 0
+%define CONFIG_DCT 1
+%define CONFIG_DWT 0
+%define CONFIG_ERROR_RESILIENCE 0
+%define CONFIG_FAAN 0
+%define CONFIG_FAST_UNALIGNED 1
+%define CONFIG_FFT 1
+%define CONFIG_LSP 0
+%define CONFIG_LZO 0
+%define CONFIG_MDCT 1
+%define CONFIG_PIXELUTILS 0
+%define CONFIG_NETWORK 0
+%define CONFIG_RDFT 1
+%define CONFIG_AUTODETECT 0
+%define CONFIG_FONTCONFIG 0
+%define CONFIG_LARGE_TESTS 1
+%define CONFIG_LINUX_PERF 0
+%define CONFIG_MEMORY_POISONING 0
+%define CONFIG_NEON_CLOBBER_TEST 0
+%define CONFIG_OSSFUZZ 0
+%define CONFIG_PIC 1
+%define CONFIG_THUMB 0
+%define CONFIG_VALGRIND_BACKTRACE 0
+%define CONFIG_XMM_CLOBBER_TEST 0
+%define CONFIG_BSFS 1
+%define CONFIG_DECODERS 1
+%define CONFIG_ENCODERS 0
+%define CONFIG_HWACCELS 0
+%define CONFIG_PARSERS 1
+%define CONFIG_INDEVS 0
+%define CONFIG_OUTDEVS 0
+%define CONFIG_FILTERS 0
+%define CONFIG_DEMUXERS 1
+%define CONFIG_MUXERS 0
+%define CONFIG_PROTOCOLS 0
+%define CONFIG_AANDCTTABLES 0
+%define CONFIG_AC3DSP 0
+%define CONFIG_ADTS_HEADER 0
+%define CONFIG_AUDIO_FRAME_QUEUE 1
+%define CONFIG_AUDIODSP 0
+%define CONFIG_BLOCKDSP 0
+%define CONFIG_BSWAPDSP 0
+%define CONFIG_CABAC 0
+%define CONFIG_CBS 0
+%define CONFIG_CBS_AV1 0
+%define CONFIG_CBS_H264 0
+%define CONFIG_CBS_H265 0
+%define CONFIG_CBS_JPEG 0
+%define CONFIG_CBS_MPEG2 0
+%define CONFIG_CBS_VP9 0
+%define CONFIG_DIRAC_PARSE 1
+%define CONFIG_DNN 0
+%define CONFIG_DVPROFILE 0
+%define CONFIG_EXIF 0
+%define CONFIG_FAANDCT 0
+%define CONFIG_FAANIDCT 0
+%define CONFIG_FDCTDSP 0
+%define CONFIG_FLACDSP 1
+%define CONFIG_FMTCONVERT 0
+%define CONFIG_FRAME_THREAD_ENCODER 0
+%define CONFIG_G722DSP 0
+%define CONFIG_GOLOMB 1
+%define CONFIG_GPLV3 0
+%define CONFIG_H263DSP 0
+%define CONFIG_H264CHROMA 0
+%define CONFIG_H264DSP 0
+%define CONFIG_H264PARSE 0
+%define CONFIG_H264PRED 1
+%define CONFIG_H264QPEL 0
+%define CONFIG_HEVCPARSE 0
+%define CONFIG_HPELDSP 1
+%define CONFIG_HUFFMAN 0
+%define CONFIG_HUFFYUVDSP 0
+%define CONFIG_HUFFYUVENCDSP 0
+%define CONFIG_IDCTDSP 0
+%define CONFIG_IIRFILTER 0
+%define CONFIG_MDCT15 0
+%define CONFIG_INTRAX8 0
+%define CONFIG_ISO_MEDIA 1
+%define CONFIG_IVIDSP 0
+%define CONFIG_JPEGTABLES 0
+%define CONFIG_LGPLV3 0
+%define CONFIG_LIBX262 0
+%define CONFIG_LLAUDDSP 0
+%define CONFIG_LLVIDDSP 0
+%define CONFIG_LLVIDENCDSP 0
+%define CONFIG_LPC 0
+%define CONFIG_LZF 0
+%define CONFIG_ME_CMP 0
+%define CONFIG_MPEG_ER 0
+%define CONFIG_MPEGAUDIO 1
+%define CONFIG_MPEGAUDIODSP 1
+%define CONFIG_MPEGAUDIOHEADER 1
+%define CONFIG_MPEGVIDEO 0
+%define CONFIG_MPEGVIDEOENC 0
+%define CONFIG_MSS34DSP 0
+%define CONFIG_PIXBLOCKDSP 0
+%define CONFIG_QPELDSP 0
+%define CONFIG_QSV 0
+%define CONFIG_QSVDEC 0
+%define CONFIG_QSVENC 0
+%define CONFIG_QSVVPP 0
+%define CONFIG_RANGECODER 0
+%define CONFIG_RIFFDEC 1
+%define CONFIG_RIFFENC 0
+%define CONFIG_RTPDEC 0
+%define CONFIG_RTPENC_CHAIN 0
+%define CONFIG_RV34DSP 0
+%define CONFIG_SCENE_SAD 0
+%define CONFIG_SINEWIN 0
+%define CONFIG_SNAPPY 0
+%define CONFIG_SRTP 0
+%define CONFIG_STARTCODE 0
+%define CONFIG_TEXTUREDSP 0
+%define CONFIG_TEXTUREDSPENC 0
+%define CONFIG_TPELDSP 0
+%define CONFIG_VAAPI_1 0
+%define CONFIG_VAAPI_ENCODE 0
+%define CONFIG_VC1DSP 0
+%define CONFIG_VIDEODSP 1
+%define CONFIG_VP3DSP 1
+%define CONFIG_VP56DSP 0
+%define CONFIG_VP8DSP 1
+%define CONFIG_WMA_FREQS 0
+%define CONFIG_WMV2DSP 0
+%define CONFIG_AAC_ADTSTOASC_BSF 0
+%define CONFIG_AV1_FRAME_MERGE_BSF 0
+%define CONFIG_AV1_FRAME_SPLIT_BSF 0
+%define CONFIG_AV1_METADATA_BSF 0
+%define CONFIG_CHOMP_BSF 0
+%define CONFIG_DUMP_EXTRADATA_BSF 0
+%define CONFIG_DCA_CORE_BSF 0
+%define CONFIG_EAC3_CORE_BSF 0
+%define CONFIG_EXTRACT_EXTRADATA_BSF 0
+%define CONFIG_FILTER_UNITS_BSF 0
+%define CONFIG_H264_METADATA_BSF 0
+%define CONFIG_H264_MP4TOANNEXB_BSF 0
+%define CONFIG_H264_REDUNDANT_PPS_BSF 0
+%define CONFIG_HAPQA_EXTRACT_BSF 0
+%define CONFIG_HEVC_METADATA_BSF 0
+%define CONFIG_HEVC_MP4TOANNEXB_BSF 0
+%define CONFIG_IMX_DUMP_HEADER_BSF 0
+%define CONFIG_MJPEG2JPEG_BSF 0
+%define CONFIG_MJPEGA_DUMP_HEADER_BSF 0
+%define CONFIG_MP3_HEADER_DECOMPRESS_BSF 0
+%define CONFIG_MPEG2_METADATA_BSF 0
+%define CONFIG_MPEG4_UNPACK_BFRAMES_BSF 0
+%define CONFIG_MOV2TEXTSUB_BSF 0
+%define CONFIG_NOISE_BSF 0
+%define CONFIG_NULL_BSF 1
+%define CONFIG_PRORES_METADATA_BSF 0
+%define CONFIG_REMOVE_EXTRADATA_BSF 0
+%define CONFIG_TEXT2MOVSUB_BSF 0
+%define CONFIG_TRACE_HEADERS_BSF 0
+%define CONFIG_TRUEHD_CORE_BSF 0
+%define CONFIG_VP9_METADATA_BSF 0
+%define CONFIG_VP9_RAW_REORDER_BSF 0
+%define CONFIG_VP9_SUPERFRAME_BSF 0
+%define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1
+%define CONFIG_AASC_DECODER 0
+%define CONFIG_AIC_DECODER 0
+%define CONFIG_ALIAS_PIX_DECODER 0
+%define CONFIG_AGM_DECODER 0
+%define CONFIG_AMV_DECODER 0
+%define CONFIG_ANM_DECODER 0
+%define CONFIG_ANSI_DECODER 0
+%define CONFIG_APNG_DECODER 0
+%define CONFIG_ARBC_DECODER 0
+%define CONFIG_ASV1_DECODER 0
+%define CONFIG_ASV2_DECODER 0
+%define CONFIG_AURA_DECODER 0
+%define CONFIG_AURA2_DECODER 0
+%define CONFIG_AVRP_DECODER 0
+%define CONFIG_AVRN_DECODER 0
+%define CONFIG_AVS_DECODER 0
+%define CONFIG_AVUI_DECODER 0
+%define CONFIG_AYUV_DECODER 0
+%define CONFIG_BETHSOFTVID_DECODER 0
+%define CONFIG_BFI_DECODER 0
+%define CONFIG_BINK_DECODER 0
+%define CONFIG_BITPACKED_DECODER 0
+%define CONFIG_BMP_DECODER 0
+%define CONFIG_BMV_VIDEO_DECODER 0
+%define CONFIG_BRENDER_PIX_DECODER 0
+%define CONFIG_C93_DECODER 0
+%define CONFIG_CAVS_DECODER 0
+%define CONFIG_CDGRAPHICS_DECODER 0
+%define CONFIG_CDTOONS_DECODER 0
+%define CONFIG_CDXL_DECODER 0
+%define CONFIG_CFHD_DECODER 0
+%define CONFIG_CINEPAK_DECODER 0
+%define CONFIG_CLEARVIDEO_DECODER 0
+%define CONFIG_CLJR_DECODER 0
+%define CONFIG_CLLC_DECODER 0
+%define CONFIG_COMFORTNOISE_DECODER 0
+%define CONFIG_CPIA_DECODER 0
+%define CONFIG_CSCD_DECODER 0
+%define CONFIG_CYUV_DECODER 0
+%define CONFIG_DDS_DECODER 0
+%define CONFIG_DFA_DECODER 0
+%define CONFIG_DIRAC_DECODER 0
+%define CONFIG_DNXHD_DECODER 0
+%define CONFIG_DPX_DECODER 0
+%define CONFIG_DSICINVIDEO_DECODER 0
+%define CONFIG_DVAUDIO_DECODER 0
+%define CONFIG_DVVIDEO_DECODER 0
+%define CONFIG_DXA_DECODER 0
+%define CONFIG_DXTORY_DECODER 0
+%define CONFIG_DXV_DECODER 0
+%define CONFIG_EACMV_DECODER 0
+%define CONFIG_EAMAD_DECODER 0
+%define CONFIG_EATGQ_DECODER 0
+%define CONFIG_EATGV_DECODER 0
+%define CONFIG_EATQI_DECODER 0
+%define CONFIG_EIGHTBPS_DECODER 0
+%define CONFIG_EIGHTSVX_EXP_DECODER 0
+%define CONFIG_EIGHTSVX_FIB_DECODER 0
+%define CONFIG_ESCAPE124_DECODER 0
+%define CONFIG_ESCAPE130_DECODER 0
+%define CONFIG_EXR_DECODER 0
+%define CONFIG_FFV1_DECODER 0
+%define CONFIG_FFVHUFF_DECODER 0
+%define CONFIG_FIC_DECODER 0
+%define CONFIG_FITS_DECODER 0
+%define CONFIG_FLASHSV_DECODER 0
+%define CONFIG_FLASHSV2_DECODER 0
+%define CONFIG_FLIC_DECODER 0
+%define CONFIG_FLV_DECODER 0
+%define CONFIG_FMVC_DECODER 0
+%define CONFIG_FOURXM_DECODER 0
+%define CONFIG_FRAPS_DECODER 0
+%define CONFIG_FRWU_DECODER 0
+%define CONFIG_G2M_DECODER 0
+%define CONFIG_GDV_DECODER 0
+%define CONFIG_GIF_DECODER 0
+%define CONFIG_H261_DECODER 0
+%define CONFIG_H263_DECODER 0
+%define CONFIG_H263I_DECODER 0
+%define CONFIG_H263P_DECODER 0
+%define CONFIG_H263_V4L2M2M_DECODER 0
+%define CONFIG_H264_DECODER 0
+%define CONFIG_H264_CRYSTALHD_DECODER 0
+%define CONFIG_H264_V4L2M2M_DECODER 0
+%define CONFIG_H264_MEDIACODEC_DECODER 0
+%define CONFIG_H264_MMAL_DECODER 0
+%define CONFIG_H264_QSV_DECODER 0
+%define CONFIG_H264_RKMPP_DECODER 0
+%define CONFIG_HAP_DECODER 0
+%define CONFIG_HEVC_DECODER 0
+%define CONFIG_HEVC_QSV_DECODER 0
+%define CONFIG_HEVC_RKMPP_DECODER 0
+%define CONFIG_HEVC_V4L2M2M_DECODER 0
+%define CONFIG_HNM4_VIDEO_DECODER 0
+%define CONFIG_HQ_HQA_DECODER 0
+%define CONFIG_HQX_DECODER 0
+%define CONFIG_HUFFYUV_DECODER 0
+%define CONFIG_HYMT_DECODER 0
+%define CONFIG_IDCIN_DECODER 0
+%define CONFIG_IFF_ILBM_DECODER 0
+%define CONFIG_IMM4_DECODER 0
+%define CONFIG_IMM5_DECODER 0
+%define CONFIG_INDEO2_DECODER 0
+%define CONFIG_INDEO3_DECODER 0
+%define CONFIG_INDEO4_DECODER 0
+%define CONFIG_INDEO5_DECODER 0
+%define CONFIG_INTERPLAY_VIDEO_DECODER 0
+%define CONFIG_JPEG2000_DECODER 0
+%define CONFIG_JPEGLS_DECODER 0
+%define CONFIG_JV_DECODER 0
+%define CONFIG_KGV1_DECODER 0
+%define CONFIG_KMVC_DECODER 0
+%define CONFIG_LAGARITH_DECODER 0
+%define CONFIG_LOCO_DECODER 0
+%define CONFIG_LSCR_DECODER 0
+%define CONFIG_M101_DECODER 0
+%define CONFIG_MAGICYUV_DECODER 0
+%define CONFIG_MDEC_DECODER 0
+%define CONFIG_MIMIC_DECODER 0
+%define CONFIG_MJPEG_DECODER 0
+%define CONFIG_MJPEGB_DECODER 0
+%define CONFIG_MMVIDEO_DECODER 0
+%define CONFIG_MOTIONPIXELS_DECODER 0
+%define CONFIG_MPEG1VIDEO_DECODER 0
+%define CONFIG_MPEG2VIDEO_DECODER 0
+%define CONFIG_MPEG4_DECODER 0
+%define CONFIG_MPEG4_CRYSTALHD_DECODER 0
+%define CONFIG_MPEG4_V4L2M2M_DECODER 0
+%define CONFIG_MPEG4_MMAL_DECODER 0
+%define CONFIG_MPEGVIDEO_DECODER 0
+%define CONFIG_MPEG1_V4L2M2M_DECODER 0
+%define CONFIG_MPEG2_MMAL_DECODER 0
+%define CONFIG_MPEG2_CRYSTALHD_DECODER 0
+%define CONFIG_MPEG2_V4L2M2M_DECODER 0
+%define CONFIG_MPEG2_QSV_DECODER 0
+%define CONFIG_MPEG2_MEDIACODEC_DECODER 0
+%define CONFIG_MSA1_DECODER 0
+%define CONFIG_MSCC_DECODER 0
+%define CONFIG_MSMPEG4V1_DECODER 0
+%define CONFIG_MSMPEG4V2_DECODER 0
+%define CONFIG_MSMPEG4V3_DECODER 0
+%define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0
+%define CONFIG_MSRLE_DECODER 0
+%define CONFIG_MSS1_DECODER 0
+%define CONFIG_MSS2_DECODER 0
+%define CONFIG_MSVIDEO1_DECODER 0
+%define CONFIG_MSZH_DECODER 0
+%define CONFIG_MTS2_DECODER 0
+%define CONFIG_MV30_DECODER 0
+%define CONFIG_MVC1_DECODER 0
+%define CONFIG_MVC2_DECODER 0
+%define CONFIG_MVDV_DECODER 0
+%define CONFIG_MVHA_DECODER 0
+%define CONFIG_MWSC_DECODER 0
+%define CONFIG_MXPEG_DECODER 0
+%define CONFIG_NUV_DECODER 0
+%define CONFIG_PAF_VIDEO_DECODER 0
+%define CONFIG_PAM_DECODER 0
+%define CONFIG_PBM_DECODER 0
+%define CONFIG_PCX_DECODER 0
+%define CONFIG_PGM_DECODER 0
+%define CONFIG_PGMYUV_DECODER 0
+%define CONFIG_PICTOR_DECODER 0
+%define CONFIG_PIXLET_DECODER 0
+%define CONFIG_PNG_DECODER 0
+%define CONFIG_PPM_DECODER 0
+%define CONFIG_PRORES_DECODER 0
+%define CONFIG_PROSUMER_DECODER 0
+%define CONFIG_PSD_DECODER 0
+%define CONFIG_PTX_DECODER 0
+%define CONFIG_QDRAW_DECODER 0
+%define CONFIG_QPEG_DECODER 0
+%define CONFIG_QTRLE_DECODER 0
+%define CONFIG_R10K_DECODER 0
+%define CONFIG_R210_DECODER 0
+%define CONFIG_RASC_DECODER 0
+%define CONFIG_RAWVIDEO_DECODER 0
+%define CONFIG_RL2_DECODER 0
+%define CONFIG_ROQ_DECODER 0
+%define CONFIG_RPZA_DECODER 0
+%define CONFIG_RSCC_DECODER 0
+%define CONFIG_RV10_DECODER 0
+%define CONFIG_RV20_DECODER 0
+%define CONFIG_RV30_DECODER 0
+%define CONFIG_RV40_DECODER 0
+%define CONFIG_S302M_DECODER 0
+%define CONFIG_SANM_DECODER 0
+%define CONFIG_SCPR_DECODER 0
+%define CONFIG_SCREENPRESSO_DECODER 0
+%define CONFIG_SGI_DECODER 0
+%define CONFIG_SGIRLE_DECODER 0
+%define CONFIG_SHEERVIDEO_DECODER 0
+%define CONFIG_SMACKER_DECODER 0
+%define CONFIG_SMC_DECODER 0
+%define CONFIG_SMVJPEG_DECODER 0
+%define CONFIG_SNOW_DECODER 0
+%define CONFIG_SP5X_DECODER 0
+%define CONFIG_SPEEDHQ_DECODER 0
+%define CONFIG_SRGC_DECODER 0
+%define CONFIG_SUNRAST_DECODER 0
+%define CONFIG_SVQ1_DECODER 0
+%define CONFIG_SVQ3_DECODER 0
+%define CONFIG_TARGA_DECODER 0
+%define CONFIG_TARGA_Y216_DECODER 0
+%define CONFIG_TDSC_DECODER 0
+%define CONFIG_THEORA_DECODER 1
+%define CONFIG_THP_DECODER 0
+%define CONFIG_TIERTEXSEQVIDEO_DECODER 0
+%define CONFIG_TIFF_DECODER 0
+%define CONFIG_TMV_DECODER 0
+%define CONFIG_TRUEMOTION1_DECODER 0
+%define CONFIG_TRUEMOTION2_DECODER 0
+%define CONFIG_TRUEMOTION2RT_DECODER 0
+%define CONFIG_TSCC_DECODER 0
+%define CONFIG_TSCC2_DECODER 0
+%define CONFIG_TXD_DECODER 0
+%define CONFIG_ULTI_DECODER 0
+%define CONFIG_UTVIDEO_DECODER 0
+%define CONFIG_V210_DECODER 0
+%define CONFIG_V210X_DECODER 0
+%define CONFIG_V308_DECODER 0
+%define CONFIG_V408_DECODER 0
+%define CONFIG_V410_DECODER 0
+%define CONFIG_VB_DECODER 0
+%define CONFIG_VBLE_DECODER 0
+%define CONFIG_VC1_DECODER 0
+%define CONFIG_VC1_CRYSTALHD_DECODER 0
+%define CONFIG_VC1IMAGE_DECODER 0
+%define CONFIG_VC1_MMAL_DECODER 0
+%define CONFIG_VC1_QSV_DECODER 0
+%define CONFIG_VC1_V4L2M2M_DECODER 0
+%define CONFIG_VCR1_DECODER 0
+%define CONFIG_VMDVIDEO_DECODER 0
+%define CONFIG_VMNC_DECODER 0
+%define CONFIG_VP3_DECODER 1
+%define CONFIG_VP4_DECODER 0
+%define CONFIG_VP5_DECODER 0
+%define CONFIG_VP6_DECODER 0
+%define CONFIG_VP6A_DECODER 0
+%define CONFIG_VP6F_DECODER 0
+%define CONFIG_VP7_DECODER 0
+%define CONFIG_VP8_DECODER 1
+%define CONFIG_VP8_RKMPP_DECODER 0
+%define CONFIG_VP8_V4L2M2M_DECODER 0
+%define CONFIG_VP9_DECODER 1
+%define CONFIG_VP9_RKMPP_DECODER 0
+%define CONFIG_VP9_V4L2M2M_DECODER 0
+%define CONFIG_VQA_DECODER 0
+%define CONFIG_WEBP_DECODER 0
+%define CONFIG_WCMV_DECODER 0
+%define CONFIG_WRAPPED_AVFRAME_DECODER 0
+%define CONFIG_WMV1_DECODER 0
+%define CONFIG_WMV2_DECODER 0
+%define CONFIG_WMV3_DECODER 0
+%define CONFIG_WMV3_CRYSTALHD_DECODER 0
+%define CONFIG_WMV3IMAGE_DECODER 0
+%define CONFIG_WNV1_DECODER 0
+%define CONFIG_XAN_WC3_DECODER 0
+%define CONFIG_XAN_WC4_DECODER 0
+%define CONFIG_XBM_DECODER 0
+%define CONFIG_XFACE_DECODER 0
+%define CONFIG_XL_DECODER 0
+%define CONFIG_XPM_DECODER 0
+%define CONFIG_XWD_DECODER 0
+%define CONFIG_Y41P_DECODER 0
+%define CONFIG_YLC_DECODER 0
+%define CONFIG_YOP_DECODER 0
+%define CONFIG_YUV4_DECODER 0
+%define CONFIG_ZERO12V_DECODER 0
+%define CONFIG_ZEROCODEC_DECODER 0
+%define CONFIG_ZLIB_DECODER 0
+%define CONFIG_ZMBV_DECODER 0
+%define CONFIG_AAC_DECODER 0
+%define CONFIG_AAC_FIXED_DECODER 0
+%define CONFIG_AAC_LATM_DECODER 0
+%define CONFIG_AC3_DECODER 0
+%define CONFIG_AC3_FIXED_DECODER 0
+%define CONFIG_ACELP_KELVIN_DECODER 0
+%define CONFIG_ALAC_DECODER 0
+%define CONFIG_ALS_DECODER 0
+%define CONFIG_AMRNB_DECODER 0
+%define CONFIG_AMRWB_DECODER 0
+%define CONFIG_APE_DECODER 0
+%define CONFIG_APTX_DECODER 1
+%define CONFIG_APTX_HD_DECODER 0
+%define CONFIG_ATRAC1_DECODER 0
+%define CONFIG_ATRAC3_DECODER 0
+%define CONFIG_ATRAC3AL_DECODER 0
+%define CONFIG_ATRAC3P_DECODER 0
+%define CONFIG_ATRAC3PAL_DECODER 0
+%define CONFIG_ATRAC9_DECODER 0
+%define CONFIG_BINKAUDIO_DCT_DECODER 0
+%define CONFIG_BINKAUDIO_RDFT_DECODER 0
+%define CONFIG_BMV_AUDIO_DECODER 0
+%define CONFIG_COOK_DECODER 0
+%define CONFIG_DCA_DECODER 0
+%define CONFIG_DOLBY_E_DECODER 0
+%define CONFIG_DSD_LSBF_DECODER 0
+%define CONFIG_DSD_MSBF_DECODER 0
+%define CONFIG_DSD_LSBF_PLANAR_DECODER 0
+%define CONFIG_DSD_MSBF_PLANAR_DECODER 0
+%define CONFIG_DSICINAUDIO_DECODER 0
+%define CONFIG_DSS_SP_DECODER 0
+%define CONFIG_DST_DECODER 0
+%define CONFIG_EAC3_DECODER 0
+%define CONFIG_EVRC_DECODER 0
+%define CONFIG_FFWAVESYNTH_DECODER 0
+%define CONFIG_FLAC_DECODER 1
+%define CONFIG_G723_1_DECODER 0
+%define CONFIG_G729_DECODER 0
+%define CONFIG_GSM_DECODER 0
+%define CONFIG_GSM_MS_DECODER 0
+%define CONFIG_HCA_DECODER 0
+%define CONFIG_HCOM_DECODER 0
+%define CONFIG_IAC_DECODER 0
+%define CONFIG_ILBC_DECODER 0
+%define CONFIG_IMC_DECODER 0
+%define CONFIG_INTERPLAY_ACM_DECODER 0
+%define CONFIG_MACE3_DECODER 0
+%define CONFIG_MACE6_DECODER 0
+%define CONFIG_METASOUND_DECODER 0
+%define CONFIG_MLP_DECODER 0
+%define CONFIG_MP1_DECODER 0
+%define CONFIG_MP1FLOAT_DECODER 0
+%define CONFIG_MP2_DECODER 0
+%define CONFIG_MP2FLOAT_DECODER 0
+%define CONFIG_MP3FLOAT_DECODER 0
+%define CONFIG_MP3_DECODER 1
+%define CONFIG_MP3ADUFLOAT_DECODER 0
+%define CONFIG_MP3ADU_DECODER 0
+%define CONFIG_MP3ON4FLOAT_DECODER 0
+%define CONFIG_MP3ON4_DECODER 0
+%define CONFIG_MPC7_DECODER 0
+%define CONFIG_MPC8_DECODER 0
+%define CONFIG_NELLYMOSER_DECODER 0
+%define CONFIG_ON2AVC_DECODER 0
+%define CONFIG_OPUS_DECODER 0
+%define CONFIG_PAF_AUDIO_DECODER 0
+%define CONFIG_QCELP_DECODER 0
+%define CONFIG_QDM2_DECODER 0
+%define CONFIG_QDMC_DECODER 0
+%define CONFIG_RA_144_DECODER 0
+%define CONFIG_RA_288_DECODER 0
+%define CONFIG_RALF_DECODER 0
+%define CONFIG_SBC_DECODER 1
+%define CONFIG_SHORTEN_DECODER 0
+%define CONFIG_SIPR_DECODER 0
+%define CONFIG_SIREN_DECODER 0
+%define CONFIG_SMACKAUD_DECODER 0
+%define CONFIG_SONIC_DECODER 0
+%define CONFIG_TAK_DECODER 0
+%define CONFIG_TRUEHD_DECODER 0
+%define CONFIG_TRUESPEECH_DECODER 0
+%define CONFIG_TTA_DECODER 0
+%define CONFIG_TWINVQ_DECODER 0
+%define CONFIG_VMDAUDIO_DECODER 0
+%define CONFIG_VORBIS_DECODER 1
+%define CONFIG_WAVPACK_DECODER 0
+%define CONFIG_WMALOSSLESS_DECODER 0
+%define CONFIG_WMAPRO_DECODER 0
+%define CONFIG_WMAV1_DECODER 0
+%define CONFIG_WMAV2_DECODER 0
+%define CONFIG_WMAVOICE_DECODER 0
+%define CONFIG_WS_SND1_DECODER 0
+%define CONFIG_XMA1_DECODER 0
+%define CONFIG_XMA2_DECODER 0
+%define CONFIG_PCM_ALAW_DECODER 1
+%define CONFIG_PCM_BLURAY_DECODER 0
+%define CONFIG_PCM_DVD_DECODER 0
+%define CONFIG_PCM_F16LE_DECODER 0
+%define CONFIG_PCM_F24LE_DECODER 0
+%define CONFIG_PCM_F32BE_DECODER 0
+%define CONFIG_PCM_F32LE_DECODER 1
+%define CONFIG_PCM_F64BE_DECODER 0
+%define CONFIG_PCM_F64LE_DECODER 0
+%define CONFIG_PCM_LXF_DECODER 0
+%define CONFIG_PCM_MULAW_DECODER 1
+%define CONFIG_PCM_S8_DECODER 0
+%define CONFIG_PCM_S8_PLANAR_DECODER 0
+%define CONFIG_PCM_S16BE_DECODER 1
+%define CONFIG_PCM_S16BE_PLANAR_DECODER 0
+%define CONFIG_PCM_S16LE_DECODER 1
+%define CONFIG_PCM_S16LE_PLANAR_DECODER 0
+%define CONFIG_PCM_S24BE_DECODER 1
+%define CONFIG_PCM_S24DAUD_DECODER 0
+%define CONFIG_PCM_S24LE_DECODER 1
+%define CONFIG_PCM_S24LE_PLANAR_DECODER 0
+%define CONFIG_PCM_S32BE_DECODER 0
+%define CONFIG_PCM_S32LE_DECODER 1
+%define CONFIG_PCM_S32LE_PLANAR_DECODER 0
+%define CONFIG_PCM_S64BE_DECODER 0
+%define CONFIG_PCM_S64LE_DECODER 0
+%define CONFIG_PCM_U8_DECODER 1
+%define CONFIG_PCM_U16BE_DECODER 0
+%define CONFIG_PCM_U16LE_DECODER 0
+%define CONFIG_PCM_U24BE_DECODER 0
+%define CONFIG_PCM_U24LE_DECODER 0
+%define CONFIG_PCM_U32BE_DECODER 0
+%define CONFIG_PCM_U32LE_DECODER 0
+%define CONFIG_PCM_VIDC_DECODER 0
+%define CONFIG_DERF_DPCM_DECODER 0
+%define CONFIG_GREMLIN_DPCM_DECODER 0
+%define CONFIG_INTERPLAY_DPCM_DECODER 0
+%define CONFIG_ROQ_DPCM_DECODER 0
+%define CONFIG_SDX2_DPCM_DECODER 0
+%define CONFIG_SOL_DPCM_DECODER 0
+%define CONFIG_XAN_DPCM_DECODER 0
+%define CONFIG_ADPCM_4XM_DECODER 0
+%define CONFIG_ADPCM_ADX_DECODER 0
+%define CONFIG_ADPCM_AFC_DECODER 0
+%define CONFIG_ADPCM_AGM_DECODER 0
+%define CONFIG_ADPCM_AICA_DECODER 0
+%define CONFIG_ADPCM_ARGO_DECODER 0
+%define CONFIG_ADPCM_CT_DECODER 0
+%define CONFIG_ADPCM_DTK_DECODER 0
+%define CONFIG_ADPCM_EA_DECODER 0
+%define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0
+%define CONFIG_ADPCM_EA_R1_DECODER 0
+%define CONFIG_ADPCM_EA_R2_DECODER 0
+%define CONFIG_ADPCM_EA_R3_DECODER 0
+%define CONFIG_ADPCM_EA_XAS_DECODER 0
+%define CONFIG_ADPCM_G722_DECODER 0
+%define CONFIG_ADPCM_G726_DECODER 0
+%define CONFIG_ADPCM_G726LE_DECODER 0
+%define CONFIG_ADPCM_IMA_AMV_DECODER 0
+%define CONFIG_ADPCM_IMA_ALP_DECODER 0
+%define CONFIG_ADPCM_IMA_APC_DECODER 0
+%define CONFIG_ADPCM_IMA_APM_DECODER 0
+%define CONFIG_ADPCM_IMA_DAT4_DECODER 0
+%define CONFIG_ADPCM_IMA_DK3_DECODER 0
+%define CONFIG_ADPCM_IMA_DK4_DECODER 0
+%define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0
+%define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0
+%define CONFIG_ADPCM_IMA_ISS_DECODER 0
+%define CONFIG_ADPCM_IMA_MTF_DECODER 0
+%define CONFIG_ADPCM_IMA_OKI_DECODER 0
+%define CONFIG_ADPCM_IMA_QT_DECODER 0
+%define CONFIG_ADPCM_IMA_RAD_DECODER 0
+%define CONFIG_ADPCM_IMA_SSI_DECODER 0
+%define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0
+%define CONFIG_ADPCM_IMA_WAV_DECODER 0
+%define CONFIG_ADPCM_IMA_WS_DECODER 0
+%define CONFIG_ADPCM_MS_DECODER 0
+%define CONFIG_ADPCM_MTAF_DECODER 0
+%define CONFIG_ADPCM_PSX_DECODER 0
+%define CONFIG_ADPCM_SBPRO_2_DECODER 0
+%define CONFIG_ADPCM_SBPRO_3_DECODER 0
+%define CONFIG_ADPCM_SBPRO_4_DECODER 0
+%define CONFIG_ADPCM_SWF_DECODER 0
+%define CONFIG_ADPCM_THP_DECODER 0
+%define CONFIG_ADPCM_THP_LE_DECODER 0
+%define CONFIG_ADPCM_VIMA_DECODER 0
+%define CONFIG_ADPCM_XA_DECODER 0
+%define CONFIG_ADPCM_YAMAHA_DECODER 0
+%define CONFIG_ADPCM_ZORK_DECODER 0
+%define CONFIG_SSA_DECODER 0
+%define CONFIG_ASS_DECODER 0
+%define CONFIG_CCAPTION_DECODER 0
+%define CONFIG_DVBSUB_DECODER 0
+%define CONFIG_DVDSUB_DECODER 0
+%define CONFIG_JACOSUB_DECODER 0
+%define CONFIG_MICRODVD_DECODER 0
+%define CONFIG_MOVTEXT_DECODER 0
+%define CONFIG_MPL2_DECODER 0
+%define CONFIG_PGSSUB_DECODER 0
+%define CONFIG_PJS_DECODER 0
+%define CONFIG_REALTEXT_DECODER 0
+%define CONFIG_SAMI_DECODER 0
+%define CONFIG_SRT_DECODER 0
+%define CONFIG_STL_DECODER 0
+%define CONFIG_SUBRIP_DECODER 0
+%define CONFIG_SUBVIEWER_DECODER 0
+%define CONFIG_SUBVIEWER1_DECODER 0
+%define CONFIG_TEXT_DECODER 0
+%define CONFIG_VPLAYER_DECODER 0
+%define CONFIG_WEBVTT_DECODER 0
+%define CONFIG_XSUB_DECODER 0
+%define CONFIG_AAC_AT_DECODER 0
+%define CONFIG_AC3_AT_DECODER 0
+%define CONFIG_ADPCM_IMA_QT_AT_DECODER 0
+%define CONFIG_ALAC_AT_DECODER 0
+%define CONFIG_AMR_NB_AT_DECODER 0
+%define CONFIG_EAC3_AT_DECODER 0
+%define CONFIG_GSM_MS_AT_DECODER 0
+%define CONFIG_ILBC_AT_DECODER 0
+%define CONFIG_MP1_AT_DECODER 0
+%define CONFIG_MP2_AT_DECODER 0
+%define CONFIG_MP3_AT_DECODER 0
+%define CONFIG_PCM_ALAW_AT_DECODER 0
+%define CONFIG_PCM_MULAW_AT_DECODER 0
+%define CONFIG_QDMC_AT_DECODER 0
+%define CONFIG_QDM2_AT_DECODER 0
+%define CONFIG_LIBARIBB24_DECODER 0
+%define CONFIG_LIBCELT_DECODER 0
+%define CONFIG_LIBCODEC2_DECODER 0
+%define CONFIG_LIBDAV1D_DECODER 0
+%define CONFIG_LIBDAVS2_DECODER 0
+%define CONFIG_LIBFDK_AAC_DECODER 0
+%define CONFIG_LIBGSM_DECODER 0
+%define CONFIG_LIBGSM_MS_DECODER 0
+%define CONFIG_LIBILBC_DECODER 0
+%define CONFIG_LIBOPENCORE_AMRNB_DECODER 0
+%define CONFIG_LIBOPENCORE_AMRWB_DECODER 0
+%define CONFIG_LIBOPENJPEG_DECODER 0
+%define CONFIG_LIBOPUS_DECODER 1
+%define CONFIG_LIBRSVG_DECODER 0
+%define CONFIG_LIBSPEEX_DECODER 0
+%define CONFIG_LIBVORBIS_DECODER 0
+%define CONFIG_LIBVPX_VP8_DECODER 0
+%define CONFIG_LIBVPX_VP9_DECODER 0
+%define CONFIG_LIBZVBI_TELETEXT_DECODER 0
+%define CONFIG_BINTEXT_DECODER 0
+%define CONFIG_XBIN_DECODER 0
+%define CONFIG_IDF_DECODER 0
+%define CONFIG_LIBAOM_AV1_DECODER 0
+%define CONFIG_LIBOPENH264_DECODER 0
+%define CONFIG_H264_CUVID_DECODER 0
+%define CONFIG_HEVC_CUVID_DECODER 0
+%define CONFIG_HEVC_MEDIACODEC_DECODER 0
+%define CONFIG_MJPEG_CUVID_DECODER 0
+%define CONFIG_MJPEG_QSV_DECODER 0
+%define CONFIG_MPEG1_CUVID_DECODER 0
+%define CONFIG_MPEG2_CUVID_DECODER 0
+%define CONFIG_MPEG4_CUVID_DECODER 0
+%define CONFIG_MPEG4_MEDIACODEC_DECODER 0
+%define CONFIG_VC1_CUVID_DECODER 0
+%define CONFIG_VP8_CUVID_DECODER 0
+%define CONFIG_VP8_MEDIACODEC_DECODER 0
+%define CONFIG_VP8_QSV_DECODER 0
+%define CONFIG_VP9_CUVID_DECODER 0
+%define CONFIG_VP9_MEDIACODEC_DECODER 0
+%define CONFIG_VP9_QSV_DECODER 0
+%define CONFIG_A64MULTI_ENCODER 0
+%define CONFIG_A64MULTI5_ENCODER 0
+%define CONFIG_ALIAS_PIX_ENCODER 0
+%define CONFIG_AMV_ENCODER 0
+%define CONFIG_APNG_ENCODER 0
+%define CONFIG_ASV1_ENCODER 0
+%define CONFIG_ASV2_ENCODER 0
+%define CONFIG_AVRP_ENCODER 0
+%define CONFIG_AVUI_ENCODER 0
+%define CONFIG_AYUV_ENCODER 0
+%define CONFIG_BMP_ENCODER 0
+%define CONFIG_CINEPAK_ENCODER 0
+%define CONFIG_CLJR_ENCODER 0
+%define CONFIG_COMFORTNOISE_ENCODER 0
+%define CONFIG_DNXHD_ENCODER 0
+%define CONFIG_DPX_ENCODER 0
+%define CONFIG_DVVIDEO_ENCODER 0
+%define CONFIG_FFV1_ENCODER 0
+%define CONFIG_FFVHUFF_ENCODER 0
+%define CONFIG_FITS_ENCODER 0
+%define CONFIG_FLASHSV_ENCODER 0
+%define CONFIG_FLASHSV2_ENCODER 0
+%define CONFIG_FLV_ENCODER 0
+%define CONFIG_GIF_ENCODER 0
+%define CONFIG_H261_ENCODER 0
+%define CONFIG_H263_ENCODER 0
+%define CONFIG_H263P_ENCODER 0
+%define CONFIG_HAP_ENCODER 0
+%define CONFIG_HUFFYUV_ENCODER 0
+%define CONFIG_JPEG2000_ENCODER 0
+%define CONFIG_JPEGLS_ENCODER 0
+%define CONFIG_LJPEG_ENCODER 0
+%define CONFIG_MAGICYUV_ENCODER 0
+%define CONFIG_MJPEG_ENCODER 0
+%define CONFIG_MPEG1VIDEO_ENCODER 0
+%define CONFIG_MPEG2VIDEO_ENCODER 0
+%define CONFIG_MPEG4_ENCODER 0
+%define CONFIG_MSMPEG4V2_ENCODER 0
+%define CONFIG_MSMPEG4V3_ENCODER 0
+%define CONFIG_MSVIDEO1_ENCODER 0
+%define CONFIG_PAM_ENCODER 0
+%define CONFIG_PBM_ENCODER 0
+%define CONFIG_PCX_ENCODER 0
+%define CONFIG_PGM_ENCODER 0
+%define CONFIG_PGMYUV_ENCODER 0
+%define CONFIG_PNG_ENCODER 0
+%define CONFIG_PPM_ENCODER 0
+%define CONFIG_PRORES_ENCODER 0
+%define CONFIG_PRORES_AW_ENCODER 0
+%define CONFIG_PRORES_KS_ENCODER 0
+%define CONFIG_QTRLE_ENCODER 0
+%define CONFIG_R10K_ENCODER 0
+%define CONFIG_R210_ENCODER 0
+%define CONFIG_RAWVIDEO_ENCODER 0
+%define CONFIG_ROQ_ENCODER 0
+%define CONFIG_RV10_ENCODER 0
+%define CONFIG_RV20_ENCODER 0
+%define CONFIG_S302M_ENCODER 0
+%define CONFIG_SGI_ENCODER 0
+%define CONFIG_SNOW_ENCODER 0
+%define CONFIG_SUNRAST_ENCODER 0
+%define CONFIG_SVQ1_ENCODER 0
+%define CONFIG_TARGA_ENCODER 0
+%define CONFIG_TIFF_ENCODER 0
+%define CONFIG_UTVIDEO_ENCODER 0
+%define CONFIG_V210_ENCODER 0
+%define CONFIG_V308_ENCODER 0
+%define CONFIG_V408_ENCODER 0
+%define CONFIG_V410_ENCODER 0
+%define CONFIG_VC2_ENCODER 0
+%define CONFIG_WRAPPED_AVFRAME_ENCODER 0
+%define CONFIG_WMV1_ENCODER 0
+%define CONFIG_WMV2_ENCODER 0
+%define CONFIG_XBM_ENCODER 0
+%define CONFIG_XFACE_ENCODER 0
+%define CONFIG_XWD_ENCODER 0
+%define CONFIG_Y41P_ENCODER 0
+%define CONFIG_YUV4_ENCODER 0
+%define CONFIG_ZLIB_ENCODER 0
+%define CONFIG_ZMBV_ENCODER 0
+%define CONFIG_AAC_ENCODER 0
+%define CONFIG_AC3_ENCODER 0
+%define CONFIG_AC3_FIXED_ENCODER 0
+%define CONFIG_ALAC_ENCODER 0
+%define CONFIG_APTX_ENCODER 0
+%define CONFIG_APTX_HD_ENCODER 0
+%define CONFIG_DCA_ENCODER 0
+%define CONFIG_EAC3_ENCODER 0
+%define CONFIG_FLAC_ENCODER 0
+%define CONFIG_G723_1_ENCODER 0
+%define CONFIG_MLP_ENCODER 0
+%define CONFIG_MP2_ENCODER 0
+%define CONFIG_MP2FIXED_ENCODER 0
+%define CONFIG_NELLYMOSER_ENCODER 0
+%define CONFIG_OPUS_ENCODER 0
+%define CONFIG_RA_144_ENCODER 0
+%define CONFIG_SBC_ENCODER 0
+%define CONFIG_SONIC_ENCODER 0
+%define CONFIG_SONIC_LS_ENCODER 0
+%define CONFIG_TRUEHD_ENCODER 0
+%define CONFIG_TTA_ENCODER 0
+%define CONFIG_VORBIS_ENCODER 0
+%define CONFIG_WAVPACK_ENCODER 0
+%define CONFIG_WMAV1_ENCODER 0
+%define CONFIG_WMAV2_ENCODER 0
+%define CONFIG_PCM_ALAW_ENCODER 0
+%define CONFIG_PCM_DVD_ENCODER 0
+%define CONFIG_PCM_F32BE_ENCODER 0
+%define CONFIG_PCM_F32LE_ENCODER 0
+%define CONFIG_PCM_F64BE_ENCODER 0
+%define CONFIG_PCM_F64LE_ENCODER 0
+%define CONFIG_PCM_MULAW_ENCODER 0
+%define CONFIG_PCM_S8_ENCODER 0
+%define CONFIG_PCM_S8_PLANAR_ENCODER 0
+%define CONFIG_PCM_S16BE_ENCODER 0
+%define CONFIG_PCM_S16BE_PLANAR_ENCODER 0
+%define CONFIG_PCM_S16LE_ENCODER 0
+%define CONFIG_PCM_S16LE_PLANAR_ENCODER 0
+%define CONFIG_PCM_S24BE_ENCODER 0
+%define CONFIG_PCM_S24DAUD_ENCODER 0
+%define CONFIG_PCM_S24LE_ENCODER 0
+%define CONFIG_PCM_S24LE_PLANAR_ENCODER 0
+%define CONFIG_PCM_S32BE_ENCODER 0
+%define CONFIG_PCM_S32LE_ENCODER 0
+%define CONFIG_PCM_S32LE_PLANAR_ENCODER 0
+%define CONFIG_PCM_S64BE_ENCODER 0
+%define CONFIG_PCM_S64LE_ENCODER 0
+%define CONFIG_PCM_U8_ENCODER 0
+%define CONFIG_PCM_U16BE_ENCODER 0
+%define CONFIG_PCM_U16LE_ENCODER 0
+%define CONFIG_PCM_U24BE_ENCODER 0
+%define CONFIG_PCM_U24LE_ENCODER 0
+%define CONFIG_PCM_U32BE_ENCODER 0
+%define CONFIG_PCM_U32LE_ENCODER 0
+%define CONFIG_PCM_VIDC_ENCODER 0
+%define CONFIG_ROQ_DPCM_ENCODER 0
+%define CONFIG_ADPCM_ADX_ENCODER 0
+%define CONFIG_ADPCM_G722_ENCODER 0
+%define CONFIG_ADPCM_G726_ENCODER 0
+%define CONFIG_ADPCM_G726LE_ENCODER 0
+%define CONFIG_ADPCM_IMA_QT_ENCODER 0
+%define CONFIG_ADPCM_IMA_WAV_ENCODER 0
+%define CONFIG_ADPCM_MS_ENCODER 0
+%define CONFIG_ADPCM_SWF_ENCODER 0
+%define CONFIG_ADPCM_YAMAHA_ENCODER 0
+%define CONFIG_SSA_ENCODER 0
+%define CONFIG_ASS_ENCODER 0
+%define CONFIG_DVBSUB_ENCODER 0
+%define CONFIG_DVDSUB_ENCODER 0
+%define CONFIG_MOVTEXT_ENCODER 0
+%define CONFIG_SRT_ENCODER 0
+%define CONFIG_SUBRIP_ENCODER 0
+%define CONFIG_TEXT_ENCODER 0
+%define CONFIG_WEBVTT_ENCODER 0
+%define CONFIG_XSUB_ENCODER 0
+%define CONFIG_AAC_AT_ENCODER 0
+%define CONFIG_ALAC_AT_ENCODER 0
+%define CONFIG_ILBC_AT_ENCODER 0
+%define CONFIG_PCM_ALAW_AT_ENCODER 0
+%define CONFIG_PCM_MULAW_AT_ENCODER 0
+%define CONFIG_LIBAOM_AV1_ENCODER 0
+%define CONFIG_LIBCODEC2_ENCODER 0
+%define CONFIG_LIBFDK_AAC_ENCODER 0
+%define CONFIG_LIBGSM_ENCODER 0
+%define CONFIG_LIBGSM_MS_ENCODER 0
+%define CONFIG_LIBILBC_ENCODER 0
+%define CONFIG_LIBMP3LAME_ENCODER 0
+%define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0
+%define CONFIG_LIBOPENJPEG_ENCODER 0
+%define CONFIG_LIBOPUS_ENCODER 0
+%define CONFIG_LIBRAV1E_ENCODER 0
+%define CONFIG_LIBSHINE_ENCODER 0
+%define CONFIG_LIBSPEEX_ENCODER 0
+%define CONFIG_LIBTHEORA_ENCODER 0
+%define CONFIG_LIBTWOLAME_ENCODER 0
+%define CONFIG_LIBVO_AMRWBENC_ENCODER 0
+%define CONFIG_LIBVORBIS_ENCODER 0
+%define CONFIG_LIBVPX_VP8_ENCODER 0
+%define CONFIG_LIBVPX_VP9_ENCODER 0
+%define CONFIG_LIBWAVPACK_ENCODER 0
+%define CONFIG_LIBWEBP_ANIM_ENCODER 0
+%define CONFIG_LIBWEBP_ENCODER 0
+%define CONFIG_LIBX262_ENCODER 0
+%define CONFIG_LIBX264_ENCODER 0
+%define CONFIG_LIBX264RGB_ENCODER 0
+%define CONFIG_LIBX265_ENCODER 0
+%define CONFIG_LIBXAVS_ENCODER 0
+%define CONFIG_LIBXAVS2_ENCODER 0
+%define CONFIG_LIBXVID_ENCODER 0
+%define CONFIG_H263_V4L2M2M_ENCODER 0
+%define CONFIG_LIBOPENH264_ENCODER 0
+%define CONFIG_H264_AMF_ENCODER 0
+%define CONFIG_H264_NVENC_ENCODER 0
+%define CONFIG_H264_OMX_ENCODER 0
+%define CONFIG_H264_QSV_ENCODER 0
+%define CONFIG_H264_V4L2M2M_ENCODER 0
+%define CONFIG_H264_VAAPI_ENCODER 0
+%define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0
+%define CONFIG_NVENC_ENCODER 0
+%define CONFIG_NVENC_H264_ENCODER 0
+%define CONFIG_NVENC_HEVC_ENCODER 0
+%define CONFIG_HEVC_AMF_ENCODER 0
+%define CONFIG_HEVC_NVENC_ENCODER 0
+%define CONFIG_HEVC_QSV_ENCODER 0
+%define CONFIG_HEVC_V4L2M2M_ENCODER 0
+%define CONFIG_HEVC_VAAPI_ENCODER 0
+%define CONFIG_HEVC_VIDEOTOOLBOX_ENCODER 0
+%define CONFIG_LIBKVAZAAR_ENCODER 0
+%define CONFIG_MJPEG_QSV_ENCODER 0
+%define CONFIG_MJPEG_VAAPI_ENCODER 0
+%define CONFIG_MPEG2_QSV_ENCODER 0
+%define CONFIG_MPEG2_VAAPI_ENCODER 0
+%define CONFIG_MPEG4_OMX_ENCODER 0
+%define CONFIG_MPEG4_V4L2M2M_ENCODER 0
+%define CONFIG_VP8_V4L2M2M_ENCODER 0
+%define CONFIG_VP8_VAAPI_ENCODER 0
+%define CONFIG_VP9_VAAPI_ENCODER 0
+%define CONFIG_VP9_QSV_ENCODER 0
+%define CONFIG_H263_VAAPI_HWACCEL 0
+%define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0
+%define CONFIG_H264_D3D11VA_HWACCEL 0
+%define CONFIG_H264_D3D11VA2_HWACCEL 0
+%define CONFIG_H264_DXVA2_HWACCEL 0
+%define CONFIG_H264_NVDEC_HWACCEL 0
+%define CONFIG_H264_VAAPI_HWACCEL 0
+%define CONFIG_H264_VDPAU_HWACCEL 0
+%define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0
+%define CONFIG_HEVC_D3D11VA_HWACCEL 0
+%define CONFIG_HEVC_D3D11VA2_HWACCEL 0
+%define CONFIG_HEVC_DXVA2_HWACCEL 0
+%define CONFIG_HEVC_NVDEC_HWACCEL 0
+%define CONFIG_HEVC_VAAPI_HWACCEL 0
+%define CONFIG_HEVC_VDPAU_HWACCEL 0
+%define CONFIG_HEVC_VIDEOTOOLBOX_HWACCEL 0
+%define CONFIG_MJPEG_NVDEC_HWACCEL 0
+%define CONFIG_MJPEG_VAAPI_HWACCEL 0
+%define CONFIG_MPEG1_NVDEC_HWACCEL 0
+%define CONFIG_MPEG1_VDPAU_HWACCEL 0
+%define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0
+%define CONFIG_MPEG1_XVMC_HWACCEL 0
+%define CONFIG_MPEG2_D3D11VA_HWACCEL 0
+%define CONFIG_MPEG2_D3D11VA2_HWACCEL 0
+%define CONFIG_MPEG2_NVDEC_HWACCEL 0
+%define CONFIG_MPEG2_DXVA2_HWACCEL 0
+%define CONFIG_MPEG2_VAAPI_HWACCEL 0
+%define CONFIG_MPEG2_VDPAU_HWACCEL 0
+%define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0
+%define CONFIG_MPEG2_XVMC_HWACCEL 0
+%define CONFIG_MPEG4_NVDEC_HWACCEL 0
+%define CONFIG_MPEG4_VAAPI_HWACCEL 0
+%define CONFIG_MPEG4_VDPAU_HWACCEL 0
+%define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0
+%define CONFIG_VC1_D3D11VA_HWACCEL 0
+%define CONFIG_VC1_D3D11VA2_HWACCEL 0
+%define CONFIG_VC1_DXVA2_HWACCEL 0
+%define CONFIG_VC1_NVDEC_HWACCEL 0
+%define CONFIG_VC1_VAAPI_HWACCEL 0
+%define CONFIG_VC1_VDPAU_HWACCEL 0
+%define CONFIG_VP8_NVDEC_HWACCEL 0
+%define CONFIG_VP8_VAAPI_HWACCEL 0
+%define CONFIG_VP9_D3D11VA_HWACCEL 0
+%define CONFIG_VP9_D3D11VA2_HWACCEL 0
+%define CONFIG_VP9_DXVA2_HWACCEL 0
+%define CONFIG_VP9_NVDEC_HWACCEL 0
+%define CONFIG_VP9_VAAPI_HWACCEL 0
+%define CONFIG_VP9_VDPAU_HWACCEL 0
+%define CONFIG_WMV3_D3D11VA_HWACCEL 0
+%define CONFIG_WMV3_D3D11VA2_HWACCEL 0
+%define CONFIG_WMV3_DXVA2_HWACCEL 0
+%define CONFIG_WMV3_NVDEC_HWACCEL 0
+%define CONFIG_WMV3_VAAPI_HWACCEL 0
+%define CONFIG_WMV3_VDPAU_HWACCEL 0
+%define CONFIG_AAC_PARSER 0
+%define CONFIG_AAC_LATM_PARSER 0
+%define CONFIG_AC3_PARSER 0
+%define CONFIG_ADX_PARSER 0
+%define CONFIG_AV1_PARSER 0
+%define CONFIG_AVS2_PARSER 0
+%define CONFIG_BMP_PARSER 0
+%define CONFIG_CAVSVIDEO_PARSER 0
+%define CONFIG_COOK_PARSER 0
+%define CONFIG_DCA_PARSER 0
+%define CONFIG_DIRAC_PARSER 0
+%define CONFIG_DNXHD_PARSER 0
+%define CONFIG_DPX_PARSER 0
+%define CONFIG_DVAUDIO_PARSER 0
+%define CONFIG_DVBSUB_PARSER 0
+%define CONFIG_DVDSUB_PARSER 0
+%define CONFIG_DVD_NAV_PARSER 0
+%define CONFIG_FLAC_PARSER 1
+%define CONFIG_G723_1_PARSER 0
+%define CONFIG_G729_PARSER 0
+%define CONFIG_GIF_PARSER 0
+%define CONFIG_GSM_PARSER 0
+%define CONFIG_H261_PARSER 0
+%define CONFIG_H263_PARSER 0
+%define CONFIG_H264_PARSER 0
+%define CONFIG_HEVC_PARSER 0
+%define CONFIG_MJPEG_PARSER 0
+%define CONFIG_MLP_PARSER 0
+%define CONFIG_MPEG4VIDEO_PARSER 0
+%define CONFIG_MPEGAUDIO_PARSER 1
+%define CONFIG_MPEGVIDEO_PARSER 0
+%define CONFIG_OPUS_PARSER 1
+%define CONFIG_PNG_PARSER 0
+%define CONFIG_PNM_PARSER 0
+%define CONFIG_RV30_PARSER 0
+%define CONFIG_RV40_PARSER 0
+%define CONFIG_SBC_PARSER 0
+%define CONFIG_SIPR_PARSER 0
+%define CONFIG_TAK_PARSER 0
+%define CONFIG_VC1_PARSER 0
+%define CONFIG_VORBIS_PARSER 1
+%define CONFIG_VP3_PARSER 1
+%define CONFIG_VP8_PARSER 1
+%define CONFIG_VP9_PARSER 1
+%define CONFIG_WEBP_PARSER 0
+%define CONFIG_XMA_PARSER 0
+%define CONFIG_ALSA_INDEV 0
+%define CONFIG_ANDROID_CAMERA_INDEV 0
+%define CONFIG_AVFOUNDATION_INDEV 0
+%define CONFIG_BKTR_INDEV 0
+%define CONFIG_DECKLINK_INDEV 0
+%define CONFIG_DSHOW_INDEV 0
+%define CONFIG_FBDEV_INDEV 0
+%define CONFIG_GDIGRAB_INDEV 0
+%define CONFIG_IEC61883_INDEV 0
+%define CONFIG_JACK_INDEV 0
+%define CONFIG_KMSGRAB_INDEV 0
+%define CONFIG_LAVFI_INDEV 0
+%define CONFIG_OPENAL_INDEV 0
+%define CONFIG_OSS_INDEV 0
+%define CONFIG_PULSE_INDEV 0
+%define CONFIG_SNDIO_INDEV 0
+%define CONFIG_V4L2_INDEV 0
+%define CONFIG_VFWCAP_INDEV 0
+%define CONFIG_XCBGRAB_INDEV 0
+%define CONFIG_LIBCDIO_INDEV 0
+%define CONFIG_LIBDC1394_INDEV 0
+%define CONFIG_ALSA_OUTDEV 0
+%define CONFIG_CACA_OUTDEV 0
+%define CONFIG_DECKLINK_OUTDEV 0
+%define CONFIG_FBDEV_OUTDEV 0
+%define CONFIG_OPENGL_OUTDEV 0
+%define CONFIG_OSS_OUTDEV 0
+%define CONFIG_PULSE_OUTDEV 0
+%define CONFIG_SDL2_OUTDEV 0
+%define CONFIG_SNDIO_OUTDEV 0
+%define CONFIG_V4L2_OUTDEV 0
+%define CONFIG_XV_OUTDEV 0
+%define CONFIG_ABENCH_FILTER 0
+%define CONFIG_ACOMPRESSOR_FILTER 0
+%define CONFIG_ACONTRAST_FILTER 0
+%define CONFIG_ACOPY_FILTER 0
+%define CONFIG_ACUE_FILTER 0
+%define CONFIG_ACROSSFADE_FILTER 0
+%define CONFIG_ACROSSOVER_FILTER 0
+%define CONFIG_ACRUSHER_FILTER 0
+%define CONFIG_ADECLICK_FILTER 0
+%define CONFIG_ADECLIP_FILTER 0
+%define CONFIG_ADELAY_FILTER 0
+%define CONFIG_ADERIVATIVE_FILTER 0
+%define CONFIG_AECHO_FILTER 0
+%define CONFIG_AEMPHASIS_FILTER 0
+%define CONFIG_AEVAL_FILTER 0
+%define CONFIG_AFADE_FILTER 0
+%define CONFIG_AFFTDN_FILTER 0
+%define CONFIG_AFFTFILT_FILTER 0
+%define CONFIG_AFIR_FILTER 0
+%define CONFIG_AFORMAT_FILTER 0
+%define CONFIG_AGATE_FILTER 0
+%define CONFIG_AIIR_FILTER 0
+%define CONFIG_AINTEGRAL_FILTER 0
+%define CONFIG_AINTERLEAVE_FILTER 0
+%define CONFIG_ALIMITER_FILTER 0
+%define CONFIG_ALLPASS_FILTER 0
+%define CONFIG_ALOOP_FILTER 0
+%define CONFIG_AMERGE_FILTER 0
+%define CONFIG_AMETADATA_FILTER 0
+%define CONFIG_AMIX_FILTER 0
+%define CONFIG_AMULTIPLY_FILTER 0
+%define CONFIG_ANEQUALIZER_FILTER 0
+%define CONFIG_ANLMDN_FILTER 0
+%define CONFIG_ANLMS_FILTER 0
+%define CONFIG_ANULL_FILTER 0
+%define CONFIG_APAD_FILTER 0
+%define CONFIG_APERMS_FILTER 0
+%define CONFIG_APHASER_FILTER 0
+%define CONFIG_APULSATOR_FILTER 0
+%define CONFIG_AREALTIME_FILTER 0
+%define CONFIG_ARESAMPLE_FILTER 0
+%define CONFIG_AREVERSE_FILTER 0
+%define CONFIG_ARNNDN_FILTER 0
+%define CONFIG_ASELECT_FILTER 0
+%define CONFIG_ASENDCMD_FILTER 0
+%define CONFIG_ASETNSAMPLES_FILTER 0
+%define CONFIG_ASETPTS_FILTER 0
+%define CONFIG_ASETRATE_FILTER 0
+%define CONFIG_ASETTB_FILTER 0
+%define CONFIG_ASHOWINFO_FILTER 0
+%define CONFIG_ASIDEDATA_FILTER 0
+%define CONFIG_ASOFTCLIP_FILTER 0
+%define CONFIG_ASPLIT_FILTER 0
+%define CONFIG_ASR_FILTER 0
+%define CONFIG_ASTATS_FILTER 0
+%define CONFIG_ASTREAMSELECT_FILTER 0
+%define CONFIG_ATEMPO_FILTER 0
+%define CONFIG_ATRIM_FILTER 0
+%define CONFIG_AXCORRELATE_FILTER 0
+%define CONFIG_AZMQ_FILTER 0
+%define CONFIG_BANDPASS_FILTER 0
+%define CONFIG_BANDREJECT_FILTER 0
+%define CONFIG_BASS_FILTER 0
+%define CONFIG_BIQUAD_FILTER 0
+%define CONFIG_BS2B_FILTER 0
+%define CONFIG_CHROMABER_VULKAN_FILTER 0
+%define CONFIG_CHANNELMAP_FILTER 0
+%define CONFIG_CHANNELSPLIT_FILTER 0
+%define CONFIG_CHORUS_FILTER 0
+%define CONFIG_COMPAND_FILTER 0
+%define CONFIG_COMPENSATIONDELAY_FILTER 0
+%define CONFIG_CROSSFEED_FILTER 0
+%define CONFIG_CRYSTALIZER_FILTER 0
+%define CONFIG_DCSHIFT_FILTER 0
+%define CONFIG_DEESSER_FILTER 0
+%define CONFIG_DRMETER_FILTER 0
+%define CONFIG_DYNAUDNORM_FILTER 0
+%define CONFIG_EARWAX_FILTER 0
+%define CONFIG_EBUR128_FILTER 0
+%define CONFIG_EQUALIZER_FILTER 0
+%define CONFIG_EXTRASTEREO_FILTER 0
+%define CONFIG_FIREQUALIZER_FILTER 0
+%define CONFIG_FLANGER_FILTER 0
+%define CONFIG_HAAS_FILTER 0
+%define CONFIG_HDCD_FILTER 0
+%define CONFIG_HEADPHONE_FILTER 0
+%define CONFIG_HIGHPASS_FILTER 0
+%define CONFIG_HIGHSHELF_FILTER 0
+%define CONFIG_JOIN_FILTER 0
+%define CONFIG_LADSPA_FILTER 0
+%define CONFIG_LOUDNORM_FILTER 0
+%define CONFIG_LOWPASS_FILTER 0
+%define CONFIG_LOWSHELF_FILTER 0
+%define CONFIG_LV2_FILTER 0
+%define CONFIG_MCOMPAND_FILTER 0
+%define CONFIG_PAN_FILTER 0
+%define CONFIG_REPLAYGAIN_FILTER 0
+%define CONFIG_RESAMPLE_FILTER 0
+%define CONFIG_RUBBERBAND_FILTER 0
+%define CONFIG_SIDECHAINCOMPRESS_FILTER 0
+%define CONFIG_SIDECHAINGATE_FILTER 0
+%define CONFIG_SILENCEDETECT_FILTER 0
+%define CONFIG_SILENCEREMOVE_FILTER 0
+%define CONFIG_SOFALIZER_FILTER 0
+%define CONFIG_STEREOTOOLS_FILTER 0
+%define CONFIG_STEREOWIDEN_FILTER 0
+%define CONFIG_SUPEREQUALIZER_FILTER 0
+%define CONFIG_SURROUND_FILTER 0
+%define CONFIG_TREBLE_FILTER 0
+%define CONFIG_TREMOLO_FILTER 0
+%define CONFIG_VIBRATO_FILTER 0
+%define CONFIG_VOLUME_FILTER 0
+%define CONFIG_VOLUMEDETECT_FILTER 0
+%define CONFIG_AEVALSRC_FILTER 0
+%define CONFIG_AFIRSRC_FILTER 0
+%define CONFIG_ANOISESRC_FILTER 0
+%define CONFIG_ANULLSRC_FILTER 0
+%define CONFIG_FLITE_FILTER 0
+%define CONFIG_HILBERT_FILTER 0
+%define CONFIG_SINC_FILTER 0
+%define CONFIG_SINE_FILTER 0
+%define CONFIG_ANULLSINK_FILTER 0
+%define CONFIG_ADDROI_FILTER 0
+%define CONFIG_ALPHAEXTRACT_FILTER 0
+%define CONFIG_ALPHAMERGE_FILTER 0
+%define CONFIG_AMPLIFY_FILTER 0
+%define CONFIG_ASS_FILTER 0
+%define CONFIG_ATADENOISE_FILTER 0
+%define CONFIG_AVGBLUR_FILTER 0
+%define CONFIG_AVGBLUR_OPENCL_FILTER 0
+%define CONFIG_AVGBLUR_VULKAN_FILTER 0
+%define CONFIG_BBOX_FILTER 0
+%define CONFIG_BENCH_FILTER 0
+%define CONFIG_BILATERAL_FILTER 0
+%define CONFIG_BITPLANENOISE_FILTER 0
+%define CONFIG_BLACKDETECT_FILTER 0
+%define CONFIG_BLACKFRAME_FILTER 0
+%define CONFIG_BLEND_FILTER 0
+%define CONFIG_BM3D_FILTER 0
+%define CONFIG_BOXBLUR_FILTER 0
+%define CONFIG_BOXBLUR_OPENCL_FILTER 0
+%define CONFIG_BWDIF_FILTER 0
+%define CONFIG_CAS_FILTER 0
+%define CONFIG_CHROMAHOLD_FILTER 0
+%define CONFIG_CHROMAKEY_FILTER 0
+%define CONFIG_CHROMASHIFT_FILTER 0
+%define CONFIG_CIESCOPE_FILTER 0
+%define CONFIG_CODECVIEW_FILTER 0
+%define CONFIG_COLORBALANCE_FILTER 0
+%define CONFIG_COLORCHANNELMIXER_FILTER 0
+%define CONFIG_COLORKEY_FILTER 0
+%define CONFIG_COLORKEY_OPENCL_FILTER 0
+%define CONFIG_COLORHOLD_FILTER 0
+%define CONFIG_COLORLEVELS_FILTER 0
+%define CONFIG_COLORMATRIX_FILTER 0
+%define CONFIG_COLORSPACE_FILTER 0
+%define CONFIG_CONVOLUTION_FILTER 0
+%define CONFIG_CONVOLUTION_OPENCL_FILTER 0
+%define CONFIG_CONVOLVE_FILTER 0
+%define CONFIG_COPY_FILTER 0
+%define CONFIG_COREIMAGE_FILTER 0
+%define CONFIG_COVER_RECT_FILTER 0
+%define CONFIG_CROP_FILTER 0
+%define CONFIG_CROPDETECT_FILTER 0
+%define CONFIG_CUE_FILTER 0
+%define CONFIG_CURVES_FILTER 0
+%define CONFIG_DATASCOPE_FILTER 0
+%define CONFIG_DCTDNOIZ_FILTER 0
+%define CONFIG_DEBAND_FILTER 0
+%define CONFIG_DEBLOCK_FILTER 0
+%define CONFIG_DECIMATE_FILTER 0
+%define CONFIG_DECONVOLVE_FILTER 0
+%define CONFIG_DEDOT_FILTER 0
+%define CONFIG_DEFLATE_FILTER 0
+%define CONFIG_DEFLICKER_FILTER 0
+%define CONFIG_DEINTERLACE_QSV_FILTER 0
+%define CONFIG_DEINTERLACE_VAAPI_FILTER 0
+%define CONFIG_DEJUDDER_FILTER 0
+%define CONFIG_DELOGO_FILTER 0
+%define CONFIG_DENOISE_VAAPI_FILTER 0
+%define CONFIG_DERAIN_FILTER 0
+%define CONFIG_DESHAKE_FILTER 0
+%define CONFIG_DESHAKE_OPENCL_FILTER 0
+%define CONFIG_DESPILL_FILTER 0
+%define CONFIG_DETELECINE_FILTER 0
+%define CONFIG_DILATION_FILTER 0
+%define CONFIG_DILATION_OPENCL_FILTER 0
+%define CONFIG_DISPLACE_FILTER 0
+%define CONFIG_DNN_PROCESSING_FILTER 0
+%define CONFIG_DOUBLEWEAVE_FILTER 0
+%define CONFIG_DRAWBOX_FILTER 0
+%define CONFIG_DRAWGRAPH_FILTER 0
+%define CONFIG_DRAWGRID_FILTER 0
+%define CONFIG_DRAWTEXT_FILTER 0
+%define CONFIG_EDGEDETECT_FILTER 0
+%define CONFIG_ELBG_FILTER 0
+%define CONFIG_ENTROPY_FILTER 0
+%define CONFIG_EQ_FILTER 0
+%define CONFIG_EROSION_FILTER 0
+%define CONFIG_EROSION_OPENCL_FILTER 0
+%define CONFIG_EXTRACTPLANES_FILTER 0
+%define CONFIG_FADE_FILTER 0
+%define CONFIG_FFTDNOIZ_FILTER 0
+%define CONFIG_FFTFILT_FILTER 0
+%define CONFIG_FIELD_FILTER 0
+%define CONFIG_FIELDHINT_FILTER 0
+%define CONFIG_FIELDMATCH_FILTER 0
+%define CONFIG_FIELDORDER_FILTER 0
+%define CONFIG_FILLBORDERS_FILTER 0
+%define CONFIG_FIND_RECT_FILTER 0
+%define CONFIG_FLOODFILL_FILTER 0
+%define CONFIG_FORMAT_FILTER 0
+%define CONFIG_FPS_FILTER 0
+%define CONFIG_FRAMEPACK_FILTER 0
+%define CONFIG_FRAMERATE_FILTER 0
+%define CONFIG_FRAMESTEP_FILTER 0
+%define CONFIG_FREEZEDETECT_FILTER 0
+%define CONFIG_FREEZEFRAMES_FILTER 0
+%define CONFIG_FREI0R_FILTER 0
+%define CONFIG_FSPP_FILTER 0
+%define CONFIG_GBLUR_FILTER 0
+%define CONFIG_GEQ_FILTER 0
+%define CONFIG_GRADFUN_FILTER 0
+%define CONFIG_GRAPHMONITOR_FILTER 0
+%define CONFIG_GREYEDGE_FILTER 0
+%define CONFIG_HALDCLUT_FILTER 0
+%define CONFIG_HFLIP_FILTER 0
+%define CONFIG_HISTEQ_FILTER 0
+%define CONFIG_HISTOGRAM_FILTER 0
+%define CONFIG_HQDN3D_FILTER 0
+%define CONFIG_HQX_FILTER 0
+%define CONFIG_HSTACK_FILTER 0
+%define CONFIG_HUE_FILTER 0
+%define CONFIG_HWDOWNLOAD_FILTER 0
+%define CONFIG_HWMAP_FILTER 0
+%define CONFIG_HWUPLOAD_FILTER 0
+%define CONFIG_HWUPLOAD_CUDA_FILTER 0
+%define CONFIG_HYSTERESIS_FILTER 0
+%define CONFIG_IDET_FILTER 0
+%define CONFIG_IL_FILTER 0
+%define CONFIG_INFLATE_FILTER 0
+%define CONFIG_INTERLACE_FILTER 0
+%define CONFIG_INTERLEAVE_FILTER 0
+%define CONFIG_KERNDEINT_FILTER 0
+%define CONFIG_LAGFUN_FILTER 0
+%define CONFIG_LENSCORRECTION_FILTER 0
+%define CONFIG_LENSFUN_FILTER 0
+%define CONFIG_LIBVMAF_FILTER 0
+%define CONFIG_LIMITER_FILTER 0
+%define CONFIG_LOOP_FILTER 0
+%define CONFIG_LUMAKEY_FILTER 0
+%define CONFIG_LUT_FILTER 0
+%define CONFIG_LUT1D_FILTER 0
+%define CONFIG_LUT2_FILTER 0
+%define CONFIG_LUT3D_FILTER 0
+%define CONFIG_LUTRGB_FILTER 0
+%define CONFIG_LUTYUV_FILTER 0
+%define CONFIG_MASKEDCLAMP_FILTER 0
+%define CONFIG_MASKEDMAX_FILTER 0
+%define CONFIG_MASKEDMERGE_FILTER 0
+%define CONFIG_MASKEDMIN_FILTER 0
+%define CONFIG_MASKEDTHRESHOLD_FILTER 0
+%define CONFIG_MASKFUN_FILTER 0
+%define CONFIG_MCDEINT_FILTER 0
+%define CONFIG_MEDIAN_FILTER 0
+%define CONFIG_MERGEPLANES_FILTER 0
+%define CONFIG_MESTIMATE_FILTER 0
+%define CONFIG_METADATA_FILTER 0
+%define CONFIG_MIDEQUALIZER_FILTER 0
+%define CONFIG_MINTERPOLATE_FILTER 0
+%define CONFIG_MIX_FILTER 0
+%define CONFIG_MPDECIMATE_FILTER 0
+%define CONFIG_NEGATE_FILTER 0
+%define CONFIG_NLMEANS_FILTER 0
+%define CONFIG_NLMEANS_OPENCL_FILTER 0
+%define CONFIG_NNEDI_FILTER 0
+%define CONFIG_NOFORMAT_FILTER 0
+%define CONFIG_NOISE_FILTER 0
+%define CONFIG_NORMALIZE_FILTER 0
+%define CONFIG_NULL_FILTER 0
+%define CONFIG_OCR_FILTER 0
+%define CONFIG_OCV_FILTER 0
+%define CONFIG_OSCILLOSCOPE_FILTER 0
+%define CONFIG_OVERLAY_FILTER 0
+%define CONFIG_OVERLAY_OPENCL_FILTER 0
+%define CONFIG_OVERLAY_QSV_FILTER 0
+%define CONFIG_OVERLAY_VULKAN_FILTER 0
+%define CONFIG_OVERLAY_CUDA_FILTER 0
+%define CONFIG_OWDENOISE_FILTER 0
+%define CONFIG_PAD_FILTER 0
+%define CONFIG_PAD_OPENCL_FILTER 0
+%define CONFIG_PALETTEGEN_FILTER 0
+%define CONFIG_PALETTEUSE_FILTER 0
+%define CONFIG_PERMS_FILTER 0
+%define CONFIG_PERSPECTIVE_FILTER 0
+%define CONFIG_PHASE_FILTER 0
+%define CONFIG_PHOTOSENSITIVITY_FILTER 0
+%define CONFIG_PIXDESCTEST_FILTER 0
+%define CONFIG_PIXSCOPE_FILTER 0
+%define CONFIG_PP_FILTER 0
+%define CONFIG_PP7_FILTER 0
+%define CONFIG_PREMULTIPLY_FILTER 0
+%define CONFIG_PREWITT_FILTER 0
+%define CONFIG_PREWITT_OPENCL_FILTER 0
+%define CONFIG_PROCAMP_VAAPI_FILTER 0
+%define CONFIG_PROGRAM_OPENCL_FILTER 0
+%define CONFIG_PSEUDOCOLOR_FILTER 0
+%define CONFIG_PSNR_FILTER 0
+%define CONFIG_PULLUP_FILTER 0
+%define CONFIG_QP_FILTER 0
+%define CONFIG_RANDOM_FILTER 0
+%define CONFIG_READEIA608_FILTER 0
+%define CONFIG_READVITC_FILTER 0
+%define CONFIG_REALTIME_FILTER 0
+%define CONFIG_REMAP_FILTER 0
+%define CONFIG_REMOVEGRAIN_FILTER 0
+%define CONFIG_REMOVELOGO_FILTER 0
+%define CONFIG_REPEATFIELDS_FILTER 0
+%define CONFIG_REVERSE_FILTER 0
+%define CONFIG_RGBASHIFT_FILTER 0
+%define CONFIG_ROBERTS_FILTER 0
+%define CONFIG_ROBERTS_OPENCL_FILTER 0
+%define CONFIG_ROTATE_FILTER 0
+%define CONFIG_SAB_FILTER 0
+%define CONFIG_SCALE_FILTER 0
+%define CONFIG_SCALE_CUDA_FILTER 0
+%define CONFIG_SCALE_NPP_FILTER 0
+%define CONFIG_SCALE_QSV_FILTER 0
+%define CONFIG_SCALE_VAAPI_FILTER 0
+%define CONFIG_SCALE_VULKAN_FILTER 0
+%define CONFIG_SCALE2REF_FILTER 0
+%define CONFIG_SCROLL_FILTER 0
+%define CONFIG_SELECT_FILTER 0
+%define CONFIG_SELECTIVECOLOR_FILTER 0
+%define CONFIG_SENDCMD_FILTER 0
+%define CONFIG_SEPARATEFIELDS_FILTER 0
+%define CONFIG_SETDAR_FILTER 0
+%define CONFIG_SETFIELD_FILTER 0
+%define CONFIG_SETPARAMS_FILTER 0
+%define CONFIG_SETPTS_FILTER 0
+%define CONFIG_SETRANGE_FILTER 0
+%define CONFIG_SETSAR_FILTER 0
+%define CONFIG_SETTB_FILTER 0
+%define CONFIG_SHARPNESS_VAAPI_FILTER 0
+%define CONFIG_SHOWINFO_FILTER 0
+%define CONFIG_SHOWPALETTE_FILTER 0
+%define CONFIG_SHUFFLEFRAMES_FILTER 0
+%define CONFIG_SHUFFLEPLANES_FILTER 0
+%define CONFIG_SIDEDATA_FILTER 0
+%define CONFIG_SIGNALSTATS_FILTER 0
+%define CONFIG_SIGNATURE_FILTER 0
+%define CONFIG_SMARTBLUR_FILTER 0
+%define CONFIG_SOBEL_FILTER 0
+%define CONFIG_SOBEL_OPENCL_FILTER 0
+%define CONFIG_SPLIT_FILTER 0
+%define CONFIG_SPP_FILTER 0
+%define CONFIG_SR_FILTER 0
+%define CONFIG_SSIM_FILTER 0
+%define CONFIG_STEREO3D_FILTER 0
+%define CONFIG_STREAMSELECT_FILTER 0
+%define CONFIG_SUBTITLES_FILTER 0
+%define CONFIG_SUPER2XSAI_FILTER 0
+%define CONFIG_SWAPRECT_FILTER 0
+%define CONFIG_SWAPUV_FILTER 0
+%define CONFIG_TBLEND_FILTER 0
+%define CONFIG_TELECINE_FILTER 0
+%define CONFIG_THISTOGRAM_FILTER 0
+%define CONFIG_THRESHOLD_FILTER 0
+%define CONFIG_THUMBNAIL_FILTER 0
+%define CONFIG_THUMBNAIL_CUDA_FILTER 0
+%define CONFIG_TILE_FILTER 0
+%define CONFIG_TINTERLACE_FILTER 0
+%define CONFIG_TLUT2_FILTER 0
+%define CONFIG_TMEDIAN_FILTER 0
+%define CONFIG_TMIX_FILTER 0
+%define CONFIG_TONEMAP_FILTER 0
+%define CONFIG_TONEMAP_OPENCL_FILTER 0
+%define CONFIG_TONEMAP_VAAPI_FILTER 0
+%define CONFIG_TPAD_FILTER 0
+%define CONFIG_TRANSPOSE_FILTER 0
+%define CONFIG_TRANSPOSE_NPP_FILTER 0
+%define CONFIG_TRANSPOSE_OPENCL_FILTER 0
+%define CONFIG_TRANSPOSE_VAAPI_FILTER 0
+%define CONFIG_TRIM_FILTER 0
+%define CONFIG_UNPREMULTIPLY_FILTER 0
+%define CONFIG_UNSHARP_FILTER 0
+%define CONFIG_UNSHARP_OPENCL_FILTER 0
+%define CONFIG_USPP_FILTER 0
+%define CONFIG_V360_FILTER 0
+%define CONFIG_VAGUEDENOISER_FILTER 0
+%define CONFIG_VECTORSCOPE_FILTER 0
+%define CONFIG_VFLIP_FILTER 0
+%define CONFIG_VFRDET_FILTER 0
+%define CONFIG_VIBRANCE_FILTER 0
+%define CONFIG_VIDSTABDETECT_FILTER 0
+%define CONFIG_VIDSTABTRANSFORM_FILTER 0
+%define CONFIG_VIGNETTE_FILTER 0
+%define CONFIG_VMAFMOTION_FILTER 0
+%define CONFIG_VPP_QSV_FILTER 0
+%define CONFIG_VSTACK_FILTER 0
+%define CONFIG_W3FDIF_FILTER 0
+%define CONFIG_WAVEFORM_FILTER 0
+%define CONFIG_WEAVE_FILTER 0
+%define CONFIG_XBR_FILTER 0
+%define CONFIG_XFADE_FILTER 0
+%define CONFIG_XFADE_OPENCL_FILTER 0
+%define CONFIG_XMEDIAN_FILTER 0
+%define CONFIG_XSTACK_FILTER 0
+%define CONFIG_YADIF_FILTER 0
+%define CONFIG_YADIF_CUDA_FILTER 0
+%define CONFIG_YAEPBLUR_FILTER 0
+%define CONFIG_ZMQ_FILTER 0
+%define CONFIG_ZOOMPAN_FILTER 0
+%define CONFIG_ZSCALE_FILTER 0
+%define CONFIG_ALLRGB_FILTER 0
+%define CONFIG_ALLYUV_FILTER 0
+%define CONFIG_CELLAUTO_FILTER 0
+%define CONFIG_COLOR_FILTER 0
+%define CONFIG_COREIMAGESRC_FILTER 0
+%define CONFIG_FREI0R_SRC_FILTER 0
+%define CONFIG_HALDCLUTSRC_FILTER 0
+%define CONFIG_LIFE_FILTER 0
+%define CONFIG_MANDELBROT_FILTER 0
+%define CONFIG_MPTESTSRC_FILTER 0
+%define CONFIG_NULLSRC_FILTER 0
+%define CONFIG_OPENCLSRC_FILTER 0
+%define CONFIG_PAL75BARS_FILTER 0
+%define CONFIG_PAL100BARS_FILTER 0
+%define CONFIG_RGBTESTSRC_FILTER 0
+%define CONFIG_SIERPINSKI_FILTER 0
+%define CONFIG_SMPTEBARS_FILTER 0
+%define CONFIG_SMPTEHDBARS_FILTER 0
+%define CONFIG_TESTSRC_FILTER 0
+%define CONFIG_TESTSRC2_FILTER 0
+%define CONFIG_YUVTESTSRC_FILTER 0
+%define CONFIG_NULLSINK_FILTER 0
+%define CONFIG_ABITSCOPE_FILTER 0
+%define CONFIG_ADRAWGRAPH_FILTER 0
+%define CONFIG_AGRAPHMONITOR_FILTER 0
+%define CONFIG_AHISTOGRAM_FILTER 0
+%define CONFIG_APHASEMETER_FILTER 0
+%define CONFIG_AVECTORSCOPE_FILTER 0
+%define CONFIG_CONCAT_FILTER 0
+%define CONFIG_SHOWCQT_FILTER 0
+%define CONFIG_SHOWFREQS_FILTER 0
+%define CONFIG_SHOWSPATIAL_FILTER 0
+%define CONFIG_SHOWSPECTRUM_FILTER 0
+%define CONFIG_SHOWSPECTRUMPIC_FILTER 0
+%define CONFIG_SHOWVOLUME_FILTER 0
+%define CONFIG_SHOWWAVES_FILTER 0
+%define CONFIG_SHOWWAVESPIC_FILTER 0
+%define CONFIG_SPECTRUMSYNTH_FILTER 0
+%define CONFIG_AMOVIE_FILTER 0
+%define CONFIG_MOVIE_FILTER 0
+%define CONFIG_AFIFO_FILTER 0
+%define CONFIG_FIFO_FILTER 0
+%define CONFIG_AA_DEMUXER 0
+%define CONFIG_AAC_DEMUXER 0
+%define CONFIG_AC3_DEMUXER 0
+%define CONFIG_ACM_DEMUXER 0
+%define CONFIG_ACT_DEMUXER 0
+%define CONFIG_ADF_DEMUXER 0
+%define CONFIG_ADP_DEMUXER 0
+%define CONFIG_ADS_DEMUXER 0
+%define CONFIG_ADX_DEMUXER 0
+%define CONFIG_AEA_DEMUXER 0
+%define CONFIG_AFC_DEMUXER 0
+%define CONFIG_AIFF_DEMUXER 0
+%define CONFIG_AIX_DEMUXER 0
+%define CONFIG_ALP_DEMUXER 0
+%define CONFIG_AMR_DEMUXER 0
+%define CONFIG_AMRNB_DEMUXER 0
+%define CONFIG_AMRWB_DEMUXER 0
+%define CONFIG_ANM_DEMUXER 0
+%define CONFIG_APC_DEMUXER 0
+%define CONFIG_APE_DEMUXER 0
+%define CONFIG_APM_DEMUXER 0
+%define CONFIG_APNG_DEMUXER 0
+%define CONFIG_APTX_DEMUXER 0
+%define CONFIG_APTX_HD_DEMUXER 0
+%define CONFIG_AQTITLE_DEMUXER 0
+%define CONFIG_ARGO_ASF_DEMUXER 0
+%define CONFIG_ASF_DEMUXER 0
+%define CONFIG_ASF_O_DEMUXER 0
+%define CONFIG_ASS_DEMUXER 0
+%define CONFIG_AST_DEMUXER 0
+%define CONFIG_AU_DEMUXER 0
+%define CONFIG_AV1_DEMUXER 0
+%define CONFIG_AVI_DEMUXER 0
+%define CONFIG_AVISYNTH_DEMUXER 0
+%define CONFIG_AVR_DEMUXER 0
+%define CONFIG_AVS_DEMUXER 0
+%define CONFIG_AVS2_DEMUXER 0
+%define CONFIG_BETHSOFTVID_DEMUXER 0
+%define CONFIG_BFI_DEMUXER 0
+%define CONFIG_BINTEXT_DEMUXER 0
+%define CONFIG_BINK_DEMUXER 0
+%define CONFIG_BIT_DEMUXER 0
+%define CONFIG_BMV_DEMUXER 0
+%define CONFIG_BFSTM_DEMUXER 0
+%define CONFIG_BRSTM_DEMUXER 0
+%define CONFIG_BOA_DEMUXER 0
+%define CONFIG_C93_DEMUXER 0
+%define CONFIG_CAF_DEMUXER 0
+%define CONFIG_CAVSVIDEO_DEMUXER 0
+%define CONFIG_CDG_DEMUXER 0
+%define CONFIG_CDXL_DEMUXER 0
+%define CONFIG_CINE_DEMUXER 0
+%define CONFIG_CODEC2_DEMUXER 0
+%define CONFIG_CODEC2RAW_DEMUXER 0
+%define CONFIG_CONCAT_DEMUXER 0
+%define CONFIG_DASH_DEMUXER 0
+%define CONFIG_DATA_DEMUXER 0
+%define CONFIG_DAUD_DEMUXER 0
+%define CONFIG_DCSTR_DEMUXER 0
+%define CONFIG_DERF_DEMUXER 0
+%define CONFIG_DFA_DEMUXER 0
+%define CONFIG_DHAV_DEMUXER 0
+%define CONFIG_DIRAC_DEMUXER 0
+%define CONFIG_DNXHD_DEMUXER 0
+%define CONFIG_DSF_DEMUXER 0
+%define CONFIG_DSICIN_DEMUXER 0
+%define CONFIG_DSS_DEMUXER 0
+%define CONFIG_DTS_DEMUXER 0
+%define CONFIG_DTSHD_DEMUXER 0
+%define CONFIG_DV_DEMUXER 0
+%define CONFIG_DVBSUB_DEMUXER 0
+%define CONFIG_DVBTXT_DEMUXER 0
+%define CONFIG_DXA_DEMUXER 0
+%define CONFIG_EA_DEMUXER 0
+%define CONFIG_EA_CDATA_DEMUXER 0
+%define CONFIG_EAC3_DEMUXER 0
+%define CONFIG_EPAF_DEMUXER 0
+%define CONFIG_FFMETADATA_DEMUXER 0
+%define CONFIG_FILMSTRIP_DEMUXER 0
+%define CONFIG_FITS_DEMUXER 0
+%define CONFIG_FLAC_DEMUXER 1
+%define CONFIG_FLIC_DEMUXER 0
+%define CONFIG_FLV_DEMUXER 0
+%define CONFIG_LIVE_FLV_DEMUXER 0
+%define CONFIG_FOURXM_DEMUXER 0
+%define CONFIG_FRM_DEMUXER 0
+%define CONFIG_FSB_DEMUXER 0
+%define CONFIG_FWSE_DEMUXER 0
+%define CONFIG_G722_DEMUXER 0
+%define CONFIG_G723_1_DEMUXER 0
+%define CONFIG_G726_DEMUXER 0
+%define CONFIG_G726LE_DEMUXER 0
+%define CONFIG_G729_DEMUXER 0
+%define CONFIG_GDV_DEMUXER 0
+%define CONFIG_GENH_DEMUXER 0
+%define CONFIG_GIF_DEMUXER 0
+%define CONFIG_GSM_DEMUXER 0
+%define CONFIG_GXF_DEMUXER 0
+%define CONFIG_H261_DEMUXER 0
+%define CONFIG_H263_DEMUXER 0
+%define CONFIG_H264_DEMUXER 0
+%define CONFIG_HCA_DEMUXER 0
+%define CONFIG_HCOM_DEMUXER 0
+%define CONFIG_HEVC_DEMUXER 0
+%define CONFIG_HLS_DEMUXER 0
+%define CONFIG_HNM_DEMUXER 0
+%define CONFIG_ICO_DEMUXER 0
+%define CONFIG_IDCIN_DEMUXER 0
+%define CONFIG_IDF_DEMUXER 0
+%define CONFIG_IFF_DEMUXER 0
+%define CONFIG_IFV_DEMUXER 0
+%define CONFIG_ILBC_DEMUXER 0
+%define CONFIG_IMAGE2_DEMUXER 0
+%define CONFIG_IMAGE2PIPE_DEMUXER 0
+%define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0
+%define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0
+%define CONFIG_INGENIENT_DEMUXER 0
+%define CONFIG_IPMOVIE_DEMUXER 0
+%define CONFIG_IRCAM_DEMUXER 0
+%define CONFIG_ISS_DEMUXER 0
+%define CONFIG_IV8_DEMUXER 0
+%define CONFIG_IVF_DEMUXER 0
+%define CONFIG_IVR_DEMUXER 0
+%define CONFIG_JACOSUB_DEMUXER 0
+%define CONFIG_JV_DEMUXER 0
+%define CONFIG_KUX_DEMUXER 0
+%define CONFIG_KVAG_DEMUXER 0
+%define CONFIG_LMLM4_DEMUXER 0
+%define CONFIG_LOAS_DEMUXER 0
+%define CONFIG_LRC_DEMUXER 0
+%define CONFIG_LVF_DEMUXER 0
+%define CONFIG_LXF_DEMUXER 0
+%define CONFIG_M4V_DEMUXER 0
+%define CONFIG_MATROSKA_DEMUXER 1
+%define CONFIG_MGSTS_DEMUXER 0
+%define CONFIG_MICRODVD_DEMUXER 0
+%define CONFIG_MJPEG_DEMUXER 0
+%define CONFIG_MJPEG_2000_DEMUXER 0
+%define CONFIG_MLP_DEMUXER 0
+%define CONFIG_MLV_DEMUXER 0
+%define CONFIG_MM_DEMUXER 0
+%define CONFIG_MMF_DEMUXER 0
+%define CONFIG_MOV_DEMUXER 1
+%define CONFIG_MP3_DEMUXER 1
+%define CONFIG_MPC_DEMUXER 0
+%define CONFIG_MPC8_DEMUXER 0
+%define CONFIG_MPEGPS_DEMUXER 0
+%define CONFIG_MPEGTS_DEMUXER 0
+%define CONFIG_MPEGTSRAW_DEMUXER 0
+%define CONFIG_MPEGVIDEO_DEMUXER 0
+%define CONFIG_MPJPEG_DEMUXER 0
+%define CONFIG_MPL2_DEMUXER 0
+%define CONFIG_MPSUB_DEMUXER 0
+%define CONFIG_MSF_DEMUXER 0
+%define CONFIG_MSNWC_TCP_DEMUXER 0
+%define CONFIG_MTAF_DEMUXER 0
+%define CONFIG_MTV_DEMUXER 0
+%define CONFIG_MUSX_DEMUXER 0
+%define CONFIG_MV_DEMUXER 0
+%define CONFIG_MVI_DEMUXER 0
+%define CONFIG_MXF_DEMUXER 0
+%define CONFIG_MXG_DEMUXER 0
+%define CONFIG_NC_DEMUXER 0
+%define CONFIG_NISTSPHERE_DEMUXER 0
+%define CONFIG_NSP_DEMUXER 0
+%define CONFIG_NSV_DEMUXER 0
+%define CONFIG_NUT_DEMUXER 0
+%define CONFIG_NUV_DEMUXER 0
+%define CONFIG_OGG_DEMUXER 1
+%define CONFIG_OMA_DEMUXER 0
+%define CONFIG_PAF_DEMUXER 0
+%define CONFIG_PCM_ALAW_DEMUXER 0
+%define CONFIG_PCM_MULAW_DEMUXER 0
+%define CONFIG_PCM_VIDC_DEMUXER 0
+%define CONFIG_PCM_F64BE_DEMUXER 0
+%define CONFIG_PCM_F64LE_DEMUXER 0
+%define CONFIG_PCM_F32BE_DEMUXER 0
+%define CONFIG_PCM_F32LE_DEMUXER 0
+%define CONFIG_PCM_S32BE_DEMUXER 0
+%define CONFIG_PCM_S32LE_DEMUXER 0
+%define CONFIG_PCM_S24BE_DEMUXER 0
+%define CONFIG_PCM_S24LE_DEMUXER 0
+%define CONFIG_PCM_S16BE_DEMUXER 0
+%define CONFIG_PCM_S16LE_DEMUXER 0
+%define CONFIG_PCM_S8_DEMUXER 0
+%define CONFIG_PCM_U32BE_DEMUXER 0
+%define CONFIG_PCM_U32LE_DEMUXER 0
+%define CONFIG_PCM_U24BE_DEMUXER 0
+%define CONFIG_PCM_U24LE_DEMUXER 0
+%define CONFIG_PCM_U16BE_DEMUXER 0
+%define CONFIG_PCM_U16LE_DEMUXER 0
+%define CONFIG_PCM_U8_DEMUXER 0
+%define CONFIG_PJS_DEMUXER 0
+%define CONFIG_PMP_DEMUXER 0
+%define CONFIG_PVA_DEMUXER 0
+%define CONFIG_PVF_DEMUXER 0
+%define CONFIG_QCP_DEMUXER 0
+%define CONFIG_R3D_DEMUXER 0
+%define CONFIG_RAWVIDEO_DEMUXER 0
+%define CONFIG_REALTEXT_DEMUXER 0
+%define CONFIG_REDSPARK_DEMUXER 0
+%define CONFIG_RL2_DEMUXER 0
+%define CONFIG_RM_DEMUXER 0
+%define CONFIG_ROQ_DEMUXER 0
+%define CONFIG_RPL_DEMUXER 0
+%define CONFIG_RSD_DEMUXER 0
+%define CONFIG_RSO_DEMUXER 0
+%define CONFIG_RTP_DEMUXER 0
+%define CONFIG_RTSP_DEMUXER 0
+%define CONFIG_S337M_DEMUXER 0
+%define CONFIG_SAMI_DEMUXER 0
+%define CONFIG_SAP_DEMUXER 0
+%define CONFIG_SBC_DEMUXER 0
+%define CONFIG_SBG_DEMUXER 0
+%define CONFIG_SCC_DEMUXER 0
+%define CONFIG_SDP_DEMUXER 0
+%define CONFIG_SDR2_DEMUXER 0
+%define CONFIG_SDS_DEMUXER 0
+%define CONFIG_SDX_DEMUXER 0
+%define CONFIG_SEGAFILM_DEMUXER 0
+%define CONFIG_SER_DEMUXER 0
+%define CONFIG_SHORTEN_DEMUXER 0
+%define CONFIG_SIFF_DEMUXER 0
+%define CONFIG_SLN_DEMUXER 0
+%define CONFIG_SMACKER_DEMUXER 0
+%define CONFIG_SMJPEG_DEMUXER 0
+%define CONFIG_SMUSH_DEMUXER 0
+%define CONFIG_SOL_DEMUXER 0
+%define CONFIG_SOX_DEMUXER 0
+%define CONFIG_SPDIF_DEMUXER 0
+%define CONFIG_SRT_DEMUXER 0
+%define CONFIG_STR_DEMUXER 0
+%define CONFIG_STL_DEMUXER 0
+%define CONFIG_SUBVIEWER1_DEMUXER 0
+%define CONFIG_SUBVIEWER_DEMUXER 0
+%define CONFIG_SUP_DEMUXER 0
+%define CONFIG_SVAG_DEMUXER 0
+%define CONFIG_SWF_DEMUXER 0
+%define CONFIG_TAK_DEMUXER 0
+%define CONFIG_TEDCAPTIONS_DEMUXER 0
+%define CONFIG_THP_DEMUXER 0
+%define CONFIG_THREEDOSTR_DEMUXER 0
+%define CONFIG_TIERTEXSEQ_DEMUXER 0
+%define CONFIG_TMV_DEMUXER 0
+%define CONFIG_TRUEHD_DEMUXER 0
+%define CONFIG_TTA_DEMUXER 0
+%define CONFIG_TXD_DEMUXER 0
+%define CONFIG_TTY_DEMUXER 0
+%define CONFIG_TY_DEMUXER 0
+%define CONFIG_V210_DEMUXER 0
+%define CONFIG_V210X_DEMUXER 0
+%define CONFIG_VAG_DEMUXER 0
+%define CONFIG_VC1_DEMUXER 0
+%define CONFIG_VC1T_DEMUXER 0
+%define CONFIG_VIVIDAS_DEMUXER 0
+%define CONFIG_VIVO_DEMUXER 0
+%define CONFIG_VMD_DEMUXER 0
+%define CONFIG_VOBSUB_DEMUXER 0
+%define CONFIG_VOC_DEMUXER 0
+%define CONFIG_VPK_DEMUXER 0
+%define CONFIG_VPLAYER_DEMUXER 0
+%define CONFIG_VQF_DEMUXER 0
+%define CONFIG_W64_DEMUXER 0
+%define CONFIG_WAV_DEMUXER 1
+%define CONFIG_WC3_DEMUXER 0
+%define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0
+%define CONFIG_WEBVTT_DEMUXER 0
+%define CONFIG_WSAUD_DEMUXER 0
+%define CONFIG_WSD_DEMUXER 0
+%define CONFIG_WSVQA_DEMUXER 0
+%define CONFIG_WTV_DEMUXER 0
+%define CONFIG_WVE_DEMUXER 0
+%define CONFIG_WV_DEMUXER 0
+%define CONFIG_XA_DEMUXER 0
+%define CONFIG_XBIN_DEMUXER 0
+%define CONFIG_XMV_DEMUXER 0
+%define CONFIG_XVAG_DEMUXER 0
+%define CONFIG_XWMA_DEMUXER 0
+%define CONFIG_YOP_DEMUXER 0
+%define CONFIG_YUV4MPEGPIPE_DEMUXER 0
+%define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_GIF_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_PSD_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_SVG_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_XPM_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_XWD_PIPE_DEMUXER 0
+%define CONFIG_LIBGME_DEMUXER 0
+%define CONFIG_LIBMODPLUG_DEMUXER 0
+%define CONFIG_LIBOPENMPT_DEMUXER 0
+%define CONFIG_VAPOURSYNTH_DEMUXER 0
+%define CONFIG_A64_MUXER 0
+%define CONFIG_AC3_MUXER 0
+%define CONFIG_ADTS_MUXER 0
+%define CONFIG_ADX_MUXER 0
+%define CONFIG_AIFF_MUXER 0
+%define CONFIG_AMR_MUXER 0
+%define CONFIG_APNG_MUXER 0
+%define CONFIG_APTX_MUXER 0
+%define CONFIG_APTX_HD_MUXER 0
+%define CONFIG_ASF_MUXER 0
+%define CONFIG_ASS_MUXER 0
+%define CONFIG_AST_MUXER 0
+%define CONFIG_ASF_STREAM_MUXER 0
+%define CONFIG_AU_MUXER 0
+%define CONFIG_AVI_MUXER 0
+%define CONFIG_AVM2_MUXER 0
+%define CONFIG_AVS2_MUXER 0
+%define CONFIG_BIT_MUXER 0
+%define CONFIG_CAF_MUXER 0
+%define CONFIG_CAVSVIDEO_MUXER 0
+%define CONFIG_CODEC2_MUXER 0
+%define CONFIG_CODEC2RAW_MUXER 0
+%define CONFIG_CRC_MUXER 0
+%define CONFIG_DASH_MUXER 0
+%define CONFIG_DATA_MUXER 0
+%define CONFIG_DAUD_MUXER 0
+%define CONFIG_DIRAC_MUXER 0
+%define CONFIG_DNXHD_MUXER 0
+%define CONFIG_DTS_MUXER 0
+%define CONFIG_DV_MUXER 0
+%define CONFIG_EAC3_MUXER 0
+%define CONFIG_F4V_MUXER 0
+%define CONFIG_FFMETADATA_MUXER 0
+%define CONFIG_FIFO_MUXER 0
+%define CONFIG_FIFO_TEST_MUXER 0
+%define CONFIG_FILMSTRIP_MUXER 0
+%define CONFIG_FITS_MUXER 0
+%define CONFIG_FLAC_MUXER 0
+%define CONFIG_FLV_MUXER 0
+%define CONFIG_FRAMECRC_MUXER 0
+%define CONFIG_FRAMEHASH_MUXER 0
+%define CONFIG_FRAMEMD5_MUXER 0
+%define CONFIG_G722_MUXER 0
+%define CONFIG_G723_1_MUXER 0
+%define CONFIG_G726_MUXER 0
+%define CONFIG_G726LE_MUXER 0
+%define CONFIG_GIF_MUXER 0
+%define CONFIG_GSM_MUXER 0
+%define CONFIG_GXF_MUXER 0
+%define CONFIG_H261_MUXER 0
+%define CONFIG_H263_MUXER 0
+%define CONFIG_H264_MUXER 0
+%define CONFIG_HASH_MUXER 0
+%define CONFIG_HDS_MUXER 0
+%define CONFIG_HEVC_MUXER 0
+%define CONFIG_HLS_MUXER 0
+%define CONFIG_ICO_MUXER 0
+%define CONFIG_ILBC_MUXER 0
+%define CONFIG_IMAGE2_MUXER 0
+%define CONFIG_IMAGE2PIPE_MUXER 0
+%define CONFIG_IPOD_MUXER 0
+%define CONFIG_IRCAM_MUXER 0
+%define CONFIG_ISMV_MUXER 0
+%define CONFIG_IVF_MUXER 0
+%define CONFIG_JACOSUB_MUXER 0
+%define CONFIG_LATM_MUXER 0
+%define CONFIG_LRC_MUXER 0
+%define CONFIG_M4V_MUXER 0
+%define CONFIG_MD5_MUXER 0
+%define CONFIG_MATROSKA_MUXER 0
+%define CONFIG_MATROSKA_AUDIO_MUXER 0
+%define CONFIG_MICRODVD_MUXER 0
+%define CONFIG_MJPEG_MUXER 0
+%define CONFIG_MLP_MUXER 0
+%define CONFIG_MMF_MUXER 0
+%define CONFIG_MOV_MUXER 0
+%define CONFIG_MP2_MUXER 0
+%define CONFIG_MP3_MUXER 0
+%define CONFIG_MP4_MUXER 0
+%define CONFIG_MPEG1SYSTEM_MUXER 0
+%define CONFIG_MPEG1VCD_MUXER 0
+%define CONFIG_MPEG1VIDEO_MUXER 0
+%define CONFIG_MPEG2DVD_MUXER 0
+%define CONFIG_MPEG2SVCD_MUXER 0
+%define CONFIG_MPEG2VIDEO_MUXER 0
+%define CONFIG_MPEG2VOB_MUXER 0
+%define CONFIG_MPEGTS_MUXER 0
+%define CONFIG_MPJPEG_MUXER 0
+%define CONFIG_MXF_MUXER 0
+%define CONFIG_MXF_D10_MUXER 0
+%define CONFIG_MXF_OPATOM_MUXER 0
+%define CONFIG_NULL_MUXER 0
+%define CONFIG_NUT_MUXER 0
+%define CONFIG_OGA_MUXER 0
+%define CONFIG_OGG_MUXER 0
+%define CONFIG_OGV_MUXER 0
+%define CONFIG_OMA_MUXER 0
+%define CONFIG_OPUS_MUXER 0
+%define CONFIG_PCM_ALAW_MUXER 0
+%define CONFIG_PCM_MULAW_MUXER 0
+%define CONFIG_PCM_VIDC_MUXER 0
+%define CONFIG_PCM_F64BE_MUXER 0
+%define CONFIG_PCM_F64LE_MUXER 0
+%define CONFIG_PCM_F32BE_MUXER 0
+%define CONFIG_PCM_F32LE_MUXER 0
+%define CONFIG_PCM_S32BE_MUXER 0
+%define CONFIG_PCM_S32LE_MUXER 0
+%define CONFIG_PCM_S24BE_MUXER 0
+%define CONFIG_PCM_S24LE_MUXER 0
+%define CONFIG_PCM_S16BE_MUXER 0
+%define CONFIG_PCM_S16LE_MUXER 0
+%define CONFIG_PCM_S8_MUXER 0
+%define CONFIG_PCM_U32BE_MUXER 0
+%define CONFIG_PCM_U32LE_MUXER 0
+%define CONFIG_PCM_U24BE_MUXER 0
+%define CONFIG_PCM_U24LE_MUXER 0
+%define CONFIG_PCM_U16BE_MUXER 0
+%define CONFIG_PCM_U16LE_MUXER 0
+%define CONFIG_PCM_U8_MUXER 0
+%define CONFIG_PSP_MUXER 0
+%define CONFIG_RAWVIDEO_MUXER 0
+%define CONFIG_RM_MUXER 0
+%define CONFIG_ROQ_MUXER 0
+%define CONFIG_RSO_MUXER 0
+%define CONFIG_RTP_MUXER 0
+%define CONFIG_RTP_MPEGTS_MUXER 0
+%define CONFIG_RTSP_MUXER 0
+%define CONFIG_SAP_MUXER 0
+%define CONFIG_SBC_MUXER 0
+%define CONFIG_SCC_MUXER 0
+%define CONFIG_SEGAFILM_MUXER 0
+%define CONFIG_SEGMENT_MUXER 0
+%define CONFIG_STREAM_SEGMENT_MUXER 0
+%define CONFIG_SINGLEJPEG_MUXER 0
+%define CONFIG_SMJPEG_MUXER 0
+%define CONFIG_SMOOTHSTREAMING_MUXER 0
+%define CONFIG_SOX_MUXER 0
+%define CONFIG_SPX_MUXER 0
+%define CONFIG_SPDIF_MUXER 0
+%define CONFIG_SRT_MUXER 0
+%define CONFIG_STREAMHASH_MUXER 0
+%define CONFIG_SUP_MUXER 0
+%define CONFIG_SWF_MUXER 0
+%define CONFIG_TEE_MUXER 0
+%define CONFIG_TG2_MUXER 0
+%define CONFIG_TGP_MUXER 0
+%define CONFIG_MKVTIMESTAMP_V2_MUXER 0
+%define CONFIG_TRUEHD_MUXER 0
+%define CONFIG_TTA_MUXER 0
+%define CONFIG_UNCODEDFRAMECRC_MUXER 0
+%define CONFIG_VC1_MUXER 0
+%define CONFIG_VC1T_MUXER 0
+%define CONFIG_VOC_MUXER 0
+%define CONFIG_W64_MUXER 0
+%define CONFIG_WAV_MUXER 0
+%define CONFIG_WEBM_MUXER 0
+%define CONFIG_WEBM_DASH_MANIFEST_MUXER 0
+%define CONFIG_WEBM_CHUNK_MUXER 0
+%define CONFIG_WEBP_MUXER 0
+%define CONFIG_WEBVTT_MUXER 0
+%define CONFIG_WTV_MUXER 0
+%define CONFIG_WV_MUXER 0
+%define CONFIG_YUV4MPEGPIPE_MUXER 0
+%define CONFIG_CHROMAPRINT_MUXER 0
+%define CONFIG_ASYNC_PROTOCOL 0
+%define CONFIG_BLURAY_PROTOCOL 0
+%define CONFIG_CACHE_PROTOCOL 0
+%define CONFIG_CONCAT_PROTOCOL 0
+%define CONFIG_CRYPTO_PROTOCOL 0
+%define CONFIG_DATA_PROTOCOL 0
+%define CONFIG_FFRTMPCRYPT_PROTOCOL 0
+%define CONFIG_FFRTMPHTTP_PROTOCOL 0
+%define CONFIG_FILE_PROTOCOL 0
+%define CONFIG_FTP_PROTOCOL 0
+%define CONFIG_GOPHER_PROTOCOL 0
+%define CONFIG_HLS_PROTOCOL 0
+%define CONFIG_HTTP_PROTOCOL 0
+%define CONFIG_HTTPPROXY_PROTOCOL 0
+%define CONFIG_HTTPS_PROTOCOL 0
+%define CONFIG_ICECAST_PROTOCOL 0
+%define CONFIG_MMSH_PROTOCOL 0
+%define CONFIG_MMST_PROTOCOL 0
+%define CONFIG_MD5_PROTOCOL 0
+%define CONFIG_PIPE_PROTOCOL 0
+%define CONFIG_PROMPEG_PROTOCOL 0
+%define CONFIG_RTMP_PROTOCOL 0
+%define CONFIG_RTMPE_PROTOCOL 0
+%define CONFIG_RTMPS_PROTOCOL 0
+%define CONFIG_RTMPT_PROTOCOL 0
+%define CONFIG_RTMPTE_PROTOCOL 0
+%define CONFIG_RTMPTS_PROTOCOL 0
+%define CONFIG_RTP_PROTOCOL 0
+%define CONFIG_SCTP_PROTOCOL 0
+%define CONFIG_SRTP_PROTOCOL 0
+%define CONFIG_SUBFILE_PROTOCOL 0
+%define CONFIG_TEE_PROTOCOL 0
+%define CONFIG_TCP_PROTOCOL 0
+%define CONFIG_TLS_PROTOCOL 0
+%define CONFIG_UDP_PROTOCOL 0
+%define CONFIG_UDPLITE_PROTOCOL 0
+%define CONFIG_UNIX_PROTOCOL 0
+%define CONFIG_LIBAMQP_PROTOCOL 0
+%define CONFIG_LIBRTMP_PROTOCOL 0
+%define CONFIG_LIBRTMPE_PROTOCOL 0
+%define CONFIG_LIBRTMPS_PROTOCOL 0
+%define CONFIG_LIBRTMPT_PROTOCOL 0
+%define CONFIG_LIBRTMPTE_PROTOCOL 0
+%define CONFIG_LIBSRT_PROTOCOL 0
+%define CONFIG_LIBSSH_PROTOCOL 0
+%define CONFIG_LIBSMBCLIENT_PROTOCOL 0
+%define CONFIG_LIBZMQ_PROTOCOL 0
diff --git a/fuchsia/config/default/x64/config.h b/fuchsia/config/default/x64/config.h
new file mode 100644
index 0000000..b9d250d
--- /dev/null
+++ b/fuchsia/config/default/x64/config.h
@@ -0,0 +1,2588 @@
+/* Automatically generated by configure - do not modify! */
+#ifndef FFMPEG_CONFIG_H
+#define FFMPEG_CONFIG_H
+#define FFMPEG_CONFIGURATION "--disable-everything --disable-all --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-static --enable-avcodec --enable-avformat --enable-avutil --enable-fft --enable-rdft --enable-static --enable-libopus --disable-debug --disable-bzlib --disable-iconv --disable-lzo --disable-network --disable-schannel --disable-sdl2 --disable-symver --disable-xlib --disable-zlib --disable-securetransport --disable-faan --disable-alsa --disable-autodetect --enable-decoder='vorbis,libopus,flac' --enable-decoder='pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le,mp3' --enable-decoder='pcm_s16be,pcm_s24be,pcm_mulaw,pcm_alaw' --enable-decoder='theora,vp8,sbc,aptx' --enable-demuxer='ogg,matroska,wav,flac,mp3,mov' --enable-parser='opus,vorbis,flac,mpegaudio' --extra-cflags=-I/usr/local/google/home/dalesat/fuchsia/third_party/opus/include --enable-parser='vp3,vp8' --optflags='\"-O2\"' --enable-pic --x86asmexe=yasm --enable-pic --enable-lto --cc=clang --cxx=clang++ --ld=clang --enable-decoder=vp9 --enable-parser=vp9 --sysroot=/usr/local/google/home/dalesat/fuchsia/third_party/ffmpeg/../../prebuilt/third_party/sysroot/linux --extra-ldflags='-fuse-ld=lld' --disable-error-resilience"
+#define FFMPEG_LICENSE "LGPL version 2.1 or later"
+#define CONFIG_THIS_YEAR 2020
+#define FFMPEG_DATADIR "/usr/local/share/ffmpeg"
+#define AVCONV_DATADIR "/usr/local/share/ffmpeg"
+#define CC_IDENT "Fuchsia clang version 11.0.0 (https://fuchsia.googlesource.com/a/third_party/llvm-project dd484baffdf4a92e564c38a17d35a742e633b0e0)"
+#define av_restrict restrict
+#define EXTERN_PREFIX ""
+#define EXTERN_ASM 
+#define BUILDSUF ""
+#define SLIBSUF ".so"
+#define HAVE_MMX2 HAVE_MMXEXT
+#define SWS_MAX_FILTER_SIZE 256
+#define ARCH_AARCH64 0
+#define ARCH_ALPHA 0
+#define ARCH_ARM 0
+#define ARCH_AVR32 0
+#define ARCH_AVR32_AP 0
+#define ARCH_AVR32_UC 0
+#define ARCH_BFIN 0
+#define ARCH_IA64 0
+#define ARCH_M68K 0
+#define ARCH_MIPS 0
+#define ARCH_MIPS64 0
+#define ARCH_PARISC 0
+#define ARCH_PPC 0
+#define ARCH_PPC64 0
+#define ARCH_S390 0
+#define ARCH_SH4 0
+#define ARCH_SPARC 0
+#define ARCH_SPARC64 0
+#define ARCH_TILEGX 0
+#define ARCH_TILEPRO 0
+#define ARCH_TOMI 0
+#define ARCH_X86 1
+#define ARCH_X86_32 0
+#define ARCH_X86_64 1
+#define HAVE_ARMV5TE 0
+#define HAVE_ARMV6 0
+#define HAVE_ARMV6T2 0
+#define HAVE_ARMV8 0
+#define HAVE_NEON 0
+#define HAVE_VFP 0
+#define HAVE_VFPV3 0
+#define HAVE_SETEND 0
+#define HAVE_ALTIVEC 0
+#define HAVE_DCBZL 0
+#define HAVE_LDBRX 0
+#define HAVE_POWER8 0
+#define HAVE_PPC4XX 0
+#define HAVE_VSX 0
+#define HAVE_AESNI 1
+#define HAVE_AMD3DNOW 1
+#define HAVE_AMD3DNOWEXT 1
+#define HAVE_AVX 1
+#define HAVE_AVX2 1
+#define HAVE_AVX512 1
+#define HAVE_FMA3 1
+#define HAVE_FMA4 1
+#define HAVE_MMX 1
+#define HAVE_MMXEXT 1
+#define HAVE_SSE 1
+#define HAVE_SSE2 1
+#define HAVE_SSE3 1
+#define HAVE_SSE4 1
+#define HAVE_SSE42 1
+#define HAVE_SSSE3 1
+#define HAVE_XOP 1
+#define HAVE_CPUNOP 1
+#define HAVE_I686 1
+#define HAVE_MIPSFPU 0
+#define HAVE_MIPS32R2 0
+#define HAVE_MIPS32R5 0
+#define HAVE_MIPS64R2 0
+#define HAVE_MIPS32R6 0
+#define HAVE_MIPS64R6 0
+#define HAVE_MIPSDSP 0
+#define HAVE_MIPSDSPR2 0
+#define HAVE_MSA 0
+#define HAVE_MSA2 0
+#define HAVE_LOONGSON2 0
+#define HAVE_LOONGSON3 0
+#define HAVE_MMI 0
+#define HAVE_ARMV5TE_EXTERNAL 0
+#define HAVE_ARMV6_EXTERNAL 0
+#define HAVE_ARMV6T2_EXTERNAL 0
+#define HAVE_ARMV8_EXTERNAL 0
+#define HAVE_NEON_EXTERNAL 0
+#define HAVE_VFP_EXTERNAL 0
+#define HAVE_VFPV3_EXTERNAL 0
+#define HAVE_SETEND_EXTERNAL 0
+#define HAVE_ALTIVEC_EXTERNAL 0
+#define HAVE_DCBZL_EXTERNAL 0
+#define HAVE_LDBRX_EXTERNAL 0
+#define HAVE_POWER8_EXTERNAL 0
+#define HAVE_PPC4XX_EXTERNAL 0
+#define HAVE_VSX_EXTERNAL 0
+#define HAVE_AESNI_EXTERNAL 1
+#define HAVE_AMD3DNOW_EXTERNAL 1
+#define HAVE_AMD3DNOWEXT_EXTERNAL 1
+#define HAVE_AVX_EXTERNAL 1
+#define HAVE_AVX2_EXTERNAL 1
+#define HAVE_AVX512_EXTERNAL 0
+#define HAVE_FMA3_EXTERNAL 1
+#define HAVE_FMA4_EXTERNAL 1
+#define HAVE_MMX_EXTERNAL 1
+#define HAVE_MMXEXT_EXTERNAL 1
+#define HAVE_SSE_EXTERNAL 1
+#define HAVE_SSE2_EXTERNAL 1
+#define HAVE_SSE3_EXTERNAL 1
+#define HAVE_SSE4_EXTERNAL 1
+#define HAVE_SSE42_EXTERNAL 1
+#define HAVE_SSSE3_EXTERNAL 1
+#define HAVE_XOP_EXTERNAL 1
+#define HAVE_CPUNOP_EXTERNAL 0
+#define HAVE_I686_EXTERNAL 0
+#define HAVE_MIPSFPU_EXTERNAL 0
+#define HAVE_MIPS32R2_EXTERNAL 0
+#define HAVE_MIPS32R5_EXTERNAL 0
+#define HAVE_MIPS64R2_EXTERNAL 0
+#define HAVE_MIPS32R6_EXTERNAL 0
+#define HAVE_MIPS64R6_EXTERNAL 0
+#define HAVE_MIPSDSP_EXTERNAL 0
+#define HAVE_MIPSDSPR2_EXTERNAL 0
+#define HAVE_MSA_EXTERNAL 0
+#define HAVE_MSA2_EXTERNAL 0
+#define HAVE_LOONGSON2_EXTERNAL 0
+#define HAVE_LOONGSON3_EXTERNAL 0
+#define HAVE_MMI_EXTERNAL 0
+#define HAVE_ARMV5TE_INLINE 0
+#define HAVE_ARMV6_INLINE 0
+#define HAVE_ARMV6T2_INLINE 0
+#define HAVE_ARMV8_INLINE 0
+#define HAVE_NEON_INLINE 0
+#define HAVE_VFP_INLINE 0
+#define HAVE_VFPV3_INLINE 0
+#define HAVE_SETEND_INLINE 0
+#define HAVE_ALTIVEC_INLINE 0
+#define HAVE_DCBZL_INLINE 0
+#define HAVE_LDBRX_INLINE 0
+#define HAVE_POWER8_INLINE 0
+#define HAVE_PPC4XX_INLINE 0
+#define HAVE_VSX_INLINE 0
+#define HAVE_AESNI_INLINE 1
+#define HAVE_AMD3DNOW_INLINE 1
+#define HAVE_AMD3DNOWEXT_INLINE 1
+#define HAVE_AVX_INLINE 1
+#define HAVE_AVX2_INLINE 1
+#define HAVE_AVX512_INLINE 1
+#define HAVE_FMA3_INLINE 1
+#define HAVE_FMA4_INLINE 1
+#define HAVE_MMX_INLINE 1
+#define HAVE_MMXEXT_INLINE 1
+#define HAVE_SSE_INLINE 1
+#define HAVE_SSE2_INLINE 1
+#define HAVE_SSE3_INLINE 1
+#define HAVE_SSE4_INLINE 1
+#define HAVE_SSE42_INLINE 1
+#define HAVE_SSSE3_INLINE 1
+#define HAVE_XOP_INLINE 1
+#define HAVE_CPUNOP_INLINE 0
+#define HAVE_I686_INLINE 0
+#define HAVE_MIPSFPU_INLINE 0
+#define HAVE_MIPS32R2_INLINE 0
+#define HAVE_MIPS32R5_INLINE 0
+#define HAVE_MIPS64R2_INLINE 0
+#define HAVE_MIPS32R6_INLINE 0
+#define HAVE_MIPS64R6_INLINE 0
+#define HAVE_MIPSDSP_INLINE 0
+#define HAVE_MIPSDSPR2_INLINE 0
+#define HAVE_MSA_INLINE 0
+#define HAVE_MSA2_INLINE 0
+#define HAVE_LOONGSON2_INLINE 0
+#define HAVE_LOONGSON3_INLINE 0
+#define HAVE_MMI_INLINE 0
+#define HAVE_ALIGNED_STACK 1
+#define HAVE_FAST_64BIT 1
+#define HAVE_FAST_CLZ 1
+#define HAVE_FAST_CMOV 1
+#define HAVE_LOCAL_ALIGNED 1
+#define HAVE_SIMD_ALIGN_16 1
+#define HAVE_SIMD_ALIGN_32 1
+#define HAVE_SIMD_ALIGN_64 1
+#define HAVE_ATOMIC_CAS_PTR 0
+#define HAVE_MACHINE_RW_BARRIER 0
+#define HAVE_MEMORYBARRIER 0
+#define HAVE_MM_EMPTY 1
+#define HAVE_RDTSC 0
+#define HAVE_SEM_TIMEDWAIT 1
+#define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1
+#define HAVE_CABS 0
+#define HAVE_CEXP 0
+#define HAVE_INLINE_ASM 1
+#define HAVE_SYMVER 0
+#define HAVE_X86ASM 1
+#define HAVE_BIGENDIAN 0
+#define HAVE_FAST_UNALIGNED 1
+#define HAVE_ARPA_INET_H 0
+#define HAVE_ASM_TYPES_H 1
+#define HAVE_CDIO_PARANOIA_H 0
+#define HAVE_CDIO_PARANOIA_PARANOIA_H 0
+#define HAVE_CUDA_H 0
+#define HAVE_DISPATCH_DISPATCH_H 0
+#define HAVE_DEV_BKTR_IOCTL_BT848_H 0
+#define HAVE_DEV_BKTR_IOCTL_METEOR_H 0
+#define HAVE_DEV_IC_BT8XX_H 0
+#define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0
+#define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0
+#define HAVE_DIRECT_H 0
+#define HAVE_DIRENT_H 1
+#define HAVE_DXGIDEBUG_H 0
+#define HAVE_DXVA_H 0
+#define HAVE_ES2_GL_H 0
+#define HAVE_GSM_H 0
+#define HAVE_IO_H 0
+#define HAVE_LINUX_PERF_EVENT_H 1
+#define HAVE_MACHINE_IOCTL_BT848_H 0
+#define HAVE_MACHINE_IOCTL_METEOR_H 0
+#define HAVE_MALLOC_H 1
+#define HAVE_OPENCV2_CORE_CORE_C_H 0
+#define HAVE_OPENGL_GL3_H 0
+#define HAVE_POLL_H 1
+#define HAVE_SYS_PARAM_H 1
+#define HAVE_SYS_RESOURCE_H 1
+#define HAVE_SYS_SELECT_H 1
+#define HAVE_SYS_SOUNDCARD_H 1
+#define HAVE_SYS_TIME_H 1
+#define HAVE_SYS_UN_H 1
+#define HAVE_SYS_VIDEOIO_H 0
+#define HAVE_TERMIOS_H 1
+#define HAVE_UDPLITE_H 0
+#define HAVE_UNISTD_H 1
+#define HAVE_VALGRIND_VALGRIND_H 0
+#define HAVE_WINDOWS_H 0
+#define HAVE_WINSOCK2_H 0
+#define HAVE_INTRINSICS_NEON 0
+#define HAVE_ATANF 1
+#define HAVE_ATAN2F 1
+#define HAVE_CBRT 1
+#define HAVE_CBRTF 1
+#define HAVE_COPYSIGN 1
+#define HAVE_COSF 1
+#define HAVE_ERF 1
+#define HAVE_EXP2 1
+#define HAVE_EXP2F 1
+#define HAVE_EXPF 1
+#define HAVE_HYPOT 1
+#define HAVE_ISFINITE 1
+#define HAVE_ISINF 1
+#define HAVE_ISNAN 1
+#define HAVE_LDEXPF 1
+#define HAVE_LLRINT 1
+#define HAVE_LLRINTF 1
+#define HAVE_LOG2 1
+#define HAVE_LOG2F 1
+#define HAVE_LOG10F 1
+#define HAVE_LRINT 1
+#define HAVE_LRINTF 1
+#define HAVE_POWF 1
+#define HAVE_RINT 1
+#define HAVE_ROUND 1
+#define HAVE_ROUNDF 1
+#define HAVE_SINF 1
+#define HAVE_TRUNC 1
+#define HAVE_TRUNCF 1
+#define HAVE_DOS_PATHS 0
+#define HAVE_LIBC_MSVCRT 0
+#define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0
+#define HAVE_SECTION_DATA_REL_RO 1
+#define HAVE_THREADS 1
+#define HAVE_UWP 0
+#define HAVE_WINRT 0
+#define HAVE_ACCESS 1
+#define HAVE_ALIGNED_MALLOC 0
+#define HAVE_ARC4RANDOM 0
+#define HAVE_CLOCK_GETTIME 1
+#define HAVE_CLOSESOCKET 0
+#define HAVE_COMMANDLINETOARGVW 0
+#define HAVE_FCNTL 1
+#define HAVE_GETADDRINFO 0
+#define HAVE_GETHRTIME 0
+#define HAVE_GETOPT 1
+#define HAVE_GETMODULEHANDLE 0
+#define HAVE_GETPROCESSAFFINITYMASK 0
+#define HAVE_GETPROCESSMEMORYINFO 0
+#define HAVE_GETPROCESSTIMES 0
+#define HAVE_GETRUSAGE 1
+#define HAVE_GETSTDHANDLE 0
+#define HAVE_GETSYSTEMTIMEASFILETIME 0
+#define HAVE_GETTIMEOFDAY 1
+#define HAVE_GLOB 1
+#define HAVE_GLXGETPROCADDRESS 0
+#define HAVE_GMTIME_R 1
+#define HAVE_INET_ATON 0
+#define HAVE_ISATTY 1
+#define HAVE_KBHIT 0
+#define HAVE_LOCALTIME_R 1
+#define HAVE_LSTAT 1
+#define HAVE_LZO1X_999_COMPRESS 0
+#define HAVE_MACH_ABSOLUTE_TIME 0
+#define HAVE_MAPVIEWOFFILE 0
+#define HAVE_MEMALIGN 1
+#define HAVE_MKSTEMP 1
+#define HAVE_MMAP 1
+#define HAVE_MPROTECT 1
+#define HAVE_NANOSLEEP 1
+#define HAVE_PEEKNAMEDPIPE 0
+#define HAVE_POSIX_MEMALIGN 1
+#define HAVE_PTHREAD_CANCEL 1
+#define HAVE_SCHED_GETAFFINITY 1
+#define HAVE_SECITEMIMPORT 0
+#define HAVE_SETCONSOLETEXTATTRIBUTE 0
+#define HAVE_SETCONSOLECTRLHANDLER 0
+#define HAVE_SETDLLDIRECTORY 0
+#define HAVE_SETMODE 0
+#define HAVE_SETRLIMIT 1
+#define HAVE_SLEEP 0
+#define HAVE_STRERROR_R 1
+#define HAVE_SYSCONF 1
+#define HAVE_SYSCTL 0
+#define HAVE_USLEEP 1
+#define HAVE_UTGETOSTYPEFROMSTRING 0
+#define HAVE_VIRTUALALLOC 0
+#define HAVE_WGLGETPROCADDRESS 0
+#define HAVE_BCRYPT 0
+#define HAVE_VAAPI_DRM 0
+#define HAVE_VAAPI_X11 0
+#define HAVE_VDPAU_X11 0
+#define HAVE_PTHREADS 1
+#define HAVE_OS2THREADS 0
+#define HAVE_W32THREADS 0
+#define HAVE_AS_ARCH_DIRECTIVE 0
+#define HAVE_AS_DN_DIRECTIVE 0
+#define HAVE_AS_FPU_DIRECTIVE 0
+#define HAVE_AS_FUNC 0
+#define HAVE_AS_OBJECT_ARCH 0
+#define HAVE_ASM_MOD_Q 0
+#define HAVE_BLOCKS_EXTENSION 0
+#define HAVE_EBP_AVAILABLE 1
+#define HAVE_EBX_AVAILABLE 1
+#define HAVE_GNU_AS 0
+#define HAVE_GNU_WINDRES 0
+#define HAVE_IBM_ASM 0
+#define HAVE_INLINE_ASM_DIRECT_SYMBOL_REFS 0
+#define HAVE_INLINE_ASM_LABELS 1
+#define HAVE_INLINE_ASM_NONLOCAL_LABELS 1
+#define HAVE_PRAGMA_DEPRECATED 1
+#define HAVE_RSYNC_CONTIMEOUT 1
+#define HAVE_SYMVER_ASM_LABEL 1
+#define HAVE_SYMVER_GNU_ASM 1
+#define HAVE_VFP_ARGS 0
+#define HAVE_XFORM_ASM 0
+#define HAVE_XMM_CLOBBERS 1
+#define HAVE_KCMVIDEOCODECTYPE_HEVC 0
+#define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0
+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0
+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0
+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0
+#define HAVE_SOCKLEN_T 0
+#define HAVE_STRUCT_ADDRINFO 0
+#define HAVE_STRUCT_GROUP_SOURCE_REQ 0
+#define HAVE_STRUCT_IP_MREQ_SOURCE 0
+#define HAVE_STRUCT_IPV6_MREQ 0
+#define HAVE_STRUCT_MSGHDR_MSG_FLAGS 0
+#define HAVE_STRUCT_POLLFD 0
+#define HAVE_STRUCT_RUSAGE_RU_MAXRSS 1
+#define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0
+#define HAVE_STRUCT_SOCKADDR_IN6 0
+#define HAVE_STRUCT_SOCKADDR_SA_LEN 0
+#define HAVE_STRUCT_SOCKADDR_STORAGE 0
+#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1
+#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0
+#define HAVE_MAKEINFO 0
+#define HAVE_MAKEINFO_HTML 0
+#define HAVE_OPENCL_D3D11 0
+#define HAVE_OPENCL_DRM_ARM 0
+#define HAVE_OPENCL_DRM_BEIGNET 0
+#define HAVE_OPENCL_DXVA2 0
+#define HAVE_OPENCL_VAAPI_BEIGNET 0
+#define HAVE_OPENCL_VAAPI_INTEL_MEDIA 0
+#define HAVE_PERL 1
+#define HAVE_POD2MAN 1
+#define HAVE_TEXI2HTML 0
+#define CONFIG_DOC 0
+#define CONFIG_HTMLPAGES 0
+#define CONFIG_MANPAGES 0
+#define CONFIG_PODPAGES 0
+#define CONFIG_TXTPAGES 0
+#define CONFIG_AVIO_LIST_DIR_EXAMPLE 1
+#define CONFIG_AVIO_READING_EXAMPLE 1
+#define CONFIG_DECODE_AUDIO_EXAMPLE 1
+#define CONFIG_DECODE_VIDEO_EXAMPLE 1
+#define CONFIG_DEMUXING_DECODING_EXAMPLE 1
+#define CONFIG_ENCODE_AUDIO_EXAMPLE 1
+#define CONFIG_ENCODE_VIDEO_EXAMPLE 1
+#define CONFIG_EXTRACT_MVS_EXAMPLE 1
+#define CONFIG_FILTER_AUDIO_EXAMPLE 0
+#define CONFIG_FILTERING_AUDIO_EXAMPLE 0
+#define CONFIG_FILTERING_VIDEO_EXAMPLE 0
+#define CONFIG_HTTP_MULTICLIENT_EXAMPLE 1
+#define CONFIG_HW_DECODE_EXAMPLE 1
+#define CONFIG_METADATA_EXAMPLE 1
+#define CONFIG_MUXING_EXAMPLE 0
+#define CONFIG_QSVDEC_EXAMPLE 0
+#define CONFIG_REMUXING_EXAMPLE 1
+#define CONFIG_RESAMPLING_AUDIO_EXAMPLE 0
+#define CONFIG_SCALING_VIDEO_EXAMPLE 0
+#define CONFIG_TRANSCODE_AAC_EXAMPLE 0
+#define CONFIG_TRANSCODING_EXAMPLE 0
+#define CONFIG_VAAPI_ENCODE_EXAMPLE 0
+#define CONFIG_VAAPI_TRANSCODE_EXAMPLE 0
+#define CONFIG_AVISYNTH 0
+#define CONFIG_FREI0R 0
+#define CONFIG_LIBCDIO 0
+#define CONFIG_LIBDAVS2 0
+#define CONFIG_LIBRUBBERBAND 0
+#define CONFIG_LIBVIDSTAB 0
+#define CONFIG_LIBX264 0
+#define CONFIG_LIBX265 0
+#define CONFIG_LIBXAVS 0
+#define CONFIG_LIBXAVS2 0
+#define CONFIG_LIBXVID 0
+#define CONFIG_DECKLINK 0
+#define CONFIG_LIBFDK_AAC 0
+#define CONFIG_OPENSSL 0
+#define CONFIG_LIBTLS 0
+#define CONFIG_GMP 0
+#define CONFIG_LIBARIBB24 0
+#define CONFIG_LIBLENSFUN 0
+#define CONFIG_LIBOPENCORE_AMRNB 0
+#define CONFIG_LIBOPENCORE_AMRWB 0
+#define CONFIG_LIBVMAF 0
+#define CONFIG_LIBVO_AMRWBENC 0
+#define CONFIG_MBEDTLS 0
+#define CONFIG_RKMPP 0
+#define CONFIG_LIBSMBCLIENT 0
+#define CONFIG_CHROMAPRINT 0
+#define CONFIG_GCRYPT 0
+#define CONFIG_GNUTLS 0
+#define CONFIG_JNI 0
+#define CONFIG_LADSPA 0
+#define CONFIG_LIBAOM 0
+#define CONFIG_LIBASS 0
+#define CONFIG_LIBBLURAY 0
+#define CONFIG_LIBBS2B 0
+#define CONFIG_LIBCACA 0
+#define CONFIG_LIBCELT 0
+#define CONFIG_LIBCODEC2 0
+#define CONFIG_LIBDAV1D 0
+#define CONFIG_LIBDC1394 0
+#define CONFIG_LIBDRM 0
+#define CONFIG_LIBFLITE 0
+#define CONFIG_LIBFONTCONFIG 0
+#define CONFIG_LIBFREETYPE 0
+#define CONFIG_LIBFRIBIDI 0
+#define CONFIG_LIBGLSLANG 0
+#define CONFIG_LIBGME 0
+#define CONFIG_LIBGSM 0
+#define CONFIG_LIBIEC61883 0
+#define CONFIG_LIBILBC 0
+#define CONFIG_LIBJACK 0
+#define CONFIG_LIBKLVANC 0
+#define CONFIG_LIBKVAZAAR 0
+#define CONFIG_LIBMODPLUG 0
+#define CONFIG_LIBMP3LAME 0
+#define CONFIG_LIBMYSOFA 0
+#define CONFIG_LIBOPENCV 0
+#define CONFIG_LIBOPENH264 0
+#define CONFIG_LIBOPENJPEG 0
+#define CONFIG_LIBOPENMPT 0
+#define CONFIG_LIBOPUS 1
+#define CONFIG_LIBPULSE 0
+#define CONFIG_LIBRABBITMQ 0
+#define CONFIG_LIBRAV1E 0
+#define CONFIG_LIBRSVG 0
+#define CONFIG_LIBRTMP 0
+#define CONFIG_LIBSHINE 0
+#define CONFIG_LIBSMBCLIENT 0
+#define CONFIG_LIBSNAPPY 0
+#define CONFIG_LIBSOXR 0
+#define CONFIG_LIBSPEEX 0
+#define CONFIG_LIBSRT 0
+#define CONFIG_LIBSSH 0
+#define CONFIG_LIBTENSORFLOW 0
+#define CONFIG_LIBTESSERACT 0
+#define CONFIG_LIBTHEORA 0
+#define CONFIG_LIBTWOLAME 0
+#define CONFIG_LIBV4L2 0
+#define CONFIG_LIBVORBIS 0
+#define CONFIG_LIBVPX 0
+#define CONFIG_LIBWAVPACK 0
+#define CONFIG_LIBWEBP 0
+#define CONFIG_LIBXML2 0
+#define CONFIG_LIBZIMG 0
+#define CONFIG_LIBZMQ 0
+#define CONFIG_LIBZVBI 0
+#define CONFIG_LV2 0
+#define CONFIG_MEDIACODEC 0
+#define CONFIG_OPENAL 0
+#define CONFIG_OPENGL 0
+#define CONFIG_POCKETSPHINX 0
+#define CONFIG_VAPOURSYNTH 0
+#define CONFIG_ALSA 0
+#define CONFIG_APPKIT 0
+#define CONFIG_AVFOUNDATION 0
+#define CONFIG_BZLIB 0
+#define CONFIG_COREIMAGE 0
+#define CONFIG_ICONV 0
+#define CONFIG_LIBXCB 0
+#define CONFIG_LIBXCB_SHM 0
+#define CONFIG_LIBXCB_SHAPE 0
+#define CONFIG_LIBXCB_XFIXES 0
+#define CONFIG_LZMA 0
+#define CONFIG_SCHANNEL 0
+#define CONFIG_SDL2 0
+#define CONFIG_SECURETRANSPORT 0
+#define CONFIG_SNDIO 0
+#define CONFIG_XLIB 0
+#define CONFIG_ZLIB 0
+#define CONFIG_CUDA_NVCC 0
+#define CONFIG_CUDA_SDK 0
+#define CONFIG_LIBNPP 0
+#define CONFIG_LIBMFX 0
+#define CONFIG_MMAL 0
+#define CONFIG_OMX 0
+#define CONFIG_OPENCL 0
+#define CONFIG_VULKAN 0
+#define CONFIG_AMF 0
+#define CONFIG_AUDIOTOOLBOX 0
+#define CONFIG_CRYSTALHD 0
+#define CONFIG_CUDA 0
+#define CONFIG_CUDA_LLVM 0
+#define CONFIG_CUVID 0
+#define CONFIG_D3D11VA 0
+#define CONFIG_DXVA2 0
+#define CONFIG_FFNVCODEC 0
+#define CONFIG_NVDEC 0
+#define CONFIG_NVENC 0
+#define CONFIG_VAAPI 0
+#define CONFIG_VDPAU 0
+#define CONFIG_VIDEOTOOLBOX 0
+#define CONFIG_V4L2_M2M 0
+#define CONFIG_XVMC 0
+#define CONFIG_FTRAPV 0
+#define CONFIG_GRAY 0
+#define CONFIG_HARDCODED_TABLES 0
+#define CONFIG_OMX_RPI 0
+#define CONFIG_RUNTIME_CPUDETECT 1
+#define CONFIG_SAFE_BITSTREAM_READER 1
+#define CONFIG_SHARED 0
+#define CONFIG_SMALL 0
+#define CONFIG_STATIC 1
+#define CONFIG_SWSCALE_ALPHA 1
+#define CONFIG_GPL 0
+#define CONFIG_NONFREE 0
+#define CONFIG_VERSION3 0
+#define CONFIG_AVDEVICE 0
+#define CONFIG_AVFILTER 0
+#define CONFIG_SWSCALE 0
+#define CONFIG_POSTPROC 0
+#define CONFIG_AVFORMAT 1
+#define CONFIG_AVCODEC 1
+#define CONFIG_SWRESAMPLE 0
+#define CONFIG_AVRESAMPLE 0
+#define CONFIG_AVUTIL 1
+#define CONFIG_FFPLAY 0
+#define CONFIG_FFPROBE 0
+#define CONFIG_FFMPEG 0
+#define CONFIG_DCT 1
+#define CONFIG_DWT 0
+#define CONFIG_ERROR_RESILIENCE 0
+#define CONFIG_FAAN 0
+#define CONFIG_FAST_UNALIGNED 1
+#define CONFIG_FFT 1
+#define CONFIG_LSP 0
+#define CONFIG_LZO 0
+#define CONFIG_MDCT 1
+#define CONFIG_PIXELUTILS 0
+#define CONFIG_NETWORK 0
+#define CONFIG_RDFT 1
+#define CONFIG_AUTODETECT 0
+#define CONFIG_FONTCONFIG 0
+#define CONFIG_LARGE_TESTS 1
+#define CONFIG_LINUX_PERF 0
+#define CONFIG_MEMORY_POISONING 0
+#define CONFIG_NEON_CLOBBER_TEST 0
+#define CONFIG_OSSFUZZ 0
+#define CONFIG_PIC 1
+#define CONFIG_THUMB 0
+#define CONFIG_VALGRIND_BACKTRACE 0
+#define CONFIG_XMM_CLOBBER_TEST 0
+#define CONFIG_BSFS 1
+#define CONFIG_DECODERS 1
+#define CONFIG_ENCODERS 0
+#define CONFIG_HWACCELS 0
+#define CONFIG_PARSERS 1
+#define CONFIG_INDEVS 0
+#define CONFIG_OUTDEVS 0
+#define CONFIG_FILTERS 0
+#define CONFIG_DEMUXERS 1
+#define CONFIG_MUXERS 0
+#define CONFIG_PROTOCOLS 0
+#define CONFIG_AANDCTTABLES 0
+#define CONFIG_AC3DSP 0
+#define CONFIG_ADTS_HEADER 0
+#define CONFIG_AUDIO_FRAME_QUEUE 1
+#define CONFIG_AUDIODSP 0
+#define CONFIG_BLOCKDSP 0
+#define CONFIG_BSWAPDSP 0
+#define CONFIG_CABAC 0
+#define CONFIG_CBS 0
+#define CONFIG_CBS_AV1 0
+#define CONFIG_CBS_H264 0
+#define CONFIG_CBS_H265 0
+#define CONFIG_CBS_JPEG 0
+#define CONFIG_CBS_MPEG2 0
+#define CONFIG_CBS_VP9 0
+#define CONFIG_DIRAC_PARSE 1
+#define CONFIG_DNN 0
+#define CONFIG_DVPROFILE 0
+#define CONFIG_EXIF 0
+#define CONFIG_FAANDCT 0
+#define CONFIG_FAANIDCT 0
+#define CONFIG_FDCTDSP 0
+#define CONFIG_FLACDSP 1
+#define CONFIG_FMTCONVERT 0
+#define CONFIG_FRAME_THREAD_ENCODER 0
+#define CONFIG_G722DSP 0
+#define CONFIG_GOLOMB 1
+#define CONFIG_GPLV3 0
+#define CONFIG_H263DSP 0
+#define CONFIG_H264CHROMA 0
+#define CONFIG_H264DSP 0
+#define CONFIG_H264PARSE 0
+#define CONFIG_H264PRED 1
+#define CONFIG_H264QPEL 0
+#define CONFIG_HEVCPARSE 0
+#define CONFIG_HPELDSP 1
+#define CONFIG_HUFFMAN 0
+#define CONFIG_HUFFYUVDSP 0
+#define CONFIG_HUFFYUVENCDSP 0
+#define CONFIG_IDCTDSP 0
+#define CONFIG_IIRFILTER 0
+#define CONFIG_MDCT15 0
+#define CONFIG_INTRAX8 0
+#define CONFIG_ISO_MEDIA 1
+#define CONFIG_IVIDSP 0
+#define CONFIG_JPEGTABLES 0
+#define CONFIG_LGPLV3 0
+#define CONFIG_LIBX262 0
+#define CONFIG_LLAUDDSP 0
+#define CONFIG_LLVIDDSP 0
+#define CONFIG_LLVIDENCDSP 0
+#define CONFIG_LPC 0
+#define CONFIG_LZF 0
+#define CONFIG_ME_CMP 0
+#define CONFIG_MPEG_ER 0
+#define CONFIG_MPEGAUDIO 1
+#define CONFIG_MPEGAUDIODSP 1
+#define CONFIG_MPEGAUDIOHEADER 1
+#define CONFIG_MPEGVIDEO 0
+#define CONFIG_MPEGVIDEOENC 0
+#define CONFIG_MSS34DSP 0
+#define CONFIG_PIXBLOCKDSP 0
+#define CONFIG_QPELDSP 0
+#define CONFIG_QSV 0
+#define CONFIG_QSVDEC 0
+#define CONFIG_QSVENC 0
+#define CONFIG_QSVVPP 0
+#define CONFIG_RANGECODER 0
+#define CONFIG_RIFFDEC 1
+#define CONFIG_RIFFENC 0
+#define CONFIG_RTPDEC 0
+#define CONFIG_RTPENC_CHAIN 0
+#define CONFIG_RV34DSP 0
+#define CONFIG_SCENE_SAD 0
+#define CONFIG_SINEWIN 0
+#define CONFIG_SNAPPY 0
+#define CONFIG_SRTP 0
+#define CONFIG_STARTCODE 0
+#define CONFIG_TEXTUREDSP 0
+#define CONFIG_TEXTUREDSPENC 0
+#define CONFIG_TPELDSP 0
+#define CONFIG_VAAPI_1 0
+#define CONFIG_VAAPI_ENCODE 0
+#define CONFIG_VC1DSP 0
+#define CONFIG_VIDEODSP 1
+#define CONFIG_VP3DSP 1
+#define CONFIG_VP56DSP 0
+#define CONFIG_VP8DSP 1
+#define CONFIG_WMA_FREQS 0
+#define CONFIG_WMV2DSP 0
+#define CONFIG_AAC_ADTSTOASC_BSF 0
+#define CONFIG_AV1_FRAME_MERGE_BSF 0
+#define CONFIG_AV1_FRAME_SPLIT_BSF 0
+#define CONFIG_AV1_METADATA_BSF 0
+#define CONFIG_CHOMP_BSF 0
+#define CONFIG_DUMP_EXTRADATA_BSF 0
+#define CONFIG_DCA_CORE_BSF 0
+#define CONFIG_EAC3_CORE_BSF 0
+#define CONFIG_EXTRACT_EXTRADATA_BSF 0
+#define CONFIG_FILTER_UNITS_BSF 0
+#define CONFIG_H264_METADATA_BSF 0
+#define CONFIG_H264_MP4TOANNEXB_BSF 0
+#define CONFIG_H264_REDUNDANT_PPS_BSF 0
+#define CONFIG_HAPQA_EXTRACT_BSF 0
+#define CONFIG_HEVC_METADATA_BSF 0
+#define CONFIG_HEVC_MP4TOANNEXB_BSF 0
+#define CONFIG_IMX_DUMP_HEADER_BSF 0
+#define CONFIG_MJPEG2JPEG_BSF 0
+#define CONFIG_MJPEGA_DUMP_HEADER_BSF 0
+#define CONFIG_MP3_HEADER_DECOMPRESS_BSF 0
+#define CONFIG_MPEG2_METADATA_BSF 0
+#define CONFIG_MPEG4_UNPACK_BFRAMES_BSF 0
+#define CONFIG_MOV2TEXTSUB_BSF 0
+#define CONFIG_NOISE_BSF 0
+#define CONFIG_NULL_BSF 1
+#define CONFIG_PRORES_METADATA_BSF 0
+#define CONFIG_REMOVE_EXTRADATA_BSF 0
+#define CONFIG_TEXT2MOVSUB_BSF 0
+#define CONFIG_TRACE_HEADERS_BSF 0
+#define CONFIG_TRUEHD_CORE_BSF 0
+#define CONFIG_VP9_METADATA_BSF 0
+#define CONFIG_VP9_RAW_REORDER_BSF 0
+#define CONFIG_VP9_SUPERFRAME_BSF 0
+#define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1
+#define CONFIG_AASC_DECODER 0
+#define CONFIG_AIC_DECODER 0
+#define CONFIG_ALIAS_PIX_DECODER 0
+#define CONFIG_AGM_DECODER 0
+#define CONFIG_AMV_DECODER 0
+#define CONFIG_ANM_DECODER 0
+#define CONFIG_ANSI_DECODER 0
+#define CONFIG_APNG_DECODER 0
+#define CONFIG_ARBC_DECODER 0
+#define CONFIG_ASV1_DECODER 0
+#define CONFIG_ASV2_DECODER 0
+#define CONFIG_AURA_DECODER 0
+#define CONFIG_AURA2_DECODER 0
+#define CONFIG_AVRP_DECODER 0
+#define CONFIG_AVRN_DECODER 0
+#define CONFIG_AVS_DECODER 0
+#define CONFIG_AVUI_DECODER 0
+#define CONFIG_AYUV_DECODER 0
+#define CONFIG_BETHSOFTVID_DECODER 0
+#define CONFIG_BFI_DECODER 0
+#define CONFIG_BINK_DECODER 0
+#define CONFIG_BITPACKED_DECODER 0
+#define CONFIG_BMP_DECODER 0
+#define CONFIG_BMV_VIDEO_DECODER 0
+#define CONFIG_BRENDER_PIX_DECODER 0
+#define CONFIG_C93_DECODER 0
+#define CONFIG_CAVS_DECODER 0
+#define CONFIG_CDGRAPHICS_DECODER 0
+#define CONFIG_CDTOONS_DECODER 0
+#define CONFIG_CDXL_DECODER 0
+#define CONFIG_CFHD_DECODER 0
+#define CONFIG_CINEPAK_DECODER 0
+#define CONFIG_CLEARVIDEO_DECODER 0
+#define CONFIG_CLJR_DECODER 0
+#define CONFIG_CLLC_DECODER 0
+#define CONFIG_COMFORTNOISE_DECODER 0
+#define CONFIG_CPIA_DECODER 0
+#define CONFIG_CSCD_DECODER 0
+#define CONFIG_CYUV_DECODER 0
+#define CONFIG_DDS_DECODER 0
+#define CONFIG_DFA_DECODER 0
+#define CONFIG_DIRAC_DECODER 0
+#define CONFIG_DNXHD_DECODER 0
+#define CONFIG_DPX_DECODER 0
+#define CONFIG_DSICINVIDEO_DECODER 0
+#define CONFIG_DVAUDIO_DECODER 0
+#define CONFIG_DVVIDEO_DECODER 0
+#define CONFIG_DXA_DECODER 0
+#define CONFIG_DXTORY_DECODER 0
+#define CONFIG_DXV_DECODER 0
+#define CONFIG_EACMV_DECODER 0
+#define CONFIG_EAMAD_DECODER 0
+#define CONFIG_EATGQ_DECODER 0
+#define CONFIG_EATGV_DECODER 0
+#define CONFIG_EATQI_DECODER 0
+#define CONFIG_EIGHTBPS_DECODER 0
+#define CONFIG_EIGHTSVX_EXP_DECODER 0
+#define CONFIG_EIGHTSVX_FIB_DECODER 0
+#define CONFIG_ESCAPE124_DECODER 0
+#define CONFIG_ESCAPE130_DECODER 0
+#define CONFIG_EXR_DECODER 0
+#define CONFIG_FFV1_DECODER 0
+#define CONFIG_FFVHUFF_DECODER 0
+#define CONFIG_FIC_DECODER 0
+#define CONFIG_FITS_DECODER 0
+#define CONFIG_FLASHSV_DECODER 0
+#define CONFIG_FLASHSV2_DECODER 0
+#define CONFIG_FLIC_DECODER 0
+#define CONFIG_FLV_DECODER 0
+#define CONFIG_FMVC_DECODER 0
+#define CONFIG_FOURXM_DECODER 0
+#define CONFIG_FRAPS_DECODER 0
+#define CONFIG_FRWU_DECODER 0
+#define CONFIG_G2M_DECODER 0
+#define CONFIG_GDV_DECODER 0
+#define CONFIG_GIF_DECODER 0
+#define CONFIG_H261_DECODER 0
+#define CONFIG_H263_DECODER 0
+#define CONFIG_H263I_DECODER 0
+#define CONFIG_H263P_DECODER 0
+#define CONFIG_H263_V4L2M2M_DECODER 0
+#define CONFIG_H264_DECODER 0
+#define CONFIG_H264_CRYSTALHD_DECODER 0
+#define CONFIG_H264_V4L2M2M_DECODER 0
+#define CONFIG_H264_MEDIACODEC_DECODER 0
+#define CONFIG_H264_MMAL_DECODER 0
+#define CONFIG_H264_QSV_DECODER 0
+#define CONFIG_H264_RKMPP_DECODER 0
+#define CONFIG_HAP_DECODER 0
+#define CONFIG_HEVC_DECODER 0
+#define CONFIG_HEVC_QSV_DECODER 0
+#define CONFIG_HEVC_RKMPP_DECODER 0
+#define CONFIG_HEVC_V4L2M2M_DECODER 0
+#define CONFIG_HNM4_VIDEO_DECODER 0
+#define CONFIG_HQ_HQA_DECODER 0
+#define CONFIG_HQX_DECODER 0
+#define CONFIG_HUFFYUV_DECODER 0
+#define CONFIG_HYMT_DECODER 0
+#define CONFIG_IDCIN_DECODER 0
+#define CONFIG_IFF_ILBM_DECODER 0
+#define CONFIG_IMM4_DECODER 0
+#define CONFIG_IMM5_DECODER 0
+#define CONFIG_INDEO2_DECODER 0
+#define CONFIG_INDEO3_DECODER 0
+#define CONFIG_INDEO4_DECODER 0
+#define CONFIG_INDEO5_DECODER 0
+#define CONFIG_INTERPLAY_VIDEO_DECODER 0
+#define CONFIG_JPEG2000_DECODER 0
+#define CONFIG_JPEGLS_DECODER 0
+#define CONFIG_JV_DECODER 0
+#define CONFIG_KGV1_DECODER 0
+#define CONFIG_KMVC_DECODER 0
+#define CONFIG_LAGARITH_DECODER 0
+#define CONFIG_LOCO_DECODER 0
+#define CONFIG_LSCR_DECODER 0
+#define CONFIG_M101_DECODER 0
+#define CONFIG_MAGICYUV_DECODER 0
+#define CONFIG_MDEC_DECODER 0
+#define CONFIG_MIMIC_DECODER 0
+#define CONFIG_MJPEG_DECODER 0
+#define CONFIG_MJPEGB_DECODER 0
+#define CONFIG_MMVIDEO_DECODER 0
+#define CONFIG_MOTIONPIXELS_DECODER 0
+#define CONFIG_MPEG1VIDEO_DECODER 0
+#define CONFIG_MPEG2VIDEO_DECODER 0
+#define CONFIG_MPEG4_DECODER 0
+#define CONFIG_MPEG4_CRYSTALHD_DECODER 0
+#define CONFIG_MPEG4_V4L2M2M_DECODER 0
+#define CONFIG_MPEG4_MMAL_DECODER 0
+#define CONFIG_MPEGVIDEO_DECODER 0
+#define CONFIG_MPEG1_V4L2M2M_DECODER 0
+#define CONFIG_MPEG2_MMAL_DECODER 0
+#define CONFIG_MPEG2_CRYSTALHD_DECODER 0
+#define CONFIG_MPEG2_V4L2M2M_DECODER 0
+#define CONFIG_MPEG2_QSV_DECODER 0
+#define CONFIG_MPEG2_MEDIACODEC_DECODER 0
+#define CONFIG_MSA1_DECODER 0
+#define CONFIG_MSCC_DECODER 0
+#define CONFIG_MSMPEG4V1_DECODER 0
+#define CONFIG_MSMPEG4V2_DECODER 0
+#define CONFIG_MSMPEG4V3_DECODER 0
+#define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0
+#define CONFIG_MSRLE_DECODER 0
+#define CONFIG_MSS1_DECODER 0
+#define CONFIG_MSS2_DECODER 0
+#define CONFIG_MSVIDEO1_DECODER 0
+#define CONFIG_MSZH_DECODER 0
+#define CONFIG_MTS2_DECODER 0
+#define CONFIG_MV30_DECODER 0
+#define CONFIG_MVC1_DECODER 0
+#define CONFIG_MVC2_DECODER 0
+#define CONFIG_MVDV_DECODER 0
+#define CONFIG_MVHA_DECODER 0
+#define CONFIG_MWSC_DECODER 0
+#define CONFIG_MXPEG_DECODER 0
+#define CONFIG_NUV_DECODER 0
+#define CONFIG_PAF_VIDEO_DECODER 0
+#define CONFIG_PAM_DECODER 0
+#define CONFIG_PBM_DECODER 0
+#define CONFIG_PCX_DECODER 0
+#define CONFIG_PGM_DECODER 0
+#define CONFIG_PGMYUV_DECODER 0
+#define CONFIG_PICTOR_DECODER 0
+#define CONFIG_PIXLET_DECODER 0
+#define CONFIG_PNG_DECODER 0
+#define CONFIG_PPM_DECODER 0
+#define CONFIG_PRORES_DECODER 0
+#define CONFIG_PROSUMER_DECODER 0
+#define CONFIG_PSD_DECODER 0
+#define CONFIG_PTX_DECODER 0
+#define CONFIG_QDRAW_DECODER 0
+#define CONFIG_QPEG_DECODER 0
+#define CONFIG_QTRLE_DECODER 0
+#define CONFIG_R10K_DECODER 0
+#define CONFIG_R210_DECODER 0
+#define CONFIG_RASC_DECODER 0
+#define CONFIG_RAWVIDEO_DECODER 0
+#define CONFIG_RL2_DECODER 0
+#define CONFIG_ROQ_DECODER 0
+#define CONFIG_RPZA_DECODER 0
+#define CONFIG_RSCC_DECODER 0
+#define CONFIG_RV10_DECODER 0
+#define CONFIG_RV20_DECODER 0
+#define CONFIG_RV30_DECODER 0
+#define CONFIG_RV40_DECODER 0
+#define CONFIG_S302M_DECODER 0
+#define CONFIG_SANM_DECODER 0
+#define CONFIG_SCPR_DECODER 0
+#define CONFIG_SCREENPRESSO_DECODER 0
+#define CONFIG_SGI_DECODER 0
+#define CONFIG_SGIRLE_DECODER 0
+#define CONFIG_SHEERVIDEO_DECODER 0
+#define CONFIG_SMACKER_DECODER 0
+#define CONFIG_SMC_DECODER 0
+#define CONFIG_SMVJPEG_DECODER 0
+#define CONFIG_SNOW_DECODER 0
+#define CONFIG_SP5X_DECODER 0
+#define CONFIG_SPEEDHQ_DECODER 0
+#define CONFIG_SRGC_DECODER 0
+#define CONFIG_SUNRAST_DECODER 0
+#define CONFIG_SVQ1_DECODER 0
+#define CONFIG_SVQ3_DECODER 0
+#define CONFIG_TARGA_DECODER 0
+#define CONFIG_TARGA_Y216_DECODER 0
+#define CONFIG_TDSC_DECODER 0
+#define CONFIG_THEORA_DECODER 1
+#define CONFIG_THP_DECODER 0
+#define CONFIG_TIERTEXSEQVIDEO_DECODER 0
+#define CONFIG_TIFF_DECODER 0
+#define CONFIG_TMV_DECODER 0
+#define CONFIG_TRUEMOTION1_DECODER 0
+#define CONFIG_TRUEMOTION2_DECODER 0
+#define CONFIG_TRUEMOTION2RT_DECODER 0
+#define CONFIG_TSCC_DECODER 0
+#define CONFIG_TSCC2_DECODER 0
+#define CONFIG_TXD_DECODER 0
+#define CONFIG_ULTI_DECODER 0
+#define CONFIG_UTVIDEO_DECODER 0
+#define CONFIG_V210_DECODER 0
+#define CONFIG_V210X_DECODER 0
+#define CONFIG_V308_DECODER 0
+#define CONFIG_V408_DECODER 0
+#define CONFIG_V410_DECODER 0
+#define CONFIG_VB_DECODER 0
+#define CONFIG_VBLE_DECODER 0
+#define CONFIG_VC1_DECODER 0
+#define CONFIG_VC1_CRYSTALHD_DECODER 0
+#define CONFIG_VC1IMAGE_DECODER 0
+#define CONFIG_VC1_MMAL_DECODER 0
+#define CONFIG_VC1_QSV_DECODER 0
+#define CONFIG_VC1_V4L2M2M_DECODER 0
+#define CONFIG_VCR1_DECODER 0
+#define CONFIG_VMDVIDEO_DECODER 0
+#define CONFIG_VMNC_DECODER 0
+#define CONFIG_VP3_DECODER 1
+#define CONFIG_VP4_DECODER 0
+#define CONFIG_VP5_DECODER 0
+#define CONFIG_VP6_DECODER 0
+#define CONFIG_VP6A_DECODER 0
+#define CONFIG_VP6F_DECODER 0
+#define CONFIG_VP7_DECODER 0
+#define CONFIG_VP8_DECODER 1
+#define CONFIG_VP8_RKMPP_DECODER 0
+#define CONFIG_VP8_V4L2M2M_DECODER 0
+#define CONFIG_VP9_DECODER 1
+#define CONFIG_VP9_RKMPP_DECODER 0
+#define CONFIG_VP9_V4L2M2M_DECODER 0
+#define CONFIG_VQA_DECODER 0
+#define CONFIG_WEBP_DECODER 0
+#define CONFIG_WCMV_DECODER 0
+#define CONFIG_WRAPPED_AVFRAME_DECODER 0
+#define CONFIG_WMV1_DECODER 0
+#define CONFIG_WMV2_DECODER 0
+#define CONFIG_WMV3_DECODER 0
+#define CONFIG_WMV3_CRYSTALHD_DECODER 0
+#define CONFIG_WMV3IMAGE_DECODER 0
+#define CONFIG_WNV1_DECODER 0
+#define CONFIG_XAN_WC3_DECODER 0
+#define CONFIG_XAN_WC4_DECODER 0
+#define CONFIG_XBM_DECODER 0
+#define CONFIG_XFACE_DECODER 0
+#define CONFIG_XL_DECODER 0
+#define CONFIG_XPM_DECODER 0
+#define CONFIG_XWD_DECODER 0
+#define CONFIG_Y41P_DECODER 0
+#define CONFIG_YLC_DECODER 0
+#define CONFIG_YOP_DECODER 0
+#define CONFIG_YUV4_DECODER 0
+#define CONFIG_ZERO12V_DECODER 0
+#define CONFIG_ZEROCODEC_DECODER 0
+#define CONFIG_ZLIB_DECODER 0
+#define CONFIG_ZMBV_DECODER 0
+#define CONFIG_AAC_DECODER 0
+#define CONFIG_AAC_FIXED_DECODER 0
+#define CONFIG_AAC_LATM_DECODER 0
+#define CONFIG_AC3_DECODER 0
+#define CONFIG_AC3_FIXED_DECODER 0
+#define CONFIG_ACELP_KELVIN_DECODER 0
+#define CONFIG_ALAC_DECODER 0
+#define CONFIG_ALS_DECODER 0
+#define CONFIG_AMRNB_DECODER 0
+#define CONFIG_AMRWB_DECODER 0
+#define CONFIG_APE_DECODER 0
+#define CONFIG_APTX_DECODER 1
+#define CONFIG_APTX_HD_DECODER 0
+#define CONFIG_ATRAC1_DECODER 0
+#define CONFIG_ATRAC3_DECODER 0
+#define CONFIG_ATRAC3AL_DECODER 0
+#define CONFIG_ATRAC3P_DECODER 0
+#define CONFIG_ATRAC3PAL_DECODER 0
+#define CONFIG_ATRAC9_DECODER 0
+#define CONFIG_BINKAUDIO_DCT_DECODER 0
+#define CONFIG_BINKAUDIO_RDFT_DECODER 0
+#define CONFIG_BMV_AUDIO_DECODER 0
+#define CONFIG_COOK_DECODER 0
+#define CONFIG_DCA_DECODER 0
+#define CONFIG_DOLBY_E_DECODER 0
+#define CONFIG_DSD_LSBF_DECODER 0
+#define CONFIG_DSD_MSBF_DECODER 0
+#define CONFIG_DSD_LSBF_PLANAR_DECODER 0
+#define CONFIG_DSD_MSBF_PLANAR_DECODER 0
+#define CONFIG_DSICINAUDIO_DECODER 0
+#define CONFIG_DSS_SP_DECODER 0
+#define CONFIG_DST_DECODER 0
+#define CONFIG_EAC3_DECODER 0
+#define CONFIG_EVRC_DECODER 0
+#define CONFIG_FFWAVESYNTH_DECODER 0
+#define CONFIG_FLAC_DECODER 1
+#define CONFIG_G723_1_DECODER 0
+#define CONFIG_G729_DECODER 0
+#define CONFIG_GSM_DECODER 0
+#define CONFIG_GSM_MS_DECODER 0
+#define CONFIG_HCA_DECODER 0
+#define CONFIG_HCOM_DECODER 0
+#define CONFIG_IAC_DECODER 0
+#define CONFIG_ILBC_DECODER 0
+#define CONFIG_IMC_DECODER 0
+#define CONFIG_INTERPLAY_ACM_DECODER 0
+#define CONFIG_MACE3_DECODER 0
+#define CONFIG_MACE6_DECODER 0
+#define CONFIG_METASOUND_DECODER 0
+#define CONFIG_MLP_DECODER 0
+#define CONFIG_MP1_DECODER 0
+#define CONFIG_MP1FLOAT_DECODER 0
+#define CONFIG_MP2_DECODER 0
+#define CONFIG_MP2FLOAT_DECODER 0
+#define CONFIG_MP3FLOAT_DECODER 0
+#define CONFIG_MP3_DECODER 1
+#define CONFIG_MP3ADUFLOAT_DECODER 0
+#define CONFIG_MP3ADU_DECODER 0
+#define CONFIG_MP3ON4FLOAT_DECODER 0
+#define CONFIG_MP3ON4_DECODER 0
+#define CONFIG_MPC7_DECODER 0
+#define CONFIG_MPC8_DECODER 0
+#define CONFIG_NELLYMOSER_DECODER 0
+#define CONFIG_ON2AVC_DECODER 0
+#define CONFIG_OPUS_DECODER 0
+#define CONFIG_PAF_AUDIO_DECODER 0
+#define CONFIG_QCELP_DECODER 0
+#define CONFIG_QDM2_DECODER 0
+#define CONFIG_QDMC_DECODER 0
+#define CONFIG_RA_144_DECODER 0
+#define CONFIG_RA_288_DECODER 0
+#define CONFIG_RALF_DECODER 0
+#define CONFIG_SBC_DECODER 1
+#define CONFIG_SHORTEN_DECODER 0
+#define CONFIG_SIPR_DECODER 0
+#define CONFIG_SIREN_DECODER 0
+#define CONFIG_SMACKAUD_DECODER 0
+#define CONFIG_SONIC_DECODER 0
+#define CONFIG_TAK_DECODER 0
+#define CONFIG_TRUEHD_DECODER 0
+#define CONFIG_TRUESPEECH_DECODER 0
+#define CONFIG_TTA_DECODER 0
+#define CONFIG_TWINVQ_DECODER 0
+#define CONFIG_VMDAUDIO_DECODER 0
+#define CONFIG_VORBIS_DECODER 1
+#define CONFIG_WAVPACK_DECODER 0
+#define CONFIG_WMALOSSLESS_DECODER 0
+#define CONFIG_WMAPRO_DECODER 0
+#define CONFIG_WMAV1_DECODER 0
+#define CONFIG_WMAV2_DECODER 0
+#define CONFIG_WMAVOICE_DECODER 0
+#define CONFIG_WS_SND1_DECODER 0
+#define CONFIG_XMA1_DECODER 0
+#define CONFIG_XMA2_DECODER 0
+#define CONFIG_PCM_ALAW_DECODER 1
+#define CONFIG_PCM_BLURAY_DECODER 0
+#define CONFIG_PCM_DVD_DECODER 0
+#define CONFIG_PCM_F16LE_DECODER 0
+#define CONFIG_PCM_F24LE_DECODER 0
+#define CONFIG_PCM_F32BE_DECODER 0
+#define CONFIG_PCM_F32LE_DECODER 1
+#define CONFIG_PCM_F64BE_DECODER 0
+#define CONFIG_PCM_F64LE_DECODER 0
+#define CONFIG_PCM_LXF_DECODER 0
+#define CONFIG_PCM_MULAW_DECODER 1
+#define CONFIG_PCM_S8_DECODER 0
+#define CONFIG_PCM_S8_PLANAR_DECODER 0
+#define CONFIG_PCM_S16BE_DECODER 1
+#define CONFIG_PCM_S16BE_PLANAR_DECODER 0
+#define CONFIG_PCM_S16LE_DECODER 1
+#define CONFIG_PCM_S16LE_PLANAR_DECODER 0
+#define CONFIG_PCM_S24BE_DECODER 1
+#define CONFIG_PCM_S24DAUD_DECODER 0
+#define CONFIG_PCM_S24LE_DECODER 1
+#define CONFIG_PCM_S24LE_PLANAR_DECODER 0
+#define CONFIG_PCM_S32BE_DECODER 0
+#define CONFIG_PCM_S32LE_DECODER 1
+#define CONFIG_PCM_S32LE_PLANAR_DECODER 0
+#define CONFIG_PCM_S64BE_DECODER 0
+#define CONFIG_PCM_S64LE_DECODER 0
+#define CONFIG_PCM_U8_DECODER 1
+#define CONFIG_PCM_U16BE_DECODER 0
+#define CONFIG_PCM_U16LE_DECODER 0
+#define CONFIG_PCM_U24BE_DECODER 0
+#define CONFIG_PCM_U24LE_DECODER 0
+#define CONFIG_PCM_U32BE_DECODER 0
+#define CONFIG_PCM_U32LE_DECODER 0
+#define CONFIG_PCM_VIDC_DECODER 0
+#define CONFIG_DERF_DPCM_DECODER 0
+#define CONFIG_GREMLIN_DPCM_DECODER 0
+#define CONFIG_INTERPLAY_DPCM_DECODER 0
+#define CONFIG_ROQ_DPCM_DECODER 0
+#define CONFIG_SDX2_DPCM_DECODER 0
+#define CONFIG_SOL_DPCM_DECODER 0
+#define CONFIG_XAN_DPCM_DECODER 0
+#define CONFIG_ADPCM_4XM_DECODER 0
+#define CONFIG_ADPCM_ADX_DECODER 0
+#define CONFIG_ADPCM_AFC_DECODER 0
+#define CONFIG_ADPCM_AGM_DECODER 0
+#define CONFIG_ADPCM_AICA_DECODER 0
+#define CONFIG_ADPCM_ARGO_DECODER 0
+#define CONFIG_ADPCM_CT_DECODER 0
+#define CONFIG_ADPCM_DTK_DECODER 0
+#define CONFIG_ADPCM_EA_DECODER 0
+#define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0
+#define CONFIG_ADPCM_EA_R1_DECODER 0
+#define CONFIG_ADPCM_EA_R2_DECODER 0
+#define CONFIG_ADPCM_EA_R3_DECODER 0
+#define CONFIG_ADPCM_EA_XAS_DECODER 0
+#define CONFIG_ADPCM_G722_DECODER 0
+#define CONFIG_ADPCM_G726_DECODER 0
+#define CONFIG_ADPCM_G726LE_DECODER 0
+#define CONFIG_ADPCM_IMA_AMV_DECODER 0
+#define CONFIG_ADPCM_IMA_ALP_DECODER 0
+#define CONFIG_ADPCM_IMA_APC_DECODER 0
+#define CONFIG_ADPCM_IMA_APM_DECODER 0
+#define CONFIG_ADPCM_IMA_DAT4_DECODER 0
+#define CONFIG_ADPCM_IMA_DK3_DECODER 0
+#define CONFIG_ADPCM_IMA_DK4_DECODER 0
+#define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0
+#define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0
+#define CONFIG_ADPCM_IMA_ISS_DECODER 0
+#define CONFIG_ADPCM_IMA_MTF_DECODER 0
+#define CONFIG_ADPCM_IMA_OKI_DECODER 0
+#define CONFIG_ADPCM_IMA_QT_DECODER 0
+#define CONFIG_ADPCM_IMA_RAD_DECODER 0
+#define CONFIG_ADPCM_IMA_SSI_DECODER 0
+#define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0
+#define CONFIG_ADPCM_IMA_WAV_DECODER 0
+#define CONFIG_ADPCM_IMA_WS_DECODER 0
+#define CONFIG_ADPCM_MS_DECODER 0
+#define CONFIG_ADPCM_MTAF_DECODER 0
+#define CONFIG_ADPCM_PSX_DECODER 0
+#define CONFIG_ADPCM_SBPRO_2_DECODER 0
+#define CONFIG_ADPCM_SBPRO_3_DECODER 0
+#define CONFIG_ADPCM_SBPRO_4_DECODER 0
+#define CONFIG_ADPCM_SWF_DECODER 0
+#define CONFIG_ADPCM_THP_DECODER 0
+#define CONFIG_ADPCM_THP_LE_DECODER 0
+#define CONFIG_ADPCM_VIMA_DECODER 0
+#define CONFIG_ADPCM_XA_DECODER 0
+#define CONFIG_ADPCM_YAMAHA_DECODER 0
+#define CONFIG_ADPCM_ZORK_DECODER 0
+#define CONFIG_SSA_DECODER 0
+#define CONFIG_ASS_DECODER 0
+#define CONFIG_CCAPTION_DECODER 0
+#define CONFIG_DVBSUB_DECODER 0
+#define CONFIG_DVDSUB_DECODER 0
+#define CONFIG_JACOSUB_DECODER 0
+#define CONFIG_MICRODVD_DECODER 0
+#define CONFIG_MOVTEXT_DECODER 0
+#define CONFIG_MPL2_DECODER 0
+#define CONFIG_PGSSUB_DECODER 0
+#define CONFIG_PJS_DECODER 0
+#define CONFIG_REALTEXT_DECODER 0
+#define CONFIG_SAMI_DECODER 0
+#define CONFIG_SRT_DECODER 0
+#define CONFIG_STL_DECODER 0
+#define CONFIG_SUBRIP_DECODER 0
+#define CONFIG_SUBVIEWER_DECODER 0
+#define CONFIG_SUBVIEWER1_DECODER 0
+#define CONFIG_TEXT_DECODER 0
+#define CONFIG_VPLAYER_DECODER 0
+#define CONFIG_WEBVTT_DECODER 0
+#define CONFIG_XSUB_DECODER 0
+#define CONFIG_AAC_AT_DECODER 0
+#define CONFIG_AC3_AT_DECODER 0
+#define CONFIG_ADPCM_IMA_QT_AT_DECODER 0
+#define CONFIG_ALAC_AT_DECODER 0
+#define CONFIG_AMR_NB_AT_DECODER 0
+#define CONFIG_EAC3_AT_DECODER 0
+#define CONFIG_GSM_MS_AT_DECODER 0
+#define CONFIG_ILBC_AT_DECODER 0
+#define CONFIG_MP1_AT_DECODER 0
+#define CONFIG_MP2_AT_DECODER 0
+#define CONFIG_MP3_AT_DECODER 0
+#define CONFIG_PCM_ALAW_AT_DECODER 0
+#define CONFIG_PCM_MULAW_AT_DECODER 0
+#define CONFIG_QDMC_AT_DECODER 0
+#define CONFIG_QDM2_AT_DECODER 0
+#define CONFIG_LIBARIBB24_DECODER 0
+#define CONFIG_LIBCELT_DECODER 0
+#define CONFIG_LIBCODEC2_DECODER 0
+#define CONFIG_LIBDAV1D_DECODER 0
+#define CONFIG_LIBDAVS2_DECODER 0
+#define CONFIG_LIBFDK_AAC_DECODER 0
+#define CONFIG_LIBGSM_DECODER 0
+#define CONFIG_LIBGSM_MS_DECODER 0
+#define CONFIG_LIBILBC_DECODER 0
+#define CONFIG_LIBOPENCORE_AMRNB_DECODER 0
+#define CONFIG_LIBOPENCORE_AMRWB_DECODER 0
+#define CONFIG_LIBOPENJPEG_DECODER 0
+#define CONFIG_LIBOPUS_DECODER 1
+#define CONFIG_LIBRSVG_DECODER 0
+#define CONFIG_LIBSPEEX_DECODER 0
+#define CONFIG_LIBVORBIS_DECODER 0
+#define CONFIG_LIBVPX_VP8_DECODER 0
+#define CONFIG_LIBVPX_VP9_DECODER 0
+#define CONFIG_LIBZVBI_TELETEXT_DECODER 0
+#define CONFIG_BINTEXT_DECODER 0
+#define CONFIG_XBIN_DECODER 0
+#define CONFIG_IDF_DECODER 0
+#define CONFIG_LIBAOM_AV1_DECODER 0
+#define CONFIG_LIBOPENH264_DECODER 0
+#define CONFIG_H264_CUVID_DECODER 0
+#define CONFIG_HEVC_CUVID_DECODER 0
+#define CONFIG_HEVC_MEDIACODEC_DECODER 0
+#define CONFIG_MJPEG_CUVID_DECODER 0
+#define CONFIG_MJPEG_QSV_DECODER 0
+#define CONFIG_MPEG1_CUVID_DECODER 0
+#define CONFIG_MPEG2_CUVID_DECODER 0
+#define CONFIG_MPEG4_CUVID_DECODER 0
+#define CONFIG_MPEG4_MEDIACODEC_DECODER 0
+#define CONFIG_VC1_CUVID_DECODER 0
+#define CONFIG_VP8_CUVID_DECODER 0
+#define CONFIG_VP8_MEDIACODEC_DECODER 0
+#define CONFIG_VP8_QSV_DECODER 0
+#define CONFIG_VP9_CUVID_DECODER 0
+#define CONFIG_VP9_MEDIACODEC_DECODER 0
+#define CONFIG_VP9_QSV_DECODER 0
+#define CONFIG_A64MULTI_ENCODER 0
+#define CONFIG_A64MULTI5_ENCODER 0
+#define CONFIG_ALIAS_PIX_ENCODER 0
+#define CONFIG_AMV_ENCODER 0
+#define CONFIG_APNG_ENCODER 0
+#define CONFIG_ASV1_ENCODER 0
+#define CONFIG_ASV2_ENCODER 0
+#define CONFIG_AVRP_ENCODER 0
+#define CONFIG_AVUI_ENCODER 0
+#define CONFIG_AYUV_ENCODER 0
+#define CONFIG_BMP_ENCODER 0
+#define CONFIG_CINEPAK_ENCODER 0
+#define CONFIG_CLJR_ENCODER 0
+#define CONFIG_COMFORTNOISE_ENCODER 0
+#define CONFIG_DNXHD_ENCODER 0
+#define CONFIG_DPX_ENCODER 0
+#define CONFIG_DVVIDEO_ENCODER 0
+#define CONFIG_FFV1_ENCODER 0
+#define CONFIG_FFVHUFF_ENCODER 0
+#define CONFIG_FITS_ENCODER 0
+#define CONFIG_FLASHSV_ENCODER 0
+#define CONFIG_FLASHSV2_ENCODER 0
+#define CONFIG_FLV_ENCODER 0
+#define CONFIG_GIF_ENCODER 0
+#define CONFIG_H261_ENCODER 0
+#define CONFIG_H263_ENCODER 0
+#define CONFIG_H263P_ENCODER 0
+#define CONFIG_HAP_ENCODER 0
+#define CONFIG_HUFFYUV_ENCODER 0
+#define CONFIG_JPEG2000_ENCODER 0
+#define CONFIG_JPEGLS_ENCODER 0
+#define CONFIG_LJPEG_ENCODER 0
+#define CONFIG_MAGICYUV_ENCODER 0
+#define CONFIG_MJPEG_ENCODER 0
+#define CONFIG_MPEG1VIDEO_ENCODER 0
+#define CONFIG_MPEG2VIDEO_ENCODER 0
+#define CONFIG_MPEG4_ENCODER 0
+#define CONFIG_MSMPEG4V2_ENCODER 0
+#define CONFIG_MSMPEG4V3_ENCODER 0
+#define CONFIG_MSVIDEO1_ENCODER 0
+#define CONFIG_PAM_ENCODER 0
+#define CONFIG_PBM_ENCODER 0
+#define CONFIG_PCX_ENCODER 0
+#define CONFIG_PGM_ENCODER 0
+#define CONFIG_PGMYUV_ENCODER 0
+#define CONFIG_PNG_ENCODER 0
+#define CONFIG_PPM_ENCODER 0
+#define CONFIG_PRORES_ENCODER 0
+#define CONFIG_PRORES_AW_ENCODER 0
+#define CONFIG_PRORES_KS_ENCODER 0
+#define CONFIG_QTRLE_ENCODER 0
+#define CONFIG_R10K_ENCODER 0
+#define CONFIG_R210_ENCODER 0
+#define CONFIG_RAWVIDEO_ENCODER 0
+#define CONFIG_ROQ_ENCODER 0
+#define CONFIG_RV10_ENCODER 0
+#define CONFIG_RV20_ENCODER 0
+#define CONFIG_S302M_ENCODER 0
+#define CONFIG_SGI_ENCODER 0
+#define CONFIG_SNOW_ENCODER 0
+#define CONFIG_SUNRAST_ENCODER 0
+#define CONFIG_SVQ1_ENCODER 0
+#define CONFIG_TARGA_ENCODER 0
+#define CONFIG_TIFF_ENCODER 0
+#define CONFIG_UTVIDEO_ENCODER 0
+#define CONFIG_V210_ENCODER 0
+#define CONFIG_V308_ENCODER 0
+#define CONFIG_V408_ENCODER 0
+#define CONFIG_V410_ENCODER 0
+#define CONFIG_VC2_ENCODER 0
+#define CONFIG_WRAPPED_AVFRAME_ENCODER 0
+#define CONFIG_WMV1_ENCODER 0
+#define CONFIG_WMV2_ENCODER 0
+#define CONFIG_XBM_ENCODER 0
+#define CONFIG_XFACE_ENCODER 0
+#define CONFIG_XWD_ENCODER 0
+#define CONFIG_Y41P_ENCODER 0
+#define CONFIG_YUV4_ENCODER 0
+#define CONFIG_ZLIB_ENCODER 0
+#define CONFIG_ZMBV_ENCODER 0
+#define CONFIG_AAC_ENCODER 0
+#define CONFIG_AC3_ENCODER 0
+#define CONFIG_AC3_FIXED_ENCODER 0
+#define CONFIG_ALAC_ENCODER 0
+#define CONFIG_APTX_ENCODER 0
+#define CONFIG_APTX_HD_ENCODER 0
+#define CONFIG_DCA_ENCODER 0
+#define CONFIG_EAC3_ENCODER 0
+#define CONFIG_FLAC_ENCODER 0
+#define CONFIG_G723_1_ENCODER 0
+#define CONFIG_MLP_ENCODER 0
+#define CONFIG_MP2_ENCODER 0
+#define CONFIG_MP2FIXED_ENCODER 0
+#define CONFIG_NELLYMOSER_ENCODER 0
+#define CONFIG_OPUS_ENCODER 0
+#define CONFIG_RA_144_ENCODER 0
+#define CONFIG_SBC_ENCODER 0
+#define CONFIG_SONIC_ENCODER 0
+#define CONFIG_SONIC_LS_ENCODER 0
+#define CONFIG_TRUEHD_ENCODER 0
+#define CONFIG_TTA_ENCODER 0
+#define CONFIG_VORBIS_ENCODER 0
+#define CONFIG_WAVPACK_ENCODER 0
+#define CONFIG_WMAV1_ENCODER 0
+#define CONFIG_WMAV2_ENCODER 0
+#define CONFIG_PCM_ALAW_ENCODER 0
+#define CONFIG_PCM_DVD_ENCODER 0
+#define CONFIG_PCM_F32BE_ENCODER 0
+#define CONFIG_PCM_F32LE_ENCODER 0
+#define CONFIG_PCM_F64BE_ENCODER 0
+#define CONFIG_PCM_F64LE_ENCODER 0
+#define CONFIG_PCM_MULAW_ENCODER 0
+#define CONFIG_PCM_S8_ENCODER 0
+#define CONFIG_PCM_S8_PLANAR_ENCODER 0
+#define CONFIG_PCM_S16BE_ENCODER 0
+#define CONFIG_PCM_S16BE_PLANAR_ENCODER 0
+#define CONFIG_PCM_S16LE_ENCODER 0
+#define CONFIG_PCM_S16LE_PLANAR_ENCODER 0
+#define CONFIG_PCM_S24BE_ENCODER 0
+#define CONFIG_PCM_S24DAUD_ENCODER 0
+#define CONFIG_PCM_S24LE_ENCODER 0
+#define CONFIG_PCM_S24LE_PLANAR_ENCODER 0
+#define CONFIG_PCM_S32BE_ENCODER 0
+#define CONFIG_PCM_S32LE_ENCODER 0
+#define CONFIG_PCM_S32LE_PLANAR_ENCODER 0
+#define CONFIG_PCM_S64BE_ENCODER 0
+#define CONFIG_PCM_S64LE_ENCODER 0
+#define CONFIG_PCM_U8_ENCODER 0
+#define CONFIG_PCM_U16BE_ENCODER 0
+#define CONFIG_PCM_U16LE_ENCODER 0
+#define CONFIG_PCM_U24BE_ENCODER 0
+#define CONFIG_PCM_U24LE_ENCODER 0
+#define CONFIG_PCM_U32BE_ENCODER 0
+#define CONFIG_PCM_U32LE_ENCODER 0
+#define CONFIG_PCM_VIDC_ENCODER 0
+#define CONFIG_ROQ_DPCM_ENCODER 0
+#define CONFIG_ADPCM_ADX_ENCODER 0
+#define CONFIG_ADPCM_G722_ENCODER 0
+#define CONFIG_ADPCM_G726_ENCODER 0
+#define CONFIG_ADPCM_G726LE_ENCODER 0
+#define CONFIG_ADPCM_IMA_QT_ENCODER 0
+#define CONFIG_ADPCM_IMA_WAV_ENCODER 0
+#define CONFIG_ADPCM_MS_ENCODER 0
+#define CONFIG_ADPCM_SWF_ENCODER 0
+#define CONFIG_ADPCM_YAMAHA_ENCODER 0
+#define CONFIG_SSA_ENCODER 0
+#define CONFIG_ASS_ENCODER 0
+#define CONFIG_DVBSUB_ENCODER 0
+#define CONFIG_DVDSUB_ENCODER 0
+#define CONFIG_MOVTEXT_ENCODER 0
+#define CONFIG_SRT_ENCODER 0
+#define CONFIG_SUBRIP_ENCODER 0
+#define CONFIG_TEXT_ENCODER 0
+#define CONFIG_WEBVTT_ENCODER 0
+#define CONFIG_XSUB_ENCODER 0
+#define CONFIG_AAC_AT_ENCODER 0
+#define CONFIG_ALAC_AT_ENCODER 0
+#define CONFIG_ILBC_AT_ENCODER 0
+#define CONFIG_PCM_ALAW_AT_ENCODER 0
+#define CONFIG_PCM_MULAW_AT_ENCODER 0
+#define CONFIG_LIBAOM_AV1_ENCODER 0
+#define CONFIG_LIBCODEC2_ENCODER 0
+#define CONFIG_LIBFDK_AAC_ENCODER 0
+#define CONFIG_LIBGSM_ENCODER 0
+#define CONFIG_LIBGSM_MS_ENCODER 0
+#define CONFIG_LIBILBC_ENCODER 0
+#define CONFIG_LIBMP3LAME_ENCODER 0
+#define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0
+#define CONFIG_LIBOPENJPEG_ENCODER 0
+#define CONFIG_LIBOPUS_ENCODER 0
+#define CONFIG_LIBRAV1E_ENCODER 0
+#define CONFIG_LIBSHINE_ENCODER 0
+#define CONFIG_LIBSPEEX_ENCODER 0
+#define CONFIG_LIBTHEORA_ENCODER 0
+#define CONFIG_LIBTWOLAME_ENCODER 0
+#define CONFIG_LIBVO_AMRWBENC_ENCODER 0
+#define CONFIG_LIBVORBIS_ENCODER 0
+#define CONFIG_LIBVPX_VP8_ENCODER 0
+#define CONFIG_LIBVPX_VP9_ENCODER 0
+#define CONFIG_LIBWAVPACK_ENCODER 0
+#define CONFIG_LIBWEBP_ANIM_ENCODER 0
+#define CONFIG_LIBWEBP_ENCODER 0
+#define CONFIG_LIBX262_ENCODER 0
+#define CONFIG_LIBX264_ENCODER 0
+#define CONFIG_LIBX264RGB_ENCODER 0
+#define CONFIG_LIBX265_ENCODER 0
+#define CONFIG_LIBXAVS_ENCODER 0
+#define CONFIG_LIBXAVS2_ENCODER 0
+#define CONFIG_LIBXVID_ENCODER 0
+#define CONFIG_H263_V4L2M2M_ENCODER 0
+#define CONFIG_LIBOPENH264_ENCODER 0
+#define CONFIG_H264_AMF_ENCODER 0
+#define CONFIG_H264_NVENC_ENCODER 0
+#define CONFIG_H264_OMX_ENCODER 0
+#define CONFIG_H264_QSV_ENCODER 0
+#define CONFIG_H264_V4L2M2M_ENCODER 0
+#define CONFIG_H264_VAAPI_ENCODER 0
+#define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0
+#define CONFIG_NVENC_ENCODER 0
+#define CONFIG_NVENC_H264_ENCODER 0
+#define CONFIG_NVENC_HEVC_ENCODER 0
+#define CONFIG_HEVC_AMF_ENCODER 0
+#define CONFIG_HEVC_NVENC_ENCODER 0
+#define CONFIG_HEVC_QSV_ENCODER 0
+#define CONFIG_HEVC_V4L2M2M_ENCODER 0
+#define CONFIG_HEVC_VAAPI_ENCODER 0
+#define CONFIG_HEVC_VIDEOTOOLBOX_ENCODER 0
+#define CONFIG_LIBKVAZAAR_ENCODER 0
+#define CONFIG_MJPEG_QSV_ENCODER 0
+#define CONFIG_MJPEG_VAAPI_ENCODER 0
+#define CONFIG_MPEG2_QSV_ENCODER 0
+#define CONFIG_MPEG2_VAAPI_ENCODER 0
+#define CONFIG_MPEG4_OMX_ENCODER 0
+#define CONFIG_MPEG4_V4L2M2M_ENCODER 0
+#define CONFIG_VP8_V4L2M2M_ENCODER 0
+#define CONFIG_VP8_VAAPI_ENCODER 0
+#define CONFIG_VP9_VAAPI_ENCODER 0
+#define CONFIG_VP9_QSV_ENCODER 0
+#define CONFIG_H263_VAAPI_HWACCEL 0
+#define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0
+#define CONFIG_H264_D3D11VA_HWACCEL 0
+#define CONFIG_H264_D3D11VA2_HWACCEL 0
+#define CONFIG_H264_DXVA2_HWACCEL 0
+#define CONFIG_H264_NVDEC_HWACCEL 0
+#define CONFIG_H264_VAAPI_HWACCEL 0
+#define CONFIG_H264_VDPAU_HWACCEL 0
+#define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0
+#define CONFIG_HEVC_D3D11VA_HWACCEL 0
+#define CONFIG_HEVC_D3D11VA2_HWACCEL 0
+#define CONFIG_HEVC_DXVA2_HWACCEL 0
+#define CONFIG_HEVC_NVDEC_HWACCEL 0
+#define CONFIG_HEVC_VAAPI_HWACCEL 0
+#define CONFIG_HEVC_VDPAU_HWACCEL 0
+#define CONFIG_HEVC_VIDEOTOOLBOX_HWACCEL 0
+#define CONFIG_MJPEG_NVDEC_HWACCEL 0
+#define CONFIG_MJPEG_VAAPI_HWACCEL 0
+#define CONFIG_MPEG1_NVDEC_HWACCEL 0
+#define CONFIG_MPEG1_VDPAU_HWACCEL 0
+#define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0
+#define CONFIG_MPEG1_XVMC_HWACCEL 0
+#define CONFIG_MPEG2_D3D11VA_HWACCEL 0
+#define CONFIG_MPEG2_D3D11VA2_HWACCEL 0
+#define CONFIG_MPEG2_NVDEC_HWACCEL 0
+#define CONFIG_MPEG2_DXVA2_HWACCEL 0
+#define CONFIG_MPEG2_VAAPI_HWACCEL 0
+#define CONFIG_MPEG2_VDPAU_HWACCEL 0
+#define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0
+#define CONFIG_MPEG2_XVMC_HWACCEL 0
+#define CONFIG_MPEG4_NVDEC_HWACCEL 0
+#define CONFIG_MPEG4_VAAPI_HWACCEL 0
+#define CONFIG_MPEG4_VDPAU_HWACCEL 0
+#define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0
+#define CONFIG_VC1_D3D11VA_HWACCEL 0
+#define CONFIG_VC1_D3D11VA2_HWACCEL 0
+#define CONFIG_VC1_DXVA2_HWACCEL 0
+#define CONFIG_VC1_NVDEC_HWACCEL 0
+#define CONFIG_VC1_VAAPI_HWACCEL 0
+#define CONFIG_VC1_VDPAU_HWACCEL 0
+#define CONFIG_VP8_NVDEC_HWACCEL 0
+#define CONFIG_VP8_VAAPI_HWACCEL 0
+#define CONFIG_VP9_D3D11VA_HWACCEL 0
+#define CONFIG_VP9_D3D11VA2_HWACCEL 0
+#define CONFIG_VP9_DXVA2_HWACCEL 0
+#define CONFIG_VP9_NVDEC_HWACCEL 0
+#define CONFIG_VP9_VAAPI_HWACCEL 0
+#define CONFIG_VP9_VDPAU_HWACCEL 0
+#define CONFIG_WMV3_D3D11VA_HWACCEL 0
+#define CONFIG_WMV3_D3D11VA2_HWACCEL 0
+#define CONFIG_WMV3_DXVA2_HWACCEL 0
+#define CONFIG_WMV3_NVDEC_HWACCEL 0
+#define CONFIG_WMV3_VAAPI_HWACCEL 0
+#define CONFIG_WMV3_VDPAU_HWACCEL 0
+#define CONFIG_AAC_PARSER 0
+#define CONFIG_AAC_LATM_PARSER 0
+#define CONFIG_AC3_PARSER 0
+#define CONFIG_ADX_PARSER 0
+#define CONFIG_AV1_PARSER 0
+#define CONFIG_AVS2_PARSER 0
+#define CONFIG_BMP_PARSER 0
+#define CONFIG_CAVSVIDEO_PARSER 0
+#define CONFIG_COOK_PARSER 0
+#define CONFIG_DCA_PARSER 0
+#define CONFIG_DIRAC_PARSER 0
+#define CONFIG_DNXHD_PARSER 0
+#define CONFIG_DPX_PARSER 0
+#define CONFIG_DVAUDIO_PARSER 0
+#define CONFIG_DVBSUB_PARSER 0
+#define CONFIG_DVDSUB_PARSER 0
+#define CONFIG_DVD_NAV_PARSER 0
+#define CONFIG_FLAC_PARSER 1
+#define CONFIG_G723_1_PARSER 0
+#define CONFIG_G729_PARSER 0
+#define CONFIG_GIF_PARSER 0
+#define CONFIG_GSM_PARSER 0
+#define CONFIG_H261_PARSER 0
+#define CONFIG_H263_PARSER 0
+#define CONFIG_H264_PARSER 0
+#define CONFIG_HEVC_PARSER 0
+#define CONFIG_MJPEG_PARSER 0
+#define CONFIG_MLP_PARSER 0
+#define CONFIG_MPEG4VIDEO_PARSER 0
+#define CONFIG_MPEGAUDIO_PARSER 1
+#define CONFIG_MPEGVIDEO_PARSER 0
+#define CONFIG_OPUS_PARSER 1
+#define CONFIG_PNG_PARSER 0
+#define CONFIG_PNM_PARSER 0
+#define CONFIG_RV30_PARSER 0
+#define CONFIG_RV40_PARSER 0
+#define CONFIG_SBC_PARSER 0
+#define CONFIG_SIPR_PARSER 0
+#define CONFIG_TAK_PARSER 0
+#define CONFIG_VC1_PARSER 0
+#define CONFIG_VORBIS_PARSER 1
+#define CONFIG_VP3_PARSER 1
+#define CONFIG_VP8_PARSER 1
+#define CONFIG_VP9_PARSER 1
+#define CONFIG_WEBP_PARSER 0
+#define CONFIG_XMA_PARSER 0
+#define CONFIG_ALSA_INDEV 0
+#define CONFIG_ANDROID_CAMERA_INDEV 0
+#define CONFIG_AVFOUNDATION_INDEV 0
+#define CONFIG_BKTR_INDEV 0
+#define CONFIG_DECKLINK_INDEV 0
+#define CONFIG_DSHOW_INDEV 0
+#define CONFIG_FBDEV_INDEV 0
+#define CONFIG_GDIGRAB_INDEV 0
+#define CONFIG_IEC61883_INDEV 0
+#define CONFIG_JACK_INDEV 0
+#define CONFIG_KMSGRAB_INDEV 0
+#define CONFIG_LAVFI_INDEV 0
+#define CONFIG_OPENAL_INDEV 0
+#define CONFIG_OSS_INDEV 0
+#define CONFIG_PULSE_INDEV 0
+#define CONFIG_SNDIO_INDEV 0
+#define CONFIG_V4L2_INDEV 0
+#define CONFIG_VFWCAP_INDEV 0
+#define CONFIG_XCBGRAB_INDEV 0
+#define CONFIG_LIBCDIO_INDEV 0
+#define CONFIG_LIBDC1394_INDEV 0
+#define CONFIG_ALSA_OUTDEV 0
+#define CONFIG_CACA_OUTDEV 0
+#define CONFIG_DECKLINK_OUTDEV 0
+#define CONFIG_FBDEV_OUTDEV 0
+#define CONFIG_OPENGL_OUTDEV 0
+#define CONFIG_OSS_OUTDEV 0
+#define CONFIG_PULSE_OUTDEV 0
+#define CONFIG_SDL2_OUTDEV 0
+#define CONFIG_SNDIO_OUTDEV 0
+#define CONFIG_V4L2_OUTDEV 0
+#define CONFIG_XV_OUTDEV 0
+#define CONFIG_ABENCH_FILTER 0
+#define CONFIG_ACOMPRESSOR_FILTER 0
+#define CONFIG_ACONTRAST_FILTER 0
+#define CONFIG_ACOPY_FILTER 0
+#define CONFIG_ACUE_FILTER 0
+#define CONFIG_ACROSSFADE_FILTER 0
+#define CONFIG_ACROSSOVER_FILTER 0
+#define CONFIG_ACRUSHER_FILTER 0
+#define CONFIG_ADECLICK_FILTER 0
+#define CONFIG_ADECLIP_FILTER 0
+#define CONFIG_ADELAY_FILTER 0
+#define CONFIG_ADERIVATIVE_FILTER 0
+#define CONFIG_AECHO_FILTER 0
+#define CONFIG_AEMPHASIS_FILTER 0
+#define CONFIG_AEVAL_FILTER 0
+#define CONFIG_AFADE_FILTER 0
+#define CONFIG_AFFTDN_FILTER 0
+#define CONFIG_AFFTFILT_FILTER 0
+#define CONFIG_AFIR_FILTER 0
+#define CONFIG_AFORMAT_FILTER 0
+#define CONFIG_AGATE_FILTER 0
+#define CONFIG_AIIR_FILTER 0
+#define CONFIG_AINTEGRAL_FILTER 0
+#define CONFIG_AINTERLEAVE_FILTER 0
+#define CONFIG_ALIMITER_FILTER 0
+#define CONFIG_ALLPASS_FILTER 0
+#define CONFIG_ALOOP_FILTER 0
+#define CONFIG_AMERGE_FILTER 0
+#define CONFIG_AMETADATA_FILTER 0
+#define CONFIG_AMIX_FILTER 0
+#define CONFIG_AMULTIPLY_FILTER 0
+#define CONFIG_ANEQUALIZER_FILTER 0
+#define CONFIG_ANLMDN_FILTER 0
+#define CONFIG_ANLMS_FILTER 0
+#define CONFIG_ANULL_FILTER 0
+#define CONFIG_APAD_FILTER 0
+#define CONFIG_APERMS_FILTER 0
+#define CONFIG_APHASER_FILTER 0
+#define CONFIG_APULSATOR_FILTER 0
+#define CONFIG_AREALTIME_FILTER 0
+#define CONFIG_ARESAMPLE_FILTER 0
+#define CONFIG_AREVERSE_FILTER 0
+#define CONFIG_ARNNDN_FILTER 0
+#define CONFIG_ASELECT_FILTER 0
+#define CONFIG_ASENDCMD_FILTER 0
+#define CONFIG_ASETNSAMPLES_FILTER 0
+#define CONFIG_ASETPTS_FILTER 0
+#define CONFIG_ASETRATE_FILTER 0
+#define CONFIG_ASETTB_FILTER 0
+#define CONFIG_ASHOWINFO_FILTER 0
+#define CONFIG_ASIDEDATA_FILTER 0
+#define CONFIG_ASOFTCLIP_FILTER 0
+#define CONFIG_ASPLIT_FILTER 0
+#define CONFIG_ASR_FILTER 0
+#define CONFIG_ASTATS_FILTER 0
+#define CONFIG_ASTREAMSELECT_FILTER 0
+#define CONFIG_ATEMPO_FILTER 0
+#define CONFIG_ATRIM_FILTER 0
+#define CONFIG_AXCORRELATE_FILTER 0
+#define CONFIG_AZMQ_FILTER 0
+#define CONFIG_BANDPASS_FILTER 0
+#define CONFIG_BANDREJECT_FILTER 0
+#define CONFIG_BASS_FILTER 0
+#define CONFIG_BIQUAD_FILTER 0
+#define CONFIG_BS2B_FILTER 0
+#define CONFIG_CHROMABER_VULKAN_FILTER 0
+#define CONFIG_CHANNELMAP_FILTER 0
+#define CONFIG_CHANNELSPLIT_FILTER 0
+#define CONFIG_CHORUS_FILTER 0
+#define CONFIG_COMPAND_FILTER 0
+#define CONFIG_COMPENSATIONDELAY_FILTER 0
+#define CONFIG_CROSSFEED_FILTER 0
+#define CONFIG_CRYSTALIZER_FILTER 0
+#define CONFIG_DCSHIFT_FILTER 0
+#define CONFIG_DEESSER_FILTER 0
+#define CONFIG_DRMETER_FILTER 0
+#define CONFIG_DYNAUDNORM_FILTER 0
+#define CONFIG_EARWAX_FILTER 0
+#define CONFIG_EBUR128_FILTER 0
+#define CONFIG_EQUALIZER_FILTER 0
+#define CONFIG_EXTRASTEREO_FILTER 0
+#define CONFIG_FIREQUALIZER_FILTER 0
+#define CONFIG_FLANGER_FILTER 0
+#define CONFIG_HAAS_FILTER 0
+#define CONFIG_HDCD_FILTER 0
+#define CONFIG_HEADPHONE_FILTER 0
+#define CONFIG_HIGHPASS_FILTER 0
+#define CONFIG_HIGHSHELF_FILTER 0
+#define CONFIG_JOIN_FILTER 0
+#define CONFIG_LADSPA_FILTER 0
+#define CONFIG_LOUDNORM_FILTER 0
+#define CONFIG_LOWPASS_FILTER 0
+#define CONFIG_LOWSHELF_FILTER 0
+#define CONFIG_LV2_FILTER 0
+#define CONFIG_MCOMPAND_FILTER 0
+#define CONFIG_PAN_FILTER 0
+#define CONFIG_REPLAYGAIN_FILTER 0
+#define CONFIG_RESAMPLE_FILTER 0
+#define CONFIG_RUBBERBAND_FILTER 0
+#define CONFIG_SIDECHAINCOMPRESS_FILTER 0
+#define CONFIG_SIDECHAINGATE_FILTER 0
+#define CONFIG_SILENCEDETECT_FILTER 0
+#define CONFIG_SILENCEREMOVE_FILTER 0
+#define CONFIG_SOFALIZER_FILTER 0
+#define CONFIG_STEREOTOOLS_FILTER 0
+#define CONFIG_STEREOWIDEN_FILTER 0
+#define CONFIG_SUPEREQUALIZER_FILTER 0
+#define CONFIG_SURROUND_FILTER 0
+#define CONFIG_TREBLE_FILTER 0
+#define CONFIG_TREMOLO_FILTER 0
+#define CONFIG_VIBRATO_FILTER 0
+#define CONFIG_VOLUME_FILTER 0
+#define CONFIG_VOLUMEDETECT_FILTER 0
+#define CONFIG_AEVALSRC_FILTER 0
+#define CONFIG_AFIRSRC_FILTER 0
+#define CONFIG_ANOISESRC_FILTER 0
+#define CONFIG_ANULLSRC_FILTER 0
+#define CONFIG_FLITE_FILTER 0
+#define CONFIG_HILBERT_FILTER 0
+#define CONFIG_SINC_FILTER 0
+#define CONFIG_SINE_FILTER 0
+#define CONFIG_ANULLSINK_FILTER 0
+#define CONFIG_ADDROI_FILTER 0
+#define CONFIG_ALPHAEXTRACT_FILTER 0
+#define CONFIG_ALPHAMERGE_FILTER 0
+#define CONFIG_AMPLIFY_FILTER 0
+#define CONFIG_ASS_FILTER 0
+#define CONFIG_ATADENOISE_FILTER 0
+#define CONFIG_AVGBLUR_FILTER 0
+#define CONFIG_AVGBLUR_OPENCL_FILTER 0
+#define CONFIG_AVGBLUR_VULKAN_FILTER 0
+#define CONFIG_BBOX_FILTER 0
+#define CONFIG_BENCH_FILTER 0
+#define CONFIG_BILATERAL_FILTER 0
+#define CONFIG_BITPLANENOISE_FILTER 0
+#define CONFIG_BLACKDETECT_FILTER 0
+#define CONFIG_BLACKFRAME_FILTER 0
+#define CONFIG_BLEND_FILTER 0
+#define CONFIG_BM3D_FILTER 0
+#define CONFIG_BOXBLUR_FILTER 0
+#define CONFIG_BOXBLUR_OPENCL_FILTER 0
+#define CONFIG_BWDIF_FILTER 0
+#define CONFIG_CAS_FILTER 0
+#define CONFIG_CHROMAHOLD_FILTER 0
+#define CONFIG_CHROMAKEY_FILTER 0
+#define CONFIG_CHROMASHIFT_FILTER 0
+#define CONFIG_CIESCOPE_FILTER 0
+#define CONFIG_CODECVIEW_FILTER 0
+#define CONFIG_COLORBALANCE_FILTER 0
+#define CONFIG_COLORCHANNELMIXER_FILTER 0
+#define CONFIG_COLORKEY_FILTER 0
+#define CONFIG_COLORKEY_OPENCL_FILTER 0
+#define CONFIG_COLORHOLD_FILTER 0
+#define CONFIG_COLORLEVELS_FILTER 0
+#define CONFIG_COLORMATRIX_FILTER 0
+#define CONFIG_COLORSPACE_FILTER 0
+#define CONFIG_CONVOLUTION_FILTER 0
+#define CONFIG_CONVOLUTION_OPENCL_FILTER 0
+#define CONFIG_CONVOLVE_FILTER 0
+#define CONFIG_COPY_FILTER 0
+#define CONFIG_COREIMAGE_FILTER 0
+#define CONFIG_COVER_RECT_FILTER 0
+#define CONFIG_CROP_FILTER 0
+#define CONFIG_CROPDETECT_FILTER 0
+#define CONFIG_CUE_FILTER 0
+#define CONFIG_CURVES_FILTER 0
+#define CONFIG_DATASCOPE_FILTER 0
+#define CONFIG_DCTDNOIZ_FILTER 0
+#define CONFIG_DEBAND_FILTER 0
+#define CONFIG_DEBLOCK_FILTER 0
+#define CONFIG_DECIMATE_FILTER 0
+#define CONFIG_DECONVOLVE_FILTER 0
+#define CONFIG_DEDOT_FILTER 0
+#define CONFIG_DEFLATE_FILTER 0
+#define CONFIG_DEFLICKER_FILTER 0
+#define CONFIG_DEINTERLACE_QSV_FILTER 0
+#define CONFIG_DEINTERLACE_VAAPI_FILTER 0
+#define CONFIG_DEJUDDER_FILTER 0
+#define CONFIG_DELOGO_FILTER 0
+#define CONFIG_DENOISE_VAAPI_FILTER 0
+#define CONFIG_DERAIN_FILTER 0
+#define CONFIG_DESHAKE_FILTER 0
+#define CONFIG_DESHAKE_OPENCL_FILTER 0
+#define CONFIG_DESPILL_FILTER 0
+#define CONFIG_DETELECINE_FILTER 0
+#define CONFIG_DILATION_FILTER 0
+#define CONFIG_DILATION_OPENCL_FILTER 0
+#define CONFIG_DISPLACE_FILTER 0
+#define CONFIG_DNN_PROCESSING_FILTER 0
+#define CONFIG_DOUBLEWEAVE_FILTER 0
+#define CONFIG_DRAWBOX_FILTER 0
+#define CONFIG_DRAWGRAPH_FILTER 0
+#define CONFIG_DRAWGRID_FILTER 0
+#define CONFIG_DRAWTEXT_FILTER 0
+#define CONFIG_EDGEDETECT_FILTER 0
+#define CONFIG_ELBG_FILTER 0
+#define CONFIG_ENTROPY_FILTER 0
+#define CONFIG_EQ_FILTER 0
+#define CONFIG_EROSION_FILTER 0
+#define CONFIG_EROSION_OPENCL_FILTER 0
+#define CONFIG_EXTRACTPLANES_FILTER 0
+#define CONFIG_FADE_FILTER 0
+#define CONFIG_FFTDNOIZ_FILTER 0
+#define CONFIG_FFTFILT_FILTER 0
+#define CONFIG_FIELD_FILTER 0
+#define CONFIG_FIELDHINT_FILTER 0
+#define CONFIG_FIELDMATCH_FILTER 0
+#define CONFIG_FIELDORDER_FILTER 0
+#define CONFIG_FILLBORDERS_FILTER 0
+#define CONFIG_FIND_RECT_FILTER 0
+#define CONFIG_FLOODFILL_FILTER 0
+#define CONFIG_FORMAT_FILTER 0
+#define CONFIG_FPS_FILTER 0
+#define CONFIG_FRAMEPACK_FILTER 0
+#define CONFIG_FRAMERATE_FILTER 0
+#define CONFIG_FRAMESTEP_FILTER 0
+#define CONFIG_FREEZEDETECT_FILTER 0
+#define CONFIG_FREEZEFRAMES_FILTER 0
+#define CONFIG_FREI0R_FILTER 0
+#define CONFIG_FSPP_FILTER 0
+#define CONFIG_GBLUR_FILTER 0
+#define CONFIG_GEQ_FILTER 0
+#define CONFIG_GRADFUN_FILTER 0
+#define CONFIG_GRAPHMONITOR_FILTER 0
+#define CONFIG_GREYEDGE_FILTER 0
+#define CONFIG_HALDCLUT_FILTER 0
+#define CONFIG_HFLIP_FILTER 0
+#define CONFIG_HISTEQ_FILTER 0
+#define CONFIG_HISTOGRAM_FILTER 0
+#define CONFIG_HQDN3D_FILTER 0
+#define CONFIG_HQX_FILTER 0
+#define CONFIG_HSTACK_FILTER 0
+#define CONFIG_HUE_FILTER 0
+#define CONFIG_HWDOWNLOAD_FILTER 0
+#define CONFIG_HWMAP_FILTER 0
+#define CONFIG_HWUPLOAD_FILTER 0
+#define CONFIG_HWUPLOAD_CUDA_FILTER 0
+#define CONFIG_HYSTERESIS_FILTER 0
+#define CONFIG_IDET_FILTER 0
+#define CONFIG_IL_FILTER 0
+#define CONFIG_INFLATE_FILTER 0
+#define CONFIG_INTERLACE_FILTER 0
+#define CONFIG_INTERLEAVE_FILTER 0
+#define CONFIG_KERNDEINT_FILTER 0
+#define CONFIG_LAGFUN_FILTER 0
+#define CONFIG_LENSCORRECTION_FILTER 0
+#define CONFIG_LENSFUN_FILTER 0
+#define CONFIG_LIBVMAF_FILTER 0
+#define CONFIG_LIMITER_FILTER 0
+#define CONFIG_LOOP_FILTER 0
+#define CONFIG_LUMAKEY_FILTER 0
+#define CONFIG_LUT_FILTER 0
+#define CONFIG_LUT1D_FILTER 0
+#define CONFIG_LUT2_FILTER 0
+#define CONFIG_LUT3D_FILTER 0
+#define CONFIG_LUTRGB_FILTER 0
+#define CONFIG_LUTYUV_FILTER 0
+#define CONFIG_MASKEDCLAMP_FILTER 0
+#define CONFIG_MASKEDMAX_FILTER 0
+#define CONFIG_MASKEDMERGE_FILTER 0
+#define CONFIG_MASKEDMIN_FILTER 0
+#define CONFIG_MASKEDTHRESHOLD_FILTER 0
+#define CONFIG_MASKFUN_FILTER 0
+#define CONFIG_MCDEINT_FILTER 0
+#define CONFIG_MEDIAN_FILTER 0
+#define CONFIG_MERGEPLANES_FILTER 0
+#define CONFIG_MESTIMATE_FILTER 0
+#define CONFIG_METADATA_FILTER 0
+#define CONFIG_MIDEQUALIZER_FILTER 0
+#define CONFIG_MINTERPOLATE_FILTER 0
+#define CONFIG_MIX_FILTER 0
+#define CONFIG_MPDECIMATE_FILTER 0
+#define CONFIG_NEGATE_FILTER 0
+#define CONFIG_NLMEANS_FILTER 0
+#define CONFIG_NLMEANS_OPENCL_FILTER 0
+#define CONFIG_NNEDI_FILTER 0
+#define CONFIG_NOFORMAT_FILTER 0
+#define CONFIG_NOISE_FILTER 0
+#define CONFIG_NORMALIZE_FILTER 0
+#define CONFIG_NULL_FILTER 0
+#define CONFIG_OCR_FILTER 0
+#define CONFIG_OCV_FILTER 0
+#define CONFIG_OSCILLOSCOPE_FILTER 0
+#define CONFIG_OVERLAY_FILTER 0
+#define CONFIG_OVERLAY_OPENCL_FILTER 0
+#define CONFIG_OVERLAY_QSV_FILTER 0
+#define CONFIG_OVERLAY_VULKAN_FILTER 0
+#define CONFIG_OVERLAY_CUDA_FILTER 0
+#define CONFIG_OWDENOISE_FILTER 0
+#define CONFIG_PAD_FILTER 0
+#define CONFIG_PAD_OPENCL_FILTER 0
+#define CONFIG_PALETTEGEN_FILTER 0
+#define CONFIG_PALETTEUSE_FILTER 0
+#define CONFIG_PERMS_FILTER 0
+#define CONFIG_PERSPECTIVE_FILTER 0
+#define CONFIG_PHASE_FILTER 0
+#define CONFIG_PHOTOSENSITIVITY_FILTER 0
+#define CONFIG_PIXDESCTEST_FILTER 0
+#define CONFIG_PIXSCOPE_FILTER 0
+#define CONFIG_PP_FILTER 0
+#define CONFIG_PP7_FILTER 0
+#define CONFIG_PREMULTIPLY_FILTER 0
+#define CONFIG_PREWITT_FILTER 0
+#define CONFIG_PREWITT_OPENCL_FILTER 0
+#define CONFIG_PROCAMP_VAAPI_FILTER 0
+#define CONFIG_PROGRAM_OPENCL_FILTER 0
+#define CONFIG_PSEUDOCOLOR_FILTER 0
+#define CONFIG_PSNR_FILTER 0
+#define CONFIG_PULLUP_FILTER 0
+#define CONFIG_QP_FILTER 0
+#define CONFIG_RANDOM_FILTER 0
+#define CONFIG_READEIA608_FILTER 0
+#define CONFIG_READVITC_FILTER 0
+#define CONFIG_REALTIME_FILTER 0
+#define CONFIG_REMAP_FILTER 0
+#define CONFIG_REMOVEGRAIN_FILTER 0
+#define CONFIG_REMOVELOGO_FILTER 0
+#define CONFIG_REPEATFIELDS_FILTER 0
+#define CONFIG_REVERSE_FILTER 0
+#define CONFIG_RGBASHIFT_FILTER 0
+#define CONFIG_ROBERTS_FILTER 0
+#define CONFIG_ROBERTS_OPENCL_FILTER 0
+#define CONFIG_ROTATE_FILTER 0
+#define CONFIG_SAB_FILTER 0
+#define CONFIG_SCALE_FILTER 0
+#define CONFIG_SCALE_CUDA_FILTER 0
+#define CONFIG_SCALE_NPP_FILTER 0
+#define CONFIG_SCALE_QSV_FILTER 0
+#define CONFIG_SCALE_VAAPI_FILTER 0
+#define CONFIG_SCALE_VULKAN_FILTER 0
+#define CONFIG_SCALE2REF_FILTER 0
+#define CONFIG_SCROLL_FILTER 0
+#define CONFIG_SELECT_FILTER 0
+#define CONFIG_SELECTIVECOLOR_FILTER 0
+#define CONFIG_SENDCMD_FILTER 0
+#define CONFIG_SEPARATEFIELDS_FILTER 0
+#define CONFIG_SETDAR_FILTER 0
+#define CONFIG_SETFIELD_FILTER 0
+#define CONFIG_SETPARAMS_FILTER 0
+#define CONFIG_SETPTS_FILTER 0
+#define CONFIG_SETRANGE_FILTER 0
+#define CONFIG_SETSAR_FILTER 0
+#define CONFIG_SETTB_FILTER 0
+#define CONFIG_SHARPNESS_VAAPI_FILTER 0
+#define CONFIG_SHOWINFO_FILTER 0
+#define CONFIG_SHOWPALETTE_FILTER 0
+#define CONFIG_SHUFFLEFRAMES_FILTER 0
+#define CONFIG_SHUFFLEPLANES_FILTER 0
+#define CONFIG_SIDEDATA_FILTER 0
+#define CONFIG_SIGNALSTATS_FILTER 0
+#define CONFIG_SIGNATURE_FILTER 0
+#define CONFIG_SMARTBLUR_FILTER 0
+#define CONFIG_SOBEL_FILTER 0
+#define CONFIG_SOBEL_OPENCL_FILTER 0
+#define CONFIG_SPLIT_FILTER 0
+#define CONFIG_SPP_FILTER 0
+#define CONFIG_SR_FILTER 0
+#define CONFIG_SSIM_FILTER 0
+#define CONFIG_STEREO3D_FILTER 0
+#define CONFIG_STREAMSELECT_FILTER 0
+#define CONFIG_SUBTITLES_FILTER 0
+#define CONFIG_SUPER2XSAI_FILTER 0
+#define CONFIG_SWAPRECT_FILTER 0
+#define CONFIG_SWAPUV_FILTER 0
+#define CONFIG_TBLEND_FILTER 0
+#define CONFIG_TELECINE_FILTER 0
+#define CONFIG_THISTOGRAM_FILTER 0
+#define CONFIG_THRESHOLD_FILTER 0
+#define CONFIG_THUMBNAIL_FILTER 0
+#define CONFIG_THUMBNAIL_CUDA_FILTER 0
+#define CONFIG_TILE_FILTER 0
+#define CONFIG_TINTERLACE_FILTER 0
+#define CONFIG_TLUT2_FILTER 0
+#define CONFIG_TMEDIAN_FILTER 0
+#define CONFIG_TMIX_FILTER 0
+#define CONFIG_TONEMAP_FILTER 0
+#define CONFIG_TONEMAP_OPENCL_FILTER 0
+#define CONFIG_TONEMAP_VAAPI_FILTER 0
+#define CONFIG_TPAD_FILTER 0
+#define CONFIG_TRANSPOSE_FILTER 0
+#define CONFIG_TRANSPOSE_NPP_FILTER 0
+#define CONFIG_TRANSPOSE_OPENCL_FILTER 0
+#define CONFIG_TRANSPOSE_VAAPI_FILTER 0
+#define CONFIG_TRIM_FILTER 0
+#define CONFIG_UNPREMULTIPLY_FILTER 0
+#define CONFIG_UNSHARP_FILTER 0
+#define CONFIG_UNSHARP_OPENCL_FILTER 0
+#define CONFIG_USPP_FILTER 0
+#define CONFIG_V360_FILTER 0
+#define CONFIG_VAGUEDENOISER_FILTER 0
+#define CONFIG_VECTORSCOPE_FILTER 0
+#define CONFIG_VFLIP_FILTER 0
+#define CONFIG_VFRDET_FILTER 0
+#define CONFIG_VIBRANCE_FILTER 0
+#define CONFIG_VIDSTABDETECT_FILTER 0
+#define CONFIG_VIDSTABTRANSFORM_FILTER 0
+#define CONFIG_VIGNETTE_FILTER 0
+#define CONFIG_VMAFMOTION_FILTER 0
+#define CONFIG_VPP_QSV_FILTER 0
+#define CONFIG_VSTACK_FILTER 0
+#define CONFIG_W3FDIF_FILTER 0
+#define CONFIG_WAVEFORM_FILTER 0
+#define CONFIG_WEAVE_FILTER 0
+#define CONFIG_XBR_FILTER 0
+#define CONFIG_XFADE_FILTER 0
+#define CONFIG_XFADE_OPENCL_FILTER 0
+#define CONFIG_XMEDIAN_FILTER 0
+#define CONFIG_XSTACK_FILTER 0
+#define CONFIG_YADIF_FILTER 0
+#define CONFIG_YADIF_CUDA_FILTER 0
+#define CONFIG_YAEPBLUR_FILTER 0
+#define CONFIG_ZMQ_FILTER 0
+#define CONFIG_ZOOMPAN_FILTER 0
+#define CONFIG_ZSCALE_FILTER 0
+#define CONFIG_ALLRGB_FILTER 0
+#define CONFIG_ALLYUV_FILTER 0
+#define CONFIG_CELLAUTO_FILTER 0
+#define CONFIG_COLOR_FILTER 0
+#define CONFIG_COREIMAGESRC_FILTER 0
+#define CONFIG_FREI0R_SRC_FILTER 0
+#define CONFIG_HALDCLUTSRC_FILTER 0
+#define CONFIG_LIFE_FILTER 0
+#define CONFIG_MANDELBROT_FILTER 0
+#define CONFIG_MPTESTSRC_FILTER 0
+#define CONFIG_NULLSRC_FILTER 0
+#define CONFIG_OPENCLSRC_FILTER 0
+#define CONFIG_PAL75BARS_FILTER 0
+#define CONFIG_PAL100BARS_FILTER 0
+#define CONFIG_RGBTESTSRC_FILTER 0
+#define CONFIG_SIERPINSKI_FILTER 0
+#define CONFIG_SMPTEBARS_FILTER 0
+#define CONFIG_SMPTEHDBARS_FILTER 0
+#define CONFIG_TESTSRC_FILTER 0
+#define CONFIG_TESTSRC2_FILTER 0
+#define CONFIG_YUVTESTSRC_FILTER 0
+#define CONFIG_NULLSINK_FILTER 0
+#define CONFIG_ABITSCOPE_FILTER 0
+#define CONFIG_ADRAWGRAPH_FILTER 0
+#define CONFIG_AGRAPHMONITOR_FILTER 0
+#define CONFIG_AHISTOGRAM_FILTER 0
+#define CONFIG_APHASEMETER_FILTER 0
+#define CONFIG_AVECTORSCOPE_FILTER 0
+#define CONFIG_CONCAT_FILTER 0
+#define CONFIG_SHOWCQT_FILTER 0
+#define CONFIG_SHOWFREQS_FILTER 0
+#define CONFIG_SHOWSPATIAL_FILTER 0
+#define CONFIG_SHOWSPECTRUM_FILTER 0
+#define CONFIG_SHOWSPECTRUMPIC_FILTER 0
+#define CONFIG_SHOWVOLUME_FILTER 0
+#define CONFIG_SHOWWAVES_FILTER 0
+#define CONFIG_SHOWWAVESPIC_FILTER 0
+#define CONFIG_SPECTRUMSYNTH_FILTER 0
+#define CONFIG_AMOVIE_FILTER 0
+#define CONFIG_MOVIE_FILTER 0
+#define CONFIG_AFIFO_FILTER 0
+#define CONFIG_FIFO_FILTER 0
+#define CONFIG_AA_DEMUXER 0
+#define CONFIG_AAC_DEMUXER 0
+#define CONFIG_AC3_DEMUXER 0
+#define CONFIG_ACM_DEMUXER 0
+#define CONFIG_ACT_DEMUXER 0
+#define CONFIG_ADF_DEMUXER 0
+#define CONFIG_ADP_DEMUXER 0
+#define CONFIG_ADS_DEMUXER 0
+#define CONFIG_ADX_DEMUXER 0
+#define CONFIG_AEA_DEMUXER 0
+#define CONFIG_AFC_DEMUXER 0
+#define CONFIG_AIFF_DEMUXER 0
+#define CONFIG_AIX_DEMUXER 0
+#define CONFIG_ALP_DEMUXER 0
+#define CONFIG_AMR_DEMUXER 0
+#define CONFIG_AMRNB_DEMUXER 0
+#define CONFIG_AMRWB_DEMUXER 0
+#define CONFIG_ANM_DEMUXER 0
+#define CONFIG_APC_DEMUXER 0
+#define CONFIG_APE_DEMUXER 0
+#define CONFIG_APM_DEMUXER 0
+#define CONFIG_APNG_DEMUXER 0
+#define CONFIG_APTX_DEMUXER 0
+#define CONFIG_APTX_HD_DEMUXER 0
+#define CONFIG_AQTITLE_DEMUXER 0
+#define CONFIG_ARGO_ASF_DEMUXER 0
+#define CONFIG_ASF_DEMUXER 0
+#define CONFIG_ASF_O_DEMUXER 0
+#define CONFIG_ASS_DEMUXER 0
+#define CONFIG_AST_DEMUXER 0
+#define CONFIG_AU_DEMUXER 0
+#define CONFIG_AV1_DEMUXER 0
+#define CONFIG_AVI_DEMUXER 0
+#define CONFIG_AVISYNTH_DEMUXER 0
+#define CONFIG_AVR_DEMUXER 0
+#define CONFIG_AVS_DEMUXER 0
+#define CONFIG_AVS2_DEMUXER 0
+#define CONFIG_BETHSOFTVID_DEMUXER 0
+#define CONFIG_BFI_DEMUXER 0
+#define CONFIG_BINTEXT_DEMUXER 0
+#define CONFIG_BINK_DEMUXER 0
+#define CONFIG_BIT_DEMUXER 0
+#define CONFIG_BMV_DEMUXER 0
+#define CONFIG_BFSTM_DEMUXER 0
+#define CONFIG_BRSTM_DEMUXER 0
+#define CONFIG_BOA_DEMUXER 0
+#define CONFIG_C93_DEMUXER 0
+#define CONFIG_CAF_DEMUXER 0
+#define CONFIG_CAVSVIDEO_DEMUXER 0
+#define CONFIG_CDG_DEMUXER 0
+#define CONFIG_CDXL_DEMUXER 0
+#define CONFIG_CINE_DEMUXER 0
+#define CONFIG_CODEC2_DEMUXER 0
+#define CONFIG_CODEC2RAW_DEMUXER 0
+#define CONFIG_CONCAT_DEMUXER 0
+#define CONFIG_DASH_DEMUXER 0
+#define CONFIG_DATA_DEMUXER 0
+#define CONFIG_DAUD_DEMUXER 0
+#define CONFIG_DCSTR_DEMUXER 0
+#define CONFIG_DERF_DEMUXER 0
+#define CONFIG_DFA_DEMUXER 0
+#define CONFIG_DHAV_DEMUXER 0
+#define CONFIG_DIRAC_DEMUXER 0
+#define CONFIG_DNXHD_DEMUXER 0
+#define CONFIG_DSF_DEMUXER 0
+#define CONFIG_DSICIN_DEMUXER 0
+#define CONFIG_DSS_DEMUXER 0
+#define CONFIG_DTS_DEMUXER 0
+#define CONFIG_DTSHD_DEMUXER 0
+#define CONFIG_DV_DEMUXER 0
+#define CONFIG_DVBSUB_DEMUXER 0
+#define CONFIG_DVBTXT_DEMUXER 0
+#define CONFIG_DXA_DEMUXER 0
+#define CONFIG_EA_DEMUXER 0
+#define CONFIG_EA_CDATA_DEMUXER 0
+#define CONFIG_EAC3_DEMUXER 0
+#define CONFIG_EPAF_DEMUXER 0
+#define CONFIG_FFMETADATA_DEMUXER 0
+#define CONFIG_FILMSTRIP_DEMUXER 0
+#define CONFIG_FITS_DEMUXER 0
+#define CONFIG_FLAC_DEMUXER 1
+#define CONFIG_FLIC_DEMUXER 0
+#define CONFIG_FLV_DEMUXER 0
+#define CONFIG_LIVE_FLV_DEMUXER 0
+#define CONFIG_FOURXM_DEMUXER 0
+#define CONFIG_FRM_DEMUXER 0
+#define CONFIG_FSB_DEMUXER 0
+#define CONFIG_FWSE_DEMUXER 0
+#define CONFIG_G722_DEMUXER 0
+#define CONFIG_G723_1_DEMUXER 0
+#define CONFIG_G726_DEMUXER 0
+#define CONFIG_G726LE_DEMUXER 0
+#define CONFIG_G729_DEMUXER 0
+#define CONFIG_GDV_DEMUXER 0
+#define CONFIG_GENH_DEMUXER 0
+#define CONFIG_GIF_DEMUXER 0
+#define CONFIG_GSM_DEMUXER 0
+#define CONFIG_GXF_DEMUXER 0
+#define CONFIG_H261_DEMUXER 0
+#define CONFIG_H263_DEMUXER 0
+#define CONFIG_H264_DEMUXER 0
+#define CONFIG_HCA_DEMUXER 0
+#define CONFIG_HCOM_DEMUXER 0
+#define CONFIG_HEVC_DEMUXER 0
+#define CONFIG_HLS_DEMUXER 0
+#define CONFIG_HNM_DEMUXER 0
+#define CONFIG_ICO_DEMUXER 0
+#define CONFIG_IDCIN_DEMUXER 0
+#define CONFIG_IDF_DEMUXER 0
+#define CONFIG_IFF_DEMUXER 0
+#define CONFIG_IFV_DEMUXER 0
+#define CONFIG_ILBC_DEMUXER 0
+#define CONFIG_IMAGE2_DEMUXER 0
+#define CONFIG_IMAGE2PIPE_DEMUXER 0
+#define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0
+#define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0
+#define CONFIG_INGENIENT_DEMUXER 0
+#define CONFIG_IPMOVIE_DEMUXER 0
+#define CONFIG_IRCAM_DEMUXER 0
+#define CONFIG_ISS_DEMUXER 0
+#define CONFIG_IV8_DEMUXER 0
+#define CONFIG_IVF_DEMUXER 0
+#define CONFIG_IVR_DEMUXER 0
+#define CONFIG_JACOSUB_DEMUXER 0
+#define CONFIG_JV_DEMUXER 0
+#define CONFIG_KUX_DEMUXER 0
+#define CONFIG_KVAG_DEMUXER 0
+#define CONFIG_LMLM4_DEMUXER 0
+#define CONFIG_LOAS_DEMUXER 0
+#define CONFIG_LRC_DEMUXER 0
+#define CONFIG_LVF_DEMUXER 0
+#define CONFIG_LXF_DEMUXER 0
+#define CONFIG_M4V_DEMUXER 0
+#define CONFIG_MATROSKA_DEMUXER 1
+#define CONFIG_MGSTS_DEMUXER 0
+#define CONFIG_MICRODVD_DEMUXER 0
+#define CONFIG_MJPEG_DEMUXER 0
+#define CONFIG_MJPEG_2000_DEMUXER 0
+#define CONFIG_MLP_DEMUXER 0
+#define CONFIG_MLV_DEMUXER 0
+#define CONFIG_MM_DEMUXER 0
+#define CONFIG_MMF_DEMUXER 0
+#define CONFIG_MOV_DEMUXER 1
+#define CONFIG_MP3_DEMUXER 1
+#define CONFIG_MPC_DEMUXER 0
+#define CONFIG_MPC8_DEMUXER 0
+#define CONFIG_MPEGPS_DEMUXER 0
+#define CONFIG_MPEGTS_DEMUXER 0
+#define CONFIG_MPEGTSRAW_DEMUXER 0
+#define CONFIG_MPEGVIDEO_DEMUXER 0
+#define CONFIG_MPJPEG_DEMUXER 0
+#define CONFIG_MPL2_DEMUXER 0
+#define CONFIG_MPSUB_DEMUXER 0
+#define CONFIG_MSF_DEMUXER 0
+#define CONFIG_MSNWC_TCP_DEMUXER 0
+#define CONFIG_MTAF_DEMUXER 0
+#define CONFIG_MTV_DEMUXER 0
+#define CONFIG_MUSX_DEMUXER 0
+#define CONFIG_MV_DEMUXER 0
+#define CONFIG_MVI_DEMUXER 0
+#define CONFIG_MXF_DEMUXER 0
+#define CONFIG_MXG_DEMUXER 0
+#define CONFIG_NC_DEMUXER 0
+#define CONFIG_NISTSPHERE_DEMUXER 0
+#define CONFIG_NSP_DEMUXER 0
+#define CONFIG_NSV_DEMUXER 0
+#define CONFIG_NUT_DEMUXER 0
+#define CONFIG_NUV_DEMUXER 0
+#define CONFIG_OGG_DEMUXER 1
+#define CONFIG_OMA_DEMUXER 0
+#define CONFIG_PAF_DEMUXER 0
+#define CONFIG_PCM_ALAW_DEMUXER 0
+#define CONFIG_PCM_MULAW_DEMUXER 0
+#define CONFIG_PCM_VIDC_DEMUXER 0
+#define CONFIG_PCM_F64BE_DEMUXER 0
+#define CONFIG_PCM_F64LE_DEMUXER 0
+#define CONFIG_PCM_F32BE_DEMUXER 0
+#define CONFIG_PCM_F32LE_DEMUXER 0
+#define CONFIG_PCM_S32BE_DEMUXER 0
+#define CONFIG_PCM_S32LE_DEMUXER 0
+#define CONFIG_PCM_S24BE_DEMUXER 0
+#define CONFIG_PCM_S24LE_DEMUXER 0
+#define CONFIG_PCM_S16BE_DEMUXER 0
+#define CONFIG_PCM_S16LE_DEMUXER 0
+#define CONFIG_PCM_S8_DEMUXER 0
+#define CONFIG_PCM_U32BE_DEMUXER 0
+#define CONFIG_PCM_U32LE_DEMUXER 0
+#define CONFIG_PCM_U24BE_DEMUXER 0
+#define CONFIG_PCM_U24LE_DEMUXER 0
+#define CONFIG_PCM_U16BE_DEMUXER 0
+#define CONFIG_PCM_U16LE_DEMUXER 0
+#define CONFIG_PCM_U8_DEMUXER 0
+#define CONFIG_PJS_DEMUXER 0
+#define CONFIG_PMP_DEMUXER 0
+#define CONFIG_PVA_DEMUXER 0
+#define CONFIG_PVF_DEMUXER 0
+#define CONFIG_QCP_DEMUXER 0
+#define CONFIG_R3D_DEMUXER 0
+#define CONFIG_RAWVIDEO_DEMUXER 0
+#define CONFIG_REALTEXT_DEMUXER 0
+#define CONFIG_REDSPARK_DEMUXER 0
+#define CONFIG_RL2_DEMUXER 0
+#define CONFIG_RM_DEMUXER 0
+#define CONFIG_ROQ_DEMUXER 0
+#define CONFIG_RPL_DEMUXER 0
+#define CONFIG_RSD_DEMUXER 0
+#define CONFIG_RSO_DEMUXER 0
+#define CONFIG_RTP_DEMUXER 0
+#define CONFIG_RTSP_DEMUXER 0
+#define CONFIG_S337M_DEMUXER 0
+#define CONFIG_SAMI_DEMUXER 0
+#define CONFIG_SAP_DEMUXER 0
+#define CONFIG_SBC_DEMUXER 0
+#define CONFIG_SBG_DEMUXER 0
+#define CONFIG_SCC_DEMUXER 0
+#define CONFIG_SDP_DEMUXER 0
+#define CONFIG_SDR2_DEMUXER 0
+#define CONFIG_SDS_DEMUXER 0
+#define CONFIG_SDX_DEMUXER 0
+#define CONFIG_SEGAFILM_DEMUXER 0
+#define CONFIG_SER_DEMUXER 0
+#define CONFIG_SHORTEN_DEMUXER 0
+#define CONFIG_SIFF_DEMUXER 0
+#define CONFIG_SLN_DEMUXER 0
+#define CONFIG_SMACKER_DEMUXER 0
+#define CONFIG_SMJPEG_DEMUXER 0
+#define CONFIG_SMUSH_DEMUXER 0
+#define CONFIG_SOL_DEMUXER 0
+#define CONFIG_SOX_DEMUXER 0
+#define CONFIG_SPDIF_DEMUXER 0
+#define CONFIG_SRT_DEMUXER 0
+#define CONFIG_STR_DEMUXER 0
+#define CONFIG_STL_DEMUXER 0
+#define CONFIG_SUBVIEWER1_DEMUXER 0
+#define CONFIG_SUBVIEWER_DEMUXER 0
+#define CONFIG_SUP_DEMUXER 0
+#define CONFIG_SVAG_DEMUXER 0
+#define CONFIG_SWF_DEMUXER 0
+#define CONFIG_TAK_DEMUXER 0
+#define CONFIG_TEDCAPTIONS_DEMUXER 0
+#define CONFIG_THP_DEMUXER 0
+#define CONFIG_THREEDOSTR_DEMUXER 0
+#define CONFIG_TIERTEXSEQ_DEMUXER 0
+#define CONFIG_TMV_DEMUXER 0
+#define CONFIG_TRUEHD_DEMUXER 0
+#define CONFIG_TTA_DEMUXER 0
+#define CONFIG_TXD_DEMUXER 0
+#define CONFIG_TTY_DEMUXER 0
+#define CONFIG_TY_DEMUXER 0
+#define CONFIG_V210_DEMUXER 0
+#define CONFIG_V210X_DEMUXER 0
+#define CONFIG_VAG_DEMUXER 0
+#define CONFIG_VC1_DEMUXER 0
+#define CONFIG_VC1T_DEMUXER 0
+#define CONFIG_VIVIDAS_DEMUXER 0
+#define CONFIG_VIVO_DEMUXER 0
+#define CONFIG_VMD_DEMUXER 0
+#define CONFIG_VOBSUB_DEMUXER 0
+#define CONFIG_VOC_DEMUXER 0
+#define CONFIG_VPK_DEMUXER 0
+#define CONFIG_VPLAYER_DEMUXER 0
+#define CONFIG_VQF_DEMUXER 0
+#define CONFIG_W64_DEMUXER 0
+#define CONFIG_WAV_DEMUXER 1
+#define CONFIG_WC3_DEMUXER 0
+#define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0
+#define CONFIG_WEBVTT_DEMUXER 0
+#define CONFIG_WSAUD_DEMUXER 0
+#define CONFIG_WSD_DEMUXER 0
+#define CONFIG_WSVQA_DEMUXER 0
+#define CONFIG_WTV_DEMUXER 0
+#define CONFIG_WVE_DEMUXER 0
+#define CONFIG_WV_DEMUXER 0
+#define CONFIG_XA_DEMUXER 0
+#define CONFIG_XBIN_DEMUXER 0
+#define CONFIG_XMV_DEMUXER 0
+#define CONFIG_XVAG_DEMUXER 0
+#define CONFIG_XWMA_DEMUXER 0
+#define CONFIG_YOP_DEMUXER 0
+#define CONFIG_YUV4MPEGPIPE_DEMUXER 0
+#define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_GIF_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PSD_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_SVG_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_XPM_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_XWD_PIPE_DEMUXER 0
+#define CONFIG_LIBGME_DEMUXER 0
+#define CONFIG_LIBMODPLUG_DEMUXER 0
+#define CONFIG_LIBOPENMPT_DEMUXER 0
+#define CONFIG_VAPOURSYNTH_DEMUXER 0
+#define CONFIG_A64_MUXER 0
+#define CONFIG_AC3_MUXER 0
+#define CONFIG_ADTS_MUXER 0
+#define CONFIG_ADX_MUXER 0
+#define CONFIG_AIFF_MUXER 0
+#define CONFIG_AMR_MUXER 0
+#define CONFIG_APNG_MUXER 0
+#define CONFIG_APTX_MUXER 0
+#define CONFIG_APTX_HD_MUXER 0
+#define CONFIG_ASF_MUXER 0
+#define CONFIG_ASS_MUXER 0
+#define CONFIG_AST_MUXER 0
+#define CONFIG_ASF_STREAM_MUXER 0
+#define CONFIG_AU_MUXER 0
+#define CONFIG_AVI_MUXER 0
+#define CONFIG_AVM2_MUXER 0
+#define CONFIG_AVS2_MUXER 0
+#define CONFIG_BIT_MUXER 0
+#define CONFIG_CAF_MUXER 0
+#define CONFIG_CAVSVIDEO_MUXER 0
+#define CONFIG_CODEC2_MUXER 0
+#define CONFIG_CODEC2RAW_MUXER 0
+#define CONFIG_CRC_MUXER 0
+#define CONFIG_DASH_MUXER 0
+#define CONFIG_DATA_MUXER 0
+#define CONFIG_DAUD_MUXER 0
+#define CONFIG_DIRAC_MUXER 0
+#define CONFIG_DNXHD_MUXER 0
+#define CONFIG_DTS_MUXER 0
+#define CONFIG_DV_MUXER 0
+#define CONFIG_EAC3_MUXER 0
+#define CONFIG_F4V_MUXER 0
+#define CONFIG_FFMETADATA_MUXER 0
+#define CONFIG_FIFO_MUXER 0
+#define CONFIG_FIFO_TEST_MUXER 0
+#define CONFIG_FILMSTRIP_MUXER 0
+#define CONFIG_FITS_MUXER 0
+#define CONFIG_FLAC_MUXER 0
+#define CONFIG_FLV_MUXER 0
+#define CONFIG_FRAMECRC_MUXER 0
+#define CONFIG_FRAMEHASH_MUXER 0
+#define CONFIG_FRAMEMD5_MUXER 0
+#define CONFIG_G722_MUXER 0
+#define CONFIG_G723_1_MUXER 0
+#define CONFIG_G726_MUXER 0
+#define CONFIG_G726LE_MUXER 0
+#define CONFIG_GIF_MUXER 0
+#define CONFIG_GSM_MUXER 0
+#define CONFIG_GXF_MUXER 0
+#define CONFIG_H261_MUXER 0
+#define CONFIG_H263_MUXER 0
+#define CONFIG_H264_MUXER 0
+#define CONFIG_HASH_MUXER 0
+#define CONFIG_HDS_MUXER 0
+#define CONFIG_HEVC_MUXER 0
+#define CONFIG_HLS_MUXER 0
+#define CONFIG_ICO_MUXER 0
+#define CONFIG_ILBC_MUXER 0
+#define CONFIG_IMAGE2_MUXER 0
+#define CONFIG_IMAGE2PIPE_MUXER 0
+#define CONFIG_IPOD_MUXER 0
+#define CONFIG_IRCAM_MUXER 0
+#define CONFIG_ISMV_MUXER 0
+#define CONFIG_IVF_MUXER 0
+#define CONFIG_JACOSUB_MUXER 0
+#define CONFIG_LATM_MUXER 0
+#define CONFIG_LRC_MUXER 0
+#define CONFIG_M4V_MUXER 0
+#define CONFIG_MD5_MUXER 0
+#define CONFIG_MATROSKA_MUXER 0
+#define CONFIG_MATROSKA_AUDIO_MUXER 0
+#define CONFIG_MICRODVD_MUXER 0
+#define CONFIG_MJPEG_MUXER 0
+#define CONFIG_MLP_MUXER 0
+#define CONFIG_MMF_MUXER 0
+#define CONFIG_MOV_MUXER 0
+#define CONFIG_MP2_MUXER 0
+#define CONFIG_MP3_MUXER 0
+#define CONFIG_MP4_MUXER 0
+#define CONFIG_MPEG1SYSTEM_MUXER 0
+#define CONFIG_MPEG1VCD_MUXER 0
+#define CONFIG_MPEG1VIDEO_MUXER 0
+#define CONFIG_MPEG2DVD_MUXER 0
+#define CONFIG_MPEG2SVCD_MUXER 0
+#define CONFIG_MPEG2VIDEO_MUXER 0
+#define CONFIG_MPEG2VOB_MUXER 0
+#define CONFIG_MPEGTS_MUXER 0
+#define CONFIG_MPJPEG_MUXER 0
+#define CONFIG_MXF_MUXER 0
+#define CONFIG_MXF_D10_MUXER 0
+#define CONFIG_MXF_OPATOM_MUXER 0
+#define CONFIG_NULL_MUXER 0
+#define CONFIG_NUT_MUXER 0
+#define CONFIG_OGA_MUXER 0
+#define CONFIG_OGG_MUXER 0
+#define CONFIG_OGV_MUXER 0
+#define CONFIG_OMA_MUXER 0
+#define CONFIG_OPUS_MUXER 0
+#define CONFIG_PCM_ALAW_MUXER 0
+#define CONFIG_PCM_MULAW_MUXER 0
+#define CONFIG_PCM_VIDC_MUXER 0
+#define CONFIG_PCM_F64BE_MUXER 0
+#define CONFIG_PCM_F64LE_MUXER 0
+#define CONFIG_PCM_F32BE_MUXER 0
+#define CONFIG_PCM_F32LE_MUXER 0
+#define CONFIG_PCM_S32BE_MUXER 0
+#define CONFIG_PCM_S32LE_MUXER 0
+#define CONFIG_PCM_S24BE_MUXER 0
+#define CONFIG_PCM_S24LE_MUXER 0
+#define CONFIG_PCM_S16BE_MUXER 0
+#define CONFIG_PCM_S16LE_MUXER 0
+#define CONFIG_PCM_S8_MUXER 0
+#define CONFIG_PCM_U32BE_MUXER 0
+#define CONFIG_PCM_U32LE_MUXER 0
+#define CONFIG_PCM_U24BE_MUXER 0
+#define CONFIG_PCM_U24LE_MUXER 0
+#define CONFIG_PCM_U16BE_MUXER 0
+#define CONFIG_PCM_U16LE_MUXER 0
+#define CONFIG_PCM_U8_MUXER 0
+#define CONFIG_PSP_MUXER 0
+#define CONFIG_RAWVIDEO_MUXER 0
+#define CONFIG_RM_MUXER 0
+#define CONFIG_ROQ_MUXER 0
+#define CONFIG_RSO_MUXER 0
+#define CONFIG_RTP_MUXER 0
+#define CONFIG_RTP_MPEGTS_MUXER 0
+#define CONFIG_RTSP_MUXER 0
+#define CONFIG_SAP_MUXER 0
+#define CONFIG_SBC_MUXER 0
+#define CONFIG_SCC_MUXER 0
+#define CONFIG_SEGAFILM_MUXER 0
+#define CONFIG_SEGMENT_MUXER 0
+#define CONFIG_STREAM_SEGMENT_MUXER 0
+#define CONFIG_SINGLEJPEG_MUXER 0
+#define CONFIG_SMJPEG_MUXER 0
+#define CONFIG_SMOOTHSTREAMING_MUXER 0
+#define CONFIG_SOX_MUXER 0
+#define CONFIG_SPX_MUXER 0
+#define CONFIG_SPDIF_MUXER 0
+#define CONFIG_SRT_MUXER 0
+#define CONFIG_STREAMHASH_MUXER 0
+#define CONFIG_SUP_MUXER 0
+#define CONFIG_SWF_MUXER 0
+#define CONFIG_TEE_MUXER 0
+#define CONFIG_TG2_MUXER 0
+#define CONFIG_TGP_MUXER 0
+#define CONFIG_MKVTIMESTAMP_V2_MUXER 0
+#define CONFIG_TRUEHD_MUXER 0
+#define CONFIG_TTA_MUXER 0
+#define CONFIG_UNCODEDFRAMECRC_MUXER 0
+#define CONFIG_VC1_MUXER 0
+#define CONFIG_VC1T_MUXER 0
+#define CONFIG_VOC_MUXER 0
+#define CONFIG_W64_MUXER 0
+#define CONFIG_WAV_MUXER 0
+#define CONFIG_WEBM_MUXER 0
+#define CONFIG_WEBM_DASH_MANIFEST_MUXER 0
+#define CONFIG_WEBM_CHUNK_MUXER 0
+#define CONFIG_WEBP_MUXER 0
+#define CONFIG_WEBVTT_MUXER 0
+#define CONFIG_WTV_MUXER 0
+#define CONFIG_WV_MUXER 0
+#define CONFIG_YUV4MPEGPIPE_MUXER 0
+#define CONFIG_CHROMAPRINT_MUXER 0
+#define CONFIG_ASYNC_PROTOCOL 0
+#define CONFIG_BLURAY_PROTOCOL 0
+#define CONFIG_CACHE_PROTOCOL 0
+#define CONFIG_CONCAT_PROTOCOL 0
+#define CONFIG_CRYPTO_PROTOCOL 0
+#define CONFIG_DATA_PROTOCOL 0
+#define CONFIG_FFRTMPCRYPT_PROTOCOL 0
+#define CONFIG_FFRTMPHTTP_PROTOCOL 0
+#define CONFIG_FILE_PROTOCOL 0
+#define CONFIG_FTP_PROTOCOL 0
+#define CONFIG_GOPHER_PROTOCOL 0
+#define CONFIG_HLS_PROTOCOL 0
+#define CONFIG_HTTP_PROTOCOL 0
+#define CONFIG_HTTPPROXY_PROTOCOL 0
+#define CONFIG_HTTPS_PROTOCOL 0
+#define CONFIG_ICECAST_PROTOCOL 0
+#define CONFIG_MMSH_PROTOCOL 0
+#define CONFIG_MMST_PROTOCOL 0
+#define CONFIG_MD5_PROTOCOL 0
+#define CONFIG_PIPE_PROTOCOL 0
+#define CONFIG_PROMPEG_PROTOCOL 0
+#define CONFIG_RTMP_PROTOCOL 0
+#define CONFIG_RTMPE_PROTOCOL 0
+#define CONFIG_RTMPS_PROTOCOL 0
+#define CONFIG_RTMPT_PROTOCOL 0
+#define CONFIG_RTMPTE_PROTOCOL 0
+#define CONFIG_RTMPTS_PROTOCOL 0
+#define CONFIG_RTP_PROTOCOL 0
+#define CONFIG_SCTP_PROTOCOL 0
+#define CONFIG_SRTP_PROTOCOL 0
+#define CONFIG_SUBFILE_PROTOCOL 0
+#define CONFIG_TEE_PROTOCOL 0
+#define CONFIG_TCP_PROTOCOL 0
+#define CONFIG_TLS_PROTOCOL 0
+#define CONFIG_UDP_PROTOCOL 0
+#define CONFIG_UDPLITE_PROTOCOL 0
+#define CONFIG_UNIX_PROTOCOL 0
+#define CONFIG_LIBAMQP_PROTOCOL 0
+#define CONFIG_LIBRTMP_PROTOCOL 0
+#define CONFIG_LIBRTMPE_PROTOCOL 0
+#define CONFIG_LIBRTMPS_PROTOCOL 0
+#define CONFIG_LIBRTMPT_PROTOCOL 0
+#define CONFIG_LIBRTMPTE_PROTOCOL 0
+#define CONFIG_LIBSRT_PROTOCOL 0
+#define CONFIG_LIBSSH_PROTOCOL 0
+#define CONFIG_LIBSMBCLIENT_PROTOCOL 0
+#define CONFIG_LIBZMQ_PROTOCOL 0
+#endif /* FFMPEG_CONFIG_H */
diff --git a/fuchsia/config/default/x64/libavcodec/bsf_list.c b/fuchsia/config/default/x64/libavcodec/bsf_list.c
new file mode 100644
index 0000000..ee5ac8a
--- /dev/null
+++ b/fuchsia/config/default/x64/libavcodec/bsf_list.c
@@ -0,0 +1,4 @@
+static const AVBitStreamFilter * const bitstream_filters[] = {
+    &ff_null_bsf,
+    &ff_vp9_superframe_split_bsf,
+    NULL };
diff --git a/fuchsia/config/default/x64/libavcodec/codec_list.c b/fuchsia/config/default/x64/libavcodec/codec_list.c
new file mode 100644
index 0000000..8e4d5e8
--- /dev/null
+++ b/fuchsia/config/default/x64/libavcodec/codec_list.c
@@ -0,0 +1,21 @@
+static const AVCodec * const codec_list[] = {
+    &ff_theora_decoder,
+    &ff_vp3_decoder,
+    &ff_vp8_decoder,
+    &ff_vp9_decoder,
+    &ff_aptx_decoder,
+    &ff_flac_decoder,
+    &ff_mp3_decoder,
+    &ff_sbc_decoder,
+    &ff_vorbis_decoder,
+    &ff_pcm_alaw_decoder,
+    &ff_pcm_f32le_decoder,
+    &ff_pcm_mulaw_decoder,
+    &ff_pcm_s16be_decoder,
+    &ff_pcm_s16le_decoder,
+    &ff_pcm_s24be_decoder,
+    &ff_pcm_s24le_decoder,
+    &ff_pcm_s32le_decoder,
+    &ff_pcm_u8_decoder,
+    &ff_libopus_decoder,
+    NULL };
diff --git a/fuchsia/config/default/x64/libavcodec/parser_list.c b/fuchsia/config/default/x64/libavcodec/parser_list.c
new file mode 100644
index 0000000..f81fbe8
--- /dev/null
+++ b/fuchsia/config/default/x64/libavcodec/parser_list.c
@@ -0,0 +1,9 @@
+static const AVCodecParser * const parser_list[] = {
+    &ff_flac_parser,
+    &ff_mpegaudio_parser,
+    &ff_opus_parser,
+    &ff_vorbis_parser,
+    &ff_vp3_parser,
+    &ff_vp8_parser,
+    &ff_vp9_parser,
+    NULL };
diff --git a/fuchsia/config/default/x64/libavformat/demuxer_list.c b/fuchsia/config/default/x64/libavformat/demuxer_list.c
new file mode 100644
index 0000000..1908ba1
--- /dev/null
+++ b/fuchsia/config/default/x64/libavformat/demuxer_list.c
@@ -0,0 +1,8 @@
+static const AVInputFormat * const demuxer_list[] = {
+    &ff_flac_demuxer,
+    &ff_matroska_demuxer,
+    &ff_mov_demuxer,
+    &ff_mp3_demuxer,
+    &ff_ogg_demuxer,
+    &ff_wav_demuxer,
+    NULL };
diff --git a/fuchsia/config/default/x64/libavformat/muxer_list.c b/fuchsia/config/default/x64/libavformat/muxer_list.c
new file mode 100644
index 0000000..f36d949
--- /dev/null
+++ b/fuchsia/config/default/x64/libavformat/muxer_list.c
@@ -0,0 +1,2 @@
+static const AVOutputFormat * const muxer_list[] = {
+    NULL };
diff --git a/fuchsia/config/default/x64/libavformat/protocol_list.c b/fuchsia/config/default/x64/libavformat/protocol_list.c
new file mode 100644
index 0000000..247e1e4
--- /dev/null
+++ b/fuchsia/config/default/x64/libavformat/protocol_list.c
@@ -0,0 +1,2 @@
+static const URLProtocol * const url_protocols[] = {
+    NULL };
diff --git a/fuchsia/config/default/x64/libavutil/avconfig.h b/fuchsia/config/default/x64/libavutil/avconfig.h
new file mode 100644
index 0000000..c289fbb
--- /dev/null
+++ b/fuchsia/config/default/x64/libavutil/avconfig.h
@@ -0,0 +1,6 @@
+/* Generated by ffmpeg configure */
+#ifndef AVUTIL_AVCONFIG_H
+#define AVUTIL_AVCONFIG_H
+#define AV_HAVE_BIGENDIAN 0
+#define AV_HAVE_FAST_UNALIGNED 1
+#endif /* AVUTIL_AVCONFIG_H */
diff --git a/fuchsia/config/default/x64/libavutil/ffversion.h b/fuchsia/config/default/x64/libavutil/ffversion.h
new file mode 100644
index 0000000..fc76199
--- /dev/null
+++ b/fuchsia/config/default/x64/libavutil/ffversion.h
@@ -0,0 +1,5 @@
+/* Automatically generated by version.sh, do not manually edit! */
+#ifndef AVUTIL_FFVERSION_H
+#define AVUTIL_FFVERSION_H
+#define FFMPEG_VERSION "N-97662-gaaac2c26d9"
+#endif /* AVUTIL_FFVERSION_H */
diff --git a/fuchsia/config/max/arm64/config.h b/fuchsia/config/max/arm64/config.h
new file mode 100644
index 0000000..9915440
--- /dev/null
+++ b/fuchsia/config/max/arm64/config.h
@@ -0,0 +1,2588 @@
+/* Automatically generated by configure - do not modify! */
+#ifndef FFMPEG_CONFIG_H
+#define FFMPEG_CONFIG_H
+#define FFMPEG_CONFIGURATION "--disable-everything --disable-all --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-static --enable-avcodec --enable-avformat --enable-avutil --enable-fft --enable-rdft --enable-static --enable-libopus --disable-debug --disable-bzlib --disable-iconv --disable-lzo --disable-network --disable-schannel --disable-sdl2 --disable-symver --disable-xlib --disable-zlib --disable-securetransport --disable-faan --disable-alsa --disable-autodetect --enable-decoder='vorbis,libopus,flac' --enable-decoder='pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le,mp3' --enable-decoder='pcm_s16be,pcm_s24be,pcm_mulaw,pcm_alaw' --enable-decoder='theora,vp8,sbc,aptx' --enable-demuxer='ogg,matroska,wav,flac,mp3,mov' --enable-parser='opus,vorbis,flac,mpegaudio' --extra-cflags=-I/usr/local/google/home/dalesat/fuchsia/third_party/opus/include --enable-parser='vp3,vp8' --optflags='\"-O2\"' --enable-pic --x86asmexe=yasm --enable-pic --enable-lto --cc=clang --cxx=clang++ --ld=clang --enable-cross-compile --cross-prefix=/usr/bin/x86_64-linux-gnu- --target-os=linux --arch=aarch64 --enable-armv8 --extra-cflags='-march=armv8-a' --sysroot=/usr/local/google/home/dalesat/fuchsia/third_party/ffmpeg/../../prebuilt/third_party/sysroot/linux --extra-cflags='--target=aarch64-linux-gnu' --extra-ldflags='--target=aarch64-linux-gnu' --disable-linux-perf --enable-decoder='aac,aac_latm,h264,mp3' --enable-demuxer='aac,mp3,mov' --enable-parser='aac,aac_latm,h264,mpegaudio' --enable-decoder=mpeg4 --enable-parser='h263,mpeg4video' --enable-demuxer=avi --enable-demuxer=amr --enable-decoder='amrnb,amrwb' --enable-decoder=gsm_ms --enable-demuxer=gsm --enable-parser=gsm"
+#define FFMPEG_LICENSE "LGPL version 2.1 or later"
+#define CONFIG_THIS_YEAR 2020
+#define FFMPEG_DATADIR "/usr/local/share/ffmpeg"
+#define AVCONV_DATADIR "/usr/local/share/ffmpeg"
+#define CC_IDENT "Fuchsia clang version 11.0.0 (https://fuchsia.googlesource.com/a/third_party/llvm-project dd484baffdf4a92e564c38a17d35a742e633b0e0)"
+#define av_restrict restrict
+#define EXTERN_PREFIX ""
+#define EXTERN_ASM 
+#define BUILDSUF ""
+#define SLIBSUF ".so"
+#define HAVE_MMX2 HAVE_MMXEXT
+#define SWS_MAX_FILTER_SIZE 256
+#define ARCH_AARCH64 1
+#define ARCH_ALPHA 0
+#define ARCH_ARM 0
+#define ARCH_AVR32 0
+#define ARCH_AVR32_AP 0
+#define ARCH_AVR32_UC 0
+#define ARCH_BFIN 0
+#define ARCH_IA64 0
+#define ARCH_M68K 0
+#define ARCH_MIPS 0
+#define ARCH_MIPS64 0
+#define ARCH_PARISC 0
+#define ARCH_PPC 0
+#define ARCH_PPC64 0
+#define ARCH_S390 0
+#define ARCH_SH4 0
+#define ARCH_SPARC 0
+#define ARCH_SPARC64 0
+#define ARCH_TILEGX 0
+#define ARCH_TILEPRO 0
+#define ARCH_TOMI 0
+#define ARCH_X86 0
+#define ARCH_X86_32 0
+#define ARCH_X86_64 0
+#define HAVE_ARMV5TE 0
+#define HAVE_ARMV6 0
+#define HAVE_ARMV6T2 0
+#define HAVE_ARMV8 1
+#define HAVE_NEON 1
+#define HAVE_VFP 1
+#define HAVE_VFPV3 0
+#define HAVE_SETEND 0
+#define HAVE_ALTIVEC 0
+#define HAVE_DCBZL 0
+#define HAVE_LDBRX 0
+#define HAVE_POWER8 0
+#define HAVE_PPC4XX 0
+#define HAVE_VSX 0
+#define HAVE_AESNI 0
+#define HAVE_AMD3DNOW 0
+#define HAVE_AMD3DNOWEXT 0
+#define HAVE_AVX 0
+#define HAVE_AVX2 0
+#define HAVE_AVX512 0
+#define HAVE_FMA3 0
+#define HAVE_FMA4 0
+#define HAVE_MMX 0
+#define HAVE_MMXEXT 0
+#define HAVE_SSE 0
+#define HAVE_SSE2 0
+#define HAVE_SSE3 0
+#define HAVE_SSE4 0
+#define HAVE_SSE42 0
+#define HAVE_SSSE3 0
+#define HAVE_XOP 0
+#define HAVE_CPUNOP 0
+#define HAVE_I686 0
+#define HAVE_MIPSFPU 0
+#define HAVE_MIPS32R2 0
+#define HAVE_MIPS32R5 0
+#define HAVE_MIPS64R2 0
+#define HAVE_MIPS32R6 0
+#define HAVE_MIPS64R6 0
+#define HAVE_MIPSDSP 0
+#define HAVE_MIPSDSPR2 0
+#define HAVE_MSA 0
+#define HAVE_MSA2 0
+#define HAVE_LOONGSON2 0
+#define HAVE_LOONGSON3 0
+#define HAVE_MMI 0
+#define HAVE_ARMV5TE_EXTERNAL 0
+#define HAVE_ARMV6_EXTERNAL 0
+#define HAVE_ARMV6T2_EXTERNAL 0
+#define HAVE_ARMV8_EXTERNAL 1
+#define HAVE_NEON_EXTERNAL 1
+#define HAVE_VFP_EXTERNAL 1
+#define HAVE_VFPV3_EXTERNAL 0
+#define HAVE_SETEND_EXTERNAL 0
+#define HAVE_ALTIVEC_EXTERNAL 0
+#define HAVE_DCBZL_EXTERNAL 0
+#define HAVE_LDBRX_EXTERNAL 0
+#define HAVE_POWER8_EXTERNAL 0
+#define HAVE_PPC4XX_EXTERNAL 0
+#define HAVE_VSX_EXTERNAL 0
+#define HAVE_AESNI_EXTERNAL 0
+#define HAVE_AMD3DNOW_EXTERNAL 0
+#define HAVE_AMD3DNOWEXT_EXTERNAL 0
+#define HAVE_AVX_EXTERNAL 0
+#define HAVE_AVX2_EXTERNAL 0
+#define HAVE_AVX512_EXTERNAL 0
+#define HAVE_FMA3_EXTERNAL 0
+#define HAVE_FMA4_EXTERNAL 0
+#define HAVE_MMX_EXTERNAL 0
+#define HAVE_MMXEXT_EXTERNAL 0
+#define HAVE_SSE_EXTERNAL 0
+#define HAVE_SSE2_EXTERNAL 0
+#define HAVE_SSE3_EXTERNAL 0
+#define HAVE_SSE4_EXTERNAL 0
+#define HAVE_SSE42_EXTERNAL 0
+#define HAVE_SSSE3_EXTERNAL 0
+#define HAVE_XOP_EXTERNAL 0
+#define HAVE_CPUNOP_EXTERNAL 0
+#define HAVE_I686_EXTERNAL 0
+#define HAVE_MIPSFPU_EXTERNAL 0
+#define HAVE_MIPS32R2_EXTERNAL 0
+#define HAVE_MIPS32R5_EXTERNAL 0
+#define HAVE_MIPS64R2_EXTERNAL 0
+#define HAVE_MIPS32R6_EXTERNAL 0
+#define HAVE_MIPS64R6_EXTERNAL 0
+#define HAVE_MIPSDSP_EXTERNAL 0
+#define HAVE_MIPSDSPR2_EXTERNAL 0
+#define HAVE_MSA_EXTERNAL 0
+#define HAVE_MSA2_EXTERNAL 0
+#define HAVE_LOONGSON2_EXTERNAL 0
+#define HAVE_LOONGSON3_EXTERNAL 0
+#define HAVE_MMI_EXTERNAL 0
+#define HAVE_ARMV5TE_INLINE 0
+#define HAVE_ARMV6_INLINE 0
+#define HAVE_ARMV6T2_INLINE 0
+#define HAVE_ARMV8_INLINE 1
+#define HAVE_NEON_INLINE 1
+#define HAVE_VFP_INLINE 1
+#define HAVE_VFPV3_INLINE 0
+#define HAVE_SETEND_INLINE 0
+#define HAVE_ALTIVEC_INLINE 0
+#define HAVE_DCBZL_INLINE 0
+#define HAVE_LDBRX_INLINE 0
+#define HAVE_POWER8_INLINE 0
+#define HAVE_PPC4XX_INLINE 0
+#define HAVE_VSX_INLINE 0
+#define HAVE_AESNI_INLINE 0
+#define HAVE_AMD3DNOW_INLINE 0
+#define HAVE_AMD3DNOWEXT_INLINE 0
+#define HAVE_AVX_INLINE 0
+#define HAVE_AVX2_INLINE 0
+#define HAVE_AVX512_INLINE 0
+#define HAVE_FMA3_INLINE 0
+#define HAVE_FMA4_INLINE 0
+#define HAVE_MMX_INLINE 0
+#define HAVE_MMXEXT_INLINE 0
+#define HAVE_SSE_INLINE 0
+#define HAVE_SSE2_INLINE 0
+#define HAVE_SSE3_INLINE 0
+#define HAVE_SSE4_INLINE 0
+#define HAVE_SSE42_INLINE 0
+#define HAVE_SSSE3_INLINE 0
+#define HAVE_XOP_INLINE 0
+#define HAVE_CPUNOP_INLINE 0
+#define HAVE_I686_INLINE 0
+#define HAVE_MIPSFPU_INLINE 0
+#define HAVE_MIPS32R2_INLINE 0
+#define HAVE_MIPS32R5_INLINE 0
+#define HAVE_MIPS64R2_INLINE 0
+#define HAVE_MIPS32R6_INLINE 0
+#define HAVE_MIPS64R6_INLINE 0
+#define HAVE_MIPSDSP_INLINE 0
+#define HAVE_MIPSDSPR2_INLINE 0
+#define HAVE_MSA_INLINE 0
+#define HAVE_MSA2_INLINE 0
+#define HAVE_LOONGSON2_INLINE 0
+#define HAVE_LOONGSON3_INLINE 0
+#define HAVE_MMI_INLINE 0
+#define HAVE_ALIGNED_STACK 1
+#define HAVE_FAST_64BIT 1
+#define HAVE_FAST_CLZ 1
+#define HAVE_FAST_CMOV 0
+#define HAVE_LOCAL_ALIGNED 0
+#define HAVE_SIMD_ALIGN_16 1
+#define HAVE_SIMD_ALIGN_32 0
+#define HAVE_SIMD_ALIGN_64 0
+#define HAVE_ATOMIC_CAS_PTR 0
+#define HAVE_MACHINE_RW_BARRIER 0
+#define HAVE_MEMORYBARRIER 0
+#define HAVE_MM_EMPTY 0
+#define HAVE_RDTSC 0
+#define HAVE_SEM_TIMEDWAIT 1
+#define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1
+#define HAVE_CABS 0
+#define HAVE_CEXP 0
+#define HAVE_INLINE_ASM 1
+#define HAVE_SYMVER 0
+#define HAVE_X86ASM 0
+#define HAVE_BIGENDIAN 0
+#define HAVE_FAST_UNALIGNED 1
+#define HAVE_ARPA_INET_H 0
+#define HAVE_ASM_TYPES_H 1
+#define HAVE_CDIO_PARANOIA_H 0
+#define HAVE_CDIO_PARANOIA_PARANOIA_H 0
+#define HAVE_CUDA_H 0
+#define HAVE_DISPATCH_DISPATCH_H 0
+#define HAVE_DEV_BKTR_IOCTL_BT848_H 0
+#define HAVE_DEV_BKTR_IOCTL_METEOR_H 0
+#define HAVE_DEV_IC_BT8XX_H 0
+#define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0
+#define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0
+#define HAVE_DIRECT_H 0
+#define HAVE_DIRENT_H 1
+#define HAVE_DXGIDEBUG_H 0
+#define HAVE_DXVA_H 0
+#define HAVE_ES2_GL_H 0
+#define HAVE_GSM_H 0
+#define HAVE_IO_H 0
+#define HAVE_LINUX_PERF_EVENT_H 1
+#define HAVE_MACHINE_IOCTL_BT848_H 0
+#define HAVE_MACHINE_IOCTL_METEOR_H 0
+#define HAVE_MALLOC_H 1
+#define HAVE_OPENCV2_CORE_CORE_C_H 0
+#define HAVE_OPENGL_GL3_H 0
+#define HAVE_POLL_H 1
+#define HAVE_SYS_PARAM_H 1
+#define HAVE_SYS_RESOURCE_H 1
+#define HAVE_SYS_SELECT_H 1
+#define HAVE_SYS_SOUNDCARD_H 1
+#define HAVE_SYS_TIME_H 1
+#define HAVE_SYS_UN_H 1
+#define HAVE_SYS_VIDEOIO_H 0
+#define HAVE_TERMIOS_H 1
+#define HAVE_UDPLITE_H 0
+#define HAVE_UNISTD_H 1
+#define HAVE_VALGRIND_VALGRIND_H 0
+#define HAVE_WINDOWS_H 0
+#define HAVE_WINSOCK2_H 0
+#define HAVE_INTRINSICS_NEON 1
+#define HAVE_ATANF 1
+#define HAVE_ATAN2F 1
+#define HAVE_CBRT 1
+#define HAVE_CBRTF 1
+#define HAVE_COPYSIGN 1
+#define HAVE_COSF 1
+#define HAVE_ERF 1
+#define HAVE_EXP2 1
+#define HAVE_EXP2F 1
+#define HAVE_EXPF 1
+#define HAVE_HYPOT 1
+#define HAVE_ISFINITE 1
+#define HAVE_ISINF 1
+#define HAVE_ISNAN 1
+#define HAVE_LDEXPF 1
+#define HAVE_LLRINT 1
+#define HAVE_LLRINTF 1
+#define HAVE_LOG2 1
+#define HAVE_LOG2F 1
+#define HAVE_LOG10F 1
+#define HAVE_LRINT 1
+#define HAVE_LRINTF 1
+#define HAVE_POWF 1
+#define HAVE_RINT 1
+#define HAVE_ROUND 1
+#define HAVE_ROUNDF 1
+#define HAVE_SINF 1
+#define HAVE_TRUNC 1
+#define HAVE_TRUNCF 1
+#define HAVE_DOS_PATHS 0
+#define HAVE_LIBC_MSVCRT 0
+#define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0
+#define HAVE_SECTION_DATA_REL_RO 1
+#define HAVE_THREADS 1
+#define HAVE_UWP 0
+#define HAVE_WINRT 0
+#define HAVE_ACCESS 1
+#define HAVE_ALIGNED_MALLOC 0
+#define HAVE_ARC4RANDOM 0
+#define HAVE_CLOCK_GETTIME 1
+#define HAVE_CLOSESOCKET 0
+#define HAVE_COMMANDLINETOARGVW 0
+#define HAVE_FCNTL 1
+#define HAVE_GETADDRINFO 0
+#define HAVE_GETHRTIME 0
+#define HAVE_GETOPT 1
+#define HAVE_GETMODULEHANDLE 0
+#define HAVE_GETPROCESSAFFINITYMASK 0
+#define HAVE_GETPROCESSMEMORYINFO 0
+#define HAVE_GETPROCESSTIMES 0
+#define HAVE_GETRUSAGE 1
+#define HAVE_GETSTDHANDLE 0
+#define HAVE_GETSYSTEMTIMEASFILETIME 0
+#define HAVE_GETTIMEOFDAY 1
+#define HAVE_GLOB 1
+#define HAVE_GLXGETPROCADDRESS 0
+#define HAVE_GMTIME_R 1
+#define HAVE_INET_ATON 0
+#define HAVE_ISATTY 1
+#define HAVE_KBHIT 0
+#define HAVE_LOCALTIME_R 1
+#define HAVE_LSTAT 1
+#define HAVE_LZO1X_999_COMPRESS 0
+#define HAVE_MACH_ABSOLUTE_TIME 0
+#define HAVE_MAPVIEWOFFILE 0
+#define HAVE_MEMALIGN 1
+#define HAVE_MKSTEMP 1
+#define HAVE_MMAP 1
+#define HAVE_MPROTECT 1
+#define HAVE_NANOSLEEP 1
+#define HAVE_PEEKNAMEDPIPE 0
+#define HAVE_POSIX_MEMALIGN 1
+#define HAVE_PTHREAD_CANCEL 1
+#define HAVE_SCHED_GETAFFINITY 1
+#define HAVE_SECITEMIMPORT 0
+#define HAVE_SETCONSOLETEXTATTRIBUTE 0
+#define HAVE_SETCONSOLECTRLHANDLER 0
+#define HAVE_SETDLLDIRECTORY 0
+#define HAVE_SETMODE 0
+#define HAVE_SETRLIMIT 1
+#define HAVE_SLEEP 0
+#define HAVE_STRERROR_R 1
+#define HAVE_SYSCONF 1
+#define HAVE_SYSCTL 0
+#define HAVE_USLEEP 1
+#define HAVE_UTGETOSTYPEFROMSTRING 0
+#define HAVE_VIRTUALALLOC 0
+#define HAVE_WGLGETPROCADDRESS 0
+#define HAVE_BCRYPT 0
+#define HAVE_VAAPI_DRM 0
+#define HAVE_VAAPI_X11 0
+#define HAVE_VDPAU_X11 0
+#define HAVE_PTHREADS 1
+#define HAVE_OS2THREADS 0
+#define HAVE_W32THREADS 0
+#define HAVE_AS_ARCH_DIRECTIVE 0
+#define HAVE_AS_DN_DIRECTIVE 0
+#define HAVE_AS_FPU_DIRECTIVE 0
+#define HAVE_AS_FUNC 0
+#define HAVE_AS_OBJECT_ARCH 0
+#define HAVE_ASM_MOD_Q 0
+#define HAVE_BLOCKS_EXTENSION 0
+#define HAVE_EBP_AVAILABLE 0
+#define HAVE_EBX_AVAILABLE 0
+#define HAVE_GNU_AS 0
+#define HAVE_GNU_WINDRES 0
+#define HAVE_IBM_ASM 0
+#define HAVE_INLINE_ASM_DIRECT_SYMBOL_REFS 0
+#define HAVE_INLINE_ASM_LABELS 1
+#define HAVE_INLINE_ASM_NONLOCAL_LABELS 1
+#define HAVE_PRAGMA_DEPRECATED 1
+#define HAVE_RSYNC_CONTIMEOUT 1
+#define HAVE_SYMVER_ASM_LABEL 1
+#define HAVE_SYMVER_GNU_ASM 1
+/* #define HAVE_VFP_ARGS 0 -- softfp/hardfp selection is done by the fuchsia build */
+#define HAVE_XFORM_ASM 0
+#define HAVE_XMM_CLOBBERS 0
+#define HAVE_KCMVIDEOCODECTYPE_HEVC 0
+#define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0
+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0
+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0
+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0
+#define HAVE_SOCKLEN_T 0
+#define HAVE_STRUCT_ADDRINFO 0
+#define HAVE_STRUCT_GROUP_SOURCE_REQ 0
+#define HAVE_STRUCT_IP_MREQ_SOURCE 0
+#define HAVE_STRUCT_IPV6_MREQ 0
+#define HAVE_STRUCT_MSGHDR_MSG_FLAGS 0
+#define HAVE_STRUCT_POLLFD 0
+#define HAVE_STRUCT_RUSAGE_RU_MAXRSS 1
+#define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0
+#define HAVE_STRUCT_SOCKADDR_IN6 0
+#define HAVE_STRUCT_SOCKADDR_SA_LEN 0
+#define HAVE_STRUCT_SOCKADDR_STORAGE 0
+#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1
+#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0
+#define HAVE_MAKEINFO 0
+#define HAVE_MAKEINFO_HTML 0
+#define HAVE_OPENCL_D3D11 0
+#define HAVE_OPENCL_DRM_ARM 0
+#define HAVE_OPENCL_DRM_BEIGNET 0
+#define HAVE_OPENCL_DXVA2 0
+#define HAVE_OPENCL_VAAPI_BEIGNET 0
+#define HAVE_OPENCL_VAAPI_INTEL_MEDIA 0
+#define HAVE_PERL 1
+#define HAVE_POD2MAN 1
+#define HAVE_TEXI2HTML 0
+#define CONFIG_DOC 0
+#define CONFIG_HTMLPAGES 0
+#define CONFIG_MANPAGES 0
+#define CONFIG_PODPAGES 0
+#define CONFIG_TXTPAGES 0
+#define CONFIG_AVIO_LIST_DIR_EXAMPLE 1
+#define CONFIG_AVIO_READING_EXAMPLE 1
+#define CONFIG_DECODE_AUDIO_EXAMPLE 1
+#define CONFIG_DECODE_VIDEO_EXAMPLE 1
+#define CONFIG_DEMUXING_DECODING_EXAMPLE 1
+#define CONFIG_ENCODE_AUDIO_EXAMPLE 1
+#define CONFIG_ENCODE_VIDEO_EXAMPLE 1
+#define CONFIG_EXTRACT_MVS_EXAMPLE 1
+#define CONFIG_FILTER_AUDIO_EXAMPLE 0
+#define CONFIG_FILTERING_AUDIO_EXAMPLE 0
+#define CONFIG_FILTERING_VIDEO_EXAMPLE 0
+#define CONFIG_HTTP_MULTICLIENT_EXAMPLE 1
+#define CONFIG_HW_DECODE_EXAMPLE 1
+#define CONFIG_METADATA_EXAMPLE 1
+#define CONFIG_MUXING_EXAMPLE 0
+#define CONFIG_QSVDEC_EXAMPLE 0
+#define CONFIG_REMUXING_EXAMPLE 1
+#define CONFIG_RESAMPLING_AUDIO_EXAMPLE 0
+#define CONFIG_SCALING_VIDEO_EXAMPLE 0
+#define CONFIG_TRANSCODE_AAC_EXAMPLE 0
+#define CONFIG_TRANSCODING_EXAMPLE 0
+#define CONFIG_VAAPI_ENCODE_EXAMPLE 0
+#define CONFIG_VAAPI_TRANSCODE_EXAMPLE 0
+#define CONFIG_AVISYNTH 0
+#define CONFIG_FREI0R 0
+#define CONFIG_LIBCDIO 0
+#define CONFIG_LIBDAVS2 0
+#define CONFIG_LIBRUBBERBAND 0
+#define CONFIG_LIBVIDSTAB 0
+#define CONFIG_LIBX264 0
+#define CONFIG_LIBX265 0
+#define CONFIG_LIBXAVS 0
+#define CONFIG_LIBXAVS2 0
+#define CONFIG_LIBXVID 0
+#define CONFIG_DECKLINK 0
+#define CONFIG_LIBFDK_AAC 0
+#define CONFIG_OPENSSL 0
+#define CONFIG_LIBTLS 0
+#define CONFIG_GMP 0
+#define CONFIG_LIBARIBB24 0
+#define CONFIG_LIBLENSFUN 0
+#define CONFIG_LIBOPENCORE_AMRNB 0
+#define CONFIG_LIBOPENCORE_AMRWB 0
+#define CONFIG_LIBVMAF 0
+#define CONFIG_LIBVO_AMRWBENC 0
+#define CONFIG_MBEDTLS 0
+#define CONFIG_RKMPP 0
+#define CONFIG_LIBSMBCLIENT 0
+#define CONFIG_CHROMAPRINT 0
+#define CONFIG_GCRYPT 0
+#define CONFIG_GNUTLS 0
+#define CONFIG_JNI 0
+#define CONFIG_LADSPA 0
+#define CONFIG_LIBAOM 0
+#define CONFIG_LIBASS 0
+#define CONFIG_LIBBLURAY 0
+#define CONFIG_LIBBS2B 0
+#define CONFIG_LIBCACA 0
+#define CONFIG_LIBCELT 0
+#define CONFIG_LIBCODEC2 0
+#define CONFIG_LIBDAV1D 0
+#define CONFIG_LIBDC1394 0
+#define CONFIG_LIBDRM 0
+#define CONFIG_LIBFLITE 0
+#define CONFIG_LIBFONTCONFIG 0
+#define CONFIG_LIBFREETYPE 0
+#define CONFIG_LIBFRIBIDI 0
+#define CONFIG_LIBGLSLANG 0
+#define CONFIG_LIBGME 0
+#define CONFIG_LIBGSM 0
+#define CONFIG_LIBIEC61883 0
+#define CONFIG_LIBILBC 0
+#define CONFIG_LIBJACK 0
+#define CONFIG_LIBKLVANC 0
+#define CONFIG_LIBKVAZAAR 0
+#define CONFIG_LIBMODPLUG 0
+#define CONFIG_LIBMP3LAME 0
+#define CONFIG_LIBMYSOFA 0
+#define CONFIG_LIBOPENCV 0
+#define CONFIG_LIBOPENH264 0
+#define CONFIG_LIBOPENJPEG 0
+#define CONFIG_LIBOPENMPT 0
+#define CONFIG_LIBOPUS 1
+#define CONFIG_LIBPULSE 0
+#define CONFIG_LIBRABBITMQ 0
+#define CONFIG_LIBRAV1E 0
+#define CONFIG_LIBRSVG 0
+#define CONFIG_LIBRTMP 0
+#define CONFIG_LIBSHINE 0
+#define CONFIG_LIBSMBCLIENT 0
+#define CONFIG_LIBSNAPPY 0
+#define CONFIG_LIBSOXR 0
+#define CONFIG_LIBSPEEX 0
+#define CONFIG_LIBSRT 0
+#define CONFIG_LIBSSH 0
+#define CONFIG_LIBTENSORFLOW 0
+#define CONFIG_LIBTESSERACT 0
+#define CONFIG_LIBTHEORA 0
+#define CONFIG_LIBTWOLAME 0
+#define CONFIG_LIBV4L2 0
+#define CONFIG_LIBVORBIS 0
+#define CONFIG_LIBVPX 0
+#define CONFIG_LIBWAVPACK 0
+#define CONFIG_LIBWEBP 0
+#define CONFIG_LIBXML2 0
+#define CONFIG_LIBZIMG 0
+#define CONFIG_LIBZMQ 0
+#define CONFIG_LIBZVBI 0
+#define CONFIG_LV2 0
+#define CONFIG_MEDIACODEC 0
+#define CONFIG_OPENAL 0
+#define CONFIG_OPENGL 0
+#define CONFIG_POCKETSPHINX 0
+#define CONFIG_VAPOURSYNTH 0
+#define CONFIG_ALSA 0
+#define CONFIG_APPKIT 0
+#define CONFIG_AVFOUNDATION 0
+#define CONFIG_BZLIB 0
+#define CONFIG_COREIMAGE 0
+#define CONFIG_ICONV 0
+#define CONFIG_LIBXCB 0
+#define CONFIG_LIBXCB_SHM 0
+#define CONFIG_LIBXCB_SHAPE 0
+#define CONFIG_LIBXCB_XFIXES 0
+#define CONFIG_LZMA 0
+#define CONFIG_SCHANNEL 0
+#define CONFIG_SDL2 0
+#define CONFIG_SECURETRANSPORT 0
+#define CONFIG_SNDIO 0
+#define CONFIG_XLIB 0
+#define CONFIG_ZLIB 0
+#define CONFIG_CUDA_NVCC 0
+#define CONFIG_CUDA_SDK 0
+#define CONFIG_LIBNPP 0
+#define CONFIG_LIBMFX 0
+#define CONFIG_MMAL 0
+#define CONFIG_OMX 0
+#define CONFIG_OPENCL 0
+#define CONFIG_VULKAN 0
+#define CONFIG_AMF 0
+#define CONFIG_AUDIOTOOLBOX 0
+#define CONFIG_CRYSTALHD 0
+#define CONFIG_CUDA 0
+#define CONFIG_CUDA_LLVM 0
+#define CONFIG_CUVID 0
+#define CONFIG_D3D11VA 0
+#define CONFIG_DXVA2 0
+#define CONFIG_FFNVCODEC 0
+#define CONFIG_NVDEC 0
+#define CONFIG_NVENC 0
+#define CONFIG_VAAPI 0
+#define CONFIG_VDPAU 0
+#define CONFIG_VIDEOTOOLBOX 0
+#define CONFIG_V4L2_M2M 0
+#define CONFIG_XVMC 0
+#define CONFIG_FTRAPV 0
+#define CONFIG_GRAY 0
+#define CONFIG_HARDCODED_TABLES 0
+#define CONFIG_OMX_RPI 0
+#define CONFIG_RUNTIME_CPUDETECT 1
+#define CONFIG_SAFE_BITSTREAM_READER 1
+#define CONFIG_SHARED 0
+#define CONFIG_SMALL 0
+#define CONFIG_STATIC 1
+#define CONFIG_SWSCALE_ALPHA 1
+#define CONFIG_GPL 0
+#define CONFIG_NONFREE 0
+#define CONFIG_VERSION3 0
+#define CONFIG_AVDEVICE 0
+#define CONFIG_AVFILTER 0
+#define CONFIG_SWSCALE 0
+#define CONFIG_POSTPROC 0
+#define CONFIG_AVFORMAT 1
+#define CONFIG_AVCODEC 1
+#define CONFIG_SWRESAMPLE 0
+#define CONFIG_AVRESAMPLE 0
+#define CONFIG_AVUTIL 1
+#define CONFIG_FFPLAY 0
+#define CONFIG_FFPROBE 0
+#define CONFIG_FFMPEG 0
+#define CONFIG_DCT 1
+#define CONFIG_DWT 0
+#define CONFIG_ERROR_RESILIENCE 1
+#define CONFIG_FAAN 0
+#define CONFIG_FAST_UNALIGNED 1
+#define CONFIG_FFT 1
+#define CONFIG_LSP 1
+#define CONFIG_LZO 0
+#define CONFIG_MDCT 1
+#define CONFIG_PIXELUTILS 0
+#define CONFIG_NETWORK 0
+#define CONFIG_RDFT 1
+#define CONFIG_AUTODETECT 0
+#define CONFIG_FONTCONFIG 0
+#define CONFIG_LARGE_TESTS 1
+#define CONFIG_LINUX_PERF 0
+#define CONFIG_MEMORY_POISONING 0
+#define CONFIG_NEON_CLOBBER_TEST 0
+#define CONFIG_OSSFUZZ 0
+#define CONFIG_PIC 1
+#define CONFIG_THUMB 0
+#define CONFIG_VALGRIND_BACKTRACE 0
+#define CONFIG_XMM_CLOBBER_TEST 0
+#define CONFIG_BSFS 1
+#define CONFIG_DECODERS 1
+#define CONFIG_ENCODERS 0
+#define CONFIG_HWACCELS 0
+#define CONFIG_PARSERS 1
+#define CONFIG_INDEVS 0
+#define CONFIG_OUTDEVS 0
+#define CONFIG_FILTERS 0
+#define CONFIG_DEMUXERS 1
+#define CONFIG_MUXERS 0
+#define CONFIG_PROTOCOLS 0
+#define CONFIG_AANDCTTABLES 0
+#define CONFIG_AC3DSP 0
+#define CONFIG_ADTS_HEADER 1
+#define CONFIG_AUDIO_FRAME_QUEUE 1
+#define CONFIG_AUDIODSP 0
+#define CONFIG_BLOCKDSP 1
+#define CONFIG_BSWAPDSP 0
+#define CONFIG_CABAC 1
+#define CONFIG_CBS 0
+#define CONFIG_CBS_AV1 0
+#define CONFIG_CBS_H264 0
+#define CONFIG_CBS_H265 0
+#define CONFIG_CBS_JPEG 0
+#define CONFIG_CBS_MPEG2 0
+#define CONFIG_CBS_VP9 0
+#define CONFIG_DIRAC_PARSE 1
+#define CONFIG_DNN 0
+#define CONFIG_DVPROFILE 0
+#define CONFIG_EXIF 1
+#define CONFIG_FAANDCT 0
+#define CONFIG_FAANIDCT 0
+#define CONFIG_FDCTDSP 1
+#define CONFIG_FLACDSP 1
+#define CONFIG_FMTCONVERT 0
+#define CONFIG_FRAME_THREAD_ENCODER 0
+#define CONFIG_G722DSP 0
+#define CONFIG_GOLOMB 1
+#define CONFIG_GPLV3 0
+#define CONFIG_H263DSP 1
+#define CONFIG_H264CHROMA 1
+#define CONFIG_H264DSP 1
+#define CONFIG_H264PARSE 1
+#define CONFIG_H264PRED 1
+#define CONFIG_H264QPEL 1
+#define CONFIG_HEVCPARSE 0
+#define CONFIG_HPELDSP 1
+#define CONFIG_HUFFMAN 0
+#define CONFIG_HUFFYUVDSP 0
+#define CONFIG_HUFFYUVENCDSP 0
+#define CONFIG_IDCTDSP 1
+#define CONFIG_IIRFILTER 0
+#define CONFIG_MDCT15 1
+#define CONFIG_INTRAX8 0
+#define CONFIG_ISO_MEDIA 1
+#define CONFIG_IVIDSP 0
+#define CONFIG_JPEGTABLES 0
+#define CONFIG_LGPLV3 0
+#define CONFIG_LIBX262 0
+#define CONFIG_LLAUDDSP 0
+#define CONFIG_LLVIDDSP 0
+#define CONFIG_LLVIDENCDSP 0
+#define CONFIG_LPC 0
+#define CONFIG_LZF 0
+#define CONFIG_ME_CMP 1
+#define CONFIG_MPEG_ER 1
+#define CONFIG_MPEGAUDIO 1
+#define CONFIG_MPEGAUDIODSP 1
+#define CONFIG_MPEGAUDIOHEADER 1
+#define CONFIG_MPEGVIDEO 1
+#define CONFIG_MPEGVIDEOENC 0
+#define CONFIG_MSS34DSP 0
+#define CONFIG_PIXBLOCKDSP 1
+#define CONFIG_QPELDSP 1
+#define CONFIG_QSV 0
+#define CONFIG_QSVDEC 0
+#define CONFIG_QSVENC 0
+#define CONFIG_QSVVPP 0
+#define CONFIG_RANGECODER 0
+#define CONFIG_RIFFDEC 1
+#define CONFIG_RIFFENC 0
+#define CONFIG_RTPDEC 0
+#define CONFIG_RTPENC_CHAIN 0
+#define CONFIG_RV34DSP 0
+#define CONFIG_SCENE_SAD 0
+#define CONFIG_SINEWIN 1
+#define CONFIG_SNAPPY 0
+#define CONFIG_SRTP 0
+#define CONFIG_STARTCODE 1
+#define CONFIG_TEXTUREDSP 0
+#define CONFIG_TEXTUREDSPENC 0
+#define CONFIG_TPELDSP 0
+#define CONFIG_VAAPI_1 0
+#define CONFIG_VAAPI_ENCODE 0
+#define CONFIG_VC1DSP 0
+#define CONFIG_VIDEODSP 1
+#define CONFIG_VP3DSP 1
+#define CONFIG_VP56DSP 0
+#define CONFIG_VP8DSP 1
+#define CONFIG_WMA_FREQS 0
+#define CONFIG_WMV2DSP 0
+#define CONFIG_AAC_ADTSTOASC_BSF 0
+#define CONFIG_AV1_FRAME_MERGE_BSF 0
+#define CONFIG_AV1_FRAME_SPLIT_BSF 0
+#define CONFIG_AV1_METADATA_BSF 0
+#define CONFIG_CHOMP_BSF 0
+#define CONFIG_DUMP_EXTRADATA_BSF 0
+#define CONFIG_DCA_CORE_BSF 0
+#define CONFIG_EAC3_CORE_BSF 0
+#define CONFIG_EXTRACT_EXTRADATA_BSF 0
+#define CONFIG_FILTER_UNITS_BSF 0
+#define CONFIG_H264_METADATA_BSF 0
+#define CONFIG_H264_MP4TOANNEXB_BSF 0
+#define CONFIG_H264_REDUNDANT_PPS_BSF 0
+#define CONFIG_HAPQA_EXTRACT_BSF 0
+#define CONFIG_HEVC_METADATA_BSF 0
+#define CONFIG_HEVC_MP4TOANNEXB_BSF 0
+#define CONFIG_IMX_DUMP_HEADER_BSF 0
+#define CONFIG_MJPEG2JPEG_BSF 0
+#define CONFIG_MJPEGA_DUMP_HEADER_BSF 0
+#define CONFIG_MP3_HEADER_DECOMPRESS_BSF 0
+#define CONFIG_MPEG2_METADATA_BSF 0
+#define CONFIG_MPEG4_UNPACK_BFRAMES_BSF 0
+#define CONFIG_MOV2TEXTSUB_BSF 0
+#define CONFIG_NOISE_BSF 0
+#define CONFIG_NULL_BSF 1
+#define CONFIG_PRORES_METADATA_BSF 0
+#define CONFIG_REMOVE_EXTRADATA_BSF 0
+#define CONFIG_TEXT2MOVSUB_BSF 0
+#define CONFIG_TRACE_HEADERS_BSF 0
+#define CONFIG_TRUEHD_CORE_BSF 0
+#define CONFIG_VP9_METADATA_BSF 0
+#define CONFIG_VP9_RAW_REORDER_BSF 0
+#define CONFIG_VP9_SUPERFRAME_BSF 0
+#define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 0
+#define CONFIG_AASC_DECODER 0
+#define CONFIG_AIC_DECODER 0
+#define CONFIG_ALIAS_PIX_DECODER 0
+#define CONFIG_AGM_DECODER 0
+#define CONFIG_AMV_DECODER 0
+#define CONFIG_ANM_DECODER 0
+#define CONFIG_ANSI_DECODER 0
+#define CONFIG_APNG_DECODER 0
+#define CONFIG_ARBC_DECODER 0
+#define CONFIG_ASV1_DECODER 0
+#define CONFIG_ASV2_DECODER 0
+#define CONFIG_AURA_DECODER 0
+#define CONFIG_AURA2_DECODER 0
+#define CONFIG_AVRP_DECODER 0
+#define CONFIG_AVRN_DECODER 0
+#define CONFIG_AVS_DECODER 0
+#define CONFIG_AVUI_DECODER 0
+#define CONFIG_AYUV_DECODER 0
+#define CONFIG_BETHSOFTVID_DECODER 0
+#define CONFIG_BFI_DECODER 0
+#define CONFIG_BINK_DECODER 0
+#define CONFIG_BITPACKED_DECODER 0
+#define CONFIG_BMP_DECODER 0
+#define CONFIG_BMV_VIDEO_DECODER 0
+#define CONFIG_BRENDER_PIX_DECODER 0
+#define CONFIG_C93_DECODER 0
+#define CONFIG_CAVS_DECODER 0
+#define CONFIG_CDGRAPHICS_DECODER 0
+#define CONFIG_CDTOONS_DECODER 0
+#define CONFIG_CDXL_DECODER 0
+#define CONFIG_CFHD_DECODER 0
+#define CONFIG_CINEPAK_DECODER 0
+#define CONFIG_CLEARVIDEO_DECODER 0
+#define CONFIG_CLJR_DECODER 0
+#define CONFIG_CLLC_DECODER 0
+#define CONFIG_COMFORTNOISE_DECODER 0
+#define CONFIG_CPIA_DECODER 0
+#define CONFIG_CSCD_DECODER 0
+#define CONFIG_CYUV_DECODER 0
+#define CONFIG_DDS_DECODER 0
+#define CONFIG_DFA_DECODER 0
+#define CONFIG_DIRAC_DECODER 0
+#define CONFIG_DNXHD_DECODER 0
+#define CONFIG_DPX_DECODER 0
+#define CONFIG_DSICINVIDEO_DECODER 0
+#define CONFIG_DVAUDIO_DECODER 0
+#define CONFIG_DVVIDEO_DECODER 0
+#define CONFIG_DXA_DECODER 0
+#define CONFIG_DXTORY_DECODER 0
+#define CONFIG_DXV_DECODER 0
+#define CONFIG_EACMV_DECODER 0
+#define CONFIG_EAMAD_DECODER 0
+#define CONFIG_EATGQ_DECODER 0
+#define CONFIG_EATGV_DECODER 0
+#define CONFIG_EATQI_DECODER 0
+#define CONFIG_EIGHTBPS_DECODER 0
+#define CONFIG_EIGHTSVX_EXP_DECODER 0
+#define CONFIG_EIGHTSVX_FIB_DECODER 0
+#define CONFIG_ESCAPE124_DECODER 0
+#define CONFIG_ESCAPE130_DECODER 0
+#define CONFIG_EXR_DECODER 0
+#define CONFIG_FFV1_DECODER 0
+#define CONFIG_FFVHUFF_DECODER 0
+#define CONFIG_FIC_DECODER 0
+#define CONFIG_FITS_DECODER 0
+#define CONFIG_FLASHSV_DECODER 0
+#define CONFIG_FLASHSV2_DECODER 0
+#define CONFIG_FLIC_DECODER 0
+#define CONFIG_FLV_DECODER 0
+#define CONFIG_FMVC_DECODER 0
+#define CONFIG_FOURXM_DECODER 0
+#define CONFIG_FRAPS_DECODER 0
+#define CONFIG_FRWU_DECODER 0
+#define CONFIG_G2M_DECODER 0
+#define CONFIG_GDV_DECODER 0
+#define CONFIG_GIF_DECODER 0
+#define CONFIG_H261_DECODER 0
+#define CONFIG_H263_DECODER 1
+#define CONFIG_H263I_DECODER 0
+#define CONFIG_H263P_DECODER 0
+#define CONFIG_H263_V4L2M2M_DECODER 0
+#define CONFIG_H264_DECODER 1
+#define CONFIG_H264_CRYSTALHD_DECODER 0
+#define CONFIG_H264_V4L2M2M_DECODER 0
+#define CONFIG_H264_MEDIACODEC_DECODER 0
+#define CONFIG_H264_MMAL_DECODER 0
+#define CONFIG_H264_QSV_DECODER 0
+#define CONFIG_H264_RKMPP_DECODER 0
+#define CONFIG_HAP_DECODER 0
+#define CONFIG_HEVC_DECODER 0
+#define CONFIG_HEVC_QSV_DECODER 0
+#define CONFIG_HEVC_RKMPP_DECODER 0
+#define CONFIG_HEVC_V4L2M2M_DECODER 0
+#define CONFIG_HNM4_VIDEO_DECODER 0
+#define CONFIG_HQ_HQA_DECODER 0
+#define CONFIG_HQX_DECODER 0
+#define CONFIG_HUFFYUV_DECODER 0
+#define CONFIG_HYMT_DECODER 0
+#define CONFIG_IDCIN_DECODER 0
+#define CONFIG_IFF_ILBM_DECODER 0
+#define CONFIG_IMM4_DECODER 0
+#define CONFIG_IMM5_DECODER 0
+#define CONFIG_INDEO2_DECODER 0
+#define CONFIG_INDEO3_DECODER 0
+#define CONFIG_INDEO4_DECODER 0
+#define CONFIG_INDEO5_DECODER 0
+#define CONFIG_INTERPLAY_VIDEO_DECODER 0
+#define CONFIG_JPEG2000_DECODER 0
+#define CONFIG_JPEGLS_DECODER 0
+#define CONFIG_JV_DECODER 0
+#define CONFIG_KGV1_DECODER 0
+#define CONFIG_KMVC_DECODER 0
+#define CONFIG_LAGARITH_DECODER 0
+#define CONFIG_LOCO_DECODER 0
+#define CONFIG_LSCR_DECODER 0
+#define CONFIG_M101_DECODER 0
+#define CONFIG_MAGICYUV_DECODER 0
+#define CONFIG_MDEC_DECODER 0
+#define CONFIG_MIMIC_DECODER 0
+#define CONFIG_MJPEG_DECODER 0
+#define CONFIG_MJPEGB_DECODER 0
+#define CONFIG_MMVIDEO_DECODER 0
+#define CONFIG_MOTIONPIXELS_DECODER 0
+#define CONFIG_MPEG1VIDEO_DECODER 0
+#define CONFIG_MPEG2VIDEO_DECODER 0
+#define CONFIG_MPEG4_DECODER 1
+#define CONFIG_MPEG4_CRYSTALHD_DECODER 0
+#define CONFIG_MPEG4_V4L2M2M_DECODER 0
+#define CONFIG_MPEG4_MMAL_DECODER 0
+#define CONFIG_MPEGVIDEO_DECODER 0
+#define CONFIG_MPEG1_V4L2M2M_DECODER 0
+#define CONFIG_MPEG2_MMAL_DECODER 0
+#define CONFIG_MPEG2_CRYSTALHD_DECODER 0
+#define CONFIG_MPEG2_V4L2M2M_DECODER 0
+#define CONFIG_MPEG2_QSV_DECODER 0
+#define CONFIG_MPEG2_MEDIACODEC_DECODER 0
+#define CONFIG_MSA1_DECODER 0
+#define CONFIG_MSCC_DECODER 0
+#define CONFIG_MSMPEG4V1_DECODER 0
+#define CONFIG_MSMPEG4V2_DECODER 0
+#define CONFIG_MSMPEG4V3_DECODER 0
+#define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0
+#define CONFIG_MSRLE_DECODER 0
+#define CONFIG_MSS1_DECODER 0
+#define CONFIG_MSS2_DECODER 0
+#define CONFIG_MSVIDEO1_DECODER 0
+#define CONFIG_MSZH_DECODER 0
+#define CONFIG_MTS2_DECODER 0
+#define CONFIG_MV30_DECODER 0
+#define CONFIG_MVC1_DECODER 0
+#define CONFIG_MVC2_DECODER 0
+#define CONFIG_MVDV_DECODER 0
+#define CONFIG_MVHA_DECODER 0
+#define CONFIG_MWSC_DECODER 0
+#define CONFIG_MXPEG_DECODER 0
+#define CONFIG_NUV_DECODER 0
+#define CONFIG_PAF_VIDEO_DECODER 0
+#define CONFIG_PAM_DECODER 0
+#define CONFIG_PBM_DECODER 0
+#define CONFIG_PCX_DECODER 0
+#define CONFIG_PGM_DECODER 0
+#define CONFIG_PGMYUV_DECODER 0
+#define CONFIG_PICTOR_DECODER 0
+#define CONFIG_PIXLET_DECODER 0
+#define CONFIG_PNG_DECODER 0
+#define CONFIG_PPM_DECODER 0
+#define CONFIG_PRORES_DECODER 0
+#define CONFIG_PROSUMER_DECODER 0
+#define CONFIG_PSD_DECODER 0
+#define CONFIG_PTX_DECODER 0
+#define CONFIG_QDRAW_DECODER 0
+#define CONFIG_QPEG_DECODER 0
+#define CONFIG_QTRLE_DECODER 0
+#define CONFIG_R10K_DECODER 0
+#define CONFIG_R210_DECODER 0
+#define CONFIG_RASC_DECODER 0
+#define CONFIG_RAWVIDEO_DECODER 0
+#define CONFIG_RL2_DECODER 0
+#define CONFIG_ROQ_DECODER 0
+#define CONFIG_RPZA_DECODER 0
+#define CONFIG_RSCC_DECODER 0
+#define CONFIG_RV10_DECODER 0
+#define CONFIG_RV20_DECODER 0
+#define CONFIG_RV30_DECODER 0
+#define CONFIG_RV40_DECODER 0
+#define CONFIG_S302M_DECODER 0
+#define CONFIG_SANM_DECODER 0
+#define CONFIG_SCPR_DECODER 0
+#define CONFIG_SCREENPRESSO_DECODER 0
+#define CONFIG_SGI_DECODER 0
+#define CONFIG_SGIRLE_DECODER 0
+#define CONFIG_SHEERVIDEO_DECODER 0
+#define CONFIG_SMACKER_DECODER 0
+#define CONFIG_SMC_DECODER 0
+#define CONFIG_SMVJPEG_DECODER 0
+#define CONFIG_SNOW_DECODER 0
+#define CONFIG_SP5X_DECODER 0
+#define CONFIG_SPEEDHQ_DECODER 0
+#define CONFIG_SRGC_DECODER 0
+#define CONFIG_SUNRAST_DECODER 0
+#define CONFIG_SVQ1_DECODER 0
+#define CONFIG_SVQ3_DECODER 0
+#define CONFIG_TARGA_DECODER 0
+#define CONFIG_TARGA_Y216_DECODER 0
+#define CONFIG_TDSC_DECODER 0
+#define CONFIG_THEORA_DECODER 1
+#define CONFIG_THP_DECODER 0
+#define CONFIG_TIERTEXSEQVIDEO_DECODER 0
+#define CONFIG_TIFF_DECODER 0
+#define CONFIG_TMV_DECODER 0
+#define CONFIG_TRUEMOTION1_DECODER 0
+#define CONFIG_TRUEMOTION2_DECODER 0
+#define CONFIG_TRUEMOTION2RT_DECODER 0
+#define CONFIG_TSCC_DECODER 0
+#define CONFIG_TSCC2_DECODER 0
+#define CONFIG_TXD_DECODER 0
+#define CONFIG_ULTI_DECODER 0
+#define CONFIG_UTVIDEO_DECODER 0
+#define CONFIG_V210_DECODER 0
+#define CONFIG_V210X_DECODER 0
+#define CONFIG_V308_DECODER 0
+#define CONFIG_V408_DECODER 0
+#define CONFIG_V410_DECODER 0
+#define CONFIG_VB_DECODER 0
+#define CONFIG_VBLE_DECODER 0
+#define CONFIG_VC1_DECODER 0
+#define CONFIG_VC1_CRYSTALHD_DECODER 0
+#define CONFIG_VC1IMAGE_DECODER 0
+#define CONFIG_VC1_MMAL_DECODER 0
+#define CONFIG_VC1_QSV_DECODER 0
+#define CONFIG_VC1_V4L2M2M_DECODER 0
+#define CONFIG_VCR1_DECODER 0
+#define CONFIG_VMDVIDEO_DECODER 0
+#define CONFIG_VMNC_DECODER 0
+#define CONFIG_VP3_DECODER 1
+#define CONFIG_VP4_DECODER 0
+#define CONFIG_VP5_DECODER 0
+#define CONFIG_VP6_DECODER 0
+#define CONFIG_VP6A_DECODER 0
+#define CONFIG_VP6F_DECODER 0
+#define CONFIG_VP7_DECODER 0
+#define CONFIG_VP8_DECODER 1
+#define CONFIG_VP8_RKMPP_DECODER 0
+#define CONFIG_VP8_V4L2M2M_DECODER 0
+#define CONFIG_VP9_DECODER 0
+#define CONFIG_VP9_RKMPP_DECODER 0
+#define CONFIG_VP9_V4L2M2M_DECODER 0
+#define CONFIG_VQA_DECODER 0
+#define CONFIG_WEBP_DECODER 0
+#define CONFIG_WCMV_DECODER 0
+#define CONFIG_WRAPPED_AVFRAME_DECODER 0
+#define CONFIG_WMV1_DECODER 0
+#define CONFIG_WMV2_DECODER 0
+#define CONFIG_WMV3_DECODER 0
+#define CONFIG_WMV3_CRYSTALHD_DECODER 0
+#define CONFIG_WMV3IMAGE_DECODER 0
+#define CONFIG_WNV1_DECODER 0
+#define CONFIG_XAN_WC3_DECODER 0
+#define CONFIG_XAN_WC4_DECODER 0
+#define CONFIG_XBM_DECODER 0
+#define CONFIG_XFACE_DECODER 0
+#define CONFIG_XL_DECODER 0
+#define CONFIG_XPM_DECODER 0
+#define CONFIG_XWD_DECODER 0
+#define CONFIG_Y41P_DECODER 0
+#define CONFIG_YLC_DECODER 0
+#define CONFIG_YOP_DECODER 0
+#define CONFIG_YUV4_DECODER 0
+#define CONFIG_ZERO12V_DECODER 0
+#define CONFIG_ZEROCODEC_DECODER 0
+#define CONFIG_ZLIB_DECODER 0
+#define CONFIG_ZMBV_DECODER 0
+#define CONFIG_AAC_DECODER 1
+#define CONFIG_AAC_FIXED_DECODER 0
+#define CONFIG_AAC_LATM_DECODER 1
+#define CONFIG_AC3_DECODER 0
+#define CONFIG_AC3_FIXED_DECODER 0
+#define CONFIG_ACELP_KELVIN_DECODER 0
+#define CONFIG_ALAC_DECODER 0
+#define CONFIG_ALS_DECODER 0
+#define CONFIG_AMRNB_DECODER 1
+#define CONFIG_AMRWB_DECODER 1
+#define CONFIG_APE_DECODER 0
+#define CONFIG_APTX_DECODER 1
+#define CONFIG_APTX_HD_DECODER 0
+#define CONFIG_ATRAC1_DECODER 0
+#define CONFIG_ATRAC3_DECODER 0
+#define CONFIG_ATRAC3AL_DECODER 0
+#define CONFIG_ATRAC3P_DECODER 0
+#define CONFIG_ATRAC3PAL_DECODER 0
+#define CONFIG_ATRAC9_DECODER 0
+#define CONFIG_BINKAUDIO_DCT_DECODER 0
+#define CONFIG_BINKAUDIO_RDFT_DECODER 0
+#define CONFIG_BMV_AUDIO_DECODER 0
+#define CONFIG_COOK_DECODER 0
+#define CONFIG_DCA_DECODER 0
+#define CONFIG_DOLBY_E_DECODER 0
+#define CONFIG_DSD_LSBF_DECODER 0
+#define CONFIG_DSD_MSBF_DECODER 0
+#define CONFIG_DSD_LSBF_PLANAR_DECODER 0
+#define CONFIG_DSD_MSBF_PLANAR_DECODER 0
+#define CONFIG_DSICINAUDIO_DECODER 0
+#define CONFIG_DSS_SP_DECODER 0
+#define CONFIG_DST_DECODER 0
+#define CONFIG_EAC3_DECODER 0
+#define CONFIG_EVRC_DECODER 0
+#define CONFIG_FFWAVESYNTH_DECODER 0
+#define CONFIG_FLAC_DECODER 1
+#define CONFIG_G723_1_DECODER 0
+#define CONFIG_G729_DECODER 0
+#define CONFIG_GSM_DECODER 0
+#define CONFIG_GSM_MS_DECODER 1
+#define CONFIG_HCA_DECODER 0
+#define CONFIG_HCOM_DECODER 0
+#define CONFIG_IAC_DECODER 0
+#define CONFIG_ILBC_DECODER 0
+#define CONFIG_IMC_DECODER 0
+#define CONFIG_INTERPLAY_ACM_DECODER 0
+#define CONFIG_MACE3_DECODER 0
+#define CONFIG_MACE6_DECODER 0
+#define CONFIG_METASOUND_DECODER 0
+#define CONFIG_MLP_DECODER 0
+#define CONFIG_MP1_DECODER 0
+#define CONFIG_MP1FLOAT_DECODER 0
+#define CONFIG_MP2_DECODER 0
+#define CONFIG_MP2FLOAT_DECODER 0
+#define CONFIG_MP3FLOAT_DECODER 0
+#define CONFIG_MP3_DECODER 1
+#define CONFIG_MP3ADUFLOAT_DECODER 0
+#define CONFIG_MP3ADU_DECODER 0
+#define CONFIG_MP3ON4FLOAT_DECODER 0
+#define CONFIG_MP3ON4_DECODER 0
+#define CONFIG_MPC7_DECODER 0
+#define CONFIG_MPC8_DECODER 0
+#define CONFIG_NELLYMOSER_DECODER 0
+#define CONFIG_ON2AVC_DECODER 0
+#define CONFIG_OPUS_DECODER 0
+#define CONFIG_PAF_AUDIO_DECODER 0
+#define CONFIG_QCELP_DECODER 0
+#define CONFIG_QDM2_DECODER 0
+#define CONFIG_QDMC_DECODER 0
+#define CONFIG_RA_144_DECODER 0
+#define CONFIG_RA_288_DECODER 0
+#define CONFIG_RALF_DECODER 0
+#define CONFIG_SBC_DECODER 1
+#define CONFIG_SHORTEN_DECODER 0
+#define CONFIG_SIPR_DECODER 0
+#define CONFIG_SIREN_DECODER 0
+#define CONFIG_SMACKAUD_DECODER 0
+#define CONFIG_SONIC_DECODER 0
+#define CONFIG_TAK_DECODER 0
+#define CONFIG_TRUEHD_DECODER 0
+#define CONFIG_TRUESPEECH_DECODER 0
+#define CONFIG_TTA_DECODER 0
+#define CONFIG_TWINVQ_DECODER 0
+#define CONFIG_VMDAUDIO_DECODER 0
+#define CONFIG_VORBIS_DECODER 1
+#define CONFIG_WAVPACK_DECODER 0
+#define CONFIG_WMALOSSLESS_DECODER 0
+#define CONFIG_WMAPRO_DECODER 0
+#define CONFIG_WMAV1_DECODER 0
+#define CONFIG_WMAV2_DECODER 0
+#define CONFIG_WMAVOICE_DECODER 0
+#define CONFIG_WS_SND1_DECODER 0
+#define CONFIG_XMA1_DECODER 0
+#define CONFIG_XMA2_DECODER 0
+#define CONFIG_PCM_ALAW_DECODER 1
+#define CONFIG_PCM_BLURAY_DECODER 0
+#define CONFIG_PCM_DVD_DECODER 0
+#define CONFIG_PCM_F16LE_DECODER 0
+#define CONFIG_PCM_F24LE_DECODER 0
+#define CONFIG_PCM_F32BE_DECODER 0
+#define CONFIG_PCM_F32LE_DECODER 1
+#define CONFIG_PCM_F64BE_DECODER 0
+#define CONFIG_PCM_F64LE_DECODER 0
+#define CONFIG_PCM_LXF_DECODER 0
+#define CONFIG_PCM_MULAW_DECODER 1
+#define CONFIG_PCM_S8_DECODER 0
+#define CONFIG_PCM_S8_PLANAR_DECODER 0
+#define CONFIG_PCM_S16BE_DECODER 1
+#define CONFIG_PCM_S16BE_PLANAR_DECODER 0
+#define CONFIG_PCM_S16LE_DECODER 1
+#define CONFIG_PCM_S16LE_PLANAR_DECODER 0
+#define CONFIG_PCM_S24BE_DECODER 1
+#define CONFIG_PCM_S24DAUD_DECODER 0
+#define CONFIG_PCM_S24LE_DECODER 1
+#define CONFIG_PCM_S24LE_PLANAR_DECODER 0
+#define CONFIG_PCM_S32BE_DECODER 0
+#define CONFIG_PCM_S32LE_DECODER 1
+#define CONFIG_PCM_S32LE_PLANAR_DECODER 0
+#define CONFIG_PCM_S64BE_DECODER 0
+#define CONFIG_PCM_S64LE_DECODER 0
+#define CONFIG_PCM_U8_DECODER 1
+#define CONFIG_PCM_U16BE_DECODER 0
+#define CONFIG_PCM_U16LE_DECODER 0
+#define CONFIG_PCM_U24BE_DECODER 0
+#define CONFIG_PCM_U24LE_DECODER 0
+#define CONFIG_PCM_U32BE_DECODER 0
+#define CONFIG_PCM_U32LE_DECODER 0
+#define CONFIG_PCM_VIDC_DECODER 0
+#define CONFIG_DERF_DPCM_DECODER 0
+#define CONFIG_GREMLIN_DPCM_DECODER 0
+#define CONFIG_INTERPLAY_DPCM_DECODER 0
+#define CONFIG_ROQ_DPCM_DECODER 0
+#define CONFIG_SDX2_DPCM_DECODER 0
+#define CONFIG_SOL_DPCM_DECODER 0
+#define CONFIG_XAN_DPCM_DECODER 0
+#define CONFIG_ADPCM_4XM_DECODER 0
+#define CONFIG_ADPCM_ADX_DECODER 0
+#define CONFIG_ADPCM_AFC_DECODER 0
+#define CONFIG_ADPCM_AGM_DECODER 0
+#define CONFIG_ADPCM_AICA_DECODER 0
+#define CONFIG_ADPCM_ARGO_DECODER 0
+#define CONFIG_ADPCM_CT_DECODER 0
+#define CONFIG_ADPCM_DTK_DECODER 0
+#define CONFIG_ADPCM_EA_DECODER 0
+#define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0
+#define CONFIG_ADPCM_EA_R1_DECODER 0
+#define CONFIG_ADPCM_EA_R2_DECODER 0
+#define CONFIG_ADPCM_EA_R3_DECODER 0
+#define CONFIG_ADPCM_EA_XAS_DECODER 0
+#define CONFIG_ADPCM_G722_DECODER 0
+#define CONFIG_ADPCM_G726_DECODER 0
+#define CONFIG_ADPCM_G726LE_DECODER 0
+#define CONFIG_ADPCM_IMA_AMV_DECODER 0
+#define CONFIG_ADPCM_IMA_ALP_DECODER 0
+#define CONFIG_ADPCM_IMA_APC_DECODER 0
+#define CONFIG_ADPCM_IMA_APM_DECODER 0
+#define CONFIG_ADPCM_IMA_DAT4_DECODER 0
+#define CONFIG_ADPCM_IMA_DK3_DECODER 0
+#define CONFIG_ADPCM_IMA_DK4_DECODER 0
+#define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0
+#define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0
+#define CONFIG_ADPCM_IMA_ISS_DECODER 0
+#define CONFIG_ADPCM_IMA_MTF_DECODER 0
+#define CONFIG_ADPCM_IMA_OKI_DECODER 0
+#define CONFIG_ADPCM_IMA_QT_DECODER 0
+#define CONFIG_ADPCM_IMA_RAD_DECODER 0
+#define CONFIG_ADPCM_IMA_SSI_DECODER 0
+#define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0
+#define CONFIG_ADPCM_IMA_WAV_DECODER 0
+#define CONFIG_ADPCM_IMA_WS_DECODER 0
+#define CONFIG_ADPCM_MS_DECODER 0
+#define CONFIG_ADPCM_MTAF_DECODER 0
+#define CONFIG_ADPCM_PSX_DECODER 0
+#define CONFIG_ADPCM_SBPRO_2_DECODER 0
+#define CONFIG_ADPCM_SBPRO_3_DECODER 0
+#define CONFIG_ADPCM_SBPRO_4_DECODER 0
+#define CONFIG_ADPCM_SWF_DECODER 0
+#define CONFIG_ADPCM_THP_DECODER 0
+#define CONFIG_ADPCM_THP_LE_DECODER 0
+#define CONFIG_ADPCM_VIMA_DECODER 0
+#define CONFIG_ADPCM_XA_DECODER 0
+#define CONFIG_ADPCM_YAMAHA_DECODER 0
+#define CONFIG_ADPCM_ZORK_DECODER 0
+#define CONFIG_SSA_DECODER 0
+#define CONFIG_ASS_DECODER 0
+#define CONFIG_CCAPTION_DECODER 0
+#define CONFIG_DVBSUB_DECODER 0
+#define CONFIG_DVDSUB_DECODER 0
+#define CONFIG_JACOSUB_DECODER 0
+#define CONFIG_MICRODVD_DECODER 0
+#define CONFIG_MOVTEXT_DECODER 0
+#define CONFIG_MPL2_DECODER 0
+#define CONFIG_PGSSUB_DECODER 0
+#define CONFIG_PJS_DECODER 0
+#define CONFIG_REALTEXT_DECODER 0
+#define CONFIG_SAMI_DECODER 0
+#define CONFIG_SRT_DECODER 0
+#define CONFIG_STL_DECODER 0
+#define CONFIG_SUBRIP_DECODER 0
+#define CONFIG_SUBVIEWER_DECODER 0
+#define CONFIG_SUBVIEWER1_DECODER 0
+#define CONFIG_TEXT_DECODER 0
+#define CONFIG_VPLAYER_DECODER 0
+#define CONFIG_WEBVTT_DECODER 0
+#define CONFIG_XSUB_DECODER 0
+#define CONFIG_AAC_AT_DECODER 0
+#define CONFIG_AC3_AT_DECODER 0
+#define CONFIG_ADPCM_IMA_QT_AT_DECODER 0
+#define CONFIG_ALAC_AT_DECODER 0
+#define CONFIG_AMR_NB_AT_DECODER 0
+#define CONFIG_EAC3_AT_DECODER 0
+#define CONFIG_GSM_MS_AT_DECODER 0
+#define CONFIG_ILBC_AT_DECODER 0
+#define CONFIG_MP1_AT_DECODER 0
+#define CONFIG_MP2_AT_DECODER 0
+#define CONFIG_MP3_AT_DECODER 0
+#define CONFIG_PCM_ALAW_AT_DECODER 0
+#define CONFIG_PCM_MULAW_AT_DECODER 0
+#define CONFIG_QDMC_AT_DECODER 0
+#define CONFIG_QDM2_AT_DECODER 0
+#define CONFIG_LIBARIBB24_DECODER 0
+#define CONFIG_LIBCELT_DECODER 0
+#define CONFIG_LIBCODEC2_DECODER 0
+#define CONFIG_LIBDAV1D_DECODER 0
+#define CONFIG_LIBDAVS2_DECODER 0
+#define CONFIG_LIBFDK_AAC_DECODER 0
+#define CONFIG_LIBGSM_DECODER 0
+#define CONFIG_LIBGSM_MS_DECODER 0
+#define CONFIG_LIBILBC_DECODER 0
+#define CONFIG_LIBOPENCORE_AMRNB_DECODER 0
+#define CONFIG_LIBOPENCORE_AMRWB_DECODER 0
+#define CONFIG_LIBOPENJPEG_DECODER 0
+#define CONFIG_LIBOPUS_DECODER 1
+#define CONFIG_LIBRSVG_DECODER 0
+#define CONFIG_LIBSPEEX_DECODER 0
+#define CONFIG_LIBVORBIS_DECODER 0
+#define CONFIG_LIBVPX_VP8_DECODER 0
+#define CONFIG_LIBVPX_VP9_DECODER 0
+#define CONFIG_LIBZVBI_TELETEXT_DECODER 0
+#define CONFIG_BINTEXT_DECODER 0
+#define CONFIG_XBIN_DECODER 0
+#define CONFIG_IDF_DECODER 0
+#define CONFIG_LIBAOM_AV1_DECODER 0
+#define CONFIG_LIBOPENH264_DECODER 0
+#define CONFIG_H264_CUVID_DECODER 0
+#define CONFIG_HEVC_CUVID_DECODER 0
+#define CONFIG_HEVC_MEDIACODEC_DECODER 0
+#define CONFIG_MJPEG_CUVID_DECODER 0
+#define CONFIG_MJPEG_QSV_DECODER 0
+#define CONFIG_MPEG1_CUVID_DECODER 0
+#define CONFIG_MPEG2_CUVID_DECODER 0
+#define CONFIG_MPEG4_CUVID_DECODER 0
+#define CONFIG_MPEG4_MEDIACODEC_DECODER 0
+#define CONFIG_VC1_CUVID_DECODER 0
+#define CONFIG_VP8_CUVID_DECODER 0
+#define CONFIG_VP8_MEDIACODEC_DECODER 0
+#define CONFIG_VP8_QSV_DECODER 0
+#define CONFIG_VP9_CUVID_DECODER 0
+#define CONFIG_VP9_MEDIACODEC_DECODER 0
+#define CONFIG_VP9_QSV_DECODER 0
+#define CONFIG_A64MULTI_ENCODER 0
+#define CONFIG_A64MULTI5_ENCODER 0
+#define CONFIG_ALIAS_PIX_ENCODER 0
+#define CONFIG_AMV_ENCODER 0
+#define CONFIG_APNG_ENCODER 0
+#define CONFIG_ASV1_ENCODER 0
+#define CONFIG_ASV2_ENCODER 0
+#define CONFIG_AVRP_ENCODER 0
+#define CONFIG_AVUI_ENCODER 0
+#define CONFIG_AYUV_ENCODER 0
+#define CONFIG_BMP_ENCODER 0
+#define CONFIG_CINEPAK_ENCODER 0
+#define CONFIG_CLJR_ENCODER 0
+#define CONFIG_COMFORTNOISE_ENCODER 0
+#define CONFIG_DNXHD_ENCODER 0
+#define CONFIG_DPX_ENCODER 0
+#define CONFIG_DVVIDEO_ENCODER 0
+#define CONFIG_FFV1_ENCODER 0
+#define CONFIG_FFVHUFF_ENCODER 0
+#define CONFIG_FITS_ENCODER 0
+#define CONFIG_FLASHSV_ENCODER 0
+#define CONFIG_FLASHSV2_ENCODER 0
+#define CONFIG_FLV_ENCODER 0
+#define CONFIG_GIF_ENCODER 0
+#define CONFIG_H261_ENCODER 0
+#define CONFIG_H263_ENCODER 0
+#define CONFIG_H263P_ENCODER 0
+#define CONFIG_HAP_ENCODER 0
+#define CONFIG_HUFFYUV_ENCODER 0
+#define CONFIG_JPEG2000_ENCODER 0
+#define CONFIG_JPEGLS_ENCODER 0
+#define CONFIG_LJPEG_ENCODER 0
+#define CONFIG_MAGICYUV_ENCODER 0
+#define CONFIG_MJPEG_ENCODER 0
+#define CONFIG_MPEG1VIDEO_ENCODER 0
+#define CONFIG_MPEG2VIDEO_ENCODER 0
+#define CONFIG_MPEG4_ENCODER 0
+#define CONFIG_MSMPEG4V2_ENCODER 0
+#define CONFIG_MSMPEG4V3_ENCODER 0
+#define CONFIG_MSVIDEO1_ENCODER 0
+#define CONFIG_PAM_ENCODER 0
+#define CONFIG_PBM_ENCODER 0
+#define CONFIG_PCX_ENCODER 0
+#define CONFIG_PGM_ENCODER 0
+#define CONFIG_PGMYUV_ENCODER 0
+#define CONFIG_PNG_ENCODER 0
+#define CONFIG_PPM_ENCODER 0
+#define CONFIG_PRORES_ENCODER 0
+#define CONFIG_PRORES_AW_ENCODER 0
+#define CONFIG_PRORES_KS_ENCODER 0
+#define CONFIG_QTRLE_ENCODER 0
+#define CONFIG_R10K_ENCODER 0
+#define CONFIG_R210_ENCODER 0
+#define CONFIG_RAWVIDEO_ENCODER 0
+#define CONFIG_ROQ_ENCODER 0
+#define CONFIG_RV10_ENCODER 0
+#define CONFIG_RV20_ENCODER 0
+#define CONFIG_S302M_ENCODER 0
+#define CONFIG_SGI_ENCODER 0
+#define CONFIG_SNOW_ENCODER 0
+#define CONFIG_SUNRAST_ENCODER 0
+#define CONFIG_SVQ1_ENCODER 0
+#define CONFIG_TARGA_ENCODER 0
+#define CONFIG_TIFF_ENCODER 0
+#define CONFIG_UTVIDEO_ENCODER 0
+#define CONFIG_V210_ENCODER 0
+#define CONFIG_V308_ENCODER 0
+#define CONFIG_V408_ENCODER 0
+#define CONFIG_V410_ENCODER 0
+#define CONFIG_VC2_ENCODER 0
+#define CONFIG_WRAPPED_AVFRAME_ENCODER 0
+#define CONFIG_WMV1_ENCODER 0
+#define CONFIG_WMV2_ENCODER 0
+#define CONFIG_XBM_ENCODER 0
+#define CONFIG_XFACE_ENCODER 0
+#define CONFIG_XWD_ENCODER 0
+#define CONFIG_Y41P_ENCODER 0
+#define CONFIG_YUV4_ENCODER 0
+#define CONFIG_ZLIB_ENCODER 0
+#define CONFIG_ZMBV_ENCODER 0
+#define CONFIG_AAC_ENCODER 0
+#define CONFIG_AC3_ENCODER 0
+#define CONFIG_AC3_FIXED_ENCODER 0
+#define CONFIG_ALAC_ENCODER 0
+#define CONFIG_APTX_ENCODER 0
+#define CONFIG_APTX_HD_ENCODER 0
+#define CONFIG_DCA_ENCODER 0
+#define CONFIG_EAC3_ENCODER 0
+#define CONFIG_FLAC_ENCODER 0
+#define CONFIG_G723_1_ENCODER 0
+#define CONFIG_MLP_ENCODER 0
+#define CONFIG_MP2_ENCODER 0
+#define CONFIG_MP2FIXED_ENCODER 0
+#define CONFIG_NELLYMOSER_ENCODER 0
+#define CONFIG_OPUS_ENCODER 0
+#define CONFIG_RA_144_ENCODER 0
+#define CONFIG_SBC_ENCODER 0
+#define CONFIG_SONIC_ENCODER 0
+#define CONFIG_SONIC_LS_ENCODER 0
+#define CONFIG_TRUEHD_ENCODER 0
+#define CONFIG_TTA_ENCODER 0
+#define CONFIG_VORBIS_ENCODER 0
+#define CONFIG_WAVPACK_ENCODER 0
+#define CONFIG_WMAV1_ENCODER 0
+#define CONFIG_WMAV2_ENCODER 0
+#define CONFIG_PCM_ALAW_ENCODER 0
+#define CONFIG_PCM_DVD_ENCODER 0
+#define CONFIG_PCM_F32BE_ENCODER 0
+#define CONFIG_PCM_F32LE_ENCODER 0
+#define CONFIG_PCM_F64BE_ENCODER 0
+#define CONFIG_PCM_F64LE_ENCODER 0
+#define CONFIG_PCM_MULAW_ENCODER 0
+#define CONFIG_PCM_S8_ENCODER 0
+#define CONFIG_PCM_S8_PLANAR_ENCODER 0
+#define CONFIG_PCM_S16BE_ENCODER 0
+#define CONFIG_PCM_S16BE_PLANAR_ENCODER 0
+#define CONFIG_PCM_S16LE_ENCODER 0
+#define CONFIG_PCM_S16LE_PLANAR_ENCODER 0
+#define CONFIG_PCM_S24BE_ENCODER 0
+#define CONFIG_PCM_S24DAUD_ENCODER 0
+#define CONFIG_PCM_S24LE_ENCODER 0
+#define CONFIG_PCM_S24LE_PLANAR_ENCODER 0
+#define CONFIG_PCM_S32BE_ENCODER 0
+#define CONFIG_PCM_S32LE_ENCODER 0
+#define CONFIG_PCM_S32LE_PLANAR_ENCODER 0
+#define CONFIG_PCM_S64BE_ENCODER 0
+#define CONFIG_PCM_S64LE_ENCODER 0
+#define CONFIG_PCM_U8_ENCODER 0
+#define CONFIG_PCM_U16BE_ENCODER 0
+#define CONFIG_PCM_U16LE_ENCODER 0
+#define CONFIG_PCM_U24BE_ENCODER 0
+#define CONFIG_PCM_U24LE_ENCODER 0
+#define CONFIG_PCM_U32BE_ENCODER 0
+#define CONFIG_PCM_U32LE_ENCODER 0
+#define CONFIG_PCM_VIDC_ENCODER 0
+#define CONFIG_ROQ_DPCM_ENCODER 0
+#define CONFIG_ADPCM_ADX_ENCODER 0
+#define CONFIG_ADPCM_G722_ENCODER 0
+#define CONFIG_ADPCM_G726_ENCODER 0
+#define CONFIG_ADPCM_G726LE_ENCODER 0
+#define CONFIG_ADPCM_IMA_QT_ENCODER 0
+#define CONFIG_ADPCM_IMA_WAV_ENCODER 0
+#define CONFIG_ADPCM_MS_ENCODER 0
+#define CONFIG_ADPCM_SWF_ENCODER 0
+#define CONFIG_ADPCM_YAMAHA_ENCODER 0
+#define CONFIG_SSA_ENCODER 0
+#define CONFIG_ASS_ENCODER 0
+#define CONFIG_DVBSUB_ENCODER 0
+#define CONFIG_DVDSUB_ENCODER 0
+#define CONFIG_MOVTEXT_ENCODER 0
+#define CONFIG_SRT_ENCODER 0
+#define CONFIG_SUBRIP_ENCODER 0
+#define CONFIG_TEXT_ENCODER 0
+#define CONFIG_WEBVTT_ENCODER 0
+#define CONFIG_XSUB_ENCODER 0
+#define CONFIG_AAC_AT_ENCODER 0
+#define CONFIG_ALAC_AT_ENCODER 0
+#define CONFIG_ILBC_AT_ENCODER 0
+#define CONFIG_PCM_ALAW_AT_ENCODER 0
+#define CONFIG_PCM_MULAW_AT_ENCODER 0
+#define CONFIG_LIBAOM_AV1_ENCODER 0
+#define CONFIG_LIBCODEC2_ENCODER 0
+#define CONFIG_LIBFDK_AAC_ENCODER 0
+#define CONFIG_LIBGSM_ENCODER 0
+#define CONFIG_LIBGSM_MS_ENCODER 0
+#define CONFIG_LIBILBC_ENCODER 0
+#define CONFIG_LIBMP3LAME_ENCODER 0
+#define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0
+#define CONFIG_LIBOPENJPEG_ENCODER 0
+#define CONFIG_LIBOPUS_ENCODER 0
+#define CONFIG_LIBRAV1E_ENCODER 0
+#define CONFIG_LIBSHINE_ENCODER 0
+#define CONFIG_LIBSPEEX_ENCODER 0
+#define CONFIG_LIBTHEORA_ENCODER 0
+#define CONFIG_LIBTWOLAME_ENCODER 0
+#define CONFIG_LIBVO_AMRWBENC_ENCODER 0
+#define CONFIG_LIBVORBIS_ENCODER 0
+#define CONFIG_LIBVPX_VP8_ENCODER 0
+#define CONFIG_LIBVPX_VP9_ENCODER 0
+#define CONFIG_LIBWAVPACK_ENCODER 0
+#define CONFIG_LIBWEBP_ANIM_ENCODER 0
+#define CONFIG_LIBWEBP_ENCODER 0
+#define CONFIG_LIBX262_ENCODER 0
+#define CONFIG_LIBX264_ENCODER 0
+#define CONFIG_LIBX264RGB_ENCODER 0
+#define CONFIG_LIBX265_ENCODER 0
+#define CONFIG_LIBXAVS_ENCODER 0
+#define CONFIG_LIBXAVS2_ENCODER 0
+#define CONFIG_LIBXVID_ENCODER 0
+#define CONFIG_H263_V4L2M2M_ENCODER 0
+#define CONFIG_LIBOPENH264_ENCODER 0
+#define CONFIG_H264_AMF_ENCODER 0
+#define CONFIG_H264_NVENC_ENCODER 0
+#define CONFIG_H264_OMX_ENCODER 0
+#define CONFIG_H264_QSV_ENCODER 0
+#define CONFIG_H264_V4L2M2M_ENCODER 0
+#define CONFIG_H264_VAAPI_ENCODER 0
+#define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0
+#define CONFIG_NVENC_ENCODER 0
+#define CONFIG_NVENC_H264_ENCODER 0
+#define CONFIG_NVENC_HEVC_ENCODER 0
+#define CONFIG_HEVC_AMF_ENCODER 0
+#define CONFIG_HEVC_NVENC_ENCODER 0
+#define CONFIG_HEVC_QSV_ENCODER 0
+#define CONFIG_HEVC_V4L2M2M_ENCODER 0
+#define CONFIG_HEVC_VAAPI_ENCODER 0
+#define CONFIG_HEVC_VIDEOTOOLBOX_ENCODER 0
+#define CONFIG_LIBKVAZAAR_ENCODER 0
+#define CONFIG_MJPEG_QSV_ENCODER 0
+#define CONFIG_MJPEG_VAAPI_ENCODER 0
+#define CONFIG_MPEG2_QSV_ENCODER 0
+#define CONFIG_MPEG2_VAAPI_ENCODER 0
+#define CONFIG_MPEG4_OMX_ENCODER 0
+#define CONFIG_MPEG4_V4L2M2M_ENCODER 0
+#define CONFIG_VP8_V4L2M2M_ENCODER 0
+#define CONFIG_VP8_VAAPI_ENCODER 0
+#define CONFIG_VP9_VAAPI_ENCODER 0
+#define CONFIG_VP9_QSV_ENCODER 0
+#define CONFIG_H263_VAAPI_HWACCEL 0
+#define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0
+#define CONFIG_H264_D3D11VA_HWACCEL 0
+#define CONFIG_H264_D3D11VA2_HWACCEL 0
+#define CONFIG_H264_DXVA2_HWACCEL 0
+#define CONFIG_H264_NVDEC_HWACCEL 0
+#define CONFIG_H264_VAAPI_HWACCEL 0
+#define CONFIG_H264_VDPAU_HWACCEL 0
+#define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0
+#define CONFIG_HEVC_D3D11VA_HWACCEL 0
+#define CONFIG_HEVC_D3D11VA2_HWACCEL 0
+#define CONFIG_HEVC_DXVA2_HWACCEL 0
+#define CONFIG_HEVC_NVDEC_HWACCEL 0
+#define CONFIG_HEVC_VAAPI_HWACCEL 0
+#define CONFIG_HEVC_VDPAU_HWACCEL 0
+#define CONFIG_HEVC_VIDEOTOOLBOX_HWACCEL 0
+#define CONFIG_MJPEG_NVDEC_HWACCEL 0
+#define CONFIG_MJPEG_VAAPI_HWACCEL 0
+#define CONFIG_MPEG1_NVDEC_HWACCEL 0
+#define CONFIG_MPEG1_VDPAU_HWACCEL 0
+#define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0
+#define CONFIG_MPEG1_XVMC_HWACCEL 0
+#define CONFIG_MPEG2_D3D11VA_HWACCEL 0
+#define CONFIG_MPEG2_D3D11VA2_HWACCEL 0
+#define CONFIG_MPEG2_NVDEC_HWACCEL 0
+#define CONFIG_MPEG2_DXVA2_HWACCEL 0
+#define CONFIG_MPEG2_VAAPI_HWACCEL 0
+#define CONFIG_MPEG2_VDPAU_HWACCEL 0
+#define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0
+#define CONFIG_MPEG2_XVMC_HWACCEL 0
+#define CONFIG_MPEG4_NVDEC_HWACCEL 0
+#define CONFIG_MPEG4_VAAPI_HWACCEL 0
+#define CONFIG_MPEG4_VDPAU_HWACCEL 0
+#define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0
+#define CONFIG_VC1_D3D11VA_HWACCEL 0
+#define CONFIG_VC1_D3D11VA2_HWACCEL 0
+#define CONFIG_VC1_DXVA2_HWACCEL 0
+#define CONFIG_VC1_NVDEC_HWACCEL 0
+#define CONFIG_VC1_VAAPI_HWACCEL 0
+#define CONFIG_VC1_VDPAU_HWACCEL 0
+#define CONFIG_VP8_NVDEC_HWACCEL 0
+#define CONFIG_VP8_VAAPI_HWACCEL 0
+#define CONFIG_VP9_D3D11VA_HWACCEL 0
+#define CONFIG_VP9_D3D11VA2_HWACCEL 0
+#define CONFIG_VP9_DXVA2_HWACCEL 0
+#define CONFIG_VP9_NVDEC_HWACCEL 0
+#define CONFIG_VP9_VAAPI_HWACCEL 0
+#define CONFIG_VP9_VDPAU_HWACCEL 0
+#define CONFIG_WMV3_D3D11VA_HWACCEL 0
+#define CONFIG_WMV3_D3D11VA2_HWACCEL 0
+#define CONFIG_WMV3_DXVA2_HWACCEL 0
+#define CONFIG_WMV3_NVDEC_HWACCEL 0
+#define CONFIG_WMV3_VAAPI_HWACCEL 0
+#define CONFIG_WMV3_VDPAU_HWACCEL 0
+#define CONFIG_AAC_PARSER 1
+#define CONFIG_AAC_LATM_PARSER 1
+#define CONFIG_AC3_PARSER 0
+#define CONFIG_ADX_PARSER 0
+#define CONFIG_AV1_PARSER 0
+#define CONFIG_AVS2_PARSER 0
+#define CONFIG_BMP_PARSER 0
+#define CONFIG_CAVSVIDEO_PARSER 0
+#define CONFIG_COOK_PARSER 0
+#define CONFIG_DCA_PARSER 0
+#define CONFIG_DIRAC_PARSER 0
+#define CONFIG_DNXHD_PARSER 0
+#define CONFIG_DPX_PARSER 0
+#define CONFIG_DVAUDIO_PARSER 0
+#define CONFIG_DVBSUB_PARSER 0
+#define CONFIG_DVDSUB_PARSER 0
+#define CONFIG_DVD_NAV_PARSER 0
+#define CONFIG_FLAC_PARSER 1
+#define CONFIG_G723_1_PARSER 0
+#define CONFIG_G729_PARSER 0
+#define CONFIG_GIF_PARSER 0
+#define CONFIG_GSM_PARSER 1
+#define CONFIG_H261_PARSER 0
+#define CONFIG_H263_PARSER 1
+#define CONFIG_H264_PARSER 1
+#define CONFIG_HEVC_PARSER 0
+#define CONFIG_MJPEG_PARSER 0
+#define CONFIG_MLP_PARSER 0
+#define CONFIG_MPEG4VIDEO_PARSER 1
+#define CONFIG_MPEGAUDIO_PARSER 1
+#define CONFIG_MPEGVIDEO_PARSER 0
+#define CONFIG_OPUS_PARSER 1
+#define CONFIG_PNG_PARSER 0
+#define CONFIG_PNM_PARSER 0
+#define CONFIG_RV30_PARSER 0
+#define CONFIG_RV40_PARSER 0
+#define CONFIG_SBC_PARSER 0
+#define CONFIG_SIPR_PARSER 0
+#define CONFIG_TAK_PARSER 0
+#define CONFIG_VC1_PARSER 0
+#define CONFIG_VORBIS_PARSER 1
+#define CONFIG_VP3_PARSER 1
+#define CONFIG_VP8_PARSER 1
+#define CONFIG_VP9_PARSER 0
+#define CONFIG_WEBP_PARSER 0
+#define CONFIG_XMA_PARSER 0
+#define CONFIG_ALSA_INDEV 0
+#define CONFIG_ANDROID_CAMERA_INDEV 0
+#define CONFIG_AVFOUNDATION_INDEV 0
+#define CONFIG_BKTR_INDEV 0
+#define CONFIG_DECKLINK_INDEV 0
+#define CONFIG_DSHOW_INDEV 0
+#define CONFIG_FBDEV_INDEV 0
+#define CONFIG_GDIGRAB_INDEV 0
+#define CONFIG_IEC61883_INDEV 0
+#define CONFIG_JACK_INDEV 0
+#define CONFIG_KMSGRAB_INDEV 0
+#define CONFIG_LAVFI_INDEV 0
+#define CONFIG_OPENAL_INDEV 0
+#define CONFIG_OSS_INDEV 0
+#define CONFIG_PULSE_INDEV 0
+#define CONFIG_SNDIO_INDEV 0
+#define CONFIG_V4L2_INDEV 0
+#define CONFIG_VFWCAP_INDEV 0
+#define CONFIG_XCBGRAB_INDEV 0
+#define CONFIG_LIBCDIO_INDEV 0
+#define CONFIG_LIBDC1394_INDEV 0
+#define CONFIG_ALSA_OUTDEV 0
+#define CONFIG_CACA_OUTDEV 0
+#define CONFIG_DECKLINK_OUTDEV 0
+#define CONFIG_FBDEV_OUTDEV 0
+#define CONFIG_OPENGL_OUTDEV 0
+#define CONFIG_OSS_OUTDEV 0
+#define CONFIG_PULSE_OUTDEV 0
+#define CONFIG_SDL2_OUTDEV 0
+#define CONFIG_SNDIO_OUTDEV 0
+#define CONFIG_V4L2_OUTDEV 0
+#define CONFIG_XV_OUTDEV 0
+#define CONFIG_ABENCH_FILTER 0
+#define CONFIG_ACOMPRESSOR_FILTER 0
+#define CONFIG_ACONTRAST_FILTER 0
+#define CONFIG_ACOPY_FILTER 0
+#define CONFIG_ACUE_FILTER 0
+#define CONFIG_ACROSSFADE_FILTER 0
+#define CONFIG_ACROSSOVER_FILTER 0
+#define CONFIG_ACRUSHER_FILTER 0
+#define CONFIG_ADECLICK_FILTER 0
+#define CONFIG_ADECLIP_FILTER 0
+#define CONFIG_ADELAY_FILTER 0
+#define CONFIG_ADERIVATIVE_FILTER 0
+#define CONFIG_AECHO_FILTER 0
+#define CONFIG_AEMPHASIS_FILTER 0
+#define CONFIG_AEVAL_FILTER 0
+#define CONFIG_AFADE_FILTER 0
+#define CONFIG_AFFTDN_FILTER 0
+#define CONFIG_AFFTFILT_FILTER 0
+#define CONFIG_AFIR_FILTER 0
+#define CONFIG_AFORMAT_FILTER 0
+#define CONFIG_AGATE_FILTER 0
+#define CONFIG_AIIR_FILTER 0
+#define CONFIG_AINTEGRAL_FILTER 0
+#define CONFIG_AINTERLEAVE_FILTER 0
+#define CONFIG_ALIMITER_FILTER 0
+#define CONFIG_ALLPASS_FILTER 0
+#define CONFIG_ALOOP_FILTER 0
+#define CONFIG_AMERGE_FILTER 0
+#define CONFIG_AMETADATA_FILTER 0
+#define CONFIG_AMIX_FILTER 0
+#define CONFIG_AMULTIPLY_FILTER 0
+#define CONFIG_ANEQUALIZER_FILTER 0
+#define CONFIG_ANLMDN_FILTER 0
+#define CONFIG_ANLMS_FILTER 0
+#define CONFIG_ANULL_FILTER 0
+#define CONFIG_APAD_FILTER 0
+#define CONFIG_APERMS_FILTER 0
+#define CONFIG_APHASER_FILTER 0
+#define CONFIG_APULSATOR_FILTER 0
+#define CONFIG_AREALTIME_FILTER 0
+#define CONFIG_ARESAMPLE_FILTER 0
+#define CONFIG_AREVERSE_FILTER 0
+#define CONFIG_ARNNDN_FILTER 0
+#define CONFIG_ASELECT_FILTER 0
+#define CONFIG_ASENDCMD_FILTER 0
+#define CONFIG_ASETNSAMPLES_FILTER 0
+#define CONFIG_ASETPTS_FILTER 0
+#define CONFIG_ASETRATE_FILTER 0
+#define CONFIG_ASETTB_FILTER 0
+#define CONFIG_ASHOWINFO_FILTER 0
+#define CONFIG_ASIDEDATA_FILTER 0
+#define CONFIG_ASOFTCLIP_FILTER 0
+#define CONFIG_ASPLIT_FILTER 0
+#define CONFIG_ASR_FILTER 0
+#define CONFIG_ASTATS_FILTER 0
+#define CONFIG_ASTREAMSELECT_FILTER 0
+#define CONFIG_ATEMPO_FILTER 0
+#define CONFIG_ATRIM_FILTER 0
+#define CONFIG_AXCORRELATE_FILTER 0
+#define CONFIG_AZMQ_FILTER 0
+#define CONFIG_BANDPASS_FILTER 0
+#define CONFIG_BANDREJECT_FILTER 0
+#define CONFIG_BASS_FILTER 0
+#define CONFIG_BIQUAD_FILTER 0
+#define CONFIG_BS2B_FILTER 0
+#define CONFIG_CHROMABER_VULKAN_FILTER 0
+#define CONFIG_CHANNELMAP_FILTER 0
+#define CONFIG_CHANNELSPLIT_FILTER 0
+#define CONFIG_CHORUS_FILTER 0
+#define CONFIG_COMPAND_FILTER 0
+#define CONFIG_COMPENSATIONDELAY_FILTER 0
+#define CONFIG_CROSSFEED_FILTER 0
+#define CONFIG_CRYSTALIZER_FILTER 0
+#define CONFIG_DCSHIFT_FILTER 0
+#define CONFIG_DEESSER_FILTER 0
+#define CONFIG_DRMETER_FILTER 0
+#define CONFIG_DYNAUDNORM_FILTER 0
+#define CONFIG_EARWAX_FILTER 0
+#define CONFIG_EBUR128_FILTER 0
+#define CONFIG_EQUALIZER_FILTER 0
+#define CONFIG_EXTRASTEREO_FILTER 0
+#define CONFIG_FIREQUALIZER_FILTER 0
+#define CONFIG_FLANGER_FILTER 0
+#define CONFIG_HAAS_FILTER 0
+#define CONFIG_HDCD_FILTER 0
+#define CONFIG_HEADPHONE_FILTER 0
+#define CONFIG_HIGHPASS_FILTER 0
+#define CONFIG_HIGHSHELF_FILTER 0
+#define CONFIG_JOIN_FILTER 0
+#define CONFIG_LADSPA_FILTER 0
+#define CONFIG_LOUDNORM_FILTER 0
+#define CONFIG_LOWPASS_FILTER 0
+#define CONFIG_LOWSHELF_FILTER 0
+#define CONFIG_LV2_FILTER 0
+#define CONFIG_MCOMPAND_FILTER 0
+#define CONFIG_PAN_FILTER 0
+#define CONFIG_REPLAYGAIN_FILTER 0
+#define CONFIG_RESAMPLE_FILTER 0
+#define CONFIG_RUBBERBAND_FILTER 0
+#define CONFIG_SIDECHAINCOMPRESS_FILTER 0
+#define CONFIG_SIDECHAINGATE_FILTER 0
+#define CONFIG_SILENCEDETECT_FILTER 0
+#define CONFIG_SILENCEREMOVE_FILTER 0
+#define CONFIG_SOFALIZER_FILTER 0
+#define CONFIG_STEREOTOOLS_FILTER 0
+#define CONFIG_STEREOWIDEN_FILTER 0
+#define CONFIG_SUPEREQUALIZER_FILTER 0
+#define CONFIG_SURROUND_FILTER 0
+#define CONFIG_TREBLE_FILTER 0
+#define CONFIG_TREMOLO_FILTER 0
+#define CONFIG_VIBRATO_FILTER 0
+#define CONFIG_VOLUME_FILTER 0
+#define CONFIG_VOLUMEDETECT_FILTER 0
+#define CONFIG_AEVALSRC_FILTER 0
+#define CONFIG_AFIRSRC_FILTER 0
+#define CONFIG_ANOISESRC_FILTER 0
+#define CONFIG_ANULLSRC_FILTER 0
+#define CONFIG_FLITE_FILTER 0
+#define CONFIG_HILBERT_FILTER 0
+#define CONFIG_SINC_FILTER 0
+#define CONFIG_SINE_FILTER 0
+#define CONFIG_ANULLSINK_FILTER 0
+#define CONFIG_ADDROI_FILTER 0
+#define CONFIG_ALPHAEXTRACT_FILTER 0
+#define CONFIG_ALPHAMERGE_FILTER 0
+#define CONFIG_AMPLIFY_FILTER 0
+#define CONFIG_ASS_FILTER 0
+#define CONFIG_ATADENOISE_FILTER 0
+#define CONFIG_AVGBLUR_FILTER 0
+#define CONFIG_AVGBLUR_OPENCL_FILTER 0
+#define CONFIG_AVGBLUR_VULKAN_FILTER 0
+#define CONFIG_BBOX_FILTER 0
+#define CONFIG_BENCH_FILTER 0
+#define CONFIG_BILATERAL_FILTER 0
+#define CONFIG_BITPLANENOISE_FILTER 0
+#define CONFIG_BLACKDETECT_FILTER 0
+#define CONFIG_BLACKFRAME_FILTER 0
+#define CONFIG_BLEND_FILTER 0
+#define CONFIG_BM3D_FILTER 0
+#define CONFIG_BOXBLUR_FILTER 0
+#define CONFIG_BOXBLUR_OPENCL_FILTER 0
+#define CONFIG_BWDIF_FILTER 0
+#define CONFIG_CAS_FILTER 0
+#define CONFIG_CHROMAHOLD_FILTER 0
+#define CONFIG_CHROMAKEY_FILTER 0
+#define CONFIG_CHROMASHIFT_FILTER 0
+#define CONFIG_CIESCOPE_FILTER 0
+#define CONFIG_CODECVIEW_FILTER 0
+#define CONFIG_COLORBALANCE_FILTER 0
+#define CONFIG_COLORCHANNELMIXER_FILTER 0
+#define CONFIG_COLORKEY_FILTER 0
+#define CONFIG_COLORKEY_OPENCL_FILTER 0
+#define CONFIG_COLORHOLD_FILTER 0
+#define CONFIG_COLORLEVELS_FILTER 0
+#define CONFIG_COLORMATRIX_FILTER 0
+#define CONFIG_COLORSPACE_FILTER 0
+#define CONFIG_CONVOLUTION_FILTER 0
+#define CONFIG_CONVOLUTION_OPENCL_FILTER 0
+#define CONFIG_CONVOLVE_FILTER 0
+#define CONFIG_COPY_FILTER 0
+#define CONFIG_COREIMAGE_FILTER 0
+#define CONFIG_COVER_RECT_FILTER 0
+#define CONFIG_CROP_FILTER 0
+#define CONFIG_CROPDETECT_FILTER 0
+#define CONFIG_CUE_FILTER 0
+#define CONFIG_CURVES_FILTER 0
+#define CONFIG_DATASCOPE_FILTER 0
+#define CONFIG_DCTDNOIZ_FILTER 0
+#define CONFIG_DEBAND_FILTER 0
+#define CONFIG_DEBLOCK_FILTER 0
+#define CONFIG_DECIMATE_FILTER 0
+#define CONFIG_DECONVOLVE_FILTER 0
+#define CONFIG_DEDOT_FILTER 0
+#define CONFIG_DEFLATE_FILTER 0
+#define CONFIG_DEFLICKER_FILTER 0
+#define CONFIG_DEINTERLACE_QSV_FILTER 0
+#define CONFIG_DEINTERLACE_VAAPI_FILTER 0
+#define CONFIG_DEJUDDER_FILTER 0
+#define CONFIG_DELOGO_FILTER 0
+#define CONFIG_DENOISE_VAAPI_FILTER 0
+#define CONFIG_DERAIN_FILTER 0
+#define CONFIG_DESHAKE_FILTER 0
+#define CONFIG_DESHAKE_OPENCL_FILTER 0
+#define CONFIG_DESPILL_FILTER 0
+#define CONFIG_DETELECINE_FILTER 0
+#define CONFIG_DILATION_FILTER 0
+#define CONFIG_DILATION_OPENCL_FILTER 0
+#define CONFIG_DISPLACE_FILTER 0
+#define CONFIG_DNN_PROCESSING_FILTER 0
+#define CONFIG_DOUBLEWEAVE_FILTER 0
+#define CONFIG_DRAWBOX_FILTER 0
+#define CONFIG_DRAWGRAPH_FILTER 0
+#define CONFIG_DRAWGRID_FILTER 0
+#define CONFIG_DRAWTEXT_FILTER 0
+#define CONFIG_EDGEDETECT_FILTER 0
+#define CONFIG_ELBG_FILTER 0
+#define CONFIG_ENTROPY_FILTER 0
+#define CONFIG_EQ_FILTER 0
+#define CONFIG_EROSION_FILTER 0
+#define CONFIG_EROSION_OPENCL_FILTER 0
+#define CONFIG_EXTRACTPLANES_FILTER 0
+#define CONFIG_FADE_FILTER 0
+#define CONFIG_FFTDNOIZ_FILTER 0
+#define CONFIG_FFTFILT_FILTER 0
+#define CONFIG_FIELD_FILTER 0
+#define CONFIG_FIELDHINT_FILTER 0
+#define CONFIG_FIELDMATCH_FILTER 0
+#define CONFIG_FIELDORDER_FILTER 0
+#define CONFIG_FILLBORDERS_FILTER 0
+#define CONFIG_FIND_RECT_FILTER 0
+#define CONFIG_FLOODFILL_FILTER 0
+#define CONFIG_FORMAT_FILTER 0
+#define CONFIG_FPS_FILTER 0
+#define CONFIG_FRAMEPACK_FILTER 0
+#define CONFIG_FRAMERATE_FILTER 0
+#define CONFIG_FRAMESTEP_FILTER 0
+#define CONFIG_FREEZEDETECT_FILTER 0
+#define CONFIG_FREEZEFRAMES_FILTER 0
+#define CONFIG_FREI0R_FILTER 0
+#define CONFIG_FSPP_FILTER 0
+#define CONFIG_GBLUR_FILTER 0
+#define CONFIG_GEQ_FILTER 0
+#define CONFIG_GRADFUN_FILTER 0
+#define CONFIG_GRAPHMONITOR_FILTER 0
+#define CONFIG_GREYEDGE_FILTER 0
+#define CONFIG_HALDCLUT_FILTER 0
+#define CONFIG_HFLIP_FILTER 0
+#define CONFIG_HISTEQ_FILTER 0
+#define CONFIG_HISTOGRAM_FILTER 0
+#define CONFIG_HQDN3D_FILTER 0
+#define CONFIG_HQX_FILTER 0
+#define CONFIG_HSTACK_FILTER 0
+#define CONFIG_HUE_FILTER 0
+#define CONFIG_HWDOWNLOAD_FILTER 0
+#define CONFIG_HWMAP_FILTER 0
+#define CONFIG_HWUPLOAD_FILTER 0
+#define CONFIG_HWUPLOAD_CUDA_FILTER 0
+#define CONFIG_HYSTERESIS_FILTER 0
+#define CONFIG_IDET_FILTER 0
+#define CONFIG_IL_FILTER 0
+#define CONFIG_INFLATE_FILTER 0
+#define CONFIG_INTERLACE_FILTER 0
+#define CONFIG_INTERLEAVE_FILTER 0
+#define CONFIG_KERNDEINT_FILTER 0
+#define CONFIG_LAGFUN_FILTER 0
+#define CONFIG_LENSCORRECTION_FILTER 0
+#define CONFIG_LENSFUN_FILTER 0
+#define CONFIG_LIBVMAF_FILTER 0
+#define CONFIG_LIMITER_FILTER 0
+#define CONFIG_LOOP_FILTER 0
+#define CONFIG_LUMAKEY_FILTER 0
+#define CONFIG_LUT_FILTER 0
+#define CONFIG_LUT1D_FILTER 0
+#define CONFIG_LUT2_FILTER 0
+#define CONFIG_LUT3D_FILTER 0
+#define CONFIG_LUTRGB_FILTER 0
+#define CONFIG_LUTYUV_FILTER 0
+#define CONFIG_MASKEDCLAMP_FILTER 0
+#define CONFIG_MASKEDMAX_FILTER 0
+#define CONFIG_MASKEDMERGE_FILTER 0
+#define CONFIG_MASKEDMIN_FILTER 0
+#define CONFIG_MASKEDTHRESHOLD_FILTER 0
+#define CONFIG_MASKFUN_FILTER 0
+#define CONFIG_MCDEINT_FILTER 0
+#define CONFIG_MEDIAN_FILTER 0
+#define CONFIG_MERGEPLANES_FILTER 0
+#define CONFIG_MESTIMATE_FILTER 0
+#define CONFIG_METADATA_FILTER 0
+#define CONFIG_MIDEQUALIZER_FILTER 0
+#define CONFIG_MINTERPOLATE_FILTER 0
+#define CONFIG_MIX_FILTER 0
+#define CONFIG_MPDECIMATE_FILTER 0
+#define CONFIG_NEGATE_FILTER 0
+#define CONFIG_NLMEANS_FILTER 0
+#define CONFIG_NLMEANS_OPENCL_FILTER 0
+#define CONFIG_NNEDI_FILTER 0
+#define CONFIG_NOFORMAT_FILTER 0
+#define CONFIG_NOISE_FILTER 0
+#define CONFIG_NORMALIZE_FILTER 0
+#define CONFIG_NULL_FILTER 0
+#define CONFIG_OCR_FILTER 0
+#define CONFIG_OCV_FILTER 0
+#define CONFIG_OSCILLOSCOPE_FILTER 0
+#define CONFIG_OVERLAY_FILTER 0
+#define CONFIG_OVERLAY_OPENCL_FILTER 0
+#define CONFIG_OVERLAY_QSV_FILTER 0
+#define CONFIG_OVERLAY_VULKAN_FILTER 0
+#define CONFIG_OVERLAY_CUDA_FILTER 0
+#define CONFIG_OWDENOISE_FILTER 0
+#define CONFIG_PAD_FILTER 0
+#define CONFIG_PAD_OPENCL_FILTER 0
+#define CONFIG_PALETTEGEN_FILTER 0
+#define CONFIG_PALETTEUSE_FILTER 0
+#define CONFIG_PERMS_FILTER 0
+#define CONFIG_PERSPECTIVE_FILTER 0
+#define CONFIG_PHASE_FILTER 0
+#define CONFIG_PHOTOSENSITIVITY_FILTER 0
+#define CONFIG_PIXDESCTEST_FILTER 0
+#define CONFIG_PIXSCOPE_FILTER 0
+#define CONFIG_PP_FILTER 0
+#define CONFIG_PP7_FILTER 0
+#define CONFIG_PREMULTIPLY_FILTER 0
+#define CONFIG_PREWITT_FILTER 0
+#define CONFIG_PREWITT_OPENCL_FILTER 0
+#define CONFIG_PROCAMP_VAAPI_FILTER 0
+#define CONFIG_PROGRAM_OPENCL_FILTER 0
+#define CONFIG_PSEUDOCOLOR_FILTER 0
+#define CONFIG_PSNR_FILTER 0
+#define CONFIG_PULLUP_FILTER 0
+#define CONFIG_QP_FILTER 0
+#define CONFIG_RANDOM_FILTER 0
+#define CONFIG_READEIA608_FILTER 0
+#define CONFIG_READVITC_FILTER 0
+#define CONFIG_REALTIME_FILTER 0
+#define CONFIG_REMAP_FILTER 0
+#define CONFIG_REMOVEGRAIN_FILTER 0
+#define CONFIG_REMOVELOGO_FILTER 0
+#define CONFIG_REPEATFIELDS_FILTER 0
+#define CONFIG_REVERSE_FILTER 0
+#define CONFIG_RGBASHIFT_FILTER 0
+#define CONFIG_ROBERTS_FILTER 0
+#define CONFIG_ROBERTS_OPENCL_FILTER 0
+#define CONFIG_ROTATE_FILTER 0
+#define CONFIG_SAB_FILTER 0
+#define CONFIG_SCALE_FILTER 0
+#define CONFIG_SCALE_CUDA_FILTER 0
+#define CONFIG_SCALE_NPP_FILTER 0
+#define CONFIG_SCALE_QSV_FILTER 0
+#define CONFIG_SCALE_VAAPI_FILTER 0
+#define CONFIG_SCALE_VULKAN_FILTER 0
+#define CONFIG_SCALE2REF_FILTER 0
+#define CONFIG_SCROLL_FILTER 0
+#define CONFIG_SELECT_FILTER 0
+#define CONFIG_SELECTIVECOLOR_FILTER 0
+#define CONFIG_SENDCMD_FILTER 0
+#define CONFIG_SEPARATEFIELDS_FILTER 0
+#define CONFIG_SETDAR_FILTER 0
+#define CONFIG_SETFIELD_FILTER 0
+#define CONFIG_SETPARAMS_FILTER 0
+#define CONFIG_SETPTS_FILTER 0
+#define CONFIG_SETRANGE_FILTER 0
+#define CONFIG_SETSAR_FILTER 0
+#define CONFIG_SETTB_FILTER 0
+#define CONFIG_SHARPNESS_VAAPI_FILTER 0
+#define CONFIG_SHOWINFO_FILTER 0
+#define CONFIG_SHOWPALETTE_FILTER 0
+#define CONFIG_SHUFFLEFRAMES_FILTER 0
+#define CONFIG_SHUFFLEPLANES_FILTER 0
+#define CONFIG_SIDEDATA_FILTER 0
+#define CONFIG_SIGNALSTATS_FILTER 0
+#define CONFIG_SIGNATURE_FILTER 0
+#define CONFIG_SMARTBLUR_FILTER 0
+#define CONFIG_SOBEL_FILTER 0
+#define CONFIG_SOBEL_OPENCL_FILTER 0
+#define CONFIG_SPLIT_FILTER 0
+#define CONFIG_SPP_FILTER 0
+#define CONFIG_SR_FILTER 0
+#define CONFIG_SSIM_FILTER 0
+#define CONFIG_STEREO3D_FILTER 0
+#define CONFIG_STREAMSELECT_FILTER 0
+#define CONFIG_SUBTITLES_FILTER 0
+#define CONFIG_SUPER2XSAI_FILTER 0
+#define CONFIG_SWAPRECT_FILTER 0
+#define CONFIG_SWAPUV_FILTER 0
+#define CONFIG_TBLEND_FILTER 0
+#define CONFIG_TELECINE_FILTER 0
+#define CONFIG_THISTOGRAM_FILTER 0
+#define CONFIG_THRESHOLD_FILTER 0
+#define CONFIG_THUMBNAIL_FILTER 0
+#define CONFIG_THUMBNAIL_CUDA_FILTER 0
+#define CONFIG_TILE_FILTER 0
+#define CONFIG_TINTERLACE_FILTER 0
+#define CONFIG_TLUT2_FILTER 0
+#define CONFIG_TMEDIAN_FILTER 0
+#define CONFIG_TMIX_FILTER 0
+#define CONFIG_TONEMAP_FILTER 0
+#define CONFIG_TONEMAP_OPENCL_FILTER 0
+#define CONFIG_TONEMAP_VAAPI_FILTER 0
+#define CONFIG_TPAD_FILTER 0
+#define CONFIG_TRANSPOSE_FILTER 0
+#define CONFIG_TRANSPOSE_NPP_FILTER 0
+#define CONFIG_TRANSPOSE_OPENCL_FILTER 0
+#define CONFIG_TRANSPOSE_VAAPI_FILTER 0
+#define CONFIG_TRIM_FILTER 0
+#define CONFIG_UNPREMULTIPLY_FILTER 0
+#define CONFIG_UNSHARP_FILTER 0
+#define CONFIG_UNSHARP_OPENCL_FILTER 0
+#define CONFIG_USPP_FILTER 0
+#define CONFIG_V360_FILTER 0
+#define CONFIG_VAGUEDENOISER_FILTER 0
+#define CONFIG_VECTORSCOPE_FILTER 0
+#define CONFIG_VFLIP_FILTER 0
+#define CONFIG_VFRDET_FILTER 0
+#define CONFIG_VIBRANCE_FILTER 0
+#define CONFIG_VIDSTABDETECT_FILTER 0
+#define CONFIG_VIDSTABTRANSFORM_FILTER 0
+#define CONFIG_VIGNETTE_FILTER 0
+#define CONFIG_VMAFMOTION_FILTER 0
+#define CONFIG_VPP_QSV_FILTER 0
+#define CONFIG_VSTACK_FILTER 0
+#define CONFIG_W3FDIF_FILTER 0
+#define CONFIG_WAVEFORM_FILTER 0
+#define CONFIG_WEAVE_FILTER 0
+#define CONFIG_XBR_FILTER 0
+#define CONFIG_XFADE_FILTER 0
+#define CONFIG_XFADE_OPENCL_FILTER 0
+#define CONFIG_XMEDIAN_FILTER 0
+#define CONFIG_XSTACK_FILTER 0
+#define CONFIG_YADIF_FILTER 0
+#define CONFIG_YADIF_CUDA_FILTER 0
+#define CONFIG_YAEPBLUR_FILTER 0
+#define CONFIG_ZMQ_FILTER 0
+#define CONFIG_ZOOMPAN_FILTER 0
+#define CONFIG_ZSCALE_FILTER 0
+#define CONFIG_ALLRGB_FILTER 0
+#define CONFIG_ALLYUV_FILTER 0
+#define CONFIG_CELLAUTO_FILTER 0
+#define CONFIG_COLOR_FILTER 0
+#define CONFIG_COREIMAGESRC_FILTER 0
+#define CONFIG_FREI0R_SRC_FILTER 0
+#define CONFIG_HALDCLUTSRC_FILTER 0
+#define CONFIG_LIFE_FILTER 0
+#define CONFIG_MANDELBROT_FILTER 0
+#define CONFIG_MPTESTSRC_FILTER 0
+#define CONFIG_NULLSRC_FILTER 0
+#define CONFIG_OPENCLSRC_FILTER 0
+#define CONFIG_PAL75BARS_FILTER 0
+#define CONFIG_PAL100BARS_FILTER 0
+#define CONFIG_RGBTESTSRC_FILTER 0
+#define CONFIG_SIERPINSKI_FILTER 0
+#define CONFIG_SMPTEBARS_FILTER 0
+#define CONFIG_SMPTEHDBARS_FILTER 0
+#define CONFIG_TESTSRC_FILTER 0
+#define CONFIG_TESTSRC2_FILTER 0
+#define CONFIG_YUVTESTSRC_FILTER 0
+#define CONFIG_NULLSINK_FILTER 0
+#define CONFIG_ABITSCOPE_FILTER 0
+#define CONFIG_ADRAWGRAPH_FILTER 0
+#define CONFIG_AGRAPHMONITOR_FILTER 0
+#define CONFIG_AHISTOGRAM_FILTER 0
+#define CONFIG_APHASEMETER_FILTER 0
+#define CONFIG_AVECTORSCOPE_FILTER 0
+#define CONFIG_CONCAT_FILTER 0
+#define CONFIG_SHOWCQT_FILTER 0
+#define CONFIG_SHOWFREQS_FILTER 0
+#define CONFIG_SHOWSPATIAL_FILTER 0
+#define CONFIG_SHOWSPECTRUM_FILTER 0
+#define CONFIG_SHOWSPECTRUMPIC_FILTER 0
+#define CONFIG_SHOWVOLUME_FILTER 0
+#define CONFIG_SHOWWAVES_FILTER 0
+#define CONFIG_SHOWWAVESPIC_FILTER 0
+#define CONFIG_SPECTRUMSYNTH_FILTER 0
+#define CONFIG_AMOVIE_FILTER 0
+#define CONFIG_MOVIE_FILTER 0
+#define CONFIG_AFIFO_FILTER 0
+#define CONFIG_FIFO_FILTER 0
+#define CONFIG_AA_DEMUXER 0
+#define CONFIG_AAC_DEMUXER 1
+#define CONFIG_AC3_DEMUXER 0
+#define CONFIG_ACM_DEMUXER 0
+#define CONFIG_ACT_DEMUXER 0
+#define CONFIG_ADF_DEMUXER 0
+#define CONFIG_ADP_DEMUXER 0
+#define CONFIG_ADS_DEMUXER 0
+#define CONFIG_ADX_DEMUXER 0
+#define CONFIG_AEA_DEMUXER 0
+#define CONFIG_AFC_DEMUXER 0
+#define CONFIG_AIFF_DEMUXER 0
+#define CONFIG_AIX_DEMUXER 0
+#define CONFIG_ALP_DEMUXER 0
+#define CONFIG_AMR_DEMUXER 1
+#define CONFIG_AMRNB_DEMUXER 0
+#define CONFIG_AMRWB_DEMUXER 0
+#define CONFIG_ANM_DEMUXER 0
+#define CONFIG_APC_DEMUXER 0
+#define CONFIG_APE_DEMUXER 0
+#define CONFIG_APM_DEMUXER 0
+#define CONFIG_APNG_DEMUXER 0
+#define CONFIG_APTX_DEMUXER 0
+#define CONFIG_APTX_HD_DEMUXER 0
+#define CONFIG_AQTITLE_DEMUXER 0
+#define CONFIG_ARGO_ASF_DEMUXER 0
+#define CONFIG_ASF_DEMUXER 0
+#define CONFIG_ASF_O_DEMUXER 0
+#define CONFIG_ASS_DEMUXER 0
+#define CONFIG_AST_DEMUXER 0
+#define CONFIG_AU_DEMUXER 0
+#define CONFIG_AV1_DEMUXER 0
+#define CONFIG_AVI_DEMUXER 1
+#define CONFIG_AVISYNTH_DEMUXER 0
+#define CONFIG_AVR_DEMUXER 0
+#define CONFIG_AVS_DEMUXER 0
+#define CONFIG_AVS2_DEMUXER 0
+#define CONFIG_BETHSOFTVID_DEMUXER 0
+#define CONFIG_BFI_DEMUXER 0
+#define CONFIG_BINTEXT_DEMUXER 0
+#define CONFIG_BINK_DEMUXER 0
+#define CONFIG_BIT_DEMUXER 0
+#define CONFIG_BMV_DEMUXER 0
+#define CONFIG_BFSTM_DEMUXER 0
+#define CONFIG_BRSTM_DEMUXER 0
+#define CONFIG_BOA_DEMUXER 0
+#define CONFIG_C93_DEMUXER 0
+#define CONFIG_CAF_DEMUXER 0
+#define CONFIG_CAVSVIDEO_DEMUXER 0
+#define CONFIG_CDG_DEMUXER 0
+#define CONFIG_CDXL_DEMUXER 0
+#define CONFIG_CINE_DEMUXER 0
+#define CONFIG_CODEC2_DEMUXER 0
+#define CONFIG_CODEC2RAW_DEMUXER 0
+#define CONFIG_CONCAT_DEMUXER 0
+#define CONFIG_DASH_DEMUXER 0
+#define CONFIG_DATA_DEMUXER 0
+#define CONFIG_DAUD_DEMUXER 0
+#define CONFIG_DCSTR_DEMUXER 0
+#define CONFIG_DERF_DEMUXER 0
+#define CONFIG_DFA_DEMUXER 0
+#define CONFIG_DHAV_DEMUXER 0
+#define CONFIG_DIRAC_DEMUXER 0
+#define CONFIG_DNXHD_DEMUXER 0
+#define CONFIG_DSF_DEMUXER 0
+#define CONFIG_DSICIN_DEMUXER 0
+#define CONFIG_DSS_DEMUXER 0
+#define CONFIG_DTS_DEMUXER 0
+#define CONFIG_DTSHD_DEMUXER 0
+#define CONFIG_DV_DEMUXER 0
+#define CONFIG_DVBSUB_DEMUXER 0
+#define CONFIG_DVBTXT_DEMUXER 0
+#define CONFIG_DXA_DEMUXER 0
+#define CONFIG_EA_DEMUXER 0
+#define CONFIG_EA_CDATA_DEMUXER 0
+#define CONFIG_EAC3_DEMUXER 0
+#define CONFIG_EPAF_DEMUXER 0
+#define CONFIG_FFMETADATA_DEMUXER 0
+#define CONFIG_FILMSTRIP_DEMUXER 0
+#define CONFIG_FITS_DEMUXER 0
+#define CONFIG_FLAC_DEMUXER 1
+#define CONFIG_FLIC_DEMUXER 0
+#define CONFIG_FLV_DEMUXER 0
+#define CONFIG_LIVE_FLV_DEMUXER 0
+#define CONFIG_FOURXM_DEMUXER 0
+#define CONFIG_FRM_DEMUXER 0
+#define CONFIG_FSB_DEMUXER 0
+#define CONFIG_FWSE_DEMUXER 0
+#define CONFIG_G722_DEMUXER 0
+#define CONFIG_G723_1_DEMUXER 0
+#define CONFIG_G726_DEMUXER 0
+#define CONFIG_G726LE_DEMUXER 0
+#define CONFIG_G729_DEMUXER 0
+#define CONFIG_GDV_DEMUXER 0
+#define CONFIG_GENH_DEMUXER 0
+#define CONFIG_GIF_DEMUXER 0
+#define CONFIG_GSM_DEMUXER 1
+#define CONFIG_GXF_DEMUXER 0
+#define CONFIG_H261_DEMUXER 0
+#define CONFIG_H263_DEMUXER 0
+#define CONFIG_H264_DEMUXER 0
+#define CONFIG_HCA_DEMUXER 0
+#define CONFIG_HCOM_DEMUXER 0
+#define CONFIG_HEVC_DEMUXER 0
+#define CONFIG_HLS_DEMUXER 0
+#define CONFIG_HNM_DEMUXER 0
+#define CONFIG_ICO_DEMUXER 0
+#define CONFIG_IDCIN_DEMUXER 0
+#define CONFIG_IDF_DEMUXER 0
+#define CONFIG_IFF_DEMUXER 0
+#define CONFIG_IFV_DEMUXER 0
+#define CONFIG_ILBC_DEMUXER 0
+#define CONFIG_IMAGE2_DEMUXER 0
+#define CONFIG_IMAGE2PIPE_DEMUXER 0
+#define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0
+#define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0
+#define CONFIG_INGENIENT_DEMUXER 0
+#define CONFIG_IPMOVIE_DEMUXER 0
+#define CONFIG_IRCAM_DEMUXER 0
+#define CONFIG_ISS_DEMUXER 0
+#define CONFIG_IV8_DEMUXER 0
+#define CONFIG_IVF_DEMUXER 0
+#define CONFIG_IVR_DEMUXER 0
+#define CONFIG_JACOSUB_DEMUXER 0
+#define CONFIG_JV_DEMUXER 0
+#define CONFIG_KUX_DEMUXER 0
+#define CONFIG_KVAG_DEMUXER 0
+#define CONFIG_LMLM4_DEMUXER 0
+#define CONFIG_LOAS_DEMUXER 0
+#define CONFIG_LRC_DEMUXER 0
+#define CONFIG_LVF_DEMUXER 0
+#define CONFIG_LXF_DEMUXER 0
+#define CONFIG_M4V_DEMUXER 0
+#define CONFIG_MATROSKA_DEMUXER 1
+#define CONFIG_MGSTS_DEMUXER 0
+#define CONFIG_MICRODVD_DEMUXER 0
+#define CONFIG_MJPEG_DEMUXER 0
+#define CONFIG_MJPEG_2000_DEMUXER 0
+#define CONFIG_MLP_DEMUXER 0
+#define CONFIG_MLV_DEMUXER 0
+#define CONFIG_MM_DEMUXER 0
+#define CONFIG_MMF_DEMUXER 0
+#define CONFIG_MOV_DEMUXER 1
+#define CONFIG_MP3_DEMUXER 1
+#define CONFIG_MPC_DEMUXER 0
+#define CONFIG_MPC8_DEMUXER 0
+#define CONFIG_MPEGPS_DEMUXER 0
+#define CONFIG_MPEGTS_DEMUXER 0
+#define CONFIG_MPEGTSRAW_DEMUXER 0
+#define CONFIG_MPEGVIDEO_DEMUXER 0
+#define CONFIG_MPJPEG_DEMUXER 0
+#define CONFIG_MPL2_DEMUXER 0
+#define CONFIG_MPSUB_DEMUXER 0
+#define CONFIG_MSF_DEMUXER 0
+#define CONFIG_MSNWC_TCP_DEMUXER 0
+#define CONFIG_MTAF_DEMUXER 0
+#define CONFIG_MTV_DEMUXER 0
+#define CONFIG_MUSX_DEMUXER 0
+#define CONFIG_MV_DEMUXER 0
+#define CONFIG_MVI_DEMUXER 0
+#define CONFIG_MXF_DEMUXER 0
+#define CONFIG_MXG_DEMUXER 0
+#define CONFIG_NC_DEMUXER 0
+#define CONFIG_NISTSPHERE_DEMUXER 0
+#define CONFIG_NSP_DEMUXER 0
+#define CONFIG_NSV_DEMUXER 0
+#define CONFIG_NUT_DEMUXER 0
+#define CONFIG_NUV_DEMUXER 0
+#define CONFIG_OGG_DEMUXER 1
+#define CONFIG_OMA_DEMUXER 0
+#define CONFIG_PAF_DEMUXER 0
+#define CONFIG_PCM_ALAW_DEMUXER 0
+#define CONFIG_PCM_MULAW_DEMUXER 0
+#define CONFIG_PCM_VIDC_DEMUXER 0
+#define CONFIG_PCM_F64BE_DEMUXER 0
+#define CONFIG_PCM_F64LE_DEMUXER 0
+#define CONFIG_PCM_F32BE_DEMUXER 0
+#define CONFIG_PCM_F32LE_DEMUXER 0
+#define CONFIG_PCM_S32BE_DEMUXER 0
+#define CONFIG_PCM_S32LE_DEMUXER 0
+#define CONFIG_PCM_S24BE_DEMUXER 0
+#define CONFIG_PCM_S24LE_DEMUXER 0
+#define CONFIG_PCM_S16BE_DEMUXER 0
+#define CONFIG_PCM_S16LE_DEMUXER 0
+#define CONFIG_PCM_S8_DEMUXER 0
+#define CONFIG_PCM_U32BE_DEMUXER 0
+#define CONFIG_PCM_U32LE_DEMUXER 0
+#define CONFIG_PCM_U24BE_DEMUXER 0
+#define CONFIG_PCM_U24LE_DEMUXER 0
+#define CONFIG_PCM_U16BE_DEMUXER 0
+#define CONFIG_PCM_U16LE_DEMUXER 0
+#define CONFIG_PCM_U8_DEMUXER 0
+#define CONFIG_PJS_DEMUXER 0
+#define CONFIG_PMP_DEMUXER 0
+#define CONFIG_PVA_DEMUXER 0
+#define CONFIG_PVF_DEMUXER 0
+#define CONFIG_QCP_DEMUXER 0
+#define CONFIG_R3D_DEMUXER 0
+#define CONFIG_RAWVIDEO_DEMUXER 0
+#define CONFIG_REALTEXT_DEMUXER 0
+#define CONFIG_REDSPARK_DEMUXER 0
+#define CONFIG_RL2_DEMUXER 0
+#define CONFIG_RM_DEMUXER 0
+#define CONFIG_ROQ_DEMUXER 0
+#define CONFIG_RPL_DEMUXER 0
+#define CONFIG_RSD_DEMUXER 0
+#define CONFIG_RSO_DEMUXER 0
+#define CONFIG_RTP_DEMUXER 0
+#define CONFIG_RTSP_DEMUXER 0
+#define CONFIG_S337M_DEMUXER 0
+#define CONFIG_SAMI_DEMUXER 0
+#define CONFIG_SAP_DEMUXER 0
+#define CONFIG_SBC_DEMUXER 0
+#define CONFIG_SBG_DEMUXER 0
+#define CONFIG_SCC_DEMUXER 0
+#define CONFIG_SDP_DEMUXER 0
+#define CONFIG_SDR2_DEMUXER 0
+#define CONFIG_SDS_DEMUXER 0
+#define CONFIG_SDX_DEMUXER 0
+#define CONFIG_SEGAFILM_DEMUXER 0
+#define CONFIG_SER_DEMUXER 0
+#define CONFIG_SHORTEN_DEMUXER 0
+#define CONFIG_SIFF_DEMUXER 0
+#define CONFIG_SLN_DEMUXER 0
+#define CONFIG_SMACKER_DEMUXER 0
+#define CONFIG_SMJPEG_DEMUXER 0
+#define CONFIG_SMUSH_DEMUXER 0
+#define CONFIG_SOL_DEMUXER 0
+#define CONFIG_SOX_DEMUXER 0
+#define CONFIG_SPDIF_DEMUXER 0
+#define CONFIG_SRT_DEMUXER 0
+#define CONFIG_STR_DEMUXER 0
+#define CONFIG_STL_DEMUXER 0
+#define CONFIG_SUBVIEWER1_DEMUXER 0
+#define CONFIG_SUBVIEWER_DEMUXER 0
+#define CONFIG_SUP_DEMUXER 0
+#define CONFIG_SVAG_DEMUXER 0
+#define CONFIG_SWF_DEMUXER 0
+#define CONFIG_TAK_DEMUXER 0
+#define CONFIG_TEDCAPTIONS_DEMUXER 0
+#define CONFIG_THP_DEMUXER 0
+#define CONFIG_THREEDOSTR_DEMUXER 0
+#define CONFIG_TIERTEXSEQ_DEMUXER 0
+#define CONFIG_TMV_DEMUXER 0
+#define CONFIG_TRUEHD_DEMUXER 0
+#define CONFIG_TTA_DEMUXER 0
+#define CONFIG_TXD_DEMUXER 0
+#define CONFIG_TTY_DEMUXER 0
+#define CONFIG_TY_DEMUXER 0
+#define CONFIG_V210_DEMUXER 0
+#define CONFIG_V210X_DEMUXER 0
+#define CONFIG_VAG_DEMUXER 0
+#define CONFIG_VC1_DEMUXER 0
+#define CONFIG_VC1T_DEMUXER 0
+#define CONFIG_VIVIDAS_DEMUXER 0
+#define CONFIG_VIVO_DEMUXER 0
+#define CONFIG_VMD_DEMUXER 0
+#define CONFIG_VOBSUB_DEMUXER 0
+#define CONFIG_VOC_DEMUXER 0
+#define CONFIG_VPK_DEMUXER 0
+#define CONFIG_VPLAYER_DEMUXER 0
+#define CONFIG_VQF_DEMUXER 0
+#define CONFIG_W64_DEMUXER 0
+#define CONFIG_WAV_DEMUXER 1
+#define CONFIG_WC3_DEMUXER 0
+#define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0
+#define CONFIG_WEBVTT_DEMUXER 0
+#define CONFIG_WSAUD_DEMUXER 0
+#define CONFIG_WSD_DEMUXER 0
+#define CONFIG_WSVQA_DEMUXER 0
+#define CONFIG_WTV_DEMUXER 0
+#define CONFIG_WVE_DEMUXER 0
+#define CONFIG_WV_DEMUXER 0
+#define CONFIG_XA_DEMUXER 0
+#define CONFIG_XBIN_DEMUXER 0
+#define CONFIG_XMV_DEMUXER 0
+#define CONFIG_XVAG_DEMUXER 0
+#define CONFIG_XWMA_DEMUXER 0
+#define CONFIG_YOP_DEMUXER 0
+#define CONFIG_YUV4MPEGPIPE_DEMUXER 0
+#define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_GIF_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PSD_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_SVG_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_XPM_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_XWD_PIPE_DEMUXER 0
+#define CONFIG_LIBGME_DEMUXER 0
+#define CONFIG_LIBMODPLUG_DEMUXER 0
+#define CONFIG_LIBOPENMPT_DEMUXER 0
+#define CONFIG_VAPOURSYNTH_DEMUXER 0
+#define CONFIG_A64_MUXER 0
+#define CONFIG_AC3_MUXER 0
+#define CONFIG_ADTS_MUXER 0
+#define CONFIG_ADX_MUXER 0
+#define CONFIG_AIFF_MUXER 0
+#define CONFIG_AMR_MUXER 0
+#define CONFIG_APNG_MUXER 0
+#define CONFIG_APTX_MUXER 0
+#define CONFIG_APTX_HD_MUXER 0
+#define CONFIG_ASF_MUXER 0
+#define CONFIG_ASS_MUXER 0
+#define CONFIG_AST_MUXER 0
+#define CONFIG_ASF_STREAM_MUXER 0
+#define CONFIG_AU_MUXER 0
+#define CONFIG_AVI_MUXER 0
+#define CONFIG_AVM2_MUXER 0
+#define CONFIG_AVS2_MUXER 0
+#define CONFIG_BIT_MUXER 0
+#define CONFIG_CAF_MUXER 0
+#define CONFIG_CAVSVIDEO_MUXER 0
+#define CONFIG_CODEC2_MUXER 0
+#define CONFIG_CODEC2RAW_MUXER 0
+#define CONFIG_CRC_MUXER 0
+#define CONFIG_DASH_MUXER 0
+#define CONFIG_DATA_MUXER 0
+#define CONFIG_DAUD_MUXER 0
+#define CONFIG_DIRAC_MUXER 0
+#define CONFIG_DNXHD_MUXER 0
+#define CONFIG_DTS_MUXER 0
+#define CONFIG_DV_MUXER 0
+#define CONFIG_EAC3_MUXER 0
+#define CONFIG_F4V_MUXER 0
+#define CONFIG_FFMETADATA_MUXER 0
+#define CONFIG_FIFO_MUXER 0
+#define CONFIG_FIFO_TEST_MUXER 0
+#define CONFIG_FILMSTRIP_MUXER 0
+#define CONFIG_FITS_MUXER 0
+#define CONFIG_FLAC_MUXER 0
+#define CONFIG_FLV_MUXER 0
+#define CONFIG_FRAMECRC_MUXER 0
+#define CONFIG_FRAMEHASH_MUXER 0
+#define CONFIG_FRAMEMD5_MUXER 0
+#define CONFIG_G722_MUXER 0
+#define CONFIG_G723_1_MUXER 0
+#define CONFIG_G726_MUXER 0
+#define CONFIG_G726LE_MUXER 0
+#define CONFIG_GIF_MUXER 0
+#define CONFIG_GSM_MUXER 0
+#define CONFIG_GXF_MUXER 0
+#define CONFIG_H261_MUXER 0
+#define CONFIG_H263_MUXER 0
+#define CONFIG_H264_MUXER 0
+#define CONFIG_HASH_MUXER 0
+#define CONFIG_HDS_MUXER 0
+#define CONFIG_HEVC_MUXER 0
+#define CONFIG_HLS_MUXER 0
+#define CONFIG_ICO_MUXER 0
+#define CONFIG_ILBC_MUXER 0
+#define CONFIG_IMAGE2_MUXER 0
+#define CONFIG_IMAGE2PIPE_MUXER 0
+#define CONFIG_IPOD_MUXER 0
+#define CONFIG_IRCAM_MUXER 0
+#define CONFIG_ISMV_MUXER 0
+#define CONFIG_IVF_MUXER 0
+#define CONFIG_JACOSUB_MUXER 0
+#define CONFIG_LATM_MUXER 0
+#define CONFIG_LRC_MUXER 0
+#define CONFIG_M4V_MUXER 0
+#define CONFIG_MD5_MUXER 0
+#define CONFIG_MATROSKA_MUXER 0
+#define CONFIG_MATROSKA_AUDIO_MUXER 0
+#define CONFIG_MICRODVD_MUXER 0
+#define CONFIG_MJPEG_MUXER 0
+#define CONFIG_MLP_MUXER 0
+#define CONFIG_MMF_MUXER 0
+#define CONFIG_MOV_MUXER 0
+#define CONFIG_MP2_MUXER 0
+#define CONFIG_MP3_MUXER 0
+#define CONFIG_MP4_MUXER 0
+#define CONFIG_MPEG1SYSTEM_MUXER 0
+#define CONFIG_MPEG1VCD_MUXER 0
+#define CONFIG_MPEG1VIDEO_MUXER 0
+#define CONFIG_MPEG2DVD_MUXER 0
+#define CONFIG_MPEG2SVCD_MUXER 0
+#define CONFIG_MPEG2VIDEO_MUXER 0
+#define CONFIG_MPEG2VOB_MUXER 0
+#define CONFIG_MPEGTS_MUXER 0
+#define CONFIG_MPJPEG_MUXER 0
+#define CONFIG_MXF_MUXER 0
+#define CONFIG_MXF_D10_MUXER 0
+#define CONFIG_MXF_OPATOM_MUXER 0
+#define CONFIG_NULL_MUXER 0
+#define CONFIG_NUT_MUXER 0
+#define CONFIG_OGA_MUXER 0
+#define CONFIG_OGG_MUXER 0
+#define CONFIG_OGV_MUXER 0
+#define CONFIG_OMA_MUXER 0
+#define CONFIG_OPUS_MUXER 0
+#define CONFIG_PCM_ALAW_MUXER 0
+#define CONFIG_PCM_MULAW_MUXER 0
+#define CONFIG_PCM_VIDC_MUXER 0
+#define CONFIG_PCM_F64BE_MUXER 0
+#define CONFIG_PCM_F64LE_MUXER 0
+#define CONFIG_PCM_F32BE_MUXER 0
+#define CONFIG_PCM_F32LE_MUXER 0
+#define CONFIG_PCM_S32BE_MUXER 0
+#define CONFIG_PCM_S32LE_MUXER 0
+#define CONFIG_PCM_S24BE_MUXER 0
+#define CONFIG_PCM_S24LE_MUXER 0
+#define CONFIG_PCM_S16BE_MUXER 0
+#define CONFIG_PCM_S16LE_MUXER 0
+#define CONFIG_PCM_S8_MUXER 0
+#define CONFIG_PCM_U32BE_MUXER 0
+#define CONFIG_PCM_U32LE_MUXER 0
+#define CONFIG_PCM_U24BE_MUXER 0
+#define CONFIG_PCM_U24LE_MUXER 0
+#define CONFIG_PCM_U16BE_MUXER 0
+#define CONFIG_PCM_U16LE_MUXER 0
+#define CONFIG_PCM_U8_MUXER 0
+#define CONFIG_PSP_MUXER 0
+#define CONFIG_RAWVIDEO_MUXER 0
+#define CONFIG_RM_MUXER 0
+#define CONFIG_ROQ_MUXER 0
+#define CONFIG_RSO_MUXER 0
+#define CONFIG_RTP_MUXER 0
+#define CONFIG_RTP_MPEGTS_MUXER 0
+#define CONFIG_RTSP_MUXER 0
+#define CONFIG_SAP_MUXER 0
+#define CONFIG_SBC_MUXER 0
+#define CONFIG_SCC_MUXER 0
+#define CONFIG_SEGAFILM_MUXER 0
+#define CONFIG_SEGMENT_MUXER 0
+#define CONFIG_STREAM_SEGMENT_MUXER 0
+#define CONFIG_SINGLEJPEG_MUXER 0
+#define CONFIG_SMJPEG_MUXER 0
+#define CONFIG_SMOOTHSTREAMING_MUXER 0
+#define CONFIG_SOX_MUXER 0
+#define CONFIG_SPX_MUXER 0
+#define CONFIG_SPDIF_MUXER 0
+#define CONFIG_SRT_MUXER 0
+#define CONFIG_STREAMHASH_MUXER 0
+#define CONFIG_SUP_MUXER 0
+#define CONFIG_SWF_MUXER 0
+#define CONFIG_TEE_MUXER 0
+#define CONFIG_TG2_MUXER 0
+#define CONFIG_TGP_MUXER 0
+#define CONFIG_MKVTIMESTAMP_V2_MUXER 0
+#define CONFIG_TRUEHD_MUXER 0
+#define CONFIG_TTA_MUXER 0
+#define CONFIG_UNCODEDFRAMECRC_MUXER 0
+#define CONFIG_VC1_MUXER 0
+#define CONFIG_VC1T_MUXER 0
+#define CONFIG_VOC_MUXER 0
+#define CONFIG_W64_MUXER 0
+#define CONFIG_WAV_MUXER 0
+#define CONFIG_WEBM_MUXER 0
+#define CONFIG_WEBM_DASH_MANIFEST_MUXER 0
+#define CONFIG_WEBM_CHUNK_MUXER 0
+#define CONFIG_WEBP_MUXER 0
+#define CONFIG_WEBVTT_MUXER 0
+#define CONFIG_WTV_MUXER 0
+#define CONFIG_WV_MUXER 0
+#define CONFIG_YUV4MPEGPIPE_MUXER 0
+#define CONFIG_CHROMAPRINT_MUXER 0
+#define CONFIG_ASYNC_PROTOCOL 0
+#define CONFIG_BLURAY_PROTOCOL 0
+#define CONFIG_CACHE_PROTOCOL 0
+#define CONFIG_CONCAT_PROTOCOL 0
+#define CONFIG_CRYPTO_PROTOCOL 0
+#define CONFIG_DATA_PROTOCOL 0
+#define CONFIG_FFRTMPCRYPT_PROTOCOL 0
+#define CONFIG_FFRTMPHTTP_PROTOCOL 0
+#define CONFIG_FILE_PROTOCOL 0
+#define CONFIG_FTP_PROTOCOL 0
+#define CONFIG_GOPHER_PROTOCOL 0
+#define CONFIG_HLS_PROTOCOL 0
+#define CONFIG_HTTP_PROTOCOL 0
+#define CONFIG_HTTPPROXY_PROTOCOL 0
+#define CONFIG_HTTPS_PROTOCOL 0
+#define CONFIG_ICECAST_PROTOCOL 0
+#define CONFIG_MMSH_PROTOCOL 0
+#define CONFIG_MMST_PROTOCOL 0
+#define CONFIG_MD5_PROTOCOL 0
+#define CONFIG_PIPE_PROTOCOL 0
+#define CONFIG_PROMPEG_PROTOCOL 0
+#define CONFIG_RTMP_PROTOCOL 0
+#define CONFIG_RTMPE_PROTOCOL 0
+#define CONFIG_RTMPS_PROTOCOL 0
+#define CONFIG_RTMPT_PROTOCOL 0
+#define CONFIG_RTMPTE_PROTOCOL 0
+#define CONFIG_RTMPTS_PROTOCOL 0
+#define CONFIG_RTP_PROTOCOL 0
+#define CONFIG_SCTP_PROTOCOL 0
+#define CONFIG_SRTP_PROTOCOL 0
+#define CONFIG_SUBFILE_PROTOCOL 0
+#define CONFIG_TEE_PROTOCOL 0
+#define CONFIG_TCP_PROTOCOL 0
+#define CONFIG_TLS_PROTOCOL 0
+#define CONFIG_UDP_PROTOCOL 0
+#define CONFIG_UDPLITE_PROTOCOL 0
+#define CONFIG_UNIX_PROTOCOL 0
+#define CONFIG_LIBAMQP_PROTOCOL 0
+#define CONFIG_LIBRTMP_PROTOCOL 0
+#define CONFIG_LIBRTMPE_PROTOCOL 0
+#define CONFIG_LIBRTMPS_PROTOCOL 0
+#define CONFIG_LIBRTMPT_PROTOCOL 0
+#define CONFIG_LIBRTMPTE_PROTOCOL 0
+#define CONFIG_LIBSRT_PROTOCOL 0
+#define CONFIG_LIBSSH_PROTOCOL 0
+#define CONFIG_LIBSMBCLIENT_PROTOCOL 0
+#define CONFIG_LIBZMQ_PROTOCOL 0
+#endif /* FFMPEG_CONFIG_H */
diff --git a/fuchsia/config/max/arm64/libavcodec/bsf_list.c b/fuchsia/config/max/arm64/libavcodec/bsf_list.c
new file mode 100644
index 0000000..d31ece9
--- /dev/null
+++ b/fuchsia/config/max/arm64/libavcodec/bsf_list.c
@@ -0,0 +1,3 @@
+static const AVBitStreamFilter * const bitstream_filters[] = {
+    &ff_null_bsf,
+    NULL };
diff --git a/fuchsia/config/max/arm64/libavcodec/codec_list.c b/fuchsia/config/max/arm64/libavcodec/codec_list.c
new file mode 100644
index 0000000..2051e92
--- /dev/null
+++ b/fuchsia/config/max/arm64/libavcodec/codec_list.c
@@ -0,0 +1,28 @@
+static const AVCodec * const codec_list[] = {
+    &ff_h263_decoder,
+    &ff_h264_decoder,
+    &ff_mpeg4_decoder,
+    &ff_theora_decoder,
+    &ff_vp3_decoder,
+    &ff_vp8_decoder,
+    &ff_aac_decoder,
+    &ff_aac_latm_decoder,
+    &ff_amrnb_decoder,
+    &ff_amrwb_decoder,
+    &ff_aptx_decoder,
+    &ff_flac_decoder,
+    &ff_gsm_ms_decoder,
+    &ff_mp3_decoder,
+    &ff_sbc_decoder,
+    &ff_vorbis_decoder,
+    &ff_pcm_alaw_decoder,
+    &ff_pcm_f32le_decoder,
+    &ff_pcm_mulaw_decoder,
+    &ff_pcm_s16be_decoder,
+    &ff_pcm_s16le_decoder,
+    &ff_pcm_s24be_decoder,
+    &ff_pcm_s24le_decoder,
+    &ff_pcm_s32le_decoder,
+    &ff_pcm_u8_decoder,
+    &ff_libopus_decoder,
+    NULL };
diff --git a/fuchsia/config/max/arm64/libavcodec/parser_list.c b/fuchsia/config/max/arm64/libavcodec/parser_list.c
new file mode 100644
index 0000000..06905eb
--- /dev/null
+++ b/fuchsia/config/max/arm64/libavcodec/parser_list.c
@@ -0,0 +1,14 @@
+static const AVCodecParser * const parser_list[] = {
+    &ff_aac_parser,
+    &ff_aac_latm_parser,
+    &ff_flac_parser,
+    &ff_gsm_parser,
+    &ff_h263_parser,
+    &ff_h264_parser,
+    &ff_mpeg4video_parser,
+    &ff_mpegaudio_parser,
+    &ff_opus_parser,
+    &ff_vorbis_parser,
+    &ff_vp3_parser,
+    &ff_vp8_parser,
+    NULL };
diff --git a/fuchsia/config/max/arm64/libavformat/demuxer_list.c b/fuchsia/config/max/arm64/libavformat/demuxer_list.c
new file mode 100644
index 0000000..241417e
--- /dev/null
+++ b/fuchsia/config/max/arm64/libavformat/demuxer_list.c
@@ -0,0 +1,12 @@
+static const AVInputFormat * const demuxer_list[] = {
+    &ff_aac_demuxer,
+    &ff_amr_demuxer,
+    &ff_avi_demuxer,
+    &ff_flac_demuxer,
+    &ff_gsm_demuxer,
+    &ff_matroska_demuxer,
+    &ff_mov_demuxer,
+    &ff_mp3_demuxer,
+    &ff_ogg_demuxer,
+    &ff_wav_demuxer,
+    NULL };
diff --git a/fuchsia/config/max/arm64/libavformat/muxer_list.c b/fuchsia/config/max/arm64/libavformat/muxer_list.c
new file mode 100644
index 0000000..f36d949
--- /dev/null
+++ b/fuchsia/config/max/arm64/libavformat/muxer_list.c
@@ -0,0 +1,2 @@
+static const AVOutputFormat * const muxer_list[] = {
+    NULL };
diff --git a/fuchsia/config/max/arm64/libavformat/protocol_list.c b/fuchsia/config/max/arm64/libavformat/protocol_list.c
new file mode 100644
index 0000000..247e1e4
--- /dev/null
+++ b/fuchsia/config/max/arm64/libavformat/protocol_list.c
@@ -0,0 +1,2 @@
+static const URLProtocol * const url_protocols[] = {
+    NULL };
diff --git a/fuchsia/config/max/arm64/libavutil/avconfig.h b/fuchsia/config/max/arm64/libavutil/avconfig.h
new file mode 100644
index 0000000..c289fbb
--- /dev/null
+++ b/fuchsia/config/max/arm64/libavutil/avconfig.h
@@ -0,0 +1,6 @@
+/* Generated by ffmpeg configure */
+#ifndef AVUTIL_AVCONFIG_H
+#define AVUTIL_AVCONFIG_H
+#define AV_HAVE_BIGENDIAN 0
+#define AV_HAVE_FAST_UNALIGNED 1
+#endif /* AVUTIL_AVCONFIG_H */
diff --git a/fuchsia/config/max/arm64/libavutil/ffversion.h b/fuchsia/config/max/arm64/libavutil/ffversion.h
new file mode 100644
index 0000000..fc76199
--- /dev/null
+++ b/fuchsia/config/max/arm64/libavutil/ffversion.h
@@ -0,0 +1,5 @@
+/* Automatically generated by version.sh, do not manually edit! */
+#ifndef AVUTIL_FFVERSION_H
+#define AVUTIL_FFVERSION_H
+#define FFMPEG_VERSION "N-97662-gaaac2c26d9"
+#endif /* AVUTIL_FFVERSION_H */
diff --git a/fuchsia/config/max/x64/config.asm b/fuchsia/config/max/x64/config.asm
new file mode 100644
index 0000000..c7d35bd
--- /dev/null
+++ b/fuchsia/config/max/x64/config.asm
@@ -0,0 +1,2572 @@
+; Automatically generated by configure - do not modify!
+%define ARCH_AARCH64 0
+%define ARCH_ALPHA 0
+%define ARCH_ARM 0
+%define ARCH_AVR32 0
+%define ARCH_AVR32_AP 0
+%define ARCH_AVR32_UC 0
+%define ARCH_BFIN 0
+%define ARCH_IA64 0
+%define ARCH_M68K 0
+%define ARCH_MIPS 0
+%define ARCH_MIPS64 0
+%define ARCH_PARISC 0
+%define ARCH_PPC 0
+%define ARCH_PPC64 0
+%define ARCH_S390 0
+%define ARCH_SH4 0
+%define ARCH_SPARC 0
+%define ARCH_SPARC64 0
+%define ARCH_TILEGX 0
+%define ARCH_TILEPRO 0
+%define ARCH_TOMI 0
+%define ARCH_X86 1
+%define ARCH_X86_32 0
+%define ARCH_X86_64 1
+%define HAVE_ARMV5TE 0
+%define HAVE_ARMV6 0
+%define HAVE_ARMV6T2 0
+%define HAVE_ARMV8 0
+%define HAVE_NEON 0
+%define HAVE_VFP 0
+%define HAVE_VFPV3 0
+%define HAVE_SETEND 0
+%define HAVE_ALTIVEC 0
+%define HAVE_DCBZL 0
+%define HAVE_LDBRX 0
+%define HAVE_POWER8 0
+%define HAVE_PPC4XX 0
+%define HAVE_VSX 0
+%define HAVE_AESNI 1
+%define HAVE_AMD3DNOW 1
+%define HAVE_AMD3DNOWEXT 1
+%define HAVE_AVX 1
+%define HAVE_AVX2 1
+%define HAVE_AVX512 1
+%define HAVE_FMA3 1
+%define HAVE_FMA4 1
+%define HAVE_MMX 1
+%define HAVE_MMXEXT 1
+%define HAVE_SSE 1
+%define HAVE_SSE2 1
+%define HAVE_SSE3 1
+%define HAVE_SSE4 1
+%define HAVE_SSE42 1
+%define HAVE_SSSE3 1
+%define HAVE_XOP 1
+%define HAVE_CPUNOP 1
+%define HAVE_I686 1
+%define HAVE_MIPSFPU 0
+%define HAVE_MIPS32R2 0
+%define HAVE_MIPS32R5 0
+%define HAVE_MIPS64R2 0
+%define HAVE_MIPS32R6 0
+%define HAVE_MIPS64R6 0
+%define HAVE_MIPSDSP 0
+%define HAVE_MIPSDSPR2 0
+%define HAVE_MSA 0
+%define HAVE_MSA2 0
+%define HAVE_LOONGSON2 0
+%define HAVE_LOONGSON3 0
+%define HAVE_MMI 0
+%define HAVE_ARMV5TE_EXTERNAL 0
+%define HAVE_ARMV6_EXTERNAL 0
+%define HAVE_ARMV6T2_EXTERNAL 0
+%define HAVE_ARMV8_EXTERNAL 0
+%define HAVE_NEON_EXTERNAL 0
+%define HAVE_VFP_EXTERNAL 0
+%define HAVE_VFPV3_EXTERNAL 0
+%define HAVE_SETEND_EXTERNAL 0
+%define HAVE_ALTIVEC_EXTERNAL 0
+%define HAVE_DCBZL_EXTERNAL 0
+%define HAVE_LDBRX_EXTERNAL 0
+%define HAVE_POWER8_EXTERNAL 0
+%define HAVE_PPC4XX_EXTERNAL 0
+%define HAVE_VSX_EXTERNAL 0
+%define HAVE_AESNI_EXTERNAL 1
+%define HAVE_AMD3DNOW_EXTERNAL 1
+%define HAVE_AMD3DNOWEXT_EXTERNAL 1
+%define HAVE_AVX_EXTERNAL 1
+%define HAVE_AVX2_EXTERNAL 1
+%define HAVE_AVX512_EXTERNAL 0
+%define HAVE_FMA3_EXTERNAL 1
+%define HAVE_FMA4_EXTERNAL 1
+%define HAVE_MMX_EXTERNAL 1
+%define HAVE_MMXEXT_EXTERNAL 1
+%define HAVE_SSE_EXTERNAL 1
+%define HAVE_SSE2_EXTERNAL 1
+%define HAVE_SSE3_EXTERNAL 1
+%define HAVE_SSE4_EXTERNAL 1
+%define HAVE_SSE42_EXTERNAL 1
+%define HAVE_SSSE3_EXTERNAL 1
+%define HAVE_XOP_EXTERNAL 1
+%define HAVE_CPUNOP_EXTERNAL 0
+%define HAVE_I686_EXTERNAL 0
+%define HAVE_MIPSFPU_EXTERNAL 0
+%define HAVE_MIPS32R2_EXTERNAL 0
+%define HAVE_MIPS32R5_EXTERNAL 0
+%define HAVE_MIPS64R2_EXTERNAL 0
+%define HAVE_MIPS32R6_EXTERNAL 0
+%define HAVE_MIPS64R6_EXTERNAL 0
+%define HAVE_MIPSDSP_EXTERNAL 0
+%define HAVE_MIPSDSPR2_EXTERNAL 0
+%define HAVE_MSA_EXTERNAL 0
+%define HAVE_MSA2_EXTERNAL 0
+%define HAVE_LOONGSON2_EXTERNAL 0
+%define HAVE_LOONGSON3_EXTERNAL 0
+%define HAVE_MMI_EXTERNAL 0
+%define HAVE_ARMV5TE_INLINE 0
+%define HAVE_ARMV6_INLINE 0
+%define HAVE_ARMV6T2_INLINE 0
+%define HAVE_ARMV8_INLINE 0
+%define HAVE_NEON_INLINE 0
+%define HAVE_VFP_INLINE 0
+%define HAVE_VFPV3_INLINE 0
+%define HAVE_SETEND_INLINE 0
+%define HAVE_ALTIVEC_INLINE 0
+%define HAVE_DCBZL_INLINE 0
+%define HAVE_LDBRX_INLINE 0
+%define HAVE_POWER8_INLINE 0
+%define HAVE_PPC4XX_INLINE 0
+%define HAVE_VSX_INLINE 0
+%define HAVE_AESNI_INLINE 1
+%define HAVE_AMD3DNOW_INLINE 1
+%define HAVE_AMD3DNOWEXT_INLINE 1
+%define HAVE_AVX_INLINE 1
+%define HAVE_AVX2_INLINE 1
+%define HAVE_AVX512_INLINE 1
+%define HAVE_FMA3_INLINE 1
+%define HAVE_FMA4_INLINE 1
+%define HAVE_MMX_INLINE 1
+%define HAVE_MMXEXT_INLINE 1
+%define HAVE_SSE_INLINE 1
+%define HAVE_SSE2_INLINE 1
+%define HAVE_SSE3_INLINE 1
+%define HAVE_SSE4_INLINE 1
+%define HAVE_SSE42_INLINE 1
+%define HAVE_SSSE3_INLINE 1
+%define HAVE_XOP_INLINE 1
+%define HAVE_CPUNOP_INLINE 0
+%define HAVE_I686_INLINE 0
+%define HAVE_MIPSFPU_INLINE 0
+%define HAVE_MIPS32R2_INLINE 0
+%define HAVE_MIPS32R5_INLINE 0
+%define HAVE_MIPS64R2_INLINE 0
+%define HAVE_MIPS32R6_INLINE 0
+%define HAVE_MIPS64R6_INLINE 0
+%define HAVE_MIPSDSP_INLINE 0
+%define HAVE_MIPSDSPR2_INLINE 0
+%define HAVE_MSA_INLINE 0
+%define HAVE_MSA2_INLINE 0
+%define HAVE_LOONGSON2_INLINE 0
+%define HAVE_LOONGSON3_INLINE 0
+%define HAVE_MMI_INLINE 0
+%define HAVE_ALIGNED_STACK 1
+%define HAVE_FAST_64BIT 1
+%define HAVE_FAST_CLZ 1
+%define HAVE_FAST_CMOV 1
+%define HAVE_LOCAL_ALIGNED 1
+%define HAVE_SIMD_ALIGN_16 1
+%define HAVE_SIMD_ALIGN_32 1
+%define HAVE_SIMD_ALIGN_64 1
+%define HAVE_ATOMIC_CAS_PTR 0
+%define HAVE_MACHINE_RW_BARRIER 0
+%define HAVE_MEMORYBARRIER 0
+%define HAVE_MM_EMPTY 1
+%define HAVE_RDTSC 0
+%define HAVE_SEM_TIMEDWAIT 1
+%define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1
+%define HAVE_CABS 0
+%define HAVE_CEXP 0
+%define HAVE_INLINE_ASM 1
+%define HAVE_SYMVER 0
+%define HAVE_X86ASM 1
+%define HAVE_BIGENDIAN 0
+%define HAVE_FAST_UNALIGNED 1
+%define HAVE_ARPA_INET_H 0
+%define HAVE_ASM_TYPES_H 1
+%define HAVE_CDIO_PARANOIA_H 0
+%define HAVE_CDIO_PARANOIA_PARANOIA_H 0
+%define HAVE_CUDA_H 0
+%define HAVE_DISPATCH_DISPATCH_H 0
+%define HAVE_DEV_BKTR_IOCTL_BT848_H 0
+%define HAVE_DEV_BKTR_IOCTL_METEOR_H 0
+%define HAVE_DEV_IC_BT8XX_H 0
+%define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0
+%define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0
+%define HAVE_DIRECT_H 0
+%define HAVE_DIRENT_H 1
+%define HAVE_DXGIDEBUG_H 0
+%define HAVE_DXVA_H 0
+%define HAVE_ES2_GL_H 0
+%define HAVE_GSM_H 0
+%define HAVE_IO_H 0
+%define HAVE_LINUX_PERF_EVENT_H 1
+%define HAVE_MACHINE_IOCTL_BT848_H 0
+%define HAVE_MACHINE_IOCTL_METEOR_H 0
+%define HAVE_MALLOC_H 1
+%define HAVE_OPENCV2_CORE_CORE_C_H 0
+%define HAVE_OPENGL_GL3_H 0
+%define HAVE_POLL_H 1
+%define HAVE_SYS_PARAM_H 1
+%define HAVE_SYS_RESOURCE_H 1
+%define HAVE_SYS_SELECT_H 1
+%define HAVE_SYS_SOUNDCARD_H 1
+%define HAVE_SYS_TIME_H 1
+%define HAVE_SYS_UN_H 1
+%define HAVE_SYS_VIDEOIO_H 0
+%define HAVE_TERMIOS_H 1
+%define HAVE_UDPLITE_H 0
+%define HAVE_UNISTD_H 1
+%define HAVE_VALGRIND_VALGRIND_H 0
+%define HAVE_WINDOWS_H 0
+%define HAVE_WINSOCK2_H 0
+%define HAVE_INTRINSICS_NEON 0
+%define HAVE_ATANF 1
+%define HAVE_ATAN2F 1
+%define HAVE_CBRT 1
+%define HAVE_CBRTF 1
+%define HAVE_COPYSIGN 1
+%define HAVE_COSF 1
+%define HAVE_ERF 1
+%define HAVE_EXP2 1
+%define HAVE_EXP2F 1
+%define HAVE_EXPF 1
+%define HAVE_HYPOT 1
+%define HAVE_ISFINITE 1
+%define HAVE_ISINF 1
+%define HAVE_ISNAN 1
+%define HAVE_LDEXPF 1
+%define HAVE_LLRINT 1
+%define HAVE_LLRINTF 1
+%define HAVE_LOG2 1
+%define HAVE_LOG2F 1
+%define HAVE_LOG10F 1
+%define HAVE_LRINT 1
+%define HAVE_LRINTF 1
+%define HAVE_POWF 1
+%define HAVE_RINT 1
+%define HAVE_ROUND 1
+%define HAVE_ROUNDF 1
+%define HAVE_SINF 1
+%define HAVE_TRUNC 1
+%define HAVE_TRUNCF 1
+%define HAVE_DOS_PATHS 0
+%define HAVE_LIBC_MSVCRT 0
+%define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0
+%define HAVE_SECTION_DATA_REL_RO 1
+%define HAVE_THREADS 1
+%define HAVE_UWP 0
+%define HAVE_WINRT 0
+%define HAVE_ACCESS 1
+%define HAVE_ALIGNED_MALLOC 0
+%define HAVE_ARC4RANDOM 0
+%define HAVE_CLOCK_GETTIME 1
+%define HAVE_CLOSESOCKET 0
+%define HAVE_COMMANDLINETOARGVW 0
+%define HAVE_FCNTL 1
+%define HAVE_GETADDRINFO 0
+%define HAVE_GETHRTIME 0
+%define HAVE_GETOPT 1
+%define HAVE_GETMODULEHANDLE 0
+%define HAVE_GETPROCESSAFFINITYMASK 0
+%define HAVE_GETPROCESSMEMORYINFO 0
+%define HAVE_GETPROCESSTIMES 0
+%define HAVE_GETRUSAGE 1
+%define HAVE_GETSTDHANDLE 0
+%define HAVE_GETSYSTEMTIMEASFILETIME 0
+%define HAVE_GETTIMEOFDAY 1
+%define HAVE_GLOB 1
+%define HAVE_GLXGETPROCADDRESS 0
+%define HAVE_GMTIME_R 1
+%define HAVE_INET_ATON 0
+%define HAVE_ISATTY 1
+%define HAVE_KBHIT 0
+%define HAVE_LOCALTIME_R 1
+%define HAVE_LSTAT 1
+%define HAVE_LZO1X_999_COMPRESS 0
+%define HAVE_MACH_ABSOLUTE_TIME 0
+%define HAVE_MAPVIEWOFFILE 0
+%define HAVE_MEMALIGN 1
+%define HAVE_MKSTEMP 1
+%define HAVE_MMAP 1
+%define HAVE_MPROTECT 1
+%define HAVE_NANOSLEEP 1
+%define HAVE_PEEKNAMEDPIPE 0
+%define HAVE_POSIX_MEMALIGN 1
+%define HAVE_PTHREAD_CANCEL 1
+%define HAVE_SCHED_GETAFFINITY 1
+%define HAVE_SECITEMIMPORT 0
+%define HAVE_SETCONSOLETEXTATTRIBUTE 0
+%define HAVE_SETCONSOLECTRLHANDLER 0
+%define HAVE_SETDLLDIRECTORY 0
+%define HAVE_SETMODE 0
+%define HAVE_SETRLIMIT 1
+%define HAVE_SLEEP 0
+%define HAVE_STRERROR_R 1
+%define HAVE_SYSCONF 1
+%define HAVE_SYSCTL 1
+%define HAVE_USLEEP 1
+%define HAVE_UTGETOSTYPEFROMSTRING 0
+%define HAVE_VIRTUALALLOC 0
+%define HAVE_WGLGETPROCADDRESS 0
+%define HAVE_BCRYPT 0
+%define HAVE_VAAPI_DRM 0
+%define HAVE_VAAPI_X11 0
+%define HAVE_VDPAU_X11 0
+%define HAVE_PTHREADS 1
+%define HAVE_OS2THREADS 0
+%define HAVE_W32THREADS 0
+%define HAVE_AS_ARCH_DIRECTIVE 0
+%define HAVE_AS_DN_DIRECTIVE 0
+%define HAVE_AS_FPU_DIRECTIVE 0
+%define HAVE_AS_FUNC 0
+%define HAVE_AS_OBJECT_ARCH 0
+%define HAVE_ASM_MOD_Q 0
+%define HAVE_BLOCKS_EXTENSION 0
+%define HAVE_EBP_AVAILABLE 1
+%define HAVE_EBX_AVAILABLE 1
+%define HAVE_GNU_AS 0
+%define HAVE_GNU_WINDRES 0
+%define HAVE_IBM_ASM 0
+%define HAVE_INLINE_ASM_DIRECT_SYMBOL_REFS 0
+%define HAVE_INLINE_ASM_LABELS 1
+%define HAVE_INLINE_ASM_NONLOCAL_LABELS 1
+%define HAVE_PRAGMA_DEPRECATED 1
+%define HAVE_RSYNC_CONTIMEOUT 1
+%define HAVE_SYMVER_ASM_LABEL 1
+%define HAVE_SYMVER_GNU_ASM 1
+%define HAVE_VFP_ARGS 0
+%define HAVE_XFORM_ASM 0
+%define HAVE_XMM_CLOBBERS 1
+%define HAVE_KCMVIDEOCODECTYPE_HEVC 0
+%define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0
+%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0
+%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0
+%define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0
+%define HAVE_SOCKLEN_T 0
+%define HAVE_STRUCT_ADDRINFO 0
+%define HAVE_STRUCT_GROUP_SOURCE_REQ 0
+%define HAVE_STRUCT_IP_MREQ_SOURCE 0
+%define HAVE_STRUCT_IPV6_MREQ 0
+%define HAVE_STRUCT_MSGHDR_MSG_FLAGS 0
+%define HAVE_STRUCT_POLLFD 0
+%define HAVE_STRUCT_RUSAGE_RU_MAXRSS 1
+%define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0
+%define HAVE_STRUCT_SOCKADDR_IN6 0
+%define HAVE_STRUCT_SOCKADDR_SA_LEN 0
+%define HAVE_STRUCT_SOCKADDR_STORAGE 0
+%define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1
+%define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0
+%define HAVE_MAKEINFO 0
+%define HAVE_MAKEINFO_HTML 0
+%define HAVE_OPENCL_D3D11 0
+%define HAVE_OPENCL_DRM_ARM 0
+%define HAVE_OPENCL_DRM_BEIGNET 0
+%define HAVE_OPENCL_DXVA2 0
+%define HAVE_OPENCL_VAAPI_BEIGNET 0
+%define HAVE_OPENCL_VAAPI_INTEL_MEDIA 0
+%define HAVE_PERL 1
+%define HAVE_POD2MAN 1
+%define HAVE_TEXI2HTML 0
+%define CONFIG_DOC 0
+%define CONFIG_HTMLPAGES 0
+%define CONFIG_MANPAGES 0
+%define CONFIG_PODPAGES 0
+%define CONFIG_TXTPAGES 0
+%define CONFIG_AVIO_LIST_DIR_EXAMPLE 1
+%define CONFIG_AVIO_READING_EXAMPLE 1
+%define CONFIG_DECODE_AUDIO_EXAMPLE 1
+%define CONFIG_DECODE_VIDEO_EXAMPLE 1
+%define CONFIG_DEMUXING_DECODING_EXAMPLE 1
+%define CONFIG_ENCODE_AUDIO_EXAMPLE 1
+%define CONFIG_ENCODE_VIDEO_EXAMPLE 1
+%define CONFIG_EXTRACT_MVS_EXAMPLE 1
+%define CONFIG_FILTER_AUDIO_EXAMPLE 0
+%define CONFIG_FILTERING_AUDIO_EXAMPLE 0
+%define CONFIG_FILTERING_VIDEO_EXAMPLE 0
+%define CONFIG_HTTP_MULTICLIENT_EXAMPLE 1
+%define CONFIG_HW_DECODE_EXAMPLE 1
+%define CONFIG_METADATA_EXAMPLE 1
+%define CONFIG_MUXING_EXAMPLE 0
+%define CONFIG_QSVDEC_EXAMPLE 0
+%define CONFIG_REMUXING_EXAMPLE 1
+%define CONFIG_RESAMPLING_AUDIO_EXAMPLE 0
+%define CONFIG_SCALING_VIDEO_EXAMPLE 0
+%define CONFIG_TRANSCODE_AAC_EXAMPLE 0
+%define CONFIG_TRANSCODING_EXAMPLE 0
+%define CONFIG_VAAPI_ENCODE_EXAMPLE 0
+%define CONFIG_VAAPI_TRANSCODE_EXAMPLE 0
+%define CONFIG_AVISYNTH 0
+%define CONFIG_FREI0R 0
+%define CONFIG_LIBCDIO 0
+%define CONFIG_LIBDAVS2 0
+%define CONFIG_LIBRUBBERBAND 0
+%define CONFIG_LIBVIDSTAB 0
+%define CONFIG_LIBX264 0
+%define CONFIG_LIBX265 0
+%define CONFIG_LIBXAVS 0
+%define CONFIG_LIBXAVS2 0
+%define CONFIG_LIBXVID 0
+%define CONFIG_DECKLINK 0
+%define CONFIG_LIBFDK_AAC 0
+%define CONFIG_OPENSSL 0
+%define CONFIG_LIBTLS 0
+%define CONFIG_GMP 0
+%define CONFIG_LIBARIBB24 0
+%define CONFIG_LIBLENSFUN 0
+%define CONFIG_LIBOPENCORE_AMRNB 0
+%define CONFIG_LIBOPENCORE_AMRWB 0
+%define CONFIG_LIBVMAF 0
+%define CONFIG_LIBVO_AMRWBENC 0
+%define CONFIG_MBEDTLS 0
+%define CONFIG_RKMPP 0
+%define CONFIG_LIBSMBCLIENT 0
+%define CONFIG_CHROMAPRINT 0
+%define CONFIG_GCRYPT 0
+%define CONFIG_GNUTLS 0
+%define CONFIG_JNI 0
+%define CONFIG_LADSPA 0
+%define CONFIG_LIBAOM 0
+%define CONFIG_LIBASS 0
+%define CONFIG_LIBBLURAY 0
+%define CONFIG_LIBBS2B 0
+%define CONFIG_LIBCACA 0
+%define CONFIG_LIBCELT 0
+%define CONFIG_LIBCODEC2 0
+%define CONFIG_LIBDAV1D 0
+%define CONFIG_LIBDC1394 0
+%define CONFIG_LIBDRM 0
+%define CONFIG_LIBFLITE 0
+%define CONFIG_LIBFONTCONFIG 0
+%define CONFIG_LIBFREETYPE 0
+%define CONFIG_LIBFRIBIDI 0
+%define CONFIG_LIBGLSLANG 0
+%define CONFIG_LIBGME 0
+%define CONFIG_LIBGSM 0
+%define CONFIG_LIBIEC61883 0
+%define CONFIG_LIBILBC 0
+%define CONFIG_LIBJACK 0
+%define CONFIG_LIBKLVANC 0
+%define CONFIG_LIBKVAZAAR 0
+%define CONFIG_LIBMODPLUG 0
+%define CONFIG_LIBMP3LAME 0
+%define CONFIG_LIBMYSOFA 0
+%define CONFIG_LIBOPENCV 0
+%define CONFIG_LIBOPENH264 0
+%define CONFIG_LIBOPENJPEG 0
+%define CONFIG_LIBOPENMPT 0
+%define CONFIG_LIBOPUS 1
+%define CONFIG_LIBPULSE 0
+%define CONFIG_LIBRABBITMQ 0
+%define CONFIG_LIBRAV1E 0
+%define CONFIG_LIBRSVG 0
+%define CONFIG_LIBRTMP 0
+%define CONFIG_LIBSHINE 0
+%define CONFIG_LIBSMBCLIENT 0
+%define CONFIG_LIBSNAPPY 0
+%define CONFIG_LIBSOXR 0
+%define CONFIG_LIBSPEEX 0
+%define CONFIG_LIBSRT 0
+%define CONFIG_LIBSSH 0
+%define CONFIG_LIBTENSORFLOW 0
+%define CONFIG_LIBTESSERACT 0
+%define CONFIG_LIBTHEORA 0
+%define CONFIG_LIBTWOLAME 0
+%define CONFIG_LIBV4L2 0
+%define CONFIG_LIBVORBIS 0
+%define CONFIG_LIBVPX 0
+%define CONFIG_LIBWAVPACK 0
+%define CONFIG_LIBWEBP 0
+%define CONFIG_LIBXML2 0
+%define CONFIG_LIBZIMG 0
+%define CONFIG_LIBZMQ 0
+%define CONFIG_LIBZVBI 0
+%define CONFIG_LV2 0
+%define CONFIG_MEDIACODEC 0
+%define CONFIG_OPENAL 0
+%define CONFIG_OPENGL 0
+%define CONFIG_POCKETSPHINX 0
+%define CONFIG_VAPOURSYNTH 0
+%define CONFIG_ALSA 0
+%define CONFIG_APPKIT 0
+%define CONFIG_AVFOUNDATION 0
+%define CONFIG_BZLIB 0
+%define CONFIG_COREIMAGE 0
+%define CONFIG_ICONV 0
+%define CONFIG_LIBXCB 0
+%define CONFIG_LIBXCB_SHM 0
+%define CONFIG_LIBXCB_SHAPE 0
+%define CONFIG_LIBXCB_XFIXES 0
+%define CONFIG_LZMA 0
+%define CONFIG_SCHANNEL 0
+%define CONFIG_SDL2 0
+%define CONFIG_SECURETRANSPORT 0
+%define CONFIG_SNDIO 0
+%define CONFIG_XLIB 0
+%define CONFIG_ZLIB 0
+%define CONFIG_CUDA_NVCC 0
+%define CONFIG_CUDA_SDK 0
+%define CONFIG_LIBNPP 0
+%define CONFIG_LIBMFX 0
+%define CONFIG_MMAL 0
+%define CONFIG_OMX 0
+%define CONFIG_OPENCL 0
+%define CONFIG_VULKAN 0
+%define CONFIG_AMF 0
+%define CONFIG_AUDIOTOOLBOX 0
+%define CONFIG_CRYSTALHD 0
+%define CONFIG_CUDA 0
+%define CONFIG_CUDA_LLVM 0
+%define CONFIG_CUVID 0
+%define CONFIG_D3D11VA 0
+%define CONFIG_DXVA2 0
+%define CONFIG_FFNVCODEC 0
+%define CONFIG_NVDEC 0
+%define CONFIG_NVENC 0
+%define CONFIG_VAAPI 0
+%define CONFIG_VDPAU 0
+%define CONFIG_VIDEOTOOLBOX 0
+%define CONFIG_V4L2_M2M 0
+%define CONFIG_XVMC 0
+%define CONFIG_FTRAPV 0
+%define CONFIG_GRAY 0
+%define CONFIG_HARDCODED_TABLES 0
+%define CONFIG_OMX_RPI 0
+%define CONFIG_RUNTIME_CPUDETECT 1
+%define CONFIG_SAFE_BITSTREAM_READER 1
+%define CONFIG_SHARED 0
+%define CONFIG_SMALL 0
+%define CONFIG_STATIC 1
+%define CONFIG_SWSCALE_ALPHA 1
+%define CONFIG_GPL 0
+%define CONFIG_NONFREE 0
+%define CONFIG_VERSION3 0
+%define CONFIG_AVDEVICE 0
+%define CONFIG_AVFILTER 0
+%define CONFIG_SWSCALE 0
+%define CONFIG_POSTPROC 0
+%define CONFIG_AVFORMAT 1
+%define CONFIG_AVCODEC 1
+%define CONFIG_SWRESAMPLE 0
+%define CONFIG_AVRESAMPLE 0
+%define CONFIG_AVUTIL 1
+%define CONFIG_FFPLAY 0
+%define CONFIG_FFPROBE 0
+%define CONFIG_FFMPEG 0
+%define CONFIG_DCT 1
+%define CONFIG_DWT 0
+%define CONFIG_ERROR_RESILIENCE 1
+%define CONFIG_FAAN 0
+%define CONFIG_FAST_UNALIGNED 1
+%define CONFIG_FFT 1
+%define CONFIG_LSP 1
+%define CONFIG_LZO 0
+%define CONFIG_MDCT 1
+%define CONFIG_PIXELUTILS 0
+%define CONFIG_NETWORK 0
+%define CONFIG_RDFT 1
+%define CONFIG_AUTODETECT 0
+%define CONFIG_FONTCONFIG 0
+%define CONFIG_LARGE_TESTS 1
+%define CONFIG_LINUX_PERF 0
+%define CONFIG_MEMORY_POISONING 0
+%define CONFIG_NEON_CLOBBER_TEST 0
+%define CONFIG_OSSFUZZ 0
+%define CONFIG_PIC 1
+%define CONFIG_THUMB 0
+%define CONFIG_VALGRIND_BACKTRACE 0
+%define CONFIG_XMM_CLOBBER_TEST 0
+%define CONFIG_BSFS 1
+%define CONFIG_DECODERS 1
+%define CONFIG_ENCODERS 0
+%define CONFIG_HWACCELS 0
+%define CONFIG_PARSERS 1
+%define CONFIG_INDEVS 0
+%define CONFIG_OUTDEVS 0
+%define CONFIG_FILTERS 0
+%define CONFIG_DEMUXERS 1
+%define CONFIG_MUXERS 0
+%define CONFIG_PROTOCOLS 0
+%define CONFIG_AANDCTTABLES 0
+%define CONFIG_AC3DSP 0
+%define CONFIG_ADTS_HEADER 1
+%define CONFIG_AUDIO_FRAME_QUEUE 1
+%define CONFIG_AUDIODSP 0
+%define CONFIG_BLOCKDSP 1
+%define CONFIG_BSWAPDSP 0
+%define CONFIG_CABAC 1
+%define CONFIG_CBS 0
+%define CONFIG_CBS_AV1 0
+%define CONFIG_CBS_H264 0
+%define CONFIG_CBS_H265 0
+%define CONFIG_CBS_JPEG 0
+%define CONFIG_CBS_MPEG2 0
+%define CONFIG_CBS_VP9 0
+%define CONFIG_DIRAC_PARSE 1
+%define CONFIG_DNN 0
+%define CONFIG_DVPROFILE 0
+%define CONFIG_EXIF 1
+%define CONFIG_FAANDCT 0
+%define CONFIG_FAANIDCT 0
+%define CONFIG_FDCTDSP 1
+%define CONFIG_FLACDSP 1
+%define CONFIG_FMTCONVERT 0
+%define CONFIG_FRAME_THREAD_ENCODER 0
+%define CONFIG_G722DSP 0
+%define CONFIG_GOLOMB 1
+%define CONFIG_GPLV3 0
+%define CONFIG_H263DSP 1
+%define CONFIG_H264CHROMA 1
+%define CONFIG_H264DSP 1
+%define CONFIG_H264PARSE 1
+%define CONFIG_H264PRED 1
+%define CONFIG_H264QPEL 1
+%define CONFIG_HEVCPARSE 0
+%define CONFIG_HPELDSP 1
+%define CONFIG_HUFFMAN 0
+%define CONFIG_HUFFYUVDSP 0
+%define CONFIG_HUFFYUVENCDSP 0
+%define CONFIG_IDCTDSP 1
+%define CONFIG_IIRFILTER 0
+%define CONFIG_MDCT15 1
+%define CONFIG_INTRAX8 0
+%define CONFIG_ISO_MEDIA 1
+%define CONFIG_IVIDSP 0
+%define CONFIG_JPEGTABLES 0
+%define CONFIG_LGPLV3 0
+%define CONFIG_LIBX262 0
+%define CONFIG_LLAUDDSP 0
+%define CONFIG_LLVIDDSP 0
+%define CONFIG_LLVIDENCDSP 0
+%define CONFIG_LPC 0
+%define CONFIG_LZF 0
+%define CONFIG_ME_CMP 1
+%define CONFIG_MPEG_ER 1
+%define CONFIG_MPEGAUDIO 1
+%define CONFIG_MPEGAUDIODSP 1
+%define CONFIG_MPEGAUDIOHEADER 1
+%define CONFIG_MPEGVIDEO 1
+%define CONFIG_MPEGVIDEOENC 0
+%define CONFIG_MSS34DSP 0
+%define CONFIG_PIXBLOCKDSP 1
+%define CONFIG_QPELDSP 1
+%define CONFIG_QSV 0
+%define CONFIG_QSVDEC 0
+%define CONFIG_QSVENC 0
+%define CONFIG_QSVVPP 0
+%define CONFIG_RANGECODER 0
+%define CONFIG_RIFFDEC 1
+%define CONFIG_RIFFENC 0
+%define CONFIG_RTPDEC 0
+%define CONFIG_RTPENC_CHAIN 0
+%define CONFIG_RV34DSP 0
+%define CONFIG_SCENE_SAD 0
+%define CONFIG_SINEWIN 1
+%define CONFIG_SNAPPY 0
+%define CONFIG_SRTP 0
+%define CONFIG_STARTCODE 1
+%define CONFIG_TEXTUREDSP 0
+%define CONFIG_TEXTUREDSPENC 0
+%define CONFIG_TPELDSP 0
+%define CONFIG_VAAPI_1 0
+%define CONFIG_VAAPI_ENCODE 0
+%define CONFIG_VC1DSP 0
+%define CONFIG_VIDEODSP 1
+%define CONFIG_VP3DSP 1
+%define CONFIG_VP56DSP 0
+%define CONFIG_VP8DSP 1
+%define CONFIG_WMA_FREQS 0
+%define CONFIG_WMV2DSP 0
+%define CONFIG_AAC_ADTSTOASC_BSF 0
+%define CONFIG_AV1_FRAME_MERGE_BSF 0
+%define CONFIG_AV1_FRAME_SPLIT_BSF 0
+%define CONFIG_AV1_METADATA_BSF 0
+%define CONFIG_CHOMP_BSF 0
+%define CONFIG_DUMP_EXTRADATA_BSF 0
+%define CONFIG_DCA_CORE_BSF 0
+%define CONFIG_EAC3_CORE_BSF 0
+%define CONFIG_EXTRACT_EXTRADATA_BSF 0
+%define CONFIG_FILTER_UNITS_BSF 0
+%define CONFIG_H264_METADATA_BSF 0
+%define CONFIG_H264_MP4TOANNEXB_BSF 0
+%define CONFIG_H264_REDUNDANT_PPS_BSF 0
+%define CONFIG_HAPQA_EXTRACT_BSF 0
+%define CONFIG_HEVC_METADATA_BSF 0
+%define CONFIG_HEVC_MP4TOANNEXB_BSF 0
+%define CONFIG_IMX_DUMP_HEADER_BSF 0
+%define CONFIG_MJPEG2JPEG_BSF 0
+%define CONFIG_MJPEGA_DUMP_HEADER_BSF 0
+%define CONFIG_MP3_HEADER_DECOMPRESS_BSF 0
+%define CONFIG_MPEG2_METADATA_BSF 0
+%define CONFIG_MPEG4_UNPACK_BFRAMES_BSF 0
+%define CONFIG_MOV2TEXTSUB_BSF 0
+%define CONFIG_NOISE_BSF 0
+%define CONFIG_NULL_BSF 1
+%define CONFIG_PRORES_METADATA_BSF 0
+%define CONFIG_REMOVE_EXTRADATA_BSF 0
+%define CONFIG_TEXT2MOVSUB_BSF 0
+%define CONFIG_TRACE_HEADERS_BSF 0
+%define CONFIG_TRUEHD_CORE_BSF 0
+%define CONFIG_VP9_METADATA_BSF 0
+%define CONFIG_VP9_RAW_REORDER_BSF 0
+%define CONFIG_VP9_SUPERFRAME_BSF 0
+%define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1
+%define CONFIG_AASC_DECODER 0
+%define CONFIG_AIC_DECODER 0
+%define CONFIG_ALIAS_PIX_DECODER 0
+%define CONFIG_AGM_DECODER 0
+%define CONFIG_AMV_DECODER 0
+%define CONFIG_ANM_DECODER 0
+%define CONFIG_ANSI_DECODER 0
+%define CONFIG_APNG_DECODER 0
+%define CONFIG_ARBC_DECODER 0
+%define CONFIG_ASV1_DECODER 0
+%define CONFIG_ASV2_DECODER 0
+%define CONFIG_AURA_DECODER 0
+%define CONFIG_AURA2_DECODER 0
+%define CONFIG_AVRP_DECODER 0
+%define CONFIG_AVRN_DECODER 0
+%define CONFIG_AVS_DECODER 0
+%define CONFIG_AVUI_DECODER 0
+%define CONFIG_AYUV_DECODER 0
+%define CONFIG_BETHSOFTVID_DECODER 0
+%define CONFIG_BFI_DECODER 0
+%define CONFIG_BINK_DECODER 0
+%define CONFIG_BITPACKED_DECODER 0
+%define CONFIG_BMP_DECODER 0
+%define CONFIG_BMV_VIDEO_DECODER 0
+%define CONFIG_BRENDER_PIX_DECODER 0
+%define CONFIG_C93_DECODER 0
+%define CONFIG_CAVS_DECODER 0
+%define CONFIG_CDGRAPHICS_DECODER 0
+%define CONFIG_CDTOONS_DECODER 0
+%define CONFIG_CDXL_DECODER 0
+%define CONFIG_CFHD_DECODER 0
+%define CONFIG_CINEPAK_DECODER 0
+%define CONFIG_CLEARVIDEO_DECODER 0
+%define CONFIG_CLJR_DECODER 0
+%define CONFIG_CLLC_DECODER 0
+%define CONFIG_COMFORTNOISE_DECODER 0
+%define CONFIG_CPIA_DECODER 0
+%define CONFIG_CSCD_DECODER 0
+%define CONFIG_CYUV_DECODER 0
+%define CONFIG_DDS_DECODER 0
+%define CONFIG_DFA_DECODER 0
+%define CONFIG_DIRAC_DECODER 0
+%define CONFIG_DNXHD_DECODER 0
+%define CONFIG_DPX_DECODER 0
+%define CONFIG_DSICINVIDEO_DECODER 0
+%define CONFIG_DVAUDIO_DECODER 0
+%define CONFIG_DVVIDEO_DECODER 0
+%define CONFIG_DXA_DECODER 0
+%define CONFIG_DXTORY_DECODER 0
+%define CONFIG_DXV_DECODER 0
+%define CONFIG_EACMV_DECODER 0
+%define CONFIG_EAMAD_DECODER 0
+%define CONFIG_EATGQ_DECODER 0
+%define CONFIG_EATGV_DECODER 0
+%define CONFIG_EATQI_DECODER 0
+%define CONFIG_EIGHTBPS_DECODER 0
+%define CONFIG_EIGHTSVX_EXP_DECODER 0
+%define CONFIG_EIGHTSVX_FIB_DECODER 0
+%define CONFIG_ESCAPE124_DECODER 0
+%define CONFIG_ESCAPE130_DECODER 0
+%define CONFIG_EXR_DECODER 0
+%define CONFIG_FFV1_DECODER 0
+%define CONFIG_FFVHUFF_DECODER 0
+%define CONFIG_FIC_DECODER 0
+%define CONFIG_FITS_DECODER 0
+%define CONFIG_FLASHSV_DECODER 0
+%define CONFIG_FLASHSV2_DECODER 0
+%define CONFIG_FLIC_DECODER 0
+%define CONFIG_FLV_DECODER 0
+%define CONFIG_FMVC_DECODER 0
+%define CONFIG_FOURXM_DECODER 0
+%define CONFIG_FRAPS_DECODER 0
+%define CONFIG_FRWU_DECODER 0
+%define CONFIG_G2M_DECODER 0
+%define CONFIG_GDV_DECODER 0
+%define CONFIG_GIF_DECODER 0
+%define CONFIG_H261_DECODER 0
+%define CONFIG_H263_DECODER 1
+%define CONFIG_H263I_DECODER 0
+%define CONFIG_H263P_DECODER 0
+%define CONFIG_H263_V4L2M2M_DECODER 0
+%define CONFIG_H264_DECODER 1
+%define CONFIG_H264_CRYSTALHD_DECODER 0
+%define CONFIG_H264_V4L2M2M_DECODER 0
+%define CONFIG_H264_MEDIACODEC_DECODER 0
+%define CONFIG_H264_MMAL_DECODER 0
+%define CONFIG_H264_QSV_DECODER 0
+%define CONFIG_H264_RKMPP_DECODER 0
+%define CONFIG_HAP_DECODER 0
+%define CONFIG_HEVC_DECODER 0
+%define CONFIG_HEVC_QSV_DECODER 0
+%define CONFIG_HEVC_RKMPP_DECODER 0
+%define CONFIG_HEVC_V4L2M2M_DECODER 0
+%define CONFIG_HNM4_VIDEO_DECODER 0
+%define CONFIG_HQ_HQA_DECODER 0
+%define CONFIG_HQX_DECODER 0
+%define CONFIG_HUFFYUV_DECODER 0
+%define CONFIG_HYMT_DECODER 0
+%define CONFIG_IDCIN_DECODER 0
+%define CONFIG_IFF_ILBM_DECODER 0
+%define CONFIG_IMM4_DECODER 0
+%define CONFIG_IMM5_DECODER 0
+%define CONFIG_INDEO2_DECODER 0
+%define CONFIG_INDEO3_DECODER 0
+%define CONFIG_INDEO4_DECODER 0
+%define CONFIG_INDEO5_DECODER 0
+%define CONFIG_INTERPLAY_VIDEO_DECODER 0
+%define CONFIG_JPEG2000_DECODER 0
+%define CONFIG_JPEGLS_DECODER 0
+%define CONFIG_JV_DECODER 0
+%define CONFIG_KGV1_DECODER 0
+%define CONFIG_KMVC_DECODER 0
+%define CONFIG_LAGARITH_DECODER 0
+%define CONFIG_LOCO_DECODER 0
+%define CONFIG_LSCR_DECODER 0
+%define CONFIG_M101_DECODER 0
+%define CONFIG_MAGICYUV_DECODER 0
+%define CONFIG_MDEC_DECODER 0
+%define CONFIG_MIMIC_DECODER 0
+%define CONFIG_MJPEG_DECODER 0
+%define CONFIG_MJPEGB_DECODER 0
+%define CONFIG_MMVIDEO_DECODER 0
+%define CONFIG_MOTIONPIXELS_DECODER 0
+%define CONFIG_MPEG1VIDEO_DECODER 0
+%define CONFIG_MPEG2VIDEO_DECODER 0
+%define CONFIG_MPEG4_DECODER 1
+%define CONFIG_MPEG4_CRYSTALHD_DECODER 0
+%define CONFIG_MPEG4_V4L2M2M_DECODER 0
+%define CONFIG_MPEG4_MMAL_DECODER 0
+%define CONFIG_MPEGVIDEO_DECODER 0
+%define CONFIG_MPEG1_V4L2M2M_DECODER 0
+%define CONFIG_MPEG2_MMAL_DECODER 0
+%define CONFIG_MPEG2_CRYSTALHD_DECODER 0
+%define CONFIG_MPEG2_V4L2M2M_DECODER 0
+%define CONFIG_MPEG2_QSV_DECODER 0
+%define CONFIG_MPEG2_MEDIACODEC_DECODER 0
+%define CONFIG_MSA1_DECODER 0
+%define CONFIG_MSCC_DECODER 0
+%define CONFIG_MSMPEG4V1_DECODER 0
+%define CONFIG_MSMPEG4V2_DECODER 0
+%define CONFIG_MSMPEG4V3_DECODER 0
+%define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0
+%define CONFIG_MSRLE_DECODER 0
+%define CONFIG_MSS1_DECODER 0
+%define CONFIG_MSS2_DECODER 0
+%define CONFIG_MSVIDEO1_DECODER 0
+%define CONFIG_MSZH_DECODER 0
+%define CONFIG_MTS2_DECODER 0
+%define CONFIG_MV30_DECODER 0
+%define CONFIG_MVC1_DECODER 0
+%define CONFIG_MVC2_DECODER 0
+%define CONFIG_MVDV_DECODER 0
+%define CONFIG_MVHA_DECODER 0
+%define CONFIG_MWSC_DECODER 0
+%define CONFIG_MXPEG_DECODER 0
+%define CONFIG_NUV_DECODER 0
+%define CONFIG_PAF_VIDEO_DECODER 0
+%define CONFIG_PAM_DECODER 0
+%define CONFIG_PBM_DECODER 0
+%define CONFIG_PCX_DECODER 0
+%define CONFIG_PGM_DECODER 0
+%define CONFIG_PGMYUV_DECODER 0
+%define CONFIG_PICTOR_DECODER 0
+%define CONFIG_PIXLET_DECODER 0
+%define CONFIG_PNG_DECODER 0
+%define CONFIG_PPM_DECODER 0
+%define CONFIG_PRORES_DECODER 0
+%define CONFIG_PROSUMER_DECODER 0
+%define CONFIG_PSD_DECODER 0
+%define CONFIG_PTX_DECODER 0
+%define CONFIG_QDRAW_DECODER 0
+%define CONFIG_QPEG_DECODER 0
+%define CONFIG_QTRLE_DECODER 0
+%define CONFIG_R10K_DECODER 0
+%define CONFIG_R210_DECODER 0
+%define CONFIG_RASC_DECODER 0
+%define CONFIG_RAWVIDEO_DECODER 0
+%define CONFIG_RL2_DECODER 0
+%define CONFIG_ROQ_DECODER 0
+%define CONFIG_RPZA_DECODER 0
+%define CONFIG_RSCC_DECODER 0
+%define CONFIG_RV10_DECODER 0
+%define CONFIG_RV20_DECODER 0
+%define CONFIG_RV30_DECODER 0
+%define CONFIG_RV40_DECODER 0
+%define CONFIG_S302M_DECODER 0
+%define CONFIG_SANM_DECODER 0
+%define CONFIG_SCPR_DECODER 0
+%define CONFIG_SCREENPRESSO_DECODER 0
+%define CONFIG_SGI_DECODER 0
+%define CONFIG_SGIRLE_DECODER 0
+%define CONFIG_SHEERVIDEO_DECODER 0
+%define CONFIG_SMACKER_DECODER 0
+%define CONFIG_SMC_DECODER 0
+%define CONFIG_SMVJPEG_DECODER 0
+%define CONFIG_SNOW_DECODER 0
+%define CONFIG_SP5X_DECODER 0
+%define CONFIG_SPEEDHQ_DECODER 0
+%define CONFIG_SRGC_DECODER 0
+%define CONFIG_SUNRAST_DECODER 0
+%define CONFIG_SVQ1_DECODER 0
+%define CONFIG_SVQ3_DECODER 0
+%define CONFIG_TARGA_DECODER 0
+%define CONFIG_TARGA_Y216_DECODER 0
+%define CONFIG_TDSC_DECODER 0
+%define CONFIG_THEORA_DECODER 1
+%define CONFIG_THP_DECODER 0
+%define CONFIG_TIERTEXSEQVIDEO_DECODER 0
+%define CONFIG_TIFF_DECODER 0
+%define CONFIG_TMV_DECODER 0
+%define CONFIG_TRUEMOTION1_DECODER 0
+%define CONFIG_TRUEMOTION2_DECODER 0
+%define CONFIG_TRUEMOTION2RT_DECODER 0
+%define CONFIG_TSCC_DECODER 0
+%define CONFIG_TSCC2_DECODER 0
+%define CONFIG_TXD_DECODER 0
+%define CONFIG_ULTI_DECODER 0
+%define CONFIG_UTVIDEO_DECODER 0
+%define CONFIG_V210_DECODER 0
+%define CONFIG_V210X_DECODER 0
+%define CONFIG_V308_DECODER 0
+%define CONFIG_V408_DECODER 0
+%define CONFIG_V410_DECODER 0
+%define CONFIG_VB_DECODER 0
+%define CONFIG_VBLE_DECODER 0
+%define CONFIG_VC1_DECODER 0
+%define CONFIG_VC1_CRYSTALHD_DECODER 0
+%define CONFIG_VC1IMAGE_DECODER 0
+%define CONFIG_VC1_MMAL_DECODER 0
+%define CONFIG_VC1_QSV_DECODER 0
+%define CONFIG_VC1_V4L2M2M_DECODER 0
+%define CONFIG_VCR1_DECODER 0
+%define CONFIG_VMDVIDEO_DECODER 0
+%define CONFIG_VMNC_DECODER 0
+%define CONFIG_VP3_DECODER 1
+%define CONFIG_VP4_DECODER 0
+%define CONFIG_VP5_DECODER 0
+%define CONFIG_VP6_DECODER 0
+%define CONFIG_VP6A_DECODER 0
+%define CONFIG_VP6F_DECODER 0
+%define CONFIG_VP7_DECODER 0
+%define CONFIG_VP8_DECODER 1
+%define CONFIG_VP8_RKMPP_DECODER 0
+%define CONFIG_VP8_V4L2M2M_DECODER 0
+%define CONFIG_VP9_DECODER 1
+%define CONFIG_VP9_RKMPP_DECODER 0
+%define CONFIG_VP9_V4L2M2M_DECODER 0
+%define CONFIG_VQA_DECODER 0
+%define CONFIG_WEBP_DECODER 0
+%define CONFIG_WCMV_DECODER 0
+%define CONFIG_WRAPPED_AVFRAME_DECODER 0
+%define CONFIG_WMV1_DECODER 0
+%define CONFIG_WMV2_DECODER 0
+%define CONFIG_WMV3_DECODER 0
+%define CONFIG_WMV3_CRYSTALHD_DECODER 0
+%define CONFIG_WMV3IMAGE_DECODER 0
+%define CONFIG_WNV1_DECODER 0
+%define CONFIG_XAN_WC3_DECODER 0
+%define CONFIG_XAN_WC4_DECODER 0
+%define CONFIG_XBM_DECODER 0
+%define CONFIG_XFACE_DECODER 0
+%define CONFIG_XL_DECODER 0
+%define CONFIG_XPM_DECODER 0
+%define CONFIG_XWD_DECODER 0
+%define CONFIG_Y41P_DECODER 0
+%define CONFIG_YLC_DECODER 0
+%define CONFIG_YOP_DECODER 0
+%define CONFIG_YUV4_DECODER 0
+%define CONFIG_ZERO12V_DECODER 0
+%define CONFIG_ZEROCODEC_DECODER 0
+%define CONFIG_ZLIB_DECODER 0
+%define CONFIG_ZMBV_DECODER 0
+%define CONFIG_AAC_DECODER 1
+%define CONFIG_AAC_FIXED_DECODER 0
+%define CONFIG_AAC_LATM_DECODER 1
+%define CONFIG_AC3_DECODER 0
+%define CONFIG_AC3_FIXED_DECODER 0
+%define CONFIG_ACELP_KELVIN_DECODER 0
+%define CONFIG_ALAC_DECODER 0
+%define CONFIG_ALS_DECODER 0
+%define CONFIG_AMRNB_DECODER 1
+%define CONFIG_AMRWB_DECODER 1
+%define CONFIG_APE_DECODER 0
+%define CONFIG_APTX_DECODER 1
+%define CONFIG_APTX_HD_DECODER 0
+%define CONFIG_ATRAC1_DECODER 0
+%define CONFIG_ATRAC3_DECODER 0
+%define CONFIG_ATRAC3AL_DECODER 0
+%define CONFIG_ATRAC3P_DECODER 0
+%define CONFIG_ATRAC3PAL_DECODER 0
+%define CONFIG_ATRAC9_DECODER 0
+%define CONFIG_BINKAUDIO_DCT_DECODER 0
+%define CONFIG_BINKAUDIO_RDFT_DECODER 0
+%define CONFIG_BMV_AUDIO_DECODER 0
+%define CONFIG_COOK_DECODER 0
+%define CONFIG_DCA_DECODER 0
+%define CONFIG_DOLBY_E_DECODER 0
+%define CONFIG_DSD_LSBF_DECODER 0
+%define CONFIG_DSD_MSBF_DECODER 0
+%define CONFIG_DSD_LSBF_PLANAR_DECODER 0
+%define CONFIG_DSD_MSBF_PLANAR_DECODER 0
+%define CONFIG_DSICINAUDIO_DECODER 0
+%define CONFIG_DSS_SP_DECODER 0
+%define CONFIG_DST_DECODER 0
+%define CONFIG_EAC3_DECODER 0
+%define CONFIG_EVRC_DECODER 0
+%define CONFIG_FFWAVESYNTH_DECODER 0
+%define CONFIG_FLAC_DECODER 1
+%define CONFIG_G723_1_DECODER 0
+%define CONFIG_G729_DECODER 0
+%define CONFIG_GSM_DECODER 0
+%define CONFIG_GSM_MS_DECODER 1
+%define CONFIG_HCA_DECODER 0
+%define CONFIG_HCOM_DECODER 0
+%define CONFIG_IAC_DECODER 0
+%define CONFIG_ILBC_DECODER 0
+%define CONFIG_IMC_DECODER 0
+%define CONFIG_INTERPLAY_ACM_DECODER 0
+%define CONFIG_MACE3_DECODER 0
+%define CONFIG_MACE6_DECODER 0
+%define CONFIG_METASOUND_DECODER 0
+%define CONFIG_MLP_DECODER 0
+%define CONFIG_MP1_DECODER 0
+%define CONFIG_MP1FLOAT_DECODER 0
+%define CONFIG_MP2_DECODER 0
+%define CONFIG_MP2FLOAT_DECODER 0
+%define CONFIG_MP3FLOAT_DECODER 0
+%define CONFIG_MP3_DECODER 1
+%define CONFIG_MP3ADUFLOAT_DECODER 0
+%define CONFIG_MP3ADU_DECODER 0
+%define CONFIG_MP3ON4FLOAT_DECODER 0
+%define CONFIG_MP3ON4_DECODER 0
+%define CONFIG_MPC7_DECODER 0
+%define CONFIG_MPC8_DECODER 0
+%define CONFIG_NELLYMOSER_DECODER 0
+%define CONFIG_ON2AVC_DECODER 0
+%define CONFIG_OPUS_DECODER 0
+%define CONFIG_PAF_AUDIO_DECODER 0
+%define CONFIG_QCELP_DECODER 0
+%define CONFIG_QDM2_DECODER 0
+%define CONFIG_QDMC_DECODER 0
+%define CONFIG_RA_144_DECODER 0
+%define CONFIG_RA_288_DECODER 0
+%define CONFIG_RALF_DECODER 0
+%define CONFIG_SBC_DECODER 1
+%define CONFIG_SHORTEN_DECODER 0
+%define CONFIG_SIPR_DECODER 0
+%define CONFIG_SIREN_DECODER 0
+%define CONFIG_SMACKAUD_DECODER 0
+%define CONFIG_SONIC_DECODER 0
+%define CONFIG_TAK_DECODER 0
+%define CONFIG_TRUEHD_DECODER 0
+%define CONFIG_TRUESPEECH_DECODER 0
+%define CONFIG_TTA_DECODER 0
+%define CONFIG_TWINVQ_DECODER 0
+%define CONFIG_VMDAUDIO_DECODER 0
+%define CONFIG_VORBIS_DECODER 1
+%define CONFIG_WAVPACK_DECODER 0
+%define CONFIG_WMALOSSLESS_DECODER 0
+%define CONFIG_WMAPRO_DECODER 0
+%define CONFIG_WMAV1_DECODER 0
+%define CONFIG_WMAV2_DECODER 0
+%define CONFIG_WMAVOICE_DECODER 0
+%define CONFIG_WS_SND1_DECODER 0
+%define CONFIG_XMA1_DECODER 0
+%define CONFIG_XMA2_DECODER 0
+%define CONFIG_PCM_ALAW_DECODER 1
+%define CONFIG_PCM_BLURAY_DECODER 0
+%define CONFIG_PCM_DVD_DECODER 0
+%define CONFIG_PCM_F16LE_DECODER 0
+%define CONFIG_PCM_F24LE_DECODER 0
+%define CONFIG_PCM_F32BE_DECODER 0
+%define CONFIG_PCM_F32LE_DECODER 1
+%define CONFIG_PCM_F64BE_DECODER 0
+%define CONFIG_PCM_F64LE_DECODER 0
+%define CONFIG_PCM_LXF_DECODER 0
+%define CONFIG_PCM_MULAW_DECODER 1
+%define CONFIG_PCM_S8_DECODER 0
+%define CONFIG_PCM_S8_PLANAR_DECODER 0
+%define CONFIG_PCM_S16BE_DECODER 1
+%define CONFIG_PCM_S16BE_PLANAR_DECODER 0
+%define CONFIG_PCM_S16LE_DECODER 1
+%define CONFIG_PCM_S16LE_PLANAR_DECODER 0
+%define CONFIG_PCM_S24BE_DECODER 1
+%define CONFIG_PCM_S24DAUD_DECODER 0
+%define CONFIG_PCM_S24LE_DECODER 1
+%define CONFIG_PCM_S24LE_PLANAR_DECODER 0
+%define CONFIG_PCM_S32BE_DECODER 0
+%define CONFIG_PCM_S32LE_DECODER 1
+%define CONFIG_PCM_S32LE_PLANAR_DECODER 0
+%define CONFIG_PCM_S64BE_DECODER 0
+%define CONFIG_PCM_S64LE_DECODER 0
+%define CONFIG_PCM_U8_DECODER 1
+%define CONFIG_PCM_U16BE_DECODER 0
+%define CONFIG_PCM_U16LE_DECODER 0
+%define CONFIG_PCM_U24BE_DECODER 0
+%define CONFIG_PCM_U24LE_DECODER 0
+%define CONFIG_PCM_U32BE_DECODER 0
+%define CONFIG_PCM_U32LE_DECODER 0
+%define CONFIG_PCM_VIDC_DECODER 0
+%define CONFIG_DERF_DPCM_DECODER 0
+%define CONFIG_GREMLIN_DPCM_DECODER 0
+%define CONFIG_INTERPLAY_DPCM_DECODER 0
+%define CONFIG_ROQ_DPCM_DECODER 0
+%define CONFIG_SDX2_DPCM_DECODER 0
+%define CONFIG_SOL_DPCM_DECODER 0
+%define CONFIG_XAN_DPCM_DECODER 0
+%define CONFIG_ADPCM_4XM_DECODER 0
+%define CONFIG_ADPCM_ADX_DECODER 0
+%define CONFIG_ADPCM_AFC_DECODER 0
+%define CONFIG_ADPCM_AGM_DECODER 0
+%define CONFIG_ADPCM_AICA_DECODER 0
+%define CONFIG_ADPCM_ARGO_DECODER 0
+%define CONFIG_ADPCM_CT_DECODER 0
+%define CONFIG_ADPCM_DTK_DECODER 0
+%define CONFIG_ADPCM_EA_DECODER 0
+%define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0
+%define CONFIG_ADPCM_EA_R1_DECODER 0
+%define CONFIG_ADPCM_EA_R2_DECODER 0
+%define CONFIG_ADPCM_EA_R3_DECODER 0
+%define CONFIG_ADPCM_EA_XAS_DECODER 0
+%define CONFIG_ADPCM_G722_DECODER 0
+%define CONFIG_ADPCM_G726_DECODER 0
+%define CONFIG_ADPCM_G726LE_DECODER 0
+%define CONFIG_ADPCM_IMA_AMV_DECODER 0
+%define CONFIG_ADPCM_IMA_ALP_DECODER 0
+%define CONFIG_ADPCM_IMA_APC_DECODER 0
+%define CONFIG_ADPCM_IMA_APM_DECODER 0
+%define CONFIG_ADPCM_IMA_DAT4_DECODER 0
+%define CONFIG_ADPCM_IMA_DK3_DECODER 0
+%define CONFIG_ADPCM_IMA_DK4_DECODER 0
+%define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0
+%define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0
+%define CONFIG_ADPCM_IMA_ISS_DECODER 0
+%define CONFIG_ADPCM_IMA_MTF_DECODER 0
+%define CONFIG_ADPCM_IMA_OKI_DECODER 0
+%define CONFIG_ADPCM_IMA_QT_DECODER 0
+%define CONFIG_ADPCM_IMA_RAD_DECODER 0
+%define CONFIG_ADPCM_IMA_SSI_DECODER 0
+%define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0
+%define CONFIG_ADPCM_IMA_WAV_DECODER 0
+%define CONFIG_ADPCM_IMA_WS_DECODER 0
+%define CONFIG_ADPCM_MS_DECODER 0
+%define CONFIG_ADPCM_MTAF_DECODER 0
+%define CONFIG_ADPCM_PSX_DECODER 0
+%define CONFIG_ADPCM_SBPRO_2_DECODER 0
+%define CONFIG_ADPCM_SBPRO_3_DECODER 0
+%define CONFIG_ADPCM_SBPRO_4_DECODER 0
+%define CONFIG_ADPCM_SWF_DECODER 0
+%define CONFIG_ADPCM_THP_DECODER 0
+%define CONFIG_ADPCM_THP_LE_DECODER 0
+%define CONFIG_ADPCM_VIMA_DECODER 0
+%define CONFIG_ADPCM_XA_DECODER 0
+%define CONFIG_ADPCM_YAMAHA_DECODER 0
+%define CONFIG_ADPCM_ZORK_DECODER 0
+%define CONFIG_SSA_DECODER 0
+%define CONFIG_ASS_DECODER 0
+%define CONFIG_CCAPTION_DECODER 0
+%define CONFIG_DVBSUB_DECODER 0
+%define CONFIG_DVDSUB_DECODER 0
+%define CONFIG_JACOSUB_DECODER 0
+%define CONFIG_MICRODVD_DECODER 0
+%define CONFIG_MOVTEXT_DECODER 0
+%define CONFIG_MPL2_DECODER 0
+%define CONFIG_PGSSUB_DECODER 0
+%define CONFIG_PJS_DECODER 0
+%define CONFIG_REALTEXT_DECODER 0
+%define CONFIG_SAMI_DECODER 0
+%define CONFIG_SRT_DECODER 0
+%define CONFIG_STL_DECODER 0
+%define CONFIG_SUBRIP_DECODER 0
+%define CONFIG_SUBVIEWER_DECODER 0
+%define CONFIG_SUBVIEWER1_DECODER 0
+%define CONFIG_TEXT_DECODER 0
+%define CONFIG_VPLAYER_DECODER 0
+%define CONFIG_WEBVTT_DECODER 0
+%define CONFIG_XSUB_DECODER 0
+%define CONFIG_AAC_AT_DECODER 0
+%define CONFIG_AC3_AT_DECODER 0
+%define CONFIG_ADPCM_IMA_QT_AT_DECODER 0
+%define CONFIG_ALAC_AT_DECODER 0
+%define CONFIG_AMR_NB_AT_DECODER 0
+%define CONFIG_EAC3_AT_DECODER 0
+%define CONFIG_GSM_MS_AT_DECODER 0
+%define CONFIG_ILBC_AT_DECODER 0
+%define CONFIG_MP1_AT_DECODER 0
+%define CONFIG_MP2_AT_DECODER 0
+%define CONFIG_MP3_AT_DECODER 0
+%define CONFIG_PCM_ALAW_AT_DECODER 0
+%define CONFIG_PCM_MULAW_AT_DECODER 0
+%define CONFIG_QDMC_AT_DECODER 0
+%define CONFIG_QDM2_AT_DECODER 0
+%define CONFIG_LIBARIBB24_DECODER 0
+%define CONFIG_LIBCELT_DECODER 0
+%define CONFIG_LIBCODEC2_DECODER 0
+%define CONFIG_LIBDAV1D_DECODER 0
+%define CONFIG_LIBDAVS2_DECODER 0
+%define CONFIG_LIBFDK_AAC_DECODER 0
+%define CONFIG_LIBGSM_DECODER 0
+%define CONFIG_LIBGSM_MS_DECODER 0
+%define CONFIG_LIBILBC_DECODER 0
+%define CONFIG_LIBOPENCORE_AMRNB_DECODER 0
+%define CONFIG_LIBOPENCORE_AMRWB_DECODER 0
+%define CONFIG_LIBOPENJPEG_DECODER 0
+%define CONFIG_LIBOPUS_DECODER 1
+%define CONFIG_LIBRSVG_DECODER 0
+%define CONFIG_LIBSPEEX_DECODER 0
+%define CONFIG_LIBVORBIS_DECODER 0
+%define CONFIG_LIBVPX_VP8_DECODER 0
+%define CONFIG_LIBVPX_VP9_DECODER 0
+%define CONFIG_LIBZVBI_TELETEXT_DECODER 0
+%define CONFIG_BINTEXT_DECODER 0
+%define CONFIG_XBIN_DECODER 0
+%define CONFIG_IDF_DECODER 0
+%define CONFIG_LIBAOM_AV1_DECODER 0
+%define CONFIG_LIBOPENH264_DECODER 0
+%define CONFIG_H264_CUVID_DECODER 0
+%define CONFIG_HEVC_CUVID_DECODER 0
+%define CONFIG_HEVC_MEDIACODEC_DECODER 0
+%define CONFIG_MJPEG_CUVID_DECODER 0
+%define CONFIG_MJPEG_QSV_DECODER 0
+%define CONFIG_MPEG1_CUVID_DECODER 0
+%define CONFIG_MPEG2_CUVID_DECODER 0
+%define CONFIG_MPEG4_CUVID_DECODER 0
+%define CONFIG_MPEG4_MEDIACODEC_DECODER 0
+%define CONFIG_VC1_CUVID_DECODER 0
+%define CONFIG_VP8_CUVID_DECODER 0
+%define CONFIG_VP8_MEDIACODEC_DECODER 0
+%define CONFIG_VP8_QSV_DECODER 0
+%define CONFIG_VP9_CUVID_DECODER 0
+%define CONFIG_VP9_MEDIACODEC_DECODER 0
+%define CONFIG_VP9_QSV_DECODER 0
+%define CONFIG_A64MULTI_ENCODER 0
+%define CONFIG_A64MULTI5_ENCODER 0
+%define CONFIG_ALIAS_PIX_ENCODER 0
+%define CONFIG_AMV_ENCODER 0
+%define CONFIG_APNG_ENCODER 0
+%define CONFIG_ASV1_ENCODER 0
+%define CONFIG_ASV2_ENCODER 0
+%define CONFIG_AVRP_ENCODER 0
+%define CONFIG_AVUI_ENCODER 0
+%define CONFIG_AYUV_ENCODER 0
+%define CONFIG_BMP_ENCODER 0
+%define CONFIG_CINEPAK_ENCODER 0
+%define CONFIG_CLJR_ENCODER 0
+%define CONFIG_COMFORTNOISE_ENCODER 0
+%define CONFIG_DNXHD_ENCODER 0
+%define CONFIG_DPX_ENCODER 0
+%define CONFIG_DVVIDEO_ENCODER 0
+%define CONFIG_FFV1_ENCODER 0
+%define CONFIG_FFVHUFF_ENCODER 0
+%define CONFIG_FITS_ENCODER 0
+%define CONFIG_FLASHSV_ENCODER 0
+%define CONFIG_FLASHSV2_ENCODER 0
+%define CONFIG_FLV_ENCODER 0
+%define CONFIG_GIF_ENCODER 0
+%define CONFIG_H261_ENCODER 0
+%define CONFIG_H263_ENCODER 0
+%define CONFIG_H263P_ENCODER 0
+%define CONFIG_HAP_ENCODER 0
+%define CONFIG_HUFFYUV_ENCODER 0
+%define CONFIG_JPEG2000_ENCODER 0
+%define CONFIG_JPEGLS_ENCODER 0
+%define CONFIG_LJPEG_ENCODER 0
+%define CONFIG_MAGICYUV_ENCODER 0
+%define CONFIG_MJPEG_ENCODER 0
+%define CONFIG_MPEG1VIDEO_ENCODER 0
+%define CONFIG_MPEG2VIDEO_ENCODER 0
+%define CONFIG_MPEG4_ENCODER 0
+%define CONFIG_MSMPEG4V2_ENCODER 0
+%define CONFIG_MSMPEG4V3_ENCODER 0
+%define CONFIG_MSVIDEO1_ENCODER 0
+%define CONFIG_PAM_ENCODER 0
+%define CONFIG_PBM_ENCODER 0
+%define CONFIG_PCX_ENCODER 0
+%define CONFIG_PGM_ENCODER 0
+%define CONFIG_PGMYUV_ENCODER 0
+%define CONFIG_PNG_ENCODER 0
+%define CONFIG_PPM_ENCODER 0
+%define CONFIG_PRORES_ENCODER 0
+%define CONFIG_PRORES_AW_ENCODER 0
+%define CONFIG_PRORES_KS_ENCODER 0
+%define CONFIG_QTRLE_ENCODER 0
+%define CONFIG_R10K_ENCODER 0
+%define CONFIG_R210_ENCODER 0
+%define CONFIG_RAWVIDEO_ENCODER 0
+%define CONFIG_ROQ_ENCODER 0
+%define CONFIG_RV10_ENCODER 0
+%define CONFIG_RV20_ENCODER 0
+%define CONFIG_S302M_ENCODER 0
+%define CONFIG_SGI_ENCODER 0
+%define CONFIG_SNOW_ENCODER 0
+%define CONFIG_SUNRAST_ENCODER 0
+%define CONFIG_SVQ1_ENCODER 0
+%define CONFIG_TARGA_ENCODER 0
+%define CONFIG_TIFF_ENCODER 0
+%define CONFIG_UTVIDEO_ENCODER 0
+%define CONFIG_V210_ENCODER 0
+%define CONFIG_V308_ENCODER 0
+%define CONFIG_V408_ENCODER 0
+%define CONFIG_V410_ENCODER 0
+%define CONFIG_VC2_ENCODER 0
+%define CONFIG_WRAPPED_AVFRAME_ENCODER 0
+%define CONFIG_WMV1_ENCODER 0
+%define CONFIG_WMV2_ENCODER 0
+%define CONFIG_XBM_ENCODER 0
+%define CONFIG_XFACE_ENCODER 0
+%define CONFIG_XWD_ENCODER 0
+%define CONFIG_Y41P_ENCODER 0
+%define CONFIG_YUV4_ENCODER 0
+%define CONFIG_ZLIB_ENCODER 0
+%define CONFIG_ZMBV_ENCODER 0
+%define CONFIG_AAC_ENCODER 0
+%define CONFIG_AC3_ENCODER 0
+%define CONFIG_AC3_FIXED_ENCODER 0
+%define CONFIG_ALAC_ENCODER 0
+%define CONFIG_APTX_ENCODER 0
+%define CONFIG_APTX_HD_ENCODER 0
+%define CONFIG_DCA_ENCODER 0
+%define CONFIG_EAC3_ENCODER 0
+%define CONFIG_FLAC_ENCODER 0
+%define CONFIG_G723_1_ENCODER 0
+%define CONFIG_MLP_ENCODER 0
+%define CONFIG_MP2_ENCODER 0
+%define CONFIG_MP2FIXED_ENCODER 0
+%define CONFIG_NELLYMOSER_ENCODER 0
+%define CONFIG_OPUS_ENCODER 0
+%define CONFIG_RA_144_ENCODER 0
+%define CONFIG_SBC_ENCODER 0
+%define CONFIG_SONIC_ENCODER 0
+%define CONFIG_SONIC_LS_ENCODER 0
+%define CONFIG_TRUEHD_ENCODER 0
+%define CONFIG_TTA_ENCODER 0
+%define CONFIG_VORBIS_ENCODER 0
+%define CONFIG_WAVPACK_ENCODER 0
+%define CONFIG_WMAV1_ENCODER 0
+%define CONFIG_WMAV2_ENCODER 0
+%define CONFIG_PCM_ALAW_ENCODER 0
+%define CONFIG_PCM_DVD_ENCODER 0
+%define CONFIG_PCM_F32BE_ENCODER 0
+%define CONFIG_PCM_F32LE_ENCODER 0
+%define CONFIG_PCM_F64BE_ENCODER 0
+%define CONFIG_PCM_F64LE_ENCODER 0
+%define CONFIG_PCM_MULAW_ENCODER 0
+%define CONFIG_PCM_S8_ENCODER 0
+%define CONFIG_PCM_S8_PLANAR_ENCODER 0
+%define CONFIG_PCM_S16BE_ENCODER 0
+%define CONFIG_PCM_S16BE_PLANAR_ENCODER 0
+%define CONFIG_PCM_S16LE_ENCODER 0
+%define CONFIG_PCM_S16LE_PLANAR_ENCODER 0
+%define CONFIG_PCM_S24BE_ENCODER 0
+%define CONFIG_PCM_S24DAUD_ENCODER 0
+%define CONFIG_PCM_S24LE_ENCODER 0
+%define CONFIG_PCM_S24LE_PLANAR_ENCODER 0
+%define CONFIG_PCM_S32BE_ENCODER 0
+%define CONFIG_PCM_S32LE_ENCODER 0
+%define CONFIG_PCM_S32LE_PLANAR_ENCODER 0
+%define CONFIG_PCM_S64BE_ENCODER 0
+%define CONFIG_PCM_S64LE_ENCODER 0
+%define CONFIG_PCM_U8_ENCODER 0
+%define CONFIG_PCM_U16BE_ENCODER 0
+%define CONFIG_PCM_U16LE_ENCODER 0
+%define CONFIG_PCM_U24BE_ENCODER 0
+%define CONFIG_PCM_U24LE_ENCODER 0
+%define CONFIG_PCM_U32BE_ENCODER 0
+%define CONFIG_PCM_U32LE_ENCODER 0
+%define CONFIG_PCM_VIDC_ENCODER 0
+%define CONFIG_ROQ_DPCM_ENCODER 0
+%define CONFIG_ADPCM_ADX_ENCODER 0
+%define CONFIG_ADPCM_G722_ENCODER 0
+%define CONFIG_ADPCM_G726_ENCODER 0
+%define CONFIG_ADPCM_G726LE_ENCODER 0
+%define CONFIG_ADPCM_IMA_QT_ENCODER 0
+%define CONFIG_ADPCM_IMA_WAV_ENCODER 0
+%define CONFIG_ADPCM_MS_ENCODER 0
+%define CONFIG_ADPCM_SWF_ENCODER 0
+%define CONFIG_ADPCM_YAMAHA_ENCODER 0
+%define CONFIG_SSA_ENCODER 0
+%define CONFIG_ASS_ENCODER 0
+%define CONFIG_DVBSUB_ENCODER 0
+%define CONFIG_DVDSUB_ENCODER 0
+%define CONFIG_MOVTEXT_ENCODER 0
+%define CONFIG_SRT_ENCODER 0
+%define CONFIG_SUBRIP_ENCODER 0
+%define CONFIG_TEXT_ENCODER 0
+%define CONFIG_WEBVTT_ENCODER 0
+%define CONFIG_XSUB_ENCODER 0
+%define CONFIG_AAC_AT_ENCODER 0
+%define CONFIG_ALAC_AT_ENCODER 0
+%define CONFIG_ILBC_AT_ENCODER 0
+%define CONFIG_PCM_ALAW_AT_ENCODER 0
+%define CONFIG_PCM_MULAW_AT_ENCODER 0
+%define CONFIG_LIBAOM_AV1_ENCODER 0
+%define CONFIG_LIBCODEC2_ENCODER 0
+%define CONFIG_LIBFDK_AAC_ENCODER 0
+%define CONFIG_LIBGSM_ENCODER 0
+%define CONFIG_LIBGSM_MS_ENCODER 0
+%define CONFIG_LIBILBC_ENCODER 0
+%define CONFIG_LIBMP3LAME_ENCODER 0
+%define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0
+%define CONFIG_LIBOPENJPEG_ENCODER 0
+%define CONFIG_LIBOPUS_ENCODER 0
+%define CONFIG_LIBRAV1E_ENCODER 0
+%define CONFIG_LIBSHINE_ENCODER 0
+%define CONFIG_LIBSPEEX_ENCODER 0
+%define CONFIG_LIBTHEORA_ENCODER 0
+%define CONFIG_LIBTWOLAME_ENCODER 0
+%define CONFIG_LIBVO_AMRWBENC_ENCODER 0
+%define CONFIG_LIBVORBIS_ENCODER 0
+%define CONFIG_LIBVPX_VP8_ENCODER 0
+%define CONFIG_LIBVPX_VP9_ENCODER 0
+%define CONFIG_LIBWAVPACK_ENCODER 0
+%define CONFIG_LIBWEBP_ANIM_ENCODER 0
+%define CONFIG_LIBWEBP_ENCODER 0
+%define CONFIG_LIBX262_ENCODER 0
+%define CONFIG_LIBX264_ENCODER 0
+%define CONFIG_LIBX264RGB_ENCODER 0
+%define CONFIG_LIBX265_ENCODER 0
+%define CONFIG_LIBXAVS_ENCODER 0
+%define CONFIG_LIBXAVS2_ENCODER 0
+%define CONFIG_LIBXVID_ENCODER 0
+%define CONFIG_H263_V4L2M2M_ENCODER 0
+%define CONFIG_LIBOPENH264_ENCODER 0
+%define CONFIG_H264_AMF_ENCODER 0
+%define CONFIG_H264_NVENC_ENCODER 0
+%define CONFIG_H264_OMX_ENCODER 0
+%define CONFIG_H264_QSV_ENCODER 0
+%define CONFIG_H264_V4L2M2M_ENCODER 0
+%define CONFIG_H264_VAAPI_ENCODER 0
+%define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0
+%define CONFIG_NVENC_ENCODER 0
+%define CONFIG_NVENC_H264_ENCODER 0
+%define CONFIG_NVENC_HEVC_ENCODER 0
+%define CONFIG_HEVC_AMF_ENCODER 0
+%define CONFIG_HEVC_NVENC_ENCODER 0
+%define CONFIG_HEVC_QSV_ENCODER 0
+%define CONFIG_HEVC_V4L2M2M_ENCODER 0
+%define CONFIG_HEVC_VAAPI_ENCODER 0
+%define CONFIG_HEVC_VIDEOTOOLBOX_ENCODER 0
+%define CONFIG_LIBKVAZAAR_ENCODER 0
+%define CONFIG_MJPEG_QSV_ENCODER 0
+%define CONFIG_MJPEG_VAAPI_ENCODER 0
+%define CONFIG_MPEG2_QSV_ENCODER 0
+%define CONFIG_MPEG2_VAAPI_ENCODER 0
+%define CONFIG_MPEG4_OMX_ENCODER 0
+%define CONFIG_MPEG4_V4L2M2M_ENCODER 0
+%define CONFIG_VP8_V4L2M2M_ENCODER 0
+%define CONFIG_VP8_VAAPI_ENCODER 0
+%define CONFIG_VP9_VAAPI_ENCODER 0
+%define CONFIG_VP9_QSV_ENCODER 0
+%define CONFIG_H263_VAAPI_HWACCEL 0
+%define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0
+%define CONFIG_H264_D3D11VA_HWACCEL 0
+%define CONFIG_H264_D3D11VA2_HWACCEL 0
+%define CONFIG_H264_DXVA2_HWACCEL 0
+%define CONFIG_H264_NVDEC_HWACCEL 0
+%define CONFIG_H264_VAAPI_HWACCEL 0
+%define CONFIG_H264_VDPAU_HWACCEL 0
+%define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0
+%define CONFIG_HEVC_D3D11VA_HWACCEL 0
+%define CONFIG_HEVC_D3D11VA2_HWACCEL 0
+%define CONFIG_HEVC_DXVA2_HWACCEL 0
+%define CONFIG_HEVC_NVDEC_HWACCEL 0
+%define CONFIG_HEVC_VAAPI_HWACCEL 0
+%define CONFIG_HEVC_VDPAU_HWACCEL 0
+%define CONFIG_HEVC_VIDEOTOOLBOX_HWACCEL 0
+%define CONFIG_MJPEG_NVDEC_HWACCEL 0
+%define CONFIG_MJPEG_VAAPI_HWACCEL 0
+%define CONFIG_MPEG1_NVDEC_HWACCEL 0
+%define CONFIG_MPEG1_VDPAU_HWACCEL 0
+%define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0
+%define CONFIG_MPEG1_XVMC_HWACCEL 0
+%define CONFIG_MPEG2_D3D11VA_HWACCEL 0
+%define CONFIG_MPEG2_D3D11VA2_HWACCEL 0
+%define CONFIG_MPEG2_NVDEC_HWACCEL 0
+%define CONFIG_MPEG2_DXVA2_HWACCEL 0
+%define CONFIG_MPEG2_VAAPI_HWACCEL 0
+%define CONFIG_MPEG2_VDPAU_HWACCEL 0
+%define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0
+%define CONFIG_MPEG2_XVMC_HWACCEL 0
+%define CONFIG_MPEG4_NVDEC_HWACCEL 0
+%define CONFIG_MPEG4_VAAPI_HWACCEL 0
+%define CONFIG_MPEG4_VDPAU_HWACCEL 0
+%define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0
+%define CONFIG_VC1_D3D11VA_HWACCEL 0
+%define CONFIG_VC1_D3D11VA2_HWACCEL 0
+%define CONFIG_VC1_DXVA2_HWACCEL 0
+%define CONFIG_VC1_NVDEC_HWACCEL 0
+%define CONFIG_VC1_VAAPI_HWACCEL 0
+%define CONFIG_VC1_VDPAU_HWACCEL 0
+%define CONFIG_VP8_NVDEC_HWACCEL 0
+%define CONFIG_VP8_VAAPI_HWACCEL 0
+%define CONFIG_VP9_D3D11VA_HWACCEL 0
+%define CONFIG_VP9_D3D11VA2_HWACCEL 0
+%define CONFIG_VP9_DXVA2_HWACCEL 0
+%define CONFIG_VP9_NVDEC_HWACCEL 0
+%define CONFIG_VP9_VAAPI_HWACCEL 0
+%define CONFIG_VP9_VDPAU_HWACCEL 0
+%define CONFIG_WMV3_D3D11VA_HWACCEL 0
+%define CONFIG_WMV3_D3D11VA2_HWACCEL 0
+%define CONFIG_WMV3_DXVA2_HWACCEL 0
+%define CONFIG_WMV3_NVDEC_HWACCEL 0
+%define CONFIG_WMV3_VAAPI_HWACCEL 0
+%define CONFIG_WMV3_VDPAU_HWACCEL 0
+%define CONFIG_AAC_PARSER 1
+%define CONFIG_AAC_LATM_PARSER 1
+%define CONFIG_AC3_PARSER 0
+%define CONFIG_ADX_PARSER 0
+%define CONFIG_AV1_PARSER 0
+%define CONFIG_AVS2_PARSER 0
+%define CONFIG_BMP_PARSER 0
+%define CONFIG_CAVSVIDEO_PARSER 0
+%define CONFIG_COOK_PARSER 0
+%define CONFIG_DCA_PARSER 0
+%define CONFIG_DIRAC_PARSER 0
+%define CONFIG_DNXHD_PARSER 0
+%define CONFIG_DPX_PARSER 0
+%define CONFIG_DVAUDIO_PARSER 0
+%define CONFIG_DVBSUB_PARSER 0
+%define CONFIG_DVDSUB_PARSER 0
+%define CONFIG_DVD_NAV_PARSER 0
+%define CONFIG_FLAC_PARSER 1
+%define CONFIG_G723_1_PARSER 0
+%define CONFIG_G729_PARSER 0
+%define CONFIG_GIF_PARSER 0
+%define CONFIG_GSM_PARSER 1
+%define CONFIG_H261_PARSER 0
+%define CONFIG_H263_PARSER 1
+%define CONFIG_H264_PARSER 1
+%define CONFIG_HEVC_PARSER 0
+%define CONFIG_MJPEG_PARSER 0
+%define CONFIG_MLP_PARSER 0
+%define CONFIG_MPEG4VIDEO_PARSER 1
+%define CONFIG_MPEGAUDIO_PARSER 1
+%define CONFIG_MPEGVIDEO_PARSER 0
+%define CONFIG_OPUS_PARSER 1
+%define CONFIG_PNG_PARSER 0
+%define CONFIG_PNM_PARSER 0
+%define CONFIG_RV30_PARSER 0
+%define CONFIG_RV40_PARSER 0
+%define CONFIG_SBC_PARSER 0
+%define CONFIG_SIPR_PARSER 0
+%define CONFIG_TAK_PARSER 0
+%define CONFIG_VC1_PARSER 0
+%define CONFIG_VORBIS_PARSER 1
+%define CONFIG_VP3_PARSER 1
+%define CONFIG_VP8_PARSER 1
+%define CONFIG_VP9_PARSER 1
+%define CONFIG_WEBP_PARSER 0
+%define CONFIG_XMA_PARSER 0
+%define CONFIG_ALSA_INDEV 0
+%define CONFIG_ANDROID_CAMERA_INDEV 0
+%define CONFIG_AVFOUNDATION_INDEV 0
+%define CONFIG_BKTR_INDEV 0
+%define CONFIG_DECKLINK_INDEV 0
+%define CONFIG_DSHOW_INDEV 0
+%define CONFIG_FBDEV_INDEV 0
+%define CONFIG_GDIGRAB_INDEV 0
+%define CONFIG_IEC61883_INDEV 0
+%define CONFIG_JACK_INDEV 0
+%define CONFIG_KMSGRAB_INDEV 0
+%define CONFIG_LAVFI_INDEV 0
+%define CONFIG_OPENAL_INDEV 0
+%define CONFIG_OSS_INDEV 0
+%define CONFIG_PULSE_INDEV 0
+%define CONFIG_SNDIO_INDEV 0
+%define CONFIG_V4L2_INDEV 0
+%define CONFIG_VFWCAP_INDEV 0
+%define CONFIG_XCBGRAB_INDEV 0
+%define CONFIG_LIBCDIO_INDEV 0
+%define CONFIG_LIBDC1394_INDEV 0
+%define CONFIG_ALSA_OUTDEV 0
+%define CONFIG_CACA_OUTDEV 0
+%define CONFIG_DECKLINK_OUTDEV 0
+%define CONFIG_FBDEV_OUTDEV 0
+%define CONFIG_OPENGL_OUTDEV 0
+%define CONFIG_OSS_OUTDEV 0
+%define CONFIG_PULSE_OUTDEV 0
+%define CONFIG_SDL2_OUTDEV 0
+%define CONFIG_SNDIO_OUTDEV 0
+%define CONFIG_V4L2_OUTDEV 0
+%define CONFIG_XV_OUTDEV 0
+%define CONFIG_ABENCH_FILTER 0
+%define CONFIG_ACOMPRESSOR_FILTER 0
+%define CONFIG_ACONTRAST_FILTER 0
+%define CONFIG_ACOPY_FILTER 0
+%define CONFIG_ACUE_FILTER 0
+%define CONFIG_ACROSSFADE_FILTER 0
+%define CONFIG_ACROSSOVER_FILTER 0
+%define CONFIG_ACRUSHER_FILTER 0
+%define CONFIG_ADECLICK_FILTER 0
+%define CONFIG_ADECLIP_FILTER 0
+%define CONFIG_ADELAY_FILTER 0
+%define CONFIG_ADERIVATIVE_FILTER 0
+%define CONFIG_AECHO_FILTER 0
+%define CONFIG_AEMPHASIS_FILTER 0
+%define CONFIG_AEVAL_FILTER 0
+%define CONFIG_AFADE_FILTER 0
+%define CONFIG_AFFTDN_FILTER 0
+%define CONFIG_AFFTFILT_FILTER 0
+%define CONFIG_AFIR_FILTER 0
+%define CONFIG_AFORMAT_FILTER 0
+%define CONFIG_AGATE_FILTER 0
+%define CONFIG_AIIR_FILTER 0
+%define CONFIG_AINTEGRAL_FILTER 0
+%define CONFIG_AINTERLEAVE_FILTER 0
+%define CONFIG_ALIMITER_FILTER 0
+%define CONFIG_ALLPASS_FILTER 0
+%define CONFIG_ALOOP_FILTER 0
+%define CONFIG_AMERGE_FILTER 0
+%define CONFIG_AMETADATA_FILTER 0
+%define CONFIG_AMIX_FILTER 0
+%define CONFIG_AMULTIPLY_FILTER 0
+%define CONFIG_ANEQUALIZER_FILTER 0
+%define CONFIG_ANLMDN_FILTER 0
+%define CONFIG_ANLMS_FILTER 0
+%define CONFIG_ANULL_FILTER 0
+%define CONFIG_APAD_FILTER 0
+%define CONFIG_APERMS_FILTER 0
+%define CONFIG_APHASER_FILTER 0
+%define CONFIG_APULSATOR_FILTER 0
+%define CONFIG_AREALTIME_FILTER 0
+%define CONFIG_ARESAMPLE_FILTER 0
+%define CONFIG_AREVERSE_FILTER 0
+%define CONFIG_ARNNDN_FILTER 0
+%define CONFIG_ASELECT_FILTER 0
+%define CONFIG_ASENDCMD_FILTER 0
+%define CONFIG_ASETNSAMPLES_FILTER 0
+%define CONFIG_ASETPTS_FILTER 0
+%define CONFIG_ASETRATE_FILTER 0
+%define CONFIG_ASETTB_FILTER 0
+%define CONFIG_ASHOWINFO_FILTER 0
+%define CONFIG_ASIDEDATA_FILTER 0
+%define CONFIG_ASOFTCLIP_FILTER 0
+%define CONFIG_ASPLIT_FILTER 0
+%define CONFIG_ASR_FILTER 0
+%define CONFIG_ASTATS_FILTER 0
+%define CONFIG_ASTREAMSELECT_FILTER 0
+%define CONFIG_ATEMPO_FILTER 0
+%define CONFIG_ATRIM_FILTER 0
+%define CONFIG_AXCORRELATE_FILTER 0
+%define CONFIG_AZMQ_FILTER 0
+%define CONFIG_BANDPASS_FILTER 0
+%define CONFIG_BANDREJECT_FILTER 0
+%define CONFIG_BASS_FILTER 0
+%define CONFIG_BIQUAD_FILTER 0
+%define CONFIG_BS2B_FILTER 0
+%define CONFIG_CHROMABER_VULKAN_FILTER 0
+%define CONFIG_CHANNELMAP_FILTER 0
+%define CONFIG_CHANNELSPLIT_FILTER 0
+%define CONFIG_CHORUS_FILTER 0
+%define CONFIG_COMPAND_FILTER 0
+%define CONFIG_COMPENSATIONDELAY_FILTER 0
+%define CONFIG_CROSSFEED_FILTER 0
+%define CONFIG_CRYSTALIZER_FILTER 0
+%define CONFIG_DCSHIFT_FILTER 0
+%define CONFIG_DEESSER_FILTER 0
+%define CONFIG_DRMETER_FILTER 0
+%define CONFIG_DYNAUDNORM_FILTER 0
+%define CONFIG_EARWAX_FILTER 0
+%define CONFIG_EBUR128_FILTER 0
+%define CONFIG_EQUALIZER_FILTER 0
+%define CONFIG_EXTRASTEREO_FILTER 0
+%define CONFIG_FIREQUALIZER_FILTER 0
+%define CONFIG_FLANGER_FILTER 0
+%define CONFIG_HAAS_FILTER 0
+%define CONFIG_HDCD_FILTER 0
+%define CONFIG_HEADPHONE_FILTER 0
+%define CONFIG_HIGHPASS_FILTER 0
+%define CONFIG_HIGHSHELF_FILTER 0
+%define CONFIG_JOIN_FILTER 0
+%define CONFIG_LADSPA_FILTER 0
+%define CONFIG_LOUDNORM_FILTER 0
+%define CONFIG_LOWPASS_FILTER 0
+%define CONFIG_LOWSHELF_FILTER 0
+%define CONFIG_LV2_FILTER 0
+%define CONFIG_MCOMPAND_FILTER 0
+%define CONFIG_PAN_FILTER 0
+%define CONFIG_REPLAYGAIN_FILTER 0
+%define CONFIG_RESAMPLE_FILTER 0
+%define CONFIG_RUBBERBAND_FILTER 0
+%define CONFIG_SIDECHAINCOMPRESS_FILTER 0
+%define CONFIG_SIDECHAINGATE_FILTER 0
+%define CONFIG_SILENCEDETECT_FILTER 0
+%define CONFIG_SILENCEREMOVE_FILTER 0
+%define CONFIG_SOFALIZER_FILTER 0
+%define CONFIG_STEREOTOOLS_FILTER 0
+%define CONFIG_STEREOWIDEN_FILTER 0
+%define CONFIG_SUPEREQUALIZER_FILTER 0
+%define CONFIG_SURROUND_FILTER 0
+%define CONFIG_TREBLE_FILTER 0
+%define CONFIG_TREMOLO_FILTER 0
+%define CONFIG_VIBRATO_FILTER 0
+%define CONFIG_VOLUME_FILTER 0
+%define CONFIG_VOLUMEDETECT_FILTER 0
+%define CONFIG_AEVALSRC_FILTER 0
+%define CONFIG_AFIRSRC_FILTER 0
+%define CONFIG_ANOISESRC_FILTER 0
+%define CONFIG_ANULLSRC_FILTER 0
+%define CONFIG_FLITE_FILTER 0
+%define CONFIG_HILBERT_FILTER 0
+%define CONFIG_SINC_FILTER 0
+%define CONFIG_SINE_FILTER 0
+%define CONFIG_ANULLSINK_FILTER 0
+%define CONFIG_ADDROI_FILTER 0
+%define CONFIG_ALPHAEXTRACT_FILTER 0
+%define CONFIG_ALPHAMERGE_FILTER 0
+%define CONFIG_AMPLIFY_FILTER 0
+%define CONFIG_ASS_FILTER 0
+%define CONFIG_ATADENOISE_FILTER 0
+%define CONFIG_AVGBLUR_FILTER 0
+%define CONFIG_AVGBLUR_OPENCL_FILTER 0
+%define CONFIG_AVGBLUR_VULKAN_FILTER 0
+%define CONFIG_BBOX_FILTER 0
+%define CONFIG_BENCH_FILTER 0
+%define CONFIG_BILATERAL_FILTER 0
+%define CONFIG_BITPLANENOISE_FILTER 0
+%define CONFIG_BLACKDETECT_FILTER 0
+%define CONFIG_BLACKFRAME_FILTER 0
+%define CONFIG_BLEND_FILTER 0
+%define CONFIG_BM3D_FILTER 0
+%define CONFIG_BOXBLUR_FILTER 0
+%define CONFIG_BOXBLUR_OPENCL_FILTER 0
+%define CONFIG_BWDIF_FILTER 0
+%define CONFIG_CAS_FILTER 0
+%define CONFIG_CHROMAHOLD_FILTER 0
+%define CONFIG_CHROMAKEY_FILTER 0
+%define CONFIG_CHROMASHIFT_FILTER 0
+%define CONFIG_CIESCOPE_FILTER 0
+%define CONFIG_CODECVIEW_FILTER 0
+%define CONFIG_COLORBALANCE_FILTER 0
+%define CONFIG_COLORCHANNELMIXER_FILTER 0
+%define CONFIG_COLORKEY_FILTER 0
+%define CONFIG_COLORKEY_OPENCL_FILTER 0
+%define CONFIG_COLORHOLD_FILTER 0
+%define CONFIG_COLORLEVELS_FILTER 0
+%define CONFIG_COLORMATRIX_FILTER 0
+%define CONFIG_COLORSPACE_FILTER 0
+%define CONFIG_CONVOLUTION_FILTER 0
+%define CONFIG_CONVOLUTION_OPENCL_FILTER 0
+%define CONFIG_CONVOLVE_FILTER 0
+%define CONFIG_COPY_FILTER 0
+%define CONFIG_COREIMAGE_FILTER 0
+%define CONFIG_COVER_RECT_FILTER 0
+%define CONFIG_CROP_FILTER 0
+%define CONFIG_CROPDETECT_FILTER 0
+%define CONFIG_CUE_FILTER 0
+%define CONFIG_CURVES_FILTER 0
+%define CONFIG_DATASCOPE_FILTER 0
+%define CONFIG_DCTDNOIZ_FILTER 0
+%define CONFIG_DEBAND_FILTER 0
+%define CONFIG_DEBLOCK_FILTER 0
+%define CONFIG_DECIMATE_FILTER 0
+%define CONFIG_DECONVOLVE_FILTER 0
+%define CONFIG_DEDOT_FILTER 0
+%define CONFIG_DEFLATE_FILTER 0
+%define CONFIG_DEFLICKER_FILTER 0
+%define CONFIG_DEINTERLACE_QSV_FILTER 0
+%define CONFIG_DEINTERLACE_VAAPI_FILTER 0
+%define CONFIG_DEJUDDER_FILTER 0
+%define CONFIG_DELOGO_FILTER 0
+%define CONFIG_DENOISE_VAAPI_FILTER 0
+%define CONFIG_DERAIN_FILTER 0
+%define CONFIG_DESHAKE_FILTER 0
+%define CONFIG_DESHAKE_OPENCL_FILTER 0
+%define CONFIG_DESPILL_FILTER 0
+%define CONFIG_DETELECINE_FILTER 0
+%define CONFIG_DILATION_FILTER 0
+%define CONFIG_DILATION_OPENCL_FILTER 0
+%define CONFIG_DISPLACE_FILTER 0
+%define CONFIG_DNN_PROCESSING_FILTER 0
+%define CONFIG_DOUBLEWEAVE_FILTER 0
+%define CONFIG_DRAWBOX_FILTER 0
+%define CONFIG_DRAWGRAPH_FILTER 0
+%define CONFIG_DRAWGRID_FILTER 0
+%define CONFIG_DRAWTEXT_FILTER 0
+%define CONFIG_EDGEDETECT_FILTER 0
+%define CONFIG_ELBG_FILTER 0
+%define CONFIG_ENTROPY_FILTER 0
+%define CONFIG_EQ_FILTER 0
+%define CONFIG_EROSION_FILTER 0
+%define CONFIG_EROSION_OPENCL_FILTER 0
+%define CONFIG_EXTRACTPLANES_FILTER 0
+%define CONFIG_FADE_FILTER 0
+%define CONFIG_FFTDNOIZ_FILTER 0
+%define CONFIG_FFTFILT_FILTER 0
+%define CONFIG_FIELD_FILTER 0
+%define CONFIG_FIELDHINT_FILTER 0
+%define CONFIG_FIELDMATCH_FILTER 0
+%define CONFIG_FIELDORDER_FILTER 0
+%define CONFIG_FILLBORDERS_FILTER 0
+%define CONFIG_FIND_RECT_FILTER 0
+%define CONFIG_FLOODFILL_FILTER 0
+%define CONFIG_FORMAT_FILTER 0
+%define CONFIG_FPS_FILTER 0
+%define CONFIG_FRAMEPACK_FILTER 0
+%define CONFIG_FRAMERATE_FILTER 0
+%define CONFIG_FRAMESTEP_FILTER 0
+%define CONFIG_FREEZEDETECT_FILTER 0
+%define CONFIG_FREEZEFRAMES_FILTER 0
+%define CONFIG_FREI0R_FILTER 0
+%define CONFIG_FSPP_FILTER 0
+%define CONFIG_GBLUR_FILTER 0
+%define CONFIG_GEQ_FILTER 0
+%define CONFIG_GRADFUN_FILTER 0
+%define CONFIG_GRAPHMONITOR_FILTER 0
+%define CONFIG_GREYEDGE_FILTER 0
+%define CONFIG_HALDCLUT_FILTER 0
+%define CONFIG_HFLIP_FILTER 0
+%define CONFIG_HISTEQ_FILTER 0
+%define CONFIG_HISTOGRAM_FILTER 0
+%define CONFIG_HQDN3D_FILTER 0
+%define CONFIG_HQX_FILTER 0
+%define CONFIG_HSTACK_FILTER 0
+%define CONFIG_HUE_FILTER 0
+%define CONFIG_HWDOWNLOAD_FILTER 0
+%define CONFIG_HWMAP_FILTER 0
+%define CONFIG_HWUPLOAD_FILTER 0
+%define CONFIG_HWUPLOAD_CUDA_FILTER 0
+%define CONFIG_HYSTERESIS_FILTER 0
+%define CONFIG_IDET_FILTER 0
+%define CONFIG_IL_FILTER 0
+%define CONFIG_INFLATE_FILTER 0
+%define CONFIG_INTERLACE_FILTER 0
+%define CONFIG_INTERLEAVE_FILTER 0
+%define CONFIG_KERNDEINT_FILTER 0
+%define CONFIG_LAGFUN_FILTER 0
+%define CONFIG_LENSCORRECTION_FILTER 0
+%define CONFIG_LENSFUN_FILTER 0
+%define CONFIG_LIBVMAF_FILTER 0
+%define CONFIG_LIMITER_FILTER 0
+%define CONFIG_LOOP_FILTER 0
+%define CONFIG_LUMAKEY_FILTER 0
+%define CONFIG_LUT_FILTER 0
+%define CONFIG_LUT1D_FILTER 0
+%define CONFIG_LUT2_FILTER 0
+%define CONFIG_LUT3D_FILTER 0
+%define CONFIG_LUTRGB_FILTER 0
+%define CONFIG_LUTYUV_FILTER 0
+%define CONFIG_MASKEDCLAMP_FILTER 0
+%define CONFIG_MASKEDMAX_FILTER 0
+%define CONFIG_MASKEDMERGE_FILTER 0
+%define CONFIG_MASKEDMIN_FILTER 0
+%define CONFIG_MASKEDTHRESHOLD_FILTER 0
+%define CONFIG_MASKFUN_FILTER 0
+%define CONFIG_MCDEINT_FILTER 0
+%define CONFIG_MEDIAN_FILTER 0
+%define CONFIG_MERGEPLANES_FILTER 0
+%define CONFIG_MESTIMATE_FILTER 0
+%define CONFIG_METADATA_FILTER 0
+%define CONFIG_MIDEQUALIZER_FILTER 0
+%define CONFIG_MINTERPOLATE_FILTER 0
+%define CONFIG_MIX_FILTER 0
+%define CONFIG_MPDECIMATE_FILTER 0
+%define CONFIG_NEGATE_FILTER 0
+%define CONFIG_NLMEANS_FILTER 0
+%define CONFIG_NLMEANS_OPENCL_FILTER 0
+%define CONFIG_NNEDI_FILTER 0
+%define CONFIG_NOFORMAT_FILTER 0
+%define CONFIG_NOISE_FILTER 0
+%define CONFIG_NORMALIZE_FILTER 0
+%define CONFIG_NULL_FILTER 0
+%define CONFIG_OCR_FILTER 0
+%define CONFIG_OCV_FILTER 0
+%define CONFIG_OSCILLOSCOPE_FILTER 0
+%define CONFIG_OVERLAY_FILTER 0
+%define CONFIG_OVERLAY_OPENCL_FILTER 0
+%define CONFIG_OVERLAY_QSV_FILTER 0
+%define CONFIG_OVERLAY_VULKAN_FILTER 0
+%define CONFIG_OVERLAY_CUDA_FILTER 0
+%define CONFIG_OWDENOISE_FILTER 0
+%define CONFIG_PAD_FILTER 0
+%define CONFIG_PAD_OPENCL_FILTER 0
+%define CONFIG_PALETTEGEN_FILTER 0
+%define CONFIG_PALETTEUSE_FILTER 0
+%define CONFIG_PERMS_FILTER 0
+%define CONFIG_PERSPECTIVE_FILTER 0
+%define CONFIG_PHASE_FILTER 0
+%define CONFIG_PHOTOSENSITIVITY_FILTER 0
+%define CONFIG_PIXDESCTEST_FILTER 0
+%define CONFIG_PIXSCOPE_FILTER 0
+%define CONFIG_PP_FILTER 0
+%define CONFIG_PP7_FILTER 0
+%define CONFIG_PREMULTIPLY_FILTER 0
+%define CONFIG_PREWITT_FILTER 0
+%define CONFIG_PREWITT_OPENCL_FILTER 0
+%define CONFIG_PROCAMP_VAAPI_FILTER 0
+%define CONFIG_PROGRAM_OPENCL_FILTER 0
+%define CONFIG_PSEUDOCOLOR_FILTER 0
+%define CONFIG_PSNR_FILTER 0
+%define CONFIG_PULLUP_FILTER 0
+%define CONFIG_QP_FILTER 0
+%define CONFIG_RANDOM_FILTER 0
+%define CONFIG_READEIA608_FILTER 0
+%define CONFIG_READVITC_FILTER 0
+%define CONFIG_REALTIME_FILTER 0
+%define CONFIG_REMAP_FILTER 0
+%define CONFIG_REMOVEGRAIN_FILTER 0
+%define CONFIG_REMOVELOGO_FILTER 0
+%define CONFIG_REPEATFIELDS_FILTER 0
+%define CONFIG_REVERSE_FILTER 0
+%define CONFIG_RGBASHIFT_FILTER 0
+%define CONFIG_ROBERTS_FILTER 0
+%define CONFIG_ROBERTS_OPENCL_FILTER 0
+%define CONFIG_ROTATE_FILTER 0
+%define CONFIG_SAB_FILTER 0
+%define CONFIG_SCALE_FILTER 0
+%define CONFIG_SCALE_CUDA_FILTER 0
+%define CONFIG_SCALE_NPP_FILTER 0
+%define CONFIG_SCALE_QSV_FILTER 0
+%define CONFIG_SCALE_VAAPI_FILTER 0
+%define CONFIG_SCALE_VULKAN_FILTER 0
+%define CONFIG_SCALE2REF_FILTER 0
+%define CONFIG_SCROLL_FILTER 0
+%define CONFIG_SELECT_FILTER 0
+%define CONFIG_SELECTIVECOLOR_FILTER 0
+%define CONFIG_SENDCMD_FILTER 0
+%define CONFIG_SEPARATEFIELDS_FILTER 0
+%define CONFIG_SETDAR_FILTER 0
+%define CONFIG_SETFIELD_FILTER 0
+%define CONFIG_SETPARAMS_FILTER 0
+%define CONFIG_SETPTS_FILTER 0
+%define CONFIG_SETRANGE_FILTER 0
+%define CONFIG_SETSAR_FILTER 0
+%define CONFIG_SETTB_FILTER 0
+%define CONFIG_SHARPNESS_VAAPI_FILTER 0
+%define CONFIG_SHOWINFO_FILTER 0
+%define CONFIG_SHOWPALETTE_FILTER 0
+%define CONFIG_SHUFFLEFRAMES_FILTER 0
+%define CONFIG_SHUFFLEPLANES_FILTER 0
+%define CONFIG_SIDEDATA_FILTER 0
+%define CONFIG_SIGNALSTATS_FILTER 0
+%define CONFIG_SIGNATURE_FILTER 0
+%define CONFIG_SMARTBLUR_FILTER 0
+%define CONFIG_SOBEL_FILTER 0
+%define CONFIG_SOBEL_OPENCL_FILTER 0
+%define CONFIG_SPLIT_FILTER 0
+%define CONFIG_SPP_FILTER 0
+%define CONFIG_SR_FILTER 0
+%define CONFIG_SSIM_FILTER 0
+%define CONFIG_STEREO3D_FILTER 0
+%define CONFIG_STREAMSELECT_FILTER 0
+%define CONFIG_SUBTITLES_FILTER 0
+%define CONFIG_SUPER2XSAI_FILTER 0
+%define CONFIG_SWAPRECT_FILTER 0
+%define CONFIG_SWAPUV_FILTER 0
+%define CONFIG_TBLEND_FILTER 0
+%define CONFIG_TELECINE_FILTER 0
+%define CONFIG_THISTOGRAM_FILTER 0
+%define CONFIG_THRESHOLD_FILTER 0
+%define CONFIG_THUMBNAIL_FILTER 0
+%define CONFIG_THUMBNAIL_CUDA_FILTER 0
+%define CONFIG_TILE_FILTER 0
+%define CONFIG_TINTERLACE_FILTER 0
+%define CONFIG_TLUT2_FILTER 0
+%define CONFIG_TMEDIAN_FILTER 0
+%define CONFIG_TMIX_FILTER 0
+%define CONFIG_TONEMAP_FILTER 0
+%define CONFIG_TONEMAP_OPENCL_FILTER 0
+%define CONFIG_TONEMAP_VAAPI_FILTER 0
+%define CONFIG_TPAD_FILTER 0
+%define CONFIG_TRANSPOSE_FILTER 0
+%define CONFIG_TRANSPOSE_NPP_FILTER 0
+%define CONFIG_TRANSPOSE_OPENCL_FILTER 0
+%define CONFIG_TRANSPOSE_VAAPI_FILTER 0
+%define CONFIG_TRIM_FILTER 0
+%define CONFIG_UNPREMULTIPLY_FILTER 0
+%define CONFIG_UNSHARP_FILTER 0
+%define CONFIG_UNSHARP_OPENCL_FILTER 0
+%define CONFIG_USPP_FILTER 0
+%define CONFIG_V360_FILTER 0
+%define CONFIG_VAGUEDENOISER_FILTER 0
+%define CONFIG_VECTORSCOPE_FILTER 0
+%define CONFIG_VFLIP_FILTER 0
+%define CONFIG_VFRDET_FILTER 0
+%define CONFIG_VIBRANCE_FILTER 0
+%define CONFIG_VIDSTABDETECT_FILTER 0
+%define CONFIG_VIDSTABTRANSFORM_FILTER 0
+%define CONFIG_VIGNETTE_FILTER 0
+%define CONFIG_VMAFMOTION_FILTER 0
+%define CONFIG_VPP_QSV_FILTER 0
+%define CONFIG_VSTACK_FILTER 0
+%define CONFIG_W3FDIF_FILTER 0
+%define CONFIG_WAVEFORM_FILTER 0
+%define CONFIG_WEAVE_FILTER 0
+%define CONFIG_XBR_FILTER 0
+%define CONFIG_XFADE_FILTER 0
+%define CONFIG_XFADE_OPENCL_FILTER 0
+%define CONFIG_XMEDIAN_FILTER 0
+%define CONFIG_XSTACK_FILTER 0
+%define CONFIG_YADIF_FILTER 0
+%define CONFIG_YADIF_CUDA_FILTER 0
+%define CONFIG_YAEPBLUR_FILTER 0
+%define CONFIG_ZMQ_FILTER 0
+%define CONFIG_ZOOMPAN_FILTER 0
+%define CONFIG_ZSCALE_FILTER 0
+%define CONFIG_ALLRGB_FILTER 0
+%define CONFIG_ALLYUV_FILTER 0
+%define CONFIG_CELLAUTO_FILTER 0
+%define CONFIG_COLOR_FILTER 0
+%define CONFIG_COREIMAGESRC_FILTER 0
+%define CONFIG_FREI0R_SRC_FILTER 0
+%define CONFIG_HALDCLUTSRC_FILTER 0
+%define CONFIG_LIFE_FILTER 0
+%define CONFIG_MANDELBROT_FILTER 0
+%define CONFIG_MPTESTSRC_FILTER 0
+%define CONFIG_NULLSRC_FILTER 0
+%define CONFIG_OPENCLSRC_FILTER 0
+%define CONFIG_PAL75BARS_FILTER 0
+%define CONFIG_PAL100BARS_FILTER 0
+%define CONFIG_RGBTESTSRC_FILTER 0
+%define CONFIG_SIERPINSKI_FILTER 0
+%define CONFIG_SMPTEBARS_FILTER 0
+%define CONFIG_SMPTEHDBARS_FILTER 0
+%define CONFIG_TESTSRC_FILTER 0
+%define CONFIG_TESTSRC2_FILTER 0
+%define CONFIG_YUVTESTSRC_FILTER 0
+%define CONFIG_NULLSINK_FILTER 0
+%define CONFIG_ABITSCOPE_FILTER 0
+%define CONFIG_ADRAWGRAPH_FILTER 0
+%define CONFIG_AGRAPHMONITOR_FILTER 0
+%define CONFIG_AHISTOGRAM_FILTER 0
+%define CONFIG_APHASEMETER_FILTER 0
+%define CONFIG_AVECTORSCOPE_FILTER 0
+%define CONFIG_CONCAT_FILTER 0
+%define CONFIG_SHOWCQT_FILTER 0
+%define CONFIG_SHOWFREQS_FILTER 0
+%define CONFIG_SHOWSPATIAL_FILTER 0
+%define CONFIG_SHOWSPECTRUM_FILTER 0
+%define CONFIG_SHOWSPECTRUMPIC_FILTER 0
+%define CONFIG_SHOWVOLUME_FILTER 0
+%define CONFIG_SHOWWAVES_FILTER 0
+%define CONFIG_SHOWWAVESPIC_FILTER 0
+%define CONFIG_SPECTRUMSYNTH_FILTER 0
+%define CONFIG_AMOVIE_FILTER 0
+%define CONFIG_MOVIE_FILTER 0
+%define CONFIG_AFIFO_FILTER 0
+%define CONFIG_FIFO_FILTER 0
+%define CONFIG_AA_DEMUXER 0
+%define CONFIG_AAC_DEMUXER 1
+%define CONFIG_AC3_DEMUXER 0
+%define CONFIG_ACM_DEMUXER 0
+%define CONFIG_ACT_DEMUXER 0
+%define CONFIG_ADF_DEMUXER 0
+%define CONFIG_ADP_DEMUXER 0
+%define CONFIG_ADS_DEMUXER 0
+%define CONFIG_ADX_DEMUXER 0
+%define CONFIG_AEA_DEMUXER 0
+%define CONFIG_AFC_DEMUXER 0
+%define CONFIG_AIFF_DEMUXER 0
+%define CONFIG_AIX_DEMUXER 0
+%define CONFIG_ALP_DEMUXER 0
+%define CONFIG_AMR_DEMUXER 1
+%define CONFIG_AMRNB_DEMUXER 0
+%define CONFIG_AMRWB_DEMUXER 0
+%define CONFIG_ANM_DEMUXER 0
+%define CONFIG_APC_DEMUXER 0
+%define CONFIG_APE_DEMUXER 0
+%define CONFIG_APM_DEMUXER 0
+%define CONFIG_APNG_DEMUXER 0
+%define CONFIG_APTX_DEMUXER 0
+%define CONFIG_APTX_HD_DEMUXER 0
+%define CONFIG_AQTITLE_DEMUXER 0
+%define CONFIG_ARGO_ASF_DEMUXER 0
+%define CONFIG_ASF_DEMUXER 0
+%define CONFIG_ASF_O_DEMUXER 0
+%define CONFIG_ASS_DEMUXER 0
+%define CONFIG_AST_DEMUXER 0
+%define CONFIG_AU_DEMUXER 0
+%define CONFIG_AV1_DEMUXER 0
+%define CONFIG_AVI_DEMUXER 1
+%define CONFIG_AVISYNTH_DEMUXER 0
+%define CONFIG_AVR_DEMUXER 0
+%define CONFIG_AVS_DEMUXER 0
+%define CONFIG_AVS2_DEMUXER 0
+%define CONFIG_BETHSOFTVID_DEMUXER 0
+%define CONFIG_BFI_DEMUXER 0
+%define CONFIG_BINTEXT_DEMUXER 0
+%define CONFIG_BINK_DEMUXER 0
+%define CONFIG_BIT_DEMUXER 0
+%define CONFIG_BMV_DEMUXER 0
+%define CONFIG_BFSTM_DEMUXER 0
+%define CONFIG_BRSTM_DEMUXER 0
+%define CONFIG_BOA_DEMUXER 0
+%define CONFIG_C93_DEMUXER 0
+%define CONFIG_CAF_DEMUXER 0
+%define CONFIG_CAVSVIDEO_DEMUXER 0
+%define CONFIG_CDG_DEMUXER 0
+%define CONFIG_CDXL_DEMUXER 0
+%define CONFIG_CINE_DEMUXER 0
+%define CONFIG_CODEC2_DEMUXER 0
+%define CONFIG_CODEC2RAW_DEMUXER 0
+%define CONFIG_CONCAT_DEMUXER 0
+%define CONFIG_DASH_DEMUXER 0
+%define CONFIG_DATA_DEMUXER 0
+%define CONFIG_DAUD_DEMUXER 0
+%define CONFIG_DCSTR_DEMUXER 0
+%define CONFIG_DERF_DEMUXER 0
+%define CONFIG_DFA_DEMUXER 0
+%define CONFIG_DHAV_DEMUXER 0
+%define CONFIG_DIRAC_DEMUXER 0
+%define CONFIG_DNXHD_DEMUXER 0
+%define CONFIG_DSF_DEMUXER 0
+%define CONFIG_DSICIN_DEMUXER 0
+%define CONFIG_DSS_DEMUXER 0
+%define CONFIG_DTS_DEMUXER 0
+%define CONFIG_DTSHD_DEMUXER 0
+%define CONFIG_DV_DEMUXER 0
+%define CONFIG_DVBSUB_DEMUXER 0
+%define CONFIG_DVBTXT_DEMUXER 0
+%define CONFIG_DXA_DEMUXER 0
+%define CONFIG_EA_DEMUXER 0
+%define CONFIG_EA_CDATA_DEMUXER 0
+%define CONFIG_EAC3_DEMUXER 0
+%define CONFIG_EPAF_DEMUXER 0
+%define CONFIG_FFMETADATA_DEMUXER 0
+%define CONFIG_FILMSTRIP_DEMUXER 0
+%define CONFIG_FITS_DEMUXER 0
+%define CONFIG_FLAC_DEMUXER 1
+%define CONFIG_FLIC_DEMUXER 0
+%define CONFIG_FLV_DEMUXER 0
+%define CONFIG_LIVE_FLV_DEMUXER 0
+%define CONFIG_FOURXM_DEMUXER 0
+%define CONFIG_FRM_DEMUXER 0
+%define CONFIG_FSB_DEMUXER 0
+%define CONFIG_FWSE_DEMUXER 0
+%define CONFIG_G722_DEMUXER 0
+%define CONFIG_G723_1_DEMUXER 0
+%define CONFIG_G726_DEMUXER 0
+%define CONFIG_G726LE_DEMUXER 0
+%define CONFIG_G729_DEMUXER 0
+%define CONFIG_GDV_DEMUXER 0
+%define CONFIG_GENH_DEMUXER 0
+%define CONFIG_GIF_DEMUXER 0
+%define CONFIG_GSM_DEMUXER 1
+%define CONFIG_GXF_DEMUXER 0
+%define CONFIG_H261_DEMUXER 0
+%define CONFIG_H263_DEMUXER 0
+%define CONFIG_H264_DEMUXER 0
+%define CONFIG_HCA_DEMUXER 0
+%define CONFIG_HCOM_DEMUXER 0
+%define CONFIG_HEVC_DEMUXER 0
+%define CONFIG_HLS_DEMUXER 0
+%define CONFIG_HNM_DEMUXER 0
+%define CONFIG_ICO_DEMUXER 0
+%define CONFIG_IDCIN_DEMUXER 0
+%define CONFIG_IDF_DEMUXER 0
+%define CONFIG_IFF_DEMUXER 0
+%define CONFIG_IFV_DEMUXER 0
+%define CONFIG_ILBC_DEMUXER 0
+%define CONFIG_IMAGE2_DEMUXER 0
+%define CONFIG_IMAGE2PIPE_DEMUXER 0
+%define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0
+%define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0
+%define CONFIG_INGENIENT_DEMUXER 0
+%define CONFIG_IPMOVIE_DEMUXER 0
+%define CONFIG_IRCAM_DEMUXER 0
+%define CONFIG_ISS_DEMUXER 0
+%define CONFIG_IV8_DEMUXER 0
+%define CONFIG_IVF_DEMUXER 0
+%define CONFIG_IVR_DEMUXER 0
+%define CONFIG_JACOSUB_DEMUXER 0
+%define CONFIG_JV_DEMUXER 0
+%define CONFIG_KUX_DEMUXER 0
+%define CONFIG_KVAG_DEMUXER 0
+%define CONFIG_LMLM4_DEMUXER 0
+%define CONFIG_LOAS_DEMUXER 0
+%define CONFIG_LRC_DEMUXER 0
+%define CONFIG_LVF_DEMUXER 0
+%define CONFIG_LXF_DEMUXER 0
+%define CONFIG_M4V_DEMUXER 0
+%define CONFIG_MATROSKA_DEMUXER 1
+%define CONFIG_MGSTS_DEMUXER 0
+%define CONFIG_MICRODVD_DEMUXER 0
+%define CONFIG_MJPEG_DEMUXER 0
+%define CONFIG_MJPEG_2000_DEMUXER 0
+%define CONFIG_MLP_DEMUXER 0
+%define CONFIG_MLV_DEMUXER 0
+%define CONFIG_MM_DEMUXER 0
+%define CONFIG_MMF_DEMUXER 0
+%define CONFIG_MOV_DEMUXER 1
+%define CONFIG_MP3_DEMUXER 1
+%define CONFIG_MPC_DEMUXER 0
+%define CONFIG_MPC8_DEMUXER 0
+%define CONFIG_MPEGPS_DEMUXER 0
+%define CONFIG_MPEGTS_DEMUXER 0
+%define CONFIG_MPEGTSRAW_DEMUXER 0
+%define CONFIG_MPEGVIDEO_DEMUXER 0
+%define CONFIG_MPJPEG_DEMUXER 0
+%define CONFIG_MPL2_DEMUXER 0
+%define CONFIG_MPSUB_DEMUXER 0
+%define CONFIG_MSF_DEMUXER 0
+%define CONFIG_MSNWC_TCP_DEMUXER 0
+%define CONFIG_MTAF_DEMUXER 0
+%define CONFIG_MTV_DEMUXER 0
+%define CONFIG_MUSX_DEMUXER 0
+%define CONFIG_MV_DEMUXER 0
+%define CONFIG_MVI_DEMUXER 0
+%define CONFIG_MXF_DEMUXER 0
+%define CONFIG_MXG_DEMUXER 0
+%define CONFIG_NC_DEMUXER 0
+%define CONFIG_NISTSPHERE_DEMUXER 0
+%define CONFIG_NSP_DEMUXER 0
+%define CONFIG_NSV_DEMUXER 0
+%define CONFIG_NUT_DEMUXER 0
+%define CONFIG_NUV_DEMUXER 0
+%define CONFIG_OGG_DEMUXER 1
+%define CONFIG_OMA_DEMUXER 0
+%define CONFIG_PAF_DEMUXER 0
+%define CONFIG_PCM_ALAW_DEMUXER 0
+%define CONFIG_PCM_MULAW_DEMUXER 0
+%define CONFIG_PCM_VIDC_DEMUXER 0
+%define CONFIG_PCM_F64BE_DEMUXER 0
+%define CONFIG_PCM_F64LE_DEMUXER 0
+%define CONFIG_PCM_F32BE_DEMUXER 0
+%define CONFIG_PCM_F32LE_DEMUXER 0
+%define CONFIG_PCM_S32BE_DEMUXER 0
+%define CONFIG_PCM_S32LE_DEMUXER 0
+%define CONFIG_PCM_S24BE_DEMUXER 0
+%define CONFIG_PCM_S24LE_DEMUXER 0
+%define CONFIG_PCM_S16BE_DEMUXER 0
+%define CONFIG_PCM_S16LE_DEMUXER 0
+%define CONFIG_PCM_S8_DEMUXER 0
+%define CONFIG_PCM_U32BE_DEMUXER 0
+%define CONFIG_PCM_U32LE_DEMUXER 0
+%define CONFIG_PCM_U24BE_DEMUXER 0
+%define CONFIG_PCM_U24LE_DEMUXER 0
+%define CONFIG_PCM_U16BE_DEMUXER 0
+%define CONFIG_PCM_U16LE_DEMUXER 0
+%define CONFIG_PCM_U8_DEMUXER 0
+%define CONFIG_PJS_DEMUXER 0
+%define CONFIG_PMP_DEMUXER 0
+%define CONFIG_PVA_DEMUXER 0
+%define CONFIG_PVF_DEMUXER 0
+%define CONFIG_QCP_DEMUXER 0
+%define CONFIG_R3D_DEMUXER 0
+%define CONFIG_RAWVIDEO_DEMUXER 0
+%define CONFIG_REALTEXT_DEMUXER 0
+%define CONFIG_REDSPARK_DEMUXER 0
+%define CONFIG_RL2_DEMUXER 0
+%define CONFIG_RM_DEMUXER 0
+%define CONFIG_ROQ_DEMUXER 0
+%define CONFIG_RPL_DEMUXER 0
+%define CONFIG_RSD_DEMUXER 0
+%define CONFIG_RSO_DEMUXER 0
+%define CONFIG_RTP_DEMUXER 0
+%define CONFIG_RTSP_DEMUXER 0
+%define CONFIG_S337M_DEMUXER 0
+%define CONFIG_SAMI_DEMUXER 0
+%define CONFIG_SAP_DEMUXER 0
+%define CONFIG_SBC_DEMUXER 0
+%define CONFIG_SBG_DEMUXER 0
+%define CONFIG_SCC_DEMUXER 0
+%define CONFIG_SDP_DEMUXER 0
+%define CONFIG_SDR2_DEMUXER 0
+%define CONFIG_SDS_DEMUXER 0
+%define CONFIG_SDX_DEMUXER 0
+%define CONFIG_SEGAFILM_DEMUXER 0
+%define CONFIG_SER_DEMUXER 0
+%define CONFIG_SHORTEN_DEMUXER 0
+%define CONFIG_SIFF_DEMUXER 0
+%define CONFIG_SLN_DEMUXER 0
+%define CONFIG_SMACKER_DEMUXER 0
+%define CONFIG_SMJPEG_DEMUXER 0
+%define CONFIG_SMUSH_DEMUXER 0
+%define CONFIG_SOL_DEMUXER 0
+%define CONFIG_SOX_DEMUXER 0
+%define CONFIG_SPDIF_DEMUXER 0
+%define CONFIG_SRT_DEMUXER 0
+%define CONFIG_STR_DEMUXER 0
+%define CONFIG_STL_DEMUXER 0
+%define CONFIG_SUBVIEWER1_DEMUXER 0
+%define CONFIG_SUBVIEWER_DEMUXER 0
+%define CONFIG_SUP_DEMUXER 0
+%define CONFIG_SVAG_DEMUXER 0
+%define CONFIG_SWF_DEMUXER 0
+%define CONFIG_TAK_DEMUXER 0
+%define CONFIG_TEDCAPTIONS_DEMUXER 0
+%define CONFIG_THP_DEMUXER 0
+%define CONFIG_THREEDOSTR_DEMUXER 0
+%define CONFIG_TIERTEXSEQ_DEMUXER 0
+%define CONFIG_TMV_DEMUXER 0
+%define CONFIG_TRUEHD_DEMUXER 0
+%define CONFIG_TTA_DEMUXER 0
+%define CONFIG_TXD_DEMUXER 0
+%define CONFIG_TTY_DEMUXER 0
+%define CONFIG_TY_DEMUXER 0
+%define CONFIG_V210_DEMUXER 0
+%define CONFIG_V210X_DEMUXER 0
+%define CONFIG_VAG_DEMUXER 0
+%define CONFIG_VC1_DEMUXER 0
+%define CONFIG_VC1T_DEMUXER 0
+%define CONFIG_VIVIDAS_DEMUXER 0
+%define CONFIG_VIVO_DEMUXER 0
+%define CONFIG_VMD_DEMUXER 0
+%define CONFIG_VOBSUB_DEMUXER 0
+%define CONFIG_VOC_DEMUXER 0
+%define CONFIG_VPK_DEMUXER 0
+%define CONFIG_VPLAYER_DEMUXER 0
+%define CONFIG_VQF_DEMUXER 0
+%define CONFIG_W64_DEMUXER 0
+%define CONFIG_WAV_DEMUXER 1
+%define CONFIG_WC3_DEMUXER 0
+%define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0
+%define CONFIG_WEBVTT_DEMUXER 0
+%define CONFIG_WSAUD_DEMUXER 0
+%define CONFIG_WSD_DEMUXER 0
+%define CONFIG_WSVQA_DEMUXER 0
+%define CONFIG_WTV_DEMUXER 0
+%define CONFIG_WVE_DEMUXER 0
+%define CONFIG_WV_DEMUXER 0
+%define CONFIG_XA_DEMUXER 0
+%define CONFIG_XBIN_DEMUXER 0
+%define CONFIG_XMV_DEMUXER 0
+%define CONFIG_XVAG_DEMUXER 0
+%define CONFIG_XWMA_DEMUXER 0
+%define CONFIG_YOP_DEMUXER 0
+%define CONFIG_YUV4MPEGPIPE_DEMUXER 0
+%define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_GIF_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_PSD_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_SVG_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_XPM_PIPE_DEMUXER 0
+%define CONFIG_IMAGE_XWD_PIPE_DEMUXER 0
+%define CONFIG_LIBGME_DEMUXER 0
+%define CONFIG_LIBMODPLUG_DEMUXER 0
+%define CONFIG_LIBOPENMPT_DEMUXER 0
+%define CONFIG_VAPOURSYNTH_DEMUXER 0
+%define CONFIG_A64_MUXER 0
+%define CONFIG_AC3_MUXER 0
+%define CONFIG_ADTS_MUXER 0
+%define CONFIG_ADX_MUXER 0
+%define CONFIG_AIFF_MUXER 0
+%define CONFIG_AMR_MUXER 0
+%define CONFIG_APNG_MUXER 0
+%define CONFIG_APTX_MUXER 0
+%define CONFIG_APTX_HD_MUXER 0
+%define CONFIG_ASF_MUXER 0
+%define CONFIG_ASS_MUXER 0
+%define CONFIG_AST_MUXER 0
+%define CONFIG_ASF_STREAM_MUXER 0
+%define CONFIG_AU_MUXER 0
+%define CONFIG_AVI_MUXER 0
+%define CONFIG_AVM2_MUXER 0
+%define CONFIG_AVS2_MUXER 0
+%define CONFIG_BIT_MUXER 0
+%define CONFIG_CAF_MUXER 0
+%define CONFIG_CAVSVIDEO_MUXER 0
+%define CONFIG_CODEC2_MUXER 0
+%define CONFIG_CODEC2RAW_MUXER 0
+%define CONFIG_CRC_MUXER 0
+%define CONFIG_DASH_MUXER 0
+%define CONFIG_DATA_MUXER 0
+%define CONFIG_DAUD_MUXER 0
+%define CONFIG_DIRAC_MUXER 0
+%define CONFIG_DNXHD_MUXER 0
+%define CONFIG_DTS_MUXER 0
+%define CONFIG_DV_MUXER 0
+%define CONFIG_EAC3_MUXER 0
+%define CONFIG_F4V_MUXER 0
+%define CONFIG_FFMETADATA_MUXER 0
+%define CONFIG_FIFO_MUXER 0
+%define CONFIG_FIFO_TEST_MUXER 0
+%define CONFIG_FILMSTRIP_MUXER 0
+%define CONFIG_FITS_MUXER 0
+%define CONFIG_FLAC_MUXER 0
+%define CONFIG_FLV_MUXER 0
+%define CONFIG_FRAMECRC_MUXER 0
+%define CONFIG_FRAMEHASH_MUXER 0
+%define CONFIG_FRAMEMD5_MUXER 0
+%define CONFIG_G722_MUXER 0
+%define CONFIG_G723_1_MUXER 0
+%define CONFIG_G726_MUXER 0
+%define CONFIG_G726LE_MUXER 0
+%define CONFIG_GIF_MUXER 0
+%define CONFIG_GSM_MUXER 0
+%define CONFIG_GXF_MUXER 0
+%define CONFIG_H261_MUXER 0
+%define CONFIG_H263_MUXER 0
+%define CONFIG_H264_MUXER 0
+%define CONFIG_HASH_MUXER 0
+%define CONFIG_HDS_MUXER 0
+%define CONFIG_HEVC_MUXER 0
+%define CONFIG_HLS_MUXER 0
+%define CONFIG_ICO_MUXER 0
+%define CONFIG_ILBC_MUXER 0
+%define CONFIG_IMAGE2_MUXER 0
+%define CONFIG_IMAGE2PIPE_MUXER 0
+%define CONFIG_IPOD_MUXER 0
+%define CONFIG_IRCAM_MUXER 0
+%define CONFIG_ISMV_MUXER 0
+%define CONFIG_IVF_MUXER 0
+%define CONFIG_JACOSUB_MUXER 0
+%define CONFIG_LATM_MUXER 0
+%define CONFIG_LRC_MUXER 0
+%define CONFIG_M4V_MUXER 0
+%define CONFIG_MD5_MUXER 0
+%define CONFIG_MATROSKA_MUXER 0
+%define CONFIG_MATROSKA_AUDIO_MUXER 0
+%define CONFIG_MICRODVD_MUXER 0
+%define CONFIG_MJPEG_MUXER 0
+%define CONFIG_MLP_MUXER 0
+%define CONFIG_MMF_MUXER 0
+%define CONFIG_MOV_MUXER 0
+%define CONFIG_MP2_MUXER 0
+%define CONFIG_MP3_MUXER 0
+%define CONFIG_MP4_MUXER 0
+%define CONFIG_MPEG1SYSTEM_MUXER 0
+%define CONFIG_MPEG1VCD_MUXER 0
+%define CONFIG_MPEG1VIDEO_MUXER 0
+%define CONFIG_MPEG2DVD_MUXER 0
+%define CONFIG_MPEG2SVCD_MUXER 0
+%define CONFIG_MPEG2VIDEO_MUXER 0
+%define CONFIG_MPEG2VOB_MUXER 0
+%define CONFIG_MPEGTS_MUXER 0
+%define CONFIG_MPJPEG_MUXER 0
+%define CONFIG_MXF_MUXER 0
+%define CONFIG_MXF_D10_MUXER 0
+%define CONFIG_MXF_OPATOM_MUXER 0
+%define CONFIG_NULL_MUXER 0
+%define CONFIG_NUT_MUXER 0
+%define CONFIG_OGA_MUXER 0
+%define CONFIG_OGG_MUXER 0
+%define CONFIG_OGV_MUXER 0
+%define CONFIG_OMA_MUXER 0
+%define CONFIG_OPUS_MUXER 0
+%define CONFIG_PCM_ALAW_MUXER 0
+%define CONFIG_PCM_MULAW_MUXER 0
+%define CONFIG_PCM_VIDC_MUXER 0
+%define CONFIG_PCM_F64BE_MUXER 0
+%define CONFIG_PCM_F64LE_MUXER 0
+%define CONFIG_PCM_F32BE_MUXER 0
+%define CONFIG_PCM_F32LE_MUXER 0
+%define CONFIG_PCM_S32BE_MUXER 0
+%define CONFIG_PCM_S32LE_MUXER 0
+%define CONFIG_PCM_S24BE_MUXER 0
+%define CONFIG_PCM_S24LE_MUXER 0
+%define CONFIG_PCM_S16BE_MUXER 0
+%define CONFIG_PCM_S16LE_MUXER 0
+%define CONFIG_PCM_S8_MUXER 0
+%define CONFIG_PCM_U32BE_MUXER 0
+%define CONFIG_PCM_U32LE_MUXER 0
+%define CONFIG_PCM_U24BE_MUXER 0
+%define CONFIG_PCM_U24LE_MUXER 0
+%define CONFIG_PCM_U16BE_MUXER 0
+%define CONFIG_PCM_U16LE_MUXER 0
+%define CONFIG_PCM_U8_MUXER 0
+%define CONFIG_PSP_MUXER 0
+%define CONFIG_RAWVIDEO_MUXER 0
+%define CONFIG_RM_MUXER 0
+%define CONFIG_ROQ_MUXER 0
+%define CONFIG_RSO_MUXER 0
+%define CONFIG_RTP_MUXER 0
+%define CONFIG_RTP_MPEGTS_MUXER 0
+%define CONFIG_RTSP_MUXER 0
+%define CONFIG_SAP_MUXER 0
+%define CONFIG_SBC_MUXER 0
+%define CONFIG_SCC_MUXER 0
+%define CONFIG_SEGAFILM_MUXER 0
+%define CONFIG_SEGMENT_MUXER 0
+%define CONFIG_STREAM_SEGMENT_MUXER 0
+%define CONFIG_SINGLEJPEG_MUXER 0
+%define CONFIG_SMJPEG_MUXER 0
+%define CONFIG_SMOOTHSTREAMING_MUXER 0
+%define CONFIG_SOX_MUXER 0
+%define CONFIG_SPX_MUXER 0
+%define CONFIG_SPDIF_MUXER 0
+%define CONFIG_SRT_MUXER 0
+%define CONFIG_STREAMHASH_MUXER 0
+%define CONFIG_SUP_MUXER 0
+%define CONFIG_SWF_MUXER 0
+%define CONFIG_TEE_MUXER 0
+%define CONFIG_TG2_MUXER 0
+%define CONFIG_TGP_MUXER 0
+%define CONFIG_MKVTIMESTAMP_V2_MUXER 0
+%define CONFIG_TRUEHD_MUXER 0
+%define CONFIG_TTA_MUXER 0
+%define CONFIG_UNCODEDFRAMECRC_MUXER 0
+%define CONFIG_VC1_MUXER 0
+%define CONFIG_VC1T_MUXER 0
+%define CONFIG_VOC_MUXER 0
+%define CONFIG_W64_MUXER 0
+%define CONFIG_WAV_MUXER 0
+%define CONFIG_WEBM_MUXER 0
+%define CONFIG_WEBM_DASH_MANIFEST_MUXER 0
+%define CONFIG_WEBM_CHUNK_MUXER 0
+%define CONFIG_WEBP_MUXER 0
+%define CONFIG_WEBVTT_MUXER 0
+%define CONFIG_WTV_MUXER 0
+%define CONFIG_WV_MUXER 0
+%define CONFIG_YUV4MPEGPIPE_MUXER 0
+%define CONFIG_CHROMAPRINT_MUXER 0
+%define CONFIG_ASYNC_PROTOCOL 0
+%define CONFIG_BLURAY_PROTOCOL 0
+%define CONFIG_CACHE_PROTOCOL 0
+%define CONFIG_CONCAT_PROTOCOL 0
+%define CONFIG_CRYPTO_PROTOCOL 0
+%define CONFIG_DATA_PROTOCOL 0
+%define CONFIG_FFRTMPCRYPT_PROTOCOL 0
+%define CONFIG_FFRTMPHTTP_PROTOCOL 0
+%define CONFIG_FILE_PROTOCOL 0
+%define CONFIG_FTP_PROTOCOL 0
+%define CONFIG_GOPHER_PROTOCOL 0
+%define CONFIG_HLS_PROTOCOL 0
+%define CONFIG_HTTP_PROTOCOL 0
+%define CONFIG_HTTPPROXY_PROTOCOL 0
+%define CONFIG_HTTPS_PROTOCOL 0
+%define CONFIG_ICECAST_PROTOCOL 0
+%define CONFIG_MMSH_PROTOCOL 0
+%define CONFIG_MMST_PROTOCOL 0
+%define CONFIG_MD5_PROTOCOL 0
+%define CONFIG_PIPE_PROTOCOL 0
+%define CONFIG_PROMPEG_PROTOCOL 0
+%define CONFIG_RTMP_PROTOCOL 0
+%define CONFIG_RTMPE_PROTOCOL 0
+%define CONFIG_RTMPS_PROTOCOL 0
+%define CONFIG_RTMPT_PROTOCOL 0
+%define CONFIG_RTMPTE_PROTOCOL 0
+%define CONFIG_RTMPTS_PROTOCOL 0
+%define CONFIG_RTP_PROTOCOL 0
+%define CONFIG_SCTP_PROTOCOL 0
+%define CONFIG_SRTP_PROTOCOL 0
+%define CONFIG_SUBFILE_PROTOCOL 0
+%define CONFIG_TEE_PROTOCOL 0
+%define CONFIG_TCP_PROTOCOL 0
+%define CONFIG_TLS_PROTOCOL 0
+%define CONFIG_UDP_PROTOCOL 0
+%define CONFIG_UDPLITE_PROTOCOL 0
+%define CONFIG_UNIX_PROTOCOL 0
+%define CONFIG_LIBAMQP_PROTOCOL 0
+%define CONFIG_LIBRTMP_PROTOCOL 0
+%define CONFIG_LIBRTMPE_PROTOCOL 0
+%define CONFIG_LIBRTMPS_PROTOCOL 0
+%define CONFIG_LIBRTMPT_PROTOCOL 0
+%define CONFIG_LIBRTMPTE_PROTOCOL 0
+%define CONFIG_LIBSRT_PROTOCOL 0
+%define CONFIG_LIBSSH_PROTOCOL 0
+%define CONFIG_LIBSMBCLIENT_PROTOCOL 0
+%define CONFIG_LIBZMQ_PROTOCOL 0
diff --git a/fuchsia/config/max/x64/config.h b/fuchsia/config/max/x64/config.h
new file mode 100644
index 0000000..8bb13d1
--- /dev/null
+++ b/fuchsia/config/max/x64/config.h
@@ -0,0 +1,2588 @@
+/* Automatically generated by configure - do not modify! */
+#ifndef FFMPEG_CONFIG_H
+#define FFMPEG_CONFIG_H
+#define FFMPEG_CONFIGURATION "--disable-everything --disable-all --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-static --enable-avcodec --enable-avformat --enable-avutil --enable-fft --enable-rdft --enable-static --enable-libopus --disable-debug --disable-bzlib --disable-iconv --disable-lzo --disable-network --disable-schannel --disable-sdl2 --disable-symver --disable-xlib --disable-zlib --disable-securetransport --disable-faan --disable-alsa --disable-autodetect --enable-decoder='vorbis,libopus,flac' --enable-decoder='pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le,mp3' --enable-decoder='pcm_s16be,pcm_s24be,pcm_mulaw,pcm_alaw' --enable-decoder='theora,vp8,sbc,aptx' --enable-demuxer='ogg,matroska,wav,flac,mp3,mov' --enable-parser='opus,vorbis,flac,mpegaudio' --extra-cflags=-I/usr/local/google/home/dalesat/fuchsia/third_party/opus/include --enable-parser='vp3,vp8' --optflags='\"-O2\"' --enable-pic --x86asmexe=yasm --enable-pic --enable-lto --cc=clang --cxx=clang++ --ld=clang --enable-decoder=vp9 --enable-parser=vp9 --sysroot=/usr/local/google/home/dalesat/fuchsia/third_party/ffmpeg/../../prebuilt/third_party/sysroot/linux --extra-ldflags='-fuse-ld=lld' --enable-decoder='aac,aac_latm,h264,mp3' --enable-demuxer='aac,mp3,mov' --enable-parser='aac,aac_latm,h264,mpegaudio' --enable-decoder=mpeg4 --enable-parser='h263,mpeg4video' --enable-demuxer=avi --enable-demuxer=amr --enable-decoder='amrnb,amrwb' --enable-decoder=gsm_ms --enable-demuxer=gsm --enable-parser=gsm"
+#define FFMPEG_LICENSE "LGPL version 2.1 or later"
+#define CONFIG_THIS_YEAR 2020
+#define FFMPEG_DATADIR "/usr/local/share/ffmpeg"
+#define AVCONV_DATADIR "/usr/local/share/ffmpeg"
+#define CC_IDENT "Fuchsia clang version 11.0.0 (https://fuchsia.googlesource.com/a/third_party/llvm-project dd484baffdf4a92e564c38a17d35a742e633b0e0)"
+#define av_restrict restrict
+#define EXTERN_PREFIX ""
+#define EXTERN_ASM 
+#define BUILDSUF ""
+#define SLIBSUF ".so"
+#define HAVE_MMX2 HAVE_MMXEXT
+#define SWS_MAX_FILTER_SIZE 256
+#define ARCH_AARCH64 0
+#define ARCH_ALPHA 0
+#define ARCH_ARM 0
+#define ARCH_AVR32 0
+#define ARCH_AVR32_AP 0
+#define ARCH_AVR32_UC 0
+#define ARCH_BFIN 0
+#define ARCH_IA64 0
+#define ARCH_M68K 0
+#define ARCH_MIPS 0
+#define ARCH_MIPS64 0
+#define ARCH_PARISC 0
+#define ARCH_PPC 0
+#define ARCH_PPC64 0
+#define ARCH_S390 0
+#define ARCH_SH4 0
+#define ARCH_SPARC 0
+#define ARCH_SPARC64 0
+#define ARCH_TILEGX 0
+#define ARCH_TILEPRO 0
+#define ARCH_TOMI 0
+#define ARCH_X86 1
+#define ARCH_X86_32 0
+#define ARCH_X86_64 1
+#define HAVE_ARMV5TE 0
+#define HAVE_ARMV6 0
+#define HAVE_ARMV6T2 0
+#define HAVE_ARMV8 0
+#define HAVE_NEON 0
+#define HAVE_VFP 0
+#define HAVE_VFPV3 0
+#define HAVE_SETEND 0
+#define HAVE_ALTIVEC 0
+#define HAVE_DCBZL 0
+#define HAVE_LDBRX 0
+#define HAVE_POWER8 0
+#define HAVE_PPC4XX 0
+#define HAVE_VSX 0
+#define HAVE_AESNI 1
+#define HAVE_AMD3DNOW 1
+#define HAVE_AMD3DNOWEXT 1
+#define HAVE_AVX 1
+#define HAVE_AVX2 1
+#define HAVE_AVX512 1
+#define HAVE_FMA3 1
+#define HAVE_FMA4 1
+#define HAVE_MMX 1
+#define HAVE_MMXEXT 1
+#define HAVE_SSE 1
+#define HAVE_SSE2 1
+#define HAVE_SSE3 1
+#define HAVE_SSE4 1
+#define HAVE_SSE42 1
+#define HAVE_SSSE3 1
+#define HAVE_XOP 1
+#define HAVE_CPUNOP 1
+#define HAVE_I686 1
+#define HAVE_MIPSFPU 0
+#define HAVE_MIPS32R2 0
+#define HAVE_MIPS32R5 0
+#define HAVE_MIPS64R2 0
+#define HAVE_MIPS32R6 0
+#define HAVE_MIPS64R6 0
+#define HAVE_MIPSDSP 0
+#define HAVE_MIPSDSPR2 0
+#define HAVE_MSA 0
+#define HAVE_MSA2 0
+#define HAVE_LOONGSON2 0
+#define HAVE_LOONGSON3 0
+#define HAVE_MMI 0
+#define HAVE_ARMV5TE_EXTERNAL 0
+#define HAVE_ARMV6_EXTERNAL 0
+#define HAVE_ARMV6T2_EXTERNAL 0
+#define HAVE_ARMV8_EXTERNAL 0
+#define HAVE_NEON_EXTERNAL 0
+#define HAVE_VFP_EXTERNAL 0
+#define HAVE_VFPV3_EXTERNAL 0
+#define HAVE_SETEND_EXTERNAL 0
+#define HAVE_ALTIVEC_EXTERNAL 0
+#define HAVE_DCBZL_EXTERNAL 0
+#define HAVE_LDBRX_EXTERNAL 0
+#define HAVE_POWER8_EXTERNAL 0
+#define HAVE_PPC4XX_EXTERNAL 0
+#define HAVE_VSX_EXTERNAL 0
+#define HAVE_AESNI_EXTERNAL 1
+#define HAVE_AMD3DNOW_EXTERNAL 1
+#define HAVE_AMD3DNOWEXT_EXTERNAL 1
+#define HAVE_AVX_EXTERNAL 1
+#define HAVE_AVX2_EXTERNAL 1
+#define HAVE_AVX512_EXTERNAL 0
+#define HAVE_FMA3_EXTERNAL 1
+#define HAVE_FMA4_EXTERNAL 1
+#define HAVE_MMX_EXTERNAL 1
+#define HAVE_MMXEXT_EXTERNAL 1
+#define HAVE_SSE_EXTERNAL 1
+#define HAVE_SSE2_EXTERNAL 1
+#define HAVE_SSE3_EXTERNAL 1
+#define HAVE_SSE4_EXTERNAL 1
+#define HAVE_SSE42_EXTERNAL 1
+#define HAVE_SSSE3_EXTERNAL 1
+#define HAVE_XOP_EXTERNAL 1
+#define HAVE_CPUNOP_EXTERNAL 0
+#define HAVE_I686_EXTERNAL 0
+#define HAVE_MIPSFPU_EXTERNAL 0
+#define HAVE_MIPS32R2_EXTERNAL 0
+#define HAVE_MIPS32R5_EXTERNAL 0
+#define HAVE_MIPS64R2_EXTERNAL 0
+#define HAVE_MIPS32R6_EXTERNAL 0
+#define HAVE_MIPS64R6_EXTERNAL 0
+#define HAVE_MIPSDSP_EXTERNAL 0
+#define HAVE_MIPSDSPR2_EXTERNAL 0
+#define HAVE_MSA_EXTERNAL 0
+#define HAVE_MSA2_EXTERNAL 0
+#define HAVE_LOONGSON2_EXTERNAL 0
+#define HAVE_LOONGSON3_EXTERNAL 0
+#define HAVE_MMI_EXTERNAL 0
+#define HAVE_ARMV5TE_INLINE 0
+#define HAVE_ARMV6_INLINE 0
+#define HAVE_ARMV6T2_INLINE 0
+#define HAVE_ARMV8_INLINE 0
+#define HAVE_NEON_INLINE 0
+#define HAVE_VFP_INLINE 0
+#define HAVE_VFPV3_INLINE 0
+#define HAVE_SETEND_INLINE 0
+#define HAVE_ALTIVEC_INLINE 0
+#define HAVE_DCBZL_INLINE 0
+#define HAVE_LDBRX_INLINE 0
+#define HAVE_POWER8_INLINE 0
+#define HAVE_PPC4XX_INLINE 0
+#define HAVE_VSX_INLINE 0
+#define HAVE_AESNI_INLINE 1
+#define HAVE_AMD3DNOW_INLINE 1
+#define HAVE_AMD3DNOWEXT_INLINE 1
+#define HAVE_AVX_INLINE 1
+#define HAVE_AVX2_INLINE 1
+#define HAVE_AVX512_INLINE 1
+#define HAVE_FMA3_INLINE 1
+#define HAVE_FMA4_INLINE 1
+#define HAVE_MMX_INLINE 1
+#define HAVE_MMXEXT_INLINE 1
+#define HAVE_SSE_INLINE 1
+#define HAVE_SSE2_INLINE 1
+#define HAVE_SSE3_INLINE 1
+#define HAVE_SSE4_INLINE 1
+#define HAVE_SSE42_INLINE 1
+#define HAVE_SSSE3_INLINE 1
+#define HAVE_XOP_INLINE 1
+#define HAVE_CPUNOP_INLINE 0
+#define HAVE_I686_INLINE 0
+#define HAVE_MIPSFPU_INLINE 0
+#define HAVE_MIPS32R2_INLINE 0
+#define HAVE_MIPS32R5_INLINE 0
+#define HAVE_MIPS64R2_INLINE 0
+#define HAVE_MIPS32R6_INLINE 0
+#define HAVE_MIPS64R6_INLINE 0
+#define HAVE_MIPSDSP_INLINE 0
+#define HAVE_MIPSDSPR2_INLINE 0
+#define HAVE_MSA_INLINE 0
+#define HAVE_MSA2_INLINE 0
+#define HAVE_LOONGSON2_INLINE 0
+#define HAVE_LOONGSON3_INLINE 0
+#define HAVE_MMI_INLINE 0
+#define HAVE_ALIGNED_STACK 1
+#define HAVE_FAST_64BIT 1
+#define HAVE_FAST_CLZ 1
+#define HAVE_FAST_CMOV 1
+#define HAVE_LOCAL_ALIGNED 1
+#define HAVE_SIMD_ALIGN_16 1
+#define HAVE_SIMD_ALIGN_32 1
+#define HAVE_SIMD_ALIGN_64 1
+#define HAVE_ATOMIC_CAS_PTR 0
+#define HAVE_MACHINE_RW_BARRIER 0
+#define HAVE_MEMORYBARRIER 0
+#define HAVE_MM_EMPTY 1
+#define HAVE_RDTSC 0
+#define HAVE_SEM_TIMEDWAIT 1
+#define HAVE_SYNC_VAL_COMPARE_AND_SWAP 1
+#define HAVE_CABS 0
+#define HAVE_CEXP 0
+#define HAVE_INLINE_ASM 1
+#define HAVE_SYMVER 0
+#define HAVE_X86ASM 1
+#define HAVE_BIGENDIAN 0
+#define HAVE_FAST_UNALIGNED 1
+#define HAVE_ARPA_INET_H 0
+#define HAVE_ASM_TYPES_H 1
+#define HAVE_CDIO_PARANOIA_H 0
+#define HAVE_CDIO_PARANOIA_PARANOIA_H 0
+#define HAVE_CUDA_H 0
+#define HAVE_DISPATCH_DISPATCH_H 0
+#define HAVE_DEV_BKTR_IOCTL_BT848_H 0
+#define HAVE_DEV_BKTR_IOCTL_METEOR_H 0
+#define HAVE_DEV_IC_BT8XX_H 0
+#define HAVE_DEV_VIDEO_BKTR_IOCTL_BT848_H 0
+#define HAVE_DEV_VIDEO_METEOR_IOCTL_METEOR_H 0
+#define HAVE_DIRECT_H 0
+#define HAVE_DIRENT_H 1
+#define HAVE_DXGIDEBUG_H 0
+#define HAVE_DXVA_H 0
+#define HAVE_ES2_GL_H 0
+#define HAVE_GSM_H 0
+#define HAVE_IO_H 0
+#define HAVE_LINUX_PERF_EVENT_H 1
+#define HAVE_MACHINE_IOCTL_BT848_H 0
+#define HAVE_MACHINE_IOCTL_METEOR_H 0
+#define HAVE_MALLOC_H 1
+#define HAVE_OPENCV2_CORE_CORE_C_H 0
+#define HAVE_OPENGL_GL3_H 0
+#define HAVE_POLL_H 1
+#define HAVE_SYS_PARAM_H 1
+#define HAVE_SYS_RESOURCE_H 1
+#define HAVE_SYS_SELECT_H 1
+#define HAVE_SYS_SOUNDCARD_H 1
+#define HAVE_SYS_TIME_H 1
+#define HAVE_SYS_UN_H 1
+#define HAVE_SYS_VIDEOIO_H 0
+#define HAVE_TERMIOS_H 1
+#define HAVE_UDPLITE_H 0
+#define HAVE_UNISTD_H 1
+#define HAVE_VALGRIND_VALGRIND_H 0
+#define HAVE_WINDOWS_H 0
+#define HAVE_WINSOCK2_H 0
+#define HAVE_INTRINSICS_NEON 0
+#define HAVE_ATANF 1
+#define HAVE_ATAN2F 1
+#define HAVE_CBRT 1
+#define HAVE_CBRTF 1
+#define HAVE_COPYSIGN 1
+#define HAVE_COSF 1
+#define HAVE_ERF 1
+#define HAVE_EXP2 1
+#define HAVE_EXP2F 1
+#define HAVE_EXPF 1
+#define HAVE_HYPOT 1
+#define HAVE_ISFINITE 1
+#define HAVE_ISINF 1
+#define HAVE_ISNAN 1
+#define HAVE_LDEXPF 1
+#define HAVE_LLRINT 1
+#define HAVE_LLRINTF 1
+#define HAVE_LOG2 1
+#define HAVE_LOG2F 1
+#define HAVE_LOG10F 1
+#define HAVE_LRINT 1
+#define HAVE_LRINTF 1
+#define HAVE_POWF 1
+#define HAVE_RINT 1
+#define HAVE_ROUND 1
+#define HAVE_ROUNDF 1
+#define HAVE_SINF 1
+#define HAVE_TRUNC 1
+#define HAVE_TRUNCF 1
+#define HAVE_DOS_PATHS 0
+#define HAVE_LIBC_MSVCRT 0
+#define HAVE_MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS 0
+#define HAVE_SECTION_DATA_REL_RO 1
+#define HAVE_THREADS 1
+#define HAVE_UWP 0
+#define HAVE_WINRT 0
+#define HAVE_ACCESS 1
+#define HAVE_ALIGNED_MALLOC 0
+#define HAVE_ARC4RANDOM 0
+#define HAVE_CLOCK_GETTIME 1
+#define HAVE_CLOSESOCKET 0
+#define HAVE_COMMANDLINETOARGVW 0
+#define HAVE_FCNTL 1
+#define HAVE_GETADDRINFO 0
+#define HAVE_GETHRTIME 0
+#define HAVE_GETOPT 1
+#define HAVE_GETMODULEHANDLE 0
+#define HAVE_GETPROCESSAFFINITYMASK 0
+#define HAVE_GETPROCESSMEMORYINFO 0
+#define HAVE_GETPROCESSTIMES 0
+#define HAVE_GETRUSAGE 1
+#define HAVE_GETSTDHANDLE 0
+#define HAVE_GETSYSTEMTIMEASFILETIME 0
+#define HAVE_GETTIMEOFDAY 1
+#define HAVE_GLOB 1
+#define HAVE_GLXGETPROCADDRESS 0
+#define HAVE_GMTIME_R 1
+#define HAVE_INET_ATON 0
+#define HAVE_ISATTY 1
+#define HAVE_KBHIT 0
+#define HAVE_LOCALTIME_R 1
+#define HAVE_LSTAT 1
+#define HAVE_LZO1X_999_COMPRESS 0
+#define HAVE_MACH_ABSOLUTE_TIME 0
+#define HAVE_MAPVIEWOFFILE 0
+#define HAVE_MEMALIGN 1
+#define HAVE_MKSTEMP 1
+#define HAVE_MMAP 1
+#define HAVE_MPROTECT 1
+#define HAVE_NANOSLEEP 1
+#define HAVE_PEEKNAMEDPIPE 0
+#define HAVE_POSIX_MEMALIGN 1
+#define HAVE_PTHREAD_CANCEL 1
+#define HAVE_SCHED_GETAFFINITY 1
+#define HAVE_SECITEMIMPORT 0
+#define HAVE_SETCONSOLETEXTATTRIBUTE 0
+#define HAVE_SETCONSOLECTRLHANDLER 0
+#define HAVE_SETDLLDIRECTORY 0
+#define HAVE_SETMODE 0
+#define HAVE_SETRLIMIT 1
+#define HAVE_SLEEP 0
+#define HAVE_STRERROR_R 1
+#define HAVE_SYSCONF 1
+#define HAVE_SYSCTL 0
+#define HAVE_USLEEP 1
+#define HAVE_UTGETOSTYPEFROMSTRING 0
+#define HAVE_VIRTUALALLOC 0
+#define HAVE_WGLGETPROCADDRESS 0
+#define HAVE_BCRYPT 0
+#define HAVE_VAAPI_DRM 0
+#define HAVE_VAAPI_X11 0
+#define HAVE_VDPAU_X11 0
+#define HAVE_PTHREADS 1
+#define HAVE_OS2THREADS 0
+#define HAVE_W32THREADS 0
+#define HAVE_AS_ARCH_DIRECTIVE 0
+#define HAVE_AS_DN_DIRECTIVE 0
+#define HAVE_AS_FPU_DIRECTIVE 0
+#define HAVE_AS_FUNC 0
+#define HAVE_AS_OBJECT_ARCH 0
+#define HAVE_ASM_MOD_Q 0
+#define HAVE_BLOCKS_EXTENSION 0
+#define HAVE_EBP_AVAILABLE 1
+#define HAVE_EBX_AVAILABLE 1
+#define HAVE_GNU_AS 0
+#define HAVE_GNU_WINDRES 0
+#define HAVE_IBM_ASM 0
+#define HAVE_INLINE_ASM_DIRECT_SYMBOL_REFS 0
+#define HAVE_INLINE_ASM_LABELS 1
+#define HAVE_INLINE_ASM_NONLOCAL_LABELS 1
+#define HAVE_PRAGMA_DEPRECATED 1
+#define HAVE_RSYNC_CONTIMEOUT 1
+#define HAVE_SYMVER_ASM_LABEL 1
+#define HAVE_SYMVER_GNU_ASM 1
+#define HAVE_VFP_ARGS 0
+#define HAVE_XFORM_ASM 0
+#define HAVE_XMM_CLOBBERS 1
+#define HAVE_KCMVIDEOCODECTYPE_HEVC 0
+#define HAVE_KCVPIXELFORMATTYPE_420YPCBCR10BIPLANARVIDEORANGE 0
+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_SMPTE_ST_2084_PQ 0
+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_ITU_R_2100_HLG 0
+#define HAVE_KCVIMAGEBUFFERTRANSFERFUNCTION_LINEAR 0
+#define HAVE_SOCKLEN_T 0
+#define HAVE_STRUCT_ADDRINFO 0
+#define HAVE_STRUCT_GROUP_SOURCE_REQ 0
+#define HAVE_STRUCT_IP_MREQ_SOURCE 0
+#define HAVE_STRUCT_IPV6_MREQ 0
+#define HAVE_STRUCT_MSGHDR_MSG_FLAGS 0
+#define HAVE_STRUCT_POLLFD 0
+#define HAVE_STRUCT_RUSAGE_RU_MAXRSS 1
+#define HAVE_STRUCT_SCTP_EVENT_SUBSCRIBE 0
+#define HAVE_STRUCT_SOCKADDR_IN6 0
+#define HAVE_STRUCT_SOCKADDR_SA_LEN 0
+#define HAVE_STRUCT_SOCKADDR_STORAGE 0
+#define HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC 1
+#define HAVE_STRUCT_V4L2_FRMIVALENUM_DISCRETE 0
+#define HAVE_MAKEINFO 0
+#define HAVE_MAKEINFO_HTML 0
+#define HAVE_OPENCL_D3D11 0
+#define HAVE_OPENCL_DRM_ARM 0
+#define HAVE_OPENCL_DRM_BEIGNET 0
+#define HAVE_OPENCL_DXVA2 0
+#define HAVE_OPENCL_VAAPI_BEIGNET 0
+#define HAVE_OPENCL_VAAPI_INTEL_MEDIA 0
+#define HAVE_PERL 1
+#define HAVE_POD2MAN 1
+#define HAVE_TEXI2HTML 0
+#define CONFIG_DOC 0
+#define CONFIG_HTMLPAGES 0
+#define CONFIG_MANPAGES 0
+#define CONFIG_PODPAGES 0
+#define CONFIG_TXTPAGES 0
+#define CONFIG_AVIO_LIST_DIR_EXAMPLE 1
+#define CONFIG_AVIO_READING_EXAMPLE 1
+#define CONFIG_DECODE_AUDIO_EXAMPLE 1
+#define CONFIG_DECODE_VIDEO_EXAMPLE 1
+#define CONFIG_DEMUXING_DECODING_EXAMPLE 1
+#define CONFIG_ENCODE_AUDIO_EXAMPLE 1
+#define CONFIG_ENCODE_VIDEO_EXAMPLE 1
+#define CONFIG_EXTRACT_MVS_EXAMPLE 1
+#define CONFIG_FILTER_AUDIO_EXAMPLE 0
+#define CONFIG_FILTERING_AUDIO_EXAMPLE 0
+#define CONFIG_FILTERING_VIDEO_EXAMPLE 0
+#define CONFIG_HTTP_MULTICLIENT_EXAMPLE 1
+#define CONFIG_HW_DECODE_EXAMPLE 1
+#define CONFIG_METADATA_EXAMPLE 1
+#define CONFIG_MUXING_EXAMPLE 0
+#define CONFIG_QSVDEC_EXAMPLE 0
+#define CONFIG_REMUXING_EXAMPLE 1
+#define CONFIG_RESAMPLING_AUDIO_EXAMPLE 0
+#define CONFIG_SCALING_VIDEO_EXAMPLE 0
+#define CONFIG_TRANSCODE_AAC_EXAMPLE 0
+#define CONFIG_TRANSCODING_EXAMPLE 0
+#define CONFIG_VAAPI_ENCODE_EXAMPLE 0
+#define CONFIG_VAAPI_TRANSCODE_EXAMPLE 0
+#define CONFIG_AVISYNTH 0
+#define CONFIG_FREI0R 0
+#define CONFIG_LIBCDIO 0
+#define CONFIG_LIBDAVS2 0
+#define CONFIG_LIBRUBBERBAND 0
+#define CONFIG_LIBVIDSTAB 0
+#define CONFIG_LIBX264 0
+#define CONFIG_LIBX265 0
+#define CONFIG_LIBXAVS 0
+#define CONFIG_LIBXAVS2 0
+#define CONFIG_LIBXVID 0
+#define CONFIG_DECKLINK 0
+#define CONFIG_LIBFDK_AAC 0
+#define CONFIG_OPENSSL 0
+#define CONFIG_LIBTLS 0
+#define CONFIG_GMP 0
+#define CONFIG_LIBARIBB24 0
+#define CONFIG_LIBLENSFUN 0
+#define CONFIG_LIBOPENCORE_AMRNB 0
+#define CONFIG_LIBOPENCORE_AMRWB 0
+#define CONFIG_LIBVMAF 0
+#define CONFIG_LIBVO_AMRWBENC 0
+#define CONFIG_MBEDTLS 0
+#define CONFIG_RKMPP 0
+#define CONFIG_LIBSMBCLIENT 0
+#define CONFIG_CHROMAPRINT 0
+#define CONFIG_GCRYPT 0
+#define CONFIG_GNUTLS 0
+#define CONFIG_JNI 0
+#define CONFIG_LADSPA 0
+#define CONFIG_LIBAOM 0
+#define CONFIG_LIBASS 0
+#define CONFIG_LIBBLURAY 0
+#define CONFIG_LIBBS2B 0
+#define CONFIG_LIBCACA 0
+#define CONFIG_LIBCELT 0
+#define CONFIG_LIBCODEC2 0
+#define CONFIG_LIBDAV1D 0
+#define CONFIG_LIBDC1394 0
+#define CONFIG_LIBDRM 0
+#define CONFIG_LIBFLITE 0
+#define CONFIG_LIBFONTCONFIG 0
+#define CONFIG_LIBFREETYPE 0
+#define CONFIG_LIBFRIBIDI 0
+#define CONFIG_LIBGLSLANG 0
+#define CONFIG_LIBGME 0
+#define CONFIG_LIBGSM 0
+#define CONFIG_LIBIEC61883 0
+#define CONFIG_LIBILBC 0
+#define CONFIG_LIBJACK 0
+#define CONFIG_LIBKLVANC 0
+#define CONFIG_LIBKVAZAAR 0
+#define CONFIG_LIBMODPLUG 0
+#define CONFIG_LIBMP3LAME 0
+#define CONFIG_LIBMYSOFA 0
+#define CONFIG_LIBOPENCV 0
+#define CONFIG_LIBOPENH264 0
+#define CONFIG_LIBOPENJPEG 0
+#define CONFIG_LIBOPENMPT 0
+#define CONFIG_LIBOPUS 1
+#define CONFIG_LIBPULSE 0
+#define CONFIG_LIBRABBITMQ 0
+#define CONFIG_LIBRAV1E 0
+#define CONFIG_LIBRSVG 0
+#define CONFIG_LIBRTMP 0
+#define CONFIG_LIBSHINE 0
+#define CONFIG_LIBSMBCLIENT 0
+#define CONFIG_LIBSNAPPY 0
+#define CONFIG_LIBSOXR 0
+#define CONFIG_LIBSPEEX 0
+#define CONFIG_LIBSRT 0
+#define CONFIG_LIBSSH 0
+#define CONFIG_LIBTENSORFLOW 0
+#define CONFIG_LIBTESSERACT 0
+#define CONFIG_LIBTHEORA 0
+#define CONFIG_LIBTWOLAME 0
+#define CONFIG_LIBV4L2 0
+#define CONFIG_LIBVORBIS 0
+#define CONFIG_LIBVPX 0
+#define CONFIG_LIBWAVPACK 0
+#define CONFIG_LIBWEBP 0
+#define CONFIG_LIBXML2 0
+#define CONFIG_LIBZIMG 0
+#define CONFIG_LIBZMQ 0
+#define CONFIG_LIBZVBI 0
+#define CONFIG_LV2 0
+#define CONFIG_MEDIACODEC 0
+#define CONFIG_OPENAL 0
+#define CONFIG_OPENGL 0
+#define CONFIG_POCKETSPHINX 0
+#define CONFIG_VAPOURSYNTH 0
+#define CONFIG_ALSA 0
+#define CONFIG_APPKIT 0
+#define CONFIG_AVFOUNDATION 0
+#define CONFIG_BZLIB 0
+#define CONFIG_COREIMAGE 0
+#define CONFIG_ICONV 0
+#define CONFIG_LIBXCB 0
+#define CONFIG_LIBXCB_SHM 0
+#define CONFIG_LIBXCB_SHAPE 0
+#define CONFIG_LIBXCB_XFIXES 0
+#define CONFIG_LZMA 0
+#define CONFIG_SCHANNEL 0
+#define CONFIG_SDL2 0
+#define CONFIG_SECURETRANSPORT 0
+#define CONFIG_SNDIO 0
+#define CONFIG_XLIB 0
+#define CONFIG_ZLIB 0
+#define CONFIG_CUDA_NVCC 0
+#define CONFIG_CUDA_SDK 0
+#define CONFIG_LIBNPP 0
+#define CONFIG_LIBMFX 0
+#define CONFIG_MMAL 0
+#define CONFIG_OMX 0
+#define CONFIG_OPENCL 0
+#define CONFIG_VULKAN 0
+#define CONFIG_AMF 0
+#define CONFIG_AUDIOTOOLBOX 0
+#define CONFIG_CRYSTALHD 0
+#define CONFIG_CUDA 0
+#define CONFIG_CUDA_LLVM 0
+#define CONFIG_CUVID 0
+#define CONFIG_D3D11VA 0
+#define CONFIG_DXVA2 0
+#define CONFIG_FFNVCODEC 0
+#define CONFIG_NVDEC 0
+#define CONFIG_NVENC 0
+#define CONFIG_VAAPI 0
+#define CONFIG_VDPAU 0
+#define CONFIG_VIDEOTOOLBOX 0
+#define CONFIG_V4L2_M2M 0
+#define CONFIG_XVMC 0
+#define CONFIG_FTRAPV 0
+#define CONFIG_GRAY 0
+#define CONFIG_HARDCODED_TABLES 0
+#define CONFIG_OMX_RPI 0
+#define CONFIG_RUNTIME_CPUDETECT 1
+#define CONFIG_SAFE_BITSTREAM_READER 1
+#define CONFIG_SHARED 0
+#define CONFIG_SMALL 0
+#define CONFIG_STATIC 1
+#define CONFIG_SWSCALE_ALPHA 1
+#define CONFIG_GPL 0
+#define CONFIG_NONFREE 0
+#define CONFIG_VERSION3 0
+#define CONFIG_AVDEVICE 0
+#define CONFIG_AVFILTER 0
+#define CONFIG_SWSCALE 0
+#define CONFIG_POSTPROC 0
+#define CONFIG_AVFORMAT 1
+#define CONFIG_AVCODEC 1
+#define CONFIG_SWRESAMPLE 0
+#define CONFIG_AVRESAMPLE 0
+#define CONFIG_AVUTIL 1
+#define CONFIG_FFPLAY 0
+#define CONFIG_FFPROBE 0
+#define CONFIG_FFMPEG 0
+#define CONFIG_DCT 1
+#define CONFIG_DWT 0
+#define CONFIG_ERROR_RESILIENCE 1
+#define CONFIG_FAAN 0
+#define CONFIG_FAST_UNALIGNED 1
+#define CONFIG_FFT 1
+#define CONFIG_LSP 1
+#define CONFIG_LZO 0
+#define CONFIG_MDCT 1
+#define CONFIG_PIXELUTILS 0
+#define CONFIG_NETWORK 0
+#define CONFIG_RDFT 1
+#define CONFIG_AUTODETECT 0
+#define CONFIG_FONTCONFIG 0
+#define CONFIG_LARGE_TESTS 1
+#define CONFIG_LINUX_PERF 0
+#define CONFIG_MEMORY_POISONING 0
+#define CONFIG_NEON_CLOBBER_TEST 0
+#define CONFIG_OSSFUZZ 0
+#define CONFIG_PIC 1
+#define CONFIG_THUMB 0
+#define CONFIG_VALGRIND_BACKTRACE 0
+#define CONFIG_XMM_CLOBBER_TEST 0
+#define CONFIG_BSFS 1
+#define CONFIG_DECODERS 1
+#define CONFIG_ENCODERS 0
+#define CONFIG_HWACCELS 0
+#define CONFIG_PARSERS 1
+#define CONFIG_INDEVS 0
+#define CONFIG_OUTDEVS 0
+#define CONFIG_FILTERS 0
+#define CONFIG_DEMUXERS 1
+#define CONFIG_MUXERS 0
+#define CONFIG_PROTOCOLS 0
+#define CONFIG_AANDCTTABLES 0
+#define CONFIG_AC3DSP 0
+#define CONFIG_ADTS_HEADER 1
+#define CONFIG_AUDIO_FRAME_QUEUE 1
+#define CONFIG_AUDIODSP 0
+#define CONFIG_BLOCKDSP 1
+#define CONFIG_BSWAPDSP 0
+#define CONFIG_CABAC 1
+#define CONFIG_CBS 0
+#define CONFIG_CBS_AV1 0
+#define CONFIG_CBS_H264 0
+#define CONFIG_CBS_H265 0
+#define CONFIG_CBS_JPEG 0
+#define CONFIG_CBS_MPEG2 0
+#define CONFIG_CBS_VP9 0
+#define CONFIG_DIRAC_PARSE 1
+#define CONFIG_DNN 0
+#define CONFIG_DVPROFILE 0
+#define CONFIG_EXIF 1
+#define CONFIG_FAANDCT 0
+#define CONFIG_FAANIDCT 0
+#define CONFIG_FDCTDSP 1
+#define CONFIG_FLACDSP 1
+#define CONFIG_FMTCONVERT 0
+#define CONFIG_FRAME_THREAD_ENCODER 0
+#define CONFIG_G722DSP 0
+#define CONFIG_GOLOMB 1
+#define CONFIG_GPLV3 0
+#define CONFIG_H263DSP 1
+#define CONFIG_H264CHROMA 1
+#define CONFIG_H264DSP 1
+#define CONFIG_H264PARSE 1
+#define CONFIG_H264PRED 1
+#define CONFIG_H264QPEL 1
+#define CONFIG_HEVCPARSE 0
+#define CONFIG_HPELDSP 1
+#define CONFIG_HUFFMAN 0
+#define CONFIG_HUFFYUVDSP 0
+#define CONFIG_HUFFYUVENCDSP 0
+#define CONFIG_IDCTDSP 1
+#define CONFIG_IIRFILTER 0
+#define CONFIG_MDCT15 1
+#define CONFIG_INTRAX8 0
+#define CONFIG_ISO_MEDIA 1
+#define CONFIG_IVIDSP 0
+#define CONFIG_JPEGTABLES 0
+#define CONFIG_LGPLV3 0
+#define CONFIG_LIBX262 0
+#define CONFIG_LLAUDDSP 0
+#define CONFIG_LLVIDDSP 0
+#define CONFIG_LLVIDENCDSP 0
+#define CONFIG_LPC 0
+#define CONFIG_LZF 0
+#define CONFIG_ME_CMP 1
+#define CONFIG_MPEG_ER 1
+#define CONFIG_MPEGAUDIO 1
+#define CONFIG_MPEGAUDIODSP 1
+#define CONFIG_MPEGAUDIOHEADER 1
+#define CONFIG_MPEGVIDEO 1
+#define CONFIG_MPEGVIDEOENC 0
+#define CONFIG_MSS34DSP 0
+#define CONFIG_PIXBLOCKDSP 1
+#define CONFIG_QPELDSP 1
+#define CONFIG_QSV 0
+#define CONFIG_QSVDEC 0
+#define CONFIG_QSVENC 0
+#define CONFIG_QSVVPP 0
+#define CONFIG_RANGECODER 0
+#define CONFIG_RIFFDEC 1
+#define CONFIG_RIFFENC 0
+#define CONFIG_RTPDEC 0
+#define CONFIG_RTPENC_CHAIN 0
+#define CONFIG_RV34DSP 0
+#define CONFIG_SCENE_SAD 0
+#define CONFIG_SINEWIN 1
+#define CONFIG_SNAPPY 0
+#define CONFIG_SRTP 0
+#define CONFIG_STARTCODE 1
+#define CONFIG_TEXTUREDSP 0
+#define CONFIG_TEXTUREDSPENC 0
+#define CONFIG_TPELDSP 0
+#define CONFIG_VAAPI_1 0
+#define CONFIG_VAAPI_ENCODE 0
+#define CONFIG_VC1DSP 0
+#define CONFIG_VIDEODSP 1
+#define CONFIG_VP3DSP 1
+#define CONFIG_VP56DSP 0
+#define CONFIG_VP8DSP 1
+#define CONFIG_WMA_FREQS 0
+#define CONFIG_WMV2DSP 0
+#define CONFIG_AAC_ADTSTOASC_BSF 0
+#define CONFIG_AV1_FRAME_MERGE_BSF 0
+#define CONFIG_AV1_FRAME_SPLIT_BSF 0
+#define CONFIG_AV1_METADATA_BSF 0
+#define CONFIG_CHOMP_BSF 0
+#define CONFIG_DUMP_EXTRADATA_BSF 0
+#define CONFIG_DCA_CORE_BSF 0
+#define CONFIG_EAC3_CORE_BSF 0
+#define CONFIG_EXTRACT_EXTRADATA_BSF 0
+#define CONFIG_FILTER_UNITS_BSF 0
+#define CONFIG_H264_METADATA_BSF 0
+#define CONFIG_H264_MP4TOANNEXB_BSF 0
+#define CONFIG_H264_REDUNDANT_PPS_BSF 0
+#define CONFIG_HAPQA_EXTRACT_BSF 0
+#define CONFIG_HEVC_METADATA_BSF 0
+#define CONFIG_HEVC_MP4TOANNEXB_BSF 0
+#define CONFIG_IMX_DUMP_HEADER_BSF 0
+#define CONFIG_MJPEG2JPEG_BSF 0
+#define CONFIG_MJPEGA_DUMP_HEADER_BSF 0
+#define CONFIG_MP3_HEADER_DECOMPRESS_BSF 0
+#define CONFIG_MPEG2_METADATA_BSF 0
+#define CONFIG_MPEG4_UNPACK_BFRAMES_BSF 0
+#define CONFIG_MOV2TEXTSUB_BSF 0
+#define CONFIG_NOISE_BSF 0
+#define CONFIG_NULL_BSF 1
+#define CONFIG_PRORES_METADATA_BSF 0
+#define CONFIG_REMOVE_EXTRADATA_BSF 0
+#define CONFIG_TEXT2MOVSUB_BSF 0
+#define CONFIG_TRACE_HEADERS_BSF 0
+#define CONFIG_TRUEHD_CORE_BSF 0
+#define CONFIG_VP9_METADATA_BSF 0
+#define CONFIG_VP9_RAW_REORDER_BSF 0
+#define CONFIG_VP9_SUPERFRAME_BSF 0
+#define CONFIG_VP9_SUPERFRAME_SPLIT_BSF 1
+#define CONFIG_AASC_DECODER 0
+#define CONFIG_AIC_DECODER 0
+#define CONFIG_ALIAS_PIX_DECODER 0
+#define CONFIG_AGM_DECODER 0
+#define CONFIG_AMV_DECODER 0
+#define CONFIG_ANM_DECODER 0
+#define CONFIG_ANSI_DECODER 0
+#define CONFIG_APNG_DECODER 0
+#define CONFIG_ARBC_DECODER 0
+#define CONFIG_ASV1_DECODER 0
+#define CONFIG_ASV2_DECODER 0
+#define CONFIG_AURA_DECODER 0
+#define CONFIG_AURA2_DECODER 0
+#define CONFIG_AVRP_DECODER 0
+#define CONFIG_AVRN_DECODER 0
+#define CONFIG_AVS_DECODER 0
+#define CONFIG_AVUI_DECODER 0
+#define CONFIG_AYUV_DECODER 0
+#define CONFIG_BETHSOFTVID_DECODER 0
+#define CONFIG_BFI_DECODER 0
+#define CONFIG_BINK_DECODER 0
+#define CONFIG_BITPACKED_DECODER 0
+#define CONFIG_BMP_DECODER 0
+#define CONFIG_BMV_VIDEO_DECODER 0
+#define CONFIG_BRENDER_PIX_DECODER 0
+#define CONFIG_C93_DECODER 0
+#define CONFIG_CAVS_DECODER 0
+#define CONFIG_CDGRAPHICS_DECODER 0
+#define CONFIG_CDTOONS_DECODER 0
+#define CONFIG_CDXL_DECODER 0
+#define CONFIG_CFHD_DECODER 0
+#define CONFIG_CINEPAK_DECODER 0
+#define CONFIG_CLEARVIDEO_DECODER 0
+#define CONFIG_CLJR_DECODER 0
+#define CONFIG_CLLC_DECODER 0
+#define CONFIG_COMFORTNOISE_DECODER 0
+#define CONFIG_CPIA_DECODER 0
+#define CONFIG_CSCD_DECODER 0
+#define CONFIG_CYUV_DECODER 0
+#define CONFIG_DDS_DECODER 0
+#define CONFIG_DFA_DECODER 0
+#define CONFIG_DIRAC_DECODER 0
+#define CONFIG_DNXHD_DECODER 0
+#define CONFIG_DPX_DECODER 0
+#define CONFIG_DSICINVIDEO_DECODER 0
+#define CONFIG_DVAUDIO_DECODER 0
+#define CONFIG_DVVIDEO_DECODER 0
+#define CONFIG_DXA_DECODER 0
+#define CONFIG_DXTORY_DECODER 0
+#define CONFIG_DXV_DECODER 0
+#define CONFIG_EACMV_DECODER 0
+#define CONFIG_EAMAD_DECODER 0
+#define CONFIG_EATGQ_DECODER 0
+#define CONFIG_EATGV_DECODER 0
+#define CONFIG_EATQI_DECODER 0
+#define CONFIG_EIGHTBPS_DECODER 0
+#define CONFIG_EIGHTSVX_EXP_DECODER 0
+#define CONFIG_EIGHTSVX_FIB_DECODER 0
+#define CONFIG_ESCAPE124_DECODER 0
+#define CONFIG_ESCAPE130_DECODER 0
+#define CONFIG_EXR_DECODER 0
+#define CONFIG_FFV1_DECODER 0
+#define CONFIG_FFVHUFF_DECODER 0
+#define CONFIG_FIC_DECODER 0
+#define CONFIG_FITS_DECODER 0
+#define CONFIG_FLASHSV_DECODER 0
+#define CONFIG_FLASHSV2_DECODER 0
+#define CONFIG_FLIC_DECODER 0
+#define CONFIG_FLV_DECODER 0
+#define CONFIG_FMVC_DECODER 0
+#define CONFIG_FOURXM_DECODER 0
+#define CONFIG_FRAPS_DECODER 0
+#define CONFIG_FRWU_DECODER 0
+#define CONFIG_G2M_DECODER 0
+#define CONFIG_GDV_DECODER 0
+#define CONFIG_GIF_DECODER 0
+#define CONFIG_H261_DECODER 0
+#define CONFIG_H263_DECODER 1
+#define CONFIG_H263I_DECODER 0
+#define CONFIG_H263P_DECODER 0
+#define CONFIG_H263_V4L2M2M_DECODER 0
+#define CONFIG_H264_DECODER 1
+#define CONFIG_H264_CRYSTALHD_DECODER 0
+#define CONFIG_H264_V4L2M2M_DECODER 0
+#define CONFIG_H264_MEDIACODEC_DECODER 0
+#define CONFIG_H264_MMAL_DECODER 0
+#define CONFIG_H264_QSV_DECODER 0
+#define CONFIG_H264_RKMPP_DECODER 0
+#define CONFIG_HAP_DECODER 0
+#define CONFIG_HEVC_DECODER 0
+#define CONFIG_HEVC_QSV_DECODER 0
+#define CONFIG_HEVC_RKMPP_DECODER 0
+#define CONFIG_HEVC_V4L2M2M_DECODER 0
+#define CONFIG_HNM4_VIDEO_DECODER 0
+#define CONFIG_HQ_HQA_DECODER 0
+#define CONFIG_HQX_DECODER 0
+#define CONFIG_HUFFYUV_DECODER 0
+#define CONFIG_HYMT_DECODER 0
+#define CONFIG_IDCIN_DECODER 0
+#define CONFIG_IFF_ILBM_DECODER 0
+#define CONFIG_IMM4_DECODER 0
+#define CONFIG_IMM5_DECODER 0
+#define CONFIG_INDEO2_DECODER 0
+#define CONFIG_INDEO3_DECODER 0
+#define CONFIG_INDEO4_DECODER 0
+#define CONFIG_INDEO5_DECODER 0
+#define CONFIG_INTERPLAY_VIDEO_DECODER 0
+#define CONFIG_JPEG2000_DECODER 0
+#define CONFIG_JPEGLS_DECODER 0
+#define CONFIG_JV_DECODER 0
+#define CONFIG_KGV1_DECODER 0
+#define CONFIG_KMVC_DECODER 0
+#define CONFIG_LAGARITH_DECODER 0
+#define CONFIG_LOCO_DECODER 0
+#define CONFIG_LSCR_DECODER 0
+#define CONFIG_M101_DECODER 0
+#define CONFIG_MAGICYUV_DECODER 0
+#define CONFIG_MDEC_DECODER 0
+#define CONFIG_MIMIC_DECODER 0
+#define CONFIG_MJPEG_DECODER 0
+#define CONFIG_MJPEGB_DECODER 0
+#define CONFIG_MMVIDEO_DECODER 0
+#define CONFIG_MOTIONPIXELS_DECODER 0
+#define CONFIG_MPEG1VIDEO_DECODER 0
+#define CONFIG_MPEG2VIDEO_DECODER 0
+#define CONFIG_MPEG4_DECODER 1
+#define CONFIG_MPEG4_CRYSTALHD_DECODER 0
+#define CONFIG_MPEG4_V4L2M2M_DECODER 0
+#define CONFIG_MPEG4_MMAL_DECODER 0
+#define CONFIG_MPEGVIDEO_DECODER 0
+#define CONFIG_MPEG1_V4L2M2M_DECODER 0
+#define CONFIG_MPEG2_MMAL_DECODER 0
+#define CONFIG_MPEG2_CRYSTALHD_DECODER 0
+#define CONFIG_MPEG2_V4L2M2M_DECODER 0
+#define CONFIG_MPEG2_QSV_DECODER 0
+#define CONFIG_MPEG2_MEDIACODEC_DECODER 0
+#define CONFIG_MSA1_DECODER 0
+#define CONFIG_MSCC_DECODER 0
+#define CONFIG_MSMPEG4V1_DECODER 0
+#define CONFIG_MSMPEG4V2_DECODER 0
+#define CONFIG_MSMPEG4V3_DECODER 0
+#define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0
+#define CONFIG_MSRLE_DECODER 0
+#define CONFIG_MSS1_DECODER 0
+#define CONFIG_MSS2_DECODER 0
+#define CONFIG_MSVIDEO1_DECODER 0
+#define CONFIG_MSZH_DECODER 0
+#define CONFIG_MTS2_DECODER 0
+#define CONFIG_MV30_DECODER 0
+#define CONFIG_MVC1_DECODER 0
+#define CONFIG_MVC2_DECODER 0
+#define CONFIG_MVDV_DECODER 0
+#define CONFIG_MVHA_DECODER 0
+#define CONFIG_MWSC_DECODER 0
+#define CONFIG_MXPEG_DECODER 0
+#define CONFIG_NUV_DECODER 0
+#define CONFIG_PAF_VIDEO_DECODER 0
+#define CONFIG_PAM_DECODER 0
+#define CONFIG_PBM_DECODER 0
+#define CONFIG_PCX_DECODER 0
+#define CONFIG_PGM_DECODER 0
+#define CONFIG_PGMYUV_DECODER 0
+#define CONFIG_PICTOR_DECODER 0
+#define CONFIG_PIXLET_DECODER 0
+#define CONFIG_PNG_DECODER 0
+#define CONFIG_PPM_DECODER 0
+#define CONFIG_PRORES_DECODER 0
+#define CONFIG_PROSUMER_DECODER 0
+#define CONFIG_PSD_DECODER 0
+#define CONFIG_PTX_DECODER 0
+#define CONFIG_QDRAW_DECODER 0
+#define CONFIG_QPEG_DECODER 0
+#define CONFIG_QTRLE_DECODER 0
+#define CONFIG_R10K_DECODER 0
+#define CONFIG_R210_DECODER 0
+#define CONFIG_RASC_DECODER 0
+#define CONFIG_RAWVIDEO_DECODER 0
+#define CONFIG_RL2_DECODER 0
+#define CONFIG_ROQ_DECODER 0
+#define CONFIG_RPZA_DECODER 0
+#define CONFIG_RSCC_DECODER 0
+#define CONFIG_RV10_DECODER 0
+#define CONFIG_RV20_DECODER 0
+#define CONFIG_RV30_DECODER 0
+#define CONFIG_RV40_DECODER 0
+#define CONFIG_S302M_DECODER 0
+#define CONFIG_SANM_DECODER 0
+#define CONFIG_SCPR_DECODER 0
+#define CONFIG_SCREENPRESSO_DECODER 0
+#define CONFIG_SGI_DECODER 0
+#define CONFIG_SGIRLE_DECODER 0
+#define CONFIG_SHEERVIDEO_DECODER 0
+#define CONFIG_SMACKER_DECODER 0
+#define CONFIG_SMC_DECODER 0
+#define CONFIG_SMVJPEG_DECODER 0
+#define CONFIG_SNOW_DECODER 0
+#define CONFIG_SP5X_DECODER 0
+#define CONFIG_SPEEDHQ_DECODER 0
+#define CONFIG_SRGC_DECODER 0
+#define CONFIG_SUNRAST_DECODER 0
+#define CONFIG_SVQ1_DECODER 0
+#define CONFIG_SVQ3_DECODER 0
+#define CONFIG_TARGA_DECODER 0
+#define CONFIG_TARGA_Y216_DECODER 0
+#define CONFIG_TDSC_DECODER 0
+#define CONFIG_THEORA_DECODER 1
+#define CONFIG_THP_DECODER 0
+#define CONFIG_TIERTEXSEQVIDEO_DECODER 0
+#define CONFIG_TIFF_DECODER 0
+#define CONFIG_TMV_DECODER 0
+#define CONFIG_TRUEMOTION1_DECODER 0
+#define CONFIG_TRUEMOTION2_DECODER 0
+#define CONFIG_TRUEMOTION2RT_DECODER 0
+#define CONFIG_TSCC_DECODER 0
+#define CONFIG_TSCC2_DECODER 0
+#define CONFIG_TXD_DECODER 0
+#define CONFIG_ULTI_DECODER 0
+#define CONFIG_UTVIDEO_DECODER 0
+#define CONFIG_V210_DECODER 0
+#define CONFIG_V210X_DECODER 0
+#define CONFIG_V308_DECODER 0
+#define CONFIG_V408_DECODER 0
+#define CONFIG_V410_DECODER 0
+#define CONFIG_VB_DECODER 0
+#define CONFIG_VBLE_DECODER 0
+#define CONFIG_VC1_DECODER 0
+#define CONFIG_VC1_CRYSTALHD_DECODER 0
+#define CONFIG_VC1IMAGE_DECODER 0
+#define CONFIG_VC1_MMAL_DECODER 0
+#define CONFIG_VC1_QSV_DECODER 0
+#define CONFIG_VC1_V4L2M2M_DECODER 0
+#define CONFIG_VCR1_DECODER 0
+#define CONFIG_VMDVIDEO_DECODER 0
+#define CONFIG_VMNC_DECODER 0
+#define CONFIG_VP3_DECODER 1
+#define CONFIG_VP4_DECODER 0
+#define CONFIG_VP5_DECODER 0
+#define CONFIG_VP6_DECODER 0
+#define CONFIG_VP6A_DECODER 0
+#define CONFIG_VP6F_DECODER 0
+#define CONFIG_VP7_DECODER 0
+#define CONFIG_VP8_DECODER 1
+#define CONFIG_VP8_RKMPP_DECODER 0
+#define CONFIG_VP8_V4L2M2M_DECODER 0
+#define CONFIG_VP9_DECODER 1
+#define CONFIG_VP9_RKMPP_DECODER 0
+#define CONFIG_VP9_V4L2M2M_DECODER 0
+#define CONFIG_VQA_DECODER 0
+#define CONFIG_WEBP_DECODER 0
+#define CONFIG_WCMV_DECODER 0
+#define CONFIG_WRAPPED_AVFRAME_DECODER 0
+#define CONFIG_WMV1_DECODER 0
+#define CONFIG_WMV2_DECODER 0
+#define CONFIG_WMV3_DECODER 0
+#define CONFIG_WMV3_CRYSTALHD_DECODER 0
+#define CONFIG_WMV3IMAGE_DECODER 0
+#define CONFIG_WNV1_DECODER 0
+#define CONFIG_XAN_WC3_DECODER 0
+#define CONFIG_XAN_WC4_DECODER 0
+#define CONFIG_XBM_DECODER 0
+#define CONFIG_XFACE_DECODER 0
+#define CONFIG_XL_DECODER 0
+#define CONFIG_XPM_DECODER 0
+#define CONFIG_XWD_DECODER 0
+#define CONFIG_Y41P_DECODER 0
+#define CONFIG_YLC_DECODER 0
+#define CONFIG_YOP_DECODER 0
+#define CONFIG_YUV4_DECODER 0
+#define CONFIG_ZERO12V_DECODER 0
+#define CONFIG_ZEROCODEC_DECODER 0
+#define CONFIG_ZLIB_DECODER 0
+#define CONFIG_ZMBV_DECODER 0
+#define CONFIG_AAC_DECODER 1
+#define CONFIG_AAC_FIXED_DECODER 0
+#define CONFIG_AAC_LATM_DECODER 1
+#define CONFIG_AC3_DECODER 0
+#define CONFIG_AC3_FIXED_DECODER 0
+#define CONFIG_ACELP_KELVIN_DECODER 0
+#define CONFIG_ALAC_DECODER 0
+#define CONFIG_ALS_DECODER 0
+#define CONFIG_AMRNB_DECODER 1
+#define CONFIG_AMRWB_DECODER 1
+#define CONFIG_APE_DECODER 0
+#define CONFIG_APTX_DECODER 1
+#define CONFIG_APTX_HD_DECODER 0
+#define CONFIG_ATRAC1_DECODER 0
+#define CONFIG_ATRAC3_DECODER 0
+#define CONFIG_ATRAC3AL_DECODER 0
+#define CONFIG_ATRAC3P_DECODER 0
+#define CONFIG_ATRAC3PAL_DECODER 0
+#define CONFIG_ATRAC9_DECODER 0
+#define CONFIG_BINKAUDIO_DCT_DECODER 0
+#define CONFIG_BINKAUDIO_RDFT_DECODER 0
+#define CONFIG_BMV_AUDIO_DECODER 0
+#define CONFIG_COOK_DECODER 0
+#define CONFIG_DCA_DECODER 0
+#define CONFIG_DOLBY_E_DECODER 0
+#define CONFIG_DSD_LSBF_DECODER 0
+#define CONFIG_DSD_MSBF_DECODER 0
+#define CONFIG_DSD_LSBF_PLANAR_DECODER 0
+#define CONFIG_DSD_MSBF_PLANAR_DECODER 0
+#define CONFIG_DSICINAUDIO_DECODER 0
+#define CONFIG_DSS_SP_DECODER 0
+#define CONFIG_DST_DECODER 0
+#define CONFIG_EAC3_DECODER 0
+#define CONFIG_EVRC_DECODER 0
+#define CONFIG_FFWAVESYNTH_DECODER 0
+#define CONFIG_FLAC_DECODER 1
+#define CONFIG_G723_1_DECODER 0
+#define CONFIG_G729_DECODER 0
+#define CONFIG_GSM_DECODER 0
+#define CONFIG_GSM_MS_DECODER 1
+#define CONFIG_HCA_DECODER 0
+#define CONFIG_HCOM_DECODER 0
+#define CONFIG_IAC_DECODER 0
+#define CONFIG_ILBC_DECODER 0
+#define CONFIG_IMC_DECODER 0
+#define CONFIG_INTERPLAY_ACM_DECODER 0
+#define CONFIG_MACE3_DECODER 0
+#define CONFIG_MACE6_DECODER 0
+#define CONFIG_METASOUND_DECODER 0
+#define CONFIG_MLP_DECODER 0
+#define CONFIG_MP1_DECODER 0
+#define CONFIG_MP1FLOAT_DECODER 0
+#define CONFIG_MP2_DECODER 0
+#define CONFIG_MP2FLOAT_DECODER 0
+#define CONFIG_MP3FLOAT_DECODER 0
+#define CONFIG_MP3_DECODER 1
+#define CONFIG_MP3ADUFLOAT_DECODER 0
+#define CONFIG_MP3ADU_DECODER 0
+#define CONFIG_MP3ON4FLOAT_DECODER 0
+#define CONFIG_MP3ON4_DECODER 0
+#define CONFIG_MPC7_DECODER 0
+#define CONFIG_MPC8_DECODER 0
+#define CONFIG_NELLYMOSER_DECODER 0
+#define CONFIG_ON2AVC_DECODER 0
+#define CONFIG_OPUS_DECODER 0
+#define CONFIG_PAF_AUDIO_DECODER 0
+#define CONFIG_QCELP_DECODER 0
+#define CONFIG_QDM2_DECODER 0
+#define CONFIG_QDMC_DECODER 0
+#define CONFIG_RA_144_DECODER 0
+#define CONFIG_RA_288_DECODER 0
+#define CONFIG_RALF_DECODER 0
+#define CONFIG_SBC_DECODER 1
+#define CONFIG_SHORTEN_DECODER 0
+#define CONFIG_SIPR_DECODER 0
+#define CONFIG_SIREN_DECODER 0
+#define CONFIG_SMACKAUD_DECODER 0
+#define CONFIG_SONIC_DECODER 0
+#define CONFIG_TAK_DECODER 0
+#define CONFIG_TRUEHD_DECODER 0
+#define CONFIG_TRUESPEECH_DECODER 0
+#define CONFIG_TTA_DECODER 0
+#define CONFIG_TWINVQ_DECODER 0
+#define CONFIG_VMDAUDIO_DECODER 0
+#define CONFIG_VORBIS_DECODER 1
+#define CONFIG_WAVPACK_DECODER 0
+#define CONFIG_WMALOSSLESS_DECODER 0
+#define CONFIG_WMAPRO_DECODER 0
+#define CONFIG_WMAV1_DECODER 0
+#define CONFIG_WMAV2_DECODER 0
+#define CONFIG_WMAVOICE_DECODER 0
+#define CONFIG_WS_SND1_DECODER 0
+#define CONFIG_XMA1_DECODER 0
+#define CONFIG_XMA2_DECODER 0
+#define CONFIG_PCM_ALAW_DECODER 1
+#define CONFIG_PCM_BLURAY_DECODER 0
+#define CONFIG_PCM_DVD_DECODER 0
+#define CONFIG_PCM_F16LE_DECODER 0
+#define CONFIG_PCM_F24LE_DECODER 0
+#define CONFIG_PCM_F32BE_DECODER 0
+#define CONFIG_PCM_F32LE_DECODER 1
+#define CONFIG_PCM_F64BE_DECODER 0
+#define CONFIG_PCM_F64LE_DECODER 0
+#define CONFIG_PCM_LXF_DECODER 0
+#define CONFIG_PCM_MULAW_DECODER 1
+#define CONFIG_PCM_S8_DECODER 0
+#define CONFIG_PCM_S8_PLANAR_DECODER 0
+#define CONFIG_PCM_S16BE_DECODER 1
+#define CONFIG_PCM_S16BE_PLANAR_DECODER 0
+#define CONFIG_PCM_S16LE_DECODER 1
+#define CONFIG_PCM_S16LE_PLANAR_DECODER 0
+#define CONFIG_PCM_S24BE_DECODER 1
+#define CONFIG_PCM_S24DAUD_DECODER 0
+#define CONFIG_PCM_S24LE_DECODER 1
+#define CONFIG_PCM_S24LE_PLANAR_DECODER 0
+#define CONFIG_PCM_S32BE_DECODER 0
+#define CONFIG_PCM_S32LE_DECODER 1
+#define CONFIG_PCM_S32LE_PLANAR_DECODER 0
+#define CONFIG_PCM_S64BE_DECODER 0
+#define CONFIG_PCM_S64LE_DECODER 0
+#define CONFIG_PCM_U8_DECODER 1
+#define CONFIG_PCM_U16BE_DECODER 0
+#define CONFIG_PCM_U16LE_DECODER 0
+#define CONFIG_PCM_U24BE_DECODER 0
+#define CONFIG_PCM_U24LE_DECODER 0
+#define CONFIG_PCM_U32BE_DECODER 0
+#define CONFIG_PCM_U32LE_DECODER 0
+#define CONFIG_PCM_VIDC_DECODER 0
+#define CONFIG_DERF_DPCM_DECODER 0
+#define CONFIG_GREMLIN_DPCM_DECODER 0
+#define CONFIG_INTERPLAY_DPCM_DECODER 0
+#define CONFIG_ROQ_DPCM_DECODER 0
+#define CONFIG_SDX2_DPCM_DECODER 0
+#define CONFIG_SOL_DPCM_DECODER 0
+#define CONFIG_XAN_DPCM_DECODER 0
+#define CONFIG_ADPCM_4XM_DECODER 0
+#define CONFIG_ADPCM_ADX_DECODER 0
+#define CONFIG_ADPCM_AFC_DECODER 0
+#define CONFIG_ADPCM_AGM_DECODER 0
+#define CONFIG_ADPCM_AICA_DECODER 0
+#define CONFIG_ADPCM_ARGO_DECODER 0
+#define CONFIG_ADPCM_CT_DECODER 0
+#define CONFIG_ADPCM_DTK_DECODER 0
+#define CONFIG_ADPCM_EA_DECODER 0
+#define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0
+#define CONFIG_ADPCM_EA_R1_DECODER 0
+#define CONFIG_ADPCM_EA_R2_DECODER 0
+#define CONFIG_ADPCM_EA_R3_DECODER 0
+#define CONFIG_ADPCM_EA_XAS_DECODER 0
+#define CONFIG_ADPCM_G722_DECODER 0
+#define CONFIG_ADPCM_G726_DECODER 0
+#define CONFIG_ADPCM_G726LE_DECODER 0
+#define CONFIG_ADPCM_IMA_AMV_DECODER 0
+#define CONFIG_ADPCM_IMA_ALP_DECODER 0
+#define CONFIG_ADPCM_IMA_APC_DECODER 0
+#define CONFIG_ADPCM_IMA_APM_DECODER 0
+#define CONFIG_ADPCM_IMA_DAT4_DECODER 0
+#define CONFIG_ADPCM_IMA_DK3_DECODER 0
+#define CONFIG_ADPCM_IMA_DK4_DECODER 0
+#define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0
+#define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0
+#define CONFIG_ADPCM_IMA_ISS_DECODER 0
+#define CONFIG_ADPCM_IMA_MTF_DECODER 0
+#define CONFIG_ADPCM_IMA_OKI_DECODER 0
+#define CONFIG_ADPCM_IMA_QT_DECODER 0
+#define CONFIG_ADPCM_IMA_RAD_DECODER 0
+#define CONFIG_ADPCM_IMA_SSI_DECODER 0
+#define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0
+#define CONFIG_ADPCM_IMA_WAV_DECODER 0
+#define CONFIG_ADPCM_IMA_WS_DECODER 0
+#define CONFIG_ADPCM_MS_DECODER 0
+#define CONFIG_ADPCM_MTAF_DECODER 0
+#define CONFIG_ADPCM_PSX_DECODER 0
+#define CONFIG_ADPCM_SBPRO_2_DECODER 0
+#define CONFIG_ADPCM_SBPRO_3_DECODER 0
+#define CONFIG_ADPCM_SBPRO_4_DECODER 0
+#define CONFIG_ADPCM_SWF_DECODER 0
+#define CONFIG_ADPCM_THP_DECODER 0
+#define CONFIG_ADPCM_THP_LE_DECODER 0
+#define CONFIG_ADPCM_VIMA_DECODER 0
+#define CONFIG_ADPCM_XA_DECODER 0
+#define CONFIG_ADPCM_YAMAHA_DECODER 0
+#define CONFIG_ADPCM_ZORK_DECODER 0
+#define CONFIG_SSA_DECODER 0
+#define CONFIG_ASS_DECODER 0
+#define CONFIG_CCAPTION_DECODER 0
+#define CONFIG_DVBSUB_DECODER 0
+#define CONFIG_DVDSUB_DECODER 0
+#define CONFIG_JACOSUB_DECODER 0
+#define CONFIG_MICRODVD_DECODER 0
+#define CONFIG_MOVTEXT_DECODER 0
+#define CONFIG_MPL2_DECODER 0
+#define CONFIG_PGSSUB_DECODER 0
+#define CONFIG_PJS_DECODER 0
+#define CONFIG_REALTEXT_DECODER 0
+#define CONFIG_SAMI_DECODER 0
+#define CONFIG_SRT_DECODER 0
+#define CONFIG_STL_DECODER 0
+#define CONFIG_SUBRIP_DECODER 0
+#define CONFIG_SUBVIEWER_DECODER 0
+#define CONFIG_SUBVIEWER1_DECODER 0
+#define CONFIG_TEXT_DECODER 0
+#define CONFIG_VPLAYER_DECODER 0
+#define CONFIG_WEBVTT_DECODER 0
+#define CONFIG_XSUB_DECODER 0
+#define CONFIG_AAC_AT_DECODER 0
+#define CONFIG_AC3_AT_DECODER 0
+#define CONFIG_ADPCM_IMA_QT_AT_DECODER 0
+#define CONFIG_ALAC_AT_DECODER 0
+#define CONFIG_AMR_NB_AT_DECODER 0
+#define CONFIG_EAC3_AT_DECODER 0
+#define CONFIG_GSM_MS_AT_DECODER 0
+#define CONFIG_ILBC_AT_DECODER 0
+#define CONFIG_MP1_AT_DECODER 0
+#define CONFIG_MP2_AT_DECODER 0
+#define CONFIG_MP3_AT_DECODER 0
+#define CONFIG_PCM_ALAW_AT_DECODER 0
+#define CONFIG_PCM_MULAW_AT_DECODER 0
+#define CONFIG_QDMC_AT_DECODER 0
+#define CONFIG_QDM2_AT_DECODER 0
+#define CONFIG_LIBARIBB24_DECODER 0
+#define CONFIG_LIBCELT_DECODER 0
+#define CONFIG_LIBCODEC2_DECODER 0
+#define CONFIG_LIBDAV1D_DECODER 0
+#define CONFIG_LIBDAVS2_DECODER 0
+#define CONFIG_LIBFDK_AAC_DECODER 0
+#define CONFIG_LIBGSM_DECODER 0
+#define CONFIG_LIBGSM_MS_DECODER 0
+#define CONFIG_LIBILBC_DECODER 0
+#define CONFIG_LIBOPENCORE_AMRNB_DECODER 0
+#define CONFIG_LIBOPENCORE_AMRWB_DECODER 0
+#define CONFIG_LIBOPENJPEG_DECODER 0
+#define CONFIG_LIBOPUS_DECODER 1
+#define CONFIG_LIBRSVG_DECODER 0
+#define CONFIG_LIBSPEEX_DECODER 0
+#define CONFIG_LIBVORBIS_DECODER 0
+#define CONFIG_LIBVPX_VP8_DECODER 0
+#define CONFIG_LIBVPX_VP9_DECODER 0
+#define CONFIG_LIBZVBI_TELETEXT_DECODER 0
+#define CONFIG_BINTEXT_DECODER 0
+#define CONFIG_XBIN_DECODER 0
+#define CONFIG_IDF_DECODER 0
+#define CONFIG_LIBAOM_AV1_DECODER 0
+#define CONFIG_LIBOPENH264_DECODER 0
+#define CONFIG_H264_CUVID_DECODER 0
+#define CONFIG_HEVC_CUVID_DECODER 0
+#define CONFIG_HEVC_MEDIACODEC_DECODER 0
+#define CONFIG_MJPEG_CUVID_DECODER 0
+#define CONFIG_MJPEG_QSV_DECODER 0
+#define CONFIG_MPEG1_CUVID_DECODER 0
+#define CONFIG_MPEG2_CUVID_DECODER 0
+#define CONFIG_MPEG4_CUVID_DECODER 0
+#define CONFIG_MPEG4_MEDIACODEC_DECODER 0
+#define CONFIG_VC1_CUVID_DECODER 0
+#define CONFIG_VP8_CUVID_DECODER 0
+#define CONFIG_VP8_MEDIACODEC_DECODER 0
+#define CONFIG_VP8_QSV_DECODER 0
+#define CONFIG_VP9_CUVID_DECODER 0
+#define CONFIG_VP9_MEDIACODEC_DECODER 0
+#define CONFIG_VP9_QSV_DECODER 0
+#define CONFIG_A64MULTI_ENCODER 0
+#define CONFIG_A64MULTI5_ENCODER 0
+#define CONFIG_ALIAS_PIX_ENCODER 0
+#define CONFIG_AMV_ENCODER 0
+#define CONFIG_APNG_ENCODER 0
+#define CONFIG_ASV1_ENCODER 0
+#define CONFIG_ASV2_ENCODER 0
+#define CONFIG_AVRP_ENCODER 0
+#define CONFIG_AVUI_ENCODER 0
+#define CONFIG_AYUV_ENCODER 0
+#define CONFIG_BMP_ENCODER 0
+#define CONFIG_CINEPAK_ENCODER 0
+#define CONFIG_CLJR_ENCODER 0
+#define CONFIG_COMFORTNOISE_ENCODER 0
+#define CONFIG_DNXHD_ENCODER 0
+#define CONFIG_DPX_ENCODER 0
+#define CONFIG_DVVIDEO_ENCODER 0
+#define CONFIG_FFV1_ENCODER 0
+#define CONFIG_FFVHUFF_ENCODER 0
+#define CONFIG_FITS_ENCODER 0
+#define CONFIG_FLASHSV_ENCODER 0
+#define CONFIG_FLASHSV2_ENCODER 0
+#define CONFIG_FLV_ENCODER 0
+#define CONFIG_GIF_ENCODER 0
+#define CONFIG_H261_ENCODER 0
+#define CONFIG_H263_ENCODER 0
+#define CONFIG_H263P_ENCODER 0
+#define CONFIG_HAP_ENCODER 0
+#define CONFIG_HUFFYUV_ENCODER 0
+#define CONFIG_JPEG2000_ENCODER 0
+#define CONFIG_JPEGLS_ENCODER 0
+#define CONFIG_LJPEG_ENCODER 0
+#define CONFIG_MAGICYUV_ENCODER 0
+#define CONFIG_MJPEG_ENCODER 0
+#define CONFIG_MPEG1VIDEO_ENCODER 0
+#define CONFIG_MPEG2VIDEO_ENCODER 0
+#define CONFIG_MPEG4_ENCODER 0
+#define CONFIG_MSMPEG4V2_ENCODER 0
+#define CONFIG_MSMPEG4V3_ENCODER 0
+#define CONFIG_MSVIDEO1_ENCODER 0
+#define CONFIG_PAM_ENCODER 0
+#define CONFIG_PBM_ENCODER 0
+#define CONFIG_PCX_ENCODER 0
+#define CONFIG_PGM_ENCODER 0
+#define CONFIG_PGMYUV_ENCODER 0
+#define CONFIG_PNG_ENCODER 0
+#define CONFIG_PPM_ENCODER 0
+#define CONFIG_PRORES_ENCODER 0
+#define CONFIG_PRORES_AW_ENCODER 0
+#define CONFIG_PRORES_KS_ENCODER 0
+#define CONFIG_QTRLE_ENCODER 0
+#define CONFIG_R10K_ENCODER 0
+#define CONFIG_R210_ENCODER 0
+#define CONFIG_RAWVIDEO_ENCODER 0
+#define CONFIG_ROQ_ENCODER 0
+#define CONFIG_RV10_ENCODER 0
+#define CONFIG_RV20_ENCODER 0
+#define CONFIG_S302M_ENCODER 0
+#define CONFIG_SGI_ENCODER 0
+#define CONFIG_SNOW_ENCODER 0
+#define CONFIG_SUNRAST_ENCODER 0
+#define CONFIG_SVQ1_ENCODER 0
+#define CONFIG_TARGA_ENCODER 0
+#define CONFIG_TIFF_ENCODER 0
+#define CONFIG_UTVIDEO_ENCODER 0
+#define CONFIG_V210_ENCODER 0
+#define CONFIG_V308_ENCODER 0
+#define CONFIG_V408_ENCODER 0
+#define CONFIG_V410_ENCODER 0
+#define CONFIG_VC2_ENCODER 0
+#define CONFIG_WRAPPED_AVFRAME_ENCODER 0
+#define CONFIG_WMV1_ENCODER 0
+#define CONFIG_WMV2_ENCODER 0
+#define CONFIG_XBM_ENCODER 0
+#define CONFIG_XFACE_ENCODER 0
+#define CONFIG_XWD_ENCODER 0
+#define CONFIG_Y41P_ENCODER 0
+#define CONFIG_YUV4_ENCODER 0
+#define CONFIG_ZLIB_ENCODER 0
+#define CONFIG_ZMBV_ENCODER 0
+#define CONFIG_AAC_ENCODER 0
+#define CONFIG_AC3_ENCODER 0
+#define CONFIG_AC3_FIXED_ENCODER 0
+#define CONFIG_ALAC_ENCODER 0
+#define CONFIG_APTX_ENCODER 0
+#define CONFIG_APTX_HD_ENCODER 0
+#define CONFIG_DCA_ENCODER 0
+#define CONFIG_EAC3_ENCODER 0
+#define CONFIG_FLAC_ENCODER 0
+#define CONFIG_G723_1_ENCODER 0
+#define CONFIG_MLP_ENCODER 0
+#define CONFIG_MP2_ENCODER 0
+#define CONFIG_MP2FIXED_ENCODER 0
+#define CONFIG_NELLYMOSER_ENCODER 0
+#define CONFIG_OPUS_ENCODER 0
+#define CONFIG_RA_144_ENCODER 0
+#define CONFIG_SBC_ENCODER 0
+#define CONFIG_SONIC_ENCODER 0
+#define CONFIG_SONIC_LS_ENCODER 0
+#define CONFIG_TRUEHD_ENCODER 0
+#define CONFIG_TTA_ENCODER 0
+#define CONFIG_VORBIS_ENCODER 0
+#define CONFIG_WAVPACK_ENCODER 0
+#define CONFIG_WMAV1_ENCODER 0
+#define CONFIG_WMAV2_ENCODER 0
+#define CONFIG_PCM_ALAW_ENCODER 0
+#define CONFIG_PCM_DVD_ENCODER 0
+#define CONFIG_PCM_F32BE_ENCODER 0
+#define CONFIG_PCM_F32LE_ENCODER 0
+#define CONFIG_PCM_F64BE_ENCODER 0
+#define CONFIG_PCM_F64LE_ENCODER 0
+#define CONFIG_PCM_MULAW_ENCODER 0
+#define CONFIG_PCM_S8_ENCODER 0
+#define CONFIG_PCM_S8_PLANAR_ENCODER 0
+#define CONFIG_PCM_S16BE_ENCODER 0
+#define CONFIG_PCM_S16BE_PLANAR_ENCODER 0
+#define CONFIG_PCM_S16LE_ENCODER 0
+#define CONFIG_PCM_S16LE_PLANAR_ENCODER 0
+#define CONFIG_PCM_S24BE_ENCODER 0
+#define CONFIG_PCM_S24DAUD_ENCODER 0
+#define CONFIG_PCM_S24LE_ENCODER 0
+#define CONFIG_PCM_S24LE_PLANAR_ENCODER 0
+#define CONFIG_PCM_S32BE_ENCODER 0
+#define CONFIG_PCM_S32LE_ENCODER 0
+#define CONFIG_PCM_S32LE_PLANAR_ENCODER 0
+#define CONFIG_PCM_S64BE_ENCODER 0
+#define CONFIG_PCM_S64LE_ENCODER 0
+#define CONFIG_PCM_U8_ENCODER 0
+#define CONFIG_PCM_U16BE_ENCODER 0
+#define CONFIG_PCM_U16LE_ENCODER 0
+#define CONFIG_PCM_U24BE_ENCODER 0
+#define CONFIG_PCM_U24LE_ENCODER 0
+#define CONFIG_PCM_U32BE_ENCODER 0
+#define CONFIG_PCM_U32LE_ENCODER 0
+#define CONFIG_PCM_VIDC_ENCODER 0
+#define CONFIG_ROQ_DPCM_ENCODER 0
+#define CONFIG_ADPCM_ADX_ENCODER 0
+#define CONFIG_ADPCM_G722_ENCODER 0
+#define CONFIG_ADPCM_G726_ENCODER 0
+#define CONFIG_ADPCM_G726LE_ENCODER 0
+#define CONFIG_ADPCM_IMA_QT_ENCODER 0
+#define CONFIG_ADPCM_IMA_WAV_ENCODER 0
+#define CONFIG_ADPCM_MS_ENCODER 0
+#define CONFIG_ADPCM_SWF_ENCODER 0
+#define CONFIG_ADPCM_YAMAHA_ENCODER 0
+#define CONFIG_SSA_ENCODER 0
+#define CONFIG_ASS_ENCODER 0
+#define CONFIG_DVBSUB_ENCODER 0
+#define CONFIG_DVDSUB_ENCODER 0
+#define CONFIG_MOVTEXT_ENCODER 0
+#define CONFIG_SRT_ENCODER 0
+#define CONFIG_SUBRIP_ENCODER 0
+#define CONFIG_TEXT_ENCODER 0
+#define CONFIG_WEBVTT_ENCODER 0
+#define CONFIG_XSUB_ENCODER 0
+#define CONFIG_AAC_AT_ENCODER 0
+#define CONFIG_ALAC_AT_ENCODER 0
+#define CONFIG_ILBC_AT_ENCODER 0
+#define CONFIG_PCM_ALAW_AT_ENCODER 0
+#define CONFIG_PCM_MULAW_AT_ENCODER 0
+#define CONFIG_LIBAOM_AV1_ENCODER 0
+#define CONFIG_LIBCODEC2_ENCODER 0
+#define CONFIG_LIBFDK_AAC_ENCODER 0
+#define CONFIG_LIBGSM_ENCODER 0
+#define CONFIG_LIBGSM_MS_ENCODER 0
+#define CONFIG_LIBILBC_ENCODER 0
+#define CONFIG_LIBMP3LAME_ENCODER 0
+#define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0
+#define CONFIG_LIBOPENJPEG_ENCODER 0
+#define CONFIG_LIBOPUS_ENCODER 0
+#define CONFIG_LIBRAV1E_ENCODER 0
+#define CONFIG_LIBSHINE_ENCODER 0
+#define CONFIG_LIBSPEEX_ENCODER 0
+#define CONFIG_LIBTHEORA_ENCODER 0
+#define CONFIG_LIBTWOLAME_ENCODER 0
+#define CONFIG_LIBVO_AMRWBENC_ENCODER 0
+#define CONFIG_LIBVORBIS_ENCODER 0
+#define CONFIG_LIBVPX_VP8_ENCODER 0
+#define CONFIG_LIBVPX_VP9_ENCODER 0
+#define CONFIG_LIBWAVPACK_ENCODER 0
+#define CONFIG_LIBWEBP_ANIM_ENCODER 0
+#define CONFIG_LIBWEBP_ENCODER 0
+#define CONFIG_LIBX262_ENCODER 0
+#define CONFIG_LIBX264_ENCODER 0
+#define CONFIG_LIBX264RGB_ENCODER 0
+#define CONFIG_LIBX265_ENCODER 0
+#define CONFIG_LIBXAVS_ENCODER 0
+#define CONFIG_LIBXAVS2_ENCODER 0
+#define CONFIG_LIBXVID_ENCODER 0
+#define CONFIG_H263_V4L2M2M_ENCODER 0
+#define CONFIG_LIBOPENH264_ENCODER 0
+#define CONFIG_H264_AMF_ENCODER 0
+#define CONFIG_H264_NVENC_ENCODER 0
+#define CONFIG_H264_OMX_ENCODER 0
+#define CONFIG_H264_QSV_ENCODER 0
+#define CONFIG_H264_V4L2M2M_ENCODER 0
+#define CONFIG_H264_VAAPI_ENCODER 0
+#define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0
+#define CONFIG_NVENC_ENCODER 0
+#define CONFIG_NVENC_H264_ENCODER 0
+#define CONFIG_NVENC_HEVC_ENCODER 0
+#define CONFIG_HEVC_AMF_ENCODER 0
+#define CONFIG_HEVC_NVENC_ENCODER 0
+#define CONFIG_HEVC_QSV_ENCODER 0
+#define CONFIG_HEVC_V4L2M2M_ENCODER 0
+#define CONFIG_HEVC_VAAPI_ENCODER 0
+#define CONFIG_HEVC_VIDEOTOOLBOX_ENCODER 0
+#define CONFIG_LIBKVAZAAR_ENCODER 0
+#define CONFIG_MJPEG_QSV_ENCODER 0
+#define CONFIG_MJPEG_VAAPI_ENCODER 0
+#define CONFIG_MPEG2_QSV_ENCODER 0
+#define CONFIG_MPEG2_VAAPI_ENCODER 0
+#define CONFIG_MPEG4_OMX_ENCODER 0
+#define CONFIG_MPEG4_V4L2M2M_ENCODER 0
+#define CONFIG_VP8_V4L2M2M_ENCODER 0
+#define CONFIG_VP8_VAAPI_ENCODER 0
+#define CONFIG_VP9_VAAPI_ENCODER 0
+#define CONFIG_VP9_QSV_ENCODER 0
+#define CONFIG_H263_VAAPI_HWACCEL 0
+#define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0
+#define CONFIG_H264_D3D11VA_HWACCEL 0
+#define CONFIG_H264_D3D11VA2_HWACCEL 0
+#define CONFIG_H264_DXVA2_HWACCEL 0
+#define CONFIG_H264_NVDEC_HWACCEL 0
+#define CONFIG_H264_VAAPI_HWACCEL 0
+#define CONFIG_H264_VDPAU_HWACCEL 0
+#define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0
+#define CONFIG_HEVC_D3D11VA_HWACCEL 0
+#define CONFIG_HEVC_D3D11VA2_HWACCEL 0
+#define CONFIG_HEVC_DXVA2_HWACCEL 0
+#define CONFIG_HEVC_NVDEC_HWACCEL 0
+#define CONFIG_HEVC_VAAPI_HWACCEL 0
+#define CONFIG_HEVC_VDPAU_HWACCEL 0
+#define CONFIG_HEVC_VIDEOTOOLBOX_HWACCEL 0
+#define CONFIG_MJPEG_NVDEC_HWACCEL 0
+#define CONFIG_MJPEG_VAAPI_HWACCEL 0
+#define CONFIG_MPEG1_NVDEC_HWACCEL 0
+#define CONFIG_MPEG1_VDPAU_HWACCEL 0
+#define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0
+#define CONFIG_MPEG1_XVMC_HWACCEL 0
+#define CONFIG_MPEG2_D3D11VA_HWACCEL 0
+#define CONFIG_MPEG2_D3D11VA2_HWACCEL 0
+#define CONFIG_MPEG2_NVDEC_HWACCEL 0
+#define CONFIG_MPEG2_DXVA2_HWACCEL 0
+#define CONFIG_MPEG2_VAAPI_HWACCEL 0
+#define CONFIG_MPEG2_VDPAU_HWACCEL 0
+#define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0
+#define CONFIG_MPEG2_XVMC_HWACCEL 0
+#define CONFIG_MPEG4_NVDEC_HWACCEL 0
+#define CONFIG_MPEG4_VAAPI_HWACCEL 0
+#define CONFIG_MPEG4_VDPAU_HWACCEL 0
+#define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0
+#define CONFIG_VC1_D3D11VA_HWACCEL 0
+#define CONFIG_VC1_D3D11VA2_HWACCEL 0
+#define CONFIG_VC1_DXVA2_HWACCEL 0
+#define CONFIG_VC1_NVDEC_HWACCEL 0
+#define CONFIG_VC1_VAAPI_HWACCEL 0
+#define CONFIG_VC1_VDPAU_HWACCEL 0
+#define CONFIG_VP8_NVDEC_HWACCEL 0
+#define CONFIG_VP8_VAAPI_HWACCEL 0
+#define CONFIG_VP9_D3D11VA_HWACCEL 0
+#define CONFIG_VP9_D3D11VA2_HWACCEL 0
+#define CONFIG_VP9_DXVA2_HWACCEL 0
+#define CONFIG_VP9_NVDEC_HWACCEL 0
+#define CONFIG_VP9_VAAPI_HWACCEL 0
+#define CONFIG_VP9_VDPAU_HWACCEL 0
+#define CONFIG_WMV3_D3D11VA_HWACCEL 0
+#define CONFIG_WMV3_D3D11VA2_HWACCEL 0
+#define CONFIG_WMV3_DXVA2_HWACCEL 0
+#define CONFIG_WMV3_NVDEC_HWACCEL 0
+#define CONFIG_WMV3_VAAPI_HWACCEL 0
+#define CONFIG_WMV3_VDPAU_HWACCEL 0
+#define CONFIG_AAC_PARSER 1
+#define CONFIG_AAC_LATM_PARSER 1
+#define CONFIG_AC3_PARSER 0
+#define CONFIG_ADX_PARSER 0
+#define CONFIG_AV1_PARSER 0
+#define CONFIG_AVS2_PARSER 0
+#define CONFIG_BMP_PARSER 0
+#define CONFIG_CAVSVIDEO_PARSER 0
+#define CONFIG_COOK_PARSER 0
+#define CONFIG_DCA_PARSER 0
+#define CONFIG_DIRAC_PARSER 0
+#define CONFIG_DNXHD_PARSER 0
+#define CONFIG_DPX_PARSER 0
+#define CONFIG_DVAUDIO_PARSER 0
+#define CONFIG_DVBSUB_PARSER 0
+#define CONFIG_DVDSUB_PARSER 0
+#define CONFIG_DVD_NAV_PARSER 0
+#define CONFIG_FLAC_PARSER 1
+#define CONFIG_G723_1_PARSER 0
+#define CONFIG_G729_PARSER 0
+#define CONFIG_GIF_PARSER 0
+#define CONFIG_GSM_PARSER 1
+#define CONFIG_H261_PARSER 0
+#define CONFIG_H263_PARSER 1
+#define CONFIG_H264_PARSER 1
+#define CONFIG_HEVC_PARSER 0
+#define CONFIG_MJPEG_PARSER 0
+#define CONFIG_MLP_PARSER 0
+#define CONFIG_MPEG4VIDEO_PARSER 1
+#define CONFIG_MPEGAUDIO_PARSER 1
+#define CONFIG_MPEGVIDEO_PARSER 0
+#define CONFIG_OPUS_PARSER 1
+#define CONFIG_PNG_PARSER 0
+#define CONFIG_PNM_PARSER 0
+#define CONFIG_RV30_PARSER 0
+#define CONFIG_RV40_PARSER 0
+#define CONFIG_SBC_PARSER 0
+#define CONFIG_SIPR_PARSER 0
+#define CONFIG_TAK_PARSER 0
+#define CONFIG_VC1_PARSER 0
+#define CONFIG_VORBIS_PARSER 1
+#define CONFIG_VP3_PARSER 1
+#define CONFIG_VP8_PARSER 1
+#define CONFIG_VP9_PARSER 1
+#define CONFIG_WEBP_PARSER 0
+#define CONFIG_XMA_PARSER 0
+#define CONFIG_ALSA_INDEV 0
+#define CONFIG_ANDROID_CAMERA_INDEV 0
+#define CONFIG_AVFOUNDATION_INDEV 0
+#define CONFIG_BKTR_INDEV 0
+#define CONFIG_DECKLINK_INDEV 0
+#define CONFIG_DSHOW_INDEV 0
+#define CONFIG_FBDEV_INDEV 0
+#define CONFIG_GDIGRAB_INDEV 0
+#define CONFIG_IEC61883_INDEV 0
+#define CONFIG_JACK_INDEV 0
+#define CONFIG_KMSGRAB_INDEV 0
+#define CONFIG_LAVFI_INDEV 0
+#define CONFIG_OPENAL_INDEV 0
+#define CONFIG_OSS_INDEV 0
+#define CONFIG_PULSE_INDEV 0
+#define CONFIG_SNDIO_INDEV 0
+#define CONFIG_V4L2_INDEV 0
+#define CONFIG_VFWCAP_INDEV 0
+#define CONFIG_XCBGRAB_INDEV 0
+#define CONFIG_LIBCDIO_INDEV 0
+#define CONFIG_LIBDC1394_INDEV 0
+#define CONFIG_ALSA_OUTDEV 0
+#define CONFIG_CACA_OUTDEV 0
+#define CONFIG_DECKLINK_OUTDEV 0
+#define CONFIG_FBDEV_OUTDEV 0
+#define CONFIG_OPENGL_OUTDEV 0
+#define CONFIG_OSS_OUTDEV 0
+#define CONFIG_PULSE_OUTDEV 0
+#define CONFIG_SDL2_OUTDEV 0
+#define CONFIG_SNDIO_OUTDEV 0
+#define CONFIG_V4L2_OUTDEV 0
+#define CONFIG_XV_OUTDEV 0
+#define CONFIG_ABENCH_FILTER 0
+#define CONFIG_ACOMPRESSOR_FILTER 0
+#define CONFIG_ACONTRAST_FILTER 0
+#define CONFIG_ACOPY_FILTER 0
+#define CONFIG_ACUE_FILTER 0
+#define CONFIG_ACROSSFADE_FILTER 0
+#define CONFIG_ACROSSOVER_FILTER 0
+#define CONFIG_ACRUSHER_FILTER 0
+#define CONFIG_ADECLICK_FILTER 0
+#define CONFIG_ADECLIP_FILTER 0
+#define CONFIG_ADELAY_FILTER 0
+#define CONFIG_ADERIVATIVE_FILTER 0
+#define CONFIG_AECHO_FILTER 0
+#define CONFIG_AEMPHASIS_FILTER 0
+#define CONFIG_AEVAL_FILTER 0
+#define CONFIG_AFADE_FILTER 0
+#define CONFIG_AFFTDN_FILTER 0
+#define CONFIG_AFFTFILT_FILTER 0
+#define CONFIG_AFIR_FILTER 0
+#define CONFIG_AFORMAT_FILTER 0
+#define CONFIG_AGATE_FILTER 0
+#define CONFIG_AIIR_FILTER 0
+#define CONFIG_AINTEGRAL_FILTER 0
+#define CONFIG_AINTERLEAVE_FILTER 0
+#define CONFIG_ALIMITER_FILTER 0
+#define CONFIG_ALLPASS_FILTER 0
+#define CONFIG_ALOOP_FILTER 0
+#define CONFIG_AMERGE_FILTER 0
+#define CONFIG_AMETADATA_FILTER 0
+#define CONFIG_AMIX_FILTER 0
+#define CONFIG_AMULTIPLY_FILTER 0
+#define CONFIG_ANEQUALIZER_FILTER 0
+#define CONFIG_ANLMDN_FILTER 0
+#define CONFIG_ANLMS_FILTER 0
+#define CONFIG_ANULL_FILTER 0
+#define CONFIG_APAD_FILTER 0
+#define CONFIG_APERMS_FILTER 0
+#define CONFIG_APHASER_FILTER 0
+#define CONFIG_APULSATOR_FILTER 0
+#define CONFIG_AREALTIME_FILTER 0
+#define CONFIG_ARESAMPLE_FILTER 0
+#define CONFIG_AREVERSE_FILTER 0
+#define CONFIG_ARNNDN_FILTER 0
+#define CONFIG_ASELECT_FILTER 0
+#define CONFIG_ASENDCMD_FILTER 0
+#define CONFIG_ASETNSAMPLES_FILTER 0
+#define CONFIG_ASETPTS_FILTER 0
+#define CONFIG_ASETRATE_FILTER 0
+#define CONFIG_ASETTB_FILTER 0
+#define CONFIG_ASHOWINFO_FILTER 0
+#define CONFIG_ASIDEDATA_FILTER 0
+#define CONFIG_ASOFTCLIP_FILTER 0
+#define CONFIG_ASPLIT_FILTER 0
+#define CONFIG_ASR_FILTER 0
+#define CONFIG_ASTATS_FILTER 0
+#define CONFIG_ASTREAMSELECT_FILTER 0
+#define CONFIG_ATEMPO_FILTER 0
+#define CONFIG_ATRIM_FILTER 0
+#define CONFIG_AXCORRELATE_FILTER 0
+#define CONFIG_AZMQ_FILTER 0
+#define CONFIG_BANDPASS_FILTER 0
+#define CONFIG_BANDREJECT_FILTER 0
+#define CONFIG_BASS_FILTER 0
+#define CONFIG_BIQUAD_FILTER 0
+#define CONFIG_BS2B_FILTER 0
+#define CONFIG_CHROMABER_VULKAN_FILTER 0
+#define CONFIG_CHANNELMAP_FILTER 0
+#define CONFIG_CHANNELSPLIT_FILTER 0
+#define CONFIG_CHORUS_FILTER 0
+#define CONFIG_COMPAND_FILTER 0
+#define CONFIG_COMPENSATIONDELAY_FILTER 0
+#define CONFIG_CROSSFEED_FILTER 0
+#define CONFIG_CRYSTALIZER_FILTER 0
+#define CONFIG_DCSHIFT_FILTER 0
+#define CONFIG_DEESSER_FILTER 0
+#define CONFIG_DRMETER_FILTER 0
+#define CONFIG_DYNAUDNORM_FILTER 0
+#define CONFIG_EARWAX_FILTER 0
+#define CONFIG_EBUR128_FILTER 0
+#define CONFIG_EQUALIZER_FILTER 0
+#define CONFIG_EXTRASTEREO_FILTER 0
+#define CONFIG_FIREQUALIZER_FILTER 0
+#define CONFIG_FLANGER_FILTER 0
+#define CONFIG_HAAS_FILTER 0
+#define CONFIG_HDCD_FILTER 0
+#define CONFIG_HEADPHONE_FILTER 0
+#define CONFIG_HIGHPASS_FILTER 0
+#define CONFIG_HIGHSHELF_FILTER 0
+#define CONFIG_JOIN_FILTER 0
+#define CONFIG_LADSPA_FILTER 0
+#define CONFIG_LOUDNORM_FILTER 0
+#define CONFIG_LOWPASS_FILTER 0
+#define CONFIG_LOWSHELF_FILTER 0
+#define CONFIG_LV2_FILTER 0
+#define CONFIG_MCOMPAND_FILTER 0
+#define CONFIG_PAN_FILTER 0
+#define CONFIG_REPLAYGAIN_FILTER 0
+#define CONFIG_RESAMPLE_FILTER 0
+#define CONFIG_RUBBERBAND_FILTER 0
+#define CONFIG_SIDECHAINCOMPRESS_FILTER 0
+#define CONFIG_SIDECHAINGATE_FILTER 0
+#define CONFIG_SILENCEDETECT_FILTER 0
+#define CONFIG_SILENCEREMOVE_FILTER 0
+#define CONFIG_SOFALIZER_FILTER 0
+#define CONFIG_STEREOTOOLS_FILTER 0
+#define CONFIG_STEREOWIDEN_FILTER 0
+#define CONFIG_SUPEREQUALIZER_FILTER 0
+#define CONFIG_SURROUND_FILTER 0
+#define CONFIG_TREBLE_FILTER 0
+#define CONFIG_TREMOLO_FILTER 0
+#define CONFIG_VIBRATO_FILTER 0
+#define CONFIG_VOLUME_FILTER 0
+#define CONFIG_VOLUMEDETECT_FILTER 0
+#define CONFIG_AEVALSRC_FILTER 0
+#define CONFIG_AFIRSRC_FILTER 0
+#define CONFIG_ANOISESRC_FILTER 0
+#define CONFIG_ANULLSRC_FILTER 0
+#define CONFIG_FLITE_FILTER 0
+#define CONFIG_HILBERT_FILTER 0
+#define CONFIG_SINC_FILTER 0
+#define CONFIG_SINE_FILTER 0
+#define CONFIG_ANULLSINK_FILTER 0
+#define CONFIG_ADDROI_FILTER 0
+#define CONFIG_ALPHAEXTRACT_FILTER 0
+#define CONFIG_ALPHAMERGE_FILTER 0
+#define CONFIG_AMPLIFY_FILTER 0
+#define CONFIG_ASS_FILTER 0
+#define CONFIG_ATADENOISE_FILTER 0
+#define CONFIG_AVGBLUR_FILTER 0
+#define CONFIG_AVGBLUR_OPENCL_FILTER 0
+#define CONFIG_AVGBLUR_VULKAN_FILTER 0
+#define CONFIG_BBOX_FILTER 0
+#define CONFIG_BENCH_FILTER 0
+#define CONFIG_BILATERAL_FILTER 0
+#define CONFIG_BITPLANENOISE_FILTER 0
+#define CONFIG_BLACKDETECT_FILTER 0
+#define CONFIG_BLACKFRAME_FILTER 0
+#define CONFIG_BLEND_FILTER 0
+#define CONFIG_BM3D_FILTER 0
+#define CONFIG_BOXBLUR_FILTER 0
+#define CONFIG_BOXBLUR_OPENCL_FILTER 0
+#define CONFIG_BWDIF_FILTER 0
+#define CONFIG_CAS_FILTER 0
+#define CONFIG_CHROMAHOLD_FILTER 0
+#define CONFIG_CHROMAKEY_FILTER 0
+#define CONFIG_CHROMASHIFT_FILTER 0
+#define CONFIG_CIESCOPE_FILTER 0
+#define CONFIG_CODECVIEW_FILTER 0
+#define CONFIG_COLORBALANCE_FILTER 0
+#define CONFIG_COLORCHANNELMIXER_FILTER 0
+#define CONFIG_COLORKEY_FILTER 0
+#define CONFIG_COLORKEY_OPENCL_FILTER 0
+#define CONFIG_COLORHOLD_FILTER 0
+#define CONFIG_COLORLEVELS_FILTER 0
+#define CONFIG_COLORMATRIX_FILTER 0
+#define CONFIG_COLORSPACE_FILTER 0
+#define CONFIG_CONVOLUTION_FILTER 0
+#define CONFIG_CONVOLUTION_OPENCL_FILTER 0
+#define CONFIG_CONVOLVE_FILTER 0
+#define CONFIG_COPY_FILTER 0
+#define CONFIG_COREIMAGE_FILTER 0
+#define CONFIG_COVER_RECT_FILTER 0
+#define CONFIG_CROP_FILTER 0
+#define CONFIG_CROPDETECT_FILTER 0
+#define CONFIG_CUE_FILTER 0
+#define CONFIG_CURVES_FILTER 0
+#define CONFIG_DATASCOPE_FILTER 0
+#define CONFIG_DCTDNOIZ_FILTER 0
+#define CONFIG_DEBAND_FILTER 0
+#define CONFIG_DEBLOCK_FILTER 0
+#define CONFIG_DECIMATE_FILTER 0
+#define CONFIG_DECONVOLVE_FILTER 0
+#define CONFIG_DEDOT_FILTER 0
+#define CONFIG_DEFLATE_FILTER 0
+#define CONFIG_DEFLICKER_FILTER 0
+#define CONFIG_DEINTERLACE_QSV_FILTER 0
+#define CONFIG_DEINTERLACE_VAAPI_FILTER 0
+#define CONFIG_DEJUDDER_FILTER 0
+#define CONFIG_DELOGO_FILTER 0
+#define CONFIG_DENOISE_VAAPI_FILTER 0
+#define CONFIG_DERAIN_FILTER 0
+#define CONFIG_DESHAKE_FILTER 0
+#define CONFIG_DESHAKE_OPENCL_FILTER 0
+#define CONFIG_DESPILL_FILTER 0
+#define CONFIG_DETELECINE_FILTER 0
+#define CONFIG_DILATION_FILTER 0
+#define CONFIG_DILATION_OPENCL_FILTER 0
+#define CONFIG_DISPLACE_FILTER 0
+#define CONFIG_DNN_PROCESSING_FILTER 0
+#define CONFIG_DOUBLEWEAVE_FILTER 0
+#define CONFIG_DRAWBOX_FILTER 0
+#define CONFIG_DRAWGRAPH_FILTER 0
+#define CONFIG_DRAWGRID_FILTER 0
+#define CONFIG_DRAWTEXT_FILTER 0
+#define CONFIG_EDGEDETECT_FILTER 0
+#define CONFIG_ELBG_FILTER 0
+#define CONFIG_ENTROPY_FILTER 0
+#define CONFIG_EQ_FILTER 0
+#define CONFIG_EROSION_FILTER 0
+#define CONFIG_EROSION_OPENCL_FILTER 0
+#define CONFIG_EXTRACTPLANES_FILTER 0
+#define CONFIG_FADE_FILTER 0
+#define CONFIG_FFTDNOIZ_FILTER 0
+#define CONFIG_FFTFILT_FILTER 0
+#define CONFIG_FIELD_FILTER 0
+#define CONFIG_FIELDHINT_FILTER 0
+#define CONFIG_FIELDMATCH_FILTER 0
+#define CONFIG_FIELDORDER_FILTER 0
+#define CONFIG_FILLBORDERS_FILTER 0
+#define CONFIG_FIND_RECT_FILTER 0
+#define CONFIG_FLOODFILL_FILTER 0
+#define CONFIG_FORMAT_FILTER 0
+#define CONFIG_FPS_FILTER 0
+#define CONFIG_FRAMEPACK_FILTER 0
+#define CONFIG_FRAMERATE_FILTER 0
+#define CONFIG_FRAMESTEP_FILTER 0
+#define CONFIG_FREEZEDETECT_FILTER 0
+#define CONFIG_FREEZEFRAMES_FILTER 0
+#define CONFIG_FREI0R_FILTER 0
+#define CONFIG_FSPP_FILTER 0
+#define CONFIG_GBLUR_FILTER 0
+#define CONFIG_GEQ_FILTER 0
+#define CONFIG_GRADFUN_FILTER 0
+#define CONFIG_GRAPHMONITOR_FILTER 0
+#define CONFIG_GREYEDGE_FILTER 0
+#define CONFIG_HALDCLUT_FILTER 0
+#define CONFIG_HFLIP_FILTER 0
+#define CONFIG_HISTEQ_FILTER 0
+#define CONFIG_HISTOGRAM_FILTER 0
+#define CONFIG_HQDN3D_FILTER 0
+#define CONFIG_HQX_FILTER 0
+#define CONFIG_HSTACK_FILTER 0
+#define CONFIG_HUE_FILTER 0
+#define CONFIG_HWDOWNLOAD_FILTER 0
+#define CONFIG_HWMAP_FILTER 0
+#define CONFIG_HWUPLOAD_FILTER 0
+#define CONFIG_HWUPLOAD_CUDA_FILTER 0
+#define CONFIG_HYSTERESIS_FILTER 0
+#define CONFIG_IDET_FILTER 0
+#define CONFIG_IL_FILTER 0
+#define CONFIG_INFLATE_FILTER 0
+#define CONFIG_INTERLACE_FILTER 0
+#define CONFIG_INTERLEAVE_FILTER 0
+#define CONFIG_KERNDEINT_FILTER 0
+#define CONFIG_LAGFUN_FILTER 0
+#define CONFIG_LENSCORRECTION_FILTER 0
+#define CONFIG_LENSFUN_FILTER 0
+#define CONFIG_LIBVMAF_FILTER 0
+#define CONFIG_LIMITER_FILTER 0
+#define CONFIG_LOOP_FILTER 0
+#define CONFIG_LUMAKEY_FILTER 0
+#define CONFIG_LUT_FILTER 0
+#define CONFIG_LUT1D_FILTER 0
+#define CONFIG_LUT2_FILTER 0
+#define CONFIG_LUT3D_FILTER 0
+#define CONFIG_LUTRGB_FILTER 0
+#define CONFIG_LUTYUV_FILTER 0
+#define CONFIG_MASKEDCLAMP_FILTER 0
+#define CONFIG_MASKEDMAX_FILTER 0
+#define CONFIG_MASKEDMERGE_FILTER 0
+#define CONFIG_MASKEDMIN_FILTER 0
+#define CONFIG_MASKEDTHRESHOLD_FILTER 0
+#define CONFIG_MASKFUN_FILTER 0
+#define CONFIG_MCDEINT_FILTER 0
+#define CONFIG_MEDIAN_FILTER 0
+#define CONFIG_MERGEPLANES_FILTER 0
+#define CONFIG_MESTIMATE_FILTER 0
+#define CONFIG_METADATA_FILTER 0
+#define CONFIG_MIDEQUALIZER_FILTER 0
+#define CONFIG_MINTERPOLATE_FILTER 0
+#define CONFIG_MIX_FILTER 0
+#define CONFIG_MPDECIMATE_FILTER 0
+#define CONFIG_NEGATE_FILTER 0
+#define CONFIG_NLMEANS_FILTER 0
+#define CONFIG_NLMEANS_OPENCL_FILTER 0
+#define CONFIG_NNEDI_FILTER 0
+#define CONFIG_NOFORMAT_FILTER 0
+#define CONFIG_NOISE_FILTER 0
+#define CONFIG_NORMALIZE_FILTER 0
+#define CONFIG_NULL_FILTER 0
+#define CONFIG_OCR_FILTER 0
+#define CONFIG_OCV_FILTER 0
+#define CONFIG_OSCILLOSCOPE_FILTER 0
+#define CONFIG_OVERLAY_FILTER 0
+#define CONFIG_OVERLAY_OPENCL_FILTER 0
+#define CONFIG_OVERLAY_QSV_FILTER 0
+#define CONFIG_OVERLAY_VULKAN_FILTER 0
+#define CONFIG_OVERLAY_CUDA_FILTER 0
+#define CONFIG_OWDENOISE_FILTER 0
+#define CONFIG_PAD_FILTER 0
+#define CONFIG_PAD_OPENCL_FILTER 0
+#define CONFIG_PALETTEGEN_FILTER 0
+#define CONFIG_PALETTEUSE_FILTER 0
+#define CONFIG_PERMS_FILTER 0
+#define CONFIG_PERSPECTIVE_FILTER 0
+#define CONFIG_PHASE_FILTER 0
+#define CONFIG_PHOTOSENSITIVITY_FILTER 0
+#define CONFIG_PIXDESCTEST_FILTER 0
+#define CONFIG_PIXSCOPE_FILTER 0
+#define CONFIG_PP_FILTER 0
+#define CONFIG_PP7_FILTER 0
+#define CONFIG_PREMULTIPLY_FILTER 0
+#define CONFIG_PREWITT_FILTER 0
+#define CONFIG_PREWITT_OPENCL_FILTER 0
+#define CONFIG_PROCAMP_VAAPI_FILTER 0
+#define CONFIG_PROGRAM_OPENCL_FILTER 0
+#define CONFIG_PSEUDOCOLOR_FILTER 0
+#define CONFIG_PSNR_FILTER 0
+#define CONFIG_PULLUP_FILTER 0
+#define CONFIG_QP_FILTER 0
+#define CONFIG_RANDOM_FILTER 0
+#define CONFIG_READEIA608_FILTER 0
+#define CONFIG_READVITC_FILTER 0
+#define CONFIG_REALTIME_FILTER 0
+#define CONFIG_REMAP_FILTER 0
+#define CONFIG_REMOVEGRAIN_FILTER 0
+#define CONFIG_REMOVELOGO_FILTER 0
+#define CONFIG_REPEATFIELDS_FILTER 0
+#define CONFIG_REVERSE_FILTER 0
+#define CONFIG_RGBASHIFT_FILTER 0
+#define CONFIG_ROBERTS_FILTER 0
+#define CONFIG_ROBERTS_OPENCL_FILTER 0
+#define CONFIG_ROTATE_FILTER 0
+#define CONFIG_SAB_FILTER 0
+#define CONFIG_SCALE_FILTER 0
+#define CONFIG_SCALE_CUDA_FILTER 0
+#define CONFIG_SCALE_NPP_FILTER 0
+#define CONFIG_SCALE_QSV_FILTER 0
+#define CONFIG_SCALE_VAAPI_FILTER 0
+#define CONFIG_SCALE_VULKAN_FILTER 0
+#define CONFIG_SCALE2REF_FILTER 0
+#define CONFIG_SCROLL_FILTER 0
+#define CONFIG_SELECT_FILTER 0
+#define CONFIG_SELECTIVECOLOR_FILTER 0
+#define CONFIG_SENDCMD_FILTER 0
+#define CONFIG_SEPARATEFIELDS_FILTER 0
+#define CONFIG_SETDAR_FILTER 0
+#define CONFIG_SETFIELD_FILTER 0
+#define CONFIG_SETPARAMS_FILTER 0
+#define CONFIG_SETPTS_FILTER 0
+#define CONFIG_SETRANGE_FILTER 0
+#define CONFIG_SETSAR_FILTER 0
+#define CONFIG_SETTB_FILTER 0
+#define CONFIG_SHARPNESS_VAAPI_FILTER 0
+#define CONFIG_SHOWINFO_FILTER 0
+#define CONFIG_SHOWPALETTE_FILTER 0
+#define CONFIG_SHUFFLEFRAMES_FILTER 0
+#define CONFIG_SHUFFLEPLANES_FILTER 0
+#define CONFIG_SIDEDATA_FILTER 0
+#define CONFIG_SIGNALSTATS_FILTER 0
+#define CONFIG_SIGNATURE_FILTER 0
+#define CONFIG_SMARTBLUR_FILTER 0
+#define CONFIG_SOBEL_FILTER 0
+#define CONFIG_SOBEL_OPENCL_FILTER 0
+#define CONFIG_SPLIT_FILTER 0
+#define CONFIG_SPP_FILTER 0
+#define CONFIG_SR_FILTER 0
+#define CONFIG_SSIM_FILTER 0
+#define CONFIG_STEREO3D_FILTER 0
+#define CONFIG_STREAMSELECT_FILTER 0
+#define CONFIG_SUBTITLES_FILTER 0
+#define CONFIG_SUPER2XSAI_FILTER 0
+#define CONFIG_SWAPRECT_FILTER 0
+#define CONFIG_SWAPUV_FILTER 0
+#define CONFIG_TBLEND_FILTER 0
+#define CONFIG_TELECINE_FILTER 0
+#define CONFIG_THISTOGRAM_FILTER 0
+#define CONFIG_THRESHOLD_FILTER 0
+#define CONFIG_THUMBNAIL_FILTER 0
+#define CONFIG_THUMBNAIL_CUDA_FILTER 0
+#define CONFIG_TILE_FILTER 0
+#define CONFIG_TINTERLACE_FILTER 0
+#define CONFIG_TLUT2_FILTER 0
+#define CONFIG_TMEDIAN_FILTER 0
+#define CONFIG_TMIX_FILTER 0
+#define CONFIG_TONEMAP_FILTER 0
+#define CONFIG_TONEMAP_OPENCL_FILTER 0
+#define CONFIG_TONEMAP_VAAPI_FILTER 0
+#define CONFIG_TPAD_FILTER 0
+#define CONFIG_TRANSPOSE_FILTER 0
+#define CONFIG_TRANSPOSE_NPP_FILTER 0
+#define CONFIG_TRANSPOSE_OPENCL_FILTER 0
+#define CONFIG_TRANSPOSE_VAAPI_FILTER 0
+#define CONFIG_TRIM_FILTER 0
+#define CONFIG_UNPREMULTIPLY_FILTER 0
+#define CONFIG_UNSHARP_FILTER 0
+#define CONFIG_UNSHARP_OPENCL_FILTER 0
+#define CONFIG_USPP_FILTER 0
+#define CONFIG_V360_FILTER 0
+#define CONFIG_VAGUEDENOISER_FILTER 0
+#define CONFIG_VECTORSCOPE_FILTER 0
+#define CONFIG_VFLIP_FILTER 0
+#define CONFIG_VFRDET_FILTER 0
+#define CONFIG_VIBRANCE_FILTER 0
+#define CONFIG_VIDSTABDETECT_FILTER 0
+#define CONFIG_VIDSTABTRANSFORM_FILTER 0
+#define CONFIG_VIGNETTE_FILTER 0
+#define CONFIG_VMAFMOTION_FILTER 0
+#define CONFIG_VPP_QSV_FILTER 0
+#define CONFIG_VSTACK_FILTER 0
+#define CONFIG_W3FDIF_FILTER 0
+#define CONFIG_WAVEFORM_FILTER 0
+#define CONFIG_WEAVE_FILTER 0
+#define CONFIG_XBR_FILTER 0
+#define CONFIG_XFADE_FILTER 0
+#define CONFIG_XFADE_OPENCL_FILTER 0
+#define CONFIG_XMEDIAN_FILTER 0
+#define CONFIG_XSTACK_FILTER 0
+#define CONFIG_YADIF_FILTER 0
+#define CONFIG_YADIF_CUDA_FILTER 0
+#define CONFIG_YAEPBLUR_FILTER 0
+#define CONFIG_ZMQ_FILTER 0
+#define CONFIG_ZOOMPAN_FILTER 0
+#define CONFIG_ZSCALE_FILTER 0
+#define CONFIG_ALLRGB_FILTER 0
+#define CONFIG_ALLYUV_FILTER 0
+#define CONFIG_CELLAUTO_FILTER 0
+#define CONFIG_COLOR_FILTER 0
+#define CONFIG_COREIMAGESRC_FILTER 0
+#define CONFIG_FREI0R_SRC_FILTER 0
+#define CONFIG_HALDCLUTSRC_FILTER 0
+#define CONFIG_LIFE_FILTER 0
+#define CONFIG_MANDELBROT_FILTER 0
+#define CONFIG_MPTESTSRC_FILTER 0
+#define CONFIG_NULLSRC_FILTER 0
+#define CONFIG_OPENCLSRC_FILTER 0
+#define CONFIG_PAL75BARS_FILTER 0
+#define CONFIG_PAL100BARS_FILTER 0
+#define CONFIG_RGBTESTSRC_FILTER 0
+#define CONFIG_SIERPINSKI_FILTER 0
+#define CONFIG_SMPTEBARS_FILTER 0
+#define CONFIG_SMPTEHDBARS_FILTER 0
+#define CONFIG_TESTSRC_FILTER 0
+#define CONFIG_TESTSRC2_FILTER 0
+#define CONFIG_YUVTESTSRC_FILTER 0
+#define CONFIG_NULLSINK_FILTER 0
+#define CONFIG_ABITSCOPE_FILTER 0
+#define CONFIG_ADRAWGRAPH_FILTER 0
+#define CONFIG_AGRAPHMONITOR_FILTER 0
+#define CONFIG_AHISTOGRAM_FILTER 0
+#define CONFIG_APHASEMETER_FILTER 0
+#define CONFIG_AVECTORSCOPE_FILTER 0
+#define CONFIG_CONCAT_FILTER 0
+#define CONFIG_SHOWCQT_FILTER 0
+#define CONFIG_SHOWFREQS_FILTER 0
+#define CONFIG_SHOWSPATIAL_FILTER 0
+#define CONFIG_SHOWSPECTRUM_FILTER 0
+#define CONFIG_SHOWSPECTRUMPIC_FILTER 0
+#define CONFIG_SHOWVOLUME_FILTER 0
+#define CONFIG_SHOWWAVES_FILTER 0
+#define CONFIG_SHOWWAVESPIC_FILTER 0
+#define CONFIG_SPECTRUMSYNTH_FILTER 0
+#define CONFIG_AMOVIE_FILTER 0
+#define CONFIG_MOVIE_FILTER 0
+#define CONFIG_AFIFO_FILTER 0
+#define CONFIG_FIFO_FILTER 0
+#define CONFIG_AA_DEMUXER 0
+#define CONFIG_AAC_DEMUXER 1
+#define CONFIG_AC3_DEMUXER 0
+#define CONFIG_ACM_DEMUXER 0
+#define CONFIG_ACT_DEMUXER 0
+#define CONFIG_ADF_DEMUXER 0
+#define CONFIG_ADP_DEMUXER 0
+#define CONFIG_ADS_DEMUXER 0
+#define CONFIG_ADX_DEMUXER 0
+#define CONFIG_AEA_DEMUXER 0
+#define CONFIG_AFC_DEMUXER 0
+#define CONFIG_AIFF_DEMUXER 0
+#define CONFIG_AIX_DEMUXER 0
+#define CONFIG_ALP_DEMUXER 0
+#define CONFIG_AMR_DEMUXER 1
+#define CONFIG_AMRNB_DEMUXER 0
+#define CONFIG_AMRWB_DEMUXER 0
+#define CONFIG_ANM_DEMUXER 0
+#define CONFIG_APC_DEMUXER 0
+#define CONFIG_APE_DEMUXER 0
+#define CONFIG_APM_DEMUXER 0
+#define CONFIG_APNG_DEMUXER 0
+#define CONFIG_APTX_DEMUXER 0
+#define CONFIG_APTX_HD_DEMUXER 0
+#define CONFIG_AQTITLE_DEMUXER 0
+#define CONFIG_ARGO_ASF_DEMUXER 0
+#define CONFIG_ASF_DEMUXER 0
+#define CONFIG_ASF_O_DEMUXER 0
+#define CONFIG_ASS_DEMUXER 0
+#define CONFIG_AST_DEMUXER 0
+#define CONFIG_AU_DEMUXER 0
+#define CONFIG_AV1_DEMUXER 0
+#define CONFIG_AVI_DEMUXER 1
+#define CONFIG_AVISYNTH_DEMUXER 0
+#define CONFIG_AVR_DEMUXER 0
+#define CONFIG_AVS_DEMUXER 0
+#define CONFIG_AVS2_DEMUXER 0
+#define CONFIG_BETHSOFTVID_DEMUXER 0
+#define CONFIG_BFI_DEMUXER 0
+#define CONFIG_BINTEXT_DEMUXER 0
+#define CONFIG_BINK_DEMUXER 0
+#define CONFIG_BIT_DEMUXER 0
+#define CONFIG_BMV_DEMUXER 0
+#define CONFIG_BFSTM_DEMUXER 0
+#define CONFIG_BRSTM_DEMUXER 0
+#define CONFIG_BOA_DEMUXER 0
+#define CONFIG_C93_DEMUXER 0
+#define CONFIG_CAF_DEMUXER 0
+#define CONFIG_CAVSVIDEO_DEMUXER 0
+#define CONFIG_CDG_DEMUXER 0
+#define CONFIG_CDXL_DEMUXER 0
+#define CONFIG_CINE_DEMUXER 0
+#define CONFIG_CODEC2_DEMUXER 0
+#define CONFIG_CODEC2RAW_DEMUXER 0
+#define CONFIG_CONCAT_DEMUXER 0
+#define CONFIG_DASH_DEMUXER 0
+#define CONFIG_DATA_DEMUXER 0
+#define CONFIG_DAUD_DEMUXER 0
+#define CONFIG_DCSTR_DEMUXER 0
+#define CONFIG_DERF_DEMUXER 0
+#define CONFIG_DFA_DEMUXER 0
+#define CONFIG_DHAV_DEMUXER 0
+#define CONFIG_DIRAC_DEMUXER 0
+#define CONFIG_DNXHD_DEMUXER 0
+#define CONFIG_DSF_DEMUXER 0
+#define CONFIG_DSICIN_DEMUXER 0
+#define CONFIG_DSS_DEMUXER 0
+#define CONFIG_DTS_DEMUXER 0
+#define CONFIG_DTSHD_DEMUXER 0
+#define CONFIG_DV_DEMUXER 0
+#define CONFIG_DVBSUB_DEMUXER 0
+#define CONFIG_DVBTXT_DEMUXER 0
+#define CONFIG_DXA_DEMUXER 0
+#define CONFIG_EA_DEMUXER 0
+#define CONFIG_EA_CDATA_DEMUXER 0
+#define CONFIG_EAC3_DEMUXER 0
+#define CONFIG_EPAF_DEMUXER 0
+#define CONFIG_FFMETADATA_DEMUXER 0
+#define CONFIG_FILMSTRIP_DEMUXER 0
+#define CONFIG_FITS_DEMUXER 0
+#define CONFIG_FLAC_DEMUXER 1
+#define CONFIG_FLIC_DEMUXER 0
+#define CONFIG_FLV_DEMUXER 0
+#define CONFIG_LIVE_FLV_DEMUXER 0
+#define CONFIG_FOURXM_DEMUXER 0
+#define CONFIG_FRM_DEMUXER 0
+#define CONFIG_FSB_DEMUXER 0
+#define CONFIG_FWSE_DEMUXER 0
+#define CONFIG_G722_DEMUXER 0
+#define CONFIG_G723_1_DEMUXER 0
+#define CONFIG_G726_DEMUXER 0
+#define CONFIG_G726LE_DEMUXER 0
+#define CONFIG_G729_DEMUXER 0
+#define CONFIG_GDV_DEMUXER 0
+#define CONFIG_GENH_DEMUXER 0
+#define CONFIG_GIF_DEMUXER 0
+#define CONFIG_GSM_DEMUXER 1
+#define CONFIG_GXF_DEMUXER 0
+#define CONFIG_H261_DEMUXER 0
+#define CONFIG_H263_DEMUXER 0
+#define CONFIG_H264_DEMUXER 0
+#define CONFIG_HCA_DEMUXER 0
+#define CONFIG_HCOM_DEMUXER 0
+#define CONFIG_HEVC_DEMUXER 0
+#define CONFIG_HLS_DEMUXER 0
+#define CONFIG_HNM_DEMUXER 0
+#define CONFIG_ICO_DEMUXER 0
+#define CONFIG_IDCIN_DEMUXER 0
+#define CONFIG_IDF_DEMUXER 0
+#define CONFIG_IFF_DEMUXER 0
+#define CONFIG_IFV_DEMUXER 0
+#define CONFIG_ILBC_DEMUXER 0
+#define CONFIG_IMAGE2_DEMUXER 0
+#define CONFIG_IMAGE2PIPE_DEMUXER 0
+#define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0
+#define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0
+#define CONFIG_INGENIENT_DEMUXER 0
+#define CONFIG_IPMOVIE_DEMUXER 0
+#define CONFIG_IRCAM_DEMUXER 0
+#define CONFIG_ISS_DEMUXER 0
+#define CONFIG_IV8_DEMUXER 0
+#define CONFIG_IVF_DEMUXER 0
+#define CONFIG_IVR_DEMUXER 0
+#define CONFIG_JACOSUB_DEMUXER 0
+#define CONFIG_JV_DEMUXER 0
+#define CONFIG_KUX_DEMUXER 0
+#define CONFIG_KVAG_DEMUXER 0
+#define CONFIG_LMLM4_DEMUXER 0
+#define CONFIG_LOAS_DEMUXER 0
+#define CONFIG_LRC_DEMUXER 0
+#define CONFIG_LVF_DEMUXER 0
+#define CONFIG_LXF_DEMUXER 0
+#define CONFIG_M4V_DEMUXER 0
+#define CONFIG_MATROSKA_DEMUXER 1
+#define CONFIG_MGSTS_DEMUXER 0
+#define CONFIG_MICRODVD_DEMUXER 0
+#define CONFIG_MJPEG_DEMUXER 0
+#define CONFIG_MJPEG_2000_DEMUXER 0
+#define CONFIG_MLP_DEMUXER 0
+#define CONFIG_MLV_DEMUXER 0
+#define CONFIG_MM_DEMUXER 0
+#define CONFIG_MMF_DEMUXER 0
+#define CONFIG_MOV_DEMUXER 1
+#define CONFIG_MP3_DEMUXER 1
+#define CONFIG_MPC_DEMUXER 0
+#define CONFIG_MPC8_DEMUXER 0
+#define CONFIG_MPEGPS_DEMUXER 0
+#define CONFIG_MPEGTS_DEMUXER 0
+#define CONFIG_MPEGTSRAW_DEMUXER 0
+#define CONFIG_MPEGVIDEO_DEMUXER 0
+#define CONFIG_MPJPEG_DEMUXER 0
+#define CONFIG_MPL2_DEMUXER 0
+#define CONFIG_MPSUB_DEMUXER 0
+#define CONFIG_MSF_DEMUXER 0
+#define CONFIG_MSNWC_TCP_DEMUXER 0
+#define CONFIG_MTAF_DEMUXER 0
+#define CONFIG_MTV_DEMUXER 0
+#define CONFIG_MUSX_DEMUXER 0
+#define CONFIG_MV_DEMUXER 0
+#define CONFIG_MVI_DEMUXER 0
+#define CONFIG_MXF_DEMUXER 0
+#define CONFIG_MXG_DEMUXER 0
+#define CONFIG_NC_DEMUXER 0
+#define CONFIG_NISTSPHERE_DEMUXER 0
+#define CONFIG_NSP_DEMUXER 0
+#define CONFIG_NSV_DEMUXER 0
+#define CONFIG_NUT_DEMUXER 0
+#define CONFIG_NUV_DEMUXER 0
+#define CONFIG_OGG_DEMUXER 1
+#define CONFIG_OMA_DEMUXER 0
+#define CONFIG_PAF_DEMUXER 0
+#define CONFIG_PCM_ALAW_DEMUXER 0
+#define CONFIG_PCM_MULAW_DEMUXER 0
+#define CONFIG_PCM_VIDC_DEMUXER 0
+#define CONFIG_PCM_F64BE_DEMUXER 0
+#define CONFIG_PCM_F64LE_DEMUXER 0
+#define CONFIG_PCM_F32BE_DEMUXER 0
+#define CONFIG_PCM_F32LE_DEMUXER 0
+#define CONFIG_PCM_S32BE_DEMUXER 0
+#define CONFIG_PCM_S32LE_DEMUXER 0
+#define CONFIG_PCM_S24BE_DEMUXER 0
+#define CONFIG_PCM_S24LE_DEMUXER 0
+#define CONFIG_PCM_S16BE_DEMUXER 0
+#define CONFIG_PCM_S16LE_DEMUXER 0
+#define CONFIG_PCM_S8_DEMUXER 0
+#define CONFIG_PCM_U32BE_DEMUXER 0
+#define CONFIG_PCM_U32LE_DEMUXER 0
+#define CONFIG_PCM_U24BE_DEMUXER 0
+#define CONFIG_PCM_U24LE_DEMUXER 0
+#define CONFIG_PCM_U16BE_DEMUXER 0
+#define CONFIG_PCM_U16LE_DEMUXER 0
+#define CONFIG_PCM_U8_DEMUXER 0
+#define CONFIG_PJS_DEMUXER 0
+#define CONFIG_PMP_DEMUXER 0
+#define CONFIG_PVA_DEMUXER 0
+#define CONFIG_PVF_DEMUXER 0
+#define CONFIG_QCP_DEMUXER 0
+#define CONFIG_R3D_DEMUXER 0
+#define CONFIG_RAWVIDEO_DEMUXER 0
+#define CONFIG_REALTEXT_DEMUXER 0
+#define CONFIG_REDSPARK_DEMUXER 0
+#define CONFIG_RL2_DEMUXER 0
+#define CONFIG_RM_DEMUXER 0
+#define CONFIG_ROQ_DEMUXER 0
+#define CONFIG_RPL_DEMUXER 0
+#define CONFIG_RSD_DEMUXER 0
+#define CONFIG_RSO_DEMUXER 0
+#define CONFIG_RTP_DEMUXER 0
+#define CONFIG_RTSP_DEMUXER 0
+#define CONFIG_S337M_DEMUXER 0
+#define CONFIG_SAMI_DEMUXER 0
+#define CONFIG_SAP_DEMUXER 0
+#define CONFIG_SBC_DEMUXER 0
+#define CONFIG_SBG_DEMUXER 0
+#define CONFIG_SCC_DEMUXER 0
+#define CONFIG_SDP_DEMUXER 0
+#define CONFIG_SDR2_DEMUXER 0
+#define CONFIG_SDS_DEMUXER 0
+#define CONFIG_SDX_DEMUXER 0
+#define CONFIG_SEGAFILM_DEMUXER 0
+#define CONFIG_SER_DEMUXER 0
+#define CONFIG_SHORTEN_DEMUXER 0
+#define CONFIG_SIFF_DEMUXER 0
+#define CONFIG_SLN_DEMUXER 0
+#define CONFIG_SMACKER_DEMUXER 0
+#define CONFIG_SMJPEG_DEMUXER 0
+#define CONFIG_SMUSH_DEMUXER 0
+#define CONFIG_SOL_DEMUXER 0
+#define CONFIG_SOX_DEMUXER 0
+#define CONFIG_SPDIF_DEMUXER 0
+#define CONFIG_SRT_DEMUXER 0
+#define CONFIG_STR_DEMUXER 0
+#define CONFIG_STL_DEMUXER 0
+#define CONFIG_SUBVIEWER1_DEMUXER 0
+#define CONFIG_SUBVIEWER_DEMUXER 0
+#define CONFIG_SUP_DEMUXER 0
+#define CONFIG_SVAG_DEMUXER 0
+#define CONFIG_SWF_DEMUXER 0
+#define CONFIG_TAK_DEMUXER 0
+#define CONFIG_TEDCAPTIONS_DEMUXER 0
+#define CONFIG_THP_DEMUXER 0
+#define CONFIG_THREEDOSTR_DEMUXER 0
+#define CONFIG_TIERTEXSEQ_DEMUXER 0
+#define CONFIG_TMV_DEMUXER 0
+#define CONFIG_TRUEHD_DEMUXER 0
+#define CONFIG_TTA_DEMUXER 0
+#define CONFIG_TXD_DEMUXER 0
+#define CONFIG_TTY_DEMUXER 0
+#define CONFIG_TY_DEMUXER 0
+#define CONFIG_V210_DEMUXER 0
+#define CONFIG_V210X_DEMUXER 0
+#define CONFIG_VAG_DEMUXER 0
+#define CONFIG_VC1_DEMUXER 0
+#define CONFIG_VC1T_DEMUXER 0
+#define CONFIG_VIVIDAS_DEMUXER 0
+#define CONFIG_VIVO_DEMUXER 0
+#define CONFIG_VMD_DEMUXER 0
+#define CONFIG_VOBSUB_DEMUXER 0
+#define CONFIG_VOC_DEMUXER 0
+#define CONFIG_VPK_DEMUXER 0
+#define CONFIG_VPLAYER_DEMUXER 0
+#define CONFIG_VQF_DEMUXER 0
+#define CONFIG_W64_DEMUXER 0
+#define CONFIG_WAV_DEMUXER 1
+#define CONFIG_WC3_DEMUXER 0
+#define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0
+#define CONFIG_WEBVTT_DEMUXER 0
+#define CONFIG_WSAUD_DEMUXER 0
+#define CONFIG_WSD_DEMUXER 0
+#define CONFIG_WSVQA_DEMUXER 0
+#define CONFIG_WTV_DEMUXER 0
+#define CONFIG_WVE_DEMUXER 0
+#define CONFIG_WV_DEMUXER 0
+#define CONFIG_XA_DEMUXER 0
+#define CONFIG_XBIN_DEMUXER 0
+#define CONFIG_XMV_DEMUXER 0
+#define CONFIG_XVAG_DEMUXER 0
+#define CONFIG_XWMA_DEMUXER 0
+#define CONFIG_YOP_DEMUXER 0
+#define CONFIG_YUV4MPEGPIPE_DEMUXER 0
+#define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_GIF_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_PSD_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_SVG_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_XPM_PIPE_DEMUXER 0
+#define CONFIG_IMAGE_XWD_PIPE_DEMUXER 0
+#define CONFIG_LIBGME_DEMUXER 0
+#define CONFIG_LIBMODPLUG_DEMUXER 0
+#define CONFIG_LIBOPENMPT_DEMUXER 0
+#define CONFIG_VAPOURSYNTH_DEMUXER 0
+#define CONFIG_A64_MUXER 0
+#define CONFIG_AC3_MUXER 0
+#define CONFIG_ADTS_MUXER 0
+#define CONFIG_ADX_MUXER 0
+#define CONFIG_AIFF_MUXER 0
+#define CONFIG_AMR_MUXER 0
+#define CONFIG_APNG_MUXER 0
+#define CONFIG_APTX_MUXER 0
+#define CONFIG_APTX_HD_MUXER 0
+#define CONFIG_ASF_MUXER 0
+#define CONFIG_ASS_MUXER 0
+#define CONFIG_AST_MUXER 0
+#define CONFIG_ASF_STREAM_MUXER 0
+#define CONFIG_AU_MUXER 0
+#define CONFIG_AVI_MUXER 0
+#define CONFIG_AVM2_MUXER 0
+#define CONFIG_AVS2_MUXER 0
+#define CONFIG_BIT_MUXER 0
+#define CONFIG_CAF_MUXER 0
+#define CONFIG_CAVSVIDEO_MUXER 0
+#define CONFIG_CODEC2_MUXER 0
+#define CONFIG_CODEC2RAW_MUXER 0
+#define CONFIG_CRC_MUXER 0
+#define CONFIG_DASH_MUXER 0
+#define CONFIG_DATA_MUXER 0
+#define CONFIG_DAUD_MUXER 0
+#define CONFIG_DIRAC_MUXER 0
+#define CONFIG_DNXHD_MUXER 0
+#define CONFIG_DTS_MUXER 0
+#define CONFIG_DV_MUXER 0
+#define CONFIG_EAC3_MUXER 0
+#define CONFIG_F4V_MUXER 0
+#define CONFIG_FFMETADATA_MUXER 0
+#define CONFIG_FIFO_MUXER 0
+#define CONFIG_FIFO_TEST_MUXER 0
+#define CONFIG_FILMSTRIP_MUXER 0
+#define CONFIG_FITS_MUXER 0
+#define CONFIG_FLAC_MUXER 0
+#define CONFIG_FLV_MUXER 0
+#define CONFIG_FRAMECRC_MUXER 0
+#define CONFIG_FRAMEHASH_MUXER 0
+#define CONFIG_FRAMEMD5_MUXER 0
+#define CONFIG_G722_MUXER 0
+#define CONFIG_G723_1_MUXER 0
+#define CONFIG_G726_MUXER 0
+#define CONFIG_G726LE_MUXER 0
+#define CONFIG_GIF_MUXER 0
+#define CONFIG_GSM_MUXER 0
+#define CONFIG_GXF_MUXER 0
+#define CONFIG_H261_MUXER 0
+#define CONFIG_H263_MUXER 0
+#define CONFIG_H264_MUXER 0
+#define CONFIG_HASH_MUXER 0
+#define CONFIG_HDS_MUXER 0
+#define CONFIG_HEVC_MUXER 0
+#define CONFIG_HLS_MUXER 0
+#define CONFIG_ICO_MUXER 0
+#define CONFIG_ILBC_MUXER 0
+#define CONFIG_IMAGE2_MUXER 0
+#define CONFIG_IMAGE2PIPE_MUXER 0
+#define CONFIG_IPOD_MUXER 0
+#define CONFIG_IRCAM_MUXER 0
+#define CONFIG_ISMV_MUXER 0
+#define CONFIG_IVF_MUXER 0
+#define CONFIG_JACOSUB_MUXER 0
+#define CONFIG_LATM_MUXER 0
+#define CONFIG_LRC_MUXER 0
+#define CONFIG_M4V_MUXER 0
+#define CONFIG_MD5_MUXER 0
+#define CONFIG_MATROSKA_MUXER 0
+#define CONFIG_MATROSKA_AUDIO_MUXER 0
+#define CONFIG_MICRODVD_MUXER 0
+#define CONFIG_MJPEG_MUXER 0
+#define CONFIG_MLP_MUXER 0
+#define CONFIG_MMF_MUXER 0
+#define CONFIG_MOV_MUXER 0
+#define CONFIG_MP2_MUXER 0
+#define CONFIG_MP3_MUXER 0
+#define CONFIG_MP4_MUXER 0
+#define CONFIG_MPEG1SYSTEM_MUXER 0
+#define CONFIG_MPEG1VCD_MUXER 0
+#define CONFIG_MPEG1VIDEO_MUXER 0
+#define CONFIG_MPEG2DVD_MUXER 0
+#define CONFIG_MPEG2SVCD_MUXER 0
+#define CONFIG_MPEG2VIDEO_MUXER 0
+#define CONFIG_MPEG2VOB_MUXER 0
+#define CONFIG_MPEGTS_MUXER 0
+#define CONFIG_MPJPEG_MUXER 0
+#define CONFIG_MXF_MUXER 0
+#define CONFIG_MXF_D10_MUXER 0
+#define CONFIG_MXF_OPATOM_MUXER 0
+#define CONFIG_NULL_MUXER 0
+#define CONFIG_NUT_MUXER 0
+#define CONFIG_OGA_MUXER 0
+#define CONFIG_OGG_MUXER 0
+#define CONFIG_OGV_MUXER 0
+#define CONFIG_OMA_MUXER 0
+#define CONFIG_OPUS_MUXER 0
+#define CONFIG_PCM_ALAW_MUXER 0
+#define CONFIG_PCM_MULAW_MUXER 0
+#define CONFIG_PCM_VIDC_MUXER 0
+#define CONFIG_PCM_F64BE_MUXER 0
+#define CONFIG_PCM_F64LE_MUXER 0
+#define CONFIG_PCM_F32BE_MUXER 0
+#define CONFIG_PCM_F32LE_MUXER 0
+#define CONFIG_PCM_S32BE_MUXER 0
+#define CONFIG_PCM_S32LE_MUXER 0
+#define CONFIG_PCM_S24BE_MUXER 0
+#define CONFIG_PCM_S24LE_MUXER 0
+#define CONFIG_PCM_S16BE_MUXER 0
+#define CONFIG_PCM_S16LE_MUXER 0
+#define CONFIG_PCM_S8_MUXER 0
+#define CONFIG_PCM_U32BE_MUXER 0
+#define CONFIG_PCM_U32LE_MUXER 0
+#define CONFIG_PCM_U24BE_MUXER 0
+#define CONFIG_PCM_U24LE_MUXER 0
+#define CONFIG_PCM_U16BE_MUXER 0
+#define CONFIG_PCM_U16LE_MUXER 0
+#define CONFIG_PCM_U8_MUXER 0
+#define CONFIG_PSP_MUXER 0
+#define CONFIG_RAWVIDEO_MUXER 0
+#define CONFIG_RM_MUXER 0
+#define CONFIG_ROQ_MUXER 0
+#define CONFIG_RSO_MUXER 0
+#define CONFIG_RTP_MUXER 0
+#define CONFIG_RTP_MPEGTS_MUXER 0
+#define CONFIG_RTSP_MUXER 0
+#define CONFIG_SAP_MUXER 0
+#define CONFIG_SBC_MUXER 0
+#define CONFIG_SCC_MUXER 0
+#define CONFIG_SEGAFILM_MUXER 0
+#define CONFIG_SEGMENT_MUXER 0
+#define CONFIG_STREAM_SEGMENT_MUXER 0
+#define CONFIG_SINGLEJPEG_MUXER 0
+#define CONFIG_SMJPEG_MUXER 0
+#define CONFIG_SMOOTHSTREAMING_MUXER 0
+#define CONFIG_SOX_MUXER 0
+#define CONFIG_SPX_MUXER 0
+#define CONFIG_SPDIF_MUXER 0
+#define CONFIG_SRT_MUXER 0
+#define CONFIG_STREAMHASH_MUXER 0
+#define CONFIG_SUP_MUXER 0
+#define CONFIG_SWF_MUXER 0
+#define CONFIG_TEE_MUXER 0
+#define CONFIG_TG2_MUXER 0
+#define CONFIG_TGP_MUXER 0
+#define CONFIG_MKVTIMESTAMP_V2_MUXER 0
+#define CONFIG_TRUEHD_MUXER 0
+#define CONFIG_TTA_MUXER 0
+#define CONFIG_UNCODEDFRAMECRC_MUXER 0
+#define CONFIG_VC1_MUXER 0
+#define CONFIG_VC1T_MUXER 0
+#define CONFIG_VOC_MUXER 0
+#define CONFIG_W64_MUXER 0
+#define CONFIG_WAV_MUXER 0
+#define CONFIG_WEBM_MUXER 0
+#define CONFIG_WEBM_DASH_MANIFEST_MUXER 0
+#define CONFIG_WEBM_CHUNK_MUXER 0
+#define CONFIG_WEBP_MUXER 0
+#define CONFIG_WEBVTT_MUXER 0
+#define CONFIG_WTV_MUXER 0
+#define CONFIG_WV_MUXER 0
+#define CONFIG_YUV4MPEGPIPE_MUXER 0
+#define CONFIG_CHROMAPRINT_MUXER 0
+#define CONFIG_ASYNC_PROTOCOL 0
+#define CONFIG_BLURAY_PROTOCOL 0
+#define CONFIG_CACHE_PROTOCOL 0
+#define CONFIG_CONCAT_PROTOCOL 0
+#define CONFIG_CRYPTO_PROTOCOL 0
+#define CONFIG_DATA_PROTOCOL 0
+#define CONFIG_FFRTMPCRYPT_PROTOCOL 0
+#define CONFIG_FFRTMPHTTP_PROTOCOL 0
+#define CONFIG_FILE_PROTOCOL 0
+#define CONFIG_FTP_PROTOCOL 0
+#define CONFIG_GOPHER_PROTOCOL 0
+#define CONFIG_HLS_PROTOCOL 0
+#define CONFIG_HTTP_PROTOCOL 0
+#define CONFIG_HTTPPROXY_PROTOCOL 0
+#define CONFIG_HTTPS_PROTOCOL 0
+#define CONFIG_ICECAST_PROTOCOL 0
+#define CONFIG_MMSH_PROTOCOL 0
+#define CONFIG_MMST_PROTOCOL 0
+#define CONFIG_MD5_PROTOCOL 0
+#define CONFIG_PIPE_PROTOCOL 0
+#define CONFIG_PROMPEG_PROTOCOL 0
+#define CONFIG_RTMP_PROTOCOL 0
+#define CONFIG_RTMPE_PROTOCOL 0
+#define CONFIG_RTMPS_PROTOCOL 0
+#define CONFIG_RTMPT_PROTOCOL 0
+#define CONFIG_RTMPTE_PROTOCOL 0
+#define CONFIG_RTMPTS_PROTOCOL 0
+#define CONFIG_RTP_PROTOCOL 0
+#define CONFIG_SCTP_PROTOCOL 0
+#define CONFIG_SRTP_PROTOCOL 0
+#define CONFIG_SUBFILE_PROTOCOL 0
+#define CONFIG_TEE_PROTOCOL 0
+#define CONFIG_TCP_PROTOCOL 0
+#define CONFIG_TLS_PROTOCOL 0
+#define CONFIG_UDP_PROTOCOL 0
+#define CONFIG_UDPLITE_PROTOCOL 0
+#define CONFIG_UNIX_PROTOCOL 0
+#define CONFIG_LIBAMQP_PROTOCOL 0
+#define CONFIG_LIBRTMP_PROTOCOL 0
+#define CONFIG_LIBRTMPE_PROTOCOL 0
+#define CONFIG_LIBRTMPS_PROTOCOL 0
+#define CONFIG_LIBRTMPT_PROTOCOL 0
+#define CONFIG_LIBRTMPTE_PROTOCOL 0
+#define CONFIG_LIBSRT_PROTOCOL 0
+#define CONFIG_LIBSSH_PROTOCOL 0
+#define CONFIG_LIBSMBCLIENT_PROTOCOL 0
+#define CONFIG_LIBZMQ_PROTOCOL 0
+#endif /* FFMPEG_CONFIG_H */
diff --git a/fuchsia/config/max/x64/libavcodec/bsf_list.c b/fuchsia/config/max/x64/libavcodec/bsf_list.c
new file mode 100644
index 0000000..ee5ac8a
--- /dev/null
+++ b/fuchsia/config/max/x64/libavcodec/bsf_list.c
@@ -0,0 +1,4 @@
+static const AVBitStreamFilter * const bitstream_filters[] = {
+    &ff_null_bsf,
+    &ff_vp9_superframe_split_bsf,
+    NULL };
diff --git a/fuchsia/config/max/x64/libavcodec/codec_list.c b/fuchsia/config/max/x64/libavcodec/codec_list.c
new file mode 100644
index 0000000..97fbca7
--- /dev/null
+++ b/fuchsia/config/max/x64/libavcodec/codec_list.c
@@ -0,0 +1,29 @@
+static const AVCodec * const codec_list[] = {
+    &ff_h263_decoder,
+    &ff_h264_decoder,
+    &ff_mpeg4_decoder,
+    &ff_theora_decoder,
+    &ff_vp3_decoder,
+    &ff_vp8_decoder,
+    &ff_vp9_decoder,
+    &ff_aac_decoder,
+    &ff_aac_latm_decoder,
+    &ff_amrnb_decoder,
+    &ff_amrwb_decoder,
+    &ff_aptx_decoder,
+    &ff_flac_decoder,
+    &ff_gsm_ms_decoder,
+    &ff_mp3_decoder,
+    &ff_sbc_decoder,
+    &ff_vorbis_decoder,
+    &ff_pcm_alaw_decoder,
+    &ff_pcm_f32le_decoder,
+    &ff_pcm_mulaw_decoder,
+    &ff_pcm_s16be_decoder,
+    &ff_pcm_s16le_decoder,
+    &ff_pcm_s24be_decoder,
+    &ff_pcm_s24le_decoder,
+    &ff_pcm_s32le_decoder,
+    &ff_pcm_u8_decoder,
+    &ff_libopus_decoder,
+    NULL };
diff --git a/fuchsia/config/max/x64/libavcodec/parser_list.c b/fuchsia/config/max/x64/libavcodec/parser_list.c
new file mode 100644
index 0000000..d1cd7e0
--- /dev/null
+++ b/fuchsia/config/max/x64/libavcodec/parser_list.c
@@ -0,0 +1,15 @@
+static const AVCodecParser * const parser_list[] = {
+    &ff_aac_parser,
+    &ff_aac_latm_parser,
+    &ff_flac_parser,
+    &ff_gsm_parser,
+    &ff_h263_parser,
+    &ff_h264_parser,
+    &ff_mpeg4video_parser,
+    &ff_mpegaudio_parser,
+    &ff_opus_parser,
+    &ff_vorbis_parser,
+    &ff_vp3_parser,
+    &ff_vp8_parser,
+    &ff_vp9_parser,
+    NULL };
diff --git a/fuchsia/config/max/x64/libavformat/demuxer_list.c b/fuchsia/config/max/x64/libavformat/demuxer_list.c
new file mode 100644
index 0000000..241417e
--- /dev/null
+++ b/fuchsia/config/max/x64/libavformat/demuxer_list.c
@@ -0,0 +1,12 @@
+static const AVInputFormat * const demuxer_list[] = {
+    &ff_aac_demuxer,
+    &ff_amr_demuxer,
+    &ff_avi_demuxer,
+    &ff_flac_demuxer,
+    &ff_gsm_demuxer,
+    &ff_matroska_demuxer,
+    &ff_mov_demuxer,
+    &ff_mp3_demuxer,
+    &ff_ogg_demuxer,
+    &ff_wav_demuxer,
+    NULL };
diff --git a/fuchsia/config/max/x64/libavformat/muxer_list.c b/fuchsia/config/max/x64/libavformat/muxer_list.c
new file mode 100644
index 0000000..f36d949
--- /dev/null
+++ b/fuchsia/config/max/x64/libavformat/muxer_list.c
@@ -0,0 +1,2 @@
+static const AVOutputFormat * const muxer_list[] = {
+    NULL };
diff --git a/fuchsia/config/max/x64/libavformat/protocol_list.c b/fuchsia/config/max/x64/libavformat/protocol_list.c
new file mode 100644
index 0000000..247e1e4
--- /dev/null
+++ b/fuchsia/config/max/x64/libavformat/protocol_list.c
@@ -0,0 +1,2 @@
+static const URLProtocol * const url_protocols[] = {
+    NULL };
diff --git a/fuchsia/config/max/x64/libavutil/avconfig.h b/fuchsia/config/max/x64/libavutil/avconfig.h
new file mode 100644
index 0000000..c289fbb
--- /dev/null
+++ b/fuchsia/config/max/x64/libavutil/avconfig.h
@@ -0,0 +1,6 @@
+/* Generated by ffmpeg configure */
+#ifndef AVUTIL_AVCONFIG_H
+#define AVUTIL_AVCONFIG_H
+#define AV_HAVE_BIGENDIAN 0
+#define AV_HAVE_FAST_UNALIGNED 1
+#endif /* AVUTIL_AVCONFIG_H */
diff --git a/fuchsia/config/max/x64/libavutil/ffversion.h b/fuchsia/config/max/x64/libavutil/ffversion.h
new file mode 100644
index 0000000..fc76199
--- /dev/null
+++ b/fuchsia/config/max/x64/libavutil/ffversion.h
@@ -0,0 +1,5 @@
+/* Automatically generated by version.sh, do not manually edit! */
+#ifndef AVUTIL_FFVERSION_H
+#define AVUTIL_FFVERSION_H
+#define FFMPEG_VERSION "N-97662-gaaac2c26d9"
+#endif /* AVUTIL_FFVERSION_H */
diff --git a/fuchsia/patches/README b/fuchsia/patches/README
new file mode 100644
index 0000000..0a1c860
--- /dev/null
+++ b/fuchsia/patches/README
@@ -0,0 +1,5 @@
+This file describes changes that have not been upstreamed.
+
+libavcodec/utils.c and 	libavformat/utils.c were modified to suppress
+deprecation warnings. TODOs were added to remove them when ffmpeg stops using
+its own deprecated functions or adds its own suppression.
diff --git a/fuchsia/scripts/build_ffmpeg.py b/fuchsia/scripts/build_ffmpeg.py
new file mode 100755
index 0000000..145f3f9
--- /dev/null
+++ b/fuchsia/scripts/build_ffmpeg.py
@@ -0,0 +1,272 @@
+#!/usr/bin/env python
+#
+# Copyright 2017 The Fuchsia Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+from __future__ import print_function
+
+import collections
+import multiprocessing
+import optparse
+import os
+import platform
+import re
+import shutil
+import subprocess
+import sys
+
+
+SCRIPTS_DIR = os.path.abspath(os.path.dirname(__file__))
+FFMPEG_DIR = os.path.abspath(os.path.join(SCRIPTS_DIR, '..', '..'))
+FUCHSIA_DIR = os.path.abspath(os.path.join(FFMPEG_DIR, '..', '..'))
+
+
+# These profiles select different levels of format support. The 'default'
+# profile includes only a few unencumbered formats, essentially those supported
+# by Chromium. The 'max' profile includes most of the formats that ffmpeg
+# supports. Some formats (e.g. Opus) aren't included, because more development
+# is required to support them.
+PROFILES = [
+    'default',
+    'max',
+]
+
+
+USAGE = """Usage: %prog [x64|arm64] [options] -- [configure_args]
+
+Resulting binaries will be placed in:
+  build.[x64|arm64]/default/out/
+  build.[x64|arm64]/max/out/
+  """
+
+
+def PrintAndCheckCall(argv, *args, **kwargs):
+  print('Running %s' % '\n '.join(argv))
+  subprocess.check_call(argv, *args, **kwargs)
+
+
+def GetDsoName(dso_name, dso_version):
+  return 'lib%s.so.%s' % (dso_name, dso_version)
+
+
+def RewriteFile(path, search, replace):
+  with open(path) as f:
+    contents = f.read()
+  with open(path, 'w') as f:
+    f.write(re.sub(search, replace, contents))
+
+
+def BuildFFmpeg(target_arch, parallel_jobs, config_only, profile,
+                configure_flags):
+  config_dir = 'build.%s/%s' % (target_arch, profile)
+  shutil.rmtree(config_dir, ignore_errors=True)
+  os.makedirs(os.path.join(config_dir, 'out'))
+
+  PrintAndCheckCall(
+      [os.path.join(FFMPEG_DIR, 'configure')] + configure_flags, cwd=config_dir)
+
+  RewriteFile(
+      os.path.join(config_dir, 'config.h'),
+      r'(#define HAVE_SYSCTL [01])',
+      (r'#define HAVE_SYSCTL 0'))
+
+  RewriteFile(
+      os.path.join(config_dir, 'config.h'),
+      r'(#define HAVE_AS_FUNC [01])',
+      (r'#define HAVE_AS_FUNC 0'))
+
+  RewriteFile(
+      os.path.join(config_dir, 'config.h'),
+      r'(#define HAVE_VALGRIND_VALGRIND_H [01])',
+      (r'#define HAVE_VALGRIND_VALGRIND_H 0'))
+
+  if config_only:
+    print('Skipping build step as requested.')
+  else:
+    libraries = [
+        os.path.join('libavcodec', GetDsoName('avcodec', 58)),
+        os.path.join('libavformat', GetDsoName('avformat', 58)),
+        os.path.join('libavutil', GetDsoName('avutil', 56)),
+    ]
+    PrintAndCheckCall(
+        ['make', '-j%d' % parallel_jobs] + libraries, cwd=config_dir)
+    for lib in libraries:
+      shutil.copy(os.path.join(config_dir, lib),
+                  os.path.join(config_dir, 'out'))
+
+  if target_arch in ('arm64'):
+    RewriteFile(
+        os.path.join(config_dir, 'config.h'),
+        r'(#define HAVE_VFP_ARGS [01])',
+        (r'/* \1 -- softfp/hardfp selection is done by the fuchsia build */'))
+
+
+def main(argv):
+  parser = optparse.OptionParser(usage=USAGE)
+  parser.add_option('--profile', action='append', dest='profiles',
+                    choices=PROFILES,
+                    help='Profile to build; determines e.g. supported codecs')
+  parser.add_option('--config-only', action='store_true',
+                    help='Skip the build step.')
+  options, args = parser.parse_args(argv)
+
+  if len(args) == 0:
+    parser.print_help()
+    return 1
+
+  target_arch = args[0]
+  configure_args = args[1:]
+
+  parallel_jobs = multiprocessing.cpu_count()
+
+  print('System information:\n'
+        'Target arch   : %s\n'
+        'Parallel jobs : %d\n' % (target_arch, parallel_jobs))
+
+  configure_flags = collections.defaultdict(list)
+
+  # Common configuration.  Note: --disable-everything does not in fact disable
+  # everything, just non-library components such as decoders and demuxers.
+  #TODO(dalesat): Consider --enable-libopus, --enable-decoder=libopus
+  configure_flags['Common'].extend([
+      '--disable-everything',
+      '--disable-all',
+      '--disable-doc',
+      '--disable-htmlpages',
+      '--disable-manpages',
+      '--disable-podpages',
+      '--disable-txtpages',
+      '--disable-static',
+      '--enable-avcodec',
+      '--enable-avformat',
+      '--enable-avutil',
+      '--enable-fft',
+      '--enable-rdft',
+      '--enable-static',
+      '--enable-libopus',
+      # Disable features.
+      '--disable-debug',
+      '--disable-bzlib',
+      '--disable-iconv',
+      '--disable-lzo',
+      '--disable-network',
+      '--disable-schannel',
+      '--disable-sdl2',
+      '--disable-symver',
+      '--disable-xlib',
+      '--disable-zlib',
+      '--disable-securetransport',
+      '--disable-faan',
+      '--disable-alsa',
+
+      # Disable automatically detected external libraries. This prevents
+      # automatic inclusion of things like hardware decoders. Each roll should
+      # audit new [autodetect] configure options and add any desired options to
+      # this file.
+      '--disable-autodetect',
+
+      # Common codecs.
+      '--enable-decoder=vorbis,libopus,flac',
+      '--enable-decoder=pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le,mp3',
+      '--enable-decoder=pcm_s16be,pcm_s24be,pcm_mulaw,pcm_alaw',
+      '--enable-decoder=theora,vp8,sbc,aptx',
+      '--enable-demuxer=ogg,matroska,wav,flac,mp3,mov',
+      '--enable-parser=opus,vorbis,flac,mpegaudio',
+      # Setup include path so Fuchsia's libopus can be used.
+      '--extra-cflags=-I' + os.path.join(FUCHSIA_DIR,
+                                         'third_party/opus/include'),
+      '--enable-parser=vp3,vp8',
+
+      '--optflags="-O2"',
+      '--enable-pic',
+
+      # Force usage of yasm
+      '--x86asmexe=yasm',
+  ])
+
+  configure_flags['Common'].extend([
+      '--enable-pic',
+      '--enable-lto',
+      '--cc=clang',
+      '--cxx=clang++',
+      '--ld=clang',
+  ])
+
+
+  # TODO(dalesat): determine if we can use --enable-lto in x64
+  # TODO(dalesat): enable vp9 on arm64
+
+  if target_arch == 'x64':
+    configure_flags['Common'].extend([
+        '--enable-decoder=vp9',
+        '--enable-parser=vp9',
+        '--sysroot=' + os.path.join(
+            FFMPEG_DIR, '..', '..', 'prebuilt', 'third_party', 'sysroot', 'linux'),
+        '--extra-ldflags=-fuse-ld=lld',
+    ])
+  elif target_arch == 'arm64':
+    configure_flags['Common'].extend([
+        '--enable-cross-compile',
+        '--cross-prefix=/usr/bin/x86_64-linux-gnu-',
+        '--target-os=linux',
+        '--arch=aarch64',
+        '--enable-armv8',
+        '--extra-cflags=-march=armv8-a',
+        '--sysroot=' + os.path.join(
+            FFMPEG_DIR, '..', '..', 'prebuilt', 'third_party', 'sysroot', 'linux'),
+        '--extra-cflags=--target=aarch64-linux-gnu',
+        '--extra-ldflags=--target=aarch64-linux-gnu',
+        '--disable-linux-perf',
+    ])
+  else:
+    print('Error: Unknown target arch %r!' % (target_arch), file=sys.stderr)
+    return 1
+
+  configure_flags['default'].extend([
+      # max enables MPEG4 which requires error resilience :(
+      '--disable-error-resilience',
+  ])
+
+  configure_flags['max'].extend([
+      '--enable-decoder=aac,aac_latm,h264,mp3',
+      '--enable-demuxer=aac,mp3,mov',
+      '--enable-parser=aac,aac_latm,h264,mpegaudio',
+      # Enable playing avi files.
+      '--enable-decoder=mpeg4',
+      '--enable-parser=h263,mpeg4video',
+      '--enable-demuxer=avi',
+      # Enable playing Android 3gp files.
+      '--enable-demuxer=amr',
+      '--enable-decoder=amrnb,amrwb',
+      # Wav files for playing phone messages.
+      '--enable-decoder=gsm_ms',
+      '--enable-demuxer=gsm',
+      '--enable-parser=gsm',
+  ])
+
+  def do_build_ffmpeg(profile, configure_flags):
+    if options.profiles and profile not in options.profiles:
+      print('%s skipped' % profile)
+      return
+
+    print('%s configure/build:' % profile)
+    BuildFFmpeg(target_arch, parallel_jobs,
+                options.config_only, profile, configure_flags)
+
+  do_build_ffmpeg('default',
+                  configure_flags['Common'] +
+                  configure_flags['default'] +
+                  configure_args)
+  do_build_ffmpeg('max',
+                  configure_flags['Common'] +
+                  configure_flags['max'] +
+                  configure_args)
+
+  print('Done. If desired you may copy config.h/config.asm into the '
+        'source/config tree using copy_config.sh.')
+  return 0
+
+
+if __name__ == '__main__':
+  sys.exit(main(sys.argv[1:]))
diff --git a/fuchsia/scripts/copy_config.sh b/fuchsia/scripts/copy_config.sh
new file mode 100755
index 0000000..f8c01d3
--- /dev/null
+++ b/fuchsia/scripts/copy_config.sh
@@ -0,0 +1,24 @@
+#!/bin/bash -e
+
+# Copyright (c) 2017 The Fuchsia Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# Use this to copy all config files into the tree.
+for profile in default max; do
+  # Copy config files for the architectures:
+  #   - x64 has config.asm, config.h
+  #   - arm64 has config.h
+  for arch in x64 arm64; do
+    # Don't waste time on non-existent configs, if no config.h then skip.
+    [ ! -e "build.$arch/$profile/config.h" ] && continue
+    for f in config.h config.asm libavutil/avconfig.h libavutil/ffversion.h libavcodec/bsf_list.c libavcodec/codec_list.c libavcodec/parser_list.c libavformat/demuxer_list.c libavformat/muxer_list.c libavformat/protocol_list.c; do
+      FROM="build.$arch/$profile/$f"
+      TO="fuchsia/config/$profile/$arch/$f"
+      if [ "$(dirname $f)" != "" ]; then mkdir -p $(dirname $TO); fi
+      [ -e $FROM ] && cp -v $FROM $TO
+    done
+  done
+done
+
+echo "Copied all existing newer configs successfully."
diff --git a/fuchsia/scripts/credits_updater.py b/fuchsia/scripts/credits_updater.py
new file mode 100644
index 0000000..fc041e9
--- /dev/null
+++ b/fuchsia/scripts/credits_updater.py
@@ -0,0 +1,358 @@
+#!/usr/bin/python
+#
+# Copyright 2017 The Fuchsia Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Updates the CREDITS.fuchsia file for ffmpeg.
+
+The structure of the output credits file is:
+- FFmpeg LICENSE.md verbatim
+- A few verbatim license headers from files that didn't match typical FFmpeg
+- The entire text of the LGPL
+
+The vast majority of files are covered by the LGPL text, described by the
+common FFmpeg header ("This file is part of FFmpeg...").
+
+The few exceptions are cases where the FFmpeg header has been modified, or
+where the file has historically had another license (e.g MIPS, JPEG, BSD) and
+was pulled into FFmpeg from another project. In some cases there are many files
+that share the exact same non-LGPL license text. These are bucketed together
+(see KNOWN_FILE_BUCKETS) to de-dup their license in the output file.
+
+Change to the licensing text for bucketed files are automatically caught by
+comparing the md5 digest to a previously recorded digest in the
+KNOWN_FILE_BUCKETS table. Changes are generally not expected, but should
+prompt manual inspection of the difference and possibly an update to the
+license text for that bucket.
+"""
+
+import collections
+import difflib
+from enum import enum
+import hashlib
+import os
+import re
+
+# Name of the LICENSE.md file from upstream FFmpeg. This file should be kept in
+# perfect sync w/ upstream at each merge.
+UPSTREAM_LICENSEMD = 'LICENSE.md'
+
+# Default name of the output file generated by CreditsUpdater.WriteCredits. This
+# name must match the "License file: " in README.fuchsia.
+DEFAULT_OUTPUT_FILE = 'CREDITS.fuchsia'
+
+# Minimum similarity threshold to consider a comment header LGPL when compared
+# against FFMPEG_LGPL_REF.
+LGPL_MATCH_THRESHOLD = .9
+
+# Regular expressions for finding license header comments.
+C_COMMENT_BLOCK_START = re.compile('/\*+')
+C_COMMENT_BLOCK_MID = re.compile('^ *\* *')
+C_COMMENT_BLOCK_END = re.compile('\*/')
+ASM_COMMENT_PRE = re.compile('^(;\**|@)')
+ASM_NOT_COMMENT = re.compile('^[^;@]')
+FFMPEG_HEADER_START = re.compile(' *This file is part of FFmpeg')
+
+LICENSE_SEPARATOR = '\n\n' + ('*' * 80) + '\n\n'
+FFMPEG_LGPL_REF = '''
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser 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
+ */'''
+
+# Known licenses
+License = enum('LGPL', 'MIPS', 'JPEG', 'OGG_MA_MR_2005')
+
+# Tuple describing license and similarity to the FFmpeg LGPL reference for a
+# given file. See KNOWN_FILE_BUCKETS.
+FileInfo = collections.namedtuple('FileInfo', 'license, license_digest')
+
+# Most files in FFmpeg are LGPL, but there are a few exceptions that are worth
+# bucketing together to avoid redundant license texts. The hex values are
+# digests of the comment header, used to detect changes in the unlikely event
+# that their license texts are altered. Any changes will require manual review
+# to decide whether the to update the bucketing.
+KNOWN_FILE_BUCKETS = [
+    # Files that are LGPL but just miss the similarity cutoff.
+    ['libavcodec/codec_desc.c', License.LGPL, '091f9c6d1efc62038e516f5c67263962'],
+    # Files with MIPS license.
+    ['libavcodec/mdct_fixed_32.c', License.MIPS, '179c17c9dab77f95dc6540709b5fb8cd'],
+    ['libavcodec/fft_fixed_32.c', License.MIPS, '179c17c9dab77f95dc6540709b5fb8cd'],
+    ['libavcodec/fft_init_table.c', License.MIPS, '179c17c9dab77f95dc6540709b5fb8cd'],
+    ['libavcodec/mips/aacdec_mips.c', License.MIPS, 'a08afe43d908fe6625603d0cbc95da46'],
+    ['libavcodec/mips/sbrdsp_mips.c', License.MIPS, 'c34ece06ebe27e5a7611ef362962b048'],
+    ['libavcodec/mips/aacpsdsp_mips.c', License.MIPS, 'a08afe43d908fe6625603d0cbc95da46'],
+    ['libavutil/mips/float_dsp_mips.c', License.MIPS, 'fb9f51968ec8289768547144b920cf79'],
+    ['libavcodec/mips/aacsbr_mips.c', License.MIPS, '82c53533b2576fe5d2c04880a46595f2'],
+    ['libavutil/fixed_dsp.c', License.MIPS, '7a521412ac91287b3e1026885f6bd56f'],
+    ['libavcodec/mips/aacdec_mips.h', License.MIPS, 'c34ece06ebe27e5a7611ef362962b048'],
+    ['libavcodec/mips/lsp_mips.h', License.MIPS, 'eef419f576f738e66ca3bfc975a37996'],
+    ['libavcodec/mips/aacsbr_mips.h', License.MIPS, '82c53533b2576fe5d2c04880a46595f2'],
+    ['libavutil/mips/libm_mips.h', License.MIPS, '4b408982f2aa83fac9c020c61853bdae'],
+    ['libavcodec/mips/amrwbdec_mips.h', License.MIPS, '4b408982f2aa83fac9c020c61853bdae'],
+    ['libavcodec/fft_table.h', License.MIPS, '179c17c9dab77f95dc6540709b5fb8cd'],
+    ['libavcodec/mips/compute_antialias_float.h', License.MIPS, 'a7ff7e3157e3726cba79e022628d3b93'],
+    ['libavcodec/mips/compute_antialias_fixed.h', License.MIPS, '97e366b4c71ad5ceca991d89044c414d'],
+    ['libavutil/softfloat_tables.h', License.MIPS, 'de3e5c962caa5c8249bef3085ef36bc8'],
+    ['libavutil/fixed_dsp.h', License.MIPS, '4b408982f2aa83fac9c020c61853bdae'],
+    # Files with JPEG Group license.
+    ['libavcodec/jfdctint_template.c', License.JPEG, 'd80cfd2e439eb700aed0f5bc44fef9b5'],
+    ['libavcodec/jfdctfst.c', License.JPEG, '7dcfa68ad9c8fd940fb404ee3242e03f'],
+    ['libavcodec/jrevdct.c', License.JPEG, 'a9b8f5dcb74fa76a72069306b841b042'],
+    # Files written by Ahlberg and RullgAYrd for parsing Ogg (MIT/X11 license).
+    ['libavformat/oggparseogm.c', License.OGG_MA_MR_2005, 'ee65196bafec5d8e871e64bb739bdc79'],
+    ['libavformat/oggdec.c', License.OGG_MA_MR_2005, '43ed5da1268cb2f104095c79410fd394'],
+    ['libavformat/oggdec.h', License.OGG_MA_MR_2005, 'ee65196bafec5d8e871e64bb739bdc79'],
+    ['libavformat/oggparsevorbis.c', License.OGG_MA_MR_2005, '6c432580b4486564e43cd538370e3dbc'],
+]
+
+# Path describing 'license_texts' folder as a sibling of this script's location.
+LICENSE_FOLDER = os.path.join(
+    os.path.dirname(os.path.abspath(__file__)), 'license_texts')
+
+# Files containing license text to be used for the known license buckets. These
+# files should all live in LICENSE_FOLDER.
+LICENSE_TEXTS = {
+    License.MIPS: os.path.join(LICENSE_FOLDER, 'mips.txt'),
+    License.JPEG: os.path.join(LICENSE_FOLDER, 'jpeg.txt'),
+    License.LGPL: os.path.join(LICENSE_FOLDER, 'full_lgpl.txt'),
+    License.OGG_MA_MR_2005: os.path.join(LICENSE_FOLDER,
+                                         'oggparse_ahlberg_rullgayrd_2005.txt'),
+}
+
+
+class CreditsUpdater(object):
+  """CreditsUpdater parses license headers for files supplied via ProcessFile.
+  The parsed headers are stored for generating the FFmpeg credits file
+  (LICENSE.md) upon calling OutputCredits."""
+
+  def __init__(self, source_dir, output_file=DEFAULT_OUTPUT_FILE):
+    """ Creates a CreditsUpdater
+    Args:
+      source_dir: Root of ffmpeg sources; where LICENSE.md is found and where
+        the generated DEFAULT_OUTPUT_FILE will be written.
+      output_file: (Optional) Name of the file to write the credits to. File
+        will live in source_dir.
+    """
+    self.source_dir = source_dir
+    self.output_file = output_file
+    # Files where we failed to find any license header. Any entry in this list
+    # will block updating credits until the parsing code is amended to work for
+    # the difficult files.
+    self.difficult_files = []
+    # Map storing processed files that belong to KNOWN_FILE_BUCKETS.
+    # Key: LICENSE, Value: List of files with the known license.
+    self.known_credits = collections.defaultdict(list)
+    # Map storing processed files that do not belong to any known bucket. These
+    # files will have their license printed verbatim.
+    # Key: file path, Value: license text
+    self.generated_credits = collections.defaultdict(list)
+    # Convert the "buckets" above into a map.
+    self.known_file_map = {}
+    for item in KNOWN_FILE_BUCKETS:
+      self.known_file_map[os.path.join(item[0])] = FileInfo(item[1], item[2])
+
+  def ProcessFile(self, file_path):
+    """ Process the file updating credits.
+    Args:
+      file_path: Path to file to process. Path can be absolute or relative, but
+      should be a descendant of source_dir provided to constructor.
+    """
+    if not os.path.isabs(file_path):
+      file_path = os.path.abspath(os.path.join(self.source_dir, file_path))
+
+    comment_lines = ExtractFirstCommentBlock(file_path)
+    if not comment_lines:
+      self.difficult_files.append(file_path)
+      return
+
+    # Try to pull out customizations in first few lines of license header before
+    # "This file is part of FFmpeg." Failing to normalize indicates either a
+    # totally different header or a header with significant alterations.
+    normalized_lines = NormalizeCommentLines(comment_lines)
+    if normalized_lines:
+      sim_ratio = (
+          difflib.SequenceMatcher(
+              None, ConcatLines(normalized_lines),
+              FFMPEG_LGPL_REF).ratio())
+
+      # File is a close match to typical LGPL case.
+      if sim_ratio >= LGPL_MATCH_THRESHOLD:
+        self.known_credits[License.LGPL].append(file_path)
+      # File matches some LGPL, but has significant differences.
+      else:
+        self.HandleNonLGPLFile(comment_lines, file_path)
+    # File does not contain FFmpeg LGPL header in any form.
+    else:
+      self.HandleNonLGPLFile(comment_lines, file_path)
+
+  def HandleNonLGPLFile(self, comment_lines, file_path):
+    # Make file_path relative to FFmpeg directory to lookup self.known_file_map.
+    rel_file_path = os.path.relpath(file_path, os.path.abspath(self.source_dir))
+
+    # Many non-LGPL files fall into known groups (e.g. MIPS). We bucket these
+    # together to avoid repeating the same license text in the credits.
+    if rel_file_path in self.known_file_map:
+      hasher = hashlib.md5()
+      hasher.update(ConcatLines(comment_lines))
+
+      # Detect changes to file's licensing header.
+      file_license_info = self.known_file_map[rel_file_path]
+      if hasher.hexdigest() != file_license_info.license_digest:
+        exit('File %(file_path)s header has changed (was: %(old_digest)s '
+             'now: %(new_digest)s). Inspect the header and update the '
+             'exceptions table to continue generating credits.'
+             % {'file_path': rel_file_path,
+                'old_digest': file_license_info.license_digest,
+                'new_digest': hasher.hexdigest()})
+      # Store known files in a list for printing.
+      self.known_credits[file_license_info.license].append(rel_file_path)
+    else:
+      # This file does have a known bucket. We'll print its license verbatim.
+      self.generated_credits[rel_file_path] = ConcatLines(comment_lines).strip()
+
+  def PrintStats(self):
+    num_known_credits = 0
+    for license_bucket in self.known_credits:
+      num_known_credits += len(self.known_credits[license_bucket])
+    print 'CreditsUpdater stats:'
+    print '\t%s files w/ known_credits' % num_known_credits
+    print '\t%s generated_credits' % len(self.generated_credits.keys())
+    print '\t%s difficult_files files' % len(self.difficult_files)
+
+  def WriteCredits(self):
+    if self.difficult_files:
+      # After taking a closer look, enhance this tool to work for these or
+      # add them to the white-list if they truly have no licensing header.
+      print 'Failed to find license header for these files:'
+      for filename in self.difficult_files:
+        print filename
+      exit('Update script to work for these to continue generating credits')
+
+    output_path = os.path.join(self.source_dir, self.output_file)
+    licence_md_path = os.path.join(self.source_dir, UPSTREAM_LICENSEMD)
+    with open(output_path, 'w') as open_output:
+      # Always write the FFmpeg overview (LICENSE.md) first.
+      with open(licence_md_path) as open_license_md:
+        open_output.writelines(open_license_md.readlines())
+
+      # Next write verbatim headers from the generated credits map.
+      for filename, file_license in self.generated_credits.iteritems():
+        open_output.writelines(LICENSE_SEPARATOR)
+        open_output.writelines('%s\n\n%s' % (filename, file_license))
+
+      # Write the known licenses, ending with LGPL.
+      for known_license in sorted(self.known_credits.keys()):
+        # Skip LGPL for now. We print it at the end.
+        if known_license is License.LGPL:
+          continue
+
+        file_list = sorted(self.known_credits[known_license])
+        with open(LICENSE_TEXTS[known_license]) as license_text:
+          open_output.writelines(LICENSE_SEPARATOR)
+          open_output.writelines('\n'.join(file_list) + '\n\n')
+          open_output.writelines(license_text.readlines())
+
+      # Finally, write full text of LGPL
+      with open(LICENSE_TEXTS[License.LGPL]) as lgpl_text:
+        open_output.writelines(LICENSE_SEPARATOR)
+        open_output.writelines(lgpl_text.readlines())
+
+
+def ConcatLines(lines):
+  return ''.join(lines)
+
+
+def NormalizeCommentLines(comment_lines):
+  # Copy to leave orig const.
+  comment_lines = list(comment_lines)
+
+  # Find start of ffmpeg lgpl header.
+  line_index = 0
+  for line in comment_lines:
+    if (FFMPEG_HEADER_START.search(line)):
+      break
+    line_index += 1
+
+  if line_index == len(comment_lines):
+    # print "Failed to find start of ffmpeg header"
+    return None
+
+  # Typically just a few lines for copyright and file description. More
+  # than 20 to the start hints that this may not be the typical lgpl header.
+  if line_index > 20:
+    # print "Header start too far from the top of comment"
+    return None
+
+  # Pull out stuff before header start.
+  comment_lines = comment_lines[line_index: len(comment_lines)]
+  return comment_lines
+
+
+def ExtractFirstCommentBlock(file_path):
+  lines = []
+  found_comment_start = False
+  found_comment_end = False
+  is_asm = file_path.endswith('.asm')
+
+  with open(file_path) as open_file:
+    # .S files generally have C style block comments, but a handful have a
+    # special single-line comment prefixed with '@'. Check a few lines to figure
+    # out which case we're dealing with.
+    if file_path.endswith('.S'):
+      first_line = open_file.readline()
+      if ASM_COMMENT_PRE.search(first_line):
+        is_asm = True
+      open_file.seek(0)
+
+    if is_asm:
+      comment_start_re = ASM_COMMENT_PRE
+      comment_end_re = ASM_NOT_COMMENT
+    else:
+      comment_start_re = C_COMMENT_BLOCK_START
+      comment_end_re = C_COMMENT_BLOCK_END
+
+    for _ in xrange(0, 100):
+      line = open_file.readline()
+      found_comment_start = (found_comment_start or
+                             comment_start_re.search(line))
+      if not found_comment_start:
+        continue
+
+      lines.append(line)
+      if comment_end_re.search(line):
+        found_comment_end = True
+        break
+
+  if not (found_comment_start and found_comment_end):
+    return None
+
+  StripCommentChars(lines, is_asm)
+  return lines
+
+
+def StripCommentChars(comment_lines, is_asm=False):
+  if is_asm:
+    for i in xrange(len(comment_lines)):
+      comment_lines[i] = re.sub(ASM_COMMENT_PRE, '', comment_lines[i])
+  else:
+    # Strip off the start slash-star
+    comment_lines[0] = re.sub(C_COMMENT_BLOCK_START, '', comment_lines[0])
+    # Strip off the comment end star-slash
+    comment_lines[-1] = re.sub(C_COMMENT_BLOCK_END, '', comment_lines[-1])
+    # Strip off the comment star for middle lines
+    for i in xrange(1, len(comment_lines)):
+      comment_lines[i] = re.sub(C_COMMENT_BLOCK_MID, '', comment_lines[i])
diff --git a/fuchsia/scripts/credits_updater.pyc b/fuchsia/scripts/credits_updater.pyc
new file mode 100644
index 0000000..c0bbe80
--- /dev/null
+++ b/fuchsia/scripts/credits_updater.pyc
Binary files differ
diff --git a/fuchsia/scripts/enum.py b/fuchsia/scripts/enum.py
new file mode 100644
index 0000000..c803bb5
--- /dev/null
+++ b/fuchsia/scripts/enum.py
@@ -0,0 +1,6 @@
+import collections
+
+# Python has enums now, but Goobuntu machines seem to run very old python. From:
+# http://stackoverflow.com/questions/36932/how-can-i-represent-an-enum-in-python
+def enum(*keys):
+  return collections.namedtuple('Enum', keys)(*keys)
diff --git a/fuchsia/scripts/enum.pyc b/fuchsia/scripts/enum.pyc
new file mode 100644
index 0000000..ffb1bc9
--- /dev/null
+++ b/fuchsia/scripts/enum.pyc
Binary files differ
diff --git a/fuchsia/scripts/generate_gn.py b/fuchsia/scripts/generate_gn.py
new file mode 100755
index 0000000..27f474e
--- /dev/null
+++ b/fuchsia/scripts/generate_gn.py
@@ -0,0 +1,732 @@
+#!/usr/bin/python
+#
+# Copyright (c) 2017 The Fuchsia Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Creates a GN include file for building FFmpeg from source.
+
+The way this works is a bit silly but it's easier than reverse engineering
+FFmpeg's configure scripts and Makefiles and manually maintaining fuchsia
+build files. It scans through build directories for object files then does a
+reverse lookup against the FFmpeg source tree to find the corresponding C or
+assembly file.
+
+Running build_ffmpeg.py for all (both) architectures is required prior to
+running this script.
+
+Once you've built all architectures you may run this script.
+"""
+
+import collections
+import copy
+import datetime
+from enum import enum
+import fnmatch
+import credits_updater
+import itertools
+import optparse
+import os
+import re
+import shutil
+import string
+import subprocess
+import sys
+
+COPYRIGHT = """# Copyright %d The Fuchsia Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# NOTE: this file is autogenerated by ffmpeg/fuchsia/scripts/generate_gn.py
+
+""" % (datetime.datetime.now().year)
+
+GN_HEADER = """import("//build/config/arm.gni")
+import("ffmpeg_options.gni")
+
+# Declare empty versions of each variable for easier +=ing later.
+ffmpeg_c_sources = []
+ffmpeg_gas_sources = []
+ffmpeg_yasm_sources = []
+
+"""
+GN_CONDITION_BEGIN = """if (%s) {
+"""
+GN_CONDITION_END = """}
+
+"""
+GN_C_SOURCES_BEGIN = """ffmpeg_c_sources += [
+"""
+GN_GAS_SOURCES_BEGIN = """ffmpeg_gas_sources += [
+"""
+GN_YASM_SOURCES_BEGIN = """ffmpeg_yasm_sources += [
+"""
+GN_SOURCE_ITEM = """  "%s",
+"""
+GN_SOURCE_END = """]
+"""
+
+# Controls conditional stanza generation.
+Attr = enum('ARCHITECTURE', 'PROFILE')
+SUPPORT_MATRIX = {
+    Attr.ARCHITECTURE: set(['x64', 'arm64']),
+    Attr.PROFILE: set(['default', 'max']),
+}
+
+
+def NormalizeFilename(name):
+  """Removes leading path separators in an attempt to normalize paths."""
+  return string.lstrip(name, os.sep)
+
+
+def CleanObjectFiles(object_files):
+  """Removes unneeded object files due to linker errors, binary size, etc...
+
+  Args:
+    object_files: List of object files that needs cleaning.
+  """
+  blacklist = [
+      'libavcodec/inverse.o',  # Includes libavutil/inverse.c
+      'libavcodec/file_open.o',  # Includes libavutil/file_open.c
+      'libavcodec/log2_tab.o',  # Includes libavutil/log2_tab.c
+      'libavformat/golomb_tab.o',  # Includes libavcodec/golomb.c
+      'libavformat/log2_tab.o',  # Includes libavutil/log2_tab.c
+      'libavformat/file_open.o',  # Includes libavutil/file_open.c
+
+      # The following files are removed to trim down on binary size.
+      # TODO(ihf): Warning, it is *easy* right now to remove more files
+      # than is healthy and end up with a library that the linker does
+      # not complain about but that can't be loaded. Add some verification!
+      'libavcodec/audioconvert.o',
+      'libavcodec/resample.o',
+      'libavcodec/resample2.o',
+      'libavcodec/x86/dnxhd_mmx.o',
+      'libavformat/sdp.o',
+      'libavutil/adler32.o',
+      'libavutil/audio_fifo.o',
+      'libavutil/blowfish.o',
+      'libavutil/cast5.o',
+      'libavutil/des.o',
+      'libavutil/file.o',
+      'libavutil/hash.o',
+      'libavutil/hmac.o',
+      'libavutil/lls.o',
+      'libavutil/murmur3.o',
+      'libavutil/rc4.o',
+      'libavutil/ripemd.o',
+      'libavutil/sha512.o',
+      'libavutil/tree.o',
+      'libavutil/xtea.o',
+      'libavutil/xga_font_data.o',
+  ]
+  for name in blacklist:
+    name = name.replace('/', os.sep)
+    if name in object_files:
+      object_files.remove(name)
+  return object_files
+
+
+def IsAssemblyFile(f):
+  _, ext = os.path.splitext(f)
+  return ext in ['.S', '.asm']
+
+
+def IsGasFile(f):
+  _, ext = os.path.splitext(f)
+  return ext in ['.S']
+
+
+def IsYasmFile(f):
+  _, ext = os.path.splitext(f)
+  return ext in ['.asm']
+
+
+def IsCFile(f):
+  _, ext = os.path.splitext(f)
+  return ext in ['.c']
+
+
+def IsSourceFile(f):
+  return IsAssemblyFile(f) or IsCFile(f)
+
+
+def GetSourceFiles(source_dir):
+  """Returns a list of source files for the given source directory.
+
+  Args:
+    source_dir: Path to build a source mapping for.
+
+  Returns:
+    A python list of source file paths.
+  """
+
+  def IsSourceDir(d):
+    return d != '.git'
+
+  source_files = []
+  for root, dirs, files in os.walk(source_dir):
+    dirs = filter(IsSourceDir, dirs)
+    files = filter(IsSourceFile, files)
+
+    # Strip leading source_dir from root.
+    root = root[len(source_dir):]
+    source_files.extend([NormalizeFilename(os.path.join(root, name)) for name in
+                         files])
+  return source_files
+
+
+def GetObjectFiles(build_dir):
+  """Returns a list of object files for the given build directory.
+
+  Args:
+    build_dir: Path to build an object file list for.
+
+  Returns:
+    A python list of object files paths.
+  """
+  object_files = []
+  for root, _, files in os.walk(build_dir):
+    # Strip leading build_dir from root.
+    root = root[len(build_dir):]
+
+    for name in files:
+      _, ext = os.path.splitext(name)
+      if ext == '.o':
+        name = NormalizeFilename(os.path.join(root, name))
+        object_files.append(name)
+  CleanObjectFiles(object_files)
+  return object_files
+
+
+def GetObjectToSourceMapping(source_files):
+  """Returns a map of object file paths to source file paths.
+
+  Args:
+    source_files: List of source file paths.
+
+  Returns:
+    Map with object file paths as keys and source file paths as values.
+  """
+  object_to_sources = {}
+  for name in source_files:
+    basename, _ = os.path.splitext(name)
+    key = basename + '.o'
+    object_to_sources[key] = name
+  return object_to_sources
+
+
+def GetSourceFileSet(object_to_sources, object_files):
+  """Determines set of source files given object files.
+
+  Args:
+    object_to_sources: A dictionary of object to source file paths.
+    object_files: A list of object file paths.
+
+  Returns:
+    A python set of source files required to build said objects.
+  """
+  source_set = set()
+  for name in object_files:
+    # Intentially raise a KeyError if lookup fails since something is messed
+    # up with our source and object lists.
+    source_set.add(object_to_sources[name])
+  return source_set
+
+SourceListCondition = collections.namedtuple('SourceListCondition',
+                                             [Attr.ARCHITECTURE,
+                                              Attr.PROFILE])
+
+
+class SourceSet(object):
+  """A SourceSet represents a set of source files that are built on each of the
+  given set of SourceListConditions.
+  """
+
+  def __init__(self, sources, conditions):
+    """Creates a SourceSet.
+
+    Args:
+      sources: a python set of source files
+      conditions: a python set of SourceListConditions where the given sources
+        are to be used.
+    """
+    self.sources = sources
+    self.conditions = conditions
+
+  def __repr__(self):
+    return '{%s, %s}' % (self.sources, self.conditions)
+
+  def __eq__(self, other):
+    return (self.sources == other.sources and
+            self.conditions == other.conditions)
+
+  def __hash__(self):
+    return hash((frozenset(self.sources), frozenset(self.conditions)))
+
+  def Intersect(self, other):
+    """Return a new SourceSet containing the set of source files common to both
+    this and the other SourceSet.
+
+    The resulting SourceSet represents the union of the architectures and
+    profiles of this and the other SourceSet.
+    """
+    return SourceSet(self.sources & other.sources,
+                     self.conditions | other.conditions)
+
+  def Difference(self, other):
+    """Return a new SourceSet containing the set of source files not present in
+    the other SourceSet.
+
+    The resulting SourceSet represents the intersection of the
+    SourceListConditions from this and the other SourceSet.
+    """
+    return SourceSet(self.sources - other.sources,
+                     self.conditions & other.conditions)
+
+  def IsEmpty(self):
+    """An empty SourceSet is defined as containing no source files or no
+    conditions (i.e., a set of files that aren't built on anywhere).
+    """
+    return (len(self.sources) == 0 or len(self.conditions) == 0)
+
+  def GenerateGnStanza(self):
+    """Generates a gn conditional stanza representing this source set.
+    """
+
+    conjunctions = []
+    for condition in self.conditions:
+      if condition.ARCHITECTURE == '*':
+        arch_condition = None
+      else:
+        arch_condition = 'current_cpu == "%s"' % condition.ARCHITECTURE
+
+      # Profile conditions look like:
+      #   profile == "default"
+      if condition.PROFILE == '*':
+        profile_condition = None
+      else:
+        profile_condition = 'ffmpeg_profile == "%s"' % condition.PROFILE
+
+      conjunction_parts = filter(
+          None, [arch_condition, profile_condition])
+      conjunctions.append(' && '.join(conjunction_parts))
+
+    # If there is more that one clause, wrap various conditions in parens
+    # before joining.
+    if len(conjunctions) > 1:
+      conjunctions = ['(%s)' % x for x in conjunctions]
+
+    # Sort conjunctions to make order deterministic.
+    joined_conjuctions = ' || '.join(sorted(conjunctions))
+
+    stanza = ''
+    # Output a conditional wrapper around stanzas if necessary.
+    if joined_conjuctions:
+      stanza += GN_CONDITION_BEGIN % joined_conjuctions
+
+      def indent(s):
+        return '  %s' % s
+    else:
+      def indent(s):
+        return s
+
+    sources = sorted(n.replace('\\', '/') for n in self.sources)
+
+    # Write out all C sources.
+    c_sources = filter(IsCFile, sources)
+    if c_sources:
+      stanza += indent(GN_C_SOURCES_BEGIN)
+      for name in c_sources:
+        stanza += indent(GN_SOURCE_ITEM % (name))
+      stanza += indent(GN_SOURCE_END)
+
+    # Write out all assembly sources.
+    gas_sources = filter(IsGasFile, sources)
+    if gas_sources:
+      stanza += indent(GN_GAS_SOURCES_BEGIN)
+      for name in gas_sources:
+        stanza += indent(GN_SOURCE_ITEM % (name))
+      stanza += indent(GN_SOURCE_END)
+
+    # Write out all assembly sources.
+    yasm_sources = filter(IsYasmFile, sources)
+    if yasm_sources:
+      stanza += indent(GN_YASM_SOURCES_BEGIN)
+      for name in yasm_sources:
+        stanza += indent(GN_SOURCE_ITEM % (name))
+      stanza += indent(GN_SOURCE_END)
+
+    # Close the conditional if necessary.
+    if joined_conjuctions:
+      stanza += GN_CONDITION_END
+    else:
+      stanza += '\n'  # Makeup the spacing for the remove conditional.
+    return stanza
+
+
+def CreatePairwiseDisjointSets(sets):
+  """Given a list of SourceSet objects, returns the pairwise disjoint sets.
+
+  NOTE: This isn't the most efficient algorithm, but given how infrequent we
+  need to run this and how small the input size is we'll leave it as is.
+  """
+
+  disjoint_sets = list(sets)
+
+  new_sets = True
+  while new_sets:
+    new_sets = False
+    for pair in itertools.combinations(disjoint_sets, 2):
+      intersection = pair[0].Intersect(pair[1])
+
+      # Both pairs are already disjoint, nothing to do.
+      if intersection.IsEmpty():
+        continue
+
+      # Add the resulting intersection set.
+      new_sets = True
+      disjoint_sets.append(intersection)
+
+      # Calculate the resulting differences for this pair of sets.
+      #
+      # If the differences are an empty set, remove them from the list of sets,
+      # otherwise update the set itself.
+      for p in pair:
+        i = disjoint_sets.index(p)
+        difference = p.Difference(intersection)
+        if difference.IsEmpty():
+          del disjoint_sets[i]
+        else:
+          disjoint_sets[i] = difference
+
+      # Restart the calculation since the list of disjoint sets has changed.
+      break
+
+  return disjoint_sets
+
+
+def GetAllMatchingConditions(conditions, condition_to_match):
+  """Given a set of conditions, find those that match the condition_to_match.
+  Matches are found when all attributes of the condition have the same value as
+  the condition_to_match, or value is accepted for wildcard attributes within
+  condition_to_match.
+  """
+
+  found_matches = set()
+
+  # Check all attributes of condition for matching values.
+  def accepts_all_values(attribute):
+    return getattr(condition_to_match, attribute) == '*'
+  attributes_to_check = [a for a in Attr if not accepts_all_values(a)]
+
+  # If all attributes allow wildcard, all conditions are considered matching
+  if not attributes_to_check:
+    return conditions
+
+  # Check all conditions and accumulate matches.
+  for condition in conditions:
+    condition_matches = True
+    for attribute in attributes_to_check:
+      if (getattr(condition, attribute)
+          != getattr(condition_to_match, attribute)):
+        condition_matches = False
+        break
+    if condition_matches:
+      found_matches.add(condition)
+
+  return found_matches
+
+def GetAttributeValuesRange(attribute, condition):
+  """Get the range of values for the given attribute considering the values
+  of all attributes in the given condition."""
+  if getattr(condition, attribute) == '*':
+    values = copy.copy(SUPPORT_MATRIX[attribute])
+  else:
+    values = set([getattr(condition, attribute)])
+
+  return values
+
+def GenerateConditionExpansion(condition):
+  """Expand wildcard in condition into all possible matching conditions."""
+  architectures = GetAttributeValuesRange(Attr.ARCHITECTURE, condition)
+  profiles = GetAttributeValuesRange(Attr.PROFILE, condition)
+  return set(SourceListCondition(arch, profile)
+                for (arch, profile)
+                in itertools.product(architectures, profiles))
+
+def ReduceConditionalLogic(source_set):
+  """Reduces the conditions for the given SourceSet.
+
+  The reduction leverages what we know about the space of possible combinations,
+  finding cases where conditions span all values possible of a given attribute.
+  In such cases, these conditions can be flattened into a single condition with
+  the spanned attribute removed.
+
+  There is room for further reduction (e.g. Quine-McCluskey), not implemented
+  at this time."""
+
+  ConditionReduction = collections.namedtuple('ConditionReduction',
+                                              'condition, matches')
+  reduced_conditions = set()
+
+  for condition in source_set.conditions:
+    condition_dict = condition._asdict()
+
+    for attribute in Attr:
+      # Set attribute value to wildcard and find matching attributes.
+      original_attribute_value = condition_dict[attribute]
+      condition_dict[attribute] = '*'
+      new_condition = SourceListCondition(**condition_dict)
+
+      # Conditions with wildcards can replace existing conditions iff the
+      # source set contains conditions covering all possible expansions
+      # of the wildcarded values.
+      matches = GetAllMatchingConditions(source_set.conditions, new_condition)
+      if matches == GenerateConditionExpansion(new_condition):
+        reduced_conditions.add(ConditionReduction(new_condition,
+                                                  frozenset(matches)))
+      else:
+        # This wildcard won't work, restore the original value.
+        condition_dict[attribute] = original_attribute_value
+
+  # Finally, find the most efficient reductions. Do a pairwise comparison of all
+  # reductions to de-dup and remove those that are covered by more inclusive
+  # conditions.
+  did_work = True
+  while did_work:
+    did_work = False
+    for reduction_pair in itertools.combinations(reduced_conditions, 2):
+      if reduction_pair[0].matches.issubset(reduction_pair[1].matches):
+        reduced_conditions.remove(reduction_pair[0])
+        did_work = True
+        break
+      elif reduction_pair[1].matches.issubset(reduction_pair[0].matches):
+        reduced_conditions.remove(reduction_pair[1])
+        did_work = True
+        break
+
+  # Apply the reductions to the source_set.
+  for reduction in reduced_conditions:
+    source_set.conditions.difference_update(reduction.matches)
+    source_set.conditions.add(reduction.condition)
+
+
+def ParseOptions():
+  """Parses the options and terminates program if they are not sane.
+
+  Returns:
+    The pair (optparse.OptionValues, [string]), that is the output of
+    a successful call to parser.parse_args().
+  """
+  parser = optparse.OptionParser(
+      usage='usage: %prog [options] DIR')
+
+  parser.add_option('-s',
+                    '--source_dir',
+                    dest='source_dir',
+                    default='.',
+                    metavar='DIR',
+                    help='FFmpeg source directory.')
+
+  parser.add_option('-b',
+                    '--build_dir',
+                    dest='build_dir',
+                    default='.',
+                    metavar='DIR',
+                    help='Build root containing build.x64, etc...')
+
+  options, args = parser.parse_args()
+
+  if not options.source_dir:
+    parser.error('No FFmpeg source directory specified')
+  elif not os.path.exists(options.source_dir):
+    parser.error('FFmpeg source directory does not exist')
+
+  if not options.build_dir:
+    parser.error('No build root directory specified')
+  elif not os.path.exists(options.build_dir):
+    parser.error('FFmpeg build directory does not exist')
+
+  return options, args
+
+
+def WriteGn(fd, disjoint_sets):
+  fd.write(COPYRIGHT)
+  fd.write(GN_HEADER)
+
+  # Generate conditional stanza for each disjoint source set.
+  for s in reversed(disjoint_sets):
+    fd.write(s.GenerateGnStanza())
+
+
+# Lists of files that are exempt from searching in GetIncludedSources.
+IGNORED_INCLUDE_FILES = [
+    # Fuchsia generated files
+    'config.h',
+    os.path.join('libavcodec', 'bsf_list.c'),
+    os.path.join('libavcodec', 'codec_list.c'),
+    os.path.join('libavcodec', 'parser_list.c'),
+    os.path.join('libavformat', 'demuxer_list.c'),
+    os.path.join('libavformat', 'muxer_list.c'),
+    os.path.join('libavformat', 'protocol_list.c'),
+    os.path.join('libavutil', 'avconfig.h'),
+    os.path.join('libavutil', 'ffversion.h'),
+
+    # Current configure values are set such that we don't include these (because
+    # of various defines) and we also don't generate them at all, so we will
+    # fail to find these because they don't exist in our repository.
+    os.path.join('libavcodec', 'aacps_tables.h'),
+    os.path.join('libavcodec', 'aacps_fixed_tables.h'),
+    os.path.join('libavcodec', 'aacsbr_tables.h'),
+    os.path.join('libavcodec', 'aac_tables.h'),
+    os.path.join('libavcodec', 'cabac_tables.h'),
+    os.path.join('libavcodec', 'cbrt_tables.h'),
+    os.path.join('libavcodec', 'cbrt_fixed_tables.h'),
+    os.path.join('libavcodec', 'mpegaudio_tables.h'),
+    os.path.join('libavcodec', 'pcm_tables.h'),
+    os.path.join('libavcodec', 'sinewin_tables.h'),
+    os.path.join('libavcodec', 'sinewin_fixed_tables.h'),
+]
+
+
+# Regex to find lines matching #include "some_dir\some_file.h".
+INCLUDE_REGEX = re.compile('#\s*include\s+"([^"]+)"')
+
+# Regex to find whacky includes that we might be overlooking (e.g. using macros
+# or defines).
+EXOTIC_INCLUDE_REGEX = re.compile('#\s*include\s+[^"<\s].+')
+
+
+def GetIncludedSources(file_path, source_dir, include_set):
+  """Recurse over include tree, accumulating absolute paths to all included
+  files (including the seed file) in include_set.
+
+  Pass in the set returned from previous calls to avoid re-walking parts of the
+  tree. Given file_path may be relative (to options.src_dir) or absolute.
+
+  NOTE: This algorithm is greedy. It does not know which includes may be
+  excluded due to compile-time defines, so it considers any mentioned include.
+
+  NOTE: This algorithm makes hard assumptions about the include search paths.
+  Paths are checked in the order:
+  1. Directory of the file containing the #include directive
+  2. Directory specified by source_dir
+
+  NOTE: Files listed in IGNORED_INCLUDE_FILES will be ignored if not found. See
+  reasons at definition for IGNORED_INCLUDE_FILES.
+  """
+  # Use options.source_dir to correctly resolve relative file path. Use only
+  # absolute paths in the set to avoid same-name-errors.
+  if not os.path.isabs(file_path):
+    file_path = os.path.abspath(os.path.join(source_dir, file_path))
+
+  current_dir = os.path.dirname(file_path)
+
+  # Already processed this file, bail out.
+  if file_path in include_set:
+    return include_set
+
+  include_set.add(file_path)
+
+  for line in open(file_path):
+    include_match = INCLUDE_REGEX.search(line)
+
+    if not include_match:
+      if EXOTIC_INCLUDE_REGEX.search(line):
+        print 'WARNING: Investigate whacky include line:', line
+      continue
+
+    include_file_path = include_match.group(1)
+
+    # These may or may not be where the file lives. Just storing temps here
+    # and we'll checking their validity below.
+    include_path_in_current_dir = os.path.join(current_dir, include_file_path)
+    include_path_in_source_dir = os.path.join(source_dir, include_file_path)
+    resolved_include_path = ''
+
+    # Check if file is in current directory.
+    if os.path.isfile(include_path_in_current_dir):
+      resolved_include_path = include_path_in_current_dir
+    # Else, check source_dir (should be FFmpeg root).
+    elif os.path.isfile(include_path_in_source_dir):
+      resolved_include_path = include_path_in_source_dir
+    # Else, we couldn't find it :(.
+    elif include_file_path in IGNORED_INCLUDE_FILES:
+      continue
+    else:
+      exit('Failed to find file ' + include_file_path)
+
+    # At this point we've found the file. Check if its in our ignore list which
+    # means that the list should be updated to no longer mention this file.
+    if include_file_path in IGNORED_INCLUDE_FILES:
+      print('Found %s in IGNORED_INCLUDE_FILES. Consider updating the list '
+            'to remove this file.' % str(include_file_path))
+
+    GetIncludedSources(resolved_include_path, source_dir, include_set)
+
+
+def FixBasenameCollision(old_path, new_path, content):
+  with open(new_path, "w") as new_file:
+    new_file.write(content)
+
+
+def UpdateCredits(sources_to_check, source_dir):
+  print 'Updating ffmpeg credits...'
+  updater = credits_updater.CreditsUpdater(source_dir)
+  for source_name in sources_to_check:
+    updater.ProcessFile(source_name)
+  updater.PrintStats()
+  updater.WriteCredits()
+
+
+def main():
+  options, _ = ParseOptions()
+
+  # Generate map of FFmpeg source files.
+  source_dir = options.source_dir
+  source_files = GetSourceFiles(source_dir)
+  object_to_sources = GetObjectToSourceMapping(source_files)
+
+  sets = []
+
+  for arch in SUPPORT_MATRIX[Attr.ARCHITECTURE]:
+    for profile in SUPPORT_MATRIX[Attr.PROFILE]:
+      # Assume build directory is of the form build.$arch/$profile.
+      name = ''.join(['build.', arch])
+      build_dir = os.path.join(options.build_dir, name, profile)
+      if not os.path.exists(build_dir):
+        continue
+      print 'Processing build directory: %s' % name
+
+      object_files = GetObjectFiles(build_dir)
+
+      # Generate the set of source files to build said profile.
+      s = GetSourceFileSet(object_to_sources, object_files)
+      sets.append(SourceSet(s, set([SourceListCondition(arch, profile)])))
+
+  sets = CreatePairwiseDisjointSets(sets)
+
+  for source_set in sets:
+    ReduceConditionalLogic(source_set)
+
+  if not sets:
+    exit('ERROR: failed to find any source sets. ' +
+         'Are build_dir (%s) and/or source_dir (%s) options correct?' %
+         (options.build_dir, options.source_dir))
+
+  # Build up set of all sources and includes.
+  sources_to_check = set()
+  for source_set in sets:
+    for source in source_set.sources:
+      GetIncludedSources(source, source_dir, sources_to_check)
+
+  UpdateCredits(sources_to_check, source_dir)
+
+  gn_file_name = os.path.join(options.source_dir, 'ffmpeg_generated.gni')
+  print 'Writing:', gn_file_name
+  with open(gn_file_name, 'w') as fd:
+    WriteGn(fd, sets)
+
+
+if __name__ == '__main__':
+  main()
diff --git a/fuchsia/scripts/license_texts/full_lgpl.txt b/fuchsia/scripts/license_texts/full_lgpl.txt
new file mode 100644
index 0000000..dc6c92d
--- /dev/null
+++ b/fuchsia/scripts/license_texts/full_lgpl.txt
@@ -0,0 +1,502 @@
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library 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
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
\ No newline at end of file
diff --git a/fuchsia/scripts/license_texts/jpeg.txt b/fuchsia/scripts/license_texts/jpeg.txt
new file mode 100644
index 0000000..c41ecdb
--- /dev/null
+++ b/fuchsia/scripts/license_texts/jpeg.txt
@@ -0,0 +1,36 @@
+This file is part of the Independent JPEG Group's software.
+
+The authors make NO WARRANTY or representation, either express or implied,
+with respect to this software, its quality, accuracy, merchantability, or
+fitness for a particular purpose.  This software is provided "AS IS", and
+you, its user, assume the entire risk as to its quality and accuracy.
+
+This software is copyright (C) 1994-1996, Thomas G. Lane.
+All Rights Reserved except as specified below.
+
+Permission is hereby granted to use, copy, modify, and distribute this
+software (or portions thereof) for any purpose, without fee, subject to
+these conditions:
+(1) If any part of the source code for this software is distributed, then
+this README file must be included, with this copyright and no-warranty
+notice unaltered; and any additions, deletions, or changes to the original
+files must be clearly indicated in accompanying documentation.
+(2) If only executable code is distributed, then the accompanying
+documentation must state that "this software is based in part on the work
+of the Independent JPEG Group".
+(3) Permission for use of this software is granted only if the user accepts
+full responsibility for any undesirable consequences; the authors accept
+NO LIABILITY for damages of any kind.
+
+These conditions apply to any software derived from or based on the IJG
+code, not just to the unmodified library.  If you use our work, you ought
+to acknowledge us.
+
+Permission is NOT granted for the use of any IJG author's name or company
+name in advertising or publicity relating to this software or products
+derived from it.  This software may be referred to only as "the Independent
+JPEG Group's software".
+
+We specifically permit and encourage the use of this software as the basis
+of commercial products, provided that all warranty or liability claims are
+assumed by the product vendor.
\ No newline at end of file
diff --git a/fuchsia/scripts/license_texts/mips.txt b/fuchsia/scripts/license_texts/mips.txt
new file mode 100644
index 0000000..3bbf9eb
--- /dev/null
+++ b/fuchsia/scripts/license_texts/mips.txt
@@ -0,0 +1,36 @@
+Copyright (c) 2012
+MIPS Technologies, Inc., California.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+3. Neither the name of the MIPS Technologies, Inc., nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+Authors:
+Branimir Vasic   (bvasic@mips.com)
+Darko Laus       (darko@mips.com)
+Djordje Pesut    (djordje@mips.com)
+Goran Cordasic   (goran@mips.com)
+Nedeljko Babic   (nedeljko.babic imgtec com)
+Mirjana Vulin    (mvulin@mips.com)
+Stanislav Ocovaj (socovaj@mips.com)
+Zoran Lukic      (zoranl@mips.com)
\ No newline at end of file
diff --git a/fuchsia/scripts/license_texts/oggparse_ahlberg_rullgayrd_2005.txt b/fuchsia/scripts/license_texts/oggparse_ahlberg_rullgayrd_2005.txt
new file mode 100644
index 0000000..4af3d44
--- /dev/null
+++ b/fuchsia/scripts/license_texts/oggparse_ahlberg_rullgayrd_2005.txt
@@ -0,0 +1,21 @@
+Copyright (C) 2005  Michael Ahlberg, MÃ¥ns RullgÃ¥rd
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use, copy,
+modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/libavcodec/extract_extradata_bsf.c b/libavcodec/extract_extradata_bsf.c
index 46b76df..9fcaf6d 100644
--- a/libavcodec/extract_extradata_bsf.c
+++ b/libavcodec/extract_extradata_bsf.c
@@ -161,7 +161,7 @@
     ret = ff_h2645_packet_split(&s->h2645_pkt, pkt->data, pkt->size,
                                 ctx, 0, 0, ctx->par_in->codec_id, 1, 0);
     if (ret < 0)
-        return ret;
+        goto fail;
 
     for (i = 0; i < s->h2645_pkt.nb_nals; i++) {
         H2645NAL *nal = &s->h2645_pkt.nals[i];
diff --git a/libavcodec/libx264.c b/libavcodec/libx264.c
index a08fe0c..c3ae07b 100644
--- a/libavcodec/libx264.c
+++ b/libavcodec/libx264.c
@@ -293,6 +293,7 @@
                       int *got_packet)
 {
     X264Context *x4 = ctx->priv_data;
+    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(ctx->pix_fmt);
     x264_nal_t *nal;
     int nnal, i, ret;
     x264_picture_t pic_out = {0};
@@ -852,6 +853,9 @@
 
     x4->params.i_width          = avctx->width;
     x4->params.i_height         = avctx->height;
+#if X264_BUILD >= 153
+    x4->params.i_bitdepth       = av_pix_fmt_desc_get(avctx->pix_fmt)->comp[0].depth;
+#endif
     av_reduce(&sw, &sh, avctx->sample_aspect_ratio.num, avctx->sample_aspect_ratio.den, 4096);
     x4->params.vui.i_sar_width  = sw;
     x4->params.vui.i_sar_height = sh;
@@ -973,6 +977,24 @@
     return 0;
 }
 
+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_YUV420P10,
+    AV_PIX_FMT_YUV422P10,
+    AV_PIX_FMT_YUV444P10,
+    AV_PIX_FMT_NV12,
+    AV_PIX_FMT_NV16,
+    AV_PIX_FMT_NV20,
+#ifdef X264_CSP_NV21
+    AV_PIX_FMT_NV21,
+#endif
+    AV_PIX_FMT_NONE
+};
 static const enum AVPixelFormat pix_fmts_8bit[] = {
     AV_PIX_FMT_YUV420P,
     AV_PIX_FMT_YUVJ420P,
diff --git a/libavcodec/x86/flac_dsp_gpl.asm b/libavcodec/x86/flac_dsp_gpl.asm
deleted file mode 100644
index e285158..0000000
--- a/libavcodec/x86/flac_dsp_gpl.asm
+++ /dev/null
@@ -1,101 +0,0 @@
-;******************************************************************************
-;* FLAC DSP functions
-;*
-;* Copyright (c) 2014 James Darnley <james.darnley@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.
-;******************************************************************************
-
-%include "libavutil/x86/x86util.asm"
-
-SECTION .text
-
-INIT_XMM sse4
-%if ARCH_X86_64
-    cglobal flac_enc_lpc_16, 5, 7, 8, 0, res, smp, len, order, coefs
-    DECLARE_REG_TMP 5, 6
-    %define length r2d
-
-    movsxd orderq, orderd
-%else
-    cglobal flac_enc_lpc_16, 5, 6, 8, 0, res, smp, len, order, coefs
-    DECLARE_REG_TMP 2, 5
-    %define length r2mp
-%endif
-
-; Here we assume that the maximum order value is 32.  This means that we only
-; need to copy a maximum of 32 samples.  Therefore we let the preprocessor
-; unroll this loop and copy all 32.
-%assign iter 0
-%rep 32/(mmsize/4)
-    movu  m0,         [smpq+iter]
-    movu [resq+iter],  m0
-    %assign iter iter+mmsize
-%endrep
-
-lea  resq,   [resq+orderq*4]
-lea  smpq,   [smpq+orderq*4]
-lea  coefsq, [coefsq+orderq*4]
-sub  length,  orderd
-movd m3,      r5m
-neg  orderq
-
-%define posj t0q
-%define negj t1q
-
-.looplen:
-    pxor m0,   m0
-    pxor m4,   m4
-    pxor m6,   m6
-    mov  posj, orderq
-    xor  negj, negj
-
-    .looporder:
-        movd   m2, [coefsq+posj*4] ; c = coefs[j]
-        SPLATD m2
-        movu   m1, [smpq+negj*4-4] ; s = smp[i-j-1]
-        movu   m5, [smpq+negj*4-4+mmsize]
-        movu   m7, [smpq+negj*4-4+mmsize*2]
-        pmulld m1,  m2
-        pmulld m5,  m2
-        pmulld m7,  m2
-        paddd  m0,  m1             ; p += c * s
-        paddd  m4,  m5
-        paddd  m6,  m7
-
-        dec    negj
-        inc    posj
-    jnz .looporder
-
-    psrad  m0,     m3              ; p >>= shift
-    psrad  m4,     m3
-    psrad  m6,     m3
-    movu   m1,    [smpq]
-    movu   m5,    [smpq+mmsize]
-    movu   m7,    [smpq+mmsize*2]
-    psubd  m1,     m0              ; smp[i] - p
-    psubd  m5,     m4
-    psubd  m7,     m6
-    movu  [resq],  m1              ; res[i] = smp[i] - (p >> shift)
-    movu  [resq+mmsize], m5
-    movu  [resq+mmsize*2], m7
-
-    add resq,    3*mmsize
-    add smpq,    3*mmsize
-    sub length, (3*mmsize)/4
-jg .looplen
-RET
diff --git a/libavfilter/signature.h b/libavfilter/signature.h
deleted file mode 100644
index cc198db..0000000
--- a/libavfilter/signature.h
+++ /dev/null
@@ -1,569 +0,0 @@
-/*
- * Copyright (c) 2017 Gerion Entrup
- *
- * 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
- * MPEG-7 video signature calculation and lookup filter
- */
-
-#ifndef AVFILTER_SIGNATURE_H
-#define AVFILTER_SIGNATURE_H
-
-#include <float.h>
-#include "libavutil/common.h"
-#include "libavutil/opt.h"
-#include "libavutil/timestamp.h"
-#include "avfilter.h"
-#include "internal.h"
-
-#define ELEMENT_COUNT 10
-#define SIGELEM_SIZE 380
-#define DIFFELEM_SIZE 348 /* SIGELEM_SIZE - elem_a1 - elem_a2 */
-#define COARSE_SIZE 90
-
-enum lookup_mode {
-    MODE_OFF,
-    MODE_FULL,
-    MODE_FAST,
-    NB_LOOKUP_MODE
-};
-
-enum formats {
-    FORMAT_BINARY,
-    FORMAT_XML,
-    NB_FORMATS
-};
-
-typedef struct Point {
-    uint8_t x;
-    uint8_t y;
-} Point;
-
-typedef struct Block {
-    Point up;
-    Point to;
-} Block;
-
-typedef struct ElemCat {
-    int av_elem; /* average element category */
-    short left_count; /* count of blocks that will be added together */
-    short block_count; /* count of blocks per element */
-    short elem_count;
-    const Block* blocks;
-} ElemCat;
-
-typedef struct FineSignature {
-    struct FineSignature* next;
-    struct FineSignature* prev;
-    uint64_t pts;
-    uint32_t index; /* needed for xmlexport */
-    uint8_t confidence;
-    uint8_t words[5];
-    uint8_t framesig[SIGELEM_SIZE/5];
-} FineSignature;
-
-typedef struct CoarseSignature {
-    uint8_t data[5][31]; /* 5 words with min. 243 bit */
-    struct FineSignature* first; /* associated Finesignatures */
-    struct FineSignature* last;
-    struct CoarseSignature* next;
-} CoarseSignature;
-
-/* lookup types */
-typedef struct MatchingInfo {
-    double meandist;
-    double framerateratio; /* second/first */
-    int score;
-    int offset;
-    int matchframes; /* number of matching frames */
-    int whole;
-    struct FineSignature* first;
-    struct FineSignature* second;
-    struct MatchingInfo* next;
-} MatchingInfo;
-
-typedef struct StreamContext {
-    AVRational time_base;
-    /* needed for xml_export */
-    int w; /* height */
-    int h; /* width */
-
-    /* overflow protection */
-    int divide;
-
-    FineSignature* finesiglist;
-    FineSignature* curfinesig;
-
-    CoarseSignature* coarsesiglist;
-    CoarseSignature* coarseend; /* needed for xml export */
-    /* helpers to store the alternating signatures */
-    CoarseSignature* curcoarsesig1;
-    CoarseSignature* curcoarsesig2;
-
-    int coarsecount; /* counter from 0 to 89 */
-    int midcoarse;   /* whether it is a coarsesignature beginning from 45 + i * 90 */
-    uint32_t lastindex; /* helper to store amount of frames */
-
-    int exported; /* boolean whether stream already exported */
-} StreamContext;
-
-typedef struct SignatureContext {
-    const AVClass *class;
-    /* input parameters */
-    int mode;
-    int nb_inputs;
-    char *filename;
-    int format;
-    int thworddist;
-    int thcomposdist;
-    int thl1;
-    int thdi;
-    int thit;
-    /* end input parameters */
-
-    uint8_t l1distlut[243*242/2]; /* 243 + 242 + 241 ... */
-    StreamContext* streamcontexts;
-} SignatureContext;
-
-
-static const Block elem_a1_data[] = {
-    {{ 0, 0},{ 7, 7}},
-    {{ 8, 0},{15, 7}},
-    {{ 0, 8},{ 7,15}},
-    {{ 8, 8},{15,15}},
-    {{16, 0},{23, 7}},
-    {{24, 0},{31, 7}},
-    {{16, 8},{23,15}},
-    {{24, 8},{31,15}},
-    {{ 0,16},{ 7,23}},
-    {{ 8,16},{15,23}},
-    {{ 0,24},{ 7,31}},
-    {{ 8,24},{15,31}},
-    {{16,16},{23,23}},
-    {{24,16},{31,23}},
-    {{16,24},{23,31}},
-    {{24,24},{31,31}},
-    {{ 0, 0},{15,15}},
-    {{16, 0},{31,15}},
-    {{ 0,16},{15,31}},
-    {{16,16},{31,31}}
-};
-static const ElemCat elem_a1 = { 1, 1, 1, 20, elem_a1_data };
-
-static const Block elem_a2_data[] = {
-    {{ 2, 2},{ 9, 9}},
-    {{12, 2},{19, 9}},
-    {{22, 2},{29, 9}},
-    {{ 2,12},{ 9,19}},
-    {{12,12},{19,19}},
-    {{22,12},{29,19}},
-    {{ 2,22},{ 9,29}},
-    {{12,22},{19,29}},
-    {{22,22},{29,29}},
-    {{ 9, 9},{22,22}},
-    {{ 6, 6},{25,25}},
-    {{ 3, 3},{28,28}}
-};
-static const ElemCat elem_a2 = { 1, 1, 1, 12, elem_a2_data };
-
-static const Block elem_d1_data[] = {
-    {{ 0, 0},{ 1, 3}},{{ 2, 0},{ 3, 3}},
-    {{ 4, 0},{ 7, 1}},{{ 4, 2},{ 7, 3}},
-    {{ 0, 6},{ 3, 7}},{{ 0, 4},{ 3, 5}},
-    {{ 6, 4},{ 7, 7}},{{ 4, 4},{ 5, 7}},
-    {{ 8, 0},{ 9, 3}},{{10, 0},{11, 3}},
-    {{12, 0},{15, 1}},{{12, 2},{15, 3}},
-    {{ 8, 6},{11, 7}},{{ 8, 4},{11, 5}},
-    {{14, 4},{15, 7}},{{12, 4},{13, 7}},
-    {{ 0, 8},{ 1,11}},{{ 2, 8},{ 3,11}},
-    {{ 4, 8},{ 7, 9}},{{ 4,10},{ 7,11}},
-    {{ 0,14},{ 3,15}},{{ 0,12},{ 3,13}},
-    {{ 6,12},{ 7,15}},{{ 4,12},{ 5,15}},
-    {{ 8, 8},{ 9,11}},{{10, 8},{11,11}},
-    {{12, 8},{15, 9}},{{12,10},{15,11}},
-    {{ 8,14},{11,15}},{{ 8,12},{11,13}},
-    {{14,12},{15,15}},{{12,12},{13,15}},
-    {{16, 0},{19, 1}},{{16, 2},{19, 3}},
-    {{22, 0},{23, 3}},{{20, 0},{21, 3}},
-    {{16, 4},{17, 7}},{{18, 4},{19, 7}},
-    {{20, 6},{23, 7}},{{20, 4},{23, 5}},
-    {{24, 0},{27, 1}},{{24, 2},{27, 3}},
-    {{30, 0},{31, 3}},{{28, 0},{29, 3}},
-    {{24, 4},{25, 7}},{{26, 4},{27, 7}},
-    {{28, 6},{31, 7}},{{28, 4},{31, 5}},
-    {{16, 8},{19, 9}},{{16,10},{19,11}},
-    {{22, 8},{23,11}},{{20, 8},{21,11}},
-    {{16,12},{17,15}},{{18,12},{19,15}},
-    {{20,14},{23,15}},{{20,12},{23,13}},
-    {{24, 8},{27, 9}},{{24,10},{27,11}},
-    {{30, 8},{31,11}},{{28, 8},{29,11}},
-    {{24,12},{25,15}},{{26,12},{27,15}},
-    {{28,14},{31,15}},{{28,12},{31,13}},
-    {{ 0,16},{ 3,17}},{{ 0,18},{ 3,19}},
-    {{ 6,16},{ 7,19}},{{ 4,16},{ 5,19}},
-    {{ 0,20},{ 1,23}},{{ 2,20},{ 3,23}},
-    {{ 4,22},{ 7,23}},{{ 4,20},{ 7,21}},
-    {{ 8,16},{11,17}},{{ 8,18},{11,19}},
-    {{14,16},{15,19}},{{12,16},{13,19}},
-    {{ 8,20},{ 9,23}},{{10,20},{11,23}},
-    {{12,22},{15,23}},{{12,20},{15,21}},
-    {{ 0,24},{ 3,25}},{{ 0,26},{ 3,27}},
-    {{ 6,24},{ 7,27}},{{ 4,24},{ 5,27}},
-    {{ 0,28},{ 1,31}},{{ 2,28},{ 3,31}},
-    {{ 4,30},{ 7,31}},{{ 4,28},{ 7,29}},
-    {{ 8,24},{11,25}},{{ 8,26},{11,27}},
-    {{14,24},{15,27}},{{12,24},{13,27}},
-    {{ 8,28},{ 9,31}},{{10,28},{11,31}},
-    {{12,30},{15,31}},{{12,28},{15,29}},
-    {{16,16},{17,19}},{{18,16},{19,19}},
-    {{20,16},{23,17}},{{20,18},{23,19}},
-    {{16,22},{19,23}},{{16,20},{19,21}},
-    {{22,20},{23,23}},{{20,20},{21,23}},
-    {{24,16},{25,19}},{{26,16},{27,19}},
-    {{28,16},{31,17}},{{28,18},{31,19}},
-    {{24,22},{27,23}},{{24,20},{27,21}},
-    {{30,20},{31,23}},{{28,20},{29,23}},
-    {{16,24},{17,27}},{{18,24},{19,27}},
-    {{20,24},{23,25}},{{20,26},{23,27}},
-    {{16,30},{19,31}},{{16,28},{19,29}},
-    {{22,28},{23,31}},{{20,28},{21,31}},
-    {{24,24},{25,27}},{{26,24},{27,27}},
-    {{28,24},{31,25}},{{28,26},{31,27}},
-    {{24,30},{27,31}},{{24,28},{27,29}},
-    {{30,28},{31,31}},{{28,28},{29,31}},
-    {{ 2, 2},{ 3, 5}},{{ 4, 2},{ 5, 5}},
-    {{ 6, 2},{ 9, 3}},{{ 6, 4},{ 9, 5}},
-    {{ 2, 8},{ 5, 9}},{{ 2, 6},{ 5, 7}},
-    {{ 8, 6},{ 9, 9}},{{ 6, 6},{ 7, 9}},
-    {{12, 2},{13, 5}},{{14, 2},{15, 5}},
-    {{16, 2},{19, 3}},{{16, 4},{19, 5}},
-    {{12, 8},{15, 9}},{{12, 6},{15, 7}},
-    {{18, 6},{19, 9}},{{16, 6},{17, 9}},
-    {{22, 2},{23, 5}},{{24, 2},{25, 5}},
-    {{26, 2},{29, 3}},{{26, 4},{29, 5}},
-    {{22, 8},{25, 9}},{{22, 6},{25, 7}},
-    {{28, 6},{29, 9}},{{26, 6},{27, 9}},
-    {{ 2,12},{ 3,15}},{{ 4,12},{ 5,15}},
-    {{ 6,12},{ 9,13}},{{ 6,14},{ 9,15}},
-    {{ 2,18},{ 5,19}},{{ 2,16},{ 5,17}},
-    {{ 8,16},{ 9,19}},{{ 6,16},{ 7,19}},
-    {{12,12},{15,13}},{{12,14},{15,15}},
-    {{16,12},{19,13}},{{16,14},{19,15}},
-    {{12,18},{15,19}},{{12,16},{15,17}},
-    {{16,18},{19,19}},{{16,16},{19,17}},
-    {{22,12},{23,15}},{{24,12},{25,15}},
-    {{26,12},{29,13}},{{26,14},{29,15}},
-    {{22,18},{25,19}},{{22,16},{25,17}},
-    {{28,16},{29,19}},{{26,16},{27,19}},
-    {{ 2,22},{ 3,25}},{{ 4,22},{ 5,25}},
-    {{ 6,22},{ 9,23}},{{ 6,24},{ 9,25}},
-    {{ 2,28},{ 5,29}},{{ 2,26},{ 5,27}},
-    {{ 8,26},{ 9,29}},{{ 6,26},{ 7,29}},
-    {{12,22},{13,25}},{{14,22},{15,25}},
-    {{16,22},{19,23}},{{16,24},{19,25}},
-    {{12,28},{15,29}},{{12,26},{15,27}},
-    {{18,26},{19,29}},{{16,26},{17,29}},
-    {{22,22},{23,25}},{{24,22},{25,25}},
-    {{26,22},{29,23}},{{26,24},{29,25}},
-    {{22,28},{25,29}},{{22,26},{25,27}},
-    {{28,26},{29,29}},{{26,26},{27,29}},
-    {{ 7, 7},{10, 8}},{{ 7, 9},{10,10}},
-    {{11, 7},{12,10}},{{13, 7},{14,10}},
-    {{ 7,11},{ 8,14}},{{ 9,11},{10,14}},
-    {{11,11},{14,12}},{{11,13},{14,14}},
-    {{17, 7},{20, 8}},{{17, 9},{20,10}},
-    {{21, 7},{22,10}},{{23, 7},{24,10}},
-    {{17,11},{18,14}},{{19,11},{20,14}},
-    {{21,11},{24,12}},{{21,13},{24,14}},
-    {{ 7,17},{10,18}},{{ 7,19},{10,20}},
-    {{11,17},{12,20}},{{13,17},{14,20}},
-    {{ 7,21},{ 8,24}},{{ 9,21},{10,24}},
-    {{11,21},{14,22}},{{11,23},{14,24}},
-    {{17,17},{20,18}},{{17,19},{20,20}},
-    {{21,17},{22,20}},{{23,17},{24,20}},
-    {{17,21},{18,24}},{{19,21},{20,24}},
-    {{21,21},{24,22}},{{21,23},{24,24}}
-};
-static const ElemCat elem_d1 = { 0, 1, 2, 116, elem_d1_data };
-
-static const Block elem_d2_data[] = {
-    {{ 0, 0},{ 3, 3}},{{ 4, 4},{ 7, 7}},{{ 4, 0},{ 7, 3}},{{ 0, 4},{ 3, 7}},
-    {{ 8, 0},{11, 3}},{{12, 4},{15, 7}},{{12, 0},{15, 3}},{{ 8, 4},{11, 7}},
-    {{16, 0},{19, 3}},{{20, 4},{23, 7}},{{20, 0},{23, 3}},{{16, 4},{19, 7}},
-    {{24, 0},{27, 3}},{{28, 4},{31, 7}},{{28, 0},{31, 3}},{{24, 4},{27, 7}},
-    {{ 0, 8},{ 3,11}},{{ 4,12},{ 7,15}},{{ 4, 8},{ 7,11}},{{ 0,12},{ 3,15}},
-    {{ 8, 8},{11,11}},{{12,12},{15,15}},{{12, 8},{15,11}},{{ 8,12},{11,15}},
-    {{16, 8},{19,11}},{{20,12},{23,15}},{{20, 8},{23,11}},{{16,12},{19,15}},
-    {{24, 8},{27,11}},{{28,12},{31,15}},{{28, 8},{31,11}},{{24,12},{27,15}},
-    {{ 0,16},{ 3,19}},{{ 4,20},{ 7,23}},{{ 4,16},{ 7,19}},{{ 0,20},{ 3,23}},
-    {{ 8,16},{11,19}},{{12,20},{15,23}},{{12,16},{15,19}},{{ 8,20},{11,23}},
-    {{16,16},{19,19}},{{20,20},{23,23}},{{20,16},{23,19}},{{16,20},{19,23}},
-    {{24,16},{27,19}},{{28,20},{31,23}},{{28,16},{31,19}},{{24,20},{27,23}},
-    {{ 0,24},{ 3,27}},{{ 4,28},{ 7,31}},{{ 4,24},{ 7,27}},{{ 0,28},{ 3,31}},
-    {{ 8,24},{11,27}},{{12,28},{15,31}},{{12,24},{15,27}},{{ 8,28},{11,31}},
-    {{16,24},{19,27}},{{20,28},{23,31}},{{20,24},{23,27}},{{16,28},{19,31}},
-    {{24,24},{27,27}},{{28,28},{31,31}},{{28,24},{31,27}},{{24,28},{27,31}},
-    {{ 4, 4},{ 7, 7}},{{ 8, 8},{11,11}},{{ 8, 4},{11, 7}},{{ 4, 8},{ 7,11}},
-    {{12, 4},{15, 7}},{{16, 8},{19,11}},{{16, 4},{19, 7}},{{12, 8},{15,11}},
-    {{20, 4},{23, 7}},{{24, 8},{27,11}},{{24, 4},{27, 7}},{{20, 8},{23,11}},
-    {{ 4,12},{ 7,15}},{{ 8,16},{11,19}},{{ 8,12},{11,15}},{{ 4,16},{ 7,19}},
-    {{12,12},{15,15}},{{16,16},{19,19}},{{16,12},{19,15}},{{12,16},{15,19}},
-    {{20,12},{23,15}},{{24,16},{27,19}},{{24,12},{27,15}},{{20,16},{23,19}},
-    {{ 4,20},{ 7,23}},{{ 8,24},{11,27}},{{ 8,20},{11,23}},{{ 4,24},{ 7,27}},
-    {{12,20},{15,23}},{{16,24},{19,27}},{{16,20},{19,23}},{{12,24},{15,27}},
-    {{20,20},{23,23}},{{24,24},{27,27}},{{24,20},{27,23}},{{20,24},{23,27}}
-};
-static const ElemCat elem_d2 = { 0, 2, 4, 25, elem_d2_data };
-
-static const Block elem_d3_data[] = {
-    {{ 1, 1},{10,10}},{{11, 1},{20,10}},
-    {{ 1, 1},{10,10}},{{21, 1},{30,10}},
-    {{ 1, 1},{10,10}},{{ 1,11},{10,20}},
-    {{ 1, 1},{10,10}},{{11,11},{20,20}},
-    {{ 1, 1},{10,10}},{{21,11},{30,20}},
-    {{ 1, 1},{10,10}},{{ 1,21},{10,30}},
-    {{ 1, 1},{10,10}},{{11,21},{20,30}},
-    {{ 1, 1},{10,10}},{{21,21},{30,30}},
-    {{11, 1},{20,10}},{{21, 1},{30,10}},
-    {{11, 1},{20,10}},{{ 1,11},{10,20}},
-    {{11, 1},{20,10}},{{11,11},{20,20}},
-    {{11, 1},{20,10}},{{21,11},{30,20}},
-    {{11, 1},{20,10}},{{ 1,21},{10,30}},
-    {{11, 1},{20,10}},{{11,21},{20,30}},
-    {{11, 1},{20,10}},{{21,21},{30,30}},
-    {{21, 1},{30,10}},{{ 1,11},{10,20}},
-    {{21, 1},{30,10}},{{11,11},{20,20}},
-    {{21, 1},{30,10}},{{21,11},{30,20}},
-    {{21, 1},{30,10}},{{ 1,21},{10,30}},
-    {{21, 1},{30,10}},{{11,21},{20,30}},
-    {{21, 1},{30,10}},{{21,21},{30,30}},
-    {{ 1,11},{10,20}},{{11,11},{20,20}},
-    {{ 1,11},{10,20}},{{21,11},{30,20}},
-    {{ 1,11},{10,20}},{{ 1,21},{10,30}},
-    {{ 1,11},{10,20}},{{11,21},{20,30}},
-    {{ 1,11},{10,20}},{{21,21},{30,30}},
-    {{11,11},{20,20}},{{21,11},{30,20}},
-    {{11,11},{20,20}},{{ 1,21},{10,30}},
-    {{11,11},{20,20}},{{11,21},{20,30}},
-    {{11,11},{20,20}},{{21,21},{30,30}},
-    {{21,11},{30,20}},{{ 1,21},{10,30}},
-    {{21,11},{30,20}},{{11,21},{20,30}},
-    {{21,11},{30,20}},{{21,21},{30,30}},
-    {{ 1,21},{10,30}},{{11,21},{20,30}},
-    {{ 1,21},{10,30}},{{21,21},{30,30}},
-    {{11,21},{20,30}},{{21,21},{30,30}}
-};
-static const ElemCat elem_d3 = { 0, 1, 2, 36, elem_d3_data };
-
-static const Block elem_d4_data[] = {
-    {{ 7,13},{12,18}},{{19,13},{24,18}},
-    {{13, 7},{18,12}},{{13,19},{18,24}},
-    {{ 7, 7},{12,12}},{{19,19},{24,24}},
-    {{19, 7},{24,12}},{{ 7,19},{12,24}},
-    {{13, 7},{18,12}},{{19,13},{24,18}},
-    {{19,13},{24,18}},{{13,19},{18,24}},
-    {{13,19},{18,24}},{{ 7,13},{12,18}},
-    {{ 7,13},{12,18}},{{13, 7},{18,12}},
-    {{ 7, 7},{12,12}},{{19, 7},{24,12}},
-    {{19, 7},{24,12}},{{19,19},{24,24}},
-    {{19,19},{24,24}},{{ 7,19},{12,24}},
-    {{ 7,19},{12,24}},{{ 7, 7},{12,12}},
-    {{13,13},{18,18}},{{13, 1},{18, 6}},
-    {{13,13},{18,18}},{{25,13},{30,18}},
-    {{13,13},{18,18}},{{13,25},{18,30}},
-    {{13,13},{18,18}},{{ 1,13},{ 6,18}},
-    {{13, 1},{18, 6}},{{13,25},{18,30}},
-    {{ 1,13},{ 6,18}},{{25,13},{30,18}},
-    {{ 7, 1},{12, 6}},{{19, 1},{24, 6}},
-    {{ 7,25},{12,30}},{{19,25},{24,30}},
-    {{ 1, 7},{ 6,12}},{{ 1,19},{ 6,24}},
-    {{25, 7},{30,12}},{{25,19},{30,24}},
-    {{ 7, 1},{12, 6}},{{ 1, 7},{ 6,12}},
-    {{19, 1},{24, 6}},{{25, 7},{30,12}},
-    {{25,19},{30,24}},{{19,25},{24,30}},
-    {{ 1,19},{ 6,24}},{{ 7,25},{12,30}},
-    {{ 1, 1},{ 6, 6}},{{25, 1},{30, 6}},
-    {{25, 1},{30, 6}},{{25,25},{30,30}},
-    {{25,25},{30,30}},{{ 1,25},{ 6,30}},
-    {{ 1,25},{ 6,30}},{{ 1, 1},{ 6, 6}}
-};
-static const ElemCat elem_d4 = { 0, 1, 2, 30, elem_d4_data };
-
-static const Block elem_d5_data[] = {
-    {{ 1, 1},{10, 3}},{{ 1, 4},{ 3, 7}},{{ 8, 4},{10, 7}},{{ 1, 8},{10,10}},{{ 4, 4},{ 7, 7}},
-    {{11, 1},{20, 3}},{{11, 4},{13, 7}},{{18, 4},{20, 7}},{{11, 8},{20,10}},{{14, 4},{17, 7}},
-    {{21, 1},{30, 3}},{{21, 4},{23, 7}},{{28, 4},{30, 7}},{{21, 8},{30,10}},{{24, 4},{27, 7}},
-    {{ 1,11},{10,13}},{{ 1,14},{ 3,17}},{{ 8,14},{10,17}},{{ 1,18},{10,20}},{{ 4,14},{ 7,17}},
-    {{11,11},{20,13}},{{11,14},{13,17}},{{18,14},{20,17}},{{11,18},{20,20}},{{14,14},{17,17}},
-    {{21,11},{30,13}},{{21,14},{23,17}},{{28,14},{30,17}},{{21,18},{30,20}},{{24,14},{27,17}},
-    {{ 1,21},{10,23}},{{ 1,24},{ 3,27}},{{ 8,24},{10,27}},{{ 1,28},{10,30}},{{ 4,24},{ 7,27}},
-    {{11,21},{20,23}},{{11,24},{13,27}},{{18,24},{20,27}},{{11,28},{20,30}},{{14,24},{17,27}},
-    {{21,21},{30,23}},{{21,24},{23,27}},{{28,24},{30,27}},{{21,28},{30,30}},{{24,24},{27,27}},
-    {{ 6, 6},{15, 8}},{{ 6, 9},{ 8,12}},{{13, 9},{15,12}},{{ 6,13},{15,15}},{{ 9, 9},{12,12}},
-    {{16, 6},{25, 8}},{{16, 9},{18,12}},{{23, 9},{25,12}},{{16,13},{25,15}},{{19, 9},{22,12}},
-    {{ 6,16},{15,18}},{{ 6,19},{ 8,22}},{{13,19},{15,22}},{{ 6,23},{15,25}},{{ 9,19},{12,22}},
-    {{16,16},{25,18}},{{16,19},{18,22}},{{23,19},{25,22}},{{16,23},{25,25}},{{19,19},{22,22}},
-    {{ 6, 1},{15, 3}},{{ 6, 4},{ 8, 7}},{{13, 4},{15, 7}},{{ 6, 8},{15,10}},{{ 9, 4},{12, 7}},
-    {{16, 1},{25, 3}},{{16, 4},{18, 7}},{{23, 4},{25, 7}},{{16, 8},{25,10}},{{19, 4},{22, 7}},
-    {{ 1, 6},{10, 8}},{{ 1, 9},{ 3,12}},{{ 8, 9},{10,12}},{{ 1,13},{10,15}},{{ 4, 9},{ 7,12}},
-    {{11, 6},{20, 8}},{{11, 9},{13,12}},{{18, 9},{20,12}},{{11,13},{20,15}},{{14, 9},{17,12}},
-    {{21, 6},{30, 8}},{{21, 9},{23,12}},{{28, 9},{30,12}},{{21,13},{30,15}},{{24, 9},{27,12}},
-    {{ 6,11},{15,13}},{{ 6,14},{ 8,17}},{{13,14},{15,17}},{{ 6,18},{15,20}},{{ 9,14},{12,17}},
-    {{16,11},{25,13}},{{16,14},{18,17}},{{23,14},{25,17}},{{16,18},{25,20}},{{19,14},{22,17}},
-    {{ 1,16},{10,18}},{{ 1,19},{ 3,22}},{{ 8,19},{10,22}},{{ 1,23},{10,25}},{{ 4,19},{ 7,22}},
-    {{11,16},{20,18}},{{11,19},{13,22}},{{18,19},{20,22}},{{11,23},{20,25}},{{14,19},{17,22}},
-    {{21,16},{30,18}},{{21,19},{23,22}},{{28,19},{30,22}},{{21,23},{30,25}},{{24,19},{27,22}},
-    {{ 6,21},{15,23}},{{ 6,24},{ 8,27}},{{13,24},{15,27}},{{ 6,28},{15,30}},{{ 9,24},{12,27}},
-    {{16,21},{25,23}},{{16,24},{18,27}},{{23,24},{25,27}},{{16,28},{25,30}},{{19,24},{22,27}},
-    {{ 2, 2},{14, 6}},{{ 2, 7},{ 6, 9}},{{10, 7},{14, 9}},{{ 2,10},{14,14}},{{ 7, 7},{ 9, 9}},
-    {{ 7, 2},{19, 6}},{{ 7, 7},{11, 9}},{{15, 7},{19, 9}},{{ 7,10},{19,14}},{{12, 7},{14, 9}},
-    {{12, 2},{24, 6}},{{12, 7},{16, 9}},{{20, 7},{24, 9}},{{12,10},{24,14}},{{17, 7},{19, 9}},
-    {{17, 2},{29, 6}},{{17, 7},{21, 9}},{{25, 7},{29, 9}},{{17,10},{29,14}},{{22, 7},{24, 9}},
-    {{ 2, 7},{14,11}},{{ 2,12},{ 6,14}},{{10,12},{14,14}},{{ 2,15},{14,19}},{{ 7,12},{ 9,14}},
-    {{ 7, 7},{19,11}},{{ 7,12},{11,14}},{{15,12},{19,14}},{{ 7,15},{19,19}},{{12,12},{14,14}},
-    {{12, 7},{24,11}},{{12,12},{16,14}},{{20,12},{24,14}},{{12,15},{24,19}},{{17,12},{19,14}},
-    {{17, 7},{29,11}},{{17,12},{21,14}},{{25,12},{29,14}},{{17,15},{29,19}},{{22,12},{24,14}},
-    {{ 2,12},{14,16}},{{ 2,17},{ 6,19}},{{10,17},{14,19}},{{ 2,20},{14,24}},{{ 7,17},{ 9,19}},
-    {{ 7,12},{19,16}},{{ 7,17},{11,19}},{{15,17},{19,19}},{{ 7,20},{19,24}},{{12,17},{14,19}},
-    {{12,12},{24,16}},{{12,17},{16,19}},{{20,17},{24,19}},{{12,20},{24,24}},{{17,17},{19,19}},
-    {{17,12},{29,16}},{{17,17},{21,19}},{{25,17},{29,19}},{{17,20},{29,24}},{{22,17},{24,19}},
-    {{ 2,17},{14,21}},{{ 2,22},{ 6,24}},{{10,22},{14,24}},{{ 2,25},{14,29}},{{ 7,22},{ 9,24}},
-    {{ 7,17},{19,21}},{{ 7,22},{11,24}},{{15,22},{19,24}},{{ 7,25},{19,29}},{{12,22},{14,24}},
-    {{12,17},{24,21}},{{12,22},{16,24}},{{20,22},{24,24}},{{12,25},{24,29}},{{17,22},{19,24}},
-    {{17,17},{29,21}},{{17,22},{21,24}},{{25,22},{29,24}},{{17,25},{29,29}},{{22,22},{24,24}},
-    {{ 8, 3},{13, 4}},{{ 8, 5},{ 9, 6}},{{12, 5},{13, 6}},{{ 8, 7},{13, 8}},{{10, 5},{11, 6}},
-    {{13, 3},{18, 4}},{{13, 5},{14, 6}},{{17, 5},{18, 6}},{{13, 7},{18, 8}},{{15, 5},{16, 6}},
-    {{18, 3},{23, 4}},{{18, 5},{19, 6}},{{22, 5},{23, 6}},{{18, 7},{23, 8}},{{20, 5},{21, 6}},
-    {{ 3, 8},{ 8, 9}},{{ 3,10},{ 4,11}},{{ 7,10},{ 8,11}},{{ 3,12},{ 8,13}},{{ 5,10},{ 6,11}},
-    {{ 8, 8},{13, 9}},{{ 8,10},{ 9,11}},{{12,10},{13,11}},{{ 8,12},{13,13}},{{10,10},{11,11}},
-    {{13, 8},{18, 9}},{{13,10},{14,11}},{{17,10},{18,11}},{{13,12},{18,13}},{{15,10},{16,11}},
-    {{18, 8},{23, 9}},{{18,10},{19,11}},{{22,10},{23,11}},{{18,12},{23,13}},{{20,10},{21,11}},
-    {{23, 8},{28, 9}},{{23,10},{24,11}},{{27,10},{28,11}},{{23,12},{28,13}},{{25,10},{26,11}},
-    {{ 3,13},{ 8,14}},{{ 3,15},{ 4,16}},{{ 7,15},{ 8,16}},{{ 3,17},{ 8,18}},{{ 5,15},{ 6,16}},
-    {{ 8,13},{13,14}},{{ 8,15},{ 9,16}},{{12,15},{13,16}},{{ 8,17},{13,18}},{{10,15},{11,16}},
-    {{13,13},{18,14}},{{13,15},{14,16}},{{17,15},{18,16}},{{13,17},{18,18}},{{15,15},{16,16}},
-    {{18,13},{23,14}},{{18,15},{19,16}},{{22,15},{23,16}},{{18,17},{23,18}},{{20,15},{21,16}},
-    {{23,13},{28,14}},{{23,15},{24,16}},{{27,15},{28,16}},{{23,17},{28,18}},{{25,15},{26,16}},
-    {{ 3,18},{ 8,19}},{{ 3,20},{ 4,21}},{{ 7,20},{ 8,21}},{{ 3,22},{ 8,23}},{{ 5,20},{ 6,21}},
-    {{ 8,18},{13,19}},{{ 8,20},{ 9,21}},{{12,20},{13,21}},{{ 8,22},{13,23}},{{10,20},{11,21}},
-    {{13,18},{18,19}},{{13,20},{14,21}},{{17,20},{18,21}},{{13,22},{18,23}},{{15,20},{16,21}},
-    {{18,18},{23,19}},{{18,20},{19,21}},{{22,20},{23,21}},{{18,22},{23,23}},{{20,20},{21,21}},
-    {{23,18},{28,19}},{{23,20},{24,21}},{{27,20},{28,21}},{{23,22},{28,23}},{{25,20},{26,21}},
-    {{ 8,23},{13,24}},{{ 8,25},{ 9,26}},{{12,25},{13,26}},{{ 8,27},{13,28}},{{10,25},{11,26}},
-    {{13,23},{18,24}},{{13,25},{14,26}},{{17,25},{18,26}},{{13,27},{18,28}},{{15,25},{16,26}},
-    {{18,23},{23,24}},{{18,25},{19,26}},{{22,25},{23,26}},{{18,27},{23,28}},{{20,25},{21,26}}
-};
-static const ElemCat elem_d5 = { 0, 4, 5, 62, elem_d5_data };
-
-static const Block elem_d6_data[] = {
-    {{ 3, 5},{12,10}},{{ 5, 3},{10,12}},
-    {{11, 5},{20,10}},{{13, 3},{18,12}},
-    {{19, 5},{28,10}},{{21, 3},{26,12}},
-    {{ 3,13},{12,18}},{{ 5,11},{10,20}},
-    {{11,13},{20,18}},{{13,11},{18,20}},
-    {{19,13},{28,18}},{{21,11},{26,20}},
-    {{ 3,21},{12,26}},{{ 5,19},{10,28}},
-    {{11,21},{20,26}},{{13,19},{18,28}},
-    {{19,21},{28,26}},{{21,19},{26,28}}
-};
-static const ElemCat elem_d6 = { 0, 1, 2, 9, elem_d6_data };
-
-static const Block elem_d7_data[] = {
-    {{ 0, 4},{ 3, 7}},{{ 8, 4},{11, 7}},{{ 4, 4},{ 7, 7}},
-    {{ 4, 0},{ 7, 3}},{{ 4, 8},{ 7,11}},{{ 4, 4},{ 7, 7}},
-    {{ 5, 4},{ 8, 7}},{{13, 4},{16, 7}},{{ 9, 4},{12, 7}},
-    {{ 9, 0},{12, 3}},{{ 9, 8},{12,11}},{{ 9, 4},{12, 7}},
-    {{10, 4},{13, 7}},{{18, 4},{21, 7}},{{14, 4},{17, 7}},
-    {{14, 0},{17, 3}},{{14, 8},{17,11}},{{14, 4},{17, 7}},
-    {{15, 4},{18, 7}},{{23, 4},{26, 7}},{{19, 4},{22, 7}},
-    {{19, 0},{22, 3}},{{19, 8},{22,11}},{{19, 4},{22, 7}},
-    {{20, 4},{23, 7}},{{28, 4},{31, 7}},{{24, 4},{27, 7}},
-    {{24, 0},{27, 3}},{{24, 8},{27,11}},{{24, 4},{27, 7}},
-    {{ 0, 9},{ 3,12}},{{ 8, 9},{11,12}},{{ 4, 9},{ 7,12}},
-    {{ 4, 5},{ 7, 8}},{{ 4,13},{ 7,16}},{{ 4, 9},{ 7,12}},
-    {{ 5, 9},{ 8,12}},{{13, 9},{16,12}},{{ 9, 9},{12,12}},
-    {{ 9, 5},{12, 8}},{{ 9,13},{12,16}},{{ 9, 9},{12,12}},
-    {{10, 9},{13,12}},{{18, 9},{21,12}},{{14, 9},{17,12}},
-    {{14, 5},{17, 8}},{{14,13},{17,16}},{{14, 9},{17,12}},
-    {{15, 9},{18,12}},{{23, 9},{26,12}},{{19, 9},{22,12}},
-    {{19, 5},{22, 8}},{{19,13},{22,16}},{{19, 9},{22,12}},
-    {{20, 9},{23,12}},{{28, 9},{31,12}},{{24, 9},{27,12}},
-    {{24, 5},{27, 8}},{{24,13},{27,16}},{{24, 9},{27,12}},
-    {{ 0,14},{ 3,17}},{{ 8,14},{11,17}},{{ 4,14},{ 7,17}},
-    {{ 4,10},{ 7,13}},{{ 4,18},{ 7,21}},{{ 4,14},{ 7,17}},
-    {{ 5,14},{ 8,17}},{{13,14},{16,17}},{{ 9,14},{12,17}},
-    {{ 9,10},{12,13}},{{ 9,18},{12,21}},{{ 9,14},{12,17}},
-    {{10,14},{13,17}},{{18,14},{21,17}},{{14,14},{17,17}},
-    {{14,10},{17,13}},{{14,18},{17,21}},{{14,14},{17,17}},
-    {{15,14},{18,17}},{{23,14},{26,17}},{{19,14},{22,17}},
-    {{19,10},{22,13}},{{19,18},{22,21}},{{19,14},{22,17}},
-    {{20,14},{23,17}},{{28,14},{31,17}},{{24,14},{27,17}},
-    {{24,10},{27,13}},{{24,18},{27,21}},{{24,14},{27,17}},
-    {{ 0,19},{ 3,22}},{{ 8,19},{11,22}},{{ 4,19},{ 7,22}},
-    {{ 4,15},{ 7,18}},{{ 4,23},{ 7,26}},{{ 4,19},{ 7,22}},
-    {{ 5,19},{ 8,22}},{{13,19},{16,22}},{{ 9,19},{12,22}},
-    {{ 9,15},{12,18}},{{ 9,23},{12,26}},{{ 9,19},{12,22}},
-    {{10,19},{13,22}},{{18,19},{21,22}},{{14,19},{17,22}},
-    {{14,15},{17,18}},{{14,23},{17,26}},{{14,19},{17,22}},
-    {{15,19},{18,22}},{{23,19},{26,22}},{{19,19},{22,22}},
-    {{19,15},{22,18}},{{19,23},{22,26}},{{19,19},{22,22}},
-    {{20,19},{23,22}},{{28,19},{31,22}},{{24,19},{27,22}},
-    {{24,15},{27,18}},{{24,23},{27,26}},{{24,19},{27,22}},
-    {{ 0,24},{ 3,27}},{{ 8,24},{11,27}},{{ 4,24},{ 7,27}},
-    {{ 4,20},{ 7,23}},{{ 4,28},{ 7,31}},{{ 4,24},{ 7,27}},
-    {{ 5,24},{ 8,27}},{{13,24},{16,27}},{{ 9,24},{12,27}},
-    {{ 9,20},{12,23}},{{ 9,28},{12,31}},{{ 9,24},{12,27}},
-    {{10,24},{13,27}},{{18,24},{21,27}},{{14,24},{17,27}},
-    {{14,20},{17,23}},{{14,28},{17,31}},{{14,24},{17,27}},
-    {{15,24},{18,27}},{{23,24},{26,27}},{{19,24},{22,27}},
-    {{19,20},{22,23}},{{19,28},{22,31}},{{19,24},{22,27}},
-    {{20,24},{23,27}},{{28,24},{31,27}},{{24,24},{27,27}},
-    {{24,20},{27,23}},{{24,28},{27,31}},{{24,24},{27,27}}
-};
-static const ElemCat elem_d7 = { 0, 2, 3, 50, elem_d7_data };
-
-static const Block elem_d8_data[] = {
-    {{ 0, 0},{ 7, 3}},{{ 0, 4},{ 7, 7}},
-    {{ 8, 0},{11, 7}},{{12, 0},{15, 7}},
-    {{ 0, 8},{ 3,15}},{{ 4, 8},{ 7,15}},
-    {{ 8, 8},{15,11}},{{ 8,12},{15,15}},
-    {{16, 0},{19, 7}},{{20, 0},{23, 7}},
-    {{24, 0},{31, 3}},{{24, 4},{31, 7}},
-    {{16, 8},{23,11}},{{16,12},{23,15}},
-    {{24, 8},{27,15}},{{28, 8},{31,15}},
-    {{ 0,16},{ 3,23}},{{ 4,16},{ 7,23}},
-    {{ 8,16},{15,19}},{{ 8,20},{15,23}},
-    {{ 0,24},{ 7,27}},{{ 0,28},{ 7,31}},
-    {{ 8,24},{11,31}},{{12,24},{15,31}},
-    {{16,16},{23,19}},{{16,20},{23,23}},
-    {{24,16},{27,23}},{{28,16},{31,23}},
-    {{16,24},{19,31}},{{20,24},{23,31}},
-    {{24,24},{31,27}},{{24,28},{31,31}},
-    {{ 0, 0},{ 7,15}},{{ 8, 0},{15,15}},
-    {{16, 0},{31, 7}},{{16, 8},{31,15}},
-    {{ 0,16},{15,23}},{{ 0,24},{15,31}},
-    {{16,16},{23,31}},{{24,16},{31,31}}
-};
-static const ElemCat elem_d8 = { 0, 1, 2, 20, elem_d8_data };
-
-static const ElemCat* elements[ELEMENT_COUNT] = { &elem_a1, &elem_a2,
-                                                  &elem_d1, &elem_d2, &elem_d3, &elem_d4,
-                                                  &elem_d5, &elem_d6, &elem_d7, &elem_d8 };
-#endif /* AVFILTER_SIGNATURE_H */
diff --git a/libavfilter/signature_lookup.c b/libavfilter/signature_lookup.c
deleted file mode 100644
index 272c717..0000000
--- a/libavfilter/signature_lookup.c
+++ /dev/null
@@ -1,580 +0,0 @@
-/*
- * Copyright (c) 2017 Gerion Entrup
- *
- * 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
- * MPEG-7 video signature calculation and lookup filter
- */
-
-#include "signature.h"
-
-#define HOUGH_MAX_OFFSET 90
-#define MAX_FRAMERATE 60
-
-#define DIR_PREV 0
-#define DIR_NEXT 1
-#define DIR_PREV_END 2
-#define DIR_NEXT_END 3
-
-#define STATUS_NULL 0
-#define STATUS_END_REACHED 1
-#define STATUS_BEGIN_REACHED 2
-
-static void fill_l1distlut(uint8_t lut[])
-{
-    int i, j, tmp_i, tmp_j,count;
-    uint8_t dist;
-
-    for (i = 0, count = 0; i < 242; i++) {
-        for (j = i + 1; j < 243; j++, count++) {
-            /* ternary distance between i and j */
-            dist = 0;
-            tmp_i = i; tmp_j = j;
-            do {
-                dist += FFABS((tmp_j % 3) - (tmp_i % 3));
-                tmp_j /= 3;
-                tmp_i /= 3;
-            } while (tmp_i > 0 || tmp_j > 0);
-            lut[count] = dist;
-        }
-    }
-}
-
-static unsigned int intersection_word(const uint8_t *first, const uint8_t *second)
-{
-    unsigned int val=0,i;
-    for (i = 0; i < 28; i += 4) {
-        val += av_popcount( (first[i]   & second[i]  ) << 24 |
-                            (first[i+1] & second[i+1]) << 16 |
-                            (first[i+2] & second[i+2]) << 8  |
-                            (first[i+3] & second[i+3]) );
-    }
-    val += av_popcount( (first[28] & second[28]) << 16 |
-                        (first[29] & second[29]) << 8  |
-                        (first[30] & second[30]) );
-    return val;
-}
-
-static unsigned int union_word(const uint8_t *first, const uint8_t *second)
-{
-    unsigned int val=0,i;
-    for (i = 0; i < 28; i += 4) {
-        val += av_popcount( (first[i]   | second[i]  ) << 24 |
-                            (first[i+1] | second[i+1]) << 16 |
-                            (first[i+2] | second[i+2]) << 8  |
-                            (first[i+3] | second[i+3]) );
-    }
-    val += av_popcount( (first[28] | second[28]) << 16 |
-                        (first[29] | second[29]) << 8  |
-                        (first[30] | second[30]) );
-    return val;
-}
-
-static unsigned int get_l1dist(AVFilterContext *ctx, SignatureContext *sc, const uint8_t *first, const uint8_t *second)
-{
-    unsigned int i;
-    unsigned int dist = 0;
-    uint8_t f, s;
-
-    for (i = 0; i < SIGELEM_SIZE/5; i++) {
-        if (first[i] != second[i]) {
-            f = first[i];
-            s = second[i];
-            if (f > s) {
-                /* little variation of gauss sum formula */
-                dist += sc->l1distlut[243*242/2 - (243-s)*(242-s)/2 + f - s - 1];
-            } else {
-                dist += sc->l1distlut[243*242/2 - (243-f)*(242-f)/2 + s - f - 1];
-            }
-        }
-    }
-    return dist;
-}
-
-/**
- * calculates the jaccard distance and evaluates a pair of coarse signatures as good
- * @return 0 if pair is bad, 1 otherwise
- */
-static int get_jaccarddist(SignatureContext *sc, CoarseSignature *first, CoarseSignature *second)
-{
-    int jaccarddist, i, composdist = 0, cwthcount = 0;
-    for (i = 0; i < 5; i++) {
-        if ((jaccarddist = intersection_word(first->data[i], second->data[i])) > 0) {
-            jaccarddist /= union_word(first->data[i], second->data[i]);
-        }
-        if (jaccarddist >= sc->thworddist) {
-            if (++cwthcount > 2) {
-                /* more than half (5/2) of distances are too wide */
-                return 0;
-            }
-        }
-        composdist += jaccarddist;
-        if (composdist > sc->thcomposdist) {
-            return 0;
-        }
-    }
-    return 1;
-}
-
-/**
- * step through the coarsesignatures as long as a good candidate is found
- * @return 0 if no candidate is found, 1 otherwise
- */
-static int find_next_coarsecandidate(SignatureContext *sc, CoarseSignature *secondstart, CoarseSignature **first, CoarseSignature **second, int start)
-{
-    /* go one coarsesignature foreword */
-    if (!start) {
-        if ((*second)->next) {
-            *second = (*second)->next;
-        } else if ((*first)->next) {
-            *second = secondstart;
-            *first = (*first)->next;
-        } else {
-            return 0;
-        }
-    }
-
-    while (1) {
-        if (get_jaccarddist(sc, *first, *second))
-            return 1;
-
-        /* next signature */
-        if ((*second)->next) {
-            *second = (*second)->next;
-        } else if ((*first)->next) {
-            *second = secondstart;
-            *first = (*first)->next;
-        } else {
-            return 0;
-        }
-    }
-}
-
-/**
- * compares framesignatures and sorts out signatures with a l1 distance above a given threshold.
- * Then tries to find out offset and differences between framerates with a hough transformation
- */
-static MatchingInfo* get_matching_parameters(AVFilterContext *ctx, SignatureContext *sc, FineSignature *first, FineSignature *second)
-{
-    FineSignature *f, *s;
-    size_t i, j, k, l, hmax = 0, score;
-    int framerate, offset, l1dist;
-    double m;
-    MatchingInfo *cands = NULL, *c = NULL;
-
-    struct {
-        uint8_t size;
-        unsigned int dist;
-        FineSignature *a;
-        uint8_t b_pos[COARSE_SIZE];
-        FineSignature *b[COARSE_SIZE];
-    } pairs[COARSE_SIZE];
-
-    typedef struct hspace_elem {
-        int dist;
-        size_t score;
-        FineSignature *a;
-        FineSignature *b;
-    } hspace_elem;
-
-    /* houghspace */
-    hspace_elem** hspace = av_malloc_array(MAX_FRAMERATE, sizeof(hspace_elem *));
-
-    /* initialize houghspace */
-    for (i = 0; i < MAX_FRAMERATE; i++) {
-        hspace[i] = av_malloc_array(2 * HOUGH_MAX_OFFSET + 1, sizeof(hspace_elem));
-        for (j = 0; j < HOUGH_MAX_OFFSET; j++) {
-            hspace[i][j].score = 0;
-            hspace[i][j].dist = 99999;
-        }
-    }
-
-    /* l1 distances */
-    for (i = 0, f = first; i < COARSE_SIZE && f->next; i++, f = f->next) {
-        pairs[i].size = 0;
-        pairs[i].dist = 99999;
-        pairs[i].a = f;
-        for (j = 0, s = second; j < COARSE_SIZE && s->next; j++, s = s->next) {
-            /* l1 distance of finesignature */
-            l1dist = get_l1dist(ctx, sc, f->framesig, s->framesig);
-            if (l1dist < sc->thl1) {
-                if (l1dist < pairs[i].dist) {
-                    pairs[i].size = 1;
-                    pairs[i].dist = l1dist;
-                    pairs[i].b_pos[0] = j;
-                    pairs[i].b[0] = s;
-                } else if (l1dist == pairs[i].dist) {
-                    pairs[i].b[pairs[i].size] = s;
-                    pairs[i].b_pos[pairs[i].size] = j;
-                    pairs[i].size++;
-                }
-            }
-        }
-    }
-    /* last incomplete coarsesignature */
-    if (f->next == NULL) {
-        for (; i < COARSE_SIZE; i++) {
-            pairs[i].size = 0;
-            pairs[i].dist = 99999;
-        }
-    }
-
-    /* hough transformation */
-    for (i = 0; i < COARSE_SIZE; i++) {
-        for (j = 0; j < pairs[i].size; j++) {
-            for (k = i + 1; k < COARSE_SIZE; k++) {
-                for (l = 0; l < pairs[k].size; l++) {
-                    if (pairs[i].b[j] != pairs[k].b[l]) {
-                        /* linear regression */
-                        m = (pairs[k].b_pos[l]-pairs[i].b_pos[j]) / (k-i); /* good value between 0.0 - 2.0 */
-                        framerate = (int) m*30 + 0.5; /* round up to 0 - 60 */
-                        if (framerate>0 && framerate <= MAX_FRAMERATE) {
-                            offset = pairs[i].b_pos[j] - ((int) m*i + 0.5); /* only second part has to be rounded up */
-                            if (offset > -HOUGH_MAX_OFFSET && offset < HOUGH_MAX_OFFSET) {
-                                if (pairs[i].dist < pairs[k].dist) {
-                                    if (pairs[i].dist < hspace[framerate-1][offset+HOUGH_MAX_OFFSET].dist) {
-                                        hspace[framerate-1][offset+HOUGH_MAX_OFFSET].dist = pairs[i].dist;
-                                        hspace[framerate-1][offset+HOUGH_MAX_OFFSET].a = pairs[i].a;
-                                        hspace[framerate-1][offset+HOUGH_MAX_OFFSET].b = pairs[i].b[j];
-                                    }
-                                } else {
-                                    if (pairs[k].dist < hspace[framerate-1][offset+HOUGH_MAX_OFFSET].dist) {
-                                        hspace[framerate-1][offset+HOUGH_MAX_OFFSET].dist = pairs[k].dist;
-                                        hspace[framerate-1][offset+HOUGH_MAX_OFFSET].a = pairs[k].a;
-                                        hspace[framerate-1][offset+HOUGH_MAX_OFFSET].b = pairs[k].b[l];
-                                    }
-                                }
-
-                                score = hspace[framerate-1][offset+HOUGH_MAX_OFFSET].score + 1;
-                                if (score > hmax )
-                                    hmax = score;
-                                hspace[framerate-1][offset+HOUGH_MAX_OFFSET].score = score;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    if (hmax > 0) {
-        hmax = (int) (0.7*hmax);
-        for (i = 0; i < MAX_FRAMERATE; i++) {
-            for (j = 0; j < HOUGH_MAX_OFFSET; j++) {
-                if (hmax < hspace[i][j].score) {
-                    if (c == NULL) {
-                        c = av_malloc(sizeof(MatchingInfo));
-                        if (!c)
-                            av_log(ctx, AV_LOG_FATAL, "Could not allocate memory");
-                        cands = c;
-                    } else {
-                        c->next = av_malloc(sizeof(MatchingInfo));
-                        if (!c->next)
-                            av_log(ctx, AV_LOG_FATAL, "Could not allocate memory");
-                        c = c->next;
-                    }
-                    c->framerateratio = (i+1.0) / 30;
-                    c->score = hspace[i][j].score;
-                    c->offset = j-90;
-                    c->first = hspace[i][j].a;
-                    c->second = hspace[i][j].b;
-                    c->next = NULL;
-
-                    /* not used */
-                    c->meandist = 0;
-                    c->matchframes = 0;
-                    c->whole = 0;
-                }
-            }
-        }
-    }
-    for (i = 0; i < MAX_FRAMERATE; i++) {
-        av_freep(&hspace[i]);
-    }
-    av_freep(&hspace);
-    return cands;
-}
-
-static int iterate_frame(double frr, FineSignature **a, FineSignature **b, int fcount, int *bcount, int dir)
-{
-    int step;
-
-    /* between 1 and 2, because frr is between 1 and 2 */
-    step = ((int) 0.5 + fcount     * frr) /* current frame */
-          -((int) 0.5 + (fcount-1) * frr);/* last frame */
-
-    if (dir == DIR_NEXT) {
-        if (frr >= 1.0) {
-            if ((*a)->next) {
-                *a = (*a)->next;
-            } else {
-                return DIR_NEXT_END;
-            }
-
-            if (step == 1) {
-                if ((*b)->next) {
-                    *b = (*b)->next;
-                    (*bcount)++;
-                } else {
-                    return DIR_NEXT_END;
-                }
-            } else {
-                if ((*b)->next && (*b)->next->next) {
-                    *b = (*b)->next->next;
-                    (*bcount)++;
-                } else {
-                    return DIR_NEXT_END;
-                }
-            }
-        } else {
-            if ((*b)->next) {
-                *b = (*b)->next;
-                (*bcount)++;
-            } else {
-                return DIR_NEXT_END;
-            }
-
-            if (step == 1) {
-                if ((*a)->next) {
-                    *a = (*a)->next;
-                } else {
-                    return DIR_NEXT_END;
-                }
-            } else {
-                if ((*a)->next && (*a)->next->next) {
-                    *a = (*a)->next->next;
-                } else {
-                    return DIR_NEXT_END;
-                }
-            }
-        }
-        return DIR_NEXT;
-    } else {
-        if (frr >= 1.0) {
-            if ((*a)->prev) {
-                *a = (*a)->prev;
-            } else {
-                return DIR_PREV_END;
-            }
-
-            if (step == 1) {
-                if ((*b)->prev) {
-                    *b = (*b)->prev;
-                    (*bcount)++;
-                } else {
-                    return DIR_PREV_END;
-                }
-            } else {
-                if ((*b)->prev && (*b)->prev->prev) {
-                    *b = (*b)->prev->prev;
-                    (*bcount)++;
-                } else {
-                    return DIR_PREV_END;
-                }
-            }
-        } else {
-            if ((*b)->prev) {
-                *b = (*b)->prev;
-                (*bcount)++;
-            } else {
-                return DIR_PREV_END;
-            }
-
-            if (step == 1) {
-                if ((*a)->prev) {
-                    *a = (*a)->prev;
-                } else {
-                    return DIR_PREV_END;
-                }
-            } else {
-                if ((*a)->prev && (*a)->prev->prev) {
-                    *a = (*a)->prev->prev;
-                } else {
-                    return DIR_PREV_END;
-                }
-            }
-        }
-        return DIR_PREV;
-    }
-}
-
-static MatchingInfo evaluate_parameters(AVFilterContext *ctx, SignatureContext *sc, MatchingInfo *infos, MatchingInfo bestmatch, int mode)
-{
-    int dist, distsum = 0, bcount = 1, dir = DIR_NEXT;
-    int fcount = 0, goodfcount = 0, gooda = 0, goodb = 0;
-    double meandist, minmeandist = bestmatch.meandist;
-    int tolerancecount = 0;
-    FineSignature *a, *b, *aprev, *bprev;
-    int status = STATUS_NULL;
-
-    for (; infos != NULL; infos = infos->next) {
-        a = infos->first;
-        b = infos->second;
-        while (1) {
-            dist = get_l1dist(ctx, sc, a->framesig, b->framesig);
-
-            if (dist > sc->thl1) {
-                if (a->confidence >= 1 || b->confidence >= 1) {
-                    /* bad frame (because high different information) */
-                    tolerancecount++;
-                }
-
-                if (tolerancecount > 2) {
-                    a = aprev;
-                    b = bprev;
-                    if (dir == DIR_NEXT) {
-                        /* turn around */
-                        a = infos->first;
-                        b = infos->second;
-                        dir = DIR_PREV;
-                    } else {
-                        break;
-                    }
-                }
-            } else {
-                /* good frame */
-                distsum += dist;
-                goodfcount++;
-                tolerancecount=0;
-
-                aprev = a;
-                bprev = b;
-
-                if (a->confidence < 1) gooda++;
-                if (b->confidence < 1) goodb++;
-            }
-
-            fcount++;
-
-            dir = iterate_frame(infos->framerateratio, &a, &b, fcount, &bcount, dir);
-            if (dir == DIR_NEXT_END) {
-                status = STATUS_END_REACHED;
-                a = infos->first;
-                b = infos->second;
-                dir = iterate_frame(infos->framerateratio, &a, &b, fcount, &bcount, DIR_PREV);
-            }
-
-            if (dir == DIR_PREV_END) {
-                status |= STATUS_BEGIN_REACHED;
-                break;
-            }
-
-            if (sc->thdi != 0 && bcount >= sc->thdi) {
-                break; /* enough frames found */
-            }
-        }
-
-        if (bcount < sc->thdi)
-            continue; /* matching sequence is too short */
-        if ((double) goodfcount / (double) fcount < sc->thit)
-            continue;
-        if ((double) goodfcount*0.5 < FFMAX(gooda, goodb))
-            continue;
-
-        meandist = (double) goodfcount / (double) distsum;
-
-        if (meandist < minmeandist ||
-                status == STATUS_END_REACHED | STATUS_BEGIN_REACHED ||
-                mode == MODE_FAST){
-            minmeandist = meandist;
-            /* bestcandidate in this iteration */
-            bestmatch.meandist = meandist;
-            bestmatch.matchframes = bcount;
-            bestmatch.framerateratio = infos->framerateratio;
-            bestmatch.score = infos->score;
-            bestmatch.offset = infos->offset;
-            bestmatch.first = infos->first;
-            bestmatch.second = infos->second;
-            bestmatch.whole = 0; /* will be set to true later */
-            bestmatch.next = NULL;
-        }
-
-        /* whole sequence is automatically best match */
-        if (status == (STATUS_END_REACHED | STATUS_BEGIN_REACHED)) {
-            bestmatch.whole = 1;
-            break;
-        }
-
-        /* first matching sequence is enough, finding the best one is not necessary */
-        if (mode == MODE_FAST) {
-            break;
-        }
-    }
-    return bestmatch;
-}
-
-static void sll_free(MatchingInfo *sll)
-{
-    void *tmp;
-    while (sll) {
-        tmp = sll;
-        sll = sll->next;
-        av_freep(&tmp);
-    }
-}
-
-static MatchingInfo lookup_signatures(AVFilterContext *ctx, SignatureContext *sc, StreamContext *first, StreamContext *second, int mode)
-{
-    CoarseSignature *cs, *cs2;
-    MatchingInfo *infos;
-    MatchingInfo bestmatch;
-    MatchingInfo *i;
-
-    cs = first->coarsesiglist;
-    cs2 = second->coarsesiglist;
-
-    /* score of bestmatch is 0, if no match is found */
-    bestmatch.score = 0;
-    bestmatch.meandist = 99999;
-    bestmatch.whole = 0;
-
-    fill_l1distlut(sc->l1distlut);
-
-    /* stage 1: coarsesignature matching */
-    if (find_next_coarsecandidate(sc, second->coarsesiglist, &cs, &cs2, 1) == 0)
-        return bestmatch; /* no candidate found */
-    do {
-        av_log(ctx, AV_LOG_DEBUG, "Stage 1: got coarsesignature pair. "
-               "indices of first frame: %"PRIu32" and %"PRIu32"\n",
-               cs->first->index, cs2->first->index);
-        /* stage 2: l1-distance and hough-transform */
-        av_log(ctx, AV_LOG_DEBUG, "Stage 2: calculate matching parameters\n");
-        infos = get_matching_parameters(ctx, sc, cs->first, cs2->first);
-        if (av_log_get_level() == AV_LOG_DEBUG) {
-            for (i = infos; i != NULL; i = i->next) {
-                av_log(ctx, AV_LOG_DEBUG, "Stage 2: matching pair at %"PRIu32" and %"PRIu32", "
-                       "ratio %f, offset %d\n", i->first->index, i->second->index,
-                       i->framerateratio, i->offset);
-            }
-        }
-        /* stage 3: evaluation */
-        av_log(ctx, AV_LOG_DEBUG, "Stage 3: evaluate\n");
-        if (infos) {
-            bestmatch = evaluate_parameters(ctx, sc, infos, bestmatch, mode);
-            av_log(ctx, AV_LOG_DEBUG, "Stage 3: best matching pair at %"PRIu32" and %"PRIu32", "
-                   "ratio %f, offset %d, score %d, %d frames matching\n",
-                   bestmatch.first->index, bestmatch.second->index,
-                   bestmatch.framerateratio, bestmatch.offset, bestmatch.score, bestmatch.matchframes);
-            sll_free(infos);
-        }
-    } while (find_next_coarsecandidate(sc, second->coarsesiglist, &cs, &cs2, 0) && !bestmatch.whole);
-    return bestmatch;
-
-}
diff --git a/libavfilter/tinterlace.h b/libavfilter/tinterlace.h
deleted file mode 100644
index 020887f..0000000
--- a/libavfilter/tinterlace.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) 2011 Stefano Sabatini
- * Copyright (c) 2010 Baptiste Coudurier
- * Copyright (c) 2003 Michael Zucchi <notzed@ximian.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
- * temporal field interlace filter, ported from MPlayer/libmpcodecs
- */
-#ifndef AVFILTER_TINTERLACE_H
-#define AVFILTER_TINTERLACE_H
-
-#include "libavutil/bswap.h"
-#include "libavutil/opt.h"
-#include "libavutil/pixdesc.h"
-#include "drawutils.h"
-#include "avfilter.h"
-
-#define TINTERLACE_FLAG_VLPF 01
-#define TINTERLACE_FLAG_CVLPF 2
-#define TINTERLACE_FLAG_EXACT_TB 4
-#define TINTERLACE_FLAG_BYPASS_IL 8
-
-enum VLPFilter {
-    VLPF_OFF = 0,
-    VLPF_LIN = 1,
-    VLPF_CMP = 2,
-};
-
-enum TInterlaceMode {
-    MODE_MERGE = 0,
-    MODE_DROP_EVEN,
-    MODE_DROP_ODD,
-    MODE_PAD,
-    MODE_INTERLEAVE_TOP,
-    MODE_INTERLEAVE_BOTTOM,
-    MODE_INTERLACEX2,
-    MODE_MERGEX2,
-    MODE_NB,
-};
-
-enum InterlaceScanMode {
-    MODE_TFF = 0,
-    MODE_BFF,
-};
-
-typedef struct TInterlaceContext {
-    const AVClass *class;
-    int mode;                   ///< TInterlaceMode, interlace mode selected
-    AVRational preout_time_base;
-    int flags;                  ///< flags affecting interlacing algorithm
-    int lowpass;                ///< legacy interlace filter lowpass mode
-    int frame;                  ///< number of the output frame
-    int vsub;                   ///< chroma vertical subsampling
-    AVFrame *cur;
-    AVFrame *next;
-    uint8_t *black_data[4];     ///< buffer used to fill padded lines
-    int black_linesize[4];
-    FFDrawContext draw;
-    FFDrawColor color;
-    const AVPixFmtDescriptor *csp;
-    void (*lowpass_line)(uint8_t *dstp, ptrdiff_t width, const uint8_t *srcp,
-                         ptrdiff_t mref, ptrdiff_t pref, int clip_max);
-} TInterlaceContext;
-
-void ff_tinterlace_init_x86(TInterlaceContext *interlace);
-
-#endif /* AVFILTER_TINTERLACE_H */
diff --git a/libavfilter/vf_blackframe.c b/libavfilter/vf_blackframe.c
deleted file mode 100644
index 804965c..0000000
--- a/libavfilter/vf_blackframe.c
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright (c) 2010 Stefano Sabatini
- * Copyright (c) 2006 Ivo van Poorten
- * Copyright (c) 2006 Julian Hall
- * Copyright (c) 2002-2003 Brian J. Murrell
- *
- * 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
- * Search for black frames to detect scene transitions.
- * Ported from MPlayer libmpcodecs/vf_blackframe.c.
- */
-
-#include <stdio.h>
-#include <inttypes.h>
-
-#include "libavutil/internal.h"
-#include "libavutil/opt.h"
-#include "avfilter.h"
-#include "formats.h"
-#include "internal.h"
-#include "video.h"
-
-typedef struct BlackFrameContext {
-    const AVClass *class;
-    int bamount;          ///< black amount
-    int bthresh;          ///< black threshold
-    unsigned int frame;   ///< frame number
-    unsigned int nblack;  ///< number of black pixels counted so far
-    unsigned int last_keyframe; ///< frame number of the last received key-frame
-} BlackFrameContext;
-
-static int query_formats(AVFilterContext *ctx)
-{
-    static const enum AVPixelFormat pix_fmts[] = {
-        AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV420P, AV_PIX_FMT_GRAY8, AV_PIX_FMT_NV12,
-        AV_PIX_FMT_NV21, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV411P,
-        AV_PIX_FMT_NONE
-    };
-
-    AVFilterFormats *fmts_list = ff_make_format_list(pix_fmts);
-    if (!fmts_list)
-        return AVERROR(ENOMEM);
-    return ff_set_common_formats(ctx, fmts_list);
-}
-
-#define SET_META(key, format, value) \
-    snprintf(buf, sizeof(buf), format, value);  \
-    av_dict_set(metadata, key, buf, 0)
-
-static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
-{
-    AVFilterContext *ctx = inlink->dst;
-    BlackFrameContext *s = ctx->priv;
-    int x, i;
-    int pblack = 0;
-    uint8_t *p = frame->data[0];
-    AVDictionary **metadata;
-    char buf[32];
-
-    for (i = 0; i < frame->height; i++) {
-        for (x = 0; x < inlink->w; x++)
-            s->nblack += p[x] < s->bthresh;
-        p += frame->linesize[0];
-    }
-
-    if (frame->key_frame)
-        s->last_keyframe = s->frame;
-
-    pblack = s->nblack * 100 / (inlink->w * inlink->h);
-    if (pblack >= s->bamount) {
-        metadata = &frame->metadata;
-
-        av_log(ctx, AV_LOG_INFO, "frame:%u pblack:%u pts:%"PRId64" t:%f "
-               "type:%c last_keyframe:%d\n",
-               s->frame, pblack, frame->pts,
-               frame->pts == AV_NOPTS_VALUE ? -1 : frame->pts * av_q2d(inlink->time_base),
-               av_get_picture_type_char(frame->pict_type), s->last_keyframe);
-
-        SET_META("lavfi.blackframe.pblack", "%u", pblack);
-    }
-
-    s->frame++;
-    s->nblack = 0;
-    return ff_filter_frame(inlink->dst->outputs[0], frame);
-}
-
-#define OFFSET(x) offsetof(BlackFrameContext, x)
-#define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
-static const AVOption blackframe_options[] = {
-    { "amount", "percentage of the pixels that have to be below the threshold "
-        "for the frame to be considered black",  OFFSET(bamount), AV_OPT_TYPE_INT, { .i64 = 98 }, 0, 100,     FLAGS },
-    { "threshold", "threshold below which a pixel value is considered black",
-                                                 OFFSET(bthresh), AV_OPT_TYPE_INT, { .i64 = 32 }, 0, 255,     FLAGS },
-    { "thresh", "threshold below which a pixel value is considered black",
-                                                 OFFSET(bthresh), AV_OPT_TYPE_INT, { .i64 = 32 }, 0, 255,     FLAGS },
-    { NULL }
-};
-
-AVFILTER_DEFINE_CLASS(blackframe);
-
-static const AVFilterPad avfilter_vf_blackframe_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .filter_frame = filter_frame,
-    },
-    { NULL }
-};
-
-static const AVFilterPad avfilter_vf_blackframe_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO
-    },
-    { NULL }
-};
-
-AVFilter ff_vf_blackframe = {
-    .name          = "blackframe",
-    .description   = NULL_IF_CONFIG_SMALL("Detect frames that are (almost) black."),
-    .priv_size     = sizeof(BlackFrameContext),
-    .priv_class    = &blackframe_class,
-    .query_formats = query_formats,
-    .inputs        = avfilter_vf_blackframe_inputs,
-    .outputs       = avfilter_vf_blackframe_outputs,
-};
diff --git a/libavfilter/vf_boxblur.c b/libavfilter/vf_boxblur.c
deleted file mode 100644
index bde7408..0000000
--- a/libavfilter/vf_boxblur.c
+++ /dev/null
@@ -1,317 +0,0 @@
-/*
- * Copyright (c) 2002 Michael Niedermayer <michaelni@gmx.at>
- * Copyright (c) 2011 Stefano Sabatini
- *
- * 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
- * Apply a boxblur filter to the input video.
- * Ported from MPlayer libmpcodecs/vf_boxblur.c.
- */
-
-#include "libavutil/avstring.h"
-#include "libavutil/common.h"
-#include "libavutil/opt.h"
-#include "avfilter.h"
-#include "formats.h"
-#include "internal.h"
-#include "video.h"
-#include "boxblur.h"
-
-
-typedef struct BoxBlurContext {
-    const AVClass *class;
-    FilterParam luma_param;
-    FilterParam chroma_param;
-    FilterParam alpha_param;
-
-    int hsub, vsub;
-    int radius[4];
-    int power[4];
-    uint8_t *temp[2]; ///< temporary buffer used in blur_power()
-} BoxBlurContext;
-
-static av_cold void uninit(AVFilterContext *ctx)
-{
-    BoxBlurContext *s = ctx->priv;
-
-    av_freep(&s->temp[0]);
-    av_freep(&s->temp[1]);
-}
-
-static int query_formats(AVFilterContext *ctx)
-{
-    AVFilterFormats *formats = NULL;
-    int fmt, ret;
-
-    for (fmt = 0; av_pix_fmt_desc_get(fmt); fmt++) {
-        const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(fmt);
-        if (!(desc->flags & (AV_PIX_FMT_FLAG_HWACCEL | AV_PIX_FMT_FLAG_BITSTREAM | AV_PIX_FMT_FLAG_PAL)) &&
-            (desc->flags & AV_PIX_FMT_FLAG_PLANAR || desc->nb_components == 1) &&
-            (!(desc->flags & AV_PIX_FMT_FLAG_BE) == !HAVE_BIGENDIAN || desc->comp[0].depth == 8) &&
-            (ret = ff_add_format(&formats, fmt)) < 0)
-            return ret;
-    }
-
-    return ff_set_common_formats(ctx, formats);
-}
-
-static int config_input(AVFilterLink *inlink)
-{
-    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(inlink->format);
-    AVFilterContext    *ctx = inlink->dst;
-    BoxBlurContext *s = ctx->priv;
-    int w = inlink->w, h = inlink->h;
-    int ret;
-
-    if (!(s->temp[0] = av_malloc(2*FFMAX(w, h))) ||
-        !(s->temp[1] = av_malloc(2*FFMAX(w, h))))
-        return AVERROR(ENOMEM);
-
-    s->hsub = desc->log2_chroma_w;
-    s->vsub = desc->log2_chroma_h;
-
-    ret = ff_boxblur_eval_filter_params(inlink,
-                                        &s->luma_param,
-                                        &s->chroma_param,
-                                        &s->alpha_param);
-
-    if (ret != 0) {
-        av_log(ctx, AV_LOG_ERROR, "Failed to evaluate "
-               "filter params: %d.\n", ret);
-        return ret;
-    }
-
-    s->radius[Y] = s->luma_param.radius;
-    s->radius[U] = s->radius[V] = s->chroma_param.radius;
-    s->radius[A] = s->alpha_param.radius;
-
-    s->power[Y] = s->luma_param.power;
-    s->power[U] = s->power[V] = s->chroma_param.power;
-    s->power[A] = s->alpha_param.power;
-
-    return 0;
-}
-
-/* Naive boxblur would sum source pixels from x-radius .. x+radius
- * for destination pixel x. That would be O(radius*width).
- * If you now look at what source pixels represent 2 consecutive
- * output pixels, then you see they are almost identical and only
- * differ by 2 pixels, like:
- * src0       111111111
- * dst0           1
- * src1        111111111
- * dst1            1
- * src0-src1  1       -1
- * so when you know one output pixel you can find the next by just adding
- * and subtracting 1 input pixel.
- * The following code adopts this faster variant.
- */
-#define BLUR(type, depth)                                                   \
-static inline void blur ## depth(type *dst, int dst_step, const type *src,  \
-                                 int src_step, int len, int radius)         \
-{                                                                           \
-    const int length = radius*2 + 1;                                        \
-    const int inv = ((1<<16) + length/2)/length;                            \
-    int x, sum = src[radius*src_step];                                      \
-                                                                            \
-    for (x = 0; x < radius; x++)                                            \
-        sum += src[x*src_step]<<1;                                          \
-                                                                            \
-    sum = sum*inv + (1<<15);                                                \
-                                                                            \
-    for (x = 0; x <= radius; x++) {                                         \
-        sum += (src[(radius+x)*src_step] - src[(radius-x)*src_step])*inv;   \
-        dst[x*dst_step] = sum>>16;                                          \
-    }                                                                       \
-                                                                            \
-    for (; x < len-radius; x++) {                                           \
-        sum += (src[(radius+x)*src_step] - src[(x-radius-1)*src_step])*inv; \
-        dst[x*dst_step] = sum >>16;                                         \
-    }                                                                       \
-                                                                            \
-    for (; x < len; x++) {                                                  \
-        sum += (src[(2*len-radius-x-1)*src_step] - src[(x-radius-1)*src_step])*inv; \
-        dst[x*dst_step] = sum>>16;                                          \
-    }                                                                       \
-}
-
-BLUR(uint8_t,   8)
-BLUR(uint16_t, 16)
-
-#undef BLUR
-
-static inline void blur(uint8_t *dst, int dst_step, const uint8_t *src, int src_step,
-                        int len, int radius, int pixsize)
-{
-    if (pixsize == 1) blur8 (dst, dst_step   , src, src_step   , len, radius);
-    else              blur16((uint16_t*)dst, dst_step>>1, (const uint16_t*)src, src_step>>1, len, radius);
-}
-
-static inline void blur_power(uint8_t *dst, int dst_step, const uint8_t *src, int src_step,
-                              int len, int radius, int power, uint8_t *temp[2], int pixsize)
-{
-    uint8_t *a = temp[0], *b = temp[1];
-
-    if (radius && power) {
-        blur(a, pixsize, src, src_step, len, radius, pixsize);
-        for (; power > 2; power--) {
-            uint8_t *c;
-            blur(b, pixsize, a, pixsize, len, radius, pixsize);
-            c = a; a = b; b = c;
-        }
-        if (power > 1) {
-            blur(dst, dst_step, a, pixsize, len, radius, pixsize);
-        } else {
-            int i;
-            if (pixsize == 1) {
-                for (i = 0; i < len; i++)
-                    dst[i*dst_step] = a[i];
-            } else
-                for (i = 0; i < len; i++)
-                    *(uint16_t*)(dst + i*dst_step) = ((uint16_t*)a)[i];
-        }
-    } else {
-        int i;
-        if (pixsize == 1) {
-            for (i = 0; i < len; i++)
-                dst[i*dst_step] = src[i*src_step];
-        } else
-            for (i = 0; i < len; i++)
-                *(uint16_t*)(dst + i*dst_step) = *(uint16_t*)(src + i*src_step);
-    }
-}
-
-static void hblur(uint8_t *dst, int dst_linesize, const uint8_t *src, int src_linesize,
-                  int w, int h, int radius, int power, uint8_t *temp[2], int pixsize)
-{
-    int y;
-
-    if (radius == 0 && dst == src)
-        return;
-
-    for (y = 0; y < h; y++)
-        blur_power(dst + y*dst_linesize, pixsize, src + y*src_linesize, pixsize,
-                   w, radius, power, temp, pixsize);
-}
-
-static void vblur(uint8_t *dst, int dst_linesize, const uint8_t *src, int src_linesize,
-                  int w, int h, int radius, int power, uint8_t *temp[2], int pixsize)
-{
-    int x;
-
-    if (radius == 0 && dst == src)
-        return;
-
-    for (x = 0; x < w; x++)
-        blur_power(dst + x*pixsize, dst_linesize, src + x*pixsize, src_linesize,
-                   h, radius, power, temp, pixsize);
-}
-
-static int filter_frame(AVFilterLink *inlink, AVFrame *in)
-{
-    AVFilterContext *ctx = inlink->dst;
-    BoxBlurContext *s = ctx->priv;
-    AVFilterLink *outlink = inlink->dst->outputs[0];
-    AVFrame *out;
-    int plane;
-    int cw = AV_CEIL_RSHIFT(inlink->w, s->hsub), ch = AV_CEIL_RSHIFT(in->height, s->vsub);
-    int w[4] = { inlink->w, cw, cw, inlink->w };
-    int h[4] = { in->height, ch, ch, in->height };
-    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(inlink->format);
-    const int depth = desc->comp[0].depth;
-    const int pixsize = (depth+7)/8;
-
-    out = ff_get_video_buffer(outlink, outlink->w, outlink->h);
-    if (!out) {
-        av_frame_free(&in);
-        return AVERROR(ENOMEM);
-    }
-    av_frame_copy_props(out, in);
-
-    for (plane = 0; plane < 4 && in->data[plane] && in->linesize[plane]; plane++)
-        hblur(out->data[plane], out->linesize[plane],
-              in ->data[plane], in ->linesize[plane],
-              w[plane], h[plane], s->radius[plane], s->power[plane],
-              s->temp, pixsize);
-
-    for (plane = 0; plane < 4 && in->data[plane] && in->linesize[plane]; plane++)
-        vblur(out->data[plane], out->linesize[plane],
-              out->data[plane], out->linesize[plane],
-              w[plane], h[plane], s->radius[plane], s->power[plane],
-              s->temp, pixsize);
-
-    av_frame_free(&in);
-
-    return ff_filter_frame(outlink, out);
-}
-
-#define OFFSET(x) offsetof(BoxBlurContext, x)
-#define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
-
-static const AVOption boxblur_options[] = {
-    { "luma_radius", "Radius of the luma blurring box", OFFSET(luma_param.radius_expr), AV_OPT_TYPE_STRING, {.str="2"}, .flags = FLAGS },
-    { "lr",          "Radius of the luma blurring box", OFFSET(luma_param.radius_expr), AV_OPT_TYPE_STRING, {.str="2"}, .flags = FLAGS },
-    { "luma_power",  "How many times should the boxblur be applied to luma",  OFFSET(luma_param.power), AV_OPT_TYPE_INT, {.i64=2}, 0, INT_MAX, .flags = FLAGS },
-    { "lp",          "How many times should the boxblur be applied to luma",  OFFSET(luma_param.power), AV_OPT_TYPE_INT, {.i64=2}, 0, INT_MAX, .flags = FLAGS },
-
-    { "chroma_radius", "Radius of the chroma blurring box", OFFSET(chroma_param.radius_expr), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
-    { "cr",            "Radius of the chroma blurring box", OFFSET(chroma_param.radius_expr), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
-    { "chroma_power",  "How many times should the boxblur be applied to chroma",  OFFSET(chroma_param.power), AV_OPT_TYPE_INT, {.i64=-1}, -1, INT_MAX, .flags = FLAGS },
-    { "cp",            "How many times should the boxblur be applied to chroma",  OFFSET(chroma_param.power), AV_OPT_TYPE_INT, {.i64=-1}, -1, INT_MAX, .flags = FLAGS },
-
-    { "alpha_radius", "Radius of the alpha blurring box", OFFSET(alpha_param.radius_expr), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
-    { "ar",           "Radius of the alpha blurring box", OFFSET(alpha_param.radius_expr), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = FLAGS },
-    { "alpha_power",  "How many times should the boxblur be applied to alpha",  OFFSET(alpha_param.power), AV_OPT_TYPE_INT, {.i64=-1}, -1, INT_MAX, .flags = FLAGS },
-    { "ap",           "How many times should the boxblur be applied to alpha",  OFFSET(alpha_param.power), AV_OPT_TYPE_INT, {.i64=-1}, -1, INT_MAX, .flags = FLAGS },
-
-    { NULL }
-};
-
-AVFILTER_DEFINE_CLASS(boxblur);
-
-static const AVFilterPad avfilter_vf_boxblur_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .config_props = config_input,
-        .filter_frame = filter_frame,
-    },
-    { NULL }
-};
-
-static const AVFilterPad avfilter_vf_boxblur_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-    { NULL }
-};
-
-AVFilter ff_vf_boxblur = {
-    .name          = "boxblur",
-    .description   = NULL_IF_CONFIG_SMALL("Blur the input."),
-    .priv_size     = sizeof(BoxBlurContext),
-    .priv_class    = &boxblur_class,
-    .uninit        = uninit,
-    .query_formats = query_formats,
-    .inputs        = avfilter_vf_boxblur_inputs,
-    .outputs       = avfilter_vf_boxblur_outputs,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
-};
diff --git a/libavfilter/vf_colormatrix.c b/libavfilter/vf_colormatrix.c
deleted file mode 100644
index 3a02e2b..0000000
--- a/libavfilter/vf_colormatrix.c
+++ /dev/null
@@ -1,520 +0,0 @@
-/*
- * ColorMatrix v2.2 for Avisynth 2.5.x
- *
- * Copyright (C) 2006-2007 Kevin Stone
- *
- * ColorMatrix 1.x is Copyright (C) Wilbert Dijkhof
- *
- * This program 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.
- *
- * This program is distributed in the hope that it will be useful, but
- * OUT 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 this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-/**
- * @file
- * ColorMatrix 2.0 is based on the original ColorMatrix filter by Wilbert
- * Dijkhof.  It adds the ability to convert between any of: Rec.709, FCC,
- * Rec.601, and SMPTE 240M. It also makes pre and post clipping optional,
- * adds an option to use scaled or non-scaled coefficients, and more...
- */
-
-#include <float.h>
-#include "avfilter.h"
-#include "formats.h"
-#include "internal.h"
-#include "video.h"
-#include "libavutil/opt.h"
-#include "libavutil/pixdesc.h"
-#include "libavutil/avstring.h"
-
-#define NS(n) ((n) < 0 ? (int)((n)*65536.0-0.5+DBL_EPSILON) : (int)((n)*65536.0+0.5))
-#define CB(n) av_clip_uint8(n)
-
-static const double yuv_coeff_luma[5][3] = {
-    { +0.7152, +0.0722, +0.2126 }, // Rec.709 (0)
-    { +0.5900, +0.1100, +0.3000 }, // FCC (1)
-    { +0.5870, +0.1140, +0.2990 }, // Rec.601 (ITU-R BT.470-2/SMPTE 170M) (2)
-    { +0.7010, +0.0870, +0.2120 }, // SMPTE 240M (3)
-    { +0.6780, +0.0593, +0.2627 }, // Rec.2020 (4)
-};
-
-enum ColorMode {
-    COLOR_MODE_NONE = -1,
-    COLOR_MODE_BT709,
-    COLOR_MODE_FCC,
-    COLOR_MODE_BT601,
-    COLOR_MODE_SMPTE240M,
-    COLOR_MODE_BT2020,
-    COLOR_MODE_COUNT
-};
-
-typedef struct ColorMatrixContext {
-    const AVClass *class;
-    int yuv_convert[25][3][3];
-    int interlaced;
-    int source, dest;        ///< ColorMode
-    int mode;
-    int hsub, vsub;
-} ColorMatrixContext;
-
-typedef struct ThreadData {
-    AVFrame *dst;
-    const AVFrame *src;
-    int c2;
-    int c3;
-    int c4;
-    int c5;
-    int c6;
-    int c7;
-} ThreadData;
-
-#define OFFSET(x) offsetof(ColorMatrixContext, x)
-#define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
-
-static const AVOption colormatrix_options[] = {
-    { "src", "set source color matrix",      OFFSET(source), AV_OPT_TYPE_INT, {.i64=COLOR_MODE_NONE}, COLOR_MODE_NONE, COLOR_MODE_COUNT-1, .flags=FLAGS, .unit="color_mode" },
-    { "dst", "set destination color matrix", OFFSET(dest),   AV_OPT_TYPE_INT, {.i64=COLOR_MODE_NONE}, COLOR_MODE_NONE, COLOR_MODE_COUNT-1, .flags=FLAGS, .unit="color_mode" },
-    { "bt709",     "set BT.709 colorspace",      0, AV_OPT_TYPE_CONST, {.i64=COLOR_MODE_BT709},       .flags=FLAGS, .unit="color_mode" },
-    { "fcc",       "set FCC colorspace   ",      0, AV_OPT_TYPE_CONST, {.i64=COLOR_MODE_FCC},         .flags=FLAGS, .unit="color_mode" },
-    { "bt601",     "set BT.601 colorspace",      0, AV_OPT_TYPE_CONST, {.i64=COLOR_MODE_BT601},       .flags=FLAGS, .unit="color_mode" },
-    { "bt470",     "set BT.470 colorspace",      0, AV_OPT_TYPE_CONST, {.i64=COLOR_MODE_BT601},       .flags=FLAGS, .unit="color_mode" },
-    { "bt470bg",   "set BT.470 colorspace",      0, AV_OPT_TYPE_CONST, {.i64=COLOR_MODE_BT601},       .flags=FLAGS, .unit="color_mode" },
-    { "smpte170m", "set SMTPE-170M colorspace",  0, AV_OPT_TYPE_CONST, {.i64=COLOR_MODE_BT601},       .flags=FLAGS, .unit="color_mode" },
-    { "smpte240m", "set SMPTE-240M colorspace",  0, AV_OPT_TYPE_CONST, {.i64=COLOR_MODE_SMPTE240M},   .flags=FLAGS, .unit="color_mode" },
-    { "bt2020",    "set BT.2020 colorspace",     0, AV_OPT_TYPE_CONST, {.i64=COLOR_MODE_BT2020},      .flags=FLAGS, .unit="color_mode" },
-    { NULL }
-};
-
-AVFILTER_DEFINE_CLASS(colormatrix);
-
-#define ma m[0][0]
-#define mb m[0][1]
-#define mc m[0][2]
-#define md m[1][0]
-#define me m[1][1]
-#define mf m[1][2]
-#define mg m[2][0]
-#define mh m[2][1]
-#define mi m[2][2]
-
-#define ima im[0][0]
-#define imb im[0][1]
-#define imc im[0][2]
-#define imd im[1][0]
-#define ime im[1][1]
-#define imf im[1][2]
-#define img im[2][0]
-#define imh im[2][1]
-#define imi im[2][2]
-
-static void inverse3x3(double im[3][3], double m[3][3])
-{
-    double det = ma * (me * mi - mf * mh) - mb * (md * mi - mf * mg) + mc * (md * mh - me * mg);
-    det = 1.0 / det;
-    ima = det * (me * mi - mf * mh);
-    imb = det * (mc * mh - mb * mi);
-    imc = det * (mb * mf - mc * me);
-    imd = det * (mf * mg - md * mi);
-    ime = det * (ma * mi - mc * mg);
-    imf = det * (mc * md - ma * mf);
-    img = det * (md * mh - me * mg);
-    imh = det * (mb * mg - ma * mh);
-    imi = det * (ma * me - mb * md);
-}
-
-static void solve_coefficients(double cm[3][3], double rgb[3][3], double yuv[3][3])
-{
-    int i, j;
-    for (i = 0; i < 3; i++)
-        for (j = 0; j < 3; j++)
-            cm[i][j] = yuv[i][0] * rgb[0][j] + yuv[i][1] * rgb[1][j] + yuv[i][2] * rgb[2][j];
-}
-
-static void calc_coefficients(AVFilterContext *ctx)
-{
-    ColorMatrixContext *color = ctx->priv;
-    double yuv_coeff[5][3][3];
-    double rgb_coeffd[5][3][3];
-    double yuv_convertd[25][3][3];
-    double bscale, rscale;
-    int v = 0;
-    int i, j, k;
-    for (i = 0; i < 5; i++) {
-        yuv_coeff[i][0][0] = yuv_coeff_luma[i][0];
-        yuv_coeff[i][0][1] = yuv_coeff_luma[i][1];
-        yuv_coeff[i][0][2] = yuv_coeff_luma[i][2];
-        bscale = 0.5 / (yuv_coeff[i][0][1] - 1.0);
-        rscale = 0.5 / (yuv_coeff[i][0][2] - 1.0);
-        yuv_coeff[i][1][0] = bscale * yuv_coeff[i][0][0];
-        yuv_coeff[i][1][1] = 0.5;
-        yuv_coeff[i][1][2] = bscale * yuv_coeff[i][0][2];
-        yuv_coeff[i][2][0] = rscale * yuv_coeff[i][0][0];
-        yuv_coeff[i][2][1] = rscale * yuv_coeff[i][0][1];
-        yuv_coeff[i][2][2] = 0.5;
-    }
-    for (i = 0; i < 5; i++)
-        inverse3x3(rgb_coeffd[i], yuv_coeff[i]);
-    for (i = 0; i < 5; i++) {
-        for (j = 0; j < 5; j++) {
-            solve_coefficients(yuv_convertd[v], rgb_coeffd[i], yuv_coeff[j]);
-            for (k = 0; k < 3; k++) {
-                color->yuv_convert[v][k][0] = NS(yuv_convertd[v][k][0]);
-                color->yuv_convert[v][k][1] = NS(yuv_convertd[v][k][1]);
-                color->yuv_convert[v][k][2] = NS(yuv_convertd[v][k][2]);
-            }
-            if (color->yuv_convert[v][0][0] != 65536 || color->yuv_convert[v][1][0] != 0 ||
-                color->yuv_convert[v][2][0] != 0) {
-                av_log(ctx, AV_LOG_ERROR, "error calculating conversion coefficients\n");
-            }
-            v++;
-        }
-    }
-}
-
-static const char * const color_modes[] = {"bt709", "fcc", "bt601", "smpte240m", "bt2020"};
-
-static av_cold int init(AVFilterContext *ctx)
-{
-    ColorMatrixContext *color = ctx->priv;
-
-    if (color->dest == COLOR_MODE_NONE) {
-        av_log(ctx, AV_LOG_ERROR, "Unspecified destination color space\n");
-        return AVERROR(EINVAL);
-    }
-
-    if (color->source == color->dest) {
-        av_log(ctx, AV_LOG_ERROR, "Source and destination color space must not be identical\n");
-        return AVERROR(EINVAL);
-    }
-
-    calc_coefficients(ctx);
-
-    return 0;
-}
-
-static int process_slice_uyvy422(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
-{
-    const ThreadData *td = arg;
-    const AVFrame *src = td->src;
-    AVFrame *dst = td->dst;
-    const int height = src->height;
-    const int width = src->width*2;
-    const int src_pitch = src->linesize[0];
-    const int dst_pitch = dst->linesize[0];
-    const int slice_start = (height *  jobnr   ) / nb_jobs;
-    const int slice_end   = (height * (jobnr+1)) / nb_jobs;
-    const unsigned char *srcp = src->data[0] + slice_start * src_pitch;
-    unsigned char *dstp = dst->data[0] + slice_start * dst_pitch;
-    const int c2 = td->c2;
-    const int c3 = td->c3;
-    const int c4 = td->c4;
-    const int c5 = td->c5;
-    const int c6 = td->c6;
-    const int c7 = td->c7;
-    int x, y;
-
-    for (y = slice_start; y < slice_end; y++) {
-        for (x = 0; x < width; x += 4) {
-            const int u = srcp[x + 0] - 128;
-            const int v = srcp[x + 2] - 128;
-            const int uvval = c2 * u + c3 * v + 1081344;
-            dstp[x + 0] = CB((c4 * u + c5 * v + 8421376) >> 16);
-            dstp[x + 1] = CB((65536 * (srcp[x + 1] - 16) + uvval) >> 16);
-            dstp[x + 2] = CB((c6 * u + c7 * v + 8421376) >> 16);
-            dstp[x + 3] = CB((65536 * (srcp[x + 3] - 16) + uvval) >> 16);
-        }
-        srcp += src_pitch;
-        dstp += dst_pitch;
-    }
-
-    return 0;
-}
-
-static int process_slice_yuv444p(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
-{
-    const ThreadData *td = arg;
-    const AVFrame *src = td->src;
-    AVFrame *dst = td->dst;
-    const int height = src->height;
-    const int width = src->width;
-    const int slice_start = (height *  jobnr   ) / nb_jobs;
-    const int slice_end   = (height * (jobnr+1)) / nb_jobs;
-    const int src_pitchY  = src->linesize[0];
-    const int src_pitchUV = src->linesize[1];
-    const unsigned char *srcpU = src->data[1] + slice_start * src_pitchUV;
-    const unsigned char *srcpV = src->data[2] + slice_start * src_pitchUV;
-    const unsigned char *srcpY = src->data[0] + slice_start * src_pitchY;
-    const int dst_pitchY  = dst->linesize[0];
-    const int dst_pitchUV = dst->linesize[1];
-    unsigned char *dstpU = dst->data[1] + slice_start * dst_pitchUV;
-    unsigned char *dstpV = dst->data[2] + slice_start * dst_pitchUV;
-    unsigned char *dstpY = dst->data[0] + slice_start * dst_pitchY;
-    const int c2 = td->c2;
-    const int c3 = td->c3;
-    const int c4 = td->c4;
-    const int c5 = td->c5;
-    const int c6 = td->c6;
-    const int c7 = td->c7;
-    int x, y;
-
-    for (y = slice_start; y < slice_end; y++) {
-        for (x = 0; x < width; x++) {
-            const int u = srcpU[x] - 128;
-            const int v = srcpV[x] - 128;
-            const int uvval = c2 * u + c3 * v + 1081344;
-            dstpY[x] = CB((65536 * (srcpY[x] - 16) + uvval) >> 16);
-            dstpU[x] = CB((c4 * u + c5 * v + 8421376) >> 16);
-            dstpV[x] = CB((c6 * u + c7 * v + 8421376) >> 16);
-        }
-        srcpY += src_pitchY;
-        dstpY += dst_pitchY;
-        srcpU += src_pitchUV;
-        srcpV += src_pitchUV;
-        dstpU += dst_pitchUV;
-        dstpV += dst_pitchUV;
-    }
-
-    return 0;
-}
-
-static int process_slice_yuv422p(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
-{
-    const ThreadData *td = arg;
-    const AVFrame *src = td->src;
-    AVFrame *dst = td->dst;
-    const int height = src->height;
-    const int width = src->width;
-    const int slice_start = (height *  jobnr   ) / nb_jobs;
-    const int slice_end   = (height * (jobnr+1)) / nb_jobs;
-    const int src_pitchY  = src->linesize[0];
-    const int src_pitchUV = src->linesize[1];
-    const unsigned char *srcpU = src->data[1] + slice_start * src_pitchUV;
-    const unsigned char *srcpV = src->data[2] + slice_start * src_pitchUV;
-    const unsigned char *srcpY = src->data[0] + slice_start * src_pitchY;
-    const int dst_pitchY  = dst->linesize[0];
-    const int dst_pitchUV = dst->linesize[1];
-    unsigned char *dstpU = dst->data[1] + slice_start * dst_pitchUV;
-    unsigned char *dstpV = dst->data[2] + slice_start * dst_pitchUV;
-    unsigned char *dstpY = dst->data[0] + slice_start * dst_pitchY;
-    const int c2 = td->c2;
-    const int c3 = td->c3;
-    const int c4 = td->c4;
-    const int c5 = td->c5;
-    const int c6 = td->c6;
-    const int c7 = td->c7;
-    int x, y;
-
-    for (y = slice_start; y < slice_end; y++) {
-        for (x = 0; x < width; x += 2) {
-            const int u = srcpU[x >> 1] - 128;
-            const int v = srcpV[x >> 1] - 128;
-            const int uvval = c2 * u + c3 * v + 1081344;
-            dstpY[x + 0] = CB((65536 * (srcpY[x + 0] - 16) + uvval) >> 16);
-            dstpY[x + 1] = CB((65536 * (srcpY[x + 1] - 16) + uvval) >> 16);
-            dstpU[x >> 1] = CB((c4 * u + c5 * v + 8421376) >> 16);
-            dstpV[x >> 1] = CB((c6 * u + c7 * v + 8421376) >> 16);
-        }
-        srcpY += src_pitchY;
-        dstpY += dst_pitchY;
-        srcpU += src_pitchUV;
-        srcpV += src_pitchUV;
-        dstpU += dst_pitchUV;
-        dstpV += dst_pitchUV;
-    }
-
-    return 0;
-}
-
-static int process_slice_yuv420p(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
-{
-    const ThreadData *td = arg;
-    const AVFrame *src = td->src;
-    AVFrame *dst = td->dst;
-    const int height = FFALIGN(src->height, 2) >> 1;
-    const int width = src->width;
-    const int slice_start = ((height *  jobnr   ) / nb_jobs) << 1;
-    const int slice_end   = ((height * (jobnr+1)) / nb_jobs) << 1;
-    const int src_pitchY  = src->linesize[0];
-    const int src_pitchUV = src->linesize[1];
-    const int dst_pitchY  = dst->linesize[0];
-    const int dst_pitchUV = dst->linesize[1];
-    const unsigned char *srcpY = src->data[0] + src_pitchY * slice_start;
-    const unsigned char *srcpU = src->data[1] + src_pitchUV * (slice_start >> 1);
-    const unsigned char *srcpV = src->data[2] + src_pitchUV * (slice_start >> 1);
-    const unsigned char *srcpN = src->data[0] + src_pitchY * (slice_start + 1);
-    unsigned char *dstpU = dst->data[1] + dst_pitchUV * (slice_start >> 1);
-    unsigned char *dstpV = dst->data[2] + dst_pitchUV * (slice_start >> 1);
-    unsigned char *dstpY = dst->data[0] + dst_pitchY * slice_start;
-    unsigned char *dstpN = dst->data[0] + dst_pitchY * (slice_start + 1);
-    const int c2 = td->c2;
-    const int c3 = td->c3;
-    const int c4 = td->c4;
-    const int c5 = td->c5;
-    const int c6 = td->c6;
-    const int c7 = td->c7;
-    int x, y;
-
-    for (y = slice_start; y < slice_end; y += 2) {
-        for (x = 0; x < width; x += 2) {
-            const int u = srcpU[x >> 1] - 128;
-            const int v = srcpV[x >> 1] - 128;
-            const int uvval = c2 * u + c3 * v + 1081344;
-            dstpY[x + 0] = CB((65536 * (srcpY[x + 0] - 16) + uvval) >> 16);
-            dstpY[x + 1] = CB((65536 * (srcpY[x + 1] - 16) + uvval) >> 16);
-            dstpN[x + 0] = CB((65536 * (srcpN[x + 0] - 16) + uvval) >> 16);
-            dstpN[x + 1] = CB((65536 * (srcpN[x + 1] - 16) + uvval) >> 16);
-            dstpU[x >> 1] = CB((c4 * u + c5 * v + 8421376) >> 16);
-            dstpV[x >> 1] = CB((c6 * u + c7 * v + 8421376) >> 16);
-        }
-        srcpY += src_pitchY << 1;
-        dstpY += dst_pitchY << 1;
-        srcpN += src_pitchY << 1;
-        dstpN += dst_pitchY << 1;
-        srcpU += src_pitchUV;
-        srcpV += src_pitchUV;
-        dstpU += dst_pitchUV;
-        dstpV += dst_pitchUV;
-    }
-
-    return 0;
-}
-
-static int config_input(AVFilterLink *inlink)
-{
-    AVFilterContext *ctx = inlink->dst;
-    ColorMatrixContext *color = ctx->priv;
-    const AVPixFmtDescriptor *pix_desc = av_pix_fmt_desc_get(inlink->format);
-
-    color->hsub = pix_desc->log2_chroma_w;
-    color->vsub = pix_desc->log2_chroma_h;
-
-    av_log(ctx, AV_LOG_VERBOSE, "%s -> %s\n",
-           color_modes[color->source], color_modes[color->dest]);
-
-    return 0;
-}
-
-static int query_formats(AVFilterContext *ctx)
-{
-    static const enum AVPixelFormat pix_fmts[] = {
-        AV_PIX_FMT_YUV444P,
-        AV_PIX_FMT_YUV422P,
-        AV_PIX_FMT_YUV420P,
-        AV_PIX_FMT_UYVY422,
-        AV_PIX_FMT_NONE
-    };
-    AVFilterFormats *fmts_list = ff_make_format_list(pix_fmts);
-    if (!fmts_list)
-        return AVERROR(ENOMEM);
-    return ff_set_common_formats(ctx, fmts_list);
-}
-
-static int filter_frame(AVFilterLink *link, AVFrame *in)
-{
-    AVFilterContext *ctx = link->dst;
-    ColorMatrixContext *color = ctx->priv;
-    AVFilterLink *outlink = ctx->outputs[0];
-    AVFrame *out;
-    ThreadData td = {0};
-
-    out = ff_get_video_buffer(outlink, outlink->w, outlink->h);
-    if (!out) {
-        av_frame_free(&in);
-        return AVERROR(ENOMEM);
-    }
-    av_frame_copy_props(out, in);
-
-    if (color->source == COLOR_MODE_NONE) {
-        enum AVColorSpace cs = in->colorspace;
-        enum ColorMode source;
-
-        switch(cs) {
-        case AVCOL_SPC_BT709     : source = COLOR_MODE_BT709     ; break;
-        case AVCOL_SPC_FCC       : source = COLOR_MODE_FCC       ; break;
-        case AVCOL_SPC_SMPTE240M : source = COLOR_MODE_SMPTE240M ; break;
-        case AVCOL_SPC_BT470BG   : source = COLOR_MODE_BT601     ; break;
-        case AVCOL_SPC_SMPTE170M : source = COLOR_MODE_BT601     ; break;
-        case AVCOL_SPC_BT2020_NCL: source = COLOR_MODE_BT2020    ; break;
-        case AVCOL_SPC_BT2020_CL : source = COLOR_MODE_BT2020    ; break;
-        default :
-            av_log(ctx, AV_LOG_ERROR, "Input frame does not specify a supported colorspace, and none has been specified as source either\n");
-            av_frame_free(&out);
-            return AVERROR(EINVAL);
-        }
-        color->mode = source * 5 + color->dest;
-    } else
-        color->mode = color->source * 5 + color->dest;
-
-    switch(color->dest) {
-    case COLOR_MODE_BT709    : out->colorspace = AVCOL_SPC_BT709     ; break;
-    case COLOR_MODE_FCC      : out->colorspace = AVCOL_SPC_FCC       ; break;
-    case COLOR_MODE_SMPTE240M: out->colorspace = AVCOL_SPC_SMPTE240M ; break;
-    case COLOR_MODE_BT601    : out->colorspace = AVCOL_SPC_BT470BG   ; break;
-    case COLOR_MODE_BT2020   : out->colorspace = AVCOL_SPC_BT2020_NCL; break;
-    }
-
-    td.src = in;
-    td.dst = out;
-    td.c2 = color->yuv_convert[color->mode][0][1];
-    td.c3 = color->yuv_convert[color->mode][0][2];
-    td.c4 = color->yuv_convert[color->mode][1][1];
-    td.c5 = color->yuv_convert[color->mode][1][2];
-    td.c6 = color->yuv_convert[color->mode][2][1];
-    td.c7 = color->yuv_convert[color->mode][2][2];
-
-    if (in->format == AV_PIX_FMT_YUV444P)
-        ctx->internal->execute(ctx, process_slice_yuv444p, &td, NULL,
-                               FFMIN(in->height, ff_filter_get_nb_threads(ctx)));
-    else if (in->format == AV_PIX_FMT_YUV422P)
-        ctx->internal->execute(ctx, process_slice_yuv422p, &td, NULL,
-                               FFMIN(in->height, ff_filter_get_nb_threads(ctx)));
-    else if (in->format == AV_PIX_FMT_YUV420P)
-        ctx->internal->execute(ctx, process_slice_yuv420p, &td, NULL,
-                               FFMIN(in->height / 2, ff_filter_get_nb_threads(ctx)));
-    else
-        ctx->internal->execute(ctx, process_slice_uyvy422, &td, NULL,
-                               FFMIN(in->height, ff_filter_get_nb_threads(ctx)));
-
-    av_frame_free(&in);
-    return ff_filter_frame(outlink, out);
-}
-
-static const AVFilterPad colormatrix_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .config_props = config_input,
-        .filter_frame = filter_frame,
-    },
-    { NULL }
-};
-
-static const AVFilterPad colormatrix_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-    { NULL }
-};
-
-AVFilter ff_vf_colormatrix = {
-    .name          = "colormatrix",
-    .description   = NULL_IF_CONFIG_SMALL("Convert color matrix."),
-    .priv_size     = sizeof(ColorMatrixContext),
-    .init          = init,
-    .query_formats = query_formats,
-    .inputs        = colormatrix_inputs,
-    .outputs       = colormatrix_outputs,
-    .priv_class    = &colormatrix_class,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
-};
diff --git a/libavfilter/vf_cover_rect.c b/libavfilter/vf_cover_rect.c
deleted file mode 100644
index 898debf..0000000
--- a/libavfilter/vf_cover_rect.c
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
- * Copyright (c) 2014-2015 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.
- */
-
-/**
- * @todo switch to dualinput
- */
-
-#include "libavutil/avassert.h"
-#include "libavutil/imgutils.h"
-#include "libavutil/opt.h"
-#include "internal.h"
-
-#include "lavfutils.h"
-
-enum mode {
-    MODE_COVER,
-    MODE_BLUR,
-    NB_MODES
-};
-
-typedef struct CoverContext {
-    AVClass *class;
-    int mode;
-    char *cover_filename;
-    AVFrame *cover_frame;
-    int width, height;
-} CoverContext;
-
-#define OFFSET(x) offsetof(CoverContext, x)
-#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
-static const AVOption cover_rect_options[] = {
-    { "cover",  "cover bitmap filename",  OFFSET(cover_filename),  AV_OPT_TYPE_STRING, {.str = NULL}, .flags = FLAGS },
-    { "mode", "set removal mode", OFFSET(mode), AV_OPT_TYPE_INT, {.i64 = MODE_BLUR}, 0, NB_MODES - 1, FLAGS, "mode" },
-        { "cover", "cover area with bitmap", 0, AV_OPT_TYPE_CONST, {.i64 = MODE_COVER}, INT_MIN, INT_MAX, FLAGS, "mode" },
-        { "blur", "blur area", 0, AV_OPT_TYPE_CONST, {.i64 = MODE_BLUR}, INT_MIN, INT_MAX, FLAGS, "mode" },
-    { NULL }
-};
-
-AVFILTER_DEFINE_CLASS(cover_rect);
-
-static int query_formats(AVFilterContext *ctx)
-{
-    static const enum AVPixelFormat pix_fmts[] = {
-        AV_PIX_FMT_YUV420P,
-        AV_PIX_FMT_YUVJ420P,
-        AV_PIX_FMT_NONE
-    };
-
-    return ff_set_common_formats(ctx, ff_make_format_list(pix_fmts));
-}
-
-static int config_input(AVFilterLink *inlink)
-{
-    return 0;
-}
-
-static void cover_rect(CoverContext *cover, AVFrame *in, int offx, int offy)
-{
-    int x, y, p;
-
-    for (p = 0; p < 3; p++) {
-        uint8_t *data = in->data[p] + (offx>>!!p) + (offy>>!!p) * in->linesize[p];
-        const uint8_t *src = cover->cover_frame->data[p];
-        int w = AV_CEIL_RSHIFT(cover->cover_frame->width , !!p);
-        int h = AV_CEIL_RSHIFT(cover->cover_frame->height, !!p);
-        for (y = 0; y < h; y++) {
-            for (x = 0; x < w; x++) {
-                data[x] = src[x];
-            }
-            data += in->linesize[p];
-            src += cover->cover_frame->linesize[p];
-        }
-    }
-}
-static void blur(CoverContext *cover, AVFrame *in, int offx, int offy)
-{
-    int x, y, p;
-
-    for (p=0; p<3; p++) {
-        int ox = offx>>!!p;
-        int oy = offy>>!!p;
-        int stride = in->linesize[p];
-        uint8_t *data = in->data[p] + ox + oy * stride;
-        int w = AV_CEIL_RSHIFT(cover->width , !!p);
-        int h = AV_CEIL_RSHIFT(cover->height, !!p);
-        int iw = AV_CEIL_RSHIFT(in->width , !!p);
-        int ih = AV_CEIL_RSHIFT(in->height, !!p);
-        for (y = 0; y < h; y++) {
-            for (x = 0; x < w; x++) {
-                int c = 0;
-                int s = 0;
-                if (ox) {
-                    int scale = 65536 / (x + 1);
-                    s += data[-1 + y*stride] * scale;
-                    c += scale;
-                }
-                if (oy) {
-                    int scale = 65536 / (y + 1);
-                    s += data[x - stride] * scale;
-                    c += scale;
-                }
-                if (ox + w < iw) {
-                    int scale = 65536 / (w - x);
-                    s += data[w + y*stride] * scale;
-                    c += scale;
-                }
-                if (oy + h < ih) {
-                    int scale = 65536 / (h - y);
-                    s += data[x + h*stride] * scale;
-                    c += scale;
-                }
-                data[x + y*stride] = c ? (s + (c>>1)) / c : 0;
-            }
-        }
-    }
-}
-
-static int filter_frame(AVFilterLink *inlink, AVFrame *in)
-{
-    AVFilterContext *ctx = inlink->dst;
-    CoverContext *cover = ctx->priv;
-    AVDictionaryEntry *ex, *ey, *ew, *eh;
-    int x = -1, y = -1, w = -1, h = -1;
-    char *xendptr = NULL, *yendptr = NULL, *wendptr = NULL, *hendptr = NULL;
-
-    ex = av_dict_get(in->metadata, "lavfi.rect.x", NULL, AV_DICT_MATCH_CASE);
-    ey = av_dict_get(in->metadata, "lavfi.rect.y", NULL, AV_DICT_MATCH_CASE);
-    ew = av_dict_get(in->metadata, "lavfi.rect.w", NULL, AV_DICT_MATCH_CASE);
-    eh = av_dict_get(in->metadata, "lavfi.rect.h", NULL, AV_DICT_MATCH_CASE);
-    if (ex && ey && ew && eh) {
-        x = strtol(ex->value, &xendptr, 10);
-        y = strtol(ey->value, &yendptr, 10);
-        w = strtol(ew->value, &wendptr, 10);
-        h = strtol(eh->value, &hendptr, 10);
-    }
-
-    if (!xendptr || *xendptr || !yendptr || *yendptr ||
-        !wendptr || *wendptr || !hendptr || *hendptr
-    ) {
-        return ff_filter_frame(ctx->outputs[0], in);
-    }
-
-    if (x < 0) {
-        w += x;
-        x = 0;
-    }
-    if (y < 0) {
-        h += y;
-        y = 0;
-    }
-    w = FFMIN(w, in->width  - x);
-    h = FFMIN(h, in->height - y);
-
-    if (w > in->width || h > in->height || w <= 0 || h <= 0)
-        return AVERROR(EINVAL);
-
-    if (cover->cover_frame) {
-        if (w != cover->cover_frame->width || h != cover->cover_frame->height)
-            return AVERROR(EINVAL);
-    }
-
-    cover->width  = w;
-    cover->height = h;
-
-    x = av_clip(x, 0, in->width  - w);
-    y = av_clip(y, 0, in->height - h);
-
-    av_frame_make_writable(in);
-
-    if (cover->mode == MODE_BLUR) {
-        blur (cover, in, x, y);
-    } else {
-        cover_rect(cover, in, x, y);
-    }
-    return ff_filter_frame(ctx->outputs[0], in);
-}
-
-static av_cold void uninit(AVFilterContext *ctx)
-{
-    CoverContext *cover = ctx->priv;
-
-    if (cover->cover_frame)
-        av_freep(&cover->cover_frame->data[0]);
-    av_frame_free(&cover->cover_frame);
-}
-
-static av_cold int init(AVFilterContext *ctx)
-{
-    CoverContext *cover = ctx->priv;
-    int ret;
-
-    if (cover->mode == MODE_COVER) {
-        if (!cover->cover_filename) {
-            av_log(ctx, AV_LOG_ERROR, "cover filename not set\n");
-            return AVERROR(EINVAL);
-        }
-
-        cover->cover_frame = av_frame_alloc();
-        if (!cover->cover_frame)
-            return AVERROR(ENOMEM);
-
-        if ((ret = ff_load_image(cover->cover_frame->data, cover->cover_frame->linesize,
-                                &cover->cover_frame->width, &cover->cover_frame->height,
-                                &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) {
-            av_log(ctx, AV_LOG_ERROR, "cover image is not a YUV420 image\n");
-            return AVERROR(EINVAL);
-        }
-    }
-
-    return 0;
-}
-
-static const AVFilterPad cover_rect_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .config_props = config_input,
-        .filter_frame = filter_frame,
-    },
-    { NULL }
-};
-
-static const AVFilterPad cover_rect_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-    { NULL }
-};
-
-AVFilter ff_vf_cover_rect = {
-    .name            = "cover_rect",
-    .description     = NULL_IF_CONFIG_SMALL("Find and cover a user specified object."),
-    .priv_size       = sizeof(CoverContext),
-    .init            = init,
-    .uninit          = uninit,
-    .query_formats   = query_formats,
-    .inputs          = cover_rect_inputs,
-    .outputs         = cover_rect_outputs,
-    .priv_class      = &cover_rect_class,
-};
diff --git a/libavfilter/vf_cropdetect.c b/libavfilter/vf_cropdetect.c
deleted file mode 100644
index 7c7d0b9..0000000
--- a/libavfilter/vf_cropdetect.c
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- * Copyright (c) 2002 A'rpi
- * 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
- * border detection filter
- * Ported from MPlayer libmpcodecs/vf_cropdetect.c.
- */
-
-#include "libavutil/imgutils.h"
-#include "libavutil/internal.h"
-#include "libavutil/opt.h"
-
-#include "avfilter.h"
-#include "formats.h"
-#include "internal.h"
-#include "video.h"
-
-typedef struct CropDetectContext {
-    const AVClass *class;
-    int x1, y1, x2, y2;
-    float limit;
-    int round;
-    int reset_count;
-    int frame_nb;
-    int max_pixsteps[4];
-    int max_outliers;
-} CropDetectContext;
-
-static int query_formats(AVFilterContext *ctx)
-{
-    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_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,
-        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_YUV420P14, AV_PIX_FMT_YUV422P14, AV_PIX_FMT_YUV444P14,
-        AV_PIX_FMT_YUV420P16, AV_PIX_FMT_YUV422P16, AV_PIX_FMT_YUV444P16,
-        AV_PIX_FMT_NV12,    AV_PIX_FMT_NV21,
-        AV_PIX_FMT_RGB24,   AV_PIX_FMT_BGR24,
-        AV_PIX_FMT_RGBA,    AV_PIX_FMT_BGRA,
-        AV_PIX_FMT_NONE
-    };
-
-    AVFilterFormats *fmts_list = ff_make_format_list(pix_fmts);
-    if (!fmts_list)
-        return AVERROR(ENOMEM);
-    return ff_set_common_formats(ctx, fmts_list);
-}
-
-static int checkline(void *ctx, const unsigned char *src, int stride, int len, int bpp)
-{
-    int total = 0;
-    int div = len;
-    const uint16_t *src16 = (const uint16_t *)src;
-
-    switch (bpp) {
-    case 1:
-        while (len >= 8) {
-            total += src[       0] + src[  stride] + src[2*stride] + src[3*stride]
-                  +  src[4*stride] + src[5*stride] + src[6*stride] + src[7*stride];
-            src += 8*stride;
-            len -= 8;
-        }
-        while (--len >= 0) {
-            total += src[0];
-            src += stride;
-        }
-        break;
-    case 2:
-        stride >>= 1;
-        while (len >= 8) {
-            total += src16[       0] + src16[  stride] + src16[2*stride] + src16[3*stride]
-                  +  src16[4*stride] + src16[5*stride] + src16[6*stride] + src16[7*stride];
-            src16 += 8*stride;
-            len -= 8;
-        }
-        while (--len >= 0) {
-            total += src16[0];
-            src16 += stride;
-        }
-        break;
-    case 3:
-    case 4:
-        while (len >= 4) {
-            total += src[0]        + src[1         ] + src[2         ]
-                  +  src[  stride] + src[1+  stride] + src[2+  stride]
-                  +  src[2*stride] + src[1+2*stride] + src[2+2*stride]
-                  +  src[3*stride] + src[1+3*stride] + src[2+3*stride];
-            src += 4*stride;
-            len -= 4;
-        }
-        while (--len >= 0) {
-            total += src[0] + src[1] + src[2];
-            src += stride;
-        }
-        div *= 3;
-        break;
-    }
-    total /= div;
-
-    av_log(ctx, AV_LOG_DEBUG, "total:%d\n", total);
-    return total;
-}
-
-static av_cold int init(AVFilterContext *ctx)
-{
-    CropDetectContext *s = ctx->priv;
-
-    s->frame_nb = -2;
-
-    av_log(ctx, AV_LOG_VERBOSE, "limit:%f round:%d reset_count:%d\n",
-           s->limit, s->round, s->reset_count);
-
-    return 0;
-}
-
-static int config_input(AVFilterLink *inlink)
-{
-    AVFilterContext *ctx = inlink->dst;
-    CropDetectContext *s = ctx->priv;
-    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(inlink->format);
-
-    av_image_fill_max_pixsteps(s->max_pixsteps, NULL, desc);
-
-    if (s->limit < 1.0)
-        s->limit *= (1 << desc->comp[0].depth) - 1;
-
-    s->x1 = inlink->w - 1;
-    s->y1 = inlink->h - 1;
-    s->x2 = 0;
-    s->y2 = 0;
-
-    return 0;
-}
-
-#define SET_META(key, value) \
-    av_dict_set_int(metadata, key, value, 0)
-
-static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
-{
-    AVFilterContext *ctx = inlink->dst;
-    CropDetectContext *s = ctx->priv;
-    int bpp = s->max_pixsteps[0];
-    int w, h, x, y, shrink_by;
-    AVDictionary **metadata;
-    int outliers, last_y;
-    int limit = lrint(s->limit);
-
-    // ignore first 2 frames - they may be empty
-    if (++s->frame_nb > 0) {
-        metadata = &frame->metadata;
-
-        // Reset the crop area every reset_count frames, if reset_count is > 0
-        if (s->reset_count > 0 && s->frame_nb > s->reset_count) {
-            s->x1 = frame->width  - 1;
-            s->y1 = frame->height - 1;
-            s->x2 = 0;
-            s->y2 = 0;
-            s->frame_nb = 1;
-        }
-
-#define FIND(DST, FROM, NOEND, INC, STEP0, STEP1, LEN) \
-        outliers = 0;\
-        for (last_y = y = FROM; NOEND; y = y INC) {\
-            if (checkline(ctx, frame->data[0] + STEP0 * y, STEP1, LEN, bpp) > limit) {\
-                if (++outliers > s->max_outliers) { \
-                    DST = last_y;\
-                    break;\
-                }\
-            } else\
-                last_y = y INC;\
-        }
-
-        FIND(s->y1,                 0,               y < s->y1, +1, frame->linesize[0], bpp, frame->width);
-        FIND(s->y2, frame->height - 1, y > FFMAX(s->y2, s->y1), -1, frame->linesize[0], bpp, frame->width);
-        FIND(s->x1,                 0,               y < s->x1, +1, bpp, frame->linesize[0], frame->height);
-        FIND(s->x2,  frame->width - 1, y > FFMAX(s->x2, s->x1), -1, bpp, frame->linesize[0], frame->height);
-
-
-        // round x and y (up), important for yuv colorspaces
-        // make sure they stay rounded!
-        x = (s->x1+1) & ~1;
-        y = (s->y1+1) & ~1;
-
-        w = s->x2 - x + 1;
-        h = s->y2 - y + 1;
-
-        // w and h must be divisible by 2 as well because of yuv
-        // colorspace problems.
-        if (s->round <= 1)
-            s->round = 16;
-        if (s->round % 2)
-            s->round *= 2;
-
-        shrink_by = w % s->round;
-        w -= shrink_by;
-        x += (shrink_by/2 + 1) & ~1;
-
-        shrink_by = h % s->round;
-        h -= shrink_by;
-        y += (shrink_by/2 + 1) & ~1;
-
-        SET_META("lavfi.cropdetect.x1", s->x1);
-        SET_META("lavfi.cropdetect.x2", s->x2);
-        SET_META("lavfi.cropdetect.y1", s->y1);
-        SET_META("lavfi.cropdetect.y2", s->y2);
-        SET_META("lavfi.cropdetect.w",  w);
-        SET_META("lavfi.cropdetect.h",  h);
-        SET_META("lavfi.cropdetect.x",  x);
-        SET_META("lavfi.cropdetect.y",  y);
-
-        av_log(ctx, AV_LOG_INFO,
-               "x1:%d x2:%d y1:%d y2:%d w:%d h:%d x:%d y:%d pts:%"PRId64" t:%f crop=%d:%d:%d:%d\n",
-               s->x1, s->x2, s->y1, s->y2, w, h, x, y, frame->pts,
-               frame->pts == AV_NOPTS_VALUE ? -1 : frame->pts * av_q2d(inlink->time_base),
-               w, h, x, y);
-    }
-
-    return ff_filter_frame(inlink->dst->outputs[0], frame);
-}
-
-#define OFFSET(x) offsetof(CropDetectContext, x)
-#define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
-
-static const AVOption cropdetect_options[] = {
-    { "limit", "Threshold below which the pixel is considered black", OFFSET(limit),       AV_OPT_TYPE_FLOAT, { .dbl = 24.0/255 }, 0, 65535, FLAGS },
-    { "round", "Value by which the width/height should be divisible", OFFSET(round),       AV_OPT_TYPE_INT, { .i64 = 16 }, 0, INT_MAX, FLAGS },
-    { "reset", "Recalculate the crop area after this many frames",    OFFSET(reset_count), AV_OPT_TYPE_INT, { .i64 = 0 },  0, INT_MAX, FLAGS },
-    { "reset_count", "Recalculate the crop area after this many frames",OFFSET(reset_count),AV_OPT_TYPE_INT,{ .i64 = 0 },  0, INT_MAX, FLAGS },
-    { "max_outliers", "Threshold count of outliers",                  OFFSET(max_outliers),AV_OPT_TYPE_INT, { .i64 = 0 },  0, INT_MAX, FLAGS },
-    { NULL }
-};
-
-AVFILTER_DEFINE_CLASS(cropdetect);
-
-static const AVFilterPad avfilter_vf_cropdetect_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .config_props = config_input,
-        .filter_frame = filter_frame,
-    },
-    { NULL }
-};
-
-static const AVFilterPad avfilter_vf_cropdetect_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO
-    },
-    { NULL }
-};
-
-AVFilter ff_vf_cropdetect = {
-    .name          = "cropdetect",
-    .description   = NULL_IF_CONFIG_SMALL("Auto-detect crop size."),
-    .priv_size     = sizeof(CropDetectContext),
-    .priv_class    = &cropdetect_class,
-    .init          = init,
-    .query_formats = query_formats,
-    .inputs        = avfilter_vf_cropdetect_inputs,
-    .outputs       = avfilter_vf_cropdetect_outputs,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
-};
diff --git a/libavfilter/vf_delogo.c b/libavfilter/vf_delogo.c
deleted file mode 100644
index e55673d..0000000
--- a/libavfilter/vf_delogo.c
+++ /dev/null
@@ -1,413 +0,0 @@
-/*
- * Copyright (c) 2002 Jindrich Makovicka <makovick@gmail.com>
- * Copyright (c) 2011 Stefano Sabatini
- * Copyright (c) 2013, 2015 Jean Delvare <jdelvare@suse.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
- * A very simple tv station logo remover
- * Originally imported from MPlayer libmpcodecs/vf_delogo.c,
- * the algorithm was later improved.
- */
-
-#include "libavutil/common.h"
-#include "libavutil/imgutils.h"
-#include "libavutil/opt.h"
-#include "libavutil/pixdesc.h"
-#include "libavutil/eval.h"
-#include "avfilter.h"
-#include "formats.h"
-#include "internal.h"
-#include "video.h"
-static const char * const var_names[] = {
-    "x",
-    "y",
-    "w",
-    "h",
-    "n",            ///< number of frame
-    "t",            ///< timestamp expressed in seconds
-    NULL
-};
-
-enum var_name {
-    VAR_X,
-    VAR_Y,
-    VAR_W,
-    VAR_H,
-    VAR_N,
-    VAR_T,
-    VAR_VARS_NB
-};
-#define TS2T(ts, tb) ((ts) == AV_NOPTS_VALUE ? NAN : (double)(ts) * av_q2d(tb))
-
-static int set_expr(AVExpr **pexpr, const char *expr, const char *option, void *log_ctx)
-{
-    int ret;
-    AVExpr *old = NULL;
-
-    if (*pexpr)
-        old = *pexpr;
-    ret = av_expr_parse(pexpr, expr, var_names, NULL, NULL, NULL, NULL, 0, log_ctx);
-    if (ret < 0) {
-        av_log(log_ctx, AV_LOG_ERROR,
-               "Error when parsing the expression '%s' for %s\n",
-               expr, option);
-        *pexpr = old;
-        return ret;
-    }
-
-    av_expr_free(old);
-    return 0;
-}
-
-
-/**
- * Apply a simple delogo algorithm to the image in src and put the
- * result in dst.
- *
- * The algorithm is only applied to the region specified by the logo
- * parameters.
- *
- * @param w      width of the input image
- * @param h      height of the input image
- * @param logo_x x coordinate of the top left corner of the logo region
- * @param logo_y y coordinate of the top left corner of the logo region
- * @param logo_w width of the logo
- * @param logo_h height of the logo
- * @param band   the size of the band around the processed area
- * @param show   show a rectangle around the processed area, useful for
- *               parameters tweaking
- * @param direct if non-zero perform in-place processing
- */
-static void apply_delogo(uint8_t *dst, int dst_linesize,
-                         uint8_t *src, int src_linesize,
-                         int w, int h, AVRational sar,
-                         int logo_x, int logo_y, int logo_w, int logo_h,
-                         unsigned int band, int show, int direct)
-{
-    int x, y;
-    uint64_t interp, weightl, weightr, weightt, weightb, weight;
-    uint8_t *xdst, *xsrc;
-
-    uint8_t *topleft, *botleft, *topright;
-    unsigned int left_sample, right_sample;
-    int xclipl, xclipr, yclipt, yclipb;
-    int logo_x1, logo_x2, logo_y1, logo_y2;
-
-    xclipl = FFMAX(-logo_x, 0);
-    xclipr = FFMAX(logo_x+logo_w-w, 0);
-    yclipt = FFMAX(-logo_y, 0);
-    yclipb = FFMAX(logo_y+logo_h-h, 0);
-
-    logo_x1 = logo_x + xclipl;
-    logo_x2 = logo_x + logo_w - xclipr - 1;
-    logo_y1 = logo_y + yclipt;
-    logo_y2 = logo_y + logo_h - yclipb - 1;
-
-    topleft  = src+logo_y1 * src_linesize+logo_x1;
-    topright = src+logo_y1 * src_linesize+logo_x2;
-    botleft  = src+logo_y2 * src_linesize+logo_x1;
-
-    if (!direct)
-        av_image_copy_plane(dst, dst_linesize, src, src_linesize, w, h);
-
-    dst += (logo_y1 + 1) * dst_linesize;
-    src += (logo_y1 + 1) * src_linesize;
-
-    for (y = logo_y1+1; y < logo_y2; y++) {
-        left_sample = topleft[src_linesize*(y-logo_y1)]   +
-                      topleft[src_linesize*(y-logo_y1-1)] +
-                      topleft[src_linesize*(y-logo_y1+1)];
-        right_sample = topright[src_linesize*(y-logo_y1)]   +
-                       topright[src_linesize*(y-logo_y1-1)] +
-                       topright[src_linesize*(y-logo_y1+1)];
-
-        for (x = logo_x1+1,
-             xdst = dst+logo_x1+1,
-             xsrc = src+logo_x1+1; x < logo_x2; x++, xdst++, xsrc++) {
-
-            if (show && (y == logo_y1+1 || y == logo_y2-1 ||
-                         x == logo_x1+1 || x == logo_x2-1)) {
-                *xdst = 0;
-                continue;
-            }
-
-            /* Weighted interpolation based on relative distances, taking SAR into account */
-            weightl = (uint64_t)              (logo_x2-x) * (y-logo_y1) * (logo_y2-y) * sar.den;
-            weightr = (uint64_t)(x-logo_x1)               * (y-logo_y1) * (logo_y2-y) * sar.den;
-            weightt = (uint64_t)(x-logo_x1) * (logo_x2-x)               * (logo_y2-y) * sar.num;
-            weightb = (uint64_t)(x-logo_x1) * (logo_x2-x) * (y-logo_y1)               * sar.num;
-
-            interp =
-                left_sample * weightl
-                +
-                right_sample * weightr
-                +
-                (topleft[x-logo_x1]    +
-                 topleft[x-logo_x1-1]  +
-                 topleft[x-logo_x1+1]) * weightt
-                +
-                (botleft[x-logo_x1]    +
-                 botleft[x-logo_x1-1]  +
-                 botleft[x-logo_x1+1]) * weightb;
-            weight = (weightl + weightr + weightt + weightb) * 3U;
-            interp = (interp + (weight >> 1)) / weight;
-
-            if (y >= logo_y+band && y < logo_y+logo_h-band &&
-                x >= logo_x+band && x < logo_x+logo_w-band) {
-                *xdst = interp;
-            } else {
-                unsigned dist = 0;
-
-                if      (x < logo_x+band)
-                    dist = FFMAX(dist, logo_x-x+band);
-                else if (x >= logo_x+logo_w-band)
-                    dist = FFMAX(dist, x-(logo_x+logo_w-1-band));
-
-                if      (y < logo_y+band)
-                    dist = FFMAX(dist, logo_y-y+band);
-                else if (y >= logo_y+logo_h-band)
-                    dist = FFMAX(dist, y-(logo_y+logo_h-1-band));
-
-                *xdst = (*xsrc*dist + interp*(band-dist))/band;
-            }
-        }
-
-        dst += dst_linesize;
-        src += src_linesize;
-    }
-}
-
-typedef struct DelogoContext {
-    const AVClass *class;
-    int x, y, w, h, band, show;
-    char *x_expr, *y_expr, *w_expr, *h_expr;
-    AVExpr *x_pexpr, *y_pexpr, *w_pexpr, *h_pexpr;
-    double var_values[VAR_VARS_NB];
-}  DelogoContext;
-
-#define OFFSET(x) offsetof(DelogoContext, x)
-#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
-
-static const AVOption delogo_options[]= {
-    { "x",    "set logo x position",       OFFSET(x_expr),    AV_OPT_TYPE_STRING, { .str = "-1" }, 0, 0, FLAGS },
-    { "y",    "set logo y position",       OFFSET(y_expr),    AV_OPT_TYPE_STRING, { .str = "-1" }, 0, 0, FLAGS },
-    { "w",    "set logo width",            OFFSET(w_expr),    AV_OPT_TYPE_STRING, { .str = "-1" }, 0, 0, FLAGS },
-    { "h",    "set logo height",           OFFSET(h_expr),    AV_OPT_TYPE_STRING, { .str = "-1" }, 0, 0, FLAGS },
-    { "show", "show delogo area",          OFFSET(show),      AV_OPT_TYPE_BOOL,   { .i64 =  0 },   0, 1, FLAGS },
-    { NULL }
-};
-
-AVFILTER_DEFINE_CLASS(delogo);
-static av_cold void uninit(AVFilterContext *ctx)
-{
-    DelogoContext *s = ctx->priv;
-
-    av_expr_free(s->x_pexpr);    s->x_pexpr = NULL;
-    av_expr_free(s->y_pexpr);    s->y_pexpr = NULL;
-    av_expr_free(s->w_pexpr);    s->w_pexpr = NULL;
-    av_expr_free(s->h_pexpr);    s->h_pexpr = NULL;
-}
-
-
-static int query_formats(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_YUV440P,
-        AV_PIX_FMT_YUVA420P, AV_PIX_FMT_GRAY8,
-        AV_PIX_FMT_NONE
-    };
-    AVFilterFormats *fmts_list = ff_make_format_list(pix_fmts);
-    if (!fmts_list)
-        return AVERROR(ENOMEM);
-    return ff_set_common_formats(ctx, fmts_list);
-}
-
-static av_cold int init(AVFilterContext *ctx)
-{
-    DelogoContext *s = ctx->priv;
-    int ret = 0;
-
-    if ((ret = set_expr(&s->x_pexpr, s->x_expr, "x", ctx)) < 0 ||
-        (ret = set_expr(&s->y_pexpr, s->y_expr, "y", ctx)) < 0 ||
-        (ret = set_expr(&s->w_pexpr, s->w_expr, "w", ctx)) < 0 ||
-        (ret = set_expr(&s->h_pexpr, s->h_expr, "h", ctx)) < 0 )
-        return ret;
-
-    s->x = av_expr_eval(s->x_pexpr, s->var_values, s);
-    s->y = av_expr_eval(s->y_pexpr, s->var_values, s);
-    s->w = av_expr_eval(s->w_pexpr, s->var_values, s);
-    s->h = av_expr_eval(s->h_pexpr, s->var_values, s);
-
-#define CHECK_UNSET_OPT(opt)                                            \
-    if (s->opt == -1) {                                            \
-        av_log(s, AV_LOG_ERROR, "Option %s was not set.\n", #opt); \
-        return AVERROR(EINVAL);                                         \
-    }
-    CHECK_UNSET_OPT(x);
-    CHECK_UNSET_OPT(y);
-    CHECK_UNSET_OPT(w);
-    CHECK_UNSET_OPT(h);
-
-    s->band = 1;
-
-    av_log(ctx, AV_LOG_VERBOSE, "x:%d y:%d, w:%d h:%d band:%d show:%d\n",
-           s->x, s->y, s->w, s->h, s->band, s->show);
-
-    s->w += s->band*2;
-    s->h += s->band*2;
-    s->x -= s->band;
-    s->y -= s->band;
-
-    return 0;
-}
-
-static int config_input(AVFilterLink *inlink)
-{
-    DelogoContext *s = inlink->dst->priv;
-
-    /* Check whether the logo area fits in the frame */
-    if (s->x + (s->band - 1) < 0 || s->x + s->w - (s->band*2 - 2) > inlink->w ||
-        s->y + (s->band - 1) < 0 || s->y + s->h - (s->band*2 - 2) > inlink->h) {
-        av_log(s, AV_LOG_ERROR, "Logo area is outside of the frame.\n");
-        return AVERROR(EINVAL);
-    }
-
-    return 0;
-}
-
-static int filter_frame(AVFilterLink *inlink, AVFrame *in)
-{
-    DelogoContext *s = inlink->dst->priv;
-    AVFilterLink *outlink = inlink->dst->outputs[0];
-    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(inlink->format);
-    AVFrame *out;
-    int hsub0 = desc->log2_chroma_w;
-    int vsub0 = desc->log2_chroma_h;
-    int direct = 0;
-    int plane;
-    AVRational sar;
-    int ret;
-
-    s->var_values[VAR_N] = inlink->frame_count_out;
-    s->var_values[VAR_T] = TS2T(in->pts, inlink->time_base);
-    s->x = av_expr_eval(s->x_pexpr, s->var_values, s);
-    s->y = av_expr_eval(s->y_pexpr, s->var_values, s);
-    s->w = av_expr_eval(s->w_pexpr, s->var_values, s);
-    s->h = av_expr_eval(s->h_pexpr, s->var_values, s);
-
-    if (s->x + (s->band - 1) <= 0 || s->x + s->w - (s->band*2 - 2) > inlink->w ||
-        s->y + (s->band - 1) <= 0 || s->y + s->h - (s->band*2 - 2) > inlink->h) {
-        av_log(s, AV_LOG_WARNING, "Logo area is outside of the frame,"
-               " auto set the area inside of the frame\n");
-    }
-
-    if (s->x + (s->band - 1) <= 0)
-        s->x = 1 + s->band;
-    if (s->y + (s->band - 1) <= 0)
-        s->y = 1 + s->band;
-    if (s->x + s->w - (s->band*2 - 2) > inlink->w)
-        s->w = inlink->w - s->x - (s->band*2 - 2);
-    if (s->y + s->h - (s->band*2 - 2) > inlink->h)
-        s->h = inlink->h - s->y - (s->band*2 - 2);
-
-    ret = config_input(inlink);
-    if (ret < 0) {
-        av_frame_free(&in);
-        return ret;
-    }
-
-    s->w += s->band*2;
-    s->h += s->band*2;
-    s->x -= s->band;
-    s->y -= s->band;
-
-    if (av_frame_is_writable(in)) {
-        direct = 1;
-        out = in;
-    } else {
-        out = ff_get_video_buffer(outlink, outlink->w, outlink->h);
-        if (!out) {
-            av_frame_free(&in);
-            return AVERROR(ENOMEM);
-        }
-
-        av_frame_copy_props(out, in);
-    }
-
-    sar = in->sample_aspect_ratio;
-    /* Assume square pixels if SAR is unknown */
-    if (!sar.num)
-        sar.num = sar.den = 1;
-
-    for (plane = 0; plane < desc->nb_components; plane++) {
-        int hsub = plane == 1 || plane == 2 ? hsub0 : 0;
-        int vsub = plane == 1 || plane == 2 ? vsub0 : 0;
-
-        apply_delogo(out->data[plane], out->linesize[plane],
-                     in ->data[plane], in ->linesize[plane],
-                     AV_CEIL_RSHIFT(inlink->w, hsub),
-                     AV_CEIL_RSHIFT(inlink->h, vsub),
-                     sar, s->x>>hsub, s->y>>vsub,
-                     /* Up and left borders were rounded down, inject lost bits
-                      * into width and height to avoid error accumulation */
-                     AV_CEIL_RSHIFT(s->w + (s->x & ((1<<hsub)-1)), hsub),
-                     AV_CEIL_RSHIFT(s->h + (s->y & ((1<<vsub)-1)), vsub),
-                     s->band>>FFMIN(hsub, vsub),
-                     s->show, direct);
-    }
-
-    if (!direct)
-        av_frame_free(&in);
-
-    return ff_filter_frame(outlink, out);
-}
-
-static const AVFilterPad avfilter_vf_delogo_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .filter_frame = filter_frame,
-        .config_props = config_input,
-    },
-    { NULL }
-};
-
-static const AVFilterPad avfilter_vf_delogo_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-    { NULL }
-};
-
-AVFilter ff_vf_delogo = {
-    .name          = "delogo",
-    .description   = NULL_IF_CONFIG_SMALL("Remove logo from input video."),
-    .priv_size     = sizeof(DelogoContext),
-    .priv_class    = &delogo_class,
-    .init          = init,
-    .uninit        = uninit,
-    .query_formats = query_formats,
-    .inputs        = avfilter_vf_delogo_inputs,
-    .outputs       = avfilter_vf_delogo_outputs,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
-};
diff --git a/libavfilter/vf_eq.c b/libavfilter/vf_eq.c
deleted file mode 100644
index c8c3d5b..0000000
--- a/libavfilter/vf_eq.c
+++ /dev/null
@@ -1,394 +0,0 @@
-/*
- * Original MPlayer filters by Richard Felker, Hampa Hug, Daniel Moreno,
- * and Michael Niedermeyer.
- *
- * Copyright (c) 2014 James Darnley <james.darnley@gmail.com>
- * Copyright (c) 2015 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
- * very simple video equalizer
- */
-
-#include "libavfilter/internal.h"
-#include "libavutil/common.h"
-#include "libavutil/imgutils.h"
-#include "libavutil/opt.h"
-#include "libavutil/pixdesc.h"
-#include "vf_eq.h"
-
-static void create_lut(EQParameters *param)
-{
-    int i;
-    double   g  = 1.0 / param->gamma;
-    double   lw = 1.0 - param->gamma_weight;
-
-    for (i = 0; i < 256; i++) {
-        double v = i / 255.0;
-        v = param->contrast * (v - 0.5) + 0.5 + param->brightness;
-
-        if (v <= 0.0) {
-            param->lut[i] = 0;
-        } else {
-            v = v * lw + pow(v, g) * param->gamma_weight;
-
-            if (v >= 1.0)
-                param->lut[i] = 255;
-            else
-                param->lut[i] = 256.0 * v;
-        }
-    }
-
-    param->lut_clean = 1;
-}
-
-static void apply_lut(EQParameters *param, uint8_t *dst, int dst_stride,
-                      const uint8_t *src, int src_stride, int w, int h)
-{
-    int x, y;
-
-    if (!param->lut_clean)
-        create_lut(param);
-
-    for (y = 0; y < h; y++) {
-        for (x = 0; x < w; x++) {
-            dst[y * dst_stride + x] = param->lut[src[y * src_stride + x]];
-        }
-    }
-}
-
-static void process_c(EQParameters *param, uint8_t *dst, int dst_stride,
-                      const uint8_t *src, int src_stride, int w, int h)
-{
-    int x, y, pel;
-
-    int contrast = (int) (param->contrast * 256 * 16);
-    int brightness = ((int) (100.0 * param->brightness + 100.0) * 511) / 200 - 128 - contrast / 32;
-
-    for (y = 0; y < h; y++) {
-        for (x = 0; x < w; x++) {
-            pel = ((src[y * src_stride + x] * contrast) >> 12) + brightness;
-
-            if (pel & ~255)
-                pel = (-pel) >> 31;
-
-            dst[y * dst_stride + x] = pel;
-        }
-    }
-}
-
-static void check_values(EQParameters *param, EQContext *eq)
-{
-    if (param->contrast == 1.0 && param->brightness == 0.0 && param->gamma == 1.0)
-        param->adjust = NULL;
-    else if (param->gamma == 1.0 && fabs(param->contrast) < 7.9)
-        param->adjust = eq->process;
-    else
-        param->adjust = apply_lut;
-}
-
-static void set_contrast(EQContext *eq)
-{
-    eq->contrast = av_clipf(av_expr_eval(eq->contrast_pexpr, eq->var_values, eq), -1000.0, 1000.0);
-    eq->param[0].contrast = eq->contrast;
-    eq->param[0].lut_clean = 0;
-    check_values(&eq->param[0], eq);
-}
-
-static void set_brightness(EQContext *eq)
-{
-    eq->brightness = av_clipf(av_expr_eval(eq->brightness_pexpr, eq->var_values, eq), -1.0, 1.0);
-    eq->param[0].brightness = eq->brightness;
-    eq->param[0].lut_clean = 0;
-    check_values(&eq->param[0], eq);
-}
-
-static void set_gamma(EQContext *eq)
-{
-    int i;
-
-    eq->gamma        = av_clipf(av_expr_eval(eq->gamma_pexpr,        eq->var_values, eq), 0.1, 10.0);
-    eq->gamma_r      = av_clipf(av_expr_eval(eq->gamma_r_pexpr,      eq->var_values, eq), 0.1, 10.0);
-    eq->gamma_g      = av_clipf(av_expr_eval(eq->gamma_g_pexpr,      eq->var_values, eq), 0.1, 10.0);
-    eq->gamma_b      = av_clipf(av_expr_eval(eq->gamma_b_pexpr,      eq->var_values, eq), 0.1, 10.0);
-    eq->gamma_weight = av_clipf(av_expr_eval(eq->gamma_weight_pexpr, eq->var_values, eq), 0.0,  1.0);
-
-    eq->param[0].gamma = eq->gamma * eq->gamma_g;
-    eq->param[1].gamma = sqrt(eq->gamma_b / eq->gamma_g);
-    eq->param[2].gamma = sqrt(eq->gamma_r / eq->gamma_g);
-
-    for (i = 0; i < 3; i++) {
-        eq->param[i].gamma_weight = eq->gamma_weight;
-        eq->param[i].lut_clean = 0;
-        check_values(&eq->param[i], eq);
-    }
-}
-
-static void set_saturation(EQContext *eq)
-{
-    int i;
-
-    eq->saturation = av_clipf(av_expr_eval(eq->saturation_pexpr, eq->var_values, eq), 0.0, 3.0);
-
-    for (i = 1; i < 3; i++) {
-        eq->param[i].contrast = eq->saturation;
-        eq->param[i].lut_clean = 0;
-        check_values(&eq->param[i], eq);
-    }
-}
-
-static int set_expr(AVExpr **pexpr, const char *expr, const char *option, void *log_ctx)
-{
-    int ret;
-    AVExpr *old = NULL;
-
-    if (*pexpr)
-        old = *pexpr;
-    ret = av_expr_parse(pexpr, expr, var_names, NULL, NULL, NULL, NULL, 0, log_ctx);
-    if (ret < 0) {
-        av_log(log_ctx, AV_LOG_ERROR,
-               "Error when parsing the expression '%s' for %s\n",
-               expr, option);
-        *pexpr = old;
-        return ret;
-    }
-
-    av_expr_free(old);
-    return 0;
-}
-
-void ff_eq_init(EQContext *eq)
-{
-    eq->process = process_c;
-    if (ARCH_X86)
-        ff_eq_init_x86(eq);
-}
-
-static int initialize(AVFilterContext *ctx)
-{
-    EQContext *eq = ctx->priv;
-    int ret;
-    ff_eq_init(eq);
-
-    if ((ret = set_expr(&eq->contrast_pexpr,     eq->contrast_expr,     "contrast",     ctx)) < 0 ||
-        (ret = set_expr(&eq->brightness_pexpr,   eq->brightness_expr,   "brightness",   ctx)) < 0 ||
-        (ret = set_expr(&eq->saturation_pexpr,   eq->saturation_expr,   "saturation",   ctx)) < 0 ||
-        (ret = set_expr(&eq->gamma_pexpr,        eq->gamma_expr,        "gamma",        ctx)) < 0 ||
-        (ret = set_expr(&eq->gamma_r_pexpr,      eq->gamma_r_expr,      "gamma_r",      ctx)) < 0 ||
-        (ret = set_expr(&eq->gamma_g_pexpr,      eq->gamma_g_expr,      "gamma_g",      ctx)) < 0 ||
-        (ret = set_expr(&eq->gamma_b_pexpr,      eq->gamma_b_expr,      "gamma_b",      ctx)) < 0 ||
-        (ret = set_expr(&eq->gamma_weight_pexpr, eq->gamma_weight_expr, "gamma_weight", ctx)) < 0 )
-        return ret;
-
-    if (eq->eval_mode == EVAL_MODE_INIT) {
-        set_gamma(eq);
-        set_contrast(eq);
-        set_brightness(eq);
-        set_saturation(eq);
-    }
-
-    return 0;
-}
-
-static av_cold void uninit(AVFilterContext *ctx)
-{
-    EQContext *eq = ctx->priv;
-
-    av_expr_free(eq->contrast_pexpr);     eq->contrast_pexpr     = NULL;
-    av_expr_free(eq->brightness_pexpr);   eq->brightness_pexpr   = NULL;
-    av_expr_free(eq->saturation_pexpr);   eq->saturation_pexpr   = NULL;
-    av_expr_free(eq->gamma_pexpr);        eq->gamma_pexpr        = NULL;
-    av_expr_free(eq->gamma_weight_pexpr); eq->gamma_weight_pexpr = NULL;
-    av_expr_free(eq->gamma_r_pexpr);      eq->gamma_r_pexpr      = NULL;
-    av_expr_free(eq->gamma_g_pexpr);      eq->gamma_g_pexpr      = NULL;
-    av_expr_free(eq->gamma_b_pexpr);      eq->gamma_b_pexpr      = NULL;
-}
-
-static int config_props(AVFilterLink *inlink)
-{
-    EQContext *eq = inlink->dst->priv;
-
-    eq->var_values[VAR_N] = 0;
-    eq->var_values[VAR_R] = inlink->frame_rate.num == 0 || inlink->frame_rate.den == 0 ?
-        NAN : av_q2d(inlink->frame_rate);
-
-    return 0;
-}
-
-static int query_formats(AVFilterContext *ctx)
-{
-    static const enum AVPixelFormat pixel_fmts_eq[] = {
-        AV_PIX_FMT_GRAY8,
-        AV_PIX_FMT_YUV410P,
-        AV_PIX_FMT_YUV411P,
-        AV_PIX_FMT_YUV420P,
-        AV_PIX_FMT_YUV422P,
-        AV_PIX_FMT_YUV444P,
-        AV_PIX_FMT_NONE
-    };
-    AVFilterFormats *fmts_list = ff_make_format_list(pixel_fmts_eq);
-    if (!fmts_list)
-        return AVERROR(ENOMEM);
-    return ff_set_common_formats(ctx, fmts_list);
-}
-
-#define TS2T(ts, tb) ((ts) == AV_NOPTS_VALUE ? NAN : (double)(ts) * av_q2d(tb))
-
-static int filter_frame(AVFilterLink *inlink, AVFrame *in)
-{
-    AVFilterContext *ctx = inlink->dst;
-    AVFilterLink *outlink = inlink->dst->outputs[0];
-    EQContext *eq = ctx->priv;
-    AVFrame *out;
-    int64_t pos = in->pkt_pos;
-    const AVPixFmtDescriptor *desc;
-    int i;
-
-    out = ff_get_video_buffer(outlink, inlink->w, inlink->h);
-    if (!out) {
-        av_frame_free(&in);
-        return AVERROR(ENOMEM);
-    }
-
-    av_frame_copy_props(out, in);
-    desc = av_pix_fmt_desc_get(inlink->format);
-
-    eq->var_values[VAR_N]   = inlink->frame_count_out;
-    eq->var_values[VAR_POS] = pos == -1 ? NAN : pos;
-    eq->var_values[VAR_T]   = TS2T(in->pts, inlink->time_base);
-
-    if (eq->eval_mode == EVAL_MODE_FRAME) {
-        set_gamma(eq);
-        set_contrast(eq);
-        set_brightness(eq);
-        set_saturation(eq);
-    }
-
-    for (i = 0; i < desc->nb_components; i++) {
-        int w = inlink->w;
-        int h = inlink->h;
-
-        if (i == 1 || i == 2) {
-            w = AV_CEIL_RSHIFT(w, desc->log2_chroma_w);
-            h = AV_CEIL_RSHIFT(h, desc->log2_chroma_h);
-        }
-
-        if (eq->param[i].adjust)
-            eq->param[i].adjust(&eq->param[i], out->data[i], out->linesize[i],
-                                 in->data[i], in->linesize[i], w, h);
-        else
-            av_image_copy_plane(out->data[i], out->linesize[i],
-                                in->data[i], in->linesize[i], w, h);
-    }
-
-    av_frame_free(&in);
-    return ff_filter_frame(outlink, out);
-}
-
-static inline int set_param(AVExpr **pexpr, const char *args, const char *cmd,
-                            void (*set_fn)(EQContext *eq), AVFilterContext *ctx)
-{
-    EQContext *eq = ctx->priv;
-    int ret;
-    if ((ret = set_expr(pexpr, args, cmd, ctx)) < 0)
-        return ret;
-    if (eq->eval_mode == EVAL_MODE_INIT)
-        set_fn(eq);
-    return 0;
-}
-
-static int process_command(AVFilterContext *ctx, const char *cmd, const char *args,
-                           char *res, int res_len, int flags)
-{
-    EQContext *eq = ctx->priv;
-
-#define SET_PARAM(param_name, set_fn_name)                              \
-    if (!strcmp(cmd, #param_name)) return set_param(&eq->param_name##_pexpr, args, cmd, set_##set_fn_name, ctx);
-
-         SET_PARAM(contrast, contrast)
-    else SET_PARAM(brightness, brightness)
-    else SET_PARAM(saturation, saturation)
-    else SET_PARAM(gamma, gamma)
-    else SET_PARAM(gamma_r, gamma)
-    else SET_PARAM(gamma_g, gamma)
-    else SET_PARAM(gamma_b, gamma)
-    else SET_PARAM(gamma_weight, gamma)
-    else return AVERROR(ENOSYS);
-}
-
-static const AVFilterPad eq_inputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-        .filter_frame = filter_frame,
-        .config_props = config_props,
-    },
-    { NULL }
-};
-
-static const AVFilterPad eq_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-    { NULL }
-};
-
-#define OFFSET(x) offsetof(EQContext, x)
-#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
-#define TFLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_RUNTIME_PARAM
-static const AVOption eq_options[] = {
-    { "contrast",     "set the contrast adjustment, negative values give a negative image",
-        OFFSET(contrast_expr),     AV_OPT_TYPE_STRING, {.str = "1.0"}, 0, 0, TFLAGS },
-    { "brightness",   "set the brightness adjustment",
-        OFFSET(brightness_expr),   AV_OPT_TYPE_STRING, {.str = "0.0"}, 0, 0, TFLAGS },
-    { "saturation",   "set the saturation adjustment",
-        OFFSET(saturation_expr),   AV_OPT_TYPE_STRING, {.str = "1.0"}, 0, 0, TFLAGS },
-    { "gamma",        "set the initial gamma value",
-        OFFSET(gamma_expr),        AV_OPT_TYPE_STRING, {.str = "1.0"}, 0, 0, TFLAGS },
-    { "gamma_r",      "gamma value for red",
-        OFFSET(gamma_r_expr),      AV_OPT_TYPE_STRING, {.str = "1.0"}, 0, 0, TFLAGS },
-    { "gamma_g",      "gamma value for green",
-        OFFSET(gamma_g_expr),      AV_OPT_TYPE_STRING, {.str = "1.0"}, 0, 0, TFLAGS },
-    { "gamma_b",      "gamma value for blue",
-        OFFSET(gamma_b_expr),      AV_OPT_TYPE_STRING, {.str = "1.0"}, 0, 0, TFLAGS },
-    { "gamma_weight", "set the gamma weight which reduces the effect of gamma on bright areas",
-        OFFSET(gamma_weight_expr), AV_OPT_TYPE_STRING, {.str = "1.0"}, 0, 0, TFLAGS },
-    { "eval", "specify when to evaluate expressions", OFFSET(eval_mode), AV_OPT_TYPE_INT, {.i64 = EVAL_MODE_INIT}, 0, EVAL_MODE_NB-1, FLAGS, "eval" },
-         { "init",  "eval expressions once during initialization", 0, AV_OPT_TYPE_CONST, {.i64=EVAL_MODE_INIT},  .flags = FLAGS, .unit = "eval" },
-         { "frame", "eval expressions per-frame",                  0, AV_OPT_TYPE_CONST, {.i64=EVAL_MODE_FRAME}, .flags = FLAGS, .unit = "eval" },
-    { NULL }
-};
-
-AVFILTER_DEFINE_CLASS(eq);
-
-AVFilter ff_vf_eq = {
-    .name            = "eq",
-    .description     = NULL_IF_CONFIG_SMALL("Adjust brightness, contrast, gamma, and saturation."),
-    .priv_size       = sizeof(EQContext),
-    .priv_class      = &eq_class,
-    .inputs          = eq_inputs,
-    .outputs         = eq_outputs,
-    .process_command = process_command,
-    .query_formats   = query_formats,
-    .init            = initialize,
-    .uninit          = uninit,
-    .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
-};
diff --git a/libavfilter/vf_eq.h b/libavfilter/vf_eq.h
deleted file mode 100644
index cd0cd75..0000000
--- a/libavfilter/vf_eq.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Original MPlayer filters by Richard Felker, Hampa Hug, Daniel Moreno,
- * and Michael Niedermeyer.
- *
- * Copyright (c) 2014 James Darnley <james.darnley@gmail.com>
- * Copyright (c) 2015 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.
- */
-
-#ifndef AVFILTER_EQ_H
-#define AVFILTER_EQ_H
-
-#include "avfilter.h"
-#include "libavutil/eval.h"
-
-static const char *const var_names[] = {
-    "n",   // frame count
-    "pos", // frame position
-    "r",   // frame rate
-    "t",   // timestamp expressed in seconds
-    NULL
-};
-
-enum var_name {
-    VAR_N,
-    VAR_POS,
-    VAR_R,
-    VAR_T,
-    VAR_NB
-};
-
-typedef struct EQParameters {
-    void (*adjust)(struct EQParameters *eq, uint8_t *dst, int dst_stride,
-                   const uint8_t *src, int src_stride, int w, int h);
-
-    uint8_t lut[256];
-
-    double brightness, contrast, gamma, gamma_weight;
-    int lut_clean;
-
-} EQParameters;
-
-typedef struct EQContext {
-    const AVClass *class;
-
-    EQParameters param[3];
-
-    char   *contrast_expr;
-    AVExpr *contrast_pexpr;
-    double  contrast;
-
-    char   *brightness_expr;
-    AVExpr *brightness_pexpr;
-    double  brightness;
-
-    char   *saturation_expr;
-    AVExpr *saturation_pexpr;
-    double  saturation;
-
-    char   *gamma_expr;
-    AVExpr *gamma_pexpr;
-    double  gamma;
-
-    char   *gamma_weight_expr;
-    AVExpr *gamma_weight_pexpr;
-    double  gamma_weight;
-
-    char   *gamma_r_expr;
-    AVExpr *gamma_r_pexpr;
-    double  gamma_r;
-
-    char   *gamma_g_expr;
-    AVExpr *gamma_g_pexpr;
-    double  gamma_g;
-
-    char   *gamma_b_expr;
-    AVExpr *gamma_b_pexpr;
-    double  gamma_b;
-
-    double var_values[VAR_NB];
-
-    void (*process)(struct EQParameters *par, uint8_t *dst, int dst_stride,
-                    const uint8_t *src, int src_stride, int w, int h);
-
-    enum EvalMode { EVAL_MODE_INIT, EVAL_MODE_FRAME, EVAL_MODE_NB } eval_mode;
-} EQContext;
-
-void ff_eq_init(EQContext *eq);
-void ff_eq_init_x86(EQContext *eq);
-
-#endif /* AVFILTER_EQ_H */
diff --git a/libavfilter/vf_find_rect.c b/libavfilter/vf_find_rect.c
deleted file mode 100644
index 706e59c..0000000
--- a/libavfilter/vf_find_rect.c
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
- * Copyright (c) 2014-2015 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.
- */
-
-/**
- * @todo switch to dualinput
- */
-
-#include "libavutil/imgutils.h"
-#include "libavutil/opt.h"
-#include "internal.h"
-
-#include "lavfutils.h"
-
-#define MAX_MIPMAPS 5
-
-typedef struct FOCContext {
-    AVClass *class;
-    float threshold;
-    int mipmaps;
-    int xmin, ymin, xmax, ymax;
-    char *obj_filename;
-    int last_x, last_y;
-    AVFrame *obj_frame;
-    AVFrame *needle_frame[MAX_MIPMAPS];
-    AVFrame *haystack_frame[MAX_MIPMAPS];
-} FOCContext;
-
-#define OFFSET(x) offsetof(FOCContext, x)
-#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
-static const AVOption find_rect_options[] = {
-    { "object", "object bitmap filename", OFFSET(obj_filename), AV_OPT_TYPE_STRING, {.str = NULL}, .flags = FLAGS },
-    { "threshold", "set threshold", OFFSET(threshold), AV_OPT_TYPE_FLOAT, {.dbl = 0.5}, 0, 1.0, FLAGS },
-    { "mipmaps", "set mipmaps", OFFSET(mipmaps), AV_OPT_TYPE_INT, {.i64 = 3}, 1, MAX_MIPMAPS, FLAGS },
-    { "xmin", "", OFFSET(xmin), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, FLAGS },
-    { "ymin", "", OFFSET(ymin), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, FLAGS },
-    { "xmax", "", OFFSET(xmax), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, FLAGS },
-    { "ymax", "", OFFSET(ymax), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, FLAGS },
-    { NULL }
-};
-
-AVFILTER_DEFINE_CLASS(find_rect);
-
-static int query_formats(AVFilterContext *ctx)
-{
-    static const enum AVPixelFormat pix_fmts[] = {
-        AV_PIX_FMT_YUV420P,
-        AV_PIX_FMT_YUVJ420P,
-        AV_PIX_FMT_NONE
-    };
-
-    return ff_set_common_formats(ctx, ff_make_format_list(pix_fmts));
-}
-
-static AVFrame *downscale(AVFrame *in)
-{
-    int x, y;
-    AVFrame *frame = av_frame_alloc();
-    uint8_t *src, *dst;
-    if (!frame)
-        return NULL;
-
-    frame->format = in->format;
-    frame->width  = (in->width + 1) / 2;
-    frame->height = (in->height+ 1) / 2;
-
-    if (av_frame_get_buffer(frame, 32) < 0) {
-        av_frame_free(&frame);
-        return NULL;
-    }
-    src = in   ->data[0];
-    dst = frame->data[0];
-
-    for(y = 0; y < frame->height; y++) {
-        for(x = 0; x < frame->width; x++) {
-            dst[x] = (  src[2*x+0]
-                      + src[2*x+1]
-                      + src[2*x+0 + in->linesize[0]]
-                      + src[2*x+1 + in->linesize[0]]
-                      + 2) >> 2;
-        }
-        src += 2*in->linesize[0];
-        dst += frame->linesize[0];
-    }
-    return frame;
-}
-
-static float compare(const AVFrame *haystack, const AVFrame *obj, int offx, int offy)
-{
-    int x,y;
-    int o_sum_v = 0;
-    int h_sum_v = 0;
-    int64_t oo_sum_v = 0;
-    int64_t hh_sum_v = 0;
-    int64_t oh_sum_v = 0;
-    float c;
-    int n = obj->height * obj->width;
-    const uint8_t *odat = obj     ->data[0];
-    const uint8_t *hdat = haystack->data[0] + offx + offy * haystack->linesize[0];
-    int64_t o_sigma, h_sigma;
-
-    for(y = 0; y < obj->height; y++) {
-        for(x = 0; x < obj->width; x++) {
-            int o_v = odat[x];
-            int h_v = hdat[x];
-            o_sum_v += o_v;
-            h_sum_v += h_v;
-            oo_sum_v += o_v * o_v;
-            hh_sum_v += h_v * h_v;
-            oh_sum_v += o_v * h_v;
-        }
-        odat += obj->linesize[0];
-        hdat += haystack->linesize[0];
-    }
-    o_sigma = n*oo_sum_v - o_sum_v*(int64_t)o_sum_v;
-    h_sigma = n*hh_sum_v - h_sum_v*(int64_t)h_sum_v;
-
-    if (o_sigma == 0 || h_sigma == 0)
-        return 1.0;
-
-    c = (n*oh_sum_v - o_sum_v*(int64_t)h_sum_v) / (sqrt(o_sigma)*sqrt(h_sigma));
-
-    return 1 - fabs(c);
-}
-
-static int config_input(AVFilterLink *inlink)
-{
-    AVFilterContext *ctx = inlink->dst;
-    FOCContext *foc = ctx->priv;
-
-    if (foc->xmax <= 0)
-        foc->xmax = inlink->w - foc->obj_frame->width;
-    if (foc->ymax <= 0)
-        foc->ymax = inlink->h - foc->obj_frame->height;
-
-    return 0;
-}
-
-static float search(FOCContext *foc, int pass, int maxpass, int xmin, int xmax, int ymin, int ymax, int *best_x, int *best_y, float best_score)
-{
-    int x, y;
-
-    if (pass + 1 <= maxpass) {
-        int sub_x, sub_y;
-        search(foc, pass+1, maxpass, xmin>>1, (xmax+1)>>1, ymin>>1, (ymax+1)>>1, &sub_x, &sub_y, 2.0);
-        xmin = FFMAX(xmin, 2*sub_x - 4);
-        xmax = FFMIN(xmax, 2*sub_x + 4);
-        ymin = FFMAX(ymin, 2*sub_y - 4);
-        ymax = FFMIN(ymax, 2*sub_y + 4);
-    }
-
-    for (y = ymin; y <= ymax; y++) {
-        for (x = xmin; x <= xmax; x++) {
-            float score = compare(foc->haystack_frame[pass], foc->needle_frame[pass], x, y);
-            if (score < best_score) {
-                best_score = score;
-                *best_x = x;
-                *best_y = y;
-            }
-        }
-    }
-    return best_score;
-}
-
-static int filter_frame(AVFilterLink *inlink, AVFrame *in)
-{
-    AVFilterContext *ctx = inlink->dst;
-    FOCContext *foc = ctx->priv;
-    float best_score;
-    int best_x, best_y;
-    int i;
-
-    foc->haystack_frame[0] = av_frame_clone(in);
-    for (i=1; i<foc->mipmaps; i++) {
-        foc->haystack_frame[i] = downscale(foc->haystack_frame[i-1]);
-    }
-
-    best_score = search(foc, 0, 0,
-                        FFMAX(foc->xmin, foc->last_x - 8),
-                        FFMIN(foc->xmax, foc->last_x + 8),
-                        FFMAX(foc->ymin, foc->last_y - 8),
-                        FFMIN(foc->ymax, foc->last_y + 8),
-                        &best_x, &best_y, 2.0);
-
-    best_score = search(foc, 0, foc->mipmaps - 1, foc->xmin, foc->xmax, foc->ymin, foc->ymax,
-                        &best_x, &best_y, best_score);
-
-    for (i=0; i<MAX_MIPMAPS; i++) {
-        av_frame_free(&foc->haystack_frame[i]);
-    }
-
-    if (best_score > foc->threshold) {
-        return ff_filter_frame(ctx->outputs[0], in);
-    }
-
-    av_log(ctx, AV_LOG_DEBUG, "Found at %d %d score %f\n", best_x, best_y, best_score);
-    foc->last_x = best_x;
-    foc->last_y = best_y;
-
-    av_frame_make_writable(in);
-
-    av_dict_set_int(&in->metadata, "lavfi.rect.w", foc->obj_frame->width, 0);
-    av_dict_set_int(&in->metadata, "lavfi.rect.h", foc->obj_frame->height, 0);
-    av_dict_set_int(&in->metadata, "lavfi.rect.x", best_x, 0);
-    av_dict_set_int(&in->metadata, "lavfi.rect.y", best_y, 0);
-
-    return ff_filter_frame(ctx->outputs[0], in);
-}
-
-static av_cold void uninit(AVFilterContext *ctx)
-{
-    FOCContext *foc = ctx->priv;
-    int i;
-
-    for (i = 0; i < MAX_MIPMAPS; i++) {
-        av_frame_free(&foc->needle_frame[i]);
-        av_frame_free(&foc->haystack_frame[i]);
-    }
-
-    if (foc->obj_frame)
-        av_freep(&foc->obj_frame->data[0]);
-    av_frame_free(&foc->obj_frame);
-}
-
-static av_cold int init(AVFilterContext *ctx)
-{
-    FOCContext *foc = ctx->priv;
-    int ret, i;
-
-    if (!foc->obj_filename) {
-        av_log(ctx, AV_LOG_ERROR, "object filename not set\n");
-        return AVERROR(EINVAL);
-    }
-
-    foc->obj_frame = av_frame_alloc();
-    if (!foc->obj_frame)
-        return AVERROR(ENOMEM);
-
-    if ((ret = ff_load_image(foc->obj_frame->data, foc->obj_frame->linesize,
-                             &foc->obj_frame->width, &foc->obj_frame->height,
-                             &foc->obj_frame->format, foc->obj_filename, ctx)) < 0)
-        return ret;
-
-    if (foc->obj_frame->format != AV_PIX_FMT_GRAY8) {
-        av_log(ctx, AV_LOG_ERROR, "object image is not a grayscale image\n");
-        return AVERROR(EINVAL);
-    }
-
-    foc->needle_frame[0] = av_frame_clone(foc->obj_frame);
-    for (i = 1; i < foc->mipmaps; i++) {
-        foc->needle_frame[i] = downscale(foc->needle_frame[i-1]);
-        if (!foc->needle_frame[i])
-            return AVERROR(ENOMEM);
-    }
-
-    return 0;
-}
-
-static const AVFilterPad foc_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .config_props = config_input,
-        .filter_frame = filter_frame,
-    },
-    { NULL }
-};
-
-static const AVFilterPad foc_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-    { NULL }
-};
-
-AVFilter ff_vf_find_rect = {
-    .name            = "find_rect",
-    .description     = NULL_IF_CONFIG_SMALL("Find a user specified object."),
-    .priv_size       = sizeof(FOCContext),
-    .init            = init,
-    .uninit          = uninit,
-    .query_formats   = query_formats,
-    .inputs          = foc_inputs,
-    .outputs         = foc_outputs,
-    .priv_class      = &find_rect_class,
-};
diff --git a/libavfilter/vf_fspp.c b/libavfilter/vf_fspp.c
deleted file mode 100644
index c698904..0000000
--- a/libavfilter/vf_fspp.c
+++ /dev/null
@@ -1,693 +0,0 @@
-/*
- * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
- * Copyright (C) 2005 Nikolaj Poroshin <porosh3@psu.ru>
- * 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
- * Fast Simple Post-processing filter
- * This implementation is based on an algorithm described in
- * "Aria Nosratinia Embedded Post-Processing for
- * Enhancement of Compressed Images (1999)"
- * (http://www.utdallas.edu/~aria/papers/vlsisp99.pdf)
- * Further, with splitting (I)DCT into horizontal/vertical passes, one of
- * them can be performed once per block, not per pixel. This allows for much
- * higher speed.
- *
- * Originally written by Michael Niedermayer and Nikolaj for the MPlayer
- * project, and ported by Arwa Arif for FFmpeg.
- */
-
-#include "libavutil/avassert.h"
-#include "libavutil/imgutils.h"
-#include "libavutil/opt.h"
-#include "libavutil/pixdesc.h"
-#include "internal.h"
-#include "vf_fspp.h"
-
-#define OFFSET(x) offsetof(FSPPContext, x)
-#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
-static const AVOption fspp_options[] = {
-    { "quality",       "set quality",                          OFFSET(log2_count),    AV_OPT_TYPE_INT, {.i64 = 4},   4, MAX_LEVEL, FLAGS },
-    { "qp",            "force a constant quantizer parameter", OFFSET(qp),            AV_OPT_TYPE_INT, {.i64 = 0},   0, 64,        FLAGS },
-    { "strength",      "set filter strength",                  OFFSET(strength),      AV_OPT_TYPE_INT, {.i64 = 0}, -15, 32,        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(fspp);
-
-DECLARE_ALIGNED(32, static const uint8_t, dither)[8][8] = {
-    {  0,  48,  12,  60,   3,  51,  15,  63, },
-    { 32,  16,  44,  28,  35,  19,  47,  31, },
-    {  8,  56,   4,  52,  11,  59,   7,  55, },
-    { 40,  24,  36,  20,  43,  27,  39,  23, },
-    {  2,  50,  14,  62,   1,  49,  13,  61, },
-    { 34,  18,  46,  30,  33,  17,  45,  29, },
-    { 10,  58,   6,  54,   9,  57,   5,  53, },
-    { 42,  26,  38,  22,  41,  25,  37,  21, },
-};
-
-static const short custom_threshold[64] = {
-// values (296) can't be too high
-// -it causes too big quant dependence
-// or maybe overflow(check), which results in some flashing
-     71, 296, 295, 237,  71,  40,  38,  19,
-    245, 193, 185, 121, 102,  73,  53,  27,
-    158, 129, 141, 107,  97,  73,  50,  26,
-    102, 116, 109,  98,  82,  66,  45,  23,
-     71,  94,  95,  81,  70,  56,  38,  20,
-     56,  77,  74,  66,  56,  44,  30,  15,
-     38,  53,  50,  45,  38,  30,  21,  11,
-     20,  27,  26,  23,  20,  15,  11,   5
-};
-
-//This func reads from 1 slice, 1 and clears 0 & 1
-static void store_slice_c(uint8_t *dst, int16_t *src,
-                          ptrdiff_t dst_stride, ptrdiff_t src_stride,
-                          ptrdiff_t width, ptrdiff_t height, ptrdiff_t log2_scale)
-{
-    int y, x;
-#define STORE(pos)                                                             \
-    temp = (src[x + pos] + (d[pos] >> log2_scale)) >> (6 - log2_scale);        \
-    src[x + pos] = src[x + pos - 8 * src_stride] = 0;                          \
-    if (temp & 0x100) temp = ~(temp >> 31);                                    \
-    dst[x + pos] = temp;
-
-    for (y = 0; y < height; y++) {
-        const uint8_t *d = dither[y];
-        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);
-        }
-        src += src_stride;
-        dst += dst_stride;
-    }
-}
-
-//This func reads from 2 slices, 0 & 2  and clears 2-nd
-static void store_slice2_c(uint8_t *dst, int16_t *src,
-                           ptrdiff_t dst_stride, ptrdiff_t src_stride,
-                           ptrdiff_t width, ptrdiff_t height, ptrdiff_t log2_scale)
-{
-    int y, x;
-#define STORE2(pos)                                                                                       \
-    temp = (src[x + pos] + src[x + pos + 16 * src_stride] + (d[pos] >> log2_scale)) >> (6 - log2_scale);  \
-    src[x + pos + 16 * src_stride] = 0;                                                                   \
-    if (temp & 0x100) temp = ~(temp >> 31);                                                               \
-    dst[x + pos] = temp;
-
-    for (y = 0; y < height; y++) {
-        const uint8_t *d = dither[y];
-        for (x = 0; x < width; x += 8) {
-            int temp;
-            STORE2(0);
-            STORE2(1);
-            STORE2(2);
-            STORE2(3);
-            STORE2(4);
-            STORE2(5);
-            STORE2(6);
-            STORE2(7);
-        }
-        src += src_stride;
-        dst += dst_stride;
-    }
-}
-
-static void mul_thrmat_c(int16_t *thr_adr_noq, int16_t *thr_adr, int q)
-{
-    int a;
-    for (a = 0; a < 64; a++)
-        thr_adr[a] = q * thr_adr_noq[a];
-}
-
-static void filter(FSPPContext *p, uint8_t *dst, uint8_t *src,
-                   int dst_stride, int src_stride,
-                   int width, int height,
-                   uint8_t *qp_store, int qp_stride, int is_luma)
-{
-    int x, x0, y, es, qy, t;
-
-    const int stride = is_luma ? p->temp_stride : (width + 16);
-    const int step = 6 - p->log2_count;
-    const int qpsh = 4 - p->hsub * !is_luma;
-    const int qpsv = 4 - p->vsub * !is_luma;
-
-    DECLARE_ALIGNED(32, int32_t, block_align)[4 * 8 * BLOCKSZ + 4 * 8 * BLOCKSZ];
-    int16_t *block  = (int16_t *)block_align;
-    int16_t *block3 = (int16_t *)(block_align + 4 * 8 * BLOCKSZ);
-
-    memset(block3, 0, 4 * 8 * BLOCKSZ);
-
-    if (!src || !dst) return;
-
-    for (y = 0; y < height; y++) {
-        int index = 8 + 8 * stride + y * stride;
-        memcpy(p->src + index, src + y * src_stride, width);
-        for (x = 0; x < 8; x++) {
-            p->src[index         - x - 1] = p->src[index +         x    ];
-            p->src[index + width + x    ] = p->src[index + width - x - 1];
-        }
-    }
-
-    for (y = 0; y < 8; y++) {
-        memcpy(p->src + (     7 - y    ) * stride, p->src + (     y + 8    ) * stride, stride);
-        memcpy(p->src + (height + 8 + y) * stride, p->src + (height - y + 7) * stride, stride);
-    }
-    //FIXME (try edge emu)
-
-    for (y = 8; y < 24; y++)
-        memset(p->temp + 8 + y * stride, 0, width * sizeof(int16_t));
-
-    for (y = step; y < height + 8; y += step) {    //step= 1,2
-        const int y1 = y - 8 + step;                 //l5-7  l4-6;
-        qy = y - 4;
-
-        if (qy > height - 1) qy = height - 1;
-        if (qy < 0) qy = 0;
-
-        qy = (qy >> qpsv) * qp_stride;
-        p->row_fdct(block, p->src + y * stride + 2 - (y&1), stride, 2);
-
-        for (x0 = 0; x0 < width + 8 - 8 * (BLOCKSZ - 1); x0 += 8 * (BLOCKSZ - 1)) {
-            p->row_fdct(block + 8 * 8, p->src + y * stride + 8 + x0 + 2 - (y&1), stride, 2 * (BLOCKSZ - 1));
-
-            if (p->qp)
-                p->column_fidct((int16_t *)(&p->threshold_mtx[0]), block + 0 * 8, block3 + 0 * 8, 8 * (BLOCKSZ - 1)); //yes, this is a HOTSPOT
-            else
-                for (x = 0; x < 8 * (BLOCKSZ - 1); x += 8) {
-                    t = x + x0 - 2;                    //correct t=x+x0-2-(y&1), but its the same
-
-                    if (t < 0) t = 0;                   //t always < width-2
-
-                    t = qp_store[qy + (t >> qpsh)];
-                    t = ff_norm_qscale(t, p->qscale_type);
-
-                    if (t != p->prev_q) p->prev_q = t, p->mul_thrmat((int16_t *)(&p->threshold_mtx_noq[0]), (int16_t *)(&p->threshold_mtx[0]), t);
-                    p->column_fidct((int16_t *)(&p->threshold_mtx[0]), block + x * 8, block3 + x * 8, 8); //yes, this is a HOTSPOT
-                }
-            p->row_idct(block3 + 0 * 8, p->temp + (y & 15) * stride + x0 + 2 - (y & 1), stride, 2 * (BLOCKSZ - 1));
-            memmove(block,  block  + (BLOCKSZ - 1) * 64, 8 * 8 * sizeof(int16_t)); //cycling
-            memmove(block3, block3 + (BLOCKSZ - 1) * 64, 6 * 8 * sizeof(int16_t));
-        }
-
-        es = width + 8 - x0; //  8, ...
-        if (es > 8)
-            p->row_fdct(block + 8 * 8, p->src + y * stride + 8 + x0 + 2 - (y & 1), stride, (es - 4) >> 2);
-
-        p->column_fidct((int16_t *)(&p->threshold_mtx[0]), block, block3, es&(~1));
-        if (es > 3)
-            p->row_idct(block3 + 0 * 8, p->temp + (y & 15) * stride + x0 + 2 - (y & 1), stride, es >> 2);
-
-        if (!(y1 & 7) && y1) {
-            if (y1 & 8)
-                p->store_slice(dst + (y1 - 8) * dst_stride, p->temp + 8 + 8 * stride,
-                               dst_stride, stride, width, 8, 5 - p->log2_count);
-            else
-                p->store_slice2(dst + (y1 - 8) * dst_stride, p->temp + 8 + 0 * stride,
-                                dst_stride, stride, width, 8, 5 - p->log2_count);
-        }
-    }
-
-    if (y & 7) {  // height % 8 != 0
-        if (y & 8)
-            p->store_slice(dst + ((y - 8) & ~7) * dst_stride, p->temp + 8 + 8 * stride,
-                           dst_stride, stride, width, y&7, 5 - p->log2_count);
-        else
-            p->store_slice2(dst + ((y - 8) & ~7) * dst_stride, p->temp + 8 + 0 * stride,
-                            dst_stride, stride, width, y&7, 5 - p->log2_count);
-    }
-}
-
-static void column_fidct_c(int16_t *thr_adr, int16_t *data, int16_t *output, int cnt)
-{
-    int_simd16_t tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
-    int_simd16_t tmp10, tmp11, tmp12, tmp13;
-    int_simd16_t z1,z2,z3,z4,z5, z10, z11, z12, z13;
-    int_simd16_t d0, d1, d2, d3, d4, d5, d6, d7;
-
-    int16_t *dataptr;
-    int16_t *wsptr;
-    int16_t *threshold;
-    int ctr;
-
-    dataptr = data;
-    wsptr = output;
-
-    for (; cnt > 0; cnt -= 2) { //start positions
-        threshold = (int16_t *)thr_adr;//threshold_mtx
-        for (ctr = DCTSIZE; ctr > 0; ctr--) {
-            // Process columns from input, add to output.
-            tmp0 = dataptr[DCTSIZE * 0] + dataptr[DCTSIZE * 7];
-            tmp7 = dataptr[DCTSIZE * 0] - dataptr[DCTSIZE * 7];
-
-            tmp1 = dataptr[DCTSIZE * 1] + dataptr[DCTSIZE * 6];
-            tmp6 = dataptr[DCTSIZE * 1] - dataptr[DCTSIZE * 6];
-
-            tmp2 = dataptr[DCTSIZE * 2] + dataptr[DCTSIZE * 5];
-            tmp5 = dataptr[DCTSIZE * 2] - dataptr[DCTSIZE * 5];
-
-            tmp3 = dataptr[DCTSIZE * 3] + dataptr[DCTSIZE * 4];
-            tmp4 = dataptr[DCTSIZE * 3] - dataptr[DCTSIZE * 4];
-
-            // Even part of FDCT
-
-            tmp10 = tmp0 + tmp3;
-            tmp13 = tmp0 - tmp3;
-            tmp11 = tmp1 + tmp2;
-            tmp12 = tmp1 - tmp2;
-
-            d0 = tmp10 + tmp11;
-            d4 = tmp10 - tmp11;
-
-            z1 = MULTIPLY16H((tmp12 + tmp13) << 2, FIX_0_707106781);
-            d2 = tmp13 + z1;
-            d6 = tmp13 - z1;
-
-            // Even part of IDCT
-
-            THRESHOLD(tmp0, d0, threshold[0 * 8]);
-            THRESHOLD(tmp1, d2, threshold[2 * 8]);
-            THRESHOLD(tmp2, d4, threshold[4 * 8]);
-            THRESHOLD(tmp3, d6, threshold[6 * 8]);
-            tmp0 += 2;
-            tmp10 = (tmp0 + tmp2) >> 2;
-            tmp11 = (tmp0 - tmp2) >> 2;
-
-            tmp13 = (tmp1 + tmp3) >>2; //+2 !  (psnr decides)
-            tmp12 = MULTIPLY16H((tmp1 - tmp3), FIX_1_414213562_A) - tmp13; //<<2
-
-            tmp0 = tmp10 + tmp13; //->temps
-            tmp3 = tmp10 - tmp13; //->temps
-            tmp1 = tmp11 + tmp12; //->temps
-            tmp2 = tmp11 - tmp12; //->temps
-
-            // Odd part of FDCT
-
-            tmp10 = tmp4 + tmp5;
-            tmp11 = tmp5 + tmp6;
-            tmp12 = tmp6 + tmp7;
-
-            z5 = MULTIPLY16H((tmp10 - tmp12) << 2, FIX_0_382683433);
-            z2 = MULTIPLY16H(tmp10 << 2, FIX_0_541196100) + z5;
-            z4 = MULTIPLY16H(tmp12 << 2, FIX_1_306562965) + z5;
-            z3 = MULTIPLY16H(tmp11 << 2, FIX_0_707106781);
-
-            z11 = tmp7 + z3;
-            z13 = tmp7 - z3;
-
-            d5 = z13 + z2;
-            d3 = z13 - z2;
-            d1 = z11 + z4;
-            d7 = z11 - z4;
-
-            // Odd part of IDCT
-
-            THRESHOLD(tmp4, d1, threshold[1 * 8]);
-            THRESHOLD(tmp5, d3, threshold[3 * 8]);
-            THRESHOLD(tmp6, d5, threshold[5 * 8]);
-            THRESHOLD(tmp7, d7, threshold[7 * 8]);
-
-            //Simd version uses here a shortcut for the tmp5,tmp6,tmp7 == 0
-            z13 = tmp6 + tmp5;
-            z10 = (tmp6 - tmp5) << 1;
-            z11 = tmp4 + tmp7;
-            z12 = (tmp4 - tmp7) << 1;
-
-            tmp7  = (z11 + z13) >> 2; //+2 !
-            tmp11 = MULTIPLY16H((z11 - z13) << 1, FIX_1_414213562);
-            z5    = MULTIPLY16H(z10 + z12,        FIX_1_847759065);
-            tmp10 = MULTIPLY16H(z12,              FIX_1_082392200) - z5;
-            tmp12 = MULTIPLY16H(z10,              FIX_2_613125930) + z5; // - !!
-
-            tmp6 = tmp12 - tmp7;
-            tmp5 = tmp11 - tmp6;
-            tmp4 = tmp10 + tmp5;
-
-            wsptr[DCTSIZE * 0] +=  (tmp0 + tmp7);
-            wsptr[DCTSIZE * 1] +=  (tmp1 + tmp6);
-            wsptr[DCTSIZE * 2] +=  (tmp2 + tmp5);
-            wsptr[DCTSIZE * 3] +=  (tmp3 - tmp4);
-            wsptr[DCTSIZE * 4] +=  (tmp3 + tmp4);
-            wsptr[DCTSIZE * 5] +=  (tmp2 - tmp5);
-            wsptr[DCTSIZE * 6]  =  (tmp1 - tmp6);
-            wsptr[DCTSIZE * 7]  =  (tmp0 - tmp7);
-            //
-            dataptr++; //next column
-            wsptr++;
-            threshold++;
-        }
-        dataptr += 8; //skip each second start pos
-        wsptr   += 8;
-    }
-}
-
-static void row_idct_c(int16_t *workspace, int16_t *output_adr, ptrdiff_t output_stride, int cnt)
-{
-    int_simd16_t tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
-    int_simd16_t tmp10, tmp11, tmp12, tmp13;
-    int_simd16_t z5, z10, z11, z12, z13;
-    int16_t *outptr;
-    int16_t *wsptr;
-
-    cnt *= 4;
-    wsptr = workspace;
-    outptr = output_adr;
-    for (; cnt > 0; cnt--) {
-        // Even part
-        //Simd version reads 4x4 block and transposes it
-        tmp10 = wsptr[2] +  wsptr[3];
-        tmp11 = wsptr[2] -  wsptr[3];
-
-        tmp13 = wsptr[0] +  wsptr[1];
-        tmp12 = (MULTIPLY16H(wsptr[0] - wsptr[1], FIX_1_414213562_A) << 2) - tmp13;//this shift order to avoid overflow
-
-        tmp0 = tmp10 + tmp13; //->temps
-        tmp3 = tmp10 - tmp13; //->temps
-        tmp1 = tmp11 + tmp12;
-        tmp2 = tmp11 - tmp12;
-
-        // Odd part
-        //Also transpose, with previous:
-        // ---- ----      ||||
-        // ---- ---- idct ||||
-        // ---- ---- ---> ||||
-        // ---- ----      ||||
-        z13 = wsptr[4] + wsptr[5];
-        z10 = wsptr[4] - wsptr[5];
-        z11 = wsptr[6] + wsptr[7];
-        z12 = wsptr[6] - wsptr[7];
-
-        tmp7 = z11 + z13;
-        tmp11 = MULTIPLY16H(z11 - z13, FIX_1_414213562);
-
-        z5 =    MULTIPLY16H(z10 + z12, FIX_1_847759065);
-        tmp10 = MULTIPLY16H(z12,       FIX_1_082392200) - z5;
-        tmp12 = MULTIPLY16H(z10,       FIX_2_613125930) + z5; // - FIX_
-
-        tmp6 = (tmp12 << 3) - tmp7;
-        tmp5 = (tmp11 << 3) - tmp6;
-        tmp4 = (tmp10 << 3) + tmp5;
-
-        // Final output stage: descale and write column
-        outptr[0 * output_stride] += DESCALE(tmp0 + tmp7, 3);
-        outptr[1 * output_stride] += DESCALE(tmp1 + tmp6, 3);
-        outptr[2 * output_stride] += DESCALE(tmp2 + tmp5, 3);
-        outptr[3 * output_stride] += DESCALE(tmp3 - tmp4, 3);
-        outptr[4 * output_stride] += DESCALE(tmp3 + tmp4, 3);
-        outptr[5 * output_stride] += DESCALE(tmp2 - tmp5, 3);
-        outptr[6 * output_stride] += DESCALE(tmp1 - tmp6, 3); //no += ?
-        outptr[7 * output_stride] += DESCALE(tmp0 - tmp7, 3); //no += ?
-        outptr++;
-
-        wsptr += DCTSIZE;       // advance pointer to next row
-    }
-}
-
-static void row_fdct_c(int16_t *data, const uint8_t *pixels, ptrdiff_t line_size, int cnt)
-{
-    int_simd16_t tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
-    int_simd16_t tmp10, tmp11, tmp12, tmp13;
-    int_simd16_t z1, z2, z3, z4, z5, z11, z13;
-    int16_t *dataptr;
-
-    cnt *= 4;
-    // Pass 1: process rows.
-
-    dataptr = data;
-    for (; cnt > 0; cnt--) {
-        tmp0 = pixels[line_size * 0] + pixels[line_size * 7];
-        tmp7 = pixels[line_size * 0] - pixels[line_size * 7];
-        tmp1 = pixels[line_size * 1] + pixels[line_size * 6];
-        tmp6 = pixels[line_size * 1] - pixels[line_size * 6];
-        tmp2 = pixels[line_size * 2] + pixels[line_size * 5];
-        tmp5 = pixels[line_size * 2] - pixels[line_size * 5];
-        tmp3 = pixels[line_size * 3] + pixels[line_size * 4];
-        tmp4 = pixels[line_size * 3] - pixels[line_size * 4];
-
-        // Even part
-
-        tmp10 = tmp0 + tmp3;
-        tmp13 = tmp0 - tmp3;
-        tmp11 = tmp1 + tmp2;
-        tmp12 = tmp1 - tmp2;
-        //Even columns are written first, this leads to different order of columns
-        //in column_fidct(), but they are processed independently, so all ok.
-        //Later in the row_idct() columns readed at the same order.
-        dataptr[2] = tmp10 + tmp11;
-        dataptr[3] = tmp10 - tmp11;
-
-        z1 = MULTIPLY16H((tmp12 + tmp13) << 2, FIX_0_707106781);
-        dataptr[0] = tmp13 + z1;
-        dataptr[1] = tmp13 - z1;
-
-        // Odd part
-
-        tmp10 = (tmp4 + tmp5) << 2;
-        tmp11 = (tmp5 + tmp6) << 2;
-        tmp12 = (tmp6 + tmp7) << 2;
-
-        z5 = MULTIPLY16H(tmp10 - tmp12, FIX_0_382683433);
-        z2 = MULTIPLY16H(tmp10,         FIX_0_541196100) + z5;
-        z4 = MULTIPLY16H(tmp12,         FIX_1_306562965) + z5;
-        z3 = MULTIPLY16H(tmp11,         FIX_0_707106781);
-
-        z11 = tmp7 + z3;
-        z13 = tmp7 - z3;
-
-        dataptr[4] = z13 + z2;
-        dataptr[5] = z13 - z2;
-        dataptr[6] = z11 + z4;
-        dataptr[7] = z11 - z4;
-
-        pixels++;               // advance pointer to next column
-        dataptr += DCTSIZE;
-    }
-}
-
-static int query_formats(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_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
-    };
-
-    AVFilterFormats *fmts_list = ff_make_format_list(pix_fmts);
-    if (!fmts_list)
-        return AVERROR(ENOMEM);
-    return ff_set_common_formats(ctx, fmts_list);
-}
-
-static int config_input(AVFilterLink *inlink)
-{
-    AVFilterContext *ctx = inlink->dst;
-    FSPPContext *fspp = ctx->priv;
-    const int h = FFALIGN(inlink->h + 16, 16);
-    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(inlink->format);
-
-    fspp->hsub = desc->log2_chroma_w;
-    fspp->vsub = desc->log2_chroma_h;
-
-    fspp->temp_stride = FFALIGN(inlink->w + 16, 16);
-    fspp->temp = av_malloc_array(fspp->temp_stride, h * sizeof(*fspp->temp));
-    fspp->src  = av_malloc_array(fspp->temp_stride, h * sizeof(*fspp->src));
-
-    if (!fspp->temp || !fspp->src)
-        return AVERROR(ENOMEM);
-
-    if (!fspp->use_bframe_qp && !fspp->qp) {
-        fspp->non_b_qp_alloc_size = AV_CEIL_RSHIFT(inlink->w, 4) * AV_CEIL_RSHIFT(inlink->h, 4);
-        fspp->non_b_qp_table = av_calloc(fspp->non_b_qp_alloc_size, sizeof(*fspp->non_b_qp_table));
-        if (!fspp->non_b_qp_table)
-            return AVERROR(ENOMEM);
-    }
-
-    fspp->store_slice  = store_slice_c;
-    fspp->store_slice2 = store_slice2_c;
-    fspp->mul_thrmat   = mul_thrmat_c;
-    fspp->column_fidct = column_fidct_c;
-    fspp->row_idct     = row_idct_c;
-    fspp->row_fdct     = row_fdct_c;
-
-    if (ARCH_X86)
-        ff_fspp_init_x86(fspp);
-
-    return 0;
-}
-
-static int filter_frame(AVFilterLink *inlink, AVFrame *in)
-{
-    AVFilterContext *ctx = inlink->dst;
-    FSPPContext *fspp = ctx->priv;
-    AVFilterLink *outlink = ctx->outputs[0];
-    AVFrame *out = in;
-
-    int qp_stride = 0;
-    uint8_t *qp_table = NULL;
-    int i, bias;
-    int custom_threshold_m[64];
-
-    bias = (1 << 4) + fspp->strength;
-
-    for (i = 0; i < 64; i++) //FIXME: tune custom_threshold[] and remove this !
-        custom_threshold_m[i] = (int)(custom_threshold[i] * (bias / 71.0) + 0.5);
-
-    for (i = 0; i < 8; i++) {
-        fspp->threshold_mtx_noq[2 * i] = (uint64_t)custom_threshold_m[i * 8 + 2]
-                                      |(((uint64_t)custom_threshold_m[i * 8 + 6]) << 16)
-                                      |(((uint64_t)custom_threshold_m[i * 8 + 0]) << 32)
-                                      |(((uint64_t)custom_threshold_m[i * 8 + 4]) << 48);
-
-        fspp->threshold_mtx_noq[2 * i + 1] = (uint64_t)custom_threshold_m[i * 8 + 5]
-                                          |(((uint64_t)custom_threshold_m[i * 8 + 3]) << 16)
-                                          |(((uint64_t)custom_threshold_m[i * 8 + 1]) << 32)
-                                          |(((uint64_t)custom_threshold_m[i * 8 + 7]) << 48);
-    }
-
-    if (fspp->qp)
-        fspp->prev_q = fspp->qp, fspp->mul_thrmat((int16_t *)(&fspp->threshold_mtx_noq[0]), (int16_t *)(&fspp->threshold_mtx[0]), fspp->qp);
-
-    /* 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 (!fspp->qp) {
-        qp_table = av_frame_get_qp_table(in, &qp_stride, &fspp->qscale_type);
-
-        if (qp_table && !fspp->use_bframe_qp && in->pict_type != AV_PICTURE_TYPE_B) {
-            int w, h;
-
-            /* if the qp stride is not set, it means the QP are only defined on
-             * a line basis */
-           if (!qp_stride) {
-                w = AV_CEIL_RSHIFT(inlink->w, 4);
-                h = 1;
-            } else {
-                w = qp_stride;
-                h = AV_CEIL_RSHIFT(inlink->h, 4);
-            }
-            if (w * h > fspp->non_b_qp_alloc_size) {
-                int ret = av_reallocp_array(&fspp->non_b_qp_table, w, h);
-                if (ret < 0) {
-                    fspp->non_b_qp_alloc_size = 0;
-                    return ret;
-                }
-                fspp->non_b_qp_alloc_size = w * h;
-            }
-
-            av_assert0(w * h <= fspp->non_b_qp_alloc_size);
-            memcpy(fspp->non_b_qp_table, qp_table, w * h);
-        }
-    }
-
-    if (fspp->log2_count && !ctx->is_disabled) {
-        if (!fspp->use_bframe_qp && fspp->non_b_qp_table)
-            qp_table = fspp->non_b_qp_table;
-
-        if (qp_table || fspp->qp) {
-            const int cw = AV_CEIL_RSHIFT(inlink->w, fspp->hsub);
-            const int ch = AV_CEIL_RSHIFT(inlink->h, fspp->vsub);
-
-            /* 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);
-                    return AVERROR(ENOMEM);
-                }
-                av_frame_copy_props(out, in);
-                out->width = in->width;
-                out->height = in->height;
-            }
-
-            filter(fspp, out->data[0], in->data[0], out->linesize[0], in->linesize[0],
-                   inlink->w, inlink->h, qp_table, qp_stride, 1);
-            filter(fspp, out->data[1], in->data[1], out->linesize[1], in->linesize[1],
-                   cw,        ch,        qp_table, qp_stride, 0);
-            filter(fspp, out->data[2], in->data[2], out->linesize[2], in->linesize[2],
-                   cw,        ch,        qp_table, qp_stride, 0);
-            emms_c();
-        }
-    }
-
-    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);
-    }
-    return ff_filter_frame(outlink, out);
-}
-
-static av_cold void uninit(AVFilterContext *ctx)
-{
-    FSPPContext *fspp = ctx->priv;
-    av_freep(&fspp->temp);
-    av_freep(&fspp->src);
-    av_freep(&fspp->non_b_qp_table);
-}
-
-static const AVFilterPad fspp_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .config_props = config_input,
-        .filter_frame = filter_frame,
-    },
-    { NULL }
-};
-
-static const AVFilterPad fspp_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-    { NULL }
-};
-
-AVFilter ff_vf_fspp = {
-    .name            = "fspp",
-    .description     = NULL_IF_CONFIG_SMALL("Apply Fast Simple Post-processing filter."),
-    .priv_size       = sizeof(FSPPContext),
-    .uninit          = uninit,
-    .query_formats   = query_formats,
-    .inputs          = fspp_inputs,
-    .outputs         = fspp_outputs,
-    .priv_class      = &fspp_class,
-    .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
-};
diff --git a/libavfilter/vf_fspp.h b/libavfilter/vf_fspp.h
deleted file mode 100644
index 73d8c7c..0000000
--- a/libavfilter/vf_fspp.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
- * Copyright (C) 2005 Nikolaj Poroshin <porosh3@psu.ru>
- * 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.
- */
-
-#ifndef AVFILTER_FSPP_H
-#define AVFILTER_FSPP_H
-
-#include "avfilter.h"
-
-#define BLOCKSZ 12
-#define MAX_LEVEL 5
-
-#define DCTSIZE 8
-#define DCTSIZE_S "8"
-
-#define FIX(x,s)  ((x) * (1 << s) + 0.5)
-
-#define MULTIPLY16H(x,k)   (((x) * (k)) >> 16)
-#define THRESHOLD(r,x,t)                         \
-    if(((unsigned)((x) + t)) > t * 2) r = (x);   \
-    else r = 0;
-#define DESCALE(x,n)  (((x) + (1 << ((n) - 1))) >> n)
-
-typedef int32_t int_simd16_t;
-static const int16_t FIX_0_382683433   = FIX(0.382683433, 14);
-static const int16_t FIX_0_541196100   = FIX(0.541196100, 14);
-static const int16_t FIX_0_707106781   = FIX(M_SQRT1_2  , 14);
-static const int16_t FIX_1_306562965   = FIX(1.306562965, 14);
-static const int16_t FIX_1_414213562_A = FIX(M_SQRT2    , 14);
-static const int16_t FIX_1_847759065   = FIX(1.847759065, 13);
-static const int16_t FIX_2_613125930   = FIX(-2.613125930, 13);
-static const int16_t FIX_1_414213562   = FIX(M_SQRT2    , 13);
-static const int16_t FIX_1_082392200   = FIX(1.082392200, 13);
-
-typedef struct FSPPContext {
-    AVClass *class;
-    uint64_t threshold_mtx_noq[8 * 2];
-    uint64_t threshold_mtx[8 * 2];        //used in both C & MMX (& later SSE2) versions
-
-    int log2_count;
-    int strength;
-    int hsub;
-    int vsub;
-    int temp_stride;
-    int qp;
-    int qscale_type;
-    int prev_q;
-    uint8_t *src;
-    int16_t *temp;
-    uint8_t *non_b_qp_table;
-    int non_b_qp_alloc_size;
-    int use_bframe_qp;
-
-    void (*store_slice)(uint8_t *dst, int16_t *src,
-                        ptrdiff_t dst_stride, ptrdiff_t src_stride,
-                        ptrdiff_t width, ptrdiff_t height, ptrdiff_t log2_scale);
-
-    void (*store_slice2)(uint8_t *dst, int16_t *src,
-                         ptrdiff_t dst_stride, ptrdiff_t src_stride,
-                         ptrdiff_t width, ptrdiff_t height, ptrdiff_t log2_scale);
-
-    void (*mul_thrmat)(int16_t *thr_adr_noq, int16_t *thr_adr, int q);
-
-    void (*column_fidct)(int16_t *thr_adr, int16_t *data,
-                         int16_t *output, int cnt);
-
-    void (*row_idct)(int16_t *workspace, int16_t *output_adr,
-                     ptrdiff_t output_stride, int cnt);
-
-    void (*row_fdct)(int16_t *data, const uint8_t *pixels,
-                     ptrdiff_t line_size, int cnt);
-
-} FSPPContext;
-
-void ff_fspp_init_x86(FSPPContext *fspp);
-
-#endif /* AVFILTER_FSPP_H */
diff --git a/libavfilter/vf_geq.c b/libavfilter/vf_geq.c
deleted file mode 100644
index d7abf96..0000000
--- a/libavfilter/vf_geq.c
+++ /dev/null
@@ -1,506 +0,0 @@
-/*
- * Copyright (C) 2006 Michael Niedermayer <michaelni@gmx.at>
- * Copyright (C) 2012 Clément Bœsch <u pkh me>
- *
- * This file is part of FFmpeg.
- *
- * FFmpeg is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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
- * Generic equation change filter
- * Originally written by Michael Niedermayer for the MPlayer project, and
- * ported by Clément Bœsch for FFmpeg.
- */
-
-#include "libavutil/avassert.h"
-#include "libavutil/avstring.h"
-#include "libavutil/eval.h"
-#include "libavutil/opt.h"
-#include "libavutil/pixdesc.h"
-#include "internal.h"
-
-#define MAX_NB_THREADS 32
-#define NB_PLANES 4
-
-enum InterpolationMethods {
-    INTERP_NEAREST,
-    INTERP_BILINEAR,
-    NB_INTERP
-};
-
-static const char *const var_names[] = {   "X",   "Y",   "W",   "H",   "N",   "SW",   "SH",   "T",        NULL };
-enum                                   { VAR_X, VAR_Y, VAR_W, VAR_H, VAR_N, VAR_SW, VAR_SH, VAR_T, VAR_VARS_NB };
-
-typedef struct GEQContext {
-    const AVClass *class;
-    AVExpr *e[NB_PLANES][MAX_NB_THREADS]; ///< expressions for each plane and thread
-    char *expr_str[4+3];        ///< expression strings for each plane
-    AVFrame *picref;            ///< current input buffer
-    uint8_t *dst;               ///< reference pointer to the 8bits output
-    uint16_t *dst16;            ///< reference pointer to the 16bits output
-    double values[VAR_VARS_NB]; ///< expression values
-    int hsub, vsub;             ///< chroma subsampling
-    int planes;                 ///< number of planes
-    int interpolation;
-    int is_rgb;
-    int bps;
-
-    double *pixel_sums[NB_PLANES];
-    int needs_sum[NB_PLANES];
-} GEQContext;
-
-enum { Y = 0, U, V, A, G, B, R };
-
-#define OFFSET(x) offsetof(GEQContext, x)
-#define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
-
-static const AVOption geq_options[] = {
-    { "lum_expr",   "set luminance expression",   OFFSET(expr_str[Y]), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS },
-    { "lum",        "set luminance expression",   OFFSET(expr_str[Y]), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS },
-    { "cb_expr",    "set chroma blue expression", OFFSET(expr_str[U]), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS },
-    { "cb",         "set chroma blue expression", OFFSET(expr_str[U]), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS },
-    { "cr_expr",    "set chroma red expression",  OFFSET(expr_str[V]), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS },
-    { "cr",         "set chroma red expression",  OFFSET(expr_str[V]), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS },
-    { "alpha_expr", "set alpha expression",       OFFSET(expr_str[A]), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS },
-    { "a",          "set alpha expression",       OFFSET(expr_str[A]), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS },
-    { "red_expr",   "set red expression",         OFFSET(expr_str[R]), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS },
-    { "r",          "set red expression",         OFFSET(expr_str[R]), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS },
-    { "green_expr", "set green expression",       OFFSET(expr_str[G]), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS },
-    { "g",          "set green expression",       OFFSET(expr_str[G]), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS },
-    { "blue_expr",  "set blue expression",        OFFSET(expr_str[B]), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS },
-    { "b",          "set blue expression",        OFFSET(expr_str[B]), AV_OPT_TYPE_STRING, {.str=NULL}, 0, 0, FLAGS },
-    { "interpolation","set interpolation method", OFFSET(interpolation), AV_OPT_TYPE_INT, {.i64=INTERP_BILINEAR}, 0, NB_INTERP-1, FLAGS, "interp" },
-    { "i",          "set interpolation method",   OFFSET(interpolation), AV_OPT_TYPE_INT, {.i64=INTERP_BILINEAR}, 0, NB_INTERP-1, FLAGS, "interp" },
-    { "nearest",    "nearest interpolation",      0,                   AV_OPT_TYPE_CONST, {.i64=INTERP_NEAREST},  0, 0, FLAGS, "interp" },
-    { "n",          "nearest interpolation",      0,                   AV_OPT_TYPE_CONST, {.i64=INTERP_NEAREST},  0, 0, FLAGS, "interp" },
-    { "bilinear",   "bilinear interpolation",     0,                   AV_OPT_TYPE_CONST, {.i64=INTERP_BILINEAR}, 0, 0, FLAGS, "interp" },
-    { "b",          "bilinear interpolation",     0,                   AV_OPT_TYPE_CONST, {.i64=INTERP_BILINEAR}, 0, 0, FLAGS, "interp" },
-    {NULL},
-};
-
-AVFILTER_DEFINE_CLASS(geq);
-
-static inline double getpix(void *priv, double x, double y, int plane)
-{
-    int xi, yi;
-    GEQContext *geq = priv;
-    AVFrame *picref = geq->picref;
-    const uint8_t *src = picref->data[plane];
-    int linesize = picref->linesize[plane];
-    const int w = (plane == 1 || plane == 2) ? AV_CEIL_RSHIFT(picref->width,  geq->hsub) : picref->width;
-    const int h = (plane == 1 || plane == 2) ? AV_CEIL_RSHIFT(picref->height, geq->vsub) : picref->height;
-
-    if (!src)
-        return 0;
-
-    if (geq->interpolation == INTERP_BILINEAR) {
-        xi = x = av_clipd(x, 0, w - 2);
-        yi = y = av_clipd(y, 0, h - 2);
-
-        x -= xi;
-        y -= yi;
-
-        if (geq->bps > 8) {
-            const uint16_t *src16 = (const uint16_t*)src;
-            linesize /= 2;
-
-            return (1-y)*((1-x)*src16[xi +  yi    * linesize] + x*src16[xi + 1 +  yi    * linesize])
-                  +   y *((1-x)*src16[xi + (yi+1) * linesize] + x*src16[xi + 1 + (yi+1) * linesize]);
-        } else {
-            return (1-y)*((1-x)*src[xi +  yi    * linesize] + x*src[xi + 1 +  yi    * linesize])
-                  +   y *((1-x)*src[xi + (yi+1) * linesize] + x*src[xi + 1 + (yi+1) * linesize]);
-        }
-    } else {
-        xi = av_clipd(x, 0, w - 1);
-        yi = av_clipd(y, 0, h - 1);
-
-        if (geq->bps > 8) {
-            const uint16_t *src16 = (const uint16_t*)src;
-            linesize /= 2;
-
-            return src16[xi + yi * linesize];
-        } else {
-            return src[xi + yi * linesize];
-        }
-    }
-}
-
-static int calculate_sums(GEQContext *geq, int plane, int w, int h)
-{
-    int xi, yi;
-    AVFrame *picref = geq->picref;
-    const uint8_t *src = picref->data[plane];
-    int linesize = picref->linesize[plane];
-
-    if (!geq->pixel_sums[plane])
-        geq->pixel_sums[plane] = av_malloc_array(w, h * sizeof (*geq->pixel_sums[plane]));
-    if (!geq->pixel_sums[plane])
-        return AVERROR(ENOMEM);
-    if (geq->bps > 8)
-        linesize /= 2;
-    for (yi = 0; yi < h; yi ++) {
-        if (geq->bps > 8) {
-            const uint16_t *src16 = (const uint16_t*)src;
-            double linesum = 0;
-
-            for (xi = 0; xi < w; xi ++) {
-                linesum += src16[xi + yi * linesize];
-                geq->pixel_sums[plane][xi + yi * w] = linesum;
-            }
-        } else {
-            double linesum = 0;
-
-            for (xi = 0; xi < w; xi ++) {
-                linesum += src[xi + yi * linesize];
-                geq->pixel_sums[plane][xi + yi * w] = linesum;
-            }
-        }
-        if (yi)
-            for (xi = 0; xi < w; xi ++) {
-                geq->pixel_sums[plane][xi + yi * w] += geq->pixel_sums[plane][xi + yi * w - w];
-            }
-    }
-    return 0;
-}
-
-static inline double getpix_integrate_internal(GEQContext *geq, int x, int y, int plane, int w, int h)
-{
-    if (x > w - 1) {
-        double boundary =   getpix_integrate_internal(geq, w - 1, y, plane, w, h);
-        return 2*boundary - getpix_integrate_internal(geq, 2*(w - 1) - x, y, plane, w, h);
-    } else if (y > h - 1) {
-        double boundary =   getpix_integrate_internal(geq, x, h - 1, plane, w, h);
-        return 2*boundary - getpix_integrate_internal(geq, x, 2*(h - 1) - y, plane, w, h);
-    } else if (x < 0) {
-        if (x == -1) return 0;
-        return - getpix_integrate_internal(geq, -x-2, y, plane, w, h);
-    } else if (y < 0) {
-        if (y == -1) return 0;
-        return - getpix_integrate_internal(geq, x, -y-2, plane, w, h);
-    }
-
-    return geq->pixel_sums[plane][x + y * w];
-}
-
-static inline double getpix_integrate(void *priv, double x, double y, int plane) {
-    GEQContext *geq = priv;
-    AVFrame *picref = geq->picref;
-    const uint8_t *src = picref->data[plane];
-    const int w = (plane == 1 || plane == 2) ? AV_CEIL_RSHIFT(picref->width,  geq->hsub) : picref->width;
-    const int h = (plane == 1 || plane == 2) ? AV_CEIL_RSHIFT(picref->height, geq->vsub) : picref->height;
-
-    if (!src)
-        return 0;
-
-    return getpix_integrate_internal(geq, lrint(av_clipd(x, -w, 2*w)), lrint(av_clipd(y, -h, 2*h)), plane, w, h);
-}
-
-//TODO: cubic interpolate
-//TODO: keep the last few frames
-static double lum(void *priv, double x, double y) { return getpix(priv, x, y, 0); }
-static double  cb(void *priv, double x, double y) { return getpix(priv, x, y, 1); }
-static double  cr(void *priv, double x, double y) { return getpix(priv, x, y, 2); }
-static double alpha(void *priv, double x, double y) { return getpix(priv, x, y, 3); }
-
-static double   lumsum(void *priv, double x, double y) { return getpix_integrate(priv, x, y, 0); }
-static double    cbsum(void *priv, double x, double y) { return getpix_integrate(priv, x, y, 1); }
-static double    crsub(void *priv, double x, double y) { return getpix_integrate(priv, x, y, 2); }
-static double alphasum(void *priv, double x, double y) { return getpix_integrate(priv, x, y, 3); }
-
-static av_cold int geq_init(AVFilterContext *ctx)
-{
-    GEQContext *geq = ctx->priv;
-    int plane, ret = 0;
-
-    if (!geq->expr_str[Y] && !geq->expr_str[G] && !geq->expr_str[B] && !geq->expr_str[R]) {
-        av_log(ctx, AV_LOG_ERROR, "A luminance or RGB expression is mandatory\n");
-        ret = AVERROR(EINVAL);
-        goto end;
-    }
-    geq->is_rgb = !geq->expr_str[Y];
-
-    if ((geq->expr_str[Y] || geq->expr_str[U] || geq->expr_str[V]) && (geq->expr_str[G] || geq->expr_str[B] || geq->expr_str[R])) {
-        av_log(ctx, AV_LOG_ERROR, "Either YCbCr or RGB but not both must be specified\n");
-        ret = AVERROR(EINVAL);
-        goto end;
-    }
-
-    if (!geq->expr_str[U] && !geq->expr_str[V]) {
-        /* No chroma at all: fallback on luma */
-        geq->expr_str[U] = av_strdup(geq->expr_str[Y]);
-        geq->expr_str[V] = av_strdup(geq->expr_str[Y]);
-    } else {
-        /* One chroma unspecified, fallback on the other */
-        if (!geq->expr_str[U]) geq->expr_str[U] = av_strdup(geq->expr_str[V]);
-        if (!geq->expr_str[V]) geq->expr_str[V] = av_strdup(geq->expr_str[U]);
-    }
-
-    if (!geq->expr_str[A]) {
-        char bps_string[8];
-        snprintf(bps_string, sizeof(bps_string), "%d", (1<<geq->bps) - 1);
-        geq->expr_str[A] = av_strdup(bps_string);
-    }
-    if (!geq->expr_str[G])
-        geq->expr_str[G] = av_strdup("g(X,Y)");
-    if (!geq->expr_str[B])
-        geq->expr_str[B] = av_strdup("b(X,Y)");
-    if (!geq->expr_str[R])
-        geq->expr_str[R] = av_strdup("r(X,Y)");
-
-    if (geq->is_rgb ?
-            (!geq->expr_str[G] || !geq->expr_str[B] || !geq->expr_str[R])
-                    :
-            (!geq->expr_str[U] || !geq->expr_str[V] || !geq->expr_str[A])) {
-        ret = AVERROR(ENOMEM);
-        goto end;
-    }
-
-    for (plane = 0; plane < NB_PLANES; plane++) {
-        static double (*p[])(void *, double, double) = {
-            lum   , cb   , cr   , alpha   ,
-            lumsum, cbsum, crsub, alphasum,
-        };
-        static const char *const func2_yuv_names[]    = {
-            "lum"   , "cb"   , "cr"   , "alpha"   , "p",
-            "lumsum", "cbsum", "crsum", "alphasum", "psum",
-            NULL };
-        static const char *const func2_rgb_names[]    = {
-            "g"   , "b"   , "r"   , "alpha"   , "p",
-            "gsum", "bsum", "rsum", "alphasum", "psum",
-            NULL };
-        const char *const *func2_names       = geq->is_rgb ? func2_rgb_names : func2_yuv_names;
-        double (*func2[])(void *, double, double) = {
-            lum   , cb   , cr   , alpha   , p[plane],
-            lumsum, cbsum, crsub, alphasum, p[plane + 4],
-            NULL };
-        int counter[10] = {0};
-
-        for (int i = 0; i < MAX_NB_THREADS; i++) {
-            ret = av_expr_parse(&geq->e[plane][i], geq->expr_str[plane < 3 && geq->is_rgb ? plane+4 : plane], var_names,
-                                NULL, NULL, func2_names, func2, 0, ctx);
-            if (ret < 0)
-                goto end;
-        }
-
-        av_expr_count_func(geq->e[plane][0], counter, FF_ARRAY_ELEMS(counter), 2);
-        geq->needs_sum[plane] = counter[5] + counter[6] + counter[7] + counter[8] + counter[9];
-    }
-
-end:
-    return ret;
-}
-
-static int geq_query_formats(AVFilterContext *ctx)
-{
-    GEQContext *geq = ctx->priv;
-    static const enum AVPixelFormat yuv_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_YUVA444P, AV_PIX_FMT_YUVA422P, AV_PIX_FMT_YUVA420P,
-        AV_PIX_FMT_GRAY8,
-        AV_PIX_FMT_YUV444P9,  AV_PIX_FMT_YUV422P9,  AV_PIX_FMT_YUV420P9,
-        AV_PIX_FMT_YUVA444P9, AV_PIX_FMT_YUVA422P9, AV_PIX_FMT_YUVA420P9,
-        AV_PIX_FMT_YUV444P10,  AV_PIX_FMT_YUV422P10,  AV_PIX_FMT_YUV420P10,
-        AV_PIX_FMT_YUV440P10,
-        AV_PIX_FMT_YUVA444P10, AV_PIX_FMT_YUVA422P10, AV_PIX_FMT_YUVA420P10,
-        AV_PIX_FMT_GRAY9, AV_PIX_FMT_GRAY10,
-        AV_PIX_FMT_YUV444P12,  AV_PIX_FMT_YUV422P12,  AV_PIX_FMT_YUV420P12,
-        AV_PIX_FMT_GRAY12, AV_PIX_FMT_GRAY14,
-        AV_PIX_FMT_YUV444P14,  AV_PIX_FMT_YUV422P14,  AV_PIX_FMT_YUV420P14,
-        AV_PIX_FMT_YUV444P16,  AV_PIX_FMT_YUV422P16,  AV_PIX_FMT_YUV420P16,
-        AV_PIX_FMT_YUVA444P16, AV_PIX_FMT_YUVA422P16, AV_PIX_FMT_YUVA420P16,
-        AV_PIX_FMT_GRAY16,
-        AV_PIX_FMT_NONE
-    };
-    static const enum AVPixelFormat rgb_pix_fmts[] = {
-        AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP,
-        AV_PIX_FMT_GBRP9,
-        AV_PIX_FMT_GBRP10, AV_PIX_FMT_GBRAP10,
-        AV_PIX_FMT_GBRP12, AV_PIX_FMT_GBRAP12,
-        AV_PIX_FMT_GBRP14,
-        AV_PIX_FMT_GBRP16, AV_PIX_FMT_GBRAP16,
-        AV_PIX_FMT_NONE
-    };
-    AVFilterFormats *fmts_list;
-
-    if (geq->is_rgb) {
-        fmts_list = ff_make_format_list(rgb_pix_fmts);
-    } else
-        fmts_list = ff_make_format_list(yuv_pix_fmts);
-    if (!fmts_list)
-        return AVERROR(ENOMEM);
-    return ff_set_common_formats(ctx, fmts_list);
-}
-
-static int geq_config_props(AVFilterLink *inlink)
-{
-    GEQContext *geq = inlink->dst->priv;
-    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(inlink->format);
-
-    av_assert0(desc);
-
-    geq->hsub = desc->log2_chroma_w;
-    geq->vsub = desc->log2_chroma_h;
-    geq->bps = desc->comp[0].depth;
-    geq->planes = desc->nb_components;
-    return 0;
-}
-
-typedef struct ThreadData {
-    int height;
-    int width;
-    int plane;
-    int linesize;
-} ThreadData;
-
-static int slice_geq_filter(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
-{
-    GEQContext *geq = ctx->priv;
-    ThreadData *td = arg;
-    const int height = td->height;
-    const int width = td->width;
-    const int plane = td->plane;
-    const int linesize = td->linesize;
-    const int slice_start = (height *  jobnr) / nb_jobs;
-    const int slice_end = (height * (jobnr+1)) / nb_jobs;
-    int x, y;
-
-    double values[VAR_VARS_NB];
-    values[VAR_W] = geq->values[VAR_W];
-    values[VAR_H] = geq->values[VAR_H];
-    values[VAR_N] = geq->values[VAR_N];
-    values[VAR_SW] = geq->values[VAR_SW];
-    values[VAR_SH] = geq->values[VAR_SH];
-    values[VAR_T] = geq->values[VAR_T];
-
-    if (geq->bps == 8) {
-        uint8_t *ptr = geq->dst + linesize * slice_start;
-        for (y = slice_start; y < slice_end; y++) {
-            values[VAR_Y] = y;
-
-            for (x = 0; x < width; x++) {
-                values[VAR_X] = x;
-                ptr[x] = av_expr_eval(geq->e[plane][jobnr], values, geq);
-            }
-            ptr += linesize;
-        }
-    } else {
-        uint16_t *ptr16 = geq->dst16 + (linesize/2) * slice_start;
-        for (y = slice_start; y < slice_end; y++) {
-            values[VAR_Y] = y;
-            for (x = 0; x < width; x++) {
-                values[VAR_X] = x;
-                ptr16[x] = av_expr_eval(geq->e[plane][jobnr], values, geq);
-            }
-            ptr16 += linesize/2;
-        }
-    }
-
-    return 0;
-}
-
-static int geq_filter_frame(AVFilterLink *inlink, AVFrame *in)
-{
-    int plane;
-    AVFilterContext *ctx = inlink->dst;
-    const int nb_threads = FFMIN(MAX_NB_THREADS, ff_filter_get_nb_threads(ctx));
-    GEQContext *geq = ctx->priv;
-    AVFilterLink *outlink = inlink->dst->outputs[0];
-    AVFrame *out;
-
-    geq->values[VAR_N] = inlink->frame_count_out,
-    geq->values[VAR_T] = in->pts == AV_NOPTS_VALUE ? NAN : in->pts * av_q2d(inlink->time_base),
-
-    geq->picref = in;
-    out = ff_get_video_buffer(outlink, outlink->w, outlink->h);
-    if (!out) {
-        av_frame_free(&in);
-        return AVERROR(ENOMEM);
-    }
-    av_frame_copy_props(out, in);
-
-    for (plane = 0; plane < geq->planes && out->data[plane]; plane++) {
-        const int width = (plane == 1 || plane == 2) ? AV_CEIL_RSHIFT(inlink->w, geq->hsub) : inlink->w;
-        const int height = (plane == 1 || plane == 2) ? AV_CEIL_RSHIFT(inlink->h, geq->vsub) : inlink->h;
-        const int linesize = out->linesize[plane];
-        ThreadData td;
-
-        geq->dst = out->data[plane];
-        geq->dst16 = (uint16_t*)out->data[plane];
-
-        geq->values[VAR_W]  = width;
-        geq->values[VAR_H]  = height;
-        geq->values[VAR_SW] = width / (double)inlink->w;
-        geq->values[VAR_SH] = height / (double)inlink->h;
-
-        td.width = width;
-        td.height = height;
-        td.plane = plane;
-        td.linesize = linesize;
-
-        if (geq->needs_sum[plane])
-            calculate_sums(geq, plane, width, height);
-
-        ctx->internal->execute(ctx, slice_geq_filter, &td, NULL, FFMIN(height, nb_threads));
-    }
-
-    av_frame_free(&geq->picref);
-    return ff_filter_frame(outlink, out);
-}
-
-static av_cold void geq_uninit(AVFilterContext *ctx)
-{
-    int i;
-    GEQContext *geq = ctx->priv;
-
-    for (i = 0; i < NB_PLANES; i++)
-        for (int j = 0; j < MAX_NB_THREADS; j++)
-            av_expr_free(geq->e[i][j]);
-    for (i = 0; i < NB_PLANES; i++)
-        av_freep(&geq->pixel_sums);
-}
-
-static const AVFilterPad geq_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .config_props = geq_config_props,
-        .filter_frame = geq_filter_frame,
-    },
-    { NULL }
-};
-
-static const AVFilterPad geq_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-    { NULL }
-};
-
-AVFilter ff_vf_geq = {
-    .name          = "geq",
-    .description   = NULL_IF_CONFIG_SMALL("Apply generic equation to each pixel."),
-    .priv_size     = sizeof(GEQContext),
-    .init          = geq_init,
-    .uninit        = geq_uninit,
-    .query_formats = geq_query_formats,
-    .inputs        = geq_inputs,
-    .outputs       = geq_outputs,
-    .priv_class    = &geq_class,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
-};
diff --git a/libavfilter/vf_histeq.c b/libavfilter/vf_histeq.c
deleted file mode 100644
index 2449e10..0000000
--- a/libavfilter/vf_histeq.c
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * Copyright (c) 2012 Jeremy Tran
- * Copyright (c) 2001 Donald A. Graft
- *
- * 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
- * Histogram equalization filter, based on the VirtualDub filter by
- * Donald A. Graft  <neuron2 AT home DOT com>.
- * Implements global automatic contrast adjustment by means of
- * histogram equalization.
- */
-
-#include "libavutil/common.h"
-#include "libavutil/internal.h"
-#include "libavutil/opt.h"
-#include "libavutil/pixdesc.h"
-
-#include "avfilter.h"
-#include "drawutils.h"
-#include "formats.h"
-#include "internal.h"
-#include "video.h"
-
-// #define DEBUG
-
-// Linear Congruential Generator, see "Numerical Recipes"
-#define LCG_A 4096
-#define LCG_C 150889
-#define LCG_M 714025
-#define LCG(x) (((x) * LCG_A + LCG_C) % LCG_M)
-#define LCG_SEED 739187
-
-enum HisteqAntibanding {
-    HISTEQ_ANTIBANDING_NONE   = 0,
-    HISTEQ_ANTIBANDING_WEAK   = 1,
-    HISTEQ_ANTIBANDING_STRONG = 2,
-    HISTEQ_ANTIBANDING_NB,
-};
-
-typedef struct HisteqContext {
-    const AVClass *class;
-    float strength;
-    float intensity;
-    int antibanding;               ///< HisteqAntibanding
-    int in_histogram [256];        ///< input histogram
-    int out_histogram[256];        ///< output histogram
-    int LUT[256];                  ///< lookup table derived from histogram[]
-    uint8_t rgba_map[4];           ///< components position
-    int bpp;                       ///< bytes per pixel
-} HisteqContext;
-
-#define OFFSET(x) offsetof(HisteqContext, 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 histeq_options[] = {
-    { "strength",    "set the strength", OFFSET(strength), AV_OPT_TYPE_FLOAT, {.dbl=0.2}, 0, 1, FLAGS },
-    { "intensity",   "set the intensity", OFFSET(intensity), AV_OPT_TYPE_FLOAT, {.dbl=0.21}, 0, 1, FLAGS },
-    { "antibanding", "set the antibanding level", OFFSET(antibanding), AV_OPT_TYPE_INT, {.i64=HISTEQ_ANTIBANDING_NONE}, 0, HISTEQ_ANTIBANDING_NB-1, FLAGS, "antibanding" },
-    CONST("none",    "apply no antibanding",     HISTEQ_ANTIBANDING_NONE,   "antibanding"),
-    CONST("weak",    "apply weak antibanding",   HISTEQ_ANTIBANDING_WEAK,   "antibanding"),
-    CONST("strong",  "apply strong antibanding", HISTEQ_ANTIBANDING_STRONG, "antibanding"),
-    { NULL }
-};
-
-AVFILTER_DEFINE_CLASS(histeq);
-
-static av_cold int init(AVFilterContext *ctx)
-{
-    HisteqContext *histeq = ctx->priv;
-
-    av_log(ctx, AV_LOG_VERBOSE,
-           "strength:%0.3f intensity:%0.3f antibanding:%d\n",
-           histeq->strength, histeq->intensity, histeq->antibanding);
-
-    return 0;
-}
-
-static int query_formats(AVFilterContext *ctx)
-{
-    static const enum AVPixelFormat pix_fmts[] = {
-        AV_PIX_FMT_ARGB, AV_PIX_FMT_RGBA, AV_PIX_FMT_ABGR, AV_PIX_FMT_BGRA,
-        AV_PIX_FMT_RGB24, AV_PIX_FMT_BGR24,
-        AV_PIX_FMT_NONE
-    };
-    AVFilterFormats *fmts_list = ff_make_format_list(pix_fmts);
-    if (!fmts_list)
-        return AVERROR(ENOMEM);
-    return ff_set_common_formats(ctx, fmts_list);
-}
-
-static int config_input(AVFilterLink *inlink)
-{
-    AVFilterContext *ctx = inlink->dst;
-    HisteqContext *histeq = ctx->priv;
-    const AVPixFmtDescriptor *pix_desc = av_pix_fmt_desc_get(inlink->format);
-
-    histeq->bpp = av_get_bits_per_pixel(pix_desc) / 8;
-    ff_fill_rgba_map(histeq->rgba_map, inlink->format);
-
-    return 0;
-}
-
-#define R 0
-#define G 1
-#define B 2
-#define A 3
-
-#define GET_RGB_VALUES(r, g, b, src, map) do { \
-    r = src[x + map[R]];                       \
-    g = src[x + map[G]];                       \
-    b = src[x + map[B]];                       \
-} while (0)
-
-static int filter_frame(AVFilterLink *inlink, AVFrame *inpic)
-{
-    AVFilterContext   *ctx     = inlink->dst;
-    HisteqContext     *histeq  = ctx->priv;
-    AVFilterLink      *outlink = ctx->outputs[0];
-    int strength  = histeq->strength  * 1000;
-    int intensity = histeq->intensity * 1000;
-    int x, y, i, luthi, lutlo, lut, luma, oluma, m;
-    AVFrame *outpic;
-    unsigned int r, g, b, jran;
-    uint8_t *src, *dst;
-
-    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);
-
-    /* Seed random generator for antibanding. */
-    jran = LCG_SEED;
-
-    /* Calculate and store the luminance and calculate the global histogram
-       based on the luminance. */
-    memset(histeq->in_histogram, 0, sizeof(histeq->in_histogram));
-    src = inpic->data[0];
-    dst = outpic->data[0];
-    for (y = 0; y < inlink->h; y++) {
-        for (x = 0; x < inlink->w * histeq->bpp; x += histeq->bpp) {
-            GET_RGB_VALUES(r, g, b, src, histeq->rgba_map);
-            luma = (55 * r + 182 * g + 19 * b) >> 8;
-            dst[x + histeq->rgba_map[A]] = luma;
-            histeq->in_histogram[luma]++;
-        }
-        src += inpic->linesize[0];
-        dst += outpic->linesize[0];
-    }
-
-#ifdef DEBUG
-    for (x = 0; x < 256; x++)
-        ff_dlog(ctx, "in[%d]: %u\n", x, histeq->in_histogram[x]);
-#endif
-
-    /* Calculate the lookup table. */
-    histeq->LUT[0] = histeq->in_histogram[0];
-    /* Accumulate */
-    for (x = 1; x < 256; x++)
-        histeq->LUT[x] = histeq->LUT[x-1] + histeq->in_histogram[x];
-
-    /* Normalize */
-    for (x = 0; x < 256; x++)
-        histeq->LUT[x] = (histeq->LUT[x] * intensity) / (inlink->h * inlink->w);
-
-    /* Adjust the LUT based on the selected strength. This is an alpha
-       mix of the calculated LUT and a linear LUT with gain 1. */
-    for (x = 0; x < 256; x++)
-        histeq->LUT[x] = (strength * histeq->LUT[x]) / 255 +
-                         ((255 - strength) * x)      / 255;
-
-    /* Output the equalized frame. */
-    memset(histeq->out_histogram, 0, sizeof(histeq->out_histogram));
-
-    src = inpic->data[0];
-    dst = outpic->data[0];
-    for (y = 0; y < inlink->h; y++) {
-        for (x = 0; x < inlink->w * histeq->bpp; x += histeq->bpp) {
-            luma = dst[x + histeq->rgba_map[A]];
-            if (luma == 0) {
-                for (i = 0; i < histeq->bpp; ++i)
-                    dst[x + i] = 0;
-                histeq->out_histogram[0]++;
-            } else {
-                lut = histeq->LUT[luma];
-                if (histeq->antibanding != HISTEQ_ANTIBANDING_NONE) {
-                    if (luma > 0) {
-                        lutlo = histeq->antibanding == HISTEQ_ANTIBANDING_WEAK ?
-                                (histeq->LUT[luma] + histeq->LUT[luma - 1]) / 2 :
-                                 histeq->LUT[luma - 1];
-                    } else
-                        lutlo = lut;
-
-                    if (luma < 255) {
-                        luthi = (histeq->antibanding == HISTEQ_ANTIBANDING_WEAK) ?
-                            (histeq->LUT[luma] + histeq->LUT[luma + 1]) / 2 :
-                             histeq->LUT[luma + 1];
-                    } else
-                        luthi = lut;
-
-                    if (lutlo != luthi) {
-                        jran = LCG(jran);
-                        lut = lutlo + ((luthi - lutlo + 1) * jran) / LCG_M;
-                    }
-                }
-
-                GET_RGB_VALUES(r, g, b, src, histeq->rgba_map);
-                if (((m = FFMAX3(r, g, b)) * lut) / luma > 255) {
-                    r = (r * 255) / m;
-                    g = (g * 255) / m;
-                    b = (b * 255) / m;
-                } else {
-                    r = (r * lut) / luma;
-                    g = (g * lut) / luma;
-                    b = (b * lut) / luma;
-                }
-                dst[x + histeq->rgba_map[R]] = r;
-                dst[x + histeq->rgba_map[G]] = g;
-                dst[x + histeq->rgba_map[B]] = b;
-                oluma = av_clip_uint8((55 * r + 182 * g + 19 * b) >> 8);
-                histeq->out_histogram[oluma]++;
-            }
-        }
-        src += inpic->linesize[0];
-        dst += outpic->linesize[0];
-    }
-#ifdef DEBUG
-    for (x = 0; x < 256; x++)
-        ff_dlog(ctx, "out[%d]: %u\n", x, histeq->out_histogram[x]);
-#endif
-
-    av_frame_free(&inpic);
-    return ff_filter_frame(outlink, outpic);
-}
-
-static const AVFilterPad histeq_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .config_props = config_input,
-        .filter_frame = filter_frame,
-    },
-    { NULL }
-};
-
-static const AVFilterPad histeq_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-    { NULL }
-};
-
-AVFilter ff_vf_histeq = {
-    .name          = "histeq",
-    .description   = NULL_IF_CONFIG_SMALL("Apply global color histogram equalization."),
-    .priv_size     = sizeof(HisteqContext),
-    .init          = init,
-    .query_formats = query_formats,
-    .inputs        = histeq_inputs,
-    .outputs       = histeq_outputs,
-    .priv_class    = &histeq_class,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
-};
diff --git a/libavfilter/vf_hqdn3d.c b/libavfilter/vf_hqdn3d.c
deleted file mode 100644
index 803f90c..0000000
--- a/libavfilter/vf_hqdn3d.c
+++ /dev/null
@@ -1,413 +0,0 @@
-/*
- * Copyright (c) 2003 Daniel Moreno <comac AT comac DOT darktech DOT org>
- * Copyright (c) 2010 Baptiste Coudurier
- * Copyright (c) 2012 Loren Merritt
- *
- * This file is part of FFmpeg, ported from MPlayer.
- *
- * 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
- * high quality 3d video denoiser, ported from MPlayer
- * libmpcodecs/vf_hqdn3d.c.
- */
-
-#include <float.h>
-
-#include "config.h"
-#include "libavutil/attributes.h"
-#include "libavutil/common.h"
-#include "libavutil/pixdesc.h"
-#include "libavutil/intreadwrite.h"
-#include "libavutil/opt.h"
-
-#include "avfilter.h"
-#include "formats.h"
-#include "internal.h"
-#include "video.h"
-#include "vf_hqdn3d.h"
-
-#define LUT_BITS (depth==16 ? 8 : 4)
-#define LOAD(x) (((depth == 8 ? src[x] : AV_RN16A(src + (x) * 2)) << (16 - depth))\
-                 + (((1 << (16 - depth)) - 1) >> 1))
-#define STORE(x,val) (depth == 8 ? dst[x] = (val) >> (16 - depth) : \
-                                   AV_WN16A(dst + (x) * 2, (val) >> (16 - depth)))
-
-av_always_inline
-static uint32_t lowpass(int prev, int cur, int16_t *coef, int depth)
-{
-    int d = (prev - cur) >> (8 - LUT_BITS);
-    return cur + coef[d];
-}
-
-av_always_inline
-static void denoise_temporal(uint8_t *src, uint8_t *dst,
-                             uint16_t *frame_ant,
-                             int w, int h, int sstride, int dstride,
-                             int16_t *temporal, int depth)
-{
-    long x, y;
-    uint32_t tmp;
-
-    temporal += 256 << LUT_BITS;
-
-    for (y = 0; y < h; y++) {
-        for (x = 0; x < w; x++) {
-            frame_ant[x] = tmp = lowpass(frame_ant[x], LOAD(x), temporal, depth);
-            STORE(x, tmp);
-        }
-        src += sstride;
-        dst += dstride;
-        frame_ant += w;
-    }
-}
-
-av_always_inline
-static void denoise_spatial(HQDN3DContext *s,
-                            uint8_t *src, uint8_t *dst,
-                            uint16_t *line_ant, uint16_t *frame_ant,
-                            int w, int h, int sstride, int dstride,
-                            int16_t *spatial, int16_t *temporal, int depth)
-{
-    long x, y;
-    uint32_t pixel_ant;
-    uint32_t tmp;
-
-    spatial  += 256 << LUT_BITS;
-    temporal += 256 << LUT_BITS;
-
-    /* First line has no top neighbor. Only left one for each tmp and
-     * last frame */
-    pixel_ant = LOAD(0);
-    for (x = 0; x < w; x++) {
-        line_ant[x] = tmp = pixel_ant = lowpass(pixel_ant, LOAD(x), spatial, depth);
-        frame_ant[x] = tmp = lowpass(frame_ant[x], tmp, temporal, depth);
-        STORE(x, tmp);
-    }
-
-    for (y = 1; y < h; y++) {
-        src += sstride;
-        dst += dstride;
-        frame_ant += w;
-        if (s->denoise_row[depth]) {
-            s->denoise_row[depth](src, dst, line_ant, frame_ant, w, spatial, temporal);
-            continue;
-        }
-        pixel_ant = LOAD(0);
-        for (x = 0; x < w-1; x++) {
-            line_ant[x] = tmp = lowpass(line_ant[x], pixel_ant, spatial, depth);
-            pixel_ant = lowpass(pixel_ant, LOAD(x+1), spatial, depth);
-            frame_ant[x] = tmp = lowpass(frame_ant[x], tmp, temporal, depth);
-            STORE(x, tmp);
-        }
-        line_ant[x] = tmp = lowpass(line_ant[x], pixel_ant, spatial, depth);
-        frame_ant[x] = tmp = lowpass(frame_ant[x], tmp, temporal, depth);
-        STORE(x, tmp);
-    }
-}
-
-av_always_inline
-static int denoise_depth(HQDN3DContext *s,
-                         uint8_t *src, uint8_t *dst,
-                         uint16_t *line_ant, uint16_t **frame_ant_ptr,
-                         int w, int h, int sstride, int dstride,
-                         int16_t *spatial, int16_t *temporal, int depth)
-{
-    // FIXME: For 16-bit depth, frame_ant could be a pointer to the previous
-    // filtered frame rather than a separate buffer.
-    long x, y;
-    uint16_t *frame_ant = *frame_ant_ptr;
-    if (!frame_ant) {
-        uint8_t *frame_src = src;
-        *frame_ant_ptr = frame_ant = av_malloc_array(w, h*sizeof(uint16_t));
-        if (!frame_ant)
-            return AVERROR(ENOMEM);
-        for (y = 0; y < h; y++, src += sstride, frame_ant += w)
-            for (x = 0; x < w; x++)
-                frame_ant[x] = LOAD(x);
-        src = frame_src;
-        frame_ant = *frame_ant_ptr;
-    }
-
-    if (spatial[0])
-        denoise_spatial(s, src, dst, line_ant, frame_ant,
-                        w, h, sstride, dstride, spatial, temporal, depth);
-    else
-        denoise_temporal(src, dst, frame_ant,
-                         w, h, sstride, dstride, temporal, depth);
-    emms_c();
-    return 0;
-}
-
-#define denoise(...)                                                          \
-    do {                                                                      \
-        int ret = AVERROR_BUG;                                                \
-        switch (s->depth) {                                                   \
-            case  8: ret = denoise_depth(__VA_ARGS__,  8); break;             \
-            case  9: ret = denoise_depth(__VA_ARGS__,  9); break;             \
-            case 10: ret = denoise_depth(__VA_ARGS__, 10); break;             \
-            case 12: ret = denoise_depth(__VA_ARGS__, 12); break;             \
-            case 14: ret = denoise_depth(__VA_ARGS__, 14); break;             \
-            case 16: ret = denoise_depth(__VA_ARGS__, 16); break;             \
-        }                                                                     \
-        if (ret < 0) {                                                        \
-            av_frame_free(&out);                                              \
-            if (!direct)                                                      \
-                av_frame_free(&in);                                           \
-            return ret;                                                       \
-        }                                                                     \
-    } while (0)
-
-static void precalc_coefs(double dist25, int depth, int16_t *ct)
-{
-    int i;
-    double gamma, simil, C;
-
-    gamma = log(0.25) / log(1.0 - FFMIN(dist25,252.0)/255.0 - 0.00001);
-
-    for (i = -256<<LUT_BITS; i < 256<<LUT_BITS; i++) {
-        double f = ((i<<(9-LUT_BITS)) + (1<<(8-LUT_BITS)) - 1) / 512.0; // midpoint of the bin
-        simil = FFMAX(0, 1.0 - fabs(f) / 255.0);
-        C = pow(simil, gamma) * 256.0 * f;
-        ct[(256<<LUT_BITS)+i] = lrint(C);
-    }
-
-    ct[0] = !!dist25;
-}
-
-#define PARAM1_DEFAULT 4.0
-#define PARAM2_DEFAULT 3.0
-#define PARAM3_DEFAULT 6.0
-
-static av_cold int init(AVFilterContext *ctx)
-{
-    HQDN3DContext *s = ctx->priv;
-
-    if (!s->strength[LUMA_SPATIAL])
-        s->strength[LUMA_SPATIAL] = PARAM1_DEFAULT;
-    if (!s->strength[CHROMA_SPATIAL])
-        s->strength[CHROMA_SPATIAL] = PARAM2_DEFAULT * s->strength[LUMA_SPATIAL] / PARAM1_DEFAULT;
-    if (!s->strength[LUMA_TMP])
-        s->strength[LUMA_TMP]   = PARAM3_DEFAULT * s->strength[LUMA_SPATIAL] / PARAM1_DEFAULT;
-    if (!s->strength[CHROMA_TMP])
-        s->strength[CHROMA_TMP] = s->strength[LUMA_TMP] * s->strength[CHROMA_SPATIAL] / s->strength[LUMA_SPATIAL];
-
-    av_log(ctx, AV_LOG_VERBOSE, "ls:%f cs:%f lt:%f ct:%f\n",
-           s->strength[LUMA_SPATIAL], s->strength[CHROMA_SPATIAL],
-           s->strength[LUMA_TMP], s->strength[CHROMA_TMP]);
-
-    return 0;
-}
-
-static av_cold void uninit(AVFilterContext *ctx)
-{
-    HQDN3DContext *s = ctx->priv;
-
-    av_freep(&s->coefs[0]);
-    av_freep(&s->coefs[1]);
-    av_freep(&s->coefs[2]);
-    av_freep(&s->coefs[3]);
-    av_freep(&s->line[0]);
-    av_freep(&s->line[1]);
-    av_freep(&s->line[2]);
-    av_freep(&s->frame_prev[0]);
-    av_freep(&s->frame_prev[1]);
-    av_freep(&s->frame_prev[2]);
-}
-
-static int query_formats(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,
-        AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV420P12,
-        AV_PIX_FMT_YUV440P12,
-        AV_PIX_FMT_YUV444P14, AV_PIX_FMT_YUV422P14, AV_PIX_FMT_YUV420P14,
-        AV_PIX_FMT_YUV420P16, AV_PIX_FMT_YUV422P16, AV_PIX_FMT_YUV444P16,
-        AV_PIX_FMT_NONE
-    };
-    AVFilterFormats *fmts_list = ff_make_format_list(pix_fmts);
-    if (!fmts_list)
-        return AVERROR(ENOMEM);
-    return ff_set_common_formats(ctx, fmts_list);
-}
-
-static void calc_coefs(AVFilterContext *ctx)
-{
-    HQDN3DContext *s = ctx->priv;
-
-    for (int i = 0; i < 4; i++)
-        precalc_coefs(s->strength[i], s->depth, s->coefs[i]);
-}
-
-static int config_input(AVFilterLink *inlink)
-{
-    AVFilterContext *ctx = inlink->dst;
-    HQDN3DContext *s = inlink->dst->priv;
-    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(inlink->format);
-    int i, depth;
-
-    uninit(inlink->dst);
-
-    s->hsub  = desc->log2_chroma_w;
-    s->vsub  = desc->log2_chroma_h;
-    s->depth = depth = desc->comp[0].depth;
-
-    for (i = 0; i < 3; i++) {
-        s->line[i] = av_malloc_array(inlink->w, sizeof(*s->line[i]));
-        if (!s->line[i])
-            return AVERROR(ENOMEM);
-    }
-
-    for (i = 0; i < 4; i++) {
-        s->coefs[i] = av_malloc((512<<LUT_BITS) * sizeof(int16_t));
-        if (!s->coefs[i])
-            return AVERROR(ENOMEM);
-    }
-
-    calc_coefs(ctx);
-
-    if (ARCH_X86)
-        ff_hqdn3d_init_x86(s);
-
-    return 0;
-}
-
-typedef struct ThreadData {
-    AVFrame *in, *out;
-    int direct;
-} ThreadData;
-
-static int do_denoise(AVFilterContext *ctx, void *data, int job_nr, int n_jobs)
-{
-    HQDN3DContext *s = ctx->priv;
-    const ThreadData *td = data;
-    AVFrame *out = td->out;
-    AVFrame *in = td->in;
-    int direct = td->direct;
-
-    denoise(s, in->data[job_nr], out->data[job_nr],
-                s->line[job_nr], &s->frame_prev[job_nr],
-                AV_CEIL_RSHIFT(in->width,  (!!job_nr * s->hsub)),
-                AV_CEIL_RSHIFT(in->height, (!!job_nr * s->vsub)),
-                in->linesize[job_nr], out->linesize[job_nr],
-                s->coefs[job_nr ? CHROMA_SPATIAL : LUMA_SPATIAL],
-                s->coefs[job_nr ? CHROMA_TMP     : LUMA_TMP]);
-
-    return 0;
-}
-
-static int filter_frame(AVFilterLink *inlink, AVFrame *in)
-{
-    AVFilterContext *ctx  = inlink->dst;
-    AVFilterLink *outlink = ctx->outputs[0];
-
-    AVFrame *out;
-    int direct = av_frame_is_writable(in) && !ctx->is_disabled;
-    ThreadData td;
-
-    if (direct) {
-        out = in;
-    } else {
-        out = ff_get_video_buffer(outlink, outlink->w, outlink->h);
-        if (!out) {
-            av_frame_free(&in);
-            return AVERROR(ENOMEM);
-        }
-
-        av_frame_copy_props(out, in);
-    }
-
-    td.in = in;
-    td.out = out;
-    td.direct = direct;
-    /* one thread per plane */
-    ctx->internal->execute(ctx, do_denoise, &td, NULL, 3);
-
-    if (ctx->is_disabled) {
-        av_frame_free(&out);
-        return ff_filter_frame(outlink, in);
-    }
-
-    if (!direct)
-        av_frame_free(&in);
-
-    return ff_filter_frame(outlink, out);
-}
-
-static int process_command(AVFilterContext *ctx, const char *cmd, const char *args,
-                           char *res, int res_len, int flags)
-{
-    int ret;
-
-    ret = ff_filter_process_command(ctx, cmd, args, res, res_len, flags);
-    if (ret < 0)
-        return ret;
-
-    calc_coefs(ctx);
-
-    return 0;
-}
-
-#define OFFSET(x) offsetof(HQDN3DContext, x)
-#define FLAGS AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_FILTERING_PARAM | AV_OPT_FLAG_RUNTIME_PARAM
-static const AVOption hqdn3d_options[] = {
-    { "luma_spatial",   "spatial luma strength",    OFFSET(strength[LUMA_SPATIAL]),   AV_OPT_TYPE_DOUBLE, { .dbl = 0.0 }, 0, DBL_MAX, FLAGS },
-    { "chroma_spatial", "spatial chroma strength",  OFFSET(strength[CHROMA_SPATIAL]), AV_OPT_TYPE_DOUBLE, { .dbl = 0.0 }, 0, DBL_MAX, FLAGS },
-    { "luma_tmp",       "temporal luma strength",   OFFSET(strength[LUMA_TMP]),       AV_OPT_TYPE_DOUBLE, { .dbl = 0.0 }, 0, DBL_MAX, FLAGS },
-    { "chroma_tmp",     "temporal chroma strength", OFFSET(strength[CHROMA_TMP]),     AV_OPT_TYPE_DOUBLE, { .dbl = 0.0 }, 0, DBL_MAX, FLAGS },
-    { NULL }
-};
-
-AVFILTER_DEFINE_CLASS(hqdn3d);
-
-static const AVFilterPad avfilter_vf_hqdn3d_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .config_props = config_input,
-        .filter_frame = filter_frame,
-    },
-    { NULL }
-};
-
-
-static const AVFilterPad avfilter_vf_hqdn3d_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO
-    },
-    { NULL }
-};
-
-AVFilter ff_vf_hqdn3d = {
-    .name          = "hqdn3d",
-    .description   = NULL_IF_CONFIG_SMALL("Apply a High Quality 3D Denoiser."),
-    .priv_size     = sizeof(HQDN3DContext),
-    .priv_class    = &hqdn3d_class,
-    .init          = init,
-    .uninit        = uninit,
-    .query_formats = query_formats,
-    .inputs        = avfilter_vf_hqdn3d_inputs,
-    .outputs       = avfilter_vf_hqdn3d_outputs,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL | AVFILTER_FLAG_SLICE_THREADS,
-    .process_command = process_command,
-};
diff --git a/libavfilter/vf_hqdn3d.h b/libavfilter/vf_hqdn3d.h
deleted file mode 100644
index 3279bbc..0000000
--- a/libavfilter/vf_hqdn3d.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2003 Daniel Moreno <comac AT comac DOT darktech DOT org>
- * Copyright (c) 2010 Baptiste Coudurier
- * Copyright (c) 2012 Loren Merritt
- *
- * This file is part of FFmpeg, ported from MPlayer.
- *
- * 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.
- */
-
-#ifndef AVFILTER_HQDN3D_H
-#define AVFILTER_HQDN3D_H
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include "libavutil/opt.h"
-
-typedef struct HQDN3DContext {
-    const AVClass *class;
-    int16_t *coefs[4];
-    uint16_t *line[3];
-    uint16_t *frame_prev[3];
-    double strength[4];
-    int hsub, vsub;
-    int depth;
-    void (*denoise_row[17])(uint8_t *src, uint8_t *dst, uint16_t *line_ant, uint16_t *frame_ant, ptrdiff_t w, int16_t *spatial, int16_t *temporal);
-} HQDN3DContext;
-
-#define LUMA_SPATIAL   0
-#define LUMA_TMP       1
-#define CHROMA_SPATIAL 2
-#define CHROMA_TMP     3
-
-void ff_hqdn3d_init_x86(HQDN3DContext *hqdn3d);
-
-#endif /* AVFILTER_HQDN3D_H */
diff --git a/libavfilter/vf_kerndeint.c b/libavfilter/vf_kerndeint.c
deleted file mode 100644
index 057d15f..0000000
--- a/libavfilter/vf_kerndeint.c
+++ /dev/null
@@ -1,319 +0,0 @@
-/*
- * Copyright (c) 2012 Jeremy Tran
- * Copyright (c) 2004 Tobias Diedrich
- * Copyright (c) 2003 Donald A. Graft
- *
- * 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
- * Kernel Deinterlacer
- * Ported from MPlayer libmpcodecs/vf_kerndeint.c.
- */
-
-#include "libavutil/imgutils.h"
-#include "libavutil/intreadwrite.h"
-#include "libavutil/opt.h"
-#include "libavutil/pixdesc.h"
-
-#include "avfilter.h"
-#include "formats.h"
-#include "internal.h"
-
-typedef struct KerndeintContext {
-    const AVClass *class;
-    int           frame; ///< frame count, starting from 0
-    int           thresh, map, order, sharp, twoway;
-    int           vsub;
-    int           is_packed_rgb;
-    uint8_t       *tmp_data    [4];  ///< temporary plane data buffer
-    int            tmp_linesize[4];  ///< temporary plane byte linesize
-    int            tmp_bwidth  [4];  ///< temporary plane byte width
-} KerndeintContext;
-
-#define OFFSET(x) offsetof(KerndeintContext, x)
-#define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
-static const AVOption kerndeint_options[] = {
-    { "thresh", "set the threshold", OFFSET(thresh), AV_OPT_TYPE_INT, {.i64=10}, 0, 255, FLAGS },
-    { "map",    "set the map",    OFFSET(map),    AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS },
-    { "order",  "set the order",  OFFSET(order),  AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS },
-    { "sharp",  "set sharpening", OFFSET(sharp),  AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS },
-    { "twoway", "set twoway",     OFFSET(twoway), AV_OPT_TYPE_BOOL, {.i64=0}, 0, 1, FLAGS },
-    { NULL }
-};
-
-AVFILTER_DEFINE_CLASS(kerndeint);
-
-static av_cold void uninit(AVFilterContext *ctx)
-{
-    KerndeintContext *kerndeint = ctx->priv;
-
-    av_freep(&kerndeint->tmp_data[0]);
-}
-
-static int query_formats(AVFilterContext *ctx)
-{
-    static const enum AVPixelFormat pix_fmts[] = {
-        AV_PIX_FMT_YUV420P,
-        AV_PIX_FMT_YUYV422,
-        AV_PIX_FMT_ARGB, AV_PIX_FMT_0RGB,
-        AV_PIX_FMT_ABGR, AV_PIX_FMT_0BGR,
-        AV_PIX_FMT_RGBA, AV_PIX_FMT_RGB0,
-        AV_PIX_FMT_BGRA, AV_PIX_FMT_BGR0,
-        AV_PIX_FMT_NONE
-    };
-
-    AVFilterFormats *fmts_list = ff_make_format_list(pix_fmts);
-    if (!fmts_list)
-        return AVERROR(ENOMEM);
-    return ff_set_common_formats(ctx, fmts_list);
-}
-
-static int config_props(AVFilterLink *inlink)
-{
-    KerndeintContext *kerndeint = inlink->dst->priv;
-    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(inlink->format);
-    int ret;
-
-    kerndeint->is_packed_rgb = av_pix_fmt_desc_get(inlink->format)->flags & AV_PIX_FMT_FLAG_RGB;
-    kerndeint->vsub = desc->log2_chroma_h;
-
-    ret = av_image_alloc(kerndeint->tmp_data, kerndeint->tmp_linesize,
-                         inlink->w, inlink->h, inlink->format, 16);
-    if (ret < 0)
-        return ret;
-    memset(kerndeint->tmp_data[0], 0, ret);
-
-    if ((ret = av_image_fill_linesizes(kerndeint->tmp_bwidth, inlink->format, inlink->w)) < 0)
-        return ret;
-
-    return 0;
-}
-
-static int filter_frame(AVFilterLink *inlink, AVFrame *inpic)
-{
-    KerndeintContext *kerndeint = inlink->dst->priv;
-    AVFilterLink *outlink = inlink->dst->outputs[0];
-    AVFrame *outpic;
-    const uint8_t *prvp;   ///< Previous field's pixel line number n
-    const uint8_t *prvpp;  ///< Previous field's pixel line number (n - 1)
-    const uint8_t *prvpn;  ///< Previous field's pixel line number (n + 1)
-    const uint8_t *prvppp; ///< Previous field's pixel line number (n - 2)
-    const uint8_t *prvpnn; ///< Previous field's pixel line number (n + 2)
-    const uint8_t *prvp4p; ///< Previous field's pixel line number (n - 4)
-    const uint8_t *prvp4n; ///< Previous field's pixel line number (n + 4)
-
-    const uint8_t *srcp;   ///< Current field's pixel line number n
-    const uint8_t *srcpp;  ///< Current field's pixel line number (n - 1)
-    const uint8_t *srcpn;  ///< Current field's pixel line number (n + 1)
-    const uint8_t *srcppp; ///< Current field's pixel line number (n - 2)
-    const uint8_t *srcpnn; ///< Current field's pixel line number (n + 2)
-    const uint8_t *srcp3p; ///< Current field's pixel line number (n - 3)
-    const uint8_t *srcp3n; ///< Current field's pixel line number (n + 3)
-    const uint8_t *srcp4p; ///< Current field's pixel line number (n - 4)
-    const uint8_t *srcp4n; ///< Current field's pixel line number (n + 4)
-
-    uint8_t *dstp, *dstp_saved;
-    const uint8_t *srcp_saved;
-
-    int src_linesize, psrc_linesize, dst_linesize, bwidth;
-    int x, y, plane, val, hi, lo, g, h, n = kerndeint->frame++;
-    double valf;
-
-    const int thresh = kerndeint->thresh;
-    const int order  = kerndeint->order;
-    const int map    = kerndeint->map;
-    const int sharp  = kerndeint->sharp;
-    const int twoway = kerndeint->twoway;
-
-    const int is_packed_rgb = kerndeint->is_packed_rgb;
-
-    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);
-    outpic->interlaced_frame = 0;
-
-    for (plane = 0; plane < 4 && inpic->data[plane] && inpic->linesize[plane]; plane++) {
-        h = plane == 0 ? inlink->h : AV_CEIL_RSHIFT(inlink->h, kerndeint->vsub);
-        bwidth = kerndeint->tmp_bwidth[plane];
-
-        srcp_saved        = inpic->data[plane];
-        src_linesize      = inpic->linesize[plane];
-        psrc_linesize     = kerndeint->tmp_linesize[plane];
-        dstp_saved        = outpic->data[plane];
-        dst_linesize      = outpic->linesize[plane];
-        srcp              = srcp_saved + (1 - order) * src_linesize;
-        dstp              = dstp_saved + (1 - order) * dst_linesize;
-
-        for (y = 0; y < h; y += 2) {
-            memcpy(dstp, srcp, bwidth);
-            srcp += 2 * src_linesize;
-            dstp += 2 * dst_linesize;
-        }
-
-        // Copy through the lines that will be missed below.
-        memcpy(dstp_saved + order            * dst_linesize, srcp_saved + (1 -     order) * src_linesize, bwidth);
-        memcpy(dstp_saved + (2 + order    )  * dst_linesize, srcp_saved + (3 -     order) * src_linesize, bwidth);
-        memcpy(dstp_saved + (h - 2 + order)  * dst_linesize, srcp_saved + (h - 1 - order) * src_linesize, bwidth);
-        memcpy(dstp_saved + (h - 4 + order)  * dst_linesize, srcp_saved + (h - 3 - order) * src_linesize, bwidth);
-
-        /* For the other field choose adaptively between using the previous field
-           or the interpolant from the current field. */
-        prvp   = kerndeint->tmp_data[plane] + 5 * psrc_linesize - (1 - order) * psrc_linesize;
-        prvpp  = prvp - psrc_linesize;
-        prvppp = prvp - 2 * psrc_linesize;
-        prvp4p = prvp - 4 * psrc_linesize;
-        prvpn  = prvp + psrc_linesize;
-        prvpnn = prvp + 2 * psrc_linesize;
-        prvp4n = prvp + 4 * psrc_linesize;
-
-        srcp   = srcp_saved + 5 * src_linesize - (1 - order) * src_linesize;
-        srcpp  = srcp - src_linesize;
-        srcppp = srcp - 2 * src_linesize;
-        srcp3p = srcp - 3 * src_linesize;
-        srcp4p = srcp - 4 * src_linesize;
-
-        srcpn  = srcp + src_linesize;
-        srcpnn = srcp + 2 * src_linesize;
-        srcp3n = srcp + 3 * src_linesize;
-        srcp4n = srcp + 4 * src_linesize;
-
-        dstp   = dstp_saved + 5 * dst_linesize - (1 - order) * dst_linesize;
-
-        for (y = 5 - (1 - order); y <= h - 5 - (1 - order); y += 2) {
-            for (x = 0; x < bwidth; x++) {
-                if (thresh == 0 || n == 0 ||
-                    (abs((int)prvp[x]  - (int)srcp[x])  > thresh) ||
-                    (abs((int)prvpp[x] - (int)srcpp[x]) > thresh) ||
-                    (abs((int)prvpn[x] - (int)srcpn[x]) > thresh)) {
-                    if (map) {
-                        g = x & ~3;
-
-                        if (is_packed_rgb) {
-                            AV_WB32(dstp + g, 0xffffffff);
-                            x = g + 3;
-                        } else if (inlink->format == AV_PIX_FMT_YUYV422) {
-                            // y <- 235, u <- 128, y <- 235, v <- 128
-                            AV_WB32(dstp + g, 0xeb80eb80);
-                            x = g + 3;
-                        } else {
-                            dstp[x] = plane == 0 ? 235 : 128;
-                        }
-                    } else {
-                        if (is_packed_rgb) {
-                            hi = 255;
-                            lo = 0;
-                        } else if (inlink->format == AV_PIX_FMT_YUYV422) {
-                            hi = x & 1 ? 240 : 235;
-                            lo = 16;
-                        } else {
-                            hi = plane == 0 ? 235 : 240;
-                            lo = 16;
-                        }
-
-                        if (sharp) {
-                            if (twoway) {
-                                valf = + 0.526 * ((int)srcpp[x] + (int)srcpn[x])
-                                    + 0.170 * ((int)srcp[x] + (int)prvp[x])
-                                    - 0.116 * ((int)srcppp[x] + (int)srcpnn[x] + (int)prvppp[x] + (int)prvpnn[x])
-                                    - 0.026 * ((int)srcp3p[x] + (int)srcp3n[x])
-                                    + 0.031 * ((int)srcp4p[x] + (int)srcp4n[x] + (int)prvp4p[x] + (int)prvp4n[x]);
-                            } else {
-                                valf = + 0.526 * ((int)srcpp[x] + (int)srcpn[x])
-                                    + 0.170 * ((int)prvp[x])
-                                    - 0.116 * ((int)prvppp[x] + (int)prvpnn[x])
-                                    - 0.026 * ((int)srcp3p[x] + (int)srcp3n[x])
-                                    + 0.031 * ((int)prvp4p[x] + (int)prvp4p[x]);
-                            }
-                            dstp[x] = av_clip(valf, lo, hi);
-                        } else {
-                            if (twoway) {
-                                val = (8 * ((int)srcpp[x] + (int)srcpn[x]) + 2 * ((int)srcp[x] + (int)prvp[x])
-                                       - (int)(srcppp[x]) - (int)(srcpnn[x])
-                                       - (int)(prvppp[x]) - (int)(prvpnn[x])) >> 4;
-                            } else {
-                                val = (8 * ((int)srcpp[x] + (int)srcpn[x]) + 2 * ((int)prvp[x])
-                                       - (int)(prvppp[x]) - (int)(prvpnn[x])) >> 4;
-                            }
-                            dstp[x] = av_clip(val, lo, hi);
-                        }
-                    }
-                } else {
-                    dstp[x] = srcp[x];
-                }
-            }
-            prvp   += 2 * psrc_linesize;
-            prvpp  += 2 * psrc_linesize;
-            prvppp += 2 * psrc_linesize;
-            prvpn  += 2 * psrc_linesize;
-            prvpnn += 2 * psrc_linesize;
-            prvp4p += 2 * psrc_linesize;
-            prvp4n += 2 * psrc_linesize;
-            srcp   += 2 * src_linesize;
-            srcpp  += 2 * src_linesize;
-            srcppp += 2 * src_linesize;
-            srcp3p += 2 * src_linesize;
-            srcp4p += 2 * src_linesize;
-            srcpn  += 2 * src_linesize;
-            srcpnn += 2 * src_linesize;
-            srcp3n += 2 * src_linesize;
-            srcp4n += 2 * src_linesize;
-            dstp   += 2 * dst_linesize;
-        }
-
-        srcp = inpic->data[plane];
-        dstp = kerndeint->tmp_data[plane];
-        av_image_copy_plane(dstp, psrc_linesize, srcp, src_linesize, bwidth, h);
-    }
-
-    av_frame_free(&inpic);
-    return ff_filter_frame(outlink, outpic);
-}
-
-static const AVFilterPad kerndeint_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .filter_frame = filter_frame,
-        .config_props = config_props,
-    },
-    { NULL }
-};
-
-static const AVFilterPad kerndeint_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-    { NULL }
-};
-
-
-AVFilter ff_vf_kerndeint = {
-    .name          = "kerndeint",
-    .description   = NULL_IF_CONFIG_SMALL("Apply kernel deinterlacing to the input."),
-    .priv_size     = sizeof(KerndeintContext),
-    .priv_class    = &kerndeint_class,
-    .uninit        = uninit,
-    .query_formats = query_formats,
-    .inputs        = kerndeint_inputs,
-    .outputs       = kerndeint_outputs,
-};
diff --git a/libavfilter/vf_mcdeint.c b/libavfilter/vf_mcdeint.c
deleted file mode 100644
index 9cdec63..0000000
--- a/libavfilter/vf_mcdeint.c
+++ /dev/null
@@ -1,313 +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;
-    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;
-    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->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;
-
-    avcodec_free_context(&mcdeint->enc_ctx);
-}
-
-static int query_formats(AVFilterContext *ctx)
-{
-    static const enum AVPixelFormat pix_fmts[] = {
-        AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE
-    };
-    AVFilterFormats *fmts_list = ff_make_format_list(pix_fmts);
-    if (!fmts_list)
-        return AVERROR(ENOMEM);
-    return ff_set_common_formats(ctx, fmts_list);
-}
-
-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 = {0};
-    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;
-
-    av_init_packet(&pkt);
-
-    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,
-    },
-    { NULL }
-};
-
-static const AVFilterPad mcdeint_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-    { NULL }
-};
-
-AVFilter ff_vf_mcdeint = {
-    .name          = "mcdeint",
-    .description   = NULL_IF_CONFIG_SMALL("Apply motion compensating deinterlacing."),
-    .priv_size     = sizeof(MCDeintContext),
-    .uninit        = uninit,
-    .query_formats = query_formats,
-    .inputs        = mcdeint_inputs,
-    .outputs       = mcdeint_outputs,
-    .priv_class    = &mcdeint_class,
-};
diff --git a/libavfilter/vf_mpdecimate.c b/libavfilter/vf_mpdecimate.c
deleted file mode 100644
index c9a9cb3..0000000
--- a/libavfilter/vf_mpdecimate.c
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * Copyright (c) 2003 Rich Felker
- * Copyright (c) 2012 Stefano Sabatini
- *
- * 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 mpdecimate filter, ported from libmpcodecs/vf_decimate.c by
- * Rich Felker.
- */
-
-#include "libavutil/opt.h"
-#include "libavutil/pixdesc.h"
-#include "libavutil/pixelutils.h"
-#include "libavutil/timestamp.h"
-#include "avfilter.h"
-#include "internal.h"
-#include "formats.h"
-#include "video.h"
-
-typedef struct DecimateContext {
-    const AVClass *class;
-    int lo, hi;                    ///< lower and higher threshold number of differences
-                                   ///< values for 8x8 blocks
-
-    float frac;                    ///< threshold of changed pixels over the total fraction
-
-    int max_drop_count;            ///< if positive: maximum number of sequential frames to drop
-                                   ///< if negative: minimum number of frames between two drops
-
-    int drop_count;                ///< if positive: number of frames sequentially dropped
-                                   ///< if negative: number of sequential frames which were not dropped
-
-    int hsub, vsub;                ///< chroma subsampling values
-    AVFrame *ref;                  ///< reference picture
-    av_pixelutils_sad_fn sad;      ///< sum of absolute difference function
-} DecimateContext;
-
-#define OFFSET(x) offsetof(DecimateContext, x)
-#define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
-
-static const AVOption mpdecimate_options[] = {
-    { "max",  "set the maximum number of consecutive dropped frames (positive), or the minimum interval between dropped frames (negative)",
-      OFFSET(max_drop_count), AV_OPT_TYPE_INT, {.i64=0}, INT_MIN, INT_MAX, FLAGS },
-    { "hi",   "set high dropping threshold", OFFSET(hi), AV_OPT_TYPE_INT, {.i64=64*12}, INT_MIN, INT_MAX, FLAGS },
-    { "lo",   "set low dropping threshold", OFFSET(lo), AV_OPT_TYPE_INT, {.i64=64*5}, INT_MIN, INT_MAX, FLAGS },
-    { "frac", "set fraction dropping threshold",  OFFSET(frac), AV_OPT_TYPE_FLOAT, {.dbl=0.33}, 0, 1, FLAGS },
-    { NULL }
-};
-
-AVFILTER_DEFINE_CLASS(mpdecimate);
-
-/**
- * Return 1 if the two planes are different, 0 otherwise.
- */
-static int diff_planes(AVFilterContext *ctx,
-                       uint8_t *cur, int cur_linesize,
-                       uint8_t *ref, int ref_linesize,
-                       int w, int h)
-{
-    DecimateContext *decimate = ctx->priv;
-
-    int x, y;
-    int d, c = 0;
-    int t = (w/16)*(h/16)*decimate->frac;
-
-    /* compute difference for blocks of 8x8 bytes */
-    for (y = 0; y < h-7; y += 4) {
-        for (x = 8; x < w-7; x += 4) {
-            d = decimate->sad(cur + y*cur_linesize + x, cur_linesize,
-                              ref + y*ref_linesize + x, ref_linesize);
-            if (d > decimate->hi) {
-                av_log(ctx, AV_LOG_DEBUG, "%d>=hi ", d);
-                return 1;
-            }
-            if (d > decimate->lo) {
-                c++;
-                if (c > t) {
-                    av_log(ctx, AV_LOG_DEBUG, "lo:%d>=%d ", c, t);
-                    return 1;
-                }
-            }
-        }
-    }
-
-    av_log(ctx, AV_LOG_DEBUG, "lo:%d<%d ", c, t);
-    return 0;
-}
-
-/**
- * Tell if the frame should be decimated, for example if it is no much
- * different with respect to the reference frame ref.
- */
-static int decimate_frame(AVFilterContext *ctx,
-                          AVFrame *cur, AVFrame *ref)
-{
-    DecimateContext *decimate = ctx->priv;
-    int plane;
-
-    if (decimate->max_drop_count > 0 &&
-        decimate->drop_count >= decimate->max_drop_count)
-        return 0;
-    if (decimate->max_drop_count < 0 &&
-        (decimate->drop_count-1) > decimate->max_drop_count)
-        return 0;
-
-    for (plane = 0; ref->data[plane] && ref->linesize[plane]; plane++) {
-        /* use 8x8 SAD even on subsampled planes.  The blocks won't match up with
-         * luma blocks, but hopefully nobody is depending on this to catch
-         * localized chroma changes that wouldn't exceed the thresholds when
-         * diluted by using what's effectively a larger block size.
-         */
-        int vsub = plane == 1 || plane == 2 ? decimate->vsub : 0;
-        int hsub = plane == 1 || plane == 2 ? decimate->hsub : 0;
-        if (diff_planes(ctx,
-                        cur->data[plane], cur->linesize[plane],
-                        ref->data[plane], ref->linesize[plane],
-                        AV_CEIL_RSHIFT(ref->width,  hsub),
-                        AV_CEIL_RSHIFT(ref->height, vsub))) {
-            emms_c();
-            return 0;
-        }
-    }
-
-    emms_c();
-    return 1;
-}
-
-static av_cold int init(AVFilterContext *ctx)
-{
-    DecimateContext *decimate = ctx->priv;
-
-    decimate->sad = av_pixelutils_get_sad_fn(3, 3, 0, ctx); // 8x8, not aligned on blocksize
-    if (!decimate->sad)
-        return AVERROR(EINVAL);
-
-    av_log(ctx, AV_LOG_VERBOSE, "max_drop_count:%d hi:%d lo:%d frac:%f\n",
-           decimate->max_drop_count, decimate->hi, decimate->lo, decimate->frac);
-
-    return 0;
-}
-
-static av_cold void uninit(AVFilterContext *ctx)
-{
-    DecimateContext *decimate = ctx->priv;
-    av_frame_free(&decimate->ref);
-}
-
-static int query_formats(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_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,
-
-        AV_PIX_FMT_YUVA444P,
-        AV_PIX_FMT_YUVA422P,
-
-        AV_PIX_FMT_NONE
-    };
-    AVFilterFormats *fmts_list = ff_make_format_list(pix_fmts);
-    if (!fmts_list)
-        return AVERROR(ENOMEM);
-    return ff_set_common_formats(ctx, fmts_list);
-}
-
-static int config_input(AVFilterLink *inlink)
-{
-    AVFilterContext *ctx = inlink->dst;
-    DecimateContext *decimate = ctx->priv;
-    const AVPixFmtDescriptor *pix_desc = av_pix_fmt_desc_get(inlink->format);
-    decimate->hsub = pix_desc->log2_chroma_w;
-    decimate->vsub = pix_desc->log2_chroma_h;
-
-    return 0;
-}
-
-static int filter_frame(AVFilterLink *inlink, AVFrame *cur)
-{
-    DecimateContext *decimate = inlink->dst->priv;
-    AVFilterLink *outlink = inlink->dst->outputs[0];
-    int ret;
-
-    if (decimate->ref && decimate_frame(inlink->dst, cur, decimate->ref)) {
-        decimate->drop_count = FFMAX(1, decimate->drop_count+1);
-    } else {
-        av_frame_free(&decimate->ref);
-        decimate->ref = cur;
-        decimate->drop_count = FFMIN(-1, decimate->drop_count-1);
-
-        if ((ret = ff_filter_frame(outlink, av_frame_clone(cur))) < 0)
-            return ret;
-    }
-
-    av_log(inlink->dst, AV_LOG_DEBUG,
-           "%s pts:%s pts_time:%s drop_count:%d\n",
-           decimate->drop_count > 0 ? "drop" : "keep",
-           av_ts2str(cur->pts), av_ts2timestr(cur->pts, &inlink->time_base),
-           decimate->drop_count);
-
-    if (decimate->drop_count > 0)
-        av_frame_free(&cur);
-
-    return 0;
-}
-
-static const AVFilterPad mpdecimate_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .config_props = config_input,
-        .filter_frame = filter_frame,
-    },
-    { NULL }
-};
-
-static const AVFilterPad mpdecimate_outputs[] = {
-    {
-        .name          = "default",
-        .type          = AVMEDIA_TYPE_VIDEO,
-    },
-    { NULL }
-};
-
-AVFilter ff_vf_mpdecimate = {
-    .name          = "mpdecimate",
-    .description   = NULL_IF_CONFIG_SMALL("Remove near-duplicate frames."),
-    .init          = init,
-    .uninit        = uninit,
-    .priv_size     = sizeof(DecimateContext),
-    .priv_class    = &mpdecimate_class,
-    .query_formats = query_formats,
-    .inputs        = mpdecimate_inputs,
-    .outputs       = mpdecimate_outputs,
-};
diff --git a/libavfilter/vf_nnedi.c b/libavfilter/vf_nnedi.c
deleted file mode 100644
index 9bad99e9..0000000
--- a/libavfilter/vf_nnedi.c
+++ /dev/null
@@ -1,1211 +0,0 @@
-/*
- * Copyright (C) 2010-2011 Kevin Stone
- * Copyright (C) 2016 Paul B Mahol
- *
- * 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.
- */
-
-#include <float.h>
-
-#include "libavutil/common.h"
-#include "libavutil/float_dsp.h"
-#include "libavutil/imgutils.h"
-#include "libavutil/opt.h"
-#include "libavutil/pixdesc.h"
-#include "avfilter.h"
-#include "formats.h"
-#include "internal.h"
-#include "video.h"
-
-typedef struct FrameData {
-    uint8_t *paddedp[3];
-    int padded_stride[3];
-    int padded_width[3];
-    int padded_height[3];
-
-    uint8_t *dstp[3];
-    int dst_stride[3];
-
-    int field[3];
-
-    int32_t *lcount[3];
-    float *input;
-    float *temp;
-} FrameData;
-
-typedef struct NNEDIContext {
-    const AVClass *class;
-
-    char *weights_file;
-
-    AVFrame *src;
-    AVFrame *second;
-    AVFrame *dst;
-    int eof;
-    int64_t cur_pts;
-
-    AVFloatDSPContext *fdsp;
-    int nb_planes;
-    int linesize[4];
-    int planeheight[4];
-
-    float *weights0;
-    float *weights1[2];
-    int asize;
-    int nns;
-    int xdia;
-    int ydia;
-
-    // Parameters
-    int deint;
-    int field;
-    int process_plane;
-    int nsize;
-    int nnsparam;
-    int qual;
-    int etype;
-    int pscrn;
-    int fapprox;
-
-    int max_value;
-
-    void (*copy_pad)(const AVFrame *, FrameData *, struct NNEDIContext *, int);
-    void (*evalfunc_0)(struct NNEDIContext *, FrameData *);
-    void (*evalfunc_1)(struct NNEDIContext *, FrameData *);
-
-    // Functions used in evalfunc_0
-    void (*readpixels)(const uint8_t *, const int, float *);
-    void (*compute_network0)(struct NNEDIContext *s, const float *, const float *, uint8_t *);
-    int32_t (*process_line0)(const uint8_t *, int, uint8_t *, const uint8_t *, const int, const int, const int);
-
-    // Functions used in evalfunc_1
-    void (*extract)(const uint8_t *, const int, const int, const int, float *, float *);
-    void (*dot_prod)(struct NNEDIContext *, const float *, const float *, float *, const int, const int, const float *);
-    void (*expfunc)(float *, const int);
-    void (*wae5)(const float *, const int, float *);
-
-    FrameData frame_data;
-} NNEDIContext;
-
-#define OFFSET(x) offsetof(NNEDIContext, x)
-#define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
-
-static const AVOption nnedi_options[] = {
-    {"weights",  "set weights file", OFFSET(weights_file),  AV_OPT_TYPE_STRING, {.str="nnedi3_weights.bin"}, 0, 0, FLAGS },
-    {"deint",         "set which frames to deinterlace", OFFSET(deint),         AV_OPT_TYPE_INT, {.i64=0}, 0, 1, FLAGS, "deint" },
-        {"all",        "deinterlace all frames",                       0, AV_OPT_TYPE_CONST, {.i64=0}, 0, 0, FLAGS, "deint" },
-        {"interlaced", "only deinterlace frames marked as interlaced", 0, AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, FLAGS, "deint" },
-    {"field",  "set mode of operation", OFFSET(field),         AV_OPT_TYPE_INT, {.i64=-1}, -2, 3, FLAGS, "field" },
-        {"af", "use frame flags, both fields",  0, AV_OPT_TYPE_CONST, {.i64=-2}, 0, 0, FLAGS, "field" },
-        {"a",  "use frame flags, single field", 0, AV_OPT_TYPE_CONST, {.i64=-1}, 0, 0, FLAGS, "field" },
-        {"t",  "use top field only",            0, AV_OPT_TYPE_CONST, {.i64=0},  0, 0, FLAGS, "field" },
-        {"b",  "use bottom field only",         0, AV_OPT_TYPE_CONST, {.i64=1},  0, 0, FLAGS, "field" },
-        {"tf", "use both fields, top first",    0, AV_OPT_TYPE_CONST, {.i64=2}, 0, 0, FLAGS, "field" },
-        {"bf", "use both fields, bottom first", 0, AV_OPT_TYPE_CONST, {.i64=3}, 0, 0, FLAGS, "field" },
-    {"planes", "set which planes to process", OFFSET(process_plane), AV_OPT_TYPE_INT, {.i64=7}, 0, 7, FLAGS },
-    {"nsize",  "set size of local neighborhood around each pixel, used by the predictor neural network", OFFSET(nsize), AV_OPT_TYPE_INT, {.i64=6}, 0, 6, FLAGS, "nsize" },
-        {"s8x6",     NULL, 0, AV_OPT_TYPE_CONST, {.i64=0}, 0, 0, FLAGS, "nsize" },
-        {"s16x6",    NULL, 0, AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, FLAGS, "nsize" },
-        {"s32x6",    NULL, 0, AV_OPT_TYPE_CONST, {.i64=2}, 0, 0, FLAGS, "nsize" },
-        {"s48x6",    NULL, 0, AV_OPT_TYPE_CONST, {.i64=3}, 0, 0, FLAGS, "nsize" },
-        {"s8x4",     NULL, 0, AV_OPT_TYPE_CONST, {.i64=4}, 0, 0, FLAGS, "nsize" },
-        {"s16x4",    NULL, 0, AV_OPT_TYPE_CONST, {.i64=5}, 0, 0, FLAGS, "nsize" },
-        {"s32x4",    NULL, 0, AV_OPT_TYPE_CONST, {.i64=6}, 0, 0, FLAGS, "nsize" },
-    {"nns",    "set number of neurons in predictor neural network", OFFSET(nnsparam), AV_OPT_TYPE_INT, {.i64=1}, 0, 4, FLAGS, "nns" },
-        {"n16",       NULL, 0, AV_OPT_TYPE_CONST, {.i64=0}, 0, 0, FLAGS, "nns" },
-        {"n32",       NULL, 0, AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, FLAGS, "nns" },
-        {"n64",       NULL, 0, AV_OPT_TYPE_CONST, {.i64=2}, 0, 0, FLAGS, "nns" },
-        {"n128",      NULL, 0, AV_OPT_TYPE_CONST, {.i64=3}, 0, 0, FLAGS, "nns" },
-        {"n256",      NULL, 0, AV_OPT_TYPE_CONST, {.i64=4}, 0, 0, FLAGS, "nns" },
-    {"qual",  "set quality", OFFSET(qual), AV_OPT_TYPE_INT, {.i64=1}, 1, 2, FLAGS, "qual" },
-        {"fast", NULL, 0, AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, FLAGS, "qual" },
-        {"slow", NULL, 0, AV_OPT_TYPE_CONST, {.i64=2}, 0, 0, FLAGS, "qual" },
-    {"etype", "set which set of weights to use in the predictor", OFFSET(etype), AV_OPT_TYPE_INT, {.i64=0}, 0, 1, FLAGS, "etype" },
-        {"a",  "weights trained to minimize absolute error", 0, AV_OPT_TYPE_CONST, {.i64=0}, 0, 0, FLAGS, "etype" },
-        {"s",  "weights trained to minimize squared error",  0, AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, FLAGS, "etype" },
-    {"pscrn", "set prescreening", OFFSET(pscrn), AV_OPT_TYPE_INT, {.i64=2}, 0, 2, FLAGS, "pscrn" },
-        {"none",      NULL, 0, AV_OPT_TYPE_CONST, {.i64=0}, 0, 0, FLAGS, "pscrn" },
-        {"original",  NULL, 0, AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, FLAGS, "pscrn" },
-        {"new",       NULL, 0, AV_OPT_TYPE_CONST, {.i64=2}, 0, 0, FLAGS, "pscrn" },
-    {"fapprox",       NULL, OFFSET(fapprox),       AV_OPT_TYPE_INT, {.i64=0}, 0, 3, FLAGS },
-    { NULL }
-};
-
-AVFILTER_DEFINE_CLASS(nnedi);
-
-static int config_input(AVFilterLink *inlink)
-{
-    AVFilterContext *ctx = inlink->dst;
-    NNEDIContext *s = ctx->priv;
-    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(inlink->format);
-    int ret;
-
-    s->nb_planes = av_pix_fmt_count_planes(inlink->format);
-    if ((ret = av_image_fill_linesizes(s->linesize, inlink->format, inlink->w)) < 0)
-        return ret;
-
-    s->planeheight[1] = s->planeheight[2] = AV_CEIL_RSHIFT(inlink->h, desc->log2_chroma_h);
-    s->planeheight[0] = s->planeheight[3] = inlink->h;
-
-    return 0;
-}
-
-static int config_output(AVFilterLink *outlink)
-{
-    AVFilterContext *ctx = outlink->src;
-    NNEDIContext *s = ctx->priv;
-
-    outlink->time_base.num = ctx->inputs[0]->time_base.num;
-    outlink->time_base.den = ctx->inputs[0]->time_base.den * 2;
-    outlink->w             = ctx->inputs[0]->w;
-    outlink->h             = ctx->inputs[0]->h;
-
-    if (s->field > 1 || s->field == -2)
-        outlink->frame_rate = av_mul_q(ctx->inputs[0]->frame_rate,
-                                       (AVRational){2, 1});
-
-    return 0;
-}
-
-static int query_formats(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_YUVJ444P, AV_PIX_FMT_YUVJ440P,
-        AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ420P,
-        AV_PIX_FMT_YUVJ411P,
-        AV_PIX_FMT_GBRP,
-        AV_PIX_FMT_GRAY8,
-        AV_PIX_FMT_NONE
-    };
-
-    AVFilterFormats *fmts_list = ff_make_format_list(pix_fmts);
-    if (!fmts_list)
-        return AVERROR(ENOMEM);
-    return ff_set_common_formats(ctx, fmts_list);
-}
-
-static void copy_pad(const AVFrame *src, FrameData *frame_data, NNEDIContext *s, int fn)
-{
-    const int off = 1 - fn;
-    int plane, y, x;
-
-    for (plane = 0; plane < s->nb_planes; plane++) {
-        const uint8_t *srcp = (const uint8_t *)src->data[plane];
-        uint8_t *dstp = (uint8_t *)frame_data->paddedp[plane];
-
-        const int src_stride = src->linesize[plane];
-        const int dst_stride = frame_data->padded_stride[plane];
-
-        const int src_height = s->planeheight[plane];
-        const int dst_height = frame_data->padded_height[plane];
-
-        const int src_width = s->linesize[plane];
-        const int dst_width = frame_data->padded_width[plane];
-
-        int c = 4;
-
-        if (!(s->process_plane & (1 << plane)))
-            continue;
-
-        // Copy.
-        for (y = off; y < src_height; y += 2)
-            memcpy(dstp + 32 + (6 + y) * dst_stride,
-                   srcp + y * src_stride,
-                   src_width * sizeof(uint8_t));
-
-        // And pad.
-        dstp += (6 + off) * dst_stride;
-        for (y = 6 + off; y < dst_height - 6; y += 2) {
-            int c = 2;
-
-            for (x = 0; x < 32; x++)
-                dstp[x] = dstp[64 - x];
-
-            for (x = dst_width - 32; x < dst_width; x++, c += 2)
-                dstp[x] = dstp[x - c];
-
-            dstp += dst_stride * 2;
-        }
-
-        dstp = (uint8_t *)frame_data->paddedp[plane];
-        for (y = off; y < 6; y += 2)
-            memcpy(dstp + y * dst_stride,
-                   dstp + (12 + 2 * off - y) * dst_stride,
-                   dst_width * sizeof(uint8_t));
-
-        for (y = dst_height - 6 + off; y < dst_height; y += 2, c += 4)
-            memcpy(dstp + y * dst_stride,
-                   dstp + (y - c) * dst_stride,
-                   dst_width * sizeof(uint8_t));
-    }
-}
-
-static void elliott(float *data, const int n)
-{
-    int i;
-
-    for (i = 0; i < n; i++)
-        data[i] = data[i] / (1.0f + FFABS(data[i]));
-}
-
-static void dot_prod(NNEDIContext *s, const float *data, const float *weights, float *vals, const int n, const int len, const float *scale)
-{
-    int i;
-
-    for (i = 0; i < n; i++) {
-        float sum;
-
-        sum = s->fdsp->scalarproduct_float(data, &weights[i * len], len);
-
-        vals[i] = sum * scale[0] + weights[n * len + i];
-    }
-}
-
-static void dot_prods(NNEDIContext *s, const float *dataf, const float *weightsf, float *vals, const int n, const int len, const float *scale)
-{
-    const int16_t *data = (int16_t *)dataf;
-    const int16_t *weights = (int16_t *)weightsf;
-    const float *wf = (float *)&weights[n * len];
-    int i, j;
-
-    for (i = 0; i < n; i++) {
-        int sum = 0, off = ((i >> 2) << 3) + (i & 3);
-        for (j = 0; j < len; j++)
-            sum += data[j] * weights[i * len + j];
-
-        vals[i] = sum * wf[off] * scale[0] + wf[off + 4];
-    }
-}
-
-static void compute_network0(NNEDIContext *s, const float *input, const float *weights, uint8_t *d)
-{
-    float t, temp[12], scale = 1.0f;
-
-    dot_prod(s, input, weights, temp, 4, 48, &scale);
-    t = temp[0];
-    elliott(temp, 4);
-    temp[0] = t;
-    dot_prod(s, temp, weights + 4 * 49, temp + 4, 4, 4, &scale);
-    elliott(temp + 4, 4);
-    dot_prod(s, temp, weights + 4 * 49 + 4 * 5, temp + 8, 4, 8, &scale);
-    if (FFMAX(temp[10], temp[11]) <= FFMAX(temp[8], temp[9]))
-        d[0] = 1;
-    else
-        d[0] = 0;
-}
-
-static void compute_network0_i16(NNEDIContext *s, const float *inputf, const float *weightsf, uint8_t *d)
-{
-    const float *wf = weightsf + 2 * 48;
-    float t, temp[12], scale = 1.0f;
-
-    dot_prods(s, inputf, weightsf, temp, 4, 48, &scale);
-    t = temp[0];
-    elliott(temp, 4);
-    temp[0] = t;
-    dot_prod(s, temp, wf + 8, temp + 4, 4, 4, &scale);
-    elliott(temp + 4, 4);
-    dot_prod(s, temp, wf + 8 + 4 * 5, temp + 8, 4, 8, &scale);
-    if (FFMAX(temp[10], temp[11]) <= FFMAX(temp[8], temp[9]))
-        d[0] = 1;
-    else
-        d[0] = 0;
-}
-
-static void pixel2float48(const uint8_t *t8, const int pitch, float *p)
-{
-    const uint8_t *t = (const uint8_t *)t8;
-    int y, x;
-
-    for (y = 0; y < 4; y++)
-        for (x = 0; x < 12; x++)
-            p[y * 12 + x] = t[y * pitch * 2 + x];
-}
-
-static void byte2word48(const uint8_t *t, const int pitch, float *pf)
-{
-    int16_t *p = (int16_t *)pf;
-    int y, x;
-
-    for (y = 0; y < 4; y++)
-        for (x = 0; x < 12; x++)
-            p[y * 12 + x] = t[y * pitch * 2 + x];
-}
-
-static int32_t process_line0(const uint8_t *tempu, int width, uint8_t *dstp8, const uint8_t *src3p8, const int src_pitch, const int max_value, const int chroma)
-{
-    uint8_t *dstp = (uint8_t *)dstp8;
-    const uint8_t *src3p = (const uint8_t *)src3p8;
-    int minimum = 0;
-    int maximum = max_value - 1; // Technically the -1 is only needed for 8 and 16 bit input.
-    int count = 0, x;
-    for (x = 0; x < width; x++) {
-        if (tempu[x]) {
-            int tmp = 19 * (src3p[x + src_pitch * 2] + src3p[x + src_pitch * 4]) - 3 * (src3p[x] + src3p[x + src_pitch * 6]);
-            tmp /= 32;
-            dstp[x] = FFMAX(FFMIN(tmp, maximum), minimum);
-        } else {
-            dstp[x] = 255;
-            count++;
-        }
-    }
-    return count;
-}
-
-// new prescreener functions
-static void byte2word64(const uint8_t *t, const int pitch, float *p)
-{
-    int16_t *ps = (int16_t *)p;
-    int y, x;
-
-    for (y = 0; y < 4; y++)
-        for (x = 0; x < 16; x++)
-            ps[y * 16 + x] = t[y * pitch * 2 + x];
-}
-
-static void compute_network0new(NNEDIContext *s, const float *datai, const float *weights, uint8_t *d)
-{
-    int16_t *data = (int16_t *)datai;
-    int16_t *ws = (int16_t *)weights;
-    float *wf = (float *)&ws[4 * 64];
-    float vals[8];
-    int mask, i, j;
-
-    for (i = 0; i < 4; i++) {
-        int sum = 0;
-        float t;
-
-        for (j = 0; j < 64; j++)
-            sum += data[j] * ws[(i << 3) + ((j >> 3) << 5) + (j & 7)];
-        t = sum * wf[i] + wf[4 + i];
-        vals[i] = t / (1.0f + FFABS(t));
-    }
-
-    for (i = 0; i < 4; i++) {
-        float sum = 0.0f;
-
-        for (j = 0; j < 4; j++)
-            sum += vals[j] * wf[8 + i + (j << 2)];
-        vals[4 + i] = sum + wf[8 + 16 + i];
-    }
-
-    mask = 0;
-    for (i = 0; i < 4; i++) {
-        if (vals[4 + i] > 0.0f)
-            mask |= (0x1 << (i << 3));
-    }
-
-    ((int *)d)[0] = mask;
-}
-
-static void evalfunc_0(NNEDIContext *s, FrameData *frame_data)
-{
-    float *input = frame_data->input;
-    const float *weights0 = s->weights0;
-    float *temp = frame_data->temp;
-    uint8_t *tempu = (uint8_t *)temp;
-    int plane, x, y;
-
-    // And now the actual work.
-    for (plane = 0; plane < s->nb_planes; plane++) {
-        const uint8_t *srcp = (const uint8_t *)frame_data->paddedp[plane];
-        const int src_stride = frame_data->padded_stride[plane] / sizeof(uint8_t);
-
-        const int width = frame_data->padded_width[plane];
-        const int height = frame_data->padded_height[plane];
-
-        uint8_t *dstp = (uint8_t *)frame_data->dstp[plane];
-        const int dst_stride = frame_data->dst_stride[plane] / sizeof(uint8_t);
-        const uint8_t *src3p;
-        int ystart, ystop;
-        int32_t *lcount;
-
-        if (!(s->process_plane & (1 << plane)))
-            continue;
-
-        for (y = 1 - frame_data->field[plane]; y < height - 12; y += 2) {
-            memcpy(dstp + y * dst_stride,
-                   srcp + 32 + (6 + y) * src_stride,
-                   (width - 64) * sizeof(uint8_t));
-
-        }
-
-        ystart = 6 + frame_data->field[plane];
-        ystop = height - 6;
-        srcp += ystart * src_stride;
-        dstp += (ystart - 6) * dst_stride - 32;
-        src3p = srcp - src_stride * 3;
-        lcount = frame_data->lcount[plane] - 6;
-
-        if (s->pscrn == 1) { // original
-            for (y = ystart; y < ystop; y += 2) {
-                for (x = 32; x < width - 32; x++) {
-                    s->readpixels((const uint8_t *)(src3p + x - 5), src_stride, input);
-                    s->compute_network0(s, input, weights0, tempu+x);
-                }
-                lcount[y] += s->process_line0(tempu + 32, width - 64, (uint8_t *)(dstp + 32), (const uint8_t *)(src3p + 32), src_stride, s->max_value, plane);
-                src3p += src_stride * 2;
-                dstp += dst_stride * 2;
-            }
-        } else if (s->pscrn > 1) { // new
-            for (y = ystart; y < ystop; y += 2) {
-                for (x = 32; x < width - 32; x += 4) {
-                    s->readpixels((const uint8_t *)(src3p + x - 6), src_stride, input);
-                    s->compute_network0(s, input, weights0, tempu + x);
-                }
-                lcount[y] += s->process_line0(tempu + 32, width - 64, (uint8_t *)(dstp + 32), (const uint8_t *)(src3p + 32), src_stride, s->max_value, plane);
-                src3p += src_stride * 2;
-                dstp += dst_stride * 2;
-            }
-        } else { // no prescreening
-            for (y = ystart; y < ystop; y += 2) {
-                memset(dstp + 32, 255, (width - 64) * sizeof(uint8_t));
-                lcount[y] += width - 64;
-                dstp += dst_stride * 2;
-            }
-        }
-    }
-}
-
-static void extract_m8(const uint8_t *srcp8, const int stride, const int xdia, const int ydia, float *mstd, float *input)
-{
-    // uint8_t or uint16_t or float
-    const uint8_t *srcp = (const uint8_t *)srcp8;
-    float scale;
-    double tmp;
-
-    // int32_t or int64_t or double
-    int64_t sum = 0, sumsq = 0;
-    int y, x;
-
-    for (y = 0; y < ydia; y++) {
-        const uint8_t *srcpT = srcp + y * stride * 2;
-
-        for (x = 0; x < xdia; x++) {
-            sum += srcpT[x];
-            sumsq += (uint32_t)srcpT[x] * (uint32_t)srcpT[x];
-            input[x] = srcpT[x];
-        }
-        input += xdia;
-    }
-    scale = 1.0f / (xdia * ydia);
-    mstd[0] = sum * scale;
-    tmp = (double)sumsq * scale - (double)mstd[0] * mstd[0];
-    mstd[3] = 0.0f;
-    if (tmp <= FLT_EPSILON)
-        mstd[1] = mstd[2] = 0.0f;
-    else {
-        mstd[1] = sqrt(tmp);
-        mstd[2] = 1.0f / mstd[1];
-    }
-}
-
-static void extract_m8_i16(const uint8_t *srcp, const int stride, const int xdia, const int ydia, float *mstd, float *inputf)
-{
-    int16_t *input = (int16_t *)inputf;
-    float scale;
-    int sum = 0, sumsq = 0;
-    int y, x;
-
-    for (y = 0; y < ydia; y++) {
-        const uint8_t *srcpT = srcp + y * stride * 2;
-        for (x = 0; x < xdia; x++) {
-            sum += srcpT[x];
-            sumsq += srcpT[x] * srcpT[x];
-            input[x] = srcpT[x];
-        }
-        input += xdia;
-    }
-    scale = 1.0f / (float)(xdia * ydia);
-    mstd[0] = sum * scale;
-    mstd[1] = sumsq * scale - mstd[0] * mstd[0];
-    mstd[3] = 0.0f;
-    if (mstd[1] <= FLT_EPSILON)
-        mstd[1] = mstd[2] = 0.0f;
-    else {
-        mstd[1] = sqrt(mstd[1]);
-        mstd[2] = 1.0f / mstd[1];
-    }
-}
-
-
-static const float exp_lo = -80.0f;
-static const float exp_hi = +80.0f;
-
-static void e2_m16(float *s, const int n)
-{
-    int i;
-
-    for (i = 0; i < n; i++)
-        s[i] = exp(av_clipf(s[i], exp_lo, exp_hi));
-}
-
-const float min_weight_sum = 1e-10f;
-
-static void weighted_avg_elliott_mul5_m16(const float *w, const int n, float *mstd)
-{
-    float vsum = 0.0f, wsum = 0.0f;
-    int i;
-
-    for (i = 0; i < n; i++) {
-        vsum += w[i] * (w[n + i] / (1.0f + FFABS(w[n + i])));
-        wsum += w[i];
-    }
-    if (wsum > min_weight_sum)
-        mstd[3] += ((5.0f * vsum) / wsum) * mstd[1] + mstd[0];
-    else
-        mstd[3] += mstd[0];
-}
-
-
-static void evalfunc_1(NNEDIContext *s, FrameData *frame_data)
-{
-    float *input = frame_data->input;
-    float *temp = frame_data->temp;
-    float **weights1 = s->weights1;
-    const int qual = s->qual;
-    const int asize = s->asize;
-    const int nns = s->nns;
-    const int xdia = s->xdia;
-    const int xdiad2m1 = (xdia / 2) - 1;
-    const int ydia = s->ydia;
-    const float scale = 1.0f / (float)qual;
-    int plane, y, x, i;
-
-    for (plane = 0; plane < s->nb_planes; plane++) {
-        const uint8_t *srcp = (const uint8_t *)frame_data->paddedp[plane];
-        const int src_stride = frame_data->padded_stride[plane] / sizeof(uint8_t);
-
-        const int width = frame_data->padded_width[plane];
-        const int height = frame_data->padded_height[plane];
-
-        uint8_t *dstp = (uint8_t *)frame_data->dstp[plane];
-        const int dst_stride = frame_data->dst_stride[plane] / sizeof(uint8_t);
-
-        const int ystart = frame_data->field[plane];
-        const int ystop = height - 12;
-        const uint8_t *srcpp;
-
-        if (!(s->process_plane & (1 << plane)))
-            continue;
-
-        srcp += (ystart + 6) * src_stride;
-        dstp += ystart * dst_stride - 32;
-        srcpp = srcp - (ydia - 1) * src_stride - xdiad2m1;
-
-        for (y = ystart; y < ystop; y += 2) {
-            for (x = 32; x < width - 32; x++) {
-                float mstd[4];
-
-                if (dstp[x] != 255)
-                    continue;
-
-                s->extract((const uint8_t *)(srcpp + x), src_stride, xdia, ydia, mstd, input);
-                for (i = 0; i < qual; i++) {
-                    s->dot_prod(s, input, weights1[i], temp, nns * 2, asize, mstd + 2);
-                    s->expfunc(temp, nns);
-                    s->wae5(temp, nns, mstd);
-                }
-
-                dstp[x] = FFMIN(FFMAX((int)(mstd[3] * scale + 0.5f), 0), s->max_value);
-            }
-            srcpp += src_stride * 2;
-            dstp += dst_stride * 2;
-        }
-    }
-}
-
-#define NUM_NSIZE 7
-#define NUM_NNS 5
-
-static int roundds(const double f)
-{
-    if (f - floor(f) >= 0.5)
-        return FFMIN((int)ceil(f), 32767);
-    return FFMAX((int)floor(f), -32768);
-}
-
-static void select_functions(NNEDIContext *s)
-{
-    s->copy_pad = copy_pad;
-    s->evalfunc_0 = evalfunc_0;
-    s->evalfunc_1 = evalfunc_1;
-
-    // evalfunc_0
-    s->process_line0 = process_line0;
-
-    if (s->pscrn < 2) { // original prescreener
-        if (s->fapprox & 1) { // int16 dot products
-            s->readpixels = byte2word48;
-            s->compute_network0 = compute_network0_i16;
-        } else {
-            s->readpixels = pixel2float48;
-            s->compute_network0 = compute_network0;
-        }
-    } else { // new prescreener
-        // only int16 dot products
-        s->readpixels = byte2word64;
-        s->compute_network0 = compute_network0new;
-    }
-
-    // evalfunc_1
-    s->wae5 = weighted_avg_elliott_mul5_m16;
-
-    if (s->fapprox & 2) { // use int16 dot products
-        s->extract = extract_m8_i16;
-        s->dot_prod = dot_prods;
-    } else { // use float dot products
-        s->extract = extract_m8;
-        s->dot_prod = dot_prod;
-    }
-
-    s->expfunc = e2_m16;
-}
-
-static int modnpf(const int m, const int n)
-{
-    if ((m % n) == 0)
-        return m;
-    return m + n - (m % n);
-}
-
-static int get_frame(AVFilterContext *ctx, int is_second)
-{
-    NNEDIContext *s = ctx->priv;
-    AVFilterLink *outlink = ctx->outputs[0];
-    AVFrame *src = s->src;
-    FrameData *frame_data;
-    int effective_field = s->field;
-    size_t temp_size;
-    int field_n;
-    int plane;
-
-    if (effective_field > 1)
-        effective_field -= 2;
-    else if (effective_field < 0)
-        effective_field += 2;
-
-    if (s->field < 0 && src->interlaced_frame && src->top_field_first == 0)
-        effective_field = 0;
-    else if (s->field < 0 && src->interlaced_frame && src->top_field_first == 1)
-        effective_field = 1;
-    else
-        effective_field = !effective_field;
-
-    if (s->field > 1 || s->field == -2) {
-        if (is_second) {
-            field_n = (effective_field == 0);
-        } else {
-            field_n = (effective_field == 1);
-        }
-    } else {
-        field_n = effective_field;
-    }
-
-    s->dst = ff_get_video_buffer(outlink, outlink->w, outlink->h);
-    if (!s->dst)
-        return AVERROR(ENOMEM);
-    av_frame_copy_props(s->dst, src);
-    s->dst->interlaced_frame = 0;
-
-    frame_data = &s->frame_data;
-
-    for (plane = 0; plane < s->nb_planes; plane++) {
-        int dst_height = s->planeheight[plane];
-        int dst_width = s->linesize[plane];
-
-        const int min_alignment = 16;
-        const int min_pad = 10;
-
-        if (!(s->process_plane & (1 << plane))) {
-            av_image_copy_plane(s->dst->data[plane], s->dst->linesize[plane],
-                                src->data[plane], src->linesize[plane],
-                                s->linesize[plane],
-                                s->planeheight[plane]);
-            continue;
-        }
-
-        frame_data->padded_width[plane]  = dst_width + 64;
-        frame_data->padded_height[plane] = dst_height + 12;
-        frame_data->padded_stride[plane] = modnpf(frame_data->padded_width[plane] + min_pad, min_alignment); // TODO: maybe min_pad is in pixels too?
-        if (!frame_data->paddedp[plane]) {
-            frame_data->paddedp[plane] = av_malloc_array(frame_data->padded_stride[plane], frame_data->padded_height[plane]);
-            if (!frame_data->paddedp[plane])
-                return AVERROR(ENOMEM);
-        }
-
-        frame_data->dstp[plane] = s->dst->data[plane];
-        frame_data->dst_stride[plane] = s->dst->linesize[plane];
-
-        if (!frame_data->lcount[plane]) {
-            frame_data->lcount[plane] = av_calloc(dst_height, sizeof(int32_t) * 16);
-            if (!frame_data->lcount[plane])
-                return AVERROR(ENOMEM);
-        } else {
-            memset(frame_data->lcount[plane], 0, dst_height * sizeof(int32_t) * 16);
-        }
-
-        frame_data->field[plane] = field_n;
-    }
-
-    if (!frame_data->input) {
-        frame_data->input = av_malloc(512 * sizeof(float));
-        if (!frame_data->input)
-            return AVERROR(ENOMEM);
-    }
-    // evalfunc_0 requires at least padded_width[0] bytes.
-    // evalfunc_1 requires at least 512 floats.
-    if (!frame_data->temp) {
-        temp_size = FFMAX(frame_data->padded_width[0], 512 * sizeof(float));
-        frame_data->temp = av_malloc(temp_size);
-        if (!frame_data->temp)
-            return AVERROR(ENOMEM);
-    }
-
-    // Copy src to a padded "frame" in frame_data and mirror the edges.
-    s->copy_pad(src, frame_data, s, field_n);
-
-    // Handles prescreening and the cubic interpolation.
-    s->evalfunc_0(s, frame_data);
-
-    // The rest.
-    s->evalfunc_1(s, frame_data);
-
-    return 0;
-}
-
-static int filter_frame(AVFilterLink *inlink, AVFrame *src)
-{
-    AVFilterContext *ctx = inlink->dst;
-    AVFilterLink *outlink = ctx->outputs[0];
-    NNEDIContext *s = ctx->priv;
-    int ret;
-
-    if ((s->field > 1 ||
-         s->field == -2) && !s->second) {
-        goto second;
-    } else if (s->field > 1 ||
-               s->field == -2) {
-        AVFrame *dst;
-
-        s->src = s->second;
-        ret = get_frame(ctx, 1);
-        if (ret < 0) {
-            av_frame_free(&s->dst);
-            av_frame_free(&s->second);
-            s->src = NULL;
-            return ret;
-        }
-        dst = s->dst;
-
-        if (src->pts != AV_NOPTS_VALUE &&
-            dst->pts != AV_NOPTS_VALUE)
-            dst->pts += src->pts;
-        else
-            dst->pts = AV_NOPTS_VALUE;
-
-        ret = ff_filter_frame(outlink, dst);
-        if (ret < 0)
-            return ret;
-        if (s->eof)
-            return 0;
-        s->cur_pts = s->second->pts;
-        av_frame_free(&s->second);
-second:
-        if ((s->deint && src->interlaced_frame &&
-             !ctx->is_disabled) ||
-            (!s->deint && !ctx->is_disabled)) {
-            s->second = src;
-        }
-    }
-
-    if ((s->deint && !src->interlaced_frame) || ctx->is_disabled) {
-        AVFrame *dst = av_frame_clone(src);
-        if (!dst) {
-            av_frame_free(&src);
-            av_frame_free(&s->second);
-            return AVERROR(ENOMEM);
-        }
-
-        if (s->field > 1 || s->field == -2) {
-            av_frame_free(&s->second);
-            if ((s->deint && src->interlaced_frame) ||
-                (!s->deint))
-                s->second = src;
-        } else {
-            av_frame_free(&src);
-        }
-        if (dst->pts != AV_NOPTS_VALUE)
-            dst->pts *= 2;
-        return ff_filter_frame(outlink, dst);
-    }
-
-    s->src = src;
-    ret = get_frame(ctx, 0);
-    if (ret < 0) {
-        av_frame_free(&s->dst);
-        av_frame_free(&s->src);
-        av_frame_free(&s->second);
-        return ret;
-    }
-
-    if (src->pts != AV_NOPTS_VALUE)
-        s->dst->pts = src->pts * 2;
-    if (s->field <= 1 && s->field > -2) {
-        av_frame_free(&src);
-        s->src = NULL;
-    }
-
-    return ff_filter_frame(outlink, s->dst);
-}
-
-static int request_frame(AVFilterLink *link)
-{
-    AVFilterContext *ctx = link->src;
-    NNEDIContext *s = ctx->priv;
-    int ret;
-
-    if (s->eof)
-        return AVERROR_EOF;
-
-    ret  = ff_request_frame(ctx->inputs[0]);
-
-    if (ret == AVERROR_EOF && s->second) {
-        AVFrame *next = av_frame_clone(s->second);
-
-        if (!next)
-            return AVERROR(ENOMEM);
-
-        next->pts = s->second->pts * 2 - s->cur_pts;
-        s->eof = 1;
-
-        filter_frame(ctx->inputs[0], next);
-    } else if (ret < 0) {
-        return ret;
-    }
-
-    return 0;
-}
-
-static av_cold int init(AVFilterContext *ctx)
-{
-    NNEDIContext *s = ctx->priv;
-    FILE *weights_file = NULL;
-    int64_t expected_size = 13574928;
-    int64_t weights_size;
-    float *bdata;
-    size_t bytes_read;
-    const int xdia_table[NUM_NSIZE] = { 8, 16, 32, 48, 8, 16, 32 };
-    const int ydia_table[NUM_NSIZE] = { 6, 6, 6, 6, 4, 4, 4 };
-    const int nns_table[NUM_NNS] = { 16, 32, 64, 128, 256 };
-    const int dims0 = 49 * 4 + 5 * 4 + 9 * 4;
-    const int dims0new = 4 * 65 + 4 * 5;
-    const int dims1 = nns_table[s->nnsparam] * 2 * (xdia_table[s->nsize] * ydia_table[s->nsize] + 1);
-    int dims1tsize = 0;
-    int dims1offset = 0;
-    int ret = 0, i, j, k;
-
-    weights_file = fopen(s->weights_file, "rb");
-    if (!weights_file) {
-        av_log(ctx, AV_LOG_ERROR, "No weights file provided, aborting!\n");
-        return AVERROR(EINVAL);
-    }
-
-    if (fseek(weights_file, 0, SEEK_END)) {
-        av_log(ctx, AV_LOG_ERROR, "Couldn't seek to the end of weights file.\n");
-        fclose(weights_file);
-        return AVERROR(EINVAL);
-    }
-
-    weights_size = ftell(weights_file);
-
-    if (weights_size == -1) {
-        fclose(weights_file);
-        av_log(ctx, AV_LOG_ERROR, "Couldn't get size of weights file.\n");
-        return AVERROR(EINVAL);
-    } else if (weights_size != expected_size) {
-        fclose(weights_file);
-        av_log(ctx, AV_LOG_ERROR, "Unexpected weights file size.\n");
-        return AVERROR(EINVAL);
-    }
-
-    if (fseek(weights_file, 0, SEEK_SET)) {
-        fclose(weights_file);
-        av_log(ctx, AV_LOG_ERROR, "Couldn't seek to the start of weights file.\n");
-        return AVERROR(EINVAL);
-    }
-
-    bdata = (float *)av_malloc(expected_size);
-    if (!bdata) {
-        fclose(weights_file);
-        return AVERROR(ENOMEM);
-    }
-
-    bytes_read = fread(bdata, 1, expected_size, weights_file);
-
-    if (bytes_read != (size_t)expected_size) {
-        fclose(weights_file);
-        ret = AVERROR_INVALIDDATA;
-        av_log(ctx, AV_LOG_ERROR, "Couldn't read weights file.\n");
-        goto fail;
-    }
-
-    fclose(weights_file);
-
-    for (j = 0; j < NUM_NNS; j++) {
-        for (i = 0; i < NUM_NSIZE; i++) {
-            if (i == s->nsize && j == s->nnsparam)
-                dims1offset = dims1tsize;
-            dims1tsize += nns_table[j] * 2 * (xdia_table[i] * ydia_table[i] + 1) * 2;
-        }
-    }
-
-    s->weights0 = av_malloc_array(FFMAX(dims0, dims0new), sizeof(float));
-    if (!s->weights0) {
-        ret = AVERROR(ENOMEM);
-        goto fail;
-    }
-
-    for (i = 0; i < 2; i++) {
-        s->weights1[i] = av_malloc_array(dims1, sizeof(float));
-        if (!s->weights1[i]) {
-            ret = AVERROR(ENOMEM);
-            goto fail;
-        }
-    }
-
-    // Adjust prescreener weights
-    if (s->pscrn >= 2) {// using new prescreener
-        const float *bdw;
-        int16_t *ws;
-        float *wf;
-        double mean[4] = { 0.0, 0.0, 0.0, 0.0 };
-        int *offt = av_calloc(4 * 64, sizeof(int));
-
-        if (!offt) {
-            ret = AVERROR(ENOMEM);
-            goto fail;
-        }
-
-        for (j = 0; j < 4; j++)
-            for (k = 0; k < 64; k++)
-                offt[j * 64 + k] = ((k >> 3) << 5) + ((j & 3) << 3) + (k & 7);
-
-        bdw = bdata + dims0 + dims0new * (s->pscrn - 2);
-        ws = (int16_t *)s->weights0;
-        wf = (float *)&ws[4 * 64];
-        // Calculate mean weight of each first layer neuron
-        for (j = 0; j < 4; j++) {
-            double cmean = 0.0;
-            for (k = 0; k < 64; k++)
-                cmean += bdw[offt[j * 64 + k]];
-            mean[j] = cmean / 64.0;
-        }
-        // Factor mean removal and 1.0/127.5 scaling
-        // into first layer weights. scale to int16 range
-        for (j = 0; j < 4; j++) {
-            double scale, mval = 0.0;
-
-            for (k = 0; k < 64; k++)
-                mval = FFMAX(mval, FFABS((bdw[offt[j * 64 + k]] - mean[j]) / 127.5));
-            scale = 32767.0 / mval;
-            for (k = 0; k < 64; k++)
-                ws[offt[j * 64 + k]] = roundds(((bdw[offt[j * 64 + k]] - mean[j]) / 127.5) * scale);
-            wf[j] = (float)(mval / 32767.0);
-        }
-        memcpy(wf + 4, bdw + 4 * 64, (dims0new - 4 * 64) * sizeof(float));
-        av_free(offt);
-    } else { // using old prescreener
-        double mean[4] = { 0.0, 0.0, 0.0, 0.0 };
-        // Calculate mean weight of each first layer neuron
-        for (j = 0; j < 4; j++) {
-            double cmean = 0.0;
-            for (k = 0; k < 48; k++)
-                cmean += bdata[j * 48 + k];
-            mean[j] = cmean / 48.0;
-        }
-        if (s->fapprox & 1) {// use int16 dot products in first layer
-            int16_t *ws = (int16_t *)s->weights0;
-            float *wf = (float *)&ws[4 * 48];
-            // Factor mean removal and 1.0/127.5 scaling
-            // into first layer weights. scale to int16 range
-            for (j = 0; j < 4; j++) {
-                double scale, mval = 0.0;
-                for (k = 0; k < 48; k++)
-                    mval = FFMAX(mval, FFABS((bdata[j * 48 + k] - mean[j]) / 127.5));
-                scale = 32767.0 / mval;
-                for (k = 0; k < 48; k++)
-                    ws[j * 48 + k] = roundds(((bdata[j * 48 + k] - mean[j]) / 127.5) * scale);
-                wf[j] = (float)(mval / 32767.0);
-            }
-            memcpy(wf + 4, bdata + 4 * 48, (dims0 - 4 * 48) * sizeof(float));
-        } else {// use float dot products in first layer
-            double half = (1 << 8) - 1;
-
-            half /= 2;
-
-            // Factor mean removal and 1.0/half scaling
-            // into first layer weights.
-            for (j = 0; j < 4; j++)
-                for (k = 0; k < 48; k++)
-                    s->weights0[j * 48 + k] = (float)((bdata[j * 48 + k] - mean[j]) / half);
-            memcpy(s->weights0 + 4 * 48, bdata + 4 * 48, (dims0 - 4 * 48) * sizeof(float));
-        }
-    }
-
-    // Adjust prediction weights
-    for (i = 0; i < 2; i++) {
-        const float *bdataT = bdata + dims0 + dims0new * 3 + dims1tsize * s->etype + dims1offset + i * dims1;
-        const int nnst = nns_table[s->nnsparam];
-        const int asize = xdia_table[s->nsize] * ydia_table[s->nsize];
-        const int boff = nnst * 2 * asize;
-        double *mean = (double *)av_calloc(asize + 1 + nnst * 2, sizeof(double));
-
-        if (!mean) {
-            ret = AVERROR(ENOMEM);
-            goto fail;
-        }
-
-        // Calculate mean weight of each neuron (ignore bias)
-        for (j = 0; j < nnst * 2; j++) {
-            double cmean = 0.0;
-            for (k = 0; k < asize; k++)
-                cmean += bdataT[j * asize + k];
-            mean[asize + 1 + j] = cmean / (double)asize;
-        }
-        // Calculate mean softmax neuron
-        for (j = 0; j < nnst; j++) {
-            for (k = 0; k < asize; k++)
-                mean[k] += bdataT[j * asize + k] - mean[asize + 1 + j];
-            mean[asize] += bdataT[boff + j];
-        }
-        for (j = 0; j < asize + 1; j++)
-            mean[j] /= (double)(nnst);
-
-        if (s->fapprox & 2) { // use int16 dot products
-            int16_t *ws = (int16_t *)s->weights1[i];
-            float *wf = (float *)&ws[nnst * 2 * asize];
-            // Factor mean removal into weights, remove global offset from
-            // softmax neurons, and scale weights to int16 range.
-            for (j = 0; j < nnst; j++) { // softmax neurons
-                double scale, mval = 0.0;
-                for (k = 0; k < asize; k++)
-                    mval = FFMAX(mval, FFABS(bdataT[j * asize + k] - mean[asize + 1 + j] - mean[k]));
-                scale = 32767.0 / mval;
-                for (k = 0; k < asize; k++)
-                    ws[j * asize + k] = roundds((bdataT[j * asize + k] - mean[asize + 1 + j] - mean[k]) * scale);
-                wf[(j >> 2) * 8 + (j & 3)] = (float)(mval / 32767.0);
-                wf[(j >> 2) * 8 + (j & 3) + 4] = (float)(bdataT[boff + j] - mean[asize]);
-            }
-            for (j = nnst; j < nnst * 2; j++) { // elliott neurons
-                double scale, mval = 0.0;
-                for (k = 0; k < asize; k++)
-                    mval = FFMAX(mval, FFABS(bdataT[j * asize + k] - mean[asize + 1 + j]));
-                scale = 32767.0 / mval;
-                for (k = 0; k < asize; k++)
-                    ws[j * asize + k] = roundds((bdataT[j * asize + k] - mean[asize + 1 + j]) * scale);
-                wf[(j >> 2) * 8 + (j & 3)] = (float)(mval / 32767.0);
-                wf[(j >> 2) * 8 + (j & 3) + 4] = bdataT[boff + j];
-            }
-        } else { // use float dot products
-            // Factor mean removal into weights, and remove global
-            // offset from softmax neurons.
-            for (j = 0; j < nnst * 2; j++) {
-                for (k = 0; k < asize; k++) {
-                    const double q = j < nnst ? mean[k] : 0.0;
-                    s->weights1[i][j * asize + k] = (float)(bdataT[j * asize + k] - mean[asize + 1 + j] - q);
-                }
-                s->weights1[i][boff + j] = (float)(bdataT[boff + j] - (j < nnst ? mean[asize] : 0.0));
-            }
-        }
-        av_free(mean);
-    }
-
-    s->nns = nns_table[s->nnsparam];
-    s->xdia = xdia_table[s->nsize];
-    s->ydia = ydia_table[s->nsize];
-    s->asize = xdia_table[s->nsize] * ydia_table[s->nsize];
-
-    s->max_value = 65535 >> 8;
-
-    select_functions(s);
-
-    s->fdsp = avpriv_float_dsp_alloc(0);
-    if (!s->fdsp)
-        ret = AVERROR(ENOMEM);
-
-fail:
-    av_free(bdata);
-    return ret;
-}
-
-static av_cold void uninit(AVFilterContext *ctx)
-{
-    NNEDIContext *s = ctx->priv;
-    int i;
-
-    av_freep(&s->weights0);
-
-    for (i = 0; i < 2; i++)
-        av_freep(&s->weights1[i]);
-
-    for (i = 0; i < s->nb_planes; i++) {
-        av_freep(&s->frame_data.paddedp[i]);
-        av_freep(&s->frame_data.lcount[i]);
-    }
-
-    av_freep(&s->frame_data.input);
-    av_freep(&s->frame_data.temp);
-    av_freep(&s->fdsp);
-    av_frame_free(&s->second);
-}
-
-static const AVFilterPad inputs[] = {
-    {
-        .name          = "default",
-        .type          = AVMEDIA_TYPE_VIDEO,
-        .filter_frame  = filter_frame,
-        .config_props  = config_input,
-    },
-    { NULL }
-};
-
-static const AVFilterPad outputs[] = {
-    {
-        .name          = "default",
-        .type          = AVMEDIA_TYPE_VIDEO,
-        .config_props  = config_output,
-        .request_frame = request_frame,
-    },
-    { NULL }
-};
-
-AVFilter ff_vf_nnedi = {
-    .name          = "nnedi",
-    .description   = NULL_IF_CONFIG_SMALL("Apply neural network edge directed interpolation intra-only deinterlacer."),
-    .priv_size     = sizeof(NNEDIContext),
-    .priv_class    = &nnedi_class,
-    .init          = init,
-    .uninit        = uninit,
-    .query_formats = query_formats,
-    .inputs        = inputs,
-    .outputs       = outputs,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
-};
diff --git a/libavfilter/vf_owdenoise.c b/libavfilter/vf_owdenoise.c
deleted file mode 100644
index 6d6c2a3..0000000
--- a/libavfilter/vf_owdenoise.c
+++ /dev/null
@@ -1,377 +0,0 @@
-/*
- * Copyright (c) 2007 Michael Niedermayer <michaelni@gmx.at>
- * Copyright (c) 2013 Clément Bœsch <u pkh me>
- *
- * 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.
- */
-
-/**
- * @todo try to change to int
- * @todo try lifting based implementation
- * @todo optimize optimize optimize
- * @todo hard thresholding
- * @todo use QP to decide filter strength
- * @todo wavelet normalization / least squares optimal signal vs. noise thresholds
- */
-
-#include "libavutil/imgutils.h"
-#include "libavutil/opt.h"
-#include "libavutil/pixdesc.h"
-#include "avfilter.h"
-#include "internal.h"
-
-typedef struct OWDenoiseContext {
-    const AVClass *class;
-    double luma_strength;
-    double chroma_strength;
-    int depth;
-    float *plane[16+1][4];
-    int linesize;
-    int hsub, vsub;
-    int pixel_depth;
-} OWDenoiseContext;
-
-#define OFFSET(x) offsetof(OWDenoiseContext, x)
-#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
-static const AVOption owdenoise_options[] = {
-    { "depth",           "set depth",           OFFSET(depth),           AV_OPT_TYPE_INT,    {.i64 =   8}, 8,   16, FLAGS },
-    { "luma_strength",   "set luma strength",   OFFSET(luma_strength),   AV_OPT_TYPE_DOUBLE, {.dbl = 1.0}, 0, 1000, FLAGS },
-    { "ls",              "set luma strength",   OFFSET(luma_strength),   AV_OPT_TYPE_DOUBLE, {.dbl = 1.0}, 0, 1000, FLAGS },
-    { "chroma_strength", "set chroma strength", OFFSET(chroma_strength), AV_OPT_TYPE_DOUBLE, {.dbl = 1.0}, 0, 1000, FLAGS },
-    { "cs",              "set chroma strength", OFFSET(chroma_strength), AV_OPT_TYPE_DOUBLE, {.dbl = 1.0}, 0, 1000, FLAGS },
-    { NULL }
-};
-
-AVFILTER_DEFINE_CLASS(owdenoise);
-
-DECLARE_ALIGNED(8, static const uint8_t, dither)[8][8] = {
-    {  0,  48,  12,  60,   3,  51,  15,  63 },
-    { 32,  16,  44,  28,  35,  19,  47,  31 },
-    {  8,  56,   4,  52,  11,  59,   7,  55 },
-    { 40,  24,  36,  20,  43,  27,  39,  23 },
-    {  2,  50,  14,  62,   1,  49,  13,  61 },
-    { 34,  18,  46,  30,  33,  17,  45,  29 },
-    { 10,  58,   6,  54,   9,  57,   5,  53 },
-    { 42,  26,  38,  22,  41,  25,  37,  21 },
-};
-
-static const double coeff[2][5] = {
-    {
-         0.6029490182363579  * M_SQRT2,
-         0.2668641184428723  * M_SQRT2,
-        -0.07822326652898785 * M_SQRT2,
-        -0.01686411844287495 * M_SQRT2,
-         0.02674875741080976 * M_SQRT2,
-    },{
-         1.115087052456994   / M_SQRT2,
-        -0.5912717631142470  / M_SQRT2,
-        -0.05754352622849957 / M_SQRT2,
-         0.09127176311424948 / M_SQRT2,
-    }
-};
-
-static const double icoeff[2][5] = {
-    {
-         1.115087052456994   / M_SQRT2,
-         0.5912717631142470  / M_SQRT2,
-        -0.05754352622849957 / M_SQRT2,
-        -0.09127176311424948 / M_SQRT2,
-    },{
-         0.6029490182363579  * M_SQRT2,
-        -0.2668641184428723  * M_SQRT2,
-        -0.07822326652898785 * M_SQRT2,
-         0.01686411844287495 * M_SQRT2,
-         0.02674875741080976 * M_SQRT2,
-    }
-};
-
-
-static inline void decompose(float *dst_l, float *dst_h, const float *src,
-                             int linesize, int w)
-{
-    int x, i;
-    for (x = 0; x < w; x++) {
-        double sum_l = src[x * linesize] * coeff[0][0];
-        double sum_h = src[x * linesize] * coeff[1][0];
-        for (i = 1; i <= 4; i++) {
-            const double s = src[avpriv_mirror(x - i, w - 1) * linesize]
-                           + src[avpriv_mirror(x + i, w - 1) * linesize];
-
-            sum_l += coeff[0][i] * s;
-            sum_h += coeff[1][i] * s;
-        }
-        dst_l[x * linesize] = sum_l;
-        dst_h[x * linesize] = sum_h;
-    }
-}
-
-static inline void compose(float *dst, const float *src_l, const float *src_h,
-                           int linesize, int w)
-{
-    int x, i;
-    for (x = 0; x < w; x++) {
-        double sum_l = src_l[x * linesize] * icoeff[0][0];
-        double sum_h = src_h[x * linesize] * icoeff[1][0];
-        for (i = 1; i <= 4; i++) {
-            const int x0 = avpriv_mirror(x - i, w - 1) * linesize;
-            const int x1 = avpriv_mirror(x + i, w - 1) * linesize;
-
-            sum_l += icoeff[0][i] * (src_l[x0] + src_l[x1]);
-            sum_h += icoeff[1][i] * (src_h[x0] + src_h[x1]);
-        }
-        dst[x * linesize] = (sum_l + sum_h) * 0.5;
-    }
-}
-
-static inline void decompose2D(float *dst_l, float *dst_h, const float *src,
-                               int xlinesize, int ylinesize,
-                               int step, int w, int h)
-{
-    int y, x;
-    for (y = 0; y < h; y++)
-        for (x = 0; x < step; x++)
-            decompose(dst_l + ylinesize*y + xlinesize*x,
-                      dst_h + ylinesize*y + xlinesize*x,
-                      src   + ylinesize*y + xlinesize*x,
-                      step * xlinesize, (w - x + step - 1) / step);
-}
-
-static inline void compose2D(float *dst, const float *src_l, const float *src_h,
-                             int xlinesize, int ylinesize,
-                             int step, int w, int h)
-{
-    int y, x;
-    for (y = 0; y < h; y++)
-        for (x = 0; x < step; x++)
-            compose(dst   + ylinesize*y + xlinesize*x,
-                    src_l + ylinesize*y + xlinesize*x,
-                    src_h + ylinesize*y + xlinesize*x,
-                    step * xlinesize, (w - x + step - 1) / step);
-}
-
-static void decompose2D2(float *dst[4], float *src, float *temp[2],
-                         int linesize, int step, int w, int h)
-{
-    decompose2D(temp[0], temp[1], src,     1, linesize, step, w, h);
-    decompose2D( dst[0],  dst[1], temp[0], linesize, 1, step, h, w);
-    decompose2D( dst[2],  dst[3], temp[1], linesize, 1, step, h, w);
-}
-
-static void compose2D2(float *dst, float *src[4], float *temp[2],
-                       int linesize, int step, int w, int h)
-{
-    compose2D(temp[0],  src[0],  src[1], linesize, 1, step, h, w);
-    compose2D(temp[1],  src[2],  src[3], linesize, 1, step, h, w);
-    compose2D(dst,     temp[0], temp[1], 1, linesize, step, w, h);
-}
-
-static void filter(OWDenoiseContext *s,
-                   uint8_t       *dst, int dst_linesize,
-                   const uint8_t *src, int src_linesize,
-                   int width, int height, double strength)
-{
-    int x, y, i, j, depth = s->depth;
-
-    while (1<<depth > width || 1<<depth > height)
-        depth--;
-
-    if (s->pixel_depth <= 8) {
-        for (y = 0; y < height; y++)
-            for(x = 0; x < width; x++)
-                s->plane[0][0][y*s->linesize + x] = src[y*src_linesize + x];
-    } else {
-        const uint16_t *src16 = (const uint16_t *)src;
-
-        src_linesize /= 2;
-        for (y = 0; y < height; y++)
-            for(x = 0; x < width; x++)
-                s->plane[0][0][y*s->linesize + x] = src16[y*src_linesize + x];
-    }
-
-    for (i = 0; i < depth; i++)
-        decompose2D2(s->plane[i + 1], s->plane[i][0], s->plane[0] + 1, s->linesize, 1<<i, width, height);
-
-    for (i = 0; i < depth; i++) {
-        for (j = 1; j < 4; j++) {
-            for (y = 0; y < height; y++) {
-                for (x = 0; x < width; x++) {
-                    double v = s->plane[i + 1][j][y*s->linesize + x];
-                    if      (v >  strength) v -= strength;
-                    else if (v < -strength) v += strength;
-                    else                    v  = 0;
-                    s->plane[i + 1][j][x + y*s->linesize] = v;
-                }
-            }
-        }
-    }
-    for (i = depth-1; i >= 0; i--)
-        compose2D2(s->plane[i][0], s->plane[i + 1], s->plane[0] + 1, s->linesize, 1<<i, width, height);
-
-    if (s->pixel_depth <= 8) {
-        for (y = 0; y < height; y++) {
-            for (x = 0; x < width; x++) {
-                i = s->plane[0][0][y*s->linesize + x] + dither[x&7][y&7]*(1.0/64) + 1.0/128; // yes the rounding is insane but optimal :)
-                if ((unsigned)i > 255U) i = ~(i >> 31);
-                dst[y*dst_linesize + x] = i;
-            }
-        }
-    } else {
-        uint16_t *dst16 = (uint16_t *)dst;
-
-        dst_linesize /= 2;
-        for (y = 0; y < height; y++) {
-            for (x = 0; x < width; x++) {
-                i = s->plane[0][0][y*s->linesize + x];
-                dst16[y*dst_linesize + x] = i;
-            }
-        }
-    }
-}
-
-static int filter_frame(AVFilterLink *inlink, AVFrame *in)
-{
-    AVFilterContext *ctx = inlink->dst;
-    OWDenoiseContext *s = ctx->priv;
-    AVFilterLink *outlink = ctx->outputs[0];
-    AVFrame *out;
-    const int cw = AV_CEIL_RSHIFT(inlink->w, s->hsub);
-    const int ch = AV_CEIL_RSHIFT(inlink->h, s->vsub);
-
-    if (av_frame_is_writable(in)) {
-        out = in;
-
-        if (s->luma_strength > 0)
-            filter(s, out->data[0], out->linesize[0], in->data[0], in->linesize[0], inlink->w, inlink->h, s->luma_strength);
-        if (s->chroma_strength > 0) {
-            filter(s, out->data[1], out->linesize[1], in->data[1], in->linesize[1], cw,        ch,        s->chroma_strength);
-            filter(s, out->data[2], out->linesize[2], in->data[2], in->linesize[2], cw,        ch,        s->chroma_strength);
-        }
-    } else {
-        out = ff_get_video_buffer(outlink, outlink->w, outlink->h);
-        if (!out) {
-            av_frame_free(&in);
-            return AVERROR(ENOMEM);
-        }
-        av_frame_copy_props(out, in);
-
-        if (s->luma_strength > 0) {
-            filter(s, out->data[0], out->linesize[0], in->data[0], in->linesize[0], inlink->w, inlink->h, s->luma_strength);
-        } else {
-            av_image_copy_plane(out->data[0], out->linesize[0], in ->data[0], in ->linesize[0], inlink->w, inlink->h);
-        }
-        if (s->chroma_strength > 0) {
-            filter(s, out->data[1], out->linesize[1], in->data[1], in->linesize[1], cw, ch, s->chroma_strength);
-            filter(s, out->data[2], out->linesize[2], in->data[2], in->linesize[2], cw, ch, s->chroma_strength);
-        } else {
-            av_image_copy_plane(out->data[1], out->linesize[1], in ->data[1], in ->linesize[1], inlink->w, inlink->h);
-            av_image_copy_plane(out->data[2], out->linesize[2], in ->data[2], in ->linesize[2], inlink->w, inlink->h);
-        }
-
-        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);
-    }
-
-    return ff_filter_frame(outlink, out);
-}
-
-static int query_formats(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_YUV440P,
-        AV_PIX_FMT_YUVA444P,     AV_PIX_FMT_YUVA422P,
-        AV_PIX_FMT_YUVA420P,
-        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_YUV444P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV420P12,
-        AV_PIX_FMT_YUV440P12,
-        AV_PIX_FMT_YUV444P14, AV_PIX_FMT_YUV422P14, AV_PIX_FMT_YUV420P14,
-        AV_PIX_FMT_YUV420P16, AV_PIX_FMT_YUV422P16, AV_PIX_FMT_YUV444P16,
-        AV_PIX_FMT_NONE
-    };
-    AVFilterFormats *fmts_list = ff_make_format_list(pix_fmts);
-    if (!fmts_list)
-        return AVERROR(ENOMEM);
-    return ff_set_common_formats(ctx, fmts_list);
-}
-
-static int config_input(AVFilterLink *inlink)
-{
-    int i, j;
-    OWDenoiseContext *s = inlink->dst->priv;
-    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(inlink->format);
-    const int h = FFALIGN(inlink->h, 16);
-
-    s->hsub = desc->log2_chroma_w;
-    s->vsub = desc->log2_chroma_h;
-    s->pixel_depth = desc->comp[0].depth;
-
-    s->linesize = FFALIGN(inlink->w, 16);
-    for (j = 0; j < 4; j++) {
-        for (i = 0; i <= s->depth; i++) {
-            s->plane[i][j] = av_malloc_array(s->linesize, h * sizeof(s->plane[0][0][0]));
-            if (!s->plane[i][j])
-                return AVERROR(ENOMEM);
-        }
-    }
-    return 0;
-}
-
-static av_cold void uninit(AVFilterContext *ctx)
-{
-    int i, j;
-    OWDenoiseContext *s = ctx->priv;
-
-    for (j = 0; j < 4; j++)
-        for (i = 0; i <= s->depth; i++)
-            av_freep(&s->plane[i][j]);
-}
-
-static const AVFilterPad owdenoise_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .filter_frame = filter_frame,
-        .config_props = config_input,
-    },
-    { NULL }
-};
-
-static const AVFilterPad owdenoise_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-    { NULL }
-};
-
-AVFilter ff_vf_owdenoise = {
-    .name          = "owdenoise",
-    .description   = NULL_IF_CONFIG_SMALL("Denoise using wavelets."),
-    .priv_size     = sizeof(OWDenoiseContext),
-    .uninit        = uninit,
-    .query_formats = query_formats,
-    .inputs        = owdenoise_inputs,
-    .outputs       = owdenoise_outputs,
-    .priv_class    = &owdenoise_class,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
-};
diff --git a/libavfilter/vf_perspective.c b/libavfilter/vf_perspective.c
deleted file mode 100644
index 9249509..0000000
--- a/libavfilter/vf_perspective.c
+++ /dev/null
@@ -1,525 +0,0 @@
-/*
- * Copyright (c) 2002 Michael Niedermayer <michaelni@gmx.at>
- * Copyright (c) 2013 Paul B Mahol
- *
- * 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
- */
-
-#include "libavutil/avassert.h"
-#include "libavutil/eval.h"
-#include "libavutil/imgutils.h"
-#include "libavutil/pixdesc.h"
-#include "libavutil/opt.h"
-#include "avfilter.h"
-#include "formats.h"
-#include "internal.h"
-#include "video.h"
-
-#define SUB_PIXEL_BITS  8
-#define SUB_PIXELS      (1 << SUB_PIXEL_BITS)
-#define COEFF_BITS      11
-
-#define LINEAR 0
-#define CUBIC  1
-
-typedef struct PerspectiveContext {
-    const AVClass *class;
-    char *expr_str[4][2];
-    double ref[4][2];
-    int32_t (*pv)[2];
-    int32_t coeff[SUB_PIXELS][4];
-    int interpolation;
-    int linesize[4];
-    int height[4];
-    int hsub, vsub;
-    int nb_planes;
-    int sense;
-    int eval_mode;
-
-    int (*perspective)(AVFilterContext *ctx,
-                       void *arg, int job, int nb_jobs);
-} PerspectiveContext;
-
-#define OFFSET(x) offsetof(PerspectiveContext, x)
-#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
-
-enum PERSPECTIVESense {
-    PERSPECTIVE_SENSE_SOURCE      = 0, ///< coordinates give locations in source of corners of destination.
-    PERSPECTIVE_SENSE_DESTINATION = 1, ///< coordinates give locations in destination of corners of source.
-};
-
-enum EvalMode {
-    EVAL_MODE_INIT,
-    EVAL_MODE_FRAME,
-    EVAL_MODE_NB
-};
-
-static const AVOption perspective_options[] = {
-    { "x0", "set top left x coordinate",     OFFSET(expr_str[0][0]), AV_OPT_TYPE_STRING, {.str="0"}, 0, 0, FLAGS },
-    { "y0", "set top left y coordinate",     OFFSET(expr_str[0][1]), AV_OPT_TYPE_STRING, {.str="0"}, 0, 0, FLAGS },
-    { "x1", "set top right x coordinate",    OFFSET(expr_str[1][0]), AV_OPT_TYPE_STRING, {.str="W"}, 0, 0, FLAGS },
-    { "y1", "set top right y coordinate",    OFFSET(expr_str[1][1]), AV_OPT_TYPE_STRING, {.str="0"}, 0, 0, FLAGS },
-    { "x2", "set bottom left x coordinate",  OFFSET(expr_str[2][0]), AV_OPT_TYPE_STRING, {.str="0"}, 0, 0, FLAGS },
-    { "y2", "set bottom left y coordinate",  OFFSET(expr_str[2][1]), AV_OPT_TYPE_STRING, {.str="H"}, 0, 0, FLAGS },
-    { "x3", "set bottom right x coordinate", OFFSET(expr_str[3][0]), AV_OPT_TYPE_STRING, {.str="W"}, 0, 0, FLAGS },
-    { "y3", "set bottom right y coordinate", OFFSET(expr_str[3][1]), AV_OPT_TYPE_STRING, {.str="H"}, 0, 0, FLAGS },
-    { "interpolation", "set interpolation", OFFSET(interpolation), AV_OPT_TYPE_INT, {.i64=LINEAR}, 0, 1, FLAGS, "interpolation" },
-    {      "linear", "", 0, AV_OPT_TYPE_CONST, {.i64=LINEAR}, 0, 0, FLAGS, "interpolation" },
-    {       "cubic", "", 0, AV_OPT_TYPE_CONST, {.i64=CUBIC},  0, 0, FLAGS, "interpolation" },
-    { "sense",   "specify the sense of the coordinates", OFFSET(sense), AV_OPT_TYPE_INT, {.i64=PERSPECTIVE_SENSE_SOURCE}, 0, 1, FLAGS, "sense"},
-    {       "source", "specify locations in source to send to corners in destination",
-                0, AV_OPT_TYPE_CONST, {.i64=PERSPECTIVE_SENSE_SOURCE}, 0, 0, FLAGS, "sense"},
-    {       "destination", "specify locations in destination to send corners of source",
-                0, AV_OPT_TYPE_CONST, {.i64=PERSPECTIVE_SENSE_DESTINATION}, 0, 0, FLAGS, "sense"},
-    { "eval", "specify when to evaluate expressions", OFFSET(eval_mode), AV_OPT_TYPE_INT, {.i64 = EVAL_MODE_INIT}, 0, EVAL_MODE_NB-1, FLAGS, "eval" },
-         { "init",  "eval expressions once during initialization", 0, AV_OPT_TYPE_CONST, {.i64=EVAL_MODE_INIT},  .flags = FLAGS, .unit = "eval" },
-         { "frame", "eval expressions per-frame",                  0, AV_OPT_TYPE_CONST, {.i64=EVAL_MODE_FRAME}, .flags = FLAGS, .unit = "eval" },
-
-    { NULL }
-};
-
-AVFILTER_DEFINE_CLASS(perspective);
-
-static int query_formats(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_NONE
-    };
-
-    AVFilterFormats *fmts_list = ff_make_format_list(pix_fmts);
-    if (!fmts_list)
-        return AVERROR(ENOMEM);
-    return ff_set_common_formats(ctx, fmts_list);
-}
-
-static inline double get_coeff(double d)
-{
-    double coeff, A = -0.60;
-
-    d = fabs(d);
-
-    if (d < 1.0)
-        coeff = (1.0 - (A + 3.0) * d * d + (A + 2.0) * d * d * d);
-    else if (d < 2.0)
-        coeff = (-4.0 * A + 8.0 * A * d - 5.0 * A * d * d + A * d * d * d);
-    else
-        coeff = 0.0;
-
-    return coeff;
-}
-
-static const char *const var_names[] = {   "W",   "H",   "in",   "on",        NULL };
-enum                                   { VAR_W, VAR_H, VAR_IN, VAR_ON, VAR_VARS_NB };
-
-static int calc_persp_luts(AVFilterContext *ctx, AVFilterLink *inlink)
-{
-    PerspectiveContext *s = ctx->priv;
-    AVFilterLink *outlink = ctx->outputs[0];
-    double (*ref)[2]      = s->ref;
-
-    double values[VAR_VARS_NB] = { [VAR_W] = inlink->w, [VAR_H] = inlink->h,
-                                   [VAR_IN] = inlink->frame_count_out + 1,
-                                   [VAR_ON] = outlink->frame_count_in + 1 };
-    const int h = values[VAR_H];
-    const int w = values[VAR_W];
-    double x0, x1, x2, x3, x4, x5, x6, x7, x8, q;
-    double t0, t1, t2, t3;
-    int x, y, i, j, ret;
-
-    for (i = 0; i < 4; i++) {
-        for (j = 0; j < 2; j++) {
-            if (!s->expr_str[i][j])
-                return AVERROR(EINVAL);
-            ret = av_expr_parse_and_eval(&s->ref[i][j], s->expr_str[i][j],
-                                         var_names, &values[0],
-                                         NULL, NULL, NULL, NULL,
-                                         0, 0, ctx);
-            if (ret < 0)
-                return ret;
-        }
-    }
-
-    switch (s->sense) {
-    case PERSPECTIVE_SENSE_SOURCE:
-        x6 = ((ref[0][0] - ref[1][0] - ref[2][0] + ref[3][0]) *
-              (ref[2][1] - ref[3][1]) -
-             ( ref[0][1] - ref[1][1] - ref[2][1] + ref[3][1]) *
-              (ref[2][0] - ref[3][0])) * h;
-        x7 = ((ref[0][1] - ref[1][1] - ref[2][1] + ref[3][1]) *
-              (ref[1][0] - ref[3][0]) -
-             ( ref[0][0] - ref[1][0] - ref[2][0] + ref[3][0]) *
-              (ref[1][1] - ref[3][1])) * w;
-        q =  ( ref[1][0] - ref[3][0]) * (ref[2][1] - ref[3][1]) -
-             ( ref[2][0] - ref[3][0]) * (ref[1][1] - ref[3][1]);
-
-        x0 = q * (ref[1][0] - ref[0][0]) * h + x6 * ref[1][0];
-        x1 = q * (ref[2][0] - ref[0][0]) * w + x7 * ref[2][0];
-        x2 = q *  ref[0][0] * w * h;
-        x3 = q * (ref[1][1] - ref[0][1]) * h + x6 * ref[1][1];
-        x4 = q * (ref[2][1] - ref[0][1]) * w + x7 * ref[2][1];
-        x5 = q *  ref[0][1] * w * h;
-        x8 = q * w * h;
-        break;
-    case PERSPECTIVE_SENSE_DESTINATION:
-        t0 = ref[0][0] * (ref[3][1] - ref[1][1]) +
-             ref[1][0] * (ref[0][1] - ref[3][1]) +
-             ref[3][0] * (ref[1][1] - ref[0][1]);
-        t1 = ref[1][0] * (ref[2][1] - ref[3][1]) +
-             ref[2][0] * (ref[3][1] - ref[1][1]) +
-             ref[3][0] * (ref[1][1] - ref[2][1]);
-        t2 = ref[0][0] * (ref[3][1] - ref[2][1]) +
-             ref[2][0] * (ref[0][1] - ref[3][1]) +
-             ref[3][0] * (ref[2][1] - ref[0][1]);
-        t3 = ref[0][0] * (ref[1][1] - ref[2][1]) +
-             ref[1][0] * (ref[2][1] - ref[0][1]) +
-             ref[2][0] * (ref[0][1] - ref[1][1]);
-
-        x0 = t0 * t1 * w * (ref[2][1] - ref[0][1]);
-        x1 = t0 * t1 * w * (ref[0][0] - ref[2][0]);
-        x2 = t0 * t1 * w * (ref[0][1] * ref[2][0] - ref[0][0] * ref[2][1]);
-        x3 = t1 * t2 * h * (ref[1][1] - ref[0][1]);
-        x4 = t1 * t2 * h * (ref[0][0] - ref[1][0]);
-        x5 = t1 * t2 * h * (ref[0][1] * ref[1][0] - ref[0][0] * ref[1][1]);
-        x6 = t1 * t2 * (ref[1][1] - ref[0][1]) +
-             t0 * t3 * (ref[2][1] - ref[3][1]);
-        x7 = t1 * t2 * (ref[0][0] - ref[1][0]) +
-             t0 * t3 * (ref[3][0] - ref[2][0]);
-        x8 = t1 * t2 * (ref[0][1] * ref[1][0] - ref[0][0] * ref[1][1]) +
-             t0 * t3 * (ref[2][0] * ref[3][1] - ref[2][1] * ref[3][0]);
-        break;
-    default:
-        av_assert0(0);
-    }
-
-    for (y = 0; y < h; y++){
-        for (x = 0; x < w; x++){
-            int u, v;
-
-            u =      lrint(SUB_PIXELS * (x0 * x + x1 * y + x2) /
-                                        (x6 * x + x7 * y + x8));
-            v =      lrint(SUB_PIXELS * (x3 * x + x4 * y + x5) /
-                                        (x6 * x + x7 * y + x8));
-
-            s->pv[x + y * w][0] = u;
-            s->pv[x + y * w][1] = v;
-        }
-    }
-
-    return 0;
-}
-
-static int config_input(AVFilterLink *inlink)
-{
-    AVFilterContext *ctx = inlink->dst;
-    PerspectiveContext *s = ctx->priv;
-    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(inlink->format);
-    int h = inlink->h;
-    int w = inlink->w;
-    int i, j, ret;
-    s->hsub = desc->log2_chroma_w;
-    s->vsub = desc->log2_chroma_h;
-    s->nb_planes = av_pix_fmt_count_planes(inlink->format);
-    if ((ret = av_image_fill_linesizes(s->linesize, inlink->format, inlink->w)) < 0)
-        return ret;
-
-    s->height[1] = s->height[2] = AV_CEIL_RSHIFT(inlink->h, desc->log2_chroma_h);
-    s->height[0] = s->height[3] = inlink->h;
-
-    s->pv = av_realloc_f(s->pv, w * h, 2 * sizeof(*s->pv));
-    if (!s->pv)
-        return AVERROR(ENOMEM);
-
-    if (s->eval_mode == EVAL_MODE_INIT) {
-        if ((ret = calc_persp_luts(ctx, inlink)) < 0) {
-            return ret;
-        }
-    }
-
-    for (i = 0; i < SUB_PIXELS; i++){
-        double d = i / (double)SUB_PIXELS;
-        double temp[4];
-        double sum = 0;
-
-        for (j = 0; j < 4; j++)
-            temp[j] = get_coeff(j - d - 1);
-
-        for (j = 0; j < 4; j++)
-            sum += temp[j];
-
-        for (j = 0; j < 4; j++)
-            s->coeff[i][j] = lrint((1 << COEFF_BITS) * temp[j] / sum);
-    }
-
-    return 0;
-}
-
-typedef struct ThreadData {
-    uint8_t *dst;
-    int dst_linesize;
-    uint8_t *src;
-    int src_linesize;
-    int w, h;
-    int hsub, vsub;
-} ThreadData;
-
-static int resample_cubic(AVFilterContext *ctx, void *arg,
-                          int job, int nb_jobs)
-{
-    PerspectiveContext *s = ctx->priv;
-    ThreadData *td = arg;
-    uint8_t *dst = td->dst;
-    int dst_linesize = td->dst_linesize;
-    uint8_t *src = td->src;
-    int src_linesize = td->src_linesize;
-    int w = td->w;
-    int h = td->h;
-    int hsub = td->hsub;
-    int vsub = td->vsub;
-    int start = (h * job) / nb_jobs;
-    int end   = (h * (job+1)) / nb_jobs;
-    const int linesize = s->linesize[0];
-    int x, y;
-
-    for (y = start; y < end; y++) {
-        int sy = y << vsub;
-        for (x = 0; x < w; x++) {
-            int u, v, subU, subV, sum, sx;
-
-            sx   = x << hsub;
-            u    = s->pv[sx + sy * linesize][0] >> hsub;
-            v    = s->pv[sx + sy * linesize][1] >> vsub;
-            subU = u & (SUB_PIXELS - 1);
-            subV = v & (SUB_PIXELS - 1);
-            u  >>= SUB_PIXEL_BITS;
-            v  >>= SUB_PIXEL_BITS;
-
-            if (u > 0 && v > 0 && u < w - 2 && v < h - 2){
-                const int index = u + v*src_linesize;
-                const int a = s->coeff[subU][0];
-                const int b = s->coeff[subU][1];
-                const int c = s->coeff[subU][2];
-                const int d = s->coeff[subU][3];
-
-                sum = s->coeff[subV][0] * (a * src[index - 1 -     src_linesize] + b * src[index - 0 -     src_linesize]  +
-                                      c *      src[index + 1 -     src_linesize] + d * src[index + 2 -     src_linesize]) +
-                      s->coeff[subV][1] * (a * src[index - 1                   ] + b * src[index - 0                   ]  +
-                                      c *      src[index + 1                   ] + d * src[index + 2                   ]) +
-                      s->coeff[subV][2] * (a * src[index - 1 +     src_linesize] + b * src[index - 0 +     src_linesize]  +
-                                      c *      src[index + 1 +     src_linesize] + d * src[index + 2 +     src_linesize]) +
-                      s->coeff[subV][3] * (a * src[index - 1 + 2 * src_linesize] + b * src[index - 0 + 2 * src_linesize]  +
-                                      c *      src[index + 1 + 2 * src_linesize] + d * src[index + 2 + 2 * src_linesize]);
-            } else {
-                int dx, dy;
-
-                sum = 0;
-
-                for (dy = 0; dy < 4; dy++) {
-                    int iy = v + dy - 1;
-
-                    if (iy < 0)
-                        iy = 0;
-                    else if (iy >= h)
-                        iy = h-1;
-                    for (dx = 0; dx < 4; dx++) {
-                        int ix = u + dx - 1;
-
-                        if (ix < 0)
-                            ix = 0;
-                        else if (ix >= w)
-                            ix = w - 1;
-
-                        sum += s->coeff[subU][dx] * s->coeff[subV][dy] * src[ ix + iy * src_linesize];
-                    }
-                }
-            }
-
-            sum = (sum + (1<<(COEFF_BITS * 2 - 1))) >> (COEFF_BITS * 2);
-            sum = av_clip_uint8(sum);
-            dst[x + y * dst_linesize] = sum;
-        }
-    }
-    return 0;
-}
-
-static int resample_linear(AVFilterContext *ctx, void *arg,
-                           int job, int nb_jobs)
-{
-    PerspectiveContext *s = ctx->priv;
-    ThreadData *td = arg;
-    uint8_t *dst = td->dst;
-    int dst_linesize = td->dst_linesize;
-    uint8_t *src = td->src;
-    int src_linesize = td->src_linesize;
-    int w = td->w;
-    int h = td->h;
-    int hsub = td->hsub;
-    int vsub = td->vsub;
-    int start = (h * job) / nb_jobs;
-    int end   = (h * (job+1)) / nb_jobs;
-    const int linesize = s->linesize[0];
-    int x, y;
-
-    for (y = start; y < end; y++){
-        int sy = y << vsub;
-        for (x = 0; x < w; x++){
-            int u, v, subU, subV, sum, sx, index, subUI, subVI;
-
-            sx   = x << hsub;
-            u    = s->pv[sx + sy * linesize][0] >> hsub;
-            v    = s->pv[sx + sy * linesize][1] >> vsub;
-            subU = u & (SUB_PIXELS - 1);
-            subV = v & (SUB_PIXELS - 1);
-            u  >>= SUB_PIXEL_BITS;
-            v  >>= SUB_PIXEL_BITS;
-
-            index = u + v * src_linesize;
-            subUI = SUB_PIXELS - subU;
-            subVI = SUB_PIXELS - subV;
-
-            if ((unsigned)u < (unsigned)(w - 1)){
-                if((unsigned)v < (unsigned)(h - 1)){
-                    sum = subVI * (subUI * src[index] + subU * src[index + 1]) +
-                          subV  * (subUI * src[index + src_linesize] + subU * src[index + src_linesize + 1]);
-                    sum = (sum + (1 << (SUB_PIXEL_BITS * 2 - 1)))>> (SUB_PIXEL_BITS * 2);
-                } else {
-                    if (v < 0)
-                        v = 0;
-                    else
-                        v = h - 1;
-                    index = u + v * src_linesize;
-                    sum   = subUI * src[index] + subU * src[index + 1];
-                    sum   = (sum + (1 << (SUB_PIXEL_BITS - 1))) >> SUB_PIXEL_BITS;
-                }
-            } else {
-                if (u < 0)
-                    u = 0;
-                else
-                    u = w - 1;
-                if ((unsigned)v < (unsigned)(h - 1)){
-                    index = u + v * src_linesize;
-                    sum   = subVI * src[index] + subV * src[index + src_linesize];
-                    sum   = (sum + (1 << (SUB_PIXEL_BITS - 1))) >> SUB_PIXEL_BITS;
-                } else {
-                    if (v < 0)
-                        v = 0;
-                    else
-                        v = h - 1;
-                    index = u + v * src_linesize;
-                    sum   = src[index];
-                }
-            }
-
-            sum = av_clip_uint8(sum);
-            dst[x + y * dst_linesize] = sum;
-        }
-    }
-    return 0;
-}
-
-static av_cold int init(AVFilterContext *ctx)
-{
-    PerspectiveContext *s = ctx->priv;
-
-    switch (s->interpolation) {
-    case LINEAR: s->perspective = resample_linear; break;
-    case CUBIC:  s->perspective = resample_cubic;  break;
-    }
-
-    return 0;
-}
-
-static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
-{
-    AVFilterContext *ctx = inlink->dst;
-    AVFilterLink *outlink = ctx->outputs[0];
-    PerspectiveContext *s = ctx->priv;
-    AVFrame *out;
-    int plane;
-    int ret;
-
-    out = ff_get_video_buffer(outlink, outlink->w, outlink->h);
-    if (!out) {
-        av_frame_free(&frame);
-        return AVERROR(ENOMEM);
-    }
-    av_frame_copy_props(out, frame);
-
-    if (s->eval_mode == EVAL_MODE_FRAME) {
-        if ((ret = calc_persp_luts(ctx, inlink)) < 0) {
-            av_frame_free(&out);
-            return ret;
-        }
-    }
-
-    for (plane = 0; plane < s->nb_planes; plane++) {
-        int hsub = plane == 1 || plane == 2 ? s->hsub : 0;
-        int vsub = plane == 1 || plane == 2 ? s->vsub : 0;
-        ThreadData td = {.dst = out->data[plane],
-                         .dst_linesize = out->linesize[plane],
-                         .src = frame->data[plane],
-                         .src_linesize = frame->linesize[plane],
-                         .w = s->linesize[plane],
-                         .h = s->height[plane],
-                         .hsub = hsub,
-                         .vsub = vsub };
-        ctx->internal->execute(ctx, s->perspective, &td, NULL, FFMIN(td.h, ff_filter_get_nb_threads(ctx)));
-    }
-
-    av_frame_free(&frame);
-    return ff_filter_frame(outlink, out);
-}
-
-static av_cold void uninit(AVFilterContext *ctx)
-{
-    PerspectiveContext *s = ctx->priv;
-
-    av_freep(&s->pv);
-}
-
-static const AVFilterPad perspective_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .filter_frame = filter_frame,
-        .config_props = config_input,
-    },
-    { NULL }
-};
-
-static const AVFilterPad perspective_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-    { NULL }
-};
-
-AVFilter ff_vf_perspective = {
-    .name          = "perspective",
-    .description   = NULL_IF_CONFIG_SMALL("Correct the perspective of video."),
-    .priv_size     = sizeof(PerspectiveContext),
-    .init          = init,
-    .uninit        = uninit,
-    .query_formats = query_formats,
-    .inputs        = perspective_inputs,
-    .outputs       = perspective_outputs,
-    .priv_class    = &perspective_class,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC | AVFILTER_FLAG_SLICE_THREADS,
-};
diff --git a/libavfilter/vf_phase.c b/libavfilter/vf_phase.c
deleted file mode 100644
index 8536444..0000000
--- a/libavfilter/vf_phase.c
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * Copyright (c) 2004 Ville Saari
- *
- * 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
- */
-
-#include "libavutil/avassert.h"
-#include "libavutil/imgutils.h"
-#include "libavutil/pixdesc.h"
-#include "libavutil/opt.h"
-#include "avfilter.h"
-#include "formats.h"
-#include "internal.h"
-#include "video.h"
-
-enum PhaseMode {
-    PROGRESSIVE,
-    TOP_FIRST,
-    BOTTOM_FIRST,
-    TOP_FIRST_ANALYZE,
-    BOTTOM_FIRST_ANALYZE,
-    ANALYZE,
-    FULL_ANALYZE,
-    AUTO,
-    AUTO_ANALYZE
-};
-
-#define DEPTH 8
-#include "phase_template.c"
-
-#undef DEPTH
-#define DEPTH 9
-#include "phase_template.c"
-
-#undef DEPTH
-#define DEPTH 10
-#include "phase_template.c"
-
-#undef DEPTH
-#define DEPTH 12
-#include "phase_template.c"
-
-#undef DEPTH
-#define DEPTH 14
-#include "phase_template.c"
-
-#undef DEPTH
-#define DEPTH 16
-#include "phase_template.c"
-
-typedef struct PhaseContext {
-    const AVClass *class;
-    int mode;                   ///<PhaseMode
-    AVFrame *frame; /* previous frame */
-    int nb_planes;
-    int planeheight[4];
-    int linesize[4];
-
-    enum PhaseMode (*analyze_plane)(void *ctx, enum PhaseMode mode, AVFrame *old, AVFrame *new);
-} PhaseContext;
-
-#define OFFSET(x) offsetof(PhaseContext, x)
-#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
-#define CONST(name, help, val, unit) { name, help, 0, AV_OPT_TYPE_CONST, {.i64=val}, 0, 0, FLAGS, unit }
-
-static const AVOption phase_options[] = {
-    { "mode", "set phase mode", OFFSET(mode), AV_OPT_TYPE_INT, {.i64=AUTO_ANALYZE}, PROGRESSIVE, AUTO_ANALYZE, FLAGS, "mode" },
-    CONST("p", "progressive",          PROGRESSIVE,          "mode"),
-    CONST("t", "top first",            TOP_FIRST,            "mode"),
-    CONST("b", "bottom first",         BOTTOM_FIRST,         "mode"),
-    CONST("T", "top first analyze",    TOP_FIRST_ANALYZE,    "mode"),
-    CONST("B", "bottom first analyze", BOTTOM_FIRST_ANALYZE, "mode"),
-    CONST("u", "analyze",              ANALYZE,              "mode"),
-    CONST("U", "full analyze",         FULL_ANALYZE,         "mode"),
-    CONST("a", "auto",                 AUTO,                 "mode"),
-    CONST("A", "auto analyze",         AUTO_ANALYZE,         "mode"),
-    { NULL }
-};
-
-AVFILTER_DEFINE_CLASS(phase);
-
-static int query_formats(AVFilterContext *ctx)
-{
-    static const enum AVPixelFormat pix_fmts[] = {
-        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_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,
-        AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV420P12,
-        AV_PIX_FMT_YUV440P12,
-        AV_PIX_FMT_YUV444P14, AV_PIX_FMT_YUV422P14, AV_PIX_FMT_YUV420P14,
-        AV_PIX_FMT_YUV420P16, AV_PIX_FMT_YUV422P16, AV_PIX_FMT_YUV444P16,
-        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_YUVA420P,  AV_PIX_FMT_YUVA422P,   AV_PIX_FMT_YUVA444P,
-        AV_PIX_FMT_YUVA444P9, AV_PIX_FMT_YUVA444P10, AV_PIX_FMT_YUVA444P12, AV_PIX_FMT_YUVA444P16,
-        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_GBRAP,     AV_PIX_FMT_GBRAP10,    AV_PIX_FMT_GBRAP12,    AV_PIX_FMT_GBRAP16,
-        AV_PIX_FMT_NONE
-    };
-
-    AVFilterFormats *fmts_list = ff_make_format_list(pix_fmts);
-    if (!fmts_list)
-        return AVERROR(ENOMEM);
-    return ff_set_common_formats(ctx, fmts_list);
-}
-
-static int config_input(AVFilterLink *inlink)
-{
-    PhaseContext *s = inlink->dst->priv;
-    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(inlink->format);
-    int ret;
-
-    switch (desc->comp[0].depth) {
-    case  8: s->analyze_plane = analyze_plane_8;  break;
-    case  9: s->analyze_plane = analyze_plane_9;  break;
-    case 10: s->analyze_plane = analyze_plane_10; break;
-    case 12: s->analyze_plane = analyze_plane_12; break;
-    case 14: s->analyze_plane = analyze_plane_14; break;
-    case 16: s->analyze_plane = analyze_plane_16; break;
-    default: av_assert0(0);
-    };
-
-    if ((ret = av_image_fill_linesizes(s->linesize, inlink->format, inlink->w)) < 0)
-        return ret;
-
-    s->planeheight[1] = s->planeheight[2] = AV_CEIL_RSHIFT(inlink->h, desc->log2_chroma_h);
-    s->planeheight[0] = s->planeheight[3] = inlink->h;
-
-    s->nb_planes = av_pix_fmt_count_planes(inlink->format);
-
-    return 0;
-}
-
-static int filter_frame(AVFilterLink *inlink, AVFrame *in)
-{
-    AVFilterContext *ctx = inlink->dst;
-    AVFilterLink *outlink = ctx->outputs[0];
-    PhaseContext *s = ctx->priv;
-    enum PhaseMode mode;
-    int plane, top, y;
-    AVFrame *out;
-
-    if (ctx->is_disabled) {
-        av_frame_free(&s->frame);
-        /* we keep a reference to the previous frame so the filter can start
-         * being useful as soon as it's not disabled, avoiding the 1-frame
-         * delay. */
-        s->frame = av_frame_clone(in);
-        return ff_filter_frame(outlink, in);
-    }
-
-    out = ff_get_video_buffer(outlink, outlink->w, outlink->h);
-    if (!out) {
-        av_frame_free(&in);
-        return AVERROR(ENOMEM);
-    }
-    av_frame_copy_props(out, in);
-
-    if (!s->frame) {
-        s->frame = in;
-        mode = PROGRESSIVE;
-    } else {
-        mode = s->analyze_plane(ctx, s->mode, s->frame, in);
-    }
-
-    for (plane = 0; plane < s->nb_planes; plane++) {
-        const uint8_t *buf = s->frame->data[plane];
-        const uint8_t *from = in->data[plane];
-        uint8_t *to = out->data[plane];
-
-        for (y = 0, top = 1; y < s->planeheight[plane]; y++, top ^= 1) {
-            memcpy(to, mode == (top ? BOTTOM_FIRST : TOP_FIRST) ? buf : from, s->linesize[plane]);
-
-            buf += s->frame->linesize[plane];
-            from += in->linesize[plane];
-            to += out->linesize[plane];
-        }
-    }
-
-    if (in != s->frame)
-        av_frame_free(&s->frame);
-    s->frame = in;
-    return ff_filter_frame(outlink, out);
-}
-
-static av_cold void uninit(AVFilterContext *ctx)
-{
-    PhaseContext *s = ctx->priv;
-
-    av_frame_free(&s->frame);
-}
-
-static const AVFilterPad phase_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .filter_frame = filter_frame,
-        .config_props = config_input,
-    },
-    { NULL }
-};
-
-static const AVFilterPad phase_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-    { NULL }
-};
-
-AVFilter ff_vf_phase = {
-    .name          = "phase",
-    .description   = NULL_IF_CONFIG_SMALL("Phase shift fields."),
-    .priv_size     = sizeof(PhaseContext),
-    .priv_class    = &phase_class,
-    .uninit        = uninit,
-    .query_formats = query_formats,
-    .inputs        = phase_inputs,
-    .outputs       = phase_outputs,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
-};
diff --git a/libavfilter/vf_pp.c b/libavfilter/vf_pp.c
deleted file mode 100644
index 524ef1b..0000000
--- a/libavfilter/vf_pp.c
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Copyright (c) 2002 A'rpi
- * Copyright (C) 2012 Clément Bœsch
- *
- * 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
- * libpostproc filter, ported from MPlayer.
- */
-
-#include "libavutil/avassert.h"
-#include "libavutil/opt.h"
-#include "internal.h"
-
-#include "libpostproc/postprocess.h"
-
-typedef struct PPFilterContext {
-    const AVClass *class;
-    char *subfilters;
-    int mode_id;
-    pp_mode *modes[PP_QUALITY_MAX + 1];
-    void *pp_ctx;
-} PPFilterContext;
-
-#define OFFSET(x) offsetof(PPFilterContext, x)
-#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
-static const AVOption pp_options[] = {
-    { "subfilters", "set postprocess subfilters", OFFSET(subfilters), AV_OPT_TYPE_STRING, {.str="de"}, .flags = FLAGS },
-    { NULL }
-};
-
-AVFILTER_DEFINE_CLASS(pp);
-
-static av_cold int pp_init(AVFilterContext *ctx)
-{
-    int i;
-    PPFilterContext *pp = ctx->priv;
-
-    for (i = 0; i <= PP_QUALITY_MAX; i++) {
-        pp->modes[i] = pp_get_mode_by_name_and_quality(pp->subfilters, i);
-        if (!pp->modes[i])
-            return AVERROR_EXTERNAL;
-    }
-    pp->mode_id = PP_QUALITY_MAX;
-    return 0;
-}
-
-static int pp_process_command(AVFilterContext *ctx, const char *cmd, const char *args,
-                              char *res, int res_len, int flags)
-{
-    PPFilterContext *pp = ctx->priv;
-
-    if (!strcmp(cmd, "quality")) {
-        pp->mode_id = av_clip(strtol(args, NULL, 10), 0, PP_QUALITY_MAX);
-        return 0;
-    }
-    return AVERROR(ENOSYS);
-}
-
-static int pp_query_formats(AVFilterContext *ctx)
-{
-    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_YUV411P,
-        AV_PIX_FMT_GBRP,
-        AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVJ444P,
-        AV_PIX_FMT_YUV440P, AV_PIX_FMT_YUVJ440P,
-        AV_PIX_FMT_GRAY8,
-        AV_PIX_FMT_NONE
-    };
-
-    AVFilterFormats *fmts_list = ff_make_format_list(pix_fmts);
-    if (!fmts_list)
-        return AVERROR(ENOMEM);
-    return ff_set_common_formats(ctx, fmts_list);
-}
-
-static int pp_config_props(AVFilterLink *inlink)
-{
-    int flags = PP_CPU_CAPS_AUTO;
-    PPFilterContext *pp = inlink->dst->priv;
-
-    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);
-    }
-
-    pp->pp_ctx = pp_get_context(inlink->w, inlink->h, flags);
-    if (!pp->pp_ctx)
-        return AVERROR(ENOMEM);
-    return 0;
-}
-
-static int pp_filter_frame(AVFilterLink *inlink, AVFrame *inbuf)
-{
-    AVFilterContext *ctx = inlink->dst;
-    PPFilterContext *pp = ctx->priv;
-    AVFilterLink *outlink = ctx->outputs[0];
-    const int aligned_w = FFALIGN(outlink->w, 8);
-    const int aligned_h = FFALIGN(outlink->h, 8);
-    AVFrame *outbuf;
-    int qstride, qp_type;
-    int8_t *qp_table ;
-
-    outbuf = ff_get_video_buffer(outlink, aligned_w, aligned_h);
-    if (!outbuf) {
-        av_frame_free(&inbuf);
-        return AVERROR(ENOMEM);
-    }
-    av_frame_copy_props(outbuf, inbuf);
-    outbuf->width  = inbuf->width;
-    outbuf->height = inbuf->height;
-    qp_table = av_frame_get_qp_table(inbuf, &qstride, &qp_type);
-
-    pp_postprocess((const uint8_t **)inbuf->data, inbuf->linesize,
-                   outbuf->data,                 outbuf->linesize,
-                   aligned_w, outlink->h,
-                   qp_table,
-                   qstride,
-                   pp->modes[pp->mode_id],
-                   pp->pp_ctx,
-                   outbuf->pict_type | (qp_type ? PP_PICT_TYPE_QP2 : 0));
-
-    av_frame_free(&inbuf);
-    return ff_filter_frame(outlink, outbuf);
-}
-
-static av_cold void pp_uninit(AVFilterContext *ctx)
-{
-    int i;
-    PPFilterContext *pp = ctx->priv;
-
-    for (i = 0; i <= PP_QUALITY_MAX; i++)
-        pp_free_mode(pp->modes[i]);
-    if (pp->pp_ctx)
-        pp_free_context(pp->pp_ctx);
-}
-
-static const AVFilterPad pp_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .config_props = pp_config_props,
-        .filter_frame = pp_filter_frame,
-    },
-    { NULL }
-};
-
-static const AVFilterPad pp_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-    { NULL }
-};
-
-AVFilter ff_vf_pp = {
-    .name            = "pp",
-    .description     = NULL_IF_CONFIG_SMALL("Filter video using libpostproc."),
-    .priv_size       = sizeof(PPFilterContext),
-    .init            = pp_init,
-    .uninit          = pp_uninit,
-    .query_formats   = pp_query_formats,
-    .inputs          = pp_inputs,
-    .outputs         = pp_outputs,
-    .process_command = pp_process_command,
-    .priv_class      = &pp_class,
-    .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
-};
diff --git a/libavfilter/vf_pp7.c b/libavfilter/vf_pp7.c
deleted file mode 100644
index 570a1c9..0000000
--- a/libavfilter/vf_pp7.c
+++ /dev/null
@@ -1,406 +0,0 @@
-/*
- * Copyright (c) 2005 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
- * Postprocessing filter - 7
- *
- * 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/opt.h"
-#include "libavutil/pixdesc.h"
-#include "internal.h"
-#include "vf_pp7.h"
-
-enum mode {
-    MODE_HARD,
-    MODE_SOFT,
-    MODE_MEDIUM
-};
-
-#define OFFSET(x) offsetof(PP7Context, x)
-#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
-static const AVOption pp7_options[] = {
-    { "qp", "force a constant quantizer parameter", OFFSET(qp), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 64, FLAGS },
-    { "mode", "set thresholding mode", OFFSET(mode), AV_OPT_TYPE_INT, {.i64 = MODE_MEDIUM}, 0, 2, FLAGS, "mode" },
-        { "hard",   "hard thresholding",   0, AV_OPT_TYPE_CONST, {.i64 = MODE_HARD},   INT_MIN, INT_MAX, FLAGS, "mode" },
-        { "soft",   "soft thresholding",   0, AV_OPT_TYPE_CONST, {.i64 = MODE_SOFT},   INT_MIN, INT_MAX, FLAGS, "mode" },
-        { "medium", "medium thresholding", 0, AV_OPT_TYPE_CONST, {.i64 = MODE_MEDIUM}, INT_MIN, INT_MAX, FLAGS, "mode" },
-    { NULL }
-};
-
-AVFILTER_DEFINE_CLASS(pp7);
-
-DECLARE_ALIGNED(8, static const uint8_t, dither)[8][8] = {
-    {  0,  48,  12,  60,   3,  51,  15,  63, },
-    { 32,  16,  44,  28,  35,  19,  47,  31, },
-    {  8,  56,   4,  52,  11,  59,   7,  55, },
-    { 40,  24,  36,  20,  43,  27,  39,  23, },
-    {  2,  50,  14,  62,   1,  49,  13,  61, },
-    { 34,  18,  46,  30,  33,  17,  45,  29, },
-    { 10,  58,   6,  54,   9,  57,   5,  53, },
-    { 42,  26,  38,  22,  41,  25,  37,  21, },
-};
-
-#define N0 4
-#define N1 5
-#define N2 10
-#define SN0 2
-#define SN1 2.2360679775
-#define SN2 3.16227766017
-#define N (1 << 16)
-
-static const int factor[16] = {
-    N / (N0 * N0), N / (N0 * N1), N / (N0 * N0), N / (N0 * N2),
-    N / (N1 * N0), N / (N1 * N1), N / (N1 * N0), N / (N1 * N2),
-    N / (N0 * N0), N / (N0 * N1), N / (N0 * N0), N / (N0 * N2),
-    N / (N2 * N0), N / (N2 * N1), N / (N2 * N0), N / (N2 * N2),
-};
-
-static void init_thres2(PP7Context *p)
-{
-    int qp, i;
-    int bias = 0; //FIXME
-
-    for (qp = 0; qp < 99; qp++) {
-        for (i = 0; i < 16; i++) {
-            p->thres2[qp][i] = ((i&1) ? SN2 : SN0) * ((i&4) ? SN2 : SN0) * FFMAX(1, qp) * (1<<2) - 1 - bias;
-        }
-    }
-}
-
-static inline void dctA_c(int16_t *dst, uint8_t *src, int stride)
-{
-    int i;
-
-    for (i = 0; i < 4; i++) {
-        int s0 = src[0 * stride] + src[6 * stride];
-        int s1 = src[1 * stride] + src[5 * stride];
-        int s2 = src[2 * stride] + src[4 * stride];
-        int s3 = src[3 * stride];
-        int s = s3 + s3;
-        s3 = s  - s0;
-        s0 = s  + s0;
-        s  = s2 + s1;
-        s2 = s2 - s1;
-        dst[0] = s0 + s;
-        dst[2] = s0 - s;
-        dst[1] = 2 * s3 +     s2;
-        dst[3] =     s3 - 2 * s2;
-        src++;
-        dst += 4;
-    }
-}
-
-static void dctB_c(int16_t *dst, int16_t *src)
-{
-    int i;
-
-    for (i = 0; i < 4; i++) {
-        int s0 = src[0 * 4] + src[6 * 4];
-        int s1 = src[1 * 4] + src[5 * 4];
-        int s2 = src[2 * 4] + src[4 * 4];
-        int s3 = src[3 * 4];
-        int s = s3 + s3;
-        s3 = s  - s0;
-        s0 = s  + s0;
-        s  = s2 + s1;
-        s2 = s2 - s1;
-        dst[0 * 4] = s0 + s;
-        dst[2 * 4] = s0 - s;
-        dst[1 * 4] = 2 * s3 +     s2;
-        dst[3 * 4] =     s3 - 2 * s2;
-        src++;
-        dst++;
-    }
-}
-
-static int hardthresh_c(PP7Context *p, int16_t *src, int qp)
-{
-    int i;
-    int a;
-
-    a = src[0] * factor[0];
-    for (i = 1; i < 16; i++) {
-        unsigned int threshold1 = p->thres2[qp][i];
-        unsigned int threshold2 = threshold1 << 1;
-        int level = src[i];
-        if (((unsigned)(level + threshold1)) > threshold2)
-            a += level * factor[i];
-    }
-    return (a + (1 << 11)) >> 12;
-}
-
-static int mediumthresh_c(PP7Context *p, int16_t *src, int qp)
-{
-    int i;
-    int a;
-
-    a = src[0] * factor[0];
-    for (i = 1; i < 16; i++) {
-        unsigned int threshold1 = p->thres2[qp][i];
-        unsigned int threshold2 = threshold1 << 1;
-        int level = src[i];
-        if (((unsigned)(level + threshold1)) > threshold2) {
-            if (((unsigned)(level + 2 * threshold1)) > 2 * threshold2)
-                a += level * factor[i];
-            else {
-                if (level > 0)
-                    a += 2 * (level - (int)threshold1) * factor[i];
-                else
-                    a += 2 * (level + (int)threshold1) * factor[i];
-            }
-        }
-    }
-    return (a + (1 << 11)) >> 12;
-}
-
-static int softthresh_c(PP7Context *p, int16_t *src, int qp)
-{
-    int i;
-    int a;
-
-    a = src[0] * factor[0];
-    for (i = 1; i < 16; i++) {
-        unsigned int threshold1 = p->thres2[qp][i];
-        unsigned int threshold2 = threshold1 << 1;
-        int level = src[i];
-        if (((unsigned)(level + threshold1)) > threshold2) {
-            if (level > 0)
-                a += (level - (int)threshold1) * factor[i];
-            else
-                a += (level + (int)threshold1) * factor[i];
-        }
-    }
-    return (a + (1 << 11)) >> 12;
-}
-
-static void filter(PP7Context *p, uint8_t *dst, uint8_t *src,
-                   int dst_stride, int src_stride,
-                   int width, int height,
-                   uint8_t *qp_store, int qp_stride, int is_luma)
-{
-    int x, y;
-    const int stride = is_luma ? p->temp_stride : ((width + 16 + 15) & (~15));
-    uint8_t *p_src = p->src + 8 * stride;
-    int16_t *block = (int16_t *)p->src;
-    int16_t *temp  = (int16_t *)(p->src + 32);
-
-    if (!src || !dst) return;
-    for (y = 0; y < height; y++) {
-        int index = 8 + 8 * stride + y * stride;
-        memcpy(p_src + index, src + y * src_stride, width);
-        for (x = 0; x < 8; x++) {
-            p_src[index         - x - 1]= p_src[index +         x    ];
-            p_src[index + width + x    ]= p_src[index + width - x - 1];
-        }
-    }
-    for (y = 0; y < 8; y++) {
-        memcpy(p_src + (    7 - y     ) * stride, p_src + (    y + 8     ) * stride, stride);
-        memcpy(p_src + (height + 8 + y) * stride, p_src + (height - y + 7) * stride, stride);
-    }
-    //FIXME (try edge emu)
-
-    for (y = 0; y < height; y++) {
-        for (x = -8; x < 0; x += 4) {
-            const int index = x + y * stride + (8 - 3) * (1 + stride) + 8; //FIXME silly offset
-            uint8_t *src  = p_src + index;
-            int16_t *tp   = temp + 4 * x;
-
-            dctA_c(tp + 4 * 8, src, stride);
-        }
-        for (x = 0; x < width; ) {
-            const int qps = 3 + is_luma;
-            int qp;
-            int end = FFMIN(x + 8, width);
-
-            if (p->qp)
-                qp = p->qp;
-            else {
-                qp = qp_store[ (FFMIN(x, width - 1) >> qps) + (FFMIN(y, height - 1) >> qps) * qp_stride];
-                qp = ff_norm_qscale(qp, p->qscale_type);
-            }
-            for (; x < end; x++) {
-                const int index = x + y * stride + (8 - 3) * (1 + stride) + 8; //FIXME silly offset
-                uint8_t *src = p_src + index;
-                int16_t *tp  = temp + 4 * x;
-                int v;
-
-                if ((x & 3) == 0)
-                    dctA_c(tp + 4 * 8, src, stride);
-
-                p->dctB(block, tp);
-
-                v = p->requantize(p, block, qp);
-                v = (v + dither[y & 7][x & 7]) >> 6;
-                if ((unsigned)v > 255)
-                    v = (-v) >> 31;
-                dst[x + y * dst_stride] = v;
-            }
-        }
-    }
-}
-
-static int query_formats(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_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
-    };
-
-    AVFilterFormats *fmts_list = ff_make_format_list(pix_fmts);
-    if (!fmts_list)
-        return AVERROR(ENOMEM);
-    return ff_set_common_formats(ctx, fmts_list);
-}
-
-static int config_input(AVFilterLink *inlink)
-{
-    AVFilterContext *ctx = inlink->dst;
-    PP7Context *pp7 = ctx->priv;
-    const int h = FFALIGN(inlink->h + 16, 16);
-    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(inlink->format);
-
-    pp7->hsub = desc->log2_chroma_w;
-    pp7->vsub = desc->log2_chroma_h;
-
-    pp7->temp_stride = FFALIGN(inlink->w + 16, 16);
-    pp7->src = av_malloc_array(pp7->temp_stride,  (h + 8) * sizeof(uint8_t));
-
-    if (!pp7->src)
-        return AVERROR(ENOMEM);
-
-    init_thres2(pp7);
-
-    switch (pp7->mode) {
-        case 0: pp7->requantize = hardthresh_c; break;
-        case 1: pp7->requantize = softthresh_c; break;
-        default:
-        case 2: pp7->requantize = mediumthresh_c; break;
-    }
-
-    pp7->dctB = dctB_c;
-
-    if (ARCH_X86)
-        ff_pp7_init_x86(pp7);
-
-    return 0;
-}
-
-static int filter_frame(AVFilterLink *inlink, AVFrame *in)
-{
-    AVFilterContext *ctx = inlink->dst;
-    PP7Context *pp7 = ctx->priv;
-    AVFilterLink *outlink = ctx->outputs[0];
-    AVFrame *out = in;
-
-    int qp_stride = 0;
-    uint8_t *qp_table = NULL;
-
-    if (!pp7->qp)
-        qp_table = av_frame_get_qp_table(in, &qp_stride, &pp7->qscale_type);
-
-    if (!ctx->is_disabled) {
-        const int cw = AV_CEIL_RSHIFT(inlink->w, pp7->hsub);
-        const int ch = AV_CEIL_RSHIFT(inlink->h, pp7->vsub);
-
-        /* 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);
-                return AVERROR(ENOMEM);
-            }
-            av_frame_copy_props(out, in);
-            out->width = in->width;
-            out->height = in->height;
-        }
-
-        if (qp_table || pp7->qp) {
-
-            filter(pp7, out->data[0], in->data[0], out->linesize[0], in->linesize[0],
-                   inlink->w, inlink->h, qp_table, qp_stride, 1);
-            filter(pp7, out->data[1], in->data[1], out->linesize[1], in->linesize[1],
-                   cw,        ch,        qp_table, qp_stride, 0);
-            filter(pp7, out->data[2], in->data[2], out->linesize[2], in->linesize[2],
-                   cw,        ch,        qp_table, qp_stride, 0);
-            emms_c();
-        }
-    }
-
-    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);
-    }
-    return ff_filter_frame(outlink, out);
-}
-
-static av_cold void uninit(AVFilterContext *ctx)
-{
-    PP7Context *pp7 = ctx->priv;
-    av_freep(&pp7->src);
-}
-
-static const AVFilterPad pp7_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .config_props = config_input,
-        .filter_frame = filter_frame,
-    },
-    { NULL }
-};
-
-static const AVFilterPad pp7_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-    { NULL }
-};
-
-AVFilter ff_vf_pp7 = {
-    .name            = "pp7",
-    .description     = NULL_IF_CONFIG_SMALL("Apply Postprocessing 7 filter."),
-    .priv_size       = sizeof(PP7Context),
-    .uninit          = uninit,
-    .query_formats   = query_formats,
-    .inputs          = pp7_inputs,
-    .outputs         = pp7_outputs,
-    .priv_class      = &pp7_class,
-    .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
-};
diff --git a/libavfilter/vf_pp7.h b/libavfilter/vf_pp7.h
deleted file mode 100644
index 9aa8d73..0000000
--- a/libavfilter/vf_pp7.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2005 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.
- */
-
-#ifndef AVFILTER_PP7_H
-#define AVFILTER_PP7_H
-
-#include "avfilter.h"
-
-typedef struct PP7Context {
-    AVClass *class;
-    int thres2[99][16];
-
-    int qp;
-    int mode;
-    int qscale_type;
-    int hsub;
-    int vsub;
-    int temp_stride;
-    uint8_t *src;
-
-    int (*requantize)(struct PP7Context *p, int16_t *src, int qp);
-    void (*dctB)(int16_t *dst, int16_t *src);
-
-} PP7Context;
-
-void ff_pp7_init_x86(PP7Context *pp7);
-
-#endif /* AVFILTER_PP7_H */
diff --git a/libavfilter/vf_pullup.c b/libavfilter/vf_pullup.c
deleted file mode 100644
index fa76caa..0000000
--- a/libavfilter/vf_pullup.c
+++ /dev/null
@@ -1,776 +0,0 @@
-/*
- * Copyright (c) 2003 Rich Felker
- *
- * 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
- */
-
-#include "libavutil/avassert.h"
-#include "libavutil/imgutils.h"
-#include "libavutil/opt.h"
-#include "libavutil/pixdesc.h"
-#include "avfilter.h"
-#include "formats.h"
-#include "internal.h"
-#include "video.h"
-#include "vf_pullup.h"
-
-#define F_HAVE_BREAKS   1
-#define F_HAVE_AFFINITY 2
-
-#define BREAK_LEFT  1
-#define BREAK_RIGHT 2
-
-#define OFFSET(x) offsetof(PullupContext, x)
-#define FLAGS AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_FILTERING_PARAM
-
-static const AVOption pullup_options[] = {
-    { "jl", "set left junk size",  OFFSET(junk_left),  AV_OPT_TYPE_INT, {.i64=1}, 0, INT_MAX, FLAGS },
-    { "jr", "set right junk size", OFFSET(junk_right), AV_OPT_TYPE_INT, {.i64=1}, 0, INT_MAX, FLAGS },
-    { "jt", "set top junk size",   OFFSET(junk_top),   AV_OPT_TYPE_INT, {.i64=4}, 1, INT_MAX, FLAGS },
-    { "jb", "set bottom junk size", OFFSET(junk_bottom), AV_OPT_TYPE_INT, {.i64=4}, 1, INT_MAX, FLAGS },
-    { "sb", "set strict breaks", OFFSET(strict_breaks), AV_OPT_TYPE_BOOL,{.i64=0},-1, 1, FLAGS },
-    { "mp", "set metric plane",  OFFSET(metric_plane),  AV_OPT_TYPE_INT, {.i64=0}, 0, 2, FLAGS, "mp" },
-    { "y", "luma",        0, AV_OPT_TYPE_CONST, {.i64=0}, 0, 0, FLAGS, "mp" },
-    { "u", "chroma blue", 0, AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, FLAGS, "mp" },
-    { "v", "chroma red",  0, AV_OPT_TYPE_CONST, {.i64=2}, 0, 0, FLAGS, "mp" },
-    { NULL }
-};
-
-AVFILTER_DEFINE_CLASS(pullup);
-
-static int query_formats(AVFilterContext *ctx)
-{
-    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_NONE
-    };
-
-    AVFilterFormats *fmts_list = ff_make_format_list(pix_fmts);
-    if (!fmts_list)
-        return AVERROR(ENOMEM);
-    return ff_set_common_formats(ctx, fmts_list);
-}
-
-#define ABS(a) (((a) ^ ((a) >> 31)) - ((a) >> 31))
-
-static int diff_c(const uint8_t *a, const uint8_t *b, ptrdiff_t s)
-{
-    int i, j, diff = 0;
-
-    for (i = 0; i < 4; i++) {
-        for (j = 0; j < 8; j++)
-            diff += ABS(a[j] - b[j]);
-        a += s;
-        b += s;
-    }
-
-    return diff;
-}
-
-static int comb_c(const uint8_t *a, const uint8_t *b, ptrdiff_t s)
-{
-    int i, j, comb = 0;
-
-    for (i = 0; i < 4; i++) {
-        for (j = 0; j < 8; j++)
-            comb += ABS((a[j] << 1) - b[j - s] - b[j    ]) +
-                    ABS((b[j] << 1) - a[j    ] - a[j + s]);
-        a += s;
-        b += s;
-    }
-
-    return comb;
-}
-
-static int var_c(const uint8_t *a, const uint8_t *b, ptrdiff_t s)
-{
-    int i, j, var = 0;
-
-    for (i = 0; i < 3; i++) {
-        for (j = 0; j < 8; j++)
-            var += ABS(a[j] - a[j + s]);
-        a += s;
-    }
-
-    return 4 * var; /* match comb scaling */
-}
-
-static int alloc_metrics(PullupContext *s, PullupField *f)
-{
-    f->diffs = av_calloc(FFALIGN(s->metric_length, 16), sizeof(*f->diffs));
-    f->combs = av_calloc(FFALIGN(s->metric_length, 16), sizeof(*f->combs));
-    f->vars  = av_calloc(FFALIGN(s->metric_length, 16), sizeof(*f->vars));
-
-    if (!f->diffs || !f->combs || !f->vars) {
-        av_freep(&f->diffs);
-        av_freep(&f->combs);
-        av_freep(&f->vars);
-        return AVERROR(ENOMEM);
-    }
-    return 0;
-}
-
-static void free_field_queue(PullupField *head)
-{
-    PullupField *f = head;
-    do {
-        PullupField *next;
-        if (!f)
-            break;
-        av_free(f->diffs);
-        av_free(f->combs);
-        av_free(f->vars);
-        next = f->next;
-        memset(f, 0, sizeof(*f)); // clear all pointers to avoid stale ones
-        av_free(f);
-        f = next;
-    } while (f != head);
-}
-
-static PullupField *make_field_queue(PullupContext *s, int len)
-{
-    PullupField *head, *f;
-
-    f = head = av_mallocz(sizeof(*head));
-    if (!f)
-        return NULL;
-
-    if (alloc_metrics(s, f) < 0) {
-        av_free(f);
-        return NULL;
-    }
-
-    for (; len > 0; len--) {
-        f->next = av_mallocz(sizeof(*f->next));
-        if (!f->next) {
-            free_field_queue(head);
-            return NULL;
-        }
-
-        f->next->prev = f;
-        f = f->next;
-        if (alloc_metrics(s, f) < 0) {
-            free_field_queue(head);
-            return NULL;
-        }
-    }
-
-    f->next = head;
-    head->prev = f;
-
-    return head;
-}
-
-static int config_input(AVFilterLink *inlink)
-{
-    AVFilterContext *ctx = inlink->dst;
-    PullupContext *s = ctx->priv;
-    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(inlink->format);
-    int mp = s->metric_plane;
-
-    s->nb_planes = av_pix_fmt_count_planes(inlink->format);
-
-    if (mp + 1 > s->nb_planes) {
-        av_log(ctx, AV_LOG_ERROR, "input format does not have such plane\n");
-        return AVERROR(EINVAL);
-    }
-
-    s->planeheight[1] = s->planeheight[2] = AV_CEIL_RSHIFT(inlink->h, desc->log2_chroma_h);
-    s->planeheight[0] = s->planeheight[3] = inlink->h;
-    s->planewidth[1]  = s->planewidth[2]  = AV_CEIL_RSHIFT(inlink->w, desc->log2_chroma_w);
-    s->planewidth[0]  = s->planewidth[3]  = inlink->w;
-
-    s->metric_w      = (s->planewidth[mp]  - ((s->junk_left + s->junk_right)  << 3)) >> 3;
-    s->metric_h      = (s->planeheight[mp] - ((s->junk_top  + s->junk_bottom) << 1)) >> 3;
-    s->metric_offset = (s->junk_left << 3) + (s->junk_top << 1) * s->planewidth[mp];
-    s->metric_length = s->metric_w * s->metric_h;
-
-    av_log(ctx, AV_LOG_DEBUG, "w: %d h: %d\n", s->metric_w, s->metric_h);
-    av_log(ctx, AV_LOG_DEBUG, "offset: %d length: %d\n", s->metric_offset, s->metric_length);
-
-    s->head = make_field_queue(s, 8);
-    if (!s->head)
-        return AVERROR(ENOMEM);
-
-    s->diff = diff_c;
-    s->comb = comb_c;
-    s->var  = var_c;
-
-    if (ARCH_X86)
-        ff_pullup_init_x86(s);
-    return 0;
-}
-
-static PullupBuffer *pullup_lock_buffer(PullupBuffer *b, int parity)
-{
-    if (!b)
-        return NULL;
-
-    if ((parity + 1) & 1)
-        b->lock[0]++;
-    if ((parity + 1) & 2)
-        b->lock[1]++;
-
-    return b;
-}
-
-static void pullup_release_buffer(PullupBuffer *b, int parity)
-{
-    if (!b)
-        return;
-
-    if ((parity + 1) & 1)
-        b->lock[0]--;
-    if ((parity + 1) & 2)
-        b->lock[1]--;
-}
-
-static int alloc_buffer(PullupContext *s, PullupBuffer *b)
-{
-    int i;
-
-    if (b->planes[0])
-        return 0;
-    for (i = 0; i < s->nb_planes; i++) {
-        b->planes[i] = av_malloc(s->planeheight[i] * s->planewidth[i]);
-    }
-    if (s->nb_planes == 1)
-        b->planes[1] = av_malloc(4*256);
-
-    return 0;
-}
-
-static PullupBuffer *pullup_get_buffer(PullupContext *s, int parity)
-{
-    int i;
-
-    /* Try first to get the sister buffer for the previous field */
-    if (parity < 2 && s->last && parity != s->last->parity
-        && !s->last->buffer->lock[parity]) {
-        alloc_buffer(s, s->last->buffer);
-        return pullup_lock_buffer(s->last->buffer, parity);
-    }
-
-    /* Prefer a buffer with both fields open */
-    for (i = 0; i < FF_ARRAY_ELEMS(s->buffers); i++) {
-        if (s->buffers[i].lock[0])
-            continue;
-        if (s->buffers[i].lock[1])
-            continue;
-        alloc_buffer(s, &s->buffers[i]);
-        return pullup_lock_buffer(&s->buffers[i], parity);
-    }
-
-    if (parity == 2)
-        return 0;
-
-    /* Search for any half-free buffer */
-    for (i = 0; i < FF_ARRAY_ELEMS(s->buffers); i++) {
-        if (((parity + 1) & 1) && s->buffers[i].lock[0])
-            continue;
-        if (((parity + 1) & 2) && s->buffers[i].lock[1])
-            continue;
-        alloc_buffer(s, &s->buffers[i]);
-        return pullup_lock_buffer(&s->buffers[i], parity);
-    }
-
-    return NULL;
-}
-
-static int queue_length(PullupField *begin, PullupField *end)
-{
-    PullupField *f;
-    int count = 1;
-
-    if (!begin || !end)
-        return 0;
-
-    for (f = begin; f != end; f = f->next)
-        count++;
-
-    return count;
-}
-
-static int find_first_break(PullupField *f, int max)
-{
-    int i;
-
-    for (i = 0; i < max; i++) {
-        if (f->breaks & BREAK_RIGHT || f->next->breaks & BREAK_LEFT)
-            return i + 1;
-        f = f->next;
-    }
-
-    return 0;
-}
-
-static void compute_breaks(PullupContext *s, PullupField *f0)
-{
-    PullupField *f1 = f0->next;
-    PullupField *f2 = f1->next;
-    PullupField *f3 = f2->next;
-    int i, l, max_l = 0, max_r = 0;
-
-    if (f0->flags & F_HAVE_BREAKS)
-        return;
-
-    f0->flags |= F_HAVE_BREAKS;
-
-    /* Special case when fields are 100% identical */
-    if (f0->buffer == f2->buffer && f1->buffer != f3->buffer) {
-        f2->breaks |= BREAK_RIGHT;
-        return;
-    }
-
-    if (f0->buffer != f2->buffer && f1->buffer == f3->buffer) {
-        f1->breaks |= BREAK_LEFT;
-        return;
-    }
-
-    for (i = 0; i < s->metric_length; i++) {
-        l = f2->diffs[i] - f3->diffs[i];
-
-        if ( l > max_l)
-            max_l =  l;
-        if (-l > max_r)
-            max_r = -l;
-    }
-
-    /* Don't get tripped up when differences are mostly quant error */
-    if (max_l + max_r < 128)
-        return;
-    if (max_l > 4 * max_r)
-        f1->breaks |= BREAK_LEFT;
-    if (max_r > 4 * max_l)
-        f2->breaks |= BREAK_RIGHT;
-}
-
-static void compute_affinity(PullupContext *s, PullupField *f)
-{
-    int i, max_l = 0, max_r = 0, l;
-
-    if (f->flags & F_HAVE_AFFINITY)
-        return;
-
-    f->flags |= F_HAVE_AFFINITY;
-
-    if (f->buffer == f->next->next->buffer) {
-        f->affinity             =  1;
-        f->next->affinity       =  0;
-        f->next->next->affinity = -1;
-        f->next->flags         |= F_HAVE_AFFINITY;
-        f->next->next->flags   |= F_HAVE_AFFINITY;
-        return;
-    }
-
-    for (i = 0; i < s->metric_length; i++) {
-        int v  = f->vars[i];
-        int lv = f->prev->vars[i];
-        int rv = f->next->vars[i];
-        int lc = f->      combs[i] - 2*(v < lv ? v : lv);
-        int rc = f->next->combs[i] - 2*(v < rv ? v : rv);
-
-        lc = FFMAX(lc, 0);
-        rc = FFMAX(rc, 0);
-        l  = lc - rc;
-
-        if ( l > max_l)
-            max_l =  l;
-        if (-l > max_r)
-            max_r = -l;
-    }
-
-    if (max_l + max_r < 64)
-        return;
-
-    if (max_r > 6 * max_l)
-        f->affinity = -1;
-    else if (max_l > 6 * max_r)
-        f->affinity =  1;
-}
-
-static int decide_frame_length(PullupContext *s)
-{
-    PullupField *f0 = s->first;
-    PullupField *f1 = f0->next;
-    PullupField *f2 = f1->next;
-    PullupField *f;
-    int i, l, n;
-
-    if (queue_length(s->first, s->last) < 4)
-        return 0;
-
-    f = s->first;
-    n = queue_length(f, s->last);
-    for (i = 0; i < n - 1; i++) {
-        if (i < n - 3)
-            compute_breaks(s, f);
-
-        compute_affinity(s, f);
-
-        f = f->next;
-    }
-
-    if (f0->affinity == -1)
-        return 1;
-
-    l = find_first_break(f0, 3);
-
-    if (l == 1 && s->strict_breaks < 0)
-        l = 0;
-
-    switch (l) {
-    case 1:
-        return 1 + (s->strict_breaks < 1 && f0->affinity == 1 && f1->affinity == -1);
-    case 2:
-        /* FIXME: strictly speaking, f0->prev is no longer valid... :) */
-        if (s->strict_pairs
-            && (f0->prev->breaks & BREAK_RIGHT) && (f2->breaks & BREAK_LEFT)
-            && (f0->affinity != 1 || f1->affinity != -1) )
-            return 1;
-        return 1 + (f1->affinity != 1);
-    case 3:
-        return 2 + (f2->affinity != 1);
-    default:
-        /* 9 possibilities covered before switch */
-        if (f1->affinity == 1)
-            return 1; /* covers 6 */
-        else if (f1->affinity == -1)
-            return 2; /* covers 6 */
-        else if (f2->affinity == -1) { /* covers 2 */
-            return (f0->affinity == 1) ? 3 : 1;
-        } else {
-            return 2; /* the remaining 6 */
-        }
-    }
-}
-
-static PullupFrame *pullup_get_frame(PullupContext *s)
-{
-    PullupFrame *fr = &s->frame;
-    int i, n = decide_frame_length(s);
-    int aff = s->first->next->affinity;
-
-    av_assert1(n < FF_ARRAY_ELEMS(fr->ifields));
-    if (!n || fr->lock)
-        return NULL;
-
-    fr->lock++;
-    fr->length = n;
-    fr->parity = s->first->parity;
-    fr->buffer = 0;
-
-    for (i = 0; i < n; i++) {
-        /* We cheat and steal the buffer without release+relock */
-        fr->ifields[i]   = s->first->buffer;
-        s->first->buffer = 0;
-        s->first         = s->first->next;
-    }
-
-    if (n == 1) {
-        fr->ofields[fr->parity    ] = fr->ifields[0];
-        fr->ofields[fr->parity ^ 1] = 0;
-    } else if (n == 2) {
-        fr->ofields[fr->parity    ] = fr->ifields[0];
-        fr->ofields[fr->parity ^ 1] = fr->ifields[1];
-    } else if (n == 3) {
-        if (!aff)
-            aff = (fr->ifields[0] == fr->ifields[1]) ? -1 : 1;
-        fr->ofields[fr->parity    ] = fr->ifields[1 + aff];
-        fr->ofields[fr->parity ^ 1] = fr->ifields[1      ];
-    }
-
-    pullup_lock_buffer(fr->ofields[0], 0);
-    pullup_lock_buffer(fr->ofields[1], 1);
-
-    if (fr->ofields[0] == fr->ofields[1]) {
-        fr->buffer = fr->ofields[0];
-        pullup_lock_buffer(fr->buffer, 2);
-        return fr;
-    }
-
-    return fr;
-}
-
-static void pullup_release_frame(PullupFrame *f)
-{
-    int i;
-
-    for (i = 0; i < f->length; i++)
-        pullup_release_buffer(f->ifields[i], f->parity ^ (i & 1));
-
-    pullup_release_buffer(f->ofields[0], 0);
-    pullup_release_buffer(f->ofields[1], 1);
-
-    if (f->buffer)
-        pullup_release_buffer(f->buffer, 2);
-    f->lock--;
-}
-
-static void compute_metric(PullupContext *s, int *dest,
-                           PullupField *fa, int pa, PullupField *fb, int pb,
-                           int (*func)(const uint8_t *, const uint8_t *, ptrdiff_t))
-{
-    int mp = s->metric_plane;
-    int xstep = 8;
-    int ystep = s->planewidth[mp] << 3;
-    int stride = s->planewidth[mp] << 1; /* field stride */
-    int w = s->metric_w * xstep;
-    uint8_t *a, *b;
-    int x, y;
-
-    if (!fa->buffer || !fb->buffer)
-        return;
-
-    /* Shortcut for duplicate fields (e.g. from RFF flag) */
-    if (fa->buffer == fb->buffer && pa == pb) {
-        memset(dest, 0, s->metric_length * sizeof(*dest));
-        return;
-    }
-
-    a = fa->buffer->planes[mp] + pa * s->planewidth[mp] + s->metric_offset;
-    b = fb->buffer->planes[mp] + pb * s->planewidth[mp] + s->metric_offset;
-
-    for (y = 0; y < s->metric_h; y++) {
-        for (x = 0; x < w; x += xstep)
-            *dest++ = func(a + x, b + x, stride);
-        a += ystep; b += ystep;
-    }
-}
-
-static int check_field_queue(PullupContext *s)
-{
-    int ret;
-
-    if (s->head->next == s->first) {
-        PullupField *f = av_mallocz(sizeof(*f));
-
-        if (!f)
-            return AVERROR(ENOMEM);
-
-        if ((ret = alloc_metrics(s, f)) < 0) {
-            av_free(f);
-            return ret;
-        }
-
-        f->prev        = s->head;
-        f->next        = s->first;
-        s->head->next  = f;
-        s->first->prev = f;
-    }
-
-    return 0;
-}
-
-static void pullup_submit_field(PullupContext *s, PullupBuffer *b, int parity)
-{
-    PullupField *f;
-
-    /* Grow the circular list if needed */
-    if (check_field_queue(s) < 0)
-        return;
-
-    /* Cannot have two fields of same parity in a row; drop the new one */
-    if (s->last && s->last->parity == parity)
-        return;
-
-    f = s->head;
-    f->parity   = parity;
-    f->buffer   = pullup_lock_buffer(b, parity);
-    f->flags    = 0;
-    f->breaks   = 0;
-    f->affinity = 0;
-
-    compute_metric(s, f->diffs, f, parity, f->prev->prev, parity, s->diff);
-    compute_metric(s, f->combs, parity ? f->prev : f, 0, parity ? f : f->prev, 1, s->comb);
-    compute_metric(s, f->vars, f, parity, f, -1, s->var);
-    emms_c();
-
-    /* Advance the circular list */
-    if (!s->first)
-        s->first = s->head;
-
-    s->last = s->head;
-    s->head = s->head->next;
-}
-
-static void copy_field(PullupContext *s,
-                       PullupBuffer *dst, PullupBuffer *src, int parity)
-{
-    uint8_t *dd, *ss;
-    int i;
-
-    for (i = 0; i < s->nb_planes; i++) {
-        ss = src->planes[i] + parity * s->planewidth[i];
-        dd = dst->planes[i] + parity * s->planewidth[i];
-
-        av_image_copy_plane(dd, s->planewidth[i] << 1,
-                            ss, s->planewidth[i] << 1,
-                            s->planewidth[i], s->planeheight[i] >> 1);
-    }
-}
-
-static void pullup_pack_frame(PullupContext *s, PullupFrame *fr)
-{
-    int i;
-
-    if (fr->buffer)
-        return;
-
-    if (fr->length < 2)
-        return; /* FIXME: deal with this */
-
-    for (i = 0; i < 2; i++) {
-        if (fr->ofields[i]->lock[i^1])
-            continue;
-
-        fr->buffer = fr->ofields[i];
-        pullup_lock_buffer(fr->buffer, 2);
-        copy_field(s, fr->buffer, fr->ofields[i^1], i^1);
-        return;
-    }
-
-    fr->buffer = pullup_get_buffer(s, 2);
-
-    copy_field(s, fr->buffer, fr->ofields[0], 0);
-    copy_field(s, fr->buffer, fr->ofields[1], 1);
-}
-
-static int filter_frame(AVFilterLink *inlink, AVFrame *in)
-{
-    AVFilterContext *ctx = inlink->dst;
-    AVFilterLink *outlink = ctx->outputs[0];
-    PullupContext *s = ctx->priv;
-    PullupBuffer *b;
-    PullupFrame *f;
-    AVFrame *out;
-    int p, ret = 0;
-
-    b = pullup_get_buffer(s, 2);
-    if (!b) {
-        av_log(ctx, AV_LOG_WARNING, "Could not get buffer!\n");
-        f = pullup_get_frame(s);
-        pullup_release_frame(f);
-        goto end;
-    }
-
-    av_image_copy(b->planes, s->planewidth,
-                  (const uint8_t**)in->data, in->linesize,
-                  inlink->format, inlink->w, inlink->h);
-
-    p = in->interlaced_frame ? !in->top_field_first : 0;
-    pullup_submit_field(s, b, p  );
-    pullup_submit_field(s, b, p^1);
-
-    if (in->repeat_pict)
-        pullup_submit_field(s, b, p);
-
-    pullup_release_buffer(b, 2);
-
-    f = pullup_get_frame(s);
-    if (!f)
-        goto end;
-
-    if (f->length < 2) {
-        pullup_release_frame(f);
-        f = pullup_get_frame(s);
-        if (!f)
-            goto end;
-        if (f->length < 2) {
-            pullup_release_frame(f);
-            if (!in->repeat_pict)
-                goto end;
-            f = pullup_get_frame(s);
-            if (!f)
-                goto end;
-            if (f->length < 2) {
-                pullup_release_frame(f);
-                goto end;
-            }
-        }
-    }
-
-    /* If the frame isn't already exportable... */
-    if (!f->buffer)
-        pullup_pack_frame(s, f);
-
-    out = ff_get_video_buffer(outlink, outlink->w, outlink->h);
-    if (!out) {
-        ret = AVERROR(ENOMEM);
-        goto end;
-    }
-    av_frame_copy_props(out, in);
-
-    av_image_copy(out->data, out->linesize,
-                  (const uint8_t**)f->buffer->planes, s->planewidth,
-                  inlink->format, inlink->w, inlink->h);
-
-    ret = ff_filter_frame(outlink, out);
-    pullup_release_frame(f);
-end:
-    av_frame_free(&in);
-    return ret;
-}
-
-static av_cold void uninit(AVFilterContext *ctx)
-{
-    PullupContext *s = ctx->priv;
-    int i;
-
-    free_field_queue(s->head);
-    s->last = NULL;
-
-    for (i = 0; i < FF_ARRAY_ELEMS(s->buffers); i++) {
-        av_freep(&s->buffers[i].planes[0]);
-        av_freep(&s->buffers[i].planes[1]);
-        av_freep(&s->buffers[i].planes[2]);
-    }
-}
-
-static const AVFilterPad pullup_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .filter_frame = filter_frame,
-        .config_props = config_input,
-    },
-    { NULL }
-};
-
-static const AVFilterPad pullup_outputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-    },
-    { NULL }
-};
-
-AVFilter ff_vf_pullup = {
-    .name          = "pullup",
-    .description   = NULL_IF_CONFIG_SMALL("Pullup from field sequence to frames."),
-    .priv_size     = sizeof(PullupContext),
-    .priv_class    = &pullup_class,
-    .uninit        = uninit,
-    .query_formats = query_formats,
-    .inputs        = pullup_inputs,
-    .outputs       = pullup_outputs,
-};
diff --git a/libavfilter/vf_pullup.h b/libavfilter/vf_pullup.h
deleted file mode 100644
index 8f59335..0000000
--- a/libavfilter/vf_pullup.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * 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
- */
-
-#ifndef AVFILTER_PULLUP_H
-#define AVFILTER_PULLUP_H
-
-#include "avfilter.h"
-
-typedef struct PullupBuffer {
-    int lock[2];
-    uint8_t *planes[4];
-} PullupBuffer;
-
-typedef struct PullupField {
-    int parity;
-    PullupBuffer *buffer;
-    unsigned flags;
-    int breaks;
-    int affinity;
-    int *diffs;
-    int *combs;
-    int *vars;
-    struct PullupField *prev, *next;
-} PullupField;
-
-typedef struct PullupFrame {
-    int lock;
-    int length;
-    int parity;
-    PullupBuffer *ifields[4], *ofields[2];
-    PullupBuffer *buffer;
-} PullupFrame;
-
-typedef struct PullupContext {
-    const AVClass *class;
-    int junk_left, junk_right, junk_top, junk_bottom;
-    int metric_plane;
-    int strict_breaks;
-    int strict_pairs;
-    int metric_w, metric_h, metric_length;
-    int metric_offset;
-    int nb_planes;
-    int planewidth[4];
-    int planeheight[4];
-    PullupField *first, *last, *head;
-    PullupBuffer buffers[10];
-    PullupFrame frame;
-
-    int (*diff)(const uint8_t *a, const uint8_t *b, ptrdiff_t s);
-    int (*comb)(const uint8_t *a, const uint8_t *b, ptrdiff_t s);
-    int (*var )(const uint8_t *a, const uint8_t *b, ptrdiff_t s);
-} PullupContext;
-
-void ff_pullup_init_x86(PullupContext *s);
-
-#endif /* AVFILTER_PULLUP_H */
diff --git a/libavfilter/vf_repeatfields.c b/libavfilter/vf_repeatfields.c
deleted file mode 100644
index 3ac432b..0000000
--- a/libavfilter/vf_repeatfields.c
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Copyright (c) 2003 Tobias Diedrich
- *
- * 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.
- */
-
-#include "libavutil/imgutils.h"
-#include "avfilter.h"
-#include "internal.h"
-
-typedef struct RepeatFieldsContext {
-    const AVClass *class;
-    int state;
-    int nb_planes;
-    int linesize[4];
-    int planeheight[4];
-    AVFrame *frame;
-} RepeatFieldsContext;
-
-static av_cold void uninit(AVFilterContext *ctx)
-{
-    RepeatFieldsContext *s = ctx->priv;
-
-    av_frame_free(&s->frame);
-}
-
-static int query_formats(AVFilterContext *ctx)
-{
-    static const enum AVPixelFormat pixel_fmts_eq[] = {
-        AV_PIX_FMT_GRAY8,
-        AV_PIX_FMT_YUV410P,
-        AV_PIX_FMT_YUV411P,
-        AV_PIX_FMT_YUV420P,
-        AV_PIX_FMT_YUV422P,
-        AV_PIX_FMT_YUV444P,
-        AV_PIX_FMT_NONE
-    };
-
-    AVFilterFormats *fmts_list = ff_make_format_list(pixel_fmts_eq);
-    if (!fmts_list)
-        return AVERROR(ENOMEM);
-    return ff_set_common_formats(ctx, fmts_list);
-}
-
-static int config_input(AVFilterLink *inlink)
-{
-    RepeatFieldsContext *s = inlink->dst->priv;
-    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(inlink->format);
-    int ret;
-
-    if ((ret = av_image_fill_linesizes(s->linesize, inlink->format, inlink->w)) < 0)
-        return ret;
-
-    s->planeheight[1] = s->planeheight[2] = AV_CEIL_RSHIFT(inlink->h, desc->log2_chroma_h);
-    s->planeheight[0] = s->planeheight[3] = inlink->h;
-
-    s->nb_planes = av_pix_fmt_count_planes(inlink->format);
-
-    return 0;
-}
-
-static void update_pts(AVFilterLink *link, AVFrame *f, int64_t pts, int fields)
-{
-    if (av_cmp_q(link->frame_rate, (AVRational){30000, 1001}) == 0 &&
-         av_cmp_q(link->time_base, (AVRational){1001, 60000}) <= 0
-    ) {
-        f->pts = pts + av_rescale_q(fields, (AVRational){1001, 60000}, link->time_base);
-    } else
-        f->pts = AV_NOPTS_VALUE;
-}
-
-static int filter_frame(AVFilterLink *inlink, AVFrame *in) {
-    AVFilterContext *ctx = inlink->dst;
-    AVFilterLink *outlink = inlink->dst->outputs[0];
-    RepeatFieldsContext *s = ctx->priv;
-    AVFrame *out;
-    int ret, i;
-    int state = s->state;
-
-    if (!s->frame) {
-        s->frame = av_frame_clone(in);
-        if (!s->frame)
-            return AVERROR(ENOMEM);
-        s->frame->pts = AV_NOPTS_VALUE;
-    }
-
-    out = s->frame;
-
-    if ((state == 0 && !in->top_field_first) ||
-        (state == 1 &&  in->top_field_first)) {
-        av_log(ctx, AV_LOG_WARNING, "Unexpected field flags: "
-                                    "state=%d top_field_first=%d repeat_first_field=%d\n",
-                                    state, in->top_field_first, in->repeat_pict);
-        state ^= 1;
-    }
-
-    if (state == 0) {
-        AVFrame *new;
-
-        new = av_frame_clone(in);
-        if (!new)
-            return AVERROR(ENOMEM);
-
-        ret = ff_filter_frame(outlink, new);
-
-        if (in->repeat_pict) {
-            av_frame_make_writable(out);
-            update_pts(outlink, out, in->pts, 2);
-            for (i = 0; i < s->nb_planes; i++) {
-                av_image_copy_plane(out->data[i], out->linesize[i] * 2,
-                                    in->data[i], in->linesize[i] * 2,
-                                    s->linesize[i], s->planeheight[i] / 2);
-            }
-            state = 1;
-        }
-    } else {
-        for (i = 0; i < s->nb_planes; i++) {
-            av_frame_make_writable(out);
-            av_image_copy_plane(out->data[i] + out->linesize[i], out->linesize[i] * 2,
-                                in->data[i] + in->linesize[i], in->linesize[i] * 2,
-                                s->linesize[i], s->planeheight[i] / 2);
-        }
-
-        ret = ff_filter_frame(outlink, av_frame_clone(out));
-
-        if (in->repeat_pict) {
-            AVFrame *new;
-
-            new = av_frame_clone(in);
-            if (!new)
-                return AVERROR(ENOMEM);
-
-            ret = ff_filter_frame(outlink, new);
-            state = 0;
-        } else {
-            av_frame_make_writable(out);
-            update_pts(outlink, out, in->pts, 1);
-            for (i = 0; i < s->nb_planes; i++) {
-                av_image_copy_plane(out->data[i], out->linesize[i] * 2,
-                                    in->data[i], in->linesize[i] * 2,
-                                    s->linesize[i], s->planeheight[i] / 2);
-            }
-        }
-    }
-
-    s->state = state;
-
-    av_frame_free(&in);
-    return ret;
-}
-
-static const AVFilterPad repeatfields_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .filter_frame = filter_frame,
-        .config_props = config_input,
-    },
-    { NULL }
-};
-
-static const AVFilterPad repeatfields_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-    { NULL }
-};
-
-AVFilter ff_vf_repeatfields = {
-    .name          = "repeatfields",
-    .description   = NULL_IF_CONFIG_SMALL("Hard repeat fields based on MPEG repeat field flag."),
-    .priv_size     = sizeof(RepeatFieldsContext),
-    .uninit        = uninit,
-    .inputs        = repeatfields_inputs,
-    .outputs       = repeatfields_outputs,
-    .query_formats = query_formats,
-};
diff --git a/libavfilter/vf_sab.c b/libavfilter/vf_sab.c
deleted file mode 100644
index 6f63654..0000000
--- a/libavfilter/vf_sab.c
+++ /dev/null
@@ -1,337 +0,0 @@
-/*
- * Copyright (c) 2002 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
- * Shape Adaptive Blur filter, ported from MPlayer libmpcodecs/vf_sab.c
- */
-
-#include "libavutil/opt.h"
-#include "libavutil/pixdesc.h"
-#include "libswscale/swscale.h"
-
-#include "avfilter.h"
-#include "formats.h"
-#include "internal.h"
-
-typedef struct FilterParam {
-    float radius;
-    float pre_filter_radius;
-    float strength;
-    float quality;
-    struct SwsContext *pre_filter_context;
-    uint8_t *pre_filter_buf;
-    int pre_filter_linesize;
-    int dist_width;
-    int dist_linesize;
-    int *dist_coeff;
-#define COLOR_DIFF_COEFF_SIZE 512
-    int color_diff_coeff[COLOR_DIFF_COEFF_SIZE];
-} FilterParam;
-
-typedef struct SabContext {
-    const AVClass *class;
-    FilterParam  luma;
-    FilterParam  chroma;
-    int          hsub;
-    int          vsub;
-    unsigned int sws_flags;
-} SabContext;
-
-static int query_formats(AVFilterContext *ctx)
-{
-    static const enum AVPixelFormat pix_fmts[] = {
-        AV_PIX_FMT_YUV420P,
-        AV_PIX_FMT_YUV410P,
-        AV_PIX_FMT_YUV444P,
-        AV_PIX_FMT_YUV422P,
-        AV_PIX_FMT_YUV411P,
-        AV_PIX_FMT_NONE
-    };
-    AVFilterFormats *fmts_list = ff_make_format_list(pix_fmts);
-    if (!fmts_list)
-        return AVERROR(ENOMEM);
-    return ff_set_common_formats(ctx, fmts_list);
-}
-
-#define RADIUS_MIN 0.1
-#define RADIUS_MAX 4.0
-
-#define PRE_FILTER_RADIUS_MIN 0.1
-#define PRE_FILTER_RADIUS_MAX 2.0
-
-#define STRENGTH_MIN 0.1
-#define STRENGTH_MAX 100.0
-
-#define OFFSET(x) offsetof(SabContext, x)
-#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
-
-static const AVOption sab_options[] = {
-    { "luma_radius",            "set luma radius", OFFSET(luma.radius), AV_OPT_TYPE_FLOAT, {.dbl=1.0}, RADIUS_MIN, RADIUS_MAX, .flags=FLAGS },
-    { "lr"         ,            "set luma radius", OFFSET(luma.radius), AV_OPT_TYPE_FLOAT, {.dbl=1.0}, RADIUS_MIN, RADIUS_MAX, .flags=FLAGS },
-    { "luma_pre_filter_radius", "set luma pre-filter radius", OFFSET(luma.pre_filter_radius), AV_OPT_TYPE_FLOAT, {.dbl=1.0}, PRE_FILTER_RADIUS_MIN, PRE_FILTER_RADIUS_MAX, .flags=FLAGS },
-    { "lpfr",                   "set luma pre-filter radius", OFFSET(luma.pre_filter_radius), AV_OPT_TYPE_FLOAT, {.dbl=1.0}, PRE_FILTER_RADIUS_MIN, PRE_FILTER_RADIUS_MAX, .flags=FLAGS },
-    { "luma_strength",          "set luma strength", OFFSET(luma.strength), AV_OPT_TYPE_FLOAT, {.dbl=1.0}, STRENGTH_MIN, STRENGTH_MAX, .flags=FLAGS },
-    { "ls",                     "set luma strength", OFFSET(luma.strength), AV_OPT_TYPE_FLOAT, {.dbl=1.0}, STRENGTH_MIN, STRENGTH_MAX, .flags=FLAGS },
-
-    { "chroma_radius",            "set chroma radius", OFFSET(chroma.radius), AV_OPT_TYPE_FLOAT, {.dbl=RADIUS_MIN-1}, RADIUS_MIN-1, RADIUS_MAX, .flags=FLAGS },
-    { "cr",                       "set chroma radius", OFFSET(chroma.radius), AV_OPT_TYPE_FLOAT, {.dbl=RADIUS_MIN-1}, RADIUS_MIN-1, RADIUS_MAX, .flags=FLAGS },
-    { "chroma_pre_filter_radius", "set chroma pre-filter radius",  OFFSET(chroma.pre_filter_radius), AV_OPT_TYPE_FLOAT, {.dbl=PRE_FILTER_RADIUS_MIN-1},
-                                  PRE_FILTER_RADIUS_MIN-1, PRE_FILTER_RADIUS_MAX, .flags=FLAGS },
-    { "cpfr",                     "set chroma pre-filter radius",  OFFSET(chroma.pre_filter_radius), AV_OPT_TYPE_FLOAT, {.dbl=PRE_FILTER_RADIUS_MIN-1},
-                                  PRE_FILTER_RADIUS_MIN-1, PRE_FILTER_RADIUS_MAX, .flags=FLAGS },
-    { "chroma_strength",          "set chroma strength", OFFSET(chroma.strength), AV_OPT_TYPE_FLOAT, {.dbl=STRENGTH_MIN-1}, STRENGTH_MIN-1, STRENGTH_MAX, .flags=FLAGS },
-    { "cs",                       "set chroma strength", OFFSET(chroma.strength), AV_OPT_TYPE_FLOAT, {.dbl=STRENGTH_MIN-1}, STRENGTH_MIN-1, STRENGTH_MAX, .flags=FLAGS },
-
-    { NULL }
-};
-
-AVFILTER_DEFINE_CLASS(sab);
-
-static av_cold int init(AVFilterContext *ctx)
-{
-    SabContext *s = ctx->priv;
-
-    /* make chroma default to luma values, if not explicitly set */
-    if (s->chroma.radius < RADIUS_MIN)
-        s->chroma.radius = s->luma.radius;
-    if (s->chroma.pre_filter_radius < PRE_FILTER_RADIUS_MIN)
-        s->chroma.pre_filter_radius = s->luma.pre_filter_radius;
-    if (s->chroma.strength < STRENGTH_MIN)
-        s->chroma.strength = s->luma.strength;
-
-    s->luma.quality = s->chroma.quality = 3.0;
-    s->sws_flags = SWS_POINT;
-
-    av_log(ctx, AV_LOG_VERBOSE,
-           "luma_radius:%f luma_pre_filter_radius::%f luma_strength:%f "
-           "chroma_radius:%f chroma_pre_filter_radius:%f chroma_strength:%f\n",
-           s->luma  .radius, s->luma  .pre_filter_radius, s->luma  .strength,
-           s->chroma.radius, s->chroma.pre_filter_radius, s->chroma.strength);
-    return 0;
-}
-
-static void close_filter_param(FilterParam *f)
-{
-    if (f->pre_filter_context) {
-        sws_freeContext(f->pre_filter_context);
-        f->pre_filter_context = NULL;
-    }
-    av_freep(&f->pre_filter_buf);
-    av_freep(&f->dist_coeff);
-}
-
-static av_cold void uninit(AVFilterContext *ctx)
-{
-    SabContext *s = ctx->priv;
-
-    close_filter_param(&s->luma);
-    close_filter_param(&s->chroma);
-}
-
-static int open_filter_param(FilterParam *f, int width, int height, unsigned int sws_flags)
-{
-    SwsVector *vec;
-    SwsFilter sws_f;
-    int i, x, y;
-    int linesize = FFALIGN(width, 8);
-
-    f->pre_filter_buf = av_malloc(linesize * height);
-    if (!f->pre_filter_buf)
-        return AVERROR(ENOMEM);
-
-    f->pre_filter_linesize = linesize;
-    vec = sws_getGaussianVec(f->pre_filter_radius, f->quality);
-    sws_f.lumH = sws_f.lumV = vec;
-    sws_f.chrH = sws_f.chrV = NULL;
-    f->pre_filter_context = sws_getContext(width, height, AV_PIX_FMT_GRAY8,
-                                           width, height, AV_PIX_FMT_GRAY8,
-                                           sws_flags, &sws_f, NULL, NULL);
-    sws_freeVec(vec);
-
-    vec = sws_getGaussianVec(f->strength, 5.0);
-    for (i = 0; i < COLOR_DIFF_COEFF_SIZE; i++) {
-        double d;
-        int index = i-COLOR_DIFF_COEFF_SIZE/2 + vec->length/2;
-
-        if (index < 0 || index >= vec->length) d = 0.0;
-        else                                   d = vec->coeff[index];
-
-        f->color_diff_coeff[i] = (int)(d/vec->coeff[vec->length/2]*(1<<12) + 0.5);
-    }
-    sws_freeVec(vec);
-
-    vec = sws_getGaussianVec(f->radius, f->quality);
-    f->dist_width    = vec->length;
-    f->dist_linesize = FFALIGN(vec->length, 8);
-    f->dist_coeff    = av_malloc_array(f->dist_width, f->dist_linesize * sizeof(*f->dist_coeff));
-    if (!f->dist_coeff) {
-        sws_freeVec(vec);
-        return AVERROR(ENOMEM);
-    }
-
-    for (y = 0; y < vec->length; y++) {
-        for (x = 0; x < vec->length; x++) {
-            double d = vec->coeff[x] * vec->coeff[y];
-            f->dist_coeff[x + y*f->dist_linesize] = (int)(d*(1<<10) + 0.5);
-        }
-    }
-    sws_freeVec(vec);
-
-    return 0;
-}
-
-static int config_props(AVFilterLink *inlink)
-{
-    SabContext *s = inlink->dst->priv;
-    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(inlink->format);
-    int ret;
-
-    s->hsub = desc->log2_chroma_w;
-    s->vsub = desc->log2_chroma_h;
-
-    close_filter_param(&s->luma);
-    ret = open_filter_param(&s->luma, inlink->w, inlink->h, s->sws_flags);
-    if (ret < 0)
-        return ret;
-
-    close_filter_param(&s->chroma);
-    ret = open_filter_param(&s->chroma,
-                            AV_CEIL_RSHIFT(inlink->w, s->hsub),
-                            AV_CEIL_RSHIFT(inlink->h, s->vsub), s->sws_flags);
-    return ret;
-}
-
-#define NB_PLANES 4
-
-static void blur(uint8_t       *dst, const int dst_linesize,
-                 const uint8_t *src, const int src_linesize,
-                 const int w, const int h, FilterParam *fp)
-{
-    int x, y;
-    FilterParam f = *fp;
-    const int radius = f.dist_width/2;
-
-    const uint8_t * const src2[NB_PLANES] = { src };
-    int          src2_linesize[NB_PLANES] = { src_linesize };
-    uint8_t     *dst2[NB_PLANES] = { f.pre_filter_buf };
-    int dst2_linesize[NB_PLANES] = { f.pre_filter_linesize };
-
-    sws_scale(f.pre_filter_context, src2, src2_linesize, 0, h, dst2, dst2_linesize);
-
-#define UPDATE_FACTOR do {                                              \
-        int factor;                                                     \
-        factor = f.color_diff_coeff[COLOR_DIFF_COEFF_SIZE/2 + pre_val - \
-                 f.pre_filter_buf[ix + iy*f.pre_filter_linesize]] * f.dist_coeff[dx + dy*f.dist_linesize]; \
-        sum += src[ix + iy*src_linesize] * factor;                      \
-        div += factor;                                                  \
-    } while (0)
-
-    for (y = 0; y < h; y++) {
-        for (x = 0; x < w; x++) {
-            int sum = 0;
-            int div = 0;
-            int dy;
-            const int pre_val = f.pre_filter_buf[x + y*f.pre_filter_linesize];
-            if (x >= radius && x < w - radius) {
-                for (dy = 0; dy < radius*2 + 1; dy++) {
-                    int dx;
-                    int iy = y+dy - radius;
-                    iy = avpriv_mirror(iy, h-1);
-
-                    for (dx = 0; dx < radius*2 + 1; dx++) {
-                        const int ix = x+dx - radius;
-                        UPDATE_FACTOR;
-                    }
-                }
-            } else {
-                for (dy = 0; dy < radius*2+1; dy++) {
-                    int dx;
-                    int iy = y+dy - radius;
-                    iy = avpriv_mirror(iy, h-1);
-
-                    for (dx = 0; dx < radius*2 + 1; dx++) {
-                        int ix = x+dx - radius;
-                        ix = avpriv_mirror(ix, w-1);
-                        UPDATE_FACTOR;
-                    }
-                }
-            }
-            dst[x + y*dst_linesize] = (sum + div/2) / div;
-        }
-    }
-}
-
-static int filter_frame(AVFilterLink *inlink, AVFrame *inpic)
-{
-    SabContext  *s = inlink->dst->priv;
-    AVFilterLink *outlink = inlink->dst->outputs[0];
-    AVFrame *outpic;
-
-    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);
-
-    blur(outpic->data[0], outpic->linesize[0], inpic->data[0],  inpic->linesize[0],
-         inlink->w, inlink->h, &s->luma);
-    if (inpic->data[2]) {
-        int cw = AV_CEIL_RSHIFT(inlink->w, s->hsub);
-        int ch = AV_CEIL_RSHIFT(inlink->h, s->vsub);
-        blur(outpic->data[1], outpic->linesize[1], inpic->data[1], inpic->linesize[1], cw, ch, &s->chroma);
-        blur(outpic->data[2], outpic->linesize[2], inpic->data[2], inpic->linesize[2], cw, ch, &s->chroma);
-    }
-
-    av_frame_free(&inpic);
-    return ff_filter_frame(outlink, outpic);
-}
-
-static const AVFilterPad sab_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .filter_frame = filter_frame,
-        .config_props = config_props,
-    },
-    { NULL }
-};
-
-static const AVFilterPad sab_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-    { NULL }
-};
-
-AVFilter ff_vf_sab = {
-    .name          = "sab",
-    .description   = NULL_IF_CONFIG_SMALL("Apply shape adaptive blur."),
-    .priv_size     = sizeof(SabContext),
-    .init          = init,
-    .uninit        = uninit,
-    .query_formats = query_formats,
-    .inputs        = sab_inputs,
-    .outputs       = sab_outputs,
-    .priv_class    = &sab_class,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
-};
diff --git a/libavfilter/vf_signature.c b/libavfilter/vf_signature.c
deleted file mode 100644
index d07b213..0000000
--- a/libavfilter/vf_signature.c
+++ /dev/null
@@ -1,771 +0,0 @@
-/*
- * Copyright (c) 2017 Gerion Entrup
- *
- * 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
- * MPEG-7 video signature calculation and lookup filter
- * @see http://epubs.surrey.ac.uk/531590/1/MPEG-7%20Video%20Signature%20Author%27s%20Copy.pdf
- */
-
-#include <float.h>
-#include "libavcodec/put_bits.h"
-#include "libavformat/avformat.h"
-#include "libavutil/opt.h"
-#include "libavutil/avstring.h"
-#include "libavutil/intreadwrite.h"
-#include "libavutil/timestamp.h"
-#include "avfilter.h"
-#include "internal.h"
-#include "signature.h"
-#include "signature_lookup.c"
-
-#define OFFSET(x) offsetof(SignatureContext, x)
-#define FLAGS AV_OPT_FLAG_FILTERING_PARAM | AV_OPT_FLAG_VIDEO_PARAM
-#define BLOCK_LCM (int64_t) 476985600
-
-static const AVOption signature_options[] = {
-    { "detectmode", "set the detectmode",
-        OFFSET(mode),         AV_OPT_TYPE_INT,    {.i64 = MODE_OFF}, 0, NB_LOOKUP_MODE-1, FLAGS, "mode" },
-        { "off",  NULL, 0, AV_OPT_TYPE_CONST, {.i64 = MODE_OFF},  0, 0, .flags = FLAGS, "mode" },
-        { "full", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = MODE_FULL}, 0, 0, .flags = FLAGS, "mode" },
-        { "fast", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = MODE_FAST}, 0, 0, .flags = FLAGS, "mode" },
-    { "nb_inputs",  "number of inputs",
-        OFFSET(nb_inputs),    AV_OPT_TYPE_INT,    {.i64 = 1},        1, INT_MAX,          FLAGS },
-    { "filename",   "filename for output files",
-        OFFSET(filename),     AV_OPT_TYPE_STRING, {.str = ""},       0, NB_FORMATS-1,     FLAGS },
-    { "format",     "set output format",
-        OFFSET(format),       AV_OPT_TYPE_INT,    {.i64 = FORMAT_BINARY}, 0, 1,           FLAGS , "format" },
-        { "binary", 0, 0, AV_OPT_TYPE_CONST, {.i64=FORMAT_BINARY}, 0, 0, FLAGS, "format" },
-        { "xml",    0, 0, AV_OPT_TYPE_CONST, {.i64=FORMAT_XML},    0, 0, FLAGS, "format" },
-    { "th_d",       "threshold to detect one word as similar",
-        OFFSET(thworddist),   AV_OPT_TYPE_INT,    {.i64 = 9000},     1, INT_MAX,          FLAGS },
-    { "th_dc",      "threshold to detect all words as similar",
-        OFFSET(thcomposdist), AV_OPT_TYPE_INT,    {.i64 = 60000},    1, INT_MAX,          FLAGS },
-    { "th_xh",      "threshold to detect frames as similar",
-        OFFSET(thl1),         AV_OPT_TYPE_INT,    {.i64 = 116},      1, INT_MAX,          FLAGS },
-    { "th_di",      "minimum length of matching sequence in frames",
-        OFFSET(thdi),         AV_OPT_TYPE_INT,    {.i64 = 0},        0, INT_MAX,          FLAGS },
-    { "th_it",      "threshold for relation of good to all frames",
-        OFFSET(thit),         AV_OPT_TYPE_DOUBLE, {.dbl = 0.5},    0.0, 1.0,              FLAGS },
-    { NULL }
-};
-
-AVFILTER_DEFINE_CLASS(signature);
-
-static int query_formats(AVFilterContext *ctx)
-{
-    /* all formats with a separate gray value */
-    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_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
-    };
-
-    return ff_set_common_formats(ctx, ff_make_format_list(pix_fmts));
-}
-
-static int config_input(AVFilterLink *inlink)
-{
-    AVFilterContext *ctx = inlink->dst;
-    SignatureContext *sic = ctx->priv;
-    StreamContext *sc = &(sic->streamcontexts[FF_INLINK_IDX(inlink)]);
-
-    sc->time_base = inlink->time_base;
-    /* test for overflow */
-    sc->divide = (((uint64_t) inlink->w/32) * (inlink->w/32 + 1) * (inlink->h/32 * inlink->h/32 + 1) > INT64_MAX / (BLOCK_LCM * 255));
-    if (sc->divide) {
-        av_log(ctx, AV_LOG_WARNING, "Input dimension too high for precise calculation, numbers will be rounded.\n");
-    }
-    sc->w = inlink->w;
-    sc->h = inlink->h;
-    return 0;
-}
-
-static int get_block_size(const Block *b)
-{
-    return (b->to.y - b->up.y + 1) * (b->to.x - b->up.x + 1);
-}
-
-static uint64_t get_block_sum(StreamContext *sc, uint64_t intpic[32][32], const Block *b)
-{
-    uint64_t sum = 0;
-
-    int x0, y0, x1, y1;
-
-    x0 = b->up.x;
-    y0 = b->up.y;
-    x1 = b->to.x;
-    y1 = b->to.y;
-
-    if (x0-1 >= 0 && y0-1 >= 0) {
-        sum = intpic[y1][x1] + intpic[y0-1][x0-1] - intpic[y1][x0-1] - intpic[y0-1][x1];
-    } else if (x0-1 >= 0) {
-        sum = intpic[y1][x1] - intpic[y1][x0-1];
-    } else if (y0-1 >= 0) {
-        sum = intpic[y1][x1] - intpic[y0-1][x1];
-    } else {
-        sum = intpic[y1][x1];
-    }
-    return sum;
-}
-
-static int cmp(const uint64_t *a, const uint64_t *b)
-{
-    return *a < *b ? -1 : ( *a > *b ? 1 : 0 );
-}
-
-/**
- * sets the bit at position pos to 1 in data
- */
-static void set_bit(uint8_t* data, size_t pos)
-{
-    uint8_t mask = 1 << 7-(pos%8);
-    data[pos/8] |= mask;
-}
-
-static int filter_frame(AVFilterLink *inlink, AVFrame *picref)
-{
-    AVFilterContext *ctx = inlink->dst;
-    SignatureContext *sic = ctx->priv;
-    StreamContext *sc = &(sic->streamcontexts[FF_INLINK_IDX(inlink)]);
-    FineSignature* fs;
-
-    static const uint8_t pot3[5] = { 3*3*3*3, 3*3*3, 3*3, 3, 1 };
-    /* indexes of words : 210,217,219,274,334  44,175,233,270,273  57,70,103,237,269  100,285,295,337,354  101,102,111,275,296
-    s2usw = sorted to unsorted wordvec: 44 is at index 5, 57 at index 10...
-    */
-    static const unsigned int wordvec[25] = {44,57,70,100,101,102,103,111,175,210,217,219,233,237,269,270,273,274,275,285,295,296,334,337,354};
-    static const uint8_t      s2usw[25]   = { 5,10,11, 15, 20, 21, 12, 22,  6,  0,  1,  2,  7, 13, 14,  8,  9,  3, 23, 16, 17, 24,  4, 18, 19};
-
-    uint8_t wordt2b[5] = { 0, 0, 0, 0, 0 }; /* word ternary to binary */
-    uint64_t intpic[32][32];
-    uint64_t rowcount;
-    uint8_t *p = picref->data[0];
-    int inti, intj;
-    int *intjlut;
-
-    uint64_t conflist[DIFFELEM_SIZE];
-    int f = 0, g = 0, w = 0;
-    int32_t dh1 = 1, dh2 = 1, dw1 = 1, dw2 = 1, a, b;
-    int64_t denom;
-    int i, j, k, ternary;
-    uint64_t blocksum;
-    int blocksize;
-    int64_t th; /* threshold */
-    int64_t sum;
-
-    int64_t precfactor = (sc->divide) ? 65536 : BLOCK_LCM;
-
-    /* initialize fs */
-    if (sc->curfinesig) {
-        fs = av_mallocz(sizeof(FineSignature));
-        if (!fs)
-            return AVERROR(ENOMEM);
-        sc->curfinesig->next = fs;
-        fs->prev = sc->curfinesig;
-        sc->curfinesig = fs;
-    } else {
-        fs = sc->curfinesig = sc->finesiglist;
-        sc->curcoarsesig1->first = fs;
-    }
-
-    fs->pts = picref->pts;
-    fs->index = sc->lastindex++;
-
-    memset(intpic, 0, sizeof(uint64_t)*32*32);
-    intjlut = av_malloc_array(inlink->w, sizeof(int));
-    if (!intjlut)
-        return AVERROR(ENOMEM);
-    for (i = 0; i < inlink->w; i++) {
-        intjlut[i] = (i*32)/inlink->w;
-    }
-
-    for (i = 0; i < inlink->h; i++) {
-        inti = (i*32)/inlink->h;
-        for (j = 0; j < inlink->w; j++) {
-            intj = intjlut[j];
-            intpic[inti][intj] += p[j];
-        }
-        p += picref->linesize[0];
-    }
-    av_freep(&intjlut);
-
-    /* The following calculates a summed area table (intpic) and brings the numbers
-     * in intpic to the same denominator.
-     * So you only have to handle the numinator in the following sections.
-     */
-    dh1 = inlink->h / 32;
-    if (inlink->h % 32)
-        dh2 = dh1 + 1;
-    dw1 = inlink->w / 32;
-    if (inlink->w % 32)
-        dw2 = dw1 + 1;
-    denom = (sc->divide) ? dh1 * dh2 * dw1 * dw2 : 1;
-
-    for (i = 0; i < 32; i++) {
-        rowcount = 0;
-        a = 1;
-        if (dh2 > 1) {
-            a = ((inlink->h*(i+1))%32 == 0) ? (inlink->h*(i+1))/32 - 1 : (inlink->h*(i+1))/32;
-            a -= ((inlink->h*i)%32 == 0) ? (inlink->h*i)/32 - 1 : (inlink->h*i)/32;
-            a = (a == dh1)? dh2 : dh1;
-        }
-        for (j = 0; j < 32; j++) {
-            b = 1;
-            if (dw2 > 1) {
-                b = ((inlink->w*(j+1))%32 == 0) ? (inlink->w*(j+1))/32 - 1 : (inlink->w*(j+1))/32;
-                b -= ((inlink->w*j)%32 == 0) ? (inlink->w*j)/32 - 1 : (inlink->w*j)/32;
-                b = (b == dw1)? dw2 : dw1;
-            }
-            rowcount += intpic[i][j] * a * b * precfactor / denom;
-            if (i > 0) {
-                intpic[i][j] = intpic[i-1][j] + rowcount;
-            } else {
-                intpic[i][j] = rowcount;
-            }
-        }
-    }
-
-    denom = (sc->divide) ? 1 : dh1 * dh2 * dw1 * dw2;
-
-    for (i = 0; i < ELEMENT_COUNT; i++) {
-        const ElemCat* elemcat = elements[i];
-        int64_t* elemsignature;
-        uint64_t* sortsignature;
-
-        elemsignature = av_malloc_array(elemcat->elem_count, sizeof(int64_t));
-        if (!elemsignature)
-            return AVERROR(ENOMEM);
-        sortsignature = av_malloc_array(elemcat->elem_count, sizeof(int64_t));
-        if (!sortsignature) {
-            av_freep(&elemsignature);
-            return AVERROR(ENOMEM);
-        }
-
-        for (j = 0; j < elemcat->elem_count; j++) {
-            blocksum = 0;
-            blocksize = 0;
-            for (k = 0; k < elemcat->left_count; k++) {
-                blocksum += get_block_sum(sc, intpic, &elemcat->blocks[j*elemcat->block_count+k]);
-                blocksize += get_block_size(&elemcat->blocks[j*elemcat->block_count+k]);
-            }
-            sum = blocksum / blocksize;
-            if (elemcat->av_elem) {
-                sum -= 128 * precfactor * denom;
-            } else {
-                blocksum = 0;
-                blocksize = 0;
-                for (; k < elemcat->block_count; k++) {
-                    blocksum += get_block_sum(sc, intpic, &elemcat->blocks[j*elemcat->block_count+k]);
-                    blocksize += get_block_size(&elemcat->blocks[j*elemcat->block_count+k]);
-                }
-                sum -= blocksum / blocksize;
-                conflist[g++] = FFABS(sum * 8 / (precfactor * denom));
-            }
-
-            elemsignature[j] = sum;
-            sortsignature[j] = FFABS(sum);
-        }
-
-        /* get threshold */
-        qsort(sortsignature, elemcat->elem_count, sizeof(uint64_t), (void*) cmp);
-        th = sortsignature[(int) (elemcat->elem_count*0.333)];
-
-        /* ternarize */
-        for (j = 0; j < elemcat->elem_count; j++) {
-            if (elemsignature[j] < -th) {
-                ternary = 0;
-            } else if (elemsignature[j] <= th) {
-                ternary = 1;
-            } else {
-                ternary = 2;
-            }
-            fs->framesig[f/5] += ternary * pot3[f%5];
-
-            if (f == wordvec[w]) {
-                fs->words[s2usw[w]/5] += ternary * pot3[wordt2b[s2usw[w]/5]++];
-                if (w < 24)
-                    w++;
-            }
-            f++;
-        }
-        av_freep(&elemsignature);
-        av_freep(&sortsignature);
-    }
-
-    /* confidence */
-    qsort(conflist, DIFFELEM_SIZE, sizeof(uint64_t), (void*) cmp);
-    fs->confidence = FFMIN(conflist[DIFFELEM_SIZE/2], 255);
-
-    /* coarsesignature */
-    if (sc->coarsecount == 0) {
-        if (sc->curcoarsesig2) {
-            sc->curcoarsesig1 = av_mallocz(sizeof(CoarseSignature));
-            if (!sc->curcoarsesig1)
-                return AVERROR(ENOMEM);
-            sc->curcoarsesig1->first = fs;
-            sc->curcoarsesig2->next = sc->curcoarsesig1;
-            sc->coarseend = sc->curcoarsesig1;
-        }
-    }
-    if (sc->coarsecount == 45) {
-        sc->midcoarse = 1;
-        sc->curcoarsesig2 = av_mallocz(sizeof(CoarseSignature));
-        if (!sc->curcoarsesig2)
-            return AVERROR(ENOMEM);
-        sc->curcoarsesig2->first = fs;
-        sc->curcoarsesig1->next = sc->curcoarsesig2;
-        sc->coarseend = sc->curcoarsesig2;
-    }
-    for (i = 0; i < 5; i++) {
-        set_bit(sc->curcoarsesig1->data[i], fs->words[i]);
-    }
-    /* assuming the actual frame is the last */
-    sc->curcoarsesig1->last = fs;
-    if (sc->midcoarse) {
-        for (i = 0; i < 5; i++) {
-            set_bit(sc->curcoarsesig2->data[i], fs->words[i]);
-        }
-        sc->curcoarsesig2->last = fs;
-    }
-
-    sc->coarsecount = (sc->coarsecount+1)%90;
-
-    /* debug printing finesignature */
-    if (av_log_get_level() == AV_LOG_DEBUG) {
-        av_log(ctx, AV_LOG_DEBUG, "input %d, confidence: %d\n", FF_INLINK_IDX(inlink), fs->confidence);
-
-        av_log(ctx, AV_LOG_DEBUG, "words:");
-        for (i = 0; i < 5; i++) {
-            av_log(ctx, AV_LOG_DEBUG, " %d:", fs->words[i] );
-            av_log(ctx, AV_LOG_DEBUG, " %d", fs->words[i] / pot3[0] );
-            for (j = 1; j < 5; j++)
-                av_log(ctx, AV_LOG_DEBUG, ",%d", fs->words[i] % pot3[j-1] / pot3[j] );
-            av_log(ctx, AV_LOG_DEBUG, ";");
-        }
-        av_log(ctx, AV_LOG_DEBUG, "\n");
-
-        av_log(ctx, AV_LOG_DEBUG, "framesignature:");
-        for (i = 0; i < SIGELEM_SIZE/5; i++) {
-            av_log(ctx, AV_LOG_DEBUG, " %d", fs->framesig[i] / pot3[0] );
-            for (j = 1; j < 5; j++)
-                av_log(ctx, AV_LOG_DEBUG, ",%d", fs->framesig[i] % pot3[j-1] / pot3[j] );
-        }
-        av_log(ctx, AV_LOG_DEBUG, "\n");
-    }
-
-    if (FF_INLINK_IDX(inlink) == 0)
-        return ff_filter_frame(inlink->dst->outputs[0], picref);
-    return 1;
-}
-
-static int xml_export(AVFilterContext *ctx, StreamContext *sc, const char* filename)
-{
-    FineSignature* fs;
-    CoarseSignature* cs;
-    int i, j;
-    FILE* f;
-    unsigned int pot3[5] = { 3*3*3*3, 3*3*3, 3*3, 3, 1 };
-
-    f = fopen(filename, "w");
-    if (!f) {
-        int err = AVERROR(EINVAL);
-        char buf[128];
-        av_strerror(err, buf, sizeof(buf));
-        av_log(ctx, AV_LOG_ERROR, "cannot open xml file %s: %s\n", filename, buf);
-        return err;
-    }
-
-    /* header */
-    fprintf(f, "<?xml version='1.0' encoding='ASCII' ?>\n");
-    fprintf(f, "<Mpeg7 xmlns=\"urn:mpeg:mpeg7:schema:2001\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"urn:mpeg:mpeg7:schema:2001 schema/Mpeg7-2001.xsd\">\n");
-    fprintf(f, "  <DescriptionUnit xsi:type=\"DescriptorCollectionType\">\n");
-    fprintf(f, "    <Descriptor xsi:type=\"VideoSignatureType\">\n");
-    fprintf(f, "      <VideoSignatureRegion>\n");
-    fprintf(f, "        <VideoSignatureSpatialRegion>\n");
-    fprintf(f, "          <Pixel>0 0 </Pixel>\n");
-    fprintf(f, "          <Pixel>%d %d </Pixel>\n", sc->w - 1, sc->h - 1);
-    fprintf(f, "        </VideoSignatureSpatialRegion>\n");
-    fprintf(f, "        <StartFrameOfSpatialRegion>0</StartFrameOfSpatialRegion>\n");
-    /* hoping num is 1, other values are vague */
-    fprintf(f, "        <MediaTimeUnit>%d</MediaTimeUnit>\n", sc->time_base.den / sc->time_base.num);
-    fprintf(f, "        <MediaTimeOfSpatialRegion>\n");
-    fprintf(f, "          <StartMediaTimeOfSpatialRegion>0</StartMediaTimeOfSpatialRegion>\n");
-    fprintf(f, "          <EndMediaTimeOfSpatialRegion>%" PRIu64 "</EndMediaTimeOfSpatialRegion>\n", sc->coarseend->last->pts);
-    fprintf(f, "        </MediaTimeOfSpatialRegion>\n");
-
-    /* coarsesignatures */
-    for (cs = sc->coarsesiglist; cs; cs = cs->next) {
-        fprintf(f, "        <VSVideoSegment>\n");
-        fprintf(f, "          <StartFrameOfSegment>%" PRIu32 "</StartFrameOfSegment>\n", cs->first->index);
-        fprintf(f, "          <EndFrameOfSegment>%" PRIu32 "</EndFrameOfSegment>\n", cs->last->index);
-        fprintf(f, "          <MediaTimeOfSegment>\n");
-        fprintf(f, "            <StartMediaTimeOfSegment>%" PRIu64 "</StartMediaTimeOfSegment>\n", cs->first->pts);
-        fprintf(f, "            <EndMediaTimeOfSegment>%" PRIu64 "</EndMediaTimeOfSegment>\n", cs->last->pts);
-        fprintf(f, "          </MediaTimeOfSegment>\n");
-        for (i = 0; i < 5; i++) {
-            fprintf(f, "          <BagOfWords>");
-            for (j = 0; j < 31; j++) {
-                uint8_t n = cs->data[i][j];
-                if (j < 30) {
-                    fprintf(f, "%d  %d  %d  %d  %d  %d  %d  %d  ", (n & 0x80) >> 7,
-                                                                   (n & 0x40) >> 6,
-                                                                   (n & 0x20) >> 5,
-                                                                   (n & 0x10) >> 4,
-                                                                   (n & 0x08) >> 3,
-                                                                   (n & 0x04) >> 2,
-                                                                   (n & 0x02) >> 1,
-                                                                   (n & 0x01));
-                } else {
-                    /* print only 3 bit in last byte */
-                    fprintf(f, "%d  %d  %d ", (n & 0x80) >> 7,
-                                              (n & 0x40) >> 6,
-                                              (n & 0x20) >> 5);
-                }
-            }
-            fprintf(f, "</BagOfWords>\n");
-        }
-        fprintf(f, "        </VSVideoSegment>\n");
-    }
-
-    /* finesignatures */
-    for (fs = sc->finesiglist; fs; fs = fs->next) {
-        fprintf(f, "        <VideoFrame>\n");
-        fprintf(f, "          <MediaTimeOfFrame>%" PRIu64 "</MediaTimeOfFrame>\n", fs->pts);
-        /* confidence */
-        fprintf(f, "          <FrameConfidence>%d</FrameConfidence>\n", fs->confidence);
-        /* words */
-        fprintf(f, "          <Word>");
-        for (i = 0; i < 5; i++) {
-            fprintf(f, "%d ", fs->words[i]);
-            if (i < 4) {
-                fprintf(f, " ");
-            }
-        }
-        fprintf(f, "</Word>\n");
-        /* framesignature */
-        fprintf(f, "          <FrameSignature>");
-        for (i = 0; i< SIGELEM_SIZE/5; i++) {
-            if (i > 0) {
-                fprintf(f, " ");
-            }
-            fprintf(f, "%d ", fs->framesig[i] / pot3[0]);
-            for (j = 1; j < 5; j++)
-                fprintf(f, " %d ", fs->framesig[i] % pot3[j-1] / pot3[j] );
-        }
-        fprintf(f, "</FrameSignature>\n");
-        fprintf(f, "        </VideoFrame>\n");
-    }
-    fprintf(f, "      </VideoSignatureRegion>\n");
-    fprintf(f, "    </Descriptor>\n");
-    fprintf(f, "  </DescriptionUnit>\n");
-    fprintf(f, "</Mpeg7>\n");
-
-    fclose(f);
-    return 0;
-}
-
-static int binary_export(AVFilterContext *ctx, StreamContext *sc, const char* filename)
-{
-    FILE* f;
-    FineSignature* fs;
-    CoarseSignature* cs;
-    uint32_t numofsegments = (sc->lastindex + 44)/45;
-    int i, j;
-    PutBitContext buf;
-    /* buffer + header + coarsesignatures + finesignature */
-    int len = (512 + 6 * 32 + 3*16 + 2 +
-        numofsegments * (4*32 + 1 + 5*243) +
-        sc->lastindex * (2 + 32 + 6*8 + 608)) / 8;
-    uint8_t* buffer = av_malloc_array(len, sizeof(uint8_t));
-    if (!buffer)
-        return AVERROR(ENOMEM);
-
-    f = fopen(filename, "wb");
-    if (!f) {
-        int err = AVERROR(EINVAL);
-        char buf[128];
-        av_strerror(err, buf, sizeof(buf));
-        av_log(ctx, AV_LOG_ERROR, "cannot open file %s: %s\n", filename, buf);
-        av_freep(&buffer);
-        return err;
-    }
-    init_put_bits(&buf, buffer, len);
-
-    put_bits32(&buf, 1); /* NumOfSpatial Regions, only 1 supported */
-    put_bits(&buf, 1, 1); /* SpatialLocationFlag, always the whole image */
-    put_bits32(&buf, 0); /* PixelX,1 PixelY,1, 0,0 */
-    put_bits(&buf, 16, sc->w-1 & 0xFFFF); /* PixelX,2 */
-    put_bits(&buf, 16, sc->h-1 & 0xFFFF); /* PixelY,2 */
-    put_bits32(&buf, 0); /* StartFrameOfSpatialRegion */
-    put_bits32(&buf, sc->lastindex); /* NumOfFrames */
-    /* hoping num is 1, other values are vague */
-    /* den/num might be greater than 16 bit, so cutting it */
-    put_bits(&buf, 16, 0xFFFF & (sc->time_base.den / sc->time_base.num)); /* MediaTimeUnit */
-    put_bits(&buf, 1, 1); /* MediaTimeFlagOfSpatialRegion */
-    put_bits32(&buf, 0); /* StartMediaTimeOfSpatialRegion */
-    put_bits32(&buf, 0xFFFFFFFF & sc->coarseend->last->pts); /* EndMediaTimeOfSpatialRegion */
-    put_bits32(&buf, numofsegments); /* NumOfSegments */
-    /* coarsesignatures */
-    for (cs = sc->coarsesiglist; cs; cs = cs->next) {
-        put_bits32(&buf, cs->first->index); /* StartFrameOfSegment */
-        put_bits32(&buf, cs->last->index); /* EndFrameOfSegment */
-        put_bits(&buf, 1, 1); /* MediaTimeFlagOfSegment */
-        put_bits32(&buf, 0xFFFFFFFF & cs->first->pts); /* StartMediaTimeOfSegment */
-        put_bits32(&buf, 0xFFFFFFFF & cs->last->pts); /* EndMediaTimeOfSegment */
-        for (i = 0; i < 5; i++) {
-            /* put 243 bits ( = 7 * 32 + 19 = 8 * 28 + 19) into buffer */
-            for (j = 0; j < 30; j++) {
-                put_bits(&buf, 8, cs->data[i][j]);
-            }
-            put_bits(&buf, 3, cs->data[i][30] >> 5);
-        }
-    }
-    /* finesignatures */
-    put_bits(&buf, 1, 0); /* CompressionFlag, only 0 supported */
-    for (fs = sc->finesiglist; fs; fs = fs->next) {
-        put_bits(&buf, 1, 1); /* MediaTimeFlagOfFrame */
-        put_bits32(&buf, 0xFFFFFFFF & fs->pts); /* MediaTimeOfFrame */
-        put_bits(&buf, 8, fs->confidence); /* FrameConfidence */
-        for (i = 0; i < 5; i++) {
-            put_bits(&buf, 8, fs->words[i]); /* Words */
-        }
-        /* framesignature */
-        for (i = 0; i < SIGELEM_SIZE/5; i++) {
-            put_bits(&buf, 8, fs->framesig[i]);
-        }
-    }
-
-    avpriv_align_put_bits(&buf);
-    flush_put_bits(&buf);
-    fwrite(buffer, 1, put_bits_count(&buf)/8, f);
-    fclose(f);
-    av_freep(&buffer);
-    return 0;
-}
-
-static int export(AVFilterContext *ctx, StreamContext *sc, int input)
-{
-    SignatureContext* sic = ctx->priv;
-    char filename[1024];
-
-    if (sic->nb_inputs > 1) {
-        /* error already handled */
-        av_assert0(av_get_frame_filename(filename, sizeof(filename), sic->filename, input) == 0);
-    } else {
-        if (av_strlcpy(filename, sic->filename, sizeof(filename)) >= sizeof(filename))
-            return AVERROR(EINVAL);
-    }
-    if (sic->format == FORMAT_XML) {
-        return xml_export(ctx, sc, filename);
-    } else {
-        return binary_export(ctx, sc, filename);
-    }
-}
-
-static int request_frame(AVFilterLink *outlink)
-{
-    AVFilterContext *ctx = outlink->src;
-    SignatureContext *sic = ctx->priv;
-    StreamContext *sc, *sc2;
-    MatchingInfo match;
-    int i, j, ret;
-    int lookup = 1; /* indicates wheather EOF of all files is reached */
-
-    /* process all inputs */
-    for (i = 0; i < sic->nb_inputs; i++){
-        sc = &(sic->streamcontexts[i]);
-
-        ret = ff_request_frame(ctx->inputs[i]);
-
-        /* return if unexpected error occurs in input stream */
-        if (ret < 0 && ret != AVERROR_EOF)
-            return ret;
-
-        /* export signature at EOF */
-        if (ret == AVERROR_EOF && !sc->exported) {
-            /* export if wanted */
-            if (strlen(sic->filename) > 0) {
-                if (export(ctx, sc, i) < 0)
-                    return ret;
-            }
-            sc->exported = 1;
-        }
-        lookup &= sc->exported;
-    }
-
-    /* signature lookup */
-    if (lookup && sic->mode != MODE_OFF) {
-        /* iterate over every pair */
-        for (i = 0; i < sic->nb_inputs; i++) {
-            sc = &(sic->streamcontexts[i]);
-            for (j = i+1; j < sic->nb_inputs; j++) {
-                sc2 = &(sic->streamcontexts[j]);
-                match = lookup_signatures(ctx, sic, sc, sc2, sic->mode);
-                if (match.score != 0) {
-                    av_log(ctx, AV_LOG_INFO, "matching of video %d at %f and %d at %f, %d frames matching\n",
-                            i, ((double) match.first->pts * sc->time_base.num) / sc->time_base.den,
-                            j, ((double) match.second->pts * sc2->time_base.num) / sc2->time_base.den,
-                            match.matchframes);
-                    if (match.whole)
-                        av_log(ctx, AV_LOG_INFO, "whole video matching\n");
-                } else {
-                    av_log(ctx, AV_LOG_INFO, "no matching of video %d and %d\n", i, j);
-                }
-            }
-        }
-    }
-
-    return ret;
-}
-
-static av_cold int init(AVFilterContext *ctx)
-{
-
-    SignatureContext *sic = ctx->priv;
-    StreamContext *sc;
-    int i, ret;
-    char tmp[1024];
-
-    sic->streamcontexts = av_mallocz(sic->nb_inputs * sizeof(StreamContext));
-    if (!sic->streamcontexts)
-        return AVERROR(ENOMEM);
-
-    for (i = 0; i < sic->nb_inputs; i++) {
-        AVFilterPad pad = {
-            .type = AVMEDIA_TYPE_VIDEO,
-            .name = av_asprintf("in%d", i),
-            .config_props = config_input,
-            .filter_frame = filter_frame,
-        };
-
-        if (!pad.name)
-            return AVERROR(ENOMEM);
-
-        sc = &(sic->streamcontexts[i]);
-
-        sc->lastindex = 0;
-        sc->finesiglist = av_mallocz(sizeof(FineSignature));
-        if (!sc->finesiglist)
-            return AVERROR(ENOMEM);
-        sc->curfinesig = NULL;
-
-        sc->coarsesiglist = av_mallocz(sizeof(CoarseSignature));
-        if (!sc->coarsesiglist)
-            return AVERROR(ENOMEM);
-        sc->curcoarsesig1 = sc->coarsesiglist;
-        sc->coarseend = sc->coarsesiglist;
-        sc->coarsecount = 0;
-        sc->midcoarse = 0;
-
-        if ((ret = ff_insert_inpad(ctx, i, &pad)) < 0) {
-            av_freep(&pad.name);
-            return ret;
-        }
-    }
-
-    /* check filename */
-    if (sic->nb_inputs > 1 && strlen(sic->filename) > 0 && av_get_frame_filename(tmp, sizeof(tmp), sic->filename, 0) == -1) {
-        av_log(ctx, AV_LOG_ERROR, "The filename must contain %%d or %%0nd, if you have more than one input.\n");
-        return AVERROR(EINVAL);
-    }
-
-    return 0;
-}
-
-
-
-static av_cold void uninit(AVFilterContext *ctx)
-{
-    SignatureContext *sic = ctx->priv;
-    StreamContext *sc;
-    void* tmp;
-    FineSignature* finsig;
-    CoarseSignature* cousig;
-    int i;
-
-
-    /* free the lists */
-    if (sic->streamcontexts != NULL) {
-        for (i = 0; i < sic->nb_inputs; i++) {
-            sc = &(sic->streamcontexts[i]);
-            finsig = sc->finesiglist;
-            cousig = sc->coarsesiglist;
-
-            while (finsig) {
-                tmp = finsig;
-                finsig = finsig->next;
-                av_freep(&tmp);
-            }
-            sc->finesiglist = NULL;
-
-            while (cousig) {
-                tmp = cousig;
-                cousig = cousig->next;
-                av_freep(&tmp);
-            }
-            sc->coarsesiglist = NULL;
-        }
-        av_freep(&sic->streamcontexts);
-    }
-}
-
-static int config_output(AVFilterLink *outlink)
-{
-    AVFilterContext *ctx = outlink->src;
-    AVFilterLink *inlink = ctx->inputs[0];
-
-    outlink->time_base = inlink->time_base;
-    outlink->frame_rate = inlink->frame_rate;
-    outlink->sample_aspect_ratio = inlink->sample_aspect_ratio;
-    outlink->w = inlink->w;
-    outlink->h = inlink->h;
-
-    return 0;
-}
-
-static const AVFilterPad signature_outputs[] = {
-    {
-        .name          = "default",
-        .type          = AVMEDIA_TYPE_VIDEO,
-        .request_frame = request_frame,
-        .config_props  = config_output,
-    },
-    { NULL }
-};
-
-AVFilter ff_vf_signature = {
-    .name          = "signature",
-    .description   = NULL_IF_CONFIG_SMALL("Calculate the MPEG-7 video signature"),
-    .priv_size     = sizeof(SignatureContext),
-    .priv_class    = &signature_class,
-    .init          = init,
-    .uninit        = uninit,
-    .query_formats = query_formats,
-    .outputs       = signature_outputs,
-    .inputs        = NULL,
-    .flags         = AVFILTER_FLAG_DYNAMIC_INPUTS,
-};
diff --git a/libavfilter/vf_smartblur.c b/libavfilter/vf_smartblur.c
deleted file mode 100644
index 1955ac4..0000000
--- a/libavfilter/vf_smartblur.c
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
- * Copyright (c) 2002 Michael Niedermayer <michaelni@gmx.at>
- * Copyright (c) 2012 Jeremy Tran
- *
- * 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
- * Apply a smartblur filter to the input video
- * Ported from MPlayer libmpcodecs/vf_smartblur.c by Michael Niedermayer.
- */
-
-#include "libavutil/opt.h"
-#include "libavutil/pixdesc.h"
-#include "libswscale/swscale.h"
-
-#include "avfilter.h"
-#include "formats.h"
-#include "internal.h"
-
-#define RADIUS_MIN 0.1
-#define RADIUS_MAX 5.0
-
-#define STRENGTH_MIN -1.0
-#define STRENGTH_MAX 1.0
-
-#define THRESHOLD_MIN -30
-#define THRESHOLD_MAX 30
-
-typedef struct FilterParam {
-    float              radius;
-    float              strength;
-    int                threshold;
-    float              quality;
-    struct SwsContext *filter_context;
-} FilterParam;
-
-typedef struct SmartblurContext {
-    const AVClass *class;
-    FilterParam  luma;
-    FilterParam  chroma;
-    int          hsub;
-    int          vsub;
-    unsigned int sws_flags;
-} SmartblurContext;
-
-#define OFFSET(x) offsetof(SmartblurContext, x)
-#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
-
-static const AVOption smartblur_options[] = {
-    { "luma_radius",    "set luma radius",    OFFSET(luma.radius),    AV_OPT_TYPE_FLOAT, {.dbl=1.0}, RADIUS_MIN, RADIUS_MAX, .flags=FLAGS },
-    { "lr"         ,    "set luma radius",    OFFSET(luma.radius),    AV_OPT_TYPE_FLOAT, {.dbl=1.0}, RADIUS_MIN, RADIUS_MAX, .flags=FLAGS },
-    { "luma_strength",  "set luma strength",  OFFSET(luma.strength),  AV_OPT_TYPE_FLOAT, {.dbl=1.0}, STRENGTH_MIN, STRENGTH_MAX, .flags=FLAGS },
-    { "ls",             "set luma strength",  OFFSET(luma.strength),  AV_OPT_TYPE_FLOAT, {.dbl=1.0}, STRENGTH_MIN, STRENGTH_MAX, .flags=FLAGS },
-    { "luma_threshold", "set luma threshold", OFFSET(luma.threshold), AV_OPT_TYPE_INT,   {.i64=0}, THRESHOLD_MIN, THRESHOLD_MAX, .flags=FLAGS },
-    { "lt",             "set luma threshold", OFFSET(luma.threshold), AV_OPT_TYPE_INT,   {.i64=0}, THRESHOLD_MIN, THRESHOLD_MAX, .flags=FLAGS },
-
-    { "chroma_radius",    "set chroma radius",    OFFSET(chroma.radius),    AV_OPT_TYPE_FLOAT, {.dbl=RADIUS_MIN-1},   RADIUS_MIN-1, RADIUS_MAX, .flags=FLAGS },
-    { "cr",               "set chroma radius",    OFFSET(chroma.radius),    AV_OPT_TYPE_FLOAT, {.dbl=RADIUS_MIN-1},   RADIUS_MIN-1, RADIUS_MAX, .flags=FLAGS },
-    { "chroma_strength",  "set chroma strength",  OFFSET(chroma.strength),  AV_OPT_TYPE_FLOAT, {.dbl=STRENGTH_MIN-1}, STRENGTH_MIN-1, STRENGTH_MAX, .flags=FLAGS },
-    { "cs",               "set chroma strength",  OFFSET(chroma.strength),  AV_OPT_TYPE_FLOAT, {.dbl=STRENGTH_MIN-1}, STRENGTH_MIN-1, STRENGTH_MAX, .flags=FLAGS },
-    { "chroma_threshold", "set chroma threshold", OFFSET(chroma.threshold), AV_OPT_TYPE_INT,   {.i64=THRESHOLD_MIN-1}, THRESHOLD_MIN-1, THRESHOLD_MAX, .flags=FLAGS },
-    { "ct",               "set chroma threshold", OFFSET(chroma.threshold), AV_OPT_TYPE_INT,   {.i64=THRESHOLD_MIN-1}, THRESHOLD_MIN-1, THRESHOLD_MAX, .flags=FLAGS },
-
-    { NULL }
-};
-
-AVFILTER_DEFINE_CLASS(smartblur);
-
-static av_cold int init(AVFilterContext *ctx)
-{
-    SmartblurContext *s = ctx->priv;
-
-    /* make chroma default to luma values, if not explicitly set */
-    if (s->chroma.radius < RADIUS_MIN)
-        s->chroma.radius = s->luma.radius;
-    if (s->chroma.strength < STRENGTH_MIN)
-        s->chroma.strength  = s->luma.strength;
-    if (s->chroma.threshold < THRESHOLD_MIN)
-        s->chroma.threshold = s->luma.threshold;
-
-    s->luma.quality = s->chroma.quality = 3.0;
-    s->sws_flags = SWS_BICUBIC;
-
-    av_log(ctx, AV_LOG_VERBOSE,
-           "luma_radius:%f luma_strength:%f luma_threshold:%d "
-           "chroma_radius:%f chroma_strength:%f chroma_threshold:%d\n",
-           s->luma.radius, s->luma.strength, s->luma.threshold,
-           s->chroma.radius, s->chroma.strength, s->chroma.threshold);
-
-    return 0;
-}
-
-static av_cold void uninit(AVFilterContext *ctx)
-{
-    SmartblurContext *s = ctx->priv;
-
-    sws_freeContext(s->luma.filter_context);
-    sws_freeContext(s->chroma.filter_context);
-}
-
-static int query_formats(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_YUV440P,
-        AV_PIX_FMT_GRAY8,
-        AV_PIX_FMT_NONE
-    };
-
-    AVFilterFormats *fmts_list = ff_make_format_list(pix_fmts);
-    if (!fmts_list)
-        return AVERROR(ENOMEM);
-    return ff_set_common_formats(ctx, fmts_list);
-}
-
-static int alloc_sws_context(FilterParam *f, int width, int height, unsigned int flags)
-{
-    SwsVector *vec;
-    SwsFilter sws_filter;
-
-    vec = sws_getGaussianVec(f->radius, f->quality);
-
-    if (!vec)
-        return AVERROR(EINVAL);
-
-    sws_scaleVec(vec, f->strength);
-    vec->coeff[vec->length / 2] += 1.0 - f->strength;
-    sws_filter.lumH = sws_filter.lumV = vec;
-    sws_filter.chrH = sws_filter.chrV = NULL;
-    f->filter_context = sws_getCachedContext(NULL,
-                                             width, height, AV_PIX_FMT_GRAY8,
-                                             width, height, AV_PIX_FMT_GRAY8,
-                                             flags, &sws_filter, NULL, NULL);
-
-    sws_freeVec(vec);
-
-    if (!f->filter_context)
-        return AVERROR(EINVAL);
-
-    return 0;
-}
-
-static int config_props(AVFilterLink *inlink)
-{
-    SmartblurContext *s = inlink->dst->priv;
-    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(inlink->format);
-
-    s->hsub = desc->log2_chroma_w;
-    s->vsub = desc->log2_chroma_h;
-
-    alloc_sws_context(&s->luma, inlink->w, inlink->h, s->sws_flags);
-    alloc_sws_context(&s->chroma,
-                      AV_CEIL_RSHIFT(inlink->w, s->hsub),
-                      AV_CEIL_RSHIFT(inlink->h, s->vsub),
-                      s->sws_flags);
-
-    return 0;
-}
-
-static void blur(uint8_t       *dst, const int dst_linesize,
-                 const uint8_t *src, const int src_linesize,
-                 const int w, const int h, const int threshold,
-                 struct SwsContext *filter_context)
-{
-    int x, y;
-    int orig, filtered;
-    int diff;
-    /* Declare arrays of 4 to get aligned data */
-    const uint8_t* const src_array[4] = {src};
-    uint8_t *dst_array[4]             = {dst};
-    int src_linesize_array[4] = {src_linesize};
-    int dst_linesize_array[4] = {dst_linesize};
-
-    sws_scale(filter_context, src_array, src_linesize_array,
-              0, h, dst_array, dst_linesize_array);
-
-    if (threshold > 0) {
-        for (y = 0; y < h; ++y) {
-            for (x = 0; x < w; ++x) {
-                orig     = src[x + y * src_linesize];
-                filtered = dst[x + y * dst_linesize];
-                diff     = orig - filtered;
-
-                if (diff > 0) {
-                    if (diff > 2 * threshold)
-                        dst[x + y * dst_linesize] = orig;
-                    else if (diff > threshold)
-                        /* add 'diff' and subtract 'threshold' from 'filtered' */
-                        dst[x + y * dst_linesize] = orig - threshold;
-                } else {
-                    if (-diff > 2 * threshold)
-                        dst[x + y * dst_linesize] = orig;
-                    else if (-diff > threshold)
-                        /* add 'diff' and 'threshold' to 'filtered' */
-                        dst[x + y * dst_linesize] = orig + threshold;
-                }
-            }
-        }
-    } else if (threshold < 0) {
-        for (y = 0; y < h; ++y) {
-            for (x = 0; x < w; ++x) {
-                orig     = src[x + y * src_linesize];
-                filtered = dst[x + y * dst_linesize];
-                diff     = orig - filtered;
-
-                if (diff > 0) {
-                    if (diff <= -threshold)
-                        dst[x + y * dst_linesize] = orig;
-                    else if (diff <= -2 * threshold)
-                        /* subtract 'diff' and 'threshold' from 'orig' */
-                        dst[x + y * dst_linesize] = filtered - threshold;
-                } else {
-                    if (diff >= threshold)
-                        dst[x + y * dst_linesize] = orig;
-                    else if (diff >= 2 * threshold)
-                        /* add 'threshold' and subtract 'diff' from 'orig' */
-                        dst[x + y * dst_linesize] = filtered + threshold;
-                }
-            }
-        }
-    }
-}
-
-static int filter_frame(AVFilterLink *inlink, AVFrame *inpic)
-{
-    SmartblurContext  *s  = inlink->dst->priv;
-    AVFilterLink *outlink     = inlink->dst->outputs[0];
-    AVFrame *outpic;
-    int cw = AV_CEIL_RSHIFT(inlink->w, s->hsub);
-    int ch = AV_CEIL_RSHIFT(inlink->h, s->vsub);
-
-    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);
-
-    blur(outpic->data[0], outpic->linesize[0],
-         inpic->data[0],  inpic->linesize[0],
-         inlink->w, inlink->h, s->luma.threshold,
-         s->luma.filter_context);
-
-    if (inpic->data[2]) {
-        blur(outpic->data[1], outpic->linesize[1],
-             inpic->data[1],  inpic->linesize[1],
-             cw, ch, s->chroma.threshold,
-             s->chroma.filter_context);
-        blur(outpic->data[2], outpic->linesize[2],
-             inpic->data[2],  inpic->linesize[2],
-             cw, ch, s->chroma.threshold,
-             s->chroma.filter_context);
-    }
-
-    av_frame_free(&inpic);
-    return ff_filter_frame(outlink, outpic);
-}
-
-static const AVFilterPad smartblur_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .filter_frame = filter_frame,
-        .config_props = config_props,
-    },
-    { NULL }
-};
-
-static const AVFilterPad smartblur_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-    { NULL }
-};
-
-AVFilter ff_vf_smartblur = {
-    .name          = "smartblur",
-    .description   = NULL_IF_CONFIG_SMALL("Blur the input video without impacting the outlines."),
-    .priv_size     = sizeof(SmartblurContext),
-    .init          = init,
-    .uninit        = uninit,
-    .query_formats = query_formats,
-    .inputs        = smartblur_inputs,
-    .outputs       = smartblur_outputs,
-    .priv_class    = &smartblur_class,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
-};
diff --git a/libavfilter/vf_spp.c b/libavfilter/vf_spp.c
deleted file mode 100644
index 7381938..0000000
--- a/libavfilter/vf_spp.c
+++ /dev/null
@@ -1,530 +0,0 @@
-/*
- * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
- * Copyright (c) 2013 Clément Bœsch <u pkh me>
- *
- * 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
- * Simple post processing filter
- *
- * This implementation is based on an algorithm described in
- * "Aria Nosratinia Embedded Post-Processing for
- * Enhancement of Compressed Images (1999)"
- *
- * Originally written by Michael Niedermayer for the MPlayer project, and
- * ported by Clément Bœsch for FFmpeg.
- */
-
-#include "libavutil/avassert.h"
-#include "libavutil/imgutils.h"
-#include "libavutil/opt.h"
-#include "libavutil/pixdesc.h"
-#include "internal.h"
-#include "vf_spp.h"
-
-enum mode {
-    MODE_HARD,
-    MODE_SOFT,
-    NB_MODES
-};
-
-static const AVClass *child_class_next(const AVClass *prev)
-{
-    return prev ? NULL : avcodec_dct_get_class();
-}
-
-static void *child_next(void *obj, void *prev)
-{
-    SPPContext *s = obj;
-    return prev ? NULL : s->dct;
-}
-
-#define OFFSET(x) offsetof(SPPContext, x)
-#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
-#define TFLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_RUNTIME_PARAM
-static const AVOption spp_options[] = {
-    { "quality", "set quality", OFFSET(log2_count), AV_OPT_TYPE_INT, {.i64 = 3}, 0, MAX_LEVEL, TFLAGS },
-    { "qp", "force a constant quantizer parameter", OFFSET(qp), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 63, FLAGS },
-    { "mode", "set thresholding mode", OFFSET(mode), AV_OPT_TYPE_INT, {.i64 = MODE_HARD}, 0, NB_MODES - 1, FLAGS, "mode" },
-        { "hard", "hard thresholding", 0, AV_OPT_TYPE_CONST, {.i64 = MODE_HARD}, INT_MIN, INT_MAX, FLAGS, "mode" },
-        { "soft", "soft thresholding", 0, AV_OPT_TYPE_CONST, {.i64 = MODE_SOFT}, INT_MIN, INT_MAX, FLAGS, "mode" },
-    { "use_bframe_qp", "use B-frames' QP", OFFSET(use_bframe_qp), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, FLAGS },
-    { NULL }
-};
-
-static const AVClass spp_class = {
-    .class_name       = "spp",
-    .item_name        = av_default_item_name,
-    .option           = spp_options,
-    .version          = LIBAVUTIL_VERSION_INT,
-    .category         = AV_CLASS_CATEGORY_FILTER,
-    .child_class_next = child_class_next,
-    .child_next       = child_next,
-};
-
-// XXX: share between filters?
-DECLARE_ALIGNED(8, static const uint8_t, ldither)[8][8] = {
-    {  0,  48,  12,  60,   3,  51,  15,  63 },
-    { 32,  16,  44,  28,  35,  19,  47,  31 },
-    {  8,  56,   4,  52,  11,  59,   7,  55 },
-    { 40,  24,  36,  20,  43,  27,  39,  23 },
-    {  2,  50,  14,  62,   1,  49,  13,  61 },
-    { 34,  18,  46,  30,  33,  17,  45,  29 },
-    { 10,  58,   6,  54,   9,  57,   5,  53 },
-    { 42,  26,  38,  22,  41,  25,  37,  21 },
-};
-
-static const uint8_t offset[127][2] = {
-    {0,0},
-    {0,0}, {4,4},                                           // quality = 1
-    {0,0}, {2,2}, {6,4}, {4,6},                             // quality = 2
-    {0,0}, {5,1}, {2,2}, {7,3}, {4,4}, {1,5}, {6,6}, {3,7}, // quality = 3
-
-    {0,0}, {4,0}, {1,1}, {5,1}, {3,2}, {7,2}, {2,3}, {6,3}, // quality = 4
-    {0,4}, {4,4}, {1,5}, {5,5}, {3,6}, {7,6}, {2,7}, {6,7},
-
-    {0,0}, {0,2}, {0,4}, {0,6}, {1,1}, {1,3}, {1,5}, {1,7}, // quality = 5
-    {2,0}, {2,2}, {2,4}, {2,6}, {3,1}, {3,3}, {3,5}, {3,7},
-    {4,0}, {4,2}, {4,4}, {4,6}, {5,1}, {5,3}, {5,5}, {5,7},
-    {6,0}, {6,2}, {6,4}, {6,6}, {7,1}, {7,3}, {7,5}, {7,7},
-
-    {0,0}, {4,4}, {0,4}, {4,0}, {2,2}, {6,6}, {2,6}, {6,2}, // quality = 6
-    {0,2}, {4,6}, {0,6}, {4,2}, {2,0}, {6,4}, {2,4}, {6,0},
-    {1,1}, {5,5}, {1,5}, {5,1}, {3,3}, {7,7}, {3,7}, {7,3},
-    {1,3}, {5,7}, {1,7}, {5,3}, {3,1}, {7,5}, {3,5}, {7,1},
-    {0,1}, {4,5}, {0,5}, {4,1}, {2,3}, {6,7}, {2,7}, {6,3},
-    {0,3}, {4,7}, {0,7}, {4,3}, {2,1}, {6,5}, {2,5}, {6,1},
-    {1,0}, {5,4}, {1,4}, {5,0}, {3,2}, {7,6}, {3,6}, {7,2},
-    {1,2}, {5,6}, {1,6}, {5,2}, {3,0}, {7,4}, {3,4}, {7,0},
-};
-
-static void hardthresh_c(int16_t dst[64], const int16_t src[64],
-                         int qp, const uint8_t *permutation)
-{
-    int i;
-    int bias = 0; // FIXME
-
-    unsigned threshold1 = qp * ((1<<4) - bias) - 1;
-    unsigned threshold2 = threshold1 << 1;
-
-    memset(dst, 0, 64 * sizeof(dst[0]));
-    dst[0] = (src[0] + 4) >> 3;
-
-    for (i = 1; i < 64; i++) {
-        int level = src[i];
-        if (((unsigned)(level + threshold1)) > threshold2) {
-            const int j = permutation[i];
-            dst[j] = (level + 4) >> 3;
-        }
-    }
-}
-
-static void softthresh_c(int16_t dst[64], const int16_t src[64],
-                         int qp, const uint8_t *permutation)
-{
-    int i;
-    int bias = 0; //FIXME
-
-    unsigned threshold1 = qp * ((1<<4) - bias) - 1;
-    unsigned threshold2 = threshold1 << 1;
-
-    memset(dst, 0, 64 * sizeof(dst[0]));
-    dst[0] = (src[0] + 4) >> 3;
-
-    for (i = 1; i < 64; i++) {
-        int level = src[i];
-        if (((unsigned)(level + threshold1)) > threshold2) {
-            const int j = permutation[i];
-            if (level > 0) dst[j] = (level - threshold1 + 4) >> 3;
-            else           dst[j] = (level + threshold1 + 4) >> 3;
-        }
-    }
-}
-
-static void store_slice_c(uint8_t *dst, const int16_t *src,
-                          int dst_linesize, int src_linesize,
-                          int width, int height, int log2_scale,
-                          const uint8_t dither[8][8])
-{
-    int y, x;
-
-#define STORE(pos) do {                                                     \
-    temp = ((src[x + y*src_linesize + pos] << log2_scale) + d[pos]) >> 6;   \
-    if (temp & 0x100)                                                       \
-        temp = ~(temp >> 31);                                               \
-    dst[x + y*dst_linesize + pos] = temp;                                   \
-} while (0)
-
-    for (y = 0; y < height; y++) {
-        const uint8_t *d = dither[y];
-        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 store_slice16_c(uint16_t *dst, const int16_t *src,
-                            int dst_linesize, int src_linesize,
-                            int width, int height, int log2_scale,
-                            const uint8_t dither[8][8], int depth)
-{
-    int y, x;
-    unsigned int mask = -1<<depth;
-
-#define STORE16(pos) do {                                                   \
-    temp = ((src[x + y*src_linesize + pos] << log2_scale) + (d[pos]>>1)) >> 5;   \
-    if (temp & mask )                                                       \
-        temp = ~(temp >> 31);                                               \
-    dst[x + y*dst_linesize + pos] = temp;                                   \
-} while (0)
-
-    for (y = 0; y < height; y++) {
-        const uint8_t *d = dither[y];
-        for (x = 0; x < width; x += 8) {
-            int temp;
-            STORE16(0);
-            STORE16(1);
-            STORE16(2);
-            STORE16(3);
-            STORE16(4);
-            STORE16(5);
-            STORE16(6);
-            STORE16(7);
-        }
-    }
-}
-
-static inline void add_block(uint16_t *dst, int linesize, const int16_t block[64])
-{
-    int y;
-
-    for (y = 0; y < 8; y++) {
-        *(uint32_t *)&dst[0 + y*linesize] += *(uint32_t *)&block[0 + y*8];
-        *(uint32_t *)&dst[2 + y*linesize] += *(uint32_t *)&block[2 + y*8];
-        *(uint32_t *)&dst[4 + y*linesize] += *(uint32_t *)&block[4 + y*8];
-        *(uint32_t *)&dst[6 + y*linesize] += *(uint32_t *)&block[6 + y*8];
-    }
-}
-
-static void filter(SPPContext *p, uint8_t *dst, uint8_t *src,
-                   int dst_linesize, int src_linesize, int width, int height,
-                   const uint8_t *qp_table, int qp_stride, int is_luma, int depth)
-{
-    int x, y, i;
-    const int count = 1 << p->log2_count;
-    const int linesize = is_luma ? p->temp_linesize : FFALIGN(width+16, 16);
-    DECLARE_ALIGNED(16, uint64_t, block_align)[32];
-    int16_t *block  = (int16_t *)block_align;
-    int16_t *block2 = (int16_t *)(block_align + 16);
-    uint16_t *psrc16 = (uint16_t*)p->src;
-    const int sample_bytes = (depth+7) / 8;
-
-    for (y = 0; y < height; y++) {
-        int index = 8 + 8*linesize + y*linesize;
-        memcpy(p->src + index*sample_bytes, src + y*src_linesize, width*sample_bytes);
-        if (sample_bytes == 1) {
-            for (x = 0; x < 8; x++) {
-                p->src[index         - x - 1] = p->src[index +         x    ];
-                p->src[index + width + x    ] = p->src[index + width - x - 1];
-            }
-        } else {
-            for (x = 0; x < 8; x++) {
-                psrc16[index         - x - 1] = psrc16[index +         x    ];
-                psrc16[index + width + x    ] = psrc16[index + width - x - 1];
-            }
-        }
-    }
-    for (y = 0; y < 8; y++) {
-        memcpy(p->src + (       7-y)*linesize * sample_bytes, p->src + (       y+8)*linesize * sample_bytes, linesize * sample_bytes);
-        memcpy(p->src + (height+8+y)*linesize * sample_bytes, p->src + (height-y+7)*linesize * sample_bytes, linesize * sample_bytes);
-    }
-
-    for (y = 0; y < height + 8; y += 8) {
-        memset(p->temp + (8 + y) * linesize, 0, 8 * linesize * sizeof(*p->temp));
-        for (x = 0; x < width + 8; x += 8) {
-            int qp;
-
-            if (p->qp) {
-                qp = p->qp;
-            } else{
-                const int qps = 3 + is_luma;
-                qp = qp_table[(FFMIN(x, width - 1) >> qps) + (FFMIN(y, height - 1) >> qps) * qp_stride];
-                qp = FFMAX(1, ff_norm_qscale(qp, p->qscale_type));
-            }
-            for (i = 0; i < count; i++) {
-                const int x1 = x + offset[i + count - 1][0];
-                const int y1 = y + offset[i + count - 1][1];
-                const int index = x1 + y1*linesize;
-                p->dct->get_pixels(block, p->src + sample_bytes*index, sample_bytes*linesize);
-                p->dct->fdct(block);
-                p->requantize(block2, block, qp, p->dct->idct_permutation);
-                p->dct->idct(block2);
-                add_block(p->temp + index, linesize, block2);
-            }
-        }
-        if (y) {
-            if (sample_bytes == 1) {
-                p->store_slice(dst + (y - 8) * dst_linesize, p->temp + 8 + y*linesize,
-                               dst_linesize, linesize, width,
-                               FFMIN(8, height + 8 - y), MAX_LEVEL - p->log2_count,
-                               ldither);
-            } else {
-                store_slice16_c((uint16_t*)(dst + (y - 8) * dst_linesize), p->temp + 8 + y*linesize,
-                                dst_linesize/2, linesize, width,
-                                FFMIN(8, height + 8 - y), MAX_LEVEL - p->log2_count,
-                                ldither, depth);
-            }
-        }
-    }
-}
-
-static int query_formats(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_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,
-        AV_PIX_FMT_YUV420P9,
-        AV_PIX_FMT_GRAY8,
-        AV_PIX_FMT_GBRP,
-        AV_PIX_FMT_GBRP9,
-        AV_PIX_FMT_GBRP10,
-        AV_PIX_FMT_NONE
-    };
-
-    AVFilterFormats *fmts_list = ff_make_format_list(pix_fmts);
-    if (!fmts_list)
-        return AVERROR(ENOMEM);
-    return ff_set_common_formats(ctx, fmts_list);
-}
-
-static int config_input(AVFilterLink *inlink)
-{
-    SPPContext *s = inlink->dst->priv;
-    const int h = FFALIGN(inlink->h + 16, 16);
-    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(inlink->format);
-    const int bps = desc->comp[0].depth;
-
-    av_opt_set_int(s->dct, "bits_per_sample", bps, 0);
-    avcodec_dct_init(s->dct);
-
-    if (ARCH_X86)
-        ff_spp_init_x86(s);
-
-    s->hsub = desc->log2_chroma_w;
-    s->vsub = desc->log2_chroma_h;
-    s->temp_linesize = FFALIGN(inlink->w + 16, 16);
-    s->temp = av_malloc_array(s->temp_linesize, h * sizeof(*s->temp));
-    s->src  = av_malloc_array(s->temp_linesize, h * sizeof(*s->src) * 2);
-
-    if (!s->temp || !s->src)
-        return AVERROR(ENOMEM);
-    return 0;
-}
-
-static int filter_frame(AVFilterLink *inlink, AVFrame *in)
-{
-    AVFilterContext *ctx = inlink->dst;
-    SPPContext *s = ctx->priv;
-    AVFilterLink *outlink = ctx->outputs[0];
-    AVFrame *out = in;
-    int qp_stride = 0;
-    const int8_t *qp_table = NULL;
-    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(inlink->format);
-    const int depth = desc->comp[0].depth;
-
-    /* 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 (!s->qp) {
-        qp_table = av_frame_get_qp_table(in, &qp_stride, &s->qscale_type);
-
-        if (qp_table && !s->use_bframe_qp && in->pict_type != AV_PICTURE_TYPE_B) {
-            int w, h;
-
-            /* if the qp stride is not set, it means the QP are only defined on
-             * a line basis */
-            if (!qp_stride) {
-                w = AV_CEIL_RSHIFT(inlink->w, 4);
-                h = 1;
-            } else {
-                w = qp_stride;
-                h = AV_CEIL_RSHIFT(inlink->h, 4);
-            }
-
-            if (w * h > s->non_b_qp_alloc_size) {
-                int ret = av_reallocp_array(&s->non_b_qp_table, w, h);
-                if (ret < 0) {
-                    s->non_b_qp_alloc_size = 0;
-                    return ret;
-                }
-                s->non_b_qp_alloc_size = w * h;
-            }
-
-            av_assert0(w * h <= s->non_b_qp_alloc_size);
-            memcpy(s->non_b_qp_table, qp_table, w * h);
-        }
-    }
-
-    if (s->log2_count && !ctx->is_disabled) {
-        if (!s->use_bframe_qp && s->non_b_qp_table)
-            qp_table = s->non_b_qp_table;
-
-        if (qp_table || s->qp) {
-            const int cw = AV_CEIL_RSHIFT(inlink->w, s->hsub);
-            const int ch = AV_CEIL_RSHIFT(inlink->h, s->vsub);
-
-            /* 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);
-                    return AVERROR(ENOMEM);
-                }
-                av_frame_copy_props(out, in);
-                out->width  = in->width;
-                out->height = in->height;
-            }
-
-            filter(s, out->data[0], in->data[0], out->linesize[0], in->linesize[0], inlink->w, inlink->h, qp_table, qp_stride, 1, depth);
-
-            if (out->data[2]) {
-                filter(s, out->data[1], in->data[1], out->linesize[1], in->linesize[1], cw,        ch,        qp_table, qp_stride, 0, depth);
-                filter(s, out->data[2], in->data[2], out->linesize[2], in->linesize[2], cw,        ch,        qp_table, qp_stride, 0, depth);
-            }
-            emms_c();
-        }
-    }
-
-    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);
-    }
-    return ff_filter_frame(outlink, out);
-}
-
-static int process_command(AVFilterContext *ctx, const char *cmd, const char *args,
-                           char *res, int res_len, int flags)
-{
-    SPPContext *s = ctx->priv;
-
-    if (!strcmp(cmd, "level") || !strcmp(cmd, "quality")) {
-        if (!strcmp(args, "max"))
-            s->log2_count = MAX_LEVEL;
-        else
-            s->log2_count = av_clip(strtol(args, NULL, 10), 0, MAX_LEVEL);
-        return 0;
-    }
-    return AVERROR(ENOSYS);
-}
-
-static av_cold int init_dict(AVFilterContext *ctx, AVDictionary **opts)
-{
-    SPPContext *s = ctx->priv;
-    int ret;
-
-    s->avctx = avcodec_alloc_context3(NULL);
-    s->dct = avcodec_dct_alloc();
-    if (!s->avctx || !s->dct)
-        return AVERROR(ENOMEM);
-
-    if (opts) {
-        AVDictionaryEntry *e = NULL;
-
-        while ((e = av_dict_get(*opts, "", e, AV_DICT_IGNORE_SUFFIX))) {
-            if ((ret = av_opt_set(s->dct, e->key, e->value, 0)) < 0)
-                return ret;
-        }
-        av_dict_free(opts);
-    }
-
-    s->store_slice = store_slice_c;
-    switch (s->mode) {
-    case MODE_HARD: s->requantize = hardthresh_c; break;
-    case MODE_SOFT: s->requantize = softthresh_c; break;
-    }
-    return 0;
-}
-
-static av_cold void uninit(AVFilterContext *ctx)
-{
-    SPPContext *s = ctx->priv;
-
-    av_freep(&s->temp);
-    av_freep(&s->src);
-    if (s->avctx) {
-        avcodec_close(s->avctx);
-        av_freep(&s->avctx);
-    }
-    av_freep(&s->dct);
-    av_freep(&s->non_b_qp_table);
-}
-
-static const AVFilterPad spp_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .config_props = config_input,
-        .filter_frame = filter_frame,
-    },
-    { NULL }
-};
-
-static const AVFilterPad spp_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-    { NULL }
-};
-
-AVFilter ff_vf_spp = {
-    .name            = "spp",
-    .description     = NULL_IF_CONFIG_SMALL("Apply a simple post processing filter."),
-    .priv_size       = sizeof(SPPContext),
-    .init_dict       = init_dict,
-    .uninit          = uninit,
-    .query_formats   = query_formats,
-    .inputs          = spp_inputs,
-    .outputs         = spp_outputs,
-    .process_command = process_command,
-    .priv_class      = &spp_class,
-    .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
-};
diff --git a/libavfilter/vf_spp.h b/libavfilter/vf_spp.h
deleted file mode 100644
index c03073a..0000000
--- a/libavfilter/vf_spp.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
- * Copyright (c) 2013 Clément Bœsch
- *
- * 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.
- */
-
-#ifndef AVFILTER_SPP_H
-#define AVFILTER_SPP_H
-
-#include "libavcodec/avcodec.h"
-#include "libavcodec/avdct.h"
-#include "avfilter.h"
-
-#define MAX_LEVEL 6 /* quality levels */
-
-typedef struct SPPContext {
-    const AVClass *av_class;
-
-    int log2_count;
-    int qp;
-    int mode;
-    int qscale_type;
-    int temp_linesize;
-    uint8_t *src;
-    uint16_t *temp;
-    AVCodecContext *avctx;
-    AVDCT *dct;
-    int8_t *non_b_qp_table;
-    int non_b_qp_alloc_size;
-    int use_bframe_qp;
-    int hsub, vsub;
-
-    void (*store_slice)(uint8_t *dst, const int16_t *src,
-                        int dst_stride, int src_stride,
-                        int width, int height, int log2_scale,
-                        const uint8_t dither[8][8]);
-
-    void (*requantize)(int16_t dst[64], const int16_t src[64],
-                       int qp, const uint8_t *permutation);
-} SPPContext;
-
-void ff_spp_init_x86(SPPContext *s);
-
-#endif /* AVFILTER_SPP_H */
diff --git a/libavfilter/vf_stereo3d.c b/libavfilter/vf_stereo3d.c
deleted file mode 100644
index ff17b07..0000000
--- a/libavfilter/vf_stereo3d.c
+++ /dev/null
@@ -1,1125 +0,0 @@
-/*
- * Copyright (c) 2010 Gordon Schmidt <gordon.schmidt <at> s2000.tu-chemnitz.de>
- * Copyright (c) 2013-2015 Paul B Mahol
- *
- * 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
- */
-
-#include "libavutil/avassert.h"
-#include "libavutil/imgutils.h"
-#include "libavutil/intreadwrite.h"
-#include "libavutil/opt.h"
-#include "libavutil/parseutils.h"
-#include "libavutil/pixdesc.h"
-#include "avfilter.h"
-#include "drawutils.h"
-#include "formats.h"
-#include "internal.h"
-#include "video.h"
-#include "stereo3d.h"
-
-enum StereoCode {
-    ANAGLYPH_RC_GRAY,   // anaglyph red/cyan gray
-    ANAGLYPH_RC_HALF,   // anaglyph red/cyan half colored
-    ANAGLYPH_RC_COLOR,  // anaglyph red/cyan colored
-    ANAGLYPH_RC_DUBOIS, // anaglyph red/cyan dubois
-    ANAGLYPH_GM_GRAY,   // anaglyph green/magenta gray
-    ANAGLYPH_GM_HALF,   // anaglyph green/magenta half colored
-    ANAGLYPH_GM_COLOR,  // anaglyph green/magenta colored
-    ANAGLYPH_GM_DUBOIS, // anaglyph green/magenta dubois
-    ANAGLYPH_YB_GRAY,   // anaglyph yellow/blue gray
-    ANAGLYPH_YB_HALF,   // anaglyph yellow/blue half colored
-    ANAGLYPH_YB_COLOR,  // anaglyph yellow/blue colored
-    ANAGLYPH_YB_DUBOIS, // anaglyph yellow/blue dubois
-    ANAGLYPH_RB_GRAY,   // anaglyph red/blue gray
-    ANAGLYPH_RG_GRAY,   // anaglyph red/green gray
-    MONO_L,             // mono output for debugging (left eye only)
-    MONO_R,             // mono output for debugging (right eye only)
-    INTERLEAVE_ROWS_LR, // row-interleave (left eye has top row)
-    INTERLEAVE_ROWS_RL, // row-interleave (right eye has top row)
-    SIDE_BY_SIDE_LR,    // side by side parallel (left eye left, right eye right)
-    SIDE_BY_SIDE_RL,    // side by side crosseye (right eye left, left eye right)
-    SIDE_BY_SIDE_2_LR,  // side by side parallel with half width resolution
-    SIDE_BY_SIDE_2_RL,  // side by side crosseye with half width resolution
-    ABOVE_BELOW_LR,     // above-below (left eye above, right eye below)
-    ABOVE_BELOW_RL,     // above-below (right eye above, left eye below)
-    ABOVE_BELOW_2_LR,   // above-below with half height resolution
-    ABOVE_BELOW_2_RL,   // above-below with half height resolution
-    ALTERNATING_LR,     // alternating frames (left eye first, right eye second)
-    ALTERNATING_RL,     // alternating frames (right eye first, left eye second)
-    CHECKERBOARD_LR,    // checkerboard pattern (left eye first, right eye second)
-    CHECKERBOARD_RL,    // checkerboard pattern (right eye first, left eye second)
-    INTERLEAVE_COLS_LR, // column-interleave (left eye first, right eye second)
-    INTERLEAVE_COLS_RL, // column-interleave (right eye first, left eye second)
-    HDMI,               // HDMI frame pack (left eye first, right eye second)
-    STEREO_CODE_COUNT   // TODO: needs autodetection
-};
-
-typedef struct StereoComponent {
-    int format;                 ///< StereoCode
-    int width, height;
-    int off_left, off_right;
-    int off_lstep, off_rstep;
-    int row_left, row_right;
-    int row_step;
-} StereoComponent;
-
-static const int ana_coeff[][3][6] = {
-  [ANAGLYPH_RB_GRAY]   =
-    {{19595, 38470,  7471,     0,     0,     0},
-     {    0,     0,     0,     0,     0,     0},
-     {    0,     0,     0, 19595, 38470,  7471}},
-  [ANAGLYPH_RG_GRAY]   =
-    {{19595, 38470,  7471,     0,     0,     0},
-     {    0,     0,     0, 19595, 38470,  7471},
-     {    0,     0,     0,     0,     0,     0}},
-  [ANAGLYPH_RC_GRAY]   =
-    {{19595, 38470,  7471,     0,     0,     0},
-     {    0,     0,     0, 19595, 38470,  7471},
-     {    0,     0,     0, 19595, 38470,  7471}},
-  [ANAGLYPH_RC_HALF]   =
-    {{19595, 38470,  7471,     0,     0,     0},
-     {    0,     0,     0,     0, 65536,     0},
-     {    0,     0,     0,     0,     0, 65536}},
-  [ANAGLYPH_RC_COLOR]  =
-    {{65536,     0,     0,     0,     0,     0},
-     {    0,     0,     0,     0, 65536,     0},
-     {    0,     0,     0,     0,     0, 65536}},
-  [ANAGLYPH_RC_DUBOIS] =
-    {{29884, 32768, 11534, -2818, -5767,  -131},
-     {-2621, -2490, -1049, 24773, 48103, -1180},
-     { -983, -1376,  -328, -4719, -7406, 80347}},
-  [ANAGLYPH_GM_GRAY]   =
-    {{    0,     0,     0, 19595, 38470,  7471},
-     {19595, 38470,  7471,     0,     0,     0},
-     {    0,     0,     0, 19595, 38470,  7471}},
-  [ANAGLYPH_GM_HALF]   =
-    {{    0,     0,     0, 65536,     0,     0},
-     {19595, 38470,  7471,     0,     0,     0},
-     {    0,     0,     0,     0,     0, 65536}},
-  [ANAGLYPH_GM_COLOR]  =
-    {{    0,     0,     0, 65536,     0,     0},
-     {    0, 65536,     0,     0,     0,     0},
-     {    0,     0,     0,     0,     0, 65536}},
-  [ANAGLYPH_GM_DUBOIS]  =
-    {{-4063,-10354, -2556, 34669, 46203,  1573},
-     {18612, 43778,  9372, -1049,  -983, -4260},
-     { -983, -1769,  1376,   590,  4915, 61407}},
-  [ANAGLYPH_YB_GRAY]   =
-    {{    0,     0,     0, 19595, 38470,  7471},
-     {    0,     0,     0, 19595, 38470,  7471},
-     {19595, 38470,  7471,     0,     0,     0}},
-  [ANAGLYPH_YB_HALF]   =
-    {{    0,     0,     0, 65536,     0,     0},
-     {    0,     0,     0,     0, 65536,     0},
-     {19595, 38470,  7471,     0,     0,     0}},
-  [ANAGLYPH_YB_COLOR]  =
-    {{    0,     0,     0, 65536,     0,     0},
-     {    0,     0,     0,     0, 65536,     0},
-     {    0,     0, 65536,     0,     0,     0}},
-  [ANAGLYPH_YB_DUBOIS] =
-    {{69599,-13435,19595,  -1048, -8061, -1114},
-     {-1704, 59507, 4456,    393,  4063, -1114},
-     {-2490,-11338, 1442,   6160, 12124, 59703}},
-};
-
-typedef struct Stereo3DContext {
-    const AVClass *class;
-    StereoComponent in, out;
-    int width, height;
-    const int *ana_matrix[3];
-    int nb_planes;
-    int linesize[4];
-    int pheight[4];
-    int hsub, vsub;
-    int pixstep[4];
-    AVFrame *prev;
-    int blanks;
-    int in_off_left[4], in_off_right[4];
-    AVRational aspect;
-    Stereo3DDSPContext dsp;
-} Stereo3DContext;
-
-#define OFFSET(x) offsetof(Stereo3DContext, x)
-#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
-
-static const AVOption stereo3d_options[] = {
-    { "in",    "set input format",  OFFSET(in.format),   AV_OPT_TYPE_INT,   {.i64=SIDE_BY_SIDE_LR}, INTERLEAVE_ROWS_LR, STEREO_CODE_COUNT-1, FLAGS, "in"},
-    { "ab2l",  "above below half height left first",  0, AV_OPT_TYPE_CONST, {.i64=ABOVE_BELOW_2_LR},   0, 0, FLAGS, "in" },
-    { "tb2l",  "above below half height left first",  0, AV_OPT_TYPE_CONST, {.i64=ABOVE_BELOW_2_LR},   0, 0, FLAGS, "in" },
-    { "ab2r",  "above below half height right first", 0, AV_OPT_TYPE_CONST, {.i64=ABOVE_BELOW_2_RL},   0, 0, FLAGS, "in" },
-    { "tb2r",  "above below half height right first", 0, AV_OPT_TYPE_CONST, {.i64=ABOVE_BELOW_2_RL},   0, 0, FLAGS, "in" },
-    { "abl",   "above below left first",              0, AV_OPT_TYPE_CONST, {.i64=ABOVE_BELOW_LR},     0, 0, FLAGS, "in" },
-    { "tbl",   "above below left first",              0, AV_OPT_TYPE_CONST, {.i64=ABOVE_BELOW_LR},     0, 0, FLAGS, "in" },
-    { "abr",   "above below right first",             0, AV_OPT_TYPE_CONST, {.i64=ABOVE_BELOW_RL},     0, 0, FLAGS, "in" },
-    { "tbr",   "above below right first",             0, AV_OPT_TYPE_CONST, {.i64=ABOVE_BELOW_RL},     0, 0, FLAGS, "in" },
-    { "al",    "alternating frames left first",       0, AV_OPT_TYPE_CONST, {.i64=ALTERNATING_LR},     0, 0, FLAGS, "in" },
-    { "ar",    "alternating frames right first",      0, AV_OPT_TYPE_CONST, {.i64=ALTERNATING_RL},     0, 0, FLAGS, "in" },
-    { "sbs2l", "side by side half width left first",  0, AV_OPT_TYPE_CONST, {.i64=SIDE_BY_SIDE_2_LR},  0, 0, FLAGS, "in" },
-    { "sbs2r", "side by side half width right first", 0, AV_OPT_TYPE_CONST, {.i64=SIDE_BY_SIDE_2_RL},  0, 0, FLAGS, "in" },
-    { "sbsl",  "side by side left first",             0, AV_OPT_TYPE_CONST, {.i64=SIDE_BY_SIDE_LR},    0, 0, FLAGS, "in" },
-    { "sbsr",  "side by side right first",            0, AV_OPT_TYPE_CONST, {.i64=SIDE_BY_SIDE_RL},    0, 0, FLAGS, "in" },
-    { "irl",   "interleave rows left first",          0, AV_OPT_TYPE_CONST, {.i64=INTERLEAVE_ROWS_LR}, 0, 0, FLAGS, "in" },
-    { "irr",   "interleave rows right first",         0, AV_OPT_TYPE_CONST, {.i64=INTERLEAVE_ROWS_RL}, 0, 0, FLAGS, "in" },
-    { "icl",   "interleave columns left first",       0, AV_OPT_TYPE_CONST, {.i64=INTERLEAVE_COLS_LR}, 0, 0, FLAGS, "in" },
-    { "icr",   "interleave columns right first",      0, AV_OPT_TYPE_CONST, {.i64=INTERLEAVE_COLS_RL}, 0, 0, FLAGS, "in" },
-    { "out",   "set output format", OFFSET(out.format),  AV_OPT_TYPE_INT,   {.i64=ANAGLYPH_RC_DUBOIS}, 0, STEREO_CODE_COUNT-1, FLAGS, "out"},
-    { "ab2l",  "above below half height left first",  0, AV_OPT_TYPE_CONST, {.i64=ABOVE_BELOW_2_LR},   0, 0, FLAGS, "out" },
-    { "tb2l",  "above below half height left first",  0, AV_OPT_TYPE_CONST, {.i64=ABOVE_BELOW_2_LR},   0, 0, FLAGS, "out" },
-    { "ab2r",  "above below half height right first", 0, AV_OPT_TYPE_CONST, {.i64=ABOVE_BELOW_2_RL},   0, 0, FLAGS, "out" },
-    { "tb2r",  "above below half height right first", 0, AV_OPT_TYPE_CONST, {.i64=ABOVE_BELOW_2_RL},   0, 0, FLAGS, "out" },
-    { "abl",   "above below left first",              0, AV_OPT_TYPE_CONST, {.i64=ABOVE_BELOW_LR},     0, 0, FLAGS, "out" },
-    { "tbl",   "above below left first",              0, AV_OPT_TYPE_CONST, {.i64=ABOVE_BELOW_LR},     0, 0, FLAGS, "out" },
-    { "abr",   "above below right first",             0, AV_OPT_TYPE_CONST, {.i64=ABOVE_BELOW_RL},     0, 0, FLAGS, "out" },
-    { "tbr",   "above below right first",             0, AV_OPT_TYPE_CONST, {.i64=ABOVE_BELOW_RL},     0, 0, FLAGS, "out" },
-    { "agmc",  "anaglyph green magenta color",        0, AV_OPT_TYPE_CONST, {.i64=ANAGLYPH_GM_COLOR},  0, 0, FLAGS, "out" },
-    { "agmd",  "anaglyph green magenta dubois",       0, AV_OPT_TYPE_CONST, {.i64=ANAGLYPH_GM_DUBOIS}, 0, 0, FLAGS, "out" },
-    { "agmg",  "anaglyph green magenta gray",         0, AV_OPT_TYPE_CONST, {.i64=ANAGLYPH_GM_GRAY},   0, 0, FLAGS, "out" },
-    { "agmh",  "anaglyph green magenta half color",   0, AV_OPT_TYPE_CONST, {.i64=ANAGLYPH_GM_HALF},   0, 0, FLAGS, "out" },
-    { "al",    "alternating frames left first",       0, AV_OPT_TYPE_CONST, {.i64=ALTERNATING_LR},     0, 0, FLAGS, "out" },
-    { "ar",    "alternating frames right first",      0, AV_OPT_TYPE_CONST, {.i64=ALTERNATING_RL},     0, 0, FLAGS, "out" },
-    { "arbg",  "anaglyph red blue gray",              0, AV_OPT_TYPE_CONST, {.i64=ANAGLYPH_RB_GRAY},   0, 0, FLAGS, "out" },
-    { "arcc",  "anaglyph red cyan color",             0, AV_OPT_TYPE_CONST, {.i64=ANAGLYPH_RC_COLOR},  0, 0, FLAGS, "out" },
-    { "arcd",  "anaglyph red cyan dubois",            0, AV_OPT_TYPE_CONST, {.i64=ANAGLYPH_RC_DUBOIS}, 0, 0, FLAGS, "out" },
-    { "arcg",  "anaglyph red cyan gray",              0, AV_OPT_TYPE_CONST, {.i64=ANAGLYPH_RC_GRAY},   0, 0, FLAGS, "out" },
-    { "arch",  "anaglyph red cyan half color",        0, AV_OPT_TYPE_CONST, {.i64=ANAGLYPH_RC_HALF},   0, 0, FLAGS, "out" },
-    { "argg",  "anaglyph red green gray",             0, AV_OPT_TYPE_CONST, {.i64=ANAGLYPH_RG_GRAY},   0, 0, FLAGS, "out" },
-    { "aybc",  "anaglyph yellow blue color",          0, AV_OPT_TYPE_CONST, {.i64=ANAGLYPH_YB_COLOR},  0, 0, FLAGS, "out" },
-    { "aybd",  "anaglyph yellow blue dubois",         0, AV_OPT_TYPE_CONST, {.i64=ANAGLYPH_YB_DUBOIS}, 0, 0, FLAGS, "out" },
-    { "aybg",  "anaglyph yellow blue gray",           0, AV_OPT_TYPE_CONST, {.i64=ANAGLYPH_YB_GRAY},   0, 0, FLAGS, "out" },
-    { "aybh",  "anaglyph yellow blue half color",     0, AV_OPT_TYPE_CONST, {.i64=ANAGLYPH_YB_HALF},   0, 0, FLAGS, "out" },
-    { "irl",   "interleave rows left first",          0, AV_OPT_TYPE_CONST, {.i64=INTERLEAVE_ROWS_LR}, 0, 0, FLAGS, "out" },
-    { "irr",   "interleave rows right first",         0, AV_OPT_TYPE_CONST, {.i64=INTERLEAVE_ROWS_RL}, 0, 0, FLAGS, "out" },
-    { "ml",    "mono left",                           0, AV_OPT_TYPE_CONST, {.i64=MONO_L},             0, 0, FLAGS, "out" },
-    { "mr",    "mono right",                          0, AV_OPT_TYPE_CONST, {.i64=MONO_R},             0, 0, FLAGS, "out" },
-    { "sbs2l", "side by side half width left first",  0, AV_OPT_TYPE_CONST, {.i64=SIDE_BY_SIDE_2_LR},  0, 0, FLAGS, "out" },
-    { "sbs2r", "side by side half width right first", 0, AV_OPT_TYPE_CONST, {.i64=SIDE_BY_SIDE_2_RL},  0, 0, FLAGS, "out" },
-    { "sbsl",  "side by side left first",             0, AV_OPT_TYPE_CONST, {.i64=SIDE_BY_SIDE_LR},    0, 0, FLAGS, "out" },
-    { "sbsr",  "side by side right first",            0, AV_OPT_TYPE_CONST, {.i64=SIDE_BY_SIDE_RL},    0, 0, FLAGS, "out" },
-    { "chl",   "checkerboard left first",             0, AV_OPT_TYPE_CONST, {.i64=CHECKERBOARD_LR},    0, 0, FLAGS, "out" },
-    { "chr",   "checkerboard right first",            0, AV_OPT_TYPE_CONST, {.i64=CHECKERBOARD_RL},    0, 0, FLAGS, "out" },
-    { "icl",   "interleave columns left first",       0, AV_OPT_TYPE_CONST, {.i64=INTERLEAVE_COLS_LR}, 0, 0, FLAGS, "out" },
-    { "icr",   "interleave columns right first",      0, AV_OPT_TYPE_CONST, {.i64=INTERLEAVE_COLS_RL}, 0, 0, FLAGS, "out" },
-    { "hdmi",  "HDMI frame pack",                     0, AV_OPT_TYPE_CONST, {.i64=HDMI},               0, 0, FLAGS, "out" },
-    { NULL }
-};
-
-AVFILTER_DEFINE_CLASS(stereo3d);
-
-static const enum AVPixelFormat anaglyph_pix_fmts[] = {
-    AV_PIX_FMT_RGB24, AV_PIX_FMT_BGR24,
-    AV_PIX_FMT_NONE
-};
-
-static const enum AVPixelFormat other_pix_fmts[] = {
-    AV_PIX_FMT_RGB24, AV_PIX_FMT_BGR24,
-    AV_PIX_FMT_RGB48BE, AV_PIX_FMT_BGR48BE,
-    AV_PIX_FMT_RGB48LE, AV_PIX_FMT_BGR48LE,
-    AV_PIX_FMT_RGBA64BE, AV_PIX_FMT_BGRA64BE,
-    AV_PIX_FMT_RGBA64LE, AV_PIX_FMT_BGRA64LE,
-    AV_PIX_FMT_RGBA,  AV_PIX_FMT_BGRA,
-    AV_PIX_FMT_ARGB,  AV_PIX_FMT_ABGR,
-    AV_PIX_FMT_RGB0,  AV_PIX_FMT_BGR0,
-    AV_PIX_FMT_0RGB,  AV_PIX_FMT_0BGR,
-    AV_PIX_FMT_GBRP,
-    AV_PIX_FMT_GBRP9BE,  AV_PIX_FMT_GBRP9LE,
-    AV_PIX_FMT_GBRP10BE, AV_PIX_FMT_GBRP10LE,
-    AV_PIX_FMT_GBRP12BE, AV_PIX_FMT_GBRP12LE,
-    AV_PIX_FMT_GBRP14BE, AV_PIX_FMT_GBRP14LE,
-    AV_PIX_FMT_GBRP16BE, AV_PIX_FMT_GBRP16LE,
-    AV_PIX_FMT_YUV410P,
-    AV_PIX_FMT_YUV411P,
-    AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVA420P,
-    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,
-    AV_PIX_FMT_YUV422P9BE,  AV_PIX_FMT_YUVA422P9BE,
-    AV_PIX_FMT_YUV444P9LE,  AV_PIX_FMT_YUVA444P9LE,
-    AV_PIX_FMT_YUV444P9BE,  AV_PIX_FMT_YUVA444P9BE,
-    AV_PIX_FMT_YUV420P10LE, AV_PIX_FMT_YUVA420P10LE,
-    AV_PIX_FMT_YUV420P10BE, AV_PIX_FMT_YUVA420P10BE,
-    AV_PIX_FMT_YUV422P10LE, AV_PIX_FMT_YUVA422P10LE,
-    AV_PIX_FMT_YUV422P10BE, AV_PIX_FMT_YUVA422P10BE,
-    AV_PIX_FMT_YUV444P10LE, AV_PIX_FMT_YUVA444P10LE,
-    AV_PIX_FMT_YUV444P10BE, AV_PIX_FMT_YUVA444P10BE,
-    AV_PIX_FMT_YUV420P12BE,  AV_PIX_FMT_YUV420P12LE,
-    AV_PIX_FMT_YUV422P12BE,  AV_PIX_FMT_YUV422P12LE,
-    AV_PIX_FMT_YUV444P12BE,  AV_PIX_FMT_YUV444P12LE,
-    AV_PIX_FMT_YUV420P14BE,  AV_PIX_FMT_YUV420P14LE,
-    AV_PIX_FMT_YUV422P14BE,  AV_PIX_FMT_YUV422P14LE,
-    AV_PIX_FMT_YUV444P14BE,  AV_PIX_FMT_YUV444P14LE,
-    AV_PIX_FMT_YUV420P16LE, AV_PIX_FMT_YUVA420P16LE,
-    AV_PIX_FMT_YUV420P16BE, AV_PIX_FMT_YUVA420P16BE,
-    AV_PIX_FMT_YUV422P16LE, AV_PIX_FMT_YUVA422P16LE,
-    AV_PIX_FMT_YUV422P16BE, AV_PIX_FMT_YUVA422P16BE,
-    AV_PIX_FMT_YUV444P16LE, AV_PIX_FMT_YUVA444P16LE,
-    AV_PIX_FMT_YUV444P16BE, AV_PIX_FMT_YUVA444P16BE,
-    AV_PIX_FMT_NONE
-};
-
-static int query_formats(AVFilterContext *ctx)
-{
-    Stereo3DContext *s = ctx->priv;
-    const enum AVPixelFormat *pix_fmts;
-    AVFilterFormats *fmts_list;
-
-    switch (s->out.format) {
-    case ANAGLYPH_GM_COLOR:
-    case ANAGLYPH_GM_DUBOIS:
-    case ANAGLYPH_GM_GRAY:
-    case ANAGLYPH_GM_HALF:
-    case ANAGLYPH_RB_GRAY:
-    case ANAGLYPH_RC_COLOR:
-    case ANAGLYPH_RC_DUBOIS:
-    case ANAGLYPH_RC_GRAY:
-    case ANAGLYPH_RC_HALF:
-    case ANAGLYPH_RG_GRAY:
-    case ANAGLYPH_YB_COLOR:
-    case ANAGLYPH_YB_DUBOIS:
-    case ANAGLYPH_YB_GRAY:
-    case ANAGLYPH_YB_HALF:
-        pix_fmts = anaglyph_pix_fmts;
-        break;
-    default:
-        pix_fmts = other_pix_fmts;
-    }
-
-    fmts_list = ff_make_format_list(pix_fmts);
-    if (!fmts_list)
-        return AVERROR(ENOMEM);
-    return ff_set_common_formats(ctx, fmts_list);
-}
-
-static inline uint8_t ana_convert(const int *coeff, const uint8_t *left, const uint8_t *right)
-{
-    int sum;
-
-    sum  = coeff[0] * left[0] + coeff[3] * right[0]; //red in
-    sum += coeff[1] * left[1] + coeff[4] * right[1]; //green in
-    sum += coeff[2] * left[2] + coeff[5] * right[2]; //blue in
-
-    return av_clip_uint8(sum >> 16);
-}
-
-static void anaglyph_ic(uint8_t *dst, uint8_t *lsrc, uint8_t *rsrc,
-                        ptrdiff_t dst_linesize, ptrdiff_t l_linesize, ptrdiff_t r_linesize,
-                        int width, int height,
-                        const int *ana_matrix_r, const int *ana_matrix_g, const int *ana_matrix_b)
-{
-    int x, y, o;
-
-    for (y = 0; y < height; y++) {
-        for (o = 0, x = 0; x < width; x++, o+= 3) {
-            dst[o    ] = ana_convert(ana_matrix_r, lsrc + o * 2, rsrc + o * 2);
-            dst[o + 1] = ana_convert(ana_matrix_g, lsrc + o * 2, rsrc + o * 2);
-            dst[o + 2] = ana_convert(ana_matrix_b, lsrc + o * 2, rsrc + o * 2);
-        }
-
-        dst  += dst_linesize;
-        lsrc += l_linesize;
-        rsrc += r_linesize;
-    }
-}
-
-static void anaglyph(uint8_t *dst, uint8_t *lsrc, uint8_t *rsrc,
-                     ptrdiff_t dst_linesize, ptrdiff_t l_linesize, ptrdiff_t r_linesize,
-                     int width, int height,
-                     const int *ana_matrix_r, const int *ana_matrix_g, const int *ana_matrix_b)
-{
-    int x, y, o;
-
-    for (y = 0; y < height; y++) {
-        for (o = 0, x = 0; x < width; x++, o+= 3) {
-            dst[o    ] = ana_convert(ana_matrix_r, lsrc + o, rsrc + o);
-            dst[o + 1] = ana_convert(ana_matrix_g, lsrc + o, rsrc + o);
-            dst[o + 2] = ana_convert(ana_matrix_b, lsrc + o, rsrc + o);
-        }
-
-        dst  += dst_linesize;
-        lsrc += l_linesize;
-        rsrc += r_linesize;
-    }
-}
-
-static int config_output(AVFilterLink *outlink)
-{
-    AVFilterContext *ctx = outlink->src;
-    AVFilterLink *inlink = ctx->inputs[0];
-    Stereo3DContext *s = ctx->priv;
-    AVRational fps = inlink->frame_rate;
-    AVRational tb = inlink->time_base;
-    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(outlink->format);
-    int ret;
-    s->aspect = inlink->sample_aspect_ratio;
-
-    switch (s->in.format) {
-    case INTERLEAVE_COLS_LR:
-    case INTERLEAVE_COLS_RL:
-    case SIDE_BY_SIDE_2_LR:
-    case SIDE_BY_SIDE_LR:
-    case SIDE_BY_SIDE_2_RL:
-    case SIDE_BY_SIDE_RL:
-        if (inlink->w & 1) {
-            av_log(ctx, AV_LOG_ERROR, "width must be even\n");
-            return AVERROR_INVALIDDATA;
-        }
-        break;
-    case INTERLEAVE_ROWS_LR:
-    case INTERLEAVE_ROWS_RL:
-    case ABOVE_BELOW_2_LR:
-    case ABOVE_BELOW_LR:
-    case ABOVE_BELOW_2_RL:
-    case ABOVE_BELOW_RL:
-        if (inlink->h & 1) {
-            av_log(ctx, AV_LOG_ERROR, "height must be even\n");
-            return AVERROR_INVALIDDATA;
-        }
-        break;
-    }
-
-    s->in.width     =
-    s->width        = inlink->w;
-    s->in.height    =
-    s->height       = inlink->h;
-    s->in.off_lstep =
-    s->in.off_rstep =
-    s->in.off_left  =
-    s->in.off_right =
-    s->in.row_left  =
-    s->in.row_right = 0;
-    s->in.row_step  = 1;
-
-    switch (s->in.format) {
-    case SIDE_BY_SIDE_2_LR:
-        s->aspect.num  *= 2;
-    case SIDE_BY_SIDE_LR:
-        s->width        = inlink->w / 2;
-        s->in.off_right = s->width;
-        break;
-    case SIDE_BY_SIDE_2_RL:
-        s->aspect.num  *= 2;
-    case SIDE_BY_SIDE_RL:
-        s->width        = inlink->w / 2;
-        s->in.off_left  = s->width;
-        break;
-    case ABOVE_BELOW_2_LR:
-        s->aspect.den  *= 2;
-    case ABOVE_BELOW_LR:
-        s->in.row_right =
-        s->height       = inlink->h / 2;
-        break;
-    case ABOVE_BELOW_2_RL:
-        s->aspect.den  *= 2;
-    case ABOVE_BELOW_RL:
-        s->in.row_left  =
-        s->height       = inlink->h / 2;
-        break;
-    case ALTERNATING_RL:
-    case ALTERNATING_LR:
-        fps.den        *= 2;
-        tb.num         *= 2;
-        break;
-    case INTERLEAVE_COLS_RL:
-    case INTERLEAVE_COLS_LR:
-        s->width        = inlink->w / 2;
-        break;
-    case INTERLEAVE_ROWS_LR:
-    case INTERLEAVE_ROWS_RL:
-        s->in.row_step  = 2;
-        if (s->in.format == INTERLEAVE_ROWS_RL)
-            s->in.off_lstep = 1;
-        else
-            s->in.off_rstep = 1;
-        if (s->out.format != CHECKERBOARD_LR &&
-            s->out.format != CHECKERBOARD_RL)
-            s->height   = inlink->h / 2;
-        break;
-    default:
-        av_log(ctx, AV_LOG_ERROR, "input format %d is not supported\n", s->in.format);
-        return AVERROR(EINVAL);
-    }
-
-    s->out.width     = s->width;
-    s->out.height    = s->height;
-    s->out.off_lstep =
-    s->out.off_rstep =
-    s->out.off_left  =
-    s->out.off_right =
-    s->out.row_left  =
-    s->out.row_right = 0;
-    s->out.row_step  = 1;
-
-    switch (s->out.format) {
-    case ANAGLYPH_RB_GRAY:
-    case ANAGLYPH_RG_GRAY:
-    case ANAGLYPH_RC_GRAY:
-    case ANAGLYPH_RC_HALF:
-    case ANAGLYPH_RC_COLOR:
-    case ANAGLYPH_RC_DUBOIS:
-    case ANAGLYPH_GM_GRAY:
-    case ANAGLYPH_GM_HALF:
-    case ANAGLYPH_GM_COLOR:
-    case ANAGLYPH_GM_DUBOIS:
-    case ANAGLYPH_YB_GRAY:
-    case ANAGLYPH_YB_HALF:
-    case ANAGLYPH_YB_COLOR:
-    case ANAGLYPH_YB_DUBOIS: {
-        uint8_t rgba_map[4];
-
-        ff_fill_rgba_map(rgba_map, outlink->format);
-        s->ana_matrix[rgba_map[0]] = &ana_coeff[s->out.format][0][0];
-        s->ana_matrix[rgba_map[1]] = &ana_coeff[s->out.format][1][0];
-        s->ana_matrix[rgba_map[2]] = &ana_coeff[s->out.format][2][0];
-        break;
-    }
-    case SIDE_BY_SIDE_2_LR:
-        s->aspect.den   *= 2;
-    case SIDE_BY_SIDE_LR:
-        s->out.width     = s->width * 2;
-        s->out.off_right = s->width;
-        break;
-    case SIDE_BY_SIDE_2_RL:
-        s->aspect.den   *= 2;
-    case SIDE_BY_SIDE_RL:
-        s->out.width     = s->width * 2;
-        s->out.off_left  = s->width;
-        break;
-    case ABOVE_BELOW_2_LR:
-        s->aspect.num   *= 2;
-    case ABOVE_BELOW_LR:
-        s->out.height    = s->height * 2;
-        s->out.row_right = s->height;
-        break;
-    case HDMI:
-        if (s->height != 720 && s->height != 1080) {
-            av_log(ctx, AV_LOG_ERROR, "Only 720 and 1080 height supported\n");
-            return AVERROR(EINVAL);
-        }
-
-        s->blanks = s->height / 24;
-        s->out.height    = s->height * 2 + s->blanks;
-        s->out.row_right = s->height + s->blanks;
-        break;
-    case ABOVE_BELOW_2_RL:
-        s->aspect.num   *= 2;
-    case ABOVE_BELOW_RL:
-        s->out.height    = s->height * 2;
-        s->out.row_left  = s->height;
-        break;
-    case INTERLEAVE_ROWS_LR:
-        s->in.row_step   = 1 + (s->in.format == INTERLEAVE_ROWS_RL);
-        s->out.row_step  = 2;
-        s->out.height    = s->height * 2;
-        s->out.off_rstep = 1;
-        break;
-    case INTERLEAVE_ROWS_RL:
-        s->in.row_step   = 1 + (s->in.format == INTERLEAVE_ROWS_LR);
-        s->out.row_step  = 2;
-        s->out.height    = s->height * 2;
-        s->out.off_lstep = 1;
-        break;
-    case MONO_R:
-        if (s->in.format != INTERLEAVE_COLS_LR) {
-            s->in.off_left = s->in.off_right;
-            s->in.row_left = s->in.row_right;
-        }
-        if (s->in.format == INTERLEAVE_ROWS_LR)
-            FFSWAP(int, s->in.off_lstep, s->in.off_rstep);
-        break;
-    case MONO_L:
-        if (s->in.format == INTERLEAVE_ROWS_RL)
-            FFSWAP(int, s->in.off_lstep, s->in.off_rstep);
-        break;
-    case ALTERNATING_RL:
-    case ALTERNATING_LR:
-        fps.num         *= 2;
-        tb.den          *= 2;
-        break;
-    case CHECKERBOARD_LR:
-    case CHECKERBOARD_RL:
-    case INTERLEAVE_COLS_LR:
-    case INTERLEAVE_COLS_RL:
-        s->out.width     = s->width * 2;
-        break;
-    default:
-        av_log(ctx, AV_LOG_ERROR, "output format %d is not supported\n", s->out.format);
-        return AVERROR(EINVAL);
-    }
-
-    if (s->in.format == INTERLEAVE_COLS_LR || s->in.format == INTERLEAVE_COLS_RL) {
-        if ((s->in.format & 1) != (s->out.format & 1)) {
-            FFSWAP(int, s->in.row_left,   s->in.row_right);
-            FFSWAP(int, s->in.off_lstep,  s->in.off_rstep);
-            FFSWAP(int, s->in.off_left,   s->in.off_right);
-            FFSWAP(int, s->out.row_left,  s->out.row_right);
-            FFSWAP(int, s->out.off_lstep, s->out.off_rstep);
-            FFSWAP(int, s->out.off_left,  s->out.off_right);
-        }
-    }
-
-    outlink->w = s->out.width;
-    outlink->h = s->out.height;
-    outlink->frame_rate = fps;
-    outlink->time_base = tb;
-    outlink->sample_aspect_ratio = s->aspect;
-
-    if ((ret = av_image_fill_linesizes(s->linesize, outlink->format, s->width)) < 0)
-        return ret;
-    s->nb_planes = av_pix_fmt_count_planes(outlink->format);
-    av_image_fill_max_pixsteps(s->pixstep, NULL, desc);
-    s->pheight[1] = s->pheight[2] = AV_CEIL_RSHIFT(s->height, desc->log2_chroma_h);
-    s->pheight[0] = s->pheight[3] = s->height;
-    s->hsub = desc->log2_chroma_w;
-    s->vsub = desc->log2_chroma_h;
-
-    s->dsp.anaglyph = anaglyph;
-    if (ARCH_X86)
-        ff_stereo3d_init_x86(&s->dsp);
-
-    return 0;
-}
-
-typedef struct ThreadData {
-    AVFrame *ileft, *iright;
-    AVFrame *out;
-} ThreadData;
-
-static int filter_slice(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
-{
-    Stereo3DContext *s = ctx->priv;
-    ThreadData *td = arg;
-    AVFrame *ileft = td->ileft;
-    AVFrame *iright = td->iright;
-    AVFrame *out = td->out;
-    int height = s->out.height;
-    int start = (height *  jobnr   ) / nb_jobs;
-    int end   = (height * (jobnr+1)) / nb_jobs;
-    const int **ana_matrix = s->ana_matrix;
-
-    s->dsp.anaglyph(out->data[0] + out->linesize[0] * start,
-             ileft ->data[0] + s->in_off_left [0]  + ileft->linesize[0] * start * s->in.row_step,
-             iright->data[0] + s->in_off_right[0] + iright->linesize[0] * start * s->in.row_step,
-             out->linesize[0],
-             ileft->linesize[0] * s->in.row_step,
-             iright->linesize[0] * s->in.row_step,
-             s->out.width, end - start,
-             ana_matrix[0], ana_matrix[1], ana_matrix[2]);
-
-    return 0;
-}
-
-static void interleave_cols_to_any(Stereo3DContext *s, int *out_off, int p, AVFrame *in, AVFrame *out, int d)
-{
-    int y, x;
-
-    for (y = 0; y < s->pheight[p]; y++) {
-        const uint8_t *src = (const uint8_t*)in->data[p] + y * in->linesize[p] + d * s->pixstep[p];
-        uint8_t *dst = out->data[p] + out_off[p] + y * out->linesize[p] * s->out.row_step;
-
-        switch (s->pixstep[p]) {
-        case 1:
-            for (x = 0; x < s->linesize[p]; x++)
-                dst[x] = src[x * 2];
-            break;
-        case 2:
-            for (x = 0; x < s->linesize[p]; x+=2)
-                AV_WN16(&dst[x], AV_RN16(&src[x * 2]));
-            break;
-        case 3:
-            for (x = 0; x < s->linesize[p]; x+=3)
-                AV_WB24(&dst[x], AV_RB24(&src[x * 2]));
-            break;
-        case 4:
-            for (x = 0; x < s->linesize[p]; x+=4)
-                AV_WN32(&dst[x], AV_RN32(&src[x * 2]));
-            break;
-        case 6:
-            for (x = 0; x < s->linesize[p]; x+=6)
-                AV_WB48(&dst[x], AV_RB48(&src[x * 2]));
-            break;
-        case 8:
-            for (x = 0; x < s->linesize[p]; x+=8)
-                AV_WN64(&dst[x], AV_RN64(&src[x * 2]));
-            break;
-        }
-    }
-}
-
-static int filter_frame(AVFilterLink *inlink, AVFrame *inpicref)
-{
-    AVFilterContext *ctx  = inlink->dst;
-    Stereo3DContext *s = ctx->priv;
-    AVFilterLink *outlink = ctx->outputs[0];
-    AVFrame *out = NULL, *oleft, *oright, *ileft, *iright;
-    int out_off_left[4], out_off_right[4];
-    int i, ret;
-
-    if (s->in.format == s->out.format)
-        return ff_filter_frame(outlink, inpicref);
-
-    switch (s->out.format) {
-    case ALTERNATING_LR:
-    case ALTERNATING_RL:
-        if (!s->prev) {
-            s->prev = inpicref;
-            return 0;
-        }
-        break;
-    };
-
-    switch (s->in.format) {
-    case ALTERNATING_LR:
-    case ALTERNATING_RL:
-        if (!s->prev) {
-            s->prev = inpicref;
-            return 0;
-        }
-        ileft  = s->prev;
-        iright = inpicref;
-        if (s->in.format == ALTERNATING_RL)
-            FFSWAP(AVFrame *, ileft, iright);
-        break;
-    default:
-        ileft = iright = inpicref;
-    };
-
-    if ((s->out.format == ALTERNATING_LR ||
-         s->out.format == ALTERNATING_RL) &&
-        (s->in.format == SIDE_BY_SIDE_LR ||
-         s->in.format == SIDE_BY_SIDE_RL ||
-         s->in.format == SIDE_BY_SIDE_2_LR ||
-         s->in.format == SIDE_BY_SIDE_2_RL ||
-         s->in.format == ABOVE_BELOW_LR ||
-         s->in.format == ABOVE_BELOW_RL ||
-         s->in.format == ABOVE_BELOW_2_LR ||
-         s->in.format == ABOVE_BELOW_2_RL ||
-         s->in.format == INTERLEAVE_ROWS_LR ||
-         s->in.format == INTERLEAVE_ROWS_RL)) {
-        oright = av_frame_clone(s->prev);
-        oleft  = av_frame_clone(s->prev);
-        if (!oright || !oleft) {
-            av_frame_free(&oright);
-            av_frame_free(&oleft);
-            av_frame_free(&s->prev);
-            av_frame_free(&inpicref);
-            return AVERROR(ENOMEM);
-        }
-    } else if ((s->out.format == MONO_L ||
-                s->out.format == MONO_R) &&
-        (s->in.format == SIDE_BY_SIDE_LR ||
-         s->in.format == SIDE_BY_SIDE_RL ||
-         s->in.format == SIDE_BY_SIDE_2_LR ||
-         s->in.format == SIDE_BY_SIDE_2_RL ||
-         s->in.format == ABOVE_BELOW_LR ||
-         s->in.format == ABOVE_BELOW_RL ||
-         s->in.format == ABOVE_BELOW_2_LR ||
-         s->in.format == ABOVE_BELOW_2_RL ||
-         s->in.format == INTERLEAVE_ROWS_LR ||
-         s->in.format == INTERLEAVE_ROWS_RL)) {
-        out = oleft = oright = av_frame_clone(inpicref);
-        if (!out) {
-            av_frame_free(&s->prev);
-            av_frame_free(&inpicref);
-            return AVERROR(ENOMEM);
-        }
-    } else if ((s->out.format == MONO_L && s->in.format == ALTERNATING_LR) ||
-               (s->out.format == MONO_R && s->in.format == ALTERNATING_RL)) {
-        s->prev->pts /= 2;
-        ret = ff_filter_frame(outlink, s->prev);
-        av_frame_free(&inpicref);
-        s->prev = NULL;
-        return ret;
-    } else if ((s->out.format == MONO_L && s->in.format == ALTERNATING_RL) ||
-               (s->out.format == MONO_R && s->in.format == ALTERNATING_LR)) {
-        av_frame_free(&s->prev);
-        inpicref->pts /= 2;
-        return ff_filter_frame(outlink, inpicref);
-    } else if ((s->out.format == ALTERNATING_LR && s->in.format == ALTERNATING_RL) ||
-               (s->out.format == ALTERNATING_RL && s->in.format == ALTERNATING_LR)) {
-        FFSWAP(int64_t, s->prev->pts, inpicref->pts);
-        ff_filter_frame(outlink, inpicref);
-        ret = ff_filter_frame(outlink, s->prev);
-        s->prev = NULL;
-        return ret;
-    } else {
-        out = oleft = oright = ff_get_video_buffer(outlink, outlink->w, outlink->h);
-        if (!out) {
-            av_frame_free(&s->prev);
-            av_frame_free(&inpicref);
-            return AVERROR(ENOMEM);
-        }
-        av_frame_copy_props(out, inpicref);
-
-        if (s->out.format == ALTERNATING_LR ||
-            s->out.format == ALTERNATING_RL) {
-            oright = ff_get_video_buffer(outlink, outlink->w, outlink->h);
-            if (!oright) {
-                av_frame_free(&oleft);
-                av_frame_free(&s->prev);
-                av_frame_free(&inpicref);
-                return AVERROR(ENOMEM);
-            }
-            av_frame_copy_props(oright, s->prev);
-        }
-    }
-
-    for (i = 0; i < 4; i++) {
-        int hsub = i == 1 || i == 2 ? s->hsub : 0;
-        int vsub = i == 1 || i == 2 ? s->vsub : 0;
-        s->in_off_left[i]   = (AV_CEIL_RSHIFT(s->in.row_left,   vsub) + s->in.off_lstep)  * ileft->linesize[i]  + AV_CEIL_RSHIFT(s->in.off_left   * s->pixstep[i], hsub);
-        s->in_off_right[i]  = (AV_CEIL_RSHIFT(s->in.row_right,  vsub) + s->in.off_rstep)  * iright->linesize[i] + AV_CEIL_RSHIFT(s->in.off_right  * s->pixstep[i], hsub);
-        out_off_left[i]  = (AV_CEIL_RSHIFT(s->out.row_left,  vsub) + s->out.off_lstep) * oleft->linesize[i]  + AV_CEIL_RSHIFT(s->out.off_left  * s->pixstep[i], hsub);
-        out_off_right[i] = (AV_CEIL_RSHIFT(s->out.row_right, vsub) + s->out.off_rstep) * oright->linesize[i] + AV_CEIL_RSHIFT(s->out.off_right * s->pixstep[i], hsub);
-    }
-
-    switch (s->out.format) {
-    case ALTERNATING_LR:
-    case ALTERNATING_RL:
-        switch (s->in.format) {
-        case INTERLEAVE_ROWS_LR:
-        case INTERLEAVE_ROWS_RL:
-            for (i = 0; i < s->nb_planes; i++) {
-                oleft->linesize[i]  *= 2;
-                oright->linesize[i] *= 2;
-            }
-        case ABOVE_BELOW_LR:
-        case ABOVE_BELOW_RL:
-        case ABOVE_BELOW_2_LR:
-        case ABOVE_BELOW_2_RL:
-        case SIDE_BY_SIDE_LR:
-        case SIDE_BY_SIDE_RL:
-        case SIDE_BY_SIDE_2_LR:
-        case SIDE_BY_SIDE_2_RL:
-            oleft->width   = outlink->w;
-            oright->width  = outlink->w;
-            oleft->height  = outlink->h;
-            oright->height = outlink->h;
-
-            for (i = 0; i < s->nb_planes; i++) {
-                oleft->data[i]  += s->in_off_left[i];
-                oright->data[i] += s->in_off_right[i];
-            }
-            break;
-        default:
-            goto copy;
-            break;
-        }
-        break;
-    case HDMI:
-        for (i = 0; i < s->nb_planes; i++) {
-            int j, h = s->height >> ((i == 1 || i == 2) ? s->vsub : 0);
-            int b = (s->blanks) >> ((i == 1 || i == 2) ? s->vsub : 0);
-
-            for (j = h; j < h + b; j++)
-                memset(oleft->data[i] + j * s->linesize[i], 0, s->linesize[i]);
-        }
-    case SIDE_BY_SIDE_LR:
-    case SIDE_BY_SIDE_RL:
-    case SIDE_BY_SIDE_2_LR:
-    case SIDE_BY_SIDE_2_RL:
-    case ABOVE_BELOW_LR:
-    case ABOVE_BELOW_RL:
-    case ABOVE_BELOW_2_LR:
-    case ABOVE_BELOW_2_RL:
-    case INTERLEAVE_ROWS_LR:
-    case INTERLEAVE_ROWS_RL:
-copy:
-        if (s->in.format == INTERLEAVE_COLS_LR ||
-            s->in.format == INTERLEAVE_COLS_RL) {
-            for (i = 0; i < s->nb_planes; i++) {
-                int d = (s->in.format & 1) != (s->out.format & 1);
-
-                interleave_cols_to_any(s, out_off_left,  i, ileft,  oleft,   d);
-                interleave_cols_to_any(s, out_off_right, i, iright, oright, !d);
-            }
-        } else {
-            for (i = 0; i < s->nb_planes; i++) {
-                av_image_copy_plane(oleft->data[i] + out_off_left[i],
-                                    oleft->linesize[i] * s->out.row_step,
-                                    ileft->data[i] + s->in_off_left[i],
-                                    ileft->linesize[i] * s->in.row_step,
-                                    s->linesize[i], s->pheight[i]);
-                av_image_copy_plane(oright->data[i] + out_off_right[i],
-                                    oright->linesize[i] * s->out.row_step,
-                                    iright->data[i] + s->in_off_right[i],
-                                    iright->linesize[i] * s->in.row_step,
-                                    s->linesize[i], s->pheight[i]);
-            }
-        }
-        break;
-    case MONO_L:
-        iright = ileft;
-    case MONO_R:
-        switch (s->in.format) {
-        case INTERLEAVE_ROWS_LR:
-        case INTERLEAVE_ROWS_RL:
-            for (i = 0; i < s->nb_planes; i++) {
-                out->linesize[i] *= 2;
-            }
-        case ABOVE_BELOW_LR:
-        case ABOVE_BELOW_RL:
-        case ABOVE_BELOW_2_LR:
-        case ABOVE_BELOW_2_RL:
-        case SIDE_BY_SIDE_LR:
-        case SIDE_BY_SIDE_RL:
-        case SIDE_BY_SIDE_2_LR:
-        case SIDE_BY_SIDE_2_RL:
-            out->width  = outlink->w;
-            out->height = outlink->h;
-
-            for (i = 0; i < s->nb_planes; i++) {
-                out->data[i] += s->in_off_left[i];
-            }
-            break;
-        case INTERLEAVE_COLS_LR:
-        case INTERLEAVE_COLS_RL:
-            for (i = 0; i < s->nb_planes; i++) {
-                const int d = (s->in.format & 1) != (s->out.format & 1);
-
-                interleave_cols_to_any(s, out_off_right, i, iright, out, d);
-            }
-            break;
-        default:
-            for (i = 0; i < s->nb_planes; i++) {
-                av_image_copy_plane(out->data[i], out->linesize[i],
-                                    iright->data[i] + s->in_off_left[i],
-                                    iright->linesize[i] * s->in.row_step,
-                                    s->linesize[i], s->pheight[i]);
-            }
-            break;
-        }
-        break;
-    case ANAGLYPH_RB_GRAY:
-    case ANAGLYPH_RG_GRAY:
-    case ANAGLYPH_RC_GRAY:
-    case ANAGLYPH_RC_HALF:
-    case ANAGLYPH_RC_COLOR:
-    case ANAGLYPH_RC_DUBOIS:
-    case ANAGLYPH_GM_GRAY:
-    case ANAGLYPH_GM_HALF:
-    case ANAGLYPH_GM_COLOR:
-    case ANAGLYPH_GM_DUBOIS:
-    case ANAGLYPH_YB_GRAY:
-    case ANAGLYPH_YB_HALF:
-    case ANAGLYPH_YB_COLOR:
-    case ANAGLYPH_YB_DUBOIS: {
-        if (s->in.format == INTERLEAVE_COLS_LR ||
-            s->in.format == INTERLEAVE_COLS_RL) {
-            const int d = (s->in.format & 1);
-
-            anaglyph_ic(out->data[0],
-                ileft ->data[0] + s->in_off_left [0] +   d  * 3,
-                iright->data[0] + s->in_off_right[0] + (!d) * 3,
-                out->linesize[0],
-                ileft->linesize[0] * s->in.row_step,
-                iright->linesize[0] * s->in.row_step,
-                s->out.width, s->out.height,
-                s->ana_matrix[0], s->ana_matrix[1], s->ana_matrix[2]);
-        } else {
-            ThreadData td;
-
-            td.ileft = ileft; td.iright = iright; td.out = out;
-            ctx->internal->execute(ctx, filter_slice, &td, NULL,
-                                   FFMIN(s->out.height, ff_filter_get_nb_threads(ctx)));
-        }
-        break;
-    }
-    case CHECKERBOARD_RL:
-    case CHECKERBOARD_LR:
-        for (i = 0; i < s->nb_planes; i++) {
-            int x, y;
-
-            for (y = 0; y < s->pheight[i]; y++) {
-                uint8_t *dst = out->data[i] + out->linesize[i] * y;
-                const int d1 = (s->in.format == INTERLEAVE_COLS_LR || s->in.format == INTERLEAVE_COLS_RL) && (s->in.format & 1) != (s->out.format & 1);
-                const int d2 = (s->in.format == INTERLEAVE_COLS_LR || s->in.format == INTERLEAVE_COLS_RL) ? !d1 : 0;
-                const int m = 1 + (s->in.format == INTERLEAVE_COLS_LR || s->in.format == INTERLEAVE_COLS_RL);
-                uint8_t *left  = ileft->data[i]  + ileft->linesize[i]  * y + s->in_off_left[i]  + d1 * s->pixstep[i];
-                uint8_t *right = iright->data[i] + iright->linesize[i] * y + s->in_off_right[i] + d2 * s->pixstep[i];
-                int p, b;
-
-                if (s->out.format == CHECKERBOARD_RL && s->in.format != INTERLEAVE_COLS_LR && s->in.format != INTERLEAVE_COLS_RL)
-                    FFSWAP(uint8_t*, left, right);
-                switch (s->pixstep[i]) {
-                case 1:
-                    for (x = 0, b = 0, p = 0; x < s->linesize[i] * 2; x+=2, p++, b+=2) {
-                        dst[x  ] = (b&1) == (y&1) ? left[p*m] : right[p*m];
-                        dst[x+1] = (b&1) != (y&1) ? left[p*m] : right[p*m];
-                    }
-                    break;
-                case 2:
-                    for (x = 0, b = 0, p = 0; x < s->linesize[i] * 2; x+=4, p+=2, b+=2) {
-                        AV_WN16(&dst[x  ], (b&1) == (y&1) ? AV_RN16(&left[p*m]) : AV_RN16(&right[p*m]));
-                        AV_WN16(&dst[x+2], (b&1) != (y&1) ? AV_RN16(&left[p*m]) : AV_RN16(&right[p*m]));
-                    }
-                    break;
-                case 3:
-                    for (x = 0, b = 0, p = 0; x < s->linesize[i] * 2; x+=6, p+=3, b+=2) {
-                        AV_WB24(&dst[x  ], (b&1) == (y&1) ? AV_RB24(&left[p*m]) : AV_RB24(&right[p*m]));
-                        AV_WB24(&dst[x+3], (b&1) != (y&1) ? AV_RB24(&left[p*m]) : AV_RB24(&right[p*m]));
-                    }
-                    break;
-                case 4:
-                    for (x = 0, b = 0, p = 0; x < s->linesize[i] * 2; x+=8, p+=4, b+=2) {
-                        AV_WN32(&dst[x  ], (b&1) == (y&1) ? AV_RN32(&left[p*m]) : AV_RN32(&right[p*m]));
-                        AV_WN32(&dst[x+4], (b&1) != (y&1) ? AV_RN32(&left[p*m]) : AV_RN32(&right[p*m]));
-                    }
-                    break;
-                case 6:
-                    for (x = 0, b = 0, p = 0; x < s->linesize[i] * 2; x+=12, p+=6, b+=2) {
-                        AV_WB48(&dst[x  ], (b&1) == (y&1) ? AV_RB48(&left[p*m]) : AV_RB48(&right[p*m]));
-                        AV_WB48(&dst[x+6], (b&1) != (y&1) ? AV_RB48(&left[p*m]) : AV_RB48(&right[p*m]));
-                    }
-                    break;
-                case 8:
-                    for (x = 0, b = 0, p = 0; x < s->linesize[i] * 2; x+=16, p+=8, b+=2) {
-                        AV_WN64(&dst[x  ], (b&1) == (y&1) ? AV_RN64(&left[p*m]) : AV_RN64(&right[p*m]));
-                        AV_WN64(&dst[x+8], (b&1) != (y&1) ? AV_RN64(&left[p*m]) : AV_RN64(&right[p*m]));
-                    }
-                    break;
-                }
-            }
-        }
-        break;
-    case INTERLEAVE_COLS_LR:
-    case INTERLEAVE_COLS_RL:
-        for (i = 0; i < s->nb_planes; i++) {
-            const int d = (s->in.format == INTERLEAVE_COLS_LR || s->in.format == INTERLEAVE_COLS_RL);
-            const int m = 1 + d;
-            int x, y;
-
-            for (y = 0; y < s->pheight[i]; y++) {
-                uint8_t *dst = out->data[i] + out->linesize[i] * y;
-                uint8_t *left = ileft->data[i] + ileft->linesize[i] * y * s->in.row_step + s->in_off_left[i] + d * s->pixstep[i];
-                uint8_t *right = iright->data[i] + iright->linesize[i] * y * s->in.row_step + s->in_off_right[i];
-                int p, b;
-
-                if (s->out.format == INTERLEAVE_COLS_LR)
-                    FFSWAP(uint8_t*, left, right);
-
-                switch (s->pixstep[i]) {
-                case 1:
-                    for (x = 0, b = 0, p = 0; x < s->linesize[i] * 2; x+=2, p++, b+=2) {
-                        dst[x  ] =   b&1  ? left[p*m] : right[p*m];
-                        dst[x+1] = !(b&1) ? left[p*m] : right[p*m];
-                    }
-                    break;
-                case 2:
-                    for (x = 0, b = 0, p = 0; x < s->linesize[i] * 2; x+=4, p+=2, b+=2) {
-                        AV_WN16(&dst[x  ],   b&1  ? AV_RN16(&left[p*m]) : AV_RN16(&right[p*m]));
-                        AV_WN16(&dst[x+2], !(b&1) ? AV_RN16(&left[p*m]) : AV_RN16(&right[p*m]));
-                    }
-                    break;
-                case 3:
-                    for (x = 0, b = 0, p = 0; x < s->linesize[i] * 2; x+=6, p+=3, b+=2) {
-                        AV_WB24(&dst[x  ],   b&1  ? AV_RB24(&left[p*m]) : AV_RB24(&right[p*m]));
-                        AV_WB24(&dst[x+3], !(b&1) ? AV_RB24(&left[p*m]) : AV_RB24(&right[p*m]));
-                    }
-                    break;
-                case 4:
-                    for (x = 0, b = 0, p = 0; x < s->linesize[i] * 2; x+=8, p+=4, b+=2) {
-                        AV_WN32(&dst[x  ],   b&1  ? AV_RN32(&left[p*m]) : AV_RN32(&right[p*m]));
-                        AV_WN32(&dst[x+4], !(b&1) ? AV_RN32(&left[p*m]) : AV_RN32(&right[p*m]));
-                    }
-                    break;
-                case 6:
-                    for (x = 0, b = 0, p = 0; x < s->linesize[i] * 2; x+=12, p+=6, b+=2) {
-                        AV_WB48(&dst[x  ],   b&1  ? AV_RB48(&left[p*m]) : AV_RB48(&right[p*m]));
-                        AV_WB48(&dst[x+6], !(b&1) ? AV_RB48(&left[p*m]) : AV_RB48(&right[p*m]));
-                    }
-                    break;
-                case 8:
-                    for (x = 0, b = 0, p = 0; x < s->linesize[i] * 2; x+=16, p+=8, b+=2) {
-                        AV_WN64(&dst[x  ],   b&1 ?  AV_RN64(&left[p*m]) : AV_RN64(&right[p*m]));
-                        AV_WN64(&dst[x+8], !(b&1) ? AV_RN64(&left[p*m]) : AV_RN64(&right[p*m]));
-                    }
-                    break;
-                }
-            }
-        }
-        break;
-    default:
-        av_assert0(0);
-    }
-
-    if (oright != oleft) {
-        if (s->out.format == ALTERNATING_LR)
-            FFSWAP(AVFrame *, oleft, oright);
-        oright->pts = s->prev->pts * 2;
-        ff_filter_frame(outlink, oright);
-        out = oleft;
-        oleft->pts = s->prev->pts + inpicref->pts;
-        av_frame_free(&s->prev);
-        s->prev = inpicref;
-    } else if (s->in.format == ALTERNATING_LR ||
-               s->in.format == ALTERNATING_RL) {
-        out->pts = s->prev->pts / 2;
-        av_frame_free(&s->prev);
-        av_frame_free(&inpicref);
-    } else {
-        av_frame_free(&s->prev);
-        av_frame_free(&inpicref);
-    }
-    av_assert0(out);
-    out->sample_aspect_ratio = s->aspect;
-    return ff_filter_frame(outlink, out);
-}
-
-static av_cold void uninit(AVFilterContext *ctx)
-{
-    Stereo3DContext *s = ctx->priv;
-
-    av_frame_free(&s->prev);
-}
-
-static const AVFilterPad stereo3d_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .filter_frame = filter_frame,
-    },
-    { NULL }
-};
-
-static const AVFilterPad stereo3d_outputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .config_props = config_output,
-    },
-    { NULL }
-};
-
-AVFilter ff_vf_stereo3d = {
-    .name          = "stereo3d",
-    .description   = NULL_IF_CONFIG_SMALL("Convert video stereoscopic 3D view."),
-    .priv_size     = sizeof(Stereo3DContext),
-    .uninit        = uninit,
-    .query_formats = query_formats,
-    .inputs        = stereo3d_inputs,
-    .outputs       = stereo3d_outputs,
-    .priv_class    = &stereo3d_class,
-    .flags         = AVFILTER_FLAG_SLICE_THREADS,
-};
diff --git a/libavfilter/vf_super2xsai.c b/libavfilter/vf_super2xsai.c
deleted file mode 100644
index 87eec04..0000000
--- a/libavfilter/vf_super2xsai.c
+++ /dev/null
@@ -1,354 +0,0 @@
-/*
- * Copyright (c) 2010 Niel van der Westhuizen <nielkie@gmail.com>
- * Copyright (c) 2002 A'rpi
- * Copyright (c) 1997-2001 ZSNES Team ( zsknight@zsnes.com / _demo_@zsnes.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
- * Super 2xSaI video filter
- * Ported from MPlayer libmpcodecs/vf_2xsai.c.
- */
-
-#include "libavutil/pixdesc.h"
-#include "libavutil/intreadwrite.h"
-#include "avfilter.h"
-#include "formats.h"
-#include "internal.h"
-#include "video.h"
-
-typedef struct Super2xSaIContext {
-    /* masks used for two pixels interpolation */
-    uint32_t hi_pixel_mask;
-    uint32_t lo_pixel_mask;
-
-    /* masks used for four pixels interpolation */
-    uint32_t q_hi_pixel_mask;
-    uint32_t q_lo_pixel_mask;
-
-    int bpp; ///< bytes per pixel, pixel stride for each (packed) pixel
-    int is_be;
-} Super2xSaIContext;
-
-#define GET_RESULT(A, B, C, D) ((A != C || A != D) - (B != C || B != D))
-
-#define INTERPOLATE(A, B) (((A & hi_pixel_mask) >> 1) + ((B & hi_pixel_mask) >> 1) + (A & B & lo_pixel_mask))
-
-#define Q_INTERPOLATE(A, B, C, D) ((A & q_hi_pixel_mask) >> 2) + ((B & q_hi_pixel_mask) >> 2) + ((C & q_hi_pixel_mask) >> 2) + ((D & q_hi_pixel_mask) >> 2) \
-    + ((((A & q_lo_pixel_mask) + (B & q_lo_pixel_mask) + (C & q_lo_pixel_mask) + (D & q_lo_pixel_mask)) >> 2) & q_lo_pixel_mask)
-
-static void super2xsai(AVFilterContext *ctx,
-                       uint8_t *src, int src_linesize,
-                       uint8_t *dst, int dst_linesize,
-                       int width, int height)
-{
-    Super2xSaIContext *s = ctx->priv;
-    unsigned int x, y;
-    uint32_t color[4][4];
-    unsigned char *src_line[4];
-    const int bpp = s->bpp;
-    const uint32_t hi_pixel_mask = s->hi_pixel_mask;
-    const uint32_t lo_pixel_mask = s->lo_pixel_mask;
-    const uint32_t q_hi_pixel_mask = s->q_hi_pixel_mask;
-    const uint32_t q_lo_pixel_mask = s->q_lo_pixel_mask;
-
-    /* Point to the first 4 lines, first line is duplicated */
-    src_line[0] = src;
-    src_line[1] = src;
-    src_line[2] = src + src_linesize*FFMIN(1, height-1);
-    src_line[3] = src + src_linesize*FFMIN(2, height-1);
-
-#define READ_COLOR4(dst, src_line, off) dst = *((const uint32_t *)src_line + off)
-#define READ_COLOR3(dst, src_line, off) dst = AV_RL24 (src_line + 3*off)
-#define READ_COLOR2(dst, src_line, off) dst = s->is_be ? AV_RB16(src_line + 2 * off) : AV_RL16(src_line + 2 * off)
-
-    for (y = 0; y < height; y++) {
-        uint8_t *dst_line[2];
-
-        dst_line[0] = dst + dst_linesize*2*y;
-        dst_line[1] = dst + dst_linesize*(2*y+1);
-
-        switch (bpp) {
-        case 4:
-            READ_COLOR4(color[0][0], src_line[0], 0); color[0][1] = color[0][0]; READ_COLOR4(color[0][2], src_line[0], 1); READ_COLOR4(color[0][3], src_line[0], 2);
-            READ_COLOR4(color[1][0], src_line[1], 0); color[1][1] = color[1][0]; READ_COLOR4(color[1][2], src_line[1], 1); READ_COLOR4(color[1][3], src_line[1], 2);
-            READ_COLOR4(color[2][0], src_line[2], 0); color[2][1] = color[2][0]; READ_COLOR4(color[2][2], src_line[2], 1); READ_COLOR4(color[2][3], src_line[2], 2);
-            READ_COLOR4(color[3][0], src_line[3], 0); color[3][1] = color[3][0]; READ_COLOR4(color[3][2], src_line[3], 1); READ_COLOR4(color[3][3], src_line[3], 2);
-            break;
-        case 3:
-            READ_COLOR3(color[0][0], src_line[0], 0); color[0][1] = color[0][0]; READ_COLOR3(color[0][2], src_line[0], 1); READ_COLOR3(color[0][3], src_line[0], 2);
-            READ_COLOR3(color[1][0], src_line[1], 0); color[1][1] = color[1][0]; READ_COLOR3(color[1][2], src_line[1], 1); READ_COLOR3(color[1][3], src_line[1], 2);
-            READ_COLOR3(color[2][0], src_line[2], 0); color[2][1] = color[2][0]; READ_COLOR3(color[2][2], src_line[2], 1); READ_COLOR3(color[2][3], src_line[2], 2);
-            READ_COLOR3(color[3][0], src_line[3], 0); color[3][1] = color[3][0]; READ_COLOR3(color[3][2], src_line[3], 1); READ_COLOR3(color[3][3], src_line[3], 2);
-            break;
-        default:
-            READ_COLOR2(color[0][0], src_line[0], 0); color[0][1] = color[0][0]; READ_COLOR2(color[0][2], src_line[0], 1); READ_COLOR2(color[0][3], src_line[0], 2);
-            READ_COLOR2(color[1][0], src_line[1], 0); color[1][1] = color[1][0]; READ_COLOR2(color[1][2], src_line[1], 1); READ_COLOR2(color[1][3], src_line[1], 2);
-            READ_COLOR2(color[2][0], src_line[2], 0); color[2][1] = color[2][0]; READ_COLOR2(color[2][2], src_line[2], 1); READ_COLOR2(color[2][3], src_line[2], 2);
-            READ_COLOR2(color[3][0], src_line[3], 0); color[3][1] = color[3][0]; READ_COLOR2(color[3][2], src_line[3], 1); READ_COLOR2(color[3][3], src_line[3], 2);
-        }
-
-        for (x = 0; x < width; x++) {
-            uint32_t product1a, product1b, product2a, product2b;
-
-//---------------------------------------  B0 B1 B2 B3    0  1  2  3
-//                                         4  5* 6  S2 -> 4  5* 6  7
-//                                         1  2  3  S1    8  9 10 11
-//                                         A0 A1 A2 A3   12 13 14 15
-//--------------------------------------
-            if (color[2][1] == color[1][2] && color[1][1] != color[2][2]) {
-                product2b = color[2][1];
-                product1b = product2b;
-            } else if (color[1][1] == color[2][2] && color[2][1] != color[1][2]) {
-                product2b = color[1][1];
-                product1b = product2b;
-            } else if (color[1][1] == color[2][2] && color[2][1] == color[1][2]) {
-                int r = 0;
-
-                r += GET_RESULT(color[1][2], color[1][1], color[1][0], color[3][1]);
-                r += GET_RESULT(color[1][2], color[1][1], color[2][0], color[0][1]);
-                r += GET_RESULT(color[1][2], color[1][1], color[3][2], color[2][3]);
-                r += GET_RESULT(color[1][2], color[1][1], color[0][2], color[1][3]);
-
-                if (r > 0)
-                    product1b = color[1][2];
-                else if (r < 0)
-                    product1b = color[1][1];
-                else
-                    product1b = INTERPOLATE(color[1][1], color[1][2]);
-
-                product2b = product1b;
-            } else {
-                if (color[1][2] == color[2][2] && color[2][2] == color[3][1] && color[2][1] != color[3][2] && color[2][2] != color[3][0])
-                    product2b = Q_INTERPOLATE(color[2][2], color[2][2], color[2][2], color[2][1]);
-                else if (color[1][1] == color[2][1] && color[2][1] == color[3][2] && color[3][1] != color[2][2] && color[2][1] != color[3][3])
-                    product2b = Q_INTERPOLATE(color[2][1], color[2][1], color[2][1], color[2][2]);
-                else
-                    product2b = INTERPOLATE(color[2][1], color[2][2]);
-
-                if (color[1][2] == color[2][2] && color[1][2] == color[0][1] && color[1][1] != color[0][2] && color[1][2] != color[0][0])
-                    product1b = Q_INTERPOLATE(color[1][2], color[1][2], color[1][2], color[1][1]);
-                else if (color[1][1] == color[2][1] && color[1][1] == color[0][2] && color[0][1] != color[1][2] && color[1][1] != color[0][3])
-                    product1b = Q_INTERPOLATE(color[1][2], color[1][1], color[1][1], color[1][1]);
-                else
-                    product1b = INTERPOLATE(color[1][1], color[1][2]);
-            }
-
-            if (color[1][1] == color[2][2] && color[2][1] != color[1][2] && color[1][0] == color[1][1] && color[1][1] != color[3][2])
-                product2a = INTERPOLATE(color[2][1], color[1][1]);
-            else if (color[1][1] == color[2][0] && color[1][2] == color[1][1] && color[1][0] != color[2][1] && color[1][1] != color[3][0])
-                product2a = INTERPOLATE(color[2][1], color[1][1]);
-            else
-                product2a = color[2][1];
-
-            if (color[2][1] == color[1][2] && color[1][1] != color[2][2] && color[2][0] == color[2][1] && color[2][1] != color[0][2])
-                product1a = INTERPOLATE(color[2][1], color[1][1]);
-            else if (color[1][0] == color[2][1] && color[2][2] == color[2][1] && color[2][0] != color[1][1] && color[2][1] != color[0][0])
-                product1a = INTERPOLATE(color[2][1], color[1][1]);
-            else
-                product1a = color[1][1];
-
-            /* Set the calculated pixels */
-            switch (bpp) {
-            case 4:
-                AV_WN32A(dst_line[0] + x * 8,     product1a);
-                AV_WN32A(dst_line[0] + x * 8 + 4, product1b);
-                AV_WN32A(dst_line[1] + x * 8,     product2a);
-                AV_WN32A(dst_line[1] + x * 8 + 4, product2b);
-                break;
-            case 3:
-                AV_WL24(dst_line[0] + x * 6,     product1a);
-                AV_WL24(dst_line[0] + x * 6 + 3, product1b);
-                AV_WL24(dst_line[1] + x * 6,     product2a);
-                AV_WL24(dst_line[1] + x * 6 + 3, product2b);
-                break;
-            default: // bpp = 2
-                if (s->is_be) {
-                    AV_WB32(dst_line[0] + x * 4, product1a | (product1b << 16));
-                    AV_WB32(dst_line[1] + x * 4, product2a | (product2b << 16));
-                } else {
-                    AV_WL32(dst_line[0] + x * 4, product1a | (product1b << 16));
-                    AV_WL32(dst_line[1] + x * 4, product2a | (product2b << 16));
-                }
-            }
-
-            /* Move color matrix forward */
-            color[0][0] = color[0][1]; color[0][1] = color[0][2]; color[0][2] = color[0][3];
-            color[1][0] = color[1][1]; color[1][1] = color[1][2]; color[1][2] = color[1][3];
-            color[2][0] = color[2][1]; color[2][1] = color[2][2]; color[2][2] = color[2][3];
-            color[3][0] = color[3][1]; color[3][1] = color[3][2]; color[3][2] = color[3][3];
-
-            if (x < width - 3) {
-                x += 3;
-                switch (bpp) {
-                case 4:
-                    READ_COLOR4(color[0][3], src_line[0], x);
-                    READ_COLOR4(color[1][3], src_line[1], x);
-                    READ_COLOR4(color[2][3], src_line[2], x);
-                    READ_COLOR4(color[3][3], src_line[3], x);
-                    break;
-                case 3:
-                    READ_COLOR3(color[0][3], src_line[0], x);
-                    READ_COLOR3(color[1][3], src_line[1], x);
-                    READ_COLOR3(color[2][3], src_line[2], x);
-                    READ_COLOR3(color[3][3], src_line[3], x);
-                    break;
-                default:        /* case 2 */
-                    READ_COLOR2(color[0][3], src_line[0], x);
-                    READ_COLOR2(color[1][3], src_line[1], x);
-                    READ_COLOR2(color[2][3], src_line[2], x);
-                    READ_COLOR2(color[3][3], src_line[3], x);
-                }
-                x -= 3;
-            }
-        }
-
-        /* We're done with one line, so we shift the source lines up */
-        src_line[0] = src_line[1];
-        src_line[1] = src_line[2];
-        src_line[2] = src_line[3];
-
-        /* Read next line */
-        src_line[3] = src_line[2];
-        if (y < height - 3)
-            src_line[3] += src_linesize;
-    } // y loop
-}
-
-static int query_formats(AVFilterContext *ctx)
-{
-    static const enum AVPixelFormat pix_fmts[] = {
-        AV_PIX_FMT_RGBA, AV_PIX_FMT_BGRA, AV_PIX_FMT_ARGB, AV_PIX_FMT_ABGR,
-        AV_PIX_FMT_RGB24, AV_PIX_FMT_BGR24,
-        AV_PIX_FMT_RGB565BE, AV_PIX_FMT_BGR565BE, AV_PIX_FMT_RGB555BE, AV_PIX_FMT_BGR555BE,
-        AV_PIX_FMT_RGB565LE, AV_PIX_FMT_BGR565LE, AV_PIX_FMT_RGB555LE, AV_PIX_FMT_BGR555LE,
-        AV_PIX_FMT_NONE
-    };
-
-    AVFilterFormats *fmts_list = ff_make_format_list(pix_fmts);
-    if (!fmts_list)
-        return AVERROR(ENOMEM);
-    return ff_set_common_formats(ctx, fmts_list);
-}
-
-static int config_input(AVFilterLink *inlink)
-{
-    Super2xSaIContext *s = inlink->dst->priv;
-
-    s->hi_pixel_mask   = 0xFEFEFEFE;
-    s->lo_pixel_mask   = 0x01010101;
-    s->q_hi_pixel_mask = 0xFCFCFCFC;
-    s->q_lo_pixel_mask = 0x03030303;
-    s->bpp  = 4;
-
-    switch (inlink->format) {
-    case AV_PIX_FMT_RGB24:
-    case AV_PIX_FMT_BGR24:
-        s->bpp = 3;
-        break;
-
-    case AV_PIX_FMT_RGB565BE:
-    case AV_PIX_FMT_BGR565BE:
-        s->is_be = 1;
-    case AV_PIX_FMT_RGB565LE:
-    case AV_PIX_FMT_BGR565LE:
-        s->hi_pixel_mask   = 0xF7DEF7DE;
-        s->lo_pixel_mask   = 0x08210821;
-        s->q_hi_pixel_mask = 0xE79CE79C;
-        s->q_lo_pixel_mask = 0x18631863;
-        s->bpp = 2;
-        break;
-
-    case AV_PIX_FMT_BGR555BE:
-    case AV_PIX_FMT_RGB555BE:
-        s->is_be = 1;
-    case AV_PIX_FMT_BGR555LE:
-    case AV_PIX_FMT_RGB555LE:
-        s->hi_pixel_mask   = 0x7BDE7BDE;
-        s->lo_pixel_mask   = 0x04210421;
-        s->q_hi_pixel_mask = 0x739C739C;
-        s->q_lo_pixel_mask = 0x0C630C63;
-        s->bpp = 2;
-        break;
-    }
-
-    return 0;
-}
-
-static int config_output(AVFilterLink *outlink)
-{
-    AVFilterLink *inlink = outlink->src->inputs[0];
-
-    outlink->w = inlink->w*2;
-    outlink->h = inlink->h*2;
-
-    av_log(inlink->dst, AV_LOG_VERBOSE, "fmt:%s size:%dx%d -> size:%dx%d\n",
-           av_get_pix_fmt_name(inlink->format),
-           inlink->w, inlink->h, outlink->w, outlink->h);
-
-    return 0;
-}
-
-static int filter_frame(AVFilterLink *inlink, AVFrame *inpicref)
-{
-    AVFilterLink *outlink = inlink->dst->outputs[0];
-    AVFrame *outpicref = ff_get_video_buffer(outlink, outlink->w, outlink->h);
-    if (!outpicref) {
-        av_frame_free(&inpicref);
-        return AVERROR(ENOMEM);
-    }
-    av_frame_copy_props(outpicref, inpicref);
-    outpicref->width  = outlink->w;
-    outpicref->height = outlink->h;
-
-    super2xsai(inlink->dst, inpicref->data[0], inpicref->linesize[0],
-               outpicref->data[0], outpicref->linesize[0],
-               inlink->w, inlink->h);
-
-    av_frame_free(&inpicref);
-    return ff_filter_frame(outlink, outpicref);
-}
-
-static const AVFilterPad super2xsai_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .config_props = config_input,
-        .filter_frame = filter_frame,
-    },
-    { NULL }
-};
-
-static const AVFilterPad super2xsai_outputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .config_props = config_output,
-    },
-    { NULL }
-};
-
-AVFilter ff_vf_super2xsai = {
-    .name          = "super2xsai",
-    .description   = NULL_IF_CONFIG_SMALL("Scale the input by 2x using the Super2xSaI pixel art algorithm."),
-    .priv_size     = sizeof(Super2xSaIContext),
-    .query_formats = query_formats,
-    .inputs        = super2xsai_inputs,
-    .outputs       = super2xsai_outputs,
-};
diff --git a/libavfilter/vf_tinterlace.c b/libavfilter/vf_tinterlace.c
deleted file mode 100644
index a777537..0000000
--- a/libavfilter/vf_tinterlace.c
+++ /dev/null
@@ -1,581 +0,0 @@
-/*
- * Copyright (c) 2017 Thomas Mundt <tmundt75@gmail.com>
- * Copyright (c) 2011 Stefano Sabatini
- * Copyright (c) 2010 Baptiste Coudurier
- * Copyright (c) 2003 Michael Zucchi <notzed@ximian.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
- * temporal field interlace filter, ported from MPlayer/libmpcodecs
- */
-
-#include "libavutil/opt.h"
-#include "libavutil/imgutils.h"
-#include "libavutil/avassert.h"
-#include "avfilter.h"
-#include "internal.h"
-#include "tinterlace.h"
-
-#define OFFSET(x) offsetof(TInterlaceContext, x)
-#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
-
-static const AVOption tinterlace_options[] = {
-    {"mode",              "select interlace mode", OFFSET(mode), AV_OPT_TYPE_INT, {.i64=MODE_MERGE}, 0, MODE_NB-1, FLAGS, "mode"},
-    {"merge",             "merge fields",                                 0, AV_OPT_TYPE_CONST, {.i64=MODE_MERGE},             INT_MIN, INT_MAX, FLAGS, "mode"},
-    {"drop_even",         "drop even fields",                             0, AV_OPT_TYPE_CONST, {.i64=MODE_DROP_EVEN},         INT_MIN, INT_MAX, FLAGS, "mode"},
-    {"drop_odd",          "drop odd fields",                              0, AV_OPT_TYPE_CONST, {.i64=MODE_DROP_ODD},          INT_MIN, INT_MAX, FLAGS, "mode"},
-    {"pad",               "pad alternate lines with black",               0, AV_OPT_TYPE_CONST, {.i64=MODE_PAD},               INT_MIN, INT_MAX, FLAGS, "mode"},
-    {"interleave_top",    "interleave top and bottom fields",             0, AV_OPT_TYPE_CONST, {.i64=MODE_INTERLEAVE_TOP},    INT_MIN, INT_MAX, FLAGS, "mode"},
-    {"interleave_bottom", "interleave bottom and top fields",             0, AV_OPT_TYPE_CONST, {.i64=MODE_INTERLEAVE_BOTTOM}, INT_MIN, INT_MAX, FLAGS, "mode"},
-    {"interlacex2",       "interlace fields from two consecutive frames", 0, AV_OPT_TYPE_CONST, {.i64=MODE_INTERLACEX2},       INT_MIN, INT_MAX, FLAGS, "mode"},
-    {"mergex2",           "merge fields keeping same frame rate",         0, AV_OPT_TYPE_CONST, {.i64=MODE_MERGEX2},           INT_MIN, INT_MAX, FLAGS, "mode"},
-
-    {"flags",             "set flags", OFFSET(flags), AV_OPT_TYPE_FLAGS, {.i64 = 0}, 0, INT_MAX, 0, "flags" },
-    {"low_pass_filter",   "enable vertical low-pass filter",              0, AV_OPT_TYPE_CONST, {.i64 = TINTERLACE_FLAG_VLPF}, INT_MIN, INT_MAX, FLAGS, "flags" },
-    {"vlpf",              "enable vertical low-pass filter",              0, AV_OPT_TYPE_CONST, {.i64 = TINTERLACE_FLAG_VLPF}, INT_MIN, INT_MAX, FLAGS, "flags" },
-    {"complex_filter",    "enable complex vertical low-pass filter",      0, AV_OPT_TYPE_CONST, {.i64 = TINTERLACE_FLAG_CVLPF},INT_MIN, INT_MAX, FLAGS, "flags" },
-    {"cvlpf",             "enable complex vertical low-pass filter",      0, AV_OPT_TYPE_CONST, {.i64 = TINTERLACE_FLAG_CVLPF},INT_MIN, INT_MAX, FLAGS, "flags" },
-    {"exact_tb",          "force a timebase which can represent timestamps exactly", 0, AV_OPT_TYPE_CONST, {.i64 = TINTERLACE_FLAG_EXACT_TB}, INT_MIN, INT_MAX, FLAGS, "flags" },
-    {"bypass_il",         "bypass already interlaced frames",             0, AV_OPT_TYPE_CONST, {.i64 = TINTERLACE_FLAG_BYPASS_IL}, INT_MIN, INT_MAX, FLAGS, "flags" },
-
-    {NULL}
-};
-
-AVFILTER_DEFINE_CLASS(tinterlace);
-
-static const AVOption interlace_options[] = {
-   { "scan",              "scanning mode", OFFSET(mode), AV_OPT_TYPE_INT, {.i64 = MODE_TFF}, 0, 1, FLAGS, "mode"},
-   { "tff",               "top field first",                              0, AV_OPT_TYPE_CONST, {.i64 = MODE_TFF}, INT_MIN, INT_MAX, FLAGS, .unit = "mode"},
-   { "bff",               "bottom field first",                           0, AV_OPT_TYPE_CONST, {.i64 = MODE_BFF}, INT_MIN, INT_MAX, FLAGS, .unit = "mode"},
-   { "lowpass",           "set vertical low-pass filter", OFFSET(lowpass), AV_OPT_TYPE_INT,   {.i64 = VLPF_LIN}, 0, 2, FLAGS, "lowpass" },
-   {     "off",           "disable vertical low-pass filter",             0, AV_OPT_TYPE_CONST, {.i64 = VLPF_OFF}, INT_MIN, INT_MAX, FLAGS, "lowpass" },
-   {     "linear",        "linear vertical low-pass filter",              0, AV_OPT_TYPE_CONST, {.i64 = VLPF_LIN}, INT_MIN, INT_MAX, FLAGS, "lowpass" },
-   {     "complex",       "complex vertical low-pass filter",             0, AV_OPT_TYPE_CONST, {.i64 = VLPF_CMP}, INT_MIN, INT_MAX, FLAGS, "lowpass" },
-
-   { NULL }
-};
-
-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},
-    {1001, 30000},
-};
-
-static int query_formats(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_YUV420P10LE, AV_PIX_FMT_YUV422P10LE,
-        AV_PIX_FMT_YUV440P10LE, AV_PIX_FMT_YUV444P10LE,
-        AV_PIX_FMT_YUV420P12LE, AV_PIX_FMT_YUV422P12LE,
-        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_NONE
-    };
-
-    AVFilterFormats *fmts_list = ff_make_format_list(pix_fmts);
-    if (!fmts_list)
-        return AVERROR(ENOMEM);
-    return ff_set_common_formats(ctx, fmts_list);
-}
-
-static void lowpass_line_c(uint8_t *dstp, ptrdiff_t width, const uint8_t *srcp,
-                           ptrdiff_t mref, ptrdiff_t pref, int clip_max)
-{
-    const uint8_t *srcp_above = srcp + mref;
-    const uint8_t *srcp_below = srcp + pref;
-    int i;
-    for (i = 0; i < width; i++) {
-        // this calculation is an integer representation of
-        // '0.5 * current + 0.25 * above + 0.25 * below'
-        // '1 +' is for rounding.
-        dstp[i] = (1 + srcp[i] + srcp[i] + srcp_above[i] + srcp_below[i]) >> 2;
-    }
-}
-
-static void lowpass_line_c_16(uint8_t *dst8, ptrdiff_t width, const uint8_t *src8,
-                              ptrdiff_t mref, ptrdiff_t pref, int clip_max)
-{
-    uint16_t *dstp = (uint16_t *)dst8;
-    const uint16_t *srcp = (const uint16_t *)src8;
-    const uint16_t *srcp_above = srcp + mref / 2;
-    const uint16_t *srcp_below = srcp + pref / 2;
-    int i, src_x;
-    for (i = 0; i < width; i++) {
-        // this calculation is an integer representation of
-        // '0.5 * current + 0.25 * above + 0.25 * below'
-        // '1 +' is for rounding.
-        src_x   = av_le2ne16(srcp[i]) << 1;
-        dstp[i] = av_le2ne16((1 + src_x + av_le2ne16(srcp_above[i])
-                             + av_le2ne16(srcp_below[i])) >> 2);
-    }
-}
-
-static void lowpass_line_complex_c(uint8_t *dstp, ptrdiff_t width, const uint8_t *srcp,
-                                   ptrdiff_t mref, ptrdiff_t pref, int clip_max)
-{
-    const uint8_t *srcp_above = srcp + mref;
-    const uint8_t *srcp_below = srcp + pref;
-    const uint8_t *srcp_above2 = srcp + mref * 2;
-    const uint8_t *srcp_below2 = srcp + pref * 2;
-    int i, src_x, src_ab;
-    for (i = 0; i < width; i++) {
-        // this calculation is an integer representation of
-        // '0.75 * current + 0.25 * above + 0.25 * below - 0.125 * above2 - 0.125 * below2'
-        // '4 +' is for rounding.
-        src_x   = srcp[i] << 1;
-        src_ab  = srcp_above[i] + srcp_below[i];
-        dstp[i] = av_clip_uint8((4 + ((srcp[i] + src_x + src_ab) << 1)
-                                - srcp_above2[i] - srcp_below2[i]) >> 3);
-        // Prevent over-sharpening:
-        // dst must not exceed src when the average of above and below
-        // is less than src. And the other way around.
-        if (src_ab > src_x) {
-            if (dstp[i] < srcp[i])
-                dstp[i] = srcp[i];
-        } else if (dstp[i] > srcp[i])
-            dstp[i] = srcp[i];
-    }
-}
-
-static void lowpass_line_complex_c_16(uint8_t *dst8, ptrdiff_t width, const uint8_t *src8,
-                                      ptrdiff_t mref, ptrdiff_t pref, int clip_max)
-{
-    uint16_t *dstp = (uint16_t *)dst8;
-    const uint16_t *srcp = (const uint16_t *)src8;
-    const uint16_t *srcp_above = srcp + mref / 2;
-    const uint16_t *srcp_below = srcp + pref / 2;
-    const uint16_t *srcp_above2 = srcp + mref;
-    const uint16_t *srcp_below2 = srcp + pref;
-    int i, dst_le, src_le, src_x, src_ab;
-    for (i = 0; i < width; i++) {
-        // this calculation is an integer representation of
-        // '0.75 * current + 0.25 * above + 0.25 * below - 0.125 * above2 - 0.125 * below2'
-        // '4 +' is for rounding.
-        src_le = av_le2ne16(srcp[i]);
-        src_x  = src_le << 1;
-        src_ab = av_le2ne16(srcp_above[i]) + av_le2ne16(srcp_below[i]);
-        dst_le = av_clip((4 + ((src_le + src_x + src_ab) << 1)
-                         - av_le2ne16(srcp_above2[i])
-                         - av_le2ne16(srcp_below2[i])) >> 3, 0, clip_max);
-        // Prevent over-sharpening:
-        // dst must not exceed src when the average of above and below
-        // is less than src. And the other way around.
-        if (src_ab > src_x) {
-            if (dst_le < src_le)
-                dstp[i] = av_le2ne16(src_le);
-            else
-                dstp[i] = av_le2ne16(dst_le);
-        } else if (dst_le > src_le) {
-            dstp[i] = av_le2ne16(src_le);
-        } else
-            dstp[i] = av_le2ne16(dst_le);
-    }
-}
-
-static av_cold void uninit(AVFilterContext *ctx)
-{
-    TInterlaceContext *tinterlace = ctx->priv;
-
-    av_frame_free(&tinterlace->cur );
-    av_frame_free(&tinterlace->next);
-    av_freep(&tinterlace->black_data[0]);
-}
-
-static int config_out_props(AVFilterLink *outlink)
-{
-    AVFilterContext *ctx = outlink->src;
-    AVFilterLink *inlink = outlink->src->inputs[0];
-    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(outlink->format);
-    TInterlaceContext *tinterlace = ctx->priv;
-    int i;
-
-    tinterlace->vsub = desc->log2_chroma_h;
-    outlink->w = inlink->w;
-    outlink->h = tinterlace->mode == MODE_MERGE || tinterlace->mode == MODE_PAD || tinterlace->mode == MODE_MERGEX2?
-        inlink->h*2 : inlink->h;
-    if (tinterlace->mode == MODE_MERGE || tinterlace->mode == MODE_PAD || tinterlace->mode == MODE_MERGEX2)
-        outlink->sample_aspect_ratio = av_mul_q(inlink->sample_aspect_ratio,
-                                                av_make_q(2, 1));
-
-    if (tinterlace->mode == MODE_PAD) {
-        uint8_t black[4] = { 0, 0, 0, 16 };
-        int ret;
-        ff_draw_init(&tinterlace->draw, outlink->format, 0);
-        ff_draw_color(&tinterlace->draw, &tinterlace->color, black);
-        if (ff_fmt_is_in(outlink->format, full_scale_yuvj_pix_fmts))
-            tinterlace->color.comp[0].u8[0] = 0;
-        ret = av_image_alloc(tinterlace->black_data, 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,
-                          tinterlace->black_linesize, 0, 0, outlink->w, outlink->h);
-    }
-    if (tinterlace->flags & (TINTERLACE_FLAG_VLPF | TINTERLACE_FLAG_CVLPF)
-            && !(tinterlace->mode == MODE_INTERLEAVE_TOP
-              || tinterlace->mode == MODE_INTERLEAVE_BOTTOM)) {
-        av_log(ctx, AV_LOG_WARNING, "low_pass_filter flags ignored with mode %d\n",
-                tinterlace->mode);
-        tinterlace->flags &= ~(TINTERLACE_FLAG_VLPF | TINTERLACE_FLAG_CVLPF);
-    }
-    tinterlace->preout_time_base = inlink->time_base;
-    if (tinterlace->mode == MODE_INTERLACEX2) {
-        tinterlace->preout_time_base.den *= 2;
-        outlink->frame_rate = av_mul_q(inlink->frame_rate, (AVRational){2,1});
-        outlink->time_base  = av_mul_q(inlink->time_base , (AVRational){1,2});
-    } else if (tinterlace->mode == MODE_MERGEX2) {
-        outlink->frame_rate = inlink->frame_rate;
-        outlink->time_base  = inlink->time_base;
-    } else if (tinterlace->mode != MODE_PAD) {
-        outlink->frame_rate = av_mul_q(inlink->frame_rate, (AVRational){1,2});
-        outlink->time_base  = av_mul_q(inlink->time_base , (AVRational){2,1});
-    }
-
-    for (i = 0; i<FF_ARRAY_ELEMS(standard_tbs); i++){
-        if (!av_cmp_q(standard_tbs[i], outlink->time_base))
-            break;
-    }
-    if (i == FF_ARRAY_ELEMS(standard_tbs) ||
-        (tinterlace->flags & TINTERLACE_FLAG_EXACT_TB))
-        outlink->time_base = tinterlace->preout_time_base;
-
-    tinterlace->csp = av_pix_fmt_desc_get(outlink->format);
-    if (tinterlace->flags & TINTERLACE_FLAG_CVLPF) {
-        if (tinterlace->csp->comp[0].depth > 8)
-            tinterlace->lowpass_line = lowpass_line_complex_c_16;
-        else
-            tinterlace->lowpass_line = lowpass_line_complex_c;
-        if (ARCH_X86)
-            ff_tinterlace_init_x86(tinterlace);
-    } else if (tinterlace->flags & TINTERLACE_FLAG_VLPF) {
-        if (tinterlace->csp->comp[0].depth > 8)
-            tinterlace->lowpass_line = lowpass_line_c_16;
-        else
-            tinterlace->lowpass_line = lowpass_line_c;
-        if (ARCH_X86)
-            ff_tinterlace_init_x86(tinterlace);
-    }
-
-    av_log(ctx, AV_LOG_VERBOSE, "mode:%d filter:%s h:%d -> h:%d\n", tinterlace->mode,
-           (tinterlace->flags & TINTERLACE_FLAG_CVLPF) ? "complex" :
-           (tinterlace->flags & TINTERLACE_FLAG_VLPF) ? "linear" : "off",
-           inlink->h, outlink->h);
-
-    return 0;
-}
-
-#define FIELD_UPPER           0
-#define FIELD_LOWER           1
-#define FIELD_UPPER_AND_LOWER 2
-
-/**
- * Copy picture field from src to dst.
- *
- * @param src_field copy from upper, lower field or both
- * @param interleave leave a padding line between each copied line
- * @param dst_field copy to upper or lower field,
- *        only meaningful when interleave is selected
- * @param flags context flags
- */
-static inline
-void copy_picture_field(TInterlaceContext *tinterlace,
-                        uint8_t *dst[4], int dst_linesize[4],
-                        const uint8_t *src[4], int src_linesize[4],
-                        enum AVPixelFormat format, int w, int src_h,
-                        int src_field, int interleave, int dst_field,
-                        int flags)
-{
-    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(format);
-    int hsub = desc->log2_chroma_w;
-    int plane, vsub = desc->log2_chroma_h;
-    int k = src_field == FIELD_UPPER_AND_LOWER ? 1 : 2;
-    int h;
-
-    for (plane = 0; plane < desc->nb_components; plane++) {
-        int lines = plane == 1 || plane == 2 ? AV_CEIL_RSHIFT(src_h, vsub) : src_h;
-        int cols  = plane == 1 || plane == 2 ? AV_CEIL_RSHIFT(    w, hsub) : w;
-        uint8_t *dstp = dst[plane];
-        const uint8_t *srcp = src[plane];
-        int srcp_linesize = src_linesize[plane] * k;
-        int dstp_linesize = dst_linesize[plane] * (interleave ? 2 : 1);
-        int clip_max = (1 << tinterlace->csp->comp[plane].depth) - 1;
-
-        lines = (lines + (src_field == FIELD_UPPER)) / k;
-        if (src_field == FIELD_LOWER)
-            srcp += src_linesize[plane];
-        if (interleave && dst_field == FIELD_LOWER)
-            dstp += dst_linesize[plane];
-        // Low-pass filtering is required when creating an interlaced destination from
-        // a progressive source which contains high-frequency vertical detail.
-        // Filtering will reduce interlace 'twitter' and Moire patterning.
-        if (flags & (TINTERLACE_FLAG_VLPF | TINTERLACE_FLAG_CVLPF)) {
-            int x = !!(flags & TINTERLACE_FLAG_CVLPF);
-            for (h = lines; h > 0; h--) {
-                ptrdiff_t pref = src_linesize[plane];
-                ptrdiff_t mref = -pref;
-                if (h >= (lines - x))  mref = 0; // there is no line above
-                else if (h <= (1 + x)) pref = 0; // there is no line below
-
-                tinterlace->lowpass_line(dstp, cols, srcp, mref, pref, clip_max);
-                dstp += dstp_linesize;
-                srcp += srcp_linesize;
-            }
-        } else {
-            if (tinterlace->csp->comp[plane].depth > 8)
-                cols *= 2;
-            av_image_copy_plane(dstp, dstp_linesize, srcp, srcp_linesize, cols, lines);
-        }
-    }
-}
-
-static int filter_frame(AVFilterLink *inlink, AVFrame *picref)
-{
-    AVFilterContext *ctx = inlink->dst;
-    AVFilterLink *outlink = ctx->outputs[0];
-    TInterlaceContext *tinterlace = ctx->priv;
-    AVFrame *cur, *next, *out;
-    int field, tff, ret;
-
-    av_frame_free(&tinterlace->cur);
-    tinterlace->cur  = tinterlace->next;
-    tinterlace->next = picref;
-
-    cur = tinterlace->cur;
-    next = tinterlace->next;
-    /* we need at least two frames */
-    if (!tinterlace->cur)
-        return 0;
-
-    switch (tinterlace->mode) {
-    case MODE_MERGEX2: /* move the odd frame into the upper field of the new image, even into
-                        * the lower field, generating a double-height video at same framerate */
-    case MODE_MERGE: /* move the odd frame into the upper field of the new image, even into
-             * the lower field, generating a double-height video at half framerate */
-        out = ff_get_video_buffer(outlink, outlink->w, outlink->h);
-        if (!out)
-            return AVERROR(ENOMEM);
-        av_frame_copy_props(out, cur);
-        out->height = outlink->h;
-        out->interlaced_frame = 1;
-        out->top_field_first = 1;
-        out->sample_aspect_ratio = av_mul_q(cur->sample_aspect_ratio, av_make_q(2, 1));
-
-        /* write odd frame lines into the upper field of the new frame */
-        copy_picture_field(tinterlace, out->data, out->linesize,
-                           (const uint8_t **)cur->data, cur->linesize,
-                           inlink->format, inlink->w, inlink->h,
-                           FIELD_UPPER_AND_LOWER, 1, tinterlace->mode == MODE_MERGEX2 ? inlink->frame_count_out & 1 ? FIELD_LOWER : FIELD_UPPER : FIELD_UPPER, tinterlace->flags);
-        /* write even frame lines into the lower field of the new frame */
-        copy_picture_field(tinterlace, out->data, out->linesize,
-                           (const uint8_t **)next->data, next->linesize,
-                           inlink->format, inlink->w, inlink->h,
-                           FIELD_UPPER_AND_LOWER, 1, tinterlace->mode == MODE_MERGEX2 ? inlink->frame_count_out & 1 ? FIELD_UPPER : FIELD_LOWER : FIELD_LOWER, tinterlace->flags);
-        if (tinterlace->mode != MODE_MERGEX2)
-            av_frame_free(&tinterlace->next);
-        break;
-
-    case MODE_DROP_ODD:  /* only output even frames, odd  frames are dropped; height unchanged, half framerate */
-    case MODE_DROP_EVEN: /* only output odd  frames, even frames are dropped; height unchanged, half framerate */
-        out = av_frame_clone(tinterlace->mode == MODE_DROP_EVEN ? cur : next);
-        if (!out)
-            return AVERROR(ENOMEM);
-        av_frame_free(&tinterlace->next);
-        break;
-
-    case MODE_PAD: /* expand each frame to double height, but pad alternate
-                    * lines with black; framerate unchanged */
-        out = ff_get_video_buffer(outlink, outlink->w, outlink->h);
-        if (!out)
-            return AVERROR(ENOMEM);
-        av_frame_copy_props(out, cur);
-        out->height = outlink->h;
-        out->sample_aspect_ratio = av_mul_q(cur->sample_aspect_ratio, av_make_q(2, 1));
-
-        field = (1 + tinterlace->frame) & 1 ? FIELD_UPPER : FIELD_LOWER;
-        /* copy upper and lower fields */
-        copy_picture_field(tinterlace, out->data, out->linesize,
-                           (const uint8_t **)cur->data, cur->linesize,
-                           inlink->format, inlink->w, inlink->h,
-                           FIELD_UPPER_AND_LOWER, 1, field, tinterlace->flags);
-        /* pad with black the other field */
-        copy_picture_field(tinterlace, out->data, out->linesize,
-                           (const uint8_t **)tinterlace->black_data, tinterlace->black_linesize,
-                           inlink->format, inlink->w, inlink->h,
-                           FIELD_UPPER_AND_LOWER, 1, !field, tinterlace->flags);
-        break;
-
-        /* interleave upper/lower lines from odd frames with lower/upper lines from even frames,
-         * halving the frame rate and preserving image height */
-    case MODE_INTERLEAVE_TOP:    /* top    field first */
-    case MODE_INTERLEAVE_BOTTOM: /* bottom field first */
-        if ((tinterlace->flags & TINTERLACE_FLAG_BYPASS_IL) && cur->interlaced_frame) {
-            av_log(ctx, AV_LOG_WARNING,
-                   "video is already interlaced, adjusting framerate only\n");
-            out = av_frame_clone(cur);
-            if (!out)
-                return AVERROR(ENOMEM);
-            out->pts /= 2;  // adjust pts to new framerate
-            ret = ff_filter_frame(outlink, out);
-            return ret;
-        }
-        tff = tinterlace->mode == MODE_INTERLEAVE_TOP;
-        out = ff_get_video_buffer(outlink, outlink->w, outlink->h);
-        if (!out)
-            return AVERROR(ENOMEM);
-        av_frame_copy_props(out, cur);
-        out->interlaced_frame = 1;
-        out->top_field_first = tff;
-
-        /* copy upper/lower field from cur */
-        copy_picture_field(tinterlace, out->data, out->linesize,
-                           (const uint8_t **)cur->data, cur->linesize,
-                           inlink->format, inlink->w, inlink->h,
-                           tff ? FIELD_UPPER : FIELD_LOWER, 1, tff ? FIELD_UPPER : FIELD_LOWER,
-                           tinterlace->flags);
-        /* copy lower/upper field from next */
-        copy_picture_field(tinterlace, out->data, out->linesize,
-                           (const uint8_t **)next->data, next->linesize,
-                           inlink->format, inlink->w, inlink->h,
-                           tff ? FIELD_LOWER : FIELD_UPPER, 1, tff ? FIELD_LOWER : FIELD_UPPER,
-                           tinterlace->flags);
-        av_frame_free(&tinterlace->next);
-        break;
-    case MODE_INTERLACEX2: /* re-interlace preserving image height, double frame rate */
-        /* output current frame first */
-        out = av_frame_clone(cur);
-        if (!out)
-            return AVERROR(ENOMEM);
-        out->interlaced_frame = 1;
-        if (cur->pts != AV_NOPTS_VALUE)
-            out->pts = cur->pts*2;
-
-        out->pts = av_rescale_q(out->pts, tinterlace->preout_time_base, outlink->time_base);
-        if ((ret = ff_filter_frame(outlink, out)) < 0)
-            return ret;
-
-        /* output mix of current and next frame */
-        tff = next->top_field_first;
-        out = ff_get_video_buffer(outlink, outlink->w, outlink->h);
-        if (!out)
-            return AVERROR(ENOMEM);
-        av_frame_copy_props(out, next);
-        out->interlaced_frame = 1;
-        out->top_field_first = !tff;
-
-        if (next->pts != AV_NOPTS_VALUE && cur->pts != AV_NOPTS_VALUE)
-            out->pts = cur->pts + next->pts;
-        else
-            out->pts = AV_NOPTS_VALUE;
-        /* write current frame second field lines into the second field of the new frame */
-        copy_picture_field(tinterlace, out->data, out->linesize,
-                           (const uint8_t **)cur->data, cur->linesize,
-                           inlink->format, inlink->w, inlink->h,
-                           tff ? FIELD_LOWER : FIELD_UPPER, 1, tff ? FIELD_LOWER : FIELD_UPPER,
-                           tinterlace->flags);
-        /* write next frame first field lines into the first field of the new frame */
-        copy_picture_field(tinterlace, out->data, out->linesize,
-                           (const uint8_t **)next->data, next->linesize,
-                           inlink->format, inlink->w, inlink->h,
-                           tff ? FIELD_UPPER : FIELD_LOWER, 1, tff ? FIELD_UPPER : FIELD_LOWER,
-                           tinterlace->flags);
-        break;
-    default:
-        av_assert0(0);
-    }
-
-    out->pts = av_rescale_q(out->pts, tinterlace->preout_time_base, outlink->time_base);
-    ret = ff_filter_frame(outlink, out);
-    tinterlace->frame++;
-
-    return ret;
-}
-
-static int init_interlace(AVFilterContext *ctx)
-{
-    TInterlaceContext *tinterlace = ctx->priv;
-
-    if (tinterlace->mode <= MODE_BFF)
-        tinterlace->mode += MODE_INTERLEAVE_TOP;
-
-    tinterlace->flags |= TINTERLACE_FLAG_BYPASS_IL;
-    if (tinterlace->lowpass == VLPF_LIN)
-        tinterlace->flags |= TINTERLACE_FLAG_VLPF;
-    if (tinterlace->lowpass == VLPF_CMP)
-        tinterlace->flags |= TINTERLACE_FLAG_CVLPF;
-
-    return 0;
-}
-
-static const AVFilterPad tinterlace_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .filter_frame = filter_frame,
-    },
-    { NULL }
-};
-
-static const AVFilterPad tinterlace_outputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .config_props = config_out_props,
-    },
-    { NULL }
-};
-
-AVFilter ff_vf_tinterlace = {
-    .name          = "tinterlace",
-    .description   = NULL_IF_CONFIG_SMALL("Perform temporal field interlacing."),
-    .priv_size     = sizeof(TInterlaceContext),
-    .uninit        = uninit,
-    .query_formats = query_formats,
-    .inputs        = tinterlace_inputs,
-    .outputs       = tinterlace_outputs,
-    .priv_class    = &tinterlace_class,
-};
-
-
-AVFilter ff_vf_interlace = {
-    .name          = "interlace",
-    .description   = NULL_IF_CONFIG_SMALL("Convert progressive video into interlaced."),
-    .priv_size     = sizeof(TInterlaceContext),
-    .init          = init_interlace,
-    .uninit        = uninit,
-    .query_formats = query_formats,
-    .inputs        = tinterlace_inputs,
-    .outputs       = tinterlace_outputs,
-    .priv_class    = &interlace_class,
-};
diff --git a/libavfilter/vf_uspp.c b/libavfilter/vf_uspp.c
deleted file mode 100644
index da4029f..0000000
--- a/libavfilter/vf_uspp.c
+++ /dev/null
@@ -1,509 +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/opt.h"
-#include "libavutil/pixdesc.h"
-#include "internal.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;
-    int 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];
-    AVFrame *frame;
-    AVFrame *frame_dec;
-    uint8_t *non_b_qp_table;
-    int non_b_qp_alloc_size;
-    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 = {0};
-        int got_pkt_ptr;
-
-        av_init_packet(&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;
-        }
-
-        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 int query_formats(AVFilterContext *ctx)
-{
-    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
-    };
-
-    AVFilterFormats *fmts_list = ff_make_format_list(pix_fmts);
-    if (!fmts_list)
-        return AVERROR(ENOMEM);
-    return ff_set_common_formats(ctx, fmts_list);
-}
-
-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;
-
-    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);
-        if (ret < 0)
-            return ret;
-        av_dict_free(&opts);
-        av_assert0(avctx_enc->codec);
-    }
-
-    uspp->outbuf_size = (width + BLOCK) * (height + BLOCK) * 10;
-    if (!(uspp->frame = av_frame_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;
-    uint8_t *qp_table = NULL;
-
-    /* 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) {
-        qp_table = av_frame_get_qp_table(in, &qp_stride, &uspp->qscale_type);
-
-        if (qp_table && !uspp->use_bframe_qp && in->pict_type != AV_PICTURE_TYPE_B) {
-            int w, h;
-
-            /* if the qp stride is not set, it means the QP are only defined on
-             * a line basis */
-            if (!qp_stride) {
-                w = AV_CEIL_RSHIFT(inlink->w, 4);
-                h = 1;
-            } else {
-                w = qp_stride;
-                h = AV_CEIL_RSHIFT(inlink->h, 4);
-            }
-
-            if (w * h > uspp->non_b_qp_alloc_size) {
-                int ret = av_reallocp_array(&uspp->non_b_qp_table, w, h);
-                if (ret < 0) {
-                    uspp->non_b_qp_alloc_size = 0;
-                    return ret;
-                }
-                uspp->non_b_qp_alloc_size = w * h;
-            }
-
-            av_assert0(w * h <= uspp->non_b_qp_alloc_size);
-            memcpy(uspp->non_b_qp_table, qp_table, w * h);
-        }
-    }
-
-    if (uspp->log2_count && !ctx->is_disabled) {
-        if (!uspp->use_bframe_qp && uspp->non_b_qp_table)
-            qp_table = uspp->non_b_qp_table;
-
-        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);
-                    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);
-    }
-    return ff_filter_frame(outlink, out);
-}
-
-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_close(uspp->avctx_enc[i]);
-        av_freep(&uspp->avctx_enc[i]);
-    }
-
-    av_freep(&uspp->non_b_qp_table);
-    av_freep(&uspp->outbuf);
-    av_frame_free(&uspp->frame);
-}
-
-static const AVFilterPad uspp_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .config_props = config_input,
-        .filter_frame = filter_frame,
-    },
-    { NULL }
-};
-
-static const AVFilterPad uspp_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO,
-    },
-    { NULL }
-};
-
-AVFilter ff_vf_uspp = {
-    .name            = "uspp",
-    .description     = NULL_IF_CONFIG_SMALL("Apply Ultra Simple / Slow Post-processing filter."),
-    .priv_size       = sizeof(USPPContext),
-    .uninit          = uninit,
-    .query_formats   = query_formats,
-    .inputs          = uspp_inputs,
-    .outputs         = uspp_outputs,
-    .priv_class      = &uspp_class,
-    .flags           = AVFILTER_FLAG_SUPPORT_TIMELINE_INTERNAL,
-};
diff --git a/libavfilter/vf_vaguedenoiser.c b/libavfilter/vf_vaguedenoiser.c
deleted file mode 100644
index 023bd5d..0000000
--- a/libavfilter/vf_vaguedenoiser.c
+++ /dev/null
@@ -1,590 +0,0 @@
-/*
- * Copyright (c) 2003 LeFunGus, lefungus@altern.org
- *
- * 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.
- */
-
-#include <float.h>
-
-#include "libavutil/imgutils.h"
-#include "libavutil/attributes.h"
-#include "libavutil/common.h"
-#include "libavutil/pixdesc.h"
-#include "libavutil/intreadwrite.h"
-#include "libavutil/opt.h"
-
-#include "avfilter.h"
-#include "formats.h"
-#include "internal.h"
-#include "video.h"
-
-typedef struct VagueDenoiserContext {
-    const AVClass *class;
-
-    float threshold;
-    float percent;
-    int method;
-    int nsteps;
-    int planes;
-
-    int depth;
-    int bpc;
-    int peak;
-    int nb_planes;
-    int planeheight[4];
-    int planewidth[4];
-
-    float *block;
-    float *in;
-    float *out;
-    float *tmp;
-
-    int hlowsize[4][32];
-    int hhighsize[4][32];
-    int vlowsize[4][32];
-    int vhighsize[4][32];
-
-    void (*thresholding)(float *block, const int width, const int height,
-                         const int stride, const float threshold,
-                         const float percent, const int nsteps);
-} VagueDenoiserContext;
-
-#define OFFSET(x) offsetof(VagueDenoiserContext, x)
-#define FLAGS AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_FILTERING_PARAM
-static const AVOption vaguedenoiser_options[] = {
-    { "threshold", "set filtering strength",   OFFSET(threshold), AV_OPT_TYPE_FLOAT, {.dbl=2.},  0,DBL_MAX, FLAGS },
-    { "method",    "set filtering method",     OFFSET(method),    AV_OPT_TYPE_INT,   {.i64=2 },  0, 2,      FLAGS, "method" },
-        { "hard",   "hard thresholding",       0,                 AV_OPT_TYPE_CONST, {.i64=0},   0, 0,      FLAGS, "method" },
-        { "soft",   "soft thresholding",       0,                 AV_OPT_TYPE_CONST, {.i64=1},   0, 0,      FLAGS, "method" },
-        { "garrote", "garotte thresholding",   0,                 AV_OPT_TYPE_CONST, {.i64=2},   0, 0,      FLAGS, "method" },
-    { "nsteps",    "set number of steps",      OFFSET(nsteps),    AV_OPT_TYPE_INT,   {.i64=6 },  1, 32,     FLAGS },
-    { "percent", "set percent of full denoising", OFFSET(percent),AV_OPT_TYPE_FLOAT, {.dbl=85},  0,100,     FLAGS },
-    { "planes",    "set planes to filter",     OFFSET(planes),    AV_OPT_TYPE_INT,   {.i64=15 }, 0, 15,     FLAGS },
-    { NULL }
-};
-
-AVFILTER_DEFINE_CLASS(vaguedenoiser);
-
-#define NPAD 10
-
-static const float analysis_low[9] = {
-    0.037828455506995f, -0.023849465019380f, -0.110624404418423f, 0.377402855612654f,
-    0.852698679009403f, 0.377402855612654f, -0.110624404418423f, -0.023849465019380f, 0.037828455506995f
-};
-
-static const float analysis_high[7] = {
-    -0.064538882628938f, 0.040689417609558f, 0.418092273222212f, -0.788485616405664f,
-    0.418092273222212f, 0.040689417609558f, -0.064538882628938f
-};
-
-static const float synthesis_low[7] = {
-    -0.064538882628938f, -0.040689417609558f, 0.418092273222212f, 0.788485616405664f,
-    0.418092273222212f, -0.040689417609558f, -0.064538882628938f
-};
-
-static const float synthesis_high[9] = {
-    -0.037828455506995f, -0.023849465019380f, 0.110624404418423f, 0.377402855612654f,
-    -0.852698679009403f, 0.377402855612654f, 0.110624404418423f, -0.023849465019380f, -0.037828455506995f
-};
-
-static int query_formats(AVFilterContext *ctx)
-{
-    static const enum AVPixelFormat pix_fmts[] = {
-        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_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,
-        AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV422P12, AV_PIX_FMT_YUV420P12,
-        AV_PIX_FMT_YUV440P12,
-        AV_PIX_FMT_YUV444P14, AV_PIX_FMT_YUV422P14, AV_PIX_FMT_YUV420P14,
-        AV_PIX_FMT_YUV420P16, AV_PIX_FMT_YUV422P16, AV_PIX_FMT_YUV444P16,
-        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_YUVA420P,  AV_PIX_FMT_YUVA422P,   AV_PIX_FMT_YUVA444P,
-        AV_PIX_FMT_YUVA444P9, AV_PIX_FMT_YUVA444P10, AV_PIX_FMT_YUVA444P12, AV_PIX_FMT_YUVA444P16,
-        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_GBRAP,     AV_PIX_FMT_GBRAP10,    AV_PIX_FMT_GBRAP12,    AV_PIX_FMT_GBRAP16,
-        AV_PIX_FMT_NONE
-    };
-    AVFilterFormats *fmts_list = ff_make_format_list(pix_fmts);
-    if (!fmts_list)
-        return AVERROR(ENOMEM);
-    return ff_set_common_formats(ctx, fmts_list);
-}
-
-static int config_input(AVFilterLink *inlink)
-{
-    VagueDenoiserContext *s = inlink->dst->priv;
-    const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(inlink->format);
-    int p, i, nsteps_width, nsteps_height, nsteps_max;
-
-    s->depth = desc->comp[0].depth;
-    s->bpc = (s->depth + 7) / 8;
-    s->nb_planes = desc->nb_components;
-
-    s->planeheight[1] = s->planeheight[2] = AV_CEIL_RSHIFT(inlink->h, desc->log2_chroma_h);
-    s->planeheight[0] = s->planeheight[3] = inlink->h;
-    s->planewidth[1]  = s->planewidth[2]  = AV_CEIL_RSHIFT(inlink->w, desc->log2_chroma_w);
-    s->planewidth[0]  = s->planewidth[3]  = inlink->w;
-
-    s->block = av_malloc_array(inlink->w * inlink->h, sizeof(*s->block));
-    s->in    = av_malloc_array(32 + FFMAX(inlink->w, inlink->h), sizeof(*s->in));
-    s->out   = av_malloc_array(32 + FFMAX(inlink->w, inlink->h), sizeof(*s->out));
-    s->tmp   = av_malloc_array(32 + FFMAX(inlink->w, inlink->h), sizeof(*s->tmp));
-
-    if (!s->block || !s->in || !s->out || !s->tmp)
-        return AVERROR(ENOMEM);
-
-    s->threshold *= 1 << (s->depth - 8);
-    s->peak = (1 << s->depth) - 1;
-
-    nsteps_width  = ((s->planes & 2 || s->planes & 4) && s->nb_planes > 1) ? s->planewidth[1] : s->planewidth[0];
-    nsteps_height = ((s->planes & 2 || s->planes & 4) && s->nb_planes > 1) ? s->planeheight[1] : s->planeheight[0];
-
-    for (nsteps_max = 1; nsteps_max < 15; nsteps_max++) {
-        if (pow(2, nsteps_max) >= nsteps_width || pow(2, nsteps_max) >= nsteps_height)
-            break;
-    }
-
-    s->nsteps = FFMIN(s->nsteps, nsteps_max - 2);
-
-    for (p = 0; p < 4; p++) {
-        s->hlowsize[p][0]  = (s->planewidth[p] + 1) >> 1;
-        s->hhighsize[p][0] =  s->planewidth[p] >> 1;
-        s->vlowsize[p][0]  = (s->planeheight[p] + 1) >> 1;
-        s->vhighsize[p][0] =  s->planeheight[p] >> 1;
-
-        for (i = 1; i < s->nsteps; i++) {
-            s->hlowsize[p][i]  = (s->hlowsize[p][i - 1] + 1) >> 1;
-            s->hhighsize[p][i] =  s->hlowsize[p][i - 1] >> 1;
-            s->vlowsize[p][i]  = (s->vlowsize[p][i - 1] + 1) >> 1;
-            s->vhighsize[p][i] =  s->vlowsize[p][i - 1] >> 1;
-        }
-    }
-
-    return 0;
-}
-
-static inline void copy(const float *p1, float *p2, const int length)
-{
-    memcpy(p2, p1, length * sizeof(float));
-}
-
-static inline void copyv(const float *p1, const int stride1, float *p2, const int length)
-{
-    int i;
-
-    for (i = 0; i < length; i++) {
-        p2[i] = *p1;
-        p1 += stride1;
-    }
-}
-
-static inline void copyh(const float *p1, float *p2, const int stride2, const int length)
-{
-    int i;
-
-    for (i = 0; i < length; i++) {
-        *p2 = p1[i];
-        p2 += stride2;
-    }
-}
-
-// Do symmetric extension of data using prescribed symmetries
-// Original values are in output[npad] through output[npad+size-1]
-// New values will be placed in output[0] through output[npad] and in output[npad+size] through output[2*npad+size-1] (note: end values may not be filled in)
-// extension at left bdry is ... 3 2 1 0 | 0 1 2 3 ...
-// same for right boundary
-// if right_ext=1 then ... 3 2 1 0 | 1 2 3
-static void symmetric_extension(float *output, const int size, const int left_ext, const int right_ext)
-{
-    int first = NPAD;
-    int last = NPAD - 1 + size;
-    const int originalLast = last;
-    int i, nextend, idx;
-
-    if (left_ext == 2)
-        output[--first] = output[NPAD];
-    if (right_ext == 2)
-        output[++last] = output[originalLast];
-
-    // extend left end
-    nextend = first;
-    for (i = 0; i < nextend; i++)
-        output[--first] = output[NPAD + 1 + i];
-
-    idx = NPAD + NPAD - 1 + size;
-
-    // extend right end
-    nextend = idx - last;
-    for (i = 0; i < nextend; i++)
-        output[++last] = output[originalLast - 1 - i];
-}
-
-static void transform_step(float *input, float *output, const int size, const int low_size, VagueDenoiserContext *s)
-{
-    int i;
-
-    symmetric_extension(input, size, 1, 1);
-
-    for (i = NPAD; i < NPAD + low_size; i++) {
-        const float a = input[2 * i - 14] * analysis_low[0];
-        const float b = input[2 * i - 13] * analysis_low[1];
-        const float c = input[2 * i - 12] * analysis_low[2];
-        const float d = input[2 * i - 11] * analysis_low[3];
-        const float e = input[2 * i - 10] * analysis_low[4];
-        const float f = input[2 * i -  9] * analysis_low[3];
-        const float g = input[2 * i -  8] * analysis_low[2];
-        const float h = input[2 * i -  7] * analysis_low[1];
-        const float k = input[2 * i -  6] * analysis_low[0];
-
-        output[i] = a + b + c + d + e + f + g + h + k;
-    }
-
-    for (i = NPAD; i < NPAD + low_size; i++) {
-        const float a = input[2 * i - 12] * analysis_high[0];
-        const float b = input[2 * i - 11] * analysis_high[1];
-        const float c = input[2 * i - 10] * analysis_high[2];
-        const float d = input[2 * i -  9] * analysis_high[3];
-        const float e = input[2 * i -  8] * analysis_high[2];
-        const float f = input[2 * i -  7] * analysis_high[1];
-        const float g = input[2 * i -  6] * analysis_high[0];
-
-        output[i + low_size] = a + b + c + d + e + f + g;
-    }
-}
-
-static void invert_step(const float *input, float *output, float *temp, const int size, VagueDenoiserContext *s)
-{
-    const int low_size = (size + 1) >> 1;
-    const int high_size = size >> 1;
-    int left_ext = 1, right_ext, i;
-    int findex;
-
-    memcpy(temp + NPAD, input + NPAD, low_size * sizeof(float));
-
-    right_ext = (size % 2 == 0) ? 2 : 1;
-    symmetric_extension(temp, low_size, left_ext, right_ext);
-
-    memset(output, 0, (NPAD + NPAD + size) * sizeof(float));
-    findex = (size + 2) >> 1;
-
-    for (i = 9; i < findex + 11; i++) {
-        const float a = temp[i] * synthesis_low[0];
-        const float b = temp[i] * synthesis_low[1];
-        const float c = temp[i] * synthesis_low[2];
-        const float d = temp[i] * synthesis_low[3];
-
-        output[2 * i - 13] += a;
-        output[2 * i - 12] += b;
-        output[2 * i - 11] += c;
-        output[2 * i - 10] += d;
-        output[2 * i -  9] += c;
-        output[2 * i -  8] += b;
-        output[2 * i -  7] += a;
-    }
-
-    memcpy(temp + NPAD, input + NPAD + low_size, high_size * sizeof(float));
-
-    left_ext = 2;
-    right_ext = (size % 2 == 0) ? 1 : 2;
-    symmetric_extension(temp, high_size, left_ext, right_ext);
-
-    for (i = 8; i < findex + 11; i++) {
-        const float a = temp[i] * synthesis_high[0];
-        const float b = temp[i] * synthesis_high[1];
-        const float c = temp[i] * synthesis_high[2];
-        const float d = temp[i] * synthesis_high[3];
-        const float e = temp[i] * synthesis_high[4];
-
-        output[2 * i - 13] += a;
-        output[2 * i - 12] += b;
-        output[2 * i - 11] += c;
-        output[2 * i - 10] += d;
-        output[2 * i -  9] += e;
-        output[2 * i -  8] += d;
-        output[2 * i -  7] += c;
-        output[2 * i -  6] += b;
-        output[2 * i -  5] += a;
-    }
-}
-
-static void hard_thresholding(float *block, const int width, const int height,
-                              const int stride, const float threshold,
-                              const float percent, const int unused)
-{
-    const float frac = 1.f - percent * 0.01f;
-    int y, x;
-
-    for (y = 0; y < height; y++) {
-        for (x = 0; x < width; x++) {
-            if (FFABS(block[x]) <= threshold)
-                block[x] *= frac;
-        }
-        block += stride;
-    }
-}
-
-static void soft_thresholding(float *block, const int width, const int height, const int stride,
-                              const float threshold, const float percent, const int nsteps)
-{
-    const float frac = 1.f - percent * 0.01f;
-    const float shift = threshold * 0.01f * percent;
-    int w = width;
-    int h = height;
-    int y, x, l;
-
-    for (l = 0; l < nsteps; l++) {
-        w = (w + 1) >> 1;
-        h = (h + 1) >> 1;
-    }
-
-    for (y = 0; y < height; y++) {
-        const int x0 = (y < h) ? w : 0;
-        for (x = x0; x < width; x++) {
-            const float temp = FFABS(block[x]);
-            if (temp <= threshold)
-                block[x] *= frac;
-            else
-                block[x] = (block[x] < 0.f ? -1.f : (block[x] > 0.f ? 1.f : 0.f)) * (temp - shift);
-        }
-        block += stride;
-    }
-}
-
-static void qian_thresholding(float *block, const int width, const int height,
-                              const int stride, const float threshold,
-                              const float percent, const int unused)
-{
-    const float percent01 = percent * 0.01f;
-    const float tr2 = threshold * threshold * percent01;
-    const float frac = 1.f - percent01;
-    int y, x;
-
-    for (y = 0; y < height; y++) {
-        for (x = 0; x < width; x++) {
-            const float temp = FFABS(block[x]);
-            if (temp <= threshold) {
-                block[x] *= frac;
-            } else {
-                const float tp2 = temp * temp;
-                block[x] *= (tp2 - tr2) / tp2;
-            }
-        }
-        block += stride;
-    }
-}
-
-static void filter(VagueDenoiserContext *s, AVFrame *in, AVFrame *out)
-{
-    int p, y, x, i, j;
-
-    for (p = 0; p < s->nb_planes; p++) {
-        const int height = s->planeheight[p];
-        const int width = s->planewidth[p];
-        const uint8_t *srcp8 = in->data[p];
-        const uint16_t *srcp16 = (const uint16_t *)in->data[p];
-        uint8_t *dstp8 = out->data[p];
-        uint16_t *dstp16 = (uint16_t *)out->data[p];
-        float *output = s->block;
-        int h_low_size0 = width;
-        int v_low_size0 = height;
-        int nsteps_transform = s->nsteps;
-        int nsteps_invert = s->nsteps;
-        const float *input = s->block;
-
-        if (!((1 << p) & s->planes)) {
-            av_image_copy_plane(out->data[p], out->linesize[p], in->data[p], in->linesize[p],
-                                s->planewidth[p] * s->bpc, s->planeheight[p]);
-            continue;
-        }
-
-        if (s->depth <= 8) {
-            for (y = 0; y < height; y++) {
-                for (x = 0; x < width; x++)
-                    output[x] = srcp8[x];
-                srcp8 += in->linesize[p];
-                output += width;
-            }
-        } else {
-            for (y = 0; y < height; y++) {
-                for (x = 0; x < width; x++)
-                    output[x] = srcp16[x];
-                srcp16 += in->linesize[p] / 2;
-                output += width;
-            }
-        }
-
-        while (nsteps_transform--) {
-            int low_size = (h_low_size0 + 1) >> 1;
-            float *input = s->block;
-            for (j = 0; j < v_low_size0; j++) {
-                copy(input, s->in + NPAD, h_low_size0);
-                transform_step(s->in, s->out, h_low_size0, low_size, s);
-                copy(s->out + NPAD, input, h_low_size0);
-                input += width;
-            }
-
-            low_size = (v_low_size0 + 1) >> 1;
-            input = s->block;
-            for (j = 0; j < h_low_size0; j++) {
-                copyv(input, width, s->in + NPAD, v_low_size0);
-                transform_step(s->in, s->out, v_low_size0, low_size, s);
-                copyh(s->out + NPAD, input, width, v_low_size0);
-                input++;
-            }
-
-            h_low_size0 = (h_low_size0 + 1) >> 1;
-            v_low_size0 = (v_low_size0 + 1) >> 1;
-        }
-
-        s->thresholding(s->block, width, height, width, s->threshold, s->percent, s->nsteps);
-
-        while (nsteps_invert--) {
-            const int idx = s->vlowsize[p][nsteps_invert]  + s->vhighsize[p][nsteps_invert];
-            const int idx2 = s->hlowsize[p][nsteps_invert] + s->hhighsize[p][nsteps_invert];
-            float * idx3 = s->block;
-            for (i = 0; i < idx2; i++) {
-                copyv(idx3, width, s->in + NPAD, idx);
-                invert_step(s->in, s->out, s->tmp, idx, s);
-                copyh(s->out + NPAD, idx3, width, idx);
-                idx3++;
-            }
-
-            idx3 = s->block;
-            for (i = 0; i < idx; i++) {
-                copy(idx3, s->in + NPAD, idx2);
-                invert_step(s->in, s->out, s->tmp, idx2, s);
-                copy(s->out + NPAD, idx3, idx2);
-                idx3 += width;
-            }
-        }
-
-        if (s->depth <= 8) {
-            for (y = 0; y < height; y++) {
-                for (x = 0; x < width; x++)
-                    dstp8[x] = av_clip_uint8(input[x] + 0.5f);
-                input += width;
-                dstp8 += out->linesize[p];
-            }
-        } else {
-            for (y = 0; y < height; y++) {
-                for (x = 0; x < width; x++)
-                    dstp16[x] = av_clip(input[x] + 0.5f, 0, s->peak);
-                input += width;
-                dstp16 += out->linesize[p] / 2;
-            }
-        }
-    }
-}
-
-static int filter_frame(AVFilterLink *inlink, AVFrame *in)
-{
-    AVFilterContext *ctx  = inlink->dst;
-    VagueDenoiserContext *s = ctx->priv;
-    AVFilterLink *outlink = ctx->outputs[0];
-    AVFrame *out;
-    int direct = av_frame_is_writable(in);
-
-    if (direct) {
-        out = in;
-    } else {
-        out = ff_get_video_buffer(outlink, outlink->w, outlink->h);
-        if (!out) {
-            av_frame_free(&in);
-            return AVERROR(ENOMEM);
-        }
-
-        av_frame_copy_props(out, in);
-    }
-
-    filter(s, in, out);
-
-    if (!direct)
-        av_frame_free(&in);
-
-    return ff_filter_frame(outlink, out);
-}
-
-static av_cold int init(AVFilterContext *ctx)
-{
-    VagueDenoiserContext *s = ctx->priv;
-
-    switch (s->method) {
-    case 0:
-        s->thresholding = hard_thresholding;
-        break;
-    case 1:
-        s->thresholding = soft_thresholding;
-        break;
-    case 2:
-        s->thresholding = qian_thresholding;
-        break;
-    }
-
-    return 0;
-}
-
-static av_cold void uninit(AVFilterContext *ctx)
-{
-    VagueDenoiserContext *s = ctx->priv;
-
-    av_freep(&s->block);
-    av_freep(&s->in);
-    av_freep(&s->out);
-    av_freep(&s->tmp);
-}
-
-static const AVFilterPad vaguedenoiser_inputs[] = {
-    {
-        .name         = "default",
-        .type         = AVMEDIA_TYPE_VIDEO,
-        .config_props = config_input,
-        .filter_frame = filter_frame,
-    },
-    { NULL }
-};
-
-
-static const AVFilterPad vaguedenoiser_outputs[] = {
-    {
-        .name = "default",
-        .type = AVMEDIA_TYPE_VIDEO
-    },
-    { NULL }
-};
-
-AVFilter ff_vf_vaguedenoiser = {
-    .name          = "vaguedenoiser",
-    .description   = NULL_IF_CONFIG_SMALL("Apply a Wavelet based Denoiser."),
-    .priv_size     = sizeof(VagueDenoiserContext),
-    .priv_class    = &vaguedenoiser_class,
-    .init          = init,
-    .uninit        = uninit,
-    .query_formats = query_formats,
-    .inputs        = vaguedenoiser_inputs,
-    .outputs       = vaguedenoiser_outputs,
-    .flags         = AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC,
-};
diff --git a/libavfilter/vsrc_mptestsrc.c b/libavfilter/vsrc_mptestsrc.c
deleted file mode 100644
index 2ea736b..0000000
--- a/libavfilter/vsrc_mptestsrc.c
+++ /dev/null
@@ -1,369 +0,0 @@
-/*
- * Copyright (c) 2002 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
- * MP test source, ported from MPlayer libmpcodecs/vf_test.c
- */
-
-#include "libavutil/avstring.h"
-#include "libavutil/opt.h"
-#include "libavutil/parseutils.h"
-#include "libavutil/pixdesc.h"
-#include "avfilter.h"
-#include "internal.h"
-#include "formats.h"
-#include "video.h"
-
-#define WIDTH 512
-#define HEIGHT 512
-
-enum test_type {
-    TEST_DC_LUMA,
-    TEST_DC_CHROMA,
-    TEST_FREQ_LUMA,
-    TEST_FREQ_CHROMA,
-    TEST_AMP_LUMA,
-    TEST_AMP_CHROMA,
-    TEST_CBP,
-    TEST_MV,
-    TEST_RING1,
-    TEST_RING2,
-    TEST_ALL,
-    TEST_NB
-};
-
-typedef struct MPTestContext {
-    const AVClass *class;
-    AVRational frame_rate;
-    int64_t pts, max_pts, duration;
-    int64_t max_frames;
-    int hsub, vsub;
-    int test;           ///< test_type
-} MPTestContext;
-
-#define OFFSET(x) offsetof(MPTestContext, x)
-#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
-static const AVOption mptestsrc_options[]= {
-    { "rate",     "set video rate",     OFFSET(frame_rate), AV_OPT_TYPE_VIDEO_RATE, {.str = "25"}, 0, INT_MAX, FLAGS },
-    { "r",        "set video rate",     OFFSET(frame_rate), AV_OPT_TYPE_VIDEO_RATE, {.str = "25"}, 0, INT_MAX, FLAGS },
-    { "duration", "set video duration", OFFSET(duration), AV_OPT_TYPE_DURATION, {.i64 = -1}, -1, INT64_MAX, FLAGS },
-    { "d",        "set video duration", OFFSET(duration), AV_OPT_TYPE_DURATION, {.i64 = -1}, -1, INT64_MAX, FLAGS },
-
-    { "test", "set test to perform", OFFSET(test),  AV_OPT_TYPE_INT,   {.i64=TEST_ALL}, 0, INT_MAX, FLAGS, "test" },
-    { "t",    "set test to perform", OFFSET(test),  AV_OPT_TYPE_INT,   {.i64=TEST_ALL}, 0, INT_MAX, FLAGS, "test" },
-        { "dc_luma",     "", 0, AV_OPT_TYPE_CONST, {.i64=TEST_DC_LUMA},     INT_MIN, INT_MAX, FLAGS, "test" },
-        { "dc_chroma",   "", 0, AV_OPT_TYPE_CONST, {.i64=TEST_DC_CHROMA},   INT_MIN, INT_MAX, FLAGS, "test" },
-        { "freq_luma",   "", 0, AV_OPT_TYPE_CONST, {.i64=TEST_FREQ_LUMA},   INT_MIN, INT_MAX, FLAGS, "test" },
-        { "freq_chroma", "", 0, AV_OPT_TYPE_CONST, {.i64=TEST_FREQ_CHROMA}, INT_MIN, INT_MAX, FLAGS, "test" },
-        { "amp_luma",    "", 0, AV_OPT_TYPE_CONST, {.i64=TEST_AMP_LUMA},    INT_MIN, INT_MAX, FLAGS, "test" },
-        { "amp_chroma",  "", 0, AV_OPT_TYPE_CONST, {.i64=TEST_AMP_CHROMA},  INT_MIN, INT_MAX, FLAGS, "test" },
-        { "cbp",         "", 0, AV_OPT_TYPE_CONST, {.i64=TEST_CBP},         INT_MIN, INT_MAX, FLAGS, "test" },
-        { "mv",          "", 0, AV_OPT_TYPE_CONST, {.i64=TEST_MV},          INT_MIN, INT_MAX, FLAGS, "test" },
-        { "ring1",       "", 0, AV_OPT_TYPE_CONST, {.i64=TEST_RING1},       INT_MIN, INT_MAX, FLAGS, "test" },
-        { "ring2",       "", 0, AV_OPT_TYPE_CONST, {.i64=TEST_RING2},       INT_MIN, INT_MAX, FLAGS, "test" },
-        { "all",         "", 0, AV_OPT_TYPE_CONST, {.i64=TEST_ALL},         INT_MIN, INT_MAX, FLAGS, "test" },
-    { "max_frames", "Set the maximum number of frames generated for each test", OFFSET(max_frames),
-        AV_OPT_TYPE_INT64, {.i64 = 30}, 1, INT64_MAX, FLAGS },
-    { "m",          "Set the maximum number of frames generated for each test", OFFSET(max_frames),
-        AV_OPT_TYPE_INT64, {.i64 = 30}, 1, INT64_MAX, FLAGS },
-    { NULL }
-};
-
-AVFILTER_DEFINE_CLASS(mptestsrc);
-
-static double c[64];
-
-static void init_idct(void)
-{
-    int i, j;
-
-    for (i = 0; i < 8; i++) {
-        double s = i == 0 ? sqrt(0.125) : 0.5;
-
-        for (j = 0; j < 8; j++)
-            c[i*8+j] = s*cos((M_PI/8.0)*i*(j+0.5));
-    }
-}
-
-static void idct(uint8_t *dst, int dst_linesize, int src[64])
-{
-    int i, j, k;
-    double tmp[64];
-
-    for (i = 0; i < 8; i++) {
-        for (j = 0; j < 8; j++) {
-            double sum = 0.0;
-
-            for (k = 0; k < 8; k++)
-                sum += c[k*8+j] * src[8*i+k];
-
-            tmp[8*i+j] = sum;
-        }
-    }
-
-    for (j = 0; j < 8; j++) {
-        for (i = 0; i < 8; i++) {
-            double sum = 0.0;
-
-            for (k = 0; k < 8; k++)
-                sum += c[k*8+i]*tmp[8*k+j];
-
-            dst[dst_linesize*i + j] = av_clip_uint8(lrint(sum));
-        }
-    }
-}
-
-static void draw_dc(uint8_t *dst, int dst_linesize, int color, int w, int h)
-{
-    int x, y;
-
-    for (y = 0; y < h; y++)
-        for (x = 0; x < w; x++)
-            dst[x + y*dst_linesize] = color;
-}
-
-static void draw_basis(uint8_t *dst, int dst_linesize, int amp, int freq, int dc)
-{
-    int src[64];
-
-    memset(src, 0, 64*sizeof(int));
-    src[0] = dc;
-    if (amp)
-        src[freq] = amp;
-    idct(dst, dst_linesize, src);
-}
-
-static void draw_cbp(uint8_t *dst[3], int dst_linesize[3], int cbp, int amp, int dc)
-{
-    if (cbp&1)  draw_basis(dst[0]                    , dst_linesize[0], amp, 1, dc);
-    if (cbp&2)  draw_basis(dst[0]+8                  , dst_linesize[0], amp, 1, dc);
-    if (cbp&4)  draw_basis(dst[0]+  8*dst_linesize[0], dst_linesize[0], amp, 1, dc);
-    if (cbp&8)  draw_basis(dst[0]+8+8*dst_linesize[0], dst_linesize[0], amp, 1, dc);
-    if (cbp&16) draw_basis(dst[1]                    , dst_linesize[1], amp, 1, dc);
-    if (cbp&32) draw_basis(dst[2]                    , dst_linesize[2], amp, 1, dc);
-}
-
-static void dc_test(uint8_t *dst, int dst_linesize, int w, int h, int off)
-{
-    const int step = FFMAX(256/(w*h/256), 1);
-    int x, y, color = off;
-
-    for (y = 0; y < h; y += 16) {
-        for (x = 0; x < w; x += 16) {
-            draw_dc(dst + x + y*dst_linesize, dst_linesize, color, 8, 8);
-            color += step;
-        }
-    }
-}
-
-static void freq_test(uint8_t *dst, int dst_linesize, int off)
-{
-    int x, y, freq = 0;
-
-    for (y = 0; y < 8*16; y += 16) {
-        for (x = 0; x < 8*16; x += 16) {
-            draw_basis(dst + x + y*dst_linesize, dst_linesize, 4*(96+off), freq, 128*8);
-            freq++;
-        }
-    }
-}
-
-static void amp_test(uint8_t *dst, int dst_linesize, int off)
-{
-    int x, y, amp = off;
-
-    for (y = 0; y < 16*16; y += 16) {
-        for (x = 0; x < 16*16; x += 16) {
-            draw_basis(dst + x + y*dst_linesize, dst_linesize, 4*amp, 1, 128*8);
-            amp++;
-        }
-    }
-}
-
-static void cbp_test(uint8_t *dst[3], int dst_linesize[3], int off)
-{
-    int x, y, cbp = 0;
-
-    for (y = 0; y < 16*8; y += 16) {
-        for (x = 0; x < 16*8; x += 16) {
-            uint8_t *dst1[3];
-            dst1[0] = dst[0] + x*2 + y*2*dst_linesize[0];
-            dst1[1] = dst[1] + x   + y*  dst_linesize[1];
-            dst1[2] = dst[2] + x   + y*  dst_linesize[2];
-
-            draw_cbp(dst1, dst_linesize, cbp, (64+off)*4, 128*8);
-            cbp++;
-        }
-    }
-}
-
-static void mv_test(uint8_t *dst, int dst_linesize, int off)
-{
-    int x, y;
-
-    for (y = 0; y < 16*16; y++) {
-        if (y&16)
-            continue;
-        for (x = 0; x < 16*16; x++)
-            dst[x + y*dst_linesize] = x + off*8/(y/32+1);
-    }
-}
-
-static void ring1_test(uint8_t *dst, int dst_linesize, int off)
-{
-    int x, y, color = 0;
-
-    for (y = off; y < 16*16; y += 16) {
-        for (x = off; x < 16*16; x += 16) {
-            draw_dc(dst + x + y*dst_linesize, dst_linesize, ((x+y)&16) ? color : -color, 16, 16);
-            color++;
-        }
-    }
-}
-
-static void ring2_test(uint8_t *dst, int dst_linesize, int off)
-{
-    int x, y;
-
-    for (y = 0; y < 16*16; y++) {
-        for (x = 0; x < 16*16; x++) {
-            double d = hypot(x-8*16, y-8*16);
-            double r = d/20 - (int)(d/20);
-            if (r < off/30.0) {
-                dst[x + y*dst_linesize]     = 255;
-                dst[x + y*dst_linesize+256] = 0;
-            } else {
-                dst[x + y*dst_linesize]     = x;
-                dst[x + y*dst_linesize+256] = x;
-            }
-        }
-    }
-}
-
-static av_cold int init(AVFilterContext *ctx)
-{
-    MPTestContext *test = ctx->priv;
-
-    test->max_pts = test->duration >= 0 ?
-        av_rescale_q(test->duration, AV_TIME_BASE_Q, av_inv_q(test->frame_rate)) : -1;
-    test->pts = 0;
-
-    av_log(ctx, AV_LOG_VERBOSE, "rate:%d/%d duration:%f\n",
-           test->frame_rate.num, test->frame_rate.den,
-           test->duration < 0 ? -1 : test->max_pts * av_q2d(av_inv_q(test->frame_rate)));
-    init_idct();
-
-    return 0;
-}
-
-static int config_props(AVFilterLink *outlink)
-{
-    AVFilterContext *ctx = outlink->src;
-    MPTestContext *test = ctx->priv;
-    const AVPixFmtDescriptor *pix_desc = av_pix_fmt_desc_get(outlink->format);
-
-    test->hsub = pix_desc->log2_chroma_w;
-    test->vsub = pix_desc->log2_chroma_h;
-
-    outlink->w = WIDTH;
-    outlink->h = HEIGHT;
-    outlink->time_base = av_inv_q(test->frame_rate);
-
-    return 0;
-}
-
-static int query_formats(AVFilterContext *ctx)
-{
-    static const enum AVPixelFormat pix_fmts[] = {
-        AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE
-    };
-
-    AVFilterFormats *fmts_list = ff_make_format_list(pix_fmts);
-    if (!fmts_list)
-        return AVERROR(ENOMEM);
-    return ff_set_common_formats(ctx, fmts_list);
-}
-
-static int request_frame(AVFilterLink *outlink)
-{
-    MPTestContext *test = outlink->src->priv;
-    AVFrame *picref;
-    int w = WIDTH, h = HEIGHT,
-        cw = AV_CEIL_RSHIFT(w, test->hsub), ch = AV_CEIL_RSHIFT(h, test->vsub);
-    uint64_t frame = outlink->frame_count_in / test->max_frames;
-    uint64_t mod = outlink->frame_count_in % test->max_frames;
-    enum test_type tt = test->test;
-    int i;
-
-    if (test->max_pts >= 0 && test->pts > test->max_pts)
-        return AVERROR_EOF;
-    picref = ff_get_video_buffer(outlink, w, h);
-    if (!picref)
-        return AVERROR(ENOMEM);
-    picref->pts = test->pts++;
-
-    // clean image
-    for (i = 0; i < h; i++)
-        memset(picref->data[0] + i*picref->linesize[0], 0, w);
-    for (i = 0; i < ch; i++) {
-        memset(picref->data[1] + i*picref->linesize[1], 128, cw);
-        memset(picref->data[2] + i*picref->linesize[2], 128, cw);
-    }
-
-    if (tt == TEST_ALL && mod) /* draw a black frame at the beginning of each test */
-        tt = frame%(TEST_NB-1);
-
-    switch (tt) {
-    case TEST_DC_LUMA:       dc_test(picref->data[0], picref->linesize[0], 256, 256, mod); break;
-    case TEST_DC_CHROMA:     dc_test(picref->data[1], picref->linesize[1], 256, 256, mod); break;
-    case TEST_FREQ_LUMA:   freq_test(picref->data[0], picref->linesize[0], mod); break;
-    case TEST_FREQ_CHROMA: freq_test(picref->data[1], picref->linesize[1], mod); break;
-    case TEST_AMP_LUMA:     amp_test(picref->data[0], picref->linesize[0], mod); break;
-    case TEST_AMP_CHROMA:   amp_test(picref->data[1], picref->linesize[1], mod); break;
-    case TEST_CBP:          cbp_test(picref->data   , picref->linesize   , mod); break;
-    case TEST_MV:            mv_test(picref->data[0], picref->linesize[0], mod); break;
-    case TEST_RING1:      ring1_test(picref->data[0], picref->linesize[0], mod); break;
-    case TEST_RING2:      ring2_test(picref->data[0], picref->linesize[0], mod); break;
-    }
-
-    return ff_filter_frame(outlink, picref);
-}
-
-static const AVFilterPad mptestsrc_outputs[] = {
-    {
-        .name          = "default",
-        .type          = AVMEDIA_TYPE_VIDEO,
-        .request_frame = request_frame,
-        .config_props  = config_props,
-    },
-    { NULL }
-};
-
-AVFilter ff_vsrc_mptestsrc = {
-    .name          = "mptestsrc",
-    .description   = NULL_IF_CONFIG_SMALL("Generate various test pattern."),
-    .priv_size     = sizeof(MPTestContext),
-    .priv_class    = &mptestsrc_class,
-    .init          = init,
-    .query_formats = query_formats,
-    .inputs        = NULL,
-    .outputs       = mptestsrc_outputs,
-};
diff --git a/libavfilter/x86/vf_fspp.asm b/libavfilter/x86/vf_fspp.asm
deleted file mode 100644
index c7f8f64..0000000
--- a/libavfilter/x86/vf_fspp.asm
+++ /dev/null
@@ -1,727 +0,0 @@
-;*****************************************************************************
-;* x86-optimized functions for fspp filter
-;*
-;* Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
-;* Copyright (C) 2005 Nikolaj Poroshin <porosh3@psu.ru>
-;*
-;* 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.
-;******************************************************************************
-
-%include "libavutil/x86/x86util.asm"
-
-SECTION_RODATA
-
-pb_dither: db 0,  48,  12,  60,   3,  51,  15,  63, 32,  16,  44,  28,  35,  19,  47,  31, \
-              8,  56,   4,  52,  11,  59,   7,  55, 40,  24,  36,  20,  43,  27,  39,  23, \
-              2,  50,  14,  62,   1,  49,  13,  61, 34,  18,  46,  30,  33,  17,  45,  29, \
-             10,  58,   6,  54,   9,  57,   5,  53, 42,  26,  38,  22,  41,  25,  37,  21
-pw_187E: times 4 dw 0x187E ; FIX64(0.382683433, 14)
-pw_22A3: times 4 dw 0x22A3 ; FIX64(1.082392200, 13)
-pw_2D41: times 4 dw 0x2D41 ; FIX64(1.414213562, 13)
-pw_539F: times 4 dw 0x539F ; FIX64(1.306562965, 14)
-pw_5A82: times 4 dw 0x5A82 ; FIX64(1.414213562, 14)
-pw_3B21: times 4 dw 0x3B21 ; FIX64(1.847759065, 13)
-pw_AC62: times 4 dw 0xAC62 ; FIX64(-2.613125930, 13)
-pw_3642: times 4 dw 0x3642 ; FIX64(0.847759065, 14)
-pw_2441: times 4 dw 0x2441 ; FIX64(0.566454497, 14)
-pw_0CBB: times 4 dw 0x0CBB ; FIX64(0.198912367, 14)
-pw_4:    times 4 dw 4
-pw_2:    times 4 dw 2
-
-SECTION .text
-
-%define DCTSIZE 8
-
-INIT_MMX mmx
-
-;void ff_store_slice_mmx(uint8_t *dst, int16_t *src,
-;                        ptrdiff_t dst_stride, ptrdiff_t src_stride,
-;                        ptrdiff_t width, ptrdiff_t height, ptrdiff_t log2_scale)
-%if ARCH_X86_64
-cglobal store_slice, 7, 9, 0, dst, src, dst_stride, src_stride, width, dither_height, dither, tmp, tmp2
-%else
-cglobal store_slice, 2, 7, 0, dst, src, width, dither_height, dither, tmp, tmp2
-%define dst_strideq r2m
-%define src_strideq r3m
-    mov       widthq, r4m
-    mov       dither_heightq, r5m
-    mov       ditherq, r6m ; log2_scale
-%endif
-    add       widthq, 7
-    mov       tmpq, src_strideq
-    and       widthq, ~7
-    sub       dst_strideq, widthq
-    movd      m5, ditherd ; log2_scale
-    xor       ditherq, -1 ; log2_scale
-    mov       tmp2q, tmpq
-    add       ditherq, 7 ; log2_scale
-    neg       tmpq
-    sub       tmp2q, widthq
-    movd      m2, ditherd ; log2_scale
-    add       tmp2q, tmp2q
-    lea       ditherq, [pb_dither]
-    mov       src_strideq, tmp2q
-    shl       tmpq, 4
-    lea       dither_heightq, [ditherq+dither_heightq*8]
-    pxor      m7, m7
-
-.loop_height:
-    movq      m3, [ditherq]
-    movq      m4, m3
-    punpcklbw m3, m7
-    punpckhbw m4, m7
-    mov       tmp2q, widthq
-    psraw     m3, m5
-    psraw     m4, m5
-
-.loop_width:
-    movq      [srcq+tmpq], m7
-    movq      m0, [srcq]
-    movq      m1, [srcq+8]
-    movq      [srcq+tmpq+8], m7
-    paddw     m0, m3
-    paddw     m1, m4
-    movq      [srcq], m7
-    psraw     m0, m2
-    psraw     m1, m2
-    movq      [srcq+8], m7
-    packuswb  m0, m1
-    add       srcq, 16
-    movq      [dstq], m0
-    add       dstq, 8
-    sub       tmp2q, 8
-    jg .loop_width
-
-    add       srcq, src_strideq
-    add       ditherq, 8
-    add       dstq, dst_strideq
-    cmp       ditherq, dither_heightq
-    jl .loop_height
-    RET
-
-;void ff_store_slice2_mmx(uint8_t *dst, int16_t *src,
-;                         ptrdiff_t dst_stride, ptrdiff_t src_stride,
-;                         ptrdiff_t width, ptrdiff_t height, ptrdiff_t log2_scale)
-%if ARCH_X86_64
-cglobal store_slice2, 7, 9, 0, dst, src, dst_stride, src_stride, width, dither_height, dither, tmp, tmp2
-%else
-cglobal store_slice2, 0, 7, 0, dst, src, width, dither_height, dither, tmp, tmp2
-%define dst_strideq r2m
-%define src_strideq r3m
-    mov       dstq, dstm
-    mov       srcq, srcm
-    mov       widthq, r4m
-    mov       dither_heightq, r5m
-    mov       ditherq, r6m ; log2_scale
-%endif
-    add       widthq, 7
-    mov       tmpq, src_strideq
-    and       widthq, ~7
-    sub       dst_strideq, widthq
-    movd      m5, ditherd ; log2_scale
-    xor       ditherq, -1 ; log2_scale
-    mov       tmp2q, tmpq
-    add       ditherq, 7 ; log2_scale
-    sub       tmp2q, widthq
-    movd      m2, ditherd ; log2_scale
-    add       tmp2q, tmp2q
-    lea       ditherq, [pb_dither]
-    mov       src_strideq, tmp2q
-    shl       tmpq, 5
-    lea       dither_heightq, [ditherq+dither_heightq*8]
-    pxor      m7, m7
-
-.loop_height:
-    movq      m3, [ditherq]
-    movq      m4, m3
-    punpcklbw m3, m7
-    punpckhbw m4, m7
-    mov       tmp2q,widthq
-    psraw     m3, m5
-    psraw     m4, m5
-
-.loop_width:
-    movq      m0, [srcq]
-    movq      m1, [srcq+8]
-    paddw     m0, m3
-    paddw     m0, [srcq+tmpq]
-    paddw     m1, m4
-    movq      m6, [srcq+tmpq+8]
-    movq      [srcq+tmpq], m7
-    psraw     m0, m2
-    paddw     m1, m6
-    movq      [srcq+tmpq+8], m7
-    psraw     m1, m2
-    packuswb  m0, m1
-    movq      [dstq], m0
-    add       srcq, 16
-    add       dstq, 8
-    sub       tmp2q, 8
-    jg .loop_width
-
-    add       srcq, src_strideq
-    add       ditherq, 8
-    add       dstq, dst_strideq
-    cmp       ditherq, dither_heightq
-    jl .loop_height
-    RET
-
-;void ff_mul_thrmat_mmx(int16_t *thr_adr_noq, int16_t *thr_adr, int q);
-cglobal mul_thrmat, 3, 3, 0, thrn, thr, q
-    movd      m7, qd
-    movq      m0, [thrnq]
-    punpcklwd m7, m7
-    movq      m1, [thrnq+8]
-    punpckldq m7, m7
-    pmullw    m0, m7
-    movq      m2, [thrnq+8*2]
-    pmullw    m1, m7
-    movq      m3, [thrnq+8*3]
-    pmullw    m2, m7
-    movq      [thrq], m0
-    movq      m4, [thrnq+8*4]
-    pmullw    m3, m7
-    movq      [thrq+8], m1
-    movq      m5, [thrnq+8*5]
-    pmullw    m4, m7
-    movq      [thrq+8*2], m2
-    movq      m6, [thrnq+8*6]
-    pmullw    m5, m7
-    movq      [thrq+8*3], m3
-    movq      m0, [thrnq+8*7]
-    pmullw    m6, m7
-    movq      [thrq+8*4], m4
-    movq      m1, [thrnq+8*7+8]
-    pmullw    m0, m7
-    movq      [thrq+8*5], m5
-    movq      m2, [thrnq+8*7+8*2]
-    pmullw    m1, m7
-    movq      [thrq+8*6], m6
-    movq      m3, [thrnq+8*7+8*3]
-    pmullw    m2, m7
-    movq      [thrq+8*7], m0
-    movq      m4, [thrnq+8*7+8*4]
-    pmullw    m3, m7
-    movq      [thrq+8*7+8], m1
-    movq      m5, [thrnq+8*7+8*5]
-    pmullw    m4, m7
-    movq      [thrq+8*7+8*2], m2
-    movq      m6, [thrnq+8*7+8*6]
-    pmullw    m5, m7
-    movq      [thrq+8*7+8*3], m3
-    movq      m0, [thrnq+14*8]
-    pmullw    m6, m7
-    movq      [thrq+8*7+8*4], m4
-    movq      m1, [thrnq+14*8+8]
-    pmullw    m0, m7
-    movq      [thrq+8*7+8*5], m5
-    pmullw    m1, m7
-    movq      [thrq+8*7+8*6], m6
-    movq      [thrq+14*8], m0
-    movq      [thrq+14*8+8], m1
-    RET
-
-%macro COLUMN_FDCT 1-3 0, 0
-    movq      m1, [srcq+DCTSIZE*0*2]
-    movq      m7, [srcq+DCTSIZE*3*2]
-    movq      m0, m1
-    paddw     m1, [srcq+DCTSIZE*7*2]
-    movq      m3, m7
-    paddw     m7, [srcq+DCTSIZE*4*2]
-    movq      m5, m1
-    movq      m6, [srcq+DCTSIZE*1*2]
-    psubw     m1, m7
-    movq      m2, [srcq+DCTSIZE*2*2]
-    movq      m4, m6
-    paddw     m6, [srcq+DCTSIZE*6*2]
-    paddw     m5, m7
-    paddw     m2, [srcq+DCTSIZE*5*2]
-    movq      m7, m6
-    paddw     m6, m2
-    psubw     m7, m2
-    movq      m2, m5
-    paddw     m5, m6
-    psubw     m2, m6
-    paddw     m7, m1
-    movq      m6, [thrq+4*16+%2]
-    psllw     m7, 2
-    psubw     m5, [thrq+%2]
-    psubw     m2, m6
-    paddusw   m5, [thrq+%2]
-    paddusw   m2, m6
-    pmulhw    m7, [pw_2D41]
-    paddw     m5, [thrq+%2]
-    paddw     m2, m6
-    psubusw   m5, [thrq+%2]
-    psubusw   m2, m6
-    paddw     m5, [pw_2]
-    movq      m6, m2
-    paddw     m2, m5
-    psubw     m5, m6
-    movq      m6, m1
-    paddw     m1, m7
-    psubw     m1, [thrq+2*16+%2]
-    psubw     m6, m7
-    movq      m7, [thrq+6*16+%2]
-    psraw     m5, 2
-    paddusw   m1, [thrq+2*16+%2]
-    psubw     m6, m7
-    paddw     m1, [thrq+2*16+%2]
-    paddusw   m6, m7
-    psubusw   m1, [thrq+2*16+%2]
-    paddw     m6, m7
-    psubw     m3, [srcq+DCTSIZE*4*2]
-    psubusw   m6, m7
-    movq      m7, m1
-    psraw     m2, 2
-    psubw     m4, [srcq+DCTSIZE*6*2]
-    psubw     m1, m6
-    psubw     m0, [srcq+DCTSIZE*7*2]
-    paddw     m6, m7
-    psraw     m6, 2
-    movq      m7, m2
-    pmulhw    m1, [pw_5A82]
-    paddw     m2, m6
-    movq      [rsp], m2
-    psubw     m7, m6
-    movq      m2, [srcq+DCTSIZE*2*2]
-    psubw     m1, m6
-    psubw     m2, [srcq+DCTSIZE*5*2]
-    movq      m6, m5
-    movq      [rsp+8*3], m7
-    paddw     m3, m2
-    paddw     m2, m4
-    paddw     m4, m0
-    movq      m7, m3
-    psubw     m3, m4
-    psllw     m3, 2
-    psllw     m7, 2
-    pmulhw    m3, [pw_187E]
-    psllw     m4, 2
-    pmulhw    m7, [pw_22A3]
-    psllw     m2, 2
-    pmulhw    m4, [pw_539F]
-    paddw     m5, m1
-    pmulhw    m2, [pw_2D41]
-    psubw     m6, m1
-    paddw     m7, m3
-    movq      [rsp+8], m5
-    paddw     m4, m3
-    movq      m3, [thrq+3*16+%2]
-    movq      m1, m0
-    movq      [rsp+8*2], m6
-    psubw     m1, m2
-    paddw     m0, m2
-    movq      m5, m1
-    movq      m2, [thrq+5*16+%2]
-    psubw     m1, m7
-    paddw     m5, m7
-    psubw     m1, m3
-    movq      m7, [thrq+16+%2]
-    psubw     m5, m2
-    movq      m6, m0
-    paddw     m0, m4
-    paddusw   m1, m3
-    psubw     m6, m4
-    movq      m4, [thrq+7*16+%2]
-    psubw     m0, m7
-    psubw     m6, m4
-    paddusw   m5, m2
-    paddusw   m6, m4
-    paddw     m1, m3
-    paddw     m5, m2
-    paddw     m6, m4
-    psubusw   m1, m3
-    psubusw   m5, m2
-    psubusw   m6, m4
-    movq      m4, m1
-    por       m4, m5
-    paddusw   m0, m7
-    por       m4, m6
-    paddw     m0, m7
-    packssdw  m4, m4
-    psubusw   m0, m7
-    movd      tmpd, m4
-    or        tmpd, tmpd
-    jnz %1
-    movq      m4, [rsp]
-    movq      m1, m0
-    pmulhw    m0, [pw_3642]
-    movq      m2, m1
-    movq      m5, [outq+DCTSIZE*0*2]
-    movq      m3, m2
-    pmulhw    m1, [pw_2441]
-    paddw     m5, m4
-    movq      m6, [rsp+8]
-    psraw     m3, 2
-    pmulhw    m2, [pw_0CBB]
-    psubw     m4, m3
-    movq      m7, [outq+DCTSIZE*1*2]
-    paddw     m5, m3
-    movq      [outq+DCTSIZE*7*2], m4
-    paddw     m7, m6
-    movq      m3, [rsp+8*2]
-    psubw     m6, m0
-    movq      m4, [outq+DCTSIZE*2*2]
-    paddw     m7, m0
-    movq      [outq], m5
-    paddw     m4, m3
-    movq      [outq+DCTSIZE*6*2], m6
-    psubw     m3, m1
-    movq      m5, [outq+DCTSIZE*5*2]
-    paddw     m4, m1
-    movq      m6, [outq+DCTSIZE*3*2]
-    paddw     m5, m3
-    movq      m0, [rsp+8*3]
-    add       srcq, 8+%3
-    movq      [outq+DCTSIZE*1*2], m7
-    paddw     m6, m0
-    movq      [outq+DCTSIZE*2*2], m4
-    psubw     m0, m2
-    movq      m7, [outq+DCTSIZE*4*2]
-    paddw     m6, m2
-    movq      [outq+DCTSIZE*5*2], m5
-    paddw     m7, m0
-    movq      [outq+DCTSIZE*3*2], m6
-    movq      [outq+DCTSIZE*4*2], m7
-    add       outq, 8+%3
-%endmacro
-
-%macro COLUMN_IDCT 0-1 0
-    movq      m3, m5
-    psubw     m5, m1
-    psllw     m5, 1
-    paddw     m3, m1
-    movq      m2, m0
-    psubw     m0, m6
-    movq      m1, m5
-    psllw     m0, 1
-    pmulhw    m1, [pw_AC62]
-    paddw     m5, m0
-    pmulhw    m5, [pw_3B21]
-    paddw     m2, m6
-    pmulhw    m0, [pw_22A3]
-    movq      m7, m2
-    movq      m4, [rsp]
-    psubw     m2, m3
-    psllw     m2, 1
-    paddw     m7, m3
-    pmulhw    m2, [pw_2D41]
-    movq      m6, m4
-    psraw     m7, 2
-    paddw     m4, [outq]
-    psubw     m6, m7
-    movq      m3, [rsp+8]
-    paddw     m4, m7
-    movq      [outq+DCTSIZE*7*2], m6
-    paddw     m1, m5
-    movq      [outq], m4
-    psubw     m1, m7
-    movq      m7, [rsp+8*2]
-    psubw     m0, m5
-    movq      m6, [rsp+8*3]
-    movq      m5, m3
-    paddw     m3, [outq+DCTSIZE*1*2]
-    psubw     m5, m1
-    psubw     m2, m1
-    paddw     m3, m1
-    movq      [outq+DCTSIZE*6*2], m5
-    movq      m4, m7
-    paddw     m7, [outq+DCTSIZE*2*2]
-    psubw     m4, m2
-    paddw     m4, [outq+DCTSIZE*5*2]
-    paddw     m7, m2
-    movq      [outq+DCTSIZE*1*2], m3
-    paddw     m0, m2
-    movq      [outq+DCTSIZE*2*2], m7
-    movq      m1, m6
-    paddw     m6, [outq+DCTSIZE*4*2]
-    psubw     m1, m0
-    paddw     m1, [outq+DCTSIZE*3*2]
-    paddw     m6, m0
-    movq      [outq+DCTSIZE*5*2], m4
-    add       srcq, 8+%1
-    movq      [outq+DCTSIZE*4*2], m6
-    movq      [outq+DCTSIZE*3*2], m1
-    add       outq, 8+%1
-%endmacro
-
-;void ff_column_fidct_mmx(int16_t *thr_adr, int16_t *data, int16_t *output, int cnt);
-cglobal column_fidct, 4, 5, 0, 32, thr, src, out, cnt, tmp
-.fdct1:
-    COLUMN_FDCT .idct1
-    jmp .fdct2
-
-.idct1:
-    COLUMN_IDCT
-
-.fdct2:
-    COLUMN_FDCT .idct2, 8, 16
-    sub    cntd, 2
-    jg .fdct1
-    RET
-
-.idct2:
-    COLUMN_IDCT 16
-    sub    cntd, 2
-    jg .fdct1
-    RET
-
-;void ff_row_idct_mmx(int16_t *workspace, int16_t *output_adr, ptrdiff_t output_stride, int cnt);
-cglobal row_idct, 4, 5, 0, 16, src, dst, stride, cnt, stride3
-    add       strideq, strideq
-    lea       stride3q, [strideq+strideq*2]
-.loop:
-    movq      m0, [srcq+DCTSIZE*0*2]
-    movq      m1, [srcq+DCTSIZE*1*2]
-    movq      m4, m0
-    movq      m2, [srcq+DCTSIZE*2*2]
-    punpcklwd m0, m1
-    movq      m3, [srcq+DCTSIZE*3*2]
-    punpckhwd m4, m1
-    movq      m7, m2
-    punpcklwd m2, m3
-    movq      m6, m0
-    punpckldq m0, m2
-    punpckhdq m6, m2
-    movq      m5, m0
-    punpckhwd m7, m3
-    psubw     m0, m6
-    pmulhw    m0, [pw_5A82]
-    movq      m2, m4
-    punpckldq m4, m7
-    paddw     m5, m6
-    punpckhdq m2, m7
-    movq      m1, m4
-    psllw     m0, 2
-    paddw     m4, m2
-    movq      m3, [srcq+DCTSIZE*0*2+8]
-    psubw     m1, m2
-    movq      m2, [srcq+DCTSIZE*1*2+8]
-    psubw     m0, m5
-    movq      m6, m4
-    paddw     m4, m5
-    psubw     m6, m5
-    movq      m7, m1
-    movq      m5, [srcq+DCTSIZE*2*2+8]
-    paddw     m1, m0
-    movq      [rsp], m4
-    movq      m4, m3
-    movq      [rsp+8], m6
-    punpcklwd m3, m2
-    movq      m6, [srcq+DCTSIZE*3*2+8]
-    punpckhwd m4, m2
-    movq      m2, m5
-    punpcklwd m5, m6
-    psubw     m7, m0
-    punpckhwd m2, m6
-    movq      m0, m3
-    punpckldq m3, m5
-    punpckhdq m0, m5
-    movq      m5, m4
-    movq      m6, m3
-    punpckldq m4, m2
-    psubw     m3, m0
-    punpckhdq m5, m2
-    paddw     m6, m0
-    movq      m2, m4
-    movq      m0, m3
-    psubw     m4, m5
-    pmulhw    m0, [pw_AC62]
-    paddw     m3, m4
-    pmulhw    m3, [pw_3B21]
-    paddw     m2, m5
-    pmulhw    m4, [pw_22A3]
-    movq      m5, m2
-    psubw     m2, m6
-    paddw     m5, m6
-    pmulhw    m2, [pw_2D41]
-    paddw     m0, m3
-    psllw     m0, 3
-    psubw     m4, m3
-    movq      m6, [rsp]
-    movq      m3, m1
-    psllw     m4, 3
-    psubw     m0, m5
-    psllw     m2, 3
-    paddw     m1, m0
-    psubw     m2, m0
-    psubw     m3, m0
-    paddw     m4, m2
-    movq      m0, m7
-    paddw     m7, m2
-    psubw     m0, m2
-    movq      m2, [pw_4]
-    psubw     m6, m5
-    paddw     m5, [rsp]
-    paddw     m1, m2
-    paddw     m5, m2
-    psraw     m1, 3
-    paddw     m7, m2
-    psraw     m5, 3
-    paddw     m5, [dstq]
-    psraw     m7, 3
-    paddw     m1, [dstq+strideq*1]
-    paddw     m0, m2
-    paddw     m7, [dstq+strideq*2]
-    paddw     m3, m2
-    movq      [dstq], m5
-    paddw     m6, m2
-    movq      [dstq+strideq*1], m1
-    psraw     m0, 3
-    movq      [dstq+strideq*2], m7
-    add       dstq, stride3q
-    movq      m5, [rsp+8]
-    psraw     m3, 3
-    paddw     m0, [dstq+strideq*2]
-    psubw     m5, m4
-    paddw     m3, [dstq+stride3q*1]
-    psraw     m6, 3
-    paddw     m4, [rsp+8]
-    paddw     m5, m2
-    paddw     m6, [dstq+strideq*4]
-    paddw     m4, m2
-    movq      [dstq+strideq*2], m0
-    psraw     m5, 3
-    paddw     m5, [dstq]
-    psraw     m4, 3
-    paddw     m4, [dstq+strideq*1]
-    add       srcq, DCTSIZE*2*4
-    movq      [dstq+stride3q*1], m3
-    movq      [dstq+strideq*4], m6
-    movq      [dstq], m5
-    movq      [dstq+strideq*1], m4
-    sub       dstq, stride3q
-    add       dstq, 8
-    dec       r3d
-    jnz .loop
-    RET
-
-;void ff_row_fdct_mmx(int16_t *data, const uint8_t *pixels, ptrdiff_t line_size, int cnt);
-cglobal row_fdct, 4, 5, 0, 16, src, pix, stride, cnt, stride3
-    lea       stride3q, [strideq+strideq*2]
-.loop:
-    movd      m0, [pixq]
-    pxor      m7, m7
-    movd      m1, [pixq+strideq*1]
-    punpcklbw m0, m7
-    movd      m2, [pixq+strideq*2]
-    punpcklbw m1, m7
-    punpcklbw m2, m7
-    add       pixq,stride3q
-    movq      m5, m0
-    movd      m3, [pixq+strideq*4]
-    movq      m6, m1
-    movd      m4, [pixq+stride3q*1]
-    punpcklbw m3, m7
-    psubw     m5, m3
-    punpcklbw m4, m7
-    paddw     m0, m3
-    psubw     m6, m4
-    movd      m3, [pixq+strideq*2]
-    paddw     m1, m4
-    movq      [rsp], m5
-    punpcklbw m3, m7
-    movq      [rsp+8], m6
-    movq      m4, m2
-    movd      m5, [pixq]
-    paddw     m2, m3
-    movd      m6, [pixq+strideq*1]
-    punpcklbw m5, m7
-    psubw     m4, m3
-    punpcklbw m6, m7
-    movq      m3, m5
-    paddw     m5, m6
-    psubw     m3, m6
-    movq      m6, m0
-    movq      m7, m1
-    psubw     m0, m5
-    psubw     m1, m2
-    paddw     m7, m2
-    paddw     m1, m0
-    movq      m2, m7
-    psllw     m1, 2
-    paddw     m6, m5
-    pmulhw    m1, [pw_2D41]
-    paddw     m7, m6
-    psubw     m6, m2
-    movq      m5, m0
-    movq      m2, m7
-    punpcklwd m7, m6
-    paddw     m0, m1
-    punpckhwd m2, m6
-    psubw     m5, m1
-    movq      m6, m0
-    movq      m1, [rsp+8]
-    punpcklwd m0, m5
-    punpckhwd m6, m5
-    movq      m5, m0
-    punpckldq m0, m7
-    paddw     m3, m4
-    punpckhdq m5, m7
-    movq      m7, m6
-    movq      [srcq+DCTSIZE*0*2], m0
-    punpckldq m6, m2
-    movq      [srcq+DCTSIZE*1*2], m5
-    punpckhdq m7, m2
-    movq      [srcq+DCTSIZE*2*2], m6
-    paddw     m4, m1
-    movq      [srcq+DCTSIZE*3*2], m7
-    psllw     m3, 2
-    movq      m2, [rsp]
-    psllw     m4, 2
-    pmulhw    m4, [pw_2D41]
-    paddw     m1, m2
-    psllw     m1, 2
-    movq      m0, m3
-    pmulhw    m0, [pw_22A3]
-    psubw     m3, m1
-    pmulhw    m3, [pw_187E]
-    movq      m5, m2
-    pmulhw    m1, [pw_539F]
-    psubw     m2, m4
-    paddw     m5, m4
-    movq      m6, m2
-    paddw     m0, m3
-    movq      m7, m5
-    paddw     m2, m0
-    psubw     m6, m0
-    movq      m4, m2
-    paddw     m1, m3
-    punpcklwd m2, m6
-    paddw     m5, m1
-    punpckhwd m4, m6
-    psubw     m7, m1
-    movq      m6, m5
-    punpcklwd m5, m7
-    punpckhwd m6, m7
-    movq      m7, m2
-    punpckldq m2, m5
-    sub       pixq, stride3q
-    punpckhdq m7, m5
-    movq      m5, m4
-    movq      [srcq+DCTSIZE*0*2+8], m2
-    punpckldq m4, m6
-    movq      [srcq+DCTSIZE*1*2+8], m7
-    punpckhdq m5, m6
-    movq      [srcq+DCTSIZE*2*2+8], m4
-    add       pixq, 4
-    movq      [srcq+DCTSIZE*3*2+8], m5
-    add       srcq, DCTSIZE*4*2
-    dec       cntd
-    jnz .loop
-    RET
diff --git a/libavfilter/x86/vf_fspp_init.c b/libavfilter/x86/vf_fspp_init.c
deleted file mode 100644
index 8e00317..0000000
--- a/libavfilter/x86/vf_fspp_init.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
- * Copyright (C) 2005 Nikolaj Poroshin <porosh3@psu.ru>
- *
- * 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.
- */
-
-#include "libavutil/attributes.h"
-#include "libavutil/x86/cpu.h"
-#include "libavfilter/vf_fspp.h"
-
-void ff_store_slice_mmx(uint8_t *dst, int16_t *src,
-                        ptrdiff_t dst_stride, ptrdiff_t src_stride,
-                        ptrdiff_t width, ptrdiff_t height, ptrdiff_t log2_scale);
-void ff_store_slice2_mmx(uint8_t *dst, int16_t *src,
-                         ptrdiff_t dst_stride, ptrdiff_t src_stride,
-                         ptrdiff_t width, ptrdiff_t height, ptrdiff_t log2_scale);
-void ff_mul_thrmat_mmx(int16_t *thr_adr_noq, int16_t *thr_adr, int q);
-void ff_column_fidct_mmx(int16_t *thr_adr, int16_t *data, int16_t *output, int cnt);
-void ff_row_idct_mmx(int16_t *workspace, int16_t *output_adr, ptrdiff_t output_stride, int cnt);
-void ff_row_fdct_mmx(int16_t *data, const uint8_t *pixels, ptrdiff_t line_size, int cnt);
-
-av_cold void ff_fspp_init_x86(FSPPContext *s)
-{
-    int cpu_flags = av_get_cpu_flags();
-
-    if (EXTERNAL_MMX(cpu_flags)) {
-        s->store_slice  = ff_store_slice_mmx;
-        s->store_slice2 = ff_store_slice2_mmx;
-        s->mul_thrmat   = ff_mul_thrmat_mmx;
-        s->column_fidct = ff_column_fidct_mmx;
-        s->row_idct     = ff_row_idct_mmx;
-        s->row_fdct     = ff_row_fdct_mmx;
-    }
-}
diff --git a/libavfilter/x86/vf_hqdn3d_init.c b/libavfilter/x86/vf_hqdn3d_init.c
deleted file mode 100644
index 43aca90..0000000
--- a/libavfilter/x86/vf_hqdn3d_init.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2012 Loren Merritt
- *
- * 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.
- */
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include "libavutil/attributes.h"
-#include "libavfilter/vf_hqdn3d.h"
-#include "config.h"
-
-void ff_hqdn3d_row_8_x86(uint8_t *src, uint8_t *dst, uint16_t *line_ant,
-                         uint16_t *frame_ant, ptrdiff_t w, int16_t *spatial,
-                         int16_t *temporal);
-void ff_hqdn3d_row_9_x86(uint8_t *src, uint8_t *dst, uint16_t *line_ant,
-                         uint16_t *frame_ant, ptrdiff_t w, int16_t *spatial,
-                         int16_t *temporal);
-void ff_hqdn3d_row_10_x86(uint8_t *src, uint8_t *dst, uint16_t *line_ant,
-                          uint16_t *frame_ant, ptrdiff_t w, int16_t *spatial,
-                          int16_t *temporal);
-void ff_hqdn3d_row_16_x86(uint8_t *src, uint8_t *dst, uint16_t *line_ant,
-                          uint16_t *frame_ant, ptrdiff_t w, int16_t *spatial,
-                          int16_t *temporal);
-
-av_cold void ff_hqdn3d_init_x86(HQDN3DContext *hqdn3d)
-{
-#if HAVE_X86ASM
-    hqdn3d->denoise_row[8]  = ff_hqdn3d_row_8_x86;
-    hqdn3d->denoise_row[9]  = ff_hqdn3d_row_9_x86;
-    hqdn3d->denoise_row[10] = ff_hqdn3d_row_10_x86;
-    hqdn3d->denoise_row[16] = ff_hqdn3d_row_16_x86;
-#endif /* HAVE_X86ASM */
-}
diff --git a/libavfilter/x86/vf_interlace.asm b/libavfilter/x86/vf_interlace.asm
deleted file mode 100644
index f4a405c..0000000
--- a/libavfilter/x86/vf_interlace.asm
+++ /dev/null
@@ -1,226 +0,0 @@
-;*****************************************************************************
-;* x86-optimized functions for interlace filter
-;*
-;* Copyright (C) 2014 Kieran Kunhya <kierank@obe.tv>
-;* Copyright (c) 2014 Michael Niedermayer <michaelni@gmx.at>
-;* Copyright (c) 2017 Thomas Mundt <tmundt75@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.
-;******************************************************************************
-
-%include "libavutil/x86/x86util.asm"
-
-SECTION_RODATA
-
-pw_4: times 8 dw 4
-
-SECTION .text
-
-%macro LOWPASS 1
-    add dstq, hq
-    add srcq, hq
-    add mrefq, srcq
-    add prefq, srcq
-    neg hq
-
-    pcmpeq%1 m6, m6
-
-    test hq, mmsize
-    je .loop
-
-    ;process 1 * mmsize
-    movu m0, [mrefq+hq]
-    pavg%1 m0, [prefq+hq]
-    pxor m0, m6
-    pxor m2, m6, [srcq+hq]
-    pavg%1 m0, m2
-    pxor m0, m6
-    movu [dstq+hq], m0
-    add hq, mmsize
-    jge .end
-
-.loop:
-    movu m0, [mrefq+hq]
-    movu m1, [mrefq+hq+mmsize]
-    pavg%1 m0, [prefq+hq]
-    pavg%1 m1, [prefq+hq+mmsize]
-    pxor m0, m6
-    pxor m1, m6
-    pxor m2, m6, [srcq+hq]
-    pxor m3, m6, [srcq+hq+mmsize]
-    pavg%1 m0, m2
-    pavg%1 m1, m3
-    pxor m0, m6
-    pxor m1, m6
-    movu [dstq+hq], m0
-    movu [dstq+hq+mmsize], m1
-
-    add hq, 2*mmsize
-    jl .loop
-
-.end:
-    REP_RET
-%endmacro
-
-%macro LOWPASS_LINE 0
-cglobal lowpass_line, 5, 5, 7, dst, h, src, mref, pref
-    LOWPASS b
-
-cglobal lowpass_line_16, 5, 5, 7, dst, h, src, mref, pref
-    shl hq, 1
-    LOWPASS w
-%endmacro
-
-%macro LOWPASS_LINE_COMPLEX 0
-cglobal lowpass_line_complex, 5, 5, 8, dst, h, src, mref, pref
-    pxor m7, m7
-.loop:
-    movu m0, [srcq+mrefq]
-    movu m2, [srcq+prefq]
-    mova m1, m0
-    mova m3, m2
-    punpcklbw m0, m7
-    punpcklbw m2, m7
-    punpckhbw m1, m7
-    punpckhbw m3, m7
-    paddw m0, m2
-    paddw m1, m3
-    mova m6, m0
-    mova m5, m1
-    movu m2, [srcq]
-    mova m3, m2
-    punpcklbw m2, m7
-    punpckhbw m3, m7
-    paddw m0, m2
-    paddw m1, m3
-    psllw m2, 1
-    psllw m3, 1
-    paddw m0, m2
-    paddw m1, m3
-    psllw m0, 1
-    psllw m1, 1
-    pcmpgtw m6, m2
-    pcmpgtw m5, m3
-    packsswb m6, m5
-    movu m2, [srcq+mrefq*2]
-    movu m4, [srcq+prefq*2]
-    mova m3, m2
-    mova m5, m4
-    punpcklbw m2, m7
-    punpcklbw m4, m7
-    punpckhbw m3, m7
-    punpckhbw m5, m7
-    paddw m2, m4
-    paddw m3, m5
-    paddw m0, [pw_4]
-    paddw m1, [pw_4]
-    psubusw m0, m2
-    psubusw m1, m3
-    psrlw m0, 3
-    psrlw m1, 3
-    packuswb m0, m1
-    mova m1, m0
-    movu m2, [srcq]
-    pmaxub m0, m2
-    pminub m1, m2
-    pand m0, m6
-    pandn m6, m1
-    por m0, m6
-    movu [dstq], m0
-
-    add dstq, mmsize
-    add srcq, mmsize
-    sub hd, mmsize
-    jg .loop
-REP_RET
-
-cglobal lowpass_line_complex_12, 5, 5, 8, 16, dst, h, src, mref, pref, clip_max
-    movd m7, DWORD clip_maxm
-    SPLATW m7, m7, 0
-    movu [rsp], m7
-.loop:
-    movu m0, [srcq+mrefq]
-    movu m1, [srcq+mrefq+mmsize]
-    movu m2, [srcq+prefq]
-    movu m3, [srcq+prefq+mmsize]
-    paddw m0, m2
-    paddw m1, m3
-    mova m6, m0
-    mova m7, m1
-    movu m2, [srcq]
-    movu m3, [srcq+mmsize]
-    paddw m0, m2
-    paddw m1, m3
-    psllw m2, 1
-    psllw m3, 1
-    paddw m0, m2
-    paddw m1, m3
-    psllw m0, 1
-    psllw m1, 1
-    pcmpgtw m6, m2
-    pcmpgtw m7, m3
-    movu m2, [srcq+2*mrefq]
-    movu m3, [srcq+2*mrefq+mmsize]
-    movu m4, [srcq+2*prefq]
-    movu m5, [srcq+2*prefq+mmsize]
-    paddw m2, m4
-    paddw m3, m5
-    paddw m0, [pw_4]
-    paddw m1, [pw_4]
-    psubusw m0, m2
-    psubusw m1, m3
-    psrlw m0, 3
-    psrlw m1, 3
-    pminsw m0, [rsp]
-    pminsw m1, [rsp]
-    mova m2, m0
-    mova m3, m1
-    movu m4, [srcq]
-    pmaxsw m0, m4
-    pminsw m2, m4
-    movu m4, [srcq + mmsize]
-    pmaxsw m1, m4
-    pminsw m3, m4
-    pand m0, m6
-    pand m1, m7
-    pandn m6, m2
-    pandn m7, m3
-    por m0, m6
-    por m1, m7
-    movu [dstq], m0
-    movu [dstq+mmsize], m1
-
-    add dstq, 2*mmsize
-    add srcq, 2*mmsize
-    sub hd, mmsize
-    jg .loop
-REP_RET
-%endmacro
-
-INIT_XMM sse2
-LOWPASS_LINE
-
-INIT_XMM avx
-LOWPASS_LINE
-
-%if HAVE_AVX2_EXTERNAL
-INIT_YMM avx2
-LOWPASS_LINE
-%endif
-
-INIT_XMM sse2
-LOWPASS_LINE_COMPLEX
diff --git a/libavfilter/x86/vf_pp7.asm b/libavfilter/x86/vf_pp7.asm
deleted file mode 100644
index 7b3e5cf..0000000
--- a/libavfilter/x86/vf_pp7.asm
+++ /dev/null
@@ -1,57 +0,0 @@
-;*****************************************************************************
-;* x86-optimized functions for pp7 filter
-;*
-;* Copyright (c) 2005 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.
-;******************************************************************************
-
-%include "libavutil/x86/x86util.asm"
-
-SECTION .text
-
-INIT_MMX mmx
-
-;void ff_pp7_dctB_mmx(int16_t *dst, int16_t *src)
-cglobal pp7_dctB, 2, 2, 0, dst, src
-    movq   m0, [srcq]
-    movq   m1, [srcq+mmsize*1]
-    paddw  m0, [srcq+mmsize*6]
-    paddw  m1, [srcq+mmsize*5]
-    movq   m2, [srcq+mmsize*2]
-    movq   m3, [srcq+mmsize*3]
-    paddw  m2, [srcq+mmsize*4]
-    paddw  m3, m3
-    movq   m4, m3
-    psubw  m3, m0
-    paddw  m4, m0
-    movq   m0, m2
-    psubw  m2, m1
-    paddw  m0, m1
-    movq   m1, m4
-    psubw  m4, m0
-    paddw  m1, m0
-    movq   m0, m3
-    psubw  m3, m2
-    psubw  m3, m2
-    paddw  m2, m0
-    paddw  m2, m0
-    movq   [dstq], m1
-    movq   [dstq+mmsize*2], m4
-    movq   [dstq+mmsize*1], m2
-    movq   [dstq+mmsize*3], m3
-    RET
diff --git a/libavfilter/x86/vf_pp7_init.c b/libavfilter/x86/vf_pp7_init.c
deleted file mode 100644
index 165b0dd..0000000
--- a/libavfilter/x86/vf_pp7_init.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2005 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.
- */
-
-#include "libavutil/attributes.h"
-#include "libavutil/cpu.h"
-#include "libavutil/x86/cpu.h"
-#include "libavfilter/vf_pp7.h"
-
-void ff_pp7_dctB_mmx(int16_t *dst, int16_t *src);
-
-av_cold void ff_pp7_init_x86(PP7Context *p)
-{
-    int cpu_flags = av_get_cpu_flags();
-
-    if (EXTERNAL_MMX(cpu_flags))
-        p->dctB = ff_pp7_dctB_mmx;
-}
diff --git a/libavfilter/x86/vf_pullup.asm b/libavfilter/x86/vf_pullup.asm
deleted file mode 100644
index 26c2a27..0000000
--- a/libavfilter/x86/vf_pullup.asm
+++ /dev/null
@@ -1,178 +0,0 @@
-;*****************************************************************************
-;* x86-optimized functions for pullup filter
-;*
-;* 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.
-;******************************************************************************
-
-%include "libavutil/x86/x86util.asm"
-
-SECTION .text
-
-INIT_MMX mmx
-cglobal pullup_filter_diff, 3, 5, 8, first, second, size
-    mov        r3, 4
-    pxor       m4, m4
-    pxor       m7, m7
-
-.loop:
-    movq       m0, [firstq]
-    movq       m2, [firstq]
-    add        firstq, sizeq
-    movq       m1, [secondq]
-    add        secondq, sizeq
-    psubusb    m2, m1
-    psubusb    m1, m0
-    movq       m0, m2
-    movq       m3, m1
-    punpcklbw  m0, m7
-    punpcklbw  m1, m7
-    punpckhbw  m2, m7
-    punpckhbw  m3, m7
-    paddw      m4, m0
-    paddw      m4, m1
-    paddw      m4, m2
-    paddw      m4, m3
-
-    dec        r3
-    jnz .loop
-
-    movq       m3, m4
-    punpcklwd  m4, m7
-    punpckhwd  m3, m7
-    paddd      m3, m4
-    movd      eax, m3
-    psrlq      m3, 32
-    movd      r4d, m3
-    add       eax, r4d
-    RET
-
-INIT_MMX mmx
-cglobal pullup_filter_comb, 3, 5, 8, first, second, size
-    mov        r3, 4
-    pxor       m6, m6
-    pxor       m7, m7
-    sub        secondq, sizeq
-
-.loop:
-    movq       m0, [firstq]
-    movq       m1, [secondq]
-    punpcklbw  m0, m7
-    movq       m2, [secondq+sizeq]
-    punpcklbw  m1, m7
-    punpcklbw  m2, m7
-    paddw      m0, m0
-    paddw      m1, m2
-    movq       m2, m0
-    psubusw    m0, m1
-    psubusw    m1, m2
-    paddw      m6, m0
-    paddw      m6, m1
-
-    movq       m0, [firstq]
-    movq       m1, [secondq]
-    punpckhbw  m0, m7
-    movq       m2, [secondq+sizeq]
-    punpckhbw  m1, m7
-    punpckhbw  m2, m7
-    paddw      m0, m0
-    paddw      m1, m2
-    movq       m2, m0
-    psubusw    m0, m1
-    psubusw    m1, m2
-    paddw      m6, m0
-    paddw      m6, m1
-
-    movq       m0, [secondq+sizeq]
-    movq       m1, [firstq]
-    punpcklbw  m0, m7
-    movq       m2, [firstq+sizeq]
-    punpcklbw  m1, m7
-    punpcklbw  m2, m7
-    paddw      m0, m0
-    paddw      m1, m2
-    movq       m2, m0
-    psubusw    m0, m1
-    psubusw    m1, m2
-    paddw      m6, m0
-    paddw      m6, m1
-
-    movq       m0, [secondq+sizeq]
-    movq       m1, [firstq]
-    punpckhbw  m0, m7
-    movq       m2, [firstq+sizeq]
-    punpckhbw  m1, m7
-    punpckhbw  m2, m7
-    paddw      m0, m0
-    paddw      m1, m2
-    movq       m2, m0
-    psubusw    m0, m1
-    psubusw    m1, m2
-    paddw      m6, m0
-    paddw      m6, m1
-
-    add        firstq, sizeq
-    add        secondq, sizeq
-    dec        r3
-    jnz .loop
-
-    movq       m5, m6
-    punpcklwd  m6, m7
-    punpckhwd  m5, m7
-    paddd      m5, m6
-    movd      eax, m5
-    psrlq      m5, 32
-    movd      r4d, m5
-    add       eax, r4d
-    RET
-
-INIT_MMX mmx
-cglobal pullup_filter_var, 3, 5, 8, first, second, size
-    mov        r3, 3
-    pxor       m4, m4
-    pxor       m7, m7
-
-.loop:
-    movq       m0, [firstq]
-    movq       m2, [firstq]
-    movq       m1, [firstq+sizeq]
-    add        firstq, sizeq
-    psubusb    m2, m1
-    psubusb    m1, m0
-    movq       m0, m2
-    movq       m3, m1
-    punpcklbw  m0, m7
-    punpcklbw  m1, m7
-    punpckhbw  m2, m7
-    punpckhbw  m3, m7
-    paddw      m4, m0
-    paddw      m4, m1
-    paddw      m4, m2
-    paddw      m4, m3
-
-    dec        r3
-    jnz .loop
-
-    movq       m3, m4
-    punpcklwd  m4, m7
-    punpckhwd  m3, m7
-    paddd      m3, m4
-    movd      eax, m3
-    psrlq      m3, 32
-    movd      r4d, m3
-    add       eax, r4d
-    shl       eax, 2
-    RET
diff --git a/libavfilter/x86/vf_pullup_init.c b/libavfilter/x86/vf_pullup_init.c
deleted file mode 100644
index 3dc0798..0000000
--- a/libavfilter/x86/vf_pullup_init.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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
-*/
-
-#include "libavutil/attributes.h"
-#include "libavutil/cpu.h"
-#include "libavutil/mem.h"
-#include "libavutil/x86/asm.h"
-#include "libavutil/x86/cpu.h"
-#include "libavfilter/vf_pullup.h"
-
-int ff_pullup_filter_diff_mmx(const uint8_t *a, const uint8_t *b, ptrdiff_t s);
-int ff_pullup_filter_comb_mmx(const uint8_t *a, const uint8_t *b, ptrdiff_t s);
-int ff_pullup_filter_var_mmx (const uint8_t *a, const uint8_t *b, ptrdiff_t s);
-
-av_cold void ff_pullup_init_x86(PullupContext *s)
-{
-#if HAVE_X86ASM
-    int cpu_flags = av_get_cpu_flags();
-
-    if (EXTERNAL_MMX(cpu_flags)) {
-        s->diff = ff_pullup_filter_diff_mmx;
-        s->comb = ff_pullup_filter_comb_mmx;
-        s->var  = ff_pullup_filter_var_mmx;
-    }
-#endif
-}
diff --git a/libavfilter/x86/vf_removegrain.asm b/libavfilter/x86/vf_removegrain.asm
deleted file mode 100644
index d049bf2..0000000
--- a/libavfilter/x86/vf_removegrain.asm
+++ /dev/null
@@ -1,1218 +0,0 @@
-;*****************************************************************************
-;* x86-optimized functions for removegrain filter
-;*
-;* Copyright (C) 2015 James Darnley
-;*
-;* 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.
-;*****************************************************************************
-
-; column: -1  0 +1
-; row -1: a1 a2 a3
-; row  0: a4  c a5
-; row +1: a6 a7 a8
-
-%include "libavutil/x86/x86util.asm"
-
-SECTION_RODATA 32
-
-pw_4:    times 16 dw 4
-pw_8:    times 16 dw 8
-pw_div9: times 16 dw ((1<<16)+4)/9
-
-SECTION .text
-
-;*** Preprocessor helpers
-
-%define a1 srcq+stride_n-1
-%define a2 srcq+stride_n
-%define a3 srcq+stride_n+1
-%define a4 srcq-1
-%define c  srcq
-%define a5 srcq+1
-%define a6 srcq+stride_p-1
-%define a7 srcq+stride_p
-%define a8 srcq+stride_p+1
-
-; %1 dest simd register
-; %2 source memory location
-; %3 zero location (simd register/memory)
-%macro LOAD 3
-    movh %1, %2
-    punpcklbw %1, %3
-%endmacro
-
-%macro LOAD_SQUARE 0
-    movu m1, [a1]
-    movu m2, [a2]
-    movu m3, [a3]
-    movu m4, [a4]
-    movu m0, [c]
-    movu m5, [a5]
-    movu m6, [a6]
-    movu m7, [a7]
-    movu m8, [a8]
-%endmacro
-
-; %1 zero location (simd register/memory)
-%macro LOAD_SQUARE_16 1
-    LOAD m1, [a1], %1
-    LOAD m2, [a2], %1
-    LOAD m3, [a3], %1
-    LOAD m4, [a4], %1
-    LOAD m0, [c], %1
-    LOAD m5, [a5], %1
-    LOAD m6, [a6], %1
-    LOAD m7, [a7], %1
-    LOAD m8, [a8], %1
-%endmacro
-
-; %1 data type
-; %2 simd register to hold maximums
-; %3 simd register to hold minimums
-; %4 temp location (simd register/memory)
-%macro SORT_PAIR 4
-    mova   %4, %2
-    pmin%1 %2, %3
-    pmax%1 %3, %4
-%endmacro
-
-%macro SORT_AXIS 0
-    SORT_PAIR ub, m1, m8, m9
-    SORT_PAIR ub, m2, m7, m10
-    SORT_PAIR ub, m3, m6, m11
-    SORT_PAIR ub, m4, m5, m12
-%endmacro
-
-
-%macro SORT_AXIS_16 0
-    SORT_PAIR sw, m1, m8, m9
-    SORT_PAIR sw, m2, m7, m10
-    SORT_PAIR sw, m3, m6, m11
-    SORT_PAIR sw, m4, m5, m12
-%endmacro
-
-; The loop doesn't need to do all the iterations.  It could stop when the right
-; pixels are in the right registers.
-%macro SORT_SQUARE 0
-    %assign k 7
-    %rep 7
-        %assign i 1
-        %assign j 2
-        %rep k
-            SORT_PAIR ub, m %+ i , m %+ j , m9
-            %assign i i+1
-            %assign j j+1
-        %endrep
-        %assign k k-1
-    %endrep
-%endmacro
-
-; %1 dest simd register
-; %2 source (simd register/memory)
-; %3 temp simd register
-%macro ABS_DIFF 3
-    mova %3, %2
-    psubusb %3, %1
-    psubusb %1, %2
-    por %1, %3
-%endmacro
-
-; %1 dest simd register
-; %2 source (simd register/memory)
-; %3 temp simd register
-%macro ABS_DIFF_W 3
-    mova %3, %2
-    psubusw %3, %1
-    psubusw %1, %2
-    por %1, %3
-%endmacro
-
-; %1 simd register that holds the "false" values and will hold the result
-; %2 simd register that holds the "true" values
-; %3 location (simd register/memory) that hold the mask
-%macro BLEND 3
-%if cpuflag(avx2)
-    vpblendvb %1, %1, %2, %3
-%else
-    pand      %2, %3
-    pandn     %3, %1
-    por       %3, %2
-    SWAP      %1, %3
-%endif
-%endmacro
-
-; Functions
-
-INIT_XMM sse2
-cglobal rg_fl_mode_1, 4, 5, 3, 0, dst, src, stride, pixels
-    mov r4q, strideq
-    neg r4q
-    %define stride_p strideq
-    %define stride_n r4q
-
-    .loop:
-        movu m0, [a1]
-        mova m1, m0
-
-        movu m2, [a2]
-        pmaxub m0, m2
-        pminub m1, m2
-
-        movu m2, [a3]
-        pmaxub m0, m2
-        pminub m1, m2
-
-        movu m2, [a4]
-        pmaxub m0, m2
-        pminub m1, m2
-
-        movu m2, [a5]
-        pmaxub m0, m2
-        pminub m1, m2
-
-        movu m2, [a6]
-        pmaxub m0, m2
-        pminub m1, m2
-
-        movu m2, [a7]
-        pmaxub m0, m2
-        pminub m1, m2
-
-        movu m2, [a8]
-        pmaxub m0, m2
-        pminub m1, m2
-
-        movu m2, [c]
-        pminub m2, m0
-        pmaxub m2, m1
-
-        movu [dstq], m2
-        add srcq, mmsize
-        add dstq, mmsize
-        sub pixelsd, mmsize
-    jg .loop
-RET
-
-%if ARCH_X86_64
-cglobal rg_fl_mode_2, 4, 5, 10, 0, dst, src, stride, pixels
-    mov r4q, strideq
-    neg r4q
-    %define stride_p strideq
-    %define stride_n r4q
-
-    .loop:
-        LOAD_SQUARE
-        SORT_SQUARE
-
-        CLIPUB m0, m2, m7
-
-        movu [dstq], m0
-        add srcq, mmsize
-        add dstq, mmsize
-        sub pixelsd, mmsize
-    jg .loop
-RET
-
-cglobal rg_fl_mode_3, 4, 5, 10, 0, dst, src, stride, pixels
-    mov r4q, strideq
-    neg r4q
-    %define stride_p strideq
-    %define stride_n r4q
-
-    .loop:
-        LOAD_SQUARE
-        SORT_SQUARE
-
-        CLIPUB m0, m3, m6
-
-        movu [dstq], m0
-        add srcq, mmsize
-        add dstq, mmsize
-        sub pixelsd, mmsize
-    jg .loop
-RET
-
-cglobal rg_fl_mode_4, 4, 5, 10, 0, dst, src, stride, pixels
-    mov r4q, strideq
-    neg r4q
-    %define stride_p strideq
-    %define stride_n r4q
-
-    .loop:
-        LOAD_SQUARE
-        SORT_SQUARE
-
-        CLIPUB m0, m4, m5
-
-        movu [dstq], m0
-        add srcq, mmsize
-        add dstq, mmsize
-        sub pixelsd, mmsize
-    jg .loop
-RET
-
-cglobal rg_fl_mode_5, 4, 5, 13, 0, dst, src, stride, pixels
-    mov r4q, strideq
-    neg r4q
-    %define stride_p strideq
-    %define stride_n r4q
-
-    .loop:
-        LOAD_SQUARE
-        SORT_AXIS
-
-        mova m9, m0
-        mova m10, m0
-        mova m11, m0
-        mova m12, m0
-
-        CLIPUB m9, m1, m8
-        CLIPUB m10, m2, m7
-        CLIPUB m11, m3, m6
-        CLIPUB m12, m4, m5
-
-        mova m8, m9  ; clip1
-        mova m7, m10 ; clip2
-        mova m6, m11 ; clip3
-        mova m5, m12 ; clip4
-
-        ABS_DIFF m9, m0, m1  ; c1
-        ABS_DIFF m10, m0, m2 ; c2
-        ABS_DIFF m11, m0, m3 ; c3
-        ABS_DIFF m12, m0, m4 ; c4
-
-        pminub m9, m10
-        pminub m9, m11
-        pminub m9, m12 ; mindiff
-
-        pcmpeqb m10, m9
-        pcmpeqb m11, m9
-        pcmpeqb m12, m9
-
-        ; Notice the order here: c1, c3, c2, c4
-        BLEND m8, m6, m11
-        BLEND m8, m7, m10
-        BLEND m8, m5, m12
-
-        movu [dstq], m8
-        add srcq, mmsize
-        add dstq, mmsize
-        sub pixelsd, mmsize
-    jg .loop
-RET
-
-cglobal rg_fl_mode_6, 4, 5, 16, 0, dst, src, stride, pixels
-    mov r4q, strideq
-    neg r4q
-    %define stride_p strideq
-    %define stride_n r4q
-
-    ; Some register saving suggestions: the zero can be somewhere other than a
-    ; register, the center pixels could be on the stack.
-
-    pxor m15, m15
-    .loop:
-        LOAD_SQUARE_16 m15
-        SORT_AXIS_16
-
-        mova m9, m0
-        mova m10, m0
-        mova m11, m0
-        mova m12, m0
-        CLIPW m9, m1, m8  ; clip1
-        CLIPW m10, m2, m7 ; clip2
-        CLIPW m11, m3, m6 ; clip3
-        CLIPW m12, m4, m5 ; clip4
-
-        psubw m8, m1 ; d1
-        psubw m7, m2 ; d2
-        psubw m6, m3 ; d3
-        psubw m5, m4 ; d4
-
-        mova m1, m9
-        mova m2, m10
-        mova m3, m11
-        mova m4, m12
-        ABS_DIFF_W m1, m0, m13
-        ABS_DIFF_W m2, m0, m14
-        ABS_DIFF_W m3, m0, m13
-        ABS_DIFF_W m4, m0, m14
-        psllw m1, 1
-        psllw m2, 1
-        psllw m3, 1
-        psllw m4, 1
-        paddw m1, m8 ; c1
-        paddw m2, m7 ; c2
-        paddw m3, m6 ; c3
-        paddw m4, m5 ; c4
-        ; As the differences (d1..d4) can only be positive, there is no need to
-        ; clip to zero.  Also, the maximum positive value is less than 768.
-
-        pminsw m1, m2
-        pminsw m1, m3
-        pminsw m1, m4
-
-        pcmpeqw m2, m1
-        pcmpeqw m3, m1
-        pcmpeqw m4, m1
-
-        BLEND m9, m11, m3
-        BLEND m9, m10, m2
-        BLEND m9, m12, m4
-        packuswb m9, m9
-
-        movh [dstq], m9
-        add srcq, mmsize/2
-        add dstq, mmsize/2
-        sub pixelsd, mmsize/2
-    jg .loop
-RET
-
-; This is just copy-pasted straight from mode 6 with the left shifts removed.
-cglobal rg_fl_mode_7, 4, 5, 16, 0, dst, src, stride, pixels
-    mov r4q, strideq
-    neg r4q
-    %define stride_p strideq
-    %define stride_n r4q
-
-    ; Can this be done without unpacking?
-
-    pxor m15, m15
-    .loop:
-        LOAD_SQUARE_16 m15
-        SORT_AXIS_16
-
-        mova m9, m0
-        mova m10, m0
-        mova m11, m0
-        mova m12, m0
-        CLIPW m9, m1, m8  ; clip1
-        CLIPW m10, m2, m7 ; clip2
-        CLIPW m11, m3, m6 ; clip3
-        CLIPW m12, m4, m5 ; clip4
-
-        psubw m8, m1 ; d1
-        psubw m7, m2 ; d2
-        psubw m6, m3 ; d3
-        psubw m5, m4 ; d4
-
-        mova m1, m9
-        mova m2, m10
-        mova m3, m11
-        mova m4, m12
-        ABS_DIFF_W m1, m0, m13
-        ABS_DIFF_W m2, m0, m14
-        ABS_DIFF_W m3, m0, m13
-        ABS_DIFF_W m4, m0, m14
-        paddw m1, m8 ; c1
-        paddw m2, m7 ; c2
-        paddw m3, m6 ; c3
-        paddw m4, m5 ; c4
-
-        pminsw m1, m2
-        pminsw m1, m3
-        pminsw m1, m4
-
-        pcmpeqw m2, m1
-        pcmpeqw m3, m1
-        pcmpeqw m4, m1
-
-        BLEND m9, m11, m3
-        BLEND m9, m10, m2
-        BLEND m9, m12, m4
-        packuswb m9, m9
-
-        movh [dstq], m9
-        add srcq, mmsize/2
-        add dstq, mmsize/2
-        sub pixelsd, mmsize/2
-    jg .loop
-RET
-
-; This is just copy-pasted straight from mode 6 with a few changes.
-cglobal rg_fl_mode_8, 4, 5, 16, 0, dst, src, stride, pixels
-    mov r4q, strideq
-    neg r4q
-    %define stride_p strideq
-    %define stride_n r4q
-
-    pxor m15, m15
-    .loop:
-        LOAD_SQUARE_16 m15
-        SORT_AXIS_16
-
-        mova m9, m0
-        mova m10, m0
-        mova m11, m0
-        mova m12, m0
-        CLIPW m9, m1, m8  ; clip1
-        CLIPW m10, m2, m7 ; clip2
-        CLIPW m11, m3, m6 ; clip3
-        CLIPW m12, m4, m5 ; clip4
-
-        psubw m8, m1 ; d1
-        psubw m7, m2 ; d2
-        psubw m6, m3 ; d3
-        psubw m5, m4 ; d4
-        psllw m8, 1
-        psllw m7, 1
-        psllw m6, 1
-        psllw m5, 1
-
-        mova m1, m9
-        mova m2, m10
-        mova m3, m11
-        mova m4, m12
-        ABS_DIFF_W m1, m0, m13
-        ABS_DIFF_W m2, m0, m14
-        ABS_DIFF_W m3, m0, m13
-        ABS_DIFF_W m4, m0, m14
-        paddw m1, m8 ; c1
-        paddw m2, m7 ; c1
-        paddw m3, m6 ; c1
-        paddw m4, m5 ; c1
-        ; As the differences (d1..d4) can only be positive, there is no need to
-        ; clip to zero.  Also, the maximum positive value is less than 768.
-
-        pminsw m1, m2
-        pminsw m1, m3
-        pminsw m1, m4
-
-        pcmpeqw m2, m1
-        pcmpeqw m3, m1
-        pcmpeqw m4, m1
-
-        BLEND m9, m11, m3
-        BLEND m9, m10, m2
-        BLEND m9, m12, m4
-        packuswb m9, m9
-
-        movh [dstq], m9
-        add srcq, mmsize/2
-        add dstq, mmsize/2
-        sub pixelsd, mmsize/2
-    jg .loop
-RET
-
-cglobal rg_fl_mode_9, 4, 5, 13, 0, dst, src, stride, pixels
-    mov r4q, strideq
-    neg r4q
-    %define stride_p strideq
-    %define stride_n r4q
-
-    .loop:
-        LOAD_SQUARE
-        SORT_AXIS
-
-        mova m9, m0
-        mova m10, m0
-        mova m11, m0
-        mova m12, m0
-        CLIPUB m9, m1, m8  ; clip1
-        CLIPUB m10, m2, m7 ; clip2
-        CLIPUB m11, m3, m6 ; clip3
-        CLIPUB m12, m4, m5 ; clip4
-
-        psubb m8, m1 ; d1
-        psubb m7, m2 ; d2
-        psubb m6, m3 ; d3
-        psubb m5, m4 ; d4
-
-        pminub m8, m7
-        pminub m8, m6
-        pminub m8, m5
-
-        pcmpeqb m7, m8
-        pcmpeqb m6, m8
-        pcmpeqb m5, m8
-
-        BLEND m9, m11, m6
-        BLEND m9, m10, m7
-        BLEND m9, m12, m5
-
-        movu [dstq], m9
-        add srcq, mmsize
-        add dstq, mmsize
-        sub pixelsd, mmsize
-    jg .loop
-RET
-%endif
-
-cglobal rg_fl_mode_10, 4, 5, 8, 0, dst, src, stride, pixels
-    mov r4q, strideq
-    neg r4q
-    %define stride_p strideq
-    %define stride_n r4q
-
-    .loop:
-        movu m0, [c]
-
-        movu m1, [a4]
-        mova m2, m1
-        ABS_DIFF m1, m0, m7
-
-        movu m3, [a5]       ; load pixel
-        mova m4, m3
-        ABS_DIFF m4, m0, m7 ; absolute difference from center
-        pminub m1, m4       ; mindiff
-        pcmpeqb m4, m1      ; if (difference == mindiff)
-        BLEND m2, m3, m4    ;     return pixel
-
-        movu m5, [a1]
-        mova m6, m5
-        ABS_DIFF m6, m0, m7
-        pminub m1, m6
-        pcmpeqb m6, m1
-        BLEND m2, m5, m6
-
-        movu m3, [a3]
-        mova m4, m3
-        ABS_DIFF m4, m0, m7
-        pminub m1, m4
-        pcmpeqb m4, m1
-        BLEND m2, m3, m4
-
-        movu m5, [a2]
-        mova m6, m5
-        ABS_DIFF m6, m0, m7
-        pminub m1, m6
-        pcmpeqb m6, m1
-        BLEND m2, m5, m6
-
-        movu m3, [a6]
-        mova m4, m3
-        ABS_DIFF m4, m0, m7
-        pminub m1, m4
-        pcmpeqb m4, m1
-        BLEND m2, m3, m4
-
-        movu m5, [a8]
-        mova m6, m5
-        ABS_DIFF m6, m0, m7
-        pminub m1, m6
-        pcmpeqb m6, m1
-        BLEND m2, m5, m6
-
-        movu m3, [a7]
-        mova m4, m3
-        ABS_DIFF m4, m0, m7
-        pminub m1, m4
-        pcmpeqb m4, m1
-        BLEND m2, m3, m4
-
-        movu [dstq], m2
-        add srcq, mmsize
-        add dstq, mmsize
-        sub pixelsd, mmsize
-    jg .loop
-RET
-
-cglobal rg_fl_mode_11_12, 4, 5, 7, 0, dst, src, stride, pixels
-    mov r4q, strideq
-    neg r4q
-    %define stride_p strideq
-    %define stride_n r4q
-
-    pxor m0, m0
-    .loop:
-        LOAD m1, [c], m0
-        LOAD m2, [a2], m0
-        LOAD m3, [a4], m0
-        LOAD m4, [a5], m0
-        LOAD m5, [a7], m0
-
-        psllw m1, 2
-        paddw m2, m3
-        paddw m4, m5
-        paddw m2, m4
-        psllw m2, 1
-
-        LOAD m3, [a1], m0
-        LOAD m4, [a3], m0
-        LOAD m5, [a6], m0
-        LOAD m6, [a8], m0
-        paddw m1, m2
-        paddw m3, m4
-        paddw m5, m6
-        paddw m1, m3
-        paddw m1, m5
-
-        paddw m1, [pw_8]
-        psraw m1, 4
-
-        packuswb m1, m1
-
-        movh [dstq], m1
-        add srcq, mmsize/2
-        add dstq, mmsize/2
-        sub pixelsd, mmsize/2
-    jg .loop
-RET
-
-cglobal rg_fl_mode_13_14, 4, 5, 8, 0, dst, src, stride, pixels
-    mov r4q, strideq
-    neg r4q
-    %define stride_p strideq
-    %define stride_n r4q
-
-    .loop:
-        movu m1, [a1]
-        movu m2, [a8]
-        mova m0, m1
-        pavgb m1, m2
-        ABS_DIFF m0, m2, m6
-
-        movu m3, [a3]
-        movu m4, [a6]
-        mova m5, m3
-        pavgb m3, m4
-        ABS_DIFF m5, m4, m7
-        pminub m0, m5
-        pcmpeqb m5, m0
-        BLEND m1, m3, m5
-
-        movu m2, [a2]
-        movu m3, [a7]
-        mova m4, m2
-        pavgb m2, m3
-        ABS_DIFF m4, m3, m6
-        pminub m0, m4
-        pcmpeqb m4, m0
-        BLEND m1, m2, m4
-
-        movu [dstq], m1
-        add srcq, mmsize
-        add dstq, mmsize
-        sub pixelsd, mmsize
-    jg .loop
-RET
-
-%if ARCH_X86_64
-cglobal rg_fl_mode_15_16, 4, 5, 16, 0, dst, src, stride, pixels
-    mov r4q, strideq
-    neg r4q
-    %define stride_p strideq
-    %define stride_n r4q
-
-    pxor m15, m15
-    .loop:
-        LOAD_SQUARE_16 m15
-
-        mova m9, m1
-        mova m10, m2
-        mova m11, m3
-        ABS_DIFF_W m9, m8, m12
-        ABS_DIFF_W m10, m7, m13
-        ABS_DIFF_W m11, m6, m14
-        pminsw m9, m10
-        pminsw m9, m11
-        pcmpeqw m10, m9
-        pcmpeqw m11, m9
-
-        mova m12, m2
-        mova m13, m1
-        mova m14, m6
-        paddw m12, m7
-        psllw m12, 1
-        paddw m13, m3
-        paddw m14, m8
-        paddw m12, [pw_4]
-        paddw m13, m14
-        paddw m12, m13
-        psrlw m12, 3
-
-        SORT_PAIR ub, m1, m8, m0
-        SORT_PAIR ub, m2, m7, m9
-        SORT_PAIR ub, m3, m6, m14
-        mova m4, m12
-        mova m5, m12
-        CLIPW m4, m1, m8
-        CLIPW m5, m2, m7
-        CLIPW m12, m3, m6
-
-        BLEND m4, m12, m11
-        BLEND m4,  m5, m10
-        packuswb m4, m4
-
-        movh [dstq], m4
-        add srcq, mmsize/2
-        add dstq, mmsize/2
-        sub pixelsd, mmsize/2
-    jg .loop
-RET
-
-cglobal rg_fl_mode_17, 4, 5, 9, 0, dst, src, stride, pixels
-    mov r4q, strideq
-    neg r4q
-    %define stride_p strideq
-    %define stride_n r4q
-
-    .loop:
-        LOAD_SQUARE
-        SORT_AXIS
-
-        pmaxub m1, m2
-        pmaxub m3, m4
-
-        pminub m8, m7
-        pminub m5, m6
-
-        pmaxub m1, m3
-        pminub m8, m5
-
-        mova m2, m1
-        pminub m1, m8
-        pmaxub m8, m2
-
-        CLIPUB m0, m1, m8
-
-        movu [dstq], m0
-        add srcq, mmsize
-        add dstq, mmsize
-        sub pixelsd, mmsize
-    jg .loop
-RET
-
-cglobal rg_fl_mode_18, 4, 5, 16, 0, dst, src, stride, pixels
-    mov r4q, strideq
-    neg r4q
-    %define stride_p strideq
-    %define stride_n r4q
-
-    .loop:
-        LOAD_SQUARE
-
-        mova m9, m1
-        mova m10, m8
-        ABS_DIFF m9, m0, m11
-        ABS_DIFF m10, m0, m12
-        pmaxub m9, m10 ; m9 = d1
-
-        mova m10, m2
-        mova m11, m7
-        ABS_DIFF m10, m0, m12
-        ABS_DIFF m11, m0, m13
-        pmaxub m10, m11 ; m10 = d2
-
-        mova m11, m3
-        mova m12, m6
-        ABS_DIFF m11, m0, m13
-        ABS_DIFF m12, m0, m14
-        pmaxub m11, m12 ; m11 = d3
-
-        mova m12, m4
-        mova m13, m5
-        ABS_DIFF m12, m0, m14
-        ABS_DIFF m13, m0, m15
-        pmaxub m12, m13 ; m12 = d4
-
-        mova m13, m9
-        pminub m13, m10
-        pminub m13, m11
-        pminub m13, m12 ; m13 = mindiff
-
-        pcmpeqb m10, m13
-        pcmpeqb m11, m13
-        pcmpeqb m12, m13
-
-        mova m14, m1
-        pminub m1, m8
-        pmaxub m8, m14
-
-        mova m13, m0
-        mova m14, m1
-        pminub m1, m8
-        pmaxub m8, m14
-        CLIPUB m13, m1, m8 ; m13 = ret...d1
-
-        mova m14, m0
-        mova m15, m3
-        pminub m3, m6
-        pmaxub m6, m15
-        CLIPUB m14, m3, m6
-        pand m14, m11
-        pandn m11, m13
-        por m14, m11 ; m14 = ret...d3
-
-        mova m15, m0
-        mova m1, m2
-        pminub m2, m7
-        pmaxub m7, m1
-        CLIPUB m15, m2, m7
-        pand m15, m10
-        pandn m10, m14
-        por m15, m10 ; m15 = ret...d2
-
-        mova m1, m0
-        mova m2, m4
-        pminub m4, m5
-        pmaxub m5, m2
-        CLIPUB m1, m4, m5
-        pand m1, m12
-        pandn m12, m15
-        por m1, m12 ; m15 = ret...d4
-
-        movu [dstq], m1
-        add srcq, mmsize
-        add dstq, mmsize
-        sub pixelsd, mmsize
-    jg .loop
-RET
-%endif
-
-cglobal rg_fl_mode_19, 4, 5, 7, 0, dst, src, stride, pixels
-    mov r4q, strideq
-    neg r4q
-    %define stride_p strideq
-    %define stride_n r4q
-
-    pxor m0, m0
-    .loop:
-        LOAD m1, [a1], m0
-        LOAD m2, [a2], m0
-        paddw m1, m2
-
-        LOAD m3, [a3], m0
-        LOAD m4, [a4], m0
-        paddw m3, m4
-
-        LOAD m5, [a5], m0
-        LOAD m6, [a6], m0
-        paddw m5, m6
-
-        LOAD m2, [a7], m0
-        LOAD m4, [a8], m0
-        paddw m2, m4
-
-        paddw m1, m3
-        paddw m2, m5
-        paddw m1, m2
-
-        paddw m1, [pw_4]
-        psraw m1, 3
-
-        packuswb m1, m1
-
-        movh [dstq], m1
-        add srcq, mmsize/2
-        add dstq, mmsize/2
-        sub pixelsd, mmsize/2
-    jg .loop
-RET
-
-cglobal rg_fl_mode_20, 4, 5, 7, 0, dst, src, stride, pixels
-    mov r4q, strideq
-    neg r4q
-    %define stride_p strideq
-    %define stride_n r4q
-
-    pxor m0, m0
-    .loop:
-        LOAD m1, [a1], m0
-        LOAD m2, [a2], m0
-        paddw m1, m2
-
-        LOAD m3, [a3], m0
-        LOAD m4, [a4], m0
-        paddw m3, m4
-
-        LOAD m5, [a5], m0
-        LOAD m6, [a6], m0
-        paddw m5, m6
-
-        LOAD m2, [a7], m0
-        LOAD m4, [a8], m0
-        paddw m2, m4
-
-        LOAD m6, [c], m0
-        paddw m1, m3
-        paddw m2, m5
-        paddw m6, [pw_4]
-
-        paddw m1, m2
-        paddw m1, m6
-
-        pmulhuw m1, [pw_div9]
-
-        packuswb m1, m1
-
-        movh [dstq], m1
-        add srcq, mmsize/2
-        add dstq, mmsize/2
-        sub pixelsd, mmsize/2
-    jg .loop
-RET
-
-cglobal rg_fl_mode_21, 4, 5, 8, 0, dst, src, stride, pixels
-    mov r4q, strideq
-    neg r4q
-    %define stride_p strideq
-    %define stride_n r4q
-
-    pxor m0, m0
-    .loop:
-        movu m1, [a1]
-        movu m2, [a8]
-        pavgb m7, m1, m2
-        punpckhbw m3, m1, m0
-        punpcklbw m1, m0
-        punpckhbw m4, m2, m0
-        punpcklbw m2, m0
-        paddw m3, m4
-        paddw m1, m2
-        psrlw m3, 1
-        psrlw m1, 1
-        packuswb m1, m3
-
-        movu m2, [a2]
-        movu m3, [a7]
-        pavgb m6, m2, m3
-        punpckhbw m4, m2, m0
-        punpcklbw m2, m0
-        punpckhbw m5, m3, m0
-        punpcklbw m3, m0
-        paddw m4, m5
-        paddw m2, m3
-        psrlw m4, 1
-        psrlw m2, 1
-        packuswb m2, m4
-
-        pminub m1, m2
-        pmaxub m7, m6
-
-        movu m2, [a3]
-        movu m3, [a6]
-        pavgb m6, m2, m3
-        punpckhbw m4, m2, m0
-        punpcklbw m2, m0
-        punpckhbw m5, m3, m0
-        punpcklbw m3, m0
-        paddw m4, m5
-        paddw m2, m3
-        psrlw m4, 1
-        psrlw m2, 1
-        packuswb m2, m4
-
-        pminub m1, m2
-        pmaxub m7, m6
-
-        movu m2, [a4]
-        movu m3, [a5]
-        pavgb m6, m2, m3
-        punpckhbw m4, m2, m0
-        punpcklbw m2, m0
-        punpckhbw m5, m3, m0
-        punpcklbw m3, m0
-        paddw m4, m5
-        paddw m2, m3
-        psrlw m4, 1
-        psrlw m2, 1
-        packuswb m2, m4
-
-        pminub m1, m2
-        pmaxub m7, m6
-
-        movu m3, [c]
-        CLIPUB m3, m1, m7
-
-        movu [dstq], m3
-        add srcq, mmsize
-        add dstq, mmsize
-        sub pixelsd, mmsize
-    jg .loop
-RET
-
-cglobal rg_fl_mode_22, 4, 5, 8, 0, dst, src, stride, pixels
-    mov r4q, strideq
-    neg r4q
-    %define stride_p strideq
-    %define stride_n r4q
-
-    .loop:
-        movu m0, [a1]
-        movu m1, [a8]
-        pavgb m0, m1
-        movu m2, [a2]
-        movu m3, [a7]
-        pavgb m2, m3
-        movu m4, [a3]
-        movu m5, [a6]
-        pavgb m4, m5
-        movu m6, [a4]
-        movu m7, [a5]
-        pavgb m6, m7
-
-        mova m1, m0
-        mova m3, m2
-        mova m5, m4
-        mova m7, m6
-        pminub m0, m2
-        pminub m4, m6
-        pmaxub m1, m3
-        pmaxub m5, m7
-        pminub m0, m4
-        pmaxub m1, m5
-
-        movu m2, [c]
-        CLIPUB m2, m0, m1
-
-        movu [dstq], m2
-        add srcq, mmsize
-        add dstq, mmsize
-        sub pixelsd, mmsize
-    jg .loop
-RET
-
-%if ARCH_X86_64
-cglobal rg_fl_mode_23, 4, 5, 16, 0, dst, src, stride, pixels
-    mov r4q, strideq
-    neg r4q
-    %define stride_p strideq
-    %define stride_n r4q
-
-    pxor m15, m15
-    .loop:
-        LOAD_SQUARE_16 m15
-        SORT_AXIS_16
-
-        mova m9, m8
-        mova m10, m7
-        mova m11, m6
-        mova m12, m5
-        psubw m9, m1  ; linediff1
-        psubw m10, m2 ; linediff2
-        psubw m11, m3 ; linediff3
-        psubw m12, m4 ; linediff4
-
-        psubw m1, m0
-        psubw m2, m0
-        psubw m3, m0
-        psubw m4, m0
-        pminsw m1, m9  ; d1
-        pminsw m2, m10 ; d2
-        pminsw m3, m11 ; d3
-        pminsw m4, m12 ; d4
-        pmaxsw m1, m2
-        pmaxsw m3, m4
-        pmaxsw m1, m3
-        pmaxsw m1, m15 ; d
-
-        mova m13, m0
-        mova m14, m0
-        mova m2, m0
-        mova m4, m0
-        psubw m13, m8
-        psubw m14, m7
-        psubw m2, m6
-        psubw m4, m5
-        pminsw m9, m13  ; u1
-        pminsw m10, m14 ; u2
-        pminsw m11, m2  ; u3
-        pminsw m12, m4  ; u4
-        pmaxsw m9, m10
-        pmaxsw m11, m12
-        pmaxsw m9, m11
-        pmaxsw m9, m15  ; u
-
-        paddw m0, m1
-        psubw m0, m9
-        packuswb m0, m0
-
-        movh [dstq], m0
-        add srcq, mmsize/2
-        add dstq, mmsize/2
-        sub pixelsd, mmsize/2
-    jg .loop
-RET
-
-cglobal rg_fl_mode_24, 4, 5, 16, mmsize, dst, src, stride, pixels
-    mov r4q, strideq
-    neg r4q
-    %define stride_p strideq
-    %define stride_n r4q
-
-    pxor m15, m15
-    .loop:
-        LOAD_SQUARE_16 m15
-        mova [rsp], m0
-        SORT_AXIS_16
-
-        mova m9, m8
-        mova m10, m7
-        mova m11, m6
-        mova m12, m5
-        psubw m9, m1  ; linediff1
-        psubw m10, m2 ; linediff2
-        psubw m11, m3 ; linediff3
-        psubw m12, m4 ; linediff4
-
-        psubw m1, [rsp] ; td1
-        psubw m2, [rsp] ; td2
-        psubw m3, [rsp] ; td3
-        psubw m4, [rsp] ; td4
-        mova m0, m9
-        mova m13, m10
-        mova m14, m11
-        mova m15, m12
-        psubw m0, m1
-        psubw m13, m2
-        psubw m14, m3
-        psubw m15, m4
-        pminsw m1, m0  ; d1
-        pminsw m2, m13 ; d2
-        pminsw m3, m14 ; d3
-        pminsw m4, m15 ; d4
-        pmaxsw m1, m2
-        pmaxsw m3, m4
-
-        mova m0, [rsp]
-        mova m13, [rsp]
-        mova m14, [rsp]
-        mova m15, [rsp]
-        psubw m0, m8  ; tu1
-        psubw m13, m7 ; tu2
-        psubw m14, m6 ; tu3
-        psubw m15, m5 ; tu4
-        psubw m9, m0
-        psubw m10, m13
-        psubw m11, m14
-        psubw m12, m15
-        pminsw m9, m0   ; u1
-        pminsw m10, m13 ; u2
-        pminsw m11, m14 ; u3
-        pminsw m12, m15 ; u4
-        pmaxsw m9, m10
-        pmaxsw m11, m12
-
-        pmaxsw m1, m3  ; d without max(d,0)
-        pmaxsw m9, m11  ; u without max(u,0)
-        pxor m15, m15
-        pmaxsw m1, m15
-        pmaxsw m9, m15
-
-        mova m0, [rsp]
-        paddw m0, m1
-        psubw m0, m9
-        packuswb m0, m0
-
-        movh [dstq], m0
-        add srcq, mmsize/2
-        add dstq, mmsize/2
-        sub pixelsd, mmsize/2
-    jg .loop
-RET
-%endif
diff --git a/libavfilter/x86/vf_spp.c b/libavfilter/x86/vf_spp.c
deleted file mode 100644
index 7d5da61..0000000
--- a/libavfilter/x86/vf_spp.c
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * Copyright (c) 2003 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.
- */
-
-
-#include "libavutil/attributes.h"
-#include "libavutil/cpu.h"
-#include "libavutil/crc.h"
-#include "libavutil/mem.h"
-#include "libavutil/x86/asm.h"
-#include "libavfilter/vf_spp.h"
-
-#if HAVE_MMX_INLINE
-static void hardthresh_mmx(int16_t dst[64], const int16_t src[64],
-                           int qp, const uint8_t *permutation)
-{
-    int bias = 0; //FIXME
-    unsigned int threshold1;
-
-    threshold1 = qp * ((1<<4) - bias) - 1;
-
-#define REQUANT_CORE(dst0, dst1, dst2, dst3, src0, src1, src2, src3)    \
-    "movq " #src0 ", %%mm0      \n"                                     \
-    "movq " #src1 ", %%mm1      \n"                                     \
-    "movq " #src2 ", %%mm2      \n"                                     \
-    "movq " #src3 ", %%mm3      \n"                                     \
-    "psubw %%mm4, %%mm0         \n"                                     \
-    "psubw %%mm4, %%mm1         \n"                                     \
-    "psubw %%mm4, %%mm2         \n"                                     \
-    "psubw %%mm4, %%mm3         \n"                                     \
-    "paddusw %%mm5, %%mm0       \n"                                     \
-    "paddusw %%mm5, %%mm1       \n"                                     \
-    "paddusw %%mm5, %%mm2       \n"                                     \
-    "paddusw %%mm5, %%mm3       \n"                                     \
-    "paddw %%mm6, %%mm0         \n"                                     \
-    "paddw %%mm6, %%mm1         \n"                                     \
-    "paddw %%mm6, %%mm2         \n"                                     \
-    "paddw %%mm6, %%mm3         \n"                                     \
-    "psubusw %%mm6, %%mm0       \n"                                     \
-    "psubusw %%mm6, %%mm1       \n"                                     \
-    "psubusw %%mm6, %%mm2       \n"                                     \
-    "psubusw %%mm6, %%mm3       \n"                                     \
-    "psraw $3, %%mm0            \n"                                     \
-    "psraw $3, %%mm1            \n"                                     \
-    "psraw $3, %%mm2            \n"                                     \
-    "psraw $3, %%mm3            \n"                                     \
-                                                                        \
-    "movq %%mm0, %%mm7          \n"                                     \
-    "punpcklwd %%mm2, %%mm0     \n" /*A*/                               \
-    "punpckhwd %%mm2, %%mm7     \n" /*C*/                               \
-    "movq %%mm1, %%mm2          \n"                                     \
-    "punpcklwd %%mm3, %%mm1     \n" /*B*/                               \
-    "punpckhwd %%mm3, %%mm2     \n" /*D*/                               \
-    "movq %%mm0, %%mm3          \n"                                     \
-    "punpcklwd %%mm1, %%mm0     \n" /*A*/                               \
-    "punpckhwd %%mm7, %%mm3     \n" /*C*/                               \
-    "punpcklwd %%mm2, %%mm7     \n" /*B*/                               \
-    "punpckhwd %%mm2, %%mm1     \n" /*D*/                               \
-                                                                        \
-    "movq %%mm0, " #dst0 "      \n"                                     \
-    "movq %%mm7, " #dst1 "      \n"                                     \
-    "movq %%mm3, " #dst2 "      \n"                                     \
-    "movq %%mm1, " #dst3 "      \n"
-
-    __asm__ volatile(
-        "movd %2, %%mm4             \n"
-        "movd %3, %%mm5             \n"
-        "movd %4, %%mm6             \n"
-        "packssdw %%mm4, %%mm4      \n"
-        "packssdw %%mm5, %%mm5      \n"
-        "packssdw %%mm6, %%mm6      \n"
-        "packssdw %%mm4, %%mm4      \n"
-        "packssdw %%mm5, %%mm5      \n"
-        "packssdw %%mm6, %%mm6      \n"
-        REQUANT_CORE(  (%1),  8(%1), 16(%1), 24(%1),  (%0), 8(%0), 64(%0), 72(%0))
-        REQUANT_CORE(32(%1), 40(%1), 48(%1), 56(%1),16(%0),24(%0), 48(%0), 56(%0))
-        REQUANT_CORE(64(%1), 72(%1), 80(%1), 88(%1),32(%0),40(%0), 96(%0),104(%0))
-        REQUANT_CORE(96(%1),104(%1),112(%1),120(%1),80(%0),88(%0),112(%0),120(%0))
-        : : "r" (src), "r" (dst), "g" (threshold1+1), "g" (threshold1+5), "g" (threshold1-4) //FIXME maybe more accurate then needed?
-    );
-    dst[0] = (src[0] + 4) >> 3;
-}
-
-static void softthresh_mmx(int16_t dst[64], const int16_t src[64],
-                           int qp, const uint8_t *permutation)
-{
-    int bias = 0; //FIXME
-    unsigned int threshold1;
-
-    threshold1 = qp*((1<<4) - bias) - 1;
-
-#undef REQUANT_CORE
-#define REQUANT_CORE(dst0, dst1, dst2, dst3, src0, src1, src2, src3)    \
-    "movq " #src0 ", %%mm0      \n"                                     \
-    "movq " #src1 ", %%mm1      \n"                                     \
-    "pxor %%mm6, %%mm6          \n"                                     \
-    "pxor %%mm7, %%mm7          \n"                                     \
-    "pcmpgtw %%mm0, %%mm6       \n"                                     \
-    "pcmpgtw %%mm1, %%mm7       \n"                                     \
-    "pxor %%mm6, %%mm0          \n"                                     \
-    "pxor %%mm7, %%mm1          \n"                                     \
-    "psubusw %%mm4, %%mm0       \n"                                     \
-    "psubusw %%mm4, %%mm1       \n"                                     \
-    "pxor %%mm6, %%mm0          \n"                                     \
-    "pxor %%mm7, %%mm1          \n"                                     \
-    "movq " #src2 ", %%mm2      \n"                                     \
-    "movq " #src3 ", %%mm3      \n"                                     \
-    "pxor %%mm6, %%mm6          \n"                                     \
-    "pxor %%mm7, %%mm7          \n"                                     \
-    "pcmpgtw %%mm2, %%mm6       \n"                                     \
-    "pcmpgtw %%mm3, %%mm7       \n"                                     \
-    "pxor %%mm6, %%mm2          \n"                                     \
-    "pxor %%mm7, %%mm3          \n"                                     \
-    "psubusw %%mm4, %%mm2       \n"                                     \
-    "psubusw %%mm4, %%mm3       \n"                                     \
-    "pxor %%mm6, %%mm2          \n"                                     \
-    "pxor %%mm7, %%mm3          \n"                                     \
-                                                                        \
-    "paddsw %%mm5, %%mm0        \n"                                     \
-    "paddsw %%mm5, %%mm1        \n"                                     \
-    "paddsw %%mm5, %%mm2        \n"                                     \
-    "paddsw %%mm5, %%mm3        \n"                                     \
-    "psraw $3, %%mm0            \n"                                     \
-    "psraw $3, %%mm1            \n"                                     \
-    "psraw $3, %%mm2            \n"                                     \
-    "psraw $3, %%mm3            \n"                                     \
-                                                                        \
-    "movq %%mm0, %%mm7          \n"                                     \
-    "punpcklwd %%mm2, %%mm0     \n" /*A*/                               \
-    "punpckhwd %%mm2, %%mm7     \n" /*C*/                               \
-    "movq %%mm1, %%mm2          \n"                                     \
-    "punpcklwd %%mm3, %%mm1     \n" /*B*/                               \
-    "punpckhwd %%mm3, %%mm2     \n" /*D*/                               \
-    "movq %%mm0, %%mm3          \n"                                     \
-    "punpcklwd %%mm1, %%mm0     \n" /*A*/                               \
-    "punpckhwd %%mm7, %%mm3     \n" /*C*/                               \
-    "punpcklwd %%mm2, %%mm7     \n" /*B*/                               \
-    "punpckhwd %%mm2, %%mm1     \n" /*D*/                               \
-                                                                        \
-    "movq %%mm0, " #dst0 "      \n"                                     \
-    "movq %%mm7, " #dst1 "      \n"                                     \
-    "movq %%mm3, " #dst2 "      \n"                                     \
-    "movq %%mm1, " #dst3 "      \n"
-
-    __asm__ volatile(
-        "movd %2, %%mm4             \n"
-        "movd %3, %%mm5             \n"
-        "packssdw %%mm4, %%mm4      \n"
-        "packssdw %%mm5, %%mm5      \n"
-        "packssdw %%mm4, %%mm4      \n"
-        "packssdw %%mm5, %%mm5      \n"
-        REQUANT_CORE(  (%1),  8(%1), 16(%1), 24(%1),  (%0), 8(%0), 64(%0), 72(%0))
-        REQUANT_CORE(32(%1), 40(%1), 48(%1), 56(%1),16(%0),24(%0), 48(%0), 56(%0))
-        REQUANT_CORE(64(%1), 72(%1), 80(%1), 88(%1),32(%0),40(%0), 96(%0),104(%0))
-        REQUANT_CORE(96(%1),104(%1),112(%1),120(%1),80(%0),88(%0),112(%0),120(%0))
-        : : "r" (src), "r" (dst), "g" (threshold1), "rm" (4) //FIXME maybe more accurate then needed?
-    );
-
-    dst[0] = (src[0] + 4) >> 3;
-}
-
-static void store_slice_mmx(uint8_t *dst, const int16_t *src,
-                            int dst_stride, int src_stride,
-                            int width, int height, int log2_scale,
-                            const uint8_t dither[8][8])
-{
-    int y;
-
-    for (y = 0; y < height; y++) {
-        uint8_t *dst1 = dst;
-        const int16_t *src1 = src;
-        __asm__ volatile(
-            "movq (%3), %%mm3           \n"
-            "movq (%3), %%mm4           \n"
-            "movd %4, %%mm2             \n"
-            "pxor %%mm0, %%mm0          \n"
-            "punpcklbw %%mm0, %%mm3     \n"
-            "punpckhbw %%mm0, %%mm4     \n"
-            "psraw %%mm2, %%mm3         \n"
-            "psraw %%mm2, %%mm4         \n"
-            "movd %5, %%mm2             \n"
-            "1:                         \n"
-            "movq (%0), %%mm0           \n"
-            "movq 8(%0), %%mm1          \n"
-            "paddw %%mm3, %%mm0         \n"
-            "paddw %%mm4, %%mm1         \n"
-            "psraw %%mm2, %%mm0         \n"
-            "psraw %%mm2, %%mm1         \n"
-            "packuswb %%mm1, %%mm0      \n"
-            "movq %%mm0, (%1)           \n"
-            "add $16, %0                \n"
-            "add $8, %1                 \n"
-            "cmp %2, %1                 \n"
-            " jb 1b                     \n"
-            : "+r" (src1), "+r"(dst1)
-            : "r"(dst + width), "r"(dither[y]), "g"(log2_scale), "g"(MAX_LEVEL - log2_scale)
-        );
-        src += src_stride;
-        dst += dst_stride;
-    }
-}
-
-#endif /* HAVE_MMX_INLINE */
-
-av_cold void ff_spp_init_x86(SPPContext *s)
-{
-#if HAVE_MMX_INLINE
-    int cpu_flags = av_get_cpu_flags();
-
-    if (cpu_flags & AV_CPU_FLAG_MMX) {
-        static const uint32_t mmx_idct_perm_crc = 0xe5e8adc4;
-        uint32_t idct_perm_crc =
-            av_crc(av_crc_get_table(AV_CRC_32_IEEE), 0,
-                   s->dct->idct_permutation,
-                   sizeof(s->dct->idct_permutation));
-        int64_t bps;
-        s->store_slice = store_slice_mmx;
-        av_opt_get_int(s->dct, "bits_per_sample", 0, &bps);
-        if (bps <= 8 && idct_perm_crc == mmx_idct_perm_crc) {
-            switch (s->mode) {
-            case 0: s->requantize = hardthresh_mmx; break;
-            case 1: s->requantize = softthresh_mmx; break;
-            }
-        }
-    }
-#endif
-}
diff --git a/libavfilter/x86/vf_tinterlace_init.c b/libavfilter/x86/vf_tinterlace_init.c
deleted file mode 100644
index 2c9b1de..0000000
--- a/libavfilter/x86/vf_tinterlace_init.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (C) 2014 Kieran Kunhya <kierank@obe.tv>
- *
- * 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.
- */
-
-#include "libavutil/attributes.h"
-#include "libavutil/cpu.h"
-#include "libavutil/internal.h"
-#include "libavutil/mem.h"
-#include "libavutil/x86/asm.h"
-#include "libavutil/x86/cpu.h"
-
-#include "libavfilter/tinterlace.h"
-
-void ff_lowpass_line_sse2(uint8_t *dstp, ptrdiff_t linesize,
-                          const uint8_t *srcp, ptrdiff_t mref,
-                          ptrdiff_t pref, int clip_max);
-void ff_lowpass_line_avx (uint8_t *dstp, ptrdiff_t linesize,
-                          const uint8_t *srcp, ptrdiff_t mref,
-                          ptrdiff_t pref, int clip_max);
-void ff_lowpass_line_avx2 (uint8_t *dstp, ptrdiff_t linesize,
-                          const uint8_t *srcp, ptrdiff_t mref,
-                          ptrdiff_t pref, int clip_max);
-
-void ff_lowpass_line_16_sse2(uint8_t *dstp, ptrdiff_t linesize,
-                             const uint8_t *srcp, ptrdiff_t mref,
-                             ptrdiff_t pref, int clip_max);
-void ff_lowpass_line_16_avx (uint8_t *dstp, ptrdiff_t linesize,
-                             const uint8_t *srcp, ptrdiff_t mref,
-                             ptrdiff_t pref, int clip_max);
-void ff_lowpass_line_16_avx2 (uint8_t *dstp, ptrdiff_t linesize,
-                             const uint8_t *srcp, ptrdiff_t mref,
-                             ptrdiff_t pref, int clip_max);
-
-void ff_lowpass_line_complex_sse2(uint8_t *dstp, ptrdiff_t linesize,
-                                  const uint8_t *srcp, ptrdiff_t mref,
-                                  ptrdiff_t pref, int clip_max);
-
-void ff_lowpass_line_complex_12_sse2(uint8_t *dstp, ptrdiff_t linesize,
-                                     const uint8_t *srcp, ptrdiff_t mref,
-                                     ptrdiff_t pref, int clip_max);
-
-av_cold void ff_tinterlace_init_x86(TInterlaceContext *s)
-{
-    int cpu_flags = av_get_cpu_flags();
-
-    if (s->csp->comp[0].depth > 8) {
-        if (EXTERNAL_SSE2(cpu_flags)) {
-            if (!(s->flags & TINTERLACE_FLAG_CVLPF))
-                s->lowpass_line = ff_lowpass_line_16_sse2;
-            else
-                s->lowpass_line = ff_lowpass_line_complex_12_sse2;
-        }
-        if (EXTERNAL_AVX(cpu_flags))
-            if (!(s->flags & TINTERLACE_FLAG_CVLPF))
-                s->lowpass_line = ff_lowpass_line_16_avx;
-        if (EXTERNAL_AVX2_FAST(cpu_flags)) {
-            if (!(s->flags & TINTERLACE_FLAG_CVLPF)) {
-                s->lowpass_line = ff_lowpass_line_16_avx2;
-            }
-        }
-    } else {
-        if (EXTERNAL_SSE2(cpu_flags)) {
-            if (!(s->flags & TINTERLACE_FLAG_CVLPF))
-                s->lowpass_line = ff_lowpass_line_sse2;
-            else
-                s->lowpass_line = ff_lowpass_line_complex_sse2;
-        }
-        if (EXTERNAL_AVX(cpu_flags))
-            if (!(s->flags & TINTERLACE_FLAG_CVLPF))
-                s->lowpass_line = ff_lowpass_line_avx;
-        if (EXTERNAL_AVX2_FAST(cpu_flags)) {
-            if (!(s->flags & TINTERLACE_FLAG_CVLPF)) {
-                s->lowpass_line = ff_lowpass_line_avx2;
-            }
-        }
-    }
-}
diff --git a/libavformat/avformat.h b/libavformat/avformat.h
index 39b99b4..81a0bd0 100644
--- a/libavformat/avformat.h
+++ b/libavformat/avformat.h
@@ -313,6 +313,11 @@
 #include "libavutil/dict.h"
 #include "libavutil/log.h"
 
+// We have to implement deprecated functions until they are removed, this is the
+// simplest way to prevent warnings
+#undef attribute_deprecated
+#define attribute_deprecated
+
 #include "avio.h"
 #include "libavformat/version.h"
 
diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c
index 784973a..76ead7d 100644
--- a/libavformat/matroskaenc.c
+++ b/libavformat/matroskaenc.c
@@ -1790,6 +1790,13 @@
         av_dict_get(s->metadata, "alpha_mode", NULL, 0))
         version = 4;
 
+    if (s->nb_streams > MAX_TRACKS) {
+        av_log(s, AV_LOG_ERROR,
+               "At most %d streams are supported for muxing in Matroska\n",
+               MAX_TRACKS);
+        return AVERROR(EINVAL);
+    }
+
     for (i = 0; i < s->nb_streams; i++) {
         if (s->streams[i]->codecpar->codec_id == AV_CODEC_ID_OPUS ||
             av_dict_get(s->streams[i]->metadata, "stereo_mode", NULL, 0) ||
diff --git a/libpostproc/postprocess.c b/libpostproc/postprocess.c
deleted file mode 100644
index 8d44165..0000000
--- a/libpostproc/postprocess.c
+++ /dev/null
@@ -1,1036 +0,0 @@
-/*
- * Copyright (C) 2001-2003 Michael Niedermayer (michaelni@gmx.at)
- *
- * AltiVec optimizations (C) 2004 Romain Dolbeau <romain@dolbeau.org>
- *
- * 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
- * postprocessing.
- */
-
-/*
-                        C       MMX     MMX2    3DNow   AltiVec
-isVertDC                Ec      Ec                      Ec
-isVertMinMaxOk          Ec      Ec                      Ec
-doVertLowPass           E               e       e       Ec
-doVertDefFilter         Ec      Ec      e       e       Ec
-isHorizDC               Ec      Ec                      Ec
-isHorizMinMaxOk         a       E                       Ec
-doHorizLowPass          E               e       e       Ec
-doHorizDefFilter        Ec      Ec      e       e       Ec
-do_a_deblock            Ec      E       Ec      E
-deRing                  E               e       e*      Ecp
-Vertical RKAlgo1        E               a       a
-Horizontal RKAlgo1                      a       a
-Vertical X1#            a               E       E
-Horizontal X1#          a               E       E
-LinIpolDeinterlace      e               E       E*
-CubicIpolDeinterlace    a               e       e*
-LinBlendDeinterlace     e               E       E*
-MedianDeinterlace#      E       Ec      Ec
-TempDeNoiser#           E               e       e       Ec
-
-* I do not have a 3DNow! CPU -> it is untested, but no one said it does not work so it seems to work
-# more or less selfinvented filters so the exactness is not too meaningful
-E = Exact implementation
-e = almost exact implementation (slightly different rounding,...)
-a = alternative / approximate impl
-c = checked against the other implementations (-vo md5)
-p = partially optimized, still some work to do
-*/
-
-/*
-TODO:
-reduce the time wasted on the mem transfer
-unroll stuff if instructions depend too much on the prior one
-move YScale thing to the end instead of fixing QP
-write a faster and higher quality deblocking filter :)
-make the mainloop more flexible (variable number of blocks at once
-        (the if/else stuff per block is slowing things down)
-compare the quality & speed of all filters
-split this huge file
-optimize c versions
-try to unroll inner for(x=0 ... loop to avoid these damn if(x ... checks
-...
-*/
-
-//Changelog: use git log
-
-#include "config.h"
-#include "libavutil/avutil.h"
-#include "libavutil/avassert.h"
-#include "libavutil/intreadwrite.h"
-#include <inttypes.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-//#undef HAVE_MMXEXT_INLINE
-//#define HAVE_AMD3DNOW_INLINE
-//#undef HAVE_MMX_INLINE
-//#undef ARCH_X86
-//#define DEBUG_BRIGHTNESS
-#include "postprocess.h"
-#include "postprocess_internal.h"
-#include "libavutil/avstring.h"
-#include "libavutil/ppc/util_altivec.h"
-
-#include "libavutil/ffversion.h"
-const char postproc_ffversion[] = "FFmpeg version " FFMPEG_VERSION;
-
-unsigned postproc_version(void)
-{
-    av_assert0(LIBPOSTPROC_VERSION_MICRO >= 100);
-    return LIBPOSTPROC_VERSION_INT;
-}
-
-const char *postproc_configuration(void)
-{
-    return FFMPEG_CONFIGURATION;
-}
-
-const char *postproc_license(void)
-{
-#define LICENSE_PREFIX "libpostproc license: "
-    return &LICENSE_PREFIX FFMPEG_LICENSE[sizeof(LICENSE_PREFIX) - 1];
-}
-
-#define GET_MODE_BUFFER_SIZE 500
-#define OPTIONS_ARRAY_SIZE 10
-#define BLOCK_SIZE 8
-#define TEMP_STRIDE 8
-//#define NUM_BLOCKS_AT_ONCE 16 //not used yet
-
-#if ARCH_X86 && HAVE_INLINE_ASM
-DECLARE_ASM_CONST(8, uint64_t, w05)= 0x0005000500050005LL;
-DECLARE_ASM_CONST(8, uint64_t, w04)= 0x0004000400040004LL;
-DECLARE_ASM_CONST(8, uint64_t, w20)= 0x0020002000200020LL;
-DECLARE_ASM_CONST(8, uint64_t, b00)= 0x0000000000000000LL;
-DECLARE_ASM_CONST(8, uint64_t, b01)= 0x0101010101010101LL;
-DECLARE_ASM_CONST(8, uint64_t, b02)= 0x0202020202020202LL;
-DECLARE_ASM_CONST(8, uint64_t, b08)= 0x0808080808080808LL;
-DECLARE_ASM_CONST(8, uint64_t, b80)= 0x8080808080808080LL;
-#endif
-
-DECLARE_ASM_CONST(8, int, deringThreshold)= 20;
-
-
-static const struct PPFilter filters[]=
-{
-    {"hb", "hdeblock",              1, 1, 3, H_DEBLOCK},
-    {"vb", "vdeblock",              1, 2, 4, V_DEBLOCK},
-/*  {"hr", "rkhdeblock",            1, 1, 3, H_RK1_FILTER},
-    {"vr", "rkvdeblock",            1, 2, 4, V_RK1_FILTER},*/
-    {"h1", "x1hdeblock",            1, 1, 3, H_X1_FILTER},
-    {"v1", "x1vdeblock",            1, 2, 4, V_X1_FILTER},
-    {"ha", "ahdeblock",             1, 1, 3, H_A_DEBLOCK},
-    {"va", "avdeblock",             1, 2, 4, V_A_DEBLOCK},
-    {"dr", "dering",                1, 5, 6, DERING},
-    {"al", "autolevels",            0, 1, 2, LEVEL_FIX},
-    {"lb", "linblenddeint",         1, 1, 4, LINEAR_BLEND_DEINT_FILTER},
-    {"li", "linipoldeint",          1, 1, 4, LINEAR_IPOL_DEINT_FILTER},
-    {"ci", "cubicipoldeint",        1, 1, 4, CUBIC_IPOL_DEINT_FILTER},
-    {"md", "mediandeint",           1, 1, 4, MEDIAN_DEINT_FILTER},
-    {"fd", "ffmpegdeint",           1, 1, 4, FFMPEG_DEINT_FILTER},
-    {"l5", "lowpass5",              1, 1, 4, LOWPASS5_DEINT_FILTER},
-    {"tn", "tmpnoise",              1, 7, 8, TEMP_NOISE_FILTER},
-    {"fq", "forcequant",            1, 0, 0, FORCE_QUANT},
-    {"be", "bitexact",              1, 0, 0, BITEXACT},
-    {"vi", "visualize",             1, 0, 0, VISUALIZE},
-    {NULL, NULL,0,0,0,0} //End Marker
-};
-
-static const char * const replaceTable[]=
-{
-    "default",      "hb:a,vb:a,dr:a",
-    "de",           "hb:a,vb:a,dr:a",
-    "fast",         "h1:a,v1:a,dr:a",
-    "fa",           "h1:a,v1:a,dr:a",
-    "ac",           "ha:a:128:7,va:a,dr:a",
-    NULL //End Marker
-};
-
-/* The horizontal functions exist only in C because the MMX
- * code is faster with vertical filters and transposing. */
-
-/**
- * Check if the given 8x8 Block is mostly "flat"
- */
-static inline int isHorizDC_C(const uint8_t src[], int stride, const PPContext *c)
-{
-    int numEq= 0;
-    int y;
-    const int dcOffset= ((c->nonBQP*c->ppMode.baseDcDiff)>>8) + 1;
-    const int dcThreshold= dcOffset*2 + 1;
-
-    for(y=0; y<BLOCK_SIZE; y++){
-        numEq += ((unsigned)(src[0] - src[1] + dcOffset)) < dcThreshold;
-        numEq += ((unsigned)(src[1] - src[2] + dcOffset)) < dcThreshold;
-        numEq += ((unsigned)(src[2] - src[3] + dcOffset)) < dcThreshold;
-        numEq += ((unsigned)(src[3] - src[4] + dcOffset)) < dcThreshold;
-        numEq += ((unsigned)(src[4] - src[5] + dcOffset)) < dcThreshold;
-        numEq += ((unsigned)(src[5] - src[6] + dcOffset)) < dcThreshold;
-        numEq += ((unsigned)(src[6] - src[7] + dcOffset)) < dcThreshold;
-        src+= stride;
-    }
-    return numEq > c->ppMode.flatnessThreshold;
-}
-
-/**
- * Check if the middle 8x8 Block in the given 8x16 block is flat
- */
-static inline int isVertDC_C(const uint8_t src[], int stride, const PPContext *c)
-{
-    int numEq= 0;
-    int y;
-    const int dcOffset= ((c->nonBQP*c->ppMode.baseDcDiff)>>8) + 1;
-    const int dcThreshold= dcOffset*2 + 1;
-
-    src+= stride*4; // src points to begin of the 8x8 Block
-    for(y=0; y<BLOCK_SIZE-1; y++){
-        numEq += ((unsigned)(src[0] - src[0+stride] + dcOffset)) < dcThreshold;
-        numEq += ((unsigned)(src[1] - src[1+stride] + dcOffset)) < dcThreshold;
-        numEq += ((unsigned)(src[2] - src[2+stride] + dcOffset)) < dcThreshold;
-        numEq += ((unsigned)(src[3] - src[3+stride] + dcOffset)) < dcThreshold;
-        numEq += ((unsigned)(src[4] - src[4+stride] + dcOffset)) < dcThreshold;
-        numEq += ((unsigned)(src[5] - src[5+stride] + dcOffset)) < dcThreshold;
-        numEq += ((unsigned)(src[6] - src[6+stride] + dcOffset)) < dcThreshold;
-        numEq += ((unsigned)(src[7] - src[7+stride] + dcOffset)) < dcThreshold;
-        src+= stride;
-    }
-    return numEq > c->ppMode.flatnessThreshold;
-}
-
-static inline int isHorizMinMaxOk_C(const uint8_t src[], int stride, int QP)
-{
-    int i;
-    for(i=0; i<2; i++){
-        if((unsigned)(src[0] - src[5] + 2*QP) > 4*QP) return 0;
-        src += stride;
-        if((unsigned)(src[2] - src[7] + 2*QP) > 4*QP) return 0;
-        src += stride;
-        if((unsigned)(src[4] - src[1] + 2*QP) > 4*QP) return 0;
-        src += stride;
-        if((unsigned)(src[6] - src[3] + 2*QP) > 4*QP) return 0;
-        src += stride;
-    }
-    return 1;
-}
-
-static inline int isVertMinMaxOk_C(const uint8_t src[], int stride, int QP)
-{
-    int x;
-    src+= stride*4;
-    for(x=0; x<BLOCK_SIZE; x+=4){
-        if((unsigned)(src[  x + 0*stride] - src[  x + 5*stride] + 2*QP) > 4*QP) return 0;
-        if((unsigned)(src[1+x + 2*stride] - src[1+x + 7*stride] + 2*QP) > 4*QP) return 0;
-        if((unsigned)(src[2+x + 4*stride] - src[2+x + 1*stride] + 2*QP) > 4*QP) return 0;
-        if((unsigned)(src[3+x + 6*stride] - src[3+x + 3*stride] + 2*QP) > 4*QP) return 0;
-    }
-    return 1;
-}
-
-static inline int horizClassify_C(const uint8_t src[], int stride, const PPContext *c)
-{
-    if( isHorizDC_C(src, stride, c) ){
-        return isHorizMinMaxOk_C(src, stride, c->QP);
-    }else{
-        return 2;
-    }
-}
-
-static inline int vertClassify_C(const uint8_t src[], int stride, const PPContext *c)
-{
-    if( isVertDC_C(src, stride, c) ){
-        return isVertMinMaxOk_C(src, stride, c->QP);
-    }else{
-        return 2;
-    }
-}
-
-static inline void doHorizDefFilter_C(uint8_t dst[], int stride, const PPContext *c)
-{
-    int y;
-    for(y=0; y<BLOCK_SIZE; y++){
-        const int middleEnergy= 5*(dst[4] - dst[3]) + 2*(dst[2] - dst[5]);
-
-        if(FFABS(middleEnergy) < 8*c->QP){
-            const int q=(dst[3] - dst[4])/2;
-            const int leftEnergy=  5*(dst[2] - dst[1]) + 2*(dst[0] - dst[3]);
-            const int rightEnergy= 5*(dst[6] - dst[5]) + 2*(dst[4] - dst[7]);
-
-            int d= FFABS(middleEnergy) - FFMIN( FFABS(leftEnergy), FFABS(rightEnergy) );
-            d= FFMAX(d, 0);
-
-            d= (5*d + 32) >> 6;
-            d*= FFSIGN(-middleEnergy);
-
-            if(q>0)
-            {
-                d = FFMAX(d, 0);
-                d = FFMIN(d, q);
-            }
-            else
-            {
-                d = FFMIN(d, 0);
-                d = FFMAX(d, q);
-            }
-
-            dst[3]-= d;
-            dst[4]+= d;
-        }
-        dst+= stride;
-    }
-}
-
-/**
- * Do a horizontal low pass filter on the 10x8 block (dst points to middle 8x8 Block)
- * using the 9-Tap Filter (1,1,2,2,4,2,2,1,1)/16 (C version)
- */
-static inline void doHorizLowPass_C(uint8_t dst[], int stride, const PPContext *c)
-{
-    int y;
-    for(y=0; y<BLOCK_SIZE; y++){
-        const int first= FFABS(dst[-1] - dst[0]) < c->QP ? dst[-1] : dst[0];
-        const int last= FFABS(dst[8] - dst[7]) < c->QP ? dst[8] : dst[7];
-
-        int sums[10];
-        sums[0] = 4*first + dst[0] + dst[1] + dst[2] + 4;
-        sums[1] = sums[0] - first  + dst[3];
-        sums[2] = sums[1] - first  + dst[4];
-        sums[3] = sums[2] - first  + dst[5];
-        sums[4] = sums[3] - first  + dst[6];
-        sums[5] = sums[4] - dst[0] + dst[7];
-        sums[6] = sums[5] - dst[1] + last;
-        sums[7] = sums[6] - dst[2] + last;
-        sums[8] = sums[7] - dst[3] + last;
-        sums[9] = sums[8] - dst[4] + last;
-
-        dst[0]= (sums[0] + sums[2] + 2*dst[0])>>4;
-        dst[1]= (sums[1] + sums[3] + 2*dst[1])>>4;
-        dst[2]= (sums[2] + sums[4] + 2*dst[2])>>4;
-        dst[3]= (sums[3] + sums[5] + 2*dst[3])>>4;
-        dst[4]= (sums[4] + sums[6] + 2*dst[4])>>4;
-        dst[5]= (sums[5] + sums[7] + 2*dst[5])>>4;
-        dst[6]= (sums[6] + sums[8] + 2*dst[6])>>4;
-        dst[7]= (sums[7] + sums[9] + 2*dst[7])>>4;
-
-        dst+= stride;
-    }
-}
-
-/**
- * Experimental Filter 1 (Horizontal)
- * will not damage linear gradients
- * Flat blocks should look like they were passed through the (1,1,2,2,4,2,2,1,1) 9-Tap filter
- * can only smooth blocks at the expected locations (it cannot smooth them if they did move)
- * MMX2 version does correct clipping C version does not
- * not identical with the vertical one
- */
-static inline void horizX1Filter(uint8_t *src, int stride, int QP)
-{
-    int y;
-    static uint64_t lut[256];
-    if(!lut[255])
-    {
-        int i;
-        for(i=0; i<256; i++)
-        {
-            int v= i < 128 ? 2*i : 2*(i-256);
-/*
-//Simulate 112242211 9-Tap filter
-            uint64_t a= (v/16)  & 0xFF;
-            uint64_t b= (v/8)   & 0xFF;
-            uint64_t c= (v/4)   & 0xFF;
-            uint64_t d= (3*v/8) & 0xFF;
-*/
-//Simulate piecewise linear interpolation
-            uint64_t a= (v/16)   & 0xFF;
-            uint64_t b= (v*3/16) & 0xFF;
-            uint64_t c= (v*5/16) & 0xFF;
-            uint64_t d= (7*v/16) & 0xFF;
-            uint64_t A= (0x100 - a)&0xFF;
-            uint64_t B= (0x100 - b)&0xFF;
-            uint64_t C= (0x100 - c)&0xFF;
-            uint64_t D= (0x100 - c)&0xFF;
-
-            lut[i]   = (a<<56) | (b<<48) | (c<<40) | (d<<32) |
-                       (D<<24) | (C<<16) | (B<<8)  | (A);
-            //lut[i] = (v<<32) | (v<<24);
-        }
-    }
-
-    for(y=0; y<BLOCK_SIZE; y++){
-        int a= src[1] - src[2];
-        int b= src[3] - src[4];
-        int c= src[5] - src[6];
-
-        int d= FFMAX(FFABS(b) - (FFABS(a) + FFABS(c))/2, 0);
-
-        if(d < QP){
-            int v = d * FFSIGN(-b);
-
-            src[1] +=v/8;
-            src[2] +=v/4;
-            src[3] +=3*v/8;
-            src[4] -=3*v/8;
-            src[5] -=v/4;
-            src[6] -=v/8;
-        }
-        src+=stride;
-    }
-}
-
-/**
- * accurate deblock filter
- */
-static av_always_inline void do_a_deblock_C(uint8_t *src, int step,
-                                            int stride, const PPContext *c, int mode)
-{
-    int y;
-    const int QP= c->QP;
-    const int dcOffset= ((c->nonBQP*c->ppMode.baseDcDiff)>>8) + 1;
-    const int dcThreshold= dcOffset*2 + 1;
-
-    src+= step*4; // src points to begin of the 8x8 Block
-    for(y=0; y<8; y++){
-        int numEq= 0;
-
-        numEq += ((unsigned)(src[-1*step] - src[0*step] + dcOffset)) < dcThreshold;
-        numEq += ((unsigned)(src[ 0*step] - src[1*step] + dcOffset)) < dcThreshold;
-        numEq += ((unsigned)(src[ 1*step] - src[2*step] + dcOffset)) < dcThreshold;
-        numEq += ((unsigned)(src[ 2*step] - src[3*step] + dcOffset)) < dcThreshold;
-        numEq += ((unsigned)(src[ 3*step] - src[4*step] + dcOffset)) < dcThreshold;
-        numEq += ((unsigned)(src[ 4*step] - src[5*step] + dcOffset)) < dcThreshold;
-        numEq += ((unsigned)(src[ 5*step] - src[6*step] + dcOffset)) < dcThreshold;
-        numEq += ((unsigned)(src[ 6*step] - src[7*step] + dcOffset)) < dcThreshold;
-        numEq += ((unsigned)(src[ 7*step] - src[8*step] + dcOffset)) < dcThreshold;
-        if(numEq > c->ppMode.flatnessThreshold){
-            int min, max, x;
-
-            if(src[0] > src[step]){
-                max= src[0];
-                min= src[step];
-            }else{
-                max= src[step];
-                min= src[0];
-            }
-            for(x=2; x<8; x+=2){
-                if(src[x*step] > src[(x+1)*step]){
-                        if(src[x    *step] > max) max= src[ x   *step];
-                        if(src[(x+1)*step] < min) min= src[(x+1)*step];
-                }else{
-                        if(src[(x+1)*step] > max) max= src[(x+1)*step];
-                        if(src[ x   *step] < min) min= src[ x   *step];
-                }
-            }
-            if(max-min < 2*QP){
-                const int first= FFABS(src[-1*step] - src[0]) < QP ? src[-1*step] : src[0];
-                const int last= FFABS(src[8*step] - src[7*step]) < QP ? src[8*step] : src[7*step];
-
-                int sums[10];
-                sums[0] = 4*first + src[0*step] + src[1*step] + src[2*step] + 4;
-                sums[1] = sums[0] - first       + src[3*step];
-                sums[2] = sums[1] - first       + src[4*step];
-                sums[3] = sums[2] - first       + src[5*step];
-                sums[4] = sums[3] - first       + src[6*step];
-                sums[5] = sums[4] - src[0*step] + src[7*step];
-                sums[6] = sums[5] - src[1*step] + last;
-                sums[7] = sums[6] - src[2*step] + last;
-                sums[8] = sums[7] - src[3*step] + last;
-                sums[9] = sums[8] - src[4*step] + last;
-
-                if (mode & VISUALIZE) {
-                    src[0*step] =
-                    src[1*step] =
-                    src[2*step] =
-                    src[3*step] =
-                    src[4*step] =
-                    src[5*step] =
-                    src[6*step] =
-                    src[7*step] = 128;
-                }
-                src[0*step]= (sums[0] + sums[2] + 2*src[0*step])>>4;
-                src[1*step]= (sums[1] + sums[3] + 2*src[1*step])>>4;
-                src[2*step]= (sums[2] + sums[4] + 2*src[2*step])>>4;
-                src[3*step]= (sums[3] + sums[5] + 2*src[3*step])>>4;
-                src[4*step]= (sums[4] + sums[6] + 2*src[4*step])>>4;
-                src[5*step]= (sums[5] + sums[7] + 2*src[5*step])>>4;
-                src[6*step]= (sums[6] + sums[8] + 2*src[6*step])>>4;
-                src[7*step]= (sums[7] + sums[9] + 2*src[7*step])>>4;
-            }
-        }else{
-            const int middleEnergy= 5*(src[4*step] - src[3*step]) + 2*(src[2*step] - src[5*step]);
-
-            if(FFABS(middleEnergy) < 8*QP){
-                const int q=(src[3*step] - src[4*step])/2;
-                const int leftEnergy=  5*(src[2*step] - src[1*step]) + 2*(src[0*step] - src[3*step]);
-                const int rightEnergy= 5*(src[6*step] - src[5*step]) + 2*(src[4*step] - src[7*step]);
-
-                int d= FFABS(middleEnergy) - FFMIN( FFABS(leftEnergy), FFABS(rightEnergy) );
-                d= FFMAX(d, 0);
-
-                d= (5*d + 32) >> 6;
-                d*= FFSIGN(-middleEnergy);
-
-                if(q>0){
-                    d = FFMAX(d, 0);
-                    d = FFMIN(d, q);
-                }else{
-                    d = FFMIN(d, 0);
-                    d = FFMAX(d, q);
-                }
-
-                if ((mode & VISUALIZE) && d) {
-                    d= (d < 0) ? 32 : -32;
-                    src[3*step]= av_clip_uint8(src[3*step] - d);
-                    src[4*step]= av_clip_uint8(src[4*step] + d);
-                    d = 0;
-                }
-
-                src[3*step]-= d;
-                src[4*step]+= d;
-            }
-        }
-
-        src += stride;
-    }
-}
-
-//Note: we have C, MMX, MMX2, 3DNOW version there is no 3DNOW+MMX2 one
-//Plain C versions
-//we always compile C for testing which needs bitexactness
-#define TEMPLATE_PP_C 1
-#include "postprocess_template.c"
-
-#if HAVE_ALTIVEC
-#   define TEMPLATE_PP_ALTIVEC 1
-#   include "postprocess_altivec_template.c"
-#   include "postprocess_template.c"
-#endif
-
-#if ARCH_X86 && HAVE_INLINE_ASM
-#    if CONFIG_RUNTIME_CPUDETECT
-#        define TEMPLATE_PP_MMX 1
-#        include "postprocess_template.c"
-#        define TEMPLATE_PP_MMXEXT 1
-#        include "postprocess_template.c"
-#        define TEMPLATE_PP_3DNOW 1
-#        include "postprocess_template.c"
-#        define TEMPLATE_PP_SSE2 1
-#        include "postprocess_template.c"
-#    else
-#        if HAVE_SSE2_INLINE
-#            define TEMPLATE_PP_SSE2 1
-#            include "postprocess_template.c"
-#        elif HAVE_MMXEXT_INLINE
-#            define TEMPLATE_PP_MMXEXT 1
-#            include "postprocess_template.c"
-#        elif HAVE_AMD3DNOW_INLINE
-#            define TEMPLATE_PP_3DNOW 1
-#            include "postprocess_template.c"
-#        elif HAVE_MMX_INLINE
-#            define TEMPLATE_PP_MMX 1
-#            include "postprocess_template.c"
-#        endif
-#    endif
-#endif
-
-typedef void (*pp_fn)(const uint8_t src[], int srcStride, uint8_t dst[], int dstStride, int width, int height,
-                      const int8_t QPs[], int QPStride, int isColor, PPContext *c2);
-
-static inline void postProcess(const uint8_t src[], int srcStride, uint8_t dst[], int dstStride, int width, int height,
-        const int8_t QPs[], int QPStride, int isColor, pp_mode *vm, pp_context *vc)
-{
-    pp_fn pp = postProcess_C;
-    PPContext *c= (PPContext *)vc;
-    PPMode *ppMode= (PPMode *)vm;
-    c->ppMode= *ppMode; //FIXME
-
-    if (!(ppMode->lumMode & BITEXACT)) {
-#if CONFIG_RUNTIME_CPUDETECT
-#if ARCH_X86 && HAVE_INLINE_ASM
-        // ordered per speed fastest first
-        if      (c->cpuCaps & AV_CPU_FLAG_SSE2)     pp = postProcess_SSE2;
-        else if (c->cpuCaps & AV_CPU_FLAG_MMXEXT)   pp = postProcess_MMX2;
-        else if (c->cpuCaps & AV_CPU_FLAG_3DNOW)    pp = postProcess_3DNow;
-        else if (c->cpuCaps & AV_CPU_FLAG_MMX)      pp = postProcess_MMX;
-#elif HAVE_ALTIVEC
-        if      (c->cpuCaps & AV_CPU_FLAG_ALTIVEC)  pp = postProcess_altivec;
-#endif
-#else /* CONFIG_RUNTIME_CPUDETECT */
-#if     HAVE_SSE2_INLINE
-        pp = postProcess_SSE2;
-#elif   HAVE_MMXEXT_INLINE
-        pp = postProcess_MMX2;
-#elif HAVE_AMD3DNOW_INLINE
-        pp = postProcess_3DNow;
-#elif HAVE_MMX_INLINE
-        pp = postProcess_MMX;
-#elif HAVE_ALTIVEC
-        pp = postProcess_altivec;
-#endif
-#endif /* !CONFIG_RUNTIME_CPUDETECT */
-    }
-
-    pp(src, srcStride, dst, dstStride, width, height, QPs, QPStride, isColor, c);
-}
-
-/* -pp Command line Help
-*/
-const char pp_help[] =
-"Available postprocessing filters:\n"
-"Filters                        Options\n"
-"short  long name       short   long option     Description\n"
-"*      *               a       autoq           CPU power dependent enabler\n"
-"                       c       chrom           chrominance filtering enabled\n"
-"                       y       nochrom         chrominance filtering disabled\n"
-"                       n       noluma          luma filtering disabled\n"
-"hb     hdeblock        (2 threshold)           horizontal deblocking filter\n"
-"       1. difference factor: default=32, higher -> more deblocking\n"
-"       2. flatness threshold: default=39, lower -> more deblocking\n"
-"                       the h & v deblocking filters share these\n"
-"                       so you can't set different thresholds for h / v\n"
-"vb     vdeblock        (2 threshold)           vertical deblocking filter\n"
-"ha     hadeblock       (2 threshold)           horizontal deblocking filter\n"
-"va     vadeblock       (2 threshold)           vertical deblocking filter\n"
-"h1     x1hdeblock                              experimental h deblock filter 1\n"
-"v1     x1vdeblock                              experimental v deblock filter 1\n"
-"dr     dering                                  deringing filter\n"
-"al     autolevels                              automatic brightness / contrast\n"
-"                       f        fullyrange     stretch luminance to (0..255)\n"
-"lb     linblenddeint                           linear blend deinterlacer\n"
-"li     linipoldeint                            linear interpolating deinterlace\n"
-"ci     cubicipoldeint                          cubic interpolating deinterlacer\n"
-"md     mediandeint                             median deinterlacer\n"
-"fd     ffmpegdeint                             ffmpeg deinterlacer\n"
-"l5     lowpass5                                FIR lowpass deinterlacer\n"
-"de     default                                 hb:a,vb:a,dr:a\n"
-"fa     fast                                    h1:a,v1:a,dr:a\n"
-"ac                                             ha:a:128:7,va:a,dr:a\n"
-"tn     tmpnoise        (3 threshold)           temporal noise reducer\n"
-"                     1. <= 2. <= 3.            larger -> stronger filtering\n"
-"fq     forceQuant      <quantizer>             force quantizer\n"
-"Usage:\n"
-"<filterName>[:<option>[:<option>...]][[,|/][-]<filterName>[:<option>...]]...\n"
-"long form example:\n"
-"vdeblock:autoq/hdeblock:autoq/linblenddeint    default,-vdeblock\n"
-"short form example:\n"
-"vb:a/hb:a/lb                                   de,-vb\n"
-"more examples:\n"
-"tn:64:128:256\n"
-"\n"
-;
-
-pp_mode *pp_get_mode_by_name_and_quality(const char *name, int quality)
-{
-    char temp[GET_MODE_BUFFER_SIZE];
-    char *p= temp;
-    static const char filterDelimiters[] = ",/";
-    static const char optionDelimiters[] = ":|";
-    struct PPMode *ppMode;
-    char *filterToken;
-
-    if (!name)  {
-        av_log(NULL, AV_LOG_ERROR, "pp: Missing argument\n");
-        return NULL;
-    }
-
-    if (!strcmp(name, "help")) {
-        const char *p;
-        for (p = pp_help; strchr(p, '\n'); p = strchr(p, '\n') + 1) {
-            av_strlcpy(temp, p, FFMIN(sizeof(temp), strchr(p, '\n') - p + 2));
-            av_log(NULL, AV_LOG_INFO, "%s", temp);
-        }
-        return NULL;
-    }
-
-    ppMode= av_malloc(sizeof(PPMode));
-    if (!ppMode)
-        return NULL;
-
-    ppMode->lumMode= 0;
-    ppMode->chromMode= 0;
-    ppMode->maxTmpNoise[0]= 700;
-    ppMode->maxTmpNoise[1]= 1500;
-    ppMode->maxTmpNoise[2]= 3000;
-    ppMode->maxAllowedY= 234;
-    ppMode->minAllowedY= 16;
-    ppMode->baseDcDiff= 256/8;
-    ppMode->flatnessThreshold= 56-16-1;
-    ppMode->maxClippedThreshold= (AVRational){1,100};
-    ppMode->error=0;
-
-    memset(temp, 0, GET_MODE_BUFFER_SIZE);
-    av_strlcpy(temp, name, GET_MODE_BUFFER_SIZE - 1);
-
-    av_log(NULL, AV_LOG_DEBUG, "pp: %s\n", name);
-
-    for(;;){
-        const char *filterName;
-        int q= 1000000; //PP_QUALITY_MAX;
-        int chrom=-1;
-        int luma=-1;
-        const char *option;
-        const char *options[OPTIONS_ARRAY_SIZE];
-        int i;
-        int filterNameOk=0;
-        int numOfUnknownOptions=0;
-        int enable=1; //does the user want us to enabled or disabled the filter
-        char *tokstate;
-
-        filterToken= av_strtok(p, filterDelimiters, &tokstate);
-        if(!filterToken) break;
-        p+= strlen(filterToken) + 1; // p points to next filterToken
-        filterName= av_strtok(filterToken, optionDelimiters, &tokstate);
-        if (!filterName) {
-            ppMode->error++;
-            break;
-        }
-        av_log(NULL, AV_LOG_DEBUG, "pp: %s::%s\n", filterToken, filterName);
-
-        if(*filterName == '-'){
-            enable=0;
-            filterName++;
-        }
-
-        for(;;){ //for all options
-            option= av_strtok(NULL, optionDelimiters, &tokstate);
-            if(!option) break;
-
-            av_log(NULL, AV_LOG_DEBUG, "pp: option: %s\n", option);
-            if(!strcmp("autoq", option) || !strcmp("a", option)) q= quality;
-            else if(!strcmp("nochrom", option) || !strcmp("y", option)) chrom=0;
-            else if(!strcmp("chrom", option) || !strcmp("c", option)) chrom=1;
-            else if(!strcmp("noluma", option) || !strcmp("n", option)) luma=0;
-            else{
-                options[numOfUnknownOptions] = option;
-                numOfUnknownOptions++;
-            }
-            if(numOfUnknownOptions >= OPTIONS_ARRAY_SIZE-1) break;
-        }
-        options[numOfUnknownOptions] = NULL;
-
-        /* replace stuff from the replace Table */
-        for(i=0; replaceTable[2*i]; i++){
-            if(!strcmp(replaceTable[2*i], filterName)){
-                size_t newlen = strlen(replaceTable[2*i + 1]);
-                int plen;
-                int spaceLeft;
-
-                p--, *p=',';
-
-                plen= strlen(p);
-                spaceLeft= p - temp + plen;
-                if(spaceLeft + newlen  >= GET_MODE_BUFFER_SIZE - 1){
-                    ppMode->error++;
-                    break;
-                }
-                memmove(p + newlen, p, plen+1);
-                memcpy(p, replaceTable[2*i + 1], newlen);
-                filterNameOk=1;
-            }
-        }
-
-        for(i=0; filters[i].shortName; i++){
-            if(   !strcmp(filters[i].longName, filterName)
-               || !strcmp(filters[i].shortName, filterName)){
-                ppMode->lumMode &= ~filters[i].mask;
-                ppMode->chromMode &= ~filters[i].mask;
-
-                filterNameOk=1;
-                if(!enable) break; // user wants to disable it
-
-                if(q >= filters[i].minLumQuality && luma)
-                    ppMode->lumMode|= filters[i].mask;
-                if(chrom==1 || (chrom==-1 && filters[i].chromDefault))
-                    if(q >= filters[i].minChromQuality)
-                            ppMode->chromMode|= filters[i].mask;
-
-                if(filters[i].mask == LEVEL_FIX){
-                    int o;
-                    ppMode->minAllowedY= 16;
-                    ppMode->maxAllowedY= 234;
-                    for(o=0; options[o]; o++){
-                        if(  !strcmp(options[o],"fullyrange")
-                           ||!strcmp(options[o],"f")){
-                            ppMode->minAllowedY= 0;
-                            ppMode->maxAllowedY= 255;
-                            numOfUnknownOptions--;
-                        }
-                    }
-                }
-                else if(filters[i].mask == TEMP_NOISE_FILTER)
-                {
-                    int o;
-                    int numOfNoises=0;
-
-                    for(o=0; options[o]; o++){
-                        char *tail;
-                        ppMode->maxTmpNoise[numOfNoises]=
-                            strtol(options[o], &tail, 0);
-                        if(tail!=options[o]){
-                            numOfNoises++;
-                            numOfUnknownOptions--;
-                            if(numOfNoises >= 3) break;
-                        }
-                    }
-                }
-                else if(filters[i].mask == V_DEBLOCK   || filters[i].mask == H_DEBLOCK
-                     || filters[i].mask == V_A_DEBLOCK || filters[i].mask == H_A_DEBLOCK){
-                    int o;
-
-                    for(o=0; options[o] && o<2; o++){
-                        char *tail;
-                        int val= strtol(options[o], &tail, 0);
-                        if(tail==options[o]) break;
-
-                        numOfUnknownOptions--;
-                        if(o==0) ppMode->baseDcDiff= val;
-                        else ppMode->flatnessThreshold= val;
-                    }
-                }
-                else if(filters[i].mask == FORCE_QUANT){
-                    int o;
-                    ppMode->forcedQuant= 15;
-
-                    for(o=0; options[o] && o<1; o++){
-                        char *tail;
-                        int val= strtol(options[o], &tail, 0);
-                        if(tail==options[o]) break;
-
-                        numOfUnknownOptions--;
-                        ppMode->forcedQuant= val;
-                    }
-                }
-            }
-        }
-        if(!filterNameOk) ppMode->error++;
-        ppMode->error += numOfUnknownOptions;
-    }
-
-    av_log(NULL, AV_LOG_DEBUG, "pp: lumMode=%X, chromMode=%X\n", ppMode->lumMode, ppMode->chromMode);
-    if(ppMode->error){
-        av_log(NULL, AV_LOG_ERROR, "%d errors in postprocess string \"%s\"\n", ppMode->error, name);
-        av_free(ppMode);
-        return NULL;
-    }
-    return ppMode;
-}
-
-void pp_free_mode(pp_mode *mode){
-    av_free(mode);
-}
-
-static void reallocAlign(void **p, int size){
-    av_free(*p);
-    *p= av_mallocz(size);
-}
-
-static void reallocBuffers(PPContext *c, int width, int height, int stride, int qpStride){
-    int mbWidth = (width+15)>>4;
-    int mbHeight= (height+15)>>4;
-    int i;
-
-    c->stride= stride;
-    c->qpStride= qpStride;
-
-    reallocAlign((void **)&c->tempDst, stride*24+32);
-    reallocAlign((void **)&c->tempSrc, stride*24);
-    reallocAlign((void **)&c->tempBlocks, 2*16*8);
-    reallocAlign((void **)&c->yHistogram, 256*sizeof(uint64_t));
-    for(i=0; i<256; i++)
-            c->yHistogram[i]= width*height/64*15/256;
-
-    for(i=0; i<3; i++){
-        //Note: The +17*1024 is just there so I do not have to worry about r/w over the end.
-        reallocAlign((void **)&c->tempBlurred[i], stride*mbHeight*16 + 17*1024);
-        reallocAlign((void **)&c->tempBlurredPast[i], 256*((height+7)&(~7))/2 + 17*1024);//FIXME size
-    }
-
-    reallocAlign((void **)&c->deintTemp, 2*width+32);
-    reallocAlign((void **)&c->nonBQPTable, qpStride*mbHeight*sizeof(int8_t));
-    reallocAlign((void **)&c->stdQPTable, qpStride*mbHeight*sizeof(int8_t));
-    reallocAlign((void **)&c->forcedQPTable, mbWidth*sizeof(int8_t));
-}
-
-static const char * context_to_name(void * ptr) {
-    return "postproc";
-}
-
-static const AVClass av_codec_context_class = { "Postproc", context_to_name, NULL };
-
-av_cold pp_context *pp_get_context(int width, int height, int cpuCaps){
-    PPContext *c= av_mallocz(sizeof(PPContext));
-    int stride= FFALIGN(width, 16);  //assumed / will realloc if needed
-    int qpStride= (width+15)/16 + 2; //assumed / will realloc if needed
-
-    if (!c)
-        return NULL;
-
-    c->av_class = &av_codec_context_class;
-    if(cpuCaps&PP_FORMAT){
-        c->hChromaSubSample= cpuCaps&0x3;
-        c->vChromaSubSample= (cpuCaps>>4)&0x3;
-    }else{
-        c->hChromaSubSample= 1;
-        c->vChromaSubSample= 1;
-    }
-    if (cpuCaps & PP_CPU_CAPS_AUTO) {
-        c->cpuCaps = av_get_cpu_flags();
-    } else {
-        c->cpuCaps = 0;
-        if (cpuCaps & PP_CPU_CAPS_MMX)      c->cpuCaps |= AV_CPU_FLAG_MMX;
-        if (cpuCaps & PP_CPU_CAPS_MMX2)     c->cpuCaps |= AV_CPU_FLAG_MMXEXT;
-        if (cpuCaps & PP_CPU_CAPS_3DNOW)    c->cpuCaps |= AV_CPU_FLAG_3DNOW;
-        if (cpuCaps & PP_CPU_CAPS_ALTIVEC)  c->cpuCaps |= AV_CPU_FLAG_ALTIVEC;
-    }
-
-    reallocBuffers(c, width, height, stride, qpStride);
-
-    c->frameNum=-1;
-
-    return c;
-}
-
-av_cold void pp_free_context(void *vc){
-    PPContext *c = (PPContext*)vc;
-    int i;
-
-    for(i=0; i<FF_ARRAY_ELEMS(c->tempBlurred); i++)
-        av_free(c->tempBlurred[i]);
-    for(i=0; i<FF_ARRAY_ELEMS(c->tempBlurredPast); i++)
-        av_free(c->tempBlurredPast[i]);
-
-    av_free(c->tempBlocks);
-    av_free(c->yHistogram);
-    av_free(c->tempDst);
-    av_free(c->tempSrc);
-    av_free(c->deintTemp);
-    av_free(c->stdQPTable);
-    av_free(c->nonBQPTable);
-    av_free(c->forcedQPTable);
-
-    memset(c, 0, sizeof(PPContext));
-
-    av_free(c);
-}
-
-void  pp_postprocess(const uint8_t * src[3], const int srcStride[3],
-                     uint8_t * dst[3], const int dstStride[3],
-                     int width, int height,
-                     const int8_t *QP_store,  int QPStride,
-                     pp_mode *vm,  void *vc, int pict_type)
-{
-    int mbWidth = (width+15)>>4;
-    int mbHeight= (height+15)>>4;
-    PPMode *mode = vm;
-    PPContext *c = vc;
-    int minStride= FFMAX(FFABS(srcStride[0]), FFABS(dstStride[0]));
-    int absQPStride = FFABS(QPStride);
-
-    // c->stride and c->QPStride are always positive
-    if(c->stride < minStride || c->qpStride < absQPStride)
-        reallocBuffers(c, width, height,
-                       FFMAX(minStride, c->stride),
-                       FFMAX(c->qpStride, absQPStride));
-
-    if(!QP_store || (mode->lumMode & FORCE_QUANT)){
-        int i;
-        QP_store= c->forcedQPTable;
-        absQPStride = QPStride = 0;
-        if(mode->lumMode & FORCE_QUANT)
-            for(i=0; i<mbWidth; i++) c->forcedQPTable[i]= mode->forcedQuant;
-        else
-            for(i=0; i<mbWidth; i++) c->forcedQPTable[i]= 1;
-    }
-
-    if(pict_type & PP_PICT_TYPE_QP2){
-        int i;
-        const int count= FFMAX(mbHeight * absQPStride, mbWidth);
-        for(i=0; i<(count>>2); i++){
-            AV_WN32(c->stdQPTable + (i<<2), AV_RN32(QP_store + (i<<2)) >> 1 & 0x7F7F7F7F);
-        }
-        for(i<<=2; i<count; i++){
-            c->stdQPTable[i] = QP_store[i]>>1;
-        }
-        QP_store= c->stdQPTable;
-        QPStride= absQPStride;
-    }
-
-    if(0){
-        int x,y;
-        for(y=0; y<mbHeight; y++){
-            for(x=0; x<mbWidth; x++){
-                av_log(c, AV_LOG_INFO, "%2d ", QP_store[x + y*QPStride]);
-            }
-            av_log(c, AV_LOG_INFO, "\n");
-        }
-        av_log(c, AV_LOG_INFO, "\n");
-    }
-
-    if((pict_type&7)!=3){
-        if (QPStride >= 0){
-            int i;
-            const int count= FFMAX(mbHeight * QPStride, mbWidth);
-            for(i=0; i<(count>>2); i++){
-                AV_WN32(c->nonBQPTable + (i<<2), AV_RN32(QP_store + (i<<2)) & 0x3F3F3F3F);
-            }
-            for(i<<=2; i<count; i++){
-                c->nonBQPTable[i] = QP_store[i] & 0x3F;
-            }
-        } else {
-            int i,j;
-            for(i=0; i<mbHeight; i++) {
-                for(j=0; j<absQPStride; j++) {
-                    c->nonBQPTable[i*absQPStride+j] = QP_store[i*QPStride+j] & 0x3F;
-                }
-            }
-        }
-    }
-
-    av_log(c, AV_LOG_DEBUG, "using npp filters 0x%X/0x%X\n",
-           mode->lumMode, mode->chromMode);
-
-    postProcess(src[0], srcStride[0], dst[0], dstStride[0],
-                width, height, QP_store, QPStride, 0, mode, c);
-
-    if (!(src[1] && src[2] && dst[1] && dst[2]))
-        return;
-
-    width  = (width )>>c->hChromaSubSample;
-    height = (height)>>c->vChromaSubSample;
-
-    if(mode->chromMode){
-        postProcess(src[1], srcStride[1], dst[1], dstStride[1],
-                    width, height, QP_store, QPStride, 1, mode, c);
-        postProcess(src[2], srcStride[2], dst[2], dstStride[2],
-                    width, height, QP_store, QPStride, 2, mode, c);
-    }
-    else if(srcStride[1] == dstStride[1] && srcStride[2] == dstStride[2]){
-        linecpy(dst[1], src[1], height, srcStride[1]);
-        linecpy(dst[2], src[2], height, srcStride[2]);
-    }else{
-        int y;
-        for(y=0; y<height; y++){
-            memcpy(&(dst[1][y*dstStride[1]]), &(src[1][y*srcStride[1]]), width);
-            memcpy(&(dst[2][y*dstStride[2]]), &(src[2][y*srcStride[2]]), width);
-        }
-    }
-}
diff --git a/libpostproc/postprocess.h b/libpostproc/postprocess.h
deleted file mode 100644
index 348ee7c..0000000
--- a/libpostproc/postprocess.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (C) 2001-2003 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
- */
-
-#ifndef POSTPROC_POSTPROCESS_H
-#define POSTPROC_POSTPROCESS_H
-
-/**
- * @file
- * @ingroup lpp
- * external API header
- */
-
-/**
- * @defgroup lpp libpostproc
- * Video postprocessing library.
- *
- * @{
- */
-
-#include "libpostproc/version.h"
-
-/**
- * Return the LIBPOSTPROC_VERSION_INT constant.
- */
-unsigned postproc_version(void);
-
-/**
- * Return the libpostproc build-time configuration.
- */
-const char *postproc_configuration(void);
-
-/**
- * Return the libpostproc license.
- */
-const char *postproc_license(void);
-
-#define PP_QUALITY_MAX 6
-
-#include <inttypes.h>
-
-typedef void pp_context;
-typedef void pp_mode;
-
-#if LIBPOSTPROC_VERSION_INT < (52<<16)
-typedef pp_context pp_context_t;
-typedef pp_mode pp_mode_t;
-extern const char *const pp_help; ///< a simple help text
-#else
-extern const char pp_help[]; ///< a simple help text
-#endif
-
-void  pp_postprocess(const uint8_t * src[3], const int srcStride[3],
-                     uint8_t * dst[3], const int dstStride[3],
-                     int horizontalSize, int verticalSize,
-                     const int8_t *QP_store,  int QP_stride,
-                     pp_mode *mode, pp_context *ppContext, int pict_type);
-
-
-/**
- * Return a pp_mode or NULL if an error occurred.
- *
- * @param name    the string after "-pp" on the command line
- * @param quality a number from 0 to PP_QUALITY_MAX
- */
-pp_mode *pp_get_mode_by_name_and_quality(const char *name, int quality);
-void pp_free_mode(pp_mode *mode);
-
-pp_context *pp_get_context(int width, int height, int flags);
-void pp_free_context(pp_context *ppContext);
-
-#define PP_CPU_CAPS_MMX   0x80000000
-#define PP_CPU_CAPS_MMX2  0x20000000
-#define PP_CPU_CAPS_3DNOW 0x40000000
-#define PP_CPU_CAPS_ALTIVEC 0x10000000
-#define PP_CPU_CAPS_AUTO  0x00080000
-
-#define PP_FORMAT         0x00000008
-#define PP_FORMAT_420    (0x00000011|PP_FORMAT)
-#define PP_FORMAT_422    (0x00000001|PP_FORMAT)
-#define PP_FORMAT_411    (0x00000002|PP_FORMAT)
-#define PP_FORMAT_444    (0x00000000|PP_FORMAT)
-#define PP_FORMAT_440    (0x00000010|PP_FORMAT)
-
-#define PP_PICT_TYPE_QP2  0x00000010 ///< MPEG2 style QScale
-
-/**
- * @}
- */
-
-#endif /* POSTPROC_POSTPROCESS_H */
diff --git a/libpostproc/postprocess_altivec_template.c b/libpostproc/postprocess_altivec_template.c
deleted file mode 100644
index fa6ebe2..0000000
--- a/libpostproc/postprocess_altivec_template.c
+++ /dev/null
@@ -1,1210 +0,0 @@
-/*
- * AltiVec optimizations (C) 2004 Romain Dolbeau <romain@dolbeau.org>
- *
- * based on code by Copyright (C) 2001-2003 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
- */
-
-#include "libavutil/avutil.h"
-
-#define ALTIVEC_TRANSPOSE_8x8_SHORT(src_a,src_b,src_c,src_d,src_e,src_f,src_g,src_h) \
-    do {                                                          \
-        __typeof__(src_a) tempA1, tempB1, tempC1, tempD1;         \
-        __typeof__(src_a) tempE1, tempF1, tempG1, tempH1;         \
-        __typeof__(src_a) tempA2, tempB2, tempC2, tempD2;         \
-        __typeof__(src_a) tempE2, tempF2, tempG2, tempH2;         \
-        tempA1 = vec_mergeh (src_a, src_e);                       \
-        tempB1 = vec_mergel (src_a, src_e);                       \
-        tempC1 = vec_mergeh (src_b, src_f);                       \
-        tempD1 = vec_mergel (src_b, src_f);                       \
-        tempE1 = vec_mergeh (src_c, src_g);                       \
-        tempF1 = vec_mergel (src_c, src_g);                       \
-        tempG1 = vec_mergeh (src_d, src_h);                       \
-        tempH1 = vec_mergel (src_d, src_h);                       \
-        tempA2 = vec_mergeh (tempA1, tempE1);                     \
-        tempB2 = vec_mergel (tempA1, tempE1);                     \
-        tempC2 = vec_mergeh (tempB1, tempF1);                     \
-        tempD2 = vec_mergel (tempB1, tempF1);                     \
-        tempE2 = vec_mergeh (tempC1, tempG1);                     \
-        tempF2 = vec_mergel (tempC1, tempG1);                     \
-        tempG2 = vec_mergeh (tempD1, tempH1);                     \
-        tempH2 = vec_mergel (tempD1, tempH1);                     \
-        src_a = vec_mergeh (tempA2, tempE2);                      \
-        src_b = vec_mergel (tempA2, tempE2);                      \
-        src_c = vec_mergeh (tempB2, tempF2);                      \
-        src_d = vec_mergel (tempB2, tempF2);                      \
-        src_e = vec_mergeh (tempC2, tempG2);                      \
-        src_f = vec_mergel (tempC2, tempG2);                      \
-        src_g = vec_mergeh (tempD2, tempH2);                      \
-        src_h = vec_mergel (tempD2, tempH2);                      \
-    } while (0)
-
-
-static inline int vertClassify_altivec(uint8_t src[], int stride, PPContext *c) {
-    /*
-    this code makes no assumption on src or stride.
-    One could remove the recomputation of the perm
-    vector by assuming (stride % 16) == 0, unfortunately
-    this is not always true.
-    */
-    short data_0 = ((c->nonBQP*c->ppMode.baseDcDiff)>>8) + 1;
-    DECLARE_ALIGNED(16, short, data)[8] =
-                    {
-                        data_0,
-                        data_0 * 2 + 1,
-                        c->QP * 2,
-                        c->QP * 4
-                    };
-    int numEq;
-    uint8_t *src2 = src;
-    vector signed short v_dcOffset;
-    vector signed short v2QP;
-    vector unsigned short v4QP;
-    vector unsigned short v_dcThreshold;
-    const int properStride = (stride % 16);
-    const int srcAlign = ((unsigned long)src2 % 16);
-    const int two_vectors = ((srcAlign > 8) || properStride) ? 1 : 0;
-    const vector signed int zero = vec_splat_s32(0);
-    const vector signed short mask = vec_splat_s16(1);
-    vector signed int v_numEq = vec_splat_s32(0);
-    vector signed short v_data = vec_ld(0, data);
-    vector signed short v_srcAss0, v_srcAss1, v_srcAss2, v_srcAss3,
-                        v_srcAss4, v_srcAss5, v_srcAss6, v_srcAss7;
-//FIXME avoid this mess if possible
-    register int j0 = 0,
-                 j1 = stride,
-                 j2 = 2 * stride,
-                 j3 = 3 * stride,
-                 j4 = 4 * stride,
-                 j5 = 5 * stride,
-                 j6 = 6 * stride,
-                 j7 = 7 * stride;
-    vector unsigned char v_srcA0, v_srcA1, v_srcA2, v_srcA3,
-                         v_srcA4, v_srcA5, v_srcA6, v_srcA7;
-
-    v_dcOffset = vec_splat(v_data, 0);
-    v_dcThreshold = (vector unsigned short)vec_splat(v_data, 1);
-    v2QP = vec_splat(v_data, 2);
-    v4QP = (vector unsigned short)vec_splat(v_data, 3);
-
-    src2 += stride * 4;
-
-#define LOAD_LINE(i)                                                    \
-    {                                                                   \
-    vector unsigned char perm##i = vec_lvsl(j##i, src2);                \
-    vector unsigned char v_srcA2##i;                                    \
-    vector unsigned char v_srcA1##i = vec_ld(j##i, src2);               \
-    if (two_vectors)                                                    \
-        v_srcA2##i = vec_ld(j##i + 16, src2);                           \
-    v_srcA##i =                                                         \
-        vec_perm(v_srcA1##i, v_srcA2##i, perm##i);                      \
-    v_srcAss##i =                                                       \
-        (vector signed short)vec_mergeh((vector signed char)zero,       \
-                                        (vector signed char)v_srcA##i); }
-
-#define LOAD_LINE_ALIGNED(i)                                            \
-    v_srcA##i = vec_ld(j##i, src2);                                     \
-    v_srcAss##i =                                                       \
-        (vector signed short)vec_mergeh((vector signed char)zero,       \
-                                        (vector signed char)v_srcA##i)
-
-    /* Special-casing the aligned case is worthwhile, as all calls from
-     * the (transposed) horizontable deblocks will be aligned, in addition
-     * to the naturally aligned vertical deblocks. */
-    if (properStride && srcAlign) {
-        LOAD_LINE_ALIGNED(0);
-        LOAD_LINE_ALIGNED(1);
-        LOAD_LINE_ALIGNED(2);
-        LOAD_LINE_ALIGNED(3);
-        LOAD_LINE_ALIGNED(4);
-        LOAD_LINE_ALIGNED(5);
-        LOAD_LINE_ALIGNED(6);
-        LOAD_LINE_ALIGNED(7);
-    } else {
-        LOAD_LINE(0);
-        LOAD_LINE(1);
-        LOAD_LINE(2);
-        LOAD_LINE(3);
-        LOAD_LINE(4);
-        LOAD_LINE(5);
-        LOAD_LINE(6);
-        LOAD_LINE(7);
-    }
-#undef LOAD_LINE
-#undef LOAD_LINE_ALIGNED
-
-#define ITER(i, j)                                                      \
-    const vector signed short v_diff##i =                               \
-        vec_sub(v_srcAss##i, v_srcAss##j);                              \
-    const vector signed short v_sum##i =                                \
-        vec_add(v_diff##i, v_dcOffset);                                 \
-    const vector signed short v_comp##i =                               \
-        (vector signed short)vec_cmplt((vector unsigned short)v_sum##i, \
-                                       v_dcThreshold);                  \
-    const vector signed short v_part##i = vec_and(mask, v_comp##i);
-
-    {
-        ITER(0, 1)
-        ITER(1, 2)
-        ITER(2, 3)
-        ITER(3, 4)
-        ITER(4, 5)
-        ITER(5, 6)
-        ITER(6, 7)
-
-        v_numEq = vec_sum4s(v_part0, v_numEq);
-        v_numEq = vec_sum4s(v_part1, v_numEq);
-        v_numEq = vec_sum4s(v_part2, v_numEq);
-        v_numEq = vec_sum4s(v_part3, v_numEq);
-        v_numEq = vec_sum4s(v_part4, v_numEq);
-        v_numEq = vec_sum4s(v_part5, v_numEq);
-        v_numEq = vec_sum4s(v_part6, v_numEq);
-    }
-
-#undef ITER
-
-    v_numEq = vec_sums(v_numEq, zero);
-
-    v_numEq = vec_splat(v_numEq, 3);
-    vec_ste(v_numEq, 0, &numEq);
-
-    if (numEq > c->ppMode.flatnessThreshold){
-        const vector unsigned char mmoP1 = (const vector unsigned char)
-            {0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f,
-             0x00, 0x01, 0x12, 0x13, 0x08, 0x09, 0x1A, 0x1B};
-        const vector unsigned char mmoP2 = (const vector unsigned char)
-            {0x04, 0x05, 0x16, 0x17, 0x0C, 0x0D, 0x1E, 0x1F,
-             0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f};
-        const vector unsigned char mmoP = (const vector unsigned char)
-            vec_lvsl(8, (unsigned char*)0);
-
-        vector signed short mmoL1 = vec_perm(v_srcAss0, v_srcAss2, mmoP1);
-        vector signed short mmoL2 = vec_perm(v_srcAss4, v_srcAss6, mmoP2);
-        vector signed short mmoL = vec_perm(mmoL1, mmoL2, mmoP);
-        vector signed short mmoR1 = vec_perm(v_srcAss5, v_srcAss7, mmoP1);
-        vector signed short mmoR2 = vec_perm(v_srcAss1, v_srcAss3, mmoP2);
-        vector signed short mmoR = vec_perm(mmoR1, mmoR2, mmoP);
-        vector signed short mmoDiff = vec_sub(mmoL, mmoR);
-        vector unsigned short mmoSum = (vector unsigned short)vec_add(mmoDiff, v2QP);
-
-        if (vec_any_gt(mmoSum, v4QP))
-            return 0;
-        else
-            return 1;
-    }
-    else return 2;
-}
-
-static inline void doVertLowPass_altivec(uint8_t *src, int stride, PPContext *c) {
-    /*
-    this code makes no assumption on src or stride.
-    One could remove the recomputation of the perm
-    vector by assuming (stride % 16) == 0, unfortunately
-    this is not always true. Quite a lot of load/stores
-    can be removed by assuming proper alignment of
-    src & stride :-(
-    */
-    uint8_t *src2 = src;
-    const vector signed int zero = vec_splat_s32(0);
-    const int properStride = (stride % 16);
-    const int srcAlign = ((unsigned long)src2 % 16);
-    DECLARE_ALIGNED(16, short, qp)[8] = {c->QP};
-    vector signed short vqp = vec_ld(0, qp);
-    vector signed short vb0, vb1, vb2, vb3, vb4, vb5, vb6, vb7, vb8, vb9;
-    vector unsigned char vbA0, av_uninit(vbA1), av_uninit(vbA2), av_uninit(vbA3), av_uninit(vbA4), av_uninit(vbA5), av_uninit(vbA6), av_uninit(vbA7), av_uninit(vbA8), vbA9;
-    vector unsigned char vbB0, av_uninit(vbB1), av_uninit(vbB2), av_uninit(vbB3), av_uninit(vbB4), av_uninit(vbB5), av_uninit(vbB6), av_uninit(vbB7), av_uninit(vbB8), vbB9;
-    vector unsigned char vbT0, vbT1, vbT2, vbT3, vbT4, vbT5, vbT6, vbT7, vbT8, vbT9;
-    vector unsigned char perml0, perml1, perml2, perml3, perml4,
-                         perml5, perml6, perml7, perml8, perml9;
-    register int j0 = 0,
-                 j1 = stride,
-                 j2 = 2 * stride,
-                 j3 = 3 * stride,
-                 j4 = 4 * stride,
-                 j5 = 5 * stride,
-                 j6 = 6 * stride,
-                 j7 = 7 * stride,
-                 j8 = 8 * stride,
-                 j9 = 9 * stride;
-
-    vqp = vec_splat(vqp, 0);
-
-    src2 += stride*3;
-
-#define LOAD_LINE(i)                                                    \
-    perml##i = vec_lvsl(i * stride, src2);                              \
-    vbA##i = vec_ld(i * stride, src2);                                  \
-    vbB##i = vec_ld(i * stride + 16, src2);                             \
-    vbT##i = vec_perm(vbA##i, vbB##i, perml##i);                        \
-    vb##i =                                                             \
-        (vector signed short)vec_mergeh((vector unsigned char)zero,     \
-                                        (vector unsigned char)vbT##i)
-
-#define LOAD_LINE_ALIGNED(i)                                            \
-    vbT##i = vec_ld(j##i, src2);                                        \
-    vb##i =                                                             \
-        (vector signed short)vec_mergeh((vector signed char)zero,       \
-                                        (vector signed char)vbT##i)
-
-      /* Special-casing the aligned case is worthwhile, as all calls from
-       * the (transposed) horizontable deblocks will be aligned, in addition
-       * to the naturally aligned vertical deblocks. */
-    if (properStride && srcAlign) {
-          LOAD_LINE_ALIGNED(0);
-          LOAD_LINE_ALIGNED(1);
-          LOAD_LINE_ALIGNED(2);
-          LOAD_LINE_ALIGNED(3);
-          LOAD_LINE_ALIGNED(4);
-          LOAD_LINE_ALIGNED(5);
-          LOAD_LINE_ALIGNED(6);
-          LOAD_LINE_ALIGNED(7);
-          LOAD_LINE_ALIGNED(8);
-          LOAD_LINE_ALIGNED(9);
-    } else {
-          LOAD_LINE(0);
-          LOAD_LINE(1);
-          LOAD_LINE(2);
-          LOAD_LINE(3);
-          LOAD_LINE(4);
-          LOAD_LINE(5);
-          LOAD_LINE(6);
-          LOAD_LINE(7);
-          LOAD_LINE(8);
-          LOAD_LINE(9);
-    }
-#undef LOAD_LINE
-#undef LOAD_LINE_ALIGNED
-    {
-        const vector unsigned short v_2 = vec_splat_u16(2);
-        const vector unsigned short v_4 = vec_splat_u16(4);
-
-        const vector signed short v_diff01 = vec_sub(vb0, vb1);
-        const vector unsigned short v_cmp01 =
-            (const vector unsigned short) vec_cmplt(vec_abs(v_diff01), vqp);
-        const vector signed short v_first = vec_sel(vb1, vb0, v_cmp01);
-        const vector signed short v_diff89 = vec_sub(vb8, vb9);
-        const vector unsigned short v_cmp89 =
-            (const vector unsigned short) vec_cmplt(vec_abs(v_diff89), vqp);
-        const vector signed short v_last = vec_sel(vb8, vb9, v_cmp89);
-
-        const vector signed short temp01 = vec_mladd(v_first, (vector signed short)v_4, vb1);
-        const vector signed short temp02 = vec_add(vb2, vb3);
-        const vector signed short temp03 = vec_add(temp01, (vector signed short)v_4);
-        const vector signed short v_sumsB0 = vec_add(temp02, temp03);
-
-        const vector signed short temp11 = vec_sub(v_sumsB0, v_first);
-        const vector signed short v_sumsB1 = vec_add(temp11, vb4);
-
-        const vector signed short temp21 = vec_sub(v_sumsB1, v_first);
-        const vector signed short v_sumsB2 = vec_add(temp21, vb5);
-
-        const vector signed short temp31 = vec_sub(v_sumsB2, v_first);
-        const vector signed short v_sumsB3 = vec_add(temp31, vb6);
-
-        const vector signed short temp41 = vec_sub(v_sumsB3, v_first);
-        const vector signed short v_sumsB4 = vec_add(temp41, vb7);
-
-        const vector signed short temp51 = vec_sub(v_sumsB4, vb1);
-        const vector signed short v_sumsB5 = vec_add(temp51, vb8);
-
-        const vector signed short temp61 = vec_sub(v_sumsB5, vb2);
-        const vector signed short v_sumsB6 = vec_add(temp61, v_last);
-
-        const vector signed short temp71 = vec_sub(v_sumsB6, vb3);
-        const vector signed short v_sumsB7 = vec_add(temp71, v_last);
-
-        const vector signed short temp81 = vec_sub(v_sumsB7, vb4);
-        const vector signed short v_sumsB8 = vec_add(temp81, v_last);
-
-        const vector signed short temp91 = vec_sub(v_sumsB8, vb5);
-        const vector signed short v_sumsB9 = vec_add(temp91, v_last);
-
-    #define COMPUTE_VR(i, j, k)                                             \
-        const vector signed short temps1##i =                               \
-            vec_add(v_sumsB##i, v_sumsB##k);                                \
-        const vector signed short temps2##i =                               \
-            vec_mladd(vb##j, (vector signed short)v_2, temps1##i);          \
-        const vector signed short  vr##j = vec_sra(temps2##i, v_4)
-
-        COMPUTE_VR(0, 1, 2);
-        COMPUTE_VR(1, 2, 3);
-        COMPUTE_VR(2, 3, 4);
-        COMPUTE_VR(3, 4, 5);
-        COMPUTE_VR(4, 5, 6);
-        COMPUTE_VR(5, 6, 7);
-        COMPUTE_VR(6, 7, 8);
-        COMPUTE_VR(7, 8, 9);
-
-        const vector signed char neg1 = vec_splat_s8(-1);
-        const vector unsigned char permHH = (const vector unsigned char){0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
-                                                                         0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F};
-
-#define PACK_AND_STORE(i)                                       \
-{   const vector unsigned char perms##i =                       \
-        vec_lvsr(i * stride, src2);                             \
-    const vector unsigned char vf##i =                          \
-        vec_packsu(vr##i, (vector signed short)zero);           \
-    const vector unsigned char vg##i =                          \
-        vec_perm(vf##i, vbT##i, permHH);                        \
-    const vector unsigned char mask##i =                        \
-        vec_perm((vector unsigned char)zero, (vector unsigned char)neg1, perms##i); \
-    const vector unsigned char vg2##i =                         \
-        vec_perm(vg##i, vg##i, perms##i);                       \
-    const vector unsigned char svA##i =                         \
-        vec_sel(vbA##i, vg2##i, mask##i);                       \
-    const vector unsigned char svB##i =                         \
-        vec_sel(vg2##i, vbB##i, mask##i);                       \
-    vec_st(svA##i, i * stride, src2);                           \
-    vec_st(svB##i, i * stride + 16, src2);}
-
-#define PACK_AND_STORE_ALIGNED(i)                               \
-{   const vector unsigned char vf##i =                          \
-        vec_packsu(vr##i, (vector signed short)zero);           \
-    const vector unsigned char vg##i =                          \
-        vec_perm(vf##i, vbT##i, permHH);                        \
-    vec_st(vg##i, i * stride, src2);}
-
-        /* Special-casing the aligned case is worthwhile, as all calls from
-         * the (transposed) horizontable deblocks will be aligned, in addition
-         * to the naturally aligned vertical deblocks. */
-        if (properStride && srcAlign) {
-            PACK_AND_STORE_ALIGNED(1)
-            PACK_AND_STORE_ALIGNED(2)
-            PACK_AND_STORE_ALIGNED(3)
-            PACK_AND_STORE_ALIGNED(4)
-            PACK_AND_STORE_ALIGNED(5)
-            PACK_AND_STORE_ALIGNED(6)
-            PACK_AND_STORE_ALIGNED(7)
-            PACK_AND_STORE_ALIGNED(8)
-        } else {
-            PACK_AND_STORE(1)
-            PACK_AND_STORE(2)
-            PACK_AND_STORE(3)
-            PACK_AND_STORE(4)
-            PACK_AND_STORE(5)
-            PACK_AND_STORE(6)
-            PACK_AND_STORE(7)
-            PACK_AND_STORE(8)
-        }
-    #undef PACK_AND_STORE
-    #undef PACK_AND_STORE_ALIGNED
-    }
-}
-
-
-
-static inline void doVertDefFilter_altivec(uint8_t src[], int stride, PPContext *c) {
-    /*
-    this code makes no assumption on src or stride.
-    One could remove the recomputation of the perm
-    vector by assuming (stride % 16) == 0, unfortunately
-    this is not always true. Quite a lot of load/stores
-    can be removed by assuming proper alignment of
-    src & stride :-(
-    */
-    uint8_t *src2 = src + stride*3;
-    const vector signed int zero = vec_splat_s32(0);
-    DECLARE_ALIGNED(16, short, qp)[8] = {8*c->QP};
-    vector signed short vqp = vec_splat(
-                                (vector signed short)vec_ld(0, qp), 0);
-
-#define LOAD_LINE(i)                                                    \
-    const vector unsigned char perm##i =                                \
-        vec_lvsl(i * stride, src2);                                     \
-    const vector unsigned char vbA##i =                                 \
-        vec_ld(i * stride, src2);                                       \
-    const vector unsigned char vbB##i =                                 \
-        vec_ld(i * stride + 16, src2);                                  \
-    const vector unsigned char vbT##i =                                 \
-        vec_perm(vbA##i, vbB##i, perm##i);                              \
-    const vector signed short vb##i =                                   \
-        (vector signed short)vec_mergeh((vector unsigned char)zero,     \
-                                        (vector unsigned char)vbT##i)
-
-     LOAD_LINE(1);
-     LOAD_LINE(2);
-     LOAD_LINE(3);
-     LOAD_LINE(4);
-     LOAD_LINE(5);
-     LOAD_LINE(6);
-     LOAD_LINE(7);
-     LOAD_LINE(8);
-#undef LOAD_LINE
-
-     const vector signed short v_1 = vec_splat_s16(1);
-     const vector signed short v_2 = vec_splat_s16(2);
-     const vector signed short v_5 = vec_splat_s16(5);
-     const vector signed short v_32 = vec_sl(v_1,
-                                             (vector unsigned short)v_5);
-     /* middle energy */
-     const vector signed short l3minusl6 = vec_sub(vb3, vb6);
-     const vector signed short l5minusl4 = vec_sub(vb5, vb4);
-     const vector signed short twotimes_l3minusl6 = vec_mladd(v_2, l3minusl6, (vector signed short)zero);
-     const vector signed short mE = vec_mladd(v_5, l5minusl4, twotimes_l3minusl6);
-     const vector signed short absmE = vec_abs(mE);
-     /* left & right energy */
-     const vector signed short l1minusl4 = vec_sub(vb1, vb4);
-     const vector signed short l3minusl2 = vec_sub(vb3, vb2);
-     const vector signed short l5minusl8 = vec_sub(vb5, vb8);
-     const vector signed short l7minusl6 = vec_sub(vb7, vb6);
-     const vector signed short twotimes_l1minusl4 = vec_mladd(v_2, l1minusl4, (vector signed short)zero);
-     const vector signed short twotimes_l5minusl8 = vec_mladd(v_2, l5minusl8, (vector signed short)zero);
-     const vector signed short lE = vec_mladd(v_5, l3minusl2, twotimes_l1minusl4);
-     const vector signed short rE = vec_mladd(v_5, l7minusl6, twotimes_l5minusl8);
-     /* d */
-     const vector signed short ddiff = vec_sub(absmE,
-                                               vec_min(vec_abs(lE),
-                                                       vec_abs(rE)));
-     const vector signed short ddiffclamp = vec_max(ddiff, (vector signed short)zero);
-     const vector signed short dtimes64 = vec_mladd(v_5, ddiffclamp, v_32);
-     const vector signed short d = vec_sra(dtimes64, vec_splat_u16(6));
-     const vector signed short minusd = vec_sub((vector signed short)zero, d);
-     const vector signed short finald = vec_sel(minusd,
-                                                d,
-                                                vec_cmpgt(vec_sub((vector signed short)zero, mE),
-                                                          (vector signed short)zero));
-     /* q */
-     const vector signed short qtimes2 = vec_sub(vb4, vb5);
-     /* for a shift right to behave like /2, we need to add one
-        to all negative integer */
-     const vector signed short rounddown = vec_sel((vector signed short)zero,
-                                                   v_1,
-                                                   vec_cmplt(qtimes2, (vector signed short)zero));
-     const vector signed short q = vec_sra(vec_add(qtimes2, rounddown), vec_splat_u16(1));
-     /* clamp */
-     const vector signed short dclamp_P1 = vec_max((vector signed short)zero, finald);
-     const vector signed short dclamp_P = vec_min(dclamp_P1, q);
-     const vector signed short dclamp_N1 = vec_min((vector signed short)zero, finald);
-     const vector signed short dclamp_N = vec_max(dclamp_N1, q);
-
-     const vector signed short dclampedfinal = vec_sel(dclamp_N,
-                                                       dclamp_P,
-                                                       vec_cmpgt(q, (vector signed short)zero));
-     const vector signed short dornotd = vec_sel((vector signed short)zero,
-                                                 dclampedfinal,
-                                                 vec_cmplt(absmE, vqp));
-     /* add/subtract to l4 and l5 */
-     const vector signed short vb4minusd = vec_sub(vb4, dornotd);
-     const vector signed short vb5plusd  = vec_add(vb5, dornotd);
-     /* finally, stores */
-     const vector unsigned char st4 = vec_packsu(vb4minusd, (vector signed short)zero);
-     const vector unsigned char st5 = vec_packsu(vb5plusd,  (vector signed short)zero);
-
-     const vector signed char neg1 = vec_splat_s8(-1);
-     const vector unsigned char permHH = (const vector unsigned char){0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
-                                                                      0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F};
-
-#define STORE(i)                                                \
-{    const vector unsigned char perms##i =                      \
-         vec_lvsr(i * stride, src2);                            \
-     const vector unsigned char vg##i =                         \
-         vec_perm(st##i, vbT##i, permHH);                       \
-     const vector unsigned char mask##i =                       \
-         vec_perm((vector unsigned char)zero, (vector unsigned char)neg1, perms##i); \
-     const vector unsigned char vg2##i =                        \
-         vec_perm(vg##i, vg##i, perms##i);                      \
-     const vector unsigned char svA##i =                        \
-         vec_sel(vbA##i, vg2##i, mask##i);                      \
-     const vector unsigned char svB##i =                        \
-         vec_sel(vg2##i, vbB##i, mask##i);                      \
-     vec_st(svA##i, i * stride, src2);                          \
-     vec_st(svB##i, i * stride + 16, src2);}
-
-     STORE(4)
-     STORE(5)
-}
-
-static inline void dering_altivec(uint8_t src[], int stride, PPContext *c) {
-    const vector signed int vsint32_8 = vec_splat_s32(8);
-    const vector unsigned int vuint32_4 = vec_splat_u32(4);
-    const vector signed char neg1 = vec_splat_s8(-1);
-
-    const vector unsigned char permA1 = (vector unsigned char)
-        {0x00, 0x01, 0x02, 0x10, 0x11, 0x12, 0x1F, 0x1F,
-         0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F};
-    const vector unsigned char permA2 = (vector unsigned char)
-        {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x10, 0x11,
-         0x12, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F};
-    const vector unsigned char permA1inc = (vector unsigned char)
-        {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-    const vector unsigned char permA2inc = (vector unsigned char)
-        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01,
-         0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-    const vector unsigned char magic = (vector unsigned char)
-        {0x01, 0x02, 0x01, 0x02, 0x04, 0x02, 0x01, 0x02,
-         0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-    const vector unsigned char extractPerm = (vector unsigned char)
-        {0x10, 0x10, 0x10, 0x01, 0x10, 0x10, 0x10, 0x01,
-         0x10, 0x10, 0x10, 0x01, 0x10, 0x10, 0x10, 0x01};
-    const vector unsigned char extractPermInc = (vector unsigned char)
-        {0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
-         0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01};
-    const vector unsigned char identity = vec_lvsl(0,(unsigned char *)0);
-    const vector unsigned char tenRight = (vector unsigned char)
-        {0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-    const vector unsigned char eightLeft = (vector unsigned char)
-        {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08};
-
-    /*
-    this code makes no assumption on src or stride.
-    One could remove the recomputation of the perm
-    vector by assuming (stride % 16) == 0, unfortunately
-    this is not always true. Quite a lot of load/stores
-    can be removed by assuming proper alignment of
-    src & stride :-(
-    */
-    uint8_t *srcCopy = src;
-    DECLARE_ALIGNED(16, uint8_t, dt)[16] = { deringThreshold };
-    const vector signed int zero = vec_splat_s32(0);
-    vector unsigned char v_dt = vec_splat(vec_ld(0, dt), 0);
-
-#define LOAD_LINE(i)                                                  \
-    const vector unsigned char perm##i =                              \
-        vec_lvsl(i * stride, srcCopy);                                \
-    vector unsigned char sA##i = vec_ld(i * stride, srcCopy);         \
-    vector unsigned char sB##i = vec_ld(i * stride + 16, srcCopy);    \
-    vector unsigned char src##i = vec_perm(sA##i, sB##i, perm##i)
-
-    LOAD_LINE(0);
-    LOAD_LINE(1);
-    LOAD_LINE(2);
-    LOAD_LINE(3);
-    LOAD_LINE(4);
-    LOAD_LINE(5);
-    LOAD_LINE(6);
-    LOAD_LINE(7);
-    LOAD_LINE(8);
-    LOAD_LINE(9);
-#undef LOAD_LINE
-
-    vector unsigned char v_avg;
-    DECLARE_ALIGNED(16, signed int, S)[8];
-    DECLARE_ALIGNED(16, int, tQP2)[4] = { c->QP/2 + 1 };
-    vector signed int vQP2 = vec_ld(0, tQP2);
-    vQP2 = vec_splat(vQP2, 0);
-
-    {
-    const vector unsigned char trunc_perm = (vector unsigned char)
-        {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
-         0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18};
-    const vector unsigned char trunc_src12 = vec_perm(src1, src2, trunc_perm);
-    const vector unsigned char trunc_src34 = vec_perm(src3, src4, trunc_perm);
-    const vector unsigned char trunc_src56 = vec_perm(src5, src6, trunc_perm);
-    const vector unsigned char trunc_src78 = vec_perm(src7, src8, trunc_perm);
-
-#define EXTRACT(op) do {                                                \
-    const vector unsigned char s_1   = vec_##op(trunc_src12, trunc_src34); \
-    const vector unsigned char s_2   = vec_##op(trunc_src56, trunc_src78); \
-    const vector unsigned char s_6   = vec_##op(s_1, s_2);     \
-    const vector unsigned char s_8h  = vec_mergeh(s_6, s_6);   \
-    const vector unsigned char s_8l  = vec_mergel(s_6, s_6);   \
-    const vector unsigned char s_9   = vec_##op(s_8h, s_8l);   \
-    const vector unsigned char s_9h  = vec_mergeh(s_9, s_9);   \
-    const vector unsigned char s_9l  = vec_mergel(s_9, s_9);   \
-    const vector unsigned char s_10  = vec_##op(s_9h, s_9l);   \
-    const vector unsigned char s_10h = vec_mergeh(s_10, s_10); \
-    const vector unsigned char s_10l = vec_mergel(s_10, s_10); \
-    const vector unsigned char s_11  = vec_##op(s_10h, s_10l); \
-    const vector unsigned char s_11h = vec_mergeh(s_11, s_11); \
-    const vector unsigned char s_11l = vec_mergel(s_11, s_11); \
-    v_##op = vec_##op(s_11h, s_11l);                           \
-} while (0)
-
-    vector unsigned char v_min;
-    vector unsigned char v_max;
-    EXTRACT(min);
-    EXTRACT(max);
-#undef EXTRACT
-
-    if (vec_all_lt(vec_sub(v_max, v_min), v_dt))
-        return;
-
-    v_avg = vec_avg(v_min, v_max);
-    }
-
-    {
-    const vector unsigned short mask1 = (vector unsigned short)
-                                        {0x0001, 0x0002, 0x0004, 0x0008,
-                                         0x0010, 0x0020, 0x0040, 0x0080};
-    const vector unsigned short mask2 = (vector unsigned short)
-                                        {0x0100, 0x0200, 0x0000, 0x0000,
-                                         0x0000, 0x0000, 0x0000, 0x0000};
-
-    const vector unsigned int vuint32_16 = vec_sl(vec_splat_u32(1), vec_splat_u32(4));
-    const vector unsigned int vuint32_1 = vec_splat_u32(1);
-
-    vector signed int sumA2;
-    vector signed int sumB2;
-    vector signed int sum0, sum1, sum2, sum3, sum4;
-    vector signed int sum5, sum6, sum7, sum8, sum9;
-
-#define COMPARE(i)                                                      \
-    do {                                                                \
-        const vector unsigned char cmp =                                \
-            (vector unsigned char)vec_cmpgt(src##i, v_avg);             \
-        const vector unsigned short cmpHi =                             \
-            (vector unsigned short)vec_mergeh(cmp, cmp);                \
-        const vector unsigned short cmpLi =                             \
-            (vector unsigned short)vec_mergel(cmp, cmp);                \
-        const vector signed short cmpHf =                               \
-            (vector signed short)vec_and(cmpHi, mask1);                 \
-        const vector signed short cmpLf =                               \
-            (vector signed short)vec_and(cmpLi, mask2);                 \
-        const vector signed int sump = vec_sum4s(cmpHf, zero);          \
-        const vector signed int sumq = vec_sum4s(cmpLf, sump);          \
-        sum##i  = vec_sums(sumq, zero);                                 \
-    } while (0)
-
-    COMPARE(0);
-    COMPARE(1);
-    COMPARE(2);
-    COMPARE(3);
-    COMPARE(4);
-    COMPARE(5);
-    COMPARE(6);
-    COMPARE(7);
-    COMPARE(8);
-    COMPARE(9);
-#undef COMPARE
-
-    {
-    const vector signed int sump02 = vec_mergel(sum0, sum2);
-    const vector signed int sump13 = vec_mergel(sum1, sum3);
-    const vector signed int sumA = vec_mergel(sump02, sump13);
-
-    const vector signed int sump46 = vec_mergel(sum4, sum6);
-    const vector signed int sump57 = vec_mergel(sum5, sum7);
-    const vector signed int sumB = vec_mergel(sump46, sump57);
-
-    const vector signed int sump8A = vec_mergel(sum8, zero);
-    const vector signed int sump9B = vec_mergel(sum9, zero);
-    const vector signed int sumC = vec_mergel(sump8A, sump9B);
-
-    const vector signed int tA = vec_sl(vec_nor(zero, sumA), vuint32_16);
-    const vector signed int tB = vec_sl(vec_nor(zero, sumB), vuint32_16);
-    const vector signed int tC = vec_sl(vec_nor(zero, sumC), vuint32_16);
-    const vector signed int t2A = vec_or(sumA, tA);
-    const vector signed int t2B = vec_or(sumB, tB);
-    const vector signed int t2C = vec_or(sumC, tC);
-    const vector signed int t3A = vec_and(vec_sra(t2A, vuint32_1),
-                                          vec_sl(t2A, vuint32_1));
-    const vector signed int t3B = vec_and(vec_sra(t2B, vuint32_1),
-                                          vec_sl(t2B, vuint32_1));
-    const vector signed int t3C = vec_and(vec_sra(t2C, vuint32_1),
-                                          vec_sl(t2C, vuint32_1));
-    const vector signed int yA = vec_and(t2A, t3A);
-    const vector signed int yB = vec_and(t2B, t3B);
-    const vector signed int yC = vec_and(t2C, t3C);
-
-    const vector unsigned char strangeperm1 = vec_lvsl(4, (unsigned char*)0);
-    const vector unsigned char strangeperm2 = vec_lvsl(8, (unsigned char*)0);
-    const vector signed int sumAd4 = vec_perm(yA, yB, strangeperm1);
-    const vector signed int sumAd8 = vec_perm(yA, yB, strangeperm2);
-    const vector signed int sumBd4 = vec_perm(yB, yC, strangeperm1);
-    const vector signed int sumBd8 = vec_perm(yB, yC, strangeperm2);
-    const vector signed int sumAp = vec_and(yA,
-                                            vec_and(sumAd4,sumAd8));
-    const vector signed int sumBp = vec_and(yB,
-                                            vec_and(sumBd4,sumBd8));
-    sumA2 = vec_or(sumAp,
-                   vec_sra(sumAp,
-                           vuint32_16));
-    sumB2  = vec_or(sumBp,
-                    vec_sra(sumBp,
-                            vuint32_16));
-    }
-    vec_st(sumA2, 0, S);
-    vec_st(sumB2, 16, S);
-    }
-
-    /* I'm not sure the following is actually faster
-       than straight, unvectorized C code :-( */
-
-#define F_INIT()                                       \
-    vector unsigned char tenRightM = tenRight;         \
-    vector unsigned char permA1M = permA1;             \
-    vector unsigned char permA2M = permA2;             \
-    vector unsigned char extractPermM = extractPerm
-
-#define F2(i, j, k, l)                                                  \
-    if (S[i] & (1 << (l+1))) {                                          \
-        const vector unsigned char a_A = vec_perm(src##i, src##j, permA1M); \
-        const vector unsigned char a_B = vec_perm(a_A, src##k, permA2M); \
-        const vector signed int a_sump =                                \
-            (vector signed int)vec_msum(a_B, magic, (vector unsigned int)zero);\
-        vector signed int F = vec_sr(vec_sums(a_sump, vsint32_8), vuint32_4); \
-        const vector signed int p =                                     \
-            (vector signed int)vec_perm(src##j, (vector unsigned char)zero, \
-                                        extractPermM);                  \
-        const vector signed int sum  = vec_add(p, vQP2);                \
-        const vector signed int diff = vec_sub(p, vQP2);                \
-        vector signed int newpm;                                        \
-        vector unsigned char newpm2, mask;                              \
-        F = vec_splat(F, 3);                                            \
-        if (vec_all_lt(sum, F))                                         \
-            newpm = sum;                                                \
-        else if (vec_all_gt(diff, F))                                   \
-            newpm = diff;                                               \
-        else newpm = F;                                                 \
-        newpm2 = vec_splat((vector unsigned char)newpm, 15);            \
-        mask = vec_add(identity, tenRightM);                            \
-        src##j = vec_perm(src##j, newpm2, mask);                        \
-    }                                                                   \
-    permA1M = vec_add(permA1M, permA1inc);                              \
-    permA2M = vec_add(permA2M, permA2inc);                              \
-    tenRightM = vec_sro(tenRightM, eightLeft);                          \
-    extractPermM = vec_add(extractPermM, extractPermInc)
-
-#define ITER(i, j, k) do {                      \
-    F_INIT();                                   \
-    F2(i, j, k, 0);                             \
-    F2(i, j, k, 1);                             \
-    F2(i, j, k, 2);                             \
-    F2(i, j, k, 3);                             \
-    F2(i, j, k, 4);                             \
-    F2(i, j, k, 5);                             \
-    F2(i, j, k, 6);                             \
-    F2(i, j, k, 7);                             \
-} while (0)
-
-    ITER(0, 1, 2);
-    ITER(1, 2, 3);
-    ITER(2, 3, 4);
-    ITER(3, 4, 5);
-    ITER(4, 5, 6);
-    ITER(5, 6, 7);
-    ITER(6, 7, 8);
-    ITER(7, 8, 9);
-
-#define STORE_LINE(i) do {                              \
-    const vector unsigned char permST =                 \
-        vec_lvsr(i * stride, srcCopy);                  \
-    const vector unsigned char maskST =                 \
-        vec_perm((vector unsigned char)zero,            \
-                 (vector unsigned char)neg1, permST);   \
-    src##i = vec_perm(src##i ,src##i, permST);          \
-    sA##i= vec_sel(sA##i, src##i, maskST);              \
-    sB##i= vec_sel(src##i, sB##i, maskST);              \
-    vec_st(sA##i, i * stride, srcCopy);                 \
-    vec_st(sB##i, i * stride + 16, srcCopy);            \
-} while (0)
-
-    STORE_LINE(1);
-    STORE_LINE(2);
-    STORE_LINE(3);
-    STORE_LINE(4);
-    STORE_LINE(5);
-    STORE_LINE(6);
-    STORE_LINE(7);
-    STORE_LINE(8);
-
-#undef STORE_LINE
-#undef ITER
-#undef F2
-}
-
-#define doHorizLowPass_altivec(a...) doHorizLowPass_C(a)
-#define doHorizDefFilter_altivec(a...) doHorizDefFilter_C(a)
-#define do_a_deblock_altivec(a...) do_a_deblock_C(a)
-
-static inline void tempNoiseReducer_altivec(uint8_t *src, int stride,
-                                            uint8_t *tempBlurred, uint32_t *tempBlurredPast, int *maxNoise)
-{
-    const vector signed char neg1 = vec_splat_s8(-1);
-    const vector unsigned char permHH = (const vector unsigned char){0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
-                                                                     0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F};
-
-    const vector signed int zero = vec_splat_s32(0);
-    const vector signed short vsint16_1 = vec_splat_s16(1);
-    vector signed int v_dp = zero;
-    vector signed int v_sysdp = zero;
-    int d, sysd, i;
-
-#define LOAD_LINE(src, i)                                               \
-    register int j##src##i = i * stride;                                \
-    vector unsigned char perm##src##i = vec_lvsl(j##src##i, src);       \
-    const vector unsigned char v_##src##A1##i = vec_ld(j##src##i, src); \
-    const vector unsigned char v_##src##A2##i = vec_ld(j##src##i + 16, src); \
-    const vector unsigned char v_##src##A##i =                          \
-        vec_perm(v_##src##A1##i, v_##src##A2##i, perm##src##i);         \
-    vector signed short v_##src##Ass##i =                               \
-        (vector signed short)vec_mergeh((vector signed char)zero,       \
-                                        (vector signed char)v_##src##A##i)
-
-    LOAD_LINE(src, 0);
-    LOAD_LINE(src, 1);
-    LOAD_LINE(src, 2);
-    LOAD_LINE(src, 3);
-    LOAD_LINE(src, 4);
-    LOAD_LINE(src, 5);
-    LOAD_LINE(src, 6);
-    LOAD_LINE(src, 7);
-
-    LOAD_LINE(tempBlurred, 0);
-    LOAD_LINE(tempBlurred, 1);
-    LOAD_LINE(tempBlurred, 2);
-    LOAD_LINE(tempBlurred, 3);
-    LOAD_LINE(tempBlurred, 4);
-    LOAD_LINE(tempBlurred, 5);
-    LOAD_LINE(tempBlurred, 6);
-    LOAD_LINE(tempBlurred, 7);
-#undef LOAD_LINE
-
-#define ACCUMULATE_DIFFS(i) do {                                \
-        vector signed short v_d = vec_sub(v_tempBlurredAss##i,  \
-                                          v_srcAss##i);         \
-        v_dp = vec_msums(v_d, v_d, v_dp);                       \
-        v_sysdp = vec_msums(v_d, vsint16_1, v_sysdp);           \
-    } while (0)
-
-    ACCUMULATE_DIFFS(0);
-    ACCUMULATE_DIFFS(1);
-    ACCUMULATE_DIFFS(2);
-    ACCUMULATE_DIFFS(3);
-    ACCUMULATE_DIFFS(4);
-    ACCUMULATE_DIFFS(5);
-    ACCUMULATE_DIFFS(6);
-    ACCUMULATE_DIFFS(7);
-#undef ACCUMULATE_DIFFS
-
-    tempBlurredPast[127]= maxNoise[0];
-    tempBlurredPast[128]= maxNoise[1];
-    tempBlurredPast[129]= maxNoise[2];
-
-    v_dp = vec_sums(v_dp, zero);
-    v_sysdp = vec_sums(v_sysdp, zero);
-
-    v_dp = vec_splat(v_dp, 3);
-    v_sysdp = vec_splat(v_sysdp, 3);
-
-    vec_ste(v_dp, 0, &d);
-    vec_ste(v_sysdp, 0, &sysd);
-
-    i = d;
-    d = (4*d
-         +(*(tempBlurredPast-256))
-         +(*(tempBlurredPast-1))+ (*(tempBlurredPast+1))
-         +(*(tempBlurredPast+256))
-         +4)>>3;
-
-    *tempBlurredPast=i;
-
-    if (d > maxNoise[1]) {
-        if (d < maxNoise[2]) {
-#define OP(i) v_tempBlurredAss##i = vec_avg(v_tempBlurredAss##i, v_srcAss##i);
-
-            OP(0);
-            OP(1);
-            OP(2);
-            OP(3);
-            OP(4);
-            OP(5);
-            OP(6);
-            OP(7);
-#undef OP
-        } else {
-#define OP(i) v_tempBlurredAss##i = v_srcAss##i;
-
-            OP(0);
-            OP(1);
-            OP(2);
-            OP(3);
-            OP(4);
-            OP(5);
-            OP(6);
-            OP(7);
-#undef OP
-        }
-    } else {
-        if (d < maxNoise[0]) {
-            const vector signed short vsint16_7 = vec_splat_s16(7);
-            const vector signed short vsint16_4 = vec_splat_s16(4);
-            const vector unsigned short vuint16_3 = vec_splat_u16(3);
-
-#define OP(i) do {                                                      \
-            const vector signed short v_temp =                          \
-                vec_mladd(v_tempBlurredAss##i, vsint16_7, v_srcAss##i); \
-            const vector signed short v_temp2 = vec_add(v_temp, vsint16_4); \
-            v_tempBlurredAss##i = vec_sr(v_temp2, vuint16_3);           \
-        } while (0)
-
-            OP(0);
-            OP(1);
-            OP(2);
-            OP(3);
-            OP(4);
-            OP(5);
-            OP(6);
-            OP(7);
-#undef OP
-        } else {
-            const vector signed short vsint16_3 = vec_splat_s16(3);
-            const vector signed short vsint16_2 = vec_splat_s16(2);
-
-#define OP(i) do {                                              \
-            const vector signed short v_temp =                  \
-                vec_mladd(v_tempBlurredAss##i, vsint16_3, v_srcAss##i); \
-            const vector signed short v_temp2 = vec_add(v_temp, vsint16_2); \
-            v_tempBlurredAss##i =                                       \
-                vec_sr(v_temp2, (vector unsigned short)vsint16_2);      \
-        } while (0)
-
-            OP(0);
-            OP(1);
-            OP(2);
-            OP(3);
-            OP(4);
-            OP(5);
-            OP(6);
-            OP(7);
-#undef OP
-        }
-    }
-
-#define PACK_AND_STORE(src, i) do {                                      \
-    const vector unsigned char perms = vec_lvsr(i * stride, src);        \
-    const vector unsigned char vf =                                      \
-        vec_packsu(v_tempBlurredAss##1, (vector signed short)zero);     \
-    const vector unsigned char vg = vec_perm(vf, v_##src##A##i, permHH); \
-    const vector unsigned char mask =                                    \
-        vec_perm((vector unsigned char)zero, (vector unsigned char)neg1, perms); \
-    const vector unsigned char vg2 = vec_perm(vg, vg, perms);            \
-    const vector unsigned char svA = vec_sel(v_##src##A1##i, vg2, mask); \
-    const vector unsigned char svB = vec_sel(vg2, v_##src##A2##i, mask); \
-    vec_st(svA, i * stride, src);                                        \
-    vec_st(svB, i * stride + 16, src);                                   \
-} while (0)
-
-    PACK_AND_STORE(src, 0);
-    PACK_AND_STORE(src, 1);
-    PACK_AND_STORE(src, 2);
-    PACK_AND_STORE(src, 3);
-    PACK_AND_STORE(src, 4);
-    PACK_AND_STORE(src, 5);
-    PACK_AND_STORE(src, 6);
-    PACK_AND_STORE(src, 7);
-    PACK_AND_STORE(tempBlurred, 0);
-    PACK_AND_STORE(tempBlurred, 1);
-    PACK_AND_STORE(tempBlurred, 2);
-    PACK_AND_STORE(tempBlurred, 3);
-    PACK_AND_STORE(tempBlurred, 4);
-    PACK_AND_STORE(tempBlurred, 5);
-    PACK_AND_STORE(tempBlurred, 6);
-    PACK_AND_STORE(tempBlurred, 7);
-#undef PACK_AND_STORE
-}
-
-static inline void transpose_16x8_char_toPackedAlign_altivec(unsigned char* dst, unsigned char* src, int stride) {
-    const vector unsigned char zero = vec_splat_u8(0);
-
-#define LOAD_DOUBLE_LINE(i, j)                                          \
-    vector unsigned char perm1##i = vec_lvsl(i * stride, src);          \
-    vector unsigned char perm2##i = vec_lvsl(j * stride, src);          \
-    vector unsigned char srcA##i = vec_ld(i * stride, src);             \
-    vector unsigned char srcB##i = vec_ld(i * stride + 16, src);        \
-    vector unsigned char srcC##i = vec_ld(j * stride, src);             \
-    vector unsigned char srcD##i = vec_ld(j * stride+ 16, src);         \
-    vector unsigned char src##i = vec_perm(srcA##i, srcB##i, perm1##i); \
-    vector unsigned char src##j = vec_perm(srcC##i, srcD##i, perm2##i)
-
-    LOAD_DOUBLE_LINE(0, 1);
-    LOAD_DOUBLE_LINE(2, 3);
-    LOAD_DOUBLE_LINE(4, 5);
-    LOAD_DOUBLE_LINE(6, 7);
-#undef LOAD_DOUBLE_LINE
-
-    vector unsigned char tempA = vec_mergeh(src0, zero);
-    vector unsigned char tempB = vec_mergel(src0, zero);
-    vector unsigned char tempC = vec_mergeh(src1, zero);
-    vector unsigned char tempD = vec_mergel(src1, zero);
-    vector unsigned char tempE = vec_mergeh(src2, zero);
-    vector unsigned char tempF = vec_mergel(src2, zero);
-    vector unsigned char tempG = vec_mergeh(src3, zero);
-    vector unsigned char tempH = vec_mergel(src3, zero);
-    vector unsigned char tempI = vec_mergeh(src4, zero);
-    vector unsigned char tempJ = vec_mergel(src4, zero);
-    vector unsigned char tempK = vec_mergeh(src5, zero);
-    vector unsigned char tempL = vec_mergel(src5, zero);
-    vector unsigned char tempM = vec_mergeh(src6, zero);
-    vector unsigned char tempN = vec_mergel(src6, zero);
-    vector unsigned char tempO = vec_mergeh(src7, zero);
-    vector unsigned char tempP = vec_mergel(src7, zero);
-
-    vector unsigned char temp0  = vec_mergeh(tempA, tempI);
-    vector unsigned char temp1  = vec_mergel(tempA, tempI);
-    vector unsigned char temp2  = vec_mergeh(tempB, tempJ);
-    vector unsigned char temp3  = vec_mergel(tempB, tempJ);
-    vector unsigned char temp4  = vec_mergeh(tempC, tempK);
-    vector unsigned char temp5  = vec_mergel(tempC, tempK);
-    vector unsigned char temp6  = vec_mergeh(tempD, tempL);
-    vector unsigned char temp7  = vec_mergel(tempD, tempL);
-    vector unsigned char temp8  = vec_mergeh(tempE, tempM);
-    vector unsigned char temp9  = vec_mergel(tempE, tempM);
-    vector unsigned char temp10 = vec_mergeh(tempF, tempN);
-    vector unsigned char temp11 = vec_mergel(tempF, tempN);
-    vector unsigned char temp12 = vec_mergeh(tempG, tempO);
-    vector unsigned char temp13 = vec_mergel(tempG, tempO);
-    vector unsigned char temp14 = vec_mergeh(tempH, tempP);
-    vector unsigned char temp15 = vec_mergel(tempH, tempP);
-
-    tempA = vec_mergeh(temp0, temp8);
-    tempB = vec_mergel(temp0, temp8);
-    tempC = vec_mergeh(temp1, temp9);
-    tempD = vec_mergel(temp1, temp9);
-    tempE = vec_mergeh(temp2, temp10);
-    tempF = vec_mergel(temp2, temp10);
-    tempG = vec_mergeh(temp3, temp11);
-    tempH = vec_mergel(temp3, temp11);
-    tempI = vec_mergeh(temp4, temp12);
-    tempJ = vec_mergel(temp4, temp12);
-    tempK = vec_mergeh(temp5, temp13);
-    tempL = vec_mergel(temp5, temp13);
-    tempM = vec_mergeh(temp6, temp14);
-    tempN = vec_mergel(temp6, temp14);
-    tempO = vec_mergeh(temp7, temp15);
-    tempP = vec_mergel(temp7, temp15);
-
-    temp0  = vec_mergeh(tempA, tempI);
-    temp1  = vec_mergel(tempA, tempI);
-    temp2  = vec_mergeh(tempB, tempJ);
-    temp3  = vec_mergel(tempB, tempJ);
-    temp4  = vec_mergeh(tempC, tempK);
-    temp5  = vec_mergel(tempC, tempK);
-    temp6  = vec_mergeh(tempD, tempL);
-    temp7  = vec_mergel(tempD, tempL);
-    temp8  = vec_mergeh(tempE, tempM);
-    temp9  = vec_mergel(tempE, tempM);
-    temp10 = vec_mergeh(tempF, tempN);
-    temp11 = vec_mergel(tempF, tempN);
-    temp12 = vec_mergeh(tempG, tempO);
-    temp13 = vec_mergel(tempG, tempO);
-    temp14 = vec_mergeh(tempH, tempP);
-    temp15 = vec_mergel(tempH, tempP);
-
-    vec_st(temp0,    0, dst);
-    vec_st(temp1,   16, dst);
-    vec_st(temp2,   32, dst);
-    vec_st(temp3,   48, dst);
-    vec_st(temp4,   64, dst);
-    vec_st(temp5,   80, dst);
-    vec_st(temp6,   96, dst);
-    vec_st(temp7,  112, dst);
-    vec_st(temp8,  128, dst);
-    vec_st(temp9,  144, dst);
-    vec_st(temp10, 160, dst);
-    vec_st(temp11, 176, dst);
-    vec_st(temp12, 192, dst);
-    vec_st(temp13, 208, dst);
-    vec_st(temp14, 224, dst);
-    vec_st(temp15, 240, dst);
-}
-
-static inline void transpose_8x16_char_fromPackedAlign_altivec(unsigned char* dst, unsigned char* src, int stride) {
-    const vector unsigned char zero = vec_splat_u8(0);
-    const vector signed   char neg1 = vec_splat_s8(-1);
-
-#define LOAD_DOUBLE_LINE(i, j)                                  \
-    vector unsigned char src##i = vec_ld(i * 16, src);            \
-    vector unsigned char src##j = vec_ld(j * 16, src)
-
-    LOAD_DOUBLE_LINE(0, 1);
-    LOAD_DOUBLE_LINE(2, 3);
-    LOAD_DOUBLE_LINE(4, 5);
-    LOAD_DOUBLE_LINE(6, 7);
-    LOAD_DOUBLE_LINE(8, 9);
-    LOAD_DOUBLE_LINE(10, 11);
-    LOAD_DOUBLE_LINE(12, 13);
-    LOAD_DOUBLE_LINE(14, 15);
-#undef LOAD_DOUBLE_LINE
-
-    vector unsigned char tempA = vec_mergeh(src0, src8);
-    vector unsigned char tempB;
-    vector unsigned char tempC = vec_mergeh(src1, src9);
-    vector unsigned char tempD;
-    vector unsigned char tempE = vec_mergeh(src2, src10);
-    vector unsigned char tempG = vec_mergeh(src3, src11);
-    vector unsigned char tempI = vec_mergeh(src4, src12);
-    vector unsigned char tempJ;
-    vector unsigned char tempK = vec_mergeh(src5, src13);
-    vector unsigned char tempL;
-    vector unsigned char tempM = vec_mergeh(src6, src14);
-    vector unsigned char tempO = vec_mergeh(src7, src15);
-
-    vector unsigned char temp0 = vec_mergeh(tempA, tempI);
-    vector unsigned char temp1 = vec_mergel(tempA, tempI);
-    vector unsigned char temp2;
-    vector unsigned char temp3;
-    vector unsigned char temp4 = vec_mergeh(tempC, tempK);
-    vector unsigned char temp5 = vec_mergel(tempC, tempK);
-    vector unsigned char temp6;
-    vector unsigned char temp7;
-    vector unsigned char temp8 = vec_mergeh(tempE, tempM);
-    vector unsigned char temp9 = vec_mergel(tempE, tempM);
-    vector unsigned char temp12 = vec_mergeh(tempG, tempO);
-    vector unsigned char temp13 = vec_mergel(tempG, tempO);
-
-    tempA = vec_mergeh(temp0, temp8);
-    tempB = vec_mergel(temp0, temp8);
-    tempC = vec_mergeh(temp1, temp9);
-    tempD = vec_mergel(temp1, temp9);
-    tempI = vec_mergeh(temp4, temp12);
-    tempJ = vec_mergel(temp4, temp12);
-    tempK = vec_mergeh(temp5, temp13);
-    tempL = vec_mergel(temp5, temp13);
-
-    temp0 = vec_mergeh(tempA, tempI);
-    temp1 = vec_mergel(tempA, tempI);
-    temp2 = vec_mergeh(tempB, tempJ);
-    temp3 = vec_mergel(tempB, tempJ);
-    temp4 = vec_mergeh(tempC, tempK);
-    temp5 = vec_mergel(tempC, tempK);
-    temp6 = vec_mergeh(tempD, tempL);
-    temp7 = vec_mergel(tempD, tempL);
-
-
-#define STORE_DOUBLE_LINE(i, j) do {                                    \
-    vector unsigned char dstAi = vec_ld(i * stride, dst);               \
-    vector unsigned char dstBi = vec_ld(i * stride + 16, dst);          \
-    vector unsigned char dstAj = vec_ld(j * stride, dst);               \
-    vector unsigned char dstBj = vec_ld(j * stride+ 16, dst);           \
-    vector unsigned char aligni = vec_lvsr(i * stride, dst);            \
-    vector unsigned char alignj = vec_lvsr(j * stride, dst);            \
-    vector unsigned char maski =                                        \
-        vec_perm(zero, (vector unsigned char)neg1, aligni);             \
-    vector unsigned char maskj =                                        \
-        vec_perm(zero, (vector unsigned char)neg1, alignj);             \
-    vector unsigned char dstRi = vec_perm(temp##i, temp##i, aligni);    \
-    vector unsigned char dstRj = vec_perm(temp##j, temp##j, alignj);    \
-    vector unsigned char dstAFi = vec_sel(dstAi, dstRi, maski);         \
-    vector unsigned char dstBFi = vec_sel(dstRi, dstBi, maski);         \
-    vector unsigned char dstAFj = vec_sel(dstAj, dstRj, maskj);         \
-    vector unsigned char dstBFj = vec_sel(dstRj, dstBj, maskj);         \
-    vec_st(dstAFi, i * stride, dst);                                    \
-    vec_st(dstBFi, i * stride + 16, dst);                               \
-    vec_st(dstAFj, j * stride, dst);                                    \
-    vec_st(dstBFj, j * stride + 16, dst);                               \
-} while (0)
-
-    STORE_DOUBLE_LINE(0,1);
-    STORE_DOUBLE_LINE(2,3);
-    STORE_DOUBLE_LINE(4,5);
-    STORE_DOUBLE_LINE(6,7);
-}
diff --git a/libpostproc/postprocess_internal.h b/libpostproc/postprocess_internal.h
deleted file mode 100644
index 765fdeb..0000000
--- a/libpostproc/postprocess_internal.h
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Copyright (C) 2001-2002 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
- * internal API header.
- */
-
-#ifndef POSTPROC_POSTPROCESS_INTERNAL_H
-#define POSTPROC_POSTPROCESS_INTERNAL_H
-
-#include <string.h>
-#include "libavutil/avutil.h"
-#include "libavutil/intmath.h"
-#include "libavutil/log.h"
-#include "postprocess.h"
-
-#define V_DEBLOCK       0x01
-#define H_DEBLOCK       0x02
-#define DERING          0x04
-#define LEVEL_FIX       0x08 ///< Brightness & Contrast
-
-#define LUM_V_DEBLOCK   V_DEBLOCK               //   1
-#define LUM_H_DEBLOCK   H_DEBLOCK               //   2
-#define CHROM_V_DEBLOCK (V_DEBLOCK<<4)          //  16
-#define CHROM_H_DEBLOCK (H_DEBLOCK<<4)          //  32
-#define LUM_DERING      DERING                  //   4
-#define CHROM_DERING    (DERING<<4)             //  64
-#define LUM_LEVEL_FIX   LEVEL_FIX               //   8
-#define CHROM_LEVEL_FIX (LEVEL_FIX<<4)          // 128 (not implemented yet)
-
-// Experimental vertical filters
-#define V_X1_FILTER     0x0200                  // 512
-#define V_A_DEBLOCK     0x0400
-
-// Experimental horizontal filters
-#define H_X1_FILTER     0x2000                  // 8192
-#define H_A_DEBLOCK     0x4000
-
-/// select between full y range (255-0) or standard one (234-16)
-#define FULL_Y_RANGE    0x8000                  // 32768
-
-//Deinterlacing Filters
-#define LINEAR_IPOL_DEINT_FILTER        0x10000 // 65536
-#define LINEAR_BLEND_DEINT_FILTER       0x20000 // 131072
-#define CUBIC_BLEND_DEINT_FILTER        0x8000  // (not implemented yet)
-#define CUBIC_IPOL_DEINT_FILTER         0x40000 // 262144
-#define MEDIAN_DEINT_FILTER             0x80000 // 524288
-#define FFMPEG_DEINT_FILTER             0x400000
-#define LOWPASS5_DEINT_FILTER           0x800000
-
-#define TEMP_NOISE_FILTER               0x100000
-#define FORCE_QUANT                     0x200000
-#define BITEXACT                        0x1000000
-#define VISUALIZE                       0x2000000
-
-//use if you want a faster postprocessing code
-//cannot differentiate between chroma & luma filters (both on or both off)
-//obviously the -pp option on the command line has no effect except turning the here selected
-//filters on
-//#define COMPILE_TIME_MODE 0x77
-
-/**
- * Postprocessing filter.
- */
-struct PPFilter{
-    const char *shortName;
-    const char *longName;
-    int chromDefault;       ///< is chrominance filtering on by default if this filter is manually activated
-    int minLumQuality;      ///< minimum quality to turn luminance filtering on
-    int minChromQuality;    ///< minimum quality to turn chrominance filtering on
-    int mask;               ///< Bitmask to turn this filter on
-};
-
-/**
- * Postprocessing mode.
- */
-typedef struct PPMode{
-    int lumMode;                    ///< activates filters for luminance
-    int chromMode;                  ///< activates filters for chrominance
-    int error;                      ///< non zero on error
-
-    int minAllowedY;                ///< for brightness correction
-    int maxAllowedY;                ///< for brightness correction
-    AVRational maxClippedThreshold; ///< amount of "black" you are willing to lose to get a brightness-corrected picture
-
-    int maxTmpNoise[3];             ///< for Temporal Noise Reducing filter (Maximal sum of abs differences)
-
-    int baseDcDiff;
-    int flatnessThreshold;
-
-    int forcedQuant;                ///< quantizer if FORCE_QUANT is used
-} PPMode;
-
-/**
- * postprocess context.
- */
-typedef struct PPContext{
-    /**
-     * info on struct for av_log
-     */
-    const AVClass *av_class;
-
-    uint8_t *tempBlocks; ///<used for the horizontal code
-
-    /**
-     * luma histogram.
-     * we need 64bit here otherwise we'll going to have a problem
-     * after watching a black picture for 5 hours
-     */
-    uint64_t *yHistogram;
-
-    DECLARE_ALIGNED(8, uint64_t, packedYOffset);
-    DECLARE_ALIGNED(8, uint64_t, packedYScale);
-
-    /** Temporal noise reducing buffers */
-    uint8_t *tempBlurred[3];
-    int32_t *tempBlurredPast[3];
-
-    /** Temporary buffers for handling the last row(s) */
-    uint8_t *tempDst;
-    uint8_t *tempSrc;
-
-    uint8_t *deintTemp;
-
-    DECLARE_ALIGNED(8, uint64_t, pQPb);
-    DECLARE_ALIGNED(8, uint64_t, pQPb2);
-
-    DECLARE_ALIGNED(32, uint64_t, pQPb_block)[4];
-    DECLARE_ALIGNED(32, uint64_t, pQPb2_block)[4];
-
-    DECLARE_ALIGNED(32, uint64_t, mmxDcOffset)[64];
-    DECLARE_ALIGNED(32, uint64_t, mmxDcThreshold)[64];
-
-    int8_t *stdQPTable;       ///< used to fix MPEG2 style qscale
-    int8_t *nonBQPTable;
-    int8_t *forcedQPTable;
-
-    int QP;
-    int nonBQP;
-
-    DECLARE_ALIGNED(32, int, QP_block)[4];
-    DECLARE_ALIGNED(32, int, nonBQP_block)[4];
-
-    int frameNum;
-
-    int cpuCaps;
-
-    int qpStride; ///<size of qp buffers (needed to realloc them if needed)
-    int stride;   ///<size of some buffers (needed to realloc them if needed)
-
-    int hChromaSubSample;
-    int vChromaSubSample;
-
-    PPMode ppMode;
-} PPContext;
-
-
-static inline void linecpy(void *dest, const void *src, int lines, int stride) {
-    if (stride > 0) {
-        memcpy(dest, src, lines*stride);
-    } else {
-        memcpy((uint8_t*)dest+(lines-1)*stride, (const uint8_t*)src+(lines-1)*stride, -lines*stride);
-    }
-}
-
-#endif /* POSTPROC_POSTPROCESS_INTERNAL_H */
diff --git a/libpostproc/postprocess_template.c b/libpostproc/postprocess_template.c
deleted file mode 100644
index df1684d..0000000
--- a/libpostproc/postprocess_template.c
+++ /dev/null
@@ -1,3740 +0,0 @@
-/*
- * Copyright (C) 2001-2002 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
- * mmx/mmx2/3dnow postprocess code.
- */
-
-#include "libavutil/x86/asm.h"
-
-/* A single TEMPLATE_PP_* should be defined (to 1) when this template is
- * included. The following macros will define its dependencies to 1 as well
- * (like MMX2 depending on MMX), and will define to 0 all the others. Every
- * TEMPLATE_PP_* need to be undef at the end. */
-
-#ifdef TEMPLATE_PP_C
-#   define RENAME(a) a ## _C
-#else
-#   define TEMPLATE_PP_C 0
-#endif
-
-#ifdef TEMPLATE_PP_ALTIVEC
-#   define RENAME(a) a ## _altivec
-#else
-#   define TEMPLATE_PP_ALTIVEC 0
-#endif
-
-#ifdef TEMPLATE_PP_MMX
-#   define RENAME(a) a ## _MMX
-#else
-#   define TEMPLATE_PP_MMX 0
-#endif
-
-#ifdef TEMPLATE_PP_MMXEXT
-#   undef  TEMPLATE_PP_MMX
-#   define TEMPLATE_PP_MMX 1
-#   define RENAME(a) a ## _MMX2
-#else
-#   define TEMPLATE_PP_MMXEXT 0
-#endif
-
-#ifdef TEMPLATE_PP_3DNOW
-#   undef  TEMPLATE_PP_MMX
-#   define TEMPLATE_PP_MMX 1
-#   define RENAME(a) a ## _3DNow
-#else
-#   define TEMPLATE_PP_3DNOW 0
-#endif
-
-#ifdef TEMPLATE_PP_SSE2
-#   undef  TEMPLATE_PP_MMX
-#   define TEMPLATE_PP_MMX 1
-#   undef  TEMPLATE_PP_MMXEXT
-#   define TEMPLATE_PP_MMXEXT 1
-#   define RENAME(a) a ## _SSE2
-#else
-#   define TEMPLATE_PP_SSE2 0
-#endif
-
-#undef REAL_PAVGB
-#undef PAVGB
-#undef PMINUB
-#undef PMAXUB
-
-#if   TEMPLATE_PP_MMXEXT
-#define REAL_PAVGB(a,b) "pavgb " #a ", " #b " \n\t"
-#elif TEMPLATE_PP_3DNOW
-#define REAL_PAVGB(a,b) "pavgusb " #a ", " #b " \n\t"
-#endif
-#define PAVGB(a,b)  REAL_PAVGB(a,b)
-
-#if   TEMPLATE_PP_MMXEXT
-#define PMINUB(a,b,t) "pminub " #a ", " #b " \n\t"
-#elif TEMPLATE_PP_MMX
-#define PMINUB(b,a,t) \
-    "movq " #a ", " #t " \n\t"\
-    "psubusb " #b ", " #t " \n\t"\
-    "psubb " #t ", " #a " \n\t"
-#endif
-
-#if   TEMPLATE_PP_MMXEXT
-#define PMAXUB(a,b) "pmaxub " #a ", " #b " \n\t"
-#elif TEMPLATE_PP_MMX
-#define PMAXUB(a,b) \
-    "psubusb " #a ", " #b " \n\t"\
-    "paddb " #a ", " #b " \n\t"
-#endif
-
-//FIXME? |255-0| = 1 (should not be a problem ...)
-#if TEMPLATE_PP_MMX
-/**
- * Check if the middle 8x8 Block in the given 8x16 block is flat
- */
-static inline int RENAME(vertClassify)(const uint8_t src[], int stride, PPContext *c){
-    int numEq= 0, dcOk;
-    src+= stride*4; // src points to begin of the 8x8 Block
-    __asm__ volatile(
-        "movq %0, %%mm7                         \n\t"
-        "movq %1, %%mm6                         \n\t"
-        : : "m" (c->mmxDcOffset[c->nonBQP]),  "m" (c->mmxDcThreshold[c->nonBQP])
-        );
-
-    __asm__ volatile(
-        "lea (%2, %3), %%"FF_REG_a"             \n\t"
-//      0       1       2       3       4       5       6       7       8       9
-//      %1      eax     eax+%2  eax+2%2 %1+4%2  ecx     ecx+%2  ecx+2%2 %1+8%2  ecx+4%2
-
-        "movq (%2), %%mm0                       \n\t"
-        "movq (%%"FF_REG_a"), %%mm1             \n\t"
-        "movq %%mm0, %%mm3                      \n\t"
-        "movq %%mm0, %%mm4                      \n\t"
-        PMAXUB(%%mm1, %%mm4)
-        PMINUB(%%mm1, %%mm3, %%mm5)
-        "psubb %%mm1, %%mm0                     \n\t" // mm0 = difference
-        "paddb %%mm7, %%mm0                     \n\t"
-        "pcmpgtb %%mm6, %%mm0                   \n\t"
-
-        "movq (%%"FF_REG_a",%3), %%mm2          \n\t"
-        PMAXUB(%%mm2, %%mm4)
-        PMINUB(%%mm2, %%mm3, %%mm5)
-        "psubb %%mm2, %%mm1                     \n\t"
-        "paddb %%mm7, %%mm1                     \n\t"
-        "pcmpgtb %%mm6, %%mm1                   \n\t"
-        "paddb %%mm1, %%mm0                     \n\t"
-
-        "movq (%%"FF_REG_a", %3, 2), %%mm1      \n\t"
-        PMAXUB(%%mm1, %%mm4)
-        PMINUB(%%mm1, %%mm3, %%mm5)
-        "psubb %%mm1, %%mm2                     \n\t"
-        "paddb %%mm7, %%mm2                     \n\t"
-        "pcmpgtb %%mm6, %%mm2                   \n\t"
-        "paddb %%mm2, %%mm0                     \n\t"
-
-        "lea (%%"FF_REG_a", %3, 4), %%"FF_REG_a"\n\t"
-
-        "movq (%2, %3, 4), %%mm2                \n\t"
-        PMAXUB(%%mm2, %%mm4)
-        PMINUB(%%mm2, %%mm3, %%mm5)
-        "psubb %%mm2, %%mm1                     \n\t"
-        "paddb %%mm7, %%mm1                     \n\t"
-        "pcmpgtb %%mm6, %%mm1                   \n\t"
-        "paddb %%mm1, %%mm0                     \n\t"
-
-        "movq (%%"FF_REG_a"), %%mm1             \n\t"
-        PMAXUB(%%mm1, %%mm4)
-        PMINUB(%%mm1, %%mm3, %%mm5)
-        "psubb %%mm1, %%mm2                     \n\t"
-        "paddb %%mm7, %%mm2                     \n\t"
-        "pcmpgtb %%mm6, %%mm2                   \n\t"
-        "paddb %%mm2, %%mm0                     \n\t"
-
-        "movq (%%"FF_REG_a", %3), %%mm2         \n\t"
-        PMAXUB(%%mm2, %%mm4)
-        PMINUB(%%mm2, %%mm3, %%mm5)
-        "psubb %%mm2, %%mm1                     \n\t"
-        "paddb %%mm7, %%mm1                     \n\t"
-        "pcmpgtb %%mm6, %%mm1                   \n\t"
-        "paddb %%mm1, %%mm0                     \n\t"
-
-        "movq (%%"FF_REG_a", %3, 2), %%mm1      \n\t"
-        PMAXUB(%%mm1, %%mm4)
-        PMINUB(%%mm1, %%mm3, %%mm5)
-        "psubb %%mm1, %%mm2                     \n\t"
-        "paddb %%mm7, %%mm2                     \n\t"
-        "pcmpgtb %%mm6, %%mm2                   \n\t"
-        "paddb %%mm2, %%mm0                     \n\t"
-        "psubusb %%mm3, %%mm4                   \n\t"
-
-        "                                       \n\t"
-#if TEMPLATE_PP_MMXEXT
-        "pxor %%mm7, %%mm7                      \n\t"
-        "psadbw %%mm7, %%mm0                    \n\t"
-#else
-        "movq %%mm0, %%mm1                      \n\t"
-        "psrlw $8, %%mm0                        \n\t"
-        "paddb %%mm1, %%mm0                     \n\t"
-        "movq %%mm0, %%mm1                      \n\t"
-        "psrlq $16, %%mm0                       \n\t"
-        "paddb %%mm1, %%mm0                     \n\t"
-        "movq %%mm0, %%mm1                      \n\t"
-        "psrlq $32, %%mm0                       \n\t"
-        "paddb %%mm1, %%mm0                     \n\t"
-#endif
-        "movq %4, %%mm7                         \n\t" // QP,..., QP
-        "paddusb %%mm7, %%mm7                   \n\t" // 2QP ... 2QP
-        "psubusb %%mm7, %%mm4                   \n\t" // Diff <= 2QP -> 0
-        "packssdw %%mm4, %%mm4                  \n\t"
-        "movd %%mm0, %0                         \n\t"
-        "movd %%mm4, %1                         \n\t"
-
-        : "=r" (numEq), "=r" (dcOk)
-        : "r" (src), "r" ((x86_reg)stride), "m" (c->pQPb)
-        : "%"FF_REG_a
-        );
-
-    numEq= (-numEq) &0xFF;
-    if(numEq > c->ppMode.flatnessThreshold){
-        if(dcOk) return 0;
-        else     return 1;
-    }else{
-        return 2;
-    }
-}
-#endif //TEMPLATE_PP_MMX
-
-/**
- * Do a vertical low pass filter on the 8x16 block (only write to the 8x8 block in the middle)
- * using the 9-Tap Filter (1,1,2,2,4,2,2,1,1)/16
- */
-#if !TEMPLATE_PP_ALTIVEC
-static inline void RENAME(doVertLowPass)(uint8_t *src, int stride, PPContext *c)
-{
-#if TEMPLATE_PP_MMXEXT || TEMPLATE_PP_3DNOW
-    src+= stride*3;
-    __asm__ volatile(        //"movv %0 %1 %2\n\t"
-        "movq %2, %%mm0                         \n\t"  // QP,..., QP
-        "pxor %%mm4, %%mm4                      \n\t"
-
-        "movq (%0), %%mm6                       \n\t"
-        "movq (%0, %1), %%mm5                   \n\t"
-        "movq %%mm5, %%mm1                      \n\t"
-        "movq %%mm6, %%mm2                      \n\t"
-        "psubusb %%mm6, %%mm5                   \n\t"
-        "psubusb %%mm1, %%mm2                   \n\t"
-        "por %%mm5, %%mm2                       \n\t" // ABS Diff of lines
-        "psubusb %%mm0, %%mm2                   \n\t" // diff <= QP -> 0
-        "pcmpeqb %%mm4, %%mm2                   \n\t" // diff <= QP -> FF
-
-        "pand %%mm2, %%mm6                      \n\t"
-        "pandn %%mm1, %%mm2                     \n\t"
-        "por %%mm2, %%mm6                       \n\t"// First Line to Filter
-
-        "movq (%0, %1, 8), %%mm5                \n\t"
-        "lea (%0, %1, 4), %%"FF_REG_a"          \n\t"
-        "lea (%0, %1, 8), %%"FF_REG_c"          \n\t"
-        "sub %1, %%"FF_REG_c"                   \n\t"
-        "add %1, %0                             \n\t" // %0 points to line 1 not 0
-        "movq (%0, %1, 8), %%mm7                \n\t"
-        "movq %%mm5, %%mm1                      \n\t"
-        "movq %%mm7, %%mm2                      \n\t"
-        "psubusb %%mm7, %%mm5                   \n\t"
-        "psubusb %%mm1, %%mm2                   \n\t"
-        "por %%mm5, %%mm2                       \n\t" // ABS Diff of lines
-        "psubusb %%mm0, %%mm2                   \n\t" // diff <= QP -> 0
-        "pcmpeqb %%mm4, %%mm2                   \n\t" // diff <= QP -> FF
-
-        "pand %%mm2, %%mm7                      \n\t"
-        "pandn %%mm1, %%mm2                     \n\t"
-        "por %%mm2, %%mm7                       \n\t" // First Line to Filter
-
-
-        //      1       2       3       4       5       6       7       8
-        //      %0      %0+%1   %0+2%1  eax     %0+4%1  eax+2%1 ecx     eax+4%1
-        // 6 4 2 2 1 1
-        // 6 4 4 2
-        // 6 8 2
-
-        "movq (%0, %1), %%mm0                   \n\t" //  1
-        "movq %%mm0, %%mm1                      \n\t" //  1
-        PAVGB(%%mm6, %%mm0)                           //1 1        /2
-        PAVGB(%%mm6, %%mm0)                           //3 1        /4
-
-        "movq (%0, %1, 4), %%mm2                \n\t" //     1
-        "movq %%mm2, %%mm5                      \n\t" //     1
-        PAVGB((%%FF_REGa), %%mm2)                     //    11        /2
-        PAVGB((%0, %1, 2), %%mm2)                     //   211        /4
-        "movq %%mm2, %%mm3                      \n\t" //   211        /4
-        "movq (%0), %%mm4                       \n\t" // 1
-        PAVGB(%%mm4, %%mm3)                           // 4 211        /8
-        PAVGB(%%mm0, %%mm3)                           //642211        /16
-        "movq %%mm3, (%0)                       \n\t" // X
-        // mm1=2 mm2=3(211) mm4=1 mm5=5 mm6=0 mm7=9
-        "movq %%mm1, %%mm0                      \n\t" //  1
-        PAVGB(%%mm6, %%mm0)                           //1 1        /2
-        "movq %%mm4, %%mm3                      \n\t" // 1
-        PAVGB((%0,%1,2), %%mm3)                       // 1 1        /2
-        PAVGB((%%FF_REGa,%1,2), %%mm5)                //     11        /2
-        PAVGB((%%FF_REGa), %%mm5)                     //    211 /4
-        PAVGB(%%mm5, %%mm3)                           // 2 2211 /8
-        PAVGB(%%mm0, %%mm3)                           //4242211 /16
-        "movq %%mm3, (%0,%1)                    \n\t" //  X
-        // mm1=2 mm2=3(211) mm4=1 mm5=4(211) mm6=0 mm7=9
-        PAVGB(%%mm4, %%mm6)                                   //11        /2
-        "movq (%%"FF_REG_c"), %%mm0             \n\t" //       1
-        PAVGB((%%FF_REGa, %1, 2), %%mm0)              //      11/2
-        "movq %%mm0, %%mm3                      \n\t" //      11/2
-        PAVGB(%%mm1, %%mm0)                           //  2   11/4
-        PAVGB(%%mm6, %%mm0)                           //222   11/8
-        PAVGB(%%mm2, %%mm0)                           //22242211/16
-        "movq (%0, %1, 2), %%mm2                \n\t" //   1
-        "movq %%mm0, (%0, %1, 2)                \n\t" //   X
-        // mm1=2 mm2=3 mm3=6(11) mm4=1 mm5=4(211) mm6=0(11) mm7=9
-        "movq (%%"FF_REG_a", %1, 4), %%mm0      \n\t" //        1
-        PAVGB((%%FF_REGc), %%mm0)                     //       11        /2
-        PAVGB(%%mm0, %%mm6)                           //11     11        /4
-        PAVGB(%%mm1, %%mm4)                           // 11                /2
-        PAVGB(%%mm2, %%mm1)                           //  11                /2
-        PAVGB(%%mm1, %%mm6)                           //1122   11        /8
-        PAVGB(%%mm5, %%mm6)                           //112242211        /16
-        "movq (%%"FF_REG_a"), %%mm5             \n\t" //    1
-        "movq %%mm6, (%%"FF_REG_a")             \n\t" //    X
-        // mm0=7(11) mm1=2(11) mm2=3 mm3=6(11) mm4=1(11) mm5=4 mm7=9
-        "movq (%%"FF_REG_a", %1, 4), %%mm6      \n\t" //        1
-        PAVGB(%%mm7, %%mm6)                           //        11        /2
-        PAVGB(%%mm4, %%mm6)                           // 11     11        /4
-        PAVGB(%%mm3, %%mm6)                           // 11   2211        /8
-        PAVGB(%%mm5, %%mm2)                           //   11                /2
-        "movq (%0, %1, 4), %%mm4                \n\t" //     1
-        PAVGB(%%mm4, %%mm2)                           //   112                /4
-        PAVGB(%%mm2, %%mm6)                           // 112242211        /16
-        "movq %%mm6, (%0, %1, 4)                \n\t" //     X
-        // mm0=7(11) mm1=2(11) mm2=3(112) mm3=6(11) mm4=5 mm5=4 mm7=9
-        PAVGB(%%mm7, %%mm1)                           //  11     2        /4
-        PAVGB(%%mm4, %%mm5)                           //    11                /2
-        PAVGB(%%mm5, %%mm0)                           //    11 11        /4
-        "movq (%%"FF_REG_a", %1, 2), %%mm6      \n\t" //      1
-        PAVGB(%%mm6, %%mm1)                           //  11  4  2        /8
-        PAVGB(%%mm0, %%mm1)                           //  11224222        /16
-        "movq %%mm1, (%%"FF_REG_a", %1, 2)      \n\t" //      X
-        // mm2=3(112) mm3=6(11) mm4=5 mm5=4(11) mm6=6 mm7=9
-        PAVGB((%%FF_REGc), %%mm2)                     //   112 4        /8
-        "movq (%%"FF_REG_a", %1, 4), %%mm0      \n\t" //        1
-        PAVGB(%%mm0, %%mm6)                           //      1 1        /2
-        PAVGB(%%mm7, %%mm6)                           //      1 12        /4
-        PAVGB(%%mm2, %%mm6)                           //   1122424        /4
-        "movq %%mm6, (%%"FF_REG_c")             \n\t" //       X
-        // mm0=8 mm3=6(11) mm4=5 mm5=4(11) mm7=9
-        PAVGB(%%mm7, %%mm5)                           //    11   2        /4
-        PAVGB(%%mm7, %%mm5)                           //    11   6        /8
-
-        PAVGB(%%mm3, %%mm0)                           //      112        /4
-        PAVGB(%%mm0, %%mm5)                           //    112246        /16
-        "movq %%mm5, (%%"FF_REG_a", %1, 4)      \n\t" //        X
-        "sub %1, %0                             \n\t"
-
-        :
-        : "r" (src), "r" ((x86_reg)stride), "m" (c->pQPb)
-        : "%"FF_REG_a, "%"FF_REG_c
-    );
-#else //TEMPLATE_PP_MMXEXT || TEMPLATE_PP_3DNOW
-    const int l1= stride;
-    const int l2= stride + l1;
-    const int l3= stride + l2;
-    const int l4= stride + l3;
-    const int l5= stride + l4;
-    const int l6= stride + l5;
-    const int l7= stride + l6;
-    const int l8= stride + l7;
-    const int l9= stride + l8;
-    int x;
-    src+= stride*3;
-    for(x=0; x<BLOCK_SIZE; x++){
-        const int first= FFABS(src[0] - src[l1]) < c->QP ? src[0] : src[l1];
-        const int last= FFABS(src[l8] - src[l9]) < c->QP ? src[l9] : src[l8];
-
-        int sums[10];
-        sums[0] = 4*first + src[l1] + src[l2] + src[l3] + 4;
-        sums[1] = sums[0] - first  + src[l4];
-        sums[2] = sums[1] - first  + src[l5];
-        sums[3] = sums[2] - first  + src[l6];
-        sums[4] = sums[3] - first  + src[l7];
-        sums[5] = sums[4] - src[l1] + src[l8];
-        sums[6] = sums[5] - src[l2] + last;
-        sums[7] = sums[6] - src[l3] + last;
-        sums[8] = sums[7] - src[l4] + last;
-        sums[9] = sums[8] - src[l5] + last;
-
-        src[l1]= (sums[0] + sums[2] + 2*src[l1])>>4;
-        src[l2]= (sums[1] + sums[3] + 2*src[l2])>>4;
-        src[l3]= (sums[2] + sums[4] + 2*src[l3])>>4;
-        src[l4]= (sums[3] + sums[5] + 2*src[l4])>>4;
-        src[l5]= (sums[4] + sums[6] + 2*src[l5])>>4;
-        src[l6]= (sums[5] + sums[7] + 2*src[l6])>>4;
-        src[l7]= (sums[6] + sums[8] + 2*src[l7])>>4;
-        src[l8]= (sums[7] + sums[9] + 2*src[l8])>>4;
-
-        src++;
-    }
-#endif //TEMPLATE_PP_MMXEXT || TEMPLATE_PP_3DNOW
-}
-#endif //TEMPLATE_PP_ALTIVEC
-
-/**
- * Experimental Filter 1
- * will not damage linear gradients
- * Flat blocks should look like they were passed through the (1,1,2,2,4,2,2,1,1) 9-Tap filter
- * can only smooth blocks at the expected locations (it cannot smooth them if they did move)
- * MMX2 version does correct clipping C version does not
- */
-static inline void RENAME(vertX1Filter)(uint8_t *src, int stride, PPContext *co)
-{
-#if TEMPLATE_PP_MMXEXT || TEMPLATE_PP_3DNOW
-    src+= stride*3;
-
-    __asm__ volatile(
-        "pxor %%mm7, %%mm7                      \n\t" // 0
-        "lea (%0, %1), %%"FF_REG_a"             \n\t"
-        "lea (%%"FF_REG_a", %1, 4), %%"FF_REG_c"\n\t"
-//      0       1       2       3       4       5       6       7       8       9
-//      %0      eax     eax+%1  eax+2%1 %0+4%1  ecx     ecx+%1  ecx+2%1 %0+8%1  ecx+4%1
-        "movq (%%"FF_REG_a", %1, 2), %%mm0      \n\t" // line 3
-        "movq (%0, %1, 4), %%mm1                \n\t" // line 4
-        "movq %%mm1, %%mm2                      \n\t" // line 4
-        "psubusb %%mm0, %%mm1                   \n\t"
-        "psubusb %%mm2, %%mm0                   \n\t"
-        "por %%mm1, %%mm0                       \n\t" // |l2 - l3|
-        "movq (%%"FF_REG_c"), %%mm3             \n\t" // line 5
-        "movq (%%"FF_REG_c", %1), %%mm4         \n\t" // line 6
-        "movq %%mm3, %%mm5                      \n\t" // line 5
-        "psubusb %%mm4, %%mm3                   \n\t"
-        "psubusb %%mm5, %%mm4                   \n\t"
-        "por %%mm4, %%mm3                       \n\t" // |l5 - l6|
-        PAVGB(%%mm3, %%mm0)                           // (|l2 - l3| + |l5 - l6|)/2
-        "movq %%mm2, %%mm1                      \n\t" // line 4
-        "psubusb %%mm5, %%mm2                   \n\t"
-        "movq %%mm2, %%mm4                      \n\t"
-        "pcmpeqb %%mm7, %%mm2                   \n\t" // (l4 - l5) <= 0 ? -1 : 0
-        "psubusb %%mm1, %%mm5                   \n\t"
-        "por %%mm5, %%mm4                       \n\t" // |l4 - l5|
-        "psubusb %%mm0, %%mm4                   \n\t" //d = MAX(0, |l4-l5| - (|l2-l3| + |l5-l6|)/2)
-        "movq %%mm4, %%mm3                      \n\t" // d
-        "movq %2, %%mm0                         \n\t"
-        "paddusb %%mm0, %%mm0                   \n\t"
-        "psubusb %%mm0, %%mm4                   \n\t"
-        "pcmpeqb %%mm7, %%mm4                   \n\t" // d <= QP ? -1 : 0
-        "psubusb "MANGLE(b01)", %%mm3           \n\t"
-        "pand %%mm4, %%mm3                      \n\t" // d <= QP ? d : 0
-
-        PAVGB(%%mm7, %%mm3)                           // d/2
-        "movq %%mm3, %%mm1                      \n\t" // d/2
-        PAVGB(%%mm7, %%mm3)                           // d/4
-        PAVGB(%%mm1, %%mm3)                           // 3*d/8
-
-        "movq (%0, %1, 4), %%mm0                \n\t" // line 4
-        "pxor %%mm2, %%mm0                      \n\t" //(l4 - l5) <= 0 ? -l4-1 : l4
-        "psubusb %%mm3, %%mm0                   \n\t"
-        "pxor %%mm2, %%mm0                      \n\t"
-        "movq %%mm0, (%0, %1, 4)                \n\t" // line 4
-
-        "movq (%%"FF_REG_c"), %%mm0             \n\t" // line 5
-        "pxor %%mm2, %%mm0                      \n\t" //(l4 - l5) <= 0 ? -l5-1 : l5
-        "paddusb %%mm3, %%mm0                   \n\t"
-        "pxor %%mm2, %%mm0                      \n\t"
-        "movq %%mm0, (%%"FF_REG_c")             \n\t" // line 5
-
-        PAVGB(%%mm7, %%mm1)                           // d/4
-
-        "movq (%%"FF_REG_a", %1, 2), %%mm0      \n\t" // line 3
-        "pxor %%mm2, %%mm0                      \n\t" //(l4 - l5) <= 0 ? -l4-1 : l4
-        "psubusb %%mm1, %%mm0                   \n\t"
-        "pxor %%mm2, %%mm0                      \n\t"
-        "movq %%mm0, (%%"FF_REG_a", %1, 2)      \n\t" // line 3
-
-        "movq (%%"FF_REG_c", %1), %%mm0         \n\t" // line 6
-        "pxor %%mm2, %%mm0                      \n\t" //(l4 - l5) <= 0 ? -l5-1 : l5
-        "paddusb %%mm1, %%mm0                   \n\t"
-        "pxor %%mm2, %%mm0                      \n\t"
-        "movq %%mm0, (%%"FF_REG_c", %1)         \n\t" // line 6
-
-        PAVGB(%%mm7, %%mm1)                           // d/8
-
-        "movq (%%"FF_REG_a", %1), %%mm0         \n\t" // line 2
-        "pxor %%mm2, %%mm0                      \n\t" //(l4 - l5) <= 0 ? -l2-1 : l2
-        "psubusb %%mm1, %%mm0                   \n\t"
-        "pxor %%mm2, %%mm0                      \n\t"
-        "movq %%mm0, (%%"FF_REG_a", %1)         \n\t" // line 2
-
-        "movq (%%"FF_REG_c", %1, 2), %%mm0      \n\t" // line 7
-        "pxor %%mm2, %%mm0                      \n\t" //(l4 - l5) <= 0 ? -l7-1 : l7
-        "paddusb %%mm1, %%mm0                   \n\t"
-        "pxor %%mm2, %%mm0                      \n\t"
-        "movq %%mm0, (%%"FF_REG_c", %1, 2)      \n\t" // line 7
-
-        :
-        : "r" (src), "r" ((x86_reg)stride), "m" (co->pQPb)
-          NAMED_CONSTRAINTS_ADD(b01)
-        : "%"FF_REG_a, "%"FF_REG_c
-    );
-#else //TEMPLATE_PP_MMXEXT || TEMPLATE_PP_3DNOW
-
-    const int l1= stride;
-    const int l2= stride + l1;
-    const int l3= stride + l2;
-    const int l4= stride + l3;
-    const int l5= stride + l4;
-    const int l6= stride + l5;
-    const int l7= stride + l6;
-//    const int l8= stride + l7;
-//    const int l9= stride + l8;
-    int x;
-
-    src+= stride*3;
-    for(x=0; x<BLOCK_SIZE; x++){
-        int a= src[l3] - src[l4];
-        int b= src[l4] - src[l5];
-        int c= src[l5] - src[l6];
-
-        int d= FFABS(b) - ((FFABS(a) + FFABS(c))>>1);
-        d= FFMAX(d, 0);
-
-        if(d < co->QP*2){
-            int v = d * FFSIGN(-b);
-
-            src[l2] +=v>>3;
-            src[l3] +=v>>2;
-            src[l4] +=(3*v)>>3;
-            src[l5] -=(3*v)>>3;
-            src[l6] -=v>>2;
-            src[l7] -=v>>3;
-        }
-        src++;
-    }
-#endif //TEMPLATE_PP_MMXEXT || TEMPLATE_PP_3DNOW
-}
-
-#if !TEMPLATE_PP_ALTIVEC
-static inline void RENAME(doVertDefFilter)(uint8_t src[], int stride, PPContext *c)
-{
-#if TEMPLATE_PP_MMXEXT || TEMPLATE_PP_3DNOW
-/*
-    uint8_t tmp[16];
-    const int l1= stride;
-    const int l2= stride + l1;
-    const int l3= stride + l2;
-    const int l4= (int)tmp - (int)src - stride*3;
-    const int l5= (int)tmp - (int)src - stride*3 + 8;
-    const int l6= stride*3 + l3;
-    const int l7= stride + l6;
-    const int l8= stride + l7;
-
-    memcpy(tmp, src+stride*7, 8);
-    memcpy(tmp+8, src+stride*8, 8);
-*/
-    src+= stride*4;
-    __asm__ volatile(
-
-#if 0 //slightly more accurate and slightly slower
-        "pxor %%mm7, %%mm7                      \n\t" // 0
-        "lea (%0, %1), %%"FF_REG_a"             \n\t"
-        "lea (%%"FF_REG_a", %1, 4), %%"FF_REG_c"\n\t"
-//      0       1       2       3       4       5       6       7
-//      %0      %0+%1   %0+2%1  eax+2%1 %0+4%1  eax+4%1 ecx+%1  ecx+2%1
-//      %0      eax     eax+%1  eax+2%1 %0+4%1  ecx     ecx+%1  ecx+2%1
-
-
-        "movq (%0, %1, 2), %%mm0                \n\t" // l2
-        "movq (%0), %%mm1                       \n\t" // l0
-        "movq %%mm0, %%mm2                      \n\t" // l2
-        PAVGB(%%mm7, %%mm0)                           // ~l2/2
-        PAVGB(%%mm1, %%mm0)                           // ~(l2 + 2l0)/4
-        PAVGB(%%mm2, %%mm0)                           // ~(5l2 + 2l0)/8
-
-        "movq (%%"FF_REG_a"), %%mm1             \n\t" // l1
-        "movq (%%"FF_REG_a", %1, 2), %%mm3      \n\t" // l3
-        "movq %%mm1, %%mm4                      \n\t" // l1
-        PAVGB(%%mm7, %%mm1)                           // ~l1/2
-        PAVGB(%%mm3, %%mm1)                           // ~(l1 + 2l3)/4
-        PAVGB(%%mm4, %%mm1)                           // ~(5l1 + 2l3)/8
-
-        "movq %%mm0, %%mm4                      \n\t" // ~(5l2 + 2l0)/8
-        "psubusb %%mm1, %%mm0                   \n\t"
-        "psubusb %%mm4, %%mm1                   \n\t"
-        "por %%mm0, %%mm1                       \n\t" // ~|2l0 - 5l1 + 5l2 - 2l3|/8
-// mm1= |lenergy|, mm2= l2, mm3= l3, mm7=0
-
-        "movq (%0, %1, 4), %%mm0                \n\t" // l4
-        "movq %%mm0, %%mm4                      \n\t" // l4
-        PAVGB(%%mm7, %%mm0)                           // ~l4/2
-        PAVGB(%%mm2, %%mm0)                           // ~(l4 + 2l2)/4
-        PAVGB(%%mm4, %%mm0)                           // ~(5l4 + 2l2)/8
-
-        "movq (%%"FF_REG_c"), %%mm2             \n\t" // l5
-        "movq %%mm3, %%mm5                      \n\t" // l3
-        PAVGB(%%mm7, %%mm3)                           // ~l3/2
-        PAVGB(%%mm2, %%mm3)                           // ~(l3 + 2l5)/4
-        PAVGB(%%mm5, %%mm3)                           // ~(5l3 + 2l5)/8
-
-        "movq %%mm0, %%mm6                      \n\t" // ~(5l4 + 2l2)/8
-        "psubusb %%mm3, %%mm0                   \n\t"
-        "psubusb %%mm6, %%mm3                   \n\t"
-        "por %%mm0, %%mm3                       \n\t" // ~|2l2 - 5l3 + 5l4 - 2l5|/8
-        "pcmpeqb %%mm7, %%mm0                   \n\t" // SIGN(2l2 - 5l3 + 5l4 - 2l5)
-// mm0= SIGN(menergy), mm1= |lenergy|, mm2= l5, mm3= |menergy|, mm4=l4, mm5= l3, mm7=0
-
-        "movq (%%"FF_REG_c", %1), %%mm6         \n\t" // l6
-        "movq %%mm6, %%mm5                      \n\t" // l6
-        PAVGB(%%mm7, %%mm6)                           // ~l6/2
-        PAVGB(%%mm4, %%mm6)                           // ~(l6 + 2l4)/4
-        PAVGB(%%mm5, %%mm6)                           // ~(5l6 + 2l4)/8
-
-        "movq (%%"FF_REG_c", %1, 2), %%mm5      \n\t" // l7
-        "movq %%mm2, %%mm4                      \n\t" // l5
-        PAVGB(%%mm7, %%mm2)                           // ~l5/2
-        PAVGB(%%mm5, %%mm2)                           // ~(l5 + 2l7)/4
-        PAVGB(%%mm4, %%mm2)                           // ~(5l5 + 2l7)/8
-
-        "movq %%mm6, %%mm4                      \n\t" // ~(5l6 + 2l4)/8
-        "psubusb %%mm2, %%mm6                   \n\t"
-        "psubusb %%mm4, %%mm2                   \n\t"
-        "por %%mm6, %%mm2                       \n\t" // ~|2l4 - 5l5 + 5l6 - 2l7|/8
-// mm0= SIGN(menergy), mm1= |lenergy|/8, mm2= |renergy|/8, mm3= |menergy|/8, mm7=0
-
-
-        PMINUB(%%mm2, %%mm1, %%mm4)                   // MIN(|lenergy|,|renergy|)/8
-        "movq %2, %%mm4                         \n\t" // QP //FIXME QP+1 ?
-        "paddusb "MANGLE(b01)", %%mm4           \n\t"
-        "pcmpgtb %%mm3, %%mm4                   \n\t" // |menergy|/8 < QP
-        "psubusb %%mm1, %%mm3                   \n\t" // d=|menergy|/8-MIN(|lenergy|,|renergy|)/8
-        "pand %%mm4, %%mm3                      \n\t"
-
-        "movq %%mm3, %%mm1                      \n\t"
-//        "psubusb "MANGLE(b01)", %%mm3           \n\t"
-        PAVGB(%%mm7, %%mm3)
-        PAVGB(%%mm7, %%mm3)
-        "paddusb %%mm1, %%mm3                   \n\t"
-//        "paddusb "MANGLE(b01)", %%mm3           \n\t"
-
-        "movq (%%"FF_REG_a", %1, 2), %%mm6      \n\t" //l3
-        "movq (%0, %1, 4), %%mm5                \n\t" //l4
-        "movq (%0, %1, 4), %%mm4                \n\t" //l4
-        "psubusb %%mm6, %%mm5                   \n\t"
-        "psubusb %%mm4, %%mm6                   \n\t"
-        "por %%mm6, %%mm5                       \n\t" // |l3-l4|
-        "pcmpeqb %%mm7, %%mm6                   \n\t" // SIGN(l3-l4)
-        "pxor %%mm6, %%mm0                      \n\t"
-        "pand %%mm0, %%mm3                      \n\t"
-        PMINUB(%%mm5, %%mm3, %%mm0)
-
-        "psubusb "MANGLE(b01)", %%mm3           \n\t"
-        PAVGB(%%mm7, %%mm3)
-
-        "movq (%%"FF_REG_a", %1, 2), %%mm0      \n\t"
-        "movq (%0, %1, 4), %%mm2                \n\t"
-        "pxor %%mm6, %%mm0                      \n\t"
-        "pxor %%mm6, %%mm2                      \n\t"
-        "psubb %%mm3, %%mm0                     \n\t"
-        "paddb %%mm3, %%mm2                     \n\t"
-        "pxor %%mm6, %%mm0                      \n\t"
-        "pxor %%mm6, %%mm2                      \n\t"
-        "movq %%mm0, (%%"FF_REG_a", %1, 2)      \n\t"
-        "movq %%mm2, (%0, %1, 4)                \n\t"
-#endif //0
-
-        "lea (%0, %1), %%"FF_REG_a"             \n\t"
-        "pcmpeqb %%mm6, %%mm6                   \n\t" // -1
-//      0       1       2       3       4       5       6       7
-//      %0      %0+%1   %0+2%1  eax+2%1 %0+4%1  eax+4%1 ecx+%1  ecx+2%1
-//      %0      eax     eax+%1  eax+2%1 %0+4%1  ecx     ecx+%1  ecx+2%1
-
-
-        "movq (%%"FF_REG_a", %1, 2), %%mm1      \n\t" // l3
-        "movq (%0, %1, 4), %%mm0                \n\t" // l4
-        "pxor %%mm6, %%mm1                      \n\t" // -l3-1
-        PAVGB(%%mm1, %%mm0)                           // -q+128 = (l4-l3+256)/2
-// mm1=-l3-1, mm0=128-q
-
-        "movq (%%"FF_REG_a", %1, 4), %%mm2      \n\t" // l5
-        "movq (%%"FF_REG_a", %1), %%mm3         \n\t" // l2
-        "pxor %%mm6, %%mm2                      \n\t" // -l5-1
-        "movq %%mm2, %%mm5                      \n\t" // -l5-1
-        "movq "MANGLE(b80)", %%mm4              \n\t" // 128
-        "lea (%%"FF_REG_a", %1, 4), %%"FF_REG_c"\n\t"
-        PAVGB(%%mm3, %%mm2)                           // (l2-l5+256)/2
-        PAVGB(%%mm0, %%mm4)                           // ~(l4-l3)/4 + 128
-        PAVGB(%%mm2, %%mm4)                           // ~(l2-l5)/4 +(l4-l3)/8 + 128
-        PAVGB(%%mm0, %%mm4)                           // ~(l2-l5)/8 +5(l4-l3)/16 + 128
-// mm1=-l3-1, mm0=128-q, mm3=l2, mm4=menergy/16 + 128, mm5= -l5-1
-
-        "movq (%%"FF_REG_a"), %%mm2             \n\t" // l1
-        "pxor %%mm6, %%mm2                      \n\t" // -l1-1
-        PAVGB(%%mm3, %%mm2)                           // (l2-l1+256)/2
-        PAVGB((%0), %%mm1)                            // (l0-l3+256)/2
-        "movq "MANGLE(b80)", %%mm3              \n\t" // 128
-        PAVGB(%%mm2, %%mm3)                           // ~(l2-l1)/4 + 128
-        PAVGB(%%mm1, %%mm3)                           // ~(l0-l3)/4 +(l2-l1)/8 + 128
-        PAVGB(%%mm2, %%mm3)                           // ~(l0-l3)/8 +5(l2-l1)/16 + 128
-// mm0=128-q, mm3=lenergy/16 + 128, mm4= menergy/16 + 128, mm5= -l5-1
-
-        PAVGB((%%FF_REGc, %1), %%mm5)                 // (l6-l5+256)/2
-        "movq (%%"FF_REG_c", %1, 2), %%mm1      \n\t" // l7
-        "pxor %%mm6, %%mm1                      \n\t" // -l7-1
-        PAVGB((%0, %1, 4), %%mm1)                     // (l4-l7+256)/2
-        "movq "MANGLE(b80)", %%mm2              \n\t" // 128
-        PAVGB(%%mm5, %%mm2)                           // ~(l6-l5)/4 + 128
-        PAVGB(%%mm1, %%mm2)                           // ~(l4-l7)/4 +(l6-l5)/8 + 128
-        PAVGB(%%mm5, %%mm2)                           // ~(l4-l7)/8 +5(l6-l5)/16 + 128
-// mm0=128-q, mm2=renergy/16 + 128, mm3=lenergy/16 + 128, mm4= menergy/16 + 128
-
-        "movq "MANGLE(b00)", %%mm1              \n\t" // 0
-        "movq "MANGLE(b00)", %%mm5              \n\t" // 0
-        "psubb %%mm2, %%mm1                     \n\t" // 128 - renergy/16
-        "psubb %%mm3, %%mm5                     \n\t" // 128 - lenergy/16
-        PMAXUB(%%mm1, %%mm2)                          // 128 + |renergy/16|
-        PMAXUB(%%mm5, %%mm3)                          // 128 + |lenergy/16|
-        PMINUB(%%mm2, %%mm3, %%mm1)                   // 128 + MIN(|lenergy|,|renergy|)/16
-
-// mm0=128-q, mm3=128 + MIN(|lenergy|,|renergy|)/16, mm4= menergy/16 + 128
-
-        "movq "MANGLE(b00)", %%mm7              \n\t" // 0
-        "movq %2, %%mm2                         \n\t" // QP
-        PAVGB(%%mm6, %%mm2)                           // 128 + QP/2
-        "psubb %%mm6, %%mm2                     \n\t"
-
-        "movq %%mm4, %%mm1                      \n\t"
-        "pcmpgtb %%mm7, %%mm1                   \n\t" // SIGN(menergy)
-        "pxor %%mm1, %%mm4                      \n\t"
-        "psubb %%mm1, %%mm4                     \n\t" // 128 + |menergy|/16
-        "pcmpgtb %%mm4, %%mm2                   \n\t" // |menergy|/16 < QP/2
-        "psubusb %%mm3, %%mm4                   \n\t" //d=|menergy|/16 - MIN(|lenergy|,|renergy|)/16
-// mm0=128-q, mm1= SIGN(menergy), mm2= |menergy|/16 < QP/2, mm4= d/16
-
-        "movq %%mm4, %%mm3                      \n\t" // d
-        "psubusb "MANGLE(b01)", %%mm4           \n\t"
-        PAVGB(%%mm7, %%mm4)                           // d/32
-        PAVGB(%%mm7, %%mm4)                           // (d + 32)/64
-        "paddb %%mm3, %%mm4                     \n\t" // 5d/64
-        "pand %%mm2, %%mm4                      \n\t"
-
-        "movq "MANGLE(b80)", %%mm5              \n\t" // 128
-        "psubb %%mm0, %%mm5                     \n\t" // q
-        "paddsb %%mm6, %%mm5                    \n\t" // fix bad rounding
-        "pcmpgtb %%mm5, %%mm7                   \n\t" // SIGN(q)
-        "pxor %%mm7, %%mm5                      \n\t"
-
-        PMINUB(%%mm5, %%mm4, %%mm3)                   // MIN(|q|, 5d/64)
-        "pxor %%mm1, %%mm7                      \n\t" // SIGN(d*q)
-
-        "pand %%mm7, %%mm4                      \n\t"
-        "movq (%%"FF_REG_a", %1, 2), %%mm0      \n\t"
-        "movq (%0, %1, 4), %%mm2                \n\t"
-        "pxor %%mm1, %%mm0                      \n\t"
-        "pxor %%mm1, %%mm2                      \n\t"
-        "paddb %%mm4, %%mm0                     \n\t"
-        "psubb %%mm4, %%mm2                     \n\t"
-        "pxor %%mm1, %%mm0                      \n\t"
-        "pxor %%mm1, %%mm2                      \n\t"
-        "movq %%mm0, (%%"FF_REG_a", %1, 2)      \n\t"
-        "movq %%mm2, (%0, %1, 4)                \n\t"
-
-        :
-        : "r" (src), "r" ((x86_reg)stride), "m" (c->pQPb)
-          NAMED_CONSTRAINTS_ADD(b80,b00,b01)
-        : "%"FF_REG_a, "%"FF_REG_c
-    );
-
-/*
-    {
-    int x;
-    src-= stride;
-    for(x=0; x<BLOCK_SIZE; x++){
-        const int middleEnergy= 5*(src[l5] - src[l4]) + 2*(src[l3] - src[l6]);
-        if(FFABS(middleEnergy)< 8*QP){
-            const int q=(src[l4] - src[l5])/2;
-            const int leftEnergy=  5*(src[l3] - src[l2]) + 2*(src[l1] - src[l4]);
-            const int rightEnergy= 5*(src[l7] - src[l6]) + 2*(src[l5] - src[l8]);
-
-            int d= FFABS(middleEnergy) - FFMIN( FFABS(leftEnergy), FFABS(rightEnergy) );
-            d= FFMAX(d, 0);
-
-            d= (5*d + 32) >> 6;
-            d*= FFSIGN(-middleEnergy);
-
-            if(q>0){
-                d= d<0 ? 0 : d;
-                d= d>q ? q : d;
-            }else{
-                d= d>0 ? 0 : d;
-                d= d<q ? q : d;
-            }
-
-            src[l4]-= d;
-            src[l5]+= d;
-        }
-        src++;
-    }
-    src-=8;
-    for(x=0; x<8; x++){
-        int y;
-        for(y=4; y<6; y++){
-            int d= src[x+y*stride] - tmp[x+(y-4)*8];
-            int ad= FFABS(d);
-            static int max=0;
-            static int sum=0;
-            static int num=0;
-            static int bias=0;
-
-            if(max<ad) max=ad;
-            sum+= ad>3 ? 1 : 0;
-            if(ad>3){
-                src[0] = src[7] = src[stride*7] = src[(stride+1)*7]=255;
-            }
-            if(y==4) bias+=d;
-            num++;
-            if(num%1000000 == 0){
-                av_log(c, AV_LOG_INFO, " %d %d %d %d\n", num, sum, max, bias);
-            }
-        }
-    }
-}
-*/
-#elif TEMPLATE_PP_MMX
-    DECLARE_ALIGNED(8, uint64_t, tmp)[4]; // make space for 4 8-byte vars
-    src+= stride*4;
-    __asm__ volatile(
-        "pxor %%mm7, %%mm7                      \n\t"
-//      0       1       2       3       4       5       6       7
-//      %0      %0+%1   %0+2%1  eax+2%1 %0+4%1  eax+4%1 edx+%1  edx+2%1
-//      %0      eax     eax+%1  eax+2%1 %0+4%1  edx     edx+%1  edx+2%1
-
-        "movq (%0), %%mm0                       \n\t"
-        "movq %%mm0, %%mm1                      \n\t"
-        "punpcklbw %%mm7, %%mm0                 \n\t" // low part of line 0
-        "punpckhbw %%mm7, %%mm1                 \n\t" // high part of line 0
-
-        "movq (%0, %1), %%mm2                   \n\t"
-        "lea (%0, %1, 2), %%"FF_REG_a"          \n\t"
-        "movq %%mm2, %%mm3                      \n\t"
-        "punpcklbw %%mm7, %%mm2                 \n\t" // low part of line 1
-        "punpckhbw %%mm7, %%mm3                 \n\t" // high part of line 1
-
-        "movq (%%"FF_REG_a"), %%mm4             \n\t"
-        "movq %%mm4, %%mm5                      \n\t"
-        "punpcklbw %%mm7, %%mm4                 \n\t" // low part of line 2
-        "punpckhbw %%mm7, %%mm5                 \n\t" // high part of line 2
-
-        "paddw %%mm0, %%mm0                     \n\t" // 2L0
-        "paddw %%mm1, %%mm1                     \n\t" // 2H0
-        "psubw %%mm4, %%mm2                     \n\t" // L1 - L2
-        "psubw %%mm5, %%mm3                     \n\t" // H1 - H2
-        "psubw %%mm2, %%mm0                     \n\t" // 2L0 - L1 + L2
-        "psubw %%mm3, %%mm1                     \n\t" // 2H0 - H1 + H2
-
-        "psllw $2, %%mm2                        \n\t" // 4L1 - 4L2
-        "psllw $2, %%mm3                        \n\t" // 4H1 - 4H2
-        "psubw %%mm2, %%mm0                     \n\t" // 2L0 - 5L1 + 5L2
-        "psubw %%mm3, %%mm1                     \n\t" // 2H0 - 5H1 + 5H2
-
-        "movq (%%"FF_REG_a", %1), %%mm2         \n\t"
-        "movq %%mm2, %%mm3                      \n\t"
-        "punpcklbw %%mm7, %%mm2                 \n\t" // L3
-        "punpckhbw %%mm7, %%mm3                 \n\t" // H3
-
-        "psubw %%mm2, %%mm0                     \n\t" // 2L0 - 5L1 + 5L2 - L3
-        "psubw %%mm3, %%mm1                     \n\t" // 2H0 - 5H1 + 5H2 - H3
-        "psubw %%mm2, %%mm0                     \n\t" // 2L0 - 5L1 + 5L2 - 2L3
-        "psubw %%mm3, %%mm1                     \n\t" // 2H0 - 5H1 + 5H2 - 2H3
-        "movq %%mm0, (%3)                       \n\t" // 2L0 - 5L1 + 5L2 - 2L3
-        "movq %%mm1, 8(%3)                      \n\t" // 2H0 - 5H1 + 5H2 - 2H3
-
-        "movq (%%"FF_REG_a", %1, 2), %%mm0      \n\t"
-        "movq %%mm0, %%mm1                      \n\t"
-        "punpcklbw %%mm7, %%mm0                 \n\t" // L4
-        "punpckhbw %%mm7, %%mm1                 \n\t" // H4
-
-        "psubw %%mm0, %%mm2                     \n\t" // L3 - L4
-        "psubw %%mm1, %%mm3                     \n\t" // H3 - H4
-        "movq %%mm2, 16(%3)                     \n\t" // L3 - L4
-        "movq %%mm3, 24(%3)                     \n\t" // H3 - H4
-        "paddw %%mm4, %%mm4                     \n\t" // 2L2
-        "paddw %%mm5, %%mm5                     \n\t" // 2H2
-        "psubw %%mm2, %%mm4                     \n\t" // 2L2 - L3 + L4
-        "psubw %%mm3, %%mm5                     \n\t" // 2H2 - H3 + H4
-
-        "lea (%%"FF_REG_a", %1), %0             \n\t"
-        "psllw $2, %%mm2                        \n\t" // 4L3 - 4L4
-        "psllw $2, %%mm3                        \n\t" // 4H3 - 4H4
-        "psubw %%mm2, %%mm4                     \n\t" // 2L2 - 5L3 + 5L4
-        "psubw %%mm3, %%mm5                     \n\t" // 2H2 - 5H3 + 5H4
-//50 opcodes so far
-        "movq (%0, %1, 2), %%mm2                \n\t"
-        "movq %%mm2, %%mm3                      \n\t"
-        "punpcklbw %%mm7, %%mm2                 \n\t" // L5
-        "punpckhbw %%mm7, %%mm3                 \n\t" // H5
-        "psubw %%mm2, %%mm4                     \n\t" // 2L2 - 5L3 + 5L4 - L5
-        "psubw %%mm3, %%mm5                     \n\t" // 2H2 - 5H3 + 5H4 - H5
-        "psubw %%mm2, %%mm4                     \n\t" // 2L2 - 5L3 + 5L4 - 2L5
-        "psubw %%mm3, %%mm5                     \n\t" // 2H2 - 5H3 + 5H4 - 2H5
-
-        "movq (%%"FF_REG_a", %1, 4), %%mm6      \n\t"
-        "punpcklbw %%mm7, %%mm6                 \n\t" // L6
-        "psubw %%mm6, %%mm2                     \n\t" // L5 - L6
-        "movq (%%"FF_REG_a", %1, 4), %%mm6      \n\t"
-        "punpckhbw %%mm7, %%mm6                 \n\t" // H6
-        "psubw %%mm6, %%mm3                     \n\t" // H5 - H6
-
-        "paddw %%mm0, %%mm0                     \n\t" // 2L4
-        "paddw %%mm1, %%mm1                     \n\t" // 2H4
-        "psubw %%mm2, %%mm0                     \n\t" // 2L4 - L5 + L6
-        "psubw %%mm3, %%mm1                     \n\t" // 2H4 - H5 + H6
-
-        "psllw $2, %%mm2                        \n\t" // 4L5 - 4L6
-        "psllw $2, %%mm3                        \n\t" // 4H5 - 4H6
-        "psubw %%mm2, %%mm0                     \n\t" // 2L4 - 5L5 + 5L6
-        "psubw %%mm3, %%mm1                     \n\t" // 2H4 - 5H5 + 5H6
-
-        "movq (%0, %1, 4), %%mm2                \n\t"
-        "movq %%mm2, %%mm3                      \n\t"
-        "punpcklbw %%mm7, %%mm2                 \n\t" // L7
-        "punpckhbw %%mm7, %%mm3                 \n\t" // H7
-
-        "paddw %%mm2, %%mm2                     \n\t" // 2L7
-        "paddw %%mm3, %%mm3                     \n\t" // 2H7
-        "psubw %%mm2, %%mm0                     \n\t" // 2L4 - 5L5 + 5L6 - 2L7
-        "psubw %%mm3, %%mm1                     \n\t" // 2H4 - 5H5 + 5H6 - 2H7
-
-        "movq (%3), %%mm2                       \n\t" // 2L0 - 5L1 + 5L2 - 2L3
-        "movq 8(%3), %%mm3                      \n\t" // 2H0 - 5H1 + 5H2 - 2H3
-
-#if TEMPLATE_PP_MMXEXT
-        "movq %%mm7, %%mm6                      \n\t" // 0
-        "psubw %%mm0, %%mm6                     \n\t"
-        "pmaxsw %%mm6, %%mm0                    \n\t" // |2L4 - 5L5 + 5L6 - 2L7|
-        "movq %%mm7, %%mm6                      \n\t" // 0
-        "psubw %%mm1, %%mm6                     \n\t"
-        "pmaxsw %%mm6, %%mm1                    \n\t" // |2H4 - 5H5 + 5H6 - 2H7|
-        "movq %%mm7, %%mm6                      \n\t" // 0
-        "psubw %%mm2, %%mm6                     \n\t"
-        "pmaxsw %%mm6, %%mm2                    \n\t" // |2L0 - 5L1 + 5L2 - 2L3|
-        "movq %%mm7, %%mm6                      \n\t" // 0
-        "psubw %%mm3, %%mm6                     \n\t"
-        "pmaxsw %%mm6, %%mm3                    \n\t" // |2H0 - 5H1 + 5H2 - 2H3|
-#else
-        "movq %%mm7, %%mm6                      \n\t" // 0
-        "pcmpgtw %%mm0, %%mm6                   \n\t"
-        "pxor %%mm6, %%mm0                      \n\t"
-        "psubw %%mm6, %%mm0                     \n\t" // |2L4 - 5L5 + 5L6 - 2L7|
-        "movq %%mm7, %%mm6                      \n\t" // 0
-        "pcmpgtw %%mm1, %%mm6                   \n\t"
-        "pxor %%mm6, %%mm1                      \n\t"
-        "psubw %%mm6, %%mm1                     \n\t" // |2H4 - 5H5 + 5H6 - 2H7|
-        "movq %%mm7, %%mm6                      \n\t" // 0
-        "pcmpgtw %%mm2, %%mm6                   \n\t"
-        "pxor %%mm6, %%mm2                      \n\t"
-        "psubw %%mm6, %%mm2                     \n\t" // |2L0 - 5L1 + 5L2 - 2L3|
-        "movq %%mm7, %%mm6                      \n\t" // 0
-        "pcmpgtw %%mm3, %%mm6                   \n\t"
-        "pxor %%mm6, %%mm3                      \n\t"
-        "psubw %%mm6, %%mm3                     \n\t" // |2H0 - 5H1 + 5H2 - 2H3|
-#endif
-
-#if TEMPLATE_PP_MMXEXT
-        "pminsw %%mm2, %%mm0                    \n\t"
-        "pminsw %%mm3, %%mm1                    \n\t"
-#else
-        "movq %%mm0, %%mm6                      \n\t"
-        "psubusw %%mm2, %%mm6                   \n\t"
-        "psubw %%mm6, %%mm0                     \n\t"
-        "movq %%mm1, %%mm6                      \n\t"
-        "psubusw %%mm3, %%mm6                   \n\t"
-        "psubw %%mm6, %%mm1                     \n\t"
-#endif
-
-        "movd %2, %%mm2                         \n\t" // QP
-        "punpcklbw %%mm7, %%mm2                 \n\t"
-
-        "movq %%mm7, %%mm6                      \n\t" // 0
-        "pcmpgtw %%mm4, %%mm6                   \n\t" // sign(2L2 - 5L3 + 5L4 - 2L5)
-        "pxor %%mm6, %%mm4                      \n\t"
-        "psubw %%mm6, %%mm4                     \n\t" // |2L2 - 5L3 + 5L4 - 2L5|
-        "pcmpgtw %%mm5, %%mm7                   \n\t" // sign(2H2 - 5H3 + 5H4 - 2H5)
-        "pxor %%mm7, %%mm5                      \n\t"
-        "psubw %%mm7, %%mm5                     \n\t" // |2H2 - 5H3 + 5H4 - 2H5|
-// 100 opcodes
-        "psllw $3, %%mm2                        \n\t" // 8QP
-        "movq %%mm2, %%mm3                      \n\t" // 8QP
-        "pcmpgtw %%mm4, %%mm2                   \n\t"
-        "pcmpgtw %%mm5, %%mm3                   \n\t"
-        "pand %%mm2, %%mm4                      \n\t"
-        "pand %%mm3, %%mm5                      \n\t"
-
-
-        "psubusw %%mm0, %%mm4                   \n\t" // hd
-        "psubusw %%mm1, %%mm5                   \n\t" // ld
-
-
-        "movq "MANGLE(w05)", %%mm2              \n\t" // 5
-        "pmullw %%mm2, %%mm4                    \n\t"
-        "pmullw %%mm2, %%mm5                    \n\t"
-        "movq "MANGLE(w20)", %%mm2              \n\t" // 32
-        "paddw %%mm2, %%mm4                     \n\t"
-        "paddw %%mm2, %%mm5                     \n\t"
-        "psrlw $6, %%mm4                        \n\t"
-        "psrlw $6, %%mm5                        \n\t"
-
-        "movq 16(%3), %%mm0                     \n\t" // L3 - L4
-        "movq 24(%3), %%mm1                     \n\t" // H3 - H4
-
-        "pxor %%mm2, %%mm2                      \n\t"
-        "pxor %%mm3, %%mm3                      \n\t"
-
-        "pcmpgtw %%mm0, %%mm2                   \n\t" // sign (L3-L4)
-        "pcmpgtw %%mm1, %%mm3                   \n\t" // sign (H3-H4)
-        "pxor %%mm2, %%mm0                      \n\t"
-        "pxor %%mm3, %%mm1                      \n\t"
-        "psubw %%mm2, %%mm0                     \n\t" // |L3-L4|
-        "psubw %%mm3, %%mm1                     \n\t" // |H3-H4|
-        "psrlw $1, %%mm0                        \n\t" // |L3 - L4|/2
-        "psrlw $1, %%mm1                        \n\t" // |H3 - H4|/2
-
-        "pxor %%mm6, %%mm2                      \n\t"
-        "pxor %%mm7, %%mm3                      \n\t"
-        "pand %%mm2, %%mm4                      \n\t"
-        "pand %%mm3, %%mm5                      \n\t"
-
-#if TEMPLATE_PP_MMXEXT
-        "pminsw %%mm0, %%mm4                    \n\t"
-        "pminsw %%mm1, %%mm5                    \n\t"
-#else
-        "movq %%mm4, %%mm2                      \n\t"
-        "psubusw %%mm0, %%mm2                   \n\t"
-        "psubw %%mm2, %%mm4                     \n\t"
-        "movq %%mm5, %%mm2                      \n\t"
-        "psubusw %%mm1, %%mm2                   \n\t"
-        "psubw %%mm2, %%mm5                     \n\t"
-#endif
-        "pxor %%mm6, %%mm4                      \n\t"
-        "pxor %%mm7, %%mm5                      \n\t"
-        "psubw %%mm6, %%mm4                     \n\t"
-        "psubw %%mm7, %%mm5                     \n\t"
-        "packsswb %%mm5, %%mm4                  \n\t"
-        "movq (%0), %%mm0                       \n\t"
-        "paddb   %%mm4, %%mm0                   \n\t"
-        "movq %%mm0, (%0)                       \n\t"
-        "movq (%0, %1), %%mm0                   \n\t"
-        "psubb %%mm4, %%mm0                     \n\t"
-        "movq %%mm0, (%0, %1)                   \n\t"
-
-        : "+r" (src)
-        : "r" ((x86_reg)stride), "m" (c->pQPb), "r"(tmp)
-          NAMED_CONSTRAINTS_ADD(w05,w20)
-        : "%"FF_REG_a
-    );
-#else //TEMPLATE_PP_MMXEXT || TEMPLATE_PP_3DNOW
-    const int l1= stride;
-    const int l2= stride + l1;
-    const int l3= stride + l2;
-    const int l4= stride + l3;
-    const int l5= stride + l4;
-    const int l6= stride + l5;
-    const int l7= stride + l6;
-    const int l8= stride + l7;
-//    const int l9= stride + l8;
-    int x;
-    src+= stride*3;
-    for(x=0; x<BLOCK_SIZE; x++){
-        const int middleEnergy= 5*(src[l5] - src[l4]) + 2*(src[l3] - src[l6]);
-        if(FFABS(middleEnergy) < 8*c->QP){
-            const int q=(src[l4] - src[l5])/2;
-            const int leftEnergy=  5*(src[l3] - src[l2]) + 2*(src[l1] - src[l4]);
-            const int rightEnergy= 5*(src[l7] - src[l6]) + 2*(src[l5] - src[l8]);
-
-            int d= FFABS(middleEnergy) - FFMIN( FFABS(leftEnergy), FFABS(rightEnergy) );
-            d= FFMAX(d, 0);
-
-            d= (5*d + 32) >> 6;
-            d*= FFSIGN(-middleEnergy);
-
-            if(q>0){
-                d = FFMAX(d, 0);
-                d = FFMIN(d, q);
-            }else{
-                d = FFMIN(d, 0);
-                d = FFMAX(d, q);
-            }
-
-            src[l4]-= d;
-            src[l5]+= d;
-        }
-        src++;
-    }
-#endif //TEMPLATE_PP_MMXEXT || TEMPLATE_PP_3DNOW
-}
-#endif //TEMPLATE_PP_ALTIVEC
-
-#if !TEMPLATE_PP_ALTIVEC
-static inline void RENAME(dering)(uint8_t src[], int stride, PPContext *c)
-{
-#if HAVE_7REGS && (TEMPLATE_PP_MMXEXT || TEMPLATE_PP_3DNOW)
-    DECLARE_ALIGNED(8, uint64_t, tmp)[3];
-    __asm__ volatile(
-        "pxor %%mm6, %%mm6                      \n\t"
-        "pcmpeqb %%mm7, %%mm7                   \n\t"
-        "movq %2, %%mm0                         \n\t"
-        "punpcklbw %%mm6, %%mm0                 \n\t"
-        "psrlw $1, %%mm0                        \n\t"
-        "psubw %%mm7, %%mm0                     \n\t"
-        "packuswb %%mm0, %%mm0                  \n\t"
-        "movq %%mm0, %3                         \n\t"
-
-        "lea (%0, %1), %%"FF_REG_a"             \n\t"
-        "lea (%%"FF_REG_a", %1, 4), %%"FF_REG_d"\n\t"
-
-//        0        1        2        3        4        5        6        7        8        9
-//        %0        eax        eax+%1        eax+2%1        %0+4%1        edx        edx+%1        edx+2%1        %0+8%1        edx+4%1
-
-#undef REAL_FIND_MIN_MAX
-#undef FIND_MIN_MAX
-#if TEMPLATE_PP_MMXEXT
-#define REAL_FIND_MIN_MAX(addr)\
-        "movq " #addr ", %%mm0                  \n\t"\
-        "pminub %%mm0, %%mm7                    \n\t"\
-        "pmaxub %%mm0, %%mm6                    \n\t"
-#else
-#define REAL_FIND_MIN_MAX(addr)\
-        "movq " #addr ", %%mm0                  \n\t"\
-        "movq %%mm7, %%mm1                      \n\t"\
-        "psubusb %%mm0, %%mm6                   \n\t"\
-        "paddb %%mm0, %%mm6                     \n\t"\
-        "psubusb %%mm0, %%mm1                   \n\t"\
-        "psubb %%mm1, %%mm7                     \n\t"
-#endif
-#define FIND_MIN_MAX(addr)  REAL_FIND_MIN_MAX(addr)
-
-FIND_MIN_MAX((%%FF_REGa))
-FIND_MIN_MAX((%%FF_REGa, %1))
-FIND_MIN_MAX((%%FF_REGa, %1, 2))
-FIND_MIN_MAX((%0, %1, 4))
-FIND_MIN_MAX((%%FF_REGd))
-FIND_MIN_MAX((%%FF_REGd, %1))
-FIND_MIN_MAX((%%FF_REGd, %1, 2))
-FIND_MIN_MAX((%0, %1, 8))
-
-        "movq %%mm7, %%mm4                      \n\t"
-        "psrlq $8, %%mm7                        \n\t"
-#if TEMPLATE_PP_MMXEXT
-        "pminub %%mm4, %%mm7                    \n\t" // min of pixels
-        "pshufw $0xF9, %%mm7, %%mm4             \n\t"
-        "pminub %%mm4, %%mm7                    \n\t" // min of pixels
-        "pshufw $0xFE, %%mm7, %%mm4             \n\t"
-        "pminub %%mm4, %%mm7                    \n\t"
-#else
-        "movq %%mm7, %%mm1                      \n\t"
-        "psubusb %%mm4, %%mm1                   \n\t"
-        "psubb %%mm1, %%mm7                     \n\t"
-        "movq %%mm7, %%mm4                      \n\t"
-        "psrlq $16, %%mm7                       \n\t"
-        "movq %%mm7, %%mm1                      \n\t"
-        "psubusb %%mm4, %%mm1                   \n\t"
-        "psubb %%mm1, %%mm7                     \n\t"
-        "movq %%mm7, %%mm4                      \n\t"
-        "psrlq $32, %%mm7                       \n\t"
-        "movq %%mm7, %%mm1                      \n\t"
-        "psubusb %%mm4, %%mm1                   \n\t"
-        "psubb %%mm1, %%mm7                     \n\t"
-#endif
-
-
-        "movq %%mm6, %%mm4                      \n\t"
-        "psrlq $8, %%mm6                        \n\t"
-#if TEMPLATE_PP_MMXEXT
-        "pmaxub %%mm4, %%mm6                    \n\t" // max of pixels
-        "pshufw $0xF9, %%mm6, %%mm4             \n\t"
-        "pmaxub %%mm4, %%mm6                    \n\t"
-        "pshufw $0xFE, %%mm6, %%mm4             \n\t"
-        "pmaxub %%mm4, %%mm6                    \n\t"
-#else
-        "psubusb %%mm4, %%mm6                   \n\t"
-        "paddb %%mm4, %%mm6                     \n\t"
-        "movq %%mm6, %%mm4                      \n\t"
-        "psrlq $16, %%mm6                       \n\t"
-        "psubusb %%mm4, %%mm6                   \n\t"
-        "paddb %%mm4, %%mm6                     \n\t"
-        "movq %%mm6, %%mm4                      \n\t"
-        "psrlq $32, %%mm6                       \n\t"
-        "psubusb %%mm4, %%mm6                   \n\t"
-        "paddb %%mm4, %%mm6                     \n\t"
-#endif
-        "movq %%mm6, %%mm0                      \n\t" // max
-        "psubb %%mm7, %%mm6                     \n\t" // max - min
-        "push %%"FF_REG_a"                      \n\t"
-        "movd %%mm6, %%eax                      \n\t"
-        "cmpb "MANGLE(deringThreshold)", %%al   \n\t"
-        "pop %%"FF_REG_a"                       \n\t"
-        " jb 1f                                 \n\t"
-        PAVGB(%%mm0, %%mm7)                           // a=(max + min)/2
-        "punpcklbw %%mm7, %%mm7                 \n\t"
-        "punpcklbw %%mm7, %%mm7                 \n\t"
-        "punpcklbw %%mm7, %%mm7                 \n\t"
-        "movq %%mm7, (%4)                       \n\t"
-
-        "movq (%0), %%mm0                       \n\t" // L10
-        "movq %%mm0, %%mm1                      \n\t" // L10
-        "movq %%mm0, %%mm2                      \n\t" // L10
-        "psllq $8, %%mm1                        \n\t"
-        "psrlq $8, %%mm2                        \n\t"
-        "movd -4(%0), %%mm3                     \n\t"
-        "movd 8(%0), %%mm4                      \n\t"
-        "psrlq $24, %%mm3                       \n\t"
-        "psllq $56, %%mm4                       \n\t"
-        "por %%mm3, %%mm1                       \n\t" // L00
-        "por %%mm4, %%mm2                       \n\t" // L20
-        "movq %%mm1, %%mm3                      \n\t" // L00
-        PAVGB(%%mm2, %%mm1)                           // (L20 + L00)/2
-        PAVGB(%%mm0, %%mm1)                           // (L20 + L00 + 2L10)/4
-        "psubusb %%mm7, %%mm0                   \n\t"
-        "psubusb %%mm7, %%mm2                   \n\t"
-        "psubusb %%mm7, %%mm3                   \n\t"
-        "pcmpeqb "MANGLE(b00)", %%mm0           \n\t" // L10 > a ? 0 : -1
-        "pcmpeqb "MANGLE(b00)", %%mm2           \n\t" // L20 > a ? 0 : -1
-        "pcmpeqb "MANGLE(b00)", %%mm3           \n\t" // L00 > a ? 0 : -1
-        "paddb %%mm2, %%mm0                     \n\t"
-        "paddb %%mm3, %%mm0                     \n\t"
-
-        "movq (%%"FF_REG_a"), %%mm2             \n\t" // L11
-        "movq %%mm2, %%mm3                      \n\t" // L11
-        "movq %%mm2, %%mm4                      \n\t" // L11
-        "psllq $8, %%mm3                        \n\t"
-        "psrlq $8, %%mm4                        \n\t"
-        "movd -4(%%"FF_REG_a"), %%mm5           \n\t"
-        "movd 8(%%"FF_REG_a"), %%mm6            \n\t"
-        "psrlq $24, %%mm5                       \n\t"
-        "psllq $56, %%mm6                       \n\t"
-        "por %%mm5, %%mm3                       \n\t" // L01
-        "por %%mm6, %%mm4                       \n\t" // L21
-        "movq %%mm3, %%mm5                      \n\t" // L01
-        PAVGB(%%mm4, %%mm3)                           // (L21 + L01)/2
-        PAVGB(%%mm2, %%mm3)                           // (L21 + L01 + 2L11)/4
-        "psubusb %%mm7, %%mm2                   \n\t"
-        "psubusb %%mm7, %%mm4                   \n\t"
-        "psubusb %%mm7, %%mm5                   \n\t"
-        "pcmpeqb "MANGLE(b00)", %%mm2           \n\t" // L11 > a ? 0 : -1
-        "pcmpeqb "MANGLE(b00)", %%mm4           \n\t" // L21 > a ? 0 : -1
-        "pcmpeqb "MANGLE(b00)", %%mm5           \n\t" // L01 > a ? 0 : -1
-        "paddb %%mm4, %%mm2                     \n\t"
-        "paddb %%mm5, %%mm2                     \n\t"
-// 0, 2, 3, 1
-#define REAL_DERING_CORE(dst,src,ppsx,psx,sx,pplx,plx,lx,t0,t1) \
-        "movq " #src ", " #sx "                 \n\t" /* src[0] */\
-        "movq " #sx ", " #lx "                  \n\t" /* src[0] */\
-        "movq " #sx ", " #t0 "                  \n\t" /* src[0] */\
-        "psllq $8, " #lx "                      \n\t"\
-        "psrlq $8, " #t0 "                      \n\t"\
-        "movd -4" #src ", " #t1 "               \n\t"\
-        "psrlq $24, " #t1 "                     \n\t"\
-        "por " #t1 ", " #lx "                   \n\t" /* src[-1] */\
-        "movd 8" #src ", " #t1 "                \n\t"\
-        "psllq $56, " #t1 "                     \n\t"\
-        "por " #t1 ", " #t0 "                   \n\t" /* src[+1] */\
-        "movq " #lx ", " #t1 "                  \n\t" /* src[-1] */\
-        PAVGB(t0, lx)                                 /* (src[-1] + src[+1])/2 */\
-        PAVGB(sx, lx)                                 /* (src[-1] + 2src[0] + src[+1])/4 */\
-        PAVGB(lx, pplx)                                     \
-        "movq " #lx ", 8(%4)                    \n\t"\
-        "movq (%4), " #lx "                     \n\t"\
-        "psubusb " #lx ", " #t1 "               \n\t"\
-        "psubusb " #lx ", " #t0 "               \n\t"\
-        "psubusb " #lx ", " #sx "               \n\t"\
-        "movq "MANGLE(b00)", " #lx "            \n\t"\
-        "pcmpeqb " #lx ", " #t1 "               \n\t" /* src[-1] > a ? 0 : -1*/\
-        "pcmpeqb " #lx ", " #t0 "               \n\t" /* src[+1] > a ? 0 : -1*/\
-        "pcmpeqb " #lx ", " #sx "               \n\t" /* src[0]  > a ? 0 : -1*/\
-        "paddb " #t1 ", " #t0 "                 \n\t"\
-        "paddb " #t0 ", " #sx "                 \n\t"\
-\
-        PAVGB(plx, pplx)                              /* filtered */\
-        "movq " #dst ", " #t0 "                 \n\t" /* dst */\
-        "movq " #t0 ", " #t1 "                  \n\t" /* dst */\
-        "psubusb %3, " #t0 "                    \n\t"\
-        "paddusb %3, " #t1 "                    \n\t"\
-        PMAXUB(t0, pplx)\
-        PMINUB(t1, pplx, t0)\
-        "paddb " #sx ", " #ppsx "               \n\t"\
-        "paddb " #psx ", " #ppsx "              \n\t"\
-        "#paddb "MANGLE(b02)", " #ppsx "        \n\t"\
-        "pand "MANGLE(b08)", " #ppsx "          \n\t"\
-        "pcmpeqb " #lx ", " #ppsx "             \n\t"\
-        "pand " #ppsx ", " #pplx "              \n\t"\
-        "pandn " #dst ", " #ppsx "              \n\t"\
-        "por " #pplx ", " #ppsx "               \n\t"\
-        "movq " #ppsx ", " #dst "               \n\t"\
-        "movq 8(%4), " #lx "                    \n\t"
-
-#define DERING_CORE(dst,src,ppsx,psx,sx,pplx,plx,lx,t0,t1) \
-   REAL_DERING_CORE(dst,src,ppsx,psx,sx,pplx,plx,lx,t0,t1)
-/*
-0000000
-1111111
-
-1111110
-1111101
-1111100
-1111011
-1111010
-1111001
-
-1111000
-1110111
-
-*/
-//DERING_CORE(dst             ,src               ,ppsx ,psx  ,sx   ,pplx ,plx  ,lx   ,t0   ,t1)
-DERING_CORE((%%FF_REGa)       ,(%%FF_REGa, %1)   ,%%mm0,%%mm2,%%mm4,%%mm1,%%mm3,%%mm5,%%mm6,%%mm7)
-DERING_CORE((%%FF_REGa, %1)   ,(%%FF_REGa, %1, 2),%%mm2,%%mm4,%%mm0,%%mm3,%%mm5,%%mm1,%%mm6,%%mm7)
-DERING_CORE((%%FF_REGa, %1, 2),(%0, %1, 4)       ,%%mm4,%%mm0,%%mm2,%%mm5,%%mm1,%%mm3,%%mm6,%%mm7)
-DERING_CORE((%0, %1, 4)       ,(%%FF_REGd)       ,%%mm0,%%mm2,%%mm4,%%mm1,%%mm3,%%mm5,%%mm6,%%mm7)
-DERING_CORE((%%FF_REGd)       ,(%%FF_REGd, %1)   ,%%mm2,%%mm4,%%mm0,%%mm3,%%mm5,%%mm1,%%mm6,%%mm7)
-DERING_CORE((%%FF_REGd, %1)   ,(%%FF_REGd, %1, 2),%%mm4,%%mm0,%%mm2,%%mm5,%%mm1,%%mm3,%%mm6,%%mm7)
-DERING_CORE((%%FF_REGd, %1, 2),(%0, %1, 8)       ,%%mm0,%%mm2,%%mm4,%%mm1,%%mm3,%%mm5,%%mm6,%%mm7)
-DERING_CORE((%0, %1, 8)       ,(%%FF_REGd, %1, 4),%%mm2,%%mm4,%%mm0,%%mm3,%%mm5,%%mm1,%%mm6,%%mm7)
-
-        "1:                        \n\t"
-        : : "r" (src), "r" ((x86_reg)stride), "m" (c->pQPb), "m"(c->pQPb2), "q"(tmp)
-          NAMED_CONSTRAINTS_ADD(deringThreshold,b00,b02,b08)
-        : "%"FF_REG_a, "%"FF_REG_d
-    );
-#else // HAVE_7REGS && (TEMPLATE_PP_MMXEXT || TEMPLATE_PP_3DNOW)
-    int y;
-    int min=255;
-    int max=0;
-    int avg;
-    uint8_t *p;
-    int s[10];
-    const int QP2= c->QP/2 + 1;
-
-    src --;
-    for(y=1; y<9; y++){
-        int x;
-        p= src + stride*y;
-        for(x=1; x<9; x++){
-            p++;
-            if(*p > max) max= *p;
-            if(*p < min) min= *p;
-        }
-    }
-    avg= (min + max + 1)>>1;
-
-    if(max - min <deringThreshold) return;
-
-    for(y=0; y<10; y++){
-        int t = 0;
-
-        if(src[stride*y + 0] > avg) t+= 1;
-        if(src[stride*y + 1] > avg) t+= 2;
-        if(src[stride*y + 2] > avg) t+= 4;
-        if(src[stride*y + 3] > avg) t+= 8;
-        if(src[stride*y + 4] > avg) t+= 16;
-        if(src[stride*y + 5] > avg) t+= 32;
-        if(src[stride*y + 6] > avg) t+= 64;
-        if(src[stride*y + 7] > avg) t+= 128;
-        if(src[stride*y + 8] > avg) t+= 256;
-        if(src[stride*y + 9] > avg) t+= 512;
-
-        t |= (~t)<<16;
-        t &= (t<<1) & (t>>1);
-        s[y] = t;
-    }
-
-    for(y=1; y<9; y++){
-        int t = s[y-1] & s[y] & s[y+1];
-        t|= t>>16;
-        s[y-1]= t;
-    }
-
-    for(y=1; y<9; y++){
-        int x;
-        int t = s[y-1];
-
-        p= src + stride*y;
-        for(x=1; x<9; x++){
-            p++;
-            if(t & (1<<x)){
-                int f= (*(p-stride-1)) + 2*(*(p-stride)) + (*(p-stride+1))
-                      +2*(*(p     -1)) + 4*(*p         ) + 2*(*(p     +1))
-                      +(*(p+stride-1)) + 2*(*(p+stride)) + (*(p+stride+1));
-                f= (f + 8)>>4;
-
-#ifdef DEBUG_DERING_THRESHOLD
-                    __asm__ volatile("emms\n\t":);
-                    {
-                    static uint64_t numPixels=0;
-                    if(x!=1 && x!=8 && y!=1 && y!=8) numPixels++;
-//                    if((max-min)<20 || (max-min)*QP<200)
-//                    if((max-min)*QP < 500)
-//                    if(max-min<QP/2)
-                    if(max-min < 20){
-                        static int numSkipped=0;
-                        static int errorSum=0;
-                        static int worstQP=0;
-                        static int worstRange=0;
-                        static int worstDiff=0;
-                        int diff= (f - *p);
-                        int absDiff= FFABS(diff);
-                        int error= diff*diff;
-
-                        if(x==1 || x==8 || y==1 || y==8) continue;
-
-                        numSkipped++;
-                        if(absDiff > worstDiff){
-                            worstDiff= absDiff;
-                            worstQP= QP;
-                            worstRange= max-min;
-                        }
-                        errorSum+= error;
-
-                        if(1024LL*1024LL*1024LL % numSkipped == 0){
-                            av_log(c, AV_LOG_INFO, "sum:%1.3f, skip:%d, wQP:%d, "
-                                   "wRange:%d, wDiff:%d, relSkip:%1.3f\n",
-                                   (float)errorSum/numSkipped, numSkipped, worstQP, worstRange,
-                                   worstDiff, (float)numSkipped/numPixels);
-                        }
-                    }
-                    }
-#endif
-                    if     (*p + QP2 < f) *p= *p + QP2;
-                    else if(*p - QP2 > f) *p= *p - QP2;
-                    else *p=f;
-            }
-        }
-    }
-#ifdef DEBUG_DERING_THRESHOLD
-    if(max-min < 20){
-        for(y=1; y<9; y++){
-            int x;
-            int t = 0;
-            p= src + stride*y;
-            for(x=1; x<9; x++){
-                p++;
-                *p = FFMIN(*p + 20, 255);
-            }
-        }
-//        src[0] = src[7]=src[stride*7]=src[stride*7 + 7]=255;
-    }
-#endif
-#endif //TEMPLATE_PP_MMXEXT || TEMPLATE_PP_3DNOW
-}
-#endif //TEMPLATE_PP_ALTIVEC
-
-/**
- * Deinterlace the given block by linearly interpolating every second line.
- * will be called for every 8x8 block and can read & write from line 4-15
- * lines 0-3 have been passed through the deblock / dering filters already, but can be read, too.
- * lines 4-12 will be read into the deblocking filter and should be deinterlaced
- */
-static inline void RENAME(deInterlaceInterpolateLinear)(uint8_t src[], int stride)
-{
-#if TEMPLATE_PP_MMXEXT || TEMPLATE_PP_3DNOW
-    src+= 4*stride;
-    __asm__ volatile(
-        "lea (%0, %1), %%"FF_REG_a"             \n\t"
-        "lea (%%"FF_REG_a", %1, 4), %%"FF_REG_c"\n\t"
-//      0       1       2       3       4       5       6       7       8       9
-//      %0      eax     eax+%1  eax+2%1 %0+4%1  ecx     ecx+%1  ecx+2%1 %0+8%1  ecx+4%1
-
-        "movq (%0), %%mm0                       \n\t"
-        "movq (%%"FF_REG_a", %1), %%mm1         \n\t"
-        PAVGB(%%mm1, %%mm0)
-        "movq %%mm0, (%%"FF_REG_a")             \n\t"
-        "movq (%0, %1, 4), %%mm0                \n\t"
-        PAVGB(%%mm0, %%mm1)
-        "movq %%mm1, (%%"FF_REG_a", %1, 2)      \n\t"
-        "movq (%%"FF_REG_c", %1), %%mm1         \n\t"
-        PAVGB(%%mm1, %%mm0)
-        "movq %%mm0, (%%"FF_REG_c")             \n\t"
-        "movq (%0, %1, 8), %%mm0                \n\t"
-        PAVGB(%%mm0, %%mm1)
-        "movq %%mm1, (%%"FF_REG_c", %1, 2)      \n\t"
-
-        : : "r" (src), "r" ((x86_reg)stride)
-        : "%"FF_REG_a, "%"FF_REG_c
-    );
-#else
-    int a, b, x;
-    src+= 4*stride;
-
-    for(x=0; x<2; x++){
-        a= *(uint32_t*)&src[stride*0];
-        b= *(uint32_t*)&src[stride*2];
-        *(uint32_t*)&src[stride*1]= (a|b) - (((a^b)&0xFEFEFEFEUL)>>1);
-        a= *(uint32_t*)&src[stride*4];
-        *(uint32_t*)&src[stride*3]= (a|b) - (((a^b)&0xFEFEFEFEUL)>>1);
-        b= *(uint32_t*)&src[stride*6];
-        *(uint32_t*)&src[stride*5]= (a|b) - (((a^b)&0xFEFEFEFEUL)>>1);
-        a= *(uint32_t*)&src[stride*8];
-        *(uint32_t*)&src[stride*7]= (a|b) - (((a^b)&0xFEFEFEFEUL)>>1);
-        src += 4;
-    }
-#endif
-}
-
-/**
- * Deinterlace the given block by cubic interpolating every second line.
- * will be called for every 8x8 block and can read & write from line 4-15
- * lines 0-3 have been passed through the deblock / dering filters already, but can be read, too.
- * lines 4-12 will be read into the deblocking filter and should be deinterlaced
- * this filter will read lines 3-15 and write 7-13
- */
-static inline void RENAME(deInterlaceInterpolateCubic)(uint8_t src[], int stride)
-{
-#if TEMPLATE_PP_SSE2 || TEMPLATE_PP_MMXEXT || TEMPLATE_PP_3DNOW
-    src+= stride*3;
-    __asm__ volatile(
-        "lea (%0, %1), %%"FF_REG_a"             \n\t"
-        "lea (%%"FF_REG_a", %1, 4), %%"FF_REG_d"\n\t"
-        "lea (%%"FF_REG_d", %1, 4), %%"FF_REG_c"\n\t"
-        "add %1, %%"FF_REG_c"                   \n\t"
-#if TEMPLATE_PP_SSE2
-        "pxor %%xmm7, %%xmm7                    \n\t"
-#define REAL_DEINT_CUBIC(a,b,c,d,e)\
-        "movq " #a ", %%xmm0                    \n\t"\
-        "movq " #b ", %%xmm1                    \n\t"\
-        "movq " #d ", %%xmm2                    \n\t"\
-        "movq " #e ", %%xmm3                    \n\t"\
-        "pavgb %%xmm2, %%xmm1                   \n\t"\
-        "pavgb %%xmm3, %%xmm0                   \n\t"\
-        "punpcklbw %%xmm7, %%xmm0               \n\t"\
-        "punpcklbw %%xmm7, %%xmm1               \n\t"\
-        "psubw %%xmm1, %%xmm0                   \n\t"\
-        "psraw $3, %%xmm0                       \n\t"\
-        "psubw %%xmm0, %%xmm1                   \n\t"\
-        "packuswb %%xmm1, %%xmm1                \n\t"\
-        "movlps %%xmm1, " #c "                  \n\t"
-#else //TEMPLATE_PP_SSE2
-        "pxor %%mm7, %%mm7                      \n\t"
-//      0       1       2       3       4       5       6       7       8       9       10
-//      %0      eax     eax+%1  eax+2%1 %0+4%1  edx     edx+%1  edx+2%1 %0+8%1  edx+4%1 ecx
-
-#define REAL_DEINT_CUBIC(a,b,c,d,e)\
-        "movq " #a ", %%mm0                     \n\t"\
-        "movq " #b ", %%mm1                     \n\t"\
-        "movq " #d ", %%mm2                     \n\t"\
-        "movq " #e ", %%mm3                     \n\t"\
-        PAVGB(%%mm2, %%mm1)                             /* (b+d) /2 */\
-        PAVGB(%%mm3, %%mm0)                             /* (a+e) /2 */\
-        "movq %%mm0, %%mm2                      \n\t"\
-        "punpcklbw %%mm7, %%mm0                 \n\t"\
-        "punpckhbw %%mm7, %%mm2                 \n\t"\
-        "movq %%mm1, %%mm3                      \n\t"\
-        "punpcklbw %%mm7, %%mm1                 \n\t"\
-        "punpckhbw %%mm7, %%mm3                 \n\t"\
-        "psubw %%mm1, %%mm0                     \n\t"   /* L(a+e - (b+d))/2 */\
-        "psubw %%mm3, %%mm2                     \n\t"   /* H(a+e - (b+d))/2 */\
-        "psraw $3, %%mm0                        \n\t"   /* L(a+e - (b+d))/16 */\
-        "psraw $3, %%mm2                        \n\t"   /* H(a+e - (b+d))/16 */\
-        "psubw %%mm0, %%mm1                     \n\t"   /* L(9b + 9d - a - e)/16 */\
-        "psubw %%mm2, %%mm3                     \n\t"   /* H(9b + 9d - a - e)/16 */\
-        "packuswb %%mm3, %%mm1                  \n\t"\
-        "movq %%mm1, " #c "                     \n\t"
-#endif //TEMPLATE_PP_SSE2
-#define DEINT_CUBIC(a,b,c,d,e)  REAL_DEINT_CUBIC(a,b,c,d,e)
-
-DEINT_CUBIC((%0)           , (%%FF_REGa, %1), (%%FF_REGa, %1, 2), (%0, %1, 4)    , (%%FF_REGd, %1))
-DEINT_CUBIC((%%FF_REGa, %1), (%0, %1, 4)    , (%%FF_REGd)       , (%%FF_REGd, %1), (%0, %1, 8))
-DEINT_CUBIC((%0, %1, 4)    , (%%FF_REGd, %1), (%%FF_REGd, %1, 2), (%0, %1, 8)    , (%%FF_REGc))
-DEINT_CUBIC((%%FF_REGd, %1), (%0, %1, 8)    , (%%FF_REGd, %1, 4), (%%FF_REGc)    , (%%FF_REGc, %1, 2))
-
-        : : "r" (src), "r" ((x86_reg)stride)
-        :
-#if TEMPLATE_PP_SSE2
-        XMM_CLOBBERS("%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm7",)
-#endif
-        "%"FF_REG_a, "%"FF_REG_d, "%"FF_REG_c
-    );
-#undef REAL_DEINT_CUBIC
-#else //TEMPLATE_PP_SSE2 || TEMPLATE_PP_MMXEXT || TEMPLATE_PP_3DNOW
-    int x;
-    src+= stride*3;
-    for(x=0; x<8; x++){
-        src[stride*3] = av_clip_uint8((-src[0]        + 9*src[stride*2] + 9*src[stride*4] - src[stride*6])>>4);
-        src[stride*5] = av_clip_uint8((-src[stride*2] + 9*src[stride*4] + 9*src[stride*6] - src[stride*8])>>4);
-        src[stride*7] = av_clip_uint8((-src[stride*4] + 9*src[stride*6] + 9*src[stride*8] - src[stride*10])>>4);
-        src[stride*9] = av_clip_uint8((-src[stride*6] + 9*src[stride*8] + 9*src[stride*10] - src[stride*12])>>4);
-        src++;
-    }
-#endif //TEMPLATE_PP_SSE2 || TEMPLATE_PP_MMXEXT || TEMPLATE_PP_3DNOW
-}
-
-/**
- * Deinterlace the given block by filtering every second line with a (-1 4 2 4 -1) filter.
- * will be called for every 8x8 block and can read & write from line 4-15
- * lines 0-3 have been passed through the deblock / dering filters already, but can be read, too.
- * lines 4-12 will be read into the deblocking filter and should be deinterlaced
- * this filter will read lines 4-13 and write 5-11
- */
-static inline void RENAME(deInterlaceFF)(uint8_t src[], int stride, uint8_t *tmp)
-{
-#if TEMPLATE_PP_MMXEXT || TEMPLATE_PP_3DNOW
-    src+= stride*4;
-    __asm__ volatile(
-        "lea (%0, %1), %%"FF_REG_a"             \n\t"
-        "lea (%%"FF_REG_a", %1, 4), %%"FF_REG_d"\n\t"
-        "pxor %%mm7, %%mm7                      \n\t"
-        "movq (%2), %%mm0                       \n\t"
-//      0       1       2       3       4       5       6       7       8       9       10
-//      %0      eax     eax+%1  eax+2%1 %0+4%1  edx     edx+%1  edx+2%1 %0+8%1  edx+4%1 ecx
-
-#define REAL_DEINT_FF(a,b,c,d)\
-        "movq " #a ", %%mm1                     \n\t"\
-        "movq " #b ", %%mm2                     \n\t"\
-        "movq " #c ", %%mm3                     \n\t"\
-        "movq " #d ", %%mm4                     \n\t"\
-        PAVGB(%%mm3, %%mm1)                          \
-        PAVGB(%%mm4, %%mm0)                          \
-        "movq %%mm0, %%mm3                      \n\t"\
-        "punpcklbw %%mm7, %%mm0                 \n\t"\
-        "punpckhbw %%mm7, %%mm3                 \n\t"\
-        "movq %%mm1, %%mm4                      \n\t"\
-        "punpcklbw %%mm7, %%mm1                 \n\t"\
-        "punpckhbw %%mm7, %%mm4                 \n\t"\
-        "psllw $2, %%mm1                        \n\t"\
-        "psllw $2, %%mm4                        \n\t"\
-        "psubw %%mm0, %%mm1                     \n\t"\
-        "psubw %%mm3, %%mm4                     \n\t"\
-        "movq %%mm2, %%mm5                      \n\t"\
-        "movq %%mm2, %%mm0                      \n\t"\
-        "punpcklbw %%mm7, %%mm2                 \n\t"\
-        "punpckhbw %%mm7, %%mm5                 \n\t"\
-        "paddw %%mm2, %%mm1                     \n\t"\
-        "paddw %%mm5, %%mm4                     \n\t"\
-        "psraw $2, %%mm1                        \n\t"\
-        "psraw $2, %%mm4                        \n\t"\
-        "packuswb %%mm4, %%mm1                  \n\t"\
-        "movq %%mm1, " #b "                     \n\t"\
-
-#define DEINT_FF(a,b,c,d)  REAL_DEINT_FF(a,b,c,d)
-
-DEINT_FF((%0)           , (%%FF_REGa)       , (%%FF_REGa, %1), (%%FF_REGa, %1, 2))
-DEINT_FF((%%FF_REGa, %1), (%%FF_REGa, %1, 2), (%0, %1, 4)    , (%%FF_REGd)       )
-DEINT_FF((%0, %1, 4)    , (%%FF_REGd)       , (%%FF_REGd, %1), (%%FF_REGd, %1, 2))
-DEINT_FF((%%FF_REGd, %1), (%%FF_REGd, %1, 2), (%0, %1, 8)    , (%%FF_REGd, %1, 4))
-
-        "movq %%mm0, (%2)                       \n\t"
-        : : "r" (src), "r" ((x86_reg)stride), "r"(tmp)
-        : "%"FF_REG_a, "%"FF_REG_d
-    );
-#else //TEMPLATE_PP_MMXEXT || TEMPLATE_PP_3DNOW
-    int x;
-    src+= stride*4;
-    for(x=0; x<8; x++){
-        int t1= tmp[x];
-        int t2= src[stride*1];
-
-        src[stride*1]= av_clip_uint8((-t1 + 4*src[stride*0] + 2*t2 + 4*src[stride*2] - src[stride*3] + 4)>>3);
-        t1= src[stride*4];
-        src[stride*3]= av_clip_uint8((-t2 + 4*src[stride*2] + 2*t1 + 4*src[stride*4] - src[stride*5] + 4)>>3);
-        t2= src[stride*6];
-        src[stride*5]= av_clip_uint8((-t1 + 4*src[stride*4] + 2*t2 + 4*src[stride*6] - src[stride*7] + 4)>>3);
-        t1= src[stride*8];
-        src[stride*7]= av_clip_uint8((-t2 + 4*src[stride*6] + 2*t1 + 4*src[stride*8] - src[stride*9] + 4)>>3);
-        tmp[x]= t1;
-
-        src++;
-    }
-#endif //TEMPLATE_PP_MMXEXT || TEMPLATE_PP_3DNOW
-}
-
-/**
- * Deinterlace the given block by filtering every line with a (-1 2 6 2 -1) filter.
- * will be called for every 8x8 block and can read & write from line 4-15
- * lines 0-3 have been passed through the deblock / dering filters already, but can be read, too.
- * lines 4-12 will be read into the deblocking filter and should be deinterlaced
- * this filter will read lines 4-13 and write 4-11
- */
-static inline void RENAME(deInterlaceL5)(uint8_t src[], int stride, uint8_t *tmp, uint8_t *tmp2)
-{
-#if (TEMPLATE_PP_MMXEXT || TEMPLATE_PP_3DNOW) && HAVE_6REGS
-    src+= stride*4;
-    __asm__ volatile(
-        "lea (%0, %1), %%"FF_REG_a"             \n\t"
-        "lea (%%"FF_REG_a", %1, 4), %%"FF_REG_d"\n\t"
-        "pxor %%mm7, %%mm7                      \n\t"
-        "movq (%2), %%mm0                       \n\t"
-        "movq (%3), %%mm1                       \n\t"
-//      0       1       2       3       4       5       6       7       8       9       10
-//      %0      eax     eax+%1  eax+2%1 %0+4%1  edx     edx+%1  edx+2%1 %0+8%1  edx+4%1 ecx
-
-#define REAL_DEINT_L5(t1,t2,a,b,c)\
-        "movq " #a ", %%mm2                     \n\t"\
-        "movq " #b ", %%mm3                     \n\t"\
-        "movq " #c ", %%mm4                     \n\t"\
-        PAVGB(t2, %%mm3)                             \
-        PAVGB(t1, %%mm4)                             \
-        "movq %%mm2, %%mm5                      \n\t"\
-        "movq %%mm2, " #t1 "                    \n\t"\
-        "punpcklbw %%mm7, %%mm2                 \n\t"\
-        "punpckhbw %%mm7, %%mm5                 \n\t"\
-        "movq %%mm2, %%mm6                      \n\t"\
-        "paddw %%mm2, %%mm2                     \n\t"\
-        "paddw %%mm6, %%mm2                     \n\t"\
-        "movq %%mm5, %%mm6                      \n\t"\
-        "paddw %%mm5, %%mm5                     \n\t"\
-        "paddw %%mm6, %%mm5                     \n\t"\
-        "movq %%mm3, %%mm6                      \n\t"\
-        "punpcklbw %%mm7, %%mm3                 \n\t"\
-        "punpckhbw %%mm7, %%mm6                 \n\t"\
-        "paddw %%mm3, %%mm3                     \n\t"\
-        "paddw %%mm6, %%mm6                     \n\t"\
-        "paddw %%mm3, %%mm2                     \n\t"\
-        "paddw %%mm6, %%mm5                     \n\t"\
-        "movq %%mm4, %%mm6                      \n\t"\
-        "punpcklbw %%mm7, %%mm4                 \n\t"\
-        "punpckhbw %%mm7, %%mm6                 \n\t"\
-        "psubw %%mm4, %%mm2                     \n\t"\
-        "psubw %%mm6, %%mm5                     \n\t"\
-        "psraw $2, %%mm2                        \n\t"\
-        "psraw $2, %%mm5                        \n\t"\
-        "packuswb %%mm5, %%mm2                  \n\t"\
-        "movq %%mm2, " #a "                     \n\t"\
-
-#define DEINT_L5(t1,t2,a,b,c)  REAL_DEINT_L5(t1,t2,a,b,c)
-
-DEINT_L5(%%mm0, %%mm1, (%0)              , (%%FF_REGa)       , (%%FF_REGa, %1)   )
-DEINT_L5(%%mm1, %%mm0, (%%FF_REGa)       , (%%FF_REGa, %1)   , (%%FF_REGa, %1, 2))
-DEINT_L5(%%mm0, %%mm1, (%%FF_REGa, %1)   , (%%FF_REGa, %1, 2), (%0, %1, 4)   )
-DEINT_L5(%%mm1, %%mm0, (%%FF_REGa, %1, 2), (%0, %1, 4)       , (%%FF_REGd)       )
-DEINT_L5(%%mm0, %%mm1, (%0, %1, 4)       , (%%FF_REGd)       , (%%FF_REGd, %1)   )
-DEINT_L5(%%mm1, %%mm0, (%%FF_REGd)       , (%%FF_REGd, %1)   , (%%FF_REGd, %1, 2))
-DEINT_L5(%%mm0, %%mm1, (%%FF_REGd, %1)   , (%%FF_REGd, %1, 2), (%0, %1, 8)   )
-DEINT_L5(%%mm1, %%mm0, (%%FF_REGd, %1, 2), (%0, %1, 8)       , (%%FF_REGd, %1, 4))
-
-        "movq %%mm0, (%2)                       \n\t"
-        "movq %%mm1, (%3)                       \n\t"
-        : : "r" (src), "r" ((x86_reg)stride), "r"(tmp), "r"(tmp2)
-        : "%"FF_REG_a, "%"FF_REG_d
-    );
-#else //(TEMPLATE_PP_MMXEXT || TEMPLATE_PP_3DNOW) && HAVE_6REGS
-    int x;
-    src+= stride*4;
-    for(x=0; x<8; x++){
-        int t1= tmp[x];
-        int t2= tmp2[x];
-        int t3= src[0];
-
-        src[stride*0]= av_clip_uint8((-(t1 + src[stride*2]) + 2*(t2 + src[stride*1]) + 6*t3 + 4)>>3);
-        t1= src[stride*1];
-        src[stride*1]= av_clip_uint8((-(t2 + src[stride*3]) + 2*(t3 + src[stride*2]) + 6*t1 + 4)>>3);
-        t2= src[stride*2];
-        src[stride*2]= av_clip_uint8((-(t3 + src[stride*4]) + 2*(t1 + src[stride*3]) + 6*t2 + 4)>>3);
-        t3= src[stride*3];
-        src[stride*3]= av_clip_uint8((-(t1 + src[stride*5]) + 2*(t2 + src[stride*4]) + 6*t3 + 4)>>3);
-        t1= src[stride*4];
-        src[stride*4]= av_clip_uint8((-(t2 + src[stride*6]) + 2*(t3 + src[stride*5]) + 6*t1 + 4)>>3);
-        t2= src[stride*5];
-        src[stride*5]= av_clip_uint8((-(t3 + src[stride*7]) + 2*(t1 + src[stride*6]) + 6*t2 + 4)>>3);
-        t3= src[stride*6];
-        src[stride*6]= av_clip_uint8((-(t1 + src[stride*8]) + 2*(t2 + src[stride*7]) + 6*t3 + 4)>>3);
-        t1= src[stride*7];
-        src[stride*7]= av_clip_uint8((-(t2 + src[stride*9]) + 2*(t3 + src[stride*8]) + 6*t1 + 4)>>3);
-
-        tmp[x]= t3;
-        tmp2[x]= t1;
-
-        src++;
-    }
-#endif //(TEMPLATE_PP_MMXEXT || TEMPLATE_PP_3DNOW) && HAVE_6REGS
-}
-
-/**
- * Deinterlace the given block by filtering all lines with a (1 2 1) filter.
- * will be called for every 8x8 block and can read & write from line 4-15
- * lines 0-3 have been passed through the deblock / dering filters already, but can be read, too.
- * lines 4-12 will be read into the deblocking filter and should be deinterlaced
- * this filter will read lines 4-13 and write 4-11
- */
-static inline void RENAME(deInterlaceBlendLinear)(uint8_t src[], int stride, uint8_t *tmp)
-{
-#if TEMPLATE_PP_MMXEXT || TEMPLATE_PP_3DNOW
-    src+= 4*stride;
-    __asm__ volatile(
-        "lea (%0, %1), %%"FF_REG_a"             \n\t"
-        "lea (%%"FF_REG_a", %1, 4), %%"FF_REG_d"\n\t"
-//      0       1       2       3       4       5       6       7       8       9
-//      %0      eax     eax+%1  eax+2%1 %0+4%1  edx     edx+%1  edx+2%1 %0+8%1  edx+4%1
-
-        "movq (%2), %%mm0                       \n\t" // L0
-        "movq (%%"FF_REG_a"), %%mm1             \n\t" // L2
-        PAVGB(%%mm1, %%mm0)                           // L0+L2
-        "movq (%0), %%mm2                       \n\t" // L1
-        PAVGB(%%mm2, %%mm0)
-        "movq %%mm0, (%0)                       \n\t"
-        "movq (%%"FF_REG_a", %1), %%mm0         \n\t" // L3
-        PAVGB(%%mm0, %%mm2)                           // L1+L3
-        PAVGB(%%mm1, %%mm2)                           // 2L2 + L1 + L3
-        "movq %%mm2, (%%"FF_REG_a")             \n\t"
-        "movq (%%"FF_REG_a", %1, 2), %%mm2      \n\t" // L4
-        PAVGB(%%mm2, %%mm1)                           // L2+L4
-        PAVGB(%%mm0, %%mm1)                           // 2L3 + L2 + L4
-        "movq %%mm1, (%%"FF_REG_a", %1)         \n\t"
-        "movq (%0, %1, 4), %%mm1                \n\t" // L5
-        PAVGB(%%mm1, %%mm0)                           // L3+L5
-        PAVGB(%%mm2, %%mm0)                           // 2L4 + L3 + L5
-        "movq %%mm0, (%%"FF_REG_a", %1, 2)      \n\t"
-        "movq (%%"FF_REG_d"), %%mm0             \n\t" // L6
-        PAVGB(%%mm0, %%mm2)                           // L4+L6
-        PAVGB(%%mm1, %%mm2)                           // 2L5 + L4 + L6
-        "movq %%mm2, (%0, %1, 4)                \n\t"
-        "movq (%%"FF_REG_d", %1), %%mm2         \n\t" // L7
-        PAVGB(%%mm2, %%mm1)                           // L5+L7
-        PAVGB(%%mm0, %%mm1)                           // 2L6 + L5 + L7
-        "movq %%mm1, (%%"FF_REG_d")             \n\t"
-        "movq (%%"FF_REG_d", %1, 2), %%mm1      \n\t" // L8
-        PAVGB(%%mm1, %%mm0)                           // L6+L8
-        PAVGB(%%mm2, %%mm0)                           // 2L7 + L6 + L8
-        "movq %%mm0, (%%"FF_REG_d", %1)         \n\t"
-        "movq (%0, %1, 8), %%mm0                \n\t" // L9
-        PAVGB(%%mm0, %%mm2)                           // L7+L9
-        PAVGB(%%mm1, %%mm2)                           // 2L8 + L7 + L9
-        "movq %%mm2, (%%"FF_REG_d", %1, 2)      \n\t"
-        "movq %%mm1, (%2)                       \n\t"
-
-        : : "r" (src), "r" ((x86_reg)stride), "r" (tmp)
-        : "%"FF_REG_a, "%"FF_REG_d
-    );
-#else //TEMPLATE_PP_MMXEXT || TEMPLATE_PP_3DNOW
-    int a, b, c, x;
-    src+= 4*stride;
-
-    for(x=0; x<2; x++){
-        a= *(uint32_t*)&tmp[stride*0];
-        b= *(uint32_t*)&src[stride*0];
-        c= *(uint32_t*)&src[stride*1];
-        a= (a&c) + (((a^c)&0xFEFEFEFEUL)>>1);
-        *(uint32_t*)&src[stride*0]= (a|b) - (((a^b)&0xFEFEFEFEUL)>>1);
-
-        a= *(uint32_t*)&src[stride*2];
-        b= (a&b) + (((a^b)&0xFEFEFEFEUL)>>1);
-        *(uint32_t*)&src[stride*1]= (c|b) - (((c^b)&0xFEFEFEFEUL)>>1);
-
-        b= *(uint32_t*)&src[stride*3];
-        c= (b&c) + (((b^c)&0xFEFEFEFEUL)>>1);
-        *(uint32_t*)&src[stride*2]= (c|a) - (((c^a)&0xFEFEFEFEUL)>>1);
-
-        c= *(uint32_t*)&src[stride*4];
-        a= (a&c) + (((a^c)&0xFEFEFEFEUL)>>1);
-        *(uint32_t*)&src[stride*3]= (a|b) - (((a^b)&0xFEFEFEFEUL)>>1);
-
-        a= *(uint32_t*)&src[stride*5];
-        b= (a&b) + (((a^b)&0xFEFEFEFEUL)>>1);
-        *(uint32_t*)&src[stride*4]= (c|b) - (((c^b)&0xFEFEFEFEUL)>>1);
-
-        b= *(uint32_t*)&src[stride*6];
-        c= (b&c) + (((b^c)&0xFEFEFEFEUL)>>1);
-        *(uint32_t*)&src[stride*5]= (c|a) - (((c^a)&0xFEFEFEFEUL)>>1);
-
-        c= *(uint32_t*)&src[stride*7];
-        a= (a&c) + (((a^c)&0xFEFEFEFEUL)>>1);
-        *(uint32_t*)&src[stride*6]= (a|b) - (((a^b)&0xFEFEFEFEUL)>>1);
-
-        a= *(uint32_t*)&src[stride*8];
-        b= (a&b) + (((a^b)&0xFEFEFEFEUL)>>1);
-        *(uint32_t*)&src[stride*7]= (c|b) - (((c^b)&0xFEFEFEFEUL)>>1);
-
-        *(uint32_t*)&tmp[stride*0]= c;
-        src += 4;
-        tmp += 4;
-    }
-#endif //TEMPLATE_PP_MMXEXT || TEMPLATE_PP_3DNOW
-}
-
-/**
- * Deinterlace the given block by applying a median filter to every second line.
- * will be called for every 8x8 block and can read & write from line 4-15,
- * lines 0-3 have been passed through the deblock / dering filters already, but can be read, too.
- * lines 4-12 will be read into the deblocking filter and should be deinterlaced
- */
-static inline void RENAME(deInterlaceMedian)(uint8_t src[], int stride)
-{
-#if TEMPLATE_PP_MMX
-    src+= 4*stride;
-#if TEMPLATE_PP_MMXEXT
-    __asm__ volatile(
-        "lea (%0, %1), %%"FF_REG_a"             \n\t"
-        "lea (%%"FF_REG_a", %1, 4), %%"FF_REG_d"\n\t"
-//      0       1       2       3       4       5       6       7       8       9
-//      %0      eax     eax+%1  eax+2%1 %0+4%1  edx     edx+%1  edx+2%1 %0+8%1  edx+4%1
-
-        "movq (%0), %%mm0                       \n\t"
-        "movq (%%"FF_REG_a", %1), %%mm2         \n\t"
-        "movq (%%"FF_REG_a"), %%mm1             \n\t"
-        "movq %%mm0, %%mm3                      \n\t"
-        "pmaxub %%mm1, %%mm0                    \n\t"
-        "pminub %%mm3, %%mm1                    \n\t"
-        "pmaxub %%mm2, %%mm1                    \n\t"
-        "pminub %%mm1, %%mm0                    \n\t"
-        "movq %%mm0, (%%"FF_REG_a")             \n\t"
-
-        "movq (%0, %1, 4), %%mm0                \n\t"
-        "movq (%%"FF_REG_a", %1, 2), %%mm1      \n\t"
-        "movq %%mm2, %%mm3                      \n\t"
-        "pmaxub %%mm1, %%mm2                    \n\t"
-        "pminub %%mm3, %%mm1                    \n\t"
-        "pmaxub %%mm0, %%mm1                    \n\t"
-        "pminub %%mm1, %%mm2                    \n\t"
-        "movq %%mm2, (%%"FF_REG_a", %1, 2)      \n\t"
-
-        "movq (%%"FF_REG_d"), %%mm2             \n\t"
-        "movq (%%"FF_REG_d", %1), %%mm1         \n\t"
-        "movq %%mm2, %%mm3                      \n\t"
-        "pmaxub %%mm0, %%mm2                    \n\t"
-        "pminub %%mm3, %%mm0                    \n\t"
-        "pmaxub %%mm1, %%mm0                    \n\t"
-        "pminub %%mm0, %%mm2                    \n\t"
-        "movq %%mm2, (%%"FF_REG_d")             \n\t"
-
-        "movq (%%"FF_REG_d", %1, 2), %%mm2      \n\t"
-        "movq (%0, %1, 8), %%mm0                \n\t"
-        "movq %%mm2, %%mm3                      \n\t"
-        "pmaxub %%mm0, %%mm2                    \n\t"
-        "pminub %%mm3, %%mm0                    \n\t"
-        "pmaxub %%mm1, %%mm0                    \n\t"
-        "pminub %%mm0, %%mm2                    \n\t"
-        "movq %%mm2, (%%"FF_REG_d", %1, 2)      \n\t"
-
-
-        : : "r" (src), "r" ((x86_reg)stride)
-        : "%"FF_REG_a, "%"FF_REG_d
-    );
-
-#else // MMX without MMX2
-    __asm__ volatile(
-        "lea (%0, %1), %%"FF_REG_a"             \n\t"
-        "lea (%%"FF_REG_a", %1, 4), %%"FF_REG_d"\n\t"
-//      0       1       2       3       4       5       6       7       8       9
-//      %0      eax     eax+%1  eax+2%1 %0+4%1  edx     edx+%1  edx+2%1 %0+8%1  edx+4%1
-        "pxor %%mm7, %%mm7                      \n\t"
-
-#define REAL_MEDIAN(a,b,c)\
-        "movq " #a ", %%mm0                     \n\t"\
-        "movq " #b ", %%mm2                     \n\t"\
-        "movq " #c ", %%mm1                     \n\t"\
-        "movq %%mm0, %%mm3                      \n\t"\
-        "movq %%mm1, %%mm4                      \n\t"\
-        "movq %%mm2, %%mm5                      \n\t"\
-        "psubusb %%mm1, %%mm3                   \n\t"\
-        "psubusb %%mm2, %%mm4                   \n\t"\
-        "psubusb %%mm0, %%mm5                   \n\t"\
-        "pcmpeqb %%mm7, %%mm3                   \n\t"\
-        "pcmpeqb %%mm7, %%mm4                   \n\t"\
-        "pcmpeqb %%mm7, %%mm5                   \n\t"\
-        "movq %%mm3, %%mm6                      \n\t"\
-        "pxor %%mm4, %%mm3                      \n\t"\
-        "pxor %%mm5, %%mm4                      \n\t"\
-        "pxor %%mm6, %%mm5                      \n\t"\
-        "por %%mm3, %%mm1                       \n\t"\
-        "por %%mm4, %%mm2                       \n\t"\
-        "por %%mm5, %%mm0                       \n\t"\
-        "pand %%mm2, %%mm0                      \n\t"\
-        "pand %%mm1, %%mm0                      \n\t"\
-        "movq %%mm0, " #b "                     \n\t"
-#define MEDIAN(a,b,c)  REAL_MEDIAN(a,b,c)
-
-MEDIAN((%0)           , (%%FF_REGa)       , (%%FF_REGa, %1))
-MEDIAN((%%FF_REGa, %1), (%%FF_REGa, %1, 2), (%0, %1, 4))
-MEDIAN((%0, %1, 4)    , (%%FF_REGd)       , (%%FF_REGd, %1))
-MEDIAN((%%FF_REGd, %1), (%%FF_REGd, %1, 2), (%0, %1, 8))
-
-        : : "r" (src), "r" ((x86_reg)stride)
-        : "%"FF_REG_a, "%"FF_REG_d
-    );
-#endif //TEMPLATE_PP_MMXEXT
-#else //TEMPLATE_PP_MMX
-    int x, y;
-    src+= 4*stride;
-    // FIXME - there should be a way to do a few columns in parallel like w/mmx
-    for(x=0; x<8; x++){
-        uint8_t *colsrc = src;
-        for (y=0; y<4; y++){
-            int a, b, c, d, e, f;
-            a = colsrc[0       ];
-            b = colsrc[stride  ];
-            c = colsrc[stride*2];
-            d = (a-b)>>31;
-            e = (b-c)>>31;
-            f = (c-a)>>31;
-            colsrc[stride  ] = (a|(d^f)) & (b|(d^e)) & (c|(e^f));
-            colsrc += stride*2;
-        }
-        src++;
-    }
-#endif //TEMPLATE_PP_MMX
-}
-
-#if TEMPLATE_PP_MMX
-/**
- * Transpose and shift the given 8x8 Block into dst1 and dst2.
- */
-static inline void RENAME(transpose1)(uint8_t *dst1, uint8_t *dst2, const uint8_t *src, int srcStride)
-{
-    __asm__(
-        "lea (%0, %1), %%"FF_REG_a"             \n\t"
-//      0       1       2       3       4       5       6       7       8       9
-//      %0      eax     eax+%1  eax+2%1 %0+4%1  edx     edx+%1  edx+2%1 %0+8%1  edx+4%1
-        "movq (%0), %%mm0                       \n\t" // 12345678
-        "movq (%%"FF_REG_a"), %%mm1             \n\t" // abcdefgh
-        "movq %%mm0, %%mm2                      \n\t" // 12345678
-        "punpcklbw %%mm1, %%mm0                 \n\t" // 1a2b3c4d
-        "punpckhbw %%mm1, %%mm2                 \n\t" // 5e6f7g8h
-
-        "movq (%%"FF_REG_a", %1), %%mm1         \n\t"
-        "movq (%%"FF_REG_a", %1, 2), %%mm3      \n\t"
-        "movq %%mm1, %%mm4                      \n\t"
-        "punpcklbw %%mm3, %%mm1                 \n\t"
-        "punpckhbw %%mm3, %%mm4                 \n\t"
-
-        "movq %%mm0, %%mm3                      \n\t"
-        "punpcklwd %%mm1, %%mm0                 \n\t"
-        "punpckhwd %%mm1, %%mm3                 \n\t"
-        "movq %%mm2, %%mm1                      \n\t"
-        "punpcklwd %%mm4, %%mm2                 \n\t"
-        "punpckhwd %%mm4, %%mm1                 \n\t"
-
-        "movd %%mm0, 128(%2)                    \n\t"
-        "psrlq $32, %%mm0                       \n\t"
-        "movd %%mm0, 144(%2)                    \n\t"
-        "movd %%mm3, 160(%2)                    \n\t"
-        "psrlq $32, %%mm3                       \n\t"
-        "movd %%mm3, 176(%2)                    \n\t"
-        "movd %%mm3, 48(%3)                     \n\t"
-        "movd %%mm2, 192(%2)                    \n\t"
-        "movd %%mm2, 64(%3)                     \n\t"
-        "psrlq $32, %%mm2                       \n\t"
-        "movd %%mm2, 80(%3)                     \n\t"
-        "movd %%mm1, 96(%3)                     \n\t"
-        "psrlq $32, %%mm1                       \n\t"
-        "movd %%mm1, 112(%3)                    \n\t"
-
-        "lea (%%"FF_REG_a", %1, 4), %%"FF_REG_a"\n\t"
-
-        "movq (%0, %1, 4), %%mm0                \n\t" // 12345678
-        "movq (%%"FF_REG_a"), %%mm1             \n\t" // abcdefgh
-        "movq %%mm0, %%mm2                      \n\t" // 12345678
-        "punpcklbw %%mm1, %%mm0                 \n\t" // 1a2b3c4d
-        "punpckhbw %%mm1, %%mm2                 \n\t" // 5e6f7g8h
-
-        "movq (%%"FF_REG_a", %1), %%mm1         \n\t"
-        "movq (%%"FF_REG_a", %1, 2), %%mm3      \n\t"
-        "movq %%mm1, %%mm4                      \n\t"
-        "punpcklbw %%mm3, %%mm1                 \n\t"
-        "punpckhbw %%mm3, %%mm4                 \n\t"
-
-        "movq %%mm0, %%mm3                      \n\t"
-        "punpcklwd %%mm1, %%mm0                 \n\t"
-        "punpckhwd %%mm1, %%mm3                 \n\t"
-        "movq %%mm2, %%mm1                      \n\t"
-        "punpcklwd %%mm4, %%mm2                 \n\t"
-        "punpckhwd %%mm4, %%mm1                 \n\t"
-
-        "movd %%mm0, 132(%2)                    \n\t"
-        "psrlq $32, %%mm0                       \n\t"
-        "movd %%mm0, 148(%2)                    \n\t"
-        "movd %%mm3, 164(%2)                    \n\t"
-        "psrlq $32, %%mm3                       \n\t"
-        "movd %%mm3, 180(%2)                    \n\t"
-        "movd %%mm3, 52(%3)                     \n\t"
-        "movd %%mm2, 196(%2)                    \n\t"
-        "movd %%mm2, 68(%3)                     \n\t"
-        "psrlq $32, %%mm2                       \n\t"
-        "movd %%mm2, 84(%3)                     \n\t"
-        "movd %%mm1, 100(%3)                    \n\t"
-        "psrlq $32, %%mm1                       \n\t"
-        "movd %%mm1, 116(%3)                    \n\t"
-
-
-        :: "r" (src), "r" ((x86_reg)srcStride), "r" (dst1), "r" (dst2)
-        : "%"FF_REG_a
-    );
-}
-
-/**
- * Transpose the given 8x8 block.
- */
-static inline void RENAME(transpose2)(uint8_t *dst, int dstStride, const uint8_t *src)
-{
-    __asm__(
-        "lea (%0, %1), %%"FF_REG_a"             \n\t"
-        "lea (%%"FF_REG_a",%1,4), %%"FF_REG_d"  \n\t"
-//      0       1       2       3       4       5       6       7       8       9
-//      %0      eax     eax+%1  eax+2%1 %0+4%1  edx     edx+%1  edx+2%1 %0+8%1  edx+4%1
-        "movq (%2), %%mm0                       \n\t" // 12345678
-        "movq 16(%2), %%mm1                     \n\t" // abcdefgh
-        "movq %%mm0, %%mm2                      \n\t" // 12345678
-        "punpcklbw %%mm1, %%mm0                 \n\t" // 1a2b3c4d
-        "punpckhbw %%mm1, %%mm2                 \n\t" // 5e6f7g8h
-
-        "movq 32(%2), %%mm1                     \n\t"
-        "movq 48(%2), %%mm3                     \n\t"
-        "movq %%mm1, %%mm4                      \n\t"
-        "punpcklbw %%mm3, %%mm1                 \n\t"
-        "punpckhbw %%mm3, %%mm4                 \n\t"
-
-        "movq %%mm0, %%mm3                      \n\t"
-        "punpcklwd %%mm1, %%mm0                 \n\t"
-        "punpckhwd %%mm1, %%mm3                 \n\t"
-        "movq %%mm2, %%mm1                      \n\t"
-        "punpcklwd %%mm4, %%mm2                 \n\t"
-        "punpckhwd %%mm4, %%mm1                 \n\t"
-
-        "movd %%mm0, (%0)                       \n\t"
-        "psrlq $32, %%mm0                       \n\t"
-        "movd %%mm0, (%%"FF_REG_a")             \n\t"
-        "movd %%mm3, (%%"FF_REG_a", %1)         \n\t"
-        "psrlq $32, %%mm3                       \n\t"
-        "movd %%mm3, (%%"FF_REG_a", %1, 2)      \n\t"
-        "movd %%mm2, (%0, %1, 4)                \n\t"
-        "psrlq $32, %%mm2                       \n\t"
-        "movd %%mm2, (%%"FF_REG_d")             \n\t"
-        "movd %%mm1, (%%"FF_REG_d", %1)         \n\t"
-        "psrlq $32, %%mm1                       \n\t"
-        "movd %%mm1, (%%"FF_REG_d", %1, 2)      \n\t"
-
-
-        "movq 64(%2), %%mm0                     \n\t" // 12345678
-        "movq 80(%2), %%mm1                     \n\t" // abcdefgh
-        "movq %%mm0, %%mm2                      \n\t" // 12345678
-        "punpcklbw %%mm1, %%mm0                 \n\t" // 1a2b3c4d
-        "punpckhbw %%mm1, %%mm2                 \n\t" // 5e6f7g8h
-
-        "movq 96(%2), %%mm1                     \n\t"
-        "movq 112(%2), %%mm3                    \n\t"
-        "movq %%mm1, %%mm4                      \n\t"
-        "punpcklbw %%mm3, %%mm1                 \n\t"
-        "punpckhbw %%mm3, %%mm4                 \n\t"
-
-        "movq %%mm0, %%mm3                      \n\t"
-        "punpcklwd %%mm1, %%mm0                 \n\t"
-        "punpckhwd %%mm1, %%mm3                 \n\t"
-        "movq %%mm2, %%mm1                      \n\t"
-        "punpcklwd %%mm4, %%mm2                 \n\t"
-        "punpckhwd %%mm4, %%mm1                 \n\t"
-
-        "movd %%mm0, 4(%0)                      \n\t"
-        "psrlq $32, %%mm0                       \n\t"
-        "movd %%mm0, 4(%%"FF_REG_a")            \n\t"
-        "movd %%mm3, 4(%%"FF_REG_a", %1)        \n\t"
-        "psrlq $32, %%mm3                       \n\t"
-        "movd %%mm3, 4(%%"FF_REG_a", %1, 2)     \n\t"
-        "movd %%mm2, 4(%0, %1, 4)               \n\t"
-        "psrlq $32, %%mm2                       \n\t"
-        "movd %%mm2, 4(%%"FF_REG_d")            \n\t"
-        "movd %%mm1, 4(%%"FF_REG_d", %1)        \n\t"
-        "psrlq $32, %%mm1                       \n\t"
-        "movd %%mm1, 4(%%"FF_REG_d", %1, 2)     \n\t"
-
-        :: "r" (dst), "r" ((x86_reg)dstStride), "r" (src)
-        : "%"FF_REG_a, "%"FF_REG_d
-    );
-}
-#endif //TEMPLATE_PP_MMX
-//static long test=0;
-
-#if !TEMPLATE_PP_ALTIVEC
-static inline void RENAME(tempNoiseReducer)(uint8_t *src, int stride,
-                                    uint8_t *tempBlurred, uint32_t *tempBlurredPast, const int *maxNoise)
-{
-    // to save a register (FIXME do this outside of the loops)
-    tempBlurredPast[127]= maxNoise[0];
-    tempBlurredPast[128]= maxNoise[1];
-    tempBlurredPast[129]= maxNoise[2];
-
-#define FAST_L2_DIFF
-//#define L1_DIFF //u should change the thresholds too if u try that one
-#if (TEMPLATE_PP_MMXEXT || TEMPLATE_PP_3DNOW) && HAVE_6REGS
-    __asm__ volatile(
-        "lea (%2, %2, 2), %%"FF_REG_a"          \n\t" // 3*stride
-        "lea (%2, %2, 4), %%"FF_REG_d"          \n\t" // 5*stride
-        "lea (%%"FF_REG_d", %2, 2), %%"FF_REG_c"\n\t" // 7*stride
-//      0       1       2       3       4       5       6       7       8       9
-//      %x      %x+%2   %x+2%2  %x+eax  %x+4%2  %x+edx  %x+2eax %x+ecx  %x+8%2
-//FIXME reorder?
-#ifdef L1_DIFF //needs mmx2
-        "movq (%0), %%mm0                       \n\t" // L0
-        "psadbw (%1), %%mm0                     \n\t" // |L0-R0|
-        "movq (%0, %2), %%mm1                   \n\t" // L1
-        "psadbw (%1, %2), %%mm1                 \n\t" // |L1-R1|
-        "movq (%0, %2, 2), %%mm2                \n\t" // L2
-        "psadbw (%1, %2, 2), %%mm2              \n\t" // |L2-R2|
-        "movq (%0, %%"FF_REG_a"), %%mm3         \n\t" // L3
-        "psadbw (%1, %%"FF_REG_a"), %%mm3       \n\t" // |L3-R3|
-
-        "movq (%0, %2, 4), %%mm4                \n\t" // L4
-        "paddw %%mm1, %%mm0                     \n\t"
-        "psadbw (%1, %2, 4), %%mm4              \n\t" // |L4-R4|
-        "movq (%0, %%"FF_REG_d"), %%mm5         \n\t" // L5
-        "paddw %%mm2, %%mm0                     \n\t"
-        "psadbw (%1, %%"FF_REG_d"), %%mm5       \n\t" // |L5-R5|
-        "movq (%0, %%"FF_REG_a", 2), %%mm6      \n\t" // L6
-        "paddw %%mm3, %%mm0                     \n\t"
-        "psadbw (%1, %%"FF_REG_a", 2), %%mm6    \n\t" // |L6-R6|
-        "movq (%0, %%"FF_REG_c"), %%mm7         \n\t" // L7
-        "paddw %%mm4, %%mm0                     \n\t"
-        "psadbw (%1, %%"FF_REG_c"), %%mm7       \n\t" // |L7-R7|
-        "paddw %%mm5, %%mm6                     \n\t"
-        "paddw %%mm7, %%mm6                     \n\t"
-        "paddw %%mm6, %%mm0                     \n\t"
-#else //L1_DIFF
-#if defined (FAST_L2_DIFF)
-        "pcmpeqb %%mm7, %%mm7                   \n\t"
-        "movq "MANGLE(b80)", %%mm6              \n\t"
-        "pxor %%mm0, %%mm0                      \n\t"
-#define REAL_L2_DIFF_CORE(a, b)\
-        "movq " #a ", %%mm5                     \n\t"\
-        "movq " #b ", %%mm2                     \n\t"\
-        "pxor %%mm7, %%mm2                      \n\t"\
-        PAVGB(%%mm2, %%mm5)\
-        "paddb %%mm6, %%mm5                     \n\t"\
-        "movq %%mm5, %%mm2                      \n\t"\
-        "psllw $8, %%mm5                        \n\t"\
-        "pmaddwd %%mm5, %%mm5                   \n\t"\
-        "pmaddwd %%mm2, %%mm2                   \n\t"\
-        "paddd %%mm2, %%mm5                     \n\t"\
-        "psrld $14, %%mm5                       \n\t"\
-        "paddd %%mm5, %%mm0                     \n\t"
-
-#else //defined (FAST_L2_DIFF)
-        "pxor %%mm7, %%mm7                      \n\t"
-        "pxor %%mm0, %%mm0                      \n\t"
-#define REAL_L2_DIFF_CORE(a, b)\
-        "movq " #a ", %%mm5                     \n\t"\
-        "movq " #b ", %%mm2                     \n\t"\
-        "movq %%mm5, %%mm1                      \n\t"\
-        "movq %%mm2, %%mm3                      \n\t"\
-        "punpcklbw %%mm7, %%mm5                 \n\t"\
-        "punpckhbw %%mm7, %%mm1                 \n\t"\
-        "punpcklbw %%mm7, %%mm2                 \n\t"\
-        "punpckhbw %%mm7, %%mm3                 \n\t"\
-        "psubw %%mm2, %%mm5                     \n\t"\
-        "psubw %%mm3, %%mm1                     \n\t"\
-        "pmaddwd %%mm5, %%mm5                   \n\t"\
-        "pmaddwd %%mm1, %%mm1                   \n\t"\
-        "paddd %%mm1, %%mm5                     \n\t"\
-        "paddd %%mm5, %%mm0                     \n\t"
-
-#endif //defined (FAST_L2_DIFF)
-
-#define L2_DIFF_CORE(a, b)  REAL_L2_DIFF_CORE(a, b)
-
-L2_DIFF_CORE((%0)             , (%1))
-L2_DIFF_CORE((%0, %2)         , (%1, %2))
-L2_DIFF_CORE((%0, %2, 2)      , (%1, %2, 2))
-L2_DIFF_CORE((%0, %%FF_REGa)  , (%1, %%FF_REGa))
-L2_DIFF_CORE((%0, %2, 4)      , (%1, %2, 4))
-L2_DIFF_CORE((%0, %%FF_REGd)  , (%1, %%FF_REGd))
-L2_DIFF_CORE((%0, %%FF_REGa,2), (%1, %%FF_REGa,2))
-L2_DIFF_CORE((%0, %%FF_REGc)  , (%1, %%FF_REGc))
-
-#endif //L1_DIFF
-
-        "movq %%mm0, %%mm4                      \n\t"
-        "psrlq $32, %%mm0                       \n\t"
-        "paddd %%mm0, %%mm4                     \n\t"
-        "movd %%mm4, %%ecx                      \n\t"
-        "shll $2, %%ecx                         \n\t"
-        "mov %3, %%"FF_REG_d"                   \n\t"
-        "addl -4(%%"FF_REG_d"), %%ecx           \n\t"
-        "addl 4(%%"FF_REG_d"), %%ecx            \n\t"
-        "addl -1024(%%"FF_REG_d"), %%ecx        \n\t"
-        "addl $4, %%ecx                         \n\t"
-        "addl 1024(%%"FF_REG_d"), %%ecx         \n\t"
-        "shrl $3, %%ecx                         \n\t"
-        "movl %%ecx, (%%"FF_REG_d")             \n\t"
-
-//        "mov %3, %%"FF_REG_c"                   \n\t"
-//        "mov %%"FF_REG_c", test                 \n\t"
-//        "jmp 4f                                 \n\t"
-        "cmpl 512(%%"FF_REG_d"), %%ecx          \n\t"
-        " jb 2f                                 \n\t"
-        "cmpl 516(%%"FF_REG_d"), %%ecx          \n\t"
-        " jb 1f                                 \n\t"
-
-        "lea (%%"FF_REG_a", %2, 2), %%"FF_REG_d"\n\t" // 5*stride
-        "lea (%%"FF_REG_d", %2, 2), %%"FF_REG_c"\n\t" // 7*stride
-        "movq (%0), %%mm0                       \n\t" // L0
-        "movq (%0, %2), %%mm1                   \n\t" // L1
-        "movq (%0, %2, 2), %%mm2                \n\t" // L2
-        "movq (%0, %%"FF_REG_a"), %%mm3         \n\t" // L3
-        "movq (%0, %2, 4), %%mm4                \n\t" // L4
-        "movq (%0, %%"FF_REG_d"), %%mm5         \n\t" // L5
-        "movq (%0, %%"FF_REG_a", 2), %%mm6      \n\t" // L6
-        "movq (%0, %%"FF_REG_c"), %%mm7         \n\t" // L7
-        "movq %%mm0, (%1)                       \n\t" // L0
-        "movq %%mm1, (%1, %2)                   \n\t" // L1
-        "movq %%mm2, (%1, %2, 2)                \n\t" // L2
-        "movq %%mm3, (%1, %%"FF_REG_a")         \n\t" // L3
-        "movq %%mm4, (%1, %2, 4)                \n\t" // L4
-        "movq %%mm5, (%1, %%"FF_REG_d")         \n\t" // L5
-        "movq %%mm6, (%1, %%"FF_REG_a", 2)      \n\t" // L6
-        "movq %%mm7, (%1, %%"FF_REG_c")         \n\t" // L7
-        "jmp 4f                                 \n\t"
-
-        "1:                                     \n\t"
-        "lea (%%"FF_REG_a", %2, 2), %%"FF_REG_d"\n\t" // 5*stride
-        "lea (%%"FF_REG_d", %2, 2), %%"FF_REG_c"\n\t" // 7*stride
-        "movq (%0), %%mm0                       \n\t" // L0
-        PAVGB((%1), %%mm0)                            // L0
-        "movq (%0, %2), %%mm1                   \n\t" // L1
-        PAVGB((%1, %2), %%mm1)                        // L1
-        "movq (%0, %2, 2), %%mm2                \n\t" // L2
-        PAVGB((%1, %2, 2), %%mm2)                     // L2
-        "movq (%0, %%"FF_REG_a"), %%mm3         \n\t" // L3
-        PAVGB((%1, %%FF_REGa), %%mm3)                 // L3
-        "movq (%0, %2, 4), %%mm4                \n\t" // L4
-        PAVGB((%1, %2, 4), %%mm4)                     // L4
-        "movq (%0, %%"FF_REG_d"), %%mm5         \n\t" // L5
-        PAVGB((%1, %%FF_REGd), %%mm5)                 // L5
-        "movq (%0, %%"FF_REG_a", 2), %%mm6      \n\t" // L6
-        PAVGB((%1, %%FF_REGa, 2), %%mm6)              // L6
-        "movq (%0, %%"FF_REG_c"), %%mm7         \n\t" // L7
-        PAVGB((%1, %%FF_REGc), %%mm7)                 // L7
-        "movq %%mm0, (%1)                       \n\t" // R0
-        "movq %%mm1, (%1, %2)                   \n\t" // R1
-        "movq %%mm2, (%1, %2, 2)                \n\t" // R2
-        "movq %%mm3, (%1, %%"FF_REG_a")         \n\t" // R3
-        "movq %%mm4, (%1, %2, 4)                \n\t" // R4
-        "movq %%mm5, (%1, %%"FF_REG_d")         \n\t" // R5
-        "movq %%mm6, (%1, %%"FF_REG_a", 2)      \n\t" // R6
-        "movq %%mm7, (%1, %%"FF_REG_c")         \n\t" // R7
-        "movq %%mm0, (%0)                       \n\t" // L0
-        "movq %%mm1, (%0, %2)                   \n\t" // L1
-        "movq %%mm2, (%0, %2, 2)                \n\t" // L2
-        "movq %%mm3, (%0, %%"FF_REG_a")         \n\t" // L3
-        "movq %%mm4, (%0, %2, 4)                \n\t" // L4
-        "movq %%mm5, (%0, %%"FF_REG_d")         \n\t" // L5
-        "movq %%mm6, (%0, %%"FF_REG_a", 2)      \n\t" // L6
-        "movq %%mm7, (%0, %%"FF_REG_c")         \n\t" // L7
-        "jmp 4f                                 \n\t"
-
-        "2:                                     \n\t"
-        "cmpl 508(%%"FF_REG_d"), %%ecx          \n\t"
-        " jb 3f                                 \n\t"
-
-        "lea (%%"FF_REG_a", %2, 2), %%"FF_REG_d"\n\t" // 5*stride
-        "lea (%%"FF_REG_d", %2, 2), %%"FF_REG_c"\n\t" // 7*stride
-        "movq (%0), %%mm0                       \n\t" // L0
-        "movq (%0, %2), %%mm1                   \n\t" // L1
-        "movq (%0, %2, 2), %%mm2                \n\t" // L2
-        "movq (%0, %%"FF_REG_a"), %%mm3         \n\t" // L3
-        "movq (%1), %%mm4                       \n\t" // R0
-        "movq (%1, %2), %%mm5                   \n\t" // R1
-        "movq (%1, %2, 2), %%mm6                \n\t" // R2
-        "movq (%1, %%"FF_REG_a"), %%mm7         \n\t" // R3
-        PAVGB(%%mm4, %%mm0)
-        PAVGB(%%mm5, %%mm1)
-        PAVGB(%%mm6, %%mm2)
-        PAVGB(%%mm7, %%mm3)
-        PAVGB(%%mm4, %%mm0)
-        PAVGB(%%mm5, %%mm1)
-        PAVGB(%%mm6, %%mm2)
-        PAVGB(%%mm7, %%mm3)
-        "movq %%mm0, (%1)                       \n\t" // R0
-        "movq %%mm1, (%1, %2)                   \n\t" // R1
-        "movq %%mm2, (%1, %2, 2)                \n\t" // R2
-        "movq %%mm3, (%1, %%"FF_REG_a")         \n\t" // R3
-        "movq %%mm0, (%0)                       \n\t" // L0
-        "movq %%mm1, (%0, %2)                   \n\t" // L1
-        "movq %%mm2, (%0, %2, 2)                \n\t" // L2
-        "movq %%mm3, (%0, %%"FF_REG_a")         \n\t" // L3
-
-        "movq (%0, %2, 4), %%mm0                \n\t" // L4
-        "movq (%0, %%"FF_REG_d"), %%mm1         \n\t" // L5
-        "movq (%0, %%"FF_REG_a", 2), %%mm2      \n\t" // L6
-        "movq (%0, %%"FF_REG_c"), %%mm3         \n\t" // L7
-        "movq (%1, %2, 4), %%mm4                \n\t" // R4
-        "movq (%1, %%"FF_REG_d"), %%mm5         \n\t" // R5
-        "movq (%1, %%"FF_REG_a", 2), %%mm6      \n\t" // R6
-        "movq (%1, %%"FF_REG_c"), %%mm7         \n\t" // R7
-        PAVGB(%%mm4, %%mm0)
-        PAVGB(%%mm5, %%mm1)
-        PAVGB(%%mm6, %%mm2)
-        PAVGB(%%mm7, %%mm3)
-        PAVGB(%%mm4, %%mm0)
-        PAVGB(%%mm5, %%mm1)
-        PAVGB(%%mm6, %%mm2)
-        PAVGB(%%mm7, %%mm3)
-        "movq %%mm0, (%1, %2, 4)                \n\t" // R4
-        "movq %%mm1, (%1, %%"FF_REG_d")         \n\t" // R5
-        "movq %%mm2, (%1, %%"FF_REG_a", 2)      \n\t" // R6
-        "movq %%mm3, (%1, %%"FF_REG_c")         \n\t" // R7
-        "movq %%mm0, (%0, %2, 4)                \n\t" // L4
-        "movq %%mm1, (%0, %%"FF_REG_d")         \n\t" // L5
-        "movq %%mm2, (%0, %%"FF_REG_a", 2)      \n\t" // L6
-        "movq %%mm3, (%0, %%"FF_REG_c")         \n\t" // L7
-        "jmp 4f                                 \n\t"
-
-        "3:                                     \n\t"
-        "lea (%%"FF_REG_a", %2, 2), %%"FF_REG_d"\n\t" // 5*stride
-        "lea (%%"FF_REG_d", %2, 2), %%"FF_REG_c"\n\t" // 7*stride
-        "movq (%0), %%mm0                       \n\t" // L0
-        "movq (%0, %2), %%mm1                   \n\t" // L1
-        "movq (%0, %2, 2), %%mm2                \n\t" // L2
-        "movq (%0, %%"FF_REG_a"), %%mm3         \n\t" // L3
-        "movq (%1), %%mm4                       \n\t" // R0
-        "movq (%1, %2), %%mm5                   \n\t" // R1
-        "movq (%1, %2, 2), %%mm6                \n\t" // R2
-        "movq (%1, %%"FF_REG_a"), %%mm7         \n\t" // R3
-        PAVGB(%%mm4, %%mm0)
-        PAVGB(%%mm5, %%mm1)
-        PAVGB(%%mm6, %%mm2)
-        PAVGB(%%mm7, %%mm3)
-        PAVGB(%%mm4, %%mm0)
-        PAVGB(%%mm5, %%mm1)
-        PAVGB(%%mm6, %%mm2)
-        PAVGB(%%mm7, %%mm3)
-        PAVGB(%%mm4, %%mm0)
-        PAVGB(%%mm5, %%mm1)
-        PAVGB(%%mm6, %%mm2)
-        PAVGB(%%mm7, %%mm3)
-        "movq %%mm0, (%1)                       \n\t" // R0
-        "movq %%mm1, (%1, %2)                   \n\t" // R1
-        "movq %%mm2, (%1, %2, 2)                \n\t" // R2
-        "movq %%mm3, (%1, %%"FF_REG_a")         \n\t" // R3
-        "movq %%mm0, (%0)                       \n\t" // L0
-        "movq %%mm1, (%0, %2)                   \n\t" // L1
-        "movq %%mm2, (%0, %2, 2)                \n\t" // L2
-        "movq %%mm3, (%0, %%"FF_REG_a")         \n\t" // L3
-
-        "movq (%0, %2, 4), %%mm0                \n\t" // L4
-        "movq (%0, %%"FF_REG_d"), %%mm1         \n\t" // L5
-        "movq (%0, %%"FF_REG_a", 2), %%mm2      \n\t" // L6
-        "movq (%0, %%"FF_REG_c"), %%mm3         \n\t" // L7
-        "movq (%1, %2, 4), %%mm4                \n\t" // R4
-        "movq (%1, %%"FF_REG_d"), %%mm5         \n\t" // R5
-        "movq (%1, %%"FF_REG_a", 2), %%mm6      \n\t" // R6
-        "movq (%1, %%"FF_REG_c"), %%mm7         \n\t" // R7
-        PAVGB(%%mm4, %%mm0)
-        PAVGB(%%mm5, %%mm1)
-        PAVGB(%%mm6, %%mm2)
-        PAVGB(%%mm7, %%mm3)
-        PAVGB(%%mm4, %%mm0)
-        PAVGB(%%mm5, %%mm1)
-        PAVGB(%%mm6, %%mm2)
-        PAVGB(%%mm7, %%mm3)
-        PAVGB(%%mm4, %%mm0)
-        PAVGB(%%mm5, %%mm1)
-        PAVGB(%%mm6, %%mm2)
-        PAVGB(%%mm7, %%mm3)
-        "movq %%mm0, (%1, %2, 4)                \n\t" // R4
-        "movq %%mm1, (%1, %%"FF_REG_d")         \n\t" // R5
-        "movq %%mm2, (%1, %%"FF_REG_a", 2)      \n\t" // R6
-        "movq %%mm3, (%1, %%"FF_REG_c")         \n\t" // R7
-        "movq %%mm0, (%0, %2, 4)                \n\t" // L4
-        "movq %%mm1, (%0, %%"FF_REG_d")         \n\t" // L5
-        "movq %%mm2, (%0, %%"FF_REG_a", 2)      \n\t" // L6
-        "movq %%mm3, (%0, %%"FF_REG_c")         \n\t" // L7
-
-        "4:                                     \n\t"
-
-        :: "r" (src), "r" (tempBlurred), "r"((x86_reg)stride), "m" (tempBlurredPast)
-          NAMED_CONSTRAINTS_ADD(b80)
-        : "%"FF_REG_a, "%"FF_REG_d, "%"FF_REG_c, "memory"
-    );
-#else //(TEMPLATE_PP_MMXEXT || TEMPLATE_PP_3DNOW) && HAVE_6REGS
-{
-    int y;
-    int d=0;
-//    int sysd=0;
-    int i;
-
-    for(y=0; y<8; y++){
-        int x;
-        for(x=0; x<8; x++){
-            int ref= tempBlurred[ x + y*stride ];
-            int cur= src[ x + y*stride ];
-            int d1=ref - cur;
-//            if(x==0 || x==7) d1+= d1>>1;
-//            if(y==0 || y==7) d1+= d1>>1;
-//            d+= FFABS(d1);
-            d+= d1*d1;
-//            sysd+= d1;
-        }
-    }
-    i=d;
-    d=  (
-        4*d
-        +(*(tempBlurredPast-256))
-        +(*(tempBlurredPast-1))+ (*(tempBlurredPast+1))
-        +(*(tempBlurredPast+256))
-        +4)>>3;
-    *tempBlurredPast=i;
-//    ((*tempBlurredPast)*3 + d + 2)>>2;
-
-/*
-Switch between
- 1  0  0  0  0  0  0  (0)
-64 32 16  8  4  2  1  (1)
-64 48 36 27 20 15 11 (33) (approx)
-64 56 49 43 37 33 29 (200) (approx)
-*/
-    if(d > maxNoise[1]){
-        if(d < maxNoise[2]){
-            for(y=0; y<8; y++){
-                int x;
-                for(x=0; x<8; x++){
-                    int ref= tempBlurred[ x + y*stride ];
-                    int cur= src[ x + y*stride ];
-                    tempBlurred[ x + y*stride ]=
-                    src[ x + y*stride ]=
-                        (ref + cur + 1)>>1;
-                }
-            }
-        }else{
-            for(y=0; y<8; y++){
-                int x;
-                for(x=0; x<8; x++){
-                    tempBlurred[ x + y*stride ]= src[ x + y*stride ];
-                }
-            }
-        }
-    }else{
-        if(d < maxNoise[0]){
-            for(y=0; y<8; y++){
-                int x;
-                for(x=0; x<8; x++){
-                    int ref= tempBlurred[ x + y*stride ];
-                    int cur= src[ x + y*stride ];
-                    tempBlurred[ x + y*stride ]=
-                    src[ x + y*stride ]=
-                        (ref*7 + cur + 4)>>3;
-                }
-            }
-        }else{
-            for(y=0; y<8; y++){
-                int x;
-                for(x=0; x<8; x++){
-                    int ref= tempBlurred[ x + y*stride ];
-                    int cur= src[ x + y*stride ];
-                    tempBlurred[ x + y*stride ]=
-                    src[ x + y*stride ]=
-                        (ref*3 + cur + 2)>>2;
-                }
-            }
-        }
-    }
-}
-#endif //(TEMPLATE_PP_MMXEXT || TEMPLATE_PP_3DNOW) && HAVE_6REGS
-}
-#endif //TEMPLATE_PP_ALTIVEC
-
-#if TEMPLATE_PP_MMX
-/**
- * accurate deblock filter
- */
-static av_always_inline void RENAME(do_a_deblock)(uint8_t *src, int step, int stride, const PPContext *c, int mode){
-    int64_t dc_mask, eq_mask, both_masks;
-    int64_t sums[10*8*2];
-    src+= step*3; // src points to begin of the 8x8 Block
-
-    __asm__ volatile(
-        "movq %0, %%mm7                         \n\t"
-        "movq %1, %%mm6                         \n\t"
-        : : "m" (c->mmxDcOffset[c->nonBQP]),  "m" (c->mmxDcThreshold[c->nonBQP])
-        );
-
-    __asm__ volatile(
-        "lea (%2, %3), %%"FF_REG_a"             \n\t"
-//      0       1       2       3       4       5       6       7       8       9
-//      %1      eax     eax+%2  eax+2%2 %1+4%2  ecx     ecx+%2  ecx+2%2 %1+8%2  ecx+4%2
-
-        "movq (%2), %%mm0                       \n\t"
-        "movq (%%"FF_REG_a"), %%mm1             \n\t"
-        "movq %%mm1, %%mm3                      \n\t"
-        "movq %%mm1, %%mm4                      \n\t"
-        "psubb %%mm1, %%mm0                     \n\t" // mm0 = difference
-        "paddb %%mm7, %%mm0                     \n\t"
-        "pcmpgtb %%mm6, %%mm0                   \n\t"
-
-        "movq (%%"FF_REG_a",%3), %%mm2          \n\t"
-        PMAXUB(%%mm2, %%mm4)
-        PMINUB(%%mm2, %%mm3, %%mm5)
-        "psubb %%mm2, %%mm1                     \n\t"
-        "paddb %%mm7, %%mm1                     \n\t"
-        "pcmpgtb %%mm6, %%mm1                   \n\t"
-        "paddb %%mm1, %%mm0                     \n\t"
-
-        "movq (%%"FF_REG_a", %3, 2), %%mm1      \n\t"
-        PMAXUB(%%mm1, %%mm4)
-        PMINUB(%%mm1, %%mm3, %%mm5)
-        "psubb %%mm1, %%mm2                     \n\t"
-        "paddb %%mm7, %%mm2                     \n\t"
-        "pcmpgtb %%mm6, %%mm2                   \n\t"
-        "paddb %%mm2, %%mm0                     \n\t"
-
-        "lea (%%"FF_REG_a", %3, 4), %%"FF_REG_a"\n\t"
-
-        "movq (%2, %3, 4), %%mm2                \n\t"
-        PMAXUB(%%mm2, %%mm4)
-        PMINUB(%%mm2, %%mm3, %%mm5)
-        "psubb %%mm2, %%mm1                     \n\t"
-        "paddb %%mm7, %%mm1                     \n\t"
-        "pcmpgtb %%mm6, %%mm1                   \n\t"
-        "paddb %%mm1, %%mm0                     \n\t"
-
-        "movq (%%"FF_REG_a"), %%mm1             \n\t"
-        PMAXUB(%%mm1, %%mm4)
-        PMINUB(%%mm1, %%mm3, %%mm5)
-        "psubb %%mm1, %%mm2                     \n\t"
-        "paddb %%mm7, %%mm2                     \n\t"
-        "pcmpgtb %%mm6, %%mm2                   \n\t"
-        "paddb %%mm2, %%mm0                     \n\t"
-
-        "movq (%%"FF_REG_a", %3), %%mm2         \n\t"
-        PMAXUB(%%mm2, %%mm4)
-        PMINUB(%%mm2, %%mm3, %%mm5)
-        "psubb %%mm2, %%mm1                     \n\t"
-        "paddb %%mm7, %%mm1                     \n\t"
-        "pcmpgtb %%mm6, %%mm1                   \n\t"
-        "paddb %%mm1, %%mm0                     \n\t"
-
-        "movq (%%"FF_REG_a", %3, 2), %%mm1      \n\t"
-        PMAXUB(%%mm1, %%mm4)
-        PMINUB(%%mm1, %%mm3, %%mm5)
-        "psubb %%mm1, %%mm2                     \n\t"
-        "paddb %%mm7, %%mm2                     \n\t"
-        "pcmpgtb %%mm6, %%mm2                   \n\t"
-        "paddb %%mm2, %%mm0                     \n\t"
-
-        "movq (%2, %3, 8), %%mm2                \n\t"
-        PMAXUB(%%mm2, %%mm4)
-        PMINUB(%%mm2, %%mm3, %%mm5)
-        "psubb %%mm2, %%mm1                     \n\t"
-        "paddb %%mm7, %%mm1                     \n\t"
-        "pcmpgtb %%mm6, %%mm1                   \n\t"
-        "paddb %%mm1, %%mm0                     \n\t"
-
-        "movq (%%"FF_REG_a", %3, 4), %%mm1      \n\t"
-        "psubb %%mm1, %%mm2                     \n\t"
-        "paddb %%mm7, %%mm2                     \n\t"
-        "pcmpgtb %%mm6, %%mm2                   \n\t"
-        "paddb %%mm2, %%mm0                     \n\t"
-        "psubusb %%mm3, %%mm4                   \n\t"
-
-        "pxor %%mm6, %%mm6                      \n\t"
-        "movq %4, %%mm7                         \n\t" // QP,..., QP
-        "paddusb %%mm7, %%mm7                   \n\t" // 2QP ... 2QP
-        "psubusb %%mm4, %%mm7                   \n\t" // Diff >=2QP -> 0
-        "pcmpeqb %%mm6, %%mm7                   \n\t" // Diff < 2QP -> 0
-        "pcmpeqb %%mm6, %%mm7                   \n\t" // Diff < 2QP -> 0
-        "movq %%mm7, %1                         \n\t"
-
-        "movq %5, %%mm7                         \n\t"
-        "punpcklbw %%mm7, %%mm7                 \n\t"
-        "punpcklbw %%mm7, %%mm7                 \n\t"
-        "punpcklbw %%mm7, %%mm7                 \n\t"
-        "psubb %%mm0, %%mm6                     \n\t"
-        "pcmpgtb %%mm7, %%mm6                   \n\t"
-        "movq %%mm6, %0                         \n\t"
-
-        : "=m" (eq_mask), "=m" (dc_mask)
-        : "r" (src), "r" ((x86_reg)step), "m" (c->pQPb), "m"(c->ppMode.flatnessThreshold)
-        : "%"FF_REG_a
-    );
-
-    both_masks = dc_mask & eq_mask;
-
-    if(both_masks){
-        x86_reg offset= -8*step;
-        int64_t *temp_sums= sums;
-
-        __asm__ volatile(
-            "movq %2, %%mm0                         \n\t"  // QP,..., QP
-            "pxor %%mm4, %%mm4                      \n\t"
-
-            "movq (%0), %%mm6                       \n\t"
-            "movq (%0, %1), %%mm5                   \n\t"
-            "movq %%mm5, %%mm1                      \n\t"
-            "movq %%mm6, %%mm2                      \n\t"
-            "psubusb %%mm6, %%mm5                   \n\t"
-            "psubusb %%mm1, %%mm2                   \n\t"
-            "por %%mm5, %%mm2                       \n\t" // ABS Diff of lines
-            "psubusb %%mm2, %%mm0                   \n\t" // diff >= QP -> 0
-            "pcmpeqb %%mm4, %%mm0                   \n\t" // diff >= QP -> FF
-
-            "pxor %%mm6, %%mm1                      \n\t"
-            "pand %%mm0, %%mm1                      \n\t"
-            "pxor %%mm1, %%mm6                      \n\t"
-            // 0:QP  6:First
-
-            "movq (%0, %1, 8), %%mm5                \n\t"
-            "add %1, %0                             \n\t" // %0 points to line 1 not 0
-            "movq (%0, %1, 8), %%mm7                \n\t"
-            "movq %%mm5, %%mm1                      \n\t"
-            "movq %%mm7, %%mm2                      \n\t"
-            "psubusb %%mm7, %%mm5                   \n\t"
-            "psubusb %%mm1, %%mm2                   \n\t"
-            "por %%mm5, %%mm2                       \n\t" // ABS Diff of lines
-            "movq %2, %%mm0                         \n\t"  // QP,..., QP
-            "psubusb %%mm2, %%mm0                   \n\t" // diff >= QP -> 0
-            "pcmpeqb %%mm4, %%mm0                   \n\t" // diff >= QP -> FF
-
-            "pxor %%mm7, %%mm1                      \n\t"
-            "pand %%mm0, %%mm1                      \n\t"
-            "pxor %%mm1, %%mm7                      \n\t"
-
-            "movq %%mm6, %%mm5                      \n\t"
-            "punpckhbw %%mm4, %%mm6                 \n\t"
-            "punpcklbw %%mm4, %%mm5                 \n\t"
-            // 4:0 5/6:First 7:Last
-
-            "movq %%mm5, %%mm0                      \n\t"
-            "movq %%mm6, %%mm1                      \n\t"
-            "psllw $2, %%mm0                        \n\t"
-            "psllw $2, %%mm1                        \n\t"
-            "paddw "MANGLE(w04)", %%mm0             \n\t"
-            "paddw "MANGLE(w04)", %%mm1             \n\t"
-
-#define NEXT\
-            "movq (%0), %%mm2                       \n\t"\
-            "movq (%0), %%mm3                       \n\t"\
-            "add %1, %0                             \n\t"\
-            "punpcklbw %%mm4, %%mm2                 \n\t"\
-            "punpckhbw %%mm4, %%mm3                 \n\t"\
-            "paddw %%mm2, %%mm0                     \n\t"\
-            "paddw %%mm3, %%mm1                     \n\t"
-
-#define PREV\
-            "movq (%0), %%mm2                       \n\t"\
-            "movq (%0), %%mm3                       \n\t"\
-            "add %1, %0                             \n\t"\
-            "punpcklbw %%mm4, %%mm2                 \n\t"\
-            "punpckhbw %%mm4, %%mm3                 \n\t"\
-            "psubw %%mm2, %%mm0                     \n\t"\
-            "psubw %%mm3, %%mm1                     \n\t"
-
-
-            NEXT //0
-            NEXT //1
-            NEXT //2
-            "movq %%mm0, (%3)                       \n\t"
-            "movq %%mm1, 8(%3)                      \n\t"
-
-            NEXT //3
-            "psubw %%mm5, %%mm0                     \n\t"
-            "psubw %%mm6, %%mm1                     \n\t"
-            "movq %%mm0, 16(%3)                     \n\t"
-            "movq %%mm1, 24(%3)                     \n\t"
-
-            NEXT //4
-            "psubw %%mm5, %%mm0                     \n\t"
-            "psubw %%mm6, %%mm1                     \n\t"
-            "movq %%mm0, 32(%3)                     \n\t"
-            "movq %%mm1, 40(%3)                     \n\t"
-
-            NEXT //5
-            "psubw %%mm5, %%mm0                     \n\t"
-            "psubw %%mm6, %%mm1                     \n\t"
-            "movq %%mm0, 48(%3)                     \n\t"
-            "movq %%mm1, 56(%3)                     \n\t"
-
-            NEXT //6
-            "psubw %%mm5, %%mm0                     \n\t"
-            "psubw %%mm6, %%mm1                     \n\t"
-            "movq %%mm0, 64(%3)                     \n\t"
-            "movq %%mm1, 72(%3)                     \n\t"
-
-            "movq %%mm7, %%mm6                      \n\t"
-            "punpckhbw %%mm4, %%mm7                 \n\t"
-            "punpcklbw %%mm4, %%mm6                 \n\t"
-
-            NEXT //7
-            "mov %4, %0                             \n\t"
-            "add %1, %0                             \n\t"
-            PREV //0
-            "movq %%mm0, 80(%3)                     \n\t"
-            "movq %%mm1, 88(%3)                     \n\t"
-
-            PREV //1
-            "paddw %%mm6, %%mm0                     \n\t"
-            "paddw %%mm7, %%mm1                     \n\t"
-            "movq %%mm0, 96(%3)                     \n\t"
-            "movq %%mm1, 104(%3)                    \n\t"
-
-            PREV //2
-            "paddw %%mm6, %%mm0                     \n\t"
-            "paddw %%mm7, %%mm1                     \n\t"
-            "movq %%mm0, 112(%3)                    \n\t"
-            "movq %%mm1, 120(%3)                    \n\t"
-
-            PREV //3
-            "paddw %%mm6, %%mm0                     \n\t"
-            "paddw %%mm7, %%mm1                     \n\t"
-            "movq %%mm0, 128(%3)                    \n\t"
-            "movq %%mm1, 136(%3)                    \n\t"
-
-            PREV //4
-            "paddw %%mm6, %%mm0                     \n\t"
-            "paddw %%mm7, %%mm1                     \n\t"
-            "movq %%mm0, 144(%3)                    \n\t"
-            "movq %%mm1, 152(%3)                    \n\t"
-
-            "mov %4, %0                             \n\t" //FIXME
-
-            : "+&r"(src)
-            : "r" ((x86_reg)step), "m" (c->pQPb), "r"(sums), "g"(src)
-              NAMED_CONSTRAINTS_ADD(w04)
-        );
-
-        src+= step; // src points to begin of the 8x8 Block
-
-        __asm__ volatile(
-            "movq %4, %%mm6                         \n\t"
-            "pcmpeqb %%mm5, %%mm5                   \n\t"
-            "pxor %%mm6, %%mm5                      \n\t"
-            "pxor %%mm7, %%mm7                      \n\t"
-
-            "1:                                     \n\t"
-            "movq (%1), %%mm0                       \n\t"
-            "movq 8(%1), %%mm1                      \n\t"
-            "paddw 32(%1), %%mm0                    \n\t"
-            "paddw 40(%1), %%mm1                    \n\t"
-            "movq (%0, %3), %%mm2                   \n\t"
-            "movq %%mm2, %%mm3                      \n\t"
-            "movq %%mm2, %%mm4                      \n\t"
-            "punpcklbw %%mm7, %%mm2                 \n\t"
-            "punpckhbw %%mm7, %%mm3                 \n\t"
-            "paddw %%mm2, %%mm0                     \n\t"
-            "paddw %%mm3, %%mm1                     \n\t"
-            "paddw %%mm2, %%mm0                     \n\t"
-            "paddw %%mm3, %%mm1                     \n\t"
-            "psrlw $4, %%mm0                        \n\t"
-            "psrlw $4, %%mm1                        \n\t"
-            "packuswb %%mm1, %%mm0                  \n\t"
-            "pand %%mm6, %%mm0                      \n\t"
-            "pand %%mm5, %%mm4                      \n\t"
-            "por %%mm4, %%mm0                       \n\t"
-            "movq %%mm0, (%0, %3)                   \n\t"
-            "add $16, %1                            \n\t"
-            "add %2, %0                             \n\t"
-            " js 1b                                 \n\t"
-
-            : "+r"(offset), "+r"(temp_sums)
-            : "r" ((x86_reg)step), "r"(src - offset), "m"(both_masks)
-        );
-    }else
-        src+= step; // src points to begin of the 8x8 Block
-
-    if(eq_mask != -1LL){
-        uint8_t *temp_src= src;
-        DECLARE_ALIGNED(8, uint64_t, tmp)[4]; // make space for 4 8-byte vars
-        __asm__ volatile(
-            "pxor %%mm7, %%mm7                      \n\t"
-//      0       1       2       3       4       5       6       7       8       9
-//      %0      eax     eax+%1  eax+2%1 %0+4%1  ecx     ecx+%1  ecx+2%1 %1+8%1  ecx+4%1
-
-            "movq (%0), %%mm0                       \n\t"
-            "movq %%mm0, %%mm1                      \n\t"
-            "punpcklbw %%mm7, %%mm0                 \n\t" // low part of line 0
-            "punpckhbw %%mm7, %%mm1                 \n\t" // high part of line 0
-
-            "movq (%0, %1), %%mm2                   \n\t"
-            "lea (%0, %1, 2), %%"FF_REG_a"          \n\t"
-            "movq %%mm2, %%mm3                      \n\t"
-            "punpcklbw %%mm7, %%mm2                 \n\t" // low part of line 1
-            "punpckhbw %%mm7, %%mm3                 \n\t" // high part of line 1
-
-            "movq (%%"FF_REG_a"), %%mm4             \n\t"
-            "movq %%mm4, %%mm5                      \n\t"
-            "punpcklbw %%mm7, %%mm4                 \n\t" // low part of line 2
-            "punpckhbw %%mm7, %%mm5                 \n\t" // high part of line 2
-
-            "paddw %%mm0, %%mm0                     \n\t" // 2L0
-            "paddw %%mm1, %%mm1                     \n\t" // 2H0
-            "psubw %%mm4, %%mm2                     \n\t" // L1 - L2
-            "psubw %%mm5, %%mm3                     \n\t" // H1 - H2
-            "psubw %%mm2, %%mm0                     \n\t" // 2L0 - L1 + L2
-            "psubw %%mm3, %%mm1                     \n\t" // 2H0 - H1 + H2
-
-            "psllw $2, %%mm2                        \n\t" // 4L1 - 4L2
-            "psllw $2, %%mm3                        \n\t" // 4H1 - 4H2
-            "psubw %%mm2, %%mm0                     \n\t" // 2L0 - 5L1 + 5L2
-            "psubw %%mm3, %%mm1                     \n\t" // 2H0 - 5H1 + 5H2
-
-            "movq (%%"FF_REG_a", %1), %%mm2         \n\t"
-            "movq %%mm2, %%mm3                      \n\t"
-            "punpcklbw %%mm7, %%mm2                 \n\t" // L3
-            "punpckhbw %%mm7, %%mm3                 \n\t" // H3
-
-            "psubw %%mm2, %%mm0                     \n\t" // 2L0 - 5L1 + 5L2 - L3
-            "psubw %%mm3, %%mm1                     \n\t" // 2H0 - 5H1 + 5H2 - H3
-            "psubw %%mm2, %%mm0                     \n\t" // 2L0 - 5L1 + 5L2 - 2L3
-            "psubw %%mm3, %%mm1                     \n\t" // 2H0 - 5H1 + 5H2 - 2H3
-            "movq %%mm0, (%4)                       \n\t" // 2L0 - 5L1 + 5L2 - 2L3
-            "movq %%mm1, 8(%4)                      \n\t" // 2H0 - 5H1 + 5H2 - 2H3
-
-            "movq (%%"FF_REG_a", %1, 2), %%mm0      \n\t"
-            "movq %%mm0, %%mm1                      \n\t"
-            "punpcklbw %%mm7, %%mm0                 \n\t" // L4
-            "punpckhbw %%mm7, %%mm1                 \n\t" // H4
-
-            "psubw %%mm0, %%mm2                     \n\t" // L3 - L4
-            "psubw %%mm1, %%mm3                     \n\t" // H3 - H4
-            "movq %%mm2, 16(%4)                     \n\t" // L3 - L4
-            "movq %%mm3, 24(%4)                     \n\t" // H3 - H4
-            "paddw %%mm4, %%mm4                     \n\t" // 2L2
-            "paddw %%mm5, %%mm5                     \n\t" // 2H2
-            "psubw %%mm2, %%mm4                     \n\t" // 2L2 - L3 + L4
-            "psubw %%mm3, %%mm5                     \n\t" // 2H2 - H3 + H4
-
-            "lea (%%"FF_REG_a", %1), %0             \n\t"
-            "psllw $2, %%mm2                        \n\t" // 4L3 - 4L4
-            "psllw $2, %%mm3                        \n\t" // 4H3 - 4H4
-            "psubw %%mm2, %%mm4                     \n\t" // 2L2 - 5L3 + 5L4
-            "psubw %%mm3, %%mm5                     \n\t" // 2H2 - 5H3 + 5H4
-//50 opcodes so far
-            "movq (%0, %1, 2), %%mm2                \n\t"
-            "movq %%mm2, %%mm3                      \n\t"
-            "punpcklbw %%mm7, %%mm2                 \n\t" // L5
-            "punpckhbw %%mm7, %%mm3                 \n\t" // H5
-            "psubw %%mm2, %%mm4                     \n\t" // 2L2 - 5L3 + 5L4 - L5
-            "psubw %%mm3, %%mm5                     \n\t" // 2H2 - 5H3 + 5H4 - H5
-            "psubw %%mm2, %%mm4                     \n\t" // 2L2 - 5L3 + 5L4 - 2L5
-            "psubw %%mm3, %%mm5                     \n\t" // 2H2 - 5H3 + 5H4 - 2H5
-
-            "movq (%%"FF_REG_a", %1, 4), %%mm6      \n\t"
-            "punpcklbw %%mm7, %%mm6                 \n\t" // L6
-            "psubw %%mm6, %%mm2                     \n\t" // L5 - L6
-            "movq (%%"FF_REG_a", %1, 4), %%mm6      \n\t"
-            "punpckhbw %%mm7, %%mm6                 \n\t" // H6
-            "psubw %%mm6, %%mm3                     \n\t" // H5 - H6
-
-            "paddw %%mm0, %%mm0                     \n\t" // 2L4
-            "paddw %%mm1, %%mm1                     \n\t" // 2H4
-            "psubw %%mm2, %%mm0                     \n\t" // 2L4 - L5 + L6
-            "psubw %%mm3, %%mm1                     \n\t" // 2H4 - H5 + H6
-
-            "psllw $2, %%mm2                        \n\t" // 4L5 - 4L6
-            "psllw $2, %%mm3                        \n\t" // 4H5 - 4H6
-            "psubw %%mm2, %%mm0                     \n\t" // 2L4 - 5L5 + 5L6
-            "psubw %%mm3, %%mm1                     \n\t" // 2H4 - 5H5 + 5H6
-
-            "movq (%0, %1, 4), %%mm2                \n\t"
-            "movq %%mm2, %%mm3                      \n\t"
-            "punpcklbw %%mm7, %%mm2                 \n\t" // L7
-            "punpckhbw %%mm7, %%mm3                 \n\t" // H7
-
-            "paddw %%mm2, %%mm2                     \n\t" // 2L7
-            "paddw %%mm3, %%mm3                     \n\t" // 2H7
-            "psubw %%mm2, %%mm0                     \n\t" // 2L4 - 5L5 + 5L6 - 2L7
-            "psubw %%mm3, %%mm1                     \n\t" // 2H4 - 5H5 + 5H6 - 2H7
-
-            "movq (%4), %%mm2                       \n\t" // 2L0 - 5L1 + 5L2 - 2L3
-            "movq 8(%4), %%mm3                      \n\t" // 2H0 - 5H1 + 5H2 - 2H3
-
-#if TEMPLATE_PP_MMXEXT
-            "movq %%mm7, %%mm6                      \n\t" // 0
-            "psubw %%mm0, %%mm6                     \n\t"
-            "pmaxsw %%mm6, %%mm0                    \n\t" // |2L4 - 5L5 + 5L6 - 2L7|
-            "movq %%mm7, %%mm6                      \n\t" // 0
-            "psubw %%mm1, %%mm6                     \n\t"
-            "pmaxsw %%mm6, %%mm1                    \n\t" // |2H4 - 5H5 + 5H6 - 2H7|
-            "movq %%mm7, %%mm6                      \n\t" // 0
-            "psubw %%mm2, %%mm6                     \n\t"
-            "pmaxsw %%mm6, %%mm2                    \n\t" // |2L0 - 5L1 + 5L2 - 2L3|
-            "movq %%mm7, %%mm6                      \n\t" // 0
-            "psubw %%mm3, %%mm6                     \n\t"
-            "pmaxsw %%mm6, %%mm3                    \n\t" // |2H0 - 5H1 + 5H2 - 2H3|
-#else
-            "movq %%mm7, %%mm6                      \n\t" // 0
-            "pcmpgtw %%mm0, %%mm6                   \n\t"
-            "pxor %%mm6, %%mm0                      \n\t"
-            "psubw %%mm6, %%mm0                     \n\t" // |2L4 - 5L5 + 5L6 - 2L7|
-            "movq %%mm7, %%mm6                      \n\t" // 0
-            "pcmpgtw %%mm1, %%mm6                   \n\t"
-            "pxor %%mm6, %%mm1                      \n\t"
-            "psubw %%mm6, %%mm1                     \n\t" // |2H4 - 5H5 + 5H6 - 2H7|
-            "movq %%mm7, %%mm6                      \n\t" // 0
-            "pcmpgtw %%mm2, %%mm6                   \n\t"
-            "pxor %%mm6, %%mm2                      \n\t"
-            "psubw %%mm6, %%mm2                     \n\t" // |2L0 - 5L1 + 5L2 - 2L3|
-            "movq %%mm7, %%mm6                      \n\t" // 0
-            "pcmpgtw %%mm3, %%mm6                   \n\t"
-            "pxor %%mm6, %%mm3                      \n\t"
-            "psubw %%mm6, %%mm3                     \n\t" // |2H0 - 5H1 + 5H2 - 2H3|
-#endif
-
-#if TEMPLATE_PP_MMXEXT
-            "pminsw %%mm2, %%mm0                    \n\t"
-            "pminsw %%mm3, %%mm1                    \n\t"
-#else
-            "movq %%mm0, %%mm6                      \n\t"
-            "psubusw %%mm2, %%mm6                   \n\t"
-            "psubw %%mm6, %%mm0                     \n\t"
-            "movq %%mm1, %%mm6                      \n\t"
-            "psubusw %%mm3, %%mm6                   \n\t"
-            "psubw %%mm6, %%mm1                     \n\t"
-#endif
-
-            "movd %2, %%mm2                         \n\t" // QP
-            "punpcklbw %%mm7, %%mm2                 \n\t"
-
-            "movq %%mm7, %%mm6                      \n\t" // 0
-            "pcmpgtw %%mm4, %%mm6                   \n\t" // sign(2L2 - 5L3 + 5L4 - 2L5)
-            "pxor %%mm6, %%mm4                      \n\t"
-            "psubw %%mm6, %%mm4                     \n\t" // |2L2 - 5L3 + 5L4 - 2L5|
-            "pcmpgtw %%mm5, %%mm7                   \n\t" // sign(2H2 - 5H3 + 5H4 - 2H5)
-            "pxor %%mm7, %%mm5                      \n\t"
-            "psubw %%mm7, %%mm5                     \n\t" // |2H2 - 5H3 + 5H4 - 2H5|
-// 100 opcodes
-            "psllw $3, %%mm2                        \n\t" // 8QP
-            "movq %%mm2, %%mm3                      \n\t" // 8QP
-            "pcmpgtw %%mm4, %%mm2                   \n\t"
-            "pcmpgtw %%mm5, %%mm3                   \n\t"
-            "pand %%mm2, %%mm4                      \n\t"
-            "pand %%mm3, %%mm5                      \n\t"
-
-
-            "psubusw %%mm0, %%mm4                   \n\t" // hd
-            "psubusw %%mm1, %%mm5                   \n\t" // ld
-
-
-            "movq "MANGLE(w05)", %%mm2              \n\t" // 5
-            "pmullw %%mm2, %%mm4                    \n\t"
-            "pmullw %%mm2, %%mm5                    \n\t"
-            "movq "MANGLE(w20)", %%mm2              \n\t" // 32
-            "paddw %%mm2, %%mm4                     \n\t"
-            "paddw %%mm2, %%mm5                     \n\t"
-            "psrlw $6, %%mm4                        \n\t"
-            "psrlw $6, %%mm5                        \n\t"
-
-            "movq 16(%4), %%mm0                     \n\t" // L3 - L4
-            "movq 24(%4), %%mm1                     \n\t" // H3 - H4
-
-            "pxor %%mm2, %%mm2                      \n\t"
-            "pxor %%mm3, %%mm3                      \n\t"
-
-            "pcmpgtw %%mm0, %%mm2                   \n\t" // sign (L3-L4)
-            "pcmpgtw %%mm1, %%mm3                   \n\t" // sign (H3-H4)
-            "pxor %%mm2, %%mm0                      \n\t"
-            "pxor %%mm3, %%mm1                      \n\t"
-            "psubw %%mm2, %%mm0                     \n\t" // |L3-L4|
-            "psubw %%mm3, %%mm1                     \n\t" // |H3-H4|
-            "psrlw $1, %%mm0                        \n\t" // |L3 - L4|/2
-            "psrlw $1, %%mm1                        \n\t" // |H3 - H4|/2
-
-            "pxor %%mm6, %%mm2                      \n\t"
-            "pxor %%mm7, %%mm3                      \n\t"
-            "pand %%mm2, %%mm4                      \n\t"
-            "pand %%mm3, %%mm5                      \n\t"
-
-#if TEMPLATE_PP_MMXEXT
-            "pminsw %%mm0, %%mm4                    \n\t"
-            "pminsw %%mm1, %%mm5                    \n\t"
-#else
-            "movq %%mm4, %%mm2                      \n\t"
-            "psubusw %%mm0, %%mm2                   \n\t"
-            "psubw %%mm2, %%mm4                     \n\t"
-            "movq %%mm5, %%mm2                      \n\t"
-            "psubusw %%mm1, %%mm2                   \n\t"
-            "psubw %%mm2, %%mm5                     \n\t"
-#endif
-            "pxor %%mm6, %%mm4                      \n\t"
-            "pxor %%mm7, %%mm5                      \n\t"
-            "psubw %%mm6, %%mm4                     \n\t"
-            "psubw %%mm7, %%mm5                     \n\t"
-            "packsswb %%mm5, %%mm4                  \n\t"
-            "movq %3, %%mm1                         \n\t"
-            "pandn %%mm4, %%mm1                     \n\t"
-            "movq (%0), %%mm0                       \n\t"
-            "paddb   %%mm1, %%mm0                   \n\t"
-            "movq %%mm0, (%0)                       \n\t"
-            "movq (%0, %1), %%mm0                   \n\t"
-            "psubb %%mm1, %%mm0                     \n\t"
-            "movq %%mm0, (%0, %1)                   \n\t"
-
-            : "+r" (temp_src)
-            : "r" ((x86_reg)step), "m" (c->pQPb), "m"(eq_mask), "r"(tmp)
-              NAMED_CONSTRAINTS_ADD(w05,w20)
-            : "%"FF_REG_a
-        );
-    }
-}
-#endif //TEMPLATE_PP_MMX
-
-static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[], int dstStride, int width, int height,
-                                const int8_t QPs[], int QPStride, int isColor, PPContext *c);
-
-/**
- * Copy a block from src to dst and fixes the blacklevel.
- * levelFix == 0 -> do not touch the brightness & contrast
- */
-#undef REAL_SCALED_CPY
-#undef SCALED_CPY
-
-static inline void RENAME(blockCopy)(uint8_t dst[], int dstStride, const uint8_t src[], int srcStride,
-                                     int levelFix, int64_t *packedOffsetAndScale)
-{
-#if !TEMPLATE_PP_MMX || !HAVE_6REGS
-    int i;
-#endif
-    if(levelFix){
-#if TEMPLATE_PP_MMX && HAVE_6REGS
-    __asm__ volatile(
-        "movq (%%"FF_REG_a"), %%mm2     \n\t" // packedYOffset
-        "movq 8(%%"FF_REG_a"), %%mm3    \n\t" // packedYScale
-        "lea (%2,%4), %%"FF_REG_a"      \n\t"
-        "lea (%3,%5), %%"FF_REG_d"      \n\t"
-        "pxor %%mm4, %%mm4              \n\t"
-#if TEMPLATE_PP_MMXEXT
-#define REAL_SCALED_CPY(src1, src2, dst1, dst2)                                                \
-        "movq " #src1 ", %%mm0          \n\t"\
-        "movq " #src1 ", %%mm5          \n\t"\
-        "movq " #src2 ", %%mm1          \n\t"\
-        "movq " #src2 ", %%mm6          \n\t"\
-        "punpcklbw %%mm0, %%mm0         \n\t"\
-        "punpckhbw %%mm5, %%mm5         \n\t"\
-        "punpcklbw %%mm1, %%mm1         \n\t"\
-        "punpckhbw %%mm6, %%mm6         \n\t"\
-        "pmulhuw %%mm3, %%mm0           \n\t"\
-        "pmulhuw %%mm3, %%mm5           \n\t"\
-        "pmulhuw %%mm3, %%mm1           \n\t"\
-        "pmulhuw %%mm3, %%mm6           \n\t"\
-        "psubw %%mm2, %%mm0             \n\t"\
-        "psubw %%mm2, %%mm5             \n\t"\
-        "psubw %%mm2, %%mm1             \n\t"\
-        "psubw %%mm2, %%mm6             \n\t"\
-        "packuswb %%mm5, %%mm0          \n\t"\
-        "packuswb %%mm6, %%mm1          \n\t"\
-        "movq %%mm0, " #dst1 "          \n\t"\
-        "movq %%mm1, " #dst2 "          \n\t"\
-
-#else //TEMPLATE_PP_MMXEXT
-#define REAL_SCALED_CPY(src1, src2, dst1, dst2)                                        \
-        "movq " #src1 ", %%mm0          \n\t"\
-        "movq " #src1 ", %%mm5          \n\t"\
-        "punpcklbw %%mm4, %%mm0         \n\t"\
-        "punpckhbw %%mm4, %%mm5         \n\t"\
-        "psubw %%mm2, %%mm0             \n\t"\
-        "psubw %%mm2, %%mm5             \n\t"\
-        "movq " #src2 ", %%mm1          \n\t"\
-        "psllw $6, %%mm0                \n\t"\
-        "psllw $6, %%mm5                \n\t"\
-        "pmulhw %%mm3, %%mm0            \n\t"\
-        "movq " #src2 ", %%mm6          \n\t"\
-        "pmulhw %%mm3, %%mm5            \n\t"\
-        "punpcklbw %%mm4, %%mm1         \n\t"\
-        "punpckhbw %%mm4, %%mm6         \n\t"\
-        "psubw %%mm2, %%mm1             \n\t"\
-        "psubw %%mm2, %%mm6             \n\t"\
-        "psllw $6, %%mm1                \n\t"\
-        "psllw $6, %%mm6                \n\t"\
-        "pmulhw %%mm3, %%mm1            \n\t"\
-        "pmulhw %%mm3, %%mm6            \n\t"\
-        "packuswb %%mm5, %%mm0          \n\t"\
-        "packuswb %%mm6, %%mm1          \n\t"\
-        "movq %%mm0, " #dst1 "          \n\t"\
-        "movq %%mm1, " #dst2 "          \n\t"\
-
-#endif //TEMPLATE_PP_MMXEXT
-#define SCALED_CPY(src1, src2, dst1, dst2)\
-   REAL_SCALED_CPY(src1, src2, dst1, dst2)
-
-SCALED_CPY((%2)       , (%2, %4)      , (%3)       , (%3, %5))
-SCALED_CPY((%2, %4, 2), (%%FF_REGa, %4, 2), (%3, %5, 2), (%%FF_REGd, %5, 2))
-SCALED_CPY((%2, %4, 4), (%%FF_REGa, %4, 4), (%3, %5, 4), (%%FF_REGd, %5, 4))
-        "lea (%%"FF_REG_a",%4,4), %%"FF_REG_a"        \n\t"
-        "lea (%%"FF_REG_d",%5,4), %%"FF_REG_d"        \n\t"
-SCALED_CPY((%%FF_REGa, %4), (%%FF_REGa, %4, 2), (%%FF_REGd, %5), (%%FF_REGd, %5, 2))
-
-
-        : "=&a" (packedOffsetAndScale)
-        : "0" (packedOffsetAndScale),
-        "r"(src),
-        "r"(dst),
-        "r" ((x86_reg)srcStride),
-        "r" ((x86_reg)dstStride)
-        : "%"FF_REG_d
-    );
-#else //TEMPLATE_PP_MMX && HAVE_6REGS
-    for(i=0; i<8; i++)
-        memcpy( &(dst[dstStride*i]),
-                &(src[srcStride*i]), BLOCK_SIZE);
-#endif //TEMPLATE_PP_MMX && HAVE_6REGS
-    }else{
-#if TEMPLATE_PP_MMX && HAVE_6REGS
-    __asm__ volatile(
-        "lea (%0,%2), %%"FF_REG_a"      \n\t"
-        "lea (%1,%3), %%"FF_REG_d"      \n\t"
-
-#define REAL_SIMPLE_CPY(src1, src2, dst1, dst2)                              \
-        "movq " #src1 ", %%mm0          \n\t"\
-        "movq " #src2 ", %%mm1          \n\t"\
-        "movq %%mm0, " #dst1 "          \n\t"\
-        "movq %%mm1, " #dst2 "          \n\t"\
-
-#define SIMPLE_CPY(src1, src2, dst1, dst2)\
-   REAL_SIMPLE_CPY(src1, src2, dst1, dst2)
-
-SIMPLE_CPY((%0)       , (%0, %2)          , (%1)       , (%1, %3))
-SIMPLE_CPY((%0, %2, 2), (%%FF_REGa, %2, 2), (%1, %3, 2), (%%FF_REGd, %3, 2))
-SIMPLE_CPY((%0, %2, 4), (%%FF_REGa, %2, 4), (%1, %3, 4), (%%FF_REGd, %3, 4))
-        "lea (%%"FF_REG_a",%2,4), %%"FF_REG_a"        \n\t"
-        "lea (%%"FF_REG_d",%3,4), %%"FF_REG_d"        \n\t"
-SIMPLE_CPY((%%FF_REGa, %2), (%%FF_REGa, %2, 2), (%%FF_REGd, %3), (%%FF_REGd, %3, 2))
-
-        : : "r" (src),
-        "r" (dst),
-        "r" ((x86_reg)srcStride),
-        "r" ((x86_reg)dstStride)
-        : "%"FF_REG_a, "%"FF_REG_d
-    );
-#else //TEMPLATE_PP_MMX && HAVE_6REGS
-    for(i=0; i<8; i++)
-        memcpy( &(dst[dstStride*i]),
-                &(src[srcStride*i]), BLOCK_SIZE);
-#endif //TEMPLATE_PP_MMX && HAVE_6REGS
-    }
-}
-
-/**
- * Duplicate the given 8 src pixels ? times upward
- */
-static inline void RENAME(duplicate)(uint8_t src[], int stride)
-{
-#if TEMPLATE_PP_MMX
-    __asm__ volatile(
-        "movq (%0), %%mm0               \n\t"
-        "movq %%mm0, (%0, %1, 4)        \n\t"
-        "add %1, %0                     \n\t"
-        "movq %%mm0, (%0)               \n\t"
-        "movq %%mm0, (%0, %1)           \n\t"
-        "movq %%mm0, (%0, %1, 2)        \n\t"
-        "movq %%mm0, (%0, %1, 4)        \n\t"
-        : "+r" (src)
-        : "r" ((x86_reg)-stride)
-    );
-#else
-    int i;
-    uint8_t *p=src;
-    for(i=0; i<5; i++){
-        p-= stride;
-        memcpy(p, src, 8);
-    }
-#endif
-}
-
-#if ARCH_X86 && TEMPLATE_PP_MMXEXT
-static inline void RENAME(prefetchnta)(const void *p)
-{
-    __asm__ volatile(   "prefetchnta (%0)\n\t"
-        : : "r" (p)
-    );
-}
-
-static inline void RENAME(prefetcht0)(const void *p)
-{
-    __asm__ volatile(   "prefetcht0 (%0)\n\t"
-        : : "r" (p)
-    );
-}
-
-static inline void RENAME(prefetcht1)(const void *p)
-{
-    __asm__ volatile(   "prefetcht1 (%0)\n\t"
-        : : "r" (p)
-    );
-}
-
-static inline void RENAME(prefetcht2)(const void *p)
-{
-    __asm__ volatile(   "prefetcht2 (%0)\n\t"
-        : : "r" (p)
-    );
-}
-#elif !ARCH_X86 && AV_GCC_VERSION_AT_LEAST(3,2)
-static inline void RENAME(prefetchnta)(const void *p)
-{
-    __builtin_prefetch(p,0,0);
-}
-static inline void RENAME(prefetcht0)(const void *p)
-{
-    __builtin_prefetch(p,0,1);
-}
-static inline void RENAME(prefetcht1)(const void *p)
-{
-    __builtin_prefetch(p,0,2);
-}
-static inline void RENAME(prefetcht2)(const void *p)
-{
-    __builtin_prefetch(p,0,3);
-}
-#else
-static inline void RENAME(prefetchnta)(const void *p)
-{
-    return;
-}
-static inline void RENAME(prefetcht0)(const void *p)
-{
-    return;
-}
-static inline void RENAME(prefetcht1)(const void *p)
-{
-    return;
-}
-static inline void RENAME(prefetcht2)(const void *p)
-{
-    return;
-}
-#endif
-/**
- * Filter array of bytes (Y or U or V values)
- */
-static void RENAME(postProcess)(const uint8_t src[], int srcStride, uint8_t dst[], int dstStride, int width, int height,
-                                const int8_t QPs[], int QPStride, int isColor, PPContext *c2)
-{
-    DECLARE_ALIGNED(8, PPContext, c)= *c2; //copy to stack for faster access
-    int x,y;
-#ifdef TEMPLATE_PP_TIME_MODE
-    const int mode= TEMPLATE_PP_TIME_MODE;
-#else
-    const int mode= isColor ? c.ppMode.chromMode : c.ppMode.lumMode;
-#endif
-    int black=0, white=255; // blackest black and whitest white in the picture
-    int QPCorrecture= 256*256;
-
-    int copyAhead;
-#if TEMPLATE_PP_MMX
-    int i;
-#endif
-
-    const int qpHShift= isColor ? 4-c.hChromaSubSample : 4;
-    const int qpVShift= isColor ? 4-c.vChromaSubSample : 4;
-
-    //FIXME remove
-    uint64_t * const yHistogram= c.yHistogram;
-    uint8_t * const tempSrc= srcStride > 0 ? c.tempSrc : c.tempSrc - 23*srcStride;
-    uint8_t * const tempDst= (dstStride > 0 ? c.tempDst : c.tempDst - 23*dstStride) + 32;
-    //const int mbWidth= isColor ? (width+7)>>3 : (width+15)>>4;
-
-    if (mode & VISUALIZE){
-        if(!(mode & (V_A_DEBLOCK | H_A_DEBLOCK)) || TEMPLATE_PP_MMX) {
-            av_log(c2, AV_LOG_WARNING, "Visualization is currently only supported with the accurate deblock filter without SIMD\n");
-        }
-    }
-
-#if TEMPLATE_PP_MMX
-    for(i=0; i<57; i++){
-        int offset= ((i*c.ppMode.baseDcDiff)>>8) + 1;
-        int threshold= offset*2 + 1;
-        c.mmxDcOffset[i]= 0x7F - offset;
-        c.mmxDcThreshold[i]= 0x7F - threshold;
-        c.mmxDcOffset[i]*= 0x0101010101010101LL;
-        c.mmxDcThreshold[i]*= 0x0101010101010101LL;
-    }
-#endif
-
-    if(mode & CUBIC_IPOL_DEINT_FILTER) copyAhead=16;
-    else if(   (mode & LINEAR_BLEND_DEINT_FILTER)
-            || (mode & FFMPEG_DEINT_FILTER)
-            || (mode & LOWPASS5_DEINT_FILTER)) copyAhead=14;
-    else if(   (mode & V_DEBLOCK)
-            || (mode & LINEAR_IPOL_DEINT_FILTER)
-            || (mode & MEDIAN_DEINT_FILTER)
-            || (mode & V_A_DEBLOCK)) copyAhead=13;
-    else if(mode & V_X1_FILTER) copyAhead=11;
-//    else if(mode & V_RK1_FILTER) copyAhead=10;
-    else if(mode & DERING) copyAhead=9;
-    else copyAhead=8;
-
-    copyAhead-= 8;
-
-    if(!isColor){
-        uint64_t sum= 0;
-        int i;
-        uint64_t maxClipped;
-        uint64_t clipped;
-        AVRational scale;
-
-        c.frameNum++;
-        // first frame is fscked so we ignore it
-        if(c.frameNum == 1) yHistogram[0]= width*(uint64_t)height/64*15/256;
-
-        for(i=0; i<256; i++){
-            sum+= yHistogram[i];
-        }
-
-        /* We always get a completely black picture first. */
-        maxClipped= av_rescale(sum, c.ppMode.maxClippedThreshold.num, c.ppMode.maxClippedThreshold.den);
-
-        clipped= sum;
-        for(black=255; black>0; black--){
-            if(clipped < maxClipped) break;
-            clipped-= yHistogram[black];
-        }
-
-        clipped= sum;
-        for(white=0; white<256; white++){
-            if(clipped < maxClipped) break;
-            clipped-= yHistogram[white];
-        }
-
-        scale = (AVRational){c.ppMode.maxAllowedY - c.ppMode.minAllowedY, white - black};
-
-#if TEMPLATE_PP_MMXEXT
-        c.packedYScale = (uint16_t)av_rescale(scale.num, 256, scale.den);
-        c.packedYOffset= (((black*c.packedYScale)>>8) - c.ppMode.minAllowedY) & 0xFFFF;
-#else
-        c.packedYScale = (uint16_t)av_rescale(scale.num, 1024, scale.den);
-        c.packedYOffset= (black - c.ppMode.minAllowedY) & 0xFFFF;
-#endif
-
-        c.packedYOffset|= c.packedYOffset<<32;
-        c.packedYOffset|= c.packedYOffset<<16;
-
-        c.packedYScale|= c.packedYScale<<32;
-        c.packedYScale|= c.packedYScale<<16;
-
-        if(mode & LEVEL_FIX)        QPCorrecture= (int)av_rescale(scale.num, 256*256, scale.den);
-        else                        QPCorrecture= 256*256;
-    }else{
-        c.packedYScale= 0x0100010001000100LL;
-        c.packedYOffset= 0;
-        QPCorrecture= 256*256;
-    }
-
-    /* copy & deinterlace first row of blocks */
-    y=-BLOCK_SIZE;
-    {
-        const uint8_t *srcBlock= &(src[y*srcStride]);
-        uint8_t *dstBlock= tempDst + dstStride;
-
-        // From this point on it is guaranteed that we can read and write 16 lines downward
-        // finish 1 block before the next otherwise we might have a problem
-        // with the L1 Cache of the P4 ... or only a few blocks at a time or something
-        for(x=0; x<width; x+=BLOCK_SIZE){
-            RENAME(prefetchnta)(srcBlock + (((x>>2)&6) + copyAhead)*srcStride + 32);
-            RENAME(prefetchnta)(srcBlock + (((x>>2)&6) + copyAhead+1)*srcStride + 32);
-            RENAME(prefetcht0)(dstBlock + (((x>>2)&6) + copyAhead)*dstStride + 32);
-            RENAME(prefetcht0)(dstBlock + (((x>>2)&6) + copyAhead+1)*dstStride + 32);
-
-            RENAME(blockCopy)(dstBlock + dstStride*8, dstStride,
-                              srcBlock + srcStride*8, srcStride, mode & LEVEL_FIX, &c.packedYOffset);
-
-            RENAME(duplicate)(dstBlock + dstStride*8, dstStride);
-
-            if(mode & LINEAR_IPOL_DEINT_FILTER)
-                RENAME(deInterlaceInterpolateLinear)(dstBlock, dstStride);
-            else if(mode & LINEAR_BLEND_DEINT_FILTER)
-                RENAME(deInterlaceBlendLinear)(dstBlock, dstStride, c.deintTemp + x);
-            else if(mode & MEDIAN_DEINT_FILTER)
-                RENAME(deInterlaceMedian)(dstBlock, dstStride);
-            else if(mode & CUBIC_IPOL_DEINT_FILTER)
-                RENAME(deInterlaceInterpolateCubic)(dstBlock, dstStride);
-            else if(mode & FFMPEG_DEINT_FILTER)
-                RENAME(deInterlaceFF)(dstBlock, dstStride, c.deintTemp + x);
-            else if(mode & LOWPASS5_DEINT_FILTER)
-                RENAME(deInterlaceL5)(dstBlock, dstStride, c.deintTemp + x, c.deintTemp + width + x);
-/*          else if(mode & CUBIC_BLEND_DEINT_FILTER)
-                RENAME(deInterlaceBlendCubic)(dstBlock, dstStride);
-*/
-            dstBlock+=8;
-            srcBlock+=8;
-        }
-        if(width==FFABS(dstStride))
-            linecpy(dst, tempDst + 9*dstStride, copyAhead, dstStride);
-        else{
-            int i;
-            for(i=0; i<copyAhead; i++){
-                memcpy(dst + i*dstStride, tempDst + (9+i)*dstStride, width);
-            }
-        }
-    }
-
-    for(y=0; y<height; y+=BLOCK_SIZE){
-        //1% speedup if these are here instead of the inner loop
-        const uint8_t *srcBlock= &(src[y*srcStride]);
-        uint8_t *dstBlock= &(dst[y*dstStride]);
-#if TEMPLATE_PP_MMX
-        uint8_t *tempBlock1= c.tempBlocks;
-        uint8_t *tempBlock2= c.tempBlocks + 8;
-#endif
-        const int8_t *QPptr= &QPs[(y>>qpVShift)*QPStride];
-        int8_t *nonBQPptr= &c.nonBQPTable[(y>>qpVShift)*FFABS(QPStride)];
-        int QP=0, nonBQP=0;
-        /* can we mess with a 8x16 block from srcBlock/dstBlock downwards and 1 line upwards
-           if not than use a temporary buffer */
-        if(y+15 >= height){
-            int i;
-            /* copy from line (copyAhead) to (copyAhead+7) of src, these will be copied with
-               blockcopy to dst later */
-            linecpy(tempSrc + srcStride*copyAhead, srcBlock + srcStride*copyAhead,
-                    FFMAX(height-y-copyAhead, 0), srcStride);
-
-            /* duplicate last line of src to fill the void up to line (copyAhead+7) */
-            for(i=FFMAX(height-y, 8); i<copyAhead+8; i++)
-                    memcpy(tempSrc + srcStride*i, src + srcStride*(height-1), FFABS(srcStride));
-
-            /* copy up to (copyAhead+1) lines of dst (line -1 to (copyAhead-1))*/
-            linecpy(tempDst, dstBlock - dstStride, FFMIN(height-y+1, copyAhead+1), dstStride);
-
-            /* duplicate last line of dst to fill the void up to line (copyAhead) */
-            for(i=height-y+1; i<=copyAhead; i++)
-                    memcpy(tempDst + dstStride*i, dst + dstStride*(height-1), FFABS(dstStride));
-
-            dstBlock= tempDst + dstStride;
-            srcBlock= tempSrc;
-        }
-
-        // From this point on it is guaranteed that we can read and write 16 lines downward
-        // finish 1 block before the next otherwise we might have a problem
-        // with the L1 Cache of the P4 ... or only a few blocks at a time or something
-        for(x=0; x<width; ){
-            int startx = x;
-            int endx = FFMIN(width, x+32);
-            uint8_t *dstBlockStart = dstBlock;
-            const uint8_t *srcBlockStart = srcBlock;
-            int qp_index = 0;
-            for(qp_index=0; qp_index < (endx-startx)/BLOCK_SIZE; qp_index++){
-                QP = QPptr[(x+qp_index*BLOCK_SIZE)>>qpHShift];
-                nonBQP = nonBQPptr[(x+qp_index*BLOCK_SIZE)>>qpHShift];
-            if(!isColor){
-                QP= (QP* QPCorrecture + 256*128)>>16;
-                nonBQP= (nonBQP* QPCorrecture + 256*128)>>16;
-                yHistogram[(srcBlock+qp_index*8)[srcStride*12 + 4]]++;
-            }
-            c.QP_block[qp_index] = QP;
-            c.nonBQP_block[qp_index] = nonBQP;
-#if TEMPLATE_PP_MMX
-            __asm__ volatile(
-                "movd %1, %%mm7         \n\t"
-                "packuswb %%mm7, %%mm7  \n\t" // 0, 0, 0, QP, 0, 0, 0, QP
-                "packuswb %%mm7, %%mm7  \n\t" // 0,QP, 0, QP, 0,QP, 0, QP
-                "packuswb %%mm7, %%mm7  \n\t" // QP,..., QP
-                "movq %%mm7, %0         \n\t"
-                : "=m" (c.pQPb_block[qp_index])
-                : "r" (QP)
-            );
-#endif
-            }
-          for(; x < endx; x+=BLOCK_SIZE){
-            RENAME(prefetchnta)(srcBlock + (((x>>2)&6) + copyAhead)*srcStride + 32);
-            RENAME(prefetchnta)(srcBlock + (((x>>2)&6) + copyAhead+1)*srcStride + 32);
-            RENAME(prefetcht0)(dstBlock + (((x>>2)&6) + copyAhead)*dstStride + 32);
-            RENAME(prefetcht0)(dstBlock + (((x>>2)&6) + copyAhead+1)*dstStride + 32);
-
-            RENAME(blockCopy)(dstBlock + dstStride*copyAhead, dstStride,
-                              srcBlock + srcStride*copyAhead, srcStride, mode & LEVEL_FIX, &c.packedYOffset);
-
-            if(mode & LINEAR_IPOL_DEINT_FILTER)
-                RENAME(deInterlaceInterpolateLinear)(dstBlock, dstStride);
-            else if(mode & LINEAR_BLEND_DEINT_FILTER)
-                RENAME(deInterlaceBlendLinear)(dstBlock, dstStride, c.deintTemp + x);
-            else if(mode & MEDIAN_DEINT_FILTER)
-                RENAME(deInterlaceMedian)(dstBlock, dstStride);
-            else if(mode & CUBIC_IPOL_DEINT_FILTER)
-                RENAME(deInterlaceInterpolateCubic)(dstBlock, dstStride);
-            else if(mode & FFMPEG_DEINT_FILTER)
-                RENAME(deInterlaceFF)(dstBlock, dstStride, c.deintTemp + x);
-            else if(mode & LOWPASS5_DEINT_FILTER)
-                RENAME(deInterlaceL5)(dstBlock, dstStride, c.deintTemp + x, c.deintTemp + width + x);
-/*          else if(mode & CUBIC_BLEND_DEINT_FILTER)
-                RENAME(deInterlaceBlendCubic)(dstBlock, dstStride);
-*/
-            dstBlock+=8;
-            srcBlock+=8;
-          }
-
-          dstBlock = dstBlockStart;
-          srcBlock = srcBlockStart;
-
-          for(x = startx, qp_index = 0; x < endx; x+=BLOCK_SIZE, qp_index++){
-            const int stride= dstStride;
-            //temporary while changing QP stuff to make things continue to work
-            //eventually QP,nonBQP,etc will be arrays and this will be unnecessary
-            c.QP = c.QP_block[qp_index];
-            c.nonBQP = c.nonBQP_block[qp_index];
-            c.pQPb = c.pQPb_block[qp_index];
-            c.pQPb2 = c.pQPb2_block[qp_index];
-
-            /* only deblock if we have 2 blocks */
-            if(y + 8 < height){
-                if(mode & V_X1_FILTER)
-                    RENAME(vertX1Filter)(dstBlock, stride, &c);
-                else if(mode & V_DEBLOCK){
-                    const int t= RENAME(vertClassify)(dstBlock, stride, &c);
-
-                    if(t==1)
-                        RENAME(doVertLowPass)(dstBlock, stride, &c);
-                    else if(t==2)
-                        RENAME(doVertDefFilter)(dstBlock, stride, &c);
-                }else if(mode & V_A_DEBLOCK){
-                    RENAME(do_a_deblock)(dstBlock, stride, 1, &c, mode);
-                }
-            }
-
-            dstBlock+=8;
-            srcBlock+=8;
-          }
-
-          dstBlock = dstBlockStart;
-          srcBlock = srcBlockStart;
-
-          for(x = startx, qp_index=0; x < endx; x+=BLOCK_SIZE, qp_index++){
-            const int stride= dstStride;
-            av_unused uint8_t *tmpXchg;
-            c.QP = c.QP_block[qp_index];
-            c.nonBQP = c.nonBQP_block[qp_index];
-            c.pQPb = c.pQPb_block[qp_index];
-            c.pQPb2 = c.pQPb2_block[qp_index];
-#if TEMPLATE_PP_MMX
-            RENAME(transpose1)(tempBlock1, tempBlock2, dstBlock, dstStride);
-#endif
-            /* check if we have a previous block to deblock it with dstBlock */
-            if(x - 8 >= 0){
-#if TEMPLATE_PP_MMX
-                if(mode & H_X1_FILTER)
-                        RENAME(vertX1Filter)(tempBlock1, 16, &c);
-                else if(mode & H_DEBLOCK){
-                    const int t= RENAME(vertClassify)(tempBlock1, 16, &c);
-                    if(t==1)
-                        RENAME(doVertLowPass)(tempBlock1, 16, &c);
-                    else if(t==2)
-                        RENAME(doVertDefFilter)(tempBlock1, 16, &c);
-                }else if(mode & H_A_DEBLOCK){
-                        RENAME(do_a_deblock)(tempBlock1, 16, 1, &c, mode);
-                }
-
-                RENAME(transpose2)(dstBlock-4, dstStride, tempBlock1 + 4*16);
-
-#else
-                if(mode & H_X1_FILTER)
-                    horizX1Filter(dstBlock-4, stride, c.QP);
-                else if(mode & H_DEBLOCK){
-#if TEMPLATE_PP_ALTIVEC
-                    DECLARE_ALIGNED(16, unsigned char, tempBlock)[272];
-                    int t;
-                    transpose_16x8_char_toPackedAlign_altivec(tempBlock, dstBlock - (4 + 1), stride);
-
-                    t = vertClassify_altivec(tempBlock-48, 16, &c);
-                    if(t==1) {
-                        doVertLowPass_altivec(tempBlock-48, 16, &c);
-                        transpose_8x16_char_fromPackedAlign_altivec(dstBlock - (4 + 1), tempBlock, stride);
-                    }
-                    else if(t==2) {
-                        doVertDefFilter_altivec(tempBlock-48, 16, &c);
-                        transpose_8x16_char_fromPackedAlign_altivec(dstBlock - (4 + 1), tempBlock, stride);
-                    }
-#else
-                    const int t= RENAME(horizClassify)(dstBlock-4, stride, &c);
-
-                    if(t==1)
-                        RENAME(doHorizLowPass)(dstBlock-4, stride, &c);
-                    else if(t==2)
-                        RENAME(doHorizDefFilter)(dstBlock-4, stride, &c);
-#endif
-                }else if(mode & H_A_DEBLOCK){
-                    RENAME(do_a_deblock)(dstBlock-8, 1, stride, &c, mode);
-                }
-#endif //TEMPLATE_PP_MMX
-                if(mode & DERING){
-                //FIXME filter first line
-                    if(y>0) RENAME(dering)(dstBlock - stride - 8, stride, &c);
-                }
-
-                if(mode & TEMP_NOISE_FILTER)
-                {
-                    RENAME(tempNoiseReducer)(dstBlock-8, stride,
-                            c.tempBlurred[isColor] + y*dstStride + x,
-                            c.tempBlurredPast[isColor] + (y>>3)*256 + (x>>3) + 256,
-                            c.ppMode.maxTmpNoise);
-                }
-            }
-
-            dstBlock+=8;
-            srcBlock+=8;
-
-#if TEMPLATE_PP_MMX
-            tmpXchg= tempBlock1;
-            tempBlock1= tempBlock2;
-            tempBlock2 = tmpXchg;
-#endif
-          }
-        }
-
-        if(mode & DERING){
-            if(y > 0) RENAME(dering)(dstBlock - dstStride - 8, dstStride, &c);
-        }
-
-        if((mode & TEMP_NOISE_FILTER)){
-            RENAME(tempNoiseReducer)(dstBlock-8, dstStride,
-                    c.tempBlurred[isColor] + y*dstStride + x,
-                    c.tempBlurredPast[isColor] + (y>>3)*256 + (x>>3) + 256,
-                    c.ppMode.maxTmpNoise);
-        }
-
-        /* did we use a tmp buffer for the last lines*/
-        if(y+15 >= height){
-            uint8_t *dstBlock= &(dst[y*dstStride]);
-            if(width==FFABS(dstStride))
-                linecpy(dstBlock, tempDst + dstStride, height-y, dstStride);
-            else{
-                int i;
-                for(i=0; i<height-y; i++){
-                    memcpy(dstBlock + i*dstStride, tempDst + (i+1)*dstStride, width);
-                }
-            }
-        }
-    }
-#if   TEMPLATE_PP_3DNOW
-    __asm__ volatile("femms");
-#elif TEMPLATE_PP_MMX
-    __asm__ volatile("emms");
-#endif
-
-#ifdef DEBUG_BRIGHTNESS
-    if(!isColor){
-        int max=1;
-        int i;
-        for(i=0; i<256; i++)
-            if(yHistogram[i] > max) max=yHistogram[i];
-
-        for(i=1; i<256; i++){
-            int x;
-            int start=yHistogram[i-1]/(max/256+1);
-            int end=yHistogram[i]/(max/256+1);
-            int inc= end > start ? 1 : -1;
-            for(x=start; x!=end+inc; x+=inc)
-                dst[ i*dstStride + x]+=128;
-        }
-
-        for(i=0; i<100; i+=2){
-            dst[ (white)*dstStride + i]+=128;
-            dst[ (black)*dstStride + i]+=128;
-        }
-    }
-#endif
-
-    *c2= c; //copy local context back
-
-}
-
-#undef RENAME
-#undef TEMPLATE_PP_C
-#undef TEMPLATE_PP_ALTIVEC
-#undef TEMPLATE_PP_MMX
-#undef TEMPLATE_PP_MMXEXT
-#undef TEMPLATE_PP_3DNOW
-#undef TEMPLATE_PP_SSE2
diff --git a/libswresample/tests/swresample.c b/libswresample/tests/swresample.c
deleted file mode 100644
index 5389658..0000000
--- a/libswresample/tests/swresample.c
+++ /dev/null
@@ -1,422 +0,0 @@
-/*
- * Copyright (C) 2011-2012 Michael Niedermayer (michaelni@gmx.at)
- * Copyright (c) 2002 Fabrice Bellard
- *
- * This file is part of libswresample
- *
- * libswresample 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.
- *
- * libswresample 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 libswresample; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "libavutil/avassert.h"
-#include "libavutil/channel_layout.h"
-#include "libavutil/common.h"
-#include "libavutil/opt.h"
-
-#include "libswresample/swresample.h"
-
-#undef time
-#include <time.h>
-#undef fprintf
-
-#define SAMPLES 1000
-
-#define SWR_CH_MAX 32
-
-#define ASSERT_LEVEL 2
-
-static double get(uint8_t *a[], int ch, int index, int ch_count, enum AVSampleFormat f){
-    const uint8_t *p;
-    if(av_sample_fmt_is_planar(f)){
-        f= av_get_alt_sample_fmt(f, 0);
-        p= a[ch];
-    }else{
-        p= a[0];
-        index= ch + index*ch_count;
-    }
-
-    switch(f){
-    case AV_SAMPLE_FMT_U8 : return ((const uint8_t*)p)[index]/127.0-1.0;
-    case AV_SAMPLE_FMT_S16: return ((const int16_t*)p)[index]/32767.0;
-    case AV_SAMPLE_FMT_S32: return ((const int32_t*)p)[index]/2147483647.0;
-    case AV_SAMPLE_FMT_FLT: return ((const float  *)p)[index];
-    case AV_SAMPLE_FMT_DBL: return ((const double *)p)[index];
-    default: av_assert0(0);
-    }
-}
-
-static void  set(uint8_t *a[], int ch, int index, int ch_count, enum AVSampleFormat f, double v){
-    uint8_t *p;
-    if(av_sample_fmt_is_planar(f)){
-        f= av_get_alt_sample_fmt(f, 0);
-        p= a[ch];
-    }else{
-        p= a[0];
-        index= ch + index*ch_count;
-    }
-    switch(f){
-    case AV_SAMPLE_FMT_U8 : ((uint8_t*)p)[index]= av_clip_uint8 (lrint((v+1.0)*127));     break;
-    case AV_SAMPLE_FMT_S16: ((int16_t*)p)[index]= av_clip_int16 (lrint(v*32767));         break;
-    case AV_SAMPLE_FMT_S32: ((int32_t*)p)[index]= av_clipl_int32(llrint(v*2147483647));   break;
-    case AV_SAMPLE_FMT_FLT: ((float  *)p)[index]= v;                                      break;
-    case AV_SAMPLE_FMT_DBL: ((double *)p)[index]= v;                                      break;
-    default: av_assert2(0);
-    }
-}
-
-static void shift(uint8_t *a[], int index, int ch_count, enum AVSampleFormat f){
-    int ch;
-
-    if(av_sample_fmt_is_planar(f)){
-        f= av_get_alt_sample_fmt(f, 0);
-        for(ch= 0; ch<ch_count; ch++)
-            a[ch] += index*av_get_bytes_per_sample(f);
-    }else{
-        a[0] += index*ch_count*av_get_bytes_per_sample(f);
-    }
-}
-
-static const enum AVSampleFormat formats[] = {
-    AV_SAMPLE_FMT_S16,
-    AV_SAMPLE_FMT_FLTP,
-    AV_SAMPLE_FMT_S16P,
-    AV_SAMPLE_FMT_FLT,
-    AV_SAMPLE_FMT_S32P,
-    AV_SAMPLE_FMT_S32,
-    AV_SAMPLE_FMT_U8P,
-    AV_SAMPLE_FMT_U8,
-    AV_SAMPLE_FMT_DBLP,
-    AV_SAMPLE_FMT_DBL,
-};
-
-static const int rates[] = {
-    8000,
-    11025,
-    16000,
-    22050,
-    32000,
-    48000,
-};
-
-static const uint64_t layouts[]={
-    AV_CH_LAYOUT_MONO                    ,
-    AV_CH_LAYOUT_STEREO                  ,
-    AV_CH_LAYOUT_2_1                     ,
-    AV_CH_LAYOUT_SURROUND                ,
-    AV_CH_LAYOUT_4POINT0                 ,
-    AV_CH_LAYOUT_2_2                     ,
-    AV_CH_LAYOUT_QUAD                    ,
-    AV_CH_LAYOUT_5POINT0                 ,
-    AV_CH_LAYOUT_5POINT1                 ,
-    AV_CH_LAYOUT_5POINT0_BACK            ,
-    AV_CH_LAYOUT_5POINT1_BACK            ,
-    AV_CH_LAYOUT_7POINT0                 ,
-    AV_CH_LAYOUT_7POINT1                 ,
-    AV_CH_LAYOUT_7POINT1_WIDE            ,
-};
-
-static void setup_array(uint8_t *out[SWR_CH_MAX], uint8_t *in, enum AVSampleFormat format, int samples){
-    if(av_sample_fmt_is_planar(format)){
-        int i;
-        int plane_size= av_get_bytes_per_sample(format&0xFF)*samples;
-        format&=0xFF;
-        for(i=0; i<SWR_CH_MAX; i++){
-            out[i]= in + i*plane_size;
-        }
-    }else{
-        out[0]= in;
-    }
-}
-
-static int cmp(const void *a, const void *b){
-    return *(const int *)a - *(const int *)b;
-}
-
-static void audiogen(void *data, enum AVSampleFormat sample_fmt,
-                     int channels, int sample_rate, int nb_samples)
-{
-    int i, ch, k;
-    double v, f, a, ampa;
-    double tabf1[SWR_CH_MAX];
-    double tabf2[SWR_CH_MAX];
-    double taba[SWR_CH_MAX];
-    unsigned static rnd;
-
-#define PUT_SAMPLE set(data, ch, k, channels, sample_fmt, v);
-#define uint_rand(x) ((x) = (x) * 1664525 + 1013904223)
-#define dbl_rand(x) (uint_rand(x)*2.0 / (double)UINT_MAX - 1)
-    k = 0;
-
-    /* 1 second of single freq sinus at 1000 Hz */
-    a = 0;
-    for (i = 0; i < 1 * sample_rate && k < nb_samples; i++, k++) {
-        v = sin(a) * 0.30;
-        for (ch = 0; ch < channels; ch++)
-            PUT_SAMPLE
-        a += M_PI * 1000.0 * 2.0 / sample_rate;
-    }
-
-    /* 1 second of varying frequency between 100 and 10000 Hz */
-    a = 0;
-    for (i = 0; i < 1 * sample_rate && k < nb_samples; i++, k++) {
-        v = sin(a) * 0.30;
-        for (ch = 0; ch < channels; ch++)
-            PUT_SAMPLE
-        f  = 100.0 + (((10000.0 - 100.0) * i) / sample_rate);
-        a += M_PI * f * 2.0 / sample_rate;
-    }
-
-    /* 0.5 second of low amplitude white noise */
-    for (i = 0; i < sample_rate / 2 && k < nb_samples; i++, k++) {
-        v = dbl_rand(rnd) * 0.30;
-        for (ch = 0; ch < channels; ch++)
-            PUT_SAMPLE
-    }
-
-    /* 0.5 second of high amplitude white noise */
-    for (i = 0; i < sample_rate / 2 && k < nb_samples; i++, k++) {
-        v = dbl_rand(rnd);
-        for (ch = 0; ch < channels; ch++)
-            PUT_SAMPLE
-    }
-
-    /* 1 second of unrelated ramps for each channel */
-    for (ch = 0; ch < channels; ch++) {
-        taba[ch]  = 0;
-        tabf1[ch] = 100 + uint_rand(rnd) % 5000;
-        tabf2[ch] = 100 + uint_rand(rnd) % 5000;
-    }
-    for (i = 0; i < 1 * sample_rate && k < nb_samples; i++, k++) {
-        for (ch = 0; ch < channels; ch++) {
-            v = sin(taba[ch]) * 0.30;
-            PUT_SAMPLE
-            f = tabf1[ch] + (((tabf2[ch] - tabf1[ch]) * i) / sample_rate);
-            taba[ch] += M_PI * f * 2.0 / sample_rate;
-        }
-    }
-
-    /* 2 seconds of 500 Hz with varying volume */
-    a    = 0;
-    ampa = 0;
-    for (i = 0; i < 2 * sample_rate && k < nb_samples; i++, k++) {
-        for (ch = 0; ch < channels; ch++) {
-            double amp = (1.0 + sin(ampa)) * 0.15;
-            if (ch & 1)
-                amp = 0.30 - amp;
-            v = sin(a) * amp;
-            PUT_SAMPLE
-            a    += M_PI * 500.0 * 2.0 / sample_rate;
-            ampa += M_PI *  2.0 / sample_rate;
-        }
-    }
-}
-
-int main(int argc, char **argv){
-    int in_sample_rate, out_sample_rate, ch ,i, flush_count;
-    uint64_t in_ch_layout, out_ch_layout;
-    enum AVSampleFormat in_sample_fmt, out_sample_fmt;
-    uint8_t array_in[SAMPLES*8*8];
-    uint8_t array_mid[SAMPLES*8*8*3];
-    uint8_t array_out[SAMPLES*8*8+100];
-    uint8_t *ain[SWR_CH_MAX];
-    uint8_t *aout[SWR_CH_MAX];
-    uint8_t *amid[SWR_CH_MAX];
-    int flush_i=0;
-    int mode;
-    int num_tests = 10000;
-    uint32_t seed = 0;
-    uint32_t rand_seed = 0;
-    int remaining_tests[FF_ARRAY_ELEMS(rates) * FF_ARRAY_ELEMS(layouts) * FF_ARRAY_ELEMS(formats) * FF_ARRAY_ELEMS(layouts) * FF_ARRAY_ELEMS(formats)];
-    int max_tests = FF_ARRAY_ELEMS(remaining_tests);
-    int test;
-    int specific_test= -1;
-
-    struct SwrContext * forw_ctx= NULL;
-    struct SwrContext *backw_ctx= NULL;
-
-    if (argc > 1) {
-        if (!strcmp(argv[1], "-h") || !strcmp(argv[1], "--help")) {
-            av_log(NULL, AV_LOG_INFO, "Usage: swresample-test [<num_tests>[ <test>]]  \n"
-                   "num_tests           Default is %d\n", num_tests);
-            return 0;
-        }
-        num_tests = strtol(argv[1], NULL, 0);
-        if(num_tests < 0) {
-            num_tests = -num_tests;
-            rand_seed = time(0);
-        }
-        if(num_tests<= 0 || num_tests>max_tests)
-            num_tests = max_tests;
-        if(argc > 2) {
-            specific_test = strtol(argv[1], NULL, 0);
-        }
-    }
-
-    for(i=0; i<max_tests; i++)
-        remaining_tests[i] = i;
-
-    for(test=0; test<num_tests; test++){
-        unsigned r;
-        uint_rand(seed);
-        r = (seed * (uint64_t)(max_tests - test)) >>32;
-        FFSWAP(int, remaining_tests[r], remaining_tests[max_tests - test - 1]);
-    }
-    qsort(remaining_tests + max_tests - num_tests, num_tests, sizeof(remaining_tests[0]), cmp);
-    in_sample_rate=16000;
-    for(test=0; test<num_tests; test++){
-        char  in_layout_string[256];
-        char out_layout_string[256];
-        unsigned vector= remaining_tests[max_tests - test - 1];
-        int in_ch_count;
-        int out_count, mid_count, out_ch_count;
-
-        in_ch_layout    = layouts[vector % FF_ARRAY_ELEMS(layouts)]; vector /= FF_ARRAY_ELEMS(layouts);
-        out_ch_layout   = layouts[vector % FF_ARRAY_ELEMS(layouts)]; vector /= FF_ARRAY_ELEMS(layouts);
-        in_sample_fmt   = formats[vector % FF_ARRAY_ELEMS(formats)]; vector /= FF_ARRAY_ELEMS(formats);
-        out_sample_fmt  = formats[vector % FF_ARRAY_ELEMS(formats)]; vector /= FF_ARRAY_ELEMS(formats);
-        out_sample_rate = rates  [vector % FF_ARRAY_ELEMS(rates  )]; vector /= FF_ARRAY_ELEMS(rates);
-        av_assert0(!vector);
-
-        if(specific_test == 0){
-            if(out_sample_rate != in_sample_rate || in_ch_layout != out_ch_layout)
-                continue;
-        }
-
-        in_ch_count= av_get_channel_layout_nb_channels(in_ch_layout);
-        out_ch_count= av_get_channel_layout_nb_channels(out_ch_layout);
-        av_get_channel_layout_string( in_layout_string, sizeof( in_layout_string),  in_ch_count,  in_ch_layout);
-        av_get_channel_layout_string(out_layout_string, sizeof(out_layout_string), out_ch_count, out_ch_layout);
-        fprintf(stderr, "TEST: %s->%s, rate:%5d->%5d, fmt:%s->%s\n",
-                in_layout_string, out_layout_string,
-                in_sample_rate, out_sample_rate,
-                av_get_sample_fmt_name(in_sample_fmt), av_get_sample_fmt_name(out_sample_fmt));
-        forw_ctx  = swr_alloc_set_opts(forw_ctx, out_ch_layout, out_sample_fmt,  out_sample_rate,
-                                                    in_ch_layout,  in_sample_fmt,  in_sample_rate,
-                                        0, 0);
-        backw_ctx = swr_alloc_set_opts(backw_ctx, in_ch_layout,  in_sample_fmt,             in_sample_rate,
-                                                    out_ch_layout, out_sample_fmt, out_sample_rate,
-                                        0, 0);
-        if(!forw_ctx) {
-            fprintf(stderr, "Failed to init forw_cts\n");
-            return 1;
-        }
-        if(!backw_ctx) {
-            fprintf(stderr, "Failed to init backw_ctx\n");
-            return 1;
-        }
-        if (uint_rand(rand_seed) % 3 == 0)
-            av_opt_set_int(forw_ctx, "ich", 0, 0);
-        if (uint_rand(rand_seed) % 3 == 0)
-            av_opt_set_int(forw_ctx, "och", 0, 0);
-
-        if(swr_init( forw_ctx) < 0)
-            fprintf(stderr, "swr_init(->) failed\n");
-        if(swr_init(backw_ctx) < 0)
-            fprintf(stderr, "swr_init(<-) failed\n");
-                //FIXME test planar
-        setup_array(ain , array_in ,  in_sample_fmt,   SAMPLES);
-        setup_array(amid, array_mid, out_sample_fmt, 3*SAMPLES);
-        setup_array(aout, array_out,  in_sample_fmt           ,   SAMPLES);
-#if 0
-        for(ch=0; ch<in_ch_count; ch++){
-            for(i=0; i<SAMPLES; i++)
-                set(ain, ch, i, in_ch_count, in_sample_fmt, sin(i*i*3/SAMPLES));
-        }
-#else
-        audiogen(ain, in_sample_fmt, in_ch_count, SAMPLES/6+1, SAMPLES);
-#endif
-        mode = uint_rand(rand_seed) % 3;
-        if(mode==0 /*|| out_sample_rate == in_sample_rate*/) {
-            mid_count= swr_convert(forw_ctx, amid, 3*SAMPLES, (const uint8_t **)ain, SAMPLES);
-        } else if(mode==1){
-            mid_count= swr_convert(forw_ctx, amid,         0, (const uint8_t **)ain, SAMPLES);
-            mid_count+=swr_convert(forw_ctx, amid, 3*SAMPLES, (const uint8_t **)ain,       0);
-        } else {
-            int tmp_count;
-            mid_count= swr_convert(forw_ctx, amid,         0, (const uint8_t **)ain,       1);
-            av_assert0(mid_count==0);
-            shift(ain,  1, in_ch_count, in_sample_fmt);
-            mid_count+=swr_convert(forw_ctx, amid, 3*SAMPLES, (const uint8_t **)ain,       0);
-            shift(amid,  mid_count, out_ch_count, out_sample_fmt); tmp_count = mid_count;
-            mid_count+=swr_convert(forw_ctx, amid,         2, (const uint8_t **)ain,       2);
-            shift(amid,  mid_count-tmp_count, out_ch_count, out_sample_fmt); tmp_count = mid_count;
-            shift(ain,  2, in_ch_count, in_sample_fmt);
-            mid_count+=swr_convert(forw_ctx, amid,         1, (const uint8_t **)ain, SAMPLES-3);
-            shift(amid,  mid_count-tmp_count, out_ch_count, out_sample_fmt); tmp_count = mid_count;
-            shift(ain, -3, in_ch_count, in_sample_fmt);
-            mid_count+=swr_convert(forw_ctx, amid, 3*SAMPLES, (const uint8_t **)ain,       0);
-            shift(amid,  -tmp_count, out_ch_count, out_sample_fmt);
-        }
-        out_count= swr_convert(backw_ctx,aout, SAMPLES, (const uint8_t **)amid, mid_count);
-
-        for(ch=0; ch<in_ch_count; ch++){
-            double sse, maxdiff=0;
-            double sum_a= 0;
-            double sum_b= 0;
-            double sum_aa= 0;
-            double sum_bb= 0;
-            double sum_ab= 0;
-            for(i=0; i<out_count; i++){
-                double a= get(ain , ch, i, in_ch_count, in_sample_fmt);
-                double b= get(aout, ch, i, in_ch_count, in_sample_fmt);
-                sum_a += a;
-                sum_b += b;
-                sum_aa+= a*a;
-                sum_bb+= b*b;
-                sum_ab+= a*b;
-                maxdiff= FFMAX(maxdiff, fabs(a-b));
-            }
-            sse= sum_aa + sum_bb - 2*sum_ab;
-            if(sse < 0 && sse > -0.00001) sse=0; //fix rounding error
-
-            fprintf(stderr, "[e:%f c:%f max:%f] len:%5d\n", out_count ? sqrt(sse/out_count) : 0, sum_ab/(sqrt(sum_aa*sum_bb)), maxdiff, out_count);
-        }
-
-        flush_i++;
-        flush_i%=21;
-        flush_count = swr_convert(backw_ctx,aout, flush_i, 0, 0);
-        shift(aout,  flush_i, in_ch_count, in_sample_fmt);
-        flush_count+= swr_convert(backw_ctx,aout, SAMPLES-flush_i, 0, 0);
-        shift(aout, -flush_i, in_ch_count, in_sample_fmt);
-        if(flush_count){
-            for(ch=0; ch<in_ch_count; ch++){
-                double sse, maxdiff=0;
-                double sum_a= 0;
-                double sum_b= 0;
-                double sum_aa= 0;
-                double sum_bb= 0;
-                double sum_ab= 0;
-                for(i=0; i<flush_count; i++){
-                    double a= get(ain , ch, i+out_count, in_ch_count, in_sample_fmt);
-                    double b= get(aout, ch, i, in_ch_count, in_sample_fmt);
-                    sum_a += a;
-                    sum_b += b;
-                    sum_aa+= a*a;
-                    sum_bb+= b*b;
-                    sum_ab+= a*b;
-                    maxdiff= FFMAX(maxdiff, fabs(a-b));
-                }
-                sse= sum_aa + sum_bb - 2*sum_ab;
-                if(sse < 0 && sse > -0.00001) sse=0; //fix rounding error
-
-                fprintf(stderr, "[e:%f c:%f max:%f] len:%5d F:%3d\n", sqrt(sse/flush_count), sum_ab/(sqrt(sum_aa*sum_bb)), maxdiff, flush_count, flush_i);
-            }
-        }
-
-
-        fprintf(stderr, "\n");
-    }
-
-    return 0;
-}
diff --git a/manifest/ffmpeg b/manifest/ffmpeg
new file mode 100644
index 0000000..a651d71
--- /dev/null
+++ b/manifest/ffmpeg
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<manifest>
+  <imports>
+    <import remote="https://fuchsia.googlesource.com/garnet"
+            manifest="manifest/garnet"
+            name="garnet"
+            revision="e558fa19d9178d5e61a650cfdc1a2afe6ae2292f"/>
+    </imports>
+    <projects>
+      <project name="third_party/ffmpeg"
+               path="third_party/ffmpeg"
+               remote="https://fuchsia.googlesource.com/third_party/ffmpeg"
+               gerrithost="https://fuchsia-review.googlesource.com"/>
+      <project name="third_party/yasm"
+               path="third_party/yasm"
+               remote="https://fuchsia.googlesource.com/third_party/yasm"
+               gerrithost="https://fuchsia-review.googlesource.com"
+               revision="edb428581932cfc87873aa44f4ff8b3a8c37bd09"/>
+    </projects>
+</manifest>
diff --git a/packages/ffmpeg b/packages/ffmpeg
new file mode 100644
index 0000000..be44b63
--- /dev/null
+++ b/packages/ffmpeg
@@ -0,0 +1,5 @@
+{
+    "labels": [
+        "//third_party/ffmpeg"
+    ]
+}
diff --git a/tests/checkasm/aacpsdsp.c b/tests/checkasm/aacpsdsp.c
deleted file mode 100644
index 2ceef43..0000000
--- a/tests/checkasm/aacpsdsp.c
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
- * 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.
- */
-
-#include "libavcodec/aacpsdsp.h"
-#include "libavutil/intfloat.h"
-
-#include "checkasm.h"
-
-#define N 32
-#define STRIDE 128
-#define BUF_SIZE (N * STRIDE)
-
-#define randomize(buf, len) do {                                \
-    int i;                                                      \
-    for (i = 0; i < len; i++) {                                 \
-        const INTFLOAT f = (INTFLOAT)rnd() / UINT_MAX;          \
-        (buf)[i] = f;                                           \
-    }                                                           \
-} while (0)
-
-#define EPS 0.005
-
-static void clear_less_significant_bits(INTFLOAT *buf, int len, int bits)
-{
-    int i;
-    for (i = 0; i < len; i++) {
-        union av_intfloat32 u = { .f = buf[i] };
-        u.i &= (0xffffffff << bits);
-        buf[i] = u.f;
-    }
-}
-
-static void test_add_squares(void)
-{
-    LOCAL_ALIGNED_16(INTFLOAT, dst0, [BUF_SIZE]);
-    LOCAL_ALIGNED_16(INTFLOAT, dst1, [BUF_SIZE]);
-    LOCAL_ALIGNED_16(INTFLOAT, src, [BUF_SIZE], [2]);
-
-    declare_func(void, INTFLOAT *dst,
-                 const INTFLOAT (*src)[2], int n);
-
-    randomize((INTFLOAT *)src, BUF_SIZE * 2);
-    randomize(dst0, BUF_SIZE);
-    memcpy(dst1, dst0, BUF_SIZE * sizeof(INTFLOAT));
-    call_ref(dst0, src, BUF_SIZE);
-    call_new(dst1, src, BUF_SIZE);
-    if (!float_near_abs_eps_array(dst0, dst1, EPS, BUF_SIZE))
-        fail();
-    bench_new(dst1, src, BUF_SIZE);
-}
-
-static void test_mul_pair_single(void)
-{
-    LOCAL_ALIGNED_16(INTFLOAT, dst0, [BUF_SIZE], [2]);
-    LOCAL_ALIGNED_16(INTFLOAT, dst1, [BUF_SIZE], [2]);
-    LOCAL_ALIGNED_16(INTFLOAT, src0, [BUF_SIZE], [2]);
-    LOCAL_ALIGNED_16(INTFLOAT, src1, [BUF_SIZE]);
-
-    declare_func(void, INTFLOAT (*dst)[2],
-                       INTFLOAT (*src0)[2], INTFLOAT *src1, int n);
-
-    randomize((INTFLOAT *)src0, BUF_SIZE * 2);
-    randomize(src1, BUF_SIZE);
-    call_ref(dst0, src0, src1, BUF_SIZE);
-    call_new(dst1, src0, src1, BUF_SIZE);
-    if (!float_near_abs_eps_array((float *)dst0, (float *)dst1, EPS, BUF_SIZE * 2))
-        fail();
-    bench_new(dst1, src0, src1, BUF_SIZE);
-}
-
-static void test_hybrid_analysis(void)
-{
-    LOCAL_ALIGNED_16(INTFLOAT, dst0, [BUF_SIZE], [2]);
-    LOCAL_ALIGNED_16(INTFLOAT, dst1, [BUF_SIZE], [2]);
-    LOCAL_ALIGNED_16(INTFLOAT, in, [13], [2]);
-    LOCAL_ALIGNED_16(INTFLOAT, filter, [N], [8][2]);
-
-    declare_func(void, INTFLOAT (*out)[2], INTFLOAT (*in)[2],
-                 const INTFLOAT (*filter)[8][2],
-                 ptrdiff_t stride, int n);
-
-    randomize((INTFLOAT *)in, 13 * 2);
-    randomize((INTFLOAT *)filter, N * 8 * 2);
-
-    randomize((INTFLOAT *)dst0, BUF_SIZE * 2);
-    memcpy(dst1, dst0, BUF_SIZE * 2 * sizeof(INTFLOAT));
-
-    call_ref(dst0, in, filter, STRIDE, N);
-    call_new(dst1, in, filter, STRIDE, N);
-
-    if (!float_near_abs_eps_array((float *)dst0, (float *)dst1, EPS, BUF_SIZE * 2))
-        fail();
-    bench_new(dst1, in, filter, STRIDE, N);
-}
-
-static void test_hybrid_analysis_ileave(void)
-{
-    LOCAL_ALIGNED_16(INTFLOAT, in,   [2], [38][64]);
-    LOCAL_ALIGNED_16(INTFLOAT, out0, [91], [32][2]);
-    LOCAL_ALIGNED_16(INTFLOAT, out1, [91], [32][2]);
-
-    declare_func(void, INTFLOAT (*out)[32][2], INTFLOAT L[2][38][64],
-                       int i, int len);
-
-    randomize((INTFLOAT *)out0, 91 * 32 * 2);
-    randomize((INTFLOAT *)in,    2 * 38 * 64);
-    memcpy(out1, out0, 91 * 32 * 2 * sizeof(INTFLOAT));
-
-    /* len is hardcoded to 32 as that's the only value used in
-       libavcodec. asm functions are likely to be optimized
-       hardcoding this value in their loops and could fail with
-       anything else.
-       i is hardcoded to the two values currently used by the
-       aac decoder because the arm neon implementation is
-       micro-optimized for them and will fail for almost every
-       other value. */
-    call_ref(out0, in, 3, 32);
-    call_new(out1, in, 3, 32);
-
-    /* the function just moves data around, so memcmp is enough */
-    if (memcmp(out0, out1, 91 * 32 * 2 * sizeof(INTFLOAT)))
-        fail();
-
-    call_ref(out0, in, 5, 32);
-    call_new(out1, in, 5, 32);
-
-    if (memcmp(out0, out1, 91 * 32 * 2 * sizeof(INTFLOAT)))
-        fail();
-
-    bench_new(out1, in, 3, 32);
-}
-
-static void test_hybrid_synthesis_deint(void)
-{
-    LOCAL_ALIGNED_16(INTFLOAT, out0, [2], [38][64]);
-    LOCAL_ALIGNED_16(INTFLOAT, out1, [2], [38][64]);
-    LOCAL_ALIGNED_16(INTFLOAT, in,  [91], [32][2]);
-
-    declare_func(void, INTFLOAT out[2][38][64], INTFLOAT (*in)[32][2],
-                       int i, int len);
-
-    randomize((INTFLOAT *)in,  91 * 32 * 2);
-    randomize((INTFLOAT *)out0, 2 * 38 * 64);
-    memcpy(out1, out0, 2 * 38 * 64 * sizeof(INTFLOAT));
-
-    /* len is hardcoded to 32 as that's the only value used in
-       libavcodec. asm functions are likely to be optimized
-       hardcoding this value in their loops and could fail with
-       anything else.
-       i is hardcoded to the two values currently used by the
-       aac decoder because the arm neon implementation is
-       micro-optimized for them and will fail for almost every
-       other value. */
-    call_ref(out0, in, 3, 32);
-    call_new(out1, in, 3, 32);
-
-    /* the function just moves data around, so memcmp is enough */
-    if (memcmp(out0, out1, 2 * 38 * 64 * sizeof(INTFLOAT)))
-        fail();
-
-    call_ref(out0, in, 5, 32);
-    call_new(out1, in, 5, 32);
-
-    if (memcmp(out0, out1, 2 * 38 * 64 * sizeof(INTFLOAT)))
-        fail();
-
-    bench_new(out1, in, 3, 32);
-}
-
-static void test_stereo_interpolate(PSDSPContext *psdsp)
-{
-    int i;
-    LOCAL_ALIGNED_16(INTFLOAT, l,  [BUF_SIZE], [2]);
-    LOCAL_ALIGNED_16(INTFLOAT, r,  [BUF_SIZE], [2]);
-    LOCAL_ALIGNED_16(INTFLOAT, l0, [BUF_SIZE], [2]);
-    LOCAL_ALIGNED_16(INTFLOAT, r0, [BUF_SIZE], [2]);
-    LOCAL_ALIGNED_16(INTFLOAT, l1, [BUF_SIZE], [2]);
-    LOCAL_ALIGNED_16(INTFLOAT, r1, [BUF_SIZE], [2]);
-    LOCAL_ALIGNED_16(INTFLOAT, h, [2], [4]);
-    LOCAL_ALIGNED_16(INTFLOAT, h_step, [2], [4]);
-
-    declare_func(void, INTFLOAT (*l)[2], INTFLOAT (*r)[2],
-                       INTFLOAT h[2][4], INTFLOAT h_step[2][4], int len);
-
-    randomize((INTFLOAT *)l, BUF_SIZE * 2);
-    randomize((INTFLOAT *)r, BUF_SIZE * 2);
-
-    for (i = 0; i < 2; i++) {
-        if (check_func(psdsp->stereo_interpolate[i], "ps_stereo_interpolate%s", i ? "_ipdopd" : "")) {
-            memcpy(l0, l, BUF_SIZE * 2 * sizeof(INTFLOAT));
-            memcpy(l1, l, BUF_SIZE * 2 * sizeof(INTFLOAT));
-            memcpy(r0, r, BUF_SIZE * 2 * sizeof(INTFLOAT));
-            memcpy(r1, r, BUF_SIZE * 2 * sizeof(INTFLOAT));
-
-            randomize((INTFLOAT *)h, 2 * 4);
-            randomize((INTFLOAT *)h_step, 2 * 4);
-            // Clear the least significant 14 bits of h_step, to avoid
-            // divergence when accumulating h_step BUF_SIZE times into
-            // a float variable which may or may not have extra intermediate
-            // precision. Therefore clear roughly log2(BUF_SIZE) less
-            // significant bits, to get the same result regardless of any
-            // extra precision in the accumulator.
-            clear_less_significant_bits((INTFLOAT *)h_step, 2 * 4, 14);
-
-            call_ref(l0, r0, h, h_step, BUF_SIZE);
-            call_new(l1, r1, h, h_step, BUF_SIZE);
-            if (!float_near_abs_eps_array((float *)l0, (float *)l1, EPS, BUF_SIZE * 2) ||
-                !float_near_abs_eps_array((float *)r0, (float *)r1, EPS, BUF_SIZE * 2))
-                fail();
-
-            memcpy(l1, l, BUF_SIZE * 2 * sizeof(INTFLOAT));
-            memcpy(r1, r, BUF_SIZE * 2 * sizeof(INTFLOAT));
-            bench_new(l1, r1, h, h_step, BUF_SIZE);
-        }
-    }
-}
-
-void checkasm_check_aacpsdsp(void)
-{
-    PSDSPContext psdsp;
-
-    ff_psdsp_init(&psdsp);
-
-    if (check_func(psdsp.add_squares, "ps_add_squares"))
-        test_add_squares();
-    report("add_squares");
-
-    if (check_func(psdsp.mul_pair_single, "ps_mul_pair_single"))
-        test_mul_pair_single();
-    report("mul_pair_single");
-
-    if (check_func(psdsp.hybrid_analysis, "ps_hybrid_analysis"))
-        test_hybrid_analysis();
-    report("hybrid_analysis");
-
-    if (check_func(psdsp.hybrid_analysis_ileave, "ps_hybrid_analysis_ileave"))
-        test_hybrid_analysis_ileave();
-    report("hybrid_analysis_ileave");
-
-    if (check_func(psdsp.hybrid_synthesis_deint, "ps_hybrid_synthesis_deint"))
-        test_hybrid_synthesis_deint();
-    report("hybrid_synthesis_deint");
-
-    test_stereo_interpolate(&psdsp);
-    report("stereo_interpolate");
-}
diff --git a/tests/checkasm/aarch64/checkasm.S b/tests/checkasm/aarch64/checkasm.S
deleted file mode 100644
index 89f2b77..0000000
--- a/tests/checkasm/aarch64/checkasm.S
+++ /dev/null
@@ -1,157 +0,0 @@
-/****************************************************************************
- * Assembly testing and benchmarking tool
- * Copyright (c) 2015 Martin Storsjo
- * Copyright (c) 2015 Janne Grunau
- *
- * 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 this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111, USA.
- *****************************************************************************/
-
-#include "libavutil/aarch64/asm.S"
-
-const register_init, align=4
-    .quad 0x21f86d66c8ca00ce
-    .quad 0x75b6ba21077c48ad
-    .quad 0xed56bb2dcb3c7736
-    .quad 0x8bda43d3fd1a7e06
-    .quad 0xb64a9c9e5d318408
-    .quad 0xdf9a54b303f1d3a3
-    .quad 0x4a75479abd64e097
-    .quad 0x249214109d5d1c88
-    .quad 0x1a1b2550a612b48c
-    .quad 0x79445c159ce79064
-    .quad 0x2eed899d5a28ddcd
-    .quad 0x86b2536fcd8cf636
-    .quad 0xb0856806085e7943
-    .quad 0x3f2bf84fc0fcca4e
-    .quad 0xacbd382dcf5b8de2
-    .quad 0xd229e1f5b281303f
-    .quad 0x71aeaff20b095fd9
-    .quad 0xab63e2e11fa38ed9
-endconst
-
-
-const error_message
-    .asciz "failed to preserve register"
-endconst
-
-
-// max number of args used by any asm function.
-#define MAX_ARGS 15
-
-#define CLOBBER_STACK ((8*MAX_ARGS + 15) & ~15)
-
-function checkasm_stack_clobber, export=1
-    mov         x3,  sp
-    mov         x2,  #CLOBBER_STACK
-1:
-    stp         x0,  x1,  [sp, #-16]!
-    subs        x2,  x2,  #16
-    b.gt        1b
-    mov         sp,  x3
-    ret
-endfunc
-
-#define ARG_STACK ((8*(MAX_ARGS - 8) + 15) & ~15)
-
-function checkasm_checked_call, export=1
-    stp         x29, x30, [sp, #-16]!
-    mov         x29, sp
-    stp         x19, x20, [sp, #-16]!
-    stp         x21, x22, [sp, #-16]!
-    stp         x23, x24, [sp, #-16]!
-    stp         x25, x26, [sp, #-16]!
-    stp         x27, x28, [sp, #-16]!
-    stp         d8,  d9,  [sp, #-16]!
-    stp         d10, d11, [sp, #-16]!
-    stp         d12, d13, [sp, #-16]!
-    stp         d14, d15, [sp, #-16]!
-
-    movrel      x9, register_init
-    ldp         d8,  d9,  [x9], #16
-    ldp         d10, d11, [x9], #16
-    ldp         d12, d13, [x9], #16
-    ldp         d14, d15, [x9], #16
-    ldp         x19, x20, [x9], #16
-    ldp         x21, x22, [x9], #16
-    ldp         x23, x24, [x9], #16
-    ldp         x25, x26, [x9], #16
-    ldp         x27, x28, [x9], #16
-
-    sub         sp,  sp,  #ARG_STACK
-.equ pos, 0
-.rept MAX_ARGS-8
-    // Skip the first 8 args, that are loaded into registers
-    ldr         x9, [x29, #16 + 8*8 + pos]
-    str         x9, [sp, #pos]
-.equ pos, pos + 8
-.endr
-
-    mov         x12, x0
-    ldp         x0,  x1,  [x29, #16]
-    ldp         x2,  x3,  [x29, #32]
-    ldp         x4,  x5,  [x29, #48]
-    ldp         x6,  x7,  [x29, #64]
-    blr         x12
-    add         sp,  sp,  #ARG_STACK
-    stp         x0,  x1,  [sp, #-16]!
-    movrel      x9, register_init
-    movi        v3.8h,  #0
-
-.macro check_reg_neon reg1, reg2
-    ldr         q1,  [x9], #16
-    uzp1        v2.2d,  v\reg1\().2d, v\reg2\().2d
-    eor         v1.16b, v1.16b, v2.16b
-    orr         v3.16b, v3.16b, v1.16b
-.endm
-    check_reg_neon  8,  9
-    check_reg_neon  10, 11
-    check_reg_neon  12, 13
-    check_reg_neon  14, 15
-    uqxtn       v3.8b,  v3.8h
-    umov        x3,  v3.d[0]
-
-.macro check_reg reg1, reg2
-    ldp         x0,  x1,  [x9], #16
-    eor         x0,  x0,  \reg1
-    eor         x1,  x1,  \reg2
-    orr         x3,  x3,  x0
-    orr         x3,  x3,  x1
-.endm
-    check_reg   x19, x20
-    check_reg   x21, x22
-    check_reg   x23, x24
-    check_reg   x25, x26
-    check_reg   x27, x28
-
-    cbz         x3,  0f
-
-    movrel      x0, error_message
-    bl          X(checkasm_fail_func)
-0:
-    ldp         x0,  x1,  [sp], #16
-    ldp         d14, d15, [sp], #16
-    ldp         d12, d13, [sp], #16
-    ldp         d10, d11, [sp], #16
-    ldp         d8,  d9,  [sp], #16
-    ldp         x27, x28, [sp], #16
-    ldp         x25, x26, [sp], #16
-    ldp         x23, x24, [sp], #16
-    ldp         x21, x22, [sp], #16
-    ldp         x19, x20, [sp], #16
-    ldp         x29, x30, [sp], #16
-    ret
-endfunc
diff --git a/tests/checkasm/alacdsp.c b/tests/checkasm/alacdsp.c
deleted file mode 100644
index cbf03f8..0000000
--- a/tests/checkasm/alacdsp.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (c) 2015 James Almer
- *
- * 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.
- */
-
-#include <string.h>
-#include "checkasm.h"
-#include "libavcodec/alacdsp.h"
-#include "libavcodec/mathops.h"
-#include "libavutil/common.h"
-#include "libavutil/internal.h"
-
-#define BUF_SIZE 256
-#define MAX_CHANNELS 2
-
-#define randomize_buffers()                           \
-    do {                                              \
-        int i;                                        \
-        for (i = 0; i < BUF_SIZE*MAX_CHANNELS; i++) { \
-            int32_t r = sign_extend(rnd(), 24);       \
-            ref_buf[i] = r;                           \
-            new_buf[i] = r;                           \
-        }                                             \
-    } while (0)
-
-static void check_decorrelate_stereo(void)
-{
-    LOCAL_ALIGNED_16(int32_t, ref_buf, [BUF_SIZE*MAX_CHANNELS]);
-    LOCAL_ALIGNED_16(int32_t, new_buf, [BUF_SIZE*MAX_CHANNELS]);
-    int32_t *ref[2] = { &ref_buf[BUF_SIZE*0], &ref_buf[BUF_SIZE*1] };
-    int32_t *new[2] = { &new_buf[BUF_SIZE*0], &new_buf[BUF_SIZE*1] };
-    ALACDSPContext c;
-
-    ff_alacdsp_init(&c);
-    if (check_func(c.decorrelate_stereo, "alac_decorrelate_stereo")) {
-        int len    = (rnd() & 0xFF) + 1;
-        int shift  =  rnd() & 0x1F;
-        int weight =  rnd() & 0xFF;
-        declare_func(void, int32_t *buf[2], int len, int shift, int weight);
-
-        randomize_buffers();
-        call_ref(ref, len, shift, weight);
-        call_new(new, len, shift, weight);
-        if (memcmp(ref[0], new[0], len * sizeof(int32_t)) ||
-            memcmp(ref[1], new[1], len * sizeof(int32_t)))
-            fail();
-        bench_new(new, BUF_SIZE, shift, weight);
-    }
-
-    report("decorrelate_stereo");
-}
-
-#undef randomize_buffers
-#define randomize_buffers()                           \
-    do {                                              \
-        int i, j;                                     \
-        for (i = 0; i < BUF_SIZE; i++) {              \
-            for (j = 0; j < ch; j++) {                \
-                int32_t r = sign_extend(rnd(), 24);   \
-                ref[j][i] = r;                        \
-                new[j][i] = r;                        \
-                r = rnd() & 0xFF;                     \
-                ref_ebb[j][i] = r;                    \
-                new_ebb[j][i] = r;                    \
-            }                                         \
-        }                                             \
-    } while (0)
-
-static void check_append_extra_bits(void)
-{
-    LOCAL_ALIGNED_16(int32_t, ref_buf, [BUF_SIZE*MAX_CHANNELS*2]);
-    LOCAL_ALIGNED_16(int32_t, new_buf, [BUF_SIZE*MAX_CHANNELS*2]);
-    int32_t *ref[2]     = { &ref_buf[BUF_SIZE*0], &ref_buf[BUF_SIZE*1] };
-    int32_t *new[2]     = { &new_buf[BUF_SIZE*0], &new_buf[BUF_SIZE*1] };
-    int32_t *ref_ebb[2] = { &ref_buf[BUF_SIZE*2], &ref_buf[BUF_SIZE*3] };
-    int32_t *new_ebb[2] = { &new_buf[BUF_SIZE*2], &new_buf[BUF_SIZE*3] };
-    ALACDSPContext c;
-    static const char * const channels[2] = { "mono", "stereo" };
-    int ch;
-
-    ff_alacdsp_init(&c);
-    for (ch = 1; ch <= 2; ch++) {
-        if (check_func(c.append_extra_bits[ch-1], "alac_append_extra_bits_%s", channels[ch-1])) {
-            int len    = (rnd() & 0xFF) + 1;
-            declare_func(void, int32_t *buf[2], int32_t *ebb[2], int ebits, int ch, int len);
-
-            randomize_buffers();
-            call_ref(ref, ref_ebb, 8, ch, len);
-            call_new(new, new_ebb, 8, ch, len);
-            if (            memcmp(ref[0], new[0], len * sizeof(int32_t)) ||
-                (ch == 2 && memcmp(ref[1], new[1], len * sizeof(int32_t))))
-                fail();
-            bench_new(new, new_ebb, 8, ch, BUF_SIZE);
-        }
-    }
-
-    report("append_extra_bits");
-}
-
-void checkasm_check_alacdsp(void)
-{
-    check_decorrelate_stereo();
-    check_append_extra_bits();
-}
diff --git a/tests/checkasm/arm/checkasm.S b/tests/checkasm/arm/checkasm.S
deleted file mode 100644
index 2051b29..0000000
--- a/tests/checkasm/arm/checkasm.S
+++ /dev/null
@@ -1,168 +0,0 @@
-/****************************************************************************
- * Assembly testing and benchmarking tool
- * Copyright (c) 2015 Martin Storsjo
- * Copyright (c) 2015 Janne Grunau
- *
- * 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 this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111, USA.
- *****************************************************************************/
-
-#include "libavutil/arm/asm.S"
-
-/* override fpu so that NEON instructions are rejected */
-#if HAVE_VFP
-FPU     .fpu            vfp
-ELF     .eabi_attribute 10, 0           @ suppress Tag_FP_arch
-#endif
-
-const register_init, align=3
-    .quad 0x21f86d66c8ca00ce
-    .quad 0x75b6ba21077c48ad
-    .quad 0xed56bb2dcb3c7736
-    .quad 0x8bda43d3fd1a7e06
-    .quad 0xb64a9c9e5d318408
-    .quad 0xdf9a54b303f1d3a3
-    .quad 0x4a75479abd64e097
-    .quad 0x249214109d5d1c88
-endconst
-
-const error_message_fpscr
-    .asciz "failed to preserve register FPSCR, changed bits: %x"
-error_message_gpr:
-    .asciz "failed to preserve register r%d"
-error_message_vfp:
-    .asciz "failed to preserve register d%d"
-endconst
-
-@ max number of args used by any asm function.
-#define MAX_ARGS 15
-
-#define ARG_STACK 4*(MAX_ARGS - 4)
-
-@ align the used stack space to 8 to preserve the stack alignment
-#define ARG_STACK_A (((ARG_STACK + pushed + 7) & ~7) - pushed)
-
-.macro clobbercheck variant
-.equ pushed, 4*9
-function checkasm_checked_call_\variant, export=1
-    push        {r4-r11, lr}
-.ifc \variant, vfp
-    vpush       {d8-d15}
-    fmrx        r4,  FPSCR
-    push        {r4}
-.equ pushed, pushed + 16*4 + 4
-.endif
-
-    movrel      r12, register_init
-.ifc \variant, vfp
-    vldm        r12, {d8-d15}
-.endif
-    ldm         r12, {r4-r11}
-
-    sub         sp,  sp,  #ARG_STACK_A
-.equ pos, 0
-.rept MAX_ARGS-4
-    ldr         r12, [sp, #ARG_STACK_A + pushed + 8 + pos]
-    str         r12, [sp, #pos]
-.equ pos, pos + 4
-.endr
-
-    mov         r12, r0
-    mov         r0,  r2
-    mov         r1,  r3
-    ldrd        r2,  r3,  [sp, #ARG_STACK_A + pushed]
-    blx         r12
-    add         sp,  sp,  #ARG_STACK_A
-
-    push        {r0, r1}
-    movrel      r12, register_init
-.ifc \variant, vfp
-.macro check_reg_vfp, dreg, offset
-    ldrd        r2,  r3,  [r12, #8 * (\offset)]
-    vmov        r0,  lr,  \dreg
-    eor         r2,  r2,  r0
-    eor         r3,  r3,  lr
-    orrs        r2,  r2,  r3
-    bne         4f
-.endm
-
-.irp n, 8, 9, 10, 11, 12, 13, 14, 15
-    @ keep track of the checked double/SIMD register
-    mov         r1,  #\n
-    check_reg_vfp d\n, \n-8
-.endr
-.purgem check_reg_vfp
-
-    fmrx        r1,  FPSCR
-    ldr         r3,  [sp, #8]
-    eor         r1,  r1,  r3
-    @ Ignore changes in bits 0-4 and 7
-    bic         r1,  r1,  #0x9f
-    @ Ignore changes in the topmost 5 bits
-    bics        r1,  r1,  #0xf8000000
-    bne         3f
-.endif
-
-    @ keep track of the checked GPR
-    mov         r1,  #4
-.macro check_reg reg1, reg2=
-    ldrd        r2,  r3,  [r12], #8
-    eors        r2,  r2,  \reg1
-    bne         2f
-    add         r1,  r1,  #1
-.ifnb \reg2
-    eors        r3,  r3,  \reg2
-    bne         2f
-.endif
-    add         r1,  r1,  #1
-.endm
-    check_reg   r4,  r5
-    check_reg   r6,  r7
-@ r9 is a volatile register in the ios ABI
-#ifdef __APPLE__
-    check_reg   r8
-#else
-    check_reg   r8,  r9
-#endif
-    check_reg   r10, r11
-.purgem check_reg
-
-    b           0f
-4:
-    movrel      r0, error_message_vfp
-    b           1f
-3:
-    movrel      r0, error_message_fpscr
-    b           1f
-2:
-    movrel      r0, error_message_gpr
-1:
-    blx         X(checkasm_fail_func)
-0:
-    pop         {r0, r1}
-.ifc \variant, vfp
-    pop         {r2}
-    fmxr        FPSCR, r2
-    vpop        {d8-d15}
-.endif
-    pop         {r4-r11, pc}
-endfunc
-.endm
-
-#if HAVE_VFP || HAVE_NEON
-clobbercheck vfp
-#endif
-clobbercheck novfp
diff --git a/tests/checkasm/audiodsp.c b/tests/checkasm/audiodsp.c
deleted file mode 100644
index 7c4e16e..0000000
--- a/tests/checkasm/audiodsp.c
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * 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.
- */
-
-#include <math.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "libavcodec/audiodsp.h"
-
-#include "libavutil/common.h"
-#include "libavutil/intreadwrite.h"
-
-#include "checkasm.h"
-
-#define MAX_SIZE (32 * 128)
-
-#define randomize_float(buf, len)                               \
-    do {                                                        \
-        int i;                                                  \
-        for (i = 0; i < len; i++) {                             \
-            float f = (float)rnd() / (UINT_MAX >> 5) - 16.0f;   \
-            buf[i] = f;                                         \
-        }                                                       \
-    } while (0)
-
-#define randomize_int(buf, len, size, bits)                         \
-    do {                                                            \
-        int i;                                                      \
-        for (i = 0; i < len; i++) {                                 \
-            uint ## size ## _t r = rnd() & ((1LL << bits) - 1);     \
-            AV_WN ## size ## A(buf + i, -(1LL << (bits - 1)) + r);  \
-        }                                                           \
-    } while (0)
-
-void checkasm_check_audiodsp(void)
-{
-    AudioDSPContext adsp;
-
-    ff_audiodsp_init(&adsp);
-
-    if (check_func(adsp.scalarproduct_int16, "audiodsp.scalarproduct_int16")) {
-        LOCAL_ALIGNED(32, int16_t, v1, [MAX_SIZE]);
-        LOCAL_ALIGNED(32, int16_t, v2, [MAX_SIZE]);
-        unsigned int len_bits_minus4, v1_bits, v2_bits, len;
-        int32_t res0, res1;
-
-        declare_func_emms(AV_CPU_FLAG_MMX, int32_t, const int16_t *v1, const int16_t *v2, int len);
-
-        // generate random 5-12bit vector length
-        len_bits_minus4 = rnd() % 8;
-        len = rnd() & ((1 << len_bits_minus4) - 1);
-        len = 16 * FFMAX(len, 1);
-
-        // generate the bit counts for each of the vectors such that the result
-        // fits into int32
-        v1_bits = 1 + rnd() % 15;
-        v2_bits = FFMIN(32 - (len_bits_minus4 + 4) - v1_bits - 1, 15);
-
-        randomize_int(v1, MAX_SIZE, 16, v1_bits + 1);
-        randomize_int(v2, MAX_SIZE, 16, v2_bits + 1);
-
-        res0 = call_ref(v1, v2, len);
-        res1 = call_new(v1, v2, len);
-        if (res0 != res1)
-            fail();
-        bench_new(v1, v2, MAX_SIZE);
-    }
-
-    if (check_func(adsp.vector_clip_int32, "audiodsp.vector_clip_int32")) {
-        LOCAL_ALIGNED(32, int32_t, src,  [MAX_SIZE]);
-        LOCAL_ALIGNED(32, int32_t, dst0, [MAX_SIZE]);
-        LOCAL_ALIGNED(32, int32_t, dst1, [MAX_SIZE]);
-        int32_t val1, val2, min, max;
-        int len;
-
-        declare_func_emms(AV_CPU_FLAG_MMX, void, int32_t *dst, const int32_t *src,
-                          int32_t min, int32_t max, unsigned int len);
-
-        val1 = ((int32_t)rnd());
-        val1 = FFSIGN(val1) * (val1 & ((1 << 24) - 1));
-        val2 = ((int32_t)rnd());
-        val2 = FFSIGN(val2) * (val2 & ((1 << 24) - 1));
-
-        min = FFMIN(val1, val2);
-        max = FFMAX(val1, val2);
-
-        randomize_int(src, MAX_SIZE, 32, 32);
-
-        len = rnd() % 128;
-        len = 32 * FFMAX(len, 1);
-
-        call_ref(dst0, src, min, max, len);
-        call_new(dst1, src, min, max, len);
-        if (memcmp(dst0, dst1, len * sizeof(*dst0)))
-            fail();
-        bench_new(dst1, src, min, max, MAX_SIZE);
-    }
-
-    if (check_func(adsp.vector_clipf, "audiodsp.vector_clipf")) {
-        LOCAL_ALIGNED(32, float, src, [MAX_SIZE]);
-        LOCAL_ALIGNED(32, float, dst0, [MAX_SIZE]);
-        LOCAL_ALIGNED(32, float, dst1, [MAX_SIZE]);
-        float val1, val2, min, max;
-        int i, len;
-
-        declare_func_emms(AV_CPU_FLAG_MMX, void, float *dst, const float *src,
-                          int len, float min, float max);
-
-        val1 = (float)rnd() / (UINT_MAX >> 1) - 1.0f;
-        val2 = (float)rnd() / (UINT_MAX >> 1) - 1.0f;
-
-        min = FFMIN(val1, val2);
-        max = FFMAX(val1, val2);
-
-        randomize_float(src, MAX_SIZE);
-
-        len = rnd() % 128;
-        len = 16 * FFMAX(len, 1);
-
-        call_ref(dst0, src, len, min, max);
-        call_new(dst1, src, len, min, max);
-        for (i = 0; i < len; i++) {
-            if (!float_near_ulp_array(dst0, dst1, 3, len))
-                fail();
-        }
-        bench_new(dst1, src, MAX_SIZE, min, max);
-    }
-
-    report("audiodsp");
-}
diff --git a/tests/checkasm/blockdsp.c b/tests/checkasm/blockdsp.c
deleted file mode 100644
index c753506..0000000
--- a/tests/checkasm/blockdsp.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (c) 2015 Henrik Gramner
- *
- * 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.
- */
-
-#include <string.h>
-
-#include "checkasm.h"
-
-#include "libavcodec/blockdsp.h"
-
-#include "libavutil/common.h"
-#include "libavutil/internal.h"
-#include "libavutil/intreadwrite.h"
-
-#define randomize_buffers(size)             \
-    do {                                    \
-        int i;                              \
-        for (i = 0; i < size; i++) {        \
-            uint16_t r = rnd();             \
-            AV_WN16A(buf0 + i, r);          \
-            AV_WN16A(buf1 + i, r);          \
-        }                                   \
-    } while (0)
-
-#define check_clear(func, size)                                     \
-do {                                                                \
-    if (check_func(h.func, "blockdsp." #func)) {                    \
-        declare_func_emms(AV_CPU_FLAG_MMX, void, int16_t *block);   \
-        randomize_buffers(size);                                    \
-        call_ref(buf0);                                             \
-        call_new(buf1);                                             \
-        if (memcmp(buf0, buf1, sizeof(*buf0) * size))               \
-            fail();                                                 \
-        bench_new(buf0);                                            \
-    }                                                               \
-} while (0)
-
-void checkasm_check_blockdsp(void)
-{
-    LOCAL_ALIGNED_32(uint16_t, buf0, [6 * 8 * 8]);
-    LOCAL_ALIGNED_32(uint16_t, buf1, [6 * 8 * 8]);
-
-    AVCodecContext avctx = { 0 };
-    BlockDSPContext h;
-
-    ff_blockdsp_init(&h, &avctx);
-
-    check_clear(clear_block,  8 * 8);
-    check_clear(clear_blocks, 8 * 8 * 6);
-
-    report("blockdsp");
-}
diff --git a/tests/checkasm/bswapdsp.c b/tests/checkasm/bswapdsp.c
deleted file mode 100644
index 5f75550..0000000
--- a/tests/checkasm/bswapdsp.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2015 Henrik Gramner
- *
- * 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.
- */
-
-#include <string.h>
-#include "checkasm.h"
-#include "libavcodec/bswapdsp.h"
-#include "libavutil/common.h"
-#include "libavutil/internal.h"
-#include "libavutil/intreadwrite.h"
-
-#define BUF_SIZE 512
-
-#define randomize_buffers()                 \
-    do {                                    \
-        int i;                              \
-        for (i = 0; i < BUF_SIZE; i += 4) { \
-            uint32_t r = rnd();             \
-            AV_WN32A(src0 + i, r);          \
-            AV_WN32A(src1 + i, r);          \
-            r = rnd();                      \
-            AV_WN32A(dst0 + i, r);          \
-            AV_WN32A(dst1 + i, r);          \
-        }                                   \
-    } while (0)
-
-#define check_bswap(type)                                                                  \
-    do {                                                                                   \
-        int w;                                                                             \
-        declare_func(void, type *dst, const type *src, int w);                             \
-                                                                                           \
-        for (w = 0; w < BUF_SIZE / sizeof(type); w++) {                                    \
-            int offset = (BUF_SIZE / sizeof(type) - w) & 15; /* Test various alignments */ \
-            randomize_buffers();                                                           \
-            call_ref((type *)dst0 + offset, (type *)src0 + offset, w);                     \
-            call_new((type *)dst1 + offset, (type *)src1 + offset, w);                     \
-            if (memcmp(src0, src1, BUF_SIZE) || memcmp(dst0, dst1, BUF_SIZE))              \
-                fail();                                                                    \
-            bench_new((type *)dst1 + offset, (type *)src1 + offset, w);                    \
-        }                                                                                  \
-    } while (0)
-
-void checkasm_check_bswapdsp(void)
-{
-    LOCAL_ALIGNED_16(uint8_t, src0, [BUF_SIZE]);
-    LOCAL_ALIGNED_16(uint8_t, src1, [BUF_SIZE]);
-    LOCAL_ALIGNED_16(uint8_t, dst0, [BUF_SIZE]);
-    LOCAL_ALIGNED_16(uint8_t, dst1, [BUF_SIZE]);
-    BswapDSPContext h;
-
-    ff_bswapdsp_init(&h);
-
-    if (check_func(h.bswap_buf, "bswap_buf"))
-        check_bswap(uint32_t);
-
-    if (check_func(h.bswap16_buf, "bswap16_buf"))
-        check_bswap(uint16_t);
-
-    report("bswap");
-}
diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c
deleted file mode 100644
index d67147a..0000000
--- a/tests/checkasm/checkasm.c
+++ /dev/null
@@ -1,838 +0,0 @@
-/*
- * Assembly testing and benchmarking tool
- * Copyright (c) 2015 Henrik Gramner
- * Copyright (c) 2008 Loren Merritt
- *
- * 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.
- */
-
-#include "config.h"
-
-#if CONFIG_LINUX_PERF
-# ifndef _GNU_SOURCE
-#  define _GNU_SOURCE // for syscall (performance monitoring API)
-# endif
-#endif
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "checkasm.h"
-#include "libavutil/common.h"
-#include "libavutil/cpu.h"
-#include "libavutil/intfloat.h"
-#include "libavutil/random_seed.h"
-
-#if HAVE_IO_H
-#include <io.h>
-#endif
-
-#if HAVE_SETCONSOLETEXTATTRIBUTE && HAVE_GETSTDHANDLE
-#include <windows.h>
-#define COLOR_RED    FOREGROUND_RED
-#define COLOR_GREEN  FOREGROUND_GREEN
-#define COLOR_YELLOW (FOREGROUND_RED|FOREGROUND_GREEN)
-#else
-#define COLOR_RED    1
-#define COLOR_GREEN  2
-#define COLOR_YELLOW 3
-#endif
-
-#if HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#if !HAVE_ISATTY
-#define isatty(fd) 1
-#endif
-
-#if ARCH_ARM && HAVE_ARMV5TE_EXTERNAL
-#include "libavutil/arm/cpu.h"
-
-void (*checkasm_checked_call)(void *func, int dummy, ...) = checkasm_checked_call_novfp;
-#endif
-
-/* List of tests to invoke */
-static const struct {
-    const char *name;
-    void (*func)(void);
-} tests[] = {
-#if CONFIG_AVCODEC
-    #if CONFIG_AAC_DECODER
-        { "aacpsdsp", checkasm_check_aacpsdsp },
-        { "sbrdsp",   checkasm_check_sbrdsp },
-    #endif
-    #if CONFIG_ALAC_DECODER
-        { "alacdsp", checkasm_check_alacdsp },
-    #endif
-    #if CONFIG_AUDIODSP
-        { "audiodsp", checkasm_check_audiodsp },
-    #endif
-    #if CONFIG_BLOCKDSP
-        { "blockdsp", checkasm_check_blockdsp },
-    #endif
-    #if CONFIG_BSWAPDSP
-        { "bswapdsp", checkasm_check_bswapdsp },
-    #endif
-    #if CONFIG_DCA_DECODER
-        { "synth_filter", checkasm_check_synth_filter },
-    #endif
-    #if CONFIG_EXR_DECODER
-        { "exrdsp", checkasm_check_exrdsp },
-    #endif
-    #if CONFIG_FLACDSP
-        { "flacdsp", checkasm_check_flacdsp },
-    #endif
-    #if CONFIG_FMTCONVERT
-        { "fmtconvert", checkasm_check_fmtconvert },
-    #endif
-    #if CONFIG_G722DSP
-        { "g722dsp", checkasm_check_g722dsp },
-    #endif
-    #if CONFIG_H264DSP
-        { "h264dsp", checkasm_check_h264dsp },
-    #endif
-    #if CONFIG_H264PRED
-        { "h264pred", checkasm_check_h264pred },
-    #endif
-    #if CONFIG_H264QPEL
-        { "h264qpel", checkasm_check_h264qpel },
-    #endif
-    #if CONFIG_HEVC_DECODER
-        { "hevc_add_res", checkasm_check_hevc_add_res },
-        { "hevc_idct", checkasm_check_hevc_idct },
-        { "hevc_sao", checkasm_check_hevc_sao },
-    #endif
-    #if CONFIG_HUFFYUV_DECODER
-        { "huffyuvdsp", checkasm_check_huffyuvdsp },
-    #endif
-    #if CONFIG_JPEG2000_DECODER
-        { "jpeg2000dsp", checkasm_check_jpeg2000dsp },
-    #endif
-    #if CONFIG_HUFFYUVDSP
-        { "llviddsp", checkasm_check_llviddsp },
-    #endif
-    #if CONFIG_LLVIDENCDSP
-        { "llviddspenc", checkasm_check_llviddspenc },
-    #endif
-    #if CONFIG_OPUS_DECODER
-        { "opusdsp", checkasm_check_opusdsp },
-    #endif
-    #if CONFIG_PIXBLOCKDSP
-        { "pixblockdsp", checkasm_check_pixblockdsp },
-    #endif
-    #if CONFIG_UTVIDEO_DECODER
-        { "utvideodsp", checkasm_check_utvideodsp },
-    #endif
-    #if CONFIG_V210_DECODER
-        { "v210dec", checkasm_check_v210dec },
-    #endif
-    #if CONFIG_V210_ENCODER
-        { "v210enc", checkasm_check_v210enc },
-    #endif
-    #if CONFIG_VP8DSP
-        { "vp8dsp", checkasm_check_vp8dsp },
-    #endif
-    #if CONFIG_VP9_DECODER
-        { "vp9dsp", checkasm_check_vp9dsp },
-    #endif
-    #if CONFIG_VIDEODSP
-        { "videodsp", checkasm_check_videodsp },
-    #endif
-#endif
-#if CONFIG_AVFILTER
-    #if CONFIG_AFIR_FILTER
-        { "af_afir", checkasm_check_afir },
-    #endif
-    #if CONFIG_BLEND_FILTER
-        { "vf_blend", checkasm_check_blend },
-    #endif
-    #if CONFIG_COLORSPACE_FILTER
-        { "vf_colorspace", checkasm_check_colorspace },
-    #endif
-    #if CONFIG_EQ_FILTER
-        { "vf_eq", checkasm_check_vf_eq },
-    #endif
-    #if CONFIG_GBLUR_FILTER
-        { "vf_gblur", checkasm_check_vf_gblur },
-    #endif
-    #if CONFIG_HFLIP_FILTER
-        { "vf_hflip", checkasm_check_vf_hflip },
-    #endif
-    #if CONFIG_NLMEANS_FILTER
-        { "vf_nlmeans", checkasm_check_nlmeans },
-    #endif
-    #if CONFIG_THRESHOLD_FILTER
-        { "vf_threshold", checkasm_check_vf_threshold },
-    #endif
-#endif
-#if CONFIG_SWSCALE
-    { "sw_rgb", checkasm_check_sw_rgb },
-#endif
-#if CONFIG_AVUTIL
-        { "fixed_dsp", checkasm_check_fixed_dsp },
-        { "float_dsp", checkasm_check_float_dsp },
-#endif
-    { NULL }
-};
-
-/* List of cpu flags to check */
-static const struct {
-    const char *name;
-    const char *suffix;
-    int flag;
-} cpus[] = {
-#if   ARCH_AARCH64
-    { "ARMV8",    "armv8",    AV_CPU_FLAG_ARMV8 },
-    { "NEON",     "neon",     AV_CPU_FLAG_NEON },
-#elif ARCH_ARM
-    { "ARMV5TE",  "armv5te",  AV_CPU_FLAG_ARMV5TE },
-    { "ARMV6",    "armv6",    AV_CPU_FLAG_ARMV6 },
-    { "ARMV6T2",  "armv6t2",  AV_CPU_FLAG_ARMV6T2 },
-    { "VFP",      "vfp",      AV_CPU_FLAG_VFP },
-    { "VFP_VM",   "vfp_vm",   AV_CPU_FLAG_VFP_VM },
-    { "VFPV3",    "vfp3",     AV_CPU_FLAG_VFPV3 },
-    { "NEON",     "neon",     AV_CPU_FLAG_NEON },
-#elif ARCH_PPC
-    { "ALTIVEC",  "altivec",  AV_CPU_FLAG_ALTIVEC },
-    { "VSX",      "vsx",      AV_CPU_FLAG_VSX },
-    { "POWER8",   "power8",   AV_CPU_FLAG_POWER8 },
-#elif ARCH_X86
-    { "MMX",      "mmx",      AV_CPU_FLAG_MMX|AV_CPU_FLAG_CMOV },
-    { "MMXEXT",   "mmxext",   AV_CPU_FLAG_MMXEXT },
-    { "3DNOW",    "3dnow",    AV_CPU_FLAG_3DNOW },
-    { "3DNOWEXT", "3dnowext", AV_CPU_FLAG_3DNOWEXT },
-    { "SSE",      "sse",      AV_CPU_FLAG_SSE },
-    { "SSE2",     "sse2",     AV_CPU_FLAG_SSE2|AV_CPU_FLAG_SSE2SLOW },
-    { "SSE3",     "sse3",     AV_CPU_FLAG_SSE3|AV_CPU_FLAG_SSE3SLOW },
-    { "SSSE3",    "ssse3",    AV_CPU_FLAG_SSSE3|AV_CPU_FLAG_ATOM },
-    { "SSE4.1",   "sse4",     AV_CPU_FLAG_SSE4 },
-    { "SSE4.2",   "sse42",    AV_CPU_FLAG_SSE42 },
-    { "AES-NI",   "aesni",    AV_CPU_FLAG_AESNI },
-    { "AVX",      "avx",      AV_CPU_FLAG_AVX },
-    { "XOP",      "xop",      AV_CPU_FLAG_XOP },
-    { "FMA3",     "fma3",     AV_CPU_FLAG_FMA3 },
-    { "FMA4",     "fma4",     AV_CPU_FLAG_FMA4 },
-    { "AVX2",     "avx2",     AV_CPU_FLAG_AVX2 },
-    { "AVX-512",  "avx512",   AV_CPU_FLAG_AVX512 },
-#endif
-    { NULL }
-};
-
-typedef struct CheckasmFuncVersion {
-    struct CheckasmFuncVersion *next;
-    void *func;
-    int ok;
-    int cpu;
-    CheckasmPerf perf;
-} CheckasmFuncVersion;
-
-/* Binary search tree node */
-typedef struct CheckasmFunc {
-    struct CheckasmFunc *child[2];
-    CheckasmFuncVersion versions;
-    uint8_t color; /* 0 = red, 1 = black */
-    char name[1];
-} CheckasmFunc;
-
-/* Internal state */
-static struct {
-    CheckasmFunc *funcs;
-    CheckasmFunc *current_func;
-    CheckasmFuncVersion *current_func_ver;
-    const char *current_test_name;
-    const char *bench_pattern;
-    int bench_pattern_len;
-    int num_checked;
-    int num_failed;
-
-    /* perf */
-    int nop_time;
-    int sysfd;
-
-    int cpu_flag;
-    const char *cpu_flag_name;
-    const char *test_name;
-} state;
-
-/* PRNG state */
-AVLFG checkasm_lfg;
-
-/* float compare support code */
-static int is_negative(union av_intfloat32 u)
-{
-    return u.i >> 31;
-}
-
-int float_near_ulp(float a, float b, unsigned max_ulp)
-{
-    union av_intfloat32 x, y;
-
-    x.f = a;
-    y.f = b;
-
-    if (is_negative(x) != is_negative(y)) {
-        // handle -0.0 == +0.0
-        return a == b;
-    }
-
-    if (llabs((int64_t)x.i - y.i) <= max_ulp)
-        return 1;
-
-    return 0;
-}
-
-int float_near_ulp_array(const float *a, const float *b, unsigned max_ulp,
-                         unsigned len)
-{
-    unsigned i;
-
-    for (i = 0; i < len; i++) {
-        if (!float_near_ulp(a[i], b[i], max_ulp))
-            return 0;
-    }
-    return 1;
-}
-
-int float_near_abs_eps(float a, float b, float eps)
-{
-    float abs_diff = fabsf(a - b);
-    if (abs_diff < eps)
-        return 1;
-
-    fprintf(stderr, "test failed comparing %g with %g (abs diff=%g with EPS=%g)\n", a, b, abs_diff, eps);
-
-    return 0;
-}
-
-int float_near_abs_eps_array(const float *a, const float *b, float eps,
-                         unsigned len)
-{
-    unsigned i;
-
-    for (i = 0; i < len; i++) {
-        if (!float_near_abs_eps(a[i], b[i], eps))
-            return 0;
-    }
-    return 1;
-}
-
-int float_near_abs_eps_ulp(float a, float b, float eps, unsigned max_ulp)
-{
-    return float_near_ulp(a, b, max_ulp) || float_near_abs_eps(a, b, eps);
-}
-
-int float_near_abs_eps_array_ulp(const float *a, const float *b, float eps,
-                         unsigned max_ulp, unsigned len)
-{
-    unsigned i;
-
-    for (i = 0; i < len; i++) {
-        if (!float_near_abs_eps_ulp(a[i], b[i], eps, max_ulp))
-            return 0;
-    }
-    return 1;
-}
-
-int double_near_abs_eps(double a, double b, double eps)
-{
-    double abs_diff = fabs(a - b);
-
-    return abs_diff < eps;
-}
-
-int double_near_abs_eps_array(const double *a, const double *b, double eps,
-                              unsigned len)
-{
-    unsigned i;
-
-    for (i = 0; i < len; i++) {
-        if (!double_near_abs_eps(a[i], b[i], eps))
-            return 0;
-    }
-    return 1;
-}
-
-/* Print colored text to stderr if the terminal supports it */
-static void color_printf(int color, const char *fmt, ...)
-{
-    static int use_color = -1;
-    va_list arg;
-
-#if HAVE_SETCONSOLETEXTATTRIBUTE && HAVE_GETSTDHANDLE
-    static HANDLE con;
-    static WORD org_attributes;
-
-    if (use_color < 0) {
-        CONSOLE_SCREEN_BUFFER_INFO con_info;
-        con = GetStdHandle(STD_ERROR_HANDLE);
-        if (con && con != INVALID_HANDLE_VALUE && GetConsoleScreenBufferInfo(con, &con_info)) {
-            org_attributes = con_info.wAttributes;
-            use_color = 1;
-        } else
-            use_color = 0;
-    }
-    if (use_color)
-        SetConsoleTextAttribute(con, (org_attributes & 0xfff0) | (color & 0x0f));
-#else
-    if (use_color < 0) {
-        const char *term = getenv("TERM");
-        use_color = term && strcmp(term, "dumb") && isatty(2);
-    }
-    if (use_color)
-        fprintf(stderr, "\x1b[%d;3%dm", (color & 0x08) >> 3, color & 0x07);
-#endif
-
-    va_start(arg, fmt);
-    vfprintf(stderr, fmt, arg);
-    va_end(arg);
-
-    if (use_color) {
-#if HAVE_SETCONSOLETEXTATTRIBUTE && HAVE_GETSTDHANDLE
-        SetConsoleTextAttribute(con, org_attributes);
-#else
-        fprintf(stderr, "\x1b[0m");
-#endif
-    }
-}
-
-/* Deallocate a tree */
-static void destroy_func_tree(CheckasmFunc *f)
-{
-    if (f) {
-        CheckasmFuncVersion *v = f->versions.next;
-        while (v) {
-            CheckasmFuncVersion *next = v->next;
-            free(v);
-            v = next;
-        }
-
-        destroy_func_tree(f->child[0]);
-        destroy_func_tree(f->child[1]);
-        free(f);
-    }
-}
-
-/* Allocate a zero-initialized block, clean up and exit on failure */
-static void *checkasm_malloc(size_t size)
-{
-    void *ptr = calloc(1, size);
-    if (!ptr) {
-        fprintf(stderr, "checkasm: malloc failed\n");
-        destroy_func_tree(state.funcs);
-        exit(1);
-    }
-    return ptr;
-}
-
-/* Get the suffix of the specified cpu flag */
-static const char *cpu_suffix(int cpu)
-{
-    int i = FF_ARRAY_ELEMS(cpus);
-
-    while (--i >= 0)
-        if (cpu & cpus[i].flag)
-            return cpus[i].suffix;
-
-    return "c";
-}
-
-static int cmp_nop(const void *a, const void *b)
-{
-    return *(const uint16_t*)a - *(const uint16_t*)b;
-}
-
-/* Measure the overhead of the timing code (in decicycles) */
-static int measure_nop_time(void)
-{
-    uint16_t nops[10000];
-    int i, nop_sum = 0;
-    av_unused const int sysfd = state.sysfd;
-
-    uint64_t t = 0;
-    for (i = 0; i < 10000; i++) {
-        PERF_START(t);
-        PERF_STOP(t);
-        nops[i] = t;
-    }
-
-    qsort(nops, 10000, sizeof(uint16_t), cmp_nop);
-    for (i = 2500; i < 7500; i++)
-        nop_sum += nops[i];
-
-    return nop_sum / 500;
-}
-
-/* Print benchmark results */
-static void print_benchs(CheckasmFunc *f)
-{
-    if (f) {
-        print_benchs(f->child[0]);
-
-        /* Only print functions with at least one assembly version */
-        if (f->versions.cpu || f->versions.next) {
-            CheckasmFuncVersion *v = &f->versions;
-            do {
-                CheckasmPerf *p = &v->perf;
-                if (p->iterations) {
-                    int decicycles = (10*p->cycles/p->iterations - state.nop_time) / 4;
-                    printf("%s_%s: %d.%d\n", f->name, cpu_suffix(v->cpu), decicycles/10, decicycles%10);
-                }
-            } while ((v = v->next));
-        }
-
-        print_benchs(f->child[1]);
-    }
-}
-
-/* ASCIIbetical sort except preserving natural order for numbers */
-static int cmp_func_names(const char *a, const char *b)
-{
-    const char *start = a;
-    int ascii_diff, digit_diff;
-
-    for (; !(ascii_diff = *(const unsigned char*)a - *(const unsigned char*)b) && *a; a++, b++);
-    for (; av_isdigit(*a) && av_isdigit(*b); a++, b++);
-
-    if (a > start && av_isdigit(a[-1]) && (digit_diff = av_isdigit(*a) - av_isdigit(*b)))
-        return digit_diff;
-
-    return ascii_diff;
-}
-
-/* Perform a tree rotation in the specified direction and return the new root */
-static CheckasmFunc *rotate_tree(CheckasmFunc *f, int dir)
-{
-    CheckasmFunc *r = f->child[dir^1];
-    f->child[dir^1] = r->child[dir];
-    r->child[dir] = f;
-    r->color = f->color;
-    f->color = 0;
-    return r;
-}
-
-#define is_red(f) ((f) && !(f)->color)
-
-/* Balance a left-leaning red-black tree at the specified node */
-static void balance_tree(CheckasmFunc **root)
-{
-    CheckasmFunc *f = *root;
-
-    if (is_red(f->child[0]) && is_red(f->child[1])) {
-        f->color ^= 1;
-        f->child[0]->color = f->child[1]->color = 1;
-    }
-
-    if (!is_red(f->child[0]) && is_red(f->child[1]))
-        *root = rotate_tree(f, 0); /* Rotate left */
-    else if (is_red(f->child[0]) && is_red(f->child[0]->child[0]))
-        *root = rotate_tree(f, 1); /* Rotate right */
-}
-
-/* Get a node with the specified name, creating it if it doesn't exist */
-static CheckasmFunc *get_func(CheckasmFunc **root, const char *name)
-{
-    CheckasmFunc *f = *root;
-
-    if (f) {
-        /* Search the tree for a matching node */
-        int cmp = cmp_func_names(name, f->name);
-        if (cmp) {
-            f = get_func(&f->child[cmp > 0], name);
-
-            /* Rebalance the tree on the way up if a new node was inserted */
-            if (!f->versions.func)
-                balance_tree(root);
-        }
-    } else {
-        /* Allocate and insert a new node into the tree */
-        int name_length = strlen(name);
-        f = *root = checkasm_malloc(sizeof(CheckasmFunc) + name_length);
-        memcpy(f->name, name, name_length + 1);
-    }
-
-    return f;
-}
-
-/* Perform tests and benchmarks for the specified cpu flag if supported by the host */
-static void check_cpu_flag(const char *name, int flag)
-{
-    int old_cpu_flag = state.cpu_flag;
-
-    flag |= old_cpu_flag;
-    av_force_cpu_flags(-1);
-    state.cpu_flag = flag & av_get_cpu_flags();
-    av_force_cpu_flags(state.cpu_flag);
-
-    if (!flag || state.cpu_flag != old_cpu_flag) {
-        int i;
-
-        state.cpu_flag_name = name;
-        for (i = 0; tests[i].func; i++) {
-            if (state.test_name && strcmp(tests[i].name, state.test_name))
-                continue;
-            state.current_test_name = tests[i].name;
-            tests[i].func();
-        }
-    }
-}
-
-/* Print the name of the current CPU flag, but only do it once */
-static void print_cpu_name(void)
-{
-    if (state.cpu_flag_name) {
-        color_printf(COLOR_YELLOW, "%s:\n", state.cpu_flag_name);
-        state.cpu_flag_name = NULL;
-    }
-}
-
-#if CONFIG_LINUX_PERF
-static int bench_init_linux(void)
-{
-    struct perf_event_attr attr = {
-        .type           = PERF_TYPE_HARDWARE,
-        .size           = sizeof(struct perf_event_attr),
-        .config         = PERF_COUNT_HW_CPU_CYCLES,
-        .disabled       = 1, // start counting only on demand
-        .exclude_kernel = 1,
-        .exclude_hv     = 1,
-    };
-
-    printf("benchmarking with Linux Perf Monitoring API\n");
-
-    state.sysfd = syscall(__NR_perf_event_open, &attr, 0, -1, -1, 0);
-    if (state.sysfd == -1) {
-        perror("syscall");
-        return -1;
-    }
-    return 0;
-}
-#endif
-
-#if !CONFIG_LINUX_PERF
-static int bench_init_ffmpeg(void)
-{
-#ifdef AV_READ_TIME
-    printf("benchmarking with native FFmpeg timers\n");
-    return 0;
-#else
-    fprintf(stderr, "checkasm: --bench is not supported on your system\n");
-    return -1;
-#endif
-}
-#endif
-
-static int bench_init(void)
-{
-#if CONFIG_LINUX_PERF
-    int ret = bench_init_linux();
-#else
-    int ret = bench_init_ffmpeg();
-#endif
-    if (ret < 0)
-        return ret;
-
-    state.nop_time = measure_nop_time();
-    printf("nop: %d.%d\n", state.nop_time/10, state.nop_time%10);
-    return 0;
-}
-
-static void bench_uninit(void)
-{
-#if CONFIG_LINUX_PERF
-    if (state.sysfd > 0)
-        close(state.sysfd);
-#endif
-}
-
-int main(int argc, char *argv[])
-{
-    unsigned int seed = av_get_random_seed();
-    int i, ret = 0;
-
-#if ARCH_ARM && HAVE_ARMV5TE_EXTERNAL
-    if (have_vfp(av_get_cpu_flags()) || have_neon(av_get_cpu_flags()))
-        checkasm_checked_call = checkasm_checked_call_vfp;
-#endif
-
-    if (!tests[0].func || !cpus[0].flag) {
-        fprintf(stderr, "checkasm: no tests to perform\n");
-        return 0;
-    }
-
-    while (argc > 1) {
-        if (!strncmp(argv[1], "--bench", 7)) {
-            if (bench_init() < 0)
-                return 1;
-            if (argv[1][7] == '=') {
-                state.bench_pattern = argv[1] + 8;
-                state.bench_pattern_len = strlen(state.bench_pattern);
-            } else
-                state.bench_pattern = "";
-        } else if (!strncmp(argv[1], "--test=", 7)) {
-            state.test_name = argv[1] + 7;
-        } else {
-            seed = strtoul(argv[1], NULL, 10);
-        }
-
-        argc--;
-        argv++;
-    }
-
-    fprintf(stderr, "checkasm: using random seed %u\n", seed);
-    av_lfg_init(&checkasm_lfg, seed);
-
-    check_cpu_flag(NULL, 0);
-    for (i = 0; cpus[i].flag; i++)
-        check_cpu_flag(cpus[i].name, cpus[i].flag);
-
-    if (state.num_failed) {
-        fprintf(stderr, "checkasm: %d of %d tests have failed\n", state.num_failed, state.num_checked);
-        ret = 1;
-    } else {
-        fprintf(stderr, "checkasm: all %d tests passed\n", state.num_checked);
-        if (state.bench_pattern) {
-            print_benchs(state.funcs);
-        }
-    }
-
-    destroy_func_tree(state.funcs);
-    bench_uninit();
-    return ret;
-}
-
-/* Decide whether or not the specified function needs to be tested and
- * allocate/initialize data structures if needed. Returns a pointer to a
- * reference function if the function should be tested, otherwise NULL */
-void *checkasm_check_func(void *func, const char *name, ...)
-{
-    char name_buf[256];
-    void *ref = func;
-    CheckasmFuncVersion *v;
-    int name_length;
-    va_list arg;
-
-    va_start(arg, name);
-    name_length = vsnprintf(name_buf, sizeof(name_buf), name, arg);
-    va_end(arg);
-
-    if (!func || name_length <= 0 || name_length >= sizeof(name_buf))
-        return NULL;
-
-    state.current_func = get_func(&state.funcs, name_buf);
-    state.funcs->color = 1;
-    v = &state.current_func->versions;
-
-    if (v->func) {
-        CheckasmFuncVersion *prev;
-        do {
-            /* Only test functions that haven't already been tested */
-            if (v->func == func)
-                return NULL;
-
-            if (v->ok)
-                ref = v->func;
-
-            prev = v;
-        } while ((v = v->next));
-
-        v = prev->next = checkasm_malloc(sizeof(CheckasmFuncVersion));
-    }
-
-    v->func = func;
-    v->ok = 1;
-    v->cpu = state.cpu_flag;
-    state.current_func_ver = v;
-
-    if (state.cpu_flag)
-        state.num_checked++;
-
-    return ref;
-}
-
-/* Decide whether or not the current function needs to be benchmarked */
-int checkasm_bench_func(void)
-{
-    return !state.num_failed && state.bench_pattern &&
-           !strncmp(state.current_func->name, state.bench_pattern, state.bench_pattern_len);
-}
-
-/* Indicate that the current test has failed */
-void checkasm_fail_func(const char *msg, ...)
-{
-    if (state.current_func_ver->cpu && state.current_func_ver->ok) {
-        va_list arg;
-
-        print_cpu_name();
-        fprintf(stderr, "   %s_%s (", state.current_func->name, cpu_suffix(state.current_func_ver->cpu));
-        va_start(arg, msg);
-        vfprintf(stderr, msg, arg);
-        va_end(arg);
-        fprintf(stderr, ")\n");
-
-        state.current_func_ver->ok = 0;
-        state.num_failed++;
-    }
-}
-
-/* Get the benchmark context of the current function */
-CheckasmPerf *checkasm_get_perf_context(void)
-{
-    CheckasmPerf *perf = &state.current_func_ver->perf;
-    memset(perf, 0, sizeof(*perf));
-    perf->sysfd = state.sysfd;
-    return perf;
-}
-
-/* Print the outcome of all tests performed since the last time this function was called */
-void checkasm_report(const char *name, ...)
-{
-    static int prev_checked, prev_failed, max_length;
-
-    if (state.num_checked > prev_checked) {
-        int pad_length = max_length + 4;
-        va_list arg;
-
-        print_cpu_name();
-        pad_length -= fprintf(stderr, " - %s.", state.current_test_name);
-        va_start(arg, name);
-        pad_length -= vfprintf(stderr, name, arg);
-        va_end(arg);
-        fprintf(stderr, "%*c", FFMAX(pad_length, 0) + 2, '[');
-
-        if (state.num_failed == prev_failed)
-            color_printf(COLOR_GREEN, "OK");
-        else
-            color_printf(COLOR_RED, "FAILED");
-        fprintf(stderr, "]\n");
-
-        prev_checked = state.num_checked;
-        prev_failed  = state.num_failed;
-    } else if (!state.cpu_flag) {
-        /* Calculate the amount of padding required to make the output vertically aligned */
-        int length = strlen(state.current_test_name);
-        va_list arg;
-
-        va_start(arg, name);
-        length += vsnprintf(NULL, 0, name, arg);
-        va_end(arg);
-
-        if (length > max_length)
-            max_length = length;
-    }
-}
diff --git a/tests/checkasm/checkasm.h b/tests/checkasm/checkasm.h
deleted file mode 100644
index 0a7f9f2..0000000
--- a/tests/checkasm/checkasm.h
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
- * Assembly testing and benchmarking tool
- * Copyright (c) 2015 Henrik Gramner
- * Copyright (c) 2008 Loren Merritt
- *
- * 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.
- */
-
-#ifndef TESTS_CHECKASM_CHECKASM_H
-#define TESTS_CHECKASM_CHECKASM_H
-
-#include <stdint.h>
-#include "config.h"
-
-#if CONFIG_LINUX_PERF
-#include <unistd.h> // read(3)
-#include <sys/ioctl.h>
-#include <asm/unistd.h>
-#include <linux/perf_event.h>
-#endif
-
-#include "libavutil/avstring.h"
-#include "libavutil/cpu.h"
-#include "libavutil/internal.h"
-#include "libavutil/lfg.h"
-#include "libavutil/timer.h"
-
-void checkasm_check_aacpsdsp(void);
-void checkasm_check_afir(void);
-void checkasm_check_alacdsp(void);
-void checkasm_check_audiodsp(void);
-void checkasm_check_blend(void);
-void checkasm_check_blockdsp(void);
-void checkasm_check_bswapdsp(void);
-void checkasm_check_colorspace(void);
-void checkasm_check_exrdsp(void);
-void checkasm_check_fixed_dsp(void);
-void checkasm_check_flacdsp(void);
-void checkasm_check_float_dsp(void);
-void checkasm_check_fmtconvert(void);
-void checkasm_check_g722dsp(void);
-void checkasm_check_h264dsp(void);
-void checkasm_check_h264pred(void);
-void checkasm_check_h264qpel(void);
-void checkasm_check_hevc_add_res(void);
-void checkasm_check_hevc_idct(void);
-void checkasm_check_hevc_sao(void);
-void checkasm_check_huffyuvdsp(void);
-void checkasm_check_jpeg2000dsp(void);
-void checkasm_check_llviddsp(void);
-void checkasm_check_llviddspenc(void);
-void checkasm_check_nlmeans(void);
-void checkasm_check_opusdsp(void);
-void checkasm_check_pixblockdsp(void);
-void checkasm_check_sbrdsp(void);
-void checkasm_check_synth_filter(void);
-void checkasm_check_sw_rgb(void);
-void checkasm_check_utvideodsp(void);
-void checkasm_check_v210dec(void);
-void checkasm_check_v210enc(void);
-void checkasm_check_vf_eq(void);
-void checkasm_check_vf_gblur(void);
-void checkasm_check_vf_hflip(void);
-void checkasm_check_vf_threshold(void);
-void checkasm_check_vp8dsp(void);
-void checkasm_check_vp9dsp(void);
-void checkasm_check_videodsp(void);
-
-struct CheckasmPerf;
-
-void *checkasm_check_func(void *func, const char *name, ...) av_printf_format(2, 3);
-int checkasm_bench_func(void);
-void checkasm_fail_func(const char *msg, ...) av_printf_format(1, 2);
-struct CheckasmPerf *checkasm_get_perf_context(void);
-void checkasm_report(const char *name, ...) av_printf_format(1, 2);
-
-/* float compare utilities */
-int float_near_ulp(float a, float b, unsigned max_ulp);
-int float_near_abs_eps(float a, float b, float eps);
-int float_near_abs_eps_ulp(float a, float b, float eps, unsigned max_ulp);
-int float_near_ulp_array(const float *a, const float *b, unsigned max_ulp,
-                         unsigned len);
-int float_near_abs_eps_array(const float *a, const float *b, float eps,
-                             unsigned len);
-int float_near_abs_eps_array_ulp(const float *a, const float *b, float eps,
-                                 unsigned max_ulp, unsigned len);
-int double_near_abs_eps(double a, double b, double eps);
-int double_near_abs_eps_array(const double *a, const double *b, double eps,
-                              unsigned len);
-
-extern AVLFG checkasm_lfg;
-#define rnd() av_lfg_get(&checkasm_lfg)
-
-static av_unused void *func_ref, *func_new;
-
-#define BENCH_RUNS 1000 /* Trade-off between accuracy and speed */
-
-/* Decide whether or not the specified function needs to be tested */
-#define check_func(func, ...) (func_ref = checkasm_check_func((func_new = func), __VA_ARGS__))
-
-/* Declare the function prototype. The first argument is the return value, the remaining
- * arguments are the function parameters. Naming parameters is optional. */
-#define declare_func(ret, ...) declare_new(ret, __VA_ARGS__) typedef ret func_type(__VA_ARGS__)
-#define declare_func_float(ret, ...) declare_new_float(ret, __VA_ARGS__) typedef ret func_type(__VA_ARGS__)
-#define declare_func_emms(cpu_flags, ret, ...) declare_new_emms(cpu_flags, ret, __VA_ARGS__) typedef ret func_type(__VA_ARGS__)
-
-/* Indicate that the current test has failed */
-#define fail() checkasm_fail_func("%s:%d", av_basename(__FILE__), __LINE__)
-
-/* Print the test outcome */
-#define report checkasm_report
-
-/* Call the reference function */
-#define call_ref(...) ((func_type *)func_ref)(__VA_ARGS__)
-
-#if ARCH_X86 && HAVE_X86ASM
-/* Verifies that clobbered callee-saved registers are properly saved and restored
- * and that either no MMX registers are touched or emms is issued */
-void checkasm_checked_call(void *func, ...);
-/* Verifies that clobbered callee-saved registers are properly saved and restored
- * and issues emms for asm functions which are not required to do so */
-void checkasm_checked_call_emms(void *func, ...);
-/* Verifies that clobbered callee-saved registers are properly saved and restored
- * but doesn't issue emms. Meant for dsp functions returning float or double */
-void checkasm_checked_call_float(void *func, ...);
-
-#if ARCH_X86_64
-/* Evil hack: detect incorrect assumptions that 32-bit ints are zero-extended to 64-bit.
- * This is done by clobbering the stack with junk around the stack pointer and calling the
- * assembly function through checked_call() with added dummy arguments which forces all
- * real arguments to be passed on the stack and not in registers. For 32-bit arguments the
- * upper half of the 64-bit register locations on the stack will now contain junk which will
- * cause misbehaving functions to either produce incorrect output or segfault. Note that
- * even though this works extremely well in practice, it's technically not guaranteed
- * and false negatives is theoretically possible, but there can never be any false positives.
- */
-void checkasm_stack_clobber(uint64_t clobber, ...);
-#define declare_new(ret, ...) ret (*checked_call)(void *, int, int, int, int, int, __VA_ARGS__)\
-                              = (void *)checkasm_checked_call;
-#define declare_new_float(ret, ...) ret (*checked_call)(void *, int, int, int, int, int, __VA_ARGS__)\
-                                    = (void *)checkasm_checked_call_float;
-#define declare_new_emms(cpu_flags, ret, ...) \
-    ret (*checked_call)(void *, int, int, int, int, int, __VA_ARGS__) = \
-        ((cpu_flags) & av_get_cpu_flags()) ? (void *)checkasm_checked_call_emms : \
-                                             (void *)checkasm_checked_call;
-#define CLOB (UINT64_C(0xdeadbeefdeadbeef))
-#define call_new(...) (checkasm_stack_clobber(CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,\
-                                              CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB),\
-                      checked_call(func_new, 0, 0, 0, 0, 0, __VA_ARGS__))
-#elif ARCH_X86_32
-#define declare_new(ret, ...) ret (*checked_call)(void *, __VA_ARGS__) = (void *)checkasm_checked_call;
-#define declare_new_float(ret, ...) ret (*checked_call)(void *, __VA_ARGS__) = (void *)checkasm_checked_call_float;
-#define declare_new_emms(cpu_flags, ret, ...) ret (*checked_call)(void *, __VA_ARGS__) = \
-        ((cpu_flags) & av_get_cpu_flags()) ? (void *)checkasm_checked_call_emms :        \
-                                             (void *)checkasm_checked_call;
-#define call_new(...) checked_call(func_new, __VA_ARGS__)
-#endif
-#elif ARCH_ARM && HAVE_ARMV5TE_EXTERNAL
-/* Use a dummy argument, to offset the real parameters by 2, not only 1.
- * This makes sure that potential 8-byte-alignment of parameters is kept the same
- * even when the extra parameters have been removed. */
-void checkasm_checked_call_vfp(void *func, int dummy, ...);
-void checkasm_checked_call_novfp(void *func, int dummy, ...);
-extern void (*checkasm_checked_call)(void *func, int dummy, ...);
-#define declare_new(ret, ...) ret (*checked_call)(void *, int dummy, __VA_ARGS__) = (void *)checkasm_checked_call;
-#define call_new(...) checked_call(func_new, 0, __VA_ARGS__)
-#elif ARCH_AARCH64 && !defined(__APPLE__)
-void checkasm_stack_clobber(uint64_t clobber, ...);
-void checkasm_checked_call(void *func, ...);
-#define declare_new(ret, ...) ret (*checked_call)(void *, int, int, int, int, int, int, int, __VA_ARGS__)\
-                              = (void *)checkasm_checked_call;
-#define CLOB (UINT64_C(0xdeadbeefdeadbeef))
-#define call_new(...) (checkasm_stack_clobber(CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,\
-                                              CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB,CLOB),\
-                      checked_call(func_new, 0, 0, 0, 0, 0, 0, 0, __VA_ARGS__))
-#else
-#define declare_new(ret, ...)
-#define declare_new_float(ret, ...)
-#define declare_new_emms(cpu_flags, ret, ...)
-/* Call the function */
-#define call_new(...) ((func_type *)func_new)(__VA_ARGS__)
-#endif
-
-#ifndef declare_new_emms
-#define declare_new_emms(cpu_flags, ret, ...) declare_new(ret, __VA_ARGS__)
-#endif
-#ifndef declare_new_float
-#define declare_new_float(ret, ...) declare_new(ret, __VA_ARGS__)
-#endif
-
-typedef struct CheckasmPerf {
-    int sysfd;
-    uint64_t cycles;
-    int iterations;
-} CheckasmPerf;
-
-#if defined(AV_READ_TIME) || CONFIG_LINUX_PERF
-
-#if CONFIG_LINUX_PERF
-#define PERF_START(t) do {                              \
-    ioctl(sysfd, PERF_EVENT_IOC_RESET, 0);              \
-    ioctl(sysfd, PERF_EVENT_IOC_ENABLE, 0);             \
-} while (0)
-#define PERF_STOP(t) do {                               \
-    ioctl(sysfd, PERF_EVENT_IOC_DISABLE, 0);            \
-    read(sysfd, &t, sizeof(t));                         \
-} while (0)
-#else
-#define PERF_START(t) t = AV_READ_TIME()
-#define PERF_STOP(t)  t = AV_READ_TIME() - t
-#endif
-
-/* Benchmark the function */
-#define bench_new(...)\
-    do {\
-        if (checkasm_bench_func()) {\
-            struct CheckasmPerf *perf = checkasm_get_perf_context();\
-            av_unused const int sysfd = perf->sysfd;\
-            func_type *tfunc = func_new;\
-            uint64_t tsum = 0;\
-            int ti, tcount = 0;\
-            uint64_t t = 0; \
-            for (ti = 0; ti < BENCH_RUNS; ti++) {\
-                PERF_START(t);\
-                tfunc(__VA_ARGS__);\
-                tfunc(__VA_ARGS__);\
-                tfunc(__VA_ARGS__);\
-                tfunc(__VA_ARGS__);\
-                PERF_STOP(t);\
-                if (t*tcount <= tsum*4 && ti > 0) {\
-                    tsum += t;\
-                    tcount++;\
-                }\
-            }\
-            emms_c();\
-            perf->cycles += t;\
-            perf->iterations++;\
-        }\
-    } while (0)
-#else
-#define bench_new(...) while(0)
-#define PERF_START(t)  while(0)
-#define PERF_STOP(t)   while(0)
-#endif
-
-#endif /* TESTS_CHECKASM_CHECKASM_H */
diff --git a/tests/checkasm/exrdsp.c b/tests/checkasm/exrdsp.c
deleted file mode 100644
index 754a079..0000000
--- a/tests/checkasm/exrdsp.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (c) 2017 James Almer
- *
- * 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.
- */
-
-#include <string.h>
-
-#include "checkasm.h"
-#include "libavcodec/avcodec.h"
-#include "libavcodec/exrdsp.h"
-#include "libavutil/intreadwrite.h"
-
-#define BUF_SIZE 5120
-#define PADDED_BUF_SIZE BUF_SIZE+AV_INPUT_BUFFER_PADDING_SIZE*2
-
-#define randomize_buffers()                 \
-    do {                                    \
-        int i;                              \
-        for (i = 0; i < BUF_SIZE; i += 4) { \
-            uint32_t r = rnd();             \
-            AV_WN32A(src + i, r);           \
-        }                                   \
-    } while (0)
-
-static void check_reorder_pixels(void) {
-    LOCAL_ALIGNED_32(uint8_t, src,     [PADDED_BUF_SIZE]);
-    LOCAL_ALIGNED_32(uint8_t, dst_ref, [PADDED_BUF_SIZE]);
-    LOCAL_ALIGNED_32(uint8_t, dst_new, [PADDED_BUF_SIZE]);
-
-    declare_func(void, uint8_t *dst, const uint8_t *src, ptrdiff_t size);
-
-    memset(src,     0, PADDED_BUF_SIZE);
-    memset(dst_ref, 0, PADDED_BUF_SIZE);
-    memset(dst_new, 0, PADDED_BUF_SIZE);
-    randomize_buffers();
-    call_ref(dst_ref, src, BUF_SIZE);
-    call_new(dst_new, src, BUF_SIZE);
-    if (memcmp(dst_ref, dst_new, BUF_SIZE))
-        fail();
-    bench_new(dst_new, src, BUF_SIZE);
-}
-
-static void check_predictor(void) {
-    LOCAL_ALIGNED_32(uint8_t, src,     [PADDED_BUF_SIZE]);
-    LOCAL_ALIGNED_32(uint8_t, dst_ref, [PADDED_BUF_SIZE]);
-    LOCAL_ALIGNED_32(uint8_t, dst_new, [PADDED_BUF_SIZE]);
-
-    declare_func(void, uint8_t *src, ptrdiff_t size);
-
-    memset(src,     0, PADDED_BUF_SIZE);
-    randomize_buffers();
-    memcpy(dst_ref, src, PADDED_BUF_SIZE);
-    memcpy(dst_new, src, PADDED_BUF_SIZE);
-    call_ref(dst_ref, BUF_SIZE);
-    call_new(dst_new, BUF_SIZE);
-    if (memcmp(dst_ref, dst_new, BUF_SIZE))
-        fail();
-    bench_new(dst_new, BUF_SIZE);
-}
-
-void checkasm_check_exrdsp(void)
-{
-    ExrDSPContext h;
-
-    ff_exrdsp_init(&h);
-
-    if (check_func(h.reorder_pixels, "reorder_pixels"))
-        check_reorder_pixels();
-
-    report("reorder_pixels");
-
-    if (check_func(h.predictor, "predictor"))
-        check_predictor();
-
-    report("predictor");
-}
diff --git a/tests/checkasm/fixed_dsp.c b/tests/checkasm/fixed_dsp.c
deleted file mode 100644
index fa11f2e..0000000
--- a/tests/checkasm/fixed_dsp.c
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (c) 2015 James Almer
- *
- * 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.
- */
-
-#include "checkasm.h"
-#include "libavutil/common.h"
-#include "libavutil/fixed_dsp.h"
-#include "libavutil/internal.h"
-#include "libavutil/mem.h"
-
-#define BUF_SIZE 256
-
-#define randomize_buffers()                   \
-    do {                                      \
-        int i;                                \
-        for (i = 0; i < BUF_SIZE; i++) {      \
-            src0[i] = sign_extend(rnd(), 24); \
-            src1[i] = sign_extend(rnd(), 24); \
-            src2[i] = sign_extend(rnd(), 24); \
-        }                                     \
-    } while (0)
-
-static void check_vector_fmul(const int *src0, const int *src1)
-{
-    LOCAL_ALIGNED_32(int, ref, [BUF_SIZE]);
-    LOCAL_ALIGNED_32(int, new, [BUF_SIZE]);
-
-    declare_func(void, int *dst, const int *src0, const int *src1, int len);
-
-    call_ref(ref, src0, src1, BUF_SIZE);
-    call_new(new, src0, src1, BUF_SIZE);
-    if (memcmp(ref, new, BUF_SIZE * sizeof(int)))
-        fail();
-    bench_new(new, src0, src1, BUF_SIZE);
-}
-
-static void check_vector_fmul_add(const int *src0, const int *src1, const int *src2)
-{
-    LOCAL_ALIGNED_32(int, ref, [BUF_SIZE]);
-    LOCAL_ALIGNED_32(int, new, [BUF_SIZE]);
-
-    declare_func(void, int *dst, const int *src0, const int *src1, const int *src2, int len);
-
-    call_ref(ref, src0, src1, src2, BUF_SIZE);
-    call_new(new, src0, src1, src2, BUF_SIZE);
-    if (memcmp(ref, new, BUF_SIZE * sizeof(int)))
-        fail();
-    bench_new(new, src0, src1, src2, BUF_SIZE);
-}
-
-static void check_vector_fmul_window(const int32_t *src0, const int32_t *src1, const int32_t *win)
-{
-    LOCAL_ALIGNED_32(int32_t, ref, [BUF_SIZE]);
-    LOCAL_ALIGNED_32(int32_t, new, [BUF_SIZE]);
-
-    declare_func(void, int32_t *dst, const int32_t *src0, const int32_t *src1, const int32_t *win, int len);
-
-    call_ref(ref, src0, src1, win, BUF_SIZE / 2);
-    call_new(new, src0, src1, win, BUF_SIZE / 2);
-    if (memcmp(ref, new, BUF_SIZE * sizeof(int32_t)))
-        fail();
-    bench_new(new, src0, src1, win, BUF_SIZE / 2);
-}
-
-static void check_vector_fmul_window_scaled(const int32_t *src0, const int32_t *src1, const int32_t *win)
-{
-    LOCAL_ALIGNED_16(int16_t, ref, [BUF_SIZE]);
-    LOCAL_ALIGNED_16(int16_t, new, [BUF_SIZE]);
-
-    declare_func(void, int16_t *dst, const int32_t *src0, const int32_t *src1, const int32_t *win, int len, uint8_t bits);
-
-    call_ref(ref, src0, src1, win, BUF_SIZE / 2, 2);
-    call_new(new, src0, src1, win, BUF_SIZE / 2, 2);
-    if (memcmp(ref, new, BUF_SIZE * sizeof(int16_t)))
-        fail();
-    bench_new(new, src0, src1, win, BUF_SIZE / 2, 2);
-}
-
-static void check_butterflies(const int *src0, const int *src1)
-{
-    LOCAL_ALIGNED_16(int, ref0, [BUF_SIZE]);
-    LOCAL_ALIGNED_16(int, ref1, [BUF_SIZE]);
-    LOCAL_ALIGNED_16(int, new0, [BUF_SIZE]);
-    LOCAL_ALIGNED_16(int, new1, [BUF_SIZE]);
-
-    declare_func(void, int *av_restrict src0, int *av_restrict src1, int len);
-
-    memcpy(ref0, src0, BUF_SIZE * sizeof(*src0));
-    memcpy(ref1, src1, BUF_SIZE * sizeof(*src1));
-    memcpy(new0, src0, BUF_SIZE * sizeof(*src0));
-    memcpy(new1, src1, BUF_SIZE * sizeof(*src1));
-
-    call_ref(ref0, ref1, BUF_SIZE);
-    call_new(new0, new1, BUF_SIZE);
-    if (memcmp(ref0, new0, BUF_SIZE * sizeof(*ref0)) ||
-        memcmp(ref1, new1, BUF_SIZE * sizeof(*ref1)))
-        fail();
-    memcpy(new0, src0, BUF_SIZE * sizeof(*src0));
-    memcpy(new1, src1, BUF_SIZE * sizeof(*src1));
-    bench_new(new0, new1, BUF_SIZE);
-}
-
-static void check_scalarproduct_fixed(const int *src0, const int *src1)
-{
-    int ref, new;
-
-    declare_func(int, const int *src0, const int *src1, int len);
-
-    ref = call_ref(src0, src1, BUF_SIZE);
-    new = call_new(src0, src1, BUF_SIZE);
-    if (ref != new)
-        fail();
-    bench_new(src0, src1, BUF_SIZE);
-}
-
-void checkasm_check_fixed_dsp(void)
-{
-    LOCAL_ALIGNED_32(int32_t, src0, [BUF_SIZE]);
-    LOCAL_ALIGNED_32(int32_t, src1, [BUF_SIZE]);
-    LOCAL_ALIGNED_32(int32_t, src2, [BUF_SIZE]);
-    AVFixedDSPContext *fdsp = avpriv_alloc_fixed_dsp(1);
-
-    randomize_buffers();
-    if (check_func(fdsp->vector_fmul, "vector_fmul_fixed"))
-        check_vector_fmul(src0, src1);
-    if (check_func(fdsp->vector_fmul_add, "vector_fmul_add_fixed"))
-        check_vector_fmul_add(src0, src1, src2);
-    if (check_func(fdsp->vector_fmul_reverse, "vector_fmul_reverse_fixed"))
-        check_vector_fmul(src0, src1);
-    if (check_func(fdsp->vector_fmul_window, "vector_fmul_window_fixed"))
-        check_vector_fmul_window(src0, src1, src2);
-    if (check_func(fdsp->vector_fmul_window_scaled, "vector_fmul_window_scaled_fixed"))
-        check_vector_fmul_window_scaled(src0, src1, src2);
-    report("vector_fmul");
-    if (check_func(fdsp->butterflies_fixed, "butterflies_fixed"))
-        check_butterflies(src0, src1);
-    report("butterflies_fixed");
-    if (check_func(fdsp->scalarproduct_fixed, "scalarproduct_fixed"))
-        check_scalarproduct_fixed(src0, src1);
-    report("scalarproduct_fixed");
-
-    av_freep(&fdsp);
-}
diff --git a/tests/checkasm/flacdsp.c b/tests/checkasm/flacdsp.c
deleted file mode 100644
index dccb54d..0000000
--- a/tests/checkasm/flacdsp.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (c) 2015 James Almer
- *
- * 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.
- */
-
-#include <string.h>
-#include "checkasm.h"
-#include "libavcodec/flacdsp.h"
-#include "libavutil/common.h"
-#include "libavutil/internal.h"
-#include "libavutil/intreadwrite.h"
-
-#define BUF_SIZE 256
-#define MAX_CHANNELS 8
-
-#define randomize_buffers()                                 \
-    do {                                                    \
-        int i, j;                                           \
-        for (i = 0; i < BUF_SIZE; i += 4) {                 \
-            for (j = 0; j < channels; j++) {                \
-                uint32_t r = rnd() & (1 << (bits - 2)) - 1; \
-                AV_WN32A(ref_src[j] + i, r);                \
-                AV_WN32A(new_src[j] + i, r);                \
-            }                                               \
-        }                                                   \
-    } while (0)
-
-static void check_decorrelate(uint8_t **ref_dst, uint8_t **ref_src, uint8_t **new_dst, uint8_t **new_src,
-                              int channels, int bits) {
-    declare_func(void, uint8_t **out, int32_t **in, int channels, int len, int shift);
-
-    randomize_buffers();
-    call_ref(ref_dst, (int32_t **)ref_src, channels, BUF_SIZE / sizeof(int32_t), 8);
-    call_new(new_dst, (int32_t **)new_src, channels, BUF_SIZE / sizeof(int32_t), 8);
-    if (memcmp(*ref_dst, *new_dst, bits == 16 ? BUF_SIZE * (channels/2) : BUF_SIZE * channels) ||
-        memcmp(*ref_src, *new_src, BUF_SIZE * channels))
-        fail();
-    bench_new(new_dst, (int32_t **)new_src, channels, BUF_SIZE / sizeof(int32_t), 8);
-}
-
-void checkasm_check_flacdsp(void)
-{
-    LOCAL_ALIGNED_16(uint8_t, ref_dst, [BUF_SIZE*MAX_CHANNELS]);
-    LOCAL_ALIGNED_16(uint8_t, ref_buf, [BUF_SIZE*MAX_CHANNELS]);
-    LOCAL_ALIGNED_16(uint8_t, new_dst, [BUF_SIZE*MAX_CHANNELS]);
-    LOCAL_ALIGNED_16(uint8_t, new_buf, [BUF_SIZE*MAX_CHANNELS]);
-    uint8_t *ref_src[] = { &ref_buf[BUF_SIZE*0], &ref_buf[BUF_SIZE*1], &ref_buf[BUF_SIZE*2], &ref_buf[BUF_SIZE*3],
-                           &ref_buf[BUF_SIZE*4], &ref_buf[BUF_SIZE*5], &ref_buf[BUF_SIZE*6], &ref_buf[BUF_SIZE*7] };
-    uint8_t *new_src[] = { &new_buf[BUF_SIZE*0], &new_buf[BUF_SIZE*1], &new_buf[BUF_SIZE*2], &new_buf[BUF_SIZE*3],
-                           &new_buf[BUF_SIZE*4], &new_buf[BUF_SIZE*5], &new_buf[BUF_SIZE*6], &new_buf[BUF_SIZE*7] };
-    static const char * const names[3] = { "ls", "rs", "ms" };
-    static const struct {
-        enum AVSampleFormat fmt;
-        int bits;
-    } fmts[] = {
-        { AV_SAMPLE_FMT_S16, 16 },
-        { AV_SAMPLE_FMT_S32, 32 },
-    };
-    FLACDSPContext h;
-    int i, j;
-
-    for (i = 0; i < 2; i++) {
-        ff_flacdsp_init(&h, fmts[i].fmt, 2, 0);
-        for (j = 0; j < 3; j++)
-            if (check_func(h.decorrelate[j], "flac_decorrelate_%s_%d", names[j], fmts[i].bits))
-                check_decorrelate(&ref_dst, ref_src, &new_dst, new_src, 2, fmts[i].bits);
-        for (j = 2; j <= MAX_CHANNELS; j += 2) {
-            ff_flacdsp_init(&h, fmts[i].fmt, j, 0);
-            if (check_func(h.decorrelate[0], "flac_decorrelate_indep%d_%d", j, fmts[i].bits))
-                check_decorrelate(&ref_dst, ref_src, &new_dst, new_src, j, fmts[i].bits);
-        }
-    }
-
-    report("decorrelate");
-}
diff --git a/tests/checkasm/float_dsp.c b/tests/checkasm/float_dsp.c
deleted file mode 100644
index a1616a6..0000000
--- a/tests/checkasm/float_dsp.c
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <float.h>
-#include <stdint.h>
-
-#include "libavutil/float_dsp.h"
-#include "libavutil/internal.h"
-#include "checkasm.h"
-
-#define LEN 256
-
-#define randomize_buffer(buf)                 \
-do {                                          \
-    int i;                                    \
-    double bmg[2], stddev = 10.0, mean = 0.0; \
-                                              \
-    for (i = 0; i < LEN; i += 2) {            \
-        av_bmg_get(&checkasm_lfg, bmg);       \
-        buf[i]     = bmg[0] * stddev + mean;  \
-        buf[i + 1] = bmg[1] * stddev + mean;  \
-    }                                         \
-} while(0);
-
-static void test_vector_fmul(const float *src0, const float *src1)
-{
-    LOCAL_ALIGNED_32(float, cdst, [LEN]);
-    LOCAL_ALIGNED_32(float, odst, [LEN]);
-    int i;
-
-    declare_func(void, float *dst, const float *src0, const float *src1,
-                 int len);
-
-    call_ref(cdst, src0, src1, LEN);
-    call_new(odst, src0, src1, LEN);
-    for (i = 0; i < LEN; i++) {
-        double t = fabs(src0[i]) + fabs(src1[i]) + fabs(src0[i] * src1[i]) + 1.0;
-        if (!float_near_abs_eps(cdst[i], odst[i], t * 2 * FLT_EPSILON)) {
-            fprintf(stderr, "%d: %- .12f - %- .12f = % .12g\n",
-                    i, cdst[i], odst[i], cdst[i] - odst[i]);
-            fail();
-            break;
-        }
-    }
-    bench_new(odst, src0, src1, LEN);
-}
-
-static void test_vector_dmul(const double *src0, const double *src1)
-{
-    LOCAL_ALIGNED_32(double, cdst, [LEN]);
-    LOCAL_ALIGNED_32(double, odst, [LEN]);
-    int i;
-
-    declare_func(void, double *dst, const double *src0, const double *src1,
-                 int len);
-
-    call_ref(cdst, src0, src1, LEN);
-    call_new(odst, src0, src1, LEN);
-    for (i = 0; i < LEN; i++) {
-        double t = fabs(src0[i]) + fabs(src1[i]) + fabs(src0[i] * src1[i]) + 1.0;
-        if (!double_near_abs_eps(cdst[i], odst[i], t * 2 * DBL_EPSILON)) {
-            fprintf(stderr, "%d: %- .12f - %- .12f = % .12g\n",
-                    i, cdst[i], odst[i], cdst[i] - odst[i]);
-            fail();
-            break;
-        }
-    }
-    bench_new(odst, src0, src1, LEN);
-}
-
-#define ARBITRARY_FMUL_ADD_CONST 0.005
-static void test_vector_fmul_add(const float *src0, const float *src1, const float *src2)
-{
-    LOCAL_ALIGNED_32(float, cdst, [LEN]);
-    LOCAL_ALIGNED_32(float, odst, [LEN]);
-    int i;
-
-    declare_func(void, float *dst, const float *src0, const float *src1,
-                     const float *src2, int len);
-
-    call_ref(cdst, src0, src1, src2, LEN);
-    call_new(odst, src0, src1, src2, LEN);
-    for (i = 0; i < LEN; i++) {
-        if (!float_near_abs_eps(cdst[i], odst[i], ARBITRARY_FMUL_ADD_CONST)) {
-            fprintf(stderr, "%d: %- .12f - %- .12f = % .12g\n",
-                    i, cdst[i], odst[i], cdst[i] - odst[i]);
-            fail();
-            break;
-        }
-    }
-    bench_new(odst, src0, src1, src2, LEN);
-}
-
-static void test_vector_fmul_scalar(const float *src0, const float *src1)
-{
-    LOCAL_ALIGNED_16(float, cdst, [LEN]);
-    LOCAL_ALIGNED_16(float, odst, [LEN]);
-    int i;
-
-    declare_func(void, float *dst, const float *src, float mul, int len);
-
-    call_ref(cdst, src0, src1[0], LEN);
-    call_new(odst, src0, src1[0], LEN);
-        for (i = 0; i < LEN; i++) {
-            double t = fabs(src0[i]) + fabs(src1[0]) + fabs(src0[i] * src1[0]) + 1.0;
-            if (!float_near_abs_eps(cdst[i], odst[i], t * 2 * FLT_EPSILON)) {
-                fprintf(stderr, "%d: %- .12f - %- .12f = % .12g\n",
-                        i, cdst[i], odst[i], cdst[i] - odst[i]);
-                fail();
-                break;
-            }
-        }
-    bench_new(odst, src0, src1[0], LEN);
-}
-
-#define ARBITRARY_FMUL_WINDOW_CONST 0.008
-static void test_vector_fmul_window(const float *src0, const float *src1, const float *win)
-{
-    LOCAL_ALIGNED_16(float, cdst, [LEN]);
-    LOCAL_ALIGNED_16(float, odst, [LEN]);
-    int i;
-
-    declare_func(void, float *dst, const float *src0, const float *src1,
-                 const float *win, int len);
-
-    call_ref(cdst, src0, src1, win, LEN / 2);
-    call_new(odst, src0, src1, win, LEN / 2);
-    for (i = 0; i < LEN; i++) {
-        if (!float_near_abs_eps(cdst[i], odst[i], ARBITRARY_FMUL_WINDOW_CONST)) {
-            fprintf(stderr, "%d: %- .12f - %- .12f = % .12g\n",
-                    i, cdst[i], odst[i], cdst[i] - odst[i]);
-            fail();
-            break;
-        }
-    }
-    bench_new(odst, src0, src1, win, LEN / 2);
-}
-
-#define ARBITRARY_FMAC_SCALAR_CONST 0.005
-static void test_vector_fmac_scalar(const float *src0, const float *src1, const float *src2)
-{
-    LOCAL_ALIGNED_32(float, cdst, [LEN]);
-    LOCAL_ALIGNED_32(float, odst, [LEN]);
-    int i;
-
-    declare_func(void, float *dst, const float *src, float mul, int len);
-
-    memcpy(cdst, src2, LEN * sizeof(*src2));
-    memcpy(odst, src2, LEN * sizeof(*src2));
-
-    call_ref(cdst, src0, src1[0], LEN);
-    call_new(odst, src0, src1[0], LEN);
-    for (i = 0; i < LEN; i++) {
-        if (!float_near_abs_eps(cdst[i], odst[i], ARBITRARY_FMAC_SCALAR_CONST)) {
-            fprintf(stderr, "%d: %- .12f - %- .12f = % .12g\n",
-                    i, cdst[i], odst[i], cdst[i] - odst[i]);
-            fail();
-            break;
-        }
-    }
-    memcpy(odst, src2, LEN * sizeof(*src2));
-    bench_new(odst, src0, src1[0], LEN);
-}
-
-static void test_vector_dmul_scalar(const double *src0, const double *src1)
-{
-    LOCAL_ALIGNED_32(double, cdst, [LEN]);
-    LOCAL_ALIGNED_32(double, odst, [LEN]);
-    int i;
-
-    declare_func(void, double *dst, const double *src, double mul, int len);
-
-    call_ref(cdst, src0, src1[0], LEN);
-    call_new(odst, src0, src1[0], LEN);
-    for (i = 0; i < LEN; i++) {
-        double t = fabs(src1[0]) + fabs(src0[i]) + fabs(src1[0] * src0[i]) + 1.0;
-        if (!double_near_abs_eps(cdst[i], odst[i], t * 2 * DBL_EPSILON)) {
-            fprintf(stderr, "%d: %- .12f - %- .12f = % .12g\n", i,
-                    cdst[i], odst[i], cdst[i] - odst[i]);
-            fail();
-            break;
-        }
-    }
-    bench_new(odst, src0, src1[0], LEN);
-}
-
-#define ARBITRARY_DMAC_SCALAR_CONST 0.005
-static void test_vector_dmac_scalar(const double *src0, const double *src1, const double *src2)
-{
-    LOCAL_ALIGNED_32(double, cdst, [LEN]);
-    LOCAL_ALIGNED_32(double, odst, [LEN]);
-    int i;
-
-    declare_func(void, double *dst, const double *src, double mul, int len);
-
-    memcpy(cdst, src2, LEN * sizeof(*src2));
-    memcpy(odst, src2, LEN * sizeof(*src2));
-    call_ref(cdst, src0, src1[0], LEN);
-    call_new(odst, src0, src1[0], LEN);
-    for (i = 0; i < LEN; i++) {
-        if (!double_near_abs_eps(cdst[i], odst[i], ARBITRARY_DMAC_SCALAR_CONST)) {
-            fprintf(stderr, "%d: %- .12f - %- .12f = % .12g\n",
-                    i, cdst[i], odst[i], cdst[i] - odst[i]);
-            fail();
-            break;
-        }
-    }
-    memcpy(odst, src2, LEN * sizeof(*src2));
-    bench_new(odst, src0, src1[0], LEN);
-}
-
-static void test_butterflies_float(const float *src0, const float *src1)
-{
-    LOCAL_ALIGNED_16(float,  cdst,  [LEN]);
-    LOCAL_ALIGNED_16(float,  odst,  [LEN]);
-    LOCAL_ALIGNED_16(float,  cdst1, [LEN]);
-    LOCAL_ALIGNED_16(float,  odst1, [LEN]);
-    int i;
-
-    declare_func(void, float *av_restrict src0, float *av_restrict src1,
-    int len);
-
-    memcpy(cdst,  src0, LEN * sizeof(*src0));
-    memcpy(cdst1, src1, LEN * sizeof(*src1));
-    memcpy(odst,  src0, LEN * sizeof(*src0));
-    memcpy(odst1, src1, LEN * sizeof(*src1));
-
-    call_ref(cdst, cdst1, LEN);
-    call_new(odst, odst1, LEN);
-    for (i = 0; i < LEN; i++) {
-        if (!float_near_abs_eps(cdst[i],  odst[i],  FLT_EPSILON) ||
-            !float_near_abs_eps(cdst1[i], odst1[i], FLT_EPSILON)) {
-            fprintf(stderr, "%d: %- .12f - %- .12f = % .12g\n",
-                    i, cdst[i], odst[i], cdst[i] - odst[i]);
-            fprintf(stderr, "%d: %- .12f - %- .12f = % .12g\n",
-                    i, cdst1[i], odst1[i], cdst1[i] - odst1[i]);
-            fail();
-            break;
-        }
-    }
-    memcpy(odst,  src0, LEN * sizeof(*src0));
-    memcpy(odst1, src1, LEN * sizeof(*src1));
-    bench_new(odst, odst1, LEN);
-}
-
-#define ARBITRARY_SCALARPRODUCT_CONST 0.2
-static void test_scalarproduct_float(const float *src0, const float *src1)
-{
-    float cprod, oprod;
-
-    declare_func_float(float, const float *src0, const float *src1, int len);
-
-    cprod = call_ref(src0, src1, LEN);
-    oprod = call_new(src0, src1, LEN);
-    if (!float_near_abs_eps(cprod, oprod, ARBITRARY_SCALARPRODUCT_CONST)) {
-        fprintf(stderr, "%- .12f - %- .12f = % .12g\n",
-                cprod, oprod, cprod - oprod);
-        fail();
-    }
-    bench_new(src0, src1, LEN);
-}
-
-void checkasm_check_float_dsp(void)
-{
-    LOCAL_ALIGNED_32(float,  src0,     [LEN]);
-    LOCAL_ALIGNED_32(float,  src1,     [LEN]);
-    LOCAL_ALIGNED_32(float,  src2,     [LEN]);
-    LOCAL_ALIGNED_16(float,  src3,     [LEN]);
-    LOCAL_ALIGNED_16(float,  src4,     [LEN]);
-    LOCAL_ALIGNED_16(float,  src5,     [LEN]);
-    LOCAL_ALIGNED_32(double, dbl_src0, [LEN]);
-    LOCAL_ALIGNED_32(double, dbl_src1, [LEN]);
-    LOCAL_ALIGNED_32(double, dbl_src2, [LEN]);
-    AVFloatDSPContext *fdsp = avpriv_float_dsp_alloc(1);
-
-    if (!fdsp) {
-        fprintf(stderr, "floatdsp: Out of memory error\n");
-        return;
-    }
-
-    randomize_buffer(src0);
-    randomize_buffer(src1);
-    randomize_buffer(src2);
-    randomize_buffer(src3);
-    randomize_buffer(src4);
-    randomize_buffer(src5);
-    randomize_buffer(dbl_src0);
-    randomize_buffer(dbl_src1);
-    randomize_buffer(dbl_src2);
-
-    if (check_func(fdsp->vector_fmul, "vector_fmul"))
-        test_vector_fmul(src0, src1);
-    if (check_func(fdsp->vector_fmul_add, "vector_fmul_add"))
-        test_vector_fmul_add(src0, src1, src2);
-    if (check_func(fdsp->vector_fmul_scalar, "vector_fmul_scalar"))
-        test_vector_fmul_scalar(src3, src4);
-    if (check_func(fdsp->vector_fmul_reverse, "vector_fmul_reverse"))
-        test_vector_fmul(src0, src1);
-    if (check_func(fdsp->vector_fmul_window, "vector_fmul_window"))
-        test_vector_fmul_window(src3, src4, src5);
-    report("vector_fmul");
-    if (check_func(fdsp->vector_fmac_scalar, "vector_fmac_scalar"))
-        test_vector_fmac_scalar(src0, src1, src2);
-    report("vector_fmac");
-    if (check_func(fdsp->vector_dmul, "vector_dmul"))
-        test_vector_dmul(dbl_src0, dbl_src1);
-    if (check_func(fdsp->vector_dmul_scalar, "vector_dmul_scalar"))
-        test_vector_dmul_scalar(dbl_src0, dbl_src1);
-    report("vector_dmul");
-    if (check_func(fdsp->vector_dmac_scalar, "vector_dmac_scalar"))
-        test_vector_dmac_scalar(dbl_src0, dbl_src1, dbl_src2);
-    report("vector_dmac");
-    if (check_func(fdsp->butterflies_float, "butterflies_float"))
-        test_butterflies_float(src3, src4);
-    report("butterflies_float");
-    if (check_func(fdsp->scalarproduct_float, "scalarproduct_float"))
-        test_scalarproduct_float(src3, src4);
-    report("scalarproduct_float");
-
-    av_freep(&fdsp);
-}
diff --git a/tests/checkasm/fmtconvert.c b/tests/checkasm/fmtconvert.c
deleted file mode 100644
index 50ad3ca..0000000
--- a/tests/checkasm/fmtconvert.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (c) 2015 Janne Grunau
- *
- * 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.
- */
-
-#include <math.h>
-#include <stdint.h>
-#include <string.h>
-
-#include "libavutil/internal.h"
-#include "libavutil/common.h"
-#include "libavcodec/fmtconvert.h"
-
-#include "checkasm.h"
-
-#define BUF_SIZE 1024
-
-#define randomize_input(len)                                    \
-    do {                                                        \
-        int k;                                                  \
-        for (k = 0; k < len; k++) {                             \
-            in[k] = rnd() - INT32_MAX;                         \
-        }                                                       \
-        for (     ; k < BUF_SIZE; k++) {                        \
-            in[k] = INT32_MAX;                                  \
-        }                                                       \
-    } while (0)
-
-void checkasm_check_fmtconvert(void)
-{
-    FmtConvertContext c;
-    LOCAL_ALIGNED(32, float,   dst0, [BUF_SIZE]);
-    LOCAL_ALIGNED(32, float,   dst1, [BUF_SIZE]);
-    LOCAL_ALIGNED(32, int32_t, in,   [BUF_SIZE]);
-    float scale_arr[128];
-    int length[] = {8, 16, 24, 56, 72, 128, 512, 520, 656, 768, 992};
-    int i, j;
-
-    for (i = 0; i < FF_ARRAY_ELEMS(scale_arr); i++)
-        scale_arr[i] = (FF_ARRAY_ELEMS(scale_arr) - FF_ARRAY_ELEMS(scale_arr) / 2) / 13;
-
-    ff_fmt_convert_init(&c, NULL);
-
-    memset(dst0, 0, sizeof(*dst0) * BUF_SIZE);
-    memset(dst1, 0, sizeof(*dst1) * BUF_SIZE);
-
-    if (check_func(c.int32_to_float_fmul_scalar, "int32_to_float_fmul_scalar")) {
-        declare_func(void, float *, const int32_t *, float, int);
-
-        for (i = 0; i < FF_ARRAY_ELEMS(scale_arr); i++) {
-            for (j = 0; j < FF_ARRAY_ELEMS(length); j++) {
-
-                randomize_input(length[j]);
-
-                call_ref(dst0, in, scale_arr[i], length[j]);
-                call_new(dst1, in, scale_arr[i], length[j]);
-
-                if (!float_near_ulp_array(dst0, dst1, 3, length[j])) {
-                    fail();
-                    break;
-                }
-
-                bench_new(dst1, in, scale_arr[i], length[j]);
-            }
-        }
-    }
-    if (check_func(c.int32_to_float_fmul_array8, "int32_to_float_fmul_array8")) {
-        declare_func(void, FmtConvertContext *, float *, const int32_t *,
-                     const float *, int);
-
-        for (i = 0; i < 4; i++) {
-            for (j = 0; j < FF_ARRAY_ELEMS(length); j++) {
-
-                randomize_input(length[j]);
-
-                call_ref(&c, dst0, in, scale_arr, length[j]);
-                call_new(&c, dst1, in, scale_arr, length[j]);
-
-                if (!float_near_ulp_array(dst0, dst1, 3, length[j])) {
-                    fail();
-                    fprintf(stderr, "int32_to_float_fmul_array8: len: %d\n", length[j]);
-                    break;
-                }
-
-                bench_new(&c, dst1, in, scale_arr, length[j]);
-            }
-        }
-    }
-    report("fmtconvert");
-}
diff --git a/tests/checkasm/g722dsp.c b/tests/checkasm/g722dsp.c
deleted file mode 100644
index 6bcff11..0000000
--- a/tests/checkasm/g722dsp.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * 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.
- */
-
-#include <string.h>
-#include "checkasm.h"
-#include "libavcodec/g722.h"
-#include "libavcodec/g722dsp.h"
-#include "libavcodec/mathops.h"
-
-#define randomize_buffers()                             \
-    do {                                                \
-        int i;                                          \
-        for (i = 0; i < PREV_SAMPLES_BUF_SIZE; i++) {   \
-            src0[i] = src1[i] = sign_extend(rnd(), 16); \
-        }                                               \
-    } while (0)
-
-static void check_qmf(void) {
-    int16_t src0[PREV_SAMPLES_BUF_SIZE];
-    int16_t src1[PREV_SAMPLES_BUF_SIZE];
-    const int16_t *tmp0 = src0;
-    const int16_t *tmp1 = src1;
-    int dst0[2], dst1[2];
-    int i;
-
-    declare_func(void, const int16_t *prev_samples, int xout[2]);
-
-    randomize_buffers();
-    for (i = 0; i < PREV_SAMPLES_BUF_SIZE - 24; i++) {
-        call_ref(tmp0++, dst0);
-        call_new(tmp1++, dst1);
-        if (memcmp(dst0, dst1, sizeof(dst0)))
-            fail();
-    }
-    bench_new(src1, dst1);
-}
-
-void checkasm_check_g722dsp(void)
-{
-    G722DSPContext h;
-
-    ff_g722dsp_init(&h);
-
-    if (check_func(h.apply_qmf, "g722_apply_qmf"))
-        check_qmf();
-
-    report("apply_qmf");
-}
diff --git a/tests/checkasm/h264dsp.c b/tests/checkasm/h264dsp.c
deleted file mode 100644
index 6975205..0000000
--- a/tests/checkasm/h264dsp.c
+++ /dev/null
@@ -1,452 +0,0 @@
-/*
- * Copyright (c) 2016 Martin Storsjo
- *
- * 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.
- */
-
-#include <string.h>
-#include "checkasm.h"
-#include "libavcodec/avcodec.h"
-#include "libavcodec/h264dsp.h"
-#include "libavcodec/h264data.h"
-#include "libavutil/common.h"
-#include "libavutil/internal.h"
-#include "libavutil/intreadwrite.h"
-
-static const uint32_t pixel_mask[3] = { 0xffffffff, 0x01ff01ff, 0x03ff03ff };
-static const uint32_t pixel_mask_lf[3] = { 0xff0fff0f, 0x01ff000f, 0x03ff000f };
-
-#define SIZEOF_PIXEL ((bit_depth + 7) / 8)
-#define SIZEOF_COEF  (2 * ((bit_depth + 7) / 8))
-#define PIXEL_STRIDE 16
-
-#define randomize_buffers()                                                  \
-    do {                                                                     \
-        int x, y;                                                            \
-        uint32_t mask = pixel_mask[bit_depth - 8];                           \
-        for (y = 0; y < sz; y++) {                                           \
-            for (x = 0; x < PIXEL_STRIDE; x += 4) {                          \
-                AV_WN32A(src + y * PIXEL_STRIDE + x, rnd() & mask);          \
-                AV_WN32A(dst + y * PIXEL_STRIDE + x, rnd() & mask);          \
-            }                                                                \
-            for (x = 0; x < sz; x++) {                                       \
-                if (bit_depth == 8) {                                        \
-                    coef[y * sz + x] = src[y * PIXEL_STRIDE + x] -           \
-                                       dst[y * PIXEL_STRIDE + x];            \
-                } else {                                                     \
-                    ((int32_t *)coef)[y * sz + x] =                          \
-                        ((uint16_t *)src)[y * (PIXEL_STRIDE/2) + x] -        \
-                        ((uint16_t *)dst)[y * (PIXEL_STRIDE/2) + x];         \
-                }                                                            \
-            }                                                                \
-        }                                                                    \
-    } while (0)
-
-#define dct4x4_impl(size, dctcoef)                                           \
-static void dct4x4_##size(dctcoef *coef)                                     \
-{                                                                            \
-    int i, y, x;                                                             \
-    dctcoef tmp[16];                                                         \
-    for (i = 0; i < 4; i++) {                                                \
-        const int z0 = coef[i*4 + 0] + coef[i*4 + 3];                        \
-        const int z1 = coef[i*4 + 1] + coef[i*4 + 2];                        \
-        const int z2 = coef[i*4 + 0] - coef[i*4 + 3];                        \
-        const int z3 = coef[i*4 + 1] - coef[i*4 + 2];                        \
-        tmp[i + 4*0] =   z0 +   z1;                                          \
-        tmp[i + 4*1] = 2*z2 +   z3;                                          \
-        tmp[i + 4*2] =   z0 -   z1;                                          \
-        tmp[i + 4*3] =   z2 - 2*z3;                                          \
-    }                                                                        \
-    for (i = 0; i < 4; i++) {                                                \
-        const int z0 = tmp[i*4 + 0] + tmp[i*4 + 3];                          \
-        const int z1 = tmp[i*4 + 1] + tmp[i*4 + 2];                          \
-        const int z2 = tmp[i*4 + 0] - tmp[i*4 + 3];                          \
-        const int z3 = tmp[i*4 + 1] - tmp[i*4 + 2];                          \
-        coef[i*4 + 0] =   z0 +   z1;                                         \
-        coef[i*4 + 1] = 2*z2 +   z3;                                         \
-        coef[i*4 + 2] =   z0 -   z1;                                         \
-        coef[i*4 + 3] =   z2 - 2*z3;                                         \
-    }                                                                        \
-    for (y = 0; y < 4; y++) {                                                \
-        for (x = 0; x < 4; x++) {                                            \
-            static const int scale[] = { 13107 * 10, 8066 * 13, 5243 * 16 }; \
-            const int idx = (y & 1) + (x & 1);                               \
-            coef[y*4 + x] = (coef[y*4 + x] * scale[idx] + (1 << 14)) >> 15;  \
-        }                                                                    \
-    }                                                                        \
-}
-
-#define DCT8_1D(src, srcstride, dst, dststride) do {                         \
-    const int a0 = (src)[srcstride * 0] + (src)[srcstride * 7];              \
-    const int a1 = (src)[srcstride * 0] - (src)[srcstride * 7];              \
-    const int a2 = (src)[srcstride * 1] + (src)[srcstride * 6];              \
-    const int a3 = (src)[srcstride * 1] - (src)[srcstride * 6];              \
-    const int a4 = (src)[srcstride * 2] + (src)[srcstride * 5];              \
-    const int a5 = (src)[srcstride * 2] - (src)[srcstride * 5];              \
-    const int a6 = (src)[srcstride * 3] + (src)[srcstride * 4];              \
-    const int a7 = (src)[srcstride * 3] - (src)[srcstride * 4];              \
-    const int b0 = a0 + a6;                                                  \
-    const int b1 = a2 + a4;                                                  \
-    const int b2 = a0 - a6;                                                  \
-    const int b3 = a2 - a4;                                                  \
-    const int b4 = a3 + a5 + (a1 + (a1 >> 1));                               \
-    const int b5 = a1 - a7 - (a5 + (a5 >> 1));                               \
-    const int b6 = a1 + a7 - (a3 + (a3 >> 1));                               \
-    const int b7 = a3 - a5 + (a7 + (a7 >> 1));                               \
-    (dst)[dststride * 0] =  b0 +  b1;                                        \
-    (dst)[dststride * 1] =  b4 + (b7 >> 2);                                  \
-    (dst)[dststride * 2] =  b2 + (b3 >> 1);                                  \
-    (dst)[dststride * 3] =  b5 + (b6 >> 2);                                  \
-    (dst)[dststride * 4] =  b0  - b1;                                        \
-    (dst)[dststride * 5] =  b6 - (b5 >> 2);                                  \
-    (dst)[dststride * 6] = (b2 >> 1) - b3;                                   \
-    (dst)[dststride * 7] = (b4 >> 2) - b7;                                   \
-} while (0)
-
-#define dct8x8_impl(size, dctcoef)                                           \
-static void dct8x8_##size(dctcoef *coef)                                     \
-{                                                                            \
-    int i, x, y;                                                             \
-    dctcoef tmp[64];                                                         \
-    for (i = 0; i < 8; i++)                                                  \
-        DCT8_1D(coef + i, 8, tmp + i, 8);                                    \
-                                                                             \
-    for (i = 0; i < 8; i++)                                                  \
-        DCT8_1D(tmp + 8*i, 1, coef + i, 8);                                  \
-                                                                             \
-    for (y = 0; y < 8; y++) {                                                \
-        for (x = 0; x < 8; x++) {                                            \
-            static const int scale[] = {                                     \
-                13107 * 20, 11428 * 18, 20972 * 32,                          \
-                12222 * 19, 16777 * 25, 15481 * 24,                          \
-            };                                                               \
-            static const int idxmap[] = {                                    \
-                0, 3, 4, 3,                                                  \
-                3, 1, 5, 1,                                                  \
-                4, 5, 2, 5,                                                  \
-                3, 1, 5, 1,                                                  \
-            };                                                               \
-            const int idx = idxmap[(y & 3) * 4 + (x & 3)];                   \
-            coef[y*8 + x] = ((int64_t)coef[y*8 + x] *                        \
-                             scale[idx] + (1 << 17)) >> 18;                  \
-        }                                                                    \
-    }                                                                        \
-}
-
-dct4x4_impl(16, int16_t)
-dct4x4_impl(32, int32_t)
-
-dct8x8_impl(16, int16_t)
-dct8x8_impl(32, int32_t)
-
-static void dct4x4(int16_t *coef, int bit_depth)
-{
-    if (bit_depth == 8)
-        dct4x4_16(coef);
-    else
-        dct4x4_32((int32_t *) coef);
-}
-
-static void dct8x8(int16_t *coef, int bit_depth)
-{
-    if (bit_depth == 8) {
-        dct8x8_16(coef);
-    } else {
-        dct8x8_32((int32_t *) coef);
-    }
-}
-
-
-static void check_idct(void)
-{
-    LOCAL_ALIGNED_16(uint8_t, src,  [8 * 8 * 2]);
-    LOCAL_ALIGNED_16(uint8_t, dst,  [8 * 8 * 2]);
-    LOCAL_ALIGNED_16(uint8_t, dst0, [8 * 8 * 2]);
-    LOCAL_ALIGNED_16(uint8_t, dst1_base, [8 * 8 * 2 + 32]);
-    LOCAL_ALIGNED_16(int16_t, coef, [8 * 8 * 2]);
-    LOCAL_ALIGNED_16(int16_t, subcoef0, [8 * 8 * 2]);
-    LOCAL_ALIGNED_16(int16_t, subcoef1, [8 * 8 * 2]);
-    H264DSPContext h;
-    int bit_depth, sz, align, dc;
-    declare_func_emms(AV_CPU_FLAG_MMX, void, uint8_t *dst, int16_t *block, int stride);
-
-    for (bit_depth = 8; bit_depth <= 10; bit_depth++) {
-        ff_h264dsp_init(&h, bit_depth, 1);
-        for (sz = 4; sz <= 8; sz += 4) {
-            randomize_buffers();
-
-            if (sz == 4)
-                dct4x4(coef, bit_depth);
-            else
-                dct8x8(coef, bit_depth);
-
-            for (dc = 0; dc <= 1; dc++) {
-                void (*idct)(uint8_t *, int16_t *, int) = NULL;
-                switch ((sz << 1) | dc) {
-                case (4 << 1) | 0: idct = h.h264_idct_add; break;
-                case (4 << 1) | 1: idct = h.h264_idct_dc_add; break;
-                case (8 << 1) | 0: idct = h.h264_idct8_add; break;
-                case (8 << 1) | 1: idct = h.h264_idct8_dc_add; break;
-                }
-                if (check_func(idct, "h264_idct%d_add%s_%dbpp", sz, dc ? "_dc" : "", bit_depth)) {
-                    for (align = 0; align < 16; align += sz * SIZEOF_PIXEL) {
-                        uint8_t *dst1 = dst1_base + align;
-                        if (dc) {
-                            memset(subcoef0, 0, sz * sz * SIZEOF_COEF);
-                            memcpy(subcoef0, coef, SIZEOF_COEF);
-                        } else {
-                            memcpy(subcoef0, coef, sz * sz * SIZEOF_COEF);
-                        }
-                        memcpy(dst0, dst, sz * PIXEL_STRIDE);
-                        memcpy(dst1, dst, sz * PIXEL_STRIDE);
-                        memcpy(subcoef1, subcoef0, sz * sz * SIZEOF_COEF);
-                        call_ref(dst0, subcoef0, PIXEL_STRIDE);
-                        call_new(dst1, subcoef1, PIXEL_STRIDE);
-                        if (memcmp(dst0, dst1, sz * PIXEL_STRIDE) ||
-                            memcmp(subcoef0, subcoef1, sz * sz * SIZEOF_COEF))
-                            fail();
-                        bench_new(dst1, subcoef1, sz * SIZEOF_PIXEL);
-                    }
-                }
-            }
-        }
-    }
-}
-
-static void check_idct_multiple(void)
-{
-    LOCAL_ALIGNED_16(uint8_t, dst_full,  [16 * 16 * 2]);
-    LOCAL_ALIGNED_16(int16_t, coef_full, [16 * 16 * 2]);
-    LOCAL_ALIGNED_16(uint8_t, dst0,  [16 * 16 * 2]);
-    LOCAL_ALIGNED_16(uint8_t, dst1,  [16 * 16 * 2]);
-    LOCAL_ALIGNED_16(int16_t, coef0, [16 * 16 * 2]);
-    LOCAL_ALIGNED_16(int16_t, coef1, [16 * 16 * 2]);
-    LOCAL_ALIGNED_16(uint8_t, nnzc,  [15 * 8]);
-    H264DSPContext h;
-    int bit_depth, i, y, func;
-    declare_func_emms(AV_CPU_FLAG_MMX, void, uint8_t *dst, const int *block_offset, int16_t *block, int stride, const uint8_t nnzc[15*8]);
-
-    for (bit_depth = 8; bit_depth <= 10; bit_depth++) {
-        ff_h264dsp_init(&h, bit_depth, 1);
-        for (func = 0; func < 3; func++) {
-            void (*idct)(uint8_t *, const int *, int16_t *, int, const uint8_t[]) = NULL;
-            const char *name;
-            int sz = 4, intra = 0;
-            int block_offset[16] = { 0 };
-            switch (func) {
-            case 0:
-                idct = h.h264_idct_add16;
-                name = "h264_idct_add16";
-                break;
-            case 1:
-                idct = h.h264_idct_add16intra;
-                name = "h264_idct_add16intra";
-                intra = 1;
-                break;
-            case 2:
-                idct = h.h264_idct8_add4;
-                name = "h264_idct8_add4";
-                sz = 8;
-                break;
-            }
-            memset(nnzc, 0, 15 * 8);
-            memset(coef_full, 0, 16 * 16 * SIZEOF_COEF);
-            for (i = 0; i < 16 * 16; i += sz * sz) {
-                uint8_t src[8 * 8 * 2];
-                uint8_t dst[8 * 8 * 2];
-                int16_t coef[8 * 8 * 2];
-                int index = i / sz;
-                int block_y = (index / 16) * sz;
-                int block_x = index % 16;
-                int offset = (block_y * 16 + block_x) * SIZEOF_PIXEL;
-                int nnz = rnd() % 3;
-
-                randomize_buffers();
-                if (sz == 4)
-                    dct4x4(coef, bit_depth);
-                else
-                    dct8x8(coef, bit_depth);
-
-                for (y = 0; y < sz; y++)
-                    memcpy(&dst_full[offset + y * 16 * SIZEOF_PIXEL],
-                           &dst[PIXEL_STRIDE * y], sz * SIZEOF_PIXEL);
-
-                if (nnz > 1)
-                    nnz = sz * sz;
-                memcpy(&coef_full[i * SIZEOF_COEF/sizeof(coef[0])],
-                       coef, nnz * SIZEOF_COEF);
-
-                if (intra && nnz == 1)
-                    nnz = 0;
-
-                nnzc[scan8[i / 16]] = nnz;
-                block_offset[i / 16] = offset;
-            }
-
-            if (check_func(idct, "%s_%dbpp", name, bit_depth)) {
-                memcpy(coef0, coef_full, 16 * 16 * SIZEOF_COEF);
-                memcpy(coef1, coef_full, 16 * 16 * SIZEOF_COEF);
-                memcpy(dst0, dst_full, 16 * 16 * SIZEOF_PIXEL);
-                memcpy(dst1, dst_full, 16 * 16 * SIZEOF_PIXEL);
-                call_ref(dst0, block_offset, coef0, 16 * SIZEOF_PIXEL, nnzc);
-                call_new(dst1, block_offset, coef1, 16 * SIZEOF_PIXEL, nnzc);
-                if (memcmp(dst0, dst1, 16 * 16 * SIZEOF_PIXEL) ||
-                    memcmp(coef0, coef1, 16 * 16 * SIZEOF_COEF))
-                    fail();
-                bench_new(dst1, block_offset, coef1, 16 * SIZEOF_PIXEL, nnzc);
-            }
-        }
-    }
-}
-
-
-static void check_loop_filter(void)
-{
-    LOCAL_ALIGNED_16(uint8_t, dst, [32 * 16 * 2]);
-    LOCAL_ALIGNED_16(uint8_t, dst0, [32 * 16 * 2]);
-    LOCAL_ALIGNED_16(uint8_t, dst1, [32 * 16 * 2]);
-    H264DSPContext h;
-    int bit_depth;
-    int alphas[36], betas[36];
-    int8_t tc0[36][4];
-
-    declare_func_emms(AV_CPU_FLAG_MMX, void, uint8_t *pix, ptrdiff_t stride,
-                      int alpha, int beta, int8_t *tc0);
-
-    for (bit_depth = 8; bit_depth <= 10; bit_depth++) {
-        int i, j, a, c;
-        uint32_t mask = pixel_mask_lf[bit_depth - 8];
-        ff_h264dsp_init(&h, bit_depth, 1);
-        for (i = 35, a = 255, c = 250; i >= 0; i--) {
-            alphas[i] = a << (bit_depth - 8);
-            betas[i]  = (i + 1) / 2 << (bit_depth - 8);
-            tc0[i][0] = tc0[i][3] = (c + 6) / 10;
-            tc0[i][1] = (c + 7) / 15;
-            tc0[i][2] = (c + 9) / 20;
-            a = a*9/10;
-            c = c*9/10;
-        }
-
-#define CHECK_LOOP_FILTER(name, align, idc)                             \
-        do {                                                            \
-            if (check_func(h.name, #name #idc "_%dbpp", bit_depth)) {   \
-                for (j = 0; j < 36; j++) {                              \
-                    intptr_t off = 8 * 32 + (j & 15) * 4 * !align;      \
-                    for (i = 0; i < 1024; i+=4) {                       \
-                        AV_WN32A(dst + i, rnd() & mask);                \
-                    }                                                   \
-                    memcpy(dst0, dst, 32 * 16 * 2);                     \
-                    memcpy(dst1, dst, 32 * 16 * 2);                     \
-                                                                        \
-                    call_ref(dst0 + off, 32, alphas[j], betas[j], tc0[j]); \
-                    call_new(dst1 + off, 32, alphas[j], betas[j], tc0[j]); \
-                    if (memcmp(dst0, dst1, 32 * 16 * SIZEOF_PIXEL)) {   \
-                        fprintf(stderr, #name #idc ": j:%d, alpha:%d beta:%d " \
-                                "tc0:{%d,%d,%d,%d}\n", j, alphas[j], betas[j], \
-                                tc0[j][0], tc0[j][1], tc0[j][2], tc0[j][3]); \
-                        fail();                                         \
-                    }                                                   \
-                    bench_new(dst1, 32, alphas[j], betas[j], tc0[j]);   \
-                }                                                       \
-            }                                                           \
-        } while (0)
-
-        CHECK_LOOP_FILTER(h264_v_loop_filter_luma, 1,);
-        CHECK_LOOP_FILTER(h264_h_loop_filter_luma, 0,);
-        CHECK_LOOP_FILTER(h264_h_loop_filter_luma_mbaff, 0,);
-        CHECK_LOOP_FILTER(h264_v_loop_filter_chroma, 1,);
-        CHECK_LOOP_FILTER(h264_h_loop_filter_chroma, 0,);
-        CHECK_LOOP_FILTER(h264_h_loop_filter_chroma_mbaff, 0,);
-
-        ff_h264dsp_init(&h, bit_depth, 2);
-        CHECK_LOOP_FILTER(h264_h_loop_filter_chroma, 0, 422);
-        CHECK_LOOP_FILTER(h264_h_loop_filter_chroma_mbaff, 0, 422);
-#undef CHECK_LOOP_FILTER
-    }
-}
-
-static void check_loop_filter_intra(void)
-{
-    LOCAL_ALIGNED_16(uint8_t, dst, [32 * 16 * 2]);
-    LOCAL_ALIGNED_16(uint8_t, dst0, [32 * 16 * 2]);
-    LOCAL_ALIGNED_16(uint8_t, dst1, [32 * 16 * 2]);
-    H264DSPContext h;
-    int bit_depth;
-    int alphas[36], betas[36];
-
-    declare_func_emms(AV_CPU_FLAG_MMX, void, uint8_t *pix, ptrdiff_t stride,
-                      int alpha, int beta);
-
-    for (bit_depth = 8; bit_depth <= 10; bit_depth++) {
-        int i, j, a;
-        uint32_t mask = pixel_mask_lf[bit_depth - 8];
-        ff_h264dsp_init(&h, bit_depth, 1);
-        for (i = 35, a = 255; i >= 0; i--) {
-            alphas[i] = a << (bit_depth - 8);
-            betas[i]  = (i + 1) / 2 << (bit_depth - 8);
-            a = a*9/10;
-        }
-
-#define CHECK_LOOP_FILTER(name, align, idc)                             \
-        do {                                                            \
-            if (check_func(h.name, #name #idc "_%dbpp", bit_depth)) {   \
-                for (j = 0; j < 36; j++) {                              \
-                    intptr_t off = 8 * 32 + (j & 15) * 4 * !align;      \
-                    for (i = 0; i < 1024; i+=4) {                       \
-                        AV_WN32A(dst + i, rnd() & mask);                \
-                    }                                                   \
-                    memcpy(dst0, dst, 32 * 16 * 2);                     \
-                    memcpy(dst1, dst, 32 * 16 * 2);                     \
-                                                                        \
-                    call_ref(dst0 + off, 32, alphas[j], betas[j]);      \
-                    call_new(dst1 + off, 32, alphas[j], betas[j]);      \
-                    if (memcmp(dst0, dst1, 32 * 16 * SIZEOF_PIXEL)) {   \
-                        fprintf(stderr, #name #idc ": j:%d, alpha:%d beta:%d\n", \
-                                j, alphas[j], betas[j]);                \
-                        fail();                                         \
-                    }                                                   \
-                    bench_new(dst1, 32, alphas[j], betas[j]);           \
-                }                                                       \
-            }                                                           \
-        } while (0)
-
-        CHECK_LOOP_FILTER(h264_v_loop_filter_luma_intra, 1,);
-        CHECK_LOOP_FILTER(h264_h_loop_filter_luma_intra, 0,);
-        CHECK_LOOP_FILTER(h264_h_loop_filter_luma_mbaff_intra, 0,);
-        CHECK_LOOP_FILTER(h264_v_loop_filter_chroma_intra, 1,);
-        CHECK_LOOP_FILTER(h264_h_loop_filter_chroma_intra, 0,);
-        CHECK_LOOP_FILTER(h264_h_loop_filter_chroma_mbaff_intra, 0,);
-
-        ff_h264dsp_init(&h, bit_depth, 2);
-        CHECK_LOOP_FILTER(h264_h_loop_filter_chroma_intra, 0, 422);
-        CHECK_LOOP_FILTER(h264_h_loop_filter_chroma_mbaff_intra, 0, 422);
-#undef CHECK_LOOP_FILTER
-    }
-}
-
-void checkasm_check_h264dsp(void)
-{
-    check_idct();
-    check_idct_multiple();
-    report("idct");
-
-    check_loop_filter();
-    report("loop_filter");
-
-    check_loop_filter_intra();
-    report("loop_filter_intra");
-}
diff --git a/tests/checkasm/h264pred.c b/tests/checkasm/h264pred.c
deleted file mode 100644
index 59dcb2f..0000000
--- a/tests/checkasm/h264pred.c
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
- * Copyright (c) 2015 Henrik Gramner
- *
- * 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.
- */
-
-#include <string.h>
-#include "checkasm.h"
-#include "libavcodec/avcodec.h"
-#include "libavcodec/h264pred.h"
-#include "libavutil/common.h"
-#include "libavutil/internal.h"
-#include "libavutil/intreadwrite.h"
-
-static const int codec_ids[4] = { AV_CODEC_ID_H264, AV_CODEC_ID_VP8, AV_CODEC_ID_RV40, AV_CODEC_ID_SVQ3 };
-
-static const char * const pred4x4_modes[4][15] = {
-    { /* H.264 */
-        [VERT_PRED           ] = "vertical",
-        [HOR_PRED            ] = "horizontal",
-        [DC_PRED             ] = "dc",
-        [DIAG_DOWN_LEFT_PRED ] = "down_left",
-        [DIAG_DOWN_RIGHT_PRED] = "down_right",
-        [VERT_RIGHT_PRED     ] = "vertical_right",
-        [HOR_DOWN_PRED       ] = "horizontal_right",
-        [VERT_LEFT_PRED      ] = "vertical_left",
-        [HOR_UP_PRED         ] = "horizontal_up",
-        [LEFT_DC_PRED        ] = "left_dc",
-        [TOP_DC_PRED         ] = "top_dc",
-        [DC_128_PRED         ] = "dc_128",
-    },
-    { /* VP8 */
-        [VERT_PRED     ] = "vertical_vp8",
-        [HOR_PRED      ] = "horizontal_vp8",
-        [VERT_LEFT_PRED] = "vertical_left_vp8",
-        [TM_VP8_PRED   ] = "tm_vp8",
-        [DC_127_PRED   ] = "dc_127_vp8",
-        [DC_129_PRED   ] = "dc_129_vp8",
-    },
-    { /* RV40 */
-        [DIAG_DOWN_LEFT_PRED            ] = "down_left_rv40",
-        [VERT_LEFT_PRED                 ] = "vertical_left_rv40",
-        [HOR_UP_PRED                    ] = "horizontal_up_rv40",
-        [DIAG_DOWN_LEFT_PRED_RV40_NODOWN] = "down_left_nodown_rv40",
-        [HOR_UP_PRED_RV40_NODOWN        ] = "horizontal_up_nodown_rv40",
-        [VERT_LEFT_PRED_RV40_NODOWN     ] = "vertical_left_nodown_rv40",
-    },
-    { /* SVQ3 */
-        [DIAG_DOWN_LEFT_PRED] = "down_left_svq3",
-    },
-};
-
-static const char * const pred8x8_modes[4][11] = {
-    { /* H.264 */
-        [DC_PRED8x8              ] = "dc",
-        [HOR_PRED8x8             ] = "horizontal",
-        [VERT_PRED8x8            ] = "vertical",
-        [PLANE_PRED8x8           ] = "plane",
-        [LEFT_DC_PRED8x8         ] = "left_dc",
-        [TOP_DC_PRED8x8          ] = "top_dc",
-        [DC_128_PRED8x8          ] = "dc_128",
-        [ALZHEIMER_DC_L0T_PRED8x8] = "mad_cow_dc_l0t",
-        [ALZHEIMER_DC_0LT_PRED8x8] = "mad_cow_dc_0lt",
-        [ALZHEIMER_DC_L00_PRED8x8] = "mad_cow_dc_l00",
-        [ALZHEIMER_DC_0L0_PRED8x8] = "mad_cow_dc_0l0",
-    },
-    { /* VP8 */
-        [PLANE_PRED8x8 ] = "tm_vp8",
-        [DC_127_PRED8x8] = "dc_127_vp8",
-        [DC_129_PRED8x8] = "dc_129_vp8",
-    },
-    { /* RV40 */
-        [DC_PRED8x8     ] = "dc_rv40",
-        [LEFT_DC_PRED8x8] = "left_dc_rv40",
-        [TOP_DC_PRED8x8 ] = "top_dc_rv40",
-    },
-    /* nothing for SVQ3 */
-};
-
-static const char * const pred16x16_modes[4][9] = {
-    { /* H.264 */
-        [DC_PRED8x8     ] = "dc",
-        [HOR_PRED8x8    ] = "horizontal",
-        [VERT_PRED8x8   ] = "vertical",
-        [PLANE_PRED8x8  ] = "plane",
-        [LEFT_DC_PRED8x8] = "left_dc",
-        [TOP_DC_PRED8x8 ] = "top_dc",
-        [DC_128_PRED8x8 ] = "dc_128",
-    },
-    { /* VP8 */
-        [PLANE_PRED8x8 ] = "tm_vp8",
-        [DC_127_PRED8x8] = "dc_127_vp8",
-        [DC_129_PRED8x8] = "dc_129_vp8",
-    },
-    { /* RV40 */
-        [PLANE_PRED8x8] = "plane_rv40",
-    },
-    { /* SVQ3 */
-        [PLANE_PRED8x8] = "plane_svq3",
-    },
-};
-
-static const uint32_t pixel_mask[3] = { 0xffffffff, 0x01ff01ff, 0x03ff03ff };
-
-#define SIZEOF_PIXEL ((bit_depth + 7) / 8)
-#define BUF_SIZE (3 * 16 * 17)
-
-#define check_pred_func(func, name, mode_name)                                    \
-    (mode_name && ((codec_ids[codec] == AV_CODEC_ID_H264) ?                       \
-                   check_func(func, "pred%s_%s_%d", name, mode_name, bit_depth) : \
-                   check_func(func, "pred%s_%s", name, mode_name)))
-
-#define randomize_buffers()                        \
-    do {                                           \
-        uint32_t mask = pixel_mask[bit_depth - 8]; \
-        int i;                                     \
-        for (i = 0; i < BUF_SIZE; i += 4) {        \
-            uint32_t r = rnd() & mask;             \
-            AV_WN32A(buf0 + i, r);                 \
-            AV_WN32A(buf1 + i, r);                 \
-        }                                          \
-    } while (0)
-
-#define src0 (buf0 + 4 * 16) /* Offset to allow room for top and left */
-#define src1 (buf1 + 4 * 16)
-
-static void check_pred4x4(H264PredContext *h, uint8_t *buf0, uint8_t *buf1,
-                          int codec, int chroma_format, int bit_depth)
-{
-    if (chroma_format == 1) {
-        uint8_t *topright = buf0 + 2*16;
-        int pred_mode;
-        declare_func_emms(AV_CPU_FLAG_MMX | AV_CPU_FLAG_MMXEXT, void, uint8_t *src, const uint8_t *topright, ptrdiff_t stride);
-
-        for (pred_mode = 0; pred_mode < 15; pred_mode++) {
-            if (check_pred_func(h->pred4x4[pred_mode], "4x4", pred4x4_modes[codec][pred_mode])) {
-                randomize_buffers();
-                call_ref(src0, topright, 12*SIZEOF_PIXEL);
-                call_new(src1, topright, 12*SIZEOF_PIXEL);
-                if (memcmp(buf0, buf1, BUF_SIZE))
-                    fail();
-                bench_new(src1, topright, 12*SIZEOF_PIXEL);
-            }
-        }
-    }
-}
-
-static void check_pred8x8(H264PredContext *h, uint8_t *buf0, uint8_t *buf1,
-                          int codec, int chroma_format, int bit_depth)
-{
-    int pred_mode;
-    declare_func_emms(AV_CPU_FLAG_MMX | AV_CPU_FLAG_MMXEXT, void, uint8_t *src, ptrdiff_t stride);
-
-    for (pred_mode = 0; pred_mode < 11; pred_mode++) {
-        if (check_pred_func(h->pred8x8[pred_mode], (chroma_format == 2) ? "8x16" : "8x8",
-                            pred8x8_modes[codec][pred_mode])) {
-            randomize_buffers();
-            call_ref(src0, 24*SIZEOF_PIXEL);
-            call_new(src1, 24*SIZEOF_PIXEL);
-            if (memcmp(buf0, buf1, BUF_SIZE))
-                fail();
-            bench_new(src1, 24*SIZEOF_PIXEL);
-        }
-    }
-}
-
-static void check_pred16x16(H264PredContext *h, uint8_t *buf0, uint8_t *buf1,
-                            int codec, int chroma_format, int bit_depth)
-{
-    if (chroma_format == 1) {
-        int pred_mode;
-        declare_func_emms(AV_CPU_FLAG_MMX | AV_CPU_FLAG_MMXEXT, void, uint8_t *src, ptrdiff_t stride);
-
-        for (pred_mode = 0; pred_mode < 9; pred_mode++) {
-            if (check_pred_func(h->pred16x16[pred_mode], "16x16", pred16x16_modes[codec][pred_mode])) {
-                randomize_buffers();
-                call_ref(src0, 48);
-                call_new(src1, 48);
-                if (memcmp(buf0, buf1, BUF_SIZE))
-                    fail();
-                bench_new(src1, 48);
-            }
-        }
-    }
-}
-
-static void check_pred8x8l(H264PredContext *h, uint8_t *buf0, uint8_t *buf1,
-                           int codec, int chroma_format, int bit_depth)
-{
-    if (chroma_format == 1 && codec_ids[codec] == AV_CODEC_ID_H264) {
-        int pred_mode;
-        declare_func_emms(AV_CPU_FLAG_MMXEXT, void, uint8_t *src, int topleft, int topright, ptrdiff_t stride);
-
-        for (pred_mode = 0; pred_mode < 12; pred_mode++) {
-            if (check_pred_func(h->pred8x8l[pred_mode], "8x8l", pred4x4_modes[codec][pred_mode])) {
-                int neighbors;
-                for (neighbors = 0; neighbors <= 0xc000; neighbors += 0x4000) {
-                    int has_topleft  = neighbors & 0x8000;
-                    int has_topright = neighbors & 0x4000;
-
-                    if ((pred_mode == DIAG_DOWN_RIGHT_PRED || pred_mode == VERT_RIGHT_PRED) && !has_topleft)
-                        continue; /* Those aren't allowed according to the spec */
-
-                    randomize_buffers();
-                    call_ref(src0, has_topleft, has_topright, 24*SIZEOF_PIXEL);
-                    call_new(src1, has_topleft, has_topright, 24*SIZEOF_PIXEL);
-                    if (memcmp(buf0, buf1, BUF_SIZE))
-                        fail();
-                    bench_new(src1, has_topleft, has_topright, 24*SIZEOF_PIXEL);
-                }
-            }
-        }
-    }
-}
-
-/* TODO: Add tests for H.264 lossless H/V prediction */
-
-void checkasm_check_h264pred(void)
-{
-    static const struct {
-        void (*func)(H264PredContext*, uint8_t*, uint8_t*, int, int, int);
-        const char *name;
-    } tests[] = {
-        { check_pred4x4,   "pred4x4"   },
-        { check_pred8x8,   "pred8x8"   },
-        { check_pred16x16, "pred16x16" },
-        { check_pred8x8l,  "pred8x8l"  },
-    };
-
-    LOCAL_ALIGNED_16(uint8_t, buf0, [BUF_SIZE]);
-    LOCAL_ALIGNED_16(uint8_t, buf1, [BUF_SIZE]);
-    H264PredContext h;
-    int test, codec, chroma_format, bit_depth;
-
-    for (test = 0; test < FF_ARRAY_ELEMS(tests); test++) {
-        for (codec = 0; codec < 4; codec++) {
-            int codec_id = codec_ids[codec];
-            for (bit_depth = 8; bit_depth <= (codec_id == AV_CODEC_ID_H264 ? 10 : 8); bit_depth++)
-                for (chroma_format = 1; chroma_format <= (codec_id == AV_CODEC_ID_H264 ? 2 : 1); chroma_format++) {
-                    ff_h264_pred_init(&h, codec_id, bit_depth, chroma_format);
-                    tests[test].func(&h, buf0, buf1, codec, chroma_format, bit_depth);
-                }
-        }
-        report("%s", tests[test].name);
-    }
-}
diff --git a/tests/checkasm/h264qpel.c b/tests/checkasm/h264qpel.c
deleted file mode 100644
index ba069f1..0000000
--- a/tests/checkasm/h264qpel.c
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2015 Henrik Gramner
- *
- * 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.
- */
-
-#include <string.h>
-#include "checkasm.h"
-#include "libavcodec/h264qpel.h"
-#include "libavutil/common.h"
-#include "libavutil/internal.h"
-#include "libavutil/intreadwrite.h"
-
-static const uint32_t pixel_mask[3] = { 0xffffffff, 0x01ff01ff, 0x03ff03ff };
-
-#define SIZEOF_PIXEL ((bit_depth + 7) / 8)
-#define BUF_SIZE (2 * 16 * (16 + 3 + 4))
-
-#define randomize_buffers()                        \
-    do {                                           \
-        uint32_t mask = pixel_mask[bit_depth - 8]; \
-        int k;                                     \
-        for (k = 0; k < BUF_SIZE; k += 4) {        \
-            uint32_t r = rnd() & mask;             \
-            AV_WN32A(buf0 + k, r);                 \
-            AV_WN32A(buf1 + k, r);                 \
-            r = rnd();                             \
-            AV_WN32A(dst0 + k, r);                 \
-            AV_WN32A(dst1 + k, r);                 \
-        }                                          \
-    } while (0)
-
-#define src0 (buf0 + 3 * 2 * 16) /* h264qpel functions read data from negative src pointer offsets */
-#define src1 (buf1 + 3 * 2 * 16)
-
-void checkasm_check_h264qpel(void)
-{
-    LOCAL_ALIGNED_16(uint8_t, buf0, [BUF_SIZE]);
-    LOCAL_ALIGNED_16(uint8_t, buf1, [BUF_SIZE]);
-    LOCAL_ALIGNED_16(uint8_t, dst0, [BUF_SIZE]);
-    LOCAL_ALIGNED_16(uint8_t, dst1, [BUF_SIZE]);
-    H264QpelContext h;
-    int op, bit_depth, i, j;
-    declare_func_emms(AV_CPU_FLAG_MMX | AV_CPU_FLAG_MMXEXT, void, uint8_t *dst, const uint8_t *src, ptrdiff_t stride);
-
-    for (op = 0; op < 2; op++) {
-        qpel_mc_func (*tab)[16] = op ? h.avg_h264_qpel_pixels_tab : h.put_h264_qpel_pixels_tab;
-        const char *op_name = op ? "avg" : "put";
-
-        for (bit_depth = 8; bit_depth <= 10; bit_depth++) {
-            ff_h264qpel_init(&h, bit_depth);
-            for (i = 0; i < (op ? 3 : 4); i++) {
-                int size = 16 >> i;
-                for (j = 0; j < 16; j++)
-                    if (check_func(tab[i][j], "%s_h264_qpel_%d_mc%d%d_%d", op_name, size, j & 3, j >> 2, bit_depth)) {
-                        randomize_buffers();
-                        call_ref(dst0, src0, size * SIZEOF_PIXEL);
-                        call_new(dst1, src1, size * SIZEOF_PIXEL);
-                        if (memcmp(buf0, buf1, BUF_SIZE) || memcmp(dst0, dst1, BUF_SIZE))
-                            fail();
-                        bench_new(dst1, src1, size * SIZEOF_PIXEL);
-                    }
-            }
-        }
-        report("%s", op_name);
-    }
-}
diff --git a/tests/checkasm/hevc_add_res.c b/tests/checkasm/hevc_add_res.c
deleted file mode 100644
index 0a3bcbb..0000000
--- a/tests/checkasm/hevc_add_res.c
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (c) 2016 Alexandra Hájková
- *
- * 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.
- */
-
-#include <string.h>
-
-#include "libavutil/intreadwrite.h"
-
-#include "libavcodec/hevcdsp.h"
-
-#include "checkasm.h"
-
-#define randomize_buffers(buf, size)            \
-    do {                                        \
-        int j;                                  \
-        for (j = 0; j < size; j++) {            \
-            int16_t r = rnd();                  \
-            AV_WN16A(buf + j, r >> 3);          \
-        }                                       \
-    } while (0)
-
-#define randomize_buffers2(buf, size)             \
-    do {                                          \
-        int j;                                    \
-        for (j = 0; j < size; j++)                \
-            AV_WN16A(buf + j * 2, rnd() & 0x3FF); \
-    } while (0)
-
-static void compare_add_res(int size, ptrdiff_t stride, int overflow_test)
-{
-    LOCAL_ALIGNED_32(int16_t, res0, [32 * 32]);
-    LOCAL_ALIGNED_32(int16_t, res1, [32 * 32]);
-    LOCAL_ALIGNED_32(uint8_t, dst0, [32 * 32 * 2]);
-    LOCAL_ALIGNED_32(uint8_t, dst1, [32 * 32 * 2]);
-
-    declare_func_emms(AV_CPU_FLAG_MMX, void, uint8_t *dst, int16_t *res, ptrdiff_t stride);
-
-    randomize_buffers(res0, size);
-    randomize_buffers2(dst0, size);
-    if (overflow_test)
-        res0[0] = 0x8000;
-    memcpy(res1, res0, sizeof(*res0) * size);
-    memcpy(dst1, dst0, sizeof(int16_t) * size);
-
-    call_ref(dst0, res0, stride);
-    call_new(dst1, res1, stride);
-    if (memcmp(dst0, dst1, size))
-        fail();
-    bench_new(dst1, res1, stride);
-}
-
-static void check_add_res(HEVCDSPContext h, int bit_depth)
-{
-    int i;
-
-    for (i = 2; i <= 5; i++) {
-        int block_size = 1 << i;
-        int size = block_size * block_size;
-        ptrdiff_t stride = block_size << (bit_depth > 8);
-
-        if (check_func(h.add_residual[i - 2], "hevc_add_res_%dx%d_%d", block_size, block_size, bit_depth)) {
-            compare_add_res(size, stride, 0);
-            // overflow test for res = -32768
-            compare_add_res(size, stride, 1);
-        }
-    }
-}
-
-void checkasm_check_hevc_add_res(void)
-{
-    int bit_depth;
-
-    for (bit_depth = 8; bit_depth <= 10; bit_depth++) {
-        HEVCDSPContext h;
-
-        ff_hevc_dsp_init(&h, bit_depth);
-        check_add_res(h, bit_depth);
-    }
-    report("add_residual");
-}
diff --git a/tests/checkasm/hevc_idct.c b/tests/checkasm/hevc_idct.c
deleted file mode 100644
index c20111c..0000000
--- a/tests/checkasm/hevc_idct.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (c) 2016 Alexandra Hájková
- *
- * 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.
- */
-
-#include <string.h>
-
-#include "libavutil/intreadwrite.h"
-
-#include "libavcodec/hevcdsp.h"
-
-#include "checkasm.h"
-
-#define randomize_buffers(buf, size)            \
-    do {                                        \
-        int j;                                  \
-        for (j = 0; j < size; j++) {            \
-            int16_t r = rnd();                  \
-            AV_WN16A(buf + j, r);               \
-        }                                       \
-    } while (0)
-
-static void check_idct(HEVCDSPContext h, int bit_depth)
-{
-    int i;
-    LOCAL_ALIGNED(32, int16_t, coeffs0, [32 * 32]);
-    LOCAL_ALIGNED(32, int16_t, coeffs1, [32 * 32]);
-
-    for (i = 2; i <= 5; i++) {
-        int block_size = 1 << i;
-        int size = block_size * block_size;
-        int col_limit = block_size;
-        declare_func(void, int16_t *coeffs, int col_limit);
-
-        randomize_buffers(coeffs0, size);
-        memcpy(coeffs1, coeffs0, sizeof(*coeffs0) * size);
-        if (check_func(h.idct[i - 2], "hevc_idct_%dx%d_%d", block_size, block_size, bit_depth)) {
-            call_ref(coeffs0, col_limit);
-            call_new(coeffs1, col_limit);
-            if (memcmp(coeffs0, coeffs1, sizeof(*coeffs0) * size))
-                fail();
-            bench_new(coeffs1, col_limit);
-        }
-    }
-}
-
-static void check_idct_dc(HEVCDSPContext h, int bit_depth)
-{
-    int i;
-    LOCAL_ALIGNED(32, int16_t, coeffs0, [32 * 32]);
-    LOCAL_ALIGNED(32, int16_t, coeffs1, [32 * 32]);
-
-    for (i = 2; i <= 5; i++) {
-        int block_size = 1 << i;
-        int size = block_size * block_size;
-        declare_func_emms(AV_CPU_FLAG_MMXEXT, void, int16_t *coeffs);
-
-        randomize_buffers(coeffs0, size);
-        memcpy(coeffs1, coeffs0, sizeof(*coeffs0) * size);
-
-        if (check_func(h.idct_dc[i - 2], "hevc_idct_%dx%d_dc_%d", block_size, block_size, bit_depth)) {
-            call_ref(coeffs0);
-            call_new(coeffs1);
-            if (memcmp(coeffs0, coeffs1, sizeof(*coeffs0) * size))
-                fail();
-            bench_new(coeffs1);
-        }
-    }
-}
-
-void checkasm_check_hevc_idct(void)
-{
-    int bit_depth;
-
-    for (bit_depth = 8; bit_depth <= 12; bit_depth += 2) {
-        HEVCDSPContext h;
-
-        ff_hevc_dsp_init(&h, bit_depth);
-        check_idct_dc(h, bit_depth);
-    }
-    report("idct_dc");
-
-    for (bit_depth = 8; bit_depth <= 12; bit_depth += 2) {
-        HEVCDSPContext h;
-
-        ff_hevc_dsp_init(&h, bit_depth);
-        check_idct(h, bit_depth);
-    }
-    report("idct");
-}
diff --git a/tests/checkasm/jpeg2000dsp.c b/tests/checkasm/jpeg2000dsp.c
deleted file mode 100644
index bce534d..0000000
--- a/tests/checkasm/jpeg2000dsp.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (c) 2015 James Almer
- *
- * 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.
- */
-
-#include "checkasm.h"
-#include "libavcodec/jpeg2000dsp.h"
-#include "libavutil/common.h"
-#include "libavutil/internal.h"
-#include "libavutil/intreadwrite.h"
-
-#define BUF_SIZE 512
-
-#define randomize_buffers()                 \
-    do {                                    \
-        int i;                              \
-        for (i = 0; i < BUF_SIZE*3; i++)    \
-            src[i] = rnd();                 \
-    } while (0)
-
-#define randomize_buffers_float()                    \
-    do {                                             \
-        int i;                                       \
-        for (i = 0; i < BUF_SIZE*3; i++)             \
-            src[i] = (float)rnd() / (UINT_MAX >> 5); \
-    } while (0)
-
-static void check_rct_int(void)
-{
-    LOCAL_ALIGNED_32(int32_t, src, [BUF_SIZE*3]);
-    LOCAL_ALIGNED_32(int32_t, ref, [BUF_SIZE*3]);
-    LOCAL_ALIGNED_32(int32_t, new, [BUF_SIZE*3]);
-    int32_t *ref0 = &ref[BUF_SIZE*0], *new0 = &new[BUF_SIZE*0];
-    int32_t *ref1 = &ref[BUF_SIZE*1], *new1 = &new[BUF_SIZE*1];
-    int32_t *ref2 = &ref[BUF_SIZE*2], *new2 = &new[BUF_SIZE*2];
-
-    declare_func(void, void *src0, void *src1, void *src2, int csize);
-
-    randomize_buffers();
-    memcpy(ref, src, BUF_SIZE * 3 * sizeof(*src));
-    memcpy(new, src, BUF_SIZE * 3 * sizeof(*src));
-    call_ref(ref0, ref1, ref2, BUF_SIZE);
-    call_new(new0, new1, new2, BUF_SIZE);
-    if (memcmp(ref0, new0, BUF_SIZE * sizeof(*src)) ||
-        memcmp(ref1, new1, BUF_SIZE * sizeof(*src)) ||
-        memcmp(ref2, new2, BUF_SIZE * sizeof(*src)))
-        fail();
-    memcpy(new, src, BUF_SIZE * 3 * sizeof(*src));
-    bench_new(new0, new1, new2, BUF_SIZE);
-}
-
-static void check_ict_float(void)
-{
-    LOCAL_ALIGNED_32(float, src, [BUF_SIZE*3]);
-    LOCAL_ALIGNED_32(float, ref, [BUF_SIZE*3]);
-    LOCAL_ALIGNED_32(float, new, [BUF_SIZE*3]);
-    float *ref0 = &ref[BUF_SIZE*0], *new0 = &new[BUF_SIZE*0];
-    float *ref1 = &ref[BUF_SIZE*1], *new1 = &new[BUF_SIZE*1];
-    float *ref2 = &ref[BUF_SIZE*2], *new2 = &new[BUF_SIZE*2];
-
-    declare_func(void, void *src0, void *src1, void *src2, int csize);
-
-    randomize_buffers_float();
-    memcpy(ref, src, BUF_SIZE * 3 * sizeof(*src));
-    memcpy(new, src, BUF_SIZE * 3 * sizeof(*src));
-    call_ref(ref0, ref1, ref2, BUF_SIZE);
-    call_new(new0, new1, new2, BUF_SIZE);
-    if (!float_near_abs_eps_array(ref0, new0, 1.0e-5, BUF_SIZE) ||
-        !float_near_abs_eps_array(ref1, new1, 1.0e-5, BUF_SIZE) ||
-        !float_near_abs_eps_array(ref2, new2, 1.0e-5, BUF_SIZE))
-        fail();
-    memcpy(new, src, BUF_SIZE * 3 * sizeof(*src));
-    bench_new(new0, new1, new2, BUF_SIZE);
-}
-
-void checkasm_check_jpeg2000dsp(void)
-{
-    Jpeg2000DSPContext h;
-
-    ff_jpeg2000dsp_init(&h);
-
-    if (check_func(h.mct_decode[FF_DWT53], "jpeg2000_rct_int"))
-        check_rct_int();
-    if (check_func(h.mct_decode[FF_DWT97], "jpeg2000_ict_float"))
-        check_ict_float();
-
-    report("mct_decode");
-}
diff --git a/tests/checkasm/llviddsp.c b/tests/checkasm/llviddsp.c
deleted file mode 100644
index 4f75ffc..0000000
--- a/tests/checkasm/llviddsp.c
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * Copyright (c) 2016 Alexandra Hájková
- *
- * 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.
- */
-
-#include <string.h>
-
-#include "libavutil/common.h"
-#include "libavutil/intreadwrite.h"
-#include "libavutil/mem.h"
-
-#include "libavcodec/lossless_videodsp.h"
-
-#include "checkasm.h"
-
-#define randomize_buffers(buf, size)     \
-    do {                                 \
-        int j;                           \
-        uint8_t *tmp_buf = (uint8_t *)buf;\
-        for (j = 0; j < size; j++)       \
-            tmp_buf[j] = rnd() & 0xFF;       \
-    } while (0)
-
-#define init_buffer(a0, a1, type, width)\
-    if (!a0 || !a1)\
-        fail();\
-    randomize_buffers(a0, width * sizeof(type));\
-    memcpy(a1, a0, width*sizeof(type));\
-
-static void check_add_bytes(LLVidDSPContext c, int width)
-{
-    uint8_t *dst0 = av_mallocz(width);
-    uint8_t *dst1 = av_mallocz(width);
-    uint8_t *src0 = av_mallocz_array(width, sizeof(uint8_t));
-    uint8_t *src1 = av_mallocz_array(width, sizeof(uint8_t));
-    declare_func_emms(AV_CPU_FLAG_MMX, void, uint8_t *dst, uint8_t *src, ptrdiff_t w);
-
-    init_buffer(src0, src1, uint8_t, width);
-
-    if (!dst0 || !dst1)
-        fail();
-
-
-    if (check_func(c.add_bytes, "add_bytes")) {
-        call_ref(dst0, src0, width);
-        call_new(dst1, src1, width);
-        if (memcmp(dst0, dst1, width))
-            fail();
-        bench_new(dst1, src1, width);
-    }
-
-    av_free(src0);
-    av_free(src1);
-    av_free(dst0);
-    av_free(dst1);
-}
-
-static void check_add_median_pred(LLVidDSPContext c, int width) {
-    int A0, A1, B0, B1;
-    uint8_t *dst0 = av_mallocz(width);
-    uint8_t *dst1 = av_mallocz(width);
-    uint8_t *src0 = av_mallocz_array(width, sizeof(uint8_t));
-    uint8_t *src1 = av_mallocz_array(width, sizeof(uint8_t));
-    uint8_t *diff0 = av_mallocz_array(width, sizeof(uint8_t));
-    uint8_t *diff1 = av_mallocz_array(width, sizeof(uint8_t));
-    declare_func_emms(AV_CPU_FLAG_MMX, void, uint8_t *dst, const uint8_t *src1,
-                      const uint8_t *diff, ptrdiff_t w,
-                      int *left, int *left_top);
-
-    init_buffer(src0, src1, uint8_t, width);
-    init_buffer(diff0, diff1, uint8_t, width);
-
-    A0 = rnd() & 0xFF;
-    B0 = rnd() & 0xFF;
-    A1 = A0;
-    B1 = B0;
-
-
-    if (check_func(c.add_median_pred, "add_median_pred")) {
-        call_ref(dst0, src0, diff0, width, &A0, &B0);
-        call_new(dst1, src1, diff1, width, &A1, &B1);
-        if (memcmp(dst0, dst1, width) || (A0 != A1) || (B0 != B1))
-            fail();
-        bench_new(dst1, src1, diff1, width, &A1, &B1);
-    }
-
-    av_free(src0);
-    av_free(src1);
-    av_free(diff0);
-    av_free(diff1);
-    av_free(dst0);
-    av_free(dst1);
-}
-
-static void check_add_left_pred(LLVidDSPContext c, int width, int acc, const char * report)
-{
-    int res0, res1;
-    uint8_t *dst0 = av_mallocz(width);
-    uint8_t *dst1 = av_mallocz(width);
-    uint8_t *src0 = av_mallocz_array(width, sizeof(uint8_t));
-    uint8_t *src1 = av_mallocz_array(width, sizeof(uint8_t));
-    declare_func_emms(AV_CPU_FLAG_MMX, int, uint8_t *dst, uint8_t *src, ptrdiff_t w, int acc);
-
-    init_buffer(src0, src1, uint8_t, width);
-
-    if (!dst0 || !dst1)
-        fail();
-
-    if (check_func(c.add_left_pred, "%s", report)) {
-        res0 = call_ref(dst0, src0, width, acc);
-        res1 = call_new(dst1, src1, width, acc);
-        if ((res0 & 0xFF) != (res1 & 0xFF)||\
-            memcmp(dst0, dst1, width))
-            fail();
-        bench_new(dst1, src1, width, acc);
-    }
-
-    av_free(src0);
-    av_free(src1);
-    av_free(dst0);
-    av_free(dst1);
-}
-
-static void check_add_left_pred_16(LLVidDSPContext c, unsigned mask, int width, unsigned acc, const char * report)
-{
-    int res0, res1;
-    uint16_t *dst0 = av_mallocz_array(width, sizeof(uint16_t));
-    uint16_t *dst1 = av_mallocz_array(width, sizeof(uint16_t));
-    uint16_t *src0 = av_mallocz_array(width, sizeof(uint16_t));
-    uint16_t *src1 = av_mallocz_array(width, sizeof(uint16_t));
-    declare_func_emms(AV_CPU_FLAG_MMX, int, uint16_t *dst, uint16_t *src, unsigned mask, ptrdiff_t w, unsigned acc);
-
-    init_buffer(src0, src1, uint16_t, width);
-
-    if (!dst0 || !dst1)
-        fail();
-
-    if (check_func(c.add_left_pred_int16, "%s", report)) {
-        res0 = call_ref(dst0, src0, mask, width, acc);
-        res1 = call_new(dst1, src1, mask, width, acc);
-        if ((res0 &0xFFFF) != (res1 &0xFFFF)||\
-            memcmp(dst0, dst1, width))
-            fail();
-        bench_new(dst1, src1, mask, width, acc);
-    }
-
-    av_free(src0);
-    av_free(src1);
-    av_free(dst0);
-    av_free(dst1);
-}
-
-static void check_add_gradient_pred(LLVidDSPContext c, int w) {
-    int src_size, stride;
-    uint8_t *src0, *src1;
-    declare_func_emms(AV_CPU_FLAG_MMX, void, uint8_t *src, const ptrdiff_t stride,
-                      const ptrdiff_t width);
-
-    stride = w + 32;
-    src_size = (stride + 32) * 2; /* dsp need previous line, and ignore the start of the line */
-    src0 = av_mallocz(src_size);
-    src1 = av_mallocz(src_size);
-
-    init_buffer(src0, src1, uint8_t, src_size);
-
-    if (check_func(c.add_gradient_pred, "add_gradient_pred")) {
-        call_ref(src0 + stride + 32, stride, w);
-        call_new(src1 + stride + 32, stride, w);
-        if (memcmp(src0, src1, stride)||/* previous line doesn't change */
-            memcmp(src0+stride, src1 + stride, w + 32)) {
-            fail();
-        }
-        bench_new(src1 + stride + 32, stride, w);
-    }
-
-    av_free(src0);
-    av_free(src1);
-}
-
-void checkasm_check_llviddsp(void)
-{
-    LLVidDSPContext c;
-    int width = 16 * av_clip(rnd(), 16, 128);
-    int accRnd = rnd() & 0xFF;
-
-    ff_llviddsp_init(&c);
-
-    check_add_bytes(c, width);
-    report("add_bytes");
-
-    check_add_median_pred(c, width);
-    report("add_median_pred");
-
-    check_add_left_pred(c, width, 0, "add_left_pred_zero");
-    report("add_left_pred_zero");
-
-    check_add_left_pred(c, width, accRnd, "add_left_pred_rnd_acc");
-    report("add_left_pred_rnd_acc");
-
-    check_add_left_pred_16(c, 255, width, accRnd, "add_left_pred_int16");
-    report("add_left_pred_int16");
-
-    check_add_gradient_pred(c, width);
-    report("add_gradient_pred");
-}
diff --git a/tests/checkasm/pixblockdsp.c b/tests/checkasm/pixblockdsp.c
deleted file mode 100644
index e14b0a9..0000000
--- a/tests/checkasm/pixblockdsp.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (c) 2015 Tiancheng "Timothy" Gu
- *
- * 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.
- */
-
-#include <string.h>
-#include "checkasm.h"
-#include "libavcodec/pixblockdsp.h"
-#include "libavutil/common.h"
-#include "libavutil/internal.h"
-#include "libavutil/intreadwrite.h"
-
-#define BUF_UNITS 8
-#define BUF_SIZE (BUF_UNITS * 128 + 8 * BUF_UNITS)
-
-#define randomize_buffers()                 \
-    do {                                    \
-        int i;                              \
-        for (i = 0; i < BUF_SIZE; i += 4) { \
-            uint32_t r = rnd();             \
-            AV_WN32A(src10 + i, r);         \
-            AV_WN32A(src11 + i, r);         \
-            r = rnd();                      \
-            AV_WN32A(src20 + i, r);         \
-            AV_WN32A(src21 + i, r);         \
-            r = rnd();                      \
-            AV_WN32A(dst0_ + i, r);         \
-            AV_WN32A(dst1_ + i, r);         \
-        }                                   \
-    } while (0)
-
-#define check_get_pixels(type)                                                             \
-    do {                                                                                   \
-        int i;                                                                             \
-        declare_func_emms(AV_CPU_FLAG_MMX, void, int16_t *block, const uint8_t *pixels, ptrdiff_t line_size);    \
-                                                                                           \
-        for (i = 0; i < BUF_UNITS; i++) {                                              \
-            int src_offset = i * 64 * sizeof(type) + 8 * i; /* Test various alignments */      \
-            int dst_offset = i * 64; /* dst must be aligned */                             \
-            randomize_buffers();                                                           \
-            call_ref(dst0 + dst_offset, src10 + src_offset, 8);                            \
-            call_new(dst1 + dst_offset, src11 + src_offset, 8);                            \
-            if (memcmp(src10, src11, BUF_SIZE)|| memcmp(dst0, dst1, BUF_SIZE)) \
-                fail();                                                                    \
-            bench_new(dst1 + dst_offset, src11 + src_offset, 8);                           \
-        }                                                                                  \
-    } while (0)
-
-#define check_diff_pixels(type)                                                            \
-    do {                                                                                   \
-        int i;                                                                             \
-        declare_func_emms(AV_CPU_FLAG_MMX, void, int16_t *av_restrict block, const uint8_t *s1, const uint8_t *s2, ptrdiff_t stride); \
-                                                                                           \
-        for (i = 0; i < BUF_UNITS; i++) {                                              \
-            int src_offset = i * 64 * sizeof(type) + 8 * i; /* Test various alignments */      \
-            int dst_offset = i * 64; /* dst must be aligned */                             \
-            randomize_buffers();                                                           \
-            call_ref(dst0 + dst_offset, src10 + src_offset, src20 + src_offset, 8);        \
-            call_new(dst1 + dst_offset, src11 + src_offset, src21 + src_offset, 8);        \
-            if (memcmp(src10, src11, BUF_SIZE) || memcmp(src20, src21, BUF_SIZE) || memcmp(dst0, dst1, BUF_SIZE)) \
-                fail();                                                                    \
-            bench_new(dst1 + dst_offset, src11 + src_offset, src21 + src_offset, 8);       \
-        }                                                                                  \
-    } while (0)
-
-void checkasm_check_pixblockdsp(void)
-{
-    LOCAL_ALIGNED_16(uint8_t, src10, [BUF_SIZE]);
-    LOCAL_ALIGNED_16(uint8_t, src11, [BUF_SIZE]);
-    LOCAL_ALIGNED_16(uint8_t, src20, [BUF_SIZE]);
-    LOCAL_ALIGNED_16(uint8_t, src21, [BUF_SIZE]);
-    LOCAL_ALIGNED_16(uint8_t, dst0_, [BUF_SIZE]);
-    LOCAL_ALIGNED_16(uint8_t, dst1_, [BUF_SIZE]);
-    uint16_t *dst0 = (uint16_t *)dst0_;
-    uint16_t *dst1 = (uint16_t *)dst1_;
-    PixblockDSPContext h;
-    AVCodecContext avctx = {
-        .bits_per_raw_sample = 8,
-    };
-
-    ff_pixblockdsp_init(&h, &avctx);
-
-    if (check_func(h.get_pixels, "get_pixels"))
-        check_get_pixels(uint8_t);
-
-    report("get_pixels");
-
-    if (check_func(h.diff_pixels, "diff_pixels"))
-        check_diff_pixels(uint8_t);
-
-    report("diff_pixels");
-}
diff --git a/tests/checkasm/sbrdsp.c b/tests/checkasm/sbrdsp.c
deleted file mode 100644
index 516b9f0..0000000
--- a/tests/checkasm/sbrdsp.c
+++ /dev/null
@@ -1,300 +0,0 @@
-/*
- * 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.
- */
-
-#include "libavcodec/sbrdsp.h"
-#include <float.h>
-
-#include "checkasm.h"
-
-#define randomize(buf, len) do {                                \
-    int i;                                                      \
-    for (i = 0; i < len; i++) {                                 \
-        const INTFLOAT f = (INTFLOAT)rnd() / UINT_MAX;          \
-        (buf)[i] = f;                                           \
-    }                                                           \
-} while (0)
-
-#define EPS 0.0001
-
-static void test_sum64x5(void)
-{
-    LOCAL_ALIGNED_16(INTFLOAT, dst0, [64 + 256]);
-    LOCAL_ALIGNED_16(INTFLOAT, dst1, [64 + 256]);
-
-    declare_func(void, INTFLOAT *z);
-
-    randomize((INTFLOAT *)dst0, 64 + 256);
-    memcpy(dst1, dst0, (64 + 256) * sizeof(INTFLOAT));
-    call_ref(dst0);
-    call_new(dst1);
-    if (!float_near_abs_eps_array(dst0, dst1, EPS, 64 + 256))
-        fail();
-    bench_new(dst1);
-}
-
-static void test_sum_square(void)
-{
-    INTFLOAT res0;
-    INTFLOAT res1;
-    LOCAL_ALIGNED_16(INTFLOAT, src, [256], [2]);
-    double t = 4 * 256;
-
-    declare_func_float(INTFLOAT, INTFLOAT (*x)[2], int n);
-
-    randomize((INTFLOAT *)src, 256 * 2);
-    res0 = call_ref(src, 256);
-    res1 = call_new(src, 256);
-    if (!float_near_abs_eps(res0, res1, t * 2 * FLT_EPSILON))
-        fail();
-    bench_new(src, 256);
-}
-
-static void test_neg_odd_64(void)
-{
-    LOCAL_ALIGNED_16(INTFLOAT, dst0, [64]);
-    LOCAL_ALIGNED_16(INTFLOAT, dst1, [64]);
-
-    declare_func(void, INTFLOAT *x);
-
-    randomize((INTFLOAT *)dst0, 64);
-    memcpy(dst1, dst0, (64) * sizeof(INTFLOAT));
-    call_ref(dst0);
-    call_new(dst1);
-    if (!float_near_abs_eps_array(dst0, dst1, EPS, 64))
-        fail();
-    bench_new(dst1);
-}
-
-static void test_qmf_pre_shuffle(void)
-{
-    LOCAL_ALIGNED_16(INTFLOAT, dst0, [128]);
-    LOCAL_ALIGNED_16(INTFLOAT, dst1, [128]);
-
-    declare_func(void, INTFLOAT *z);
-
-    randomize((INTFLOAT *)dst0, 128);
-    memcpy(dst1, dst0, (128) * sizeof(INTFLOAT));
-    call_ref(dst0);
-    call_new(dst1);
-    if (!float_near_abs_eps_array(dst0, dst1, EPS, 128))
-        fail();
-    bench_new(dst1);
-}
-
-static void test_qmf_post_shuffle(void)
-{
-    LOCAL_ALIGNED_16(INTFLOAT, src, [64]);
-    LOCAL_ALIGNED_16(INTFLOAT, dst0, [32], [2]);
-    LOCAL_ALIGNED_16(INTFLOAT, dst1, [32], [2]);
-
-    declare_func(void, INTFLOAT W[32][2], const INTFLOAT *z);
-
-    randomize((INTFLOAT *)src, 64);
-    call_ref(dst0, src);
-    call_new(dst1, src);
-    if (!float_near_abs_eps_array((INTFLOAT *)dst0, (INTFLOAT *)dst1, EPS, 64))
-        fail();
-    bench_new(dst1, src);
-}
-
-static void test_qmf_deint_neg(void)
-{
-    LOCAL_ALIGNED_16(INTFLOAT, src, [64]);
-    LOCAL_ALIGNED_16(INTFLOAT, dst0, [64]);
-    LOCAL_ALIGNED_16(INTFLOAT, dst1, [64]);
-
-    declare_func(void, INTFLOAT *v, const INTFLOAT *src);
-
-    randomize((INTFLOAT *)src, 64);
-    call_ref(dst0, src);
-    call_new(dst1, src);
-    if (!float_near_abs_eps_array(dst0, dst1, EPS, 64))
-        fail();
-    bench_new(dst1, src);
-}
-
-static void test_qmf_deint_bfly(void)
-{
-    LOCAL_ALIGNED_16(INTFLOAT, src0, [64]);
-    LOCAL_ALIGNED_16(INTFLOAT, src1, [64]);
-    LOCAL_ALIGNED_16(INTFLOAT, dst0, [128]);
-    LOCAL_ALIGNED_16(INTFLOAT, dst1, [128]);
-
-    declare_func(void, INTFLOAT *v, const INTFLOAT *src0, const INTFLOAT *src1);
-
-    memset(dst0, 0, 128 * sizeof(INTFLOAT));
-    memset(dst1, 0, 128 * sizeof(INTFLOAT));
-
-    randomize((INTFLOAT *)src0, 64);
-    randomize((INTFLOAT *)src1, 64);
-    call_ref(dst0, src0, src1);
-    call_new(dst1, src0, src1);
-    if (!float_near_abs_eps_array(dst0, dst1, EPS, 128))
-        fail();
-    bench_new(dst1, src0, src1);
-}
-
-static void test_autocorrelate(void)
-{
-    LOCAL_ALIGNED_16(INTFLOAT, src, [40], [2]);
-    LOCAL_ALIGNED_16(INTFLOAT, dst0, [3], [2][2]);
-    LOCAL_ALIGNED_16(INTFLOAT, dst1, [3], [2][2]);
-
-    declare_func(void, const INTFLOAT x[40][2], INTFLOAT phi[3][2][2]);
-
-    memset(dst0, 0, 3 * 2 * 2 * sizeof(INTFLOAT));
-    memset(dst1, 0, 3 * 2 * 2 * sizeof(INTFLOAT));
-
-    randomize((INTFLOAT *)src, 80);
-    call_ref(src, dst0);
-    call_new(src, dst1);
-    if (!float_near_abs_eps_array((INTFLOAT *)dst0, (INTFLOAT *)dst1, EPS, 3 * 2 * 2))
-        fail();
-    bench_new(src, dst1);
-}
-
-static void test_hf_gen(void)
-{
-    LOCAL_ALIGNED_16(INTFLOAT, low, [128], [2]);
-    LOCAL_ALIGNED_16(INTFLOAT, alpha0, [2]);
-    LOCAL_ALIGNED_16(INTFLOAT, alpha1, [2]);
-    LOCAL_ALIGNED_16(INTFLOAT, dst0, [128], [2]);
-    LOCAL_ALIGNED_16(INTFLOAT, dst1, [128], [2]);
-    INTFLOAT bw = (INTFLOAT)rnd() / UINT_MAX;
-    int i;
-
-    declare_func(void, INTFLOAT (*X_high)[2], const INTFLOAT (*X_low)[2],
-                       const INTFLOAT alpha0[2], const INTFLOAT alpha1[2],
-                       INTFLOAT bw, int start, int end);
-
-    randomize((INTFLOAT *)low, 128 * 2);
-    randomize((INTFLOAT *)alpha0, 2);
-    randomize((INTFLOAT *)alpha1, 2);
-    for (i = 2; i < 64; i += 2) {
-        memset(dst0, 0, 128 * 2 * sizeof(INTFLOAT));
-        memset(dst1, 0, 128 * 2 * sizeof(INTFLOAT));
-        call_ref(dst0, low, alpha0, alpha1, 0.0, i, 128);
-        call_new(dst1, low, alpha0, alpha1, 0.0, i, 128);
-        if (!float_near_abs_eps_array((INTFLOAT *)dst0, (INTFLOAT *)dst1, EPS, 128 * 2))
-            fail();
-        bench_new(dst1, low, alpha0, alpha1, bw, i, 128);
-    }
-}
-
-static void test_hf_g_filt(void)
-{
-    LOCAL_ALIGNED_16(INTFLOAT, high, [128], [40][2]);
-    LOCAL_ALIGNED_16(INTFLOAT, g_filt, [128]);
-    LOCAL_ALIGNED_16(INTFLOAT, dst0, [128], [2]);
-    LOCAL_ALIGNED_16(INTFLOAT, dst1, [128], [2]);
-
-    declare_func(void, INTFLOAT (*Y)[2], const INTFLOAT (*X_high)[40][2],
-                       const INTFLOAT *g_filt, int m_max, intptr_t ixh);
-
-    randomize((INTFLOAT *)high, 128 * 40 * 2);
-    randomize((INTFLOAT *)g_filt, 128);
-
-    call_ref(dst0, high, g_filt, 128, 20);
-    call_new(dst1, high, g_filt, 128, 20);
-    if (!float_near_abs_eps_array((INTFLOAT *)dst0, (INTFLOAT *)dst1, EPS, 128 * 2))
-        fail();
-    bench_new(dst1, high, g_filt, 128, 20);
-}
-
-static void test_hf_apply_noise(const SBRDSPContext *sbrdsp)
-{
-    LOCAL_ALIGNED_16(AAC_FLOAT, s_m, [128]);
-    LOCAL_ALIGNED_16(AAC_FLOAT, q_filt, [128]);
-    LOCAL_ALIGNED_16(INTFLOAT, ref, [128], [2]);
-    LOCAL_ALIGNED_16(INTFLOAT, dst0, [128], [2]);
-    LOCAL_ALIGNED_16(INTFLOAT, dst1, [128], [2]);
-    int noise = 0x2a;
-    int i, j;
-
-    declare_func(void, INTFLOAT (*Y)[2], const AAC_FLOAT *s_m,
-                       const AAC_FLOAT *q_filt, int noise,
-                       int kx, int m_max);
-
-    randomize((INTFLOAT *)ref, 128 * 2);
-    randomize((INTFLOAT *)s_m, 128);
-    randomize((INTFLOAT *)q_filt, 128);
-
-    for (i = 0; i < 4; i++) {
-        if (check_func(sbrdsp->hf_apply_noise[i], "hf_apply_noise_%d", i)) {
-            for (j = 0; j < 2; j++) {
-                memcpy(dst0, ref, 128 * 2 * sizeof(INTFLOAT));
-                memcpy(dst1, ref, 128 * 2 * sizeof(INTFLOAT));
-                call_ref(dst0, s_m, q_filt, noise, j, 128);
-                call_new(dst1, s_m, q_filt, noise, j, 128);
-                if (!float_near_abs_eps_array((INTFLOAT *)dst0, (INTFLOAT *)dst1, EPS, 128 * 2))
-                    fail();
-                bench_new(dst1, s_m, q_filt, noise, j, 128);
-            }
-        }
-    }
-}
-
-void checkasm_check_sbrdsp(void)
-{
-    SBRDSPContext sbrdsp;
-
-    ff_sbrdsp_init(&sbrdsp);
-
-    if (check_func(sbrdsp.sum64x5, "sum64x5"))
-        test_sum64x5();
-    report("sum64x5");
-
-    if (check_func(sbrdsp.sum_square, "sum_square"))
-        test_sum_square();
-    report("sum_square");
-
-    if (check_func(sbrdsp.neg_odd_64, "neg_odd_64"))
-        test_neg_odd_64();
-    report("neg_odd_64");
-
-    if (check_func(sbrdsp.qmf_pre_shuffle, "qmf_pre_shuffle"))
-        test_qmf_pre_shuffle();
-    report("qmf_pre_shuffle");
-
-    if (check_func(sbrdsp.qmf_post_shuffle, "qmf_post_shuffle"))
-        test_qmf_post_shuffle();
-    report("qmf_post_shuffle");
-
-    if (check_func(sbrdsp.qmf_deint_neg, "qmf_deint_neg"))
-        test_qmf_deint_neg();
-    report("qmf_deint_neg");
-
-    if (check_func(sbrdsp.qmf_deint_bfly, "qmf_deint_bfly"))
-        test_qmf_deint_bfly();
-    report("qmf_deint_bfly");
-
-    if (check_func(sbrdsp.autocorrelate, "autocorrelate"))
-        test_autocorrelate();
-    report("autocorrelate");
-
-    if (check_func(sbrdsp.hf_gen, "hf_gen"))
-        test_hf_gen();
-    report("hf_gen");
-
-    if (check_func(sbrdsp.hf_g_filt, "hf_g_filt"))
-        test_hf_g_filt();
-    report("hf_g_filt");
-
-    test_hf_apply_noise(&sbrdsp);
-    report("hf_apply_noise");
-}
diff --git a/tests/checkasm/synth_filter.c b/tests/checkasm/synth_filter.c
deleted file mode 100644
index 87e32eb..0000000
--- a/tests/checkasm/synth_filter.c
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (c) 2015 Janne Grunau
- *
- * 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.
- */
-
-#include <math.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "libavutil/internal.h"
-#include "libavutil/intfloat.h"
-#include "libavcodec/dcadata.h"
-#include "libavcodec/synth_filter.h"
-
-#include "checkasm.h"
-
-#define BUF_SIZE 32
-
-#define randomize_input()                                       \
-    do {                                                        \
-        int i;                                                  \
-        for (i = 0; i < BUF_SIZE; i++) {                        \
-            float f = (float)rnd() / (UINT_MAX >> 5) - 16.0f;   \
-            in[i] = f;                                          \
-        }                                                       \
-    } while (0)
-
-void checkasm_check_synth_filter(void)
-{
-    FFTContext imdct;
-    SynthFilterContext synth;
-
-    ff_mdct_init(&imdct, 6, 1, 1.0);
-    ff_synth_filter_init(&synth);
-
-    if (check_func(synth.synth_filter_float, "synth_filter_float")) {
-        LOCAL_ALIGNED(32, float,   out0,   [BUF_SIZE]);
-        LOCAL_ALIGNED(32, float,   out1,   [BUF_SIZE]);
-        LOCAL_ALIGNED(32, float,   out_b,  [BUF_SIZE]);
-        LOCAL_ALIGNED(32, float,   in,     [BUF_SIZE]);
-        LOCAL_ALIGNED(32, float,   buf2_0, [BUF_SIZE]);
-        LOCAL_ALIGNED(32, float,   buf2_1, [BUF_SIZE]);
-        LOCAL_ALIGNED(32, float,   buf2_b, [BUF_SIZE]);
-        LOCAL_ALIGNED(32, float,   buf0,   [512]);
-        LOCAL_ALIGNED(32, float,   buf1,   [512]);
-        LOCAL_ALIGNED(32, float,   buf_b,  [512]);
-        float scale = 1.0f;
-        int i, offset0 = 0, offset1 = 0, offset_b = 0;
-
-        declare_func(void, FFTContext *, float *, int *, float[32], const float[512],
-                     float[32], float[32], float);
-
-        memset(buf2_0, 0, sizeof(*buf2_0) * BUF_SIZE);
-        memset(buf2_1, 0, sizeof(*buf2_1) * BUF_SIZE);
-        memset(buf2_b, 0, sizeof(*buf2_b) * BUF_SIZE);
-        memset(buf0, 0, sizeof(*buf2_0) * 512);
-        memset(buf1, 0, sizeof(*buf2_1) * 512);
-        memset(buf_b, 0, sizeof(*buf2_b) * 512);
-
-        /* more than 1 synth_buf_offset wrap-around */
-        for (i = 0; i < 20; i++) {
-            int j;
-            const float * window = (i & 1) ? ff_dca_fir_32bands_perfect : ff_dca_fir_32bands_nonperfect;
-
-            memset(out0, 0, sizeof(*out0) * BUF_SIZE);
-            memset(out1, 0, sizeof(*out1) * BUF_SIZE);
-            memset(out_b, 0, sizeof(*out_b) * BUF_SIZE);
-
-            randomize_input();
-
-            call_ref(&imdct, buf0, &offset0, buf2_0, window,
-                     out0, in, scale);
-            call_new(&imdct, buf1, &offset1, buf2_1, window,
-                     out1, in, scale);
-
-            if (offset0 != offset1) {
-                fail();
-                fprintf(stderr, "offsets do not match: %d, %d", offset0, offset1);
-                break;
-            }
-
-            for (j = 0; j < BUF_SIZE; j++) {
-                if (!float_near_abs_eps_ulp(out0[j],   out1[j],   7.0e-7, 16) ||
-                    !float_near_abs_eps_ulp(buf2_0[j], buf2_1[j], 7.0e-7, 16)) {
-                    union av_intfloat32 o0, o1, b0, b1;
-
-                    fail();
-                    o0.f = out0[j];   o1.f = out1[j];
-                    b0.f = buf2_0[j], b1.f = buf2_1[j];
-                    fprintf(stderr, "out:  %11g (0x%08x); %11g (0x%08x); abs diff %11g\n",
-                            o0.f, o0.i, o1.f, o1.i, fabsf(o0.f - o1.f));
-                    fprintf(stderr, "buf2: %11g (0x%08x); %11g (0x%08x); abs diff %11g\n",
-                            b0.f, b0.i, b1.f, b1.i, fabsf(b0.f - b1.f));
-                    break;
-                }
-            }
-
-            bench_new(&imdct, buf_b, &offset_b, buf2_b, window,
-                      out_b, in, scale);
-        }
-    }
-    ff_mdct_end(&imdct);
-
-    report("synth_filter");
-}
diff --git a/tests/checkasm/v210enc.c b/tests/checkasm/v210enc.c
deleted file mode 100644
index ed36776..0000000
--- a/tests/checkasm/v210enc.c
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (c) 2015 Henrik Gramner
- *
- * 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.
- */
-
-#include <string.h>
-#include "checkasm.h"
-#include "libavcodec/v210enc.h"
-#include "libavutil/common.h"
-#include "libavutil/internal.h"
-#include "libavutil/intreadwrite.h"
-
-#define BUF_SIZE 512
-
-#define randomize_buffers(mask)                        \
-    do {                                               \
-        int i, size = sizeof(*y0);                     \
-        for (i = 0; i < BUF_SIZE; i += 4 / size) {     \
-            uint32_t r = rnd() & mask;                 \
-            AV_WN32A(y0 + i, r);                       \
-            AV_WN32A(y1 + i, r);                       \
-        }                                              \
-        for (i = 0; i < BUF_SIZE / 2; i += 4 / size) { \
-            uint32_t r = rnd() & mask;                 \
-            AV_WN32A(u0 + i, r);                       \
-            AV_WN32A(u1 + i, r);                       \
-            r = rnd() & mask;                          \
-            AV_WN32A(v0 + i, r);                       \
-            AV_WN32A(v1 + i, r);                       \
-        }                                              \
-        for (i = 0; i < width * 8 / 3; i += 4) {       \
-            uint32_t r = rnd();                        \
-            AV_WN32A(dst0 + i, r);                     \
-            AV_WN32A(dst1 + i, r);                     \
-        }                                              \
-    } while (0)
-
-#define check_pack_line(type, mask)                                                \
-    do {                                                                           \
-        LOCAL_ALIGNED_16(type, y0, [BUF_SIZE]);                                    \
-        LOCAL_ALIGNED_16(type, y1, [BUF_SIZE]);                                    \
-        LOCAL_ALIGNED_16(type, u0, [BUF_SIZE / 2]);                                \
-        LOCAL_ALIGNED_16(type, u1, [BUF_SIZE / 2]);                                \
-        LOCAL_ALIGNED_16(type, v0, [BUF_SIZE / 2]);                                \
-        LOCAL_ALIGNED_16(type, v1, [BUF_SIZE / 2]);                                \
-        LOCAL_ALIGNED_16(uint8_t, dst0, [BUF_SIZE * 8 / 3]);                       \
-        LOCAL_ALIGNED_16(uint8_t, dst1, [BUF_SIZE * 8 / 3]);                       \
-                                                                                   \
-        declare_func(void, const type * y, const type * u, const type * v,         \
-                     uint8_t * dst, ptrdiff_t width);                              \
-        ptrdiff_t width, step = 12 / sizeof(type);                                 \
-                                                                                   \
-        for (width = step; width < BUF_SIZE - 15; width += step) {                 \
-            int y_offset  = rnd() & 15;                                            \
-            int uv_offset = y_offset / 2;                                          \
-            randomize_buffers(mask);                                               \
-            call_ref(y0 + y_offset, u0 + uv_offset, v0 + uv_offset, dst0, width);  \
-            call_new(y1 + y_offset, u1 + uv_offset, v1 + uv_offset, dst1, width);  \
-            if (memcmp(y0, y1, BUF_SIZE) || memcmp(u0, u1, BUF_SIZE / 2) ||        \
-                memcmp(v0, v1, BUF_SIZE / 2) || memcmp(dst0, dst1, width * 8 / 3)) \
-                fail();                                                            \
-            bench_new(y1 + y_offset, u1 + uv_offset, v1 + uv_offset, dst1, width); \
-        }                                                                          \
-    } while (0)
-
-void checkasm_check_v210enc(void)
-{
-    V210EncContext h;
-
-    ff_v210enc_init(&h);
-
-    if (check_func(h.pack_line_8, "v210_planar_pack_8"))
-        check_pack_line(uint8_t, 0xffffffff);
-
-    if (check_func(h.pack_line_10, "v210_planar_pack_10"))
-        check_pack_line(uint16_t, 0x03ff03ff);
-
-    report("planar_pack");
-}
diff --git a/tests/checkasm/vf_blend.c b/tests/checkasm/vf_blend.c
deleted file mode 100644
index a7578fe..0000000
--- a/tests/checkasm/vf_blend.c
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright (c) 2016 Tiancheng "Timothy" Gu
- *
- * 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.
- */
-
-#include <string.h>
-#include "checkasm.h"
-#include "libavfilter/blend.h"
-#include "libavutil/common.h"
-#include "libavutil/internal.h"
-#include "libavutil/intreadwrite.h"
-
-#define WIDTH 256
-#define HEIGHT 256
-#define BUF_UNITS 3
-#define SIZE_PER_UNIT (WIDTH * HEIGHT)
-#define BUF_SIZE (BUF_UNITS * SIZE_PER_UNIT)
-
-#define randomize_buffers()                   \
-    do {                                      \
-        int i, j;                             \
-        for (i = 0; i < HEIGHT; i++) {        \
-            for (j = 0; j < WIDTH; j++) {     \
-                top1[i * WIDTH + j] =         \
-                top2[i * WIDTH + j] = i;      \
-                bot1[i * WIDTH + j] =         \
-                bot2[i * WIDTH + j] = j;      \
-            }                                 \
-        }                                     \
-        for (i = 0; i < SIZE_PER_UNIT; i += 4) { \
-            uint32_t r = rnd();               \
-            AV_WN32A(dst1 + i, r);            \
-            AV_WN32A(dst2 + i, r);            \
-        }                                     \
-        for (; i < BUF_SIZE; i += 4) {        \
-            uint32_t r = rnd();               \
-            AV_WN32A(top1 + i, r);            \
-            AV_WN32A(top2 + i, r);            \
-            r = rnd();                        \
-            AV_WN32A(bot1 + i, r);            \
-            AV_WN32A(bot2 + i, r);            \
-            r = rnd();                        \
-            AV_WN32A(dst1 + i, r);            \
-            AV_WN32A(dst2 + i, r);            \
-        }                                     \
-    } while (0)
-
-#define check_blend_func(depth)                                                            \
-    do {                                                                                   \
-        int i, w;                                                                          \
-        declare_func(void, const uint8_t *top, ptrdiff_t top_linesize,                     \
-                     const uint8_t *bottom, ptrdiff_t bottom_linesize,                     \
-                     uint8_t *dst, ptrdiff_t dst_linesize,                                 \
-                     ptrdiff_t width, ptrdiff_t height,                                    \
-                     struct FilterParams *param, double *values);                          \
-        w = WIDTH / depth;                                                                 \
-                                                                                           \
-        for (i = 0; i < BUF_UNITS - 1; i++) {                                              \
-            int src_offset = i * SIZE_PER_UNIT + (BUF_UNITS - 1 - i) * depth; /* Test various alignments */  \
-            int dst_offset = i * SIZE_PER_UNIT; /* dst must be aligned */                  \
-            randomize_buffers();                                                           \
-            call_ref(top1 + src_offset, w, bot1 + src_offset, w,                           \
-                     dst1 + dst_offset, w, w, HEIGHT, &param, NULL);                       \
-            call_new(top2 + src_offset, w, bot2 + src_offset, w,                           \
-                     dst2 + dst_offset, w, w, HEIGHT, &param, NULL);                       \
-            if (memcmp(top1, top2, BUF_SIZE) || memcmp(bot1, bot2, BUF_SIZE) || memcmp(dst1, dst2, BUF_SIZE)) \
-                fail();                                                                    \
-        }                                                                                  \
-        bench_new(top2, w / 4, bot2, w / 4, dst2, w / 4,                                   \
-                  w / 4, HEIGHT / 4, &param, NULL);                                        \
-    } while (0)
-
-void checkasm_check_blend(void)
-{
-    uint8_t *top1 = av_malloc(BUF_SIZE);
-    uint8_t *top2 = av_malloc(BUF_SIZE);
-    uint8_t *bot1 = av_malloc(BUF_SIZE);
-    uint8_t *bot2 = av_malloc(BUF_SIZE);
-    uint8_t *dst1 = av_malloc(BUF_SIZE);
-    uint8_t *dst2 = av_malloc(BUF_SIZE);
-    FilterParams param = {
-        .opacity = 1.0,
-    };
-
-#define check_and_report(name, val, depth)        \
-    param.mode = val;                             \
-    ff_blend_init(&param, depth - 1);             \
-    if (check_func(param.blend, #name))           \
-        check_blend_func(depth);
-
-    check_and_report(addition, BLEND_ADDITION, 1)
-    check_and_report(grainmerge, BLEND_GRAINMERGE, 1)
-    check_and_report(and, BLEND_AND, 1)
-    check_and_report(average, BLEND_AVERAGE, 1)
-    check_and_report(darken, BLEND_DARKEN, 1)
-    check_and_report(grainextract, BLEND_GRAINEXTRACT, 1)
-    check_and_report(hardmix, BLEND_HARDMIX, 1)
-    check_and_report(lighten, BLEND_LIGHTEN, 1)
-    check_and_report(multiply, BLEND_MULTIPLY, 1)
-    check_and_report(or, BLEND_OR, 1)
-    check_and_report(phoenix, BLEND_PHOENIX, 1)
-    check_and_report(screen, BLEND_SCREEN, 1)
-    check_and_report(subtract, BLEND_SUBTRACT, 1)
-    check_and_report(xor, BLEND_XOR, 1)
-    check_and_report(difference, BLEND_DIFFERENCE, 1)
-    check_and_report(extremity, BLEND_EXTREMITY, 1)
-    check_and_report(negation, BLEND_NEGATION, 1)
-
-    report("8bit");
-
-    check_and_report(addition_16, BLEND_ADDITION, 2)
-    check_and_report(grainmerge_16, BLEND_GRAINMERGE, 2)
-    check_and_report(and_16, BLEND_AND, 2)
-    check_and_report(average_16, BLEND_AVERAGE, 2)
-    check_and_report(darken_16, BLEND_DARKEN, 2)
-    check_and_report(grainextract_16, BLEND_GRAINEXTRACT, 2)
-    check_and_report(difference_16, BLEND_DIFFERENCE, 2)
-    check_and_report(extremity_16, BLEND_EXTREMITY, 2)
-    check_and_report(negation_16, BLEND_NEGATION, 2)
-    check_and_report(lighten_16, BLEND_LIGHTEN, 2)
-    check_and_report(or_16, BLEND_OR, 2)
-    check_and_report(phoenix_16, BLEND_PHOENIX, 2)
-    check_and_report(subtract_16, BLEND_SUBTRACT, 2)
-    check_and_report(xor_16, BLEND_SUBTRACT, 2)
-
-    report("16bit");
-
-    av_freep(&top1);
-    av_freep(&top2);
-    av_freep(&bot1);
-    av_freep(&bot2);
-    av_freep(&dst1);
-    av_freep(&dst2);
-}
diff --git a/tests/checkasm/videodsp.c b/tests/checkasm/videodsp.c
deleted file mode 100644
index 0a4424a..0000000
--- a/tests/checkasm/videodsp.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 2016 Ronald S. Bultje <rsbultje@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.
- */
-
-#include <string.h>
-#include "checkasm.h"
-#include "libavcodec/videodsp.h"
-#include "libavutil/internal.h"
-#include "libavutil/intreadwrite.h"
-
-#define randomize_buffers(w, h)                         \
-    do {                                                \
-        int i;                                          \
-        for (i = 0; i < w * h * sizeof(*src0); i += 4)  \
-            AV_WN32A(((uint8_t *) src0) + i, rnd());    \
-    } while (0)
-
-#define iter_1d(type, fix, fix_val, var, var_start, var_end)        \
-    for (fix = fix_val, var = var_start; var <= var_end; var++) {   \
-        call_ref((type *) dst0, (const type *) (src0 + y * pw + x), \
-                 bw * sizeof(type), pw * sizeof(type),              \
-                 bw, bh, x, y, pw, ph);                             \
-        call_new((type *) dst1, (const type *) (src1 + y * pw + x), \
-                 bw * sizeof(type), pw * sizeof(type),              \
-                 bw, bh, x, y, pw, ph);                             \
-        if (memcmp(dst0, dst1, bw * bh * sizeof(type)))             \
-            fail();                                                 \
-        bench_new((type *) dst1, (const type *) (src1 + y * pw + x),\
-                  bw * sizeof(type), pw * sizeof(type),             \
-                  bw, bh, x, y, pw, ph);                            \
-    }
-
-#define check_emu_edge_size(type, src_w, src_h, dst_w, dst_h)   \
-    do {                                                        \
-        LOCAL_ALIGNED_16(type, src0, [src_w * src_h]);          \
-        LOCAL_ALIGNED_16(type, src1, [src_w * src_h]);          \
-        int bw = dst_w, bh = dst_h;                             \
-        int pw = src_w, ph = src_h;                             \
-        int y, x;                                               \
-        randomize_buffers(src_w, src_h);                        \
-        memcpy(src1, src0, pw * ph * sizeof(type));             \
-        iter_1d(type, y, 0 - src_h, x, 0 - src_w, src_w - 0);   \
-        iter_1d(type, x, src_w - 0, y, 0 - src_h, src_h - 0);   \
-        iter_1d(type, y, src_h - 0, x, 0 - src_w, src_w - 0);   \
-        iter_1d(type, x, 0 - src_w, y, 0 - src_h, src_h - 0);   \
-    } while (0)
-
-#define check_emu_edge(type)                                    \
-    do {                                                        \
-        LOCAL_ALIGNED_16(type, dst0, [64 * 64]);                \
-        LOCAL_ALIGNED_16(type, dst1, [64 * 64]);                \
-        declare_func_emms(AV_CPU_FLAG_MMX | AV_CPU_FLAG_MMXEXT, \
-                          void, type *dst, const type *src,     \
-                          ptrdiff_t dst_linesize,               \
-                          ptrdiff_t src_linesize,               \
-                          int block_w, int block_h,             \
-                          int src_x, int src_y,                 \
-                          int src_w, int src_h);                \
-        check_emu_edge_size(type, 16,  1, 64, 64);              \
-        check_emu_edge_size(type, 16, 16, 64, 64);              \
-        check_emu_edge_size(type, 64, 64, 64, 64);              \
-    } while (0)
-
-void checkasm_check_videodsp(void)
-{
-    VideoDSPContext vdsp;
-
-    ff_videodsp_init(&vdsp, 8);
-    if (check_func(vdsp.emulated_edge_mc, "emulated_edge_mc_8"))
-        check_emu_edge(uint8_t);
-
-    report("emulated_edge_mc");
-}
diff --git a/tests/checkasm/vp8dsp.c b/tests/checkasm/vp8dsp.c
deleted file mode 100644
index d93f730..0000000
--- a/tests/checkasm/vp8dsp.c
+++ /dev/null
@@ -1,519 +0,0 @@
-/*
- * Copyright (c) 2016 Martin Storsjo
- *
- * 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.
- */
-
-#include <string.h>
-
-#include "libavcodec/avcodec.h"
-#include "libavcodec/vp8dsp.h"
-
-#include "libavutil/common.h"
-#include "libavutil/intreadwrite.h"
-
-#include "checkasm.h"
-
-#define PIXEL_STRIDE 16
-
-#define randomize_buffers(src, dst, stride, coef)                            \
-    do {                                                                     \
-        int x, y;                                                            \
-        for (y = 0; y < 4; y++) {                                            \
-            AV_WN32A((src) + y * (stride), rnd());                           \
-            AV_WN32A((dst) + y * (stride), rnd());                           \
-            for (x = 0; x < 4; x++)                                          \
-                (coef)[y * 4 + x] = (src)[y * (stride) + x] -                \
-                                    (dst)[y * (stride) + x];                 \
-        }                                                                    \
-    } while (0)
-
-static void dct4x4(int16_t *coef)
-{
-    int i;
-    for (i = 0; i < 4; i++) {
-        const int a1 = (coef[i*4 + 0] + coef[i*4 + 3]) * 8;
-        const int b1 = (coef[i*4 + 1] + coef[i*4 + 2]) * 8;
-        const int c1 = (coef[i*4 + 1] - coef[i*4 + 2]) * 8;
-        const int d1 = (coef[i*4 + 0] - coef[i*4 + 3]) * 8;
-        coef[i*4 + 0] =  a1 + b1;
-        coef[i*4 + 1] = (c1 * 2217 + d1 * 5352 + 14500) >> 12;
-        coef[i*4 + 2] =  a1 - b1;
-        coef[i*4 + 3] = (d1 * 2217 - c1 * 5352 +  7500) >> 12;
-    }
-    for (i = 0; i < 4; i++) {
-        const int a1 = coef[i + 0*4] + coef[i + 3*4];
-        const int b1 = coef[i + 1*4] + coef[i + 2*4];
-        const int c1 = coef[i + 1*4] - coef[i + 2*4];
-        const int d1 = coef[i + 0*4] - coef[i + 3*4];
-        coef[i + 0*4] =  (a1 + b1 + 7) >> 4;
-        coef[i + 1*4] = ((c1 * 2217 + d1 * 5352 + 12000) >> 16) + !!d1;
-        coef[i + 2*4] =  (a1 - b1 + 7) >> 4;
-        coef[i + 3*4] =  (d1 * 2217 - c1 * 5352 + 51000) >> 16;
-    }
-}
-
-static void wht4x4(int16_t *coef)
-{
-    int i;
-    for (i = 0; i < 4; i++) {
-        int a1 = coef[0 * 4 + i];
-        int b1 = coef[1 * 4 + i];
-        int c1 = coef[2 * 4 + i];
-        int d1 = coef[3 * 4 + i];
-        int e1;
-        a1 += b1;
-        d1 -= c1;
-        e1 = (a1 - d1) >> 1;
-        b1 = e1 - b1;
-        c1 = e1 - c1;
-        a1 -= c1;
-        d1 += b1;
-        coef[0 * 4 + i] = a1;
-        coef[1 * 4 + i] = c1;
-        coef[2 * 4 + i] = d1;
-        coef[3 * 4 + i] = b1;
-    }
-    for (i = 0; i < 4; i++) {
-        int a1 = coef[i * 4 + 0];
-        int b1 = coef[i * 4 + 1];
-        int c1 = coef[i * 4 + 2];
-        int d1 = coef[i * 4 + 3];
-        int e1;
-        a1 += b1;
-        d1 -= c1;
-        e1 = (a1 - d1) >> 1;
-        b1 = e1 - b1;
-        c1 = e1 - c1;
-        a1 -= c1;
-        d1 += b1;
-        coef[i * 4 + 0] = a1 * 2;
-        coef[i * 4 + 1] = c1 * 2;
-        coef[i * 4 + 2] = d1 * 2;
-        coef[i * 4 + 3] = b1 * 2;
-    }
-}
-
-static void check_idct(void)
-{
-    LOCAL_ALIGNED_16(uint8_t, src,  [4 * 4]);
-    LOCAL_ALIGNED_16(uint8_t, dst,  [4 * 4]);
-    LOCAL_ALIGNED_16(uint8_t, dst0, [4 * 4]);
-    LOCAL_ALIGNED_16(uint8_t, dst1, [4 * 4]);
-    LOCAL_ALIGNED_16(int16_t, coef, [4 * 4]);
-    LOCAL_ALIGNED_16(int16_t, subcoef0, [4 * 4]);
-    LOCAL_ALIGNED_16(int16_t, subcoef1, [4 * 4]);
-    VP8DSPContext d;
-    int dc;
-    declare_func_emms(AV_CPU_FLAG_MMX, void, uint8_t *dst, int16_t *block, ptrdiff_t stride);
-
-    ff_vp8dsp_init(&d);
-    randomize_buffers(src, dst, 4, coef);
-
-    dct4x4(coef);
-
-    for (dc = 0; dc <= 1; dc++) {
-        void (*idct)(uint8_t *, int16_t *, ptrdiff_t) = dc ? d.vp8_idct_dc_add : d.vp8_idct_add;
-
-        if (check_func(idct, "vp8_idct_%sadd", dc ? "dc_" : "")) {
-            if (dc) {
-                memset(subcoef0, 0, 4 * 4 * sizeof(int16_t));
-                subcoef0[0] = coef[0];
-            } else {
-                memcpy(subcoef0, coef, 4 * 4 * sizeof(int16_t));
-            }
-            memcpy(dst0, dst, 4 * 4);
-            memcpy(dst1, dst, 4 * 4);
-            memcpy(subcoef1, subcoef0, 4 * 4 * sizeof(int16_t));
-            // Note, this uses a pixel stride of 4, even though the real decoder uses a stride as a
-            // multiple of 16. If optimizations want to take advantage of that, this test needs to be
-            // updated to make it more like the h264dsp tests.
-            call_ref(dst0, subcoef0, 4);
-            call_new(dst1, subcoef1, 4);
-            if (memcmp(dst0, dst1, 4 * 4) ||
-                memcmp(subcoef0, subcoef1, 4 * 4 * sizeof(int16_t)))
-                fail();
-
-            bench_new(dst1, subcoef1, 4);
-        }
-    }
-}
-
-static void check_idct_dc4(void)
-{
-    LOCAL_ALIGNED_16(uint8_t, src,  [4 * 4 * 4]);
-    LOCAL_ALIGNED_16(uint8_t, dst,  [4 * 4 * 4]);
-    LOCAL_ALIGNED_16(uint8_t, dst0, [4 * 4 * 4]);
-    LOCAL_ALIGNED_16(uint8_t, dst1, [4 * 4 * 4]);
-    LOCAL_ALIGNED_16(int16_t, coef, [4], [4 * 4]);
-    LOCAL_ALIGNED_16(int16_t, subcoef0, [4], [4 * 4]);
-    LOCAL_ALIGNED_16(int16_t, subcoef1, [4], [4 * 4]);
-    VP8DSPContext d;
-    int i, chroma;
-    declare_func_emms(AV_CPU_FLAG_MMX, void, uint8_t *dst, int16_t block[4][16], ptrdiff_t stride);
-
-    ff_vp8dsp_init(&d);
-
-    for (chroma = 0; chroma <= 1; chroma++) {
-        void (*idct4dc)(uint8_t *, int16_t[4][16], ptrdiff_t) = chroma ? d.vp8_idct_dc_add4uv : d.vp8_idct_dc_add4y;
-        if (check_func(idct4dc, "vp8_idct_dc_add4%s", chroma ? "uv" : "y")) {
-            ptrdiff_t stride = chroma ? 8 : 16;
-            int w      = chroma ? 2 : 4;
-            for (i = 0; i < 4; i++) {
-                int blockx = 4 * (i % w);
-                int blocky = 4 * (i / w);
-                randomize_buffers(src + stride * blocky + blockx, dst + stride * blocky + blockx, stride, coef[i]);
-                dct4x4(coef[i]);
-                memset(&coef[i][1], 0, 15 * sizeof(int16_t));
-            }
-
-            memcpy(dst0, dst, 4 * 4 * 4);
-            memcpy(dst1, dst, 4 * 4 * 4);
-            memcpy(subcoef0, coef, 4 * 4 * 4 * sizeof(int16_t));
-            memcpy(subcoef1, coef, 4 * 4 * 4 * sizeof(int16_t));
-            call_ref(dst0, subcoef0, stride);
-            call_new(dst1, subcoef1, stride);
-            if (memcmp(dst0, dst1, 4 * 4 * 4) ||
-                memcmp(subcoef0, subcoef1, 4 * 4 * 4 * sizeof(int16_t)))
-                fail();
-            bench_new(dst1, subcoef1, stride);
-        }
-    }
-
-}
-
-static void check_luma_dc_wht(void)
-{
-    LOCAL_ALIGNED_16(int16_t, dc, [4 * 4]);
-    LOCAL_ALIGNED_16(int16_t, dc0, [4 * 4]);
-    LOCAL_ALIGNED_16(int16_t, dc1, [4 * 4]);
-    int16_t block[4][4][16];
-    LOCAL_ALIGNED_16(int16_t, block0, [4], [4][16]);
-    LOCAL_ALIGNED_16(int16_t, block1, [4], [4][16]);
-    VP8DSPContext d;
-    int dc_only;
-    int blockx, blocky;
-    declare_func_emms(AV_CPU_FLAG_MMX, void, int16_t block[4][4][16], int16_t dc[16]);
-
-    ff_vp8dsp_init(&d);
-
-    for (blocky = 0; blocky < 4; blocky++) {
-        for (blockx = 0; blockx < 4; blockx++) {
-            uint8_t src[16], dst[16];
-            randomize_buffers(src, dst, 4, block[blocky][blockx]);
-
-            dct4x4(block[blocky][blockx]);
-            dc[blocky * 4 + blockx] = block[blocky][blockx][0];
-            block[blocky][blockx][0] = rnd();
-        }
-    }
-    wht4x4(dc);
-
-    for (dc_only = 0; dc_only <= 1; dc_only++) {
-        void (*idct)(int16_t [4][4][16], int16_t [16]) = dc_only ? d.vp8_luma_dc_wht_dc : d.vp8_luma_dc_wht;
-
-        if (check_func(idct, "vp8_luma_dc_wht%s", dc_only ? "_dc" : "")) {
-            if (dc_only) {
-                memset(dc0, 0, 16 * sizeof(int16_t));
-                dc0[0] = dc[0];
-            } else {
-                memcpy(dc0, dc, 16 * sizeof(int16_t));
-            }
-            memcpy(dc1, dc0, 16 * sizeof(int16_t));
-            memcpy(block0, block, 4 * 4 * 16 * sizeof(int16_t));
-            memcpy(block1, block, 4 * 4 * 16 * sizeof(int16_t));
-            call_ref(block0, dc0);
-            call_new(block1, dc1);
-            if (memcmp(block0, block1, 4 * 4 * 16 * sizeof(int16_t)) ||
-                memcmp(dc0, dc1, 16 * sizeof(int16_t)))
-                fail();
-            bench_new(block1, dc1);
-        }
-    }
-}
-
-#define SRC_BUF_STRIDE 32
-#define SRC_BUF_SIZE (((size << (size < 16)) + 5) * SRC_BUF_STRIDE)
-// The mc subpixel interpolation filter needs the 2 previous pixels in either
-// direction, the +1 is to make sure the actual load addresses always are
-// unaligned.
-#define src (buf + 2 * SRC_BUF_STRIDE + 2 + 1)
-
-#undef randomize_buffers
-#define randomize_buffers()                               \
-    do {                                                  \
-        int k;                                            \
-        for (k = 0; k < SRC_BUF_SIZE; k += 4) {           \
-            AV_WN32A(buf + k, rnd());                     \
-        }                                                 \
-    } while (0)
-
-static void check_mc(void)
-{
-    LOCAL_ALIGNED_16(uint8_t, buf, [32 * 32]);
-    LOCAL_ALIGNED_16(uint8_t, dst0, [16 * 16]);
-    LOCAL_ALIGNED_16(uint8_t, dst1, [16 * 16]);
-    VP8DSPContext d;
-    int type, k, dx, dy;
-    declare_func_emms(AV_CPU_FLAG_MMX, void, uint8_t *, ptrdiff_t, uint8_t *, ptrdiff_t, int, int, int);
-
-    ff_vp78dsp_init(&d);
-
-    for (type = 0; type < 2; type++) {
-        vp8_mc_func (*tab)[3][3] = type ? d.put_vp8_bilinear_pixels_tab : d.put_vp8_epel_pixels_tab;
-        for (k = 1; k < 8; k++) {
-            int hsize  = k / 3;
-            int size   = 16 >> hsize;
-            int height = (size << 1) >> (k % 3);
-            for (dy = 0; dy < 3; dy++) {
-                for (dx = 0; dx < 3; dx++) {
-                    char str[100];
-                    if (dx || dy) {
-                        if (type == 0) {
-                            static const char *dx_names[] = { "", "h4", "h6" };
-                            static const char *dy_names[] = { "", "v4", "v6" };
-                            snprintf(str, sizeof(str), "epel%d_%s%s", size, dx_names[dx], dy_names[dy]);
-                        } else {
-                            snprintf(str, sizeof(str), "bilin%d_%s%s", size, dx ? "h" : "", dy ? "v" : "");
-                        }
-                    } else {
-                        snprintf(str, sizeof(str), "pixels%d", size);
-                    }
-                    if (check_func(tab[hsize][dy][dx], "vp8_put_%s", str)) {
-                        int mx, my;
-                        int i;
-                        if (type == 0) {
-                            mx = dx == 2 ? 2 + 2 * (rnd() % 3) : dx == 1 ? 1 + 2 * (rnd() % 4) : 0;
-                            my = dy == 2 ? 2 + 2 * (rnd() % 3) : dy == 1 ? 1 + 2 * (rnd() % 4) : 0;
-                        } else {
-                            mx = dx ? 1 + (rnd() % 7) : 0;
-                            my = dy ? 1 + (rnd() % 7) : 0;
-                        }
-                        randomize_buffers();
-                        for (i = -2; i <= 3; i++) {
-                            int val = (i == -1 || i == 2) ? 0 : 0xff;
-                            // Set pixels in the first row and column to the maximum pattern,
-                            // to test for potential overflows in the filter.
-                            src[i                 ] = val;
-                            src[i * SRC_BUF_STRIDE] = val;
-                        }
-                        call_ref(dst0, size, src, SRC_BUF_STRIDE, height, mx, my);
-                        call_new(dst1, size, src, SRC_BUF_STRIDE, height, mx, my);
-                        if (memcmp(dst0, dst1, size * height))
-                            fail();
-                        bench_new(dst1, size, src, SRC_BUF_STRIDE, height, mx, my);
-                    }
-                }
-            }
-        }
-    }
-}
-
-#undef randomize_buffers
-
-#define setpx(a, b, c) buf[(a) + (b) * jstride] = av_clip_uint8(c)
-// Set the pixel to c +/- [0,d]
-#define setdx(a, b, c, d) setpx(a, b, c - (d) + (rnd() % ((d) * 2 + 1)))
-// Set the pixel to c +/- [d,d+e] (making sure it won't be clipped)
-#define setdx2(a, b, o, c, d, e) setpx(a, b, o = c + ((d) + (rnd() % (e))) * (c >= 128 ? -1 : 1))
-
-static void randomize_loopfilter_buffers(int lineoff, int str,
-                                         int dir, int flim_E, int flim_I,
-                                         int hev_thresh, uint8_t *buf,
-                                         int force_hev)
-{
-    uint32_t mask = 0xff;
-    int off = dir ? lineoff : lineoff * str;
-    int istride = dir ? 1 : str;
-    int jstride = dir ? str : 1;
-    int i;
-    for (i = 0; i < 8; i += 2) {
-        // Row 0 will trigger hev for q0/q1, row 2 will trigger hev for p0/p1,
-        // rows 4 and 6 will not trigger hev.
-        // force_hev 1 will make sure all rows trigger hev, while force_hev -1
-        // makes none of them trigger it.
-        int idx = off + i * istride, p2, p1, p0, q0, q1, q2;
-        setpx(idx,  0, q0 = rnd() & mask);
-        if (i == 0 && force_hev >= 0 || force_hev > 0)
-            setdx2(idx, 1, q1, q0, hev_thresh + 1, flim_I - hev_thresh - 1);
-        else
-            setdx(idx,  1, q1 = q0, hev_thresh);
-        setdx(idx,  2, q2 = q1, flim_I);
-        setdx(idx,  3, q2,      flim_I);
-        setdx(idx, -1, p0 = q0, flim_E >> 2);
-        if (i == 2 && force_hev >= 0 || force_hev > 0)
-            setdx2(idx, -2, p1, p0, hev_thresh + 1, flim_I - hev_thresh - 1);
-        else
-            setdx(idx, -2, p1 = p0, hev_thresh);
-        setdx(idx, -3, p2 = p1, flim_I);
-        setdx(idx, -4, p2,      flim_I);
-    }
-}
-
-// Fill the buffer with random pixels
-static void fill_loopfilter_buffers(uint8_t *buf, ptrdiff_t stride, int w, int h)
-{
-    int x, y;
-    for (y = 0; y < h; y++)
-        for (x = 0; x < w; x++)
-            buf[y * stride + x] = rnd() & 0xff;
-}
-
-#define randomize_buffers(buf, lineoff, str, force_hev) \
-    randomize_loopfilter_buffers(lineoff, str, dir, flim_E, flim_I, hev_thresh, buf, force_hev)
-
-static void check_loopfilter_16y(void)
-{
-    LOCAL_ALIGNED_16(uint8_t, base0, [32 + 16 * 16]);
-    LOCAL_ALIGNED_16(uint8_t, base1, [32 + 16 * 16]);
-    VP8DSPContext d;
-    int dir, edge, force_hev;
-    int flim_E = 20, flim_I = 10, hev_thresh = 7;
-    declare_func_emms(AV_CPU_FLAG_MMX, void, uint8_t *, ptrdiff_t, int, int, int);
-
-    ff_vp8dsp_init(&d);
-
-    for (dir = 0; dir < 2; dir++) {
-        int midoff = dir ? 4 * 16 : 4;
-        int midoff_aligned = dir ? 4 * 16 : 16;
-        uint8_t *buf0 = base0 + midoff_aligned;
-        uint8_t *buf1 = base1 + midoff_aligned;
-        for (edge = 0; edge < 2; edge++) {
-            void (*func)(uint8_t *, ptrdiff_t, int, int, int) = NULL;
-            switch (dir << 1 | edge) {
-            case (0 << 1) | 0: func = d.vp8_h_loop_filter16y; break;
-            case (1 << 1) | 0: func = d.vp8_v_loop_filter16y; break;
-            case (0 << 1) | 1: func = d.vp8_h_loop_filter16y_inner; break;
-            case (1 << 1) | 1: func = d.vp8_v_loop_filter16y_inner; break;
-            }
-            if (check_func(func, "vp8_loop_filter16y%s_%s", edge ? "_inner" : "", dir ? "v" : "h")) {
-                for (force_hev = -1; force_hev <= 1; force_hev++) {
-                    fill_loopfilter_buffers(buf0 - midoff, 16, 16, 16);
-                    randomize_buffers(buf0, 0, 16, force_hev);
-                    randomize_buffers(buf0, 8, 16, force_hev);
-                    memcpy(buf1 - midoff, buf0 - midoff, 16 * 16);
-                    call_ref(buf0, 16, flim_E, flim_I, hev_thresh);
-                    call_new(buf1, 16, flim_E, flim_I, hev_thresh);
-                    if (memcmp(buf0 - midoff, buf1 - midoff, 16 * 16))
-                        fail();
-                }
-                fill_loopfilter_buffers(buf0 - midoff, 16, 16, 16);
-                randomize_buffers(buf0, 0, 16, 0);
-                randomize_buffers(buf0, 8, 16, 0);
-                bench_new(buf0, 16, flim_E, flim_I, hev_thresh);
-            }
-        }
-    }
-}
-
-static void check_loopfilter_8uv(void)
-{
-    LOCAL_ALIGNED_16(uint8_t, base0u, [32 + 16 * 16]);
-    LOCAL_ALIGNED_16(uint8_t, base0v, [32 + 16 * 16]);
-    LOCAL_ALIGNED_16(uint8_t, base1u, [32 + 16 * 16]);
-    LOCAL_ALIGNED_16(uint8_t, base1v, [32 + 16 * 16]);
-    VP8DSPContext d;
-    int dir, edge, force_hev;
-    int flim_E = 20, flim_I = 10, hev_thresh = 7;
-    declare_func_emms(AV_CPU_FLAG_MMX, void, uint8_t *, uint8_t *, ptrdiff_t, int, int, int);
-
-    ff_vp8dsp_init(&d);
-
-    for (dir = 0; dir < 2; dir++) {
-        int midoff = dir ? 4 * 16 : 4;
-        int midoff_aligned = dir ? 4 * 16 : 16;
-        uint8_t *buf0u = base0u + midoff_aligned;
-        uint8_t *buf0v = base0v + midoff_aligned;
-        uint8_t *buf1u = base1u + midoff_aligned;
-        uint8_t *buf1v = base1v + midoff_aligned;
-        for (edge = 0; edge < 2; edge++) {
-            void (*func)(uint8_t *, uint8_t *, ptrdiff_t, int, int, int) = NULL;
-            switch (dir << 1 | edge) {
-            case (0 << 1) | 0: func = d.vp8_h_loop_filter8uv; break;
-            case (1 << 1) | 0: func = d.vp8_v_loop_filter8uv; break;
-            case (0 << 1) | 1: func = d.vp8_h_loop_filter8uv_inner; break;
-            case (1 << 1) | 1: func = d.vp8_v_loop_filter8uv_inner; break;
-            }
-            if (check_func(func, "vp8_loop_filter8uv%s_%s", edge ? "_inner" : "", dir ? "v" : "h")) {
-                for (force_hev = -1; force_hev <= 1; force_hev++) {
-                    fill_loopfilter_buffers(buf0u - midoff, 16, 16, 16);
-                    fill_loopfilter_buffers(buf0v - midoff, 16, 16, 16);
-                    randomize_buffers(buf0u, 0, 16, force_hev);
-                    randomize_buffers(buf0v, 0, 16, force_hev);
-                    memcpy(buf1u - midoff, buf0u - midoff, 16 * 16);
-                    memcpy(buf1v - midoff, buf0v - midoff, 16 * 16);
-
-                    call_ref(buf0u, buf0v, 16, flim_E, flim_I, hev_thresh);
-                    call_new(buf1u, buf1v, 16, flim_E, flim_I, hev_thresh);
-                    if (memcmp(buf0u - midoff, buf1u - midoff, 16 * 16) ||
-                        memcmp(buf0v - midoff, buf1v - midoff, 16 * 16))
-                        fail();
-                }
-                fill_loopfilter_buffers(buf0u - midoff, 16, 16, 16);
-                fill_loopfilter_buffers(buf0v - midoff, 16, 16, 16);
-                randomize_buffers(buf0u, 0, 16, 0);
-                randomize_buffers(buf0v, 0, 16, 0);
-                bench_new(buf0u, buf0v, 16, flim_E, flim_I, hev_thresh);
-            }
-        }
-    }
-}
-
-static void check_loopfilter_simple(void)
-{
-    LOCAL_ALIGNED_16(uint8_t, base0, [32 + 16 * 16]);
-    LOCAL_ALIGNED_16(uint8_t, base1, [32 + 16 * 16]);
-    VP8DSPContext d;
-    int dir;
-    int flim_E = 20, flim_I = 30, hev_thresh = 0;
-    declare_func_emms(AV_CPU_FLAG_MMX, void, uint8_t *, ptrdiff_t, int);
-
-    ff_vp8dsp_init(&d);
-
-    for (dir = 0; dir < 2; dir++) {
-        int midoff = dir ? 4 * 16 : 4;
-        int midoff_aligned = dir ? 4 * 16 : 16;
-        uint8_t *buf0 = base0 + midoff_aligned;
-        uint8_t *buf1 = base1 + midoff_aligned;
-        void (*func)(uint8_t *, ptrdiff_t, int) = dir ? d.vp8_v_loop_filter_simple : d.vp8_h_loop_filter_simple;
-        if (check_func(func, "vp8_loop_filter_simple_%s", dir ? "v" : "h")) {
-            fill_loopfilter_buffers(buf0 - midoff, 16, 16, 16);
-            randomize_buffers(buf0, 0, 16, -1);
-            randomize_buffers(buf0, 8, 16, -1);
-            memcpy(buf1 - midoff, buf0 - midoff, 16 * 16);
-            call_ref(buf0, 16, flim_E);
-            call_new(buf1, 16, flim_E);
-            if (memcmp(buf0 - midoff, buf1 - midoff, 16 * 16))
-                fail();
-            bench_new(buf0, 16, flim_E);
-        }
-    }
-}
-
-void checkasm_check_vp8dsp(void)
-{
-    check_idct();
-    check_idct_dc4();
-    check_luma_dc_wht();
-    report("idct");
-    check_mc();
-    report("mc");
-    check_loopfilter_16y();
-    check_loopfilter_8uv();
-    check_loopfilter_simple();
-    report("loopfilter");
-}
diff --git a/tests/checkasm/vp9dsp.c b/tests/checkasm/vp9dsp.c
deleted file mode 100644
index a91577b..0000000
--- a/tests/checkasm/vp9dsp.c
+++ /dev/null
@@ -1,631 +0,0 @@
-/*
- * Copyright (c) 2015 Ronald S. Bultje <rsbultje@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.
- */
-
-#include <math.h>
-#include <string.h>
-#include "checkasm.h"
-#include "libavcodec/vp9data.h"
-#include "libavcodec/vp9.h"
-#include "libavutil/common.h"
-#include "libavutil/internal.h"
-#include "libavutil/intreadwrite.h"
-#include "libavutil/mathematics.h"
-
-static const uint32_t pixel_mask[3] = { 0xffffffff, 0x03ff03ff, 0x0fff0fff };
-#define SIZEOF_PIXEL ((bit_depth + 7) / 8)
-
-#define randomize_buffers()                                        \
-    do {                                                           \
-        uint32_t mask = pixel_mask[(bit_depth - 8) >> 1];          \
-        int k;                                                     \
-        for (k = -4;  k < SIZEOF_PIXEL * FFMAX(8, size); k += 4) { \
-            uint32_t r = rnd() & mask;                             \
-            AV_WN32A(a + k, r);                                    \
-        }                                                          \
-        for (k = 0; k < size * SIZEOF_PIXEL; k += 4) {             \
-            uint32_t r = rnd() & mask;                             \
-            AV_WN32A(l + k, r);                                    \
-        }                                                          \
-    } while (0)
-
-static void check_ipred(void)
-{
-    LOCAL_ALIGNED_32(uint8_t, a_buf, [64 * 2]);
-    uint8_t *a = &a_buf[32 * 2];
-    LOCAL_ALIGNED_32(uint8_t, l, [32 * 2]);
-    LOCAL_ALIGNED_32(uint8_t, dst0, [32 * 32 * 2]);
-    LOCAL_ALIGNED_32(uint8_t, dst1, [32 * 32 * 2]);
-    VP9DSPContext dsp;
-    int tx, mode, bit_depth;
-    declare_func_emms(AV_CPU_FLAG_MMX | AV_CPU_FLAG_MMXEXT, void, uint8_t *dst, ptrdiff_t stride,
-                      const uint8_t *left, const uint8_t *top);
-    static const char *const mode_names[N_INTRA_PRED_MODES] = {
-        [VERT_PRED] = "vert",
-        [HOR_PRED] = "hor",
-        [DC_PRED] = "dc",
-        [DIAG_DOWN_LEFT_PRED] = "diag_downleft",
-        [DIAG_DOWN_RIGHT_PRED] = "diag_downright",
-        [VERT_RIGHT_PRED] = "vert_right",
-        [HOR_DOWN_PRED] = "hor_down",
-        [VERT_LEFT_PRED] = "vert_left",
-        [HOR_UP_PRED] = "hor_up",
-        [TM_VP8_PRED] = "tm",
-        [LEFT_DC_PRED] = "dc_left",
-        [TOP_DC_PRED] = "dc_top",
-        [DC_128_PRED] = "dc_128",
-        [DC_127_PRED] = "dc_127",
-        [DC_129_PRED] = "dc_129",
-    };
-
-    for (bit_depth = 8; bit_depth <= 12; bit_depth += 2) {
-        ff_vp9dsp_init(&dsp, bit_depth, 0);
-        for (tx = 0; tx < 4; tx++) {
-            int size = 4 << tx;
-
-            for (mode = 0; mode < N_INTRA_PRED_MODES; mode++) {
-                if (check_func(dsp.intra_pred[tx][mode], "vp9_%s_%dx%d_%dbpp",
-                               mode_names[mode], size, size, bit_depth)) {
-                    randomize_buffers();
-                    call_ref(dst0, size * SIZEOF_PIXEL, l, a);
-                    call_new(dst1, size * SIZEOF_PIXEL, l, a);
-                    if (memcmp(dst0, dst1, size * size * SIZEOF_PIXEL))
-                        fail();
-                    bench_new(dst1, size * SIZEOF_PIXEL,l, a);
-                }
-            }
-        }
-    }
-    report("ipred");
-}
-
-#undef randomize_buffers
-
-#define randomize_buffers() \
-    do { \
-        uint32_t mask = pixel_mask[(bit_depth - 8) >> 1];                  \
-        for (y = 0; y < sz; y++) {                                         \
-            for (x = 0; x < sz * SIZEOF_PIXEL; x += 4) {                   \
-                uint32_t r = rnd() & mask;                                 \
-                AV_WN32A(dst + y * sz * SIZEOF_PIXEL + x, r);              \
-                AV_WN32A(src + y * sz * SIZEOF_PIXEL + x, rnd() & mask);   \
-            }                                                              \
-            for (x = 0; x < sz; x++) {                                     \
-                if (bit_depth == 8) {                                      \
-                    coef[y * sz + x] = src[y * sz + x] - dst[y * sz + x];  \
-                } else {                                                   \
-                    ((int32_t *) coef)[y * sz + x] =                       \
-                        ((uint16_t *) src)[y * sz + x] -                   \
-                        ((uint16_t *) dst)[y * sz + x];                    \
-                }                                                          \
-            }                                                              \
-        }                                                                  \
-    } while(0)
-
-// wht function copied from libvpx
-static void fwht_1d(double *out, const double *in, int sz)
-{
-    double t0 = in[0] + in[1];
-    double t3 = in[3] - in[2];
-    double t4 = trunc((t0 - t3) * 0.5);
-    double t1 = t4 - in[1];
-    double t2 = t4 - in[2];
-
-    out[0] = t0 - t2;
-    out[1] = t2;
-    out[2] = t3 + t1;
-    out[3] = t1;
-}
-
-// standard DCT-II
-static void fdct_1d(double *out, const double *in, int sz)
-{
-    int k, n;
-
-    for (k = 0; k < sz; k++) {
-        out[k] = 0.0;
-        for (n = 0; n < sz; n++)
-            out[k] += in[n] * cos(M_PI * (2 * n + 1) * k / (sz * 2.0));
-    }
-    out[0] *= M_SQRT1_2;
-}
-
-// see "Towards jointly optimal spatial prediction and adaptive transform in
-// video/image coding", by J. Han, A. Saxena, and K. Rose
-// IEEE Proc. ICASSP, pp. 726-729, Mar. 2010.
-static void fadst4_1d(double *out, const double *in, int sz)
-{
-    int k, n;
-
-    for (k = 0; k < sz; k++) {
-        out[k] = 0.0;
-        for (n = 0; n < sz; n++)
-            out[k] += in[n] * sin(M_PI * (n + 1) * (2 * k + 1) / (sz * 2.0 + 1.0));
-    }
-}
-
-// see "A Butterfly Structured Design of The Hybrid Transform Coding Scheme",
-// by Jingning Han, Yaowu Xu, and Debargha Mukherjee
-// http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/41418.pdf
-static void fadst_1d(double *out, const double *in, int sz)
-{
-    int k, n;
-
-    for (k = 0; k < sz; k++) {
-        out[k] = 0.0;
-        for (n = 0; n < sz; n++)
-            out[k] += in[n] * sin(M_PI * (2 * n + 1) * (2 * k + 1) / (sz * 4.0));
-    }
-}
-
-typedef void (*ftx1d_fn)(double *out, const double *in, int sz);
-static void ftx_2d(double *out, const double *in, enum TxfmMode tx,
-                   enum TxfmType txtp, int sz)
-{
-    static const double scaling_factors[5][4] = {
-        { 4.0, 16.0 * M_SQRT1_2 / 3.0, 16.0 * M_SQRT1_2 / 3.0, 32.0 / 9.0 },
-        { 2.0, 2.0, 2.0, 2.0 },
-        { 1.0, 1.0, 1.0, 1.0 },
-        { 0.25 },
-        { 4.0 }
-    };
-    static const ftx1d_fn ftx1d_tbl[5][4][2] = {
-        {
-            { fdct_1d, fdct_1d },
-            { fadst4_1d, fdct_1d },
-            { fdct_1d, fadst4_1d },
-            { fadst4_1d, fadst4_1d },
-        }, {
-            { fdct_1d, fdct_1d },
-            { fadst_1d, fdct_1d },
-            { fdct_1d, fadst_1d },
-            { fadst_1d, fadst_1d },
-        }, {
-            { fdct_1d, fdct_1d },
-            { fadst_1d, fdct_1d },
-            { fdct_1d, fadst_1d },
-            { fadst_1d, fadst_1d },
-        }, {
-            { fdct_1d, fdct_1d },
-        }, {
-            { fwht_1d, fwht_1d },
-        },
-    };
-    double temp[1024];
-    double scaling_factor = scaling_factors[tx][txtp];
-    int i, j;
-
-    // cols
-    for (i = 0; i < sz; ++i) {
-        double temp_out[32];
-
-        ftx1d_tbl[tx][txtp][0](temp_out, &in[i * sz], sz);
-        // scale and transpose
-        for (j = 0; j < sz; ++j)
-            temp[j * sz + i] = temp_out[j] * scaling_factor;
-    }
-
-    // rows
-    for (i = 0; i < sz; i++)
-        ftx1d_tbl[tx][txtp][1](&out[i * sz], &temp[i * sz], sz);
-}
-
-static void ftx(int16_t *buf, enum TxfmMode tx,
-                enum TxfmType txtp, int sz, int bit_depth)
-{
-    double ind[1024], outd[1024];
-    int n;
-
-    emms_c();
-    for (n = 0; n < sz * sz; n++) {
-        if (bit_depth == 8)
-            ind[n] = buf[n];
-        else
-            ind[n] = ((int32_t *) buf)[n];
-    }
-    ftx_2d(outd, ind, tx, txtp, sz);
-    for (n = 0; n < sz * sz; n++) {
-        if (bit_depth == 8)
-            buf[n] = lrint(outd[n]);
-        else
-            ((int32_t *) buf)[n] = lrint(outd[n]);
-    }
-}
-
-static int copy_subcoefs(int16_t *out, const int16_t *in, enum TxfmMode tx,
-                         enum TxfmType txtp, int sz, int sub, int bit_depth)
-{
-    // copy the topleft coefficients such that the return value (being the
-    // coefficient scantable index for the eob token) guarantees that only
-    // the topleft $sub out of $sz (where $sz >= $sub) coefficients in both
-    // dimensions are non-zero. This leads to braching to specific optimized
-    // simd versions (e.g. dc-only) so that we get full asm coverage in this
-    // test
-
-    int n;
-    const int16_t *scan = ff_vp9_scans[tx][txtp];
-    int eob;
-
-    for (n = 0; n < sz * sz; n++) {
-        int rc = scan[n], rcx = rc % sz, rcy = rc / sz;
-
-        // find eob for this sub-idct
-        if (rcx >= sub || rcy >= sub)
-            break;
-
-        // copy coef
-        if (bit_depth == 8) {
-            out[rc] = in[rc];
-        } else {
-            AV_COPY32(&out[rc * 2], &in[rc * 2]);
-        }
-    }
-
-    eob = n;
-
-    for (; n < sz * sz; n++) {
-        int rc = scan[n];
-
-        // zero
-        if (bit_depth == 8) {
-            out[rc] = 0;
-        } else {
-            AV_ZERO32(&out[rc * 2]);
-        }
-    }
-
-    return eob;
-}
-
-static int iszero(const int16_t *c, int sz)
-{
-    int n;
-
-    for (n = 0; n < sz / sizeof(int16_t); n += 2)
-        if (AV_RN32A(&c[n]))
-            return 0;
-
-    return 1;
-}
-
-#define SIZEOF_COEF (2 * ((bit_depth + 7) / 8))
-
-static void check_itxfm(void)
-{
-    LOCAL_ALIGNED_32(uint8_t, src, [32 * 32 * 2]);
-    LOCAL_ALIGNED_32(uint8_t, dst, [32 * 32 * 2]);
-    LOCAL_ALIGNED_32(uint8_t, dst0, [32 * 32 * 2]);
-    LOCAL_ALIGNED_32(uint8_t, dst1, [32 * 32 * 2]);
-    LOCAL_ALIGNED_32(int16_t, coef, [32 * 32 * 2]);
-    LOCAL_ALIGNED_32(int16_t, subcoef0, [32 * 32 * 2]);
-    LOCAL_ALIGNED_32(int16_t, subcoef1, [32 * 32 * 2]);
-    declare_func_emms(AV_CPU_FLAG_MMX | AV_CPU_FLAG_MMXEXT, void, uint8_t *dst, ptrdiff_t stride, int16_t *block, int eob);
-    VP9DSPContext dsp;
-    int y, x, tx, txtp, bit_depth, sub;
-    static const char *const txtp_types[N_TXFM_TYPES] = {
-        [DCT_DCT] = "dct_dct", [DCT_ADST] = "adst_dct",
-        [ADST_DCT] = "dct_adst", [ADST_ADST] = "adst_adst"
-    };
-
-    for (bit_depth = 8; bit_depth <= 12; bit_depth += 2) {
-        ff_vp9dsp_init(&dsp, bit_depth, 0);
-
-        for (tx = TX_4X4; tx <= N_TXFM_SIZES /* 4 = lossless */; tx++) {
-            int sz = 4 << (tx & 3);
-            int n_txtps = tx < TX_32X32 ? N_TXFM_TYPES : 1;
-
-            for (txtp = 0; txtp < n_txtps; txtp++) {
-                // skip testing sub-IDCTs for WHT or ADST since they don't
-                // implement it in any of the SIMD functions. If they do,
-                // consider changing this to ensure we have complete test
-                // coverage. Test sub=1 for dc-only, then 2, 4, 8, 12, etc,
-                // since the arm version can distinguish them at that level.
-                for (sub = (txtp == 0 && tx < 4) ? 1 : sz; sub <= sz;
-                     sub < 4 ? (sub <<= 1) : (sub += 4)) {
-                    if (check_func(dsp.itxfm_add[tx][txtp],
-                                   "vp9_inv_%s_%dx%d_sub%d_add_%d",
-                                   tx == 4 ? "wht_wht" : txtp_types[txtp],
-                                   sz, sz, sub, bit_depth)) {
-                        int eob;
-
-                        randomize_buffers();
-                        ftx(coef, tx, txtp, sz, bit_depth);
-
-                        if (sub < sz) {
-                            eob = copy_subcoefs(subcoef0, coef, tx, txtp,
-                                                sz, sub, bit_depth);
-                        } else {
-                            eob = sz * sz;
-                            memcpy(subcoef0, coef, sz * sz * SIZEOF_COEF);
-                        }
-
-                        memcpy(dst0, dst, sz * sz * SIZEOF_PIXEL);
-                        memcpy(dst1, dst, sz * sz * SIZEOF_PIXEL);
-                        memcpy(subcoef1, subcoef0, sz * sz * SIZEOF_COEF);
-                        call_ref(dst0, sz * SIZEOF_PIXEL, subcoef0, eob);
-                        call_new(dst1, sz * SIZEOF_PIXEL, subcoef1, eob);
-                        if (memcmp(dst0, dst1, sz * sz * SIZEOF_PIXEL) ||
-                            !iszero(subcoef0, sz * sz * SIZEOF_COEF) ||
-                            !iszero(subcoef1, sz * sz * SIZEOF_COEF))
-                            fail();
-
-                        bench_new(dst, sz * SIZEOF_PIXEL, coef, eob);
-                    }
-                }
-            }
-        }
-    }
-    report("itxfm");
-}
-
-#undef randomize_buffers
-
-#define setpx(a,b,c) \
-    do { \
-        if (SIZEOF_PIXEL == 1) { \
-            buf0[(a) + (b) * jstride] = av_clip_uint8(c); \
-        } else { \
-            ((uint16_t *)buf0)[(a) + (b) * jstride] = av_clip_uintp2(c, bit_depth); \
-        } \
-    } while (0)
-
-// c can be an assignment and must not be put under ()
-#define setdx(a,b,c,d) setpx(a,b,c-(d)+(rnd()%((d)*2+1)))
-#define setsx(a,b,c,d) setdx(a,b,c,(d) << (bit_depth - 8))
-static void randomize_loopfilter_buffers(int bidx, int lineoff, int str,
-                                         int bit_depth, int dir, const int *E,
-                                         const int *F, const int *H, const int *I,
-                                         uint8_t *buf0, uint8_t *buf1)
-{
-    uint32_t mask = (1 << bit_depth) - 1;
-    int off = dir ? lineoff : lineoff * 16;
-    int istride = dir ? 1 : 16;
-    int jstride = dir ? str : 1;
-    int i, j;
-    for (i = 0; i < 2; i++) /* flat16 */ {
-        int idx = off + i * istride, p0, q0;
-        setpx(idx,  0, q0 = rnd() & mask);
-        setsx(idx, -1, p0 = q0, E[bidx] >> 2);
-        for (j = 1; j < 8; j++) {
-            setsx(idx, -1 - j, p0, F[bidx]);
-            setsx(idx, j, q0, F[bidx]);
-        }
-    }
-    for (i = 2; i < 4; i++) /* flat8 */ {
-        int idx = off + i * istride, p0, q0;
-        setpx(idx,  0, q0 = rnd() & mask);
-        setsx(idx, -1, p0 = q0, E[bidx] >> 2);
-        for (j = 1; j < 4; j++) {
-            setsx(idx, -1 - j, p0, F[bidx]);
-            setsx(idx, j, q0, F[bidx]);
-        }
-        for (j = 4; j < 8; j++) {
-            setpx(idx, -1 - j, rnd() & mask);
-            setpx(idx, j, rnd() & mask);
-        }
-    }
-    for (i = 4; i < 6; i++) /* regular */ {
-        int idx = off + i * istride, p2, p1, p0, q0, q1, q2;
-        setpx(idx,  0, q0 = rnd() & mask);
-        setsx(idx,  1, q1 = q0, I[bidx]);
-        setsx(idx,  2, q2 = q1, I[bidx]);
-        setsx(idx,  3, q2,      I[bidx]);
-        setsx(idx, -1, p0 = q0, E[bidx] >> 2);
-        setsx(idx, -2, p1 = p0, I[bidx]);
-        setsx(idx, -3, p2 = p1, I[bidx]);
-        setsx(idx, -4, p2,      I[bidx]);
-        for (j = 4; j < 8; j++) {
-            setpx(idx, -1 - j, rnd() & mask);
-            setpx(idx, j, rnd() & mask);
-        }
-    }
-    for (i = 6; i < 8; i++) /* off */ {
-        int idx = off + i * istride;
-        for (j = 0; j < 8; j++) {
-            setpx(idx, -1 - j, rnd() & mask);
-            setpx(idx, j, rnd() & mask);
-        }
-    }
-}
-#define randomize_buffers(bidx, lineoff, str) \
-        randomize_loopfilter_buffers(bidx, lineoff, str, bit_depth, dir, \
-                                     E, F, H, I, buf0, buf1)
-
-static void check_loopfilter(void)
-{
-    LOCAL_ALIGNED_32(uint8_t, base0, [32 + 16 * 16 * 2]);
-    LOCAL_ALIGNED_32(uint8_t, base1, [32 + 16 * 16 * 2]);
-    VP9DSPContext dsp;
-    int dir, wd, wd2, bit_depth;
-    static const char *const dir_name[2] = { "h", "v" };
-    static const int E[2] = { 20, 28 }, I[2] = { 10, 16 };
-    static const int H[2] = { 7, 11 }, F[2] = { 1, 1 };
-    declare_func_emms(AV_CPU_FLAG_MMX | AV_CPU_FLAG_MMXEXT, void, uint8_t *dst, ptrdiff_t stride, int E, int I, int H);
-
-    for (bit_depth = 8; bit_depth <= 12; bit_depth += 2) {
-        ff_vp9dsp_init(&dsp, bit_depth, 0);
-
-        for (dir = 0; dir < 2; dir++) {
-            int midoff = (dir ? 8 * 8 : 8) * SIZEOF_PIXEL;
-            int midoff_aligned = (dir ? 8 * 8 : 16) * SIZEOF_PIXEL;
-            uint8_t *buf0 = base0 + midoff_aligned;
-            uint8_t *buf1 = base1 + midoff_aligned;
-
-            for (wd = 0; wd < 3; wd++) {
-                // 4/8/16wd_8px
-                if (check_func(dsp.loop_filter_8[wd][dir],
-                               "vp9_loop_filter_%s_%d_8_%dbpp",
-                               dir_name[dir], 4 << wd, bit_depth)) {
-                    randomize_buffers(0, 0, 8);
-                    memcpy(buf1 - midoff, buf0 - midoff,
-                           16 * 8 * SIZEOF_PIXEL);
-                    call_ref(buf0, 16 * SIZEOF_PIXEL >> dir, E[0], I[0], H[0]);
-                    call_new(buf1, 16 * SIZEOF_PIXEL >> dir, E[0], I[0], H[0]);
-                    if (memcmp(buf0 - midoff, buf1 - midoff, 16 * 8 * SIZEOF_PIXEL))
-                        fail();
-                    bench_new(buf1, 16 * SIZEOF_PIXEL >> dir, E[0], I[0], H[0]);
-                }
-            }
-
-            midoff = (dir ? 16 * 8 : 8) * SIZEOF_PIXEL;
-            midoff_aligned = (dir ? 16 * 8 : 16) * SIZEOF_PIXEL;
-
-            buf0 = base0 + midoff_aligned;
-            buf1 = base1 + midoff_aligned;
-
-            // 16wd_16px loopfilter
-            if (check_func(dsp.loop_filter_16[dir],
-                           "vp9_loop_filter_%s_16_16_%dbpp",
-                           dir_name[dir], bit_depth)) {
-                randomize_buffers(0, 0, 16);
-                randomize_buffers(0, 8, 16);
-                memcpy(buf1 - midoff, buf0 - midoff, 16 * 16 * SIZEOF_PIXEL);
-                call_ref(buf0, 16 * SIZEOF_PIXEL, E[0], I[0], H[0]);
-                call_new(buf1, 16 * SIZEOF_PIXEL, E[0], I[0], H[0]);
-                if (memcmp(buf0 - midoff, buf1 - midoff, 16 * 16 * SIZEOF_PIXEL))
-                    fail();
-                bench_new(buf1, 16 * SIZEOF_PIXEL, E[0], I[0], H[0]);
-            }
-
-            for (wd = 0; wd < 2; wd++) {
-                for (wd2 = 0; wd2 < 2; wd2++) {
-                    // mix2 loopfilter
-                    if (check_func(dsp.loop_filter_mix2[wd][wd2][dir],
-                                   "vp9_loop_filter_mix2_%s_%d%d_16_%dbpp",
-                                   dir_name[dir], 4 << wd, 4 << wd2, bit_depth)) {
-                        randomize_buffers(0, 0, 16);
-                        randomize_buffers(1, 8, 16);
-                        memcpy(buf1 - midoff, buf0 - midoff, 16 * 16 * SIZEOF_PIXEL);
-#define M(a) (((a)[1] << 8) | (a)[0])
-                        call_ref(buf0, 16 * SIZEOF_PIXEL, M(E), M(I), M(H));
-                        call_new(buf1, 16 * SIZEOF_PIXEL, M(E), M(I), M(H));
-                        if (memcmp(buf0 - midoff, buf1 - midoff, 16 * 16 * SIZEOF_PIXEL))
-                            fail();
-                        bench_new(buf1, 16 * SIZEOF_PIXEL, M(E), M(I), M(H));
-#undef M
-                    }
-                }
-            }
-        }
-    }
-    report("loopfilter");
-}
-
-#undef setsx
-#undef setpx
-#undef setdx
-#undef randomize_buffers
-
-#define DST_BUF_SIZE (size * size * SIZEOF_PIXEL)
-#define SRC_BUF_STRIDE 72
-#define SRC_BUF_SIZE ((size + 7) * SRC_BUF_STRIDE * SIZEOF_PIXEL)
-#define src (buf + 3 * SIZEOF_PIXEL * (SRC_BUF_STRIDE + 1))
-
-#define randomize_buffers()                               \
-    do {                                                  \
-        uint32_t mask = pixel_mask[(bit_depth - 8) >> 1]; \
-        int k;                                            \
-        for (k = 0; k < SRC_BUF_SIZE; k += 4) {           \
-            uint32_t r = rnd() & mask;                    \
-            AV_WN32A(buf + k, r);                         \
-        }                                                 \
-        if (op == 1) {                                    \
-            for (k = 0; k < DST_BUF_SIZE; k += 4) {       \
-                uint32_t r = rnd() & mask;                \
-                AV_WN32A(dst0 + k, r);                    \
-                AV_WN32A(dst1 + k, r);                    \
-            }                                             \
-        }                                                 \
-    } while (0)
-
-static void check_mc(void)
-{
-    LOCAL_ALIGNED_32(uint8_t, buf, [72 * 72 * 2]);
-    LOCAL_ALIGNED_32(uint8_t, dst0, [64 * 64 * 2]);
-    LOCAL_ALIGNED_32(uint8_t, dst1, [64 * 64 * 2]);
-    VP9DSPContext dsp;
-    int op, hsize, bit_depth, filter, dx, dy;
-    declare_func_emms(AV_CPU_FLAG_MMX | AV_CPU_FLAG_MMXEXT, void, uint8_t *dst, ptrdiff_t dst_stride,
-                      const uint8_t *ref, ptrdiff_t ref_stride,
-                 int h, int mx, int my);
-    static const char *const filter_names[4] = {
-        "8tap_smooth", "8tap_regular", "8tap_sharp", "bilin"
-    };
-    static const char *const subpel_names[2][2] = { { "", "h" }, { "v", "hv" } };
-    static const char *const op_names[2] = { "put", "avg" };
-    char str[256];
-
-    for (op = 0; op < 2; op++) {
-        for (bit_depth = 8; bit_depth <= 12; bit_depth += 2) {
-            ff_vp9dsp_init(&dsp, bit_depth, 0);
-            for (hsize = 0; hsize < 5; hsize++) {
-                int size = 64 >> hsize;
-
-                for (filter = 0; filter < 4; filter++) {
-                    for (dx = 0; dx < 2; dx++) {
-                        for (dy = 0; dy < 2; dy++) {
-                            if (dx || dy) {
-                                snprintf(str, sizeof(str),
-                                         "%s_%s_%d%s", op_names[op],
-                                         filter_names[filter], size,
-                                         subpel_names[dy][dx]);
-                            } else {
-                                snprintf(str, sizeof(str),
-                                         "%s%d", op_names[op], size);
-                            }
-                            if (check_func(dsp.mc[hsize][filter][op][dx][dy],
-                                           "vp9_%s_%dbpp", str, bit_depth)) {
-                                int mx = dx ? 1 + (rnd() % 14) : 0;
-                                int my = dy ? 1 + (rnd() % 14) : 0;
-                                randomize_buffers();
-                                call_ref(dst0, size * SIZEOF_PIXEL,
-                                         src, SRC_BUF_STRIDE * SIZEOF_PIXEL,
-                                         size, mx, my);
-                                call_new(dst1, size * SIZEOF_PIXEL,
-                                         src, SRC_BUF_STRIDE * SIZEOF_PIXEL,
-                                         size, mx, my);
-                                if (memcmp(dst0, dst1, DST_BUF_SIZE))
-                                    fail();
-
-                                // simd implementations for each filter of subpel
-                                // functions are identical
-                                if (filter >= 1 && filter <= 2) continue;
-                                // 10/12 bpp for bilin are identical
-                                if (bit_depth == 12 && filter == 3) continue;
-
-                                bench_new(dst1, size * SIZEOF_PIXEL,
-                                          src, SRC_BUF_STRIDE * SIZEOF_PIXEL,
-                                          size, mx, my);
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-    report("mc");
-}
-
-void checkasm_check_vp9dsp(void)
-{
-    check_ipred();
-    check_itxfm();
-    check_loopfilter();
-    check_mc();
-}
diff --git a/tests/checkasm/x86/checkasm.asm b/tests/checkasm/x86/checkasm.asm
deleted file mode 100644
index 683aae8..0000000
--- a/tests/checkasm/x86/checkasm.asm
+++ /dev/null
@@ -1,244 +0,0 @@
-;*****************************************************************************
-;* Assembly testing and benchmarking tool
-;* Copyright (c) 2008 Loren Merritt
-;* Copyright (c) 2012 Henrik Gramner
-;*
-;* 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 this program; if not, write to the Free Software
-;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02111, USA.
-;*****************************************************************************
-
-%define private_prefix checkasm
-%include "libavutil/x86/x86inc.asm"
-
-SECTION_RODATA
-
-error_message: db "failed to preserve register", 0
-error_message_emms: db "failed to issue emms", 0
-
-%if ARCH_X86_64
-; just random numbers to reduce the chance of incidental match
-ALIGN 16
-x6:  dq 0x1a1b2550a612b48c,0x79445c159ce79064
-x7:  dq 0x2eed899d5a28ddcd,0x86b2536fcd8cf636
-x8:  dq 0xb0856806085e7943,0x3f2bf84fc0fcca4e
-x9:  dq 0xacbd382dcf5b8de2,0xd229e1f5b281303f
-x10: dq 0x71aeaff20b095fd9,0xab63e2e11fa38ed9
-x11: dq 0x89b0c0765892729a,0x77d410d5c42c882d
-x12: dq 0xc45ea11a955d8dd5,0x24b3c1d2a024048b
-x13: dq 0x2e8ec680de14b47c,0xdd7b8919edd42786
-x14: dq 0x135ce6888fa02cbf,0x11e53e2b2ac655ef
-x15: dq 0x011ff554472a7a10,0x6de8f4c914c334d5
-n7:  dq 0x21f86d66c8ca00ce
-n8:  dq 0x75b6ba21077c48ad
-n9:  dq 0xed56bb2dcb3c7736
-n10: dq 0x8bda43d3fd1a7e06
-n11: dq 0xb64a9c9e5d318408
-n12: dq 0xdf9a54b303f1d3a3
-n13: dq 0x4a75479abd64e097
-n14: dq 0x249214109d5d1c88
-%endif
-
-SECTION .text
-
-cextern fail_func
-
-; max number of args used by any asm function.
-; (max_args % 4) must equal 3 for stack alignment
-%define max_args 15
-
-%if ARCH_X86_64
-
-;-----------------------------------------------------------------------------
-; int checkasm_stack_clobber(uint64_t clobber, ...)
-;-----------------------------------------------------------------------------
-cglobal stack_clobber, 1,2
-    ; Clobber the stack with junk below the stack pointer
-    %define argsize (max_args+6)*8
-    SUB  rsp, argsize
-    mov   r1, argsize-8
-.loop:
-    mov [rsp+r1], r0
-    sub   r1, 8
-    jge .loop
-    ADD  rsp, argsize
-    RET
-
-%if WIN64
-    %assign free_regs 7
-    DECLARE_REG_TMP 4
-%else
-    %assign free_regs 9
-    DECLARE_REG_TMP 7
-%endif
-
-%macro report_fail 1
-    mov  r9, rax
-    mov r10, rdx
-    lea  r0, [%1]
-    xor eax, eax
-    call fail_func
-    mov rdx, r10
-    mov rax, r9
-%endmacro
-
-;-----------------------------------------------------------------------------
-; void checkasm_checked_call(void *func, ...)
-;-----------------------------------------------------------------------------
-INIT_XMM
-%macro CHECKED_CALL 0-1
-cglobal checked_call%1, 2,15,16,max_args*8+8
-    mov  t0, r0
-
-    ; All arguments have been pushed on the stack instead of registers in order to
-    ; test for incorrect assumptions that 32-bit ints are zero-extended to 64-bit.
-    mov  r0, r6mp
-    mov  r1, r7mp
-    mov  r2, r8mp
-    mov  r3, r9mp
-%if UNIX64
-    mov  r4, r10mp
-    mov  r5, r11mp
-    %assign i 6
-    %rep max_args-6
-        mov  r9, [rsp+stack_offset+(i+1)*8]
-        mov  [rsp+(i-6)*8], r9
-        %assign i i+1
-    %endrep
-%else ; WIN64
-    %assign i 4
-    %rep max_args-4
-        mov  r9, [rsp+stack_offset+(i+7)*8]
-        mov  [rsp+i*8], r9
-        %assign i i+1
-    %endrep
-
-    ; Move possible floating-point arguments to the correct registers
-    movq m0, r0
-    movq m1, r1
-    movq m2, r2
-    movq m3, r3
-
-    %assign i 6
-    %rep 16-6
-        mova m %+ i, [x %+ i]
-        %assign i i+1
-    %endrep
-%endif
-
-%assign i 14
-%rep 15-free_regs
-    mov r %+ i, [n %+ i]
-    %assign i i-1
-%endrep
-    call t0
-%assign i 14
-%rep 15-free_regs
-    xor r %+ i, [n %+ i]
-    or  r14, r %+ i
-    %assign i i-1
-%endrep
-
-%if WIN64
-    %assign i 6
-    %rep 16-6
-        pxor m %+ i, [x %+ i]
-        por  m6, m %+ i
-        %assign i i+1
-    %endrep
-    packsswb m6, m6
-    movq r5, m6
-    or  r14, r5
-%endif
-
-    ; Call fail_func() with a descriptive message to mark it as a failure
-    ; if the called function didn't preserve all callee-saved registers.
-    ; Save the return value located in rdx:rax first to prevent clobbering.
-    jz .clobber_ok
-    report_fail error_message
-.clobber_ok:
-%ifidn %1, _emms
-    emms
-%elifnidn %1, _float
-    fstenv [rsp]
-    cmp  word [rsp + 8], 0xffff
-    je   .emms_ok
-    report_fail error_message_emms
-    emms
-.emms_ok:
-%endif
-    RET
-%endmacro
-
-%else
-
-; just random numbers to reduce the chance of incidental match
-%define n3 dword 0x6549315c
-%define n4 dword 0xe02f3e23
-%define n5 dword 0xb78d0d1d
-%define n6 dword 0x33627ba7
-
-%macro report_fail 1
-    mov  r3, eax
-    mov  r4, edx
-    lea  r0, [%1]
-    mov [esp], r0
-    call fail_func
-    mov  edx, r4
-    mov  eax, r3
-%endmacro
-
-%macro CHECKED_CALL 0-1
-;-----------------------------------------------------------------------------
-; void checkasm_checked_call(void *func, ...)
-;-----------------------------------------------------------------------------
-cglobal checked_call%1, 1,7
-    mov  r3, n3
-    mov  r4, n4
-    mov  r5, n5
-    mov  r6, n6
-%rep max_args
-    PUSH dword [esp+20+max_args*4]
-%endrep
-    call r0
-    xor  r3, n3
-    xor  r4, n4
-    xor  r5, n5
-    xor  r6, n6
-    or   r3, r4
-    or   r5, r6
-    or   r3, r5
-    jz .clobber_ok
-    report_fail error_message
-.clobber_ok:
-%ifidn %1, _emms
-    emms
-%elifnidn %1, _float
-    fstenv [esp]
-    cmp  word [esp + 8], 0xffff
-    je   .emms_ok
-    report_fail error_message_emms
-    emms
-.emms_ok:
-%endif
-    add  esp, max_args*4
-    REP_RET
-%endmacro
-
-%endif ; ARCH_X86_64
-
-CHECKED_CALL
-CHECKED_CALL _emms
-CHECKED_CALL _float
diff --git a/tests/tiny_ssim.c b/tests/tiny_ssim.c
deleted file mode 100644
index 08f8e92..0000000
--- a/tests/tiny_ssim.c
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * Copyright (c) 2003-2013 Loren Merritt
- *
- * This program 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.
- *
- * This program 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 this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110 USA
- */
-/*
- * tiny_ssim.c
- * Computes the Structural Similarity Metric between two rawYV12 video files.
- * original algorithm:
- * Z. Wang, A. C. Bovik, H. R. Sheikh and E. P. Simoncelli,
- *   "Image quality assessment: From error visibility to structural similarity,"
- *   IEEE Transactions on Image Processing, vol. 13, no. 4, pp. 600-612, Apr. 2004.
- *
- * To improve speed, this implementation uses the standard approximation of
- * overlapped 8x8 block sums, rather than the original gaussian weights.
- */
-
-#include "config.h"
-#include <inttypes.h>
-#include <limits.h>
-#include <math.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#define FFSWAP(type,a,b) do{type SWAP_tmp= b; b= a; a= SWAP_tmp;}while(0)
-#define FFMIN(a,b) ((a) > (b) ? (b) : (a))
-
-#define BIT_DEPTH 8
-#define PIXEL_MAX ((1 << BIT_DEPTH)-1)
-typedef uint8_t  pixel;
-
-/****************************************************************************
- * structural similarity metric
- ****************************************************************************/
-static void ssim_4x4x2_core( const pixel *pix1, intptr_t stride1,
-                             const pixel *pix2, intptr_t stride2,
-                             int sums[2][4] )
-{
-    int x,y,z;
-
-    for( z = 0; z < 2; z++ )
-    {
-        uint32_t s1 = 0, s2 = 0, ss = 0, s12 = 0;
-        for( y = 0; y < 4; y++ )
-            for( x = 0; x < 4; x++ )
-            {
-                int a = pix1[x+y*stride1];
-                int b = pix2[x+y*stride2];
-                s1  += a;
-                s2  += b;
-                ss  += a*a;
-                ss  += b*b;
-                s12 += a*b;
-            }
-        sums[z][0] = s1;
-        sums[z][1] = s2;
-        sums[z][2] = ss;
-        sums[z][3] = s12;
-        pix1 += 4;
-        pix2 += 4;
-    }
-}
-
-static float ssim_end1( int s1, int s2, int ss, int s12 )
-{
-/* Maximum value for 10-bit is: ss*64 = (2^10-1)^2*16*4*64 = 4286582784, which will overflow in some cases.
- * s1*s1, s2*s2, and s1*s2 also obtain this value for edge cases: ((2^10-1)*16*4)^2 = 4286582784.
- * Maximum value for 9-bit is: ss*64 = (2^9-1)^2*16*4*64 = 1069551616, which will not overflow. */
-#if BIT_DEPTH > 9
-    typedef float type;
-    static const float ssim_c1 = .01*.01*PIXEL_MAX*PIXEL_MAX*64;
-    static const float ssim_c2 = .03*.03*PIXEL_MAX*PIXEL_MAX*64*63;
-#else
-    typedef int type;
-    static const int ssim_c1 = (int)(.01*.01*PIXEL_MAX*PIXEL_MAX*64 + .5);
-    static const int ssim_c2 = (int)(.03*.03*PIXEL_MAX*PIXEL_MAX*64*63 + .5);
-#endif
-    type fs1 = s1;
-    type fs2 = s2;
-    type fss = ss;
-    type fs12 = s12;
-    type vars = fss*64 - fs1*fs1 - fs2*fs2;
-    type covar = fs12*64 - fs1*fs2;
-    return (float)(2*fs1*fs2 + ssim_c1) * (float)(2*covar + ssim_c2)
-         / ((float)(fs1*fs1 + fs2*fs2 + ssim_c1) * (float)(vars + ssim_c2));
-}
-
-static float ssim_end4( int sum0[5][4], int sum1[5][4], int width )
-{
-    float ssim = 0.0;
-    int i;
-
-    for( i = 0; i < width; i++ )
-        ssim += ssim_end1( sum0[i][0] + sum0[i+1][0] + sum1[i][0] + sum1[i+1][0],
-                           sum0[i][1] + sum0[i+1][1] + sum1[i][1] + sum1[i+1][1],
-                           sum0[i][2] + sum0[i+1][2] + sum1[i][2] + sum1[i+1][2],
-                           sum0[i][3] + sum0[i+1][3] + sum1[i][3] + sum1[i+1][3] );
-    return ssim;
-}
-
-float ssim_plane(
-                           pixel *pix1, intptr_t stride1,
-                           pixel *pix2, intptr_t stride2,
-                           int width, int height, void *buf, int *cnt )
-{
-    int z = 0;
-    int x, y;
-    float ssim = 0.0;
-    int (*sum0)[4] = buf;
-    int (*sum1)[4] = sum0 + (width >> 2) + 3;
-    width >>= 2;
-    height >>= 2;
-    for( y = 1; y < height; y++ )
-    {
-        for( ; z <= y; z++ )
-        {
-            FFSWAP( void*, sum0, sum1 );
-            for( x = 0; x < width; x+=2 )
-                ssim_4x4x2_core( &pix1[4*(x+z*stride1)], stride1, &pix2[4*(x+z*stride2)], stride2, &sum0[x] );
-        }
-        for( x = 0; x < width-1; x += 4 )
-            ssim += ssim_end4( sum0+x, sum1+x, FFMIN(4,width-x-1) );
-    }
-//     *cnt = (height-1) * (width-1);
-    return ssim / ((height-1) * (width-1));
-}
-
-
-uint64_t ssd_plane( const uint8_t *pix1, const uint8_t *pix2, int size )
-{
-    uint64_t ssd = 0;
-    int i;
-    for( i=0; i<size; i++ )
-    {
-        int d = pix1[i] - pix2[i];
-        ssd += d*d;
-    }
-    return ssd;
-}
-
-static double ssd_to_psnr( uint64_t ssd, uint64_t denom )
-{
-    return -10*log((double)ssd/(denom*255*255))/log(10);
-}
-
-static double ssim_db( double ssim, double weight )
-{
-    return 10*(log(weight)/log(10)-log(weight-ssim)/log(10));
-}
-
-static void print_results(uint64_t ssd[3], double ssim[3], int frames, int w, int h)
-{
-    printf( "PSNR Y:%.3f  U:%.3f  V:%.3f  All:%.3f | ",
-            ssd_to_psnr( ssd[0], (uint64_t)frames*w*h ),
-            ssd_to_psnr( ssd[1], (uint64_t)frames*w*h/4 ),
-            ssd_to_psnr( ssd[2], (uint64_t)frames*w*h/4 ),
-            ssd_to_psnr( ssd[0] + ssd[1] + ssd[2], (uint64_t)frames*w*h*3/2 ) );
-    printf( "SSIM Y:%.5f U:%.5f V:%.5f All:%.5f (%.5f)",
-            ssim[0] / frames,
-            ssim[1] / frames,
-            ssim[2] / frames,
-            (ssim[0]*4 + ssim[1] + ssim[2]) / (frames*6),
-            ssim_db(ssim[0] * 4 + ssim[1] + ssim[2], frames*6));
-}
-
-int main(int argc, char* argv[])
-{
-    FILE *f[2];
-    uint8_t *buf[2], *plane[2][3];
-    int *temp;
-    uint64_t ssd[3] = {0,0,0};
-    double ssim[3] = {0,0,0};
-    int frame_size, w, h;
-    int frames, seek;
-    int i;
-
-    if( argc<4 || 2 != sscanf(argv[3], "%dx%d", &w, &h) )
-    {
-        printf("tiny_ssim <file1.yuv> <file2.yuv> <width>x<height> [<seek>]\n");
-        return -1;
-    }
-
-    f[0] = fopen(argv[1], "rb");
-    f[1] = fopen(argv[2], "rb");
-    sscanf(argv[3], "%dx%d", &w, &h);
-
-    if (w<=0 || h<=0 || w*(int64_t)h >= INT_MAX/3 || 2LL*w+12 >= INT_MAX / sizeof(*temp)) {
-        fprintf(stderr, "Dimensions are too large, or invalid\n");
-        return -2;
-    }
-
-    frame_size = w*h*3LL/2;
-    for( i=0; i<2; i++ )
-    {
-        buf[i] = malloc(frame_size);
-        plane[i][0] = buf[i];
-        plane[i][1] = plane[i][0] + w*h;
-        plane[i][2] = plane[i][1] + w*h/4;
-    }
-    temp = malloc((2*w+12)*sizeof(*temp));
-    seek = argc<5 ? 0 : atoi(argv[4]);
-    fseek(f[seek<0], seek < 0 ? -seek : seek, SEEK_SET);
-
-    for( frames=0;; frames++ )
-    {
-        uint64_t ssd_one[3];
-        double ssim_one[3];
-        if( fread(buf[0], frame_size, 1, f[0]) != 1) break;
-        if( fread(buf[1], frame_size, 1, f[1]) != 1) break;
-        for( i=0; i<3; i++ )
-        {
-            ssd_one[i]  = ssd_plane ( plane[0][i], plane[1][i], w*h>>2*!!i );
-            ssim_one[i] = ssim_plane( plane[0][i], w>>!!i,
-                                     plane[1][i], w>>!!i,
-                                     w>>!!i, h>>!!i, temp, NULL );
-            ssd[i] += ssd_one[i];
-            ssim[i] += ssim_one[i];
-        }
-
-        printf("Frame %d | ", frames);
-        print_results(ssd_one, ssim_one, 1, w, h);
-        printf("                \r");
-        fflush(stdout);
-    }
-
-    if( !frames ) return 0;
-
-    printf("Total %d frames | ", frames);
-    print_results(ssd, ssim, frames, w, h);
-    printf("\n");
-
-    return 0;
-}
