[SCM] FFmpeg packaging branch, master, updated. 7e16ace7ebff2d85563fe4cc3e46bda6d83db3b6

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jan 11 22:06:09 UTC 2009


The following commit has been merged in the master branch:
commit 7e16ace7ebff2d85563fe4cc3e46bda6d83db3b6
Author: Reinhard Tartler <siretart at tauware.de>
Date:   Mon Nov 10 07:31:16 2008 +0100

    Imported Debian patch 0.svn20081108-1ubuntu1

diff --git a/Changelog b/Changelog
index d785492..12b8e5e 100644
--- a/Changelog
+++ b/Changelog
@@ -139,9 +139,6 @@ version <next>
 - ASS and SSA demuxer and muxer
 - liba52 wrapper removed
 - Speex decoding via libspeex
-- Electronic Arts TGQ decoder
-- RV30 and RV40 decoder
-- QCELP / PureVoice decoder
 
 version 0.4.9-pre1:
 
diff --git a/INSTALL b/INSTALL
index 8cd22bd..c4bd4b5 100644
--- a/INSTALL
+++ b/INSTALL
@@ -6,6 +6,7 @@ options is printed by running 'configure --help'.
 sources to build the objects out of tree. To do this, use an absolute
 path when launching 'configure', e.g. '/ffmpegdir/ffmpeg/configure'.
 
-2) Then type 'make' to build FFmpeg. GNU Make 3.81 or later is required.
+2) Then type 'make' to build FFmpeg. On BSD systems, type 'gmake'
+instead of 'make'. You may need to install GNU Make 3.81 first.
 
 3) Type 'make install' to install all binaries and libraries you built.
diff --git a/MAINTAINERS b/MAINTAINERS
index b0e9630..5e421d6 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -161,7 +161,6 @@ Codecs:
   nuv.c                                 Reimar Doeffinger
   pcx.c                                 Ivo van Poorten
   ptx.c                                 Ivo van Poorten
-  qcelp*                                Reynaldo H. Verdejo Pinochet
   qdm2.c, qdm2data.h                    Roberto Togni
   qdrw.c                                Kostya Shishkov
   qpeg.c                                Kostya Shishkov
@@ -289,9 +288,6 @@ Muxers/Demuxers:
   westwood.c                            Mike Melanson
   wv.c                                  Kostya Shishkov
 
-Protocols:
-  udp.c                                 Luca Abeni
-
 
 Operating systems / CPU architectures
 =====================================
@@ -299,6 +295,7 @@ Operating systems / CPU architectures
 Alpha                                   Mans Rullgard, Falk Hueffner
 ARM                                     Mans Rullgard
 BeOS                                    Francois Revol
+i386                                    Michael Niedermayer
 Mac OS X / PowerPC                      Romain Dolbeau, Guillaume Poirier
 Amiga / PowerPC                         Colin Ward
 Linux / PowerPC                         Luca Barbato
@@ -306,14 +303,3 @@ Windows MinGW                           Alex Beregszaszi, Ramiro Polla
 Windows Cygwin                          Victor Paesa
 ADI/Blackfin DSP                        Marc Hoffman
 Sparc                                   Roman Shaposhnik
-x86                                     Michael Niedermayer
-
-
-GnuPG Fingerprints of maintainers and others who have svn write access
-======================================================================
-
-Benoit Fouet                  B22A 4F4F 43EF 636B BB66 FCDC 0023 AE1E 2985 49C8
-Michael Niedermayer           9FF2 128B 147E F673 0BAD F133 611E C787 040B 0FAB
-Reimar Döffinger              C61D 16E5 9E2C D10C 8958 38A4 0899 A2B9 06D4 D9C7
-Reynaldo H. Verdejo Pinochet  6E27 CD34 170C C78E 4D4F 5F40 C18E 077F 3114 452A
-Sascha Sommer                 38A0 F88B 868E 9D3A 97D4 D6A0 E823 706F 1E07 0D3C
diff --git a/Makefile b/Makefile
index 00b275d..ad3daf0 100644
--- a/Makefile
+++ b/Makefile
@@ -299,14 +299,14 @@ $(CODEC_TESTS) $(LAVF_TESTS): regtest-ref
 regtest-ref: ffmpeg$(EXESUF) tests/vsynth1/00.pgm tests/vsynth2/00.pgm tests/asynth1.sw
 
 $(CODEC_TESTS) regtest-ref: tests/tiny_psnr$(EXESUF)
-	$(SRC_PATH)/tests/regression.sh $@ vsynth   tests/vsynth1 a "$(TARGET_EXEC)" "$(TARGET_PATH)"
-	$(SRC_PATH)/tests/regression.sh $@ rotozoom tests/vsynth2 a "$(TARGET_EXEC)" "$(TARGET_PATH)"
+	$(SRC_PATH)/tests/regression.sh $@ vsynth   tests/vsynth1 a
+	$(SRC_PATH)/tests/regression.sh $@ rotozoom tests/vsynth2 a
 
 $(LAVF_TESTS):
-	$(SRC_PATH)/tests/regression.sh $@ lavf tests/vsynth1 b "$(TARGET_EXEC)" "$(TARGET_PATH)"
+	$(SRC_PATH)/tests/regression.sh $@ lavf tests/vsynth1 b
 
 seektest: codectest libavtest tests/seek_test$(EXESUF)
-	$(SRC_PATH)/tests/seek_test.sh $(SEEK_REFFILE) "$(TARGET_EXEC)" "$(TARGET_PATH)"
+	$(SRC_PATH)/tests/seek_test.sh $(SEEK_REFFILE)
 
 servertest: ffserver$(EXESUF) tests/vsynth1/00.pgm tests/asynth1.sw
 	@echo
@@ -326,8 +326,8 @@ tests/vsynth2/00.pgm: tests/rotozoom$(EXESUF)
 tests/asynth1.sw: tests/audiogen$(EXESUF)
 	$(BUILD_ROOT)/$< $@
 
-tests/%$(EXESUF): tests/%.c
-	$(HOSTCC) $(HOSTCFLAGS) $(HOSTLDFLAGS) -o $@ $< $(HOSTLIBS)
+%$(EXESUF): %.c
+	$(CC) $(FF_LDFLAGS) $(CFLAGS) -o $@ $<
 
 tests/seek_test$(EXESUF): tests/seek_test.c $(FF_DEP_LIBS)
 	$(CC) $(FF_LDFLAGS) $(CFLAGS) -o $@ $< $(FF_EXTRALIBS)
diff --git a/README b/README
index 404c33b..6274ea2 100644
--- a/README
+++ b/README
@@ -17,7 +17,7 @@ FFmpeg README
   License, see the file COPYING.GPL for details. Their compilation and use
   in FFmpeg is optional.
 
-* The file libavcodec/x86/idct_mmx.c is distributed under the GNU General
+* The file libavcodec/i386/idct_mmx.c is distributed under the GNU General
   Public License. It is strictly an optimization and its use is optional.
 
 * The file libavcodec/ac3dec.c is distributed under the GNU General Public
diff --git a/cmdutils.c b/cmdutils.c
index 32ffefa..f52f56e 100644
--- a/cmdutils.c
+++ b/cmdutils.c
@@ -127,10 +127,10 @@ void parse_options(int argc, char **argv, const OptionDef *options,
         opt = argv[optindex++];
 
         if (handleoptions && opt[0] == '-' && opt[1] != '\0') {
-            if (opt[1] == '-' && opt[2] == '\0') {
-                handleoptions = 0;
-                continue;
-            }
+          if (opt[1] == '-' && opt[2] == '\0') {
+            handleoptions = 0;
+            continue;
+          }
             po= find_option(options, opt + 1);
             if (!po->name)
                 po= find_option(options, "default");
@@ -176,30 +176,25 @@ unknown_opt:
 
 int opt_default(const char *opt, const char *arg){
     int type;
-    int ret= 0;
     const AVOption *o= NULL;
     int opt_types[]={AV_OPT_FLAG_VIDEO_PARAM, AV_OPT_FLAG_AUDIO_PARAM, 0, AV_OPT_FLAG_SUBTITLE_PARAM, 0};
 
-    for(type=0; type<CODEC_TYPE_NB && ret>= 0; type++){
+    for(type=0; type<CODEC_TYPE_NB; type++){
         const AVOption *o2 = av_find_opt(avctx_opts[0], opt, NULL, opt_types[type], opt_types[type]);
         if(o2)
-            ret = av_set_string3(avctx_opts[type], opt, arg, 1, &o);
+            o = av_set_string2(avctx_opts[type], opt, arg, 1);
     }
     if(!o)
-        ret = av_set_string3(avformat_opts, opt, arg, 1, &o);
+        o = av_set_string2(avformat_opts, opt, arg, 1);
     if(!o)
-        ret = av_set_string3(sws_opts, opt, arg, 1, &o);
+        o = av_set_string2(sws_opts, opt, arg, 1);
     if(!o){
         if(opt[0] == 'a')
-            ret = av_set_string3(avctx_opts[CODEC_TYPE_AUDIO], opt+1, arg, 1, &o);
+            o = av_set_string2(avctx_opts[CODEC_TYPE_AUDIO], opt+1, arg, 1);
         else if(opt[0] == 'v')
-            ret = av_set_string3(avctx_opts[CODEC_TYPE_VIDEO], opt+1, arg, 1, &o);
+            o = av_set_string2(avctx_opts[CODEC_TYPE_VIDEO], opt+1, arg, 1);
         else if(opt[0] == 's')
-            ret = av_set_string3(avctx_opts[CODEC_TYPE_SUBTITLE], opt+1, arg, 1, &o);
-    }
-    if (o && ret < 0) {
-        fprintf(stderr, "Invalid value '%s' for option '%s'\n", arg, opt);
-        exit(1);
+            o = av_set_string2(avctx_opts[CODEC_TYPE_SUBTITLE], opt+1, arg, 1);
     }
     if(!o)
         return -1;
@@ -224,7 +219,7 @@ void set_context_opts(void *ctx, void *opts_ctx, int flags)
         const char *str= av_get_string(opts_ctx, opt_names[i], &opt, buf, sizeof(buf));
         /* if an option with name opt_names[i] is present in opts_ctx then str is non-NULL */
         if(str && ((opt->flags & flags) == flags))
-            av_set_string3(ctx, opt_names[i], str, 1, NULL);
+            av_set_string2(ctx, opt_names[i], str, 1);
     }
 }
 
@@ -292,7 +287,7 @@ static void print_all_lib_versions(FILE* outstream, int indent)
 
 void show_banner(void)
 {
-    fprintf(stderr, "%s version " FFMPEG_VERSION ", Copyright (c) %d-2009 Fabrice Bellard, et al.\n",
+    fprintf(stderr, "%s version " FFMPEG_VERSION ", Copyright (c) %d-2008 Fabrice Bellard, et al.\n",
             program_name, program_birth_year);
     fprintf(stderr, "  configuration: " FFMPEG_CONFIGURATION "\n");
     print_all_lib_versions(stderr, 1);
diff --git a/common.mak b/common.mak
index 8ac6ee0..d4c1f14 100644
--- a/common.mak
+++ b/common.mak
@@ -91,10 +91,10 @@ $(SUBDIR)%-test.o: $(SUBDIR)%.c
 $(SUBDIR)%-test.o: $(SUBDIR)%-test.c
 	$(CC) $(CFLAGS) -DTEST -c -o $$@ $$^
 
-$(SUBDIR)x86/%.o: $(SUBDIR)x86/%.asm
+$(SUBDIR)i386/%.o: $(SUBDIR)i386/%.asm
 	$(YASM) $(YASMFLAGS) -I $$(<D)/ -o $$@ $$<
 
-$(SUBDIR)x86/%.d: $(SUBDIR)x86/%.asm
+$(SUBDIR)i386/%.d: $(SUBDIR)i386/%.asm
 	$(YASM) $(YASMFLAGS) -I $$(<D)/ -M -o $$(@:%.d=%.o) $$< > $$@
 
 clean::
diff --git a/configure b/configure
index 56606aa..8f43a44 100755
--- a/configure
+++ b/configure
@@ -68,131 +68,111 @@ show_help(){
   echo "  --shlibdir=DIR           install shared libs in DIR [PREFIX/lib]"
   echo "  --incdir=DIR             install includes in DIR [PREFIX/include]"
   echo "  --mandir=DIR             install man page in DIR [PREFIX/share/man]"
-  echo "  --enable-static          build static libraries [yes]"
-  echo "  --disable-static         do not build static libraries [no]"
-  echo "  --enable-shared          build shared libraries [no]"
-  echo "  --disable-shared         do not build shared libraries [yes]"
-  echo "  --enable-gpl             allow use of GPL code, the resulting libs"
-  echo "                           and binaries will be under GPL [no]"
-  echo "  --enable-nonfree         allow use of nonfree code, the resulting libs"
-  echo "                           and binaries will be unredistributable [no]"
-  echo "  --enable-postproc        enable GPLed postprocessing support [no]"
-  echo "  --enable-swscale         enable GPLed software scaler support [no]"
-  echo "  --enable-avfilter        video filter support (replaces vhook) [no]"
-  echo "  --enable-avfilter-lavf   video filters dependent on avformat [no]"
-  echo "  --disable-vhook          disable video hooking support"
-  echo "  --enable-beosthreads     use BeOS threads [no]"
-  echo "  --enable-os2threads      use OS/2 threads [no]"
-  echo "  --enable-pthreads        use pthreads [no]"
-  echo "  --enable-vdpau           enable VDPAU support [no]"
-  echo "  --enable-w32threads      use Win32 threads [no]"
-  echo "  --enable-x11grab         enable X11 grabbing [no]"
-  echo "  --enable-xvmc            enable XvMC support [no]"
+  echo "  --enable-static          build static libraries [default=yes]"
+  echo "  --disable-static         do not build static libraries [default=no]"
+  echo "  --enable-shared          build shared libraries [default=no]"
+  echo "  --disable-shared         do not build shared libraries [default=yes]"
+  echo "  --enable-gpl             allow use of GPL code, the resulting libav*"
+  echo "                           and ffmpeg will be under GPL [default=no]"
+  echo "  --enable-nonfree         allow use of nonfree code, the resulting libav*"
+  echo "                           and ffmpeg will be unredistributable [default=no]"
+  echo "  --enable-postproc        enable GPLed postprocessing support [default=no]"
+  echo "  --enable-swscale         software scaler support [default=no]"
+  echo "  --enable-avfilter        video filter support (replaces vhook) [default=no]"
+  echo "  --enable-avfilter-lavf   video filters dependant on avformat [default=no]"
+  echo "  --enable-beosthreads     use BeOS threads [default=no]"
+  echo "  --enable-os2threads      use OS/2 threads [default=no]"
+  echo "  --enable-pthreads        use pthreads [default=no]"
+  echo "  --enable-w32threads      use Win32 threads [default=no]"
+  echo "  --enable-x11grab         enable X11 grabbing [default=no]"
   echo
   echo "External library support:"
-  echo "  --enable-mlib            enable Sun medialib [no]"
-  echo "  --enable-avisynth        enable reading of AVISynth script files [no]"
-  echo "  --enable-bzlib           enable bzlib [autodetect]"
-  echo "  --enable-libamr-nb       enable libamr-nb floating point audio codec [no]"
-  echo "  --enable-libamr-wb       enable libamr-wb floating point audio codec [no]"
+  echo "  --enable-mlib            use Sun medialib [default=no]"
+  echo "  --enable-avisynth        allow reading AVISynth script files [default=no]"
+  echo "  --enable-libamr-nb       enable libamr-nb floating point audio codec"
+  echo "  --enable-libamr-wb       enable libamr-wb floating point audio codec"
   echo "  --enable-libdc1394       enable IIDC-1394 grabbing using libdc1394"
-  echo "                           and libraw1394 [no]"
-  echo "  --enable-libdirac        enable Dirac support via libdirac [no]"
-  echo "  --enable-libfaac         enable FAAC support via libfaac [no]"
-  echo "  --enable-libfaad         enable FAAD support via libfaad [no]"
-  echo "  --enable-libfaadbin      open libfaad.so.0 at runtime [no]"
-  echo "  --enable-libgsm          enable GSM support via libgsm [no]"
-  echo "  --enable-libmp3lame      enable MP3 encoding via libmp3lame [no]"
+  echo "                           and libraw1394 [default=no]"
+  echo "  --enable-libdirac        enable Dirac support via libdirac [default=no]"
+  echo "  --enable-libfaac         enable FAAC support via libfaac [default=no]"
+  echo "  --enable-libfaad         enable FAAD support via libfaad [default=no]"
+  echo "  --enable-libfaadbin      open libfaad.so.0 at runtime [default=no]"
+  echo "  --enable-libgsm          enable GSM support via libgsm [default=no]"
+  echo "  --enable-libmp3lame      enable MP3 encoding via libmp3lame [default=no]"
   echo "  --enable-libnut          enable NUT (de)muxing via libnut,"
-  echo "                           native (de)muxer exists [no]"
-  echo "  --enable-libschroedinger enable Dirac support via libschroedinger [no]"
-  echo "  --enable-libspeex        enable Speex decoding via libspeex [no]"
-  echo "  --enable-libtheora       enable Theora encoding via libtheora [no]"
+  echo "                           native demuxer exists [default=no]"
+  echo "  --enable-libschroedinger enable Dirac support via libschroedinger [default=no]"
+  echo "  --enable-libspeex        enable Speex decoding via libspeex [default=no]"
+  echo "  --enable-libtheora       enable Theora encoding via libtheora [default=no]"
   echo "  --enable-libvorbis       enable Vorbis encoding via libvorbis,"
-  echo "                           native implementation exists [no]"
-  echo "  --enable-libx264         enable H.264 encoding via x264 [no]"
+  echo "                           native implementation exists [default=no]"
+  echo "  --enable-libx264         enable H.264 encoding via x264 [default=no]"
   echo "  --enable-libxvid         enable Xvid encoding via xvidcore,"
-  echo "                           native MPEG-4/Xvid encoder exists [no]"
-  echo "  --enable-zlib            enable zlib [autodetect]"
+  echo "                           native MPEG-4/Xvid encoder exists [default=no]"
   echo ""
   echo "Advanced options (experts only):"
   echo "  --source-path=PATH       path to source code [$source_path]"
   echo "  --cross-prefix=PREFIX    use PREFIX for compilation tools [$cross_prefix]"
   echo "  --enable-cross-compile   assume a cross-compiler is used"
   echo "  --target-os=OS           compiler targets OS [$target_os]"
-  echo "  --target-exec=CMD        command to run executables on target"
-  echo "  --target-path=DIR        path to view of build directory on target"
-  echo "  --nm=NM                  use nm tool"
   echo "  --cc=CC                  use C compiler CC [$cc]"
-  echo "  --host-cc=HOSTCC         use host C compiler HOSTCC"
-  echo "  --host-cflags=HCFLAGS    use HCFLAGS when compiling for host"
-  echo "  --host-ldflags=HLDFLAGS  use HLDFLAGS when linking for host"
-  echo "  --host-libs=HLIBS        use libs HLIBS when linking for host"
   echo "  --extra-cflags=ECFLAGS   add ECFLAGS to CFLAGS [$CFLAGS]"
   echo "  --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]"
   echo "  --extra-libs=ELIBS       add ELIBS [$ELIBS]"
   echo "  --extra-version=STRING   version string suffix []"
-  echo "  --build-suffix=SUFFIX    library name suffix []"
-  echo "  --arch=ARCH              select architecture [$arch]"
-  echo "  --cpu=CPU                select the minimum required CPU (affects"
+  echo "  --build-suffix=SUFFIX    suffix for application specific build []"
+  echo "  --arch=ARCH              select architecture  [$arch]"
+  echo "  --cpu=CPU                selects the minimum cpu required (affects"
   echo "                           instruction selection, may crash on older CPUs)"
   echo "  --enable-powerpc-perf    enable performance report on PPC"
   echo "                           (requires enabling PMC)"
-  echo "  --disable-altivec        disable AltiVec optimizations"
-  echo "  --disable-mmx            disable MMX optimizations"
-  echo "  --disable-mmx2           disable MMX2 optimizations"
-  echo "  --disable-sse            disable SSE optimizations"
-  echo "  --disable-ssse3          disable SSSE3 optimizations"
-  echo "  --disable-armv5te        disable armv5te optimizations"
-  echo "  --disable-armv6          disable armv6 optimizations"
-  echo "  --disable-armvfp         disable ARM VFP optimizations"
-  echo "  --disable-iwmmxt         disable iwmmxt optimizations"
-  echo "  --disable-mmi            disable MMI optimizations"
-  echo "  --disable-neon           disable neon optimizations"
-  echo "  --disable-vis            disable VIS optimizations"
-  echo "  --disable-network        disable network support [no]"
-  echo "  --disable-ipv6           disable IPv6 support [no]"
+  echo "  --disable-mmx            disable MMX usage"
+  echo "  --disable-mmx2           disable MMX2 usage"
+  echo "  --disable-ssse3          disable SSSE3 usage"
+  echo "  --disable-armv5te        disable armv5te usage"
+  echo "  --disable-armv6          disable armv6 usage"
+  echo "  --disable-armvfp         disable ARM VFP usage"
+  echo "  --disable-iwmmxt         disable iwmmxt usage"
+  echo "  --disable-altivec        disable AltiVec usage"
+  echo "  --disable-network        disable network support [default=no]"
+  echo "  --disable-ipv6           disable ipv6 support [default=no]"
+  echo "  --disable-zlib           disable zlib [default=no]"
+  echo "  --disable-bzlib          disable bzlib [default=no]"
+  echo "  --disable-vhook          disable video hooking support"
   echo "  --disable-mpegaudio-hp   faster (but less accurate)"
-  echo "                           MPEG audio decoding [no]"
-  echo "  --disable-aandct         disable AAN DCT code"
-  echo "  --disable-fft            disable FFT code"
-  echo "  --disable-golomb         disable Golomb code"
-  echo "  --disable-mdct           disable MDCT code"
+  echo "                           MPEG audio decoding [default=no]"
   echo "  --enable-gray            enable full grayscale support (slower color)"
   echo "  --disable-ffmpeg         disable ffmpeg build"
-  echo "  --disable-ffplay         disable ffplay build"
   echo "  --disable-ffserver       disable ffserver build"
+  echo "  --disable-ffplay         disable ffplay build"
   echo "  --enable-small           optimize for size instead of speed"
   echo "  --enable-hardcoded-tables use hardcoded tables instead of runtime generation"
   echo "  --enable-memalign-hack   emulate memalign, interferes with memory debuggers"
-  echo "  --enable-beos-netserver  enable BeOS netserver"
-  echo "  --disable-encoder=NAME   disable encoder NAME"
-  echo "  --enable-encoder=NAME    enable encoder NAME"
-  echo "  --disable-encoders       disable all encoders"
-  echo "  --disable-decoder=NAME   disable decoder NAME"
-  echo "  --enable-decoder=NAME    enable decoder NAME"
-  echo "  --disable-decoders       disable all decoders"
-  echo "  --disable-muxer=NAME     disable muxer NAME"
-  echo "  --enable-muxer=NAME      enable muxer NAME"
-  echo "  --disable-muxers         disable all muxers"
-  echo "  --disable-demuxer=NAME   disable demuxer NAME"
-  echo "  --enable-demuxer=NAME    enable demuxer NAME"
-  echo "  --disable-demuxers       disable all demuxers"
-  echo "  --enable-parser=NAME     enable parser NAME"
-  echo "  --disable-parser=NAME    disable parser NAME"
-  echo "  --disable-parsers        disable all parsers"
-  echo "  --enable-bsf=NAME        enable bitstream filter NAME"
-  echo "  --disable-bsf=NAME       disable bitstream filter NAME"
-  echo "  --disable-bsfs           disable all bitstream filters"
-  echo "  --enable-protocol=NAME   enable protocol NAME"
-  echo "  --disable-protocol=NAME  disable protocol NAME"
-  echo "  --disable-protocols      disable all protocols"
-  echo "  --disable-indevs         disable input devices"
-  echo "  --disable-outdevs        disable output devices"
-  echo "  --disable-devices        disable all devices"
-  echo "  --enable-filter=NAME     enable filter NAME"
-  echo "  --disable-filter=NAME    disable filter NAME"
-  echo "  --disable-filters        disable all filters"
+  echo "  --disable-encoder=NAME   disables encoder NAME"
+  echo "  --enable-encoder=NAME    enables encoder NAME"
+  echo "  --disable-decoder=NAME   disables decoder NAME"
+  echo "  --enable-decoder=NAME    enables decoder NAME"
+  echo "  --disable-encoders       disables all encoders"
+  echo "  --disable-decoders       disables all decoders"
+  echo "  --disable-muxer=NAME     disables muxer NAME"
+  echo "  --enable-muxer=NAME      enables muxer NAME"
+  echo "  --disable-muxers         disables all muxers"
+  echo "  --disable-demuxer=NAME   disables demuxer NAME"
+  echo "  --enable-demuxer=NAME    enables demuxer NAME"
+  echo "  --disable-demuxers       disables all demuxers"
+  echo "  --enable-parser=NAME     enables parser NAME"
+  echo "  --disable-parser=NAME    disables parser NAME"
+  echo "  --disable-parsers        disables all parsers"
+  echo "  --enable-bsf=NAME        enables bitstream filter NAME"
+  echo "  --disable-bsf=NAME       disables bitstream filter NAME"
+  echo "  --disable-bsfs           disables all bitstream filters"
+  echo "  --enable-protocol=NAME   enables protocol NAME"
+  echo "  --disable-protocol=NAME  disables protocol NAME"
+  echo "  --disable-protocols      disables all protocols"
+  echo "  --disable-devices        disables all devices"
+  echo "  --enable-filter=NAME     enables filter NAME"
+  echo "  --disable-filter=NAME    disables filter NAME"
+  echo "  --disable-filters        disables all filters"
   echo "  --list-decoders          show all available decoders"
   echo "  --list-encoders          show all available encoders"
   echo "  --list-muxers            show all available muxers"
@@ -373,7 +353,7 @@ disabled_any(){
 
 set_default(){
     for opt; do
-        eval : \${$opt:=\$${opt}_default}
+        eval test -z "\$$opt" && eval $opt=\$${opt}_default
     done
 }
 
@@ -514,7 +494,7 @@ check_asm(){
     asm="$2"
     shift 2
     check_cc "$@" <<EOF && enable $name || disable $name
-void foo(void){ __asm__ volatile($asm); }
+int foo(void){ __asm__ volatile($asm); }
 EOF
 }
 
@@ -734,7 +714,6 @@ COMPONENT_LIST="
 
 CONFIG_LIST="
     $COMPONENT_LIST
-    aandct
     avfilter
     avfilter_lavf
     avisynth
@@ -774,14 +753,10 @@ CONFIG_LIST="
     nonfree
     postproc
     powerpc_perf
-    shared
     small
-    static
     swscale
-    vdpau
     vhook
     x11grab
-    xvmc
     zlib
 "
 
@@ -794,13 +769,13 @@ THREADS_LIST='
 
 ARCH_LIST='
     alpha
-    arm
+    armv4l
     bfin
     ia64
     m68k
     mips
     parisc
-    ppc
+    powerpc
     s390
     sh4
     sparc
@@ -814,14 +789,12 @@ ARCH_EXT_LIST='
     altivec
     armv5te
     armv6
-    armv6t2
     armvfp
     iwmmxt
     mmi
     mmx
     mmx2
     neon
-    sse
     ssse3
     vis
 '
@@ -868,7 +841,6 @@ HAVE_LIST="
     memalign
     mkstemp
     pld
-    posix_memalign
     ppc64
     round
     roundf
@@ -891,7 +863,6 @@ HAVE_LIST="
 # options emitted with CONFIG_ prefix but not available on command line
 CONFIG_EXTRA="
     fft_mmx
-    oldscaler
 "
 
 CMDLINE_SELECT="
@@ -903,6 +874,8 @@ CMDLINE_SELECT="
     extra_warnings
     logging
     optimizations
+    shared
+    static
     stripping
 "
 
@@ -923,39 +896,29 @@ CMDLINE_SET="
     cpu
     cross_prefix
     extra_version
-    host_cc
-    host_cflags
-    host_ldflags
-    host_libs
     logfile
-    nm
     source_path
-    target_exec
     target_os
-    target_path
 "
 
 # code dependency declarations
 
 # architecture extensions
-altivec_deps="ppc"
-armv5te_deps="arm"
-armv6_deps="arm"
-armv6t2_deps="arm"
-armvfp_deps="arm"
-iwmmxt_deps="arm"
+altivec_deps="powerpc"
+armv5te_deps="armv4l"
+armv6_deps="armv4l"
+armvfp_deps="armv4l"
+iwmmxt_deps="armv4l"
 mmi_deps="mips"
 mmx_deps="x86"
 mmx2_deps="x86 mmx"
-neon_deps="arm"
-sse_deps="mmx"
-ssse3_deps="x86 sse"
+neon_deps="armv4l"
+ssse3_deps="x86"
 vis_deps="sparc"
 
 # common features
 fft_suggest="fft_mmx"
 fft_mmx_deps="mmx yasm"
-oldscaler_deps="!swscale"
 
 # decoders / encoders
 aac_decoder_select="fft mdct"
@@ -966,42 +929,25 @@ cavs_decoder_select="golomb"
 cook_decoder_select="fft mdct"
 cscd_decoder_suggest="zlib"
 dca_decoder_select="fft mdct"
-dnxhd_encoder_select="aandct"
 dxa_decoder_select="zlib"
 eac3_decoder_deps="gpl"
 eac3_decoder_select="fft mdct"
-eatgq_decoder_select="aandct"
 ffv1_decoder_select="golomb"
 flac_decoder_select="golomb"
 flac_encoder_select="golomb"
 flashsv_decoder_select="zlib"
 flashsv_encoder_select="zlib"
-flv_encoder_select="aandct"
-h261_encoder_select="aandct"
-h263_encoder_select="aandct"
-h263p_encoder_select="aandct"
 h264_decoder_select="golomb"
-h264_vdpau_decoder_deps="vdpau"
 imc_decoder_select="fft mdct"
 jpegls_decoder_select="golomb"
 jpegls_encoder_select="golomb"
-ljpeg_encoder_select="aandct"
 loco_decoder_select="golomb"
-mjpeg_encoder_select="aandct"
-mpeg1video_encoder_select="aandct"
-mpeg2video_encoder_select="aandct"
-mpeg4_encoder_select="aandct"
-mpeg_xvmc_decoder_deps="xvmc X11_extensions_XvMClib_h"
-msmpeg4v1_encoder_select="aandct"
-msmpeg4v2_encoder_select="aandct"
-msmpeg4v3_encoder_select="aandct"
+mpeg_xvmc_decoder_deps="xvmc"
 nellymoser_decoder_select="fft mdct"
 nellymoser_encoder_select="fft mdct"
 png_decoder_select="zlib"
 png_encoder_select="zlib"
 qdm2_decoder_select="fft mdct"
-rv10_encoder_select="aandct"
-rv20_encoder_select="aandct"
 shorten_decoder_select="golomb"
 sonic_decoder_select="golomb"
 sonic_encoder_select="golomb"
@@ -1017,8 +963,6 @@ wmav1_decoder_select="fft mdct"
 wmav1_encoder_select="fft mdct"
 wmav2_decoder_select="fft mdct"
 wmav2_encoder_select="fft mdct"
-wmv1_encoder_select="aandct"
-wmv2_encoder_select="aandct"
 zlib_decoder_select="zlib"
 zlib_encoder_select="zlib"
 zmbv_decoder_select="zlib"
@@ -1047,7 +991,6 @@ libvorbis_encoder_deps="libvorbis"
 libx264_encoder_deps="libx264"
 libxvid_encoder_deps="libxvid"
 mpeg4aac_decoder_deps="libfaad"
-vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
 
 # demuxers / muxers
 ac3_demuxer_deps="ac3_parser"
@@ -1107,15 +1050,15 @@ mandir_default='${prefix}/share/man'
 shlibdir_default="$libdir_default"
 
 # toolchain
-ar="ar"
 cc_default="gcc"
-host_cc_default="gcc"
-ln_s="ln -sf"
-nm_default="nm"
-objformat="elf"
+yasmexe="yasm"
+ar="ar"
+nm="nm"
 ranlib="ranlib"
 strip="strip"
-yasmexe="yasm"
+asmalign_pot="unknown"
+ln_s="ln -sf"
+objformat="elf"
 
 # machine
 arch=`uname -m`
@@ -1132,7 +1075,6 @@ enable ffserver
 enable ipv6
 enable mpegaudio_hp
 enable network
-enable oldscaler
 enable optimizations
 enable protocols
 enable static
@@ -1155,11 +1097,6 @@ SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
 SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
 LIB_INSTALL_EXTRA_CMD='$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
 
-host_cflags='-O3 -g -Wall'
-host_libs='-lm'
-
-target_path='.'
-
 # gcc stupidly only outputs the basename of targets with -MM, but we need the
 # full relative path for objects in subdirectories for non-recursive Make.
 DEPEND_CMD='$(CC) $(CFLAGS) -MM -MG $< | sed -e "/^\#.*/d" -e "s,^[[:space:]]*$(*F)\\.o,$(@D)/$(*F).o," -e "s,\\([[:space:]]\\)\\(version\\.h\\),\\1\$$(BUILD_ROOT_REL)/\\2,"'
@@ -1274,29 +1211,30 @@ disabled logging && logfile=/dev/null
 echo "# $0 $@" > $logfile
 set >> $logfile
 
-test -n "$cross_prefix" && enable cross_compile
-
-ar="${cross_prefix}${ar}"
 cc_default="${cross_prefix}${cc_default}"
-nm_default="${cross_prefix}${nm_default}"
+yasmexe="${cross_prefix}${yasmexe}"
+ar="${cross_prefix}${ar}"
+nm="${cross_prefix}${nm}"
 ranlib="${cross_prefix}${ranlib}"
 strip="${cross_prefix}${strip}"
 
-set_default cc nm
-enabled cross_compile || host_cc_default=$cc
-set_default host_cc
+set_default cc
 
 # set temporary file name
-: ${TMPDIR:=$TEMPDIR}
-: ${TMPDIR:=$TMP}
-: ${TMPDIR:=/tmp}
+if test ! -z "$TMPDIR" ; then
+    TMPDIR1="${TMPDIR}"
+elif test ! -z "$TEMPDIR" ; then
+    TMPDIR1="${TEMPDIR}"
+else
+    TMPDIR1="/tmp"
+fi
 
-TMPC="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
-TMPE="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
-TMPH="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
-TMPO="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
-TMPS="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
-TMPSH="${TMPDIR}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
+TMPC="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c"
+TMPE="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}${EXESUF}"
+TMPH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.h"
+TMPO="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o"
+TMPS="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S"
+TMPSH="${TMPDIR1}/ffmpeg-conf-${RANDOM}-$$-${RANDOM}.sh"
 
 check_cflags -std=c99
 
@@ -1314,29 +1252,26 @@ case "$arch" in
         int test[sizeof(char*) - 7];
 EOF
     ;;
+    # armv4l is a subset of armv[567]*l
     arm|armv[4567]*l)
-        arch="arm"
+        arch="armv4l"
     ;;
     alpha)
         arch="alpha"
         enable fast_64bit
     ;;
     "Power Macintosh"|ppc|powerpc)
-        arch="ppc"
+        arch="powerpc"
         enable fast_unaligned
     ;;
     ppc64)
-        arch="ppc"
+        arch="powerpc"
         enable fast_64bit
         enable fast_unaligned
     ;;
     mips|mipsel|IP*)
         arch="mips"
     ;;
-    mips64)
-        arch="mips"
-        enable fast_64bit
-    ;;
     sun4u|sparc64)
         arch="sparc64"
         enable fast_64bit
@@ -1344,13 +1279,13 @@ EOF
     sparc)
         arch="sparc"
     ;;
-    sh4|sh)
+    sh4)
         arch="sh4"
     ;;
-    parisc|hppa)
+    parisc)
         arch="parisc"
     ;;
-    parisc64|hppa64)
+    parisc64)
         arch="parisc"
         enable fast_64bit
     ;;
@@ -1408,7 +1343,6 @@ case $target_os in
         FFSERVERLDFLAGS=""
         SHFLAGS='-shared -Wl,-h,$$(@F)'
         network_extralibs="-lsocket -lnsl"
-        add_cflags -D__EXTENSIONS__
         ;;
     netbsd)
         oss_demuxer_extralibs="-lossaudio"
@@ -1418,6 +1352,9 @@ case $target_os in
         disable need_memalign
         LIBOBJFLAGS='$(PIC)'
         SHFLAGS='-shared'
+        SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF).$(LIBVERSION)'
+        SLIBNAME_WITH_VERSION='$(SLIBNAME)'
+        SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
         oss_demuxer_extralibs="-lossaudio"
         oss_muxer_extralibs="-lossaudio"
         ;;
@@ -1468,11 +1405,6 @@ case $target_os in
         SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.def) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base'
         objformat="win32"
         enable dos_paths
-        check_cpp_condition _mingw.h "(__MINGW32_MAJOR_VERSION > 3) || (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" ||
-            die "ERROR: MinGW runtime version must be >= 3.15."
-        enabled_any avisynth vfwcap_demuxer &&
-            { check_cpp_condition w32api.h "(__W32API_MAJOR_VERSION > 3) || (__W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION >= 13)" ||
-              die "ERROR: avisynth and vfwcap_demuxer require w32api version 3.13 or later."; }
         ;;
     cygwin*)
         target_os=cygwin
@@ -1548,6 +1480,8 @@ add_extralibs $osextralibs
 # Combine FFLDFLAGS and the LDFLAGS environment variable.
 LDFLAGS="$FFLDFLAGS $LDFLAGS"
 
+test -n "$cross_prefix" && enable cross_compile
+
 # we need to build at least one lib type
 if ! enabled_any static shared; then
     cat <<EOF
@@ -1696,8 +1630,9 @@ EOF
 chmod +x $TMPSH >> $logfile 2>&1
 if ! $TMPSH >> $logfile 2>&1; then
     cat <<EOF
-Unable to create and execute files in $TMPDIR.  Set the TMPDIR environment
-variable to another directory and make sure that it is not mounted noexec.
+Unable to create and execute files in $TMPDIR1.  Set the TMPDIR environment
+variable to another directory and make sure that $TMPDIR1 is not mounted
+noexec.
 EOF
     die "Sanity test failed."
 fi
@@ -1759,7 +1694,7 @@ fi
 
 # check for assembler specific support
 
-if test $arch = "ppc"; then
+if test $arch = "powerpc"; then
     check_asm dcbzl '"dcbzl 0, 1"'
 fi
 
@@ -1789,10 +1724,9 @@ EOF
 fi
 
 # We have to check if pld is a nop and disable it.
-enabled arm     && check_asm pld     '"pld [r0]"'
+enabled armv4l  && check_asm pld     '"pld [r0]"'
 enabled armv5te && check_asm armv5te '"qadd r0, r0, r0"'
 enabled armv6   && check_asm armv6   '"sadd16 r0, r0, r0"'
-enabled armv6t2 && check_asm armv6t2 '"movt r0, #0"'
 enabled armvfp  && check_asm armvfp  '"fadds s0, s0, s0"'
 enabled iwmmxt  && check_asm iwmmxt  '"wunpckelub wr6, wr4"'
 enabled mmi     && check_asm mmi     '"lq $2, 0($2)"'
@@ -1823,7 +1757,6 @@ check_func  getrusage
 check_func  inet_aton $network_extralibs
 check_func  memalign
 check_func  mkstemp
-check_func  posix_memalign
 check_func_headers windows.h GetProcessTimes
 
 check_header conio.h
@@ -1834,16 +1767,13 @@ check_header sys/mman.h
 check_header sys/resource.h
 check_header sys/select.h
 check_header termios.h
-check_header vdpau/vdpau.h
-check_header vdpau/vdpau_x11.h
-check_header X11/extensions/XvMClib.h
 
-if ! enabled_any memalign memalign_hack posix_memalign && enabled need_memalign ; then
-    die "Error, no aligned memory allocator but SSE enabled, disable it or use --enable-memalign-hack."
+if ! enabled_any memalign memalign_hack && enabled need_memalign ; then
+    die "Error, no memalign() but SSE enabled, disable it or use --enable-memalign-hack."
 fi
 
-disabled  zlib || check_lib   zlib.h      zlibVersion -lz   || disable  zlib
-disabled bzlib || check_lib2 bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
+disabled  zlib || check_lib  zlib.h      zlibVersion -lz   || disable  zlib
+disabled bzlib || check_lib bzlib.h BZ2_bzlibVersion -lbz2 || disable bzlib
 
 # check for some common methods of building with pthread support
 # do this before the optional library checks as some of them require pthreads
@@ -1891,17 +1821,17 @@ enabled libdirac   && add_cflags $(pkg-config --cflags dirac) &&
 enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
 enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
 enabled libgsm     && require  libgsm gsm.h gsm_create -lgsm
-enabled libmp3lame && require  libmp3lame lame/lame.h lame_init -lmp3lame -lm
+enabled libmp3lame && require  LAME lame/lame.h lame_init -lmp3lame -lm
 enabled libnut     && require  libnut libnut.h nut_demuxer_init -lnut
 enabled libschroedinger && add_cflags $(pkg-config --cflags schroedinger-1.0) &&
                            require libschroedinger schroedinger/schro.h schro_init $(pkg-config --libs schroedinger-1.0)
 enabled libspeex   && require  libspeex speex/speex.h speex_decoder_init -lspeex
 enabled libtheora  && require  libtheora theora/theora.h theora_info_init -ltheora -logg
 enabled libvorbis  && require  libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg
-enabled libx264    && require  libx264 x264.h x264_encoder_open -lx264 -lm &&
+enabled libx264    && require  x264 x264.h x264_encoder_open -lx264 -lm &&
                       { check_cpp_condition x264.h "X264_BUILD >= 65" ||
                         die "ERROR: libx264 version must be >= 0.65."; }
-enabled libxvid    && require  libxvid xvid.h xvid_global -lxvidcore
+enabled libxvid    && require  Xvid xvid.h xvid_global -lxvidcore
 enabled mlib       && require  mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
 
 # libdc1394 check
@@ -1974,7 +1904,7 @@ texi2html -version > /dev/null 2>&1 && enable texi2html || disable texi2html
 # Network check
 
 if enabled network; then
-    check_type "sys/types.h sys/socket.h" socklen_t
+    check_type sys/socket.h socklen_t
     # Prefer arpa/inet.h over winsock2
     if check_header arpa/inet.h ; then
         check_func closesocket
@@ -2096,7 +2026,10 @@ fi
 VHOOKCFLAGS="-fPIC"
 
 # Find out if the .align argument is a power of two or not.
-check_asm asmalign_pot '".align 3"'
+if test $asmalign_pot = "unknown"; then
+    disable asmalign_pot
+    echo '__asm__ (".align 3");' | check_cc && enable asmalign_pot
+fi
 
 enabled_any $DECODER_LIST      && enable decoders
 enabled_any $ENCODER_LIST      && enable encoders
@@ -2124,6 +2057,11 @@ check_deps $CONFIG_LIST       \
            $OUTDEV_LIST       \
            $PROTOCOL_LIST     \
 
+enabled libdc1394 && append pkg_requires "libraw1394"
+enabled libdirac  && append pkg_requires "dirac"
+enabled libtheora && append pkg_requires "theora"
+enabled libvorbis && append pkg_requires "vorbisenc"
+
 echo "install prefix            $prefix"
 echo "source path               $source_path"
 echo "C compiler                $cc"
@@ -2139,16 +2077,14 @@ echo "big-endian                ${bigendian-no}"
 if test $arch = "x86_32" -o $arch = "x86_64"; then
     echo "yasm                      ${yasm-no}"
     echo "MMX enabled               ${mmx-no}"
-    echo "SSE enabled               ${sse-no}"
     echo "CMOV enabled              ${cmov-no}"
     echo "CMOV is fast              ${fast_cmov-no}"
     echo "EBX available             ${ebx_available-no}"
     echo "EBP available             ${ebp_available-no}"
 fi
-if test $arch = "arm"; then
+if test $arch = "armv4l"; then
     echo "ARMv5TE enabled           ${armv5te-no}"
     echo "ARMv6 enabled             ${armv6-no}"
-    echo "ARMv6T2 enabled           ${armv6t2-no}"
     echo "ARM VFP enabled           ${armvfp-no}"
     echo "IWMMXT enabled            ${iwmmxt-no}"
     echo "NEON enabled              ${neon-no}"
@@ -2156,7 +2092,7 @@ fi
 if test $arch = "mips"; then
     echo "MMI enabled               ${mmi-no}"
 fi
-if test $arch = "ppc"; then
+if test $arch = "powerpc"; then
     echo "AltiVec enabled           ${altivec-no}"
     echo "dcbzl available           ${dcbzl-no}"
 fi
@@ -2202,7 +2138,6 @@ echo "libtheora enabled         ${libtheora-no}"
 echo "libvorbis enabled         ${libvorbis-no}"
 echo "libx264 enabled           ${libx264-no}"
 echo "libxvid enabled           ${libxvid-no}"
-echo "vdpau enabled             ${vdpau-no}"
 echo "zlib enabled              ${zlib-no}"
 echo "bzlib enabled             ${bzlib-no}"
 echo
@@ -2269,12 +2204,6 @@ echo "SLIBSUF=$SLIBSUF" >> config.mak
 echo "EXESUF=$EXESUF" >> config.mak
 echo "EXTRA_VERSION=$extra_version" >> config.mak
 echo "DEPEND_CMD=$DEPEND_CMD" >> config.mak
-echo "HOSTCC=$host_cc" >> config.mak
-echo "HOSTCFLAGS=$host_cflags" >> config.mak
-echo "HOSTLDFLAGS=$host_ldflags" >> config.mak
-echo "HOSTLIBS=$host_libs" >> config.mak
-echo "TARGET_EXEC=$target_exec" >> config.mak
-echo "TARGET_PATH=$target_path" >> config.mak
 
 if enabled bigendian; then
     echo "WORDS_BIGENDIAN=yes" >> config.mak
@@ -2369,13 +2298,13 @@ if enabled source_path_used; then
         doc               \
         libavcodec        \
         libavcodec/alpha  \
-        libavcodec/arm    \
+        libavcodec/armv4l \
         libavcodec/bfin   \
+        libavcodec/i386   \
         libavcodec/mlib   \
         libavcodec/ppc    \
         libavcodec/sh4    \
         libavcodec/sparc  \
-        libavcodec/x86    \
         libavdevice       \
         libavfilter       \
         libavformat       \
@@ -2412,7 +2341,7 @@ fi
 
 pkgconfig_generate(){
 name=$1
-shortname=${name#lib}${build_suffix}
+shortname=${name#lib}
 comment=$2
 version=$3
 libs=$4
@@ -2450,16 +2379,16 @@ EOF
 }
 
 pkgconfig_generate libavutil "FFmpeg utility library" "$LIBAVUTIL_VERSION"
-pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
-pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "libavcodec = $LIBAVCODEC_VERSION"
-pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "libavformat = $LIBAVFORMAT_VERSION"
+pkgconfig_generate libavcodec "FFmpeg codec library" "$LIBAVCODEC_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
+pkgconfig_generate libavformat "FFmpeg container format library" "$LIBAVFORMAT_VERSION" "$extralibs" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
+pkgconfig_generate libavdevice "FFmpeg device handling library" "$LIBAVDEVICE_VERSION" "$extralibs" "$pkg_requires libavformat = $LIBAVFORMAT_VERSION"
 enabled avfilter &&
-    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "libavutil = $LIBAVUTIL_VERSION"
+    pkgconfig_generate libavfilter "FFmpeg video filtering library" "$LIBAVFILTER_VERSION" "$extralibs" "$pkg_requires libavutil = $LIBAVUTIL_VERSION"
 enabled postproc &&
     pkgconfig_generate libpostproc "FFmpeg post processing library" "$LIBPOSTPROC_VERSION"
 if enabled swscale; then
     pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavutil = $LIBAVUTIL_VERSION"
 else
-    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "libavcodec = $LIBAVCODEC_VERSION"
+    pkgconfig_generate libswscale "FFmpeg image rescaling library" "$LIBSWSCALE_VERSION" "" "$pkg_requires libavcodec = $LIBAVCODEC_VERSION"
     apply libswscale/libswscale.pc sed s/^Libs:.*$/Libs:/
 fi
diff --git a/debian/.bzr-builddeb/default.conf b/debian/.bzr-builddeb/default.conf
deleted file mode 100644
index 3165e05..0000000
--- a/debian/.bzr-builddeb/default.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-[BUILDDEB]
-merge = True
diff --git a/debian/changelog b/debian/changelog
index 155e8b1..e050a60 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,27 +1,13 @@
-ffmpeg-debian (3:0.svn20090110-1) experimental; urgency=low
+ffmpeg-debian (3:0.svn20081108-1ubuntu1) jaunty; urgency=low
 
-  * new upstream svn snapshot (svn revision 16508, libswscale revision 28286)
-  
-  Upstream Changes:
-   - RV30 and RV40 decoder
-   - QCELP / PureVoice decoder
-  
-  * removed patch 050_fix_pkgconfig_files.patch. Merged upstream
-  * disabled patch 020_visibility_patch. It needs to be adapted to the new
-    upstream changes. Hopefully it will get merged into ffmpeg properly.
-  * install formats.txt in the libavcodec52 package to document what
-    formats this version of ffmpeg has enabled.
-
- -- Reinhard Tartler <siretart at tauware.de>  Sun, 11 Jan 2009 20:55:48 +0100
-
-ffmpeg-debian (3:0.svn20081115-1) experimental; urgency=low
-
-  * new upstream svn snapshot (svn revision 15824, libswscale revision 27910)
-  * bump standards version to version 3.8.0, no changes needed
-  * Adjust pkg-files to no longer put unnecessary dependencies in the generated
-    .pc files. Closes: #504220
+  * merge from debian.
+  * keep myself in the maintainer field. If you are touching this or the
+    'ffmpeg' package in multiverse, please get in touch with me. Both
+    source packages come from the same packaging branch.
+  * drop dependency on faad.
+  * import patches from old packaging to dlopen libfaad at runtime.
 
- -- Reinhard Tartler <siretart at tauware.de>  Mon, 10 Nov 2008 21:37:16 +0100
+ -- Reinhard Tartler <siretart at tauware.de>  Mon, 10 Nov 2008 07:31:16 +0100
 
 ffmpeg-debian (3:0.svn20081108-1) experimental; urgency=low
 
diff --git a/debian/confflags b/debian/confflags
index e7b5974..6a6ee4a 100644
--- a/debian/confflags
+++ b/debian/confflags
@@ -31,7 +31,7 @@ gpl_confflags += --enable-x11grab
 # Common configuration flags; comment out following line for LGPL versions of
 # the libraries
 confflags += $(gpl_confflags)
-confflags += --extra-version='svn15824+$(DEB_VERSION)'
+confflags += --extra-version='svn15761+$(DEB_VERSION)'
 confflags += --prefix=/usr
 confflags += --enable-avfilter
 confflags += --enable-avfilter-lavf
diff --git a/debian/control b/debian/control
index b9066b1..1c7fe9f 100644
--- a/debian/control
+++ b/debian/control
@@ -6,14 +6,13 @@ Uploaders: Sam Hocevar (Debian packages) <sam+deb at zoy.org>,
            Loic Minier <lool at dooz.org>,
            Reinhard Tartler <siretart at tauware.de>,
            Fabian Greffrath <fabian at debian-unofficial.org>
-Standards-Version: 3.8.0
-Vcs-Svn: svn://svn.debian.org/pkg-multimedia/unstable/ffmpeg-debian/
-Vcs-Browser: http://svn.debian.org/wsvn/pkg-multimedia/unstable/ffmpeg-debian/
+Standards-Version: 3.7.3
+Vcs-Svn: https://code.launchpad.net/~siretart/ffmpeg/ffmpeg.jaunty
+Vcs-Browser: https://code.launchpad.net/~siretart/ffmpeg/ffmpeg.jaunty
 Homepage: http://ffmpeg.mplayerhq.hu/
-Build-Depends-Indep: doxygen
 Build-Depends: debhelper (>= 5.0.0),
+               doxygen,
                libdc1394-22-dev [!kfreebsd-i386 !kfreebsd-amd64 !hurd-i386],
-               libfaad-dev | libfaad2-dev,
                libfreetype6-dev,
                libgsm1-dev,
                libimlib2-dev,
diff --git a/debian/control.common b/debian/control.common
index 97d5766..680daa8 100644
--- a/debian/control.common
+++ b/debian/control.common
@@ -5,8 +5,7 @@ Uploaders: Sam Hocevar (Debian packages) <sam+deb at zoy.org>,
            Loic Minier <lool at dooz.org>,
            Reinhard Tartler <siretart at tauware.de>,
            Fabian Greffrath <fabian at debian-unofficial.org>
-Standards-Version: 3.8.0
-Vcs-Svn: svn://svn.debian.org/pkg-multimedia/unstable/ffmpeg-debian/
-Vcs-Browser: http://svn.debian.org/wsvn/pkg-multimedia/unstable/ffmpeg-debian/
+Standards-Version: 3.7.3
+Vcs-Svn: https://code.launchpad.net/~siretart/ffmpeg/ffmpeg.jaunty
+Vcs-Browser: https://code.launchpad.net/~siretart/ffmpeg/ffmpeg.jaunty
 Homepage: http://ffmpeg.mplayerhq.hu/
-Build-Depends-Indep: doxygen
diff --git a/debian/control.ffmpeg b/debian/control.ffmpeg
index fb9394c..bcaaa3d 100644
--- a/debian/control.ffmpeg
+++ b/debian/control.ffmpeg
@@ -1,4 +1,5 @@
 Build-Depends: debhelper (>= 5.0.0),
+               doxygen,
                libdc1394-22-dev [!kfreebsd-i386 !kfreebsd-amd64 !hurd-i386],
                libfaad-dev | libfaad2-dev,
                libfreetype6-dev,
diff --git a/debian/control.ffmpeg-debian b/debian/control.ffmpeg-debian
index 1a030c5..1cc4f17 100644
--- a/debian/control.ffmpeg-debian
+++ b/debian/control.ffmpeg-debian
@@ -1,6 +1,6 @@
 Build-Depends: debhelper (>= 5.0.0),
+               doxygen,
                libdc1394-22-dev [!kfreebsd-i386 !kfreebsd-amd64 !hurd-i386],
-               libfaad-dev | libfaad2-dev,
                libfreetype6-dev,
                libgsm1-dev,
                libimlib2-dev,
diff --git a/debian/patches/020_visibility_patch b/debian/patches/020_visibility_patch
index 984c8cf..baed946 100644
--- a/debian/patches/020_visibility_patch
+++ b/debian/patches/020_visibility_patch
@@ -339,7 +339,7 @@ It is not yet applied to ffmpeg, but it is expected that this happens soon.
  
  /* pngdec.c */
  void ff_add_png_paeth_prediction(uint8_t *dst, uint8_t *src, uint8_t *top, int w, int bpp);
-@@ -85,7 +85,7 @@ const uint8_t ff_zigzag248_direct[64] = 
+@@ -82,7 +82,7 @@ const uint8_t ff_zigzag248_direct[64] = 
  };
  
  /* not permutated inverse zigzag_direct + 1 for MMX quantizer */
@@ -348,7 +348,7 @@ It is not yet applied to ffmpeg, but it is expected that this happens soon.
  
  const uint8_t ff_alternate_horizontal_scan[64] = {
      0,  1,   2,  3,  8,  9, 16, 17,
-@@ -110,7 +110,7 @@ const uint8_t ff_alternate_vertical_scan
+@@ -107,7 +107,7 @@ const uint8_t ff_alternate_vertical_scan
  };
  
  /* a*inverse[b]>>32 == a/b for all 0<=a<=65536 && 2<=b<=255 */
@@ -377,7 +377,7 @@ It is not yet applied to ffmpeg, but it is expected that this happens soon.
  
  /* VP3 DSP functions */
  void ff_vp3_idct_c(DCTELEM *block/* align 16*/);
-@@ -817,4 +819,6 @@ static inline void copy_block17(uint8_t 
+@@ -830,4 +832,6 @@ static inline void copy_block17(uint8_t 
      }
  }
  
@@ -514,8 +514,8 @@ It is not yet applied to ffmpeg, but it is expected that this happens soon.
  #define interlaced_dct interlaced_dct_is_a_bad_name
  #define mb_intra mb_intra_is_not_initialized_see_mb_type
  
-@@ -488,4 +490,6 @@ typedef struct H264Context{
-     SEI_PicStructType sei_pic_struct;
+@@ -462,4 +464,6 @@ typedef struct H264Context{
+     uint32_t svq3_watermark_key;
  }H264Context;
  
 +END_HIDDEN
@@ -961,7 +961,7 @@ It is not yet applied to ffmpeg, but it is expected that this happens soon.
  #define FRAME_SKIPPED 100 ///< return value for header parsers if frame is not coded
  
  enum OutputFormat {
-@@ -691,7 +693,7 @@ void ff_write_quant_matrix(PutBitContext
+@@ -690,7 +692,7 @@ void ff_write_quant_matrix(PutBitContext
  int ff_find_unused_picture(MpegEncContext *s, int shared);
  void ff_denoise_dct(MpegEncContext *s, DCTELEM *block);
  void ff_update_duplicate_context(MpegEncContext *dst, MpegEncContext *src);
@@ -970,7 +970,7 @@ It is not yet applied to ffmpeg, but it is expected that this happens soon.
  
  void ff_er_frame_start(MpegEncContext *s);
  void ff_er_frame_end(MpegEncContext *s);
-@@ -866,5 +868,7 @@ void ff_wmv2_encode_mb(MpegEncContext * 
+@@ -865,5 +867,7 @@ void ff_wmv2_encode_mb(MpegEncContext * 
                         DCTELEM block[6][64],
                         int motion_x, int motion_y);
  
diff --git a/debian/patches/050_disable_faad_test.diff b/debian/patches/050_disable_faad_test.diff
index 70165c9..a97490f 100644
--- a/debian/patches/050_disable_faad_test.diff
+++ b/debian/patches/050_disable_faad_test.diff
@@ -1,4 +1,4 @@
-disable configure checks for libfaad2 and liba52.
+disable configure checks for libfaad2.
 
 in debian/ubuntu, we cannot have the headers an libraries on the
 system. however, we ship with copies of the headers. This means that we
@@ -7,12 +7,12 @@ our needs.
 
 --- a/configure
 +++ b/configure
-@@ -1331,21 +1331,9 @@ fi
+@@ -1498,18 +1498,7 @@ fi
  disabled static && LIBNAME=""
  
  if enabled_any libfaad libfaadbin ; then
 -    if check_header faad.h; then
--        check_cc << EOF
+-        check_cc <<EOF
 -#include <faad.h>
 -#ifndef FAAD2_VERSION
 -ok faad1
@@ -26,18 +26,10 @@ our needs.
 +    enable libfaad2
  fi
  
--
- if ! enabled gpl; then
-     die_gpl_disabled(){
-         name=$1
-@@ -1639,11 +1627,11 @@ done
  
- # these are off by default, so fail if requested and not available
- enabled avisynth   && require2 vfw32 "windows.h vfw.h" AVIFileInit -lvfw32
--enabled liba52     && require  liba52 a52dec/a52.h a52_init -la52
-+# enabled liba52     && require  liba52 a52dec/a52.h a52_init -la52
- enabled libamr_nb  && require  libamrnb amrnb/interf_dec.h Speech_Decode_Frame_init -lamrnb -lm
- enabled libamr_wb  && require  libamrwb amrwb/dec_if.h D_IF_init -lamrwb -lm
+@@ -1821,7 +1810,7 @@ enabled libdirac   && add_cflags $(pkg-c
+                       require  libdirac libdirac_decoder/dirac_parser.h dirac_decoder_init -ldirac_decoder &&
+                       require  libdirac libdirac_encoder/dirac_encoder.h dirac_encoder_init -ldirac_encoder
  enabled libfaac    && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac
 -enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
 +# enabled libfaad    && require2 libfaad faad.h faacDecOpen -lfaad
diff --git a/debian/patches/51_dlopen_correct_libfaad_so.diff b/debian/patches/051_dlopen_correct_libfaad_so.diff
similarity index 50%
rename from debian/patches/51_dlopen_correct_libfaad_so.diff
rename to debian/patches/051_dlopen_correct_libfaad_so.diff
index 20d4068..57b975a 100644
--- a/debian/patches/51_dlopen_correct_libfaad_so.diff
+++ b/debian/patches/051_dlopen_correct_libfaad_so.diff
@@ -1,28 +1,17 @@
-Adjust sonames on liba52 and libfaad
+Adjust sonames on libfaad
 
 In debian and ubuntu, the sonames used by upstream are too tight,
 because they are only provided by the development patches. Using tighter
 names enables their use if only the library packages are installed.
 
---- a/libavcodec/liba52.c
-+++ b/libavcodec/liba52.c
-@@ -29,7 +29,7 @@
- 
- #ifdef CONFIG_LIBA52BIN
- #include <dlfcn.h>
--static const char* liba52name = "liba52.so.0";
-+static const char* liba52name = "liba52-0.7.4.so";
- #endif
- 
- /**
 --- a/libavcodec/libfaad.c
 +++ b/libavcodec/libfaad.c
 @@ -42,7 +42,7 @@
  
  #ifdef CONFIG_LIBFAADBIN
  #include <dlfcn.h>
--static const char* libfaadname = "libfaad.so";
-+static const char* libfaadname = "libfaad.so.0";
+-static const char* const libfaadname = "libfaad.so";
++static const char* const libfaadname = "libfaad.so.0";
  #else
  #define dlopen(a)
  #define dlclose(a)
diff --git a/debian/patches/series b/debian/patches/series
index c4bfd83..25f23ff 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,2 +1,4 @@
-# 020_visibility_patch
+020_visibility_patch
+050_disable_faad_test.diff
+051_dlopen_correct_libfaad_so.diff
 900_doxyfile
diff --git a/debian/rules b/debian/rules
index ae10c25..ccc13e6 100755
--- a/debian/rules
+++ b/debian/rules
@@ -70,7 +70,6 @@ clean-real:
 	    $(addprefix configure-stamp-, $(FLAVORS)) patch-stamp
 	rm -rf $(addprefix debian-, $(FLAVORS)) doxy
 	dh_clean config-extra-includes.h debian/tmp.debhelper.log
-	dh_clean formats.txt
 
 get-orig-source:
 	dh_testdir
@@ -106,23 +105,18 @@ else
 	dh_install --fail-missing --sourcedir=debian/tmp
 endif
 
-formats.txt: install
-	env LD_LIBRARY_PATH=$(CURDIR)/debian/tmp/usr/lib \
-	debian/tmp/usr/bin/ffmpeg -formats > $@
-
 ifneq ($(DEB_SOURCE),ffmpeg-debian)
 binary-indep: install
 else
 binary-indep: build-doxy install
 endif
 
-binary-arch: build install formats.txt
+binary-arch: build install
 	dh_testdir
 	dh_testroot
 	dh_installdocs $(extradoc) doc/optimization.txt
 	dh_installdocs -A MAINTAINERS CREDITS doc/TODO
 	dh_installdocs -A debian/patents.txt debian/README.Debian
-	dh_installdocs -p libavcodec52 formats.txt
 	dh_installexamples -pffmpeg doc/ffserver.conf debian/recordshow.sh
 	dh_installexamples -plibavcodec-dev libavcodec/apiexample.c
 	dh_installchangelogs Changelog
diff --git a/debian/strip.sh b/debian/strip.sh
old mode 100755
new mode 100644
diff --git a/doc/faq.texi b/doc/faq.texi
index e070fd2..b76f4e7 100644
--- a/doc/faq.texi
+++ b/doc/faq.texi
@@ -166,6 +166,11 @@ Applying that to the previous example:
 
 Beware that there is no "jpeg" codec. Use "mjpeg" instead.
 
+ at section I get "Unsupported codec (id=86043) for input stream #0.1". What is the problem?
+
+This is the Qcelp codec, FFmpeg has no support for that codec currently.
+Try MEncoder/MPlayer, it might work.
+
 @section Why do I see a slight quality degradation with multithreaded MPEG* encoding?
 
 For multithreaded MPEG* encoding, the encoded slices must be independent,
@@ -187,14 +192,14 @@ LGPL to GPL.
 @section Why does the chrominance data seem to be sampled at a different time from the luminance data on bt8x8 captures on Linux?
 
 This is a well-known bug in the bt8x8 driver. For 2.4.26 there is a patch at
-(@url{http://svn.ffmpeg.org/michael/trunk/patches/bttv-420-2.4.26.patch?view=co}). This may also
+(@url{http://svn.mplayerhq.hu/michael/trunk/patches/bttv-420-2.4.26.patch?view=co}). This may also
 apply cleanly to other 2.4-series kernels.
 
 @section How do I avoid the ugly aliasing artifacts in bt8x8 captures on Linux?
 
 Pass 'combfilter=1 lumafilter=1' to the bttv driver. Note though that 'combfilter=1'
-will cause somewhat too strong filtering. A fix is to apply (@url{http://svn.ffmpeg.org/michael/trunk/patches/bttv-comb-2.4.26.patch?view=co})
-or (@url{http://svn.ffmpeg.org/michael/trunk/patches/bttv-comb-2.6.6.patch?view=co})
+will cause somewhat too strong filtering. A fix is to apply (@url{http://svn.mplayerhq.hu/michael/trunk/patches/bttv-comb-2.4.26.patch?view=co})
+or (@url{http://svn.mplayerhq.hu/michael/trunk/patches/bttv-comb-2.6.6.patch?view=co})
 and pass 'combfilter=2'.
 
 @section -f jpeg doesn't work.
@@ -226,7 +231,7 @@ default.
 @item non-working stuff
 B-frames
 @item example command line
-ffmpeg -i input -acodec libfaac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv -trellis 2 -aic 2 -cmp 2 -subcmp 2 -s 320x180 -title X output.mp4
+ffmpeg -i input -acodec libfaac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320x180 -title X output.mp4
 @end table
 
 @section How do I encode videos which play on the PSP?
@@ -239,7 +244,7 @@ ffmpeg -i input -acodec libfaac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags
 @item non-working stuff
 B-frames
 @item example command line
-ffmpeg -i input -acodec libfaac -ab 128kb -vcodec mpeg4 -b 1200kb -ar 24000 -mbd 2 -flags +4mv -trellis 2 -aic 2 -cmp 2 -subcmp 2 -s 368x192 -r 30000/1001 -title X -f psp output.mp4
+ffmpeg -i input -acodec libfaac -ab 128kb -vcodec mpeg4 -b 1200kb -ar 24000 -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 368x192 -r 30000/1001 -title X -f psp output.mp4
 @item needed stuff for H.264
 -acodec libfaac -vcodec libx264 width*height<=76800 width%16=0? height%16=0? -ar 48000 -coder 1 -r 30000/1001 or 15000/1001 -f psp
 @item working stuff for H.264
@@ -256,12 +261,12 @@ ffmpeg -i input -acodec libfaac -ab 128kb -ac 2 -ar 48000 -vcodec libx264 -level
 
 @section Which are good parameters for encoding high quality MPEG-4?
 
-'-mbd rd -flags +4mv+aic -trellis 2 -cmp 2 -subcmp 2 -g 300 -pass 1/2',
+'-mbd rd -flags +4mv+trell+aic -cmp 2 -subcmp 2 -g 300 -pass 1/2',
 things to try: '-bf 2', '-flags qprd', '-flags mv0', '-flags skiprd'.
 
 @section Which are good parameters for encoding high quality MPEG-1/MPEG-2?
 
-'-mbd rd -trellis 2 -cmp 2 -subcmp 2 -g 100 -pass 1/2'
+'-mbd rd -flags +trell -cmp 2 -subcmp 2 -g 100 -pass 1/2'
 but beware the '-g 100' might cause problems with some decoders.
 Things to try: '-bf 2', '-flags qprd', '-flags mv0', '-flags skiprd.
 
@@ -469,7 +474,7 @@ see @url{http://www.iversenit.dk/dev/ffmpeg-headers/}
 
 @section Where is the documentation about ffv1, msmpeg4, asv1, 4xm?
 
-see @url{http://svn.ffmpeg.org/michael/trunk/docs/}
+see @url{http://svn.mplayerhq.hu/michael/trunk/docs/}
 
 @section How do I feed H.263-RTP (and other codecs in RTP) to libavcodec?
 
diff --git a/doc/ffmpeg-doc.texi b/doc/ffmpeg-doc.texi
index 840ed89..6f354c5 100644
--- a/doc/ffmpeg-doc.texi
+++ b/doc/ffmpeg-doc.texi
@@ -439,11 +439,10 @@ tell that the raw codec data must be copied as is.
 Use same video quality as source (implies VBR).
 
 @item -pass @var{n}
-Select the pass number (1 or 2). It is used to do two-pass
-video encoding. The statistics of the video are recorded in the first
-pass into a log file (see also the option -passlogfile),
-and in the second pass that log file is used to generate the video
-at the exact requested bitrate.
+Select the pass number (1 or 2). It is useful to do two pass
+encoding. The statistics of the video are recorded in the first
+pass and the video is generated at the exact requested bitrate
+in the second pass.
 On pass 1, you may just deactivate audio and set output to null,
 examples for Windows and Unix:
 @example
@@ -451,11 +450,8 @@ ffmpeg -i foo.mov -vcodec libxvid -pass 1 -an -f rawvideo -y NUL
 ffmpeg -i foo.mov -vcodec libxvid -pass 1 -an -f rawvideo -y /dev/null
 @end example
 
- at item -passlogfile @var{prefix}
-Set two-pass log file name prefix to @var{prefix}, the default file name
-prefix is ``ffmpeg2pass''. The complete file name will be
- at file{PREFIX-N.log}, where N is a number specific to the output
-stream.
+ at item -passlogfile @var{file}
+Set two pass logfile name to @var{file}.
 
 @item -newvideo
 Add a new video stream to the current output stream.
diff --git a/doc/general.texi b/doc/general.texi
index b594fe1..4ae20a3 100644
--- a/doc/general.texi
+++ b/doc/general.texi
@@ -230,7 +230,6 @@ following image formats are supported:
 @item Electronic Arts CMV    @tab     @tab  X
     @tab Used in NHL 95 game.
 @item Electronic Arts TGV    @tab     @tab  X
- at item Electronic Arts TGQ    @tab     @tab  X
 @item FFmpeg Video 1         @tab  X  @tab  X
     @tab experimental lossless codec (fourcc: FFV1)
 @item Flash Screen Video     @tab  X  @tab  X
@@ -288,9 +287,6 @@ following image formats are supported:
     @tab fourccs: QPEG, Q1.0, Q1.1
 @item RealVideo 1.0          @tab  X  @tab  X
 @item RealVideo 2.0          @tab  X  @tab  X
- at item RealVideo 3.0          @tab     @tab  X
-    @tab still far from ideal
- at item RealVideo 4.0          @tab     @tab  X
 @item Renderware TXD         @tab     @tab  X
     @tab Texture dictionaries used by the Renderware Engine.
 @item RTjpeg                 @tab     @tab  X
@@ -399,7 +395,6 @@ following image formats are supported:
 @item Musepack               @tab     @tab  X
     @tab SV7 and SV8 are supported.
 @item Nellymoser ASAO        @tab  X  @tab  X
- at item QCELP / PureVoice      @tab     @tab  X
 @item Qdesign QDM2           @tab     @tab  X
     @tab There are still some distortions.
 @item QT IMA ADPCM           @tab  X  @tab  X
@@ -481,7 +476,7 @@ are listed below:
 @itemize
 @item bash 3.1
 @item msys-make 3.81-2 (note: not mingw32-make)
- at item w32api 3.13
+ at item w32api 3.12
 @item mingw-runtime 3.15
 @end itemize
 
@@ -662,21 +657,18 @@ Then you can easily test FFmpeg with Wine
 
 @subsection Compilation under Cygwin
 
-The main issue with the 1.5.x Cygwin versions is that newlib, its C library,
-does not contain llrint().  You need to upgrade to the unstable 1.7.x versions,
-or leverage the implementation in MinGW (as explained below).
+The main issue with Cygwin is that newlib, its C library, does not
+contain llrint().  However, it is possible to leverage the
+implementation in MinGW.
 
 Just install your Cygwin with all the "Base" packages, plus the
 following "Devel" ones:
 @example
-binutils, gcc-core, make, subversion, mingw-runtime, diffutils
+binutils, gcc-core, make, subversion, mingw-runtime
 @end example
 
-The experimental gcc4 package is still buggy, hence please
-use the official gcc 3.4.4 or a 4.2.x compiled from source by yourself.
-
-Install the current binutils-20080624-2 as they work fine (the old
-binutils-20060709-1 proved buggy on shared builds).
+Do not install binutils-20060709-1 (they are buggy on shared builds);
+use binutils-20050610-1 instead.
 
 Then create a small library that just contains llrint():
 
@@ -700,22 +692,9 @@ to make a static build or
 to build shared libraries.
 
 If you want to build FFmpeg with additional libraries, download Cygwin
-"Devel" packages for Ogg and Vorbis from any Cygwin packages repository:
- at example
-libogg-devel, libvorbis-devel
- at end example
-
-These library packages are only available from Cygwin Ports
-(@url{http://sourceware.org/cygwinports/}) :
-
- at example
-yasm, libSDL-devel, libdirac-devel, libfaac-devel, libfaad-devel, libgsm-devel,
-libmp3lame-devel, libschroedinger1.0-devel, speex-devel, libtheora-devel,
-libxvidcore-devel
- at end example
-
-The recommendation for libnut and x264 is to build them from source by
-yourself, as they evolve too quickly for Cygwin Ports to be up to date.
+"Devel" packages for Ogg and Vorbis from any Cygwin packages repository
+and/or SDL, xvid, faac, faad2 packages from Cygwin Ports,
+(@url{http://cygwinports.dotsrc.org/}).
 
 @subsection Crosscompilation for Windows under Cygwin
 
@@ -1087,7 +1066,7 @@ do not attach several unrelated patches to the same mail.
     If the patch fixes a bug, did you provide enough information, including
     a sample, so the bug can be reproduced and the fix can be verified?
     Note please do not attach samples >100k to mails but rather provide a
-    URL, you can upload to ftp://upload.ffmpeg.org
+    URL, you can upload to ftp://upload.mplayerhq.hu
 @item
     Did you provide a verbose summary about what the patch does change?
 @item
diff --git a/doc/issue_tracker.txt b/doc/issue_tracker.txt
index e5a74db..cab56cf 100644
--- a/doc/issue_tracker.txt
+++ b/doc/issue_tracker.txt
@@ -15,10 +15,9 @@ be properly added to the respective issue.
 The subscription URL for the ffmpeg-issues list is:
 http://live.polito/mailman/listinfo/ffmpeg-issues
 The URL of the webinterface of the tracker is:
-http(s)://roundup.ffmpeg/roundup/ffmpeg/
+http(s)://roundup.mplayerhq/roundup/ffmpeg/
 Note the URLs in this document are obfuscated, you must append the top level
-domain for non-profit organizations to the tracker, and of Italy to the
-mailing list.
+domain of Hungary to the tracker, and of Italy to the mailing list.
 
 Email Interface:
 ----------------
diff --git a/doc/optimization.txt b/doc/optimization.txt
index 5469adc..50630e7 100644
--- a/doc/optimization.txt
+++ b/doc/optimization.txt
@@ -4,11 +4,11 @@ optimization Tips (for libavcodec):
 What to optimize:
 -----------------
 If you plan to do non-x86 architecture specific optimizations (SIMD normally),
-then take a look in the x86/ directory, as most important functions are
+then take a look in the i386/ directory, as most important functions are
 already optimized for MMX.
 
 If you want to do x86 optimizations then you can either try to finetune the
-stuff in the x86 directory or find some other functions in the C source to
+stuff in the i386 directory or find some other functions in the C source to
 optimize, but there aren't many left.
 
 
@@ -18,9 +18,9 @@ As many functions tend to be a bit difficult to understand because
 of optimizations, it can be hard to optimize them further, or write
 architecture-specific versions. It is recommended to look at older
 revisions of the interesting files (for a web frontend try ViewVC at
-http://svn.ffmpeg.org/ffmpeg/trunk/).
+http://svn.mplayerhq.hu/ffmpeg/trunk/).
 Alternatively, look into the other architecture-specific versions in
-the x86/, ppc/, alpha/ subdirectories. Even if you don't exactly
+the i386/, ppc/, alpha/ subdirectories. Even if you don't exactly
 comprehend the instructions, it could help understanding the functions
 and how they can be optimized.
 
diff --git a/ffmpeg.c b/ffmpeg.c
index aac071e..9d74491 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -151,7 +151,6 @@ static int qp_hist = 0;
 
 static int intra_only = 0;
 static int audio_sample_rate = 44100;
-static int64_t channel_layout = 0;
 #define QSCALE_NONE -99999
 static float audio_qscale = QSCALE_NONE;
 static int audio_disable = 0;
@@ -183,7 +182,7 @@ static int do_hex_dump = 0;
 static int do_pkt_dump = 0;
 static int do_psnr = 0;
 static int do_pass = 0;
-static char *pass_logfilename_prefix = NULL;
+static char *pass_logfilename = NULL;
 static int audio_stream_copy = 0;
 static int video_stream_copy = 0;
 static int subtitle_stream_copy = 0;
@@ -191,12 +190,11 @@ static int video_sync_method= -1;
 static int audio_sync_method= 0;
 static float audio_drift_threshold= 0.1;
 static int copy_ts= 0;
-static int opt_shortest = 0;
+static int opt_shortest = 0; //
 static int video_global_header = 0;
 static char *vstats_filename;
 static FILE *vstats_file;
 static int opt_programid = 0;
-static int copy_initial_nonkeyframes = 0;
 
 static int rate_emu = 0;
 
@@ -217,7 +215,7 @@ static int64_t extra_size = 0;
 static int nb_frames_dup = 0;
 static int nb_frames_drop = 0;
 static int input_sync;
-static uint64_t limit_filesize = 0;
+static uint64_t limit_filesize = 0; //
 static int force_fps = 0;
 
 static int pgmyuv_compatibility_hack=0;
@@ -232,7 +230,7 @@ static AVBitStreamFilterContext *audio_bitstream_filters=NULL;
 static AVBitStreamFilterContext *subtitle_bitstream_filters=NULL;
 static AVBitStreamFilterContext *bitstream_filters[MAX_FILES][MAX_STREAMS];
 
-#define DEFAULT_PASS_LOGFILENAME_PREFIX "ffmpeg2pass"
+#define DEFAULT_PASS_LOGFILENAME "ffmpeg2pass"
 
 struct AVInputStream;
 
@@ -282,6 +280,7 @@ typedef struct AVInputStream {
     int64_t sample_index;      /* current sample */
 
     int64_t       start;     /* time when read started */
+    unsigned long frame;     /* current frame */
     int64_t       next_pts;  /* synthetic pts for cases where pkt.pts
                                 is not defined */
     int64_t       pts;       /* current pts */
@@ -396,17 +395,9 @@ static int av_exit(int ret)
         if (!(s->oformat->flags & AVFMT_NOFILE) && s->pb)
             url_fclose(s->pb);
         for(j=0;j<s->nb_streams;j++) {
-            av_metadata_free(&s->streams[j]->metadata);
             av_free(s->streams[j]->codec);
             av_free(s->streams[j]);
         }
-        for(j=0;j<s->nb_programs;j++) {
-            av_metadata_free(&s->programs[j]->metadata);
-        }
-        for(j=0;j<s->nb_chapters;j++) {
-            av_metadata_free(&s->chapters[j]->metadata);
-        }
-        av_metadata_free(&s->metadata);
         av_free(s);
     }
     for(i=0;i<nb_input_files;i++)
@@ -428,7 +419,7 @@ static int av_exit(int ret)
     av_free(video_standard);
 
 #ifdef CONFIG_POWERPC_PERF
-    void powerpc_display_perf_report(void);
+    extern void powerpc_display_perf_report(void);
     powerpc_display_perf_report();
 #endif /* CONFIG_POWERPC_PERF */
 
@@ -1314,11 +1305,13 @@ static int output_packet(AVInputStream *ist, int ist_index,
         }
 
         /* frame rate emulation */
-        if (rate_emu) {
-            int64_t pts = av_rescale(ist->pts, 1000000, AV_TIME_BASE);
+        if (ist->st->codec->rate_emu) {
+            int64_t pts = av_rescale((int64_t) ist->frame * ist->st->codec->time_base.num, 1000000, ist->st->codec->time_base.den);
             int64_t now = av_gettime() - ist->start;
             if (pts > now)
                 usleep(pts - now);
+
+            ist->frame++;
         }
 
         /* if output time reached then transcode raw format,
@@ -1362,7 +1355,7 @@ static int output_packet(AVInputStream *ist, int ist_index,
                         AVPacket opkt;
                         av_init_packet(&opkt);
 
-                        if ((!ost->frame_number && !(pkt->flags & PKT_FLAG_KEY)) && !copy_initial_nonkeyframes)
+                        if (!ost->frame_number && !(pkt->flags & PKT_FLAG_KEY))
                             continue;
 
                         /* no reencoding needed : output the packet directly */
@@ -1409,9 +1402,8 @@ static int output_packet(AVInputStream *ist, int ist_index,
         if (subtitle_to_free) {
             if (subtitle_to_free->rects != NULL) {
                 for (i = 0; i < subtitle_to_free->num_rects; i++) {
-                    av_freep(&subtitle_to_free->rects[i]->pict.data[0]);
-                    av_freep(&subtitle_to_free->rects[i]->pict.data[1]);
-                    av_freep(&subtitle_to_free->rects[i]);
+                    av_free(subtitle_to_free->rects[i].bitmap);
+                    av_free(subtitle_to_free->rects[i].rgba_palette);
                 }
                 av_freep(&subtitle_to_free->rects);
             }
@@ -1496,7 +1488,6 @@ static void print_sdp(AVFormatContext **avc, int n)
 
     avf_sdp_create(avc, n, sdp, sizeof(sdp));
     printf("SDP:\n%s\n", sdp);
-    fflush(stdout);
 }
 
 static int stream_index_from_inputs(AVFormatContext **input_files,
@@ -1578,8 +1569,9 @@ static int av_encode(AVFormatContext **output_files,
             ist->discard = 1; /* the stream is discarded by default
                                  (changed later) */
 
-            if (rate_emu) {
+            if (ist->st->codec->rate_emu) {
                 ist->start = av_gettime();
+                ist->frame = 0;
             }
         }
     }
@@ -1589,8 +1581,7 @@ static int av_encode(AVFormatContext **output_files,
     for(i=0;i<nb_output_files;i++) {
         os = output_files[i];
         if (!os->nb_streams) {
-            dump_format(output_files[i], i, output_files[i]->filename, 1);
-            fprintf(stderr, "Output file #%d does not contain any stream\n", i);
+            fprintf(stderr, "Output file does not contain any stream\n");
             av_exit(1);
         }
         nb_ostreams += os->nb_streams;
@@ -1742,7 +1733,6 @@ static int av_encode(AVFormatContext **output_files,
                     fprintf(stderr,"-acodec copy and -vol are incompatible (frames are not decoded)\n");
                     av_exit(1);
                 }
-                codec->channel_layout = icodec->channel_layout;
                 codec->sample_rate = icodec->sample_rate;
                 codec->channels = icodec->channels;
                 codec->frame_size = icodec->frame_size;
@@ -1846,12 +1836,12 @@ static int av_encode(AVFormatContext **output_files,
                 char *logbuffer;
 
                 snprintf(logfilename, sizeof(logfilename), "%s-%d.log",
-                         pass_logfilename_prefix ? pass_logfilename_prefix : DEFAULT_PASS_LOGFILENAME_PREFIX,
-                         i);
+                         pass_logfilename ?
+                         pass_logfilename : DEFAULT_PASS_LOGFILENAME, i);
                 if (codec->flags & CODEC_FLAG_PASS1) {
                     f = fopen(logfilename, "w");
                     if (!f) {
-                        fprintf(stderr, "Cannot write log file '%s' for pass-1 encoding: %s\n", logfilename, strerror(errno));
+                        perror(logfilename);
                         av_exit(1);
                     }
                     ost->logfile = f;
@@ -1859,7 +1849,7 @@ static int av_encode(AVFormatContext **output_files,
                     /* read the log file */
                     f = fopen(logfilename, "r");
                     if (!f) {
-                        fprintf(stderr, "Cannot read log file '%s' for pass-2 encoding: %s\n", logfilename, strerror(errno));
+                        perror(logfilename);
                         av_exit(1);
                     }
                     fseek(f, 0, SEEK_END);
@@ -2831,7 +2821,6 @@ static void opt_input_file(const char *filename)
         case CODEC_TYPE_AUDIO:
             set_context_opts(enc, avctx_opts[CODEC_TYPE_AUDIO], AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_DECODING_PARAM);
             //fprintf(stderr, "\nInput Audio channels: %d", enc->channels);
-            channel_layout = enc->channel_layout;
             audio_channels = enc->channels;
             audio_sample_rate = enc->sample_rate;
             audio_sample_fmt = enc->sample_fmt;
@@ -2867,6 +2856,7 @@ static void opt_input_file(const char *filename)
             frame_rate.num = rfps;
             frame_rate.den = rfps_base;
 
+            enc->rate_emu = rate_emu;
             input_codecs[nb_icodecs++] = avcodec_find_decoder_by_name(video_codec_name);
             if(video_disable)
                 ic->streams[i]->discard= AVDISCARD_ALL;
@@ -2901,6 +2891,7 @@ static void opt_input_file(const char *filename)
 
     video_channel = 0;
 
+    rate_emu = 0;
     av_freep(&video_codec_name);
     av_freep(&audio_codec_name);
     av_freep(&subtitle_codec_name);
@@ -3139,7 +3130,6 @@ static void new_audio_stream(AVFormatContext *oc)
         audio_enc->thread_count = thread_count;
         audio_enc->channels = audio_channels;
         audio_enc->sample_fmt = audio_sample_fmt;
-        audio_enc->channel_layout = channel_layout;
 
         if(codec && codec->sample_fmts){
             const enum SampleFormat *p= codec->sample_fmts;
@@ -3712,7 +3702,7 @@ static int opt_preset(const char *opt, const char *arg)
             continue;
         e|= sscanf(line, "%999[^=]=%999[^\n]\n", tmp, tmp2) - 2;
         if(e){
-            fprintf(stderr, "%s: Invalid syntax: '%s'\n", filename, line);
+            fprintf(stderr, "%s: Preset file invalid\n", filename);
             av_exit(1);
         }
         if(!strcmp(tmp, "acodec")){
@@ -3722,7 +3712,7 @@ static int opt_preset(const char *opt, const char *arg)
         }else if(!strcmp(tmp, "scodec")){
             opt_subtitle_codec(tmp2);
         }else if(opt_default(tmp, tmp2) < 0){
-            fprintf(stderr, "%s: Invalid option or argument: '%s', parsed as '%s' = '%s'\n", filename, line, tmp, tmp2);
+            fprintf(stderr, "%s: Invalid option or argument: %s=%s\n", filename, tmp, tmp2);
             av_exit(1);
         }
     }
@@ -3777,7 +3767,6 @@ static const OptionDef options[] = {
     { "dts_delta_threshold", HAS_ARG | OPT_FLOAT | OPT_EXPERT, {(void*)&dts_delta_threshold}, "timestamp discontinuity delta threshold", "threshold" },
     { "programid", HAS_ARG | OPT_INT | OPT_EXPERT, {(void*)&opt_programid}, "desired program number", "" },
     { "xerror", OPT_BOOL, {(void*)&exit_on_error}, "exit on error", "error" },
-    { "copyinkf", OPT_BOOL | OPT_EXPERT, {(void*)&copy_initial_nonkeyframes}, "copy initial non-keyframes" },
 
     /* video options */
     { "b", OPT_FUNC2 | HAS_ARG | OPT_VIDEO, {(void*)opt_bitrate}, "set bitrate (in bits/s)", "bitrate" },
@@ -3806,7 +3795,7 @@ static const OptionDef options[] = {
     { "sameq", OPT_BOOL | OPT_VIDEO, {(void*)&same_quality},
       "use same video quality as source (implies VBR)" },
     { "pass", HAS_ARG | OPT_VIDEO, {(void*)&opt_pass}, "select the pass number (1 or 2)", "n" },
-    { "passlogfile", HAS_ARG | OPT_STRING | OPT_VIDEO, {(void*)&pass_logfilename_prefix}, "select two pass log file name prefix", "prefix" },
+    { "passlogfile", HAS_ARG | OPT_STRING | OPT_VIDEO, {(void*)&pass_logfilename}, "select two pass log file name", "file" },
     { "deinterlace", OPT_BOOL | OPT_EXPERT | OPT_VIDEO, {(void*)&do_deinterlace},
       "deinterlace pictures" },
     { "psnr", OPT_BOOL | OPT_EXPERT | OPT_VIDEO, {(void*)&do_psnr}, "calculate PSNR of compressed frames" },
@@ -3884,18 +3873,22 @@ int main(int argc, char **argv)
     sws_opts = sws_getContext(16,16,0, 16,16,0, sws_flags, NULL,NULL,NULL);
 
     show_banner();
+    if (argc <= 1) {
+        show_help();
+        av_exit(1);
+    }
 
     /* parse options */
     parse_options(argc, argv, options, opt_output_file);
 
     /* file converter / grab */
     if (nb_output_files <= 0) {
-        fprintf(stderr, "At least one output file must be specified\n");
+        fprintf(stderr, "Must supply at least one output file\n");
         av_exit(1);
     }
 
     if (nb_input_files == 0) {
-        fprintf(stderr, "At least one input file must be specified\n");
+        fprintf(stderr, "Must supply at least one input file\n");
         av_exit(1);
     }
 
diff --git a/ffplay.c b/ffplay.c
index 12190da..67fbff2 100644
--- a/ffplay.c
+++ b/ffplay.c
@@ -441,10 +441,10 @@ static void blend_subrect(AVPicture *dst, const AVSubtitleRect *rect, int imgw,
     const uint32_t *pal;
     int dstx, dsty, dstw, dsth;
 
-    dstw = av_clip(rect->w, 0, imgw);
-    dsth = av_clip(rect->h, 0, imgh);
-    dstx = av_clip(rect->x, 0, imgw - dstw);
-    dsty = av_clip(rect->y, 0, imgh - dsth);
+    dstx = FFMIN(FFMAX(rect->x, 0), imgw);
+    dstw = FFMIN(FFMAX(rect->w, 0), imgw - dstx);
+    dsty = FFMIN(FFMAX(rect->y, 0), imgh);
+    dsth = FFMIN(FFMAX(rect->h, 0), imgh - dsty);
     lum = dst->data[0] + dsty * dst->linesize[0];
     cb = dst->data[1] + (dsty >> 1) * dst->linesize[1];
     cr = dst->data[2] + (dsty >> 1) * dst->linesize[2];
@@ -452,9 +452,9 @@ static void blend_subrect(AVPicture *dst, const AVSubtitleRect *rect, int imgw,
     width2 = (dstw + 1) >> 1;
     skip2 = dstx >> 1;
     wrap = dst->linesize[0];
-    wrap3 = rect->pict.linesize[0];
-    p = rect->pict.data[0];
-    pal = (const uint32_t *)rect->pict.data[1];  /* Now in YCrCb! */
+    wrap3 = rect->linesize;
+    p = rect->bitmap;
+    pal = rect->rgba_palette;  /* Now in YCrCb! */
 
     if (dsty & 1) {
         lum += dstx;
@@ -636,9 +636,8 @@ static void free_subpicture(SubPicture *sp)
 
     for (i = 0; i < sp->sub.num_rects; i++)
     {
-        av_freep(&sp->sub.rects[i]->pict.data[0]);
-        av_freep(&sp->sub.rects[i]->pict.data[1]);
-        av_freep(&sp->sub.rects[i]);
+        av_free(sp->sub.rects[i].bitmap);
+        av_free(sp->sub.rects[i].rgba_palette);
     }
 
     av_free(sp->sub.rects);
@@ -722,7 +721,7 @@ static void video_image_display(VideoState *is)
                     pict.linesize[2] = vp->bmp->pitches[1];
 
                     for (i = 0; i < sp->sub.num_rects; i++)
-                        blend_subrect(&pict, sp->sub.rects[i],
+                        blend_subrect(&pict, &sp->sub.rects[i],
                                       vp->bmp->w, vp->bmp->h);
 
                     SDL_UnlockYUVOverlay (vp->bmp);
@@ -1025,7 +1024,7 @@ static void video_refresh_timer(void *opaque)
 
             /* compute nominal delay */
             delay = vp->pts - is->frame_last_pts;
-            if (delay <= 0 || delay >= 10.0) {
+            if (delay <= 0 || delay >= 2.0) {
                 /* if incorrect delay, use previous one */
                 delay = is->frame_last_delay;
             }
@@ -1436,13 +1435,13 @@ static int subtitle_thread(void *arg)
 
             for (i = 0; i < sp->sub.num_rects; i++)
             {
-                for (j = 0; j < sp->sub.rects[i]->nb_colors; j++)
+                for (j = 0; j < sp->sub.rects[i].nb_colors; j++)
                 {
-                    RGBA_IN(r, g, b, a, (uint32_t*)sp->sub.rects[i]->pict.data[1] + j);
+                    RGBA_IN(r, g, b, a, sp->sub.rects[i].rgba_palette + j);
                     y = RGB_TO_Y_CCIR(r, g, b);
                     u = RGB_TO_U_CCIR(r, g, b, 0);
                     v = RGB_TO_V_CCIR(r, g, b, 0);
-                    YUVA_OUT((uint32_t*)sp->sub.rects[i]->pict.data[1] + j, y, u, v, a);
+                    YUVA_OUT(sp->sub.rects[i].rgba_palette + j, y, u, v, a);
                 }
             }
 
@@ -2063,19 +2062,12 @@ static int decode_thread(void *arg)
         /* if the queue are full, no need to read more */
         if (is->audioq.size > MAX_AUDIOQ_SIZE ||
             is->videoq.size > MAX_VIDEOQ_SIZE ||
-            is->subtitleq.size > MAX_SUBTITLEQ_SIZE) {
+            is->subtitleq.size > MAX_SUBTITLEQ_SIZE ||
+            url_feof(ic->pb)) {
             /* wait 10 ms */
             SDL_Delay(10);
             continue;
         }
-        if(url_feof(ic->pb)) {
-            av_init_packet(pkt);
-            pkt->data=
-            pkt->size=0;
-            pkt->stream_index= is->video_stream;
-            packet_queue_put(&is->videoq, pkt);
-            continue;
-        }
         ret = av_read_frame(ic, pkt);
         if (ret < 0) {
             if (url_ferror(ic->pb) == 0) {
@@ -2561,7 +2553,7 @@ int main(int argc, char **argv)
     parse_options(argc, argv, options, opt_input_file);
 
     if (!input_filename) {
-        fprintf(stderr, "An input file must be specified\n");
+        show_help();
         exit(1);
     }
 
diff --git a/ffpresets/libx264-fastfirstpass.ffpreset b/ffpresets/libx264-fastfirstpass.ffpreset
index aaad461..f2ce57b 100644
--- a/ffpresets/libx264-fastfirstpass.ffpreset
+++ b/ffpresets/libx264-fastfirstpass.ffpreset
@@ -14,8 +14,7 @@ qcomp=0.6
 qmin=10
 qmax=51
 qdiff=4
-bf=4
 refs=1
-directpred=3
+directpred=1
 trellis=0
 flags2=-bpyramid-wpred-mixed_refs-dct8x8+fastpskip
diff --git a/ffpresets/libx264-hq.ffpreset b/ffpresets/libx264-hq.ffpreset
index cdf67eb..3f6cda6 100644
--- a/ffpresets/libx264-hq.ffpreset
+++ b/ffpresets/libx264-hq.ffpreset
@@ -9,12 +9,12 @@ g=250
 keyint_min=25
 sc_threshold=40
 i_qfactor=0.71
-b_strategy=2
+b_strategy=1
 qcomp=0.6
 qmin=10
 qmax=51
 qdiff=4
-bf=4
+bf=16
 refs=4
 directpred=3
 trellis=1
diff --git a/ffpresets/libx264-lossless_fast.ffpreset b/ffpresets/libx264-lossless_fast.ffpreset
deleted file mode 100644
index dcf418a..0000000
--- a/ffpresets/libx264-lossless_fast.ffpreset
+++ /dev/null
@@ -1,19 +0,0 @@
-coder=0
-flags=+loop
-cmp=+chroma
-partitions=-parti8x8+parti4x4+partp8x8-partp4x4-partb8x8
-me_method=hex
-subq=3
-me_range=16
-g=250
-keyint_min=25
-sc_threshold=40
-i_qfactor=0.71
-b_strategy=1
-qcomp=0.6
-qmin=10
-qmax=51
-qdiff=4
-directpred=1
-flags2=+fastpskip
-cqp=0
diff --git a/ffpresets/libx264-lossless_max.ffpreset b/ffpresets/libx264-lossless_max.ffpreset
deleted file mode 100644
index b8506c2..0000000
--- a/ffpresets/libx264-lossless_max.ffpreset
+++ /dev/null
@@ -1,20 +0,0 @@
-coder=1
-flags=+loop
-cmp=+chroma
-partitions=+parti8x8+parti4x4+partp8x8+partp4x4-partb8x8
-me_method=esa
-subq=8
-me_range=16
-g=250
-keyint_min=25
-sc_threshold=40
-i_qfactor=0.71
-b_strategy=1
-qcomp=0.6
-qmin=10
-qmax=51
-qdiff=4
-refs=16
-directpred=1
-flags2=+mixed_refs+dct8x8+fastpskip
-cqp=0
diff --git a/ffpresets/libx264-lossless_medium.ffpreset b/ffpresets/libx264-lossless_medium.ffpreset
deleted file mode 100644
index 99fb6b9..0000000
--- a/ffpresets/libx264-lossless_medium.ffpreset
+++ /dev/null
@@ -1,19 +0,0 @@
-coder=1
-flags=+loop
-cmp=+chroma
-partitions=-parti8x8+parti4x4+partp8x8+partp4x4-partb8x8
-me_method=hex
-subq=5
-me_range=16
-g=250
-keyint_min=25
-sc_threshold=40
-i_qfactor=0.71
-b_strategy=1
-qcomp=0.6
-qmin=10
-qmax=51
-qdiff=4
-directpred=1
-flags2=+fastpskip
-cqp=0
diff --git a/ffpresets/libx264-lossless_slow.ffpreset b/ffpresets/libx264-lossless_slow.ffpreset
deleted file mode 100644
index 2ecb55b..0000000
--- a/ffpresets/libx264-lossless_slow.ffpreset
+++ /dev/null
@@ -1,20 +0,0 @@
-coder=1
-flags=+loop
-cmp=+chroma
-partitions=+parti8x8+parti4x4+partp8x8+partp4x4-partb8x8
-me_method=umh
-subq=6
-me_range=16
-g=250
-keyint_min=25
-sc_threshold=40
-i_qfactor=0.71
-b_strategy=1
-qcomp=0.6
-qmin=10
-qmax=51
-qdiff=4
-refs=2
-directpred=1
-flags2=+dct8x8+fastpskip
-cqp=0
diff --git a/ffpresets/libx264-lossless_slower.ffpreset b/ffpresets/libx264-lossless_slower.ffpreset
deleted file mode 100644
index dd499c7..0000000
--- a/ffpresets/libx264-lossless_slower.ffpreset
+++ /dev/null
@@ -1,20 +0,0 @@
-coder=1
-flags=+loop
-cmp=+chroma
-partitions=+parti8x8+parti4x4+partp8x8+partp4x4-partb8x8
-me_method=umh
-subq=8
-me_range=16
-g=250
-keyint_min=25
-sc_threshold=40
-i_qfactor=0.71
-b_strategy=1
-qcomp=0.6
-qmin=10
-qmax=51
-qdiff=4
-refs=4
-directpred=1
-flags2=+mixed_refs+dct8x8+fastpskip
-cqp=0
diff --git a/ffpresets/libx264-lossless_ultrafast.ffpreset b/ffpresets/libx264-lossless_ultrafast.ffpreset
deleted file mode 100644
index 1c429f2..0000000
--- a/ffpresets/libx264-lossless_ultrafast.ffpreset
+++ /dev/null
@@ -1,19 +0,0 @@
-coder=0
-flags=+loop
-cmp=+chroma
-partitions=-parti8x8-parti4x4-partp8x8-partp4x4-partb8x8
-me_method=dia
-subq=0
-me_range=16
-g=250
-keyint_min=25
-sc_threshold=40
-i_qfactor=0.71
-b_strategy=1
-qcomp=0.6
-qmin=10
-qmax=51
-qdiff=4
-directpred=1
-flags2=+fastpskip
-cqp=0
diff --git a/ffpresets/libx264-max.ffpreset b/ffpresets/libx264-max.ffpreset
index afdde53..3638480 100644
--- a/ffpresets/libx264-max.ffpreset
+++ b/ffpresets/libx264-max.ffpreset
@@ -9,12 +9,12 @@ g=250
 keyint_min=25
 sc_threshold=40
 i_qfactor=0.71
-b_strategy=2
+b_strategy=1
 qcomp=0.6
 qmin=10
 qmax=51
 qdiff=4
-bf=4
+bf=16
 refs=16
 directpred=3
 trellis=2
diff --git a/ffpresets/libx264-normal.ffpreset b/ffpresets/libx264-normal.ffpreset
index 99ac2e3..180b9d2 100644
--- a/ffpresets/libx264-normal.ffpreset
+++ b/ffpresets/libx264-normal.ffpreset
@@ -14,7 +14,7 @@ qcomp=0.6
 qmin=10
 qmax=51
 qdiff=4
-bf=4
+bf=16
 refs=2
 directpred=3
 trellis=0
diff --git a/ffpresets/libx264-slowfirstpass.ffpreset b/ffpresets/libx264-slowfirstpass.ffpreset
deleted file mode 100644
index 7358d44..0000000
--- a/ffpresets/libx264-slowfirstpass.ffpreset
+++ /dev/null
@@ -1,21 +0,0 @@
-coder=1
-flags=+loop
-cmp=+chroma
-partitions=+parti8x8+parti4x4+partp8x8+partb8x8
-me_method=hex
-subq=6
-me_range=16
-g=250
-keyint_min=25
-sc_threshold=40
-i_qfactor=0.71
-b_strategy=2
-qcomp=0.6
-qmin=10
-qmax=51
-qdiff=4
-bf=4
-refs=1
-directpred=3
-trellis=0
-flags2=+bpyramid+wpred+dct8x8+fastpskip
diff --git a/ffserver.c b/ffserver.c
index 23bb64c..168f996 100644
--- a/ffserver.c
+++ b/ffserver.c
@@ -3507,7 +3507,7 @@ static void build_feed_streams(void)
             }
         }
         if (!url_exist(feed->feed_filename)) {
-            AVFormatContext s1 = {0}, *s = &s1;
+            AVFormatContext s1, *s = &s1;
 
             if (feed->readonly) {
                 http_log("Unable to create feed file '%s' as it is marked readonly\n",
@@ -3686,7 +3686,7 @@ static void add_codec(FFStream *stream, AVCodecContext *av)
     memcpy(st->codec, av, sizeof(AVCodecContext));
 }
 
-static enum CodecID opt_audio_codec(const char *arg)
+static int opt_audio_codec(const char *arg)
 {
     AVCodec *p= avcodec_find_encoder_by_name(arg);
 
@@ -3696,7 +3696,7 @@ static enum CodecID opt_audio_codec(const char *arg)
     return p->id;
 }
 
-static enum CodecID opt_video_codec(const char *arg)
+static int opt_video_codec(const char *arg)
 {
     AVCodec *p= avcodec_find_encoder_by_name(arg);
 
@@ -3735,11 +3735,13 @@ static void load_module(const char *filename)
 static int ffserver_opt_default(const char *opt, const char *arg,
                        AVCodecContext *avctx, int type)
 {
-    int ret = 0;
-    const AVOption *o = av_find_opt(avctx, opt, NULL, type, type);
-    if(o)
-        ret = av_set_string3(avctx, opt, arg, 1, NULL);
-    return ret;
+    const AVOption *o  = NULL;
+    const AVOption *o2 = av_find_opt(avctx, opt, NULL, type, type);
+    if(o2)
+        o = av_set_string2(avctx, opt, arg, 1);
+    if(!o)
+        return -1;
+    return 0;
 }
 
 static int parse_ffconfig(const char *filename)
@@ -3753,7 +3755,7 @@ static int parse_ffconfig(const char *filename)
     FFStream **last_stream, *stream, *redirect;
     FFStream **last_feed, *feed;
     AVCodecContext audio_enc, video_enc;
-    enum CodecID audio_id, video_id;
+    int audio_id, video_id;
 
     f = fopen(filename, "r");
     if (!f) {
@@ -4448,7 +4450,7 @@ static void opt_debug()
 
 static void opt_show_help(void)
 {
-    printf("usage: ffserver [options]\n"
+    printf("usage: FFserver [options]\n"
            "Hyper fast multi format Audio/Video streaming server\n");
     printf("\n");
     show_help_options(options, "Main options:\n", 0, 0);
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index 3b179d7..96bc3ba 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -3,8 +3,6 @@ include $(SUBDIR)../config.mak
 NAME = avcodec
 FFLIBS = avutil
 
-HEADERS = avcodec.h opt.h vdpau.h
-
 OBJS = allcodecs.o                                                      \
        audioconvert.o                                                   \
        bitstream.o                                                      \
@@ -22,15 +20,14 @@ OBJS = allcodecs.o                                                      \
        simple_idct.o                                                    \
        utils.o                                                          \
 
-# parts needed for many different codecs
-OBJS-$(CONFIG_AANDCT)                  += aandcttab.o
+
+HEADERS = avcodec.h opt.h
+
 OBJS-$(CONFIG_ENCODERS)                += faandct.o jfdctfst.o jfdctint.o
 OBJS-$(CONFIG_FFT)                     += fft.o
 OBJS-$(CONFIG_GOLOMB)                  += golomb.o
 OBJS-$(CONFIG_MDCT)                    += mdct.o
-OBJS-$(CONFIG_OLDSCALER)               += imgresample.o
 
-# decoders/encoders
 OBJS-$(CONFIG_AAC_DECODER)             += aac.o aactab.o
 OBJS-$(CONFIG_AASC_DECODER)            += aasc.o msrledec.o
 OBJS-$(CONFIG_AC3_DECODER)             += eac3dec.o ac3dec.o ac3tab.o ac3dec_data.o ac3.o
@@ -71,7 +68,6 @@ OBJS-$(CONFIG_DVVIDEO_ENCODER)         += dv.o
 OBJS-$(CONFIG_DXA_DECODER)             += dxa.o
 OBJS-$(CONFIG_EAC3_DECODER)            += eac3dec.o ac3dec.o ac3tab.o ac3dec_data.o ac3.o
 OBJS-$(CONFIG_EACMV_DECODER)           += eacmv.o
-OBJS-$(CONFIG_EATGQ_DECODER)           += eatgq.o eaidct.o
 OBJS-$(CONFIG_EATGV_DECODER)           += eatgv.o
 OBJS-$(CONFIG_EIGHTBPS_DECODER)        += 8bps.o
 OBJS-$(CONFIG_EIGHTSVX_EXP_DECODER)    += 8svx.o
@@ -100,7 +96,6 @@ OBJS-$(CONFIG_H263_ENCODER)            += mpegvideo_enc.o motion_est.o ratecontr
 OBJS-$(CONFIG_H263P_ENCODER)           += mpegvideo_enc.o motion_est.o ratecontrol.o h263.o mpeg12data.o mpegvideo.o error_resilience.o
 OBJS-$(CONFIG_H264_DECODER)            += h264.o h264idct.o h264pred.o h264_parser.o cabac.o mpegvideo.o error_resilience.o
 OBJS-$(CONFIG_H264_ENCODER)            += h264enc.o h264dspenc.o
-OBJS-$(CONFIG_H264_VDPAU_DECODER)      += vdpauvideo.o
 OBJS-$(CONFIG_HUFFYUV_DECODER)         += huffyuv.o
 OBJS-$(CONFIG_HUFFYUV_ENCODER)         += huffyuv.o
 OBJS-$(CONFIG_IDCIN_DECODER)           += idcinvideo.o
@@ -159,7 +154,6 @@ OBJS-$(CONFIG_PNG_DECODER)             += png.o pngdec.o
 OBJS-$(CONFIG_PNG_ENCODER)             += png.o pngenc.o
 OBJS-$(CONFIG_PPM_ENCODER)             += pnmenc.o pnm.o
 OBJS-$(CONFIG_PTX_DECODER)             += ptx.o
-OBJS-$(CONFIG_QCELP_DECODER)           += qcelpdec.o qcelp_lsp.o celp_math.o celp_filters.o
 OBJS-$(CONFIG_QDM2_DECODER)            += qdm2.o mpegaudiodec.o mpegaudiodecheader.o mpegaudio.o mpegaudiodata.o
 OBJS-$(CONFIG_QDRAW_DECODER)           += qdrw.o
 OBJS-$(CONFIG_QPEG_DECODER)            += qpeg.o
@@ -179,8 +173,6 @@ OBJS-$(CONFIG_RV10_DECODER)            += rv10.o h263.o mpeg12data.o mpegvideo.o
 OBJS-$(CONFIG_RV10_ENCODER)            += rv10.o mpegvideo_enc.o motion_est.o ratecontrol.o h263.o mpeg12data.o mpegvideo.o error_resilience.o
 OBJS-$(CONFIG_RV20_DECODER)            += rv10.o h263.o mpeg12data.o mpegvideo.o error_resilience.o
 OBJS-$(CONFIG_RV20_ENCODER)            += rv10.o mpegvideo_enc.o motion_est.o ratecontrol.o h263.o mpeg12data.o mpegvideo.o error_resilience.o
-OBJS-$(CONFIG_RV30_DECODER)            += rv30.o rv34.o h264pred.o rv30dsp.o
-OBJS-$(CONFIG_RV40_DECODER)            += rv40.o rv34.o h264pred.o rv40dsp.o
 OBJS-$(CONFIG_SGI_DECODER)             += sgidec.o
 OBJS-$(CONFIG_SGI_ENCODER)             += sgienc.o rle.o
 OBJS-$(CONFIG_SHORTEN_DECODER)         += shorten.o
@@ -197,13 +189,13 @@ OBJS-$(CONFIG_SP5X_DECODER)            += sp5xdec.o mjpegdec.o mjpeg.o
 OBJS-$(CONFIG_SUNRAST_DECODER)         += sunrast.o
 OBJS-$(CONFIG_SVQ1_DECODER)            += svq1dec.o svq1.o h263.o mpeg12data.o mpegvideo.o error_resilience.o
 OBJS-$(CONFIG_SVQ1_ENCODER)            += svq1enc.o svq1.o motion_est.o h263.o mpeg12data.o mpegvideo.o error_resilience.o
-OBJS-$(CONFIG_SVQ3_DECODER)            += h264.o h264idct.o h264pred.o h264_parser.o cabac.o mpegvideo.o error_resilience.o svq1dec.o
+OBJS-$(CONFIG_SVQ3_DECODER)            += h264.o h264idct.o h264pred.o h264_parser.o cabac.o mpegvideo.o error_resilience.o
 OBJS-$(CONFIG_TARGA_DECODER)           += targa.o
 OBJS-$(CONFIG_TARGA_ENCODER)           += targaenc.o rle.o
 OBJS-$(CONFIG_THEORA_DECODER)          += vp3.o xiph.o vp3dsp.o
 OBJS-$(CONFIG_THP_DECODER)             += mjpegdec.o mjpeg.o
 OBJS-$(CONFIG_TIERTEXSEQVIDEO_DECODER) += tiertexseqv.o
-OBJS-$(CONFIG_TIFF_DECODER)            += tiff.o lzw.o faxcompr.o
+OBJS-$(CONFIG_TIFF_DECODER)            += tiff.o lzw.o
 OBJS-$(CONFIG_TIFF_ENCODER)            += tiffenc.o rle.o lzwenc.o
 OBJS-$(CONFIG_TRUEMOTION1_DECODER)     += truemotion1.o
 OBJS-$(CONFIG_TRUEMOTION2_DECODER)     += truemotion2.o
@@ -244,13 +236,11 @@ OBJS-$(CONFIG_XAN_WC3_DECODER)         += xan.o
 OBJS-$(CONFIG_XAN_WC4_DECODER)         += xan.o
 OBJS-$(CONFIG_XL_DECODER)              += xl.o
 OBJS-$(CONFIG_XSUB_DECODER)            += xsubdec.o
-OBJS-$(CONFIG_XVMC)                    += xvmcvideo.o
 OBJS-$(CONFIG_ZLIB_DECODER)            += lcldec.o
 OBJS-$(CONFIG_ZLIB_ENCODER)            += lclenc.o
 OBJS-$(CONFIG_ZMBV_DECODER)            += zmbv.o
 OBJS-$(CONFIG_ZMBV_ENCODER)            += zmbvenc.o
 
-# (AD)PCM decoders/encoders
 OBJS-$(CONFIG_PCM_ALAW_DECODER)           += pcm.o
 OBJS-$(CONFIG_PCM_ALAW_ENCODER)           += pcm.o
 OBJS-$(CONFIG_PCM_DVD_DECODER)            += pcm.o
@@ -353,7 +343,7 @@ OBJS-$(CONFIG_LIBVORBIS)               += libvorbis.o
 OBJS-$(CONFIG_LIBX264)                 += libx264.o
 OBJS-$(CONFIG_LIBXVID)                 += libxvidff.o libxvid_rc.o
 
-# parsers
+
 OBJS-$(CONFIG_AAC_PARSER)              += aac_parser.o aac_ac3_parser.o mpeg4audio.o
 OBJS-$(CONFIG_AC3_PARSER)              += ac3_parser.o ac3tab.o aac_ac3_parser.o
 OBJS-$(CONFIG_CAVSVIDEO_PARSER)        += cavs_parser.o
@@ -374,7 +364,6 @@ OBJS-$(CONFIG_PNM_PARSER)              += pnm_parser.o pnm.o
 OBJS-$(CONFIG_VC1_PARSER)              += vc1_parser.o
 OBJS-$(CONFIG_VP3_PARSER)              += vp3_parser.o
 
-# bitstream filters
 OBJS-$(CONFIG_DUMP_EXTRADATA_BSF)         += dump_extradata_bsf.o
 OBJS-$(CONFIG_H264_MP4TOANNEXB_BSF)       += h264_mp4toannexb_bsf.o
 OBJS-$(CONFIG_IMX_DUMP_HEADER_BSF)        += imx_dump_header_bsf.o
@@ -386,97 +375,91 @@ OBJS-$(CONFIG_NOISE_BSF)                  += noise_bsf.o
 OBJS-$(CONFIG_REMOVE_EXTRADATA_BSF)       += remove_extradata_bsf.o
 OBJS-$(CONFIG_TEXT2MOVSUB_BSF)            += movsub_bsf.o
 
-# thread libraries
 OBJS-$(HAVE_BEOSTHREADS)               += beosthread.o
 OBJS-$(HAVE_OS2THREADS)                += os2thread.o
 OBJS-$(HAVE_PTHREADS)                  += pthread.o
 OBJS-$(HAVE_W32THREADS)                += w32thread.o
 
+OBJS-$(HAVE_XVMC)                      += xvmcvideo.o
+
+ifndef CONFIG_SWSCALE
+OBJS += imgresample.o
+endif
+
 # processor-specific code
-YASM-OBJS-$(CONFIG_GPL)                += x86/h264_deblock_sse2.o       \
-                                          x86/h264_idct_sse2.o          \
-
-MMX-OBJS-$(CONFIG_CAVS_DECODER)        += x86/cavsdsp_mmx.o
-MMX-OBJS-$(CONFIG_ENCODERS)            += x86/dsputilenc_mmx.o
-MMX-OBJS-$(CONFIG_FLAC_ENCODER)        += x86/flacdsp_mmx.o
-MMX-OBJS-$(CONFIG_GPL)                 += x86/idct_mmx.o
-MMX-OBJS-$(CONFIG_SNOW_DECODER)        += x86/snowdsp_mmx.o
-MMX-OBJS-$(CONFIG_THEORA_DECODER)      += x86/vp3dsp_mmx.o x86/vp3dsp_sse2.o
-MMX-OBJS-$(CONFIG_VC1_DECODER)         += x86/vc1dsp_mmx.o
-MMX-OBJS-$(CONFIG_VP3_DECODER)         += x86/vp3dsp_mmx.o x86/vp3dsp_sse2.o
-MMX-OBJS-$(CONFIG_VP5_DECODER)         += x86/vp3dsp_mmx.o x86/vp3dsp_sse2.o
-MMX-OBJS-$(CONFIG_VP6_DECODER)         += x86/vp3dsp_mmx.o x86/vp3dsp_sse2.o
-MMX-OBJS-$(CONFIG_VP6A_DECODER)        += x86/vp3dsp_mmx.o x86/vp3dsp_sse2.o
-MMX-OBJS-$(CONFIG_VP6F_DECODER)        += x86/vp3dsp_mmx.o x86/vp3dsp_sse2.o
-MMX-OBJS-$(CONFIG_WMV3_DECODER)        += x86/vc1dsp_mmx.o
-MMX-OBJS-$(HAVE_YASM)                  += x86/dsputil_yasm.o            \
-                                          $(YASM-OBJS-yes)
-
-OBJS-$(HAVE_MMX)                       += x86/cpuid.o                   \
-                                          x86/dnxhd_mmx.o               \
-                                          x86/dsputil_mmx.o             \
-                                          x86/fdct_mmx.o                \
-                                          x86/idct_mmx_xvid.o           \
-                                          x86/idct_sse2_xvid.o          \
-                                          x86/motion_est_mmx.o          \
-                                          x86/mpegvideo_mmx.o           \
-                                          x86/simple_idct_mmx.o         \
-                                          $(MMX-OBJS-yes)
-
-OBJS-$(CONFIG_FFT_MMX)                 += x86/fft_3dn.o                 \
-                                          x86/fft_3dn2.o                \
-                                          x86/fft_mmx.o                 \
-                                          x86/fft_sse.o                 \
+ifdef HAVE_MMX
+OBJS += i386/fdct_mmx.o                                                 \
+        i386/cpuid.o                                                    \
+        i386/dsputil_mmx.o                                              \
+        i386/mpegvideo_mmx.o                                            \
+        i386/motion_est_mmx.o                                           \
+        i386/simple_idct_mmx.o                                          \
+        i386/idct_mmx_xvid.o                                            \
+        i386/idct_sse2_xvid.o                                           \
+
+OBJS-$(CONFIG_FFT_MMX)                 += i386/fft_mmx.o                \
+                                          i386/fft_sse.o                \
+                                          i386/fft_3dn.o                \
+                                          i386/fft_3dn2.o               \
+
+OBJS-$(HAVE_YASM)                      += i386/dsputil_yasm.o
+
+OBJS-$(CONFIG_GPL)                     += i386/idct_mmx.o
+
+OBJS-$(CONFIG_ENCODERS)                += i386/dsputilenc_mmx.o
+
+OBJS-$(CONFIG_CAVS_DECODER)            += i386/cavsdsp_mmx.o
+OBJS-$(CONFIG_FLAC_ENCODER)            += i386/flacdsp_mmx.o
+OBJS-$(CONFIG_SNOW_DECODER)            += i386/snowdsp_mmx.o
+OBJS-$(CONFIG_VC1_DECODER)             += i386/vc1dsp_mmx.o
+OBJS-$(CONFIG_VP3_DECODER)             += i386/vp3dsp_mmx.o i386/vp3dsp_sse2.o
+OBJS-$(CONFIG_VP5_DECODER)             += i386/vp3dsp_mmx.o i386/vp3dsp_sse2.o
+OBJS-$(CONFIG_VP6_DECODER)             += i386/vp3dsp_mmx.o i386/vp3dsp_sse2.o
+OBJS-$(CONFIG_VP6A_DECODER)            += i386/vp3dsp_mmx.o i386/vp3dsp_sse2.o
+OBJS-$(CONFIG_VP6F_DECODER)            += i386/vp3dsp_mmx.o i386/vp3dsp_sse2.o
+OBJS-$(CONFIG_WMV3_DECODER)            += i386/vc1dsp_mmx.o
+endif
+
+OBJS-$(ARCH_ARMV4L)                    += armv4l/jrevdct_arm.o          \
+                                          armv4l/simple_idct_arm.o      \
+                                          armv4l/dsputil_arm_s.o        \
+                                          armv4l/dsputil_arm.o          \
+                                          armv4l/mpegvideo_arm.o        \
+
+OBJS-$(HAVE_IWMMXT)                    += armv4l/dsputil_iwmmxt.o       \
+                                          armv4l/mpegvideo_iwmmxt.o     \
+
+OBJS-$(HAVE_ARMV5TE)                   += armv4l/mpegvideo_armv5te.o    \
+                                          armv4l/simple_idct_armv5te.o  \
+
+OBJS-$(HAVE_ARMVFP)                    += armv4l/float_arm_vfp.o        \
+                                          armv4l/dsputil_vfp.o          \
+
+OBJS-$(HAVE_ARMV6)                     += armv4l/simple_idct_armv6.o    \
+
+OBJS-$(HAVE_VIS)                       += sparc/dsputil_vis.o           \
+                                          sparc/simple_idct_vis.o       \
+
+OBJS-$(CONFIG_MLIB)                    += mlib/dsputil_mlib.o           \
 
 OBJS-$(ARCH_ALPHA)                     += alpha/dsputil_alpha.o         \
-                                          alpha/dsputil_alpha_asm.o     \
                                           alpha/motion_est_alpha.o      \
-                                          alpha/motion_est_mvi_asm.o    \
                                           alpha/mpegvideo_alpha.o       \
                                           alpha/simple_idct_alpha.o     \
+                                          alpha/dsputil_alpha_asm.o     \
+                                          alpha/motion_est_mvi_asm.o    \
 
-OBJS-$(ARCH_ARM)                       += arm/dsputil_arm.o             \
-                                          arm/dsputil_arm_s.o           \
-                                          arm/jrevdct_arm.o             \
-                                          arm/mpegvideo_arm.o           \
-                                          arm/simple_idct_arm.o         \
-
-OBJS-$(HAVE_ARMV5TE)                   += arm/mpegvideo_armv5te.o       \
-                                          arm/mpegvideo_armv5te_s.o     \
-                                          arm/simple_idct_armv5te.o     \
-
-OBJS-$(HAVE_ARMV6)                     += arm/simple_idct_armv6.o       \
-
-OBJS-$(HAVE_ARMVFP)                    += arm/dsputil_vfp.o             \
-                                          arm/float_arm_vfp.o           \
-
-OBJS-$(HAVE_IWMMXT)                    += arm/dsputil_iwmmxt.o          \
-                                          arm/mpegvideo_iwmmxt.o        \
-
-OBJS-$(HAVE_NEON)                      += arm/dsputil_neon.o            \
-                                          arm/dsputil_neon_s.o          \
-                                          arm/h264dsp_neon.o            \
-                                          arm/h264idct_neon.o           \
-                                          arm/simple_idct_neon.o        \
-
-OBJS-$(ARCH_BFIN)                      += bfin/dsputil_bfin.o           \
-                                          bfin/fdct_bfin.o              \
-                                          bfin/idct_bfin.o              \
-                                          bfin/mpegvideo_bfin.o         \
-                                          bfin/pixels_bfin.o            \
-                                          bfin/vp3_bfin.o               \
-                                          bfin/vp3_idct_bfin.o          \
+OBJS-$(ARCH_POWERPC)                   += ppc/dsputil_ppc.o             \
 
-OBJS-$(ARCH_PPC)                       += ppc/dsputil_ppc.o             \
+OBJS-$(HAVE_MMI)                       += ps2/dsputil_mmi.o             \
+                                          ps2/idct_mmi.o                \
+                                          ps2/mpegvideo_mmi.o           \
 
-ALTIVEC-OBJS-$(CONFIG_H264_DECODER)    += ppc/h264_altivec.o
-ALTIVEC-OBJS-$(CONFIG_OLDSCALER)       += ppc/imgresample_altivec.o
-ALTIVEC-OBJS-$(CONFIG_SNOW_DECODER)    += ppc/snow_altivec.o
-ALTIVEC-OBJS-$(CONFIG_VC1_DECODER)     += ppc/vc1dsp_altivec.o
-ALTIVEC-OBJS-$(CONFIG_WMV3_DECODER)    += ppc/vc1dsp_altivec.o
+OBJS-$(ARCH_SH4)                       += sh4/idct_sh4.o                \
+                                          sh4/dsputil_align.o           \
+                                          sh4/dsputil_sh4.o             \
 
-OBJS-$(HAVE_ALTIVEC)                   += ppc/check_altivec.o           \
-                                          ppc/dsputil_altivec.o         \
+ALTIVEC-OBJS-yes                       += ppc/dsputil_altivec.o         \
                                           ppc/fdct_altivec.o            \
                                           ppc/fft_altivec.o             \
                                           ppc/float_altivec.o           \
@@ -484,30 +467,34 @@ OBJS-$(HAVE_ALTIVEC)                   += ppc/check_altivec.o           \
                                           ppc/idct_altivec.o            \
                                           ppc/int_altivec.o             \
                                           ppc/mpegvideo_altivec.o       \
-                                          $(ALTIVEC-OBJS-yes)
-
-OBJS-$(ARCH_SH4)                       += sh4/dsputil_align.o           \
-                                          sh4/dsputil_sh4.o             \
-                                          sh4/idct_sh4.o                \
 
-OBJS-$(CONFIG_MLIB)                    += mlib/dsputil_mlib.o           \
+ALTIVEC-OBJS-$(CONFIG_H264_DECODER)    += ppc/h264_altivec.o
+ALTIVEC-OBJS-$(CONFIG_SNOW_DECODER)    += ppc/snow_altivec.o
+ALTIVEC-OBJS-$(CONFIG_VC1_DECODER)     += ppc/vc1dsp_altivec.o
+ALTIVEC-OBJS-$(CONFIG_WMV3_DECODER)    += ppc/vc1dsp_altivec.o
 
-OBJS-$(HAVE_MMI)                       += ps2/dsputil_mmi.o             \
-                                          ps2/idct_mmi.o                \
-                                          ps2/mpegvideo_mmi.o           \
+# -maltivec is needed in order to build AltiVec code.
+$(addprefix $(SUBDIR),$(ALTIVEC-OBJS-yes)): CFLAGS += -maltivec -mabi=altivec
 
-OBJS-$(HAVE_VIS)                       += sparc/dsputil_vis.o           \
-                                          sparc/simple_idct_vis.o       \
+# check_altivec must be built without -maltivec
+OBJS-$(HAVE_ALTIVEC)                   += $(ALTIVEC-OBJS-yes)           \
+                                          ppc/check_altivec.o
 
+OBJS-$(ARCH_BFIN)                      += bfin/dsputil_bfin.o           \
+                                          bfin/mpegvideo_bfin.o         \
+                                          bfin/vp3_bfin.o               \
+                                          bfin/pixels_bfin.o            \
+                                          bfin/fdct_bfin.o              \
+                                          bfin/idct_bfin.o              \
+                                          bfin/vp3_idct_bfin.o          \
 
-TESTS = $(addsuffix -test$(EXESUF), cabac dct eval fft h264 rangecoder snow)
-TESTS-$(CONFIG_OLDSCALER) += imgresample-test$(EXESUF)
-TESTS-$(ARCH_X86) += x86/cpuid-test$(EXESUF) motion-test$(EXESUF)
+TESTS = $(addsuffix -test$(EXESUF), cabac dct eval fft h264 imgresample rangecoder snow)
+TESTS-$(ARCH_X86) += i386/cpuid-test$(EXESUF) motion-test$(EXESUF)
 
 CLEANFILES = apiexample$(EXESUF)
-DIRS = alpha arm bfin mlib ppc ps2 sh4 sparc x86
+DIRS = alpha armv4l bfin i386 mlib ppc ps2 sh4 sparc
 
 include $(SUBDIR)../subdir.mak
 
-$(SUBDIR)dct-test$(EXESUF): $(SUBDIR)fdctref.o $(SUBDIR)aandcttab.o
+$(SUBDIR)dct-test$(EXESUF): $(SUBDIR)fdctref.o
 $(SUBDIR)fft-test$(EXESUF): $(SUBDIR)fdctref.o
diff --git a/libavcodec/aac.c b/libavcodec/aac.c
index 545f125..36742ba 100644
--- a/libavcodec/aac.c
+++ b/libavcodec/aac.c
@@ -41,7 +41,7 @@
  * N (code in SoC repo) Long Term Prediction
  * Y                    intensity stereo
  * Y                    channel coupling
- * Y                    frequency domain prediction
+ * N                    frequency domain prediction
  * Y                    Perceptual Noise Substitution
  * Y                    Mid/Side stereo
  * N                    Scalable Inverse AAC Quantization
@@ -77,7 +77,6 @@
 
 
 #include "avcodec.h"
-#include "internal.h"
 #include "bitstream.h"
 #include "dsputil.h"
 #include "lpc.h"
@@ -86,7 +85,6 @@
 #include "aactab.h"
 #include "aacdectab.h"
 #include "mpeg4audio.h"
-#include "aac_parser.h"
 
 #include <assert.h>
 #include <errno.h>
@@ -168,16 +166,15 @@ static void decode_channel_map(enum ChannelPosition *cpe_map,
  */
 static int decode_pce(AACContext * ac, enum ChannelPosition new_che_pos[4][MAX_ELEM_ID],
         GetBitContext * gb) {
-    int num_front, num_side, num_back, num_lfe, num_assoc_data, num_cc, sampling_index;
+    int num_front, num_side, num_back, num_lfe, num_assoc_data, num_cc;
 
     skip_bits(gb, 2);  // object_type
 
-    sampling_index = get_bits(gb, 4);
-    if(sampling_index > 11) {
+    ac->m4ac.sampling_index = get_bits(gb, 4);
+    if(ac->m4ac.sampling_index > 11) {
         av_log(ac->avccontext, AV_LOG_ERROR, "invalid sampling rate index %d\n", ac->m4ac.sampling_index);
         return -1;
     }
-    ac->m4ac.sampling_index = sampling_index;
     ac->m4ac.sample_rate = ff_mpeg4audio_sample_rates[ac->m4ac.sampling_index];
     num_front       = get_bits(gb, 4);
     num_side        = get_bits(gb, 4);
@@ -265,7 +262,7 @@ static int decode_ga_specific_config(AACContext * ac, GetBitContext * gb, int ch
     int extension_flag, ret;
 
     if(get_bits1(gb)) {  // frameLengthFlag
-        ff_log_missing_feature(ac->avccontext, "960/120 MDCT window is", 1);
+        av_log_missing_feature(ac->avccontext, "960/120 MDCT window is", 1);
         return -1;
     }
 
@@ -334,7 +331,6 @@ static int decode_audio_specific_config(AACContext * ac, void *data, int data_si
     skip_bits_long(&gb, i);
 
     switch (ac->m4ac.object_type) {
-    case AOT_AAC_MAIN:
     case AOT_AAC_LC:
         if (decode_ga_specific_config(ac, &gb, ac->m4ac.chan_config))
             return -1;
@@ -358,51 +354,18 @@ static av_always_inline int lcg_random(int previous_val) {
     return previous_val * 1664525 + 1013904223;
 }
 
-static void reset_predict_state(PredictorState * ps) {
-    ps->r0 = 0.0f;
-    ps->r1 = 0.0f;
-    ps->cor0 = 0.0f;
-    ps->cor1 = 0.0f;
-    ps->var0 = 1.0f;
-    ps->var1 = 1.0f;
-}
-
-static void reset_all_predictors(PredictorState * ps) {
-    int i;
-    for (i = 0; i < MAX_PREDICTORS; i++)
-        reset_predict_state(&ps[i]);
-}
-
-static void reset_predictor_group(PredictorState * ps, int group_num) {
-    int i;
-    for (i = group_num-1; i < MAX_PREDICTORS; i+=30)
-        reset_predict_state(&ps[i]);
-}
-
 static av_cold int aac_decode_init(AVCodecContext * avccontext) {
     AACContext * ac = avccontext->priv_data;
     int i;
 
     ac->avccontext = avccontext;
 
-    if (avccontext->extradata_size > 0) {
-        if(decode_audio_specific_config(ac, avccontext->extradata, avccontext->extradata_size))
-            return -1;
-        avccontext->sample_rate = ac->m4ac.sample_rate;
-    } else if (avccontext->channels > 0) {
-        enum ChannelPosition new_che_pos[4][MAX_ELEM_ID];
-        memset(new_che_pos, 0, 4 * MAX_ELEM_ID * sizeof(new_che_pos[0][0]));
-        if(set_default_channel_config(ac, new_che_pos, avccontext->channels - (avccontext->channels == 8)))
-            return -1;
-        if(output_configure(ac, ac->che_pos, new_che_pos))
-            return -1;
-        ac->m4ac.sample_rate = avccontext->sample_rate;
-    } else {
-        ff_log_missing_feature(ac->avccontext, "Implicit channel configuration is", 0);
+    if (avccontext->extradata_size <= 0 ||
+        decode_audio_specific_config(ac, avccontext->extradata, avccontext->extradata_size))
         return -1;
-    }
 
     avccontext->sample_fmt  = SAMPLE_FMT_S16;
+    avccontext->sample_rate = ac->m4ac.sample_rate;
     avccontext->frame_size  = 1024;
 
     AAC_INIT_VLC_STATIC( 0, 144);
@@ -469,21 +432,6 @@ static void skip_data_stream_element(GetBitContext * gb) {
     skip_bits_long(gb, 8 * count);
 }
 
-static int decode_prediction(AACContext * ac, IndividualChannelStream * ics, GetBitContext * gb) {
-    int sfb;
-    if (get_bits1(gb)) {
-        ics->predictor_reset_group = get_bits(gb, 5);
-        if (ics->predictor_reset_group == 0 || ics->predictor_reset_group > 30) {
-            av_log(ac->avccontext, AV_LOG_ERROR, "Invalid Predictor Reset Group.\n");
-            return -1;
-        }
-    }
-    for (sfb = 0; sfb < FFMIN(ics->max_sfb, ff_aac_pred_sfb_max[ac->m4ac.sampling_index]); sfb++) {
-        ics->prediction_used[sfb] = get_bits1(gb);
-    }
-    return 0;
-}
-
 /**
  * Decode Individual Channel Stream info; reference: table 4.6.
  *
@@ -516,30 +464,16 @@ static int decode_ics_info(AACContext * ac, IndividualChannelStream * ics, GetBi
         ics->swb_offset    =      swb_offset_128[ac->m4ac.sampling_index];
         ics->num_swb       =  ff_aac_num_swb_128[ac->m4ac.sampling_index];
         ics->tns_max_bands =   tns_max_bands_128[ac->m4ac.sampling_index];
-        ics->predictor_present = 0;
     } else {
         ics->max_sfb       = get_bits(gb, 6);
         ics->num_windows   = 1;
         ics->swb_offset    =     swb_offset_1024[ac->m4ac.sampling_index];
         ics->num_swb       = ff_aac_num_swb_1024[ac->m4ac.sampling_index];
         ics->tns_max_bands =  tns_max_bands_1024[ac->m4ac.sampling_index];
-        ics->predictor_present = get_bits1(gb);
-        ics->predictor_reset_group = 0;
-        if (ics->predictor_present) {
-            if (ac->m4ac.object_type == AOT_AAC_MAIN) {
-                if (decode_prediction(ac, ics, gb)) {
-                    memset(ics, 0, sizeof(IndividualChannelStream));
-                    return -1;
-                }
-            } else if (ac->m4ac.object_type == AOT_AAC_LC) {
-                av_log(ac->avccontext, AV_LOG_ERROR, "Prediction is not allowed in AAC-LC.\n");
-                memset(ics, 0, sizeof(IndividualChannelStream));
-                return -1;
-            } else {
-                ff_log_missing_feature(ac->avccontext, "Predictor bit set but LTP is", 1);
-                memset(ics, 0, sizeof(IndividualChannelStream));
-                return -1;
-            }
+        if (get_bits1(gb)) {
+            av_log_missing_feature(ac->avccontext, "Predictor bit set but LTP is", 1);
+            memset(ics, 0, sizeof(IndividualChannelStream));
+            return -1;
         }
     }
 
@@ -755,7 +689,6 @@ static int decode_spectrum_and_dequant(AACContext * ac, float coef[1024], GetBit
     const int c = 1024/ics->num_windows;
     const uint16_t * offsets = ics->swb_offset;
     float *coef_base = coef;
-    static const float sign_lookup[] = { 1.0f, -1.0f };
 
     for (g = 0; g < ics->num_windows; g++)
         memset(coef + g * 128 + offsets[ics->max_sfb], 0, sizeof(float)*(c - offsets[ics->max_sfb]));
@@ -766,7 +699,7 @@ static int decode_spectrum_and_dequant(AACContext * ac, float coef[1024], GetBit
             const int dim = cur_band_type >= FIRST_PAIR_BT ? 2 : 4;
             const int is_cb_unsigned = IS_CODEBOOK_UNSIGNED(cur_band_type);
             int group;
-            if (cur_band_type == ZERO_BT || cur_band_type == INTENSITY_BT2 || cur_band_type == INTENSITY_BT) {
+            if (cur_band_type == ZERO_BT) {
                 for (group = 0; group < ics->group_len[g]; group++) {
                     memset(coef + group * 128 + offsets[i], 0, (offsets[i+1] - offsets[i])*sizeof(float));
                 }
@@ -784,7 +717,7 @@ static int decode_spectrum_and_dequant(AACContext * ac, float coef[1024], GetBit
                         coef[group*128+k] *= scale;
                     }
                 }
-            }else {
+            }else if (cur_band_type != INTENSITY_BT2 && cur_band_type != INTENSITY_BT) {
                 for (group = 0; group < ics->group_len[g]; group++) {
                     for (k = offsets[i]; k < offsets[i+1]; k += dim) {
                         const int index = get_vlc2(gb, vlc_spectral[cur_band_type - 1].table, 6, 3);
@@ -799,19 +732,12 @@ static int decode_spectrum_and_dequant(AACContext * ac, float coef[1024], GetBit
                         }
                         vq_ptr = &ff_aac_codebook_vectors[cur_band_type - 1][index * dim];
                         if (is_cb_unsigned) {
-                            if (vq_ptr[0]) coef[coef_tmp_idx    ] = sign_lookup[get_bits1(gb)];
-                            if (vq_ptr[1]) coef[coef_tmp_idx + 1] = sign_lookup[get_bits1(gb)];
-                            if (dim == 4) {
-                                if (vq_ptr[2]) coef[coef_tmp_idx + 2] = sign_lookup[get_bits1(gb)];
-                                if (vq_ptr[3]) coef[coef_tmp_idx + 3] = sign_lookup[get_bits1(gb)];
-                            }
+                            for (j = 0; j < dim; j++)
+                                if (vq_ptr[j])
+                                    coef[coef_tmp_idx + j] = 1 - 2*(int)get_bits1(gb);
                         }else {
-                            coef[coef_tmp_idx    ] = 1.0f;
-                            coef[coef_tmp_idx + 1] = 1.0f;
-                            if (dim == 4) {
-                                coef[coef_tmp_idx + 2] = 1.0f;
-                                coef[coef_tmp_idx + 3] = 1.0f;
-                            }
+                            for (j = 0; j < dim; j++)
+                                coef[coef_tmp_idx + j] = 1.0f;
                         }
                         if (cur_band_type == ESC_BT) {
                             for (j = 0; j < 2; j++) {
@@ -825,25 +751,15 @@ static int decode_spectrum_and_dequant(AACContext * ac, float coef[1024], GetBit
                                         return -1;
                                     }
                                     n = (1<<n) + get_bits(gb, n);
-                                    coef[coef_tmp_idx + j] *= cbrtf(n) * n;
+                                    coef[coef_tmp_idx + j] *= cbrtf(fabsf(n)) * n;
                                 }else
                                     coef[coef_tmp_idx + j] *= vq_ptr[j];
                             }
                         }else
-                        {
-                            coef[coef_tmp_idx    ] *= vq_ptr[0];
-                            coef[coef_tmp_idx + 1] *= vq_ptr[1];
-                            if (dim == 4) {
-                                coef[coef_tmp_idx + 2] *= vq_ptr[2];
-                                coef[coef_tmp_idx + 3] *= vq_ptr[3];
-                            }
-                        }
-                        coef[coef_tmp_idx    ] *= sf[idx];
-                        coef[coef_tmp_idx + 1] *= sf[idx];
-                        if (dim == 4) {
-                            coef[coef_tmp_idx + 2] *= sf[idx];
-                            coef[coef_tmp_idx + 3] *= sf[idx];
-                        }
+                            for (j = 0; j < dim; j++)
+                                coef[coef_tmp_idx + j] *= vq_ptr[j];
+                        for (j = 0; j < dim; j++)
+                            coef[coef_tmp_idx + j] *= sf[idx];
                     }
                 }
             }
@@ -870,77 +786,6 @@ static int decode_spectrum_and_dequant(AACContext * ac, float coef[1024], GetBit
     return 0;
 }
 
-static av_always_inline float flt16_round(float pf) {
-    int exp;
-    pf = frexpf(pf, &exp);
-    pf = ldexpf(roundf(ldexpf(pf, 8)), exp-8);
-    return pf;
-}
-
-static av_always_inline float flt16_even(float pf) {
-    int exp;
-    pf = frexpf(pf, &exp);
-    pf = ldexpf(rintf(ldexpf(pf, 8)), exp-8);
-    return pf;
-}
-
-static av_always_inline float flt16_trunc(float pf) {
-    int exp;
-    pf = frexpf(pf, &exp);
-    pf = ldexpf(truncf(ldexpf(pf, 8)), exp-8);
-    return pf;
-}
-
-static void predict(AACContext * ac, PredictorState * ps, float* coef, int output_enable) {
-    const float a     = 0.953125; // 61.0/64
-    const float alpha = 0.90625;  // 29.0/32
-    float e0, e1;
-    float pv;
-    float k1, k2;
-
-    k1 = ps->var0 > 1 ? ps->cor0 * flt16_even(a / ps->var0) : 0;
-    k2 = ps->var1 > 1 ? ps->cor1 * flt16_even(a / ps->var1) : 0;
-
-    pv = flt16_round(k1 * ps->r0 + k2 * ps->r1);
-    if (output_enable)
-        *coef += pv * ac->sf_scale;
-
-    e0 = *coef / ac->sf_scale;
-    e1 = e0 - k1 * ps->r0;
-
-    ps->cor1 = flt16_trunc(alpha * ps->cor1 + ps->r1 * e1);
-    ps->var1 = flt16_trunc(alpha * ps->var1 + 0.5 * (ps->r1 * ps->r1 + e1 * e1));
-    ps->cor0 = flt16_trunc(alpha * ps->cor0 + ps->r0 * e0);
-    ps->var0 = flt16_trunc(alpha * ps->var0 + 0.5 * (ps->r0 * ps->r0 + e0 * e0));
-
-    ps->r1 = flt16_trunc(a * (ps->r0 - k1 * e0));
-    ps->r0 = flt16_trunc(a * e0);
-}
-
-/**
- * Apply AAC-Main style frequency domain prediction.
- */
-static void apply_prediction(AACContext * ac, SingleChannelElement * sce) {
-    int sfb, k;
-
-    if (!sce->ics.predictor_initialized) {
-        reset_all_predictors(sce->predictor_state);
-        sce->ics.predictor_initialized = 1;
-    }
-
-    if (sce->ics.window_sequence[0] != EIGHT_SHORT_SEQUENCE) {
-        for (sfb = 0; sfb < ff_aac_pred_sfb_max[ac->m4ac.sampling_index]; sfb++) {
-            for (k = sce->ics.swb_offset[sfb]; k < sce->ics.swb_offset[sfb + 1]; k++) {
-                predict(ac, &sce->predictor_state[k], &sce->coeffs[k],
-                    sce->ics.predictor_present && sce->ics.prediction_used[sfb]);
-            }
-        }
-        if (sce->ics.predictor_reset_group)
-            reset_predictor_group(sce->predictor_state, sce->ics.predictor_reset_group);
-    } else
-        reset_all_predictors(sce->predictor_state);
-}
-
 /**
  * Decode an individual_channel_stream payload; reference: table 4.44.
  *
@@ -988,17 +833,13 @@ static int decode_ics(AACContext * ac, SingleChannelElement * sce, GetBitContext
         if ((tns->present = get_bits1(gb)) && decode_tns(ac, tns, gb, ics))
             return -1;
         if (get_bits1(gb)) {
-            ff_log_missing_feature(ac->avccontext, "SSR", 1);
+            av_log_missing_feature(ac->avccontext, "SSR", 1);
             return -1;
         }
     }
 
     if (decode_spectrum_and_dequant(ac, out, gb, sce->sf, pulse_present, &pulse, ics, sce->band_type) < 0)
         return -1;
-
-    if(ac->m4ac.object_type == AOT_AAC_MAIN && !common_window)
-        apply_prediction(ac, sce);
-
     return 0;
 }
 
@@ -1099,14 +940,8 @@ static int decode_cpe(AACContext * ac, GetBitContext * gb, int elem_id) {
     if ((ret = decode_ics(ac, &cpe->ch[1], gb, common_window, 0)))
         return ret;
 
-    if (common_window) {
-        if (ms_present)
-            apply_mid_side_stereo(cpe);
-        if (ac->m4ac.object_type == AOT_AAC_MAIN) {
-            apply_prediction(ac, &cpe->ch[0]);
-            apply_prediction(ac, &cpe->ch[1]);
-        }
-    }
+    if (common_window && ms_present)
+        apply_mid_side_stereo(cpe);
 
     apply_intensity_stereo(cpe, ms_present);
     return 0;
@@ -1198,7 +1033,7 @@ static int decode_cce(AACContext * ac, GetBitContext * gb, ChannelElement * che)
  */
 static int decode_sbr_extension(AACContext * ac, GetBitContext * gb, int crc, int cnt) {
     // TODO : sbr_extension implementation
-    ff_log_missing_feature(ac->avccontext, "SBR", 0);
+    av_log_missing_feature(ac->avccontext, "SBR", 0);
     skip_bits_long(gb, 8*cnt - 4); // -4 due to reading extension type
     return cnt;
 }
@@ -1356,7 +1191,7 @@ static void imdct_and_windowing(AACContext * ac, SingleChannelElement * sce) {
     const float * lwindow_prev = ics->use_kb_window[1] ? ff_aac_kbd_long_1024 : ff_sine_1024;
     const float * swindow_prev = ics->use_kb_window[1] ? ff_aac_kbd_short_128 : ff_sine_128;
     float * buf = ac->buf_mdct;
-    float * temp = ac->temp;
+    DECLARE_ALIGNED(16, float, temp[128]);
     int i;
 
     // imdct
@@ -1519,29 +1354,6 @@ static void spectral_to_sample(AACContext * ac) {
     }
 }
 
-static int parse_adts_frame_header(AACContext * ac, GetBitContext * gb) {
-
-    int size;
-    AACADTSHeaderInfo hdr_info;
-
-    size = ff_aac_parse_header(gb, &hdr_info);
-    if (size > 0) {
-        if (hdr_info.chan_config)
-            ac->m4ac.chan_config = hdr_info.chan_config;
-        ac->m4ac.sample_rate     = hdr_info.sample_rate;
-        ac->m4ac.sampling_index  = hdr_info.sampling_index;
-        ac->m4ac.object_type     = hdr_info.object_type;
-    }
-    if (hdr_info.num_aac_frames == 1) {
-        if (!hdr_info.crc_absent)
-            skip_bits(gb, 16);
-    } else {
-        ff_log_missing_feature(ac->avccontext, "More than one AAC RDB per ADTS frame is", 0);
-        return -1;
-    }
-    return size;
-}
-
 static int aac_decode_frame(AVCodecContext * avccontext, void * data, int * data_size, const uint8_t * buf, int buf_size) {
     AACContext * ac = avccontext->priv_data;
     GetBitContext gb;
@@ -1550,13 +1362,6 @@ static int aac_decode_frame(AVCodecContext * avccontext, void * data, int * data
 
     init_get_bits(&gb, buf, buf_size*8);
 
-    if (show_bits(&gb, 12) == 0xfff) {
-        if ((err = parse_adts_frame_header(ac, &gb)) < 0) {
-            av_log(avccontext, AV_LOG_ERROR, "Error decoding AAC frame header.\n");
-            return -1;
-        }
-    }
-
     // parse
     while ((elem_type = get_bits(&gb, 3)) != TYPE_END) {
         elem_id = get_bits(&gb, 4);
diff --git a/libavcodec/aac.h b/libavcodec/aac.h
index d2f81f2..eec0828 100644
--- a/libavcodec/aac.h
+++ b/libavcodec/aac.h
@@ -133,20 +133,6 @@ enum CouplingPoint {
 };
 
 /**
- * Predictor State
- */
-typedef struct {
-    float cor0;
-    float cor1;
-    float var0;
-    float var1;
-    float r0;
-    float r1;
-} PredictorState;
-
-#define MAX_PREDICTORS 672
-
-/**
  * Individual Channel Stream
  */
 typedef struct {
@@ -159,10 +145,6 @@ typedef struct {
     int num_swb;                ///< number of scalefactor window bands
     int num_windows;
     int tns_max_bands;
-    int predictor_present;
-    int predictor_initialized;
-    int predictor_reset_group;
-    uint8_t prediction_used[41];
 } IndividualChannelStream;
 
 /**
@@ -225,7 +207,6 @@ typedef struct {
     DECLARE_ALIGNED_16(float, coeffs[1024]);  ///< coefficients for IMDCT
     DECLARE_ALIGNED_16(float, saved[512]);    ///< overlap
     DECLARE_ALIGNED_16(float, ret[1024]);     ///< PCM output
-    PredictorState predictor_state[MAX_PREDICTORS];
 } SingleChannelElement;
 
 /**
@@ -288,7 +269,6 @@ typedef struct {
     int sf_offset;                                    ///< offset into pow2sf_tab as appropriate for dsp.float_to_int16
     /** @} */
 
-    DECLARE_ALIGNED(16, float, temp[128]);
 } AACContext;
 
 #endif /* AVCODEC_AAC_H */
diff --git a/libavcodec/aac_ac3_parser.h b/libavcodec/aac_ac3_parser.h
index b8613d8..b2fc0af 100644
--- a/libavcodec/aac_ac3_parser.h
+++ b/libavcodec/aac_ac3_parser.h
@@ -27,16 +27,6 @@
 #include "avcodec.h"
 #include "parser.h"
 
-typedef enum {
-    AAC_AC3_PARSE_ERROR_SYNC        = -1,
-    AAC_AC3_PARSE_ERROR_BSID        = -2,
-    AAC_AC3_PARSE_ERROR_SAMPLE_RATE = -3,
-    AAC_AC3_PARSE_ERROR_FRAME_SIZE  = -4,
-    AAC_AC3_PARSE_ERROR_FRAME_TYPE  = -5,
-    AAC_AC3_PARSE_ERROR_CRC         = -6,
-    AAC_AC3_PARSE_ERROR_CHANNEL_CFG = -7,
-} AACAC3ParseError;
-
 typedef struct AACAC3ParseContext {
     ParseContext pc;
     int frame_size;
diff --git a/libavcodec/aac_parser.c b/libavcodec/aac_parser.c
index e38b5ec..1d75e1e 100644
--- a/libavcodec/aac_parser.c
+++ b/libavcodec/aac_parser.c
@@ -22,80 +22,55 @@
 
 #include "parser.h"
 #include "aac_ac3_parser.h"
-#include "aac_parser.h"
 #include "bitstream.h"
 #include "mpeg4audio.h"
 
 #define AAC_HEADER_SIZE 7
 
-int ff_aac_parse_header(GetBitContext *gbc, AACADTSHeaderInfo *hdr)
+static int aac_sync(uint64_t state, AACAC3ParseContext *hdr_info,
+        int *need_next_header, int *new_frame_start)
 {
+    GetBitContext bits;
     int size, rdb, ch, sr;
-    int aot, crc_abs;
+    uint8_t tmp[8];
 
-    if(get_bits(gbc, 12) != 0xfff)
-        return AAC_AC3_PARSE_ERROR_SYNC;
+    AV_WB64(tmp, state);
+    init_get_bits(&bits, tmp+8-AAC_HEADER_SIZE, AAC_HEADER_SIZE * 8);
 
-    skip_bits1(gbc);             /* id */
-    skip_bits(gbc, 2);           /* layer */
-    crc_abs = get_bits1(gbc);    /* protection_absent */
-    aot     = get_bits(gbc, 2);  /* profile_objecttype */
-    sr      = get_bits(gbc, 4);  /* sample_frequency_index */
-    if(!ff_mpeg4audio_sample_rates[sr])
-        return AAC_AC3_PARSE_ERROR_SAMPLE_RATE;
-    skip_bits1(gbc);             /* private_bit */
-    ch      = get_bits(gbc, 3);  /* channel_configuration */
+    if(get_bits(&bits, 12) != 0xfff)
+        return 0;
 
+    skip_bits1(&bits);          /* id */
+    skip_bits(&bits, 2);        /* layer */
+    skip_bits1(&bits);          /* protection_absent */
+    skip_bits(&bits, 2);        /* profile_objecttype */
+    sr = get_bits(&bits, 4);    /* sample_frequency_index */
+    if(!ff_mpeg4audio_sample_rates[sr])
+        return 0;
+    skip_bits1(&bits);          /* private_bit */
+    ch = get_bits(&bits, 3);    /* channel_configuration */
     if(!ff_mpeg4audio_channels[ch])
-        return AAC_AC3_PARSE_ERROR_CHANNEL_CFG;
-
-    skip_bits1(gbc);             /* original/copy */
-    skip_bits1(gbc);             /* home */
+        return 0;
+    skip_bits1(&bits);          /* original/copy */
+    skip_bits1(&bits);          /* home */
 
     /* adts_variable_header */
-    skip_bits1(gbc);             /* copyright_identification_bit */
-    skip_bits1(gbc);             /* copyright_identification_start */
-    size    = get_bits(gbc, 13); /* aac_frame_length */
+    skip_bits1(&bits);          /* copyright_identification_bit */
+    skip_bits1(&bits);          /* copyright_identification_start */
+    size = get_bits(&bits, 13); /* aac_frame_length */
     if(size < AAC_HEADER_SIZE)
-        return AAC_AC3_PARSE_ERROR_FRAME_SIZE;
-
-    skip_bits(gbc, 11);          /* adts_buffer_fullness */
-    rdb = get_bits(gbc, 2);      /* number_of_raw_data_blocks_in_frame */
-
-    hdr->object_type    = aot;
-    hdr->chan_config    = ch;
-    hdr->crc_absent     = crc_abs;
-    hdr->num_aac_frames = rdb + 1;
-    hdr->sampling_index = sr;
-    hdr->sample_rate    = ff_mpeg4audio_sample_rates[sr];
-    hdr->samples        = (rdb + 1) * 1024;
-    hdr->bit_rate       = size * 8 * hdr->sample_rate / hdr->samples;
-
-    return size;
-}
+        return 0;
 
-static int aac_sync(uint64_t state, AACAC3ParseContext *hdr_info,
-        int *need_next_header, int *new_frame_start)
-{
-    GetBitContext bits;
-    AACADTSHeaderInfo hdr;
-    int size;
-    union {
-        uint64_t u64;
-        uint8_t  u8[8];
-    } tmp;
+    skip_bits(&bits, 11);       /* adts_buffer_fullness */
+    rdb = get_bits(&bits, 2);   /* number_of_raw_data_blocks_in_frame */
 
-    tmp.u64 = be2me_64(state);
-    init_get_bits(&bits, tmp.u8+8-AAC_HEADER_SIZE, AAC_HEADER_SIZE * 8);
+    hdr_info->channels = ff_mpeg4audio_channels[ch];
+    hdr_info->sample_rate = ff_mpeg4audio_sample_rates[sr];
+    hdr_info->samples = (rdb + 1) * 1024;
+    hdr_info->bit_rate = size * 8 * hdr_info->sample_rate / hdr_info->samples;
 
-    if ((size = ff_aac_parse_header(&bits, &hdr)) < 0)
-        return 0;
     *need_next_header = 0;
     *new_frame_start  = 1;
-    hdr_info->sample_rate = hdr.sample_rate;
-    hdr_info->channels    = ff_mpeg4audio_channels[hdr.chan_config];
-    hdr_info->samples     = hdr.samples;
-    hdr_info->bit_rate    = hdr.bit_rate;
     return size;
 }
 
diff --git a/libavcodec/aac_parser.h b/libavcodec/aac_parser.h
deleted file mode 100644
index efc4678..0000000
--- a/libavcodec/aac_parser.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * AAC parser prototypes
- * Copyright (c) 2003 Fabrice Bellard
- * Copyright (c) 2003 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
- */
-
-#ifndef AVCODEC_AAC_PARSER_H
-#define AVCODEC_AAC_PARSER_H
-
-#include <stdint.h>
-#include "aac_ac3_parser.h"
-#include "bitstream.h"
-
-typedef struct {
-    uint32_t sample_rate;
-    uint32_t samples;
-    uint32_t bit_rate;
-    uint8_t  crc_absent;
-    uint8_t  object_type;
-    uint8_t  sampling_index;
-    uint8_t  chan_config;
-    uint8_t  num_aac_frames;
-} AACADTSHeaderInfo;
-
-/**
- * Parses AAC frame header.
- * Parses the ADTS frame header to the end of the variable header, which is
- * the first 54 bits.
- * @param gbc[in] BitContext containing the first 54 bits of the frame.
- * @param hdr[out] Pointer to struct where header info is written.
- * @return Returns 0 on success, -1 if there is a sync word mismatch,
- * -2 if the version element is invalid, -3 if the sample rate
- * element is invalid, or -4 if the bit rate element is invalid.
- */
-int ff_aac_parse_header(GetBitContext *gbc, AACADTSHeaderInfo *hdr);
-
-#endif /* AVCODEC_AAC_PARSER_H */
diff --git a/libavcodec/aactab.c b/libavcodec/aactab.c
index 3eab636..0a8b032 100644
--- a/libavcodec/aactab.c
+++ b/libavcodec/aactab.c
@@ -43,10 +43,6 @@ const uint8_t ff_aac_num_swb_128[] = {
     12, 12, 12, 14, 14, 14, 15, 15, 15, 15, 15, 15
 };
 
-const uint8_t ff_aac_pred_sfb_max[] = {
-    33, 33, 38, 40, 40, 40, 41, 41, 37, 37, 37, 34
-};
-
 const uint32_t ff_aac_scalefactor_code[121] = {
     0x3ffe8, 0x3ffe6, 0x3ffe7, 0x3ffe5, 0x7fff5, 0x7fff1, 0x7ffed, 0x7fff6,
     0x7ffee, 0x7ffef, 0x7fff0, 0x7fffc, 0x7fffd, 0x7ffff, 0x7fffe, 0x7fff7,
diff --git a/libavcodec/aactab.h b/libavcodec/aactab.h
index 07574d8..f019f7e 100644
--- a/libavcodec/aactab.h
+++ b/libavcodec/aactab.h
@@ -54,8 +54,6 @@ extern const uint8_t ff_aac_num_swb_1024[];
 extern const uint8_t ff_aac_num_swb_128 [];
 // @}
 
-extern const uint8_t ff_aac_pred_sfb_max [];
-
 extern const uint32_t ff_aac_scalefactor_code[121];
 extern const uint8_t  ff_aac_scalefactor_bits[121];
 
diff --git a/libavcodec/aandcttab.c b/libavcodec/aandcttab.c
deleted file mode 100644
index 4097067..0000000
--- a/libavcodec/aandcttab.c
+++ /dev/null
@@ -1,47 +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 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 aandcttab.c
- * AAN (Arai Agui Aakajima) (I)DCT tables
- */
-
-#include <stdint.h>
-
-const uint16_t ff_aanscales[64] = {
-    /* precomputed values scaled up by 14 bits */
-    16384, 22725, 21407, 19266, 16384, 12873,  8867,  4520,
-    22725, 31521, 29692, 26722, 22725, 17855, 12299,  6270,
-    21407, 29692, 27969, 25172, 21407, 16819, 11585,  5906,
-    19266, 26722, 25172, 22654, 19266, 15137, 10426,  5315,
-    16384, 22725, 21407, 19266, 16384, 12873,  8867,  4520,
-    12873, 17855, 16819, 15137, 12873, 10114,  6967,  3552,
-    8867 , 12299, 11585, 10426,  8867,  6967,  4799,  2446,
-    4520 ,  6270,  5906,  5315,  4520,  3552,  2446,  1247
-};
-
-const uint16_t ff_inv_aanscales[64] = {
-  4096,  2953,  3135,  3483,  4096,  5213,  7568, 14846,
-  2953,  2129,  2260,  2511,  2953,  3759,  5457, 10703,
-  3135,  2260,  2399,  2666,  3135,  3990,  5793, 11363,
-  3483,  2511,  2666,  2962,  3483,  4433,  6436, 12625,
-  4096,  2953,  3135,  3483,  4096,  5213,  7568, 14846,
-  5213,  3759,  3990,  4433,  5213,  6635,  9633, 18895,
-  7568,  5457,  5793,  6436,  7568,  9633, 13985, 27432,
- 14846, 10703, 11363, 12625, 14846, 18895, 27432, 53809,
-};
diff --git a/libavcodec/aandcttab.h b/libavcodec/aandcttab.h
deleted file mode 100644
index 03bb8b5..0000000
--- a/libavcodec/aandcttab.h
+++ /dev/null
@@ -1,32 +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 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 aandcttab.h
- * AAN (Arai Agui Nakajima) (I)DCT tables
- */
-
-#ifndef AVCODEC_AANDCTTAB_H
-#define AVCODEC_AANDCTTAB_H
-
-#include <stdint.h>
-
-extern const uint16_t ff_aanscales[64];
-extern const uint16_t ff_inv_aanscales[64];
-
-#endif /* AVCODEC_AANDCTTAB_H */
diff --git a/libavcodec/aasc.c b/libavcodec/aasc.c
index fa32231..77162f9 100644
--- a/libavcodec/aasc.c
+++ b/libavcodec/aasc.c
@@ -62,7 +62,6 @@ static int aasc_decode_frame(AVCodecContext *avctx,
                               const uint8_t *buf, int buf_size)
 {
     AascContext *s = avctx->priv_data;
-    int compr, i, stride;
 
     s->frame.reference = 1;
     s->frame.buffer_hints = FF_BUFFER_HINTS_VALID | FF_BUFFER_HINTS_PRESERVE | FF_BUFFER_HINTS_REUSABLE;
@@ -71,24 +70,7 @@ static int aasc_decode_frame(AVCodecContext *avctx,
         return -1;
     }
 
-    compr = AV_RL32(buf);
-    buf += 4;
-    buf_size -= 4;
-    switch(compr){
-    case 0:
-        stride = (avctx->width * 3 + 3) & ~3;
-        for(i = avctx->height - 1; i >= 0; i--){
-            memcpy(s->frame.data[0] + i*s->frame.linesize[0], buf, avctx->width*3);
-            buf += stride;
-        }
-        break;
-    case 1:
-        ff_msrle_decode(avctx, &s->frame, 8, buf - 4, buf_size + 4);
-        break;
-    default:
-        av_log(avctx, AV_LOG_ERROR, "Unknown compression type %d\n", compr);
-        return -1;
-    }
+    ff_msrle_decode(avctx, &s->frame, 8, buf, buf_size);
 
     *data_size = sizeof(AVFrame);
     *(AVFrame*)data = s->frame;
diff --git a/libavcodec/ac3.c b/libavcodec/ac3.c
index cb1a147..e4117f1 100644
--- a/libavcodec/ac3.c
+++ b/libavcodec/ac3.c
@@ -80,11 +80,11 @@ void ff_ac3_bit_alloc_calc_psd(int8_t *exp, int start, int end, int16_t *psd,
     } while (end > band_start_tab[k]);
 }
 
-int ff_ac3_bit_alloc_calc_mask(AC3BitAllocParameters *s, int16_t *band_psd,
-                               int start, int end, int fast_gain, int is_lfe,
-                               int dba_mode, int dba_nsegs, uint8_t *dba_offsets,
-                               uint8_t *dba_lengths, uint8_t *dba_values,
-                               int16_t *mask)
+void ff_ac3_bit_alloc_calc_mask(AC3BitAllocParameters *s, int16_t *band_psd,
+                                int start, int end, int fast_gain, int is_lfe,
+                                int dba_mode, int dba_nsegs, uint8_t *dba_offsets,
+                                uint8_t *dba_lengths, uint8_t *dba_values,
+                                int16_t *mask)
 {
     int16_t excite[50]; /* excitation */
     int bin, k;
@@ -156,13 +156,9 @@ int ff_ac3_bit_alloc_calc_mask(AC3BitAllocParameters *s, int16_t *band_psd,
 
     if (dba_mode == DBA_REUSE || dba_mode == DBA_NEW) {
         int band, seg, delta;
-        if (dba_nsegs >= 8)
-            return -1;
         band = 0;
-        for (seg = 0; seg < dba_nsegs; seg++) {
-            band += dba_offsets[seg];
-            if (band >= 50 || dba_lengths[seg] > 50-band)
-                return -1;
+        for (seg = 0; seg < FFMIN(8, dba_nsegs); seg++) {
+            band = FFMIN(49, band + dba_offsets[seg]);
             if (dba_values[seg] >= 4) {
                 delta = (dba_values[seg] - 3) << 7;
             } else {
@@ -174,7 +170,6 @@ int ff_ac3_bit_alloc_calc_mask(AC3BitAllocParameters *s, int16_t *band_psd,
             }
         }
     }
-    return 0;
 }
 
 void ff_ac3_bit_alloc_calc_bap(int16_t *mask, int16_t *psd, int start, int end,
diff --git a/libavcodec/ac3.h b/libavcodec/ac3.h
index cbbb718..1f5a711 100644
--- a/libavcodec/ac3.h
+++ b/libavcodec/ac3.h
@@ -149,13 +149,12 @@ void ff_ac3_bit_alloc_calc_psd(int8_t *exp, int start, int end, int16_t *psd,
  * @param[in]  dba_lengths  length of each segment
  * @param[in]  dba_values   delta bit allocation for each segment
  * @param[out] mask         calculated masking curve
- * @return returns 0 for success, non-zero for error
  */
-int ff_ac3_bit_alloc_calc_mask(AC3BitAllocParameters *s, int16_t *band_psd,
-                               int start, int end, int fast_gain, int is_lfe,
-                               int dba_mode, int dba_nsegs, uint8_t *dba_offsets,
-                               uint8_t *dba_lengths, uint8_t *dba_values,
-                               int16_t *mask);
+void ff_ac3_bit_alloc_calc_mask(AC3BitAllocParameters *s, int16_t *band_psd,
+                                int start, int end, int fast_gain, int is_lfe,
+                                int dba_mode, int dba_nsegs, uint8_t *dba_offsets,
+                                uint8_t *dba_lengths, uint8_t *dba_values,
+                                int16_t *mask);
 
 /**
  * Calculates bit allocation pointers.
diff --git a/libavcodec/ac3_parser.c b/libavcodec/ac3_parser.c
index f47f97d..aedcbcd 100644
--- a/libavcodec/ac3_parser.c
+++ b/libavcodec/ac3_parser.c
@@ -42,12 +42,12 @@ int ff_ac3_parse_header(GetBitContext *gbc, AC3HeaderInfo *hdr)
 
     hdr->sync_word = get_bits(gbc, 16);
     if(hdr->sync_word != 0x0B77)
-        return AAC_AC3_PARSE_ERROR_SYNC;
+        return AC3_PARSE_ERROR_SYNC;
 
     /* read ahead to bsid to distinguish between AC-3 and E-AC-3 */
     hdr->bitstream_id = show_bits_long(gbc, 29) & 0x1F;
     if(hdr->bitstream_id > 16)
-        return AAC_AC3_PARSE_ERROR_BSID;
+        return AC3_PARSE_ERROR_BSID;
 
     hdr->num_blocks = 6;
 
@@ -60,11 +60,11 @@ int ff_ac3_parse_header(GetBitContext *gbc, AC3HeaderInfo *hdr)
         hdr->crc1 = get_bits(gbc, 16);
         hdr->sr_code = get_bits(gbc, 2);
         if(hdr->sr_code == 3)
-            return AAC_AC3_PARSE_ERROR_SAMPLE_RATE;
+            return AC3_PARSE_ERROR_SAMPLE_RATE;
 
         frame_size_code = get_bits(gbc, 6);
         if(frame_size_code > 37)
-            return AAC_AC3_PARSE_ERROR_FRAME_SIZE;
+            return AC3_PARSE_ERROR_FRAME_SIZE;
 
         skip_bits(gbc, 5); // skip bsid, already got it
 
@@ -93,19 +93,19 @@ int ff_ac3_parse_header(GetBitContext *gbc, AC3HeaderInfo *hdr)
         hdr->crc1 = 0;
         hdr->frame_type = get_bits(gbc, 2);
         if(hdr->frame_type == EAC3_FRAME_TYPE_RESERVED)
-            return AAC_AC3_PARSE_ERROR_FRAME_TYPE;
+            return AC3_PARSE_ERROR_FRAME_TYPE;
 
         hdr->substreamid = get_bits(gbc, 3);
 
         hdr->frame_size = (get_bits(gbc, 11) + 1) << 1;
         if(hdr->frame_size < AC3_HEADER_SIZE)
-            return AAC_AC3_PARSE_ERROR_FRAME_SIZE;
+            return AC3_PARSE_ERROR_FRAME_SIZE;
 
         hdr->sr_code = get_bits(gbc, 2);
         if (hdr->sr_code == 3) {
             int sr_code2 = get_bits(gbc, 2);
             if(sr_code2 == 3)
-                return AAC_AC3_PARSE_ERROR_SAMPLE_RATE;
+                return AC3_PARSE_ERROR_SAMPLE_RATE;
             hdr->sample_rate = ff_ac3_sample_rate_tab[sr_code2] / 2;
             hdr->sr_shift = 1;
         } else {
@@ -158,14 +158,11 @@ static int ac3_sync(uint64_t state, AACAC3ParseContext *hdr_info,
         int *need_next_header, int *new_frame_start)
 {
     int err;
-    union {
-        uint64_t u64;
-        uint8_t  u8[8];
-    } tmp = { be2me_64(state) };
+    uint64_t tmp = be2me_64(state);
     AC3HeaderInfo hdr;
     GetBitContext gbc;
 
-    init_get_bits(&gbc, tmp.u8+8-AC3_HEADER_SIZE, 54);
+    init_get_bits(&gbc, ((uint8_t *)&tmp)+8-AC3_HEADER_SIZE, 54);
     err = ff_ac3_parse_header(&gbc, &hdr);
 
     if(err < 0)
diff --git a/libavcodec/ac3_parser.h b/libavcodec/ac3_parser.h
index 0f8fc6d..fc17e87 100644
--- a/libavcodec/ac3_parser.h
+++ b/libavcodec/ac3_parser.h
@@ -26,6 +26,15 @@
 #include "ac3.h"
 #include "bitstream.h"
 
+typedef enum {
+    AC3_PARSE_ERROR_SYNC        = -1,
+    AC3_PARSE_ERROR_BSID        = -2,
+    AC3_PARSE_ERROR_SAMPLE_RATE = -3,
+    AC3_PARSE_ERROR_FRAME_SIZE  = -4,
+    AC3_PARSE_ERROR_FRAME_TYPE  = -5,
+    AC3_PARSE_ERROR_CRC         = -6,
+} AC3ParseError;
+
 /**
  * Parses AC-3 frame header.
  * Parses the header up to the lfeon element, which is the first 52 or 54 bits
diff --git a/libavcodec/ac3dec.c b/libavcodec/ac3dec.c
index 74c8748..5e568a9 100644
--- a/libavcodec/ac3dec.c
+++ b/libavcodec/ac3dec.c
@@ -35,8 +35,6 @@
 #include <string.h>
 
 #include "libavutil/crc.h"
-#include "internal.h"
-#include "aac_ac3_parser.h"
 #include "ac3_parser.h"
 #include "ac3dec.h"
 #include "ac3dec_data.h"
@@ -374,8 +372,8 @@ static void set_downmix_coeffs(AC3DecodeContext *s)
  * Decode the grouped exponents according to exponent strategy.
  * reference: Section 7.1.3 Exponent Decoding
  */
-static int decode_exponents(GetBitContext *gbc, int exp_strategy, int ngrps,
-                            uint8_t absexp, int8_t *dexps)
+static void decode_exponents(GetBitContext *gbc, int exp_strategy, int ngrps,
+                             uint8_t absexp, int8_t *dexps)
 {
     int i, j, grp, group_size;
     int dexp[256];
@@ -392,18 +390,12 @@ static int decode_exponents(GetBitContext *gbc, int exp_strategy, int ngrps,
 
     /* convert to absolute exps and expand groups */
     prevexp = absexp;
-    for(i=0,j=0; i<ngrps*3; i++) {
-        prevexp += dexp[i] - 2;
-        if (prevexp > 24U)
-            return -1;
-        switch (group_size) {
-            case 4: dexps[j++] = prevexp;
-                    dexps[j++] = prevexp;
-            case 2: dexps[j++] = prevexp;
-            case 1: dexps[j++] = prevexp;
+    for(i=0; i<ngrps*3; i++) {
+        prevexp = av_clip(prevexp + dexp[i]-2, 0, 24);
+        for(j=0; j<group_size; j++) {
+            dexps[(i*group_size)+j] = prevexp;
         }
     }
-    return 0;
 }
 
 /**
@@ -719,69 +711,6 @@ static void ac3_upmix_delay(AC3DecodeContext *s)
 }
 
 /**
- * Decode band structure for coupling, spectral extension, or enhanced coupling.
- * @param[in] gbc bit reader context
- * @param[in] blk block number
- * @param[in] eac3 flag to indicate E-AC-3
- * @param[in] ecpl flag to indicate enhanced coupling
- * @param[in] start_subband subband number for start of range
- * @param[in] end_subband subband number for end of range
- * @param[in] default_band_struct default band structure table
- * @param[out] band_struct decoded band structure
- * @param[out] num_subbands number of subbands (optionally NULL)
- * @param[out] num_bands number of bands (optionally NULL)
- * @param[out] band_sizes array containing the number of bins in each band (optionally NULL)
- */
-static void decode_band_structure(GetBitContext *gbc, int blk, int eac3,
-                                  int ecpl, int start_subband, int end_subband,
-                                  const uint8_t *default_band_struct,
-                                  uint8_t *band_struct, int *num_subbands,
-                                  int *num_bands, uint8_t *band_sizes)
-{
-    int subbnd, bnd, n_subbands, n_bands=0;
-    uint8_t bnd_sz[22];
-
-    n_subbands = end_subband - start_subband;
-
-    /* decode band structure from bitstream or use default */
-    if (!eac3 || get_bits1(gbc)) {
-        for (subbnd = 0; subbnd < n_subbands - 1; subbnd++) {
-            band_struct[subbnd] = get_bits1(gbc);
-        }
-    } else if (!blk) {
-        memcpy(band_struct,
-               &default_band_struct[start_subband+1],
-               n_subbands-1);
-    }
-    band_struct[n_subbands-1] = 0;
-
-    /* calculate number of bands and band sizes based on band structure.
-       note that the first 4 subbands in enhanced coupling span only 6 bins
-       instead of 12. */
-    if (num_bands || band_sizes ) {
-        n_bands = n_subbands;
-        bnd_sz[0] = ecpl ? 6 : 12;
-        for (bnd = 0, subbnd = 1; subbnd < n_subbands; subbnd++) {
-            int subbnd_size = (ecpl && subbnd < 4) ? 6 : 12;
-            if (band_struct[subbnd-1]) {
-                n_bands--;
-                bnd_sz[bnd] += subbnd_size;
-            } else {
-                bnd_sz[++bnd] = subbnd_size;
-            }
-        }
-    }
-
-    /* set optional output params */
-    if (num_subbands)
-        *num_subbands = n_subbands;
-    if (num_bands)
-        *num_bands = n_bands;
-    if (band_sizes)
-        memcpy(band_sizes, bnd_sz, n_bands);
-}
-
-/**
  * Decode a single audio block from the AC-3 bitstream.
  */
 static int decode_audio_block(AC3DecodeContext *s, int blk)
@@ -828,7 +757,7 @@ static int decode_audio_block(AC3DecodeContext *s, int blk)
     /* spectral extension strategy */
     if (s->eac3 && (!blk || get_bits1(gbc))) {
         if (get_bits1(gbc)) {
-            ff_log_missing_feature(s->avctx, "Spectral extension", 1);
+            av_log_missing_feature(s->avctx, "Spectral extension", 1);
             return -1;
         }
         /* TODO: parse spectral extension strategy info */
@@ -843,7 +772,7 @@ static int decode_audio_block(AC3DecodeContext *s, int blk)
             s->cpl_in_use[blk] = get_bits1(gbc);
         if (s->cpl_in_use[blk]) {
             /* coupling in use */
-            int cpl_start_subband, cpl_end_subband;
+            int cpl_begin_freq, cpl_end_freq;
 
             if (channel_mode < AC3_CHMODE_STEREO) {
                 av_log(s->avctx, AV_LOG_ERROR, "coupling not allowed in mono or dual-mono\n");
@@ -853,7 +782,7 @@ static int decode_audio_block(AC3DecodeContext *s, int blk)
             /* check for enhanced coupling */
             if (s->eac3 && get_bits1(gbc)) {
                 /* TODO: parse enhanced coupling strategy info */
-                ff_log_missing_feature(s->avctx, "Enhanced coupling", 1);
+                av_log_missing_feature(s->avctx, "Enhanced coupling", 1);
                 return -1;
             }
 
@@ -872,22 +801,32 @@ static int decode_audio_block(AC3DecodeContext *s, int blk)
 
             /* coupling frequency range */
             /* TODO: modify coupling end freq if spectral extension is used */
-            cpl_start_subband = get_bits(gbc, 4);
-            cpl_end_subband   = get_bits(gbc, 4) + 3;
-            s->num_cpl_subbands = cpl_end_subband - cpl_start_subband;
-            if (s->num_cpl_subbands < 0) {
-                av_log(s->avctx, AV_LOG_ERROR, "invalid coupling range (%d > %d)\n",
-                       cpl_start_subband, cpl_end_subband);
+            cpl_begin_freq = get_bits(gbc, 4);
+            cpl_end_freq = get_bits(gbc, 4);
+            if (3 + cpl_end_freq - cpl_begin_freq < 0) {
+                av_log(s->avctx, AV_LOG_ERROR, "3+cplendf = %d < cplbegf = %d\n", 3+cpl_end_freq, cpl_begin_freq);
                 return -1;
             }
-            s->start_freq[CPL_CH] = cpl_start_subband * 12 + 37;
-            s->end_freq[CPL_CH]   = cpl_end_subband   * 12 + 37;
-
-           decode_band_structure(gbc, blk, s->eac3, 0,
-                                 cpl_start_subband, cpl_end_subband,
-                                 ff_eac3_default_cpl_band_struct,
-                                 s->cpl_band_struct, &s->num_cpl_subbands,
-                                 &s->num_cpl_bands, NULL);
+            s->num_cpl_bands = s->num_cpl_subbands = 3 + cpl_end_freq - cpl_begin_freq;
+            s->start_freq[CPL_CH] = cpl_begin_freq * 12 + 37;
+            s->end_freq[CPL_CH] = cpl_end_freq * 12 + 73;
+
+            /* coupling band structure */
+            if (!s->eac3 || get_bits1(gbc)) {
+                for (bnd = 0; bnd < s->num_cpl_subbands - 1; bnd++) {
+                    s->cpl_band_struct[bnd] = get_bits1(gbc);
+                }
+            } else if (!blk) {
+                memcpy(s->cpl_band_struct,
+                       &ff_eac3_default_cpl_band_struct[cpl_begin_freq+1],
+                       s->num_cpl_subbands-1);
+            }
+            s->cpl_band_struct[s->num_cpl_subbands-1] = 0;
+
+            /* calculate number of coupling bands based on band structure */
+            for (bnd = 0; bnd < s->num_cpl_subbands-1; bnd++) {
+                s->num_cpl_bands -= s->cpl_band_struct[bnd];
+            }
         } else {
             /* coupling not in use */
             for (ch = 1; ch <= fbw_channels; ch++) {
@@ -977,7 +916,7 @@ static int decode_audio_block(AC3DecodeContext *s, int blk)
             else {
                 int bandwidth_code = get_bits(gbc, 6);
                 if (bandwidth_code > 60) {
-                    av_log(s->avctx, AV_LOG_ERROR, "bandwidth code = %d > 60\n", bandwidth_code);
+                    av_log(s->avctx, AV_LOG_ERROR, "bandwidth code = %d > 60", bandwidth_code);
                     return -1;
                 }
                 s->end_freq[ch] = bandwidth_code * 3 + 73;
@@ -997,12 +936,9 @@ static int decode_audio_block(AC3DecodeContext *s, int blk)
     for (ch = !cpl_in_use; ch <= s->channels; ch++) {
         if (s->exp_strategy[blk][ch] != EXP_REUSE) {
             s->dexps[ch][0] = get_bits(gbc, 4) << !ch;
-            if (decode_exponents(gbc, s->exp_strategy[blk][ch],
-                                 s->num_exp_groups[ch], s->dexps[ch][0],
-                                 &s->dexps[ch][s->start_freq[ch]+!!ch])) {
-                av_log(s->avctx, AV_LOG_ERROR, "exponent out-of-range\n");
-                return -1;
-            }
+            decode_exponents(gbc, s->exp_strategy[blk][ch],
+                             s->num_exp_groups[ch], s->dexps[ch][0],
+                             &s->dexps[ch][s->start_freq[ch]+!!ch]);
             if(ch != CPL_CH && ch != s->lfe_ch)
                 skip_bits(gbc, 2); /* skip gainrng */
         }
@@ -1135,15 +1071,12 @@ static int decode_audio_block(AC3DecodeContext *s, int blk)
         if(bit_alloc_stages[ch] > 1) {
             /* Compute excitation function, Compute masking curve, and
                Apply delta bit allocation */
-            if (ff_ac3_bit_alloc_calc_mask(&s->bit_alloc_params, s->band_psd[ch],
-                                           s->start_freq[ch], s->end_freq[ch],
-                                           s->fast_gain[ch], (ch == s->lfe_ch),
-                                           s->dba_mode[ch], s->dba_nsegs[ch],
-                                           s->dba_offsets[ch], s->dba_lengths[ch],
-                                           s->dba_values[ch], s->mask[ch])) {
-                av_log(s->avctx, AV_LOG_ERROR, "error in bit allocation\n");
-                return -1;
-            }
+            ff_ac3_bit_alloc_calc_mask(&s->bit_alloc_params, s->band_psd[ch],
+                                       s->start_freq[ch], s->end_freq[ch],
+                                       s->fast_gain[ch], (ch == s->lfe_ch),
+                                       s->dba_mode[ch], s->dba_nsegs[ch],
+                                       s->dba_offsets[ch], s->dba_lengths[ch],
+                                       s->dba_values[ch], s->mask[ch]);
         }
         if(bit_alloc_stages[ch] > 0) {
             /* Compute bit allocation */
@@ -1249,32 +1182,32 @@ static int ac3_decode_frame(AVCodecContext * avctx, void *data, int *data_size,
     /* check that reported frame size fits in input buffer */
     if(s->frame_size > buf_size) {
         av_log(avctx, AV_LOG_ERROR, "incomplete frame\n");
-        err = AAC_AC3_PARSE_ERROR_FRAME_SIZE;
+        err = AC3_PARSE_ERROR_FRAME_SIZE;
     }
 
     /* check for crc mismatch */
-    if(err != AAC_AC3_PARSE_ERROR_FRAME_SIZE && avctx->error_recognition >= FF_ER_CAREFUL) {
+    if(err != AC3_PARSE_ERROR_FRAME_SIZE && avctx->error_recognition >= FF_ER_CAREFUL) {
         if(av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, &buf[2], s->frame_size-2)) {
             av_log(avctx, AV_LOG_ERROR, "frame CRC mismatch\n");
-            err = AAC_AC3_PARSE_ERROR_CRC;
+            err = AC3_PARSE_ERROR_CRC;
         }
     }
 
-    if(err && err != AAC_AC3_PARSE_ERROR_CRC) {
+    if(err && err != AC3_PARSE_ERROR_CRC) {
         switch(err) {
-            case AAC_AC3_PARSE_ERROR_SYNC:
+            case AC3_PARSE_ERROR_SYNC:
                 av_log(avctx, AV_LOG_ERROR, "frame sync error\n");
                 return -1;
-            case AAC_AC3_PARSE_ERROR_BSID:
+            case AC3_PARSE_ERROR_BSID:
                 av_log(avctx, AV_LOG_ERROR, "invalid bitstream id\n");
                 break;
-            case AAC_AC3_PARSE_ERROR_SAMPLE_RATE:
+            case AC3_PARSE_ERROR_SAMPLE_RATE:
                 av_log(avctx, AV_LOG_ERROR, "invalid sample rate\n");
                 break;
-            case AAC_AC3_PARSE_ERROR_FRAME_SIZE:
+            case AC3_PARSE_ERROR_FRAME_SIZE:
                 av_log(avctx, AV_LOG_ERROR, "invalid frame size\n");
                 break;
-            case AAC_AC3_PARSE_ERROR_FRAME_TYPE:
+            case AC3_PARSE_ERROR_FRAME_TYPE:
                 /* skip frame if CRC is ok. otherwise use error concealment. */
                 /* TODO: add support for substreams and dependent frames */
                 if(s->frame_type == EAC3_FRAME_TYPE_DEPENDENT || s->substreamid) {
@@ -1323,7 +1256,6 @@ static int ac3_decode_frame(AVCodecContext * avctx, void *data, int *data_size,
         const float *output[s->out_channels];
         if (!err && decode_audio_block(s, blk)) {
             av_log(avctx, AV_LOG_ERROR, "error decoding the audio block\n");
-            err = 1;
         }
         for (ch = 0; ch < s->out_channels; ch++)
             output[ch] = s->output[ch];
diff --git a/libavcodec/acelp_pitch_delay.c b/libavcodec/acelp_pitch_delay.c
index ac929c4..3db5ea3 100644
--- a/libavcodec/acelp_pitch_delay.c
+++ b/libavcodec/acelp_pitch_delay.c
@@ -21,7 +21,6 @@
  */
 
 #include "avcodec.h"
-#include "dsputil.h"
 #include "acelp_pitch_delay.h"
 #include "celp_math.h"
 
@@ -88,7 +87,6 @@ void ff_acelp_update_past_gain(
 }
 
 int16_t ff_acelp_decode_gain_code(
-    DSPContext *dsp,
     int gain_corr_factor,
     const int16_t* fc_v,
     int mr_energy,
@@ -105,7 +103,7 @@ int16_t ff_acelp_decode_gain_code(
         mr_energy += quant_energy[i] * ma_prediction_coeff[i];
 
 #ifdef G729_BITEXACT
-    mr_energy += (((-6165LL * ff_log2(dsp->scalarproduct_int16(fc_v, fc_v, subframe_size, 0))) >> 3) & ~0x3ff);
+    mr_energy += (((-6165LL * ff_log2(dot_product(fc_v, fc_v, subframe_size, 0))) >> 3) & ~0x3ff);
 
     mr_energy = (5439 * (mr_energy >> 15)) >> 8;           // (0.15) = (0.15) * (7.23)
 
@@ -115,7 +113,7 @@ int16_t ff_acelp_decode_gain_code(
            );
 #else
     mr_energy = gain_corr_factor * exp(M_LN10 / (20 << 23) * mr_energy) /
-                sqrt(dsp->scalarproduct_int16(fc_v, fc_v, subframe_size, 0));
+                sqrt(dot_product(fc_v, fc_v, subframe_size, 0));
     return mr_energy >> 12;
 #endif
 }
diff --git a/libavcodec/acelp_pitch_delay.h b/libavcodec/acelp_pitch_delay.h
index 2504a9e..be5ac09 100644
--- a/libavcodec/acelp_pitch_delay.h
+++ b/libavcodec/acelp_pitch_delay.h
@@ -24,7 +24,6 @@
 #define AVCODEC_ACELP_PITCH_DELAY_H
 
 #include <stdint.h>
-#include "dsputil.h"
 
 #define PITCH_DELAY_MIN             20
 #define PITCH_DELAY_MAX             143
@@ -141,7 +140,6 @@ void ff_acelp_update_past_gain(
 /**
  * \brief Decode the adaptive codebook gain and add
  *        correction (4.1.5 and 3.9.1 of G.729).
- * \param dsp initialized dsputil context
  * \param gain_corr_factor gain correction factor (2.13)
  * \param fc_v fixed-codebook vector (2.13)
  * \param mr_energy mean innovation energy and fixed-point correction (7.13)
@@ -211,7 +209,6 @@ void ff_acelp_update_past_gain(
  * \remark The routine is used in G.729 and AMR (all modes).
  */
 int16_t ff_acelp_decode_gain_code(
-    DSPContext *dsp,
     int gain_corr_factor,
     const int16_t* fc_v,
     int mr_energy,
diff --git a/libavcodec/alacenc.c b/libavcodec/alacenc.c
index 9fd5064..df4136f 100644
--- a/libavcodec/alacenc.c
+++ b/libavcodec/alacenc.c
@@ -253,8 +253,7 @@ static void alac_linear_predictor(AlacEncodeContext *s, int ch)
 
             sum >>= lpc.lpc_quant;
             sum += samples[0];
-            residual[i] = (samples[lpc.lpc_order+1] - sum) << (32 - s->write_sample_size) >>
-                          (32 - s->write_sample_size);
+            residual[i] = samples[lpc.lpc_order+1] - sum;
             res_val = residual[i];
 
             if(res_val) {
diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
index 2d6ce40..226eabb 100644
--- a/libavcodec/allcodecs.c
+++ b/libavcodec/allcodecs.c
@@ -41,6 +41,16 @@
           extern AVBitStreamFilter x##_bsf; \
           if(ENABLE_##X##_BSF)     av_register_bitstream_filter(&x##_bsf); }
 
+/**
+ * Register all the codecs, parsers and bitstream filters which were enabled at
+ * configuration time. If you do not call this function you can select exactly
+ * which formats you want to support, by using the individual registration
+ * functions.
+ *
+ * @see register_avcodec
+ * @see av_register_codec_parser
+ * @see av_register_bitstream_filter
+ */
 void avcodec_register_all(void)
 {
     static int initialized;
@@ -69,7 +79,6 @@ void avcodec_register_all(void)
     REGISTER_ENCDEC  (DVVIDEO, dvvideo);
     REGISTER_DECODER (DXA, dxa);
     REGISTER_DECODER (EACMV, eacmv);
-    REGISTER_DECODER (EATGQ, eatgq);
     REGISTER_DECODER (EATGV, eatgv);
     REGISTER_DECODER (EIGHTBPS, eightbps);
     REGISTER_DECODER (EIGHTSVX_EXP, eightsvx_exp);
@@ -87,7 +96,6 @@ void avcodec_register_all(void)
     REGISTER_DECODER  (H263, h263);
     REGISTER_DECODER (H263I, h263i);
     REGISTER_DECODER (H264, h264);
-    REGISTER_DECODER (H264_VDPAU, h264_vdpau);
     REGISTER_ENCDEC  (HUFFYUV, huffyuv);
     REGISTER_DECODER (IDCIN, idcin);
     REGISTER_DECODER (INDEO2, indeo2);
@@ -132,8 +140,6 @@ void avcodec_register_all(void)
     REGISTER_DECODER (RPZA, rpza);
     REGISTER_ENCDEC  (RV10, rv10);
     REGISTER_ENCDEC  (RV20, rv20);
-    REGISTER_DECODER (RV30, rv30);
-    REGISTER_DECODER (RV40, rv40);
     REGISTER_ENCDEC  (SGI, sgi);
     REGISTER_DECODER (SMACKER, smacker);
     REGISTER_DECODER (SMC, smc);
@@ -195,7 +201,6 @@ void avcodec_register_all(void)
     REGISTER_DECODER (MPC7, mpc7);
     REGISTER_DECODER (MPC8, mpc8);
     REGISTER_ENCDEC  (NELLYMOSER, nellymoser);
-    REGISTER_DECODER (QCELP, qcelp);
     REGISTER_DECODER (QDM2, qdm2);
     REGISTER_DECODER (RA_144, ra_144);
     REGISTER_DECODER (RA_288, ra_288);
diff --git a/libavcodec/alpha/dsputil_alpha.c b/libavcodec/alpha/dsputil_alpha.c
index c1500b1..6b80731 100644
--- a/libavcodec/alpha/dsputil_alpha.c
+++ b/libavcodec/alpha/dsputil_alpha.c
@@ -22,9 +22,9 @@
 #include "libavcodec/dsputil.h"
 #include "asm.h"
 
-void simple_idct_axp(DCTELEM *block);
-void simple_idct_put_axp(uint8_t *dest, int line_size, DCTELEM *block);
-void simple_idct_add_axp(uint8_t *dest, int line_size, DCTELEM *block);
+extern void simple_idct_axp(DCTELEM *block);
+extern void simple_idct_put_axp(uint8_t *dest, int line_size, DCTELEM *block);
+extern void simple_idct_add_axp(uint8_t *dest, int line_size, DCTELEM *block);
 
 void put_pixels_axp_asm(uint8_t *block, const uint8_t *pixels,
                         int line_size, int h);
diff --git a/libavcodec/apedec.c b/libavcodec/apedec.c
index 8746724..82d567f 100644
--- a/libavcodec/apedec.c
+++ b/libavcodec/apedec.c
@@ -199,7 +199,6 @@ static av_cold int ape_decode_init(AVCodecContext * avctx)
 
     dsputil_init(&s->dsp, avctx);
     avctx->sample_fmt = SAMPLE_FMT_S16;
-    avctx->channel_layout = (avctx->channels==2) ? CH_LAYOUT_STEREO : CH_LAYOUT_MONO;
     return 0;
 }
 
diff --git a/libavcodec/arm/dsputil_neon.c b/libavcodec/arm/dsputil_neon.c
deleted file mode 100644
index e50e160..0000000
--- a/libavcodec/arm/dsputil_neon.c
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * ARM NEON optimised DSP functions
- * Copyright (c) 2008 Mans Rullgard <mans at mansr.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 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 <stdint.h>
-
-#include "libavcodec/avcodec.h"
-#include "libavcodec/dsputil.h"
-
-void ff_put_pixels16_neon(uint8_t *, const uint8_t *, int, int);
-void ff_put_pixels16_x2_neon(uint8_t *, const uint8_t *, int, int);
-void ff_put_pixels16_y2_neon(uint8_t *, const uint8_t *, int, int);
-void ff_put_pixels16_xy2_neon(uint8_t *, const uint8_t *, int, int);
-void ff_put_pixels8_neon(uint8_t *, const uint8_t *, int, int);
-void ff_put_pixels8_x2_neon(uint8_t *, const uint8_t *, int, int);
-void ff_put_pixels8_y2_neon(uint8_t *, const uint8_t *, int, int);
-void ff_put_pixels8_xy2_neon(uint8_t *, const uint8_t *, int, int);
-void ff_put_pixels16_x2_no_rnd_neon(uint8_t *, const uint8_t *, int, int);
-void ff_put_pixels16_y2_no_rnd_neon(uint8_t *, const uint8_t *, int, int);
-void ff_put_pixels16_xy2_no_rnd_neon(uint8_t *, const uint8_t *, int, int);
-void ff_put_pixels8_x2_no_rnd_neon(uint8_t *, const uint8_t *, int, int);
-void ff_put_pixels8_y2_no_rnd_neon(uint8_t *, const uint8_t *, int, int);
-void ff_put_pixels8_xy2_no_rnd_neon(uint8_t *, const uint8_t *, int, int);
-
-void ff_avg_pixels16_neon(uint8_t *, const uint8_t *, int, int);
-
-void ff_put_h264_qpel16_mc00_neon(uint8_t *, uint8_t *, int);
-void ff_put_h264_qpel16_mc10_neon(uint8_t *, uint8_t *, int);
-void ff_put_h264_qpel16_mc20_neon(uint8_t *, uint8_t *, int);
-void ff_put_h264_qpel16_mc30_neon(uint8_t *, uint8_t *, int);
-void ff_put_h264_qpel16_mc01_neon(uint8_t *, uint8_t *, int);
-void ff_put_h264_qpel16_mc11_neon(uint8_t *, uint8_t *, int);
-void ff_put_h264_qpel16_mc21_neon(uint8_t *, uint8_t *, int);
-void ff_put_h264_qpel16_mc31_neon(uint8_t *, uint8_t *, int);
-void ff_put_h264_qpel16_mc02_neon(uint8_t *, uint8_t *, int);
-void ff_put_h264_qpel16_mc12_neon(uint8_t *, uint8_t *, int);
-void ff_put_h264_qpel16_mc22_neon(uint8_t *, uint8_t *, int);
-void ff_put_h264_qpel16_mc32_neon(uint8_t *, uint8_t *, int);
-void ff_put_h264_qpel16_mc03_neon(uint8_t *, uint8_t *, int);
-void ff_put_h264_qpel16_mc13_neon(uint8_t *, uint8_t *, int);
-void ff_put_h264_qpel16_mc23_neon(uint8_t *, uint8_t *, int);
-void ff_put_h264_qpel16_mc33_neon(uint8_t *, uint8_t *, int);
-
-void ff_put_h264_qpel8_mc00_neon(uint8_t *, uint8_t *, int);
-void ff_put_h264_qpel8_mc10_neon(uint8_t *, uint8_t *, int);
-void ff_put_h264_qpel8_mc20_neon(uint8_t *, uint8_t *, int);
-void ff_put_h264_qpel8_mc30_neon(uint8_t *, uint8_t *, int);
-void ff_put_h264_qpel8_mc01_neon(uint8_t *, uint8_t *, int);
-void ff_put_h264_qpel8_mc11_neon(uint8_t *, uint8_t *, int);
-void ff_put_h264_qpel8_mc21_neon(uint8_t *, uint8_t *, int);
-void ff_put_h264_qpel8_mc31_neon(uint8_t *, uint8_t *, int);
-void ff_put_h264_qpel8_mc02_neon(uint8_t *, uint8_t *, int);
-void ff_put_h264_qpel8_mc12_neon(uint8_t *, uint8_t *, int);
-void ff_put_h264_qpel8_mc22_neon(uint8_t *, uint8_t *, int);
-void ff_put_h264_qpel8_mc32_neon(uint8_t *, uint8_t *, int);
-void ff_put_h264_qpel8_mc03_neon(uint8_t *, uint8_t *, int);
-void ff_put_h264_qpel8_mc13_neon(uint8_t *, uint8_t *, int);
-void ff_put_h264_qpel8_mc23_neon(uint8_t *, uint8_t *, int);
-void ff_put_h264_qpel8_mc33_neon(uint8_t *, uint8_t *, int);
-
-void ff_avg_h264_qpel16_mc00_neon(uint8_t *, uint8_t *, int);
-
-void ff_put_h264_chroma_mc8_neon(uint8_t *, uint8_t *, int, int, int, int);
-void ff_put_h264_chroma_mc4_neon(uint8_t *, uint8_t *, int, int, int, int);
-
-void ff_avg_h264_chroma_mc8_neon(uint8_t *, uint8_t *, int, int, int, int);
-void ff_avg_h264_chroma_mc4_neon(uint8_t *, uint8_t *, int, int, int, int);
-
-void ff_h264_v_loop_filter_luma_neon(uint8_t *pix, int stride, int alpha,
-                                     int beta, int8_t *tc0);
-void ff_h264_h_loop_filter_luma_neon(uint8_t *pix, int stride, int alpha,
-                                     int beta, int8_t *tc0);
-void ff_h264_v_loop_filter_chroma_neon(uint8_t *pix, int stride, int alpha,
-                                       int beta, int8_t *tc0);
-void ff_h264_h_loop_filter_chroma_neon(uint8_t *pix, int stride, int alpha,
-                                       int beta, int8_t *tc0);
-
-void ff_h264_idct_add_neon(uint8_t *dst, DCTELEM *block, int stride);
-void ff_h264_idct_dc_add_neon(uint8_t *dst, DCTELEM *block, int stride);
-void ff_h264_idct_add16_neon(uint8_t *dst, const int *block_offset,
-                             DCTELEM *block, int stride,
-                             const uint8_t nnzc[6*8]);
-void ff_h264_idct_add16intra_neon(uint8_t *dst, const int *block_offset,
-                                  DCTELEM *block, int stride,
-                                  const uint8_t nnzc[6*8]);
-void ff_h264_idct_add8_neon(uint8_t **dest, const int *block_offset,
-                            DCTELEM *block, int stride,
-                            const uint8_t nnzc[6*8]);
-
-void ff_float_to_int16_neon(int16_t *, const float *, long);
-void ff_float_to_int16_interleave_neon(int16_t *, const float **, long, int);
-
-void ff_dsputil_init_neon(DSPContext *c, AVCodecContext *avctx)
-{
-    c->put_pixels_tab[0][0] = ff_put_pixels16_neon;
-    c->put_pixels_tab[0][1] = ff_put_pixels16_x2_neon;
-    c->put_pixels_tab[0][2] = ff_put_pixels16_y2_neon;
-    c->put_pixels_tab[0][3] = ff_put_pixels16_xy2_neon;
-    c->put_pixels_tab[1][0] = ff_put_pixels8_neon;
-    c->put_pixels_tab[1][1] = ff_put_pixels8_x2_neon;
-    c->put_pixels_tab[1][2] = ff_put_pixels8_y2_neon;
-    c->put_pixels_tab[1][3] = ff_put_pixels8_xy2_neon;
-
-    c->put_no_rnd_pixels_tab[0][0] = ff_put_pixels16_neon;
-    c->put_no_rnd_pixels_tab[0][1] = ff_put_pixels16_x2_no_rnd_neon;
-    c->put_no_rnd_pixels_tab[0][2] = ff_put_pixels16_y2_no_rnd_neon;
-    c->put_no_rnd_pixels_tab[0][3] = ff_put_pixels16_xy2_no_rnd_neon;
-    c->put_no_rnd_pixels_tab[1][0] = ff_put_pixels8_neon;
-    c->put_no_rnd_pixels_tab[1][1] = ff_put_pixels8_x2_no_rnd_neon;
-    c->put_no_rnd_pixels_tab[1][2] = ff_put_pixels8_y2_no_rnd_neon;
-    c->put_no_rnd_pixels_tab[1][3] = ff_put_pixels8_xy2_no_rnd_neon;
-
-    c->avg_pixels_tab[0][0] = ff_avg_pixels16_neon;
-
-    c->put_h264_chroma_pixels_tab[0] = ff_put_h264_chroma_mc8_neon;
-    c->put_h264_chroma_pixels_tab[1] = ff_put_h264_chroma_mc4_neon;
-
-    c->avg_h264_chroma_pixels_tab[0] = ff_avg_h264_chroma_mc8_neon;
-    c->avg_h264_chroma_pixels_tab[1] = ff_avg_h264_chroma_mc4_neon;
-
-    c->put_h264_qpel_pixels_tab[0][ 0] = ff_put_h264_qpel16_mc00_neon;
-    c->put_h264_qpel_pixels_tab[0][ 1] = ff_put_h264_qpel16_mc10_neon;
-    c->put_h264_qpel_pixels_tab[0][ 2] = ff_put_h264_qpel16_mc20_neon;
-    c->put_h264_qpel_pixels_tab[0][ 3] = ff_put_h264_qpel16_mc30_neon;
-    c->put_h264_qpel_pixels_tab[0][ 4] = ff_put_h264_qpel16_mc01_neon;
-    c->put_h264_qpel_pixels_tab[0][ 5] = ff_put_h264_qpel16_mc11_neon;
-    c->put_h264_qpel_pixels_tab[0][ 6] = ff_put_h264_qpel16_mc21_neon;
-    c->put_h264_qpel_pixels_tab[0][ 7] = ff_put_h264_qpel16_mc31_neon;
-    c->put_h264_qpel_pixels_tab[0][ 8] = ff_put_h264_qpel16_mc02_neon;
-    c->put_h264_qpel_pixels_tab[0][ 9] = ff_put_h264_qpel16_mc12_neon;
-    c->put_h264_qpel_pixels_tab[0][10] = ff_put_h264_qpel16_mc22_neon;
-    c->put_h264_qpel_pixels_tab[0][11] = ff_put_h264_qpel16_mc32_neon;
-    c->put_h264_qpel_pixels_tab[0][12] = ff_put_h264_qpel16_mc03_neon;
-    c->put_h264_qpel_pixels_tab[0][13] = ff_put_h264_qpel16_mc13_neon;
-    c->put_h264_qpel_pixels_tab[0][14] = ff_put_h264_qpel16_mc23_neon;
-    c->put_h264_qpel_pixels_tab[0][15] = ff_put_h264_qpel16_mc33_neon;
-
-    c->put_h264_qpel_pixels_tab[1][ 0] = ff_put_h264_qpel8_mc00_neon;
-    c->put_h264_qpel_pixels_tab[1][ 1] = ff_put_h264_qpel8_mc10_neon;
-    c->put_h264_qpel_pixels_tab[1][ 2] = ff_put_h264_qpel8_mc20_neon;
-    c->put_h264_qpel_pixels_tab[1][ 3] = ff_put_h264_qpel8_mc30_neon;
-    c->put_h264_qpel_pixels_tab[1][ 4] = ff_put_h264_qpel8_mc01_neon;
-    c->put_h264_qpel_pixels_tab[1][ 5] = ff_put_h264_qpel8_mc11_neon;
-    c->put_h264_qpel_pixels_tab[1][ 6] = ff_put_h264_qpel8_mc21_neon;
-    c->put_h264_qpel_pixels_tab[1][ 7] = ff_put_h264_qpel8_mc31_neon;
-    c->put_h264_qpel_pixels_tab[1][ 8] = ff_put_h264_qpel8_mc02_neon;
-    c->put_h264_qpel_pixels_tab[1][ 9] = ff_put_h264_qpel8_mc12_neon;
-    c->put_h264_qpel_pixels_tab[1][10] = ff_put_h264_qpel8_mc22_neon;
-    c->put_h264_qpel_pixels_tab[1][11] = ff_put_h264_qpel8_mc32_neon;
-    c->put_h264_qpel_pixels_tab[1][12] = ff_put_h264_qpel8_mc03_neon;
-    c->put_h264_qpel_pixels_tab[1][13] = ff_put_h264_qpel8_mc13_neon;
-    c->put_h264_qpel_pixels_tab[1][14] = ff_put_h264_qpel8_mc23_neon;
-    c->put_h264_qpel_pixels_tab[1][15] = ff_put_h264_qpel8_mc33_neon;
-
-    c->avg_h264_qpel_pixels_tab[0][ 0] = ff_avg_h264_qpel16_mc00_neon;
-
-    c->h264_v_loop_filter_luma = ff_h264_v_loop_filter_luma_neon;
-    c->h264_h_loop_filter_luma = ff_h264_h_loop_filter_luma_neon;
-    c->h264_v_loop_filter_chroma = ff_h264_v_loop_filter_chroma_neon;
-    c->h264_h_loop_filter_chroma = ff_h264_h_loop_filter_chroma_neon;
-
-    c->h264_idct_add = ff_h264_idct_add_neon;
-    c->h264_idct_dc_add = ff_h264_idct_dc_add_neon;
-    c->h264_idct_add16      = ff_h264_idct_add16_neon;
-    c->h264_idct_add16intra = ff_h264_idct_add16intra_neon;
-    c->h264_idct_add8       = ff_h264_idct_add8_neon;
-
-    if (!(avctx->flags & CODEC_FLAG_BITEXACT)) {
-        c->float_to_int16 = ff_float_to_int16_neon;
-        c->float_to_int16_interleave = ff_float_to_int16_interleave_neon;
-    }
-}
diff --git a/libavcodec/arm/dsputil_neon_s.S b/libavcodec/arm/dsputil_neon_s.S
deleted file mode 100644
index 4f86714..0000000
--- a/libavcodec/arm/dsputil_neon_s.S
+++ /dev/null
@@ -1,611 +0,0 @@
-/*
- * ARM NEON optimised DSP functions
- * Copyright (c) 2008 Mans Rullgard <mans at mansr.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 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 "asm.S"
-
-        preserve8
-        .fpu neon
-        .text
-
-        .macro pixels16 avg=0
-.if \avg
-        mov             ip,  r0
-.endif
-1:      vld1.64         {d0, d1},  [r1], r2
-        vld1.64         {d2, d3},  [r1], r2
-        vld1.64         {d4, d5},  [r1], r2
-        pld             [r1, r2, lsl #2]
-        vld1.64         {d6, d7},  [r1], r2
-        pld             [r1]
-        pld             [r1, r2]
-        pld             [r1, r2, lsl #1]
-.if \avg
-        vld1.64         {d16,d17}, [ip], r2
-        vrhadd.u8       q0,  q0,  q8
-        vld1.64         {d18,d19}, [ip], r2
-        vrhadd.u8       q1,  q1,  q9
-        vld1.64         {d20,d21}, [ip], r2
-        vrhadd.u8       q2,  q2,  q10
-        vld1.64         {d22,d23}, [ip], r2
-        vrhadd.u8       q3,  q3,  q11
-.endif
-        subs            r3,  r3,  #4
-        vst1.64         {d0, d1},  [r0,:128], r2
-        vst1.64         {d2, d3},  [r0,:128], r2
-        vst1.64         {d4, d5},  [r0,:128], r2
-        vst1.64         {d6, d7},  [r0,:128], r2
-        bne             1b
-        bx              lr
-        .endm
-
-        .macro pixels16_x2 vhadd=vrhadd.u8
-1:      vld1.64         {d0-d2},   [r1], r2
-        vld1.64         {d4-d6},   [r1], r2
-        pld             [r1]
-        pld             [r1, r2]
-        subs            r3,  r3,  #2
-        vext.8          q1,  q0,  q1,  #1
-        \vhadd          q0,  q0,  q1
-        vext.8          q3,  q2,  q3,  #1
-        \vhadd          q2,  q2,  q3
-        vst1.64         {d0, d1},  [r0,:128], r2
-        vst1.64         {d4, d5},  [r0,:128], r2
-        bne             1b
-        bx              lr
-        .endm
-
-        .macro pixels16_y2 vhadd=vrhadd.u8
-        push            {lr}
-        add             ip,  r1,  r2
-        lsl             lr,  r2,  #1
-        vld1.64         {d0, d1},  [r1], lr
-        vld1.64         {d2, d3},  [ip], lr
-1:      subs            r3,  r3,  #2
-        \vhadd          q2,  q0,  q1
-        vld1.64         {d0, d1},  [r1],      lr
-        \vhadd          q3,  q0,  q1
-        vld1.64         {d2, d3},  [ip],      lr
-        pld             [r1]
-        pld             [ip]
-        vst1.64         {d4, d5},  [r0,:128], r2
-        vst1.64         {d6, d7},  [r0,:128], r2
-        bne             1b
-        pop             {pc}
-        .endm
-
-        .macro pixels16_xy2 vshrn=vrshrn.u16 no_rnd=0
-        push            {lr}
-        lsl             lr,  r2,  #1
-        add             ip,  r1,  r2
-        vld1.64         {d0-d2},   [r1], lr
-        vld1.64         {d4-d6},   [ip], lr
-.if \no_rnd
-        vmov.i16        q13, #1
-.endif
-        pld             [r1]
-        pld             [ip]
-        vext.8          q1,  q0,  q1,  #1
-        vext.8          q3,  q2,  q3,  #1
-        vaddl.u8        q8,  d0,  d2
-        vaddl.u8        q10, d1,  d3
-        vaddl.u8        q9,  d4,  d6
-        vaddl.u8        q11, d5,  d7
-1:      subs            r3,  r3,  #2
-        vld1.64         {d0-d2},   [r1], lr
-        vadd.u16        q12, q8,  q9
-        pld             [r1]
-.if \no_rnd
-        vadd.u16        q12, q12, q13
-.endif
-        vext.8          q15, q0,  q1,  #1
-        vadd.u16        q1 , q10, q11
-        \vshrn          d28, q12, #2
-.if \no_rnd
-        vadd.u16        q1,  q1,  q13
-.endif
-        \vshrn          d29, q1,  #2
-        vaddl.u8        q8,  d0,  d30
-        vld1.64         {d2-d4},   [ip], lr
-        vaddl.u8        q10, d1,  d31
-        vst1.64         {d28,d29}, [r0,:128], r2
-        vadd.u16        q12, q8,  q9
-        pld             [ip]
-.if \no_rnd
-        vadd.u16        q12, q12, q13
-.endif
-        vext.8          q2,  q1,  q2,  #1
-        vadd.u16        q0,  q10, q11
-        \vshrn          d30, q12, #2
-.if \no_rnd
-        vadd.u16        q0,  q0,  q13
-.endif
-        \vshrn          d31, q0,  #2
-        vaddl.u8        q9,  d2,  d4
-        vaddl.u8        q11, d3,  d5
-        vst1.64         {d30,d31}, [r0,:128], r2
-        bgt             1b
-        pop             {pc}
-        .endm
-
-        .macro pixels8
-1:      vld1.64         {d0}, [r1], r2
-        vld1.64         {d1}, [r1], r2
-        vld1.64         {d2}, [r1], r2
-        pld             [r1, r2, lsl #2]
-        vld1.64         {d3}, [r1], r2
-        pld             [r1]
-        pld             [r1, r2]
-        pld             [r1, r2, lsl #1]
-        subs            r3,  r3,  #4
-        vst1.64         {d0}, [r0,:64], r2
-        vst1.64         {d1}, [r0,:64], r2
-        vst1.64         {d2}, [r0,:64], r2
-        vst1.64         {d3}, [r0,:64], r2
-        bne             1b
-        bx              lr
-        .endm
-
-        .macro pixels8_x2 vhadd=vrhadd.u8
-1:      vld1.64         {d0, d1},  [r1], r2
-        vext.8          d1,  d0,  d1,  #1
-        vld1.64         {d2, d3},  [r1], r2
-        vext.8          d3,  d2,  d3,  #1
-        pld             [r1]
-        pld             [r1, r2]
-        subs            r3,  r3,  #2
-        vswp            d1,  d2
-        \vhadd          q0,  q0,  q1
-        vst1.64         {d0},      [r0,:64], r2
-        vst1.64         {d1},      [r0,:64], r2
-        bne             1b
-        bx              lr
-        .endm
-
-        .macro pixels8_y2 vhadd=vrhadd.u8
-        push            {lr}
-        add             ip,  r1,  r2
-        lsl             lr,  r2,  #1
-        vld1.64         {d0},      [r1], lr
-        vld1.64         {d1},      [ip], lr
-1:      subs            r3,  r3,  #2
-        \vhadd          d4,  d0,  d1
-        vld1.64         {d0},      [r1],     lr
-        \vhadd          d5,  d0,  d1
-        vld1.64         {d1},      [ip],     lr
-        pld             [r1]
-        pld             [ip]
-        vst1.64         {d4},      [r0,:64], r2
-        vst1.64         {d5},      [r0,:64], r2
-        bne             1b
-        pop             {pc}
-        .endm
-
-        .macro pixels8_xy2 vshrn=vrshrn.u16 no_rnd=0
-        push            {lr}
-        lsl             lr,  r2,  #1
-        add             ip,  r1,  r2
-        vld1.64         {d0, d1},  [r1], lr
-        vld1.64         {d2, d3},  [ip], lr
-.if \no_rnd
-        vmov.i16        q11, #1
-.endif
-        pld             [r1]
-        pld             [ip]
-        vext.8          d4,  d0,  d1,  #1
-        vext.8          d6,  d2,  d3,  #1
-        vaddl.u8        q8,  d0,  d4
-        vaddl.u8        q9,  d2,  d6
-1:      subs            r3,  r3,  #2
-        vld1.64         {d0, d1},  [r1], lr
-        pld             [r1]
-        vadd.u16        q10, q8,  q9
-        vext.8          d4,  d0,  d1,  #1
-.if \no_rnd
-        vadd.u16        q10, q10, q11
-.endif
-        vaddl.u8        q8,  d0,  d4
-        \vshrn          d5,  q10, #2
-        vld1.64         {d2, d3},  [ip], lr
-        vadd.u16        q10, q8,  q9
-        pld             [ip]
-.if \no_rnd
-        vadd.u16        q10, q10, q11
-.endif
-        vst1.64         {d5},      [r0,:64], r2
-        \vshrn          d7,  q10, #2
-        vext.8          d6,  d2,  d3,  #1
-        vaddl.u8        q9,  d2,  d6
-        vst1.64         {d7},      [r0,:64], r2
-        bgt             1b
-        pop             {pc}
-        .endm
-
-        .macro pixfunc pfx name suf rnd_op args:vararg
-function ff_\pfx\name\suf\()_neon, export=1
-        \name \rnd_op \args
-        .endfunc
-        .endm
-
-        .macro pixfunc2 pfx name args:vararg
-        pixfunc \pfx \name
-        pixfunc \pfx \name \args
-        .endm
-
-function ff_put_h264_qpel16_mc00_neon, export=1
-        mov   r3, #16
-        .endfunc
-
-        pixfunc  put_ pixels16
-        pixfunc2 put_ pixels16_x2,  _no_rnd, vhadd.u8
-        pixfunc2 put_ pixels16_y2,  _no_rnd, vhadd.u8
-        pixfunc2 put_ pixels16_xy2, _no_rnd, vshrn.u16, 1
-
-function ff_avg_h264_qpel16_mc00_neon, export=1
-        mov   r3, #16
-        .endfunc
-
-        pixfunc  avg_ pixels16,, 1
-
-function ff_put_h264_qpel8_mc00_neon, export=1
-        mov   r3, #8
-        .endfunc
-
-        pixfunc  put_ pixels8
-        pixfunc2 put_ pixels8_x2,   _no_rnd, vhadd.u8
-        pixfunc2 put_ pixels8_y2,   _no_rnd, vhadd.u8
-        pixfunc2 put_ pixels8_xy2,  _no_rnd, vshrn.u16, 1
-
-function ff_float_to_int16_neon, export=1
-        subs            r2,  r2,  #8
-        vld1.64         {d0-d1},  [r1,:128]!
-        vcvt.s32.f32    q8,  q0,  #16
-        vld1.64         {d2-d3},  [r1,:128]!
-        vcvt.s32.f32    q9,  q1,  #16
-        beq             3f
-        bics            ip,  r2,  #15
-        beq             2f
-1:      subs            ip,  ip,  #16
-        vshrn.s32       d4,  q8,  #16
-        vld1.64         {d0-d1},  [r1,:128]!
-        vcvt.s32.f32    q0,  q0,  #16
-        vshrn.s32       d5,  q9,  #16
-        vld1.64         {d2-d3},  [r1,:128]!
-        vcvt.s32.f32    q1,  q1,  #16
-        vshrn.s32       d6,  q0,  #16
-        vst1.64         {d4-d5},  [r0,:128]!
-        vshrn.s32       d7,  q1,  #16
-        vld1.64         {d16-d17},[r1,:128]!
-        vcvt.s32.f32    q8,  q8,  #16
-        vld1.64         {d18-d19},[r1,:128]!
-        vcvt.s32.f32    q9,  q9,  #16
-        vst1.64         {d6-d7},  [r0,:128]!
-        bne             1b
-        ands            r2,  r2,  #15
-        beq             3f
-2:      vld1.64         {d0-d1},  [r1,:128]!
-        vshrn.s32       d4,  q8,  #16
-        vcvt.s32.f32    q0,  q0,  #16
-        vld1.64         {d2-d3},  [r1,:128]!
-        vshrn.s32       d5,  q9,  #16
-        vcvt.s32.f32    q1,  q1,  #16
-        vshrn.s32       d6,  q0,  #16
-        vst1.64         {d4-d5},  [r0,:128]!
-        vshrn.s32       d7,  q1,  #16
-        vst1.64         {d6-d7},  [r0,:128]!
-        bx              lr
-3:      vshrn.s32       d4,  q8,  #16
-        vshrn.s32       d5,  q9,  #16
-        vst1.64         {d4-d5},  [r0,:128]!
-        bx              lr
-        .endfunc
-
-function ff_float_to_int16_interleave_neon, export=1
-        cmp             r3, #2
-        ldrlt           r1, [r1]
-        blt             ff_float_to_int16_neon
-        bne             4f
-
-        ldr             r3, [r1]
-        ldr             r1, [r1, #4]
-
-        subs            r2,  r2,  #8
-        vld1.64         {d0-d1},  [r3,:128]!
-        vcvt.s32.f32    q8,  q0,  #16
-        vld1.64         {d2-d3},  [r3,:128]!
-        vcvt.s32.f32    q9,  q1,  #16
-        vld1.64         {d20-d21},[r1,:128]!
-        vcvt.s32.f32    q10, q10, #16
-        vld1.64         {d22-d23},[r1,:128]!
-        vcvt.s32.f32    q11, q11, #16
-        beq             3f
-        bics            ip,  r2,  #15
-        beq             2f
-1:      subs            ip,  ip,  #16
-        vld1.64         {d0-d1},  [r3,:128]!
-        vcvt.s32.f32    q0,  q0,  #16
-        vsri.32         q10, q8,  #16
-        vld1.64         {d2-d3},  [r3,:128]!
-        vcvt.s32.f32    q1,  q1,  #16
-        vld1.64         {d24-d25},[r1,:128]!
-        vcvt.s32.f32    q12, q12, #16
-        vld1.64         {d26-d27},[r1,:128]!
-        vsri.32         q11, q9,  #16
-        vst1.64         {d20-d21},[r0,:128]!
-        vcvt.s32.f32    q13, q13, #16
-        vst1.64         {d22-d23},[r0,:128]!
-        vsri.32         q12, q0,  #16
-        vld1.64         {d16-d17},[r3,:128]!
-        vsri.32         q13, q1,  #16
-        vst1.64         {d24-d25},[r0,:128]!
-        vcvt.s32.f32    q8,  q8,  #16
-        vld1.64         {d18-d19},[r3,:128]!
-        vcvt.s32.f32    q9,  q9,  #16
-        vld1.64         {d20-d21},[r1,:128]!
-        vcvt.s32.f32    q10, q10, #16
-        vld1.64         {d22-d23},[r1,:128]!
-        vcvt.s32.f32    q11, q11, #16
-        vst1.64         {d26-d27},[r0,:128]!
-        bne             1b
-        ands            r2,  r2,  #15
-        beq             3f
-2:      vsri.32         q10, q8,  #16
-        vld1.64         {d0-d1},  [r3,:128]!
-        vcvt.s32.f32    q0,  q0,  #16
-        vld1.64         {d2-d3},  [r3,:128]!
-        vcvt.s32.f32    q1,  q1,  #16
-        vld1.64         {d24-d25},[r1,:128]!
-        vcvt.s32.f32    q12, q12, #16
-        vsri.32         q11, q9,  #16
-        vld1.64         {d26-d27},[r1,:128]!
-        vcvt.s32.f32    q13, q13, #16
-        vst1.64         {d20-d21},[r0,:128]!
-        vsri.32         q12, q0,  #16
-        vst1.64         {d22-d23},[r0,:128]!
-        vsri.32         q13, q1,  #16
-        vst1.64         {d24-d27},[r0,:128]!
-        bx              lr
-3:      vsri.32         q10, q8,  #16
-        vsri.32         q11, q9,  #16
-        vst1.64         {d20-d23},[r0,:128]!
-        bx              lr
-
-4:      push            {r4-r8,lr}
-        cmp             r3,  #4
-        lsl             ip,  r3,  #1
-        blt             4f
-
-        @ 4 channels
-5:      ldmia           r1!, {r4-r7}
-        mov             lr,  r2
-        mov             r8,  r0
-        vld1.64         {d16-d17},[r4,:128]!
-        vcvt.s32.f32    q8,  q8,  #16
-        vld1.64         {d18-d19},[r5,:128]!
-        vcvt.s32.f32    q9,  q9,  #16
-        vld1.64         {d20-d21},[r6,:128]!
-        vcvt.s32.f32    q10, q10, #16
-        vld1.64         {d22-d23},[r7,:128]!
-        vcvt.s32.f32    q11, q11, #16
-6:      subs            lr,  lr,  #8
-        vld1.64         {d0-d1},  [r4,:128]!
-        vcvt.s32.f32    q0,  q0,  #16
-        vsri.32         q9,  q8,  #16
-        vld1.64         {d2-d3},  [r5,:128]!
-        vcvt.s32.f32    q1,  q1,  #16
-        vsri.32         q11, q10, #16
-        vld1.64         {d4-d5},  [r6,:128]!
-        vcvt.s32.f32    q2,  q2,  #16
-        vzip.32         d18, d22
-        vld1.64         {d6-d7},  [r7,:128]!
-        vcvt.s32.f32    q3,  q3,  #16
-        vzip.32         d19, d23
-        vst1.64         {d18},    [r8], ip
-        vsri.32         q1,  q0,  #16
-        vst1.64         {d22},    [r8], ip
-        vsri.32         q3,  q2,  #16
-        vst1.64         {d19},    [r8], ip
-        vzip.32         d2,  d6
-        vst1.64         {d23},    [r8], ip
-        vzip.32         d3,  d7
-        beq             7f
-        vld1.64         {d16-d17},[r4,:128]!
-        vcvt.s32.f32    q8,  q8,  #16
-        vst1.64         {d2},     [r8], ip
-        vld1.64         {d18-d19},[r5,:128]!
-        vcvt.s32.f32    q9,  q9,  #16
-        vst1.64         {d6},     [r8], ip
-        vld1.64         {d20-d21},[r6,:128]!
-        vcvt.s32.f32    q10, q10, #16
-        vst1.64         {d3},     [r8], ip
-        vld1.64         {d22-d23},[r7,:128]!
-        vcvt.s32.f32    q11, q11, #16
-        vst1.64         {d7},     [r8], ip
-        b               6b
-7:      vst1.64         {d2},     [r8], ip
-        vst1.64         {d6},     [r8], ip
-        vst1.64         {d3},     [r8], ip
-        vst1.64         {d7},     [r8], ip
-        subs            r3,  r3,  #4
-        popeq           {r4-r8,pc}
-        cmp             r3,  #4
-        add             r0,  r0,  #8
-        bge             5b
-
-        @ 2 channels
-4:      cmp             r3,  #2
-        blt             4f
-        ldmia           r1!, {r4-r5}
-        mov             lr,  r2
-        mov             r8,  r0
-        tst             lr,  #8
-        vld1.64         {d16-d17},[r4,:128]!
-        vcvt.s32.f32    q8,  q8,  #16
-        vld1.64         {d18-d19},[r5,:128]!
-        vcvt.s32.f32    q9,  q9,  #16
-        vld1.64         {d20-d21},[r4,:128]!
-        vcvt.s32.f32    q10, q10, #16
-        vld1.64         {d22-d23},[r5,:128]!
-        vcvt.s32.f32    q11, q11, #16
-        beq             6f
-        subs            lr,  lr,  #8
-        beq             7f
-        vsri.32         d18, d16, #16
-        vsri.32         d19, d17, #16
-        vld1.64         {d16-d17},[r4,:128]!
-        vcvt.s32.f32    q8,  q8,  #16
-        vst1.32         {d18[0]}, [r8], ip
-        vsri.32         d22, d20, #16
-        vst1.32         {d18[1]}, [r8], ip
-        vsri.32         d23, d21, #16
-        vst1.32         {d19[0]}, [r8], ip
-        vst1.32         {d19[1]}, [r8], ip
-        vld1.64         {d18-d19},[r5,:128]!
-        vcvt.s32.f32    q9,  q9,  #16
-        vst1.32         {d22[0]}, [r8], ip
-        vst1.32         {d22[1]}, [r8], ip
-        vld1.64         {d20-d21},[r4,:128]!
-        vcvt.s32.f32    q10, q10, #16
-        vst1.32         {d23[0]}, [r8], ip
-        vst1.32         {d23[1]}, [r8], ip
-        vld1.64         {d22-d23},[r5,:128]!
-        vcvt.s32.f32    q11, q11, #16
-6:      subs            lr,  lr,  #16
-        vld1.64         {d0-d1},  [r4,:128]!
-        vcvt.s32.f32    q0,  q0,  #16
-        vsri.32         d18, d16, #16
-        vld1.64         {d2-d3},  [r5,:128]!
-        vcvt.s32.f32    q1,  q1,  #16
-        vsri.32         d19, d17, #16
-        vld1.64         {d4-d5},  [r4,:128]!
-        vcvt.s32.f32    q2,  q2,  #16
-        vld1.64         {d6-d7},  [r5,:128]!
-        vcvt.s32.f32    q3,  q3,  #16
-        vst1.32         {d18[0]}, [r8], ip
-        vsri.32         d22, d20, #16
-        vst1.32         {d18[1]}, [r8], ip
-        vsri.32         d23, d21, #16
-        vst1.32         {d19[0]}, [r8], ip
-        vsri.32         d2,  d0,  #16
-        vst1.32         {d19[1]}, [r8], ip
-        vsri.32         d3,  d1,  #16
-        vst1.32         {d22[0]}, [r8], ip
-        vsri.32         d6,  d4,  #16
-        vst1.32         {d22[1]}, [r8], ip
-        vsri.32         d7,  d5,  #16
-        vst1.32         {d23[0]}, [r8], ip
-        vst1.32         {d23[1]}, [r8], ip
-        beq             6f
-        vld1.64         {d16-d17},[r4,:128]!
-        vcvt.s32.f32    q8,  q8,  #16
-        vst1.32         {d2[0]},  [r8], ip
-        vst1.32         {d2[1]},  [r8], ip
-        vld1.64         {d18-d19},[r5,:128]!
-        vcvt.s32.f32    q9,  q9,  #16
-        vst1.32         {d3[0]},  [r8], ip
-        vst1.32         {d3[1]},  [r8], ip
-        vld1.64         {d20-d21},[r4,:128]!
-        vcvt.s32.f32    q10, q10, #16
-        vst1.32         {d6[0]},  [r8], ip
-        vst1.32         {d6[1]},  [r8], ip
-        vld1.64         {d22-d23},[r5,:128]!
-        vcvt.s32.f32    q11, q11, #16
-        vst1.32         {d7[0]},  [r8], ip
-        vst1.32         {d7[1]},  [r8], ip
-        bgt             6b
-6:      vst1.32         {d2[0]},  [r8], ip
-        vst1.32         {d2[1]},  [r8], ip
-        vst1.32         {d3[0]},  [r8], ip
-        vst1.32         {d3[1]},  [r8], ip
-        vst1.32         {d6[0]},  [r8], ip
-        vst1.32         {d6[1]},  [r8], ip
-        vst1.32         {d7[0]},  [r8], ip
-        vst1.32         {d7[1]},  [r8], ip
-        b               8f
-7:      vsri.32         d18, d16, #16
-        vsri.32         d19, d17, #16
-        vst1.32         {d18[0]}, [r8], ip
-        vsri.32         d22, d20, #16
-        vst1.32         {d18[1]}, [r8], ip
-        vsri.32         d23, d21, #16
-        vst1.32         {d19[0]}, [r8], ip
-        vst1.32         {d19[1]}, [r8], ip
-        vst1.32         {d22[0]}, [r8], ip
-        vst1.32         {d22[1]}, [r8], ip
-        vst1.32         {d23[0]}, [r8], ip
-        vst1.32         {d23[1]}, [r8], ip
-8:      subs            r3,  r3,  #2
-        add             r0,  r0,  #4
-        popeq           {r4-r8,pc}
-
-        @ 1 channel
-4:      ldr             r4,  [r1],#4
-        tst             r2,  #8
-        mov             lr,  r2
-        mov             r5,  r0
-        vld1.64         {d0-d1},  [r4,:128]!
-        vcvt.s32.f32    q0,  q0,  #16
-        vld1.64         {d2-d3},  [r4,:128]!
-        vcvt.s32.f32    q1,  q1,  #16
-        bne             8f
-6:      subs            lr,  lr,  #16
-        vld1.64         {d4-d5},  [r4,:128]!
-        vcvt.s32.f32    q2,  q2,  #16
-        vld1.64         {d6-d7},  [r4,:128]!
-        vcvt.s32.f32    q3,  q3,  #16
-        vst1.16         {d0[1]},  [r5,:16], ip
-        vst1.16         {d0[3]},  [r5,:16], ip
-        vst1.16         {d1[1]},  [r5,:16], ip
-        vst1.16         {d1[3]},  [r5,:16], ip
-        vst1.16         {d2[1]},  [r5,:16], ip
-        vst1.16         {d2[3]},  [r5,:16], ip
-        vst1.16         {d3[1]},  [r5,:16], ip
-        vst1.16         {d3[3]},  [r5,:16], ip
-        beq             7f
-        vld1.64         {d0-d1},  [r4,:128]!
-        vcvt.s32.f32    q0,  q0,  #16
-        vld1.64         {d2-d3},  [r4,:128]!
-        vcvt.s32.f32    q1,  q1,  #16
-7:      vst1.16         {d4[1]},  [r5,:16], ip
-        vst1.16         {d4[3]},  [r5,:16], ip
-        vst1.16         {d5[1]},  [r5,:16], ip
-        vst1.16         {d5[3]},  [r5,:16], ip
-        vst1.16         {d6[1]},  [r5,:16], ip
-        vst1.16         {d6[3]},  [r5,:16], ip
-        vst1.16         {d7[1]},  [r5,:16], ip
-        vst1.16         {d7[3]},  [r5,:16], ip
-        bgt             6b
-        pop             {r4-r8,pc}
-8:      subs            lr,  lr,  #8
-        vst1.16         {d0[1]},  [r5,:16], ip
-        vst1.16         {d0[3]},  [r5,:16], ip
-        vst1.16         {d1[1]},  [r5,:16], ip
-        vst1.16         {d1[3]},  [r5,:16], ip
-        vst1.16         {d2[1]},  [r5,:16], ip
-        vst1.16         {d2[3]},  [r5,:16], ip
-        vst1.16         {d3[1]},  [r5,:16], ip
-        vst1.16         {d3[3]},  [r5,:16], ip
-        popeq           {r4-r8,pc}
-        vld1.64         {d0-d1},  [r4,:128]!
-        vcvt.s32.f32    q0,  q0,  #16
-        vld1.64         {d2-d3},  [r4,:128]!
-        vcvt.s32.f32    q1,  q1,  #16
-        b               6b
-        .endfunc
diff --git a/libavcodec/arm/h264dsp_neon.S b/libavcodec/arm/h264dsp_neon.S
deleted file mode 100644
index 39a8daf..0000000
--- a/libavcodec/arm/h264dsp_neon.S
+++ /dev/null
@@ -1,1377 +0,0 @@
-/*
- * Copyright (c) 2008 Mans Rullgard <mans at mansr.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 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 "asm.S"
-
-        .fpu neon
-
-        .macro transpose_8x8 r0 r1 r2 r3 r4 r5 r6 r7
-        vtrn.32         \r0, \r4
-        vtrn.32         \r1, \r5
-        vtrn.32         \r2, \r6
-        vtrn.32         \r3, \r7
-        vtrn.16         \r0, \r2
-        vtrn.16         \r1, \r3
-        vtrn.16         \r4, \r6
-        vtrn.16         \r5, \r7
-        vtrn.8          \r0, \r1
-        vtrn.8          \r2, \r3
-        vtrn.8          \r4, \r5
-        vtrn.8          \r6, \r7
-        .endm
-
-        .macro swap4 r0 r1 r2 r3 r4 r5 r6 r7
-        vswp            \r0, \r4
-        vswp            \r1, \r5
-        vswp            \r2, \r6
-        vswp            \r3, \r7
-        .endm
-
-        .macro transpose16_4x4 r0 r1 r2 r3 r4 r5 r6 r7
-        vtrn.32         \r0, \r2
-        vtrn.32         \r1, \r3
-        vtrn.32         \r4, \r6
-        vtrn.32         \r5, \r7
-        vtrn.16         \r0, \r1
-        vtrn.16         \r2, \r3
-        vtrn.16         \r4, \r5
-        vtrn.16         \r6, \r7
-        .endm
-
-/* chroma_mc8(uint8_t *dst, uint8_t *src, int stride, int h, int x, int y) */
-        .macro  h264_chroma_mc8 avg=0
-        push            {r4-r7, lr}
-        ldrd            r4,  [sp, #20]
-.if \avg
-        mov             lr,  r0
-.endif
-        pld             [r1]
-        pld             [r1, r2]
-
-        muls            r7,  r4,  r5
-        rsb             r6,  r7,  r5,  lsl #3
-        rsb             ip,  r7,  r4,  lsl #3
-        sub             r4,  r7,  r4,  lsl #3
-        sub             r4,  r4,  r5,  lsl #3
-        add             r4,  r4,  #64
-
-        beq             2f
-
-        add             r5,  r1,  r2
-
-        vdup.8          d0,  r4
-        lsl             r4,  r2,  #1
-        vdup.8          d1,  ip
-        vld1.64         {d4, d5}, [r1], r4
-        vdup.8          d2,  r6
-        vld1.64         {d6, d7}, [r5], r4
-        vdup.8          d3,  r7
-
-        vext.8          d5,  d4,  d5,  #1
-        vext.8          d7,  d6,  d7,  #1
-
-1:      pld             [r5]
-        vmull.u8        q8,  d4,  d0
-        vmlal.u8        q8,  d5,  d1
-        vld1.64         {d4, d5}, [r1], r4
-        vmlal.u8        q8,  d6,  d2
-        vext.8          d5,  d4,  d5,  #1
-        vmlal.u8        q8,  d7,  d3
-        vmull.u8        q9,  d6,  d0
-        subs            r3,  r3,  #2
-        vmlal.u8        q9,  d7,  d1
-        vmlal.u8        q9,  d4,  d2
-        vmlal.u8        q9,  d5,  d3
-        vrshrn.u16      d16, q8,  #6
-        vld1.64         {d6, d7}, [r5], r4
-        pld             [r1]
-        vrshrn.u16      d17, q9,  #6
-.if \avg
-        vld1.64         {d20}, [lr,:64], r2
-        vld1.64         {d21}, [lr,:64], r2
-        vrhadd.u8       q8,  q8,  q10
-.endif
-        vext.8          d7,  d6,  d7,  #1
-        vst1.64         {d16}, [r0,:64], r2
-        vst1.64         {d17}, [r0,:64], r2
-        bgt             1b
-
-        pop             {r4-r7, pc}
-
-2:      tst             r6,  r6
-        add             ip,  ip,  r6
-        vdup.8          d0,  r4
-        vdup.8          d1,  ip
-
-        beq             4f
-
-        add             r5,  r1,  r2
-        lsl             r4,  r2,  #1
-        vld1.64         {d4}, [r1], r4
-        vld1.64         {d6}, [r5], r4
-
-3:      pld             [r5]
-        vmull.u8        q8,  d4,  d0
-        vmlal.u8        q8,  d6,  d1
-        vld1.64         {d4}, [r1], r4
-        vmull.u8        q9,  d6,  d0
-        vmlal.u8        q9,  d4,  d1
-        vld1.64         {d6}, [r5], r4
-        vrshrn.u16      d16, q8,  #6
-        vrshrn.u16      d17, q9,  #6
-.if \avg
-        vld1.64         {d20}, [lr,:64], r2
-        vld1.64         {d21}, [lr,:64], r2
-        vrhadd.u8       q8,  q8,  q10
-.endif
-        subs            r3,  r3,  #2
-        pld             [r1]
-        vst1.64         {d16}, [r0,:64], r2
-        vst1.64         {d17}, [r0,:64], r2
-        bgt             3b
-
-        pop             {r4-r7, pc}
-
-4:      vld1.64         {d4, d5}, [r1], r2
-        vld1.64         {d6, d7}, [r1], r2
-        vext.8          d5,  d4,  d5,  #1
-        vext.8          d7,  d6,  d7,  #1
-
-5:      pld             [r1]
-        subs            r3,  r3,  #2
-        vmull.u8        q8,  d4,  d0
-        vmlal.u8        q8,  d5,  d1
-        vld1.64         {d4, d5}, [r1], r2
-        vmull.u8        q9,  d6,  d0
-        vmlal.u8        q9,  d7,  d1
-        pld             [r1]
-        vext.8          d5,  d4,  d5,  #1
-        vrshrn.u16      d16, q8,  #6
-        vrshrn.u16      d17, q9,  #6
-.if \avg
-        vld1.64         {d20}, [lr,:64], r2
-        vld1.64         {d21}, [lr,:64], r2
-        vrhadd.u8       q8,  q8,  q10
-.endif
-        vld1.64         {d6, d7}, [r1], r2
-        vext.8          d7,  d6,  d7,  #1
-        vst1.64         {d16}, [r0,:64], r2
-        vst1.64         {d17}, [r0,:64], r2
-        bgt             5b
-
-        pop             {r4-r7, pc}
-        .endm
-
-/* chroma_mc4(uint8_t *dst, uint8_t *src, int stride, int h, int x, int y) */
-        .macro  h264_chroma_mc4 avg=0
-        push            {r4-r7, lr}
-        ldrd            r4,  [sp, #20]
-.if \avg
-        mov             lr,  r0
-.endif
-        pld             [r1]
-        pld             [r1, r2]
-
-        muls            r7,  r4,  r5
-        rsb             r6,  r7,  r5,  lsl #3
-        rsb             ip,  r7,  r4,  lsl #3
-        sub             r4,  r7,  r4,  lsl #3
-        sub             r4,  r4,  r5,  lsl #3
-        add             r4,  r4,  #64
-
-        beq             2f
-
-        add             r5,  r1,  r2
-
-        vdup.8          d0,  r4
-        lsl             r4,  r2,  #1
-        vdup.8          d1,  ip
-        vld1.64         {d4},     [r1], r4
-        vdup.8          d2,  r6
-        vld1.64         {d6},     [r5], r4
-        vdup.8          d3,  r7
-
-        vext.8          d5,  d4,  d5,  #1
-        vext.8          d7,  d6,  d7,  #1
-        vtrn.32         d4,  d5
-        vtrn.32         d6,  d7
-
-        vtrn.32         d0,  d1
-        vtrn.32         d2,  d3
-
-1:      pld             [r5]
-        vmull.u8        q8,  d4,  d0
-        vmlal.u8        q8,  d6,  d2
-        vld1.64         {d4},     [r1], r4
-        vext.8          d5,  d4,  d5,  #1
-        vtrn.32         d4,  d5
-        vmull.u8        q9,  d6,  d0
-        vmlal.u8        q9,  d4,  d2
-        vld1.64         {d6},     [r5], r4
-        vadd.i16        d16, d16, d17
-        vadd.i16        d17, d18, d19
-        vrshrn.u16      d16, q8,  #6
-        subs            r3,  r3,  #2
-        pld             [r1]
-.if \avg
-        vld1.32         {d20[0]}, [lr,:32], r2
-        vld1.32         {d20[1]}, [lr,:32], r2
-        vrhadd.u8       d16, d16, d20
-.endif
-        vext.8          d7,  d6,  d7,  #1
-        vtrn.32         d6,  d7
-        vst1.32         {d16[0]}, [r0,:32], r2
-        vst1.32         {d16[1]}, [r0,:32], r2
-        bgt             1b
-
-        pop             {r4-r7, pc}
-
-2:      tst             r6,  r6
-        add             ip,  ip,  r6
-        vdup.8          d0,  r4
-        vdup.8          d1,  ip
-        vtrn.32         d0,  d1
-
-        beq             4f
-
-        vext.32         d1,  d0,  d1,  #1
-        add             r5,  r1,  r2
-        lsl             r4,  r2,  #1
-        vld1.32         {d4[0]},  [r1], r4
-        vld1.32         {d4[1]},  [r5], r4
-
-3:      pld             [r5]
-        vmull.u8        q8,  d4,  d0
-        vld1.32         {d4[0]},  [r1], r4
-        vmull.u8        q9,  d4,  d1
-        vld1.32         {d4[1]},  [r5], r4
-        vadd.i16        d16, d16, d17
-        vadd.i16        d17, d18, d19
-        vrshrn.u16      d16, q8,  #6
-.if \avg
-        vld1.32         {d20[0]}, [lr,:32], r2
-        vld1.32         {d20[1]}, [lr,:32], r2
-        vrhadd.u8       d16, d16, d20
-.endif
-        subs            r3,  r3,  #2
-        pld             [r1]
-        vst1.32         {d16[0]}, [r0,:32], r2
-        vst1.32         {d16[1]}, [r0,:32], r2
-        bgt             3b
-
-        pop             {r4-r7, pc}
-
-4:      vld1.64         {d4},     [r1], r2
-        vld1.64         {d6},     [r1], r2
-        vext.8          d5,  d4,  d5,  #1
-        vext.8          d7,  d6,  d7,  #1
-        vtrn.32         d4,  d5
-        vtrn.32         d6,  d7
-
-5:      vmull.u8        q8,  d4,  d0
-        vmull.u8        q9,  d6,  d0
-        subs            r3,  r3,  #2
-        vld1.64         {d4},     [r1], r2
-        vext.8          d5,  d4,  d5,  #1
-        vtrn.32         d4,  d5
-        vadd.i16        d16, d16, d17
-        vadd.i16        d17, d18, d19
-        pld             [r1]
-        vrshrn.u16      d16, q8,  #6
-.if \avg
-        vld1.32         {d20[0]}, [lr,:32], r2
-        vld1.32         {d20[1]}, [lr,:32], r2
-        vrhadd.u8       d16, d16, d20
-.endif
-        vld1.64         {d6},     [r1], r2
-        vext.8          d7,  d6,  d7,  #1
-        vtrn.32         d6,  d7
-        pld             [r1]
-        vst1.32         {d16[0]}, [r0,:32], r2
-        vst1.32         {d16[1]}, [r0,:32], r2
-        bgt             5b
-
-        pop             {r4-r7, pc}
-        .endm
-
-        .text
-        .align
-
-function ff_put_h264_chroma_mc8_neon, export=1
-        h264_chroma_mc8
-        .endfunc
-
-function ff_avg_h264_chroma_mc8_neon, export=1
-        h264_chroma_mc8 avg=1
-        .endfunc
-
-function ff_put_h264_chroma_mc4_neon, export=1
-        h264_chroma_mc4
-        .endfunc
-
-function ff_avg_h264_chroma_mc4_neon, export=1
-        h264_chroma_mc4 avg=1
-        .endfunc
-
-        /* H.264 loop filter */
-
-        .macro h264_loop_filter_start
-        ldr             ip,  [sp]
-        tst             r2,  r2
-        ldr             ip,  [ip]
-        tstne           r3,  r3
-        vmov.32         d24[0], ip
-        and             ip,  ip,  ip, lsl #16
-        bxeq            lr
-        ands            ip,  ip,  ip, lsl #8
-        bxlt            lr
-        .endm
-
-        .macro align_push_regs
-        and             ip,  sp,  #15
-        add             ip,  ip,  #32
-        sub             sp,  sp,  ip
-        vst1.64         {d12-d15}, [sp,:128]
-        sub             sp,  sp,  #32
-        vst1.64         {d8-d11},  [sp,:128]
-        .endm
-
-        .macro align_pop_regs
-        vld1.64         {d8-d11},  [sp,:128]!
-        vld1.64         {d12-d15}, [sp,:128], ip
-        .endm
-
-        .macro h264_loop_filter_luma
-        vdup.8          q11, r2         @ alpha
-        vmovl.u8        q12, d24
-        vabd.u8         q6,  q8,  q0    @ abs(p0 - q0)
-        vmovl.u16       q12, d24
-        vabd.u8         q14, q9,  q8    @ abs(p1 - p0)
-        vsli.16         q12, q12, #8
-        vabd.u8         q15, q1,  q0    @ abs(q1 - q0)
-        vsli.32         q12, q12, #16
-        vclt.u8         q6,  q6,  q11   @ < alpha
-        vdup.8          q11, r3         @ beta
-        vclt.s8         q7,  q12, #0
-        vclt.u8         q14, q14, q11   @ < beta
-        vclt.u8         q15, q15, q11   @ < beta
-        vbic            q6,  q6,  q7
-        vabd.u8         q4,  q10, q8    @ abs(p2 - p0)
-        vand            q6,  q6,  q14
-        vabd.u8         q5,  q2,  q0    @ abs(q2 - q0)
-        vclt.u8         q4,  q4,  q11   @ < beta
-        vand            q6,  q6,  q15
-        vclt.u8         q5,  q5,  q11   @ < beta
-        vand            q4,  q4,  q6
-        vand            q5,  q5,  q6
-        vand            q12, q12, q6
-        vrhadd.u8       q14, q8,  q0
-        vsub.i8         q6,  q12, q4
-        vqadd.u8        q7,  q9,  q12
-        vhadd.u8        q10, q10, q14
-        vsub.i8         q6,  q6,  q5
-        vhadd.u8        q14, q2,  q14
-        vmin.u8         q7,  q7,  q10
-        vqsub.u8        q11, q9,  q12
-        vqadd.u8        q2,  q1,  q12
-        vmax.u8         q7,  q7,  q11
-        vqsub.u8        q11, q1,  q12
-        vmin.u8         q14, q2,  q14
-        vmovl.u8        q2,  d0
-        vmax.u8         q14, q14, q11
-        vmovl.u8        q10, d1
-        vsubw.u8        q2,  q2,  d16
-        vsubw.u8        q10, q10, d17
-        vshl.i16        q2,  q2,  #2
-        vshl.i16        q10, q10, #2
-        vaddw.u8        q2,  q2,  d18
-        vaddw.u8        q10, q10, d19
-        vsubw.u8        q2,  q2,  d2
-        vsubw.u8        q10, q10, d3
-        vrshrn.i16      d4,  q2,  #3
-        vrshrn.i16      d5,  q10, #3
-        vbsl            q4,  q7,  q9
-        vbsl            q5,  q14, q1
-        vneg.s8         q7,  q6
-        vmovl.u8        q14, d16
-        vmin.s8         q2,  q2,  q6
-        vmovl.u8        q6,  d17
-        vmax.s8         q2,  q2,  q7
-        vmovl.u8        q11, d0
-        vmovl.u8        q12, d1
-        vaddw.s8        q14, q14, d4
-        vaddw.s8        q6,  q6,  d5
-        vsubw.s8        q11, q11, d4
-        vsubw.s8        q12, q12, d5
-        vqmovun.s16     d16, q14
-        vqmovun.s16     d17, q6
-        vqmovun.s16     d0,  q11
-        vqmovun.s16     d1,  q12
-        .endm
-
-function ff_h264_v_loop_filter_luma_neon, export=1
-        h264_loop_filter_start
-
-        vld1.64         {d0, d1},  [r0,:128], r1
-        vld1.64         {d2, d3},  [r0,:128], r1
-        vld1.64         {d4, d5},  [r0,:128], r1
-        sub             r0,  r0,  r1, lsl #2
-        sub             r0,  r0,  r1, lsl #1
-        vld1.64         {d20,d21}, [r0,:128], r1
-        vld1.64         {d18,d19}, [r0,:128], r1
-        vld1.64         {d16,d17}, [r0,:128], r1
-
-        align_push_regs
-
-        h264_loop_filter_luma
-
-        sub             r0,  r0,  r1, lsl #1
-        vst1.64         {d8, d9},  [r0,:128], r1
-        vst1.64         {d16,d17}, [r0,:128], r1
-        vst1.64         {d0, d1},  [r0,:128], r1
-        vst1.64         {d10,d11}, [r0,:128]
-
-        align_pop_regs
-        bx              lr
-        .endfunc
-
-function ff_h264_h_loop_filter_luma_neon, export=1
-        h264_loop_filter_start
-
-        sub             r0,  r0,  #4
-        vld1.64         {d6},  [r0], r1
-        vld1.64         {d20}, [r0], r1
-        vld1.64         {d18}, [r0], r1
-        vld1.64         {d16}, [r0], r1
-        vld1.64         {d0},  [r0], r1
-        vld1.64         {d2},  [r0], r1
-        vld1.64         {d4},  [r0], r1
-        vld1.64         {d26}, [r0], r1
-        vld1.64         {d7},  [r0], r1
-        vld1.64         {d21}, [r0], r1
-        vld1.64         {d19}, [r0], r1
-        vld1.64         {d17}, [r0], r1
-        vld1.64         {d1},  [r0], r1
-        vld1.64         {d3},  [r0], r1
-        vld1.64         {d5},  [r0], r1
-        vld1.64         {d27}, [r0], r1
-
-        transpose_8x8   q3, q10, q9, q8, q0, q1, q2, q13
-
-        align_push_regs
-        sub             sp,  sp,  #16
-        vst1.64         {d4, d5},  [sp,:128]
-        sub             sp,  sp,  #16
-        vst1.64         {d20,d21}, [sp,:128]
-
-        h264_loop_filter_luma
-
-        vld1.64         {d20,d21}, [sp,:128]!
-        vld1.64         {d4, d5},  [sp,:128]!
-
-        transpose_8x8   q3, q10, q4, q8, q0, q5, q2, q13
-
-        sub             r0,  r0,  r1, lsl #4
-        vst1.64         {d6},  [r0], r1
-        vst1.64         {d20}, [r0], r1
-        vst1.64         {d8},  [r0], r1
-        vst1.64         {d16}, [r0], r1
-        vst1.64         {d0},  [r0], r1
-        vst1.64         {d10}, [r0], r1
-        vst1.64         {d4},  [r0], r1
-        vst1.64         {d26}, [r0], r1
-        vst1.64         {d7},  [r0], r1
-        vst1.64         {d21}, [r0], r1
-        vst1.64         {d9},  [r0], r1
-        vst1.64         {d17}, [r0], r1
-        vst1.64         {d1},  [r0], r1
-        vst1.64         {d11}, [r0], r1
-        vst1.64         {d5},  [r0], r1
-        vst1.64         {d27}, [r0], r1
-
-        align_pop_regs
-        bx              lr
-        .endfunc
-
-        .macro h264_loop_filter_chroma
-        vdup.8          d22, r2         @ alpha
-        vmovl.u8        q12, d24
-        vabd.u8         d26, d16, d0    @ abs(p0 - q0)
-        vmovl.u8        q2,  d0
-        vabd.u8         d28, d18, d16   @ abs(p1 - p0)
-        vsubw.u8        q2,  q2,  d16
-        vsli.16         d24, d24, #8
-        vshl.i16        q2,  q2,  #2
-        vabd.u8         d30, d2,  d0    @ abs(q1 - q0)
-        vaddw.u8        q2,  q2,  d18
-        vclt.u8         d26, d26, d22   @ < alpha
-        vsubw.u8        q2,  q2,  d2
-        vdup.8          d22, r3         @ beta
-        vclt.s8         d25, d24, #0
-        vrshrn.i16      d4,  q2,  #3
-        vclt.u8         d28, d28, d22   @ < beta
-        vbic            d26, d26, d25
-        vclt.u8         d30, d30, d22   @ < beta
-        vand            d26, d26, d28
-        vneg.s8         d25, d24
-        vand            d26, d26, d30
-        vmin.s8         d4,  d4,  d24
-        vmovl.u8        q14, d16
-        vand            d4,  d4,  d26
-        vmax.s8         d4,  d4,  d25
-        vmovl.u8        q11, d0
-        vaddw.s8        q14, q14, d4
-        vsubw.s8        q11, q11, d4
-        vqmovun.s16     d16, q14
-        vqmovun.s16     d0,  q11
-        .endm
-
-function ff_h264_v_loop_filter_chroma_neon, export=1
-        h264_loop_filter_start
-
-        sub             r0,  r0,  r1, lsl #1
-        vld1.64         {d18}, [r0,:64], r1
-        vld1.64         {d16}, [r0,:64], r1
-        vld1.64         {d0},  [r0,:64], r1
-        vld1.64         {d2},  [r0,:64]
-
-        h264_loop_filter_chroma
-
-        sub             r0,  r0,  r1, lsl #1
-        vst1.64         {d16}, [r0,:64], r1
-        vst1.64         {d0},  [r0,:64], r1
-
-        bx              lr
-        .endfunc
-
-function ff_h264_h_loop_filter_chroma_neon, export=1
-        h264_loop_filter_start
-
-        sub             r0,  r0,  #2
-        vld1.32         {d18[0]}, [r0], r1
-        vld1.32         {d16[0]}, [r0], r1
-        vld1.32         {d0[0]},  [r0], r1
-        vld1.32         {d2[0]},  [r0], r1
-        vld1.32         {d18[1]}, [r0], r1
-        vld1.32         {d16[1]}, [r0], r1
-        vld1.32         {d0[1]},  [r0], r1
-        vld1.32         {d2[1]},  [r0], r1
-
-        vtrn.16         d18, d0
-        vtrn.16         d16, d2
-        vtrn.8          d18, d16
-        vtrn.8          d0,  d2
-
-        h264_loop_filter_chroma
-
-        vtrn.16         d18, d0
-        vtrn.16         d16, d2
-        vtrn.8          d18, d16
-        vtrn.8          d0,  d2
-
-        sub             r0,  r0,  r1, lsl #3
-        vst1.32         {d18[0]}, [r0], r1
-        vst1.32         {d16[0]}, [r0], r1
-        vst1.32         {d0[0]},  [r0], r1
-        vst1.32         {d2[0]},  [r0], r1
-        vst1.32         {d18[1]}, [r0], r1
-        vst1.32         {d16[1]}, [r0], r1
-        vst1.32         {d0[1]},  [r0], r1
-        vst1.32         {d2[1]},  [r0], r1
-
-        bx              lr
-        .endfunc
-
-        /* H.264 qpel MC */
-
-        .macro  lowpass_const r
-        movw            \r,  #5
-        movt            \r,  #20
-        vmov.32         d6[0], \r
-        .endm
-
-        .macro  lowpass_8 r0, r1, r2, r3, d0, d1, narrow=1
-.if \narrow
-        t0 .req q0
-        t1 .req q8
-.else
-        t0 .req \d0
-        t1 .req \d1
-.endif
-        vext.8          d2,  \r0, \r1, #2
-        vext.8          d3,  \r0, \r1, #3
-        vaddl.u8        q1,  d2,  d3
-        vext.8          d4,  \r0, \r1, #1
-        vext.8          d5,  \r0, \r1, #4
-        vaddl.u8        q2,  d4,  d5
-        vext.8          d30, \r0, \r1, #5
-        vaddl.u8        t0,  \r0, d30
-        vext.8          d18, \r2, \r3, #2
-        vmla.i16        t0,  q1,  d6[1]
-        vext.8          d19, \r2, \r3, #3
-        vaddl.u8        q9,  d18, d19
-        vext.8          d20, \r2, \r3, #1
-        vmls.i16        t0,  q2,  d6[0]
-        vext.8          d21, \r2, \r3, #4
-        vaddl.u8        q10, d20, d21
-        vext.8          d31, \r2, \r3, #5
-        vaddl.u8        t1,  \r2, d31
-        vmla.i16        t1,  q9,  d6[1]
-        vmls.i16        t1,  q10, d6[0]
-.if \narrow
-        vqrshrun.s16    \d0, t0,  #5
-        vqrshrun.s16    \d1, t1,  #5
-.endif
-        .unreq  t0
-        .unreq  t1
-        .endm
-
-        .macro  lowpass_8_1 r0, r1, d0, narrow=1
-.if \narrow
-        t0 .req q0
-.else
-        t0 .req \d0
-.endif
-        vext.8          d2,  \r0, \r1, #2
-        vext.8          d3,  \r0, \r1, #3
-        vaddl.u8        q1,  d2,  d3
-        vext.8          d4,  \r0, \r1, #1
-        vext.8          d5,  \r0, \r1, #4
-        vaddl.u8        q2,  d4,  d5
-        vext.8          d30, \r0, \r1, #5
-        vaddl.u8        t0,  \r0, d30
-        vmla.i16        t0,  q1,  d6[1]
-        vmls.i16        t0,  q2,  d6[0]
-.if \narrow
-        vqrshrun.s16    \d0, t0,  #5
-.endif
-        .unreq  t0
-        .endm
-
-        .macro  lowpass_8.16 r0, r1, l0, h0, l1, h1, d
-        vext.16         q1,  \r0, \r1, #2
-        vext.16         q0,  \r0, \r1, #3
-        vaddl.s16       q9,  d2,  d0
-        vext.16         q2,  \r0, \r1, #1
-        vaddl.s16       q1,  d3,  d1
-        vext.16         q3,  \r0, \r1, #4
-        vaddl.s16       q10, d4,  d6
-        vext.16         \r1, \r0, \r1, #5
-        vaddl.s16       q2,  d5,  d7
-        vaddl.s16       q0,  \h0, \h1
-        vaddl.s16       q8,  \l0, \l1
-
-        vshl.i32        q3,  q9,  #4
-        vshl.i32        q9,  q9,  #2
-        vshl.i32        q15, q10, #2
-        vadd.i32        q9,  q9,  q3
-        vadd.i32        q10, q10, q15
-
-        vshl.i32        q3,  q1,  #4
-        vshl.i32        q1,  q1,  #2
-        vshl.i32        q15, q2,  #2
-        vadd.i32        q1,  q1,  q3
-        vadd.i32        q2,  q2,  q15
-
-        vadd.i32        q9,  q9,  q8
-        vsub.i32        q9,  q9,  q10
-
-        vadd.i32        q1,  q1,  q0
-        vsub.i32        q1,  q1,  q2
-
-        vrshrn.s32      d18, q9,  #10
-        vrshrn.s32      d19, q1,  #10
-
-        vqmovun.s16     \d,  q9
-        .endm
-
-function put_h264_qpel16_h_lowpass_neon_packed
-        mov             r4,  lr
-        mov             ip,  #16
-        mov             r3,  #8
-        bl              put_h264_qpel8_h_lowpass_neon
-        sub             r1,  r1,  r2, lsl #4
-        add             r1,  r1,  #8
-        mov             ip,  #16
-        mov             lr,  r4
-        b               put_h264_qpel8_h_lowpass_neon
-        .endfunc
-
-function put_h264_qpel16_h_lowpass_neon
-        push            {lr}
-        mov             ip,  #16
-        bl              put_h264_qpel8_h_lowpass_neon
-        sub             r0,  r0,  r3, lsl #4
-        sub             r1,  r1,  r2, lsl #4
-        add             r0,  r0,  #8
-        add             r1,  r1,  #8
-        mov             ip,  #16
-        pop             {lr}
-        .endfunc
-
-function put_h264_qpel8_h_lowpass_neon
-1:      vld1.64         {d0, d1},  [r1], r2
-        vld1.64         {d16,d17}, [r1], r2
-        subs            ip,  ip,  #2
-        lowpass_8       d0,  d1,  d16, d17, d0,  d16
-        vst1.64         {d0},     [r0,:64], r3
-        vst1.64         {d16},    [r0,:64], r3
-        bne             1b
-        bx              lr
-        .endfunc
-
-function put_h264_qpel16_h_lowpass_l2_neon
-        push            {lr}
-        mov             ip,  #16
-        bl              put_h264_qpel8_h_lowpass_l2_neon
-        sub             r0,  r0,  r2, lsl #4
-        sub             r1,  r1,  r2, lsl #4
-        sub             r3,  r3,  r2, lsl #4
-        add             r0,  r0,  #8
-        add             r1,  r1,  #8
-        add             r3,  r3,  #8
-        mov             ip,  #16
-        pop             {lr}
-        .endfunc
-
-function put_h264_qpel8_h_lowpass_l2_neon
-1:      vld1.64         {d0, d1},  [r1], r2
-        vld1.64         {d16,d17}, [r1], r2
-        vld1.64         {d28},     [r3], r2
-        vld1.64         {d29},     [r3], r2
-        subs            ip,  ip,  #2
-        lowpass_8       d0,  d1,  d16, d17, d0,  d1
-        vrhadd.u8       q0,  q0,  q14
-        vst1.64         {d0},      [r0,:64], r2
-        vst1.64         {d1},      [r0,:64], r2
-        bne             1b
-        bx              lr
-        .endfunc
-
-function put_h264_qpel16_v_lowpass_neon_packed
-        mov             r4,  lr
-        mov             r2,  #8
-        bl              put_h264_qpel8_v_lowpass_neon
-        sub             r1,  r1,  r3, lsl #2
-        bl              put_h264_qpel8_v_lowpass_neon
-        sub             r1,  r1,  r3, lsl #4
-        sub             r1,  r1,  r3, lsl #2
-        add             r1,  r1,  #8
-        bl              put_h264_qpel8_v_lowpass_neon
-        sub             r1,  r1,  r3, lsl #2
-        mov             lr,  r4
-        b               put_h264_qpel8_v_lowpass_neon
-        .endfunc
-
-function put_h264_qpel16_v_lowpass_neon
-        mov             r4,  lr
-        bl              put_h264_qpel8_v_lowpass_neon
-        sub             r1,  r1,  r3, lsl #2
-        bl              put_h264_qpel8_v_lowpass_neon
-        sub             r0,  r0,  r2, lsl #4
-        add             r0,  r0,  #8
-        sub             r1,  r1,  r3, lsl #4
-        sub             r1,  r1,  r3, lsl #2
-        add             r1,  r1,  #8
-        bl              put_h264_qpel8_v_lowpass_neon
-        sub             r1,  r1,  r3, lsl #2
-        mov             lr,  r4
-        .endfunc
-
-function put_h264_qpel8_v_lowpass_neon
-        vld1.64         {d8},  [r1], r3
-        vld1.64         {d10}, [r1], r3
-        vld1.64         {d12}, [r1], r3
-        vld1.64         {d14}, [r1], r3
-        vld1.64         {d22}, [r1], r3
-        vld1.64         {d24}, [r1], r3
-        vld1.64         {d26}, [r1], r3
-        vld1.64         {d28}, [r1], r3
-        vld1.64         {d9},  [r1], r3
-        vld1.64         {d11}, [r1], r3
-        vld1.64         {d13}, [r1], r3
-        vld1.64         {d15}, [r1], r3
-        vld1.64         {d23}, [r1]
-
-        transpose_8x8   q4,  q5,  q6,  q7,  q11, q12, q13, q14
-        lowpass_8       d8,  d9,  d10, d11, d8,  d10
-        lowpass_8       d12, d13, d14, d15, d12, d14
-        lowpass_8       d22, d23, d24, d25, d22, d24
-        lowpass_8       d26, d27, d28, d29, d26, d28
-        transpose_8x8   d8,  d10, d12, d14, d22, d24, d26, d28
-
-        vst1.64         {d8},  [r0,:64], r2
-        vst1.64         {d10}, [r0,:64], r2
-        vst1.64         {d12}, [r0,:64], r2
-        vst1.64         {d14}, [r0,:64], r2
-        vst1.64         {d22}, [r0,:64], r2
-        vst1.64         {d24}, [r0,:64], r2
-        vst1.64         {d26}, [r0,:64], r2
-        vst1.64         {d28}, [r0,:64], r2
-
-        bx              lr
-        .endfunc
-
-function put_h264_qpel16_v_lowpass_l2_neon
-        mov             r4,  lr
-        bl              put_h264_qpel8_v_lowpass_l2_neon
-        sub             r1,  r1,  r3, lsl #2
-        bl              put_h264_qpel8_v_lowpass_l2_neon
-        sub             r0,  r0,  r3, lsl #4
-        sub             ip,  ip,  r2, lsl #4
-        add             r0,  r0,  #8
-        add             ip,  ip,  #8
-        sub             r1,  r1,  r3, lsl #4
-        sub             r1,  r1,  r3, lsl #2
-        add             r1,  r1,  #8
-        bl              put_h264_qpel8_v_lowpass_l2_neon
-        sub             r1,  r1,  r3, lsl #2
-        mov             lr,  r4
-        .endfunc
-
-function put_h264_qpel8_v_lowpass_l2_neon
-        vld1.64         {d8},  [r1], r3
-        vld1.64         {d10}, [r1], r3
-        vld1.64         {d12}, [r1], r3
-        vld1.64         {d14}, [r1], r3
-        vld1.64         {d22}, [r1], r3
-        vld1.64         {d24}, [r1], r3
-        vld1.64         {d26}, [r1], r3
-        vld1.64         {d28}, [r1], r3
-        vld1.64         {d9},  [r1], r3
-        vld1.64         {d11}, [r1], r3
-        vld1.64         {d13}, [r1], r3
-        vld1.64         {d15}, [r1], r3
-        vld1.64         {d23}, [r1]
-
-        transpose_8x8   q4,  q5,  q6,  q7,  q11, q12, q13, q14
-        lowpass_8       d8,  d9,  d10, d11, d8,  d9
-        lowpass_8       d12, d13, d14, d15, d12, d13
-        lowpass_8       d22, d23, d24, d25, d22, d23
-        lowpass_8       d26, d27, d28, d29, d26, d27
-        transpose_8x8   d8,  d9,  d12, d13, d22, d23, d26, d27
-
-        vld1.64         {d0},  [ip], r2
-        vld1.64         {d1},  [ip], r2
-        vld1.64         {d2},  [ip], r2
-        vld1.64         {d3},  [ip], r2
-        vld1.64         {d4},  [ip], r2
-        vrhadd.u8       q0,  q0,  q4
-        vld1.64         {d5},  [ip], r2
-        vrhadd.u8       q1,  q1,  q6
-        vld1.64         {d10}, [ip], r2
-        vrhadd.u8       q2,  q2,  q11
-        vld1.64         {d11}, [ip], r2
-
-        vst1.64         {d0},  [r0,:64], r3
-        vst1.64         {d1},  [r0,:64], r3
-        vrhadd.u8       q5,  q5,  q13
-        vst1.64         {d2},  [r0,:64], r3
-        vst1.64         {d3},  [r0,:64], r3
-        vst1.64         {d4},  [r0,:64], r3
-        vst1.64         {d5},  [r0,:64], r3
-        vst1.64         {d10}, [r0,:64], r3
-        vst1.64         {d11}, [r0,:64], r3
-
-        bx              lr
-        .endfunc
-
-function put_h264_qpel8_hv_lowpass_neon_top
-        lowpass_const   ip
-        mov             ip,  #12
-1:      vld1.64         {d0, d1},  [r1], r3
-        vld1.64         {d16,d17}, [r1], r3
-        subs            ip,  ip,  #2
-        lowpass_8       d0,  d1,  d16, d17, q11, q12, narrow=0
-        vst1.64         {d22-d25}, [r4,:128]!
-        bne             1b
-
-        vld1.64         {d0, d1},  [r1]
-        lowpass_8_1     d0,  d1,  q12, narrow=0
-
-        mov             ip,  #-16
-        add             r4,  r4,  ip
-        vld1.64         {d30,d31}, [r4,:128], ip
-        vld1.64         {d20,d21}, [r4,:128], ip
-        vld1.64         {d18,d19}, [r4,:128], ip
-        vld1.64         {d16,d17}, [r4,:128], ip
-        vld1.64         {d14,d15}, [r4,:128], ip
-        vld1.64         {d12,d13}, [r4,:128], ip
-        vld1.64         {d10,d11}, [r4,:128], ip
-        vld1.64         {d8, d9},  [r4,:128], ip
-        vld1.64         {d6, d7},  [r4,:128], ip
-        vld1.64         {d4, d5},  [r4,:128], ip
-        vld1.64         {d2, d3},  [r4,:128], ip
-        vld1.64         {d0, d1},  [r4,:128]
-
-        swap4           d1,  d3,  d5,  d7,  d8,  d10, d12, d14
-        transpose16_4x4 q0,  q1,  q2,  q3,  q4,  q5,  q6,  q7
-
-        swap4           d17, d19, d21, d31, d24, d26, d28, d22
-        transpose16_4x4 q8,  q9,  q10, q15, q12, q13, q14, q11
-
-        vst1.64         {d30,d31}, [r4,:128]!
-        vst1.64         {d6, d7},  [r4,:128]!
-        vst1.64         {d20,d21}, [r4,:128]!
-        vst1.64         {d4, d5},  [r4,:128]!
-        vst1.64         {d18,d19}, [r4,:128]!
-        vst1.64         {d2, d3},  [r4,:128]!
-        vst1.64         {d16,d17}, [r4,:128]!
-        vst1.64         {d0, d1},  [r4,:128]
-
-        lowpass_8.16    q4,  q12, d8,  d9,  d24, d25, d8
-        lowpass_8.16    q5,  q13, d10, d11, d26, d27, d9
-        lowpass_8.16    q6,  q14, d12, d13, d28, d29, d10
-        lowpass_8.16    q7,  q11, d14, d15, d22, d23, d11
-
-        vld1.64         {d16,d17}, [r4,:128], ip
-        vld1.64         {d30,d31}, [r4,:128], ip
-        lowpass_8.16    q8,  q15, d16, d17, d30, d31, d12
-        vld1.64         {d16,d17}, [r4,:128], ip
-        vld1.64         {d30,d31}, [r4,:128], ip
-        lowpass_8.16    q8,  q15, d16, d17, d30, d31, d13
-        vld1.64         {d16,d17}, [r4,:128], ip
-        vld1.64         {d30,d31}, [r4,:128], ip
-        lowpass_8.16    q8,  q15, d16, d17, d30, d31, d14
-        vld1.64         {d16,d17}, [r4,:128], ip
-        vld1.64         {d30,d31}, [r4,:128]
-        lowpass_8.16    q8,  q15, d16, d17, d30, d31, d15
-
-        transpose_8x8   d12, d13, d14, d15, d8,  d9,  d10, d11
-
-        bx              lr
-        .endfunc
-
-function put_h264_qpel8_hv_lowpass_neon
-        mov             r10, lr
-        bl              put_h264_qpel8_hv_lowpass_neon_top
-        vst1.64         {d12},     [r0,:64], r2
-        vst1.64         {d13},     [r0,:64], r2
-        vst1.64         {d14},     [r0,:64], r2
-        vst1.64         {d15},     [r0,:64], r2
-        vst1.64         {d8},      [r0,:64], r2
-        vst1.64         {d9},      [r0,:64], r2
-        vst1.64         {d10},     [r0,:64], r2
-        vst1.64         {d11},     [r0,:64], r2
-
-        mov             lr,  r10
-        bx              lr
-        .endfunc
-
-function put_h264_qpel8_hv_lowpass_l2_neon
-        mov             r10, lr
-        bl              put_h264_qpel8_hv_lowpass_neon_top
-
-        vld1.64         {d0, d1},  [r2,:128]!
-        vld1.64         {d2, d3},  [r2,:128]!
-        vrhadd.u8       q0,  q0,  q6
-        vld1.64         {d4, d5},  [r2,:128]!
-        vrhadd.u8       q1,  q1,  q7
-        vld1.64         {d6, d7},  [r2,:128]!
-        vrhadd.u8       q2,  q2,  q4
-
-        vst1.64         {d0},      [r0,:64], r3
-        vrhadd.u8       q3,  q3,  q5
-        vst1.64         {d1},      [r0,:64], r3
-        vst1.64         {d2},      [r0,:64], r3
-        vst1.64         {d3},      [r0,:64], r3
-        vst1.64         {d4},      [r0,:64], r3
-        vst1.64         {d5},      [r0,:64], r3
-        vst1.64         {d6},      [r0,:64], r3
-        vst1.64         {d7},      [r0,:64], r3
-
-        mov             lr,  r10
-        bx              lr
-        .endfunc
-
-function put_h264_qpel16_hv_lowpass_neon
-        mov             r9,  lr
-        bl              put_h264_qpel8_hv_lowpass_neon
-        sub             r1,  r1,  r3, lsl #2
-        bl              put_h264_qpel8_hv_lowpass_neon
-        sub             r1,  r1,  r3, lsl #4
-        sub             r1,  r1,  r3, lsl #2
-        add             r1,  r1,  #8
-        sub             r0,  r0,  r2, lsl #4
-        add             r0,  r0,  #8
-        bl              put_h264_qpel8_hv_lowpass_neon
-        sub             r1,  r1,  r3, lsl #2
-        mov             lr,  r9
-        b               put_h264_qpel8_hv_lowpass_neon
-        .endfunc
-
-function put_h264_qpel16_hv_lowpass_l2_neon
-        mov             r9,  lr
-        sub             r2,  r4,  #256
-        bl              put_h264_qpel8_hv_lowpass_l2_neon
-        sub             r1,  r1,  r3, lsl #2
-        bl              put_h264_qpel8_hv_lowpass_l2_neon
-        sub             r1,  r1,  r3, lsl #4
-        sub             r1,  r1,  r3, lsl #2
-        add             r1,  r1,  #8
-        sub             r0,  r0,  r3, lsl #4
-        add             r0,  r0,  #8
-        bl              put_h264_qpel8_hv_lowpass_l2_neon
-        sub             r1,  r1,  r3, lsl #2
-        mov             lr,  r9
-        b               put_h264_qpel8_hv_lowpass_l2_neon
-        .endfunc
-
-function ff_put_h264_qpel8_mc10_neon, export=1
-        lowpass_const   r3
-        mov             r3,  r1
-        sub             r1,  r1,  #2
-        mov             ip,  #8
-        b               put_h264_qpel8_h_lowpass_l2_neon
-        .endfunc
-
-function ff_put_h264_qpel8_mc20_neon, export=1
-        lowpass_const   r3
-        sub             r1,  r1,  #2
-        mov             r3,  r2
-        mov             ip,  #8
-        b               put_h264_qpel8_h_lowpass_neon
-        .endfunc
-
-function ff_put_h264_qpel8_mc30_neon, export=1
-        lowpass_const   r3
-        add             r3,  r1,  #1
-        sub             r1,  r1,  #2
-        mov             ip,  #8
-        b               put_h264_qpel8_h_lowpass_l2_neon
-        .endfunc
-
-function ff_put_h264_qpel8_mc01_neon, export=1
-        push            {lr}
-        mov             ip,  r1
-put_h264_qpel8_mc01:
-        lowpass_const   r3
-        mov             r3,  r2
-        sub             r1,  r1,  r2, lsl #1
-        vpush           {d8-d15}
-        bl              put_h264_qpel8_v_lowpass_l2_neon
-        vpop            {d8-d15}
-        pop             {pc}
-        .endfunc
-
-function ff_put_h264_qpel8_mc11_neon, export=1
-        push            {r0, r1, r2, lr}
-put_h264_qpel8_mc11:
-        lowpass_const   r3
-        sub             sp,  sp,  #64
-        mov             r0,  sp
-        sub             r1,  r1,  #2
-        mov             r3,  #8
-        mov             ip,  #8
-        vpush           {d8-d15}
-        bl              put_h264_qpel8_h_lowpass_neon
-        ldrd            r0,  [sp, #128]
-        mov             r3,  r2
-        add             ip,  sp,  #64
-        sub             r1,  r1,  r2, lsl #1
-        mov             r2,  #8
-        bl              put_h264_qpel8_v_lowpass_l2_neon
-        vpop            {d8-d15}
-        add             sp,  sp,  #76
-        pop             {pc}
-        .endfunc
-
-function ff_put_h264_qpel8_mc21_neon, export=1
-        push            {r0, r1, r4, r10, r11, lr}
-put_h264_qpel8_mc21:
-        lowpass_const   r3
-        mov             r11, sp
-        bic             sp,  sp,  #15
-        sub             sp,  sp,  #(8*8+16*12)
-        sub             r1,  r1,  #2
-        mov             r3,  #8
-        mov             r0,  sp
-        mov             ip,  #8
-        vpush           {d8-d15}
-        bl              put_h264_qpel8_h_lowpass_neon
-        mov             r4,  r0
-        ldrd            r0,  [r11]
-        sub             r1,  r1,  r2, lsl #1
-        sub             r1,  r1,  #2
-        mov             r3,  r2
-        sub             r2,  r4,  #64
-        bl              put_h264_qpel8_hv_lowpass_l2_neon
-        vpop            {d8-d15}
-        add             sp,  r11,  #8
-        pop             {r4, r10, r11, pc}
-        .endfunc
-
-function ff_put_h264_qpel8_mc31_neon, export=1
-        add             r1,  r1,  #1
-        push            {r0, r1, r2, lr}
-        sub             r1,  r1,  #1
-        b               put_h264_qpel8_mc11
-        .endfunc
-
-function ff_put_h264_qpel8_mc02_neon, export=1
-        push            {lr}
-        lowpass_const   r3
-        sub             r1,  r1,  r2, lsl #1
-        mov             r3,  r2
-        vpush           {d8-d15}
-        bl              put_h264_qpel8_v_lowpass_neon
-        vpop            {d8-d15}
-        pop             {pc}
-        .endfunc
-
-function ff_put_h264_qpel8_mc12_neon, export=1
-        push            {r0, r1, r4, r10, r11, lr}
-put_h264_qpel8_mc12:
-        lowpass_const   r3
-        mov             r11, sp
-        bic             sp,  sp,  #15
-        sub             sp,  sp,  #(8*8+16*12)
-        sub             r1,  r1,  r2, lsl #1
-        mov             r3,  r2
-        mov             r2,  #8
-        mov             r0,  sp
-        vpush           {d8-d15}
-        bl              put_h264_qpel8_v_lowpass_neon
-        mov             r4,  r0
-        ldrd            r0,  [r11]
-        sub             r1,  r1,  r3, lsl #1
-        sub             r1,  r1,  #2
-        sub             r2,  r4,  #64
-        bl              put_h264_qpel8_hv_lowpass_l2_neon
-        vpop            {d8-d15}
-        add             sp,  r11,  #8
-        pop             {r4, r10, r11, pc}
-        .endfunc
-
-function ff_put_h264_qpel8_mc22_neon, export=1
-        push            {r4, r10, r11, lr}
-        mov             r11, sp
-        bic             sp,  sp,  #15
-        sub             r1,  r1,  r2, lsl #1
-        sub             r1,  r1,  #2
-        mov             r3,  r2
-        sub             sp,  sp,  #(16*12)
-        mov             r4,  sp
-        vpush           {d8-d15}
-        bl              put_h264_qpel8_hv_lowpass_neon
-        vpop            {d8-d15}
-        mov             sp,  r11
-        pop             {r4, r10, r11, pc}
-        .endfunc
-
-function ff_put_h264_qpel8_mc32_neon, export=1
-        push            {r0, r1, r4, r10, r11, lr}
-        add             r1,  r1,  #1
-        b               put_h264_qpel8_mc12
-        .endfunc
-
-function ff_put_h264_qpel8_mc03_neon, export=1
-        push            {lr}
-        add             ip,  r1,  r2
-        b               put_h264_qpel8_mc01
-        .endfunc
-
-function ff_put_h264_qpel8_mc13_neon, export=1
-        push            {r0, r1, r2, lr}
-        add             r1,  r1,  r2
-        b               put_h264_qpel8_mc11
-        .endfunc
-
-function ff_put_h264_qpel8_mc23_neon, export=1
-        push            {r0, r1, r4, r10, r11, lr}
-        add             r1,  r1,  r2
-        b               put_h264_qpel8_mc21
-        .endfunc
-
-function ff_put_h264_qpel8_mc33_neon, export=1
-        add             r1,  r1,  #1
-        push            {r0, r1, r2, lr}
-        add             r1,  r1,  r2
-        sub             r1,  r1,  #1
-        b               put_h264_qpel8_mc11
-        .endfunc
-
-function ff_put_h264_qpel16_mc10_neon, export=1
-        lowpass_const   r3
-        mov             r3,  r1
-        sub             r1,  r1,  #2
-        b               put_h264_qpel16_h_lowpass_l2_neon
-        .endfunc
-
-function ff_put_h264_qpel16_mc20_neon, export=1
-        lowpass_const   r3
-        sub             r1,  r1,  #2
-        mov             r3,  r2
-        b               put_h264_qpel16_h_lowpass_neon
-        .endfunc
-
-function ff_put_h264_qpel16_mc30_neon, export=1
-        lowpass_const   r3
-        add             r3,  r1,  #1
-        sub             r1,  r1,  #2
-        b               put_h264_qpel16_h_lowpass_l2_neon
-        .endfunc
-
-function ff_put_h264_qpel16_mc01_neon, export=1
-        push            {r4, lr}
-        mov             ip,  r1
-put_h264_qpel16_mc01:
-        lowpass_const   r3
-        mov             r3,  r2
-        sub             r1,  r1,  r2, lsl #1
-        vpush           {d8-d15}
-        bl              put_h264_qpel16_v_lowpass_l2_neon
-        vpop            {d8-d15}
-        pop             {r4, pc}
-        .endfunc
-
-function ff_put_h264_qpel16_mc11_neon, export=1
-        push            {r0, r1, r4, lr}
-put_h264_qpel16_mc11:
-        lowpass_const   r3
-        sub             sp,  sp,  #256
-        mov             r0,  sp
-        sub             r1,  r1,  #2
-        mov             r3,  #16
-        vpush           {d8-d15}
-        bl              put_h264_qpel16_h_lowpass_neon
-        add             r0,  sp,  #256
-        ldrd            r0,  [r0, #64]
-        mov             r3,  r2
-        add             ip,  sp,  #64
-        sub             r1,  r1,  r2, lsl #1
-        mov             r2,  #16
-        bl              put_h264_qpel16_v_lowpass_l2_neon
-        vpop            {d8-d15}
-        add             sp,  sp,  #(256+8)
-        pop             {r4, pc}
-        .endfunc
-
-function ff_put_h264_qpel16_mc21_neon, export=1
-        push            {r0, r1, r4-r5, r9-r11, lr}
-put_h264_qpel16_mc21:
-        lowpass_const   r3
-        mov             r11, sp
-        bic             sp,  sp,  #15
-        sub             sp,  sp,  #(16*16+16*12)
-        sub             r1,  r1,  #2
-        mov             r0,  sp
-        vpush           {d8-d15}
-        bl              put_h264_qpel16_h_lowpass_neon_packed
-        mov             r4,  r0
-        ldrd            r0,  [r11]
-        sub             r1,  r1,  r2, lsl #1
-        sub             r1,  r1,  #2
-        mov             r3,  r2
-        bl              put_h264_qpel16_hv_lowpass_l2_neon
-        vpop            {d8-d15}
-        add             sp,  r11,  #8
-        pop             {r4-r5, r9-r11, pc}
-        .endfunc
-
-function ff_put_h264_qpel16_mc31_neon, export=1
-        add             r1,  r1,  #1
-        push            {r0, r1, r4, lr}
-        sub             r1,  r1,  #1
-        b               put_h264_qpel16_mc11
-        .endfunc
-
-function ff_put_h264_qpel16_mc02_neon, export=1
-        push            {r4, lr}
-        lowpass_const   r3
-        sub             r1,  r1,  r2, lsl #1
-        mov             r3,  r2
-        vpush           {d8-d15}
-        bl              put_h264_qpel16_v_lowpass_neon
-        vpop            {d8-d15}
-        pop             {r4, pc}
-        .endfunc
-
-function ff_put_h264_qpel16_mc12_neon, export=1
-        push            {r0, r1, r4-r5, r9-r11, lr}
-put_h264_qpel16_mc12:
-        lowpass_const   r3
-        mov             r11, sp
-        bic             sp,  sp,  #15
-        sub             sp,  sp,  #(16*16+16*12)
-        sub             r1,  r1,  r2, lsl #1
-        mov             r0,  sp
-        mov             r3,  r2
-        vpush           {d8-d15}
-        bl              put_h264_qpel16_v_lowpass_neon_packed
-        mov             r4,  r0
-        ldrd            r0,  [r11]
-        sub             r1,  r1,  r3, lsl #1
-        sub             r1,  r1,  #2
-        mov             r2,  r3
-        bl              put_h264_qpel16_hv_lowpass_l2_neon
-        vpop            {d8-d15}
-        add             sp,  r11,  #8
-        pop             {r4-r5, r9-r11, pc}
-        .endfunc
-
-function ff_put_h264_qpel16_mc22_neon, export=1
-        push            {r4, r9-r11, lr}
-        lowpass_const   r3
-        mov             r11, sp
-        bic             sp,  sp,  #15
-        sub             r1,  r1,  r2, lsl #1
-        sub             r1,  r1,  #2
-        mov             r3,  r2
-        sub             sp,  sp,  #(16*12)
-        mov             r4,  sp
-        vpush           {d8-d15}
-        bl              put_h264_qpel16_hv_lowpass_neon
-        vpop            {d8-d15}
-        mov             sp,  r11
-        pop             {r4, r9-r11, pc}
-        .endfunc
-
-function ff_put_h264_qpel16_mc32_neon, export=1
-        push            {r0, r1, r4-r5, r9-r11, lr}
-        add             r1,  r1,  #1
-        b               put_h264_qpel16_mc12
-        .endfunc
-
-function ff_put_h264_qpel16_mc03_neon, export=1
-        push            {r4, lr}
-        add             ip,  r1,  r2
-        b               put_h264_qpel16_mc01
-        .endfunc
-
-function ff_put_h264_qpel16_mc13_neon, export=1
-        push            {r0, r1, r4, lr}
-        add             r1,  r1,  r2
-        b               put_h264_qpel16_mc11
-        .endfunc
-
-function ff_put_h264_qpel16_mc23_neon, export=1
-        push            {r0, r1, r4-r5, r9-r11, lr}
-        add             r1,  r1,  r2
-        b               put_h264_qpel16_mc21
-        .endfunc
-
-function ff_put_h264_qpel16_mc33_neon, export=1
-        add             r1,  r1,  #1
-        push            {r0, r1, r4, lr}
-        add             r1,  r1,  r2
-        sub             r1,  r1,  #1
-        b               put_h264_qpel16_mc11
-        .endfunc
diff --git a/libavcodec/arm/h264idct_neon.S b/libavcodec/arm/h264idct_neon.S
deleted file mode 100644
index 6527390..0000000
--- a/libavcodec/arm/h264idct_neon.S
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Copyright (c) 2008 Mans Rullgard <mans at mansr.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 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 "asm.S"
-
-        preserve8
-        .fpu neon
-
-        .text
-
-function ff_h264_idct_add_neon, export=1
-        mov             r3,  #(1<<5)
-        vmov.i16        d16, #0
-        vmov.16         d16[0],   r3
-        vld1.64         {d0-d3},  [r1,:128]
-        vadd.i16        d0,  d0,  d16
-
-        vswp            d1,  d2
-        vadd.i16        d4,  d0,  d1
-        vshr.s16        q8,  q1,  #1
-        vsub.i16        d5,  d0,  d1
-        vadd.i16        d6,  d2,  d17
-        vsub.i16        d7,  d16, d3
-        vadd.i16        q0,  q2,  q3
-        vsub.i16        q1,  q2,  q3
-
-        vtrn.16         d0,  d1
-        vtrn.16         d3,  d2
-        vtrn.32         d0,  d3
-        vtrn.32         d1,  d2
-
-        vadd.i16        d4,  d0,  d3
-        vld1.32         {d18[0]}, [r0,:32], r2
-        vswp            d1,  d3
-        vshr.s16        q8,  q1,  #1
-        vld1.32         {d19[1]}, [r0,:32], r2
-        vsub.i16        d5,  d0,  d1
-        vld1.32         {d18[1]}, [r0,:32], r2
-        vadd.i16        d6,  d16, d3
-        vld1.32         {d19[0]}, [r0,:32], r2
-        vsub.i16        d7,  d2,  d17
-        sub             r0,  r0,  r2, lsl #2
-        vadd.i16        q0,  q2,  q3
-        vsub.i16        q1,  q2,  q3
-
-        vshr.s16        q0,  q0,  #6
-        vshr.s16        q1,  q1,  #6
-
-        vaddw.u8        q0,  q0,  d18
-        vaddw.u8        q1,  q1,  d19
-
-        vqmovun.s16     d0,  q0
-        vqmovun.s16     d1,  q1
-
-        vst1.32         {d0[0]},  [r0,:32], r2
-        vst1.32         {d1[1]},  [r0,:32], r2
-        vst1.32         {d0[1]},  [r0,:32], r2
-        vst1.32         {d1[0]},  [r0,:32], r2
-
-        bx              lr
-        .endfunc
-
-function ff_h264_idct_dc_add_neon, export=1
-        vld1.16         {d2[],d3[]}, [r1,:16]
-        vrshr.s16       q1,  q1,  #6
-        vld1.32         {d0[0]},  [r0,:32], r2
-        vld1.32         {d0[1]},  [r0,:32], r2
-        vaddw.u8        q2,  q1,  d0
-        vld1.32         {d1[0]},  [r0,:32], r2
-        vld1.32         {d1[1]},  [r0,:32], r2
-        vaddw.u8        q1,  q1,  d1
-        vqmovun.s16     d0,  q2
-        vqmovun.s16     d1,  q1
-        sub             r0,  r0,  r2, lsl #2
-        vst1.32         {d0[0]},  [r0,:32], r2
-        vst1.32         {d0[1]},  [r0,:32], r2
-        vst1.32         {d1[0]},  [r0,:32], r2
-        vst1.32         {d1[1]},  [r0,:32], r2
-        bx              lr
-        .endfunc
-
-function ff_h264_idct_add16_neon, export=1
-        push            {r4-r8,lr}
-        mov             r4,  r0
-        mov             r5,  r1
-        mov             r1,  r2
-        mov             r2,  r3
-        ldr             r6,  [sp, #24]
-        movrel          r7,  scan8
-        mov             ip,  #16
-1:      ldrb            r8,  [r7], #1
-        ldr             r0,  [r5], #4
-        ldrb            r8,  [r6, r8]
-        subs            r8,  r8,  #1
-        blt             2f
-        ldrsh           lr,  [r1]
-        add             r0,  r0,  r4
-        movne           lr,  #0
-        cmp             lr,  #0
-        adrne           lr,  ff_h264_idct_dc_add_neon
-        adreq           lr,  ff_h264_idct_add_neon
-        blx             lr
-2:      subs            ip,  ip,  #1
-        add             r1,  r1,  #32
-        bne             1b
-        pop             {r4-r8,pc}
-        .endfunc
-
-function ff_h264_idct_add16intra_neon, export=1
-        push            {r4-r8,lr}
-        mov             r4,  r0
-        mov             r5,  r1
-        mov             r1,  r2
-        mov             r2,  r3
-        ldr             r6,  [sp, #24]
-        movrel          r7,  scan8
-        mov             ip,  #16
-1:      ldrb            r8,  [r7], #1
-        ldr             r0,  [r5], #4
-        ldrb            r8,  [r6, r8]
-        add             r0,  r0,  r4
-        cmp             r8,  #0
-        ldrsh           r8,  [r1]
-        adrne           lr,  ff_h264_idct_add_neon
-        adreq           lr,  ff_h264_idct_dc_add_neon
-        cmpeq           r8,  #0
-        blxne           lr
-        subs            ip,  ip,  #1
-        add             r1,  r1,  #32
-        bne             1b
-        pop             {r4-r8,pc}
-        .endfunc
-
-function ff_h264_idct_add8_neon, export=1
-        push            {r4-r10,lr}
-        ldm             r0,  {r4,r9}
-        add             r5,  r1,  #16*4
-        add             r1,  r2,  #16*32
-        mov             r2,  r3
-        ldr             r6,  [sp, #32]
-        movrel          r7,  scan8+16
-        mov             ip,  #8
-1:      ldrb            r8,  [r7], #1
-        ldr             r0,  [r5], #4
-        ldrb            r8,  [r6, r8]
-        tst             ip,  #4
-        addeq           r0,  r0,  r4
-        addne           r0,  r0,  r9
-        cmp             r8,  #0
-        ldrsh           r8,  [r1]
-        adrne           lr,  ff_h264_idct_add_neon
-        adreq           lr,  ff_h264_idct_dc_add_neon
-        cmpeq           r8,  #0
-        blxne           lr
-        subs            ip,  ip,  #1
-        add             r1,  r1,  #32
-        bne             1b
-        pop             {r4-r10,pc}
-        .endfunc
-
-        .section .rodata
-scan8:  .byte           4+1*8, 5+1*8, 4+2*8, 5+2*8
-        .byte           6+1*8, 7+1*8, 6+2*8, 7+2*8
-        .byte           4+3*8, 5+3*8, 4+4*8, 5+4*8
-        .byte           6+3*8, 7+3*8, 6+4*8, 7+4*8
-        .byte           1+1*8, 2+1*8
-        .byte           1+2*8, 2+2*8
-        .byte           1+4*8, 2+4*8
-        .byte           1+5*8, 2+5*8
diff --git a/libavcodec/arm/mpegvideo_armv5te.c b/libavcodec/arm/mpegvideo_armv5te.c
deleted file mode 100644
index b213cf1..0000000
--- a/libavcodec/arm/mpegvideo_armv5te.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Optimization of some functions from mpegvideo.c for armv5te
- * Copyright (c) 2007 Siarhei Siamashka <ssvb at users.sourceforge.net>
- *
- * 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 "libavcodec/avcodec.h"
-#include "libavcodec/dsputil.h"
-#include "libavcodec/mpegvideo.h"
-
-void ff_dct_unquantize_h263_armv5te(DCTELEM *block, int qmul, int qadd, int count);
-
-#ifdef ENABLE_ARM_TESTS
-/**
- * h263 dequantizer supplementary function, it is performance critical and needs to
- * have optimized implementations for each architecture. Is also used as a reference
- * implementation in regression tests
- */
-static inline void dct_unquantize_h263_helper_c(DCTELEM *block, int qmul, int qadd, int count)
-{
-    int i, level;
-    for (i = 0; i < count; i++) {
-        level = block[i];
-        if (level) {
-            if (level < 0) {
-                level = level * qmul - qadd;
-            } else {
-                level = level * qmul + qadd;
-            }
-            block[i] = level;
-        }
-    }
-}
-#endif
-
-static void dct_unquantize_h263_intra_armv5te(MpegEncContext *s,
-                                  DCTELEM *block, int n, int qscale)
-{
-    int level, qmul, qadd;
-    int nCoeffs;
-
-    assert(s->block_last_index[n]>=0);
-
-    qmul = qscale << 1;
-
-    if (!s->h263_aic) {
-        if (n < 4)
-            level = block[0] * s->y_dc_scale;
-        else
-            level = block[0] * s->c_dc_scale;
-        qadd = (qscale - 1) | 1;
-    }else{
-        qadd = 0;
-        level = block[0];
-    }
-    if(s->ac_pred)
-        nCoeffs=63;
-    else
-        nCoeffs= s->inter_scantable.raster_end[ s->block_last_index[n] ];
-
-    ff_dct_unquantize_h263_armv5te(block, qmul, qadd, nCoeffs + 1);
-    block[0] = level;
-}
-
-static void dct_unquantize_h263_inter_armv5te(MpegEncContext *s,
-                                  DCTELEM *block, int n, int qscale)
-{
-    int qmul, qadd;
-    int nCoeffs;
-
-    assert(s->block_last_index[n]>=0);
-
-    qadd = (qscale - 1) | 1;
-    qmul = qscale << 1;
-
-    nCoeffs= s->inter_scantable.raster_end[ s->block_last_index[n] ];
-
-    ff_dct_unquantize_h263_armv5te(block, qmul, qadd, nCoeffs + 1);
-}
-
-void MPV_common_init_armv5te(MpegEncContext *s)
-{
-    s->dct_unquantize_h263_intra = dct_unquantize_h263_intra_armv5te;
-    s->dct_unquantize_h263_inter = dct_unquantize_h263_inter_armv5te;
-}
diff --git a/libavcodec/arm/mpegvideo_armv5te_s.S b/libavcodec/arm/mpegvideo_armv5te_s.S
deleted file mode 100644
index aaa252d..0000000
--- a/libavcodec/arm/mpegvideo_armv5te_s.S
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Optimization of some functions from mpegvideo.c for armv5te
- * Copyright (c) 2007 Siarhei Siamashka <ssvb at users.sourceforge.net>
- *
- * 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 "config.h"
-#include "asm.S"
-
-/*
- * Special optimized version of dct_unquantize_h263_helper_c, it
- * requires the block to be at least 8 bytes aligned, and may process
- * more elements than requested.  But it is guaranteed to never
- * process more than 64 elements provided that count argument is <= 64,
- * so it is safe. This function is optimized for a common distribution
- * of values for nCoeffs (they are mostly multiple of 8 plus one or
- * two extra elements). So this function processes data as 8 elements
- * per loop iteration and contains optional 2 elements processing in
- * the end.
- *
- * Inner loop should take 6 cycles per element on arm926ej-s (Nokia 770)
- */
-function ff_dct_unquantize_h263_armv5te, export=1
-        push            {r4-r9,lr}
-        mov             ip, #0
-        subs            r3, r3, #2
-        ble             2f
-        ldrd            r4, [r0, #0]
-1:
-        ldrd            r6, [r0, #8]
-
-        rsbs            r9, ip, r4, asr #16
-        addgt           r9, r2, #0
-        rsblt           r9, r2, #0
-        smlatbne        r9, r4, r1, r9
-
-        rsbs            lr, ip, r5, asr #16
-        addgt           lr, r2, #0
-        rsblt           lr, r2, #0
-        smlatbne        lr, r5, r1, lr
-
-        rsbs            r8, ip, r4, asl #16
-        addgt           r8, r2, #0
-        rsblt           r8, r2, #0
-        smlabbne        r4, r4, r1, r8
-
-        rsbs            r8, ip, r5, asl #16
-        addgt           r8, r2, #0
-        rsblt           r8, r2, #0
-        smlabbne        r5, r5, r1, r8
-
-        strh            r4, [r0], #2
-        strh            r9, [r0], #2
-        strh            r5, [r0], #2
-        strh            lr, [r0], #2
-
-        rsbs            r9, ip, r6, asr #16
-        addgt           r9, r2, #0
-        rsblt           r9, r2, #0
-        smlatbne        r9, r6, r1, r9
-
-        rsbs            lr, ip, r7, asr #16
-        addgt           lr, r2, #0
-        rsblt           lr, r2, #0
-        smlatbne        lr, r7, r1, lr
-
-        rsbs            r8, ip, r6, asl #16
-        addgt           r8, r2, #0
-        rsblt           r8, r2, #0
-        smlabbne        r6, r6, r1, r8
-
-        rsbs            r8, ip, r7, asl #16
-        addgt           r8, r2, #0
-        rsblt           r8, r2, #0
-        smlabbne        r7, r7, r1, r8
-
-        strh            r6, [r0], #2
-        strh            r9, [r0], #2
-        strh            r7, [r0], #2
-        strh            lr, [r0], #2
-
-        subs            r3, r3, #8
-        ldrgtd          r4, [r0, #0] /* load data early to avoid load/use pipeline stall */
-        bgt             1b
-
-        adds            r3, r3, #2
-        pople           {r4-r9,pc}
-2:
-        ldrsh           r9, [r0, #0]
-        ldrsh           lr, [r0, #2]
-        mov             r8, r2
-        cmp             r9, #0
-        rsblt           r8, r2, #0
-        smlabbne        r9, r9, r1, r8
-        mov             r8, r2
-        cmp             lr, #0
-        rsblt           r8, r2, #0
-        smlabbne        lr, lr, r1, r8
-        strh            r9, [r0], #2
-        strh            lr, [r0], #2
-        pop             {r4-r9,pc}
-        .endfunc
diff --git a/libavcodec/arm/simple_idct_neon.S b/libavcodec/arm/simple_idct_neon.S
deleted file mode 100644
index e7099a2..0000000
--- a/libavcodec/arm/simple_idct_neon.S
+++ /dev/null
@@ -1,362 +0,0 @@
-/*
- * ARM NEON IDCT
- *
- * Copyright (c) 2008 Mans Rullgard <mans at mansr.com>
- *
- * Based on Simple IDCT
- * Copyright (c) 2001 Michael Niedermayer <michaelni at 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 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 "asm.S"
-
-#define W1  22725  //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
-#define W2  21407  //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
-#define W3  19266  //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
-#define W4  16383  //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
-#define W5  12873  //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
-#define W6  8867   //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
-#define W7  4520   //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
-#define W4c ((1<<(COL_SHIFT-1))/W4)
-#define ROW_SHIFT 11
-#define COL_SHIFT 20
-
-#define w1 d0[0]
-#define w2 d0[1]
-#define w3 d0[2]
-#define w4 d0[3]
-#define w5 d1[0]
-#define w6 d1[1]
-#define w7 d1[2]
-#define w4c d1[3]
-
-        .fpu neon
-
-        .macro idct_col4_top
-        vmull.s16       q7,  d6,  w2    /* q9   = W2 * col[2] */
-        vmull.s16       q8,  d6,  w6    /* q10  = W6 * col[2] */
-        vmull.s16       q9,  d4,  w1    /* q9   = W1 * col[1] */
-        vadd.i32        q11, q15, q7
-        vmull.s16       q10, d4,  w3    /* q10  = W3 * col[1] */
-        vadd.i32        q12, q15, q8
-        vmull.s16       q5,  d4,  w5    /* q5   = W5 * col[1] */
-        vsub.i32        q13, q15, q8
-        vmull.s16       q6,  d4,  w7    /* q6   = W7 * col[1] */
-        vsub.i32        q14, q15, q7
-
-        vmlal.s16       q9,  d8,  w3    /* q9  += W3 * col[3] */
-        vmlsl.s16       q10, d8,  w7    /* q10 -= W7 * col[3] */
-        vmlsl.s16       q5,  d8,  w1    /* q5  -= W1 * col[3] */
-        vmlsl.s16       q6,  d8,  w5    /* q6  -= W5 * col[3] */
-        .endm
-
-        .text
-        .align 6
-
-function idct_row4_neon
-        vmov.i32        q15, #(1<<(ROW_SHIFT-1))
-        vld1.64         {d2-d5},  [r2,:128]!
-        vmlal.s16       q15, d2,  w4    /* q15  += W4 * col[0] */
-        vld1.64         {d6,d7},  [r2,:128]!
-        vorr            d10, d3,  d5
-        vld1.64         {d8,d9},  [r2,:128]!
-        add             r2,  r2,  #-64
-
-        vorr            d11, d7,  d9
-        vorr            d10, d10, d11
-        vmov            r3,  r4,  d10
-
-        idct_col4_top
-
-        orrs            r3,  r3,  r4
-        beq             1f
-
-        vmull.s16       q7,  d3,  w4    /* q7   = W4 * col[4] */
-        vmlal.s16       q9,  d5,  w5    /* q9  += W5 * col[5] */
-        vmlsl.s16       q10, d5,  w1    /* q10 -= W1 * col[5] */
-        vmull.s16       q8,  d7,  w2    /* q8   = W2 * col[6] */
-        vmlal.s16       q5,  d5,  w7    /* q5  += W7 * col[5] */
-        vadd.i32        q11, q11, q7
-        vsub.i32        q12, q12, q7
-        vsub.i32        q13, q13, q7
-        vadd.i32        q14, q14, q7
-        vmlal.s16       q6,  d5,  w3    /* q6  += W3 * col[5] */
-        vmull.s16       q7,  d7,  w6    /* q7   = W6 * col[6] */
-        vmlal.s16       q9,  d9,  w7
-        vmlsl.s16       q10, d9,  w5
-        vmlal.s16       q5,  d9,  w3
-        vmlsl.s16       q6,  d9,  w1
-        vadd.i32        q11, q11, q7
-        vsub.i32        q12, q12, q8
-        vadd.i32        q13, q13, q8
-        vsub.i32        q14, q14, q7
-
-1:      vadd.i32        q3,  q11, q9
-        vadd.i32        q4,  q12, q10
-        vshrn.i32       d2,  q3,  #ROW_SHIFT
-        vshrn.i32       d4,  q4,  #ROW_SHIFT
-        vadd.i32        q7,  q13, q5
-        vadd.i32        q8,  q14, q6
-        vtrn.16         d2,  d4
-        vshrn.i32       d6,  q7,  #ROW_SHIFT
-        vshrn.i32       d8,  q8,  #ROW_SHIFT
-        vsub.i32        q14, q14, q6
-        vsub.i32        q11, q11, q9
-        vtrn.16         d6,  d8
-        vsub.i32        q13, q13, q5
-        vshrn.i32       d3,  q14, #ROW_SHIFT
-        vtrn.32         d2,  d6
-        vsub.i32        q12, q12, q10
-        vtrn.32         d4,  d8
-        vshrn.i32       d5,  q13, #ROW_SHIFT
-        vshrn.i32       d7,  q12, #ROW_SHIFT
-        vshrn.i32       d9,  q11, #ROW_SHIFT
-
-        vtrn.16         d3,  d5
-        vtrn.16         d7,  d9
-        vtrn.32         d3,  d7
-        vtrn.32         d5,  d9
-
-        vst1.64         {d2-d5},  [r2,:128]!
-        vst1.64         {d6-d9},  [r2,:128]!
-
-        bx              lr
-        .endfunc
-
-function idct_col4_neon
-        mov             ip,  #16
-        vld1.64         {d2}, [r2,:64], ip /* d2 = col[0] */
-        vdup.16         d30, w4c
-        vld1.64         {d4}, [r2,:64], ip /* d3 = col[1] */
-        vadd.i16        d30, d30, d2
-        vld1.64         {d6}, [r2,:64], ip /* d4 = col[2] */
-        vmull.s16       q15, d30, w4 /* q15 = W4*(col[0]+(1<<COL_SHIFT-1)/W4)*/
-        vld1.64         {d8}, [r2,:64], ip /* d5 = col[3] */
-
-        ldrd            r4,  [r2]
-        ldrd            r6,  [r2, #16]
-        orrs            r4,  r4,  r5
-
-        idct_col4_top
-        addeq           r2,  r2,  #16
-        beq             1f
-
-        vld1.64         {d3}, [r2,:64], ip /* d6 = col[4] */
-        vmull.s16       q7,  d3,  w4    /* q7   = W4 * col[4] */
-        vadd.i32        q11, q11, q7
-        vsub.i32        q12, q12, q7
-        vsub.i32        q13, q13, q7
-        vadd.i32        q14, q14, q7
-
-1:      orrs            r6,  r6,  r7
-        ldrd            r4,  [r2, #16]
-        addeq           r2,  r2,  #16
-        beq             2f
-
-        vld1.64         {d5}, [r2,:64], ip /* d7 = col[5] */
-        vmlal.s16       q9,  d5,  w5    /* q9  += W5 * col[5] */
-        vmlsl.s16       q10, d5,  w1    /* q10 -= W1 * col[5] */
-        vmlal.s16       q5,  d5,  w7    /* q5  += W7 * col[5] */
-        vmlal.s16       q6,  d5,  w3    /* q6  += W3 * col[5] */
-
-2:      orrs            r4,  r4,  r5
-        ldrd            r4,  [r2, #16]
-        addeq           r2,  r2,  #16
-        beq             3f
-
-        vld1.64         {d7}, [r2,:64], ip /* d8 = col[6] */
-        vmull.s16       q7,  d7,  w6    /* q7   = W6 * col[6] */
-        vmull.s16       q8,  d7,  w2    /* q8   = W2 * col[6] */
-        vadd.i32        q11, q11, q7
-        vsub.i32        q14, q14, q7
-        vsub.i32        q12, q12, q8
-        vadd.i32        q13, q13, q8
-
-3:      orrs            r4,  r4,  r5
-        addeq           r2,  r2,  #16
-        beq             4f
-
-        vld1.64         {d9}, [r2,:64], ip /* d9 = col[7] */
-        vmlal.s16       q9,  d9,  w7
-        vmlsl.s16       q10, d9,  w5
-        vmlal.s16       q5,  d9,  w3
-        vmlsl.s16       q6,  d9,  w1
-
-4:      vaddhn.i32      d2,  q11, q9
-        vaddhn.i32      d3,  q12, q10
-        vaddhn.i32      d4,  q13, q5
-        vaddhn.i32      d5,  q14, q6
-        vsubhn.i32      d9,  q11, q9
-        vsubhn.i32      d8,  q12, q10
-        vsubhn.i32      d7,  q13, q5
-        vsubhn.i32      d6,  q14, q6
-
-        bx              lr
-        .endfunc
-
-        .align 6
-
-function idct_col4_st8_neon
-        vqshrun.s16     d2,  q1,  #COL_SHIFT-16
-        vqshrun.s16     d3,  q2,  #COL_SHIFT-16
-        vqshrun.s16     d4,  q3,  #COL_SHIFT-16
-        vqshrun.s16     d5,  q4,  #COL_SHIFT-16
-        vst1.32         {d2[0]}, [r0,:32], r1
-        vst1.32         {d2[1]}, [r0,:32], r1
-        vst1.32         {d3[0]}, [r0,:32], r1
-        vst1.32         {d3[1]}, [r0,:32], r1
-        vst1.32         {d4[0]}, [r0,:32], r1
-        vst1.32         {d4[1]}, [r0,:32], r1
-        vst1.32         {d5[0]}, [r0,:32], r1
-        vst1.32         {d5[1]}, [r0,:32], r1
-
-        bx              lr
-        .endfunc
-
-        .section .rodata
-        .align 4
-idct_coeff_neon:
-        .short W1, W2, W3, W4, W5, W6, W7, W4c
-        .previous
-
-        .macro idct_start data
-        push            {r4-r7, lr}
-        pld             [\data]
-        pld             [\data, #64]
-        vpush           {d8-d15}
-        movrel          r3,  idct_coeff_neon
-        vld1.64         {d0,d1}, [r3,:128]
-        .endm
-
-        .macro idct_end
-        vpop            {d8-d15}
-        pop             {r4-r7, pc}
-        .endm
-
-/* void ff_simple_idct_put_neon(uint8_t *dst, int line_size, DCTELEM *data); */
-function ff_simple_idct_put_neon, export=1
-        idct_start      r2
-
-        bl              idct_row4_neon
-        bl              idct_row4_neon
-        add             r2,  r2,  #-128
-        bl              idct_col4_neon
-        bl              idct_col4_st8_neon
-        sub             r0,  r0,  r1, lsl #3
-        add             r0,  r0,  #4
-        add             r2,  r2,  #-120
-        bl              idct_col4_neon
-        bl              idct_col4_st8_neon
-
-        idct_end
-        .endfunc
-
-        .align 6
-
-function idct_col4_add8_neon
-        mov             ip,  r0
-
-        vld1.32         {d10[0]}, [r0,:32], r1
-        vshr.s16        q1,  q1,  #COL_SHIFT-16
-        vld1.32         {d10[1]}, [r0,:32], r1
-        vshr.s16        q2,  q2,  #COL_SHIFT-16
-        vld1.32         {d11[0]}, [r0,:32], r1
-        vshr.s16        q3,  q3,  #COL_SHIFT-16
-        vld1.32         {d11[1]}, [r0,:32], r1
-        vshr.s16        q4,  q4,  #COL_SHIFT-16
-        vld1.32         {d12[0]}, [r0,:32], r1
-        vaddw.u8        q1,  q1,  d10
-        vld1.32         {d12[1]}, [r0,:32], r1
-        vaddw.u8        q2,  q2,  d11
-        vld1.32         {d13[0]}, [r0,:32], r1
-        vqmovun.s16     d2,  q1
-        vld1.32         {d13[1]}, [r0,:32], r1
-        vaddw.u8        q3,  q3,  d12
-        vst1.32         {d2[0]},  [ip,:32], r1
-        vqmovun.s16     d3,  q2
-        vst1.32         {d2[1]},  [ip,:32], r1
-        vaddw.u8        q4,  q4,  d13
-        vst1.32         {d3[0]},  [ip,:32], r1
-        vqmovun.s16     d4,  q3
-        vst1.32         {d3[1]},  [ip,:32], r1
-        vqmovun.s16     d5,  q4
-        vst1.32         {d4[0]},  [ip,:32], r1
-        vst1.32         {d4[1]},  [ip,:32], r1
-        vst1.32         {d5[0]},  [ip,:32], r1
-        vst1.32         {d5[1]},  [ip,:32], r1
-
-        bx              lr
-        .endfunc
-
-/* void ff_simple_idct_add_neon(uint8_t *dst, int line_size, DCTELEM *data); */
-function ff_simple_idct_add_neon, export=1
-        idct_start      r2
-
-        bl              idct_row4_neon
-        bl              idct_row4_neon
-        add             r2,  r2,  #-128
-        bl              idct_col4_neon
-        bl              idct_col4_add8_neon
-        sub             r0,  r0,  r1, lsl #3
-        add             r0,  r0,  #4
-        add             r2,  r2,  #-120
-        bl              idct_col4_neon
-        bl              idct_col4_add8_neon
-
-        idct_end
-        .endfunc
-
-        .align 6
-
-function idct_col4_st16_neon
-        mov             ip,  #16
-
-        vshr.s16        q1,  q1,  #COL_SHIFT-16
-        vshr.s16        q2,  q2,  #COL_SHIFT-16
-        vst1.64         {d2}, [r2,:64], ip
-        vshr.s16        q3,  q3,  #COL_SHIFT-16
-        vst1.64         {d3}, [r2,:64], ip
-        vshr.s16        q4,  q4,  #COL_SHIFT-16
-        vst1.64         {d4}, [r2,:64], ip
-        vst1.64         {d5}, [r2,:64], ip
-        vst1.64         {d6}, [r2,:64], ip
-        vst1.64         {d7}, [r2,:64], ip
-        vst1.64         {d8}, [r2,:64], ip
-        vst1.64         {d9}, [r2,:64], ip
-
-        bx              lr
-        .endfunc
-
-/* void ff_simple_idct_neon(DCTELEM *data); */
-function ff_simple_idct_neon, export=1
-        idct_start      r0
-
-        mov             r2,  r0
-        bl              idct_row4_neon
-        bl              idct_row4_neon
-        add             r2,  r2,  #-128
-        bl              idct_col4_neon
-        add             r2,  r2,  #-128
-        bl              idct_col4_st16_neon
-        add             r2,  r2,  #-120
-        bl              idct_col4_neon
-        add             r2,  r2,  #-128
-        bl              idct_col4_st16_neon
-
-        idct_end
-        .endfunc
diff --git a/libavcodec/arm/asm.S b/libavcodec/armv4l/asm.S
similarity index 81%
rename from libavcodec/arm/asm.S
rename to libavcodec/armv4l/asm.S
index 0aa1639..e2595f4 100644
--- a/libavcodec/arm/asm.S
+++ b/libavcodec/armv4l/asm.S
@@ -18,8 +18,6 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#include "config.h"
-
         .macro require8, val=1
         .eabi_attribute 24, \val
         .endm
@@ -36,12 +34,3 @@
         .func   \name
 \name:
         .endm
-
-        .macro movrel rd, val
-#if defined(HAVE_ARMV6T2) && !defined(CONFIG_SHARED)
-        movw            \rd, #:lower16:\val
-        movt            \rd, #:upper16:\val
-#else
-        ldr             \rd, =\val
-#endif
-        .endm
diff --git a/libavcodec/arm/dsputil_arm.c b/libavcodec/armv4l/dsputil_arm.c
similarity index 76%
rename from libavcodec/arm/dsputil_arm.c
rename to libavcodec/armv4l/dsputil_arm.c
index eaa6b9e..695bf1c 100644
--- a/libavcodec/arm/dsputil_arm.c
+++ b/libavcodec/armv4l/dsputil_arm.c
@@ -1,5 +1,5 @@
 /*
- * ARM optimized DSP utils
+ * ARMv4L optimized DSP utils
  * Copyright (c) 2001 Lionel Ulmer.
  *
  * This file is part of FFmpeg.
@@ -24,24 +24,23 @@
 #include <ipp.h>
 #endif
 
-void dsputil_init_iwmmxt(DSPContext* c, AVCodecContext *avctx);
-void ff_float_init_arm_vfp(DSPContext* c, AVCodecContext *avctx);
-void ff_dsputil_init_neon(DSPContext *c, AVCodecContext *avctx);
+extern void dsputil_init_iwmmxt(DSPContext* c, AVCodecContext *avctx);
+extern void ff_float_init_arm_vfp(DSPContext* c, AVCodecContext *avctx);
 
-void j_rev_dct_ARM(DCTELEM *data);
-void simple_idct_ARM(DCTELEM *data);
+extern void j_rev_dct_ARM(DCTELEM *data);
+extern void simple_idct_ARM(DCTELEM *data);
 
-void simple_idct_armv5te(DCTELEM *data);
-void simple_idct_put_armv5te(uint8_t *dest, int line_size, DCTELEM *data);
-void simple_idct_add_armv5te(uint8_t *dest, int line_size, DCTELEM *data);
+extern void simple_idct_armv5te(DCTELEM *data);
+extern void simple_idct_put_armv5te(uint8_t *dest, int line_size,
+                                    DCTELEM *data);
+extern void simple_idct_add_armv5te(uint8_t *dest, int line_size,
+                                    DCTELEM *data);
 
-void ff_simple_idct_armv6(DCTELEM *data);
-void ff_simple_idct_put_armv6(uint8_t *dest, int line_size, DCTELEM *data);
-void ff_simple_idct_add_armv6(uint8_t *dest, int line_size, DCTELEM *data);
-
-void ff_simple_idct_neon(DCTELEM *data);
-void ff_simple_idct_put_neon(uint8_t *dest, int line_size, DCTELEM *data);
-void ff_simple_idct_add_neon(uint8_t *dest, int line_size, DCTELEM *data);
+extern void ff_simple_idct_armv6(DCTELEM *data);
+extern void ff_simple_idct_put_armv6(uint8_t *dest, int line_size,
+                                     DCTELEM *data);
+extern void ff_simple_idct_add_armv6(uint8_t *dest, int line_size,
+                                     DCTELEM *data);
 
 /* XXX: local hack */
 static void (*ff_put_pixels_clamped)(const DCTELEM *block, uint8_t *pixels, int line_size);
@@ -58,7 +57,7 @@ void put_no_rnd_pixels8_xy2_arm(uint8_t *block, const uint8_t *pixels, int line_
 
 void put_pixels16_arm(uint8_t *block, const uint8_t *pixels, int line_size, int h);
 
-void ff_prefetch_arm(void *mem, int stride, int h);
+extern void ff_prefetch_arm(void *mem, int stride, int h);
 
 CALL_2X_PIXELS(put_pixels16_x2_arm , put_pixels8_x2_arm , 8)
 CALL_2X_PIXELS(put_pixels16_y2_arm , put_pixels8_y2_arm , 8)
@@ -67,7 +66,7 @@ CALL_2X_PIXELS(put_no_rnd_pixels16_x2_arm , put_no_rnd_pixels8_x2_arm , 8)
 CALL_2X_PIXELS(put_no_rnd_pixels16_y2_arm , put_no_rnd_pixels8_y2_arm , 8)
 CALL_2X_PIXELS(put_no_rnd_pixels16_xy2_arm, put_no_rnd_pixels8_xy2_arm, 8)
 
-void ff_add_pixels_clamped_ARM(short *block, unsigned char *dest,
+extern void ff_add_pixels_clamped_ARM(short *block, unsigned char *dest,
                                       int line_size);
 
 /* XXX: those functions should be suppressed ASAP when all IDCTs are
@@ -121,7 +120,7 @@ int mm_support(void)
     return ENABLE_IWMMXT * FF_MM_IWMMXT;
 }
 
-void dsputil_init_arm(DSPContext* c, AVCodecContext *avctx)
+void dsputil_init_armv4l(DSPContext* c, AVCodecContext *avctx)
 {
     int idct_algo= avctx->idct_algo;
 
@@ -132,8 +131,6 @@ void dsputil_init_arm(DSPContext* c, AVCodecContext *avctx)
         if(idct_algo == FF_IDCT_AUTO){
 #if defined(HAVE_IPP)
             idct_algo = FF_IDCT_IPP;
-#elif defined(HAVE_NEON)
-            idct_algo = FF_IDCT_SIMPLENEON;
 #elif defined(HAVE_ARMV6)
             idct_algo = FF_IDCT_SIMPLEARMV6;
 #elif defined(HAVE_ARMV5TE)
@@ -147,7 +144,7 @@ void dsputil_init_arm(DSPContext* c, AVCodecContext *avctx)
             c->idct_put= j_rev_dct_ARM_put;
             c->idct_add= j_rev_dct_ARM_add;
             c->idct    = j_rev_dct_ARM;
-            c->idct_permutation_type= FF_LIBMPEG2_IDCT_PERM;
+            c->idct_permutation_type= FF_LIBMPEG2_IDCT_PERM;/* FF_NO_IDCT_PERM */
         } else if (idct_algo==FF_IDCT_SIMPLEARM){
             c->idct_put= simple_idct_ARM_put;
             c->idct_add= simple_idct_ARM_add;
@@ -174,31 +171,24 @@ void dsputil_init_arm(DSPContext* c, AVCodecContext *avctx)
             c->idct    = simple_idct_ipp;
             c->idct_permutation_type= FF_NO_IDCT_PERM;
 #endif
-#ifdef HAVE_NEON
-        } else if (idct_algo==FF_IDCT_SIMPLENEON){
-            c->idct_put= ff_simple_idct_put_neon;
-            c->idct_add= ff_simple_idct_add_neon;
-            c->idct    = ff_simple_idct_neon;
-            c->idct_permutation_type = FF_PARTTRANS_IDCT_PERM;
-#endif
         }
     }
 
     c->put_pixels_tab[0][0] = put_pixels16_arm;
-    c->put_pixels_tab[0][1] = put_pixels16_x2_arm;
-    c->put_pixels_tab[0][2] = put_pixels16_y2_arm;
+    c->put_pixels_tab[0][1] = put_pixels16_x2_arm; //OK!
+    c->put_pixels_tab[0][2] = put_pixels16_y2_arm; //OK!
     c->put_pixels_tab[0][3] = put_pixels16_xy2_arm;
     c->put_no_rnd_pixels_tab[0][0] = put_pixels16_arm;
-    c->put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x2_arm;
-    c->put_no_rnd_pixels_tab[0][2] = put_no_rnd_pixels16_y2_arm;
+    c->put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x2_arm; // OK
+    c->put_no_rnd_pixels_tab[0][2] = put_no_rnd_pixels16_y2_arm; //OK
     c->put_no_rnd_pixels_tab[0][3] = put_no_rnd_pixels16_xy2_arm;
-    c->put_pixels_tab[1][0] = put_pixels8_arm;
-    c->put_pixels_tab[1][1] = put_pixels8_x2_arm;
+    c->put_pixels_tab[1][0] = put_pixels8_arm; //OK
+    c->put_pixels_tab[1][1] = put_pixels8_x2_arm; //OK
     c->put_pixels_tab[1][2] = put_pixels8_y2_arm;
     c->put_pixels_tab[1][3] = put_pixels8_xy2_arm;
-    c->put_no_rnd_pixels_tab[1][0] = put_pixels8_arm;
-    c->put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x2_arm;
-    c->put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_arm;
+    c->put_no_rnd_pixels_tab[1][0] = put_pixels8_arm;//OK
+    c->put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x2_arm; //OK
+    c->put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_arm; //OK
     c->put_no_rnd_pixels_tab[1][3] = put_no_rnd_pixels8_xy2_arm;
 
 #ifdef HAVE_ARMV5TE
@@ -211,7 +201,4 @@ void dsputil_init_arm(DSPContext* c, AVCodecContext *avctx)
 #ifdef HAVE_ARMVFP
     ff_float_init_arm_vfp(c, avctx);
 #endif
-#ifdef HAVE_NEON
-    ff_dsputil_init_neon(c, avctx);
-#endif
 }
diff --git a/libavcodec/arm/dsputil_arm_s.S b/libavcodec/armv4l/dsputil_arm_s.S
similarity index 99%
rename from libavcodec/arm/dsputil_arm_s.S
rename to libavcodec/armv4l/dsputil_arm_s.S
index 639b7b8..ba06f37 100644
--- a/libavcodec/arm/dsputil_arm_s.S
+++ b/libavcodec/armv4l/dsputil_arm_s.S
@@ -1,5 +1,5 @@
 @
-@ ARMv4 optimized DSP utils
+@ ARMv4L optimized DSP utils
 @ Copyright (c) 2004 AGAWA Koji <i (AT) atty (DOT) jp>
 @
 @ This file is part of FFmpeg.
diff --git a/libavcodec/arm/dsputil_iwmmxt.c b/libavcodec/armv4l/dsputil_iwmmxt.c
similarity index 100%
rename from libavcodec/arm/dsputil_iwmmxt.c
rename to libavcodec/armv4l/dsputil_iwmmxt.c
diff --git a/libavcodec/arm/dsputil_iwmmxt_rnd_template.c b/libavcodec/armv4l/dsputil_iwmmxt_rnd_template.c
similarity index 99%
rename from libavcodec/arm/dsputil_iwmmxt_rnd_template.c
rename to libavcodec/armv4l/dsputil_iwmmxt_rnd_template.c
index 35a5a9b..fddbdae 100644
--- a/libavcodec/arm/dsputil_iwmmxt_rnd_template.c
+++ b/libavcodec/armv4l/dsputil_iwmmxt_rnd_template.c
@@ -19,6 +19,10 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+/* This header intentionally has no multiple inclusion guards. It is meant to
+ * be included multiple times and generates different code depending on the
+ * value of certain #defines. */
+
 void DEF(put, pixels8)(uint8_t *block, const uint8_t *pixels, const int line_size, int h)
 {
     int stride = line_size;
diff --git a/libavcodec/arm/dsputil_vfp.S b/libavcodec/armv4l/dsputil_vfp.S
similarity index 58%
rename from libavcodec/arm/dsputil_vfp.S
rename to libavcodec/armv4l/dsputil_vfp.S
index 04c8014..291f2b5 100644
--- a/libavcodec/arm/dsputil_vfp.S
+++ b/libavcodec/armv4l/dsputil_vfp.S
@@ -21,7 +21,6 @@
 #include "config.h"
 #include "asm.S"
 
-        .fpu neon       @ required for gas to accept UAL syntax
 /*
  * VFP is a floating point coprocessor used in some ARM cores. VFP11 has 1 cycle
  * throughput for almost all the instructions (except for double precision
@@ -49,29 +48,29 @@ function ff_vector_fmul_vfp, export=1
         orr             r12, r12, #(3 << 16) /* set vector size to 4 */
         fmxr            fpscr, r12
 
-        vldmia          r3!, {s0-s3}
-        vldmia          r1!, {s8-s11}
-        vldmia          r3!, {s4-s7}
-        vldmia          r1!, {s12-s15}
-        vmul.f32        s8,  s0,  s8
+        fldmias         r3!, {s0-s3}
+        fldmias         r1!, {s8-s11}
+        fldmias         r3!, {s4-s7}
+        fldmias         r1!, {s12-s15}
+        fmuls           s8,  s0,  s8
 1:
         subs            r2,  r2,  #16
-        vmul.f32        s12, s4,  s12
-        vldmiage        r3!, {s16-s19}
-        vldmiage        r1!, {s24-s27}
-        vldmiage        r3!, {s20-s23}
-        vldmiage        r1!, {s28-s31}
-        vmulge.f32      s24, s16, s24
-        vstmia          r0!, {s8-s11}
-        vstmia          r0!, {s12-s15}
-        vmulge.f32      s28, s20, s28
-        vldmiagt        r3!, {s0-s3}
-        vldmiagt        r1!, {s8-s11}
-        vldmiagt        r3!, {s4-s7}
-        vldmiagt        r1!, {s12-s15}
-        vmulge.f32      s8,  s0,  s8
-        vstmiage        r0!, {s24-s27}
-        vstmiage        r0!, {s28-s31}
+        fmuls           s12, s4,  s12
+        fldmiasge       r3!, {s16-s19}
+        fldmiasge       r1!, {s24-s27}
+        fldmiasge       r3!, {s20-s23}
+        fldmiasge       r1!, {s28-s31}
+        fmulsge         s24, s16, s24
+        fstmias         r0!, {s8-s11}
+        fstmias         r0!, {s12-s15}
+        fmulsge         s28, s20, s28
+        fldmiasgt       r3!, {s0-s3}
+        fldmiasgt       r1!, {s8-s11}
+        fldmiasgt       r3!, {s4-s7}
+        fldmiasgt       r1!, {s12-s15}
+        fmulsge         s8,  s0,  s8
+        fstmiasge       r0!, {s24-s27}
+        fstmiasge       r0!, {s28-s31}
         bgt             1b
 
         bic             r12, r12, #(7 << 16) /* set vector size back to 1 */
@@ -89,44 +88,44 @@ function ff_vector_fmul_vfp, export=1
 function ff_vector_fmul_reverse_vfp, export=1
         vpush           {d8-d15}
         add             r2,  r2,  r3, lsl #2
-        vldmdb          r2!, {s0-s3}
-        vldmia          r1!, {s8-s11}
-        vldmdb          r2!, {s4-s7}
-        vldmia          r1!, {s12-s15}
-        vmul.f32        s8,  s3,  s8
-        vmul.f32        s9,  s2,  s9
-        vmul.f32        s10, s1,  s10
-        vmul.f32        s11, s0,  s11
+        fldmdbs         r2!, {s0-s3}
+        fldmias         r1!, {s8-s11}
+        fldmdbs         r2!, {s4-s7}
+        fldmias         r1!, {s12-s15}
+        fmuls           s8,  s3,  s8
+        fmuls           s9,  s2,  s9
+        fmuls           s10, s1,  s10
+        fmuls           s11, s0,  s11
 1:
         subs            r3,  r3,  #16
-        vldmdbge        r2!, {s16-s19}
-        vmul.f32        s12, s7,  s12
-        vldmiage        r1!, {s24-s27}
-        vmul.f32        s13, s6,  s13
-        vldmdbge        r2!, {s20-s23}
-        vmul.f32        s14, s5,  s14
-        vldmiage        r1!, {s28-s31}
-        vmul.f32        s15, s4,  s15
-        vmulge.f32      s24, s19, s24
-        vldmdbgt        r2!, {s0-s3}
-        vmulge.f32      s25, s18, s25
-        vstmia          r0!, {s8-s13}
-        vmulge.f32      s26, s17, s26
-        vldmiagt        r1!, {s8-s11}
-        vmulge.f32      s27, s16, s27
-        vmulge.f32      s28, s23, s28
-        vldmdbgt        r2!, {s4-s7}
-        vmulge.f32      s29, s22, s29
-        vstmia          r0!, {s14-s15}
-        vmulge.f32      s30, s21, s30
-        vmulge.f32      s31, s20, s31
-        vmulge.f32      s8,  s3,  s8
-        vldmiagt        r1!, {s12-s15}
-        vmulge.f32      s9,  s2,  s9
-        vmulge.f32      s10, s1,  s10
-        vstmiage        r0!, {s24-s27}
-        vmulge.f32      s11, s0,  s11
-        vstmiage        r0!, {s28-s31}
+        fldmdbsge       r2!, {s16-s19}
+        fmuls           s12, s7,  s12
+        fldmiasge       r1!, {s24-s27}
+        fmuls           s13, s6,  s13
+        fldmdbsge       r2!, {s20-s23}
+        fmuls           s14, s5,  s14
+        fldmiasge       r1!, {s28-s31}
+        fmuls           s15, s4,  s15
+        fmulsge         s24, s19, s24
+        fldmdbsgt       r2!, {s0-s3}
+        fmulsge         s25, s18, s25
+        fstmias         r0!, {s8-s13}
+        fmulsge         s26, s17, s26
+        fldmiasgt       r1!, {s8-s11}
+        fmulsge         s27, s16, s27
+        fmulsge         s28, s23, s28
+        fldmdbsgt       r2!, {s4-s7}
+        fmulsge         s29, s22, s29
+        fstmias         r0!, {s14-s15}
+        fmulsge         s30, s21, s30
+        fmulsge         s31, s20, s31
+        fmulsge         s8,  s3,  s8
+        fldmiasgt       r1!, {s12-s15}
+        fmulsge         s9,  s2,  s9
+        fmulsge         s10, s1,  s10
+        fstmiasge       r0!, {s24-s27}
+        fmulsge         s11, s0,  s11
+        fstmiasge       r0!, {s28-s31}
         bgt             1b
 
         vpop            {d8-d15}
@@ -144,36 +143,36 @@ function ff_vector_fmul_reverse_vfp, export=1
 function ff_float_to_int16_vfp, export=1
         push            {r4-r8,lr}
         vpush           {d8-d11}
-        vldmia          r1!, {s16-s23}
-        vcvt.s32.f32    s0,  s16
-        vcvt.s32.f32    s1,  s17
-        vcvt.s32.f32    s2,  s18
-        vcvt.s32.f32    s3,  s19
-        vcvt.s32.f32    s4,  s20
-        vcvt.s32.f32    s5,  s21
-        vcvt.s32.f32    s6,  s22
-        vcvt.s32.f32    s7,  s23
+        fldmias         r1!, {s16-s23}
+        ftosis          s0,  s16
+        ftosis          s1,  s17
+        ftosis          s2,  s18
+        ftosis          s3,  s19
+        ftosis          s4,  s20
+        ftosis          s5,  s21
+        ftosis          s6,  s22
+        ftosis          s7,  s23
 1:
         subs            r2,  r2,  #8
-        vmov            r3,  r4,  s0, s1
-        vmov            r5,  r6,  s2, s3
-        vmov            r7,  r8,  s4, s5
-        vmov            ip,  lr,  s6, s7
-        vldmiagt        r1!, {s16-s23}
+        fmrrs           r3,  r4,  {s0, s1}
+        fmrrs           r5,  r6,  {s2, s3}
+        fmrrs           r7,  r8,  {s4, s5}
+        fmrrs           ip,  lr,  {s6, s7}
+        fldmiasgt       r1!, {s16-s23}
         ssat            r4,  #16, r4
         ssat            r3,  #16, r3
         ssat            r6,  #16, r6
         ssat            r5,  #16, r5
         pkhbt           r3,  r3,  r4, lsl #16
         pkhbt           r4,  r5,  r6, lsl #16
-        vcvtgt.s32.f32  s0,  s16
-        vcvtgt.s32.f32  s1,  s17
-        vcvtgt.s32.f32  s2,  s18
-        vcvtgt.s32.f32  s3,  s19
-        vcvtgt.s32.f32  s4,  s20
-        vcvtgt.s32.f32  s5,  s21
-        vcvtgt.s32.f32  s6,  s22
-        vcvtgt.s32.f32  s7,  s23
+        ftosisgt        s0,  s16
+        ftosisgt        s1,  s17
+        ftosisgt        s2,  s18
+        ftosisgt        s3,  s19
+        ftosisgt        s4,  s20
+        ftosisgt        s5,  s21
+        ftosisgt        s6,  s22
+        ftosisgt        s7,  s23
         ssat            r8,  #16, r8
         ssat            r7,  #16, r7
         ssat            lr,  #16, lr
diff --git a/libavcodec/arm/float_arm_vfp.c b/libavcodec/armv4l/float_arm_vfp.c
similarity index 79%
rename from libavcodec/arm/float_arm_vfp.c
rename to libavcodec/armv4l/float_arm_vfp.c
index 5598aa9..fb827b3 100644
--- a/libavcodec/arm/float_arm_vfp.c
+++ b/libavcodec/armv4l/float_arm_vfp.c
@@ -20,10 +20,10 @@
 
 #include "libavcodec/dsputil.h"
 
-void ff_vector_fmul_vfp(float *dst, const float *src, int len);
-void ff_vector_fmul_reverse_vfp(float *dst, const float *src0,
-                                const float *src1, int len);
-void ff_float_to_int16_vfp(int16_t *dst, const float *src, long len);
+extern void ff_vector_fmul_vfp(float *dst, const float *src, int len);
+extern void ff_vector_fmul_reverse_vfp(float *dst, const float *src0,
+                                       const float *src1, int len);
+extern void ff_float_to_int16_vfp(int16_t *dst, const float *src, long len);
 
 void ff_float_init_arm_vfp(DSPContext* c, AVCodecContext *avctx)
 {
diff --git a/libavcodec/arm/jrevdct_arm.S b/libavcodec/armv4l/jrevdct_arm.S
similarity index 99%
rename from libavcodec/arm/jrevdct_arm.S
rename to libavcodec/armv4l/jrevdct_arm.S
index b77315b..90bc278 100644
--- a/libavcodec/arm/jrevdct_arm.S
+++ b/libavcodec/armv4l/jrevdct_arm.S
@@ -68,22 +68,22 @@ function j_rev_dct_ARM, export=1
         add r11, pc, #(const_array-.-8) @ r11 = base pointer to the constants array
 row_loop:
         ldrsh r0, [lr, # 0]             @ r0 = 'd0'
-        ldrsh r2, [lr, # 2]             @ r2 = 'd2'
+        ldrsh r1, [lr, # 8]             @ r1 = 'd1'
 
         @ Optimization for row that have all items except the first set to 0
         @ (this works as the DCTELEMS are always 4-byte aligned)
         ldr r5, [lr, # 0]
-        ldr r6, [lr, # 4]
+        ldr r2, [lr, # 4]
         ldr r3, [lr, # 8]
         ldr r4, [lr, #12]
         orr r3, r3, r4
-        orr r3, r3, r6
+        orr r3, r3, r2
         orrs r5, r3, r5
         beq end_of_row_loop             @ nothing to be done as ALL of them are '0'
-        orrs r3, r3, r2
+        orrs r2, r3, r1
         beq empty_row
 
-        ldrsh r1, [lr, # 8]             @ r1 = 'd1'
+        ldrsh r2, [lr, # 2]             @ r2 = 'd2'
         ldrsh r4, [lr, # 4]             @ r4 = 'd4'
         ldrsh r6, [lr, # 6]             @ r6 = 'd6'
 
diff --git a/libavcodec/arm/mathops.h b/libavcodec/armv4l/mathops.h
similarity index 91%
rename from libavcodec/arm/mathops.h
rename to libavcodec/armv4l/mathops.h
index e36316c..37a0d3f 100644
--- a/libavcodec/arm/mathops.h
+++ b/libavcodec/armv4l/mathops.h
@@ -19,23 +19,25 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#ifndef AVCODEC_ARM_MATHOPS_H
-#define AVCODEC_ARM_MATHOPS_H
+#ifndef AVCODEC_ARMV4L_MATHOPS_H
+#define AVCODEC_ARMV4L_MATHOPS_H
 
 #include <stdint.h>
 #include "libavutil/common.h"
 
+#ifdef FRAC_BITS
 #   define MULL MULL
-static inline av_const int MULL(int a, int b, unsigned shift)
+static inline av_const int MULL(int a, int b)
 {
     int lo, hi;
     __asm__("smull %0, %1, %2, %3     \n\t"
             "mov   %0, %0,     lsr %4 \n\t"
             "add   %1, %0, %1, lsl %5 \n\t"
             : "=&r"(lo), "=&r"(hi)
-            : "r"(b), "r"(a), "i"(shift), "i"(32-shift));
+            : "r"(b), "r"(a), "i"(FRAC_BITS), "i"(32-FRAC_BITS));
     return hi;
 }
+#endif
 
 #define MULH MULH
 #ifdef HAVE_ARMV6
@@ -90,4 +92,4 @@ static inline av_const MUL16(int ra, int rb)
 
 #endif
 
-#endif /* AVCODEC_ARM_MATHOPS_H */
+#endif /* AVCODEC_ARMV4L_MATHOPS_H */
diff --git a/libavcodec/arm/mpegvideo_arm.c b/libavcodec/armv4l/mpegvideo_arm.c
similarity index 88%
rename from libavcodec/arm/mpegvideo_arm.c
rename to libavcodec/armv4l/mpegvideo_arm.c
index 18faed2..1a11d7a 100644
--- a/libavcodec/arm/mpegvideo_arm.c
+++ b/libavcodec/armv4l/mpegvideo_arm.c
@@ -22,10 +22,10 @@
 #include "libavcodec/dsputil.h"
 #include "libavcodec/mpegvideo.h"
 
-void MPV_common_init_iwmmxt(MpegEncContext *s);
-void MPV_common_init_armv5te(MpegEncContext *s);
+extern void MPV_common_init_iwmmxt(MpegEncContext *s);
+extern void MPV_common_init_armv5te(MpegEncContext *s);
 
-void MPV_common_init_arm(MpegEncContext *s)
+void MPV_common_init_armv4l(MpegEncContext *s)
 {
     /* IWMMXT support is a superset of armv5te, so
      * allow optimized functions for armv5te unless
diff --git a/libavcodec/armv4l/mpegvideo_armv5te.c b/libavcodec/armv4l/mpegvideo_armv5te.c
new file mode 100644
index 0000000..0ecadb4
--- /dev/null
+++ b/libavcodec/armv4l/mpegvideo_armv5te.c
@@ -0,0 +1,207 @@
+/*
+ * Optimization of some functions from mpegvideo.c for armv5te
+ * Copyright (c) 2007 Siarhei Siamashka <ssvb at users.sourceforge.net>
+ *
+ * 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 "libavcodec/avcodec.h"
+#include "libavcodec/dsputil.h"
+#include "libavcodec/mpegvideo.h"
+
+
+#ifdef ENABLE_ARM_TESTS
+/**
+ * h263 dequantizer supplementary function, it is performance critical and needs to
+ * have optimized implementations for each architecture. Is also used as a reference
+ * implementation in regression tests
+ */
+static inline void dct_unquantize_h263_helper_c(DCTELEM *block, int qmul, int qadd, int count)
+{
+    int i, level;
+    for (i = 0; i < count; i++) {
+        level = block[i];
+        if (level) {
+            if (level < 0) {
+                level = level * qmul - qadd;
+            } else {
+                level = level * qmul + qadd;
+            }
+            block[i] = level;
+        }
+    }
+}
+#endif
+
+/* GCC 3.1 or higher is required to support symbolic names in assembly code */
+#if (__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1))
+
+/**
+ * Special optimized version of dct_unquantize_h263_helper_c, it requires the block
+ * to be at least 8 bytes aligned, and may process more elements than requested.
+ * But it is guaranteed to never process more than 64 elements provided that
+ * xxcount argument is <= 64, so it is safe. This macro is optimized for a common
+ * distribution of values for nCoeffs (they are mostly multiple of 8 plus one or
+ * two extra elements). So this macro processes data as 8 elements per loop iteration
+ * and contains optional 2 elements processing in the end.
+ *
+ * Inner loop should take 6 cycles per element on arm926ej-s (Nokia 770)
+ */
+#define dct_unquantize_h263_special_helper_armv5te(xxblock, xxqmul, xxqadd, xxcount) \
+({ DCTELEM *xblock = xxblock; \
+   int xqmul = xxqmul, xqadd = xxqadd, xcount = xxcount, xtmp; \
+   int xdata1, xdata2; \
+__asm__ volatile( \
+        "subs %[count], %[count], #2       \n\t" \
+        "ble 2f                            \n\t" \
+        "ldrd r4, [%[block], #0]           \n\t" \
+        "1:                                \n\t" \
+        "ldrd r6, [%[block], #8]           \n\t" \
+\
+        "rsbs %[data1], %[zero], r4, asr #16 \n\t" \
+        "addgt %[data1], %[qadd], #0       \n\t" \
+        "rsblt %[data1], %[qadd], #0       \n\t" \
+        "smlatbne %[data1], r4, %[qmul], %[data1] \n\t" \
+\
+        "rsbs %[data2], %[zero], r5, asr #16 \n\t" \
+        "addgt %[data2], %[qadd], #0       \n\t" \
+        "rsblt %[data2], %[qadd], #0       \n\t" \
+        "smlatbne %[data2], r5, %[qmul], %[data2] \n\t" \
+\
+        "rsbs %[tmp], %[zero], r4, asl #16 \n\t" \
+        "addgt %[tmp], %[qadd], #0         \n\t" \
+        "rsblt %[tmp], %[qadd], #0         \n\t" \
+        "smlabbne r4, r4, %[qmul], %[tmp]  \n\t" \
+\
+        "rsbs %[tmp], %[zero], r5, asl #16 \n\t" \
+        "addgt %[tmp], %[qadd], #0         \n\t" \
+        "rsblt %[tmp], %[qadd], #0         \n\t" \
+        "smlabbne r5, r5, %[qmul], %[tmp]  \n\t" \
+\
+        "strh r4, [%[block]], #2           \n\t" \
+        "strh %[data1], [%[block]], #2     \n\t" \
+        "strh r5, [%[block]], #2           \n\t" \
+        "strh %[data2], [%[block]], #2     \n\t" \
+\
+        "rsbs %[data1], %[zero], r6, asr #16 \n\t" \
+        "addgt %[data1], %[qadd], #0        \n\t" \
+        "rsblt %[data1], %[qadd], #0        \n\t" \
+        "smlatbne %[data1], r6, %[qmul], %[data1] \n\t" \
+\
+        "rsbs %[data2], %[zero], r7, asr #16 \n\t" \
+        "addgt %[data2], %[qadd], #0        \n\t" \
+        "rsblt %[data2], %[qadd], #0        \n\t" \
+        "smlatbne %[data2], r7, %[qmul], %[data2] \n\t" \
+\
+        "rsbs %[tmp], %[zero], r6, asl #16  \n\t" \
+        "addgt %[tmp], %[qadd], #0          \n\t" \
+        "rsblt %[tmp], %[qadd], #0          \n\t" \
+        "smlabbne r6, r6, %[qmul], %[tmp]   \n\t" \
+\
+        "rsbs %[tmp], %[zero], r7, asl #16  \n\t" \
+        "addgt %[tmp], %[qadd], #0          \n\t" \
+        "rsblt %[tmp], %[qadd], #0          \n\t" \
+        "smlabbne r7, r7, %[qmul], %[tmp]   \n\t" \
+\
+        "strh r6, [%[block]], #2            \n\t" \
+        "strh %[data1], [%[block]], #2      \n\t" \
+        "strh r7, [%[block]], #2            \n\t" \
+        "strh %[data2], [%[block]], #2      \n\t" \
+\
+        "subs %[count], %[count], #8        \n\t" \
+        "ldrgtd r4, [%[block], #0]          \n\t" /* load data early to avoid load/use pipeline stall */ \
+        "bgt 1b                             \n\t" \
+\
+        "adds %[count], %[count], #2        \n\t" \
+        "ble  3f                            \n\t" \
+        "2:                                 \n\t" \
+        "ldrsh %[data1], [%[block], #0]     \n\t" \
+        "ldrsh %[data2], [%[block], #2]     \n\t" \
+        "mov  %[tmp], %[qadd]               \n\t" \
+        "cmp  %[data1], #0                  \n\t" \
+        "rsblt %[tmp], %[qadd], #0          \n\t" \
+        "smlabbne %[data1], %[data1], %[qmul], %[tmp] \n\t" \
+        "mov  %[tmp], %[qadd]               \n\t" \
+        "cmp  %[data2], #0                  \n\t" \
+        "rsblt %[tmp], %[qadd], #0          \n\t" \
+        "smlabbne %[data2], %[data2], %[qmul], %[tmp] \n\t" \
+        "strh %[data1], [%[block]], #2      \n\t" \
+        "strh %[data2], [%[block]], #2      \n\t" \
+        "3:                                 \n\t" \
+        : [block] "+&r" (xblock), [count] "+&r" (xcount), [tmp] "=&r" (xtmp), \
+          [data1] "=&r" (xdata1), [data2] "=&r" (xdata2)  \
+        : [qmul] "r" (xqmul), [qadd] "r" (xqadd), [zero] "r" (0) \
+        : "r4", "r5", "r6", "r7", "cc", "memory" \
+); \
+})
+
+static void dct_unquantize_h263_intra_armv5te(MpegEncContext *s,
+                                  DCTELEM *block, int n, int qscale)
+{
+    int level, qmul, qadd;
+    int nCoeffs;
+
+    assert(s->block_last_index[n]>=0);
+
+    qmul = qscale << 1;
+
+    if (!s->h263_aic) {
+        if (n < 4)
+            level = block[0] * s->y_dc_scale;
+        else
+            level = block[0] * s->c_dc_scale;
+        qadd = (qscale - 1) | 1;
+    }else{
+        qadd = 0;
+        level = block[0];
+    }
+    if(s->ac_pred)
+        nCoeffs=63;
+    else
+        nCoeffs= s->inter_scantable.raster_end[ s->block_last_index[n] ];
+
+    dct_unquantize_h263_special_helper_armv5te(block, qmul, qadd, nCoeffs + 1);
+    block[0] = level;
+}
+
+static void dct_unquantize_h263_inter_armv5te(MpegEncContext *s,
+                                  DCTELEM *block, int n, int qscale)
+{
+    int qmul, qadd;
+    int nCoeffs;
+
+    assert(s->block_last_index[n]>=0);
+
+    qadd = (qscale - 1) | 1;
+    qmul = qscale << 1;
+
+    nCoeffs= s->inter_scantable.raster_end[ s->block_last_index[n] ];
+
+    dct_unquantize_h263_special_helper_armv5te(block, qmul, qadd, nCoeffs + 1);
+}
+
+#define HAVE_DCT_UNQUANTIZE_H263_ARMV5TE_OPTIMIZED
+
+#endif
+
+void MPV_common_init_armv5te(MpegEncContext *s)
+{
+#ifdef HAVE_DCT_UNQUANTIZE_H263_ARMV5TE_OPTIMIZED
+    s->dct_unquantize_h263_intra = dct_unquantize_h263_intra_armv5te;
+    s->dct_unquantize_h263_inter = dct_unquantize_h263_inter_armv5te;
+#endif
+}
diff --git a/libavcodec/arm/mpegvideo_iwmmxt.c b/libavcodec/armv4l/mpegvideo_iwmmxt.c
similarity index 100%
rename from libavcodec/arm/mpegvideo_iwmmxt.c
rename to libavcodec/armv4l/mpegvideo_iwmmxt.c
diff --git a/libavcodec/arm/simple_idct_arm.S b/libavcodec/armv4l/simple_idct_arm.S
similarity index 100%
rename from libavcodec/arm/simple_idct_arm.S
rename to libavcodec/armv4l/simple_idct_arm.S
diff --git a/libavcodec/arm/simple_idct_armv5te.S b/libavcodec/armv4l/simple_idct_armv5te.S
similarity index 100%
rename from libavcodec/arm/simple_idct_armv5te.S
rename to libavcodec/armv4l/simple_idct_armv5te.S
diff --git a/libavcodec/arm/simple_idct_armv6.S b/libavcodec/armv4l/simple_idct_armv6.S
similarity index 100%
rename from libavcodec/arm/simple_idct_armv6.S
rename to libavcodec/armv4l/simple_idct_armv6.S
diff --git a/libavcodec/audioconvert.c b/libavcodec/audioconvert.c
index 8c6a6b8..8e09e4c 100644
--- a/libavcodec/audioconvert.c
+++ b/libavcodec/audioconvert.c
@@ -104,7 +104,7 @@ static const struct {
     const char *name;
     int         nb_channels;
     int64_t     layout;
-} channel_layout_map[] = {
+} const channel_layout_map[] = {
     { "mono",        1,  CH_LAYOUT_MONO },
     { "stereo",      2,  CH_LAYOUT_STEREO },
     { "surround",    3,  CH_LAYOUT_SURROUND },
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index 3d3e244..875029d 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -30,7 +30,7 @@
 #include "libavutil/avutil.h"
 
 #define LIBAVCODEC_VERSION_MAJOR 52
-#define LIBAVCODEC_VERSION_MINOR 10
+#define LIBAVCODEC_VERSION_MINOR  2
 #define LIBAVCODEC_VERSION_MICRO  0
 
 #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
@@ -189,10 +189,6 @@ enum CodecID {
     CODEC_ID_CMV,
     CODEC_ID_MOTIONPIXELS,
     CODEC_ID_TGV,
-    CODEC_ID_TGQ,
-
-    /* "codecs" for HW decoding with VDPAU */
-    CODEC_ID_H264_VDPAU= 0x9000,
 
     /* various PCM "codecs" */
     CODEC_ID_PCM_S16LE= 0x10000,
@@ -403,7 +399,6 @@ enum SampleFormat {
  */
 #define FF_MIN_BUFFER_SIZE 16384
 
-
 /**
  * motion estimation type.
  */
@@ -530,10 +525,6 @@ typedef struct RcOverride{
  * This can be used to prevent truncation of the last audio samples.
  */
 #define CODEC_CAP_SMALL_LAST_FRAME 0x0040
-/**
- * Codec can export data for HW decoding (VDPAU).
- */
-#define CODEC_CAP_HWACCEL_VDPAU    0x0080
 
 //The following defines may change, don't expect compatibility if you use them.
 #define MB_TYPE_INTRA4x4   0x0001
@@ -1397,8 +1388,6 @@ typedef struct AVCodecContext {
 #define FF_IDCT_SIMPLEVIS     18
 #define FF_IDCT_WMV2          19
 #define FF_IDCT_FAAN          20
-#define FF_IDCT_EA            21
-#define FF_IDCT_SIMPLENEON    22
 
     /**
      * slice count
@@ -1885,7 +1874,7 @@ typedef struct AVCodecContext {
      * - encoding: Set by libavcodec, user can override.
      * - decoding: Set by libavcodec, user can override.
      */
-    int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size);
+    int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void **arg2, int *ret, int count);
 
     /**
      * thread opaque
@@ -2090,7 +2079,7 @@ typedef struct AVCodecContext {
     /**
      * number of reference frames
      * - encoding: Set by user.
-     * - decoding: Set by lavc.
+     * - decoding: unused
      */
     int refs;
 
@@ -2292,20 +2281,6 @@ typedef struct AVCodecContext {
      * - decoding: Set by user.
      */
     int64_t request_channel_layout;
-
-    /**
-     * Ratecontrol attempt to use, at maximum, <value> of what can be used without an underflow.
-     * - encoding: Set by user.
-     * - decoding: unused.
-     */
-    float rc_max_available_vbv_use;
-
-    /**
-     * Ratecontrol attempt to use, at least, <value> times the amount needed to prevent a vbv overflow.
-     * - encoding: Set by user.
-     * - decoding: unused.
-     */
-    float rc_min_vbv_overflow_use;
 } AVCodecContext;
 
 /**
@@ -2383,54 +2358,23 @@ typedef struct AVPaletteControl {
 
 } AVPaletteControl attribute_deprecated;
 
-enum AVSubtitleType {
-    SUBTITLE_NONE,
-
-    SUBTITLE_BITMAP,                ///< A bitmap, pict will be set
-
-    /**
-     * Plain text, the text field must be set by the decoder and is
-     * authoritative. ass and pict fields may contain approximations.
-     */
-    SUBTITLE_TEXT,
-
-    /**
-     * Formatted text, the ass field must be set by the decoder and is
-     * authoritative. pict and text fields may contain approximations.
-     */
-    SUBTITLE_ASS,
-};
-
 typedef struct AVSubtitleRect {
-    int x;         ///< top left corner  of pict, undefined when pict is not set
-    int y;         ///< top left corner  of pict, undefined when pict is not set
-    int w;         ///< width            of pict, undefined when pict is not set
-    int h;         ///< height           of pict, undefined when pict is not set
-    int nb_colors; ///< number of colors in pict, undefined when pict is not set
-
-    /**
-     * data+linesize for the bitmap of this subtitle.
-     * can be set for text/ass as well once they where rendered
-     */
-    AVPicture pict;
-    enum AVSubtitleType type;
-
-    char *text;                     ///< 0 terminated plain UTF-8 text
-
-    /**
-     * 0 terminated ASS/SSA compatible event line.
-     * The pressentation of this is unaffected by the other values in this
-     * struct.
-     */
-    char *ass;
+    uint16_t x;
+    uint16_t y;
+    uint16_t w;
+    uint16_t h;
+    uint16_t nb_colors;
+    int linesize;
+    uint32_t *rgba_palette;
+    uint8_t *bitmap;
 } AVSubtitleRect;
 
 typedef struct AVSubtitle {
     uint16_t format; /* 0 = graphics */
     uint32_t start_display_time; /* relative to packet pts, in ms */
     uint32_t end_display_time; /* relative to packet pts, in ms */
-    unsigned num_rects;
-    AVSubtitleRect **rects;
+    uint32_t num_rects;
+    AVSubtitleRect *rects;
 } AVSubtitle;
 
 
@@ -2603,12 +2547,7 @@ unsigned avcodec_version(void);
  */
 void avcodec_init(void);
 
-/**
- * Register the codec \p codec and initialize libavcodec.
- *
- * @see avcodec_init()
- */
-void register_avcodec(AVCodec *codec);
+void register_avcodec(AVCodec *format);
 
 /**
  * Finds a registered encoder with a matching codec ID.
@@ -2701,8 +2640,8 @@ enum PixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum
 
 int avcodec_thread_init(AVCodecContext *s, int thread_count);
 void avcodec_thread_free(AVCodecContext *s);
-int avcodec_thread_execute(AVCodecContext *s, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size);
-int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size);
+int avcodec_thread_execute(AVCodecContext *s, int (*func)(AVCodecContext *c2, void *arg2),void **arg, int *ret, int count);
+int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void **arg, int *ret, int count);
 //FIXME func typedef
 
 /**
@@ -2797,9 +2736,6 @@ int avcodec_decode_audio2(AVCodecContext *avctx, int16_t *samples,
  * the linesize is not a multiple of 16 then there's no sense in aligning the
  * start of the buffer to 16.
  *
- * @note Some codecs have a delay between input and output, these need to be
- * feeded with buf=NULL, buf_size=0 at the end to return the remaining frames.
- *
  * @param avctx the codec context
  * @param[out] picture The AVFrame in which the decoded video frame will be stored.
  * @param[in] buf the input buffer
@@ -2867,16 +2803,6 @@ int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size,
 
 int avcodec_close(AVCodecContext *avctx);
 
-/**
- * Register all the codecs, parsers and bitstream filters which were enabled at
- * configuration time. If you do not call this function you can select exactly
- * which formats you want to support, by using the individual registration
- * functions.
- *
- * @see register_avcodec
- * @see av_register_codec_parser
- * @see av_register_bitstream_filter
- */
 void avcodec_register_all(void);
 
 /**
@@ -3030,7 +2956,7 @@ int av_picture_crop(AVPicture *dst, const AVPicture *src,
 int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, int pix_fmt,
             int padtop, int padbottom, int padleft, int padright, int *color);
 
-unsigned int av_xiphlacing(unsigned char *s, unsigned int v);
+extern unsigned int av_xiphlacing(unsigned char *s, unsigned int v);
 
 /**
  * Parses \p str and put in \p width_ptr and \p height_ptr the detected values.
@@ -3056,6 +2982,18 @@ int av_parse_video_frame_size(int *width_ptr, int *height_ptr, const char *str);
  */
 int av_parse_video_frame_rate(AVRational *frame_rate, const char *str);
 
+/**
+ * Logs a generic warning message about a missing feature.
+ * @param[in] avc a pointer to an arbitrary struct of which the first field is
+ * a pointer to an AVClass struct
+ * @param[in] feature string containing the name of the missing feature
+ * @param[in] want_sample indicates if samples are wanted which exhibit this feature.
+ * If \p want_sample is non-zero, additional verbage will be added to the log
+ * message which tells the user how to report samples to the development
+ * mailing list.
+ */
+void av_log_missing_feature(void *avc, const char *feature, int want_sample);
+
 /* error handling */
 #if EINVAL > 0
 #define AVERROR(e) (-(e)) /**< Returns a negative error code from a POSIX error code, to return from library functions. */
diff --git a/libavcodec/avs.c b/libavcodec/avs.c
index 3b29c85..c60fe63 100644
--- a/libavcodec/avs.c
+++ b/libavcodec/avs.c
@@ -25,35 +25,35 @@
 
 typedef struct {
     AVFrame picture;
-} AvsContext;
+} avs_context_t;
 
 typedef enum {
     AVS_VIDEO     = 0x01,
     AVS_AUDIO     = 0x02,
     AVS_PALETTE   = 0x03,
     AVS_GAME_DATA = 0x04,
-} AvsBlockType;
+} avs_block_type_t;
 
 typedef enum {
     AVS_I_FRAME     = 0x00,
     AVS_P_FRAME_3X3 = 0x01,
     AVS_P_FRAME_2X2 = 0x02,
     AVS_P_FRAME_2X3 = 0x03,
-} AvsVideoSubType;
+} avs_video_sub_type_t;
 
 
 static int
 avs_decode_frame(AVCodecContext * avctx,
                  void *data, int *data_size, const uint8_t * buf, int buf_size)
 {
-    AvsContext *const avs = avctx->priv_data;
+    avs_context_t *const avs = avctx->priv_data;
     AVFrame *picture = data;
     AVFrame *const p = (AVFrame *) & avs->picture;
     const uint8_t *table, *vect;
     uint8_t *out;
     int i, j, x, y, stride, vect_w = 3, vect_h = 3;
-    AvsVideoSubType sub_type;
-    AvsBlockType type;
+    int sub_type;
+    avs_block_type_t type;
     GetBitContext change_map;
 
     if (avctx->reget_buffer(avctx, p)) {
@@ -152,7 +152,7 @@ AVCodec avs_decoder = {
     "avs",
     CODEC_TYPE_VIDEO,
     CODEC_ID_AVS,
-    sizeof(AvsContext),
+    sizeof(avs_context_t),
     avs_decode_init,
     NULL,
     NULL,
diff --git a/libavcodec/beosthread.c b/libavcodec/beosthread.c
index e2fd977..4c99bc0 100644
--- a/libavcodec/beosthread.c
+++ b/libavcodec/beosthread.c
@@ -92,7 +92,7 @@ void avcodec_thread_free(AVCodecContext *s){
     av_freep(&s->thread_opaque);
 }
 
-int avcodec_thread_execute(AVCodecContext *s, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size){
+int avcodec_thread_execute(AVCodecContext *s, int (*func)(AVCodecContext *c2, void *arg2),void **arg, int *ret, int count){
     ThreadContext *c= s->thread_opaque;
     int i;
 
@@ -102,7 +102,7 @@ int avcodec_thread_execute(AVCodecContext *s, int (*func)(AVCodecContext *c2, vo
     /* note, we can be certain that this is not called with the same AVCodecContext by different threads at the same time */
 
     for(i=0; i<count; i++){
-        c[i].arg= (char*)arg + i*size;
+        c[i].arg= arg[i];
         c[i].func= func;
         c[i].ret= 12345;
 
diff --git a/libavcodec/bfin/dsputil_bfin.c b/libavcodec/bfin/dsputil_bfin.c
index 1a8ae3b..ccdb19c 100644
--- a/libavcodec/bfin/dsputil_bfin.c
+++ b/libavcodec/bfin/dsputil_bfin.c
@@ -29,35 +29,35 @@
 int off;
 
 
-void ff_bfin_idct (DCTELEM *block) attribute_l1_text;
-void ff_bfin_fdct (DCTELEM *block) attribute_l1_text;
-void ff_bfin_vp3_idct (DCTELEM *block);
-void ff_bfin_vp3_idct_put (uint8_t *dest, int line_size, DCTELEM *block);
-void ff_bfin_vp3_idct_add (uint8_t *dest, int line_size, DCTELEM *block);
-void ff_bfin_add_pixels_clamped (DCTELEM *block, uint8_t *dest, int line_size) attribute_l1_text;
-void ff_bfin_put_pixels_clamped (DCTELEM *block, uint8_t *dest, int line_size) attribute_l1_text;
-void ff_bfin_diff_pixels (DCTELEM *block, uint8_t *s1, uint8_t *s2, int stride)  attribute_l1_text;
-void ff_bfin_get_pixels  (DCTELEM *restrict block, const uint8_t *pixels, int line_size) attribute_l1_text;
-int  ff_bfin_pix_norm1  (uint8_t * pix, int line_size) attribute_l1_text;
-int  ff_bfin_z_sad8x8   (uint8_t *blk1, uint8_t *blk2, int dsz, int line_size, int h) attribute_l1_text;
-int  ff_bfin_z_sad16x16 (uint8_t *blk1, uint8_t *blk2, int dsz, int line_size, int h) attribute_l1_text;
-
-void ff_bfin_z_put_pixels16_xy2     (uint8_t *block, const uint8_t *s0, int dest_size, int line_size, int h) attribute_l1_text;
-void ff_bfin_z_put_pixels8_xy2      (uint8_t *block, const uint8_t *s0, int dest_size, int line_size, int h) attribute_l1_text;
-void ff_bfin_put_pixels16_xy2_nornd (uint8_t *block, const uint8_t *s0, int line_size, int h) attribute_l1_text;
-void ff_bfin_put_pixels8_xy2_nornd  (uint8_t *block, const uint8_t *s0, int line_size, int h) attribute_l1_text;
-
-
-int  ff_bfin_pix_sum (uint8_t *p, int stride) attribute_l1_text;
-
-void ff_bfin_put_pixels8uc        (uint8_t *block, const uint8_t *s0, const uint8_t *s1, int dest_size, int line_size, int h) attribute_l1_text;
-void ff_bfin_put_pixels16uc       (uint8_t *block, const uint8_t *s0, const uint8_t *s1, int dest_size, int line_size, int h) attribute_l1_text;
-void ff_bfin_put_pixels8uc_nornd  (uint8_t *block, const uint8_t *s0, const uint8_t *s1, int line_size, int h) attribute_l1_text;
-void ff_bfin_put_pixels16uc_nornd (uint8_t *block, const uint8_t *s0, const uint8_t *s1, int line_size, int h) attribute_l1_text;
-
-int ff_bfin_sse4  (void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h) attribute_l1_text;
-int ff_bfin_sse8  (void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h) attribute_l1_text;
-int ff_bfin_sse16 (void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h) attribute_l1_text;
+extern void ff_bfin_idct (DCTELEM *block) attribute_l1_text;
+extern void ff_bfin_fdct (DCTELEM *block) attribute_l1_text;
+extern void ff_bfin_vp3_idct (DCTELEM *block);
+extern void ff_bfin_vp3_idct_put (uint8_t *dest, int line_size, DCTELEM *block);
+extern void ff_bfin_vp3_idct_add (uint8_t *dest, int line_size, DCTELEM *block);
+extern void ff_bfin_add_pixels_clamped (DCTELEM *block, uint8_t *dest, int line_size) attribute_l1_text;
+extern void ff_bfin_put_pixels_clamped (DCTELEM *block, uint8_t *dest, int line_size) attribute_l1_text;
+extern void ff_bfin_diff_pixels (DCTELEM *block, uint8_t *s1, uint8_t *s2, int stride)  attribute_l1_text;
+extern void ff_bfin_get_pixels  (DCTELEM *restrict block, const uint8_t *pixels, int line_size) attribute_l1_text;
+extern int  ff_bfin_pix_norm1  (uint8_t * pix, int line_size) attribute_l1_text;
+extern int  ff_bfin_z_sad8x8   (uint8_t *blk1, uint8_t *blk2, int dsz, int line_size, int h) attribute_l1_text;
+extern int  ff_bfin_z_sad16x16 (uint8_t *blk1, uint8_t *blk2, int dsz, int line_size, int h) attribute_l1_text;
+
+extern void ff_bfin_z_put_pixels16_xy2     (uint8_t *block, const uint8_t *s0, int dest_size, int line_size, int h) attribute_l1_text;
+extern void ff_bfin_z_put_pixels8_xy2      (uint8_t *block, const uint8_t *s0, int dest_size, int line_size, int h) attribute_l1_text;
+extern void ff_bfin_put_pixels16_xy2_nornd (uint8_t *block, const uint8_t *s0, int line_size, int h) attribute_l1_text;
+extern void ff_bfin_put_pixels8_xy2_nornd  (uint8_t *block, const uint8_t *s0, int line_size, int h) attribute_l1_text;
+
+
+extern int  ff_bfin_pix_sum (uint8_t *p, int stride) attribute_l1_text;
+
+extern void ff_bfin_put_pixels8uc        (uint8_t *block, const uint8_t *s0, const uint8_t *s1, int dest_size, int line_size, int h) attribute_l1_text;
+extern void ff_bfin_put_pixels16uc       (uint8_t *block, const uint8_t *s0, const uint8_t *s1, int dest_size, int line_size, int h) attribute_l1_text;
+extern void ff_bfin_put_pixels8uc_nornd  (uint8_t *block, const uint8_t *s0, const uint8_t *s1, int line_size, int h) attribute_l1_text;
+extern void ff_bfin_put_pixels16uc_nornd (uint8_t *block, const uint8_t *s0, const uint8_t *s1, int line_size, int h) attribute_l1_text;
+
+extern int ff_bfin_sse4  (void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h) attribute_l1_text;
+extern int ff_bfin_sse8  (void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h) attribute_l1_text;
+extern int ff_bfin_sse16 (void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h) attribute_l1_text;
 
 
 static void bfin_idct_add (uint8_t *dest, int line_size, DCTELEM *block)
diff --git a/libavcodec/bfin/mpegvideo_bfin.c b/libavcodec/bfin/mpegvideo_bfin.c
index d1c33a1..05743e7 100644
--- a/libavcodec/bfin/mpegvideo_bfin.c
+++ b/libavcodec/bfin/mpegvideo_bfin.c
@@ -26,7 +26,7 @@
 #include "dsputil_bfin.h"
 
 
-void ff_bfin_fdct (DCTELEM *block) attribute_l1_text;
+extern void ff_bfin_fdct (DCTELEM *block) attribute_l1_text;
 
 
 static int dct_quantize_bfin (MpegEncContext *s,
diff --git a/libavcodec/bfin/vp3_bfin.c b/libavcodec/bfin/vp3_bfin.c
index 1906453..62990f6 100644
--- a/libavcodec/bfin/vp3_bfin.c
+++ b/libavcodec/bfin/vp3_bfin.c
@@ -22,10 +22,10 @@
 #include "libavcodec/dsputil.h"
 #include "dsputil_bfin.h"
 
-void ff_bfin_vp3_idct (DCTELEM *block) attribute_l1_text;
-void ff_bfin_idct (DCTELEM *block) attribute_l1_text;
-void ff_bfin_add_pixels_clamped (DCTELEM *block, uint8_t *dest, int line_size) attribute_l1_text;
-void ff_bfin_put_pixels_clamped (DCTELEM *block, uint8_t *dest, int line_size) attribute_l1_text;
+extern void ff_bfin_vp3_idct (DCTELEM *block) attribute_l1_text;
+extern void ff_bfin_idct (DCTELEM *block) attribute_l1_text;
+extern void ff_bfin_add_pixels_clamped (DCTELEM *block, uint8_t *dest, int line_size) attribute_l1_text;
+extern void ff_bfin_put_pixels_clamped (DCTELEM *block, uint8_t *dest, int line_size) attribute_l1_text;
 
 /* Intra iDCT offset 128 */
 void ff_bfin_vp3_idct_put (uint8_t *dest, int line_size, DCTELEM *block)
diff --git a/libavcodec/bitstream.h b/libavcodec/bitstream.h
index 23bc34d..5a5db5c 100644
--- a/libavcodec/bitstream.h
+++ b/libavcodec/bitstream.h
@@ -41,7 +41,7 @@
 //#define ALT_BITSTREAM_WRITER
 //#define ALIGNED_BITSTREAM_WRITER
 #if !defined(LIBMPEG2_BITSTREAM_READER) && !defined(A32_BITSTREAM_READER) && !defined(ALT_BITSTREAM_READER)
-#   ifdef ARCH_ARM
+#   ifdef ARCH_ARMV4L
 #       define A32_BITSTREAM_READER
 #   else
 #       define ALT_BITSTREAM_READER
@@ -179,6 +179,10 @@ typedef struct RL_VLC_ELEM {
     uint8_t run;
 } RL_VLC_ELEM;
 
+#if defined(ARCH_SPARC) || defined(ARCH_ARMV4L) || defined(ARCH_MIPS) || defined(ARCH_BFIN)
+#define UNALIGNED_STORES_ARE_BAD
+#endif
+
 #ifndef ALT_BITSTREAM_WRITER
 static inline void put_bits(PutBitContext *s, int n, unsigned int value)
 {
@@ -196,7 +200,7 @@ static inline void put_bits(PutBitContext *s, int n, unsigned int value)
 #ifdef BITSTREAM_WRITER_LE
     bit_buf |= value << (32 - bit_left);
     if (n >= bit_left) {
-#ifndef HAVE_FAST_UNALIGNED
+#ifdef UNALIGNED_STORES_ARE_BAD
         if (3 & (intptr_t) s->buf_ptr) {
             s->buf_ptr[0] = bit_buf      ;
             s->buf_ptr[1] = bit_buf >>  8;
@@ -217,7 +221,7 @@ static inline void put_bits(PutBitContext *s, int n, unsigned int value)
     } else {
         bit_buf<<=bit_left;
         bit_buf |= value >> (n - bit_left);
-#ifndef HAVE_FAST_UNALIGNED
+#ifdef UNALIGNED_STORES_ARE_BAD
         if (3 & (intptr_t) s->buf_ptr) {
             s->buf_ptr[0] = bit_buf >> 24;
             s->buf_ptr[1] = bit_buf >> 16;
diff --git a/libavcodec/bmp.c b/libavcodec/bmp.c
index 9a20cd6..ca2e201 100644
--- a/libavcodec/bmp.c
+++ b/libavcodec/bmp.c
@@ -73,35 +73,25 @@ static int bmp_decode_frame(AVCodecContext *avctx,
     buf += 2; /* reserved2 */
 
     hsize = bytestream_get_le32(&buf); /* header size */
-    ihsize = bytestream_get_le32(&buf);       /* more header size */
-    if(ihsize + 14 > hsize){
-        av_log(avctx, AV_LOG_ERROR, "invalid header size %d\n", hsize);
+    if(fsize <= hsize){
+        av_log(avctx, AV_LOG_ERROR, "not enough data (%d < %d)\n",
+               fsize, hsize);
         return -1;
     }
 
-    /* sometimes file size is set to some headers size, set a real size in that case */
-    if(fsize == 14 || fsize == ihsize + 14)
-        fsize = buf_size - 2;
-
-    if(fsize <= hsize){
-        av_log(avctx, AV_LOG_ERROR, "declared file size is less than header size (%d < %d)\n",
-               fsize, hsize);
+    ihsize = bytestream_get_le32(&buf);       /* more header size */
+    if(ihsize + 14 > hsize){
+        av_log(avctx, AV_LOG_ERROR, "invalid header size %d\n", hsize);
         return -1;
     }
 
-    switch(ihsize){
-    case  40: // windib v3
-    case  64: // OS/2 v2
-    case 108: // windib v4
-    case 124: // windib v5
+    if (ihsize == 40) {
         width = bytestream_get_le32(&buf);
         height = bytestream_get_le32(&buf);
-        break;
-    case  12: // OS/2 v1
+    } else if (ihsize == 12) {
         width  = bytestream_get_le16(&buf);
         height = bytestream_get_le16(&buf);
-        break;
-    default:
+    } else {
         av_log(avctx, AV_LOG_ERROR, "unsupported BMP file, patch welcome\n");
         return -1;
     }
diff --git a/libavcodec/cavs.h b/libavcodec/cavs.h
index 2a1a90e..c684acf 100644
--- a/libavcodec/cavs.h
+++ b/libavcodec/cavs.h
@@ -144,13 +144,13 @@ DECLARE_ALIGNED_8(typedef, struct) {
     int16_t ref;
 } vector_t;
 
-struct dec_2dvlc {
+typedef struct dec_2dvlc_t {
   int8_t rltab[59][3];
   int8_t level_add[27];
   int8_t golomb_order;
   int inc_limit;
   int8_t max_run;
-};
+} dec_2dvlc_t;
 
 typedef struct {
     MpegEncContext s;
@@ -226,9 +226,9 @@ typedef struct {
 
 extern const uint8_t     ff_cavs_dequant_shift[64];
 extern const uint16_t    ff_cavs_dequant_mul[64];
-extern const struct dec_2dvlc ff_cavs_intra_dec[7];
-extern const struct dec_2dvlc ff_cavs_inter_dec[7];
-extern const struct dec_2dvlc ff_cavs_chroma_dec[5];
+extern const dec_2dvlc_t ff_cavs_intra_dec[7];
+extern const dec_2dvlc_t ff_cavs_inter_dec[7];
+extern const dec_2dvlc_t ff_cavs_chroma_dec[5];
 extern const uint8_t     ff_cavs_chroma_qp[64];
 extern const uint8_t     ff_cavs_scan3x3[4];
 extern const uint8_t     ff_cavs_partition_flags[30];
diff --git a/libavcodec/cavsdata.h b/libavcodec/cavsdata.h
index 6d80ac1..94b620b 100644
--- a/libavcodec/cavsdata.h
+++ b/libavcodec/cavsdata.h
@@ -101,7 +101,7 @@ const vector_t ff_cavs_intra_mv = {0,0,1,REF_INTRA};
 
 #define EOB 0,0,0
 
-const struct dec_2dvlc ff_cavs_intra_dec[7] = {
+const dec_2dvlc_t ff_cavs_intra_dec[7] = {
   {
     { //level / run / table_inc
       {  1, 1, 1},{ -1, 1, 1},{  1, 2, 1},{ -1, 2, 1},{  1, 3, 1},{ -1, 3, 1},
@@ -238,7 +238,7 @@ const struct dec_2dvlc ff_cavs_intra_dec[7] = {
   }
 };
 
-const struct dec_2dvlc ff_cavs_inter_dec[7] = {
+const dec_2dvlc_t ff_cavs_inter_dec[7] = {
   {
     { //level / run
       {  1, 1, 1},{ -1, 1, 1},{  1, 2, 1},{ -1, 2, 1},{  1, 3, 1},{ -1, 3, 1},
@@ -375,7 +375,7 @@ const struct dec_2dvlc ff_cavs_inter_dec[7] = {
   }
 };
 
-const struct dec_2dvlc ff_cavs_chroma_dec[5] = {
+const dec_2dvlc_t ff_cavs_chroma_dec[5] = {
   {
     { //level / run
       {  1, 1, 1},{ -1, 1, 1},{  1, 2, 1},{ -1, 2, 1},{  1, 3, 1},{ -1, 3, 1},
diff --git a/libavcodec/cavsdec.c b/libavcodec/cavsdec.c
index 18dcb57..a978fe1 100644
--- a/libavcodec/cavsdec.c
+++ b/libavcodec/cavsdec.c
@@ -113,7 +113,7 @@ static inline int get_ue_code(GetBitContext *gb, int order) {
  * @param stride line stride in frame buffer
  */
 static int decode_residual_block(AVSContext *h, GetBitContext *gb,
-                                 const struct dec_2dvlc *r, int esc_golomb_order,
+                                 const dec_2dvlc_t *r, int esc_golomb_order,
                                  int qp, uint8_t *dst, int stride) {
     int i, level_code, esc_code, level, run, mask;
     DCTELEM level_buf[65];
diff --git a/libavcodec/celp_math.h b/libavcodec/celp_math.h
index 7cf7861..ce0726f 100644
--- a/libavcodec/celp_math.h
+++ b/libavcodec/celp_math.h
@@ -51,6 +51,26 @@ int ff_exp2(uint16_t power);
 int ff_log2(uint32_t value);
 
 /**
+ * returns the dot product.
+ * @param a input data array
+ * @param b input data array
+ * @param length number of elements
+ * @param shift right shift by this value will be done after multiplication
+ *
+ * @return dot product = sum of elementwise products
+ */
+static int dot_product(const int16_t* a, const int16_t* b, int length, int shift)
+{
+    int sum = 0;
+    int i;
+
+    for(i=0; i<length; i++)
+        sum += (a[i] * b[i]) >> shift;
+
+    return sum;
+}
+
+/**
  * Shift value left or right depending on sign of offset parameter.
  * @param value value to shift
  * @param offset shift offset
@@ -71,6 +91,6 @@ static inline int bidir_sal(int value, int offset)
  *
  * @return dot product = sum of elementwise products
  */
-float ff_dot_productf(const float* a, const float* b, int length);
+extern float ff_dot_productf(const float* a, const float* b, int length);
 
 #endif /* AVCODEC_CELP_MATH_H */
diff --git a/libavcodec/cinepak.c b/libavcodec/cinepak.c
index 8c2efba..77e5ff1 100644
--- a/libavcodec/cinepak.c
+++ b/libavcodec/cinepak.c
@@ -40,7 +40,7 @@
 typedef struct {
     uint8_t  y0, y1, y2, y3;
     uint8_t  u, v;
-} cvid_codebook;
+} cvid_codebook_t;
 
 #define MAX_STRIPS      32
 
@@ -48,9 +48,9 @@ typedef struct {
     uint16_t          id;
     uint16_t          x1, y1;
     uint16_t          x2, y2;
-    cvid_codebook     v4_codebook[256];
-    cvid_codebook     v1_codebook[256];
-} cvid_strip;
+    cvid_codebook_t   v4_codebook[256];
+    cvid_codebook_t   v1_codebook[256];
+} cvid_strip_t;
 
 typedef struct CinepakContext {
 
@@ -63,13 +63,13 @@ typedef struct CinepakContext {
     int width, height;
 
     int palette_video;
-    cvid_strip strips[MAX_STRIPS];
+    cvid_strip_t strips[MAX_STRIPS];
 
     int sega_film_skip_bytes;
 
 } CinepakContext;
 
-static void cinepak_decode_codebook (cvid_codebook *codebook,
+static void cinepak_decode_codebook (cvid_codebook_t *codebook,
                                      int chunk_id, int size, const uint8_t *data)
 {
     const uint8_t *eod = (data + size);
@@ -118,12 +118,12 @@ static void cinepak_decode_codebook (cvid_codebook *codebook,
     }
 }
 
-static int cinepak_decode_vectors (CinepakContext *s, cvid_strip *strip,
+static int cinepak_decode_vectors (CinepakContext *s, cvid_strip_t *strip,
                                    int chunk_id, int size, const uint8_t *data)
 {
     const uint8_t   *eod = (data + size);
     uint32_t         flag, mask;
-    cvid_codebook   *codebook;
+    cvid_codebook_t *codebook;
     unsigned int     x, y;
     uint32_t         iy[4];
     uint32_t         iu[2];
@@ -262,7 +262,7 @@ static int cinepak_decode_vectors (CinepakContext *s, cvid_strip *strip,
 }
 
 static int cinepak_decode_strip (CinepakContext *s,
-                                 cvid_strip *strip, const uint8_t *data, int size)
+                                 cvid_strip_t *strip, const uint8_t *data, int size)
 {
     const uint8_t *eod = (data + size);
     int      chunk_id, chunk_size;
diff --git a/libavcodec/cook.c b/libavcodec/cook.c
index 1affe03..ba9f30f 100644
--- a/libavcodec/cook.c
+++ b/libavcodec/cook.c
@@ -1177,7 +1177,6 @@ static int cook_decode_init(AVCodecContext *avctx)
     }
 
     avctx->sample_fmt = SAMPLE_FMT_S16;
-    avctx->channel_layout = (avctx->channels==2) ? CH_LAYOUT_STEREO : CH_LAYOUT_MONO;
 
 #ifdef COOKDEBUG
     dump_cook_context(q);
diff --git a/libavcodec/dca.c b/libavcodec/dca.c
index dbd1152..859b09a 100644
--- a/libavcodec/dca.c
+++ b/libavcodec/dca.c
@@ -64,7 +64,7 @@ enum DCAMode {
  * are never used so complete accuracy is not needed.
  *
  * L = left, R = right, C = center, S = surround, F = front, R = rear, T = total, OV = overhead.
- * S  -> side, when both rear and back are configured move one of them to the side channel
+ * S  -> back, when both rear and back are configured move one of them to the side channel
  * OV -> center back
  * All 2 channel configurations -> CH_LAYOUT_STEREO
  */
@@ -86,48 +86,22 @@ static const int64_t dca_core_channel_layout[] = {
     CH_FRONT_LEFT_OF_CENTER|CH_FRONT_CENTER|CH_FRONT_RIGHT_OF_CENTER|CH_LAYOUT_STEREO|CH_SIDE_LEFT|CH_SIDE_RIGHT, ///< 7, CL + C + CR + L + R + SL + SR
     CH_FRONT_LEFT_OF_CENTER|CH_FRONT_RIGHT_OF_CENTER|CH_LAYOUT_STEREO|CH_SIDE_LEFT|CH_SIDE_RIGHT|CH_BACK_LEFT|CH_BACK_RIGHT, ///< 8, CL + CR + L + R + SL1 + SL2+ SR1 + SR2
     CH_FRONT_LEFT_OF_CENTER|CH_FRONT_CENTER|CH_FRONT_RIGHT_OF_CENTER|CH_LAYOUT_STEREO|CH_SIDE_LEFT|CH_BACK_CENTER|CH_SIDE_RIGHT, ///< 8, CL + C+ CR + L + R + SL + S+ SR
-};
-
-static const int8_t dca_lfe_index[] = {
-    1,2,2,2,2,3,2,3,2,3,2,3,1,3,2,3
-};
 
-static const int8_t dca_channel_reorder_lfe[][8] = {
-    { 0, -1, -1, -1, -1, -1, -1, -1},
-    { 0,  1, -1, -1, -1, -1, -1, -1},
-    { 0,  1, -1, -1, -1, -1, -1, -1},
-    { 0,  1, -1, -1, -1, -1, -1, -1},
-    { 0,  1, -1, -1, -1, -1, -1, -1},
-    { 2,  0,  1, -1, -1, -1, -1, -1},
-    { 0,  1,  3, -1, -1, -1, -1, -1},
-    { 2,  0,  1,  4, -1, -1, -1, -1},
-    { 0,  1,  3,  4, -1, -1, -1, -1},
-    { 2,  0,  1,  4,  5, -1, -1, -1},
-    { 3,  4,  0,  1,  5,  6, -1, -1},
-    { 2,  0,  1,  4,  5,  6, -1, -1},
-    { 0,  6,  4,  5,  2,  3, -1, -1},
-    { 4,  2,  5,  0,  1,  6,  7, -1},
-    { 5,  6,  0,  1,  7,  3,  8,  4},
-    { 4,  2,  5,  0,  1,  6,  8,  7},
-};
-
-static const int8_t dca_channel_reorder_nolfe[][8] = {
-    { 0, -1, -1, -1, -1, -1, -1, -1},
-    { 0,  1, -1, -1, -1, -1, -1, -1},
-    { 0,  1, -1, -1, -1, -1, -1, -1},
-    { 0,  1, -1, -1, -1, -1, -1, -1},
-    { 0,  1, -1, -1, -1, -1, -1, -1},
-    { 2,  0,  1, -1, -1, -1, -1, -1},
-    { 0,  1,  2, -1, -1, -1, -1, -1},
-    { 2,  0,  1,  3, -1, -1, -1, -1},
-    { 0,  1,  2,  3, -1, -1, -1, -1},
-    { 2,  0,  1,  3,  4, -1, -1, -1},
-    { 2,  3,  0,  1,  4,  5, -1, -1},
-    { 2,  0,  1,  3,  4,  5, -1, -1},
-    { 0,  5,  3,  4,  1,  2, -1, -1},
-    { 3,  2,  4,  0,  1,  5,  6, -1},
-    { 4,  5,  0,  1,  6,  2,  7,  3},
-    { 3,  2,  4,  0,  1,  5,  7,  6},
+    /* The following entries adds the LFE layouts, this way we can reuse the table for the AVCodec channel_layouts member*/
+    CH_FRONT_CENTER|CH_LOW_FREQUENCY,
+    CH_LAYOUT_STEREO|CH_LOW_FREQUENCY,
+    CH_LAYOUT_STEREO|CH_FRONT_CENTER|CH_LOW_FREQUENCY,
+    CH_LAYOUT_STEREO|CH_BACK_CENTER|CH_LOW_FREQUENCY,
+    CH_LAYOUT_STEREO|CH_FRONT_CENTER|CH_BACK_CENTER|CH_LOW_FREQUENCY,
+    CH_LAYOUT_STEREO|CH_SIDE_LEFT|CH_SIDE_RIGHT|CH_LOW_FREQUENCY,
+    CH_LAYOUT_STEREO|CH_FRONT_CENTER|CH_BACK_LEFT|CH_BACK_RIGHT|CH_LOW_FREQUENCY,
+    CH_LAYOUT_STEREO|CH_SIDE_LEFT|CH_SIDE_RIGHT|CH_FRONT_LEFT_OF_CENTER|CH_FRONT_RIGHT_OF_CENTER|CH_LOW_FREQUENCY,
+    CH_LAYOUT_STEREO|CH_BACK_LEFT|CH_BACK_RIGHT|CH_FRONT_CENTER|CH_BACK_CENTER|CH_LOW_FREQUENCY,
+    CH_FRONT_CENTER|CH_FRONT_RIGHT_OF_CENTER|CH_FRONT_LEFT_OF_CENTER|CH_BACK_CENTER|CH_BACK_LEFT|CH_BACK_RIGHT|CH_LOW_FREQUENCY,
+    CH_FRONT_LEFT_OF_CENTER|CH_FRONT_CENTER|CH_FRONT_RIGHT_OF_CENTER|CH_LAYOUT_STEREO|CH_SIDE_LEFT|CH_SIDE_RIGHT|CH_LOW_FREQUENCY,
+    CH_FRONT_LEFT_OF_CENTER|CH_FRONT_RIGHT_OF_CENTER|CH_LAYOUT_STEREO|CH_SIDE_LEFT|CH_SIDE_RIGHT|CH_BACK_LEFT|CH_BACK_RIGHT|CH_LOW_FREQUENCY,
+    CH_FRONT_LEFT_OF_CENTER|CH_FRONT_CENTER|CH_FRONT_RIGHT_OF_CENTER|CH_LAYOUT_STEREO|CH_SIDE_LEFT|CH_BACK_CENTER|CH_SIDE_RIGHT|CH_LOW_FREQUENCY,
+    0,
 };
 
 
@@ -240,7 +214,6 @@ typedef struct {
     uint8_t dca_buffer[DCA_MAX_FRAME_SIZE];
     int dca_buffer_size;        ///< how much data is in the dca_buffer
 
-    const int8_t* channel_order_tab;                             ///< channel reordering table, lfe and non lfe
     GetBitContext gb;
     /* Current position in DCA frame */
     int current_subframe;
@@ -1056,7 +1029,7 @@ static int dca_subsubframe(DCAContext * s)
     for (k = 0; k < s->prim_channels; k++) {
 /*        static float pcm_to_double[8] =
             {32768.0, 32768.0, 524288.0, 524288.0, 0, 8388608.0, 8388608.0};*/
-         qmf_32_subbands(s, k, subband_samples[k], &s->samples[256 * s->channel_order_tab[k]],
+         qmf_32_subbands(s, k, subband_samples[k], &s->samples[256 * k],
                             M_SQRT1_2*s->scale_bias /*pcm_to_double[s->source_pcm_res] */ ,
                             s->add_bias );
     }
@@ -1070,11 +1043,12 @@ static int dca_subsubframe(DCAContext * s)
     /* Generate LFE samples for this subsubframe FIXME!!! */
     if (s->output & DCA_LFE) {
         int lfe_samples = 2 * s->lfe * s->subsubframes;
+        int i_channels = dca_channels[s->output & DCA_CHANNEL_MASK];
 
         lfe_interpolation_fir(s->lfe, 2 * s->lfe,
                               s->lfe_data + lfe_samples +
                               2 * s->lfe * subsubframe,
-                              &s->samples[256 * dca_lfe_index[s->amode]],
+                              &s->samples[256 * i_channels],
                               (1.0/256.0)*s->scale_bias,  s->add_bias);
         /* Outputs 20bits pcm samples */
     }
@@ -1175,9 +1149,8 @@ static int dca_convert_bitstream(const uint8_t * src, int src_size, uint8_t * ds
     PutBitContext pb;
 
     if((unsigned)src_size > (unsigned)max_size) {
-//        av_log(NULL, AV_LOG_ERROR, "Input frame size larger then DCA_MAX_FRAME_SIZE!\n");
-//        return -1;
-        src_size = max_size;
+        av_log(NULL, AV_LOG_ERROR, "Input frame size larger then DCA_MAX_FRAME_SIZE!\n");
+        return -1;
     }
 
     mrk = AV_RB32(src);
@@ -1235,26 +1208,15 @@ static int dca_decode_frame(AVCodecContext * avctx,
     avctx->bit_rate = s->bit_rate;
 
     channels = s->prim_channels + !!s->lfe;
-
-    if (s->amode<16) {
-        avctx->channel_layout = dca_core_channel_layout[s->amode];
-
-        if (s->lfe) {
-            avctx->channel_layout |= CH_LOW_FREQUENCY;
-            s->channel_order_tab = dca_channel_reorder_lfe[s->amode];
-        } else
-            s->channel_order_tab = dca_channel_reorder_nolfe[s->amode];
-
-        if(avctx->request_channels == 2 && s->prim_channels > 2) {
-            channels = 2;
-            s->output = DCA_STEREO;
-            avctx->channel_layout = CH_LAYOUT_STEREO;
-        }
-    } else {
-        av_log(avctx, AV_LOG_ERROR, "Non standard configuration %d !\n",s->amode);
-        return -1;
+    if(avctx->request_channels == 2 && s->prim_channels > 2) {
+        channels = 2;
+        s->output = DCA_STEREO;
+        avctx->channel_layout = CH_LAYOUT_STEREO;
     }
+    if (s->amode<16)
+        avctx->channel_layout = dca_core_channel_layout[s->amode];
 
+    if (s->lfe) avctx->channel_layout |= CH_LOW_FREQUENCY;
 
     /* There is nothing that prevents a dts frame to change channel configuration
        but FFmpeg doesn't support that so only set the channels if it is previously
@@ -1333,4 +1295,5 @@ AVCodec dca_decoder = {
     .decode = dca_decode_frame,
     .close = dca_decode_end,
     .long_name = NULL_IF_CONFIG_SMALL("DCA (DTS Coherent Acoustics)"),
+    .channel_layouts = dca_core_channel_layout,
 };
diff --git a/libavcodec/dca.h b/libavcodec/dca.h
index 02c0a51..3895719 100644
--- a/libavcodec/dca.h
+++ b/libavcodec/dca.h
@@ -31,7 +31,4 @@
 #define DCA_MARKER_14B_BE 0x1FFFE800
 #define DCA_MARKER_14B_LE 0xFF1F00E8
 
-/** DCA-HD specific block starts with this marker. */
-#define DCA_HD_MARKER     0x64582025
-
 #endif /* AVCODEC_DCA_H */
diff --git a/libavcodec/dca_parser.c b/libavcodec/dca_parser.c
index b1c06e4..f182506 100644
--- a/libavcodec/dca_parser.c
+++ b/libavcodec/dca_parser.c
@@ -34,7 +34,6 @@ typedef struct DCAParseContext {
     uint32_t lastmarker;
     int size;
     int framesize;
-    int hd_pos;
 } DCAParseContext;
 
 #define IS_MARKER(state, i, buf, buf_size) \
@@ -76,16 +75,10 @@ static int dca_find_frame_end(DCAParseContext * pc1, const uint8_t * buf,
         for (; i < buf_size; i++) {
             pc1->size++;
             state = (state << 8) | buf[i];
-            if (state == DCA_HD_MARKER && !pc1->hd_pos)
-                pc1->hd_pos = pc1->size;
-            if (state == pc1->lastmarker && IS_MARKER(state, i, buf, buf_size)) {
-                if(pc1->framesize > pc1->size)
-                    continue;
-                if(!pc1->framesize){
-                    pc1->framesize = pc1->hd_pos ? pc1->hd_pos : pc1->size;
-                }
+            if (state == pc1->lastmarker && IS_MARKER(state, i, buf, buf_size) && (!pc1->framesize || pc1->framesize == pc1->size)) {
                 pc->frame_start_found = 0;
                 pc->state = -1;
+                pc1->framesize = pc1->size;
                 pc1->size = 0;
                 return i - 3;
             }
diff --git a/libavcodec/dct-test.c b/libavcodec/dct-test.c
index 04f75b0..e4c89ba 100644
--- a/libavcodec/dct-test.c
+++ b/libavcodec/dct-test.c
@@ -35,10 +35,9 @@
 #include "libavutil/common.h"
 
 #include "simple_idct.h"
-#include "aandcttab.h"
 #include "faandct.h"
 #include "faanidct.h"
-#include "x86/idct_xvid.h"
+#include "i386/idct_xvid.h"
 
 #undef printf
 #undef random
@@ -46,36 +45,30 @@
 void *fast_memcpy(void *a, const void *b, size_t c){return memcpy(a,b,c);};
 
 /* reference fdct/idct */
-void fdct(DCTELEM *block);
-void idct(DCTELEM *block);
-void init_fdct();
+extern void fdct(DCTELEM *block);
+extern void idct(DCTELEM *block);
+extern void init_fdct();
 
-void ff_mmx_idct(DCTELEM *data);
-void ff_mmxext_idct(DCTELEM *data);
+extern void ff_mmx_idct(DCTELEM *data);
+extern void ff_mmxext_idct(DCTELEM *data);
 
-void odivx_idct_c(short *block);
+extern void odivx_idct_c (short *block);
 
 // BFIN
-void ff_bfin_idct(DCTELEM *block);
-void ff_bfin_fdct(DCTELEM *block);
+extern void ff_bfin_idct (DCTELEM *block)  ;
+extern void ff_bfin_fdct (DCTELEM *block) ;
 
 // ALTIVEC
-void fdct_altivec(DCTELEM *block);
-//void idct_altivec(DCTELEM *block);?? no routine
+extern void fdct_altivec (DCTELEM *block);
+//extern void idct_altivec (DCTELEM *block);?? no routine
 
-// ARM
-void j_rev_dct_ARM(DCTELEM *data);
-void simple_idct_ARM(DCTELEM *data);
-void simple_idct_armv5te(DCTELEM *data);
-void ff_simple_idct_armv6(DCTELEM *data);
-void ff_simple_idct_neon(DCTELEM *data);
 
 struct algo {
   const char *name;
   enum { FDCT, IDCT } is_idct;
   void (* func) (DCTELEM *block);
   void (* ref)  (DCTELEM *block);
-  enum formattag { NO_PERM,MMX_PERM, MMX_SIMPLE_PERM, SCALE_PERM, SSE2_PERM, PARTTRANS_PERM } format;
+  enum formattag { NO_PERM,MMX_PERM, MMX_SIMPLE_PERM, SCALE_PERM, SSE2_PERM } format;
   int  mm_support;
 };
 
@@ -101,7 +94,6 @@ struct algo algos[] = {
   {"MMX",             0, ff_fdct_mmx,        fdct, NO_PERM, FF_MM_MMX},
 #ifdef HAVE_MMX2
   {"MMX2",            0, ff_fdct_mmx2,       fdct, NO_PERM, FF_MM_MMXEXT},
-  {"SSE2",            0, ff_fdct_sse2,       fdct, NO_PERM, FF_MM_SSE2},
 #endif
 
 #ifdef CONFIG_GPL
@@ -123,24 +115,21 @@ struct algo algos[] = {
   {"BFINidct",        1, ff_bfin_idct,       idct, NO_PERM},
 #endif
 
-#ifdef ARCH_ARM
-  {"SIMPLE-ARM",      1, simple_idct_ARM,    idct, NO_PERM },
-  {"INT-ARM",         1, j_rev_dct_ARM,      idct, MMX_PERM },
-#ifdef HAVE_ARMV5TE
-  {"SIMPLE-ARMV5TE",  1, simple_idct_armv5te, idct, NO_PERM },
-#endif
-#ifdef HAVE_ARMV6
-  {"SIMPLE-ARMV6",    1, ff_simple_idct_armv6, idct, MMX_PERM },
-#endif
-#ifdef HAVE_NEON
-  {"SIMPLE-NEON",     1, ff_simple_idct_neon, idct, PARTTRANS_PERM },
-#endif
-#endif /* ARCH_ARM */
-
   { 0 }
 };
 
 #define AANSCALE_BITS 12
+static const unsigned short aanscales[64] = {
+    /* precomputed values scaled up by 14 bits */
+    16384, 22725, 21407, 19266, 16384, 12873,  8867,  4520,
+    22725, 31521, 29692, 26722, 22725, 17855, 12299,  6270,
+    21407, 29692, 27969, 25172, 21407, 16819, 11585,  5906,
+    19266, 26722, 25172, 22654, 19266, 15137, 10426,  5315,
+    16384, 22725, 21407, 19266, 16384, 12873,  8867,  4520,
+    12873, 17855, 16819, 15137, 12873, 10114,  6967,  3552,
+    8867, 12299, 11585, 10426,  8867,  6967,  4799,  2446,
+    4520,  6270,  5906,  5315,  4520,  3552,  2446,  1247
+};
 
 uint8_t cropTbl[256 + 2 * MAX_NEG_CROP];
 
@@ -255,9 +244,6 @@ void dct_error(const char *name, int is_idct,
         } else if (form == SSE2_PERM) {
             for(i=0; i<64; i++)
                 block[(i&0x38) | idct_sse2_row_perm[i&7]] = block1[i];
-        } else if (form == PARTTRANS_PERM) {
-            for(i=0; i<64; i++)
-                block[(i&0x24) | ((i&3)<<3) | ((i>>3)&3)] = block1[i];
         } else {
             for(i=0; i<64; i++)
                 block[i]= block1[i];
@@ -276,7 +262,7 @@ void dct_error(const char *name, int is_idct,
 
         if (form == SCALE_PERM) {
             for(i=0; i<64; i++) {
-                scale = 8*(1 << (AANSCALE_BITS + 11)) / ff_aanscales[i];
+                scale = 8*(1 << (AANSCALE_BITS + 11)) / aanscales[i];
                 block[i] = (block[i] * scale /*+ (1<<(AANSCALE_BITS-1))*/) >> AANSCALE_BITS;
             }
         }
diff --git a/libavcodec/dirac_parser.c b/libavcodec/dirac_parser.c
index ac82dca..199354a 100644
--- a/libavcodec/dirac_parser.c
+++ b/libavcodec/dirac_parser.c
@@ -1,8 +1,7 @@
 /*
  * Dirac parser
  *
- * Copyright (c) 2007-2008 Marco Gerards <marco at gnu.org>
- * Copyright (c) 2008 BBC, Anuradha Suraparaju <asuraparaju at gmail.com>
+ * Copyright (c) 2007 Marco Gerards <marco at gnu.org>
  *
  * This file is part of FFmpeg.
  *
@@ -35,200 +34,42 @@
  * Finds the end of the current frame in the bitstream.
  * @return the position of the first byte of the next frame or -1
  */
-typedef struct DiracParseContext {
-    int state;
-    int is_synced;
-    int sync_offset;
-    int header_bytes_needed;
-    int overread_index;
-    int buffer_size;
-    int index;
-    uint8_t *buffer;
-    int dirac_unit_size;
-    uint8_t *dirac_unit;
-} DiracParseContext;
-
-static int find_frame_end(DiracParseContext *pc,
-                          const uint8_t *buf, int buf_size)
+static int find_frame_end(ParseContext *pc, const uint8_t *buf, int buf_size)
 {
     uint32_t state = pc->state;
-    int i = 0;
-
-    if (!pc->is_synced) {
-        for (i = 0; i < buf_size; i++) {
-            state = (state << 8) | buf[i];
-            if (state == DIRAC_PARSE_INFO_PREFIX) {
-                state                   = -1;
-                pc->is_synced           = 1;
-                pc->header_bytes_needed = 9;
-                pc->sync_offset         = i;
-                break;
+    int i;
+
+    for (i = 0; i < buf_size; i++) {
+        state = (state << 8) | buf[i];
+        if (state == DIRAC_PARSE_INFO_PREFIX) {
+            pc->frame_start_found ^= 1;
+            if (!pc->frame_start_found) {
+                pc->state = -1;
+                return i - 3;
             }
         }
     }
 
-    if (pc->is_synced) {
-        pc->sync_offset = 0;
-        for (; i < buf_size; i++) {
-            if (state == DIRAC_PARSE_INFO_PREFIX) {
-                if ((buf_size-i) >= pc->header_bytes_needed) {
-                    pc->state = -1;
-                    return i + pc->header_bytes_needed;
-                } else {
-                    pc->header_bytes_needed = 9-(buf_size-i);
-                    break;
-                }
-            } else
-              state = (state << 8) | buf[i];
-        }
-    }
     pc->state = state;
-    return -1;
-}
-
-typedef struct DiracParseUnit
-{
-    int next_pu_offset;
-    int prev_pu_offset;
-    uint8_t pu_type;
-} DiracParseUnit;
-
-static int unpack_parse_unit(DiracParseUnit *pu, DiracParseContext *pc,
-                             int offset)
-{
-    uint8_t *start = pc->buffer + offset;
-    uint8_t *end   = pc->buffer + pc->index;
-    if (start < pc->buffer || (start+13 > end))
-        return 0;
-    pu->pu_type = start[4];
-
-    pu->next_pu_offset = AV_RB32(start+5);
-    pu->prev_pu_offset = AV_RB32(start+9);
-
-    if (pu->pu_type == 0x10 && pu->next_pu_offset == 0)
-        pu->next_pu_offset = 13;
-
-    return 1;
-}
-
-static int dirac_combine_frame(AVCodecParserContext *s, AVCodecContext *avctx,
-                               int next, const uint8_t **buf, int *buf_size)
-{
-    int parse_timing_info = (s->pts == AV_NOPTS_VALUE &&
-                             s->dts == AV_NOPTS_VALUE);
-    DiracParseContext *pc = s->priv_data;
-
-    if (pc->overread_index) {
-        memcpy(pc->buffer, pc->buffer + pc->overread_index,
-               pc->index - pc->overread_index);
-        pc->index -= pc->overread_index;
-        pc->overread_index = 0;
-        if (*buf_size == 0 && pc->buffer[4] == 0x10) {
-            *buf      = pc->buffer;
-            *buf_size = pc->index;
-            return 0;
-        }
-    }
-
-    if ( next == -1) {
-        /* Found a possible frame start but not a frame end */
-        void *new_buffer = av_fast_realloc(pc->buffer, &pc->buffer_size,
-                                           pc->index + (*buf_size -
-                                                        pc->sync_offset));
-        pc->buffer = new_buffer;
-        memcpy(pc->buffer+pc->index, (*buf + pc->sync_offset),
-               *buf_size - pc->sync_offset);
-        pc->index += *buf_size - pc->sync_offset;
-        return -1;
-    } else {
-        /* Found a possible frame start and a  possible frame end */
-        DiracParseUnit pu1, pu;
-        void *new_buffer = av_fast_realloc(pc->buffer, &pc->buffer_size,
-                                           pc->index + next);
-        pc->buffer = new_buffer;
-        memcpy(pc->buffer + pc->index, *buf, next);
-        pc->index += next;
 
-        /* Need to check if we have a valid Parse Unit. We can't go by the
-         * sync pattern 'BBCD' alone because arithmetic coding of the residual
-         * and motion data can cause the pattern triggering a false start of
-         * frame. So check if the previous parse offset of the next parse unit
-         * is equal to the next parse offset of the current parse unit then
-         * we can be pretty sure that we have a valid parse unit */
-        if (!unpack_parse_unit(&pu1, pc, pc->index - 13)                     ||
-            !unpack_parse_unit(&pu, pc, pc->index - 13 - pu1.prev_pu_offset) ||
-            pu.next_pu_offset != pu1.prev_pu_offset) {
-            pc->index -= 9;
-            *buf_size = next-9;
-            pc->header_bytes_needed = 9;
-            return -1;
-        }
-
-        /* All non-frame data must be accompanied by frame data. This is to
-         * ensure that pts is set correctly. So if the current parse unit is
-         * not frame data, wait for frame data to come along */
-
-        pc->dirac_unit = pc->buffer + pc->index - 13 -
-                         pu1.prev_pu_offset - pc->dirac_unit_size;
-
-        pc->dirac_unit_size += pu.next_pu_offset;
-
-        if ((pu.pu_type&0x08) != 0x08) {
-            pc->header_bytes_needed = 9;
-            *buf_size = next;
-            return -1;
-        }
-
-        /* Get the picture number to set the pts and dts*/
-        if (parse_timing_info) {
-            uint8_t *cur_pu = pc->buffer +
-                              pc->index - 13 - pu1.prev_pu_offset;
-            int pts =  AV_RB32(cur_pu + 13);
-            if (s->last_pts == 0 && s->last_dts == 0)
-                s->dts = pts - 1;
-            else
-                s->dts = s->last_dts+1;
-            s->pts = pts;
-            if (!avctx->has_b_frames && (cur_pu[4] & 0x03))
-                avctx->has_b_frames = 1;
-        }
-        if (avctx->has_b_frames && s->pts == s->dts)
-             s->pict_type = FF_B_TYPE;
-
-        /* Finally have a complete Dirac data unit */
-        *buf      = pc->dirac_unit;
-        *buf_size = pc->dirac_unit_size;
-
-        pc->dirac_unit_size     = 0;
-        pc->overread_index      = pc->index-13;
-        pc->header_bytes_needed = 9;
-    }
-    return next;
+    return END_NOT_FOUND;
 }
 
 static int dirac_parse(AVCodecParserContext *s, AVCodecContext *avctx,
                        const uint8_t **poutbuf, int *poutbuf_size,
                        const uint8_t *buf, int buf_size)
 {
-    DiracParseContext *pc = s->priv_data;
+    ParseContext *pc = s->priv_data;
     int next;
 
-    *poutbuf = NULL;
-    *poutbuf_size = 0;
-
     if (s->flags & PARSER_FLAG_COMPLETE_FRAMES) {
         next = buf_size;
-        *poutbuf = buf;
-        *poutbuf_size = buf_size;
-        /* Assume that data has been packetized into an encapsulation unit. */
-    } else {
+    }else{
         next = find_frame_end(pc, buf, buf_size);
-        if (!pc->is_synced && next == -1) {
-            /* No frame start found yet. So throw away the entire buffer. */
-            return buf_size;
-        }
 
-        if (dirac_combine_frame(s, avctx, next, &buf, &buf_size) < 0) {
+        if (ff_combine_frame(pc, next, &buf, &buf_size) < 0) {
+            *poutbuf = NULL;
+            *poutbuf_size = 0;
             return buf_size;
         }
     }
@@ -238,18 +79,10 @@ static int dirac_parse(AVCodecParserContext *s, AVCodecContext *avctx,
     return next;
 }
 
-static void dirac_parse_close(AVCodecParserContext *s)
-{
-    DiracParseContext *pc = s->priv_data;
-
-    if (pc->buffer_size > 0)
-        av_free(pc->buffer);
-}
-
 AVCodecParser dirac_parser = {
     { CODEC_ID_DIRAC },
-    sizeof(DiracParseContext),
+    sizeof(ParseContext),
     NULL,
     dirac_parse,
-    dirac_parse_close,
+    ff_parse_close,
 };
diff --git a/libavcodec/dnxhddec.c b/libavcodec/dnxhddec.c
index 4bf98de..1f4f1c8 100644
--- a/libavcodec/dnxhddec.c
+++ b/libavcodec/dnxhddec.c
@@ -219,12 +219,14 @@ static int dnxhd_decode_macroblock(DNXHDContext *ctx, int x, int y)
     int dct_offset;
     int qscale, i;
 
+    ctx->dsp.clear_blocks(ctx->blocks[0]);
+    ctx->dsp.clear_blocks(ctx->blocks[2]); // FIXME change clear blocks to take block amount
+
     qscale = get_bits(&ctx->gb, 11);
     skip_bits1(&ctx->gb);
     //av_log(ctx->avctx, AV_LOG_DEBUG, "qscale %d\n", qscale);
 
     for (i = 0; i < 8; i++) {
-        ctx->dsp.clear_block(ctx->blocks[i]);
         dnxhd_decode_dct_block(ctx, ctx->blocks[i], i, qscale);
     }
 
diff --git a/libavcodec/dnxhdenc.c b/libavcodec/dnxhdenc.c
index a79a161..6b1a214 100644
--- a/libavcodec/dnxhdenc.c
+++ b/libavcodec/dnxhdenc.c
@@ -27,28 +27,66 @@
 #include "avcodec.h"
 #include "dsputil.h"
 #include "mpegvideo.h"
-#include "dnxhdenc.h"
+#include "dnxhddata.h"
+
+typedef struct {
+    uint16_t mb;
+    int value;
+} RCCMPEntry;
+
+typedef struct {
+    int ssd;
+    int bits;
+} RCEntry;
 
 int dct_quantize_c(MpegEncContext *s, DCTELEM *block, int n, int qscale, int *overflow);
 
-#define LAMBDA_FRAC_BITS 10
+typedef struct DNXHDEncContext {
+    MpegEncContext m; ///< Used for quantization dsp functions
 
-static av_always_inline void dnxhd_get_pixels_8x4(DCTELEM *restrict block, const uint8_t *pixels, int line_size)
-{
-    int i;
-    for (i = 0; i < 4; i++) {
-        block[0] = pixels[0]; block[1] = pixels[1];
-        block[2] = pixels[2]; block[3] = pixels[3];
-        block[4] = pixels[4]; block[5] = pixels[5];
-        block[6] = pixels[6]; block[7] = pixels[7];
-        pixels += line_size;
-        block += 8;
-    }
-    memcpy(block   , block- 8, sizeof(*block)*8);
-    memcpy(block+ 8, block-16, sizeof(*block)*8);
-    memcpy(block+16, block-24, sizeof(*block)*8);
-    memcpy(block+24, block-32, sizeof(*block)*8);
-}
+    AVFrame frame;
+    int cid;
+    const CIDEntry *cid_table;
+    uint8_t *msip; ///< Macroblock Scan Indexes Payload
+    uint32_t *slice_size;
+
+    struct DNXHDEncContext *thread[MAX_THREADS];
+
+    unsigned dct_y_offset;
+    unsigned dct_uv_offset;
+    int interlaced;
+    int cur_field;
+
+    DECLARE_ALIGNED_16(DCTELEM, blocks[8][64]);
+
+    int      (*qmatrix_c)     [64];
+    int      (*qmatrix_l)     [64];
+    uint16_t (*qmatrix_l16)[2][64];
+    uint16_t (*qmatrix_c16)[2][64];
+
+    unsigned frame_bits;
+    uint8_t *src[3];
+
+    uint32_t *vlc_codes;
+    uint8_t  *vlc_bits;
+    uint16_t *run_codes;
+    uint8_t  *run_bits;
+
+    /** Rate control */
+    unsigned slice_bits;
+    unsigned qscale;
+    unsigned lambda;
+
+    unsigned thread_size;
+
+    uint16_t *mb_bits;
+    uint8_t  *mb_qscale;
+
+    RCCMPEntry *mb_cmp;
+    RCEntry   (*mb_rc)[8160];
+} DNXHDEncContext;
+
+#define LAMBDA_FRAC_BITS 10
 
 static int dnxhd_init_vlc(DNXHDEncContext *ctx)
 {
@@ -173,13 +211,8 @@ static int dnxhd_encode_init(AVCodecContext *avctx)
     ctx->m.mb_intra = 1;
     ctx->m.h263_aic = 1;
 
-    ctx->get_pixels_8x4_sym = dnxhd_get_pixels_8x4;
-
     dsputil_init(&ctx->m.dsp, avctx);
     ff_dct_common_init(&ctx->m);
-#ifdef HAVE_MMX
-    ff_dnxhd_init_mmx(ctx);
-#endif
     if (!ctx->m.dct_quantize)
         ctx->m.dct_quantize = dct_quantize_c;
 
@@ -352,6 +385,27 @@ static av_always_inline int dnxhd_calc_ac_bits(DNXHDEncContext *ctx, DCTELEM *bl
     return bits;
 }
 
+static av_always_inline void dnxhd_get_pixels_4x8(DCTELEM *restrict block, const uint8_t *pixels, int line_size)
+{
+    int i;
+    for (i = 0; i < 4; i++) {
+        block[0] = pixels[0];
+        block[1] = pixels[1];
+        block[2] = pixels[2];
+        block[3] = pixels[3];
+        block[4] = pixels[4];
+        block[5] = pixels[5];
+        block[6] = pixels[6];
+        block[7] = pixels[7];
+        pixels += line_size;
+        block += 8;
+    }
+    memcpy(block   , block- 8, sizeof(*block)*8);
+    memcpy(block+ 8, block-16, sizeof(*block)*8);
+    memcpy(block+16, block-24, sizeof(*block)*8);
+    memcpy(block+24, block-32, sizeof(*block)*8);
+}
+
 static av_always_inline void dnxhd_get_blocks(DNXHDEncContext *ctx, int mb_x, int mb_y)
 {
     const uint8_t *ptr_y = ctx->thread[0]->src[0] + ((mb_y << 4) * ctx->m.linesize)   + (mb_x << 4);
@@ -366,14 +420,12 @@ static av_always_inline void dnxhd_get_blocks(DNXHDEncContext *ctx, int mb_x, in
 
     if (mb_y+1 == ctx->m.mb_height && ctx->m.avctx->height == 1080) {
         if (ctx->interlaced) {
-            ctx->get_pixels_8x4_sym(ctx->blocks[4], ptr_y + ctx->dct_y_offset    , ctx->m.linesize);
-            ctx->get_pixels_8x4_sym(ctx->blocks[5], ptr_y + ctx->dct_y_offset + 8, ctx->m.linesize);
-            ctx->get_pixels_8x4_sym(ctx->blocks[6], ptr_u + ctx->dct_uv_offset   , ctx->m.uvlinesize);
-            ctx->get_pixels_8x4_sym(ctx->blocks[7], ptr_v + ctx->dct_uv_offset   , ctx->m.uvlinesize);
-        } else {
-            dsp->clear_block(ctx->blocks[4]); dsp->clear_block(ctx->blocks[5]);
-            dsp->clear_block(ctx->blocks[6]); dsp->clear_block(ctx->blocks[7]);
-        }
+            dnxhd_get_pixels_4x8(ctx->blocks[4], ptr_y + ctx->dct_y_offset    , ctx->m.linesize);
+            dnxhd_get_pixels_4x8(ctx->blocks[5], ptr_y + ctx->dct_y_offset + 8, ctx->m.linesize);
+            dnxhd_get_pixels_4x8(ctx->blocks[6], ptr_u + ctx->dct_uv_offset   , ctx->m.uvlinesize);
+            dnxhd_get_pixels_4x8(ctx->blocks[7], ptr_v + ctx->dct_uv_offset   , ctx->m.uvlinesize);
+        } else
+            memset(ctx->blocks[4], 0, 4*64*sizeof(DCTELEM));
     } else {
         dsp->get_pixels(ctx->blocks[4], ptr_y + ctx->dct_y_offset    , ctx->m.linesize);
         dsp->get_pixels(ctx->blocks[5], ptr_y + ctx->dct_y_offset + 8, ctx->m.linesize);
@@ -397,7 +449,7 @@ static av_always_inline int dnxhd_switch_matrix(DNXHDEncContext *ctx, int i)
 
 static int dnxhd_calc_bits_thread(AVCodecContext *avctx, void *arg)
 {
-    DNXHDEncContext *ctx = *(void**)arg;
+    DNXHDEncContext *ctx = arg;
     int mb_y, mb_x;
     int qscale = ctx->thread[0]->qscale;
 
@@ -447,7 +499,7 @@ static int dnxhd_calc_bits_thread(AVCodecContext *avctx, void *arg)
 
 static int dnxhd_encode_thread(AVCodecContext *avctx, void *arg)
 {
-    DNXHDEncContext *ctx = *(void**)arg;
+    DNXHDEncContext *ctx = arg;
     int mb_y, mb_x;
 
     for (mb_y = ctx->m.start_mb_y; mb_y < ctx->m.end_mb_y; mb_y++) {
@@ -503,7 +555,7 @@ static void dnxhd_setup_threads_slices(DNXHDEncContext *ctx, uint8_t *buf)
 
 static int dnxhd_mb_var_thread(AVCodecContext *avctx, void *arg)
 {
-    DNXHDEncContext *ctx = *(void**)arg;
+    DNXHDEncContext *ctx = arg;
     int mb_y, mb_x;
     for (mb_y = ctx->m.start_mb_y; mb_y < ctx->m.end_mb_y; mb_y++) {
         for (mb_x = 0; mb_x < ctx->m.mb_width; mb_x++) {
@@ -526,7 +578,7 @@ static int dnxhd_encode_rdo(AVCodecContext *avctx, DNXHDEncContext *ctx)
 
     for (q = 1; q < avctx->qmax; q++) {
         ctx->qscale = q;
-        avctx->execute(avctx, dnxhd_calc_bits_thread, (void**)&ctx->thread[0], NULL, avctx->thread_count, sizeof(void*));
+        avctx->execute(avctx, dnxhd_calc_bits_thread, (void**)&ctx->thread[0], NULL, avctx->thread_count);
     }
     up_step = down_step = 2<<LAMBDA_FRAC_BITS;
     lambda = ctx->lambda;
@@ -606,7 +658,7 @@ static int dnxhd_find_qscale(DNXHDEncContext *ctx)
         bits = 0;
         ctx->qscale = qscale;
         // XXX avoid recalculating bits
-        ctx->m.avctx->execute(ctx->m.avctx, dnxhd_calc_bits_thread, (void**)&ctx->thread[0], NULL, ctx->m.avctx->thread_count, sizeof(void*));
+        ctx->m.avctx->execute(ctx->m.avctx, dnxhd_calc_bits_thread, (void**)&ctx->thread[0], NULL, ctx->m.avctx->thread_count);
         for (y = 0; y < ctx->m.mb_height; y++) {
             for (x = 0; x < ctx->m.mb_width; x++)
                 bits += ctx->mb_rc[qscale][y*ctx->m.mb_width+x].bits;
@@ -679,7 +731,7 @@ static int dnxhd_encode_fast(AVCodecContext *avctx, DNXHDEncContext *ctx)
     }
     if (!ret) {
         if (RC_VARIANCE)
-            avctx->execute(avctx, dnxhd_mb_var_thread, (void**)&ctx->thread[0], NULL, avctx->thread_count, sizeof(void*));
+            avctx->execute(avctx, dnxhd_mb_var_thread, (void**)&ctx->thread[0], NULL, avctx->thread_count);
         qsort(ctx->mb_cmp, ctx->m.mb_num, sizeof(RCEntry), dnxhd_rc_cmp);
         for (x = 0; x < ctx->m.mb_num && max_bits > ctx->frame_bits; x++) {
             int mb = ctx->mb_cmp[x].mb;
@@ -751,7 +803,7 @@ static int dnxhd_encode_picture(AVCodecContext *avctx, unsigned char *buf, int b
         assert(!(ctx->slice_size[i] & 3));
     }
 
-    avctx->execute(avctx, dnxhd_encode_thread, (void**)&ctx->thread[0], NULL, avctx->thread_count, sizeof(void*));
+    avctx->execute(avctx, dnxhd_encode_thread, (void**)&ctx->thread[0], NULL, avctx->thread_count);
 
     AV_WB32(buf + ctx->cid_table->coding_unit_size - 4, 0x600DC0DE); // EOF
 
diff --git a/libavcodec/dnxhdenc.h b/libavcodec/dnxhdenc.h
deleted file mode 100644
index 6f9f647..0000000
--- a/libavcodec/dnxhdenc.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * VC3/DNxHD encoder structure definitions and prototypes
- * Copyright (c) 2007 Baptiste Coudurier <baptiste dot coudurier at smartjog dot com>
- *
- * VC-3 encoder funded by the British Broadcasting Corporation
- *
- * 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
- */
-
-#ifndef AVCODEC_DNXHDENC_H
-#define AVCODEC_DNXHDENC_H
-
-#include <stdint.h>
-#include "libavcodec/mpegvideo.h"
-#include "libavcodec/dnxhddata.h"
-
-typedef struct {
-    uint16_t mb;
-    int value;
-} RCCMPEntry;
-
-typedef struct {
-    int ssd;
-    int bits;
-} RCEntry;
-
-typedef struct DNXHDEncContext {
-    MpegEncContext m; ///< Used for quantization dsp functions
-
-    AVFrame frame;
-    int cid;
-    const CIDEntry *cid_table;
-    uint8_t *msip; ///< Macroblock Scan Indexes Payload
-    uint32_t *slice_size;
-
-    struct DNXHDEncContext *thread[MAX_THREADS];
-
-    unsigned dct_y_offset;
-    unsigned dct_uv_offset;
-    int interlaced;
-    int cur_field;
-
-    DECLARE_ALIGNED_16(DCTELEM, blocks[8][64]);
-
-    int      (*qmatrix_c)     [64];
-    int      (*qmatrix_l)     [64];
-    uint16_t (*qmatrix_l16)[2][64];
-    uint16_t (*qmatrix_c16)[2][64];
-
-    unsigned frame_bits;
-    uint8_t *src[3];
-
-    uint32_t *vlc_codes;
-    uint8_t  *vlc_bits;
-    uint16_t *run_codes;
-    uint8_t  *run_bits;
-
-    /** Rate control */
-    unsigned slice_bits;
-    unsigned qscale;
-    unsigned lambda;
-
-    unsigned thread_size;
-
-    uint16_t *mb_bits;
-    uint8_t  *mb_qscale;
-
-    RCCMPEntry *mb_cmp;
-    RCEntry   (*mb_rc)[8160];
-
-    void (*get_pixels_8x4_sym)(DCTELEM */*align 16*/, const uint8_t *, int);
-} DNXHDEncContext;
-
-void ff_dnxhd_init_mmx(DNXHDEncContext *ctx);
-
-#endif /* AVCODEC_DNXHDENC_H */
diff --git a/libavcodec/dpcm.c b/libavcodec/dpcm.c
index 74ca9ec..ff684ae 100644
--- a/libavcodec/dpcm.c
+++ b/libavcodec/dpcm.c
@@ -268,7 +268,7 @@ static int dpcm_decode_frame(AVCodecContext *avctx,
                 n1 = (buf[in] >> 4) & 0xF;
                 n2 = buf[in++] & 0xF;
                 s->sample[0] += s->sol_table[n1];
-                if (s->sample[0] < 0) s->sample[0] = 0;
+                 if (s->sample[0] < 0) s->sample[0] = 0;
                 if (s->sample[0] > 255) s->sample[0] = 255;
                 output_samples[out++] = (s->sample[0] - 128) << 8;
                 s->sample[s->channels - 1] += s->sol_table[n2];
diff --git a/libavcodec/dsputil.c b/libavcodec/dsputil.c
index 76f5dbb..65d884f 100644
--- a/libavcodec/dsputil.c
+++ b/libavcodec/dsputil.c
@@ -50,9 +50,6 @@ void ff_flac_compute_autocorr(const int32_t *data, int len, int lag, double *aut
 /* pngdec.c */
 void ff_add_png_paeth_prediction(uint8_t *dst, uint8_t *src, uint8_t *top, int w, int bpp);
 
-/* eaidct.c */
-void ff_ea_idct_put_c(uint8_t *dest, int linesize, DCTELEM *block);
-
 uint8_t ff_cropTbl[256 + 2 * MAX_NEG_CROP] = {0, };
 uint32_t ff_squareTbl[512] = {0, };
 
@@ -169,7 +166,7 @@ void ff_init_scantable(uint8_t *permutation, ScanTable *st, const uint8_t *src_s
         int j;
         j = src_scantable[i];
         st->permutated[i] = permutation[j];
-#ifdef ARCH_PPC
+#ifdef ARCH_POWERPC
         st->inverse[j] = i;
 #endif
     }
@@ -2743,27 +2740,6 @@ void ff_intrax8dsp_init(DSPContext* c, AVCodecContext *avctx);
 /* H264 specific */
 void ff_h264dspenc_init(DSPContext* c, AVCodecContext *avctx);
 
-#if defined(CONFIG_RV30_DECODER)
-void ff_rv30dsp_init(DSPContext* c, AVCodecContext *avctx);
-#endif /* CONFIG_RV30_DECODER */
-
-#if defined(CONFIG_RV40_DECODER)
-static void put_rv40_qpel16_mc33_c(uint8_t *dst, uint8_t *src, int stride){
-    put_pixels16_xy2_c(dst, src, stride, 16);
-}
-static void avg_rv40_qpel16_mc33_c(uint8_t *dst, uint8_t *src, int stride){
-    avg_pixels16_xy2_c(dst, src, stride, 16);
-}
-static void put_rv40_qpel8_mc33_c(uint8_t *dst, uint8_t *src, int stride){
-    put_pixels8_xy2_c(dst, src, stride, 8);
-}
-static void avg_rv40_qpel8_mc33_c(uint8_t *dst, uint8_t *src, int stride){
-    avg_pixels8_xy2_c(dst, src, stride, 8);
-}
-
-void ff_rv40dsp_init(DSPContext* c, AVCodecContext *avctx);
-#endif /* CONFIG_RV40_DECODER */
-
 static void wmv2_mspel8_v_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, int w){
     uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;
     int i;
@@ -2991,63 +2967,6 @@ static void h264_h_loop_filter_luma_c(uint8_t *pix, int stride, int alpha, int b
     h264_loop_filter_luma_c(pix, 1, stride, alpha, beta, tc0);
 }
 
-static inline void h264_loop_filter_luma_intra_c(uint8_t *pix, int xstride, int ystride, int alpha, int beta)
-{
-    int d;
-    for( d = 0; d < 16; d++ ) {
-        const int p2 = pix[-3*xstride];
-        const int p1 = pix[-2*xstride];
-        const int p0 = pix[-1*xstride];
-
-        const int q0 = pix[ 0*xstride];
-        const int q1 = pix[ 1*xstride];
-        const int q2 = pix[ 2*xstride];
-
-        if( FFABS( p0 - q0 ) < alpha &&
-            FFABS( p1 - p0 ) < beta &&
-            FFABS( q1 - q0 ) < beta ) {
-
-            if(FFABS( p0 - q0 ) < (( alpha >> 2 ) + 2 )){
-                if( FFABS( p2 - p0 ) < beta)
-                {
-                    const int p3 = pix[-4*xstride];
-                    /* p0', p1', p2' */
-                    pix[-1*xstride] = ( p2 + 2*p1 + 2*p0 + 2*q0 + q1 + 4 ) >> 3;
-                    pix[-2*xstride] = ( p2 + p1 + p0 + q0 + 2 ) >> 2;
-                    pix[-3*xstride] = ( 2*p3 + 3*p2 + p1 + p0 + q0 + 4 ) >> 3;
-                } else {
-                    /* p0' */
-                    pix[-1*xstride] = ( 2*p1 + p0 + q1 + 2 ) >> 2;
-                }
-                if( FFABS( q2 - q0 ) < beta)
-                {
-                    const int q3 = pix[3*xstride];
-                    /* q0', q1', q2' */
-                    pix[0*xstride] = ( p1 + 2*p0 + 2*q0 + 2*q1 + q2 + 4 ) >> 3;
-                    pix[1*xstride] = ( p0 + q0 + q1 + q2 + 2 ) >> 2;
-                    pix[2*xstride] = ( 2*q3 + 3*q2 + q1 + q0 + p0 + 4 ) >> 3;
-                } else {
-                    /* q0' */
-                    pix[0*xstride] = ( 2*q1 + q0 + p1 + 2 ) >> 2;
-                }
-            }else{
-                /* p0', q0' */
-                pix[-1*xstride] = ( 2*p1 + p0 + q1 + 2 ) >> 2;
-                pix[ 0*xstride] = ( 2*q1 + q0 + p1 + 2 ) >> 2;
-            }
-        }
-        pix += ystride;
-    }
-}
-static void h264_v_loop_filter_luma_intra_c(uint8_t *pix, int stride, int alpha, int beta)
-{
-    h264_loop_filter_luma_intra_c(pix, stride, 1, alpha, beta);
-}
-static void h264_h_loop_filter_luma_intra_c(uint8_t *pix, int stride, int alpha, int beta)
-{
-    h264_loop_filter_luma_intra_c(pix, 1, stride, alpha, beta);
-}
-
 static inline void h264_loop_filter_chroma_c(uint8_t *pix, int xstride, int ystride, int alpha, int beta, int8_t *tc0)
 {
     int i, d;
@@ -3481,11 +3400,6 @@ void ff_set_cmp(DSPContext* c, me_cmp_func *cmp, int type){
     }
 }
 
-static void clear_block_c(DCTELEM *block)
-{
-    memset(block, 0, sizeof(DCTELEM)*64);
-}
-
 /**
  * memset(blocks, 0, sizeof(DCTELEM)*6*64)
  */
@@ -4326,9 +4240,6 @@ void dsputil_init(DSPContext* c, AVCodecContext *avctx)
             c->idct_add= ff_faanidct_add;
             c->idct    = ff_faanidct;
             c->idct_permutation_type= FF_NO_IDCT_PERM;
-        }else if(ENABLE_EATGQ_DECODER && avctx->idct_algo==FF_IDCT_EA) {
-            c->idct_put= ff_ea_idct_put_c;
-            c->idct_permutation_type= FF_NO_IDCT_PERM;
         }else{ //accurate/default
             c->idct_put= ff_simple_idct_put;
             c->idct_add= ff_simple_idct_add;
@@ -4342,10 +4253,6 @@ void dsputil_init(DSPContext* c, AVCodecContext *avctx)
         c->h264_idct8_add= ff_h264_idct8_add_c;
         c->h264_idct_dc_add= ff_h264_idct_dc_add_c;
         c->h264_idct8_dc_add= ff_h264_idct8_dc_add_c;
-        c->h264_idct_add16     = ff_h264_idct_add16_c;
-        c->h264_idct8_add4     = ff_h264_idct8_add4_c;
-        c->h264_idct_add8      = ff_h264_idct_add8_c;
-        c->h264_idct_add16intra= ff_h264_idct_add16intra_c;
     }
 
     c->get_pixels = get_pixels_c;
@@ -4358,7 +4265,6 @@ void dsputil_init(DSPContext* c, AVCodecContext *avctx)
     c->sum_abs_dctelem = sum_abs_dctelem_c;
     c->gmc1 = gmc1_c;
     c->gmc = ff_gmc_c;
-    c->clear_block = clear_block_c;
     c->clear_blocks = clear_blocks_c;
     c->pix_sum = pix_sum_c;
     c->pix_norm1 = pix_norm1_c;
@@ -4499,16 +4405,6 @@ void dsputil_init(DSPContext* c, AVCodecContext *avctx)
 #if defined(CONFIG_H264_ENCODER)
     ff_h264dspenc_init(c,avctx);
 #endif
-#if defined(CONFIG_RV30_DECODER)
-    ff_rv30dsp_init(c,avctx);
-#endif
-#if defined(CONFIG_RV40_DECODER)
-    ff_rv40dsp_init(c,avctx);
-    c->put_rv40_qpel_pixels_tab[0][15] = put_rv40_qpel16_mc33_c;
-    c->avg_rv40_qpel_pixels_tab[0][15] = avg_rv40_qpel16_mc33_c;
-    c->put_rv40_qpel_pixels_tab[1][15] = put_rv40_qpel8_mc33_c;
-    c->avg_rv40_qpel_pixels_tab[1][15] = avg_rv40_qpel8_mc33_c;
-#endif
 
     c->put_mspel_pixels_tab[0]= put_mspel8_mc00_c;
     c->put_mspel_pixels_tab[1]= put_mspel8_mc10_c;
@@ -4564,8 +4460,6 @@ void dsputil_init(DSPContext* c, AVCodecContext *avctx)
 
     c->h264_v_loop_filter_luma= h264_v_loop_filter_luma_c;
     c->h264_h_loop_filter_luma= h264_h_loop_filter_luma_c;
-    c->h264_v_loop_filter_luma_intra= h264_v_loop_filter_luma_intra_c;
-    c->h264_h_loop_filter_luma_intra= h264_h_loop_filter_luma_intra_c;
     c->h264_v_loop_filter_chroma= h264_v_loop_filter_chroma_c;
     c->h264_h_loop_filter_chroma= h264_h_loop_filter_chroma_c;
     c->h264_v_loop_filter_chroma_intra= h264_v_loop_filter_chroma_intra_c;
@@ -4624,11 +4518,11 @@ void dsputil_init(DSPContext* c, AVCodecContext *avctx)
     memset(c->avg_2tap_qpel_pixels_tab, 0, sizeof(c->avg_2tap_qpel_pixels_tab));
 
     if (ENABLE_MMX)      dsputil_init_mmx   (c, avctx);
-    if (ENABLE_ARM)      dsputil_init_arm   (c, avctx);
+    if (ENABLE_ARMV4L)   dsputil_init_armv4l(c, avctx);
     if (ENABLE_MLIB)     dsputil_init_mlib  (c, avctx);
     if (ENABLE_VIS)      dsputil_init_vis   (c, avctx);
     if (ENABLE_ALPHA)    dsputil_init_alpha (c, avctx);
-    if (ENABLE_PPC)      dsputil_init_ppc   (c, avctx);
+    if (ENABLE_POWERPC)  dsputil_init_ppc   (c, avctx);
     if (ENABLE_MMI)      dsputil_init_mmi   (c, avctx);
     if (ENABLE_SH4)      dsputil_init_sh4   (c, avctx);
     if (ENABLE_BFIN)     dsputil_init_bfin  (c, avctx);
diff --git a/libavcodec/dsputil.h b/libavcodec/dsputil.h
index 88ed315..9a3acde 100644
--- a/libavcodec/dsputil.h
+++ b/libavcodec/dsputil.h
@@ -60,10 +60,6 @@ void ff_h264_idct8_dc_add_c(uint8_t *dst, DCTELEM *block, int stride);
 void ff_h264_idct_dc_add_c(uint8_t *dst, DCTELEM *block, int stride);
 void ff_h264_lowres_idct_add_c(uint8_t *dst, int stride, DCTELEM *block);
 void ff_h264_lowres_idct_put_c(uint8_t *dst, int stride, DCTELEM *block);
-void ff_h264_idct_add16_c(uint8_t *dst, const int *blockoffset, DCTELEM *block, int stride, const uint8_t nnzc[6*8]);
-void ff_h264_idct_add16intra_c(uint8_t *dst, const int *blockoffset, DCTELEM *block, int stride, const uint8_t nnzc[6*8]);
-void ff_h264_idct8_add4_c(uint8_t *dst, const int *blockoffset, DCTELEM *block, int stride, const uint8_t nnzc[6*8]);
-void ff_h264_idct_add8_c(uint8_t **dest, const int *blockoffset, DCTELEM *block, int stride, const uint8_t nnzc[6*8]);
 
 void ff_vector_fmul_add_add_c(float *dst, const float *src0, const float *src1,
                               const float *src2, int src3, int blocksize, int step);
@@ -173,7 +169,7 @@ typedef struct ScanTable{
     const uint8_t *scantable;
     uint8_t permutated[64];
     uint8_t raster_end[64];
-#ifdef ARCH_PPC
+#ifdef ARCH_POWERPC
                 /** Used by dct_quantize_altivec to find last-non-zero */
     DECLARE_ALIGNED(16, uint8_t, inverse[64]);
 #endif
@@ -207,7 +203,6 @@ typedef struct DSPContext {
      */
     void (*gmc )(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int ox, int oy,
                     int dxx, int dxy, int dyx, int dyy, int shift, int r, int width, int height);
-    void (*clear_block)(DCTELEM *block/*align 16*/);
     void (*clear_blocks)(DCTELEM *blocks/*align 16*/);
     int (*pix_sum)(uint8_t * pix, int line_size);
     int (*pix_norm1)(uint8_t * pix, int line_size);
@@ -351,8 +346,6 @@ typedef struct DSPContext {
     void (*h264_v_loop_filter_luma)(uint8_t *pix/*align 16*/, int stride, int alpha, int beta, int8_t *tc0);
     void (*h264_h_loop_filter_luma)(uint8_t *pix/*align 4 */, int stride, int alpha, int beta, int8_t *tc0);
     /* v/h_loop_filter_luma_intra: align 16 */
-    void (*h264_v_loop_filter_luma_intra)(uint8_t *pix, int stride, int alpha, int beta);
-    void (*h264_h_loop_filter_luma_intra)(uint8_t *pix, int stride, int alpha, int beta);
     void (*h264_v_loop_filter_chroma)(uint8_t *pix/*align 8*/, int stride, int alpha, int beta, int8_t *tc0);
     void (*h264_h_loop_filter_chroma)(uint8_t *pix/*align 4*/, int stride, int alpha, int beta, int8_t *tc0);
     void (*h264_v_loop_filter_chroma_intra)(uint8_t *pix/*align 8*/, int stride, int alpha, int beta);
@@ -442,19 +435,11 @@ typedef struct DSPContext {
 #define EDGE_WIDTH 16
 
     /* h264 functions */
-    /* NOTE!!! if you implement any of h264_idct8_add, h264_idct8_add4 then you must implement all of them
-       NOTE!!! if you implement any of h264_idct_add, h264_idct_add16, h264_idct_add16intra, h264_idct_add8 then you must implement all of them
-        The reason for above, is that no 2 out of one list may use a different permutation.
-    */
     void (*h264_idct_add)(uint8_t *dst/*align 4*/, DCTELEM *block/*align 16*/, int stride);
     void (*h264_idct8_add)(uint8_t *dst/*align 8*/, DCTELEM *block/*align 16*/, int stride);
     void (*h264_idct_dc_add)(uint8_t *dst/*align 4*/, DCTELEM *block/*align 16*/, int stride);
     void (*h264_idct8_dc_add)(uint8_t *dst/*align 8*/, DCTELEM *block/*align 16*/, int stride);
     void (*h264_dct)(DCTELEM block[4][4]);
-    void (*h264_idct_add16)(uint8_t *dst/*align 16*/, const int *blockoffset, DCTELEM *block/*align 16*/, int stride, const uint8_t nnzc[6*8]);
-    void (*h264_idct8_add4)(uint8_t *dst/*align 16*/, const int *blockoffset, DCTELEM *block/*align 16*/, int stride, const uint8_t nnzc[6*8]);
-    void (*h264_idct_add8)(uint8_t **dst/*align 16*/, const int *blockoffset, DCTELEM *block/*align 16*/, int stride, const uint8_t nnzc[6*8]);
-    void (*h264_idct_add16intra)(uint8_t *dst/*align 16*/, const int *blockoffset, DCTELEM *block/*align 16*/, int stride, const uint8_t nnzc[6*8]);
 
     /* snow wavelet */
     void (*vertical_compose97i)(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2, IDWTELEM *b3, IDWTELEM *b4, IDWTELEM *b5, int width);
@@ -499,16 +484,6 @@ typedef struct DSPContext {
      * @param shift number of bits to discard from product
      */
     int32_t (*scalarproduct_int16)(int16_t *v1, int16_t *v2/*align 16*/, int len, int shift);
-
-    /* rv30 functions */
-    qpel_mc_func put_rv30_tpel_pixels_tab[4][16];
-    qpel_mc_func avg_rv30_tpel_pixels_tab[4][16];
-
-    /* rv40 functions */
-    qpel_mc_func put_rv40_qpel_pixels_tab[4][16];
-    qpel_mc_func avg_rv40_qpel_pixels_tab[4][16];
-    h264_chroma_mc_func put_rv40_chroma_pixels_tab[3];
-    h264_chroma_mc_func avg_rv40_chroma_pixels_tab[3];
 } DSPContext;
 
 void dsputil_static_init(void);
@@ -572,7 +547,7 @@ static inline int get_penalty_factor(int lambda, int lambda2, int type){
 int mm_support(void);
 
 void dsputil_init_alpha(DSPContext* c, AVCodecContext *avctx);
-void dsputil_init_arm(DSPContext* c, AVCodecContext *avctx);
+void dsputil_init_armv4l(DSPContext* c, AVCodecContext *avctx);
 void dsputil_init_bfin(DSPContext* c, AVCodecContext *avctx);
 void dsputil_init_mlib(DSPContext* c, AVCodecContext *avctx);
 void dsputil_init_mmi(DSPContext* c, AVCodecContext *avctx);
@@ -607,7 +582,7 @@ static inline void emms(void)
 
 void dsputil_init_pix_mmx(DSPContext* c, AVCodecContext *avctx);
 
-#elif defined(ARCH_ARM)
+#elif defined(ARCH_ARMV4L)
 
 extern int mm_flags;
 
@@ -616,7 +591,7 @@ extern int mm_flags;
 #   define STRIDE_ALIGN 16
 #endif
 
-#elif defined(ARCH_PPC)
+#elif defined(ARCH_POWERPC)
 
 extern int mm_flags;
 
diff --git a/libavcodec/dv.c b/libavcodec/dv.c
index e3f54b8..f208fd9 100644
--- a/libavcodec/dv.c
+++ b/libavcodec/dv.c
@@ -54,12 +54,23 @@ typedef struct DVVideoContext {
     uint8_t         *buf;
 
     uint8_t  dv_zigzag[2][64];
+    uint32_t dv_idct_factor[2][2][22][64];
+    uint32_t dv100_idct_factor[4][4][16][64];
 
     void (*get_pixels)(DCTELEM *block, const uint8_t *pixels, int line_size);
     void (*fdct[2])(DCTELEM *block);
     void (*idct_put[2])(uint8_t *dest, int line_size, DCTELEM *block);
 } DVVideoContext;
 
+/**
+ * MultiThreading - dv_anchor applies to entire DV codec, not just the avcontext
+ * one element is needed for each video segment in a DV frame
+ * at most there are 4 DIF channels * 12 DIF sequences * 27 video segments (1080i50)
+ */
+#define DV_ANCHOR_SIZE (4*12*27)
+
+static void* dv_anchor[DV_ANCHOR_SIZE];
+
 #define TEX_VLC_BITS 9
 
 #if ENABLE_SMALL
@@ -78,192 +89,39 @@ static struct dv_vlc_pair {
    uint8_t  size;
 } dv_vlc_map[DV_VLC_MAP_RUN_SIZE][DV_VLC_MAP_LEV_SIZE];
 
-static inline int dv_work_pool_size(const DVprofile *d)
+static void dv_build_unquantize_tables(DVVideoContext *s, uint8_t* perm)
 {
-    int size = d->n_difchan*d->difseg_size*27;
-    if (DV_PROFILE_IS_1080i50(d))
-        size -= 3*27;
-    if (DV_PROFILE_IS_720p50(d))
-        size -= 4*27;
-    return size;
-}
-
-static inline void dv_calc_mb_coordinates(const DVprofile *d, int chan, int seq, int slot,
-                                          uint16_t *tbl)
-{
-    const static uint8_t off[] = { 2, 6, 8, 0, 4 };
-    const static uint8_t shuf1[] = { 36, 18, 54, 0, 72 };
-    const static uint8_t shuf2[] = { 24, 12, 36, 0, 48 };
-    const static uint8_t shuf3[] = { 18, 9, 27, 0, 36 };
-
-    const static uint8_t l_start[] = {0, 4, 9, 13, 18, 22, 27, 31, 36, 40};
-    const static uint8_t l_start_shuffled[] = { 9, 4, 13, 0, 18 };
-
-    const static uint8_t serpent1[] = {0, 1, 2, 2, 1, 0,
-                                       0, 1, 2, 2, 1, 0,
-                                       0, 1, 2, 2, 1, 0,
-                                       0, 1, 2, 2, 1, 0,
-                                       0, 1, 2};
-    const static uint8_t serpent2[] = {0, 1, 2, 3, 4, 5, 5, 4, 3, 2, 1, 0,
-                                       0, 1, 2, 3, 4, 5, 5, 4, 3, 2, 1, 0,
-                                       0, 1, 2, 3, 4, 5};
-
-    const static uint8_t remap[][2] = {{ 0, 0}, { 0, 0}, { 0, 0}, { 0, 0}, /* dummy */
-                                       { 0, 0}, { 0, 1}, { 0, 2}, { 0, 3}, {10, 0},
-                                       {10, 1}, {10, 2}, {10, 3}, {20, 0}, {20, 1},
-                                       {20, 2}, {20, 3}, {30, 0}, {30, 1}, {30, 2},
-                                       {30, 3}, {40, 0}, {40, 1}, {40, 2}, {40, 3},
-                                       {50, 0}, {50, 1}, {50, 2}, {50, 3}, {60, 0},
-                                       {60, 1}, {60, 2}, {60, 3}, {70, 0}, {70, 1},
-                                       {70, 2}, {70, 3}, { 0,64}, { 0,65}, { 0,66},
-                                       {10,64}, {10,65}, {10,66}, {20,64}, {20,65},
-                                       {20,66}, {30,64}, {30,65}, {30,66}, {40,64},
-                                       {40,65}, {40,66}, {50,64}, {50,65}, {50,66},
-                                       {60,64}, {60,65}, {60,66}, {70,64}, {70,65},
-                                       {70,66}, { 0,67}, {20,67}, {40,67}, {60,67}};
-
-    int i, k, m;
-    int x, y, blk;
-
-    for (m=0; m<5; m++) {
-         switch (d->width) {
-         case 1440:
-              blk = (chan*11+seq)*27+slot;
-
-              if (chan == 0 && seq == 11) {
-                  x = m*27+slot;
-                  if (x<90) {
-                      y = 0;
-                  } else {
-                      x = (x - 90)*2;
-                      y = 67;
-                  }
-              } else {
-                  i = (4*chan + blk + off[m])%11;
-                  k = (blk/11)%27;
-
-                  x = shuf1[m] + (chan&1)*9 + k%9;
-                  y = (i*3+k/9)*2 + (chan>>1) + 1;
-              }
-              tbl[m] = (x<<1)|(y<<9);
-              break;
-         case 1280:
-              blk = (chan*10+seq)*27+slot;
-
-              i = (4*chan + (seq/5) + 2*blk + off[m])%10;
-              k = (blk/5)%27;
-
-              x = shuf1[m]+(chan&1)*9 + k%9;
-              y = (i*3+k/9)*2 + (chan>>1) + 4;
-
-              if (x >= 80) {
-                  x = remap[y][0]+((x-80)<<(y>59));
-                  y = remap[y][1];
-              }
-              tbl[m] = (x<<1)|(y<<9);
-              break;
-       case 960:
-              blk = (chan*10+seq)*27+slot;
-
-              i = (4*chan + (seq/5) + 2*blk + off[m])%10;
-              k = (blk/5)%27 + (i&1)*3;
-
-              x = shuf2[m] + k%6 + 6*(chan&1);
-              y = l_start[i] + k/6 + 45*(chan>>1);
-              tbl[m] = (x<<1)|(y<<9);
-              break;
-        case 720:
-              switch (d->pix_fmt) {
-              case PIX_FMT_YUV422P:
-                   x = shuf3[m] + slot/3;
-                   y = serpent1[slot] +
-                       ((((seq + off[m]) % d->difseg_size)<<1) + chan)*3;
-                   tbl[m] = (x<<1)|(y<<8);
-                   break;
-              case PIX_FMT_YUV420P:
-                   x = shuf3[m] + slot/3;
-                   y = serpent1[slot] +
-                       ((seq + off[m]) % d->difseg_size)*3;
-                   tbl[m] = (x<<1)|(y<<9);
-                   break;
-              case PIX_FMT_YUV411P:
-                   i = (seq + off[m]) % d->difseg_size;
-                   k = slot + ((m==1||m==2)?3:0);
-
-                   x = l_start_shuffled[m] + k/6;
-                   y = serpent2[k] + i*6;
-                   if (x>21)
-                       y = y*2 - i*6;
-                   tbl[m] = (x<<2)|(y<<8);
-                   break;
-              }
-        default:
-              break;
-        }
-    }
-}
-
-static int dv_init_dynamic_tables(const DVprofile *d)
-{
-    int j,i,c,s,p;
-    uint32_t *factor1, *factor2;
-    const int *iweight1, *iweight2;
-
-    if (!d->work_chunks[dv_work_pool_size(d)-1].buf_offset) {
-        p = i = 0;
-        for (c=0; c<d->n_difchan; c++) {
-            for (s=0; s<d->difseg_size; s++) {
-                p += 6;
-                for (j=0; j<27; j++) {
-                    p += !(j%3);
-                    if (!(DV_PROFILE_IS_1080i50(d) && c != 0 && s == 11) &&
-                        !(DV_PROFILE_IS_720p50(d) && s > 9)) {
-                          dv_calc_mb_coordinates(d, c, s, j, &d->work_chunks[i].mb_coordinates[0]);
-                          d->work_chunks[i++].buf_offset = p;
-                    }
-                    p += 5;
-                }
+    int i, q, a;
+
+    /* NOTE: max left shift is 6 */
+    for (q = 0; q < 22; q++) {
+        /* 88DCT */
+        i = 1;
+        for (a = 0; a < 4; a++) {
+            for (; i < dv_quant_areas[a]; i++) {
+                /* 88 table */
+                s->dv_idct_factor[0][0][q][i] = dv_iweight_88[i] << (dv_quant_shifts[q][a] + 1);
+                s->dv_idct_factor[1][0][q][i] = s->dv_idct_factor[0][0][q][i] << 1;
+
+                /* 248 table */
+                s->dv_idct_factor[0][1][q][i] = dv_iweight_248[i] << (dv_quant_shifts[q][a] + 1);
+                s->dv_idct_factor[1][1][q][i] = s->dv_idct_factor[0][1][q][i] << 1;
             }
         }
     }
 
-    if (!d->idct_factor[DV_PROFILE_IS_HD(d)?8191:5631]) {
-        factor1 = &d->idct_factor[0];
-        factor2 = &d->idct_factor[DV_PROFILE_IS_HD(d)?4096:2816];
-        if (d->height == 720) {
-            iweight1 = &dv_iweight_720_y[0];
-            iweight2 = &dv_iweight_720_c[0];
-        } else {
-            iweight1 = &dv_iweight_1080_y[0];
-            iweight2 = &dv_iweight_1080_c[0];
-            }
-        if (DV_PROFILE_IS_HD(d)) {
-            for (c = 0; c < 4; c++) {
-                for (s = 0; s < 16; s++) {
-                    for (i = 0; i < 64; i++) {
-                        *factor1++ = (dv100_qstep[s] << (c + 9)) * iweight1[i];
-                        *factor2++ = (dv100_qstep[s] << (c + 9)) * iweight2[i];
-                    }
-                }
-            }
-        } else {
-            iweight1 = &dv_iweight_88[0];
-            for (j = 0; j < 2; j++, iweight1 = &dv_iweight_248[0]) {
-                for (s = 0; s < 22; s++) {
-                    for (i = c = 0; c < 4; c++) {
-                        for (; i < dv_quant_areas[c]; i++) {
-                            *factor1   = iweight1[i] << (dv_quant_shifts[s][c] + 1);
-                            *factor2++ = (*factor1++) << 1;
-        }
-    }
+    for (a = 0; a < 4; a++) {
+        for (q = 0; q < 16; q++) {
+            for (i = 1; i < 64; i++) {
+                s->dv100_idct_factor[0][a][q][i] = (dv100_qstep[q] << (a + 9)) * dv_iweight_1080_y[i];
+                s->dv100_idct_factor[1][a][q][i] = (dv100_qstep[q] << (a + 9)) * dv_iweight_1080_c[i];
+                s->dv100_idct_factor[2][a][q][i] = (dv100_qstep[q] << (a + 9)) * dv_iweight_720_y[i];
+                s->dv100_idct_factor[3][a][q][i] = (dv100_qstep[q] << (a + 9)) * dv_iweight_720_c[i];
             }
         }
     }
 }
 
-    return 0;
-}
-
 static av_cold int dvvideo_init(AVCodecContext *avctx)
 {
     DVVideoContext *s = avctx->priv_data;
@@ -280,6 +138,10 @@ static av_cold int dvvideo_init(AVCodecContext *avctx)
 
         done = 1;
 
+        /* dv_anchor lets each thread know its ID */
+        for (i = 0; i < DV_ANCHOR_SIZE; i++)
+            dv_anchor[i] = (void*)(size_t)i;
+
         /* it's faster to include sign bit in a generic VLC parsing scheme */
         for (i = 0, j = 0; i < NB_DV_VLC; i++, j++) {
             new_dv_vlc_bits[j]  = dv_vlc_bits[i];
@@ -387,6 +249,9 @@ static av_cold int dvvideo_init(AVCodecContext *avctx)
     }else
         memcpy(s->dv_zigzag[1], ff_zigzag248_direct, 64);
 
+    /* XXX: do it only for constant case */
+    dv_build_unquantize_tables(s, dsp.idct_permutation);
+
     avctx->coded_frame = &s->picture;
     s->avctx = avctx;
 
@@ -495,23 +360,13 @@ static inline void bit_copy(PutBitContext *pb, GetBitContext *gb)
     }
 }
 
-static inline void dv_calculate_mb_xy(DVVideoContext *s, DVwork_chunk *work_chunk, int m, int *mb_x, int *mb_y)
-{
-     *mb_x = work_chunk->mb_coordinates[m] & 0xff;
-     *mb_y = work_chunk->mb_coordinates[m] >> 8;
-
-     /* We work with 720p frames split in half. The odd half-frame (chan==2,3) is displaced :-( */
-     if (s->sys->height == 720 && !(s->buf[1]&0x0C)) {
-         *mb_y -= (*mb_y>17)?18:-72; /* shifting the Y coordinate down by 72/2 macro blocks */
-     }
-}
-
 /* mb_x and mb_y are in units of 8 pixels */
-static int dv_decode_video_segment(AVCodecContext *avctx, DVwork_chunk *work_chunk)
+static inline void dv_decode_video_segment(DVVideoContext *s,
+                                           const uint8_t  *buf_ptr1,
+                                           const uint16_t *mb_pos_ptr)
 {
-    DVVideoContext *s = avctx->priv_data;
     int quant, dc, dct_mode, class1, j;
-    int mb_index, mb_x, mb_y, last_index;
+    int mb_index, mb_x, mb_y, v, last_index;
     int y_stride, linesize;
     DCTELEM *block, *block1;
     int c_offset;
@@ -532,7 +387,7 @@ static int dv_decode_video_segment(AVCodecContext *avctx, DVwork_chunk *work_chu
     memset(sblock, 0, sizeof(sblock));
 
     /* pass 1 : read DC and AC coefficients in blocks */
-    buf_ptr = &s->buf[work_chunk->buf_offset*80];
+    buf_ptr = buf_ptr1;
     block1  = &sblock[0][0];
     mb1     = mb_data;
     init_put_bits(&vs_pb, vs_bit_buffer, 5 * 80);
@@ -555,13 +410,13 @@ static int dv_decode_video_segment(AVCodecContext *avctx, DVwork_chunk *work_chu
             if (DV_PROFILE_IS_HD(s->sys)) {
                 mb->idct_put     = s->idct_put[0];
                 mb->scan_table   = s->dv_zigzag[0];
-                mb->factor_table = &s->sys->idct_factor[(j >= 4)*4*16*64 + class1*16*64 + quant*64];
+                mb->factor_table = s->dv100_idct_factor[((s->sys->height == 720) << 1) | (j >= 4)][class1][quant];
                 is_field_mode[mb_index] |= !j && dct_mode;
             } else {
                 mb->idct_put     = s->idct_put[dct_mode && log2_blocksize == 3];
                 mb->scan_table   = s->dv_zigzag[dct_mode];
-                mb->factor_table = &s->sys->idct_factor[(class1 == 3)*2*22*64 + dct_mode*22*64 +
-                                                        (quant + dv_quant_offset[class1])*64];
+                mb->factor_table = s->dv_idct_factor[class1 == 3][dct_mode]
+                    [quant + dv_quant_offset[class1]];
             }
             dc = dc << 2;
             /* convert to unsigned because 128 is not added in the
@@ -635,7 +490,13 @@ static int dv_decode_video_segment(AVCodecContext *avctx, DVwork_chunk *work_chu
     block = &sblock[0][0];
     mb    = mb_data;
     for (mb_index = 0; mb_index < 5; mb_index++) {
-        dv_calculate_mb_xy(s, work_chunk, mb_index, &mb_x, &mb_y);
+        v = *mb_pos_ptr++;
+        mb_x = v & 0xff;
+        mb_y = v >> 8;
+        /* We work with 720p frames split in half. The odd half-frame (chan==2,3) is displaced :-( */
+        if (s->sys->height == 720 && !(s->buf[1] & 0x0C)) {
+               mb_y -= (mb_y > 17) ? 18 : -72; /* shifting the Y coordinate down by 72/2 macroblocks */
+        }
 
         /* idct_put'ting luminance */
         if ((s->sys->pix_fmt == PIX_FMT_YUV420P) ||
@@ -689,7 +550,6 @@ static int dv_decode_video_segment(AVCodecContext *avctx, DVwork_chunk *work_chu
             }
         }
     }
-    return 0;
 }
 
 #if ENABLE_SMALL
@@ -971,15 +831,15 @@ static inline void dv_guess_qnos(EncBlockInfo* blks, int* qnos)
     }
 }
 
-static int dv_encode_video_segment(AVCodecContext *avctx, DVwork_chunk *work_chunk)
+static inline void dv_encode_video_segment(DVVideoContext *s,
+                                           uint8_t *dif,
+                                           const uint16_t *mb_pos_ptr)
 {
-    DVVideoContext *s = avctx->priv_data;
-    int mb_index, i, j;
+    int mb_index, i, j, v;
     int mb_x, mb_y, c_offset, linesize;
     uint8_t*  y_ptr;
     uint8_t*  data;
     uint8_t*  ptr;
-    uint8_t*  dif;
     int       do_edge_wrap;
     DECLARE_ALIGNED_16(DCTELEM, block[64]);
     EncBlockInfo  enc_blks[5*6];
@@ -991,11 +851,12 @@ static int dv_encode_video_segment(AVCodecContext *avctx, DVwork_chunk *work_chu
 
     assert((((int)block) & 15) == 0);
 
-    dif = &s->buf[work_chunk->buf_offset*80];
     enc_blk = &enc_blks[0];
     pb = &pbs[0];
     for (mb_index = 0; mb_index < 5; mb_index++) {
-        dv_calculate_mb_xy(s, work_chunk, mb_index, &mb_x, &mb_y);
+        v        = *mb_pos_ptr++;
+        mb_x     = v & 0xff;
+        mb_y     = v >> 8;
         y_ptr    = s->picture.data[0] + ((mb_y * s->picture.linesize[0] + mb_x) << 3);
         c_offset = (((mb_y >>  (s->sys->pix_fmt == PIX_FMT_YUV420P)) * s->picture.linesize[1] +
                      (mb_x >> ((s->sys->pix_fmt == PIX_FMT_YUV411P) ? 2 : 1))) << 3);
@@ -1119,9 +980,59 @@ static int dv_encode_video_segment(AVCodecContext *avctx, DVwork_chunk *work_chu
 
     for (j = 0; j < 5 * 6; j++)
        flush_put_bits(&pbs[j]);
+}
+
+static int dv_decode_mt(AVCodecContext *avctx, void* sl)
+{
+    DVVideoContext *s = avctx->priv_data;
+    int slice = (size_t)sl;
+
+    /* which DIF channel is this? */
+    int chan = slice / (s->sys->difseg_size * 27);
 
+    /* slice within the DIF channel */
+    int chan_slice = slice % (s->sys->difseg_size * 27);
+
+    /* byte offset of this channel's data */
+    int chan_offset = chan * s->sys->difseg_size * 150 * 80;
+
+    /* DIF sequence */
+    int seq = chan_slice / 27;
+
+    /* in 1080i50 and 720p50 some seq are unused */
+    if ((DV_PROFILE_IS_1080i50(s->sys) && chan != 0 && seq == 11) ||
+        (DV_PROFILE_IS_720p50(s->sys) && seq > 9))
+        return 0;
+
+    dv_decode_video_segment(s, &s->buf[(seq * 6 + (chan_slice / 3)
+                                        + chan_slice * 5 + 7)
+                                       * 80 + chan_offset],
+                            &s->sys->video_place[slice * 5]);
+    return 0;
+}
+
+#ifdef CONFIG_DVVIDEO_ENCODER
+static int dv_encode_mt(AVCodecContext *avctx, void* sl)
+{
+    DVVideoContext *s = avctx->priv_data;
+    int slice = (size_t)sl;
+
+    /* which DIF channel is this? */
+    int chan = slice / (s->sys->difseg_size * 27);
+
+    /* slice within the DIF channel */
+    int chan_slice = slice % (s->sys->difseg_size * 27);
+
+    /* byte offset of this channel's data */
+    int chan_offset = chan * s->sys->difseg_size * 150 * 80;
+
+    dv_encode_video_segment(s, &s->buf[((chan_slice / 27) * 6 + (chan_slice / 3)
+                                         + chan_slice * 5 + 7)
+                                       * 80 + chan_offset],
+                            &s->sys->video_place[slice * 5]);
     return 0;
 }
+#endif
 
 #ifdef CONFIG_DVVIDEO_DECODER
 /* NOTE: exactly one frame must be given (120000 bytes for NTSC,
@@ -1133,7 +1044,7 @@ static int dvvideo_decode_frame(AVCodecContext *avctx,
     DVVideoContext *s = avctx->priv_data;
 
     s->sys = dv_frame_profile(buf);
-    if (!s->sys || buf_size < s->sys->frame_size || dv_init_dynamic_tables(s->sys))
+    if (!s->sys || buf_size < s->sys->frame_size)
         return -1; /* NOTE: we only accept several full frames */
 
     if (s->picture.data[0])
@@ -1153,8 +1064,8 @@ static int dvvideo_decode_frame(AVCodecContext *avctx,
     s->picture.top_field_first  = 0;
 
     s->buf = buf;
-    avctx->execute(avctx, dv_decode_video_segment, s->sys->work_chunks, NULL,
-                   dv_work_pool_size(s->sys), sizeof(DVwork_chunk));
+    avctx->execute(avctx, dv_decode_mt, (void**)&dv_anchor[0], NULL,
+                   s->sys->n_difchan * s->sys->difseg_size * 27);
 
     emms_c();
 
@@ -1297,7 +1208,9 @@ static int dvvideo_encode_frame(AVCodecContext *c, uint8_t *buf, int buf_size,
     DVVideoContext *s = c->priv_data;
 
     s->sys = dv_codec_profile(c);
-    if (!s->sys || buf_size < s->sys->frame_size || dv_init_dynamic_tables(s->sys))
+    if (!s->sys)
+        return -1;
+    if (buf_size < s->sys->frame_size)
         return -1;
 
     c->pix_fmt           = s->sys->pix_fmt;
@@ -1306,8 +1219,8 @@ static int dvvideo_encode_frame(AVCodecContext *c, uint8_t *buf, int buf_size,
     s->picture.pict_type = FF_I_TYPE;
 
     s->buf = buf;
-    c->execute(c, dv_encode_video_segment, s->sys->work_chunks, NULL,
-               dv_work_pool_size(s->sys), sizeof(DVwork_chunk));
+    c->execute(c, dv_encode_mt, (void**)&dv_anchor[0], NULL,
+               s->sys->n_difchan * s->sys->difseg_size * 27);
 
     emms_c();
 
diff --git a/libavcodec/dvbsub.c b/libavcodec/dvbsub.c
index ed548e2..d7cb2c4 100644
--- a/libavcodec/dvbsub.c
+++ b/libavcodec/dvbsub.c
@@ -228,8 +228,8 @@ static int encode_dvb_subtitles(DVBSubtitleContext *s,
     for (region_id = 0; region_id < h->num_rects; region_id++) {
         *q++ = region_id;
         *q++ = 0xff; /* reserved */
-        bytestream_put_be16(&q, h->rects[region_id]->x); /* left pos */
-        bytestream_put_be16(&q, h->rects[region_id]->y); /* top pos */
+        bytestream_put_be16(&q, h->rects[region_id].x); /* left pos */
+        bytestream_put_be16(&q, h->rects[region_id].y); /* top pos */
     }
 
     bytestream_put_be16(&pseg_len, q - pseg_len - 2);
@@ -239,10 +239,10 @@ static int encode_dvb_subtitles(DVBSubtitleContext *s,
 
             /* CLUT segment */
 
-            if (h->rects[clut_id]->nb_colors <= 4) {
+            if (h->rects[clut_id].nb_colors <= 4) {
                 /* 2 bpp, some decoders do not support it correctly */
                 bpp_index = 0;
-            } else if (h->rects[clut_id]->nb_colors <= 16) {
+            } else if (h->rects[clut_id].nb_colors <= 16) {
                 /* 4 bpp, standard encoding */
                 bpp_index = 1;
             } else {
@@ -257,16 +257,15 @@ static int encode_dvb_subtitles(DVBSubtitleContext *s,
             *q++ = clut_id;
             *q++ = (0 << 4) | 0xf; /* version = 0 */
 
-            for(i = 0; i < h->rects[clut_id]->nb_colors; i++) {
+            for(i = 0; i < h->rects[clut_id].nb_colors; i++) {
                 *q++ = i; /* clut_entry_id */
                 *q++ = (1 << (7 - bpp_index)) | (0xf << 1) | 1; /* 2 bits/pixel full range */
                 {
                     int a, r, g, b;
-                    uint32_t x= ((uint32_t*)h->rects[clut_id]->pict.data[1])[i];
-                    a = (x >> 24) & 0xff;
-                    r = (x >> 16) & 0xff;
-                    g = (x >>  8) & 0xff;
-                    b = (x >>  0) & 0xff;
+                    a = (h->rects[clut_id].rgba_palette[i] >> 24) & 0xff;
+                    r = (h->rects[clut_id].rgba_palette[i] >> 16) & 0xff;
+                    g = (h->rects[clut_id].rgba_palette[i] >> 8) & 0xff;
+                    b = (h->rects[clut_id].rgba_palette[i] >> 0) & 0xff;
 
                     *q++ = RGB_TO_Y_CCIR(r, g, b);
                     *q++ = RGB_TO_V_CCIR(r, g, b, 0);
@@ -283,10 +282,10 @@ static int encode_dvb_subtitles(DVBSubtitleContext *s,
 
         /* region composition segment */
 
-        if (h->rects[region_id]->nb_colors <= 4) {
+        if (h->rects[region_id].nb_colors <= 4) {
             /* 2 bpp, some decoders do not support it correctly */
             bpp_index = 0;
-        } else if (h->rects[region_id]->nb_colors <= 16) {
+        } else if (h->rects[region_id].nb_colors <= 16) {
             /* 4 bpp, standard encoding */
             bpp_index = 1;
         } else {
@@ -300,8 +299,8 @@ static int encode_dvb_subtitles(DVBSubtitleContext *s,
         q += 2; /* segment length */
         *q++ = region_id;
         *q++ = (s->object_version << 4) | (0 << 3) | 0x07; /* version , no fill */
-        bytestream_put_be16(&q, h->rects[region_id]->w); /* region width */
-        bytestream_put_be16(&q, h->rects[region_id]->h); /* region height */
+        bytestream_put_be16(&q, h->rects[region_id].w); /* region width */
+        bytestream_put_be16(&q, h->rects[region_id].h); /* region height */
         *q++ = ((1 + bpp_index) << 5) | ((1 + bpp_index) << 2) | 0x03;
         *q++ = region_id; /* clut_id == region_id */
         *q++ = 0; /* 8 bit fill colors */
@@ -323,10 +322,10 @@ static int encode_dvb_subtitles(DVBSubtitleContext *s,
         for (object_id = 0; object_id < h->num_rects; object_id++) {
             /* Object Data segment */
 
-            if (h->rects[object_id]->nb_colors <= 4) {
+            if (h->rects[object_id].nb_colors <= 4) {
                 /* 2 bpp, some decoders do not support it correctly */
                 bpp_index = 0;
-            } else if (h->rects[object_id]->nb_colors <= 16) {
+            } else if (h->rects[object_id].nb_colors <= 16) {
                 /* 4 bpp, standard encoding */
                 bpp_index = 1;
             } else {
@@ -359,12 +358,12 @@ static int encode_dvb_subtitles(DVBSubtitleContext *s,
                     dvb_encode_rle = dvb_encode_rle4;
 
                 top_ptr = q;
-                dvb_encode_rle(&q, h->rects[object_id]->pict.data[0], h->rects[object_id]->w * 2,
-                                    h->rects[object_id]->w, h->rects[object_id]->h >> 1);
+                dvb_encode_rle(&q, h->rects[object_id].bitmap, h->rects[object_id].w * 2,
+                                    h->rects[object_id].w, h->rects[object_id].h >> 1);
                 bottom_ptr = q;
-                dvb_encode_rle(&q, h->rects[object_id]->pict.data[0] + h->rects[object_id]->w,
-                                    h->rects[object_id]->w * 2, h->rects[object_id]->w,
-                                    h->rects[object_id]->h >> 1);
+                dvb_encode_rle(&q, h->rects[object_id].bitmap + h->rects[object_id].w,
+                                    h->rects[object_id].w * 2, h->rects[object_id].w,
+                                    h->rects[object_id].h >> 1);
 
                 bytestream_put_be16(&ptop_field_len, bottom_ptr - top_ptr);
                 bytestream_put_be16(&pbottom_field_len, q - bottom_ptr);
diff --git a/libavcodec/dvbsubdec.c b/libavcodec/dvbsubdec.c
index 689c068..3f47c1b 100644
--- a/libavcodec/dvbsubdec.c
+++ b/libavcodec/dvbsubdec.c
@@ -1285,17 +1285,14 @@ static int dvbsub_display_end_segment(AVCodecContext *avctx, const uint8_t *buf,
 
     sub->num_rects = ctx->display_list_size;
 
-    if (sub->num_rects > 0){
-        sub->rects = av_mallocz(sizeof(*sub->rects) * sub->num_rects);
-        for(i=0; i<sub->num_rects; i++)
-            sub->rects[i] = av_mallocz(sizeof(*sub->rects[i]));
-    }
+    if (sub->num_rects > 0)
+        sub->rects = av_mallocz(sizeof(AVSubtitleRect) * sub->num_rects);
 
     i = 0;
 
     for (display = ctx->display_list; display; display = display->next) {
         region = get_region(ctx, display->region_id);
-        rect = sub->rects[i];
+        rect = &sub->rects[i];
 
         if (!region)
             continue;
@@ -1305,7 +1302,7 @@ static int dvbsub_display_end_segment(AVCodecContext *avctx, const uint8_t *buf,
         rect->w = region->width;
         rect->h = region->height;
         rect->nb_colors = 16;
-        rect->pict.linesize[0] = region->width;
+        rect->linesize = region->width;
 
         clut = get_clut(ctx, region->clut);
 
@@ -1325,11 +1322,11 @@ static int dvbsub_display_end_segment(AVCodecContext *avctx, const uint8_t *buf,
             break;
         }
 
-        rect->pict.data[1] = av_malloc((1 << region->depth) * sizeof(uint32_t));
-        memcpy(rect->pict.data[1], clut_table, (1 << region->depth) * sizeof(uint32_t));
+        rect->rgba_palette = av_malloc((1 << region->depth) * sizeof(uint32_t));
+        memcpy(rect->rgba_palette, clut_table, (1 << region->depth) * sizeof(uint32_t));
 
-        rect->pict.data[0] = av_malloc(region->buf_size);
-        memcpy(rect->pict.data[0], region->pbuf, region->buf_size);
+        rect->bitmap = av_malloc(region->buf_size);
+        memcpy(rect->bitmap, region->pbuf, region->buf_size);
 
         i++;
     }
diff --git a/libavcodec/dvdata.h b/libavcodec/dvdata.h
index f53fbea..e762c41 100644
--- a/libavcodec/dvdata.h
+++ b/libavcodec/dvdata.h
@@ -30,11 +30,6 @@
 #include "libavutil/rational.h"
 #include "avcodec.h"
 
-typedef struct DVwork_chunk {
-    uint16_t  buf_offset;
-    uint16_t  mb_coordinates[5];
-} DVwork_chunk;
-
 /*
  * DVprofile is used to express the differences between various
  * DV flavors. For now it's primarily used for differentiating
@@ -52,8 +47,7 @@ typedef struct DVprofile {
     int              height;                /* picture height in pixels */
     int              width;                 /* picture width in pixels */
     AVRational       sar[2];                /* sample aspect ratios for 4:3 and 16:9 */
-    DVwork_chunk    *work_chunks;           /* each thread gets its own chunk of frame to work on */
-    uint32_t        *idct_factor;           /* set of iDCT factor tables */
+    const uint16_t  *video_place;           /* positions of all DV macroblocks */
     enum PixelFormat pix_fmt;               /* picture pixel format */
     int              bpm;                   /* blocks per macroblock */
     const uint8_t   *block_sizes;           /* AC block sizes, in bits */
@@ -328,6 +322,5711 @@ static const uint8_t dv100_qstep[16] = {
     2, 3, 4, 5, 6, 7, 8, 16, 18, 20, 22, 24, 28, 52
 };
 
+/* NOTE: I prefer hardcoding the positioning of DV blocks, it is
+   simpler :-) */
+
+static const uint16_t dv_place_420[1620] = {
+ 0x0c24, 0x2412, 0x3036, 0x0000, 0x1848,
+ 0x0e24, 0x2612, 0x3236, 0x0200, 0x1a48,
+ 0x1024, 0x2812, 0x3436, 0x0400, 0x1c48,
+ 0x1026, 0x2814, 0x3438, 0x0402, 0x1c4a,
+ 0x0e26, 0x2614, 0x3238, 0x0202, 0x1a4a,
+ 0x0c26, 0x2414, 0x3038, 0x0002, 0x184a,
+ 0x0c28, 0x2416, 0x303a, 0x0004, 0x184c,
+ 0x0e28, 0x2616, 0x323a, 0x0204, 0x1a4c,
+ 0x1028, 0x2816, 0x343a, 0x0404, 0x1c4c,
+ 0x102a, 0x2818, 0x343c, 0x0406, 0x1c4e,
+ 0x0e2a, 0x2618, 0x323c, 0x0206, 0x1a4e,
+ 0x0c2a, 0x2418, 0x303c, 0x0006, 0x184e,
+ 0x0c2c, 0x241a, 0x303e, 0x0008, 0x1850,
+ 0x0e2c, 0x261a, 0x323e, 0x0208, 0x1a50,
+ 0x102c, 0x281a, 0x343e, 0x0408, 0x1c50,
+ 0x102e, 0x281c, 0x3440, 0x040a, 0x1c52,
+ 0x0e2e, 0x261c, 0x3240, 0x020a, 0x1a52,
+ 0x0c2e, 0x241c, 0x3040, 0x000a, 0x1852,
+ 0x0c30, 0x241e, 0x3042, 0x000c, 0x1854,
+ 0x0e30, 0x261e, 0x3242, 0x020c, 0x1a54,
+ 0x1030, 0x281e, 0x3442, 0x040c, 0x1c54,
+ 0x1032, 0x2820, 0x3444, 0x040e, 0x1c56,
+ 0x0e32, 0x2620, 0x3244, 0x020e, 0x1a56,
+ 0x0c32, 0x2420, 0x3044, 0x000e, 0x1856,
+ 0x0c34, 0x2422, 0x3046, 0x0010, 0x1858,
+ 0x0e34, 0x2622, 0x3246, 0x0210, 0x1a58,
+ 0x1034, 0x2822, 0x3446, 0x0410, 0x1c58,
+ 0x1224, 0x2a12, 0x3636, 0x0600, 0x1e48,
+ 0x1424, 0x2c12, 0x3836, 0x0800, 0x2048,
+ 0x1624, 0x2e12, 0x3a36, 0x0a00, 0x2248,
+ 0x1626, 0x2e14, 0x3a38, 0x0a02, 0x224a,
+ 0x1426, 0x2c14, 0x3838, 0x0802, 0x204a,
+ 0x1226, 0x2a14, 0x3638, 0x0602, 0x1e4a,
+ 0x1228, 0x2a16, 0x363a, 0x0604, 0x1e4c,
+ 0x1428, 0x2c16, 0x383a, 0x0804, 0x204c,
+ 0x1628, 0x2e16, 0x3a3a, 0x0a04, 0x224c,
+ 0x162a, 0x2e18, 0x3a3c, 0x0a06, 0x224e,
+ 0x142a, 0x2c18, 0x383c, 0x0806, 0x204e,
+ 0x122a, 0x2a18, 0x363c, 0x0606, 0x1e4e,
+ 0x122c, 0x2a1a, 0x363e, 0x0608, 0x1e50,
+ 0x142c, 0x2c1a, 0x383e, 0x0808, 0x2050,
+ 0x162c, 0x2e1a, 0x3a3e, 0x0a08, 0x2250,
+ 0x162e, 0x2e1c, 0x3a40, 0x0a0a, 0x2252,
+ 0x142e, 0x2c1c, 0x3840, 0x080a, 0x2052,
+ 0x122e, 0x2a1c, 0x3640, 0x060a, 0x1e52,
+ 0x1230, 0x2a1e, 0x3642, 0x060c, 0x1e54,
+ 0x1430, 0x2c1e, 0x3842, 0x080c, 0x2054,
+ 0x1630, 0x2e1e, 0x3a42, 0x0a0c, 0x2254,
+ 0x1632, 0x2e20, 0x3a44, 0x0a0e, 0x2256,
+ 0x1432, 0x2c20, 0x3844, 0x080e, 0x2056,
+ 0x1232, 0x2a20, 0x3644, 0x060e, 0x1e56,
+ 0x1234, 0x2a22, 0x3646, 0x0610, 0x1e58,
+ 0x1434, 0x2c22, 0x3846, 0x0810, 0x2058,
+ 0x1634, 0x2e22, 0x3a46, 0x0a10, 0x2258,
+ 0x1824, 0x3012, 0x3c36, 0x0c00, 0x2448,
+ 0x1a24, 0x3212, 0x3e36, 0x0e00, 0x2648,
+ 0x1c24, 0x3412, 0x4036, 0x1000, 0x2848,
+ 0x1c26, 0x3414, 0x4038, 0x1002, 0x284a,
+ 0x1a26, 0x3214, 0x3e38, 0x0e02, 0x264a,
+ 0x1826, 0x3014, 0x3c38, 0x0c02, 0x244a,
+ 0x1828, 0x3016, 0x3c3a, 0x0c04, 0x244c,
+ 0x1a28, 0x3216, 0x3e3a, 0x0e04, 0x264c,
+ 0x1c28, 0x3416, 0x403a, 0x1004, 0x284c,
+ 0x1c2a, 0x3418, 0x403c, 0x1006, 0x284e,
+ 0x1a2a, 0x3218, 0x3e3c, 0x0e06, 0x264e,
+ 0x182a, 0x3018, 0x3c3c, 0x0c06, 0x244e,
+ 0x182c, 0x301a, 0x3c3e, 0x0c08, 0x2450,
+ 0x1a2c, 0x321a, 0x3e3e, 0x0e08, 0x2650,
+ 0x1c2c, 0x341a, 0x403e, 0x1008, 0x2850,
+ 0x1c2e, 0x341c, 0x4040, 0x100a, 0x2852,
+ 0x1a2e, 0x321c, 0x3e40, 0x0e0a, 0x2652,
+ 0x182e, 0x301c, 0x3c40, 0x0c0a, 0x2452,
+ 0x1830, 0x301e, 0x3c42, 0x0c0c, 0x2454,
+ 0x1a30, 0x321e, 0x3e42, 0x0e0c, 0x2654,
+ 0x1c30, 0x341e, 0x4042, 0x100c, 0x2854,
+ 0x1c32, 0x3420, 0x4044, 0x100e, 0x2856,
+ 0x1a32, 0x3220, 0x3e44, 0x0e0e, 0x2656,
+ 0x1832, 0x3020, 0x3c44, 0x0c0e, 0x2456,
+ 0x1834, 0x3022, 0x3c46, 0x0c10, 0x2458,
+ 0x1a34, 0x3222, 0x3e46, 0x0e10, 0x2658,
+ 0x1c34, 0x3422, 0x4046, 0x1010, 0x2858,
+ 0x1e24, 0x3612, 0x4236, 0x1200, 0x2a48,
+ 0x2024, 0x3812, 0x4436, 0x1400, 0x2c48,
+ 0x2224, 0x3a12, 0x4636, 0x1600, 0x2e48,
+ 0x2226, 0x3a14, 0x4638, 0x1602, 0x2e4a,
+ 0x2026, 0x3814, 0x4438, 0x1402, 0x2c4a,
+ 0x1e26, 0x3614, 0x4238, 0x1202, 0x2a4a,
+ 0x1e28, 0x3616, 0x423a, 0x1204, 0x2a4c,
+ 0x2028, 0x3816, 0x443a, 0x1404, 0x2c4c,
+ 0x2228, 0x3a16, 0x463a, 0x1604, 0x2e4c,
+ 0x222a, 0x3a18, 0x463c, 0x1606, 0x2e4e,
+ 0x202a, 0x3818, 0x443c, 0x1406, 0x2c4e,
+ 0x1e2a, 0x3618, 0x423c, 0x1206, 0x2a4e,
+ 0x1e2c, 0x361a, 0x423e, 0x1208, 0x2a50,
+ 0x202c, 0x381a, 0x443e, 0x1408, 0x2c50,
+ 0x222c, 0x3a1a, 0x463e, 0x1608, 0x2e50,
+ 0x222e, 0x3a1c, 0x4640, 0x160a, 0x2e52,
+ 0x202e, 0x381c, 0x4440, 0x140a, 0x2c52,
+ 0x1e2e, 0x361c, 0x4240, 0x120a, 0x2a52,
+ 0x1e30, 0x361e, 0x4242, 0x120c, 0x2a54,
+ 0x2030, 0x381e, 0x4442, 0x140c, 0x2c54,
+ 0x2230, 0x3a1e, 0x4642, 0x160c, 0x2e54,
+ 0x2232, 0x3a20, 0x4644, 0x160e, 0x2e56,
+ 0x2032, 0x3820, 0x4444, 0x140e, 0x2c56,
+ 0x1e32, 0x3620, 0x4244, 0x120e, 0x2a56,
+ 0x1e34, 0x3622, 0x4246, 0x1210, 0x2a58,
+ 0x2034, 0x3822, 0x4446, 0x1410, 0x2c58,
+ 0x2234, 0x3a22, 0x4646, 0x1610, 0x2e58,
+ 0x2424, 0x3c12, 0x0036, 0x1800, 0x3048,
+ 0x2624, 0x3e12, 0x0236, 0x1a00, 0x3248,
+ 0x2824, 0x4012, 0x0436, 0x1c00, 0x3448,
+ 0x2826, 0x4014, 0x0438, 0x1c02, 0x344a,
+ 0x2626, 0x3e14, 0x0238, 0x1a02, 0x324a,
+ 0x2426, 0x3c14, 0x0038, 0x1802, 0x304a,
+ 0x2428, 0x3c16, 0x003a, 0x1804, 0x304c,
+ 0x2628, 0x3e16, 0x023a, 0x1a04, 0x324c,
+ 0x2828, 0x4016, 0x043a, 0x1c04, 0x344c,
+ 0x282a, 0x4018, 0x043c, 0x1c06, 0x344e,
+ 0x262a, 0x3e18, 0x023c, 0x1a06, 0x324e,
+ 0x242a, 0x3c18, 0x003c, 0x1806, 0x304e,
+ 0x242c, 0x3c1a, 0x003e, 0x1808, 0x3050,
+ 0x262c, 0x3e1a, 0x023e, 0x1a08, 0x3250,
+ 0x282c, 0x401a, 0x043e, 0x1c08, 0x3450,
+ 0x282e, 0x401c, 0x0440, 0x1c0a, 0x3452,
+ 0x262e, 0x3e1c, 0x0240, 0x1a0a, 0x3252,
+ 0x242e, 0x3c1c, 0x0040, 0x180a, 0x3052,
+ 0x2430, 0x3c1e, 0x0042, 0x180c, 0x3054,
+ 0x2630, 0x3e1e, 0x0242, 0x1a0c, 0x3254,
+ 0x2830, 0x401e, 0x0442, 0x1c0c, 0x3454,
+ 0x2832, 0x4020, 0x0444, 0x1c0e, 0x3456,
+ 0x2632, 0x3e20, 0x0244, 0x1a0e, 0x3256,
+ 0x2432, 0x3c20, 0x0044, 0x180e, 0x3056,
+ 0x2434, 0x3c22, 0x0046, 0x1810, 0x3058,
+ 0x2634, 0x3e22, 0x0246, 0x1a10, 0x3258,
+ 0x2834, 0x4022, 0x0446, 0x1c10, 0x3458,
+ 0x2a24, 0x4212, 0x0636, 0x1e00, 0x3648,
+ 0x2c24, 0x4412, 0x0836, 0x2000, 0x3848,
+ 0x2e24, 0x4612, 0x0a36, 0x2200, 0x3a48,
+ 0x2e26, 0x4614, 0x0a38, 0x2202, 0x3a4a,
+ 0x2c26, 0x4414, 0x0838, 0x2002, 0x384a,
+ 0x2a26, 0x4214, 0x0638, 0x1e02, 0x364a,
+ 0x2a28, 0x4216, 0x063a, 0x1e04, 0x364c,
+ 0x2c28, 0x4416, 0x083a, 0x2004, 0x384c,
+ 0x2e28, 0x4616, 0x0a3a, 0x2204, 0x3a4c,
+ 0x2e2a, 0x4618, 0x0a3c, 0x2206, 0x3a4e,
+ 0x2c2a, 0x4418, 0x083c, 0x2006, 0x384e,
+ 0x2a2a, 0x4218, 0x063c, 0x1e06, 0x364e,
+ 0x2a2c, 0x421a, 0x063e, 0x1e08, 0x3650,
+ 0x2c2c, 0x441a, 0x083e, 0x2008, 0x3850,
+ 0x2e2c, 0x461a, 0x0a3e, 0x2208, 0x3a50,
+ 0x2e2e, 0x461c, 0x0a40, 0x220a, 0x3a52,
+ 0x2c2e, 0x441c, 0x0840, 0x200a, 0x3852,
+ 0x2a2e, 0x421c, 0x0640, 0x1e0a, 0x3652,
+ 0x2a30, 0x421e, 0x0642, 0x1e0c, 0x3654,
+ 0x2c30, 0x441e, 0x0842, 0x200c, 0x3854,
+ 0x2e30, 0x461e, 0x0a42, 0x220c, 0x3a54,
+ 0x2e32, 0x4620, 0x0a44, 0x220e, 0x3a56,
+ 0x2c32, 0x4420, 0x0844, 0x200e, 0x3856,
+ 0x2a32, 0x4220, 0x0644, 0x1e0e, 0x3656,
+ 0x2a34, 0x4222, 0x0646, 0x1e10, 0x3658,
+ 0x2c34, 0x4422, 0x0846, 0x2010, 0x3858,
+ 0x2e34, 0x4622, 0x0a46, 0x2210, 0x3a58,
+ 0x3024, 0x0012, 0x0c36, 0x2400, 0x3c48,
+ 0x3224, 0x0212, 0x0e36, 0x2600, 0x3e48,
+ 0x3424, 0x0412, 0x1036, 0x2800, 0x4048,
+ 0x3426, 0x0414, 0x1038, 0x2802, 0x404a,
+ 0x3226, 0x0214, 0x0e38, 0x2602, 0x3e4a,
+ 0x3026, 0x0014, 0x0c38, 0x2402, 0x3c4a,
+ 0x3028, 0x0016, 0x0c3a, 0x2404, 0x3c4c,
+ 0x3228, 0x0216, 0x0e3a, 0x2604, 0x3e4c,
+ 0x3428, 0x0416, 0x103a, 0x2804, 0x404c,
+ 0x342a, 0x0418, 0x103c, 0x2806, 0x404e,
+ 0x322a, 0x0218, 0x0e3c, 0x2606, 0x3e4e,
+ 0x302a, 0x0018, 0x0c3c, 0x2406, 0x3c4e,
+ 0x302c, 0x001a, 0x0c3e, 0x2408, 0x3c50,
+ 0x322c, 0x021a, 0x0e3e, 0x2608, 0x3e50,
+ 0x342c, 0x041a, 0x103e, 0x2808, 0x4050,
+ 0x342e, 0x041c, 0x1040, 0x280a, 0x4052,
+ 0x322e, 0x021c, 0x0e40, 0x260a, 0x3e52,
+ 0x302e, 0x001c, 0x0c40, 0x240a, 0x3c52,
+ 0x3030, 0x001e, 0x0c42, 0x240c, 0x3c54,
+ 0x3230, 0x021e, 0x0e42, 0x260c, 0x3e54,
+ 0x3430, 0x041e, 0x1042, 0x280c, 0x4054,
+ 0x3432, 0x0420, 0x1044, 0x280e, 0x4056,
+ 0x3232, 0x0220, 0x0e44, 0x260e, 0x3e56,
+ 0x3032, 0x0020, 0x0c44, 0x240e, 0x3c56,
+ 0x3034, 0x0022, 0x0c46, 0x2410, 0x3c58,
+ 0x3234, 0x0222, 0x0e46, 0x2610, 0x3e58,
+ 0x3434, 0x0422, 0x1046, 0x2810, 0x4058,
+ 0x3624, 0x0612, 0x1236, 0x2a00, 0x4248,
+ 0x3824, 0x0812, 0x1436, 0x2c00, 0x4448,
+ 0x3a24, 0x0a12, 0x1636, 0x2e00, 0x4648,
+ 0x3a26, 0x0a14, 0x1638, 0x2e02, 0x464a,
+ 0x3826, 0x0814, 0x1438, 0x2c02, 0x444a,
+ 0x3626, 0x0614, 0x1238, 0x2a02, 0x424a,
+ 0x3628, 0x0616, 0x123a, 0x2a04, 0x424c,
+ 0x3828, 0x0816, 0x143a, 0x2c04, 0x444c,
+ 0x3a28, 0x0a16, 0x163a, 0x2e04, 0x464c,
+ 0x3a2a, 0x0a18, 0x163c, 0x2e06, 0x464e,
+ 0x382a, 0x0818, 0x143c, 0x2c06, 0x444e,
+ 0x362a, 0x0618, 0x123c, 0x2a06, 0x424e,
+ 0x362c, 0x061a, 0x123e, 0x2a08, 0x4250,
+ 0x382c, 0x081a, 0x143e, 0x2c08, 0x4450,
+ 0x3a2c, 0x0a1a, 0x163e, 0x2e08, 0x4650,
+ 0x3a2e, 0x0a1c, 0x1640, 0x2e0a, 0x4652,
+ 0x382e, 0x081c, 0x1440, 0x2c0a, 0x4452,
+ 0x362e, 0x061c, 0x1240, 0x2a0a, 0x4252,
+ 0x3630, 0x061e, 0x1242, 0x2a0c, 0x4254,
+ 0x3830, 0x081e, 0x1442, 0x2c0c, 0x4454,
+ 0x3a30, 0x0a1e, 0x1642, 0x2e0c, 0x4654,
+ 0x3a32, 0x0a20, 0x1644, 0x2e0e, 0x4656,
+ 0x3832, 0x0820, 0x1444, 0x2c0e, 0x4456,
+ 0x3632, 0x0620, 0x1244, 0x2a0e, 0x4256,
+ 0x3634, 0x0622, 0x1246, 0x2a10, 0x4258,
+ 0x3834, 0x0822, 0x1446, 0x2c10, 0x4458,
+ 0x3a34, 0x0a22, 0x1646, 0x2e10, 0x4658,
+ 0x3c24, 0x0c12, 0x1836, 0x3000, 0x0048,
+ 0x3e24, 0x0e12, 0x1a36, 0x3200, 0x0248,
+ 0x4024, 0x1012, 0x1c36, 0x3400, 0x0448,
+ 0x4026, 0x1014, 0x1c38, 0x3402, 0x044a,
+ 0x3e26, 0x0e14, 0x1a38, 0x3202, 0x024a,
+ 0x3c26, 0x0c14, 0x1838, 0x3002, 0x004a,
+ 0x3c28, 0x0c16, 0x183a, 0x3004, 0x004c,
+ 0x3e28, 0x0e16, 0x1a3a, 0x3204, 0x024c,
+ 0x4028, 0x1016, 0x1c3a, 0x3404, 0x044c,
+ 0x402a, 0x1018, 0x1c3c, 0x3406, 0x044e,
+ 0x3e2a, 0x0e18, 0x1a3c, 0x3206, 0x024e,
+ 0x3c2a, 0x0c18, 0x183c, 0x3006, 0x004e,
+ 0x3c2c, 0x0c1a, 0x183e, 0x3008, 0x0050,
+ 0x3e2c, 0x0e1a, 0x1a3e, 0x3208, 0x0250,
+ 0x402c, 0x101a, 0x1c3e, 0x3408, 0x0450,
+ 0x402e, 0x101c, 0x1c40, 0x340a, 0x0452,
+ 0x3e2e, 0x0e1c, 0x1a40, 0x320a, 0x0252,
+ 0x3c2e, 0x0c1c, 0x1840, 0x300a, 0x0052,
+ 0x3c30, 0x0c1e, 0x1842, 0x300c, 0x0054,
+ 0x3e30, 0x0e1e, 0x1a42, 0x320c, 0x0254,
+ 0x4030, 0x101e, 0x1c42, 0x340c, 0x0454,
+ 0x4032, 0x1020, 0x1c44, 0x340e, 0x0456,
+ 0x3e32, 0x0e20, 0x1a44, 0x320e, 0x0256,
+ 0x3c32, 0x0c20, 0x1844, 0x300e, 0x0056,
+ 0x3c34, 0x0c22, 0x1846, 0x3010, 0x0058,
+ 0x3e34, 0x0e22, 0x1a46, 0x3210, 0x0258,
+ 0x4034, 0x1022, 0x1c46, 0x3410, 0x0458,
+ 0x4224, 0x1212, 0x1e36, 0x3600, 0x0648,
+ 0x4424, 0x1412, 0x2036, 0x3800, 0x0848,
+ 0x4624, 0x1612, 0x2236, 0x3a00, 0x0a48,
+ 0x4626, 0x1614, 0x2238, 0x3a02, 0x0a4a,
+ 0x4426, 0x1414, 0x2038, 0x3802, 0x084a,
+ 0x4226, 0x1214, 0x1e38, 0x3602, 0x064a,
+ 0x4228, 0x1216, 0x1e3a, 0x3604, 0x064c,
+ 0x4428, 0x1416, 0x203a, 0x3804, 0x084c,
+ 0x4628, 0x1616, 0x223a, 0x3a04, 0x0a4c,
+ 0x462a, 0x1618, 0x223c, 0x3a06, 0x0a4e,
+ 0x442a, 0x1418, 0x203c, 0x3806, 0x084e,
+ 0x422a, 0x1218, 0x1e3c, 0x3606, 0x064e,
+ 0x422c, 0x121a, 0x1e3e, 0x3608, 0x0650,
+ 0x442c, 0x141a, 0x203e, 0x3808, 0x0850,
+ 0x462c, 0x161a, 0x223e, 0x3a08, 0x0a50,
+ 0x462e, 0x161c, 0x2240, 0x3a0a, 0x0a52,
+ 0x442e, 0x141c, 0x2040, 0x380a, 0x0852,
+ 0x422e, 0x121c, 0x1e40, 0x360a, 0x0652,
+ 0x4230, 0x121e, 0x1e42, 0x360c, 0x0654,
+ 0x4430, 0x141e, 0x2042, 0x380c, 0x0854,
+ 0x4630, 0x161e, 0x2242, 0x3a0c, 0x0a54,
+ 0x4632, 0x1620, 0x2244, 0x3a0e, 0x0a56,
+ 0x4432, 0x1420, 0x2044, 0x380e, 0x0856,
+ 0x4232, 0x1220, 0x1e44, 0x360e, 0x0656,
+ 0x4234, 0x1222, 0x1e46, 0x3610, 0x0658,
+ 0x4434, 0x1422, 0x2046, 0x3810, 0x0858,
+ 0x4634, 0x1622, 0x2246, 0x3a10, 0x0a58,
+ 0x0024, 0x1812, 0x2436, 0x3c00, 0x0c48,
+ 0x0224, 0x1a12, 0x2636, 0x3e00, 0x0e48,
+ 0x0424, 0x1c12, 0x2836, 0x4000, 0x1048,
+ 0x0426, 0x1c14, 0x2838, 0x4002, 0x104a,
+ 0x0226, 0x1a14, 0x2638, 0x3e02, 0x0e4a,
+ 0x0026, 0x1814, 0x2438, 0x3c02, 0x0c4a,
+ 0x0028, 0x1816, 0x243a, 0x3c04, 0x0c4c,
+ 0x0228, 0x1a16, 0x263a, 0x3e04, 0x0e4c,
+ 0x0428, 0x1c16, 0x283a, 0x4004, 0x104c,
+ 0x042a, 0x1c18, 0x283c, 0x4006, 0x104e,
+ 0x022a, 0x1a18, 0x263c, 0x3e06, 0x0e4e,
+ 0x002a, 0x1818, 0x243c, 0x3c06, 0x0c4e,
+ 0x002c, 0x181a, 0x243e, 0x3c08, 0x0c50,
+ 0x022c, 0x1a1a, 0x263e, 0x3e08, 0x0e50,
+ 0x042c, 0x1c1a, 0x283e, 0x4008, 0x1050,
+ 0x042e, 0x1c1c, 0x2840, 0x400a, 0x1052,
+ 0x022e, 0x1a1c, 0x2640, 0x3e0a, 0x0e52,
+ 0x002e, 0x181c, 0x2440, 0x3c0a, 0x0c52,
+ 0x0030, 0x181e, 0x2442, 0x3c0c, 0x0c54,
+ 0x0230, 0x1a1e, 0x2642, 0x3e0c, 0x0e54,
+ 0x0430, 0x1c1e, 0x2842, 0x400c, 0x1054,
+ 0x0432, 0x1c20, 0x2844, 0x400e, 0x1056,
+ 0x0232, 0x1a20, 0x2644, 0x3e0e, 0x0e56,
+ 0x0032, 0x1820, 0x2444, 0x3c0e, 0x0c56,
+ 0x0034, 0x1822, 0x2446, 0x3c10, 0x0c58,
+ 0x0234, 0x1a22, 0x2646, 0x3e10, 0x0e58,
+ 0x0434, 0x1c22, 0x2846, 0x4010, 0x1058,
+ 0x0624, 0x1e12, 0x2a36, 0x4200, 0x1248,
+ 0x0824, 0x2012, 0x2c36, 0x4400, 0x1448,
+ 0x0a24, 0x2212, 0x2e36, 0x4600, 0x1648,
+ 0x0a26, 0x2214, 0x2e38, 0x4602, 0x164a,
+ 0x0826, 0x2014, 0x2c38, 0x4402, 0x144a,
+ 0x0626, 0x1e14, 0x2a38, 0x4202, 0x124a,
+ 0x0628, 0x1e16, 0x2a3a, 0x4204, 0x124c,
+ 0x0828, 0x2016, 0x2c3a, 0x4404, 0x144c,
+ 0x0a28, 0x2216, 0x2e3a, 0x4604, 0x164c,
+ 0x0a2a, 0x2218, 0x2e3c, 0x4606, 0x164e,
+ 0x082a, 0x2018, 0x2c3c, 0x4406, 0x144e,
+ 0x062a, 0x1e18, 0x2a3c, 0x4206, 0x124e,
+ 0x062c, 0x1e1a, 0x2a3e, 0x4208, 0x1250,
+ 0x082c, 0x201a, 0x2c3e, 0x4408, 0x1450,
+ 0x0a2c, 0x221a, 0x2e3e, 0x4608, 0x1650,
+ 0x0a2e, 0x221c, 0x2e40, 0x460a, 0x1652,
+ 0x082e, 0x201c, 0x2c40, 0x440a, 0x1452,
+ 0x062e, 0x1e1c, 0x2a40, 0x420a, 0x1252,
+ 0x0630, 0x1e1e, 0x2a42, 0x420c, 0x1254,
+ 0x0830, 0x201e, 0x2c42, 0x440c, 0x1454,
+ 0x0a30, 0x221e, 0x2e42, 0x460c, 0x1654,
+ 0x0a32, 0x2220, 0x2e44, 0x460e, 0x1656,
+ 0x0832, 0x2020, 0x2c44, 0x440e, 0x1456,
+ 0x0632, 0x1e20, 0x2a44, 0x420e, 0x1256,
+ 0x0634, 0x1e22, 0x2a46, 0x4210, 0x1258,
+ 0x0834, 0x2022, 0x2c46, 0x4410, 0x1458,
+ 0x0a34, 0x2222, 0x2e46, 0x4610, 0x1658,
+};
+
+static const uint16_t dv_place_411P[1620] = {
+ 0x0c24, 0x2710, 0x3334, 0x0000, 0x1848,
+ 0x0d24, 0x2810, 0x3434, 0x0100, 0x1948,
+ 0x0e24, 0x2910, 0x3534, 0x0200, 0x1a48,
+ 0x0f24, 0x2914, 0x3538, 0x0300, 0x1b48,
+ 0x1024, 0x2814, 0x3438, 0x0400, 0x1c48,
+ 0x1124, 0x2714, 0x3338, 0x0500, 0x1d48,
+ 0x1128, 0x2614, 0x3238, 0x0504, 0x1d4c,
+ 0x1028, 0x2514, 0x3138, 0x0404, 0x1c4c,
+ 0x0f28, 0x2414, 0x3038, 0x0304, 0x1b4c,
+ 0x0e28, 0x2418, 0x303c, 0x0204, 0x1a4c,
+ 0x0d28, 0x2518, 0x313c, 0x0104, 0x194c,
+ 0x0c28, 0x2618, 0x323c, 0x0004, 0x184c,
+ 0x0c2c, 0x2718, 0x333c, 0x0008, 0x1850,
+ 0x0d2c, 0x2818, 0x343c, 0x0108, 0x1950,
+ 0x0e2c, 0x2918, 0x353c, 0x0208, 0x1a50,
+ 0x0f2c, 0x291c, 0x3540, 0x0308, 0x1b50,
+ 0x102c, 0x281c, 0x3440, 0x0408, 0x1c50,
+ 0x112c, 0x271c, 0x3340, 0x0508, 0x1d50,
+ 0x1130, 0x261c, 0x3240, 0x050c, 0x1d54,
+ 0x1030, 0x251c, 0x3140, 0x040c, 0x1c54,
+ 0x0f30, 0x241c, 0x3040, 0x030c, 0x1b54,
+ 0x0e30, 0x2420, 0x3044, 0x020c, 0x1a54,
+ 0x0d30, 0x2520, 0x3144, 0x010c, 0x1954,
+ 0x0c30, 0x2620, 0x3244, 0x000c, 0x1854,
+ 0x0c34, 0x2720, 0x3344, 0x0010, 0x1858,
+ 0x0d34, 0x2820, 0x3444, 0x0110, 0x1a58,
+ 0x0e34, 0x2920, 0x3544, 0x0210, 0x1c58,
+ 0x1224, 0x2d10, 0x3934, 0x0600, 0x1e48,
+ 0x1324, 0x2e10, 0x3a34, 0x0700, 0x1f48,
+ 0x1424, 0x2f10, 0x3b34, 0x0800, 0x2048,
+ 0x1524, 0x2f14, 0x3b38, 0x0900, 0x2148,
+ 0x1624, 0x2e14, 0x3a38, 0x0a00, 0x2248,
+ 0x1724, 0x2d14, 0x3938, 0x0b00, 0x2348,
+ 0x1728, 0x2c14, 0x3838, 0x0b04, 0x234c,
+ 0x1628, 0x2b14, 0x3738, 0x0a04, 0x224c,
+ 0x1528, 0x2a14, 0x3638, 0x0904, 0x214c,
+ 0x1428, 0x2a18, 0x363c, 0x0804, 0x204c,
+ 0x1328, 0x2b18, 0x373c, 0x0704, 0x1f4c,
+ 0x1228, 0x2c18, 0x383c, 0x0604, 0x1e4c,
+ 0x122c, 0x2d18, 0x393c, 0x0608, 0x1e50,
+ 0x132c, 0x2e18, 0x3a3c, 0x0708, 0x1f50,
+ 0x142c, 0x2f18, 0x3b3c, 0x0808, 0x2050,
+ 0x152c, 0x2f1c, 0x3b40, 0x0908, 0x2150,
+ 0x162c, 0x2e1c, 0x3a40, 0x0a08, 0x2250,
+ 0x172c, 0x2d1c, 0x3940, 0x0b08, 0x2350,
+ 0x1730, 0x2c1c, 0x3840, 0x0b0c, 0x2354,
+ 0x1630, 0x2b1c, 0x3740, 0x0a0c, 0x2254,
+ 0x1530, 0x2a1c, 0x3640, 0x090c, 0x2154,
+ 0x1430, 0x2a20, 0x3644, 0x080c, 0x2054,
+ 0x1330, 0x2b20, 0x3744, 0x070c, 0x1f54,
+ 0x1230, 0x2c20, 0x3844, 0x060c, 0x1e54,
+ 0x1234, 0x2d20, 0x3944, 0x0610, 0x1e58,
+ 0x1334, 0x2e20, 0x3a44, 0x0710, 0x2058,
+ 0x1434, 0x2f20, 0x3b44, 0x0810, 0x2258,
+ 0x1824, 0x3310, 0x3f34, 0x0c00, 0x2448,
+ 0x1924, 0x3410, 0x4034, 0x0d00, 0x2548,
+ 0x1a24, 0x3510, 0x4134, 0x0e00, 0x2648,
+ 0x1b24, 0x3514, 0x4138, 0x0f00, 0x2748,
+ 0x1c24, 0x3414, 0x4038, 0x1000, 0x2848,
+ 0x1d24, 0x3314, 0x3f38, 0x1100, 0x2948,
+ 0x1d28, 0x3214, 0x3e38, 0x1104, 0x294c,
+ 0x1c28, 0x3114, 0x3d38, 0x1004, 0x284c,
+ 0x1b28, 0x3014, 0x3c38, 0x0f04, 0x274c,
+ 0x1a28, 0x3018, 0x3c3c, 0x0e04, 0x264c,
+ 0x1928, 0x3118, 0x3d3c, 0x0d04, 0x254c,
+ 0x1828, 0x3218, 0x3e3c, 0x0c04, 0x244c,
+ 0x182c, 0x3318, 0x3f3c, 0x0c08, 0x2450,
+ 0x192c, 0x3418, 0x403c, 0x0d08, 0x2550,
+ 0x1a2c, 0x3518, 0x413c, 0x0e08, 0x2650,
+ 0x1b2c, 0x351c, 0x4140, 0x0f08, 0x2750,
+ 0x1c2c, 0x341c, 0x4040, 0x1008, 0x2850,
+ 0x1d2c, 0x331c, 0x3f40, 0x1108, 0x2950,
+ 0x1d30, 0x321c, 0x3e40, 0x110c, 0x2954,
+ 0x1c30, 0x311c, 0x3d40, 0x100c, 0x2854,
+ 0x1b30, 0x301c, 0x3c40, 0x0f0c, 0x2754,
+ 0x1a30, 0x3020, 0x3c44, 0x0e0c, 0x2654,
+ 0x1930, 0x3120, 0x3d44, 0x0d0c, 0x2554,
+ 0x1830, 0x3220, 0x3e44, 0x0c0c, 0x2454,
+ 0x1834, 0x3320, 0x3f44, 0x0c10, 0x2458,
+ 0x1934, 0x3420, 0x4044, 0x0d10, 0x2658,
+ 0x1a34, 0x3520, 0x4144, 0x0e10, 0x2858,
+ 0x1e24, 0x3910, 0x4534, 0x1200, 0x2a48,
+ 0x1f24, 0x3a10, 0x4634, 0x1300, 0x2b48,
+ 0x2024, 0x3b10, 0x4734, 0x1400, 0x2c48,
+ 0x2124, 0x3b14, 0x4738, 0x1500, 0x2d48,
+ 0x2224, 0x3a14, 0x4638, 0x1600, 0x2e48,
+ 0x2324, 0x3914, 0x4538, 0x1700, 0x2f48,
+ 0x2328, 0x3814, 0x4438, 0x1704, 0x2f4c,
+ 0x2228, 0x3714, 0x4338, 0x1604, 0x2e4c,
+ 0x2128, 0x3614, 0x4238, 0x1504, 0x2d4c,
+ 0x2028, 0x3618, 0x423c, 0x1404, 0x2c4c,
+ 0x1f28, 0x3718, 0x433c, 0x1304, 0x2b4c,
+ 0x1e28, 0x3818, 0x443c, 0x1204, 0x2a4c,
+ 0x1e2c, 0x3918, 0x453c, 0x1208, 0x2a50,
+ 0x1f2c, 0x3a18, 0x463c, 0x1308, 0x2b50,
+ 0x202c, 0x3b18, 0x473c, 0x1408, 0x2c50,
+ 0x212c, 0x3b1c, 0x4740, 0x1508, 0x2d50,
+ 0x222c, 0x3a1c, 0x4640, 0x1608, 0x2e50,
+ 0x232c, 0x391c, 0x4540, 0x1708, 0x2f50,
+ 0x2330, 0x381c, 0x4440, 0x170c, 0x2f54,
+ 0x2230, 0x371c, 0x4340, 0x160c, 0x2e54,
+ 0x2130, 0x361c, 0x4240, 0x150c, 0x2d54,
+ 0x2030, 0x3620, 0x4244, 0x140c, 0x2c54,
+ 0x1f30, 0x3720, 0x4344, 0x130c, 0x2b54,
+ 0x1e30, 0x3820, 0x4444, 0x120c, 0x2a54,
+ 0x1e34, 0x3920, 0x4544, 0x1210, 0x2a58,
+ 0x1f34, 0x3a20, 0x4644, 0x1310, 0x2c58,
+ 0x2034, 0x3b20, 0x4744, 0x1410, 0x2e58,
+ 0x2424, 0x3f10, 0x0334, 0x1800, 0x3048,
+ 0x2524, 0x4010, 0x0434, 0x1900, 0x3148,
+ 0x2624, 0x4110, 0x0534, 0x1a00, 0x3248,
+ 0x2724, 0x4114, 0x0538, 0x1b00, 0x3348,
+ 0x2824, 0x4014, 0x0438, 0x1c00, 0x3448,
+ 0x2924, 0x3f14, 0x0338, 0x1d00, 0x3548,
+ 0x2928, 0x3e14, 0x0238, 0x1d04, 0x354c,
+ 0x2828, 0x3d14, 0x0138, 0x1c04, 0x344c,
+ 0x2728, 0x3c14, 0x0038, 0x1b04, 0x334c,
+ 0x2628, 0x3c18, 0x003c, 0x1a04, 0x324c,
+ 0x2528, 0x3d18, 0x013c, 0x1904, 0x314c,
+ 0x2428, 0x3e18, 0x023c, 0x1804, 0x304c,
+ 0x242c, 0x3f18, 0x033c, 0x1808, 0x3050,
+ 0x252c, 0x4018, 0x043c, 0x1908, 0x3150,
+ 0x262c, 0x4118, 0x053c, 0x1a08, 0x3250,
+ 0x272c, 0x411c, 0x0540, 0x1b08, 0x3350,
+ 0x282c, 0x401c, 0x0440, 0x1c08, 0x3450,
+ 0x292c, 0x3f1c, 0x0340, 0x1d08, 0x3550,
+ 0x2930, 0x3e1c, 0x0240, 0x1d0c, 0x3554,
+ 0x2830, 0x3d1c, 0x0140, 0x1c0c, 0x3454,
+ 0x2730, 0x3c1c, 0x0040, 0x1b0c, 0x3354,
+ 0x2630, 0x3c20, 0x0044, 0x1a0c, 0x3254,
+ 0x2530, 0x3d20, 0x0144, 0x190c, 0x3154,
+ 0x2430, 0x3e20, 0x0244, 0x180c, 0x3054,
+ 0x2434, 0x3f20, 0x0344, 0x1810, 0x3058,
+ 0x2534, 0x4020, 0x0444, 0x1910, 0x3258,
+ 0x2634, 0x4120, 0x0544, 0x1a10, 0x3458,
+ 0x2a24, 0x4510, 0x0934, 0x1e00, 0x3648,
+ 0x2b24, 0x4610, 0x0a34, 0x1f00, 0x3748,
+ 0x2c24, 0x4710, 0x0b34, 0x2000, 0x3848,
+ 0x2d24, 0x4714, 0x0b38, 0x2100, 0x3948,
+ 0x2e24, 0x4614, 0x0a38, 0x2200, 0x3a48,
+ 0x2f24, 0x4514, 0x0938, 0x2300, 0x3b48,
+ 0x2f28, 0x4414, 0x0838, 0x2304, 0x3b4c,
+ 0x2e28, 0x4314, 0x0738, 0x2204, 0x3a4c,
+ 0x2d28, 0x4214, 0x0638, 0x2104, 0x394c,
+ 0x2c28, 0x4218, 0x063c, 0x2004, 0x384c,
+ 0x2b28, 0x4318, 0x073c, 0x1f04, 0x374c,
+ 0x2a28, 0x4418, 0x083c, 0x1e04, 0x364c,
+ 0x2a2c, 0x4518, 0x093c, 0x1e08, 0x3650,
+ 0x2b2c, 0x4618, 0x0a3c, 0x1f08, 0x3750,
+ 0x2c2c, 0x4718, 0x0b3c, 0x2008, 0x3850,
+ 0x2d2c, 0x471c, 0x0b40, 0x2108, 0x3950,
+ 0x2e2c, 0x461c, 0x0a40, 0x2208, 0x3a50,
+ 0x2f2c, 0x451c, 0x0940, 0x2308, 0x3b50,
+ 0x2f30, 0x441c, 0x0840, 0x230c, 0x3b54,
+ 0x2e30, 0x431c, 0x0740, 0x220c, 0x3a54,
+ 0x2d30, 0x421c, 0x0640, 0x210c, 0x3954,
+ 0x2c30, 0x4220, 0x0644, 0x200c, 0x3854,
+ 0x2b30, 0x4320, 0x0744, 0x1f0c, 0x3754,
+ 0x2a30, 0x4420, 0x0844, 0x1e0c, 0x3654,
+ 0x2a34, 0x4520, 0x0944, 0x1e10, 0x3658,
+ 0x2b34, 0x4620, 0x0a44, 0x1f10, 0x3858,
+ 0x2c34, 0x4720, 0x0b44, 0x2010, 0x3a58,
+ 0x3024, 0x0310, 0x0f34, 0x2400, 0x3c48,
+ 0x3124, 0x0410, 0x1034, 0x2500, 0x3d48,
+ 0x3224, 0x0510, 0x1134, 0x2600, 0x3e48,
+ 0x3324, 0x0514, 0x1138, 0x2700, 0x3f48,
+ 0x3424, 0x0414, 0x1038, 0x2800, 0x4048,
+ 0x3524, 0x0314, 0x0f38, 0x2900, 0x4148,
+ 0x3528, 0x0214, 0x0e38, 0x2904, 0x414c,
+ 0x3428, 0x0114, 0x0d38, 0x2804, 0x404c,
+ 0x3328, 0x0014, 0x0c38, 0x2704, 0x3f4c,
+ 0x3228, 0x0018, 0x0c3c, 0x2604, 0x3e4c,
+ 0x3128, 0x0118, 0x0d3c, 0x2504, 0x3d4c,
+ 0x3028, 0x0218, 0x0e3c, 0x2404, 0x3c4c,
+ 0x302c, 0x0318, 0x0f3c, 0x2408, 0x3c50,
+ 0x312c, 0x0418, 0x103c, 0x2508, 0x3d50,
+ 0x322c, 0x0518, 0x113c, 0x2608, 0x3e50,
+ 0x332c, 0x051c, 0x1140, 0x2708, 0x3f50,
+ 0x342c, 0x041c, 0x1040, 0x2808, 0x4050,
+ 0x352c, 0x031c, 0x0f40, 0x2908, 0x4150,
+ 0x3530, 0x021c, 0x0e40, 0x290c, 0x4154,
+ 0x3430, 0x011c, 0x0d40, 0x280c, 0x4054,
+ 0x3330, 0x001c, 0x0c40, 0x270c, 0x3f54,
+ 0x3230, 0x0020, 0x0c44, 0x260c, 0x3e54,
+ 0x3130, 0x0120, 0x0d44, 0x250c, 0x3d54,
+ 0x3030, 0x0220, 0x0e44, 0x240c, 0x3c54,
+ 0x3034, 0x0320, 0x0f44, 0x2410, 0x3c58,
+ 0x3134, 0x0420, 0x1044, 0x2510, 0x3e58,
+ 0x3234, 0x0520, 0x1144, 0x2610, 0x4058,
+ 0x3624, 0x0910, 0x1534, 0x2a00, 0x4248,
+ 0x3724, 0x0a10, 0x1634, 0x2b00, 0x4348,
+ 0x3824, 0x0b10, 0x1734, 0x2c00, 0x4448,
+ 0x3924, 0x0b14, 0x1738, 0x2d00, 0x4548,
+ 0x3a24, 0x0a14, 0x1638, 0x2e00, 0x4648,
+ 0x3b24, 0x0914, 0x1538, 0x2f00, 0x4748,
+ 0x3b28, 0x0814, 0x1438, 0x2f04, 0x474c,
+ 0x3a28, 0x0714, 0x1338, 0x2e04, 0x464c,
+ 0x3928, 0x0614, 0x1238, 0x2d04, 0x454c,
+ 0x3828, 0x0618, 0x123c, 0x2c04, 0x444c,
+ 0x3728, 0x0718, 0x133c, 0x2b04, 0x434c,
+ 0x3628, 0x0818, 0x143c, 0x2a04, 0x424c,
+ 0x362c, 0x0918, 0x153c, 0x2a08, 0x4250,
+ 0x372c, 0x0a18, 0x163c, 0x2b08, 0x4350,
+ 0x382c, 0x0b18, 0x173c, 0x2c08, 0x4450,
+ 0x392c, 0x0b1c, 0x1740, 0x2d08, 0x4550,
+ 0x3a2c, 0x0a1c, 0x1640, 0x2e08, 0x4650,
+ 0x3b2c, 0x091c, 0x1540, 0x2f08, 0x4750,
+ 0x3b30, 0x081c, 0x1440, 0x2f0c, 0x4754,
+ 0x3a30, 0x071c, 0x1340, 0x2e0c, 0x4654,
+ 0x3930, 0x061c, 0x1240, 0x2d0c, 0x4554,
+ 0x3830, 0x0620, 0x1244, 0x2c0c, 0x4454,
+ 0x3730, 0x0720, 0x1344, 0x2b0c, 0x4354,
+ 0x3630, 0x0820, 0x1444, 0x2a0c, 0x4254,
+ 0x3634, 0x0920, 0x1544, 0x2a10, 0x4258,
+ 0x3734, 0x0a20, 0x1644, 0x2b10, 0x4458,
+ 0x3834, 0x0b20, 0x1744, 0x2c10, 0x4658,
+ 0x3c24, 0x0f10, 0x1b34, 0x3000, 0x0048,
+ 0x3d24, 0x1010, 0x1c34, 0x3100, 0x0148,
+ 0x3e24, 0x1110, 0x1d34, 0x3200, 0x0248,
+ 0x3f24, 0x1114, 0x1d38, 0x3300, 0x0348,
+ 0x4024, 0x1014, 0x1c38, 0x3400, 0x0448,
+ 0x4124, 0x0f14, 0x1b38, 0x3500, 0x0548,
+ 0x4128, 0x0e14, 0x1a38, 0x3504, 0x054c,
+ 0x4028, 0x0d14, 0x1938, 0x3404, 0x044c,
+ 0x3f28, 0x0c14, 0x1838, 0x3304, 0x034c,
+ 0x3e28, 0x0c18, 0x183c, 0x3204, 0x024c,
+ 0x3d28, 0x0d18, 0x193c, 0x3104, 0x014c,
+ 0x3c28, 0x0e18, 0x1a3c, 0x3004, 0x004c,
+ 0x3c2c, 0x0f18, 0x1b3c, 0x3008, 0x0050,
+ 0x3d2c, 0x1018, 0x1c3c, 0x3108, 0x0150,
+ 0x3e2c, 0x1118, 0x1d3c, 0x3208, 0x0250,
+ 0x3f2c, 0x111c, 0x1d40, 0x3308, 0x0350,
+ 0x402c, 0x101c, 0x1c40, 0x3408, 0x0450,
+ 0x412c, 0x0f1c, 0x1b40, 0x3508, 0x0550,
+ 0x4130, 0x0e1c, 0x1a40, 0x350c, 0x0554,
+ 0x4030, 0x0d1c, 0x1940, 0x340c, 0x0454,
+ 0x3f30, 0x0c1c, 0x1840, 0x330c, 0x0354,
+ 0x3e30, 0x0c20, 0x1844, 0x320c, 0x0254,
+ 0x3d30, 0x0d20, 0x1944, 0x310c, 0x0154,
+ 0x3c30, 0x0e20, 0x1a44, 0x300c, 0x0054,
+ 0x3c34, 0x0f20, 0x1b44, 0x3010, 0x0058,
+ 0x3d34, 0x1020, 0x1c44, 0x3110, 0x0258,
+ 0x3e34, 0x1120, 0x1d44, 0x3210, 0x0458,
+ 0x4224, 0x1510, 0x2134, 0x3600, 0x0648,
+ 0x4324, 0x1610, 0x2234, 0x3700, 0x0748,
+ 0x4424, 0x1710, 0x2334, 0x3800, 0x0848,
+ 0x4524, 0x1714, 0x2338, 0x3900, 0x0948,
+ 0x4624, 0x1614, 0x2238, 0x3a00, 0x0a48,
+ 0x4724, 0x1514, 0x2138, 0x3b00, 0x0b48,
+ 0x4728, 0x1414, 0x2038, 0x3b04, 0x0b4c,
+ 0x4628, 0x1314, 0x1f38, 0x3a04, 0x0a4c,
+ 0x4528, 0x1214, 0x1e38, 0x3904, 0x094c,
+ 0x4428, 0x1218, 0x1e3c, 0x3804, 0x084c,
+ 0x4328, 0x1318, 0x1f3c, 0x3704, 0x074c,
+ 0x4228, 0x1418, 0x203c, 0x3604, 0x064c,
+ 0x422c, 0x1518, 0x213c, 0x3608, 0x0650,
+ 0x432c, 0x1618, 0x223c, 0x3708, 0x0750,
+ 0x442c, 0x1718, 0x233c, 0x3808, 0x0850,
+ 0x452c, 0x171c, 0x2340, 0x3908, 0x0950,
+ 0x462c, 0x161c, 0x2240, 0x3a08, 0x0a50,
+ 0x472c, 0x151c, 0x2140, 0x3b08, 0x0b50,
+ 0x4730, 0x141c, 0x2040, 0x3b0c, 0x0b54,
+ 0x4630, 0x131c, 0x1f40, 0x3a0c, 0x0a54,
+ 0x4530, 0x121c, 0x1e40, 0x390c, 0x0954,
+ 0x4430, 0x1220, 0x1e44, 0x380c, 0x0854,
+ 0x4330, 0x1320, 0x1f44, 0x370c, 0x0754,
+ 0x4230, 0x1420, 0x2044, 0x360c, 0x0654,
+ 0x4234, 0x1520, 0x2144, 0x3610, 0x0658,
+ 0x4334, 0x1620, 0x2244, 0x3710, 0x0858,
+ 0x4434, 0x1720, 0x2344, 0x3810, 0x0a58,
+ 0x0024, 0x1b10, 0x2734, 0x3c00, 0x0c48,
+ 0x0124, 0x1c10, 0x2834, 0x3d00, 0x0d48,
+ 0x0224, 0x1d10, 0x2934, 0x3e00, 0x0e48,
+ 0x0324, 0x1d14, 0x2938, 0x3f00, 0x0f48,
+ 0x0424, 0x1c14, 0x2838, 0x4000, 0x1048,
+ 0x0524, 0x1b14, 0x2738, 0x4100, 0x1148,
+ 0x0528, 0x1a14, 0x2638, 0x4104, 0x114c,
+ 0x0428, 0x1914, 0x2538, 0x4004, 0x104c,
+ 0x0328, 0x1814, 0x2438, 0x3f04, 0x0f4c,
+ 0x0228, 0x1818, 0x243c, 0x3e04, 0x0e4c,
+ 0x0128, 0x1918, 0x253c, 0x3d04, 0x0d4c,
+ 0x0028, 0x1a18, 0x263c, 0x3c04, 0x0c4c,
+ 0x002c, 0x1b18, 0x273c, 0x3c08, 0x0c50,
+ 0x012c, 0x1c18, 0x283c, 0x3d08, 0x0d50,
+ 0x022c, 0x1d18, 0x293c, 0x3e08, 0x0e50,
+ 0x032c, 0x1d1c, 0x2940, 0x3f08, 0x0f50,
+ 0x042c, 0x1c1c, 0x2840, 0x4008, 0x1050,
+ 0x052c, 0x1b1c, 0x2740, 0x4108, 0x1150,
+ 0x0530, 0x1a1c, 0x2640, 0x410c, 0x1154,
+ 0x0430, 0x191c, 0x2540, 0x400c, 0x1054,
+ 0x0330, 0x181c, 0x2440, 0x3f0c, 0x0f54,
+ 0x0230, 0x1820, 0x2444, 0x3e0c, 0x0e54,
+ 0x0130, 0x1920, 0x2544, 0x3d0c, 0x0d54,
+ 0x0030, 0x1a20, 0x2644, 0x3c0c, 0x0c54,
+ 0x0034, 0x1b20, 0x2744, 0x3c10, 0x0c58,
+ 0x0134, 0x1c20, 0x2844, 0x3d10, 0x0e58,
+ 0x0234, 0x1d20, 0x2944, 0x3e10, 0x1058,
+ 0x0624, 0x2110, 0x2d34, 0x4200, 0x1248,
+ 0x0724, 0x2210, 0x2e34, 0x4300, 0x1348,
+ 0x0824, 0x2310, 0x2f34, 0x4400, 0x1448,
+ 0x0924, 0x2314, 0x2f38, 0x4500, 0x1548,
+ 0x0a24, 0x2214, 0x2e38, 0x4600, 0x1648,
+ 0x0b24, 0x2114, 0x2d38, 0x4700, 0x1748,
+ 0x0b28, 0x2014, 0x2c38, 0x4704, 0x174c,
+ 0x0a28, 0x1f14, 0x2b38, 0x4604, 0x164c,
+ 0x0928, 0x1e14, 0x2a38, 0x4504, 0x154c,
+ 0x0828, 0x1e18, 0x2a3c, 0x4404, 0x144c,
+ 0x0728, 0x1f18, 0x2b3c, 0x4304, 0x134c,
+ 0x0628, 0x2018, 0x2c3c, 0x4204, 0x124c,
+ 0x062c, 0x2118, 0x2d3c, 0x4208, 0x1250,
+ 0x072c, 0x2218, 0x2e3c, 0x4308, 0x1350,
+ 0x082c, 0x2318, 0x2f3c, 0x4408, 0x1450,
+ 0x092c, 0x231c, 0x2f40, 0x4508, 0x1550,
+ 0x0a2c, 0x221c, 0x2e40, 0x4608, 0x1650,
+ 0x0b2c, 0x211c, 0x2d40, 0x4708, 0x1750,
+ 0x0b30, 0x201c, 0x2c40, 0x470c, 0x1754,
+ 0x0a30, 0x1f1c, 0x2b40, 0x460c, 0x1654,
+ 0x0930, 0x1e1c, 0x2a40, 0x450c, 0x1554,
+ 0x0830, 0x1e20, 0x2a44, 0x440c, 0x1454,
+ 0x0730, 0x1f20, 0x2b44, 0x430c, 0x1354,
+ 0x0630, 0x2020, 0x2c44, 0x420c, 0x1254,
+ 0x0634, 0x2120, 0x2d44, 0x4210, 0x1258,
+ 0x0734, 0x2220, 0x2e44, 0x4310, 0x1458,
+ 0x0834, 0x2320, 0x2f44, 0x4410, 0x1658,
+};
+
+static const uint16_t dv_place_411[1350] = {
+ 0x0c24, 0x2710, 0x3334, 0x0000, 0x1848,
+ 0x0d24, 0x2810, 0x3434, 0x0100, 0x1948,
+ 0x0e24, 0x2910, 0x3534, 0x0200, 0x1a48,
+ 0x0f24, 0x2914, 0x3538, 0x0300, 0x1b48,
+ 0x1024, 0x2814, 0x3438, 0x0400, 0x1c48,
+ 0x1124, 0x2714, 0x3338, 0x0500, 0x1d48,
+ 0x1128, 0x2614, 0x3238, 0x0504, 0x1d4c,
+ 0x1028, 0x2514, 0x3138, 0x0404, 0x1c4c,
+ 0x0f28, 0x2414, 0x3038, 0x0304, 0x1b4c,
+ 0x0e28, 0x2418, 0x303c, 0x0204, 0x1a4c,
+ 0x0d28, 0x2518, 0x313c, 0x0104, 0x194c,
+ 0x0c28, 0x2618, 0x323c, 0x0004, 0x184c,
+ 0x0c2c, 0x2718, 0x333c, 0x0008, 0x1850,
+ 0x0d2c, 0x2818, 0x343c, 0x0108, 0x1950,
+ 0x0e2c, 0x2918, 0x353c, 0x0208, 0x1a50,
+ 0x0f2c, 0x291c, 0x3540, 0x0308, 0x1b50,
+ 0x102c, 0x281c, 0x3440, 0x0408, 0x1c50,
+ 0x112c, 0x271c, 0x3340, 0x0508, 0x1d50,
+ 0x1130, 0x261c, 0x3240, 0x050c, 0x1d54,
+ 0x1030, 0x251c, 0x3140, 0x040c, 0x1c54,
+ 0x0f30, 0x241c, 0x3040, 0x030c, 0x1b54,
+ 0x0e30, 0x2420, 0x3044, 0x020c, 0x1a54,
+ 0x0d30, 0x2520, 0x3144, 0x010c, 0x1954,
+ 0x0c30, 0x2620, 0x3244, 0x000c, 0x1854,
+ 0x0c34, 0x2720, 0x3344, 0x0010, 0x1858,
+ 0x0d34, 0x2820, 0x3444, 0x0110, 0x1a58,
+ 0x0e34, 0x2920, 0x3544, 0x0210, 0x1c58,
+ 0x1224, 0x2d10, 0x3934, 0x0600, 0x1e48,
+ 0x1324, 0x2e10, 0x3a34, 0x0700, 0x1f48,
+ 0x1424, 0x2f10, 0x3b34, 0x0800, 0x2048,
+ 0x1524, 0x2f14, 0x3b38, 0x0900, 0x2148,
+ 0x1624, 0x2e14, 0x3a38, 0x0a00, 0x2248,
+ 0x1724, 0x2d14, 0x3938, 0x0b00, 0x2348,
+ 0x1728, 0x2c14, 0x3838, 0x0b04, 0x234c,
+ 0x1628, 0x2b14, 0x3738, 0x0a04, 0x224c,
+ 0x1528, 0x2a14, 0x3638, 0x0904, 0x214c,
+ 0x1428, 0x2a18, 0x363c, 0x0804, 0x204c,
+ 0x1328, 0x2b18, 0x373c, 0x0704, 0x1f4c,
+ 0x1228, 0x2c18, 0x383c, 0x0604, 0x1e4c,
+ 0x122c, 0x2d18, 0x393c, 0x0608, 0x1e50,
+ 0x132c, 0x2e18, 0x3a3c, 0x0708, 0x1f50,
+ 0x142c, 0x2f18, 0x3b3c, 0x0808, 0x2050,
+ 0x152c, 0x2f1c, 0x3b40, 0x0908, 0x2150,
+ 0x162c, 0x2e1c, 0x3a40, 0x0a08, 0x2250,
+ 0x172c, 0x2d1c, 0x3940, 0x0b08, 0x2350,
+ 0x1730, 0x2c1c, 0x3840, 0x0b0c, 0x2354,
+ 0x1630, 0x2b1c, 0x3740, 0x0a0c, 0x2254,
+ 0x1530, 0x2a1c, 0x3640, 0x090c, 0x2154,
+ 0x1430, 0x2a20, 0x3644, 0x080c, 0x2054,
+ 0x1330, 0x2b20, 0x3744, 0x070c, 0x1f54,
+ 0x1230, 0x2c20, 0x3844, 0x060c, 0x1e54,
+ 0x1234, 0x2d20, 0x3944, 0x0610, 0x1e58,
+ 0x1334, 0x2e20, 0x3a44, 0x0710, 0x2058,
+ 0x1434, 0x2f20, 0x3b44, 0x0810, 0x2258,
+ 0x1824, 0x3310, 0x0334, 0x0c00, 0x2448,
+ 0x1924, 0x3410, 0x0434, 0x0d00, 0x2548,
+ 0x1a24, 0x3510, 0x0534, 0x0e00, 0x2648,
+ 0x1b24, 0x3514, 0x0538, 0x0f00, 0x2748,
+ 0x1c24, 0x3414, 0x0438, 0x1000, 0x2848,
+ 0x1d24, 0x3314, 0x0338, 0x1100, 0x2948,
+ 0x1d28, 0x3214, 0x0238, 0x1104, 0x294c,
+ 0x1c28, 0x3114, 0x0138, 0x1004, 0x284c,
+ 0x1b28, 0x3014, 0x0038, 0x0f04, 0x274c,
+ 0x1a28, 0x3018, 0x003c, 0x0e04, 0x264c,
+ 0x1928, 0x3118, 0x013c, 0x0d04, 0x254c,
+ 0x1828, 0x3218, 0x023c, 0x0c04, 0x244c,
+ 0x182c, 0x3318, 0x033c, 0x0c08, 0x2450,
+ 0x192c, 0x3418, 0x043c, 0x0d08, 0x2550,
+ 0x1a2c, 0x3518, 0x053c, 0x0e08, 0x2650,
+ 0x1b2c, 0x351c, 0x0540, 0x0f08, 0x2750,
+ 0x1c2c, 0x341c, 0x0440, 0x1008, 0x2850,
+ 0x1d2c, 0x331c, 0x0340, 0x1108, 0x2950,
+ 0x1d30, 0x321c, 0x0240, 0x110c, 0x2954,
+ 0x1c30, 0x311c, 0x0140, 0x100c, 0x2854,
+ 0x1b30, 0x301c, 0x0040, 0x0f0c, 0x2754,
+ 0x1a30, 0x3020, 0x0044, 0x0e0c, 0x2654,
+ 0x1930, 0x3120, 0x0144, 0x0d0c, 0x2554,
+ 0x1830, 0x3220, 0x0244, 0x0c0c, 0x2454,
+ 0x1834, 0x3320, 0x0344, 0x0c10, 0x2458,
+ 0x1934, 0x3420, 0x0444, 0x0d10, 0x2658,
+ 0x1a34, 0x3520, 0x0544, 0x0e10, 0x2858,
+ 0x1e24, 0x3910, 0x0934, 0x1200, 0x2a48,
+ 0x1f24, 0x3a10, 0x0a34, 0x1300, 0x2b48,
+ 0x2024, 0x3b10, 0x0b34, 0x1400, 0x2c48,
+ 0x2124, 0x3b14, 0x0b38, 0x1500, 0x2d48,
+ 0x2224, 0x3a14, 0x0a38, 0x1600, 0x2e48,
+ 0x2324, 0x3914, 0x0938, 0x1700, 0x2f48,
+ 0x2328, 0x3814, 0x0838, 0x1704, 0x2f4c,
+ 0x2228, 0x3714, 0x0738, 0x1604, 0x2e4c,
+ 0x2128, 0x3614, 0x0638, 0x1504, 0x2d4c,
+ 0x2028, 0x3618, 0x063c, 0x1404, 0x2c4c,
+ 0x1f28, 0x3718, 0x073c, 0x1304, 0x2b4c,
+ 0x1e28, 0x3818, 0x083c, 0x1204, 0x2a4c,
+ 0x1e2c, 0x3918, 0x093c, 0x1208, 0x2a50,
+ 0x1f2c, 0x3a18, 0x0a3c, 0x1308, 0x2b50,
+ 0x202c, 0x3b18, 0x0b3c, 0x1408, 0x2c50,
+ 0x212c, 0x3b1c, 0x0b40, 0x1508, 0x2d50,
+ 0x222c, 0x3a1c, 0x0a40, 0x1608, 0x2e50,
+ 0x232c, 0x391c, 0x0940, 0x1708, 0x2f50,
+ 0x2330, 0x381c, 0x0840, 0x170c, 0x2f54,
+ 0x2230, 0x371c, 0x0740, 0x160c, 0x2e54,
+ 0x2130, 0x361c, 0x0640, 0x150c, 0x2d54,
+ 0x2030, 0x3620, 0x0644, 0x140c, 0x2c54,
+ 0x1f30, 0x3720, 0x0744, 0x130c, 0x2b54,
+ 0x1e30, 0x3820, 0x0844, 0x120c, 0x2a54,
+ 0x1e34, 0x3920, 0x0944, 0x1210, 0x2a58,
+ 0x1f34, 0x3a20, 0x0a44, 0x1310, 0x2c58,
+ 0x2034, 0x3b20, 0x0b44, 0x1410, 0x2e58,
+ 0x2424, 0x0310, 0x0f34, 0x1800, 0x3048,
+ 0x2524, 0x0410, 0x1034, 0x1900, 0x3148,
+ 0x2624, 0x0510, 0x1134, 0x1a00, 0x3248,
+ 0x2724, 0x0514, 0x1138, 0x1b00, 0x3348,
+ 0x2824, 0x0414, 0x1038, 0x1c00, 0x3448,
+ 0x2924, 0x0314, 0x0f38, 0x1d00, 0x3548,
+ 0x2928, 0x0214, 0x0e38, 0x1d04, 0x354c,
+ 0x2828, 0x0114, 0x0d38, 0x1c04, 0x344c,
+ 0x2728, 0x0014, 0x0c38, 0x1b04, 0x334c,
+ 0x2628, 0x0018, 0x0c3c, 0x1a04, 0x324c,
+ 0x2528, 0x0118, 0x0d3c, 0x1904, 0x314c,
+ 0x2428, 0x0218, 0x0e3c, 0x1804, 0x304c,
+ 0x242c, 0x0318, 0x0f3c, 0x1808, 0x3050,
+ 0x252c, 0x0418, 0x103c, 0x1908, 0x3150,
+ 0x262c, 0x0518, 0x113c, 0x1a08, 0x3250,
+ 0x272c, 0x051c, 0x1140, 0x1b08, 0x3350,
+ 0x282c, 0x041c, 0x1040, 0x1c08, 0x3450,
+ 0x292c, 0x031c, 0x0f40, 0x1d08, 0x3550,
+ 0x2930, 0x021c, 0x0e40, 0x1d0c, 0x3554,
+ 0x2830, 0x011c, 0x0d40, 0x1c0c, 0x3454,
+ 0x2730, 0x001c, 0x0c40, 0x1b0c, 0x3354,
+ 0x2630, 0x0020, 0x0c44, 0x1a0c, 0x3254,
+ 0x2530, 0x0120, 0x0d44, 0x190c, 0x3154,
+ 0x2430, 0x0220, 0x0e44, 0x180c, 0x3054,
+ 0x2434, 0x0320, 0x0f44, 0x1810, 0x3058,
+ 0x2534, 0x0420, 0x1044, 0x1910, 0x3258,
+ 0x2634, 0x0520, 0x1144, 0x1a10, 0x3458,
+ 0x2a24, 0x0910, 0x1534, 0x1e00, 0x3648,
+ 0x2b24, 0x0a10, 0x1634, 0x1f00, 0x3748,
+ 0x2c24, 0x0b10, 0x1734, 0x2000, 0x3848,
+ 0x2d24, 0x0b14, 0x1738, 0x2100, 0x3948,
+ 0x2e24, 0x0a14, 0x1638, 0x2200, 0x3a48,
+ 0x2f24, 0x0914, 0x1538, 0x2300, 0x3b48,
+ 0x2f28, 0x0814, 0x1438, 0x2304, 0x3b4c,
+ 0x2e28, 0x0714, 0x1338, 0x2204, 0x3a4c,
+ 0x2d28, 0x0614, 0x1238, 0x2104, 0x394c,
+ 0x2c28, 0x0618, 0x123c, 0x2004, 0x384c,
+ 0x2b28, 0x0718, 0x133c, 0x1f04, 0x374c,
+ 0x2a28, 0x0818, 0x143c, 0x1e04, 0x364c,
+ 0x2a2c, 0x0918, 0x153c, 0x1e08, 0x3650,
+ 0x2b2c, 0x0a18, 0x163c, 0x1f08, 0x3750,
+ 0x2c2c, 0x0b18, 0x173c, 0x2008, 0x3850,
+ 0x2d2c, 0x0b1c, 0x1740, 0x2108, 0x3950,
+ 0x2e2c, 0x0a1c, 0x1640, 0x2208, 0x3a50,
+ 0x2f2c, 0x091c, 0x1540, 0x2308, 0x3b50,
+ 0x2f30, 0x081c, 0x1440, 0x230c, 0x3b54,
+ 0x2e30, 0x071c, 0x1340, 0x220c, 0x3a54,
+ 0x2d30, 0x061c, 0x1240, 0x210c, 0x3954,
+ 0x2c30, 0x0620, 0x1244, 0x200c, 0x3854,
+ 0x2b30, 0x0720, 0x1344, 0x1f0c, 0x3754,
+ 0x2a30, 0x0820, 0x1444, 0x1e0c, 0x3654,
+ 0x2a34, 0x0920, 0x1544, 0x1e10, 0x3658,
+ 0x2b34, 0x0a20, 0x1644, 0x1f10, 0x3858,
+ 0x2c34, 0x0b20, 0x1744, 0x2010, 0x3a58,
+ 0x3024, 0x0f10, 0x1b34, 0x2400, 0x0048,
+ 0x3124, 0x1010, 0x1c34, 0x2500, 0x0148,
+ 0x3224, 0x1110, 0x1d34, 0x2600, 0x0248,
+ 0x3324, 0x1114, 0x1d38, 0x2700, 0x0348,
+ 0x3424, 0x1014, 0x1c38, 0x2800, 0x0448,
+ 0x3524, 0x0f14, 0x1b38, 0x2900, 0x0548,
+ 0x3528, 0x0e14, 0x1a38, 0x2904, 0x054c,
+ 0x3428, 0x0d14, 0x1938, 0x2804, 0x044c,
+ 0x3328, 0x0c14, 0x1838, 0x2704, 0x034c,
+ 0x3228, 0x0c18, 0x183c, 0x2604, 0x024c,
+ 0x3128, 0x0d18, 0x193c, 0x2504, 0x014c,
+ 0x3028, 0x0e18, 0x1a3c, 0x2404, 0x004c,
+ 0x302c, 0x0f18, 0x1b3c, 0x2408, 0x0050,
+ 0x312c, 0x1018, 0x1c3c, 0x2508, 0x0150,
+ 0x322c, 0x1118, 0x1d3c, 0x2608, 0x0250,
+ 0x332c, 0x111c, 0x1d40, 0x2708, 0x0350,
+ 0x342c, 0x101c, 0x1c40, 0x2808, 0x0450,
+ 0x352c, 0x0f1c, 0x1b40, 0x2908, 0x0550,
+ 0x3530, 0x0e1c, 0x1a40, 0x290c, 0x0554,
+ 0x3430, 0x0d1c, 0x1940, 0x280c, 0x0454,
+ 0x3330, 0x0c1c, 0x1840, 0x270c, 0x0354,
+ 0x3230, 0x0c20, 0x1844, 0x260c, 0x0254,
+ 0x3130, 0x0d20, 0x1944, 0x250c, 0x0154,
+ 0x3030, 0x0e20, 0x1a44, 0x240c, 0x0054,
+ 0x3034, 0x0f20, 0x1b44, 0x2410, 0x0058,
+ 0x3134, 0x1020, 0x1c44, 0x2510, 0x0258,
+ 0x3234, 0x1120, 0x1d44, 0x2610, 0x0458,
+ 0x3624, 0x1510, 0x2134, 0x2a00, 0x0648,
+ 0x3724, 0x1610, 0x2234, 0x2b00, 0x0748,
+ 0x3824, 0x1710, 0x2334, 0x2c00, 0x0848,
+ 0x3924, 0x1714, 0x2338, 0x2d00, 0x0948,
+ 0x3a24, 0x1614, 0x2238, 0x2e00, 0x0a48,
+ 0x3b24, 0x1514, 0x2138, 0x2f00, 0x0b48,
+ 0x3b28, 0x1414, 0x2038, 0x2f04, 0x0b4c,
+ 0x3a28, 0x1314, 0x1f38, 0x2e04, 0x0a4c,
+ 0x3928, 0x1214, 0x1e38, 0x2d04, 0x094c,
+ 0x3828, 0x1218, 0x1e3c, 0x2c04, 0x084c,
+ 0x3728, 0x1318, 0x1f3c, 0x2b04, 0x074c,
+ 0x3628, 0x1418, 0x203c, 0x2a04, 0x064c,
+ 0x362c, 0x1518, 0x213c, 0x2a08, 0x0650,
+ 0x372c, 0x1618, 0x223c, 0x2b08, 0x0750,
+ 0x382c, 0x1718, 0x233c, 0x2c08, 0x0850,
+ 0x392c, 0x171c, 0x2340, 0x2d08, 0x0950,
+ 0x3a2c, 0x161c, 0x2240, 0x2e08, 0x0a50,
+ 0x3b2c, 0x151c, 0x2140, 0x2f08, 0x0b50,
+ 0x3b30, 0x141c, 0x2040, 0x2f0c, 0x0b54,
+ 0x3a30, 0x131c, 0x1f40, 0x2e0c, 0x0a54,
+ 0x3930, 0x121c, 0x1e40, 0x2d0c, 0x0954,
+ 0x3830, 0x1220, 0x1e44, 0x2c0c, 0x0854,
+ 0x3730, 0x1320, 0x1f44, 0x2b0c, 0x0754,
+ 0x3630, 0x1420, 0x2044, 0x2a0c, 0x0654,
+ 0x3634, 0x1520, 0x2144, 0x2a10, 0x0658,
+ 0x3734, 0x1620, 0x2244, 0x2b10, 0x0858,
+ 0x3834, 0x1720, 0x2344, 0x2c10, 0x0a58,
+ 0x0024, 0x1b10, 0x2734, 0x3000, 0x0c48,
+ 0x0124, 0x1c10, 0x2834, 0x3100, 0x0d48,
+ 0x0224, 0x1d10, 0x2934, 0x3200, 0x0e48,
+ 0x0324, 0x1d14, 0x2938, 0x3300, 0x0f48,
+ 0x0424, 0x1c14, 0x2838, 0x3400, 0x1048,
+ 0x0524, 0x1b14, 0x2738, 0x3500, 0x1148,
+ 0x0528, 0x1a14, 0x2638, 0x3504, 0x114c,
+ 0x0428, 0x1914, 0x2538, 0x3404, 0x104c,
+ 0x0328, 0x1814, 0x2438, 0x3304, 0x0f4c,
+ 0x0228, 0x1818, 0x243c, 0x3204, 0x0e4c,
+ 0x0128, 0x1918, 0x253c, 0x3104, 0x0d4c,
+ 0x0028, 0x1a18, 0x263c, 0x3004, 0x0c4c,
+ 0x002c, 0x1b18, 0x273c, 0x3008, 0x0c50,
+ 0x012c, 0x1c18, 0x283c, 0x3108, 0x0d50,
+ 0x022c, 0x1d18, 0x293c, 0x3208, 0x0e50,
+ 0x032c, 0x1d1c, 0x2940, 0x3308, 0x0f50,
+ 0x042c, 0x1c1c, 0x2840, 0x3408, 0x1050,
+ 0x052c, 0x1b1c, 0x2740, 0x3508, 0x1150,
+ 0x0530, 0x1a1c, 0x2640, 0x350c, 0x1154,
+ 0x0430, 0x191c, 0x2540, 0x340c, 0x1054,
+ 0x0330, 0x181c, 0x2440, 0x330c, 0x0f54,
+ 0x0230, 0x1820, 0x2444, 0x320c, 0x0e54,
+ 0x0130, 0x1920, 0x2544, 0x310c, 0x0d54,
+ 0x0030, 0x1a20, 0x2644, 0x300c, 0x0c54,
+ 0x0034, 0x1b20, 0x2744, 0x3010, 0x0c58,
+ 0x0134, 0x1c20, 0x2844, 0x3110, 0x0e58,
+ 0x0234, 0x1d20, 0x2944, 0x3210, 0x1058,
+ 0x0624, 0x2110, 0x2d34, 0x3600, 0x1248,
+ 0x0724, 0x2210, 0x2e34, 0x3700, 0x1348,
+ 0x0824, 0x2310, 0x2f34, 0x3800, 0x1448,
+ 0x0924, 0x2314, 0x2f38, 0x3900, 0x1548,
+ 0x0a24, 0x2214, 0x2e38, 0x3a00, 0x1648,
+ 0x0b24, 0x2114, 0x2d38, 0x3b00, 0x1748,
+ 0x0b28, 0x2014, 0x2c38, 0x3b04, 0x174c,
+ 0x0a28, 0x1f14, 0x2b38, 0x3a04, 0x164c,
+ 0x0928, 0x1e14, 0x2a38, 0x3904, 0x154c,
+ 0x0828, 0x1e18, 0x2a3c, 0x3804, 0x144c,
+ 0x0728, 0x1f18, 0x2b3c, 0x3704, 0x134c,
+ 0x0628, 0x2018, 0x2c3c, 0x3604, 0x124c,
+ 0x062c, 0x2118, 0x2d3c, 0x3608, 0x1250,
+ 0x072c, 0x2218, 0x2e3c, 0x3708, 0x1350,
+ 0x082c, 0x2318, 0x2f3c, 0x3808, 0x1450,
+ 0x092c, 0x231c, 0x2f40, 0x3908, 0x1550,
+ 0x0a2c, 0x221c, 0x2e40, 0x3a08, 0x1650,
+ 0x0b2c, 0x211c, 0x2d40, 0x3b08, 0x1750,
+ 0x0b30, 0x201c, 0x2c40, 0x3b0c, 0x1754,
+ 0x0a30, 0x1f1c, 0x2b40, 0x3a0c, 0x1654,
+ 0x0930, 0x1e1c, 0x2a40, 0x390c, 0x1554,
+ 0x0830, 0x1e20, 0x2a44, 0x380c, 0x1454,
+ 0x0730, 0x1f20, 0x2b44, 0x370c, 0x1354,
+ 0x0630, 0x2020, 0x2c44, 0x360c, 0x1254,
+ 0x0634, 0x2120, 0x2d44, 0x3610, 0x1258,
+ 0x0734, 0x2220, 0x2e44, 0x3710, 0x1458,
+ 0x0834, 0x2320, 0x2f44, 0x3810, 0x1658,
+};
+
+/* 2 channels per frame, 10 DIF sequences per channel,
+   27 video segments per DIF sequence, 5 macroblocks per video segment */
+static const uint16_t dv_place_422_525[2*10*27*5] = {
+ 0x0c24, 0x2412, 0x3036, 0x0000, 0x1848,
+ 0x0d24, 0x2512, 0x3136, 0x0100, 0x1948,
+ 0x0e24, 0x2612, 0x3236, 0x0200, 0x1a48,
+ 0x0e26, 0x2614, 0x3238, 0x0202, 0x1a4a,
+ 0x0d26, 0x2514, 0x3138, 0x0102, 0x194a,
+ 0x0c26, 0x2414, 0x3038, 0x0002, 0x184a,
+ 0x0c28, 0x2416, 0x303a, 0x0004, 0x184c,
+ 0x0d28, 0x2516, 0x313a, 0x0104, 0x194c,
+ 0x0e28, 0x2616, 0x323a, 0x0204, 0x1a4c,
+ 0x0e2a, 0x2618, 0x323c, 0x0206, 0x1a4e,
+ 0x0d2a, 0x2518, 0x313c, 0x0106, 0x194e,
+ 0x0c2a, 0x2418, 0x303c, 0x0006, 0x184e,
+ 0x0c2c, 0x241a, 0x303e, 0x0008, 0x1850,
+ 0x0d2c, 0x251a, 0x313e, 0x0108, 0x1950,
+ 0x0e2c, 0x261a, 0x323e, 0x0208, 0x1a50,
+ 0x0e2e, 0x261c, 0x3240, 0x020a, 0x1a52,
+ 0x0d2e, 0x251c, 0x3140, 0x010a, 0x1952,
+ 0x0c2e, 0x241c, 0x3040, 0x000a, 0x1852,
+ 0x0c30, 0x241e, 0x3042, 0x000c, 0x1854,
+ 0x0d30, 0x251e, 0x3142, 0x010c, 0x1954,
+ 0x0e30, 0x261e, 0x3242, 0x020c, 0x1a54,
+ 0x0e32, 0x2620, 0x3244, 0x020e, 0x1a56,
+ 0x0d32, 0x2520, 0x3144, 0x010e, 0x1956,
+ 0x0c32, 0x2420, 0x3044, 0x000e, 0x1856,
+ 0x0c34, 0x2422, 0x3046, 0x0010, 0x1858,
+ 0x0d34, 0x2522, 0x3146, 0x0110, 0x1958,
+ 0x0e34, 0x2622, 0x3246, 0x0210, 0x1a58,
+ 0x1224, 0x2a12, 0x3636, 0x0600, 0x1e48,
+ 0x1324, 0x2b12, 0x3736, 0x0700, 0x1f48,
+ 0x1424, 0x2c12, 0x3836, 0x0800, 0x2048,
+ 0x1426, 0x2c14, 0x3838, 0x0802, 0x204a,
+ 0x1326, 0x2b14, 0x3738, 0x0702, 0x1f4a,
+ 0x1226, 0x2a14, 0x3638, 0x0602, 0x1e4a,
+ 0x1228, 0x2a16, 0x363a, 0x0604, 0x1e4c,
+ 0x1328, 0x2b16, 0x373a, 0x0704, 0x1f4c,
+ 0x1428, 0x2c16, 0x383a, 0x0804, 0x204c,
+ 0x142a, 0x2c18, 0x383c, 0x0806, 0x204e,
+ 0x132a, 0x2b18, 0x373c, 0x0706, 0x1f4e,
+ 0x122a, 0x2a18, 0x363c, 0x0606, 0x1e4e,
+ 0x122c, 0x2a1a, 0x363e, 0x0608, 0x1e50,
+ 0x132c, 0x2b1a, 0x373e, 0x0708, 0x1f50,
+ 0x142c, 0x2c1a, 0x383e, 0x0808, 0x2050,
+ 0x142e, 0x2c1c, 0x3840, 0x080a, 0x2052,
+ 0x132e, 0x2b1c, 0x3740, 0x070a, 0x1f52,
+ 0x122e, 0x2a1c, 0x3640, 0x060a, 0x1e52,
+ 0x1230, 0x2a1e, 0x3642, 0x060c, 0x1e54,
+ 0x1330, 0x2b1e, 0x3742, 0x070c, 0x1f54,
+ 0x1430, 0x2c1e, 0x3842, 0x080c, 0x2054,
+ 0x1432, 0x2c20, 0x3844, 0x080e, 0x2056,
+ 0x1332, 0x2b20, 0x3744, 0x070e, 0x1f56,
+ 0x1232, 0x2a20, 0x3644, 0x060e, 0x1e56,
+ 0x1234, 0x2a22, 0x3646, 0x0610, 0x1e58,
+ 0x1334, 0x2b22, 0x3746, 0x0710, 0x1f58,
+ 0x1434, 0x2c22, 0x3846, 0x0810, 0x2058,
+ 0x1824, 0x3012, 0x0036, 0x0c00, 0x2448,
+ 0x1924, 0x3112, 0x0136, 0x0d00, 0x2548,
+ 0x1a24, 0x3212, 0x0236, 0x0e00, 0x2648,
+ 0x1a26, 0x3214, 0x0238, 0x0e02, 0x264a,
+ 0x1926, 0x3114, 0x0138, 0x0d02, 0x254a,
+ 0x1826, 0x3014, 0x0038, 0x0c02, 0x244a,
+ 0x1828, 0x3016, 0x003a, 0x0c04, 0x244c,
+ 0x1928, 0x3116, 0x013a, 0x0d04, 0x254c,
+ 0x1a28, 0x3216, 0x023a, 0x0e04, 0x264c,
+ 0x1a2a, 0x3218, 0x023c, 0x0e06, 0x264e,
+ 0x192a, 0x3118, 0x013c, 0x0d06, 0x254e,
+ 0x182a, 0x3018, 0x003c, 0x0c06, 0x244e,
+ 0x182c, 0x301a, 0x003e, 0x0c08, 0x2450,
+ 0x192c, 0x311a, 0x013e, 0x0d08, 0x2550,
+ 0x1a2c, 0x321a, 0x023e, 0x0e08, 0x2650,
+ 0x1a2e, 0x321c, 0x0240, 0x0e0a, 0x2652,
+ 0x192e, 0x311c, 0x0140, 0x0d0a, 0x2552,
+ 0x182e, 0x301c, 0x0040, 0x0c0a, 0x2452,
+ 0x1830, 0x301e, 0x0042, 0x0c0c, 0x2454,
+ 0x1930, 0x311e, 0x0142, 0x0d0c, 0x2554,
+ 0x1a30, 0x321e, 0x0242, 0x0e0c, 0x2654,
+ 0x1a32, 0x3220, 0x0244, 0x0e0e, 0x2656,
+ 0x1932, 0x3120, 0x0144, 0x0d0e, 0x2556,
+ 0x1832, 0x3020, 0x0044, 0x0c0e, 0x2456,
+ 0x1834, 0x3022, 0x0046, 0x0c10, 0x2458,
+ 0x1934, 0x3122, 0x0146, 0x0d10, 0x2558,
+ 0x1a34, 0x3222, 0x0246, 0x0e10, 0x2658,
+ 0x1e24, 0x3612, 0x0636, 0x1200, 0x2a48,
+ 0x1f24, 0x3712, 0x0736, 0x1300, 0x2b48,
+ 0x2024, 0x3812, 0x0836, 0x1400, 0x2c48,
+ 0x2026, 0x3814, 0x0838, 0x1402, 0x2c4a,
+ 0x1f26, 0x3714, 0x0738, 0x1302, 0x2b4a,
+ 0x1e26, 0x3614, 0x0638, 0x1202, 0x2a4a,
+ 0x1e28, 0x3616, 0x063a, 0x1204, 0x2a4c,
+ 0x1f28, 0x3716, 0x073a, 0x1304, 0x2b4c,
+ 0x2028, 0x3816, 0x083a, 0x1404, 0x2c4c,
+ 0x202a, 0x3818, 0x083c, 0x1406, 0x2c4e,
+ 0x1f2a, 0x3718, 0x073c, 0x1306, 0x2b4e,
+ 0x1e2a, 0x3618, 0x063c, 0x1206, 0x2a4e,
+ 0x1e2c, 0x361a, 0x063e, 0x1208, 0x2a50,
+ 0x1f2c, 0x371a, 0x073e, 0x1308, 0x2b50,
+ 0x202c, 0x381a, 0x083e, 0x1408, 0x2c50,
+ 0x202e, 0x381c, 0x0840, 0x140a, 0x2c52,
+ 0x1f2e, 0x371c, 0x0740, 0x130a, 0x2b52,
+ 0x1e2e, 0x361c, 0x0640, 0x120a, 0x2a52,
+ 0x1e30, 0x361e, 0x0642, 0x120c, 0x2a54,
+ 0x1f30, 0x371e, 0x0742, 0x130c, 0x2b54,
+ 0x2030, 0x381e, 0x0842, 0x140c, 0x2c54,
+ 0x2032, 0x3820, 0x0844, 0x140e, 0x2c56,
+ 0x1f32, 0x3720, 0x0744, 0x130e, 0x2b56,
+ 0x1e32, 0x3620, 0x0644, 0x120e, 0x2a56,
+ 0x1e34, 0x3622, 0x0646, 0x1210, 0x2a58,
+ 0x1f34, 0x3722, 0x0746, 0x1310, 0x2b58,
+ 0x2034, 0x3822, 0x0846, 0x1410, 0x2c58,
+ 0x2424, 0x0012, 0x0c36, 0x1800, 0x3048,
+ 0x2524, 0x0112, 0x0d36, 0x1900, 0x3148,
+ 0x2624, 0x0212, 0x0e36, 0x1a00, 0x3248,
+ 0x2626, 0x0214, 0x0e38, 0x1a02, 0x324a,
+ 0x2526, 0x0114, 0x0d38, 0x1902, 0x314a,
+ 0x2426, 0x0014, 0x0c38, 0x1802, 0x304a,
+ 0x2428, 0x0016, 0x0c3a, 0x1804, 0x304c,
+ 0x2528, 0x0116, 0x0d3a, 0x1904, 0x314c,
+ 0x2628, 0x0216, 0x0e3a, 0x1a04, 0x324c,
+ 0x262a, 0x0218, 0x0e3c, 0x1a06, 0x324e,
+ 0x252a, 0x0118, 0x0d3c, 0x1906, 0x314e,
+ 0x242a, 0x0018, 0x0c3c, 0x1806, 0x304e,
+ 0x242c, 0x001a, 0x0c3e, 0x1808, 0x3050,
+ 0x252c, 0x011a, 0x0d3e, 0x1908, 0x3150,
+ 0x262c, 0x021a, 0x0e3e, 0x1a08, 0x3250,
+ 0x262e, 0x021c, 0x0e40, 0x1a0a, 0x3252,
+ 0x252e, 0x011c, 0x0d40, 0x190a, 0x3152,
+ 0x242e, 0x001c, 0x0c40, 0x180a, 0x3052,
+ 0x2430, 0x001e, 0x0c42, 0x180c, 0x3054,
+ 0x2530, 0x011e, 0x0d42, 0x190c, 0x3154,
+ 0x2630, 0x021e, 0x0e42, 0x1a0c, 0x3254,
+ 0x2632, 0x0220, 0x0e44, 0x1a0e, 0x3256,
+ 0x2532, 0x0120, 0x0d44, 0x190e, 0x3156,
+ 0x2432, 0x0020, 0x0c44, 0x180e, 0x3056,
+ 0x2434, 0x0022, 0x0c46, 0x1810, 0x3058,
+ 0x2534, 0x0122, 0x0d46, 0x1910, 0x3158,
+ 0x2634, 0x0222, 0x0e46, 0x1a10, 0x3258,
+ 0x2a24, 0x0612, 0x1236, 0x1e00, 0x3648,
+ 0x2b24, 0x0712, 0x1336, 0x1f00, 0x3748,
+ 0x2c24, 0x0812, 0x1436, 0x2000, 0x3848,
+ 0x2c26, 0x0814, 0x1438, 0x2002, 0x384a,
+ 0x2b26, 0x0714, 0x1338, 0x1f02, 0x374a,
+ 0x2a26, 0x0614, 0x1238, 0x1e02, 0x364a,
+ 0x2a28, 0x0616, 0x123a, 0x1e04, 0x364c,
+ 0x2b28, 0x0716, 0x133a, 0x1f04, 0x374c,
+ 0x2c28, 0x0816, 0x143a, 0x2004, 0x384c,
+ 0x2c2a, 0x0818, 0x143c, 0x2006, 0x384e,
+ 0x2b2a, 0x0718, 0x133c, 0x1f06, 0x374e,
+ 0x2a2a, 0x0618, 0x123c, 0x1e06, 0x364e,
+ 0x2a2c, 0x061a, 0x123e, 0x1e08, 0x3650,
+ 0x2b2c, 0x071a, 0x133e, 0x1f08, 0x3750,
+ 0x2c2c, 0x081a, 0x143e, 0x2008, 0x3850,
+ 0x2c2e, 0x081c, 0x1440, 0x200a, 0x3852,
+ 0x2b2e, 0x071c, 0x1340, 0x1f0a, 0x3752,
+ 0x2a2e, 0x061c, 0x1240, 0x1e0a, 0x3652,
+ 0x2a30, 0x061e, 0x1242, 0x1e0c, 0x3654,
+ 0x2b30, 0x071e, 0x1342, 0x1f0c, 0x3754,
+ 0x2c30, 0x081e, 0x1442, 0x200c, 0x3854,
+ 0x2c32, 0x0820, 0x1444, 0x200e, 0x3856,
+ 0x2b32, 0x0720, 0x1344, 0x1f0e, 0x3756,
+ 0x2a32, 0x0620, 0x1244, 0x1e0e, 0x3656,
+ 0x2a34, 0x0622, 0x1246, 0x1e10, 0x3658,
+ 0x2b34, 0x0722, 0x1346, 0x1f10, 0x3758,
+ 0x2c34, 0x0822, 0x1446, 0x2010, 0x3858,
+ 0x3024, 0x0c12, 0x1836, 0x2400, 0x0048,
+ 0x3124, 0x0d12, 0x1936, 0x2500, 0x0148,
+ 0x3224, 0x0e12, 0x1a36, 0x2600, 0x0248,
+ 0x3226, 0x0e14, 0x1a38, 0x2602, 0x024a,
+ 0x3126, 0x0d14, 0x1938, 0x2502, 0x014a,
+ 0x3026, 0x0c14, 0x1838, 0x2402, 0x004a,
+ 0x3028, 0x0c16, 0x183a, 0x2404, 0x004c,
+ 0x3128, 0x0d16, 0x193a, 0x2504, 0x014c,
+ 0x3228, 0x0e16, 0x1a3a, 0x2604, 0x024c,
+ 0x322a, 0x0e18, 0x1a3c, 0x2606, 0x024e,
+ 0x312a, 0x0d18, 0x193c, 0x2506, 0x014e,
+ 0x302a, 0x0c18, 0x183c, 0x2406, 0x004e,
+ 0x302c, 0x0c1a, 0x183e, 0x2408, 0x0050,
+ 0x312c, 0x0d1a, 0x193e, 0x2508, 0x0150,
+ 0x322c, 0x0e1a, 0x1a3e, 0x2608, 0x0250,
+ 0x322e, 0x0e1c, 0x1a40, 0x260a, 0x0252,
+ 0x312e, 0x0d1c, 0x1940, 0x250a, 0x0152,
+ 0x302e, 0x0c1c, 0x1840, 0x240a, 0x0052,
+ 0x3030, 0x0c1e, 0x1842, 0x240c, 0x0054,
+ 0x3130, 0x0d1e, 0x1942, 0x250c, 0x0154,
+ 0x3230, 0x0e1e, 0x1a42, 0x260c, 0x0254,
+ 0x3232, 0x0e20, 0x1a44, 0x260e, 0x0256,
+ 0x3132, 0x0d20, 0x1944, 0x250e, 0x0156,
+ 0x3032, 0x0c20, 0x1844, 0x240e, 0x0056,
+ 0x3034, 0x0c22, 0x1846, 0x2410, 0x0058,
+ 0x3134, 0x0d22, 0x1946, 0x2510, 0x0158,
+ 0x3234, 0x0e22, 0x1a46, 0x2610, 0x0258,
+ 0x3624, 0x1212, 0x1e36, 0x2a00, 0x0648,
+ 0x3724, 0x1312, 0x1f36, 0x2b00, 0x0748,
+ 0x3824, 0x1412, 0x2036, 0x2c00, 0x0848,
+ 0x3826, 0x1414, 0x2038, 0x2c02, 0x084a,
+ 0x3726, 0x1314, 0x1f38, 0x2b02, 0x074a,
+ 0x3626, 0x1214, 0x1e38, 0x2a02, 0x064a,
+ 0x3628, 0x1216, 0x1e3a, 0x2a04, 0x064c,
+ 0x3728, 0x1316, 0x1f3a, 0x2b04, 0x074c,
+ 0x3828, 0x1416, 0x203a, 0x2c04, 0x084c,
+ 0x382a, 0x1418, 0x203c, 0x2c06, 0x084e,
+ 0x372a, 0x1318, 0x1f3c, 0x2b06, 0x074e,
+ 0x362a, 0x1218, 0x1e3c, 0x2a06, 0x064e,
+ 0x362c, 0x121a, 0x1e3e, 0x2a08, 0x0650,
+ 0x372c, 0x131a, 0x1f3e, 0x2b08, 0x0750,
+ 0x382c, 0x141a, 0x203e, 0x2c08, 0x0850,
+ 0x382e, 0x141c, 0x2040, 0x2c0a, 0x0852,
+ 0x372e, 0x131c, 0x1f40, 0x2b0a, 0x0752,
+ 0x362e, 0x121c, 0x1e40, 0x2a0a, 0x0652,
+ 0x3630, 0x121e, 0x1e42, 0x2a0c, 0x0654,
+ 0x3730, 0x131e, 0x1f42, 0x2b0c, 0x0754,
+ 0x3830, 0x141e, 0x2042, 0x2c0c, 0x0854,
+ 0x3832, 0x1420, 0x2044, 0x2c0e, 0x0856,
+ 0x3732, 0x1320, 0x1f44, 0x2b0e, 0x0756,
+ 0x3632, 0x1220, 0x1e44, 0x2a0e, 0x0656,
+ 0x3634, 0x1222, 0x1e46, 0x2a10, 0x0658,
+ 0x3734, 0x1322, 0x1f46, 0x2b10, 0x0758,
+ 0x3834, 0x1422, 0x2046, 0x2c10, 0x0858,
+ 0x0024, 0x1812, 0x2436, 0x3000, 0x0c48,
+ 0x0124, 0x1912, 0x2536, 0x3100, 0x0d48,
+ 0x0224, 0x1a12, 0x2636, 0x3200, 0x0e48,
+ 0x0226, 0x1a14, 0x2638, 0x3202, 0x0e4a,
+ 0x0126, 0x1914, 0x2538, 0x3102, 0x0d4a,
+ 0x0026, 0x1814, 0x2438, 0x3002, 0x0c4a,
+ 0x0028, 0x1816, 0x243a, 0x3004, 0x0c4c,
+ 0x0128, 0x1916, 0x253a, 0x3104, 0x0d4c,
+ 0x0228, 0x1a16, 0x263a, 0x3204, 0x0e4c,
+ 0x022a, 0x1a18, 0x263c, 0x3206, 0x0e4e,
+ 0x012a, 0x1918, 0x253c, 0x3106, 0x0d4e,
+ 0x002a, 0x1818, 0x243c, 0x3006, 0x0c4e,
+ 0x002c, 0x181a, 0x243e, 0x3008, 0x0c50,
+ 0x012c, 0x191a, 0x253e, 0x3108, 0x0d50,
+ 0x022c, 0x1a1a, 0x263e, 0x3208, 0x0e50,
+ 0x022e, 0x1a1c, 0x2640, 0x320a, 0x0e52,
+ 0x012e, 0x191c, 0x2540, 0x310a, 0x0d52,
+ 0x002e, 0x181c, 0x2440, 0x300a, 0x0c52,
+ 0x0030, 0x181e, 0x2442, 0x300c, 0x0c54,
+ 0x0130, 0x191e, 0x2542, 0x310c, 0x0d54,
+ 0x0230, 0x1a1e, 0x2642, 0x320c, 0x0e54,
+ 0x0232, 0x1a20, 0x2644, 0x320e, 0x0e56,
+ 0x0132, 0x1920, 0x2544, 0x310e, 0x0d56,
+ 0x0032, 0x1820, 0x2444, 0x300e, 0x0c56,
+ 0x0034, 0x1822, 0x2446, 0x3010, 0x0c58,
+ 0x0134, 0x1922, 0x2546, 0x3110, 0x0d58,
+ 0x0234, 0x1a22, 0x2646, 0x3210, 0x0e58,
+ 0x0624, 0x1e12, 0x2a36, 0x3600, 0x1248,
+ 0x0724, 0x1f12, 0x2b36, 0x3700, 0x1348,
+ 0x0824, 0x2012, 0x2c36, 0x3800, 0x1448,
+ 0x0826, 0x2014, 0x2c38, 0x3802, 0x144a,
+ 0x0726, 0x1f14, 0x2b38, 0x3702, 0x134a,
+ 0x0626, 0x1e14, 0x2a38, 0x3602, 0x124a,
+ 0x0628, 0x1e16, 0x2a3a, 0x3604, 0x124c,
+ 0x0728, 0x1f16, 0x2b3a, 0x3704, 0x134c,
+ 0x0828, 0x2016, 0x2c3a, 0x3804, 0x144c,
+ 0x082a, 0x2018, 0x2c3c, 0x3806, 0x144e,
+ 0x072a, 0x1f18, 0x2b3c, 0x3706, 0x134e,
+ 0x062a, 0x1e18, 0x2a3c, 0x3606, 0x124e,
+ 0x062c, 0x1e1a, 0x2a3e, 0x3608, 0x1250,
+ 0x072c, 0x1f1a, 0x2b3e, 0x3708, 0x1350,
+ 0x082c, 0x201a, 0x2c3e, 0x3808, 0x1450,
+ 0x082e, 0x201c, 0x2c40, 0x380a, 0x1452,
+ 0x072e, 0x1f1c, 0x2b40, 0x370a, 0x1352,
+ 0x062e, 0x1e1c, 0x2a40, 0x360a, 0x1252,
+ 0x0630, 0x1e1e, 0x2a42, 0x360c, 0x1254,
+ 0x0730, 0x1f1e, 0x2b42, 0x370c, 0x1354,
+ 0x0830, 0x201e, 0x2c42, 0x380c, 0x1454,
+ 0x0832, 0x2020, 0x2c44, 0x380e, 0x1456,
+ 0x0732, 0x1f20, 0x2b44, 0x370e, 0x1356,
+ 0x0632, 0x1e20, 0x2a44, 0x360e, 0x1256,
+ 0x0634, 0x1e22, 0x2a46, 0x3610, 0x1258,
+ 0x0734, 0x1f22, 0x2b46, 0x3710, 0x1358,
+ 0x0834, 0x2022, 0x2c46, 0x3810, 0x1458,
+ 0x0f24, 0x2712, 0x3336, 0x0300, 0x1b48,
+ 0x1024, 0x2812, 0x3436, 0x0400, 0x1c48,
+ 0x1124, 0x2912, 0x3536, 0x0500, 0x1d48,
+ 0x1126, 0x2914, 0x3538, 0x0502, 0x1d4a,
+ 0x1026, 0x2814, 0x3438, 0x0402, 0x1c4a,
+ 0x0f26, 0x2714, 0x3338, 0x0302, 0x1b4a,
+ 0x0f28, 0x2716, 0x333a, 0x0304, 0x1b4c,
+ 0x1028, 0x2816, 0x343a, 0x0404, 0x1c4c,
+ 0x1128, 0x2916, 0x353a, 0x0504, 0x1d4c,
+ 0x112a, 0x2918, 0x353c, 0x0506, 0x1d4e,
+ 0x102a, 0x2818, 0x343c, 0x0406, 0x1c4e,
+ 0x0f2a, 0x2718, 0x333c, 0x0306, 0x1b4e,
+ 0x0f2c, 0x271a, 0x333e, 0x0308, 0x1b50,
+ 0x102c, 0x281a, 0x343e, 0x0408, 0x1c50,
+ 0x112c, 0x291a, 0x353e, 0x0508, 0x1d50,
+ 0x112e, 0x291c, 0x3540, 0x050a, 0x1d52,
+ 0x102e, 0x281c, 0x3440, 0x040a, 0x1c52,
+ 0x0f2e, 0x271c, 0x3340, 0x030a, 0x1b52,
+ 0x0f30, 0x271e, 0x3342, 0x030c, 0x1b54,
+ 0x1030, 0x281e, 0x3442, 0x040c, 0x1c54,
+ 0x1130, 0x291e, 0x3542, 0x050c, 0x1d54,
+ 0x1132, 0x2920, 0x3544, 0x050e, 0x1d56,
+ 0x1032, 0x2820, 0x3444, 0x040e, 0x1c56,
+ 0x0f32, 0x2720, 0x3344, 0x030e, 0x1b56,
+ 0x0f34, 0x2722, 0x3346, 0x0310, 0x1b58,
+ 0x1034, 0x2822, 0x3446, 0x0410, 0x1c58,
+ 0x1134, 0x2922, 0x3546, 0x0510, 0x1d58,
+ 0x1524, 0x2d12, 0x3936, 0x0900, 0x2148,
+ 0x1624, 0x2e12, 0x3a36, 0x0a00, 0x2248,
+ 0x1724, 0x2f12, 0x3b36, 0x0b00, 0x2348,
+ 0x1726, 0x2f14, 0x3b38, 0x0b02, 0x234a,
+ 0x1626, 0x2e14, 0x3a38, 0x0a02, 0x224a,
+ 0x1526, 0x2d14, 0x3938, 0x0902, 0x214a,
+ 0x1528, 0x2d16, 0x393a, 0x0904, 0x214c,
+ 0x1628, 0x2e16, 0x3a3a, 0x0a04, 0x224c,
+ 0x1728, 0x2f16, 0x3b3a, 0x0b04, 0x234c,
+ 0x172a, 0x2f18, 0x3b3c, 0x0b06, 0x234e,
+ 0x162a, 0x2e18, 0x3a3c, 0x0a06, 0x224e,
+ 0x152a, 0x2d18, 0x393c, 0x0906, 0x214e,
+ 0x152c, 0x2d1a, 0x393e, 0x0908, 0x2150,
+ 0x162c, 0x2e1a, 0x3a3e, 0x0a08, 0x2250,
+ 0x172c, 0x2f1a, 0x3b3e, 0x0b08, 0x2350,
+ 0x172e, 0x2f1c, 0x3b40, 0x0b0a, 0x2352,
+ 0x162e, 0x2e1c, 0x3a40, 0x0a0a, 0x2252,
+ 0x152e, 0x2d1c, 0x3940, 0x090a, 0x2152,
+ 0x1530, 0x2d1e, 0x3942, 0x090c, 0x2154,
+ 0x1630, 0x2e1e, 0x3a42, 0x0a0c, 0x2254,
+ 0x1730, 0x2f1e, 0x3b42, 0x0b0c, 0x2354,
+ 0x1732, 0x2f20, 0x3b44, 0x0b0e, 0x2356,
+ 0x1632, 0x2e20, 0x3a44, 0x0a0e, 0x2256,
+ 0x1532, 0x2d20, 0x3944, 0x090e, 0x2156,
+ 0x1534, 0x2d22, 0x3946, 0x0910, 0x2158,
+ 0x1634, 0x2e22, 0x3a46, 0x0a10, 0x2258,
+ 0x1734, 0x2f22, 0x3b46, 0x0b10, 0x2358,
+ 0x1b24, 0x3312, 0x0336, 0x0f00, 0x2748,
+ 0x1c24, 0x3412, 0x0436, 0x1000, 0x2848,
+ 0x1d24, 0x3512, 0x0536, 0x1100, 0x2948,
+ 0x1d26, 0x3514, 0x0538, 0x1102, 0x294a,
+ 0x1c26, 0x3414, 0x0438, 0x1002, 0x284a,
+ 0x1b26, 0x3314, 0x0338, 0x0f02, 0x274a,
+ 0x1b28, 0x3316, 0x033a, 0x0f04, 0x274c,
+ 0x1c28, 0x3416, 0x043a, 0x1004, 0x284c,
+ 0x1d28, 0x3516, 0x053a, 0x1104, 0x294c,
+ 0x1d2a, 0x3518, 0x053c, 0x1106, 0x294e,
+ 0x1c2a, 0x3418, 0x043c, 0x1006, 0x284e,
+ 0x1b2a, 0x3318, 0x033c, 0x0f06, 0x274e,
+ 0x1b2c, 0x331a, 0x033e, 0x0f08, 0x2750,
+ 0x1c2c, 0x341a, 0x043e, 0x1008, 0x2850,
+ 0x1d2c, 0x351a, 0x053e, 0x1108, 0x2950,
+ 0x1d2e, 0x351c, 0x0540, 0x110a, 0x2952,
+ 0x1c2e, 0x341c, 0x0440, 0x100a, 0x2852,
+ 0x1b2e, 0x331c, 0x0340, 0x0f0a, 0x2752,
+ 0x1b30, 0x331e, 0x0342, 0x0f0c, 0x2754,
+ 0x1c30, 0x341e, 0x0442, 0x100c, 0x2854,
+ 0x1d30, 0x351e, 0x0542, 0x110c, 0x2954,
+ 0x1d32, 0x3520, 0x0544, 0x110e, 0x2956,
+ 0x1c32, 0x3420, 0x0444, 0x100e, 0x2856,
+ 0x1b32, 0x3320, 0x0344, 0x0f0e, 0x2756,
+ 0x1b34, 0x3322, 0x0346, 0x0f10, 0x2758,
+ 0x1c34, 0x3422, 0x0446, 0x1010, 0x2858,
+ 0x1d34, 0x3522, 0x0546, 0x1110, 0x2958,
+ 0x2124, 0x3912, 0x0936, 0x1500, 0x2d48,
+ 0x2224, 0x3a12, 0x0a36, 0x1600, 0x2e48,
+ 0x2324, 0x3b12, 0x0b36, 0x1700, 0x2f48,
+ 0x2326, 0x3b14, 0x0b38, 0x1702, 0x2f4a,
+ 0x2226, 0x3a14, 0x0a38, 0x1602, 0x2e4a,
+ 0x2126, 0x3914, 0x0938, 0x1502, 0x2d4a,
+ 0x2128, 0x3916, 0x093a, 0x1504, 0x2d4c,
+ 0x2228, 0x3a16, 0x0a3a, 0x1604, 0x2e4c,
+ 0x2328, 0x3b16, 0x0b3a, 0x1704, 0x2f4c,
+ 0x232a, 0x3b18, 0x0b3c, 0x1706, 0x2f4e,
+ 0x222a, 0x3a18, 0x0a3c, 0x1606, 0x2e4e,
+ 0x212a, 0x3918, 0x093c, 0x1506, 0x2d4e,
+ 0x212c, 0x391a, 0x093e, 0x1508, 0x2d50,
+ 0x222c, 0x3a1a, 0x0a3e, 0x1608, 0x2e50,
+ 0x232c, 0x3b1a, 0x0b3e, 0x1708, 0x2f50,
+ 0x232e, 0x3b1c, 0x0b40, 0x170a, 0x2f52,
+ 0x222e, 0x3a1c, 0x0a40, 0x160a, 0x2e52,
+ 0x212e, 0x391c, 0x0940, 0x150a, 0x2d52,
+ 0x2130, 0x391e, 0x0942, 0x150c, 0x2d54,
+ 0x2230, 0x3a1e, 0x0a42, 0x160c, 0x2e54,
+ 0x2330, 0x3b1e, 0x0b42, 0x170c, 0x2f54,
+ 0x2332, 0x3b20, 0x0b44, 0x170e, 0x2f56,
+ 0x2232, 0x3a20, 0x0a44, 0x160e, 0x2e56,
+ 0x2132, 0x3920, 0x0944, 0x150e, 0x2d56,
+ 0x2134, 0x3922, 0x0946, 0x1510, 0x2d58,
+ 0x2234, 0x3a22, 0x0a46, 0x1610, 0x2e58,
+ 0x2334, 0x3b22, 0x0b46, 0x1710, 0x2f58,
+ 0x2724, 0x0312, 0x0f36, 0x1b00, 0x3348,
+ 0x2824, 0x0412, 0x1036, 0x1c00, 0x3448,
+ 0x2924, 0x0512, 0x1136, 0x1d00, 0x3548,
+ 0x2926, 0x0514, 0x1138, 0x1d02, 0x354a,
+ 0x2826, 0x0414, 0x1038, 0x1c02, 0x344a,
+ 0x2726, 0x0314, 0x0f38, 0x1b02, 0x334a,
+ 0x2728, 0x0316, 0x0f3a, 0x1b04, 0x334c,
+ 0x2828, 0x0416, 0x103a, 0x1c04, 0x344c,
+ 0x2928, 0x0516, 0x113a, 0x1d04, 0x354c,
+ 0x292a, 0x0518, 0x113c, 0x1d06, 0x354e,
+ 0x282a, 0x0418, 0x103c, 0x1c06, 0x344e,
+ 0x272a, 0x0318, 0x0f3c, 0x1b06, 0x334e,
+ 0x272c, 0x031a, 0x0f3e, 0x1b08, 0x3350,
+ 0x282c, 0x041a, 0x103e, 0x1c08, 0x3450,
+ 0x292c, 0x051a, 0x113e, 0x1d08, 0x3550,
+ 0x292e, 0x051c, 0x1140, 0x1d0a, 0x3552,
+ 0x282e, 0x041c, 0x1040, 0x1c0a, 0x3452,
+ 0x272e, 0x031c, 0x0f40, 0x1b0a, 0x3352,
+ 0x2730, 0x031e, 0x0f42, 0x1b0c, 0x3354,
+ 0x2830, 0x041e, 0x1042, 0x1c0c, 0x3454,
+ 0x2930, 0x051e, 0x1142, 0x1d0c, 0x3554,
+ 0x2932, 0x0520, 0x1144, 0x1d0e, 0x3556,
+ 0x2832, 0x0420, 0x1044, 0x1c0e, 0x3456,
+ 0x2732, 0x0320, 0x0f44, 0x1b0e, 0x3356,
+ 0x2734, 0x0322, 0x0f46, 0x1b10, 0x3358,
+ 0x2834, 0x0422, 0x1046, 0x1c10, 0x3458,
+ 0x2934, 0x0522, 0x1146, 0x1d10, 0x3558,
+ 0x2d24, 0x0912, 0x1536, 0x2100, 0x3948,
+ 0x2e24, 0x0a12, 0x1636, 0x2200, 0x3a48,
+ 0x2f24, 0x0b12, 0x1736, 0x2300, 0x3b48,
+ 0x2f26, 0x0b14, 0x1738, 0x2302, 0x3b4a,
+ 0x2e26, 0x0a14, 0x1638, 0x2202, 0x3a4a,
+ 0x2d26, 0x0914, 0x1538, 0x2102, 0x394a,
+ 0x2d28, 0x0916, 0x153a, 0x2104, 0x394c,
+ 0x2e28, 0x0a16, 0x163a, 0x2204, 0x3a4c,
+ 0x2f28, 0x0b16, 0x173a, 0x2304, 0x3b4c,
+ 0x2f2a, 0x0b18, 0x173c, 0x2306, 0x3b4e,
+ 0x2e2a, 0x0a18, 0x163c, 0x2206, 0x3a4e,
+ 0x2d2a, 0x0918, 0x153c, 0x2106, 0x394e,
+ 0x2d2c, 0x091a, 0x153e, 0x2108, 0x3950,
+ 0x2e2c, 0x0a1a, 0x163e, 0x2208, 0x3a50,
+ 0x2f2c, 0x0b1a, 0x173e, 0x2308, 0x3b50,
+ 0x2f2e, 0x0b1c, 0x1740, 0x230a, 0x3b52,
+ 0x2e2e, 0x0a1c, 0x1640, 0x220a, 0x3a52,
+ 0x2d2e, 0x091c, 0x1540, 0x210a, 0x3952,
+ 0x2d30, 0x091e, 0x1542, 0x210c, 0x3954,
+ 0x2e30, 0x0a1e, 0x1642, 0x220c, 0x3a54,
+ 0x2f30, 0x0b1e, 0x1742, 0x230c, 0x3b54,
+ 0x2f32, 0x0b20, 0x1744, 0x230e, 0x3b56,
+ 0x2e32, 0x0a20, 0x1644, 0x220e, 0x3a56,
+ 0x2d32, 0x0920, 0x1544, 0x210e, 0x3956,
+ 0x2d34, 0x0922, 0x1546, 0x2110, 0x3958,
+ 0x2e34, 0x0a22, 0x1646, 0x2210, 0x3a58,
+ 0x2f34, 0x0b22, 0x1746, 0x2310, 0x3b58,
+ 0x3324, 0x0f12, 0x1b36, 0x2700, 0x0348,
+ 0x3424, 0x1012, 0x1c36, 0x2800, 0x0448,
+ 0x3524, 0x1112, 0x1d36, 0x2900, 0x0548,
+ 0x3526, 0x1114, 0x1d38, 0x2902, 0x054a,
+ 0x3426, 0x1014, 0x1c38, 0x2802, 0x044a,
+ 0x3326, 0x0f14, 0x1b38, 0x2702, 0x034a,
+ 0x3328, 0x0f16, 0x1b3a, 0x2704, 0x034c,
+ 0x3428, 0x1016, 0x1c3a, 0x2804, 0x044c,
+ 0x3528, 0x1116, 0x1d3a, 0x2904, 0x054c,
+ 0x352a, 0x1118, 0x1d3c, 0x2906, 0x054e,
+ 0x342a, 0x1018, 0x1c3c, 0x2806, 0x044e,
+ 0x332a, 0x0f18, 0x1b3c, 0x2706, 0x034e,
+ 0x332c, 0x0f1a, 0x1b3e, 0x2708, 0x0350,
+ 0x342c, 0x101a, 0x1c3e, 0x2808, 0x0450,
+ 0x352c, 0x111a, 0x1d3e, 0x2908, 0x0550,
+ 0x352e, 0x111c, 0x1d40, 0x290a, 0x0552,
+ 0x342e, 0x101c, 0x1c40, 0x280a, 0x0452,
+ 0x332e, 0x0f1c, 0x1b40, 0x270a, 0x0352,
+ 0x3330, 0x0f1e, 0x1b42, 0x270c, 0x0354,
+ 0x3430, 0x101e, 0x1c42, 0x280c, 0x0454,
+ 0x3530, 0x111e, 0x1d42, 0x290c, 0x0554,
+ 0x3532, 0x1120, 0x1d44, 0x290e, 0x0556,
+ 0x3432, 0x1020, 0x1c44, 0x280e, 0x0456,
+ 0x3332, 0x0f20, 0x1b44, 0x270e, 0x0356,
+ 0x3334, 0x0f22, 0x1b46, 0x2710, 0x0358,
+ 0x3434, 0x1022, 0x1c46, 0x2810, 0x0458,
+ 0x3534, 0x1122, 0x1d46, 0x2910, 0x0558,
+ 0x3924, 0x1512, 0x2136, 0x2d00, 0x0948,
+ 0x3a24, 0x1612, 0x2236, 0x2e00, 0x0a48,
+ 0x3b24, 0x1712, 0x2336, 0x2f00, 0x0b48,
+ 0x3b26, 0x1714, 0x2338, 0x2f02, 0x0b4a,
+ 0x3a26, 0x1614, 0x2238, 0x2e02, 0x0a4a,
+ 0x3926, 0x1514, 0x2138, 0x2d02, 0x094a,
+ 0x3928, 0x1516, 0x213a, 0x2d04, 0x094c,
+ 0x3a28, 0x1616, 0x223a, 0x2e04, 0x0a4c,
+ 0x3b28, 0x1716, 0x233a, 0x2f04, 0x0b4c,
+ 0x3b2a, 0x1718, 0x233c, 0x2f06, 0x0b4e,
+ 0x3a2a, 0x1618, 0x223c, 0x2e06, 0x0a4e,
+ 0x392a, 0x1518, 0x213c, 0x2d06, 0x094e,
+ 0x392c, 0x151a, 0x213e, 0x2d08, 0x0950,
+ 0x3a2c, 0x161a, 0x223e, 0x2e08, 0x0a50,
+ 0x3b2c, 0x171a, 0x233e, 0x2f08, 0x0b50,
+ 0x3b2e, 0x171c, 0x2340, 0x2f0a, 0x0b52,
+ 0x3a2e, 0x161c, 0x2240, 0x2e0a, 0x0a52,
+ 0x392e, 0x151c, 0x2140, 0x2d0a, 0x0952,
+ 0x3930, 0x151e, 0x2142, 0x2d0c, 0x0954,
+ 0x3a30, 0x161e, 0x2242, 0x2e0c, 0x0a54,
+ 0x3b30, 0x171e, 0x2342, 0x2f0c, 0x0b54,
+ 0x3b32, 0x1720, 0x2344, 0x2f0e, 0x0b56,
+ 0x3a32, 0x1620, 0x2244, 0x2e0e, 0x0a56,
+ 0x3932, 0x1520, 0x2144, 0x2d0e, 0x0956,
+ 0x3934, 0x1522, 0x2146, 0x2d10, 0x0958,
+ 0x3a34, 0x1622, 0x2246, 0x2e10, 0x0a58,
+ 0x3b34, 0x1722, 0x2346, 0x2f10, 0x0b58,
+ 0x0324, 0x1b12, 0x2736, 0x3300, 0x0f48,
+ 0x0424, 0x1c12, 0x2836, 0x3400, 0x1048,
+ 0x0524, 0x1d12, 0x2936, 0x3500, 0x1148,
+ 0x0526, 0x1d14, 0x2938, 0x3502, 0x114a,
+ 0x0426, 0x1c14, 0x2838, 0x3402, 0x104a,
+ 0x0326, 0x1b14, 0x2738, 0x3302, 0x0f4a,
+ 0x0328, 0x1b16, 0x273a, 0x3304, 0x0f4c,
+ 0x0428, 0x1c16, 0x283a, 0x3404, 0x104c,
+ 0x0528, 0x1d16, 0x293a, 0x3504, 0x114c,
+ 0x052a, 0x1d18, 0x293c, 0x3506, 0x114e,
+ 0x042a, 0x1c18, 0x283c, 0x3406, 0x104e,
+ 0x032a, 0x1b18, 0x273c, 0x3306, 0x0f4e,
+ 0x032c, 0x1b1a, 0x273e, 0x3308, 0x0f50,
+ 0x042c, 0x1c1a, 0x283e, 0x3408, 0x1050,
+ 0x052c, 0x1d1a, 0x293e, 0x3508, 0x1150,
+ 0x052e, 0x1d1c, 0x2940, 0x350a, 0x1152,
+ 0x042e, 0x1c1c, 0x2840, 0x340a, 0x1052,
+ 0x032e, 0x1b1c, 0x2740, 0x330a, 0x0f52,
+ 0x0330, 0x1b1e, 0x2742, 0x330c, 0x0f54,
+ 0x0430, 0x1c1e, 0x2842, 0x340c, 0x1054,
+ 0x0530, 0x1d1e, 0x2942, 0x350c, 0x1154,
+ 0x0532, 0x1d20, 0x2944, 0x350e, 0x1156,
+ 0x0432, 0x1c20, 0x2844, 0x340e, 0x1056,
+ 0x0332, 0x1b20, 0x2744, 0x330e, 0x0f56,
+ 0x0334, 0x1b22, 0x2746, 0x3310, 0x0f58,
+ 0x0434, 0x1c22, 0x2846, 0x3410, 0x1058,
+ 0x0534, 0x1d22, 0x2946, 0x3510, 0x1158,
+ 0x0924, 0x2112, 0x2d36, 0x3900, 0x1548,
+ 0x0a24, 0x2212, 0x2e36, 0x3a00, 0x1648,
+ 0x0b24, 0x2312, 0x2f36, 0x3b00, 0x1748,
+ 0x0b26, 0x2314, 0x2f38, 0x3b02, 0x174a,
+ 0x0a26, 0x2214, 0x2e38, 0x3a02, 0x164a,
+ 0x0926, 0x2114, 0x2d38, 0x3902, 0x154a,
+ 0x0928, 0x2116, 0x2d3a, 0x3904, 0x154c,
+ 0x0a28, 0x2216, 0x2e3a, 0x3a04, 0x164c,
+ 0x0b28, 0x2316, 0x2f3a, 0x3b04, 0x174c,
+ 0x0b2a, 0x2318, 0x2f3c, 0x3b06, 0x174e,
+ 0x0a2a, 0x2218, 0x2e3c, 0x3a06, 0x164e,
+ 0x092a, 0x2118, 0x2d3c, 0x3906, 0x154e,
+ 0x092c, 0x211a, 0x2d3e, 0x3908, 0x1550,
+ 0x0a2c, 0x221a, 0x2e3e, 0x3a08, 0x1650,
+ 0x0b2c, 0x231a, 0x2f3e, 0x3b08, 0x1750,
+ 0x0b2e, 0x231c, 0x2f40, 0x3b0a, 0x1752,
+ 0x0a2e, 0x221c, 0x2e40, 0x3a0a, 0x1652,
+ 0x092e, 0x211c, 0x2d40, 0x390a, 0x1552,
+ 0x0930, 0x211e, 0x2d42, 0x390c, 0x1554,
+ 0x0a30, 0x221e, 0x2e42, 0x3a0c, 0x1654,
+ 0x0b30, 0x231e, 0x2f42, 0x3b0c, 0x1754,
+ 0x0b32, 0x2320, 0x2f44, 0x3b0e, 0x1756,
+ 0x0a32, 0x2220, 0x2e44, 0x3a0e, 0x1656,
+ 0x0932, 0x2120, 0x2d44, 0x390e, 0x1556,
+ 0x0934, 0x2122, 0x2d46, 0x3910, 0x1558,
+ 0x0a34, 0x2222, 0x2e46, 0x3a10, 0x1658,
+ 0x0b34, 0x2322, 0x2f46, 0x3b10, 0x1758,
+};
+
+/* 2 channels per frame, 12 DIF sequences per channel,
+   27 video segments per DIF sequence, 5 macroblocks per video segment */
+static const uint16_t dv_place_422_625[2*12*27*5] = {
+ 0x0c24, 0x2412, 0x3036, 0x0000, 0x1848,
+ 0x0d24, 0x2512, 0x3136, 0x0100, 0x1948,
+ 0x0e24, 0x2612, 0x3236, 0x0200, 0x1a48,
+ 0x0e26, 0x2614, 0x3238, 0x0202, 0x1a4a,
+ 0x0d26, 0x2514, 0x3138, 0x0102, 0x194a,
+ 0x0c26, 0x2414, 0x3038, 0x0002, 0x184a,
+ 0x0c28, 0x2416, 0x303a, 0x0004, 0x184c,
+ 0x0d28, 0x2516, 0x313a, 0x0104, 0x194c,
+ 0x0e28, 0x2616, 0x323a, 0x0204, 0x1a4c,
+ 0x0e2a, 0x2618, 0x323c, 0x0206, 0x1a4e,
+ 0x0d2a, 0x2518, 0x313c, 0x0106, 0x194e,
+ 0x0c2a, 0x2418, 0x303c, 0x0006, 0x184e,
+ 0x0c2c, 0x241a, 0x303e, 0x0008, 0x1850,
+ 0x0d2c, 0x251a, 0x313e, 0x0108, 0x1950,
+ 0x0e2c, 0x261a, 0x323e, 0x0208, 0x1a50,
+ 0x0e2e, 0x261c, 0x3240, 0x020a, 0x1a52,
+ 0x0d2e, 0x251c, 0x3140, 0x010a, 0x1952,
+ 0x0c2e, 0x241c, 0x3040, 0x000a, 0x1852,
+ 0x0c30, 0x241e, 0x3042, 0x000c, 0x1854,
+ 0x0d30, 0x251e, 0x3142, 0x010c, 0x1954,
+ 0x0e30, 0x261e, 0x3242, 0x020c, 0x1a54,
+ 0x0e32, 0x2620, 0x3244, 0x020e, 0x1a56,
+ 0x0d32, 0x2520, 0x3144, 0x010e, 0x1956,
+ 0x0c32, 0x2420, 0x3044, 0x000e, 0x1856,
+ 0x0c34, 0x2422, 0x3046, 0x0010, 0x1858,
+ 0x0d34, 0x2522, 0x3146, 0x0110, 0x1958,
+ 0x0e34, 0x2622, 0x3246, 0x0210, 0x1a58,
+ 0x1224, 0x2a12, 0x3636, 0x0600, 0x1e48,
+ 0x1324, 0x2b12, 0x3736, 0x0700, 0x1f48,
+ 0x1424, 0x2c12, 0x3836, 0x0800, 0x2048,
+ 0x1426, 0x2c14, 0x3838, 0x0802, 0x204a,
+ 0x1326, 0x2b14, 0x3738, 0x0702, 0x1f4a,
+ 0x1226, 0x2a14, 0x3638, 0x0602, 0x1e4a,
+ 0x1228, 0x2a16, 0x363a, 0x0604, 0x1e4c,
+ 0x1328, 0x2b16, 0x373a, 0x0704, 0x1f4c,
+ 0x1428, 0x2c16, 0x383a, 0x0804, 0x204c,
+ 0x142a, 0x2c18, 0x383c, 0x0806, 0x204e,
+ 0x132a, 0x2b18, 0x373c, 0x0706, 0x1f4e,
+ 0x122a, 0x2a18, 0x363c, 0x0606, 0x1e4e,
+ 0x122c, 0x2a1a, 0x363e, 0x0608, 0x1e50,
+ 0x132c, 0x2b1a, 0x373e, 0x0708, 0x1f50,
+ 0x142c, 0x2c1a, 0x383e, 0x0808, 0x2050,
+ 0x142e, 0x2c1c, 0x3840, 0x080a, 0x2052,
+ 0x132e, 0x2b1c, 0x3740, 0x070a, 0x1f52,
+ 0x122e, 0x2a1c, 0x3640, 0x060a, 0x1e52,
+ 0x1230, 0x2a1e, 0x3642, 0x060c, 0x1e54,
+ 0x1330, 0x2b1e, 0x3742, 0x070c, 0x1f54,
+ 0x1430, 0x2c1e, 0x3842, 0x080c, 0x2054,
+ 0x1432, 0x2c20, 0x3844, 0x080e, 0x2056,
+ 0x1332, 0x2b20, 0x3744, 0x070e, 0x1f56,
+ 0x1232, 0x2a20, 0x3644, 0x060e, 0x1e56,
+ 0x1234, 0x2a22, 0x3646, 0x0610, 0x1e58,
+ 0x1334, 0x2b22, 0x3746, 0x0710, 0x1f58,
+ 0x1434, 0x2c22, 0x3846, 0x0810, 0x2058,
+ 0x1824, 0x3012, 0x3c36, 0x0c00, 0x2448,
+ 0x1924, 0x3112, 0x3d36, 0x0d00, 0x2548,
+ 0x1a24, 0x3212, 0x3e36, 0x0e00, 0x2648,
+ 0x1a26, 0x3214, 0x3e38, 0x0e02, 0x264a,
+ 0x1926, 0x3114, 0x3d38, 0x0d02, 0x254a,
+ 0x1826, 0x3014, 0x3c38, 0x0c02, 0x244a,
+ 0x1828, 0x3016, 0x3c3a, 0x0c04, 0x244c,
+ 0x1928, 0x3116, 0x3d3a, 0x0d04, 0x254c,
+ 0x1a28, 0x3216, 0x3e3a, 0x0e04, 0x264c,
+ 0x1a2a, 0x3218, 0x3e3c, 0x0e06, 0x264e,
+ 0x192a, 0x3118, 0x3d3c, 0x0d06, 0x254e,
+ 0x182a, 0x3018, 0x3c3c, 0x0c06, 0x244e,
+ 0x182c, 0x301a, 0x3c3e, 0x0c08, 0x2450,
+ 0x192c, 0x311a, 0x3d3e, 0x0d08, 0x2550,
+ 0x1a2c, 0x321a, 0x3e3e, 0x0e08, 0x2650,
+ 0x1a2e, 0x321c, 0x3e40, 0x0e0a, 0x2652,
+ 0x192e, 0x311c, 0x3d40, 0x0d0a, 0x2552,
+ 0x182e, 0x301c, 0x3c40, 0x0c0a, 0x2452,
+ 0x1830, 0x301e, 0x3c42, 0x0c0c, 0x2454,
+ 0x1930, 0x311e, 0x3d42, 0x0d0c, 0x2554,
+ 0x1a30, 0x321e, 0x3e42, 0x0e0c, 0x2654,
+ 0x1a32, 0x3220, 0x3e44, 0x0e0e, 0x2656,
+ 0x1932, 0x3120, 0x3d44, 0x0d0e, 0x2556,
+ 0x1832, 0x3020, 0x3c44, 0x0c0e, 0x2456,
+ 0x1834, 0x3022, 0x3c46, 0x0c10, 0x2458,
+ 0x1934, 0x3122, 0x3d46, 0x0d10, 0x2558,
+ 0x1a34, 0x3222, 0x3e46, 0x0e10, 0x2658,
+ 0x1e24, 0x3612, 0x4236, 0x1200, 0x2a48,
+ 0x1f24, 0x3712, 0x4336, 0x1300, 0x2b48,
+ 0x2024, 0x3812, 0x4436, 0x1400, 0x2c48,
+ 0x2026, 0x3814, 0x4438, 0x1402, 0x2c4a,
+ 0x1f26, 0x3714, 0x4338, 0x1302, 0x2b4a,
+ 0x1e26, 0x3614, 0x4238, 0x1202, 0x2a4a,
+ 0x1e28, 0x3616, 0x423a, 0x1204, 0x2a4c,
+ 0x1f28, 0x3716, 0x433a, 0x1304, 0x2b4c,
+ 0x2028, 0x3816, 0x443a, 0x1404, 0x2c4c,
+ 0x202a, 0x3818, 0x443c, 0x1406, 0x2c4e,
+ 0x1f2a, 0x3718, 0x433c, 0x1306, 0x2b4e,
+ 0x1e2a, 0x3618, 0x423c, 0x1206, 0x2a4e,
+ 0x1e2c, 0x361a, 0x423e, 0x1208, 0x2a50,
+ 0x1f2c, 0x371a, 0x433e, 0x1308, 0x2b50,
+ 0x202c, 0x381a, 0x443e, 0x1408, 0x2c50,
+ 0x202e, 0x381c, 0x4440, 0x140a, 0x2c52,
+ 0x1f2e, 0x371c, 0x4340, 0x130a, 0x2b52,
+ 0x1e2e, 0x361c, 0x4240, 0x120a, 0x2a52,
+ 0x1e30, 0x361e, 0x4242, 0x120c, 0x2a54,
+ 0x1f30, 0x371e, 0x4342, 0x130c, 0x2b54,
+ 0x2030, 0x381e, 0x4442, 0x140c, 0x2c54,
+ 0x2032, 0x3820, 0x4444, 0x140e, 0x2c56,
+ 0x1f32, 0x3720, 0x4344, 0x130e, 0x2b56,
+ 0x1e32, 0x3620, 0x4244, 0x120e, 0x2a56,
+ 0x1e34, 0x3622, 0x4246, 0x1210, 0x2a58,
+ 0x1f34, 0x3722, 0x4346, 0x1310, 0x2b58,
+ 0x2034, 0x3822, 0x4446, 0x1410, 0x2c58,
+ 0x2424, 0x3c12, 0x0036, 0x1800, 0x3048,
+ 0x2524, 0x3d12, 0x0136, 0x1900, 0x3148,
+ 0x2624, 0x3e12, 0x0236, 0x1a00, 0x3248,
+ 0x2626, 0x3e14, 0x0238, 0x1a02, 0x324a,
+ 0x2526, 0x3d14, 0x0138, 0x1902, 0x314a,
+ 0x2426, 0x3c14, 0x0038, 0x1802, 0x304a,
+ 0x2428, 0x3c16, 0x003a, 0x1804, 0x304c,
+ 0x2528, 0x3d16, 0x013a, 0x1904, 0x314c,
+ 0x2628, 0x3e16, 0x023a, 0x1a04, 0x324c,
+ 0x262a, 0x3e18, 0x023c, 0x1a06, 0x324e,
+ 0x252a, 0x3d18, 0x013c, 0x1906, 0x314e,
+ 0x242a, 0x3c18, 0x003c, 0x1806, 0x304e,
+ 0x242c, 0x3c1a, 0x003e, 0x1808, 0x3050,
+ 0x252c, 0x3d1a, 0x013e, 0x1908, 0x3150,
+ 0x262c, 0x3e1a, 0x023e, 0x1a08, 0x3250,
+ 0x262e, 0x3e1c, 0x0240, 0x1a0a, 0x3252,
+ 0x252e, 0x3d1c, 0x0140, 0x190a, 0x3152,
+ 0x242e, 0x3c1c, 0x0040, 0x180a, 0x3052,
+ 0x2430, 0x3c1e, 0x0042, 0x180c, 0x3054,
+ 0x2530, 0x3d1e, 0x0142, 0x190c, 0x3154,
+ 0x2630, 0x3e1e, 0x0242, 0x1a0c, 0x3254,
+ 0x2632, 0x3e20, 0x0244, 0x1a0e, 0x3256,
+ 0x2532, 0x3d20, 0x0144, 0x190e, 0x3156,
+ 0x2432, 0x3c20, 0x0044, 0x180e, 0x3056,
+ 0x2434, 0x3c22, 0x0046, 0x1810, 0x3058,
+ 0x2534, 0x3d22, 0x0146, 0x1910, 0x3158,
+ 0x2634, 0x3e22, 0x0246, 0x1a10, 0x3258,
+ 0x2a24, 0x4212, 0x0636, 0x1e00, 0x3648,
+ 0x2b24, 0x4312, 0x0736, 0x1f00, 0x3748,
+ 0x2c24, 0x4412, 0x0836, 0x2000, 0x3848,
+ 0x2c26, 0x4414, 0x0838, 0x2002, 0x384a,
+ 0x2b26, 0x4314, 0x0738, 0x1f02, 0x374a,
+ 0x2a26, 0x4214, 0x0638, 0x1e02, 0x364a,
+ 0x2a28, 0x4216, 0x063a, 0x1e04, 0x364c,
+ 0x2b28, 0x4316, 0x073a, 0x1f04, 0x374c,
+ 0x2c28, 0x4416, 0x083a, 0x2004, 0x384c,
+ 0x2c2a, 0x4418, 0x083c, 0x2006, 0x384e,
+ 0x2b2a, 0x4318, 0x073c, 0x1f06, 0x374e,
+ 0x2a2a, 0x4218, 0x063c, 0x1e06, 0x364e,
+ 0x2a2c, 0x421a, 0x063e, 0x1e08, 0x3650,
+ 0x2b2c, 0x431a, 0x073e, 0x1f08, 0x3750,
+ 0x2c2c, 0x441a, 0x083e, 0x2008, 0x3850,
+ 0x2c2e, 0x441c, 0x0840, 0x200a, 0x3852,
+ 0x2b2e, 0x431c, 0x0740, 0x1f0a, 0x3752,
+ 0x2a2e, 0x421c, 0x0640, 0x1e0a, 0x3652,
+ 0x2a30, 0x421e, 0x0642, 0x1e0c, 0x3654,
+ 0x2b30, 0x431e, 0x0742, 0x1f0c, 0x3754,
+ 0x2c30, 0x441e, 0x0842, 0x200c, 0x3854,
+ 0x2c32, 0x4420, 0x0844, 0x200e, 0x3856,
+ 0x2b32, 0x4320, 0x0744, 0x1f0e, 0x3756,
+ 0x2a32, 0x4220, 0x0644, 0x1e0e, 0x3656,
+ 0x2a34, 0x4222, 0x0646, 0x1e10, 0x3658,
+ 0x2b34, 0x4322, 0x0746, 0x1f10, 0x3758,
+ 0x2c34, 0x4422, 0x0846, 0x2010, 0x3858,
+ 0x3024, 0x0012, 0x0c36, 0x2400, 0x3c48,
+ 0x3124, 0x0112, 0x0d36, 0x2500, 0x3d48,
+ 0x3224, 0x0212, 0x0e36, 0x2600, 0x3e48,
+ 0x3226, 0x0214, 0x0e38, 0x2602, 0x3e4a,
+ 0x3126, 0x0114, 0x0d38, 0x2502, 0x3d4a,
+ 0x3026, 0x0014, 0x0c38, 0x2402, 0x3c4a,
+ 0x3028, 0x0016, 0x0c3a, 0x2404, 0x3c4c,
+ 0x3128, 0x0116, 0x0d3a, 0x2504, 0x3d4c,
+ 0x3228, 0x0216, 0x0e3a, 0x2604, 0x3e4c,
+ 0x322a, 0x0218, 0x0e3c, 0x2606, 0x3e4e,
+ 0x312a, 0x0118, 0x0d3c, 0x2506, 0x3d4e,
+ 0x302a, 0x0018, 0x0c3c, 0x2406, 0x3c4e,
+ 0x302c, 0x001a, 0x0c3e, 0x2408, 0x3c50,
+ 0x312c, 0x011a, 0x0d3e, 0x2508, 0x3d50,
+ 0x322c, 0x021a, 0x0e3e, 0x2608, 0x3e50,
+ 0x322e, 0x021c, 0x0e40, 0x260a, 0x3e52,
+ 0x312e, 0x011c, 0x0d40, 0x250a, 0x3d52,
+ 0x302e, 0x001c, 0x0c40, 0x240a, 0x3c52,
+ 0x3030, 0x001e, 0x0c42, 0x240c, 0x3c54,
+ 0x3130, 0x011e, 0x0d42, 0x250c, 0x3d54,
+ 0x3230, 0x021e, 0x0e42, 0x260c, 0x3e54,
+ 0x3232, 0x0220, 0x0e44, 0x260e, 0x3e56,
+ 0x3132, 0x0120, 0x0d44, 0x250e, 0x3d56,
+ 0x3032, 0x0020, 0x0c44, 0x240e, 0x3c56,
+ 0x3034, 0x0022, 0x0c46, 0x2410, 0x3c58,
+ 0x3134, 0x0122, 0x0d46, 0x2510, 0x3d58,
+ 0x3234, 0x0222, 0x0e46, 0x2610, 0x3e58,
+ 0x3624, 0x0612, 0x1236, 0x2a00, 0x4248,
+ 0x3724, 0x0712, 0x1336, 0x2b00, 0x4348,
+ 0x3824, 0x0812, 0x1436, 0x2c00, 0x4448,
+ 0x3826, 0x0814, 0x1438, 0x2c02, 0x444a,
+ 0x3726, 0x0714, 0x1338, 0x2b02, 0x434a,
+ 0x3626, 0x0614, 0x1238, 0x2a02, 0x424a,
+ 0x3628, 0x0616, 0x123a, 0x2a04, 0x424c,
+ 0x3728, 0x0716, 0x133a, 0x2b04, 0x434c,
+ 0x3828, 0x0816, 0x143a, 0x2c04, 0x444c,
+ 0x382a, 0x0818, 0x143c, 0x2c06, 0x444e,
+ 0x372a, 0x0718, 0x133c, 0x2b06, 0x434e,
+ 0x362a, 0x0618, 0x123c, 0x2a06, 0x424e,
+ 0x362c, 0x061a, 0x123e, 0x2a08, 0x4250,
+ 0x372c, 0x071a, 0x133e, 0x2b08, 0x4350,
+ 0x382c, 0x081a, 0x143e, 0x2c08, 0x4450,
+ 0x382e, 0x081c, 0x1440, 0x2c0a, 0x4452,
+ 0x372e, 0x071c, 0x1340, 0x2b0a, 0x4352,
+ 0x362e, 0x061c, 0x1240, 0x2a0a, 0x4252,
+ 0x3630, 0x061e, 0x1242, 0x2a0c, 0x4254,
+ 0x3730, 0x071e, 0x1342, 0x2b0c, 0x4354,
+ 0x3830, 0x081e, 0x1442, 0x2c0c, 0x4454,
+ 0x3832, 0x0820, 0x1444, 0x2c0e, 0x4456,
+ 0x3732, 0x0720, 0x1344, 0x2b0e, 0x4356,
+ 0x3632, 0x0620, 0x1244, 0x2a0e, 0x4256,
+ 0x3634, 0x0622, 0x1246, 0x2a10, 0x4258,
+ 0x3734, 0x0722, 0x1346, 0x2b10, 0x4358,
+ 0x3834, 0x0822, 0x1446, 0x2c10, 0x4458,
+ 0x3c24, 0x0c12, 0x1836, 0x3000, 0x0048,
+ 0x3d24, 0x0d12, 0x1936, 0x3100, 0x0148,
+ 0x3e24, 0x0e12, 0x1a36, 0x3200, 0x0248,
+ 0x3e26, 0x0e14, 0x1a38, 0x3202, 0x024a,
+ 0x3d26, 0x0d14, 0x1938, 0x3102, 0x014a,
+ 0x3c26, 0x0c14, 0x1838, 0x3002, 0x004a,
+ 0x3c28, 0x0c16, 0x183a, 0x3004, 0x004c,
+ 0x3d28, 0x0d16, 0x193a, 0x3104, 0x014c,
+ 0x3e28, 0x0e16, 0x1a3a, 0x3204, 0x024c,
+ 0x3e2a, 0x0e18, 0x1a3c, 0x3206, 0x024e,
+ 0x3d2a, 0x0d18, 0x193c, 0x3106, 0x014e,
+ 0x3c2a, 0x0c18, 0x183c, 0x3006, 0x004e,
+ 0x3c2c, 0x0c1a, 0x183e, 0x3008, 0x0050,
+ 0x3d2c, 0x0d1a, 0x193e, 0x3108, 0x0150,
+ 0x3e2c, 0x0e1a, 0x1a3e, 0x3208, 0x0250,
+ 0x3e2e, 0x0e1c, 0x1a40, 0x320a, 0x0252,
+ 0x3d2e, 0x0d1c, 0x1940, 0x310a, 0x0152,
+ 0x3c2e, 0x0c1c, 0x1840, 0x300a, 0x0052,
+ 0x3c30, 0x0c1e, 0x1842, 0x300c, 0x0054,
+ 0x3d30, 0x0d1e, 0x1942, 0x310c, 0x0154,
+ 0x3e30, 0x0e1e, 0x1a42, 0x320c, 0x0254,
+ 0x3e32, 0x0e20, 0x1a44, 0x320e, 0x0256,
+ 0x3d32, 0x0d20, 0x1944, 0x310e, 0x0156,
+ 0x3c32, 0x0c20, 0x1844, 0x300e, 0x0056,
+ 0x3c34, 0x0c22, 0x1846, 0x3010, 0x0058,
+ 0x3d34, 0x0d22, 0x1946, 0x3110, 0x0158,
+ 0x3e34, 0x0e22, 0x1a46, 0x3210, 0x0258,
+ 0x4224, 0x1212, 0x1e36, 0x3600, 0x0648,
+ 0x4324, 0x1312, 0x1f36, 0x3700, 0x0748,
+ 0x4424, 0x1412, 0x2036, 0x3800, 0x0848,
+ 0x4426, 0x1414, 0x2038, 0x3802, 0x084a,
+ 0x4326, 0x1314, 0x1f38, 0x3702, 0x074a,
+ 0x4226, 0x1214, 0x1e38, 0x3602, 0x064a,
+ 0x4228, 0x1216, 0x1e3a, 0x3604, 0x064c,
+ 0x4328, 0x1316, 0x1f3a, 0x3704, 0x074c,
+ 0x4428, 0x1416, 0x203a, 0x3804, 0x084c,
+ 0x442a, 0x1418, 0x203c, 0x3806, 0x084e,
+ 0x432a, 0x1318, 0x1f3c, 0x3706, 0x074e,
+ 0x422a, 0x1218, 0x1e3c, 0x3606, 0x064e,
+ 0x422c, 0x121a, 0x1e3e, 0x3608, 0x0650,
+ 0x432c, 0x131a, 0x1f3e, 0x3708, 0x0750,
+ 0x442c, 0x141a, 0x203e, 0x3808, 0x0850,
+ 0x442e, 0x141c, 0x2040, 0x380a, 0x0852,
+ 0x432e, 0x131c, 0x1f40, 0x370a, 0x0752,
+ 0x422e, 0x121c, 0x1e40, 0x360a, 0x0652,
+ 0x4230, 0x121e, 0x1e42, 0x360c, 0x0654,
+ 0x4330, 0x131e, 0x1f42, 0x370c, 0x0754,
+ 0x4430, 0x141e, 0x2042, 0x380c, 0x0854,
+ 0x4432, 0x1420, 0x2044, 0x380e, 0x0856,
+ 0x4332, 0x1320, 0x1f44, 0x370e, 0x0756,
+ 0x4232, 0x1220, 0x1e44, 0x360e, 0x0656,
+ 0x4234, 0x1222, 0x1e46, 0x3610, 0x0658,
+ 0x4334, 0x1322, 0x1f46, 0x3710, 0x0758,
+ 0x4434, 0x1422, 0x2046, 0x3810, 0x0858,
+ 0x0024, 0x1812, 0x2436, 0x3c00, 0x0c48,
+ 0x0124, 0x1912, 0x2536, 0x3d00, 0x0d48,
+ 0x0224, 0x1a12, 0x2636, 0x3e00, 0x0e48,
+ 0x0226, 0x1a14, 0x2638, 0x3e02, 0x0e4a,
+ 0x0126, 0x1914, 0x2538, 0x3d02, 0x0d4a,
+ 0x0026, 0x1814, 0x2438, 0x3c02, 0x0c4a,
+ 0x0028, 0x1816, 0x243a, 0x3c04, 0x0c4c,
+ 0x0128, 0x1916, 0x253a, 0x3d04, 0x0d4c,
+ 0x0228, 0x1a16, 0x263a, 0x3e04, 0x0e4c,
+ 0x022a, 0x1a18, 0x263c, 0x3e06, 0x0e4e,
+ 0x012a, 0x1918, 0x253c, 0x3d06, 0x0d4e,
+ 0x002a, 0x1818, 0x243c, 0x3c06, 0x0c4e,
+ 0x002c, 0x181a, 0x243e, 0x3c08, 0x0c50,
+ 0x012c, 0x191a, 0x253e, 0x3d08, 0x0d50,
+ 0x022c, 0x1a1a, 0x263e, 0x3e08, 0x0e50,
+ 0x022e, 0x1a1c, 0x2640, 0x3e0a, 0x0e52,
+ 0x012e, 0x191c, 0x2540, 0x3d0a, 0x0d52,
+ 0x002e, 0x181c, 0x2440, 0x3c0a, 0x0c52,
+ 0x0030, 0x181e, 0x2442, 0x3c0c, 0x0c54,
+ 0x0130, 0x191e, 0x2542, 0x3d0c, 0x0d54,
+ 0x0230, 0x1a1e, 0x2642, 0x3e0c, 0x0e54,
+ 0x0232, 0x1a20, 0x2644, 0x3e0e, 0x0e56,
+ 0x0132, 0x1920, 0x2544, 0x3d0e, 0x0d56,
+ 0x0032, 0x1820, 0x2444, 0x3c0e, 0x0c56,
+ 0x0034, 0x1822, 0x2446, 0x3c10, 0x0c58,
+ 0x0134, 0x1922, 0x2546, 0x3d10, 0x0d58,
+ 0x0234, 0x1a22, 0x2646, 0x3e10, 0x0e58,
+ 0x0624, 0x1e12, 0x2a36, 0x4200, 0x1248,
+ 0x0724, 0x1f12, 0x2b36, 0x4300, 0x1348,
+ 0x0824, 0x2012, 0x2c36, 0x4400, 0x1448,
+ 0x0826, 0x2014, 0x2c38, 0x4402, 0x144a,
+ 0x0726, 0x1f14, 0x2b38, 0x4302, 0x134a,
+ 0x0626, 0x1e14, 0x2a38, 0x4202, 0x124a,
+ 0x0628, 0x1e16, 0x2a3a, 0x4204, 0x124c,
+ 0x0728, 0x1f16, 0x2b3a, 0x4304, 0x134c,
+ 0x0828, 0x2016, 0x2c3a, 0x4404, 0x144c,
+ 0x082a, 0x2018, 0x2c3c, 0x4406, 0x144e,
+ 0x072a, 0x1f18, 0x2b3c, 0x4306, 0x134e,
+ 0x062a, 0x1e18, 0x2a3c, 0x4206, 0x124e,
+ 0x062c, 0x1e1a, 0x2a3e, 0x4208, 0x1250,
+ 0x072c, 0x1f1a, 0x2b3e, 0x4308, 0x1350,
+ 0x082c, 0x201a, 0x2c3e, 0x4408, 0x1450,
+ 0x082e, 0x201c, 0x2c40, 0x440a, 0x1452,
+ 0x072e, 0x1f1c, 0x2b40, 0x430a, 0x1352,
+ 0x062e, 0x1e1c, 0x2a40, 0x420a, 0x1252,
+ 0x0630, 0x1e1e, 0x2a42, 0x420c, 0x1254,
+ 0x0730, 0x1f1e, 0x2b42, 0x430c, 0x1354,
+ 0x0830, 0x201e, 0x2c42, 0x440c, 0x1454,
+ 0x0832, 0x2020, 0x2c44, 0x440e, 0x1456,
+ 0x0732, 0x1f20, 0x2b44, 0x430e, 0x1356,
+ 0x0632, 0x1e20, 0x2a44, 0x420e, 0x1256,
+ 0x0634, 0x1e22, 0x2a46, 0x4210, 0x1258,
+ 0x0734, 0x1f22, 0x2b46, 0x4310, 0x1358,
+ 0x0834, 0x2022, 0x2c46, 0x4410, 0x1458,
+ 0x0f24, 0x2712, 0x3336, 0x0300, 0x1b48,
+ 0x1024, 0x2812, 0x3436, 0x0400, 0x1c48,
+ 0x1124, 0x2912, 0x3536, 0x0500, 0x1d48,
+ 0x1126, 0x2914, 0x3538, 0x0502, 0x1d4a,
+ 0x1026, 0x2814, 0x3438, 0x0402, 0x1c4a,
+ 0x0f26, 0x2714, 0x3338, 0x0302, 0x1b4a,
+ 0x0f28, 0x2716, 0x333a, 0x0304, 0x1b4c,
+ 0x1028, 0x2816, 0x343a, 0x0404, 0x1c4c,
+ 0x1128, 0x2916, 0x353a, 0x0504, 0x1d4c,
+ 0x112a, 0x2918, 0x353c, 0x0506, 0x1d4e,
+ 0x102a, 0x2818, 0x343c, 0x0406, 0x1c4e,
+ 0x0f2a, 0x2718, 0x333c, 0x0306, 0x1b4e,
+ 0x0f2c, 0x271a, 0x333e, 0x0308, 0x1b50,
+ 0x102c, 0x281a, 0x343e, 0x0408, 0x1c50,
+ 0x112c, 0x291a, 0x353e, 0x0508, 0x1d50,
+ 0x112e, 0x291c, 0x3540, 0x050a, 0x1d52,
+ 0x102e, 0x281c, 0x3440, 0x040a, 0x1c52,
+ 0x0f2e, 0x271c, 0x3340, 0x030a, 0x1b52,
+ 0x0f30, 0x271e, 0x3342, 0x030c, 0x1b54,
+ 0x1030, 0x281e, 0x3442, 0x040c, 0x1c54,
+ 0x1130, 0x291e, 0x3542, 0x050c, 0x1d54,
+ 0x1132, 0x2920, 0x3544, 0x050e, 0x1d56,
+ 0x1032, 0x2820, 0x3444, 0x040e, 0x1c56,
+ 0x0f32, 0x2720, 0x3344, 0x030e, 0x1b56,
+ 0x0f34, 0x2722, 0x3346, 0x0310, 0x1b58,
+ 0x1034, 0x2822, 0x3446, 0x0410, 0x1c58,
+ 0x1134, 0x2922, 0x3546, 0x0510, 0x1d58,
+ 0x1524, 0x2d12, 0x3936, 0x0900, 0x2148,
+ 0x1624, 0x2e12, 0x3a36, 0x0a00, 0x2248,
+ 0x1724, 0x2f12, 0x3b36, 0x0b00, 0x2348,
+ 0x1726, 0x2f14, 0x3b38, 0x0b02, 0x234a,
+ 0x1626, 0x2e14, 0x3a38, 0x0a02, 0x224a,
+ 0x1526, 0x2d14, 0x3938, 0x0902, 0x214a,
+ 0x1528, 0x2d16, 0x393a, 0x0904, 0x214c,
+ 0x1628, 0x2e16, 0x3a3a, 0x0a04, 0x224c,
+ 0x1728, 0x2f16, 0x3b3a, 0x0b04, 0x234c,
+ 0x172a, 0x2f18, 0x3b3c, 0x0b06, 0x234e,
+ 0x162a, 0x2e18, 0x3a3c, 0x0a06, 0x224e,
+ 0x152a, 0x2d18, 0x393c, 0x0906, 0x214e,
+ 0x152c, 0x2d1a, 0x393e, 0x0908, 0x2150,
+ 0x162c, 0x2e1a, 0x3a3e, 0x0a08, 0x2250,
+ 0x172c, 0x2f1a, 0x3b3e, 0x0b08, 0x2350,
+ 0x172e, 0x2f1c, 0x3b40, 0x0b0a, 0x2352,
+ 0x162e, 0x2e1c, 0x3a40, 0x0a0a, 0x2252,
+ 0x152e, 0x2d1c, 0x3940, 0x090a, 0x2152,
+ 0x1530, 0x2d1e, 0x3942, 0x090c, 0x2154,
+ 0x1630, 0x2e1e, 0x3a42, 0x0a0c, 0x2254,
+ 0x1730, 0x2f1e, 0x3b42, 0x0b0c, 0x2354,
+ 0x1732, 0x2f20, 0x3b44, 0x0b0e, 0x2356,
+ 0x1632, 0x2e20, 0x3a44, 0x0a0e, 0x2256,
+ 0x1532, 0x2d20, 0x3944, 0x090e, 0x2156,
+ 0x1534, 0x2d22, 0x3946, 0x0910, 0x2158,
+ 0x1634, 0x2e22, 0x3a46, 0x0a10, 0x2258,
+ 0x1734, 0x2f22, 0x3b46, 0x0b10, 0x2358,
+ 0x1b24, 0x3312, 0x3f36, 0x0f00, 0x2748,
+ 0x1c24, 0x3412, 0x4036, 0x1000, 0x2848,
+ 0x1d24, 0x3512, 0x4136, 0x1100, 0x2948,
+ 0x1d26, 0x3514, 0x4138, 0x1102, 0x294a,
+ 0x1c26, 0x3414, 0x4038, 0x1002, 0x284a,
+ 0x1b26, 0x3314, 0x3f38, 0x0f02, 0x274a,
+ 0x1b28, 0x3316, 0x3f3a, 0x0f04, 0x274c,
+ 0x1c28, 0x3416, 0x403a, 0x1004, 0x284c,
+ 0x1d28, 0x3516, 0x413a, 0x1104, 0x294c,
+ 0x1d2a, 0x3518, 0x413c, 0x1106, 0x294e,
+ 0x1c2a, 0x3418, 0x403c, 0x1006, 0x284e,
+ 0x1b2a, 0x3318, 0x3f3c, 0x0f06, 0x274e,
+ 0x1b2c, 0x331a, 0x3f3e, 0x0f08, 0x2750,
+ 0x1c2c, 0x341a, 0x403e, 0x1008, 0x2850,
+ 0x1d2c, 0x351a, 0x413e, 0x1108, 0x2950,
+ 0x1d2e, 0x351c, 0x4140, 0x110a, 0x2952,
+ 0x1c2e, 0x341c, 0x4040, 0x100a, 0x2852,
+ 0x1b2e, 0x331c, 0x3f40, 0x0f0a, 0x2752,
+ 0x1b30, 0x331e, 0x3f42, 0x0f0c, 0x2754,
+ 0x1c30, 0x341e, 0x4042, 0x100c, 0x2854,
+ 0x1d30, 0x351e, 0x4142, 0x110c, 0x2954,
+ 0x1d32, 0x3520, 0x4144, 0x110e, 0x2956,
+ 0x1c32, 0x3420, 0x4044, 0x100e, 0x2856,
+ 0x1b32, 0x3320, 0x3f44, 0x0f0e, 0x2756,
+ 0x1b34, 0x3322, 0x3f46, 0x0f10, 0x2758,
+ 0x1c34, 0x3422, 0x4046, 0x1010, 0x2858,
+ 0x1d34, 0x3522, 0x4146, 0x1110, 0x2958,
+ 0x2124, 0x3912, 0x4536, 0x1500, 0x2d48,
+ 0x2224, 0x3a12, 0x4636, 0x1600, 0x2e48,
+ 0x2324, 0x3b12, 0x4736, 0x1700, 0x2f48,
+ 0x2326, 0x3b14, 0x4738, 0x1702, 0x2f4a,
+ 0x2226, 0x3a14, 0x4638, 0x1602, 0x2e4a,
+ 0x2126, 0x3914, 0x4538, 0x1502, 0x2d4a,
+ 0x2128, 0x3916, 0x453a, 0x1504, 0x2d4c,
+ 0x2228, 0x3a16, 0x463a, 0x1604, 0x2e4c,
+ 0x2328, 0x3b16, 0x473a, 0x1704, 0x2f4c,
+ 0x232a, 0x3b18, 0x473c, 0x1706, 0x2f4e,
+ 0x222a, 0x3a18, 0x463c, 0x1606, 0x2e4e,
+ 0x212a, 0x3918, 0x453c, 0x1506, 0x2d4e,
+ 0x212c, 0x391a, 0x453e, 0x1508, 0x2d50,
+ 0x222c, 0x3a1a, 0x463e, 0x1608, 0x2e50,
+ 0x232c, 0x3b1a, 0x473e, 0x1708, 0x2f50,
+ 0x232e, 0x3b1c, 0x4740, 0x170a, 0x2f52,
+ 0x222e, 0x3a1c, 0x4640, 0x160a, 0x2e52,
+ 0x212e, 0x391c, 0x4540, 0x150a, 0x2d52,
+ 0x2130, 0x391e, 0x4542, 0x150c, 0x2d54,
+ 0x2230, 0x3a1e, 0x4642, 0x160c, 0x2e54,
+ 0x2330, 0x3b1e, 0x4742, 0x170c, 0x2f54,
+ 0x2332, 0x3b20, 0x4744, 0x170e, 0x2f56,
+ 0x2232, 0x3a20, 0x4644, 0x160e, 0x2e56,
+ 0x2132, 0x3920, 0x4544, 0x150e, 0x2d56,
+ 0x2134, 0x3922, 0x4546, 0x1510, 0x2d58,
+ 0x2234, 0x3a22, 0x4646, 0x1610, 0x2e58,
+ 0x2334, 0x3b22, 0x4746, 0x1710, 0x2f58,
+ 0x2724, 0x3f12, 0x0336, 0x1b00, 0x3348,
+ 0x2824, 0x4012, 0x0436, 0x1c00, 0x3448,
+ 0x2924, 0x4112, 0x0536, 0x1d00, 0x3548,
+ 0x2926, 0x4114, 0x0538, 0x1d02, 0x354a,
+ 0x2826, 0x4014, 0x0438, 0x1c02, 0x344a,
+ 0x2726, 0x3f14, 0x0338, 0x1b02, 0x334a,
+ 0x2728, 0x3f16, 0x033a, 0x1b04, 0x334c,
+ 0x2828, 0x4016, 0x043a, 0x1c04, 0x344c,
+ 0x2928, 0x4116, 0x053a, 0x1d04, 0x354c,
+ 0x292a, 0x4118, 0x053c, 0x1d06, 0x354e,
+ 0x282a, 0x4018, 0x043c, 0x1c06, 0x344e,
+ 0x272a, 0x3f18, 0x033c, 0x1b06, 0x334e,
+ 0x272c, 0x3f1a, 0x033e, 0x1b08, 0x3350,
+ 0x282c, 0x401a, 0x043e, 0x1c08, 0x3450,
+ 0x292c, 0x411a, 0x053e, 0x1d08, 0x3550,
+ 0x292e, 0x411c, 0x0540, 0x1d0a, 0x3552,
+ 0x282e, 0x401c, 0x0440, 0x1c0a, 0x3452,
+ 0x272e, 0x3f1c, 0x0340, 0x1b0a, 0x3352,
+ 0x2730, 0x3f1e, 0x0342, 0x1b0c, 0x3354,
+ 0x2830, 0x401e, 0x0442, 0x1c0c, 0x3454,
+ 0x2930, 0x411e, 0x0542, 0x1d0c, 0x3554,
+ 0x2932, 0x4120, 0x0544, 0x1d0e, 0x3556,
+ 0x2832, 0x4020, 0x0444, 0x1c0e, 0x3456,
+ 0x2732, 0x3f20, 0x0344, 0x1b0e, 0x3356,
+ 0x2734, 0x3f22, 0x0346, 0x1b10, 0x3358,
+ 0x2834, 0x4022, 0x0446, 0x1c10, 0x3458,
+ 0x2934, 0x4122, 0x0546, 0x1d10, 0x3558,
+ 0x2d24, 0x4512, 0x0936, 0x2100, 0x3948,
+ 0x2e24, 0x4612, 0x0a36, 0x2200, 0x3a48,
+ 0x2f24, 0x4712, 0x0b36, 0x2300, 0x3b48,
+ 0x2f26, 0x4714, 0x0b38, 0x2302, 0x3b4a,
+ 0x2e26, 0x4614, 0x0a38, 0x2202, 0x3a4a,
+ 0x2d26, 0x4514, 0x0938, 0x2102, 0x394a,
+ 0x2d28, 0x4516, 0x093a, 0x2104, 0x394c,
+ 0x2e28, 0x4616, 0x0a3a, 0x2204, 0x3a4c,
+ 0x2f28, 0x4716, 0x0b3a, 0x2304, 0x3b4c,
+ 0x2f2a, 0x4718, 0x0b3c, 0x2306, 0x3b4e,
+ 0x2e2a, 0x4618, 0x0a3c, 0x2206, 0x3a4e,
+ 0x2d2a, 0x4518, 0x093c, 0x2106, 0x394e,
+ 0x2d2c, 0x451a, 0x093e, 0x2108, 0x3950,
+ 0x2e2c, 0x461a, 0x0a3e, 0x2208, 0x3a50,
+ 0x2f2c, 0x471a, 0x0b3e, 0x2308, 0x3b50,
+ 0x2f2e, 0x471c, 0x0b40, 0x230a, 0x3b52,
+ 0x2e2e, 0x461c, 0x0a40, 0x220a, 0x3a52,
+ 0x2d2e, 0x451c, 0x0940, 0x210a, 0x3952,
+ 0x2d30, 0x451e, 0x0942, 0x210c, 0x3954,
+ 0x2e30, 0x461e, 0x0a42, 0x220c, 0x3a54,
+ 0x2f30, 0x471e, 0x0b42, 0x230c, 0x3b54,
+ 0x2f32, 0x4720, 0x0b44, 0x230e, 0x3b56,
+ 0x2e32, 0x4620, 0x0a44, 0x220e, 0x3a56,
+ 0x2d32, 0x4520, 0x0944, 0x210e, 0x3956,
+ 0x2d34, 0x4522, 0x0946, 0x2110, 0x3958,
+ 0x2e34, 0x4622, 0x0a46, 0x2210, 0x3a58,
+ 0x2f34, 0x4722, 0x0b46, 0x2310, 0x3b58,
+ 0x3324, 0x0312, 0x0f36, 0x2700, 0x3f48,
+ 0x3424, 0x0412, 0x1036, 0x2800, 0x4048,
+ 0x3524, 0x0512, 0x1136, 0x2900, 0x4148,
+ 0x3526, 0x0514, 0x1138, 0x2902, 0x414a,
+ 0x3426, 0x0414, 0x1038, 0x2802, 0x404a,
+ 0x3326, 0x0314, 0x0f38, 0x2702, 0x3f4a,
+ 0x3328, 0x0316, 0x0f3a, 0x2704, 0x3f4c,
+ 0x3428, 0x0416, 0x103a, 0x2804, 0x404c,
+ 0x3528, 0x0516, 0x113a, 0x2904, 0x414c,
+ 0x352a, 0x0518, 0x113c, 0x2906, 0x414e,
+ 0x342a, 0x0418, 0x103c, 0x2806, 0x404e,
+ 0x332a, 0x0318, 0x0f3c, 0x2706, 0x3f4e,
+ 0x332c, 0x031a, 0x0f3e, 0x2708, 0x3f50,
+ 0x342c, 0x041a, 0x103e, 0x2808, 0x4050,
+ 0x352c, 0x051a, 0x113e, 0x2908, 0x4150,
+ 0x352e, 0x051c, 0x1140, 0x290a, 0x4152,
+ 0x342e, 0x041c, 0x1040, 0x280a, 0x4052,
+ 0x332e, 0x031c, 0x0f40, 0x270a, 0x3f52,
+ 0x3330, 0x031e, 0x0f42, 0x270c, 0x3f54,
+ 0x3430, 0x041e, 0x1042, 0x280c, 0x4054,
+ 0x3530, 0x051e, 0x1142, 0x290c, 0x4154,
+ 0x3532, 0x0520, 0x1144, 0x290e, 0x4156,
+ 0x3432, 0x0420, 0x1044, 0x280e, 0x4056,
+ 0x3332, 0x0320, 0x0f44, 0x270e, 0x3f56,
+ 0x3334, 0x0322, 0x0f46, 0x2710, 0x3f58,
+ 0x3434, 0x0422, 0x1046, 0x2810, 0x4058,
+ 0x3534, 0x0522, 0x1146, 0x2910, 0x4158,
+ 0x3924, 0x0912, 0x1536, 0x2d00, 0x4548,
+ 0x3a24, 0x0a12, 0x1636, 0x2e00, 0x4648,
+ 0x3b24, 0x0b12, 0x1736, 0x2f00, 0x4748,
+ 0x3b26, 0x0b14, 0x1738, 0x2f02, 0x474a,
+ 0x3a26, 0x0a14, 0x1638, 0x2e02, 0x464a,
+ 0x3926, 0x0914, 0x1538, 0x2d02, 0x454a,
+ 0x3928, 0x0916, 0x153a, 0x2d04, 0x454c,
+ 0x3a28, 0x0a16, 0x163a, 0x2e04, 0x464c,
+ 0x3b28, 0x0b16, 0x173a, 0x2f04, 0x474c,
+ 0x3b2a, 0x0b18, 0x173c, 0x2f06, 0x474e,
+ 0x3a2a, 0x0a18, 0x163c, 0x2e06, 0x464e,
+ 0x392a, 0x0918, 0x153c, 0x2d06, 0x454e,
+ 0x392c, 0x091a, 0x153e, 0x2d08, 0x4550,
+ 0x3a2c, 0x0a1a, 0x163e, 0x2e08, 0x4650,
+ 0x3b2c, 0x0b1a, 0x173e, 0x2f08, 0x4750,
+ 0x3b2e, 0x0b1c, 0x1740, 0x2f0a, 0x4752,
+ 0x3a2e, 0x0a1c, 0x1640, 0x2e0a, 0x4652,
+ 0x392e, 0x091c, 0x1540, 0x2d0a, 0x4552,
+ 0x3930, 0x091e, 0x1542, 0x2d0c, 0x4554,
+ 0x3a30, 0x0a1e, 0x1642, 0x2e0c, 0x4654,
+ 0x3b30, 0x0b1e, 0x1742, 0x2f0c, 0x4754,
+ 0x3b32, 0x0b20, 0x1744, 0x2f0e, 0x4756,
+ 0x3a32, 0x0a20, 0x1644, 0x2e0e, 0x4656,
+ 0x3932, 0x0920, 0x1544, 0x2d0e, 0x4556,
+ 0x3934, 0x0922, 0x1546, 0x2d10, 0x4558,
+ 0x3a34, 0x0a22, 0x1646, 0x2e10, 0x4658,
+ 0x3b34, 0x0b22, 0x1746, 0x2f10, 0x4758,
+ 0x3f24, 0x0f12, 0x1b36, 0x3300, 0x0348,
+ 0x4024, 0x1012, 0x1c36, 0x3400, 0x0448,
+ 0x4124, 0x1112, 0x1d36, 0x3500, 0x0548,
+ 0x4126, 0x1114, 0x1d38, 0x3502, 0x054a,
+ 0x4026, 0x1014, 0x1c38, 0x3402, 0x044a,
+ 0x3f26, 0x0f14, 0x1b38, 0x3302, 0x034a,
+ 0x3f28, 0x0f16, 0x1b3a, 0x3304, 0x034c,
+ 0x4028, 0x1016, 0x1c3a, 0x3404, 0x044c,
+ 0x4128, 0x1116, 0x1d3a, 0x3504, 0x054c,
+ 0x412a, 0x1118, 0x1d3c, 0x3506, 0x054e,
+ 0x402a, 0x1018, 0x1c3c, 0x3406, 0x044e,
+ 0x3f2a, 0x0f18, 0x1b3c, 0x3306, 0x034e,
+ 0x3f2c, 0x0f1a, 0x1b3e, 0x3308, 0x0350,
+ 0x402c, 0x101a, 0x1c3e, 0x3408, 0x0450,
+ 0x412c, 0x111a, 0x1d3e, 0x3508, 0x0550,
+ 0x412e, 0x111c, 0x1d40, 0x350a, 0x0552,
+ 0x402e, 0x101c, 0x1c40, 0x340a, 0x0452,
+ 0x3f2e, 0x0f1c, 0x1b40, 0x330a, 0x0352,
+ 0x3f30, 0x0f1e, 0x1b42, 0x330c, 0x0354,
+ 0x4030, 0x101e, 0x1c42, 0x340c, 0x0454,
+ 0x4130, 0x111e, 0x1d42, 0x350c, 0x0554,
+ 0x4132, 0x1120, 0x1d44, 0x350e, 0x0556,
+ 0x4032, 0x1020, 0x1c44, 0x340e, 0x0456,
+ 0x3f32, 0x0f20, 0x1b44, 0x330e, 0x0356,
+ 0x3f34, 0x0f22, 0x1b46, 0x3310, 0x0358,
+ 0x4034, 0x1022, 0x1c46, 0x3410, 0x0458,
+ 0x4134, 0x1122, 0x1d46, 0x3510, 0x0558,
+ 0x4524, 0x1512, 0x2136, 0x3900, 0x0948,
+ 0x4624, 0x1612, 0x2236, 0x3a00, 0x0a48,
+ 0x4724, 0x1712, 0x2336, 0x3b00, 0x0b48,
+ 0x4726, 0x1714, 0x2338, 0x3b02, 0x0b4a,
+ 0x4626, 0x1614, 0x2238, 0x3a02, 0x0a4a,
+ 0x4526, 0x1514, 0x2138, 0x3902, 0x094a,
+ 0x4528, 0x1516, 0x213a, 0x3904, 0x094c,
+ 0x4628, 0x1616, 0x223a, 0x3a04, 0x0a4c,
+ 0x4728, 0x1716, 0x233a, 0x3b04, 0x0b4c,
+ 0x472a, 0x1718, 0x233c, 0x3b06, 0x0b4e,
+ 0x462a, 0x1618, 0x223c, 0x3a06, 0x0a4e,
+ 0x452a, 0x1518, 0x213c, 0x3906, 0x094e,
+ 0x452c, 0x151a, 0x213e, 0x3908, 0x0950,
+ 0x462c, 0x161a, 0x223e, 0x3a08, 0x0a50,
+ 0x472c, 0x171a, 0x233e, 0x3b08, 0x0b50,
+ 0x472e, 0x171c, 0x2340, 0x3b0a, 0x0b52,
+ 0x462e, 0x161c, 0x2240, 0x3a0a, 0x0a52,
+ 0x452e, 0x151c, 0x2140, 0x390a, 0x0952,
+ 0x4530, 0x151e, 0x2142, 0x390c, 0x0954,
+ 0x4630, 0x161e, 0x2242, 0x3a0c, 0x0a54,
+ 0x4730, 0x171e, 0x2342, 0x3b0c, 0x0b54,
+ 0x4732, 0x1720, 0x2344, 0x3b0e, 0x0b56,
+ 0x4632, 0x1620, 0x2244, 0x3a0e, 0x0a56,
+ 0x4532, 0x1520, 0x2144, 0x390e, 0x0956,
+ 0x4534, 0x1522, 0x2146, 0x3910, 0x0958,
+ 0x4634, 0x1622, 0x2246, 0x3a10, 0x0a58,
+ 0x4734, 0x1722, 0x2346, 0x3b10, 0x0b58,
+ 0x0324, 0x1b12, 0x2736, 0x3f00, 0x0f48,
+ 0x0424, 0x1c12, 0x2836, 0x4000, 0x1048,
+ 0x0524, 0x1d12, 0x2936, 0x4100, 0x1148,
+ 0x0526, 0x1d14, 0x2938, 0x4102, 0x114a,
+ 0x0426, 0x1c14, 0x2838, 0x4002, 0x104a,
+ 0x0326, 0x1b14, 0x2738, 0x3f02, 0x0f4a,
+ 0x0328, 0x1b16, 0x273a, 0x3f04, 0x0f4c,
+ 0x0428, 0x1c16, 0x283a, 0x4004, 0x104c,
+ 0x0528, 0x1d16, 0x293a, 0x4104, 0x114c,
+ 0x052a, 0x1d18, 0x293c, 0x4106, 0x114e,
+ 0x042a, 0x1c18, 0x283c, 0x4006, 0x104e,
+ 0x032a, 0x1b18, 0x273c, 0x3f06, 0x0f4e,
+ 0x032c, 0x1b1a, 0x273e, 0x3f08, 0x0f50,
+ 0x042c, 0x1c1a, 0x283e, 0x4008, 0x1050,
+ 0x052c, 0x1d1a, 0x293e, 0x4108, 0x1150,
+ 0x052e, 0x1d1c, 0x2940, 0x410a, 0x1152,
+ 0x042e, 0x1c1c, 0x2840, 0x400a, 0x1052,
+ 0x032e, 0x1b1c, 0x2740, 0x3f0a, 0x0f52,
+ 0x0330, 0x1b1e, 0x2742, 0x3f0c, 0x0f54,
+ 0x0430, 0x1c1e, 0x2842, 0x400c, 0x1054,
+ 0x0530, 0x1d1e, 0x2942, 0x410c, 0x1154,
+ 0x0532, 0x1d20, 0x2944, 0x410e, 0x1156,
+ 0x0432, 0x1c20, 0x2844, 0x400e, 0x1056,
+ 0x0332, 0x1b20, 0x2744, 0x3f0e, 0x0f56,
+ 0x0334, 0x1b22, 0x2746, 0x3f10, 0x0f58,
+ 0x0434, 0x1c22, 0x2846, 0x4010, 0x1058,
+ 0x0534, 0x1d22, 0x2946, 0x4110, 0x1158,
+ 0x0924, 0x2112, 0x2d36, 0x4500, 0x1548,
+ 0x0a24, 0x2212, 0x2e36, 0x4600, 0x1648,
+ 0x0b24, 0x2312, 0x2f36, 0x4700, 0x1748,
+ 0x0b26, 0x2314, 0x2f38, 0x4702, 0x174a,
+ 0x0a26, 0x2214, 0x2e38, 0x4602, 0x164a,
+ 0x0926, 0x2114, 0x2d38, 0x4502, 0x154a,
+ 0x0928, 0x2116, 0x2d3a, 0x4504, 0x154c,
+ 0x0a28, 0x2216, 0x2e3a, 0x4604, 0x164c,
+ 0x0b28, 0x2316, 0x2f3a, 0x4704, 0x174c,
+ 0x0b2a, 0x2318, 0x2f3c, 0x4706, 0x174e,
+ 0x0a2a, 0x2218, 0x2e3c, 0x4606, 0x164e,
+ 0x092a, 0x2118, 0x2d3c, 0x4506, 0x154e,
+ 0x092c, 0x211a, 0x2d3e, 0x4508, 0x1550,
+ 0x0a2c, 0x221a, 0x2e3e, 0x4608, 0x1650,
+ 0x0b2c, 0x231a, 0x2f3e, 0x4708, 0x1750,
+ 0x0b2e, 0x231c, 0x2f40, 0x470a, 0x1752,
+ 0x0a2e, 0x221c, 0x2e40, 0x460a, 0x1652,
+ 0x092e, 0x211c, 0x2d40, 0x450a, 0x1552,
+ 0x0930, 0x211e, 0x2d42, 0x450c, 0x1554,
+ 0x0a30, 0x221e, 0x2e42, 0x460c, 0x1654,
+ 0x0b30, 0x231e, 0x2f42, 0x470c, 0x1754,
+ 0x0b32, 0x2320, 0x2f44, 0x470e, 0x1756,
+ 0x0a32, 0x2220, 0x2e44, 0x460e, 0x1656,
+ 0x0932, 0x2120, 0x2d44, 0x450e, 0x1556,
+ 0x0934, 0x2122, 0x2d46, 0x4510, 0x1558,
+ 0x0a34, 0x2222, 0x2e46, 0x4610, 0x1658,
+ 0x0b34, 0x2322, 0x2f46, 0x4710, 0x1758,
+};
+
+static const uint16_t dv_place_1080i60[4*10*27*5] = {
+ 0x2048, 0x5024, 0x686c, 0x0800, 0x3890,
+ 0x3848, 0x6824, 0x086c, 0x2000, 0x5090,
+ 0x5048, 0x0824, 0x206c, 0x3800, 0x6890,
+ 0x6848, 0x2024, 0x386c, 0x5000, 0x0890,
+ 0x0848, 0x3824, 0x506c, 0x6800, 0x2090,
+ 0x204a, 0x5026, 0x686e, 0x0802, 0x3892,
+ 0x384a, 0x6826, 0x086e, 0x2002, 0x5092,
+ 0x504a, 0x0826, 0x206e, 0x3802, 0x6892,
+ 0x684a, 0x2026, 0x386e, 0x5002, 0x0892,
+ 0x084a, 0x3826, 0x506e, 0x6802, 0x2092,
+ 0x204c, 0x5028, 0x6870, 0x0804, 0x3894,
+ 0x384c, 0x6828, 0x0870, 0x2004, 0x5094,
+ 0x504c, 0x0828, 0x2070, 0x3804, 0x6894,
+ 0x684c, 0x2028, 0x3870, 0x5004, 0x0894,
+ 0x084c, 0x3828, 0x5070, 0x6804, 0x2094,
+ 0x204e, 0x502a, 0x6872, 0x0806, 0x3896,
+ 0x384e, 0x682a, 0x0872, 0x2006, 0x5096,
+ 0x504e, 0x082a, 0x2072, 0x3806, 0x6896,
+ 0x684e, 0x202a, 0x3872, 0x5006, 0x0896,
+ 0x084e, 0x382a, 0x5072, 0x6806, 0x2096,
+ 0x2050, 0x502c, 0x6874, 0x0808, 0x3898,
+ 0x3850, 0x682c, 0x0874, 0x2008, 0x5098,
+ 0x5050, 0x082c, 0x2074, 0x3808, 0x6898,
+ 0x6850, 0x202c, 0x3874, 0x5008, 0x0898,
+ 0x0850, 0x382c, 0x5074, 0x6808, 0x2098,
+ 0x2052, 0x502e, 0x6876, 0x080a, 0x389a,
+ 0x3852, 0x682e, 0x0876, 0x200a, 0x509a,
+ 0x5052, 0x082e, 0x2076, 0x380a, 0x689a,
+ 0x6852, 0x202e, 0x3876, 0x500a, 0x089a,
+ 0x0852, 0x382e, 0x5076, 0x680a, 0x209a,
+ 0x2054, 0x5030, 0x6878, 0x080c, 0x389c,
+ 0x3854, 0x6830, 0x0878, 0x200c, 0x509c,
+ 0x5054, 0x0830, 0x2078, 0x380c, 0x689c,
+ 0x6854, 0x2030, 0x3878, 0x500c, 0x089c,
+ 0x0854, 0x3830, 0x5078, 0x680c, 0x209c,
+ 0x2056, 0x5032, 0x687a, 0x080e, 0x389e,
+ 0x3856, 0x6832, 0x087a, 0x200e, 0x509e,
+ 0x5056, 0x0832, 0x207a, 0x380e, 0x689e,
+ 0x6856, 0x2032, 0x387a, 0x500e, 0x089e,
+ 0x0856, 0x3832, 0x507a, 0x680e, 0x209e,
+ 0x2058, 0x5034, 0x687c, 0x0810, 0x0078,
+ 0x3858, 0x6834, 0x087c, 0x2010, 0x8214,
+ 0x5058, 0x0834, 0x207c, 0x3810, 0x8264,
+ 0x6858, 0x2034, 0x387c, 0x5010, 0x0000,
+ 0x0858, 0x3834, 0x507c, 0x6810, 0x003c,
+ 0x2448, 0x5424, 0x6c6c, 0x0c00, 0x3c90,
+ 0x3c48, 0x6c24, 0x0c6c, 0x2400, 0x5490,
+ 0x5448, 0x0c24, 0x246c, 0x3c00, 0x6c90,
+ 0x6c48, 0x2424, 0x3c6c, 0x5400, 0x0c90,
+ 0x0c48, 0x3c24, 0x546c, 0x6c00, 0x2490,
+ 0x244a, 0x5426, 0x6c6e, 0x0c02, 0x3c92,
+ 0x3c4a, 0x6c26, 0x0c6e, 0x2402, 0x5492,
+ 0x544a, 0x0c26, 0x246e, 0x3c02, 0x6c92,
+ 0x6c4a, 0x2426, 0x3c6e, 0x5402, 0x0c92,
+ 0x0c4a, 0x3c26, 0x546e, 0x6c02, 0x2492,
+ 0x244c, 0x5428, 0x6c70, 0x0c04, 0x3c94,
+ 0x3c4c, 0x6c28, 0x0c70, 0x2404, 0x5494,
+ 0x544c, 0x0c28, 0x2470, 0x3c04, 0x6c94,
+ 0x6c4c, 0x2428, 0x3c70, 0x5404, 0x0c94,
+ 0x0c4c, 0x3c28, 0x5470, 0x6c04, 0x2494,
+ 0x244e, 0x542a, 0x6c72, 0x0c06, 0x3c96,
+ 0x3c4e, 0x6c2a, 0x0c72, 0x2406, 0x5496,
+ 0x544e, 0x0c2a, 0x2472, 0x3c06, 0x6c96,
+ 0x6c4e, 0x242a, 0x3c72, 0x5406, 0x0c96,
+ 0x0c4e, 0x3c2a, 0x5472, 0x6c06, 0x2496,
+ 0x2450, 0x542c, 0x6c74, 0x0c08, 0x3c98,
+ 0x3c50, 0x6c2c, 0x0c74, 0x2408, 0x5498,
+ 0x5450, 0x0c2c, 0x2474, 0x3c08, 0x6c98,
+ 0x6c50, 0x242c, 0x3c74, 0x5408, 0x0c98,
+ 0x0c50, 0x3c2c, 0x5474, 0x6c08, 0x2498,
+ 0x2452, 0x542e, 0x6c76, 0x0c0a, 0x3c9a,
+ 0x3c52, 0x6c2e, 0x0c76, 0x240a, 0x549a,
+ 0x5452, 0x0c2e, 0x2476, 0x3c0a, 0x6c9a,
+ 0x6c52, 0x242e, 0x3c76, 0x540a, 0x0c9a,
+ 0x0c52, 0x3c2e, 0x5476, 0x6c0a, 0x249a,
+ 0x2454, 0x5430, 0x6c78, 0x0c0c, 0x3c9c,
+ 0x3c54, 0x6c30, 0x0c78, 0x240c, 0x549c,
+ 0x5454, 0x0c30, 0x2478, 0x3c0c, 0x6c9c,
+ 0x6c54, 0x2430, 0x3c78, 0x540c, 0x0c9c,
+ 0x0c54, 0x3c30, 0x5478, 0x6c0c, 0x249c,
+ 0x2456, 0x5432, 0x6c7a, 0x0c0e, 0x3c9e,
+ 0x3c56, 0x6c32, 0x0c7a, 0x240e, 0x549e,
+ 0x5456, 0x0c32, 0x247a, 0x3c0e, 0x6c9e,
+ 0x6c56, 0x2432, 0x3c7a, 0x540e, 0x0c9e,
+ 0x0c56, 0x3c32, 0x547a, 0x6c0e, 0x249e,
+ 0x2458, 0x5434, 0x6c7c, 0x0c10, 0x0478,
+ 0x3c58, 0x6c34, 0x0c7c, 0x2410, 0x8028,
+ 0x5458, 0x0c34, 0x247c, 0x3c10, 0x8078,
+ 0x6c58, 0x2434, 0x3c7c, 0x5410, 0x0400,
+ 0x0c58, 0x3c34, 0x547c, 0x6c10, 0x043c,
+ 0x2848, 0x5824, 0x706c, 0x1000, 0x4090,
+ 0x4048, 0x7024, 0x106c, 0x2800, 0x5890,
+ 0x5848, 0x1024, 0x286c, 0x4000, 0x7090,
+ 0x7048, 0x2824, 0x406c, 0x5800, 0x1090,
+ 0x1048, 0x4024, 0x586c, 0x7000, 0x2890,
+ 0x284a, 0x5826, 0x706e, 0x1002, 0x4092,
+ 0x404a, 0x7026, 0x106e, 0x2802, 0x5892,
+ 0x584a, 0x1026, 0x286e, 0x4002, 0x7092,
+ 0x704a, 0x2826, 0x406e, 0x5802, 0x1092,
+ 0x104a, 0x4026, 0x586e, 0x7002, 0x2892,
+ 0x284c, 0x5828, 0x7070, 0x1004, 0x4094,
+ 0x404c, 0x7028, 0x1070, 0x2804, 0x5894,
+ 0x584c, 0x1028, 0x2870, 0x4004, 0x7094,
+ 0x704c, 0x2828, 0x4070, 0x5804, 0x1094,
+ 0x104c, 0x4028, 0x5870, 0x7004, 0x2894,
+ 0x284e, 0x582a, 0x7072, 0x1006, 0x4096,
+ 0x404e, 0x702a, 0x1072, 0x2806, 0x5896,
+ 0x584e, 0x102a, 0x2872, 0x4006, 0x7096,
+ 0x704e, 0x282a, 0x4072, 0x5806, 0x1096,
+ 0x104e, 0x402a, 0x5872, 0x7006, 0x2896,
+ 0x2850, 0x582c, 0x7074, 0x1008, 0x4098,
+ 0x4050, 0x702c, 0x1074, 0x2808, 0x5898,
+ 0x5850, 0x102c, 0x2874, 0x4008, 0x7098,
+ 0x7050, 0x282c, 0x4074, 0x5808, 0x1098,
+ 0x1050, 0x402c, 0x5874, 0x7008, 0x2898,
+ 0x2852, 0x582e, 0x7076, 0x100a, 0x409a,
+ 0x4052, 0x702e, 0x1076, 0x280a, 0x589a,
+ 0x5852, 0x102e, 0x2876, 0x400a, 0x709a,
+ 0x7052, 0x282e, 0x4076, 0x580a, 0x109a,
+ 0x1052, 0x402e, 0x5876, 0x700a, 0x289a,
+ 0x2854, 0x5830, 0x7078, 0x100c, 0x409c,
+ 0x4054, 0x7030, 0x1078, 0x280c, 0x589c,
+ 0x5854, 0x1030, 0x2878, 0x400c, 0x709c,
+ 0x7054, 0x2830, 0x4078, 0x580c, 0x109c,
+ 0x1054, 0x4030, 0x5878, 0x700c, 0x289c,
+ 0x2856, 0x5832, 0x707a, 0x100e, 0x409e,
+ 0x4056, 0x7032, 0x107a, 0x280e, 0x589e,
+ 0x5856, 0x1032, 0x287a, 0x400e, 0x709e,
+ 0x7056, 0x2832, 0x407a, 0x580e, 0x109e,
+ 0x1056, 0x4032, 0x587a, 0x700e, 0x289e,
+ 0x2858, 0x5834, 0x707c, 0x1010, 0x008c,
+ 0x4058, 0x7034, 0x107c, 0x2810, 0x8428,
+ 0x5858, 0x1034, 0x287c, 0x4010, 0x8478,
+ 0x7058, 0x2834, 0x407c, 0x5810, 0x0014,
+ 0x1058, 0x4034, 0x587c, 0x7010, 0x0050,
+ 0x2c48, 0x5c24, 0x746c, 0x1400, 0x4490,
+ 0x4448, 0x7424, 0x146c, 0x2c00, 0x5c90,
+ 0x5c48, 0x1424, 0x2c6c, 0x4400, 0x7490,
+ 0x7448, 0x2c24, 0x446c, 0x5c00, 0x1490,
+ 0x1448, 0x4424, 0x5c6c, 0x7400, 0x2c90,
+ 0x2c4a, 0x5c26, 0x746e, 0x1402, 0x4492,
+ 0x444a, 0x7426, 0x146e, 0x2c02, 0x5c92,
+ 0x5c4a, 0x1426, 0x2c6e, 0x4402, 0x7492,
+ 0x744a, 0x2c26, 0x446e, 0x5c02, 0x1492,
+ 0x144a, 0x4426, 0x5c6e, 0x7402, 0x2c92,
+ 0x2c4c, 0x5c28, 0x7470, 0x1404, 0x4494,
+ 0x444c, 0x7428, 0x1470, 0x2c04, 0x5c94,
+ 0x5c4c, 0x1428, 0x2c70, 0x4404, 0x7494,
+ 0x744c, 0x2c28, 0x4470, 0x5c04, 0x1494,
+ 0x144c, 0x4428, 0x5c70, 0x7404, 0x2c94,
+ 0x2c4e, 0x5c2a, 0x7472, 0x1406, 0x4496,
+ 0x444e, 0x742a, 0x1472, 0x2c06, 0x5c96,
+ 0x5c4e, 0x142a, 0x2c72, 0x4406, 0x7496,
+ 0x744e, 0x2c2a, 0x4472, 0x5c06, 0x1496,
+ 0x144e, 0x442a, 0x5c72, 0x7406, 0x2c96,
+ 0x2c50, 0x5c2c, 0x7474, 0x1408, 0x4498,
+ 0x4450, 0x742c, 0x1474, 0x2c08, 0x5c98,
+ 0x5c50, 0x142c, 0x2c74, 0x4408, 0x7498,
+ 0x7450, 0x2c2c, 0x4474, 0x5c08, 0x1498,
+ 0x1450, 0x442c, 0x5c74, 0x7408, 0x2c98,
+ 0x2c52, 0x5c2e, 0x7476, 0x140a, 0x449a,
+ 0x4452, 0x742e, 0x1476, 0x2c0a, 0x5c9a,
+ 0x5c52, 0x142e, 0x2c76, 0x440a, 0x749a,
+ 0x7452, 0x2c2e, 0x4476, 0x5c0a, 0x149a,
+ 0x1452, 0x442e, 0x5c76, 0x740a, 0x2c9a,
+ 0x2c54, 0x5c30, 0x7478, 0x140c, 0x449c,
+ 0x4454, 0x7430, 0x1478, 0x2c0c, 0x5c9c,
+ 0x5c54, 0x1430, 0x2c78, 0x440c, 0x749c,
+ 0x7454, 0x2c30, 0x4478, 0x5c0c, 0x149c,
+ 0x1454, 0x4430, 0x5c78, 0x740c, 0x2c9c,
+ 0x2c56, 0x5c32, 0x747a, 0x140e, 0x449e,
+ 0x4456, 0x7432, 0x147a, 0x2c0e, 0x5c9e,
+ 0x5c56, 0x1432, 0x2c7a, 0x440e, 0x749e,
+ 0x7456, 0x2c32, 0x447a, 0x5c0e, 0x149e,
+ 0x1456, 0x4432, 0x5c7a, 0x740e, 0x2c9e,
+ 0x2c58, 0x5c34, 0x747c, 0x1410, 0x048c,
+ 0x4458, 0x7434, 0x147c, 0x2c10, 0x823c,
+ 0x5c58, 0x1434, 0x2c7c, 0x4410, 0x828c,
+ 0x7458, 0x2c34, 0x447c, 0x5c10, 0x0414,
+ 0x1458, 0x4434, 0x5c7c, 0x7410, 0x0450,
+ 0x3048, 0x6024, 0x786c, 0x1800, 0x4890,
+ 0x4848, 0x7824, 0x186c, 0x3000, 0x6090,
+ 0x6048, 0x1824, 0x306c, 0x4800, 0x7890,
+ 0x7848, 0x3024, 0x486c, 0x6000, 0x1890,
+ 0x1848, 0x4824, 0x606c, 0x7800, 0x3090,
+ 0x304a, 0x6026, 0x786e, 0x1802, 0x4892,
+ 0x484a, 0x7826, 0x186e, 0x3002, 0x6092,
+ 0x604a, 0x1826, 0x306e, 0x4802, 0x7892,
+ 0x784a, 0x3026, 0x486e, 0x6002, 0x1892,
+ 0x184a, 0x4826, 0x606e, 0x7802, 0x3092,
+ 0x304c, 0x6028, 0x7870, 0x1804, 0x4894,
+ 0x484c, 0x7828, 0x1870, 0x3004, 0x6094,
+ 0x604c, 0x1828, 0x3070, 0x4804, 0x7894,
+ 0x784c, 0x3028, 0x4870, 0x6004, 0x1894,
+ 0x184c, 0x4828, 0x6070, 0x7804, 0x3094,
+ 0x304e, 0x602a, 0x7872, 0x1806, 0x4896,
+ 0x484e, 0x782a, 0x1872, 0x3006, 0x6096,
+ 0x604e, 0x182a, 0x3072, 0x4806, 0x7896,
+ 0x784e, 0x302a, 0x4872, 0x6006, 0x1896,
+ 0x184e, 0x482a, 0x6072, 0x7806, 0x3096,
+ 0x3050, 0x602c, 0x7874, 0x1808, 0x4898,
+ 0x4850, 0x782c, 0x1874, 0x3008, 0x6098,
+ 0x6050, 0x182c, 0x3074, 0x4808, 0x7898,
+ 0x7850, 0x302c, 0x4874, 0x6008, 0x1898,
+ 0x1850, 0x482c, 0x6074, 0x7808, 0x3098,
+ 0x3052, 0x602e, 0x7876, 0x180a, 0x489a,
+ 0x4852, 0x782e, 0x1876, 0x300a, 0x609a,
+ 0x6052, 0x182e, 0x3076, 0x480a, 0x789a,
+ 0x7852, 0x302e, 0x4876, 0x600a, 0x189a,
+ 0x1852, 0x482e, 0x6076, 0x780a, 0x309a,
+ 0x3054, 0x6030, 0x7878, 0x180c, 0x489c,
+ 0x4854, 0x7830, 0x1878, 0x300c, 0x609c,
+ 0x6054, 0x1830, 0x3078, 0x480c, 0x789c,
+ 0x7854, 0x3030, 0x4878, 0x600c, 0x189c,
+ 0x1854, 0x4830, 0x6078, 0x780c, 0x309c,
+ 0x3056, 0x6032, 0x787a, 0x180e, 0x489e,
+ 0x4856, 0x7832, 0x187a, 0x300e, 0x609e,
+ 0x6056, 0x1832, 0x307a, 0x480e, 0x789e,
+ 0x7856, 0x3032, 0x487a, 0x600e, 0x189e,
+ 0x1856, 0x4832, 0x607a, 0x780e, 0x309e,
+ 0x3058, 0x6034, 0x787c, 0x1810, 0x8000,
+ 0x4858, 0x7834, 0x187c, 0x3010, 0x8050,
+ 0x6058, 0x1834, 0x307c, 0x4810, 0x8600,
+ 0x7858, 0x3034, 0x487c, 0x6010, 0x0028,
+ 0x1858, 0x4834, 0x607c, 0x7810, 0x0064,
+ 0x3448, 0x6424, 0x7c6c, 0x1c00, 0x4c90,
+ 0x4c48, 0x7c24, 0x1c6c, 0x3400, 0x6490,
+ 0x6448, 0x1c24, 0x346c, 0x4c00, 0x7c90,
+ 0x7c48, 0x3424, 0x4c6c, 0x6400, 0x1c90,
+ 0x1c48, 0x4c24, 0x646c, 0x7c00, 0x3490,
+ 0x344a, 0x6426, 0x7c6e, 0x1c02, 0x4c92,
+ 0x4c4a, 0x7c26, 0x1c6e, 0x3402, 0x6492,
+ 0x644a, 0x1c26, 0x346e, 0x4c02, 0x7c92,
+ 0x7c4a, 0x3426, 0x4c6e, 0x6402, 0x1c92,
+ 0x1c4a, 0x4c26, 0x646e, 0x7c02, 0x3492,
+ 0x344c, 0x6428, 0x7c70, 0x1c04, 0x4c94,
+ 0x4c4c, 0x7c28, 0x1c70, 0x3404, 0x6494,
+ 0x644c, 0x1c28, 0x3470, 0x4c04, 0x7c94,
+ 0x7c4c, 0x3428, 0x4c70, 0x6404, 0x1c94,
+ 0x1c4c, 0x4c28, 0x6470, 0x7c04, 0x3494,
+ 0x344e, 0x642a, 0x7c72, 0x1c06, 0x4c96,
+ 0x4c4e, 0x7c2a, 0x1c72, 0x3406, 0x6496,
+ 0x644e, 0x1c2a, 0x3472, 0x4c06, 0x7c96,
+ 0x7c4e, 0x342a, 0x4c72, 0x6406, 0x1c96,
+ 0x1c4e, 0x4c2a, 0x6472, 0x7c06, 0x3496,
+ 0x3450, 0x642c, 0x7c74, 0x1c08, 0x4c98,
+ 0x4c50, 0x7c2c, 0x1c74, 0x3408, 0x6498,
+ 0x6450, 0x1c2c, 0x3474, 0x4c08, 0x7c98,
+ 0x7c50, 0x342c, 0x4c74, 0x6408, 0x1c98,
+ 0x1c50, 0x4c2c, 0x6474, 0x7c08, 0x3498,
+ 0x3452, 0x642e, 0x7c76, 0x1c0a, 0x4c9a,
+ 0x4c52, 0x7c2e, 0x1c76, 0x340a, 0x649a,
+ 0x6452, 0x1c2e, 0x3476, 0x4c0a, 0x7c9a,
+ 0x7c52, 0x342e, 0x4c76, 0x640a, 0x1c9a,
+ 0x1c52, 0x4c2e, 0x6476, 0x7c0a, 0x349a,
+ 0x3454, 0x6430, 0x7c78, 0x1c0c, 0x4c9c,
+ 0x4c54, 0x7c30, 0x1c78, 0x340c, 0x649c,
+ 0x6454, 0x1c30, 0x3478, 0x4c0c, 0x7c9c,
+ 0x7c54, 0x3430, 0x4c78, 0x640c, 0x1c9c,
+ 0x1c54, 0x4c30, 0x6478, 0x7c0c, 0x349c,
+ 0x3456, 0x6432, 0x7c7a, 0x1c0e, 0x4c9e,
+ 0x4c56, 0x7c32, 0x1c7a, 0x340e, 0x649e,
+ 0x6456, 0x1c32, 0x347a, 0x4c0e, 0x7c9e,
+ 0x7c56, 0x3432, 0x4c7a, 0x640e, 0x1c9e,
+ 0x1c56, 0x4c32, 0x647a, 0x7c0e, 0x349e,
+ 0x3458, 0x6434, 0x7c7c, 0x1c10, 0x8400,
+ 0x4c58, 0x7c34, 0x1c7c, 0x3410, 0x8450,
+ 0x6458, 0x1c34, 0x347c, 0x4c10, 0x8650,
+ 0x7c58, 0x3434, 0x4c7c, 0x6410, 0x0428,
+ 0x1c58, 0x4c34, 0x647c, 0x7c10, 0x0464,
+ 0x505a, 0x0836, 0x207e, 0x3812, 0x8266,
+ 0x685a, 0x2036, 0x387e, 0x5012, 0x0002,
+ 0x085a, 0x3836, 0x507e, 0x6812, 0x003e,
+ 0x205a, 0x5036, 0x687e, 0x0812, 0x007a,
+ 0x385a, 0x6836, 0x087e, 0x2012, 0x8216,
+ 0x505c, 0x0838, 0x2080, 0x3814, 0x8268,
+ 0x685c, 0x2038, 0x3880, 0x5014, 0x0004,
+ 0x085c, 0x3838, 0x5080, 0x6814, 0x0040,
+ 0x205c, 0x5038, 0x6880, 0x0814, 0x007c,
+ 0x385c, 0x6838, 0x0880, 0x2014, 0x8218,
+ 0x505e, 0x083a, 0x2082, 0x3816, 0x826a,
+ 0x685e, 0x203a, 0x3882, 0x5016, 0x0006,
+ 0x085e, 0x383a, 0x5082, 0x6816, 0x0042,
+ 0x205e, 0x503a, 0x6882, 0x0816, 0x007e,
+ 0x385e, 0x683a, 0x0882, 0x2016, 0x821a,
+ 0x5060, 0x083c, 0x2084, 0x3818, 0x826c,
+ 0x6860, 0x203c, 0x3884, 0x5018, 0x0008,
+ 0x0860, 0x383c, 0x5084, 0x6818, 0x0044,
+ 0x2060, 0x503c, 0x6884, 0x0818, 0x0080,
+ 0x3860, 0x683c, 0x0884, 0x2018, 0x821c,
+ 0x5062, 0x083e, 0x2086, 0x381a, 0x826e,
+ 0x6862, 0x203e, 0x3886, 0x501a, 0x000a,
+ 0x0862, 0x383e, 0x5086, 0x681a, 0x0046,
+ 0x2062, 0x503e, 0x6886, 0x081a, 0x0082,
+ 0x3862, 0x683e, 0x0886, 0x201a, 0x821e,
+ 0x5064, 0x0840, 0x2088, 0x381c, 0x8270,
+ 0x6864, 0x2040, 0x3888, 0x501c, 0x000c,
+ 0x0864, 0x3840, 0x5088, 0x681c, 0x0048,
+ 0x2064, 0x5040, 0x6888, 0x081c, 0x0084,
+ 0x3864, 0x6840, 0x0888, 0x201c, 0x8220,
+ 0x5066, 0x0842, 0x208a, 0x381e, 0x8272,
+ 0x6866, 0x2042, 0x388a, 0x501e, 0x000e,
+ 0x0866, 0x3842, 0x508a, 0x681e, 0x004a,
+ 0x2066, 0x5042, 0x688a, 0x081e, 0x0086,
+ 0x3866, 0x6842, 0x088a, 0x201e, 0x8222,
+ 0x5068, 0x0844, 0x208c, 0x3820, 0x8274,
+ 0x6868, 0x2044, 0x388c, 0x5020, 0x0010,
+ 0x0868, 0x3844, 0x508c, 0x6820, 0x004c,
+ 0x2068, 0x5044, 0x688c, 0x0820, 0x0088,
+ 0x3868, 0x6844, 0x088c, 0x2020, 0x8224,
+ 0x506a, 0x0846, 0x208e, 0x3822, 0x8276,
+ 0x686a, 0x2046, 0x388e, 0x5022, 0x0012,
+ 0x086a, 0x3846, 0x508e, 0x6822, 0x004e,
+ 0x206a, 0x5046, 0x688e, 0x0822, 0x008a,
+ 0x386a, 0x6846, 0x088e, 0x2022, 0x8226,
+ 0x545a, 0x0c36, 0x247e, 0x3c12, 0x807a,
+ 0x6c5a, 0x2436, 0x3c7e, 0x5412, 0x0402,
+ 0x0c5a, 0x3c36, 0x547e, 0x6c12, 0x043e,
+ 0x245a, 0x5436, 0x6c7e, 0x0c12, 0x047a,
+ 0x3c5a, 0x6c36, 0x0c7e, 0x2412, 0x802a,
+ 0x545c, 0x0c38, 0x2480, 0x3c14, 0x807c,
+ 0x6c5c, 0x2438, 0x3c80, 0x5414, 0x0404,
+ 0x0c5c, 0x3c38, 0x5480, 0x6c14, 0x0440,
+ 0x245c, 0x5438, 0x6c80, 0x0c14, 0x047c,
+ 0x3c5c, 0x6c38, 0x0c80, 0x2414, 0x802c,
+ 0x545e, 0x0c3a, 0x2482, 0x3c16, 0x807e,
+ 0x6c5e, 0x243a, 0x3c82, 0x5416, 0x0406,
+ 0x0c5e, 0x3c3a, 0x5482, 0x6c16, 0x0442,
+ 0x245e, 0x543a, 0x6c82, 0x0c16, 0x047e,
+ 0x3c5e, 0x6c3a, 0x0c82, 0x2416, 0x802e,
+ 0x5460, 0x0c3c, 0x2484, 0x3c18, 0x8080,
+ 0x6c60, 0x243c, 0x3c84, 0x5418, 0x0408,
+ 0x0c60, 0x3c3c, 0x5484, 0x6c18, 0x0444,
+ 0x2460, 0x543c, 0x6c84, 0x0c18, 0x0480,
+ 0x3c60, 0x6c3c, 0x0c84, 0x2418, 0x8030,
+ 0x5462, 0x0c3e, 0x2486, 0x3c1a, 0x8082,
+ 0x6c62, 0x243e, 0x3c86, 0x541a, 0x040a,
+ 0x0c62, 0x3c3e, 0x5486, 0x6c1a, 0x0446,
+ 0x2462, 0x543e, 0x6c86, 0x0c1a, 0x0482,
+ 0x3c62, 0x6c3e, 0x0c86, 0x241a, 0x8032,
+ 0x5464, 0x0c40, 0x2488, 0x3c1c, 0x8084,
+ 0x6c64, 0x2440, 0x3c88, 0x541c, 0x040c,
+ 0x0c64, 0x3c40, 0x5488, 0x6c1c, 0x0448,
+ 0x2464, 0x5440, 0x6c88, 0x0c1c, 0x0484,
+ 0x3c64, 0x6c40, 0x0c88, 0x241c, 0x8034,
+ 0x5466, 0x0c42, 0x248a, 0x3c1e, 0x8086,
+ 0x6c66, 0x2442, 0x3c8a, 0x541e, 0x040e,
+ 0x0c66, 0x3c42, 0x548a, 0x6c1e, 0x044a,
+ 0x2466, 0x5442, 0x6c8a, 0x0c1e, 0x0486,
+ 0x3c66, 0x6c42, 0x0c8a, 0x241e, 0x8036,
+ 0x5468, 0x0c44, 0x248c, 0x3c20, 0x8088,
+ 0x6c68, 0x2444, 0x3c8c, 0x5420, 0x0410,
+ 0x0c68, 0x3c44, 0x548c, 0x6c20, 0x044c,
+ 0x2468, 0x5444, 0x6c8c, 0x0c20, 0x0488,
+ 0x3c68, 0x6c44, 0x0c8c, 0x2420, 0x8038,
+ 0x546a, 0x0c46, 0x248e, 0x3c22, 0x808a,
+ 0x6c6a, 0x2446, 0x3c8e, 0x5422, 0x0412,
+ 0x0c6a, 0x3c46, 0x548e, 0x6c22, 0x044e,
+ 0x246a, 0x5446, 0x6c8e, 0x0c22, 0x048a,
+ 0x3c6a, 0x6c46, 0x0c8e, 0x2422, 0x803a,
+ 0x585a, 0x1036, 0x287e, 0x4012, 0x847a,
+ 0x705a, 0x2836, 0x407e, 0x5812, 0x0016,
+ 0x105a, 0x4036, 0x587e, 0x7012, 0x0052,
+ 0x285a, 0x5836, 0x707e, 0x1012, 0x008e,
+ 0x405a, 0x7036, 0x107e, 0x2812, 0x842a,
+ 0x585c, 0x1038, 0x2880, 0x4014, 0x847c,
+ 0x705c, 0x2838, 0x4080, 0x5814, 0x0018,
+ 0x105c, 0x4038, 0x5880, 0x7014, 0x0054,
+ 0x285c, 0x5838, 0x7080, 0x1014, 0x0090,
+ 0x405c, 0x7038, 0x1080, 0x2814, 0x842c,
+ 0x585e, 0x103a, 0x2882, 0x4016, 0x847e,
+ 0x705e, 0x283a, 0x4082, 0x5816, 0x001a,
+ 0x105e, 0x403a, 0x5882, 0x7016, 0x0056,
+ 0x285e, 0x583a, 0x7082, 0x1016, 0x0092,
+ 0x405e, 0x703a, 0x1082, 0x2816, 0x842e,
+ 0x5860, 0x103c, 0x2884, 0x4018, 0x8480,
+ 0x7060, 0x283c, 0x4084, 0x5818, 0x001c,
+ 0x1060, 0x403c, 0x5884, 0x7018, 0x0058,
+ 0x2860, 0x583c, 0x7084, 0x1018, 0x0094,
+ 0x4060, 0x703c, 0x1084, 0x2818, 0x8430,
+ 0x5862, 0x103e, 0x2886, 0x401a, 0x8482,
+ 0x7062, 0x283e, 0x4086, 0x581a, 0x001e,
+ 0x1062, 0x403e, 0x5886, 0x701a, 0x005a,
+ 0x2862, 0x583e, 0x7086, 0x101a, 0x0096,
+ 0x4062, 0x703e, 0x1086, 0x281a, 0x8432,
+ 0x5864, 0x1040, 0x2888, 0x401c, 0x8484,
+ 0x7064, 0x2840, 0x4088, 0x581c, 0x0020,
+ 0x1064, 0x4040, 0x5888, 0x701c, 0x005c,
+ 0x2864, 0x5840, 0x7088, 0x101c, 0x0098,
+ 0x4064, 0x7040, 0x1088, 0x281c, 0x8434,
+ 0x5866, 0x1042, 0x288a, 0x401e, 0x8486,
+ 0x7066, 0x2842, 0x408a, 0x581e, 0x0022,
+ 0x1066, 0x4042, 0x588a, 0x701e, 0x005e,
+ 0x2866, 0x5842, 0x708a, 0x101e, 0x009a,
+ 0x4066, 0x7042, 0x108a, 0x281e, 0x8436,
+ 0x5868, 0x1044, 0x288c, 0x4020, 0x8488,
+ 0x7068, 0x2844, 0x408c, 0x5820, 0x0024,
+ 0x1068, 0x4044, 0x588c, 0x7020, 0x0060,
+ 0x2868, 0x5844, 0x708c, 0x1020, 0x009c,
+ 0x4068, 0x7044, 0x108c, 0x2820, 0x8438,
+ 0x586a, 0x1046, 0x288e, 0x4022, 0x848a,
+ 0x706a, 0x2846, 0x408e, 0x5822, 0x0026,
+ 0x106a, 0x4046, 0x588e, 0x7022, 0x0062,
+ 0x286a, 0x5846, 0x708e, 0x1022, 0x009e,
+ 0x406a, 0x7046, 0x108e, 0x2822, 0x843a,
+ 0x5c5a, 0x1436, 0x2c7e, 0x4412, 0x828e,
+ 0x745a, 0x2c36, 0x447e, 0x5c12, 0x0416,
+ 0x145a, 0x4436, 0x5c7e, 0x7412, 0x0452,
+ 0x2c5a, 0x5c36, 0x747e, 0x1412, 0x048e,
+ 0x445a, 0x7436, 0x147e, 0x2c12, 0x823e,
+ 0x5c5c, 0x1438, 0x2c80, 0x4414, 0x8290,
+ 0x745c, 0x2c38, 0x4480, 0x5c14, 0x0418,
+ 0x145c, 0x4438, 0x5c80, 0x7414, 0x0454,
+ 0x2c5c, 0x5c38, 0x7480, 0x1414, 0x0490,
+ 0x445c, 0x7438, 0x1480, 0x2c14, 0x8240,
+ 0x5c5e, 0x143a, 0x2c82, 0x4416, 0x8292,
+ 0x745e, 0x2c3a, 0x4482, 0x5c16, 0x041a,
+ 0x145e, 0x443a, 0x5c82, 0x7416, 0x0456,
+ 0x2c5e, 0x5c3a, 0x7482, 0x1416, 0x0492,
+ 0x445e, 0x743a, 0x1482, 0x2c16, 0x8242,
+ 0x5c60, 0x143c, 0x2c84, 0x4418, 0x8294,
+ 0x7460, 0x2c3c, 0x4484, 0x5c18, 0x041c,
+ 0x1460, 0x443c, 0x5c84, 0x7418, 0x0458,
+ 0x2c60, 0x5c3c, 0x7484, 0x1418, 0x0494,
+ 0x4460, 0x743c, 0x1484, 0x2c18, 0x8244,
+ 0x5c62, 0x143e, 0x2c86, 0x441a, 0x8296,
+ 0x7462, 0x2c3e, 0x4486, 0x5c1a, 0x041e,
+ 0x1462, 0x443e, 0x5c86, 0x741a, 0x045a,
+ 0x2c62, 0x5c3e, 0x7486, 0x141a, 0x0496,
+ 0x4462, 0x743e, 0x1486, 0x2c1a, 0x8246,
+ 0x5c64, 0x1440, 0x2c88, 0x441c, 0x8298,
+ 0x7464, 0x2c40, 0x4488, 0x5c1c, 0x0420,
+ 0x1464, 0x4440, 0x5c88, 0x741c, 0x045c,
+ 0x2c64, 0x5c40, 0x7488, 0x141c, 0x0498,
+ 0x4464, 0x7440, 0x1488, 0x2c1c, 0x8248,
+ 0x5c66, 0x1442, 0x2c8a, 0x441e, 0x829a,
+ 0x7466, 0x2c42, 0x448a, 0x5c1e, 0x0422,
+ 0x1466, 0x4442, 0x5c8a, 0x741e, 0x045e,
+ 0x2c66, 0x5c42, 0x748a, 0x141e, 0x049a,
+ 0x4466, 0x7442, 0x148a, 0x2c1e, 0x824a,
+ 0x5c68, 0x1444, 0x2c8c, 0x4420, 0x829c,
+ 0x7468, 0x2c44, 0x448c, 0x5c20, 0x0424,
+ 0x1468, 0x4444, 0x5c8c, 0x7420, 0x0460,
+ 0x2c68, 0x5c44, 0x748c, 0x1420, 0x049c,
+ 0x4468, 0x7444, 0x148c, 0x2c20, 0x824c,
+ 0x5c6a, 0x1446, 0x2c8e, 0x4422, 0x829e,
+ 0x746a, 0x2c46, 0x448e, 0x5c22, 0x0426,
+ 0x146a, 0x4446, 0x5c8e, 0x7422, 0x0462,
+ 0x2c6a, 0x5c46, 0x748e, 0x1422, 0x049e,
+ 0x446a, 0x7446, 0x148e, 0x2c22, 0x824e,
+ 0x605a, 0x1836, 0x307e, 0x4812, 0x8604,
+ 0x785a, 0x3036, 0x487e, 0x6012, 0x002a,
+ 0x185a, 0x4836, 0x607e, 0x7812, 0x0066,
+ 0x305a, 0x6036, 0x787e, 0x1812, 0x8002,
+ 0x485a, 0x7836, 0x187e, 0x3012, 0x8052,
+ 0x605c, 0x1838, 0x3080, 0x4814, 0x8608,
+ 0x785c, 0x3038, 0x4880, 0x6014, 0x002c,
+ 0x185c, 0x4838, 0x6080, 0x7814, 0x0068,
+ 0x305c, 0x6038, 0x7880, 0x1814, 0x8004,
+ 0x485c, 0x7838, 0x1880, 0x3014, 0x8054,
+ 0x605e, 0x183a, 0x3082, 0x4816, 0x860c,
+ 0x785e, 0x303a, 0x4882, 0x6016, 0x002e,
+ 0x185e, 0x483a, 0x6082, 0x7816, 0x006a,
+ 0x305e, 0x603a, 0x7882, 0x1816, 0x8006,
+ 0x485e, 0x783a, 0x1882, 0x3016, 0x8056,
+ 0x6060, 0x183c, 0x3084, 0x4818, 0x8610,
+ 0x7860, 0x303c, 0x4884, 0x6018, 0x0030,
+ 0x1860, 0x483c, 0x6084, 0x7818, 0x006c,
+ 0x3060, 0x603c, 0x7884, 0x1818, 0x8008,
+ 0x4860, 0x783c, 0x1884, 0x3018, 0x8058,
+ 0x6062, 0x183e, 0x3086, 0x481a, 0x8614,
+ 0x7862, 0x303e, 0x4886, 0x601a, 0x0032,
+ 0x1862, 0x483e, 0x6086, 0x781a, 0x006e,
+ 0x3062, 0x603e, 0x7886, 0x181a, 0x800a,
+ 0x4862, 0x783e, 0x1886, 0x301a, 0x805a,
+ 0x6064, 0x1840, 0x3088, 0x481c, 0x8618,
+ 0x7864, 0x3040, 0x4888, 0x601c, 0x0034,
+ 0x1864, 0x4840, 0x6088, 0x781c, 0x0070,
+ 0x3064, 0x6040, 0x7888, 0x181c, 0x800c,
+ 0x4864, 0x7840, 0x1888, 0x301c, 0x805c,
+ 0x6066, 0x1842, 0x308a, 0x481e, 0x861c,
+ 0x7866, 0x3042, 0x488a, 0x601e, 0x0036,
+ 0x1866, 0x4842, 0x608a, 0x781e, 0x0072,
+ 0x3066, 0x6042, 0x788a, 0x181e, 0x800e,
+ 0x4866, 0x7842, 0x188a, 0x301e, 0x805e,
+ 0x6068, 0x1844, 0x308c, 0x4820, 0x8620,
+ 0x7868, 0x3044, 0x488c, 0x6020, 0x0038,
+ 0x1868, 0x4844, 0x608c, 0x7820, 0x0074,
+ 0x3068, 0x6044, 0x788c, 0x1820, 0x8010,
+ 0x4868, 0x7844, 0x188c, 0x3020, 0x8060,
+ 0x606a, 0x1846, 0x308e, 0x4822, 0x8624,
+ 0x786a, 0x3046, 0x488e, 0x6022, 0x003a,
+ 0x186a, 0x4846, 0x608e, 0x7822, 0x0076,
+ 0x306a, 0x6046, 0x788e, 0x1822, 0x8012,
+ 0x486a, 0x7846, 0x188e, 0x3022, 0x8062,
+ 0x645a, 0x1c36, 0x347e, 0x4c12, 0x8654,
+ 0x7c5a, 0x3436, 0x4c7e, 0x6412, 0x042a,
+ 0x1c5a, 0x4c36, 0x647e, 0x7c12, 0x0466,
+ 0x345a, 0x6436, 0x7c7e, 0x1c12, 0x8402,
+ 0x4c5a, 0x7c36, 0x1c7e, 0x3412, 0x8452,
+ 0x645c, 0x1c38, 0x3480, 0x4c14, 0x8658,
+ 0x7c5c, 0x3438, 0x4c80, 0x6414, 0x042c,
+ 0x1c5c, 0x4c38, 0x6480, 0x7c14, 0x0468,
+ 0x345c, 0x6438, 0x7c80, 0x1c14, 0x8404,
+ 0x4c5c, 0x7c38, 0x1c80, 0x3414, 0x8454,
+ 0x645e, 0x1c3a, 0x3482, 0x4c16, 0x865c,
+ 0x7c5e, 0x343a, 0x4c82, 0x6416, 0x042e,
+ 0x1c5e, 0x4c3a, 0x6482, 0x7c16, 0x046a,
+ 0x345e, 0x643a, 0x7c82, 0x1c16, 0x8406,
+ 0x4c5e, 0x7c3a, 0x1c82, 0x3416, 0x8456,
+ 0x6460, 0x1c3c, 0x3484, 0x4c18, 0x8660,
+ 0x7c60, 0x343c, 0x4c84, 0x6418, 0x0430,
+ 0x1c60, 0x4c3c, 0x6484, 0x7c18, 0x046c,
+ 0x3460, 0x643c, 0x7c84, 0x1c18, 0x8408,
+ 0x4c60, 0x7c3c, 0x1c84, 0x3418, 0x8458,
+ 0x6462, 0x1c3e, 0x3486, 0x4c1a, 0x8664,
+ 0x7c62, 0x343e, 0x4c86, 0x641a, 0x0432,
+ 0x1c62, 0x4c3e, 0x6486, 0x7c1a, 0x046e,
+ 0x3462, 0x643e, 0x7c86, 0x1c1a, 0x840a,
+ 0x4c62, 0x7c3e, 0x1c86, 0x341a, 0x845a,
+ 0x6464, 0x1c40, 0x3488, 0x4c1c, 0x8668,
+ 0x7c64, 0x3440, 0x4c88, 0x641c, 0x0434,
+ 0x1c64, 0x4c40, 0x6488, 0x7c1c, 0x0470,
+ 0x3464, 0x6440, 0x7c88, 0x1c1c, 0x840c,
+ 0x4c64, 0x7c40, 0x1c88, 0x341c, 0x845c,
+ 0x6466, 0x1c42, 0x348a, 0x4c1e, 0x866c,
+ 0x7c66, 0x3442, 0x4c8a, 0x641e, 0x0436,
+ 0x1c66, 0x4c42, 0x648a, 0x7c1e, 0x0472,
+ 0x3466, 0x6442, 0x7c8a, 0x1c1e, 0x840e,
+ 0x4c66, 0x7c42, 0x1c8a, 0x341e, 0x845e,
+ 0x6468, 0x1c44, 0x348c, 0x4c20, 0x8670,
+ 0x7c68, 0x3444, 0x4c8c, 0x6420, 0x0438,
+ 0x1c68, 0x4c44, 0x648c, 0x7c20, 0x0474,
+ 0x3468, 0x6444, 0x7c8c, 0x1c20, 0x8410,
+ 0x4c68, 0x7c44, 0x1c8c, 0x3420, 0x8460,
+ 0x646a, 0x1c46, 0x348e, 0x4c22, 0x8674,
+ 0x7c6a, 0x3446, 0x4c8e, 0x6422, 0x043a,
+ 0x1c6a, 0x4c46, 0x648e, 0x7c22, 0x0476,
+ 0x346a, 0x6446, 0x7c8e, 0x1c22, 0x8412,
+ 0x4c6a, 0x7c46, 0x1c8e, 0x3422, 0x8462,
+ 0x0a48, 0x3a24, 0x526c, 0x6a00, 0x2290,
+ 0x2248, 0x5224, 0x6a6c, 0x0a00, 0x3a90,
+ 0x3a48, 0x6a24, 0x0a6c, 0x2200, 0x5290,
+ 0x5248, 0x0a24, 0x226c, 0x3a00, 0x6a90,
+ 0x6a48, 0x2224, 0x3a6c, 0x5200, 0x0a90,
+ 0x0a4a, 0x3a26, 0x526e, 0x6a02, 0x2292,
+ 0x224a, 0x5226, 0x6a6e, 0x0a02, 0x3a92,
+ 0x3a4a, 0x6a26, 0x0a6e, 0x2202, 0x5292,
+ 0x524a, 0x0a26, 0x226e, 0x3a02, 0x6a92,
+ 0x6a4a, 0x2226, 0x3a6e, 0x5202, 0x0a92,
+ 0x0a4c, 0x3a28, 0x5270, 0x6a04, 0x2294,
+ 0x224c, 0x5228, 0x6a70, 0x0a04, 0x3a94,
+ 0x3a4c, 0x6a28, 0x0a70, 0x2204, 0x5294,
+ 0x524c, 0x0a28, 0x2270, 0x3a04, 0x6a94,
+ 0x6a4c, 0x2228, 0x3a70, 0x5204, 0x0a94,
+ 0x0a4e, 0x3a2a, 0x5272, 0x6a06, 0x2296,
+ 0x224e, 0x522a, 0x6a72, 0x0a06, 0x3a96,
+ 0x3a4e, 0x6a2a, 0x0a72, 0x2206, 0x5296,
+ 0x524e, 0x0a2a, 0x2272, 0x3a06, 0x6a96,
+ 0x6a4e, 0x222a, 0x3a72, 0x5206, 0x0a96,
+ 0x0a50, 0x3a2c, 0x5274, 0x6a08, 0x2298,
+ 0x2250, 0x522c, 0x6a74, 0x0a08, 0x3a98,
+ 0x3a50, 0x6a2c, 0x0a74, 0x2208, 0x5298,
+ 0x5250, 0x0a2c, 0x2274, 0x3a08, 0x6a98,
+ 0x6a50, 0x222c, 0x3a74, 0x5208, 0x0a98,
+ 0x0a52, 0x3a2e, 0x5276, 0x6a0a, 0x229a,
+ 0x2252, 0x522e, 0x6a76, 0x0a0a, 0x3a9a,
+ 0x3a52, 0x6a2e, 0x0a76, 0x220a, 0x529a,
+ 0x5252, 0x0a2e, 0x2276, 0x3a0a, 0x6a9a,
+ 0x6a52, 0x222e, 0x3a76, 0x520a, 0x0a9a,
+ 0x0a54, 0x3a30, 0x5278, 0x6a0c, 0x229c,
+ 0x2254, 0x5230, 0x6a78, 0x0a0c, 0x3a9c,
+ 0x3a54, 0x6a30, 0x0a78, 0x220c, 0x529c,
+ 0x5254, 0x0a30, 0x2278, 0x3a0c, 0x6a9c,
+ 0x6a54, 0x2230, 0x3a78, 0x520c, 0x0a9c,
+ 0x0a56, 0x3a32, 0x527a, 0x6a0e, 0x229e,
+ 0x2256, 0x5232, 0x6a7a, 0x0a0e, 0x3a9e,
+ 0x3a56, 0x6a32, 0x0a7a, 0x220e, 0x529e,
+ 0x5256, 0x0a32, 0x227a, 0x3a0e, 0x6a9e,
+ 0x6a56, 0x2232, 0x3a7a, 0x520e, 0x0a9e,
+ 0x0a58, 0x3a34, 0x527c, 0x6a10, 0x023c,
+ 0x2258, 0x5234, 0x6a7c, 0x0a10, 0x0278,
+ 0x3a58, 0x6a34, 0x0a7c, 0x2210, 0x8414,
+ 0x5258, 0x0a34, 0x227c, 0x3a10, 0x8464,
+ 0x6a58, 0x2234, 0x3a7c, 0x5210, 0x0200,
+ 0x0e48, 0x3e24, 0x566c, 0x6e00, 0x2690,
+ 0x2648, 0x5624, 0x6e6c, 0x0e00, 0x3e90,
+ 0x3e48, 0x6e24, 0x0e6c, 0x2600, 0x5690,
+ 0x5648, 0x0e24, 0x266c, 0x3e00, 0x6e90,
+ 0x6e48, 0x2624, 0x3e6c, 0x5600, 0x0e90,
+ 0x0e4a, 0x3e26, 0x566e, 0x6e02, 0x2692,
+ 0x264a, 0x5626, 0x6e6e, 0x0e02, 0x3e92,
+ 0x3e4a, 0x6e26, 0x0e6e, 0x2602, 0x5692,
+ 0x564a, 0x0e26, 0x266e, 0x3e02, 0x6e92,
+ 0x6e4a, 0x2626, 0x3e6e, 0x5602, 0x0e92,
+ 0x0e4c, 0x3e28, 0x5670, 0x6e04, 0x2694,
+ 0x264c, 0x5628, 0x6e70, 0x0e04, 0x3e94,
+ 0x3e4c, 0x6e28, 0x0e70, 0x2604, 0x5694,
+ 0x564c, 0x0e28, 0x2670, 0x3e04, 0x6e94,
+ 0x6e4c, 0x2628, 0x3e70, 0x5604, 0x0e94,
+ 0x0e4e, 0x3e2a, 0x5672, 0x6e06, 0x2696,
+ 0x264e, 0x562a, 0x6e72, 0x0e06, 0x3e96,
+ 0x3e4e, 0x6e2a, 0x0e72, 0x2606, 0x5696,
+ 0x564e, 0x0e2a, 0x2672, 0x3e06, 0x6e96,
+ 0x6e4e, 0x262a, 0x3e72, 0x5606, 0x0e96,
+ 0x0e50, 0x3e2c, 0x5674, 0x6e08, 0x2698,
+ 0x2650, 0x562c, 0x6e74, 0x0e08, 0x3e98,
+ 0x3e50, 0x6e2c, 0x0e74, 0x2608, 0x5698,
+ 0x5650, 0x0e2c, 0x2674, 0x3e08, 0x6e98,
+ 0x6e50, 0x262c, 0x3e74, 0x5608, 0x0e98,
+ 0x0e52, 0x3e2e, 0x5676, 0x6e0a, 0x269a,
+ 0x2652, 0x562e, 0x6e76, 0x0e0a, 0x3e9a,
+ 0x3e52, 0x6e2e, 0x0e76, 0x260a, 0x569a,
+ 0x5652, 0x0e2e, 0x2676, 0x3e0a, 0x6e9a,
+ 0x6e52, 0x262e, 0x3e76, 0x560a, 0x0e9a,
+ 0x0e54, 0x3e30, 0x5678, 0x6e0c, 0x269c,
+ 0x2654, 0x5630, 0x6e78, 0x0e0c, 0x3e9c,
+ 0x3e54, 0x6e30, 0x0e78, 0x260c, 0x569c,
+ 0x5654, 0x0e30, 0x2678, 0x3e0c, 0x6e9c,
+ 0x6e54, 0x2630, 0x3e78, 0x560c, 0x0e9c,
+ 0x0e56, 0x3e32, 0x567a, 0x6e0e, 0x269e,
+ 0x2656, 0x5632, 0x6e7a, 0x0e0e, 0x3e9e,
+ 0x3e56, 0x6e32, 0x0e7a, 0x260e, 0x569e,
+ 0x5656, 0x0e32, 0x267a, 0x3e0e, 0x6e9e,
+ 0x6e56, 0x2632, 0x3e7a, 0x560e, 0x0e9e,
+ 0x0e58, 0x3e34, 0x567c, 0x6e10, 0x063c,
+ 0x2658, 0x5634, 0x6e7c, 0x0e10, 0x0678,
+ 0x3e58, 0x6e34, 0x0e7c, 0x2610, 0x8228,
+ 0x5658, 0x0e34, 0x267c, 0x3e10, 0x8278,
+ 0x6e58, 0x2634, 0x3e7c, 0x5610, 0x0600,
+ 0x1248, 0x4224, 0x5a6c, 0x7200, 0x2a90,
+ 0x2a48, 0x5a24, 0x726c, 0x1200, 0x4290,
+ 0x4248, 0x7224, 0x126c, 0x2a00, 0x5a90,
+ 0x5a48, 0x1224, 0x2a6c, 0x4200, 0x7290,
+ 0x7248, 0x2a24, 0x426c, 0x5a00, 0x1290,
+ 0x124a, 0x4226, 0x5a6e, 0x7202, 0x2a92,
+ 0x2a4a, 0x5a26, 0x726e, 0x1202, 0x4292,
+ 0x424a, 0x7226, 0x126e, 0x2a02, 0x5a92,
+ 0x5a4a, 0x1226, 0x2a6e, 0x4202, 0x7292,
+ 0x724a, 0x2a26, 0x426e, 0x5a02, 0x1292,
+ 0x124c, 0x4228, 0x5a70, 0x7204, 0x2a94,
+ 0x2a4c, 0x5a28, 0x7270, 0x1204, 0x4294,
+ 0x424c, 0x7228, 0x1270, 0x2a04, 0x5a94,
+ 0x5a4c, 0x1228, 0x2a70, 0x4204, 0x7294,
+ 0x724c, 0x2a28, 0x4270, 0x5a04, 0x1294,
+ 0x124e, 0x422a, 0x5a72, 0x7206, 0x2a96,
+ 0x2a4e, 0x5a2a, 0x7272, 0x1206, 0x4296,
+ 0x424e, 0x722a, 0x1272, 0x2a06, 0x5a96,
+ 0x5a4e, 0x122a, 0x2a72, 0x4206, 0x7296,
+ 0x724e, 0x2a2a, 0x4272, 0x5a06, 0x1296,
+ 0x1250, 0x422c, 0x5a74, 0x7208, 0x2a98,
+ 0x2a50, 0x5a2c, 0x7274, 0x1208, 0x4298,
+ 0x4250, 0x722c, 0x1274, 0x2a08, 0x5a98,
+ 0x5a50, 0x122c, 0x2a74, 0x4208, 0x7298,
+ 0x7250, 0x2a2c, 0x4274, 0x5a08, 0x1298,
+ 0x1252, 0x422e, 0x5a76, 0x720a, 0x2a9a,
+ 0x2a52, 0x5a2e, 0x7276, 0x120a, 0x429a,
+ 0x4252, 0x722e, 0x1276, 0x2a0a, 0x5a9a,
+ 0x5a52, 0x122e, 0x2a76, 0x420a, 0x729a,
+ 0x7252, 0x2a2e, 0x4276, 0x5a0a, 0x129a,
+ 0x1254, 0x4230, 0x5a78, 0x720c, 0x2a9c,
+ 0x2a54, 0x5a30, 0x7278, 0x120c, 0x429c,
+ 0x4254, 0x7230, 0x1278, 0x2a0c, 0x5a9c,
+ 0x5a54, 0x1230, 0x2a78, 0x420c, 0x729c,
+ 0x7254, 0x2a30, 0x4278, 0x5a0c, 0x129c,
+ 0x1256, 0x4232, 0x5a7a, 0x720e, 0x2a9e,
+ 0x2a56, 0x5a32, 0x727a, 0x120e, 0x429e,
+ 0x4256, 0x7232, 0x127a, 0x2a0e, 0x5a9e,
+ 0x5a56, 0x1232, 0x2a7a, 0x420e, 0x729e,
+ 0x7256, 0x2a32, 0x427a, 0x5a0e, 0x129e,
+ 0x1258, 0x4234, 0x5a7c, 0x7210, 0x0250,
+ 0x2a58, 0x5a34, 0x727c, 0x1210, 0x028c,
+ 0x4258, 0x7234, 0x127c, 0x2a10, 0x803c,
+ 0x5a58, 0x1234, 0x2a7c, 0x4210, 0x808c,
+ 0x7258, 0x2a34, 0x427c, 0x5a10, 0x0214,
+ 0x1648, 0x4624, 0x5e6c, 0x7600, 0x2e90,
+ 0x2e48, 0x5e24, 0x766c, 0x1600, 0x4690,
+ 0x4648, 0x7624, 0x166c, 0x2e00, 0x5e90,
+ 0x5e48, 0x1624, 0x2e6c, 0x4600, 0x7690,
+ 0x7648, 0x2e24, 0x466c, 0x5e00, 0x1690,
+ 0x164a, 0x4626, 0x5e6e, 0x7602, 0x2e92,
+ 0x2e4a, 0x5e26, 0x766e, 0x1602, 0x4692,
+ 0x464a, 0x7626, 0x166e, 0x2e02, 0x5e92,
+ 0x5e4a, 0x1626, 0x2e6e, 0x4602, 0x7692,
+ 0x764a, 0x2e26, 0x466e, 0x5e02, 0x1692,
+ 0x164c, 0x4628, 0x5e70, 0x7604, 0x2e94,
+ 0x2e4c, 0x5e28, 0x7670, 0x1604, 0x4694,
+ 0x464c, 0x7628, 0x1670, 0x2e04, 0x5e94,
+ 0x5e4c, 0x1628, 0x2e70, 0x4604, 0x7694,
+ 0x764c, 0x2e28, 0x4670, 0x5e04, 0x1694,
+ 0x164e, 0x462a, 0x5e72, 0x7606, 0x2e96,
+ 0x2e4e, 0x5e2a, 0x7672, 0x1606, 0x4696,
+ 0x464e, 0x762a, 0x1672, 0x2e06, 0x5e96,
+ 0x5e4e, 0x162a, 0x2e72, 0x4606, 0x7696,
+ 0x764e, 0x2e2a, 0x4672, 0x5e06, 0x1696,
+ 0x1650, 0x462c, 0x5e74, 0x7608, 0x2e98,
+ 0x2e50, 0x5e2c, 0x7674, 0x1608, 0x4698,
+ 0x4650, 0x762c, 0x1674, 0x2e08, 0x5e98,
+ 0x5e50, 0x162c, 0x2e74, 0x4608, 0x7698,
+ 0x7650, 0x2e2c, 0x4674, 0x5e08, 0x1698,
+ 0x1652, 0x462e, 0x5e76, 0x760a, 0x2e9a,
+ 0x2e52, 0x5e2e, 0x7676, 0x160a, 0x469a,
+ 0x4652, 0x762e, 0x1676, 0x2e0a, 0x5e9a,
+ 0x5e52, 0x162e, 0x2e76, 0x460a, 0x769a,
+ 0x7652, 0x2e2e, 0x4676, 0x5e0a, 0x169a,
+ 0x1654, 0x4630, 0x5e78, 0x760c, 0x2e9c,
+ 0x2e54, 0x5e30, 0x7678, 0x160c, 0x469c,
+ 0x4654, 0x7630, 0x1678, 0x2e0c, 0x5e9c,
+ 0x5e54, 0x1630, 0x2e78, 0x460c, 0x769c,
+ 0x7654, 0x2e30, 0x4678, 0x5e0c, 0x169c,
+ 0x1656, 0x4632, 0x5e7a, 0x760e, 0x2e9e,
+ 0x2e56, 0x5e32, 0x767a, 0x160e, 0x469e,
+ 0x4656, 0x7632, 0x167a, 0x2e0e, 0x5e9e,
+ 0x5e56, 0x1632, 0x2e7a, 0x460e, 0x769e,
+ 0x7656, 0x2e32, 0x467a, 0x5e0e, 0x169e,
+ 0x1658, 0x4634, 0x5e7c, 0x7610, 0x0650,
+ 0x2e58, 0x5e34, 0x767c, 0x1610, 0x068c,
+ 0x4658, 0x7634, 0x167c, 0x2e10, 0x843c,
+ 0x5e58, 0x1634, 0x2e7c, 0x4610, 0x848c,
+ 0x7658, 0x2e34, 0x467c, 0x5e10, 0x0614,
+ 0x1a48, 0x4a24, 0x626c, 0x7a00, 0x3290,
+ 0x3248, 0x6224, 0x7a6c, 0x1a00, 0x4a90,
+ 0x4a48, 0x7a24, 0x1a6c, 0x3200, 0x6290,
+ 0x6248, 0x1a24, 0x326c, 0x4a00, 0x7a90,
+ 0x7a48, 0x3224, 0x4a6c, 0x6200, 0x1a90,
+ 0x1a4a, 0x4a26, 0x626e, 0x7a02, 0x3292,
+ 0x324a, 0x6226, 0x7a6e, 0x1a02, 0x4a92,
+ 0x4a4a, 0x7a26, 0x1a6e, 0x3202, 0x6292,
+ 0x624a, 0x1a26, 0x326e, 0x4a02, 0x7a92,
+ 0x7a4a, 0x3226, 0x4a6e, 0x6202, 0x1a92,
+ 0x1a4c, 0x4a28, 0x6270, 0x7a04, 0x3294,
+ 0x324c, 0x6228, 0x7a70, 0x1a04, 0x4a94,
+ 0x4a4c, 0x7a28, 0x1a70, 0x3204, 0x6294,
+ 0x624c, 0x1a28, 0x3270, 0x4a04, 0x7a94,
+ 0x7a4c, 0x3228, 0x4a70, 0x6204, 0x1a94,
+ 0x1a4e, 0x4a2a, 0x6272, 0x7a06, 0x3296,
+ 0x324e, 0x622a, 0x7a72, 0x1a06, 0x4a96,
+ 0x4a4e, 0x7a2a, 0x1a72, 0x3206, 0x6296,
+ 0x624e, 0x1a2a, 0x3272, 0x4a06, 0x7a96,
+ 0x7a4e, 0x322a, 0x4a72, 0x6206, 0x1a96,
+ 0x1a50, 0x4a2c, 0x6274, 0x7a08, 0x3298,
+ 0x3250, 0x622c, 0x7a74, 0x1a08, 0x4a98,
+ 0x4a50, 0x7a2c, 0x1a74, 0x3208, 0x6298,
+ 0x6250, 0x1a2c, 0x3274, 0x4a08, 0x7a98,
+ 0x7a50, 0x322c, 0x4a74, 0x6208, 0x1a98,
+ 0x1a52, 0x4a2e, 0x6276, 0x7a0a, 0x329a,
+ 0x3252, 0x622e, 0x7a76, 0x1a0a, 0x4a9a,
+ 0x4a52, 0x7a2e, 0x1a76, 0x320a, 0x629a,
+ 0x6252, 0x1a2e, 0x3276, 0x4a0a, 0x7a9a,
+ 0x7a52, 0x322e, 0x4a76, 0x620a, 0x1a9a,
+ 0x1a54, 0x4a30, 0x6278, 0x7a0c, 0x329c,
+ 0x3254, 0x6230, 0x7a78, 0x1a0c, 0x4a9c,
+ 0x4a54, 0x7a30, 0x1a78, 0x320c, 0x629c,
+ 0x6254, 0x1a30, 0x3278, 0x4a0c, 0x7a9c,
+ 0x7a54, 0x3230, 0x4a78, 0x620c, 0x1a9c,
+ 0x1a56, 0x4a32, 0x627a, 0x7a0e, 0x329e,
+ 0x3256, 0x6232, 0x7a7a, 0x1a0e, 0x4a9e,
+ 0x4a56, 0x7a32, 0x1a7a, 0x320e, 0x629e,
+ 0x6256, 0x1a32, 0x327a, 0x4a0e, 0x7a9e,
+ 0x7a56, 0x3232, 0x4a7a, 0x620e, 0x1a9e,
+ 0x1a58, 0x4a34, 0x627c, 0x7a10, 0x0264,
+ 0x3258, 0x6234, 0x7a7c, 0x1a10, 0x8200,
+ 0x4a58, 0x7a34, 0x1a7c, 0x3210, 0x8250,
+ 0x6258, 0x1a34, 0x327c, 0x4a10, 0x8628,
+ 0x7a58, 0x3234, 0x4a7c, 0x6210, 0x0228,
+ 0x1e48, 0x4e24, 0x666c, 0x7e00, 0x3690,
+ 0x3648, 0x6624, 0x7e6c, 0x1e00, 0x4e90,
+ 0x4e48, 0x7e24, 0x1e6c, 0x3600, 0x6690,
+ 0x6648, 0x1e24, 0x366c, 0x4e00, 0x7e90,
+ 0x7e48, 0x3624, 0x4e6c, 0x6600, 0x1e90,
+ 0x1e4a, 0x4e26, 0x666e, 0x7e02, 0x3692,
+ 0x364a, 0x6626, 0x7e6e, 0x1e02, 0x4e92,
+ 0x4e4a, 0x7e26, 0x1e6e, 0x3602, 0x6692,
+ 0x664a, 0x1e26, 0x366e, 0x4e02, 0x7e92,
+ 0x7e4a, 0x3626, 0x4e6e, 0x6602, 0x1e92,
+ 0x1e4c, 0x4e28, 0x6670, 0x7e04, 0x3694,
+ 0x364c, 0x6628, 0x7e70, 0x1e04, 0x4e94,
+ 0x4e4c, 0x7e28, 0x1e70, 0x3604, 0x6694,
+ 0x664c, 0x1e28, 0x3670, 0x4e04, 0x7e94,
+ 0x7e4c, 0x3628, 0x4e70, 0x6604, 0x1e94,
+ 0x1e4e, 0x4e2a, 0x6672, 0x7e06, 0x3696,
+ 0x364e, 0x662a, 0x7e72, 0x1e06, 0x4e96,
+ 0x4e4e, 0x7e2a, 0x1e72, 0x3606, 0x6696,
+ 0x664e, 0x1e2a, 0x3672, 0x4e06, 0x7e96,
+ 0x7e4e, 0x362a, 0x4e72, 0x6606, 0x1e96,
+ 0x1e50, 0x4e2c, 0x6674, 0x7e08, 0x3698,
+ 0x3650, 0x662c, 0x7e74, 0x1e08, 0x4e98,
+ 0x4e50, 0x7e2c, 0x1e74, 0x3608, 0x6698,
+ 0x6650, 0x1e2c, 0x3674, 0x4e08, 0x7e98,
+ 0x7e50, 0x362c, 0x4e74, 0x6608, 0x1e98,
+ 0x1e52, 0x4e2e, 0x6676, 0x7e0a, 0x369a,
+ 0x3652, 0x662e, 0x7e76, 0x1e0a, 0x4e9a,
+ 0x4e52, 0x7e2e, 0x1e76, 0x360a, 0x669a,
+ 0x6652, 0x1e2e, 0x3676, 0x4e0a, 0x7e9a,
+ 0x7e52, 0x362e, 0x4e76, 0x660a, 0x1e9a,
+ 0x1e54, 0x4e30, 0x6678, 0x7e0c, 0x369c,
+ 0x3654, 0x6630, 0x7e78, 0x1e0c, 0x4e9c,
+ 0x4e54, 0x7e30, 0x1e78, 0x360c, 0x669c,
+ 0x6654, 0x1e30, 0x3678, 0x4e0c, 0x7e9c,
+ 0x7e54, 0x3630, 0x4e78, 0x660c, 0x1e9c,
+ 0x1e56, 0x4e32, 0x667a, 0x7e0e, 0x369e,
+ 0x3656, 0x6632, 0x7e7a, 0x1e0e, 0x4e9e,
+ 0x4e56, 0x7e32, 0x1e7a, 0x360e, 0x669e,
+ 0x6656, 0x1e32, 0x367a, 0x4e0e, 0x7e9e,
+ 0x7e56, 0x3632, 0x4e7a, 0x660e, 0x1e9e,
+ 0x1e58, 0x4e34, 0x667c, 0x7e10, 0x0664,
+ 0x3658, 0x6634, 0x7e7c, 0x1e10, 0x8014,
+ 0x4e58, 0x7e34, 0x1e7c, 0x3610, 0x8064,
+ 0x6658, 0x1e34, 0x367c, 0x4e10, 0x8678,
+ 0x7e58, 0x3634, 0x4e7c, 0x6610, 0x0628,
+ 0x3a5a, 0x6a36, 0x0a7e, 0x2212, 0x8416,
+ 0x525a, 0x0a36, 0x227e, 0x3a12, 0x8466,
+ 0x6a5a, 0x2236, 0x3a7e, 0x5212, 0x0202,
+ 0x0a5a, 0x3a36, 0x527e, 0x6a12, 0x023e,
+ 0x225a, 0x5236, 0x6a7e, 0x0a12, 0x027a,
+ 0x3a5c, 0x6a38, 0x0a80, 0x2214, 0x8418,
+ 0x525c, 0x0a38, 0x2280, 0x3a14, 0x8468,
+ 0x6a5c, 0x2238, 0x3a80, 0x5214, 0x0204,
+ 0x0a5c, 0x3a38, 0x5280, 0x6a14, 0x0240,
+ 0x225c, 0x5238, 0x6a80, 0x0a14, 0x027c,
+ 0x3a5e, 0x6a3a, 0x0a82, 0x2216, 0x841a,
+ 0x525e, 0x0a3a, 0x2282, 0x3a16, 0x846a,
+ 0x6a5e, 0x223a, 0x3a82, 0x5216, 0x0206,
+ 0x0a5e, 0x3a3a, 0x5282, 0x6a16, 0x0242,
+ 0x225e, 0x523a, 0x6a82, 0x0a16, 0x027e,
+ 0x3a60, 0x6a3c, 0x0a84, 0x2218, 0x841c,
+ 0x5260, 0x0a3c, 0x2284, 0x3a18, 0x846c,
+ 0x6a60, 0x223c, 0x3a84, 0x5218, 0x0208,
+ 0x0a60, 0x3a3c, 0x5284, 0x6a18, 0x0244,
+ 0x2260, 0x523c, 0x6a84, 0x0a18, 0x0280,
+ 0x3a62, 0x6a3e, 0x0a86, 0x221a, 0x841e,
+ 0x5262, 0x0a3e, 0x2286, 0x3a1a, 0x846e,
+ 0x6a62, 0x223e, 0x3a86, 0x521a, 0x020a,
+ 0x0a62, 0x3a3e, 0x5286, 0x6a1a, 0x0246,
+ 0x2262, 0x523e, 0x6a86, 0x0a1a, 0x0282,
+ 0x3a64, 0x6a40, 0x0a88, 0x221c, 0x8420,
+ 0x5264, 0x0a40, 0x2288, 0x3a1c, 0x8470,
+ 0x6a64, 0x2240, 0x3a88, 0x521c, 0x020c,
+ 0x0a64, 0x3a40, 0x5288, 0x6a1c, 0x0248,
+ 0x2264, 0x5240, 0x6a88, 0x0a1c, 0x0284,
+ 0x3a66, 0x6a42, 0x0a8a, 0x221e, 0x8422,
+ 0x5266, 0x0a42, 0x228a, 0x3a1e, 0x8472,
+ 0x6a66, 0x2242, 0x3a8a, 0x521e, 0x020e,
+ 0x0a66, 0x3a42, 0x528a, 0x6a1e, 0x024a,
+ 0x2266, 0x5242, 0x6a8a, 0x0a1e, 0x0286,
+ 0x3a68, 0x6a44, 0x0a8c, 0x2220, 0x8424,
+ 0x5268, 0x0a44, 0x228c, 0x3a20, 0x8474,
+ 0x6a68, 0x2244, 0x3a8c, 0x5220, 0x0210,
+ 0x0a68, 0x3a44, 0x528c, 0x6a20, 0x024c,
+ 0x2268, 0x5244, 0x6a8c, 0x0a20, 0x0288,
+ 0x3a6a, 0x6a46, 0x0a8e, 0x2222, 0x8426,
+ 0x526a, 0x0a46, 0x228e, 0x3a22, 0x8476,
+ 0x6a6a, 0x2246, 0x3a8e, 0x5222, 0x0212,
+ 0x0a6a, 0x3a46, 0x528e, 0x6a22, 0x024e,
+ 0x226a, 0x5246, 0x6a8e, 0x0a22, 0x028a,
+ 0x3e5a, 0x6e36, 0x0e7e, 0x2612, 0x822a,
+ 0x565a, 0x0e36, 0x267e, 0x3e12, 0x827a,
+ 0x6e5a, 0x2636, 0x3e7e, 0x5612, 0x0602,
+ 0x0e5a, 0x3e36, 0x567e, 0x6e12, 0x063e,
+ 0x265a, 0x5636, 0x6e7e, 0x0e12, 0x067a,
+ 0x3e5c, 0x6e38, 0x0e80, 0x2614, 0x822c,
+ 0x565c, 0x0e38, 0x2680, 0x3e14, 0x827c,
+ 0x6e5c, 0x2638, 0x3e80, 0x5614, 0x0604,
+ 0x0e5c, 0x3e38, 0x5680, 0x6e14, 0x0640,
+ 0x265c, 0x5638, 0x6e80, 0x0e14, 0x067c,
+ 0x3e5e, 0x6e3a, 0x0e82, 0x2616, 0x822e,
+ 0x565e, 0x0e3a, 0x2682, 0x3e16, 0x827e,
+ 0x6e5e, 0x263a, 0x3e82, 0x5616, 0x0606,
+ 0x0e5e, 0x3e3a, 0x5682, 0x6e16, 0x0642,
+ 0x265e, 0x563a, 0x6e82, 0x0e16, 0x067e,
+ 0x3e60, 0x6e3c, 0x0e84, 0x2618, 0x8230,
+ 0x5660, 0x0e3c, 0x2684, 0x3e18, 0x8280,
+ 0x6e60, 0x263c, 0x3e84, 0x5618, 0x0608,
+ 0x0e60, 0x3e3c, 0x5684, 0x6e18, 0x0644,
+ 0x2660, 0x563c, 0x6e84, 0x0e18, 0x0680,
+ 0x3e62, 0x6e3e, 0x0e86, 0x261a, 0x8232,
+ 0x5662, 0x0e3e, 0x2686, 0x3e1a, 0x8282,
+ 0x6e62, 0x263e, 0x3e86, 0x561a, 0x060a,
+ 0x0e62, 0x3e3e, 0x5686, 0x6e1a, 0x0646,
+ 0x2662, 0x563e, 0x6e86, 0x0e1a, 0x0682,
+ 0x3e64, 0x6e40, 0x0e88, 0x261c, 0x8234,
+ 0x5664, 0x0e40, 0x2688, 0x3e1c, 0x8284,
+ 0x6e64, 0x2640, 0x3e88, 0x561c, 0x060c,
+ 0x0e64, 0x3e40, 0x5688, 0x6e1c, 0x0648,
+ 0x2664, 0x5640, 0x6e88, 0x0e1c, 0x0684,
+ 0x3e66, 0x6e42, 0x0e8a, 0x261e, 0x8236,
+ 0x5666, 0x0e42, 0x268a, 0x3e1e, 0x8286,
+ 0x6e66, 0x2642, 0x3e8a, 0x561e, 0x060e,
+ 0x0e66, 0x3e42, 0x568a, 0x6e1e, 0x064a,
+ 0x2666, 0x5642, 0x6e8a, 0x0e1e, 0x0686,
+ 0x3e68, 0x6e44, 0x0e8c, 0x2620, 0x8238,
+ 0x5668, 0x0e44, 0x268c, 0x3e20, 0x8288,
+ 0x6e68, 0x2644, 0x3e8c, 0x5620, 0x0610,
+ 0x0e68, 0x3e44, 0x568c, 0x6e20, 0x064c,
+ 0x2668, 0x5644, 0x6e8c, 0x0e20, 0x0688,
+ 0x3e6a, 0x6e46, 0x0e8e, 0x2622, 0x823a,
+ 0x566a, 0x0e46, 0x268e, 0x3e22, 0x828a,
+ 0x6e6a, 0x2646, 0x3e8e, 0x5622, 0x0612,
+ 0x0e6a, 0x3e46, 0x568e, 0x6e22, 0x064e,
+ 0x266a, 0x5646, 0x6e8e, 0x0e22, 0x068a,
+ 0x425a, 0x7236, 0x127e, 0x2a12, 0x803e,
+ 0x5a5a, 0x1236, 0x2a7e, 0x4212, 0x808e,
+ 0x725a, 0x2a36, 0x427e, 0x5a12, 0x0216,
+ 0x125a, 0x4236, 0x5a7e, 0x7212, 0x0252,
+ 0x2a5a, 0x5a36, 0x727e, 0x1212, 0x028e,
+ 0x425c, 0x7238, 0x1280, 0x2a14, 0x8040,
+ 0x5a5c, 0x1238, 0x2a80, 0x4214, 0x8090,
+ 0x725c, 0x2a38, 0x4280, 0x5a14, 0x0218,
+ 0x125c, 0x4238, 0x5a80, 0x7214, 0x0254,
+ 0x2a5c, 0x5a38, 0x7280, 0x1214, 0x0290,
+ 0x425e, 0x723a, 0x1282, 0x2a16, 0x8042,
+ 0x5a5e, 0x123a, 0x2a82, 0x4216, 0x8092,
+ 0x725e, 0x2a3a, 0x4282, 0x5a16, 0x021a,
+ 0x125e, 0x423a, 0x5a82, 0x7216, 0x0256,
+ 0x2a5e, 0x5a3a, 0x7282, 0x1216, 0x0292,
+ 0x4260, 0x723c, 0x1284, 0x2a18, 0x8044,
+ 0x5a60, 0x123c, 0x2a84, 0x4218, 0x8094,
+ 0x7260, 0x2a3c, 0x4284, 0x5a18, 0x021c,
+ 0x1260, 0x423c, 0x5a84, 0x7218, 0x0258,
+ 0x2a60, 0x5a3c, 0x7284, 0x1218, 0x0294,
+ 0x4262, 0x723e, 0x1286, 0x2a1a, 0x8046,
+ 0x5a62, 0x123e, 0x2a86, 0x421a, 0x8096,
+ 0x7262, 0x2a3e, 0x4286, 0x5a1a, 0x021e,
+ 0x1262, 0x423e, 0x5a86, 0x721a, 0x025a,
+ 0x2a62, 0x5a3e, 0x7286, 0x121a, 0x0296,
+ 0x4264, 0x7240, 0x1288, 0x2a1c, 0x8048,
+ 0x5a64, 0x1240, 0x2a88, 0x421c, 0x8098,
+ 0x7264, 0x2a40, 0x4288, 0x5a1c, 0x0220,
+ 0x1264, 0x4240, 0x5a88, 0x721c, 0x025c,
+ 0x2a64, 0x5a40, 0x7288, 0x121c, 0x0298,
+ 0x4266, 0x7242, 0x128a, 0x2a1e, 0x804a,
+ 0x5a66, 0x1242, 0x2a8a, 0x421e, 0x809a,
+ 0x7266, 0x2a42, 0x428a, 0x5a1e, 0x0222,
+ 0x1266, 0x4242, 0x5a8a, 0x721e, 0x025e,
+ 0x2a66, 0x5a42, 0x728a, 0x121e, 0x029a,
+ 0x4268, 0x7244, 0x128c, 0x2a20, 0x804c,
+ 0x5a68, 0x1244, 0x2a8c, 0x4220, 0x809c,
+ 0x7268, 0x2a44, 0x428c, 0x5a20, 0x0224,
+ 0x1268, 0x4244, 0x5a8c, 0x7220, 0x0260,
+ 0x2a68, 0x5a44, 0x728c, 0x1220, 0x029c,
+ 0x426a, 0x7246, 0x128e, 0x2a22, 0x804e,
+ 0x5a6a, 0x1246, 0x2a8e, 0x4222, 0x809e,
+ 0x726a, 0x2a46, 0x428e, 0x5a22, 0x0226,
+ 0x126a, 0x4246, 0x5a8e, 0x7222, 0x0262,
+ 0x2a6a, 0x5a46, 0x728e, 0x1222, 0x029e,
+ 0x465a, 0x7636, 0x167e, 0x2e12, 0x843e,
+ 0x5e5a, 0x1636, 0x2e7e, 0x4612, 0x848e,
+ 0x765a, 0x2e36, 0x467e, 0x5e12, 0x0616,
+ 0x165a, 0x4636, 0x5e7e, 0x7612, 0x0652,
+ 0x2e5a, 0x5e36, 0x767e, 0x1612, 0x068e,
+ 0x465c, 0x7638, 0x1680, 0x2e14, 0x8440,
+ 0x5e5c, 0x1638, 0x2e80, 0x4614, 0x8490,
+ 0x765c, 0x2e38, 0x4680, 0x5e14, 0x0618,
+ 0x165c, 0x4638, 0x5e80, 0x7614, 0x0654,
+ 0x2e5c, 0x5e38, 0x7680, 0x1614, 0x0690,
+ 0x465e, 0x763a, 0x1682, 0x2e16, 0x8442,
+ 0x5e5e, 0x163a, 0x2e82, 0x4616, 0x8492,
+ 0x765e, 0x2e3a, 0x4682, 0x5e16, 0x061a,
+ 0x165e, 0x463a, 0x5e82, 0x7616, 0x0656,
+ 0x2e5e, 0x5e3a, 0x7682, 0x1616, 0x0692,
+ 0x4660, 0x763c, 0x1684, 0x2e18, 0x8444,
+ 0x5e60, 0x163c, 0x2e84, 0x4618, 0x8494,
+ 0x7660, 0x2e3c, 0x4684, 0x5e18, 0x061c,
+ 0x1660, 0x463c, 0x5e84, 0x7618, 0x0658,
+ 0x2e60, 0x5e3c, 0x7684, 0x1618, 0x0694,
+ 0x4662, 0x763e, 0x1686, 0x2e1a, 0x8446,
+ 0x5e62, 0x163e, 0x2e86, 0x461a, 0x8496,
+ 0x7662, 0x2e3e, 0x4686, 0x5e1a, 0x061e,
+ 0x1662, 0x463e, 0x5e86, 0x761a, 0x065a,
+ 0x2e62, 0x5e3e, 0x7686, 0x161a, 0x0696,
+ 0x4664, 0x7640, 0x1688, 0x2e1c, 0x8448,
+ 0x5e64, 0x1640, 0x2e88, 0x461c, 0x8498,
+ 0x7664, 0x2e40, 0x4688, 0x5e1c, 0x0620,
+ 0x1664, 0x4640, 0x5e88, 0x761c, 0x065c,
+ 0x2e64, 0x5e40, 0x7688, 0x161c, 0x0698,
+ 0x4666, 0x7642, 0x168a, 0x2e1e, 0x844a,
+ 0x5e66, 0x1642, 0x2e8a, 0x461e, 0x849a,
+ 0x7666, 0x2e42, 0x468a, 0x5e1e, 0x0622,
+ 0x1666, 0x4642, 0x5e8a, 0x761e, 0x065e,
+ 0x2e66, 0x5e42, 0x768a, 0x161e, 0x069a,
+ 0x4668, 0x7644, 0x168c, 0x2e20, 0x844c,
+ 0x5e68, 0x1644, 0x2e8c, 0x4620, 0x849c,
+ 0x7668, 0x2e44, 0x468c, 0x5e20, 0x0624,
+ 0x1668, 0x4644, 0x5e8c, 0x7620, 0x0660,
+ 0x2e68, 0x5e44, 0x768c, 0x1620, 0x069c,
+ 0x466a, 0x7646, 0x168e, 0x2e22, 0x844e,
+ 0x5e6a, 0x1646, 0x2e8e, 0x4622, 0x849e,
+ 0x766a, 0x2e46, 0x468e, 0x5e22, 0x0626,
+ 0x166a, 0x4646, 0x5e8e, 0x7622, 0x0662,
+ 0x2e6a, 0x5e46, 0x768e, 0x1622, 0x069e,
+ 0x4a5a, 0x7a36, 0x1a7e, 0x3212, 0x8252,
+ 0x625a, 0x1a36, 0x327e, 0x4a12, 0x862c,
+ 0x7a5a, 0x3236, 0x4a7e, 0x6212, 0x022a,
+ 0x1a5a, 0x4a36, 0x627e, 0x7a12, 0x0266,
+ 0x325a, 0x6236, 0x7a7e, 0x1a12, 0x8202,
+ 0x4a5c, 0x7a38, 0x1a80, 0x3214, 0x8254,
+ 0x625c, 0x1a38, 0x3280, 0x4a14, 0x8630,
+ 0x7a5c, 0x3238, 0x4a80, 0x6214, 0x022c,
+ 0x1a5c, 0x4a38, 0x6280, 0x7a14, 0x0268,
+ 0x325c, 0x6238, 0x7a80, 0x1a14, 0x8204,
+ 0x4a5e, 0x7a3a, 0x1a82, 0x3216, 0x8256,
+ 0x625e, 0x1a3a, 0x3282, 0x4a16, 0x8634,
+ 0x7a5e, 0x323a, 0x4a82, 0x6216, 0x022e,
+ 0x1a5e, 0x4a3a, 0x6282, 0x7a16, 0x026a,
+ 0x325e, 0x623a, 0x7a82, 0x1a16, 0x8206,
+ 0x4a60, 0x7a3c, 0x1a84, 0x3218, 0x8258,
+ 0x6260, 0x1a3c, 0x3284, 0x4a18, 0x8638,
+ 0x7a60, 0x323c, 0x4a84, 0x6218, 0x0230,
+ 0x1a60, 0x4a3c, 0x6284, 0x7a18, 0x026c,
+ 0x3260, 0x623c, 0x7a84, 0x1a18, 0x8208,
+ 0x4a62, 0x7a3e, 0x1a86, 0x321a, 0x825a,
+ 0x6262, 0x1a3e, 0x3286, 0x4a1a, 0x863c,
+ 0x7a62, 0x323e, 0x4a86, 0x621a, 0x0232,
+ 0x1a62, 0x4a3e, 0x6286, 0x7a1a, 0x026e,
+ 0x3262, 0x623e, 0x7a86, 0x1a1a, 0x820a,
+ 0x4a64, 0x7a40, 0x1a88, 0x321c, 0x825c,
+ 0x6264, 0x1a40, 0x3288, 0x4a1c, 0x8640,
+ 0x7a64, 0x3240, 0x4a88, 0x621c, 0x0234,
+ 0x1a64, 0x4a40, 0x6288, 0x7a1c, 0x0270,
+ 0x3264, 0x6240, 0x7a88, 0x1a1c, 0x820c,
+ 0x4a66, 0x7a42, 0x1a8a, 0x321e, 0x825e,
+ 0x6266, 0x1a42, 0x328a, 0x4a1e, 0x8644,
+ 0x7a66, 0x3242, 0x4a8a, 0x621e, 0x0236,
+ 0x1a66, 0x4a42, 0x628a, 0x7a1e, 0x0272,
+ 0x3266, 0x6242, 0x7a8a, 0x1a1e, 0x820e,
+ 0x4a68, 0x7a44, 0x1a8c, 0x3220, 0x8260,
+ 0x6268, 0x1a44, 0x328c, 0x4a20, 0x8648,
+ 0x7a68, 0x3244, 0x4a8c, 0x6220, 0x0238,
+ 0x1a68, 0x4a44, 0x628c, 0x7a20, 0x0274,
+ 0x3268, 0x6244, 0x7a8c, 0x1a20, 0x8210,
+ 0x4a6a, 0x7a46, 0x1a8e, 0x3222, 0x8262,
+ 0x626a, 0x1a46, 0x328e, 0x4a22, 0x864c,
+ 0x7a6a, 0x3246, 0x4a8e, 0x6222, 0x023a,
+ 0x1a6a, 0x4a46, 0x628e, 0x7a22, 0x0276,
+ 0x326a, 0x6246, 0x7a8e, 0x1a22, 0x8212,
+ 0x4e5a, 0x7e36, 0x1e7e, 0x3612, 0x8066,
+ 0x665a, 0x1e36, 0x367e, 0x4e12, 0x867c,
+ 0x7e5a, 0x3636, 0x4e7e, 0x6612, 0x062a,
+ 0x1e5a, 0x4e36, 0x667e, 0x7e12, 0x0666,
+ 0x365a, 0x6636, 0x7e7e, 0x1e12, 0x8016,
+ 0x4e5c, 0x7e38, 0x1e80, 0x3614, 0x8068,
+ 0x665c, 0x1e38, 0x3680, 0x4e14, 0x8680,
+ 0x7e5c, 0x3638, 0x4e80, 0x6614, 0x062c,
+ 0x1e5c, 0x4e38, 0x6680, 0x7e14, 0x0668,
+ 0x365c, 0x6638, 0x7e80, 0x1e14, 0x8018,
+ 0x4e5e, 0x7e3a, 0x1e82, 0x3616, 0x806a,
+ 0x665e, 0x1e3a, 0x3682, 0x4e16, 0x8684,
+ 0x7e5e, 0x363a, 0x4e82, 0x6616, 0x062e,
+ 0x1e5e, 0x4e3a, 0x6682, 0x7e16, 0x066a,
+ 0x365e, 0x663a, 0x7e82, 0x1e16, 0x801a,
+ 0x4e60, 0x7e3c, 0x1e84, 0x3618, 0x806c,
+ 0x6660, 0x1e3c, 0x3684, 0x4e18, 0x8688,
+ 0x7e60, 0x363c, 0x4e84, 0x6618, 0x0630,
+ 0x1e60, 0x4e3c, 0x6684, 0x7e18, 0x066c,
+ 0x3660, 0x663c, 0x7e84, 0x1e18, 0x801c,
+ 0x4e62, 0x7e3e, 0x1e86, 0x361a, 0x806e,
+ 0x6662, 0x1e3e, 0x3686, 0x4e1a, 0x868c,
+ 0x7e62, 0x363e, 0x4e86, 0x661a, 0x0632,
+ 0x1e62, 0x4e3e, 0x6686, 0x7e1a, 0x066e,
+ 0x3662, 0x663e, 0x7e86, 0x1e1a, 0x801e,
+ 0x4e64, 0x7e40, 0x1e88, 0x361c, 0x8070,
+ 0x6664, 0x1e40, 0x3688, 0x4e1c, 0x8690,
+ 0x7e64, 0x3640, 0x4e88, 0x661c, 0x0634,
+ 0x1e64, 0x4e40, 0x6688, 0x7e1c, 0x0670,
+ 0x3664, 0x6640, 0x7e88, 0x1e1c, 0x8020,
+ 0x4e66, 0x7e42, 0x1e8a, 0x361e, 0x8072,
+ 0x6666, 0x1e42, 0x368a, 0x4e1e, 0x8694,
+ 0x7e66, 0x3642, 0x4e8a, 0x661e, 0x0636,
+ 0x1e66, 0x4e42, 0x668a, 0x7e1e, 0x0672,
+ 0x3666, 0x6642, 0x7e8a, 0x1e1e, 0x8022,
+ 0x4e68, 0x7e44, 0x1e8c, 0x3620, 0x8074,
+ 0x6668, 0x1e44, 0x368c, 0x4e20, 0x8698,
+ 0x7e68, 0x3644, 0x4e8c, 0x6620, 0x0638,
+ 0x1e68, 0x4e44, 0x668c, 0x7e20, 0x0674,
+ 0x3668, 0x6644, 0x7e8c, 0x1e20, 0x8024,
+ 0x4e6a, 0x7e46, 0x1e8e, 0x3622, 0x8076,
+ 0x666a, 0x1e46, 0x368e, 0x4e22, 0x869c,
+ 0x7e6a, 0x3646, 0x4e8e, 0x6622, 0x063a,
+ 0x1e6a, 0x4e46, 0x668e, 0x7e22, 0x0676,
+ 0x366a, 0x6646, 0x7e8e, 0x1e22, 0x8026,
+};
+
+static const uint16_t dv_place_1080i50[4*12*27*5] = {
+ 0x1a48, 0x4a24, 0x626c, 0x0200, 0x3290,
+ 0x2648, 0x5624, 0x6e6c, 0x0e00, 0x3e90,
+ 0x3248, 0x6224, 0x7a6c, 0x1a00, 0x4a90,
+ 0x3e48, 0x6e24, 0x026c, 0x2600, 0x5690,
+ 0x4a48, 0x7a24, 0x0e6c, 0x3200, 0x6290,
+ 0x5648, 0x0224, 0x1a6c, 0x3e00, 0x6e90,
+ 0x6248, 0x0e24, 0x266c, 0x4a00, 0x7a90,
+ 0x6e48, 0x1a24, 0x326c, 0x5600, 0x0290,
+ 0x7a48, 0x2624, 0x3e6c, 0x6200, 0x0e90,
+ 0x0248, 0x3224, 0x4a6c, 0x6e00, 0x1a90,
+ 0x0e48, 0x3e24, 0x566c, 0x7a00, 0x2690,
+ 0x1a4a, 0x4a26, 0x626e, 0x0202, 0x3292,
+ 0x264a, 0x5626, 0x6e6e, 0x0e02, 0x3e92,
+ 0x324a, 0x6226, 0x7a6e, 0x1a02, 0x4a92,
+ 0x3e4a, 0x6e26, 0x026e, 0x2602, 0x5692,
+ 0x4a4a, 0x7a26, 0x0e6e, 0x3202, 0x6292,
+ 0x564a, 0x0226, 0x1a6e, 0x3e02, 0x6e92,
+ 0x624a, 0x0e26, 0x266e, 0x4a02, 0x7a92,
+ 0x6e4a, 0x1a26, 0x326e, 0x5602, 0x0292,
+ 0x7a4a, 0x2626, 0x3e6e, 0x6202, 0x0e92,
+ 0x024a, 0x3226, 0x4a6e, 0x6e02, 0x1a92,
+ 0x0e4a, 0x3e26, 0x566e, 0x7a02, 0x2692,
+ 0x1a4c, 0x4a28, 0x6270, 0x0204, 0x3294,
+ 0x264c, 0x5628, 0x6e70, 0x0e04, 0x3e94,
+ 0x324c, 0x6228, 0x7a70, 0x1a04, 0x4a94,
+ 0x3e4c, 0x6e28, 0x0270, 0x2604, 0x5694,
+ 0x4a4c, 0x7a28, 0x0e70, 0x3204, 0x6294,
+ 0x564c, 0x0228, 0x1a70, 0x3e04, 0x6e94,
+ 0x624c, 0x0e28, 0x2670, 0x4a04, 0x7a94,
+ 0x6e4c, 0x1a28, 0x3270, 0x5604, 0x0294,
+ 0x7a4c, 0x2628, 0x3e70, 0x6204, 0x0e94,
+ 0x024c, 0x3228, 0x4a70, 0x6e04, 0x1a94,
+ 0x0e4c, 0x3e28, 0x5670, 0x7a04, 0x2694,
+ 0x1a4e, 0x4a2a, 0x6272, 0x0206, 0x3296,
+ 0x264e, 0x562a, 0x6e72, 0x0e06, 0x3e96,
+ 0x324e, 0x622a, 0x7a72, 0x1a06, 0x4a96,
+ 0x3e4e, 0x6e2a, 0x0272, 0x2606, 0x5696,
+ 0x4a4e, 0x7a2a, 0x0e72, 0x3206, 0x6296,
+ 0x564e, 0x022a, 0x1a72, 0x3e06, 0x6e96,
+ 0x624e, 0x0e2a, 0x2672, 0x4a06, 0x7a96,
+ 0x6e4e, 0x1a2a, 0x3272, 0x5606, 0x0296,
+ 0x7a4e, 0x262a, 0x3e72, 0x6206, 0x0e96,
+ 0x024e, 0x322a, 0x4a72, 0x6e06, 0x1a96,
+ 0x0e4e, 0x3e2a, 0x5672, 0x7a06, 0x2696,
+ 0x1a50, 0x4a2c, 0x6274, 0x0208, 0x3298,
+ 0x2650, 0x562c, 0x6e74, 0x0e08, 0x3e98,
+ 0x3250, 0x622c, 0x7a74, 0x1a08, 0x4a98,
+ 0x3e50, 0x6e2c, 0x0274, 0x2608, 0x5698,
+ 0x4a50, 0x7a2c, 0x0e74, 0x3208, 0x6298,
+ 0x5650, 0x022c, 0x1a74, 0x3e08, 0x6e98,
+ 0x6250, 0x0e2c, 0x2674, 0x4a08, 0x7a98,
+ 0x6e50, 0x1a2c, 0x3274, 0x5608, 0x0298,
+ 0x7a50, 0x262c, 0x3e74, 0x6208, 0x0e98,
+ 0x0250, 0x322c, 0x4a74, 0x6e08, 0x1a98,
+ 0x0e50, 0x3e2c, 0x5674, 0x7a08, 0x2698,
+ 0x1a52, 0x4a2e, 0x6276, 0x020a, 0x329a,
+ 0x2652, 0x562e, 0x6e76, 0x0e0a, 0x3e9a,
+ 0x3252, 0x622e, 0x7a76, 0x1a0a, 0x4a9a,
+ 0x3e52, 0x6e2e, 0x0276, 0x260a, 0x569a,
+ 0x4a52, 0x7a2e, 0x0e76, 0x320a, 0x629a,
+ 0x5652, 0x022e, 0x1a76, 0x3e0a, 0x6e9a,
+ 0x6252, 0x0e2e, 0x2676, 0x4a0a, 0x7a9a,
+ 0x6e52, 0x1a2e, 0x3276, 0x560a, 0x029a,
+ 0x7a52, 0x262e, 0x3e76, 0x620a, 0x0e9a,
+ 0x0252, 0x322e, 0x4a76, 0x6e0a, 0x1a9a,
+ 0x0e52, 0x3e2e, 0x5676, 0x7a0a, 0x269a,
+ 0x1a54, 0x4a30, 0x6278, 0x020c, 0x329c,
+ 0x2654, 0x5630, 0x6e78, 0x0e0c, 0x3e9c,
+ 0x3254, 0x6230, 0x7a78, 0x1a0c, 0x4a9c,
+ 0x3e54, 0x6e30, 0x0278, 0x260c, 0x569c,
+ 0x4a54, 0x7a30, 0x0e78, 0x320c, 0x629c,
+ 0x5654, 0x0230, 0x1a78, 0x3e0c, 0x6e9c,
+ 0x6254, 0x0e30, 0x2678, 0x4a0c, 0x7a9c,
+ 0x6e54, 0x1a30, 0x3278, 0x560c, 0x029c,
+ 0x7a54, 0x2630, 0x3e78, 0x620c, 0x0e9c,
+ 0x0254, 0x3230, 0x4a78, 0x6e0c, 0x1a9c,
+ 0x0e54, 0x3e30, 0x5678, 0x7a0c, 0x269c,
+ 0x1a56, 0x4a32, 0x627a, 0x020e, 0x329e,
+ 0x2656, 0x5632, 0x6e7a, 0x0e0e, 0x3e9e,
+ 0x3256, 0x6232, 0x7a7a, 0x1a0e, 0x4a9e,
+ 0x3e56, 0x6e32, 0x027a, 0x260e, 0x569e,
+ 0x4a56, 0x7a32, 0x0e7a, 0x320e, 0x629e,
+ 0x5656, 0x0232, 0x1a7a, 0x3e0e, 0x6e9e,
+ 0x6256, 0x0e32, 0x267a, 0x4a0e, 0x7a9e,
+ 0x6e56, 0x1a32, 0x327a, 0x560e, 0x029e,
+ 0x7a56, 0x2632, 0x3e7a, 0x620e, 0x0e9e,
+ 0x0256, 0x3232, 0x4a7a, 0x6e0e, 0x1a9e,
+ 0x0e56, 0x3e32, 0x567a, 0x7a0e, 0x269e,
+ 0x1a58, 0x4a34, 0x627c, 0x0210, 0x32a0,
+ 0x2658, 0x5634, 0x6e7c, 0x0e10, 0x3ea0,
+ 0x3258, 0x6234, 0x7a7c, 0x1a10, 0x4aa0,
+ 0x3e58, 0x6e34, 0x027c, 0x2610, 0x56a0,
+ 0x4a58, 0x7a34, 0x0e7c, 0x3210, 0x62a0,
+ 0x5658, 0x0234, 0x1a7c, 0x3e10, 0x6ea0,
+ 0x6258, 0x0e34, 0x267c, 0x4a10, 0x7aa0,
+ 0x6e58, 0x1a34, 0x327c, 0x5610, 0x02a0,
+ 0x7a58, 0x2634, 0x3e7c, 0x6210, 0x0ea0,
+ 0x0258, 0x3234, 0x4a7c, 0x6e10, 0x1aa0,
+ 0x0e58, 0x3e34, 0x567c, 0x7a10, 0x26a0,
+ 0x1e48, 0x4e24, 0x666c, 0x0600, 0x3690,
+ 0x2a48, 0x5a24, 0x726c, 0x1200, 0x4290,
+ 0x3648, 0x6624, 0x7e6c, 0x1e00, 0x4e90,
+ 0x4248, 0x7224, 0x066c, 0x2a00, 0x5a90,
+ 0x4e48, 0x7e24, 0x126c, 0x3600, 0x6690,
+ 0x5a48, 0x0624, 0x1e6c, 0x4200, 0x7290,
+ 0x6648, 0x1224, 0x2a6c, 0x4e00, 0x7e90,
+ 0x7248, 0x1e24, 0x366c, 0x5a00, 0x0690,
+ 0x7e48, 0x2a24, 0x426c, 0x6600, 0x1290,
+ 0x0648, 0x3624, 0x4e6c, 0x7200, 0x1e90,
+ 0x1248, 0x4224, 0x5a6c, 0x7e00, 0x2a90,
+ 0x1e4a, 0x4e26, 0x666e, 0x0602, 0x3692,
+ 0x2a4a, 0x5a26, 0x726e, 0x1202, 0x4292,
+ 0x364a, 0x6626, 0x7e6e, 0x1e02, 0x4e92,
+ 0x424a, 0x7226, 0x066e, 0x2a02, 0x5a92,
+ 0x4e4a, 0x7e26, 0x126e, 0x3602, 0x6692,
+ 0x5a4a, 0x0626, 0x1e6e, 0x4202, 0x7292,
+ 0x664a, 0x1226, 0x2a6e, 0x4e02, 0x7e92,
+ 0x724a, 0x1e26, 0x366e, 0x5a02, 0x0692,
+ 0x7e4a, 0x2a26, 0x426e, 0x6602, 0x1292,
+ 0x064a, 0x3626, 0x4e6e, 0x7202, 0x1e92,
+ 0x124a, 0x4226, 0x5a6e, 0x7e02, 0x2a92,
+ 0x1e4c, 0x4e28, 0x6670, 0x0604, 0x3694,
+ 0x2a4c, 0x5a28, 0x7270, 0x1204, 0x4294,
+ 0x364c, 0x6628, 0x7e70, 0x1e04, 0x4e94,
+ 0x424c, 0x7228, 0x0670, 0x2a04, 0x5a94,
+ 0x4e4c, 0x7e28, 0x1270, 0x3604, 0x6694,
+ 0x5a4c, 0x0628, 0x1e70, 0x4204, 0x7294,
+ 0x664c, 0x1228, 0x2a70, 0x4e04, 0x7e94,
+ 0x724c, 0x1e28, 0x3670, 0x5a04, 0x0694,
+ 0x7e4c, 0x2a28, 0x4270, 0x6604, 0x1294,
+ 0x064c, 0x3628, 0x4e70, 0x7204, 0x1e94,
+ 0x124c, 0x4228, 0x5a70, 0x7e04, 0x2a94,
+ 0x1e4e, 0x4e2a, 0x6672, 0x0606, 0x3696,
+ 0x2a4e, 0x5a2a, 0x7272, 0x1206, 0x4296,
+ 0x364e, 0x662a, 0x7e72, 0x1e06, 0x4e96,
+ 0x424e, 0x722a, 0x0672, 0x2a06, 0x5a96,
+ 0x4e4e, 0x7e2a, 0x1272, 0x3606, 0x6696,
+ 0x5a4e, 0x062a, 0x1e72, 0x4206, 0x7296,
+ 0x664e, 0x122a, 0x2a72, 0x4e06, 0x7e96,
+ 0x724e, 0x1e2a, 0x3672, 0x5a06, 0x0696,
+ 0x7e4e, 0x2a2a, 0x4272, 0x6606, 0x1296,
+ 0x064e, 0x362a, 0x4e72, 0x7206, 0x1e96,
+ 0x124e, 0x422a, 0x5a72, 0x7e06, 0x2a96,
+ 0x1e50, 0x4e2c, 0x6674, 0x0608, 0x3698,
+ 0x2a50, 0x5a2c, 0x7274, 0x1208, 0x4298,
+ 0x3650, 0x662c, 0x7e74, 0x1e08, 0x4e98,
+ 0x4250, 0x722c, 0x0674, 0x2a08, 0x5a98,
+ 0x4e50, 0x7e2c, 0x1274, 0x3608, 0x6698,
+ 0x5a50, 0x062c, 0x1e74, 0x4208, 0x7298,
+ 0x6650, 0x122c, 0x2a74, 0x4e08, 0x7e98,
+ 0x7250, 0x1e2c, 0x3674, 0x5a08, 0x0698,
+ 0x7e50, 0x2a2c, 0x4274, 0x6608, 0x1298,
+ 0x0650, 0x362c, 0x4e74, 0x7208, 0x1e98,
+ 0x1250, 0x422c, 0x5a74, 0x7e08, 0x2a98,
+ 0x1e52, 0x4e2e, 0x6676, 0x060a, 0x369a,
+ 0x2a52, 0x5a2e, 0x7276, 0x120a, 0x429a,
+ 0x3652, 0x662e, 0x7e76, 0x1e0a, 0x4e9a,
+ 0x4252, 0x722e, 0x0676, 0x2a0a, 0x5a9a,
+ 0x4e52, 0x7e2e, 0x1276, 0x360a, 0x669a,
+ 0x5a52, 0x062e, 0x1e76, 0x420a, 0x729a,
+ 0x6652, 0x122e, 0x2a76, 0x4e0a, 0x7e9a,
+ 0x7252, 0x1e2e, 0x3676, 0x5a0a, 0x069a,
+ 0x7e52, 0x2a2e, 0x4276, 0x660a, 0x129a,
+ 0x0652, 0x362e, 0x4e76, 0x720a, 0x1e9a,
+ 0x1252, 0x422e, 0x5a76, 0x7e0a, 0x2a9a,
+ 0x1e54, 0x4e30, 0x6678, 0x060c, 0x369c,
+ 0x2a54, 0x5a30, 0x7278, 0x120c, 0x429c,
+ 0x3654, 0x6630, 0x7e78, 0x1e0c, 0x4e9c,
+ 0x4254, 0x7230, 0x0678, 0x2a0c, 0x5a9c,
+ 0x4e54, 0x7e30, 0x1278, 0x360c, 0x669c,
+ 0x5a54, 0x0630, 0x1e78, 0x420c, 0x729c,
+ 0x6654, 0x1230, 0x2a78, 0x4e0c, 0x7e9c,
+ 0x7254, 0x1e30, 0x3678, 0x5a0c, 0x069c,
+ 0x7e54, 0x2a30, 0x4278, 0x660c, 0x129c,
+ 0x0654, 0x3630, 0x4e78, 0x720c, 0x1e9c,
+ 0x1254, 0x4230, 0x5a78, 0x7e0c, 0x2a9c,
+ 0x1e56, 0x4e32, 0x667a, 0x060e, 0x369e,
+ 0x2a56, 0x5a32, 0x727a, 0x120e, 0x429e,
+ 0x3656, 0x6632, 0x7e7a, 0x1e0e, 0x4e9e,
+ 0x4256, 0x7232, 0x067a, 0x2a0e, 0x5a9e,
+ 0x4e56, 0x7e32, 0x127a, 0x360e, 0x669e,
+ 0x5a56, 0x0632, 0x1e7a, 0x420e, 0x729e,
+ 0x6656, 0x1232, 0x2a7a, 0x4e0e, 0x7e9e,
+ 0x7256, 0x1e32, 0x367a, 0x5a0e, 0x069e,
+ 0x7e56, 0x2a32, 0x427a, 0x660e, 0x129e,
+ 0x0656, 0x3632, 0x4e7a, 0x720e, 0x1e9e,
+ 0x1256, 0x4232, 0x5a7a, 0x7e0e, 0x2a9e,
+ 0x1e58, 0x4e34, 0x667c, 0x0610, 0x36a0,
+ 0x2a58, 0x5a34, 0x727c, 0x1210, 0x42a0,
+ 0x3658, 0x6634, 0x7e7c, 0x1e10, 0x4ea0,
+ 0x4258, 0x7234, 0x067c, 0x2a10, 0x5aa0,
+ 0x4e58, 0x7e34, 0x127c, 0x3610, 0x66a0,
+ 0x5a58, 0x0634, 0x1e7c, 0x4210, 0x72a0,
+ 0x6658, 0x1234, 0x2a7c, 0x4e10, 0x7ea0,
+ 0x7258, 0x1e34, 0x367c, 0x5a10, 0x06a0,
+ 0x7e58, 0x2a34, 0x427c, 0x6610, 0x12a0,
+ 0x0658, 0x3634, 0x4e7c, 0x7210, 0x1ea0,
+ 0x1258, 0x4234, 0x5a7c, 0x7e10, 0x2aa0,
+ 0x2248, 0x5224, 0x6a6c, 0x0a00, 0x3a90,
+ 0x2e48, 0x5e24, 0x766c, 0x1600, 0x4690,
+ 0x3a48, 0x6a24, 0x826c, 0x2200, 0x5290,
+ 0x4648, 0x7624, 0x0a6c, 0x2e00, 0x5e90,
+ 0x5248, 0x8224, 0x166c, 0x3a00, 0x6a90,
+ 0x5e48, 0x0a24, 0x226c, 0x4600, 0x7690,
+ 0x6a48, 0x1624, 0x2e6c, 0x5200, 0x8290,
+ 0x7648, 0x2224, 0x3a6c, 0x5e00, 0x0a90,
+ 0x8248, 0x2e24, 0x466c, 0x6a00, 0x1690,
+ 0x0a48, 0x3a24, 0x526c, 0x7600, 0x2290,
+ 0x1648, 0x4624, 0x5e6c, 0x8200, 0x2e90,
+ 0x224a, 0x5226, 0x6a6e, 0x0a02, 0x3a92,
+ 0x2e4a, 0x5e26, 0x766e, 0x1602, 0x4692,
+ 0x3a4a, 0x6a26, 0x826e, 0x2202, 0x5292,
+ 0x464a, 0x7626, 0x0a6e, 0x2e02, 0x5e92,
+ 0x524a, 0x8226, 0x166e, 0x3a02, 0x6a92,
+ 0x5e4a, 0x0a26, 0x226e, 0x4602, 0x7692,
+ 0x6a4a, 0x1626, 0x2e6e, 0x5202, 0x8292,
+ 0x764a, 0x2226, 0x3a6e, 0x5e02, 0x0a92,
+ 0x824a, 0x2e26, 0x466e, 0x6a02, 0x1692,
+ 0x0a4a, 0x3a26, 0x526e, 0x7602, 0x2292,
+ 0x164a, 0x4626, 0x5e6e, 0x8202, 0x2e92,
+ 0x224c, 0x5228, 0x6a70, 0x0a04, 0x3a94,
+ 0x2e4c, 0x5e28, 0x7670, 0x1604, 0x4694,
+ 0x3a4c, 0x6a28, 0x8270, 0x2204, 0x5294,
+ 0x464c, 0x7628, 0x0a70, 0x2e04, 0x5e94,
+ 0x524c, 0x8228, 0x1670, 0x3a04, 0x6a94,
+ 0x5e4c, 0x0a28, 0x2270, 0x4604, 0x7694,
+ 0x6a4c, 0x1628, 0x2e70, 0x5204, 0x8294,
+ 0x764c, 0x2228, 0x3a70, 0x5e04, 0x0a94,
+ 0x824c, 0x2e28, 0x4670, 0x6a04, 0x1694,
+ 0x0a4c, 0x3a28, 0x5270, 0x7604, 0x2294,
+ 0x164c, 0x4628, 0x5e70, 0x8204, 0x2e94,
+ 0x224e, 0x522a, 0x6a72, 0x0a06, 0x3a96,
+ 0x2e4e, 0x5e2a, 0x7672, 0x1606, 0x4696,
+ 0x3a4e, 0x6a2a, 0x8272, 0x2206, 0x5296,
+ 0x464e, 0x762a, 0x0a72, 0x2e06, 0x5e96,
+ 0x524e, 0x822a, 0x1672, 0x3a06, 0x6a96,
+ 0x5e4e, 0x0a2a, 0x2272, 0x4606, 0x7696,
+ 0x6a4e, 0x162a, 0x2e72, 0x5206, 0x8296,
+ 0x764e, 0x222a, 0x3a72, 0x5e06, 0x0a96,
+ 0x824e, 0x2e2a, 0x4672, 0x6a06, 0x1696,
+ 0x0a4e, 0x3a2a, 0x5272, 0x7606, 0x2296,
+ 0x164e, 0x462a, 0x5e72, 0x8206, 0x2e96,
+ 0x2250, 0x522c, 0x6a74, 0x0a08, 0x3a98,
+ 0x2e50, 0x5e2c, 0x7674, 0x1608, 0x4698,
+ 0x3a50, 0x6a2c, 0x8274, 0x2208, 0x5298,
+ 0x4650, 0x762c, 0x0a74, 0x2e08, 0x5e98,
+ 0x5250, 0x822c, 0x1674, 0x3a08, 0x6a98,
+ 0x5e50, 0x0a2c, 0x2274, 0x4608, 0x7698,
+ 0x6a50, 0x162c, 0x2e74, 0x5208, 0x8298,
+ 0x7650, 0x222c, 0x3a74, 0x5e08, 0x0a98,
+ 0x8250, 0x2e2c, 0x4674, 0x6a08, 0x1698,
+ 0x0a50, 0x3a2c, 0x5274, 0x7608, 0x2298,
+ 0x1650, 0x462c, 0x5e74, 0x8208, 0x2e98,
+ 0x2252, 0x522e, 0x6a76, 0x0a0a, 0x3a9a,
+ 0x2e52, 0x5e2e, 0x7676, 0x160a, 0x469a,
+ 0x3a52, 0x6a2e, 0x8276, 0x220a, 0x529a,
+ 0x4652, 0x762e, 0x0a76, 0x2e0a, 0x5e9a,
+ 0x5252, 0x822e, 0x1676, 0x3a0a, 0x6a9a,
+ 0x5e52, 0x0a2e, 0x2276, 0x460a, 0x769a,
+ 0x6a52, 0x162e, 0x2e76, 0x520a, 0x829a,
+ 0x7652, 0x222e, 0x3a76, 0x5e0a, 0x0a9a,
+ 0x8252, 0x2e2e, 0x4676, 0x6a0a, 0x169a,
+ 0x0a52, 0x3a2e, 0x5276, 0x760a, 0x229a,
+ 0x1652, 0x462e, 0x5e76, 0x820a, 0x2e9a,
+ 0x2254, 0x5230, 0x6a78, 0x0a0c, 0x3a9c,
+ 0x2e54, 0x5e30, 0x7678, 0x160c, 0x469c,
+ 0x3a54, 0x6a30, 0x8278, 0x220c, 0x529c,
+ 0x4654, 0x7630, 0x0a78, 0x2e0c, 0x5e9c,
+ 0x5254, 0x8230, 0x1678, 0x3a0c, 0x6a9c,
+ 0x5e54, 0x0a30, 0x2278, 0x460c, 0x769c,
+ 0x6a54, 0x1630, 0x2e78, 0x520c, 0x829c,
+ 0x7654, 0x2230, 0x3a78, 0x5e0c, 0x0a9c,
+ 0x8254, 0x2e30, 0x4678, 0x6a0c, 0x169c,
+ 0x0a54, 0x3a30, 0x5278, 0x760c, 0x229c,
+ 0x1654, 0x4630, 0x5e78, 0x820c, 0x2e9c,
+ 0x2256, 0x5232, 0x6a7a, 0x0a0e, 0x3a9e,
+ 0x2e56, 0x5e32, 0x767a, 0x160e, 0x469e,
+ 0x3a56, 0x6a32, 0x827a, 0x220e, 0x529e,
+ 0x4656, 0x7632, 0x0a7a, 0x2e0e, 0x5e9e,
+ 0x5256, 0x8232, 0x167a, 0x3a0e, 0x6a9e,
+ 0x5e56, 0x0a32, 0x227a, 0x460e, 0x769e,
+ 0x6a56, 0x1632, 0x2e7a, 0x520e, 0x829e,
+ 0x7656, 0x2232, 0x3a7a, 0x5e0e, 0x0a9e,
+ 0x8256, 0x2e32, 0x467a, 0x6a0e, 0x169e,
+ 0x0a56, 0x3a32, 0x527a, 0x760e, 0x229e,
+ 0x1656, 0x4632, 0x5e7a, 0x820e, 0x2e9e,
+ 0x2258, 0x5234, 0x6a7c, 0x0a10, 0x3aa0,
+ 0x2e58, 0x5e34, 0x767c, 0x1610, 0x46a0,
+ 0x3a58, 0x6a34, 0x827c, 0x2210, 0x52a0,
+ 0x4658, 0x7634, 0x0a7c, 0x2e10, 0x5ea0,
+ 0x5258, 0x8234, 0x167c, 0x3a10, 0x6aa0,
+ 0x5e58, 0x0a34, 0x227c, 0x4610, 0x76a0,
+ 0x6a58, 0x1634, 0x2e7c, 0x5210, 0x82a0,
+ 0x7658, 0x2234, 0x3a7c, 0x5e10, 0x0aa0,
+ 0x8258, 0x2e34, 0x467c, 0x6a10, 0x16a0,
+ 0x0a58, 0x3a34, 0x527c, 0x7610, 0x22a0,
+ 0x1658, 0x4634, 0x5e7c, 0x8210, 0x2ea0,
+ 0x0000, 0x0036, 0x006c, 0x00a2, 0x8648,
+ 0x0002, 0x0038, 0x006e, 0x00a4, 0x864c,
+ 0x0004, 0x003a, 0x0070, 0x00a6, 0x8650,
+ 0x0006, 0x003c, 0x0072, 0x00a8, 0x8654,
+ 0x0008, 0x003e, 0x0074, 0x00aa, 0x8658,
+ 0x000a, 0x0040, 0x0076, 0x00ac, 0x865c,
+ 0x000c, 0x0042, 0x0078, 0x00ae, 0x8660,
+ 0x000e, 0x0044, 0x007a, 0x00b0, 0x8664,
+ 0x0010, 0x0046, 0x007c, 0x00b2, 0x8668,
+ 0x0012, 0x0048, 0x007e, 0x8600, 0x866c,
+ 0x0014, 0x004a, 0x0080, 0x8604, 0x8670,
+ 0x0016, 0x004c, 0x0082, 0x8608, 0x8674,
+ 0x0018, 0x004e, 0x0084, 0x860c, 0x8678,
+ 0x001a, 0x0050, 0x0086, 0x8610, 0x867c,
+ 0x001c, 0x0052, 0x0088, 0x8614, 0x8680,
+ 0x001e, 0x0054, 0x008a, 0x8618, 0x8684,
+ 0x0020, 0x0056, 0x008c, 0x861c, 0x8688,
+ 0x0022, 0x0058, 0x008e, 0x8620, 0x868c,
+ 0x0024, 0x005a, 0x0090, 0x8624, 0x8690,
+ 0x0026, 0x005c, 0x0092, 0x8628, 0x8694,
+ 0x0028, 0x005e, 0x0094, 0x862c, 0x8698,
+ 0x002a, 0x0060, 0x0096, 0x8630, 0x869c,
+ 0x002c, 0x0062, 0x0098, 0x8634, 0x86a0,
+ 0x002e, 0x0064, 0x009a, 0x8638, 0x86a4,
+ 0x0030, 0x0066, 0x009c, 0x863c, 0x86a8,
+ 0x0032, 0x0068, 0x009e, 0x8640, 0x86ac,
+ 0x0034, 0x006a, 0x00a0, 0x8644, 0x86b0,
+ 0x4a5a, 0x7a36, 0x0e7e, 0x3212, 0x62a2,
+ 0x565a, 0x0236, 0x1a7e, 0x3e12, 0x6ea2,
+ 0x625a, 0x0e36, 0x267e, 0x4a12, 0x7aa2,
+ 0x6e5a, 0x1a36, 0x327e, 0x5612, 0x02a2,
+ 0x7a5a, 0x2636, 0x3e7e, 0x6212, 0x0ea2,
+ 0x025a, 0x3236, 0x4a7e, 0x6e12, 0x1aa2,
+ 0x0e5a, 0x3e36, 0x567e, 0x7a12, 0x26a2,
+ 0x1a5a, 0x4a36, 0x627e, 0x0212, 0x32a2,
+ 0x265a, 0x5636, 0x6e7e, 0x0e12, 0x3ea2,
+ 0x325a, 0x6236, 0x7a7e, 0x1a12, 0x4aa2,
+ 0x3e5a, 0x6e36, 0x027e, 0x2612, 0x56a2,
+ 0x4a5c, 0x7a38, 0x0e80, 0x3214, 0x62a4,
+ 0x565c, 0x0238, 0x1a80, 0x3e14, 0x6ea4,
+ 0x625c, 0x0e38, 0x2680, 0x4a14, 0x7aa4,
+ 0x6e5c, 0x1a38, 0x3280, 0x5614, 0x02a4,
+ 0x7a5c, 0x2638, 0x3e80, 0x6214, 0x0ea4,
+ 0x025c, 0x3238, 0x4a80, 0x6e14, 0x1aa4,
+ 0x0e5c, 0x3e38, 0x5680, 0x7a14, 0x26a4,
+ 0x1a5c, 0x4a38, 0x6280, 0x0214, 0x32a4,
+ 0x265c, 0x5638, 0x6e80, 0x0e14, 0x3ea4,
+ 0x325c, 0x6238, 0x7a80, 0x1a14, 0x4aa4,
+ 0x3e5c, 0x6e38, 0x0280, 0x2614, 0x56a4,
+ 0x4a5e, 0x7a3a, 0x0e82, 0x3216, 0x62a6,
+ 0x565e, 0x023a, 0x1a82, 0x3e16, 0x6ea6,
+ 0x625e, 0x0e3a, 0x2682, 0x4a16, 0x7aa6,
+ 0x6e5e, 0x1a3a, 0x3282, 0x5616, 0x02a6,
+ 0x7a5e, 0x263a, 0x3e82, 0x6216, 0x0ea6,
+ 0x025e, 0x323a, 0x4a82, 0x6e16, 0x1aa6,
+ 0x0e5e, 0x3e3a, 0x5682, 0x7a16, 0x26a6,
+ 0x1a5e, 0x4a3a, 0x6282, 0x0216, 0x32a6,
+ 0x265e, 0x563a, 0x6e82, 0x0e16, 0x3ea6,
+ 0x325e, 0x623a, 0x7a82, 0x1a16, 0x4aa6,
+ 0x3e5e, 0x6e3a, 0x0282, 0x2616, 0x56a6,
+ 0x4a60, 0x7a3c, 0x0e84, 0x3218, 0x62a8,
+ 0x5660, 0x023c, 0x1a84, 0x3e18, 0x6ea8,
+ 0x6260, 0x0e3c, 0x2684, 0x4a18, 0x7aa8,
+ 0x6e60, 0x1a3c, 0x3284, 0x5618, 0x02a8,
+ 0x7a60, 0x263c, 0x3e84, 0x6218, 0x0ea8,
+ 0x0260, 0x323c, 0x4a84, 0x6e18, 0x1aa8,
+ 0x0e60, 0x3e3c, 0x5684, 0x7a18, 0x26a8,
+ 0x1a60, 0x4a3c, 0x6284, 0x0218, 0x32a8,
+ 0x2660, 0x563c, 0x6e84, 0x0e18, 0x3ea8,
+ 0x3260, 0x623c, 0x7a84, 0x1a18, 0x4aa8,
+ 0x3e60, 0x6e3c, 0x0284, 0x2618, 0x56a8,
+ 0x4a62, 0x7a3e, 0x0e86, 0x321a, 0x62aa,
+ 0x5662, 0x023e, 0x1a86, 0x3e1a, 0x6eaa,
+ 0x6262, 0x0e3e, 0x2686, 0x4a1a, 0x7aaa,
+ 0x6e62, 0x1a3e, 0x3286, 0x561a, 0x02aa,
+ 0x7a62, 0x263e, 0x3e86, 0x621a, 0x0eaa,
+ 0x0262, 0x323e, 0x4a86, 0x6e1a, 0x1aaa,
+ 0x0e62, 0x3e3e, 0x5686, 0x7a1a, 0x26aa,
+ 0x1a62, 0x4a3e, 0x6286, 0x021a, 0x32aa,
+ 0x2662, 0x563e, 0x6e86, 0x0e1a, 0x3eaa,
+ 0x3262, 0x623e, 0x7a86, 0x1a1a, 0x4aaa,
+ 0x3e62, 0x6e3e, 0x0286, 0x261a, 0x56aa,
+ 0x4a64, 0x7a40, 0x0e88, 0x321c, 0x62ac,
+ 0x5664, 0x0240, 0x1a88, 0x3e1c, 0x6eac,
+ 0x6264, 0x0e40, 0x2688, 0x4a1c, 0x7aac,
+ 0x6e64, 0x1a40, 0x3288, 0x561c, 0x02ac,
+ 0x7a64, 0x2640, 0x3e88, 0x621c, 0x0eac,
+ 0x0264, 0x3240, 0x4a88, 0x6e1c, 0x1aac,
+ 0x0e64, 0x3e40, 0x5688, 0x7a1c, 0x26ac,
+ 0x1a64, 0x4a40, 0x6288, 0x021c, 0x32ac,
+ 0x2664, 0x5640, 0x6e88, 0x0e1c, 0x3eac,
+ 0x3264, 0x6240, 0x7a88, 0x1a1c, 0x4aac,
+ 0x3e64, 0x6e40, 0x0288, 0x261c, 0x56ac,
+ 0x4a66, 0x7a42, 0x0e8a, 0x321e, 0x62ae,
+ 0x5666, 0x0242, 0x1a8a, 0x3e1e, 0x6eae,
+ 0x6266, 0x0e42, 0x268a, 0x4a1e, 0x7aae,
+ 0x6e66, 0x1a42, 0x328a, 0x561e, 0x02ae,
+ 0x7a66, 0x2642, 0x3e8a, 0x621e, 0x0eae,
+ 0x0266, 0x3242, 0x4a8a, 0x6e1e, 0x1aae,
+ 0x0e66, 0x3e42, 0x568a, 0x7a1e, 0x26ae,
+ 0x1a66, 0x4a42, 0x628a, 0x021e, 0x32ae,
+ 0x2666, 0x5642, 0x6e8a, 0x0e1e, 0x3eae,
+ 0x3266, 0x6242, 0x7a8a, 0x1a1e, 0x4aae,
+ 0x3e66, 0x6e42, 0x028a, 0x261e, 0x56ae,
+ 0x4a68, 0x7a44, 0x0e8c, 0x3220, 0x62b0,
+ 0x5668, 0x0244, 0x1a8c, 0x3e20, 0x6eb0,
+ 0x6268, 0x0e44, 0x268c, 0x4a20, 0x7ab0,
+ 0x6e68, 0x1a44, 0x328c, 0x5620, 0x02b0,
+ 0x7a68, 0x2644, 0x3e8c, 0x6220, 0x0eb0,
+ 0x0268, 0x3244, 0x4a8c, 0x6e20, 0x1ab0,
+ 0x0e68, 0x3e44, 0x568c, 0x7a20, 0x26b0,
+ 0x1a68, 0x4a44, 0x628c, 0x0220, 0x32b0,
+ 0x2668, 0x5644, 0x6e8c, 0x0e20, 0x3eb0,
+ 0x3268, 0x6244, 0x7a8c, 0x1a20, 0x4ab0,
+ 0x3e68, 0x6e44, 0x028c, 0x2620, 0x56b0,
+ 0x4a6a, 0x7a46, 0x0e8e, 0x3222, 0x62b2,
+ 0x566a, 0x0246, 0x1a8e, 0x3e22, 0x6eb2,
+ 0x626a, 0x0e46, 0x268e, 0x4a22, 0x7ab2,
+ 0x6e6a, 0x1a46, 0x328e, 0x5622, 0x02b2,
+ 0x7a6a, 0x2646, 0x3e8e, 0x6222, 0x0eb2,
+ 0x026a, 0x3246, 0x4a8e, 0x6e22, 0x1ab2,
+ 0x0e6a, 0x3e46, 0x568e, 0x7a22, 0x26b2,
+ 0x1a6a, 0x4a46, 0x628e, 0x0222, 0x32b2,
+ 0x266a, 0x5646, 0x6e8e, 0x0e22, 0x3eb2,
+ 0x326a, 0x6246, 0x7a8e, 0x1a22, 0x4ab2,
+ 0x3e6a, 0x6e46, 0x028e, 0x2622, 0x56b2,
+ 0x4e5a, 0x7e36, 0x127e, 0x3612, 0x66a2,
+ 0x5a5a, 0x0636, 0x1e7e, 0x4212, 0x72a2,
+ 0x665a, 0x1236, 0x2a7e, 0x4e12, 0x7ea2,
+ 0x725a, 0x1e36, 0x367e, 0x5a12, 0x06a2,
+ 0x7e5a, 0x2a36, 0x427e, 0x6612, 0x12a2,
+ 0x065a, 0x3636, 0x4e7e, 0x7212, 0x1ea2,
+ 0x125a, 0x4236, 0x5a7e, 0x7e12, 0x2aa2,
+ 0x1e5a, 0x4e36, 0x667e, 0x0612, 0x36a2,
+ 0x2a5a, 0x5a36, 0x727e, 0x1212, 0x42a2,
+ 0x365a, 0x6636, 0x7e7e, 0x1e12, 0x4ea2,
+ 0x425a, 0x7236, 0x067e, 0x2a12, 0x5aa2,
+ 0x4e5c, 0x7e38, 0x1280, 0x3614, 0x66a4,
+ 0x5a5c, 0x0638, 0x1e80, 0x4214, 0x72a4,
+ 0x665c, 0x1238, 0x2a80, 0x4e14, 0x7ea4,
+ 0x725c, 0x1e38, 0x3680, 0x5a14, 0x06a4,
+ 0x7e5c, 0x2a38, 0x4280, 0x6614, 0x12a4,
+ 0x065c, 0x3638, 0x4e80, 0x7214, 0x1ea4,
+ 0x125c, 0x4238, 0x5a80, 0x7e14, 0x2aa4,
+ 0x1e5c, 0x4e38, 0x6680, 0x0614, 0x36a4,
+ 0x2a5c, 0x5a38, 0x7280, 0x1214, 0x42a4,
+ 0x365c, 0x6638, 0x7e80, 0x1e14, 0x4ea4,
+ 0x425c, 0x7238, 0x0680, 0x2a14, 0x5aa4,
+ 0x4e5e, 0x7e3a, 0x1282, 0x3616, 0x66a6,
+ 0x5a5e, 0x063a, 0x1e82, 0x4216, 0x72a6,
+ 0x665e, 0x123a, 0x2a82, 0x4e16, 0x7ea6,
+ 0x725e, 0x1e3a, 0x3682, 0x5a16, 0x06a6,
+ 0x7e5e, 0x2a3a, 0x4282, 0x6616, 0x12a6,
+ 0x065e, 0x363a, 0x4e82, 0x7216, 0x1ea6,
+ 0x125e, 0x423a, 0x5a82, 0x7e16, 0x2aa6,
+ 0x1e5e, 0x4e3a, 0x6682, 0x0616, 0x36a6,
+ 0x2a5e, 0x5a3a, 0x7282, 0x1216, 0x42a6,
+ 0x365e, 0x663a, 0x7e82, 0x1e16, 0x4ea6,
+ 0x425e, 0x723a, 0x0682, 0x2a16, 0x5aa6,
+ 0x4e60, 0x7e3c, 0x1284, 0x3618, 0x66a8,
+ 0x5a60, 0x063c, 0x1e84, 0x4218, 0x72a8,
+ 0x6660, 0x123c, 0x2a84, 0x4e18, 0x7ea8,
+ 0x7260, 0x1e3c, 0x3684, 0x5a18, 0x06a8,
+ 0x7e60, 0x2a3c, 0x4284, 0x6618, 0x12a8,
+ 0x0660, 0x363c, 0x4e84, 0x7218, 0x1ea8,
+ 0x1260, 0x423c, 0x5a84, 0x7e18, 0x2aa8,
+ 0x1e60, 0x4e3c, 0x6684, 0x0618, 0x36a8,
+ 0x2a60, 0x5a3c, 0x7284, 0x1218, 0x42a8,
+ 0x3660, 0x663c, 0x7e84, 0x1e18, 0x4ea8,
+ 0x4260, 0x723c, 0x0684, 0x2a18, 0x5aa8,
+ 0x4e62, 0x7e3e, 0x1286, 0x361a, 0x66aa,
+ 0x5a62, 0x063e, 0x1e86, 0x421a, 0x72aa,
+ 0x6662, 0x123e, 0x2a86, 0x4e1a, 0x7eaa,
+ 0x7262, 0x1e3e, 0x3686, 0x5a1a, 0x06aa,
+ 0x7e62, 0x2a3e, 0x4286, 0x661a, 0x12aa,
+ 0x0662, 0x363e, 0x4e86, 0x721a, 0x1eaa,
+ 0x1262, 0x423e, 0x5a86, 0x7e1a, 0x2aaa,
+ 0x1e62, 0x4e3e, 0x6686, 0x061a, 0x36aa,
+ 0x2a62, 0x5a3e, 0x7286, 0x121a, 0x42aa,
+ 0x3662, 0x663e, 0x7e86, 0x1e1a, 0x4eaa,
+ 0x4262, 0x723e, 0x0686, 0x2a1a, 0x5aaa,
+ 0x4e64, 0x7e40, 0x1288, 0x361c, 0x66ac,
+ 0x5a64, 0x0640, 0x1e88, 0x421c, 0x72ac,
+ 0x6664, 0x1240, 0x2a88, 0x4e1c, 0x7eac,
+ 0x7264, 0x1e40, 0x3688, 0x5a1c, 0x06ac,
+ 0x7e64, 0x2a40, 0x4288, 0x661c, 0x12ac,
+ 0x0664, 0x3640, 0x4e88, 0x721c, 0x1eac,
+ 0x1264, 0x4240, 0x5a88, 0x7e1c, 0x2aac,
+ 0x1e64, 0x4e40, 0x6688, 0x061c, 0x36ac,
+ 0x2a64, 0x5a40, 0x7288, 0x121c, 0x42ac,
+ 0x3664, 0x6640, 0x7e88, 0x1e1c, 0x4eac,
+ 0x4264, 0x7240, 0x0688, 0x2a1c, 0x5aac,
+ 0x4e66, 0x7e42, 0x128a, 0x361e, 0x66ae,
+ 0x5a66, 0x0642, 0x1e8a, 0x421e, 0x72ae,
+ 0x6666, 0x1242, 0x2a8a, 0x4e1e, 0x7eae,
+ 0x7266, 0x1e42, 0x368a, 0x5a1e, 0x06ae,
+ 0x7e66, 0x2a42, 0x428a, 0x661e, 0x12ae,
+ 0x0666, 0x3642, 0x4e8a, 0x721e, 0x1eae,
+ 0x1266, 0x4242, 0x5a8a, 0x7e1e, 0x2aae,
+ 0x1e66, 0x4e42, 0x668a, 0x061e, 0x36ae,
+ 0x2a66, 0x5a42, 0x728a, 0x121e, 0x42ae,
+ 0x3666, 0x6642, 0x7e8a, 0x1e1e, 0x4eae,
+ 0x4266, 0x7242, 0x068a, 0x2a1e, 0x5aae,
+ 0x4e68, 0x7e44, 0x128c, 0x3620, 0x66b0,
+ 0x5a68, 0x0644, 0x1e8c, 0x4220, 0x72b0,
+ 0x6668, 0x1244, 0x2a8c, 0x4e20, 0x7eb0,
+ 0x7268, 0x1e44, 0x368c, 0x5a20, 0x06b0,
+ 0x7e68, 0x2a44, 0x428c, 0x6620, 0x12b0,
+ 0x0668, 0x3644, 0x4e8c, 0x7220, 0x1eb0,
+ 0x1268, 0x4244, 0x5a8c, 0x7e20, 0x2ab0,
+ 0x1e68, 0x4e44, 0x668c, 0x0620, 0x36b0,
+ 0x2a68, 0x5a44, 0x728c, 0x1220, 0x42b0,
+ 0x3668, 0x6644, 0x7e8c, 0x1e20, 0x4eb0,
+ 0x4268, 0x7244, 0x068c, 0x2a20, 0x5ab0,
+ 0x4e6a, 0x7e46, 0x128e, 0x3622, 0x66b2,
+ 0x5a6a, 0x0646, 0x1e8e, 0x4222, 0x72b2,
+ 0x666a, 0x1246, 0x2a8e, 0x4e22, 0x7eb2,
+ 0x726a, 0x1e46, 0x368e, 0x5a22, 0x06b2,
+ 0x7e6a, 0x2a46, 0x428e, 0x6622, 0x12b2,
+ 0x066a, 0x3646, 0x4e8e, 0x7222, 0x1eb2,
+ 0x126a, 0x4246, 0x5a8e, 0x7e22, 0x2ab2,
+ 0x1e6a, 0x4e46, 0x668e, 0x0622, 0x36b2,
+ 0x2a6a, 0x5a46, 0x728e, 0x1222, 0x42b2,
+ 0x366a, 0x6646, 0x7e8e, 0x1e22, 0x4eb2,
+ 0x426a, 0x7246, 0x068e, 0x2a22, 0x5ab2,
+ 0x525a, 0x8236, 0x167e, 0x3a12, 0x6aa2,
+ 0x5e5a, 0x0a36, 0x227e, 0x4612, 0x76a2,
+ 0x6a5a, 0x1636, 0x2e7e, 0x5212, 0x82a2,
+ 0x765a, 0x2236, 0x3a7e, 0x5e12, 0x0aa2,
+ 0x825a, 0x2e36, 0x467e, 0x6a12, 0x16a2,
+ 0x0a5a, 0x3a36, 0x527e, 0x7612, 0x22a2,
+ 0x165a, 0x4636, 0x5e7e, 0x8212, 0x2ea2,
+ 0x225a, 0x5236, 0x6a7e, 0x0a12, 0x3aa2,
+ 0x2e5a, 0x5e36, 0x767e, 0x1612, 0x46a2,
+ 0x3a5a, 0x6a36, 0x827e, 0x2212, 0x52a2,
+ 0x465a, 0x7636, 0x0a7e, 0x2e12, 0x5ea2,
+ 0x525c, 0x8238, 0x1680, 0x3a14, 0x6aa4,
+ 0x5e5c, 0x0a38, 0x2280, 0x4614, 0x76a4,
+ 0x6a5c, 0x1638, 0x2e80, 0x5214, 0x82a4,
+ 0x765c, 0x2238, 0x3a80, 0x5e14, 0x0aa4,
+ 0x825c, 0x2e38, 0x4680, 0x6a14, 0x16a4,
+ 0x0a5c, 0x3a38, 0x5280, 0x7614, 0x22a4,
+ 0x165c, 0x4638, 0x5e80, 0x8214, 0x2ea4,
+ 0x225c, 0x5238, 0x6a80, 0x0a14, 0x3aa4,
+ 0x2e5c, 0x5e38, 0x7680, 0x1614, 0x46a4,
+ 0x3a5c, 0x6a38, 0x8280, 0x2214, 0x52a4,
+ 0x465c, 0x7638, 0x0a80, 0x2e14, 0x5ea4,
+ 0x525e, 0x823a, 0x1682, 0x3a16, 0x6aa6,
+ 0x5e5e, 0x0a3a, 0x2282, 0x4616, 0x76a6,
+ 0x6a5e, 0x163a, 0x2e82, 0x5216, 0x82a6,
+ 0x765e, 0x223a, 0x3a82, 0x5e16, 0x0aa6,
+ 0x825e, 0x2e3a, 0x4682, 0x6a16, 0x16a6,
+ 0x0a5e, 0x3a3a, 0x5282, 0x7616, 0x22a6,
+ 0x165e, 0x463a, 0x5e82, 0x8216, 0x2ea6,
+ 0x225e, 0x523a, 0x6a82, 0x0a16, 0x3aa6,
+ 0x2e5e, 0x5e3a, 0x7682, 0x1616, 0x46a6,
+ 0x3a5e, 0x6a3a, 0x8282, 0x2216, 0x52a6,
+ 0x465e, 0x763a, 0x0a82, 0x2e16, 0x5ea6,
+ 0x5260, 0x823c, 0x1684, 0x3a18, 0x6aa8,
+ 0x5e60, 0x0a3c, 0x2284, 0x4618, 0x76a8,
+ 0x6a60, 0x163c, 0x2e84, 0x5218, 0x82a8,
+ 0x7660, 0x223c, 0x3a84, 0x5e18, 0x0aa8,
+ 0x8260, 0x2e3c, 0x4684, 0x6a18, 0x16a8,
+ 0x0a60, 0x3a3c, 0x5284, 0x7618, 0x22a8,
+ 0x1660, 0x463c, 0x5e84, 0x8218, 0x2ea8,
+ 0x2260, 0x523c, 0x6a84, 0x0a18, 0x3aa8,
+ 0x2e60, 0x5e3c, 0x7684, 0x1618, 0x46a8,
+ 0x3a60, 0x6a3c, 0x8284, 0x2218, 0x52a8,
+ 0x4660, 0x763c, 0x0a84, 0x2e18, 0x5ea8,
+ 0x5262, 0x823e, 0x1686, 0x3a1a, 0x6aaa,
+ 0x5e62, 0x0a3e, 0x2286, 0x461a, 0x76aa,
+ 0x6a62, 0x163e, 0x2e86, 0x521a, 0x82aa,
+ 0x7662, 0x223e, 0x3a86, 0x5e1a, 0x0aaa,
+ 0x8262, 0x2e3e, 0x4686, 0x6a1a, 0x16aa,
+ 0x0a62, 0x3a3e, 0x5286, 0x761a, 0x22aa,
+ 0x1662, 0x463e, 0x5e86, 0x821a, 0x2eaa,
+ 0x2262, 0x523e, 0x6a86, 0x0a1a, 0x3aaa,
+ 0x2e62, 0x5e3e, 0x7686, 0x161a, 0x46aa,
+ 0x3a62, 0x6a3e, 0x8286, 0x221a, 0x52aa,
+ 0x4662, 0x763e, 0x0a86, 0x2e1a, 0x5eaa,
+ 0x5264, 0x8240, 0x1688, 0x3a1c, 0x6aac,
+ 0x5e64, 0x0a40, 0x2288, 0x461c, 0x76ac,
+ 0x6a64, 0x1640, 0x2e88, 0x521c, 0x82ac,
+ 0x7664, 0x2240, 0x3a88, 0x5e1c, 0x0aac,
+ 0x8264, 0x2e40, 0x4688, 0x6a1c, 0x16ac,
+ 0x0a64, 0x3a40, 0x5288, 0x761c, 0x22ac,
+ 0x1664, 0x4640, 0x5e88, 0x821c, 0x2eac,
+ 0x2264, 0x5240, 0x6a88, 0x0a1c, 0x3aac,
+ 0x2e64, 0x5e40, 0x7688, 0x161c, 0x46ac,
+ 0x3a64, 0x6a40, 0x8288, 0x221c, 0x52ac,
+ 0x4664, 0x7640, 0x0a88, 0x2e1c, 0x5eac,
+ 0x5266, 0x8242, 0x168a, 0x3a1e, 0x6aae,
+ 0x5e66, 0x0a42, 0x228a, 0x461e, 0x76ae,
+ 0x6a66, 0x1642, 0x2e8a, 0x521e, 0x82ae,
+ 0x7666, 0x2242, 0x3a8a, 0x5e1e, 0x0aae,
+ 0x8266, 0x2e42, 0x468a, 0x6a1e, 0x16ae,
+ 0x0a66, 0x3a42, 0x528a, 0x761e, 0x22ae,
+ 0x1666, 0x4642, 0x5e8a, 0x821e, 0x2eae,
+ 0x2266, 0x5242, 0x6a8a, 0x0a1e, 0x3aae,
+ 0x2e66, 0x5e42, 0x768a, 0x161e, 0x46ae,
+ 0x3a66, 0x6a42, 0x828a, 0x221e, 0x52ae,
+ 0x4666, 0x7642, 0x0a8a, 0x2e1e, 0x5eae,
+ 0x5268, 0x8244, 0x168c, 0x3a20, 0x6ab0,
+ 0x5e68, 0x0a44, 0x228c, 0x4620, 0x76b0,
+ 0x6a68, 0x1644, 0x2e8c, 0x5220, 0x82b0,
+ 0x7668, 0x2244, 0x3a8c, 0x5e20, 0x0ab0,
+ 0x8268, 0x2e44, 0x468c, 0x6a20, 0x16b0,
+ 0x0a68, 0x3a44, 0x528c, 0x7620, 0x22b0,
+ 0x1668, 0x4644, 0x5e8c, 0x8220, 0x2eb0,
+ 0x2268, 0x5244, 0x6a8c, 0x0a20, 0x3ab0,
+ 0x2e68, 0x5e44, 0x768c, 0x1620, 0x46b0,
+ 0x3a68, 0x6a44, 0x828c, 0x2220, 0x52b0,
+ 0x4668, 0x7644, 0x0a8c, 0x2e20, 0x5eb0,
+ 0x526a, 0x8246, 0x168e, 0x3a22, 0x6ab2,
+ 0x5e6a, 0x0a46, 0x228e, 0x4622, 0x76b2,
+ 0x6a6a, 0x1646, 0x2e8e, 0x5222, 0x82b2,
+ 0x766a, 0x2246, 0x3a8e, 0x5e22, 0x0ab2,
+ 0x826a, 0x2e46, 0x468e, 0x6a22, 0x16b2,
+ 0x0a6a, 0x3a46, 0x528e, 0x7622, 0x22b2,
+ 0x166a, 0x4646, 0x5e8e, 0x8222, 0x2eb2,
+ 0x226a, 0x5246, 0x6a8e, 0x0a22, 0x3ab2,
+ 0x2e6a, 0x5e46, 0x768e, 0x1622, 0x46b2,
+ 0x3a6a, 0x6a46, 0x828e, 0x2222, 0x52b2,
+ 0x466a, 0x7646, 0x0a8e, 0x2e22, 0x5eb2,
+ 0x4a5a, 0x7a36, 0x0e7e, 0x3212, 0x62a2,
+ 0x565a, 0x0236, 0x1a7e, 0x3e12, 0x6ea2,
+ 0x625a, 0x0e36, 0x267e, 0x4a12, 0x7aa2,
+ 0x6e5a, 0x1a36, 0x327e, 0x5612, 0x02a2,
+ 0x7a5a, 0x2636, 0x3e7e, 0x6212, 0x0ea2,
+ 0x025a, 0x3236, 0x4a7e, 0x6e12, 0x1aa2,
+ 0x0e5a, 0x3e36, 0x567e, 0x7a12, 0x26a2,
+ 0x1a5a, 0x4a36, 0x627e, 0x0212, 0x32a2,
+ 0x265a, 0x5636, 0x6e7e, 0x0e12, 0x3ea2,
+ 0x325a, 0x6236, 0x7a7e, 0x1a12, 0x4aa2,
+ 0x3e5a, 0x6e36, 0x027e, 0x2612, 0x56a2,
+ 0x4a5c, 0x7a38, 0x0e80, 0x3214, 0x62a4,
+ 0x565c, 0x0238, 0x1a80, 0x3e14, 0x6ea4,
+ 0x625c, 0x0e38, 0x2680, 0x4a14, 0x7aa4,
+ 0x6e5c, 0x1a38, 0x3280, 0x5614, 0x02a4,
+ 0x7a5c, 0x2638, 0x3e80, 0x6214, 0x0ea4,
+ 0x025c, 0x3238, 0x4a80, 0x6e14, 0x1aa4,
+ 0x0e5c, 0x3e38, 0x5680, 0x7a14, 0x26a4,
+ 0x1a5c, 0x4a38, 0x6280, 0x0214, 0x32a4,
+ 0x265c, 0x5638, 0x6e80, 0x0e14, 0x3ea4,
+ 0x325c, 0x6238, 0x7a80, 0x1a14, 0x4aa4,
+ 0x3e5c, 0x6e38, 0x0280, 0x2614, 0x56a4,
+ 0x4a5e, 0x7a3a, 0x0e82, 0x3216, 0x62a6,
+ 0x565e, 0x023a, 0x1a82, 0x3e16, 0x6ea6,
+ 0x625e, 0x0e3a, 0x2682, 0x4a16, 0x7aa6,
+ 0x6e5e, 0x1a3a, 0x3282, 0x5616, 0x02a6,
+ 0x7a5e, 0x263a, 0x3e82, 0x6216, 0x0ea6,
+ 0x7c48, 0x2824, 0x406c, 0x6400, 0x1090,
+ 0x0448, 0x3424, 0x4c6c, 0x7000, 0x1c90,
+ 0x1048, 0x4024, 0x586c, 0x7c00, 0x2890,
+ 0x1c48, 0x4c24, 0x646c, 0x0400, 0x3490,
+ 0x2848, 0x5824, 0x706c, 0x1000, 0x4090,
+ 0x3448, 0x6424, 0x7c6c, 0x1c00, 0x4c90,
+ 0x4048, 0x7024, 0x046c, 0x2800, 0x5890,
+ 0x4c48, 0x7c24, 0x106c, 0x3400, 0x6490,
+ 0x5848, 0x0424, 0x1c6c, 0x4000, 0x7090,
+ 0x6448, 0x1024, 0x286c, 0x4c00, 0x7c90,
+ 0x7048, 0x1c24, 0x346c, 0x5800, 0x0490,
+ 0x7c4a, 0x2826, 0x406e, 0x6402, 0x1092,
+ 0x044a, 0x3426, 0x4c6e, 0x7002, 0x1c92,
+ 0x104a, 0x4026, 0x586e, 0x7c02, 0x2892,
+ 0x1c4a, 0x4c26, 0x646e, 0x0402, 0x3492,
+ 0x284a, 0x5826, 0x706e, 0x1002, 0x4092,
+ 0x344a, 0x6426, 0x7c6e, 0x1c02, 0x4c92,
+ 0x404a, 0x7026, 0x046e, 0x2802, 0x5892,
+ 0x4c4a, 0x7c26, 0x106e, 0x3402, 0x6492,
+ 0x584a, 0x0426, 0x1c6e, 0x4002, 0x7092,
+ 0x644a, 0x1026, 0x286e, 0x4c02, 0x7c92,
+ 0x704a, 0x1c26, 0x346e, 0x5802, 0x0492,
+ 0x7c4c, 0x2828, 0x4070, 0x6404, 0x1094,
+ 0x044c, 0x3428, 0x4c70, 0x7004, 0x1c94,
+ 0x104c, 0x4028, 0x5870, 0x7c04, 0x2894,
+ 0x1c4c, 0x4c28, 0x6470, 0x0404, 0x3494,
+ 0x284c, 0x5828, 0x7070, 0x1004, 0x4094,
+ 0x344c, 0x6428, 0x7c70, 0x1c04, 0x4c94,
+ 0x404c, 0x7028, 0x0470, 0x2804, 0x5894,
+ 0x4c4c, 0x7c28, 0x1070, 0x3404, 0x6494,
+ 0x584c, 0x0428, 0x1c70, 0x4004, 0x7094,
+ 0x644c, 0x1028, 0x2870, 0x4c04, 0x7c94,
+ 0x704c, 0x1c28, 0x3470, 0x5804, 0x0494,
+ 0x7c4e, 0x282a, 0x4072, 0x6406, 0x1096,
+ 0x044e, 0x342a, 0x4c72, 0x7006, 0x1c96,
+ 0x104e, 0x402a, 0x5872, 0x7c06, 0x2896,
+ 0x1c4e, 0x4c2a, 0x6472, 0x0406, 0x3496,
+ 0x284e, 0x582a, 0x7072, 0x1006, 0x4096,
+ 0x344e, 0x642a, 0x7c72, 0x1c06, 0x4c96,
+ 0x404e, 0x702a, 0x0472, 0x2806, 0x5896,
+ 0x4c4e, 0x7c2a, 0x1072, 0x3406, 0x6496,
+ 0x584e, 0x042a, 0x1c72, 0x4006, 0x7096,
+ 0x644e, 0x102a, 0x2872, 0x4c06, 0x7c96,
+ 0x704e, 0x1c2a, 0x3472, 0x5806, 0x0496,
+ 0x7c50, 0x282c, 0x4074, 0x6408, 0x1098,
+ 0x0450, 0x342c, 0x4c74, 0x7008, 0x1c98,
+ 0x1050, 0x402c, 0x5874, 0x7c08, 0x2898,
+ 0x1c50, 0x4c2c, 0x6474, 0x0408, 0x3498,
+ 0x2850, 0x582c, 0x7074, 0x1008, 0x4098,
+ 0x3450, 0x642c, 0x7c74, 0x1c08, 0x4c98,
+ 0x4050, 0x702c, 0x0474, 0x2808, 0x5898,
+ 0x4c50, 0x7c2c, 0x1074, 0x3408, 0x6498,
+ 0x5850, 0x042c, 0x1c74, 0x4008, 0x7098,
+ 0x6450, 0x102c, 0x2874, 0x4c08, 0x7c98,
+ 0x7050, 0x1c2c, 0x3474, 0x5808, 0x0498,
+ 0x7c52, 0x282e, 0x4076, 0x640a, 0x109a,
+ 0x0452, 0x342e, 0x4c76, 0x700a, 0x1c9a,
+ 0x1052, 0x402e, 0x5876, 0x7c0a, 0x289a,
+ 0x1c52, 0x4c2e, 0x6476, 0x040a, 0x349a,
+ 0x2852, 0x582e, 0x7076, 0x100a, 0x409a,
+ 0x3452, 0x642e, 0x7c76, 0x1c0a, 0x4c9a,
+ 0x4052, 0x702e, 0x0476, 0x280a, 0x589a,
+ 0x4c52, 0x7c2e, 0x1076, 0x340a, 0x649a,
+ 0x5852, 0x042e, 0x1c76, 0x400a, 0x709a,
+ 0x6452, 0x102e, 0x2876, 0x4c0a, 0x7c9a,
+ 0x7052, 0x1c2e, 0x3476, 0x580a, 0x049a,
+ 0x7c54, 0x2830, 0x4078, 0x640c, 0x109c,
+ 0x0454, 0x3430, 0x4c78, 0x700c, 0x1c9c,
+ 0x1054, 0x4030, 0x5878, 0x7c0c, 0x289c,
+ 0x1c54, 0x4c30, 0x6478, 0x040c, 0x349c,
+ 0x2854, 0x5830, 0x7078, 0x100c, 0x409c,
+ 0x3454, 0x6430, 0x7c78, 0x1c0c, 0x4c9c,
+ 0x4054, 0x7030, 0x0478, 0x280c, 0x589c,
+ 0x4c54, 0x7c30, 0x1078, 0x340c, 0x649c,
+ 0x5854, 0x0430, 0x1c78, 0x400c, 0x709c,
+ 0x6454, 0x1030, 0x2878, 0x4c0c, 0x7c9c,
+ 0x7054, 0x1c30, 0x3478, 0x580c, 0x049c,
+ 0x7c56, 0x2832, 0x407a, 0x640e, 0x109e,
+ 0x0456, 0x3432, 0x4c7a, 0x700e, 0x1c9e,
+ 0x1056, 0x4032, 0x587a, 0x7c0e, 0x289e,
+ 0x1c56, 0x4c32, 0x647a, 0x040e, 0x349e,
+ 0x2856, 0x5832, 0x707a, 0x100e, 0x409e,
+ 0x3456, 0x6432, 0x7c7a, 0x1c0e, 0x4c9e,
+ 0x4056, 0x7032, 0x047a, 0x280e, 0x589e,
+ 0x4c56, 0x7c32, 0x107a, 0x340e, 0x649e,
+ 0x5856, 0x0432, 0x1c7a, 0x400e, 0x709e,
+ 0x6456, 0x1032, 0x287a, 0x4c0e, 0x7c9e,
+ 0x7056, 0x1c32, 0x347a, 0x580e, 0x049e,
+ 0x7c58, 0x2834, 0x407c, 0x6410, 0x10a0,
+ 0x0458, 0x3434, 0x4c7c, 0x7010, 0x1ca0,
+ 0x1058, 0x4034, 0x587c, 0x7c10, 0x28a0,
+ 0x1c58, 0x4c34, 0x647c, 0x0410, 0x34a0,
+ 0x2858, 0x5834, 0x707c, 0x1010, 0x40a0,
+ 0x3458, 0x6434, 0x7c7c, 0x1c10, 0x4ca0,
+ 0x4058, 0x7034, 0x047c, 0x2810, 0x58a0,
+ 0x4c58, 0x7c34, 0x107c, 0x3410, 0x64a0,
+ 0x5858, 0x0434, 0x1c7c, 0x4010, 0x70a0,
+ 0x6458, 0x1034, 0x287c, 0x4c10, 0x7ca0,
+ 0x7058, 0x1c34, 0x347c, 0x5810, 0x04a0,
+ 0x8048, 0x2c24, 0x446c, 0x6800, 0x1490,
+ 0x0848, 0x3824, 0x506c, 0x7400, 0x2090,
+ 0x1448, 0x4424, 0x5c6c, 0x8000, 0x2c90,
+ 0x2048, 0x5024, 0x686c, 0x0800, 0x3890,
+ 0x2c48, 0x5c24, 0x746c, 0x1400, 0x4490,
+ 0x3848, 0x6824, 0x806c, 0x2000, 0x5090,
+ 0x4448, 0x7424, 0x086c, 0x2c00, 0x5c90,
+ 0x5048, 0x8024, 0x146c, 0x3800, 0x6890,
+ 0x5c48, 0x0824, 0x206c, 0x4400, 0x7490,
+ 0x6848, 0x1424, 0x2c6c, 0x5000, 0x8090,
+ 0x7448, 0x2024, 0x386c, 0x5c00, 0x0890,
+ 0x804a, 0x2c26, 0x446e, 0x6802, 0x1492,
+ 0x084a, 0x3826, 0x506e, 0x7402, 0x2092,
+ 0x144a, 0x4426, 0x5c6e, 0x8002, 0x2c92,
+ 0x204a, 0x5026, 0x686e, 0x0802, 0x3892,
+ 0x2c4a, 0x5c26, 0x746e, 0x1402, 0x4492,
+ 0x384a, 0x6826, 0x806e, 0x2002, 0x5092,
+ 0x444a, 0x7426, 0x086e, 0x2c02, 0x5c92,
+ 0x504a, 0x8026, 0x146e, 0x3802, 0x6892,
+ 0x5c4a, 0x0826, 0x206e, 0x4402, 0x7492,
+ 0x684a, 0x1426, 0x2c6e, 0x5002, 0x8092,
+ 0x744a, 0x2026, 0x386e, 0x5c02, 0x0892,
+ 0x804c, 0x2c28, 0x4470, 0x6804, 0x1494,
+ 0x084c, 0x3828, 0x5070, 0x7404, 0x2094,
+ 0x144c, 0x4428, 0x5c70, 0x8004, 0x2c94,
+ 0x204c, 0x5028, 0x6870, 0x0804, 0x3894,
+ 0x2c4c, 0x5c28, 0x7470, 0x1404, 0x4494,
+ 0x384c, 0x6828, 0x8070, 0x2004, 0x5094,
+ 0x444c, 0x7428, 0x0870, 0x2c04, 0x5c94,
+ 0x504c, 0x8028, 0x1470, 0x3804, 0x6894,
+ 0x5c4c, 0x0828, 0x2070, 0x4404, 0x7494,
+ 0x684c, 0x1428, 0x2c70, 0x5004, 0x8094,
+ 0x744c, 0x2028, 0x3870, 0x5c04, 0x0894,
+ 0x804e, 0x2c2a, 0x4472, 0x6806, 0x1496,
+ 0x084e, 0x382a, 0x5072, 0x7406, 0x2096,
+ 0x144e, 0x442a, 0x5c72, 0x8006, 0x2c96,
+ 0x204e, 0x502a, 0x6872, 0x0806, 0x3896,
+ 0x2c4e, 0x5c2a, 0x7472, 0x1406, 0x4496,
+ 0x384e, 0x682a, 0x8072, 0x2006, 0x5096,
+ 0x444e, 0x742a, 0x0872, 0x2c06, 0x5c96,
+ 0x504e, 0x802a, 0x1472, 0x3806, 0x6896,
+ 0x5c4e, 0x082a, 0x2072, 0x4406, 0x7496,
+ 0x684e, 0x142a, 0x2c72, 0x5006, 0x8096,
+ 0x744e, 0x202a, 0x3872, 0x5c06, 0x0896,
+ 0x8050, 0x2c2c, 0x4474, 0x6808, 0x1498,
+ 0x0850, 0x382c, 0x5074, 0x7408, 0x2098,
+ 0x1450, 0x442c, 0x5c74, 0x8008, 0x2c98,
+ 0x2050, 0x502c, 0x6874, 0x0808, 0x3898,
+ 0x2c50, 0x5c2c, 0x7474, 0x1408, 0x4498,
+ 0x3850, 0x682c, 0x8074, 0x2008, 0x5098,
+ 0x4450, 0x742c, 0x0874, 0x2c08, 0x5c98,
+ 0x5050, 0x802c, 0x1474, 0x3808, 0x6898,
+ 0x5c50, 0x082c, 0x2074, 0x4408, 0x7498,
+ 0x6850, 0x142c, 0x2c74, 0x5008, 0x8098,
+ 0x7450, 0x202c, 0x3874, 0x5c08, 0x0898,
+ 0x8052, 0x2c2e, 0x4476, 0x680a, 0x149a,
+ 0x0852, 0x382e, 0x5076, 0x740a, 0x209a,
+ 0x1452, 0x442e, 0x5c76, 0x800a, 0x2c9a,
+ 0x2052, 0x502e, 0x6876, 0x080a, 0x389a,
+ 0x2c52, 0x5c2e, 0x7476, 0x140a, 0x449a,
+ 0x3852, 0x682e, 0x8076, 0x200a, 0x509a,
+ 0x4452, 0x742e, 0x0876, 0x2c0a, 0x5c9a,
+ 0x5052, 0x802e, 0x1476, 0x380a, 0x689a,
+ 0x5c52, 0x082e, 0x2076, 0x440a, 0x749a,
+ 0x6852, 0x142e, 0x2c76, 0x500a, 0x809a,
+ 0x7452, 0x202e, 0x3876, 0x5c0a, 0x089a,
+ 0x8054, 0x2c30, 0x4478, 0x680c, 0x149c,
+ 0x0854, 0x3830, 0x5078, 0x740c, 0x209c,
+ 0x1454, 0x4430, 0x5c78, 0x800c, 0x2c9c,
+ 0x2054, 0x5030, 0x6878, 0x080c, 0x389c,
+ 0x2c54, 0x5c30, 0x7478, 0x140c, 0x449c,
+ 0x3854, 0x6830, 0x8078, 0x200c, 0x509c,
+ 0x4454, 0x7430, 0x0878, 0x2c0c, 0x5c9c,
+ 0x5054, 0x8030, 0x1478, 0x380c, 0x689c,
+ 0x5c54, 0x0830, 0x2078, 0x440c, 0x749c,
+ 0x6854, 0x1430, 0x2c78, 0x500c, 0x809c,
+ 0x7454, 0x2030, 0x3878, 0x5c0c, 0x089c,
+ 0x8056, 0x2c32, 0x447a, 0x680e, 0x149e,
+ 0x0856, 0x3832, 0x507a, 0x740e, 0x209e,
+ 0x1456, 0x4432, 0x5c7a, 0x800e, 0x2c9e,
+ 0x2056, 0x5032, 0x687a, 0x080e, 0x389e,
+ 0x2c56, 0x5c32, 0x747a, 0x140e, 0x449e,
+ 0x3856, 0x6832, 0x807a, 0x200e, 0x509e,
+ 0x4456, 0x7432, 0x087a, 0x2c0e, 0x5c9e,
+ 0x5056, 0x8032, 0x147a, 0x380e, 0x689e,
+ 0x5c56, 0x0832, 0x207a, 0x440e, 0x749e,
+ 0x6856, 0x1432, 0x2c7a, 0x500e, 0x809e,
+ 0x7456, 0x2032, 0x387a, 0x5c0e, 0x089e,
+ 0x8058, 0x2c34, 0x447c, 0x6810, 0x14a0,
+ 0x0858, 0x3834, 0x507c, 0x7410, 0x20a0,
+ 0x1458, 0x4434, 0x5c7c, 0x8010, 0x2ca0,
+ 0x2058, 0x5034, 0x687c, 0x0810, 0x38a0,
+ 0x2c58, 0x5c34, 0x747c, 0x1410, 0x44a0,
+ 0x3858, 0x6834, 0x807c, 0x2010, 0x50a0,
+ 0x4458, 0x7434, 0x087c, 0x2c10, 0x5ca0,
+ 0x5058, 0x8034, 0x147c, 0x3810, 0x68a0,
+ 0x5c58, 0x0834, 0x207c, 0x4410, 0x74a0,
+ 0x6858, 0x1434, 0x2c7c, 0x5010, 0x80a0,
+ 0x7458, 0x2034, 0x387c, 0x5c10, 0x08a0,
+ 0x8448, 0x3024, 0x486c, 0x6c00, 0x1890,
+ 0x0c48, 0x3c24, 0x546c, 0x7800, 0x2490,
+ 0x1848, 0x4824, 0x606c, 0x8400, 0x3090,
+ 0x2448, 0x5424, 0x6c6c, 0x0c00, 0x3c90,
+ 0x3048, 0x6024, 0x786c, 0x1800, 0x4890,
+ 0x3c48, 0x6c24, 0x846c, 0x2400, 0x5490,
+ 0x4848, 0x7824, 0x0c6c, 0x3000, 0x6090,
+ 0x5448, 0x8424, 0x186c, 0x3c00, 0x6c90,
+ 0x6048, 0x0c24, 0x246c, 0x4800, 0x7890,
+ 0x6c48, 0x1824, 0x306c, 0x5400, 0x8490,
+ 0x7848, 0x2424, 0x3c6c, 0x6000, 0x0c90,
+ 0x844a, 0x3026, 0x486e, 0x6c02, 0x1892,
+ 0x0c4a, 0x3c26, 0x546e, 0x7802, 0x2492,
+ 0x184a, 0x4826, 0x606e, 0x8402, 0x3092,
+ 0x244a, 0x5426, 0x6c6e, 0x0c02, 0x3c92,
+ 0x304a, 0x6026, 0x786e, 0x1802, 0x4892,
+ 0x3c4a, 0x6c26, 0x846e, 0x2402, 0x5492,
+ 0x484a, 0x7826, 0x0c6e, 0x3002, 0x6092,
+ 0x544a, 0x8426, 0x186e, 0x3c02, 0x6c92,
+ 0x604a, 0x0c26, 0x246e, 0x4802, 0x7892,
+ 0x6c4a, 0x1826, 0x306e, 0x5402, 0x8492,
+ 0x784a, 0x2426, 0x3c6e, 0x6002, 0x0c92,
+ 0x844c, 0x3028, 0x4870, 0x6c04, 0x1894,
+ 0x0c4c, 0x3c28, 0x5470, 0x7804, 0x2494,
+ 0x184c, 0x4828, 0x6070, 0x8404, 0x3094,
+ 0x244c, 0x5428, 0x6c70, 0x0c04, 0x3c94,
+ 0x304c, 0x6028, 0x7870, 0x1804, 0x4894,
+ 0x3c4c, 0x6c28, 0x8470, 0x2404, 0x5494,
+ 0x484c, 0x7828, 0x0c70, 0x3004, 0x6094,
+ 0x544c, 0x8428, 0x1870, 0x3c04, 0x6c94,
+ 0x604c, 0x0c28, 0x2470, 0x4804, 0x7894,
+ 0x6c4c, 0x1828, 0x3070, 0x5404, 0x8494,
+ 0x784c, 0x2428, 0x3c70, 0x6004, 0x0c94,
+ 0x844e, 0x302a, 0x4872, 0x6c06, 0x1896,
+ 0x0c4e, 0x3c2a, 0x5472, 0x7806, 0x2496,
+ 0x184e, 0x482a, 0x6072, 0x8406, 0x3096,
+ 0x244e, 0x542a, 0x6c72, 0x0c06, 0x3c96,
+ 0x304e, 0x602a, 0x7872, 0x1806, 0x4896,
+ 0x3c4e, 0x6c2a, 0x8472, 0x2406, 0x5496,
+ 0x484e, 0x782a, 0x0c72, 0x3006, 0x6096,
+ 0x544e, 0x842a, 0x1872, 0x3c06, 0x6c96,
+ 0x604e, 0x0c2a, 0x2472, 0x4806, 0x7896,
+ 0x6c4e, 0x182a, 0x3072, 0x5406, 0x8496,
+ 0x784e, 0x242a, 0x3c72, 0x6006, 0x0c96,
+ 0x8450, 0x302c, 0x4874, 0x6c08, 0x1898,
+ 0x0c50, 0x3c2c, 0x5474, 0x7808, 0x2498,
+ 0x1850, 0x482c, 0x6074, 0x8408, 0x3098,
+ 0x2450, 0x542c, 0x6c74, 0x0c08, 0x3c98,
+ 0x3050, 0x602c, 0x7874, 0x1808, 0x4898,
+ 0x3c50, 0x6c2c, 0x8474, 0x2408, 0x5498,
+ 0x4850, 0x782c, 0x0c74, 0x3008, 0x6098,
+ 0x5450, 0x842c, 0x1874, 0x3c08, 0x6c98,
+ 0x6050, 0x0c2c, 0x2474, 0x4808, 0x7898,
+ 0x6c50, 0x182c, 0x3074, 0x5408, 0x8498,
+ 0x7850, 0x242c, 0x3c74, 0x6008, 0x0c98,
+ 0x8452, 0x302e, 0x4876, 0x6c0a, 0x189a,
+ 0x0c52, 0x3c2e, 0x5476, 0x780a, 0x249a,
+ 0x1852, 0x482e, 0x6076, 0x840a, 0x309a,
+ 0x2452, 0x542e, 0x6c76, 0x0c0a, 0x3c9a,
+ 0x3052, 0x602e, 0x7876, 0x180a, 0x489a,
+ 0x3c52, 0x6c2e, 0x8476, 0x240a, 0x549a,
+ 0x4852, 0x782e, 0x0c76, 0x300a, 0x609a,
+ 0x5452, 0x842e, 0x1876, 0x3c0a, 0x6c9a,
+ 0x6052, 0x0c2e, 0x2476, 0x480a, 0x789a,
+ 0x6c52, 0x182e, 0x3076, 0x540a, 0x849a,
+ 0x7852, 0x242e, 0x3c76, 0x600a, 0x0c9a,
+ 0x8454, 0x3030, 0x4878, 0x6c0c, 0x189c,
+ 0x0c54, 0x3c30, 0x5478, 0x780c, 0x249c,
+ 0x1854, 0x4830, 0x6078, 0x840c, 0x309c,
+ 0x2454, 0x5430, 0x6c78, 0x0c0c, 0x3c9c,
+ 0x3054, 0x6030, 0x7878, 0x180c, 0x489c,
+ 0x3c54, 0x6c30, 0x8478, 0x240c, 0x549c,
+ 0x4854, 0x7830, 0x0c78, 0x300c, 0x609c,
+ 0x5454, 0x8430, 0x1878, 0x3c0c, 0x6c9c,
+ 0x6054, 0x0c30, 0x2478, 0x480c, 0x789c,
+ 0x6c54, 0x1830, 0x3078, 0x540c, 0x849c,
+ 0x7854, 0x2430, 0x3c78, 0x600c, 0x0c9c,
+ 0x8456, 0x3032, 0x487a, 0x6c0e, 0x189e,
+ 0x0c56, 0x3c32, 0x547a, 0x780e, 0x249e,
+ 0x1856, 0x4832, 0x607a, 0x840e, 0x309e,
+ 0x2456, 0x5432, 0x6c7a, 0x0c0e, 0x3c9e,
+ 0x3056, 0x6032, 0x787a, 0x180e, 0x489e,
+ 0x3c56, 0x6c32, 0x847a, 0x240e, 0x549e,
+ 0x4856, 0x7832, 0x0c7a, 0x300e, 0x609e,
+ 0x5456, 0x8432, 0x187a, 0x3c0e, 0x6c9e,
+ 0x6056, 0x0c32, 0x247a, 0x480e, 0x789e,
+ 0x6c56, 0x1832, 0x307a, 0x540e, 0x849e,
+ 0x7856, 0x2432, 0x3c7a, 0x600e, 0x0c9e,
+ 0x8458, 0x3034, 0x487c, 0x6c10, 0x18a0,
+ 0x0c58, 0x3c34, 0x547c, 0x7810, 0x24a0,
+ 0x1858, 0x4834, 0x607c, 0x8410, 0x30a0,
+ 0x2458, 0x5434, 0x6c7c, 0x0c10, 0x3ca0,
+ 0x3058, 0x6034, 0x787c, 0x1810, 0x48a0,
+ 0x3c58, 0x6c34, 0x847c, 0x2410, 0x54a0,
+ 0x4858, 0x7834, 0x0c7c, 0x3010, 0x60a0,
+ 0x5458, 0x8434, 0x187c, 0x3c10, 0x6ca0,
+ 0x6058, 0x0c34, 0x247c, 0x4810, 0x78a0,
+ 0x6c58, 0x1834, 0x307c, 0x5410, 0x84a0,
+ 0x7858, 0x2434, 0x3c7c, 0x6010, 0x0ca0,
+ 0x7c48, 0x2824, 0x406c, 0x6400, 0x1090,
+ 0x0448, 0x3424, 0x4c6c, 0x7000, 0x1c90,
+ 0x1048, 0x4024, 0x586c, 0x7c00, 0x2890,
+ 0x1c48, 0x4c24, 0x646c, 0x0400, 0x3490,
+ 0x2848, 0x5824, 0x706c, 0x1000, 0x4090,
+ 0x3448, 0x6424, 0x7c6c, 0x1c00, 0x4c90,
+ 0x4048, 0x7024, 0x046c, 0x2800, 0x5890,
+ 0x4c48, 0x7c24, 0x106c, 0x3400, 0x6490,
+ 0x5848, 0x0424, 0x1c6c, 0x4000, 0x7090,
+ 0x6448, 0x1024, 0x286c, 0x4c00, 0x7c90,
+ 0x7048, 0x1c24, 0x346c, 0x5800, 0x0490,
+ 0x7c4a, 0x2826, 0x406e, 0x6402, 0x1092,
+ 0x044a, 0x3426, 0x4c6e, 0x7002, 0x1c92,
+ 0x104a, 0x4026, 0x586e, 0x7c02, 0x2892,
+ 0x1c4a, 0x4c26, 0x646e, 0x0402, 0x3492,
+ 0x284a, 0x5826, 0x706e, 0x1002, 0x4092,
+ 0x344a, 0x6426, 0x7c6e, 0x1c02, 0x4c92,
+ 0x404a, 0x7026, 0x046e, 0x2802, 0x5892,
+ 0x4c4a, 0x7c26, 0x106e, 0x3402, 0x6492,
+ 0x584a, 0x0426, 0x1c6e, 0x4002, 0x7092,
+ 0x644a, 0x1026, 0x286e, 0x4c02, 0x7c92,
+ 0x704a, 0x1c26, 0x346e, 0x5802, 0x0492,
+ 0x7c4c, 0x2828, 0x4070, 0x6404, 0x1094,
+ 0x044c, 0x3428, 0x4c70, 0x7004, 0x1c94,
+ 0x104c, 0x4028, 0x5870, 0x7c04, 0x2894,
+ 0x1c4c, 0x4c28, 0x6470, 0x0404, 0x3494,
+ 0x284c, 0x5828, 0x7070, 0x1004, 0x4094,
+ 0x285a, 0x5836, 0x707e, 0x1012, 0x40a2,
+ 0x345a, 0x6436, 0x7c7e, 0x1c12, 0x4ca2,
+ 0x405a, 0x7036, 0x047e, 0x2812, 0x58a2,
+ 0x4c5a, 0x7c36, 0x107e, 0x3412, 0x64a2,
+ 0x585a, 0x0436, 0x1c7e, 0x4012, 0x70a2,
+ 0x645a, 0x1036, 0x287e, 0x4c12, 0x7ca2,
+ 0x705a, 0x1c36, 0x347e, 0x5812, 0x04a2,
+ 0x7c5a, 0x2836, 0x407e, 0x6412, 0x10a2,
+ 0x045a, 0x3436, 0x4c7e, 0x7012, 0x1ca2,
+ 0x105a, 0x4036, 0x587e, 0x7c12, 0x28a2,
+ 0x1c5a, 0x4c36, 0x647e, 0x0412, 0x34a2,
+ 0x285c, 0x5838, 0x7080, 0x1014, 0x40a4,
+ 0x345c, 0x6438, 0x7c80, 0x1c14, 0x4ca4,
+ 0x405c, 0x7038, 0x0480, 0x2814, 0x58a4,
+ 0x4c5c, 0x7c38, 0x1080, 0x3414, 0x64a4,
+ 0x585c, 0x0438, 0x1c80, 0x4014, 0x70a4,
+ 0x645c, 0x1038, 0x2880, 0x4c14, 0x7ca4,
+ 0x705c, 0x1c38, 0x3480, 0x5814, 0x04a4,
+ 0x7c5c, 0x2838, 0x4080, 0x6414, 0x10a4,
+ 0x045c, 0x3438, 0x4c80, 0x7014, 0x1ca4,
+ 0x105c, 0x4038, 0x5880, 0x7c14, 0x28a4,
+ 0x1c5c, 0x4c38, 0x6480, 0x0414, 0x34a4,
+ 0x285e, 0x583a, 0x7082, 0x1016, 0x40a6,
+ 0x345e, 0x643a, 0x7c82, 0x1c16, 0x4ca6,
+ 0x405e, 0x703a, 0x0482, 0x2816, 0x58a6,
+ 0x4c5e, 0x7c3a, 0x1082, 0x3416, 0x64a6,
+ 0x585e, 0x043a, 0x1c82, 0x4016, 0x70a6,
+ 0x645e, 0x103a, 0x2882, 0x4c16, 0x7ca6,
+ 0x705e, 0x1c3a, 0x3482, 0x5816, 0x04a6,
+ 0x7c5e, 0x283a, 0x4082, 0x6416, 0x10a6,
+ 0x045e, 0x343a, 0x4c82, 0x7016, 0x1ca6,
+ 0x105e, 0x403a, 0x5882, 0x7c16, 0x28a6,
+ 0x1c5e, 0x4c3a, 0x6482, 0x0416, 0x34a6,
+ 0x2860, 0x583c, 0x7084, 0x1018, 0x40a8,
+ 0x3460, 0x643c, 0x7c84, 0x1c18, 0x4ca8,
+ 0x4060, 0x703c, 0x0484, 0x2818, 0x58a8,
+ 0x4c60, 0x7c3c, 0x1084, 0x3418, 0x64a8,
+ 0x5860, 0x043c, 0x1c84, 0x4018, 0x70a8,
+ 0x6460, 0x103c, 0x2884, 0x4c18, 0x7ca8,
+ 0x7060, 0x1c3c, 0x3484, 0x5818, 0x04a8,
+ 0x7c60, 0x283c, 0x4084, 0x6418, 0x10a8,
+ 0x0460, 0x343c, 0x4c84, 0x7018, 0x1ca8,
+ 0x1060, 0x403c, 0x5884, 0x7c18, 0x28a8,
+ 0x1c60, 0x4c3c, 0x6484, 0x0418, 0x34a8,
+ 0x2862, 0x583e, 0x7086, 0x101a, 0x40aa,
+ 0x3462, 0x643e, 0x7c86, 0x1c1a, 0x4caa,
+ 0x4062, 0x703e, 0x0486, 0x281a, 0x58aa,
+ 0x4c62, 0x7c3e, 0x1086, 0x341a, 0x64aa,
+ 0x5862, 0x043e, 0x1c86, 0x401a, 0x70aa,
+ 0x6462, 0x103e, 0x2886, 0x4c1a, 0x7caa,
+ 0x7062, 0x1c3e, 0x3486, 0x581a, 0x04aa,
+ 0x7c62, 0x283e, 0x4086, 0x641a, 0x10aa,
+ 0x0462, 0x343e, 0x4c86, 0x701a, 0x1caa,
+ 0x1062, 0x403e, 0x5886, 0x7c1a, 0x28aa,
+ 0x1c62, 0x4c3e, 0x6486, 0x041a, 0x34aa,
+ 0x2864, 0x5840, 0x7088, 0x101c, 0x40ac,
+ 0x3464, 0x6440, 0x7c88, 0x1c1c, 0x4cac,
+ 0x4064, 0x7040, 0x0488, 0x281c, 0x58ac,
+ 0x4c64, 0x7c40, 0x1088, 0x341c, 0x64ac,
+ 0x5864, 0x0440, 0x1c88, 0x401c, 0x70ac,
+ 0x6464, 0x1040, 0x2888, 0x4c1c, 0x7cac,
+ 0x7064, 0x1c40, 0x3488, 0x581c, 0x04ac,
+ 0x7c64, 0x2840, 0x4088, 0x641c, 0x10ac,
+ 0x0464, 0x3440, 0x4c88, 0x701c, 0x1cac,
+ 0x1064, 0x4040, 0x5888, 0x7c1c, 0x28ac,
+ 0x1c64, 0x4c40, 0x6488, 0x041c, 0x34ac,
+ 0x2866, 0x5842, 0x708a, 0x101e, 0x40ae,
+ 0x3466, 0x6442, 0x7c8a, 0x1c1e, 0x4cae,
+ 0x4066, 0x7042, 0x048a, 0x281e, 0x58ae,
+ 0x4c66, 0x7c42, 0x108a, 0x341e, 0x64ae,
+ 0x5866, 0x0442, 0x1c8a, 0x401e, 0x70ae,
+ 0x6466, 0x1042, 0x288a, 0x4c1e, 0x7cae,
+ 0x7066, 0x1c42, 0x348a, 0x581e, 0x04ae,
+ 0x7c66, 0x2842, 0x408a, 0x641e, 0x10ae,
+ 0x0466, 0x3442, 0x4c8a, 0x701e, 0x1cae,
+ 0x1066, 0x4042, 0x588a, 0x7c1e, 0x28ae,
+ 0x1c66, 0x4c42, 0x648a, 0x041e, 0x34ae,
+ 0x2868, 0x5844, 0x708c, 0x1020, 0x40b0,
+ 0x3468, 0x6444, 0x7c8c, 0x1c20, 0x4cb0,
+ 0x4068, 0x7044, 0x048c, 0x2820, 0x58b0,
+ 0x4c68, 0x7c44, 0x108c, 0x3420, 0x64b0,
+ 0x5868, 0x0444, 0x1c8c, 0x4020, 0x70b0,
+ 0x6468, 0x1044, 0x288c, 0x4c20, 0x7cb0,
+ 0x7068, 0x1c44, 0x348c, 0x5820, 0x04b0,
+ 0x7c68, 0x2844, 0x408c, 0x6420, 0x10b0,
+ 0x0468, 0x3444, 0x4c8c, 0x7020, 0x1cb0,
+ 0x1068, 0x4044, 0x588c, 0x7c20, 0x28b0,
+ 0x1c68, 0x4c44, 0x648c, 0x0420, 0x34b0,
+ 0x286a, 0x5846, 0x708e, 0x1022, 0x40b2,
+ 0x346a, 0x6446, 0x7c8e, 0x1c22, 0x4cb2,
+ 0x406a, 0x7046, 0x048e, 0x2822, 0x58b2,
+ 0x4c6a, 0x7c46, 0x108e, 0x3422, 0x64b2,
+ 0x586a, 0x0446, 0x1c8e, 0x4022, 0x70b2,
+ 0x646a, 0x1046, 0x288e, 0x4c22, 0x7cb2,
+ 0x706a, 0x1c46, 0x348e, 0x5822, 0x04b2,
+ 0x7c6a, 0x2846, 0x408e, 0x6422, 0x10b2,
+ 0x046a, 0x3446, 0x4c8e, 0x7022, 0x1cb2,
+ 0x106a, 0x4046, 0x588e, 0x7c22, 0x28b2,
+ 0x1c6a, 0x4c46, 0x648e, 0x0422, 0x34b2,
+ 0x2c5a, 0x5c36, 0x747e, 0x1412, 0x44a2,
+ 0x385a, 0x6836, 0x807e, 0x2012, 0x50a2,
+ 0x445a, 0x7436, 0x087e, 0x2c12, 0x5ca2,
+ 0x505a, 0x8036, 0x147e, 0x3812, 0x68a2,
+ 0x5c5a, 0x0836, 0x207e, 0x4412, 0x74a2,
+ 0x685a, 0x1436, 0x2c7e, 0x5012, 0x80a2,
+ 0x745a, 0x2036, 0x387e, 0x5c12, 0x08a2,
+ 0x805a, 0x2c36, 0x447e, 0x6812, 0x14a2,
+ 0x085a, 0x3836, 0x507e, 0x7412, 0x20a2,
+ 0x145a, 0x4436, 0x5c7e, 0x8012, 0x2ca2,
+ 0x205a, 0x5036, 0x687e, 0x0812, 0x38a2,
+ 0x2c5c, 0x5c38, 0x7480, 0x1414, 0x44a4,
+ 0x385c, 0x6838, 0x8080, 0x2014, 0x50a4,
+ 0x445c, 0x7438, 0x0880, 0x2c14, 0x5ca4,
+ 0x505c, 0x8038, 0x1480, 0x3814, 0x68a4,
+ 0x5c5c, 0x0838, 0x2080, 0x4414, 0x74a4,
+ 0x685c, 0x1438, 0x2c80, 0x5014, 0x80a4,
+ 0x745c, 0x2038, 0x3880, 0x5c14, 0x08a4,
+ 0x805c, 0x2c38, 0x4480, 0x6814, 0x14a4,
+ 0x085c, 0x3838, 0x5080, 0x7414, 0x20a4,
+ 0x145c, 0x4438, 0x5c80, 0x8014, 0x2ca4,
+ 0x205c, 0x5038, 0x6880, 0x0814, 0x38a4,
+ 0x2c5e, 0x5c3a, 0x7482, 0x1416, 0x44a6,
+ 0x385e, 0x683a, 0x8082, 0x2016, 0x50a6,
+ 0x445e, 0x743a, 0x0882, 0x2c16, 0x5ca6,
+ 0x505e, 0x803a, 0x1482, 0x3816, 0x68a6,
+ 0x5c5e, 0x083a, 0x2082, 0x4416, 0x74a6,
+ 0x685e, 0x143a, 0x2c82, 0x5016, 0x80a6,
+ 0x745e, 0x203a, 0x3882, 0x5c16, 0x08a6,
+ 0x805e, 0x2c3a, 0x4482, 0x6816, 0x14a6,
+ 0x085e, 0x383a, 0x5082, 0x7416, 0x20a6,
+ 0x145e, 0x443a, 0x5c82, 0x8016, 0x2ca6,
+ 0x205e, 0x503a, 0x6882, 0x0816, 0x38a6,
+ 0x2c60, 0x5c3c, 0x7484, 0x1418, 0x44a8,
+ 0x3860, 0x683c, 0x8084, 0x2018, 0x50a8,
+ 0x4460, 0x743c, 0x0884, 0x2c18, 0x5ca8,
+ 0x5060, 0x803c, 0x1484, 0x3818, 0x68a8,
+ 0x5c60, 0x083c, 0x2084, 0x4418, 0x74a8,
+ 0x6860, 0x143c, 0x2c84, 0x5018, 0x80a8,
+ 0x7460, 0x203c, 0x3884, 0x5c18, 0x08a8,
+ 0x8060, 0x2c3c, 0x4484, 0x6818, 0x14a8,
+ 0x0860, 0x383c, 0x5084, 0x7418, 0x20a8,
+ 0x1460, 0x443c, 0x5c84, 0x8018, 0x2ca8,
+ 0x2060, 0x503c, 0x6884, 0x0818, 0x38a8,
+ 0x2c62, 0x5c3e, 0x7486, 0x141a, 0x44aa,
+ 0x3862, 0x683e, 0x8086, 0x201a, 0x50aa,
+ 0x4462, 0x743e, 0x0886, 0x2c1a, 0x5caa,
+ 0x5062, 0x803e, 0x1486, 0x381a, 0x68aa,
+ 0x5c62, 0x083e, 0x2086, 0x441a, 0x74aa,
+ 0x6862, 0x143e, 0x2c86, 0x501a, 0x80aa,
+ 0x7462, 0x203e, 0x3886, 0x5c1a, 0x08aa,
+ 0x8062, 0x2c3e, 0x4486, 0x681a, 0x14aa,
+ 0x0862, 0x383e, 0x5086, 0x741a, 0x20aa,
+ 0x1462, 0x443e, 0x5c86, 0x801a, 0x2caa,
+ 0x2062, 0x503e, 0x6886, 0x081a, 0x38aa,
+ 0x2c64, 0x5c40, 0x7488, 0x141c, 0x44ac,
+ 0x3864, 0x6840, 0x8088, 0x201c, 0x50ac,
+ 0x4464, 0x7440, 0x0888, 0x2c1c, 0x5cac,
+ 0x5064, 0x8040, 0x1488, 0x381c, 0x68ac,
+ 0x5c64, 0x0840, 0x2088, 0x441c, 0x74ac,
+ 0x6864, 0x1440, 0x2c88, 0x501c, 0x80ac,
+ 0x7464, 0x2040, 0x3888, 0x5c1c, 0x08ac,
+ 0x8064, 0x2c40, 0x4488, 0x681c, 0x14ac,
+ 0x0864, 0x3840, 0x5088, 0x741c, 0x20ac,
+ 0x1464, 0x4440, 0x5c88, 0x801c, 0x2cac,
+ 0x2064, 0x5040, 0x6888, 0x081c, 0x38ac,
+ 0x2c66, 0x5c42, 0x748a, 0x141e, 0x44ae,
+ 0x3866, 0x6842, 0x808a, 0x201e, 0x50ae,
+ 0x4466, 0x7442, 0x088a, 0x2c1e, 0x5cae,
+ 0x5066, 0x8042, 0x148a, 0x381e, 0x68ae,
+ 0x5c66, 0x0842, 0x208a, 0x441e, 0x74ae,
+ 0x6866, 0x1442, 0x2c8a, 0x501e, 0x80ae,
+ 0x7466, 0x2042, 0x388a, 0x5c1e, 0x08ae,
+ 0x8066, 0x2c42, 0x448a, 0x681e, 0x14ae,
+ 0x0866, 0x3842, 0x508a, 0x741e, 0x20ae,
+ 0x1466, 0x4442, 0x5c8a, 0x801e, 0x2cae,
+ 0x2066, 0x5042, 0x688a, 0x081e, 0x38ae,
+ 0x2c68, 0x5c44, 0x748c, 0x1420, 0x44b0,
+ 0x3868, 0x6844, 0x808c, 0x2020, 0x50b0,
+ 0x4468, 0x7444, 0x088c, 0x2c20, 0x5cb0,
+ 0x5068, 0x8044, 0x148c, 0x3820, 0x68b0,
+ 0x5c68, 0x0844, 0x208c, 0x4420, 0x74b0,
+ 0x6868, 0x1444, 0x2c8c, 0x5020, 0x80b0,
+ 0x7468, 0x2044, 0x388c, 0x5c20, 0x08b0,
+ 0x8068, 0x2c44, 0x448c, 0x6820, 0x14b0,
+ 0x0868, 0x3844, 0x508c, 0x7420, 0x20b0,
+ 0x1468, 0x4444, 0x5c8c, 0x8020, 0x2cb0,
+ 0x2068, 0x5044, 0x688c, 0x0820, 0x38b0,
+ 0x2c6a, 0x5c46, 0x748e, 0x1422, 0x44b2,
+ 0x386a, 0x6846, 0x808e, 0x2022, 0x50b2,
+ 0x446a, 0x7446, 0x088e, 0x2c22, 0x5cb2,
+ 0x506a, 0x8046, 0x148e, 0x3822, 0x68b2,
+ 0x5c6a, 0x0846, 0x208e, 0x4422, 0x74b2,
+ 0x686a, 0x1446, 0x2c8e, 0x5022, 0x80b2,
+ 0x746a, 0x2046, 0x388e, 0x5c22, 0x08b2,
+ 0x806a, 0x2c46, 0x448e, 0x6822, 0x14b2,
+ 0x086a, 0x3846, 0x508e, 0x7422, 0x20b2,
+ 0x146a, 0x4446, 0x5c8e, 0x8022, 0x2cb2,
+ 0x206a, 0x5046, 0x688e, 0x0822, 0x38b2,
+ 0x305a, 0x6036, 0x787e, 0x1812, 0x48a2,
+ 0x3c5a, 0x6c36, 0x847e, 0x2412, 0x54a2,
+ 0x485a, 0x7836, 0x0c7e, 0x3012, 0x60a2,
+ 0x545a, 0x8436, 0x187e, 0x3c12, 0x6ca2,
+ 0x605a, 0x0c36, 0x247e, 0x4812, 0x78a2,
+ 0x6c5a, 0x1836, 0x307e, 0x5412, 0x84a2,
+ 0x785a, 0x2436, 0x3c7e, 0x6012, 0x0ca2,
+ 0x845a, 0x3036, 0x487e, 0x6c12, 0x18a2,
+ 0x0c5a, 0x3c36, 0x547e, 0x7812, 0x24a2,
+ 0x185a, 0x4836, 0x607e, 0x8412, 0x30a2,
+ 0x245a, 0x5436, 0x6c7e, 0x0c12, 0x3ca2,
+ 0x305c, 0x6038, 0x7880, 0x1814, 0x48a4,
+ 0x3c5c, 0x6c38, 0x8480, 0x2414, 0x54a4,
+ 0x485c, 0x7838, 0x0c80, 0x3014, 0x60a4,
+ 0x545c, 0x8438, 0x1880, 0x3c14, 0x6ca4,
+ 0x605c, 0x0c38, 0x2480, 0x4814, 0x78a4,
+ 0x6c5c, 0x1838, 0x3080, 0x5414, 0x84a4,
+ 0x785c, 0x2438, 0x3c80, 0x6014, 0x0ca4,
+ 0x845c, 0x3038, 0x4880, 0x6c14, 0x18a4,
+ 0x0c5c, 0x3c38, 0x5480, 0x7814, 0x24a4,
+ 0x185c, 0x4838, 0x6080, 0x8414, 0x30a4,
+ 0x245c, 0x5438, 0x6c80, 0x0c14, 0x3ca4,
+ 0x305e, 0x603a, 0x7882, 0x1816, 0x48a6,
+ 0x3c5e, 0x6c3a, 0x8482, 0x2416, 0x54a6,
+ 0x485e, 0x783a, 0x0c82, 0x3016, 0x60a6,
+ 0x545e, 0x843a, 0x1882, 0x3c16, 0x6ca6,
+ 0x605e, 0x0c3a, 0x2482, 0x4816, 0x78a6,
+ 0x6c5e, 0x183a, 0x3082, 0x5416, 0x84a6,
+ 0x785e, 0x243a, 0x3c82, 0x6016, 0x0ca6,
+ 0x845e, 0x303a, 0x4882, 0x6c16, 0x18a6,
+ 0x0c5e, 0x3c3a, 0x5482, 0x7816, 0x24a6,
+ 0x185e, 0x483a, 0x6082, 0x8416, 0x30a6,
+ 0x245e, 0x543a, 0x6c82, 0x0c16, 0x3ca6,
+ 0x3060, 0x603c, 0x7884, 0x1818, 0x48a8,
+ 0x3c60, 0x6c3c, 0x8484, 0x2418, 0x54a8,
+ 0x4860, 0x783c, 0x0c84, 0x3018, 0x60a8,
+ 0x5460, 0x843c, 0x1884, 0x3c18, 0x6ca8,
+ 0x6060, 0x0c3c, 0x2484, 0x4818, 0x78a8,
+ 0x6c60, 0x183c, 0x3084, 0x5418, 0x84a8,
+ 0x7860, 0x243c, 0x3c84, 0x6018, 0x0ca8,
+ 0x8460, 0x303c, 0x4884, 0x6c18, 0x18a8,
+ 0x0c60, 0x3c3c, 0x5484, 0x7818, 0x24a8,
+ 0x1860, 0x483c, 0x6084, 0x8418, 0x30a8,
+ 0x2460, 0x543c, 0x6c84, 0x0c18, 0x3ca8,
+ 0x3062, 0x603e, 0x7886, 0x181a, 0x48aa,
+ 0x3c62, 0x6c3e, 0x8486, 0x241a, 0x54aa,
+ 0x4862, 0x783e, 0x0c86, 0x301a, 0x60aa,
+ 0x5462, 0x843e, 0x1886, 0x3c1a, 0x6caa,
+ 0x6062, 0x0c3e, 0x2486, 0x481a, 0x78aa,
+ 0x6c62, 0x183e, 0x3086, 0x541a, 0x84aa,
+ 0x7862, 0x243e, 0x3c86, 0x601a, 0x0caa,
+ 0x8462, 0x303e, 0x4886, 0x6c1a, 0x18aa,
+ 0x0c62, 0x3c3e, 0x5486, 0x781a, 0x24aa,
+ 0x1862, 0x483e, 0x6086, 0x841a, 0x30aa,
+ 0x2462, 0x543e, 0x6c86, 0x0c1a, 0x3caa,
+ 0x3064, 0x6040, 0x7888, 0x181c, 0x48ac,
+ 0x3c64, 0x6c40, 0x8488, 0x241c, 0x54ac,
+ 0x4864, 0x7840, 0x0c88, 0x301c, 0x60ac,
+ 0x5464, 0x8440, 0x1888, 0x3c1c, 0x6cac,
+ 0x6064, 0x0c40, 0x2488, 0x481c, 0x78ac,
+ 0x6c64, 0x1840, 0x3088, 0x541c, 0x84ac,
+ 0x7864, 0x2440, 0x3c88, 0x601c, 0x0cac,
+ 0x8464, 0x3040, 0x4888, 0x6c1c, 0x18ac,
+ 0x0c64, 0x3c40, 0x5488, 0x781c, 0x24ac,
+ 0x1864, 0x4840, 0x6088, 0x841c, 0x30ac,
+ 0x2464, 0x5440, 0x6c88, 0x0c1c, 0x3cac,
+ 0x3066, 0x6042, 0x788a, 0x181e, 0x48ae,
+ 0x3c66, 0x6c42, 0x848a, 0x241e, 0x54ae,
+ 0x4866, 0x7842, 0x0c8a, 0x301e, 0x60ae,
+ 0x5466, 0x8442, 0x188a, 0x3c1e, 0x6cae,
+ 0x6066, 0x0c42, 0x248a, 0x481e, 0x78ae,
+ 0x6c66, 0x1842, 0x308a, 0x541e, 0x84ae,
+ 0x7866, 0x2442, 0x3c8a, 0x601e, 0x0cae,
+ 0x8466, 0x3042, 0x488a, 0x6c1e, 0x18ae,
+ 0x0c66, 0x3c42, 0x548a, 0x781e, 0x24ae,
+ 0x1866, 0x4842, 0x608a, 0x841e, 0x30ae,
+ 0x2466, 0x5442, 0x6c8a, 0x0c1e, 0x3cae,
+ 0x3068, 0x6044, 0x788c, 0x1820, 0x48b0,
+ 0x3c68, 0x6c44, 0x848c, 0x2420, 0x54b0,
+ 0x4868, 0x7844, 0x0c8c, 0x3020, 0x60b0,
+ 0x5468, 0x8444, 0x188c, 0x3c20, 0x6cb0,
+ 0x6068, 0x0c44, 0x248c, 0x4820, 0x78b0,
+ 0x6c68, 0x1844, 0x308c, 0x5420, 0x84b0,
+ 0x7868, 0x2444, 0x3c8c, 0x6020, 0x0cb0,
+ 0x8468, 0x3044, 0x488c, 0x6c20, 0x18b0,
+ 0x0c68, 0x3c44, 0x548c, 0x7820, 0x24b0,
+ 0x1868, 0x4844, 0x608c, 0x8420, 0x30b0,
+ 0x2468, 0x5444, 0x6c8c, 0x0c20, 0x3cb0,
+ 0x306a, 0x6046, 0x788e, 0x1822, 0x48b2,
+ 0x3c6a, 0x6c46, 0x848e, 0x2422, 0x54b2,
+ 0x486a, 0x7846, 0x0c8e, 0x3022, 0x60b2,
+ 0x546a, 0x8446, 0x188e, 0x3c22, 0x6cb2,
+ 0x606a, 0x0c46, 0x248e, 0x4822, 0x78b2,
+ 0x6c6a, 0x1846, 0x308e, 0x5422, 0x84b2,
+ 0x786a, 0x2446, 0x3c8e, 0x6022, 0x0cb2,
+ 0x846a, 0x3046, 0x488e, 0x6c22, 0x18b2,
+ 0x0c6a, 0x3c46, 0x548e, 0x7822, 0x24b2,
+ 0x186a, 0x4846, 0x608e, 0x8422, 0x30b2,
+ 0x246a, 0x5446, 0x6c8e, 0x0c22, 0x3cb2,
+ 0x285a, 0x5836, 0x707e, 0x1012, 0x40a2,
+ 0x345a, 0x6436, 0x7c7e, 0x1c12, 0x4ca2,
+ 0x405a, 0x7036, 0x047e, 0x2812, 0x58a2,
+ 0x4c5a, 0x7c36, 0x107e, 0x3412, 0x64a2,
+ 0x585a, 0x0436, 0x1c7e, 0x4012, 0x70a2,
+ 0x645a, 0x1036, 0x287e, 0x4c12, 0x7ca2,
+ 0x705a, 0x1c36, 0x347e, 0x5812, 0x04a2,
+ 0x7c5a, 0x2836, 0x407e, 0x6412, 0x10a2,
+ 0x045a, 0x3436, 0x4c7e, 0x7012, 0x1ca2,
+ 0x105a, 0x4036, 0x587e, 0x7c12, 0x28a2,
+ 0x1c5a, 0x4c36, 0x647e, 0x0412, 0x34a2,
+ 0x285c, 0x5838, 0x7080, 0x1014, 0x40a4,
+ 0x345c, 0x6438, 0x7c80, 0x1c14, 0x4ca4,
+ 0x405c, 0x7038, 0x0480, 0x2814, 0x58a4,
+ 0x4c5c, 0x7c38, 0x1080, 0x3414, 0x64a4,
+ 0x585c, 0x0438, 0x1c80, 0x4014, 0x70a4,
+ 0x645c, 0x1038, 0x2880, 0x4c14, 0x7ca4,
+ 0x705c, 0x1c38, 0x3480, 0x5814, 0x04a4,
+ 0x7c5c, 0x2838, 0x4080, 0x6414, 0x10a4,
+ 0x045c, 0x3438, 0x4c80, 0x7014, 0x1ca4,
+ 0x105c, 0x4038, 0x5880, 0x7c14, 0x28a4,
+ 0x1c5c, 0x4c38, 0x6480, 0x0414, 0x34a4,
+ 0x285e, 0x583a, 0x7082, 0x1016, 0x40a6,
+ 0x345e, 0x643a, 0x7c82, 0x1c16, 0x4ca6,
+ 0x405e, 0x703a, 0x0482, 0x2816, 0x58a6,
+ 0x4c5e, 0x7c3a, 0x1082, 0x3416, 0x64a6,
+ 0x585e, 0x043a, 0x1c82, 0x4016, 0x70a6,
+};
+
+static const uint16_t dv_place_720p60[2*10*27*5] = {
+ 0x1230, 0x3618, 0x4848, 0x0000, 0x2460,
+ 0x2430, 0x4818, 0x0048, 0x1200, 0x3660,
+ 0x3630, 0x0018, 0x1248, 0x2400, 0x4860,
+ 0x4830, 0x1218, 0x2448, 0x3600, 0x0060,
+ 0x0030, 0x2418, 0x3648, 0x4800, 0x1260,
+ 0x1232, 0x361a, 0x484a, 0x0002, 0x2462,
+ 0x2432, 0x481a, 0x004a, 0x1202, 0x3662,
+ 0x3632, 0x001a, 0x124a, 0x2402, 0x4862,
+ 0x4832, 0x121a, 0x244a, 0x3602, 0x0062,
+ 0x0032, 0x241a, 0x364a, 0x4802, 0x1262,
+ 0x1234, 0x361c, 0x484c, 0x0004, 0x2464,
+ 0x2434, 0x481c, 0x004c, 0x1204, 0x3664,
+ 0x3634, 0x001c, 0x124c, 0x2404, 0x4864,
+ 0x4834, 0x121c, 0x244c, 0x3604, 0x0064,
+ 0x0034, 0x241c, 0x364c, 0x4804, 0x1264,
+ 0x1236, 0x361e, 0x484e, 0x0006, 0x2466,
+ 0x2436, 0x481e, 0x004e, 0x1206, 0x3666,
+ 0x3636, 0x001e, 0x124e, 0x2406, 0x4866,
+ 0x4836, 0x121e, 0x244e, 0x3606, 0x0066,
+ 0x0036, 0x241e, 0x364e, 0x4806, 0x1266,
+ 0x1238, 0x3620, 0x4850, 0x0008, 0x2468,
+ 0x2438, 0x4820, 0x0050, 0x1208, 0x3668,
+ 0x3638, 0x0020, 0x1250, 0x2408, 0x4868,
+ 0x4838, 0x1220, 0x2450, 0x3608, 0x0068,
+ 0x0038, 0x2420, 0x3650, 0x4808, 0x1268,
+ 0x123a, 0x3622, 0x4852, 0x000a, 0x246a,
+ 0x243a, 0x4822, 0x0052, 0x120a, 0x366a,
+ 0x363a, 0x0022, 0x1252, 0x240a, 0x486a,
+ 0x483a, 0x1222, 0x2452, 0x360a, 0x006a,
+ 0x003a, 0x2422, 0x3652, 0x480a, 0x126a,
+ 0x1430, 0x3818, 0x4a48, 0x0200, 0x2660,
+ 0x2630, 0x4a18, 0x0248, 0x1400, 0x3860,
+ 0x3830, 0x0218, 0x1448, 0x2600, 0x4a60,
+ 0x4a30, 0x1418, 0x2648, 0x3800, 0x0260,
+ 0x0230, 0x2618, 0x3848, 0x4a00, 0x1460,
+ 0x1432, 0x381a, 0x4a4a, 0x0202, 0x2662,
+ 0x2632, 0x4a1a, 0x024a, 0x1402, 0x3862,
+ 0x3832, 0x021a, 0x144a, 0x2602, 0x4a62,
+ 0x4a32, 0x141a, 0x264a, 0x3802, 0x0262,
+ 0x0232, 0x261a, 0x384a, 0x4a02, 0x1462,
+ 0x1434, 0x381c, 0x4a4c, 0x0204, 0x2664,
+ 0x2634, 0x4a1c, 0x024c, 0x1404, 0x3864,
+ 0x3834, 0x021c, 0x144c, 0x2604, 0x4a64,
+ 0x4a34, 0x141c, 0x264c, 0x3804, 0x0264,
+ 0x0234, 0x261c, 0x384c, 0x4a04, 0x1464,
+ 0x1436, 0x381e, 0x4a4e, 0x0206, 0x2666,
+ 0x2636, 0x4a1e, 0x024e, 0x1406, 0x3866,
+ 0x3836, 0x021e, 0x144e, 0x2606, 0x4a66,
+ 0x4a36, 0x141e, 0x264e, 0x3806, 0x0266,
+ 0x0236, 0x261e, 0x384e, 0x4a06, 0x1466,
+ 0x1438, 0x3820, 0x4a50, 0x0208, 0x2668,
+ 0x2638, 0x4a20, 0x0250, 0x1408, 0x3868,
+ 0x3838, 0x0220, 0x1450, 0x2608, 0x4a68,
+ 0x4a38, 0x1420, 0x2650, 0x3808, 0x0268,
+ 0x0238, 0x2620, 0x3850, 0x4a08, 0x1468,
+ 0x143a, 0x3822, 0x4a52, 0x020a, 0x266a,
+ 0x263a, 0x4a22, 0x0252, 0x140a, 0x386a,
+ 0x383a, 0x0222, 0x1452, 0x260a, 0x4a6a,
+ 0x4a3a, 0x1422, 0x2652, 0x380a, 0x026a,
+ 0x023a, 0x2622, 0x3852, 0x4a0a, 0x146a,
+ 0x1630, 0x3a18, 0x4c48, 0x0400, 0x2860,
+ 0x2830, 0x4c18, 0x0448, 0x1600, 0x3a60,
+ 0x3a30, 0x0418, 0x1648, 0x2800, 0x4c60,
+ 0x4c30, 0x1618, 0x2848, 0x3a00, 0x0460,
+ 0x0430, 0x2818, 0x3a48, 0x4c00, 0x1660,
+ 0x1632, 0x3a1a, 0x4c4a, 0x0402, 0x2862,
+ 0x2832, 0x4c1a, 0x044a, 0x1602, 0x3a62,
+ 0x3a32, 0x041a, 0x164a, 0x2802, 0x4c62,
+ 0x4c32, 0x161a, 0x284a, 0x3a02, 0x0462,
+ 0x0432, 0x281a, 0x3a4a, 0x4c02, 0x1662,
+ 0x1634, 0x3a1c, 0x4c4c, 0x0404, 0x2864,
+ 0x2834, 0x4c1c, 0x044c, 0x1604, 0x3a64,
+ 0x3a34, 0x041c, 0x164c, 0x2804, 0x4c64,
+ 0x4c34, 0x161c, 0x284c, 0x3a04, 0x0464,
+ 0x0434, 0x281c, 0x3a4c, 0x4c04, 0x1664,
+ 0x1636, 0x3a1e, 0x4c4e, 0x0406, 0x2866,
+ 0x2836, 0x4c1e, 0x044e, 0x1606, 0x3a66,
+ 0x3a36, 0x041e, 0x164e, 0x2806, 0x4c66,
+ 0x4c36, 0x161e, 0x284e, 0x3a06, 0x0466,
+ 0x0436, 0x281e, 0x3a4e, 0x4c06, 0x1666,
+ 0x1638, 0x3a20, 0x4c50, 0x0408, 0x2868,
+ 0x2838, 0x4c20, 0x0450, 0x1608, 0x3a68,
+ 0x3a38, 0x0420, 0x1650, 0x2808, 0x4c68,
+ 0x4c38, 0x1620, 0x2850, 0x3a08, 0x0468,
+ 0x0438, 0x2820, 0x3a50, 0x4c08, 0x1668,
+ 0x163a, 0x3a22, 0x4c52, 0x040a, 0x286a,
+ 0x283a, 0x4c22, 0x0452, 0x160a, 0x3a6a,
+ 0x3a3a, 0x0422, 0x1652, 0x280a, 0x4c6a,
+ 0x4c3a, 0x1622, 0x2852, 0x3a0a, 0x046a,
+ 0x043a, 0x2822, 0x3a52, 0x4c0a, 0x166a,
+ 0x1830, 0x3c18, 0x4e48, 0x0600, 0x2a60,
+ 0x2a30, 0x4e18, 0x0648, 0x1800, 0x3c60,
+ 0x3c30, 0x0618, 0x1848, 0x2a00, 0x4e60,
+ 0x4e30, 0x1818, 0x2a48, 0x3c00, 0x0660,
+ 0x0630, 0x2a18, 0x3c48, 0x4e00, 0x1860,
+ 0x1832, 0x3c1a, 0x4e4a, 0x0602, 0x2a62,
+ 0x2a32, 0x4e1a, 0x064a, 0x1802, 0x3c62,
+ 0x3c32, 0x061a, 0x184a, 0x2a02, 0x4e62,
+ 0x4e32, 0x181a, 0x2a4a, 0x3c02, 0x0662,
+ 0x0632, 0x2a1a, 0x3c4a, 0x4e02, 0x1862,
+ 0x1834, 0x3c1c, 0x4e4c, 0x0604, 0x2a64,
+ 0x2a34, 0x4e1c, 0x064c, 0x1804, 0x3c64,
+ 0x3c34, 0x061c, 0x184c, 0x2a04, 0x4e64,
+ 0x4e34, 0x181c, 0x2a4c, 0x3c04, 0x0664,
+ 0x0634, 0x2a1c, 0x3c4c, 0x4e04, 0x1864,
+ 0x1836, 0x3c1e, 0x4e4e, 0x0606, 0x2a66,
+ 0x2a36, 0x4e1e, 0x064e, 0x1806, 0x3c66,
+ 0x3c36, 0x061e, 0x184e, 0x2a06, 0x4e66,
+ 0x4e36, 0x181e, 0x2a4e, 0x3c06, 0x0666,
+ 0x0636, 0x2a1e, 0x3c4e, 0x4e06, 0x1866,
+ 0x1838, 0x3c20, 0x4e50, 0x0608, 0x2a68,
+ 0x2a38, 0x4e20, 0x0650, 0x1808, 0x3c68,
+ 0x3c38, 0x0620, 0x1850, 0x2a08, 0x4e68,
+ 0x4e38, 0x1820, 0x2a50, 0x3c08, 0x0668,
+ 0x0638, 0x2a20, 0x3c50, 0x4e08, 0x1868,
+ 0x183a, 0x3c22, 0x4e52, 0x060a, 0x2a6a,
+ 0x2a3a, 0x4e22, 0x0652, 0x180a, 0x3c6a,
+ 0x3c3a, 0x0622, 0x1852, 0x2a0a, 0x4e6a,
+ 0x4e3a, 0x1822, 0x2a52, 0x3c0a, 0x066a,
+ 0x063a, 0x2a22, 0x3c52, 0x4e0a, 0x186a,
+ 0x1a30, 0x3e18, 0x5048, 0x0800, 0x2c60,
+ 0x2c30, 0x5018, 0x0848, 0x1a00, 0x3e60,
+ 0x3e30, 0x0818, 0x1a48, 0x2c00, 0x5060,
+ 0x5030, 0x1a18, 0x2c48, 0x3e00, 0x0860,
+ 0x0830, 0x2c18, 0x3e48, 0x5000, 0x1a60,
+ 0x1a32, 0x3e1a, 0x504a, 0x0802, 0x2c62,
+ 0x2c32, 0x501a, 0x084a, 0x1a02, 0x3e62,
+ 0x3e32, 0x081a, 0x1a4a, 0x2c02, 0x5062,
+ 0x5032, 0x1a1a, 0x2c4a, 0x3e02, 0x0862,
+ 0x0832, 0x2c1a, 0x3e4a, 0x5002, 0x1a62,
+ 0x1a34, 0x3e1c, 0x504c, 0x0804, 0x2c64,
+ 0x2c34, 0x501c, 0x084c, 0x1a04, 0x3e64,
+ 0x3e34, 0x081c, 0x1a4c, 0x2c04, 0x5064,
+ 0x5034, 0x1a1c, 0x2c4c, 0x3e04, 0x0864,
+ 0x0834, 0x2c1c, 0x3e4c, 0x5004, 0x1a64,
+ 0x1a36, 0x3e1e, 0x504e, 0x0806, 0x2c66,
+ 0x2c36, 0x501e, 0x084e, 0x1a06, 0x3e66,
+ 0x3e36, 0x081e, 0x1a4e, 0x2c06, 0x5066,
+ 0x5036, 0x1a1e, 0x2c4e, 0x3e06, 0x0866,
+ 0x0836, 0x2c1e, 0x3e4e, 0x5006, 0x1a66,
+ 0x1a38, 0x3e20, 0x5050, 0x0808, 0x2c68,
+ 0x2c38, 0x5020, 0x0850, 0x1a08, 0x3e68,
+ 0x3e38, 0x0820, 0x1a50, 0x2c08, 0x5068,
+ 0x5038, 0x1a20, 0x2c50, 0x3e08, 0x0868,
+ 0x0838, 0x2c20, 0x3e50, 0x5008, 0x1a68,
+ 0x1a3a, 0x3e22, 0x5052, 0x080a, 0x2c6a,
+ 0x2c3a, 0x5022, 0x0852, 0x1a0a, 0x3e6a,
+ 0x3e3a, 0x0822, 0x1a52, 0x2c0a, 0x506a,
+ 0x503a, 0x1a22, 0x2c52, 0x3e0a, 0x086a,
+ 0x083a, 0x2c22, 0x3e52, 0x500a, 0x1a6a,
+ 0x1c30, 0x4018, 0x5248, 0x0a00, 0x2e60,
+ 0x2e30, 0x5218, 0x0a48, 0x1c00, 0x4060,
+ 0x4030, 0x0a18, 0x1c48, 0x2e00, 0x5260,
+ 0x5230, 0x1c18, 0x2e48, 0x4000, 0x0a60,
+ 0x0a30, 0x2e18, 0x4048, 0x5200, 0x1c60,
+ 0x1c32, 0x401a, 0x524a, 0x0a02, 0x2e62,
+ 0x2e32, 0x521a, 0x0a4a, 0x1c02, 0x4062,
+ 0x4032, 0x0a1a, 0x1c4a, 0x2e02, 0x5262,
+ 0x5232, 0x1c1a, 0x2e4a, 0x4002, 0x0a62,
+ 0x0a32, 0x2e1a, 0x404a, 0x5202, 0x1c62,
+ 0x1c34, 0x401c, 0x524c, 0x0a04, 0x2e64,
+ 0x2e34, 0x521c, 0x0a4c, 0x1c04, 0x4064,
+ 0x4034, 0x0a1c, 0x1c4c, 0x2e04, 0x5264,
+ 0x5234, 0x1c1c, 0x2e4c, 0x4004, 0x0a64,
+ 0x0a34, 0x2e1c, 0x404c, 0x5204, 0x1c64,
+ 0x1c36, 0x401e, 0x524e, 0x0a06, 0x2e66,
+ 0x2e36, 0x521e, 0x0a4e, 0x1c06, 0x4066,
+ 0x4036, 0x0a1e, 0x1c4e, 0x2e06, 0x5266,
+ 0x5236, 0x1c1e, 0x2e4e, 0x4006, 0x0a66,
+ 0x0a36, 0x2e1e, 0x404e, 0x5206, 0x1c66,
+ 0x1c38, 0x4020, 0x5250, 0x0a08, 0x2e68,
+ 0x2e38, 0x5220, 0x0a50, 0x1c08, 0x4068,
+ 0x4038, 0x0a20, 0x1c50, 0x2e08, 0x5268,
+ 0x5238, 0x1c20, 0x2e50, 0x4008, 0x0a68,
+ 0x0a38, 0x2e20, 0x4050, 0x5208, 0x1c68,
+ 0x1c3a, 0x4022, 0x5252, 0x0a0a, 0x2e6a,
+ 0x2e3a, 0x5222, 0x0a52, 0x1c0a, 0x406a,
+ 0x403a, 0x0a22, 0x1c52, 0x2e0a, 0x526a,
+ 0x523a, 0x1c22, 0x2e52, 0x400a, 0x0a6a,
+ 0x0a3a, 0x2e22, 0x4052, 0x520a, 0x1c6a,
+ 0x1e30, 0x4218, 0x5448, 0x0c00, 0x3060,
+ 0x3030, 0x5418, 0x0c48, 0x1e00, 0x4260,
+ 0x4230, 0x0c18, 0x1e48, 0x3000, 0x5460,
+ 0x5430, 0x1e18, 0x3048, 0x4200, 0x0c60,
+ 0x0c30, 0x3018, 0x4248, 0x5400, 0x1e60,
+ 0x1e32, 0x421a, 0x544a, 0x0c02, 0x3062,
+ 0x3032, 0x541a, 0x0c4a, 0x1e02, 0x4262,
+ 0x4232, 0x0c1a, 0x1e4a, 0x3002, 0x5462,
+ 0x5432, 0x1e1a, 0x304a, 0x4202, 0x0c62,
+ 0x0c32, 0x301a, 0x424a, 0x5402, 0x1e62,
+ 0x1e34, 0x421c, 0x544c, 0x0c04, 0x3064,
+ 0x3034, 0x541c, 0x0c4c, 0x1e04, 0x4264,
+ 0x4234, 0x0c1c, 0x1e4c, 0x3004, 0x5464,
+ 0x5434, 0x1e1c, 0x304c, 0x4204, 0x0c64,
+ 0x0c34, 0x301c, 0x424c, 0x5404, 0x1e64,
+ 0x1e36, 0x421e, 0x544e, 0x0c06, 0x3066,
+ 0x3036, 0x541e, 0x0c4e, 0x1e06, 0x4266,
+ 0x4236, 0x0c1e, 0x1e4e, 0x3006, 0x5466,
+ 0x5436, 0x1e1e, 0x304e, 0x4206, 0x0c66,
+ 0x0c36, 0x301e, 0x424e, 0x5406, 0x1e66,
+ 0x1e38, 0x4220, 0x5450, 0x0c08, 0x3068,
+ 0x3038, 0x5420, 0x0c50, 0x1e08, 0x4268,
+ 0x4238, 0x0c20, 0x1e50, 0x3008, 0x5468,
+ 0x5438, 0x1e20, 0x3050, 0x4208, 0x0c68,
+ 0x0c38, 0x3020, 0x4250, 0x5408, 0x1e68,
+ 0x1e3a, 0x4222, 0x5452, 0x0c0a, 0x306a,
+ 0x303a, 0x5422, 0x0c52, 0x1e0a, 0x426a,
+ 0x423a, 0x0c22, 0x1e52, 0x300a, 0x546a,
+ 0x543a, 0x1e22, 0x3052, 0x420a, 0x0c6a,
+ 0x0c3a, 0x3022, 0x4252, 0x540a, 0x1e6a,
+ 0x2030, 0x4418, 0x5648, 0x0e00, 0x3260,
+ 0x3230, 0x5618, 0x0e48, 0x2000, 0x4460,
+ 0x4430, 0x0e18, 0x2048, 0x3200, 0x5660,
+ 0x5630, 0x2018, 0x3248, 0x4400, 0x0e60,
+ 0x0e30, 0x3218, 0x4448, 0x5600, 0x2060,
+ 0x2032, 0x441a, 0x564a, 0x0e02, 0x3262,
+ 0x3232, 0x561a, 0x0e4a, 0x2002, 0x4462,
+ 0x4432, 0x0e1a, 0x204a, 0x3202, 0x5662,
+ 0x5632, 0x201a, 0x324a, 0x4402, 0x0e62,
+ 0x0e32, 0x321a, 0x444a, 0x5602, 0x2062,
+ 0x2034, 0x441c, 0x564c, 0x0e04, 0x3264,
+ 0x3234, 0x561c, 0x0e4c, 0x2004, 0x4464,
+ 0x4434, 0x0e1c, 0x204c, 0x3204, 0x5664,
+ 0x5634, 0x201c, 0x324c, 0x4404, 0x0e64,
+ 0x0e34, 0x321c, 0x444c, 0x5604, 0x2064,
+ 0x2036, 0x441e, 0x564e, 0x0e06, 0x3266,
+ 0x3236, 0x561e, 0x0e4e, 0x2006, 0x4466,
+ 0x4436, 0x0e1e, 0x204e, 0x3206, 0x5666,
+ 0x5636, 0x201e, 0x324e, 0x4406, 0x0e66,
+ 0x0e36, 0x321e, 0x444e, 0x5606, 0x2066,
+ 0x2038, 0x4420, 0x5650, 0x0e08, 0x3268,
+ 0x3238, 0x5620, 0x0e50, 0x2008, 0x4468,
+ 0x4438, 0x0e20, 0x2050, 0x3208, 0x5668,
+ 0x5638, 0x2020, 0x3250, 0x4408, 0x0e68,
+ 0x0e38, 0x3220, 0x4450, 0x5608, 0x2068,
+ 0x203a, 0x4422, 0x5652, 0x0e0a, 0x326a,
+ 0x323a, 0x5622, 0x0e52, 0x200a, 0x446a,
+ 0x443a, 0x0e22, 0x2052, 0x320a, 0x566a,
+ 0x563a, 0x2022, 0x3252, 0x440a, 0x0e6a,
+ 0x0e3a, 0x3222, 0x4452, 0x560a, 0x206a,
+ 0x2230, 0x4618, 0x5848, 0x1000, 0x3460,
+ 0x3430, 0x5818, 0x1048, 0x2200, 0x4660,
+ 0x4630, 0x1018, 0x2248, 0x3400, 0x5860,
+ 0x5830, 0x2218, 0x3448, 0x4600, 0x1060,
+ 0x1030, 0x3418, 0x4648, 0x5800, 0x2260,
+ 0x2232, 0x461a, 0x584a, 0x1002, 0x3462,
+ 0x3432, 0x581a, 0x104a, 0x2202, 0x4662,
+ 0x4632, 0x101a, 0x224a, 0x3402, 0x5862,
+ 0x5832, 0x221a, 0x344a, 0x4602, 0x1062,
+ 0x1032, 0x341a, 0x464a, 0x5802, 0x2262,
+ 0x2234, 0x461c, 0x584c, 0x1004, 0x3464,
+ 0x3434, 0x581c, 0x104c, 0x2204, 0x4664,
+ 0x4634, 0x101c, 0x224c, 0x3404, 0x5864,
+ 0x5834, 0x221c, 0x344c, 0x4604, 0x1064,
+ 0x1034, 0x341c, 0x464c, 0x5804, 0x2264,
+ 0x2236, 0x461e, 0x584e, 0x1006, 0x3466,
+ 0x3436, 0x581e, 0x104e, 0x2206, 0x4666,
+ 0x4636, 0x101e, 0x224e, 0x3406, 0x5866,
+ 0x5836, 0x221e, 0x344e, 0x4606, 0x1066,
+ 0x1036, 0x341e, 0x464e, 0x5806, 0x2266,
+ 0x2238, 0x4620, 0x5850, 0x1008, 0x3468,
+ 0x3438, 0x5820, 0x1050, 0x2208, 0x4668,
+ 0x4638, 0x1020, 0x2250, 0x3408, 0x5868,
+ 0x5838, 0x2220, 0x3450, 0x4608, 0x1068,
+ 0x1038, 0x3420, 0x4650, 0x5808, 0x2268,
+ 0x223a, 0x4622, 0x5852, 0x100a, 0x346a,
+ 0x343a, 0x5822, 0x1052, 0x220a, 0x466a,
+ 0x463a, 0x1022, 0x2252, 0x340a, 0x586a,
+ 0x583a, 0x2222, 0x3452, 0x460a, 0x106a,
+ 0x103a, 0x3422, 0x4652, 0x580a, 0x226a,
+ 0x363c, 0x0024, 0x1254, 0x240c, 0x486c,
+ 0x483c, 0x1224, 0x2454, 0x360c, 0x006c,
+ 0x003c, 0x2424, 0x3654, 0x480c, 0x126c,
+ 0x123c, 0x3624, 0x4854, 0x000c, 0x246c,
+ 0x243c, 0x4824, 0x0054, 0x120c, 0x366c,
+ 0x363e, 0x0026, 0x1256, 0x240e, 0x486e,
+ 0x483e, 0x1226, 0x2456, 0x360e, 0x006e,
+ 0x003e, 0x2426, 0x3656, 0x480e, 0x126e,
+ 0x123e, 0x3626, 0x4856, 0x000e, 0x246e,
+ 0x243e, 0x4826, 0x0056, 0x120e, 0x366e,
+ 0x3640, 0x0028, 0x1258, 0x2410, 0x4870,
+ 0x4840, 0x1228, 0x2458, 0x3610, 0x0070,
+ 0x0040, 0x2428, 0x3658, 0x4810, 0x1270,
+ 0x1240, 0x3628, 0x4858, 0x0010, 0x2470,
+ 0x2440, 0x4828, 0x0058, 0x1210, 0x3670,
+ 0x3642, 0x002a, 0x125a, 0x2412, 0x4872,
+ 0x4842, 0x122a, 0x245a, 0x3612, 0x0072,
+ 0x0042, 0x242a, 0x365a, 0x4812, 0x1272,
+ 0x1242, 0x362a, 0x485a, 0x0012, 0x2472,
+ 0x2442, 0x482a, 0x005a, 0x1212, 0x3672,
+ 0x3644, 0x002c, 0x125c, 0x2414, 0x4874,
+ 0x4844, 0x122c, 0x245c, 0x3614, 0x0074,
+ 0x0044, 0x242c, 0x365c, 0x4814, 0x1274,
+ 0x1244, 0x362c, 0x485c, 0x0014, 0x2474,
+ 0x2444, 0x482c, 0x005c, 0x1214, 0x3674,
+ 0x3646, 0x002e, 0x125e, 0x2416, 0x4876,
+ 0x4846, 0x122e, 0x245e, 0x3616, 0x0076,
+ 0x0046, 0x242e, 0x365e, 0x4816, 0x1276,
+ 0x1246, 0x362e, 0x485e, 0x0016, 0x2476,
+ 0x2446, 0x482e, 0x005e, 0x1216, 0x3676,
+ 0x383c, 0x0224, 0x1454, 0x260c, 0x4a6c,
+ 0x4a3c, 0x1424, 0x2654, 0x380c, 0x026c,
+ 0x023c, 0x2624, 0x3854, 0x4a0c, 0x146c,
+ 0x143c, 0x3824, 0x4a54, 0x020c, 0x266c,
+ 0x263c, 0x4a24, 0x0254, 0x140c, 0x386c,
+ 0x383e, 0x0226, 0x1456, 0x260e, 0x4a6e,
+ 0x4a3e, 0x1426, 0x2656, 0x380e, 0x026e,
+ 0x023e, 0x2626, 0x3856, 0x4a0e, 0x146e,
+ 0x143e, 0x3826, 0x4a56, 0x020e, 0x266e,
+ 0x263e, 0x4a26, 0x0256, 0x140e, 0x386e,
+ 0x3840, 0x0228, 0x1458, 0x2610, 0x4a70,
+ 0x4a40, 0x1428, 0x2658, 0x3810, 0x0270,
+ 0x0240, 0x2628, 0x3858, 0x4a10, 0x1470,
+ 0x1440, 0x3828, 0x4a58, 0x0210, 0x2670,
+ 0x2640, 0x4a28, 0x0258, 0x1410, 0x3870,
+ 0x3842, 0x022a, 0x145a, 0x2612, 0x4a72,
+ 0x4a42, 0x142a, 0x265a, 0x3812, 0x0272,
+ 0x0242, 0x262a, 0x385a, 0x4a12, 0x1472,
+ 0x1442, 0x382a, 0x4a5a, 0x0212, 0x2672,
+ 0x2642, 0x4a2a, 0x025a, 0x1412, 0x3872,
+ 0x3844, 0x022c, 0x145c, 0x2614, 0x4a74,
+ 0x4a44, 0x142c, 0x265c, 0x3814, 0x0274,
+ 0x0244, 0x262c, 0x385c, 0x4a14, 0x1474,
+ 0x1444, 0x382c, 0x4a5c, 0x0214, 0x2674,
+ 0x2644, 0x4a2c, 0x025c, 0x1414, 0x3874,
+ 0x3846, 0x022e, 0x145e, 0x2616, 0x4a76,
+ 0x4a46, 0x142e, 0x265e, 0x3816, 0x0276,
+ 0x0246, 0x262e, 0x385e, 0x4a16, 0x1476,
+ 0x1446, 0x382e, 0x4a5e, 0x0216, 0x2676,
+ 0x2646, 0x4a2e, 0x025e, 0x1416, 0x3876,
+ 0x3a3c, 0x0424, 0x1654, 0x280c, 0x4c6c,
+ 0x4c3c, 0x1624, 0x2854, 0x3a0c, 0x046c,
+ 0x043c, 0x2824, 0x3a54, 0x4c0c, 0x166c,
+ 0x163c, 0x3a24, 0x4c54, 0x040c, 0x286c,
+ 0x283c, 0x4c24, 0x0454, 0x160c, 0x3a6c,
+ 0x3a3e, 0x0426, 0x1656, 0x280e, 0x4c6e,
+ 0x4c3e, 0x1626, 0x2856, 0x3a0e, 0x046e,
+ 0x043e, 0x2826, 0x3a56, 0x4c0e, 0x166e,
+ 0x163e, 0x3a26, 0x4c56, 0x040e, 0x286e,
+ 0x283e, 0x4c26, 0x0456, 0x160e, 0x3a6e,
+ 0x3a40, 0x0428, 0x1658, 0x2810, 0x4c70,
+ 0x4c40, 0x1628, 0x2858, 0x3a10, 0x0470,
+ 0x0440, 0x2828, 0x3a58, 0x4c10, 0x1670,
+ 0x1640, 0x3a28, 0x4c58, 0x0410, 0x2870,
+ 0x2840, 0x4c28, 0x0458, 0x1610, 0x3a70,
+ 0x3a42, 0x042a, 0x165a, 0x2812, 0x4c72,
+ 0x4c42, 0x162a, 0x285a, 0x3a12, 0x0472,
+ 0x0442, 0x282a, 0x3a5a, 0x4c12, 0x1672,
+ 0x1642, 0x3a2a, 0x4c5a, 0x0412, 0x2872,
+ 0x2842, 0x4c2a, 0x045a, 0x1612, 0x3a72,
+ 0x3a44, 0x042c, 0x165c, 0x2814, 0x4c74,
+ 0x4c44, 0x162c, 0x285c, 0x3a14, 0x0474,
+ 0x0444, 0x282c, 0x3a5c, 0x4c14, 0x1674,
+ 0x1644, 0x3a2c, 0x4c5c, 0x0414, 0x2874,
+ 0x2844, 0x4c2c, 0x045c, 0x1614, 0x3a74,
+ 0x3a46, 0x042e, 0x165e, 0x2816, 0x4c76,
+ 0x4c46, 0x162e, 0x285e, 0x3a16, 0x0476,
+ 0x0446, 0x282e, 0x3a5e, 0x4c16, 0x1676,
+ 0x1646, 0x3a2e, 0x4c5e, 0x0416, 0x2876,
+ 0x2846, 0x4c2e, 0x045e, 0x1616, 0x3a76,
+ 0x3c3c, 0x0624, 0x1854, 0x2a0c, 0x4e6c,
+ 0x4e3c, 0x1824, 0x2a54, 0x3c0c, 0x066c,
+ 0x063c, 0x2a24, 0x3c54, 0x4e0c, 0x186c,
+ 0x183c, 0x3c24, 0x4e54, 0x060c, 0x2a6c,
+ 0x2a3c, 0x4e24, 0x0654, 0x180c, 0x3c6c,
+ 0x3c3e, 0x0626, 0x1856, 0x2a0e, 0x4e6e,
+ 0x4e3e, 0x1826, 0x2a56, 0x3c0e, 0x066e,
+ 0x063e, 0x2a26, 0x3c56, 0x4e0e, 0x186e,
+ 0x183e, 0x3c26, 0x4e56, 0x060e, 0x2a6e,
+ 0x2a3e, 0x4e26, 0x0656, 0x180e, 0x3c6e,
+ 0x3c40, 0x0628, 0x1858, 0x2a10, 0x4e70,
+ 0x4e40, 0x1828, 0x2a58, 0x3c10, 0x0670,
+ 0x0640, 0x2a28, 0x3c58, 0x4e10, 0x1870,
+ 0x1840, 0x3c28, 0x4e58, 0x0610, 0x2a70,
+ 0x2a40, 0x4e28, 0x0658, 0x1810, 0x3c70,
+ 0x3c42, 0x062a, 0x185a, 0x2a12, 0x4e72,
+ 0x4e42, 0x182a, 0x2a5a, 0x3c12, 0x0672,
+ 0x0642, 0x2a2a, 0x3c5a, 0x4e12, 0x1872,
+ 0x1842, 0x3c2a, 0x4e5a, 0x0612, 0x2a72,
+ 0x2a42, 0x4e2a, 0x065a, 0x1812, 0x3c72,
+ 0x3c44, 0x062c, 0x185c, 0x2a14, 0x4e74,
+ 0x4e44, 0x182c, 0x2a5c, 0x3c14, 0x0674,
+ 0x0644, 0x2a2c, 0x3c5c, 0x4e14, 0x1874,
+ 0x1844, 0x3c2c, 0x4e5c, 0x0614, 0x2a74,
+ 0x2a44, 0x4e2c, 0x065c, 0x1814, 0x3c74,
+ 0x3c46, 0x062e, 0x185e, 0x2a16, 0x4e76,
+ 0x4e46, 0x182e, 0x2a5e, 0x3c16, 0x0676,
+ 0x0646, 0x2a2e, 0x3c5e, 0x4e16, 0x1876,
+ 0x1846, 0x3c2e, 0x4e5e, 0x0616, 0x2a76,
+ 0x2a46, 0x4e2e, 0x065e, 0x1816, 0x3c76,
+ 0x3e3c, 0x0824, 0x1a54, 0x2c0c, 0x506c,
+ 0x503c, 0x1a24, 0x2c54, 0x3e0c, 0x086c,
+ 0x083c, 0x2c24, 0x3e54, 0x500c, 0x1a6c,
+ 0x1a3c, 0x3e24, 0x5054, 0x080c, 0x2c6c,
+ 0x2c3c, 0x5024, 0x0854, 0x1a0c, 0x3e6c,
+ 0x3e3e, 0x0826, 0x1a56, 0x2c0e, 0x506e,
+ 0x503e, 0x1a26, 0x2c56, 0x3e0e, 0x086e,
+ 0x083e, 0x2c26, 0x3e56, 0x500e, 0x1a6e,
+ 0x1a3e, 0x3e26, 0x5056, 0x080e, 0x2c6e,
+ 0x2c3e, 0x5026, 0x0856, 0x1a0e, 0x3e6e,
+ 0x3e40, 0x0828, 0x1a58, 0x2c10, 0x5070,
+ 0x5040, 0x1a28, 0x2c58, 0x3e10, 0x0870,
+ 0x0840, 0x2c28, 0x3e58, 0x5010, 0x1a70,
+ 0x1a40, 0x3e28, 0x5058, 0x0810, 0x2c70,
+ 0x2c40, 0x5028, 0x0858, 0x1a10, 0x3e70,
+ 0x3e42, 0x082a, 0x1a5a, 0x2c12, 0x5072,
+ 0x5042, 0x1a2a, 0x2c5a, 0x3e12, 0x0872,
+ 0x0842, 0x2c2a, 0x3e5a, 0x5012, 0x1a72,
+ 0x1a42, 0x3e2a, 0x505a, 0x0812, 0x2c72,
+ 0x2c42, 0x502a, 0x085a, 0x1a12, 0x3e72,
+ 0x3e44, 0x082c, 0x1a5c, 0x2c14, 0x5074,
+ 0x5044, 0x1a2c, 0x2c5c, 0x3e14, 0x0874,
+ 0x0844, 0x2c2c, 0x3e5c, 0x5014, 0x1a74,
+ 0x1a44, 0x3e2c, 0x505c, 0x0814, 0x2c74,
+ 0x2c44, 0x502c, 0x085c, 0x1a14, 0x3e74,
+ 0x3e46, 0x082e, 0x1a5e, 0x2c16, 0x5076,
+ 0x5046, 0x1a2e, 0x2c5e, 0x3e16, 0x0876,
+ 0x0846, 0x2c2e, 0x3e5e, 0x5016, 0x1a76,
+ 0x1a46, 0x3e2e, 0x505e, 0x0816, 0x2c76,
+ 0x2c46, 0x502e, 0x085e, 0x1a16, 0x3e76,
+ 0x403c, 0x0a24, 0x1c54, 0x2e0c, 0x526c,
+ 0x523c, 0x1c24, 0x2e54, 0x400c, 0x0a6c,
+ 0x0a3c, 0x2e24, 0x4054, 0x520c, 0x1c6c,
+ 0x1c3c, 0x4024, 0x5254, 0x0a0c, 0x2e6c,
+ 0x2e3c, 0x5224, 0x0a54, 0x1c0c, 0x406c,
+ 0x403e, 0x0a26, 0x1c56, 0x2e0e, 0x526e,
+ 0x523e, 0x1c26, 0x2e56, 0x400e, 0x0a6e,
+ 0x0a3e, 0x2e26, 0x4056, 0x520e, 0x1c6e,
+ 0x1c3e, 0x4026, 0x5256, 0x0a0e, 0x2e6e,
+ 0x2e3e, 0x5226, 0x0a56, 0x1c0e, 0x406e,
+ 0x4040, 0x0a28, 0x1c58, 0x2e10, 0x5270,
+ 0x5240, 0x1c28, 0x2e58, 0x4010, 0x0a70,
+ 0x0a40, 0x2e28, 0x4058, 0x5210, 0x1c70,
+ 0x1c40, 0x4028, 0x5258, 0x0a10, 0x2e70,
+ 0x2e40, 0x5228, 0x0a58, 0x1c10, 0x4070,
+ 0x4042, 0x0a2a, 0x1c5a, 0x2e12, 0x5272,
+ 0x5242, 0x1c2a, 0x2e5a, 0x4012, 0x0a72,
+ 0x0a42, 0x2e2a, 0x405a, 0x5212, 0x1c72,
+ 0x1c42, 0x402a, 0x525a, 0x0a12, 0x2e72,
+ 0x2e42, 0x522a, 0x0a5a, 0x1c12, 0x4072,
+ 0x4044, 0x0a2c, 0x1c5c, 0x2e14, 0x5274,
+ 0x5244, 0x1c2c, 0x2e5c, 0x4014, 0x0a74,
+ 0x0a44, 0x2e2c, 0x405c, 0x5214, 0x1c74,
+ 0x1c44, 0x402c, 0x525c, 0x0a14, 0x2e74,
+ 0x2e44, 0x522c, 0x0a5c, 0x1c14, 0x4074,
+ 0x4046, 0x0a2e, 0x1c5e, 0x2e16, 0x5276,
+ 0x5246, 0x1c2e, 0x2e5e, 0x4016, 0x0a76,
+ 0x0a46, 0x2e2e, 0x405e, 0x5216, 0x1c76,
+ 0x1c46, 0x402e, 0x525e, 0x0a16, 0x2e76,
+ 0x2e46, 0x522e, 0x0a5e, 0x1c16, 0x4076,
+ 0x423c, 0x0c24, 0x1e54, 0x300c, 0x546c,
+ 0x543c, 0x1e24, 0x3054, 0x420c, 0x0c6c,
+ 0x0c3c, 0x3024, 0x4254, 0x540c, 0x1e6c,
+ 0x1e3c, 0x4224, 0x5454, 0x0c0c, 0x306c,
+ 0x303c, 0x5424, 0x0c54, 0x1e0c, 0x426c,
+ 0x423e, 0x0c26, 0x1e56, 0x300e, 0x546e,
+ 0x543e, 0x1e26, 0x3056, 0x420e, 0x0c6e,
+ 0x0c3e, 0x3026, 0x4256, 0x540e, 0x1e6e,
+ 0x1e3e, 0x4226, 0x5456, 0x0c0e, 0x306e,
+ 0x303e, 0x5426, 0x0c56, 0x1e0e, 0x426e,
+ 0x4240, 0x0c28, 0x1e58, 0x3010, 0x5470,
+ 0x5440, 0x1e28, 0x3058, 0x4210, 0x0c70,
+ 0x0c40, 0x3028, 0x4258, 0x5410, 0x1e70,
+ 0x1e40, 0x4228, 0x5458, 0x0c10, 0x3070,
+ 0x3040, 0x5428, 0x0c58, 0x1e10, 0x4270,
+ 0x4242, 0x0c2a, 0x1e5a, 0x3012, 0x5472,
+ 0x5442, 0x1e2a, 0x305a, 0x4212, 0x0c72,
+ 0x0c42, 0x302a, 0x425a, 0x5412, 0x1e72,
+ 0x1e42, 0x422a, 0x545a, 0x0c12, 0x3072,
+ 0x3042, 0x542a, 0x0c5a, 0x1e12, 0x4272,
+ 0x4244, 0x0c2c, 0x1e5c, 0x3014, 0x5474,
+ 0x5444, 0x1e2c, 0x305c, 0x4214, 0x0c74,
+ 0x0c44, 0x302c, 0x425c, 0x5414, 0x1e74,
+ 0x1e44, 0x422c, 0x545c, 0x0c14, 0x3074,
+ 0x3044, 0x542c, 0x0c5c, 0x1e14, 0x4274,
+ 0x4246, 0x0c2e, 0x1e5e, 0x3016, 0x5476,
+ 0x5446, 0x1e2e, 0x305e, 0x4216, 0x0c76,
+ 0x0c46, 0x302e, 0x425e, 0x5416, 0x1e76,
+ 0x1e46, 0x422e, 0x545e, 0x0c16, 0x3076,
+ 0x3046, 0x542e, 0x0c5e, 0x1e16, 0x4276,
+ 0x443c, 0x0e24, 0x2054, 0x320c, 0x566c,
+ 0x563c, 0x2024, 0x3254, 0x440c, 0x0e6c,
+ 0x0e3c, 0x3224, 0x4454, 0x560c, 0x206c,
+ 0x203c, 0x4424, 0x5654, 0x0e0c, 0x326c,
+ 0x323c, 0x5624, 0x0e54, 0x200c, 0x446c,
+ 0x443e, 0x0e26, 0x2056, 0x320e, 0x566e,
+ 0x563e, 0x2026, 0x3256, 0x440e, 0x0e6e,
+ 0x0e3e, 0x3226, 0x4456, 0x560e, 0x206e,
+ 0x203e, 0x4426, 0x5656, 0x0e0e, 0x326e,
+ 0x323e, 0x5626, 0x0e56, 0x200e, 0x446e,
+ 0x4440, 0x0e28, 0x2058, 0x3210, 0x5670,
+ 0x5640, 0x2028, 0x3258, 0x4410, 0x0e70,
+ 0x0e40, 0x3228, 0x4458, 0x5610, 0x2070,
+ 0x2040, 0x4428, 0x5658, 0x0e10, 0x3270,
+ 0x3240, 0x5628, 0x0e58, 0x2010, 0x4470,
+ 0x4442, 0x0e2a, 0x205a, 0x3212, 0x5672,
+ 0x5642, 0x202a, 0x325a, 0x4412, 0x0e72,
+ 0x0e42, 0x322a, 0x445a, 0x5612, 0x2072,
+ 0x2042, 0x442a, 0x565a, 0x0e12, 0x3272,
+ 0x3242, 0x562a, 0x0e5a, 0x2012, 0x4472,
+ 0x4444, 0x0e2c, 0x205c, 0x3214, 0x5674,
+ 0x5644, 0x202c, 0x325c, 0x4414, 0x0e74,
+ 0x0e44, 0x322c, 0x445c, 0x5614, 0x2074,
+ 0x2044, 0x442c, 0x565c, 0x0e14, 0x3274,
+ 0x3244, 0x562c, 0x0e5c, 0x2014, 0x4474,
+ 0x4446, 0x0e2e, 0x205e, 0x3216, 0x5676,
+ 0x5646, 0x202e, 0x325e, 0x4416, 0x0e76,
+ 0x0e46, 0x322e, 0x445e, 0x5616, 0x2076,
+ 0x2046, 0x442e, 0x565e, 0x0e16, 0x3276,
+ 0x3246, 0x562e, 0x0e5e, 0x2016, 0x4476,
+ 0x463c, 0x1024, 0x2254, 0x340c, 0x586c,
+ 0x583c, 0x2224, 0x3454, 0x460c, 0x106c,
+ 0x103c, 0x3424, 0x4654, 0x580c, 0x226c,
+ 0x223c, 0x4624, 0x5854, 0x100c, 0x346c,
+ 0x343c, 0x5824, 0x1054, 0x220c, 0x466c,
+ 0x463e, 0x1026, 0x2256, 0x340e, 0x586e,
+ 0x583e, 0x2226, 0x3456, 0x460e, 0x106e,
+ 0x103e, 0x3426, 0x4656, 0x580e, 0x226e,
+ 0x223e, 0x4626, 0x5856, 0x100e, 0x346e,
+ 0x343e, 0x5826, 0x1056, 0x220e, 0x466e,
+ 0x4640, 0x1028, 0x2258, 0x3410, 0x5870,
+ 0x5840, 0x2228, 0x3458, 0x4610, 0x1070,
+ 0x1040, 0x3428, 0x4658, 0x5810, 0x2270,
+ 0x2240, 0x4628, 0x5858, 0x1010, 0x3470,
+ 0x3440, 0x5828, 0x1058, 0x2210, 0x4670,
+ 0x4642, 0x102a, 0x225a, 0x3412, 0x5872,
+ 0x5842, 0x222a, 0x345a, 0x4612, 0x1072,
+ 0x1042, 0x342a, 0x465a, 0x5812, 0x2272,
+ 0x2242, 0x462a, 0x585a, 0x1012, 0x3472,
+ 0x3442, 0x582a, 0x105a, 0x2212, 0x4672,
+ 0x4644, 0x102c, 0x225c, 0x3414, 0x5874,
+ 0x5844, 0x222c, 0x345c, 0x4614, 0x1074,
+ 0x1044, 0x342c, 0x465c, 0x5814, 0x2274,
+ 0x2244, 0x462c, 0x585c, 0x1014, 0x3474,
+ 0x3444, 0x582c, 0x105c, 0x2214, 0x4674,
+ 0x4646, 0x102e, 0x225e, 0x3416, 0x5876,
+ 0x5846, 0x222e, 0x345e, 0x4616, 0x1076,
+ 0x1046, 0x342e, 0x465e, 0x5816, 0x2276,
+ 0x2246, 0x462e, 0x585e, 0x1016, 0x3476,
+ 0x3446, 0x582e, 0x105e, 0x2216, 0x4676,
+};
+
+static const uint16_t dv_place_720p50[2*12*27*5] = {
+ 0x1230, 0x3618, 0x4848, 0x0000, 0x2460,
+ 0x2430, 0x4818, 0x0048, 0x1200, 0x3660,
+ 0x3630, 0x0018, 0x1248, 0x2400, 0x4860,
+ 0x4830, 0x1218, 0x2448, 0x3600, 0x0060,
+ 0x0030, 0x2418, 0x3648, 0x4800, 0x1260,
+ 0x1232, 0x361a, 0x484a, 0x0002, 0x2462,
+ 0x2432, 0x481a, 0x004a, 0x1202, 0x3662,
+ 0x3632, 0x001a, 0x124a, 0x2402, 0x4862,
+ 0x4832, 0x121a, 0x244a, 0x3602, 0x0062,
+ 0x0032, 0x241a, 0x364a, 0x4802, 0x1262,
+ 0x1234, 0x361c, 0x484c, 0x0004, 0x2464,
+ 0x2434, 0x481c, 0x004c, 0x1204, 0x3664,
+ 0x3634, 0x001c, 0x124c, 0x2404, 0x4864,
+ 0x4834, 0x121c, 0x244c, 0x3604, 0x0064,
+ 0x0034, 0x241c, 0x364c, 0x4804, 0x1264,
+ 0x1236, 0x361e, 0x484e, 0x0006, 0x2466,
+ 0x2436, 0x481e, 0x004e, 0x1206, 0x3666,
+ 0x3636, 0x001e, 0x124e, 0x2406, 0x4866,
+ 0x4836, 0x121e, 0x244e, 0x3606, 0x0066,
+ 0x0036, 0x241e, 0x364e, 0x4806, 0x1266,
+ 0x1238, 0x3620, 0x4850, 0x0008, 0x2468,
+ 0x2438, 0x4820, 0x0050, 0x1208, 0x3668,
+ 0x3638, 0x0020, 0x1250, 0x2408, 0x4868,
+ 0x4838, 0x1220, 0x2450, 0x3608, 0x0068,
+ 0x0038, 0x2420, 0x3650, 0x4808, 0x1268,
+ 0x123a, 0x3622, 0x4852, 0x000a, 0x246a,
+ 0x243a, 0x4822, 0x0052, 0x120a, 0x366a,
+ 0x363a, 0x0022, 0x1252, 0x240a, 0x486a,
+ 0x483a, 0x1222, 0x2452, 0x360a, 0x006a,
+ 0x003a, 0x2422, 0x3652, 0x480a, 0x126a,
+ 0x1430, 0x3818, 0x4a48, 0x0200, 0x2660,
+ 0x2630, 0x4a18, 0x0248, 0x1400, 0x3860,
+ 0x3830, 0x0218, 0x1448, 0x2600, 0x4a60,
+ 0x4a30, 0x1418, 0x2648, 0x3800, 0x0260,
+ 0x0230, 0x2618, 0x3848, 0x4a00, 0x1460,
+ 0x1432, 0x381a, 0x4a4a, 0x0202, 0x2662,
+ 0x2632, 0x4a1a, 0x024a, 0x1402, 0x3862,
+ 0x3832, 0x021a, 0x144a, 0x2602, 0x4a62,
+ 0x4a32, 0x141a, 0x264a, 0x3802, 0x0262,
+ 0x0232, 0x261a, 0x384a, 0x4a02, 0x1462,
+ 0x1434, 0x381c, 0x4a4c, 0x0204, 0x2664,
+ 0x2634, 0x4a1c, 0x024c, 0x1404, 0x3864,
+ 0x3834, 0x021c, 0x144c, 0x2604, 0x4a64,
+ 0x4a34, 0x141c, 0x264c, 0x3804, 0x0264,
+ 0x0234, 0x261c, 0x384c, 0x4a04, 0x1464,
+ 0x1436, 0x381e, 0x4a4e, 0x0206, 0x2666,
+ 0x2636, 0x4a1e, 0x024e, 0x1406, 0x3866,
+ 0x3836, 0x021e, 0x144e, 0x2606, 0x4a66,
+ 0x4a36, 0x141e, 0x264e, 0x3806, 0x0266,
+ 0x0236, 0x261e, 0x384e, 0x4a06, 0x1466,
+ 0x1438, 0x3820, 0x4a50, 0x0208, 0x2668,
+ 0x2638, 0x4a20, 0x0250, 0x1408, 0x3868,
+ 0x3838, 0x0220, 0x1450, 0x2608, 0x4a68,
+ 0x4a38, 0x1420, 0x2650, 0x3808, 0x0268,
+ 0x0238, 0x2620, 0x3850, 0x4a08, 0x1468,
+ 0x143a, 0x3822, 0x4a52, 0x020a, 0x266a,
+ 0x263a, 0x4a22, 0x0252, 0x140a, 0x386a,
+ 0x383a, 0x0222, 0x1452, 0x260a, 0x4a6a,
+ 0x4a3a, 0x1422, 0x2652, 0x380a, 0x026a,
+ 0x023a, 0x2622, 0x3852, 0x4a0a, 0x146a,
+ 0x1630, 0x3a18, 0x4c48, 0x0400, 0x2860,
+ 0x2830, 0x4c18, 0x0448, 0x1600, 0x3a60,
+ 0x3a30, 0x0418, 0x1648, 0x2800, 0x4c60,
+ 0x4c30, 0x1618, 0x2848, 0x3a00, 0x0460,
+ 0x0430, 0x2818, 0x3a48, 0x4c00, 0x1660,
+ 0x1632, 0x3a1a, 0x4c4a, 0x0402, 0x2862,
+ 0x2832, 0x4c1a, 0x044a, 0x1602, 0x3a62,
+ 0x3a32, 0x041a, 0x164a, 0x2802, 0x4c62,
+ 0x4c32, 0x161a, 0x284a, 0x3a02, 0x0462,
+ 0x0432, 0x281a, 0x3a4a, 0x4c02, 0x1662,
+ 0x1634, 0x3a1c, 0x4c4c, 0x0404, 0x2864,
+ 0x2834, 0x4c1c, 0x044c, 0x1604, 0x3a64,
+ 0x3a34, 0x041c, 0x164c, 0x2804, 0x4c64,
+ 0x4c34, 0x161c, 0x284c, 0x3a04, 0x0464,
+ 0x0434, 0x281c, 0x3a4c, 0x4c04, 0x1664,
+ 0x1636, 0x3a1e, 0x4c4e, 0x0406, 0x2866,
+ 0x2836, 0x4c1e, 0x044e, 0x1606, 0x3a66,
+ 0x3a36, 0x041e, 0x164e, 0x2806, 0x4c66,
+ 0x4c36, 0x161e, 0x284e, 0x3a06, 0x0466,
+ 0x0436, 0x281e, 0x3a4e, 0x4c06, 0x1666,
+ 0x1638, 0x3a20, 0x4c50, 0x0408, 0x2868,
+ 0x2838, 0x4c20, 0x0450, 0x1608, 0x3a68,
+ 0x3a38, 0x0420, 0x1650, 0x2808, 0x4c68,
+ 0x4c38, 0x1620, 0x2850, 0x3a08, 0x0468,
+ 0x0438, 0x2820, 0x3a50, 0x4c08, 0x1668,
+ 0x163a, 0x3a22, 0x4c52, 0x040a, 0x286a,
+ 0x283a, 0x4c22, 0x0452, 0x160a, 0x3a6a,
+ 0x3a3a, 0x0422, 0x1652, 0x280a, 0x4c6a,
+ 0x4c3a, 0x1622, 0x2852, 0x3a0a, 0x046a,
+ 0x043a, 0x2822, 0x3a52, 0x4c0a, 0x166a,
+ 0x1830, 0x3c18, 0x4e48, 0x0600, 0x2a60,
+ 0x2a30, 0x4e18, 0x0648, 0x1800, 0x3c60,
+ 0x3c30, 0x0618, 0x1848, 0x2a00, 0x4e60,
+ 0x4e30, 0x1818, 0x2a48, 0x3c00, 0x0660,
+ 0x0630, 0x2a18, 0x3c48, 0x4e00, 0x1860,
+ 0x1832, 0x3c1a, 0x4e4a, 0x0602, 0x2a62,
+ 0x2a32, 0x4e1a, 0x064a, 0x1802, 0x3c62,
+ 0x3c32, 0x061a, 0x184a, 0x2a02, 0x4e62,
+ 0x4e32, 0x181a, 0x2a4a, 0x3c02, 0x0662,
+ 0x0632, 0x2a1a, 0x3c4a, 0x4e02, 0x1862,
+ 0x1834, 0x3c1c, 0x4e4c, 0x0604, 0x2a64,
+ 0x2a34, 0x4e1c, 0x064c, 0x1804, 0x3c64,
+ 0x3c34, 0x061c, 0x184c, 0x2a04, 0x4e64,
+ 0x4e34, 0x181c, 0x2a4c, 0x3c04, 0x0664,
+ 0x0634, 0x2a1c, 0x3c4c, 0x4e04, 0x1864,
+ 0x1836, 0x3c1e, 0x4e4e, 0x0606, 0x2a66,
+ 0x2a36, 0x4e1e, 0x064e, 0x1806, 0x3c66,
+ 0x3c36, 0x061e, 0x184e, 0x2a06, 0x4e66,
+ 0x4e36, 0x181e, 0x2a4e, 0x3c06, 0x0666,
+ 0x0636, 0x2a1e, 0x3c4e, 0x4e06, 0x1866,
+ 0x1838, 0x3c20, 0x4e50, 0x0608, 0x2a68,
+ 0x2a38, 0x4e20, 0x0650, 0x1808, 0x3c68,
+ 0x3c38, 0x0620, 0x1850, 0x2a08, 0x4e68,
+ 0x4e38, 0x1820, 0x2a50, 0x3c08, 0x0668,
+ 0x0638, 0x2a20, 0x3c50, 0x4e08, 0x1868,
+ 0x183a, 0x3c22, 0x4e52, 0x060a, 0x2a6a,
+ 0x2a3a, 0x4e22, 0x0652, 0x180a, 0x3c6a,
+ 0x3c3a, 0x0622, 0x1852, 0x2a0a, 0x4e6a,
+ 0x4e3a, 0x1822, 0x2a52, 0x3c0a, 0x066a,
+ 0x063a, 0x2a22, 0x3c52, 0x4e0a, 0x186a,
+ 0x1a30, 0x3e18, 0x5048, 0x0800, 0x2c60,
+ 0x2c30, 0x5018, 0x0848, 0x1a00, 0x3e60,
+ 0x3e30, 0x0818, 0x1a48, 0x2c00, 0x5060,
+ 0x5030, 0x1a18, 0x2c48, 0x3e00, 0x0860,
+ 0x0830, 0x2c18, 0x3e48, 0x5000, 0x1a60,
+ 0x1a32, 0x3e1a, 0x504a, 0x0802, 0x2c62,
+ 0x2c32, 0x501a, 0x084a, 0x1a02, 0x3e62,
+ 0x3e32, 0x081a, 0x1a4a, 0x2c02, 0x5062,
+ 0x5032, 0x1a1a, 0x2c4a, 0x3e02, 0x0862,
+ 0x0832, 0x2c1a, 0x3e4a, 0x5002, 0x1a62,
+ 0x1a34, 0x3e1c, 0x504c, 0x0804, 0x2c64,
+ 0x2c34, 0x501c, 0x084c, 0x1a04, 0x3e64,
+ 0x3e34, 0x081c, 0x1a4c, 0x2c04, 0x5064,
+ 0x5034, 0x1a1c, 0x2c4c, 0x3e04, 0x0864,
+ 0x0834, 0x2c1c, 0x3e4c, 0x5004, 0x1a64,
+ 0x1a36, 0x3e1e, 0x504e, 0x0806, 0x2c66,
+ 0x2c36, 0x501e, 0x084e, 0x1a06, 0x3e66,
+ 0x3e36, 0x081e, 0x1a4e, 0x2c06, 0x5066,
+ 0x5036, 0x1a1e, 0x2c4e, 0x3e06, 0x0866,
+ 0x0836, 0x2c1e, 0x3e4e, 0x5006, 0x1a66,
+ 0x1a38, 0x3e20, 0x5050, 0x0808, 0x2c68,
+ 0x2c38, 0x5020, 0x0850, 0x1a08, 0x3e68,
+ 0x3e38, 0x0820, 0x1a50, 0x2c08, 0x5068,
+ 0x5038, 0x1a20, 0x2c50, 0x3e08, 0x0868,
+ 0x0838, 0x2c20, 0x3e50, 0x5008, 0x1a68,
+ 0x1a3a, 0x3e22, 0x5052, 0x080a, 0x2c6a,
+ 0x2c3a, 0x5022, 0x0852, 0x1a0a, 0x3e6a,
+ 0x3e3a, 0x0822, 0x1a52, 0x2c0a, 0x506a,
+ 0x503a, 0x1a22, 0x2c52, 0x3e0a, 0x086a,
+ 0x083a, 0x2c22, 0x3e52, 0x500a, 0x1a6a,
+ 0x1c30, 0x4018, 0x5248, 0x0a00, 0x2e60,
+ 0x2e30, 0x5218, 0x0a48, 0x1c00, 0x4060,
+ 0x4030, 0x0a18, 0x1c48, 0x2e00, 0x5260,
+ 0x5230, 0x1c18, 0x2e48, 0x4000, 0x0a60,
+ 0x0a30, 0x2e18, 0x4048, 0x5200, 0x1c60,
+ 0x1c32, 0x401a, 0x524a, 0x0a02, 0x2e62,
+ 0x2e32, 0x521a, 0x0a4a, 0x1c02, 0x4062,
+ 0x4032, 0x0a1a, 0x1c4a, 0x2e02, 0x5262,
+ 0x5232, 0x1c1a, 0x2e4a, 0x4002, 0x0a62,
+ 0x0a32, 0x2e1a, 0x404a, 0x5202, 0x1c62,
+ 0x1c34, 0x401c, 0x524c, 0x0a04, 0x2e64,
+ 0x2e34, 0x521c, 0x0a4c, 0x1c04, 0x4064,
+ 0x4034, 0x0a1c, 0x1c4c, 0x2e04, 0x5264,
+ 0x5234, 0x1c1c, 0x2e4c, 0x4004, 0x0a64,
+ 0x0a34, 0x2e1c, 0x404c, 0x5204, 0x1c64,
+ 0x1c36, 0x401e, 0x524e, 0x0a06, 0x2e66,
+ 0x2e36, 0x521e, 0x0a4e, 0x1c06, 0x4066,
+ 0x4036, 0x0a1e, 0x1c4e, 0x2e06, 0x5266,
+ 0x5236, 0x1c1e, 0x2e4e, 0x4006, 0x0a66,
+ 0x0a36, 0x2e1e, 0x404e, 0x5206, 0x1c66,
+ 0x1c38, 0x4020, 0x5250, 0x0a08, 0x2e68,
+ 0x2e38, 0x5220, 0x0a50, 0x1c08, 0x4068,
+ 0x4038, 0x0a20, 0x1c50, 0x2e08, 0x5268,
+ 0x5238, 0x1c20, 0x2e50, 0x4008, 0x0a68,
+ 0x0a38, 0x2e20, 0x4050, 0x5208, 0x1c68,
+ 0x1c3a, 0x4022, 0x5252, 0x0a0a, 0x2e6a,
+ 0x2e3a, 0x5222, 0x0a52, 0x1c0a, 0x406a,
+ 0x403a, 0x0a22, 0x1c52, 0x2e0a, 0x526a,
+ 0x523a, 0x1c22, 0x2e52, 0x400a, 0x0a6a,
+ 0x0a3a, 0x2e22, 0x4052, 0x520a, 0x1c6a,
+ 0x1e30, 0x4218, 0x5448, 0x0c00, 0x3060,
+ 0x3030, 0x5418, 0x0c48, 0x1e00, 0x4260,
+ 0x4230, 0x0c18, 0x1e48, 0x3000, 0x5460,
+ 0x5430, 0x1e18, 0x3048, 0x4200, 0x0c60,
+ 0x0c30, 0x3018, 0x4248, 0x5400, 0x1e60,
+ 0x1e32, 0x421a, 0x544a, 0x0c02, 0x3062,
+ 0x3032, 0x541a, 0x0c4a, 0x1e02, 0x4262,
+ 0x4232, 0x0c1a, 0x1e4a, 0x3002, 0x5462,
+ 0x5432, 0x1e1a, 0x304a, 0x4202, 0x0c62,
+ 0x0c32, 0x301a, 0x424a, 0x5402, 0x1e62,
+ 0x1e34, 0x421c, 0x544c, 0x0c04, 0x3064,
+ 0x3034, 0x541c, 0x0c4c, 0x1e04, 0x4264,
+ 0x4234, 0x0c1c, 0x1e4c, 0x3004, 0x5464,
+ 0x5434, 0x1e1c, 0x304c, 0x4204, 0x0c64,
+ 0x0c34, 0x301c, 0x424c, 0x5404, 0x1e64,
+ 0x1e36, 0x421e, 0x544e, 0x0c06, 0x3066,
+ 0x3036, 0x541e, 0x0c4e, 0x1e06, 0x4266,
+ 0x4236, 0x0c1e, 0x1e4e, 0x3006, 0x5466,
+ 0x5436, 0x1e1e, 0x304e, 0x4206, 0x0c66,
+ 0x0c36, 0x301e, 0x424e, 0x5406, 0x1e66,
+ 0x1e38, 0x4220, 0x5450, 0x0c08, 0x3068,
+ 0x3038, 0x5420, 0x0c50, 0x1e08, 0x4268,
+ 0x4238, 0x0c20, 0x1e50, 0x3008, 0x5468,
+ 0x5438, 0x1e20, 0x3050, 0x4208, 0x0c68,
+ 0x0c38, 0x3020, 0x4250, 0x5408, 0x1e68,
+ 0x1e3a, 0x4222, 0x5452, 0x0c0a, 0x306a,
+ 0x303a, 0x5422, 0x0c52, 0x1e0a, 0x426a,
+ 0x423a, 0x0c22, 0x1e52, 0x300a, 0x546a,
+ 0x543a, 0x1e22, 0x3052, 0x420a, 0x0c6a,
+ 0x0c3a, 0x3022, 0x4252, 0x540a, 0x1e6a,
+ 0x2030, 0x4418, 0x5648, 0x0e00, 0x3260,
+ 0x3230, 0x5618, 0x0e48, 0x2000, 0x4460,
+ 0x4430, 0x0e18, 0x2048, 0x3200, 0x5660,
+ 0x5630, 0x2018, 0x3248, 0x4400, 0x0e60,
+ 0x0e30, 0x3218, 0x4448, 0x5600, 0x2060,
+ 0x2032, 0x441a, 0x564a, 0x0e02, 0x3262,
+ 0x3232, 0x561a, 0x0e4a, 0x2002, 0x4462,
+ 0x4432, 0x0e1a, 0x204a, 0x3202, 0x5662,
+ 0x5632, 0x201a, 0x324a, 0x4402, 0x0e62,
+ 0x0e32, 0x321a, 0x444a, 0x5602, 0x2062,
+ 0x2034, 0x441c, 0x564c, 0x0e04, 0x3264,
+ 0x3234, 0x561c, 0x0e4c, 0x2004, 0x4464,
+ 0x4434, 0x0e1c, 0x204c, 0x3204, 0x5664,
+ 0x5634, 0x201c, 0x324c, 0x4404, 0x0e64,
+ 0x0e34, 0x321c, 0x444c, 0x5604, 0x2064,
+ 0x2036, 0x441e, 0x564e, 0x0e06, 0x3266,
+ 0x3236, 0x561e, 0x0e4e, 0x2006, 0x4466,
+ 0x4436, 0x0e1e, 0x204e, 0x3206, 0x5666,
+ 0x5636, 0x201e, 0x324e, 0x4406, 0x0e66,
+ 0x0e36, 0x321e, 0x444e, 0x5606, 0x2066,
+ 0x2038, 0x4420, 0x5650, 0x0e08, 0x3268,
+ 0x3238, 0x5620, 0x0e50, 0x2008, 0x4468,
+ 0x4438, 0x0e20, 0x2050, 0x3208, 0x5668,
+ 0x5638, 0x2020, 0x3250, 0x4408, 0x0e68,
+ 0x0e38, 0x3220, 0x4450, 0x5608, 0x2068,
+ 0x203a, 0x4422, 0x5652, 0x0e0a, 0x326a,
+ 0x323a, 0x5622, 0x0e52, 0x200a, 0x446a,
+ 0x443a, 0x0e22, 0x2052, 0x320a, 0x566a,
+ 0x563a, 0x2022, 0x3252, 0x440a, 0x0e6a,
+ 0x0e3a, 0x3222, 0x4452, 0x560a, 0x206a,
+ 0x2230, 0x4618, 0x5848, 0x1000, 0x3460,
+ 0x3430, 0x5818, 0x1048, 0x2200, 0x4660,
+ 0x4630, 0x1018, 0x2248, 0x3400, 0x5860,
+ 0x5830, 0x2218, 0x3448, 0x4600, 0x1060,
+ 0x1030, 0x3418, 0x4648, 0x5800, 0x2260,
+ 0x2232, 0x461a, 0x584a, 0x1002, 0x3462,
+ 0x3432, 0x581a, 0x104a, 0x2202, 0x4662,
+ 0x4632, 0x101a, 0x224a, 0x3402, 0x5862,
+ 0x5832, 0x221a, 0x344a, 0x4602, 0x1062,
+ 0x1032, 0x341a, 0x464a, 0x5802, 0x2262,
+ 0x2234, 0x461c, 0x584c, 0x1004, 0x3464,
+ 0x3434, 0x581c, 0x104c, 0x2204, 0x4664,
+ 0x4634, 0x101c, 0x224c, 0x3404, 0x5864,
+ 0x5834, 0x221c, 0x344c, 0x4604, 0x1064,
+ 0x1034, 0x341c, 0x464c, 0x5804, 0x2264,
+ 0x2236, 0x461e, 0x584e, 0x1006, 0x3466,
+ 0x3436, 0x581e, 0x104e, 0x2206, 0x4666,
+ 0x4636, 0x101e, 0x224e, 0x3406, 0x5866,
+ 0x5836, 0x221e, 0x344e, 0x4606, 0x1066,
+ 0x1036, 0x341e, 0x464e, 0x5806, 0x2266,
+ 0x2238, 0x4620, 0x5850, 0x1008, 0x3468,
+ 0x3438, 0x5820, 0x1050, 0x2208, 0x4668,
+ 0x4638, 0x1020, 0x2250, 0x3408, 0x5868,
+ 0x5838, 0x2220, 0x3450, 0x4608, 0x1068,
+ 0x1038, 0x3420, 0x4650, 0x5808, 0x2268,
+ 0x223a, 0x4622, 0x5852, 0x100a, 0x346a,
+ 0x343a, 0x5822, 0x1052, 0x220a, 0x466a,
+ 0x463a, 0x1022, 0x2252, 0x340a, 0x586a,
+ 0x583a, 0x2222, 0x3452, 0x460a, 0x106a,
+ 0x103a, 0x3422, 0x4652, 0x580a, 0x226a,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x363c, 0x0024, 0x1254, 0x240c, 0x486c,
+ 0x483c, 0x1224, 0x2454, 0x360c, 0x006c,
+ 0x003c, 0x2424, 0x3654, 0x480c, 0x126c,
+ 0x123c, 0x3624, 0x4854, 0x000c, 0x246c,
+ 0x243c, 0x4824, 0x0054, 0x120c, 0x366c,
+ 0x363e, 0x0026, 0x1256, 0x240e, 0x486e,
+ 0x483e, 0x1226, 0x2456, 0x360e, 0x006e,
+ 0x003e, 0x2426, 0x3656, 0x480e, 0x126e,
+ 0x123e, 0x3626, 0x4856, 0x000e, 0x246e,
+ 0x243e, 0x4826, 0x0056, 0x120e, 0x366e,
+ 0x3640, 0x0028, 0x1258, 0x2410, 0x4870,
+ 0x4840, 0x1228, 0x2458, 0x3610, 0x0070,
+ 0x0040, 0x2428, 0x3658, 0x4810, 0x1270,
+ 0x1240, 0x3628, 0x4858, 0x0010, 0x2470,
+ 0x2440, 0x4828, 0x0058, 0x1210, 0x3670,
+ 0x3642, 0x002a, 0x125a, 0x2412, 0x4872,
+ 0x4842, 0x122a, 0x245a, 0x3612, 0x0072,
+ 0x0042, 0x242a, 0x365a, 0x4812, 0x1272,
+ 0x1242, 0x362a, 0x485a, 0x0012, 0x2472,
+ 0x2442, 0x482a, 0x005a, 0x1212, 0x3672,
+ 0x3644, 0x002c, 0x125c, 0x2414, 0x4874,
+ 0x4844, 0x122c, 0x245c, 0x3614, 0x0074,
+ 0x0044, 0x242c, 0x365c, 0x4814, 0x1274,
+ 0x1244, 0x362c, 0x485c, 0x0014, 0x2474,
+ 0x2444, 0x482c, 0x005c, 0x1214, 0x3674,
+ 0x3646, 0x002e, 0x125e, 0x2416, 0x4876,
+ 0x4846, 0x122e, 0x245e, 0x3616, 0x0076,
+ 0x0046, 0x242e, 0x365e, 0x4816, 0x1276,
+ 0x1246, 0x362e, 0x485e, 0x0016, 0x2476,
+ 0x2446, 0x482e, 0x005e, 0x1216, 0x3676,
+ 0x383c, 0x0224, 0x1454, 0x260c, 0x4a6c,
+ 0x4a3c, 0x1424, 0x2654, 0x380c, 0x026c,
+ 0x023c, 0x2624, 0x3854, 0x4a0c, 0x146c,
+ 0x143c, 0x3824, 0x4a54, 0x020c, 0x266c,
+ 0x263c, 0x4a24, 0x0254, 0x140c, 0x386c,
+ 0x383e, 0x0226, 0x1456, 0x260e, 0x4a6e,
+ 0x4a3e, 0x1426, 0x2656, 0x380e, 0x026e,
+ 0x023e, 0x2626, 0x3856, 0x4a0e, 0x146e,
+ 0x143e, 0x3826, 0x4a56, 0x020e, 0x266e,
+ 0x263e, 0x4a26, 0x0256, 0x140e, 0x386e,
+ 0x3840, 0x0228, 0x1458, 0x2610, 0x4a70,
+ 0x4a40, 0x1428, 0x2658, 0x3810, 0x0270,
+ 0x0240, 0x2628, 0x3858, 0x4a10, 0x1470,
+ 0x1440, 0x3828, 0x4a58, 0x0210, 0x2670,
+ 0x2640, 0x4a28, 0x0258, 0x1410, 0x3870,
+ 0x3842, 0x022a, 0x145a, 0x2612, 0x4a72,
+ 0x4a42, 0x142a, 0x265a, 0x3812, 0x0272,
+ 0x0242, 0x262a, 0x385a, 0x4a12, 0x1472,
+ 0x1442, 0x382a, 0x4a5a, 0x0212, 0x2672,
+ 0x2642, 0x4a2a, 0x025a, 0x1412, 0x3872,
+ 0x3844, 0x022c, 0x145c, 0x2614, 0x4a74,
+ 0x4a44, 0x142c, 0x265c, 0x3814, 0x0274,
+ 0x0244, 0x262c, 0x385c, 0x4a14, 0x1474,
+ 0x1444, 0x382c, 0x4a5c, 0x0214, 0x2674,
+ 0x2644, 0x4a2c, 0x025c, 0x1414, 0x3874,
+ 0x3846, 0x022e, 0x145e, 0x2616, 0x4a76,
+ 0x4a46, 0x142e, 0x265e, 0x3816, 0x0276,
+ 0x0246, 0x262e, 0x385e, 0x4a16, 0x1476,
+ 0x1446, 0x382e, 0x4a5e, 0x0216, 0x2676,
+ 0x2646, 0x4a2e, 0x025e, 0x1416, 0x3876,
+ 0x3a3c, 0x0424, 0x1654, 0x280c, 0x4c6c,
+ 0x4c3c, 0x1624, 0x2854, 0x3a0c, 0x046c,
+ 0x043c, 0x2824, 0x3a54, 0x4c0c, 0x166c,
+ 0x163c, 0x3a24, 0x4c54, 0x040c, 0x286c,
+ 0x283c, 0x4c24, 0x0454, 0x160c, 0x3a6c,
+ 0x3a3e, 0x0426, 0x1656, 0x280e, 0x4c6e,
+ 0x4c3e, 0x1626, 0x2856, 0x3a0e, 0x046e,
+ 0x043e, 0x2826, 0x3a56, 0x4c0e, 0x166e,
+ 0x163e, 0x3a26, 0x4c56, 0x040e, 0x286e,
+ 0x283e, 0x4c26, 0x0456, 0x160e, 0x3a6e,
+ 0x3a40, 0x0428, 0x1658, 0x2810, 0x4c70,
+ 0x4c40, 0x1628, 0x2858, 0x3a10, 0x0470,
+ 0x0440, 0x2828, 0x3a58, 0x4c10, 0x1670,
+ 0x1640, 0x3a28, 0x4c58, 0x0410, 0x2870,
+ 0x2840, 0x4c28, 0x0458, 0x1610, 0x3a70,
+ 0x3a42, 0x042a, 0x165a, 0x2812, 0x4c72,
+ 0x4c42, 0x162a, 0x285a, 0x3a12, 0x0472,
+ 0x0442, 0x282a, 0x3a5a, 0x4c12, 0x1672,
+ 0x1642, 0x3a2a, 0x4c5a, 0x0412, 0x2872,
+ 0x2842, 0x4c2a, 0x045a, 0x1612, 0x3a72,
+ 0x3a44, 0x042c, 0x165c, 0x2814, 0x4c74,
+ 0x4c44, 0x162c, 0x285c, 0x3a14, 0x0474,
+ 0x0444, 0x282c, 0x3a5c, 0x4c14, 0x1674,
+ 0x1644, 0x3a2c, 0x4c5c, 0x0414, 0x2874,
+ 0x2844, 0x4c2c, 0x045c, 0x1614, 0x3a74,
+ 0x3a46, 0x042e, 0x165e, 0x2816, 0x4c76,
+ 0x4c46, 0x162e, 0x285e, 0x3a16, 0x0476,
+ 0x0446, 0x282e, 0x3a5e, 0x4c16, 0x1676,
+ 0x1646, 0x3a2e, 0x4c5e, 0x0416, 0x2876,
+ 0x2846, 0x4c2e, 0x045e, 0x1616, 0x3a76,
+ 0x3c3c, 0x0624, 0x1854, 0x2a0c, 0x4e6c,
+ 0x4e3c, 0x1824, 0x2a54, 0x3c0c, 0x066c,
+ 0x063c, 0x2a24, 0x3c54, 0x4e0c, 0x186c,
+ 0x183c, 0x3c24, 0x4e54, 0x060c, 0x2a6c,
+ 0x2a3c, 0x4e24, 0x0654, 0x180c, 0x3c6c,
+ 0x3c3e, 0x0626, 0x1856, 0x2a0e, 0x4e6e,
+ 0x4e3e, 0x1826, 0x2a56, 0x3c0e, 0x066e,
+ 0x063e, 0x2a26, 0x3c56, 0x4e0e, 0x186e,
+ 0x183e, 0x3c26, 0x4e56, 0x060e, 0x2a6e,
+ 0x2a3e, 0x4e26, 0x0656, 0x180e, 0x3c6e,
+ 0x3c40, 0x0628, 0x1858, 0x2a10, 0x4e70,
+ 0x4e40, 0x1828, 0x2a58, 0x3c10, 0x0670,
+ 0x0640, 0x2a28, 0x3c58, 0x4e10, 0x1870,
+ 0x1840, 0x3c28, 0x4e58, 0x0610, 0x2a70,
+ 0x2a40, 0x4e28, 0x0658, 0x1810, 0x3c70,
+ 0x3c42, 0x062a, 0x185a, 0x2a12, 0x4e72,
+ 0x4e42, 0x182a, 0x2a5a, 0x3c12, 0x0672,
+ 0x0642, 0x2a2a, 0x3c5a, 0x4e12, 0x1872,
+ 0x1842, 0x3c2a, 0x4e5a, 0x0612, 0x2a72,
+ 0x2a42, 0x4e2a, 0x065a, 0x1812, 0x3c72,
+ 0x3c44, 0x062c, 0x185c, 0x2a14, 0x4e74,
+ 0x4e44, 0x182c, 0x2a5c, 0x3c14, 0x0674,
+ 0x0644, 0x2a2c, 0x3c5c, 0x4e14, 0x1874,
+ 0x1844, 0x3c2c, 0x4e5c, 0x0614, 0x2a74,
+ 0x2a44, 0x4e2c, 0x065c, 0x1814, 0x3c74,
+ 0x3c46, 0x062e, 0x185e, 0x2a16, 0x4e76,
+ 0x4e46, 0x182e, 0x2a5e, 0x3c16, 0x0676,
+ 0x0646, 0x2a2e, 0x3c5e, 0x4e16, 0x1876,
+ 0x1846, 0x3c2e, 0x4e5e, 0x0616, 0x2a76,
+ 0x2a46, 0x4e2e, 0x065e, 0x1816, 0x3c76,
+ 0x3e3c, 0x0824, 0x1a54, 0x2c0c, 0x506c,
+ 0x503c, 0x1a24, 0x2c54, 0x3e0c, 0x086c,
+ 0x083c, 0x2c24, 0x3e54, 0x500c, 0x1a6c,
+ 0x1a3c, 0x3e24, 0x5054, 0x080c, 0x2c6c,
+ 0x2c3c, 0x5024, 0x0854, 0x1a0c, 0x3e6c,
+ 0x3e3e, 0x0826, 0x1a56, 0x2c0e, 0x506e,
+ 0x503e, 0x1a26, 0x2c56, 0x3e0e, 0x086e,
+ 0x083e, 0x2c26, 0x3e56, 0x500e, 0x1a6e,
+ 0x1a3e, 0x3e26, 0x5056, 0x080e, 0x2c6e,
+ 0x2c3e, 0x5026, 0x0856, 0x1a0e, 0x3e6e,
+ 0x3e40, 0x0828, 0x1a58, 0x2c10, 0x5070,
+ 0x5040, 0x1a28, 0x2c58, 0x3e10, 0x0870,
+ 0x0840, 0x2c28, 0x3e58, 0x5010, 0x1a70,
+ 0x1a40, 0x3e28, 0x5058, 0x0810, 0x2c70,
+ 0x2c40, 0x5028, 0x0858, 0x1a10, 0x3e70,
+ 0x3e42, 0x082a, 0x1a5a, 0x2c12, 0x5072,
+ 0x5042, 0x1a2a, 0x2c5a, 0x3e12, 0x0872,
+ 0x0842, 0x2c2a, 0x3e5a, 0x5012, 0x1a72,
+ 0x1a42, 0x3e2a, 0x505a, 0x0812, 0x2c72,
+ 0x2c42, 0x502a, 0x085a, 0x1a12, 0x3e72,
+ 0x3e44, 0x082c, 0x1a5c, 0x2c14, 0x5074,
+ 0x5044, 0x1a2c, 0x2c5c, 0x3e14, 0x0874,
+ 0x0844, 0x2c2c, 0x3e5c, 0x5014, 0x1a74,
+ 0x1a44, 0x3e2c, 0x505c, 0x0814, 0x2c74,
+ 0x2c44, 0x502c, 0x085c, 0x1a14, 0x3e74,
+ 0x3e46, 0x082e, 0x1a5e, 0x2c16, 0x5076,
+ 0x5046, 0x1a2e, 0x2c5e, 0x3e16, 0x0876,
+ 0x0846, 0x2c2e, 0x3e5e, 0x5016, 0x1a76,
+ 0x1a46, 0x3e2e, 0x505e, 0x0816, 0x2c76,
+ 0x2c46, 0x502e, 0x085e, 0x1a16, 0x3e76,
+ 0x403c, 0x0a24, 0x1c54, 0x2e0c, 0x526c,
+ 0x523c, 0x1c24, 0x2e54, 0x400c, 0x0a6c,
+ 0x0a3c, 0x2e24, 0x4054, 0x520c, 0x1c6c,
+ 0x1c3c, 0x4024, 0x5254, 0x0a0c, 0x2e6c,
+ 0x2e3c, 0x5224, 0x0a54, 0x1c0c, 0x406c,
+ 0x403e, 0x0a26, 0x1c56, 0x2e0e, 0x526e,
+ 0x523e, 0x1c26, 0x2e56, 0x400e, 0x0a6e,
+ 0x0a3e, 0x2e26, 0x4056, 0x520e, 0x1c6e,
+ 0x1c3e, 0x4026, 0x5256, 0x0a0e, 0x2e6e,
+ 0x2e3e, 0x5226, 0x0a56, 0x1c0e, 0x406e,
+ 0x4040, 0x0a28, 0x1c58, 0x2e10, 0x5270,
+ 0x5240, 0x1c28, 0x2e58, 0x4010, 0x0a70,
+ 0x0a40, 0x2e28, 0x4058, 0x5210, 0x1c70,
+ 0x1c40, 0x4028, 0x5258, 0x0a10, 0x2e70,
+ 0x2e40, 0x5228, 0x0a58, 0x1c10, 0x4070,
+ 0x4042, 0x0a2a, 0x1c5a, 0x2e12, 0x5272,
+ 0x5242, 0x1c2a, 0x2e5a, 0x4012, 0x0a72,
+ 0x0a42, 0x2e2a, 0x405a, 0x5212, 0x1c72,
+ 0x1c42, 0x402a, 0x525a, 0x0a12, 0x2e72,
+ 0x2e42, 0x522a, 0x0a5a, 0x1c12, 0x4072,
+ 0x4044, 0x0a2c, 0x1c5c, 0x2e14, 0x5274,
+ 0x5244, 0x1c2c, 0x2e5c, 0x4014, 0x0a74,
+ 0x0a44, 0x2e2c, 0x405c, 0x5214, 0x1c74,
+ 0x1c44, 0x402c, 0x525c, 0x0a14, 0x2e74,
+ 0x2e44, 0x522c, 0x0a5c, 0x1c14, 0x4074,
+ 0x4046, 0x0a2e, 0x1c5e, 0x2e16, 0x5276,
+ 0x5246, 0x1c2e, 0x2e5e, 0x4016, 0x0a76,
+ 0x0a46, 0x2e2e, 0x405e, 0x5216, 0x1c76,
+ 0x1c46, 0x402e, 0x525e, 0x0a16, 0x2e76,
+ 0x2e46, 0x522e, 0x0a5e, 0x1c16, 0x4076,
+ 0x423c, 0x0c24, 0x1e54, 0x300c, 0x546c,
+ 0x543c, 0x1e24, 0x3054, 0x420c, 0x0c6c,
+ 0x0c3c, 0x3024, 0x4254, 0x540c, 0x1e6c,
+ 0x1e3c, 0x4224, 0x5454, 0x0c0c, 0x306c,
+ 0x303c, 0x5424, 0x0c54, 0x1e0c, 0x426c,
+ 0x423e, 0x0c26, 0x1e56, 0x300e, 0x546e,
+ 0x543e, 0x1e26, 0x3056, 0x420e, 0x0c6e,
+ 0x0c3e, 0x3026, 0x4256, 0x540e, 0x1e6e,
+ 0x1e3e, 0x4226, 0x5456, 0x0c0e, 0x306e,
+ 0x303e, 0x5426, 0x0c56, 0x1e0e, 0x426e,
+ 0x4240, 0x0c28, 0x1e58, 0x3010, 0x5470,
+ 0x5440, 0x1e28, 0x3058, 0x4210, 0x0c70,
+ 0x0c40, 0x3028, 0x4258, 0x5410, 0x1e70,
+ 0x1e40, 0x4228, 0x5458, 0x0c10, 0x3070,
+ 0x3040, 0x5428, 0x0c58, 0x1e10, 0x4270,
+ 0x4242, 0x0c2a, 0x1e5a, 0x3012, 0x5472,
+ 0x5442, 0x1e2a, 0x305a, 0x4212, 0x0c72,
+ 0x0c42, 0x302a, 0x425a, 0x5412, 0x1e72,
+ 0x1e42, 0x422a, 0x545a, 0x0c12, 0x3072,
+ 0x3042, 0x542a, 0x0c5a, 0x1e12, 0x4272,
+ 0x4244, 0x0c2c, 0x1e5c, 0x3014, 0x5474,
+ 0x5444, 0x1e2c, 0x305c, 0x4214, 0x0c74,
+ 0x0c44, 0x302c, 0x425c, 0x5414, 0x1e74,
+ 0x1e44, 0x422c, 0x545c, 0x0c14, 0x3074,
+ 0x3044, 0x542c, 0x0c5c, 0x1e14, 0x4274,
+ 0x4246, 0x0c2e, 0x1e5e, 0x3016, 0x5476,
+ 0x5446, 0x1e2e, 0x305e, 0x4216, 0x0c76,
+ 0x0c46, 0x302e, 0x425e, 0x5416, 0x1e76,
+ 0x1e46, 0x422e, 0x545e, 0x0c16, 0x3076,
+ 0x3046, 0x542e, 0x0c5e, 0x1e16, 0x4276,
+ 0x443c, 0x0e24, 0x2054, 0x320c, 0x566c,
+ 0x563c, 0x2024, 0x3254, 0x440c, 0x0e6c,
+ 0x0e3c, 0x3224, 0x4454, 0x560c, 0x206c,
+ 0x203c, 0x4424, 0x5654, 0x0e0c, 0x326c,
+ 0x323c, 0x5624, 0x0e54, 0x200c, 0x446c,
+ 0x443e, 0x0e26, 0x2056, 0x320e, 0x566e,
+ 0x563e, 0x2026, 0x3256, 0x440e, 0x0e6e,
+ 0x0e3e, 0x3226, 0x4456, 0x560e, 0x206e,
+ 0x203e, 0x4426, 0x5656, 0x0e0e, 0x326e,
+ 0x323e, 0x5626, 0x0e56, 0x200e, 0x446e,
+ 0x4440, 0x0e28, 0x2058, 0x3210, 0x5670,
+ 0x5640, 0x2028, 0x3258, 0x4410, 0x0e70,
+ 0x0e40, 0x3228, 0x4458, 0x5610, 0x2070,
+ 0x2040, 0x4428, 0x5658, 0x0e10, 0x3270,
+ 0x3240, 0x5628, 0x0e58, 0x2010, 0x4470,
+ 0x4442, 0x0e2a, 0x205a, 0x3212, 0x5672,
+ 0x5642, 0x202a, 0x325a, 0x4412, 0x0e72,
+ 0x0e42, 0x322a, 0x445a, 0x5612, 0x2072,
+ 0x2042, 0x442a, 0x565a, 0x0e12, 0x3272,
+ 0x3242, 0x562a, 0x0e5a, 0x2012, 0x4472,
+ 0x4444, 0x0e2c, 0x205c, 0x3214, 0x5674,
+ 0x5644, 0x202c, 0x325c, 0x4414, 0x0e74,
+ 0x0e44, 0x322c, 0x445c, 0x5614, 0x2074,
+ 0x2044, 0x442c, 0x565c, 0x0e14, 0x3274,
+ 0x3244, 0x562c, 0x0e5c, 0x2014, 0x4474,
+ 0x4446, 0x0e2e, 0x205e, 0x3216, 0x5676,
+ 0x5646, 0x202e, 0x325e, 0x4416, 0x0e76,
+ 0x0e46, 0x322e, 0x445e, 0x5616, 0x2076,
+ 0x2046, 0x442e, 0x565e, 0x0e16, 0x3276,
+ 0x3246, 0x562e, 0x0e5e, 0x2016, 0x4476,
+ 0x463c, 0x1024, 0x2254, 0x340c, 0x586c,
+ 0x583c, 0x2224, 0x3454, 0x460c, 0x106c,
+ 0x103c, 0x3424, 0x4654, 0x580c, 0x226c,
+ 0x223c, 0x4624, 0x5854, 0x100c, 0x346c,
+ 0x343c, 0x5824, 0x1054, 0x220c, 0x466c,
+ 0x463e, 0x1026, 0x2256, 0x340e, 0x586e,
+ 0x583e, 0x2226, 0x3456, 0x460e, 0x106e,
+ 0x103e, 0x3426, 0x4656, 0x580e, 0x226e,
+ 0x223e, 0x4626, 0x5856, 0x100e, 0x346e,
+ 0x343e, 0x5826, 0x1056, 0x220e, 0x466e,
+ 0x4640, 0x1028, 0x2258, 0x3410, 0x5870,
+ 0x5840, 0x2228, 0x3458, 0x4610, 0x1070,
+ 0x1040, 0x3428, 0x4658, 0x5810, 0x2270,
+ 0x2240, 0x4628, 0x5858, 0x1010, 0x3470,
+ 0x3440, 0x5828, 0x1058, 0x2210, 0x4670,
+ 0x4642, 0x102a, 0x225a, 0x3412, 0x5872,
+ 0x5842, 0x222a, 0x345a, 0x4612, 0x1072,
+ 0x1042, 0x342a, 0x465a, 0x5812, 0x2272,
+ 0x2242, 0x462a, 0x585a, 0x1012, 0x3472,
+ 0x3442, 0x582a, 0x105a, 0x2212, 0x4672,
+ 0x4644, 0x102c, 0x225c, 0x3414, 0x5874,
+ 0x5844, 0x222c, 0x345c, 0x4614, 0x1074,
+ 0x1044, 0x342c, 0x465c, 0x5814, 0x2274,
+ 0x2244, 0x462c, 0x585c, 0x1014, 0x3474,
+ 0x3444, 0x582c, 0x105c, 0x2214, 0x4674,
+ 0x4646, 0x102e, 0x225e, 0x3416, 0x5876,
+ 0x5846, 0x222e, 0x345e, 0x4616, 0x1076,
+ 0x1046, 0x342e, 0x465e, 0x5816, 0x2276,
+ 0x2246, 0x462e, 0x585e, 0x1016, 0x3476,
+ 0x3446, 0x582e, 0x105e, 0x2216, 0x4676,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+};
+
+
 /* DV25/50 DCT coefficient weights and inverse weights */
 /* created by dvtables.py */
 static const int dv_weight_bits = 18;
@@ -460,20 +6159,6 @@ static const uint8_t block_sizes_dv100[8] = {
     80, 80, 80, 80, 80, 80, 64, 64,
 };
 
-static DVwork_chunk work_chunks_dv25pal   [1*12*27];
-static DVwork_chunk work_chunks_dv25pal411[1*12*27];
-static DVwork_chunk work_chunks_dv25ntsc  [1*10*27];
-static DVwork_chunk work_chunks_dv50pal   [2*12*27];
-static DVwork_chunk work_chunks_dv50ntsc  [2*10*27];
-static DVwork_chunk work_chunks_dv100palp [2*12*27];
-static DVwork_chunk work_chunks_dv100ntscp[2*10*27];
-static DVwork_chunk work_chunks_dv100pali [4*12*27];
-static DVwork_chunk work_chunks_dv100ntsci[4*10*27];
-
-static uint32_t dv_idct_factor_sd    [2*2*22*64];
-static uint32_t dv_idct_factor_hd1080[2*4*16*64];
-static uint32_t dv_idct_factor_hd720 [2*4*16*64];
-
 static const DVprofile dv_profiles[] = {
     { .dsf = 0,
       .video_stype = 0x0,
@@ -485,8 +6170,7 @@ static const DVprofile dv_profiles[] = {
       .height = 480,
       .width = 720,
       .sar = {{10, 11}, {40, 33}},
-      .work_chunks = &work_chunks_dv25ntsc[0],
-      .idct_factor = &dv_idct_factor_sd[0],
+      .video_place = dv_place_411,
       .pix_fmt = PIX_FMT_YUV411P,
       .bpm = 6,
       .block_sizes = block_sizes_dv2550,
@@ -505,8 +6189,7 @@ static const DVprofile dv_profiles[] = {
       .height = 576,
       .width = 720,
       .sar = {{59, 54}, {118, 81}},
-      .work_chunks = &work_chunks_dv25pal[0],
-      .idct_factor = &dv_idct_factor_sd[0],
+      .video_place = dv_place_420,
       .pix_fmt = PIX_FMT_YUV420P,
       .bpm = 6,
       .block_sizes = block_sizes_dv2550,
@@ -525,8 +6208,7 @@ static const DVprofile dv_profiles[] = {
       .height = 576,
       .width = 720,
       .sar = {{59, 54}, {118, 81}},
-      .work_chunks = &work_chunks_dv25pal411[0],
-      .idct_factor = &dv_idct_factor_sd[0],
+      .video_place = dv_place_411P,
       .pix_fmt = PIX_FMT_YUV411P,
       .bpm = 6,
       .block_sizes = block_sizes_dv2550,
@@ -545,8 +6227,7 @@ static const DVprofile dv_profiles[] = {
       .height = 480,
       .width = 720,
       .sar = {{10, 11}, {40, 33}},
-      .work_chunks = &work_chunks_dv50ntsc[0],
-      .idct_factor = &dv_idct_factor_sd[0],
+      .video_place = dv_place_422_525,
       .pix_fmt = PIX_FMT_YUV422P,
       .bpm = 6,
       .block_sizes = block_sizes_dv2550,
@@ -565,8 +6246,7 @@ static const DVprofile dv_profiles[] = {
       .height = 576,
       .width = 720,
       .sar = {{59, 54}, {118, 81}},
-      .work_chunks = &work_chunks_dv50pal[0],
-      .idct_factor = &dv_idct_factor_sd[0],
+      .video_place = dv_place_422_625,
       .pix_fmt = PIX_FMT_YUV422P,
       .bpm = 6,
       .block_sizes = block_sizes_dv2550,
@@ -585,8 +6265,7 @@ static const DVprofile dv_profiles[] = {
       .height = 1080,
       .width = 1280,
       .sar = {{1, 1}, {1, 1}},
-      .work_chunks = &work_chunks_dv100ntsci[0],
-      .idct_factor = &dv_idct_factor_hd1080[0],
+      .video_place = dv_place_1080i60,
       .pix_fmt = PIX_FMT_YUV422P,
       .bpm = 8,
       .block_sizes = block_sizes_dv100,
@@ -605,8 +6284,7 @@ static const DVprofile dv_profiles[] = {
       .height = 1080,
       .width = 1440,
       .sar = {{1, 1}, {1, 1}},
-      .work_chunks = &work_chunks_dv100pali[0],
-      .idct_factor = &dv_idct_factor_hd1080[0],
+      .video_place = dv_place_1080i50,
       .pix_fmt = PIX_FMT_YUV422P,
       .bpm = 8,
       .block_sizes = block_sizes_dv100,
@@ -625,8 +6303,7 @@ static const DVprofile dv_profiles[] = {
       .height = 720,
       .width = 960,
       .sar = {{1, 1}, {1, 1}},
-      .work_chunks = &work_chunks_dv100ntscp[0],
-      .idct_factor = &dv_idct_factor_hd720[0],
+      .video_place = dv_place_720p60,
       .pix_fmt = PIX_FMT_YUV422P,
       .bpm = 8,
       .block_sizes = block_sizes_dv100,
@@ -645,8 +6322,7 @@ static const DVprofile dv_profiles[] = {
       .height = 720,
       .width = 960,
       .sar = {{1, 1}, {1, 1}},
-      .work_chunks = &work_chunks_dv100palp[0],
-      .idct_factor = &dv_idct_factor_hd720[0],
+      .video_place = dv_place_720p50,
       .pix_fmt = PIX_FMT_YUV422P,
       .bpm = 8,
       .block_sizes = block_sizes_dv100,
diff --git a/libavcodec/dvdsubdec.c b/libavcodec/dvdsubdec.c
index dac152b..f95c329 100644
--- a/libavcodec/dvdsubdec.c
+++ b/libavcodec/dvdsubdec.c
@@ -319,19 +319,17 @@ static int decode_dvd_subtitles(AVSubtitle *sub_header,
             if (w > 0 && h > 0) {
                 if (sub_header->rects != NULL) {
                     for (i = 0; i < sub_header->num_rects; i++) {
-                        av_freep(&sub_header->rects[i]->pict.data[0]);
-                        av_freep(&sub_header->rects[i]->pict.data[1]);
-                        av_freep(&sub_header->rects[i]);
+                        av_free(sub_header->rects[i].bitmap);
+                        av_free(sub_header->rects[i].rgba_palette);
                     }
                     av_freep(&sub_header->rects);
                     sub_header->num_rects = 0;
                 }
 
                 bitmap = av_malloc(w * h);
-                sub_header->rects = av_mallocz(sizeof(*sub_header->rects));
-                sub_header->rects[0] = av_mallocz(sizeof(AVSubtitleRect));
+                sub_header->rects = av_mallocz(sizeof(AVSubtitleRect));
                 sub_header->num_rects = 1;
-                sub_header->rects[0]->pict.data[0] = bitmap;
+                sub_header->rects[0].bitmap = bitmap;
                 decode_rle(bitmap, w * 2, w, (h + 1) / 2,
                            buf, offset1, buf_size, is_8bit);
                 decode_rle(bitmap + w, w * 2, w, h / 2,
@@ -339,20 +337,20 @@ static int decode_dvd_subtitles(AVSubtitle *sub_header,
                 if (is_8bit) {
                     if (yuv_palette == 0)
                         goto fail;
-                    sub_header->rects[0]->pict.data[1] = av_malloc(256 * 4);
-                    sub_header->rects[0]->nb_colors = 256;
-                    yuv_a_to_rgba(yuv_palette, alpha, (uint32_t*)sub_header->rects[0]->pict.data[1], 256);
+                    sub_header->rects[0].rgba_palette = av_malloc(256 * 4);
+                    sub_header->rects[0].nb_colors = 256;
+                    yuv_a_to_rgba(yuv_palette, alpha, sub_header->rects[0].rgba_palette, 256);
                 } else {
-                    sub_header->rects[0]->pict.data[1] = av_malloc(4 * 4);
-                    sub_header->rects[0]->nb_colors = 4;
-                    guess_palette((uint32_t*)sub_header->rects[0]->pict.data[1],
+                    sub_header->rects[0].rgba_palette = av_malloc(4 * 4);
+                    sub_header->rects[0].nb_colors = 4;
+                    guess_palette(sub_header->rects[0].rgba_palette,
                                   colormap, alpha, 0xffff00);
                 }
-                sub_header->rects[0]->x = x1;
-                sub_header->rects[0]->y = y1;
-                sub_header->rects[0]->w = w;
-                sub_header->rects[0]->h = h;
-                sub_header->rects[0]->pict.linesize[0] = w;
+                sub_header->rects[0].x = x1;
+                sub_header->rects[0].y = y1;
+                sub_header->rects[0].w = w;
+                sub_header->rects[0].h = h;
+                sub_header->rects[0].linesize = w;
             }
         }
         if (next_cmd_pos == cmd_pos)
@@ -364,9 +362,8 @@ static int decode_dvd_subtitles(AVSubtitle *sub_header,
  fail:
     if (sub_header->rects != NULL) {
         for (i = 0; i < sub_header->num_rects; i++) {
-            av_freep(&sub_header->rects[i]->pict.data[0]);
-            av_freep(&sub_header->rects[i]->pict.data[1]);
-            av_freep(&sub_header->rects[i]);
+            av_free(sub_header->rects[i].bitmap);
+            av_free(sub_header->rects[i].rgba_palette);
         }
         av_freep(&sub_header->rects);
         sub_header->num_rects = 0;
@@ -393,34 +390,34 @@ static int find_smallest_bounding_rectangle(AVSubtitle *s)
     int y1, y2, x1, x2, y, w, h, i;
     uint8_t *bitmap;
 
-    if (s->num_rects == 0 || s->rects == NULL || s->rects[0]->w <= 0 || s->rects[0]->h <= 0)
+    if (s->num_rects == 0 || s->rects == NULL || s->rects[0].w <= 0 || s->rects[0].h <= 0)
         return 0;
 
     memset(transp_color, 0, 256);
-    for(i = 0; i < s->rects[0]->nb_colors; i++) {
-        if ((((uint32_t*)s->rects[0]->pict.data[1])[i] >> 24) == 0)
+    for(i = 0; i < s->rects[0].nb_colors; i++) {
+        if ((s->rects[0].rgba_palette[i] >> 24) == 0)
             transp_color[i] = 1;
     }
     y1 = 0;
-    while (y1 < s->rects[0]->h && is_transp(s->rects[0]->pict.data[0] + y1 * s->rects[0]->pict.linesize[0],
-                                  1, s->rects[0]->w, transp_color))
+    while (y1 < s->rects[0].h && is_transp(s->rects[0].bitmap + y1 * s->rects[0].linesize,
+                                  1, s->rects[0].w, transp_color))
         y1++;
-    if (y1 == s->rects[0]->h) {
-        av_freep(&s->rects[0]->pict.data[0]);
-        s->rects[0]->w = s->rects[0]->h = 0;
+    if (y1 == s->rects[0].h) {
+        av_freep(&s->rects[0].bitmap);
+        s->rects[0].w = s->rects[0].h = 0;
         return 0;
     }
 
-    y2 = s->rects[0]->h - 1;
-    while (y2 > 0 && is_transp(s->rects[0]->pict.data[0] + y2 * s->rects[0]->pict.linesize[0], 1,
-                               s->rects[0]->w, transp_color))
+    y2 = s->rects[0].h - 1;
+    while (y2 > 0 && is_transp(s->rects[0].bitmap + y2 * s->rects[0].linesize, 1,
+                               s->rects[0].w, transp_color))
         y2--;
     x1 = 0;
-    while (x1 < (s->rects[0]->w - 1) && is_transp(s->rects[0]->pict.data[0] + x1, s->rects[0]->pict.linesize[0],
-                                        s->rects[0]->h, transp_color))
+    while (x1 < (s->rects[0].w - 1) && is_transp(s->rects[0].bitmap + x1, s->rects[0].linesize,
+                                        s->rects[0].h, transp_color))
         x1++;
-    x2 = s->rects[0]->w - 1;
-    while (x2 > 0 && is_transp(s->rects[0]->pict.data[0] + x2, s->rects[0]->pict.linesize[0], s->rects[0]->h,
+    x2 = s->rects[0].w - 1;
+    while (x2 > 0 && is_transp(s->rects[0].bitmap + x2, s->rects[0].linesize, s->rects[0].h,
                                   transp_color))
         x2--;
     w = x2 - x1 + 1;
@@ -429,15 +426,15 @@ static int find_smallest_bounding_rectangle(AVSubtitle *s)
     if (!bitmap)
         return 1;
     for(y = 0; y < h; y++) {
-        memcpy(bitmap + w * y, s->rects[0]->pict.data[0] + x1 + (y1 + y) * s->rects[0]->pict.linesize[0], w);
+        memcpy(bitmap + w * y, s->rects[0].bitmap + x1 + (y1 + y) * s->rects[0].linesize, w);
     }
-    av_freep(&s->rects[0]->pict.data[0]);
-    s->rects[0]->pict.data[0] = bitmap;
-    s->rects[0]->pict.linesize[0] = w;
-    s->rects[0]->w = w;
-    s->rects[0]->h = h;
-    s->rects[0]->x += x1;
-    s->rects[0]->y += y1;
+    av_freep(&s->rects[0].bitmap);
+    s->rects[0].bitmap = bitmap;
+    s->rects[0].linesize = w;
+    s->rects[0].w = w;
+    s->rects[0].h = h;
+    s->rects[0].x += x1;
+    s->rects[0].y += y1;
     return 1;
 }
 
@@ -494,8 +491,8 @@ static int dvdsub_decode(AVCodecContext *avctx,
     av_log(NULL, AV_LOG_INFO, "start=%d ms end =%d ms\n",
            sub->start_display_time,
            sub->end_display_time);
-    ppm_save("/tmp/a.ppm", sub->rects[0]->pict.data[0],
-             sub->rects[0]->w, sub->rects[0]->h, sub->rects[0]->pict.data[1]);
+    ppm_save("/tmp/a.ppm", sub->rects[0].bitmap,
+             sub->rects[0].w, sub->rects[0].h, sub->rects[0].rgba_palette);
 #endif
 
     *data_size = 1;
diff --git a/libavcodec/dvdsubenc.c b/libavcodec/dvdsubenc.c
index 5f6bc21..a5380ce 100644
--- a/libavcodec/dvdsubenc.c
+++ b/libavcodec/dvdsubenc.c
@@ -108,10 +108,10 @@ static int encode_dvd_subtitles(uint8_t *outbuf, int outbuf_size,
         cmap[i] = 0;
     }
     for (object_id = 0; object_id < rects; object_id++)
-        for (i=0; i<h->rects[object_id]->w*h->rects[object_id]->h; ++i) {
-            color = h->rects[object_id]->pict.data[0][i];
+        for (i=0; i<h->rects[object_id].w*h->rects[object_id].h; ++i) {
+            color = h->rects[object_id].bitmap[i];
             // only count non-transparent pixels
-            alpha = ((uint32_t*)h->rects[object_id]->pict.data[1])[color] >> 24;
+            alpha = h->rects[object_id].rgba_palette[color] >> 24;
             hist[color] += alpha;
         }
     for (color=3;; --color) {
@@ -138,19 +138,19 @@ static int encode_dvd_subtitles(uint8_t *outbuf, int outbuf_size,
     for (object_id = 0; object_id < rects; object_id++) {
         offset1[object_id] = q - outbuf;
         // worst case memory requirement: 1 nibble per pixel..
-        if ((q - outbuf) + h->rects[object_id]->w*h->rects[object_id]->h/2
+        if ((q - outbuf) + h->rects[object_id].w*h->rects[object_id].h/2
             + 17*rects + 21 > outbuf_size) {
             av_log(NULL, AV_LOG_ERROR, "dvd_subtitle too big\n");
             return -1;
         }
-        dvd_encode_rle(&q, h->rects[object_id]->pict.data[0],
-                       h->rects[object_id]->w*2,
-                       h->rects[object_id]->w, h->rects[object_id]->h >> 1,
+        dvd_encode_rle(&q, h->rects[object_id].bitmap,
+                       h->rects[object_id].w*2,
+                       h->rects[object_id].w, h->rects[object_id].h >> 1,
                        cmap);
         offset2[object_id] = q - outbuf;
-        dvd_encode_rle(&q, h->rects[object_id]->pict.data[0] + h->rects[object_id]->w,
-                       h->rects[object_id]->w*2,
-                       h->rects[object_id]->w, h->rects[object_id]->h >> 1,
+        dvd_encode_rle(&q, h->rects[object_id].bitmap + h->rects[object_id].w,
+                       h->rects[object_id].w*2,
+                       h->rects[object_id].w, h->rects[object_id].h >> 1,
                        cmap);
     }
 
@@ -170,17 +170,17 @@ static int encode_dvd_subtitles(uint8_t *outbuf, int outbuf_size,
     // XXX not sure if more than one rect can really be encoded..
     // 12 bytes per rect
     for (object_id = 0; object_id < rects; object_id++) {
-        int x2 = h->rects[object_id]->x + h->rects[object_id]->w - 1;
-        int y2 = h->rects[object_id]->y + h->rects[object_id]->h - 1;
+        int x2 = h->rects[object_id].x + h->rects[object_id].w - 1;
+        int y2 = h->rects[object_id].y + h->rects[object_id].h - 1;
 
         *q++ = 0x05;
         // x1 x2 -> 6 nibbles
-        *q++ = h->rects[object_id]->x >> 4;
-        *q++ = (h->rects[object_id]->x << 4) | ((x2 >> 8) & 0xf);
+        *q++ = h->rects[object_id].x >> 4;
+        *q++ = (h->rects[object_id].x << 4) | ((x2 >> 8) & 0xf);
         *q++ = x2;
         // y1 y2 -> 6 nibbles
-        *q++ = h->rects[object_id]->y >> 4;
-        *q++ = (h->rects[object_id]->y << 4) | ((y2 >> 8) & 0xf);
+        *q++ = h->rects[object_id].y >> 4;
+        *q++ = (h->rects[object_id].y << 4) | ((y2 >> 8) & 0xf);
         *q++ = y2;
 
         *q++ = 0x06;
diff --git a/libavcodec/eac3dec.c b/libavcodec/eac3dec.c
index f57c1cc..0b10b41 100644
--- a/libavcodec/eac3dec.c
+++ b/libavcodec/eac3dec.c
@@ -21,8 +21,6 @@
  */
 
 #include "avcodec.h"
-#include "internal.h"
-#include "aac_ac3_parser.h"
 #include "ac3.h"
 #include "ac3_parser.h"
 #include "ac3dec.h"
@@ -184,11 +182,11 @@ int ff_eac3_parse_header(AC3DecodeContext *s)
        application can select from. each independent stream can also contain
        dependent streams which are used to add or replace channels. */
     if (s->frame_type == EAC3_FRAME_TYPE_DEPENDENT) {
-        ff_log_missing_feature(s->avctx, "Dependent substream decoding", 1);
-        return AAC_AC3_PARSE_ERROR_FRAME_TYPE;
+        av_log_missing_feature(s->avctx, "Dependent substream decoding", 1);
+        return AC3_PARSE_ERROR_FRAME_TYPE;
     } else if (s->frame_type == EAC3_FRAME_TYPE_RESERVED) {
         av_log(s->avctx, AV_LOG_ERROR, "Reserved frame type\n");
-        return AAC_AC3_PARSE_ERROR_FRAME_TYPE;
+        return AC3_PARSE_ERROR_FRAME_TYPE;
     }
 
     /* The substream id indicates which substream this frame belongs to. each
@@ -196,8 +194,8 @@ int ff_eac3_parse_header(AC3DecodeContext *s)
        associated to an independent stream have matching substream id's. */
     if (s->substreamid) {
         /* only decode substream with id=0. skip any additional substreams. */
-        ff_log_missing_feature(s->avctx, "Additional substreams", 1);
-        return AAC_AC3_PARSE_ERROR_FRAME_TYPE;
+        av_log_missing_feature(s->avctx, "Additional substreams", 1);
+        return AC3_PARSE_ERROR_FRAME_TYPE;
     }
 
     if (s->bit_alloc_params.sr_code == EAC3_SR_CODE_REDUCED) {
@@ -205,7 +203,7 @@ int ff_eac3_parse_header(AC3DecodeContext *s)
            rates in bit allocation.  The best assumption would be that it is
            handled like AC-3 DolbyNet, but we cannot be sure until we have a
            sample which utilizes this feature. */
-        ff_log_missing_feature(s->avctx, "Reduced sampling rates", 1);
+        av_log_missing_feature(s->avctx, "Reduced sampling rates", 1);
         return -1;
     }
     skip_bits(gbc, 5); // skip bitstream id
@@ -462,7 +460,7 @@ int ff_eac3_parse_header(AC3DecodeContext *s)
 
     /* spectral extension attenuation data */
     if (parse_spx_atten_data) {
-        ff_log_missing_feature(s->avctx, "Spectral extension attenuation", 1);
+        av_log_missing_feature(s->avctx, "Spectral extension attenuation", 1);
         for (ch = 1; ch <= s->fbw_channels; ch++) {
             if (get_bits1(gbc)) { // channel has spx attenuation
                 skip_bits(gbc, 5); // skip spx attenuation code
@@ -477,8 +475,7 @@ int ff_eac3_parse_header(AC3DecodeContext *s)
            The spec does not say what this data is or what it's used for.
            It is likely the offset of each block within the frame. */
         int block_start_bits = (s->num_blocks-1) * (4 + av_log2(s->frame_size-2));
-        skip_bits_long(gbc, block_start_bits);
-        ff_log_missing_feature(s->avctx, "Block start info", 1);
+        skip_bits(gbc, block_start_bits);
     }
 
     /* syntax state initialization */
diff --git a/libavcodec/eaidct.c b/libavcodec/eaidct.c
deleted file mode 100644
index 8a24350..0000000
--- a/libavcodec/eaidct.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Electronic Arts TGQ/TQI/MAD IDCT algorithm
- * Copyright (c) 2007-2008 Peter Ross <pross at xvid.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 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 eaidct.c
- * Electronic Arts TGQ/TQI/MAD IDCT algorithm
- * @author Peter Ross <pross at xvid.org>
- */
-
-#include "dsputil.h"
-
-#define ASQRT 181 /* (1/sqrt(2))<<8 */
-#define A4    669 /* cos(pi/8)*sqrt(2)<<9 */
-#define A2    277 /* sin(pi/8)*sqrt(2)<<9 */
-#define A5    196 /* sin(pi/8)<<9 */
-
-#define IDCT_TRANSFORM(dest,s0,s1,s2,s3,s4,s5,s6,s7,d0,d1,d2,d3,d4,d5,d6,d7,munge,src) {\
-    const int a1 = (src)[s1] + (src)[s7]; \
-    const int a7 = (src)[s1] - (src)[s7]; \
-    const int a5 = (src)[s5] + (src)[s3]; \
-    const int a3 = (src)[s5] - (src)[s3]; \
-    const int a2 = (src)[s2] + (src)[s6]; \
-    const int a6 = (ASQRT*((src)[s2] - (src)[s6]))>>8; \
-    const int a0 = (src)[s0] + (src)[s4]; \
-    const int a4 = (src)[s0] - (src)[s4]; \
-    const int b0 = (((A4-A5)*a7 - A5*a3)>>9) + a1+a5; \
-    const int b1 = (((A4-A5)*a7 - A5*a3)>>9) + ((ASQRT*(a1-a5))>>8); \
-    const int b2 = (((A2+A5)*a3 + A5*a7)>>9) + ((ASQRT*(a1-a5))>>8); \
-    const int b3 =  ((A2+A5)*a3 + A5*a7)>>9; \
-    (dest)[d0] = munge(a0+a2+a6+b0); \
-    (dest)[d1] = munge(a4+a6   +b1); \
-    (dest)[d2] = munge(a4-a6   +b2); \
-    (dest)[d3] = munge(a0-a2-a6+b3); \
-    (dest)[d4] = munge(a0-a2-a6-b3); \
-    (dest)[d5] = munge(a4-a6   -b2); \
-    (dest)[d6] = munge(a4+a6   -b1); \
-    (dest)[d7] = munge(a0+a2+a6-b0); \
-}
-/* end IDCT_TRANSFORM macro */
-
-#define MUNGE_NONE(x) (x)
-#define IDCT_COL(dest,src) IDCT_TRANSFORM(dest,0,8,16,24,32,40,48,56,0,8,16,24,32,40,48,56,MUNGE_NONE,src)
-
-#define MUNGE_8BIT(x) av_clip_uint8((x)>>4)
-#define IDCT_ROW(dest,src) IDCT_TRANSFORM(dest,0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,MUNGE_8BIT,src)
-
-static inline void ea_idct_col(DCTELEM *dest, const DCTELEM *src) {
-    if ((src[8]|src[16]|src[24]|src[32]|src[40]|src[48]|src[56])==0) {
-        dest[0]  =
-        dest[8]  =
-        dest[16] =
-        dest[24] =
-        dest[32] =
-        dest[40] =
-        dest[48] =
-        dest[56] = src[0];
-    }else
-        IDCT_COL(dest, src);
-}
-
-void ff_ea_idct_put_c(uint8_t *dest, int linesize, DCTELEM *block) {
-    int i;
-    DCTELEM temp[64];
-    block[0] += 4;
-    for (i=0; i<8; i++)
-        ea_idct_col(&temp[i], &block[i]);
-    for (i=0; i<8; i++)
-        IDCT_ROW( (&dest[i*linesize]), (&temp[8*i]) );
-}
diff --git a/libavcodec/eatgq.c b/libavcodec/eatgq.c
deleted file mode 100644
index fa8faf4..0000000
--- a/libavcodec/eatgq.c
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * Electronic Arts TGQ Video Decoder
- * Copyright (c) 2007-2008 Peter Ross <pross at xvid.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 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 St, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-/**
- * @file eatgq.c
- * Electronic Arts TGQ Video Decoder
- * @author Peter Ross <pross at xvid.org>
- *
- * Technical details here:
- * http://wiki.multimedia.cx/index.php?title=Electronic_Arts_TGQ
- */
-
-#include "avcodec.h"
-#define ALT_BITSTREAM_READER_LE
-#include "bitstream.h"
-#include "bytestream.h"
-#include "dsputil.h"
-#include "aandcttab.h"
-
-typedef struct TgqContext {
-    AVCodecContext *avctx;
-    DSPContext dsp;
-    AVFrame frame;
-    int width,height;
-    ScanTable scantable;
-    int qtable[64];
-} TgqContext;
-
-static av_cold int tgq_decode_init(AVCodecContext *avctx){
-    TgqContext *s = avctx->priv_data;
-    s->avctx = avctx;
-    if(avctx->idct_algo==FF_IDCT_AUTO)
-        avctx->idct_algo=FF_IDCT_EA;
-    dsputil_init(&s->dsp, avctx);
-    ff_init_scantable(s->dsp.idct_permutation, &s->scantable, ff_zigzag_direct);
-    avctx->time_base = (AVRational){1, 15};
-    avctx->pix_fmt = PIX_FMT_YUV420P;
-    return 0;
-}
-
-static void tgq_decode_block(TgqContext *s, DCTELEM block[64], GetBitContext *gb){
-    uint8_t *perm = s->scantable.permutated;
-    int i,j,value;
-    block[0] = get_sbits(gb,8) * s->qtable[0];
-    for(i=1; i<64; ) {
-        switch(show_bits(gb,3)) {
-        case 4:
-            block[perm[i++]] = 0;
-        case 0:
-            block[perm[i++]] = 0;
-            skip_bits(gb,3);
-            break;
-        case 5:
-        case 1:
-            skip_bits(gb,2);
-            value = get_bits(gb,6);
-            for(j=0; j<value; j++)
-                block[perm[i++]] = 0;
-            break;
-        case 6:
-            skip_bits(gb,3);
-            block[perm[i]] = -s->qtable[perm[i]];
-            i++;
-            break;
-        case 2:
-            skip_bits(gb,3);
-            block[perm[i]] = s->qtable[perm[i]];
-            i++;
-            break;
-        case 7: // 111b
-        case 3: // 011b
-            skip_bits(gb,2);
-            if (show_bits(gb,6)==0x3F) {
-                skip_bits(gb, 6);
-                block[perm[i]] = get_sbits(gb,8)*s->qtable[perm[i]];
-            }else{
-                block[perm[i]] = get_sbits(gb,6)*s->qtable[perm[i]];
-            }
-            i++;
-            break;
-        }
-    }
-    block[0] += 128<<4;
-}
-
-static void tgq_idct_put_mb(TgqContext *s, DCTELEM (*block)[64], int mb_x, int mb_y){
-    int linesize= s->frame.linesize[0];
-    uint8_t *dest_y  = s->frame.data[0] + (mb_y * 16* linesize            ) + mb_x * 16;
-    uint8_t *dest_cb = s->frame.data[1] + (mb_y * 8 * s->frame.linesize[1]) + mb_x * 8;
-    uint8_t *dest_cr = s->frame.data[2] + (mb_y * 8 * s->frame.linesize[2]) + mb_x * 8;
-
-    s->dsp.idct_put(dest_y                 , linesize, block[0]);
-    s->dsp.idct_put(dest_y              + 8, linesize, block[1]);
-    s->dsp.idct_put(dest_y + 8*linesize    , linesize, block[2]);
-    s->dsp.idct_put(dest_y + 8*linesize + 8, linesize, block[3]);
-    if(!(s->avctx->flags&CODEC_FLAG_GRAY)){
-         s->dsp.idct_put(dest_cb, s->frame.linesize[1], block[4]);
-         s->dsp.idct_put(dest_cr, s->frame.linesize[2], block[5]);
-    }
-}
-
-static inline void tgq_dconly(TgqContext *s, unsigned char *dst, int dst_stride, int dc){
-    int level = av_clip_uint8((dc*s->qtable[0] + 2056)>>4);
-    int j;
-    for(j=0;j<8;j++)
-        memset(dst+j*dst_stride, level, 8);
-}
-
-static void tgq_idct_put_mb_dconly(TgqContext *s, int mb_x, int mb_y, const int8_t *dc)
-{
-    int linesize= s->frame.linesize[0];
-    uint8_t *dest_y  = s->frame.data[0] + (mb_y * 16* linesize            ) + mb_x * 16;
-    uint8_t *dest_cb = s->frame.data[1] + (mb_y * 8 * s->frame.linesize[1]) + mb_x * 8;
-    uint8_t *dest_cr = s->frame.data[2] + (mb_y * 8 * s->frame.linesize[2]) + mb_x * 8;
-    tgq_dconly(s,dest_y                 , linesize, dc[0]);
-    tgq_dconly(s,dest_y              + 8, linesize, dc[1]);
-    tgq_dconly(s,dest_y + 8*linesize    , linesize, dc[2]);
-    tgq_dconly(s,dest_y + 8*linesize + 8, linesize, dc[3]);
-    if(!(s->avctx->flags&CODEC_FLAG_GRAY)) {
-        tgq_dconly(s,dest_cb, s->frame.linesize[1], dc[4]);
-        tgq_dconly(s,dest_cr, s->frame.linesize[2], dc[5]);
-    }
-}
-
-static void tgq_decode_mb(TgqContext *s, int mb_y, int mb_x, const int8_t **bs, const int8_t *buf_end){
-    int mode;
-    int i;
-    int8_t dc[6];
-    DCTELEM block[6][64];
-
-    mode = bytestream_get_byte((const uint8_t**)bs);
-    if (mode>buf_end-*bs) {
-        av_log(s->avctx, AV_LOG_ERROR, "truncated macroblock\n");
-        return;
-    }
-
-    if (mode>12) {
-        GetBitContext gb;
-        init_get_bits(&gb, *bs, mode*8);
-        for(i=0; i<6; i++)
-            tgq_decode_block(s, block[i], &gb);
-        tgq_idct_put_mb(s, block, mb_x, mb_y);
-    }else{
-        if (mode==3) {
-            memset(dc, (*bs)[0], 4);
-            dc[4] = (*bs)[1];
-            dc[5] = (*bs)[2];
-        }else if (mode==6) {
-            memcpy(dc, *bs, 6);
-        }else if (mode==12) {
-            for(i=0; i<6; i++)
-                dc[i] = (*bs)[i*2];
-        }else{
-            av_log(s->avctx, AV_LOG_ERROR, "unsupported mb mode %i\n", mode);
-        }
-        tgq_idct_put_mb_dconly(s, mb_x, mb_y, dc);
-    }
-    *bs += mode;
-}
-
-static void tgq_calculate_qtable(TgqContext *s, int quant){
-    int i,j;
-    const int a = (14*(100-quant))/100 + 1;
-    const int b = (11*(100-quant))/100 + 4;
-    for(j=0;j<8;j++)
-    for(i=0;i<8;i++)
-        if (s->avctx->idct_algo==FF_IDCT_EA)
-            s->qtable[j*8+i] = ((a*(j+i)/(7+7) + b)*ff_inv_aanscales[j*8+i])>>(14-4);
-        else
-            s->qtable[j*8+i] = (a*(j+i)/(7+7) + b)<<3;
-}
-
-static int tgq_decode_frame(AVCodecContext *avctx,
-                            void *data, int *data_size,
-                            const uint8_t *buf, int buf_size){
-    const uint8_t *buf_start = buf;
-    const uint8_t *buf_end = buf + buf_size;
-    TgqContext *s = avctx->priv_data;
-    int x,y;
-
-    int big_endian = AV_RL32(&buf[4]) > 0x000FFFFF;
-    buf += 8;
-
-    if(8>buf_end-buf) {
-        av_log(avctx, AV_LOG_WARNING, "truncated header\n");
-        return -1;
-    }
-    s->width  = big_endian ? AV_RB16(&buf[0]) : AV_RL16(&buf[0]);
-    s->height = big_endian ? AV_RB16(&buf[2]) : AV_RL16(&buf[2]);
-
-    if (s->avctx->width!=s->width || s->avctx->height!=s->height) {
-        avcodec_set_dimensions(s->avctx, s->width, s->height);
-        if (s->frame.data[0])
-            avctx->release_buffer(avctx, &s->frame);
-    }
-    tgq_calculate_qtable(s, buf[4]);
-    buf += 8;
-
-    if (!s->frame.data[0]) {
-        s->frame.key_frame = 1;
-        s->frame.pict_type = FF_I_TYPE;
-        s->frame.buffer_hints = FF_BUFFER_HINTS_VALID;
-        if (avctx->get_buffer(avctx, &s->frame)) {
-            av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
-            return -1;
-        }
-    }
-
-    for (y=0; y<(avctx->height+15)/16; y++)
-    for (x=0; x<(avctx->width+15)/16; x++)
-        tgq_decode_mb(s, y, x, (const int8_t**)&buf, (const int8_t*)buf_end);
-
-    *data_size = sizeof(AVFrame);
-    *(AVFrame*)data = s->frame;
-
-    return buf-buf_start;
-}
-
-static av_cold int tgq_decode_end(AVCodecContext *avctx){
-    TgqContext *s = avctx->priv_data;
-    if (s->frame.data[0])
-        s->avctx->release_buffer(avctx, &s->frame);
-    return 0;
-}
-
-AVCodec eatgq_decoder = {
-    "eatgq",
-    CODEC_TYPE_VIDEO,
-    CODEC_ID_TGQ,
-    sizeof(TgqContext),
-    tgq_decode_init,
-    NULL,
-    tgq_decode_end,
-    tgq_decode_frame,
-    CODEC_CAP_DR1,
-    .long_name = NULL_IF_CONFIG_SMALL("Electronic Arts TGQ Video"),
-};
diff --git a/libavcodec/error_resilience.c b/libavcodec/error_resilience.c
index bdd3a66..f15b0b6 100644
--- a/libavcodec/error_resilience.c
+++ b/libavcodec/error_resilience.c
@@ -563,7 +563,7 @@ static int is_intra_more_likely(MpegEncContext *s){
 
     if(undamaged_count < 5) return 0; //almost all MBs damaged -> use temporal prediction
 
-#ifdef CONFIG_XVMC
+#ifdef HAVE_XVMC
     //prevent dsp.sad() check, that requires access to the image
     if(s->avctx->xvmc_acceleration && s->pict_type==FF_I_TYPE) return 1;
 #endif
@@ -681,7 +681,6 @@ void ff_er_frame_end(MpegEncContext *s){
     Picture *pic= s->current_picture_ptr;
 
     if(!s->error_recognition || s->error_count==0 || s->avctx->lowres ||
-       s->avctx->codec->capabilities&CODEC_CAP_HWACCEL_VDPAU ||
        s->error_count==3*s->mb_width*(s->avctx->skip_top + s->avctx->skip_bottom)) return;
 
     if(s->current_picture.motion_val[0] == NULL){
@@ -935,7 +934,7 @@ void ff_er_frame_end(MpegEncContext *s){
     }else
         guess_mv(s);
 
-#ifdef CONFIG_XVMC
+#ifdef HAVE_XVMC
     /* the filters below are not XvMC compatible, skip them */
     if(s->avctx->xvmc_acceleration) goto ec_clean;
 #endif
@@ -1024,7 +1023,7 @@ void ff_er_frame_end(MpegEncContext *s){
         v_block_filter(s, s->current_picture.data[2], s->mb_width  , s->mb_height  , s->uvlinesize, 0);
     }
 
-#ifdef CONFIG_XVMC
+#ifdef HAVE_XVMC
 ec_clean:
 #endif
     /* clean a few tables */
diff --git a/libavcodec/eval.c b/libavcodec/eval.c
index fce6da5..be393a6 100644
--- a/libavcodec/eval.c
+++ b/libavcodec/eval.c
@@ -47,12 +47,12 @@
 typedef struct Parser{
     int stack_index;
     char *s;
-    const double *const_value;
-    const char * const *const_name;          // NULL terminated
+    double *const_value;
+    const char **const_name;          // NULL terminated
     double (**func1)(void *, double a); // NULL terminated
     const char **func1_name;          // NULL terminated
     double (**func2)(void *, double a, double b); // NULL terminated
-    const char **func2_name;          // NULL terminated
+    char **func2_name;          // NULL terminated
     void *opaque;
     const char **error;
 #define VARS 10
@@ -375,9 +375,9 @@ static int verify_expr(AVEvalExpr * e) {
     }
 }
 
-AVEvalExpr * ff_parse(const char *s, const char * const *const_name,
+AVEvalExpr * ff_parse(const char *s, const char **const_name,
                double (**func1)(void *, double), const char **func1_name,
-               double (**func2)(void *, double, double), const char **func2_name,
+               double (**func2)(void *, double, double), char **func2_name,
                const char **error){
     Parser p;
     AVEvalExpr * e;
@@ -404,7 +404,7 @@ AVEvalExpr * ff_parse(const char *s, const char * const *const_name,
     return e;
 }
 
-double ff_parse_eval(AVEvalExpr * e, const double *const_value, void *opaque) {
+double ff_parse_eval(AVEvalExpr * e, double *const_value, void *opaque) {
     Parser p;
 
     p.const_value= const_value;
@@ -412,9 +412,9 @@ double ff_parse_eval(AVEvalExpr * e, const double *const_value, void *opaque) {
     return eval_expr(&p, e);
 }
 
-double ff_eval2(const char *s, const double *const_value, const char * const *const_name,
+double ff_eval2(const char *s, double *const_value, const char **const_name,
                double (**func1)(void *, double), const char **func1_name,
-               double (**func2)(void *, double, double), const char **func2_name,
+               double (**func2)(void *, double, double), char **func2_name,
                void *opaque, const char **error){
     AVEvalExpr * e = ff_parse(s, const_name, func1, func1_name, func2, func2_name, error);
     double d;
diff --git a/libavcodec/eval.h b/libavcodec/eval.h
index c450332..0918fc9 100644
--- a/libavcodec/eval.h
+++ b/libavcodec/eval.h
@@ -42,9 +42,9 @@
  * @param opaque a pointer which will be passed to all functions from func1 and func2
  * @return the value of the expression
  */
-double ff_eval2(const char *s, const double *const_value, const char * const *const_name,
+double ff_eval2(const char *s, double *const_value, const char **const_name,
                double (**func1)(void *, double), const char **func1_name,
-               double (**func2)(void *, double, double), const char **func2_name,
+               double (**func2)(void *, double, double), char **func2_name,
                void *opaque, const char **error);
 
 typedef struct ff_expr_s AVEvalExpr;
@@ -61,9 +61,9 @@ typedef struct ff_expr_s AVEvalExpr;
  * @return AVEvalExpr which must be freed with ff_eval_free by the user when it is not needed anymore
  *         NULL if anything went wrong
  */
-AVEvalExpr * ff_parse(const char *s, const char * const *const_name,
+AVEvalExpr * ff_parse(const char *s, const char **const_name,
                double (**func1)(void *, double), const char **func1_name,
-               double (**func2)(void *, double, double), const char **func2_name,
+               double (**func2)(void *, double, double), char **func2_name,
                const char **error);
 /**
  * Evaluates a previously parsed expression.
@@ -71,7 +71,7 @@ AVEvalExpr * ff_parse(const char *s, const char * const *const_name,
  * @param opaque a pointer which will be passed to all functions from func1 and func2
  * @return the value of the expression
  */
-double ff_parse_eval(AVEvalExpr * e, const double *const_value, void *opaque);
+double ff_parse_eval(AVEvalExpr * e, double *const_value, void *opaque);
 void ff_eval_free(AVEvalExpr * e);
 
 #endif /* AVCODEC_EVAL_H */
diff --git a/libavcodec/faxcompr.c b/libavcodec/faxcompr.c
deleted file mode 100644
index e7f7706..0000000
--- a/libavcodec/faxcompr.c
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- * CCITT Fax Group 3 and 4 decompression
- * Copyright (c) 2008 Konstantin Shishkov
- *
- * 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
- */
-
-/**
- * CCITT Fax Group 3 and 4 decompression
- * @file faxcompr.c
- * @author Konstantin Shishkov
- */
-#include "avcodec.h"
-#include "bitstream.h"
-#include "faxcompr.h"
-
-#define CCITT_SYMS 104
-
-static const uint16_t ccitt_syms[CCITT_SYMS] = {
-    0,    1,    2,    3,    4,    5,    6,    7,    8,    9,   10,   11,   12,
-   13,   14,   15,   16,   17,   18,   19,   20,   21,   22,   23,   24,   25,
-   26,   27,   28,   29,   30,   31,   32,   33,   34,   35,   36,   37,   38,
-   39,   40,   41,   42,   43,   44,   45,   46,   47,   48,   49,   50,   51,
-   52,   53,   54,   55,   56,   57,   58,   59,   60,   61,   62,   63,   64,
-  128,  192,  256,  320,  384,  448,  512,  576,  640,  704,  768,  832,  896,
-  960, 1024, 1088, 1152, 1216, 1280, 1344, 1408, 1472, 1536, 1600, 1664, 1728,
- 1792, 1856, 1920, 1984, 2048, 2112, 2176, 2240, 2304, 2368, 2432, 2496, 2560
-};
-
-static const uint8_t ccitt_codes_bits[2][CCITT_SYMS] =
-{
-  {
-    0x35, 0x07, 0x07, 0x08, 0x0B, 0x0C, 0x0E, 0x0F, 0x13, 0x14, 0x07, 0x08, 0x08,
-    0x03, 0x34, 0x35, 0x2A, 0x2B, 0x27, 0x0C, 0x08, 0x17, 0x03, 0x04, 0x28, 0x2B,
-    0x13, 0x24, 0x18, 0x02, 0x03, 0x1A, 0x1B, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
-    0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x04, 0x05, 0x0A, 0x0B, 0x52, 0x53, 0x54,
-    0x55, 0x24, 0x25, 0x58, 0x59, 0x5A, 0x5B, 0x4A, 0x4B, 0x32, 0x33, 0x34, 0x1B,
-    0x12, 0x17, 0x37, 0x36, 0x37, 0x64, 0x65, 0x68, 0x67, 0xCC, 0xCD, 0xD2, 0xD3,
-    0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0x98, 0x99, 0x9A, 0x18, 0x9B,
-    0x08, 0x0C, 0x0D, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F
-  },
-  {
-    0x37, 0x02, 0x03, 0x02, 0x03, 0x03, 0x02, 0x03, 0x05, 0x04, 0x04, 0x05, 0x07,
-    0x04, 0x07, 0x18, 0x17, 0x18, 0x08, 0x67, 0x68, 0x6C, 0x37, 0x28, 0x17, 0x18,
-    0xCA, 0xCB, 0xCC, 0xCD, 0x68, 0x69, 0x6A, 0x6B, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6,
-    0xD7, 0x6C, 0x6D, 0xDA, 0xDB, 0x54, 0x55, 0x56, 0x57, 0x64, 0x65, 0x52, 0x53,
-    0x24, 0x37, 0x38, 0x27, 0x28, 0x58, 0x59, 0x2B, 0x2C, 0x5A, 0x66, 0x67, 0x0F,
-    0xC8, 0xC9, 0x5B, 0x33, 0x34, 0x35, 0x6C, 0x6D, 0x4A, 0x4B, 0x4C, 0x4D, 0x72,
-    0x73, 0x74, 0x75, 0x76, 0x77, 0x52, 0x53, 0x54, 0x55, 0x5A, 0x5B, 0x64, 0x65,
-    0x08, 0x0C, 0x0D, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x1C, 0x1D, 0x1E, 0x1F
-  }
-};
-
-static const uint8_t ccitt_codes_lens[2][CCITT_SYMS] =
-{
-  {
-     8,  6,  4,  4,  4,  4,  4,  4,  5,  5,  5,  5,  6,  6,  6,  6,  6,  6,  7,  7,
-     7,  7,  7,  7,  7,  7,  7,  7,  7,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,
-     8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,  8,
-     8,  8,  8,  8,  5,  5,  6,  7,  8,  8,  8,  8,  8,  8,  9,  9,  9,  9,  9,  9,
-     9,  9,  9,  9,  9,  9,  9,  9,  9,  6,  9, 11, 11, 11, 12, 12, 12, 12, 12, 12,
-    12, 12, 12, 12
-  },
-  {
-    10,  3,  2,  2,  3,  4,  4,  5,  6,  6,  7,  7,  7,  8,  8,  9, 10, 10, 10, 11,
-    11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
-    12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
-    12, 12, 12, 12, 10, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13,
-    13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 11, 11, 11, 12, 12, 12, 12, 12, 12,
-    12, 12, 12, 12
-  }
-};
-
-static const uint8_t ccitt_group3_2d_bits[11] = {
-    1, 1, 2, 2, 2, 1, 3, 3, 3, 1, 1
-};
-
-static const uint8_t ccitt_group3_2d_lens[11] = {
-    4, 3, 7, 6, 3, 1, 3, 6, 7, 7, 9
-};
-
-static VLC ccitt_vlc[2], ccitt_group3_2d_vlc;
-
-av_cold void ff_ccitt_unpack_init()
-{
-    static VLC_TYPE code_table1[528][2];
-    static VLC_TYPE code_table2[648][2];
-    int i;
-    static int initialized = 0;
-
-    if(initialized)
-        return;
-    ccitt_vlc[0].table = code_table1;
-    ccitt_vlc[0].table_allocated = 528;
-    ccitt_vlc[1].table = code_table2;
-    ccitt_vlc[1].table_allocated = 648;
-    for(i = 0; i < 2; i++){
-        init_vlc_sparse(&ccitt_vlc[i], 9, CCITT_SYMS,
-                        ccitt_codes_lens[i], 1, 1,
-                        ccitt_codes_bits[i], 1, 1,
-                        ccitt_syms, 2, 2,
-                        INIT_VLC_USE_NEW_STATIC);
-    }
-    INIT_VLC_STATIC(&ccitt_group3_2d_vlc, 9, 11,
-                    ccitt_group3_2d_lens, 1, 1,
-                    ccitt_group3_2d_bits, 1, 1, 512);
-    initialized = 1;
-}
-
-
-static int decode_group3_1d_line(AVCodecContext *avctx, GetBitContext *gb,
-                                 unsigned int pix_left, int *runs, const int *runend)
-{
-    int mode = 0;
-    unsigned int run=0;
-    unsigned int t;
-    for(;;){
-        t = get_vlc2(gb, ccitt_vlc[mode].table, 9, 2);
-        run += t;
-        if(t < 64){
-            *runs++ = run;
-            if(runs >= runend){
-                av_log(avctx, AV_LOG_ERROR, "Run overrun\n");
-                return -1;
-            }
-            if(pix_left <= run){
-                if(pix_left == run)
-                    break;
-                av_log(avctx, AV_LOG_ERROR, "Run went out of bounds\n");
-                return -1;
-            }
-            pix_left -= run;
-            run = 0;
-            mode = !mode;
-        }else if((int)t == -1){
-            av_log(avctx, AV_LOG_ERROR, "Incorrect code\n");
-            return -1;
-        }
-    }
-    *runs++ = 0;
-    return 0;
-}
-
-static int decode_group3_2d_line(AVCodecContext *avctx, GetBitContext *gb,
-                                 unsigned int width, int *runs, const int *runend, const int *ref)
-{
-    int mode = 0, saved_run = 0, t;
-    int run_off = *ref++;
-    unsigned int offs=0, run= 0;
-
-    runend--; // for the last written 0
-
-    while(offs < width){
-        int cmode = get_vlc2(gb, ccitt_group3_2d_vlc.table, 9, 1);
-        if(cmode == -1){
-            av_log(avctx, AV_LOG_ERROR, "Incorrect mode VLC\n");
-            return -1;
-        }
-        if(!cmode){//pass mode
-            run_off += *ref++;
-            run = run_off - offs;
-            offs= run_off;
-            run_off += *ref++;
-            if(offs > width){
-                av_log(avctx, AV_LOG_ERROR, "Run went out of bounds\n");
-                return -1;
-            }
-            saved_run += run;
-        }else if(cmode == 1){//horizontal mode
-            int k;
-            for(k = 0; k < 2; k++){
-                run = 0;
-                for(;;){
-                    t = get_vlc2(gb, ccitt_vlc[mode].table, 9, 2);
-                    if(t == -1){
-                        av_log(avctx, AV_LOG_ERROR, "Incorrect code\n");
-                        return -1;
-                    }
-                    run += t;
-                    if(t < 64)
-                        break;
-                }
-                *runs++ = run + saved_run;
-                if(runs >= runend){
-                    av_log(avctx, AV_LOG_ERROR, "Run overrun\n");
-                    return -1;
-                }
-                saved_run = 0;
-                offs += run;
-                if(offs > width || run > width){
-                    av_log(avctx, AV_LOG_ERROR, "Run went out of bounds\n");
-                    return -1;
-                }
-                mode = !mode;
-            }
-        }else if(cmode == 9 || cmode == 10){
-            av_log(avctx, AV_LOG_ERROR, "Special modes are not supported (yet)\n");
-            return -1;
-        }else{//vertical mode
-            run = run_off - offs + (cmode - 5);
-            run_off -= *--ref;
-            offs += run;
-            if(offs > width || run > width){
-                av_log(avctx, AV_LOG_ERROR, "Run went out of bounds\n");
-                return -1;
-            }
-            *runs++ = run + saved_run;
-            if(runs >= runend){
-                av_log(avctx, AV_LOG_ERROR, "Run overrun\n");
-                return -1;
-            }
-            saved_run = 0;
-            mode = !mode;
-        }
-        //sync line pointers
-        while(run_off <= offs){
-            run_off += *ref++;
-            run_off += *ref++;
-        }
-    }
-    *runs++ = saved_run;
-    *runs++ = 0;
-    return 0;
-}
-
-static void put_line(uint8_t *dst, int size, int width, const int *runs)
-{
-    PutBitContext pb;
-    int run, mode = ~0, pix_left = width, run_idx = 0;
-
-    init_put_bits(&pb, dst, size*8);
-    while(pix_left > 0){
-        run = runs[run_idx++];
-        mode = ~mode;
-        pix_left -= run;
-        for(; run > 16; run -= 16)
-            put_sbits(&pb, 16, mode);
-        if(run)
-            put_sbits(&pb, run, mode);
-    }
-}
-
-static int find_group3_syncmarker(GetBitContext *gb, int srcsize)
-{
-    unsigned int state = -1;
-    srcsize -= get_bits_count(gb);
-    while(srcsize-- > 0){
-        state+= state + get_bits1(gb);
-        if((state & 0xFFF) == 1)
-            return 0;
-    }
-    return -1;
-}
-
-int ff_ccitt_unpack(AVCodecContext *avctx,
-                       const uint8_t *src, int srcsize,
-                       uint8_t *dst, int height, int stride, enum TiffCompr compr)
-{
-    int j;
-    GetBitContext gb;
-    int *runs, *ref, *runend;
-    int ret;
-    int runsize= avctx->width + 2;
-
-    runs = av_malloc(runsize * sizeof(runs[0]));
-    ref  = av_malloc(runsize * sizeof(ref[0]));
-    ref[0] = avctx->width;
-    ref[1] = 0;
-    ref[2] = 0;
-    init_get_bits(&gb, src, srcsize*8);
-    for(j = 0; j < height; j++){
-        runend = runs + runsize;
-        if(compr == TIFF_G4){
-            ret = decode_group3_2d_line(avctx, &gb, avctx->width, runs, runend, ref);
-            if(ret < 0){
-                av_free(runs);
-                av_free(ref);
-                return -1;
-            }
-        }else{
-            if(find_group3_syncmarker(&gb, srcsize*8) < 0)
-                break;
-            if(compr==TIFF_CCITT_RLE || get_bits1(&gb))
-                ret = decode_group3_1d_line(avctx, &gb, avctx->width, runs, runend);
-            else
-                ret = decode_group3_2d_line(avctx, &gb, avctx->width, runs, runend, ref);
-        }
-        if(ret < 0){
-            put_line(dst, stride, avctx->width, ref);
-        }else{
-            put_line(dst, stride, avctx->width, runs);
-            FFSWAP(int*, runs, ref);
-        }
-        dst += stride;
-    }
-    av_free(runs);
-    av_free(ref);
-    return 0;
-}
diff --git a/libavcodec/faxcompr.h b/libavcodec/faxcompr.h
deleted file mode 100644
index 632744b..0000000
--- a/libavcodec/faxcompr.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * CCITT Fax Group 3 and 4 decompression
- * Copyright (c) 2008 Konstantin Shishkov
- *
- * 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
- */
-
-/**
- * CCITT Fax Group 3 and 4 decompression
- * @file faxcompr.h
- * @author Konstantin Shishkov
- */
-#ifndef AVCODEC_FAXCOMPR_H
-#define AVCODEC_FAXCOMPR_H
-
-#include "avcodec.h"
-#include "tiff.h"
-
-/**
- * initialize upacker code
- */
-void ff_ccitt_unpack_init();
-
-/**
- * unpack data compressed with CCITT Group 3 1/2-D or Group 4 method
- */
-int ff_ccitt_unpack(AVCodecContext *avctx,
-                       const uint8_t *src, int srcsize,
-                       uint8_t *dst, int height, int stride, enum TiffCompr compr);
-
-#endif /* AVCODEC_FAXCOMPR_H */
diff --git a/libavcodec/flashsv.c b/libavcodec/flashsv.c
index abe1d87..3842594 100644
--- a/libavcodec/flashsv.c
+++ b/libavcodec/flashsv.c
@@ -211,7 +211,7 @@ static int flashsv_decode_frame(AVCodecContext *avctx,
                     /* return -1; */
                 }
                 copy_region(s->tmpblock, s->frame.data[0], s->image_height-(hp+hs+1), wp, hs, ws, s->frame.linesize[0]);
-                skip_bits_long(&gb, 8*size);   /* skip the consumed bits */
+                skip_bits(&gb, 8*size);   /* skip the consumed bits */
             }
         }
     }
diff --git a/libavcodec/fraps.c b/libavcodec/fraps.c
index 0c31e03..e03c1fa 100644
--- a/libavcodec/fraps.c
+++ b/libavcodec/fraps.c
@@ -148,10 +148,10 @@ static int decode_frame(AVCodecContext *avctx,
     version = header & 0xff;
     header_size = (header & (1<<30))? 8 : 4; /* bit 30 means pad to 8 bytes */
 
-    if (version > 5) {
+    if (version > 2 && version != 4 && version != 5) {
         av_log(avctx, AV_LOG_ERROR,
                "This file is encoded with Fraps version %d. " \
-               "This codec can only decode versions <= 5.\n", version);
+               "This codec can only decode version 0, 1, 2 and 4.\n", version);
         return -1;
     }
 
@@ -288,7 +288,6 @@ static int decode_frame(AVCodecContext *avctx,
             }
         }
         break;
-    case 3:
     case 5:
         /* Virtually the same as version 4, but is for RGB24 */
         avctx->pix_fmt = PIX_FMT_BGR24;
diff --git a/libavcodec/golomb.c b/libavcodec/golomb.c
index 51e0f9d..79dc0a7 100644
--- a/libavcodec/golomb.c
+++ b/libavcodec/golomb.c
@@ -29,7 +29,7 @@
 #include "libavutil/common.h"
 
 const uint8_t ff_golomb_vlc_len[512]={
-14,13,12,12,11,11,11,11,10,10,10,10,10,10,10,10,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
@@ -48,7 +48,7 @@ const uint8_t ff_golomb_vlc_len[512]={
 };
 
 const uint8_t ff_ue_golomb_vlc_code[512]={
-31,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,
  7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,
  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
@@ -67,7 +67,7 @@ const uint8_t ff_ue_golomb_vlc_code[512]={
 };
 
 const int8_t ff_se_golomb_vlc_code[512]={
- 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,  8, -8,  9, -9, 10,-10, 11,-11, 12,-12, 13,-13, 14,-14, 15,-15,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8, -8,  9, -9, 10,-10, 11,-11, 12,-12, 13,-13, 14,-14, 15,-15,
   4,  4,  4,  4, -4, -4, -4, -4,  5,  5,  5,  5, -5, -5, -5, -5,  6,  6,  6,  6, -6, -6, -6, -6,  7,  7,  7,  7, -7, -7, -7, -7,
   2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2,  2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
   3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3,  3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
diff --git a/libavcodec/golomb.h b/libavcodec/golomb.h
index 3c3f759..627fcdc 100644
--- a/libavcodec/golomb.h
+++ b/libavcodec/golomb.h
@@ -74,23 +74,6 @@ static inline int get_ue_golomb(GetBitContext *gb){
     }
 }
 
- /**
- * read unsigned exp golomb code, constraint to a max of 31
- */
-static inline int get_ue_golomb_31(GetBitContext *gb){
-    unsigned int buf;
-
-    OPEN_READER(re, gb);
-    UPDATE_CACHE(re, gb);
-    buf=GET_CACHE(re, gb);
-
-    buf >>= 32 - 9;
-    LAST_SKIP_BITS(re, gb, ff_golomb_vlc_len[buf]);
-    CLOSE_READER(re, gb);
-
-    return ff_ue_golomb_vlc_code[buf];
-}
-
 static inline int svq3_get_ue_golomb(GetBitContext *gb){
     uint32_t buf;
 
diff --git a/libavcodec/h263.c b/libavcodec/h263.c
index 781c007..f72f440 100644
--- a/libavcodec/h263.c
+++ b/libavcodec/h263.c
@@ -810,7 +810,7 @@ static inline int get_p_cbp(MpegEncContext * s,
         for (i = 0; i < 6; i++) {
             if (s->block_last_index[i] >= 0 && ((cbp >> (5 - i))&1)==0 ){
                 s->block_last_index[i]= -1;
-                s->dsp.clear_block(s->block[i]);
+                memset(s->block[i], 0, sizeof(DCTELEM)*64);
             }
         }
     }else{
@@ -853,7 +853,7 @@ static inline int get_b_cbp(MpegEncContext * s, DCTELEM block[6][64],
         for (i = 0; i < 6; i++) {
             if (s->block_last_index[i] >= 0 && ((cbp >> (5 - i))&1)==0 ){
                 s->block_last_index[i]= -1;
-                s->dsp.clear_block(s->block[i]);
+                memset(s->block[i], 0, sizeof(DCTELEM)*64);
             }
         }
     }else{
@@ -1485,17 +1485,17 @@ void ff_h263_loop_filter(MpegEncContext * s){
         qp_c= 0;
 
     if(s->mb_y){
-        int qp_dt, qp_tt, qp_tc;
+        int qp_dt, qp_t, qp_tc;
 
         if(IS_SKIP(s->current_picture.mb_type[xy-s->mb_stride]))
-            qp_tt=0;
+            qp_t=0;
         else
-            qp_tt= s->current_picture.qscale_table[xy-s->mb_stride];
+            qp_t= s->current_picture.qscale_table[xy-s->mb_stride];
 
         if(qp_c)
             qp_tc= qp_c;
         else
-            qp_tc= qp_tt;
+            qp_tc= qp_t;
 
         if(qp_tc){
             const int chroma_qp= s->chroma_qscale_table[qp_tc];
@@ -1506,12 +1506,12 @@ void ff_h263_loop_filter(MpegEncContext * s){
             s->dsp.h263_v_loop_filter(dest_cr , uvlinesize, chroma_qp);
         }
 
-        if(qp_tt)
-            s->dsp.h263_h_loop_filter(dest_y-8*linesize+8  ,   linesize, qp_tt);
+        if(qp_t)
+            s->dsp.h263_h_loop_filter(dest_y-8*linesize+8  ,   linesize, qp_t);
 
         if(s->mb_x){
-            if(qp_tt || IS_SKIP(s->current_picture.mb_type[xy-1-s->mb_stride]))
-                qp_dt= qp_tt;
+            if(qp_t || IS_SKIP(s->current_picture.mb_type[xy-1-s->mb_stride]))
+                qp_dt= qp_t;
             else
                 qp_dt= s->current_picture.qscale_table[xy-1-s->mb_stride];
 
@@ -4651,7 +4651,7 @@ retry:
                 rl = &rl_intra_aic;
                 i = 0;
                 s->gb= gb;
-                s->dsp.clear_block(block);
+                memset(block, 0, sizeof(DCTELEM)*64);
                 goto retry;
             }
             av_log(s->avctx, AV_LOG_ERROR, "run overflow at %dx%d i:%d\n", s->mb_x, s->mb_y, s->mb_intra);
@@ -5666,58 +5666,7 @@ static int decode_vol_header(MpegEncContext *s, GetBitContext *gb){
              s->quarter_sample= get_bits1(gb);
         else s->quarter_sample=0;
 
-        if(!get_bits1(gb)){
-            int pos= get_bits_count(gb);
-            int estimation_method= get_bits(gb, 2);
-            if(estimation_method<2){
-                if(!get_bits1(gb)){
-                    s->cplx_estimation_trash_i += 8*get_bits1(gb); //opaque
-                    s->cplx_estimation_trash_i += 8*get_bits1(gb); //transparent
-                    s->cplx_estimation_trash_i += 8*get_bits1(gb); //intra_cae
-                    s->cplx_estimation_trash_i += 8*get_bits1(gb); //inter_cae
-                    s->cplx_estimation_trash_i += 8*get_bits1(gb); //no_update
-                    s->cplx_estimation_trash_i += 8*get_bits1(gb); //upampling
-                }
-                if(!get_bits1(gb)){
-                    s->cplx_estimation_trash_i += 8*get_bits1(gb); //intra_blocks
-                    s->cplx_estimation_trash_p += 8*get_bits1(gb); //inter_blocks
-                    s->cplx_estimation_trash_p += 8*get_bits1(gb); //inter4v_blocks
-                    s->cplx_estimation_trash_i += 8*get_bits1(gb); //not coded blocks
-                }
-                if(!check_marker(gb, "in complexity estimation part 1")){
-                    skip_bits_long(gb, pos - get_bits_count(gb));
-                    goto no_cplx_est;
-                }
-                if(!get_bits1(gb)){
-                    s->cplx_estimation_trash_i += 8*get_bits1(gb); //dct_coeffs
-                    s->cplx_estimation_trash_i += 8*get_bits1(gb); //dct_lines
-                    s->cplx_estimation_trash_i += 8*get_bits1(gb); //vlc_syms
-                    s->cplx_estimation_trash_i += 4*get_bits1(gb); //vlc_bits
-                }
-                if(!get_bits1(gb)){
-                    s->cplx_estimation_trash_p += 8*get_bits1(gb); //apm
-                    s->cplx_estimation_trash_p += 8*get_bits1(gb); //npm
-                    s->cplx_estimation_trash_b += 8*get_bits1(gb); //interpolate_mc_q
-                    s->cplx_estimation_trash_p += 8*get_bits1(gb); //forwback_mc_q
-                    s->cplx_estimation_trash_p += 8*get_bits1(gb); //halfpel2
-                    s->cplx_estimation_trash_p += 8*get_bits1(gb); //halfpel4
-                }
-                if(!check_marker(gb, "in complexity estimation part 2")){
-                    skip_bits_long(gb, pos - get_bits_count(gb));
-                    goto no_cplx_est;
-                }
-                if(estimation_method==1){
-                    s->cplx_estimation_trash_i += 8*get_bits1(gb); //sadct
-                    s->cplx_estimation_trash_p += 8*get_bits1(gb); //qpel
-                }
-            }else
-                av_log(s->avctx, AV_LOG_ERROR, "Invalid Complexity estimation method %d\n", estimation_method);
-        }else{
-no_cplx_est:
-            s->cplx_estimation_trash_i=
-            s->cplx_estimation_trash_p=
-            s->cplx_estimation_trash_b= 0;
-        }
+        if(!get_bits1(gb)) av_log(s->avctx, AV_LOG_ERROR, "Complexity estimation not supported\n");
 
         s->resync_marker= !get_bits1(gb); /* resync_marker_disabled */
 
@@ -5954,12 +5903,6 @@ static int decode_vop_header(MpegEncContext *s, GetBitContext *gb){
 //FIXME complexity estimation stuff
 
      if (s->shape != BIN_ONLY_SHAPE) {
-         skip_bits_long(gb, s->cplx_estimation_trash_i);
-         if(s->pict_type != FF_I_TYPE)
-            skip_bits_long(gb, s->cplx_estimation_trash_p);
-         if(s->pict_type == FF_B_TYPE)
-            skip_bits_long(gb, s->cplx_estimation_trash_b);
-
          s->intra_dc_threshold= mpeg4_dc_threshold[ get_bits(gb, 3) ];
          if(!s->progressive_sequence){
              s->top_field_first= get_bits1(gb);
@@ -6008,12 +5951,12 @@ static int decode_vop_header(MpegEncContext *s, GetBitContext *gb){
              s->b_code=1;
 
          if(s->avctx->debug&FF_DEBUG_PICT_INFO){
-             av_log(s->avctx, AV_LOG_DEBUG, "qp:%d fc:%d,%d %s size:%d pro:%d alt:%d top:%d %spel part:%d resync:%d w:%d a:%d rnd:%d vot:%d%s dc:%d ce:%d/%d/%d\n",
+             av_log(s->avctx, AV_LOG_DEBUG, "qp:%d fc:%d,%d %s size:%d pro:%d alt:%d top:%d %spel part:%d resync:%d w:%d a:%d rnd:%d vot:%d%s dc:%d\n",
                  s->qscale, s->f_code, s->b_code,
                  s->pict_type == FF_I_TYPE ? "I" : (s->pict_type == FF_P_TYPE ? "P" : (s->pict_type == FF_B_TYPE ? "B" : "S")),
                  gb->size_in_bits,s->progressive_sequence, s->alternate_scan, s->top_field_first,
                  s->quarter_sample ? "q" : "h", s->data_partitioning, s->resync_marker, s->num_sprite_warping_points,
-                 s->sprite_warping_accuracy, 1-s->no_rounding, s->vo_type, s->vol_control_parameters ? " VOLC" : " ", s->intra_dc_threshold, s->cplx_estimation_trash_i, s->cplx_estimation_trash_p, s->cplx_estimation_trash_b);
+                 s->sprite_warping_accuracy, 1-s->no_rounding, s->vo_type, s->vol_control_parameters ? " VOLC" : " ", s->intra_dc_threshold);
          }
 
          if(!s->scalability){
@@ -6065,7 +6008,7 @@ int ff_mpeg4_decode_picture_header(MpegEncContext * s, GetBitContext *gb)
     if(s->codec_tag == ff_get_fourcc("WV1F") && show_bits(gb, 24) == 0x575630){
         skip_bits(gb, 24);
         if(get_bits(gb, 8) == 0xF0)
-            goto end;
+            return decode_vop_header(s, gb);
     }
 
     startcode = 0xff;
@@ -6128,17 +6071,12 @@ int ff_mpeg4_decode_picture_header(MpegEncContext * s, GetBitContext *gb)
             mpeg4_decode_gop_header(s, gb);
         }
         else if(startcode == VOP_STARTCODE){
-            break;
+            return decode_vop_header(s, gb);
         }
 
         align_get_bits(gb);
         startcode = 0xff;
     }
-end:
-    if(s->flags& CODEC_FLAG_LOW_DELAY)
-        s->low_delay=1;
-    s->avctx->has_b_frames= !s->low_delay;
-    return decode_vop_header(s, gb);
 }
 
 /* don't understand why they choose a different header ! */
diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c
index ae318b5..141d153 100644
--- a/libavcodec/h263dec.c
+++ b/libavcodec/h263dec.c
@@ -402,6 +402,9 @@ retry:
             ret = ff_mpeg4_decode_picture_header(s, &gb);
         }
         ret = ff_mpeg4_decode_picture_header(s, &s->gb);
+
+        if(s->flags& CODEC_FLAG_LOW_DELAY)
+            s->low_delay=1;
     } else if (s->codec_id == CODEC_ID_H263I) {
         ret = intel_h263_decode_picture_header(s);
     } else if (s->h263_flv) {
diff --git a/libavcodec/h264.c b/libavcodec/h264.c
index a8bd062..e501cb5 100644
--- a/libavcodec/h264.c
+++ b/libavcodec/h264.c
@@ -33,11 +33,10 @@
 #include "h264_parser.h"
 #include "golomb.h"
 #include "rectangle.h"
-#include "vdpau_internal.h"
 
 #include "cabac.h"
 #ifdef ARCH_X86
-#include "x86/h264_i386.h"
+#include "i386/h264_i386.h"
 #endif
 
 //#undef NDEBUG
@@ -102,15 +101,12 @@ static const int left_block_options[4][8]={
     {0,2,0,2,7,10,7,10}
 };
 
-#define LEVEL_TAB_BITS 8
-static int8_t cavlc_level_tab[7][1<<LEVEL_TAB_BITS][2];
-
 static void fill_caches(H264Context *h, int mb_type, int for_deblock){
     MpegEncContext * const s = &h->s;
     const int mb_xy= h->mb_xy;
     int topleft_xy, top_xy, topright_xy, left_xy[2];
     int topleft_type, top_type, topright_type, left_type[2];
-    const int * left_block;
+    int * left_block;
     int topleft_partition= -1;
     int i;
 
@@ -132,34 +128,46 @@ static void fill_caches(H264Context *h, int mb_type, int for_deblock){
         const int top_pair_xy      = pair_xy     - s->mb_stride;
         const int topleft_pair_xy  = top_pair_xy - 1;
         const int topright_pair_xy = top_pair_xy + 1;
-        const int topleft_mb_field_flag  = IS_INTERLACED(s->current_picture.mb_type[topleft_pair_xy]);
-        const int top_mb_field_flag      = IS_INTERLACED(s->current_picture.mb_type[top_pair_xy]);
-        const int topright_mb_field_flag = IS_INTERLACED(s->current_picture.mb_type[topright_pair_xy]);
-        const int left_mb_field_flag     = IS_INTERLACED(s->current_picture.mb_type[pair_xy-1]);
-        const int curr_mb_field_flag     = IS_INTERLACED(mb_type);
+        const int topleft_mb_frame_flag  = !IS_INTERLACED(s->current_picture.mb_type[topleft_pair_xy]);
+        const int top_mb_frame_flag      = !IS_INTERLACED(s->current_picture.mb_type[top_pair_xy]);
+        const int topright_mb_frame_flag = !IS_INTERLACED(s->current_picture.mb_type[topright_pair_xy]);
+        const int left_mb_frame_flag = !IS_INTERLACED(s->current_picture.mb_type[pair_xy-1]);
+        const int curr_mb_frame_flag = !IS_INTERLACED(mb_type);
         const int bottom = (s->mb_y & 1);
-        tprintf(s->avctx, "fill_caches: curr_mb_field_flag:%d, left_mb_field_flag:%d, topleft_mb_field_flag:%d, top_mb_field_flag:%d, topright_mb_field_flag:%d\n", curr_mb_field_flag, left_mb_field_flag, topleft_mb_field_flag, top_mb_field_flag, topright_mb_field_flag);
-
-        if (curr_mb_field_flag && (bottom || top_mb_field_flag)){
+        tprintf(s->avctx, "fill_caches: curr_mb_frame_flag:%d, left_mb_frame_flag:%d, topleft_mb_frame_flag:%d, top_mb_frame_flag:%d, topright_mb_frame_flag:%d\n", curr_mb_frame_flag, left_mb_frame_flag, topleft_mb_frame_flag, top_mb_frame_flag, topright_mb_frame_flag);
+        if (bottom
+                ? !curr_mb_frame_flag // bottom macroblock
+                : (!curr_mb_frame_flag && !top_mb_frame_flag) // top macroblock
+                ) {
             top_xy -= s->mb_stride;
         }
-        if (curr_mb_field_flag && (bottom || topleft_mb_field_flag)){
+        if (bottom
+                ? !curr_mb_frame_flag // bottom macroblock
+                : (!curr_mb_frame_flag && !topleft_mb_frame_flag) // top macroblock
+                ) {
             topleft_xy -= s->mb_stride;
-        } else if(bottom && !curr_mb_field_flag && left_mb_field_flag) {
+        } else if(bottom && curr_mb_frame_flag && !left_mb_frame_flag) {
             topleft_xy += s->mb_stride;
             // take top left mv from the middle of the mb, as opposed to all other modes which use the bottom right partition
             topleft_partition = 0;
         }
-        if (curr_mb_field_flag && (bottom || topright_mb_field_flag)){
+        if (bottom
+                ? !curr_mb_frame_flag // bottom macroblock
+                : (!curr_mb_frame_flag && !topright_mb_frame_flag) // top macroblock
+                ) {
             topright_xy -= s->mb_stride;
         }
-        if (left_mb_field_flag != curr_mb_field_flag) {
+        if (left_mb_frame_flag != curr_mb_frame_flag) {
             left_xy[1] = left_xy[0] = pair_xy - 1;
-            if (curr_mb_field_flag) {
+            if (curr_mb_frame_flag) {
+                if (bottom) {
+                    left_block = left_block_options[1];
+                } else {
+                    left_block= left_block_options[2];
+                }
+            } else {
                 left_xy[1] += s->mb_stride;
                 left_block = left_block_options[3];
-            } else {
-                left_block= left_block_options[2 - bottom];
             }
         }
     }
@@ -581,13 +589,13 @@ static inline int check_intra4x4_pred_mode(H264Context *h){
         static const int mask[4]={0x8000,0x2000,0x80,0x20};
         for(i=0; i<4; i++){
             if(!(h->left_samples_available&mask[i])){
-                int status= left[ h->intra4x4_pred_mode_cache[scan8[0] + 8*i] ];
-                if(status<0){
-                    av_log(h->s.avctx, AV_LOG_ERROR, "left block unavailable for requested intra4x4 mode %d at %d %d\n", status, s->mb_x, s->mb_y);
-                    return -1;
-                } else if(status){
-                    h->intra4x4_pred_mode_cache[scan8[0] + 8*i]= status;
-                }
+            int status= left[ h->intra4x4_pred_mode_cache[scan8[0] + 8*i] ];
+            if(status<0){
+                av_log(h->s.avctx, AV_LOG_ERROR, "left block unavailable for requested intra4x4 mode %d at %d %d\n", status, s->mb_x, s->mb_y);
+                return -1;
+            } else if(status){
+                h->intra4x4_pred_mode_cache[scan8[0] + 8*i]= status;
+            }
             }
         }
     }
@@ -874,8 +882,8 @@ static inline void pred_pskip_motion(H264Context * const h, int * const mx, int
     tprintf(h->s.avctx, "pred_pskip: (%d) (%d) at %2d %2d\n", top_ref, left_ref, h->s.mb_x, h->s.mb_y);
 
     if(top_ref == PART_NOT_AVAILABLE || left_ref == PART_NOT_AVAILABLE
-       || !( top_ref | *(uint32_t*)h->mv_cache[0][ scan8[0] - 8 ])
-       || !(left_ref | *(uint32_t*)h->mv_cache[0][ scan8[0] - 1 ])){
+       || (top_ref == 0  && *(uint32_t*)h->mv_cache[0][ scan8[0] - 8 ] == 0)
+       || (left_ref == 0 && *(uint32_t*)h->mv_cache[0][ scan8[0] - 1 ] == 0)){
 
         *mx = *my = 0;
         return;
@@ -1379,26 +1387,9 @@ static const uint8_t *decode_nal(H264Context *h, const uint8_t *src, int *dst_le
     for(i=0; i<length; i++)
         printf("%2X ", src[i]);
 #endif
-
-#ifdef HAVE_FAST_UNALIGNED
-# ifdef HAVE_FAST_64BIT
-#   define RS 7
-    for(i=0; i+1<length; i+=9){
-        if(!((~*(uint64_t*)(src+i) & (*(uint64_t*)(src+i) - 0x0100010001000101ULL)) & 0x8000800080008080ULL))
-# else
-#   define RS 3
-    for(i=0; i+1<length; i+=5){
-        if(!((~*(uint32_t*)(src+i) & (*(uint32_t*)(src+i) - 0x01000101U)) & 0x80008080U))
-# endif
-            continue;
-        if(i>0 && !src[i]) i--;
-        while(src[i]) i++;
-#else
-#   define RS 0
     for(i=0; i+1<length; i+=2){
         if(src[i]) continue;
         if(i>0 && src[i-1]==0) i--;
-#endif
         if(i+2<length && src[i+1]==0 && src[i+2]<=3){
             if(src[i+2]!=3){
                 /* startcode, so we must be past the end */
@@ -1406,7 +1397,6 @@ static const uint8_t *decode_nal(H264Context *h, const uint8_t *src, int *dst_le
             }
             break;
         }
-        i-= RS;
     }
 
     if(i>=length-1){ //no escaped 0
@@ -1416,7 +1406,7 @@ static const uint8_t *decode_nal(H264Context *h, const uint8_t *src, int *dst_le
     }
 
     bufidx = h->nal_unit_type == NAL_DPC ? 1 : 0; // use second escape buffer for inter data
-    h->rbsp_buffer[bufidx]= av_fast_realloc(h->rbsp_buffer[bufidx], &h->rbsp_buffer_size[bufidx], length+FF_INPUT_BUFFER_PADDING_SIZE);
+    h->rbsp_buffer[bufidx]= av_fast_realloc(h->rbsp_buffer[bufidx], &h->rbsp_buffer_size[bufidx], length);
     dst= h->rbsp_buffer[bufidx];
 
     if (dst == NULL){
@@ -1424,30 +1414,21 @@ static const uint8_t *decode_nal(H264Context *h, const uint8_t *src, int *dst_le
     }
 
 //printf("decoding esc\n");
-    memcpy(dst, src, i);
-    si=di=i;
-    while(si+2<length){
+    si=di=0;
+    while(si<length){
         //remove escapes (very rare 1:2^22)
-        if(src[si+2]>3){
-            dst[di++]= src[si++];
-            dst[di++]= src[si++];
-        }else if(src[si]==0 && src[si+1]==0){
+        if(si+2<length && src[si]==0 && src[si+1]==0 && src[si+2]<=3){
             if(src[si+2]==3){ //escape
                 dst[di++]= 0;
                 dst[di++]= 0;
                 si+=3;
                 continue;
             }else //next start code
-                goto nsc;
+                break;
         }
 
         dst[di++]= src[si++];
     }
-    while(si<length)
-        dst[di++]= src[si++];
-nsc:
-
-    memset(dst+di, 0, FF_INPUT_BUFFER_PADDING_SIZE);
 
     *dst_length= di;
     *consumed= si + 1;//+1 for the header
@@ -1606,6 +1587,85 @@ static inline int get_chroma_qp(H264Context *h, int t, int qscale){
     return h->pps.chroma_qp_table[t][qscale];
 }
 
+//FIXME need to check that this does not overflow signed 32 bit for low qp, I am not sure, it's very close
+//FIXME check that gcc inlines this (and optimizes intra & separate_dc stuff away)
+static inline int quantize_c(DCTELEM *block, uint8_t *scantable, int qscale, int intra, int separate_dc){
+    int i;
+    const int * const quant_table= quant_coeff[qscale];
+    const int bias= intra ? (1<<QUANT_SHIFT)/3 : (1<<QUANT_SHIFT)/6;
+    const unsigned int threshold1= (1<<QUANT_SHIFT) - bias - 1;
+    const unsigned int threshold2= (threshold1<<1);
+    int last_non_zero;
+
+    if(separate_dc){
+        if(qscale<=18){
+            //avoid overflows
+            const int dc_bias= intra ? (1<<(QUANT_SHIFT-2))/3 : (1<<(QUANT_SHIFT-2))/6;
+            const unsigned int dc_threshold1= (1<<(QUANT_SHIFT-2)) - dc_bias - 1;
+            const unsigned int dc_threshold2= (dc_threshold1<<1);
+
+            int level= block[0]*quant_coeff[qscale+18][0];
+            if(((unsigned)(level+dc_threshold1))>dc_threshold2){
+                if(level>0){
+                    level= (dc_bias + level)>>(QUANT_SHIFT-2);
+                    block[0]= level;
+                }else{
+                    level= (dc_bias - level)>>(QUANT_SHIFT-2);
+                    block[0]= -level;
+                }
+//                last_non_zero = i;
+            }else{
+                block[0]=0;
+            }
+        }else{
+            const int dc_bias= intra ? (1<<(QUANT_SHIFT+1))/3 : (1<<(QUANT_SHIFT+1))/6;
+            const unsigned int dc_threshold1= (1<<(QUANT_SHIFT+1)) - dc_bias - 1;
+            const unsigned int dc_threshold2= (dc_threshold1<<1);
+
+            int level= block[0]*quant_table[0];
+            if(((unsigned)(level+dc_threshold1))>dc_threshold2){
+                if(level>0){
+                    level= (dc_bias + level)>>(QUANT_SHIFT+1);
+                    block[0]= level;
+                }else{
+                    level= (dc_bias - level)>>(QUANT_SHIFT+1);
+                    block[0]= -level;
+                }
+//                last_non_zero = i;
+            }else{
+                block[0]=0;
+            }
+        }
+        last_non_zero= 0;
+        i=1;
+    }else{
+        last_non_zero= -1;
+        i=0;
+    }
+
+    for(; i<16; i++){
+        const int j= scantable[i];
+        int level= block[j]*quant_table[j];
+
+//        if(   bias+level >= (1<<(QMAT_SHIFT - 3))
+//           || bias-level >= (1<<(QMAT_SHIFT - 3))){
+        if(((unsigned)(level+threshold1))>threshold2){
+            if(level>0){
+                level= (bias + level)>>QUANT_SHIFT;
+                block[j]= level;
+            }else{
+                level= (bias - level)>>QUANT_SHIFT;
+                block[j]= -level;
+            }
+            last_non_zero = i;
+        }else{
+            block[j]=0;
+        }
+    }
+
+    return last_non_zero;
+}
+
 static inline void mc_dir_part(H264Context *h, Picture *pic, int n, int square, int chroma_height, int delta, int list,
                            uint8_t *dest_y, uint8_t *dest_cb, uint8_t *dest_cr,
                            int src_x_offset, int src_y_offset,
@@ -1624,6 +1684,9 @@ static inline void mc_dir_part(H264Context *h, Picture *pic, int n, int square,
     const int pic_width  = 16*s->mb_width;
     const int pic_height = 16*s->mb_height >> MB_FIELD;
 
+    if(!pic->data[0]) //FIXME this is unacceptable, some sensible error concealment must be done for missing reference frames
+        return;
+
     if(mx&7) extra_width -= 3;
     if(my&7) extra_height -= 3;
 
@@ -1886,31 +1949,6 @@ static void hl_motion(H264Context *h, uint8_t *dest_y, uint8_t *dest_cb, uint8_t
     prefetch_motion(h, 1);
 }
 
-static av_cold void init_cavlc_level_tab(void){
-    int suffix_length, mask;
-    unsigned int i;
-
-    for(suffix_length=0; suffix_length<7; suffix_length++){
-        for(i=0; i<(1<<LEVEL_TAB_BITS); i++){
-            int prefix= LEVEL_TAB_BITS - av_log2(2*i);
-            int level_code= (prefix<<suffix_length) + (i>>(LEVEL_TAB_BITS-prefix-1-suffix_length)) - (1<<suffix_length);
-
-            mask= -(level_code&1);
-            level_code= (((2+level_code)>>1) ^ mask) - mask;
-            if(prefix + 1 + suffix_length <= LEVEL_TAB_BITS){
-                cavlc_level_tab[suffix_length][i][0]= level_code;
-                cavlc_level_tab[suffix_length][i][1]= prefix + 1 + suffix_length;
-            }else if(prefix + 1 <= LEVEL_TAB_BITS){
-                cavlc_level_tab[suffix_length][i][0]= prefix+100;
-                cavlc_level_tab[suffix_length][i][1]= prefix + 1;
-            }else{
-                cavlc_level_tab[suffix_length][i][0]= LEVEL_TAB_BITS+100;
-                cavlc_level_tab[suffix_length][i][1]= LEVEL_TAB_BITS;
-            }
-        }
-    }
-}
-
 static av_cold void decode_init_vlc(void){
     static int done = 0;
 
@@ -1977,8 +2015,6 @@ static av_cold void decode_init_vlc(void){
                  &run_len [6][0], 1, 1,
                  &run_bits[6][0], 1, 1,
                  INIT_VLC_USE_NEW_STATIC);
-
-        init_cavlc_level_tab();
     }
 }
 
@@ -2164,8 +2200,6 @@ static av_cold void common_init(H264Context *h){
     s->unrestricted_mv=1;
     s->decode=1; //FIXME
 
-    dsputil_init(&s->dsp, s->avctx); // needed so that idct permutation is known early
-
     memset(h->pps.scaling_matrix4, 16, 6*16*sizeof(uint8_t));
     memset(h->pps.scaling_matrix8, 16, 2*64*sizeof(uint8_t));
 }
@@ -2189,8 +2223,6 @@ static av_cold int decode_init(AVCodecContext *avctx){
 
     if(avctx->codec_id == CODEC_ID_SVQ3)
         avctx->pix_fmt= PIX_FMT_YUVJ420P;
-    else if(avctx->codec_id == CODEC_ID_H264_VDPAU)
-        avctx->pix_fmt= PIX_FMT_VDPAU_H264;
     else
         avctx->pix_fmt= PIX_FMT_YUV420P;
 
@@ -2413,15 +2445,13 @@ static av_always_inline void hl_decode_mb_internal(H264Context *h, int simple){
     int linesize, uvlinesize /*dct_offset*/;
     int i;
     int *block_offset = &h->block_offset[0];
-    const int transform_bypass = !simple && (s->qscale == 0 && h->sps.transform_bypass);
-    /* is_h264 should always be true if SVQ3 is disabled. */
-    const int is_h264 = !ENABLE_SVQ3_DECODER || simple || s->codec_id == CODEC_ID_H264;
+    const int transform_bypass = (s->qscale == 0 && h->sps.transform_bypass), is_h264 = (simple || s->codec_id == CODEC_ID_H264);
     void (*idct_add)(uint8_t *dst, DCTELEM *block, int stride);
     void (*idct_dc_add)(uint8_t *dst, DCTELEM *block, int stride);
 
-    dest_y  = s->current_picture.data[0] + (mb_x + mb_y * s->linesize  ) * 16;
-    dest_cb = s->current_picture.data[1] + (mb_x + mb_y * s->uvlinesize) * 8;
-    dest_cr = s->current_picture.data[2] + (mb_x + mb_y * s->uvlinesize) * 8;
+    dest_y  = s->current_picture.data[0] + (mb_y * 16* s->linesize  ) + mb_x * 16;
+    dest_cb = s->current_picture.data[1] + (mb_y * 8 * s->uvlinesize) + mb_x * 8;
+    dest_cr = s->current_picture.data[2] + (mb_y * 8 * s->uvlinesize) + mb_x * 8;
 
     s->dsp.prefetch(dest_y + (s->mb_x&3)*4*s->linesize + 64, s->linesize, 4);
     s->dsp.prefetch(dest_cb + (s->mb_x&7)*s->uvlinesize + 64, dest_cr - dest_cb, 2);
@@ -2458,6 +2488,17 @@ static av_always_inline void hl_decode_mb_internal(H264Context *h, int simple){
 //        dct_offset = s->linesize * 16;
     }
 
+    if(transform_bypass){
+        idct_dc_add =
+        idct_add = IS_8x8DCT(mb_type) ? s->dsp.add_pixels8 : s->dsp.add_pixels4;
+    }else if(IS_8x8DCT(mb_type)){
+        idct_dc_add = s->dsp.h264_idct8_dc_add;
+        idct_add = s->dsp.h264_idct8_add;
+    }else{
+        idct_dc_add = s->dsp.h264_idct_dc_add;
+        idct_add = s->dsp.h264_idct_add;
+    }
+
     if (!simple && IS_INTRA_PCM(mb_type)) {
         for (i=0; i<16; i++) {
             memcpy(dest_y + i*  linesize, h->mb       + i*8, 16);
@@ -2479,70 +2520,47 @@ static av_always_inline void hl_decode_mb_internal(H264Context *h, int simple){
             if(IS_INTRA4x4(mb_type)){
                 if(simple || !s->encoding){
                     if(IS_8x8DCT(mb_type)){
-                        if(transform_bypass){
-                            idct_dc_add =
-                            idct_add    = s->dsp.add_pixels8;
-                        }else{
-                            idct_dc_add = s->dsp.h264_idct8_dc_add;
-                            idct_add    = s->dsp.h264_idct8_add;
-                        }
                         for(i=0; i<16; i+=4){
                             uint8_t * const ptr= dest_y + block_offset[i];
                             const int dir= h->intra4x4_pred_mode_cache[ scan8[i] ];
-                            if(transform_bypass && h->sps.profile_idc==244 && dir<=1){
-                                h->hpc.pred8x8l_add[dir](ptr, h->mb + i*16, linesize);
-                            }else{
-                                const int nnz = h->non_zero_count_cache[ scan8[i] ];
-                                h->hpc.pred8x8l[ dir ](ptr, (h->topleft_samples_available<<i)&0x8000,
-                                                            (h->topright_samples_available<<i)&0x4000, linesize);
-                                if(nnz){
-                                    if(nnz == 1 && h->mb[i*16])
-                                        idct_dc_add(ptr, h->mb + i*16, linesize);
-                                    else
-                                        idct_add   (ptr, h->mb + i*16, linesize);
-                                }
+                            const int nnz = h->non_zero_count_cache[ scan8[i] ];
+                            h->hpc.pred8x8l[ dir ](ptr, (h->topleft_samples_available<<i)&0x8000,
+                                                   (h->topright_samples_available<<i)&0x4000, linesize);
+                            if(nnz){
+                                if(nnz == 1 && h->mb[i*16])
+                                    idct_dc_add(ptr, h->mb + i*16, linesize);
+                                else
+                                    idct_add(ptr, h->mb + i*16, linesize);
                             }
                         }
-                    }else{
-                        if(transform_bypass){
-                            idct_dc_add =
-                            idct_add    = s->dsp.add_pixels4;
-                        }else{
-                            idct_dc_add = s->dsp.h264_idct_dc_add;
-                            idct_add    = s->dsp.h264_idct_add;
-                        }
-                        for(i=0; i<16; i++){
-                            uint8_t * const ptr= dest_y + block_offset[i];
-                            const int dir= h->intra4x4_pred_mode_cache[ scan8[i] ];
-
-                            if(transform_bypass && h->sps.profile_idc==244 && dir<=1){
-                                h->hpc.pred4x4_add[dir](ptr, h->mb + i*16, linesize);
-                            }else{
-                                uint8_t *topright;
-                                int nnz, tr;
-                                if(dir == DIAG_DOWN_LEFT_PRED || dir == VERT_LEFT_PRED){
-                                    const int topright_avail= (h->topright_samples_available<<i)&0x8000;
-                                    assert(mb_y || linesize <= block_offset[i]);
-                                    if(!topright_avail){
-                                        tr= ptr[3 - linesize]*0x01010101;
-                                        topright= (uint8_t*) &tr;
-                                    }else
-                                        topright= ptr + 4 - linesize;
-                                }else
-                                    topright= NULL;
-
-                                h->hpc.pred4x4[ dir ](ptr, topright, linesize);
-                                nnz = h->non_zero_count_cache[ scan8[i] ];
-                                if(nnz){
-                                    if(is_h264){
-                                        if(nnz == 1 && h->mb[i*16])
-                                            idct_dc_add(ptr, h->mb + i*16, linesize);
-                                        else
-                                            idct_add   (ptr, h->mb + i*16, linesize);
-                                    }else
-                                        svq3_add_idct_c(ptr, h->mb + i*16, linesize, s->qscale, 0);
-                                }
-                            }
+                    }else
+                    for(i=0; i<16; i++){
+                        uint8_t * const ptr= dest_y + block_offset[i];
+                        uint8_t *topright;
+                        const int dir= h->intra4x4_pred_mode_cache[ scan8[i] ];
+                        int nnz, tr;
+
+                        if(dir == DIAG_DOWN_LEFT_PRED || dir == VERT_LEFT_PRED){
+                            const int topright_avail= (h->topright_samples_available<<i)&0x8000;
+                            assert(mb_y || linesize <= block_offset[i]);
+                            if(!topright_avail){
+                                tr= ptr[3 - linesize]*0x01010101;
+                                topright= (uint8_t*) &tr;
+                            }else
+                                topright= ptr + 4 - linesize;
+                        }else
+                            topright= NULL;
+
+                        h->hpc.pred4x4[ dir ](ptr, topright, linesize);
+                        nnz = h->non_zero_count_cache[ scan8[i] ];
+                        if(nnz){
+                            if(is_h264){
+                                if(nnz == 1 && h->mb[i*16])
+                                    idct_dc_add(ptr, h->mb + i*16, linesize);
+                                else
+                                    idct_add(ptr, h->mb + i*16, linesize);
+                            }else
+                                svq3_add_idct_c(ptr, h->mb + i*16, linesize, s->qscale, 0);
                         }
                     }
                 }
@@ -2567,32 +2585,21 @@ static av_always_inline void hl_decode_mb_internal(H264Context *h, int simple){
         if(!IS_INTRA4x4(mb_type)){
             if(is_h264){
                 if(IS_INTRA16x16(mb_type)){
-                    if(transform_bypass){
-                        if(h->sps.profile_idc==244 && (h->intra16x16_pred_mode==VERT_PRED8x8 || h->intra16x16_pred_mode==HOR_PRED8x8)){
-                            h->hpc.pred16x16_add[h->intra16x16_pred_mode](dest_y, block_offset, h->mb, linesize);
-                        }else{
-                            for(i=0; i<16; i++){
-                                if(h->non_zero_count_cache[ scan8[i] ] || h->mb[i*16])
-                                    s->dsp.add_pixels4(dest_y + block_offset[i], h->mb + i*16, linesize);
-                            }
-                        }
-                    }else{
-                         s->dsp.h264_idct_add16intra(dest_y, block_offset, h->mb, linesize, h->non_zero_count_cache);
+                    for(i=0; i<16; i++){
+                        if(h->non_zero_count_cache[ scan8[i] ])
+                            idct_add(dest_y + block_offset[i], h->mb + i*16, linesize);
+                        else if(h->mb[i*16])
+                            idct_dc_add(dest_y + block_offset[i], h->mb + i*16, linesize);
                     }
-                }else if(h->cbp&15){
-                    if(transform_bypass){
-                        const int di = IS_8x8DCT(mb_type) ? 4 : 1;
-                        idct_add= IS_8x8DCT(mb_type) ? s->dsp.add_pixels8 : s->dsp.add_pixels4;
-                        for(i=0; i<16; i+=di){
-                            if(h->non_zero_count_cache[ scan8[i] ]){
+                }else{
+                    const int di = IS_8x8DCT(mb_type) ? 4 : 1;
+                    for(i=0; i<16; i+=di){
+                        int nnz = h->non_zero_count_cache[ scan8[i] ];
+                        if(nnz){
+                            if(nnz==1 && h->mb[i*16])
+                                idct_dc_add(dest_y + block_offset[i], h->mb + i*16, linesize);
+                            else
                                 idct_add(dest_y + block_offset[i], h->mb + i*16, linesize);
-                            }
-                        }
-                    }else{
-                        if(IS_8x8DCT(mb_type)){
-                            s->dsp.h264_idct8_add4(dest_y, block_offset, h->mb, linesize, h->non_zero_count_cache);
-                        }else{
-                            s->dsp.h264_idct_add16(dest_y, block_offset, h->mb, linesize, h->non_zero_count_cache);
                         }
                     }
                 }
@@ -2606,45 +2613,33 @@ static av_always_inline void hl_decode_mb_internal(H264Context *h, int simple){
             }
         }
 
-        if((simple || !ENABLE_GRAY || !(s->flags&CODEC_FLAG_GRAY)) && (h->cbp&0x30)){
+        if(simple || !ENABLE_GRAY || !(s->flags&CODEC_FLAG_GRAY)){
             uint8_t *dest[2] = {dest_cb, dest_cr};
             if(transform_bypass){
-                if(IS_INTRA(mb_type) && h->sps.profile_idc==244 && (h->chroma_pred_mode==VERT_PRED8x8 || h->chroma_pred_mode==HOR_PRED8x8)){
-                    h->hpc.pred8x8_add[h->chroma_pred_mode](dest[0], block_offset + 16, h->mb + 16*16, uvlinesize);
-                    h->hpc.pred8x8_add[h->chroma_pred_mode](dest[1], block_offset + 20, h->mb + 20*16, uvlinesize);
-                }else{
-                    idct_add = s->dsp.add_pixels4;
-                    for(i=16; i<16+8; i++){
-                        if(h->non_zero_count_cache[ scan8[i] ] || h->mb[i*16])
-                            idct_add   (dest[(i&4)>>2] + block_offset[i], h->mb + i*16, uvlinesize);
-                    }
-                }
+                idct_add = idct_dc_add = s->dsp.add_pixels4;
             }else{
+                idct_add = s->dsp.h264_idct_add;
+                idct_dc_add = s->dsp.h264_idct_dc_add;
                 chroma_dc_dequant_idct_c(h->mb + 16*16, h->chroma_qp[0], h->dequant4_coeff[IS_INTRA(mb_type) ? 1:4][h->chroma_qp[0]][0]);
                 chroma_dc_dequant_idct_c(h->mb + 16*16+4*16, h->chroma_qp[1], h->dequant4_coeff[IS_INTRA(mb_type) ? 2:5][h->chroma_qp[1]][0]);
-                if(is_h264){
-                    idct_add = s->dsp.h264_idct_add;
-                    idct_dc_add = s->dsp.h264_idct_dc_add;
-                    for(i=16; i<16+8; i++){
-                        if(h->non_zero_count_cache[ scan8[i] ])
-                            idct_add   (dest[(i&4)>>2] + block_offset[i], h->mb + i*16, uvlinesize);
-                        else if(h->mb[i*16])
-                            idct_dc_add(dest[(i&4)>>2] + block_offset[i], h->mb + i*16, uvlinesize);
-                    }
-                }else{
-                    for(i=16; i<16+8; i++){
-                        if(h->non_zero_count_cache[ scan8[i] ] || h->mb[i*16]){
-                            uint8_t * const ptr= dest[(i&4)>>2] + block_offset[i];
-                            svq3_add_idct_c(ptr, h->mb + i*16, uvlinesize, chroma_qp[s->qscale + 12] - 12, 2);
-                        }
+            }
+            if(is_h264){
+                for(i=16; i<16+8; i++){
+                    if(h->non_zero_count_cache[ scan8[i] ])
+                        idct_add(dest[(i&4)>>2] + block_offset[i], h->mb + i*16, uvlinesize);
+                    else if(h->mb[i*16])
+                        idct_dc_add(dest[(i&4)>>2] + block_offset[i], h->mb + i*16, uvlinesize);
+                }
+            }else{
+                for(i=16; i<16+8; i++){
+                    if(h->non_zero_count_cache[ scan8[i] ] || h->mb[i*16]){
+                        uint8_t * const ptr= dest[(i&4)>>2] + block_offset[i];
+                        svq3_add_idct_c(ptr, h->mb + i*16, uvlinesize, chroma_qp[s->qscale + 12] - 12, 2);
                     }
                 }
             }
         }
     }
-    if(h->cbp || IS_INTRA(mb_type))
-        s->dsp.clear_blocks(h->mb);
-
     if(h->deblocking_filter) {
         backup_mb_border(h, dest_y, dest_cb, dest_cr, linesize, uvlinesize, simple);
         fill_caches(h, mb_type, 1); //FIXME don't fill stuff which isn't used by filter_mb
@@ -2676,7 +2671,8 @@ static void hl_decode_mb(H264Context *h){
     MpegEncContext * const s = &h->s;
     const int mb_xy= h->mb_xy;
     const int mb_type= s->current_picture.mb_type[mb_xy];
-    int is_complex = ENABLE_SMALL || h->is_complex || IS_INTRA_PCM(mb_type) || s->qscale == 0;
+    int is_complex = FRAME_MBAFF || MB_FIELD || IS_INTRA_PCM(mb_type) || s->codec_id != CODEC_ID_H264 ||
+                    (ENABLE_GRAY && (s->flags&CODEC_FLAG_GRAY)) || (ENABLE_H264_ENCODER && s->encoding) || ENABLE_SMALL;
 
     if(ENABLE_H264_ENCODER && !s->decode)
         return;
@@ -2852,7 +2848,7 @@ static int decode_ref_pic_list_reordering(H264Context *h){
             int pred= h->curr_pic_num;
 
             for(index=0; ; index++){
-                unsigned int reordering_of_pic_nums_idc= get_ue_golomb_31(&s->gb);
+                unsigned int reordering_of_pic_nums_idc= get_ue_golomb(&s->gb);
                 unsigned int pic_id;
                 int i;
                 Picture *ref = NULL;
@@ -3418,7 +3414,7 @@ static int decode_ref_pic_marking(H264Context *h, GetBitContext *gb){
     }else{
         if(get_bits1(gb)){ // adaptive_ref_pic_marking_mode_flag
             for(i= 0; i<MAX_MMCO_COUNT; i++) {
-                MMCOOpcode opcode= get_ue_golomb_31(gb);
+                MMCOOpcode opcode= get_ue_golomb(gb);
 
                 h->mmco[i].opcode= opcode;
                 if(opcode==MMCO_SHORT2UNUSED || opcode==MMCO_SHORT2LONG){
@@ -3429,7 +3425,7 @@ static int decode_ref_pic_marking(H264Context *h, GetBitContext *gb){
                     }*/
                 }
                 if(opcode==MMCO_SHORT2LONG || opcode==MMCO_LONG2UNUSED || opcode==MMCO_LONG || opcode==MMCO_SET_MAX_LONG){
-                    unsigned int long_arg= get_ue_golomb_31(gb);
+                    unsigned int long_arg= get_ue_golomb(gb);
                     if(long_arg >= 32 || (long_arg >= 16 && !(opcode == MMCO_LONG2UNUSED && FIELD_PICTURE))){
                         av_log(h->s.avctx, AV_LOG_ERROR, "illegal long ref in memory management control operation %d\n", opcode);
                         return -1;
@@ -3635,6 +3631,7 @@ static int decode_slice_header(H264Context *h, H264Context *h0){
     unsigned int first_mb_in_slice;
     unsigned int pps_id;
     int num_ref_idx_active_override_flag;
+    static const uint8_t slice_type_map[5]= {FF_P_TYPE, FF_B_TYPE, FF_I_TYPE, FF_SP_TYPE, FF_SI_TYPE};
     unsigned int slice_type, tmp, i, j;
     int default_ref_list_done = 0;
     int last_pic_structure;
@@ -3657,7 +3654,7 @@ static int decode_slice_header(H264Context *h, H264Context *h0){
             s->current_picture_ptr= NULL;
     }
 
-    slice_type= get_ue_golomb_31(&s->gb);
+    slice_type= get_ue_golomb(&s->gb);
     if(slice_type > 9){
         av_log(h->s.avctx, AV_LOG_ERROR, "slice type too large (%d) at %d %d\n", h->slice_type, s->mb_x, s->mb_y);
         return -1;
@@ -3668,7 +3665,7 @@ static int decode_slice_header(H264Context *h, H264Context *h0){
     }else
         h->slice_type_fixed=0;
 
-    slice_type= golomb_to_pict_type[ slice_type ];
+    slice_type= slice_type_map[ slice_type ];
     if (slice_type == FF_I_TYPE
         || (h0->current_slice != 0 && slice_type == h0->last_slice_type) ) {
         default_ref_list_done = 1;
@@ -3722,7 +3719,6 @@ static int decode_slice_header(H264Context *h, H264Context *h0){
         if(h != h0)
             return -1;   // width / height changed during parallelized decoding
         free_tables(h);
-        flush_dpb(s->avctx);
         MPV_common_end(s);
     }
     if (!s->context_initialized) {
@@ -3951,7 +3947,7 @@ static int decode_slice_header(H264Context *h, H264Context *h0){
     direct_ref_list_init(h);
 
     if( h->slice_type_nos != FF_I_TYPE && h->pps.cabac ){
-        tmp = get_ue_golomb_31(&s->gb);
+        tmp = get_ue_golomb(&s->gb);
         if(tmp > 2){
             av_log(s->avctx, AV_LOG_ERROR, "cabac_init_idc overflow\n");
             return -1;
@@ -3980,7 +3976,7 @@ static int decode_slice_header(H264Context *h, H264Context *h0){
     h->slice_alpha_c0_offset = 0;
     h->slice_beta_offset = 0;
     if( h->pps.deblocking_filter_parameters_present ) {
-        tmp= get_ue_golomb_31(&s->gb);
+        tmp= get_ue_golomb(&s->gb);
         if(tmp > 2){
             av_log(s->avctx, AV_LOG_ERROR, "deblocking_filter_idc %u out of range\n", tmp);
             return -1;
@@ -4045,8 +4041,6 @@ static int decode_slice_header(H264Context *h, H264Context *h0){
     h->emu_edge_width= (s->flags&CODEC_FLAG_EMU_EDGE) ? 0 : 16;
     h->emu_edge_height= (FRAME_MBAFF || FIELD_PICTURE) ? 0 : h->emu_edge_width;
 
-    s->avctx->refs= h->sps.ref_frame_count;
-
     if(s->avctx->debug&FF_DEBUG_PICT_INFO){
         av_log(h->s.avctx, AV_LOG_DEBUG, "slice:%d %s mb:%d %c%s%s pps:%u frame:%d poc:%d/%d ref:%d/%d qp:%d loop:%d:%d:%d weight:%d%s %s\n",
                h->slice_num,
@@ -4091,10 +4085,13 @@ static inline int get_level_prefix(GetBitContext *gb){
 }
 
 static inline int get_dct8x8_allowed(H264Context *h){
-    if(h->sps.direct_8x8_inference_flag)
-        return !(*(uint64_t*)h->sub_mb_type & ((MB_TYPE_16x8|MB_TYPE_8x16|MB_TYPE_8x8                )*0x0001000100010001ULL));
-    else
-        return !(*(uint64_t*)h->sub_mb_type & ((MB_TYPE_16x8|MB_TYPE_8x16|MB_TYPE_8x8|MB_TYPE_DIRECT2)*0x0001000100010001ULL));
+    int i;
+    for(i=0; i<4; i++){
+        if(!IS_SUB_8X8(h->sub_mb_type[i])
+           || (!h->sps.direct_8x8_inference_flag && IS_DIRECT(h->sub_mb_type[i])))
+            return 0;
+    }
+    return 1;
 }
 
 /**
@@ -4141,81 +4138,56 @@ static int decode_residual(H264Context *h, GetBitContext *gb, DCTELEM *block, in
     tprintf(h->s.avctx, "trailing:%d, total:%d\n", trailing_ones, total_coeff);
     assert(total_coeff<=16);
 
-    i = show_bits(gb, 3);
-    skip_bits(gb, trailing_ones);
-    level[0] = 1-((i&4)>>1);
-    level[1] = 1-((i&2)   );
-    level[2] = 1-((i&1)<<1);
+    for(i=0; i<trailing_ones; i++){
+        level[i]= 1 - 2*get_bits1(gb);
+    }
 
-    if(trailing_ones<total_coeff) {
-        int mask, prefix;
+    if(i<total_coeff) {
+        int level_code, mask;
         int suffix_length = total_coeff > 10 && trailing_ones < 3;
-        int bitsi= show_bits(gb, LEVEL_TAB_BITS);
-        int level_code= cavlc_level_tab[suffix_length][bitsi][0];
-
-        skip_bits(gb, cavlc_level_tab[suffix_length][bitsi][1]);
-        if(level_code >= 100){
-            prefix= level_code - 100;
-            if(prefix == LEVEL_TAB_BITS)
-                prefix += get_level_prefix(gb);
-
-            //first coefficient has suffix_length equal to 0 or 1
-            if(prefix<14){ //FIXME try to build a large unified VLC table for all this
-                if(suffix_length)
-                    level_code= (prefix<<suffix_length) + get_bits(gb, suffix_length); //part
-                else
-                    level_code= (prefix<<suffix_length); //part
-            }else if(prefix==14){
-                if(suffix_length)
-                    level_code= (prefix<<suffix_length) + get_bits(gb, suffix_length); //part
-                else
-                    level_code= prefix + get_bits(gb, 4); //part
-            }else{
-                level_code= (15<<suffix_length) + get_bits(gb, prefix-3); //part
-                if(suffix_length==0) level_code+=15; //FIXME doesn't make (much)sense
-                if(prefix>=16)
-                    level_code += (1<<(prefix-3))-4096;
-            }
-
-            if(trailing_ones < 3) level_code += 2;
+        int prefix= get_level_prefix(gb);
 
-            suffix_length = 2;
-            mask= -(level_code&1);
-            level[trailing_ones]= (((2+level_code)>>1) ^ mask) - mask;
+        //first coefficient has suffix_length equal to 0 or 1
+        if(prefix<14){ //FIXME try to build a large unified VLC table for all this
+            if(suffix_length)
+                level_code= (prefix<<suffix_length) + get_bits(gb, suffix_length); //part
+            else
+                level_code= (prefix<<suffix_length); //part
+        }else if(prefix==14){
+            if(suffix_length)
+                level_code= (prefix<<suffix_length) + get_bits(gb, suffix_length); //part
+            else
+                level_code= prefix + get_bits(gb, 4); //part
         }else{
-            if(trailing_ones < 3) level_code += (level_code>>31)|1;
-
-            suffix_length = 1;
-            if(level_code + 3U > 6U)
-                suffix_length++;
-            level[trailing_ones]= level_code;
+            level_code= (15<<suffix_length) + get_bits(gb, prefix-3); //part
+            if(suffix_length==0) level_code+=15; //FIXME doesn't make (much)sense
+            if(prefix>=16)
+                level_code += (1<<(prefix-3))-4096;
         }
 
+        if(trailing_ones < 3) level_code += 2;
+
+        suffix_length = 1;
+        if(level_code > 5)
+            suffix_length++;
+        mask= -(level_code&1);
+        level[i]= (((2+level_code)>>1) ^ mask) - mask;
+        i++;
+
         //remaining coefficients have suffix_length > 0
-        for(i=trailing_ones+1;i<total_coeff;i++) {
-            static const unsigned int suffix_limit[7] = {0,3,6,12,24,48,INT_MAX };
-            int bitsi= show_bits(gb, LEVEL_TAB_BITS);
-            level_code= cavlc_level_tab[suffix_length][bitsi][0];
-
-            skip_bits(gb, cavlc_level_tab[suffix_length][bitsi][1]);
-            if(level_code >= 100){
-                prefix= level_code - 100;
-                if(prefix == LEVEL_TAB_BITS){
-                    prefix += get_level_prefix(gb);
-                }
-                if(prefix<15){
-                    level_code = (prefix<<suffix_length) + get_bits(gb, suffix_length);
-                }else{
-                    level_code = (15<<suffix_length) + get_bits(gb, prefix-3);
-                    if(prefix>=16)
-                        level_code += (1<<(prefix-3))-4096;
-                }
-                mask= -(level_code&1);
-                level_code= (((2+level_code)>>1) ^ mask) - mask;
+        for(;i<total_coeff;i++) {
+            static const int suffix_limit[7] = {0,5,11,23,47,95,INT_MAX };
+            prefix = get_level_prefix(gb);
+            if(prefix<15){
+                level_code = (prefix<<suffix_length) + get_bits(gb, suffix_length);
+            }else{
+                level_code = (15<<suffix_length) + get_bits(gb, prefix-3);
+                if(prefix>=16)
+                    level_code += (1<<(prefix-3))-4096;
             }
-            level[i]= level_code;
-
-            if(suffix_limit[suffix_length] + level_code > 2U*suffix_limit[suffix_length])
+            mask= -(level_code&1);
+            level[i]= (((2+level_code)>>1) ^ mask) - mask;
+            if(level_code > suffix_limit[suffix_length])
                 suffix_length++;
         }
     }
@@ -4338,6 +4310,8 @@ static int decode_mb_cavlc(H264Context *h){
 
     mb_xy = h->mb_xy = s->mb_x + s->mb_y*s->mb_stride;
 
+    s->dsp.clear_blocks(h->mb); //FIXME avoid if already clear (move after skip handlong?
+
     tprintf(s->avctx, "pic:%d mb:%d/%d\n", h->frame_num, s->mb_x, s->mb_y);
     cbp = 0; /* avoid warning. FIXME: find a solution without slowing
                 down the code */
@@ -4462,7 +4436,7 @@ decode_intra_mb:
                 return -1;
         }
         if(CHROMA){
-            pred_mode= check_intra_pred_mode(h, get_ue_golomb_31(&s->gb));
+            pred_mode= check_intra_pred_mode(h, get_ue_golomb(&s->gb));
             if(pred_mode < 0)
                 return -1;
             h->chroma_pred_mode= pred_mode;
@@ -4472,7 +4446,7 @@ decode_intra_mb:
 
         if(h->slice_type_nos == FF_B_TYPE){
             for(i=0; i<4; i++){
-                h->sub_mb_type[i]= get_ue_golomb_31(&s->gb);
+                h->sub_mb_type[i]= get_ue_golomb(&s->gb);
                 if(h->sub_mb_type[i] >=13){
                     av_log(h->s.avctx, AV_LOG_ERROR, "B sub_mb_type %u out of range at %d %d\n", h->sub_mb_type[i], s->mb_x, s->mb_y);
                     return -1;
@@ -4491,7 +4465,7 @@ decode_intra_mb:
         }else{
             assert(h->slice_type_nos == FF_P_TYPE); //FIXME SP correct ?
             for(i=0; i<4; i++){
-                h->sub_mb_type[i]= get_ue_golomb_31(&s->gb);
+                h->sub_mb_type[i]= get_ue_golomb(&s->gb);
                 if(h->sub_mb_type[i] >=4){
                     av_log(h->s.avctx, AV_LOG_ERROR, "P sub_mb_type %u out of range at %d %d\n", h->sub_mb_type[i], s->mb_x, s->mb_y);
                     return -1;
@@ -4506,17 +4480,10 @@ decode_intra_mb:
             for(i=0; i<4; i++){
                 if(IS_DIRECT(h->sub_mb_type[i])) continue;
                 if(IS_DIR(h->sub_mb_type[i], 0, list)){
-                    unsigned int tmp;
-                    if(ref_count == 1){
-                        tmp= 0;
-                    }else if(ref_count == 2){
-                        tmp= get_bits1(&s->gb)^1;
-                    }else{
-                        tmp= get_ue_golomb_31(&s->gb);
-                        if(tmp>=ref_count){
-                            av_log(h->s.avctx, AV_LOG_ERROR, "ref %u overflow\n", tmp);
-                            return -1;
-                        }
+                    unsigned int tmp = get_te0_golomb(&s->gb, ref_count); //FIXME init to 0 before and skip?
+                    if(tmp>=ref_count){
+                        av_log(h->s.avctx, AV_LOG_ERROR, "ref %u overflow\n", tmp);
+                        return -1;
                     }
                     ref[list][i]= tmp;
                 }else{
@@ -4582,16 +4549,10 @@ decode_intra_mb:
             for(list=0; list<h->list_count; list++){
                     unsigned int val;
                     if(IS_DIR(mb_type, 0, list)){
-                        if(h->ref_count[list]==1){
-                            val= 0;
-                        }else if(h->ref_count[list]==2){
-                            val= get_bits1(&s->gb)^1;
-                        }else{
-                            val= get_ue_golomb_31(&s->gb);
-                            if(val >= h->ref_count[list]){
-                                av_log(h->s.avctx, AV_LOG_ERROR, "ref %u overflow\n", val);
-                                return -1;
-                            }
+                        val= get_te0_golomb(&s->gb, h->ref_count[list]);
+                        if(val >= h->ref_count[list]){
+                            av_log(h->s.avctx, AV_LOG_ERROR, "ref %u overflow\n", val);
+                            return -1;
                         }
                     }else
                         val= LIST_NOT_USED&0xFF;
@@ -4616,16 +4577,10 @@ decode_intra_mb:
                     for(i=0; i<2; i++){
                         unsigned int val;
                         if(IS_DIR(mb_type, i, list)){
-                            if(h->ref_count[list] == 1){
-                                val= 0;
-                            }else if(h->ref_count[list] == 2){
-                                val= get_bits1(&s->gb)^1;
-                            }else{
-                                val= get_ue_golomb_31(&s->gb);
-                                if(val >= h->ref_count[list]){
-                                    av_log(h->s.avctx, AV_LOG_ERROR, "ref %u overflow\n", val);
-                                    return -1;
-                                }
+                            val= get_te0_golomb(&s->gb, h->ref_count[list]);
+                            if(val >= h->ref_count[list]){
+                                av_log(h->s.avctx, AV_LOG_ERROR, "ref %u overflow\n", val);
+                                return -1;
                             }
                         }else
                             val= LIST_NOT_USED&0xFF;
@@ -4653,16 +4608,10 @@ decode_intra_mb:
                     for(i=0; i<2; i++){
                         unsigned int val;
                         if(IS_DIR(mb_type, i, list)){ //FIXME optimize
-                            if(h->ref_count[list]==1){
-                                val= 0;
-                            }else if(h->ref_count[list]==2){
-                                val= get_bits1(&s->gb)^1;
-                            }else{
-                                val= get_ue_golomb_31(&s->gb);
-                                if(val >= h->ref_count[list]){
-                                    av_log(h->s.avctx, AV_LOG_ERROR, "ref %u overflow\n", val);
-                                    return -1;
-                                }
+                            val= get_te0_golomb(&s->gb, h->ref_count[list]);
+                            if(val >= h->ref_count[list]){
+                                av_log(h->s.avctx, AV_LOG_ERROR, "ref %u overflow\n", val);
+                                return -1;
                             }
                         }else
                             val= LIST_NOT_USED&0xFF;
@@ -4887,14 +4836,29 @@ static int decode_cabac_intra_mb_type(H264Context *h, int ctx_base, int intra_sl
     return mb_type;
 }
 
-static int decode_cabac_mb_type_b( H264Context *h ) {
+static int decode_cabac_mb_type( H264Context *h ) {
     MpegEncContext * const s = &h->s;
 
+    if( h->slice_type_nos == FF_I_TYPE ) {
+        return decode_cabac_intra_mb_type(h, 3, 1);
+    } else if( h->slice_type_nos == FF_P_TYPE ) {
+        if( get_cabac_noinline( &h->cabac, &h->cabac_state[14] ) == 0 ) {
+            /* P-type */
+            if( get_cabac_noinline( &h->cabac, &h->cabac_state[15] ) == 0 ) {
+                /* P_L0_D16x16, P_8x8 */
+                return 3 * get_cabac_noinline( &h->cabac, &h->cabac_state[16] );
+            } else {
+                /* P_L0_D8x16, P_L0_D16x8 */
+                return 2 - get_cabac_noinline( &h->cabac, &h->cabac_state[17] );
+            }
+        } else {
+            return decode_cabac_intra_mb_type(h, 17, 0) + 5;
+        }
+    } else if( h->slice_type_nos == FF_B_TYPE ) {
         const int mba_xy = h->left_mb_xy[0];
         const int mbb_xy = h->top_mb_xy;
         int ctx = 0;
         int bits;
-        assert(h->slice_type_nos == FF_B_TYPE);
 
         if( h->slice_table[mba_xy] == h->slice_num && !IS_DIRECT( s->current_picture.mb_type[mba_xy] ) )
             ctx++;
@@ -4923,6 +4887,10 @@ static int decode_cabac_mb_type_b( H264Context *h ) {
 
         bits= ( bits<<1 ) | get_cabac_noinline( &h->cabac, &h->cabac_state[27+5] );
         return bits - 4; /* B_L0_Bi_* through B_Bi_Bi_* */
+    } else {
+        /* TODO SI/SP frames? */
+        return -1;
+    }
 }
 
 static int decode_cabac_mb_skip( H264Context *h, int mb_x, int mb_y ) {
@@ -5036,20 +5004,26 @@ static int decode_cabac_mb_cbp_chroma( H264Context *h) {
     return 1 + get_cabac_noinline( &h->cabac, &h->cabac_state[77 + ctx] );
 }
 static int decode_cabac_mb_dqp( H264Context *h) {
-    int   ctx= h->last_qscale_diff != 0;
+    int   ctx = 0;
     int   val = 0;
 
+    if( h->last_qscale_diff != 0 )
+        ctx++;
+
     while( get_cabac_noinline( &h->cabac, &h->cabac_state[60 + ctx] ) ) {
-        ctx= 2+(ctx>>1);
+        if( ctx < 2 )
+            ctx = 2;
+        else
+            ctx = 3;
         val++;
         if(val > 102) //prevent infinite loop
             return INT_MIN;
     }
 
     if( val&0x01 )
-        return   (val + 1)>>1 ;
+        return (val + 1)/2;
     else
-        return -((val + 1)>>1);
+        return -(val + 1)/2;
 }
 static int decode_cabac_p_mb_sub_type( H264Context *h ) {
     if( get_cabac( &h->cabac, &h->cabac_state[21] ) )
@@ -5101,9 +5075,13 @@ static int decode_cabac_mb_ref( H264Context *h, int list, int n ) {
 
     while( get_cabac( &h->cabac, &h->cabac_state[54+ctx] ) ) {
         ref++;
-        ctx = (ctx>>2)+4;
+        if( ctx < 4 )
+            ctx = 4;
+        else
+            ctx = 5;
         if(ref >= 32 /*h->ref_list[list]*/){
-            return -1;
+            av_log(h->s.avctx, AV_LOG_ERROR, "overflow in decode_cabac_mb_ref\n");
+            return 0; //FIXME we should return -1 and check the return everywhere
         }
     }
     return ref;
@@ -5113,8 +5091,14 @@ static int decode_cabac_mb_mvd( H264Context *h, int list, int n, int l ) {
     int amvd = abs( h->mvd_cache[list][scan8[n] - 1][l] ) +
                abs( h->mvd_cache[list][scan8[n] - 8][l] );
     int ctxbase = (l == 0) ? 40 : 47;
-    int mvd;
-    int ctx = (amvd>2) + (amvd>32);
+    int ctx, mvd;
+
+    if( amvd < 3 )
+        ctx = 0;
+    else if( amvd > 32 )
+        ctx = 2;
+    else
+        ctx = 1;
 
     if(!get_cabac(&h->cabac, &h->cabac_state[ctxbase+ctx]))
         return 0;
@@ -5158,9 +5142,14 @@ static av_always_inline int get_cabac_cbf_ctx( H264Context *h, int cat, int idx,
             nzb = (h-> top_cbp>>(6+idx))&0x01;
         }
     } else {
-        assert(cat == 1 || cat == 2 || cat == 4);
-        nza = h->non_zero_count_cache[scan8[idx] - 1];
-        nzb = h->non_zero_count_cache[scan8[idx] - 8];
+        if( cat == 4 ) {
+            nza = h->non_zero_count_cache[scan8[16+idx] - 1];
+            nzb = h->non_zero_count_cache[scan8[16+idx] - 8];
+        } else {
+            assert(cat == 1 || cat == 2);
+            nza = h->non_zero_count_cache[scan8[idx] - 1];
+            nzb = h->non_zero_count_cache[scan8[idx] - 8];
+        }
     }
 
     if( nza > 0 )
@@ -5242,15 +5231,19 @@ static av_always_inline void decode_cabac_residual_internal( H264Context *h, DCT
      *      1-> AC 16x16  n = luma4x4idx
      *      2-> Luma4x4   n = luma4x4idx
      *      3-> DC Chroma n = iCbCr
-     *      4-> AC Chroma n = 16 + 4 * iCbCr + chroma4x4idx
+     *      4-> AC Chroma n = 4 * iCbCr + chroma4x4idx
      *      5-> Luma8x8   n = 4 * luma8x8idx
      */
 
     /* read coded block flag */
     if( is_dc || cat != 5 ) {
         if( get_cabac( CC, &h->cabac_state[85 + get_cabac_cbf_ctx( h, cat, n, is_dc ) ] ) == 0 ) {
-            if( !is_dc )
-                h->non_zero_count_cache[scan8[n]] = 0;
+            if( !is_dc ) {
+                if( cat == 4 )
+                    h->non_zero_count_cache[scan8[16+n]] = 0;
+                else
+                    h->non_zero_count_cache[scan8[n]] = 0;
+            }
 
 #ifdef CABAC_ON_STACK
             h->cabac.range     = cc.range     ;
@@ -5305,8 +5298,10 @@ static av_always_inline void decode_cabac_residual_internal( H264Context *h, DCT
     } else {
         if( cat == 5 )
             fill_rectangle(&h->non_zero_count_cache[scan8[n]], 2, 2, 8, coeff_count, 1);
+        else if( cat == 4 )
+            h->non_zero_count_cache[scan8[16+n]] = coeff_count;
         else {
-            assert( cat == 1 || cat == 2 || cat == 4 );
+            assert( cat == 1 || cat == 2 );
             h->non_zero_count_cache[scan8[n]] = coeff_count;
         }
     }
@@ -5388,15 +5383,17 @@ static inline void compute_mb_neighbors(H264Context *h)
     if(FRAME_MBAFF){
         const int pair_xy          = s->mb_x     + (s->mb_y & ~1)*s->mb_stride;
         const int top_pair_xy      = pair_xy     - s->mb_stride;
-        const int top_mb_field_flag  = IS_INTERLACED(s->current_picture.mb_type[top_pair_xy]);
-        const int left_mb_field_flag = IS_INTERLACED(s->current_picture.mb_type[pair_xy-1]);
-        const int curr_mb_field_flag = MB_FIELD;
+        const int top_mb_frame_flag      = !IS_INTERLACED(s->current_picture.mb_type[top_pair_xy]);
+        const int left_mb_frame_flag = !IS_INTERLACED(s->current_picture.mb_type[pair_xy-1]);
+        const int curr_mb_frame_flag = !MB_FIELD;
         const int bottom = (s->mb_y & 1);
-
-        if (curr_mb_field_flag && (bottom || top_mb_field_flag)){
+        if (bottom
+                ? !curr_mb_frame_flag // bottom macroblock
+                : (!curr_mb_frame_flag && !top_mb_frame_flag) // top macroblock
+                ) {
             h->top_mb_xy -= s->mb_stride;
         }
-        if (!left_mb_field_flag == curr_mb_field_flag) {
+        if (left_mb_frame_flag != curr_mb_frame_flag) {
             h->left_mb_xy[0] = pair_xy - 1;
         }
     } else if (FIELD_PICTURE) {
@@ -5417,6 +5414,8 @@ static int decode_mb_cabac(H264Context *h) {
 
     mb_xy = h->mb_xy = s->mb_x + s->mb_y*s->mb_stride;
 
+    s->dsp.clear_blocks(h->mb); //FIXME avoid if already clear (move after skip handlong?)
+
     tprintf(s->avctx, "pic:%d mb:%d/%d\n", h->frame_num, s->mb_x, s->mb_y);
     if( h->slice_type_nos != FF_I_TYPE ) {
         int skip;
@@ -5432,7 +5431,9 @@ static int decode_mb_cabac(H264Context *h) {
             if( FRAME_MBAFF && (s->mb_y&1)==0 ){
                 s->current_picture.mb_type[mb_xy] = MB_TYPE_SKIP;
                 h->next_mb_skipped = decode_cabac_mb_skip( h, s->mb_x, s->mb_y+1 );
-                if(!h->next_mb_skipped)
+                if(h->next_mb_skipped)
+                    predict_field_decoding_flag(h);
+                else
                     h->mb_mbaff = h->mb_field_decoding_flag = decode_cabac_field_decoding_flag(h);
             }
 
@@ -5455,9 +5456,12 @@ static int decode_mb_cabac(H264Context *h) {
     h->prev_mb_skipped = 0;
 
     compute_mb_neighbors(h);
+    if( ( mb_type = decode_cabac_mb_type( h ) ) < 0 ) {
+        av_log( h->s.avctx, AV_LOG_ERROR, "decode_cabac_mb_type failed\n" );
+        return -1;
+    }
 
     if( h->slice_type_nos == FF_B_TYPE ) {
-        mb_type = decode_cabac_mb_type_b( h );
         if( mb_type < 23 ){
             partition_count= b_mb_type_info[mb_type].partition_count;
             mb_type=         b_mb_type_info[mb_type].type;
@@ -5466,23 +5470,14 @@ static int decode_mb_cabac(H264Context *h) {
             goto decode_intra_mb;
         }
     } else if( h->slice_type_nos == FF_P_TYPE ) {
-        if( get_cabac_noinline( &h->cabac, &h->cabac_state[14] ) == 0 ) {
-            /* P-type */
-            if( get_cabac_noinline( &h->cabac, &h->cabac_state[15] ) == 0 ) {
-                /* P_L0_D16x16, P_8x8 */
-                mb_type= 3 * get_cabac_noinline( &h->cabac, &h->cabac_state[16] );
-            } else {
-                /* P_L0_D8x16, P_L0_D16x8 */
-                mb_type= 2 - get_cabac_noinline( &h->cabac, &h->cabac_state[17] );
-            }
+        if( mb_type < 5) {
             partition_count= p_mb_type_info[mb_type].partition_count;
             mb_type=         p_mb_type_info[mb_type].type;
         } else {
-            mb_type= decode_cabac_intra_mb_type(h, 17, 0);
+            mb_type -= 5;
             goto decode_intra_mb;
         }
     } else {
-        mb_type= decode_cabac_intra_mb_type(h, 3, 1);
         if(h->slice_type == FF_SI_TYPE && mb_type)
             mb_type--;
         assert(h->slice_type_nos == FF_I_TYPE);
@@ -5602,13 +5597,9 @@ decode_intra_mb:
                 for( i = 0; i < 4; i++ ) {
                     if(IS_DIRECT(h->sub_mb_type[i])) continue;
                     if(IS_DIR(h->sub_mb_type[i], 0, list)){
-                        if( h->ref_count[list] > 1 ){
+                        if( h->ref_count[list] > 1 )
                             ref[list][i] = decode_cabac_mb_ref( h, list, 4*i );
-                            if(ref[list][i] >= (unsigned)h->ref_count[list]){
-                                av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref[list][i], h->ref_count[list]);
-                                return -1;
-                            }
-                        }else
+                        else
                             ref[list][i] = 0;
                     } else {
                         ref[list][i] = -1;
@@ -5691,15 +5682,7 @@ decode_intra_mb:
         if(IS_16X16(mb_type)){
             for(list=0; list<h->list_count; list++){
                 if(IS_DIR(mb_type, 0, list)){
-                    int ref;
-                    if(h->ref_count[list] > 1){
-                        ref= decode_cabac_mb_ref(h, list, 0);
-                        if(ref >= (unsigned)h->ref_count[list]){
-                            av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, h->ref_count[list]);
-                            return -1;
-                        }
-                    }else
-                        ref=0;
+                        const int ref = h->ref_count[list] > 1 ? decode_cabac_mb_ref( h, list, 0 ) : 0;
                         fill_rectangle(&h->ref_cache[list][ scan8[0] ], 4, 4, 8, ref, 1);
                 }else
                     fill_rectangle(&h->ref_cache[list][ scan8[0] ], 4, 4, 8, (uint8_t)LIST_NOT_USED, 1); //FIXME factorize and the other fill_rect below too
@@ -5722,15 +5705,7 @@ decode_intra_mb:
             for(list=0; list<h->list_count; list++){
                     for(i=0; i<2; i++){
                         if(IS_DIR(mb_type, i, list)){
-                            int ref;
-                            if(h->ref_count[list] > 1){
-                                ref= decode_cabac_mb_ref( h, list, 8*i );
-                                if(ref >= (unsigned)h->ref_count[list]){
-                                    av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, h->ref_count[list]);
-                                    return -1;
-                                }
-                            }else
-                                ref=0;
+                            const int ref= h->ref_count[list] > 1 ? decode_cabac_mb_ref( h, list, 8*i ) : 0;
                             fill_rectangle(&h->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, ref, 1);
                         }else
                             fill_rectangle(&h->ref_cache[list][ scan8[0] + 16*i ], 4, 2, 8, (LIST_NOT_USED&0xFF), 1);
@@ -5757,15 +5732,7 @@ decode_intra_mb:
             for(list=0; list<h->list_count; list++){
                     for(i=0; i<2; i++){
                         if(IS_DIR(mb_type, i, list)){ //FIXME optimize
-                            int ref;
-                            if(h->ref_count[list] > 1){
-                                ref= decode_cabac_mb_ref( h, list, 4*i );
-                                if(ref >= (unsigned)h->ref_count[list]){
-                                    av_log(s->avctx, AV_LOG_ERROR, "Reference %d >= %d\n", ref, h->ref_count[list]);
-                                    return -1;
-                                }
-                            }else
-                                ref=0;
+                            const int ref= h->ref_count[list] > 1 ? decode_cabac_mb_ref( h, list, 4*i ) : 0;
                             fill_rectangle(&h->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, ref, 1);
                         }else
                             fill_rectangle(&h->ref_cache[list][ scan8[0] + 2*i ], 2, 4, 8, (LIST_NOT_USED&0xFF), 1);
@@ -5890,7 +5857,7 @@ decode_intra_mb:
                 for( i = 0; i < 4; i++ ) {
                     const int index = 16 + 4 * c + i;
                     //av_log( s->avctx, AV_LOG_ERROR, "INTRA C%d-AC %d\n",c, index - 16 );
-                    decode_cabac_residual(h, h->mb + 16*index, 4, index, scan + 1, qmul, 15);
+                    decode_cabac_residual(h, h->mb + 16*index, 4, index - 16, scan + 1, qmul, 15);
                 }
             }
         } else {
@@ -5919,32 +5886,76 @@ decode_intra_mb:
 
 
 static void filter_mb_edgev( H264Context *h, uint8_t *pix, int stride, int16_t bS[4], int qp ) {
+    int i, d;
     const int index_a = qp + h->slice_alpha_c0_offset;
     const int alpha = (alpha_table+52)[index_a];
     const int beta  = (beta_table+52)[qp + h->slice_beta_offset];
 
     if( bS[0] < 4 ) {
         int8_t tc[4];
-        tc[0] = (tc0_table+52)[index_a][bS[0]];
-        tc[1] = (tc0_table+52)[index_a][bS[1]];
-        tc[2] = (tc0_table+52)[index_a][bS[2]];
-        tc[3] = (tc0_table+52)[index_a][bS[3]];
+        for(i=0; i<4; i++)
+            tc[i] = bS[i] ? (tc0_table+52)[index_a][bS[i] - 1] : -1;
         h->s.dsp.h264_h_loop_filter_luma(pix, stride, alpha, beta, tc);
     } else {
-        h->s.dsp.h264_h_loop_filter_luma_intra(pix, stride, alpha, beta);
+        /* 16px edge length, because bS=4 is triggered by being at
+         * the edge of an intra MB, so all 4 bS are the same */
+            for( d = 0; d < 16; d++ ) {
+                const int p0 = pix[-1];
+                const int p1 = pix[-2];
+                const int p2 = pix[-3];
+
+                const int q0 = pix[0];
+                const int q1 = pix[1];
+                const int q2 = pix[2];
+
+                if( FFABS( p0 - q0 ) < alpha &&
+                    FFABS( p1 - p0 ) < beta &&
+                    FFABS( q1 - q0 ) < beta ) {
+
+                    if(FFABS( p0 - q0 ) < (( alpha >> 2 ) + 2 )){
+                        if( FFABS( p2 - p0 ) < beta)
+                        {
+                            const int p3 = pix[-4];
+                            /* p0', p1', p2' */
+                            pix[-1] = ( p2 + 2*p1 + 2*p0 + 2*q0 + q1 + 4 ) >> 3;
+                            pix[-2] = ( p2 + p1 + p0 + q0 + 2 ) >> 2;
+                            pix[-3] = ( 2*p3 + 3*p2 + p1 + p0 + q0 + 4 ) >> 3;
+                        } else {
+                            /* p0' */
+                            pix[-1] = ( 2*p1 + p0 + q1 + 2 ) >> 2;
+                        }
+                        if( FFABS( q2 - q0 ) < beta)
+                        {
+                            const int q3 = pix[3];
+                            /* q0', q1', q2' */
+                            pix[0] = ( p1 + 2*p0 + 2*q0 + 2*q1 + q2 + 4 ) >> 3;
+                            pix[1] = ( p0 + q0 + q1 + q2 + 2 ) >> 2;
+                            pix[2] = ( 2*q3 + 3*q2 + q1 + q0 + p0 + 4 ) >> 3;
+                        } else {
+                            /* q0' */
+                            pix[0] = ( 2*q1 + q0 + p1 + 2 ) >> 2;
+                        }
+                    }else{
+                        /* p0', q0' */
+                        pix[-1] = ( 2*p1 + p0 + q1 + 2 ) >> 2;
+                        pix[ 0] = ( 2*q1 + q0 + p1 + 2 ) >> 2;
+                    }
+                    tprintf(h->s.avctx, "filter_mb_edgev i:%d d:%d\n# bS:4 -> [%02x, %02x, %02x, %02x, %02x, %02x] =>[%02x, %02x, %02x, %02x]\n", i, d, p2, p1, p0, q0, q1, q2, pix[-2], pix[-1], pix[0], pix[1]);
+                }
+                pix += stride;
+            }
     }
 }
 static void filter_mb_edgecv( H264Context *h, uint8_t *pix, int stride, int16_t bS[4], int qp ) {
+    int i;
     const int index_a = qp + h->slice_alpha_c0_offset;
     const int alpha = (alpha_table+52)[index_a];
     const int beta  = (beta_table+52)[qp + h->slice_beta_offset];
 
     if( bS[0] < 4 ) {
         int8_t tc[4];
-        tc[0] = (tc0_table+52)[index_a][bS[0]]+1;
-        tc[1] = (tc0_table+52)[index_a][bS[1]]+1;
-        tc[2] = (tc0_table+52)[index_a][bS[2]]+1;
-        tc[3] = (tc0_table+52)[index_a][bS[3]]+1;
+        for(i=0; i<4; i++)
+            tc[i] = bS[i] ? (tc0_table+52)[index_a][bS[i] - 1] + 1 : 0;
         h->s.dsp.h264_h_loop_filter_chroma(pix, stride, alpha, beta, tc);
     } else {
         h->s.dsp.h264_h_loop_filter_chroma_intra(pix, stride, alpha, beta);
@@ -5975,7 +5986,7 @@ static void filter_mb_mbaff_edgev( H264Context *h, uint8_t *pix, int stride, int
         beta  = (beta_table+52)[qp[qp_index] + h->slice_beta_offset];
 
         if( bS[bS_index] < 4 ) {
-            const int tc0 = (tc0_table+52)[index_a][bS[bS_index]];
+            const int tc0 = (tc0_table+52)[index_a][bS[bS_index] - 1];
             const int p0 = pix[-1];
             const int p1 = pix[-2];
             const int p2 = pix[-3];
@@ -6069,7 +6080,7 @@ static void filter_mb_mbaff_edgecv( H264Context *h, uint8_t *pix, int stride, in
         beta  = (beta_table+52)[qp[qp_index] + h->slice_beta_offset];
 
         if( bS[bS_index] < 4 ) {
-            const int tc = (tc0_table+52)[index_a][bS[bS_index]] + 1;
+            const int tc = (tc0_table+52)[index_a][bS[bS_index] - 1] + 1;
             const int p0 = pix[-1];
             const int p1 = pix[-2];
             const int q0 = pix[0];
@@ -6103,33 +6114,75 @@ static void filter_mb_mbaff_edgecv( H264Context *h, uint8_t *pix, int stride, in
 }
 
 static void filter_mb_edgeh( H264Context *h, uint8_t *pix, int stride, int16_t bS[4], int qp ) {
+    int i, d;
     const int index_a = qp + h->slice_alpha_c0_offset;
     const int alpha = (alpha_table+52)[index_a];
     const int beta  = (beta_table+52)[qp + h->slice_beta_offset];
+    const int pix_next  = stride;
 
     if( bS[0] < 4 ) {
         int8_t tc[4];
-        tc[0] = (tc0_table+52)[index_a][bS[0]];
-        tc[1] = (tc0_table+52)[index_a][bS[1]];
-        tc[2] = (tc0_table+52)[index_a][bS[2]];
-        tc[3] = (tc0_table+52)[index_a][bS[3]];
+        for(i=0; i<4; i++)
+            tc[i] = bS[i] ? (tc0_table+52)[index_a][bS[i] - 1] : -1;
         h->s.dsp.h264_v_loop_filter_luma(pix, stride, alpha, beta, tc);
     } else {
-        h->s.dsp.h264_v_loop_filter_luma_intra(pix, stride, alpha, beta);
+        /* 16px edge length, see filter_mb_edgev */
+            for( d = 0; d < 16; d++ ) {
+                const int p0 = pix[-1*pix_next];
+                const int p1 = pix[-2*pix_next];
+                const int p2 = pix[-3*pix_next];
+                const int q0 = pix[0];
+                const int q1 = pix[1*pix_next];
+                const int q2 = pix[2*pix_next];
+
+                if( FFABS( p0 - q0 ) < alpha &&
+                    FFABS( p1 - p0 ) < beta &&
+                    FFABS( q1 - q0 ) < beta ) {
+
+                    const int p3 = pix[-4*pix_next];
+                    const int q3 = pix[ 3*pix_next];
+
+                    if(FFABS( p0 - q0 ) < (( alpha >> 2 ) + 2 )){
+                        if( FFABS( p2 - p0 ) < beta) {
+                            /* p0', p1', p2' */
+                            pix[-1*pix_next] = ( p2 + 2*p1 + 2*p0 + 2*q0 + q1 + 4 ) >> 3;
+                            pix[-2*pix_next] = ( p2 + p1 + p0 + q0 + 2 ) >> 2;
+                            pix[-3*pix_next] = ( 2*p3 + 3*p2 + p1 + p0 + q0 + 4 ) >> 3;
+                        } else {
+                            /* p0' */
+                            pix[-1*pix_next] = ( 2*p1 + p0 + q1 + 2 ) >> 2;
+                        }
+                        if( FFABS( q2 - q0 ) < beta) {
+                            /* q0', q1', q2' */
+                            pix[0*pix_next] = ( p1 + 2*p0 + 2*q0 + 2*q1 + q2 + 4 ) >> 3;
+                            pix[1*pix_next] = ( p0 + q0 + q1 + q2 + 2 ) >> 2;
+                            pix[2*pix_next] = ( 2*q3 + 3*q2 + q1 + q0 + p0 + 4 ) >> 3;
+                        } else {
+                            /* q0' */
+                            pix[0*pix_next] = ( 2*q1 + q0 + p1 + 2 ) >> 2;
+                        }
+                    }else{
+                        /* p0', q0' */
+                        pix[-1*pix_next] = ( 2*p1 + p0 + q1 + 2 ) >> 2;
+                        pix[ 0*pix_next] = ( 2*q1 + q0 + p1 + 2 ) >> 2;
+                    }
+                    tprintf(h->s.avctx, "filter_mb_edgeh i:%d d:%d, qp:%d, indexA:%d, alpha:%d, beta:%d\n# bS:%d -> [%02x, %02x, %02x, %02x, %02x, %02x] =>[%02x, %02x, %02x, %02x]\n", i, d, qp, index_a, alpha, beta, bS[i], p2, p1, p0, q0, q1, q2, pix[-2*pix_next], pix[-pix_next], pix[0], pix[pix_next]);
+                }
+                pix++;
+            }
     }
 }
 
 static void filter_mb_edgech( H264Context *h, uint8_t *pix, int stride, int16_t bS[4], int qp ) {
+    int i;
     const int index_a = qp + h->slice_alpha_c0_offset;
     const int alpha = (alpha_table+52)[index_a];
     const int beta  = (beta_table+52)[qp + h->slice_beta_offset];
 
     if( bS[0] < 4 ) {
         int8_t tc[4];
-        tc[0] = (tc0_table+52)[index_a][bS[0]]+1;
-        tc[1] = (tc0_table+52)[index_a][bS[1]]+1;
-        tc[2] = (tc0_table+52)[index_a][bS[2]]+1;
-        tc[3] = (tc0_table+52)[index_a][bS[3]]+1;
+        for(i=0; i<4; i++)
+            tc[i] = bS[i] ? (tc0_table+52)[index_a][bS[i] - 1] + 1 : 0;
         h->s.dsp.h264_v_loop_filter_chroma(pix, stride, alpha, beta, tc);
     } else {
         h->s.dsp.h264_v_loop_filter_chroma_intra(pix, stride, alpha, beta);
@@ -6145,7 +6198,7 @@ static void filter_mb_fast( H264Context *h, int mb_x, int mb_y, uint8_t *img_y,
     mb_xy = h->mb_xy;
 
     if(mb_x==0 || mb_y==mb_y_firstrow || !s->dsp.h264_loop_filter_strength || h->pps.chroma_qp_diff ||
-        !(s->flags2 & CODEC_FLAG2_FAST) || //FIXME filter_mb_fast is broken, thus hasto be, but should not under CODEC_FLAG2_FAST
+1 ||
        (h->deblocking_filter == 2 && (h->slice_table[mb_xy] != h->slice_table[h->top_mb_xy] ||
                                       h->slice_table[mb_xy] != h->slice_table[mb_xy - 1]))) {
         filter_mb(h, mb_x, mb_y, img_y, img_cb, img_cr, linesize, uvlinesize);
@@ -6250,210 +6303,6 @@ static void filter_mb_fast( H264Context *h, int mb_x, int mb_y, uint8_t *img_y,
     }
 }
 
-
-static void av_always_inline filter_mb_dir(H264Context *h, int mb_x, int mb_y, uint8_t *img_y, uint8_t *img_cb, uint8_t *img_cr, unsigned int linesize, unsigned int uvlinesize, int mb_xy, int mb_type, int mvy_limit, int first_vertical_edge_done, int dir) {
-    MpegEncContext * const s = &h->s;
-    int edge;
-    const int mbm_xy = dir == 0 ? mb_xy -1 : h->top_mb_xy;
-    const int mbm_type = s->current_picture.mb_type[mbm_xy];
-    int (*ref2frm) [64] = h->ref2frm[ h->slice_num          &(MAX_SLICES-1) ][0] + (MB_MBAFF ? 20 : 2);
-    int (*ref2frmm)[64] = h->ref2frm[ h->slice_table[mbm_xy]&(MAX_SLICES-1) ][0] + (MB_MBAFF ? 20 : 2);
-    int start = h->slice_table[mbm_xy] == 0xFFFF ? 1 : 0;
-
-    const int edges = (mb_type & (MB_TYPE_16x16|MB_TYPE_SKIP))
-                              == (MB_TYPE_16x16|MB_TYPE_SKIP) ? 1 : 4;
-    // how often to recheck mv-based bS when iterating between edges
-    const int mask_edge = (mb_type & (MB_TYPE_16x16 | (MB_TYPE_16x8 << dir))) ? 3 :
-                          (mb_type & (MB_TYPE_8x16 >> dir)) ? 1 : 0;
-    // how often to recheck mv-based bS when iterating along each edge
-    const int mask_par0 = mb_type & (MB_TYPE_16x16 | (MB_TYPE_8x16 >> dir));
-
-    if (first_vertical_edge_done) {
-        start = 1;
-    }
-
-    if (h->deblocking_filter==2 && h->slice_table[mbm_xy] != h->slice_table[mb_xy])
-        start = 1;
-
-    if (FRAME_MBAFF && (dir == 1) && ((mb_y&1) == 0) && start == 0
-        && !IS_INTERLACED(mb_type)
-        && IS_INTERLACED(mbm_type)
-        ) {
-        // This is a special case in the norm where the filtering must
-        // be done twice (one each of the field) even if we are in a
-        // frame macroblock.
-        //
-        static const int nnz_idx[4] = {4,5,6,3};
-        unsigned int tmp_linesize   = 2 *   linesize;
-        unsigned int tmp_uvlinesize = 2 * uvlinesize;
-        int mbn_xy = mb_xy - 2 * s->mb_stride;
-        int qp;
-        int i, j;
-        int16_t bS[4];
-
-        for(j=0; j<2; j++, mbn_xy += s->mb_stride){
-            if( IS_INTRA(mb_type) ||
-                IS_INTRA(s->current_picture.mb_type[mbn_xy]) ) {
-                bS[0] = bS[1] = bS[2] = bS[3] = 3;
-            } else {
-                const uint8_t *mbn_nnz = h->non_zero_count[mbn_xy];
-                for( i = 0; i < 4; i++ ) {
-                    if( h->non_zero_count_cache[scan8[0]+i] != 0 ||
-                        mbn_nnz[nnz_idx[i]] != 0 )
-                        bS[i] = 2;
-                    else
-                        bS[i] = 1;
-                }
-            }
-            // Do not use s->qscale as luma quantizer because it has not the same
-            // value in IPCM macroblocks.
-            qp = ( s->current_picture.qscale_table[mb_xy] + s->current_picture.qscale_table[mbn_xy] + 1 ) >> 1;
-            tprintf(s->avctx, "filter mb:%d/%d dir:%d edge:%d, QPy:%d ls:%d uvls:%d", mb_x, mb_y, dir, edge, qp, tmp_linesize, tmp_uvlinesize);
-            { int i; for (i = 0; i < 4; i++) tprintf(s->avctx, " bS[%d]:%d", i, bS[i]); tprintf(s->avctx, "\n"); }
-            filter_mb_edgeh( h, &img_y[j*linesize], tmp_linesize, bS, qp );
-            filter_mb_edgech( h, &img_cb[j*uvlinesize], tmp_uvlinesize, bS,
-                              ( h->chroma_qp[0] + get_chroma_qp( h, 0, s->current_picture.qscale_table[mbn_xy] ) + 1 ) >> 1);
-            filter_mb_edgech( h, &img_cr[j*uvlinesize], tmp_uvlinesize, bS,
-                              ( h->chroma_qp[1] + get_chroma_qp( h, 1, s->current_picture.qscale_table[mbn_xy] ) + 1 ) >> 1);
-        }
-
-        start = 1;
-    }
-
-    /* Calculate bS */
-    for( edge = start; edge < edges; edge++ ) {
-        /* mbn_xy: neighbor macroblock */
-        const int mbn_xy = edge > 0 ? mb_xy : mbm_xy;
-        const int mbn_type = s->current_picture.mb_type[mbn_xy];
-        int (*ref2frmn)[64] = edge > 0 ? ref2frm : ref2frmm;
-        int16_t bS[4];
-        int qp;
-
-        if( (edge&1) && IS_8x8DCT(mb_type) )
-            continue;
-
-        if( IS_INTRA(mb_type) ||
-            IS_INTRA(mbn_type) ) {
-            int value;
-            if (edge == 0) {
-                if (   (!IS_INTERLACED(mb_type) && !IS_INTERLACED(mbm_type))
-                    || ((FRAME_MBAFF || (s->picture_structure != PICT_FRAME)) && (dir == 0))
-                ) {
-                    value = 4;
-                } else {
-                    value = 3;
-                }
-            } else {
-                value = 3;
-            }
-            bS[0] = bS[1] = bS[2] = bS[3] = value;
-        } else {
-            int i, l;
-            int mv_done;
-
-            if( edge & mask_edge ) {
-                bS[0] = bS[1] = bS[2] = bS[3] = 0;
-                mv_done = 1;
-            }
-            else if( FRAME_MBAFF && IS_INTERLACED(mb_type ^ mbn_type)) {
-                bS[0] = bS[1] = bS[2] = bS[3] = 1;
-                mv_done = 1;
-            }
-            else if( mask_par0 && (edge || (mbn_type & (MB_TYPE_16x16 | (MB_TYPE_8x16 >> dir)))) ) {
-                int b_idx= 8 + 4 + edge * (dir ? 8:1);
-                int bn_idx= b_idx - (dir ? 8:1);
-                int v = 0;
-
-                for( l = 0; !v && l < 1 + (h->slice_type_nos == FF_B_TYPE); l++ ) {
-                    v |= ref2frm[l][h->ref_cache[l][b_idx]] != ref2frmn[l][h->ref_cache[l][bn_idx]] ||
-                         FFABS( h->mv_cache[l][b_idx][0] - h->mv_cache[l][bn_idx][0] ) >= 4 ||
-                         FFABS( h->mv_cache[l][b_idx][1] - h->mv_cache[l][bn_idx][1] ) >= mvy_limit;
-                }
-
-                if(h->slice_type_nos == FF_B_TYPE && v){
-                    v=0;
-                    for( l = 0; !v && l < 2; l++ ) {
-                        int ln= 1-l;
-                        v |= ref2frm[l][h->ref_cache[l][b_idx]] != ref2frmn[ln][h->ref_cache[ln][bn_idx]] ||
-                            FFABS( h->mv_cache[l][b_idx][0] - h->mv_cache[ln][bn_idx][0] ) >= 4 ||
-                            FFABS( h->mv_cache[l][b_idx][1] - h->mv_cache[ln][bn_idx][1] ) >= mvy_limit;
-                    }
-                }
-
-                bS[0] = bS[1] = bS[2] = bS[3] = v;
-                mv_done = 1;
-            }
-            else
-                mv_done = 0;
-
-            for( i = 0; i < 4; i++ ) {
-                int x = dir == 0 ? edge : i;
-                int y = dir == 0 ? i    : edge;
-                int b_idx= 8 + 4 + x + 8*y;
-                int bn_idx= b_idx - (dir ? 8:1);
-
-                if( h->non_zero_count_cache[b_idx] |
-                    h->non_zero_count_cache[bn_idx] ) {
-                    bS[i] = 2;
-                }
-                else if(!mv_done)
-                {
-                    bS[i] = 0;
-                    for( l = 0; l < 1 + (h->slice_type_nos == FF_B_TYPE); l++ ) {
-                        if( ref2frm[l][h->ref_cache[l][b_idx]] != ref2frmn[l][h->ref_cache[l][bn_idx]] ||
-                            FFABS( h->mv_cache[l][b_idx][0] - h->mv_cache[l][bn_idx][0] ) >= 4 ||
-                            FFABS( h->mv_cache[l][b_idx][1] - h->mv_cache[l][bn_idx][1] ) >= mvy_limit ) {
-                            bS[i] = 1;
-                            break;
-                        }
-                    }
-
-                    if(h->slice_type_nos == FF_B_TYPE && bS[i]){
-                        bS[i] = 0;
-                        for( l = 0; l < 2; l++ ) {
-                            int ln= 1-l;
-                            if( ref2frm[l][h->ref_cache[l][b_idx]] != ref2frmn[ln][h->ref_cache[ln][bn_idx]] ||
-                                FFABS( h->mv_cache[l][b_idx][0] - h->mv_cache[ln][bn_idx][0] ) >= 4 ||
-                                FFABS( h->mv_cache[l][b_idx][1] - h->mv_cache[ln][bn_idx][1] ) >= mvy_limit ) {
-                                bS[i] = 1;
-                                break;
-                            }
-                        }
-                    }
-                }
-            }
-
-            if(bS[0]+bS[1]+bS[2]+bS[3] == 0)
-                continue;
-        }
-
-        /* Filter edge */
-        // Do not use s->qscale as luma quantizer because it has not the same
-        // value in IPCM macroblocks.
-        qp = ( s->current_picture.qscale_table[mb_xy] + s->current_picture.qscale_table[mbn_xy] + 1 ) >> 1;
-        //tprintf(s->avctx, "filter mb:%d/%d dir:%d edge:%d, QPy:%d, QPc:%d, QPcn:%d\n", mb_x, mb_y, dir, edge, qp, h->chroma_qp, s->current_picture.qscale_table[mbn_xy]);
-        tprintf(s->avctx, "filter mb:%d/%d dir:%d edge:%d, QPy:%d ls:%d uvls:%d", mb_x, mb_y, dir, edge, qp, linesize, uvlinesize);
-        { int i; for (i = 0; i < 4; i++) tprintf(s->avctx, " bS[%d]:%d", i, bS[i]); tprintf(s->avctx, "\n"); }
-        if( dir == 0 ) {
-            filter_mb_edgev( h, &img_y[4*edge], linesize, bS, qp );
-            if( (edge&1) == 0 ) {
-                filter_mb_edgecv( h, &img_cb[2*edge], uvlinesize, bS,
-                                  ( h->chroma_qp[0] + get_chroma_qp( h, 0, s->current_picture.qscale_table[mbn_xy] ) + 1 ) >> 1);
-                filter_mb_edgecv( h, &img_cr[2*edge], uvlinesize, bS,
-                                  ( h->chroma_qp[1] + get_chroma_qp( h, 1, s->current_picture.qscale_table[mbn_xy] ) + 1 ) >> 1);
-            }
-        } else {
-            filter_mb_edgeh( h, &img_y[4*edge*linesize], linesize, bS, qp );
-            if( (edge&1) == 0 ) {
-                filter_mb_edgech( h, &img_cb[2*edge*uvlinesize], uvlinesize, bS,
-                                  ( h->chroma_qp[0] + get_chroma_qp( h, 0, s->current_picture.qscale_table[mbn_xy] ) + 1 ) >> 1);
-                filter_mb_edgech( h, &img_cr[2*edge*uvlinesize], uvlinesize, bS,
-                                  ( h->chroma_qp[1] + get_chroma_qp( h, 1, s->current_picture.qscale_table[mbn_xy] ) + 1 ) >> 1);
-            }
-        }
-    }
-}
-
 static void filter_mb( H264Context *h, int mb_x, int mb_y, uint8_t *img_y, uint8_t *img_cb, uint8_t *img_cr, unsigned int linesize, unsigned int uvlinesize) {
     MpegEncContext * const s = &h->s;
     const int mb_xy= mb_x + mb_y*s->mb_stride;
@@ -6498,16 +6347,16 @@ static void filter_mb( H264Context *h, int mb_x, int mb_y, uint8_t *img_y, uint8
 
         if(IS_8x8DCT(mb_type)){
             h->non_zero_count_cache[scan8[0   ]]= h->non_zero_count_cache[scan8[1   ]]=
-            h->non_zero_count_cache[scan8[2   ]]= h->non_zero_count_cache[scan8[3   ]]= h->cbp & 1;
+            h->non_zero_count_cache[scan8[2   ]]= h->non_zero_count_cache[scan8[3   ]]= h->cbp_table[mb_xy] & 1;
 
             h->non_zero_count_cache[scan8[0+ 4]]= h->non_zero_count_cache[scan8[1+ 4]]=
-            h->non_zero_count_cache[scan8[2+ 4]]= h->non_zero_count_cache[scan8[3+ 4]]= h->cbp & 2;
+            h->non_zero_count_cache[scan8[2+ 4]]= h->non_zero_count_cache[scan8[3+ 4]]= h->cbp_table[mb_xy] & 2;
 
             h->non_zero_count_cache[scan8[0+ 8]]= h->non_zero_count_cache[scan8[1+ 8]]=
-            h->non_zero_count_cache[scan8[2+ 8]]= h->non_zero_count_cache[scan8[3+ 8]]= h->cbp & 4;
+            h->non_zero_count_cache[scan8[2+ 8]]= h->non_zero_count_cache[scan8[3+ 8]]= h->cbp_table[mb_xy] & 4;
 
             h->non_zero_count_cache[scan8[0+12]]= h->non_zero_count_cache[scan8[1+12]]=
-            h->non_zero_count_cache[scan8[2+12]]= h->non_zero_count_cache[scan8[3+12]]= h->cbp & 8;
+            h->non_zero_count_cache[scan8[2+12]]= h->non_zero_count_cache[scan8[3+12]]= h->cbp_table[mb_xy] & 8;
         }
     }
 
@@ -6571,26 +6420,218 @@ static void filter_mb( H264Context *h, int mb_x, int mb_y, uint8_t *img_y, uint8
         filter_mb_mbaff_edgecv( h, &img_cb[0], uvlinesize, bS, bqp );
         filter_mb_mbaff_edgecv( h, &img_cr[0], uvlinesize, bS, rqp );
     }
-
-#ifdef CONFIG_SMALL
+    /* dir : 0 -> vertical edge, 1 -> horizontal edge */
     for( dir = 0; dir < 2; dir++ )
-        filter_mb_dir(h, mb_x, mb_y, img_y, img_cb, img_cr, linesize, uvlinesize, mb_xy, mb_type, mvy_limit, dir ? 0 : first_vertical_edge_done, dir);
-#else
-    filter_mb_dir(h, mb_x, mb_y, img_y, img_cb, img_cr, linesize, uvlinesize, mb_xy, mb_type, mvy_limit, first_vertical_edge_done, 0);
-    filter_mb_dir(h, mb_x, mb_y, img_y, img_cb, img_cr, linesize, uvlinesize, mb_xy, mb_type, mvy_limit, 0, 1);
-#endif
+    {
+        int edge;
+        const int mbm_xy = dir == 0 ? mb_xy -1 : h->top_mb_xy;
+        const int mbm_type = s->current_picture.mb_type[mbm_xy];
+        int (*ref2frm) [64] = h->ref2frm[ h->slice_num          &(MAX_SLICES-1) ][0] + (MB_MBAFF ? 20 : 2);
+        int (*ref2frmm)[64] = h->ref2frm[ h->slice_table[mbm_xy]&(MAX_SLICES-1) ][0] + (MB_MBAFF ? 20 : 2);
+        int start = h->slice_table[mbm_xy] == 0xFFFF ? 1 : 0;
+
+        const int edges = (mb_type & (MB_TYPE_16x16|MB_TYPE_SKIP))
+                                  == (MB_TYPE_16x16|MB_TYPE_SKIP) ? 1 : 4;
+        // how often to recheck mv-based bS when iterating between edges
+        const int mask_edge = (mb_type & (MB_TYPE_16x16 | (MB_TYPE_16x8 << dir))) ? 3 :
+                              (mb_type & (MB_TYPE_8x16 >> dir)) ? 1 : 0;
+        // how often to recheck mv-based bS when iterating along each edge
+        const int mask_par0 = mb_type & (MB_TYPE_16x16 | (MB_TYPE_8x16 >> dir));
+
+        if (first_vertical_edge_done) {
+            start = 1;
+            first_vertical_edge_done = 0;
+        }
+
+        if (h->deblocking_filter==2 && h->slice_table[mbm_xy] != h->slice_table[mb_xy])
+            start = 1;
+
+        if (FRAME_MBAFF && (dir == 1) && ((mb_y&1) == 0) && start == 0
+            && !IS_INTERLACED(mb_type)
+            && IS_INTERLACED(mbm_type)
+            ) {
+            // This is a special case in the norm where the filtering must
+            // be done twice (one each of the field) even if we are in a
+            // frame macroblock.
+            //
+            static const int nnz_idx[4] = {4,5,6,3};
+            unsigned int tmp_linesize   = 2 *   linesize;
+            unsigned int tmp_uvlinesize = 2 * uvlinesize;
+            int mbn_xy = mb_xy - 2 * s->mb_stride;
+            int qp;
+            int i, j;
+            int16_t bS[4];
+
+            for(j=0; j<2; j++, mbn_xy += s->mb_stride){
+                if( IS_INTRA(mb_type) ||
+                    IS_INTRA(s->current_picture.mb_type[mbn_xy]) ) {
+                    bS[0] = bS[1] = bS[2] = bS[3] = 3;
+                } else {
+                    const uint8_t *mbn_nnz = h->non_zero_count[mbn_xy];
+                    for( i = 0; i < 4; i++ ) {
+                        if( h->non_zero_count_cache[scan8[0]+i] != 0 ||
+                            mbn_nnz[nnz_idx[i]] != 0 )
+                            bS[i] = 2;
+                        else
+                            bS[i] = 1;
+                    }
+                }
+                // Do not use s->qscale as luma quantizer because it has not the same
+                // value in IPCM macroblocks.
+                qp = ( s->current_picture.qscale_table[mb_xy] + s->current_picture.qscale_table[mbn_xy] + 1 ) >> 1;
+                tprintf(s->avctx, "filter mb:%d/%d dir:%d edge:%d, QPy:%d ls:%d uvls:%d", mb_x, mb_y, dir, edge, qp, tmp_linesize, tmp_uvlinesize);
+                { int i; for (i = 0; i < 4; i++) tprintf(s->avctx, " bS[%d]:%d", i, bS[i]); tprintf(s->avctx, "\n"); }
+                filter_mb_edgeh( h, &img_y[j*linesize], tmp_linesize, bS, qp );
+                filter_mb_edgech( h, &img_cb[j*uvlinesize], tmp_uvlinesize, bS,
+                                  ( h->chroma_qp[0] + get_chroma_qp( h, 0, s->current_picture.qscale_table[mbn_xy] ) + 1 ) >> 1);
+                filter_mb_edgech( h, &img_cr[j*uvlinesize], tmp_uvlinesize, bS,
+                                  ( h->chroma_qp[1] + get_chroma_qp( h, 1, s->current_picture.qscale_table[mbn_xy] ) + 1 ) >> 1);
+            }
+
+            start = 1;
+        }
+
+        /* Calculate bS */
+        for( edge = start; edge < edges; edge++ ) {
+            /* mbn_xy: neighbor macroblock */
+            const int mbn_xy = edge > 0 ? mb_xy : mbm_xy;
+            const int mbn_type = s->current_picture.mb_type[mbn_xy];
+            int (*ref2frmn)[64] = edge > 0 ? ref2frm : ref2frmm;
+            int16_t bS[4];
+            int qp;
+
+            if( (edge&1) && IS_8x8DCT(mb_type) )
+                continue;
+
+            if( IS_INTRA(mb_type) ||
+                IS_INTRA(mbn_type) ) {
+                int value;
+                if (edge == 0) {
+                    if (   (!IS_INTERLACED(mb_type) && !IS_INTERLACED(mbm_type))
+                        || ((FRAME_MBAFF || (s->picture_structure != PICT_FRAME)) && (dir == 0))
+                    ) {
+                        value = 4;
+                    } else {
+                        value = 3;
+                    }
+                } else {
+                    value = 3;
+                }
+                bS[0] = bS[1] = bS[2] = bS[3] = value;
+            } else {
+                int i, l;
+                int mv_done;
+
+                if( edge & mask_edge ) {
+                    bS[0] = bS[1] = bS[2] = bS[3] = 0;
+                    mv_done = 1;
+                }
+                else if( FRAME_MBAFF && IS_INTERLACED(mb_type ^ mbn_type)) {
+                    bS[0] = bS[1] = bS[2] = bS[3] = 1;
+                    mv_done = 1;
+                }
+                else if( mask_par0 && (edge || (mbn_type & (MB_TYPE_16x16 | (MB_TYPE_8x16 >> dir)))) ) {
+                    int b_idx= 8 + 4 + edge * (dir ? 8:1);
+                    int bn_idx= b_idx - (dir ? 8:1);
+                    int v = 0;
+
+                    for( l = 0; !v && l < 1 + (h->slice_type_nos == FF_B_TYPE); l++ ) {
+                        v |= ref2frm[l][h->ref_cache[l][b_idx]] != ref2frmn[l][h->ref_cache[l][bn_idx]] ||
+                             FFABS( h->mv_cache[l][b_idx][0] - h->mv_cache[l][bn_idx][0] ) >= 4 ||
+                             FFABS( h->mv_cache[l][b_idx][1] - h->mv_cache[l][bn_idx][1] ) >= mvy_limit;
+                    }
+
+                    if(h->slice_type_nos == FF_B_TYPE && v){
+                        v=0;
+                        for( l = 0; !v && l < 2; l++ ) {
+                            int ln= 1-l;
+                            v |= ref2frm[l][h->ref_cache[l][b_idx]] != ref2frmn[ln][h->ref_cache[ln][bn_idx]] ||
+                                FFABS( h->mv_cache[l][b_idx][0] - h->mv_cache[ln][bn_idx][0] ) >= 4 ||
+                                FFABS( h->mv_cache[l][b_idx][1] - h->mv_cache[ln][bn_idx][1] ) >= mvy_limit;
+                        }
+                    }
+
+                    bS[0] = bS[1] = bS[2] = bS[3] = v;
+                    mv_done = 1;
+                }
+                else
+                    mv_done = 0;
+
+                for( i = 0; i < 4; i++ ) {
+                    int x = dir == 0 ? edge : i;
+                    int y = dir == 0 ? i    : edge;
+                    int b_idx= 8 + 4 + x + 8*y;
+                    int bn_idx= b_idx - (dir ? 8:1);
+
+                    if( h->non_zero_count_cache[b_idx] != 0 ||
+                        h->non_zero_count_cache[bn_idx] != 0 ) {
+                        bS[i] = 2;
+                    }
+                    else if(!mv_done)
+                    {
+                        bS[i] = 0;
+                        for( l = 0; l < 1 + (h->slice_type_nos == FF_B_TYPE); l++ ) {
+                            if( ref2frm[l][h->ref_cache[l][b_idx]] != ref2frmn[l][h->ref_cache[l][bn_idx]] ||
+                                FFABS( h->mv_cache[l][b_idx][0] - h->mv_cache[l][bn_idx][0] ) >= 4 ||
+                                FFABS( h->mv_cache[l][b_idx][1] - h->mv_cache[l][bn_idx][1] ) >= mvy_limit ) {
+                                bS[i] = 1;
+                                break;
+                            }
+                        }
+
+                        if(h->slice_type_nos == FF_B_TYPE && bS[i]){
+                            bS[i] = 0;
+                            for( l = 0; l < 2; l++ ) {
+                                int ln= 1-l;
+                                if( ref2frm[l][h->ref_cache[l][b_idx]] != ref2frmn[ln][h->ref_cache[ln][bn_idx]] ||
+                                    FFABS( h->mv_cache[l][b_idx][0] - h->mv_cache[ln][bn_idx][0] ) >= 4 ||
+                                    FFABS( h->mv_cache[l][b_idx][1] - h->mv_cache[ln][bn_idx][1] ) >= mvy_limit ) {
+                                    bS[i] = 1;
+                                    break;
+                                }
+                            }
+                        }
+                    }
+                }
+
+                if(bS[0]+bS[1]+bS[2]+bS[3] == 0)
+                    continue;
+            }
+
+            /* Filter edge */
+            // Do not use s->qscale as luma quantizer because it has not the same
+            // value in IPCM macroblocks.
+            qp = ( s->current_picture.qscale_table[mb_xy] + s->current_picture.qscale_table[mbn_xy] + 1 ) >> 1;
+            //tprintf(s->avctx, "filter mb:%d/%d dir:%d edge:%d, QPy:%d, QPc:%d, QPcn:%d\n", mb_x, mb_y, dir, edge, qp, h->chroma_qp, s->current_picture.qscale_table[mbn_xy]);
+            tprintf(s->avctx, "filter mb:%d/%d dir:%d edge:%d, QPy:%d ls:%d uvls:%d", mb_x, mb_y, dir, edge, qp, linesize, uvlinesize);
+            { int i; for (i = 0; i < 4; i++) tprintf(s->avctx, " bS[%d]:%d", i, bS[i]); tprintf(s->avctx, "\n"); }
+            if( dir == 0 ) {
+                filter_mb_edgev( h, &img_y[4*edge], linesize, bS, qp );
+                if( (edge&1) == 0 ) {
+                    filter_mb_edgecv( h, &img_cb[2*edge], uvlinesize, bS,
+                                      ( h->chroma_qp[0] + get_chroma_qp( h, 0, s->current_picture.qscale_table[mbn_xy] ) + 1 ) >> 1);
+                    filter_mb_edgecv( h, &img_cr[2*edge], uvlinesize, bS,
+                                      ( h->chroma_qp[1] + get_chroma_qp( h, 1, s->current_picture.qscale_table[mbn_xy] ) + 1 ) >> 1);
+                }
+            } else {
+                filter_mb_edgeh( h, &img_y[4*edge*linesize], linesize, bS, qp );
+                if( (edge&1) == 0 ) {
+                    filter_mb_edgech( h, &img_cb[2*edge*uvlinesize], uvlinesize, bS,
+                                      ( h->chroma_qp[0] + get_chroma_qp( h, 0, s->current_picture.qscale_table[mbn_xy] ) + 1 ) >> 1);
+                    filter_mb_edgech( h, &img_cr[2*edge*uvlinesize], uvlinesize, bS,
+                                      ( h->chroma_qp[1] + get_chroma_qp( h, 1, s->current_picture.qscale_table[mbn_xy] ) + 1 ) >> 1);
+                }
+            }
+        }
+    }
 }
 
-static int decode_slice(struct AVCodecContext *avctx, void *arg){
-    H264Context *h = *(void**)arg;
+static int decode_slice(struct AVCodecContext *avctx, H264Context *h){
     MpegEncContext * const s = &h->s;
     const int part_mask= s->partitioned_frame ? (AC_END|AC_ERROR) : 0x7F;
 
     s->mb_skip_run= -1;
 
-    h->is_complex = FRAME_MBAFF || s->picture_structure != PICT_FRAME || s->codec_id != CODEC_ID_H264 ||
-                    (ENABLE_GRAY && (s->flags&CODEC_FLAG_GRAY)) || (ENABLE_H264_ENCODER && s->encoding);
-
     if( h->pps.cabac ) {
         int i;
 
@@ -6627,7 +6668,7 @@ static int decode_slice(struct AVCodecContext *avctx, void *arg){
             if( ret >= 0 && FRAME_MBAFF ) { //FIXME optimal? or let mb_decode decode 16x32 ?
                 s->mb_y++;
 
-                ret = decode_mb_cabac(h);
+                if(ret>=0) ret = decode_mb_cabac(h);
 
                 if(ret>=0) hl_decode_mb(h);
                 s->mb_y--;
@@ -6871,16 +6912,10 @@ static int decode_sei(H264Context *h){
     return 0;
 }
 
-static inline int decode_hrd_parameters(H264Context *h, SPS *sps){
+static inline void decode_hrd_parameters(H264Context *h, SPS *sps){
     MpegEncContext * const s = &h->s;
     int cpb_count, i;
-    cpb_count = get_ue_golomb_31(&s->gb) + 1;
-
-    if(cpb_count > 32U){
-        av_log(h->s.avctx, AV_LOG_ERROR, "cpb_count %d invalid\n", cpb_count);
-        return -1;
-    }
-
+    cpb_count = get_ue_golomb(&s->gb) + 1;
     get_bits(&s->gb, 4); /* bit_rate_scale */
     get_bits(&s->gb, 4); /* cpb_size_scale */
     for(i=0; i<cpb_count; i++){
@@ -6892,7 +6927,6 @@ static inline int decode_hrd_parameters(H264Context *h, SPS *sps){
     sps->cpb_removal_delay_length = get_bits(&s->gb, 5) + 1;
     sps->dpb_output_delay_length = get_bits(&s->gb, 5) + 1;
     sps->time_offset_length = get_bits(&s->gb, 5);
-    return 0;
 }
 
 static inline int decode_vui_parameters(H264Context *h, SPS *sps){
@@ -6947,30 +6981,31 @@ static inline int decode_vui_parameters(H264Context *h, SPS *sps){
 
     sps->nal_hrd_parameters_present_flag = get_bits1(&s->gb);
     if(sps->nal_hrd_parameters_present_flag)
-        if(decode_hrd_parameters(h, sps) < 0)
-            return -1;
+        decode_hrd_parameters(h, sps);
     sps->vcl_hrd_parameters_present_flag = get_bits1(&s->gb);
     if(sps->vcl_hrd_parameters_present_flag)
-        if(decode_hrd_parameters(h, sps) < 0)
-            return -1;
+        decode_hrd_parameters(h, sps);
     if(sps->nal_hrd_parameters_present_flag || sps->vcl_hrd_parameters_present_flag)
         get_bits1(&s->gb);     /* low_delay_hrd_flag */
     sps->pic_struct_present_flag = get_bits1(&s->gb);
 
     sps->bitstream_restriction_flag = get_bits1(&s->gb);
     if(sps->bitstream_restriction_flag){
+        unsigned int num_reorder_frames;
         get_bits1(&s->gb);     /* motion_vectors_over_pic_boundaries_flag */
         get_ue_golomb(&s->gb); /* max_bytes_per_pic_denom */
         get_ue_golomb(&s->gb); /* max_bits_per_mb_denom */
         get_ue_golomb(&s->gb); /* log2_max_mv_length_horizontal */
         get_ue_golomb(&s->gb); /* log2_max_mv_length_vertical */
-        sps->num_reorder_frames= get_ue_golomb(&s->gb);
+        num_reorder_frames= get_ue_golomb(&s->gb);
         get_ue_golomb(&s->gb); /*max_dec_frame_buffering*/
 
-        if(sps->num_reorder_frames > 16U /*max_dec_frame_buffering || max_dec_frame_buffering > 16*/){
-            av_log(h->s.avctx, AV_LOG_ERROR, "illegal num_reorder_frames %d\n", sps->num_reorder_frames);
+        if(num_reorder_frames > 16 /*max_dec_frame_buffering || max_dec_frame_buffering > 16*/){
+            av_log(h->s.avctx, AV_LOG_ERROR, "illegal num_reorder_frames %d\n", num_reorder_frames);
             return -1;
         }
+
+        sps->num_reorder_frames= num_reorder_frames;
     }
 
     return 0;
@@ -7020,10 +7055,30 @@ static void decode_scaling_matrices(H264Context *h, SPS *sps, PPS *pps, int is_s
     }
 }
 
+/**
+ * Returns and optionally allocates SPS / PPS structures in the supplied array 'vec'
+ */
+static void *
+alloc_parameter_set(H264Context *h, void **vec, const unsigned int id, const unsigned int max,
+                    const size_t size, const char *name)
+{
+    if(id>=max) {
+        av_log(h->s.avctx, AV_LOG_ERROR, "%s_id (%d) out of range\n", name, id);
+        return NULL;
+    }
+
+    if(!vec[id]) {
+        vec[id] = av_mallocz(size);
+        if(vec[id] == NULL)
+            av_log(h->s.avctx, AV_LOG_ERROR, "cannot allocate memory for %s\n", name);
+    }
+    return vec[id];
+}
+
 static inline int decode_seq_parameter_set(H264Context *h){
     MpegEncContext * const s = &h->s;
     int profile_idc, level_idc;
-    unsigned int sps_id;
+    unsigned int sps_id, tmp, mb_width, mb_height;
     int i;
     SPS *sps;
 
@@ -7034,13 +7089,9 @@ static inline int decode_seq_parameter_set(H264Context *h){
     get_bits1(&s->gb);   //constraint_set3_flag
     get_bits(&s->gb, 4); // reserved
     level_idc= get_bits(&s->gb, 8);
-    sps_id= get_ue_golomb_31(&s->gb);
+    sps_id= get_ue_golomb(&s->gb);
 
-    if(sps_id >= MAX_SPS_COUNT) {
-        av_log(h->s.avctx, AV_LOG_ERROR, "sps_id (%d) out of range\n", sps_id);
-        return -1;
-    }
-    sps= av_mallocz(sizeof(SPS));
+    sps = alloc_parameter_set(h, (void **)h->sps_buffers, sps_id, MAX_SPS_COUNT, sizeof(SPS), "sps");
     if(sps == NULL)
         return -1;
 
@@ -7052,7 +7103,7 @@ static inline int decode_seq_parameter_set(H264Context *h){
     sps->scaling_matrix_present = 0;
 
     if(sps->profile_idc >= 100){ //high profile
-        sps->chroma_format_idc= get_ue_golomb_31(&s->gb);
+        sps->chroma_format_idc= get_ue_golomb(&s->gb);
         if(sps->chroma_format_idc == 3)
             get_bits1(&s->gb);  //residual_color_transform_flag
         get_ue_golomb(&s->gb);  //bit_depth_luma_minus8
@@ -7064,7 +7115,7 @@ static inline int decode_seq_parameter_set(H264Context *h){
     }
 
     sps->log2_max_frame_num= get_ue_golomb(&s->gb) + 4;
-    sps->poc_type= get_ue_golomb_31(&s->gb);
+    sps->poc_type= get_ue_golomb(&s->gb);
 
     if(sps->poc_type == 0){ //FIXME #define
         sps->log2_max_poc_lsb= get_ue_golomb(&s->gb) + 4;
@@ -7072,33 +7123,37 @@ static inline int decode_seq_parameter_set(H264Context *h){
         sps->delta_pic_order_always_zero_flag= get_bits1(&s->gb);
         sps->offset_for_non_ref_pic= get_se_golomb(&s->gb);
         sps->offset_for_top_to_bottom_field= get_se_golomb(&s->gb);
-        sps->poc_cycle_length                = get_ue_golomb(&s->gb);
+        tmp= get_ue_golomb(&s->gb);
 
-        if((unsigned)sps->poc_cycle_length >= FF_ARRAY_ELEMS(sps->offset_for_ref_frame)){
-            av_log(h->s.avctx, AV_LOG_ERROR, "poc_cycle_length overflow %u\n", sps->poc_cycle_length);
-            goto fail;
+        if(tmp >= FF_ARRAY_ELEMS(sps->offset_for_ref_frame)){
+            av_log(h->s.avctx, AV_LOG_ERROR, "poc_cycle_length overflow %u\n", tmp);
+            return -1;
         }
+        sps->poc_cycle_length= tmp;
 
         for(i=0; i<sps->poc_cycle_length; i++)
             sps->offset_for_ref_frame[i]= get_se_golomb(&s->gb);
     }else if(sps->poc_type != 2){
         av_log(h->s.avctx, AV_LOG_ERROR, "illegal POC type %d\n", sps->poc_type);
-        goto fail;
+        return -1;
     }
 
-    sps->ref_frame_count= get_ue_golomb_31(&s->gb);
-    if(sps->ref_frame_count > MAX_PICTURE_COUNT-2 || sps->ref_frame_count >= 32U){
+    tmp= get_ue_golomb(&s->gb);
+    if(tmp > MAX_PICTURE_COUNT-2 || tmp >= 32){
         av_log(h->s.avctx, AV_LOG_ERROR, "too many reference frames\n");
-        goto fail;
+        return -1;
     }
+    sps->ref_frame_count= tmp;
     sps->gaps_in_frame_num_allowed_flag= get_bits1(&s->gb);
-    sps->mb_width = get_ue_golomb(&s->gb) + 1;
-    sps->mb_height= get_ue_golomb(&s->gb) + 1;
-    if((unsigned)sps->mb_width >= INT_MAX/16 || (unsigned)sps->mb_height >= INT_MAX/16 ||
-       avcodec_check_dimensions(NULL, 16*sps->mb_width, 16*sps->mb_height)){
+    mb_width= get_ue_golomb(&s->gb) + 1;
+    mb_height= get_ue_golomb(&s->gb) + 1;
+    if(mb_width >= INT_MAX/16 || mb_height >= INT_MAX/16 ||
+       avcodec_check_dimensions(NULL, 16*mb_width, 16*mb_height)){
         av_log(h->s.avctx, AV_LOG_ERROR, "mb_width/height overflow\n");
-        goto fail;
+        return -1;
     }
+    sps->mb_width = mb_width;
+    sps->mb_height= mb_height;
 
     sps->frame_mbs_only_flag= get_bits1(&s->gb);
     if(!sps->frame_mbs_only_flag)
@@ -7149,12 +7204,7 @@ static inline int decode_seq_parameter_set(H264Context *h){
                ((const char*[]){"Gray","420","422","444"})[sps->chroma_format_idc]
                );
     }
-    av_free(h->sps_buffers[sps_id]);
-    h->sps_buffers[sps_id]= sps;
     return 0;
-fail:
-    av_free(sps);
-    return -1;
 }
 
 static void
@@ -7167,22 +7217,19 @@ build_qp_table(PPS *pps, int t, int index)
 
 static inline int decode_picture_parameter_set(H264Context *h, int bit_length){
     MpegEncContext * const s = &h->s;
-    unsigned int pps_id= get_ue_golomb(&s->gb);
+    unsigned int tmp, pps_id= get_ue_golomb(&s->gb);
     PPS *pps;
 
-    if(pps_id >= MAX_PPS_COUNT) {
-        av_log(h->s.avctx, AV_LOG_ERROR, "pps_id (%d) out of range\n", pps_id);
-        return -1;
-    }
-
-    pps= av_mallocz(sizeof(PPS));
+    pps = alloc_parameter_set(h, (void **)h->pps_buffers, pps_id, MAX_PPS_COUNT, sizeof(PPS), "pps");
     if(pps == NULL)
         return -1;
-    pps->sps_id= get_ue_golomb_31(&s->gb);
-    if((unsigned)pps->sps_id>=MAX_SPS_COUNT || h->sps_buffers[pps->sps_id] == NULL){
+
+    tmp= get_ue_golomb(&s->gb);
+    if(tmp>=MAX_SPS_COUNT || h->sps_buffers[tmp] == NULL){
         av_log(h->s.avctx, AV_LOG_ERROR, "sps_id out of range\n");
-        goto fail;
+        return -1;
     }
+    pps->sps_id= tmp;
 
     pps->cabac= get_bits1(&s->gb);
     pps->pic_order_present= get_bits1(&s->gb);
@@ -7228,7 +7275,8 @@ static inline int decode_picture_parameter_set(H264Context *h, int bit_length){
     pps->ref_count[1]= get_ue_golomb(&s->gb) + 1;
     if(pps->ref_count[0]-1 > 32-1 || pps->ref_count[1]-1 > 32-1){
         av_log(h->s.avctx, AV_LOG_ERROR, "reference overflow (pps)\n");
-        goto fail;
+        pps->ref_count[0]= pps->ref_count[1]= 1;
+        return -1;
     }
 
     pps->weighted_pred= get_bits1(&s->gb);
@@ -7273,12 +7321,7 @@ static inline int decode_picture_parameter_set(H264Context *h, int bit_length){
                );
     }
 
-    av_free(h->pps_buffers[pps_id]);
-    h->pps_buffers[pps_id]= pps;
     return 0;
-fail:
-    av_free(pps);
-    return -1;
 }
 
 /**
@@ -7293,10 +7336,8 @@ static void execute_decode_slices(H264Context *h, int context_count){
     H264Context *hx;
     int i;
 
-    if(avctx->codec_id == CODEC_ID_H264_VDPAU)
-        return;
     if(context_count == 1) {
-        decode_slice(avctx, &h);
+        decode_slice(avctx, h);
     } else {
         for(i = 1; i < context_count; i++) {
             hx = h->thread_context[i];
@@ -7305,7 +7346,7 @@ static void execute_decode_slices(H264Context *h, int context_count){
         }
 
         avctx->execute(avctx, (void *)decode_slice,
-                       (void **)h->thread_context, NULL, context_count, sizeof(void*));
+                       (void **)h->thread_context, NULL, context_count);
 
         /* pull back stuff from slices to master context */
         hx = h->thread_context[context_count - 1];
@@ -7422,14 +7463,8 @@ static int decode_nal_units(H264Context *h, const uint8_t *buf, int buf_size){
                && (avctx->skip_frame < AVDISCARD_NONREF || hx->nal_ref_idc)
                && (avctx->skip_frame < AVDISCARD_BIDIR  || hx->slice_type_nos!=FF_B_TYPE)
                && (avctx->skip_frame < AVDISCARD_NONKEY || hx->slice_type_nos==FF_I_TYPE)
-               && avctx->skip_frame < AVDISCARD_ALL){
-                if(ENABLE_H264_VDPAU_DECODER && avctx->codec_id == CODEC_ID_H264_VDPAU){
-                    static const uint8_t start_code[] = {0x00, 0x00, 0x01};
-                    ff_vdpau_h264_add_data_chunk(h, start_code, sizeof(start_code));
-                    ff_vdpau_h264_add_data_chunk(h, &buf[buf_index - consumed], consumed );
-                }else
-                    context_count++;
-            }
+               && avctx->skip_frame < AVDISCARD_ALL)
+                context_count++;
             break;
         case NAL_DPA:
             init_get_bits(&hx->s.gb, ptr, bit_length);
@@ -7632,9 +7667,6 @@ static int decode_frame(AVCodecContext *avctx,
         h->prev_frame_num_offset= h->frame_num_offset;
         h->prev_frame_num= h->frame_num;
 
-        if (ENABLE_H264_VDPAU_DECODER && avctx->codec_id == CODEC_ID_H264_VDPAU)
-            ff_vdpau_h264_picture_complete(h);
-
         /*
          * FIXME: Error handling code does not seem to support interlaced
          * when slices span multiple rows
@@ -8020,22 +8052,4 @@ AVCodec h264_decoder = {
     .long_name = NULL_IF_CONFIG_SMALL("H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"),
 };
 
-#ifdef CONFIG_H264_VDPAU_DECODER
-AVCodec h264_vdpau_decoder = {
-    "h264_vdpau",
-    CODEC_TYPE_VIDEO,
-    CODEC_ID_H264_VDPAU,
-    sizeof(H264Context),
-    decode_init,
-    NULL,
-    decode_end,
-    decode_frame,
-    CODEC_CAP_DR1 | CODEC_CAP_DELAY | CODEC_CAP_HWACCEL_VDPAU,
-    .flush= flush_dpb,
-    .long_name = NULL_IF_CONFIG_SMALL("H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (VDPAU acceleration)"),
-};
-#endif
-
-#ifdef CONFIG_SVQ3_DECODER
 #include "svq3.c"
-#endif
diff --git a/libavcodec/h264.h b/libavcodec/h264.h
index 40a94a0..f7ea19e 100644
--- a/libavcodec/h264.h
+++ b/libavcodec/h264.h
@@ -92,11 +92,6 @@
 
 #define EXTENDED_SAR          255
 
-#define MB_TYPE_REF0       MB_TYPE_ACPRED //dirty but it fits in 16 bit
-#define MB_TYPE_8x8DCT     0x01000000
-#define IS_REF0(a)         ((a) & MB_TYPE_REF0)
-#define IS_8x8DCT(a)       ((a) & MB_TYPE_8x8DCT)
-
 /* NAL unit types */
 enum {
     NAL_SLICE=1,
@@ -339,7 +334,7 @@ typedef struct H264Context{
     int mb_field_decoding_flag;
     int mb_mbaff;              ///< mb_aff_frame && mb_field_decoding_flag
 
-    uint16_t sub_mb_type[4];
+    unsigned int sub_mb_type[4];
 
     //POC stuff
     int poc_lsb;
@@ -491,8 +486,6 @@ typedef struct H264Context{
      * pic_struct in picture timing SEI message
      */
     SEI_PicStructType sei_pic_struct;
-
-    int is_complex;
 }H264Context;
 
 #endif /* AVCODEC_H264_H */
diff --git a/libavcodec/h264_mp4toannexb_bsf.c b/libavcodec/h264_mp4toannexb_bsf.c
index e94f8c6..03eb956 100644
--- a/libavcodec/h264_mp4toannexb_bsf.c
+++ b/libavcodec/h264_mp4toannexb_bsf.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007 Benoit Fouet <benoit.fouet at free.fr>
+ * Copyright (c) 2007 Benoit Fouet <benoit.fouet at purplelabs.com>
  *
  * This file is part of FFmpeg.
  *
diff --git a/libavcodec/h264_parser.c b/libavcodec/h264_parser.c
index cfa04c4..e0973bf 100644
--- a/libavcodec/h264_parser.c
+++ b/libavcodec/h264_parser.c
@@ -44,18 +44,6 @@ int ff_h264_find_frame_end(H264Context *h, const uint8_t *buf, int buf_size)
 
     for(i=0; i<buf_size; i++){
         if(state==7){
-#ifdef HAVE_FAST_UNALIGNED
-        /* we check i<buf_size instead of i+3/7 because its simpler
-         * and there should be FF_INPUT_BUFFER_PADDING_SIZE bytes at the end
-         */
-#    ifdef HAVE_FAST_64BIT
-            while(i<buf_size && !((~*(uint64_t*)(buf+i) & (*(uint64_t*)(buf+i) - 0x0101010101010101ULL)) & 0x8080808080808080ULL))
-                i+=8;
-#    else
-            while(i<buf_size && !((~*(uint32_t*)(buf+i) & (*(uint32_t*)(buf+i) - 0x01010101U)) & 0x80808080U))
-                i+=4;
-#    endif
-#endif
             for(; i<buf_size; i++){
                 if(!buf[i]){
                     state=2;
@@ -161,8 +149,7 @@ static void close(AVCodecParserContext *s)
 
 
 AVCodecParser h264_parser = {
-    { CODEC_ID_H264,
-      CODEC_ID_H264_VDPAU },
+    { CODEC_ID_H264 },
     sizeof(H264Context),
     NULL,
     h264_parse,
diff --git a/libavcodec/h264data.h b/libavcodec/h264data.h
index 20ea3bb..fa4bff8 100644
--- a/libavcodec/h264data.h
+++ b/libavcodec/h264data.h
@@ -32,7 +32,6 @@
 #include <stdint.h>
 #include "libavutil/rational.h"
 #include "mpegvideo.h"
-#include "h264.h"
 
 
 static const AVRational pixel_aspect[17]={
@@ -58,6 +57,9 @@ static const AVRational pixel_aspect[17]={
 static const uint8_t golomb_to_pict_type[5]=
 {FF_P_TYPE, FF_B_TYPE, FF_I_TYPE, FF_SP_TYPE, FF_SI_TYPE};
 
+static const uint8_t pict_type_to_golomb[7]=
+{-1, 2, 0, 1, -1, 4, 3};
+
 static const uint8_t chroma_qp[52]={
     0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,
    12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,
@@ -78,6 +80,18 @@ static const uint8_t golomb_to_inter_cbp[48]={
  17, 18, 20, 24, 19, 21, 26, 28, 23, 27, 29, 30, 22, 25, 38, 41
 };
 
+static const uint8_t intra4x4_cbp_to_golomb[48]={
+  3, 29, 30, 17, 31, 18, 37,  8, 32, 38, 19,  9, 20, 10, 11,  2,
+ 16, 33, 34, 21, 35, 22, 39,  4, 36, 40, 23,  5, 24,  6,  7,  1,
+ 41, 42, 43, 25, 44, 26, 46, 12, 45, 47, 27, 13, 28, 14, 15,  0
+};
+
+static const uint8_t inter_cbp_to_golomb[48]={
+  0,  2,  3,  7,  4,  8, 17, 13,  5, 18,  9, 14, 10, 15, 16, 11,
+  1, 32, 33, 36, 34, 37, 44, 40, 35, 45, 38, 41, 39, 42, 43, 19,
+  6, 24, 25, 20, 26, 21, 46, 28, 27, 47, 22, 29, 23, 30, 31, 12
+};
+
 static const uint8_t golomb_to_inter_cbp_gray[16]={
  0, 1, 2, 4, 8, 3, 5,10,12,15, 7,11,13,14, 6, 9,
 };
@@ -363,6 +377,12 @@ static const uint8_t field_scan8x8_cavlc[64]={
  6+3*8, 6+5*8, 7+3*8, 7+7*8,
 };
 
+#define MB_TYPE_REF0       MB_TYPE_ACPRED //dirty but it fits in 16bit
+#define MB_TYPE_8x8DCT     0x01000000
+#define IS_REF0(a)       ((a)&MB_TYPE_REF0)
+#define IS_8x8DCT(a)     ((a)&MB_TYPE_8x8DCT)
+
+
 typedef struct IMbInfo{
     uint16_t type;
     uint8_t pred_mode;
@@ -513,6 +533,63 @@ static const uint8_t dequant8_coeff_init[6][6]={
   {36,32,58,34,46,43},
 };
 
+#define QUANT_SHIFT 22
+
+static const int quant_coeff[52][16]={
+    { 419430,258111,419430,258111,258111,167772,258111,167772,419430,258111,419430,258111,258111,167772,258111,167772,},
+    { 381300,239675,381300,239675,239675,149131,239675,149131,381300,239675,381300,239675,239675,149131,239675,149131,},
+    { 322639,209715,322639,209715,209715,134218,209715,134218,322639,209715,322639,209715,209715,134218,209715,134218,},
+    { 299593,186414,299593,186414,186414,116711,186414,116711,299593,186414,299593,186414,186414,116711,186414,116711,},
+    { 262144,167772,262144,167772,167772,107374,167772,107374,262144,167772,262144,167772,167772,107374,167772,107374,},
+    { 233017,145889,233017,145889,145889, 92564,145889, 92564,233017,145889,233017,145889,145889, 92564,145889, 92564,},
+    { 209715,129056,209715,129056,129056, 83886,129056, 83886,209715,129056,209715,129056,129056, 83886,129056, 83886,},
+    { 190650,119837,190650,119837,119837, 74565,119837, 74565,190650,119837,190650,119837,119837, 74565,119837, 74565,},
+    { 161319,104858,161319,104858,104858, 67109,104858, 67109,161319,104858,161319,104858,104858, 67109,104858, 67109,},
+    { 149797, 93207,149797, 93207, 93207, 58356, 93207, 58356,149797, 93207,149797, 93207, 93207, 58356, 93207, 58356,},
+    { 131072, 83886,131072, 83886, 83886, 53687, 83886, 53687,131072, 83886,131072, 83886, 83886, 53687, 83886, 53687,},
+    { 116508, 72944,116508, 72944, 72944, 46282, 72944, 46282,116508, 72944,116508, 72944, 72944, 46282, 72944, 46282,},
+    { 104858, 64528,104858, 64528, 64528, 41943, 64528, 41943,104858, 64528,104858, 64528, 64528, 41943, 64528, 41943,},
+    {  95325, 59919, 95325, 59919, 59919, 37283, 59919, 37283, 95325, 59919, 95325, 59919, 59919, 37283, 59919, 37283,},
+    {  80660, 52429, 80660, 52429, 52429, 33554, 52429, 33554, 80660, 52429, 80660, 52429, 52429, 33554, 52429, 33554,},
+    {  74898, 46603, 74898, 46603, 46603, 29178, 46603, 29178, 74898, 46603, 74898, 46603, 46603, 29178, 46603, 29178,},
+    {  65536, 41943, 65536, 41943, 41943, 26844, 41943, 26844, 65536, 41943, 65536, 41943, 41943, 26844, 41943, 26844,},
+    {  58254, 36472, 58254, 36472, 36472, 23141, 36472, 23141, 58254, 36472, 58254, 36472, 36472, 23141, 36472, 23141,},
+    {  52429, 32264, 52429, 32264, 32264, 20972, 32264, 20972, 52429, 32264, 52429, 32264, 32264, 20972, 32264, 20972,},
+    {  47663, 29959, 47663, 29959, 29959, 18641, 29959, 18641, 47663, 29959, 47663, 29959, 29959, 18641, 29959, 18641,},
+    {  40330, 26214, 40330, 26214, 26214, 16777, 26214, 16777, 40330, 26214, 40330, 26214, 26214, 16777, 26214, 16777,},
+    {  37449, 23302, 37449, 23302, 23302, 14589, 23302, 14589, 37449, 23302, 37449, 23302, 23302, 14589, 23302, 14589,},
+    {  32768, 20972, 32768, 20972, 20972, 13422, 20972, 13422, 32768, 20972, 32768, 20972, 20972, 13422, 20972, 13422,},
+    {  29127, 18236, 29127, 18236, 18236, 11570, 18236, 11570, 29127, 18236, 29127, 18236, 18236, 11570, 18236, 11570,},
+    {  26214, 16132, 26214, 16132, 16132, 10486, 16132, 10486, 26214, 16132, 26214, 16132, 16132, 10486, 16132, 10486,},
+    {  23831, 14980, 23831, 14980, 14980,  9321, 14980,  9321, 23831, 14980, 23831, 14980, 14980,  9321, 14980,  9321,},
+    {  20165, 13107, 20165, 13107, 13107,  8389, 13107,  8389, 20165, 13107, 20165, 13107, 13107,  8389, 13107,  8389,},
+    {  18725, 11651, 18725, 11651, 11651,  7294, 11651,  7294, 18725, 11651, 18725, 11651, 11651,  7294, 11651,  7294,},
+    {  16384, 10486, 16384, 10486, 10486,  6711, 10486,  6711, 16384, 10486, 16384, 10486, 10486,  6711, 10486,  6711,},
+    {  14564,  9118, 14564,  9118,  9118,  5785,  9118,  5785, 14564,  9118, 14564,  9118,  9118,  5785,  9118,  5785,},
+    {  13107,  8066, 13107,  8066,  8066,  5243,  8066,  5243, 13107,  8066, 13107,  8066,  8066,  5243,  8066,  5243,},
+    {  11916,  7490, 11916,  7490,  7490,  4660,  7490,  4660, 11916,  7490, 11916,  7490,  7490,  4660,  7490,  4660,},
+    {  10082,  6554, 10082,  6554,  6554,  4194,  6554,  4194, 10082,  6554, 10082,  6554,  6554,  4194,  6554,  4194,},
+    {   9362,  5825,  9362,  5825,  5825,  3647,  5825,  3647,  9362,  5825,  9362,  5825,  5825,  3647,  5825,  3647,},
+    {   8192,  5243,  8192,  5243,  5243,  3355,  5243,  3355,  8192,  5243,  8192,  5243,  5243,  3355,  5243,  3355,},
+    {   7282,  4559,  7282,  4559,  4559,  2893,  4559,  2893,  7282,  4559,  7282,  4559,  4559,  2893,  4559,  2893,},
+    {   6554,  4033,  6554,  4033,  4033,  2621,  4033,  2621,  6554,  4033,  6554,  4033,  4033,  2621,  4033,  2621,},
+    {   5958,  3745,  5958,  3745,  3745,  2330,  3745,  2330,  5958,  3745,  5958,  3745,  3745,  2330,  3745,  2330,},
+    {   5041,  3277,  5041,  3277,  3277,  2097,  3277,  2097,  5041,  3277,  5041,  3277,  3277,  2097,  3277,  2097,},
+    {   4681,  2913,  4681,  2913,  2913,  1824,  2913,  1824,  4681,  2913,  4681,  2913,  2913,  1824,  2913,  1824,},
+    {   4096,  2621,  4096,  2621,  2621,  1678,  2621,  1678,  4096,  2621,  4096,  2621,  2621,  1678,  2621,  1678,},
+    {   3641,  2280,  3641,  2280,  2280,  1446,  2280,  1446,  3641,  2280,  3641,  2280,  2280,  1446,  2280,  1446,},
+    {   3277,  2016,  3277,  2016,  2016,  1311,  2016,  1311,  3277,  2016,  3277,  2016,  2016,  1311,  2016,  1311,},
+    {   2979,  1872,  2979,  1872,  1872,  1165,  1872,  1165,  2979,  1872,  2979,  1872,  1872,  1165,  1872,  1165,},
+    {   2521,  1638,  2521,  1638,  1638,  1049,  1638,  1049,  2521,  1638,  2521,  1638,  1638,  1049,  1638,  1049,},
+    {   2341,  1456,  2341,  1456,  1456,   912,  1456,   912,  2341,  1456,  2341,  1456,  1456,   912,  1456,   912,},
+    {   2048,  1311,  2048,  1311,  1311,   839,  1311,   839,  2048,  1311,  2048,  1311,  1311,   839,  1311,   839,},
+    {   1820,  1140,  1820,  1140,  1140,   723,  1140,   723,  1820,  1140,  1820,  1140,  1140,   723,  1140,   723,},
+    {   1638,  1008,  1638,  1008,  1008,   655,  1008,   655,  1638,  1008,  1638,  1008,  1008,   655,  1008,   655,},
+    {   1489,   936,  1489,   936,   936,   583,   936,   583,  1489,   936,  1489,   936,   936,   583,   936,   583,},
+    {   1260,   819,  1260,   819,   819,   524,   819,   524,  1260,   819,  1260,   819,   819,   524,   819,   524,},
+    {   1170,   728,  1170,   728,   728,   456,   728,   456,  1170,   728,  1170,   728,   728,   456,   728,   456,},
+};
+
 
 /* Deblocking filter (p153) */
 static const uint8_t alpha_table[52*3] = {
@@ -547,34 +624,34 @@ static const uint8_t beta_table[52*3] = {
     18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
     18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
 };
-static const uint8_t tc0_table[52*3][4] = {
-    {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 },
-    {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 },
-    {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 },
-    {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 },
-    {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 },
-    {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 },
-    {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 },
-    {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 },
-    {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 },
-    {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 },
-    {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 },
-    {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 0 }, {-1, 0, 0, 1 },
-    {-1, 0, 0, 1 }, {-1, 0, 0, 1 }, {-1, 0, 0, 1 }, {-1, 0, 1, 1 }, {-1, 0, 1, 1 }, {-1, 1, 1, 1 },
-    {-1, 1, 1, 1 }, {-1, 1, 1, 1 }, {-1, 1, 1, 1 }, {-1, 1, 1, 2 }, {-1, 1, 1, 2 }, {-1, 1, 1, 2 },
-    {-1, 1, 1, 2 }, {-1, 1, 2, 3 }, {-1, 1, 2, 3 }, {-1, 2, 2, 3 }, {-1, 2, 2, 4 }, {-1, 2, 3, 4 },
-    {-1, 2, 3, 4 }, {-1, 3, 3, 5 }, {-1, 3, 4, 6 }, {-1, 3, 4, 6 }, {-1, 4, 5, 7 }, {-1, 4, 5, 8 },
-    {-1, 4, 6, 9 }, {-1, 5, 7,10 }, {-1, 6, 8,11 }, {-1, 6, 8,13 }, {-1, 7,10,14 }, {-1, 8,11,16 },
-    {-1, 9,12,18 }, {-1,10,13,20 }, {-1,11,15,23 }, {-1,13,17,25 },
-    {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 },
-    {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 },
-    {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 },
-    {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 },
-    {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 },
-    {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 },
-    {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 },
-    {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 },
-    {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 }, {-1,13,17,25 },
+static const uint8_t tc0_table[52*3][3] = {
+    { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
+    { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
+    { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
+    { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
+    { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
+    { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
+    { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
+    { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
+    { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
+    { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
+    { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 },
+    { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 0 }, { 0, 0, 1 },
+    { 0, 0, 1 }, { 0, 0, 1 }, { 0, 0, 1 }, { 0, 1, 1 }, { 0, 1, 1 }, { 1, 1, 1 },
+    { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 1 }, { 1, 1, 2 }, { 1, 1, 2 }, { 1, 1, 2 },
+    { 1, 1, 2 }, { 1, 2, 3 }, { 1, 2, 3 }, { 2, 2, 3 }, { 2, 2, 4 }, { 2, 3, 4 },
+    { 2, 3, 4 }, { 3, 3, 5 }, { 3, 4, 6 }, { 3, 4, 6 }, { 4, 5, 7 }, { 4, 5, 8 },
+    { 4, 6, 9 }, { 5, 7,10 }, { 6, 8,11 }, { 6, 8,13 }, { 7,10,14 }, { 8,11,16 },
+    { 9,12,18 }, {10,13,20 }, {11,15,23 }, {13,17,25 },
+    {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 },
+    {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 },
+    {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 },
+    {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 },
+    {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 },
+    {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 },
+    {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 },
+    {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 },
+    {13,17,25 }, {13,17,25 }, {13,17,25 }, {13,17,25 },
 };
 
 /* Cabac pre state table */
diff --git a/libavcodec/h264enc.c b/libavcodec/h264enc.c
index 788e0ae..2cff901 100644
--- a/libavcodec/h264enc.c
+++ b/libavcodec/h264enc.c
@@ -107,154 +107,3 @@ static uint8_t *h264_write_nal_unit(int nal_ref_idc, int nal_unit_type, uint8_t
     return dest+destpos;
 }
 
-static const uint8_t pict_type_to_golomb[7] = {-1, 2, 0, 1, -1, 4, 3};
-
-static const uint8_t intra4x4_cbp_to_golomb[48] = {
-    3, 29, 30, 17, 31, 18, 37,  8, 32, 38, 19,  9, 20, 10, 11,  2,
-   16, 33, 34, 21, 35, 22, 39,  4, 36, 40, 23,  5, 24,  6,  7,  1,
-   41, 42, 43, 25, 44, 26, 46, 12, 45, 47, 27, 13, 28, 14, 15,  0
-};
-
-static const uint8_t inter_cbp_to_golomb[48] = {
-    0,  2,  3,  7,  4,  8, 17, 13,  5, 18,  9, 14, 10, 15, 16, 11,
-    1, 32, 33, 36, 34, 37, 44, 40, 35, 45, 38, 41, 39, 42, 43, 19,
-    6, 24, 25, 20, 26, 21, 46, 28, 27, 47, 22, 29, 23, 30, 31, 12
-};
-
-#define QUANT_SHIFT 22
-
-static const int quant_coeff[52][16] = {
-    { 419430, 258111, 419430, 258111, 258111, 167772, 258111, 167772, 419430, 258111, 419430, 258111, 258111, 167772, 258111, 167772,},
-    { 381300, 239675, 381300, 239675, 239675, 149131, 239675, 149131, 381300, 239675, 381300, 239675, 239675, 149131, 239675, 149131,},
-    { 322639, 209715, 322639, 209715, 209715, 134218, 209715, 134218, 322639, 209715, 322639, 209715, 209715, 134218, 209715, 134218,},
-    { 299593, 186414, 299593, 186414, 186414, 116711, 186414, 116711, 299593, 186414, 299593, 186414, 186414, 116711, 186414, 116711,},
-    { 262144, 167772, 262144, 167772, 167772, 107374, 167772, 107374, 262144, 167772, 262144, 167772, 167772, 107374, 167772, 107374,},
-    { 233017, 145889, 233017, 145889, 145889,  92564, 145889,  92564, 233017, 145889, 233017, 145889, 145889,  92564, 145889,  92564,},
-    { 209715, 129056, 209715, 129056, 129056,  83886, 129056,  83886, 209715, 129056, 209715, 129056, 129056,  83886, 129056,  83886,},
-    { 190650, 119837, 190650, 119837, 119837,  74565, 119837,  74565, 190650, 119837, 190650, 119837, 119837,  74565, 119837,  74565,},
-    { 161319, 104858, 161319, 104858, 104858,  67109, 104858,  67109, 161319, 104858, 161319, 104858, 104858,  67109, 104858,  67109,},
-    { 149797,  93207, 149797,  93207,  93207,  58356,  93207,  58356, 149797,  93207, 149797,  93207,  93207,  58356,  93207,  58356,},
-    { 131072,  83886, 131072,  83886,  83886,  53687,  83886,  53687, 131072,  83886, 131072,  83886,  83886,  53687,  83886,  53687,},
-    { 116508,  72944, 116508,  72944,  72944,  46282,  72944,  46282, 116508,  72944, 116508,  72944,  72944,  46282,  72944,  46282,},
-    { 104858,  64528, 104858,  64528,  64528,  41943,  64528,  41943, 104858,  64528, 104858,  64528,  64528,  41943,  64528,  41943,},
-    {  95325,  59919,  95325,  59919,  59919,  37283,  59919,  37283,  95325,  59919,  95325,  59919,  59919,  37283,  59919,  37283,},
-    {  80660,  52429,  80660,  52429,  52429,  33554,  52429,  33554,  80660,  52429,  80660,  52429,  52429,  33554,  52429,  33554,},
-    {  74898,  46603,  74898,  46603,  46603,  29178,  46603,  29178,  74898,  46603,  74898,  46603,  46603,  29178,  46603,  29178,},
-    {  65536,  41943,  65536,  41943,  41943,  26844,  41943,  26844,  65536,  41943,  65536,  41943,  41943,  26844,  41943,  26844,},
-    {  58254,  36472,  58254,  36472,  36472,  23141,  36472,  23141,  58254,  36472,  58254,  36472,  36472,  23141,  36472,  23141,},
-    {  52429,  32264,  52429,  32264,  32264,  20972,  32264,  20972,  52429,  32264,  52429,  32264,  32264,  20972,  32264,  20972,},
-    {  47663,  29959,  47663,  29959,  29959,  18641,  29959,  18641,  47663,  29959,  47663,  29959,  29959,  18641,  29959,  18641,},
-    {  40330,  26214,  40330,  26214,  26214,  16777,  26214,  16777,  40330,  26214,  40330,  26214,  26214,  16777,  26214,  16777,},
-    {  37449,  23302,  37449,  23302,  23302,  14589,  23302,  14589,  37449,  23302,  37449,  23302,  23302,  14589,  23302,  14589,},
-    {  32768,  20972,  32768,  20972,  20972,  13422,  20972,  13422,  32768,  20972,  32768,  20972,  20972,  13422,  20972,  13422,},
-    {  29127,  18236,  29127,  18236,  18236,  11570,  18236,  11570,  29127,  18236,  29127,  18236,  18236,  11570,  18236,  11570,},
-    {  26214,  16132,  26214,  16132,  16132,  10486,  16132,  10486,  26214,  16132,  26214,  16132,  16132,  10486,  16132,  10486,},
-    {  23831,  14980,  23831,  14980,  14980,   9321,  14980,   9321,  23831,  14980,  23831,  14980,  14980,   9321,  14980,   9321,},
-    {  20165,  13107,  20165,  13107,  13107,   8389,  13107,   8389,  20165,  13107,  20165,  13107,  13107,   8389,  13107,   8389,},
-    {  18725,  11651,  18725,  11651,  11651,   7294,  11651,   7294,  18725,  11651,  18725,  11651,  11651,   7294,  11651,   7294,},
-    {  16384,  10486,  16384,  10486,  10486,   6711,  10486,   6711,  16384,  10486,  16384,  10486,  10486,   6711,  10486,   6711,},
-    {  14564,   9118,  14564,   9118,   9118,   5785,   9118,   5785,  14564,   9118,  14564,   9118,   9118,   5785,   9118,   5785,},
-    {  13107,   8066,  13107,   8066,   8066,   5243,   8066,   5243,  13107,   8066,  13107,   8066,   8066,   5243,   8066,   5243,},
-    {  11916,   7490,  11916,   7490,   7490,   4660,   7490,   4660,  11916,   7490,  11916,   7490,   7490,   4660,   7490,   4660,},
-    {  10082,   6554,  10082,   6554,   6554,   4194,   6554,   4194,  10082,   6554,  10082,   6554,   6554,   4194,   6554,   4194,},
-    {   9362,   5825,   9362,   5825,   5825,   3647,   5825,   3647,   9362,   5825,   9362,   5825,   5825,   3647,   5825,   3647,},
-    {   8192,   5243,   8192,   5243,   5243,   3355,   5243,   3355,   8192,   5243,   8192,   5243,   5243,   3355,   5243,   3355,},
-    {   7282,   4559,   7282,   4559,   4559,   2893,   4559,   2893,   7282,   4559,   7282,   4559,   4559,   2893,   4559,   2893,},
-    {   6554,   4033,   6554,   4033,   4033,   2621,   4033,   2621,   6554,   4033,   6554,   4033,   4033,   2621,   4033,   2621,},
-    {   5958,   3745,   5958,   3745,   3745,   2330,   3745,   2330,   5958,   3745,   5958,   3745,   3745,   2330,   3745,   2330,},
-    {   5041,   3277,   5041,   3277,   3277,   2097,   3277,   2097,   5041,   3277,   5041,   3277,   3277,   2097,   3277,   2097,},
-    {   4681,   2913,   4681,   2913,   2913,   1824,   2913,   1824,   4681,   2913,   4681,   2913,   2913,   1824,   2913,   1824,},
-    {   4096,   2621,   4096,   2621,   2621,   1678,   2621,   1678,   4096,   2621,   4096,   2621,   2621,   1678,   2621,   1678,},
-    {   3641,   2280,   3641,   2280,   2280,   1446,   2280,   1446,   3641,   2280,   3641,   2280,   2280,   1446,   2280,   1446,},
-    {   3277,   2016,   3277,   2016,   2016,   1311,   2016,   1311,   3277,   2016,   3277,   2016,   2016,   1311,   2016,   1311,},
-    {   2979,   1872,   2979,   1872,   1872,   1165,   1872,   1165,   2979,   1872,   2979,   1872,   1872,   1165,   1872,   1165,},
-    {   2521,   1638,   2521,   1638,   1638,   1049,   1638,   1049,   2521,   1638,   2521,   1638,   1638,   1049,   1638,   1049,},
-    {   2341,   1456,   2341,   1456,   1456,    912,   1456,    912,   2341,   1456,   2341,   1456,   1456,    912,   1456,    912,},
-    {   2048,   1311,   2048,   1311,   1311,    839,   1311,    839,   2048,   1311,   2048,   1311,   1311,    839,   1311,    839,},
-    {   1820,   1140,   1820,   1140,   1140,    723,   1140,    723,   1820,   1140,   1820,   1140,   1140,    723,   1140,    723,},
-    {   1638,   1008,   1638,   1008,   1008,    655,   1008,    655,   1638,   1008,   1638,   1008,   1008,    655,   1008,    655,},
-    {   1489,    936,   1489,    936,    936,    583,    936,    583,   1489,    936,   1489,    936,    936,    583,    936,    583,},
-    {   1260,    819,   1260,    819,    819,    524,    819,    524,   1260,    819,   1260,    819,    819,    524,    819,    524,},
-    {   1170,    728,   1170,    728,    728,    456,    728,    456,   1170,    728,   1170,    728,    728,    456,    728,    456,},
-};
-
-//FIXME need to check that this does not overflow signed 32 bit for low qp, I am not sure, it's very close
-//FIXME check that gcc inlines this (and optimizes intra & separate_dc stuff away)
-static inline int quantize_c(DCTELEM *block, uint8_t *scantable, int qscale,
-                             int intra, int separate_dc)
-{
-    int i;
-    const int * const quant_3Btable = quant_coeff[qscale];
-    const int bias = intra ? (1 << QUANT_SHIFT) / 3 : (1 << QUANT_SHIFT) / 6;
-    const unsigned int threshold1 = (1 << QUANT_SHIFT) - bias - 1;
-    const unsigned int threshold2 = (threshold1 << 1);
-    int last_non_zero;
-
-    if (separate_dc) {
-        if (qscale <= 18) {
-            //avoid overflows
-            const int dc_bias = intra ? (1 << (QUANT_SHIFT - 2)) / 3 : (1 << (QUANT_SHIFT - 2)) / 6;
-            const unsigned int dc_threshold1 = (1 << (QUANT_SHIFT - 2)) - dc_bias - 1;
-            const unsigned int dc_threshold2 = (dc_threshold1 << 1);
-
-            int level = block[0]*quant_coeff[qscale+18][0];
-            if (((unsigned)(level + dc_threshold1)) > dc_threshold2) {
-                if (level > 0) {
-                    level = (dc_bias + level) >> (QUANT_SHIFT - 2);
-                    block[0] = level;
-                } else {
-                    level = (dc_bias - level) >> (QUANT_SHIFT - 2);
-                    block[0] = -level;
-                }
-//                last_non_zero = i;
-            } else {
-                block[0] = 0;
-            }
-        } else {
-            const int dc_bias = intra ? (1 << (QUANT_SHIFT + 1)) / 3 : (1 << (QUANT_SHIFT + 1)) / 6;
-            const unsigned int dc_threshold1 = (1 << (QUANT_SHIFT + 1)) - dc_bias - 1;
-            const unsigned int dc_threshold2 = (dc_threshold1 << 1);
-
-            int level = block[0]*quant_table[0];
-            if (((unsigned)(level + dc_threshold1)) > dc_threshold2) {
-                if (level > 0) {
-                    level = (dc_bias + level) >> (QUANT_SHIFT + 1);
-                    block[0] = level;
-                } else {
-                    level = (dc_bias - level) >> (QUANT_SHIFT + 1);
-                    block[0] = -level;
-                }
-//                last_non_zero = i;
-            } else {
-                block[0] = 0;
-            }
-        }
-        last_non_zero = 0;
-        i = 1;
-    } else {
-        last_non_zero = -1;
-        i = 0;
-    }
-
-    for (; i < 16; i++) {
-        const int j = scantable[i];
-        int level = block[j]*quant_table[j];
-
-//        if (   bias+level >= (1 << (QMAT_SHIFT - 3))
-//            || bias-level >= (1 << (QMAT_SHIFT - 3))) {
-        if (((unsigned)(level + threshold1)) > threshold2) {
-            if (level > 0) {
-                level = (bias + level) >> QUANT_SHIFT;
-                block[j] = level;
-            } else {
-                level = (bias - level) >> QUANT_SHIFT;
-                block[j] = -level;
-            }
-            last_non_zero = i;
-        } else {
-            block[j] = 0;
-        }
-    }
-
-    return last_non_zero;
-}
diff --git a/libavcodec/h264idct.c b/libavcodec/h264idct.c
index 57d1b75..571e2e9 100644
--- a/libavcodec/h264idct.c
+++ b/libavcodec/h264idct.c
@@ -72,57 +72,58 @@ void ff_h264_lowres_idct_put_c(uint8_t *dst, int stride, DCTELEM *block){
 
 void ff_h264_idct8_add_c(uint8_t *dst, DCTELEM *block, int stride){
     int i;
+    DCTELEM (*src)[8] = (DCTELEM(*)[8])block;
     uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;
 
     block[0] += 32;
 
     for( i = 0; i < 8; i++ )
     {
-        const int a0 =  block[0+i*8] + block[4+i*8];
-        const int a2 =  block[0+i*8] - block[4+i*8];
-        const int a4 = (block[2+i*8]>>1) - block[6+i*8];
-        const int a6 = (block[6+i*8]>>1) + block[2+i*8];
+        const int a0 =  src[i][0] + src[i][4];
+        const int a2 =  src[i][0] - src[i][4];
+        const int a4 = (src[i][2]>>1) - src[i][6];
+        const int a6 = (src[i][6]>>1) + src[i][2];
 
         const int b0 = a0 + a6;
         const int b2 = a2 + a4;
         const int b4 = a2 - a4;
         const int b6 = a0 - a6;
 
-        const int a1 = -block[3+i*8] + block[5+i*8] - block[7+i*8] - (block[7+i*8]>>1);
-        const int a3 =  block[1+i*8] + block[7+i*8] - block[3+i*8] - (block[3+i*8]>>1);
-        const int a5 = -block[1+i*8] + block[7+i*8] + block[5+i*8] + (block[5+i*8]>>1);
-        const int a7 =  block[3+i*8] + block[5+i*8] + block[1+i*8] + (block[1+i*8]>>1);
+        const int a1 = -src[i][3] + src[i][5] - src[i][7] - (src[i][7]>>1);
+        const int a3 =  src[i][1] + src[i][7] - src[i][3] - (src[i][3]>>1);
+        const int a5 = -src[i][1] + src[i][7] + src[i][5] + (src[i][5]>>1);
+        const int a7 =  src[i][3] + src[i][5] + src[i][1] + (src[i][1]>>1);
 
         const int b1 = (a7>>2) + a1;
         const int b3 =  a3 + (a5>>2);
         const int b5 = (a3>>2) - a5;
         const int b7 =  a7 - (a1>>2);
 
-        block[0+i*8] = b0 + b7;
-        block[7+i*8] = b0 - b7;
-        block[1+i*8] = b2 + b5;
-        block[6+i*8] = b2 - b5;
-        block[2+i*8] = b4 + b3;
-        block[5+i*8] = b4 - b3;
-        block[3+i*8] = b6 + b1;
-        block[4+i*8] = b6 - b1;
+        src[i][0] = b0 + b7;
+        src[i][7] = b0 - b7;
+        src[i][1] = b2 + b5;
+        src[i][6] = b2 - b5;
+        src[i][2] = b4 + b3;
+        src[i][5] = b4 - b3;
+        src[i][3] = b6 + b1;
+        src[i][4] = b6 - b1;
     }
     for( i = 0; i < 8; i++ )
     {
-        const int a0 =  block[i+0*8] + block[i+4*8];
-        const int a2 =  block[i+0*8] - block[i+4*8];
-        const int a4 = (block[i+2*8]>>1) - block[i+6*8];
-        const int a6 = (block[i+6*8]>>1) + block[i+2*8];
+        const int a0 =  src[0][i] + src[4][i];
+        const int a2 =  src[0][i] - src[4][i];
+        const int a4 = (src[2][i]>>1) - src[6][i];
+        const int a6 = (src[6][i]>>1) + src[2][i];
 
         const int b0 = a0 + a6;
         const int b2 = a2 + a4;
         const int b4 = a2 - a4;
         const int b6 = a0 - a6;
 
-        const int a1 = -block[i+3*8] + block[i+5*8] - block[i+7*8] - (block[i+7*8]>>1);
-        const int a3 =  block[i+1*8] + block[i+7*8] - block[i+3*8] - (block[i+3*8]>>1);
-        const int a5 = -block[i+1*8] + block[i+7*8] + block[i+5*8] + (block[i+5*8]>>1);
-        const int a7 =  block[i+3*8] + block[i+5*8] + block[i+1*8] + (block[i+1*8]>>1);
+        const int a1 = -src[3][i] + src[5][i] - src[7][i] - (src[7][i]>>1);
+        const int a3 =  src[1][i] + src[7][i] - src[3][i] - (src[3][i]>>1);
+        const int a5 = -src[1][i] + src[7][i] + src[5][i] + (src[5][i]>>1);
+        const int a7 =  src[3][i] + src[5][i] + src[1][i] + (src[1][i]>>1);
 
         const int b1 = (a7>>2) + a1;
         const int b3 =  a3 + (a5>>2);
@@ -164,55 +165,3 @@ void ff_h264_idct8_dc_add_c(uint8_t *dst, DCTELEM *block, int stride){
         dst += stride;
     }
 }
-
-//FIXME this table is a duplicate from h264data.h, and will be removed once the tables from, h264 have been split
-static const uint8_t scan8[16 + 2*4]={
- 4+1*8, 5+1*8, 4+2*8, 5+2*8,
- 6+1*8, 7+1*8, 6+2*8, 7+2*8,
- 4+3*8, 5+3*8, 4+4*8, 5+4*8,
- 6+3*8, 7+3*8, 6+4*8, 7+4*8,
- 1+1*8, 2+1*8,
- 1+2*8, 2+2*8,
- 1+4*8, 2+4*8,
- 1+5*8, 2+5*8,
-};
-
-void ff_h264_idct_add16_c(uint8_t *dst, const int *block_offset, DCTELEM *block, int stride, const uint8_t nnzc[6*8]){
-    int i;
-    for(i=0; i<16; i++){
-        int nnz = nnzc[ scan8[i] ];
-        if(nnz){
-            if(nnz==1 && block[i*16]) ff_h264_idct_dc_add_c(dst + block_offset[i], block + i*16, stride);
-            else                      idct_internal        (dst + block_offset[i], block + i*16, stride, 4, 6, 1);
-        }
-    }
-}
-
-void ff_h264_idct_add16intra_c(uint8_t *dst, const int *block_offset, DCTELEM *block, int stride, const uint8_t nnzc[6*8]){
-    int i;
-    for(i=0; i<16; i++){
-        if(nnzc[ scan8[i] ]) idct_internal        (dst + block_offset[i], block + i*16, stride, 4, 6, 1);
-        else if(block[i*16]) ff_h264_idct_dc_add_c(dst + block_offset[i], block + i*16, stride);
-    }
-}
-
-void ff_h264_idct8_add4_c(uint8_t *dst, const int *block_offset, DCTELEM *block, int stride, const uint8_t nnzc[6*8]){
-    int i;
-    for(i=0; i<16; i+=4){
-        int nnz = nnzc[ scan8[i] ];
-        if(nnz){
-            if(nnz==1 && block[i*16]) ff_h264_idct8_dc_add_c(dst + block_offset[i], block + i*16, stride);
-            else                      ff_h264_idct8_add_c   (dst + block_offset[i], block + i*16, stride);
-        }
-    }
-}
-
-void ff_h264_idct_add8_c(uint8_t **dest, const int *block_offset, DCTELEM *block, int stride, const uint8_t nnzc[6*8]){
-    int i;
-    for(i=16; i<16+8; i++){
-        if(nnzc[ scan8[i] ])
-            ff_h264_idct_add_c   (dest[(i&4)>>2] + block_offset[i], block + i*16, stride);
-        else if(block[i*16])
-            ff_h264_idct_dc_add_c(dest[(i&4)>>2] + block_offset[i], block + i*16, stride);
-    }
-}
diff --git a/libavcodec/h264pred.c b/libavcodec/h264pred.c
index 3282ff4..0b7394a 100644
--- a/libavcodec/h264pred.c
+++ b/libavcodec/h264pred.c
@@ -198,6 +198,28 @@ static void pred4x4_down_left_rv40_c(uint8_t *src, uint8_t *topright, int stride
     src[3+3*stride]=(t6 + t7 + 1 + l6 + l7 + 1)>>2;
 }
 
+static void pred4x4_down_left_rv40_notop_c(uint8_t *src, uint8_t *topright, int stride){
+    LOAD_LEFT_EDGE
+    LOAD_DOWN_LEFT_EDGE
+
+    src[0+0*stride]=(l0 + l2 + 2*l1 + 2)>>2;
+    src[1+0*stride]=
+    src[0+1*stride]=(l1 + l3 + 2*l2 + 2)>>2;
+    src[2+0*stride]=
+    src[1+1*stride]=
+    src[0+2*stride]=(l2 + l4 + 2*l3 + 2)>>2;
+    src[3+0*stride]=
+    src[2+1*stride]=
+    src[1+2*stride]=
+    src[0+3*stride]=(l3 + l5 + 2*l4 + 2)>>2;
+    src[3+1*stride]=
+    src[2+2*stride]=
+    src[1+3*stride]=(l4 + l6 + 2*l5 + 2)>>2;
+    src[3+2*stride]=
+    src[2+3*stride]=(l5 + l7 + 2*l6 + 2)>>2;
+    src[3+3*stride]=(l6 + l7 + 1)>>1;
+}
+
 static void pred4x4_down_left_rv40_nodown_c(uint8_t *src, uint8_t *topright, int stride){
     LOAD_TOP_EDGE
     LOAD_TOP_RIGHT_EDGE
@@ -987,93 +1009,6 @@ static void pred8x8l_horizontal_up_c(uint8_t *src, int has_topleft, int has_topr
 #undef PL
 #undef SRC
 
-static void pred4x4_vertical_add_c(uint8_t *pix, const DCTELEM *block, int stride){
-    int i;
-    pix -= stride;
-    for(i=0; i<4; i++){
-        uint8_t v = pix[0];
-        pix[1*stride]= v += block[0];
-        pix[2*stride]= v += block[4];
-        pix[3*stride]= v += block[8];
-        pix[4*stride]= v += block[12];
-        pix++;
-        block++;
-    }
-}
-
-static void pred4x4_horizontal_add_c(uint8_t *pix, const DCTELEM *block, int stride){
-    int i;
-    for(i=0; i<4; i++){
-        uint8_t v = pix[-1];
-        pix[0]= v += block[0];
-        pix[1]= v += block[1];
-        pix[2]= v += block[2];
-        pix[3]= v += block[3];
-        pix+= stride;
-        block+= 4;
-    }
-}
-
-static void pred8x8l_vertical_add_c(uint8_t *pix, const DCTELEM *block, int stride){
-    int i;
-    pix -= stride;
-    for(i=0; i<8; i++){
-        uint8_t v = pix[0];
-        pix[1*stride]= v += block[0];
-        pix[2*stride]= v += block[8];
-        pix[3*stride]= v += block[16];
-        pix[4*stride]= v += block[24];
-        pix[5*stride]= v += block[32];
-        pix[6*stride]= v += block[40];
-        pix[7*stride]= v += block[48];
-        pix[8*stride]= v += block[56];
-        pix++;
-        block++;
-    }
-}
-
-static void pred8x8l_horizontal_add_c(uint8_t *pix, const DCTELEM *block, int stride){
-    int i;
-    for(i=0; i<8; i++){
-        uint8_t v = pix[-1];
-        pix[0]= v += block[0];
-        pix[1]= v += block[1];
-        pix[2]= v += block[2];
-        pix[3]= v += block[3];
-        pix[4]= v += block[4];
-        pix[5]= v += block[5];
-        pix[6]= v += block[6];
-        pix[7]= v += block[7];
-        pix+= stride;
-        block+= 8;
-    }
-}
-
-static void pred16x16_vertical_add_c(uint8_t *pix, const int *block_offset, const DCTELEM *block, int stride){
-    int i;
-    for(i=0; i<16; i++)
-        pred4x4_vertical_add_c(pix + block_offset[i], block + i*16, stride);
-}
-
-static void pred16x16_horizontal_add_c(uint8_t *pix, const int *block_offset, const DCTELEM *block, int stride){
-    int i;
-    for(i=0; i<16; i++)
-        pred4x4_horizontal_add_c(pix + block_offset[i], block + i*16, stride);
-}
-
-static void pred8x8_vertical_add_c(uint8_t *pix, const int *block_offset, const DCTELEM *block, int stride){
-    int i;
-    for(i=0; i<4; i++)
-        pred4x4_vertical_add_c(pix + block_offset[i], block + i*16, stride);
-}
-
-static void pred8x8_horizontal_add_c(uint8_t *pix, const int *block_offset, const DCTELEM *block, int stride){
-    int i;
-    for(i=0; i<4; i++)
-        pred4x4_horizontal_add_c(pix + block_offset[i], block + i*16, stride);
-}
-
-
 /**
  * Sets the intra prediction function pointers.
  */
@@ -1162,14 +1097,4 @@ void ff_h264_pred_init(H264PredContext *h, int codec_id){
     h->pred16x16[LEFT_DC_PRED8x8]= pred16x16_left_dc_c;
     h->pred16x16[TOP_DC_PRED8x8 ]= pred16x16_top_dc_c;
     h->pred16x16[DC_128_PRED8x8 ]= pred16x16_128_dc_c;
-
-    //special lossless h/v prediction for h264
-    h->pred4x4_add  [VERT_PRED   ]= pred4x4_vertical_add_c;
-    h->pred4x4_add  [ HOR_PRED   ]= pred4x4_horizontal_add_c;
-    h->pred8x8l_add [VERT_PRED   ]= pred8x8l_vertical_add_c;
-    h->pred8x8l_add [ HOR_PRED   ]= pred8x8l_horizontal_add_c;
-    h->pred8x8_add  [VERT_PRED8x8]= pred8x8_vertical_add_c;
-    h->pred8x8_add  [ HOR_PRED8x8]= pred8x8_horizontal_add_c;
-    h->pred16x16_add[VERT_PRED8x8]= pred16x16_vertical_add_c;
-    h->pred16x16_add[ HOR_PRED8x8]= pred16x16_horizontal_add_c;
 }
diff --git a/libavcodec/h264pred.h b/libavcodec/h264pred.h
index d87df2a..150567d 100644
--- a/libavcodec/h264pred.h
+++ b/libavcodec/h264pred.h
@@ -29,7 +29,6 @@
 #define AVCODEC_H264PRED_H
 
 #include "libavutil/common.h"
-#include "dsputil.h"
 
 /**
  * Prediction types
@@ -76,11 +75,6 @@ typedef struct H264PredContext{
     void (*pred8x8l [9+3])(uint8_t *src, int topleft, int topright, int stride);
     void (*pred8x8  [4+3+4])(uint8_t *src, int stride);
     void (*pred16x16[4+3])(uint8_t *src, int stride);
-
-    void (*pred4x4_add  [2])(uint8_t *pix/*align  4*/, const DCTELEM *block/*align 16*/, int stride);
-    void (*pred8x8l_add [2])(uint8_t *pix/*align  8*/, const DCTELEM *block/*align 16*/, int stride);
-    void (*pred8x8_add  [3])(uint8_t *pix/*align  8*/, const int *block_offset, const DCTELEM *block/*align 16*/, int stride);
-    void (*pred16x16_add[3])(uint8_t *pix/*align 16*/, const int *block_offset, const DCTELEM *block/*align 16*/, int stride);
 }H264PredContext;
 
 void ff_h264_pred_init(H264PredContext *h, int codec_id);
diff --git a/libavcodec/huffman.c b/libavcodec/huffman.c
index f21a4f8..d41dabb 100644
--- a/libavcodec/huffman.c
+++ b/libavcodec/huffman.c
@@ -67,7 +67,7 @@ static int build_huff_tree(VLC *vlc, Node *nodes, int head, int flags)
  * first nb_codes nodes.count must be set
  */
 int ff_huff_build_tree(AVCodecContext *avctx, VLC *vlc, int nb_codes,
-                       Node *nodes, HuffCmp cmp, int flags)
+                       Node *nodes, huff_cmp_t cmp, int flags)
 {
     int i, j;
     int cur_node;
diff --git a/libavcodec/huffman.h b/libavcodec/huffman.h
index bfb7723..0b11af8 100644
--- a/libavcodec/huffman.h
+++ b/libavcodec/huffman.h
@@ -35,8 +35,8 @@ typedef struct {
 #define FF_HUFFMAN_FLAG_HNODE_FIRST 0x01
 #define FF_HUFFMAN_FLAG_ZERO_COUNT  0x02
 
-typedef int (*HuffCmp)(const void *va, const void *vb);
+typedef int (*huff_cmp_t)(const void *va, const void *vb);
 int ff_huff_build_tree(AVCodecContext *avctx, VLC *vlc, int nb_codes,
-                       Node *nodes, HuffCmp cmp, int flags);
+                       Node *nodes, huff_cmp_t cmp, int flags);
 
 #endif /* AVCODEC_HUFFMAN_H */
diff --git a/libavcodec/huffyuv.c b/libavcodec/huffyuv.c
index bf13e44..cf90adc 100644
--- a/libavcodec/huffyuv.c
+++ b/libavcodec/huffyuv.c
@@ -265,16 +265,16 @@ static int generate_bits_table(uint32_t *dst, uint8_t *len_table){
 typedef struct {
     uint64_t val;
     int name;
-} HeapElem;
+} heap_elem_t;
 
-static void heap_sift(HeapElem *h, int root, int size)
+static void heap_sift(heap_elem_t *h, int root, int size)
 {
     while(root*2+1 < size) {
         int child = root*2+1;
         if(child < size-1 && h[child].val > h[child+1].val)
             child++;
         if(h[root].val > h[child].val) {
-            FFSWAP(HeapElem, h[root], h[child]);
+            FFSWAP(heap_elem_t, h[root], h[child]);
             root = child;
         } else
             break;
@@ -282,7 +282,7 @@ static void heap_sift(HeapElem *h, int root, int size)
 }
 
 static void generate_len_table(uint8_t *dst, uint64_t *stats, int size){
-    HeapElem h[size];
+    heap_elem_t h[size];
     int up[2*size];
     int len[2*size];
     int offset, i, next;
diff --git a/libavcodec/x86/cavsdsp_mmx.c b/libavcodec/i386/cavsdsp_mmx.c
similarity index 99%
rename from libavcodec/x86/cavsdsp_mmx.c
rename to libavcodec/i386/cavsdsp_mmx.c
index 2000ba5..15cafd6 100644
--- a/libavcodec/x86/cavsdsp_mmx.c
+++ b/libavcodec/i386/cavsdsp_mmx.c
@@ -302,7 +302,7 @@ static void cavs_idct8_add_mmx(uint8_t *dst, int16_t *block, int stride)
         VOP(%%mm1, %%mm2, %%mm3, %%mm4, %%mm5, %%mm0, OP)\
         \
         : "+a"(src), "+c"(dst)\
-        : "S"((x86_reg)srcStride), "r"((x86_reg)dstStride), "m"(ADD), "m"(MUL1), "m"(MUL2)\
+        : "S"((x86_reg)srcStride), "D"((x86_reg)dstStride), "m"(ADD), "m"(MUL1), "m"(MUL2)\
         : "memory"\
      );\
      if(h==16){\
@@ -317,7 +317,7 @@ static void cavs_idct8_add_mmx(uint8_t *dst, int16_t *block, int stride)
             VOP(%%mm3, %%mm4, %%mm5, %%mm0, %%mm1, %%mm2, OP)\
             \
            : "+a"(src), "+c"(dst)\
-           : "S"((x86_reg)srcStride), "r"((x86_reg)dstStride), "m"(ADD),  "m"(MUL1), "m"(MUL2)\
+           : "S"((x86_reg)srcStride), "D"((x86_reg)dstStride), "m"(ADD),  "m"(MUL1), "m"(MUL2)\
            : "memory"\
         );\
      }\
diff --git a/libavcodec/x86/cpuid.c b/libavcodec/i386/cpuid.c
similarity index 94%
rename from libavcodec/x86/cpuid.c
rename to libavcodec/i386/cpuid.c
index 664bac3..2f2a669 100644
--- a/libavcodec/x86/cpuid.c
+++ b/libavcodec/i386/cpuid.c
@@ -44,17 +44,10 @@ int mm_support(void)
     int max_std_level, max_ext_level, std_caps=0, ext_caps=0;
     x86_reg a, c;
 
-#ifdef ARCH_X86_64
-#define PUSHF "pushfq\n\t"
-#define POPF "popfq\n\t"
-#else
-#define PUSHF "pushfl\n\t"
-#define POPF "popfl\n\t"
-#endif
     __asm__ volatile (
         /* See if CPUID instruction is supported ... */
         /* ... Get copies of EFLAGS into eax and ecx */
-        PUSHF
+        "pushf\n\t"
         "pop %0\n\t"
         "mov %0, %1\n\t"
 
@@ -62,10 +55,10 @@ int mm_support(void)
         /*     to the EFLAGS reg */
         "xor $0x200000, %0\n\t"
         "push %0\n\t"
-        POPF
+        "popf\n\t"
 
         /* ... Get the (hopefully modified) EFLAGS */
-        PUSHF
+        "pushf\n\t"
         "pop %0\n\t"
         : "=a" (a), "=c" (c)
         :
@@ -83,7 +76,7 @@ int mm_support(void)
             rval |= FF_MM_MMX;
         if (std_caps & (1<<25))
             rval |= FF_MM_MMXEXT
-#ifdef HAVE_SSE
+#if !defined(__GNUC__) || __GNUC__ > 2
                   | FF_MM_SSE;
         if (std_caps & (1<<26))
             rval |= FF_MM_SSE2;
diff --git a/libavcodec/x86/dsputil_h264_template_mmx.c b/libavcodec/i386/dsputil_h264_template_mmx.c
similarity index 95%
rename from libavcodec/x86/dsputil_h264_template_mmx.c
rename to libavcodec/i386/dsputil_h264_template_mmx.c
index 43f4393..0bf8732 100644
--- a/libavcodec/x86/dsputil_h264_template_mmx.c
+++ b/libavcodec/i386/dsputil_h264_template_mmx.c
@@ -25,8 +25,9 @@
  * H264_CHROMA_OP must be defined to empty for put and pavgb/pavgusb for avg
  * H264_CHROMA_MC8_MV0 must be defined to a (put|avg)_pixels8 function
  */
-static void H264_CHROMA_MC8_TMPL(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y, const uint64_t *rnd_reg)
+static void H264_CHROMA_MC8_TMPL(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y, int rnd)
 {
+    const uint64_t *rnd_reg;
     DECLARE_ALIGNED_8(uint64_t, AA);
     DECLARE_ALIGNED_8(uint64_t, DD);
     int i;
@@ -44,15 +45,17 @@ static void H264_CHROMA_MC8_TMPL(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*
         /* 1 dimensional filter only */
         const int dxy = x ? 1 : stride;
 
+        rnd_reg = rnd ? &ff_pw_4 : &ff_pw_3;
+
         __asm__ volatile(
             "movd %0, %%mm5\n\t"
             "movq %1, %%mm4\n\t"
-            "movq %2, %%mm6\n\t"         /* mm6 = rnd >> 3 */
+            "movq %2, %%mm6\n\t"         /* mm6 = rnd */
             "punpcklwd %%mm5, %%mm5\n\t"
             "punpckldq %%mm5, %%mm5\n\t" /* mm5 = B = x */
             "pxor %%mm7, %%mm7\n\t"
             "psubw %%mm5, %%mm4\n\t"     /* mm4 = A = 8-x */
-            :: "rm"(x+y), "m"(ff_pw_8), "m"(*(rnd_reg+1)));
+            :: "rm"(x+y), "m"(ff_pw_8), "m"(*rnd_reg));
 
         for(i=0; i<h; i++) {
             __asm__ volatile(
@@ -75,7 +78,7 @@ static void H264_CHROMA_MC8_TMPL(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*
                 "pmullw %%mm5, %%mm2\n\t"
                 "pmullw %%mm5, %%mm3\n\t"
 
-                /* dst[0..7] = (A * src[0..7] + B * src[1..8] + (rnd >> 3)) >> 3 */
+                /* dst[0..7] = (A * src[0..7] + B * src[1..8] + 4) >> 3 */
                 "paddw %%mm6, %%mm0\n\t"
                 "paddw %%mm6, %%mm1\n\t"
                 "paddw %%mm2, %%mm0\n\t"
@@ -94,6 +97,7 @@ static void H264_CHROMA_MC8_TMPL(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*
     }
 
     /* general case, bilinear */
+    rnd_reg = rnd ? &ff_pw_32.a : &ff_pw_28.a;
     __asm__ volatile("movd %2, %%mm4\n\t"
                  "movd %3, %%mm6\n\t"
                  "punpcklwd %%mm4, %%mm4\n\t"
@@ -168,7 +172,7 @@ static void H264_CHROMA_MC8_TMPL(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*
             : : "m" (src[0]), "m" (src[1]), "m" (DD));
 
         __asm__ volatile(
-            /* dst[0..7] = ([mm2,mm3] + rnd) >> 6 */
+            /* dst[0..7] = ([mm2,mm3] + 32) >> 6 */
             "paddw %1, %%mm2\n\t"
             "paddw %1, %%mm3\n\t"
             "psrlw $6, %%mm2\n\t"
@@ -181,7 +185,7 @@ static void H264_CHROMA_MC8_TMPL(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*
     }
 }
 
-static void H264_CHROMA_MC4_TMPL(uint8_t *dst/*align 4*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y, const uint64_t *rnd_reg)
+static void H264_CHROMA_MC4_TMPL(uint8_t *dst/*align 4*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y)
 {
     __asm__ volatile(
         "pxor   %%mm7, %%mm7        \n\t"
@@ -245,7 +249,7 @@ static void H264_CHROMA_MC4_TMPL(uint8_t *dst/*align 4*/, uint8_t *src/*align 1*
         "sub $2, %2                 \n\t"
         "jnz 1b                     \n\t"
         : "+r"(dst), "+r"(src), "+r"(h)
-        : "r"((x86_reg)stride), "m"(*rnd_reg), "m"(x), "m"(y)
+        : "r"((x86_reg)stride), "m"(ff_pw_32), "m"(x), "m"(y)
     );
 }
 
diff --git a/libavcodec/x86/dsputil_h264_template_ssse3.c b/libavcodec/i386/dsputil_h264_template_ssse3.c
similarity index 100%
rename from libavcodec/x86/dsputil_h264_template_ssse3.c
rename to libavcodec/i386/dsputil_h264_template_ssse3.c
diff --git a/libavcodec/x86/dsputil_mmx.c b/libavcodec/i386/dsputil_mmx.c
similarity index 95%
rename from libavcodec/x86/dsputil_mmx.c
rename to libavcodec/i386/dsputil_mmx.c
index 1d93351..161afab 100644
--- a/libavcodec/x86/dsputil_mmx.c
+++ b/libavcodec/i386/dsputil_mmx.c
@@ -47,13 +47,13 @@ DECLARE_ALIGNED_16(const uint64_t, ff_pdw_80000000[2]) =
 
 DECLARE_ALIGNED_8 (const uint64_t, ff_pw_3  ) = 0x0003000300030003ULL;
 DECLARE_ALIGNED_8 (const uint64_t, ff_pw_4  ) = 0x0004000400040004ULL;
-DECLARE_ALIGNED_16(const xmm_reg,  ff_pw_5  ) = {0x0005000500050005ULL, 0x0005000500050005ULL};
-DECLARE_ALIGNED_16(const xmm_reg,  ff_pw_8  ) = {0x0008000800080008ULL, 0x0008000800080008ULL};
+DECLARE_ALIGNED_16(const xmm_t,    ff_pw_5  ) = {0x0005000500050005ULL, 0x0005000500050005ULL};
+DECLARE_ALIGNED_16(const xmm_t,    ff_pw_8  ) = {0x0008000800080008ULL, 0x0008000800080008ULL};
 DECLARE_ALIGNED_8 (const uint64_t, ff_pw_15 ) = 0x000F000F000F000FULL;
-DECLARE_ALIGNED_16(const xmm_reg,  ff_pw_16 ) = {0x0010001000100010ULL, 0x0010001000100010ULL};
+DECLARE_ALIGNED_16(const xmm_t,    ff_pw_16 ) = {0x0010001000100010ULL, 0x0010001000100010ULL};
 DECLARE_ALIGNED_8 (const uint64_t, ff_pw_20 ) = 0x0014001400140014ULL;
-DECLARE_ALIGNED_16(const xmm_reg,  ff_pw_28 ) = {0x001C001C001C001CULL, 0x001C001C001C001CULL};
-DECLARE_ALIGNED_16(const xmm_reg,  ff_pw_32 ) = {0x0020002000200020ULL, 0x0020002000200020ULL};
+DECLARE_ALIGNED_16(const xmm_t,    ff_pw_28 ) = {0x001C001C001C001CULL, 0x001C001C001C001CULL};
+DECLARE_ALIGNED_16(const xmm_t,    ff_pw_32 ) = {0x0020002000200020ULL, 0x0020002000200020ULL};
 DECLARE_ALIGNED_8 (const uint64_t, ff_pw_42 ) = 0x002A002A002A002AULL;
 DECLARE_ALIGNED_8 (const uint64_t, ff_pw_64 ) = 0x0040004000400040ULL;
 DECLARE_ALIGNED_8 (const uint64_t, ff_pw_96 ) = 0x0060006000600060ULL;
@@ -464,42 +464,21 @@ static void avg_pixels16_sse2(uint8_t *block, const uint8_t *pixels, int line_si
         );
 }
 
-#define CLEAR_BLOCKS(name,n) \
-static void name(DCTELEM *blocks)\
-{\
-    __asm__ volatile(\
-                "pxor %%mm7, %%mm7              \n\t"\
-                "mov     %1, %%"REG_a"          \n\t"\
-                "1:                             \n\t"\
-                "movq %%mm7, (%0, %%"REG_a")    \n\t"\
-                "movq %%mm7, 8(%0, %%"REG_a")   \n\t"\
-                "movq %%mm7, 16(%0, %%"REG_a")  \n\t"\
-                "movq %%mm7, 24(%0, %%"REG_a")  \n\t"\
-                "add $32, %%"REG_a"             \n\t"\
-                " js 1b                         \n\t"\
-                : : "r" (((uint8_t *)blocks)+128*n),\
-                    "i" (-128*n)\
-                : "%"REG_a\
-        );\
-}
-CLEAR_BLOCKS(clear_blocks_mmx, 6)
-CLEAR_BLOCKS(clear_block_mmx, 1)
-
-static void clear_block_sse(DCTELEM *block)
+static void clear_blocks_mmx(DCTELEM *blocks)
 {
     __asm__ volatile(
-        "xorps  %%xmm0, %%xmm0  \n"
-        "movaps %%xmm0,    (%0) \n"
-        "movaps %%xmm0,  16(%0) \n"
-        "movaps %%xmm0,  32(%0) \n"
-        "movaps %%xmm0,  48(%0) \n"
-        "movaps %%xmm0,  64(%0) \n"
-        "movaps %%xmm0,  80(%0) \n"
-        "movaps %%xmm0,  96(%0) \n"
-        "movaps %%xmm0, 112(%0) \n"
-        :: "r"(block)
-        : "memory"
-    );
+                "pxor %%mm7, %%mm7              \n\t"
+                "mov $-128*6, %%"REG_a"         \n\t"
+                "1:                             \n\t"
+                "movq %%mm7, (%0, %%"REG_a")    \n\t"
+                "movq %%mm7, 8(%0, %%"REG_a")   \n\t"
+                "movq %%mm7, 16(%0, %%"REG_a")  \n\t"
+                "movq %%mm7, 24(%0, %%"REG_a")  \n\t"
+                "add $32, %%"REG_a"             \n\t"
+                " js 1b                         \n\t"
+                : : "r" (((uint8_t *)blocks)+128*6)
+                : "%"REG_a
+        );
 }
 
 static void add_bytes_mmx(uint8_t *dst, uint8_t *src, int w){
@@ -1599,7 +1578,7 @@ QPEL_2TAP(avg_,  8, 3dnow)
 
 
 #if 0
-static void just_return(void) { return; }
+static void just_return() { return; }
 #endif
 
 static void gmc_mmx(uint8_t *dst, uint8_t *src, int stride, int h, int ox, int oy,
@@ -1733,7 +1712,6 @@ PREFETCH(prefetch_3dnow, prefetch)
 #undef PREFETCH
 
 #include "h264dsp_mmx.c"
-#include "rv40dsp_mmx.c"
 
 /* CAVS specific */
 void ff_cavsdsp_init_mmx2(DSPContext* c, AVCodecContext *avctx);
@@ -2328,19 +2306,6 @@ static void float_to_int16_sse2(int16_t *dst, const float *src, long len){
 void ff_float_to_int16_interleave6_sse(int16_t *dst, const float **src, int len);
 void ff_float_to_int16_interleave6_3dnow(int16_t *dst, const float **src, int len);
 void ff_float_to_int16_interleave6_3dn2(int16_t *dst, const float **src, int len);
-void ff_x264_deblock_v_luma_sse2(uint8_t *pix, int stride, int alpha, int beta, int8_t *tc0);
-void ff_x264_deblock_h_luma_sse2(uint8_t *pix, int stride, int alpha, int beta, int8_t *tc0);
-void ff_x264_deblock_v8_luma_intra_mmxext(uint8_t *pix, int stride, int alpha, int beta);
-void ff_x264_deblock_h_luma_intra_mmxext(uint8_t *pix, int stride, int alpha, int beta);
-#ifdef ARCH_X86_32
-static void ff_x264_deblock_v_luma_intra_mmxext(uint8_t *pix, int stride, int alpha, int beta)
-{
-    ff_x264_deblock_v8_luma_intra_mmxext(pix+0, stride, alpha, beta);
-    ff_x264_deblock_v8_luma_intra_mmxext(pix+8, stride, alpha, beta);
-}
-#endif
-void ff_x264_deblock_v_luma_intra_sse2(uint8_t *pix, int stride, int alpha, int beta);
-void ff_x264_deblock_h_luma_intra_sse2(uint8_t *pix, int stride, int alpha, int beta);
 #else
 #define ff_float_to_int16_interleave6_sse(a,b,c)   float_to_int16_interleave_misc_sse(a,b,c,6)
 #define ff_float_to_int16_interleave6_3dnow(a,b,c) float_to_int16_interleave_misc_3dnow(a,b,c,6)
@@ -2438,14 +2403,14 @@ static void float_to_int16_interleave_3dn2(int16_t *dst, const float **src, long
 }
 
 
-void ff_snow_horizontal_compose97i_sse2(IDWTELEM *b, int width);
-void ff_snow_horizontal_compose97i_mmx(IDWTELEM *b, int width);
-void ff_snow_vertical_compose97i_sse2(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2, IDWTELEM *b3, IDWTELEM *b4, IDWTELEM *b5, int width);
-void ff_snow_vertical_compose97i_mmx(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2, IDWTELEM *b3, IDWTELEM *b4, IDWTELEM *b5, int width);
-void ff_snow_inner_add_yblock_sse2(const uint8_t *obmc, const int obmc_stride, uint8_t * * block, int b_w, int b_h,
-                                   int src_x, int src_y, int src_stride, slice_buffer * sb, int add, uint8_t * dst8);
-void ff_snow_inner_add_yblock_mmx(const uint8_t *obmc, const int obmc_stride, uint8_t * * block, int b_w, int b_h,
-                                  int src_x, int src_y, int src_stride, slice_buffer * sb, int add, uint8_t * dst8);
+extern void ff_snow_horizontal_compose97i_sse2(IDWTELEM *b, int width);
+extern void ff_snow_horizontal_compose97i_mmx(IDWTELEM *b, int width);
+extern void ff_snow_vertical_compose97i_sse2(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2, IDWTELEM *b3, IDWTELEM *b4, IDWTELEM *b5, int width);
+extern void ff_snow_vertical_compose97i_mmx(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2, IDWTELEM *b3, IDWTELEM *b4, IDWTELEM *b5, int width);
+extern void ff_snow_inner_add_yblock_sse2(const uint8_t *obmc, const int obmc_stride, uint8_t * * block, int b_w, int b_h,
+                           int src_x, int src_y, int src_stride, slice_buffer * sb, int add, uint8_t * dst8);
+extern void ff_snow_inner_add_yblock_mmx(const uint8_t *obmc, const int obmc_stride, uint8_t * * block, int b_w, int b_h,
+                          int src_x, int src_y, int src_stride, slice_buffer * sb, int add, uint8_t * dst8);
 
 
 static void add_int16_sse2(int16_t * v1, int16_t * v2, int order)
@@ -2604,10 +2569,7 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx)
         c->put_pixels_clamped = put_pixels_clamped_mmx;
         c->put_signed_pixels_clamped = put_signed_pixels_clamped_mmx;
         c->add_pixels_clamped = add_pixels_clamped_mmx;
-        c->clear_block  = clear_block_mmx;
         c->clear_blocks = clear_blocks_mmx;
-        if (mm_flags & FF_MM_SSE)
-            c->clear_block = clear_block_sse;
 
 #define SET_HPEL_FUNCS(PFX, IDX, SIZE, CPU) \
         c->PFX ## _pixels_tab[IDX][0] = PFX ## _pixels ## SIZE ## _ ## CPU; \
@@ -2639,18 +2601,12 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx)
         c->put_h264_chroma_pixels_tab[1]= put_h264_chroma_mc4_mmx;
         c->put_no_rnd_h264_chroma_pixels_tab[0]= put_h264_chroma_mc8_mmx_nornd;
 
-        c->put_rv40_chroma_pixels_tab[0]= put_rv40_chroma_mc8_mmx;
-        c->put_rv40_chroma_pixels_tab[1]= put_rv40_chroma_mc4_mmx;
-
         c->h264_idct_dc_add=
         c->h264_idct_add= ff_h264_idct_add_mmx;
         c->h264_idct8_dc_add=
         c->h264_idct8_add= ff_h264_idct8_add_mmx;
-
-        c->h264_idct_add16     = ff_h264_idct_add16_mmx;
-        c->h264_idct8_add4     = ff_h264_idct8_add4_mmx;
-        c->h264_idct_add8      = ff_h264_idct_add8_mmx;
-        c->h264_idct_add16intra= ff_h264_idct_add16intra_mmx;
+        if (mm_flags & FF_MM_SSE2)
+            c->h264_idct8_add= ff_h264_idct8_add_sse2;
 
         if (mm_flags & FF_MM_MMXEXT) {
             c->prefetch = prefetch_mmx2;
@@ -2671,10 +2627,6 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx)
 
             c->h264_idct_dc_add= ff_h264_idct_dc_add_mmx2;
             c->h264_idct8_dc_add= ff_h264_idct8_dc_add_mmx2;
-            c->h264_idct_add16     = ff_h264_idct_add16_mmx2;
-            c->h264_idct8_add4     = ff_h264_idct8_add4_mmx2;
-            c->h264_idct_add8      = ff_h264_idct_add8_mmx2;
-            c->h264_idct_add16intra= ff_h264_idct_add16intra_mmx2;
 
             if(!(avctx->flags & CODEC_FLAG_BITEXACT)){
                 c->put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x2_mmx2;
@@ -2727,9 +2679,6 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx)
             SET_QPEL_FUNCS(avg_2tap_qpel, 0, 16, mmx2);
             SET_QPEL_FUNCS(avg_2tap_qpel, 1, 8, mmx2);
 
-            c->avg_rv40_chroma_pixels_tab[0]= avg_rv40_chroma_mc8_mmx2;
-            c->avg_rv40_chroma_pixels_tab[1]= avg_rv40_chroma_mc4_mmx2;
-
             c->avg_h264_chroma_pixels_tab[0]= avg_h264_chroma_mc8_mmx2_rnd;
             c->avg_h264_chroma_pixels_tab[1]= avg_h264_chroma_mc4_mmx2;
             c->avg_h264_chroma_pixels_tab[2]= avg_h264_chroma_mc2_mmx2;
@@ -2815,9 +2764,6 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx)
             c->avg_h264_chroma_pixels_tab[0]= avg_h264_chroma_mc8_3dnow_rnd;
             c->avg_h264_chroma_pixels_tab[1]= avg_h264_chroma_mc4_3dnow;
 
-            c->avg_rv40_chroma_pixels_tab[0]= avg_rv40_chroma_mc8_3dnow;
-            c->avg_rv40_chroma_pixels_tab[1]= avg_rv40_chroma_mc4_3dnow;
-
             if (ENABLE_CAVS_DECODER)
                 ff_cavsdsp_init_3dnow(c, avctx);
         }
@@ -2837,9 +2783,6 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx)
             H264_QPEL_FUNCS(0, 0, sse2);
         }
         if(mm_flags & FF_MM_SSE2){
-            c->h264_idct8_add = ff_h264_idct8_add_sse2;
-            c->h264_idct8_add4= ff_h264_idct8_add4_sse2;
-
             H264_QPEL_FUNCS(0, 1, sse2);
             H264_QPEL_FUNCS(0, 2, sse2);
             H264_QPEL_FUNCS(0, 3, sse2);
@@ -2876,26 +2819,6 @@ void dsputil_init_mmx(DSPContext* c, AVCodecContext *avctx)
         }
 #endif
 
-#if defined(CONFIG_GPL) && defined(HAVE_YASM)
-        if( mm_flags&FF_MM_MMXEXT ){
-#ifdef ARCH_X86_32
-            c->h264_v_loop_filter_luma_intra = ff_x264_deblock_v_luma_intra_mmxext;
-            c->h264_h_loop_filter_luma_intra = ff_x264_deblock_h_luma_intra_mmxext;
-#endif
-            if( mm_flags&FF_MM_SSE2 ){
-#if defined(ARCH_X86_64) || !defined(__ICC) || __ICC > 1100
-                c->h264_v_loop_filter_luma = ff_x264_deblock_v_luma_sse2;
-                c->h264_h_loop_filter_luma = ff_x264_deblock_h_luma_sse2;
-                c->h264_v_loop_filter_luma_intra = ff_x264_deblock_v_luma_intra_sse2;
-                c->h264_h_loop_filter_luma_intra = ff_x264_deblock_h_luma_intra_sse2;
-#endif
-                c->h264_idct_add16 = ff_h264_idct_add16_sse2;
-                c->h264_idct_add8  = ff_h264_idct_add8_sse2;
-                c->h264_idct_add16intra = ff_h264_idct_add16intra_sse2;
-            }
-        }
-#endif
-
 #ifdef CONFIG_SNOW_DECODER
         if(mm_flags & FF_MM_SSE2 & 0){
             c->horizontal_compose97i = ff_snow_horizontal_compose97i_sse2;
diff --git a/libavcodec/x86/dsputil_mmx.h b/libavcodec/i386/dsputil_mmx.h
similarity index 94%
rename from libavcodec/x86/dsputil_mmx.h
rename to libavcodec/i386/dsputil_mmx.h
index 87617e3..6c056f7 100644
--- a/libavcodec/x86/dsputil_mmx.h
+++ b/libavcodec/i386/dsputil_mmx.h
@@ -19,13 +19,13 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#ifndef AVCODEC_X86_DSPUTIL_MMX_H
-#define AVCODEC_X86_DSPUTIL_MMX_H
+#ifndef AVCODEC_I386_DSPUTIL_MMX_H
+#define AVCODEC_I386_DSPUTIL_MMX_H
 
 #include <stdint.h>
 #include "libavcodec/dsputil.h"
 
-typedef struct { uint64_t a, b; } xmm_reg;
+typedef struct { uint64_t a, b; } xmm_t;
 
 extern const uint64_t ff_bone;
 extern const uint64_t ff_wtwo;
@@ -34,13 +34,13 @@ extern const uint64_t ff_pdw_80000000[2];
 
 extern const uint64_t ff_pw_3;
 extern const uint64_t ff_pw_4;
-extern const xmm_reg  ff_pw_5;
-extern const xmm_reg  ff_pw_8;
+extern const xmm_t    ff_pw_5;
+extern const xmm_t    ff_pw_8;
 extern const uint64_t ff_pw_15;
-extern const xmm_reg  ff_pw_16;
+extern const xmm_t    ff_pw_16;
 extern const uint64_t ff_pw_20;
-extern const xmm_reg  ff_pw_28;
-extern const xmm_reg  ff_pw_32;
+extern const xmm_t    ff_pw_28;
+extern const xmm_t    ff_pw_32;
 extern const uint64_t ff_pw_42;
 extern const uint64_t ff_pw_64;
 extern const uint64_t ff_pw_96;
@@ -151,4 +151,4 @@ extern const double ff_pd_2[2];
 
 void dsputilenc_init_mmx(DSPContext* c, AVCodecContext *avctx);
 
-#endif /* AVCODEC_X86_DSPUTIL_MMX_H */
+#endif /* AVCODEC_I386_DSPUTIL_MMX_H */
diff --git a/libavcodec/x86/dsputil_mmx_avg_template.c b/libavcodec/i386/dsputil_mmx_avg_template.c
similarity index 99%
rename from libavcodec/x86/dsputil_mmx_avg_template.c
rename to libavcodec/i386/dsputil_mmx_avg_template.c
index 616a12b..a3f2068 100644
--- a/libavcodec/x86/dsputil_mmx_avg_template.c
+++ b/libavcodec/i386/dsputil_mmx_avg_template.c
@@ -24,6 +24,10 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+/* This header intentionally has no multiple inclusion guards. It is meant to
+ * be included multiple times and generates different code depending on the
+ * value of certain #defines. */
+
 /* XXX: we use explicit registers to avoid a gcc 2.95.2 register asm
    clobber bug - now it will work with 2.95.2 and also with -fPIC
  */
diff --git a/libavcodec/x86/dsputil_mmx_qns_template.c b/libavcodec/i386/dsputil_mmx_qns_template.c
similarity index 95%
rename from libavcodec/x86/dsputil_mmx_qns_template.c
rename to libavcodec/i386/dsputil_mmx_qns_template.c
index d2dbfc5..1f484e7 100644
--- a/libavcodec/x86/dsputil_mmx_qns_template.c
+++ b/libavcodec/i386/dsputil_mmx_qns_template.c
@@ -22,6 +22,10 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+/* This header intentionally has no multiple inclusion guards. It is meant to
+ * be included multiple times and generates different code depending on the
+ * value of certain #defines. */
+
 #define MAX_ABS (512 >> (SCALE_OFFSET>0 ? SCALE_OFFSET : 0))
 
 static int DEF(try_8x8basis)(int16_t rem[64], int16_t weight[64], int16_t basis[64], int scale)
diff --git a/libavcodec/x86/dsputil_mmx_rnd_template.c b/libavcodec/i386/dsputil_mmx_rnd_template.c
similarity index 99%
rename from libavcodec/x86/dsputil_mmx_rnd_template.c
rename to libavcodec/i386/dsputil_mmx_rnd_template.c
index 45ed590..5ef06da 100644
--- a/libavcodec/x86/dsputil_mmx_rnd_template.c
+++ b/libavcodec/i386/dsputil_mmx_rnd_template.c
@@ -24,6 +24,10 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+/* This header intentionally has no multiple inclusion guards. It is meant to
+ * be included multiple times and generates different code depending on the
+ * value of certain #defines. */
+
 // put_pixels
 static void DEF(put, pixels8_x2)(uint8_t *block, const uint8_t *pixels, int line_size, int h)
 {
diff --git a/libavcodec/x86/dsputil_yasm.asm b/libavcodec/i386/dsputil_yasm.asm
similarity index 96%
rename from libavcodec/x86/dsputil_yasm.asm
rename to libavcodec/i386/dsputil_yasm.asm
index 91165f2..09beb5c 100644
--- a/libavcodec/x86/dsputil_yasm.asm
+++ b/libavcodec/i386/dsputil_yasm.asm
@@ -34,7 +34,7 @@ section .text align=16
 
 %macro FLOAT_TO_INT16_INTERLEAVE6 1
 ; void ff_float_to_int16_interleave6_sse(int16_t *dst, const float **src, int len)
-cglobal float_to_int16_interleave6_%1, 2,7,0, dst, src, src1, src2, src3, src4, src5
+cglobal ff_float_to_int16_interleave6_%1, 2,7,0, dst, src, src1, src2, src3, src4, src5
 %ifdef ARCH_X86_64
     %define lend r10d
     mov     lend, r2d
diff --git a/libavcodec/x86/dsputilenc_mmx.c b/libavcodec/i386/dsputilenc_mmx.c
similarity index 100%
rename from libavcodec/x86/dsputilenc_mmx.c
rename to libavcodec/i386/dsputilenc_mmx.c
diff --git a/libavcodec/x86/fdct_mmx.c b/libavcodec/i386/fdct_mmx.c
similarity index 60%
rename from libavcodec/x86/fdct_mmx.c
rename to libavcodec/i386/fdct_mmx.c
index c87c1a7..eb79ee7 100644
--- a/libavcodec/x86/fdct_mmx.c
+++ b/libavcodec/i386/fdct_mmx.c
@@ -32,6 +32,7 @@
 
 #include "libavutil/common.h"
 #include "libavcodec/dsputil.h"
+#include "mmx.h"
 
 #define ATTR_ALIGN(align) __attribute__ ((__aligned__ (align)))
 
@@ -285,90 +286,84 @@ TABLE_SSE2
 TABLE_SSE2
 }};
 
-#define S(s) AV_TOSTRING(s) //AV_STRINGIFY is too long
-
 #define FDCT_COL(cpu, mm, mov)\
 static av_always_inline void fdct_col_##cpu(const int16_t *in, int16_t *out, int offset)\
 {\
-    __asm__ volatile (\
-        #mov"      16(%0),  %%"#mm"0 \n\t" \
-        #mov"      96(%0),  %%"#mm"1 \n\t" \
-        #mov"    %%"#mm"0,  %%"#mm"2 \n\t" \
-        #mov"      32(%0),  %%"#mm"3 \n\t" \
-        "paddsw  %%"#mm"1,  %%"#mm"0 \n\t" \
-        #mov"      80(%0),  %%"#mm"4 \n\t" \
-        "psllw  $"S(SHIFT_FRW_COL)", %%"#mm"0 \n\t" \
-        #mov"        (%0),  %%"#mm"5 \n\t" \
-        "paddsw  %%"#mm"3,  %%"#mm"4 \n\t" \
-        "paddsw   112(%0),  %%"#mm"5 \n\t" \
-        "psllw  $"S(SHIFT_FRW_COL)", %%"#mm"4 \n\t" \
-        #mov"    %%"#mm"0,  %%"#mm"6 \n\t" \
-        "psubsw  %%"#mm"1,  %%"#mm"2 \n\t" \
-        #mov"      16(%1),  %%"#mm"1 \n\t" \
-        "psubsw  %%"#mm"4,  %%"#mm"0 \n\t" \
-        #mov"      48(%0),  %%"#mm"7 \n\t" \
-        "pmulhw  %%"#mm"0,  %%"#mm"1 \n\t" \
-        "paddsw    64(%0),  %%"#mm"7 \n\t" \
-        "psllw  $"S(SHIFT_FRW_COL)", %%"#mm"5 \n\t" \
-        "paddsw  %%"#mm"4,  %%"#mm"6 \n\t" \
-        "psllw  $"S(SHIFT_FRW_COL)", %%"#mm"7 \n\t" \
-        #mov"    %%"#mm"5,  %%"#mm"4 \n\t" \
-        "psubsw  %%"#mm"7,  %%"#mm"5 \n\t" \
-        "paddsw  %%"#mm"5,  %%"#mm"1 \n\t" \
-        "paddsw  %%"#mm"7,  %%"#mm"4 \n\t" \
-        "por         (%2),  %%"#mm"1 \n\t" \
-        "psllw  $"S(SHIFT_FRW_COL)"+1, %%"#mm"2 \n\t" \
-        "pmulhw    16(%1),  %%"#mm"5 \n\t" \
-        #mov"    %%"#mm"4,  %%"#mm"7 \n\t" \
-        "psubsw    80(%0),  %%"#mm"3 \n\t" \
-        "psubsw  %%"#mm"6,  %%"#mm"4 \n\t" \
-        #mov"    %%"#mm"1,    32(%3) \n\t" \
-        "paddsw  %%"#mm"6,  %%"#mm"7 \n\t" \
-        #mov"      48(%0),  %%"#mm"1 \n\t" \
-        "psllw  $"S(SHIFT_FRW_COL)"+1, %%"#mm"3 \n\t" \
-        "psubsw    64(%0),  %%"#mm"1 \n\t" \
-        #mov"    %%"#mm"2,  %%"#mm"6 \n\t" \
-        #mov"    %%"#mm"4,    64(%3) \n\t" \
-        "paddsw  %%"#mm"3,  %%"#mm"2 \n\t" \
-        "pmulhw      (%4),  %%"#mm"2 \n\t" \
-        "psubsw  %%"#mm"3,  %%"#mm"6 \n\t" \
-        "pmulhw      (%4),  %%"#mm"6 \n\t" \
-        "psubsw  %%"#mm"0,  %%"#mm"5 \n\t" \
-        "por         (%2),  %%"#mm"5 \n\t" \
-        "psllw  $"S(SHIFT_FRW_COL)", %%"#mm"1 \n\t" \
-        "por         (%2),  %%"#mm"2 \n\t" \
-        #mov"    %%"#mm"1,  %%"#mm"4 \n\t" \
-        #mov"        (%0),  %%"#mm"3 \n\t" \
-        "paddsw  %%"#mm"6,  %%"#mm"1 \n\t" \
-        "psubsw   112(%0),  %%"#mm"3 \n\t" \
-        "psubsw  %%"#mm"6,  %%"#mm"4 \n\t" \
-        #mov"        (%1),  %%"#mm"0 \n\t" \
-        "psllw  $"S(SHIFT_FRW_COL)", %%"#mm"3 \n\t" \
-        #mov"      32(%1),  %%"#mm"6 \n\t" \
-        "pmulhw  %%"#mm"1,  %%"#mm"0 \n\t" \
-        #mov"    %%"#mm"7,      (%3) \n\t" \
-        "pmulhw  %%"#mm"4,  %%"#mm"6 \n\t" \
-        #mov"    %%"#mm"5,    96(%3) \n\t" \
-        #mov"    %%"#mm"3,  %%"#mm"7 \n\t" \
-        #mov"      32(%1),  %%"#mm"5 \n\t" \
-        "psubsw  %%"#mm"2,  %%"#mm"7 \n\t" \
-        "paddsw  %%"#mm"2,  %%"#mm"3 \n\t" \
-        "pmulhw  %%"#mm"7,  %%"#mm"5 \n\t" \
-        "paddsw  %%"#mm"3,  %%"#mm"0 \n\t" \
-        "paddsw  %%"#mm"4,  %%"#mm"6 \n\t" \
-        "pmulhw      (%1),  %%"#mm"3 \n\t" \
-        "por         (%2),  %%"#mm"0 \n\t" \
-        "paddsw  %%"#mm"7,  %%"#mm"5 \n\t" \
-        "psubsw  %%"#mm"6,  %%"#mm"7 \n\t" \
-        #mov"    %%"#mm"0,    16(%3) \n\t" \
-        "paddsw  %%"#mm"4,  %%"#mm"5 \n\t" \
-        #mov"    %%"#mm"7,    48(%3) \n\t" \
-        "psubsw  %%"#mm"1,  %%"#mm"3 \n\t" \
-        #mov"    %%"#mm"5,    80(%3) \n\t" \
-        #mov"    %%"#mm"3,   112(%3) \n\t" \
-        : \
-        : "r" (in  + offset), "r" (fdct_tg_all_16), "r" (fdct_one_corr), \
-          "r" (out + offset), "r" (ocos_4_16)); \
+    mov##_m2r(*(in + offset + 1 * 8), mm##0);\
+    mov##_m2r(*(in + offset + 6 * 8), mm##1);\
+    mov##_r2r(mm##0, mm##2);\
+    mov##_m2r(*(in + offset + 2 * 8), mm##3);\
+    paddsw_r2r(mm##1, mm##0);\
+    mov##_m2r(*(in + offset + 5 * 8), mm##4);\
+    psllw_i2r(SHIFT_FRW_COL, mm##0);\
+    mov##_m2r(*(in + offset + 0 * 8), mm##5);\
+    paddsw_r2r(mm##3, mm##4);\
+    paddsw_m2r(*(in + offset + 7 * 8), mm##5);\
+    psllw_i2r(SHIFT_FRW_COL, mm##4);\
+    mov##_r2r(mm##0, mm##6);\
+    psubsw_r2r(mm##1, mm##2);\
+    mov##_m2r(*(fdct_tg_all_16 + 8), mm##1);\
+    psubsw_r2r(mm##4, mm##0);\
+    mov##_m2r(*(in + offset + 3 * 8), mm##7);\
+    pmulhw_r2r(mm##0, mm##1);\
+    paddsw_m2r(*(in + offset + 4 * 8), mm##7);\
+    psllw_i2r(SHIFT_FRW_COL, mm##5);\
+    paddsw_r2r(mm##4, mm##6);\
+    psllw_i2r(SHIFT_FRW_COL, mm##7);\
+    mov##_r2r(mm##5, mm##4);\
+    psubsw_r2r(mm##7, mm##5);\
+    paddsw_r2r(mm##5, mm##1);\
+    paddsw_r2r(mm##7, mm##4);\
+    por_m2r(*fdct_one_corr, mm##1);\
+    psllw_i2r(SHIFT_FRW_COL + 1, mm##2);\
+    pmulhw_m2r(*(fdct_tg_all_16 + 8), mm##5);\
+    mov##_r2r(mm##4, mm##7);\
+    psubsw_m2r(*(in + offset + 5 * 8), mm##3);\
+    psubsw_r2r(mm##6, mm##4);\
+    mov##_r2m(mm##1, *(out + offset + 2 * 8));\
+    paddsw_r2r(mm##6, mm##7);\
+    mov##_m2r(*(in + offset + 3 * 8), mm##1);\
+    psllw_i2r(SHIFT_FRW_COL + 1, mm##3);\
+    psubsw_m2r(*(in + offset + 4 * 8), mm##1);\
+    mov##_r2r(mm##2, mm##6);\
+    mov##_r2m(mm##4, *(out + offset + 4 * 8));\
+    paddsw_r2r(mm##3, mm##2);\
+    pmulhw_m2r(*ocos_4_16, mm##2);\
+    psubsw_r2r(mm##3, mm##6);\
+    pmulhw_m2r(*ocos_4_16, mm##6);\
+    psubsw_r2r(mm##0, mm##5);\
+    por_m2r(*fdct_one_corr, mm##5);\
+    psllw_i2r(SHIFT_FRW_COL, mm##1);\
+    por_m2r(*fdct_one_corr, mm##2);\
+    mov##_r2r(mm##1, mm##4);\
+    mov##_m2r(*(in + offset + 0 * 8), mm##3);\
+    paddsw_r2r(mm##6, mm##1);\
+    psubsw_m2r(*(in + offset + 7 * 8), mm##3);\
+    psubsw_r2r(mm##6, mm##4);\
+    mov##_m2r(*(fdct_tg_all_16 + 0), mm##0);\
+    psllw_i2r(SHIFT_FRW_COL, mm##3);\
+    mov##_m2r(*(fdct_tg_all_16 + 16), mm##6);\
+    pmulhw_r2r(mm##1, mm##0);\
+    mov##_r2m(mm##7, *(out + offset + 0 * 8));\
+    pmulhw_r2r(mm##4, mm##6);\
+    mov##_r2m(mm##5, *(out + offset + 6 * 8));\
+    mov##_r2r(mm##3, mm##7);\
+    mov##_m2r(*(fdct_tg_all_16 + 16), mm##5);\
+    psubsw_r2r(mm##2, mm##7);\
+    paddsw_r2r(mm##2, mm##3);\
+    pmulhw_r2r(mm##7, mm##5);\
+    paddsw_r2r(mm##3, mm##0);\
+    paddsw_r2r(mm##4, mm##6);\
+    pmulhw_m2r(*(fdct_tg_all_16 + 0), mm##3);\
+    por_m2r(*fdct_one_corr, mm##0);\
+    paddsw_r2r(mm##7, mm##5);\
+    psubsw_r2r(mm##6, mm##7);\
+    mov##_r2m(mm##0, *(out + offset + 1 * 8));\
+    paddsw_r2r(mm##4, mm##5);\
+    mov##_r2m(mm##7, *(out + offset + 3 * 8));\
+    psubsw_r2r(mm##1, mm##3);\
+    mov##_r2m(mm##5, *(out + offset + 5 * 8));\
+    mov##_r2m(mm##3, *(out + offset + 7 * 8));\
 }
 
 FDCT_COL(mmx, mm, movq)
@@ -438,99 +433,93 @@ static av_always_inline void fdct_row_sse2(const int16_t *in, int16_t *out)
 
 static av_always_inline void fdct_row_mmx2(const int16_t *in, int16_t *out, const int16_t *table)
 {
-    __asm__ volatile (
-        "pshufw    $0x1B, 8(%0), %%mm5 \n\t"
-        "movq       (%0), %%mm0 \n\t"
-        "movq      %%mm0, %%mm1 \n\t"
-        "paddsw    %%mm5, %%mm0 \n\t"
-        "psubsw    %%mm5, %%mm1 \n\t"
-        "movq      %%mm0, %%mm2 \n\t"
-        "punpckldq %%mm1, %%mm0 \n\t"
-        "punpckhdq %%mm1, %%mm2 \n\t"
-        "movq       (%1), %%mm1 \n\t"
-        "movq      8(%1), %%mm3 \n\t"
-        "movq     16(%1), %%mm4 \n\t"
-        "movq     24(%1), %%mm5 \n\t"
-        "movq     32(%1), %%mm6 \n\t"
-        "movq     40(%1), %%mm7 \n\t"
-        "pmaddwd   %%mm0, %%mm1 \n\t"
-        "pmaddwd   %%mm2, %%mm3 \n\t"
-        "pmaddwd   %%mm0, %%mm4 \n\t"
-        "pmaddwd   %%mm2, %%mm5 \n\t"
-        "pmaddwd   %%mm0, %%mm6 \n\t"
-        "pmaddwd   %%mm2, %%mm7 \n\t"
-        "pmaddwd  48(%1), %%mm0 \n\t"
-        "pmaddwd  56(%1), %%mm2 \n\t"
-        "paddd     %%mm1, %%mm3 \n\t"
-        "paddd     %%mm4, %%mm5 \n\t"
-        "paddd     %%mm6, %%mm7 \n\t"
-        "paddd     %%mm0, %%mm2 \n\t"
-        "movq       (%2), %%mm0 \n\t"
-        "paddd     %%mm0, %%mm3 \n\t"
-        "paddd     %%mm0, %%mm5 \n\t"
-        "paddd     %%mm0, %%mm7 \n\t"
-        "paddd     %%mm0, %%mm2 \n\t"
-        "psrad $"S(SHIFT_FRW_ROW)", %%mm3 \n\t"
-        "psrad $"S(SHIFT_FRW_ROW)", %%mm5 \n\t"
-        "psrad $"S(SHIFT_FRW_ROW)", %%mm7 \n\t"
-        "psrad $"S(SHIFT_FRW_ROW)", %%mm2 \n\t"
-        "packssdw  %%mm5, %%mm3 \n\t"
-        "packssdw  %%mm2, %%mm7 \n\t"
-        "movq      %%mm3,  (%3) \n\t"
-        "movq      %%mm7, 8(%3) \n\t"
-        :
-        : "r" (in), "r" (table), "r" (fdct_r_row), "r" (out));
+    pshufw_m2r(*(in + 4), mm5, 0x1B);
+    movq_m2r(*(in + 0), mm0);
+    movq_r2r(mm0, mm1);
+    paddsw_r2r(mm5, mm0);
+    psubsw_r2r(mm5, mm1);
+    movq_r2r(mm0, mm2);
+    punpckldq_r2r(mm1, mm0);
+    punpckhdq_r2r(mm1, mm2);
+    movq_m2r(*(table + 0), mm1);
+    movq_m2r(*(table + 4), mm3);
+    movq_m2r(*(table + 8), mm4);
+    movq_m2r(*(table + 12), mm5);
+    movq_m2r(*(table + 16), mm6);
+    movq_m2r(*(table + 20), mm7);
+    pmaddwd_r2r(mm0, mm1);
+    pmaddwd_r2r(mm2, mm3);
+    pmaddwd_r2r(mm0, mm4);
+    pmaddwd_r2r(mm2, mm5);
+    pmaddwd_r2r(mm0, mm6);
+    pmaddwd_r2r(mm2, mm7);
+    pmaddwd_m2r(*(table + 24), mm0);
+    pmaddwd_m2r(*(table + 28), mm2);
+    paddd_r2r(mm1, mm3);
+    paddd_r2r(mm4, mm5);
+    paddd_r2r(mm6, mm7);
+    paddd_r2r(mm0, mm2);
+    movq_m2r(*fdct_r_row, mm0);
+    paddd_r2r(mm0, mm3);
+    paddd_r2r(mm0, mm5);
+    paddd_r2r(mm0, mm7);
+    paddd_r2r(mm0, mm2);
+    psrad_i2r(SHIFT_FRW_ROW, mm3);
+    psrad_i2r(SHIFT_FRW_ROW, mm5);
+    psrad_i2r(SHIFT_FRW_ROW, mm7);
+    psrad_i2r(SHIFT_FRW_ROW, mm2);
+    packssdw_r2r(mm5, mm3);
+    packssdw_r2r(mm2, mm7);
+    movq_r2m(mm3, *(out + 0));
+    movq_r2m(mm7, *(out + 4));
 }
 
 static av_always_inline void fdct_row_mmx(const int16_t *in, int16_t *out, const int16_t *table)
 {
-    //FIXME reorder (I do not have an old MMX-only CPU here to benchmark ...)
-    __asm__ volatile(
-        "movd     12(%0), %%mm1 \n\t"
-        "punpcklwd 8(%0), %%mm1 \n\t"
-        "movq      %%mm1, %%mm2 \n\t"
-        "psrlq     $0x20, %%mm1 \n\t"
-        "movq      0(%0), %%mm0 \n\t"
-        "punpcklwd %%mm2, %%mm1 \n\t"
-        "movq      %%mm0, %%mm5 \n\t"
-        "paddsw    %%mm1, %%mm0 \n\t"
-        "psubsw    %%mm1, %%mm5 \n\t"
-        "movq      %%mm0, %%mm2 \n\t"
-        "punpckldq %%mm5, %%mm0 \n\t"
-        "punpckhdq %%mm5, %%mm2 \n\t"
-        "movq      0(%1), %%mm1 \n\t"
-        "movq      8(%1), %%mm3 \n\t"
-        "movq     16(%1), %%mm4 \n\t"
-        "movq     24(%1), %%mm5 \n\t"
-        "movq     32(%1), %%mm6 \n\t"
-        "movq     40(%1), %%mm7 \n\t"
-        "pmaddwd   %%mm0, %%mm1 \n\t"
-        "pmaddwd   %%mm2, %%mm3 \n\t"
-        "pmaddwd   %%mm0, %%mm4 \n\t"
-        "pmaddwd   %%mm2, %%mm5 \n\t"
-        "pmaddwd   %%mm0, %%mm6 \n\t"
-        "pmaddwd   %%mm2, %%mm7 \n\t"
-        "pmaddwd  48(%1), %%mm0 \n\t"
-        "pmaddwd  56(%1), %%mm2 \n\t"
-        "paddd     %%mm1, %%mm3 \n\t"
-        "paddd     %%mm4, %%mm5 \n\t"
-        "paddd     %%mm6, %%mm7 \n\t"
-        "paddd     %%mm0, %%mm2 \n\t"
-        "movq       (%2), %%mm0 \n\t"
-        "paddd     %%mm0, %%mm3 \n\t"
-        "paddd     %%mm0, %%mm5 \n\t"
-        "paddd     %%mm0, %%mm7 \n\t"
-        "paddd     %%mm0, %%mm2 \n\t"
-        "psrad $"S(SHIFT_FRW_ROW)", %%mm3 \n\t"
-        "psrad $"S(SHIFT_FRW_ROW)", %%mm5 \n\t"
-        "psrad $"S(SHIFT_FRW_ROW)", %%mm7 \n\t"
-        "psrad $"S(SHIFT_FRW_ROW)", %%mm2 \n\t"
-        "packssdw  %%mm5, %%mm3 \n\t"
-        "packssdw  %%mm2, %%mm7 \n\t"
-        "movq      %%mm3, 0(%3) \n\t"
-        "movq      %%mm7, 8(%3) \n\t"
-        :
-        : "r" (in), "r" (table), "r" (fdct_r_row), "r" (out));
+//FIXME reorder (I do not have an old MMX-only CPU here to benchmark ...)
+    movd_m2r(*(in + 6), mm1);
+    punpcklwd_m2r(*(in + 4), mm1);
+    movq_r2r(mm1, mm2);
+    psrlq_i2r(0x20, mm1);
+    movq_m2r(*(in + 0), mm0);
+    punpcklwd_r2r(mm2, mm1);
+    movq_r2r(mm0, mm5);
+    paddsw_r2r(mm1, mm0);
+    psubsw_r2r(mm1, mm5);
+    movq_r2r(mm0, mm2);
+    punpckldq_r2r(mm5, mm0);
+    punpckhdq_r2r(mm5, mm2);
+    movq_m2r(*(table + 0), mm1);
+    movq_m2r(*(table + 4), mm3);
+    movq_m2r(*(table + 8), mm4);
+    movq_m2r(*(table + 12), mm5);
+    movq_m2r(*(table + 16), mm6);
+    movq_m2r(*(table + 20), mm7);
+    pmaddwd_r2r(mm0, mm1);
+    pmaddwd_r2r(mm2, mm3);
+    pmaddwd_r2r(mm0, mm4);
+    pmaddwd_r2r(mm2, mm5);
+    pmaddwd_r2r(mm0, mm6);
+    pmaddwd_r2r(mm2, mm7);
+    pmaddwd_m2r(*(table + 24), mm0);
+    pmaddwd_m2r(*(table + 28), mm2);
+    paddd_r2r(mm1, mm3);
+    paddd_r2r(mm4, mm5);
+    paddd_r2r(mm6, mm7);
+    paddd_r2r(mm0, mm2);
+    movq_m2r(*fdct_r_row, mm0);
+    paddd_r2r(mm0, mm3);
+    paddd_r2r(mm0, mm5);
+    paddd_r2r(mm0, mm7);
+    paddd_r2r(mm0, mm2);
+    psrad_i2r(SHIFT_FRW_ROW, mm3);
+    psrad_i2r(SHIFT_FRW_ROW, mm5);
+    psrad_i2r(SHIFT_FRW_ROW, mm7);
+    psrad_i2r(SHIFT_FRW_ROW, mm2);
+    packssdw_r2r(mm5, mm3);
+    packssdw_r2r(mm2, mm7);
+    movq_r2m(mm3, *(out + 0));
+    movq_r2m(mm7, *(out + 4));
 }
 
 void ff_fdct_mmx(int16_t *block)
diff --git a/libavcodec/x86/fft_3dn.c b/libavcodec/i386/fft_3dn.c
similarity index 100%
rename from libavcodec/x86/fft_3dn.c
rename to libavcodec/i386/fft_3dn.c
diff --git a/libavcodec/x86/fft_3dn2.c b/libavcodec/i386/fft_3dn2.c
similarity index 100%
rename from libavcodec/x86/fft_3dn2.c
rename to libavcodec/i386/fft_3dn2.c
diff --git a/libavcodec/x86/fft_mmx.asm b/libavcodec/i386/fft_mmx.asm
similarity index 99%
rename from libavcodec/x86/fft_mmx.asm
rename to libavcodec/i386/fft_mmx.asm
index 3971867..c0a9bd5 100644
--- a/libavcodec/x86/fft_mmx.asm
+++ b/libavcodec/i386/fft_mmx.asm
@@ -451,7 +451,7 @@ dispatch_tab%3%2: pointer list_of_fft
 
 ; On x86_32, this function does the register saving and restoring for all of fft.
 ; The others pass args in registers and don't spill anything.
-cglobal fft_dispatch%3%2, 2,5,0, z, nbits
+cglobal ff_fft_dispatch%3%2, 2,5,0, z, nbits
     lea r2, [dispatch_tab%3%2 GLOBAL]
     mov r2, [r2 + (nbitsq-2)*gprsize]
     call r2
diff --git a/libavcodec/x86/fft_sse.c b/libavcodec/i386/fft_sse.c
similarity index 100%
rename from libavcodec/x86/fft_sse.c
rename to libavcodec/i386/fft_sse.c
diff --git a/libavcodec/x86/flacdsp_mmx.c b/libavcodec/i386/flacdsp_mmx.c
similarity index 100%
rename from libavcodec/x86/flacdsp_mmx.c
rename to libavcodec/i386/flacdsp_mmx.c
diff --git a/libavcodec/x86/h264_i386.h b/libavcodec/i386/h264_i386.h
similarity index 98%
rename from libavcodec/x86/h264_i386.h
rename to libavcodec/i386/h264_i386.h
index 909c274..ed62dd6 100644
--- a/libavcodec/x86/h264_i386.h
+++ b/libavcodec/i386/h264_i386.h
@@ -26,8 +26,8 @@
  * @author Michael Niedermayer <michaelni at gmx.at>
  */
 
-#ifndef AVCODEC_X86_H264_I386_H
-#define AVCODEC_X86_H264_I386_H
+#ifndef AVCODEC_I386_H264_I386_H
+#define AVCODEC_I386_H264_I386_H
 
 #include "libavcodec/cabac.h"
 
@@ -152,4 +152,4 @@ static int decode_significance_8x8_x86(CABACContext *c,
 #endif /* defined(ARCH_X86) && defined(HAVE_7REGS) &&                 */
        /* defined(HAVE_EBX_AVAILABLE) && !defined(BROKEN_RELOCATIONS) */
 
-#endif /* AVCODEC_X86_H264_I386_H */
+#endif /* AVCODEC_I386_H264_I386_H */
diff --git a/libavcodec/x86/h264dsp_mmx.c b/libavcodec/i386/h264dsp_mmx.c
similarity index 91%
rename from libavcodec/x86/h264dsp_mmx.c
rename to libavcodec/i386/h264dsp_mmx.c
index 8eeb657..bb9c82d 100644
--- a/libavcodec/x86/h264dsp_mmx.c
+++ b/libavcodec/i386/h264dsp_mmx.c
@@ -376,173 +376,6 @@ static void ff_h264_idct8_dc_add_mmx2(uint8_t *dst, int16_t *block, int stride)
     }
 }
 
-//FIXME this table is a duplicate from h264data.h, and will be removed once the tables from, h264 have been split
-static const uint8_t scan8[16 + 2*4]={
- 4+1*8, 5+1*8, 4+2*8, 5+2*8,
- 6+1*8, 7+1*8, 6+2*8, 7+2*8,
- 4+3*8, 5+3*8, 4+4*8, 5+4*8,
- 6+3*8, 7+3*8, 6+4*8, 7+4*8,
- 1+1*8, 2+1*8,
- 1+2*8, 2+2*8,
- 1+4*8, 2+4*8,
- 1+5*8, 2+5*8,
-};
-
-static void ff_h264_idct_add16_mmx(uint8_t *dst, const int *block_offset, DCTELEM *block, int stride, const uint8_t nnzc[6*8]){
-    int i;
-    for(i=0; i<16; i++){
-        if(nnzc[ scan8[i] ])
-            ff_h264_idct_add_mmx(dst + block_offset[i], block + i*16, stride);
-    }
-}
-
-static void ff_h264_idct8_add4_mmx(uint8_t *dst, const int *block_offset, DCTELEM *block, int stride, const uint8_t nnzc[6*8]){
-    int i;
-    for(i=0; i<16; i+=4){
-        if(nnzc[ scan8[i] ])
-            ff_h264_idct8_add_mmx(dst + block_offset[i], block + i*16, stride);
-    }
-}
-
-
-static void ff_h264_idct_add16_mmx2(uint8_t *dst, const int *block_offset, DCTELEM *block, int stride, const uint8_t nnzc[6*8]){
-    int i;
-    for(i=0; i<16; i++){
-        int nnz = nnzc[ scan8[i] ];
-        if(nnz){
-            if(nnz==1 && block[i*16]) ff_h264_idct_dc_add_mmx2(dst + block_offset[i], block + i*16, stride);
-            else                      ff_h264_idct_add_mmx    (dst + block_offset[i], block + i*16, stride);
-        }
-    }
-}
-
-static void ff_h264_idct_add16intra_mmx(uint8_t *dst, const int *block_offset, DCTELEM *block, int stride, const uint8_t nnzc[6*8]){
-    int i;
-    for(i=0; i<16; i++){
-        if(nnzc[ scan8[i] ] || block[i*16])
-            ff_h264_idct_add_mmx(dst + block_offset[i], block + i*16, stride);
-    }
-}
-
-static void ff_h264_idct_add16intra_mmx2(uint8_t *dst, const int *block_offset, DCTELEM *block, int stride, const uint8_t nnzc[6*8]){
-    int i;
-    for(i=0; i<16; i++){
-        if(nnzc[ scan8[i] ]) ff_h264_idct_add_mmx    (dst + block_offset[i], block + i*16, stride);
-        else if(block[i*16]) ff_h264_idct_dc_add_mmx2(dst + block_offset[i], block + i*16, stride);
-    }
-}
-
-static void ff_h264_idct8_add4_mmx2(uint8_t *dst, const int *block_offset, DCTELEM *block, int stride, const uint8_t nnzc[6*8]){
-    int i;
-    for(i=0; i<16; i+=4){
-        int nnz = nnzc[ scan8[i] ];
-        if(nnz){
-            if(nnz==1 && block[i*16]) ff_h264_idct8_dc_add_mmx2(dst + block_offset[i], block + i*16, stride);
-            else                      ff_h264_idct8_add_mmx    (dst + block_offset[i], block + i*16, stride);
-        }
-    }
-}
-
-static void ff_h264_idct8_add4_sse2(uint8_t *dst, const int *block_offset, DCTELEM *block, int stride, const uint8_t nnzc[6*8]){
-    int i;
-    for(i=0; i<16; i+=4){
-        int nnz = nnzc[ scan8[i] ];
-        if(nnz){
-            if(nnz==1 && block[i*16]) ff_h264_idct8_dc_add_mmx2(dst + block_offset[i], block + i*16, stride);
-            else                      ff_h264_idct8_add_sse2   (dst + block_offset[i], block + i*16, stride);
-        }
-    }
-}
-
-static void ff_h264_idct_add8_mmx(uint8_t **dest, const int *block_offset, DCTELEM *block, int stride, const uint8_t nnzc[6*8]){
-    int i;
-    for(i=16; i<16+8; i++){
-        if(nnzc[ scan8[i] ] || block[i*16])
-            ff_h264_idct_add_mmx    (dest[(i&4)>>2] + block_offset[i], block + i*16, stride);
-    }
-}
-
-static void ff_h264_idct_add8_mmx2(uint8_t **dest, const int *block_offset, DCTELEM *block, int stride, const uint8_t nnzc[6*8]){
-    int i;
-    for(i=16; i<16+8; i++){
-        if(nnzc[ scan8[i] ])
-            ff_h264_idct_add_mmx    (dest[(i&4)>>2] + block_offset[i], block + i*16, stride);
-        else if(block[i*16])
-            ff_h264_idct_dc_add_mmx2(dest[(i&4)>>2] + block_offset[i], block + i*16, stride);
-    }
-}
-
-#if defined(CONFIG_GPL) && defined(HAVE_YASM)
-static void ff_h264_idct_dc_add8_mmx2(uint8_t *dst, int16_t *block, int stride)
-{
-    __asm__ volatile(
-        "movd             %0, %%mm0 \n\t"   //  0 0 X D
-        "punpcklwd        %1, %%mm0 \n\t"   //  x X d D
-        "paddsw           %2, %%mm0 \n\t"
-        "psraw            $6, %%mm0 \n\t"
-        "punpcklwd     %%mm0, %%mm0 \n\t"   //  d d D D
-        "pxor          %%mm1, %%mm1 \n\t"   //  0 0 0 0
-        "psubw         %%mm0, %%mm1 \n\t"   // -d-d-D-D
-        "packuswb      %%mm1, %%mm0 \n\t"   // -d-d-D-D d d D D
-        "pshufw $0xFA, %%mm0, %%mm1 \n\t"   // -d-d-d-d-D-D-D-D
-        "punpcklwd     %%mm0, %%mm0 \n\t"   //  d d d d D D D D
-        ::"m"(block[ 0]),
-          "m"(block[16]),
-          "m"(ff_pw_32)
-    );
-    __asm__ volatile(
-        "movq          %0, %%mm2 \n\t"
-        "movq          %1, %%mm3 \n\t"
-        "movq          %2, %%mm4 \n\t"
-        "movq          %3, %%mm5 \n\t"
-        "paddusb    %%mm0, %%mm2 \n\t"
-        "paddusb    %%mm0, %%mm3 \n\t"
-        "paddusb    %%mm0, %%mm4 \n\t"
-        "paddusb    %%mm0, %%mm5 \n\t"
-        "psubusb    %%mm1, %%mm2 \n\t"
-        "psubusb    %%mm1, %%mm3 \n\t"
-        "psubusb    %%mm1, %%mm4 \n\t"
-        "psubusb    %%mm1, %%mm5 \n\t"
-        "movq       %%mm2, %0    \n\t"
-        "movq       %%mm3, %1    \n\t"
-        "movq       %%mm4, %2    \n\t"
-        "movq       %%mm5, %3    \n\t"
-        :"+m"(*(uint64_t*)(dst+0*stride)),
-         "+m"(*(uint64_t*)(dst+1*stride)),
-         "+m"(*(uint64_t*)(dst+2*stride)),
-         "+m"(*(uint64_t*)(dst+3*stride))
-    );
-}
-
-extern void ff_x264_add8x4_idct_sse2(uint8_t *dst, int16_t *block, int stride);
-
-static void ff_h264_idct_add16_sse2(uint8_t *dst, const int *block_offset, DCTELEM *block, int stride, const uint8_t nnzc[6*8]){
-    int i;
-    for(i=0; i<16; i+=2)
-        if(nnzc[ scan8[i+0] ]|nnzc[ scan8[i+1] ])
-            ff_x264_add8x4_idct_sse2 (dst + block_offset[i], block + i*16, stride);
-}
-
-static void ff_h264_idct_add16intra_sse2(uint8_t *dst, const int *block_offset, DCTELEM *block, int stride, const uint8_t nnzc[6*8]){
-    int i;
-    for(i=0; i<16; i+=2){
-        if(nnzc[ scan8[i+0] ]|nnzc[ scan8[i+1] ])
-            ff_x264_add8x4_idct_sse2 (dst + block_offset[i], block + i*16, stride);
-        else if(block[i*16]|block[i*16+16])
-            ff_h264_idct_dc_add8_mmx2(dst + block_offset[i], block + i*16, stride);
-    }
-}
-
-static void ff_h264_idct_add8_sse2(uint8_t **dest, const int *block_offset, DCTELEM *block, int stride, const uint8_t nnzc[6*8]){
-    int i;
-    for(i=16; i<16+8; i++){
-        if(nnzc[ scan8[i+0] ]|nnzc[ scan8[i+1] ])
-            ff_x264_add8x4_idct_sse2 (dest[(i&4)>>2] + block_offset[i], block + i*16, stride);
-        else if(block[i*16]|block[i*16+16])
-            ff_h264_idct_dc_add8_mmx2(dest[(i&4)>>2] + block_offset[i], block + i*16, stride);
-    }
-}
-#endif
 
 /***********************************/
 /* deblocking */
@@ -2084,30 +1917,22 @@ H264_MC_816(H264_MC_H, ssse3)
 H264_MC_816(H264_MC_HV, ssse3)
 #endif
 
-/* rnd interleaved with rnd div 8, use p+1 to access rnd div 8 */
-DECLARE_ALIGNED_8(static const uint64_t, h264_rnd_reg[4]) = {
-    0x0020002000200020ULL, 0x0004000400040004ULL, 0x001C001C001C001CULL, 0x0003000300030003ULL
-};
 
 #define H264_CHROMA_OP(S,D)
 #define H264_CHROMA_OP4(S,D,T)
-#define H264_CHROMA_MC8_TMPL put_h264_chroma_generic_mc8_mmx
-#define H264_CHROMA_MC4_TMPL put_h264_chroma_generic_mc4_mmx
+#define H264_CHROMA_MC8_TMPL put_h264_chroma_mc8_mmx
+#define H264_CHROMA_MC4_TMPL put_h264_chroma_mc4_mmx
 #define H264_CHROMA_MC2_TMPL put_h264_chroma_mc2_mmx2
 #define H264_CHROMA_MC8_MV0 put_pixels8_mmx
 #include "dsputil_h264_template_mmx.c"
 
 static void put_h264_chroma_mc8_mmx_rnd(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y)
 {
-    put_h264_chroma_generic_mc8_mmx(dst, src, stride, h, x, y, h264_rnd_reg);
+    put_h264_chroma_mc8_mmx(dst, src, stride, h, x, y, 1);
 }
 static void put_h264_chroma_mc8_mmx_nornd(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y)
 {
-    put_h264_chroma_generic_mc8_mmx(dst, src, stride, h, x, y, h264_rnd_reg+2);
-}
-static void put_h264_chroma_mc4_mmx(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y)
-{
-    put_h264_chroma_generic_mc4_mmx(dst, src, stride, h, x, y, h264_rnd_reg);
+    put_h264_chroma_mc8_mmx(dst, src, stride, h, x, y, 0);
 }
 
 #undef H264_CHROMA_OP
@@ -2120,18 +1945,14 @@ static void put_h264_chroma_mc4_mmx(uint8_t *dst/*align 8*/, uint8_t *src/*align
 #define H264_CHROMA_OP(S,D) "pavgb " #S ", " #D " \n\t"
 #define H264_CHROMA_OP4(S,D,T) "movd  " #S ", " #T " \n\t"\
                                "pavgb " #T ", " #D " \n\t"
-#define H264_CHROMA_MC8_TMPL avg_h264_chroma_generic_mc8_mmx2
-#define H264_CHROMA_MC4_TMPL avg_h264_chroma_generic_mc4_mmx2
+#define H264_CHROMA_MC8_TMPL avg_h264_chroma_mc8_mmx2
+#define H264_CHROMA_MC4_TMPL avg_h264_chroma_mc4_mmx2
 #define H264_CHROMA_MC2_TMPL avg_h264_chroma_mc2_mmx2
 #define H264_CHROMA_MC8_MV0 avg_pixels8_mmx2
 #include "dsputil_h264_template_mmx.c"
 static void avg_h264_chroma_mc8_mmx2_rnd(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y)
 {
-    avg_h264_chroma_generic_mc8_mmx2(dst, src, stride, h, x, y, h264_rnd_reg);
-}
-static void avg_h264_chroma_mc4_mmx2(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y)
-{
-    avg_h264_chroma_generic_mc4_mmx2(dst, src, stride, h, x, y, h264_rnd_reg);
+    avg_h264_chroma_mc8_mmx2(dst, src, stride, h, x, y, 1);
 }
 #undef H264_CHROMA_OP
 #undef H264_CHROMA_OP4
@@ -2143,17 +1964,13 @@ static void avg_h264_chroma_mc4_mmx2(uint8_t *dst/*align 8*/, uint8_t *src/*alig
 #define H264_CHROMA_OP(S,D) "pavgusb " #S ", " #D " \n\t"
 #define H264_CHROMA_OP4(S,D,T) "movd " #S ", " #T " \n\t"\
                                "pavgusb " #T ", " #D " \n\t"
-#define H264_CHROMA_MC8_TMPL avg_h264_chroma_generic_mc8_3dnow
-#define H264_CHROMA_MC4_TMPL avg_h264_chroma_generic_mc4_3dnow
+#define H264_CHROMA_MC8_TMPL avg_h264_chroma_mc8_3dnow
+#define H264_CHROMA_MC4_TMPL avg_h264_chroma_mc4_3dnow
 #define H264_CHROMA_MC8_MV0 avg_pixels8_3dnow
 #include "dsputil_h264_template_mmx.c"
 static void avg_h264_chroma_mc8_3dnow_rnd(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y)
 {
-    avg_h264_chroma_generic_mc8_3dnow(dst, src, stride, h, x, y, h264_rnd_reg);
-}
-static void avg_h264_chroma_mc4_3dnow(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y)
-{
-    avg_h264_chroma_generic_mc4_3dnow(dst, src, stride, h, x, y, h264_rnd_reg);
+    avg_h264_chroma_mc8_3dnow(dst, src, stride, h, x, y, 1);
 }
 #undef H264_CHROMA_OP
 #undef H264_CHROMA_OP4
diff --git a/libavcodec/x86/idct_mmx.c b/libavcodec/i386/idct_mmx.c
similarity index 100%
rename from libavcodec/x86/idct_mmx.c
rename to libavcodec/i386/idct_mmx.c
diff --git a/libavcodec/x86/idct_mmx_xvid.c b/libavcodec/i386/idct_mmx_xvid.c
similarity index 100%
rename from libavcodec/x86/idct_mmx_xvid.c
rename to libavcodec/i386/idct_mmx_xvid.c
diff --git a/libavcodec/x86/idct_sse2_xvid.c b/libavcodec/i386/idct_sse2_xvid.c
similarity index 99%
rename from libavcodec/x86/idct_sse2_xvid.c
rename to libavcodec/i386/idct_sse2_xvid.c
index d8711a2..be4f211 100644
--- a/libavcodec/x86/idct_sse2_xvid.c
+++ b/libavcodec/i386/idct_sse2_xvid.c
@@ -39,7 +39,7 @@
  */
 
 #include "libavcodec/dsputil.h"
-#include "idct_xvid.h"
+#include "libavcodec/i386/idct_xvid.h"
 
 /*!
  * @file idct_sse2_xvid.c
diff --git a/libavcodec/x86/idct_xvid.h b/libavcodec/i386/idct_xvid.h
similarity index 91%
rename from libavcodec/x86/idct_xvid.h
rename to libavcodec/i386/idct_xvid.h
index bddbdb9..0bf45d5 100644
--- a/libavcodec/x86/idct_xvid.h
+++ b/libavcodec/i386/idct_xvid.h
@@ -23,8 +23,8 @@
  * header for Xvid IDCT functions
  */
 
-#ifndef AVCODEC_X86_IDCT_XVID_H
-#define AVCODEC_X86_IDCT_XVID_H
+#ifndef AVCODEC_I386_IDCT_XVID_H
+#define AVCODEC_I386_IDCT_XVID_H
 
 #include <stdint.h>
 
@@ -34,4 +34,4 @@ void ff_idct_xvid_sse2(short *block);
 void ff_idct_xvid_sse2_put(uint8_t *dest, int line_size, short *block);
 void ff_idct_xvid_sse2_add(uint8_t *dest, int line_size, short *block);
 
-#endif /* AVCODEC_X86_IDCT_XVID_H */
+#endif /* AVCODEC_I386_IDCT_XVID_H */
diff --git a/libavcodec/x86/mathops.h b/libavcodec/i386/mathops.h
similarity index 86%
rename from libavcodec/x86/mathops.h
rename to libavcodec/i386/mathops.h
index 95377ac..2ae24fc 100644
--- a/libavcodec/x86/mathops.h
+++ b/libavcodec/i386/mathops.h
@@ -19,16 +19,18 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#ifndef AVCODEC_X86_MATHOPS_H
-#define AVCODEC_X86_MATHOPS_H
+#ifndef AVCODEC_I386_MATHOPS_H
+#define AVCODEC_I386_MATHOPS_H
 
-#define MULL(ra, rb, shift) \
+#ifdef FRAC_BITS
+#   define MULL(ra, rb) \
         ({ int rt, dummy; __asm__ (\
             "imull %3               \n\t"\
             "shrdl %4, %%edx, %%eax \n\t"\
             : "=a"(rt), "=d"(dummy)\
-            : "a" ((int)ra), "rm" ((int)rb), "i"(shift));\
+            : "a" ((int)ra), "rm" ((int)rb), "i"(FRAC_BITS));\
          rt; })
+#endif
 
 #define MULH(ra, rb) \
     ({ int rt, dummy;\
@@ -40,4 +42,4 @@
      __asm__ ("imull %2\n\t" : "=A"(rt) : "a" ((int)ra), "g" ((int)rb));\
      rt; })
 
-#endif /* AVCODEC_X86_MATHOPS_H */
+#endif /* AVCODEC_I386_MATHOPS_H */
diff --git a/libavcodec/x86/mmx.h b/libavcodec/i386/mmx.h
similarity index 92%
rename from libavcodec/x86/mmx.h
rename to libavcodec/i386/mmx.h
index d7a76bb..fb5c2d4 100644
--- a/libavcodec/x86/mmx.h
+++ b/libavcodec/i386/mmx.h
@@ -18,11 +18,29 @@
  * License along with FFmpeg; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
-#ifndef AVCODEC_X86_MMX_H
-#define AVCODEC_X86_MMX_H
+#ifndef AVCODEC_I386_MMX_H
+#define AVCODEC_I386_MMX_H
 
 #warning Everything in this header is deprecated, use plain __asm__()! New code using this header will be rejected.
 
+/*
+ * The type of an value that fits in an MMX register (note that long
+ * long constant values MUST be suffixed by LL and unsigned long long
+ * values by ULL, lest they be truncated by the compiler)
+ */
+
+typedef        union {
+        long long               q;      /* Quadword (64-bit) value */
+        unsigned long long      uq;     /* Unsigned Quadword */
+        int                     d[2];   /* 2 Doubleword (32-bit) values */
+        unsigned int            ud[2];  /* 2 Unsigned Doubleword */
+        short                   w[4];   /* 4 Word (16-bit) values */
+        unsigned short          uw[4];  /* 4 Unsigned Word */
+        char                    b[8];   /* 8 Byte (8-bit) values */
+        unsigned char           ub[8];  /* 8 Unsigned Byte */
+        float                   s[2];   /* Single-precision (32-bit) value */
+} mmx_t;        /* On an 8-byte (64-bit) boundary */
+
 
 #define         mmx_i2r(op,imm,reg) \
         __asm__ volatile (#op " %0, %%" #reg \
@@ -264,4 +282,4 @@
 #define         punpckhqdq_r2r(regs,regd)   mmx_r2r (punpckhqdq, regs, regd)
 
 
-#endif /* AVCODEC_X86_MMX_H */
+#endif /* AVCODEC_I386_MMX_H */
diff --git a/libavcodec/x86/motion_est_mmx.c b/libavcodec/i386/motion_est_mmx.c
similarity index 100%
rename from libavcodec/x86/motion_est_mmx.c
rename to libavcodec/i386/motion_est_mmx.c
diff --git a/libavcodec/x86/mpegvideo_mmx.c b/libavcodec/i386/mpegvideo_mmx.c
similarity index 100%
rename from libavcodec/x86/mpegvideo_mmx.c
rename to libavcodec/i386/mpegvideo_mmx.c
diff --git a/libavcodec/x86/mpegvideo_mmx_template.c b/libavcodec/i386/mpegvideo_mmx_template.c
similarity index 100%
rename from libavcodec/x86/mpegvideo_mmx_template.c
rename to libavcodec/i386/mpegvideo_mmx_template.c
diff --git a/libavcodec/x86/simple_idct_mmx.c b/libavcodec/i386/simple_idct_mmx.c
similarity index 99%
rename from libavcodec/x86/simple_idct_mmx.c
rename to libavcodec/i386/simple_idct_mmx.c
index 5786744..6306fcb 100644
--- a/libavcodec/x86/simple_idct_mmx.c
+++ b/libavcodec/i386/simple_idct_mmx.c
@@ -80,8 +80,7 @@ DECLARE_ALIGNED(8, static const int16_t, coeffs[])= {
 };
 
 #if 0
-static void unused_var_killer(void)
-{
+static void unused_var_killer(){
         int a= wm1010 + d40000;
         temp[0]=a;
 }
diff --git a/libavcodec/x86/snowdsp_mmx.c b/libavcodec/i386/snowdsp_mmx.c
similarity index 100%
rename from libavcodec/x86/snowdsp_mmx.c
rename to libavcodec/i386/snowdsp_mmx.c
diff --git a/libavcodec/x86/vc1dsp_mmx.c b/libavcodec/i386/vc1dsp_mmx.c
similarity index 100%
rename from libavcodec/x86/vc1dsp_mmx.c
rename to libavcodec/i386/vc1dsp_mmx.c
diff --git a/libavcodec/x86/vp3dsp_mmx.c b/libavcodec/i386/vp3dsp_mmx.c
similarity index 100%
rename from libavcodec/x86/vp3dsp_mmx.c
rename to libavcodec/i386/vp3dsp_mmx.c
diff --git a/libavcodec/x86/vp3dsp_mmx.h b/libavcodec/i386/vp3dsp_mmx.h
similarity index 92%
rename from libavcodec/x86/vp3dsp_mmx.h
rename to libavcodec/i386/vp3dsp_mmx.h
index e565a33..2e79913 100644
--- a/libavcodec/x86/vp3dsp_mmx.h
+++ b/libavcodec/i386/vp3dsp_mmx.h
@@ -19,8 +19,8 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#ifndef AVCODEC_X86_VP3DSP_MMX_H
-#define AVCODEC_X86_VP3DSP_MMX_H
+#ifndef AVCODEC_I386_VP3DSP_MMX_H
+#define AVCODEC_I386_VP3DSP_MMX_H
 
 #include <stdint.h>
 #include "libavcodec/dsputil.h"
@@ -32,4 +32,4 @@ void ff_vp3_idct_add_mmx(uint8_t *dest, int line_size, DCTELEM *block);
 void ff_vp3_v_loop_filter_mmx2(uint8_t *src, int stride, int *bounding_values);
 void ff_vp3_h_loop_filter_mmx2(uint8_t *src, int stride, int *bounding_values);
 
-#endif /* AVCODEC_X86_VP3DSP_MMX_H */
+#endif /* AVCODEC_I386_VP3DSP_MMX_H */
diff --git a/libavcodec/x86/vp3dsp_sse2.c b/libavcodec/i386/vp3dsp_sse2.c
similarity index 100%
rename from libavcodec/x86/vp3dsp_sse2.c
rename to libavcodec/i386/vp3dsp_sse2.c
diff --git a/libavcodec/x86/vp3dsp_sse2.h b/libavcodec/i386/vp3dsp_sse2.h
similarity index 90%
rename from libavcodec/x86/vp3dsp_sse2.h
rename to libavcodec/i386/vp3dsp_sse2.h
index 9094620..55908c2 100644
--- a/libavcodec/x86/vp3dsp_sse2.h
+++ b/libavcodec/i386/vp3dsp_sse2.h
@@ -19,8 +19,8 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#ifndef AVCODEC_X86_VP3DSP_SSE2_H
-#define AVCODEC_X86_VP3DSP_SSE2_H
+#ifndef AVCODEC_I386_VP3DSP_SSE2_H
+#define AVCODEC_I386_VP3DSP_SSE2_H
 
 #include "libavcodec/dsputil.h"
 
@@ -28,4 +28,4 @@ void ff_vp3_idct_sse2(int16_t *input_data);
 void ff_vp3_idct_put_sse2(uint8_t *dest, int line_size, DCTELEM *block);
 void ff_vp3_idct_add_sse2(uint8_t *dest, int line_size, DCTELEM *block);
 
-#endif /* AVCODEC_X86_VP3DSP_SSE2_H */
+#endif /* AVCODEC_I386_VP3DSP_SSE2_H */
diff --git a/libavcodec/x86/x86inc.asm b/libavcodec/i386/x86inc.asm
similarity index 98%
rename from libavcodec/x86/x86inc.asm
rename to libavcodec/i386/x86inc.asm
index 3729b5b..54c4679 100644
--- a/libavcodec/x86/x86inc.asm
+++ b/libavcodec/i386/x86inc.asm
@@ -370,14 +370,20 @@ DECLARE_REG 6, ebp, ebp, bp, null, [esp + stack_offset + 28]
 
 ; Symbol prefix for C linkage
 %macro cglobal 1-2+
-    %xdefine %1 ff_%1
-    %ifdef PREFIX
-        %xdefine %1 _ %+ %1
-    %endif
     %ifidn __OUTPUT_FORMAT__,elf
-        global %1:function hidden
+        %ifdef PREFIX
+            global _%1:function hidden
+            %define %1 _%1
+        %else
+            global %1:function hidden
+        %endif
     %else
-        global %1
+        %ifdef PREFIX
+            global _%1
+            %define %1 _%1
+        %else
+            global %1
+        %endif
     %endif
     align function_align
     %1:
diff --git a/libavcodec/idcinvideo.c b/libavcodec/idcinvideo.c
index fa3bb16..43889a6 100644
--- a/libavcodec/idcinvideo.c
+++ b/libavcodec/idcinvideo.c
@@ -60,7 +60,7 @@ typedef struct
   int count;
   unsigned char used;
   int children[2];
-} hnode;
+} hnode_t;
 
 typedef struct IdcinContext {
 
@@ -70,7 +70,7 @@ typedef struct IdcinContext {
     const unsigned char *buf;
     int size;
 
-    hnode huff_nodes[256][HUF_TOKENS*2];
+    hnode_t huff_nodes[256][HUF_TOKENS*2];
     int num_huff_nodes[256];
 
 } IdcinContext;
@@ -81,7 +81,7 @@ typedef struct IdcinContext {
  * Returns the node index of the lowest unused node, or -1 if all nodes
  * are used.
  */
-static int huff_smallest_node(hnode *hnodes, int num_hnodes) {
+static int huff_smallest_node(hnode_t *hnodes, int num_hnodes) {
     int i;
     int best, best_node;
 
@@ -114,7 +114,7 @@ static int huff_smallest_node(hnode *hnodes, int num_hnodes) {
  *    That is: huff_nodes[prev][num_huff_nodes[prev]] is the root node.
  */
 static av_cold void huff_build_tree(IdcinContext *s, int prev) {
-    hnode *node, *hnodes;
+    hnode_t *node, *hnodes;
      int num_hnodes, i;
 
     num_hnodes = HUF_TOKENS;
@@ -173,7 +173,7 @@ static av_cold int idcin_decode_init(AVCodecContext *avctx)
 
 static void idcin_decode_vlcs(IdcinContext *s)
 {
-    hnode *hnodes;
+    hnode_t *hnodes;
     long x, y;
     int prev;
     unsigned char v = 0;
diff --git a/libavcodec/imc.c b/libavcodec/imc.c
index 91d9feb..436a5c9 100644
--- a/libavcodec/imc.c
+++ b/libavcodec/imc.c
@@ -143,7 +143,7 @@ static av_cold int imc_decode_init(AVCodecContext * avctx)
     /* initialize the VLC tables */
     for(i = 0; i < 4 ; i++) {
         for(j = 0; j < 4; j++) {
-            huffman_vlc[i][j].table = &vlc_tables[vlc_offsets[i * 4 + j]];
+            huffman_vlc[i][j].table = vlc_tables[vlc_offsets[i * 4 + j]];
             huffman_vlc[i][j].table_allocated = vlc_offsets[i * 4 + j + 1] - vlc_offsets[i * 4 + j];
             init_vlc(&huffman_vlc[i][j], 9, imc_huffman_sizes[i],
                      imc_huffman_lens[i][j], 1, 1,
@@ -155,7 +155,6 @@ static av_cold int imc_decode_init(AVCodecContext * avctx)
     ff_fft_init(&q->fft, 7, 1);
     dsputil_init(&q->dsp, avctx);
     avctx->sample_fmt = SAMPLE_FMT_S16;
-    avctx->channel_layout = (avctx->channels==2) ? CH_LAYOUT_STEREO : CH_LAYOUT_MONO;
     return 0;
 }
 
diff --git a/libavcodec/imgconvert.c b/libavcodec/imgconvert.c
index 952ddcb..72a5bbe 100644
--- a/libavcodec/imgconvert.c
+++ b/libavcodec/imgconvert.c
@@ -35,8 +35,7 @@
 #include "colorspace.h"
 
 #ifdef HAVE_MMX
-#include "x86/mmx.h"
-#include "x86/dsputil_mmx.h"
+#include "i386/mmx.h"
 #endif
 
 #define xglue(x, y) x ## y
@@ -267,9 +266,6 @@ static const PixFmtInfo pix_fmt_info[PIX_FMT_NB] = {
     [PIX_FMT_XVMC_MPEG2_IDCT] = {
         .name = "xvmcidct",
     },
-    [PIX_FMT_VDPAU_H264] = {
-        .name = "vdpau_h264",
-    },
     [PIX_FMT_UYYVYY411] = {
         .name = "uyyvyy411",
         .nb_channels = 1,
@@ -787,7 +783,7 @@ static int avcodec_find_best_pix_fmt1(int64_t pix_fmt_mask,
     dst_pix_fmt = -1;
     min_dist = 0x7fffffff;
     for(i = 0;i < PIX_FMT_NB; i++) {
-        if (pix_fmt_mask & (1ULL << i)) {
+        if (pix_fmt_mask & (1 << i)) {
             loss = avcodec_get_pix_fmt_loss(i, src_pix_fmt, has_alpha) & loss_mask;
             if (loss == 0) {
                 dist = avg_bits_per_pixel(i);
@@ -2737,8 +2733,13 @@ static void deinterlace_line(uint8_t *dst,
 #else
 
     {
+        mmx_t rounder;
+        rounder.uw[0]=4;
+        rounder.uw[1]=4;
+        rounder.uw[2]=4;
+        rounder.uw[3]=4;
         pxor_r2r(mm7,mm7);
-        movq_m2r(ff_pw_4,mm6);
+        movq_m2r(rounder,mm6);
     }
     for (;size > 3; size-=4) {
         DEINT_LINE_LUM
@@ -2775,8 +2776,13 @@ static void deinterlace_line_inplace(uint8_t *lum_m4, uint8_t *lum_m3, uint8_t *
 #else
 
     {
+        mmx_t rounder;
+        rounder.uw[0]=4;
+        rounder.uw[1]=4;
+        rounder.uw[2]=4;
+        rounder.uw[3]=4;
         pxor_r2r(mm7,mm7);
-        movq_m2r(ff_pw_4,mm6);
+        movq_m2r(rounder,mm6);
     }
     for (;size > 3; size-=4) {
         DEINT_INPLACE_LINE_LUM
diff --git a/libavcodec/imgconvert.h b/libavcodec/imgconvert.h
index 83bce68..bfaa03e 100644
--- a/libavcodec/imgconvert.h
+++ b/libavcodec/imgconvert.h
@@ -33,7 +33,4 @@ int ff_fill_pointer(AVPicture *picture, uint8_t *ptr, int pix_fmt, int height);
 
 int ff_get_plane_bytewidth(enum PixelFormat pix_fmt, int width, int plane);
 
-int img_convert(AVPicture *dst, int dst_pix_fmt, const AVPicture *src,
-                int src_pix_fmt, int src_width, int src_height);
-
 #endif /* AVCODEC_IMGCONVERT_H */
diff --git a/libavcodec/imgconvert_template.c b/libavcodec/imgconvert_template.c
index 7b4dbf9..2d23be8 100644
--- a/libavcodec/imgconvert_template.c
+++ b/libavcodec/imgconvert_template.c
@@ -19,6 +19,10 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+/* This header intentionally has no multiple inclusion guards. It is meant to
+ * be included multiple times and generates different code depending on the
+ * value of certain #defines. */
+
 #ifndef RGB_OUT
 #define RGB_OUT(d, r, g, b) RGBA_OUT(d, r, g, b, 0xff)
 #endif
diff --git a/libavcodec/imgresample.c b/libavcodec/imgresample.c
index 6ca810c..3c70c2a 100644
--- a/libavcodec/imgresample.c
+++ b/libavcodec/imgresample.c
@@ -26,7 +26,6 @@
 
 #include "avcodec.h"
 #include "dsputil.h"
-#include "imgconvert.h"
 #include "libswscale/swscale.h"
 
 #ifdef HAVE_ALTIVEC
@@ -155,7 +154,7 @@ static void v_resample(uint8_t *dst, int dst_width, const uint8_t *src,
 
 #ifdef HAVE_MMX
 
-#include "x86/mmx.h"
+#include "i386/mmx.h"
 
 #define FILTER4(reg) \
 {\
@@ -183,7 +182,7 @@ static void h_resample_fast4_mmx(uint8_t *dst, int dst_width,
     int src_pos, phase;
     const uint8_t *s;
     int16_t *filter;
-    uint64_t tmp;
+    mmx_t tmp;
 
     src_pos = src_start;
     pxor_r2r(mm7, mm7);
@@ -200,13 +199,13 @@ static void h_resample_fast4_mmx(uint8_t *dst, int dst_width,
         packuswb_r2r(mm7, mm3);
         packuswb_r2r(mm7, mm2);
         movq_r2m(mm0, tmp);
-        dst[0] = tmp & 0xFF;
+        dst[0] = tmp.ub[0];
         movq_r2m(mm1, tmp);
-        dst[1] = tmp & 0xFF;
+        dst[1] = tmp.ub[0];
         movq_r2m(mm2, tmp);
-        dst[2] = tmp & 0xFF;
+        dst[2] = tmp.ub[0];
         movq_r2m(mm3, tmp);
-        dst[3] = tmp & 0xFF;
+        dst[3] = tmp.ub[0];
         dst += 4;
         dst_width -= 4;
     }
@@ -214,7 +213,7 @@ static void h_resample_fast4_mmx(uint8_t *dst, int dst_width,
         FILTER4(mm0);
         packuswb_r2r(mm7, mm0);
         movq_r2m(mm0, tmp);
-        dst[0] = tmp & 0xFF;
+        dst[0] = tmp.ub[0];
         dst++;
         dst_width--;
     }
@@ -224,14 +223,17 @@ static void h_resample_fast4_mmx(uint8_t *dst, int dst_width,
 static void v_resample4_mmx(uint8_t *dst, int dst_width, const uint8_t *src,
                             int wrap, int16_t *filter)
 {
-    int sum, i;
+    int sum, i, v;
     const uint8_t *s;
-    uint64_t tmp;
-    uint64_t coefs[4];
+    mmx_t tmp;
+    mmx_t coefs[4];
 
     for(i=0;i<4;i++) {
-        tmp = filter[i];
-        coefs[i] = (tmp<<48) + (tmp<<32) + (tmp<<16) + tmp;
+        v = filter[i];
+        coefs[i].uw[0] = v;
+        coefs[i].uw[1] = v;
+        coefs[i].uw[2] = v;
+        coefs[i].uw[3] = v;
     }
 
     pxor_r2r(mm7, mm7);
@@ -259,7 +261,7 @@ static void v_resample4_mmx(uint8_t *dst, int dst_width, const uint8_t *src,
         packuswb_r2r(mm7, mm0);
         movq_r2m(mm0, tmp);
 
-        *(uint32_t *)dst = tmp & 0xFFFFFFFF;
+        *(uint32_t *)dst = tmp.ud[0];
         dst += 4;
         s += 4;
         dst_width -= 4;
diff --git a/libavcodec/indeo3.c b/libavcodec/indeo3.c
index eea27f9..533057d 100644
--- a/libavcodec/indeo3.c
+++ b/libavcodec/indeo3.c
@@ -147,7 +147,7 @@ static av_cold void iv_free_func(Indeo3DecodeContext *s)
     av_free(s->corrector_type);
 }
 
-struct ustr {
+typedef struct {
     long xpos;
     long ypos;
     long width;
@@ -155,7 +155,7 @@ struct ustr {
     long split_flag;
     long split_direction;
     long usl7;
-};
+} ustr_t;
 
 
 #define LV1_CHECK(buf1,rle_v3,lv1,lp2)  \
@@ -213,7 +213,7 @@ static void iv_Decode_Chunk(Indeo3DecodeContext *s,
     uint32_t *cur_lp, *ref_lp;
     const uint32_t *correction_lp[2], *correctionloworder_lp[2], *correctionhighorder_lp[2];
     uint8_t *correction_type_sp[2];
-    struct ustr strip_tbl[20], *strip;
+    ustr_t strip_tbl[20], *strip;
     int i, j, k, lp1, lp2, flag1, cmd, blks_width, blks_height, region_160_width,
         rle_v1, rle_v2, rle_v3;
     unsigned short res;
@@ -252,14 +252,14 @@ static void iv_Decode_Chunk(Indeo3DecodeContext *s,
 
         if(cmd == 0) {
             strip++;
-            memcpy(strip, strip-1, sizeof(*strip));
+            memcpy(strip, strip-1, sizeof(ustr_t));
             strip->split_flag = 1;
             strip->split_direction = 0;
             strip->height = (strip->height > 8 ? ((strip->height+8)>>4)<<3 : 4);
             continue;
         } else if(cmd == 1) {
             strip++;
-            memcpy(strip, strip-1, sizeof(*strip));
+            memcpy(strip, strip-1, sizeof(ustr_t));
             strip->split_flag = 1;
             strip->split_direction = 1;
             strip->width = (strip->width > 8 ? ((strip->width+8)>>4)<<3 : 4);
diff --git a/libavcodec/internal.h b/libavcodec/internal.h
deleted file mode 100644
index ec954a4..0000000
--- a/libavcodec/internal.h
+++ /dev/null
@@ -1,39 +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 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 internal.h
- * common internal api header.
- */
-
-#ifndef AVCODEC_INTERNAL_H
-#define AVCODEC_INTERNAL_H
-
-/**
- * Logs a generic warning message about a missing feature.
- * @param[in] avc a pointer to an arbitrary struct of which the first field is
- * a pointer to an AVClass struct
- * @param[in] feature string containing the name of the missing feature
- * @param[in] want_sample indicates if samples are wanted which exhibit this feature.
- * If \p want_sample is non-zero, additional verbage will be added to the log
- * message which tells the user how to report samples to the development
- * mailing list.
- */
-void ff_log_missing_feature(void *avc, const char *feature, int want_sample);
-
-#endif /* AVCODEC_INTERNAL_H */
diff --git a/libavcodec/intrax8.c b/libavcodec/intrax8.c
index 1bca7f6..0436deb 100644
--- a/libavcodec/intrax8.c
+++ b/libavcodec/intrax8.c
@@ -42,7 +42,7 @@ static VLC j_ac_vlc[2][2][8];  //[quant<13],[intra/inter],[select]
 static VLC j_dc_vlc[2][8];     //[quant], [select]
 static VLC j_orient_vlc[2][4]; //[quant], [select]
 
-static void x8_vlc_init(void){
+static void x8_vlc_init(){
     int i;
 
 #define  init_ac_vlc(dst,src) \
@@ -511,7 +511,7 @@ static int x8_decode_intra_mb(IntraX8Context* const w, const int chroma){
     int sign;
 
     assert(w->orient<12);
-    s->dsp.clear_block(s->block[0]);
+    memset(s->block[0],0x00,64*sizeof(DCTELEM));
 
     if(chroma){
         dc_mode=2;
diff --git a/libavcodec/libamr.c b/libavcodec/libamr.c
index 79ca57f..4f56e4d 100644
--- a/libavcodec/libamr.c
+++ b/libavcodec/libamr.c
@@ -81,9 +81,9 @@
 #include <amrnb/interf_enc.h>
 #endif
 
-static const char nb_bitrate_unsupported[] =
+static const char *nb_bitrate_unsupported =
     "bitrate not supported: use one of 4.75k, 5.15k, 5.9k, 6.7k, 7.4k, 7.95k, 10.2k or 12.2k\n";
-static const char wb_bitrate_unsupported[] =
+static const char *wb_bitrate_unsupported =
     "bitrate not supported: use one of 6.6k, 8.85k, 12.65k, 14.25k, 15.85k, 18.25k, 19.85k, 23.05k, or 23.85k\n";
 
 /* Common code for fixed and float version*/
@@ -245,10 +245,10 @@ static int amr_nb_decode_close(AVCodecContext * avctx)
 
 static int amr_nb_decode_frame(AVCodecContext * avctx,
             void *data, int *data_size,
-            const uint8_t * buf, int buf_size)
+            uint8_t * buf, int buf_size)
 {
     AMRContext *s = avctx->priv_data;
-    const uint8_t*amrData=buf;
+    uint8_t*amrData=buf;
     int offset=0;
     UWord8 toc, q, ft;
     Word16 serial[SERIAL_FRAMESIZE];   /* coded bits */
@@ -441,10 +441,10 @@ static int amr_nb_encode_close(AVCodecContext * avctx)
 
 static int amr_nb_decode_frame(AVCodecContext * avctx,
             void *data, int *data_size,
-            const uint8_t * buf, int buf_size)
+            uint8_t * buf, int buf_size)
 {
     AMRContext *s = avctx->priv_data;
-    const uint8_t*amrData=buf;
+    uint8_t*amrData=buf;
     static const uint8_t block_size[16]={ 12, 13, 15, 17, 19, 20, 26, 31, 5, 0, 0, 0, 0, 0, 0, 0 };
     enum Mode dec_mode;
     int packet_size;
@@ -654,10 +654,10 @@ static int amr_wb_decode_init(AVCodecContext * avctx)
 
 static int amr_wb_decode_frame(AVCodecContext * avctx,
             void *data, int *data_size,
-            const uint8_t * buf, int buf_size)
+            uint8_t * buf, int buf_size)
 {
     AMRWBContext *s = avctx->priv_data;
-    const uint8_t*amrData=buf;
+    uint8_t*amrData=buf;
     int mode;
     int packet_size;
     static const uint8_t block_size[16] = {18, 23, 33, 37, 41, 47, 51, 59, 61, 6, 6, 0, 0, 0, 1, 1};
diff --git a/libavcodec/libdiracdec.c b/libavcodec/libdiracdec.c
index 6c6e467..06830f7 100644
--- a/libavcodec/libdiracdec.c
+++ b/libavcodec/libdiracdec.c
@@ -88,12 +88,10 @@ static int libdirac_decode_frame(AVCodecContext *avccontext,
 
     *data_size = 0;
 
-    if (buf_size>0) {
+    if (buf_size>0)
         /* set data to decode into buffer */
         dirac_buffer (p_dirac_params->p_decoder, buf, buf+buf_size);
-        if ((buf[4] &0x08) == 0x08 && (buf[4] & 0x03))
-            avccontext->has_b_frames = 1;
-    }
+
     while (1) {
          /* parse data and process result */
         DecoderState state = dirac_parse (p_dirac_params->p_decoder);
diff --git a/libavcodec/libgsm.c b/libavcodec/libgsm.c
index 2d7df9b..09578b4 100644
--- a/libavcodec/libgsm.c
+++ b/libavcodec/libgsm.c
@@ -89,7 +89,6 @@ static av_cold int libgsm_init(AVCodecContext *avctx) {
 }
 
 static av_cold int libgsm_close(AVCodecContext *avctx) {
-    av_freep(&avctx->coded_frame);
     gsm_destroy(avctx->priv_data);
     avctx->priv_data = NULL;
     return 0;
diff --git a/libavcodec/libschroedingerdec.c b/libavcodec/libschroedingerdec.c
index 36cba01..f9b4d21 100644
--- a/libavcodec/libschroedingerdec.c
+++ b/libavcodec/libschroedingerdec.c
@@ -235,9 +235,6 @@ static int libschroedinger_decode_frame(AVCodecContext *avccontext,
     do {
         if ((enc_buf = FfmpegFindNextSchroParseUnit(&parse_ctx))) {
             /* Push buffer into decoder. */
-            if (SCHRO_PARSE_CODE_IS_PICTURE(enc_buf->data[4]) &&
-                SCHRO_PARSE_CODE_NUM_REFS(enc_buf->data[4]) > 0)
-                avccontext->has_b_frames = 1;
             state = schro_decoder_push (decoder, enc_buf);
             if (state == SCHRO_DECODER_FIRST_ACCESS_UNIT)
                   libschroedinger_handle_first_access_unit(avccontext);
diff --git a/libavcodec/libxvidff.c b/libavcodec/libxvidff.c
index 3149459..36f27c7 100644
--- a/libavcodec/libxvidff.c
+++ b/libavcodec/libxvidff.c
@@ -38,13 +38,13 @@
 #define BUFFER_CAT(x)               (&((x)[strlen(x)]))
 
 /* For PPC Use */
-int has_altivec(void);
+extern int has_altivec(void);
 
 /**
  * Structure for the private Xvid context.
  * This stores all the private context for the codec.
  */
-struct xvid_context {
+typedef struct xvid_context {
     void *encoder_handle;          /** Handle for Xvid encoder */
     int xsize, ysize;              /** Frame size */
     int vop_flags;                 /** VOP flags for Xvid encoder */
@@ -58,15 +58,15 @@ struct xvid_context {
     char *twopassfile;             /** second pass temp file name */
     unsigned char *intra_matrix;   /** P-Frame Quant Matrix */
     unsigned char *inter_matrix;   /** I-Frame Quant Matrix */
-};
+} xvid_context_t;
 
 /**
  * Structure for the private first-pass plugin.
  */
-struct xvid_ff_pass1 {
+typedef struct xvid_ff_pass1 {
     int     version;                /** Xvid version */
-    struct xvid_context *context;        /** Pointer to private context */
-};
+    xvid_context_t *context;        /** Pointer to private context */
+} xvid_ff_pass1_t;
 
 /* Prototypes - See function implementation for details */
 int xvid_strip_vol_header(AVCodecContext *avctx, unsigned char *frame, unsigned int header_len, unsigned int frame_len);
@@ -84,12 +84,12 @@ void xvid_correct_framerate(AVCodecContext *avctx);
 av_cold int ff_xvid_encode_init(AVCodecContext *avctx)  {
     int xerr, i;
     int xvid_flags = avctx->flags;
-    struct xvid_context *x = avctx->priv_data;
+    xvid_context_t *x = avctx->priv_data;
     uint16_t *intra, *inter;
     int fd;
 
     xvid_plugin_single_t single;
-    struct xvid_ff_pass1 rc2pass1;
+    xvid_ff_pass1_t rc2pass1;
     xvid_plugin_2pass2_t rc2pass2;
     xvid_gbl_init_t xvid_gbl_init;
     xvid_enc_create_t xvid_enc_create;
@@ -166,7 +166,7 @@ av_cold int ff_xvid_encode_init(AVCodecContext *avctx)  {
     xvid_gbl_init.version = XVID_VERSION;
     xvid_gbl_init.debug = 0;
 
-#ifdef ARCH_PPC
+#ifdef ARCH_POWERPC
     /* Xvid's PPC support is borked, use libavcodec to detect */
 #ifdef HAVE_ALTIVEC
     if( has_altivec() ) {
@@ -208,7 +208,7 @@ av_cold int ff_xvid_encode_init(AVCodecContext *avctx)  {
     x->twopassfile = NULL;
 
     if( xvid_flags & CODEC_FLAG_PASS1 ) {
-        memset(&rc2pass1, 0, sizeof(struct xvid_ff_pass1));
+        memset(&rc2pass1, 0, sizeof(xvid_ff_pass1_t));
         rc2pass1.version = XVID_VERSION;
         rc2pass1.context = x;
         x->twopassbuffer = av_malloc(BUFFER_SIZE);
@@ -370,7 +370,7 @@ int ff_xvid_encode_frame(AVCodecContext *avctx,
                          unsigned char *frame, int buf_size, void *data) {
     int xerr, i;
     char *tmp;
-    struct xvid_context *x = avctx->priv_data;
+    xvid_context_t *x = avctx->priv_data;
     AVFrame *picture = data;
     AVFrame *p = &(x->encoded_picture);
 
@@ -475,7 +475,7 @@ int ff_xvid_encode_frame(AVCodecContext *avctx,
  * @return Returns 0, success guaranteed
  */
 av_cold int ff_xvid_encode_close(AVCodecContext *avctx) {
-    struct xvid_context *x = avctx->priv_data;
+    xvid_context_t *x = avctx->priv_data;
 
     xvid_encore(x->encoder_handle, XVID_ENC_DESTROY, NULL, NULL);
 
@@ -616,7 +616,7 @@ void xvid_correct_framerate(AVCodecContext *avctx) {
  */
 static int xvid_ff_2pass_create(xvid_plg_create_t * param,
                                 void ** handle) {
-    struct xvid_ff_pass1 *x = (struct xvid_ff_pass1 *)param->param;
+    xvid_ff_pass1_t *x = (xvid_ff_pass1_t *)param->param;
     char *log = x->context->twopassbuffer;
 
     /* Do a quick bounds check */
@@ -645,7 +645,7 @@ static int xvid_ff_2pass_create(xvid_plg_create_t * param,
  * @param param Destrooy context
  * @return Returns 0, success guaranteed
  */
-static int xvid_ff_2pass_destroy(struct xvid_context *ref,
+static int xvid_ff_2pass_destroy(xvid_context_t *ref,
                                 xvid_plg_destroy_t *param) {
     /* Currently cannot think of anything to do on destruction */
     /* Still, the framework should be here for reference/use */
@@ -661,7 +661,7 @@ static int xvid_ff_2pass_destroy(struct xvid_context *ref,
  * @param param Frame data
  * @return Returns 0, success guaranteed
  */
-static int xvid_ff_2pass_before(struct xvid_context *ref,
+static int xvid_ff_2pass_before(xvid_context_t *ref,
                                 xvid_plg_data_t *param) {
     int motion_remove;
     int motion_replacements;
@@ -704,7 +704,7 @@ static int xvid_ff_2pass_before(struct xvid_context *ref,
  * @param param Statistic data
  * @return Returns XVID_ERR_xxxx on failure, or 0 on success
  */
-static int xvid_ff_2pass_after(struct xvid_context *ref,
+static int xvid_ff_2pass_after(xvid_context_t *ref,
                                 xvid_plg_data_t *param) {
     char *log = ref->twopassbuffer;
     char *frame_types = " ipbs";
@@ -770,7 +770,7 @@ AVCodec libxvid_encoder = {
     "libxvid",
     CODEC_TYPE_VIDEO,
     CODEC_ID_XVID,
-    sizeof(struct xvid_context),
+    sizeof(xvid_context_t),
     ff_xvid_encode_init,
     ff_xvid_encode_frame,
     ff_xvid_encode_close,
diff --git a/libavcodec/lsp.c b/libavcodec/lsp.c
index f57f621..d2785f7 100644
--- a/libavcodec/lsp.c
+++ b/libavcodec/lsp.c
@@ -72,7 +72,7 @@ static void lsp2poly(int* f, const int16_t* lsp, int lp_half_order)
     {
         f[i] = f[i-2];
         for(j=i; j>1; j--)
-            f[j] -= MULL(f[j-1], lsp[2*i-2], FRAC_BITS) - f[j-2];
+            f[j] -= MULL(f[j-1], lsp[2*i-2]) - f[j-2];
 
         f[1] -= lsp[2*i-2] << 8;
     }
diff --git a/libavcodec/mathops.h b/libavcodec/mathops.h
index 07265c8..123fcb7 100644
--- a/libavcodec/mathops.h
+++ b/libavcodec/mathops.h
@@ -26,13 +26,13 @@
 
 #ifdef ARCH_X86_32
 
-#include "x86/mathops.h"
+#include "i386/mathops.h"
 
-#elif defined(ARCH_ARM)
+#elif defined(ARCH_ARMV4L)
 
-#include "arm/mathops.h"
+#include "armv4l/mathops.h"
 
-#elif defined(ARCH_PPC)
+#elif defined(ARCH_POWERPC)
 
 #include "ppc/mathops.h"
 
@@ -45,7 +45,7 @@
 /* generic implementation */
 
 #ifndef MULL
-#   define MULL(a,b,s) (((int64_t)(a) * (int64_t)(b)) >> (s))
+#   define MULL(a,b) (((int64_t)(a) * (int64_t)(b)) >> FRAC_BITS)
 #endif
 
 #ifndef MULH
diff --git a/libavcodec/mimic.c b/libavcodec/mimic.c
index e30b682..b740275 100644
--- a/libavcodec/mimic.c
+++ b/libavcodec/mimic.c
@@ -163,7 +163,7 @@ static int vlc_decode_block(MimicContext *ctx, int num_coeffs, int qscale)
     DCTELEM *block = ctx->dct_block;
     unsigned int pos;
 
-    ctx->dsp.clear_block(block);
+    memset(block, 0, 64 * sizeof(DCTELEM));
 
     block[0] = get_bits(&ctx->gb, 8) << 3;
 
diff --git a/libavcodec/mjpega_dump_header_bsf.c b/libavcodec/mjpega_dump_header_bsf.c
index fb27efb..a3f0131 100644
--- a/libavcodec/mjpega_dump_header_bsf.c
+++ b/libavcodec/mjpega_dump_header_bsf.c
@@ -35,7 +35,6 @@ static int mjpega_dump_header(AVBitStreamFilterContext *bsfc, AVCodecContext *av
                               const uint8_t *buf, int buf_size, int keyframe)
 {
     uint8_t *poutbufp;
-    unsigned dqt = 0, dht = 0, sof0 = 0;
     int i;
 
     if (avctx->codec_id != CODEC_ID_MJPEG) {
@@ -60,13 +59,12 @@ static int mjpega_dump_header(AVBitStreamFilterContext *bsfc, AVCodecContext *av
     for (i = 0; i < buf_size - 1; i++) {
         if (buf[i] == 0xff) {
             switch (buf[i + 1]) {
-            case DQT:  dqt  = i + 46; break;
-            case DHT:  dht  = i + 46; break;
-            case SOF0: sof0 = i + 46; break;
+            case DQT:  /* quant off */
+            case DHT:  /* huff  off */
+            case SOF0: /* image off */
+                bytestream_put_be32(&poutbufp, i + 46);
+                break;
             case SOS:
-                bytestream_put_be32(&poutbufp, dqt); /* quant off */
-                bytestream_put_be32(&poutbufp, dht); /* huff off */
-                bytestream_put_be32(&poutbufp, sof0); /* image off */
                 bytestream_put_be32(&poutbufp, i + 46); /* scan off */
                 bytestream_put_be32(&poutbufp, i + 46 + AV_RB16(buf + i + 2)); /* data off */
                 bytestream_put_buffer(&poutbufp, buf + 2, buf_size - 2); /* skip already written SOI */
diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c
index 5dcdb73..e8a34ef 100644
--- a/libavcodec/mjpegdec.c
+++ b/libavcodec/mjpegdec.c
@@ -351,17 +351,9 @@ int ff_mjpeg_decode_sof(MJpegDecodeContext *s)
 
     /* totally blank picture as progressive JPEG will only add details to it */
     if(s->progressive){
-        int bw = (width  + s->h_max*8-1) / (s->h_max*8);
-        int bh = (height + s->v_max*8-1) / (s->v_max*8);
-        for(i=0; i<s->nb_components; i++) {
-            int size = bw * bh * s->h_count[i] * s->v_count[i];
-            av_freep(&s->blocks[i]);
-            av_freep(&s->last_nnz[i]);
-            s->blocks[i] = av_malloc(size * sizeof(**s->blocks));
-            s->last_nnz[i] = av_mallocz(size * sizeof(**s->last_nnz));
-            s->block_stride[i] = bw * s->h_count[i];
-        }
-        memset(s->coefs_finished, 0, sizeof(s->coefs_finished));
+        memset(s->picture.data[0], 0, s->picture.linesize[0] * s->height);
+        memset(s->picture.data[1], 0, s->picture.linesize[1] * s->height >> (s->v_max - s->v_count[1]));
+        memset(s->picture.data[2], 0, s->picture.linesize[2] * s->height >> (s->v_max - s->v_count[2]));
     }
     return 0;
 }
@@ -440,29 +432,27 @@ static int decode_block(MJpegDecodeContext *s, DCTELEM *block,
     return 0;
 }
 
-static int decode_dc_progressive(MJpegDecodeContext *s, DCTELEM *block, int component,
-                                 int dc_index, int16_t *quant_matrix, int Al)
-{
-    int val;
-    s->dsp.clear_block(block);
-    val = mjpeg_decode_dc(s, dc_index);
-    if (val == 0xffff) {
-        av_log(s->avctx, AV_LOG_ERROR, "error dc\n");
-        return -1;
-    }
-    val = (val * quant_matrix[0] << Al) + s->last_dc[component];
-    s->last_dc[component] = val;
-    block[0] = val;
-    return 0;
-}
-
 /* decode block and dequantize - progressive JPEG version */
-static int decode_block_progressive(MJpegDecodeContext *s, DCTELEM *block, uint8_t *last_nnz,
-                                    int ac_index, int16_t *quant_matrix,
-                                    int ss, int se, int Al, int *EOBRUN)
+static int decode_block_progressive(MJpegDecodeContext *s, DCTELEM *block,
+                        int component, int dc_index, int ac_index, int16_t *quant_matrix,
+                        int ss, int se, int Ah, int Al, int *EOBRUN)
 {
     int code, i, j, level, val, run;
 
+    /* DC coef */
+    if(!ss){
+        val = mjpeg_decode_dc(s, dc_index);
+        if (val == 0xffff) {
+            av_log(s->avctx, AV_LOG_ERROR, "error dc\n");
+            return -1;
+        }
+        val = (val * quant_matrix[0] << Al) + s->last_dc[component];
+    }else
+        val = 0;
+    s->last_dc[component] = val;
+    block[0] = val;
+    if(!se) return 0;
+    /* AC coefs */
     if(*EOBRUN){
         (*EOBRUN)--;
         return 0;
@@ -515,100 +505,9 @@ static int decode_block_progressive(MJpegDecodeContext *s, DCTELEM *block, uint8
         }
     }
     CLOSE_READER(re, &s->gb)}
-    if(i > *last_nnz)
-        *last_nnz = i;
-    return 0;
-}
-
-#define REFINE_BIT(j) {\
-    UPDATE_CACHE(re, &s->gb);\
-    sign = block[j]>>15;\
-    block[j] += SHOW_UBITS(re, &s->gb, 1) * ((quant_matrix[j]^sign)-sign) << Al;\
-    LAST_SKIP_BITS(re, &s->gb, 1);\
-}
-
-#define ZERO_RUN \
-for(;;i++) {\
-    if(i > last) {\
-        i += run;\
-        if(i > se) {\
-            av_log(s->avctx, AV_LOG_ERROR, "error count: %d\n", i);\
-            return -1;\
-        }\
-        break;\
-    }\
-    j = s->scantable.permutated[i];\
-    if(block[j])\
-        REFINE_BIT(j)\
-    else if(run-- == 0)\
-        break;\
-}
-
-/* decode block and dequantize - progressive JPEG refinement pass */
-static int decode_block_refinement(MJpegDecodeContext *s, DCTELEM *block, uint8_t *last_nnz,
-                        int ac_index, int16_t *quant_matrix,
-                        int ss, int se, int Al, int *EOBRUN)
-{
-    int code, i=ss, j, sign, val, run;
-    int last = FFMIN(se, *last_nnz);
-
-    OPEN_READER(re, &s->gb);
-    if(*EOBRUN)
-        (*EOBRUN)--;
-    else {
-        for(;;i++) {
-            UPDATE_CACHE(re, &s->gb);
-            GET_VLC(code, re, &s->gb, s->vlcs[1][ac_index].table, 9, 2)
-            /* Progressive JPEG use AC coeffs from zero and this decoder sets offset 16 by default */
-            code -= 16;
-            if(code & 0xF) {
-                run = ((unsigned) code) >> 4;
-                UPDATE_CACHE(re, &s->gb);
-                val = SHOW_UBITS(re, &s->gb, 1);
-                LAST_SKIP_BITS(re, &s->gb, 1);
-                ZERO_RUN;
-                j = s->scantable.permutated[i];
-                val--;
-                block[j] = ((quant_matrix[j]^val)-val) << Al;
-                if(i == se) {
-                    if(i > *last_nnz)
-                        *last_nnz = i;
-                    CLOSE_READER(re, &s->gb)
-                    return 0;
-                }
-            }else{
-                run = ((unsigned) code) >> 4;
-                if(run == 0xF){
-                    ZERO_RUN;
-                }else{
-                    val = run;
-                    run = (1 << run);
-                    if(val) {
-                        UPDATE_CACHE(re, &s->gb);
-                        run += SHOW_UBITS(re, &s->gb, val);
-                        LAST_SKIP_BITS(re, &s->gb, val);
-                    }
-                    *EOBRUN = run - 1;
-                    break;
-                }
-            }
-        }
-
-        if(i > *last_nnz)
-            *last_nnz = i;
-    }
-
-    for(;i<=last;i++) {
-        j = s->scantable.permutated[i];
-        if(block[j])
-            REFINE_BIT(j)
-    }
-    CLOSE_READER(re, &s->gb);
 
     return 0;
 }
-#undef REFINE_BIT
-#undef ZERO_RUN
 
 static int ljpeg_decode_rgb_scan(MJpegDecodeContext *s, int predictor, int point_transform){
     int i, mb_x, mb_y;
@@ -761,16 +660,18 @@ static int ljpeg_decode_yuv_scan(MJpegDecodeContext *s, int predictor, int point
     return 0;
 }
 
-static int mjpeg_decode_scan(MJpegDecodeContext *s, int nb_components, int Ah, int Al){
+static int mjpeg_decode_scan(MJpegDecodeContext *s, int nb_components, int ss, int se, int Ah, int Al){
     int i, mb_x, mb_y;
+    int EOBRUN = 0;
     uint8_t* data[MAX_COMPONENTS];
     int linesize[MAX_COMPONENTS];
 
+    if(Ah) return 0; /* TODO decode refinement planes too */
+
     for(i=0; i < nb_components; i++) {
         int c = s->comp_index[i];
         data[c] = s->picture.data[c];
         linesize[c]=s->linesize[c];
-        s->coefs_finished[c] |= 1;
         if(s->avctx->codec->id==CODEC_ID_AMV) {
             //picture should be flipped upside-down for this codec
             assert(!(s->avctx->flags & CODEC_FLAG_EMU_EDGE));
@@ -794,32 +695,30 @@ static int mjpeg_decode_scan(MJpegDecodeContext *s, int nb_components, int Ah, i
                 x = 0;
                 y = 0;
                 for(j=0;j<n;j++) {
-                    ptr = data[c] +
-                        (((linesize[c] * (v * mb_y + y) * 8) +
-                        (h * mb_x + x) * 8) >> s->avctx->lowres);
-                    if(s->interlaced && s->bottom_field)
-                        ptr += linesize[c] >> 1;
-                    if(!s->progressive) {
-                        s->dsp.clear_block(s->block);
-                        if(decode_block(s, s->block, i,
+                    memset(s->block, 0, sizeof(s->block));
+                    if (!s->progressive && decode_block(s, s->block, i,
                                      s->dc_index[i], s->ac_index[i],
                                      s->quant_matrixes[ s->quant_index[c] ]) < 0) {
-                            av_log(s->avctx, AV_LOG_ERROR, "error y=%d x=%d\n", mb_y, mb_x);
-                            return -1;
-                        }
-                        s->dsp.idct_put(ptr, linesize[c], s->block);
-                    } else {
-                        int block_idx = s->block_stride[c] * (v * mb_y + y) + (h * mb_x + x);
-                        DCTELEM *block = s->blocks[c][block_idx];
-                        if(Ah)
-                            block[0] += get_bits1(&s->gb) * s->quant_matrixes[ s->quant_index[c] ][0] << Al;
-                        else if(decode_dc_progressive(s, block, i, s->dc_index[i], s->quant_matrixes[ s->quant_index[c] ], Al) < 0) {
-                            av_log(s->avctx, AV_LOG_ERROR, "error y=%d x=%d\n", mb_y, mb_x);
-                            return -1;
-                        }
+                        av_log(s->avctx, AV_LOG_ERROR, "error y=%d x=%d\n", mb_y, mb_x);
+                        return -1;
+                    }
+                    if (s->progressive && decode_block_progressive(s, s->block, i,
+                                     s->dc_index[i], s->ac_index[i],
+                                     s->quant_matrixes[ s->quant_index[c] ], ss, se, Ah, Al, &EOBRUN) < 0) {
+                        av_log(s->avctx, AV_LOG_ERROR, "error y=%d x=%d\n", mb_y, mb_x);
+                        return -1;
                     }
 //                    av_log(s->avctx, AV_LOG_DEBUG, "mb: %d %d processed\n", mb_y, mb_x);
+                    ptr = data[c] +
+                        (((linesize[c] * (v * mb_y + y) * 8) +
+                        (h * mb_x + x) * 8) >> s->avctx->lowres);
+                    if (s->interlaced && s->bottom_field)
+                        ptr += linesize[c] >> 1;
 //av_log(NULL, AV_LOG_DEBUG, "%d %d %d %d %d %d %d %d \n", mb_x, mb_y, x, y, c, s->bottom_field, (v * mb_y + y) * 8, (h * mb_x + x) * 8);
+                    if(!s->progressive)
+                        s->dsp.idct_put(ptr, linesize[c], s->block);
+                    else
+                        s->dsp.idct_add(ptr, linesize[c], s->block);
                     if (++x == h) {
                         x = 0;
                         y++;
@@ -839,49 +738,6 @@ static int mjpeg_decode_scan(MJpegDecodeContext *s, int nb_components, int Ah, i
     return 0;
 }
 
-static int mjpeg_decode_scan_progressive_ac(MJpegDecodeContext *s, int ss, int se, int Ah, int Al){
-    int mb_x, mb_y;
-    int EOBRUN = 0;
-    int c = s->comp_index[0];
-    uint8_t* data = s->picture.data[c];
-    int linesize = s->linesize[c];
-    int last_scan = 0;
-    int16_t *quant_matrix = s->quant_matrixes[ s->quant_index[c] ];
-
-    if(!Al) {
-        s->coefs_finished[c] |= (1LL<<(se+1))-(1LL<<ss);
-        last_scan = !~s->coefs_finished[c];
-    }
-
-    if(s->interlaced && s->bottom_field)
-        data += linesize >> 1;
-
-    for(mb_y = 0; mb_y < s->mb_height; mb_y++) {
-        uint8_t *ptr = data + (mb_y*linesize*8 >> s->avctx->lowres);
-        int block_idx = mb_y * s->block_stride[c];
-        DCTELEM (*block)[64] = &s->blocks[c][block_idx];
-        uint8_t *last_nnz = &s->last_nnz[c][block_idx];
-        for(mb_x = 0; mb_x < s->mb_width; mb_x++, block++, last_nnz++) {
-            int ret;
-            if(Ah)
-                ret = decode_block_refinement(s, *block, last_nnz, s->ac_index[0],
-                                              quant_matrix, ss, se, Al, &EOBRUN);
-            else
-                ret = decode_block_progressive(s, *block, last_nnz, s->ac_index[0],
-                                               quant_matrix, ss, se, Al, &EOBRUN);
-            if(ret < 0) {
-                av_log(s->avctx, AV_LOG_ERROR, "error y=%d x=%d\n", mb_y, mb_x);
-                return -1;
-            }
-            if(last_scan) {
-                s->dsp.idct_put(ptr, linesize, *block);
-                ptr += 8 >> s->avctx->lowres;
-            }
-        }
-    }
-    return 0;
-}
-
 int ff_mjpeg_decode_sos(MJpegDecodeContext *s)
 {
     int len, nb_components, i, h, v, predictor, point_transform;
@@ -993,13 +849,8 @@ int ff_mjpeg_decode_sos(MJpegDecodeContext *s)
             }
         }
     }else{
-        if(s->progressive && predictor) {
-            if(mjpeg_decode_scan_progressive_ac(s, predictor, ilv, prev_shift, point_transform) < 0)
-                return -1;
-        } else {
-            if(mjpeg_decode_scan(s, nb_components, prev_shift, point_transform) < 0)
-                return -1;
-        }
+        if(mjpeg_decode_scan(s, nb_components, predictor, ilv, prev_shift, point_transform) < 0)
+            return -1;
     }
     emms_c();
     return 0;
@@ -1503,10 +1354,6 @@ av_cold int ff_mjpeg_decode_end(AVCodecContext *avctx)
         for(j=0;j<4;j++)
             free_vlc(&s->vlcs[i][j]);
     }
-    for(i=0; i<MAX_COMPONENTS; i++) {
-        av_freep(&s->blocks[i]);
-        av_freep(&s->last_nnz[i]);
-    }
     return 0;
 }
 
diff --git a/libavcodec/mjpegdec.h b/libavcodec/mjpegdec.h
index e90d864..c973a9c 100644
--- a/libavcodec/mjpegdec.h
+++ b/libavcodec/mjpegdec.h
@@ -67,7 +67,6 @@ typedef struct MJpegDecodeContext {
     int width, height;
     int mb_width, mb_height;
     int nb_components;
-    int block_stride[MAX_COMPONENTS];
     int component_id[MAX_COMPONENTS];
     int h_count[MAX_COMPONENTS]; /* horizontal and vertical count for each component */
     int v_count[MAX_COMPONENTS];
@@ -84,9 +83,6 @@ typedef struct MJpegDecodeContext {
     int linesize[MAX_COMPONENTS];                   ///< linesize << interlaced
     int8_t *qscale_table;
     DECLARE_ALIGNED_16(DCTELEM, block[64]);
-    DCTELEM (*blocks[MAX_COMPONENTS])[64]; ///< intermediate sums (progressive mode)
-    uint8_t *last_nnz[MAX_COMPONENTS];
-    uint64_t coefs_finished[MAX_COMPONENTS]; ///< bitmask of which coefs have been completely decoded (progressive mode)
     ScanTable scantable;
     DSPContext dsp;
 
diff --git a/libavcodec/mlp.c b/libavcodec/mlp.c
index 7ef7f97..2ac2e65 100644
--- a/libavcodec/mlp.c
+++ b/libavcodec/mlp.c
@@ -43,14 +43,26 @@ const uint8_t ff_mlp_huffman_tables[3][18][2] = {
 static int crc_init = 0;
 static AVCRC crc_63[1024];
 static AVCRC crc_1D[1024];
+
+
+static int crc_init_2D = 0;
 static AVCRC crc_2D[1024];
 
+int av_cold ff_mlp_init_crc2D(AVCodecParserContext *s)
+{
+    if (!crc_init_2D) {
+        av_crc_init(crc_2D, 0, 16, 0x002D, sizeof(crc_2D));
+        crc_init_2D = 1;
+    }
+
+    return 0;
+}
+
 void av_cold ff_mlp_init_crc()
 {
     if (!crc_init) {
         av_crc_init(crc_63, 0,  8,   0x63, sizeof(crc_63));
         av_crc_init(crc_1D, 0,  8,   0x1D, sizeof(crc_1D));
-        av_crc_init(crc_2D, 0, 16, 0x002D, sizeof(crc_2D));
         crc_init = 1;
     }
 }
diff --git a/libavcodec/mlp.h b/libavcodec/mlp.h
index b81c735..338a7a3 100644
--- a/libavcodec/mlp.h
+++ b/libavcodec/mlp.h
@@ -106,6 +106,8 @@ uint8_t ff_mlp_restart_checksum(const uint8_t *buf, unsigned int bit_size);
  */
 uint8_t ff_mlp_calculate_parity(const uint8_t *buf, unsigned int buf_size);
 
+int ff_mlp_init_crc2D(AVCodecParserContext *s);
+
 void ff_mlp_init_crc();
 
 /** XOR four bytes into one. */
diff --git a/libavcodec/mlp_parser.c b/libavcodec/mlp_parser.c
index 925ed86..4400d71 100644
--- a/libavcodec/mlp_parser.c
+++ b/libavcodec/mlp_parser.c
@@ -150,12 +150,6 @@ typedef struct MLPParseContext
     int num_substreams;
 } MLPParseContext;
 
-static av_cold int mlp_init(AVCodecParserContext *s)
-{
-    ff_mlp_init_crc();
-    return 0;
-}
-
 static int mlp_parse(AVCodecParserContext *s,
                      AVCodecContext *avctx,
                      const uint8_t **poutbuf, int *poutbuf_size,
@@ -251,11 +245,11 @@ static int mlp_parse(AVCodecParserContext *s,
         if (ff_mlp_read_major_sync(avctx, &mh, &gb) < 0)
             goto lost_sync;
 
-        avctx->bits_per_raw_sample = mh.group1_bits;
-        if (avctx->bits_per_raw_sample > 16)
+#ifdef CONFIG_AUDIO_NONSHORT
+        avctx->bits_per_sample = mh.group1_bits;
+        if (avctx->bits_per_sample > 16)
             avctx->sample_fmt = SAMPLE_FMT_S32;
-        else
-            avctx->sample_fmt = SAMPLE_FMT_S16;
+#endif
         avctx->sample_rate = mh.group1_samplerate;
         avctx->frame_size = mh.access_unit_size;
 
@@ -289,7 +283,7 @@ lost_sync:
 AVCodecParser mlp_parser = {
     { CODEC_ID_MLP },
     sizeof(MLPParseContext),
-    mlp_init,
+    ff_mlp_init_crc2D,
     mlp_parse,
     NULL,
 };
diff --git a/libavcodec/mlpdec.c b/libavcodec/mlpdec.c
index f4323da..7272458 100644
--- a/libavcodec/mlpdec.c
+++ b/libavcodec/mlpdec.c
@@ -40,7 +40,7 @@
 
 static const char* sample_message =
     "Please file a bug report following the instructions at "
-    "http://ffmpeg.org/bugreports.html and include "
+    "http://ffmpeg.mplayerhq.hu/bugreports.html and include "
     "a sample of this file.";
 
 typedef struct SubStream {
@@ -222,7 +222,7 @@ static av_cold int mlp_decode_init(AVCodecContext *avctx)
     m->avctx = avctx;
     for (substr = 0; substr < MAX_SUBSTREAMS; substr++)
         m->substream[substr].lossless_check_data = 0xffffffff;
-
+    avctx->sample_fmt = SAMPLE_FMT_S16;
     return 0;
 }
 
@@ -296,11 +296,12 @@ static int read_major_sync(MLPDecodeContext *m, GetBitContext *gb)
     m->avctx->sample_rate    = mh.group1_samplerate;
     m->avctx->frame_size     = mh.access_unit_size;
 
-    m->avctx->bits_per_raw_sample = mh.group1_bits;
-    if (mh.group1_bits > 16)
+#ifdef CONFIG_AUDIO_NONSHORT
+    m->avctx->bits_per_sample = mh.group1_bits;
+    if (mh.group1_bits > 16) {
         m->avctx->sample_fmt = SAMPLE_FMT_S32;
-    else
-        m->avctx->sample_fmt = SAMPLE_FMT_S16;
+    }
+#endif
 
     m->params_valid = 1;
     for (substr = 0; substr < MAX_SUBSTREAMS; substr++)
diff --git a/libavcodec/motion-test.c b/libavcodec/motion-test.c
index 439c4d0..6979150 100644
--- a/libavcodec/motion-test.c
+++ b/libavcodec/motion-test.c
@@ -31,6 +31,8 @@
 
 #include "dsputil.h"
 
+#include "i386/mmx.h"
+
 #undef exit
 #undef printf
 #undef random
diff --git a/libavcodec/motion_est.c b/libavcodec/motion_est.c
index d9d48a6..7c1fc67 100644
--- a/libavcodec/motion_est.c
+++ b/libavcodec/motion_est.c
@@ -307,6 +307,8 @@ int ff_init_me(MpegEncContext *s){
         c->sub_motion_search= no_sub_motion_search;
     }
 
+    c->temp= c->scratchpad;
+
     return 0;
 }
 
diff --git a/libavcodec/mpc.h b/libavcodec/mpc.h
index 038c34f..3040135 100644
--- a/libavcodec/mpc.h
+++ b/libavcodec/mpc.h
@@ -74,7 +74,7 @@ typedef struct {
     DECLARE_ALIGNED_16(int32_t, sb_samples[MPA_MAX_CHANNELS][36][SBLIMIT]);
 } MPCContext;
 
-void ff_mpc_init();
-void ff_mpc_dequantize_and_synth(MPCContext *c, int maxband, void *dst);
+extern void ff_mpc_init();
+extern void ff_mpc_dequantize_and_synth(MPCContext *c, int maxband, void *dst);
 
 #endif /* AVCODEC_MPC_H */
diff --git a/libavcodec/mpc7.c b/libavcodec/mpc7.c
index 2db4172..565b858 100644
--- a/libavcodec/mpc7.c
+++ b/libavcodec/mpc7.c
@@ -109,7 +109,6 @@ static av_cold int mpc7_decode_init(AVCodecContext * avctx)
     }
     vlc_initialized = 1;
     avctx->sample_fmt = SAMPLE_FMT_S16;
-    avctx->channel_layout = (avctx->channels==2) ? CH_LAYOUT_STEREO : CH_LAYOUT_MONO;
     return 0;
 }
 
diff --git a/libavcodec/mpc8.c b/libavcodec/mpc8.c
index c47e74d..0d4f128 100644
--- a/libavcodec/mpc8.c
+++ b/libavcodec/mpc8.c
@@ -178,7 +178,6 @@ static av_cold int mpc8_decode_init(AVCodecContext * avctx)
     }
     vlc_initialized = 1;
     avctx->sample_fmt = SAMPLE_FMT_S16;
-    avctx->channel_layout = (avctx->channels==2) ? CH_LAYOUT_STEREO : CH_LAYOUT_MONO;
     return 0;
 }
 
diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c
index 52ab50b..7d81863 100644
--- a/libavcodec/mpeg12.c
+++ b/libavcodec/mpeg12.c
@@ -63,10 +63,10 @@ static inline int mpeg2_fast_decode_block_intra(MpegEncContext *s, DCTELEM *bloc
 static int mpeg_decode_motion(MpegEncContext *s, int fcode, int pred);
 static void exchange_uv(MpegEncContext *s);
 
-int XVMC_field_start(MpegEncContext *s, AVCodecContext *avctx);
-int XVMC_field_end(MpegEncContext *s);
-void XVMC_pack_pblocks(MpegEncContext *s,int cbp);
-void XVMC_init_block(MpegEncContext *s);//set s->block
+extern int XVMC_field_start(MpegEncContext *s, AVCodecContext *avctx);
+extern int XVMC_field_end(MpegEncContext *s);
+extern void XVMC_pack_pblocks(MpegEncContext *s,int cbp);
+extern void XVMC_init_block(MpegEncContext *s);//set s->block
 
 static const enum PixelFormat pixfmt_xvmc_mpg2_420[] = {
                                            PIX_FMT_XVMC_MPEG2_IDCT,
@@ -303,7 +303,7 @@ static int mpeg_decode_mb(MpegEncContext *s,
         }else
             memset(s->last_mv, 0, sizeof(s->last_mv)); /* reset mv prediction */
         s->mb_intra = 1;
-#ifdef CONFIG_XVMC
+#ifdef HAVE_XVMC
         //if 1, we memcpy blocks in xvmcvideo
         if(s->avctx->xvmc_acceleration > 1){
             XVMC_pack_pblocks(s,-1);//inter are always full blocks
@@ -516,7 +516,7 @@ static int mpeg_decode_mb(MpegEncContext *s,
                 return -1;
             }
 
-#ifdef CONFIG_XVMC
+#ifdef HAVE_XVMC
             //if 1, we memcpy blocks in xvmcvideo
             if(s->avctx->xvmc_acceleration > 1){
                 XVMC_pack_pblocks(s,cbp);
@@ -1212,22 +1212,6 @@ static void quant_matrix_rebuild(uint16_t *matrix, const uint8_t *old_perm,
     }
 }
 
-static enum PixelFormat mpeg_get_pixelformat(AVCodecContext *avctx){
-    Mpeg1Context *s1 = avctx->priv_data;
-    MpegEncContext *s = &s1->mpeg_enc_ctx;
-
-    if(avctx->xvmc_acceleration)
-        return avctx->get_format(avctx,pixfmt_xvmc_mpg2_420);
-    else{
-        if(s->chroma_format <  2)
-            return PIX_FMT_YUV420P;
-        else if(s->chroma_format == 2)
-            return PIX_FMT_YUV422P;
-        else
-            return PIX_FMT_YUV444P;
-    }
-}
-
 /* Call this function when we know all parameters.
  * It may be called in different places for MPEG-1 and MPEG-2. */
 static int mpeg_decode_postinit(AVCodecContext *avctx){
@@ -1304,7 +1288,19 @@ static int mpeg_decode_postinit(AVCodecContext *avctx){
             }
         }//MPEG-2
 
-        avctx->pix_fmt = mpeg_get_pixelformat(avctx);
+        if(avctx->xvmc_acceleration){
+            avctx->pix_fmt = avctx->get_format(avctx,pixfmt_xvmc_mpg2_420);
+        }else{
+            if(s->chroma_format <  2){
+                avctx->pix_fmt = PIX_FMT_YUV420P;
+            }else
+            if(s->chroma_format == 2){
+                avctx->pix_fmt = PIX_FMT_YUV422P;
+            }else
+            if(s->chroma_format >  2){
+                avctx->pix_fmt = PIX_FMT_YUV444P;
+            }
+        }
         //until then pix_fmt may be changed right after codec init
         if( avctx->pix_fmt == PIX_FMT_XVMC_MPEG2_IDCT )
             if( avctx->idct_algo == FF_IDCT_AUTO )
@@ -1643,7 +1639,7 @@ static int mpeg_field_start(MpegEncContext *s){
                 }
             }
     }
-#ifdef CONFIG_XVMC
+#ifdef HAVE_XVMC
 // MPV_frame_start will call this function too,
 // but we need to call it on every field
     if(s->avctx->xvmc_acceleration)
@@ -1734,7 +1730,7 @@ static int mpeg_decode_slice(Mpeg1Context *s1, int mb_y,
     }
 
     for(;;) {
-#ifdef CONFIG_XVMC
+#ifdef HAVE_XVMC
         //If 1, we memcpy blocks in xvmcvideo.
         if(s->avctx->xvmc_acceleration > 1)
             XVMC_init_block(s);//set s->block
@@ -1870,7 +1866,7 @@ eos: // end of slice
 }
 
 static int slice_decode_thread(AVCodecContext *c, void *arg){
-    MpegEncContext *s= *(void**)arg;
+    MpegEncContext *s= arg;
     const uint8_t *buf= s->gb.buffer;
     int mb_y= s->start_mb_y;
 
@@ -1916,7 +1912,7 @@ static int slice_end(AVCodecContext *avctx, AVFrame *pict)
     if (!s1->mpeg_enc_ctx_allocated || !s->current_picture_ptr)
         return 0;
 
-#ifdef CONFIG_XVMC
+#ifdef HAVE_XVMC
     if(s->avctx->xvmc_acceleration)
         XVMC_field_end(s);
 #endif
@@ -2073,7 +2069,11 @@ static int vcr2_init_sequence(AVCodecContext *avctx)
     avctx->has_b_frames= 0; //true?
     s->low_delay= 1;
 
-    avctx->pix_fmt = mpeg_get_pixelformat(avctx);
+    if(avctx->xvmc_acceleration){
+        avctx->pix_fmt = avctx->get_format(avctx,pixfmt_xvmc_mpg2_420);
+    }else{
+        avctx->pix_fmt = PIX_FMT_YUV420P;
+    }
 
     if( avctx->pix_fmt == PIX_FMT_XVMC_MPEG2_IDCT )
         if( avctx->idct_algo == FF_IDCT_AUTO )
@@ -2299,7 +2299,7 @@ static int decode_chunks(AVCodecContext *avctx,
                 if(avctx->thread_count > 1){
                     int i;
 
-                    avctx->execute(avctx, slice_decode_thread,  (void**)&(s2->thread_context[0]), NULL, s->slice_count, sizeof(void*));
+                    avctx->execute(avctx, slice_decode_thread,  (void**)&(s2->thread_context[0]), NULL, s->slice_count);
                     for(i=0; i<s->slice_count; i++)
                         s2->error_count += s2->thread_context[i]->error_count;
                 }
@@ -2472,7 +2472,7 @@ AVCodec mpegvideo_decoder = {
     .long_name= NULL_IF_CONFIG_SMALL("MPEG-1 video"),
 };
 
-#ifdef CONFIG_XVMC
+#ifdef HAVE_XVMC
 static av_cold int mpeg_mc_decode_init(AVCodecContext *avctx){
     Mpeg1Context *s;
 
diff --git a/libavcodec/mpegaudio.h b/libavcodec/mpegaudio.h
index 33af18d..21de2da 100644
--- a/libavcodec/mpegaudio.h
+++ b/libavcodec/mpegaudio.h
@@ -128,7 +128,7 @@ typedef struct HuffTable {
 } HuffTable;
 
 int ff_mpa_l2_select_table(int bitrate, int nb_channels, int freq, int lsf);
-int ff_mpa_decode_header(AVCodecContext *avctx, uint32_t head, int *sample_rate, int *channels, int *frame_size, int *bitrate);
+int ff_mpa_decode_header(AVCodecContext *avctx, uint32_t head, int *sample_rate);
 void ff_mpa_synth_init(MPA_INT *window);
 void ff_mpa_synth_filter(MPA_INT *synth_buf_ptr, int *synth_buf_offset,
                          MPA_INT *window, int *dither_state,
diff --git a/libavcodec/mpegaudio_parser.c b/libavcodec/mpegaudio_parser.c
index e4b17b0..e7cb743 100644
--- a/libavcodec/mpegaudio_parser.c
+++ b/libavcodec/mpegaudio_parser.c
@@ -44,7 +44,7 @@ typedef struct MpegAudioParseContext {
 
 /* useful helper to get mpeg audio stream infos. Return -1 if error in
    header, otherwise the coded frame size in bytes */
-int ff_mpa_decode_header(AVCodecContext *avctx, uint32_t head, int *sample_rate, int *channels, int *frame_size, int *bit_rate)
+int ff_mpa_decode_header(AVCodecContext *avctx, uint32_t head, int *sample_rate)
 {
     MPADecodeContext s1, *s = &s1;
     s1.avctx = avctx;
@@ -58,23 +58,23 @@ int ff_mpa_decode_header(AVCodecContext *avctx, uint32_t head, int *sample_rate,
 
     switch(s->layer) {
     case 1:
-        *frame_size = 384;
+        avctx->frame_size = 384;
         break;
     case 2:
-        *frame_size = 1152;
+        avctx->frame_size = 1152;
         break;
     default:
     case 3:
         if (s->lsf)
-            *frame_size = 576;
+            avctx->frame_size = 576;
         else
-            *frame_size = 1152;
+            avctx->frame_size = 1152;
         break;
     }
 
     *sample_rate = s->sample_rate;
-    *channels = s->nb_channels;
-    *bit_rate = s->bit_rate;
+    avctx->channels = s->nb_channels;
+    avctx->bit_rate = s->bit_rate;
     avctx->sub_id = s->layer;
     return s->frame_size;
 }
@@ -92,7 +92,7 @@ static int mpegaudio_parse(AVCodecParserContext *s1,
                            const uint8_t *buf, int buf_size)
 {
     MpegAudioParseContext *s = s1->priv_data;
-    int len, ret, sr, channels, bit_rate, frame_size;
+    int len, ret, sr;
     uint32_t header;
     const uint8_t *buf_ptr;
 
@@ -123,7 +123,7 @@ static int mpegaudio_parse(AVCodecParserContext *s1,
             got_header:
                 header = AV_RB32(s->inbuf);
 
-                ret = ff_mpa_decode_header(avctx, header, &sr, &channels, &frame_size, &bit_rate);
+                ret = ff_mpa_decode_header(avctx, header, &sr);
                 if (ret < 0) {
                     s->header_count= -2;
                     /* no sync found : move by one byte (inefficient, but simple!) */
@@ -146,12 +146,8 @@ static int mpegaudio_parse(AVCodecParserContext *s1,
                         s->frame_size = -1;
                     }
 #endif
-                    if(s->header_count > 1){
+                    if(s->header_count > 1)
                         avctx->sample_rate= sr;
-                        avctx->channels   = channels;
-                        avctx->frame_size = frame_size;
-                        avctx->bit_rate   = bit_rate;
-                    }
                 }
             }
         } else
diff --git a/libavcodec/mpegaudiodec.c b/libavcodec/mpegaudiodec.c
index a853562..a277492 100644
--- a/libavcodec/mpegaudiodec.c
+++ b/libavcodec/mpegaudiodec.c
@@ -351,9 +351,9 @@ static int decode_init(AVCodecContext * avctx)
             int n, norm;
             n = i + 2;
             norm = ((INT64_C(1) << n) * FRAC_ONE) / ((1 << n) - 1);
-            scale_factor_mult[i][0] = MULL(FIXR(1.0 * 2.0), norm, FRAC_BITS);
-            scale_factor_mult[i][1] = MULL(FIXR(0.7937005259 * 2.0), norm, FRAC_BITS);
-            scale_factor_mult[i][2] = MULL(FIXR(0.6299605249 * 2.0), norm, FRAC_BITS);
+            scale_factor_mult[i][0] = MULL(FIXR(1.0 * 2.0), norm);
+            scale_factor_mult[i][1] = MULL(FIXR(0.7937005259 * 2.0), norm);
+            scale_factor_mult[i][2] = MULL(FIXR(0.6299605249 * 2.0), norm);
             dprintf(avctx, "%d: norm=%x s=%x %x %x\n",
                     i, norm,
                     scale_factor_mult[i][0],
@@ -1097,7 +1097,7 @@ static void imdct36(int *out, int *buf, int *in, int *win)
         t2 = tmp[i + 1];
         t3 = tmp[i + 3];
         s1 = MULH(2*(t3 + t2), icos36h[j]);
-        s3 = MULL(t3 - t2, icos36[8 - j], FRAC_BITS);
+        s3 = MULL(t3 - t2, icos36[8 - j]);
 
         t0 = s0 + s1;
         t1 = s0 - s1;
@@ -1705,8 +1705,8 @@ static void compute_stereo(MPADecodeContext *s,
                     v2 = is_tab[1][sf];
                     for(j=0;j<len;j++) {
                         tmp0 = tab0[j];
-                        tab0[j] = MULL(tmp0, v1, FRAC_BITS);
-                        tab1[j] = MULL(tmp0, v2, FRAC_BITS);
+                        tab0[j] = MULL(tmp0, v1);
+                        tab1[j] = MULL(tmp0, v2);
                     }
                 } else {
                 found1:
@@ -1716,8 +1716,8 @@ static void compute_stereo(MPADecodeContext *s,
                         for(j=0;j<len;j++) {
                             tmp0 = tab0[j];
                             tmp1 = tab1[j];
-                            tab0[j] = MULL(tmp0 + tmp1, ISQRT2, FRAC_BITS);
-                            tab1[j] = MULL(tmp0 - tmp1, ISQRT2, FRAC_BITS);
+                            tab0[j] = MULL(tmp0 + tmp1, ISQRT2);
+                            tab1[j] = MULL(tmp0 - tmp1, ISQRT2);
                         }
                     }
                 }
@@ -1749,8 +1749,8 @@ static void compute_stereo(MPADecodeContext *s,
                 v2 = is_tab[1][sf];
                 for(j=0;j<len;j++) {
                     tmp0 = tab0[j];
-                    tab0[j] = MULL(tmp0, v1, FRAC_BITS);
-                    tab1[j] = MULL(tmp0, v2, FRAC_BITS);
+                    tab0[j] = MULL(tmp0, v1);
+                    tab1[j] = MULL(tmp0, v2);
                 }
             } else {
             found2:
@@ -1760,8 +1760,8 @@ static void compute_stereo(MPADecodeContext *s,
                     for(j=0;j<len;j++) {
                         tmp0 = tab0[j];
                         tmp1 = tab1[j];
-                        tab0[j] = MULL(tmp0 + tmp1, ISQRT2, FRAC_BITS);
-                        tab1[j] = MULL(tmp0 - tmp1, ISQRT2, FRAC_BITS);
+                        tab0[j] = MULL(tmp0 + tmp1, ISQRT2);
+                        tab1[j] = MULL(tmp0 - tmp1, ISQRT2);
                     }
                 }
             }
diff --git a/libavcodec/mpegvideo.c b/libavcodec/mpegvideo.c
index 43a6e85..4bc32a2 100644
--- a/libavcodec/mpegvideo.c
+++ b/libavcodec/mpegvideo.c
@@ -54,9 +54,9 @@ static void dct_unquantize_h263_intra_c(MpegEncContext *s,
 static void dct_unquantize_h263_inter_c(MpegEncContext *s,
                                   DCTELEM *block, int n, int qscale);
 
-int  XVMC_field_start(MpegEncContext*s, AVCodecContext *avctx);
-void XVMC_field_end(MpegEncContext *s);
-void XVMC_decode_mb(MpegEncContext *s);
+extern int  XVMC_field_start(MpegEncContext*s, AVCodecContext *avctx);
+extern void XVMC_field_end(MpegEncContext *s);
+extern void XVMC_decode_mb(MpegEncContext *s);
 
 
 /* enable all paranoid tests for rounding, overflows, etc... */
@@ -129,8 +129,8 @@ int ff_dct_common_init(MpegEncContext *s)
     MPV_common_init_mlib(s);
 #elif defined(HAVE_MMI)
     MPV_common_init_mmi(s);
-#elif defined(ARCH_ARM)
-    MPV_common_init_arm(s);
+#elif defined(ARCH_ARMV4L)
+    MPV_common_init_armv4l(s);
 #elif defined(HAVE_ALTIVEC)
     MPV_common_init_altivec(s);
 #elif defined(ARCH_BFIN)
@@ -289,7 +289,6 @@ static int init_duplicate_context(MpegEncContext *s, MpegEncContext *base){
 
      //FIXME should be linesize instead of s->width*2 but that is not known before get_buffer()
     CHECKED_ALLOCZ(s->me.scratchpad,  (s->width+64)*4*16*2*sizeof(uint8_t))
-    s->me.temp=         s->me.scratchpad;
     s->rd_scratchpad=   s->me.scratchpad;
     s->b_scratchpad=    s->me.scratchpad;
     s->obmc_scratchpad= s->me.scratchpad + 16;
@@ -316,7 +315,6 @@ static void free_duplicate_context(MpegEncContext *s){
 
     av_freep(&s->allocated_edge_emu_buffer); s->edge_emu_buffer= NULL;
     av_freep(&s->me.scratchpad);
-    s->me.temp=
     s->rd_scratchpad=
     s->b_scratchpad=
     s->obmc_scratchpad= NULL;
@@ -333,7 +331,6 @@ static void backup_duplicate_context(MpegEncContext *bak, MpegEncContext *src){
     COPY(allocated_edge_emu_buffer);
     COPY(edge_emu_buffer);
     COPY(me.scratchpad);
-    COPY(me.temp);
     COPY(rd_scratchpad);
     COPY(b_scratchpad);
     COPY(obmc_scratchpad);
@@ -939,7 +936,7 @@ alloc:
         update_noise_reduction(s);
     }
 
-#ifdef CONFIG_XVMC
+#ifdef HAVE_XVMC
     if(s->avctx->xvmc_acceleration)
         return XVMC_field_start(s, avctx);
 #endif
@@ -951,17 +948,13 @@ void MPV_frame_end(MpegEncContext *s)
 {
     int i;
     /* draw edge for correct motion prediction if outside */
-#ifdef CONFIG_XVMC
+#ifdef HAVE_XVMC
 //just to make sure that all data is rendered.
     if(s->avctx->xvmc_acceleration){
         XVMC_field_end(s);
     }else
 #endif
-    if(!(s->avctx->codec->capabilities&CODEC_CAP_HWACCEL_VDPAU)
-       && s->unrestricted_mv
-       && s->current_picture.reference
-       && !s->intra_only
-       && !(s->flags&CODEC_FLAG_EMU_EDGE)) {
+    if(s->unrestricted_mv && s->current_picture.reference && !s->intra_only && !(s->flags&CODEC_FLAG_EMU_EDGE)) {
             s->dsp.draw_edges(s->current_picture.data[0], s->linesize  , s->h_edge_pos   , s->v_edge_pos   , EDGE_WIDTH  );
             s->dsp.draw_edges(s->current_picture.data[1], s->uvlinesize, s->h_edge_pos>>1, s->v_edge_pos>>1, EDGE_WIDTH/2);
             s->dsp.draw_edges(s->current_picture.data[2], s->uvlinesize, s->h_edge_pos>>1, s->v_edge_pos>>1, EDGE_WIDTH/2);
@@ -1736,7 +1729,7 @@ void MPV_decode_mb_internal(MpegEncContext *s, DCTELEM block[12][64],
 {
     int mb_x, mb_y;
     const int mb_xy = s->mb_y * s->mb_stride + s->mb_x;
-#ifdef CONFIG_XVMC
+#ifdef HAVE_XVMC
     if(s->avctx->xvmc_acceleration){
         XVMC_decode_mb(s);//xvmc uses pblocks
         return;
diff --git a/libavcodec/mpegvideo.h b/libavcodec/mpegvideo.h
index da08bb6..4ddd30c 100644
--- a/libavcodec/mpegvideo.h
+++ b/libavcodec/mpegvideo.h
@@ -546,9 +546,6 @@ typedef struct MpegEncContext {
     int mpeg_quant;
     int t_frame;                       ///< time distance of first I -> B, used for interlaced b frames
     int padding_bug_score;             ///< used to detect the VERY common padding bug in MPEG4
-    int cplx_estimation_trash_i;
-    int cplx_estimation_trash_p;
-    int cplx_estimation_trash_b;
 
     /* divx specific, used to workaround (many) bugs in divx5 */
     int divx_version;
@@ -684,7 +681,7 @@ void MPV_common_init_mmx(MpegEncContext *s);
 void MPV_common_init_axp(MpegEncContext *s);
 void MPV_common_init_mlib(MpegEncContext *s);
 void MPV_common_init_mmi(MpegEncContext *s);
-void MPV_common_init_arm(MpegEncContext *s);
+void MPV_common_init_armv4l(MpegEncContext *s);
 void MPV_common_init_altivec(MpegEncContext *s);
 void ff_clean_intra_table_entries(MpegEncContext *s);
 void ff_draw_horiz_band(MpegEncContext *s, int y, int h);
diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c
index 72af47a..b3225b8 100644
--- a/libavcodec/mpegvideo_enc.c
+++ b/libavcodec/mpegvideo_enc.c
@@ -35,7 +35,6 @@
 #include "msmpeg4.h"
 #include "h263.h"
 #include "faandct.h"
-#include "aandcttab.h"
 #include <limits.h>
 
 //#undef NDEBUG
@@ -50,6 +49,29 @@ static int sse_mb(MpegEncContext *s);
 
 //#define DEBUG
 
+static const uint16_t aanscales[64] = {
+    /* precomputed values scaled up by 14 bits */
+    16384, 22725, 21407, 19266, 16384, 12873,  8867,  4520,
+    22725, 31521, 29692, 26722, 22725, 17855, 12299,  6270,
+    21407, 29692, 27969, 25172, 21407, 16819, 11585,  5906,
+    19266, 26722, 25172, 22654, 19266, 15137, 10426,  5315,
+    16384, 22725, 21407, 19266, 16384, 12873,  8867,  4520,
+    12873, 17855, 16819, 15137, 12873, 10114,  6967,  3552,
+    8867 , 12299, 11585, 10426,  8867,  6967,  4799,  2446,
+    4520 ,  6270,  5906,  5315,  4520,  3552,  2446,  1247
+};
+
+static const uint16_t inv_aanscales[64] = {
+  4096,  2953,  3135,  3483,  4096,  5213,  7568, 14846,
+  2953,  2129,  2260,  2511,  2953,  3759,  5457, 10703,
+  3135,  2260,  2399,  2666,  3135,  3990,  5793, 11363,
+  3483,  2511,  2666,  2962,  3483,  4433,  6436, 12625,
+  4096,  2953,  3135,  3483,  4096,  5213,  7568, 14846,
+  5213,  3759,  3990,  4433,  5213,  6635,  9633, 18895,
+  7568,  5457,  5793,  6436,  7568,  9633, 13985, 27432,
+ 14846, 10703, 11363, 12625, 14846, 18895, 27432, 53809,
+};
+
 static uint8_t default_mv_penalty[MAX_FCODE+1][MAX_MV*2+1];
 static uint8_t default_fcode_tab[MAX_MV*2+1];
 
@@ -69,9 +91,9 @@ void ff_convert_matrix(DSPContext *dsp, int (*qmat)[64], uint16_t (*qmat16)[2][6
             for(i=0;i<64;i++) {
                 const int j= dsp->idct_permutation[i];
                 /* 16 <= qscale * quant_matrix[i] <= 7905 */
-                /* 19952             <= ff_aanscales[i] * qscale * quant_matrix[i]               <= 249205026 */
-                /* (1 << 36) / 19952 >= (1 << 36) / (ff_aanscales[i] * qscale * quant_matrix[i]) >= (1 << 36) / 249205026 */
-                /* 3444240           >= (1 << 36) / (ff_aanscales[i] * qscale * quant_matrix[i]) >= 275 */
+                /* 19952         <= aanscales[i] * qscale * quant_matrix[i]           <= 249205026 */
+                /* (1<<36)/19952 >= (1<<36)/(aanscales[i] * qscale * quant_matrix[i]) >= (1<<36)/249205026 */
+                /* 3444240       >= (1<<36)/(aanscales[i] * qscale * quant_matrix[i]) >= 275 */
 
                 qmat[qscale][i] = (int)((UINT64_C(1) << QMAT_SHIFT) /
                                 (qscale * quant_matrix[j]));
@@ -84,12 +106,12 @@ void ff_convert_matrix(DSPContext *dsp, int (*qmat)[64], uint16_t (*qmat16)[2][6
             for(i=0;i<64;i++) {
                 const int j= dsp->idct_permutation[i];
                 /* 16 <= qscale * quant_matrix[i] <= 7905 */
-                /* 19952             <= ff_aanscales[i] * qscale * quant_matrix[i]               <= 249205026 */
-                /* (1 << 36) / 19952 >= (1 << 36) / (ff_aanscales[i] * qscale * quant_matrix[i]) >= (1<<36)/249205026 */
-                /* 3444240           >= (1 << 36) / (ff_aanscales[i] * qscale * quant_matrix[i]) >= 275 */
+                /* 19952         <= aanscales[i] * qscale * quant_matrix[i]           <= 249205026 */
+                /* (1<<36)/19952 >= (1<<36)/(aanscales[i] * qscale * quant_matrix[i]) >= (1<<36)/249205026 */
+                /* 3444240       >= (1<<36)/(aanscales[i] * qscale * quant_matrix[i]) >= 275 */
 
                 qmat[qscale][i] = (int)((UINT64_C(1) << (QMAT_SHIFT + 14)) /
-                                (ff_aanscales[i] * qscale * quant_matrix[j]));
+                                (aanscales[i] * qscale * quant_matrix[j]));
             }
         } else {
             for(i=0;i<64;i++) {
@@ -115,7 +137,7 @@ void ff_convert_matrix(DSPContext *dsp, int (*qmat)[64], uint16_t (*qmat16)[2][6
                    || dsp->fdct == ff_faandct
 #endif
                    ) {
-                max = (8191LL*ff_aanscales[i]) >> 14;
+                max= (8191LL*aanscales[i]) >> 14;
             }
             while(((max * qmat[qscale][i]) >> shift) > INT_MAX){
                 shift++;
@@ -1231,7 +1253,7 @@ vbv_retry:
 
         if(avctx->rc_buffer_size){
             RateControlContext *rcc= &s->rc_context;
-            int max_size= rcc->buffer_index * avctx->rc_max_available_vbv_use;
+            int max_size= rcc->buffer_index/3;
 
             if(put_bits_count(&s->pb) > max_size && s->lambda < s->avctx->lmax){
                 s->next_lambda= FFMAX(s->lambda+1, s->lambda*(s->qscale+1) / s->qscale);
@@ -1895,7 +1917,7 @@ static int sse_mb(MpegEncContext *s){
 }
 
 static int pre_estimate_motion_thread(AVCodecContext *c, void *arg){
-    MpegEncContext *s= *(void**)arg;
+    MpegEncContext *s= arg;
 
 
     s->me.pre_pass=1;
@@ -1914,7 +1936,7 @@ static int pre_estimate_motion_thread(AVCodecContext *c, void *arg){
 }
 
 static int estimate_motion_thread(AVCodecContext *c, void *arg){
-    MpegEncContext *s= *(void**)arg;
+    MpegEncContext *s= arg;
 
     ff_check_alignment();
 
@@ -1941,7 +1963,7 @@ static int estimate_motion_thread(AVCodecContext *c, void *arg){
 }
 
 static int mb_var_thread(AVCodecContext *c, void *arg){
-    MpegEncContext *s= *(void**)arg;
+    MpegEncContext *s= arg;
     int mb_x, mb_y;
 
     ff_check_alignment();
@@ -1983,7 +2005,7 @@ static void write_slice_end(MpegEncContext *s){
 }
 
 static int encode_thread(AVCodecContext *c, void *arg){
-    MpegEncContext *s= *(void**)arg;
+    MpegEncContext *s= arg;
     int mb_x, mb_y, pdif = 0;
     int chr_h= 16>>s->chroma_y_shift;
     int i, j;
@@ -2757,11 +2779,11 @@ static int encode_picture(MpegEncContext *s, int picture_number)
         s->lambda2= (s->lambda2* (int64_t)s->avctx->me_penalty_compensation + 128)>>8;
         if(s->pict_type != FF_B_TYPE && s->avctx->me_threshold==0){
             if((s->avctx->pre_me && s->last_non_b_pict_type==FF_I_TYPE) || s->avctx->pre_me==2){
-                s->avctx->execute(s->avctx, pre_estimate_motion_thread, (void**)&(s->thread_context[0]), NULL, s->avctx->thread_count, sizeof(void*));
+                s->avctx->execute(s->avctx, pre_estimate_motion_thread, (void**)&(s->thread_context[0]), NULL, s->avctx->thread_count);
             }
         }
 
-        s->avctx->execute(s->avctx, estimate_motion_thread, (void**)&(s->thread_context[0]), NULL, s->avctx->thread_count, sizeof(void*));
+        s->avctx->execute(s->avctx, estimate_motion_thread, (void**)&(s->thread_context[0]), NULL, s->avctx->thread_count);
     }else /* if(s->pict_type == FF_I_TYPE) */{
         /* I-Frame */
         for(i=0; i<s->mb_stride*s->mb_height; i++)
@@ -2769,7 +2791,7 @@ static int encode_picture(MpegEncContext *s, int picture_number)
 
         if(!s->fixed_qscale){
             /* finding spatial complexity for I-frame rate control */
-            s->avctx->execute(s->avctx, mb_var_thread, (void**)&(s->thread_context[0]), NULL, s->avctx->thread_count, sizeof(void*));
+            s->avctx->execute(s->avctx, mb_var_thread, (void**)&(s->thread_context[0]), NULL, s->avctx->thread_count);
         }
     }
     for(i=1; i<s->avctx->thread_count; i++){
@@ -2909,7 +2931,7 @@ static int encode_picture(MpegEncContext *s, int picture_number)
     for(i=1; i<s->avctx->thread_count; i++){
         update_duplicate_context_after_me(s->thread_context[i], s);
     }
-    s->avctx->execute(s->avctx, encode_thread, (void**)&(s->thread_context[0]), NULL, s->avctx->thread_count, sizeof(void*));
+    s->avctx->execute(s->avctx, encode_thread, (void**)&(s->thread_context[0]), NULL, s->avctx->thread_count);
     for(i=1; i<s->avctx->thread_count; i++){
         merge_context_after_encode(s, s->thread_context[i]);
     }
@@ -3067,7 +3089,7 @@ int dct_quantize_trellis_c(MpegEncContext *s,
             || s->dsp.fdct == ff_faandct
 #endif
            )
-            dct_coeff= (dct_coeff*ff_inv_aanscales[ scantable[i] ]) >> 12;
+            dct_coeff= (dct_coeff*inv_aanscales[ scantable[i] ]) >> 12;
         zero_distortion= dct_coeff*dct_coeff;
 
         for(level_index=0; level_index < coeff_count[i]; level_index++){
diff --git a/libavcodec/msmpeg4.h b/libavcodec/msmpeg4.h
index 1442959..3226015 100644
--- a/libavcodec/msmpeg4.h
+++ b/libavcodec/msmpeg4.h
@@ -52,9 +52,7 @@ int ff_wmv2_decode_mb(MpegEncContext *s, DCTELEM block[6][64]);
 #define ENABLE_MSMPEG4_DECODER (ENABLE_MSMPEG4V1_DECODER || \
                                 ENABLE_MSMPEG4V2_DECODER || \
                                 ENABLE_MSMPEG4V3_DECODER || \
-                                ENABLE_WMV2_DECODER      || \
-                                ENABLE_VC1_DECODER       || \
-                                ENABLE_WMV3_DECODER)
+                                ENABLE_WMV2_DECODER)
 #define ENABLE_MSMPEG4_ENCODER (ENABLE_MSMPEG4V1_ENCODER || \
                                 ENABLE_MSMPEG4V2_ENCODER || \
                                 ENABLE_MSMPEG4V3_ENCODER || \
diff --git a/libavcodec/msmpeg4data.c b/libavcodec/msmpeg4data.c
index 07d11f7..da899b5 100644
--- a/libavcodec/msmpeg4data.c
+++ b/libavcodec/msmpeg4data.c
@@ -35,22 +35,22 @@ VLC ff_msmp4_dc_chroma_vlc[2];
 
 /* intra picture macroblock coded block pattern */
 const uint16_t ff_msmp4_mb_i_table[64][2] = {
-{  0x1, 1 },{  0x17,  6 },{   0x9,  5 },{   0x5,  5 },
-{  0x6, 5 },{  0x47,  9 },{  0x20,  7 },{  0x10,  7 },
-{  0x2, 5 },{  0x7c,  9 },{  0x3a,  7 },{  0x1d,  7 },
-{  0x2, 6 },{  0xec,  9 },{  0x77,  8 },{   0x0,  8 },
-{  0x3, 5 },{  0xb7,  9 },{  0x2c,  7 },{  0x13,  7 },
-{  0x1, 6 },{ 0x168, 10 },{  0x46,  8 },{  0x3f,  8 },
-{ 0x1e, 6 },{ 0x712, 13 },{  0xb5,  9 },{  0x42,  8 },
-{ 0x22, 7 },{ 0x1c5, 11 },{ 0x11e, 10 },{  0x87,  9 },
-{  0x6, 4 },{   0x3,  9 },{  0x1e,  7 },{  0x1c,  6 },
-{ 0x12, 7 },{ 0x388, 12 },{  0x44,  9 },{  0x70,  9 },
-{ 0x1f, 6 },{ 0x23e, 11 },{  0x39,  8 },{  0x8e,  9 },
-{  0x1, 7 },{ 0x1c6, 11 },{  0xb6,  9 },{  0x45,  9 },
-{ 0x14, 6 },{ 0x23f, 11 },{  0x7d,  9 },{  0x18,  9 },
-{  0x7, 7 },{ 0x1c7, 11 },{  0x86,  9 },{  0x19,  9 },
-{ 0x15, 6 },{ 0x1db, 10 },{   0x2,  9 },{  0x46,  9 },
-{  0xd, 8 },{ 0x713, 13 },{ 0x1da, 10 },{ 0x169, 10 },
+{ 0x1, 1 },{ 0x17, 6 },{ 0x9, 5 },{ 0x5, 5 },
+{ 0x6, 5 },{ 0x47, 9 },{ 0x20, 7 },{ 0x10, 7 },
+{ 0x2, 5 },{ 0x7c, 9 },{ 0x3a, 7 },{ 0x1d, 7 },
+{ 0x2, 6 },{ 0xec, 9 },{ 0x77, 8 },{ 0x0, 8 },
+{ 0x3, 5 },{ 0xb7, 9 },{ 0x2c, 7 },{ 0x13, 7 },
+{ 0x1, 6 },{ 0x168, 10 },{ 0x46, 8 },{ 0x3f, 8 },
+{ 0x1e, 6 },{ 0x712, 13 },{ 0xb5, 9 },{ 0x42, 8 },
+{ 0x22, 7 },{ 0x1c5, 11 },{ 0x11e, 10 },{ 0x87, 9 },
+{ 0x6, 4 },{ 0x3, 9 },{ 0x1e, 7 },{ 0x1c, 6 },
+{ 0x12, 7 },{ 0x388, 12 },{ 0x44, 9 },{ 0x70, 9 },
+{ 0x1f, 6 },{ 0x23e, 11 },{ 0x39, 8 },{ 0x8e, 9 },
+{ 0x1, 7 },{ 0x1c6, 11 },{ 0xb6, 9 },{ 0x45, 9 },
+{ 0x14, 6 },{ 0x23f, 11 },{ 0x7d, 9 },{ 0x18, 9 },
+{ 0x7, 7 },{ 0x1c7, 11 },{ 0x86, 9 },{ 0x19, 9 },
+{ 0x15, 6 },{ 0x1db, 10 },{ 0x2, 9 },{ 0x46, 9 },
+{ 0xd, 8 },{ 0x713, 13 },{ 0x1da, 10 },{ 0x169, 10 },
 };
 
 /* non intra picture macroblock coded block pattern + mb type */
diff --git a/libavcodec/msrledec.c b/libavcodec/msrledec.c
index 7d09ed9..f44b8b6 100644
--- a/libavcodec/msrledec.c
+++ b/libavcodec/msrledec.c
@@ -145,10 +145,8 @@ static int msrle_decode_8_16_24_32(AVCodecContext *avctx, AVPicture *pic, int de
             p2 = *src++;
             if(p2 == 0) { //End-of-line
                 output = pic->data[0] + (--line) * pic->linesize[0];
-                if (line < 0){
-                    av_log(avctx, AV_LOG_ERROR, "Next line is beyond picture bounds\n");
+                if (line < 0)
                     return -1;
-                }
                 pos = 0;
                 continue;
             } else if(p2 == 1) { //End-of-picture
@@ -157,10 +155,8 @@ static int msrle_decode_8_16_24_32(AVCodecContext *avctx, AVPicture *pic, int de
                 p1 = *src++;
                 p2 = *src++;
                 line -= p2;
-                if (line < 0){
-                    av_log(avctx, AV_LOG_ERROR, "Skip beyond picture bounds\n");
+                if (line < 0)
                     return -1;
-                }
                 pos += p1;
                 output = pic->data[0] + line * pic->linesize[0] + pos * (depth >> 3);
                 continue;
@@ -195,12 +191,13 @@ static int msrle_decode_8_16_24_32(AVCodecContext *avctx, AVPicture *pic, int de
             }
             pos += p2;
         } else { //Run of pixels
-            uint8_t pix[3]; //original pixel
+            int pix[4]; //original pixel
             switch(depth){
             case  8: pix[0] = *src++;
                      break;
             case 16: pix16 = AV_RL16(src);
                      src += 2;
+                     *(uint16_t*)pix = pix16;
                      break;
             case 24: pix[0] = *src++;
                      pix[1] = *src++;
@@ -208,6 +205,7 @@ static int msrle_decode_8_16_24_32(AVCodecContext *avctx, AVPicture *pic, int de
                      break;
             case 32: pix32 = AV_RL32(src);
                      src += 4;
+                     *(uint32_t*)pix = pix32;
                      break;
             }
             if (output + p1 * (depth >> 3) > output_end)
diff --git a/libavcodec/nellymoserdec.c b/libavcodec/nellymoserdec.c
index dfbb41c..f2a413e 100644
--- a/libavcodec/nellymoserdec.c
+++ b/libavcodec/nellymoserdec.c
@@ -148,7 +148,6 @@ static av_cold int decode_init(AVCodecContext * avctx) {
         ff_sine_window_init(sine_window, 128);
 
     avctx->sample_fmt = SAMPLE_FMT_S16;
-    avctx->channel_layout = CH_LAYOUT_MONO;
     return 0;
 }
 
diff --git a/libavcodec/nellymoserenc.c b/libavcodec/nellymoserenc.c
index 13fe64d..03db30c 100644
--- a/libavcodec/nellymoserenc.c
+++ b/libavcodec/nellymoserenc.c
@@ -28,7 +28,7 @@
  *
  * Generic codec information: libavcodec/nellymoserdec.c
  *
- * Some information also from: http://samples.mplayerhq.hu/A-codecs/Nelly_Moser/ASAO/ASAO.zip
+ * Some information also from: http://www1.mplayerhq.hu/ASAO/ASAO.zip
  *                             (Copyright Joseph Artsimovich and UAB "DKD")
  *
  * for more information about nellymoser format, visit:
diff --git a/libavcodec/opt.c b/libavcodec/opt.c
index 78fbfae..acf94ba 100644
--- a/libavcodec/opt.c
+++ b/libavcodec/opt.c
@@ -47,17 +47,15 @@ const AVOption *av_next_option(void *obj, const AVOption *last){
     else                     return (*(AVClass**)obj)->option;
 }
 
-static int av_set_number2(void *obj, const char *name, double num, int den, int64_t intnum, const AVOption **o_out){
+static const AVOption *av_set_number(void *obj, const char *name, double num, int den, int64_t intnum){
     const AVOption *o= av_find_opt(obj, name, NULL, 0, 0);
     void *dst;
-    if(o_out)
-        *o_out= o;
     if(!o || o->offset<=0)
-        return AVERROR(ENOENT);
+        return NULL;
 
     if(o->max*den < num*intnum || o->min*den > num*intnum) {
-        av_log(NULL, AV_LOG_ERROR, "Value %lf for parameter '%s' out of range\n", num, name);
-        return AVERROR(ERANGE);
+        av_log(NULL, AV_LOG_ERROR, "Value %lf for parameter '%s' out of range.\n", num, name);
+        return NULL;
     }
 
     dst= ((uint8_t*)obj) + o->offset;
@@ -73,17 +71,27 @@ static int av_set_number2(void *obj, const char *name, double num, int den, int6
         else                *(AVRational*)dst= av_d2q(num*intnum/den, 1<<24);
         break;
     default:
-        return AVERROR(EINVAL);
+        return NULL;
     }
-    return 0;
+    return o;
 }
 
-static const AVOption *av_set_number(void *obj, const char *name, double num, int den, int64_t intnum){
-    const AVOption *o = NULL;
-    if (av_set_number2(obj, name, num, den, intnum, &o) < 0)
-        return NULL;
-    else
-        return o;
+static const AVOption *set_all_opt(void *v, const char *unit, double d){
+    AVClass *c= *(AVClass**)v; //FIXME silly way of storing AVClass
+    const AVOption *o= c->option;
+    const AVOption *ret=NULL;
+
+    for(;o && o->name; o++){
+        if(o->type != FF_OPT_TYPE_CONST && o->unit && !strcmp(o->unit, unit)){
+            double tmp= d;
+            if(o->type == FF_OPT_TYPE_FLAGS)
+                tmp= av_get_int(v, o->name, NULL) | (int64_t)d;
+
+            av_set_number(v, o->name, tmp, 1, 1);
+            ret= o;
+        }
+    }
+    return ret;
 }
 
 static const double const_values[]={
@@ -107,16 +115,13 @@ static int hexchar2int(char c) {
     return -1;
 }
 
-int av_set_string3(void *obj, const char *name, const char *val, int alloc, const AVOption **o_out){
-    int ret;
+const AVOption *av_set_string2(void *obj, const char *name, const char *val, int alloc){
     const AVOption *o= av_find_opt(obj, name, NULL, 0, 0);
-    if (o_out)
-        *o_out = o;
-    if(!o)
-        return AVERROR(ENOENT);
-    if(!val || o->offset<=0)
-        return AVERROR(EINVAL);
-
+    if(o && o->offset==0 && o->type == FF_OPT_TYPE_CONST && o->unit){
+        return set_all_opt(obj, o->unit, o->default_val);
+    }
+    if(!o || !val || o->offset<=0)
+        return NULL;
     if(o->type == FF_OPT_TYPE_BINARY){
         uint8_t **dst = (uint8_t **)(((uint8_t*)obj) + o->offset);
         int *lendst = (int *)(dst + 1);
@@ -124,7 +129,7 @@ int av_set_string3(void *obj, const char *name, const char *val, int alloc, cons
         int len = strlen(val);
         av_freep(dst);
         *lendst = 0;
-        if (len & 1) return AVERROR(EINVAL);
+        if (len & 1) return NULL;
         len /= 2;
         ptr = bin = av_malloc(len);
         while (*val) {
@@ -132,13 +137,13 @@ int av_set_string3(void *obj, const char *name, const char *val, int alloc, cons
             int b = hexchar2int(*val++);
             if (a < 0 || b < 0) {
                 av_free(bin);
-                return AVERROR(EINVAL);
+                return NULL;
             }
             *ptr++ = (a << 4) | b;
         }
         *dst = bin;
         *lendst = len;
-        return 0;
+        return o;
     }
     if(o->type != FF_OPT_TYPE_STRING){
         int notfirst=0;
@@ -169,7 +174,7 @@ int av_set_string3(void *obj, const char *name, const char *val, int alloc, cons
                 else {
                     if (error)
                         av_log(NULL, AV_LOG_ERROR, "Unable to parse option value \"%s\": %s\n", val, error);
-                    return AVERROR(EINVAL);
+                    return NULL;
                 }
             }
             if(o->type == FF_OPT_TYPE_FLAGS){
@@ -180,14 +185,14 @@ int av_set_string3(void *obj, const char *name, const char *val, int alloc, cons
                 else if(cmd=='-') d= notfirst*av_get_double(obj, name, NULL) - d;
             }
 
-            if ((ret = av_set_number2(obj, name, d, 1, 1, o_out)) < 0)
-                return ret;
+            if (!av_set_number(obj, name, d, 1, 1))
+                return NULL;
             val+= i;
             if(!*val)
-                return 0;
+                return o;
             notfirst=1;
         }
-        return AVERROR(EINVAL);
+        return NULL;
     }
 
     if(alloc){
@@ -196,24 +201,12 @@ int av_set_string3(void *obj, const char *name, const char *val, int alloc, cons
     }
 
     memcpy(((uint8_t*)obj) + o->offset, &val, sizeof(val));
-    return 0;
-}
-
-#if LIBAVCODEC_VERSION_MAJOR < 53
-const AVOption *av_set_string2(void *obj, const char *name, const char *val, int alloc){
-    const AVOption *o;
-    if (av_set_string3(obj, name, val, alloc, &o) < 0)
-        return NULL;
     return o;
 }
 
 const AVOption *av_set_string(void *obj, const char *name, const char *val){
-    const AVOption *o;
-    if (av_set_string3(obj, name, val, 0, &o) < 0)
-        return NULL;
-    return o;
+    return av_set_string2(obj, name, val, 0);
 }
-#endif
 
 const AVOption *av_set_double(void *obj, const char *name, double n){
     return av_set_number(obj, name, n, 1, 1);
@@ -422,11 +415,6 @@ void av_opt_set_defaults2(void *s, int mask, int flags)
                 av_set_int(s, opt->name, val);
             }
             break;
-            case FF_OPT_TYPE_INT64:
-                if((double)(opt->default_val+0.6) == opt->default_val)
-                    av_log(s, AV_LOG_DEBUG, "loss of precission in default of %s\n", opt->name);
-                av_set_int(s, opt->name, opt->default_val);
-            break;
             case FF_OPT_TYPE_FLOAT: {
                 double val;
                 val = opt->default_val;
diff --git a/libavcodec/opt.h b/libavcodec/opt.h
index c968930..557c430 100644
--- a/libavcodec/opt.h
+++ b/libavcodec/opt.h
@@ -91,7 +91,7 @@ typedef struct AVOption {
  * for which it is the case that opt->flags & mask == flags).
  *
  * @param[in] obj a pointer to a struct whose first element is a
- * pointer to an AVClass
+ * pointer to an #AVClass
  * @param[in] name the name of the option to look for
  * @param[in] unit the unit of the option to look for, or any if NULL
  * @return a pointer to the option found, or NULL if no option
@@ -99,22 +99,12 @@ typedef struct AVOption {
  */
 const AVOption *av_find_opt(void *obj, const char *name, const char *unit, int mask, int flags);
 
-#if LIBAVCODEC_VERSION_MAJOR < 53
 /**
  * @see av_set_string2()
  */
 attribute_deprecated const AVOption *av_set_string(void *obj, const char *name, const char *val);
 
 /**
- * @return a pointer to the AVOption corresponding to the field set or
- * NULL if no matching AVOption exists, or if the value \p val is not
- * valid
- * @see av_set_string3()
- */
-attribute_deprecated const AVOption *av_set_string2(void *obj, const char *name, const char *val, int alloc);
-#endif
-
-/**
  * Sets the field of obj with the given name to value.
  *
  * @param[in] obj A struct whose first element is a pointer to an
@@ -130,15 +120,14 @@ attribute_deprecated const AVOption *av_set_string2(void *obj, const char *name,
  * scalars or named flags separated by '+' or '-'. Prefixing a flag
  * with '+' causes it to be set without affecting the other flags;
  * similarly, '-' unsets a flag.
- * @param[out] o_out if non-NULL put here a pointer to the AVOption
- * found
+ * @return a pointer to the AVOption corresponding to the field set or
+ * NULL if no matching AVOption exists, or if the value \p val is not
+ * valid
  * @param alloc when 1 then the old value will be av_freed() and the
  *                     new av_strduped()
  *              when 0 then no av_free() nor av_strdup() will be used
- * @return 0 if the value has been set, an AVERROR* error code if no
- * matching option exists, or if the value \p val is not valid
  */
-int av_set_string3(void *obj, const char *name, const char *val, int alloc, const AVOption **o_out);
+const AVOption *av_set_string2(void *obj, const char *name, const char *val, int alloc);
 
 const AVOption *av_set_double(void *obj, const char *name, double n);
 const AVOption *av_set_q(void *obj, const char *name, AVRational n);
diff --git a/libavcodec/os2thread.c b/libavcodec/os2thread.c
index edebc9a..583f255 100644
--- a/libavcodec/os2thread.c
+++ b/libavcodec/os2thread.c
@@ -81,7 +81,7 @@ void avcodec_thread_free(AVCodecContext *s){
     av_freep(&s->thread_opaque);
 }
 
-int avcodec_thread_execute(AVCodecContext *s, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size){
+int avcodec_thread_execute(AVCodecContext *s, int (*func)(AVCodecContext *c2, void *arg2),void **arg, int *ret, int count){
     ThreadContext *c= s->thread_opaque;
     int i;
 
@@ -92,7 +92,7 @@ int avcodec_thread_execute(AVCodecContext *s, int (*func)(AVCodecContext *c2, vo
 
     for(i=0; i<count; i++){
 
-        c[i].arg= (char*)arg + i*size;
+        c[i].arg= arg[i];
         c[i].func= func;
         c[i].ret= 12345;
 
diff --git a/libavcodec/png.h b/libavcodec/png.h
index 17b1466..0fde3f4 100644
--- a/libavcodec/png.h
+++ b/libavcodec/png.h
@@ -64,13 +64,14 @@ extern const uint8_t ff_png_pass_xshift[NB_PASSES];
 /* Mask to determine which pixels are valid in a pass */
 extern const uint8_t ff_png_pass_mask[NB_PASSES];
 
-void *ff_png_zalloc(void *opaque, unsigned int items, unsigned int size);
+extern void *ff_png_zalloc(void *opaque, unsigned int items,
+                           unsigned int size);
 
-void ff_png_zfree(void *opaque, void *ptr);
+extern void ff_png_zfree(void *opaque, void *ptr);
 
-int ff_png_get_nb_channels(int color_type);
+extern int ff_png_get_nb_channels(int color_type);
 
 /* compute the row size of an interleaved pass */
-int ff_png_pass_row_size(int pass, int bits_per_pixel, int width);
+extern int ff_png_pass_row_size(int pass, int bits_per_pixel, int width);
 
 #endif /* AVCODEC_PNG_H */
diff --git a/libavcodec/ppc/dsputil_altivec.c b/libavcodec/ppc/dsputil_altivec.c
index 44cce6a..6ff219e 100644
--- a/libavcodec/ppc/dsputil_altivec.c
+++ b/libavcodec/ppc/dsputil_altivec.c
@@ -26,7 +26,6 @@
 
 #include "dsputil_ppc.h"
 #include "util_altivec.h"
-#include "types_altivec.h"
 
 int sad16_x2_altivec(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h)
 {
@@ -574,20 +573,6 @@ void diff_pixels_altivec(DCTELEM *restrict block, const uint8_t *s1,
     }
 }
 
-
-static void clear_block_altivec(DCTELEM *block) {
-    LOAD_ZERO;
-    vec_st(zero_s16v,   0, block);
-    vec_st(zero_s16v,  16, block);
-    vec_st(zero_s16v,  32, block);
-    vec_st(zero_s16v,  48, block);
-    vec_st(zero_s16v,  64, block);
-    vec_st(zero_s16v,  80, block);
-    vec_st(zero_s16v,  96, block);
-    vec_st(zero_s16v, 112, block);
-}
-
-
 void add_bytes_altivec(uint8_t *dst, uint8_t *src, int w) {
     register int i;
     register vector unsigned char vdst, vsrc;
@@ -1435,7 +1420,6 @@ void dsputil_init_altivec(DSPContext* c, AVCodecContext *avctx)
     c->pix_sum = pix_sum_altivec;
     c->diff_pixels = diff_pixels_altivec;
     c->get_pixels = get_pixels_altivec;
-    c->clear_block = clear_block_altivec;
     c->add_bytes= add_bytes_altivec;
     c->put_pixels_tab[0][0] = put_pixels16_altivec;
     /* the two functions do the same thing, so use the same code */
diff --git a/libavcodec/ppc/dsputil_altivec.h b/libavcodec/ppc/dsputil_altivec.h
index 03ff0b9..63f817a 100644
--- a/libavcodec/ppc/dsputil_altivec.h
+++ b/libavcodec/ppc/dsputil_altivec.h
@@ -25,7 +25,7 @@
 
 #include <stdint.h>
 
-int has_altivec(void);
+extern int has_altivec(void);
 
 void put_pixels16_altivec(uint8_t *block, const uint8_t *pixels, int line_size, int h);
 
diff --git a/libavcodec/ppc/dsputil_ppc.c b/libavcodec/ppc/dsputil_ppc.c
index 124453e..443e1db 100644
--- a/libavcodec/ppc/dsputil_ppc.c
+++ b/libavcodec/ppc/dsputil_ppc.c
@@ -27,11 +27,11 @@
 #ifdef HAVE_ALTIVEC
 #include "dsputil_altivec.h"
 
-void fdct_altivec(int16_t *block);
-void gmc1_altivec(uint8_t *dst, uint8_t *src, int stride, int h,
-                  int x16, int y16, int rounder);
-void idct_put_altivec(uint8_t *dest, int line_size, int16_t *block);
-void idct_add_altivec(uint8_t *dest, int line_size, int16_t *block);
+extern void fdct_altivec(int16_t *block);
+extern void gmc1_altivec(uint8_t *dst, uint8_t *src, int stride, int h,
+                         int x16, int y16, int rounder);
+extern void idct_put_altivec(uint8_t *dest, int line_size, int16_t *block);
+extern void idct_add_altivec(uint8_t *dest, int line_size, int16_t *block);
 
 void dsputil_h264_init_ppc(DSPContext* c, AVCodecContext *avctx);
 
diff --git a/libavcodec/ppc/fft_altivec.c b/libavcodec/ppc/fft_altivec.c
index 19123d0..ddf142b 100644
--- a/libavcodec/ppc/fft_altivec.c
+++ b/libavcodec/ppc/fft_altivec.c
@@ -26,6 +26,31 @@
 
 #include "dsputil_ppc.h"
 #include "util_altivec.h"
+/*
+  those three macros are from libavcodec/fft.c
+  and are required for the reference C code
+*/
+/* butter fly op */
+#define BF(pre, pim, qre, qim, pre1, pim1, qre1, qim1) \
+{\
+    FFTSample ax, ay, bx, by;\
+    bx=pre1;\
+    by=pim1;\
+    ax=qre1;\
+    ay=qim1;\
+    pre = (bx + ax);\
+    pim = (by + ay);\
+    qre = (bx - ax);\
+    qim = (by - ay);\
+}
+#define MUL16(a,b) ((a) * (b))
+#define CMUL(pre, pim, are, aim, bre, bim) \
+{\
+    pre = (MUL16(are, bre) - MUL16(aim, bim));\
+    pim = (MUL16(are, bim) + MUL16(bre, aim));\
+}
+
+
 /**
  * Do a complex FFT with the parameters defined in ff_fft_init(). The
  * input data must be permuted before with s->revtab table. No
diff --git a/libavcodec/ppc/float_altivec.c b/libavcodec/ppc/float_altivec.c
index fd4aa53..1f39d8f 100644
--- a/libavcodec/ppc/float_altivec.c
+++ b/libavcodec/ppc/float_altivec.c
@@ -23,7 +23,6 @@
 #include "gcc_fixes.h"
 
 #include "dsputil_altivec.h"
-#include "util_altivec.h"
 
 static void vector_fmul_altivec(float *dst, const float *src, int len)
 {
@@ -150,67 +149,6 @@ static void vector_fmul_add_add_altivec(float *dst, const float *src0,
         ff_vector_fmul_add_add_c(dst, src0, src1, src2, src3, len, step);
 }
 
-static void vector_fmul_window_altivec(float *dst, const float *src0, const float *src1, const float *win, float add_bias, int len)
-{
-    union {
-        vector float v;
-        float s[4];
-    } vadd;
-    vector float vadd_bias, zero, t0, t1, s0, s1, wi, wj;
-    const vector unsigned char reverse = vcprm(3,2,1,0);
-    int i,j;
-
-    dst += len;
-    win += len;
-    src0+= len;
-
-    vadd.s[0] = add_bias;
-    vadd_bias = vec_splat(vadd.v, 0);
-    zero = (vector float)vec_splat_u32(0);
-
-    for(i=-len*4, j=len*4-16; i<0; i+=16, j-=16) {
-        s0 = vec_ld(i, src0);
-        s1 = vec_ld(j, src1);
-        wi = vec_ld(i, win);
-        wj = vec_ld(j, win);
-
-        s1 = vec_perm(s1, s1, reverse);
-        wj = vec_perm(wj, wj, reverse);
-
-        t0 = vec_madd(s0, wj, vadd_bias);
-        t0 = vec_nmsub(s1, wi, t0);
-        t1 = vec_madd(s0, wi, vadd_bias);
-        t1 = vec_madd(s1, wj, t1);
-        t1 = vec_perm(t1, t1, reverse);
-
-        vec_st(t0, i, dst);
-        vec_st(t1, j, dst);
-    }
-}
-
-static void int32_to_float_fmul_scalar_altivec(float *dst, const int *src, float mul, int len)
-{
-    union {
-        vector float v;
-        float s[4];
-    } mul_u;
-    int i;
-    vector float src1, src2, dst1, dst2, mul_v, zero;
-
-    zero = (vector float)vec_splat_u32(0);
-    mul_u.s[0] = mul;
-    mul_v = vec_splat(mul_u.v, 0);
-
-    for(i=0; i<len; i+=8) {
-        src1 = vec_ctf(vec_ld(0,  src+i), 0);
-        src2 = vec_ctf(vec_ld(16, src+i), 0);
-        dst1 = vec_madd(src1, mul_v, zero);
-        dst2 = vec_madd(src2, mul_v, zero);
-        vec_st(dst1,  0, dst+i);
-        vec_st(dst2, 16, dst+i);
-    }
-}
-
 
 static vector signed short
 float_to_int16_one_altivec(const float *src)
@@ -222,7 +160,7 @@ float_to_int16_one_altivec(const float *src)
     return vec_packs(t0,t1);
 }
 
-static void float_to_int16_altivec(int16_t *dst, const float *src, long len)
+static void float_to_int16_altivec(int16_t *dst, const float *src, int len)
 {
     int i;
     vector signed short d0, d1, d;
@@ -302,9 +240,7 @@ void float_init_altivec(DSPContext* c, AVCodecContext *avctx)
     c->vector_fmul = vector_fmul_altivec;
     c->vector_fmul_reverse = vector_fmul_reverse_altivec;
     c->vector_fmul_add_add = vector_fmul_add_add_altivec;
-    c->int32_to_float_fmul_scalar = int32_to_float_fmul_scalar_altivec;
     if(!(avctx->flags & CODEC_FLAG_BITEXACT)) {
-        c->vector_fmul_window = vector_fmul_window_altivec;
         c->float_to_int16 = float_to_int16_altivec;
         c->float_to_int16_interleave = float_to_int16_interleave_altivec;
     }
diff --git a/libavcodec/ppc/h264_altivec.c b/libavcodec/ppc/h264_altivec.c
index b589be2..ab4c5c1 100644
--- a/libavcodec/ppc/h264_altivec.c
+++ b/libavcodec/ppc/h264_altivec.c
@@ -19,7 +19,6 @@
  */
 
 #include "libavcodec/dsputil.h"
-#include "libavcodec/h264data.h"
 
 #include "gcc_fixes.h"
 
@@ -189,32 +188,32 @@ void put_no_rnd_h264_chroma_mc8_altivec(uint8_t * dst, uint8_t * src, int stride
                          ((8 - x) * (y)),
                              ((x) * (y))};
     register int i;
-    vec_u8 fperm;
-    const vec_s32 vABCD = vec_ld(0, ABCD);
-    const vec_s16 vA = vec_splat((vec_s16)vABCD, 1);
-    const vec_s16 vB = vec_splat((vec_s16)vABCD, 3);
-    const vec_s16 vC = vec_splat((vec_s16)vABCD, 5);
-    const vec_s16 vD = vec_splat((vec_s16)vABCD, 7);
+    vec_u8_t fperm;
+    const vec_s32_t vABCD = vec_ld(0, ABCD);
+    const vec_s16_t vA = vec_splat((vec_s16_t)vABCD, 1);
+    const vec_s16_t vB = vec_splat((vec_s16_t)vABCD, 3);
+    const vec_s16_t vC = vec_splat((vec_s16_t)vABCD, 5);
+    const vec_s16_t vD = vec_splat((vec_s16_t)vABCD, 7);
     LOAD_ZERO;
-    const vec_s16 v28ss = vec_sub(vec_sl(vec_splat_s16(1),vec_splat_u16(5)),vec_splat_s16(4));
-    const vec_u16 v6us  = vec_splat_u16(6);
+    const vec_s16_t v28ss = vec_sub(vec_sl(vec_splat_s16(1),vec_splat_u16(5)),vec_splat_s16(4));
+    const vec_u16_t v6us  = vec_splat_u16(6);
     register int loadSecond     = (((unsigned long)src) % 16) <= 7 ? 0 : 1;
     register int reallyBadAlign = (((unsigned long)src) % 16) == 15 ? 1 : 0;
 
-    vec_u8 vsrcAuc, vsrcBuc, vsrcperm0, vsrcperm1;
-    vec_u8 vsrc0uc, vsrc1uc;
-    vec_s16 vsrc0ssH, vsrc1ssH;
-    vec_u8 vsrcCuc, vsrc2uc, vsrc3uc;
-    vec_s16 vsrc2ssH, vsrc3ssH, psum;
-    vec_u8 vdst, ppsum, fsum;
+    vec_u8_t vsrcAuc, vsrcBuc, vsrcperm0, vsrcperm1;
+    vec_u8_t vsrc0uc, vsrc1uc;
+    vec_s16_t vsrc0ssH, vsrc1ssH;
+    vec_u8_t vsrcCuc, vsrc2uc, vsrc3uc;
+    vec_s16_t vsrc2ssH, vsrc3ssH, psum;
+    vec_u8_t vdst, ppsum, fsum;
 
     if (((unsigned long)dst) % 16 == 0) {
-        fperm = (vec_u8){0x10, 0x11, 0x12, 0x13,
+        fperm = (vec_u8_t){0x10, 0x11, 0x12, 0x13,
                            0x14, 0x15, 0x16, 0x17,
                            0x08, 0x09, 0x0A, 0x0B,
                            0x0C, 0x0D, 0x0E, 0x0F};
     } else {
-        fperm = (vec_u8){0x00, 0x01, 0x02, 0x03,
+        fperm = (vec_u8_t){0x00, 0x01, 0x02, 0x03,
                            0x04, 0x05, 0x06, 0x07,
                            0x18, 0x19, 0x1A, 0x1B,
                            0x1C, 0x1D, 0x1E, 0x1F};
@@ -233,8 +232,8 @@ void put_no_rnd_h264_chroma_mc8_altivec(uint8_t * dst, uint8_t * src, int stride
     else
         vsrc1uc = vec_perm(vsrcAuc, vsrcBuc, vsrcperm1);
 
-    vsrc0ssH = (vec_s16)vec_mergeh(zero_u8v, (vec_u8)vsrc0uc);
-    vsrc1ssH = (vec_s16)vec_mergeh(zero_u8v, (vec_u8)vsrc1uc);
+    vsrc0ssH = (vec_s16_t)vec_mergeh(zero_u8v, (vec_u8_t)vsrc0uc);
+    vsrc1ssH = (vec_s16_t)vec_mergeh(zero_u8v, (vec_u8_t)vsrc1uc);
 
     if (!loadSecond) {// -> !reallyBadAlign
         for (i = 0 ; i < h ; i++) {
@@ -245,8 +244,8 @@ void put_no_rnd_h264_chroma_mc8_altivec(uint8_t * dst, uint8_t * src, int stride
             vsrc2uc = vec_perm(vsrcCuc, vsrcCuc, vsrcperm0);
             vsrc3uc = vec_perm(vsrcCuc, vsrcCuc, vsrcperm1);
 
-            vsrc2ssH = (vec_s16)vec_mergeh(zero_u8v, (vec_u8)vsrc2uc);
-            vsrc3ssH = (vec_s16)vec_mergeh(zero_u8v, (vec_u8)vsrc3uc);
+            vsrc2ssH = (vec_s16_t)vec_mergeh(zero_u8v, (vec_u8_t)vsrc2uc);
+            vsrc3ssH = (vec_s16_t)vec_mergeh(zero_u8v, (vec_u8_t)vsrc3uc);
 
             psum = vec_mladd(vA, vsrc0ssH, vec_splat_s16(0));
             psum = vec_mladd(vB, vsrc1ssH, psum);
@@ -256,7 +255,7 @@ void put_no_rnd_h264_chroma_mc8_altivec(uint8_t * dst, uint8_t * src, int stride
             psum = vec_sra(psum, v6us);
 
             vdst = vec_ld(0, dst);
-            ppsum = (vec_u8)vec_packsu(psum, psum);
+            ppsum = (vec_u8_t)vec_packsu(psum, psum);
             fsum = vec_perm(vdst, ppsum, fperm);
 
             vec_st(fsum, 0, dst);
@@ -268,7 +267,7 @@ void put_no_rnd_h264_chroma_mc8_altivec(uint8_t * dst, uint8_t * src, int stride
             src += stride;
         }
     } else {
-        vec_u8 vsrcDuc;
+        vec_u8_t vsrcDuc;
         for (i = 0 ; i < h ; i++) {
             vsrcCuc = vec_ld(stride + 0, src);
             vsrcDuc = vec_ld(stride + 16, src);
@@ -279,8 +278,8 @@ void put_no_rnd_h264_chroma_mc8_altivec(uint8_t * dst, uint8_t * src, int stride
             else
                 vsrc3uc = vec_perm(vsrcCuc, vsrcDuc, vsrcperm1);
 
-            vsrc2ssH = (vec_s16)vec_mergeh(zero_u8v, (vec_u8)vsrc2uc);
-            vsrc3ssH = (vec_s16)vec_mergeh(zero_u8v, (vec_u8)vsrc3uc);
+            vsrc2ssH = (vec_s16_t)vec_mergeh(zero_u8v, (vec_u8_t)vsrc2uc);
+            vsrc3ssH = (vec_s16_t)vec_mergeh(zero_u8v, (vec_u8_t)vsrc3uc);
 
             psum = vec_mladd(vA, vsrc0ssH, vec_splat_s16(0));
             psum = vec_mladd(vB, vsrc1ssH, psum);
@@ -290,7 +289,7 @@ void put_no_rnd_h264_chroma_mc8_altivec(uint8_t * dst, uint8_t * src, int stride
             psum = vec_sr(psum, v6us);
 
             vdst = vec_ld(0, dst);
-            ppsum = (vec_u8)vec_pack(psum, psum);
+            ppsum = (vec_u8_t)vec_pack(psum, psum);
             fsum = vec_perm(vdst, ppsum, fperm);
 
             vec_st(fsum, 0, dst);
@@ -309,7 +308,7 @@ static inline void put_pixels16_l2_altivec( uint8_t * dst, const uint8_t * src1,
                                     int src_stride1, int h)
 {
     int i;
-    vec_u8 a, b, d, tmp1, tmp2, mask, mask_, edges, align;
+    vec_u8_t a, b, d, tmp1, tmp2, mask, mask_, edges, align;
 
     mask_ = vec_lvsl(0, src2);
 
@@ -351,7 +350,7 @@ static inline void avg_pixels16_l2_altivec( uint8_t * dst, const uint8_t * src1,
                                     int src_stride1, int h)
 {
     int i;
-    vec_u8 a, b, d, tmp1, tmp2, mask, mask_, edges, align;
+    vec_u8_t a, b, d, tmp1, tmp2, mask, mask_, edges, align;
 
     mask_ = vec_lvsl(0, src2);
 
@@ -432,23 +431,23 @@ H264_MC(avg_, 16, altivec)
 #define VEC_LOAD_U8_ADD_S16_STORE_U8(va)                      \
     vdst_orig = vec_ld(0, dst);                               \
     vdst = vec_perm(vdst_orig, zero_u8v, vdst_mask);          \
-    vdst_ss = (vec_s16) vec_mergeh(zero_u8v, vdst);         \
+    vdst_ss = (vec_s16_t) vec_mergeh(zero_u8v, vdst);         \
     va = vec_add(va, vdst_ss);                                \
     va_u8 = vec_packsu(va, zero_s16v);                        \
-    va_u32 = vec_splat((vec_u32)va_u8, 0);                  \
+    va_u32 = vec_splat((vec_u32_t)va_u8, 0);                  \
     vec_ste(va_u32, element, (uint32_t*)dst);
 
 static void ff_h264_idct_add_altivec(uint8_t *dst, DCTELEM *block, int stride)
 {
-    vec_s16 va0, va1, va2, va3;
-    vec_s16 vz0, vz1, vz2, vz3;
-    vec_s16 vtmp0, vtmp1, vtmp2, vtmp3;
-    vec_u8 va_u8;
-    vec_u32 va_u32;
-    vec_s16 vdst_ss;
-    const vec_u16 v6us = vec_splat_u16(6);
-    vec_u8 vdst, vdst_orig;
-    vec_u8 vdst_mask = vec_lvsl(0, dst);
+    vec_s16_t va0, va1, va2, va3;
+    vec_s16_t vz0, vz1, vz2, vz3;
+    vec_s16_t vtmp0, vtmp1, vtmp2, vtmp3;
+    vec_u8_t va_u8;
+    vec_u32_t va_u32;
+    vec_s16_t vdst_ss;
+    const vec_u16_t v6us = vec_splat_u16(6);
+    vec_u8_t vdst, vdst_orig;
+    vec_u8_t vdst_mask = vec_lvsl(0, dst);
     int element = ((unsigned long)dst & 0xf) >> 2;
     LOAD_ZERO;
 
@@ -479,40 +478,40 @@ static void ff_h264_idct_add_altivec(uint8_t *dst, DCTELEM *block, int stride)
 
 #define IDCT8_1D_ALTIVEC(s0, s1, s2, s3, s4, s5, s6, s7,  d0, d1, d2, d3, d4, d5, d6, d7) {\
     /*        a0  = SRC(0) + SRC(4); */ \
-    vec_s16 a0v = vec_add(s0, s4);    \
+    vec_s16_t a0v = vec_add(s0, s4);    \
     /*        a2  = SRC(0) - SRC(4); */ \
-    vec_s16 a2v = vec_sub(s0, s4);    \
+    vec_s16_t a2v = vec_sub(s0, s4);    \
     /*        a4  =           (SRC(2)>>1) - SRC(6); */ \
-    vec_s16 a4v = vec_sub(vec_sra(s2, onev), s6);    \
+    vec_s16_t a4v = vec_sub(vec_sra(s2, onev), s6);    \
     /*        a6  =           (SRC(6)>>1) + SRC(2); */ \
-    vec_s16 a6v = vec_add(vec_sra(s6, onev), s2);    \
+    vec_s16_t a6v = vec_add(vec_sra(s6, onev), s2);    \
     /*        b0  =         a0 + a6; */ \
-    vec_s16 b0v = vec_add(a0v, a6v);  \
+    vec_s16_t b0v = vec_add(a0v, a6v);  \
     /*        b2  =         a2 + a4; */ \
-    vec_s16 b2v = vec_add(a2v, a4v);  \
+    vec_s16_t b2v = vec_add(a2v, a4v);  \
     /*        b4  =         a2 - a4; */ \
-    vec_s16 b4v = vec_sub(a2v, a4v);  \
+    vec_s16_t b4v = vec_sub(a2v, a4v);  \
     /*        b6  =         a0 - a6; */ \
-    vec_s16 b6v = vec_sub(a0v, a6v);  \
+    vec_s16_t b6v = vec_sub(a0v, a6v);  \
     /* a1 =  SRC(5) - SRC(3) - SRC(7) - (SRC(7)>>1); */ \
     /*        a1 =             (SRC(5)-SRC(3)) -  (SRC(7)  +  (SRC(7)>>1)); */ \
-    vec_s16 a1v = vec_sub( vec_sub(s5, s3), vec_add(s7, vec_sra(s7, onev)) ); \
+    vec_s16_t a1v = vec_sub( vec_sub(s5, s3), vec_add(s7, vec_sra(s7, onev)) ); \
     /* a3 =  SRC(7) + SRC(1) - SRC(3) - (SRC(3)>>1); */ \
     /*        a3 =             (SRC(7)+SRC(1)) -  (SRC(3)  +  (SRC(3)>>1)); */ \
-    vec_s16 a3v = vec_sub( vec_add(s7, s1), vec_add(s3, vec_sra(s3, onev)) );\
+    vec_s16_t a3v = vec_sub( vec_add(s7, s1), vec_add(s3, vec_sra(s3, onev)) );\
     /* a5 =  SRC(7) - SRC(1) + SRC(5) + (SRC(5)>>1); */ \
     /*        a5 =             (SRC(7)-SRC(1)) +   SRC(5) +   (SRC(5)>>1); */ \
-    vec_s16 a5v = vec_add( vec_sub(s7, s1), vec_add(s5, vec_sra(s5, onev)) );\
+    vec_s16_t a5v = vec_add( vec_sub(s7, s1), vec_add(s5, vec_sra(s5, onev)) );\
     /*        a7 =                SRC(5)+SRC(3) +  SRC(1) +   (SRC(1)>>1); */ \
-    vec_s16 a7v = vec_add( vec_add(s5, s3), vec_add(s1, vec_sra(s1, onev)) );\
+    vec_s16_t a7v = vec_add( vec_add(s5, s3), vec_add(s1, vec_sra(s1, onev)) );\
     /*        b1 =                  (a7>>2)  +  a1; */ \
-    vec_s16 b1v = vec_add( vec_sra(a7v, twov), a1v); \
+    vec_s16_t b1v = vec_add( vec_sra(a7v, twov), a1v); \
     /*        b3 =          a3 +        (a5>>2); */ \
-    vec_s16 b3v = vec_add(a3v, vec_sra(a5v, twov)); \
+    vec_s16_t b3v = vec_add(a3v, vec_sra(a5v, twov)); \
     /*        b5 =                  (a3>>2)  -   a5; */ \
-    vec_s16 b5v = vec_sub( vec_sra(a3v, twov), a5v); \
+    vec_s16_t b5v = vec_sub( vec_sra(a3v, twov), a5v); \
     /*        b7 =           a7 -        (a1>>2); */ \
-    vec_s16 b7v = vec_sub( a7v, vec_sra(a1v, twov)); \
+    vec_s16_t b7v = vec_sub( a7v, vec_sra(a1v, twov)); \
     /* DST(0,    b0 + b7); */ \
     d0 = vec_add(b0v, b7v); \
     /* DST(1,    b2 + b5); */ \
@@ -533,17 +532,17 @@ static void ff_h264_idct_add_altivec(uint8_t *dst, DCTELEM *block, int stride)
 
 #define ALTIVEC_STORE_SUM_CLIP(dest, idctv, perm_ldv, perm_stv, sel) { \
     /* unaligned load */                                       \
-    vec_u8 hv = vec_ld( 0, dest );                           \
-    vec_u8 lv = vec_ld( 7, dest );                           \
-    vec_u8 dstv   = vec_perm( hv, lv, (vec_u8)perm_ldv );  \
-    vec_s16 idct_sh6 = vec_sra(idctv, sixv);                 \
-    vec_u16 dst16 = (vec_u16)vec_mergeh(zero_u8v, dstv);   \
-    vec_s16 idstsum = vec_adds(idct_sh6, (vec_s16)dst16);  \
-    vec_u8 idstsum8 = vec_packsu(zero_s16v, idstsum);        \
-    vec_u8 edgehv;                                           \
+    vec_u8_t hv = vec_ld( 0, dest );                           \
+    vec_u8_t lv = vec_ld( 7, dest );                           \
+    vec_u8_t dstv   = vec_perm( hv, lv, (vec_u8_t)perm_ldv );  \
+    vec_s16_t idct_sh6 = vec_sra(idctv, sixv);                 \
+    vec_u16_t dst16 = (vec_u16_t)vec_mergeh(zero_u8v, dstv);   \
+    vec_s16_t idstsum = vec_adds(idct_sh6, (vec_s16_t)dst16);  \
+    vec_u8_t idstsum8 = vec_packsu(zero_s16v, idstsum);        \
+    vec_u8_t edgehv;                                           \
     /* unaligned store */                                      \
-    vec_u8 bodyv  = vec_perm( idstsum8, idstsum8, perm_stv );\
-    vec_u8 edgelv = vec_perm( sel, zero_u8v, perm_stv );     \
+    vec_u8_t bodyv  = vec_perm( idstsum8, idstsum8, perm_stv );\
+    vec_u8_t edgelv = vec_perm( sel, zero_u8v, perm_stv );     \
     lv    = vec_sel( lv, bodyv, edgelv );                      \
     vec_st( lv, 7, dest );                                     \
     hv    = vec_ld( 0, dest );                                 \
@@ -553,18 +552,18 @@ static void ff_h264_idct_add_altivec(uint8_t *dst, DCTELEM *block, int stride)
  }
 
 void ff_h264_idct8_add_altivec( uint8_t *dst, DCTELEM *dct, int stride ) {
-    vec_s16 s0, s1, s2, s3, s4, s5, s6, s7;
-    vec_s16 d0, d1, d2, d3, d4, d5, d6, d7;
-    vec_s16 idct0, idct1, idct2, idct3, idct4, idct5, idct6, idct7;
+    vec_s16_t s0, s1, s2, s3, s4, s5, s6, s7;
+    vec_s16_t d0, d1, d2, d3, d4, d5, d6, d7;
+    vec_s16_t idct0, idct1, idct2, idct3, idct4, idct5, idct6, idct7;
 
-    vec_u8 perm_ldv = vec_lvsl(0, dst);
-    vec_u8 perm_stv = vec_lvsr(8, dst);
+    vec_u8_t perm_ldv = vec_lvsl(0, dst);
+    vec_u8_t perm_stv = vec_lvsr(8, dst);
 
-    const vec_u16 onev = vec_splat_u16(1);
-    const vec_u16 twov = vec_splat_u16(2);
-    const vec_u16 sixv = vec_splat_u16(6);
+    const vec_u16_t onev = vec_splat_u16(1);
+    const vec_u16_t twov = vec_splat_u16(2);
+    const vec_u16_t sixv = vec_splat_u16(6);
 
-    const vec_u8 sel = (vec_u8) {0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1};
+    const vec_u8_t sel = (vec_u8_t) {0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1};
     LOAD_ZERO;
 
     dct[0] += 32; // rounding for the >>6 at the end
@@ -596,106 +595,11 @@ void ff_h264_idct8_add_altivec( uint8_t *dst, DCTELEM *dct, int stride ) {
     ALTIVEC_STORE_SUM_CLIP(&dst[7*stride], idct7, perm_ldv, perm_stv, sel);
 }
 
-static av_always_inline void h264_idct_dc_add_internal(uint8_t *dst, DCTELEM *block, int stride, int size)
-{
-    vec_s16 dc16;
-    vec_u8 dcplus, dcminus, v0, v1, v2, v3, aligner;
-    LOAD_ZERO;
-    DECLARE_ALIGNED_16(int, dc);
-    int i;
-
-    dc = (block[0] + 32) >> 6;
-    dc16 = vec_splat((vec_s16) vec_lde(0, &dc), 1);
-
-    if (size == 4)
-        dc16 = vec_sld(dc16, zero_s16v, 8);
-    dcplus = vec_packsu(dc16, zero_s16v);
-    dcminus = vec_packsu(vec_sub(zero_s16v, dc16), zero_s16v);
-
-    aligner = vec_lvsr(0, dst);
-    dcplus = vec_perm(dcplus, dcplus, aligner);
-    dcminus = vec_perm(dcminus, dcminus, aligner);
-
-    for (i = 0; i < size; i += 4) {
-        v0 = vec_ld(0, dst+0*stride);
-        v1 = vec_ld(0, dst+1*stride);
-        v2 = vec_ld(0, dst+2*stride);
-        v3 = vec_ld(0, dst+3*stride);
-
-        v0 = vec_adds(v0, dcplus);
-        v1 = vec_adds(v1, dcplus);
-        v2 = vec_adds(v2, dcplus);
-        v3 = vec_adds(v3, dcplus);
-
-        v0 = vec_subs(v0, dcminus);
-        v1 = vec_subs(v1, dcminus);
-        v2 = vec_subs(v2, dcminus);
-        v3 = vec_subs(v3, dcminus);
-
-        vec_st(v0, 0, dst+0*stride);
-        vec_st(v1, 0, dst+1*stride);
-        vec_st(v2, 0, dst+2*stride);
-        vec_st(v3, 0, dst+3*stride);
-
-        dst += 4*stride;
-    }
-}
-
-static void h264_idct_dc_add_altivec(uint8_t *dst, DCTELEM *block, int stride)
-{
-    h264_idct_dc_add_internal(dst, block, stride, 4);
-}
-
-static void ff_h264_idct8_dc_add_altivec(uint8_t *dst, DCTELEM *block, int stride)
-{
-    h264_idct_dc_add_internal(dst, block, stride, 8);
-}
-
-static void ff_h264_idct_add16_altivec(uint8_t *dst, const int *block_offset, DCTELEM *block, int stride, const uint8_t nnzc[6*8]){
-    int i;
-    for(i=0; i<16; i++){
-        int nnz = nnzc[ scan8[i] ];
-        if(nnz){
-            if(nnz==1 && block[i*16]) h264_idct_dc_add_altivec(dst + block_offset[i], block + i*16, stride);
-            else                      ff_h264_idct_add_altivec(dst + block_offset[i], block + i*16, stride);
-        }
-    }
-}
-
-static void ff_h264_idct_add16intra_altivec(uint8_t *dst, const int *block_offset, DCTELEM *block, int stride, const uint8_t nnzc[6*8]){
-    int i;
-    for(i=0; i<16; i++){
-        if(nnzc[ scan8[i] ]) ff_h264_idct_add_altivec(dst + block_offset[i], block + i*16, stride);
-        else if(block[i*16]) h264_idct_dc_add_altivec(dst + block_offset[i], block + i*16, stride);
-    }
-}
-
-static void ff_h264_idct8_add4_altivec(uint8_t *dst, const int *block_offset, DCTELEM *block, int stride, const uint8_t nnzc[6*8]){
-    int i;
-    for(i=0; i<16; i+=4){
-        int nnz = nnzc[ scan8[i] ];
-        if(nnz){
-            if(nnz==1 && block[i*16]) ff_h264_idct8_dc_add_altivec(dst + block_offset[i], block + i*16, stride);
-            else                      ff_h264_idct8_add_altivec   (dst + block_offset[i], block + i*16, stride);
-        }
-    }
-}
-
-static void ff_h264_idct_add8_altivec(uint8_t **dest, const int *block_offset, DCTELEM *block, int stride, const uint8_t nnzc[6*8]){
-    int i;
-    for(i=16; i<16+8; i++){
-        if(nnzc[ scan8[i] ])
-            ff_h264_idct_add_altivec(dest[(i&4)>>2] + block_offset[i], block + i*16, stride);
-        else if(block[i*16])
-            h264_idct_dc_add_altivec(dest[(i&4)>>2] + block_offset[i], block + i*16, stride);
-    }
-}
-
 #define transpose4x16(r0, r1, r2, r3) {      \
-    register vec_u8 r4;                    \
-    register vec_u8 r5;                    \
-    register vec_u8 r6;                    \
-    register vec_u8 r7;                    \
+    register vec_u8_t r4;                    \
+    register vec_u8_t r5;                    \
+    register vec_u8_t r6;                    \
+    register vec_u8_t r7;                    \
                                              \
     r4 = vec_mergeh(r0, r2);  /*0, 2 set 0*/ \
     r5 = vec_mergel(r0, r2);  /*0, 2 set 1*/ \
@@ -709,8 +613,8 @@ static void ff_h264_idct_add8_altivec(uint8_t **dest, const int *block_offset, D
 }
 
 static inline void write16x4(uint8_t *dst, int dst_stride,
-                             register vec_u8 r0, register vec_u8 r1,
-                             register vec_u8 r2, register vec_u8 r3) {
+                             register vec_u8_t r0, register vec_u8_t r1,
+                             register vec_u8_t r2, register vec_u8_t r3) {
     DECLARE_ALIGNED_16(unsigned char, result[64]);
     uint32_t *src_int = (uint32_t *)result, *dst_int = (uint32_t *)dst;
     int int_dst_stride = dst_stride/4;
@@ -742,16 +646,16 @@ static inline void write16x4(uint8_t *dst, int dst_stride,
     \todo FIXME: see if we can't spare some vec_lvsl() by them factorizing
     out of unaligned_load() */
 #define readAndTranspose16x6(src, src_stride, r8, r9, r10, r11, r12, r13) {\
-    register vec_u8 r0  = unaligned_load(0,             src);            \
-    register vec_u8 r1  = unaligned_load(   src_stride, src);            \
-    register vec_u8 r2  = unaligned_load(2* src_stride, src);            \
-    register vec_u8 r3  = unaligned_load(3* src_stride, src);            \
-    register vec_u8 r4  = unaligned_load(4* src_stride, src);            \
-    register vec_u8 r5  = unaligned_load(5* src_stride, src);            \
-    register vec_u8 r6  = unaligned_load(6* src_stride, src);            \
-    register vec_u8 r7  = unaligned_load(7* src_stride, src);            \
-    register vec_u8 r14 = unaligned_load(14*src_stride, src);            \
-    register vec_u8 r15 = unaligned_load(15*src_stride, src);            \
+    register vec_u8_t r0  = unaligned_load(0,             src);            \
+    register vec_u8_t r1  = unaligned_load(   src_stride, src);            \
+    register vec_u8_t r2  = unaligned_load(2* src_stride, src);            \
+    register vec_u8_t r3  = unaligned_load(3* src_stride, src);            \
+    register vec_u8_t r4  = unaligned_load(4* src_stride, src);            \
+    register vec_u8_t r5  = unaligned_load(5* src_stride, src);            \
+    register vec_u8_t r6  = unaligned_load(6* src_stride, src);            \
+    register vec_u8_t r7  = unaligned_load(7* src_stride, src);            \
+    register vec_u8_t r14 = unaligned_load(14*src_stride, src);            \
+    register vec_u8_t r15 = unaligned_load(15*src_stride, src);            \
                                                                            \
     r8  = unaligned_load( 8*src_stride, src);                              \
     r9  = unaligned_load( 9*src_stride, src);                              \
@@ -801,26 +705,26 @@ static inline void write16x4(uint8_t *dst, int dst_stride,
 }
 
 // out: o = |x-y| < a
-static inline vec_u8 diff_lt_altivec ( register vec_u8 x,
-                                         register vec_u8 y,
-                                         register vec_u8 a) {
-
-    register vec_u8 diff = vec_subs(x, y);
-    register vec_u8 diffneg = vec_subs(y, x);
-    register vec_u8 o = vec_or(diff, diffneg); /* |x-y| */
-    o = (vec_u8)vec_cmplt(o, a);
+static inline vec_u8_t diff_lt_altivec ( register vec_u8_t x,
+                                         register vec_u8_t y,
+                                         register vec_u8_t a) {
+
+    register vec_u8_t diff = vec_subs(x, y);
+    register vec_u8_t diffneg = vec_subs(y, x);
+    register vec_u8_t o = vec_or(diff, diffneg); /* |x-y| */
+    o = (vec_u8_t)vec_cmplt(o, a);
     return o;
 }
 
-static inline vec_u8 h264_deblock_mask ( register vec_u8 p0,
-                                           register vec_u8 p1,
-                                           register vec_u8 q0,
-                                           register vec_u8 q1,
-                                           register vec_u8 alpha,
-                                           register vec_u8 beta) {
+static inline vec_u8_t h264_deblock_mask ( register vec_u8_t p0,
+                                           register vec_u8_t p1,
+                                           register vec_u8_t q0,
+                                           register vec_u8_t q1,
+                                           register vec_u8_t alpha,
+                                           register vec_u8_t beta) {
 
-    register vec_u8 mask;
-    register vec_u8 tempmask;
+    register vec_u8_t mask;
+    register vec_u8_t tempmask;
 
     mask = diff_lt_altivec(p0, q0, alpha);
     tempmask = diff_lt_altivec(p1, p0, beta);
@@ -832,19 +736,19 @@ static inline vec_u8 h264_deblock_mask ( register vec_u8 p0,
 }
 
 // out: newp1 = clip((p2 + ((p0 + q0 + 1) >> 1)) >> 1, p1-tc0, p1+tc0)
-static inline vec_u8 h264_deblock_q1(register vec_u8 p0,
-                                       register vec_u8 p1,
-                                       register vec_u8 p2,
-                                       register vec_u8 q0,
-                                       register vec_u8 tc0) {
-
-    register vec_u8 average = vec_avg(p0, q0);
-    register vec_u8 temp;
-    register vec_u8 uncliped;
-    register vec_u8 ones;
-    register vec_u8 max;
-    register vec_u8 min;
-    register vec_u8 newp1;
+static inline vec_u8_t h264_deblock_q1(register vec_u8_t p0,
+                                       register vec_u8_t p1,
+                                       register vec_u8_t p2,
+                                       register vec_u8_t q0,
+                                       register vec_u8_t tc0) {
+
+    register vec_u8_t average = vec_avg(p0, q0);
+    register vec_u8_t temp;
+    register vec_u8_t uncliped;
+    register vec_u8_t ones;
+    register vec_u8_t max;
+    register vec_u8_t min;
+    register vec_u8_t newp1;
 
     temp = vec_xor(average, p2);
     average = vec_avg(average, p2);     /*avg(p2, avg(p0, q0)) */
@@ -860,16 +764,16 @@ static inline vec_u8 h264_deblock_q1(register vec_u8 p0,
 
 #define h264_deblock_p0_q0(p0, p1, q0, q1, tc0masked) {                                           \
                                                                                                   \
-    const vec_u8 A0v = vec_sl(vec_splat_u8(10), vec_splat_u8(4));                               \
+    const vec_u8_t A0v = vec_sl(vec_splat_u8(10), vec_splat_u8(4));                               \
                                                                                                   \
-    register vec_u8 pq0bit = vec_xor(p0,q0);                                                    \
-    register vec_u8 q1minus;                                                                    \
-    register vec_u8 p0minus;                                                                    \
-    register vec_u8 stage1;                                                                     \
-    register vec_u8 stage2;                                                                     \
-    register vec_u8 vec160;                                                                     \
-    register vec_u8 delta;                                                                      \
-    register vec_u8 deltaneg;                                                                   \
+    register vec_u8_t pq0bit = vec_xor(p0,q0);                                                    \
+    register vec_u8_t q1minus;                                                                    \
+    register vec_u8_t p0minus;                                                                    \
+    register vec_u8_t stage1;                                                                     \
+    register vec_u8_t stage2;                                                                     \
+    register vec_u8_t vec160;                                                                     \
+    register vec_u8_t delta;                                                                      \
+    register vec_u8_t deltaneg;                                                                   \
                                                                                                   \
     q1minus = vec_nor(q1, q1);                 /* 255 - q1 */                                     \
     stage1 = vec_avg(p1, q1minus);             /* (p1 - q1 + 256)>>1 */                           \
@@ -892,16 +796,16 @@ static inline vec_u8 h264_deblock_q1(register vec_u8 p0,
 
 #define h264_loop_filter_luma_altivec(p2, p1, p0, q0, q1, q2, alpha, beta, tc0) {            \
     DECLARE_ALIGNED_16(unsigned char, temp[16]);                                             \
-    register vec_u8 alphavec;                                                              \
-    register vec_u8 betavec;                                                               \
-    register vec_u8 mask;                                                                  \
-    register vec_u8 p1mask;                                                                \
-    register vec_u8 q1mask;                                                                \
+    register vec_u8_t alphavec;                                                              \
+    register vec_u8_t betavec;                                                               \
+    register vec_u8_t mask;                                                                  \
+    register vec_u8_t p1mask;                                                                \
+    register vec_u8_t q1mask;                                                                \
     register vector signed   char tc0vec;                                                    \
-    register vec_u8 finaltc0;                                                              \
-    register vec_u8 tc0masked;                                                             \
-    register vec_u8 newp1;                                                                 \
-    register vec_u8 newq1;                                                                 \
+    register vec_u8_t finaltc0;                                                              \
+    register vec_u8_t tc0masked;                                                             \
+    register vec_u8_t newp1;                                                                 \
+    register vec_u8_t newq1;                                                                 \
                                                                                              \
     temp[0] = alpha;                                                                         \
     temp[1] = beta;                                                                          \
@@ -915,18 +819,18 @@ static inline vec_u8 h264_deblock_q1(register vec_u8 p0,
     tc0vec = vec_mergeh(tc0vec, tc0vec);                                                     \
     tc0vec = vec_mergeh(tc0vec, tc0vec);                                                     \
     mask = vec_and(mask, vec_cmpgt(tc0vec, vec_splat_s8(-1)));  /* if tc0[i] >= 0 */         \
-    finaltc0 = vec_and((vec_u8)tc0vec, mask);     /* tc = tc0 */                           \
+    finaltc0 = vec_and((vec_u8_t)tc0vec, mask);     /* tc = tc0 */                           \
                                                                                              \
     p1mask = diff_lt_altivec(p2, p0, betavec);                                               \
     p1mask = vec_and(p1mask, mask);                             /* if ( |p2 - p0| < beta) */ \
-    tc0masked = vec_and(p1mask, (vec_u8)tc0vec);                                           \
+    tc0masked = vec_and(p1mask, (vec_u8_t)tc0vec);                                           \
     finaltc0 = vec_sub(finaltc0, p1mask);                       /* tc++ */                   \
     newp1 = h264_deblock_q1(p0, p1, p2, q0, tc0masked);                                      \
     /*end if*/                                                                               \
                                                                                              \
     q1mask = diff_lt_altivec(q2, q0, betavec);                                               \
     q1mask = vec_and(q1mask, mask);                             /* if ( |q2 - q0| < beta ) */\
-    tc0masked = vec_and(q1mask, (vec_u8)tc0vec);                                           \
+    tc0masked = vec_and(q1mask, (vec_u8_t)tc0vec);                                           \
     finaltc0 = vec_sub(finaltc0, q1mask);                       /* tc++ */                   \
     newq1 = h264_deblock_q1(p0, q1, q2, q0, tc0masked);                                      \
     /*end if*/                                                                               \
@@ -939,12 +843,12 @@ static inline vec_u8 h264_deblock_q1(register vec_u8 p0,
 static void h264_v_loop_filter_luma_altivec(uint8_t *pix, int stride, int alpha, int beta, int8_t *tc0) {
 
     if ((tc0[0] & tc0[1] & tc0[2] & tc0[3]) >= 0) {
-        register vec_u8 p2 = vec_ld(-3*stride, pix);
-        register vec_u8 p1 = vec_ld(-2*stride, pix);
-        register vec_u8 p0 = vec_ld(-1*stride, pix);
-        register vec_u8 q0 = vec_ld(0, pix);
-        register vec_u8 q1 = vec_ld(stride, pix);
-        register vec_u8 q2 = vec_ld(2*stride, pix);
+        register vec_u8_t p2 = vec_ld(-3*stride, pix);
+        register vec_u8_t p1 = vec_ld(-2*stride, pix);
+        register vec_u8_t p0 = vec_ld(-1*stride, pix);
+        register vec_u8_t q0 = vec_ld(0, pix);
+        register vec_u8_t q1 = vec_ld(stride, pix);
+        register vec_u8_t q2 = vec_ld(2*stride, pix);
         h264_loop_filter_luma_altivec(p2, p1, p0, q0, q1, q2, alpha, beta, tc0);
         vec_st(p1, -2*stride, pix);
         vec_st(p0, -1*stride, pix);
@@ -955,7 +859,7 @@ static void h264_v_loop_filter_luma_altivec(uint8_t *pix, int stride, int alpha,
 
 static void h264_h_loop_filter_luma_altivec(uint8_t *pix, int stride, int alpha, int beta, int8_t *tc0) {
 
-    register vec_u8 line0, line1, line2, line3, line4, line5;
+    register vec_u8_t line0, line1, line2, line3, line4, line5;
     if ((tc0[0] & tc0[1] & tc0[2] & tc0[3]) < 0)
         return;
     readAndTranspose16x6(pix-3, stride, line0, line1, line2, line3, line4, line5);
@@ -964,130 +868,6 @@ static void h264_h_loop_filter_luma_altivec(uint8_t *pix, int stride, int alpha,
     write16x4(pix-2, stride, line1, line2, line3, line4);
 }
 
-static av_always_inline
-void weight_h264_WxH_altivec(uint8_t *block, int stride, int log2_denom, int weight, int offset, int w, int h)
-{
-    int y, aligned;
-    vec_u8 vblock;
-    vec_s16 vtemp, vweight, voffset, v0, v1;
-    vec_u16 vlog2_denom;
-    DECLARE_ALIGNED_16(int32_t, temp[4]);
-    LOAD_ZERO;
-
-    offset <<= log2_denom;
-    if(log2_denom) offset += 1<<(log2_denom-1);
-    temp[0] = log2_denom;
-    temp[1] = weight;
-    temp[2] = offset;
-
-    vtemp = (vec_s16)vec_ld(0, temp);
-    vlog2_denom = (vec_u16)vec_splat(vtemp, 1);
-    vweight = vec_splat(vtemp, 3);
-    voffset = vec_splat(vtemp, 5);
-    aligned = !((unsigned long)block & 0xf);
-
-    for (y=0; y<h; y++) {
-        vblock = vec_ld(0, block);
-
-        v0 = (vec_s16)vec_mergeh(zero_u8v, vblock);
-        v1 = (vec_s16)vec_mergel(zero_u8v, vblock);
-
-        if (w == 16 || aligned) {
-            v0 = vec_mladd(v0, vweight, zero_s16v);
-            v0 = vec_adds(v0, voffset);
-            v0 = vec_sra(v0, vlog2_denom);
-        }
-        if (w == 16 || !aligned) {
-            v1 = vec_mladd(v1, vweight, zero_s16v);
-            v1 = vec_adds(v1, voffset);
-            v1 = vec_sra(v1, vlog2_denom);
-        }
-        vblock = vec_packsu(v0, v1);
-        vec_st(vblock, 0, block);
-
-        block += stride;
-    }
-}
-
-static av_always_inline
-void biweight_h264_WxH_altivec(uint8_t *dst, uint8_t *src, int stride, int log2_denom,
-                               int weightd, int weights, int offset, int w, int h)
-{
-    int y, dst_aligned, src_aligned;
-    vec_u8 vsrc, vdst;
-    vec_s16 vtemp, vweights, vweightd, voffset, v0, v1, v2, v3;
-    vec_u16 vlog2_denom;
-    DECLARE_ALIGNED_16(int32_t, temp[4]);
-    LOAD_ZERO;
-
-    offset = ((offset + 1) | 1) << log2_denom;
-    temp[0] = log2_denom+1;
-    temp[1] = weights;
-    temp[2] = weightd;
-    temp[3] = offset;
-
-    vtemp = (vec_s16)vec_ld(0, temp);
-    vlog2_denom = (vec_u16)vec_splat(vtemp, 1);
-    vweights = vec_splat(vtemp, 3);
-    vweightd = vec_splat(vtemp, 5);
-    voffset = vec_splat(vtemp, 7);
-    dst_aligned = !((unsigned long)dst & 0xf);
-    src_aligned = !((unsigned long)src & 0xf);
-
-    for (y=0; y<h; y++) {
-        vdst = vec_ld(0, dst);
-        vsrc = vec_ld(0, src);
-
-        v0 = (vec_s16)vec_mergeh(zero_u8v, vdst);
-        v1 = (vec_s16)vec_mergel(zero_u8v, vdst);
-        v2 = (vec_s16)vec_mergeh(zero_u8v, vsrc);
-        v3 = (vec_s16)vec_mergel(zero_u8v, vsrc);
-
-        if (w == 8) {
-            if (src_aligned)
-                v3 = v2;
-            else
-                v2 = v3;
-        }
-
-        if (w == 16 || dst_aligned) {
-            v0 = vec_mladd(v0, vweightd, zero_s16v);
-            v2 = vec_mladd(v2, vweights, zero_s16v);
-
-            v0 = vec_adds(v0, voffset);
-            v0 = vec_adds(v0, v2);
-            v0 = vec_sra(v0, vlog2_denom);
-        }
-        if (w == 16 || !dst_aligned) {
-            v1 = vec_mladd(v1, vweightd, zero_s16v);
-            v3 = vec_mladd(v3, vweights, zero_s16v);
-
-            v1 = vec_adds(v1, voffset);
-            v1 = vec_adds(v1, v3);
-            v1 = vec_sra(v1, vlog2_denom);
-        }
-        vdst = vec_packsu(v0, v1);
-        vec_st(vdst, 0, dst);
-
-        dst += stride;
-        src += stride;
-    }
-}
-
-#define H264_WEIGHT(W,H) \
-static void ff_weight_h264_pixels ## W ## x ## H ## _altivec(uint8_t *block, int stride, int log2_denom, int weight, int offset){ \
-    weight_h264_WxH_altivec(block, stride, log2_denom, weight, offset, W, H); \
-}\
-static void ff_biweight_h264_pixels ## W ## x ## H ## _altivec(uint8_t *dst, uint8_t *src, int stride, int log2_denom, int weightd, int weights, int offset){ \
-    biweight_h264_WxH_altivec(dst, src, stride, log2_denom, weightd, weights, offset, W, H); \
-}
-
-H264_WEIGHT(16,16)
-H264_WEIGHT(16, 8)
-H264_WEIGHT( 8,16)
-H264_WEIGHT( 8, 8)
-H264_WEIGHT( 8, 4)
-
 void dsputil_h264_init_ppc(DSPContext* c, AVCodecContext *avctx) {
 
     if (has_altivec()) {
@@ -1095,13 +875,7 @@ void dsputil_h264_init_ppc(DSPContext* c, AVCodecContext *avctx) {
         c->put_no_rnd_h264_chroma_pixels_tab[0] = put_no_rnd_h264_chroma_mc8_altivec;
         c->avg_h264_chroma_pixels_tab[0] = avg_h264_chroma_mc8_altivec;
         c->h264_idct_add = ff_h264_idct_add_altivec;
-        c->h264_idct_add8 = ff_h264_idct_add8_altivec;
-        c->h264_idct_add16 = ff_h264_idct_add16_altivec;
-        c->h264_idct_add16intra = ff_h264_idct_add16intra_altivec;
-        c->h264_idct_dc_add= h264_idct_dc_add_altivec;
-        c->h264_idct8_dc_add = ff_h264_idct8_dc_add_altivec;
         c->h264_idct8_add = ff_h264_idct8_add_altivec;
-        c->h264_idct8_add4 = ff_h264_idct8_add4_altivec;
         c->h264_v_loop_filter_luma= h264_v_loop_filter_luma_altivec;
         c->h264_h_loop_filter_luma= h264_h_loop_filter_luma_altivec;
 
@@ -1126,16 +900,5 @@ void dsputil_h264_init_ppc(DSPContext* c, AVCodecContext *avctx) {
         dspfunc(put_h264_qpel, 0, 16);
         dspfunc(avg_h264_qpel, 0, 16);
 #undef dspfunc
-
-        c->weight_h264_pixels_tab[0] = ff_weight_h264_pixels16x16_altivec;
-        c->weight_h264_pixels_tab[1] = ff_weight_h264_pixels16x8_altivec;
-        c->weight_h264_pixels_tab[2] = ff_weight_h264_pixels8x16_altivec;
-        c->weight_h264_pixels_tab[3] = ff_weight_h264_pixels8x8_altivec;
-        c->weight_h264_pixels_tab[4] = ff_weight_h264_pixels8x4_altivec;
-        c->biweight_h264_pixels_tab[0] = ff_biweight_h264_pixels16x16_altivec;
-        c->biweight_h264_pixels_tab[1] = ff_biweight_h264_pixels16x8_altivec;
-        c->biweight_h264_pixels_tab[2] = ff_biweight_h264_pixels8x16_altivec;
-        c->biweight_h264_pixels_tab[3] = ff_biweight_h264_pixels8x8_altivec;
-        c->biweight_h264_pixels_tab[4] = ff_biweight_h264_pixels8x4_altivec;
     }
 }
diff --git a/libavcodec/ppc/h264_template_altivec.c b/libavcodec/ppc/h264_template_altivec.c
index 5f722d0..e050fe5 100644
--- a/libavcodec/ppc/h264_template_altivec.c
+++ b/libavcodec/ppc/h264_template_altivec.c
@@ -28,8 +28,8 @@
 /* this code assume that stride % 16 == 0 */
 
 #define CHROMA_MC8_ALTIVEC_CORE \
-        vsrc2ssH = (vec_s16)vec_mergeh(zero_u8v,(vec_u8)vsrc2uc);\
-        vsrc3ssH = (vec_s16)vec_mergeh(zero_u8v,(vec_u8)vsrc3uc);\
+        vsrc2ssH = (vec_s16_t)vec_mergeh(zero_u8v,(vec_u8_t)vsrc2uc);\
+        vsrc3ssH = (vec_s16_t)vec_mergeh(zero_u8v,(vec_u8_t)vsrc3uc);\
 \
         psum = vec_mladd(vA, vsrc0ssH, v32ss);\
         psum = vec_mladd(vB, vsrc1ssH, psum);\
@@ -38,7 +38,7 @@
         psum = vec_sr(psum, v6us);\
 \
         vdst = vec_ld(0, dst);\
-        ppsum = (vec_u8)vec_pack(psum, psum);\
+        ppsum = (vec_u8_t)vec_pack(psum, psum);\
         vfdst = vec_perm(vdst, ppsum, fperm);\
 \
         OP_U8_ALTIVEC(fsum, vfdst, vdst);\
@@ -53,15 +53,15 @@
 
 #define CHROMA_MC8_ALTIVEC_CORE_SIMPLE \
 \
-        vsrc0ssH = (vec_s16)vec_mergeh(zero_u8v,(vec_u8)vsrc0uc);\
-        vsrc1ssH = (vec_s16)vec_mergeh(zero_u8v,(vec_u8)vsrc1uc);\
+        vsrc0ssH = (vec_s16_t)vec_mergeh(zero_u8v,(vec_u8_t)vsrc0uc);\
+        vsrc1ssH = (vec_s16_t)vec_mergeh(zero_u8v,(vec_u8_t)vsrc1uc);\
 \
         psum = vec_mladd(vA, vsrc0ssH, v32ss);\
         psum = vec_mladd(vE, vsrc1ssH, psum);\
         psum = vec_sr(psum, v6us);\
 \
         vdst = vec_ld(0, dst);\
-        ppsum = (vec_u8)vec_pack(psum, psum);\
+        ppsum = (vec_u8_t)vec_pack(psum, psum);\
         vfdst = vec_perm(vdst, ppsum, fperm);\
 \
         OP_U8_ALTIVEC(fsum, vfdst, vdst);\
@@ -80,34 +80,34 @@ void PREFIX_h264_chroma_mc8_altivec(uint8_t * dst, uint8_t * src,
                          ((8 - x) * (    y)),
                          ((    x) * (    y))};
     register int i;
-    vec_u8 fperm;
-    const vec_s32 vABCD = vec_ld(0, ABCD);
-    const vec_s16 vA = vec_splat((vec_s16)vABCD, 1);
-    const vec_s16 vB = vec_splat((vec_s16)vABCD, 3);
-    const vec_s16 vC = vec_splat((vec_s16)vABCD, 5);
-    const vec_s16 vD = vec_splat((vec_s16)vABCD, 7);
+    vec_u8_t fperm;
+    const vec_s32_t vABCD = vec_ld(0, ABCD);
+    const vec_s16_t vA = vec_splat((vec_s16_t)vABCD, 1);
+    const vec_s16_t vB = vec_splat((vec_s16_t)vABCD, 3);
+    const vec_s16_t vC = vec_splat((vec_s16_t)vABCD, 5);
+    const vec_s16_t vD = vec_splat((vec_s16_t)vABCD, 7);
     LOAD_ZERO;
-    const vec_s16 v32ss = vec_sl(vec_splat_s16(1),vec_splat_u16(5));
-    const vec_u16 v6us = vec_splat_u16(6);
+    const vec_s16_t v32ss = vec_sl(vec_splat_s16(1),vec_splat_u16(5));
+    const vec_u16_t v6us = vec_splat_u16(6);
     register int loadSecond = (((unsigned long)src) % 16) <= 7 ? 0 : 1;
     register int reallyBadAlign = (((unsigned long)src) % 16) == 15 ? 1 : 0;
 
-    vec_u8 vsrcAuc, vsrcBuc, vsrcperm0, vsrcperm1;
-    vec_u8 vsrc0uc, vsrc1uc;
-    vec_s16 vsrc0ssH, vsrc1ssH;
-    vec_u8 vsrcCuc, vsrc2uc, vsrc3uc;
-    vec_s16 vsrc2ssH, vsrc3ssH, psum;
-    vec_u8 vdst, ppsum, vfdst, fsum;
+    vec_u8_t vsrcAuc, vsrcBuc, vsrcperm0, vsrcperm1;
+    vec_u8_t vsrc0uc, vsrc1uc;
+    vec_s16_t vsrc0ssH, vsrc1ssH;
+    vec_u8_t vsrcCuc, vsrc2uc, vsrc3uc;
+    vec_s16_t vsrc2ssH, vsrc3ssH, psum;
+    vec_u8_t vdst, ppsum, vfdst, fsum;
 
   POWERPC_PERF_START_COUNT(PREFIX_h264_chroma_mc8_num, 1);
 
     if (((unsigned long)dst) % 16 == 0) {
-        fperm = (vec_u8){0x10, 0x11, 0x12, 0x13,
+        fperm = (vec_u8_t){0x10, 0x11, 0x12, 0x13,
                            0x14, 0x15, 0x16, 0x17,
                            0x08, 0x09, 0x0A, 0x0B,
                            0x0C, 0x0D, 0x0E, 0x0F};
     } else {
-        fperm = (vec_u8){0x00, 0x01, 0x02, 0x03,
+        fperm = (vec_u8_t){0x00, 0x01, 0x02, 0x03,
                            0x04, 0x05, 0x06, 0x07,
                            0x18, 0x19, 0x1A, 0x1B,
                            0x1C, 0x1D, 0x1E, 0x1F};
@@ -126,8 +126,8 @@ void PREFIX_h264_chroma_mc8_altivec(uint8_t * dst, uint8_t * src,
     else
         vsrc1uc = vec_perm(vsrcAuc, vsrcBuc, vsrcperm1);
 
-    vsrc0ssH = (vec_s16)vec_mergeh(zero_u8v,(vec_u8)vsrc0uc);
-    vsrc1ssH = (vec_s16)vec_mergeh(zero_u8v,(vec_u8)vsrc1uc);
+    vsrc0ssH = (vec_s16_t)vec_mergeh(zero_u8v,(vec_u8_t)vsrc0uc);
+    vsrc1ssH = (vec_s16_t)vec_mergeh(zero_u8v,(vec_u8_t)vsrc1uc);
 
     if (ABCD[3]) {
         if (!loadSecond) {// -> !reallyBadAlign
@@ -139,7 +139,7 @@ void PREFIX_h264_chroma_mc8_altivec(uint8_t * dst, uint8_t * src,
                 CHROMA_MC8_ALTIVEC_CORE
             }
         } else {
-            vec_u8 vsrcDuc;
+            vec_u8_t vsrcDuc;
             for (i = 0 ; i < h ; i++) {
                 vsrcCuc = vec_ld(stride + 0, src);
                 vsrcDuc = vec_ld(stride + 16, src);
@@ -153,7 +153,7 @@ void PREFIX_h264_chroma_mc8_altivec(uint8_t * dst, uint8_t * src,
             }
         }
     } else {
-        const vec_s16 vE = vec_add(vB, vC);
+        const vec_s16_t vE = vec_add(vB, vC);
         if (ABCD[2]) { // x == 0 B == 0
             if (!loadSecond) {// -> !reallyBadAlign
                 for (i = 0 ; i < h ; i++) {
@@ -164,7 +164,7 @@ void PREFIX_h264_chroma_mc8_altivec(uint8_t * dst, uint8_t * src,
                     vsrc0uc = vsrc1uc;
                 }
             } else {
-                vec_u8 vsrcDuc;
+                vec_u8_t vsrcDuc;
                 for (i = 0 ; i < h ; i++) {
                     vsrcCuc = vec_ld(stride + 0, src);
                     vsrcDuc = vec_ld(stride + 15, src);
@@ -184,7 +184,7 @@ void PREFIX_h264_chroma_mc8_altivec(uint8_t * dst, uint8_t * src,
                     CHROMA_MC8_ALTIVEC_CORE_SIMPLE
                 }
             } else {
-                vec_u8 vsrcDuc;
+                vec_u8_t vsrcDuc;
                 for (i = 0 ; i < h ; i++) {
                     vsrcCuc = vec_ld(0, src);
                     vsrcDuc = vec_ld(15, src);
@@ -210,35 +210,35 @@ static void PREFIX_h264_qpel16_h_lowpass_altivec(uint8_t * dst, uint8_t * src, i
     register int i;
 
     LOAD_ZERO;
-    const vec_u8 permM2 = vec_lvsl(-2, src);
-    const vec_u8 permM1 = vec_lvsl(-1, src);
-    const vec_u8 permP0 = vec_lvsl(+0, src);
-    const vec_u8 permP1 = vec_lvsl(+1, src);
-    const vec_u8 permP2 = vec_lvsl(+2, src);
-    const vec_u8 permP3 = vec_lvsl(+3, src);
-    const vec_s16 v5ss = vec_splat_s16(5);
-    const vec_u16 v5us = vec_splat_u16(5);
-    const vec_s16 v20ss = vec_sl(vec_splat_s16(5),vec_splat_u16(2));
-    const vec_s16 v16ss = vec_sl(vec_splat_s16(1),vec_splat_u16(4));
-
-    vec_u8 srcM2, srcM1, srcP0, srcP1, srcP2, srcP3;
+    const vec_u8_t permM2 = vec_lvsl(-2, src);
+    const vec_u8_t permM1 = vec_lvsl(-1, src);
+    const vec_u8_t permP0 = vec_lvsl(+0, src);
+    const vec_u8_t permP1 = vec_lvsl(+1, src);
+    const vec_u8_t permP2 = vec_lvsl(+2, src);
+    const vec_u8_t permP3 = vec_lvsl(+3, src);
+    const vec_s16_t v5ss = vec_splat_s16(5);
+    const vec_u16_t v5us = vec_splat_u16(5);
+    const vec_s16_t v20ss = vec_sl(vec_splat_s16(5),vec_splat_u16(2));
+    const vec_s16_t v16ss = vec_sl(vec_splat_s16(1),vec_splat_u16(4));
+
+    vec_u8_t srcM2, srcM1, srcP0, srcP1, srcP2, srcP3;
 
     register int align = ((((unsigned long)src) - 2) % 16);
 
-    vec_s16 srcP0A, srcP0B, srcP1A, srcP1B,
+    vec_s16_t srcP0A, srcP0B, srcP1A, srcP1B,
               srcP2A, srcP2B, srcP3A, srcP3B,
               srcM1A, srcM1B, srcM2A, srcM2B,
               sum1A, sum1B, sum2A, sum2B, sum3A, sum3B,
               pp1A, pp1B, pp2A, pp2B, pp3A, pp3B,
               psumA, psumB, sumA, sumB;
 
-    vec_u8 sum, vdst, fsum;
+    vec_u8_t sum, vdst, fsum;
 
     POWERPC_PERF_START_COUNT(PREFIX_h264_qpel16_h_lowpass_num, 1);
 
     for (i = 0 ; i < 16 ; i ++) {
-        vec_u8 srcR1 = vec_ld(-2, src);
-        vec_u8 srcR2 = vec_ld(14, src);
+        vec_u8_t srcR1 = vec_ld(-2, src);
+        vec_u8_t srcR2 = vec_ld(14, src);
 
         switch (align) {
         default: {
@@ -258,7 +258,7 @@ static void PREFIX_h264_qpel16_h_lowpass_altivec(uint8_t * dst, uint8_t * src, i
             srcP3 = srcR2;
         } break;
         case 12: {
-            vec_u8 srcR3 = vec_ld(30, src);
+            vec_u8_t srcR3 = vec_ld(30, src);
             srcM2 = vec_perm(srcR1, srcR2, permM2);
             srcM1 = vec_perm(srcR1, srcR2, permM1);
             srcP0 = vec_perm(srcR1, srcR2, permP0);
@@ -267,7 +267,7 @@ static void PREFIX_h264_qpel16_h_lowpass_altivec(uint8_t * dst, uint8_t * src, i
             srcP3 = vec_perm(srcR2, srcR3, permP3);
         } break;
         case 13: {
-            vec_u8 srcR3 = vec_ld(30, src);
+            vec_u8_t srcR3 = vec_ld(30, src);
             srcM2 = vec_perm(srcR1, srcR2, permM2);
             srcM1 = vec_perm(srcR1, srcR2, permM1);
             srcP0 = vec_perm(srcR1, srcR2, permP0);
@@ -276,7 +276,7 @@ static void PREFIX_h264_qpel16_h_lowpass_altivec(uint8_t * dst, uint8_t * src, i
             srcP3 = vec_perm(srcR2, srcR3, permP3);
         } break;
         case 14: {
-            vec_u8 srcR3 = vec_ld(30, src);
+            vec_u8_t srcR3 = vec_ld(30, src);
             srcM2 = vec_perm(srcR1, srcR2, permM2);
             srcM1 = vec_perm(srcR1, srcR2, permM1);
             srcP0 = srcR2;
@@ -285,7 +285,7 @@ static void PREFIX_h264_qpel16_h_lowpass_altivec(uint8_t * dst, uint8_t * src, i
             srcP3 = vec_perm(srcR2, srcR3, permP3);
         } break;
         case 15: {
-            vec_u8 srcR3 = vec_ld(30, src);
+            vec_u8_t srcR3 = vec_ld(30, src);
             srcM2 = vec_perm(srcR1, srcR2, permM2);
             srcM1 = srcR2;
             srcP0 = vec_perm(srcR2, srcR3, permP0);
@@ -295,20 +295,20 @@ static void PREFIX_h264_qpel16_h_lowpass_altivec(uint8_t * dst, uint8_t * src, i
         } break;
         }
 
-        srcP0A = (vec_s16) vec_mergeh(zero_u8v, srcP0);
-        srcP0B = (vec_s16) vec_mergel(zero_u8v, srcP0);
-        srcP1A = (vec_s16) vec_mergeh(zero_u8v, srcP1);
-        srcP1B = (vec_s16) vec_mergel(zero_u8v, srcP1);
+        srcP0A = (vec_s16_t) vec_mergeh(zero_u8v, srcP0);
+        srcP0B = (vec_s16_t) vec_mergel(zero_u8v, srcP0);
+        srcP1A = (vec_s16_t) vec_mergeh(zero_u8v, srcP1);
+        srcP1B = (vec_s16_t) vec_mergel(zero_u8v, srcP1);
 
-        srcP2A = (vec_s16) vec_mergeh(zero_u8v, srcP2);
-        srcP2B = (vec_s16) vec_mergel(zero_u8v, srcP2);
-        srcP3A = (vec_s16) vec_mergeh(zero_u8v, srcP3);
-        srcP3B = (vec_s16) vec_mergel(zero_u8v, srcP3);
+        srcP2A = (vec_s16_t) vec_mergeh(zero_u8v, srcP2);
+        srcP2B = (vec_s16_t) vec_mergel(zero_u8v, srcP2);
+        srcP3A = (vec_s16_t) vec_mergeh(zero_u8v, srcP3);
+        srcP3B = (vec_s16_t) vec_mergel(zero_u8v, srcP3);
 
-        srcM1A = (vec_s16) vec_mergeh(zero_u8v, srcM1);
-        srcM1B = (vec_s16) vec_mergel(zero_u8v, srcM1);
-        srcM2A = (vec_s16) vec_mergeh(zero_u8v, srcM2);
-        srcM2B = (vec_s16) vec_mergel(zero_u8v, srcM2);
+        srcM1A = (vec_s16_t) vec_mergeh(zero_u8v, srcM1);
+        srcM1B = (vec_s16_t) vec_mergel(zero_u8v, srcM1);
+        srcM2A = (vec_s16_t) vec_mergeh(zero_u8v, srcM2);
+        srcM2B = (vec_s16_t) vec_mergel(zero_u8v, srcM2);
 
         sum1A = vec_adds(srcP0A, srcP1A);
         sum1B = vec_adds(srcP0B, srcP1B);
@@ -354,52 +354,52 @@ static void PREFIX_h264_qpel16_v_lowpass_altivec(uint8_t * dst, uint8_t * src, i
     register int i;
 
     LOAD_ZERO;
-    const vec_u8 perm = vec_lvsl(0, src);
-    const vec_s16 v20ss = vec_sl(vec_splat_s16(5),vec_splat_u16(2));
-    const vec_u16 v5us = vec_splat_u16(5);
-    const vec_s16 v5ss = vec_splat_s16(5);
-    const vec_s16 v16ss = vec_sl(vec_splat_s16(1),vec_splat_u16(4));
+    const vec_u8_t perm = vec_lvsl(0, src);
+    const vec_s16_t v20ss = vec_sl(vec_splat_s16(5),vec_splat_u16(2));
+    const vec_u16_t v5us = vec_splat_u16(5);
+    const vec_s16_t v5ss = vec_splat_s16(5);
+    const vec_s16_t v16ss = vec_sl(vec_splat_s16(1),vec_splat_u16(4));
 
     uint8_t *srcbis = src - (srcStride * 2);
 
-    const vec_u8 srcM2a = vec_ld(0, srcbis);
-    const vec_u8 srcM2b = vec_ld(16, srcbis);
-    const vec_u8 srcM2 = vec_perm(srcM2a, srcM2b, perm);
+    const vec_u8_t srcM2a = vec_ld(0, srcbis);
+    const vec_u8_t srcM2b = vec_ld(16, srcbis);
+    const vec_u8_t srcM2 = vec_perm(srcM2a, srcM2b, perm);
     //srcbis += srcStride;
-    const vec_u8 srcM1a = vec_ld(0, srcbis += srcStride);
-    const vec_u8 srcM1b = vec_ld(16, srcbis);
-    const vec_u8 srcM1 = vec_perm(srcM1a, srcM1b, perm);
+    const vec_u8_t srcM1a = vec_ld(0, srcbis += srcStride);
+    const vec_u8_t srcM1b = vec_ld(16, srcbis);
+    const vec_u8_t srcM1 = vec_perm(srcM1a, srcM1b, perm);
     //srcbis += srcStride;
-    const vec_u8 srcP0a = vec_ld(0, srcbis += srcStride);
-    const vec_u8 srcP0b = vec_ld(16, srcbis);
-    const vec_u8 srcP0 = vec_perm(srcP0a, srcP0b, perm);
+    const vec_u8_t srcP0a = vec_ld(0, srcbis += srcStride);
+    const vec_u8_t srcP0b = vec_ld(16, srcbis);
+    const vec_u8_t srcP0 = vec_perm(srcP0a, srcP0b, perm);
     //srcbis += srcStride;
-    const vec_u8 srcP1a = vec_ld(0, srcbis += srcStride);
-    const vec_u8 srcP1b = vec_ld(16, srcbis);
-    const vec_u8 srcP1 = vec_perm(srcP1a, srcP1b, perm);
+    const vec_u8_t srcP1a = vec_ld(0, srcbis += srcStride);
+    const vec_u8_t srcP1b = vec_ld(16, srcbis);
+    const vec_u8_t srcP1 = vec_perm(srcP1a, srcP1b, perm);
     //srcbis += srcStride;
-    const vec_u8 srcP2a = vec_ld(0, srcbis += srcStride);
-    const vec_u8 srcP2b = vec_ld(16, srcbis);
-    const vec_u8 srcP2 = vec_perm(srcP2a, srcP2b, perm);
+    const vec_u8_t srcP2a = vec_ld(0, srcbis += srcStride);
+    const vec_u8_t srcP2b = vec_ld(16, srcbis);
+    const vec_u8_t srcP2 = vec_perm(srcP2a, srcP2b, perm);
     //srcbis += srcStride;
 
-    vec_s16 srcM2ssA = (vec_s16) vec_mergeh(zero_u8v, srcM2);
-    vec_s16 srcM2ssB = (vec_s16) vec_mergel(zero_u8v, srcM2);
-    vec_s16 srcM1ssA = (vec_s16) vec_mergeh(zero_u8v, srcM1);
-    vec_s16 srcM1ssB = (vec_s16) vec_mergel(zero_u8v, srcM1);
-    vec_s16 srcP0ssA = (vec_s16) vec_mergeh(zero_u8v, srcP0);
-    vec_s16 srcP0ssB = (vec_s16) vec_mergel(zero_u8v, srcP0);
-    vec_s16 srcP1ssA = (vec_s16) vec_mergeh(zero_u8v, srcP1);
-    vec_s16 srcP1ssB = (vec_s16) vec_mergel(zero_u8v, srcP1);
-    vec_s16 srcP2ssA = (vec_s16) vec_mergeh(zero_u8v, srcP2);
-    vec_s16 srcP2ssB = (vec_s16) vec_mergel(zero_u8v, srcP2);
-
-    vec_s16 pp1A, pp1B, pp2A, pp2B, pp3A, pp3B,
+    vec_s16_t srcM2ssA = (vec_s16_t) vec_mergeh(zero_u8v, srcM2);
+    vec_s16_t srcM2ssB = (vec_s16_t) vec_mergel(zero_u8v, srcM2);
+    vec_s16_t srcM1ssA = (vec_s16_t) vec_mergeh(zero_u8v, srcM1);
+    vec_s16_t srcM1ssB = (vec_s16_t) vec_mergel(zero_u8v, srcM1);
+    vec_s16_t srcP0ssA = (vec_s16_t) vec_mergeh(zero_u8v, srcP0);
+    vec_s16_t srcP0ssB = (vec_s16_t) vec_mergel(zero_u8v, srcP0);
+    vec_s16_t srcP1ssA = (vec_s16_t) vec_mergeh(zero_u8v, srcP1);
+    vec_s16_t srcP1ssB = (vec_s16_t) vec_mergel(zero_u8v, srcP1);
+    vec_s16_t srcP2ssA = (vec_s16_t) vec_mergeh(zero_u8v, srcP2);
+    vec_s16_t srcP2ssB = (vec_s16_t) vec_mergel(zero_u8v, srcP2);
+
+    vec_s16_t pp1A, pp1B, pp2A, pp2B, pp3A, pp3B,
               psumA, psumB, sumA, sumB,
               srcP3ssA, srcP3ssB,
               sum1A, sum1B, sum2A, sum2B, sum3A, sum3B;
 
-    vec_u8 sum, vdst, fsum, srcP3a, srcP3b, srcP3;
+    vec_u8_t sum, vdst, fsum, srcP3a, srcP3b, srcP3;
 
     POWERPC_PERF_START_COUNT(PREFIX_h264_qpel16_v_lowpass_num, 1);
 
@@ -407,8 +407,8 @@ static void PREFIX_h264_qpel16_v_lowpass_altivec(uint8_t * dst, uint8_t * src, i
         srcP3a = vec_ld(0, srcbis += srcStride);
         srcP3b = vec_ld(16, srcbis);
         srcP3 = vec_perm(srcP3a, srcP3b, perm);
-        srcP3ssA = (vec_s16) vec_mergeh(zero_u8v, srcP3);
-        srcP3ssB = (vec_s16) vec_mergel(zero_u8v, srcP3);
+        srcP3ssA = (vec_s16_t) vec_mergeh(zero_u8v, srcP3);
+        srcP3ssB = (vec_s16_t) vec_mergel(zero_u8v, srcP3);
         //srcbis += srcStride;
 
         sum1A = vec_adds(srcP0ssA, srcP1ssA);
@@ -463,49 +463,49 @@ static void PREFIX_h264_qpel16_hv_lowpass_altivec(uint8_t * dst, int16_t * tmp,
     POWERPC_PERF_DECLARE(PREFIX_h264_qpel16_hv_lowpass_num, 1);
     register int i;
     LOAD_ZERO;
-    const vec_u8 permM2 = vec_lvsl(-2, src);
-    const vec_u8 permM1 = vec_lvsl(-1, src);
-    const vec_u8 permP0 = vec_lvsl(+0, src);
-    const vec_u8 permP1 = vec_lvsl(+1, src);
-    const vec_u8 permP2 = vec_lvsl(+2, src);
-    const vec_u8 permP3 = vec_lvsl(+3, src);
-    const vec_s16 v20ss = vec_sl(vec_splat_s16(5),vec_splat_u16(2));
-    const vec_u32 v10ui = vec_splat_u32(10);
-    const vec_s16 v5ss = vec_splat_s16(5);
-    const vec_s16 v1ss = vec_splat_s16(1);
-    const vec_s32 v512si = vec_sl(vec_splat_s32(1),vec_splat_u32(9));
-    const vec_u32 v16ui = vec_sl(vec_splat_u32(1),vec_splat_u32(4));
+    const vec_u8_t permM2 = vec_lvsl(-2, src);
+    const vec_u8_t permM1 = vec_lvsl(-1, src);
+    const vec_u8_t permP0 = vec_lvsl(+0, src);
+    const vec_u8_t permP1 = vec_lvsl(+1, src);
+    const vec_u8_t permP2 = vec_lvsl(+2, src);
+    const vec_u8_t permP3 = vec_lvsl(+3, src);
+    const vec_s16_t v20ss = vec_sl(vec_splat_s16(5),vec_splat_u16(2));
+    const vec_u32_t v10ui = vec_splat_u32(10);
+    const vec_s16_t v5ss = vec_splat_s16(5);
+    const vec_s16_t v1ss = vec_splat_s16(1);
+    const vec_s32_t v512si = vec_sl(vec_splat_s32(1),vec_splat_u32(9));
+    const vec_u32_t v16ui = vec_sl(vec_splat_u32(1),vec_splat_u32(4));
 
     register int align = ((((unsigned long)src) - 2) % 16);
 
-    vec_s16 srcP0A, srcP0B, srcP1A, srcP1B,
+    vec_s16_t srcP0A, srcP0B, srcP1A, srcP1B,
               srcP2A, srcP2B, srcP3A, srcP3B,
               srcM1A, srcM1B, srcM2A, srcM2B,
               sum1A, sum1B, sum2A, sum2B, sum3A, sum3B,
               pp1A, pp1B, pp2A, pp2B, psumA, psumB;
 
-    const vec_u8 mperm = (const vec_u8)
+    const vec_u8_t mperm = (const vec_u8_t)
         {0x00, 0x08, 0x01, 0x09, 0x02, 0x0A, 0x03, 0x0B,
          0x04, 0x0C, 0x05, 0x0D, 0x06, 0x0E, 0x07, 0x0F};
     int16_t *tmpbis = tmp;
 
-    vec_s16 tmpM1ssA, tmpM1ssB, tmpM2ssA, tmpM2ssB,
+    vec_s16_t tmpM1ssA, tmpM1ssB, tmpM2ssA, tmpM2ssB,
               tmpP0ssA, tmpP0ssB, tmpP1ssA, tmpP1ssB,
               tmpP2ssA, tmpP2ssB;
 
-    vec_s32 pp1Ae, pp1Ao, pp1Be, pp1Bo, pp2Ae, pp2Ao, pp2Be, pp2Bo,
+    vec_s32_t pp1Ae, pp1Ao, pp1Be, pp1Bo, pp2Ae, pp2Ao, pp2Be, pp2Bo,
               pp3Ae, pp3Ao, pp3Be, pp3Bo, pp1cAe, pp1cAo, pp1cBe, pp1cBo,
               pp32Ae, pp32Ao, pp32Be, pp32Bo, sumAe, sumAo, sumBe, sumBo,
               ssumAe, ssumAo, ssumBe, ssumBo;
-    vec_u8 fsum, sumv, sum, vdst;
-    vec_s16 ssume, ssumo;
+    vec_u8_t fsum, sumv, sum, vdst;
+    vec_s16_t ssume, ssumo;
 
     POWERPC_PERF_START_COUNT(PREFIX_h264_qpel16_hv_lowpass_num, 1);
     src -= (2 * srcStride);
     for (i = 0 ; i < 21 ; i ++) {
-        vec_u8 srcM2, srcM1, srcP0, srcP1, srcP2, srcP3;
-        vec_u8 srcR1 = vec_ld(-2, src);
-        vec_u8 srcR2 = vec_ld(14, src);
+        vec_u8_t srcM2, srcM1, srcP0, srcP1, srcP2, srcP3;
+        vec_u8_t srcR1 = vec_ld(-2, src);
+        vec_u8_t srcR2 = vec_ld(14, src);
 
         switch (align) {
         default: {
@@ -525,7 +525,7 @@ static void PREFIX_h264_qpel16_hv_lowpass_altivec(uint8_t * dst, int16_t * tmp,
             srcP3 = srcR2;
         } break;
         case 12: {
-            vec_u8 srcR3 = vec_ld(30, src);
+            vec_u8_t srcR3 = vec_ld(30, src);
             srcM2 = vec_perm(srcR1, srcR2, permM2);
             srcM1 = vec_perm(srcR1, srcR2, permM1);
             srcP0 = vec_perm(srcR1, srcR2, permP0);
@@ -534,7 +534,7 @@ static void PREFIX_h264_qpel16_hv_lowpass_altivec(uint8_t * dst, int16_t * tmp,
             srcP3 = vec_perm(srcR2, srcR3, permP3);
         } break;
         case 13: {
-            vec_u8 srcR3 = vec_ld(30, src);
+            vec_u8_t srcR3 = vec_ld(30, src);
             srcM2 = vec_perm(srcR1, srcR2, permM2);
             srcM1 = vec_perm(srcR1, srcR2, permM1);
             srcP0 = vec_perm(srcR1, srcR2, permP0);
@@ -543,7 +543,7 @@ static void PREFIX_h264_qpel16_hv_lowpass_altivec(uint8_t * dst, int16_t * tmp,
             srcP3 = vec_perm(srcR2, srcR3, permP3);
         } break;
         case 14: {
-            vec_u8 srcR3 = vec_ld(30, src);
+            vec_u8_t srcR3 = vec_ld(30, src);
             srcM2 = vec_perm(srcR1, srcR2, permM2);
             srcM1 = vec_perm(srcR1, srcR2, permM1);
             srcP0 = srcR2;
@@ -552,7 +552,7 @@ static void PREFIX_h264_qpel16_hv_lowpass_altivec(uint8_t * dst, int16_t * tmp,
             srcP3 = vec_perm(srcR2, srcR3, permP3);
         } break;
         case 15: {
-            vec_u8 srcR3 = vec_ld(30, src);
+            vec_u8_t srcR3 = vec_ld(30, src);
             srcM2 = vec_perm(srcR1, srcR2, permM2);
             srcM1 = srcR2;
             srcP0 = vec_perm(srcR2, srcR3, permP0);
@@ -562,20 +562,20 @@ static void PREFIX_h264_qpel16_hv_lowpass_altivec(uint8_t * dst, int16_t * tmp,
         } break;
         }
 
-        srcP0A = (vec_s16) vec_mergeh(zero_u8v, srcP0);
-        srcP0B = (vec_s16) vec_mergel(zero_u8v, srcP0);
-        srcP1A = (vec_s16) vec_mergeh(zero_u8v, srcP1);
-        srcP1B = (vec_s16) vec_mergel(zero_u8v, srcP1);
+        srcP0A = (vec_s16_t) vec_mergeh(zero_u8v, srcP0);
+        srcP0B = (vec_s16_t) vec_mergel(zero_u8v, srcP0);
+        srcP1A = (vec_s16_t) vec_mergeh(zero_u8v, srcP1);
+        srcP1B = (vec_s16_t) vec_mergel(zero_u8v, srcP1);
 
-        srcP2A = (vec_s16) vec_mergeh(zero_u8v, srcP2);
-        srcP2B = (vec_s16) vec_mergel(zero_u8v, srcP2);
-        srcP3A = (vec_s16) vec_mergeh(zero_u8v, srcP3);
-        srcP3B = (vec_s16) vec_mergel(zero_u8v, srcP3);
+        srcP2A = (vec_s16_t) vec_mergeh(zero_u8v, srcP2);
+        srcP2B = (vec_s16_t) vec_mergel(zero_u8v, srcP2);
+        srcP3A = (vec_s16_t) vec_mergeh(zero_u8v, srcP3);
+        srcP3B = (vec_s16_t) vec_mergel(zero_u8v, srcP3);
 
-        srcM1A = (vec_s16) vec_mergeh(zero_u8v, srcM1);
-        srcM1B = (vec_s16) vec_mergel(zero_u8v, srcM1);
-        srcM2A = (vec_s16) vec_mergeh(zero_u8v, srcM2);
-        srcM2B = (vec_s16) vec_mergel(zero_u8v, srcM2);
+        srcM1A = (vec_s16_t) vec_mergeh(zero_u8v, srcM1);
+        srcM1B = (vec_s16_t) vec_mergel(zero_u8v, srcM1);
+        srcM2A = (vec_s16_t) vec_mergeh(zero_u8v, srcM2);
+        srcM2B = (vec_s16_t) vec_mergel(zero_u8v, srcM2);
 
         sum1A = vec_adds(srcP0A, srcP1A);
         sum1B = vec_adds(srcP0B, srcP1B);
@@ -617,15 +617,15 @@ static void PREFIX_h264_qpel16_hv_lowpass_altivec(uint8_t * dst, int16_t * tmp,
     tmpbis += tmpStride;
 
     for (i = 0 ; i < 16 ; i++) {
-        const vec_s16 tmpP3ssA = vec_ld(0, tmpbis);
-        const vec_s16 tmpP3ssB = vec_ld(16, tmpbis);
+        const vec_s16_t tmpP3ssA = vec_ld(0, tmpbis);
+        const vec_s16_t tmpP3ssB = vec_ld(16, tmpbis);
 
-        const vec_s16 sum1A = vec_adds(tmpP0ssA, tmpP1ssA);
-        const vec_s16 sum1B = vec_adds(tmpP0ssB, tmpP1ssB);
-        const vec_s16 sum2A = vec_adds(tmpM1ssA, tmpP2ssA);
-        const vec_s16 sum2B = vec_adds(tmpM1ssB, tmpP2ssB);
-        const vec_s16 sum3A = vec_adds(tmpM2ssA, tmpP3ssA);
-        const vec_s16 sum3B = vec_adds(tmpM2ssB, tmpP3ssB);
+        const vec_s16_t sum1A = vec_adds(tmpP0ssA, tmpP1ssA);
+        const vec_s16_t sum1B = vec_adds(tmpP0ssB, tmpP1ssB);
+        const vec_s16_t sum2A = vec_adds(tmpM1ssA, tmpP2ssA);
+        const vec_s16_t sum2B = vec_adds(tmpM1ssB, tmpP2ssB);
+        const vec_s16_t sum3A = vec_adds(tmpM2ssA, tmpP3ssA);
+        const vec_s16_t sum3B = vec_adds(tmpM2ssB, tmpP3ssB);
 
         tmpbis += tmpStride;
 
@@ -650,9 +650,9 @@ static void PREFIX_h264_qpel16_hv_lowpass_altivec(uint8_t * dst, int16_t * tmp,
         pp2Be = vec_mule(sum2B, v5ss);
         pp2Bo = vec_mulo(sum2B, v5ss);
 
-        pp3Ae = vec_sra((vec_s32)sum3A, v16ui);
+        pp3Ae = vec_sra((vec_s32_t)sum3A, v16ui);
         pp3Ao = vec_mulo(sum3A, v1ss);
-        pp3Be = vec_sra((vec_s32)sum3B, v16ui);
+        pp3Be = vec_sra((vec_s32_t)sum3B, v16ui);
         pp3Bo = vec_mulo(sum3B, v1ss);
 
         pp1cAe = vec_add(pp1Ae, v512si);
diff --git a/libavcodec/ppc/idct_altivec.c b/libavcodec/ppc/idct_altivec.c
index 94b6598..7acef48 100644
--- a/libavcodec/ppc/idct_altivec.c
+++ b/libavcodec/ppc/idct_altivec.c
@@ -40,9 +40,17 @@
 #include "libavcodec/dsputil.h"
 
 #include "gcc_fixes.h"
-#include "types_altivec.h"
+
 #include "dsputil_ppc.h"
 
+#define vector_s16_t vector signed short
+#define const_vector_s16_t const vector signed short
+#define vector_u16_t vector unsigned short
+#define vector_s8_t vector signed char
+#define vector_u8_t vector unsigned char
+#define vector_s32_t vector signed int
+#define vector_u32_t vector unsigned int
+
 #define IDCT_HALF                                       \
     /* 1st stage */                                     \
     t1 = vec_mradds (a1, vx7, vx1 );                    \
@@ -80,11 +88,11 @@
 
 
 #define IDCT                                                            \
-    vec_s16 vx0, vx1, vx2, vx3, vx4, vx5, vx6, vx7;                \
-    vec_s16 vy0, vy1, vy2, vy3, vy4, vy5, vy6, vy7;                \
-    vec_s16 a0, a1, a2, ma2, c4, mc4, zero, bias;                  \
-    vec_s16 t0, t1, t2, t3, t4, t5, t6, t7, t8;                    \
-    vec_u16 shift;                                                 \
+    vector_s16_t vx0, vx1, vx2, vx3, vx4, vx5, vx6, vx7;                \
+    vector_s16_t vy0, vy1, vy2, vy3, vy4, vy5, vy6, vy7;                \
+    vector_s16_t a0, a1, a2, ma2, c4, mc4, zero, bias;                  \
+    vector_s16_t t0, t1, t2, t3, t4, t5, t6, t7, t8;                    \
+    vector_u16_t shift;                                                 \
                                                                         \
     c4 = vec_splat (constants[0], 0);                                   \
     a0 = vec_splat (constants[0], 1);                                   \
@@ -92,7 +100,7 @@
     a2 = vec_splat (constants[0], 3);                                   \
     mc4 = vec_splat (constants[0], 4);                                  \
     ma2 = vec_splat (constants[0], 5);                                  \
-    bias = (vec_s16)vec_splat ((vec_s32)constants[0], 3);     \
+    bias = (vector_s16_t)vec_splat ((vector_s32_t)constants[0], 3);     \
                                                                         \
     zero = vec_splat_s16 (0);                                           \
     shift = vec_splat_u16 (4);                                          \
@@ -148,7 +156,7 @@
     vx7 = vec_sra (vy7, shift);
 
 
-static const vec_s16 constants[5] = {
+static const_vector_s16_t constants[5] = {
     {23170, 13573,  6518, 21895, -23170, -21895,    32,    31},
     {16384, 22725, 21407, 19266,  16384,  19266, 21407, 22725},
     {22725, 31521, 29692, 26722,  22725,  26722, 29692, 31521},
@@ -156,10 +164,10 @@ static const vec_s16 constants[5] = {
     {19266, 26722, 25172, 22654,  19266,  22654, 25172, 26722}
 };
 
-void idct_put_altivec(uint8_t* dest, int stride, vec_s16* block)
+void idct_put_altivec(uint8_t* dest, int stride, vector_s16_t* block)
 {
 POWERPC_PERF_DECLARE(altivec_idct_put_num, 1);
-    vec_u8 tmp;
+    vector_u8_t tmp;
 
 #ifdef CONFIG_POWERPC_PERF
 POWERPC_PERF_START_COUNT(altivec_idct_put_num, 1);
@@ -168,8 +176,8 @@ POWERPC_PERF_START_COUNT(altivec_idct_put_num, 1);
 
 #define COPY(dest,src)                                          \
     tmp = vec_packsu (src, src);                                \
-    vec_ste ((vec_u32)tmp, 0, (unsigned int *)dest);       \
-    vec_ste ((vec_u32)tmp, 4, (unsigned int *)dest);
+    vec_ste ((vector_u32_t)tmp, 0, (unsigned int *)dest);       \
+    vec_ste ((vector_u32_t)tmp, 4, (unsigned int *)dest);
 
     COPY (dest, vx0)    dest += stride;
     COPY (dest, vx1)    dest += stride;
@@ -183,14 +191,14 @@ POWERPC_PERF_START_COUNT(altivec_idct_put_num, 1);
 POWERPC_PERF_STOP_COUNT(altivec_idct_put_num, 1);
 }
 
-void idct_add_altivec(uint8_t* dest, int stride, vec_s16* block)
+void idct_add_altivec(uint8_t* dest, int stride, vector_s16_t* block)
 {
 POWERPC_PERF_DECLARE(altivec_idct_add_num, 1);
-    vec_u8 tmp;
-    vec_s16 tmp2, tmp3;
-    vec_u8 perm0;
-    vec_u8 perm1;
-    vec_u8 p0, p1, p;
+    vector_u8_t tmp;
+    vector_s16_t tmp2, tmp3;
+    vector_u8_t perm0;
+    vector_u8_t perm1;
+    vector_u8_t p0, p1, p;
 
 #ifdef CONFIG_POWERPC_PERF
 POWERPC_PERF_START_COUNT(altivec_idct_add_num, 1);
@@ -207,11 +215,11 @@ POWERPC_PERF_START_COUNT(altivec_idct_add_num, 1);
 #define ADD(dest,src,perm)                                              \
     /* *(uint64_t *)&tmp = *(uint64_t *)dest; */                        \
     tmp = vec_ld (0, dest);                                             \
-    tmp2 = (vec_s16)vec_perm (tmp, (vec_u8)zero, perm);       \
+    tmp2 = (vector_s16_t)vec_perm (tmp, (vector_u8_t)zero, perm);       \
     tmp3 = vec_adds (tmp2, src);                                        \
     tmp = vec_packsu (tmp3, tmp3);                                      \
-    vec_ste ((vec_u32)tmp, 0, (unsigned int *)dest);               \
-    vec_ste ((vec_u32)tmp, 4, (unsigned int *)dest);
+    vec_ste ((vector_u32_t)tmp, 0, (unsigned int *)dest);               \
+    vec_ste ((vector_u32_t)tmp, 4, (unsigned int *)dest);
 
     ADD (dest, vx0, perm0)      dest += stride;
     ADD (dest, vx1, perm1)      dest += stride;
diff --git a/libavcodec/ppc/imgresample_altivec.c b/libavcodec/ppc/imgresample_altivec.c
index fdbca5c..b38e41b 100644
--- a/libavcodec/ppc/imgresample_altivec.c
+++ b/libavcodec/ppc/imgresample_altivec.c
@@ -24,13 +24,17 @@
  * High quality image resampling with polyphase filters - AltiVec bits
  */
 
-#include "util_altivec.h"
-#define FILTER_BITS   8
+#include "gcc_fixes.h"
+
+typedef         union {
+    vector unsigned char v;
+    unsigned char c[16];
+} vec_uc_t;
 
 typedef         union {
     vector signed short v;
     signed short s[8];
-} vec_ss;
+} vec_ss_t;
 
 void v_resample16_altivec(uint8_t *dst, int dst_width, const uint8_t *src,
                           int wrap, int16_t *filter)
@@ -38,7 +42,7 @@ void v_resample16_altivec(uint8_t *dst, int dst_width, const uint8_t *src,
     int sum, i;
     const uint8_t *s;
     vector unsigned char *tv, tmp, dstv, zero;
-    vec_ss srchv[4], srclv[4], fv[4];
+    vec_ss_t srchv[4], srclv[4], fv[4];
     vector signed short zeros, sumhv, sumlv;
     s = src;
 
diff --git a/libavcodec/ppc/int_altivec.c b/libavcodec/ppc/int_altivec.c
index 5cadea2..8bd3936 100644
--- a/libavcodec/ppc/int_altivec.c
+++ b/libavcodec/ppc/int_altivec.c
@@ -79,10 +79,10 @@ static int ssd_int8_vs_int16_altivec(const int8_t *pix1, const int16_t *pix2,
 static void add_int16_altivec(int16_t * v1, int16_t * v2, int order)
 {
     int i;
-    register vec_s16 vec, *pv;
+    register vec_s16_t vec, *pv;
 
     for(i = 0; i < order; i += 8){
-        pv = (vec_s16*)v2;
+        pv = (vec_s16_t*)v2;
         vec = vec_perm(pv[0], pv[1], vec_lvsl(0, v2));
         vec_st(vec_add(vec_ld(0, v1), vec), 0, v1);
         v1 += 8;
@@ -93,10 +93,10 @@ static void add_int16_altivec(int16_t * v1, int16_t * v2, int order)
 static void sub_int16_altivec(int16_t * v1, int16_t * v2, int order)
 {
     int i;
-    register vec_s16 vec, *pv;
+    register vec_s16_t vec, *pv;
 
     for(i = 0; i < order; i += 8){
-        pv = (vec_s16*)v2;
+        pv = (vec_s16_t*)v2;
         vec = vec_perm(pv[0], pv[1], vec_lvsl(0, v2));
         vec_st(vec_sub(vec_ld(0, v1), vec), 0, v1);
         v1 += 8;
@@ -108,9 +108,9 @@ static int32_t scalarproduct_int16_altivec(int16_t * v1, int16_t * v2, int order
 {
     int i;
     LOAD_ZERO;
-    register vec_s16 vec1, *pv;
-    register vec_s32 res = vec_splat_s32(0), t;
-    register vec_u32 shifts;
+    register vec_s16_t vec1, *pv;
+    register vec_s32_t res = vec_splat_s32(0), t;
+    register vec_u32_t shifts;
     DECLARE_ALIGNED_16(int32_t, ires);
 
     shifts = zero_u32v;
@@ -121,7 +121,7 @@ static int32_t scalarproduct_int16_altivec(int16_t * v1, int16_t * v2, int order
     if(shift & 0x01) shifts = vec_add(shifts, vec_splat_u32(0x01));
 
     for(i = 0; i < order; i += 8){
-        pv = (vec_s16*)v1;
+        pv = (vec_s16_t*)v1;
         vec1 = vec_perm(pv[0], pv[1], vec_lvsl(0, v1));
         t = vec_msum(vec1, vec_ld(0, v2), zero_s32v);
         t = vec_sr(t, shifts);
diff --git a/libavcodec/ppc/mathops.h b/libavcodec/ppc/mathops.h
index edfe2ea..776ee62 100644
--- a/libavcodec/ppc/mathops.h
+++ b/libavcodec/ppc/mathops.h
@@ -23,7 +23,7 @@
 #ifndef AVCODEC_PPC_MATHOPS_H
 #define AVCODEC_PPC_MATHOPS_H
 
-#if defined(ARCH_PPC_405)
+#if defined(ARCH_POWERPC_405)
 /* signed 16x16 -> 32 multiply add accumulate */
 #define MAC16(rt, ra, rb) \
     __asm__ ("maclhw %0, %2, %3" : "=r" (rt) : "0" (rt), "r" (ra), "r" (rb));
diff --git a/libavcodec/ppc/mpegvideo_altivec.c b/libavcodec/ppc/mpegvideo_altivec.c
index 28ada7a..ba1719f 100644
--- a/libavcodec/ppc/mpegvideo_altivec.c
+++ b/libavcodec/ppc/mpegvideo_altivec.c
@@ -585,8 +585,8 @@ POWERPC_PERF_STOP_COUNT(altivec_dct_unquantize_h263_num, nCoeffs == 63);
 }
 
 
-void idct_put_altivec(uint8_t *dest, int line_size, int16_t *block);
-void idct_add_altivec(uint8_t *dest, int line_size, int16_t *block);
+extern void idct_put_altivec(uint8_t *dest, int line_size, int16_t *block);
+extern void idct_add_altivec(uint8_t *dest, int line_size, int16_t *block);
 
 void MPV_common_init_altivec(MpegEncContext *s)
 {
diff --git a/libavcodec/ppc/types_altivec.h b/libavcodec/ppc/types_altivec.h
index 2870e83..30963c2 100644
--- a/libavcodec/ppc/types_altivec.h
+++ b/libavcodec/ppc/types_altivec.h
@@ -24,23 +24,23 @@
 /***********************************************************************
  * Vector types
  **********************************************************************/
-#define vec_u8  vector unsigned char
-#define vec_s8  vector signed char
-#define vec_u16 vector unsigned short
-#define vec_s16 vector signed short
-#define vec_u32 vector unsigned int
-#define vec_s32 vector signed int
+#define vec_u8_t  vector unsigned char
+#define vec_s8_t  vector signed char
+#define vec_u16_t vector unsigned short
+#define vec_s16_t vector signed short
+#define vec_u32_t vector unsigned int
+#define vec_s32_t vector signed int
 
 /***********************************************************************
  * Null vector
  **********************************************************************/
-#define LOAD_ZERO const vec_u8 zerov = vec_splat_u8( 0 )
+#define LOAD_ZERO const vec_u8_t zerov = vec_splat_u8( 0 )
 
-#define zero_u8v  (vec_u8)  zerov
-#define zero_s8v  (vec_s8)  zerov
-#define zero_u16v (vec_u16) zerov
-#define zero_s16v (vec_s16) zerov
-#define zero_u32v (vec_u32) zerov
-#define zero_s32v (vec_s32) zerov
+#define zero_u8v  (vec_u8_t)  zerov
+#define zero_s8v  (vec_s8_t)  zerov
+#define zero_u16v (vec_u16_t) zerov
+#define zero_s16v (vec_s16_t) zerov
+#define zero_u32v (vec_u32_t) zerov
+#define zero_s32v (vec_s32_t) zerov
 
 #endif /* AVCODEC_PPC_TYPES_ALTIVEC_H */
diff --git a/libavcodec/pthread.c b/libavcodec/pthread.c
index e178993..702adb5 100644
--- a/libavcodec/pthread.c
+++ b/libavcodec/pthread.c
@@ -25,16 +25,15 @@
 
 #include "avcodec.h"
 
-typedef int (action_func)(AVCodecContext *c, void *arg);
+typedef int (action_t)(AVCodecContext *c, void *arg);
 
 typedef struct ThreadContext {
     pthread_t *workers;
-    action_func *func;
-    void *args;
+    action_t *func;
+    void **args;
     int *rets;
     int rets_count;
     int job_count;
-    int job_size;
 
     pthread_cond_t last_job_cond;
     pthread_cond_t current_job_cond;
@@ -68,7 +67,7 @@ static void* attribute_align_arg worker(void *v)
         }
         pthread_mutex_unlock(&c->current_job_lock);
 
-        c->rets[our_job%c->rets_count] = c->func(avctx, (char*)c->args + our_job*c->job_size);
+        c->rets[our_job%c->rets_count] = c->func(avctx, c->args[our_job]);
 
         pthread_mutex_lock(&c->current_job_lock);
         our_job = c->current_job++;
@@ -101,7 +100,7 @@ void avcodec_thread_free(AVCodecContext *avctx)
     av_freep(&avctx->thread_opaque);
 }
 
-int avcodec_thread_execute(AVCodecContext *avctx, action_func* func, void *arg, int *ret, int job_count, int job_size)
+int avcodec_thread_execute(AVCodecContext *avctx, action_t* func, void **arg, int *ret, int job_count)
 {
     ThreadContext *c= avctx->thread_opaque;
     int dummy_ret;
@@ -113,7 +112,6 @@ int avcodec_thread_execute(AVCodecContext *avctx, action_func* func, void *arg,
 
     c->current_job = avctx->thread_count;
     c->job_count = job_count;
-    c->job_size = job_size;
     c->args = arg;
     c->func = func;
     if (ret) {
@@ -149,7 +147,6 @@ int avcodec_thread_init(AVCodecContext *avctx, int thread_count)
     avctx->thread_count = thread_count;
     c->current_job = 0;
     c->job_count = 0;
-    c->job_size = 0;
     c->done = 0;
     pthread_cond_init(&c->current_job_cond, NULL);
     pthread_cond_init(&c->last_job_cond, NULL);
diff --git a/libavcodec/qcelp_lsp.c b/libavcodec/qcelp_lsp.c
deleted file mode 100644
index a6c6595..0000000
--- a/libavcodec/qcelp_lsp.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * QCELP decoder
- * Copyright (c) 2007 Reynaldo H. Verdejo Pinochet
- *
- * 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 qcelp_lsp.c
- * QCELP decoder
- * @author Reynaldo H. Verdejo Pinochet
- * @remark FFmpeg merging spearheaded by Kenan Gillet
- * @remark Development mentored by Benjamin Larson
- */
-
-#include "libavutil/mathematics.h"
-
-/**
- * initial coefficient to perform bandwidth expansion on LPC
- *
- * @note: 0.9883 looks like an approximation of 253/256.
- *
- * TIA/EIA/IS-733 2.4.3.3.6 6
- */
-#define QCELP_BANDWITH_EXPANSION_COEFF 0.9883
-
-/**
- * Computes the Pa / (1 + z(-1)) or Qa / (1 - z(-1)) coefficients
- * needed for LSP to LPC conversion.
- * We only need to calculate the 6 first elements of the polynomial.
- *
- * @param lspf line spectral pair frequencies
- * @param f [out] polynomial input/output as a vector
- *
- * TIA/EIA/IS-733 2.4.3.3.5-1/2
- */
-static void lsp2polyf(const float *lspf, double *f, int lp_half_order)
-{
-    int i, j;
-
-    f[0] = 1.0;
-    f[1] = -2 * cos(M_PI * lspf[0]);
-    lspf -= 2;
-    for(i=2; i<=lp_half_order; i++)
-    {
-        double val = -2 * cos(M_PI * lspf[2*i]);
-        f[i] = val * f[i-1] + 2*f[i-2];
-        for(j=i-1; j>1; j--)
-            f[j] += f[j-1] * val + f[j-2];
-        f[1] += val;
-    }
-}
-
-/**
- * Reconstructs LPC coefficients from the line spectral pair frequencies
- * and performs bandwidth expansion.
- *
- * @param lspf line spectral pair frequencies
- * @param lpc linear predictive coding coefficients
- *
- * @note: bandwith_expansion_coeff could be precalculated into a table
- *        but it seems to be slower on x86
- *
- * TIA/EIA/IS-733 2.4.3.3.5
- */
-void ff_qcelp_lspf2lpc(const float *lspf, float *lpc)
-{
-    double pa[6], qa[6];
-    int   i;
-    double bandwith_expansion_coeff = -QCELP_BANDWITH_EXPANSION_COEFF * 0.5;
-
-    lsp2polyf(lspf,     pa, 5);
-    lsp2polyf(lspf + 1, qa, 5);
-
-    for (i=4; i>=0; i--)
-    {
-        double paf = pa[i+1] + pa[i];
-        double qaf = qa[i+1] - qa[i];
-
-        lpc[i  ] = paf + qaf;
-        lpc[9-i] = paf - qaf;
-    }
-    for (i=0; i<10; i++)
-    {
-        lpc[i] *= bandwith_expansion_coeff;
-        bandwith_expansion_coeff *= QCELP_BANDWITH_EXPANSION_COEFF;
-    }
-}
diff --git a/libavcodec/qcelpdata.h b/libavcodec/qcelpdata.h
index 9d5915b..cf54c81 100644
--- a/libavcodec/qcelpdata.h
+++ b/libavcodec/qcelpdata.h
@@ -1,5 +1,5 @@
 /*
- * QCELP decoder
+ * part of QCELP decoder
  * Copyright (c) 2007 Reynaldo H. Verdejo Pinochet
  *
  * This file is part of FFmpeg.
@@ -22,48 +22,7 @@
 #ifndef AVCODEC_QCELPDATA_H
 #define AVCODEC_QCELPDATA_H
 
-/**
- * @file qcelpdata.h
- * Data tables for the QCELP decoder
- * @author Reynaldo H. Verdejo Pinochet
- * @remark FFmpeg merging spearheaded by Kenan Gillet
- * @remark Development mentored by Benjamin Larson
- */
-
-#include <stddef.h>
 #include <stdint.h>
-#include "libavutil/common.h"
-
-/**
- * QCELP unpacked data frame
- */
-typedef struct {
-/// @defgroup qcelp_codebook_parameters QCELP excitation codebook parameters
-/// @{
-    uint8_t cbsign[16]; ///!< sign of the codebook gain for each codebook subframe
-    uint8_t cbgain[16]; ///!< unsigned codebook gain for each codebook subframe
-    uint8_t cindex[16]; ///!< codebook index for each codebook subframe
-/// @}
-
-/// @defgroup qcelp_pitch_parameters QCELP pitch prediction parameters
-/// @{
-    uint8_t plag[4];    ///!< pitch lag for each pitch subframe
-    uint8_t pfrac[4];   ///!< fractional pitch lag for each pitch subframe
-    uint8_t pgain[4];   ///!< pitch gain for each pitch subframe
-/// @}
-
-    /**
-     * line spectral pair frequencies (LSP) for RATE_OCTAVE,
-     * line spectral pair frequencies grouped into five vectors
-     * of dimension two (LSPV) for other rates
-     */
-    uint8_t lspv[10];
-
-    /**
-     * reserved bits only present in bitrate 1, 1/4 and 1/8 packets
-     */
-    uint8_t reserved;
-} QCELPFrame;
 
 /**
  * pre-calculated table for hammsinc function
@@ -79,7 +38,7 @@ typedef struct {
     uint8_t bitlen; /*!< number of bits to read */
 } QCELPBitmap;
 
-#define QCELP_OF(variable, bit, len) {offsetof(QCELPFrame, variable), bit, len}
+#define QCELP_OF(variable, bit, len) {offsetof(QCELPContext, variable), bit, len}
 
 /**
  * bitmap unpacking tables for RATE_FULL
@@ -273,7 +232,7 @@ static const QCELPBitmap * const qcelp_unpacking_bitmaps_per_rate[5] = {
     qcelp_rate_full_bitmap,
 };
 
-static const uint16_t qcelp_unpacking_bitmaps_lengths[5] = {
+static const uint16_t qcelp_bits_per_rate[5] = {
     0, ///!< for SILENCE rate
     FF_ARRAY_ELEMS(qcelp_rate_octave_bitmap),
     FF_ARRAY_ELEMS(qcelp_rate_quarter_bitmap),
@@ -419,135 +378,4 @@ static const qcelp_vector * const qcelp_lspvq[5] = {
     qcelp_lspvq5
 };
 
-/**
- * the final gain scalefactor before clipping into a usable output float
- */
-#define QCELP_SCALE 8192.
-
-/**
- * the upper boundary of the clipping, depends on QCELP_SCALE
- */
-#define QCELP_CLIP_UPPER_BOUND (8191.75/8192.)
-
-/**
- * the lower boundary of the clipping, depends on QCELP_SCALE
- */
-#define QCELP_CLIP_LOWER_BOUND -1.
-
-/**
- * table for computing Ga (decoded linear codebook gain magnitude)
- *
- * @note The table could fit in int16_t in x*8 form, but it seems
- *       to be slower on x86
- *
- * TIA/EIA/IS-733 2.4.6.2.1-3
- */
-
-static const float qcelp_g12ga[61] = {
-    1.000/QCELP_SCALE,   1.125/QCELP_SCALE,   1.250/QCELP_SCALE,   1.375/QCELP_SCALE,
-    1.625/QCELP_SCALE,   1.750/QCELP_SCALE,   2.000/QCELP_SCALE,   2.250/QCELP_SCALE,
-    2.500/QCELP_SCALE,   2.875/QCELP_SCALE,   3.125/QCELP_SCALE,   3.500/QCELP_SCALE,
-    4.000/QCELP_SCALE,   4.500/QCELP_SCALE,   5.000/QCELP_SCALE,   5.625/QCELP_SCALE,
-    6.250/QCELP_SCALE,   7.125/QCELP_SCALE,   8.000/QCELP_SCALE,   8.875/QCELP_SCALE,
-   10.000/QCELP_SCALE,  11.250/QCELP_SCALE,  12.625/QCELP_SCALE,  14.125/QCELP_SCALE,
-   15.875/QCELP_SCALE,  17.750/QCELP_SCALE,  20.000/QCELP_SCALE,  22.375/QCELP_SCALE,
-   25.125/QCELP_SCALE,  28.125/QCELP_SCALE,  31.625/QCELP_SCALE,  35.500/QCELP_SCALE,
-   39.750/QCELP_SCALE,  44.625/QCELP_SCALE,  50.125/QCELP_SCALE,  56.250/QCELP_SCALE,
-   63.125/QCELP_SCALE,  70.750/QCELP_SCALE,  79.375/QCELP_SCALE,  89.125/QCELP_SCALE,
-  100.000/QCELP_SCALE, 112.250/QCELP_SCALE, 125.875/QCELP_SCALE, 141.250/QCELP_SCALE,
-  158.500/QCELP_SCALE, 177.875/QCELP_SCALE, 199.500/QCELP_SCALE, 223.875/QCELP_SCALE,
-  251.250/QCELP_SCALE, 281.875/QCELP_SCALE, 316.250/QCELP_SCALE, 354.875/QCELP_SCALE,
-  398.125/QCELP_SCALE, 446.625/QCELP_SCALE, 501.125/QCELP_SCALE, 562.375/QCELP_SCALE,
-  631.000/QCELP_SCALE, 708.000/QCELP_SCALE, 794.375/QCELP_SCALE, 891.250/QCELP_SCALE,
- 1000.000/QCELP_SCALE};
-
-/**
- * circular codebook for rate 1 frames in x*100 form
- *
- * TIA/EIA/IS-733 2.4.6.1-2
- */
-static const int16_t qcelp_rate_full_codebook[128] = {
-     10,  -65,  -59,   12,  110,   34, -134,  157,
-    104,  -84,  -34, -115,   23, -101,    3,   45,
-   -101,  -16,  -59,   28,  -45,  134,  -67,   22,
-     61,  -29,  226,  -26,  -55, -179,  157,  -51,
-   -220,  -93,  -37,   60,  118,   74,  -48,  -95,
-   -181,  111,   36,  -52, -215,   78, -112,   39,
-    -17,  -47, -223,   19,   12,  -98, -142,  130,
-     54, -127,   21,  -12,   39,  -48,   12,  128,
-      6, -167,   82, -102,  -79,   55,  -44,   48,
-    -20,  -53,    8,  -61,   11,  -70, -157, -168,
-     20,  -56,  -74,   78,   33,  -63, -173,   -2,
-    -75,  -53, -146,   77,   66,  -29,    9,  -75,
-     65,  119,  -43,   76,  233,   98,  125, -156,
-    -27,   78,   -9,  170,  176,  143, -148,   -7,
-     27, -136,    5,   27,   18,  139,  204,    7,
-   -184, -197,   52,   -3,   78, -189,    8,  -65
-};
-#define QCELP_RATE_FULL_CODEBOOK_RATIO .01
-
-/**
- * circular codebook for rate 1/2 frames in x*2 form
- *
- * TIA/EIA/IS-733 2.4.6.1-1
- */
-static const int8_t qcelp_rate_half_codebook[128] = {
-     0, -4,  0, -3,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,
-     0, -3, -2,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  5,
-     0,  0,  0,  0,  0,  0,  4,  0,
-     0,  3,  2,  0,  3,  4,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  3,  0,  0,
-    -3,  3,  0,  0, -2,  0,  3,  0,
-     0,  0,  0,  0,  0,  0, -5,  0,
-     0,  0,  0,  3,  0,  0,  0,  3,
-     0,  0,  0,  0,  0,  0,  0,  4,
-     0,  0,  0,  0,  0,  0,  0,  0,
-     0,  3,  6, -3, -4,  0, -3, -3,
-     3, -3,  0,  0,  0,  0,  0,  0,
-     0,  0,  0,  0,  0,  0,  0,  0
-};
-#define QCELP_RATE_HALF_CODEBOOK_RATIO 0.5
-
-/**
- * sqrt(1.887) is the maximum of the pseudorandom
- * white sequence used to generate the scaled codebook
- * vector for bitrate 1/4.
- *
- * TIA/EIA/IS-733 2.4.8.1.2
- */
-#define QCELP_SQRT1887 1.373681186
-
-/**
- * table for impulse response of BPF used to filter
- * the white excitation for bitrate 1/4 synthesis
- *
- * Only half the tables are needed because of symmetry.
- *
- * TIA/EIA/IS-733 2.4.8.1.2-1.1
- */
-static const double qcelp_rnd_fir_coefs[11] = {
-  -1.344519e-1, 1.735384e-2, -6.905826e-2, 2.434368e-2,
-  -8.210701e-2, 3.041388e-2, -9.251384e-2, 3.501983e-2,
-  -9.918777e-2, 3.749518e-2,  8.985137e-1
-};
-
-/**
- * This spread factor is used, for bitrate 1/8 and I_F_Q,
- * to force the LSP frequencies to be at least 80 Hz apart.
- *
- * TIA/EIA/IS-733 2.4.3.3.2
- */
-#define QCELP_LSP_SPREAD_FACTOR 0.02
-
-/**
- * predictor coefficient for the conversion of LSP codes
- * to LSP frequencies for 1/8 and I_F_Q
- *
- * TIA/EIA/IS-733 2.4.3.2.7-2
- */
-#define QCELP_LSP_OCTAVE_PREDICTOR 29.0/32
-
 #endif /* AVCODEC_QCELPDATA_H */
diff --git a/libavcodec/qcelpdec.c b/libavcodec/qcelpdec.c
index c65b094..1b52d3f 100644
--- a/libavcodec/qcelpdec.c
+++ b/libavcodec/qcelpdec.c
@@ -18,21 +18,18 @@
  * License along with FFmpeg; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
-
 /**
  * @file qcelpdec.c
  * QCELP decoder
  * @author Reynaldo H. Verdejo Pinochet
- * @remark FFmpeg merging spearheaded by Kenan Gillet
- * @remark Development mentored by Benjamin Larson
  */
 
 #include <stddef.h>
 
 #include "avcodec.h"
-#include "internal.h"
 #include "bitstream.h"
 
+#include "qcelp.h"
 #include "qcelpdata.h"
 
 #include "celp_math.h"
@@ -41,418 +38,6 @@
 #undef NDEBUG
 #include <assert.h>
 
-typedef enum
-{
-    I_F_Q = -1,    /*!< insufficient frame quality */
-    SILENCE,
-    RATE_OCTAVE,
-    RATE_QUARTER,
-    RATE_HALF,
-    RATE_FULL
-} qcelp_packet_rate;
-
-typedef struct
-{
-    GetBitContext     gb;
-    qcelp_packet_rate bitrate;
-    QCELPFrame        frame;    /*!< unpacked data frame */
-
-    uint8_t  erasure_count;
-    uint8_t  octave_count;      /*!< count the consecutive RATE_OCTAVE frames */
-    float    prev_lspf[10];
-    float    predictor_lspf[10];/*!< LSP predictor for RATE_OCTAVE and I_F_Q */
-    float    pitch_synthesis_filter_mem[303];
-    float    pitch_pre_filter_mem[303];
-    float    rnd_fir_filter_mem[180];
-    float    formant_mem[170];
-    float    last_codebook_gain;
-    int      prev_g1[2];
-    int      prev_bitrate;
-    float    pitch_gain[4];
-    uint8_t  pitch_lag[4];
-    uint16_t first16bits;
-    uint8_t  warned_buf_mismatch_bitrate;
-} QCELPContext;
-
-/**
- * Reconstructs LPC coefficients from the line spectral pair frequencies.
- *
- * TIA/EIA/IS-733 2.4.3.3.5
- */
-void ff_qcelp_lspf2lpc(const float *lspf, float *lpc);
-
-static void weighted_vector_sumf(float *out, const float *in_a,
-                                 const float *in_b, float weight_coeff_a,
-                                 float weight_coeff_b, int length)
-{
-    int i;
-
-    for(i=0; i<length; i++)
-        out[i] = weight_coeff_a * in_a[i]
-               + weight_coeff_b * in_b[i];
-}
-
-/**
- * Initialize the speech codec according to the specification.
- *
- * TIA/EIA/IS-733 2.4.9
- */
-static av_cold int qcelp_decode_init(AVCodecContext *avctx)
-{
-    QCELPContext *q = avctx->priv_data;
-    int i;
-
-    avctx->sample_fmt = SAMPLE_FMT_FLT;
-
-    for(i=0; i<10; i++)
-        q->prev_lspf[i] = (i+1)/11.;
-
-    return 0;
-}
-
-/**
- * Decodes the 10 quantized LSP frequencies from the LSPV/LSP
- * transmission codes of any bitrate and checks for badly received packets.
- *
- * @param q the context
- * @param lspf line spectral pair frequencies
- *
- * @return 0 on success, -1 if the packet is badly received
- *
- * TIA/EIA/IS-733 2.4.3.2.6.2-2, 2.4.8.7.3
- */
-static int decode_lspf(QCELPContext *q, float *lspf)
-{
-    int i;
-    float tmp_lspf, smooth, erasure_coeff;
-    const float *predictors;
-
-    if(q->bitrate == RATE_OCTAVE || q->bitrate == I_F_Q)
-    {
-        predictors = (q->prev_bitrate != RATE_OCTAVE &&
-                       q->prev_bitrate != I_F_Q ?
-                       q->prev_lspf : q->predictor_lspf);
-
-        if(q->bitrate == RATE_OCTAVE)
-        {
-            q->octave_count++;
-
-            for(i=0; i<10; i++)
-            {
-                q->predictor_lspf[i] =
-                             lspf[i] = (q->frame.lspv[i] ?  QCELP_LSP_SPREAD_FACTOR
-                                                         : -QCELP_LSP_SPREAD_FACTOR)
-                                     + predictors[i] * QCELP_LSP_OCTAVE_PREDICTOR
-                                     + (i + 1) * ((1 - QCELP_LSP_OCTAVE_PREDICTOR)/11);
-            }
-            smooth = (q->octave_count < 10 ? .875 : 0.1);
-        }else
-        {
-            erasure_coeff = QCELP_LSP_OCTAVE_PREDICTOR;
-
-            assert(q->bitrate == I_F_Q);
-
-            if(q->erasure_count > 1)
-                erasure_coeff *= (q->erasure_count < 4 ? 0.9 : 0.7);
-
-            for(i=0; i<10; i++)
-            {
-                q->predictor_lspf[i] =
-                             lspf[i] = (i + 1) * ( 1 - erasure_coeff)/11
-                                     + erasure_coeff * predictors[i];
-            }
-            smooth = 0.125;
-        }
-
-        // Check the stability of the LSP frequencies.
-        lspf[0] = FFMAX(lspf[0], QCELP_LSP_SPREAD_FACTOR);
-        for(i=1; i<10; i++)
-            lspf[i] = FFMAX(lspf[i], (lspf[i-1] + QCELP_LSP_SPREAD_FACTOR));
-
-        lspf[9] = FFMIN(lspf[9], (1.0 - QCELP_LSP_SPREAD_FACTOR));
-        for(i=9; i>0; i--)
-            lspf[i-1] = FFMIN(lspf[i-1], (lspf[i] - QCELP_LSP_SPREAD_FACTOR));
-
-        // Low-pass filter the LSP frequencies.
-        weighted_vector_sumf(lspf, lspf, q->prev_lspf, smooth, 1.0-smooth, 10);
-    }else
-    {
-        q->octave_count = 0;
-
-        tmp_lspf = 0.;
-        for(i=0; i<5 ; i++)
-        {
-            lspf[2*i+0] = tmp_lspf += qcelp_lspvq[i][q->frame.lspv[i]][0] * 0.0001;
-            lspf[2*i+1] = tmp_lspf += qcelp_lspvq[i][q->frame.lspv[i]][1] * 0.0001;
-        }
-
-        // Check for badly received packets.
-        if(q->bitrate == RATE_QUARTER)
-        {
-            if(lspf[9] <= .70 || lspf[9] >=  .97)
-                return -1;
-            for(i=3; i<10; i++)
-                if(fabs(lspf[i] - lspf[i-2]) < .08)
-                    return -1;
-        }else
-        {
-            if(lspf[9] <= .66 || lspf[9] >= .985)
-                return -1;
-            for(i=4; i<10; i++)
-                if (fabs(lspf[i] - lspf[i-4]) < .0931)
-                    return -1;
-        }
-    }
-    return 0;
-}
-
-/**
- * Converts codebook transmission codes to GAIN and INDEX.
- *
- * @param q the context
- * @param gain array holding the decoded gain
- *
- * TIA/EIA/IS-733 2.4.6.2
- */
-static void decode_gain_and_index(QCELPContext  *q,
-                                  float *gain) {
-    int   i, subframes_count, g1[16];
-    float slope;
-
-    if(q->bitrate >= RATE_QUARTER)
-    {
-        switch(q->bitrate)
-        {
-            case RATE_FULL: subframes_count = 16; break;
-            case RATE_HALF: subframes_count = 4;  break;
-            default:        subframes_count = 5;
-        }
-        for(i=0; i<subframes_count; i++)
-        {
-            g1[i] = 4 * q->frame.cbgain[i];
-            if(q->bitrate == RATE_FULL && !((i+1) & 3))
-            {
-                g1[i] += av_clip((g1[i-1] + g1[i-2] + g1[i-3]) / 3 - 6, 0, 32);
-            }
-
-            gain[i] = qcelp_g12ga[g1[i]];
-
-            if(q->frame.cbsign[i])
-            {
-                gain[i] = -gain[i];
-                q->frame.cindex[i] = (q->frame.cindex[i]-89) & 127;
-            }
-        }
-
-        q->prev_g1[0] = g1[i-2];
-        q->prev_g1[1] = g1[i-1];
-        q->last_codebook_gain = qcelp_g12ga[g1[i-1]];
-
-        if(q->bitrate == RATE_QUARTER)
-        {
-            // Provide smoothing of the unvoiced excitation energy.
-            gain[7] =     gain[4];
-            gain[6] = 0.4*gain[3] + 0.6*gain[4];
-            gain[5] =     gain[3];
-            gain[4] = 0.8*gain[2] + 0.2*gain[3];
-            gain[3] = 0.2*gain[1] + 0.8*gain[2];
-            gain[2] =     gain[1];
-            gain[1] = 0.6*gain[0] + 0.4*gain[1];
-        }
-    }else
-    {
-        if(q->bitrate == RATE_OCTAVE)
-        {
-            g1[0] = 2 * q->frame.cbgain[0]
-                  + av_clip((q->prev_g1[0] + q->prev_g1[1]) / 2 - 5, 0, 54);
-            subframes_count = 8;
-        }else
-        {
-            assert(q->bitrate == I_F_Q);
-
-            g1[0] = q->prev_g1[1];
-            switch(q->erasure_count)
-            {
-                case 1 : break;
-                case 2 : g1[0] -= 1; break;
-                case 3 : g1[0] -= 2; break;
-                default: g1[0] -= 6;
-            }
-            if(g1[0] < 0)
-                g1[0] = 0;
-            subframes_count = 4;
-        }
-        // This interpolation is done to produce smoother background noise.
-        slope = 0.5*(qcelp_g12ga[g1[0]] - q->last_codebook_gain) / subframes_count;
-        for(i=1; i<=subframes_count; i++)
-            gain[i-1] = q->last_codebook_gain + slope * i;
-
-        q->last_codebook_gain = gain[i-2];
-        q->prev_g1[0] = q->prev_g1[1];
-        q->prev_g1[1] = g1[0];
-    }
-}
-
-/**
- * If the received packet is Rate 1/4 a further sanity check is made of the
- * codebook gain.
- *
- * @param cbgain the unpacked cbgain array
- * @return -1 if the sanity check fails, 0 otherwise
- *
- * TIA/EIA/IS-733 2.4.8.7.3
- */
-static int codebook_sanity_check_for_rate_quarter(const uint8_t *cbgain)
-{
-    int i, diff, prev_diff=0;
-
-    for(i=1; i<5; i++)
-    {
-        diff = cbgain[i] - cbgain[i-1];
-        if(FFABS(diff) > 10)
-            return -1;
-        else if(FFABS(diff - prev_diff) > 12)
-            return -1;
-        prev_diff = diff;
-    }
-    return 0;
-}
-
-/**
- * Computes the scaled codebook vector Cdn From INDEX and GAIN
- * for all rates.
- *
- * The specification lacks some information here.
- *
- * TIA/EIA/IS-733 has an omission on the codebook index determination
- * formula for RATE_FULL and RATE_HALF frames at section 2.4.8.1.1. It says
- * you have to subtract the decoded index parameter from the given scaled
- * codebook vector index 'n' to get the desired circular codebook index, but
- * it does not mention that you have to clamp 'n' to [0-9] in order to get
- * RI-compliant results.
- *
- * The reason for this mistake seems to be the fact they forgot to mention you
- * have to do these calculations per codebook subframe and adjust given
- * equation values accordingly.
- *
- * @param q the context
- * @param gain array holding the 4 pitch subframe gain values
- * @param cdn_vector array for the generated scaled codebook vector
- */
-static void compute_svector(QCELPContext *q, const float *gain,
-                            float *cdn_vector)
-{
-    int      i, j, k;
-    uint16_t cbseed, cindex;
-    float    *rnd, tmp_gain, fir_filter_value;
-
-    switch(q->bitrate)
-    {
-        case RATE_FULL:
-            for(i=0; i<16; i++)
-            {
-                tmp_gain = gain[i] * QCELP_RATE_FULL_CODEBOOK_RATIO;
-                cindex = -q->frame.cindex[i];
-                for(j=0; j<10; j++)
-                    *cdn_vector++ = tmp_gain * qcelp_rate_full_codebook[cindex++ & 127];
-            }
-        break;
-        case RATE_HALF:
-            for(i=0; i<4; i++)
-            {
-                tmp_gain = gain[i] * QCELP_RATE_HALF_CODEBOOK_RATIO;
-                cindex = -q->frame.cindex[i];
-                for (j = 0; j < 40; j++)
-                *cdn_vector++ = tmp_gain * qcelp_rate_half_codebook[cindex++ & 127];
-            }
-        break;
-        case RATE_QUARTER:
-            cbseed = (0x0003 & q->frame.lspv[4])<<14 |
-                     (0x003F & q->frame.lspv[3])<< 8 |
-                     (0x0060 & q->frame.lspv[2])<< 1 |
-                     (0x0007 & q->frame.lspv[1])<< 3 |
-                     (0x0038 & q->frame.lspv[0])>> 3 ;
-            rnd = q->rnd_fir_filter_mem + 20;
-            for(i=0; i<8; i++)
-            {
-                tmp_gain = gain[i] * (QCELP_SQRT1887 / 32768.0);
-                for(k=0; k<20; k++)
-                {
-                    cbseed = 521 * cbseed + 259;
-                    *rnd = (int16_t)cbseed;
-
-                    // FIR filter
-                    fir_filter_value = 0.0;
-                    for(j=0; j<10; j++)
-                        fir_filter_value += qcelp_rnd_fir_coefs[j ]
-                                          * (rnd[-j ] + rnd[-20+j]);
-
-                    fir_filter_value += qcelp_rnd_fir_coefs[10] * rnd[-10];
-                    *cdn_vector++ = tmp_gain * fir_filter_value;
-                    rnd++;
-                }
-            }
-            memcpy(q->rnd_fir_filter_mem, q->rnd_fir_filter_mem + 160, 20 * sizeof(float));
-        break;
-        case RATE_OCTAVE:
-            cbseed = q->first16bits;
-            for(i=0; i<8; i++)
-            {
-                tmp_gain = gain[i] * (QCELP_SQRT1887 / 32768.0);
-                for(j=0; j<20; j++)
-                {
-                    cbseed = 521 * cbseed + 259;
-                    *cdn_vector++ = tmp_gain * (int16_t)cbseed;
-                }
-            }
-        break;
-        case I_F_Q:
-            cbseed = -44; // random codebook index
-            for(i=0; i<4; i++)
-            {
-                tmp_gain = gain[i] * QCELP_RATE_FULL_CODEBOOK_RATIO;
-                for(j=0; j<40; j++)
-                    *cdn_vector++ = tmp_gain * qcelp_rate_full_codebook[cbseed++ & 127];
-            }
-        break;
-        case SILENCE:
-            memset(cdn_vector, 0, 160 * sizeof(float));
-        break;
-    }
-}
-
-/**
- * Apply generic gain control.
- *
- * @param v_out output vector
- * @param v_in gain-controlled vector
- * @param v_ref vector to control gain of
- *
- * FIXME: If v_ref is a zero vector, it energy is zero
- *        and the behavior of the gain control is
- *        undefined in the specs.
- *
- * TIA/EIA/IS-733 2.4.8.3-2/3/4/5, 2.4.8.6
- */
-static void apply_gain_ctrl(float *v_out, const float *v_ref,
-                            const float *v_in)
-{
-    int   i, j, len;
-    float scalefactor;
-
-    for(i=0, j=0; i<4; i++)
-    {
-        scalefactor = ff_dot_productf(v_in + j, v_in + j, 40);
-        if(scalefactor)
-            scalefactor = sqrt(ff_dot_productf(v_ref + j, v_ref + j, 40)
-                        / scalefactor);
-        else
-            ff_log_missing_feature(NULL, "Zero energy for gain control", 1);
-        for(len=j+40; j<len; j++)
-            v_out[j] = scalefactor * v_in[j];
-    }
-}
-
 /**
  * Apply filter in pitch-subframe steps.
  *
@@ -465,33 +50,29 @@ static void apply_gain_ctrl(float *v_out, const float *v_ref,
  * @param lag per-subframe lag array, each element is
  *        - between 16 and 143 if its corresponding pfrac is 0,
  *        - between 16 and 139 otherwise
- * @param pfrac per-subframe boolean array, 1 if the lag is fractional, 0
- *        otherwise
+ * @param pfrac per-subframe boolean array, 1 if the lag is fractional, 0 otherwise
  *
  * @return filter output vector
  */
-static const float *do_pitchfilter(float memory[303], const float v_in[160],
-                                   const float gain[4], const uint8_t *lag,
-                                   const uint8_t pfrac[4])
-{
+static const float *do_pitchfilter(float memory[303],
+                                   const float v_in[160],
+                                   const float gain[4],
+                                   const uint8_t *lag,
+                                   const uint8_t pfrac[4]) {
     int         i, j;
     float       *v_lag, *v_out;
     const float *v_len;
 
     v_out = memory + 143; // Output vector starts at memory[143].
 
-    for(i=0; i<4; i++)
-    {
-        if(gain[i])
-        {
+    for (i = 0; i < 4; i++)
+        if (gain[i]) {
             v_lag = memory + 143 + 40 * i - lag[i];
-            for(v_len=v_in+40; v_in<v_len; v_in++)
-            {
-                if(pfrac[i]) // If it is a fractional lag...
-                {
-                    for(j=0, *v_out=0.; j<4; j++)
+            for (v_len = v_in + 40; v_in < v_len; v_in++) {
+                if (pfrac[i]) { // If it is a fractional lag...
+                    for (j = 0, *v_out = 0.; j < 4; j++)
                         *v_out += qcelp_hammsinc_table[j] * (v_lag[j-4] + v_lag[3-j]);
-                }else
+                } else
                     *v_out = *v_lag;
 
                 *v_out = *v_in + gain[i] * *v_out;
@@ -499,322 +80,17 @@ static const float *do_pitchfilter(float memory[303], const float v_in[160],
                 v_lag++;
                 v_out++;
             }
-        }else
-        {
+        } else {
             memcpy(v_out, v_in, 40 * sizeof(float));
             v_in  += 40;
             v_out += 40;
         }
-    }
 
     memmove(memory, memory + 160, 143 * sizeof(float));
     return memory + 143;
 }
 
-/**
- * Apply pitch synthesis filter and pitch prefilter to the scaled codebook vector.
- * TIA/EIA/IS-733 2.4.5.2, 2.4.8.7.2
- *
- * @param q the context
- * @param cdn_vector the scaled codebook vector
- */
-static void apply_pitch_filters(QCELPContext *q, float *cdn_vector)
-{
-    int         i;
-    const float *v_synthesis_filtered, *v_pre_filtered;
-
-    if(q->bitrate >= RATE_HALF ||
-       q->bitrate == SILENCE ||
-       (q->bitrate == I_F_Q && (q->prev_bitrate >= RATE_HALF)))
-    {
-
-        if(q->bitrate >= RATE_HALF)
-        {
-
-            // Compute gain & lag for the whole frame.
-            for(i=0; i<4; i++)
-            {
-                q->pitch_gain[i] = q->frame.plag[i] ? (q->frame.pgain[i] + 1) * 0.25 : 0.0;
-
-                q->pitch_lag[i] = q->frame.plag[i] + 16;
-            }
-        }else
-        {
-            float max_pitch_gain;
-
-            if (q->bitrate == I_F_Q)
-            {
-                  if (q->erasure_count < 3)
-                      max_pitch_gain = 0.9 - 0.3 * (q->erasure_count - 1);
-                  else
-                      max_pitch_gain = 0.0;
-            }else
-            {
-                assert(q->bitrate == SILENCE);
-                max_pitch_gain = 1.0;
-            }
-            for(i=0; i<4; i++)
-                q->pitch_gain[i] = FFMIN(q->pitch_gain[i], max_pitch_gain);
-
-            memset(q->frame.pfrac, 0, sizeof(q->frame.pfrac));
-        }
-
-        // pitch synthesis filter
-        v_synthesis_filtered = do_pitchfilter(q->pitch_synthesis_filter_mem,
-                                              cdn_vector, q->pitch_gain,
-                                              q->pitch_lag, q->frame.pfrac);
-
-        // pitch prefilter update
-        for(i=0; i<4; i++)
-            q->pitch_gain[i] = 0.5 * FFMIN(q->pitch_gain[i], 1.0);
-
-        v_pre_filtered = do_pitchfilter(q->pitch_pre_filter_mem,
-                                        v_synthesis_filtered,
-                                        q->pitch_gain, q->pitch_lag,
-                                        q->frame.pfrac);
-
-        apply_gain_ctrl(cdn_vector, v_synthesis_filtered, v_pre_filtered);
-    }else
-    {
-        memcpy(q->pitch_synthesis_filter_mem, cdn_vector + 17,
-               143 * sizeof(float));
-        memcpy(q->pitch_pre_filter_mem, cdn_vector + 17, 143 * sizeof(float));
-        memset(q->pitch_gain, 0, sizeof(q->pitch_gain));
-        memset(q->pitch_lag,  0, sizeof(q->pitch_lag));
-    }
-}
-
-/**
- * Interpolates LSP frequencies and computes LPC coefficients
- * for a given bitrate & pitch subframe.
- *
- * TIA/EIA/IS-733 2.4.3.3.4, 2.4.8.7.2
- *
- * @param q the context
- * @param curr_lspf LSP frequencies vector of the current frame
- * @param lpc float vector for the resulting LPC
- * @param subframe_num frame number in decoded stream
- */
-void interpolate_lpc(QCELPContext *q, const float *curr_lspf, float *lpc,
-                     const int subframe_num)
-{
-    float interpolated_lspf[10];
-    float weight;
-
-    if(q->bitrate >= RATE_QUARTER)
-        weight = 0.25 * (subframe_num + 1);
-    else if(q->bitrate == RATE_OCTAVE && !subframe_num)
-        weight = 0.625;
-    else
-        weight = 1.0;
-
-    if(weight != 1.0)
-    {
-        weighted_vector_sumf(interpolated_lspf, curr_lspf, q->prev_lspf,
-                             weight, 1.0 - weight, 10);
-        ff_qcelp_lspf2lpc(interpolated_lspf, lpc);
-    }else if(q->bitrate >= RATE_QUARTER ||
-             (q->bitrate == I_F_Q && !subframe_num))
-        ff_qcelp_lspf2lpc(curr_lspf, lpc);
-    else if(q->bitrate == SILENCE && !subframe_num)
-        ff_qcelp_lspf2lpc(q->prev_lspf, lpc);
-}
-
-static qcelp_packet_rate buf_size2bitrate(const int buf_size)
-{
-    switch(buf_size)
-    {
-        case 35: return RATE_FULL;
-        case 17: return RATE_HALF;
-        case  8: return RATE_QUARTER;
-        case  4: return RATE_OCTAVE;
-        case  1: return SILENCE;
-    }
-
-    return I_F_Q;
-}
-
-/**
- * Determine the bitrate from the frame size and/or the first byte of the frame.
- *
- * @param avctx the AV codec context
- * @param buf_size length of the buffer
- * @param buf the bufffer
- *
- * @return the bitrate on success,
- *         I_F_Q  if the bitrate cannot be satisfactorily determined
- *
- * TIA/EIA/IS-733 2.4.8.7.1
- */
-static qcelp_packet_rate determine_bitrate(AVCodecContext *avctx, const int buf_size,
-                             const uint8_t **buf)
-{
-    qcelp_packet_rate bitrate;
-
-    if((bitrate = buf_size2bitrate(buf_size)) >= 0)
-    {
-        if(bitrate > **buf)
-        {
-            QCELPContext *q = avctx->priv_data;
-            if (!q->warned_buf_mismatch_bitrate)
-            {
-            av_log(avctx, AV_LOG_WARNING,
-                   "Claimed bitrate and buffer size mismatch.\n");
-                q->warned_buf_mismatch_bitrate = 1;
-            }
-            bitrate = **buf;
-        }else if(bitrate < **buf)
-        {
-            av_log(avctx, AV_LOG_ERROR,
-                   "Buffer is too small for the claimed bitrate.\n");
-            return I_F_Q;
-        }
-        (*buf)++;
-    }else if((bitrate = buf_size2bitrate(buf_size + 1)) >= 0)
-    {
-        av_log(avctx, AV_LOG_WARNING,
-               "Bitrate byte is missing, guessing the bitrate from packet size.\n");
-    }else
-        return I_F_Q;
-
-    if(bitrate == SILENCE)
-    {
-        //FIXME: Remove experimental warning when tested with samples.
-        av_log(avctx, AV_LOG_WARNING, "'Blank frame handling is experimental."
-                      " If you want to help, upload a sample "
-                      "of this file to ftp://upload.ffmpeg.org/MPlayer/incoming/ "
-                      "and contact the ffmpeg-devel mailing list.\n");
-    }
-    return bitrate;
-}
-
 static void warn_insufficient_frame_quality(AVCodecContext *avctx,
-                                            const char *message)
-{
-    av_log(avctx, AV_LOG_WARNING, "Frame #%d, IFQ: %s\n", avctx->frame_number,
-           message);
+                                            const char *message) {
+    av_log(avctx, AV_LOG_WARNING, "Frame #%d, IFQ: %s\n", avctx->frame_number, message);
 }
-
-static int qcelp_decode_frame(AVCodecContext *avctx, void *data, int *data_size,
-                              const uint8_t *buf, int buf_size)
-{
-    QCELPContext *q = avctx->priv_data;
-    float *outbuffer = data;
-    int   i;
-    float quantized_lspf[10], lpc[10];
-    float gain[16];
-    float *formant_mem;
-
-    if((q->bitrate = determine_bitrate(avctx, buf_size, &buf)) == I_F_Q)
-    {
-        warn_insufficient_frame_quality(avctx, "bitrate cannot be determined.");
-        goto erasure;
-    }
-
-    if(q->bitrate == RATE_OCTAVE &&
-       (q->first16bits = AV_RB16(buf)) == 0xFFFF)
-    {
-        warn_insufficient_frame_quality(avctx, "Bitrate is 1/8 and first 16 bits are on.");
-        goto erasure;
-    }
-
-    if(q->bitrate > SILENCE)
-    {
-        const QCELPBitmap *bitmaps     = qcelp_unpacking_bitmaps_per_rate[q->bitrate];
-        const QCELPBitmap *bitmaps_end = qcelp_unpacking_bitmaps_per_rate[q->bitrate]
-                                       + qcelp_unpacking_bitmaps_lengths[q->bitrate];
-        uint8_t           *unpacked_data = (uint8_t *)&q->frame;
-
-        init_get_bits(&q->gb, buf, 8*buf_size);
-
-        memset(&q->frame, 0, sizeof(QCELPFrame));
-
-        for(; bitmaps < bitmaps_end; bitmaps++)
-            unpacked_data[bitmaps->index] |= get_bits(&q->gb, bitmaps->bitlen) << bitmaps->bitpos;
-
-        // Check for erasures/blanks on rates 1, 1/4 and 1/8.
-        if(q->frame.reserved)
-        {
-            warn_insufficient_frame_quality(avctx, "Wrong data in reserved frame area.");
-            goto erasure;
-        }
-        if(q->bitrate == RATE_QUARTER &&
-           codebook_sanity_check_for_rate_quarter(q->frame.cbgain))
-        {
-            warn_insufficient_frame_quality(avctx, "Codebook gain sanity check failed.");
-            goto erasure;
-        }
-
-        if(q->bitrate >= RATE_HALF)
-        {
-            for(i=0; i<4; i++)
-            {
-                if(q->frame.pfrac[i] && q->frame.plag[i] >= 124)
-                {
-                    warn_insufficient_frame_quality(avctx, "Cannot initialize pitch filter.");
-                    goto erasure;
-                }
-            }
-        }
-    }
-
-    decode_gain_and_index(q, gain);
-    compute_svector(q, gain, outbuffer);
-
-    if(decode_lspf(q, quantized_lspf) < 0)
-    {
-        warn_insufficient_frame_quality(avctx, "Badly received packets in frame.");
-        goto erasure;
-    }
-
-
-    apply_pitch_filters(q, outbuffer);
-
-    if(q->bitrate == I_F_Q)
-    {
-erasure:
-        q->bitrate = I_F_Q;
-        q->erasure_count++;
-        decode_gain_and_index(q, gain);
-        compute_svector(q, gain, outbuffer);
-        decode_lspf(q, quantized_lspf);
-        apply_pitch_filters(q, outbuffer);
-    }else
-        q->erasure_count = 0;
-
-    formant_mem = q->formant_mem + 10;
-    for(i=0; i<4; i++)
-    {
-        interpolate_lpc(q, quantized_lspf, lpc, i);
-        ff_celp_lp_synthesis_filterf(formant_mem, lpc, outbuffer + i * 40, 40,
-                                     10);
-        formant_mem += 40;
-    }
-    memcpy(q->formant_mem, q->formant_mem + 160, 10 * sizeof(float));
-
-    // FIXME: postfilter and final gain control should be here.
-    // TIA/EIA/IS-733 2.4.8.6
-
-    formant_mem = q->formant_mem + 10;
-    for(i=0; i<160; i++)
-        *outbuffer++ = av_clipf(*formant_mem++, QCELP_CLIP_LOWER_BOUND,
-                                QCELP_CLIP_UPPER_BOUND);
-
-    memcpy(q->prev_lspf, quantized_lspf, sizeof(q->prev_lspf));
-    q->prev_bitrate = q->bitrate;
-
-    *data_size = 160 * sizeof(*outbuffer);
-
-    return *data_size;
-}
-
-AVCodec qcelp_decoder =
-{
-    .name   = "qcelp",
-    .type   = CODEC_TYPE_AUDIO,
-    .id     = CODEC_ID_QCELP,
-    .init   = qcelp_decode_init,
-    .decode = qcelp_decode_frame,
-    .priv_data_size = sizeof(QCELPContext),
-    .long_name = NULL_IF_CONFIG_SMALL("QCELP / PureVoice"),
-};
diff --git a/libavcodec/ratecontrol.c b/libavcodec/ratecontrol.c
index c88059a..8e248b9 100644
--- a/libavcodec/ratecontrol.c
+++ b/libavcodec/ratecontrol.c
@@ -461,7 +461,7 @@ static double modify_qscale(MpegEncContext *s, RateControlEntry *rce, double q,
             else if(d<0.0001) d=0.0001;
             q*= pow(d, 1.0/s->avctx->rc_buffer_aggressivity);
 
-            q_limit= bits2qp(rce, FFMAX((min_rate - buffer_size + rcc->buffer_index) * s->avctx->rc_min_vbv_overflow_use, 1));
+            q_limit= bits2qp(rce, FFMAX((min_rate - buffer_size + rcc->buffer_index)*3, 1));
             if(q > q_limit){
                 if(s->avctx->debug&FF_DEBUG_RC){
                     av_log(s->avctx, AV_LOG_DEBUG, "limiting QP %f -> %f\n", q, q_limit);
@@ -476,7 +476,7 @@ static double modify_qscale(MpegEncContext *s, RateControlEntry *rce, double q,
             else if(d<0.0001) d=0.0001;
             q/= pow(d, 1.0/s->avctx->rc_buffer_aggressivity);
 
-            q_limit= bits2qp(rce, FFMAX(rcc->buffer_index * s->avctx->rc_max_available_vbv_use, 1));
+            q_limit= bits2qp(rce, FFMAX(rcc->buffer_index/3, 1));
             if(q < q_limit){
                 if(s->avctx->debug&FF_DEBUG_RC){
                     av_log(s->avctx, AV_LOG_DEBUG, "limiting QP %f -> %f\n", q, q_limit);
diff --git a/libavcodec/raw.c b/libavcodec/raw.c
index de10f28..c88830c 100644
--- a/libavcodec/raw.c
+++ b/libavcodec/raw.c
@@ -51,7 +51,6 @@ const PixelFormatTag ff_raw_pixelFormatTags[] = {
     /* quicktime */
     { PIX_FMT_UYVY422, MKTAG('2', 'v', 'u', 'y') },
     { PIX_FMT_UYVY422, MKTAG('A', 'V', 'U', 'I') }, /* FIXME merge both fields */
-    { PIX_FMT_PAL8,    MKTAG('W', 'R', 'A', 'W') },
 
     { PIX_FMT_NONE, 0 },
 };
diff --git a/libavcodec/roqaudioenc.c b/libavcodec/roqaudioenc.c
index 28a6adc..df014a4 100644
--- a/libavcodec/roqaudioenc.c
+++ b/libavcodec/roqaudioenc.c
@@ -35,7 +35,7 @@ static unsigned char dpcmValues[MAX_DPCM];
 typedef struct
 {
     short lastSample[2];
-} ROQDPCMContext;
+} ROQDPCMContext_t;
 
 static av_cold void roq_dpcm_table_init(void)
 {
@@ -51,7 +51,7 @@ static av_cold void roq_dpcm_table_init(void)
 
 static int roq_dpcm_encode_init(AVCodecContext *avctx)
 {
-    ROQDPCMContext *context = avctx->priv_data;
+    ROQDPCMContext_t *context = avctx->priv_data;
 
     if (avctx->channels > 2) {
         av_log(avctx, AV_LOG_ERROR, "Audio must be mono or stereo\n");
@@ -123,7 +123,7 @@ static int roq_dpcm_encode_frame(AVCodecContext *avctx,
     short *in;
     unsigned char *out;
 
-    ROQDPCMContext *context = avctx->priv_data;
+    ROQDPCMContext_t *context = avctx->priv_data;
 
     stereo = (avctx->channels == 2);
 
@@ -169,7 +169,7 @@ AVCodec roq_dpcm_encoder = {
     "roq_dpcm",
     CODEC_TYPE_AUDIO,
     CODEC_ID_ROQ_DPCM,
-    sizeof(ROQDPCMContext),
+    sizeof(ROQDPCMContext_t),
     roq_dpcm_encode_init,
     roq_dpcm_encode_frame,
     roq_dpcm_encode_close,
diff --git a/libavcodec/roqvideoenc.c b/libavcodec/roqvideoenc.c
index 3b405cc..a115e58 100644
--- a/libavcodec/roqvideoenc.c
+++ b/libavcodec/roqvideoenc.c
@@ -190,20 +190,20 @@ typedef struct
     int subCels[4];
     motion_vect motion;
     int cbEntry;
-} SubcelEvaluation;
+} subcel_evaluation_t;
 
 typedef struct
 {
     int eval_dist[4];
     int best_coding;
 
-    SubcelEvaluation subCels[4];
+    subcel_evaluation_t subCels[4];
 
     motion_vect motion;
     int cbEntry;
 
     int sourceX, sourceY;
-} CelEvaluation;
+} cel_evaluation_t;
 
 typedef struct
 {
@@ -214,14 +214,14 @@ typedef struct
     uint8_t unpacked_cb2[MAX_CBS_2x2*2*2*3];
     uint8_t unpacked_cb4[MAX_CBS_4x4*4*4*3];
     uint8_t unpacked_cb4_enlarged[MAX_CBS_4x4*8*8*3];
-} RoqCodebooks;
+} roq_codebooks_t;
 
 /**
  * Temporary vars
  */
 typedef struct
 {
-    CelEvaluation *cel_evals;
+    cel_evaluation_t *cel_evals;
 
     int f2i4[MAX_CBS_4x4];
     int i2f4[MAX_CBS_4x4];
@@ -233,20 +233,20 @@ typedef struct
     int numCB4;
     int numCB2;
 
-    RoqCodebooks codebooks;
+    roq_codebooks_t codebooks;
 
     int *closest_cb2;
     int used_option[4];
-} RoqTempdata;
+} roq_tempdata_t;
 
 /**
  * Initializes cel evaluators and sets their source coordinates
  */
-static void create_cel_evals(RoqContext *enc, RoqTempdata *tempData)
+static void create_cel_evals(RoqContext *enc, roq_tempdata_t *tempData)
 {
     int n=0, x, y, i;
 
-    tempData->cel_evals = av_malloc(enc->width*enc->height/64 * sizeof(CelEvaluation));
+    tempData->cel_evals = av_malloc(enc->width*enc->height/64 * sizeof(cel_evaluation_t));
 
     /* Map to the ROQ quadtree order */
     for (y=0; y<enc->height; y+=16)
@@ -395,8 +395,8 @@ static void motion_search(RoqContext *enc, int blocksize)
 /**
  * Gets distortion for all options available to a subcel
  */
-static void gather_data_for_subcel(SubcelEvaluation *subcel, int x,
-                                   int y, RoqContext *enc, RoqTempdata *tempData)
+static void gather_data_for_subcel(subcel_evaluation_t *subcel, int x,
+                                   int y, RoqContext *enc, roq_tempdata_t *tempData)
 {
     uint8_t mb4[4*4*3];
     uint8_t mb2[2*2*3];
@@ -459,8 +459,8 @@ static void gather_data_for_subcel(SubcelEvaluation *subcel, int x,
 /**
  * Gets distortion for all options available to a cel
  */
-static void gather_data_for_cel(CelEvaluation *cel, RoqContext *enc,
-                                RoqTempdata *tempData)
+static void gather_data_for_cel(cel_evaluation_t *cel, RoqContext *enc,
+                                roq_tempdata_t *tempData)
 {
     uint8_t mb8[8*8*3];
     int index = cel->sourceY*enc->width/64 + cel->sourceX/8;
@@ -533,7 +533,7 @@ static void gather_data_for_cel(CelEvaluation *cel, RoqContext *enc,
         }
 }
 
-static void remap_codebooks(RoqContext *enc, RoqTempdata *tempData)
+static void remap_codebooks(RoqContext *enc, roq_tempdata_t *tempData)
 {
     int i, j, idx=0;
 
@@ -565,7 +565,7 @@ static void remap_codebooks(RoqContext *enc, RoqTempdata *tempData)
 /**
  * Write codebook chunk
  */
-static void write_codebooks(RoqContext *enc, RoqTempdata *tempData)
+static void write_codebooks(RoqContext *enc, roq_tempdata_t *tempData)
 {
     int i, j;
     uint8_t **outp= &enc->out_buf;
@@ -620,7 +620,7 @@ static void write_typecode(CodingSpool *s, uint8_t type)
     }
 }
 
-static void reconstruct_and_encode_image(RoqContext *enc, RoqTempdata *tempData, int w, int h, int numBlocks)
+static void reconstruct_and_encode_image(RoqContext *enc, roq_tempdata_t *tempData, int w, int h, int numBlocks)
 {
     int i, j, k;
     int x, y;
@@ -628,7 +628,7 @@ static void reconstruct_and_encode_image(RoqContext *enc, RoqTempdata *tempData,
     int dist=0;
 
     roq_qcell *qcell;
-    CelEvaluation *eval;
+    cel_evaluation_t *eval;
 
     CodingSpool spool;
 
@@ -789,7 +789,7 @@ static void create_clusters(AVFrame *frame, int w, int h, uint8_t *yuvClusters)
         }
 }
 
-static void generate_codebook(RoqContext *enc, RoqTempdata *tempdata,
+static void generate_codebook(RoqContext *enc, roq_tempdata_t *tempdata,
                               int *points, int inputCount, roq_cell *results,
                               int size, int cbsize)
 {
@@ -824,10 +824,10 @@ static void generate_codebook(RoqContext *enc, RoqTempdata *tempdata,
     av_free(codebook);
 }
 
-static void generate_new_codebooks(RoqContext *enc, RoqTempdata *tempData)
+static void generate_new_codebooks(RoqContext *enc, roq_tempdata_t *tempData)
 {
     int i,j;
-    RoqCodebooks *codebooks = &tempData->codebooks;
+    roq_codebooks_t *codebooks = &tempData->codebooks;
     int max = enc->width*enc->height/16;
     uint8_t mb2[3*4];
     roq_cell *results4 = av_malloc(sizeof(roq_cell)*MAX_CBS_4x4*4);
@@ -880,7 +880,7 @@ static void generate_new_codebooks(RoqContext *enc, RoqTempdata *tempData)
 
 static void roq_encode_video(RoqContext *enc)
 {
-    RoqTempdata tempData;
+    roq_tempdata_t tempData;
     int i;
 
     memset(&tempData, 0, sizeof(tempData));
diff --git a/libavcodec/rv10.c b/libavcodec/rv10.c
index ad09c07..0c05147 100644
--- a/libavcodec/rv10.c
+++ b/libavcodec/rv10.c
@@ -527,11 +527,6 @@ static av_cold int rv10_decode_init(AVCodecContext *avctx)
     MpegEncContext *s = avctx->priv_data;
     static int done=0;
 
-    if (avctx->extradata_size < 8) {
-        av_log(avctx, AV_LOG_ERROR, "Extradata is too small.\n");
-        return -1;
-    }
-
     MPV_decode_defaults(s);
 
     s->avctx= avctx;
diff --git a/libavcodec/rv30.c b/libavcodec/rv30.c
index 97d87b0..0202873 100644
--- a/libavcodec/rv30.c
+++ b/libavcodec/rv30.c
@@ -112,127 +112,6 @@ static int rv30_decode_mb_info(RV34DecContext *r)
         return rv30_b_types[code];
 }
 
-static inline void rv30_weak_loop_filter(uint8_t *src, const int step,
-                                         const int stride, const int lim)
-{
-    uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;
-    int i, diff;
-
-    for(i = 0; i < 4; i++){
-        diff = ((src[-2*step] - src[1*step]) - (src[-1*step] - src[0*step])*4) >> 3;
-        diff = av_clip(diff, -lim, lim);
-        src[-1*step] = cm[src[-1*step] + diff];
-        src[ 0*step] = cm[src[ 0*step] - diff];
-        src += stride;
-    }
-}
-
-static void rv30_loop_filter(RV34DecContext *r, int row)
-{
-    MpegEncContext *s = &r->s;
-    int mb_pos, mb_x;
-    int i, j, k;
-    uint8_t *Y, *C;
-    int loc_lim, cur_lim, left_lim = 0, top_lim = 0;
-
-    mb_pos = row * s->mb_stride;
-    for(mb_x = 0; mb_x < s->mb_width; mb_x++, mb_pos++){
-        int mbtype = s->current_picture_ptr->mb_type[mb_pos];
-        if(IS_INTRA(mbtype) || IS_SEPARATE_DC(mbtype))
-            r->deblock_coefs[mb_pos] = 0xFFFF;
-        if(IS_INTRA(mbtype))
-            r->cbp_chroma[mb_pos] = 0xFF;
-    }
-
-    /* all vertical edges are filtered first
-     * and horizontal edges are filtered on the next iteration
-     */
-    mb_pos = row * s->mb_stride;
-    for(mb_x = 0; mb_x < s->mb_width; mb_x++, mb_pos++){
-        cur_lim = rv30_loop_filt_lim[s->current_picture_ptr->qscale_table[mb_pos]];
-        if(mb_x)
-            left_lim = rv30_loop_filt_lim[s->current_picture_ptr->qscale_table[mb_pos - 1]];
-        for(j = 0; j < 16; j += 4){
-            Y = s->current_picture_ptr->data[0] + mb_x*16 + (row*16 + j) * s->linesize + 4 * !mb_x;
-            for(i = !mb_x; i < 4; i++, Y += 4){
-                int ij = i + j;
-                loc_lim = 0;
-                if(r->deblock_coefs[mb_pos] & (1 << ij))
-                    loc_lim = cur_lim;
-                else if(!i && r->deblock_coefs[mb_pos - 1] & (1 << (ij + 3)))
-                    loc_lim = left_lim;
-                else if( i && r->deblock_coefs[mb_pos]     & (1 << (ij - 1)))
-                    loc_lim = cur_lim;
-                if(loc_lim)
-                    rv30_weak_loop_filter(Y, 1, s->linesize, loc_lim);
-            }
-        }
-        for(k = 0; k < 2; k++){
-            int cur_cbp, left_cbp = 0;
-            cur_cbp = (r->cbp_chroma[mb_pos] >> (k*4)) & 0xF;
-            if(mb_x)
-                left_cbp = (r->cbp_chroma[mb_pos - 1] >> (k*4)) & 0xF;
-            for(j = 0; j < 8; j += 4){
-                C = s->current_picture_ptr->data[k+1] + mb_x*8 + (row*8 + j) * s->uvlinesize + 4 * !mb_x;
-                for(i = !mb_x; i < 2; i++, C += 4){
-                    int ij = i + (j >> 1);
-                    loc_lim = 0;
-                    if(cur_cbp && (1 << ij))
-                        loc_lim = cur_lim;
-                    else if(!i && left_cbp & (1 << (ij + 1)))
-                        loc_lim = left_lim;
-                    else if( i && cur_cbp  & (1 << (ij - 1)))
-                        loc_lim = cur_lim;
-                    if(loc_lim)
-                        rv30_weak_loop_filter(C, 1, s->uvlinesize, loc_lim);
-                }
-            }
-        }
-    }
-    mb_pos = row * s->mb_stride;
-    for(mb_x = 0; mb_x < s->mb_width; mb_x++, mb_pos++){
-        cur_lim = rv30_loop_filt_lim[s->current_picture_ptr->qscale_table[mb_pos]];
-        if(row)
-            top_lim = rv30_loop_filt_lim[s->current_picture_ptr->qscale_table[mb_pos - s->mb_stride]];
-        for(j = 4*!row; j < 16; j += 4){
-            Y = s->current_picture_ptr->data[0] + mb_x*16 + (row*16 + j) * s->linesize;
-            for(i = 0; i < 4; i++, Y += 4){
-                int ij = i + j;
-                loc_lim = 0;
-                if(r->deblock_coefs[mb_pos] & (1 << ij))
-                    loc_lim = cur_lim;
-                else if(!j && r->deblock_coefs[mb_pos - s->mb_stride] & (1 << (ij + 12)))
-                    loc_lim = top_lim;
-                else if( j && r->deblock_coefs[mb_pos]                & (1 << (ij - 4)))
-                    loc_lim = cur_lim;
-                if(loc_lim)
-                    rv30_weak_loop_filter(Y, s->linesize, 1, loc_lim);
-            }
-        }
-        for(k = 0; k < 2; k++){
-            int cur_cbp, top_cbp = 0;
-            cur_cbp = (r->cbp_chroma[mb_pos] >> (k*4)) & 0xF;
-            if(row)
-                top_cbp = (r->cbp_chroma[mb_pos - s->mb_stride] >> (k*4)) & 0xF;
-            for(j = 4*!row; j < 8; j += 4){
-                C = s->current_picture_ptr->data[k+1] + mb_x*8 + (row*8 + j) * s->uvlinesize;
-                for(i = 0; i < 2; i++, C += 4){
-                    int ij = i + (j >> 1);
-                    loc_lim = 0;
-                    if(r->cbp_chroma[mb_pos] && (1 << ij))
-                        loc_lim = cur_lim;
-                    else if(!j && top_cbp & (1 << (ij + 2)))
-                        loc_lim = top_lim;
-                    else if( j && cur_cbp & (1 << (ij - 2)))
-                        loc_lim = cur_lim;
-                    if(loc_lim)
-                        rv30_weak_loop_filter(C, s->uvlinesize, 1, loc_lim);
-                }
-            }
-        }
-    }
-}
-
 /**
  * Initialize decoder.
  */
@@ -251,7 +130,6 @@ static av_cold int rv30_decode_init(AVCodecContext *avctx)
     r->parse_slice_header = rv30_parse_slice_header;
     r->decode_intra_types = rv30_decode_intra_types;
     r->decode_mb_info     = rv30_decode_mb_info;
-    r->loop_filter        = rv30_loop_filter;
     r->luma_dc_quant_i = rv30_luma_dc_quant;
     r->luma_dc_quant_p = rv30_luma_dc_quant;
     return 0;
diff --git a/libavcodec/rv30data.h b/libavcodec/rv30data.h
index 1662fd7..c16e51b 100644
--- a/libavcodec/rv30data.h
+++ b/libavcodec/rv30data.h
@@ -171,11 +171,4 @@ static const uint8_t rv30_itype_from_context[900] = {
     2, 7, 8, 4, 0, 6, 1, 5, 3,
     2, 8, 3, 0, 7, 4, 1, 6, 5,
 };
-
-/**
- * Loop filter limits are taken from this table.
- */
-static const uint8_t rv30_loop_filt_lim[32] = {
-     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5
-};
 #endif /* AVCODEC_RV30DATA_H */
diff --git a/libavcodec/rv30dsp.c b/libavcodec/rv30dsp.c
index f693a14..13b218b 100644
--- a/libavcodec/rv30dsp.c
+++ b/libavcodec/rv30dsp.c
@@ -34,14 +34,14 @@ static av_unused void OPNAME ## rv30_tpel8_h_lowpass(uint8_t *dst, uint8_t *src,
     int i;\
     for(i=0; i<h; i++)\
     {\
-        OP(dst[0], (-(src[-1]+src[2]) + src[0]*C1 + src[1]*C2 + 8)>>4);\
-        OP(dst[1], (-(src[ 0]+src[3]) + src[1]*C1 + src[2]*C2 + 8)>>4);\
-        OP(dst[2], (-(src[ 1]+src[4]) + src[2]*C1 + src[3]*C2 + 8)>>4);\
-        OP(dst[3], (-(src[ 2]+src[5]) + src[3]*C1 + src[4]*C2 + 8)>>4);\
-        OP(dst[4], (-(src[ 3]+src[6]) + src[4]*C1 + src[5]*C2 + 8)>>4);\
-        OP(dst[5], (-(src[ 4]+src[7]) + src[5]*C1 + src[6]*C2 + 8)>>4);\
-        OP(dst[6], (-(src[ 5]+src[8]) + src[6]*C1 + src[7]*C2 + 8)>>4);\
-        OP(dst[7], (-(src[ 6]+src[9]) + src[7]*C1 + src[8]*C2 + 8)>>4);\
+        OP(dst[0], -(src[-1]+src[2]) + src[0]*C1 + src[1]*C2);\
+        OP(dst[1], -(src[ 0]+src[3]) + src[1]*C1 + src[2]*C2);\
+        OP(dst[2], -(src[ 1]+src[4]) + src[2]*C1 + src[3]*C2);\
+        OP(dst[3], -(src[ 2]+src[5]) + src[3]*C1 + src[4]*C2);\
+        OP(dst[4], -(src[ 3]+src[6]) + src[4]*C1 + src[5]*C2);\
+        OP(dst[5], -(src[ 4]+src[7]) + src[5]*C1 + src[6]*C2);\
+        OP(dst[6], -(src[ 5]+src[8]) + src[6]*C1 + src[7]*C2);\
+        OP(dst[7], -(src[ 6]+src[9]) + src[7]*C1 + src[8]*C2);\
         dst+=dstStride;\
         src+=srcStride;\
     }\
@@ -64,92 +64,71 @@ static void OPNAME ## rv30_tpel8_v_lowpass(uint8_t *dst, uint8_t *src, int dstSt
         const int src7= src[7 *srcStride];\
         const int src8= src[8 *srcStride];\
         const int src9= src[9 *srcStride];\
-        OP(dst[0*dstStride], (-(srcA+src2) + src0*C1 + src1*C2 + 8)>>4);\
-        OP(dst[1*dstStride], (-(src0+src3) + src1*C1 + src2*C2 + 8)>>4);\
-        OP(dst[2*dstStride], (-(src1+src4) + src2*C1 + src3*C2 + 8)>>4);\
-        OP(dst[3*dstStride], (-(src2+src5) + src3*C1 + src4*C2 + 8)>>4);\
-        OP(dst[4*dstStride], (-(src3+src6) + src4*C1 + src5*C2 + 8)>>4);\
-        OP(dst[5*dstStride], (-(src4+src7) + src5*C1 + src6*C2 + 8)>>4);\
-        OP(dst[6*dstStride], (-(src5+src8) + src6*C1 + src7*C2 + 8)>>4);\
-        OP(dst[7*dstStride], (-(src6+src9) + src7*C1 + src8*C2 + 8)>>4);\
+        OP(dst[0*dstStride], -(srcA+src2) + src0*C1 + src1*C2);\
+        OP(dst[1*dstStride], -(src0+src3) + src1*C1 + src2*C2);\
+        OP(dst[2*dstStride], -(src1+src4) + src2*C1 + src3*C2);\
+        OP(dst[3*dstStride], -(src2+src5) + src3*C1 + src4*C2);\
+        OP(dst[4*dstStride], -(src3+src6) + src4*C1 + src5*C2);\
+        OP(dst[5*dstStride], -(src4+src7) + src5*C1 + src6*C2);\
+        OP(dst[6*dstStride], -(src5+src8) + src6*C1 + src7*C2);\
+        OP(dst[7*dstStride], -(src6+src9) + src7*C1 + src8*C2);\
         dst++;\
         src++;\
     }\
 }\
 \
-static void OPNAME ## rv30_tpel8_hv_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\
-    const int w = 8;\
-    const int h = 8;\
-    uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;\
-    int i, j;\
-    for(j = 0; j < h; j++){\
-        for(i = 0; i < w; i++){\
-            OP(dst[i], (\
-                  src[srcStride*-1+i-1]  -12*src[srcStride*-1+i]  -6*src[srcStride*-1+i+1]    +src[srcStride*-1+i+2]+\
-              -12*src[srcStride* 0+i-1] +144*src[srcStride* 0+i] +72*src[srcStride* 0+i+1] -12*src[srcStride* 0+i+2] +\
-               -6*src[srcStride* 1+i-1]  +72*src[srcStride* 1+i] +36*src[srcStride* 1+i+1]  -6*src[srcStride* 1+i+2] +\
-                  src[srcStride* 2+i-1]  -12*src[srcStride* 2+i]  -6*src[srcStride* 2+i+1]    +src[srcStride* 2+i+2] +\
-                  128)>>8);\
-        }\
-        src += srcStride;\
-        dst += dstStride;\
-    }\
-}\
-\
-static void OPNAME ## rv30_tpel8_hhv_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\
-    const int w = 8;\
-    const int h = 8;\
+static void OPNAME ## rv30_tpel8_h3_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\
+    const int h=8+2;\
     uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;\
-    int i, j;\
-    for(j = 0; j < h; j++){\
-        for(i = 0; i < w; i++){\
-            OP(dst[i], (\
-                  src[srcStride*-1+i-1]  -12*src[srcStride*-1+i+1]  -6*src[srcStride*-1+i]    +src[srcStride*-1+i+2]+\
-              -12*src[srcStride* 0+i-1] +144*src[srcStride* 0+i+1] +72*src[srcStride* 0+i] -12*src[srcStride* 0+i+2]+\
-               -6*src[srcStride* 1+i-1]  +72*src[srcStride* 1+i+1] +36*src[srcStride* 1+i]  -6*src[srcStride* 1+i+2]+\
-                  src[srcStride* 2+i-1]  -12*src[srcStride* 2+i+1]  -6*src[srcStride* 2+i]    +src[srcStride* 2+i+2]+\
-                  128)>>8);\
-        }\
-        src += srcStride;\
-        dst += dstStride;\
+    int i;\
+    for(i=0; i<h; i++)\
+    {\
+        OP(dst[0], 6*src[0]+9*src[1]+src[2]);\
+        OP(dst[1], 6*src[1]+9*src[2]+src[3]);\
+        OP(dst[2], 6*src[2]+9*src[3]+src[4]);\
+        OP(dst[3], 6*src[3]+9*src[4]+src[5]);\
+        OP(dst[4], 6*src[4]+9*src[5]+src[6]);\
+        OP(dst[5], 6*src[5]+9*src[6]+src[7]);\
+        OP(dst[6], 6*src[6]+9*src[7]+src[8]);\
+        OP(dst[7], 6*src[7]+9*src[8]+src[9]);\
+        dst+=dstStride;\
+        src+=srcStride;\
     }\
 }\
 \
-static void OPNAME ## rv30_tpel8_hvv_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\
-    const int w = 8;\
-    const int h = 8;\
+static void OPNAME ## rv30_tpel8_v3_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\
+    const int w=8;\
     uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;\
-    int i, j;\
-    for(j = 0; j < h; j++){\
-        for(i = 0; i < w; i++){\
-            OP(dst[i], (\
-                  src[srcStride*-1+i-1]  -12*src[srcStride*-1+i]  -6*src[srcStride*-1+i+1]    +src[srcStride*-1+i+2]+\
-               -6*src[srcStride* 0+i-1]  +72*src[srcStride* 0+i] +36*src[srcStride* 0+i+1]  -6*src[srcStride* 0+i+2]+\
-              -12*src[srcStride* 1+i-1] +144*src[srcStride* 1+i] +72*src[srcStride* 1+i+1] -12*src[srcStride* 1+i+2]+\
-                  src[srcStride* 2+i-1]  -12*src[srcStride* 2+i]  -6*src[srcStride* 2+i+1]    +src[srcStride* 2+i+2]+\
-                  128)>>8);\
-        }\
-        src += srcStride;\
-        dst += dstStride;\
+    int i;\
+    for(i=0; i<w; i++)\
+    {\
+        const int src0= src[0 *srcStride];\
+        const int src1= src[1 *srcStride];\
+        const int src2= src[2 *srcStride];\
+        const int src3= src[3 *srcStride];\
+        const int src4= src[4 *srcStride];\
+        const int src5= src[5 *srcStride];\
+        const int src6= src[6 *srcStride];\
+        const int src7= src[7 *srcStride];\
+        const int src8= src[8 *srcStride];\
+        const int src9= src[9 *srcStride];\
+        OP(dst[0*dstStride], 6*src0 + 9*src1 + src2);\
+        OP(dst[1*dstStride], 6*src1 + 9*src2 + src3);\
+        OP(dst[2*dstStride], 6*src2 + 9*src3 + src4);\
+        OP(dst[3*dstStride], 6*src3 + 9*src4 + src5);\
+        OP(dst[4*dstStride], 6*src4 + 9*src5 + src6);\
+        OP(dst[5*dstStride], 6*src5 + 9*src6 + src7);\
+        OP(dst[6*dstStride], 6*src6 + 9*src7 + src8);\
+        OP(dst[7*dstStride], 6*src7 + 9*src8 + src9);\
+        dst ++;\
+        src ++;\
     }\
 }\
 \
-static void OPNAME ## rv30_tpel8_hhvv_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\
-    const int w = 8;\
-    const int h = 8;\
-    uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;\
-    int i, j;\
-    for(j = 0; j < h; j++){\
-        for(i = 0; i < w; i++){\
-            OP(dst[i], (\
-               36*src[i+srcStride*0] +54*src[i+1+srcStride*0] +6*src[i+2+srcStride*0]+\
-               54*src[i+srcStride*1] +81*src[i+1+srcStride*1] +9*src[i+2+srcStride*1]+\
-                6*src[i+srcStride*2] + 9*src[i+1+srcStride*2] +  src[i+2+srcStride*2]+\
-               128)>>8);\
-        }\
-        src += srcStride;\
-        dst += dstStride;\
-    }\
+static void OPNAME ## rv30_tpel8_hv_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\
+    uint8_t half[8*10];\
+    put_rv30_tpel8_h3_lowpass(half, src, 8, srcStride);\
+    OPNAME ## rv30_tpel8_v3_lowpass(dst, half, dstStride, 8);\
 }\
 \
 static void OPNAME ## rv30_tpel16_v_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, const int C1, const int C2){\
@@ -179,33 +158,6 @@ static void OPNAME ## rv30_tpel16_hv_lowpass(uint8_t *dst, uint8_t *src, int dst
     OPNAME ## rv30_tpel8_hv_lowpass(dst+8, src+8, dstStride, srcStride);\
 }\
 \
-static void OPNAME ## rv30_tpel16_hhv_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\
-    OPNAME ## rv30_tpel8_hhv_lowpass(dst  , src  , dstStride, srcStride);\
-    OPNAME ## rv30_tpel8_hhv_lowpass(dst+8, src+8, dstStride, srcStride);\
-    src += 8*srcStride;\
-    dst += 8*dstStride;\
-    OPNAME ## rv30_tpel8_hhv_lowpass(dst  , src  , dstStride, srcStride);\
-    OPNAME ## rv30_tpel8_hhv_lowpass(dst+8, src+8, dstStride, srcStride);\
-}\
-\
-static void OPNAME ## rv30_tpel16_hvv_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\
-    OPNAME ## rv30_tpel8_hvv_lowpass(dst  , src  , dstStride, srcStride);\
-    OPNAME ## rv30_tpel8_hvv_lowpass(dst+8, src+8, dstStride, srcStride);\
-    src += 8*srcStride;\
-    dst += 8*dstStride;\
-    OPNAME ## rv30_tpel8_hvv_lowpass(dst  , src  , dstStride, srcStride);\
-    OPNAME ## rv30_tpel8_hvv_lowpass(dst+8, src+8, dstStride, srcStride);\
-}\
-\
-static void OPNAME ## rv30_tpel16_hhvv_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){\
-    OPNAME ## rv30_tpel8_hhvv_lowpass(dst  , src  , dstStride, srcStride);\
-    OPNAME ## rv30_tpel8_hhvv_lowpass(dst+8, src+8, dstStride, srcStride);\
-    src += 8*srcStride;\
-    dst += 8*dstStride;\
-    OPNAME ## rv30_tpel8_hhvv_lowpass(dst  , src  , dstStride, srcStride);\
-    OPNAME ## rv30_tpel8_hhvv_lowpass(dst+8, src+8, dstStride, srcStride);\
-}\
-\
 
 #define RV30_MC(OPNAME, SIZE) \
 static void OPNAME ## rv30_tpel ## SIZE ## _mc10_c(uint8_t *dst, uint8_t *src, int stride){\
@@ -225,24 +177,30 @@ static void OPNAME ## rv30_tpel ## SIZE ## _mc02_c(uint8_t *dst, uint8_t *src, i
 }\
 \
 static void OPNAME ## rv30_tpel ## SIZE ## _mc11_c(uint8_t *dst, uint8_t *src, int stride){\
-    OPNAME ## rv30_tpel ## SIZE ## _hv_lowpass(dst, src, stride, stride);\
+    uint8_t half[SIZE*SIZE];\
+    put_rv30_tpel ## SIZE ## _h_lowpass(half, src, SIZE, stride, 12, 6);\
+    OPNAME ## rv30_tpel ## SIZE ## _v_lowpass(dst, src, stride, stride, 12, 6);\
 }\
 \
 static void OPNAME ## rv30_tpel ## SIZE ## _mc12_c(uint8_t *dst, uint8_t *src, int stride){\
-    OPNAME ## rv30_tpel ## SIZE ## _hvv_lowpass(dst, src, stride, stride);\
+    uint8_t half[SIZE*SIZE];\
+    put_rv30_tpel ## SIZE ## _h_lowpass(half, src, SIZE, stride, 12, 6);\
+    OPNAME ## rv30_tpel ## SIZE ## _v_lowpass(dst, src, stride, stride, 6, 12);\
 }\
 \
 static void OPNAME ## rv30_tpel ## SIZE ## _mc21_c(uint8_t *dst, uint8_t *src, int stride){\
-    OPNAME ## rv30_tpel ## SIZE ## _hhv_lowpass(dst, src, stride, stride);\
+    uint8_t half[SIZE*SIZE];\
+    put_rv30_tpel ## SIZE ## _h_lowpass(half, src, SIZE, stride, 6, 12);\
+    OPNAME ## rv30_tpel ## SIZE ## _v_lowpass(dst, src, stride, stride, 12, 6);\
 }\
 \
 static void OPNAME ## rv30_tpel ## SIZE ## _mc22_c(uint8_t *dst, uint8_t *src, int stride){\
-    OPNAME ## rv30_tpel ## SIZE ## _hhvv_lowpass(dst, src, stride, stride);\
+    OPNAME ## rv30_tpel ## SIZE ## _hv_lowpass(dst, src, stride, stride);\
 }\
 \
 
-#define op_avg(a, b)  a = (((a)+cm[b]+1)>>1)
-#define op_put(a, b)  a = cm[b]
+#define op_avg(a, b)  a = (((a)+cm[((b) + 8)>>4]+1)>>1)
+#define op_put(a, b)  a = cm[((b) + 8)>>4]
 
 RV30_LOWPASS(put_       , op_put)
 RV30_LOWPASS(avg_       , op_avg)
diff --git a/libavcodec/rv34.c b/libavcodec/rv34.c
index 450327e..cee84a0 100644
--- a/libavcodec/rv34.c
+++ b/libavcodec/rv34.c
@@ -367,7 +367,7 @@ int ff_rv34_get_start_offset(GetBitContext *gb, int mb_size)
 {
     int i;
     for(i = 0; i < 5; i++)
-        if(rv34_mb_max_sizes[i] >= mb_size - 1)
+        if(rv34_mb_max_sizes[i] > mb_size)
             break;
     return rv34_mb_bits_sizes[i];
 }
@@ -564,7 +564,7 @@ static void rv34_pred_mv_rv3(RV34DecContext *r, int block_type, int dir)
     MpegEncContext *s = &r->s;
     int mv_pos = s->mb_x * 2 + s->mb_y * 2 * s->b8_stride;
     int A[2] = {0}, B[2], C[2];
-    int i, j, k;
+    int i, j;
     int mx, my;
     int avail_index = avail_indexes[0];
 
@@ -597,12 +597,12 @@ static void rv34_pred_mv_rv3(RV34DecContext *r, int block_type, int dir)
     my += r->dmv[0][1];
     for(j = 0; j < 2; j++){
         for(i = 0; i < 2; i++){
-            for(k = 0; k < 2; k++){
-                s->current_picture_ptr->motion_val[k][mv_pos + i + j*s->b8_stride][0] = mx;
-                s->current_picture_ptr->motion_val[k][mv_pos + i + j*s->b8_stride][1] = my;
-            }
+            s->current_picture_ptr->motion_val[0][mv_pos + i + j*s->b8_stride][0] = mx;
+            s->current_picture_ptr->motion_val[0][mv_pos + i + j*s->b8_stride][1] = my;
         }
     }
+    if(block_type == RV34_MB_B_BACKWARD || block_type == RV34_MB_B_FORWARD)
+        fill_rectangle(s->current_picture_ptr->motion_val[!dir][mv_pos], 2, 2, s->b8_stride, 0, 4);
 }
 
 static const int chroma_coeffs[3] = { 0, 3, 5 };
@@ -644,20 +644,14 @@ static inline void rv34_mc(RV34DecContext *r, const int block_type,
         uvmx = chroma_coeffs[(chroma_mx + (3 << 24)) % 3];
         uvmy = chroma_coeffs[(chroma_my + (3 << 24)) % 3];
     }else{
-        int cx, cy;
         mx = s->current_picture_ptr->motion_val[dir][mv_pos][0] >> 2;
         my = s->current_picture_ptr->motion_val[dir][mv_pos][1] >> 2;
         lx = s->current_picture_ptr->motion_val[dir][mv_pos][0] & 3;
         ly = s->current_picture_ptr->motion_val[dir][mv_pos][1] & 3;
-        cx = s->current_picture_ptr->motion_val[dir][mv_pos][0] / 2;
-        cy = s->current_picture_ptr->motion_val[dir][mv_pos][1] / 2;
-        umx = cx >> 2;
-        umy = cy >> 2;
-        uvmx = (cx & 3) << 1;
-        uvmy = (cy & 3) << 1;
-        //due to some flaw RV40 uses the same MC compensation routine for H2V2 and H3V3
-        if(uvmx == 6 && uvmy == 6)
-            uvmx = uvmy = 4;
+        umx = mx >> 1;
+        umy = my >> 1;
+        uvmx = mx & 6;
+        uvmy = my & 6;
     }
     dxy = ly*4 + lx;
     srcY = dir ? s->next_picture_ptr->data[0] : s->last_picture_ptr->data[0];
@@ -670,12 +664,12 @@ static inline void rv34_mc(RV34DecContext *r, const int block_type,
     srcY += src_y * s->linesize + src_x;
     srcU += uvsrc_y * s->uvlinesize + uvsrc_x;
     srcV += uvsrc_y * s->uvlinesize + uvsrc_x;
-    if(   (unsigned)(src_x - !!lx*2) > s->h_edge_pos - !!lx*2 - (width <<3) - 4
-       || (unsigned)(src_y - !!ly*2) > s->v_edge_pos - !!ly*2 - (height<<3) - 4){
-        uint8_t *uvbuf= s->edge_emu_buffer + 22 * s->linesize;
+    if(   (unsigned)(src_x - !!lx*2) > s->h_edge_pos - !!lx*2 - (width <<3) - 3
+       || (unsigned)(src_y - !!ly*2) > s->v_edge_pos - !!ly*2 - (height<<3) - 3){
+        uint8_t *uvbuf= s->edge_emu_buffer + 20 * s->linesize;
 
         srcY -= 2 + 2*s->linesize;
-        ff_emulated_edge_mc(s->edge_emu_buffer, srcY, s->linesize, (width<<3)+6, (height<<3)+6,
+        ff_emulated_edge_mc(s->edge_emu_buffer, srcY, s->linesize, (width<<3)+4, (height<<3)+4,
                             src_x - 2, src_y - 2, s->h_edge_pos, s->v_edge_pos);
         srcY = s->edge_emu_buffer + 2 + 2*s->linesize;
         ff_emulated_edge_mc(uvbuf     , srcU, s->uvlinesize, (width<<2)+1, (height<<2)+1,
@@ -710,40 +704,35 @@ static void rv34_mc_1mv(RV34DecContext *r, const int block_type,
 {
     rv34_mc(r, block_type, xoff, yoff, mv_off, width, height, dir, r->rv30,
             r->rv30 ? r->s.dsp.put_rv30_tpel_pixels_tab
-                    : r->s.dsp.put_rv40_qpel_pixels_tab,
-            r->rv30 ? r->s.dsp.put_h264_chroma_pixels_tab
-                    : r->s.dsp.put_rv40_chroma_pixels_tab);
+                    : r->s.dsp.put_h264_qpel_pixels_tab,
+            r->s.dsp.put_h264_chroma_pixels_tab);
 }
 
 static void rv34_mc_2mv(RV34DecContext *r, const int block_type)
 {
     rv34_mc(r, block_type, 0, 0, 0, 2, 2, 0, r->rv30,
             r->rv30 ? r->s.dsp.put_rv30_tpel_pixels_tab
-                    : r->s.dsp.put_rv40_qpel_pixels_tab,
-            r->rv30 ? r->s.dsp.put_h264_chroma_pixels_tab
-                    : r->s.dsp.put_rv40_chroma_pixels_tab);
+                    : r->s.dsp.put_h264_qpel_pixels_tab,
+            r->s.dsp.put_h264_chroma_pixels_tab);
     rv34_mc(r, block_type, 0, 0, 0, 2, 2, 1, r->rv30,
             r->rv30 ? r->s.dsp.avg_rv30_tpel_pixels_tab
-                    : r->s.dsp.avg_rv40_qpel_pixels_tab,
-            r->rv30 ? r->s.dsp.avg_h264_chroma_pixels_tab
-                    : r->s.dsp.avg_rv40_chroma_pixels_tab);
+                    : r->s.dsp.avg_h264_qpel_pixels_tab,
+            r->s.dsp.avg_h264_chroma_pixels_tab);
 }
 
 static void rv34_mc_2mv_skip(RV34DecContext *r)
 {
-    int i, j;
+    int i, j, k;
     for(j = 0; j < 2; j++)
         for(i = 0; i < 2; i++){
              rv34_mc(r, RV34_MB_P_8x8, i*8, j*8, i+j*r->s.b8_stride, 1, 1, 0, r->rv30,
                     r->rv30 ? r->s.dsp.put_rv30_tpel_pixels_tab
-                            : r->s.dsp.put_rv40_qpel_pixels_tab,
-                    r->rv30 ? r->s.dsp.put_h264_chroma_pixels_tab
-                            : r->s.dsp.put_rv40_chroma_pixels_tab);
+                            : r->s.dsp.put_h264_qpel_pixels_tab,
+                    r->s.dsp.put_h264_chroma_pixels_tab);
              rv34_mc(r, RV34_MB_P_8x8, i*8, j*8, i+j*r->s.b8_stride, 1, 1, 1, r->rv30,
                     r->rv30 ? r->s.dsp.avg_rv30_tpel_pixels_tab
-                            : r->s.dsp.avg_rv40_qpel_pixels_tab,
-                    r->rv30 ? r->s.dsp.avg_h264_chroma_pixels_tab
-                            : r->s.dsp.avg_rv40_chroma_pixels_tab);
+                            : r->s.dsp.avg_h264_qpel_pixels_tab,
+                    r->s.dsp.avg_h264_chroma_pixels_tab);
         }
 }
 
@@ -964,11 +953,11 @@ static void rv34_output_macroblock(RV34DecContext *r, int8_t *intra_types, int c
         itype = ittrans16[intra_types[0]];
         itype = adjust_pred16(itype, r->avail_cache[5-4], r->avail_cache[5-1]);
         r->h.pred16x16[itype](Y, s->linesize);
-        dsp->add_pixels_clamped(s->block[0], Y,     s->linesize);
-        dsp->add_pixels_clamped(s->block[1], Y + 8, s->linesize);
-        Y += s->linesize * 8;
-        dsp->add_pixels_clamped(s->block[2], Y,     s->linesize);
-        dsp->add_pixels_clamped(s->block[3], Y + 8, s->linesize);
+        dsp->add_pixels_clamped(s->block[0], Y,     s->current_picture.linesize[0]);
+        dsp->add_pixels_clamped(s->block[1], Y + 8, s->current_picture.linesize[0]);
+        Y += s->current_picture.linesize[0] * 8;
+        dsp->add_pixels_clamped(s->block[2], Y,     s->current_picture.linesize[0]);
+        dsp->add_pixels_clamped(s->block[3], Y + 8, s->current_picture.linesize[0]);
 
         itype = ittrans16[intra_types[0]];
         if(itype == PLANE_PRED8x8) itype = DC_PRED8x8;
@@ -1057,7 +1046,7 @@ static int rv34_decode_mb_header(RV34DecContext *r, int8_t *intra_types)
  * mask for retrieving all bits in coded block pattern
  * corresponding to one 8x8 block
  */
-#define LUMA_CBP_BLOCK_MASK 0x33
+#define LUMA_CBP_BLOCK_MASK 0x303
 
 #define U_CBP_MASK 0x0F0000
 #define V_CBP_MASK 0xF00000
@@ -1070,7 +1059,7 @@ static void rv34_apply_differences(RV34DecContext *r, int cbp)
     int i;
 
     for(i = 0; i < 4; i++)
-        if((cbp & (LUMA_CBP_BLOCK_MASK << shifts[i])) || r->block_type == RV34_MB_P_MIX16x16)
+        if(cbp & (LUMA_CBP_BLOCK_MASK << shifts[i]))
             s->dsp.add_pixels_clamped(s->block[i], s->dest[0] + (i & 1)*8 + (i&2)*4*s->linesize, s->linesize);
     if(cbp & U_CBP_MASK)
         s->dsp.add_pixels_clamped(s->block[4], s->dest[1], s->uvlinesize);
@@ -1093,31 +1082,21 @@ static int is_mv_diff_gt_3(int16_t (*motion_val)[2], int step)
 static int rv34_set_deblock_coef(RV34DecContext *r)
 {
     MpegEncContext *s = &r->s;
-    int hmvmask = 0, vmvmask = 0, i, j;
+    int mvmask = 0, i, j;
     int midx = s->mb_x * 2 + s->mb_y * 2 * s->b8_stride;
     int16_t (*motion_val)[2] = s->current_picture_ptr->motion_val[0][midx];
+    if(s->pict_type == FF_I_TYPE)
+        return 0;
     for(j = 0; j < 16; j += 8){
         for(i = 0; i < 2; i++){
             if(is_mv_diff_gt_3(motion_val + i, 1))
-                vmvmask |= 0x11 << (j + i*2);
-            if((j || s->mb_y) && is_mv_diff_gt_3(motion_val + i, s->b8_stride))
-                hmvmask |= 0x03 << (j + i*2);
+                mvmask |= 0x11 << (j + i*2);
+            if(is_mv_diff_gt_3(motion_val + i, s->b8_stride))
+                mvmask |= 0x03 << (j + i*2);
         }
         motion_val += s->b8_stride;
     }
-    if(s->first_slice_line)
-        hmvmask &= ~0x000F;
-    if(!s->mb_x)
-        vmvmask &= ~0x1111;
-    if(r->rv30){ //RV30 marks both subblocks on the edge for filtering
-        vmvmask |= (vmvmask & 0x4444) >> 1;
-        hmvmask |= (hmvmask & 0x0F00) >> 4;
-        if(s->mb_x)
-            r->deblock_coefs[s->mb_x - 1 + s->mb_y*s->mb_stride] |= (vmvmask & 0x1111) << 3;
-        if(!s->first_slice_line)
-            r->deblock_coefs[s->mb_x + (s->mb_y - 1)*s->mb_stride] |= (hmvmask & 0xF) << 12;
-    }
-    return hmvmask | vmvmask;
+    return mvmask;
 }
 
 static int rv34_decode_macroblock(RV34DecContext *r, int8_t *intra_types)
@@ -1148,13 +1127,13 @@ static int rv34_decode_macroblock(RV34DecContext *r, int8_t *intra_types)
 
     s->qscale = r->si.quant;
     cbp = cbp2 = rv34_decode_mb_header(r, intra_types);
-    r->cbp_luma  [mb_pos] = cbp;
-    r->cbp_chroma[mb_pos] = cbp >> 16;
+    r->cbp_luma  [s->mb_x + s->mb_y * s->mb_stride] = cbp;
+    r->cbp_chroma[s->mb_x + s->mb_y * s->mb_stride] = cbp >> 16;
     if(s->pict_type == FF_I_TYPE)
-        r->deblock_coefs[mb_pos] = 0xFFFF;
+        r->deblock_coefs[mb_pos] = 0;
     else
-        r->deblock_coefs[mb_pos] = rv34_set_deblock_coef(r) | r->cbp_luma[mb_pos];
-    s->current_picture_ptr->qscale_table[mb_pos] = s->qscale;
+        r->deblock_coefs[mb_pos] = rv34_set_deblock_coef(r);
+    s->current_picture.qscale_table[s->mb_x + s->mb_y * s->mb_stride] = s->qscale;
 
     if(cbp == -1)
         return -1;
@@ -1188,7 +1167,7 @@ static int rv34_decode_macroblock(RV34DecContext *r, int8_t *intra_types)
         rv34_dequant4x4(s->block[blknum] + blkoff, rv34_qscale_tab[rv34_chroma_quant[1][s->qscale]],rv34_qscale_tab[rv34_chroma_quant[0][s->qscale]]);
         rv34_inv_transform(s->block[blknum] + blkoff);
     }
-    if(IS_INTRA(s->current_picture_ptr->mb_type[mb_pos]))
+    if(IS_INTRA(s->current_picture_ptr->mb_type[s->mb_x + s->mb_y*s->mb_stride]))
         rv34_output_macroblock(r, intra_types, cbp2, r->is16);
     else
         rv34_apply_differences(r, cbp2);
@@ -1220,7 +1199,7 @@ static inline int slice_compare(SliceInfo *si1, SliceInfo *si2)
            si1->pts    != si2->pts;
 }
 
-static int rv34_decode_slice(RV34DecContext *r, int end, const uint8_t* buf, int buf_size)
+static int rv34_decode_slice(RV34DecContext *r, int end, uint8_t* buf, int buf_size)
 {
     MpegEncContext *s = &r->s;
     GetBitContext *gb = &s->gb;
@@ -1253,6 +1232,7 @@ static int rv34_decode_slice(RV34DecContext *r, int end, const uint8_t* buf, int
         if(MPV_frame_start(s, s->avctx) < 0)
             return -1;
         ff_er_frame_start(s);
+        s->current_picture_ptr = &s->current_picture;
         r->cur_pts = r->si.pts;
         if(s->pict_type != FF_B_TYPE){
             r->last_pts = r->next_pts;
@@ -1294,9 +1274,6 @@ static int rv34_decode_slice(RV34DecContext *r, int end, const uint8_t* buf, int
 
             memmove(r->intra_types_hist, r->intra_types, s->b4_stride * 4 * sizeof(*r->intra_types_hist));
             memset(r->intra_types, -1, s->b4_stride * 4 * sizeof(*r->intra_types_hist));
-
-            if(r->loop_filter && s->mb_y >= 2)
-                r->loop_filter(r, s->mb_y - 2);
         }
         if(s->mb_x == s->resync_mb_x)
             s->first_slice_line=0;
@@ -1352,7 +1329,7 @@ av_cold int ff_rv34_decode_init(AVCodecContext *avctx)
     return 0;
 }
 
-static int get_slice_offset(AVCodecContext *avctx, const uint8_t *buf, int n)
+static int get_slice_offset(AVCodecContext *avctx, uint8_t *buf, int n)
 {
     if(avctx->slice_count) return avctx->slice_offset[n];
     else                   return AV_RL32(buf + n*8 - 4) == 1 ? AV_RL32(buf + n*8) :  AV_RB32(buf + n*8);
@@ -1360,7 +1337,7 @@ static int get_slice_offset(AVCodecContext *avctx, const uint8_t *buf, int n)
 
 int ff_rv34_decode_frame(AVCodecContext *avctx,
                             void *data, int *data_size,
-                            const uint8_t *buf, int buf_size)
+                            uint8_t *buf, int buf_size)
 {
     RV34DecContext *r = avctx->priv_data;
     MpegEncContext *s = &r->s;
@@ -1368,7 +1345,7 @@ int ff_rv34_decode_frame(AVCodecContext *avctx,
     SliceInfo si;
     int i;
     int slice_count;
-    const uint8_t *slices_hdr = NULL;
+    uint8_t *slices_hdr = NULL;
     int last = 0;
 
     /* no supplementary picture */
@@ -1398,11 +1375,6 @@ int ff_rv34_decode_frame(AVCodecContext *avctx,
         else
             size= get_slice_offset(avctx, slices_hdr, i+1) - offset;
 
-        if(offset > buf_size){
-            av_log(avctx, AV_LOG_ERROR, "Slice offset is greater than frame size\n");
-            break;
-        }
-
         r->si.end = s->mb_width * s->mb_height;
         if(i+1 < slice_count){
             init_get_bits(&s->gb, buf+get_slice_offset(avctx, slices_hdr, i+1), (buf_size-get_slice_offset(avctx, slices_hdr, i+1))*8);
@@ -1414,8 +1386,6 @@ int ff_rv34_decode_frame(AVCodecContext *avctx,
             }else
                 r->si.end = si.start;
         }
-        if(!i && si.type == FF_B_TYPE && (!s->last_picture_ptr || !s->last_picture_ptr->data[0]))
-            return -1;
         last = rv34_decode_slice(r, r->si.end, buf + offset, size);
         s->mb_num_left = r->s.mb_x + r->s.mb_y*r->s.mb_width - r->si.start;
         if(last)
@@ -1424,7 +1394,7 @@ int ff_rv34_decode_frame(AVCodecContext *avctx,
 
     if(last){
         if(r->loop_filter)
-            r->loop_filter(r, s->mb_height - 1);
+            r->loop_filter(r);
         ff_er_frame_end(s);
         MPV_frame_end(s);
         if (s->pict_type == FF_B_TYPE || s->low_delay) {
diff --git a/libavcodec/rv34.h b/libavcodec/rv34.h
index 65dbb8a..16e0faa 100644
--- a/libavcodec/rv34.h
+++ b/libavcodec/rv34.h
@@ -115,7 +115,7 @@ typedef struct RV34DecContext{
     int (*parse_slice_header)(struct RV34DecContext *r, GetBitContext *gb, SliceInfo *si);
     int (*decode_mb_info)(struct RV34DecContext *r);
     int (*decode_intra_types)(struct RV34DecContext *r, GetBitContext *gb, int8_t *dst);
-    void (*loop_filter)(struct RV34DecContext *r, int row);
+    void (*loop_filter)(struct RV34DecContext *r);
 }RV34DecContext;
 
 /**
@@ -123,7 +123,7 @@ typedef struct RV34DecContext{
  */
 int ff_rv34_get_start_offset(GetBitContext *gb, int blocks);
 int ff_rv34_decode_init(AVCodecContext *avctx);
-int ff_rv34_decode_frame(AVCodecContext *avctx, void *data, int *data_size, const uint8_t *buf, int buf_size);
+int ff_rv34_decode_frame(AVCodecContext *avctx, void *data, int *data_size, uint8_t *buf, int buf_size);
 int ff_rv34_decode_end(AVCodecContext *avctx);
 
 #endif /* AVCODEC_RV34_H */
diff --git a/libavcodec/rv34data.h b/libavcodec/rv34data.h
index 95e5572..e4862a3 100644
--- a/libavcodec/rv34data.h
+++ b/libavcodec/rv34data.h
@@ -138,7 +138,7 @@ static const uint8_t rv34_dquant_tab[2][32]={
  * maximum number of macroblocks for each of the possible slice offset sizes
  * @todo This is the same as ff_mba_max, maybe use it instead.
  */
-static const uint16_t rv34_mb_max_sizes[6] = { 0x2F, 0x62, 0x18B, 0x62F, 0x18BF, 0x23FF };
+static const uint16_t rv34_mb_max_sizes[6] = { 0x2F, 0x68, 0x18B, 0x62F, 0x18BF, 0x23FF };
 /**
  * bits needed to code the slice offset for the given size
  * @todo This is the same as ff_mba_length, maybe use it instead.
diff --git a/libavcodec/rv40.c b/libavcodec/rv40.c
index 083de1b..2d52967 100644
--- a/libavcodec/rv40.c
+++ b/libavcodec/rv40.c
@@ -247,383 +247,6 @@ static int rv40_decode_mb_info(RV34DecContext *r)
     return 0;
 }
 
-#define CLIP_SYMM(a, b) av_clip(a, -(b), b)
-/**
- * weaker deblocking very similar to the one described in 4.4.2 of JVT-A003r1
- */
-static inline void rv40_weak_loop_filter(uint8_t *src, const int step,
-                                         const int filter_p1, const int filter_q1,
-                                         const int alpha, const int beta,
-                                         const int lim_p0q0,
-                                         const int lim_q1, const int lim_p1,
-                                         const int diff_p1p0, const int diff_q1q0,
-                                         const int diff_p1p2, const int diff_q1q2)
-{
-    uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;
-    int t, u, diff;
-
-    t = src[0*step] - src[-1*step];
-    if(!t)
-        return;
-    u = (alpha * FFABS(t)) >> 7;
-    if(u > 3 - (filter_p1 && filter_q1))
-        return;
-
-    t <<= 2;
-    if(filter_p1 && filter_q1)
-        t += src[-2*step] - src[1*step];
-    diff = CLIP_SYMM((t + 4) >> 3, lim_p0q0);
-    src[-1*step] = cm[src[-1*step] + diff];
-    src[ 0*step] = cm[src[ 0*step] - diff];
-    if(FFABS(diff_p1p2) <= beta && filter_p1){
-        t = (diff_p1p0 + diff_p1p2 - diff) >> 1;
-        src[-2*step] = cm[src[-2*step] - CLIP_SYMM(t, lim_p1)];
-    }
-    if(FFABS(diff_q1q2) <= beta && filter_q1){
-        t = (diff_q1q0 + diff_q1q2 + diff) >> 1;
-        src[ 1*step] = cm[src[ 1*step] - CLIP_SYMM(t, lim_q1)];
-    }
-}
-
-static inline void rv40_adaptive_loop_filter(uint8_t *src, const int step,
-                                             const int stride, const int dmode,
-                                             const int lim_q1, const int lim_p1,
-                                             const int alpha,
-                                             const int beta, const int beta2,
-                                             const int chroma, const int edge)
-{
-    int diff_p1p0[4], diff_q1q0[4], diff_p1p2[4], diff_q1q2[4];
-    int sum_p1p0 = 0, sum_q1q0 = 0, sum_p1p2 = 0, sum_q1q2 = 0;
-    uint8_t *ptr;
-    int flag_strong0 = 1, flag_strong1 = 1;
-    int filter_p1, filter_q1;
-    int i;
-    int lims;
-
-    for(i = 0, ptr = src; i < 4; i++, ptr += stride){
-        diff_p1p0[i] = ptr[-2*step] - ptr[-1*step];
-        diff_q1q0[i] = ptr[ 1*step] - ptr[ 0*step];
-        sum_p1p0 += diff_p1p0[i];
-        sum_q1q0 += diff_q1q0[i];
-    }
-    filter_p1 = FFABS(sum_p1p0) < (beta<<2);
-    filter_q1 = FFABS(sum_q1q0) < (beta<<2);
-    if(!filter_p1 && !filter_q1)
-        return;
-
-    for(i = 0, ptr = src; i < 4; i++, ptr += stride){
-        diff_p1p2[i] = ptr[-2*step] - ptr[-3*step];
-        diff_q1q2[i] = ptr[ 1*step] - ptr[ 2*step];
-        sum_p1p2 += diff_p1p2[i];
-        sum_q1q2 += diff_q1q2[i];
-    }
-
-    if(edge){
-        flag_strong0 = filter_p1 && (FFABS(sum_p1p2) < beta2);
-        flag_strong1 = filter_q1 && (FFABS(sum_q1q2) < beta2);
-    }else{
-        flag_strong0 = flag_strong1 = 0;
-    }
-
-    lims = filter_p1 + filter_q1 + ((lim_q1 + lim_p1) >> 1) + 1;
-    if(flag_strong0 && flag_strong1){ /* strong filtering */
-        for(i = 0; i < 4; i++, src += stride){
-            int sflag, p0, q0, p1, q1;
-            int t = src[0*step] - src[-1*step];
-
-            if(!t) continue;
-            sflag = (alpha * FFABS(t)) >> 7;
-            if(sflag > 1) continue;
-
-            p0 = (25*src[-3*step] + 26*src[-2*step]
-                + 26*src[-1*step]
-                + 26*src[ 0*step] + 25*src[ 1*step] + rv40_dither_l[dmode + i]) >> 7;
-            q0 = (25*src[-2*step] + 26*src[-1*step]
-                + 26*src[ 0*step]
-                + 26*src[ 1*step] + 25*src[ 2*step] + rv40_dither_r[dmode + i]) >> 7;
-            if(sflag){
-                p0 = av_clip(p0, src[-1*step] - lims, src[-1*step] + lims);
-                q0 = av_clip(q0, src[ 0*step] - lims, src[ 0*step] + lims);
-            }
-            p1 = (25*src[-4*step] + 26*src[-3*step]
-                + 26*src[-2*step]
-                + 26*p0           + 25*src[ 0*step] + rv40_dither_l[dmode + i]) >> 7;
-            q1 = (25*src[-1*step] + 26*q0
-                + 26*src[ 1*step]
-                + 26*src[ 2*step] + 25*src[ 3*step] + rv40_dither_r[dmode + i]) >> 7;
-            if(sflag){
-                p1 = av_clip(p1, src[-2*step] - lims, src[-2*step] + lims);
-                q1 = av_clip(q1, src[ 1*step] - lims, src[ 1*step] + lims);
-            }
-            src[-2*step] = p1;
-            src[-1*step] = p0;
-            src[ 0*step] = q0;
-            src[ 1*step] = q1;
-            if(!chroma){
-                src[-3*step] = (25*src[-1*step] + 26*src[-2*step] + 51*src[-3*step] + 26*src[-4*step] + 64) >> 7;
-                src[ 2*step] = (25*src[ 0*step] + 26*src[ 1*step] + 51*src[ 2*step] + 26*src[ 3*step] + 64) >> 7;
-            }
-        }
-    }else if(filter_p1 && filter_q1){
-        for(i = 0; i < 4; i++, src += stride)
-            rv40_weak_loop_filter(src, step, 1, 1, alpha, beta, lims, lim_q1, lim_p1,
-                                  diff_p1p0[i], diff_q1q0[i], diff_p1p2[i], diff_q1q2[i]);
-    }else{
-        for(i = 0; i < 4; i++, src += stride)
-            rv40_weak_loop_filter(src, step, filter_p1, filter_q1,
-                                  alpha, beta, lims>>1, lim_q1>>1, lim_p1>>1,
-                                  diff_p1p0[i], diff_q1q0[i], diff_p1p2[i], diff_q1q2[i]);
-    }
-}
-
-static void rv40_v_loop_filter(uint8_t *src, int stride, int dmode,
-                               int lim_q1, int lim_p1,
-                               int alpha, int beta, int beta2, int chroma, int edge){
-    rv40_adaptive_loop_filter(src, 1, stride, dmode, lim_q1, lim_p1,
-                              alpha, beta, beta2, chroma, edge);
-}
-static void rv40_h_loop_filter(uint8_t *src, int stride, int dmode,
-                               int lim_q1, int lim_p1,
-                               int alpha, int beta, int beta2, int chroma, int edge){
-    rv40_adaptive_loop_filter(src, stride, 1, dmode, lim_q1, lim_p1,
-                              alpha, beta, beta2, chroma, edge);
-}
-
-enum RV40BlockPos{
-    POS_CUR,
-    POS_TOP,
-    POS_LEFT,
-    POS_BOTTOM,
-};
-
-#define MASK_CUR          0x0001
-#define MASK_RIGHT        0x0008
-#define MASK_BOTTOM       0x0010
-#define MASK_TOP          0x1000
-#define MASK_Y_TOP_ROW    0x000F
-#define MASK_Y_LAST_ROW   0xF000
-#define MASK_Y_LEFT_COL   0x1111
-#define MASK_Y_RIGHT_COL  0x8888
-#define MASK_C_TOP_ROW    0x0003
-#define MASK_C_LAST_ROW   0x000C
-#define MASK_C_LEFT_COL   0x0005
-#define MASK_C_RIGHT_COL  0x000A
-
-static const int neighbour_offs_x[4] = { 0,  0, -1, 0 };
-static const int neighbour_offs_y[4] = { 0, -1,  0, 1 };
-
-/**
- * RV40 loop filtering function
- */
-static void rv40_loop_filter(RV34DecContext *r, int row)
-{
-    MpegEncContext *s = &r->s;
-    int mb_pos, mb_x;
-    int i, j, k;
-    uint8_t *Y, *C;
-    int alpha, beta, betaY, betaC;
-    int q;
-    int mbtype[4];   ///< current macroblock and its neighbours types
-    /**
-     * flags indicating that macroblock can be filtered with strong filter
-     * it is set only for intra coded MB and MB with DCs coded separately
-     */
-    int mb_strong[4];
-    int clip[4];     ///< MB filter clipping value calculated from filtering strength
-    /**
-     * coded block patterns for luma part of current macroblock and its neighbours
-     * Format:
-     * LSB corresponds to the top left block,
-     * each nibble represents one row of subblocks.
-     */
-    int cbp[4];
-    /**
-     * coded block patterns for chroma part of current macroblock and its neighbours
-     * Format is the same as for luma with two subblocks in a row.
-     */
-    int uvcbp[4][2];
-    /**
-     * This mask represents the pattern of luma subblocks that should be filtered
-     * in addition to the coded ones because because they lie at the edge of
-     * 8x8 block with different enough motion vectors
-     */
-    int mvmasks[4];
-
-    mb_pos = row * s->mb_stride;
-    for(mb_x = 0; mb_x < s->mb_width; mb_x++, mb_pos++){
-        int mbtype = s->current_picture_ptr->mb_type[mb_pos];
-        if(IS_INTRA(mbtype) || IS_SEPARATE_DC(mbtype))
-            r->cbp_luma  [mb_pos] = r->deblock_coefs[mb_pos] = 0xFFFF;
-        if(IS_INTRA(mbtype))
-            r->cbp_chroma[mb_pos] = 0xFF;
-    }
-    mb_pos = row * s->mb_stride;
-    for(mb_x = 0; mb_x < s->mb_width; mb_x++, mb_pos++){
-        int y_h_deblock, y_v_deblock;
-        int c_v_deblock[2], c_h_deblock[2];
-        int clip_left;
-        int avail[4];
-        int y_to_deblock, c_to_deblock[2];
-
-        q = s->current_picture_ptr->qscale_table[mb_pos];
-        alpha = rv40_alpha_tab[q];
-        beta  = rv40_beta_tab [q];
-        betaY = betaC = beta * 3;
-        if(s->width * s->height <= 176*144)
-            betaY += beta;
-
-        avail[0] = 1;
-        avail[1] = row;
-        avail[2] = mb_x;
-        avail[3] = row < s->mb_height - 1;
-        for(i = 0; i < 4; i++){
-            if(avail[i]){
-                int pos = mb_pos + neighbour_offs_x[i] + neighbour_offs_y[i]*s->mb_stride;
-                mvmasks[i] = r->deblock_coefs[pos];
-                mbtype [i] = s->current_picture_ptr->mb_type[pos];
-                cbp    [i] = r->cbp_luma[pos];
-                uvcbp[i][0] = r->cbp_chroma[pos] & 0xF;
-                uvcbp[i][1] = r->cbp_chroma[pos] >> 4;
-            }else{
-                mvmasks[i] = 0;
-                mbtype [i] = mbtype[0];
-                cbp    [i] = 0;
-                uvcbp[i][0] = uvcbp[i][1] = 0;
-            }
-            mb_strong[i] = IS_INTRA(mbtype[i]) || IS_SEPARATE_DC(mbtype[i]);
-            clip[i] = rv40_filter_clip_tbl[mb_strong[i] + 1][q];
-        }
-        y_to_deblock =  mvmasks[POS_CUR]
-                     | (mvmasks[POS_BOTTOM] << 16);
-        /* This pattern contains bits signalling that horizontal edges of
-         * the current block can be filtered.
-         * That happens when either of adjacent subblocks is coded or lies on
-         * the edge of 8x8 blocks with motion vectors differing by more than
-         * 3/4 pel in any component (any edge orientation for some reason).
-         */
-        y_h_deblock =   y_to_deblock
-                    | ((cbp[POS_CUR]                           <<  4) & ~MASK_Y_TOP_ROW)
-                    | ((cbp[POS_TOP]        & MASK_Y_LAST_ROW) >> 12);
-        /* This pattern contains bits signalling that vertical edges of
-         * the current block can be filtered.
-         * That happens when either of adjacent subblocks is coded or lies on
-         * the edge of 8x8 blocks with motion vectors differing by more than
-         * 3/4 pel in any component (any edge orientation for some reason).
-         */
-        y_v_deblock =   y_to_deblock
-                    | ((cbp[POS_CUR]                      << 1) & ~MASK_Y_LEFT_COL)
-                    | ((cbp[POS_LEFT] & MASK_Y_RIGHT_COL) >> 3);
-        if(!mb_x)
-            y_v_deblock &= ~MASK_Y_LEFT_COL;
-        if(!row)
-            y_h_deblock &= ~MASK_Y_TOP_ROW;
-        if(row == s->mb_height - 1 || (mb_strong[POS_CUR] || mb_strong[POS_BOTTOM]))
-            y_h_deblock &= ~(MASK_Y_TOP_ROW << 16);
-        /* Calculating chroma patterns is similar and easier since there is
-         * no motion vector pattern for them.
-         */
-        for(i = 0; i < 2; i++){
-            c_to_deblock[i] = (uvcbp[POS_BOTTOM][i] << 4) | uvcbp[POS_CUR][i];
-            c_v_deblock[i] =   c_to_deblock[i]
-                           | ((uvcbp[POS_CUR] [i]                       << 1) & ~MASK_C_LEFT_COL)
-                           | ((uvcbp[POS_LEFT][i]   & MASK_C_RIGHT_COL) >> 1);
-            c_h_deblock[i] =   c_to_deblock[i]
-                           | ((uvcbp[POS_TOP][i]    & MASK_C_LAST_ROW)  >> 2)
-                           |  (uvcbp[POS_CUR][i]                        << 2);
-            if(!mb_x)
-                c_v_deblock[i] &= ~MASK_C_LEFT_COL;
-            if(!row)
-                c_h_deblock[i] &= ~MASK_C_TOP_ROW;
-            if(row == s->mb_height - 1 || mb_strong[POS_CUR] || mb_strong[POS_BOTTOM])
-                c_h_deblock[i] &= ~(MASK_C_TOP_ROW << 4);
-        }
-
-        for(j = 0; j < 16; j += 4){
-            Y = s->current_picture_ptr->data[0] + mb_x*16 + (row*16 + j) * s->linesize;
-            for(i = 0; i < 4; i++, Y += 4){
-                int ij = i + j;
-                int clip_cur = y_to_deblock & (MASK_CUR << ij) ? clip[POS_CUR] : 0;
-                int dither = j ? ij : i*4;
-
-                // if bottom block is coded then we can filter its top edge
-                // (or bottom edge of this block, which is the same)
-                if(y_h_deblock & (MASK_BOTTOM << ij)){
-                    rv40_h_loop_filter(Y+4*s->linesize, s->linesize, dither,
-                                       y_to_deblock & (MASK_BOTTOM << ij) ? clip[POS_CUR] : 0,
-                                       clip_cur,
-                                       alpha, beta, betaY, 0, 0);
-                }
-                // filter left block edge in ordinary mode (with low filtering strength)
-                if(y_v_deblock & (MASK_CUR << ij) && (i || !(mb_strong[POS_CUR] || mb_strong[POS_LEFT]))){
-                    if(!i)
-                        clip_left = mvmasks[POS_LEFT] & (MASK_RIGHT << j) ? clip[POS_LEFT] : 0;
-                    else
-                        clip_left = y_to_deblock & (MASK_CUR << (ij-1)) ? clip[POS_CUR] : 0;
-                    rv40_v_loop_filter(Y, s->linesize, dither,
-                                       clip_cur,
-                                       clip_left,
-                                       alpha, beta, betaY, 0, 0);
-                }
-                // filter top edge of the current macroblock when filtering strength is high
-                if(!j && y_h_deblock & (MASK_CUR << i) && (mb_strong[POS_CUR] || mb_strong[POS_TOP])){
-                    rv40_h_loop_filter(Y, s->linesize, dither,
-                                       clip_cur,
-                                       mvmasks[POS_TOP] & (MASK_TOP << i) ? clip[POS_TOP] : 0,
-                                       alpha, beta, betaY, 0, 1);
-                }
-                // filter left block edge in edge mode (with high filtering strength)
-                if(y_v_deblock & (MASK_CUR << ij) && !i && (mb_strong[POS_CUR] || mb_strong[POS_LEFT])){
-                    clip_left = mvmasks[POS_LEFT] & (MASK_RIGHT << j) ? clip[POS_LEFT] : 0;
-                    rv40_v_loop_filter(Y, s->linesize, dither,
-                                       clip_cur,
-                                       clip_left,
-                                       alpha, beta, betaY, 0, 1);
-                }
-            }
-        }
-        for(k = 0; k < 2; k++){
-            for(j = 0; j < 2; j++){
-                C = s->current_picture_ptr->data[k+1] + mb_x*8 + (row*8 + j*4) * s->uvlinesize;
-                for(i = 0; i < 2; i++, C += 4){
-                    int ij = i + j*2;
-                    int clip_cur = c_to_deblock[k] & (MASK_CUR << ij) ? clip[POS_CUR] : 0;
-                    if(c_h_deblock[k] & (MASK_CUR << (ij+2))){
-                        int clip_bot = c_to_deblock[k] & (MASK_CUR << (ij+2)) ? clip[POS_CUR] : 0;
-                        rv40_h_loop_filter(C+4*s->uvlinesize, s->uvlinesize, i*8,
-                                           clip_bot,
-                                           clip_cur,
-                                           alpha, beta, betaC, 1, 0);
-                    }
-                    if((c_v_deblock[k] & (MASK_CUR << ij)) && (i || !(mb_strong[POS_CUR] || mb_strong[POS_LEFT]))){
-                        if(!i)
-                            clip_left = uvcbp[POS_LEFT][k] & (MASK_CUR << (2*j+1)) ? clip[POS_LEFT] : 0;
-                        else
-                            clip_left = c_to_deblock[k]    & (MASK_CUR << (ij-1))  ? clip[POS_CUR]  : 0;
-                        rv40_v_loop_filter(C, s->uvlinesize, j*8,
-                                           clip_cur,
-                                           clip_left,
-                                           alpha, beta, betaC, 1, 0);
-                    }
-                    if(!j && c_h_deblock[k] & (MASK_CUR << ij) && (mb_strong[POS_CUR] || mb_strong[POS_TOP])){
-                        int clip_top = uvcbp[POS_TOP][k] & (MASK_CUR << (ij+2)) ? clip[POS_TOP] : 0;
-                        rv40_h_loop_filter(C, s->uvlinesize, i*8,
-                                           clip_cur,
-                                           clip_top,
-                                           alpha, beta, betaC, 1, 1);
-                    }
-                    if(c_v_deblock[k] & (MASK_CUR << ij) && !i && (mb_strong[POS_CUR] || mb_strong[POS_LEFT])){
-                        clip_left = uvcbp[POS_LEFT][k] & (MASK_CUR << (2*j+1)) ? clip[POS_LEFT] : 0;
-                        rv40_v_loop_filter(C, s->uvlinesize, j*8,
-                                           clip_cur,
-                                           clip_left,
-                                           alpha, beta, betaC, 1, 1);
-                    }
-                }
-            }
-        }
-    }
-}
-
 /**
  * Initialize decoder.
  */
@@ -638,7 +261,6 @@ static av_cold int rv40_decode_init(AVCodecContext *avctx)
     r->parse_slice_header = rv40_parse_slice_header;
     r->decode_intra_types = rv40_decode_intra_types;
     r->decode_mb_info     = rv40_decode_mb_info;
-    r->loop_filter        = rv40_loop_filter;
     r->luma_dc_quant_i = rv40_luma_dc_quant[0];
     r->luma_dc_quant_p = rv40_luma_dc_quant[1];
     return 0;
diff --git a/libavcodec/rv40dsp.c b/libavcodec/rv40dsp.c
deleted file mode 100644
index b48c4e8..0000000
--- a/libavcodec/rv40dsp.c
+++ /dev/null
@@ -1,353 +0,0 @@
-/*
- * RV40 decoder motion compensation functions
- * Copyright (c) 2008 Konstantin Shishkov
- *
- * 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 rv40dsp.c
- * RV40 decoder motion compensation functions
- */
-
-#include "avcodec.h"
-#include "dsputil.h"
-
-#define RV40_LOWPASS(OPNAME, OP) \
-static av_unused void OPNAME ## rv40_qpel8_h_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride,\
-                                                     const int h, const int C1, const int C2, const int SHIFT){\
-    uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;\
-    int i;\
-    for(i=0; i<h; i++)\
-    {\
-        OP(dst[0], (src[-2] + src[ 3] - 5*(src[-1]+src[2]) + src[0]*C1 + src[1]*C2 + (1<<(SHIFT-1))) >> SHIFT);\
-        OP(dst[1], (src[-1] + src[ 4] - 5*(src[ 0]+src[3]) + src[1]*C1 + src[2]*C2 + (1<<(SHIFT-1))) >> SHIFT);\
-        OP(dst[2], (src[ 0] + src[ 5] - 5*(src[ 1]+src[4]) + src[2]*C1 + src[3]*C2 + (1<<(SHIFT-1))) >> SHIFT);\
-        OP(dst[3], (src[ 1] + src[ 6] - 5*(src[ 2]+src[5]) + src[3]*C1 + src[4]*C2 + (1<<(SHIFT-1))) >> SHIFT);\
-        OP(dst[4], (src[ 2] + src[ 7] - 5*(src[ 3]+src[6]) + src[4]*C1 + src[5]*C2 + (1<<(SHIFT-1))) >> SHIFT);\
-        OP(dst[5], (src[ 3] + src[ 8] - 5*(src[ 4]+src[7]) + src[5]*C1 + src[6]*C2 + (1<<(SHIFT-1))) >> SHIFT);\
-        OP(dst[6], (src[ 4] + src[ 9] - 5*(src[ 5]+src[8]) + src[6]*C1 + src[7]*C2 + (1<<(SHIFT-1))) >> SHIFT);\
-        OP(dst[7], (src[ 5] + src[10] - 5*(src[ 6]+src[9]) + src[7]*C1 + src[8]*C2 + (1<<(SHIFT-1))) >> SHIFT);\
-        dst+=dstStride;\
-        src+=srcStride;\
-    }\
-}\
-\
-static void OPNAME ## rv40_qpel8_v_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride,\
-                                           const int w, const int C1, const int C2, const int SHIFT){\
-    uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;\
-    int i;\
-    for(i=0; i<w; i++)\
-    {\
-        const int srcB = src[-2*srcStride];\
-        const int srcA = src[-1*srcStride];\
-        const int src0 = src[0 *srcStride];\
-        const int src1 = src[1 *srcStride];\
-        const int src2 = src[2 *srcStride];\
-        const int src3 = src[3 *srcStride];\
-        const int src4 = src[4 *srcStride];\
-        const int src5 = src[5 *srcStride];\
-        const int src6 = src[6 *srcStride];\
-        const int src7 = src[7 *srcStride];\
-        const int src8 = src[8 *srcStride];\
-        const int src9 = src[9 *srcStride];\
-        const int src10= src[10*srcStride];\
-        OP(dst[0*dstStride], (srcB + src3  - 5*(srcA+src2) + src0*C1 + src1*C2 + (1<<(SHIFT-1))) >> SHIFT);\
-        OP(dst[1*dstStride], (srcA + src4  - 5*(src0+src3) + src1*C1 + src2*C2 + (1<<(SHIFT-1))) >> SHIFT);\
-        OP(dst[2*dstStride], (src0 + src5  - 5*(src1+src4) + src2*C1 + src3*C2 + (1<<(SHIFT-1))) >> SHIFT);\
-        OP(dst[3*dstStride], (src1 + src6  - 5*(src2+src5) + src3*C1 + src4*C2 + (1<<(SHIFT-1))) >> SHIFT);\
-        OP(dst[4*dstStride], (src2 + src7  - 5*(src3+src6) + src4*C1 + src5*C2 + (1<<(SHIFT-1))) >> SHIFT);\
-        OP(dst[5*dstStride], (src3 + src8  - 5*(src4+src7) + src5*C1 + src6*C2 + (1<<(SHIFT-1))) >> SHIFT);\
-        OP(dst[6*dstStride], (src4 + src9  - 5*(src5+src8) + src6*C1 + src7*C2 + (1<<(SHIFT-1))) >> SHIFT);\
-        OP(dst[7*dstStride], (src5 + src10 - 5*(src6+src9) + src7*C1 + src8*C2 + (1<<(SHIFT-1))) >> SHIFT);\
-        dst++;\
-        src++;\
-    }\
-}\
-\
-static void OPNAME ## rv40_qpel16_v_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride,\
-                                            const int w, const int C1, const int C2, const int SHIFT){\
-    OPNAME ## rv40_qpel8_v_lowpass(dst  , src  , dstStride, srcStride, 8, C1, C2, SHIFT);\
-    OPNAME ## rv40_qpel8_v_lowpass(dst+8, src+8, dstStride, srcStride, 8, C1, C2, SHIFT);\
-    src += 8*srcStride;\
-    dst += 8*dstStride;\
-    OPNAME ## rv40_qpel8_v_lowpass(dst  , src  , dstStride, srcStride, w-8, C1, C2, SHIFT);\
-    OPNAME ## rv40_qpel8_v_lowpass(dst+8, src+8, dstStride, srcStride, w-8, C1, C2, SHIFT);\
-}\
-\
-static void OPNAME ## rv40_qpel16_h_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride,\
-                                            const int h, const int C1, const int C2, const int SHIFT){\
-    OPNAME ## rv40_qpel8_h_lowpass(dst  , src  , dstStride, srcStride, 8, C1, C2, SHIFT);\
-    OPNAME ## rv40_qpel8_h_lowpass(dst+8, src+8, dstStride, srcStride, 8, C1, C2, SHIFT);\
-    src += 8*srcStride;\
-    dst += 8*dstStride;\
-    OPNAME ## rv40_qpel8_h_lowpass(dst  , src  , dstStride, srcStride, h-8, C1, C2, SHIFT);\
-    OPNAME ## rv40_qpel8_h_lowpass(dst+8, src+8, dstStride, srcStride, h-8, C1, C2, SHIFT);\
-}\
-\
-
-#define RV40_MC(OPNAME, SIZE) \
-static void OPNAME ## rv40_qpel ## SIZE ## _mc10_c(uint8_t *dst, uint8_t *src, int stride){\
-    OPNAME ## rv40_qpel ## SIZE ## _h_lowpass(dst, src, stride, stride, SIZE, 52, 20, 6);\
-}\
-\
-static void OPNAME ## rv40_qpel ## SIZE ## _mc20_c(uint8_t *dst, uint8_t *src, int stride){\
-    OPNAME ## rv40_qpel ## SIZE ## _h_lowpass(dst, src, stride, stride, SIZE, 20, 20, 5);\
-}\
-\
-static void OPNAME ## rv40_qpel ## SIZE ## _mc30_c(uint8_t *dst, uint8_t *src, int stride){\
-    OPNAME ## rv40_qpel ## SIZE ## _h_lowpass(dst, src, stride, stride, SIZE, 20, 52, 6);\
-}\
-\
-static void OPNAME ## rv40_qpel ## SIZE ## _mc01_c(uint8_t *dst, uint8_t *src, int stride){\
-    OPNAME ## rv40_qpel ## SIZE ## _v_lowpass(dst, src, stride, stride, SIZE, 52, 20, 6);\
-}\
-\
-static void OPNAME ## rv40_qpel ## SIZE ## _mc11_c(uint8_t *dst, uint8_t *src, int stride){\
-    uint8_t full[SIZE*(SIZE+5)];\
-    uint8_t * const full_mid= full + SIZE*2;\
-    put_rv40_qpel ## SIZE ## _h_lowpass(full, src - 2*stride, SIZE, stride, SIZE+5, 52, 20, 6);\
-    OPNAME ## rv40_qpel ## SIZE ## _v_lowpass(dst, full_mid, stride, SIZE, SIZE, 52, 20, 6);\
-}\
-\
-static void OPNAME ## rv40_qpel ## SIZE ## _mc21_c(uint8_t *dst, uint8_t *src, int stride){\
-    uint8_t full[SIZE*(SIZE+5)];\
-    uint8_t * const full_mid= full + SIZE*2;\
-    put_rv40_qpel ## SIZE ## _h_lowpass(full, src - 2*stride, SIZE, stride, SIZE+5, 20, 20, 5);\
-    OPNAME ## rv40_qpel ## SIZE ## _v_lowpass(dst, full_mid, stride, SIZE, SIZE, 52, 20, 6);\
-}\
-\
-static void OPNAME ## rv40_qpel ## SIZE ## _mc31_c(uint8_t *dst, uint8_t *src, int stride){\
-    uint8_t full[SIZE*(SIZE+5)];\
-    uint8_t * const full_mid= full + SIZE*2;\
-    put_rv40_qpel ## SIZE ## _h_lowpass(full, src - 2*stride, SIZE, stride, SIZE+5, 20, 52, 6);\
-    OPNAME ## rv40_qpel ## SIZE ## _v_lowpass(dst, full_mid, stride, SIZE, SIZE, 52, 20, 6);\
-}\
-\
-static void OPNAME ## rv40_qpel ## SIZE ## _mc02_c(uint8_t *dst, uint8_t *src, int stride){\
-    OPNAME ## rv40_qpel ## SIZE ## _v_lowpass(dst, src, stride, stride, SIZE, 20, 20, 5);\
-}\
-\
-static void OPNAME ## rv40_qpel ## SIZE ## _mc12_c(uint8_t *dst, uint8_t *src, int stride){\
-    uint8_t full[SIZE*(SIZE+5)];\
-    uint8_t * const full_mid= full + SIZE*2;\
-    put_rv40_qpel ## SIZE ## _h_lowpass(full, src - 2*stride, SIZE, stride, SIZE+5, 52, 20, 6);\
-    OPNAME ## rv40_qpel ## SIZE ## _v_lowpass(dst, full_mid, stride, SIZE, SIZE, 20, 20, 5);\
-}\
-\
-static void OPNAME ## rv40_qpel ## SIZE ## _mc22_c(uint8_t *dst, uint8_t *src, int stride){\
-    uint8_t full[SIZE*(SIZE+5)];\
-    uint8_t * const full_mid= full + SIZE*2;\
-    put_rv40_qpel ## SIZE ## _h_lowpass(full, src - 2*stride, SIZE, stride, SIZE+5, 20, 20, 5);\
-    OPNAME ## rv40_qpel ## SIZE ## _v_lowpass(dst, full_mid, stride, SIZE, SIZE, 20, 20, 5);\
-}\
-\
-static void OPNAME ## rv40_qpel ## SIZE ## _mc32_c(uint8_t *dst, uint8_t *src, int stride){\
-    uint8_t full[SIZE*(SIZE+5)];\
-    uint8_t * const full_mid= full + SIZE*2;\
-    put_rv40_qpel ## SIZE ## _h_lowpass(full, src - 2*stride, SIZE, stride, SIZE+5, 20, 52, 6);\
-    OPNAME ## rv40_qpel ## SIZE ## _v_lowpass(dst, full_mid, stride, SIZE, SIZE, 20, 20, 5);\
-}\
-\
-static void OPNAME ## rv40_qpel ## SIZE ## _mc03_c(uint8_t *dst, uint8_t *src, int stride){\
-    OPNAME ## rv40_qpel ## SIZE ## _v_lowpass(dst, src, stride, stride, SIZE, 20, 52, 6);\
-}\
-\
-static void OPNAME ## rv40_qpel ## SIZE ## _mc13_c(uint8_t *dst, uint8_t *src, int stride){\
-    uint8_t full[SIZE*(SIZE+5)];\
-    uint8_t * const full_mid= full + SIZE*2;\
-    put_rv40_qpel ## SIZE ## _h_lowpass(full, src - 2*stride, SIZE, stride, SIZE+5, 52, 20, 6);\
-    OPNAME ## rv40_qpel ## SIZE ## _v_lowpass(dst, full_mid, stride, SIZE, SIZE, 20, 52, 6);\
-}\
-\
-static void OPNAME ## rv40_qpel ## SIZE ## _mc23_c(uint8_t *dst, uint8_t *src, int stride){\
-    uint8_t full[SIZE*(SIZE+5)];\
-    uint8_t * const full_mid= full + SIZE*2;\
-    put_rv40_qpel ## SIZE ## _h_lowpass(full, src - 2*stride, SIZE, stride, SIZE+5, 20, 20, 5);\
-    OPNAME ## rv40_qpel ## SIZE ## _v_lowpass(dst, full_mid, stride, SIZE, SIZE, 20, 52, 6);\
-}\
-\
-
-#define op_avg(a, b)  a = (((a)+cm[b]+1)>>1)
-#define op_put(a, b)  a = cm[b]
-
-RV40_LOWPASS(put_       , op_put)
-RV40_LOWPASS(avg_       , op_avg)
-
-#undef op_avg
-#undef op_put
-
-RV40_MC(put_, 8)
-RV40_MC(put_, 16)
-RV40_MC(avg_, 8)
-RV40_MC(avg_, 16)
-
-static const int rv40_bias[4][4] = {
-    {  0, 16, 32, 16 },
-    { 32, 28, 32, 28 },
-    {  0, 32, 16, 32 },
-    { 32, 28, 32, 28 }
-};
-
-#define RV40_CHROMA_MC(OPNAME, OP)\
-static void OPNAME ## rv40_chroma_mc4_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y){\
-    const int A=(8-x)*(8-y);\
-    const int B=(  x)*(8-y);\
-    const int C=(8-x)*(  y);\
-    const int D=(  x)*(  y);\
-    int i;\
-    int bias = rv40_bias[y>>1][x>>1];\
-    \
-    assert(x<8 && y<8 && x>=0 && y>=0);\
-\
-    if(D){\
-        for(i=0; i<h; i++){\
-            OP(dst[0], (A*src[0] + B*src[1] + C*src[stride+0] + D*src[stride+1] + bias));\
-            OP(dst[1], (A*src[1] + B*src[2] + C*src[stride+1] + D*src[stride+2] + bias));\
-            OP(dst[2], (A*src[2] + B*src[3] + C*src[stride+2] + D*src[stride+3] + bias));\
-            OP(dst[3], (A*src[3] + B*src[4] + C*src[stride+3] + D*src[stride+4] + bias));\
-            dst+= stride;\
-            src+= stride;\
-        }\
-    }else{\
-        const int E= B+C;\
-        const int step= C ? stride : 1;\
-        for(i=0; i<h; i++){\
-            OP(dst[0], (A*src[0] + E*src[step+0] + bias));\
-            OP(dst[1], (A*src[1] + E*src[step+1] + bias));\
-            OP(dst[2], (A*src[2] + E*src[step+2] + bias));\
-            OP(dst[3], (A*src[3] + E*src[step+3] + bias));\
-            dst+= stride;\
-            src+= stride;\
-        }\
-    }\
-}\
-\
-static void OPNAME ## rv40_chroma_mc8_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y){\
-    const int A=(8-x)*(8-y);\
-    const int B=(  x)*(8-y);\
-    const int C=(8-x)*(  y);\
-    const int D=(  x)*(  y);\
-    int i;\
-    int bias = rv40_bias[y>>1][x>>1];\
-    \
-    assert(x<8 && y<8 && x>=0 && y>=0);\
-\
-    if(D){\
-        for(i=0; i<h; i++){\
-            OP(dst[0], (A*src[0] + B*src[1] + C*src[stride+0] + D*src[stride+1] + bias));\
-            OP(dst[1], (A*src[1] + B*src[2] + C*src[stride+1] + D*src[stride+2] + bias));\
-            OP(dst[2], (A*src[2] + B*src[3] + C*src[stride+2] + D*src[stride+3] + bias));\
-            OP(dst[3], (A*src[3] + B*src[4] + C*src[stride+3] + D*src[stride+4] + bias));\
-            OP(dst[4], (A*src[4] + B*src[5] + C*src[stride+4] + D*src[stride+5] + bias));\
-            OP(dst[5], (A*src[5] + B*src[6] + C*src[stride+5] + D*src[stride+6] + bias));\
-            OP(dst[6], (A*src[6] + B*src[7] + C*src[stride+6] + D*src[stride+7] + bias));\
-            OP(dst[7], (A*src[7] + B*src[8] + C*src[stride+7] + D*src[stride+8] + bias));\
-            dst+= stride;\
-            src+= stride;\
-        }\
-    }else{\
-        const int E= B+C;\
-        const int step= C ? stride : 1;\
-        for(i=0; i<h; i++){\
-            OP(dst[0], (A*src[0] + E*src[step+0] + bias));\
-            OP(dst[1], (A*src[1] + E*src[step+1] + bias));\
-            OP(dst[2], (A*src[2] + E*src[step+2] + bias));\
-            OP(dst[3], (A*src[3] + E*src[step+3] + bias));\
-            OP(dst[4], (A*src[4] + E*src[step+4] + bias));\
-            OP(dst[5], (A*src[5] + E*src[step+5] + bias));\
-            OP(dst[6], (A*src[6] + E*src[step+6] + bias));\
-            OP(dst[7], (A*src[7] + E*src[step+7] + bias));\
-            dst+= stride;\
-            src+= stride;\
-        }\
-    }\
-}
-
-#define op_avg(a, b) a = (((a)+((b)>>6)+1)>>1)
-#define op_put(a, b) a = ((b)>>6)
-
-RV40_CHROMA_MC(put_, op_put)
-RV40_CHROMA_MC(avg_, op_avg)
-
-void ff_rv40dsp_init(DSPContext* c, AVCodecContext *avctx) {
-    c->put_rv40_qpel_pixels_tab[0][ 0] = c->put_h264_qpel_pixels_tab[0][0];
-    c->put_rv40_qpel_pixels_tab[0][ 1] = put_rv40_qpel16_mc10_c;
-    c->put_rv40_qpel_pixels_tab[0][ 2] = put_rv40_qpel16_mc20_c;
-    c->put_rv40_qpel_pixels_tab[0][ 3] = put_rv40_qpel16_mc30_c;
-    c->put_rv40_qpel_pixels_tab[0][ 4] = put_rv40_qpel16_mc01_c;
-    c->put_rv40_qpel_pixels_tab[0][ 5] = put_rv40_qpel16_mc11_c;
-    c->put_rv40_qpel_pixels_tab[0][ 6] = put_rv40_qpel16_mc21_c;
-    c->put_rv40_qpel_pixels_tab[0][ 7] = put_rv40_qpel16_mc31_c;
-    c->put_rv40_qpel_pixels_tab[0][ 8] = put_rv40_qpel16_mc02_c;
-    c->put_rv40_qpel_pixels_tab[0][ 9] = put_rv40_qpel16_mc12_c;
-    c->put_rv40_qpel_pixels_tab[0][10] = put_rv40_qpel16_mc22_c;
-    c->put_rv40_qpel_pixels_tab[0][11] = put_rv40_qpel16_mc32_c;
-    c->put_rv40_qpel_pixels_tab[0][12] = put_rv40_qpel16_mc03_c;
-    c->put_rv40_qpel_pixels_tab[0][13] = put_rv40_qpel16_mc13_c;
-    c->put_rv40_qpel_pixels_tab[0][14] = put_rv40_qpel16_mc23_c;
-    c->avg_rv40_qpel_pixels_tab[0][ 0] = c->avg_h264_qpel_pixels_tab[0][0];
-    c->avg_rv40_qpel_pixels_tab[0][ 1] = avg_rv40_qpel16_mc10_c;
-    c->avg_rv40_qpel_pixels_tab[0][ 2] = avg_rv40_qpel16_mc20_c;
-    c->avg_rv40_qpel_pixels_tab[0][ 3] = avg_rv40_qpel16_mc30_c;
-    c->avg_rv40_qpel_pixels_tab[0][ 4] = avg_rv40_qpel16_mc01_c;
-    c->avg_rv40_qpel_pixels_tab[0][ 5] = avg_rv40_qpel16_mc11_c;
-    c->avg_rv40_qpel_pixels_tab[0][ 6] = avg_rv40_qpel16_mc21_c;
-    c->avg_rv40_qpel_pixels_tab[0][ 7] = avg_rv40_qpel16_mc31_c;
-    c->avg_rv40_qpel_pixels_tab[0][ 8] = avg_rv40_qpel16_mc02_c;
-    c->avg_rv40_qpel_pixels_tab[0][ 9] = avg_rv40_qpel16_mc12_c;
-    c->avg_rv40_qpel_pixels_tab[0][10] = avg_rv40_qpel16_mc22_c;
-    c->avg_rv40_qpel_pixels_tab[0][11] = avg_rv40_qpel16_mc32_c;
-    c->avg_rv40_qpel_pixels_tab[0][12] = avg_rv40_qpel16_mc03_c;
-    c->avg_rv40_qpel_pixels_tab[0][13] = avg_rv40_qpel16_mc13_c;
-    c->avg_rv40_qpel_pixels_tab[0][14] = avg_rv40_qpel16_mc23_c;
-    c->put_rv40_qpel_pixels_tab[1][ 0] = c->put_h264_qpel_pixels_tab[1][0];
-    c->put_rv40_qpel_pixels_tab[1][ 1] = put_rv40_qpel8_mc10_c;
-    c->put_rv40_qpel_pixels_tab[1][ 2] = put_rv40_qpel8_mc20_c;
-    c->put_rv40_qpel_pixels_tab[1][ 3] = put_rv40_qpel8_mc30_c;
-    c->put_rv40_qpel_pixels_tab[1][ 4] = put_rv40_qpel8_mc01_c;
-    c->put_rv40_qpel_pixels_tab[1][ 5] = put_rv40_qpel8_mc11_c;
-    c->put_rv40_qpel_pixels_tab[1][ 6] = put_rv40_qpel8_mc21_c;
-    c->put_rv40_qpel_pixels_tab[1][ 7] = put_rv40_qpel8_mc31_c;
-    c->put_rv40_qpel_pixels_tab[1][ 8] = put_rv40_qpel8_mc02_c;
-    c->put_rv40_qpel_pixels_tab[1][ 9] = put_rv40_qpel8_mc12_c;
-    c->put_rv40_qpel_pixels_tab[1][10] = put_rv40_qpel8_mc22_c;
-    c->put_rv40_qpel_pixels_tab[1][11] = put_rv40_qpel8_mc32_c;
-    c->put_rv40_qpel_pixels_tab[1][12] = put_rv40_qpel8_mc03_c;
-    c->put_rv40_qpel_pixels_tab[1][13] = put_rv40_qpel8_mc13_c;
-    c->put_rv40_qpel_pixels_tab[1][14] = put_rv40_qpel8_mc23_c;
-    c->avg_rv40_qpel_pixels_tab[1][ 0] = c->avg_h264_qpel_pixels_tab[1][0];
-    c->avg_rv40_qpel_pixels_tab[1][ 1] = avg_rv40_qpel8_mc10_c;
-    c->avg_rv40_qpel_pixels_tab[1][ 2] = avg_rv40_qpel8_mc20_c;
-    c->avg_rv40_qpel_pixels_tab[1][ 3] = avg_rv40_qpel8_mc30_c;
-    c->avg_rv40_qpel_pixels_tab[1][ 4] = avg_rv40_qpel8_mc01_c;
-    c->avg_rv40_qpel_pixels_tab[1][ 5] = avg_rv40_qpel8_mc11_c;
-    c->avg_rv40_qpel_pixels_tab[1][ 6] = avg_rv40_qpel8_mc21_c;
-    c->avg_rv40_qpel_pixels_tab[1][ 7] = avg_rv40_qpel8_mc31_c;
-    c->avg_rv40_qpel_pixels_tab[1][ 8] = avg_rv40_qpel8_mc02_c;
-    c->avg_rv40_qpel_pixels_tab[1][ 9] = avg_rv40_qpel8_mc12_c;
-    c->avg_rv40_qpel_pixels_tab[1][10] = avg_rv40_qpel8_mc22_c;
-    c->avg_rv40_qpel_pixels_tab[1][11] = avg_rv40_qpel8_mc32_c;
-    c->avg_rv40_qpel_pixels_tab[1][12] = avg_rv40_qpel8_mc03_c;
-    c->avg_rv40_qpel_pixels_tab[1][13] = avg_rv40_qpel8_mc13_c;
-    c->avg_rv40_qpel_pixels_tab[1][14] = avg_rv40_qpel8_mc23_c;
-
-    c->put_rv40_chroma_pixels_tab[0]= put_rv40_chroma_mc8_c;
-    c->put_rv40_chroma_pixels_tab[1]= put_rv40_chroma_mc4_c;
-    c->avg_rv40_chroma_pixels_tab[0]= avg_rv40_chroma_mc8_c;
-    c->avg_rv40_chroma_pixels_tab[1]= avg_rv40_chroma_mc4_c;
-}
diff --git a/libavcodec/sh4/dsputil_align.c b/libavcodec/sh4/dsputil_align.c
index d9286e1..7c49a06 100644
--- a/libavcodec/sh4/dsputil_align.c
+++ b/libavcodec/sh4/dsputil_align.c
@@ -272,36 +272,36 @@ static void op##_##rnd##_pixels##sz##_##xy (uint8_t * dest, const uint8_t * ref,
 
 #define OP put
 
-DEFFUNC(put,   rnd,o,8,OP_C,avg32)
-DEFFUNC(put,   rnd,x,8,OP_X,avg32)
-DEFFUNC(put,no_rnd,x,8,OP_X,avg32)
-DEFFUNC(put,   rnd,y,8,OP_Y,avg32)
-DEFFUNC(put,no_rnd,y,8,OP_Y,avg32)
+DEFFUNC(put,   rnd,o,8,OP_C,avg2)
+DEFFUNC(put,   rnd,x,8,OP_X,avg2)
+DEFFUNC(put,no_rnd,x,8,OP_X,avg2)
+DEFFUNC(put,   rnd,y,8,OP_Y,avg2)
+DEFFUNC(put,no_rnd,y,8,OP_Y,avg2)
 DEFFUNC(put,   rnd,xy,8,OP_XY,PACK)
 DEFFUNC(put,no_rnd,xy,8,OP_XY,PACK)
-DEFFUNC(put,   rnd,o,16,OP_C,avg32)
-DEFFUNC(put,   rnd,x,16,OP_X,avg32)
-DEFFUNC(put,no_rnd,x,16,OP_X,avg32)
-DEFFUNC(put,   rnd,y,16,OP_Y,avg32)
-DEFFUNC(put,no_rnd,y,16,OP_Y,avg32)
+DEFFUNC(put,   rnd,o,16,OP_C,avg2)
+DEFFUNC(put,   rnd,x,16,OP_X,avg2)
+DEFFUNC(put,no_rnd,x,16,OP_X,avg2)
+DEFFUNC(put,   rnd,y,16,OP_Y,avg2)
+DEFFUNC(put,no_rnd,y,16,OP_Y,avg2)
 DEFFUNC(put,   rnd,xy,16,OP_XY,PACK)
 DEFFUNC(put,no_rnd,xy,16,OP_XY,PACK)
 
 #undef OP
 #define OP avg
 
-DEFFUNC(avg,   rnd,o,8,OP_C,avg32)
-DEFFUNC(avg,   rnd,x,8,OP_X,avg32)
-DEFFUNC(avg,no_rnd,x,8,OP_X,avg32)
-DEFFUNC(avg,   rnd,y,8,OP_Y,avg32)
-DEFFUNC(avg,no_rnd,y,8,OP_Y,avg32)
+DEFFUNC(avg,   rnd,o,8,OP_C,avg2)
+DEFFUNC(avg,   rnd,x,8,OP_X,avg2)
+DEFFUNC(avg,no_rnd,x,8,OP_X,avg2)
+DEFFUNC(avg,   rnd,y,8,OP_Y,avg2)
+DEFFUNC(avg,no_rnd,y,8,OP_Y,avg2)
 DEFFUNC(avg,   rnd,xy,8,OP_XY,PACK)
 DEFFUNC(avg,no_rnd,xy,8,OP_XY,PACK)
-DEFFUNC(avg,   rnd,o,16,OP_C,avg32)
-DEFFUNC(avg,   rnd,x,16,OP_X,avg32)
-DEFFUNC(avg,no_rnd,x,16,OP_X,avg32)
-DEFFUNC(avg,   rnd,y,16,OP_Y,avg32)
-DEFFUNC(avg,no_rnd,y,16,OP_Y,avg32)
+DEFFUNC(avg,   rnd,o,16,OP_C,avg2)
+DEFFUNC(avg,   rnd,x,16,OP_X,avg2)
+DEFFUNC(avg,no_rnd,x,16,OP_X,avg2)
+DEFFUNC(avg,   rnd,y,16,OP_Y,avg2)
+DEFFUNC(avg,no_rnd,y,16,OP_Y,avg2)
 DEFFUNC(avg,   rnd,xy,16,OP_XY,PACK)
 DEFFUNC(avg,no_rnd,xy,16,OP_XY,PACK)
 
@@ -370,22 +370,22 @@ void dsputil_init_align(DSPContext* c, AVCodecContext *avctx)
 #ifdef QPEL
 
 #define dspfunc(PFX, IDX, NUM) \
-    c->PFX ## _pixels_tab[IDX][ 0] = PFX ## NUM ## _mc00_sh4; \
-    c->PFX ## _pixels_tab[IDX][ 1] = PFX ## NUM ## _mc10_sh4; \
-    c->PFX ## _pixels_tab[IDX][ 2] = PFX ## NUM ## _mc20_sh4; \
-    c->PFX ## _pixels_tab[IDX][ 3] = PFX ## NUM ## _mc30_sh4; \
-    c->PFX ## _pixels_tab[IDX][ 4] = PFX ## NUM ## _mc01_sh4; \
-    c->PFX ## _pixels_tab[IDX][ 5] = PFX ## NUM ## _mc11_sh4; \
-    c->PFX ## _pixels_tab[IDX][ 6] = PFX ## NUM ## _mc21_sh4; \
-    c->PFX ## _pixels_tab[IDX][ 7] = PFX ## NUM ## _mc31_sh4; \
-    c->PFX ## _pixels_tab[IDX][ 8] = PFX ## NUM ## _mc02_sh4; \
-    c->PFX ## _pixels_tab[IDX][ 9] = PFX ## NUM ## _mc12_sh4; \
-    c->PFX ## _pixels_tab[IDX][10] = PFX ## NUM ## _mc22_sh4; \
-    c->PFX ## _pixels_tab[IDX][11] = PFX ## NUM ## _mc32_sh4; \
-    c->PFX ## _pixels_tab[IDX][12] = PFX ## NUM ## _mc03_sh4; \
-    c->PFX ## _pixels_tab[IDX][13] = PFX ## NUM ## _mc13_sh4; \
-    c->PFX ## _pixels_tab[IDX][14] = PFX ## NUM ## _mc23_sh4; \
-    c->PFX ## _pixels_tab[IDX][15] = PFX ## NUM ## _mc33_sh4
+    c->PFX ## _pixels_tab[IDX][ 0] = PFX ## NUM ## _mc00_c; \
+    c->PFX ## _pixels_tab[IDX][ 1] = PFX ## NUM ## _mc10_c; \
+    c->PFX ## _pixels_tab[IDX][ 2] = PFX ## NUM ## _mc20_c; \
+    c->PFX ## _pixels_tab[IDX][ 3] = PFX ## NUM ## _mc30_c; \
+    c->PFX ## _pixels_tab[IDX][ 4] = PFX ## NUM ## _mc01_c; \
+    c->PFX ## _pixels_tab[IDX][ 5] = PFX ## NUM ## _mc11_c; \
+    c->PFX ## _pixels_tab[IDX][ 6] = PFX ## NUM ## _mc21_c; \
+    c->PFX ## _pixels_tab[IDX][ 7] = PFX ## NUM ## _mc31_c; \
+    c->PFX ## _pixels_tab[IDX][ 8] = PFX ## NUM ## _mc02_c; \
+    c->PFX ## _pixels_tab[IDX][ 9] = PFX ## NUM ## _mc12_c; \
+    c->PFX ## _pixels_tab[IDX][10] = PFX ## NUM ## _mc22_c; \
+    c->PFX ## _pixels_tab[IDX][11] = PFX ## NUM ## _mc32_c; \
+    c->PFX ## _pixels_tab[IDX][12] = PFX ## NUM ## _mc03_c; \
+    c->PFX ## _pixels_tab[IDX][13] = PFX ## NUM ## _mc13_c; \
+    c->PFX ## _pixels_tab[IDX][14] = PFX ## NUM ## _mc23_c; \
+    c->PFX ## _pixels_tab[IDX][15] = PFX ## NUM ## _mc33_c
 
     dspfunc(put_qpel, 0, 16);
     dspfunc(put_no_rnd_qpel, 0, 16);
@@ -407,21 +407,21 @@ void dsputil_init_align(DSPContext* c, AVCodecContext *avctx)
     dspfunc(avg_h264_qpel, 2, 4);
 
 #undef dspfunc
-    c->put_h264_chroma_pixels_tab[0]= put_h264_chroma_mc8_sh4;
-    c->put_h264_chroma_pixels_tab[1]= put_h264_chroma_mc4_sh4;
-    c->put_h264_chroma_pixels_tab[2]= put_h264_chroma_mc2_sh4;
-    c->avg_h264_chroma_pixels_tab[0]= avg_h264_chroma_mc8_sh4;
-    c->avg_h264_chroma_pixels_tab[1]= avg_h264_chroma_mc4_sh4;
-    c->avg_h264_chroma_pixels_tab[2]= avg_h264_chroma_mc2_sh4;
-
-    c->put_mspel_pixels_tab[0]= put_mspel8_mc00_sh4;
-    c->put_mspel_pixels_tab[1]= put_mspel8_mc10_sh4;
-    c->put_mspel_pixels_tab[2]= put_mspel8_mc20_sh4;
-    c->put_mspel_pixels_tab[3]= put_mspel8_mc30_sh4;
-    c->put_mspel_pixels_tab[4]= put_mspel8_mc02_sh4;
-    c->put_mspel_pixels_tab[5]= put_mspel8_mc12_sh4;
-    c->put_mspel_pixels_tab[6]= put_mspel8_mc22_sh4;
-    c->put_mspel_pixels_tab[7]= put_mspel8_mc32_sh4;
+    c->put_h264_chroma_pixels_tab[0]= put_h264_chroma_mc8_c;
+    c->put_h264_chroma_pixels_tab[1]= put_h264_chroma_mc4_c;
+    c->put_h264_chroma_pixels_tab[2]= put_h264_chroma_mc2_c;
+    c->avg_h264_chroma_pixels_tab[0]= avg_h264_chroma_mc8_c;
+    c->avg_h264_chroma_pixels_tab[1]= avg_h264_chroma_mc4_c;
+    c->avg_h264_chroma_pixels_tab[2]= avg_h264_chroma_mc2_c;
+
+    c->put_mspel_pixels_tab[0]= put_mspel8_mc00_c;
+    c->put_mspel_pixels_tab[1]= put_mspel8_mc10_c;
+    c->put_mspel_pixels_tab[2]= put_mspel8_mc20_c;
+    c->put_mspel_pixels_tab[3]= put_mspel8_mc30_c;
+    c->put_mspel_pixels_tab[4]= put_mspel8_mc02_c;
+    c->put_mspel_pixels_tab[5]= put_mspel8_mc12_c;
+    c->put_mspel_pixels_tab[6]= put_mspel8_mc22_c;
+    c->put_mspel_pixels_tab[7]= put_mspel8_mc32_c;
 
     c->gmc1 = gmc1_c;
     c->gmc = gmc_c;
diff --git a/libavcodec/sh4/dsputil_sh4.c b/libavcodec/sh4/dsputil_sh4.c
index 2c86a7a..e7e2de6 100644
--- a/libavcodec/sh4/dsputil_sh4.c
+++ b/libavcodec/sh4/dsputil_sh4.c
@@ -22,15 +22,16 @@
 
 #include "libavcodec/avcodec.h"
 #include "libavcodec/dsputil.h"
-#include "sh4.h"
 
 static void memzero_align8(void *dst,size_t size)
 {
-        int fpscr;
-        fp_single_enter(fpscr);
-        dst = (char *)dst + size;
-        size /= 32;
-        __asm__ volatile (
+#if defined(__SH4__) || defined(__SH4_SINGLE__) || defined(__SH4_SINGLE_ONLY__)
+        (char*)dst+=size;
+        size/=8*4;
+        __asm__(
+#if defined(__SH4__)
+        " fschg\n"  //single float mode
+#endif
         " fldi0 fr0\n"
         " fldi0 fr1\n"
         " fschg\n"  // double
@@ -41,22 +42,35 @@ static void memzero_align8(void *dst,size_t size)
         " fmov  dr0, at -%0\n"
         " bf.s 1b\n"
         " fmov  dr0, at -%0\n"
+#if defined(__SH4_SINGLE__) || defined(__SH4_SINGLE_ONLY__)
         " fschg" //back to single
-        : "+r"(dst),"+r"(size) :: "memory" );
-        fp_single_leave(fpscr);
+#endif
+        : : "r"(dst),"r"(size): "memory" );
+#else
+        double *d = dst;
+        size/=8*4;
+        do {
+                d[0] = 0.0;
+                d[1] = 0.0;
+                d[2] = 0.0;
+                d[3] = 0.0;
+                d+=4;
+        } while(--size);
+#endif
 }
 
 static void clear_blocks_sh4(DCTELEM *blocks)
 {
+//        if (((int)blocks&7)==0)
         memzero_align8(blocks,sizeof(DCTELEM)*6*64);
 }
 
-void idct_sh4(DCTELEM *block);
+extern void idct_sh4(DCTELEM *block);
 static void idct_put(uint8_t *dest, int line_size, DCTELEM *block)
 {
+        idct_sh4(block);
         int i;
         uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;
-        idct_sh4(block);
         for(i=0;i<8;i++) {
                 dest[0] = cm[block[0]];
                 dest[1] = cm[block[1]];
@@ -72,9 +86,9 @@ static void idct_put(uint8_t *dest, int line_size, DCTELEM *block)
 }
 static void idct_add(uint8_t *dest, int line_size, DCTELEM *block)
 {
+        idct_sh4(block);
         int i;
         uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;
-        idct_sh4(block);
         for(i=0;i<8;i++) {
                 dest[0] = cm[dest[0]+block[0]];
                 dest[1] = cm[dest[1]+block[1]];
@@ -89,7 +103,7 @@ static void idct_add(uint8_t *dest, int line_size, DCTELEM *block)
         }
 }
 
-void dsputil_init_align(DSPContext* c, AVCodecContext *avctx);
+extern void dsputil_init_align(DSPContext* c, AVCodecContext *avctx);
 
 void dsputil_init_sh4(DSPContext* c, AVCodecContext *avctx)
 {
@@ -101,6 +115,6 @@ void dsputil_init_sh4(DSPContext* c, AVCodecContext *avctx)
                 c->idct_put = idct_put;
                 c->idct_add = idct_add;
                c->idct     = idct_sh4;
-                c->idct_permutation_type= FF_NO_IDCT_PERM;
+                c->idct_permutation_type= FF_NO_IDCT_PERM; //FF_SIMPLE_IDCT_PERM; //FF_LIBMPEG2_IDCT_PERM;
         }
 }
diff --git a/libavcodec/sh4/idct_sh4.c b/libavcodec/sh4/idct_sh4.c
index 5c461e7..b684e8f 100644
--- a/libavcodec/sh4/idct_sh4.c
+++ b/libavcodec/sh4/idct_sh4.c
@@ -21,8 +21,6 @@
  */
 
 #include "libavcodec/dsputil.h"
-#include "sh4.h"
-
 #define c1      1.38703984532214752434  /* sqrt(2)*cos(1*pi/16) */
 #define c2      1.30656296487637657577  /* sqrt(2)*cos(2*pi/16) */
 #define c3      1.17587560241935884520  /* sqrt(2)*cos(3*pi/16) */
@@ -53,11 +51,9 @@ static const float odd_table[] __attribute__ ((aligned(8))) = {
 #undef  c6
 #undef  c7
 
-#if 1
+#if defined(__SH4_SINGLE__) || defined(__SH4_SINGLE_ONLY__)
 
 #define         load_matrix(table) \
-    do { \
-        const float *t = table; \
         __asm__ volatile( \
         "       fschg\n" \
         "       fmov   @%0+,xd0\n" \
@@ -69,13 +65,15 @@ static const float odd_table[] __attribute__ ((aligned(8))) = {
         "       fmov   @%0+,xd12\n" \
         "       fmov   @%0+,xd14\n" \
         "       fschg\n" \
-        : "+r"(t) \
-        ); \
-    } while (0)
+        :\
+        : "r"(table)\
+        : "0" \
+        )
 
 #define         ftrv() \
                 __asm__ volatile("ftrv xmtrx,fv0" \
-                : "+f"(fr0),"+f"(fr1),"+f"(fr2),"+f"(fr3));
+                : "=f"(fr0),"=f"(fr1),"=f"(fr2),"=f"(fr3) \
+                :  "0"(fr0), "1"(fr1), "2"(fr2), "3"(fr3) );
 
 #define         DEFREG        \
         register float fr0 __asm__("fr0"); \
@@ -138,9 +136,10 @@ void idct_sh4(DCTELEM *block)
         int i;
         float        tblock[8*8],*fblock;
         int ofs1,ofs2,ofs3;
-        int fpscr;
 
-        fp_single_enter(fpscr);
+#if defined(__SH4__)
+#error  "FIXME!! change to single float"
+#endif
 
         /* row */
 
@@ -169,6 +168,10 @@ void idct_sh4(DCTELEM *block)
 
         i = 8;
 
+//        ofs1 = sizeof(float)*1;
+//        ofs2 = sizeof(float)*2;
+//        ofs3 = sizeof(float)*3;
+
         do {
                 float t0,t1,t2,t3;
                 fr0 = block[1];
@@ -249,7 +252,9 @@ void idct_sh4(DCTELEM *block)
                 block++;
         } while(--i);
 
-        fp_single_leave(fpscr);
+#if defined(__SH4__)
+#error  "FIXME!! change to double"
+#endif
 }
 #else
 void idct_sh4(DCTELEM *block)
diff --git a/libavcodec/sh4/qpel.c b/libavcodec/sh4/qpel.c
index 2069bd3..a75d22f 100644
--- a/libavcodec/sh4/qpel.c
+++ b/libavcodec/sh4/qpel.c
@@ -22,6 +22,63 @@
  */
 
 #define PIXOP2(OPNAME, OP) \
+/*static inline void OPNAME ## _no_rnd_pixels8_l2(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dst_stride, int src_stride1, int src_stride2, int h) \
+{\
+        do {\
+                OP(LP(dst  ),no_rnd_avg32(AV_RN32(src1  ),AV_RN32(src2  )) ); \
+                OP(LP(dst+4),no_rnd_avg32(AV_RN32(src1+4),AV_RN32(src2+4)) ); \
+                src1+=src_stride1; \
+                src2+=src_stride2; \
+                dst+=dst_stride; \
+        } while(--h); \
+}\
+\
+static inline void OPNAME ## _pixels8_l2(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dst_stride, int src_stride1, int src_stride2, int h) \
+{\
+        do {\
+                OP(LP(dst  ),rnd_avg32(AV_RN32(src1  ),AV_RN32(src2  )) ); \
+                OP(LP(dst+4),rnd_avg32(AV_RN32(src1+4),AV_RN32(src2+4)) ); \
+                src1+=src_stride1; \
+                src2+=src_stride2; \
+                dst+=dst_stride; \
+        } while(--h); \
+}\
+\
+static inline void OPNAME ## _pixels4_l2(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dst_stride, int src_stride1, int src_stride2, int h) \
+{\
+        do {\
+                OP(LP(dst  ),rnd_avg32(AV_RN32(src1  ),AV_RN32(src2  )) ); \
+                src1+=src_stride1; \
+                src2+=src_stride2; \
+                dst+=dst_stride; \
+        } while(--h); \
+}\
+\
+static inline void OPNAME ## _no_rnd_pixels16_l2(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dst_stride, int src_stride1, int src_stride2, int h) \
+{\
+        do {\
+                OP(LP(dst  ),no_rnd_avg32(AV_RN32(src1  ),AV_RN32(src2  )) ); \
+                OP(LP(dst+4),no_rnd_avg32(AV_RN32(src1+4),AV_RN32(src2+4)) ); \
+                OP(LP(dst+8),no_rnd_avg32(AV_RN32(src1+8),AV_RN32(src2+8)) ); \
+                OP(LP(dst+12),no_rnd_avg32(AV_RN32(src1+12),AV_RN32(src2+12)) ); \
+                src1+=src_stride1; \
+                src2+=src_stride2; \
+                dst+=dst_stride; \
+        } while(--h); \
+}\
+\
+static inline void OPNAME ## _pixels16_l2(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dst_stride, int src_stride1, int src_stride2, int h) \
+{\
+        do {\
+                OP(LP(dst  ),rnd_avg32(AV_RN32(src1  ),AV_RN32(src2  )) ); \
+                OP(LP(dst+4),rnd_avg32(AV_RN32(src1+4),AV_RN32(src2+4)) ); \
+                OP(LP(dst+8),rnd_avg32(AV_RN32(src1+8),AV_RN32(src2+8)) ); \
+                OP(LP(dst+12),rnd_avg32(AV_RN32(src1+12),AV_RN32(src2+12)) ); \
+                src1+=src_stride1; \
+                src2+=src_stride2; \
+                dst+=dst_stride; \
+        } while(--h); \
+}*/\
 \
 static inline void OPNAME ## _pixels4_l2_aligned(uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int dst_stride, int src_stride1, int src_stride2, int h) \
 {\
@@ -415,7 +472,7 @@ static void gmc_c(uint8_t *dst, uint8_t *src, int stride, int h, int ox, int oy,
     }
 }
 #define H264_CHROMA_MC(OPNAME, OP)\
-static void OPNAME ## h264_chroma_mc2_sh4(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y){\
+static void OPNAME ## h264_chroma_mc2_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y){\
     const int A=(8-x)*(8-y);\
     const int B=(  x)*(8-y);\
     const int C=(8-x)*(  y);\
@@ -437,7 +494,7 @@ static void OPNAME ## h264_chroma_mc2_sh4(uint8_t *dst/*align 8*/, uint8_t *src/
     }while(--h);\
 }\
 \
-static void OPNAME ## h264_chroma_mc4_sh4(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y){\
+static void OPNAME ## h264_chroma_mc4_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y){\
     const int A=(8-x)*(8-y);\
     const int B=(  x)*(8-y);\
     const int C=(8-x)*(  y);\
@@ -463,7 +520,7 @@ static void OPNAME ## h264_chroma_mc4_sh4(uint8_t *dst/*align 8*/, uint8_t *src/
     }while(--h);\
 }\
 \
-static void OPNAME ## h264_chroma_mc8_sh4(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y){\
+static void OPNAME ## h264_chroma_mc8_c(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y){\
     const int A=(8-x)*(8-y);\
     const int B=(  x)*(8-y);\
     const int C=(8-x)*(  y);\
@@ -650,27 +707,27 @@ static void OPNAME ## mpeg4_qpel16_v_lowpass(uint8_t *dst, uint8_t *src, int dst
     }while(--w);\
 }\
 \
-static void OPNAME ## qpel8_mc00_sh4 (uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## qpel8_mc00_c (uint8_t *dst, uint8_t *src, int stride){\
     OPNAME ## pixels8_c(dst, src, stride, 8);\
 }\
 \
-static void OPNAME ## qpel8_mc10_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## qpel8_mc10_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t half[64];\
     put ## RND ## mpeg4_qpel8_h_lowpass(half, src, 8, stride, 8);\
     OPNAME ## pixels8_l2_aligned2(dst, src, half, stride, stride, 8, 8);\
 }\
 \
-static void OPNAME ## qpel8_mc20_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## qpel8_mc20_c(uint8_t *dst, uint8_t *src, int stride){\
     OPNAME ## mpeg4_qpel8_h_lowpass(dst, src, stride, stride, 8);\
 }\
 \
-static void OPNAME ## qpel8_mc30_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## qpel8_mc30_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t half[64];\
     put ## RND ## mpeg4_qpel8_h_lowpass(half, src, 8, stride, 8);\
     OPNAME ## pixels8_l2_aligned2(dst, src+1, half, stride, stride, 8, 8);\
 }\
 \
-static void OPNAME ## qpel8_mc01_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## qpel8_mc01_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t full[16*9];\
     uint8_t half[64];\
     copy_block9(full, src, 16, stride, 9);\
@@ -678,20 +735,31 @@ static void OPNAME ## qpel8_mc01_sh4(uint8_t *dst, uint8_t *src, int stride){\
     OPNAME ## pixels8_l2_aligned(dst, full, half, stride, 16, 8, 8);\
 }\
 \
-static void OPNAME ## qpel8_mc02_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## qpel8_mc02_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t full[16*9];\
     copy_block9(full, src, 16, stride, 9);\
     OPNAME ## mpeg4_qpel8_v_lowpass(dst, full, stride, 16);\
 }\
 \
-static void OPNAME ## qpel8_mc03_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## qpel8_mc03_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t full[16*9];\
     uint8_t half[64];\
     copy_block9(full, src, 16, stride, 9);\
     put ## RND ## mpeg4_qpel8_v_lowpass(half, full, 8, 16);\
     OPNAME ## pixels8_l2_aligned(dst, full+16, half, stride, 16, 8, 8);\
 }\
-static void OPNAME ## qpel8_mc11_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void ff_ ## OPNAME ## qpel8_mc11_old_c(uint8_t *dst, uint8_t *src, int stride){\
+    uint8_t full[16*9];\
+    uint8_t halfH[72];\
+    uint8_t halfV[64];\
+    uint8_t halfHV[64];\
+    copy_block9(full, src, 16, stride, 9);\
+    put ## RND ## mpeg4_qpel8_h_lowpass(halfH, full, 8, 16, 9);\
+    put ## RND ## mpeg4_qpel8_v_lowpass(halfV, full, 8, 16);\
+    put ## RND ## mpeg4_qpel8_v_lowpass(halfHV, halfH, 8, 8);\
+    OPNAME ## pixels8_l4_aligned(dst, full, halfH, halfV, halfHV, stride, 16, 8, 8, 8, 8);\
+}\
+static void OPNAME ## qpel8_mc11_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t full[16*9];\
     uint8_t halfH[72];\
     uint8_t halfHV[64];\
@@ -701,7 +769,18 @@ static void OPNAME ## qpel8_mc11_sh4(uint8_t *dst, uint8_t *src, int stride){\
     put ## RND ## mpeg4_qpel8_v_lowpass(halfHV, halfH, 8, 8);\
     OPNAME ## pixels8_l2_aligned(dst, halfH, halfHV, stride, 8, 8, 8);\
 }\
-static void OPNAME ## qpel8_mc31_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void ff_ ## OPNAME ## qpel8_mc31_old_c(uint8_t *dst, uint8_t *src, int stride){\
+    uint8_t full[16*9];\
+    uint8_t halfH[72];\
+    uint8_t halfV[64];\
+    uint8_t halfHV[64];\
+    copy_block9(full, src, 16, stride, 9);\
+    put ## RND ## mpeg4_qpel8_h_lowpass(halfH, full, 8, 16, 9);\
+    put ## RND ## mpeg4_qpel8_v_lowpass(halfV, full+1, 8, 16);\
+    put ## RND ## mpeg4_qpel8_v_lowpass(halfHV, halfH, 8, 8);\
+    OPNAME ## pixels8_l4_aligned0(dst, full+1, halfH, halfV, halfHV, stride, 16, 8, 8, 8, 8);\
+}\
+static void OPNAME ## qpel8_mc31_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t full[16*9];\
     uint8_t halfH[72];\
     uint8_t halfHV[64];\
@@ -711,7 +790,18 @@ static void OPNAME ## qpel8_mc31_sh4(uint8_t *dst, uint8_t *src, int stride){\
     put ## RND ## mpeg4_qpel8_v_lowpass(halfHV, halfH, 8, 8);\
     OPNAME ## pixels8_l2_aligned(dst, halfH, halfHV, stride, 8, 8, 8);\
 }\
-static void OPNAME ## qpel8_mc13_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void ff_ ## OPNAME ## qpel8_mc13_old_c(uint8_t *dst, uint8_t *src, int stride){\
+    uint8_t full[16*9];\
+    uint8_t halfH[72];\
+    uint8_t halfV[64];\
+    uint8_t halfHV[64];\
+    copy_block9(full, src, 16, stride, 9);\
+    put ## RND ## mpeg4_qpel8_h_lowpass(halfH, full, 8, 16, 9);\
+    put ## RND ## mpeg4_qpel8_v_lowpass(halfV, full, 8, 16);\
+    put ## RND ## mpeg4_qpel8_v_lowpass(halfHV, halfH, 8, 8);\
+    OPNAME ## pixels8_l4_aligned(dst, full+16, halfH+8, halfV, halfHV, stride, 16, 8, 8, 8, 8);\
+}\
+static void OPNAME ## qpel8_mc13_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t full[16*9];\
     uint8_t halfH[72];\
     uint8_t halfHV[64];\
@@ -721,7 +811,18 @@ static void OPNAME ## qpel8_mc13_sh4(uint8_t *dst, uint8_t *src, int stride){\
     put ## RND ## mpeg4_qpel8_v_lowpass(halfHV, halfH, 8, 8);\
     OPNAME ## pixels8_l2_aligned(dst, halfH+8, halfHV, stride, 8, 8, 8);\
 }\
-static void OPNAME ## qpel8_mc33_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void ff_ ## OPNAME ## qpel8_mc33_old_c(uint8_t *dst, uint8_t *src, int stride){\
+    uint8_t full[16*9];\
+    uint8_t halfH[72];\
+    uint8_t halfV[64];\
+    uint8_t halfHV[64];\
+    copy_block9(full, src, 16, stride, 9);\
+    put ## RND ## mpeg4_qpel8_h_lowpass(halfH, full  , 8, 16, 9);\
+    put ## RND ## mpeg4_qpel8_v_lowpass(halfV, full+1, 8, 16);\
+    put ## RND ## mpeg4_qpel8_v_lowpass(halfHV, halfH, 8, 8);\
+    OPNAME ## pixels8_l4_aligned0(dst, full+17, halfH+8, halfV, halfHV, stride, 16, 8, 8, 8, 8);\
+}\
+static void OPNAME ## qpel8_mc33_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t full[16*9];\
     uint8_t halfH[72];\
     uint8_t halfHV[64];\
@@ -731,21 +832,32 @@ static void OPNAME ## qpel8_mc33_sh4(uint8_t *dst, uint8_t *src, int stride){\
     put ## RND ## mpeg4_qpel8_v_lowpass(halfHV, halfH, 8, 8);\
     OPNAME ## pixels8_l2_aligned(dst, halfH+8, halfHV, stride, 8, 8, 8);\
 }\
-static void OPNAME ## qpel8_mc21_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## qpel8_mc21_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t halfH[72];\
     uint8_t halfHV[64];\
     put ## RND ## mpeg4_qpel8_h_lowpass(halfH, src, 8, stride, 9);\
     put ## RND ## mpeg4_qpel8_v_lowpass(halfHV, halfH, 8, 8);\
     OPNAME ## pixels8_l2_aligned(dst, halfH, halfHV, stride, 8, 8, 8);\
 }\
-static void OPNAME ## qpel8_mc23_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## qpel8_mc23_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t halfH[72];\
     uint8_t halfHV[64];\
     put ## RND ## mpeg4_qpel8_h_lowpass(halfH, src, 8, stride, 9);\
     put ## RND ## mpeg4_qpel8_v_lowpass(halfHV, halfH, 8, 8);\
     OPNAME ## pixels8_l2_aligned(dst, halfH+8, halfHV, stride, 8, 8, 8);\
 }\
-static void OPNAME ## qpel8_mc12_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void ff_ ## OPNAME ## qpel8_mc12_old_c(uint8_t *dst, uint8_t *src, int stride){\
+    uint8_t full[16*9];\
+    uint8_t halfH[72];\
+    uint8_t halfV[64];\
+    uint8_t halfHV[64];\
+    copy_block9(full, src, 16, stride, 9);\
+    put ## RND ## mpeg4_qpel8_h_lowpass(halfH, full, 8, 16, 9);\
+    put ## RND ## mpeg4_qpel8_v_lowpass(halfV, full, 8, 16);\
+    put ## RND ## mpeg4_qpel8_v_lowpass(halfHV, halfH, 8, 8);\
+    OPNAME ## pixels8_l2_aligned(dst, halfV, halfHV, stride, 8, 8, 8);\
+}\
+static void OPNAME ## qpel8_mc12_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t full[16*9];\
     uint8_t halfH[72];\
     copy_block9(full, src, 16, stride, 9);\
@@ -753,7 +865,18 @@ static void OPNAME ## qpel8_mc12_sh4(uint8_t *dst, uint8_t *src, int stride){\
     put ## RND ## pixels8_l2_aligned(halfH, halfH, full, 8, 8, 16, 9);\
     OPNAME ## mpeg4_qpel8_v_lowpass(dst, halfH, stride, 8);\
 }\
-static void OPNAME ## qpel8_mc32_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void ff_ ## OPNAME ## qpel8_mc32_old_c(uint8_t *dst, uint8_t *src, int stride){\
+    uint8_t full[16*9];\
+    uint8_t halfH[72];\
+    uint8_t halfV[64];\
+    uint8_t halfHV[64];\
+    copy_block9(full, src, 16, stride, 9);\
+    put ## RND ## mpeg4_qpel8_h_lowpass(halfH, full, 8, 16, 9);\
+    put ## RND ## mpeg4_qpel8_v_lowpass(halfV, full+1, 8, 16);\
+    put ## RND ## mpeg4_qpel8_v_lowpass(halfHV, halfH, 8, 8);\
+    OPNAME ## pixels8_l2_aligned(dst, halfV, halfHV, stride, 8, 8, 8);\
+}\
+static void OPNAME ## qpel8_mc32_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t full[16*9];\
     uint8_t halfH[72];\
     copy_block9(full, src, 16, stride, 9);\
@@ -761,32 +884,32 @@ static void OPNAME ## qpel8_mc32_sh4(uint8_t *dst, uint8_t *src, int stride){\
     put ## RND ## pixels8_l2_aligned1(halfH, halfH, full+1, 8, 8, 16, 9);\
     OPNAME ## mpeg4_qpel8_v_lowpass(dst, halfH, stride, 8);\
 }\
-static void OPNAME ## qpel8_mc22_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## qpel8_mc22_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t halfH[72];\
     put ## RND ## mpeg4_qpel8_h_lowpass(halfH, src, 8, stride, 9);\
     OPNAME ## mpeg4_qpel8_v_lowpass(dst, halfH, stride, 8);\
 }\
-static void OPNAME ## qpel16_mc00_sh4 (uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## qpel16_mc00_c (uint8_t *dst, uint8_t *src, int stride){\
     OPNAME ## pixels16_c(dst, src, stride, 16);\
 }\
 \
-static void OPNAME ## qpel16_mc10_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## qpel16_mc10_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t half[256];\
     put ## RND ## mpeg4_qpel16_h_lowpass(half, src, 16, stride, 16);\
     OPNAME ## pixels16_l2_aligned2(dst, src, half, stride, stride, 16, 16);\
 }\
 \
-static void OPNAME ## qpel16_mc20_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## qpel16_mc20_c(uint8_t *dst, uint8_t *src, int stride){\
     OPNAME ## mpeg4_qpel16_h_lowpass(dst, src, stride, stride, 16);\
 }\
 \
-static void OPNAME ## qpel16_mc30_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## qpel16_mc30_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t half[256];\
     put ## RND ## mpeg4_qpel16_h_lowpass(half, src, 16, stride, 16);\
     OPNAME ## pixels16_l2_aligned2(dst, src+1, half, stride, stride, 16, 16);\
 }\
 \
-static void OPNAME ## qpel16_mc01_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## qpel16_mc01_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t full[24*17];\
     uint8_t half[256];\
     copy_block17(full, src, 24, stride, 17);\
@@ -794,20 +917,31 @@ static void OPNAME ## qpel16_mc01_sh4(uint8_t *dst, uint8_t *src, int stride){\
     OPNAME ## pixels16_l2_aligned(dst, full, half, stride, 24, 16, 16);\
 }\
 \
-static void OPNAME ## qpel16_mc02_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## qpel16_mc02_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t full[24*17];\
     copy_block17(full, src, 24, stride, 17);\
     OPNAME ## mpeg4_qpel16_v_lowpass(dst, full, stride, 24);\
 }\
 \
-static void OPNAME ## qpel16_mc03_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## qpel16_mc03_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t full[24*17];\
     uint8_t half[256];\
     copy_block17(full, src, 24, stride, 17);\
     put ## RND ## mpeg4_qpel16_v_lowpass(half, full, 16, 24);\
     OPNAME ## pixels16_l2_aligned(dst, full+24, half, stride, 24, 16, 16);\
 }\
-static void OPNAME ## qpel16_mc11_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void ff_ ## OPNAME ## qpel16_mc11_old_c(uint8_t *dst, uint8_t *src, int stride){\
+    uint8_t full[24*17];\
+    uint8_t halfH[272];\
+    uint8_t halfV[256];\
+    uint8_t halfHV[256];\
+    copy_block17(full, src, 24, stride, 17);\
+    put ## RND ## mpeg4_qpel16_h_lowpass(halfH, full, 16, 24, 17);\
+    put ## RND ## mpeg4_qpel16_v_lowpass(halfV, full, 16, 24);\
+    put ## RND ## mpeg4_qpel16_v_lowpass(halfHV, halfH, 16, 16);\
+    OPNAME ## pixels16_l4_aligned(dst, full, halfH, halfV, halfHV, stride, 24, 16, 16, 16, 16);\
+}\
+static void OPNAME ## qpel16_mc11_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t full[24*17];\
     uint8_t halfH[272];\
     uint8_t halfHV[256];\
@@ -817,7 +951,18 @@ static void OPNAME ## qpel16_mc11_sh4(uint8_t *dst, uint8_t *src, int stride){\
     put ## RND ## mpeg4_qpel16_v_lowpass(halfHV, halfH, 16, 16);\
     OPNAME ## pixels16_l2_aligned(dst, halfH, halfHV, stride, 16, 16, 16);\
 }\
-static void OPNAME ## qpel16_mc31_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void ff_ ## OPNAME ## qpel16_mc31_old_c(uint8_t *dst, uint8_t *src, int stride){\
+    uint8_t full[24*17];\
+    uint8_t halfH[272];\
+    uint8_t halfV[256];\
+    uint8_t halfHV[256];\
+    copy_block17(full, src, 24, stride, 17);\
+    put ## RND ## mpeg4_qpel16_h_lowpass(halfH, full, 16, 24, 17);\
+    put ## RND ## mpeg4_qpel16_v_lowpass(halfV, full+1, 16, 24);\
+    put ## RND ## mpeg4_qpel16_v_lowpass(halfHV, halfH, 16, 16);\
+    OPNAME ## pixels16_l4_aligned0(dst, full+1, halfH, halfV, halfHV, stride, 24, 16, 16, 16, 16);\
+}\
+static void OPNAME ## qpel16_mc31_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t full[24*17];\
     uint8_t halfH[272];\
     uint8_t halfHV[256];\
@@ -827,7 +972,18 @@ static void OPNAME ## qpel16_mc31_sh4(uint8_t *dst, uint8_t *src, int stride){\
     put ## RND ## mpeg4_qpel16_v_lowpass(halfHV, halfH, 16, 16);\
     OPNAME ## pixels16_l2_aligned(dst, halfH, halfHV, stride, 16, 16, 16);\
 }\
-static void OPNAME ## qpel16_mc13_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void ff_ ## OPNAME ## qpel16_mc13_old_c(uint8_t *dst, uint8_t *src, int stride){\
+    uint8_t full[24*17];\
+    uint8_t halfH[272];\
+    uint8_t halfV[256];\
+    uint8_t halfHV[256];\
+    copy_block17(full, src, 24, stride, 17);\
+    put ## RND ## mpeg4_qpel16_h_lowpass(halfH, full, 16, 24, 17);\
+    put ## RND ## mpeg4_qpel16_v_lowpass(halfV, full, 16, 24);\
+    put ## RND ## mpeg4_qpel16_v_lowpass(halfHV, halfH, 16, 16);\
+    OPNAME ## pixels16_l4_aligned(dst, full+24, halfH+16, halfV, halfHV, stride, 24, 16, 16, 16, 16);\
+}\
+static void OPNAME ## qpel16_mc13_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t full[24*17];\
     uint8_t halfH[272];\
     uint8_t halfHV[256];\
@@ -837,7 +993,18 @@ static void OPNAME ## qpel16_mc13_sh4(uint8_t *dst, uint8_t *src, int stride){\
     put ## RND ## mpeg4_qpel16_v_lowpass(halfHV, halfH, 16, 16);\
     OPNAME ## pixels16_l2_aligned(dst, halfH+16, halfHV, stride, 16, 16, 16);\
 }\
-static void OPNAME ## qpel16_mc33_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void ff_ ## OPNAME ## qpel16_mc33_old_c(uint8_t *dst, uint8_t *src, int stride){\
+    uint8_t full[24*17];\
+    uint8_t halfH[272];\
+    uint8_t halfV[256];\
+    uint8_t halfHV[256];\
+    copy_block17(full, src, 24, stride, 17);\
+    put ## RND ## mpeg4_qpel16_h_lowpass(halfH, full  , 16, 24, 17);\
+    put ## RND ## mpeg4_qpel16_v_lowpass(halfV, full+1, 16, 24);\
+    put ## RND ## mpeg4_qpel16_v_lowpass(halfHV, halfH, 16, 16);\
+    OPNAME ## pixels16_l4_aligned0(dst, full+25, halfH+16, halfV, halfHV, stride, 24, 16, 16, 16, 16);\
+}\
+static void OPNAME ## qpel16_mc33_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t full[24*17];\
     uint8_t halfH[272];\
     uint8_t halfHV[256];\
@@ -847,21 +1014,32 @@ static void OPNAME ## qpel16_mc33_sh4(uint8_t *dst, uint8_t *src, int stride){\
     put ## RND ## mpeg4_qpel16_v_lowpass(halfHV, halfH, 16, 16);\
     OPNAME ## pixels16_l2_aligned(dst, halfH+16, halfHV, stride, 16, 16, 16);\
 }\
-static void OPNAME ## qpel16_mc21_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## qpel16_mc21_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t halfH[272];\
     uint8_t halfHV[256];\
     put ## RND ## mpeg4_qpel16_h_lowpass(halfH, src, 16, stride, 17);\
     put ## RND ## mpeg4_qpel16_v_lowpass(halfHV, halfH, 16, 16);\
     OPNAME ## pixels16_l2_aligned(dst, halfH, halfHV, stride, 16, 16, 16);\
 }\
-static void OPNAME ## qpel16_mc23_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## qpel16_mc23_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t halfH[272];\
     uint8_t halfHV[256];\
     put ## RND ## mpeg4_qpel16_h_lowpass(halfH, src, 16, stride, 17);\
     put ## RND ## mpeg4_qpel16_v_lowpass(halfHV, halfH, 16, 16);\
     OPNAME ## pixels16_l2_aligned(dst, halfH+16, halfHV, stride, 16, 16, 16);\
 }\
-static void OPNAME ## qpel16_mc12_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void ff_ ## OPNAME ## qpel16_mc12_old_c(uint8_t *dst, uint8_t *src, int stride){\
+    uint8_t full[24*17];\
+    uint8_t halfH[272];\
+    uint8_t halfV[256];\
+    uint8_t halfHV[256];\
+    copy_block17(full, src, 24, stride, 17);\
+    put ## RND ## mpeg4_qpel16_h_lowpass(halfH, full, 16, 24, 17);\
+    put ## RND ## mpeg4_qpel16_v_lowpass(halfV, full, 16, 24);\
+    put ## RND ## mpeg4_qpel16_v_lowpass(halfHV, halfH, 16, 16);\
+    OPNAME ## pixels16_l2_aligned(dst, halfV, halfHV, stride, 16, 16, 16);\
+}\
+static void OPNAME ## qpel16_mc12_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t full[24*17];\
     uint8_t halfH[272];\
     copy_block17(full, src, 24, stride, 17);\
@@ -869,7 +1047,18 @@ static void OPNAME ## qpel16_mc12_sh4(uint8_t *dst, uint8_t *src, int stride){\
     put ## RND ## pixels16_l2_aligned(halfH, halfH, full, 16, 16, 24, 17);\
     OPNAME ## mpeg4_qpel16_v_lowpass(dst, halfH, stride, 16);\
 }\
-static void OPNAME ## qpel16_mc32_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void ff_ ## OPNAME ## qpel16_mc32_old_c(uint8_t *dst, uint8_t *src, int stride){\
+    uint8_t full[24*17];\
+    uint8_t halfH[272];\
+    uint8_t halfV[256];\
+    uint8_t halfHV[256];\
+    copy_block17(full, src, 24, stride, 17);\
+    put ## RND ## mpeg4_qpel16_h_lowpass(halfH, full, 16, 24, 17);\
+    put ## RND ## mpeg4_qpel16_v_lowpass(halfV, full+1, 16, 24);\
+    put ## RND ## mpeg4_qpel16_v_lowpass(halfHV, halfH, 16, 16);\
+    OPNAME ## pixels16_l2_aligned(dst, halfV, halfHV, stride, 16, 16, 16);\
+}\
+static void OPNAME ## qpel16_mc32_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t full[24*17];\
     uint8_t halfH[272];\
     copy_block17(full, src, 24, stride, 17);\
@@ -877,7 +1066,7 @@ static void OPNAME ## qpel16_mc32_sh4(uint8_t *dst, uint8_t *src, int stride){\
     put ## RND ## pixels16_l2_aligned1(halfH, halfH, full+1, 16, 16, 24, 17);\
     OPNAME ## mpeg4_qpel16_v_lowpass(dst, halfH, stride, 16);\
 }\
-static void OPNAME ## qpel16_mc22_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## qpel16_mc22_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t halfH[272];\
     put ## RND ## mpeg4_qpel16_h_lowpass(halfH, src, 16, stride, 17);\
     OPNAME ## mpeg4_qpel16_v_lowpass(dst, halfH, stride, 16);\
@@ -1143,27 +1332,27 @@ static void OPNAME ## h264_qpel16_hv_lowpass(uint8_t *dst, int16_t *tmp, uint8_t
 }\
 
 #define H264_MC(OPNAME, SIZE) \
-static void OPNAME ## h264_qpel ## SIZE ## _mc00_sh4 (uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## h264_qpel ## SIZE ## _mc00_c (uint8_t *dst, uint8_t *src, int stride){\
     OPNAME ## pixels ## SIZE ## _c(dst, src, stride, SIZE);\
 }\
 \
-static void OPNAME ## h264_qpel ## SIZE ## _mc10_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## h264_qpel ## SIZE ## _mc10_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t half[SIZE*SIZE];\
     put_h264_qpel ## SIZE ## _h_lowpass(half, src, SIZE, stride);\
     OPNAME ## pixels ## SIZE ## _l2_aligned2(dst, src, half, stride, stride, SIZE, SIZE);\
 }\
 \
-static void OPNAME ## h264_qpel ## SIZE ## _mc20_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## h264_qpel ## SIZE ## _mc20_c(uint8_t *dst, uint8_t *src, int stride){\
     OPNAME ## h264_qpel ## SIZE ## _h_lowpass(dst, src, stride, stride);\
 }\
 \
-static void OPNAME ## h264_qpel ## SIZE ## _mc30_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## h264_qpel ## SIZE ## _mc30_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t half[SIZE*SIZE];\
     put_h264_qpel ## SIZE ## _h_lowpass(half, src, SIZE, stride);\
     OPNAME ## pixels ## SIZE ## _l2_aligned2(dst, src+1, half, stride, stride, SIZE, SIZE);\
 }\
 \
-static void OPNAME ## h264_qpel ## SIZE ## _mc01_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## h264_qpel ## SIZE ## _mc01_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t full[SIZE*(SIZE+5)];\
     uint8_t * const full_mid= full + SIZE*2;\
     uint8_t half[SIZE*SIZE];\
@@ -1172,14 +1361,14 @@ static void OPNAME ## h264_qpel ## SIZE ## _mc01_sh4(uint8_t *dst, uint8_t *src,
     OPNAME ## pixels ## SIZE ## _l2_aligned(dst, full_mid, half, stride, SIZE, SIZE, SIZE);\
 }\
 \
-static void OPNAME ## h264_qpel ## SIZE ## _mc02_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## h264_qpel ## SIZE ## _mc02_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t full[SIZE*(SIZE+5)];\
     uint8_t * const full_mid= full + SIZE*2;\
     copy_block ## SIZE (full, src - stride*2, SIZE,  stride, SIZE + 5);\
     OPNAME ## h264_qpel ## SIZE ## _v_lowpass(dst, full_mid, stride, SIZE);\
 }\
 \
-static void OPNAME ## h264_qpel ## SIZE ## _mc03_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## h264_qpel ## SIZE ## _mc03_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t full[SIZE*(SIZE+5)];\
     uint8_t * const full_mid= full + SIZE*2;\
     uint8_t half[SIZE*SIZE];\
@@ -1188,7 +1377,7 @@ static void OPNAME ## h264_qpel ## SIZE ## _mc03_sh4(uint8_t *dst, uint8_t *src,
     OPNAME ## pixels ## SIZE ## _l2_aligned(dst, full_mid+SIZE, half, stride, SIZE, SIZE, SIZE);\
 }\
 \
-static void OPNAME ## h264_qpel ## SIZE ## _mc11_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## h264_qpel ## SIZE ## _mc11_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t full[SIZE*(SIZE+5)];\
     uint8_t * const full_mid= full + SIZE*2;\
     uint8_t halfH[SIZE*SIZE];\
@@ -1199,7 +1388,7 @@ static void OPNAME ## h264_qpel ## SIZE ## _mc11_sh4(uint8_t *dst, uint8_t *src,
     OPNAME ## pixels ## SIZE ## _l2_aligned(dst, halfH, halfV, stride, SIZE, SIZE, SIZE);\
 }\
 \
-static void OPNAME ## h264_qpel ## SIZE ## _mc31_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## h264_qpel ## SIZE ## _mc31_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t full[SIZE*(SIZE+5)];\
     uint8_t * const full_mid= full + SIZE*2;\
     uint8_t halfH[SIZE*SIZE];\
@@ -1210,7 +1399,7 @@ static void OPNAME ## h264_qpel ## SIZE ## _mc31_sh4(uint8_t *dst, uint8_t *src,
     OPNAME ## pixels ## SIZE ## _l2_aligned(dst, halfH, halfV, stride, SIZE, SIZE, SIZE);\
 }\
 \
-static void OPNAME ## h264_qpel ## SIZE ## _mc13_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## h264_qpel ## SIZE ## _mc13_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t full[SIZE*(SIZE+5)];\
     uint8_t * const full_mid= full + SIZE*2;\
     uint8_t halfH[SIZE*SIZE];\
@@ -1221,7 +1410,7 @@ static void OPNAME ## h264_qpel ## SIZE ## _mc13_sh4(uint8_t *dst, uint8_t *src,
     OPNAME ## pixels ## SIZE ## _l2_aligned(dst, halfH, halfV, stride, SIZE, SIZE, SIZE);\
 }\
 \
-static void OPNAME ## h264_qpel ## SIZE ## _mc33_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## h264_qpel ## SIZE ## _mc33_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t full[SIZE*(SIZE+5)];\
     uint8_t * const full_mid= full + SIZE*2;\
     uint8_t halfH[SIZE*SIZE];\
@@ -1232,12 +1421,12 @@ static void OPNAME ## h264_qpel ## SIZE ## _mc33_sh4(uint8_t *dst, uint8_t *src,
     OPNAME ## pixels ## SIZE ## _l2_aligned(dst, halfH, halfV, stride, SIZE, SIZE, SIZE);\
 }\
 \
-static void OPNAME ## h264_qpel ## SIZE ## _mc22_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## h264_qpel ## SIZE ## _mc22_c(uint8_t *dst, uint8_t *src, int stride){\
     int16_t tmp[SIZE*(SIZE+5)];\
     OPNAME ## h264_qpel ## SIZE ## _hv_lowpass(dst, tmp, src, stride, SIZE, stride);\
 }\
 \
-static void OPNAME ## h264_qpel ## SIZE ## _mc21_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## h264_qpel ## SIZE ## _mc21_c(uint8_t *dst, uint8_t *src, int stride){\
     int16_t tmp[SIZE*(SIZE+5)];\
     uint8_t halfH[SIZE*SIZE];\
     uint8_t halfHV[SIZE*SIZE];\
@@ -1246,7 +1435,7 @@ static void OPNAME ## h264_qpel ## SIZE ## _mc21_sh4(uint8_t *dst, uint8_t *src,
     OPNAME ## pixels ## SIZE ## _l2_aligned(dst, halfH, halfHV, stride, SIZE, SIZE, SIZE);\
 }\
 \
-static void OPNAME ## h264_qpel ## SIZE ## _mc23_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## h264_qpel ## SIZE ## _mc23_c(uint8_t *dst, uint8_t *src, int stride){\
     int16_t tmp[SIZE*(SIZE+5)];\
     uint8_t halfH[SIZE*SIZE];\
     uint8_t halfHV[SIZE*SIZE];\
@@ -1255,7 +1444,7 @@ static void OPNAME ## h264_qpel ## SIZE ## _mc23_sh4(uint8_t *dst, uint8_t *src,
     OPNAME ## pixels ## SIZE ## _l2_aligned(dst, halfH, halfHV, stride, SIZE, SIZE, SIZE);\
 }\
 \
-static void OPNAME ## h264_qpel ## SIZE ## _mc12_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## h264_qpel ## SIZE ## _mc12_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t full[SIZE*(SIZE+5)];\
     uint8_t * const full_mid= full + SIZE*2;\
     int16_t tmp[SIZE*(SIZE+5)];\
@@ -1267,7 +1456,7 @@ static void OPNAME ## h264_qpel ## SIZE ## _mc12_sh4(uint8_t *dst, uint8_t *src,
     OPNAME ## pixels ## SIZE ## _l2_aligned(dst, halfV, halfHV, stride, SIZE, SIZE, SIZE);\
 }\
 \
-static void OPNAME ## h264_qpel ## SIZE ## _mc32_sh4(uint8_t *dst, uint8_t *src, int stride){\
+static void OPNAME ## h264_qpel ## SIZE ## _mc32_c(uint8_t *dst, uint8_t *src, int stride){\
     uint8_t full[SIZE*(SIZE+5)];\
     uint8_t * const full_mid= full + SIZE*2;\
     int16_t tmp[SIZE*(SIZE+5)];\
@@ -1360,31 +1549,31 @@ static void wmv2_mspel8_v_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int
     }while(--w);
 }
 
-static void put_mspel8_mc00_sh4 (uint8_t *dst, uint8_t *src, int stride){
+static void put_mspel8_mc00_c (uint8_t *dst, uint8_t *src, int stride){
     put_pixels8_c(dst, src, stride, 8);
 }
 
-static void put_mspel8_mc10_sh4(uint8_t *dst, uint8_t *src, int stride){
+static void put_mspel8_mc10_c(uint8_t *dst, uint8_t *src, int stride){
     uint8_t half[64];
     wmv2_mspel8_h_lowpass(half, src, 8, stride, 8);
     put_pixels8_l2_aligned2(dst, src, half, stride, stride, 8, 8);
 }
 
-static void put_mspel8_mc20_sh4(uint8_t *dst, uint8_t *src, int stride){
+static void put_mspel8_mc20_c(uint8_t *dst, uint8_t *src, int stride){
     wmv2_mspel8_h_lowpass(dst, src, stride, stride, 8);
 }
 
-static void put_mspel8_mc30_sh4(uint8_t *dst, uint8_t *src, int stride){
+static void put_mspel8_mc30_c(uint8_t *dst, uint8_t *src, int stride){
     uint8_t half[64];
     wmv2_mspel8_h_lowpass(half, src, 8, stride, 8);
     put_pixels8_l2_aligned2(dst, src+1, half, stride, stride, 8, 8);
 }
 
-static void put_mspel8_mc02_sh4(uint8_t *dst, uint8_t *src, int stride){
+static void put_mspel8_mc02_c(uint8_t *dst, uint8_t *src, int stride){
     wmv2_mspel8_v_lowpass(dst, src, stride, stride, 8);
 }
 
-static void put_mspel8_mc12_sh4(uint8_t *dst, uint8_t *src, int stride){
+static void put_mspel8_mc12_c(uint8_t *dst, uint8_t *src, int stride){
     uint8_t halfH[88];
     uint8_t halfV[64];
     uint8_t halfHV[64];
@@ -1393,7 +1582,7 @@ static void put_mspel8_mc12_sh4(uint8_t *dst, uint8_t *src, int stride){
     wmv2_mspel8_v_lowpass(halfHV, halfH+8, 8, 8, 8);
     put_pixels8_l2_aligned(dst, halfV, halfHV, stride, 8, 8, 8);
 }
-static void put_mspel8_mc32_sh4(uint8_t *dst, uint8_t *src, int stride){
+static void put_mspel8_mc32_c(uint8_t *dst, uint8_t *src, int stride){
     uint8_t halfH[88];
     uint8_t halfV[64];
     uint8_t halfHV[64];
@@ -1402,7 +1591,7 @@ static void put_mspel8_mc32_sh4(uint8_t *dst, uint8_t *src, int stride){
     wmv2_mspel8_v_lowpass(halfHV, halfH+8, 8, 8, 8);
     put_pixels8_l2_aligned(dst, halfV, halfHV, stride, 8, 8, 8);
 }
-static void put_mspel8_mc22_sh4(uint8_t *dst, uint8_t *src, int stride){
+static void put_mspel8_mc22_c(uint8_t *dst, uint8_t *src, int stride){
     uint8_t halfH[88];
     wmv2_mspel8_h_lowpass(halfH, src-stride, 8, stride, 11);
     wmv2_mspel8_v_lowpass(dst, halfH+8, stride, 8, 8);
diff --git a/libavcodec/sh4/sh4.h b/libavcodec/sh4/sh4.h
deleted file mode 100644
index 5d46540..0000000
--- a/libavcodec/sh4/sh4.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2008 Mans Rullgard <mans at mansr.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 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
- */
-
-#ifndef AVCODEC_SH4_SH4_H
-#define AVCODEC_SH4_SH4_H
-
-#ifdef __SH4__
-#   define fp_single_enter(fpscr)                               \
-    do {                                                        \
-        __asm__ volatile ("sts   fpscr, %0     \n\t"            \
-                          "and   %1,    %0     \n\t"            \
-                          "lds   %0,    fpscr  \n\t"            \
-                          : "=&r"(fpscr) : "r"(~(1<<19)));      \
-    } while (0)
-
-#   define fp_single_leave(fpscr)                       \
-    do {                                                \
-        __asm__ volatile ("or    %1,    %0     \n\t"    \
-                          "lds   %0,    fpscr  \n\t"    \
-                          : "+r"(fpscr) : "r"(1<<19));  \
-    } while (0)
-#else
-#   define fp_single_enter(fpscr) ((void)fpscr)
-#   define fp_single_leave(fpscr)
-#endif
-
-#endif /* AVCODEC_SH4_SH4_H */
diff --git a/libavcodec/simple_idct.c b/libavcodec/simple_idct.c
index 2cf9e8d..62f5b24 100644
--- a/libavcodec/simple_idct.c
+++ b/libavcodec/simple_idct.c
@@ -31,7 +31,6 @@
  */
 #include "avcodec.h"
 #include "dsputil.h"
-#include "mathops.h"
 #include "simple_idct.h"
 
 #if 0
@@ -56,6 +55,26 @@
 #define COL_SHIFT 20 // 6
 #endif
 
+#if defined(ARCH_POWERPC_405)
+
+/* signed 16x16 -> 32 multiply add accumulate */
+#define MAC16(rt, ra, rb) \
+    __asm__ ("maclhw %0, %2, %3" : "=r" (rt) : "0" (rt), "r" (ra), "r" (rb));
+
+/* signed 16x16 -> 32 multiply */
+#define MUL16(rt, ra, rb) \
+    __asm__ ("mullhw %0, %1, %2" : "=r" (rt) : "r" (ra), "r" (rb));
+
+#else
+
+/* signed 16x16 -> 32 multiply add accumulate */
+#define MAC16(rt, ra, rb) rt += (ra) * (rb)
+
+/* signed 16x16 -> 32 multiply */
+#define MUL16(rt, ra, rb) rt = (ra) * (rb)
+
+#endif
+
 static inline void idctRowCondDC (DCTELEM * row)
 {
         int a0, a1, a2, a3, b0, b1, b2, b3;
@@ -118,13 +137,13 @@ static inline void idctRowCondDC (DCTELEM * row)
         a2 -= W6 * row[2];
         a3 -= W2 * row[2];
 
-        b0 = MUL16(W1, row[1]);
+        MUL16(b0, W1, row[1]);
         MAC16(b0, W3, row[3]);
-        b1 = MUL16(W3, row[1]);
+        MUL16(b1, W3, row[1]);
         MAC16(b1, -W7, row[3]);
-        b2 = MUL16(W5, row[1]);
+        MUL16(b2, W5, row[1]);
         MAC16(b2, -W1, row[3]);
-        b3 = MUL16(W7, row[1]);
+        MUL16(b3, W7, row[1]);
         MAC16(b3, -W5, row[3]);
 
 #ifdef HAVE_FAST_64BIT
@@ -178,10 +197,10 @@ static inline void idctSparseColPut (uint8_t *dest, int line_size,
         a2 +=  - W6*col[8*2];
         a3 +=  - W2*col[8*2];
 
-        b0 = MUL16(W1, col[8*1]);
-        b1 = MUL16(W3, col[8*1]);
-        b2 = MUL16(W5, col[8*1]);
-        b3 = MUL16(W7, col[8*1]);
+        MUL16(b0, W1, col[8*1]);
+        MUL16(b1, W3, col[8*1]);
+        MUL16(b2, W5, col[8*1]);
+        MUL16(b3, W7, col[8*1]);
 
         MAC16(b0, + W3, col[8*3]);
         MAC16(b1, - W7, col[8*3]);
@@ -250,10 +269,10 @@ static inline void idctSparseColAdd (uint8_t *dest, int line_size,
         a2 +=  - W6*col[8*2];
         a3 +=  - W2*col[8*2];
 
-        b0 = MUL16(W1, col[8*1]);
-        b1 = MUL16(W3, col[8*1]);
-        b2 = MUL16(W5, col[8*1]);
-        b3 = MUL16(W7, col[8*1]);
+        MUL16(b0, W1, col[8*1]);
+        MUL16(b1, W3, col[8*1]);
+        MUL16(b2, W5, col[8*1]);
+        MUL16(b3, W7, col[8*1]);
 
         MAC16(b0, + W3, col[8*3]);
         MAC16(b1, - W7, col[8*3]);
@@ -320,10 +339,10 @@ static inline void idctSparseCol (DCTELEM * col)
         a2 +=  - W6*col[8*2];
         a3 +=  - W2*col[8*2];
 
-        b0 = MUL16(W1, col[8*1]);
-        b1 = MUL16(W3, col[8*1]);
-        b2 = MUL16(W5, col[8*1]);
-        b3 = MUL16(W7, col[8*1]);
+        MUL16(b0, W1, col[8*1]);
+        MUL16(b1, W3, col[8*1]);
+        MUL16(b2, W5, col[8*1]);
+        MUL16(b3, W7, col[8*1]);
 
         MAC16(b0, + W3, col[8*3]);
         MAC16(b1, - W7, col[8*3]);
diff --git a/libavcodec/smacker.c b/libavcodec/smacker.c
index bcdf792..1690518 100644
--- a/libavcodec/smacker.c
+++ b/libavcodec/smacker.c
@@ -457,8 +457,8 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, const
                 case 2:
                     for(i = 0; i < 2; i++) {
                         uint16_t pix1, pix2;
-                        pix2 = smk_get_code(&gb, smk->full_tbl, smk->full_last);
                         pix1 = smk_get_code(&gb, smk->full_tbl, smk->full_last);
+                        pix2 = smk_get_code(&gb, smk->full_tbl, smk->full_last);
                         AV_WL16(out,pix1);
                         AV_WL16(out+2,pix2);
                         out += stride;
@@ -559,7 +559,6 @@ static av_cold int decode_end(AVCodecContext *avctx)
 static av_cold int smka_decode_init(AVCodecContext *avctx)
 {
     avctx->sample_fmt = SAMPLE_FMT_S16;
-    avctx->channel_layout = (avctx->channels==2) ? CH_LAYOUT_STEREO : CH_LAYOUT_MONO;
     return 0;
 }
 
diff --git a/libavcodec/snow.c b/libavcodec/snow.c
index e3e5aa9..c5c73b1 100644
--- a/libavcodec/snow.c
+++ b/libavcodec/snow.c
@@ -488,8 +488,6 @@ typedef struct SnowContext{
     slice_buffer sb;
 
     MpegEncContext m; // needed for motion estimation, should not be used for anything else, the idea is to eventually make the motion estimation independent of MpegEncContext, so this will be removed then (FIXME/XXX)
-
-    uint8_t *scratchbuf;
 }SnowContext;
 
 typedef struct {
@@ -498,7 +496,7 @@ typedef struct {
     IDWTELEM *b2;
     IDWTELEM *b3;
     int y;
-} DWTCompose;
+} dwt_compose_t;
 
 #define slice_buffer_get_line(slice_buf, line_num) ((slice_buf)->line[line_num] ? (slice_buf)->line[line_num] : slice_buffer_load_line((slice_buf), (line_num)))
 //#define slice_buffer_get_line(slice_buf, line_num) (slice_buffer_load_line((slice_buf), (line_num)))
@@ -1080,19 +1078,19 @@ static void vertical_compose53iL0(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2, int
     }
 }
 
-static void spatial_compose53i_buffered_init(DWTCompose *cs, slice_buffer * sb, int height, int stride_line){
+static void spatial_compose53i_buffered_init(dwt_compose_t *cs, slice_buffer * sb, int height, int stride_line){
     cs->b0 = slice_buffer_get_line(sb, mirror(-1-1, height-1) * stride_line);
     cs->b1 = slice_buffer_get_line(sb, mirror(-1  , height-1) * stride_line);
     cs->y = -1;
 }
 
-static void spatial_compose53i_init(DWTCompose *cs, IDWTELEM *buffer, int height, int stride){
+static void spatial_compose53i_init(dwt_compose_t *cs, IDWTELEM *buffer, int height, int stride){
     cs->b0 = buffer + mirror(-1-1, height-1)*stride;
     cs->b1 = buffer + mirror(-1  , height-1)*stride;
     cs->y = -1;
 }
 
-static void spatial_compose53i_dy_buffered(DWTCompose *cs, slice_buffer * sb, int width, int height, int stride_line){
+static void spatial_compose53i_dy_buffered(dwt_compose_t *cs, slice_buffer * sb, int width, int height, int stride_line){
     int y= cs->y;
 
     IDWTELEM *b0= cs->b0;
@@ -1111,7 +1109,7 @@ static void spatial_compose53i_dy_buffered(DWTCompose *cs, slice_buffer * sb, in
     cs->y += 2;
 }
 
-static void spatial_compose53i_dy(DWTCompose *cs, IDWTELEM *buffer, int width, int height, int stride){
+static void spatial_compose53i_dy(dwt_compose_t *cs, IDWTELEM *buffer, int width, int height, int stride){
     int y= cs->y;
     IDWTELEM *b0= cs->b0;
     IDWTELEM *b1= cs->b1;
@@ -1130,7 +1128,7 @@ static void spatial_compose53i_dy(DWTCompose *cs, IDWTELEM *buffer, int width, i
 }
 
 static void av_unused spatial_compose53i(IDWTELEM *buffer, int width, int height, int stride){
-    DWTCompose cs;
+    dwt_compose_t cs;
     spatial_compose53i_init(&cs, buffer, height, stride);
     while(cs.y <= height)
         spatial_compose53i_dy(&cs, buffer, width, height, stride);
@@ -1198,7 +1196,7 @@ void ff_snow_vertical_compose97i(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2, IDWTE
     }
 }
 
-static void spatial_compose97i_buffered_init(DWTCompose *cs, slice_buffer * sb, int height, int stride_line){
+static void spatial_compose97i_buffered_init(dwt_compose_t *cs, slice_buffer * sb, int height, int stride_line){
     cs->b0 = slice_buffer_get_line(sb, mirror(-3-1, height-1) * stride_line);
     cs->b1 = slice_buffer_get_line(sb, mirror(-3  , height-1) * stride_line);
     cs->b2 = slice_buffer_get_line(sb, mirror(-3+1, height-1) * stride_line);
@@ -1206,7 +1204,7 @@ static void spatial_compose97i_buffered_init(DWTCompose *cs, slice_buffer * sb,
     cs->y = -3;
 }
 
-static void spatial_compose97i_init(DWTCompose *cs, IDWTELEM *buffer, int height, int stride){
+static void spatial_compose97i_init(dwt_compose_t *cs, IDWTELEM *buffer, int height, int stride){
     cs->b0 = buffer + mirror(-3-1, height-1)*stride;
     cs->b1 = buffer + mirror(-3  , height-1)*stride;
     cs->b2 = buffer + mirror(-3+1, height-1)*stride;
@@ -1214,7 +1212,7 @@ static void spatial_compose97i_init(DWTCompose *cs, IDWTELEM *buffer, int height
     cs->y = -3;
 }
 
-static void spatial_compose97i_dy_buffered(DSPContext *dsp, DWTCompose *cs, slice_buffer * sb, int width, int height, int stride_line){
+static void spatial_compose97i_dy_buffered(DSPContext *dsp, dwt_compose_t *cs, slice_buffer * sb, int width, int height, int stride_line){
     int y = cs->y;
 
     IDWTELEM *b0= cs->b0;
@@ -1243,7 +1241,7 @@ static void spatial_compose97i_dy_buffered(DSPContext *dsp, DWTCompose *cs, slic
     cs->y += 2;
 }
 
-static void spatial_compose97i_dy(DWTCompose *cs, IDWTELEM *buffer, int width, int height, int stride){
+static void spatial_compose97i_dy(dwt_compose_t *cs, IDWTELEM *buffer, int width, int height, int stride){
     int y = cs->y;
     IDWTELEM *b0= cs->b0;
     IDWTELEM *b1= cs->b1;
@@ -1268,13 +1266,13 @@ static void spatial_compose97i_dy(DWTCompose *cs, IDWTELEM *buffer, int width, i
 }
 
 static void av_unused spatial_compose97i(IDWTELEM *buffer, int width, int height, int stride){
-    DWTCompose cs;
+    dwt_compose_t cs;
     spatial_compose97i_init(&cs, buffer, height, stride);
     while(cs.y <= height)
         spatial_compose97i_dy(&cs, buffer, width, height, stride);
 }
 
-static void ff_spatial_idwt_buffered_init(DWTCompose *cs, slice_buffer * sb, int width, int height, int stride_line, int type, int decomposition_count){
+static void ff_spatial_idwt_buffered_init(dwt_compose_t *cs, slice_buffer * sb, int width, int height, int stride_line, int type, int decomposition_count){
     int level;
     for(level=decomposition_count-1; level>=0; level--){
         switch(type){
@@ -1284,7 +1282,7 @@ static void ff_spatial_idwt_buffered_init(DWTCompose *cs, slice_buffer * sb, int
     }
 }
 
-static void ff_spatial_idwt_init(DWTCompose *cs, IDWTELEM *buffer, int width, int height, int stride, int type, int decomposition_count){
+static void ff_spatial_idwt_init(dwt_compose_t *cs, IDWTELEM *buffer, int width, int height, int stride, int type, int decomposition_count){
     int level;
     for(level=decomposition_count-1; level>=0; level--){
         switch(type){
@@ -1294,7 +1292,7 @@ static void ff_spatial_idwt_init(DWTCompose *cs, IDWTELEM *buffer, int width, in
     }
 }
 
-static void ff_spatial_idwt_slice(DWTCompose *cs, IDWTELEM *buffer, int width, int height, int stride, int type, int decomposition_count, int y){
+static void ff_spatial_idwt_slice(dwt_compose_t *cs, IDWTELEM *buffer, int width, int height, int stride, int type, int decomposition_count, int y){
     const int support = type==1 ? 3 : 5;
     int level;
     if(type==2) return;
@@ -1311,7 +1309,7 @@ static void ff_spatial_idwt_slice(DWTCompose *cs, IDWTELEM *buffer, int width, i
     }
 }
 
-static void ff_spatial_idwt_buffered_slice(DSPContext *dsp, DWTCompose *cs, slice_buffer * slice_buf, int width, int height, int stride_line, int type, int decomposition_count, int y){
+static void ff_spatial_idwt_buffered_slice(DSPContext *dsp, dwt_compose_t *cs, slice_buffer * slice_buf, int width, int height, int stride_line, int type, int decomposition_count, int y){
     const int support = type==1 ? 3 : 5;
     int level;
     if(type==2) return;
@@ -1329,7 +1327,7 @@ static void ff_spatial_idwt_buffered_slice(DSPContext *dsp, DWTCompose *cs, slic
 }
 
 static void ff_spatial_idwt(IDWTELEM *buffer, int width, int height, int stride, int type, int decomposition_count){
-        DWTCompose cs[MAX_DECOMPOSITIONS];
+        dwt_compose_t cs[MAX_DECOMPOSITIONS];
         int y;
         ff_spatial_idwt_init(cs, buffer, width, height, stride, type, decomposition_count);
         for(y=0; y<height; y+=4)
@@ -2425,7 +2423,7 @@ static av_always_inline void add_yblock(SnowContext *s, int sliced, slice_buffer
     BlockNode *rb= lb+1;
     uint8_t *block[4];
     int tmp_step= src_stride >= 7*MB_SIZE ? MB_SIZE : MB_SIZE*src_stride;
-    uint8_t *tmp = s->scratchbuf;
+    uint8_t tmp[src_stride*7*MB_SIZE]; //FIXME align
     uint8_t *ptmp;
     int x,y;
 
@@ -2787,7 +2785,7 @@ static int get_block_rd(SnowContext *s, int mb_x, int mb_y, int plane_index, con
     uint8_t *dst= s->current_picture.data[plane_index];
     uint8_t *src= s->  input_picture.data[plane_index];
     IDWTELEM *pred= (IDWTELEM*)s->m.obmc_scratchpad + plane_index*block_size*block_size*4;
-    uint8_t *cur = s->scratchbuf;
+    uint8_t cur[ref_stride*2*MB_SIZE]; //FIXME alignment
     uint8_t tmp[ref_stride*(2*MB_SIZE+HTAPS_MAX-1)];
     const int b_stride = s->b_width << s->block_max_depth;
     const int b_height = s->b_height<< s->block_max_depth;
@@ -3705,7 +3703,6 @@ static av_cold int common_init(AVCodecContext *avctx){
             scale_mv_ref[i][j] = 256*(i+1)/(j+1);
 
     s->avctx->get_buffer(s->avctx, &s->mconly_picture);
-    s->scratchbuf = av_malloc(s->mconly_picture.linesize[0]*7*MB_SIZE);
 
     return 0;
 }
@@ -4007,7 +4004,6 @@ static av_cold int encode_init(AVCodecContext *avctx)
     s->m.flags   = avctx->flags;
     s->m.bit_rate= avctx->bit_rate;
 
-    s->m.me.temp      =
     s->m.me.scratchpad= av_mallocz((avctx->width+64)*2*16*2*sizeof(uint8_t));
     s->m.me.map       = av_mallocz(ME_MAP_SIZE*sizeof(uint32_t));
     s->m.me.score_map = av_mallocz(ME_MAP_SIZE*sizeof(uint32_t));
@@ -4436,14 +4432,12 @@ static av_cold void common_end(SnowContext *s){
     av_freep(&s->spatial_dwt_buffer);
     av_freep(&s->spatial_idwt_buffer);
 
-    s->m.me.temp= NULL;
     av_freep(&s->m.me.scratchpad);
     av_freep(&s->m.me.map);
     av_freep(&s->m.me.score_map);
     av_freep(&s->m.obmc_scratchpad);
 
     av_freep(&s->block);
-    av_freep(&s->scratchbuf);
 
     for(i=0; i<MAX_REF_FRAMES; i++){
         av_freep(&s->ref_mvs[i]);
@@ -4550,7 +4544,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, const
         const int block_size = MB_SIZE >> s->block_max_depth;
         const int block_w    = plane_index ? block_size/2 : block_size;
         int mb_y;
-        DWTCompose cs[MAX_DECOMPOSITIONS];
+        dwt_compose_t cs[MAX_DECOMPOSITIONS];
         int yd=0, yq=0;
         int y;
         int end_y;
diff --git a/libavcodec/snow.h b/libavcodec/snow.h
index b208e5f..6f0d79f 100644
--- a/libavcodec/snow.h
+++ b/libavcodec/snow.h
@@ -121,16 +121,16 @@ struct slice_buffer_s {
 #define W_DS 9
 #endif
 
-void ff_snow_vertical_compose97i(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2, IDWTELEM *b3, IDWTELEM *b4, IDWTELEM *b5, int width);
-void ff_snow_horizontal_compose97i(IDWTELEM *b, int width);
-void ff_snow_inner_add_yblock(const uint8_t *obmc, const int obmc_stride, uint8_t * * block, int b_w, int b_h, int src_x, int src_y, int src_stride, slice_buffer * sb, int add, uint8_t * dst8);
+extern void ff_snow_vertical_compose97i(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2, IDWTELEM *b3, IDWTELEM *b4, IDWTELEM *b5, int width);
+extern void ff_snow_horizontal_compose97i(IDWTELEM *b, int width);
+extern void ff_snow_inner_add_yblock(const uint8_t *obmc, const int obmc_stride, uint8_t * * block, int b_w, int b_h, int src_x, int src_y, int src_stride, slice_buffer * sb, int add, uint8_t * dst8);
 
 #ifdef CONFIG_SNOW_ENCODER
 int w53_32_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h);
 int w97_32_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h);
 #else
-static int w53_32_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h) {assert (0); return 0;}
-static int w97_32_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h) {assert (0); return 0;}
+static int w53_32_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h) {assert (0);}
+static int w97_32_c(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int h) {assert (0);}
 #endif
 
 /* C bits used by mmx/sse2/altivec */
diff --git a/libavcodec/sparc/dsputil_vis.c b/libavcodec/sparc/dsputil_vis.c
index 0779395..a01eea3 100644
--- a/libavcodec/sparc/dsputil_vis.c
+++ b/libavcodec/sparc/dsputil_vis.c
@@ -31,9 +31,9 @@
 
 #include "vis.h"
 
-void ff_simple_idct_put_vis(uint8_t *dest, int line_size, DCTELEM *data);
-void ff_simple_idct_add_vis(uint8_t *dest, int line_size, DCTELEM *data);
-void ff_simple_idct_vis(DCTELEM *data);
+extern void ff_simple_idct_put_vis(uint8_t *dest, int line_size, DCTELEM *data);
+extern void ff_simple_idct_add_vis(uint8_t *dest, int line_size, DCTELEM *data);
+extern void ff_simple_idct_vis(DCTELEM *data);
 
 /* The trick used in some of this file is the formula from the MMX
  * motion comp code, which is:
diff --git a/libavcodec/sparc/simple_idct_vis.c b/libavcodec/sparc/simple_idct_vis.c
index b78bc66..1581ee1 100644
--- a/libavcodec/sparc/simple_idct_vis.c
+++ b/libavcodec/sparc/simple_idct_vis.c
@@ -384,7 +384,7 @@ static const DECLARE_ALIGNED_8(uint16_t, expand[4]) = {
         "st %%f14, [%12+" dest "] \n\t"\
 
 
-void ff_simple_idct_vis(DCTELEM *data) {
+inline void ff_simple_idct_vis(DCTELEM *data) {
     int out1, out2, out3, out4;
     DECLARE_ALIGNED_8(int16_t, temp[8*8]);
 
diff --git a/libavcodec/svq1.c b/libavcodec/svq1.c
index 790bbb3..a499183 100644
--- a/libavcodec/svq1.c
+++ b/libavcodec/svq1.c
@@ -37,7 +37,7 @@
 #include "svq1_vlc.h"
 
 /* standard video sizes */
-const struct svq1_frame_size ff_svq1_frame_size_table[8] = {
+const svq1_frame_size_t ff_svq1_frame_size_table[8] = {
   { 160, 120 }, { 128,  96 }, { 176, 144 }, { 352, 288 },
   { 704, 576 }, { 240, 180 }, { 320, 240 }, {  -1,  -1 }
 };
diff --git a/libavcodec/svq1.h b/libavcodec/svq1.h
index a4b5a16..a8469d9 100644
--- a/libavcodec/svq1.h
+++ b/libavcodec/svq1.h
@@ -42,10 +42,10 @@
 #define SVQ1_BLOCK_INTER_4V     2
 #define SVQ1_BLOCK_INTRA        3
 
-struct svq1_frame_size {
+typedef struct {
     int width;
     int height;
-};
+} svq1_frame_size_t;
 
 uint16_t ff_svq1_packet_checksum (const uint8_t *data, const int length,
                                   int value);
@@ -59,6 +59,6 @@ extern const uint8_t ff_svq1_inter_multistage_vlc[6][8][2];
 extern const uint16_t ff_svq1_intra_mean_vlc[256][2];
 extern const uint16_t ff_svq1_inter_mean_vlc[512][2];
 
-extern const struct svq1_frame_size ff_svq1_frame_size_table[8];
+extern const svq1_frame_size_t ff_svq1_frame_size_table[8];
 
 #endif /* AVCODEC_SVQ1_H */
diff --git a/libavcodec/svq1dec.c b/libavcodec/svq1dec.c
index d306149..8f399ab 100644
--- a/libavcodec/svq1dec.c
+++ b/libavcodec/svq1dec.c
@@ -56,7 +56,7 @@ static VLC svq1_inter_mean;
 typedef struct svq1_pmv_s {
   int           x;
   int           y;
-} svq1_pmv;
+} svq1_pmv_t;
 
 static const uint16_t checksum_table[256] = {
   0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
@@ -301,7 +301,7 @@ static int svq1_decode_block_non_intra (GetBitContext *bitbuf, uint8_t *pixels,
   return 0;
 }
 
-static int svq1_decode_motion_vector (GetBitContext *bitbuf, svq1_pmv *mv, svq1_pmv **pmv) {
+static int svq1_decode_motion_vector (GetBitContext *bitbuf, svq1_pmv_t *mv, svq1_pmv_t **pmv) {
   int        diff;
   int        i;
 
@@ -342,11 +342,11 @@ static void svq1_skip_block (uint8_t *current, uint8_t *previous, int pitch, int
 
 static int svq1_motion_inter_block (MpegEncContext *s, GetBitContext *bitbuf,
                                uint8_t *current, uint8_t *previous, int pitch,
-                               svq1_pmv *motion, int x, int y) {
+                               svq1_pmv_t *motion, int x, int y) {
   uint8_t    *src;
   uint8_t    *dst;
-  svq1_pmv    mv;
-  svq1_pmv   *pmv[3];
+  svq1_pmv_t  mv;
+  svq1_pmv_t *pmv[3];
   int         result;
 
   /* predict and decode motion vector */
@@ -394,11 +394,11 @@ static int svq1_motion_inter_block (MpegEncContext *s, GetBitContext *bitbuf,
 
 static int svq1_motion_inter_4v_block (MpegEncContext *s, GetBitContext *bitbuf,
                                   uint8_t *current, uint8_t *previous, int pitch,
-                                  svq1_pmv *motion,int x, int y) {
+                                  svq1_pmv_t *motion,int x, int y) {
   uint8_t    *src;
   uint8_t    *dst;
-  svq1_pmv    mv;
-  svq1_pmv   *pmv[4];
+  svq1_pmv_t  mv;
+  svq1_pmv_t *pmv[4];
   int         i, result;
 
   /* predict and decode motion vector (0) */
@@ -484,7 +484,7 @@ static int svq1_motion_inter_4v_block (MpegEncContext *s, GetBitContext *bitbuf,
 
 static int svq1_decode_delta_block (MpegEncContext *s, GetBitContext *bitbuf,
                         uint8_t *current, uint8_t *previous, int pitch,
-                        svq1_pmv *motion, int x, int y) {
+                        svq1_pmv_t *motion, int x, int y) {
   uint32_t block_type;
   int      result = 0;
 
@@ -727,9 +727,9 @@ static int svq1_decode_frame(AVCodecContext *avctx,
         current += 16*linesize;
       }
     } else {
-      svq1_pmv pmv[width/8+3];
+      svq1_pmv_t pmv[width/8+3];
       /* delta frame */
-      memset (pmv, 0, ((width / 8) + 3) * sizeof(svq1_pmv));
+      memset (pmv, 0, ((width / 8) + 3) * sizeof(svq1_pmv_t));
 
       for (y=0; y < height; y+=16) {
         for (x=0; x < width; x+=16) {
diff --git a/libavcodec/svq1enc.c b/libavcodec/svq1enc.c
index 49ad3d3..8d0bca5 100644
--- a/libavcodec/svq1enc.c
+++ b/libavcodec/svq1enc.c
@@ -67,8 +67,6 @@ typedef struct SVQ1Context {
     int16_t (*motion_val16[3])[2];
 
     int64_t rd_total;
-
-    uint8_t *scratchbuf;
 } SVQ1Context;
 
 static void svq1_write_header(SVQ1Context *s, int frame_type)
@@ -380,7 +378,7 @@ static int svq1_encode_plane(SVQ1Context *s, int plane, unsigned char *src_plane
             uint8_t *decoded= decoded_plane + offset;
             uint8_t *ref= ref_plane + offset;
             int score[4]={0,0,0,0}, best;
-            uint8_t *temp = s->scratchbuf;
+            uint8_t temp[16*stride];
 
             if(s->pb.buf_end - s->pb.buf - (put_bits_count(&s->pb)>>3) < 3000){ //FIXME check size
                 av_log(s->avctx, AV_LOG_ERROR, "encoded frame too large\n");
@@ -526,7 +524,6 @@ static int svq1_encode_frame(AVCodecContext *avctx, unsigned char *buf,
     if(!s->current_picture.data[0]){
         avctx->get_buffer(avctx, &s->current_picture);
         avctx->get_buffer(avctx, &s->last_picture);
-        s->scratchbuf = av_malloc(s->current_picture.linesize[0] * 16);
     }
 
     temp= s->current_picture;
@@ -569,7 +566,6 @@ static av_cold int svq1_encode_end(AVCodecContext *avctx)
     av_freep(&s->m.me.score_map);
     av_freep(&s->mb_type);
     av_freep(&s->dummy);
-    av_freep(&s->scratchbuf);
 
     for(i=0; i<3; i++){
         av_freep(&s->motion_val8[i]);
diff --git a/libavcodec/svq3.c b/libavcodec/svq3.c
index f438ba8..1da6802 100644
--- a/libavcodec/svq3.c
+++ b/libavcodec/svq3.c
@@ -37,7 +37,7 @@
  *
  * You will know you have these parameters passed correctly when the decoder
  * correctly decodes this file:
- *  http://samples.mplayerhq.hu/V-codecs/SVQ3/Vertical400kbit.sorenson3.mov
+ *  ftp://ftp.mplayerhq.hu/MPlayer/samples/V-codecs/SVQ3/Vertical400kbit.sorenson3.mov
  */
 
 #ifdef CONFIG_ZLIB
@@ -65,96 +65,93 @@
    /
  o-->o-->o-->o
 */
-static const uint8_t svq3_scan[16] = {
-    0+0*4, 1+0*4, 2+0*4, 2+1*4,
-    2+2*4, 3+0*4, 3+1*4, 3+2*4,
-    0+1*4, 0+2*4, 1+1*4, 1+2*4,
-    0+3*4, 1+3*4, 2+3*4, 3+3*4,
+static const uint8_t svq3_scan[16]={
+ 0+0*4, 1+0*4, 2+0*4, 2+1*4,
+ 2+2*4, 3+0*4, 3+1*4, 3+2*4,
+ 0+1*4, 0+2*4, 1+1*4, 1+2*4,
+ 0+3*4, 1+3*4, 2+3*4, 3+3*4,
 };
 
 static const uint8_t svq3_pred_0[25][2] = {
-    { 0, 0 },
-    { 1, 0 }, { 0, 1 },
-    { 0, 2 }, { 1, 1 }, { 2, 0 },
-    { 3, 0 }, { 2, 1 }, { 1, 2 }, { 0, 3 },
-    { 0, 4 }, { 1, 3 }, { 2, 2 }, { 3, 1 }, { 4, 0 },
-    { 4, 1 }, { 3, 2 }, { 2, 3 }, { 1, 4 },
-    { 2, 4 }, { 3, 3 }, { 4, 2 },
-    { 4, 3 }, { 3, 4 },
-    { 4, 4 }
+  { 0, 0 },
+  { 1, 0 }, { 0, 1 },
+  { 0, 2 }, { 1, 1 }, { 2, 0 },
+  { 3, 0 }, { 2, 1 }, { 1, 2 }, { 0, 3 },
+  { 0, 4 }, { 1, 3 }, { 2, 2 }, { 3, 1 }, { 4, 0 },
+  { 4, 1 }, { 3, 2 }, { 2, 3 }, { 1, 4 },
+  { 2, 4 }, { 3, 3 }, { 4, 2 },
+  { 4, 3 }, { 3, 4 },
+  { 4, 4 }
 };
 
 static const int8_t svq3_pred_1[6][6][5] = {
-    { { 2,-1,-1,-1,-1 }, { 2, 1,-1,-1,-1 }, { 1, 2,-1,-1,-1 },
-      { 2, 1,-1,-1,-1 }, { 1, 2,-1,-1,-1 }, { 1, 2,-1,-1,-1 } },
-    { { 0, 2,-1,-1,-1 }, { 0, 2, 1, 4, 3 }, { 0, 1, 2, 4, 3 },
-      { 0, 2, 1, 4, 3 }, { 2, 0, 1, 3, 4 }, { 0, 4, 2, 1, 3 } },
-    { { 2, 0,-1,-1,-1 }, { 2, 1, 0, 4, 3 }, { 1, 2, 4, 0, 3 },
-      { 2, 1, 0, 4, 3 }, { 2, 1, 4, 3, 0 }, { 1, 2, 4, 0, 3 } },
-    { { 2, 0,-1,-1,-1 }, { 2, 0, 1, 4, 3 }, { 1, 2, 0, 4, 3 },
-      { 2, 1, 0, 4, 3 }, { 2, 1, 3, 4, 0 }, { 2, 4, 1, 0, 3 } },
-    { { 0, 2,-1,-1,-1 }, { 0, 2, 1, 3, 4 }, { 1, 2, 3, 0, 4 },
-      { 2, 0, 1, 3, 4 }, { 2, 1, 3, 0, 4 }, { 2, 0, 4, 3, 1 } },
-    { { 0, 2,-1,-1,-1 }, { 0, 2, 4, 1, 3 }, { 1, 4, 2, 0, 3 },
-      { 4, 2, 0, 1, 3 }, { 2, 0, 1, 4, 3 }, { 4, 2, 1, 0, 3 } },
+  { { 2,-1,-1,-1,-1 }, { 2, 1,-1,-1,-1 }, { 1, 2,-1,-1,-1 },
+    { 2, 1,-1,-1,-1 }, { 1, 2,-1,-1,-1 }, { 1, 2,-1,-1,-1 } },
+  { { 0, 2,-1,-1,-1 }, { 0, 2, 1, 4, 3 }, { 0, 1, 2, 4, 3 },
+    { 0, 2, 1, 4, 3 }, { 2, 0, 1, 3, 4 }, { 0, 4, 2, 1, 3 } },
+  { { 2, 0,-1,-1,-1 }, { 2, 1, 0, 4, 3 }, { 1, 2, 4, 0, 3 },
+    { 2, 1, 0, 4, 3 }, { 2, 1, 4, 3, 0 }, { 1, 2, 4, 0, 3 } },
+  { { 2, 0,-1,-1,-1 }, { 2, 0, 1, 4, 3 }, { 1, 2, 0, 4, 3 },
+    { 2, 1, 0, 4, 3 }, { 2, 1, 3, 4, 0 }, { 2, 4, 1, 0, 3 } },
+  { { 0, 2,-1,-1,-1 }, { 0, 2, 1, 3, 4 }, { 1, 2, 3, 0, 4 },
+    { 2, 0, 1, 3, 4 }, { 2, 1, 3, 0, 4 }, { 2, 0, 4, 3, 1 } },
+  { { 0, 2,-1,-1,-1 }, { 0, 2, 4, 1, 3 }, { 1, 4, 2, 0, 3 },
+    { 4, 2, 0, 1, 3 }, { 2, 0, 1, 4, 3 }, { 4, 2, 1, 0, 3 } },
 };
 
 static const struct { uint8_t run; uint8_t level; } svq3_dct_tables[2][16] = {
-    { { 0, 0 }, { 0, 1 }, { 1, 1 }, { 2, 1 }, { 0, 2 }, { 3, 1 }, { 4, 1 }, { 5, 1 },
-      { 0, 3 }, { 1, 2 }, { 2, 2 }, { 6, 1 }, { 7, 1 }, { 8, 1 }, { 9, 1 }, { 0, 4 } },
-    { { 0, 0 }, { 0, 1 }, { 1, 1 }, { 0, 2 }, { 2, 1 }, { 0, 3 }, { 0, 4 }, { 0, 5 },
-      { 3, 1 }, { 4, 1 }, { 1, 2 }, { 1, 3 }, { 0, 6 }, { 0, 7 }, { 0, 8 }, { 0, 9 } }
+  { { 0, 0 }, { 0, 1 }, { 1, 1 }, { 2, 1 }, { 0, 2 }, { 3, 1 }, { 4, 1 }, { 5, 1 },
+    { 0, 3 }, { 1, 2 }, { 2, 2 }, { 6, 1 }, { 7, 1 }, { 8, 1 }, { 9, 1 }, { 0, 4 } },
+  { { 0, 0 }, { 0, 1 }, { 1, 1 }, { 0, 2 }, { 2, 1 }, { 0, 3 }, { 0, 4 }, { 0, 5 },
+    { 3, 1 }, { 4, 1 }, { 1, 2 }, { 1, 3 }, { 0, 6 }, { 0, 7 }, { 0, 8 }, { 0, 9 } }
 };
 
 static const uint32_t svq3_dequant_coeff[32] = {
-     3881,  4351,  4890,  5481,  6154,  6914,  7761,  8718,
-     9781, 10987, 12339, 13828, 15523, 17435, 19561, 21873,
-    24552, 27656, 30847, 34870, 38807, 43747, 49103, 54683,
-    61694, 68745, 77615, 89113,100253,109366,126635,141533
+   3881,  4351,  4890,  5481,  6154,  6914,  7761,  8718,
+   9781, 10987, 12339, 13828, 15523, 17435, 19561, 21873,
+  24552, 27656, 30847, 34870, 38807, 43747, 49103, 54683,
+  61694, 68745, 77615, 89113,100253,109366,126635,141533
 };
 
 
-static void svq3_luma_dc_dequant_idct_c(DCTELEM *block, int qp)
-{
-    const int qmul = svq3_dequant_coeff[qp];
+static void svq3_luma_dc_dequant_idct_c(DCTELEM *block, int qp){
+    const int qmul= svq3_dequant_coeff[qp];
 #define stride 16
     int i;
     int temp[16];
-    static const int x_offset[4] = {0, 1*stride, 4* stride,  5*stride};
-    static const int y_offset[4] = {0, 2*stride, 8* stride, 10*stride};
-
-    for (i = 0; i < 4; i++){
-        const int offset = y_offset[i];
-        const int z0 = 13*(block[offset+stride*0] +    block[offset+stride*4]);
-        const int z1 = 13*(block[offset+stride*0] -    block[offset+stride*4]);
-        const int z2 =  7* block[offset+stride*1] - 17*block[offset+stride*5];
-        const int z3 = 17* block[offset+stride*1] +  7*block[offset+stride*5];
-
-        temp[4*i+0] = z0+z3;
-        temp[4*i+1] = z1+z2;
-        temp[4*i+2] = z1-z2;
-        temp[4*i+3] = z0-z3;
+    static const int x_offset[4]={0, 1*stride, 4* stride,  5*stride};
+    static const int y_offset[4]={0, 2*stride, 8* stride, 10*stride};
+
+    for(i=0; i<4; i++){
+        const int offset= y_offset[i];
+        const int z0= 13*(block[offset+stride*0] +    block[offset+stride*4]);
+        const int z1= 13*(block[offset+stride*0] -    block[offset+stride*4]);
+        const int z2=  7* block[offset+stride*1] - 17*block[offset+stride*5];
+        const int z3= 17* block[offset+stride*1] +  7*block[offset+stride*5];
+
+        temp[4*i+0]= z0+z3;
+        temp[4*i+1]= z1+z2;
+        temp[4*i+2]= z1-z2;
+        temp[4*i+3]= z0-z3;
     }
 
-    for (i = 0; i < 4; i++){
-        const int offset = x_offset[i];
-        const int z0 = 13*(temp[4*0+i] +    temp[4*2+i]);
-        const int z1 = 13*(temp[4*0+i] -    temp[4*2+i]);
-        const int z2 =  7* temp[4*1+i] - 17*temp[4*3+i];
-        const int z3 = 17* temp[4*1+i] +  7*temp[4*3+i];
-
-        block[stride*0 +offset] = ((z0 + z3)*qmul + 0x80000) >> 20;
-        block[stride*2 +offset] = ((z1 + z2)*qmul + 0x80000) >> 20;
-        block[stride*8 +offset] = ((z1 - z2)*qmul + 0x80000) >> 20;
-        block[stride*10+offset] = ((z0 - z3)*qmul + 0x80000) >> 20;
+    for(i=0; i<4; i++){
+        const int offset= x_offset[i];
+        const int z0= 13*(temp[4*0+i] +    temp[4*2+i]);
+        const int z1= 13*(temp[4*0+i] -    temp[4*2+i]);
+        const int z2=  7* temp[4*1+i] - 17*temp[4*3+i];
+        const int z3= 17* temp[4*1+i] +  7*temp[4*3+i];
+
+        block[stride*0 +offset]= ((z0 + z3)*qmul + 0x80000)>>20;
+        block[stride*2 +offset]= ((z1 + z2)*qmul + 0x80000)>>20;
+        block[stride*8 +offset]= ((z1 - z2)*qmul + 0x80000)>>20;
+        block[stride*10+offset]= ((z0 - z3)*qmul + 0x80000)>>20;
     }
 }
 #undef stride
 
-static void svq3_add_idct_c(uint8_t *dst, DCTELEM *block, int stride, int qp,
-                            int dc)
-{
-    const int qmul = svq3_dequant_coeff[qp];
+static void svq3_add_idct_c (uint8_t *dst, DCTELEM *block, int stride, int qp, int dc){
+    const int qmul= svq3_dequant_coeff[qp];
     int i;
     uint8_t *cm = ff_cropTbl + MAX_NEG_CROP;
 
@@ -163,879 +160,859 @@ static void svq3_add_idct_c(uint8_t *dst, DCTELEM *block, int stride, int qp,
         block[0] = 0;
     }
 
-    for (i = 0; i < 4; i++) {
-        const int z0 = 13*(block[0 + 4*i] +    block[2 + 4*i]);
-        const int z1 = 13*(block[0 + 4*i] -    block[2 + 4*i]);
-        const int z2 =  7* block[1 + 4*i] - 17*block[3 + 4*i];
-        const int z3 = 17* block[1 + 4*i] +  7*block[3 + 4*i];
+    for (i=0; i < 4; i++) {
+        const int z0= 13*(block[0 + 4*i] +    block[2 + 4*i]);
+        const int z1= 13*(block[0 + 4*i] -    block[2 + 4*i]);
+        const int z2=  7* block[1 + 4*i] - 17*block[3 + 4*i];
+        const int z3= 17* block[1 + 4*i] +  7*block[3 + 4*i];
 
-        block[0 + 4*i] = z0 + z3;
-        block[1 + 4*i] = z1 + z2;
-        block[2 + 4*i] = z1 - z2;
-        block[3 + 4*i] = z0 - z3;
+        block[0 + 4*i]= z0 + z3;
+        block[1 + 4*i]= z1 + z2;
+        block[2 + 4*i]= z1 - z2;
+        block[3 + 4*i]= z0 - z3;
     }
 
-    for (i = 0; i < 4; i++) {
-        const int z0 = 13*(block[i + 4*0] +    block[i + 4*2]);
-        const int z1 = 13*(block[i + 4*0] -    block[i + 4*2]);
-        const int z2 =  7* block[i + 4*1] - 17*block[i + 4*3];
-        const int z3 = 17* block[i + 4*1] +  7*block[i + 4*3];
-        const int rr = (dc + 0x80000);
-
-        dst[i + stride*0] = cm[ dst[i + stride*0] + (((z0 + z3)*qmul + rr) >> 20) ];
-        dst[i + stride*1] = cm[ dst[i + stride*1] + (((z1 + z2)*qmul + rr) >> 20) ];
-        dst[i + stride*2] = cm[ dst[i + stride*2] + (((z1 - z2)*qmul + rr) >> 20) ];
-        dst[i + stride*3] = cm[ dst[i + stride*3] + (((z0 - z3)*qmul + rr) >> 20) ];
+    for (i=0; i < 4; i++) {
+        const int z0= 13*(block[i + 4*0] +    block[i + 4*2]);
+        const int z1= 13*(block[i + 4*0] -    block[i + 4*2]);
+        const int z2=  7* block[i + 4*1] - 17*block[i + 4*3];
+        const int z3= 17* block[i + 4*1] +  7*block[i + 4*3];
+        const int rr= (dc + 0x80000);
+
+        dst[i + stride*0]= cm[ dst[i + stride*0] + (((z0 + z3)*qmul + rr) >> 20) ];
+        dst[i + stride*1]= cm[ dst[i + stride*1] + (((z1 + z2)*qmul + rr) >> 20) ];
+        dst[i + stride*2]= cm[ dst[i + stride*2] + (((z1 - z2)*qmul + rr) >> 20) ];
+        dst[i + stride*3]= cm[ dst[i + stride*3] + (((z0 - z3)*qmul + rr) >> 20) ];
     }
 }
 
-static inline int svq3_decode_block(GetBitContext *gb, DCTELEM *block,
-                                    int index, const int type)
-{
-    static const uint8_t *const scan_patterns[4] =
-    { luma_dc_zigzag_scan, zigzag_scan, svq3_scan, chroma_dc_scan };
+static inline int svq3_decode_block (GetBitContext *gb, DCTELEM *block,
+                                     int index, const int type) {
 
-    int run, level, sign, vlc, limit;
-    const int intra = (3 * type) >> 2;
-    const uint8_t *const scan = scan_patterns[type];
+  static const uint8_t *const scan_patterns[4] =
+  { luma_dc_zigzag_scan, zigzag_scan, svq3_scan, chroma_dc_scan };
 
-    for (limit = (16 >> intra); index < 16; index = limit, limit += 8) {
-        for (; (vlc = svq3_get_ue_golomb(gb)) != 0; index++) {
+  int run, level, sign, vlc, limit;
+  const int intra = (3 * type) >> 2;
+  const uint8_t *const scan = scan_patterns[type];
 
-          if (vlc == INVALID_VLC)
-              return -1;
+  for (limit=(16 >> intra); index < 16; index=limit, limit+=8) {
+    for (; (vlc = svq3_get_ue_golomb (gb)) != 0; index++) {
 
-          sign = (vlc & 0x1) - 1;
-          vlc  = (vlc + 1) >> 1;
-
-          if (type == 3) {
-              if (vlc < 3) {
-                  run   = 0;
-                  level = vlc;
-              } else if (vlc < 4) {
-                  run   = 1;
-                  level = 1;
-              } else {
-                  run   = (vlc & 0x3);
-                  level = ((vlc + 9) >> 2) - run;
-              }
-          } else {
-              if (vlc < 16) {
-                  run   = svq3_dct_tables[intra][vlc].run;
-                  level = svq3_dct_tables[intra][vlc].level;
-              } else if (intra) {
-                  run   = (vlc & 0x7);
-                  level = (vlc >> 3) + ((run == 0) ? 8 : ((run < 2) ? 2 : ((run < 5) ? 0 : -1)));
-              } else {
-                  run   = (vlc & 0xF);
-                  level = (vlc >> 4) + ((run == 0) ? 4 : ((run < 3) ? 2 : ((run < 10) ? 1 : 0)));
-              }
-          }
+      if (vlc == INVALID_VLC)
+        return -1;
 
-          if ((index += run) >= limit)
-              return -1;
+      sign = (vlc & 0x1) - 1;
+      vlc  = (vlc + 1) >> 1;
 
-          block[scan[index]] = (level ^ sign) - sign;
+      if (type == 3) {
+        if (vlc < 3) {
+          run   = 0;
+          level = vlc;
+        } else if (vlc < 4) {
+          run   = 1;
+          level = 1;
+        } else {
+          run   = (vlc & 0x3);
+          level = ((vlc + 9) >> 2) - run;
         }
-
-        if (type != 2) {
-            break;
+      } else {
+        if (vlc < 16) {
+          run   = svq3_dct_tables[intra][vlc].run;
+          level = svq3_dct_tables[intra][vlc].level;
+        } else if (intra) {
+          run   = (vlc & 0x7);
+          level = (vlc >> 3) + ((run == 0) ? 8 : ((run < 2) ? 2 : ((run < 5) ? 0 : -1)));
+        } else {
+          run   = (vlc & 0xF);
+          level = (vlc >> 4) + ((run == 0) ? 4 : ((run < 3) ? 2 : ((run < 10) ? 1 : 0)));
         }
+      }
+
+      if ((index += run) >= limit)
+        return -1;
+
+      block[scan[index]] = (level ^ sign) - sign;
     }
 
-    return 0;
+    if (type != 2) {
+      break;
+    }
+  }
+
+  return 0;
 }
 
-static inline void svq3_mc_dir_part(MpegEncContext *s,
-                                    int x, int y, int width, int height,
-                                    int mx, int my, int dxy,
-                                    int thirdpel, int dir, int avg)
-{
-    const Picture *pic = (dir == 0) ? &s->last_picture : &s->next_picture;
-    uint8_t *src, *dest;
-    int i, emu = 0;
-    int blocksize = 2 - (width>>3); //16->0, 8->1, 4->2
+static inline void svq3_mc_dir_part (MpegEncContext *s,
+                                     int x, int y, int width, int height,
+                                     int mx, int my, int dxy,
+                                     int thirdpel, int dir, int avg) {
 
-    mx += x;
-    my += y;
+  const Picture *pic = (dir == 0) ? &s->last_picture : &s->next_picture;
+  uint8_t *src, *dest;
+  int i, emu = 0;
+  int blocksize= 2 - (width>>3); //16->0, 8->1, 4->2
 
-    if (mx < 0 || mx >= (s->h_edge_pos - width  - 1) ||
-        my < 0 || my >= (s->v_edge_pos - height - 1)) {
+  mx += x;
+  my += y;
 
-        if ((s->flags & CODEC_FLAG_EMU_EDGE)) {
-            emu = 1;
-        }
+  if (mx < 0 || mx >= (s->h_edge_pos - width  - 1) ||
+      my < 0 || my >= (s->v_edge_pos - height - 1)) {
 
-        mx = av_clip (mx, -16, (s->h_edge_pos - width  + 15));
-        my = av_clip (my, -16, (s->v_edge_pos - height + 15));
+    if ((s->flags & CODEC_FLAG_EMU_EDGE)) {
+      emu = 1;
     }
 
-    /* form component predictions */
-    dest = s->current_picture.data[0] + x + y*s->linesize;
-    src  = pic->data[0] + mx + my*s->linesize;
-
-    if (emu) {
-        ff_emulated_edge_mc(s->edge_emu_buffer, src, s->linesize, (width + 1), (height + 1),
-                            mx, my, s->h_edge_pos, s->v_edge_pos);
+    mx = av_clip (mx, -16, (s->h_edge_pos - width  + 15));
+    my = av_clip (my, -16, (s->v_edge_pos - height + 15));
+  }
+
+  /* form component predictions */
+  dest = s->current_picture.data[0] + x + y*s->linesize;
+  src  = pic->data[0] + mx + my*s->linesize;
+
+  if (emu) {
+    ff_emulated_edge_mc (s->edge_emu_buffer, src, s->linesize, (width + 1), (height + 1),
+                         mx, my, s->h_edge_pos, s->v_edge_pos);
+    src = s->edge_emu_buffer;
+  }
+  if(thirdpel)
+    (avg ? s->dsp.avg_tpel_pixels_tab : s->dsp.put_tpel_pixels_tab)[dxy](dest, src, s->linesize, width, height);
+  else
+    (avg ? s->dsp.avg_pixels_tab : s->dsp.put_pixels_tab)[blocksize][dxy](dest, src, s->linesize, height);
+
+  if (!(s->flags & CODEC_FLAG_GRAY)) {
+    mx     = (mx + (mx < (int) x)) >> 1;
+    my     = (my + (my < (int) y)) >> 1;
+    width  = (width  >> 1);
+    height = (height >> 1);
+    blocksize++;
+
+    for (i=1; i < 3; i++) {
+      dest = s->current_picture.data[i] + (x >> 1) + (y >> 1)*s->uvlinesize;
+      src  = pic->data[i] + mx + my*s->uvlinesize;
+
+      if (emu) {
+        ff_emulated_edge_mc (s->edge_emu_buffer, src, s->uvlinesize, (width + 1), (height + 1),
+                             mx, my, (s->h_edge_pos >> 1), (s->v_edge_pos >> 1));
         src = s->edge_emu_buffer;
+      }
+      if(thirdpel)
+        (avg ? s->dsp.avg_tpel_pixels_tab : s->dsp.put_tpel_pixels_tab)[dxy](dest, src, s->uvlinesize, width, height);
+      else
+        (avg ? s->dsp.avg_pixels_tab : s->dsp.put_pixels_tab)[blocksize][dxy](dest, src, s->uvlinesize, height);
     }
-    if (thirdpel)
-        (avg ? s->dsp.avg_tpel_pixels_tab : s->dsp.put_tpel_pixels_tab)[dxy](dest, src, s->linesize, width, height);
-    else
-        (avg ? s->dsp.avg_pixels_tab : s->dsp.put_pixels_tab)[blocksize][dxy](dest, src, s->linesize, height);
-
-    if (!(s->flags & CODEC_FLAG_GRAY)) {
-        mx     = (mx + (mx < (int) x)) >> 1;
-        my     = (my + (my < (int) y)) >> 1;
-        width  = (width  >> 1);
-        height = (height >> 1);
-        blocksize++;
-
-        for (i = 1; i < 3; i++) {
-            dest = s->current_picture.data[i] + (x >> 1) + (y >> 1)*s->uvlinesize;
-            src  = pic->data[i] + mx + my*s->uvlinesize;
-
-            if (emu) {
-                ff_emulated_edge_mc(s->edge_emu_buffer, src, s->uvlinesize, (width + 1), (height + 1),
-                                    mx, my, (s->h_edge_pos >> 1), (s->v_edge_pos >> 1));
-                src = s->edge_emu_buffer;
-            }
-            if (thirdpel)
-                (avg ? s->dsp.avg_tpel_pixels_tab : s->dsp.put_tpel_pixels_tab)[dxy](dest, src, s->uvlinesize, width, height);
-            else
-                (avg ? s->dsp.avg_pixels_tab : s->dsp.put_pixels_tab)[blocksize][dxy](dest, src, s->uvlinesize, height);
-        }
-    }
+  }
 }
 
-static inline int svq3_mc_dir(H264Context *h, int size, int mode, int dir,
-                              int avg)
-{
-    int i, j, k, mx, my, dx, dy, x, y;
-    MpegEncContext *const s = (MpegEncContext *) h;
-    const int part_width  = ((size & 5) == 4) ? 4 : 16 >> (size & 1);
-    const int part_height = 16 >> ((unsigned) (size + 1) / 3);
-    const int extra_width = (mode == PREDICT_MODE) ? -16*6 : 0;
-    const int h_edge_pos  = 6*(s->h_edge_pos - part_width ) - extra_width;
-    const int v_edge_pos  = 6*(s->v_edge_pos - part_height) - extra_width;
-
-    for (i = 0; i < 16; i += part_height) {
-        for (j = 0; j < 16; j += part_width) {
-            const int b_xy = (4*s->mb_x + (j >> 2)) + (4*s->mb_y + (i >> 2))*h->b_stride;
-            int dxy;
-            x = 16*s->mb_x + j;
-            y = 16*s->mb_y + i;
-            k = ((j >> 2) & 1) + ((i >> 1) & 2) + ((j >> 1) & 4) + (i & 8);
-
-            if (mode != PREDICT_MODE) {
-                pred_motion(h, k, (part_width >> 2), dir, 1, &mx, &my);
-            } else {
-                mx = s->next_picture.motion_val[0][b_xy][0]<<1;
-                my = s->next_picture.motion_val[0][b_xy][1]<<1;
-
-                if (dir == 0) {
-                    mx = ((mx * h->frame_num_offset) / h->prev_frame_num_offset + 1) >> 1;
-                    my = ((my * h->frame_num_offset) / h->prev_frame_num_offset + 1) >> 1;
-                } else {
-                    mx = ((mx * (h->frame_num_offset - h->prev_frame_num_offset)) / h->prev_frame_num_offset + 1) >> 1;
-                    my = ((my * (h->frame_num_offset - h->prev_frame_num_offset)) / h->prev_frame_num_offset + 1) >> 1;
-                }
-            }
-
-            /* clip motion vector prediction to frame border */
-            mx = av_clip(mx, extra_width - 6*x, h_edge_pos - 6*x);
-            my = av_clip(my, extra_width - 6*y, v_edge_pos - 6*y);
-
-            /* get (optional) motion vector differential */
-            if (mode == PREDICT_MODE) {
-                dx = dy = 0;
-            } else {
-                dy = svq3_get_se_golomb(&s->gb);
-                dx = svq3_get_se_golomb(&s->gb);
-
-                if (dx == INVALID_VLC || dy == INVALID_VLC) {
-                    av_log(h->s.avctx, AV_LOG_ERROR, "invalid MV vlc\n");
-                    return -1;
-                }
-            }
-
-            /* compute motion vector */
-            if (mode == THIRDPEL_MODE) {
-                int fx, fy;
-                mx  = ((mx + 1)>>1) + dx;
-                my  = ((my + 1)>>1) + dy;
-                fx  = ((unsigned)(mx + 0x3000))/3 - 0x1000;
-                fy  = ((unsigned)(my + 0x3000))/3 - 0x1000;
-                dxy = (mx - 3*fx) + 4*(my - 3*fy);
-
-                svq3_mc_dir_part(s, x, y, part_width, part_height, fx, fy, dxy, 1, dir, avg);
-                mx += mx;
-                my += my;
-            } else if (mode == HALFPEL_MODE || mode == PREDICT_MODE) {
-                mx  = ((unsigned)(mx + 1 + 0x3000))/3 + dx - 0x1000;
-                my  = ((unsigned)(my + 1 + 0x3000))/3 + dy - 0x1000;
-                dxy = (mx&1) + 2*(my&1);
-
-                svq3_mc_dir_part(s, x, y, part_width, part_height, mx>>1, my>>1, dxy, 0, dir, avg);
-                mx *= 3;
-                my *= 3;
-            } else {
-                mx = ((unsigned)(mx + 3 + 0x6000))/6 + dx - 0x1000;
-                my = ((unsigned)(my + 3 + 0x6000))/6 + dy - 0x1000;
-
-                svq3_mc_dir_part(s, x, y, part_width, part_height, mx, my, 0, 0, dir, avg);
-                mx *= 6;
-                my *= 6;
-            }
-
-            /* update mv_cache */
-            if (mode != PREDICT_MODE) {
-                int32_t mv = pack16to32(mx,my);
-
-                if (part_height == 8 && i < 8) {
-                    *(int32_t *) h->mv_cache[dir][scan8[k] + 1*8] = mv;
-
-                    if (part_width == 8 && j < 8) {
-                        *(int32_t *) h->mv_cache[dir][scan8[k] + 1 + 1*8] = mv;
-                    }
-                }
-                if (part_width == 8 && j < 8) {
-                    *(int32_t *) h->mv_cache[dir][scan8[k] + 1] = mv;
-                }
-                if (part_width == 4 || part_height == 4) {
-                    *(int32_t *) h->mv_cache[dir][scan8[k]] = mv;
-                }
-            }
-
-            /* write back motion vectors */
-            fill_rectangle(s->current_picture.motion_val[dir][b_xy], part_width>>2, part_height>>2, h->b_stride, pack16to32(mx,my), 4);
-        }
-    }
-
-    return 0;
-}
-
-static int svq3_decode_mb(H264Context *h, unsigned int mb_type)
-{
-    int i, j, k, m, dir, mode;
-    int cbp = 0;
-    uint32_t vlc;
-    int8_t *top, *left;
-    MpegEncContext *const s = (MpegEncContext *) h;
-    const int mb_xy = h->mb_xy;
-    const int b_xy  = 4*s->mb_x + 4*s->mb_y*h->b_stride;
-
-    h->top_samples_available      = (s->mb_y == 0) ? 0x33FF : 0xFFFF;
-    h->left_samples_available     = (s->mb_x == 0) ? 0x5F5F : 0xFFFF;
-    h->topright_samples_available = 0xFFFF;
-
-    if (mb_type == 0) {           /* SKIP */
-        if (s->pict_type == FF_P_TYPE || s->next_picture.mb_type[mb_xy] == -1) {
-            svq3_mc_dir_part(s, 16*s->mb_x, 16*s->mb_y, 16, 16, 0, 0, 0, 0, 0, 0);
-
-            if (s->pict_type == FF_B_TYPE) {
-                svq3_mc_dir_part(s, 16*s->mb_x, 16*s->mb_y, 16, 16, 0, 0, 0, 0, 1, 1);
-            }
-
-            mb_type = MB_TYPE_SKIP;
+static inline int svq3_mc_dir (H264Context *h, int size, int mode, int dir, int avg) {
+
+  int i, j, k, mx, my, dx, dy, x, y;
+  MpegEncContext *const s = (MpegEncContext *) h;
+  const int part_width  = ((size & 5) == 4) ? 4 : 16 >> (size & 1);
+  const int part_height = 16 >> ((unsigned) (size + 1) / 3);
+  const int extra_width = (mode == PREDICT_MODE) ? -16*6 : 0;
+  const int h_edge_pos  = 6*(s->h_edge_pos - part_width ) - extra_width;
+  const int v_edge_pos  = 6*(s->v_edge_pos - part_height) - extra_width;
+
+  for (i=0; i < 16; i+=part_height) {
+    for (j=0; j < 16; j+=part_width) {
+      const int b_xy = (4*s->mb_x+(j>>2)) + (4*s->mb_y+(i>>2))*h->b_stride;
+      int dxy;
+      x = 16*s->mb_x + j;
+      y = 16*s->mb_y + i;
+      k = ((j>>2)&1) + ((i>>1)&2) + ((j>>1)&4) + (i&8);
+
+      if (mode != PREDICT_MODE) {
+        pred_motion (h, k, (part_width >> 2), dir, 1, &mx, &my);
+      } else {
+        mx = s->next_picture.motion_val[0][b_xy][0]<<1;
+        my = s->next_picture.motion_val[0][b_xy][1]<<1;
+
+        if (dir == 0) {
+          mx = ((mx * h->frame_num_offset) / h->prev_frame_num_offset + 1)>>1;
+          my = ((my * h->frame_num_offset) / h->prev_frame_num_offset + 1)>>1;
         } else {
-            mb_type = FFMIN(s->next_picture.mb_type[mb_xy], 6);
-            if (svq3_mc_dir(h, mb_type, PREDICT_MODE, 0, 0) < 0)
-                return -1;
-            if (svq3_mc_dir(h, mb_type, PREDICT_MODE, 1, 1) < 0)
-                return -1;
-
-            mb_type = MB_TYPE_16x16;
+          mx = ((mx * (h->frame_num_offset - h->prev_frame_num_offset)) / h->prev_frame_num_offset + 1)>>1;
+          my = ((my * (h->frame_num_offset - h->prev_frame_num_offset)) / h->prev_frame_num_offset + 1)>>1;
         }
-    } else if (mb_type < 8) {     /* INTER */
-        if (h->thirdpel_flag && h->halfpel_flag == !get_bits1 (&s->gb)) {
-            mode = THIRDPEL_MODE;
-        } else if (h->halfpel_flag && h->thirdpel_flag == !get_bits1 (&s->gb)) {
-            mode = HALFPEL_MODE;
-        } else {
-            mode = FULLPEL_MODE;
+      }
+
+      /* clip motion vector prediction to frame border */
+      mx = av_clip (mx, extra_width - 6*x, h_edge_pos - 6*x);
+      my = av_clip (my, extra_width - 6*y, v_edge_pos - 6*y);
+
+      /* get (optional) motion vector differential */
+      if (mode == PREDICT_MODE) {
+        dx = dy = 0;
+      } else {
+        dy = svq3_get_se_golomb (&s->gb);
+        dx = svq3_get_se_golomb (&s->gb);
+
+        if (dx == INVALID_VLC || dy == INVALID_VLC) {
+          av_log(h->s.avctx, AV_LOG_ERROR, "invalid MV vlc\n");
+          return -1;
         }
-
-        /* fill caches */
-        /* note ref_cache should contain here:
-            ????????
-            ???11111
-            N??11111
-            N??11111
-            N??11111
-        */
-
-        for (m = 0; m < 2; m++) {
-            if (s->mb_x > 0 && h->intra4x4_pred_mode[mb_xy - 1][0] != -1) {
-                for (i = 0; i < 4; i++) {
-                    *(uint32_t *) h->mv_cache[m][scan8[0] - 1 + i*8] = *(uint32_t *) s->current_picture.motion_val[m][b_xy - 1 + i*h->b_stride];
-                }
-            } else {
-                for (i = 0; i < 4; i++) {
-                    *(uint32_t *) h->mv_cache[m][scan8[0] - 1 + i*8] = 0;
-                }
-            }
-            if (s->mb_y > 0) {
-                memcpy(h->mv_cache[m][scan8[0] - 1*8], s->current_picture.motion_val[m][b_xy - h->b_stride], 4*2*sizeof(int16_t));
-                memset(&h->ref_cache[m][scan8[0] - 1*8], (h->intra4x4_pred_mode[mb_xy - s->mb_stride][4] == -1) ? PART_NOT_AVAILABLE : 1, 4);
-
-                if (s->mb_x < (s->mb_width - 1)) {
-                    *(uint32_t *) h->mv_cache[m][scan8[0] + 4 - 1*8] = *(uint32_t *) s->current_picture.motion_val[m][b_xy - h->b_stride + 4];
-                    h->ref_cache[m][scan8[0] + 4 - 1*8] =
-                        (h->intra4x4_pred_mode[mb_xy - s->mb_stride + 1][0] == -1 ||
-                         h->intra4x4_pred_mode[mb_xy - s->mb_stride    ][4] == -1) ? PART_NOT_AVAILABLE : 1;
-                }else
-                    h->ref_cache[m][scan8[0] + 4 - 1*8] = PART_NOT_AVAILABLE;
-                if (s->mb_x > 0) {
-                    *(uint32_t *) h->mv_cache[m][scan8[0] - 1 - 1*8] = *(uint32_t *) s->current_picture.motion_val[m][b_xy - h->b_stride - 1];
-                    h->ref_cache[m][scan8[0] - 1 - 1*8] = (h->intra4x4_pred_mode[mb_xy - s->mb_stride - 1][3] == -1) ? PART_NOT_AVAILABLE : 1;
-                }else
-                    h->ref_cache[m][scan8[0] - 1 - 1*8] = PART_NOT_AVAILABLE;
-            }else
-                memset(&h->ref_cache[m][scan8[0] - 1*8 - 1], PART_NOT_AVAILABLE, 8);
-
-            if (s->pict_type != FF_B_TYPE)
-                break;
+      }
+
+      /* compute motion vector */
+      if (mode == THIRDPEL_MODE) {
+        int fx, fy;
+        mx = ((mx + 1)>>1) + dx;
+        my = ((my + 1)>>1) + dy;
+        fx= ((unsigned)(mx + 0x3000))/3 - 0x1000;
+        fy= ((unsigned)(my + 0x3000))/3 - 0x1000;
+        dxy= (mx - 3*fx) + 4*(my - 3*fy);
+
+        svq3_mc_dir_part (s, x, y, part_width, part_height, fx, fy, dxy, 1, dir, avg);
+        mx += mx;
+        my += my;
+      } else if (mode == HALFPEL_MODE || mode == PREDICT_MODE) {
+        mx = ((unsigned)(mx + 1 + 0x3000))/3 + dx - 0x1000;
+        my = ((unsigned)(my + 1 + 0x3000))/3 + dy - 0x1000;
+        dxy= (mx&1) + 2*(my&1);
+
+        svq3_mc_dir_part (s, x, y, part_width, part_height, mx>>1, my>>1, dxy, 0, dir, avg);
+        mx *= 3;
+        my *= 3;
+      } else {
+        mx = ((unsigned)(mx + 3 + 0x6000))/6 + dx - 0x1000;
+        my = ((unsigned)(my + 3 + 0x6000))/6 + dy - 0x1000;
+
+        svq3_mc_dir_part (s, x, y, part_width, part_height, mx, my, 0, 0, dir, avg);
+        mx *= 6;
+        my *= 6;
+      }
+
+      /* update mv_cache */
+      if (mode != PREDICT_MODE) {
+        int32_t mv = pack16to32(mx,my);
+
+        if (part_height == 8 && i < 8) {
+          *(int32_t *) h->mv_cache[dir][scan8[k] + 1*8] = mv;
+
+          if (part_width == 8 && j < 8) {
+            *(int32_t *) h->mv_cache[dir][scan8[k] + 1 + 1*8] = mv;
+          }
         }
-
-        /* decode motion vector(s) and form prediction(s) */
-        if (s->pict_type == FF_P_TYPE) {
-            if (svq3_mc_dir(h, (mb_type - 1), mode, 0, 0) < 0)
-                return -1;
-        } else {        /* FF_B_TYPE */
-            if (mb_type != 2) {
-                if (svq3_mc_dir(h, 0, mode, 0, 0) < 0)
-                    return -1;
-            } else {
-                for (i = 0; i < 4; i++) {
-                    memset(s->current_picture.motion_val[0][b_xy + i*h->b_stride], 0, 4*2*sizeof(int16_t));
-                }
-            }
-            if (mb_type != 1) {
-                if (svq3_mc_dir(h, 0, mode, 1, (mb_type == 3)) < 0)
-                    return -1;
-            } else {
-                for (i = 0; i < 4; i++) {
-                    memset(s->current_picture.motion_val[1][b_xy + i*h->b_stride], 0, 4*2*sizeof(int16_t));
-                }
-            }
+        if (part_width == 8 && j < 8) {
+          *(int32_t *) h->mv_cache[dir][scan8[k] + 1] = mv;
         }
-
-        mb_type = MB_TYPE_16x16;
-    } else if (mb_type == 8 || mb_type == 33) {   /* INTRA4x4 */
-        memset(h->intra4x4_pred_mode_cache, -1, 8*5*sizeof(int8_t));
-
-        if (mb_type == 8) {
-            if (s->mb_x > 0) {
-                for (i = 0; i < 4; i++) {
-                    h->intra4x4_pred_mode_cache[scan8[0] - 1 + i*8] = h->intra4x4_pred_mode[mb_xy - 1][i];
-                }
-                if (h->intra4x4_pred_mode_cache[scan8[0] - 1] == -1) {
-                    h->left_samples_available = 0x5F5F;
-                }
-            }
-            if (s->mb_y > 0) {
-                h->intra4x4_pred_mode_cache[4+8*0] = h->intra4x4_pred_mode[mb_xy - s->mb_stride][4];
-                h->intra4x4_pred_mode_cache[5+8*0] = h->intra4x4_pred_mode[mb_xy - s->mb_stride][5];
-                h->intra4x4_pred_mode_cache[6+8*0] = h->intra4x4_pred_mode[mb_xy - s->mb_stride][6];
-                h->intra4x4_pred_mode_cache[7+8*0] = h->intra4x4_pred_mode[mb_xy - s->mb_stride][3];
-
-                if (h->intra4x4_pred_mode_cache[4+8*0] == -1) {
-                    h->top_samples_available = 0x33FF;
-                }
-            }
-
-            /* decode prediction codes for luma blocks */
-            for (i = 0; i < 16; i+=2) {
-                vlc = svq3_get_ue_golomb(&s->gb);
-
-                if (vlc >= 25){
-                    av_log(h->s.avctx, AV_LOG_ERROR, "luma prediction:%d\n", vlc);
-                    return -1;
-                }
-
-                left    = &h->intra4x4_pred_mode_cache[scan8[i] - 1];
-                top     = &h->intra4x4_pred_mode_cache[scan8[i] - 8];
-
-                left[1] = svq3_pred_1[top[0] + 1][left[0] + 1][svq3_pred_0[vlc][0]];
-                left[2] = svq3_pred_1[top[1] + 1][left[1] + 1][svq3_pred_0[vlc][1]];
-
-                if (left[1] == -1 || left[2] == -1){
-                    av_log(h->s.avctx, AV_LOG_ERROR, "weird prediction\n");
-                    return -1;
-                }
-            }
-        } else {    /* mb_type == 33, DC_128_PRED block type */
-            for (i = 0; i < 4; i++) {
-                memset(&h->intra4x4_pred_mode_cache[scan8[0] + 8*i], DC_PRED, 4);
-            }
+        if (part_width == 4 || part_height == 4) {
+          *(int32_t *) h->mv_cache[dir][scan8[k]] = mv;
         }
+      }
 
-        write_back_intra_pred_mode(h);
+      /* write back motion vectors */
+      fill_rectangle(s->current_picture.motion_val[dir][b_xy], part_width>>2, part_height>>2, h->b_stride, pack16to32(mx,my), 4);
+    }
+  }
 
-        if (mb_type == 8) {
-            check_intra4x4_pred_mode(h);
+  return 0;
+}
 
-            h->top_samples_available  = (s->mb_y == 0) ? 0x33FF : 0xFFFF;
-            h->left_samples_available = (s->mb_x == 0) ? 0x5F5F : 0xFFFF;
-        } else {
-            for (i = 0; i < 4; i++) {
-                memset(&h->intra4x4_pred_mode_cache[scan8[0] + 8*i], DC_128_PRED, 4);
-            }
+static int svq3_decode_mb (H264Context *h, unsigned int mb_type) {
+  int i, j, k, m, dir, mode;
+  int cbp = 0;
+  uint32_t vlc;
+  int8_t *top, *left;
+  MpegEncContext *const s = (MpegEncContext *) h;
+  const int mb_xy = h->mb_xy;
+  const int b_xy = 4*s->mb_x + 4*s->mb_y*h->b_stride;
 
-            h->top_samples_available  = 0x33FF;
-            h->left_samples_available = 0x5F5F;
-        }
+  h->top_samples_available        = (s->mb_y == 0) ? 0x33FF : 0xFFFF;
+  h->left_samples_available        = (s->mb_x == 0) ? 0x5F5F : 0xFFFF;
+  h->topright_samples_available        = 0xFFFF;
 
-        mb_type = MB_TYPE_INTRA4x4;
-    } else {                      /* INTRA16x16 */
-        dir = i_mb_type_info[mb_type - 8].pred_mode;
-        dir = (dir >> 1) ^ 3*(dir & 1) ^ 1;
+  if (mb_type == 0) {           /* SKIP */
+    if (s->pict_type == FF_P_TYPE || s->next_picture.mb_type[mb_xy] == -1) {
+      svq3_mc_dir_part (s, 16*s->mb_x, 16*s->mb_y, 16, 16, 0, 0, 0, 0, 0, 0);
 
-        if ((h->intra16x16_pred_mode = check_intra_pred_mode(h, dir)) == -1){
-            av_log(h->s.avctx, AV_LOG_ERROR, "check_intra_pred_mode = -1\n");
-            return -1;
-        }
+      if (s->pict_type == FF_B_TYPE) {
+        svq3_mc_dir_part (s, 16*s->mb_x, 16*s->mb_y, 16, 16, 0, 0, 0, 0, 1, 1);
+      }
 
-        cbp = i_mb_type_info[mb_type - 8].cbp;
-        mb_type = MB_TYPE_INTRA16x16;
-    }
+      mb_type = MB_TYPE_SKIP;
+    } else {
+      mb_type= FFMIN(s->next_picture.mb_type[mb_xy], 6);
+      if(svq3_mc_dir (h, mb_type, PREDICT_MODE, 0, 0) < 0)
+        return -1;
+      if(svq3_mc_dir (h, mb_type, PREDICT_MODE, 1, 1) < 0)
+        return -1;
 
-    if (!IS_INTER(mb_type) && s->pict_type != FF_I_TYPE) {
-        for (i = 0; i < 4; i++) {
-            memset(s->current_picture.motion_val[0][b_xy + i*h->b_stride], 0, 4*2*sizeof(int16_t));
-        }
-        if (s->pict_type == FF_B_TYPE) {
-            for (i = 0; i < 4; i++) {
-                memset(s->current_picture.motion_val[1][b_xy + i*h->b_stride], 0, 4*2*sizeof(int16_t));
-            }
-        }
-    }
-    if (!IS_INTRA4x4(mb_type)) {
-        memset(h->intra4x4_pred_mode[mb_xy], DC_PRED, 8);
+      mb_type = MB_TYPE_16x16;
     }
-    if (!IS_SKIP(mb_type) || s->pict_type == FF_B_TYPE) {
-        memset(h->non_zero_count_cache + 8, 0, 4*9*sizeof(uint8_t));
-        s->dsp.clear_blocks(h->mb);
+  } else if (mb_type < 8) {     /* INTER */
+    if (h->thirdpel_flag && h->halfpel_flag == !get_bits1 (&s->gb)) {
+      mode = THIRDPEL_MODE;
+    } else if (h->halfpel_flag && h->thirdpel_flag == !get_bits1 (&s->gb)) {
+      mode = HALFPEL_MODE;
+    } else {
+      mode = FULLPEL_MODE;
     }
 
-    if (!IS_INTRA16x16(mb_type) && (!IS_SKIP(mb_type) || s->pict_type == FF_B_TYPE)) {
-        if ((vlc = svq3_get_ue_golomb(&s->gb)) >= 48){
-            av_log(h->s.avctx, AV_LOG_ERROR, "cbp_vlc=%d\n", vlc);
-            return -1;
+    /* fill caches */
+    /* note ref_cache should contain here:
+        ????????
+        ???11111
+        N??11111
+        N??11111
+        N??11111
+    */
+
+    for (m=0; m < 2; m++) {
+      if (s->mb_x > 0 && h->intra4x4_pred_mode[mb_xy - 1][0] != -1) {
+        for (i=0; i < 4; i++) {
+          *(uint32_t *) h->mv_cache[m][scan8[0] - 1 + i*8] = *(uint32_t *) s->current_picture.motion_val[m][b_xy - 1 + i*h->b_stride];
         }
-
-        cbp = IS_INTRA(mb_type) ? golomb_to_intra4x4_cbp[vlc] : golomb_to_inter_cbp[vlc];
+      } else {
+        for (i=0; i < 4; i++) {
+          *(uint32_t *) h->mv_cache[m][scan8[0] - 1 + i*8] = 0;
+        }
+      }
+      if (s->mb_y > 0) {
+        memcpy (h->mv_cache[m][scan8[0] - 1*8], s->current_picture.motion_val[m][b_xy - h->b_stride], 4*2*sizeof(int16_t));
+        memset (&h->ref_cache[m][scan8[0] - 1*8], (h->intra4x4_pred_mode[mb_xy - s->mb_stride][4] == -1) ? PART_NOT_AVAILABLE : 1, 4);
+
+        if (s->mb_x < (s->mb_width - 1)) {
+          *(uint32_t *) h->mv_cache[m][scan8[0] + 4 - 1*8] = *(uint32_t *) s->current_picture.motion_val[m][b_xy - h->b_stride + 4];
+          h->ref_cache[m][scan8[0] + 4 - 1*8] =
+                  (h->intra4x4_pred_mode[mb_xy - s->mb_stride + 1][0] == -1 ||
+                   h->intra4x4_pred_mode[mb_xy - s->mb_stride][4] == -1) ? PART_NOT_AVAILABLE : 1;
+        }else
+          h->ref_cache[m][scan8[0] + 4 - 1*8] = PART_NOT_AVAILABLE;
+        if (s->mb_x > 0) {
+          *(uint32_t *) h->mv_cache[m][scan8[0] - 1 - 1*8] = *(uint32_t *) s->current_picture.motion_val[m][b_xy - h->b_stride - 1];
+          h->ref_cache[m][scan8[0] - 1 - 1*8] = (h->intra4x4_pred_mode[mb_xy - s->mb_stride - 1][3] == -1) ? PART_NOT_AVAILABLE : 1;
+        }else
+          h->ref_cache[m][scan8[0] - 1 - 1*8] = PART_NOT_AVAILABLE;
+      }else
+        memset (&h->ref_cache[m][scan8[0] - 1*8 - 1], PART_NOT_AVAILABLE, 8);
+
+      if (s->pict_type != FF_B_TYPE)
+        break;
     }
-    if (IS_INTRA16x16(mb_type) || (s->pict_type != FF_I_TYPE && s->adaptive_quant && cbp)) {
-        s->qscale += svq3_get_se_golomb(&s->gb);
 
-        if (s->qscale > 31){
-            av_log(h->s.avctx, AV_LOG_ERROR, "qscale:%d\n", s->qscale);
-            return -1;
+    /* decode motion vector(s) and form prediction(s) */
+    if (s->pict_type == FF_P_TYPE) {
+      if(svq3_mc_dir (h, (mb_type - 1), mode, 0, 0) < 0)
+        return -1;
+    } else {        /* FF_B_TYPE */
+      if (mb_type != 2) {
+        if(svq3_mc_dir (h, 0, mode, 0, 0) < 0)
+          return -1;
+      } else {
+        for (i=0; i < 4; i++) {
+          memset (s->current_picture.motion_val[0][b_xy + i*h->b_stride], 0, 4*2*sizeof(int16_t));
         }
-    }
-    if (IS_INTRA16x16(mb_type)) {
-        if (svq3_decode_block(&s->gb, h->mb, 0, 0)){
-            av_log(h->s.avctx, AV_LOG_ERROR, "error while decoding intra luma dc\n");
-            return -1;
+      }
+      if (mb_type != 1) {
+        if(svq3_mc_dir (h, 0, mode, 1, (mb_type == 3)) < 0)
+          return -1;
+      } else {
+        for (i=0; i < 4; i++) {
+          memset (s->current_picture.motion_val[1][b_xy + i*h->b_stride], 0, 4*2*sizeof(int16_t));
         }
+      }
     }
 
-    if (cbp) {
-        const int index = IS_INTRA16x16(mb_type) ? 1 : 0;
-        const int type = ((s->qscale < 24 && IS_INTRA4x4(mb_type)) ? 2 : 1);
-
-        for (i = 0; i < 4; i++) {
-            if ((cbp & (1 << i))) {
-                for (j = 0; j < 4; j++) {
-                    k = index ? ((j&1) + 2*(i&1) + 2*(j&2) + 4*(i&2)) : (4*i + j);
-                    h->non_zero_count_cache[ scan8[k] ] = 1;
-
-                    if (svq3_decode_block(&s->gb, &h->mb[16*k], index, type)){
-                        av_log(h->s.avctx, AV_LOG_ERROR, "error while decoding block\n");
-                        return -1;
-                    }
-                }
-            }
+    mb_type = MB_TYPE_16x16;
+  } else if (mb_type == 8 || mb_type == 33) {   /* INTRA4x4 */
+    memset (h->intra4x4_pred_mode_cache, -1, 8*5*sizeof(int8_t));
+
+    if (mb_type == 8) {
+      if (s->mb_x > 0) {
+        for (i=0; i < 4; i++) {
+          h->intra4x4_pred_mode_cache[scan8[0] - 1 + i*8] = h->intra4x4_pred_mode[mb_xy - 1][i];
+        }
+        if (h->intra4x4_pred_mode_cache[scan8[0] - 1] == -1) {
+          h->left_samples_available = 0x5F5F;
         }
+      }
+      if (s->mb_y > 0) {
+        h->intra4x4_pred_mode_cache[4+8*0] = h->intra4x4_pred_mode[mb_xy - s->mb_stride][4];
+        h->intra4x4_pred_mode_cache[5+8*0] = h->intra4x4_pred_mode[mb_xy - s->mb_stride][5];
+        h->intra4x4_pred_mode_cache[6+8*0] = h->intra4x4_pred_mode[mb_xy - s->mb_stride][6];
+        h->intra4x4_pred_mode_cache[7+8*0] = h->intra4x4_pred_mode[mb_xy - s->mb_stride][3];
+
+        if (h->intra4x4_pred_mode_cache[4+8*0] == -1) {
+          h->top_samples_available = 0x33FF;
+        }
+      }
+
+      /* decode prediction codes for luma blocks */
+      for (i=0; i < 16; i+=2) {
+        vlc = svq3_get_ue_golomb (&s->gb);
 
-        if ((cbp & 0x30)) {
-            for (i = 0; i < 2; ++i) {
-              if (svq3_decode_block(&s->gb, &h->mb[16*(16 + 4*i)], 0, 3)){
-                av_log(h->s.avctx, AV_LOG_ERROR, "error while decoding chroma dc block\n");
-                return -1;
-              }
-            }
-
-            if ((cbp & 0x20)) {
-                for (i = 0; i < 8; i++) {
-                    h->non_zero_count_cache[ scan8[16+i] ] = 1;
-
-                    if (svq3_decode_block(&s->gb, &h->mb[16*(16 + i)], 1, 1)){
-                        av_log(h->s.avctx, AV_LOG_ERROR, "error while decoding chroma ac block\n");
-                        return -1;
-                    }
-                }
-            }
+        if (vlc >= 25){
+          av_log(h->s.avctx, AV_LOG_ERROR, "luma prediction:%d\n", vlc);
+          return -1;
         }
-    }
 
-    h->cbp= cbp;
-    s->current_picture.mb_type[mb_xy] = mb_type;
+        left    = &h->intra4x4_pred_mode_cache[scan8[i] - 1];
+        top     = &h->intra4x4_pred_mode_cache[scan8[i] - 8];
 
-    if (IS_INTRA(mb_type)) {
-        h->chroma_pred_mode = check_intra_pred_mode(h, DC_PRED8x8);
-    }
+        left[1] = svq3_pred_1[top[0] + 1][left[0] + 1][svq3_pred_0[vlc][0]];
+        left[2] = svq3_pred_1[top[1] + 1][left[1] + 1][svq3_pred_0[vlc][1]];
 
-    return 0;
-}
+        if (left[1] == -1 || left[2] == -1){
+          av_log(h->s.avctx, AV_LOG_ERROR, "weird prediction\n");
+          return -1;
+        }
+      }
+    } else {    /* mb_type == 33, DC_128_PRED block type */
+      for (i=0; i < 4; i++) {
+        memset (&h->intra4x4_pred_mode_cache[scan8[0] + 8*i], DC_PRED, 4);
+      }
+    }
 
-static int svq3_decode_slice_header(H264Context *h)
-{
-    MpegEncContext *const s = (MpegEncContext *) h;
-    const int mb_xy = h->mb_xy;
-    int i, header;
+    write_back_intra_pred_mode (h);
 
-    header = get_bits(&s->gb, 8);
+    if (mb_type == 8) {
+      check_intra4x4_pred_mode (h);
 
-    if (((header & 0x9F) != 1 && (header & 0x9F) != 2) || (header & 0x60) == 0) {
-        /* TODO: what? */
-        av_log(h->s.avctx, AV_LOG_ERROR, "unsupported slice header (%02X)\n", header);
-        return -1;
+      h->top_samples_available  = (s->mb_y == 0) ? 0x33FF : 0xFFFF;
+      h->left_samples_available = (s->mb_x == 0) ? 0x5F5F : 0xFFFF;
     } else {
-        int length = (header >> 5) & 3;
-
-        h->next_slice_index = get_bits_count(&s->gb) + 8*show_bits(&s->gb, 8*length) + 8*length;
+      for (i=0; i < 4; i++) {
+        memset (&h->intra4x4_pred_mode_cache[scan8[0] + 8*i], DC_128_PRED, 4);
+      }
 
-        if (h->next_slice_index > s->gb.size_in_bits) {
-            av_log(h->s.avctx, AV_LOG_ERROR, "slice after bitstream end\n");
-            return -1;
+      h->top_samples_available  = 0x33FF;
+      h->left_samples_available = 0x5F5F;
     }
 
-        s->gb.size_in_bits = h->next_slice_index - 8*(length - 1);
-        skip_bits(&s->gb, 8);
+    mb_type = MB_TYPE_INTRA4x4;
+  } else {                      /* INTRA16x16 */
+    dir = i_mb_type_info[mb_type - 8].pred_mode;
+    dir = (dir >> 1) ^ 3*(dir & 1) ^ 1;
 
-        if (h->svq3_watermark_key) {
-            uint32_t header = AV_RL32(&s->gb.buffer[(get_bits_count(&s->gb)>>3)+1]);
-            AV_WL32(&s->gb.buffer[(get_bits_count(&s->gb)>>3)+1], header ^ h->svq3_watermark_key);
-        }
-        if (length > 0) {
-            memcpy((uint8_t *) &s->gb.buffer[get_bits_count(&s->gb) >> 3],
-                   &s->gb.buffer[s->gb.size_in_bits >> 3], (length - 1));
-        }
+    if ((h->intra16x16_pred_mode = check_intra_pred_mode (h, dir)) == -1){
+      av_log(h->s.avctx, AV_LOG_ERROR, "check_intra_pred_mode = -1\n");
+      return -1;
     }
 
-    if ((i = svq3_get_ue_golomb(&s->gb)) == INVALID_VLC || i >= 3){
-        av_log(h->s.avctx, AV_LOG_ERROR, "illegal slice type %d \n", i);
-        return -1;
+    cbp = i_mb_type_info[mb_type - 8].cbp;
+    mb_type = MB_TYPE_INTRA16x16;
+  }
+
+  if (!IS_INTER(mb_type) && s->pict_type != FF_I_TYPE) {
+    for (i=0; i < 4; i++) {
+      memset (s->current_picture.motion_val[0][b_xy + i*h->b_stride], 0, 4*2*sizeof(int16_t));
+    }
+    if (s->pict_type == FF_B_TYPE) {
+      for (i=0; i < 4; i++) {
+        memset (s->current_picture.motion_val[1][b_xy + i*h->b_stride], 0, 4*2*sizeof(int16_t));
+      }
+    }
+  }
+  if (!IS_INTRA4x4(mb_type)) {
+    memset (h->intra4x4_pred_mode[mb_xy], DC_PRED, 8);
+  }
+  if (!IS_SKIP(mb_type) || s->pict_type == FF_B_TYPE) {
+    memset (h->non_zero_count_cache + 8, 0, 4*9*sizeof(uint8_t));
+    s->dsp.clear_blocks(h->mb);
+  }
+
+  if (!IS_INTRA16x16(mb_type) && (!IS_SKIP(mb_type) || s->pict_type == FF_B_TYPE)) {
+    if ((vlc = svq3_get_ue_golomb (&s->gb)) >= 48){
+      av_log(h->s.avctx, AV_LOG_ERROR, "cbp_vlc=%d\n", vlc);
+      return -1;
     }
 
-    h->slice_type = golomb_to_pict_type[i];
+    cbp = IS_INTRA(mb_type) ? golomb_to_intra4x4_cbp[vlc] : golomb_to_inter_cbp[vlc];
+  }
+  if (IS_INTRA16x16(mb_type) || (s->pict_type != FF_I_TYPE && s->adaptive_quant && cbp)) {
+    s->qscale += svq3_get_se_golomb (&s->gb);
 
-    if ((header & 0x9F) == 2) {
-        i = (s->mb_num < 64) ? 6 : (1 + av_log2 (s->mb_num - 1));
-        s->mb_skip_run = get_bits(&s->gb, i) - (s->mb_x + (s->mb_y * s->mb_width));
-    } else {
-        skip_bits1(&s->gb);
-        s->mb_skip_run = 0;
+    if (s->qscale > 31){
+      av_log(h->s.avctx, AV_LOG_ERROR, "qscale:%d\n", s->qscale);
+      return -1;
     }
+  }
+  if (IS_INTRA16x16(mb_type)) {
+    if (svq3_decode_block (&s->gb, h->mb, 0, 0)){
+      av_log(h->s.avctx, AV_LOG_ERROR, "error while decoding intra luma dc\n");
+      return -1;
+    }
+  }
 
-    h->slice_num = get_bits(&s->gb, 8);
-    s->qscale = get_bits(&s->gb, 5);
-    s->adaptive_quant = get_bits1(&s->gb);
+  if (cbp) {
+    const int index = IS_INTRA16x16(mb_type) ? 1 : 0;
+    const int type = ((s->qscale < 24 && IS_INTRA4x4(mb_type)) ? 2 : 1);
 
-    /* unknown fields */
-    skip_bits1(&s->gb);
+    for (i=0; i < 4; i++) {
+      if ((cbp & (1 << i))) {
+        for (j=0; j < 4; j++) {
+          k = index ? ((j&1) + 2*(i&1) + 2*(j&2) + 4*(i&2)) : (4*i + j);
+          h->non_zero_count_cache[ scan8[k] ] = 1;
 
-    if (h->unknown_svq3_flag) {
-        skip_bits1(&s->gb);
+          if (svq3_decode_block (&s->gb, &h->mb[16*k], index, type)){
+            av_log(h->s.avctx, AV_LOG_ERROR, "error while decoding block\n");
+            return -1;
+          }
+        }
+      }
     }
 
-    skip_bits1(&s->gb);
-    skip_bits(&s->gb, 2);
-
-    while (get_bits1(&s->gb)) {
-        skip_bits(&s->gb, 8);
-    }
+    if ((cbp & 0x30)) {
+      for (i=0; i < 2; ++i) {
+        if (svq3_decode_block (&s->gb, &h->mb[16*(16 + 4*i)], 0, 3)){
+          av_log(h->s.avctx, AV_LOG_ERROR, "error while decoding chroma dc block\n");
+          return -1;
+        }
+      }
 
-    /* reset intra predictors and invalidate motion vector references */
-    if (s->mb_x > 0) {
-        memset(h->intra4x4_pred_mode[mb_xy - 1], -1, 4*sizeof(int8_t));
-        memset(h->intra4x4_pred_mode[mb_xy - s->mb_x], -1, 8*sizeof(int8_t)*s->mb_x);
-    }
-    if (s->mb_y > 0) {
-        memset(h->intra4x4_pred_mode[mb_xy - s->mb_stride], -1, 8*sizeof(int8_t)*(s->mb_width - s->mb_x));
+      if ((cbp & 0x20)) {
+        for (i=0; i < 8; i++) {
+          h->non_zero_count_cache[ scan8[16+i] ] = 1;
 
-        if (s->mb_x > 0) {
-            h->intra4x4_pred_mode[mb_xy - s->mb_stride - 1][3] = -1;
+          if (svq3_decode_block (&s->gb, &h->mb[16*(16 + i)], 1, 1)){
+            av_log(h->s.avctx, AV_LOG_ERROR, "error while decoding chroma ac block\n");
+            return -1;
+          }
         }
+      }
     }
+  }
 
-    return 0;
-}
+  s->current_picture.mb_type[mb_xy] = mb_type;
 
-static int svq3_decode_init(AVCodecContext *avctx)
-{
-    MpegEncContext *const s = avctx->priv_data;
-    H264Context *const h = avctx->priv_data;
-    int m;
-    unsigned char *extradata;
-    unsigned int size;
+  if (IS_INTRA(mb_type)) {
+    h->chroma_pred_mode = check_intra_pred_mode (h, DC_PRED8x8);
+  }
 
-    if (decode_init(avctx) < 0)
-        return -1;
+  return 0;
+}
 
-    s->flags  = avctx->flags;
-    s->flags2 = avctx->flags2;
-    s->unrestricted_mv = 1;
-    h->is_complex=1;
+static int svq3_decode_slice_header (H264Context *h) {
+  MpegEncContext *const s = (MpegEncContext *) h;
+  const int mb_xy = h->mb_xy;
+  int i, header;
 
-    if (!s->context_initialized) {
-        s->width  = avctx->width;
-        s->height = avctx->height;
-        h->halfpel_flag      = 1;
-        h->thirdpel_flag     = 1;
-        h->unknown_svq3_flag = 0;
-        h->chroma_qp[0]      = h->chroma_qp[1] = 4;
+  header = get_bits (&s->gb, 8);
 
-        if (MPV_common_init(s) < 0)
-            return -1;
+  if (((header & 0x9F) != 1 && (header & 0x9F) != 2) || (header & 0x60) == 0) {
+    /* TODO: what? */
+    av_log(h->s.avctx, AV_LOG_ERROR, "unsupported slice header (%02X)\n", header);
+    return -1;
+  } else {
+    int length = (header >> 5) & 3;
 
-        h->b_stride = 4*s->mb_width;
+    h->next_slice_index = get_bits_count(&s->gb) + 8*show_bits (&s->gb, 8*length) + 8*length;
 
-        alloc_tables(h);
+    if (h->next_slice_index > s->gb.size_in_bits){
+      av_log(h->s.avctx, AV_LOG_ERROR, "slice after bitstream end\n");
+      return -1;
+    }
 
-        /* prowl for the "SEQH" marker in the extradata */
-        extradata = (unsigned char *)avctx->extradata;
-        for (m = 0; m < avctx->extradata_size; m++) {
-            if (!memcmp(extradata, "SEQH", 4))
-                break;
-            extradata++;
-        }
+    s->gb.size_in_bits = h->next_slice_index - 8*(length - 1);
+    skip_bits(&s->gb, 8);
 
-        /* if a match was found, parse the extra data */
-        if (extradata && !memcmp(extradata, "SEQH", 4)) {
+    if (h->svq3_watermark_key) {
+        uint32_t header = AV_RL32(&s->gb.buffer[(get_bits_count(&s->gb)>>3)+1]);
+        AV_WL32(&s->gb.buffer[(get_bits_count(&s->gb)>>3)+1], header ^ h->svq3_watermark_key);
+    }
+    if (length > 0) {
+      memcpy ((uint8_t *) &s->gb.buffer[get_bits_count(&s->gb) >> 3],
+             &s->gb.buffer[s->gb.size_in_bits >> 3], (length - 1));
+    }
+  }
 
-            GetBitContext gb;
+  if ((i = svq3_get_ue_golomb (&s->gb)) == INVALID_VLC || i >= 3){
+    av_log(h->s.avctx, AV_LOG_ERROR, "illegal slice type %d \n", i);
+    return -1;
+  }
 
-            size = AV_RB32(&extradata[4]);
-            init_get_bits(&gb, extradata + 8, size*8);
+  h->slice_type = golomb_to_pict_type[i];
 
-            /* 'frame size code' and optional 'width, height' */
-            if (get_bits(&gb, 3) == 7) {
-                skip_bits(&gb, 12);
-                skip_bits(&gb, 12);
-            }
+  if ((header & 0x9F) == 2) {
+    i = (s->mb_num < 64) ? 6 : (1 + av_log2 (s->mb_num - 1));
+    s->mb_skip_run = get_bits (&s->gb, i) - (s->mb_x + (s->mb_y * s->mb_width));
+  } else {
+    skip_bits1 (&s->gb);
+    s->mb_skip_run = 0;
+  }
 
-            h->halfpel_flag  = get_bits1(&gb);
-            h->thirdpel_flag = get_bits1(&gb);
+  h->slice_num = get_bits (&s->gb, 8);
+  s->qscale = get_bits (&s->gb, 5);
+  s->adaptive_quant = get_bits1 (&s->gb);
 
-            /* unknown fields */
-            skip_bits1(&gb);
-            skip_bits1(&gb);
-            skip_bits1(&gb);
-            skip_bits1(&gb);
+  /* unknown fields */
+  skip_bits1 (&s->gb);
 
-            s->low_delay = get_bits1(&gb);
+  if (h->unknown_svq3_flag) {
+    skip_bits1 (&s->gb);
+  }
 
-            /* unknown field */
-            skip_bits1(&gb);
+  skip_bits1 (&s->gb);
+  skip_bits (&s->gb, 2);
 
-            while (get_bits1(&gb)) {
-                skip_bits(&gb, 8);
-            }
+  while (get_bits1 (&s->gb)) {
+    skip_bits (&s->gb, 8);
+  }
 
-            h->unknown_svq3_flag = get_bits1(&gb);
-            avctx->has_b_frames = !s->low_delay;
-            if (h->unknown_svq3_flag) {
-#ifdef CONFIG_ZLIB
-                unsigned watermark_width  = svq3_get_ue_golomb(&gb);
-                unsigned watermark_height = svq3_get_ue_golomb(&gb);
-                int u1 = svq3_get_ue_golomb(&gb);
-                int u2 = get_bits(&gb, 8);
-                int u3 = get_bits(&gb, 2);
-                int u4 = svq3_get_ue_golomb(&gb);
-                unsigned buf_len = watermark_width*watermark_height*4;
-                int offset = (get_bits_count(&gb)+7)>>3;
-                uint8_t *buf;
-
-                if ((uint64_t)watermark_width*4 > UINT_MAX/watermark_height)
-                    return -1;
-
-                buf = av_malloc(buf_len);
-                av_log(avctx, AV_LOG_DEBUG, "watermark size: %dx%d\n", watermark_width, watermark_height);
-                av_log(avctx, AV_LOG_DEBUG, "u1: %x u2: %x u3: %x compressed data size: %d offset: %d\n", u1, u2, u3, u4, offset);
-                if (uncompress(buf, (uLong*)&buf_len, extradata + 8 + offset, size - offset) != Z_OK) {
-                    av_log(avctx, AV_LOG_ERROR, "could not uncompress watermark logo\n");
-                    av_free(buf);
-                    return -1;
-                }
-                h->svq3_watermark_key = ff_svq1_packet_checksum(buf, buf_len, 0);
-                h->svq3_watermark_key = h->svq3_watermark_key << 16 | h->svq3_watermark_key;
-                av_log(avctx, AV_LOG_DEBUG, "watermark key %#x\n", h->svq3_watermark_key);
-                av_free(buf);
-#else
-                av_log(avctx, AV_LOG_ERROR, "this svq3 file contains watermark which need zlib support compiled in\n");
-                return -1;
-#endif
-            }
-        }
+  /* reset intra predictors and invalidate motion vector references */
+  if (s->mb_x > 0) {
+    memset (h->intra4x4_pred_mode[mb_xy - 1], -1, 4*sizeof(int8_t));
+    memset (h->intra4x4_pred_mode[mb_xy - s->mb_x], -1, 8*sizeof(int8_t)*s->mb_x);
+  }
+  if (s->mb_y > 0) {
+    memset (h->intra4x4_pred_mode[mb_xy - s->mb_stride], -1, 8*sizeof(int8_t)*(s->mb_width - s->mb_x));
+
+    if (s->mb_x > 0) {
+      h->intra4x4_pred_mode[mb_xy - s->mb_stride - 1][3] = -1;
     }
+  }
 
-    return 0;
+  return 0;
 }
 
-static int svq3_decode_frame(AVCodecContext *avctx,
-                             void *data, int *data_size,
-                             const uint8_t *buf, int buf_size)
-{
-    MpegEncContext *const s = avctx->priv_data;
-    H264Context *const h = avctx->priv_data;
-    int m, mb_type;
-
-    /* special case for last picture */
-    if (buf_size == 0) {
-        if (s->next_picture_ptr && !s->low_delay) {
-            *(AVFrame *) data = *(AVFrame *) &s->next_picture;
-            s->next_picture_ptr = NULL;
-            *data_size = sizeof(AVFrame);
-        }
-        return 0;
+static int svq3_decode_frame (AVCodecContext *avctx,
+                              void *data, int *data_size,
+                              const uint8_t *buf, int buf_size) {
+  MpegEncContext *const s = avctx->priv_data;
+  H264Context *const h = avctx->priv_data;
+  int m, mb_type;
+  unsigned char *extradata;
+  unsigned int size;
+
+  s->flags = avctx->flags;
+  s->flags2 = avctx->flags2;
+  s->unrestricted_mv = 1;
+
+  if (!s->context_initialized) {
+    s->width = avctx->width;
+    s->height = avctx->height;
+    h->halfpel_flag = 1;
+    h->thirdpel_flag = 1;
+    h->unknown_svq3_flag = 0;
+    h->chroma_qp[0] = h->chroma_qp[1] = 4;
+
+    if (MPV_common_init (s) < 0)
+      return -1;
+
+    h->b_stride = 4*s->mb_width;
+
+    alloc_tables (h);
+
+    /* prowl for the "SEQH" marker in the extradata */
+    extradata = (unsigned char *)avctx->extradata;
+    for (m = 0; m < avctx->extradata_size; m++) {
+      if (!memcmp (extradata, "SEQH", 4))
+        break;
+      extradata++;
     }
 
-    init_get_bits (&s->gb, buf, 8*buf_size);
+    /* if a match was found, parse the extra data */
+    if (extradata && !memcmp (extradata, "SEQH", 4)) {
 
-    s->mb_x = s->mb_y = h->mb_xy = 0;
+      GetBitContext gb;
 
-    if (svq3_decode_slice_header(h))
-        return -1;
+      size = AV_RB32(&extradata[4]);
+      init_get_bits (&gb, extradata + 8, size*8);
 
-    s->pict_type = h->slice_type;
-    s->picture_number = h->slice_num;
+      /* 'frame size code' and optional 'width, height' */
+      if (get_bits (&gb, 3) == 7) {
+        skip_bits (&gb, 12);
+        skip_bits (&gb, 12);
+      }
 
-    if (avctx->debug&FF_DEBUG_PICT_INFO){
-        av_log(h->s.avctx, AV_LOG_DEBUG, "%c hpel:%d, tpel:%d aqp:%d qp:%d, slice_num:%02X\n",
-               av_get_pict_type_char(s->pict_type), h->halfpel_flag, h->thirdpel_flag,
-               s->adaptive_quant, s->qscale, h->slice_num);
-    }
+      h->halfpel_flag = get_bits1 (&gb);
+      h->thirdpel_flag = get_bits1 (&gb);
 
-    /* for hurry_up == 5 */
-    s->current_picture.pict_type = s->pict_type;
-    s->current_picture.key_frame = (s->pict_type == FF_I_TYPE);
-
-    /* Skip B-frames if we do not have reference frames. */
-    if (s->last_picture_ptr == NULL && s->pict_type == FF_B_TYPE)
-        return 0;
-    /* Skip B-frames if we are in a hurry. */
-    if (avctx->hurry_up && s->pict_type == FF_B_TYPE)
-        return 0;
-    /* Skip everything if we are in a hurry >= 5. */
-    if (avctx->hurry_up >= 5)
-        return 0;
-    if (  (avctx->skip_frame >= AVDISCARD_NONREF && s->pict_type == FF_B_TYPE)
-        ||(avctx->skip_frame >= AVDISCARD_NONKEY && s->pict_type != FF_I_TYPE)
-        || avctx->skip_frame >= AVDISCARD_ALL)
-        return 0;
-
-    if (s->next_p_frame_damaged) {
-        if (s->pict_type == FF_B_TYPE)
-            return 0;
-        else
-            s->next_p_frame_damaged = 0;
-    }
+      /* unknown fields */
+      skip_bits1 (&gb);
+      skip_bits1 (&gb);
+      skip_bits1 (&gb);
+      skip_bits1 (&gb);
 
-    if (frame_start(h) < 0)
-        return -1;
+      s->low_delay = get_bits1 (&gb);
 
-    if (s->pict_type == FF_B_TYPE) {
-        h->frame_num_offset = (h->slice_num - h->prev_frame_num);
+      /* unknown field */
+      skip_bits1 (&gb);
 
-        if (h->frame_num_offset < 0) {
-            h->frame_num_offset += 256;
-        }
-        if (h->frame_num_offset == 0 || h->frame_num_offset >= h->prev_frame_num_offset) {
-            av_log(h->s.avctx, AV_LOG_ERROR, "error in B-frame picture id\n");
-            return -1;
-        }
-    } else {
-        h->prev_frame_num = h->frame_num;
-        h->frame_num = h->slice_num;
-        h->prev_frame_num_offset = (h->frame_num - h->prev_frame_num);
+      while (get_bits1 (&gb)) {
+        skip_bits (&gb, 8);
+      }
 
-        if (h->prev_frame_num_offset < 0) {
-            h->prev_frame_num_offset += 256;
-        }
+      h->unknown_svq3_flag = get_bits1 (&gb);
+      avctx->has_b_frames = !s->low_delay;
+      if (h->unknown_svq3_flag) {
+#ifdef CONFIG_ZLIB
+          unsigned watermark_width  = svq3_get_ue_golomb(&gb);
+          unsigned watermark_height = svq3_get_ue_golomb(&gb);
+          int u1 = svq3_get_ue_golomb(&gb);
+          int u2 = get_bits(&gb, 8);
+          int u3 = get_bits(&gb, 2);
+          int u4 = svq3_get_ue_golomb(&gb);
+          unsigned buf_len = watermark_width*watermark_height*4;
+          int offset = (get_bits_count(&gb)+7)>>3;
+          uint8_t *buf;
+
+          if ((uint64_t)watermark_width*4 > UINT_MAX/watermark_height)
+              return -1;
+
+          buf = av_malloc(buf_len);
+          av_log(avctx, AV_LOG_DEBUG, "watermark size: %dx%d\n", watermark_width, watermark_height);
+          av_log(avctx, AV_LOG_DEBUG, "u1: %x u2: %x u3: %x compressed data size: %d offset: %d\n", u1, u2, u3, u4, offset);
+          if (uncompress(buf, (uLong*)&buf_len, extradata + 8 + offset, size - offset) != Z_OK) {
+              av_log(avctx, AV_LOG_ERROR, "could not uncompress watermark logo\n");
+              av_free(buf);
+              return -1;
+          }
+          h->svq3_watermark_key = ff_svq1_packet_checksum(buf, buf_len, 0);
+          h->svq3_watermark_key = h->svq3_watermark_key << 16 | h->svq3_watermark_key;
+          av_log(avctx, AV_LOG_DEBUG, "watermark key %#x\n", h->svq3_watermark_key);
+          av_free(buf);
+#else
+          av_log(avctx, AV_LOG_ERROR, "this svq3 file contains watermark which need zlib support compiled in\n");
+          return -1;
+#endif
+      }
     }
+  }
+
+  /* special case for last picture */
+  if (buf_size == 0) {
+    if (s->next_picture_ptr && !s->low_delay) {
+      *(AVFrame *) data = *(AVFrame *) &s->next_picture;
+      s->next_picture_ptr= NULL;
+      *data_size = sizeof(AVFrame);
+    }
+    return 0;
+  }
+
+  init_get_bits (&s->gb, buf, 8*buf_size);
+
+  s->mb_x = s->mb_y = h->mb_xy = 0;
+
+  if (svq3_decode_slice_header (h))
+    return -1;
+
+  s->pict_type = h->slice_type;
+  s->picture_number = h->slice_num;
+
+  if(avctx->debug&FF_DEBUG_PICT_INFO){
+      av_log(h->s.avctx, AV_LOG_DEBUG, "%c hpel:%d, tpel:%d aqp:%d qp:%d, slice_num:%02X\n",
+      av_get_pict_type_char(s->pict_type), h->halfpel_flag, h->thirdpel_flag,
+      s->adaptive_quant, s->qscale, h->slice_num
+      );
+  }
+
+  /* for hurry_up==5 */
+  s->current_picture.pict_type = s->pict_type;
+  s->current_picture.key_frame = (s->pict_type == FF_I_TYPE);
+
+  /* Skip B-frames if we do not have reference frames. */
+  if (s->last_picture_ptr == NULL && s->pict_type == FF_B_TYPE) return 0;
+  /* Skip B-frames if we are in a hurry. */
+  if (avctx->hurry_up && s->pict_type == FF_B_TYPE) return 0;
+  /* Skip everything if we are in a hurry >= 5. */
+  if (avctx->hurry_up >= 5) return 0;
+  if(  (avctx->skip_frame >= AVDISCARD_NONREF && s->pict_type==FF_B_TYPE)
+     ||(avctx->skip_frame >= AVDISCARD_NONKEY && s->pict_type!=FF_I_TYPE)
+     || avctx->skip_frame >= AVDISCARD_ALL)
+      return 0;
+
+  if (s->next_p_frame_damaged) {
+    if (s->pict_type == FF_B_TYPE)
+      return 0;
+    else
+      s->next_p_frame_damaged = 0;
+  }
 
-    for (m = 0; m < 2; m++){
-        int i;
-        for (i = 0; i < 4; i++){
-            int j;
-            for (j = -1; j < 4; j++)
-                h->ref_cache[m][scan8[0] + 8*i + j]= 1;
-            if (i < 3)
-                h->ref_cache[m][scan8[0] + 8*i + j]= PART_NOT_AVAILABLE;
-        }
+  if (frame_start (h) < 0)
+    return -1;
+
+  if (s->pict_type == FF_B_TYPE) {
+    h->frame_num_offset = (h->slice_num - h->prev_frame_num);
+
+    if (h->frame_num_offset < 0) {
+      h->frame_num_offset += 256;
+    }
+    if (h->frame_num_offset == 0 || h->frame_num_offset >= h->prev_frame_num_offset) {
+      av_log(h->s.avctx, AV_LOG_ERROR, "error in B-frame picture id\n");
+      return -1;
     }
+  } else {
+    h->prev_frame_num = h->frame_num;
+    h->frame_num = h->slice_num;
+    h->prev_frame_num_offset = (h->frame_num - h->prev_frame_num);
 
-    for (s->mb_y = 0; s->mb_y < s->mb_height; s->mb_y++) {
-        for (s->mb_x = 0; s->mb_x < s->mb_width; s->mb_x++) {
-            h->mb_xy = s->mb_x + s->mb_y*s->mb_stride;
+    if (h->prev_frame_num_offset < 0) {
+      h->prev_frame_num_offset += 256;
+    }
+  }
 
-            if ( (get_bits_count(&s->gb) + 7) >= s->gb.size_in_bits &&
-                ((get_bits_count(&s->gb) & 7) == 0 || show_bits(&s->gb, (-get_bits_count(&s->gb) & 7)) == 0)) {
+  for(m=0; m<2; m++){
+    int i;
+    for(i=0; i<4; i++){
+      int j;
+      for(j=-1; j<4; j++)
+        h->ref_cache[m][scan8[0] + 8*i + j]= 1;
+      if(i<3)
+        h->ref_cache[m][scan8[0] + 8*i + j]= PART_NOT_AVAILABLE;
+    }
+  }
 
-                skip_bits(&s->gb, h->next_slice_index - get_bits_count(&s->gb));
-                s->gb.size_in_bits = 8*buf_size;
+  for (s->mb_y=0; s->mb_y < s->mb_height; s->mb_y++) {
+    for (s->mb_x=0; s->mb_x < s->mb_width; s->mb_x++) {
+      h->mb_xy = s->mb_x + s->mb_y*s->mb_stride;
 
-                if (svq3_decode_slice_header(h))
-                    return -1;
+      if ( (get_bits_count(&s->gb) + 7) >= s->gb.size_in_bits &&
+          ((get_bits_count(&s->gb) & 7) == 0 || show_bits (&s->gb, (-get_bits_count(&s->gb) & 7)) == 0)) {
 
-                /* TODO: support s->mb_skip_run */
-            }
+        skip_bits(&s->gb, h->next_slice_index - get_bits_count(&s->gb));
+        s->gb.size_in_bits = 8*buf_size;
 
-            mb_type = svq3_get_ue_golomb(&s->gb);
+        if (svq3_decode_slice_header (h))
+          return -1;
 
-            if (s->pict_type == FF_I_TYPE) {
-                mb_type += 8;
-            } else if (s->pict_type == FF_B_TYPE && mb_type >= 4) {
-                mb_type += 4;
-            }
-            if (mb_type > 33 || svq3_decode_mb(h, mb_type)) {
-                av_log(h->s.avctx, AV_LOG_ERROR, "error while decoding MB %d %d\n", s->mb_x, s->mb_y);
-                return -1;
-            }
+        /* TODO: support s->mb_skip_run */
+      }
 
-            if (mb_type != 0) {
-                hl_decode_mb (h);
-            }
+      mb_type = svq3_get_ue_golomb (&s->gb);
 
-            if (s->pict_type != FF_B_TYPE && !s->low_delay) {
-                s->current_picture.mb_type[s->mb_x + s->mb_y*s->mb_stride] =
-                    (s->pict_type == FF_P_TYPE && mb_type < 8) ? (mb_type - 1) : -1;
-            }
-        }
+      if (s->pict_type == FF_I_TYPE) {
+        mb_type += 8;
+      } else if (s->pict_type == FF_B_TYPE && mb_type >= 4) {
+        mb_type += 4;
+      }
+      if (mb_type > 33 || svq3_decode_mb (h, mb_type)) {
+        av_log(h->s.avctx, AV_LOG_ERROR, "error while decoding MB %d %d\n", s->mb_x, s->mb_y);
+        return -1;
+      }
+
+      if (mb_type != 0) {
+        hl_decode_mb (h);
+      }
 
-        ff_draw_horiz_band(s, 16*s->mb_y, 16);
+      if (s->pict_type != FF_B_TYPE && !s->low_delay) {
+        s->current_picture.mb_type[s->mb_x + s->mb_y*s->mb_stride] =
+                        (s->pict_type == FF_P_TYPE && mb_type < 8) ? (mb_type - 1) : -1;
+      }
     }
 
-    MPV_frame_end(s);
+    ff_draw_horiz_band(s, 16*s->mb_y, 16);
+  }
 
-    if (s->pict_type == FF_B_TYPE || s->low_delay) {
-        *(AVFrame *) data = *(AVFrame *) &s->current_picture;
-    } else {
-        *(AVFrame *) data = *(AVFrame *) &s->last_picture;
-    }
+  MPV_frame_end(s);
 
-    avctx->frame_number = s->picture_number - 1;
+  if (s->pict_type == FF_B_TYPE || s->low_delay) {
+    *(AVFrame *) data = *(AVFrame *) &s->current_picture;
+  } else {
+    *(AVFrame *) data = *(AVFrame *) &s->last_picture;
+  }
 
-    /* Do not output the last pic after seeking. */
-    if (s->last_picture_ptr || s->low_delay) {
-        *data_size = sizeof(AVFrame);
-    }
+  avctx->frame_number = s->picture_number - 1;
+
+  /* Do not output the last pic after seeking. */
+  if (s->last_picture_ptr || s->low_delay) {
+    *data_size = sizeof(AVFrame);
+  }
 
-    return buf_size;
+  return buf_size;
 }
 
 
@@ -1044,7 +1021,7 @@ AVCodec svq3_decoder = {
     CODEC_TYPE_VIDEO,
     CODEC_ID_SVQ3,
     sizeof(H264Context),
-    svq3_decode_init,
+    decode_init,
     NULL,
     decode_end,
     svq3_decode_frame,
diff --git a/libavcodec/tiff.c b/libavcodec/tiff.c
index 582076b..7e42aab 100644
--- a/libavcodec/tiff.c
+++ b/libavcodec/tiff.c
@@ -30,7 +30,6 @@
 #endif
 #include "lzw.h"
 #include "tiff.h"
-#include "faxcompr.h"
 
 
 typedef struct TiffContext {
@@ -42,10 +41,8 @@ typedef struct TiffContext {
     int le;
     int compr;
     int invert;
-    int fax_opts;
-    int predictor;
 
-    int strips, rps, sstype;
+    int strips, rps;
     int sot;
     const uint8_t* stripdata;
     const uint8_t* stripsizes;
@@ -77,7 +74,7 @@ static int tget(const uint8_t **p, int type, int le){
 static int tiff_unpack_strip(TiffContext *s, uint8_t* dst, int stride, const uint8_t *src, int size, int lines){
     int c, line, pixels, code;
     const uint8_t *ssrc = src;
-    int width = s->width * s->bpp >> 3;
+    int width = s->width * (s->bpp / 8);
 #ifdef CONFIG_ZLIB
     uint8_t *zbuf; unsigned long outlen;
 
@@ -105,29 +102,6 @@ static int tiff_unpack_strip(TiffContext *s, uint8_t* dst, int stride, const uin
             return -1;
         }
     }
-    if(s->compr == TIFF_CCITT_RLE || s->compr == TIFF_G3 || s->compr == TIFF_G4){
-        int i, ret = 0;
-        uint8_t *src2 = av_malloc(size + FF_INPUT_BUFFER_PADDING_SIZE);
-
-        if(!src2 || (unsigned)size + FF_INPUT_BUFFER_PADDING_SIZE < (unsigned)size){
-            av_log(s->avctx, AV_LOG_ERROR, "Error allocating temporary buffer\n");
-            return -1;
-        }
-        for(i = 0; i < size; i++)
-            src2[i] = ff_reverse[src[i]];
-        memset(src2+size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
-        if(s->compr == TIFF_G3 && !(s->fax_opts & 1))
-            s->compr = TIFF_CCITT_RLE;
-        switch(s->compr){
-        case TIFF_CCITT_RLE:
-        case TIFF_G3:
-        case TIFF_G4:
-            ret = ff_ccitt_unpack(s->avctx, src2, size, dst, lines, stride, s->compr);
-            break;
-        }
-        av_free(src2);
-        return ret;
-    }
     for(line = 0; line < lines; line++){
         if(src - ssrc > size){
             av_log(s->avctx, AV_LOG_ERROR, "Source data overread\n");
@@ -135,8 +109,8 @@ static int tiff_unpack_strip(TiffContext *s, uint8_t* dst, int stride, const uin
         }
         switch(s->compr){
         case TIFF_RAW:
-            memcpy(dst, src, width);
-            src += width;
+            memcpy(dst, src, s->width * (s->bpp / 8));
+            src += s->width * (s->bpp / 8);
             break;
         case TIFF_PACKBITS:
             for(pixels = 0; pixels < width;){
@@ -176,10 +150,12 @@ static int tiff_unpack_strip(TiffContext *s, uint8_t* dst, int stride, const uin
 }
 
 
-static int tiff_decode_tag(TiffContext *s, const uint8_t *start, const uint8_t *buf, const uint8_t *end_buf)
+static int tiff_decode_tag(TiffContext *s, const uint8_t *start, const uint8_t *buf, const uint8_t *end_buf, AVFrame *pic)
 {
     int tag, type, count, off, value = 0;
-    int i, j;
+    const uint8_t *src;
+    uint8_t *dst;
+    int i, j, ssize, soff, stride;
     uint32_t *pal;
     const uint8_t *rp, *gp, *bp;
 
@@ -200,11 +176,6 @@ static int tiff_decode_tag(TiffContext *s, const uint8_t *start, const uint8_t *
             value = off;
             buf = NULL;
             break;
-        case TIFF_STRING:
-            if(count <= 4){
-                buf -= 4;
-                break;
-            }
         default:
             value = -1;
             buf = start + off;
@@ -244,9 +215,6 @@ static int tiff_decode_tag(TiffContext *s, const uint8_t *start, const uint8_t *
             }
         }
         switch(s->bpp){
-        case 1:
-            s->avctx->pix_fmt = PIX_FMT_MONOBLACK;
-            break;
         case 8:
             s->avctx->pix_fmt = PIX_FMT_PAL8;
             break;
@@ -285,16 +253,10 @@ static int tiff_decode_tag(TiffContext *s, const uint8_t *start, const uint8_t *
         break;
     case TIFF_COMPR:
         s->compr = value;
-        s->predictor = 0;
         switch(s->compr){
         case TIFF_RAW:
         case TIFF_PACKBITS:
         case TIFF_LZW:
-        case TIFF_CCITT_RLE:
-            break;
-        case TIFF_G3:
-        case TIFF_G4:
-            s->fax_opts = 0;
             break;
         case TIFF_DEFLATE:
         case TIFF_ADOBE_DEFLATE:
@@ -304,6 +266,15 @@ static int tiff_decode_tag(TiffContext *s, const uint8_t *start, const uint8_t *
             av_log(s->avctx, AV_LOG_ERROR, "Deflate: ZLib not compiled in\n");
             return -1;
 #endif
+        case TIFF_G3:
+            av_log(s->avctx, AV_LOG_ERROR, "CCITT G3 compression is not supported\n");
+            return -1;
+        case TIFF_G4:
+            av_log(s->avctx, AV_LOG_ERROR, "CCITT G4 compression is not supported\n");
+            return -1;
+        case TIFF_CCITT_RLE:
+            av_log(s->avctx, AV_LOG_ERROR, "CCITT RLE compression is not supported\n");
+            return -1;
         case TIFF_JPEG:
         case TIFF_NEWJPEG:
             av_log(s->avctx, AV_LOG_ERROR, "JPEG compression is not supported\n");
@@ -314,8 +285,6 @@ static int tiff_decode_tag(TiffContext *s, const uint8_t *start, const uint8_t *
         }
         break;
     case TIFF_ROWSPERSTRIP:
-        if(type == TIFF_LONG && value == -1)
-            value = s->avctx->height;
         if(value < 1){
             av_log(s->avctx, AV_LOG_ERROR, "Incorrect value of rows per strip\n");
             return -1;
@@ -345,14 +314,49 @@ static int tiff_decode_tag(TiffContext *s, const uint8_t *start, const uint8_t *
             s->stripsizes = start + off;
         }
         s->strips = count;
-        s->sstype = type;
         if(s->stripsizes > end_buf){
             av_log(s->avctx, AV_LOG_ERROR, "Tag referencing position outside the image\n");
             return -1;
         }
+        if(!pic->data[0]){
+            av_log(s->avctx, AV_LOG_ERROR, "Picture initialization missing\n");
+            return -1;
+        }
+        /* now we have the data and may start decoding */
+        stride = pic->linesize[0];
+        dst = pic->data[0];
+        for(i = 0; i < s->height; i += s->rps){
+            if(s->stripsizes)
+                ssize = tget(&s->stripsizes, type, s->le);
+            else
+                ssize = s->stripsize;
+
+            if(s->stripdata){
+                soff = tget(&s->stripdata, s->sot, s->le);
+            }else
+                soff = s->stripoff;
+            src = start + soff;
+            if(tiff_unpack_strip(s, dst, stride, src, ssize, FFMIN(s->rps, s->height - i)) < 0)
+                break;
+            dst += s->rps * stride;
+        }
         break;
     case TIFF_PREDICTOR:
-        s->predictor = value;
+        if(!pic->data[0]){
+            av_log(s->avctx, AV_LOG_ERROR, "Picture initialization missing\n");
+            return -1;
+        }
+        if(value == 2){
+            dst = pic->data[0];
+            stride = pic->linesize[0];
+            soff = s->bpp >> 3;
+            ssize = s->width * soff;
+            for(i = 0; i < s->height; i++) {
+                for(j = soff; j < ssize; j++)
+                    dst[j] += dst[j - soff];
+                dst += stride;
+            }
+        }
         break;
     case TIFF_INVERT:
         switch(value){
@@ -394,10 +398,6 @@ static int tiff_decode_tag(TiffContext *s, const uint8_t *start, const uint8_t *
             return -1;
         }
         break;
-    case TIFF_T4OPTIONS:
-    case TIFF_T6OPTIONS:
-        s->fax_opts = value;
-        break;
     }
     return 0;
 }
@@ -411,9 +411,7 @@ static int decode_frame(AVCodecContext *avctx,
     AVFrame * const p= (AVFrame*)&s->picture;
     const uint8_t *orig_buf = buf, *end_buf = buf + buf_size;
     int id, le, off;
-    int i, j, entries;
-    int stride, soff, ssize;
-    uint8_t *dst;
+    int i, entries;
 
     //parse image header
     id = AV_RL16(buf); buf += 2;
@@ -441,49 +439,10 @@ static int decode_frame(AVCodecContext *avctx,
     buf = orig_buf + off;
     entries = tget_short(&buf, le);
     for(i = 0; i < entries; i++){
-        if(tiff_decode_tag(s, orig_buf, buf, end_buf) < 0)
+        if(tiff_decode_tag(s, orig_buf, buf, end_buf, p) < 0)
             return -1;
         buf += 12;
     }
-    if(!s->stripdata && !s->stripoff){
-        av_log(avctx, AV_LOG_ERROR, "Image data is missing\n");
-        return -1;
-    }
-    /* now we have the data and may start decoding */
-    if(!p->data[0]){
-        av_log(s->avctx, AV_LOG_ERROR, "Picture initialization missing\n");
-        return -1;
-    }
-    if(s->strips == 1 && !s->stripsize){
-        av_log(avctx, AV_LOG_WARNING, "Image data size missing\n");
-        s->stripsize = buf_size - s->stripoff;
-    }
-    stride = p->linesize[0];
-    dst = p->data[0];
-    for(i = 0; i < s->height; i += s->rps){
-        if(s->stripsizes)
-            ssize = tget(&s->stripsizes, s->sstype, s->le);
-        else
-            ssize = s->stripsize;
-
-        if(s->stripdata){
-            soff = tget(&s->stripdata, s->sot, s->le);
-        }else
-            soff = s->stripoff;
-        if(tiff_unpack_strip(s, dst, stride, orig_buf + soff, ssize, FFMIN(s->rps, s->height - i)) < 0)
-            break;
-        dst += s->rps * stride;
-    }
-    if(s->predictor == 2){
-        dst = p->data[0];
-        soff = s->bpp >> 3;
-        ssize = s->width * soff;
-        for(i = 0; i < s->height; i++) {
-            for(j = soff; j < ssize; j++)
-                dst[j] += dst[j - soff];
-            dst += stride;
-        }
-    }
 
     if(s->invert){
         uint8_t *src;
@@ -512,7 +471,6 @@ static av_cold int tiff_init(AVCodecContext *avctx){
     avctx->coded_frame= (AVFrame*)&s->picture;
     s->picture.data[0] = NULL;
     ff_lzw_decode_open(&s->lzw);
-    ff_ccitt_unpack_init();
 
     return 0;
 }
diff --git a/libavcodec/tiff.h b/libavcodec/tiff.h
index dfabe29..1c51592 100644
--- a/libavcodec/tiff.h
+++ b/libavcodec/tiff.h
@@ -46,8 +46,6 @@ enum TiffTags{
     TIFF_PLANAR = 0x11C,
     TIFF_XPOS = 0x11E,
     TIFF_YPOS = 0x11F,
-    TIFF_T4OPTIONS = 0x124,
-    TIFF_T6OPTIONS,
     TIFF_RES_UNIT = 0x128,
     TIFF_SOFTWARE_NAME = 0x131,
     TIFF_PREDICTOR = 0x13D,
diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index dcd7602..b2be4b1 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -87,14 +87,13 @@ AVCodec *av_codec_next(AVCodec *c){
     else  return first_avcodec;
 }
 
-void register_avcodec(AVCodec *codec)
+void register_avcodec(AVCodec *format)
 {
     AVCodec **p;
-    avcodec_init();
     p = &first_avcodec;
     while (*p != NULL) p = &(*p)->next;
-    *p = codec;
-    codec->next = NULL;
+    *p = format;
+    format->next = NULL;
 }
 
 void avcodec_set_dimensions(AVCodecContext *s, int width, int height){
@@ -369,11 +368,11 @@ int avcodec_default_reget_buffer(AVCodecContext *s, AVFrame *pic){
     return 0;
 }
 
-int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size){
+int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void **arg, int *ret, int count){
     int i;
 
     for(i=0; i<count; i++){
-        int r= func(c, (char*)arg + i*size);
+        int r= func(c, arg[i]);
         if(ret) ret[i]= r;
     }
     return 0;
@@ -564,7 +563,6 @@ static const AVOption options[]={
 {"simplearm", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_SIMPLEARM, INT_MIN, INT_MAX, V|E|D, "idct"},
 {"simplearmv5te", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_SIMPLEARMV5TE, INT_MIN, INT_MAX, V|E|D, "idct"},
 {"simplearmv6", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_SIMPLEARMV6, INT_MIN, INT_MAX, V|E|D, "idct"},
-{"simpleneon", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_SIMPLENEON, INT_MIN, INT_MAX, V|E|D, "idct"},
 {"h264", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_H264, INT_MIN, INT_MAX, V|E|D, "idct"},
 {"vp3", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_VP3, INT_MIN, INT_MAX, V|E|D, "idct"},
 {"ipp", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_IPP, INT_MIN, INT_MAX, V|E|D, "idct"},
@@ -745,8 +743,6 @@ static const AVOption options[]={
 {"bits_per_raw_sample", NULL, OFFSET(bits_per_raw_sample), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX},
 {"channel_layout", NULL, OFFSET(channel_layout), FF_OPT_TYPE_INT64, DEFAULT, 0, INT64_MAX, A|E|D, "channel_layout"},
 {"request_channel_layout", NULL, OFFSET(request_channel_layout), FF_OPT_TYPE_INT64, DEFAULT, 0, INT64_MAX, A|D, "request_channel_layout"},
-{"rc_max_vbv_use", NULL, OFFSET(rc_max_available_vbv_use), FF_OPT_TYPE_FLOAT, 1.0/3, 0.0, FLT_MAX, V|E},
-{"rc_min_vbv_use", NULL, OFFSET(rc_min_vbv_overflow_use),  FF_OPT_TYPE_FLOAT, 3,     0.0, FLT_MAX, V|E},
 {NULL},
 };
 
@@ -1510,7 +1506,7 @@ int av_parse_video_frame_rate(AVRational *frame_rate, const char *arg)
         return 0;
 }
 
-void ff_log_missing_feature(void *avc, const char *feature, int want_sample)
+void av_log_missing_feature(void *avc, const char *feature, int want_sample)
 {
     av_log(avc, AV_LOG_WARNING, "%s not implemented. Update your FFmpeg "
             "version to the newest one from SVN. If the problem still "
@@ -1518,7 +1514,7 @@ void ff_log_missing_feature(void *avc, const char *feature, int want_sample)
             "been implemented.", feature);
     if(want_sample)
         av_log(avc, AV_LOG_WARNING, " If you want to help, upload a sample "
-                "of this file to ftp://upload.ffmpeg.org/MPlayer/incoming/ "
-                "and contact the ffmpeg-devel mailing list.");
+                "of this file to ftp://upload.mplayerhq.hu/MPlayer/incoming/ "
+                "and contact the FFmpeg-devel mailing list.");
     av_log(avc, AV_LOG_WARNING, "\n");
 }
diff --git a/libavcodec/vc1.c b/libavcodec/vc1.c
index 62a0a97..375c20a 100644
--- a/libavcodec/vc1.c
+++ b/libavcodec/vc1.c
@@ -1059,13 +1059,13 @@ static int decode_sequence_header_adv(VC1Context *v, GetBitContext *gb)
 static int decode_entry_point(AVCodecContext *avctx, GetBitContext *gb)
 {
     VC1Context *v = avctx->priv_data;
-    int i, blink, clentry;
+    int i, blink, clentry, refdist;
 
     av_log(avctx, AV_LOG_DEBUG, "Entry point: %08X\n", show_bits_long(gb, 32));
     blink = get_bits1(gb); // broken link
     clentry = get_bits1(gb); // closed entry
     v->panscanflag = get_bits1(gb);
-    v->refdist_flag = get_bits1(gb);
+    refdist = get_bits1(gb); // refdist flag
     v->s.loop_filter = get_bits1(gb);
     v->fastuvmc = get_bits1(gb);
     v->extended_mv = get_bits1(gb);
@@ -1099,7 +1099,7 @@ static int decode_entry_point(AVCodecContext *avctx, GetBitContext *gb)
         "BrokenLink=%i, ClosedEntry=%i, PanscanFlag=%i\n"
         "RefDist=%i, Postproc=%i, FastUVMC=%i, ExtMV=%i\n"
         "DQuant=%i, VSTransform=%i, Overlap=%i, Qmode=%i\n",
-        blink, clentry, v->panscanflag, v->refdist_flag, v->s.loop_filter,
+        blink, clentry, v->panscanflag, refdist, v->s.loop_filter,
         v->fastuvmc, v->extended_mv, v->dquant, v->vstransform, v->overlap, v->quantizer_mode);
 
     return 0;
@@ -1394,8 +1394,6 @@ static int vc1_parse_frame_header_adv(VC1Context *v, GetBitContext* gb)
     else v->halfpq = 0;
     if (v->quantizer_mode == QUANT_FRAME_EXPLICIT)
         v->pquantizer = get_bits1(gb);
-    if(v->postprocflag)
-        v->postproc = get_bits1(gb);
 
     if(v->s.pict_type == FF_I_TYPE || v->s.pict_type == FF_P_TYPE) v->use_ic = 0;
 
@@ -1418,6 +1416,8 @@ static int vc1_parse_frame_header_adv(VC1Context *v, GetBitContext* gb)
         }
         break;
     case FF_P_TYPE:
+        if(v->postprocflag)
+            v->postproc = get_bits1(gb);
         if (v->extended_mv) v->mvrange = get_unary(gb, 0, 3);
         else v->mvrange = 0;
         v->k_x = v->mvrange + 9 + (v->mvrange >> 1); //k_x can be 9 10 12 13
@@ -1507,6 +1507,8 @@ static int vc1_parse_frame_header_adv(VC1Context *v, GetBitContext* gb)
         }
         break;
     case FF_B_TYPE:
+        if(v->postprocflag)
+            v->postproc = get_bits1(gb);
         if (v->extended_mv) v->mvrange = get_unary(gb, 0, 3);
         else v->mvrange = 0;
         v->k_x = v->mvrange + 9 + (v->mvrange >> 1); //k_x can be 9 10 12 13
diff --git a/libavcodec/vc1.h b/libavcodec/vc1.h
index 212842a..4cd7bb1 100644
--- a/libavcodec/vc1.h
+++ b/libavcodec/vc1.h
@@ -180,7 +180,6 @@ typedef struct VC1Context{
     int interlace;        ///< Progressive/interlaced (RPTFTM syntax element)
     int tfcntrflag;       ///< TFCNTR present
     int panscanflag;      ///< NUMPANSCANWIN, TOPLEFT{X,Y}, BOTRIGHT{X,Y} present
-    int refdist_flag;     ///< REFDIST syntax element present in II, IP, PI or PP field picture headers
     int extended_dmv;     ///< Additional extended dmv range at P/B frame-level
     int color_prim;       ///< 8bits, chroma coordinates of the color primaries
     int transfer_char;    ///< 8bits, Opto-electronic transfer characteristics
diff --git a/libavcodec/vdpau.h b/libavcodec/vdpau.h
deleted file mode 100644
index 2d03356..0000000
--- a/libavcodec/vdpau.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * The Video Decode and Presentation API for UNIX (VDPAU) is used for
- * hardware-accelerated decoding of MPEG-1/2, H.264 and VC-1.
- *
- * Copyright (C) 2008 NVIDIA
- *
- * 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
- */
-
-#ifndef AVCODEC_VDPAU_H
-#define AVCODEC_VDPAU_H
-
-/**
- * \defgroup Decoder VDPAU Decoder and Renderer
- *
- * VDPAU hardware acceleration has two modules
- * - VDPAU decoding
- * - VDPAU presentation
- *
- * The VDPAU decoding module parses all headers using FFmpeg
- * parsing mechanisms and uses VDPAU for the actual decoding.
- *
- * As per the current implementation, the actual decoding
- * and rendering (API calls) are done as part of the VDPAU
- * presentation (vo_vdpau.c) module.
- *
- * @{
- * \defgroup  VDPAU_Decoding VDPAU Decoding
- * \ingroup Decoder
- * @{
- */
-
-#include <vdpau/vdpau.h>
-#include <vdpau/vdpau_x11.h>
-
-/** \brief The videoSurface is used for rendering. */
-#define FF_VDPAU_STATE_USED_FOR_RENDER 1
-
-/**
- * \brief The videoSurface is needed for reference/prediction.
- * The codec manipulates this.
- */
-#define FF_VDPAU_STATE_USED_FOR_REFERENCE 2
-
-/**
- * \brief This structure is used as a callback between the FFmpeg
- * decoder (vd_) and presentation (vo_) module.
- * This is used for defining a video frame containing surface,
- * picture parameter, bitstream information etc which are passed
- * between the FFmpeg decoder and its clients.
- */
-struct vdpau_render_state {
-    VdpVideoSurface surface; ///< Used as rendered surface, never changed.
-
-    int state; ///< Holds FF_VDPAU_STATE_* values.
-
-    /** picture parameter information for all supported codecs */
-    union VdpPictureInfo {
-        VdpPictureInfoH264     h264;
-    } info;
-
-    /** Describe size/location of the compressed video data. */
-    int bitstream_buffers_allocated;
-    int bitstream_buffers_used;
-    VdpBitstreamBuffer *bitstream_buffers;
-};
-
-/* @}*/
-
-#endif /* AVCODEC_VDPAU_H */
diff --git a/libavcodec/vdpau_internal.h b/libavcodec/vdpau_internal.h
deleted file mode 100644
index 6af2495..0000000
--- a/libavcodec/vdpau_internal.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Video Decode and Presentation API for UNIX (VDPAU) is used for
- * HW decode acceleration for MPEG-1/2, H.264 and VC-1.
- *
- * Copyright (C) 2008 NVIDIA.
- *
- * 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
- */
-
-#ifndef AVCODEC_VDPAU_INTERNAL_H
-#define AVCODEC_VDPAU_INTERNAL_H
-
-#include <stdint.h>
-#include "h264.h"
-
-void ff_vdpau_h264_add_data_chunk(H264Context *h, const uint8_t *buf,
-                                  int buf_size);
-void ff_vdpau_h264_picture_complete(H264Context *h);
-
-#endif /* AVCODEC_VDPAU_INTERNAL_H */
diff --git a/libavcodec/vdpauvideo.c b/libavcodec/vdpauvideo.c
deleted file mode 100644
index 8b42823..0000000
--- a/libavcodec/vdpauvideo.c
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Video Decode and Presentation API for UNIX (VDPAU) is used for
- * HW decode acceleration for MPEG-1/2, H.264 and VC-1.
- *
- * Copyright (c) 2008 NVIDIA.
- *
- * 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 <limits.h>
-#include "avcodec.h"
-#include "h264.h"
-
-#undef NDEBUG
-#include <assert.h>
-
-#include "vdpau.h"
-#include "vdpau_internal.h"
-
-/**
- * \addtogroup VDPAU_Decoding
- *
- * @{
- */
-
-static void vdpau_h264_set_reference_frames(H264Context *h)
-{
-    MpegEncContext * s = &h->s;
-    struct vdpau_render_state * render, * render_ref;
-    VdpReferenceFrameH264 * rf, * rf2;
-    Picture * pic;
-    int i, list, pic_frame_idx;
-
-    render = (struct vdpau_render_state*)s->current_picture_ptr->data[0];
-    assert(render);
-
-    rf = &render->info.h264.referenceFrames[0];
-#define H264_RF_COUNT FF_ARRAY_ELEMS(render->info.h264.referenceFrames)
-
-    for (list = 0; list < 2; ++list) {
-        Picture **lp = list ? h->long_ref : h->short_ref;
-        int ls = list ? h->long_ref_count : h->short_ref_count;
-
-        for (i = 0; i < ls; ++i) {
-            pic = lp[i];
-            if (!pic || !pic->reference)
-                continue;
-            pic_frame_idx = pic->long_ref ? pic->pic_id : pic->frame_num;
-
-            render_ref = (struct vdpau_render_state*)pic->data[0];
-            assert(render_ref);
-
-            rf2 = &render->info.h264.referenceFrames[0];
-            while (rf2 != rf) {
-                if (
-                    (rf2->surface == render_ref->surface)
-                    && (rf2->is_long_term == pic->long_ref)
-                    && (rf2->frame_idx == pic_frame_idx)
-                )
-                    break;
-                ++rf2;
-            }
-            if (rf2 != rf) {
-                rf2->top_is_reference    |= (pic->reference & PICT_TOP_FIELD)    ? VDP_TRUE : VDP_FALSE;
-                rf2->bottom_is_reference |= (pic->reference & PICT_BOTTOM_FIELD) ? VDP_TRUE : VDP_FALSE;
-                continue;
-            }
-
-            if (rf >= &render->info.h264.referenceFrames[H264_RF_COUNT])
-                continue;
-
-            rf->surface             = render_ref->surface;
-            rf->is_long_term        = pic->long_ref;
-            rf->top_is_reference    = (pic->reference & PICT_TOP_FIELD)    ? VDP_TRUE : VDP_FALSE;
-            rf->bottom_is_reference = (pic->reference & PICT_BOTTOM_FIELD) ? VDP_TRUE : VDP_FALSE;
-            rf->field_order_cnt[0]  = pic->field_poc[0];
-            rf->field_order_cnt[1]  = pic->field_poc[1];
-            rf->frame_idx           = pic_frame_idx;
-
-            ++rf;
-        }
-    }
-
-    for (; rf < &render->info.h264.referenceFrames[H264_RF_COUNT]; ++rf) {
-        rf->surface             = VDP_INVALID_HANDLE;
-        rf->is_long_term        = 0;
-        rf->top_is_reference    = 0;
-        rf->bottom_is_reference = 0;
-        rf->field_order_cnt[0]  = 0;
-        rf->field_order_cnt[1]  = 0;
-        rf->frame_idx           = 0;
-    }
-}
-
-void ff_vdpau_h264_add_data_chunk(H264Context *h, const uint8_t *buf, int buf_size)
-{
-    MpegEncContext * s = &h->s;
-    struct vdpau_render_state * render;
-
-    render = (struct vdpau_render_state*)s->current_picture_ptr->data[0];
-    assert(render);
-
-    if (!render->bitstream_buffers_used)
-        vdpau_h264_set_reference_frames(h);
-
-    render->bitstream_buffers= av_fast_realloc(
-        render->bitstream_buffers,
-        &render->bitstream_buffers_allocated,
-        sizeof(*render->bitstream_buffers)*(render->bitstream_buffers_used + 1)
-    );
-
-    render->bitstream_buffers[render->bitstream_buffers_used].struct_version  = VDP_BITSTREAM_BUFFER_VERSION;
-    render->bitstream_buffers[render->bitstream_buffers_used].bitstream       = buf;
-    render->bitstream_buffers[render->bitstream_buffers_used].bitstream_bytes = buf_size;
-    render->bitstream_buffers_used++;
-}
-
-void ff_vdpau_h264_picture_complete(H264Context *h)
-{
-    MpegEncContext * s = &h->s;
-    struct vdpau_render_state * render;
-
-    render = (struct vdpau_render_state*)s->current_picture_ptr->data[0];
-    assert(render);
-
-    render->info.h264.slice_count = h->slice_num;
-    if (render->info.h264.slice_count < 1)
-        return;
-
-    for (int i = 0; i < 2; ++i) {
-        int foc = s->current_picture_ptr->field_poc[i];
-        if (foc == INT_MAX)
-            foc = 0;
-        render->info.h264.field_order_cnt[i] = foc;
-    }
-
-    render->info.h264.is_reference                           = s->current_picture_ptr->reference ? VDP_TRUE : VDP_FALSE;
-    render->info.h264.frame_num                              = h->frame_num;
-    render->info.h264.field_pic_flag                         = s->picture_structure != PICT_FRAME;
-    render->info.h264.bottom_field_flag                      = s->picture_structure == PICT_BOTTOM_FIELD;
-    render->info.h264.num_ref_frames                         = h->sps.ref_frame_count;
-    render->info.h264.mb_adaptive_frame_field_flag           = h->sps.mb_aff;
-    render->info.h264.constrained_intra_pred_flag            = h->pps.constrained_intra_pred;
-    render->info.h264.weighted_pred_flag                     = h->pps.weighted_pred;
-    render->info.h264.weighted_bipred_idc                    = h->pps.weighted_bipred_idc;
-    render->info.h264.frame_mbs_only_flag                    = h->sps.frame_mbs_only_flag;
-    render->info.h264.transform_8x8_mode_flag                = h->pps.transform_8x8_mode;
-    render->info.h264.chroma_qp_index_offset                 = h->pps.chroma_qp_index_offset[0];
-    render->info.h264.second_chroma_qp_index_offset          = h->pps.chroma_qp_index_offset[1];
-    render->info.h264.pic_init_qp_minus26                    = h->pps.init_qp - 26;
-    render->info.h264.num_ref_idx_l0_active_minus1           = h->pps.ref_count[0] - 1;
-    render->info.h264.num_ref_idx_l1_active_minus1           = h->pps.ref_count[1] - 1;
-    render->info.h264.log2_max_frame_num_minus4              = h->sps.log2_max_frame_num - 4;
-    render->info.h264.pic_order_cnt_type                     = h->sps.poc_type;
-    render->info.h264.log2_max_pic_order_cnt_lsb_minus4      = h->sps.log2_max_poc_lsb - 4;
-    render->info.h264.delta_pic_order_always_zero_flag       = h->sps.delta_pic_order_always_zero_flag;
-    render->info.h264.direct_8x8_inference_flag              = h->sps.direct_8x8_inference_flag;
-    render->info.h264.entropy_coding_mode_flag               = h->pps.cabac;
-    render->info.h264.pic_order_present_flag                 = h->pps.pic_order_present;
-    render->info.h264.deblocking_filter_control_present_flag = h->pps.deblocking_filter_parameters_present;
-    render->info.h264.redundant_pic_cnt_present_flag         = h->pps.redundant_pic_cnt_present;
-    memcpy(render->info.h264.scaling_lists_4x4, h->pps.scaling_matrix4, sizeof(render->info.h264.scaling_lists_4x4));
-    memcpy(render->info.h264.scaling_lists_8x8, h->pps.scaling_matrix8, sizeof(render->info.h264.scaling_lists_8x8));
-
-    ff_draw_horiz_band(s, 0, s->avctx->height);
-    render->bitstream_buffers_used = 0;
-}
-
-/* @}*/
diff --git a/libavcodec/vorbis.c b/libavcodec/vorbis.c
index b6243b8..f39380a 100644
--- a/libavcodec/vorbis.c
+++ b/libavcodec/vorbis.c
@@ -111,7 +111,7 @@ int ff_vorbis_len2vlc(uint8_t *bits, uint32_t *codes, uint_fast32_t num) {
     return 0;
 }
 
-void ff_vorbis_ready_floor1_list(vorbis_floor1_entry * list, int values) {
+void ff_vorbis_ready_floor1_list(floor1_entry_t * list, int values) {
     int i;
     list[0].sort = 0;
     list[1].sort = 1;
@@ -162,7 +162,7 @@ static void render_line(int x0, int y0, int x1, int y1, float * buf) {
     }
 }
 
-void ff_vorbis_floor1_render_list(vorbis_floor1_entry * list, int values, uint_fast16_t * y_list, int * flag, int multiplier, float * out, int samples) {
+void ff_vorbis_floor1_render_list(floor1_entry_t * list, int values, uint_fast16_t * y_list, int * flag, int multiplier, float * out, int samples) {
     int lx, ly, i;
     lx = 0;
     ly = y_list[0] * multiplier;
diff --git a/libavcodec/vorbis.h b/libavcodec/vorbis.h
index dc99acc..b8a8410 100644
--- a/libavcodec/vorbis.h
+++ b/libavcodec/vorbis.h
@@ -31,12 +31,12 @@ typedef struct {
     uint_fast16_t sort;
     uint_fast16_t low;
     uint_fast16_t high;
-} vorbis_floor1_entry;
+} floor1_entry_t;
 
-void ff_vorbis_ready_floor1_list(vorbis_floor1_entry * list, int values);
+void ff_vorbis_ready_floor1_list(floor1_entry_t * list, int values);
 unsigned int ff_vorbis_nth_root(unsigned int x, unsigned int n); // x^(1/n)
 int ff_vorbis_len2vlc(uint8_t *bits, uint32_t *codes, uint_fast32_t num);
-void ff_vorbis_floor1_render_list(vorbis_floor1_entry * list, int values, uint_fast16_t * y_list, int * flag, int multiplier, float * out, int samples);
+void ff_vorbis_floor1_render_list(floor1_entry_t * list, int values, uint_fast16_t * y_list, int * flag, int multiplier, float * out, int samples);
 
 #define ilog(i) av_log2(2*(i))
 
diff --git a/libavcodec/vorbis_dec.c b/libavcodec/vorbis_dec.c
index 16f6dec..6c15cb8 100644
--- a/libavcodec/vorbis_dec.c
+++ b/libavcodec/vorbis_dec.c
@@ -90,7 +90,7 @@ typedef struct {
             int_fast16_t subclass_books[16][8];
             uint_fast8_t multiplier;
             uint_fast16_t x_list_dim;
-            vorbis_floor1_entry * list;
+            floor1_entry_t * list;
         } t1;
     } data;
 } vorbis_floor;
@@ -511,7 +511,7 @@ static int vorbis_parse_setup_hdr_floors(vorbis_context *vc) {
                 floor_setup->data.t1.x_list_dim+=floor_setup->data.t1.class_dimensions[floor_setup->data.t1.partition_class[j]];
             }
 
-            floor_setup->data.t1.list=av_mallocz(floor_setup->data.t1.x_list_dim * sizeof(vorbis_floor1_entry));
+            floor_setup->data.t1.list=av_mallocz(floor_setup->data.t1.x_list_dim * sizeof(floor1_entry_t));
 
 
             rangebits=get_bits(gb, 4);
diff --git a/libavcodec/vorbis_enc.c b/libavcodec/vorbis_enc.c
index 43350de..0cb644b 100644
--- a/libavcodec/vorbis_enc.c
+++ b/libavcodec/vorbis_enc.c
@@ -48,25 +48,25 @@ typedef struct {
     int * quantlist;
     float * dimentions;
     float * pow2;
-} vorbis_enc_codebook;
+} codebook_t;
 
 typedef struct {
     int dim;
     int subclass;
     int masterbook;
     int * books;
-} vorbis_enc_floor_class;
+} floor_class_t;
 
 typedef struct {
     int partitions;
     int * partition_to_class;
     int nclasses;
-    vorbis_enc_floor_class * classes;
+    floor_class_t * classes;
     int multiplier;
     int rangebits;
     int values;
-    vorbis_floor1_entry * list;
-} vorbis_enc_floor;
+    floor1_entry_t * list;
+} floor_t;
 
 typedef struct {
     int type;
@@ -77,7 +77,7 @@ typedef struct {
     int classbook;
     int8_t (*books)[8];
     float (*maxes)[2];
-} vorbis_enc_residue;
+} residue_t;
 
 typedef struct {
     int submaps;
@@ -87,12 +87,12 @@ typedef struct {
     int coupling_steps;
     int * magnitude;
     int * angle;
-} vorbis_enc_mapping;
+} mapping_t;
 
 typedef struct {
     int blockflag;
     int mapping;
-} vorbis_enc_mode;
+} vorbis_mode_t;
 
 typedef struct {
     int channels;
@@ -108,24 +108,24 @@ typedef struct {
     float quality;
 
     int ncodebooks;
-    vorbis_enc_codebook * codebooks;
+    codebook_t * codebooks;
 
     int nfloors;
-    vorbis_enc_floor * floors;
+    floor_t * floors;
 
     int nresidues;
-    vorbis_enc_residue * residues;
+    residue_t * residues;
 
     int nmappings;
-    vorbis_enc_mapping * mappings;
+    mapping_t * mappings;
 
     int nmodes;
-    vorbis_enc_mode * modes;
+    vorbis_mode_t * modes;
 
     int64_t sample_count;
-} vorbis_enc_context;
+} venc_context_t;
 
-static inline void put_codeword(PutBitContext * pb, vorbis_enc_codebook * cb, int entry) {
+static inline void put_codeword(PutBitContext * pb, codebook_t * cb, int entry) {
     assert(entry >= 0);
     assert(entry < cb->nentries);
     assert(cb->lens[entry]);
@@ -138,7 +138,7 @@ static int cb_lookup_vals(int lookup, int dimentions, int entries) {
     return 0;
 }
 
-static void ready_codebook(vorbis_enc_codebook * cb) {
+static void ready_codebook(codebook_t * cb) {
     int i;
 
     ff_vorbis_len2vlc(cb->lens, cb->codewords, cb->nentries);
@@ -171,13 +171,13 @@ static void ready_codebook(vorbis_enc_codebook * cb) {
     }
 }
 
-static void ready_residue(vorbis_enc_residue * rc, vorbis_enc_context * venc) {
+static void ready_residue(residue_t * rc, venc_context_t * venc) {
     int i;
     assert(rc->type == 2);
     rc->maxes = av_mallocz(sizeof(float[2]) * rc->classifications);
     for (i = 0; i < rc->classifications; i++) {
         int j;
-        vorbis_enc_codebook * cb;
+        codebook_t * cb;
         for (j = 0; j < 8; j++)
             if (rc->books[i][j] != -1) break;
         if (j == 8) continue; // zero
@@ -203,10 +203,10 @@ static void ready_residue(vorbis_enc_residue * rc, vorbis_enc_context * venc) {
     }
 }
 
-static void create_vorbis_context(vorbis_enc_context * venc, AVCodecContext * avccontext) {
-    vorbis_enc_floor * fc;
-    vorbis_enc_residue * rc;
-    vorbis_enc_mapping * mc;
+static void create_vorbis_context(venc_context_t * venc, AVCodecContext * avccontext) {
+    floor_t * fc;
+    residue_t * rc;
+    mapping_t * mc;
     int i, book;
 
     venc->channels = avccontext->channels;
@@ -214,13 +214,13 @@ static void create_vorbis_context(vorbis_enc_context * venc, AVCodecContext * av
     venc->log2_blocksize[0] = venc->log2_blocksize[1] = 11;
 
     venc->ncodebooks = FF_ARRAY_ELEMS(cvectors);
-    venc->codebooks = av_malloc(sizeof(vorbis_enc_codebook) * venc->ncodebooks);
+    venc->codebooks = av_malloc(sizeof(codebook_t) * venc->ncodebooks);
 
     // codebook 0..14 - floor1 book, values 0..255
     // codebook 15 residue masterbook
     // codebook 16..29 residue
     for (book = 0; book < venc->ncodebooks; book++) {
-        vorbis_enc_codebook * cb = &venc->codebooks[book];
+        codebook_t * cb = &venc->codebooks[book];
         int vals;
         cb->ndimentions = cvectors[book].dim;
         cb->nentries = cvectors[book].real_len;
@@ -246,7 +246,7 @@ static void create_vorbis_context(vorbis_enc_context * venc, AVCodecContext * av
     }
 
     venc->nfloors = 1;
-    venc->floors = av_malloc(sizeof(vorbis_enc_floor) * venc->nfloors);
+    venc->floors = av_malloc(sizeof(floor_t) * venc->nfloors);
 
     // just 1 floor
     fc = &venc->floors[0];
@@ -259,9 +259,9 @@ static void create_vorbis_context(vorbis_enc_context * venc, AVCodecContext * av
         fc->nclasses = FFMAX(fc->nclasses, fc->partition_to_class[i]);
     }
     fc->nclasses++;
-    fc->classes = av_malloc(sizeof(vorbis_enc_floor_class) * fc->nclasses);
+    fc->classes = av_malloc(sizeof(floor_class_t) * fc->nclasses);
     for (i = 0; i < fc->nclasses; i++) {
-        vorbis_enc_floor_class * c = &fc->classes[i];
+        floor_class_t * c = &fc->classes[i];
         int j, books;
         c->dim = floor_classes[i].dim;
         c->subclass = floor_classes[i].subclass;
@@ -278,7 +278,7 @@ static void create_vorbis_context(vorbis_enc_context * venc, AVCodecContext * av
     for (i = 0; i < fc->partitions; i++)
         fc->values += fc->classes[fc->partition_to_class[i]].dim;
 
-    fc->list = av_malloc(sizeof(vorbis_floor1_entry) * fc->values);
+    fc->list = av_malloc(sizeof(floor1_entry_t) * fc->values);
     fc->list[0].x = 0;
     fc->list[1].x = 1 << fc->rangebits;
     for (i = 2; i < fc->values; i++) {
@@ -292,7 +292,7 @@ static void create_vorbis_context(vorbis_enc_context * venc, AVCodecContext * av
     ff_vorbis_ready_floor1_list(fc->list, fc->values);
 
     venc->nresidues = 1;
-    venc->residues = av_malloc(sizeof(vorbis_enc_residue) * venc->nresidues);
+    venc->residues = av_malloc(sizeof(residue_t) * venc->nresidues);
 
     // single residue
     rc = &venc->residues[0];
@@ -321,7 +321,7 @@ static void create_vorbis_context(vorbis_enc_context * venc, AVCodecContext * av
     ready_residue(rc, venc);
 
     venc->nmappings = 1;
-    venc->mappings = av_malloc(sizeof(vorbis_enc_mapping) * venc->nmappings);
+    venc->mappings = av_malloc(sizeof(mapping_t) * venc->nmappings);
 
     // single mapping
     mc = &venc->mappings[0];
@@ -344,7 +344,7 @@ static void create_vorbis_context(vorbis_enc_context * venc, AVCodecContext * av
     }
 
     venc->nmodes = 1;
-    venc->modes = av_malloc(sizeof(vorbis_enc_mode) * venc->nmodes);
+    venc->modes = av_malloc(sizeof(vorbis_mode_t) * venc->nmodes);
 
     // single mode
     venc->modes[0].blockflag = 0;
@@ -373,7 +373,7 @@ static void put_float(PutBitContext * pb, float f) {
     put_bits(pb, 32, res);
 }
 
-static void put_codebook_header(PutBitContext * pb, vorbis_enc_codebook * cb) {
+static void put_codebook_header(PutBitContext * pb, codebook_t * cb) {
     int i;
     int ordered = 0;
 
@@ -432,7 +432,7 @@ static void put_codebook_header(PutBitContext * pb, vorbis_enc_codebook * cb) {
     }
 }
 
-static void put_floor_header(PutBitContext * pb, vorbis_enc_floor * fc) {
+static void put_floor_header(PutBitContext * pb, floor_t * fc) {
     int i;
 
     put_bits(pb, 16, 1); // type, only floor1 is supported
@@ -464,7 +464,7 @@ static void put_floor_header(PutBitContext * pb, vorbis_enc_floor * fc) {
         put_bits(pb, fc->rangebits, fc->list[i].x);
 }
 
-static void put_residue_header(PutBitContext * pb, vorbis_enc_residue * rc) {
+static void put_residue_header(PutBitContext * pb, residue_t * rc) {
     int i;
 
     put_bits(pb, 16, rc->type);
@@ -495,7 +495,7 @@ static void put_residue_header(PutBitContext * pb, vorbis_enc_residue * rc) {
     }
 }
 
-static int put_main_header(vorbis_enc_context * venc, uint8_t ** out) {
+static int put_main_header(venc_context_t * venc, uint8_t ** out) {
     int i;
     PutBitContext pb;
     uint8_t buffer[50000] = {0}, * p = buffer;
@@ -564,7 +564,7 @@ static int put_main_header(vorbis_enc_context * venc, uint8_t ** out) {
     // mappings
     put_bits(&pb, 6, venc->nmappings - 1);
     for (i = 0; i < venc->nmappings; i++) {
-        vorbis_enc_mapping * mc = &venc->mappings[i];
+        mapping_t * mc = &venc->mappings[i];
         int j;
         put_bits(&pb, 16, 0); // mapping type
 
@@ -624,7 +624,7 @@ static int put_main_header(vorbis_enc_context * venc, uint8_t ** out) {
     return p - *out;
 }
 
-static float get_floor_average(vorbis_enc_floor * fc, float * coeffs, int i) {
+static float get_floor_average(floor_t * fc, float * coeffs, int i) {
     int begin = fc->list[fc->list[FFMAX(i-1, 0)].sort].x;
     int end   = fc->list[fc->list[FFMIN(i+1, fc->values - 1)].sort].x;
     int j;
@@ -635,7 +635,7 @@ static float get_floor_average(vorbis_enc_floor * fc, float * coeffs, int i) {
     return average / (end - begin);
 }
 
-static void floor_fit(vorbis_enc_context * venc, vorbis_enc_floor * fc, float * coeffs, uint_fast16_t * posts, int samples) {
+static void floor_fit(venc_context_t * venc, floor_t * fc, float * coeffs, uint_fast16_t * posts, int samples) {
     int range = 255 / fc->multiplier + 1;
     int i;
     float tot_average = 0.;
@@ -663,7 +663,7 @@ static int render_point(int x0, int y0, int x1, int y1, int x) {
     return y0 +  (x - x0) * (y1 - y0) / (x1 - x0);
 }
 
-static void floor_encode(vorbis_enc_context * venc, vorbis_enc_floor * fc, PutBitContext * pb, uint_fast16_t * posts, float * floor, int samples) {
+static void floor_encode(venc_context_t * venc, floor_t * fc, PutBitContext * pb, uint_fast16_t * posts, float * floor, int samples) {
     int range = 255 / fc->multiplier + 1;
     int coded[fc->values]; // first 2 values are unused
     int i, counter;
@@ -704,10 +704,10 @@ static void floor_encode(vorbis_enc_context * venc, vorbis_enc_floor * fc, PutBi
 
     counter = 2;
     for (i = 0; i < fc->partitions; i++) {
-        vorbis_enc_floor_class * c = &fc->classes[fc->partition_to_class[i]];
+        floor_class_t * c = &fc->classes[fc->partition_to_class[i]];
         int k, cval = 0, csub = 1<<c->subclass;
         if (c->subclass) {
-            vorbis_enc_codebook * book = &venc->codebooks[c->masterbook];
+            codebook_t * book = &venc->codebooks[c->masterbook];
             int cshift = 0;
             for (k = 0; k < c->dim; k++) {
                 int l;
@@ -737,7 +737,7 @@ static void floor_encode(vorbis_enc_context * venc, vorbis_enc_floor * fc, PutBi
     ff_vorbis_floor1_render_list(fc->list, fc->values, posts, coded, fc->multiplier, floor, samples);
 }
 
-static float * put_vector(vorbis_enc_codebook * book, PutBitContext * pb, float * num) {
+static float * put_vector(codebook_t * book, PutBitContext * pb, float * num) {
     int i, entry = -1;
     float distance = FLT_MAX;
     assert(book->dimentions);
@@ -756,7 +756,7 @@ static float * put_vector(vorbis_enc_codebook * book, PutBitContext * pb, float
     return &book->dimentions[entry * book->ndimentions];
 }
 
-static void residue_encode(vorbis_enc_context * venc, vorbis_enc_residue * rc, PutBitContext * pb, float * coeffs, int samples, int real_ch) {
+static void residue_encode(venc_context_t * venc, residue_t * rc, PutBitContext * pb, float * coeffs, int samples, int real_ch) {
     int pass, i, j, p, k;
     int psize = rc->partition_size;
     int partitions = (rc->end - rc->begin) / psize;
@@ -785,7 +785,7 @@ static void residue_encode(vorbis_enc_context * venc, vorbis_enc_residue * rc, P
         while (p < partitions) {
             if (pass == 0)
                 for (j = 0; j < channels; j++) {
-                    vorbis_enc_codebook * book = &venc->codebooks[rc->classbook];
+                    codebook_t * book = &venc->codebooks[rc->classbook];
                     int entry = 0;
                     for (i = 0; i < classwords; i++) {
                         entry *= rc->classifications;
@@ -796,7 +796,7 @@ static void residue_encode(vorbis_enc_context * venc, vorbis_enc_residue * rc, P
             for (i = 0; i < classwords && p < partitions; i++, p++) {
                 for (j = 0; j < channels; j++) {
                     int nbook = rc->books[classes[j][p]][pass];
-                    vorbis_enc_codebook * book = &venc->codebooks[nbook];
+                    codebook_t * book = &venc->codebooks[nbook];
                     float * buf = coeffs + samples*j + rc->begin + p*psize;
                     if (nbook == -1) continue;
 
@@ -841,7 +841,7 @@ static void residue_encode(vorbis_enc_context * venc, vorbis_enc_residue * rc, P
     }
 }
 
-static int apply_window_and_mdct(vorbis_enc_context * venc, signed short * audio, int samples) {
+static int apply_window_and_mdct(venc_context_t * venc, signed short * audio, int samples) {
     int i, j, channel;
     const float * win = venc->win[0];
     int window_len = 1 << (venc->log2_blocksize[0] - 1);
@@ -893,7 +893,7 @@ static int apply_window_and_mdct(vorbis_enc_context * venc, signed short * audio
 
 static av_cold int vorbis_encode_init(AVCodecContext * avccontext)
 {
-    vorbis_enc_context * venc = avccontext->priv_data;
+    venc_context_t * venc = avccontext->priv_data;
 
     if (avccontext->channels != 2) {
         av_log(avccontext, AV_LOG_ERROR, "Current FFmpeg Vorbis encoder only supports 2 channels.\n");
@@ -920,11 +920,11 @@ static av_cold int vorbis_encode_init(AVCodecContext * avccontext)
 
 static int vorbis_encode_frame(AVCodecContext * avccontext, unsigned char * packets, int buf_size, void *data)
 {
-    vorbis_enc_context * venc = avccontext->priv_data;
+    venc_context_t * venc = avccontext->priv_data;
     signed short * audio = data;
     int samples = data ? avccontext->frame_size : 0;
-    vorbis_enc_mode * mode;
-    vorbis_enc_mapping * mapping;
+    vorbis_mode_t * mode;
+    mapping_t * mapping;
     PutBitContext pb;
     int i;
 
@@ -945,7 +945,7 @@ static int vorbis_encode_frame(AVCodecContext * avccontext, unsigned char * pack
     }
 
     for (i = 0; i < venc->channels; i++) {
-        vorbis_enc_floor * fc = &venc->floors[mapping->floor[mapping->mux[i]]];
+        floor_t * fc = &venc->floors[mapping->floor[mapping->mux[i]]];
         uint_fast16_t posts[fc->values];
         floor_fit(venc, fc, &venc->coeffs[i * samples], posts, samples);
         floor_encode(venc, fc, &pb, posts, &venc->floor[i * samples], samples);
@@ -978,7 +978,7 @@ static int vorbis_encode_frame(AVCodecContext * avccontext, unsigned char * pack
 
 static av_cold int vorbis_encode_close(AVCodecContext * avccontext)
 {
-    vorbis_enc_context * venc = avccontext->priv_data;
+    venc_context_t * venc = avccontext->priv_data;
     int i;
 
     if (venc->codebooks)
@@ -1040,7 +1040,7 @@ AVCodec vorbis_encoder = {
     "vorbis",
     CODEC_TYPE_AUDIO,
     CODEC_ID_VORBIS,
-    sizeof(vorbis_enc_context),
+    sizeof(venc_context_t),
     vorbis_encode_init,
     vorbis_encode_frame,
     vorbis_encode_close,
diff --git a/libavcodec/vp3.c b/libavcodec/vp3.c
index 2737025..a5b97ad 100644
--- a/libavcodec/vp3.c
+++ b/libavcodec/vp3.c
@@ -1402,14 +1402,14 @@ static void render_slice(Vp3DecodeContext *s, int slice)
                     /* dequantize the DCT coefficients */
                     if(s->avctx->idct_algo==FF_IDCT_VP3){
                         Coeff *coeff= s->coeffs + i;
-                        s->dsp.clear_block(block);
+                        memset(block, 0, sizeof(block));
                         while(coeff->next){
                             block[coeff->index]= coeff->coeff * dequantizer[coeff->index];
                             coeff= coeff->next;
                         }
                     }else{
                         Coeff *coeff= s->coeffs + i;
-                        s->dsp.clear_block(block);
+                        memset(block, 0, sizeof(block));
                         while(coeff->next){
                             block[coeff->index]= (coeff->coeff * dequantizer[coeff->index] + 2)>>2;
                             coeff= coeff->next;
diff --git a/libavcodec/vp5.c b/libavcodec/vp5.c
index e47db0d..4f9d42f 100644
--- a/libavcodec/vp5.c
+++ b/libavcodec/vp5.c
@@ -33,10 +33,10 @@
 #include "vp5data.h"
 
 
-static int vp5_parse_header(VP56Context *s, const uint8_t *buf, int buf_size,
+static int vp5_parse_header(vp56_context_t *s, const uint8_t *buf, int buf_size,
                             int *golden_frame)
 {
-    VP56RangeCoder *c = &s->c;
+    vp56_range_coder_t *c = &s->c;
     int rows, cols;
 
     vp56_init_range_decoder(&s->c, buf, buf_size);
@@ -58,8 +58,7 @@ static int vp5_parse_header(VP56Context *s, const uint8_t *buf, int buf_size,
         vp56_rac_gets(c, 8);  /* number of displayed macroblock rows */
         vp56_rac_gets(c, 8);  /* number of displayed macroblock cols */
         vp56_rac_gets(c, 2);
-        if (!s->macroblocks || /* first frame */
-            16*cols != s->avctx->coded_width ||
+        if (16*cols != s->avctx->coded_width ||
             16*rows != s->avctx->coded_height) {
             avcodec_set_dimensions(s->avctx, 16*cols, 16*rows);
             return 2;
@@ -85,10 +84,10 @@ static int vp5_adjust(int v, int t)
     return v;
 }
 
-static void vp5_parse_vector_adjustment(VP56Context *s, VP56mv *vect)
+static void vp5_parse_vector_adjustment(vp56_context_t *s, vp56_mv_t *vect)
 {
-    VP56RangeCoder *c = &s->c;
-    VP56Model *model = s->modelp;
+    vp56_range_coder_t *c = &s->c;
+    vp56_model_t *model = s->modelp;
     int comp, di;
 
     for (comp=0; comp<2; comp++) {
@@ -109,10 +108,10 @@ static void vp5_parse_vector_adjustment(VP56Context *s, VP56mv *vect)
     }
 }
 
-static void vp5_parse_vector_models(VP56Context *s)
+static void vp5_parse_vector_models(vp56_context_t *s)
 {
-    VP56RangeCoder *c = &s->c;
-    VP56Model *model = s->modelp;
+    vp56_range_coder_t *c = &s->c;
+    vp56_model_t *model = s->modelp;
     int comp, node;
 
     for (comp=0; comp<2; comp++) {
@@ -132,10 +131,10 @@ static void vp5_parse_vector_models(VP56Context *s)
                 model->vector_pdv[comp][node] = vp56_rac_gets_nn(c, 7);
 }
 
-static void vp5_parse_coeff_models(VP56Context *s)
+static void vp5_parse_coeff_models(vp56_context_t *s)
 {
-    VP56RangeCoder *c = &s->c;
-    VP56Model *model = s->modelp;
+    vp56_range_coder_t *c = &s->c;
+    vp56_model_t *model = s->modelp;
     uint8_t def_prob[11];
     int node, cg, ctx;
     int ct;    /* code type */
@@ -178,10 +177,10 @@ static void vp5_parse_coeff_models(VP56Context *s)
                         model->coeff_acct[pt][ct][cg][ctx][node] = av_clip(((model->coeff_ract[pt][ct][cg][node] * vp5_ract_lc[ct][cg][node][ctx][0] + 128) >> 8) + vp5_ract_lc[ct][cg][node][ctx][1], 1, 254);
 }
 
-static void vp5_parse_coeff(VP56Context *s)
+static void vp5_parse_coeff(vp56_context_t *s)
 {
-    VP56RangeCoder *c = &s->c;
-    VP56Model *model = s->modelp;
+    vp56_range_coder_t *c = &s->c;
+    vp56_model_t *model = s->modelp;
     uint8_t *permute = s->scantable.permutated;
     uint8_t *model1, *model2;
     int coeff, sign, coeff_idx;
@@ -251,9 +250,9 @@ static void vp5_parse_coeff(VP56Context *s)
     }
 }
 
-static void vp5_default_models_init(VP56Context *s)
+static void vp5_default_models_init(vp56_context_t *s)
 {
-    VP56Model *model = s->modelp;
+    vp56_model_t *model = s->modelp;
     int i;
 
     for (i=0; i<2; i++) {
@@ -268,7 +267,7 @@ static void vp5_default_models_init(VP56Context *s)
 
 static av_cold int vp5_decode_init(AVCodecContext *avctx)
 {
-    VP56Context *s = avctx->priv_data;
+    vp56_context_t *s = avctx->priv_data;
 
     vp56_init(avctx, 1, 0);
     s->vp56_coord_div = vp5_coord_div;
@@ -287,7 +286,7 @@ AVCodec vp5_decoder = {
     "vp5",
     CODEC_TYPE_VIDEO,
     CODEC_ID_VP5,
-    sizeof(VP56Context),
+    sizeof(vp56_context_t),
     vp5_decode_init,
     NULL,
     vp56_free,
diff --git a/libavcodec/vp56.c b/libavcodec/vp56.c
index 79667cf..c9daaf7 100644
--- a/libavcodec/vp56.c
+++ b/libavcodec/vp56.c
@@ -28,20 +28,20 @@
 #include "vp56data.h"
 
 
-void vp56_init_dequant(VP56Context *s, int quantizer)
+void vp56_init_dequant(vp56_context_t *s, int quantizer)
 {
     s->quantizer = quantizer;
     s->dequant_dc = vp56_dc_dequant[quantizer] << 2;
     s->dequant_ac = vp56_ac_dequant[quantizer] << 2;
 }
 
-static int vp56_get_vectors_predictors(VP56Context *s, int row, int col,
-                                       VP56Frame ref_frame)
+static int vp56_get_vectors_predictors(vp56_context_t *s, int row, int col,
+                                       vp56_frame_t ref_frame)
 {
     int nb_pred = 0;
-    VP56mv vect[2] = {{0,0}, {0,0}};
+    vp56_mv_t vect[2] = {{0,0}, {0,0}};
     int pos, offset;
-    VP56mv mvp;
+    vp56_mv_t mvp;
 
     for (pos=0; pos<12; pos++) {
         mvp.x = col + vp56_candidate_predictor_pos[pos][0];
@@ -73,10 +73,10 @@ static int vp56_get_vectors_predictors(VP56Context *s, int row, int col,
     return nb_pred+1;
 }
 
-static void vp56_parse_mb_type_models(VP56Context *s)
+static void vp56_parse_mb_type_models(vp56_context_t *s)
 {
-    VP56RangeCoder *c = &s->c;
-    VP56Model *model = s->modelp;
+    vp56_range_coder_t *c = &s->c;
+    vp56_model_t *model = s->modelp;
     int i, ctx, type;
 
     for (ctx=0; ctx<3; ctx++) {
@@ -144,11 +144,11 @@ static void vp56_parse_mb_type_models(VP56Context *s)
     }
 }
 
-static VP56mb vp56_parse_mb_type(VP56Context *s,
-                                 VP56mb prev_type, int ctx)
+static vp56_mb_t vp56_parse_mb_type(vp56_context_t *s,
+                                    vp56_mb_t prev_type, int ctx)
 {
     uint8_t *mb_type_model = s->modelp->mb_type[ctx][prev_type];
-    VP56RangeCoder *c = &s->c;
+    vp56_range_coder_t *c = &s->c;
 
     if (vp56_rac_get_prob(c, mb_type_model[0]))
         return prev_type;
@@ -156,9 +156,9 @@ static VP56mb vp56_parse_mb_type(VP56Context *s,
         return vp56_rac_get_tree(c, vp56_pmbt_tree, mb_type_model);
 }
 
-static void vp56_decode_4mv(VP56Context *s, int row, int col)
+static void vp56_decode_4mv(vp56_context_t *s, int row, int col)
 {
-    VP56mv mv = {0,0};
+    vp56_mv_t mv = {0,0};
     int type[4];
     int b;
 
@@ -173,7 +173,7 @@ static void vp56_decode_4mv(VP56Context *s, int row, int col)
     for (b=0; b<4; b++) {
         switch (type[b]) {
             case VP56_MB_INTER_NOVEC_PF:
-                s->mv[b] = (VP56mv) {0,0};
+                s->mv[b] = (vp56_mv_t) {0,0};
                 break;
             case VP56_MB_INTER_DELTA_PF:
                 s->parse_vector_adjustment(s, &s->mv[b]);
@@ -197,13 +197,13 @@ static void vp56_decode_4mv(VP56Context *s, int row, int col)
         s->mv[4].x = s->mv[5].x = RSHIFT(mv.x,2);
         s->mv[4].y = s->mv[5].y = RSHIFT(mv.y,2);
     } else {
-        s->mv[4] = s->mv[5] = (VP56mv) {mv.x/4, mv.y/4};
+        s->mv[4] = s->mv[5] = (vp56_mv_t) {mv.x/4, mv.y/4};
     }
 }
 
-static VP56mb vp56_decode_mv(VP56Context *s, int row, int col)
+static vp56_mb_t vp56_decode_mv(vp56_context_t *s, int row, int col)
 {
-    VP56mv *mv, vect = {0,0};
+    vp56_mv_t *mv, vect = {0,0};
     int ctx, b;
 
     ctx = vp56_get_vectors_predictors(s, row, col, VP56_FRAME_PREVIOUS);
@@ -258,14 +258,14 @@ static VP56mb vp56_decode_mv(VP56Context *s, int row, int col)
     return s->mb_type;
 }
 
-static void vp56_add_predictors_dc(VP56Context *s, VP56Frame ref_frame)
+static void vp56_add_predictors_dc(vp56_context_t *s, vp56_frame_t ref_frame)
 {
     int idx = s->scantable.permutated[0];
     int b;
 
     for (b=0; b<6; b++) {
-        VP56RefDc *ab = &s->above_blocks[s->above_block_idx[b]];
-        VP56RefDc *lb = &s->left_block[vp56_b6to4[b]];
+        vp56_ref_dc_t *ab = &s->above_blocks[s->above_block_idx[b]];
+        vp56_ref_dc_t *lb = &s->left_block[vp56_b6to4[b]];
         int count = 0;
         int dc = 0;
         int i;
@@ -299,7 +299,7 @@ static void vp56_add_predictors_dc(VP56Context *s, VP56Frame ref_frame)
     }
 }
 
-static void vp56_edge_filter(VP56Context *s, uint8_t *yuv,
+static void vp56_edge_filter(vp56_context_t *s, uint8_t *yuv,
                              int pix_inc, int line_inc, int t)
 {
     int pix2_inc = 2 * pix_inc;
@@ -314,7 +314,7 @@ static void vp56_edge_filter(VP56Context *s, uint8_t *yuv,
     }
 }
 
-static void vp56_deblock_filter(VP56Context *s, uint8_t *yuv,
+static void vp56_deblock_filter(vp56_context_t *s, uint8_t *yuv,
                                 int stride, int dx, int dy)
 {
     int t = vp56_filter_threshold[s->quantizer];
@@ -322,7 +322,7 @@ static void vp56_deblock_filter(VP56Context *s, uint8_t *yuv,
     if (dy)  vp56_edge_filter(s, yuv + stride*(10-dy), stride,      1, t);
 }
 
-static void vp56_mc(VP56Context *s, int b, int plane, uint8_t *src,
+static void vp56_mc(vp56_context_t *s, int b, int plane, uint8_t *src,
                     int stride, int x, int y)
 {
     uint8_t *dst=s->framep[VP56_FRAME_CURRENT]->data[plane]+s->block_offset[b];
@@ -392,11 +392,11 @@ static void vp56_mc(VP56Context *s, int b, int plane, uint8_t *src,
     }
 }
 
-static void vp56_decode_mb(VP56Context *s, int row, int col, int is_alpha)
+static void vp56_decode_mb(vp56_context_t *s, int row, int col, int is_alpha)
 {
     AVFrame *frame_current, *frame_ref;
-    VP56mb mb_type;
-    VP56Frame ref_frame;
+    vp56_mb_t mb_type;
+    vp56_frame_t ref_frame;
     int b, ab, b_max, plane, off;
 
     if (s->framep[VP56_FRAME_CURRENT]->key_frame)
@@ -405,7 +405,7 @@ static void vp56_decode_mb(VP56Context *s, int row, int col, int is_alpha)
         mb_type = vp56_decode_mv(s, row, col);
     ref_frame = vp56_reference_frame[mb_type];
 
-    s->dsp.clear_blocks(*s->block_coeff);
+    memset(s->block_coeff, 0, sizeof(s->block_coeff));
 
     s->parse_coeff(s);
 
@@ -461,7 +461,7 @@ static void vp56_decode_mb(VP56Context *s, int row, int col, int is_alpha)
 
 static int vp56_size_changed(AVCodecContext *avctx)
 {
-    VP56Context *s = avctx->priv_data;
+    vp56_context_t *s = avctx->priv_data;
     int stride = s->framep[VP56_FRAME_CURRENT]->linesize[0];
     int i;
 
@@ -497,7 +497,7 @@ static int vp56_size_changed(AVCodecContext *avctx)
 int vp56_decode_frame(AVCodecContext *avctx, void *data, int *data_size,
                       const uint8_t *buf, int buf_size)
 {
-    VP56Context *s = avctx->priv_data;
+    vp56_context_t *s = avctx->priv_data;
     AVFrame *const p = s->framep[VP56_FRAME_CURRENT];
     int remaining_buf_size = buf_size;
     int is_alpha, alpha_offset;
@@ -646,7 +646,7 @@ int vp56_decode_frame(AVCodecContext *avctx, void *data, int *data_size,
 
 av_cold void vp56_init(AVCodecContext *avctx, int flip, int has_alpha)
 {
-    VP56Context *s = avctx->priv_data;
+    vp56_context_t *s = avctx->priv_data;
     int i;
 
     s->avctx = avctx;
@@ -657,6 +657,8 @@ av_cold void vp56_init(AVCodecContext *avctx, int flip, int has_alpha)
     dsputil_init(&s->dsp, avctx);
     ff_init_scantable(s->dsp.idct_permutation, &s->scantable,ff_zigzag_direct);
 
+    avcodec_set_dimensions(avctx, 0, 0);
+
     for (i=0; i<4; i++)
         s->framep[i] = &s->frames[i];
     s->framep[VP56_FRAME_UNUSED] = s->framep[VP56_FRAME_GOLDEN];
@@ -684,7 +686,7 @@ av_cold void vp56_init(AVCodecContext *avctx, int flip, int has_alpha)
 
 av_cold int vp56_free(AVCodecContext *avctx)
 {
-    VP56Context *s = avctx->priv_data;
+    vp56_context_t *s = avctx->priv_data;
 
     av_free(s->above_blocks);
     av_free(s->macroblocks);
diff --git a/libavcodec/vp56.h b/libavcodec/vp56.h
index aaa18dd..991e94b 100644
--- a/libavcodec/vp56.h
+++ b/libavcodec/vp56.h
@@ -30,34 +30,34 @@
 #include "bytestream.h"
 
 
-typedef struct vp56_context VP56Context;
-typedef struct vp56_mv VP56mv;
-
-typedef void (*VP56ParseVectorAdjustment)(VP56Context *s,
-                                          VP56mv *vect);
-typedef int  (*VP56Adjust)(int v, int t);
-typedef void (*VP56Filter)(VP56Context *s, uint8_t *dst, uint8_t *src,
-                           int offset1, int offset2, int stride,
-                           VP56mv mv, int mask, int select, int luma);
-typedef void (*VP56ParseCoeff)(VP56Context *s);
-typedef void (*VP56DefaultModelsInit)(VP56Context *s);
-typedef void (*VP56ParseVectorModels)(VP56Context *s);
-typedef void (*VP56ParseCoeffModels)(VP56Context *s);
-typedef int  (*VP56ParseHeader)(VP56Context *s, const uint8_t *buf,
-                                int buf_size, int *golden_frame);
+typedef struct vp56_context vp56_context_t;
+typedef struct vp56_mv vp56_mv_t;
+
+typedef void (*vp56_parse_vector_adjustment_t)(vp56_context_t *s,
+                                               vp56_mv_t *vect);
+typedef int (*vp56_adjust_t)(int v, int t);
+typedef void (*vp56_filter_t)(vp56_context_t *s, uint8_t *dst, uint8_t *src,
+                              int offset1, int offset2, int stride,
+                              vp56_mv_t mv, int mask, int select, int luma);
+typedef void (*vp56_parse_coeff_t)(vp56_context_t *s);
+typedef void (*vp56_default_models_init_t)(vp56_context_t *s);
+typedef void (*vp56_parse_vector_models_t)(vp56_context_t *s);
+typedef void (*vp56_parse_coeff_models_t)(vp56_context_t *s);
+typedef int (*vp56_parse_header_t)(vp56_context_t *s, const uint8_t *buf,
+                                   int buf_size, int *golden_frame);
 
 typedef struct {
     int high;
     int bits;
     const uint8_t *buffer;
     unsigned long code_word;
-} VP56RangeCoder;
+} vp56_range_coder_t;
 
 typedef struct {
     uint8_t not_null_dc;
-    VP56Frame ref_frame;
+    vp56_frame_t ref_frame;
     DCTELEM dc_coeff;
-} VP56RefDc;
+} vp56_ref_dc_t;
 
 struct vp56_mv {
     int x;
@@ -66,8 +66,8 @@ struct vp56_mv {
 
 typedef struct {
     uint8_t type;
-    VP56mv mv;
-} VP56Macroblock;
+    vp56_mv_t mv;
+} vp56_macroblock_t;
 
 typedef struct {
     uint8_t coeff_reorder[64];       /* used in vp6 only */
@@ -84,7 +84,7 @@ typedef struct {
     uint8_t coeff_runv[2][14];       /* run value (vp6 only) */
     uint8_t mb_type[3][10][10];      /* model for decoding MB type */
     uint8_t mb_types_stats[3][10][2];/* contextual, next MB type stats */
-} VP56Model;
+} vp56_model_t;
 
 struct vp56_context {
     AVCodecContext *avctx;
@@ -94,9 +94,9 @@ struct vp56_context {
     AVFrame *framep[6];
     uint8_t *edge_emu_buffer_alloc;
     uint8_t *edge_emu_buffer;
-    VP56RangeCoder c;
-    VP56RangeCoder cc;
-    VP56RangeCoder *ccp;
+    vp56_range_coder_t c;
+    vp56_range_coder_t cc;
+    vp56_range_coder_t *ccp;
     int sub_version;
 
     /* frame info */
@@ -111,19 +111,19 @@ struct vp56_context {
     uint16_t dequant_ac;
 
     /* DC predictors management */
-    VP56RefDc *above_blocks;
-    VP56RefDc left_block[4];
+    vp56_ref_dc_t *above_blocks;
+    vp56_ref_dc_t left_block[4];
     int above_block_idx[6];
     DCTELEM prev_dc[3][3];    /* [plan][ref_frame] */
 
     /* blocks / macroblock */
-    VP56mb mb_type;
-    VP56Macroblock *macroblocks;
+    vp56_mb_t mb_type;
+    vp56_macroblock_t *macroblocks;
     DECLARE_ALIGNED_16(DCTELEM, block_coeff[6][64]);
 
     /* motion vectors */
-    VP56mv mv[6];  /* vectors for each block in MB */
-    VP56mv vector_candidate[2];
+    vp56_mv_t mv[6];  /* vectors for each block in MB */
+    vp56_mv_t vector_candidate[2];
     int vector_candidate_pos;
 
     /* filtering hints */
@@ -146,17 +146,17 @@ struct vp56_context {
     int stride[4];  /* stride for each plan */
 
     const uint8_t *vp56_coord_div;
-    VP56ParseVectorAdjustment parse_vector_adjustment;
-    VP56Adjust adjust;
-    VP56Filter filter;
-    VP56ParseCoeff parse_coeff;
-    VP56DefaultModelsInit default_models_init;
-    VP56ParseVectorModels parse_vector_models;
-    VP56ParseCoeffModels parse_coeff_models;
-    VP56ParseHeader parse_header;
-
-    VP56Model *modelp;
-    VP56Model models[2];
+    vp56_parse_vector_adjustment_t parse_vector_adjustment;
+    vp56_adjust_t adjust;
+    vp56_filter_t filter;
+    vp56_parse_coeff_t parse_coeff;
+    vp56_default_models_init_t default_models_init;
+    vp56_parse_vector_models_t parse_vector_models;
+    vp56_parse_coeff_models_t parse_coeff_models;
+    vp56_parse_header_t parse_header;
+
+    vp56_model_t *modelp;
+    vp56_model_t models[2];
 
     /* huffman decoding */
     int use_huffman;
@@ -170,7 +170,7 @@ struct vp56_context {
 
 void vp56_init(AVCodecContext *avctx, int flip, int has_alpha);
 int vp56_free(AVCodecContext *avctx);
-void vp56_init_dequant(VP56Context *s, int quantizer);
+void vp56_init_dequant(vp56_context_t *s, int quantizer);
 int vp56_decode_frame(AVCodecContext *avctx, void *data, int *data_size,
                       const uint8_t *buf, int buf_size);
 
@@ -179,7 +179,7 @@ int vp56_decode_frame(AVCodecContext *avctx, void *data, int *data_size,
  * vp56 specific range coder implementation
  */
 
-static inline void vp56_init_range_decoder(VP56RangeCoder *c,
+static inline void vp56_init_range_decoder(vp56_range_coder_t *c,
                                            const uint8_t *buf, int buf_size)
 {
     c->high = 255;
@@ -188,7 +188,7 @@ static inline void vp56_init_range_decoder(VP56RangeCoder *c,
     c->code_word = bytestream_get_be16(&c->buffer);
 }
 
-static inline int vp56_rac_get_prob(VP56RangeCoder *c, uint8_t prob)
+static inline int vp56_rac_get_prob(vp56_range_coder_t *c, uint8_t prob)
 {
     unsigned int low = 1 + (((c->high - 1) * prob) / 256);
     unsigned int low_shift = low << 8;
@@ -213,7 +213,7 @@ static inline int vp56_rac_get_prob(VP56RangeCoder *c, uint8_t prob)
     return bit;
 }
 
-static inline int vp56_rac_get(VP56RangeCoder *c)
+static inline int vp56_rac_get(vp56_range_coder_t *c)
 {
     /* equiprobable */
     int low = (c->high + 1) >> 1;
@@ -235,7 +235,7 @@ static inline int vp56_rac_get(VP56RangeCoder *c)
     return bit;
 }
 
-static inline int vp56_rac_gets(VP56RangeCoder *c, int bits)
+static inline int vp56_rac_gets(vp56_range_coder_t *c, int bits)
 {
     int value = 0;
 
@@ -246,14 +246,14 @@ static inline int vp56_rac_gets(VP56RangeCoder *c, int bits)
     return value;
 }
 
-static inline int vp56_rac_gets_nn(VP56RangeCoder *c, int bits)
+static inline int vp56_rac_gets_nn(vp56_range_coder_t *c, int bits)
 {
     int v = vp56_rac_gets(c, 7) << 1;
     return v + !v;
 }
 
-static inline int vp56_rac_get_tree(VP56RangeCoder *c,
-                                    const VP56Tree *tree,
+static inline int vp56_rac_get_tree(vp56_range_coder_t *c,
+                                    const vp56_tree_t *tree,
                                     const uint8_t *probs)
 {
     while (tree->val > 0) {
diff --git a/libavcodec/vp56data.c b/libavcodec/vp56data.c
index 9b98014..a7171c6 100644
--- a/libavcodec/vp56data.c
+++ b/libavcodec/vp56data.c
@@ -44,7 +44,7 @@ const uint8_t vp56_def_mb_types_stats[3][10][2] = {
       {   1,  2 }, {   0,  1 }, {  0,   1 }, {   1,  1 }, {  0,  0 }, },
 };
 
-const VP56Tree vp56_pva_tree[] = {
+const vp56_tree_t vp56_pva_tree[] = {
     { 8, 0},
     { 4, 1},
     { 2, 2}, {-0}, {-1},
@@ -54,7 +54,7 @@ const VP56Tree vp56_pva_tree[] = {
     { 2, 6}, {-6}, {-7},
 };
 
-const VP56Tree vp56_pc_tree[] = {
+const vp56_tree_t vp56_pc_tree[] = {
     { 4, 6},
     { 2, 7}, {-0}, {-1},
     { 4, 8},
diff --git a/libavcodec/vp56data.h b/libavcodec/vp56data.h
index 92f2512..95dc633 100644
--- a/libavcodec/vp56data.h
+++ b/libavcodec/vp56data.h
@@ -34,7 +34,7 @@ typedef enum {
     VP56_FRAME_GOLDEN2  = 3,
     VP56_FRAME_UNUSED   = 4,
     VP56_FRAME_UNUSED2  = 5,
-} VP56Frame;
+} vp56_frame_t;
 
 typedef enum {
     VP56_MB_INTER_NOVEC_PF = 0,  /**< Inter MB, no vector, from previous frame */
@@ -47,23 +47,23 @@ typedef enum {
     VP56_MB_INTER_4V       = 7,  /**< Inter MB, 4 vectors, from previous frame */
     VP56_MB_INTER_V1_GF    = 8,  /**< Inter MB, first vector, from golden frame */
     VP56_MB_INTER_V2_GF    = 9,  /**< Inter MB, second vector, from golden frame */
-} VP56mb;
+} vp56_mb_t;
 
 typedef struct {
   int8_t val;
   int8_t prob_idx;
-} VP56Tree;
+} vp56_tree_t;
 
 extern const uint8_t vp56_b2p[];
 extern const uint8_t vp56_b6to4[];
 extern const uint8_t vp56_coeff_parse_table[6][11];
 extern const uint8_t vp56_def_mb_types_stats[3][10][2];
-extern const VP56Tree vp56_pva_tree[];
-extern const VP56Tree vp56_pc_tree[];
+extern const vp56_tree_t vp56_pva_tree[];
+extern const vp56_tree_t vp56_pc_tree[];
 extern const uint8_t vp56_coeff_bias[];
 extern const uint8_t vp56_coeff_bit_length[];
 
-static const VP56Frame vp56_reference_frame[] = {
+static const vp56_frame_t vp56_reference_frame[] = {
     VP56_FRAME_PREVIOUS,  /* VP56_MB_INTER_NOVEC_PF */
     VP56_FRAME_CURRENT,   /* VP56_MB_INTRA */
     VP56_FRAME_PREVIOUS,  /* VP56_MB_INTER_DELTA_PF */
@@ -212,7 +212,7 @@ static const uint8_t vp56_mb_type_model_model[] = {
     171, 83, 199, 140, 125, 104,
 };
 
-static const VP56Tree vp56_pmbtm_tree[] = {
+static const vp56_tree_t vp56_pmbtm_tree[] = {
     { 4, 0},
     { 2, 1}, {-8}, {-4},
     { 8, 2},
@@ -221,7 +221,7 @@ static const VP56Tree vp56_pmbtm_tree[] = {
     { 2, 5}, {-24}, {-20}, {-16}, {-12}, {-0},
 };
 
-static const VP56Tree vp56_pmbt_tree[] = {
+static const vp56_tree_t vp56_pmbt_tree[] = {
     { 8, 1},
     { 4, 2},
     { 2, 4}, {-VP56_MB_INTER_NOVEC_PF}, {-VP56_MB_INTER_DELTA_PF},
diff --git a/libavcodec/vp6.c b/libavcodec/vp6.c
index 6ffde07..bea7c9e 100644
--- a/libavcodec/vp6.c
+++ b/libavcodec/vp6.c
@@ -37,13 +37,13 @@
 #include "vp6data.h"
 
 
-static void vp6_parse_coeff(VP56Context *s);
-static void vp6_parse_coeff_huffman(VP56Context *s);
+static void vp6_parse_coeff(vp56_context_t *s);
+static void vp6_parse_coeff_huffman(vp56_context_t *s);
 
-static int vp6_parse_header(VP56Context *s, const uint8_t *buf, int buf_size,
+static int vp6_parse_header(vp56_context_t *s, const uint8_t *buf, int buf_size,
                             int *golden_frame)
 {
-    VP56RangeCoder *c = &s->c;
+    vp56_range_coder_t *c = &s->c;
     int parse_filter_info = 0;
     int coeff_offset = 0;
     int vrt_shift = 0;
@@ -75,8 +75,7 @@ static int vp6_parse_header(VP56Context *s, const uint8_t *buf, int buf_size,
         /* buf[4] is number of displayed macroblock rows */
         /* buf[5] is number of displayed macroblock cols */
 
-        if (!s->macroblocks || /* first frame */
-            16*cols != s->avctx->coded_width ||
+        if (16*cols != s->avctx->coded_width ||
             16*rows != s->avctx->coded_height) {
             avcodec_set_dimensions(s->avctx, 16*cols, 16*rows);
             if (s->avctx->extradata_size == 1) {
@@ -152,7 +151,7 @@ static int vp6_parse_header(VP56Context *s, const uint8_t *buf, int buf_size,
     return res;
 }
 
-static void vp6_coeff_order_table_init(VP56Context *s)
+static void vp6_coeff_order_table_init(vp56_context_t *s)
 {
     int i, pos, idx = 1;
 
@@ -163,9 +162,9 @@ static void vp6_coeff_order_table_init(VP56Context *s)
                 s->modelp->coeff_index_to_pos[idx++] = pos;
 }
 
-static void vp6_default_models_init(VP56Context *s)
+static void vp6_default_models_init(vp56_context_t *s)
 {
-    VP56Model *model = s->modelp;
+    vp56_model_t *model = s->modelp;
 
     model->vector_dct[0] = 0xA2;
     model->vector_dct[1] = 0xA4;
@@ -181,10 +180,10 @@ static void vp6_default_models_init(VP56Context *s)
     vp6_coeff_order_table_init(s);
 }
 
-static void vp6_parse_vector_models(VP56Context *s)
+static void vp6_parse_vector_models(vp56_context_t *s)
 {
-    VP56RangeCoder *c = &s->c;
-    VP56Model *model = s->modelp;
+    vp56_range_coder_t *c = &s->c;
+    vp56_model_t *model = s->modelp;
     int comp, node;
 
     for (comp=0; comp<2; comp++) {
@@ -212,7 +211,7 @@ static int vp6_huff_cmp(const void *va, const void *vb)
     return (a->count - b->count)*16 + (b->sym - a->sym);
 }
 
-static void vp6_build_huff_tree(VP56Context *s, uint8_t coeff_model[],
+static void vp6_build_huff_tree(vp56_context_t *s, uint8_t coeff_model[],
                                 const uint8_t *map, unsigned size, VLC *vlc)
 {
     Node nodes[2*size], *tmp = &nodes[size];
@@ -232,10 +231,10 @@ static void vp6_build_huff_tree(VP56Context *s, uint8_t coeff_model[],
                        FF_HUFFMAN_FLAG_HNODE_FIRST);
 }
 
-static void vp6_parse_coeff_models(VP56Context *s)
+static void vp6_parse_coeff_models(vp56_context_t *s)
 {
-    VP56RangeCoder *c = &s->c;
-    VP56Model *model = s->modelp;
+    vp56_range_coder_t *c = &s->c;
+    vp56_model_t *model = s->modelp;
     int def_prob[11];
     int node, cg, ctx, pos;
     int ct;    /* code type */
@@ -297,13 +296,13 @@ static void vp6_parse_coeff_models(VP56Context *s)
     }
 }
 
-static void vp6_parse_vector_adjustment(VP56Context *s, VP56mv *vect)
+static void vp6_parse_vector_adjustment(vp56_context_t *s, vp56_mv_t *vect)
 {
-    VP56RangeCoder *c = &s->c;
-    VP56Model *model = s->modelp;
+    vp56_range_coder_t *c = &s->c;
+    vp56_model_t *model = s->modelp;
     int comp;
 
-    *vect = (VP56mv) {0,0};
+    *vect = (vp56_mv_t) {0,0};
     if (s->vector_candidate_pos < 2)
         *vect = s->vector_candidate[0];
 
@@ -339,7 +338,7 @@ static void vp6_parse_vector_adjustment(VP56Context *s, VP56mv *vect)
  * Read number of consecutive blocks with null DC or AC.
  * This value is < 74.
  */
-static unsigned vp6_get_nb_null(VP56Context *s)
+static unsigned vp6_get_nb_null(vp56_context_t *s)
 {
     unsigned val = get_bits(&s->gb, 2);
     if (val == 2)
@@ -351,9 +350,9 @@ static unsigned vp6_get_nb_null(VP56Context *s)
     return val;
 }
 
-static void vp6_parse_coeff_huffman(VP56Context *s)
+static void vp6_parse_coeff_huffman(vp56_context_t *s)
 {
-    VP56Model *model = s->modelp;
+    vp56_model_t *model = s->modelp;
     uint8_t *permute = s->scantable.permutated;
     VLC *vlc_coeff;
     int coeff, sign, coeff_idx;
@@ -406,10 +405,10 @@ static void vp6_parse_coeff_huffman(VP56Context *s)
     }
 }
 
-static void vp6_parse_coeff(VP56Context *s)
+static void vp6_parse_coeff(vp56_context_t *s)
 {
-    VP56RangeCoder *c = s->ccp;
-    VP56Model *model = s->modelp;
+    vp56_range_coder_t *c = s->ccp;
+    vp56_model_t *model = s->modelp;
     uint8_t *permute = s->scantable.permutated;
     uint8_t *model1, *model2, *model3;
     int coeff, sign, coeff_idx;
@@ -523,7 +522,7 @@ static void vp6_filter_hv4(uint8_t *dst, uint8_t *src, int stride,
     }
 }
 
-static void vp6_filter_diag2(VP56Context *s, uint8_t *dst, uint8_t *src,
+static void vp6_filter_diag2(vp56_context_t *s, uint8_t *dst, uint8_t *src,
                              int stride, int h_weight, int v_weight)
 {
     uint8_t *tmp = s->edge_emu_buffer+16;
@@ -564,9 +563,9 @@ static void vp6_filter_diag4(uint8_t *dst, uint8_t *src, int stride,
     }
 }
 
-static void vp6_filter(VP56Context *s, uint8_t *dst, uint8_t *src,
+static void vp6_filter(vp56_context_t *s, uint8_t *dst, uint8_t *src,
                        int offset1, int offset2, int stride,
-                       VP56mv mv, int mask, int select, int luma)
+                       vp56_mv_t mv, int mask, int select, int luma)
 {
     int filter4 = 0;
     int x8 = mv.x & mask;
@@ -616,7 +615,7 @@ static void vp6_filter(VP56Context *s, uint8_t *dst, uint8_t *src,
 
 static av_cold int vp6_decode_init(AVCodecContext *avctx)
 {
-    VP56Context *s = avctx->priv_data;
+    vp56_context_t *s = avctx->priv_data;
 
     vp56_init(avctx, avctx->codec->id == CODEC_ID_VP6,
                      avctx->codec->id == CODEC_ID_VP6A);
@@ -636,7 +635,7 @@ AVCodec vp6_decoder = {
     "vp6",
     CODEC_TYPE_VIDEO,
     CODEC_ID_VP6,
-    sizeof(VP56Context),
+    sizeof(vp56_context_t),
     vp6_decode_init,
     NULL,
     vp56_free,
@@ -650,7 +649,7 @@ AVCodec vp6f_decoder = {
     "vp6f",
     CODEC_TYPE_VIDEO,
     CODEC_ID_VP6F,
-    sizeof(VP56Context),
+    sizeof(vp56_context_t),
     vp6_decode_init,
     NULL,
     vp56_free,
@@ -664,7 +663,7 @@ AVCodec vp6a_decoder = {
     "vp6a",
     CODEC_TYPE_VIDEO,
     CODEC_ID_VP6A,
-    sizeof(VP56Context),
+    sizeof(vp56_context_t),
     vp6_decode_init,
     NULL,
     vp56_free,
diff --git a/libavcodec/vp6data.h b/libavcodec/vp6data.h
index f57115c..31d6c98 100644
--- a/libavcodec/vp6data.h
+++ b/libavcodec/vp6data.h
@@ -283,7 +283,7 @@ static const int16_t vp6_block_copy_filter[17][8][4] = {
     {  -2,  16, 118,  -4  } },
 };
 
-static const VP56Tree vp6_pcr_tree[] = {
+static const vp56_tree_t vp6_pcr_tree[] = {
     { 8, 0},
     { 4, 1},
     { 2, 2}, {-1}, {-2},
diff --git a/libavcodec/w32thread.c b/libavcodec/w32thread.c
index da491c8..5758c69 100644
--- a/libavcodec/w32thread.c
+++ b/libavcodec/w32thread.c
@@ -74,7 +74,7 @@ void avcodec_thread_free(AVCodecContext *s){
     av_freep(&s->thread_opaque);
 }
 
-int avcodec_thread_execute(AVCodecContext *s, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size){
+int avcodec_thread_execute(AVCodecContext *s, int (*func)(AVCodecContext *c2, void *arg2),void **arg, int *ret, int count){
     ThreadContext *c= s->thread_opaque;
     int i;
 
@@ -84,7 +84,7 @@ int avcodec_thread_execute(AVCodecContext *s, int (*func)(AVCodecContext *c2, vo
     /* note, we can be certain that this is not called with the same AVCodecContext by different threads at the same time */
 
     for(i=0; i<count; i++){
-        c[i].arg= (char*)arg + i*size;
+        c[i].arg= arg[i];
         c[i].func= func;
         c[i].ret= 12345;
 
diff --git a/libavcodec/wavpack.c b/libavcodec/wavpack.c
index b89723e..e8703b3 100644
--- a/libavcodec/wavpack.c
+++ b/libavcodec/wavpack.c
@@ -361,7 +361,6 @@ static av_cold int wavpack_decode_init(AVCodecContext *avctx)
     s->avctx = avctx;
     s->stereo = (avctx->channels == 2);
     avctx->sample_fmt = SAMPLE_FMT_S16;
-    avctx->channel_layout = (avctx->channels==2) ? CH_LAYOUT_STEREO : CH_LAYOUT_MONO;
 
     return 0;
 }
diff --git a/libavcodec/wmv2.c b/libavcodec/wmv2.c
index 015e3f2..1e29363 100644
--- a/libavcodec/wmv2.c
+++ b/libavcodec/wmv2.c
@@ -43,12 +43,12 @@ static void wmv2_add_block(Wmv2Context *w, DCTELEM *block1, uint8_t *dst, int st
     case 1:
         ff_simple_idct84_add(dst           , stride, block1);
         ff_simple_idct84_add(dst + 4*stride, stride, w->abt_block2[n]);
-        s->dsp.clear_block(w->abt_block2[n]);
+        memset(w->abt_block2[n], 0, 64*sizeof(DCTELEM));
         break;
     case 2:
         ff_simple_idct48_add(dst           , stride, block1);
         ff_simple_idct48_add(dst + 4       , stride, w->abt_block2[n]);
-        s->dsp.clear_block(w->abt_block2[n]);
+        memset(w->abt_block2[n], 0, 64*sizeof(DCTELEM));
         break;
     default:
         av_log(s->avctx, AV_LOG_ERROR, "internal error in WMV2 abt\n");
diff --git a/libavcodec/x86/dnxhd_mmx.c b/libavcodec/x86/dnxhd_mmx.c
deleted file mode 100644
index 59bcb39..0000000
--- a/libavcodec/x86/dnxhd_mmx.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * VC3/DNxHD SIMD functions
- * Copyright (c) 2007 Baptiste Coudurier <baptiste dot coudurier at smartjog dot com>
- *
- * VC-3 encoder funded by the British Broadcasting Corporation
- *
- * 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 "libavutil/x86_cpu.h"
-#include "libavcodec/dnxhdenc.h"
-
-static void get_pixels_8x4_sym_sse2(DCTELEM *block, const uint8_t *pixels, int line_size)
-{
-    __asm__ volatile(
-        "pxor %%xmm7,      %%xmm7       \n\t"
-        "movq (%0),        %%xmm0       \n\t"
-        "add  %2,          %0           \n\t"
-        "movq (%0),        %%xmm1       \n\t"
-        "movq (%0, %2),    %%xmm2       \n\t"
-        "movq (%0, %2,2),  %%xmm3       \n\t"
-        "punpcklbw %%xmm7, %%xmm0       \n\t"
-        "punpcklbw %%xmm7, %%xmm1       \n\t"
-        "punpcklbw %%xmm7, %%xmm2       \n\t"
-        "punpcklbw %%xmm7, %%xmm3       \n\t"
-        "movdqa %%xmm0,      (%1)       \n\t"
-        "movdqa %%xmm1,    16(%1)       \n\t"
-        "movdqa %%xmm2,    32(%1)       \n\t"
-        "movdqa %%xmm3,    48(%1)       \n\t"
-        "movdqa %%xmm3 ,   64(%1)       \n\t"
-        "movdqa %%xmm2 ,   80(%1)       \n\t"
-        "movdqa %%xmm1 ,   96(%1)       \n\t"
-        "movdqa %%xmm0,   112(%1)       \n\t"
-        : "+r" (pixels)
-        : "r" (block), "r" ((x86_reg)line_size)
-    );
-}
-
-void ff_dnxhd_init_mmx(DNXHDEncContext *ctx)
-{
-    if (mm_flags & FF_MM_SSE2) {
-        ctx->get_pixels_8x4_sym = get_pixels_8x4_sym_sse2;
-    }
-}
diff --git a/libavcodec/x86/h264_deblock_sse2.asm b/libavcodec/x86/h264_deblock_sse2.asm
deleted file mode 100644
index d59de91..0000000
--- a/libavcodec/x86/h264_deblock_sse2.asm
+++ /dev/null
@@ -1,747 +0,0 @@
-;*****************************************************************************
-;* deblock-a.asm: h264 encoder library
-;*****************************************************************************
-;* Copyright (C) 2005-2008 x264 project
-;*
-;* Authors: Loren Merritt <lorenm at u.washington.edu>
-;*
-;* 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  02111, USA.
-;*****************************************************************************
-
-%include "x86inc.asm"
-
-SECTION_RODATA
-pb_00: times 16 db 0x00
-pb_01: times 16 db 0x01
-pb_03: times 16 db 0x03
-pb_a1: times 16 db 0xa1
-
-SECTION .text
-
-; expands to [base],...,[base+7*stride]
-%define PASS8ROWS(base, base3, stride, stride3) \
-    [base], [base+stride], [base+stride*2], [base3], \
-    [base3+stride], [base3+stride*2], [base3+stride3], [base3+stride*4]
-
-; in: 8 rows of 4 bytes in %1..%8
-; out: 4 rows of 8 bytes in m0..m3
-%macro TRANSPOSE4x8_LOAD 8
-    movd       m0, %1
-    movd       m2, %2
-    movd       m1, %3
-    movd       m3, %4
-    punpcklbw  m0, m2
-    punpcklbw  m1, m3
-    movq       m2, m0
-    punpcklwd  m0, m1
-    punpckhwd  m2, m1
-
-    movd       m4, %5
-    movd       m6, %6
-    movd       m5, %7
-    movd       m7, %8
-    punpcklbw  m4, m6
-    punpcklbw  m5, m7
-    movq       m6, m4
-    punpcklwd  m4, m5
-    punpckhwd  m6, m5
-
-    movq       m1, m0
-    movq       m3, m2
-    punpckldq  m0, m4
-    punpckhdq  m1, m4
-    punpckldq  m2, m6
-    punpckhdq  m3, m6
-%endmacro
-
-; in: 4 rows of 8 bytes in m0..m3
-; out: 8 rows of 4 bytes in %1..%8
-%macro TRANSPOSE8x4_STORE 8
-    movq       m4, m0
-    movq       m5, m1
-    movq       m6, m2
-    punpckhdq  m4, m4
-    punpckhdq  m5, m5
-    punpckhdq  m6, m6
-
-    punpcklbw  m0, m1
-    punpcklbw  m2, m3
-    movq       m1, m0
-    punpcklwd  m0, m2
-    punpckhwd  m1, m2
-    movd       %1, m0
-    punpckhdq  m0, m0
-    movd       %2, m0
-    movd       %3, m1
-    punpckhdq  m1, m1
-    movd       %4, m1
-
-    punpckhdq  m3, m3
-    punpcklbw  m4, m5
-    punpcklbw  m6, m3
-    movq       m5, m4
-    punpcklwd  m4, m6
-    punpckhwd  m5, m6
-    movd       %5, m4
-    punpckhdq  m4, m4
-    movd       %6, m4
-    movd       %7, m5
-    punpckhdq  m5, m5
-    movd       %8, m5
-%endmacro
-
-%macro SBUTTERFLY 4
-    movq       %4, %2
-    punpckl%1  %2, %3
-    punpckh%1  %4, %3
-%endmacro
-
-; in: 8 rows of 8 (only the middle 6 pels are used) in %1..%8
-; out: 6 rows of 8 in [%9+0*16] .. [%9+5*16]
-%macro TRANSPOSE6x8_MEM 9
-    movq  m0, %1
-    movq  m1, %2
-    movq  m2, %3
-    movq  m3, %4
-    movq  m4, %5
-    movq  m5, %6
-    movq  m6, %7
-    SBUTTERFLY bw, m0, m1, m7
-    SBUTTERFLY bw, m2, m3, m1
-    SBUTTERFLY bw, m4, m5, m3
-    movq  [%9+0x10], m1
-    SBUTTERFLY bw, m6, %8, m5
-    SBUTTERFLY wd, m0, m2, m1
-    SBUTTERFLY wd, m4, m6, m2
-    punpckhdq m0, m4
-    movq  [%9+0x00], m0
-    SBUTTERFLY wd, m7, [%9+0x10], m6
-    SBUTTERFLY wd, m3, m5, m4
-    SBUTTERFLY dq, m7, m3, m0
-    SBUTTERFLY dq, m1, m2, m5
-    punpckldq m6, m4
-    movq  [%9+0x10], m1
-    movq  [%9+0x20], m5
-    movq  [%9+0x30], m7
-    movq  [%9+0x40], m0
-    movq  [%9+0x50], m6
-%endmacro
-
-; in: 8 rows of 8 in %1..%8
-; out: 8 rows of 8 in %9..%16
-%macro TRANSPOSE8x8_MEM 16
-    movq  m0, %1
-    movq  m1, %2
-    movq  m2, %3
-    movq  m3, %4
-    movq  m4, %5
-    movq  m5, %6
-    movq  m6, %7
-    SBUTTERFLY bw, m0, m1, m7
-    SBUTTERFLY bw, m2, m3, m1
-    SBUTTERFLY bw, m4, m5, m3
-    SBUTTERFLY bw, m6, %8, m5
-    movq  %9,  m3
-    SBUTTERFLY wd, m0, m2, m3
-    SBUTTERFLY wd, m4, m6, m2
-    SBUTTERFLY wd, m7, m1, m6
-    movq  %11, m2
-    movq  m2,  %9
-    SBUTTERFLY wd, m2, m5, m1
-    SBUTTERFLY dq, m0, m4, m5
-    SBUTTERFLY dq, m7, m2, m4
-    movq  %9,  m0
-    movq  %10, m5
-    movq  %13, m7
-    movq  %14, m4
-    SBUTTERFLY dq, m3, %11, m0
-    SBUTTERFLY dq, m6, m1, m5
-    movq  %11, m3
-    movq  %12, m0
-    movq  %15, m6
-    movq  %16, m5
-%endmacro
-
-; out: %4 = |%1-%2|>%3
-; clobbers: %5
-%macro DIFF_GT 5
-    mova    %5, %2
-    mova    %4, %1
-    psubusb %5, %1
-    psubusb %4, %2
-    por     %4, %5
-    psubusb %4, %3
-%endmacro
-
-; out: %4 = |%1-%2|>%3
-; clobbers: %5
-%macro DIFF_GT2 5
-    mova    %5, %2
-    mova    %4, %1
-    psubusb %5, %1
-    psubusb %4, %2
-    psubusb %5, %3
-    psubusb %4, %3
-    pcmpeqb %4, %5
-%endmacro
-
-%macro SPLATW 1
-%ifidn m0, xmm0
-    pshuflw  %1, %1, 0
-    punpcklqdq %1, %1
-%else
-    pshufw   %1, %1, 0
-%endif
-%endmacro
-
-; in: m0=p1 m1=p0 m2=q0 m3=q1 %1=alpha-1 %2=beta-1
-; out: m5=beta-1, m7=mask, %3=alpha-1
-; clobbers: m4,m6
-%macro LOAD_MASK 2-3
-    movd     m4, %1
-    movd     m5, %2
-    SPLATW   m4
-    SPLATW   m5
-    packuswb m4, m4  ; 16x alpha-1
-    packuswb m5, m5  ; 16x beta-1
-%if %0>2
-    mova     %3, m4
-%endif
-    DIFF_GT  m1, m2, m4, m7, m6 ; |p0-q0| > alpha-1
-    DIFF_GT  m0, m1, m5, m4, m6 ; |p1-p0| > beta-1
-    por      m7, m4
-    DIFF_GT  m3, m2, m5, m4, m6 ; |q1-q0| > beta-1
-    por      m7, m4
-    pxor     m6, m6
-    pcmpeqb  m7, m6
-%endmacro
-
-; in: m0=p1 m1=p0 m2=q0 m3=q1 m7=(tc&mask)
-; out: m1=p0' m2=q0'
-; clobbers: m0,3-6
-%macro DEBLOCK_P0_Q0 0
-    mova    m5, m1
-    pxor    m5, m2           ; p0^q0
-    pand    m5, [pb_01 GLOBAL] ; (p0^q0)&1
-    pcmpeqb m4, m4
-    pxor    m3, m4
-    pavgb   m3, m0           ; (p1 - q1 + 256)>>1
-    pavgb   m3, [pb_03 GLOBAL] ; (((p1 - q1 + 256)>>1)+4)>>1 = 64+2+(p1-q1)>>2
-    pxor    m4, m1
-    pavgb   m4, m2           ; (q0 - p0 + 256)>>1
-    pavgb   m3, m5
-    paddusb m3, m4           ; d+128+33
-    mova    m6, [pb_a1 GLOBAL]
-    psubusb m6, m3
-    psubusb m3, [pb_a1 GLOBAL]
-    pminub  m6, m7
-    pminub  m3, m7
-    psubusb m1, m6
-    psubusb m2, m3
-    paddusb m1, m3
-    paddusb m2, m6
-%endmacro
-
-; in: m1=p0 m2=q0
-;     %1=p1 %2=q2 %3=[q2] %4=[q1] %5=tc0 %6=tmp
-; out: [q1] = clip( (q2+((p0+q0+1)>>1))>>1, q1-tc0, q1+tc0 )
-; clobbers: q2, tmp, tc0
-%macro LUMA_Q1 6
-    mova    %6, m1
-    pavgb   %6, m2
-    pavgb   %2, %6             ; avg(p2,avg(p0,q0))
-    pxor    %6, %3
-    pand    %6, [pb_01 GLOBAL] ; (p2^avg(p0,q0))&1
-    psubusb %2, %6             ; (p2+((p0+q0+1)>>1))>>1
-    mova    %6, %1
-    psubusb %6, %5
-    paddusb %5, %1
-    pmaxub  %2, %6
-    pminub  %2, %5
-    mova    %4, %2
-%endmacro
-
-%ifdef ARCH_X86_64
-;-----------------------------------------------------------------------------
-; void x264_deblock_v_luma_sse2( uint8_t *pix, int stride, int alpha, int beta, int8_t *tc0 )
-;-----------------------------------------------------------------------------
-INIT_XMM
-cglobal x264_deblock_v_luma_sse2
-    movd    m8, [r4] ; tc0
-    lea     r4, [r1*3]
-    dec     r2d        ; alpha-1
-    neg     r4
-    dec     r3d        ; beta-1
-    add     r4, r0     ; pix-3*stride
-
-    mova    m0, [r4+r1]   ; p1
-    mova    m1, [r4+2*r1] ; p0
-    mova    m2, [r0]      ; q0
-    mova    m3, [r0+r1]   ; q1
-    LOAD_MASK r2d, r3d
-
-    punpcklbw m8, m8
-    punpcklbw m8, m8 ; tc = 4x tc0[3], 4x tc0[2], 4x tc0[1], 4x tc0[0]
-    pcmpeqb m9, m9
-    pcmpeqb m9, m8
-    pandn   m9, m7
-    pand    m8, m9
-
-    movdqa  m3, [r4] ; p2
-    DIFF_GT2 m1, m3, m5, m6, m7 ; |p2-p0| > beta-1
-    pand    m6, m9
-    mova    m7, m8
-    psubb   m7, m6
-    pand    m6, m8
-    LUMA_Q1 m0, m3, [r4], [r4+r1], m6, m4
-
-    movdqa  m4, [r0+2*r1] ; q2
-    DIFF_GT2 m2, m4, m5, m6, m3 ; |q2-q0| > beta-1
-    pand    m6, m9
-    pand    m8, m6
-    psubb   m7, m6
-    mova    m3, [r0+r1]
-    LUMA_Q1 m3, m4, [r0+2*r1], [r0+r1], m8, m6
-
-    DEBLOCK_P0_Q0
-    mova    [r4+2*r1], m1
-    mova    [r0], m2
-    ret
-
-;-----------------------------------------------------------------------------
-; void x264_deblock_h_luma_sse2( uint8_t *pix, int stride, int alpha, int beta, int8_t *tc0 )
-;-----------------------------------------------------------------------------
-INIT_MMX
-cglobal x264_deblock_h_luma_sse2
-    movsxd r10, esi
-    lea    r11, [r10+r10*2]
-    lea    rax, [r0-4]
-    lea    r9,  [r0-4+r11]
-    sub    rsp, 0x68
-    %define pix_tmp rsp
-
-    ; transpose 6x16 -> tmp space
-    TRANSPOSE6x8_MEM  PASS8ROWS(rax, r9, r10, r11), pix_tmp
-    lea    rax, [rax+r10*8]
-    lea    r9,  [r9 +r10*8]
-    TRANSPOSE6x8_MEM  PASS8ROWS(rax, r9, r10, r11), pix_tmp+8
-
-    ; vertical filter
-    ; alpha, beta, tc0 are still in r2d, r3d, r4
-    ; don't backup rax, r9, r10, r11 because x264_deblock_v_luma_sse2 doesn't use them
-    lea    r0, [pix_tmp+0x30]
-    mov    esi, 0x10
-    call   x264_deblock_v_luma_sse2
-
-    ; transpose 16x4 -> original space  (only the middle 4 rows were changed by the filter)
-    add    rax, 2
-    add    r9,  2
-    movq   m0, [pix_tmp+0x18]
-    movq   m1, [pix_tmp+0x28]
-    movq   m2, [pix_tmp+0x38]
-    movq   m3, [pix_tmp+0x48]
-    TRANSPOSE8x4_STORE  PASS8ROWS(rax, r9, r10, r11)
-
-    shl    r10, 3
-    sub    rax, r10
-    sub    r9,  r10
-    shr    r10, 3
-    movq   m0, [pix_tmp+0x10]
-    movq   m1, [pix_tmp+0x20]
-    movq   m2, [pix_tmp+0x30]
-    movq   m3, [pix_tmp+0x40]
-    TRANSPOSE8x4_STORE  PASS8ROWS(rax, r9, r10, r11)
-
-    add    rsp, 0x68
-    ret
-
-%else
-
-%macro DEBLOCK_LUMA 3
-;-----------------------------------------------------------------------------
-; void x264_deblock_v8_luma_mmxext( uint8_t *pix, int stride, int alpha, int beta, int8_t *tc0 )
-;-----------------------------------------------------------------------------
-cglobal x264_deblock_%2_luma_%1, 5,5
-    lea     r4, [r1*3]
-    dec     r2     ; alpha-1
-    neg     r4
-    dec     r3     ; beta-1
-    add     r4, r0 ; pix-3*stride
-    %assign pad 2*%3+12-(stack_offset&15)
-    SUB     esp, pad
-
-    mova    m0, [r4+r1]   ; p1
-    mova    m1, [r4+2*r1] ; p0
-    mova    m2, [r0]      ; q0
-    mova    m3, [r0+r1]   ; q1
-    LOAD_MASK r2, r3
-
-    mov     r3, r4m
-    movd    m4, [r3] ; tc0
-    punpcklbw m4, m4
-    punpcklbw m4, m4 ; tc = 4x tc0[3], 4x tc0[2], 4x tc0[1], 4x tc0[0]
-    mova   [esp+%3], m4 ; tc
-    pcmpeqb m3, m3
-    pcmpgtb m4, m3
-    pand    m4, m7
-    mova   [esp], m4 ; mask
-
-    mova    m3, [r4] ; p2
-    DIFF_GT2 m1, m3, m5, m6, m7 ; |p2-p0| > beta-1
-    pand    m6, m4
-    pand    m4, [esp+%3] ; tc
-    mova    m7, m4
-    psubb   m7, m6
-    pand    m6, m4
-    LUMA_Q1 m0, m3, [r4], [r4+r1], m6, m4
-
-    mova    m4, [r0+2*r1] ; q2
-    DIFF_GT2 m2, m4, m5, m6, m3 ; |q2-q0| > beta-1
-    mova    m5, [esp] ; mask
-    pand    m6, m5
-    mova    m5, [esp+%3] ; tc
-    pand    m5, m6
-    psubb   m7, m6
-    mova    m3, [r0+r1]
-    LUMA_Q1 m3, m4, [r0+2*r1], [r0+r1], m5, m6
-
-    DEBLOCK_P0_Q0
-    mova    [r4+2*r1], m1
-    mova    [r0], m2
-    ADD     esp, pad
-    RET
-
-;-----------------------------------------------------------------------------
-; void x264_deblock_h_luma_mmxext( uint8_t *pix, int stride, int alpha, int beta, int8_t *tc0 )
-;-----------------------------------------------------------------------------
-INIT_MMX
-cglobal x264_deblock_h_luma_%1, 0,5
-    mov    r0, r0m
-    mov    r3, r1m
-    lea    r4, [r3*3]
-    sub    r0, 4
-    lea    r1, [r0+r4]
-    %assign pad 0x78-(stack_offset&15)
-    SUB    esp, pad
-%define pix_tmp esp+12
-
-    ; transpose 6x16 -> tmp space
-    TRANSPOSE6x8_MEM  PASS8ROWS(r0, r1, r3, r4), pix_tmp
-    lea    r0, [r0+r3*8]
-    lea    r1, [r1+r3*8]
-    TRANSPOSE6x8_MEM  PASS8ROWS(r0, r1, r3, r4), pix_tmp+8
-
-    ; vertical filter
-    lea    r0, [pix_tmp+0x30]
-    PUSH   dword r4m
-    PUSH   dword r3m
-    PUSH   dword r2m
-    PUSH   dword 16
-    PUSH   dword r0
-    call   x264_deblock_%2_luma_%1
-%ifidn %2, v8
-    add    dword [esp   ], 8 ; pix_tmp+0x38
-    add    dword [esp+16], 2 ; tc0+2
-    call   x264_deblock_%2_luma_%1
-%endif
-    ADD    esp, 20
-
-    ; transpose 16x4 -> original space  (only the middle 4 rows were changed by the filter)
-    mov    r0, r0m
-    sub    r0, 2
-    lea    r1, [r0+r4]
-
-    movq   m0, [pix_tmp+0x10]
-    movq   m1, [pix_tmp+0x20]
-    movq   m2, [pix_tmp+0x30]
-    movq   m3, [pix_tmp+0x40]
-    TRANSPOSE8x4_STORE  PASS8ROWS(r0, r1, r3, r4)
-
-    lea    r0, [r0+r3*8]
-    lea    r1, [r1+r3*8]
-    movq   m0, [pix_tmp+0x18]
-    movq   m1, [pix_tmp+0x28]
-    movq   m2, [pix_tmp+0x38]
-    movq   m3, [pix_tmp+0x48]
-    TRANSPOSE8x4_STORE  PASS8ROWS(r0, r1, r3, r4)
-
-    ADD    esp, pad
-    RET
-%endmacro ; DEBLOCK_LUMA
-
-INIT_XMM
-DEBLOCK_LUMA sse2, v, 16
-
-%endif ; ARCH
-
-
-
-%macro LUMA_INTRA_P012 4 ; p0..p3 in memory
-    mova  t0, p2
-    mova  t1, p0
-    pavgb t0, p1
-    pavgb t1, q0
-    pavgb t0, t1 ; ((p2+p1+1)/2 + (p0+q0+1)/2 + 1)/2
-    mova  t5, t1
-    mova  t2, p2
-    mova  t3, p0
-    paddb t2, p1
-    paddb t3, q0
-    paddb t2, t3
-    mova  t3, t2
-    mova  t4, t2
-    psrlw t2, 1
-    pavgb t2, mpb_00
-    pxor  t2, t0
-    pand  t2, mpb_01
-    psubb t0, t2 ; p1' = (p2+p1+p0+q0+2)/4;
-
-    mova  t1, p2
-    mova  t2, p2
-    pavgb t1, q1
-    psubb t2, q1
-    paddb t3, t3
-    psubb t3, t2 ; p2+2*p1+2*p0+2*q0+q1
-    pand  t2, mpb_01
-    psubb t1, t2
-    pavgb t1, p1
-    pavgb t1, t5 ; (((p2+q1)/2 + p1+1)/2 + (p0+q0+1)/2 + 1)/2
-    psrlw t3, 2
-    pavgb t3, mpb_00
-    pxor  t3, t1
-    pand  t3, mpb_01
-    psubb t1, t3 ; p0'a = (p2+2*p1+2*p0+2*q0+q1+4)/8
-
-    mova  t3, p0
-    mova  t2, p0
-    pxor  t3, q1
-    pavgb t2, q1
-    pand  t3, mpb_01
-    psubb t2, t3
-    pavgb t2, p1 ; p0'b = (2*p1+p0+q0+2)/4
-
-    pxor  t1, t2
-    pxor  t2, p0
-    pand  t1, mask1p
-    pand  t2, mask0
-    pxor  t1, t2
-    pxor  t1, p0
-    mova  %1, t1 ; store p0
-
-    mova  t1, %4 ; p3
-    mova  t2, t1
-    pavgb t1, p2
-    paddb t2, p2
-    pavgb t1, t0 ; (p3+p2+1)/2 + (p2+p1+p0+q0+2)/4
-    paddb t2, t2
-    paddb t2, t4 ; 2*p3+3*p2+p1+p0+q0
-    psrlw t2, 2
-    pavgb t2, mpb_00
-    pxor  t2, t1
-    pand  t2, mpb_01
-    psubb t1, t2 ; p2' = (2*p3+3*p2+p1+p0+q0+4)/8
-
-    pxor  t0, p1
-    pxor  t1, p2
-    pand  t0, mask1p
-    pand  t1, mask1p
-    pxor  t0, p1
-    pxor  t1, p2
-    mova  %2, t0 ; store p1
-    mova  %3, t1 ; store p2
-%endmacro
-
-%macro LUMA_INTRA_SWAP_PQ 0
-    %define q1 m0
-    %define q0 m1
-    %define p0 m2
-    %define p1 m3
-    %define p2 q2
-    %define mask1p mask1q
-%endmacro
-
-%macro DEBLOCK_LUMA_INTRA 2
-    %define p1 m0
-    %define p0 m1
-    %define q0 m2
-    %define q1 m3
-    %define t0 m4
-    %define t1 m5
-    %define t2 m6
-    %define t3 m7
-%ifdef ARCH_X86_64
-    %define p2 m8
-    %define q2 m9
-    %define t4 m10
-    %define t5 m11
-    %define mask0 m12
-    %define mask1p m13
-    %define mask1q [rsp-24]
-    %define mpb_00 m14
-    %define mpb_01 m15
-%else
-    %define spill(x) [esp+16*x+((stack_offset+4)&15)]
-    %define p2 [r4+r1]
-    %define q2 [r0+2*r1]
-    %define t4 spill(0)
-    %define t5 spill(1)
-    %define mask0 spill(2)
-    %define mask1p spill(3)
-    %define mask1q spill(4)
-    %define mpb_00 [pb_00 GLOBAL]
-    %define mpb_01 [pb_01 GLOBAL]
-%endif
-
-;-----------------------------------------------------------------------------
-; void x264_deblock_v_luma_intra_sse2( uint8_t *pix, int stride, int alpha, int beta )
-;-----------------------------------------------------------------------------
-cglobal x264_deblock_%2_luma_intra_%1, 4,6
-%ifndef ARCH_X86_64
-    sub     esp, 0x60
-%endif
-    lea     r4, [r1*4]
-    lea     r5, [r1*3] ; 3*stride
-    dec     r2d        ; alpha-1
-    jl .end
-    neg     r4
-    dec     r3d        ; beta-1
-    jl .end
-    add     r4, r0     ; pix-4*stride
-    mova    p1, [r4+2*r1]
-    mova    p0, [r4+r5]
-    mova    q0, [r0]
-    mova    q1, [r0+r1]
-%ifdef ARCH_X86_64
-    pxor    mpb_00, mpb_00
-    mova    mpb_01, [pb_01 GLOBAL]
-    LOAD_MASK r2d, r3d, t5 ; m5=beta-1, t5=alpha-1, m7=mask0
-    SWAP    7, 12 ; m12=mask0
-    pavgb   t5, mpb_00
-    pavgb   t5, mpb_01 ; alpha/4+1
-    movdqa  p2, [r4+r1]
-    movdqa  q2, [r0+2*r1]
-    DIFF_GT2 p0, q0, t5, t0, t3 ; t0 = |p0-q0| > alpha/4+1
-    DIFF_GT2 p0, p2, m5, t2, t5 ; mask1 = |p2-p0| > beta-1
-    DIFF_GT2 q0, q2, m5, t4, t5 ; t4 = |q2-q0| > beta-1
-    pand    t0, mask0
-    pand    t4, t0
-    pand    t2, t0
-    mova    mask1q, t4
-    mova    mask1p, t2
-%else
-    LOAD_MASK r2d, r3d, t5 ; m5=beta-1, t5=alpha-1, m7=mask0
-    mova    m4, t5
-    mova    mask0, m7
-    pavgb   m4, [pb_00 GLOBAL]
-    pavgb   m4, [pb_01 GLOBAL] ; alpha/4+1
-    DIFF_GT2 p0, q0, m4, m6, m7 ; m6 = |p0-q0| > alpha/4+1
-    pand    m6, mask0
-    DIFF_GT2 p0, p2, m5, m4, m7 ; m4 = |p2-p0| > beta-1
-    pand    m4, m6
-    mova    mask1p, m4
-    DIFF_GT2 q0, q2, m5, m4, m7 ; m4 = |q2-q0| > beta-1
-    pand    m4, m6
-    mova    mask1q, m4
-%endif
-    LUMA_INTRA_P012 [r4+r5], [r4+2*r1], [r4+r1], [r4]
-    LUMA_INTRA_SWAP_PQ
-    LUMA_INTRA_P012 [r0], [r0+r1], [r0+2*r1], [r0+r5]
-.end:
-%ifndef ARCH_X86_64
-    add     esp, 0x60
-%endif
-    RET
-
-INIT_MMX
-%ifdef ARCH_X86_64
-;-----------------------------------------------------------------------------
-; void x264_deblock_h_luma_intra_sse2( uint8_t *pix, int stride, int alpha, int beta )
-;-----------------------------------------------------------------------------
-cglobal x264_deblock_h_luma_intra_%1
-    movsxd r10, r1d
-    lea    r11, [r10*3]
-    lea    rax, [r0-4]
-    lea    r9,  [r0-4+r11]
-    sub    rsp, 0x88
-    %define pix_tmp rsp
-
-    ; transpose 8x16 -> tmp space
-    TRANSPOSE8x8_MEM  PASS8ROWS(rax, r9, r10, r11), PASS8ROWS(pix_tmp, pix_tmp+0x30, 0x10, 0x30)
-    lea    rax, [rax+r10*8]
-    lea    r9,  [r9+r10*8]
-    TRANSPOSE8x8_MEM  PASS8ROWS(rax, r9, r10, r11), PASS8ROWS(pix_tmp+8, pix_tmp+0x38, 0x10, 0x30)
-
-    lea    r0,  [pix_tmp+0x40]
-    mov    r1,  0x10
-    call   x264_deblock_v_luma_intra_%1
-
-    ; transpose 16x6 -> original space (but we can't write only 6 pixels, so really 16x8)
-    lea    r9, [rax+r11]
-    TRANSPOSE8x8_MEM  PASS8ROWS(pix_tmp+8, pix_tmp+0x38, 0x10, 0x30), PASS8ROWS(rax, r9, r10, r11)
-    shl    r10, 3
-    sub    rax, r10
-    sub    r9,  r10
-    shr    r10, 3
-    TRANSPOSE8x8_MEM  PASS8ROWS(pix_tmp, pix_tmp+0x30, 0x10, 0x30), PASS8ROWS(rax, r9, r10, r11)
-    add    rsp, 0x88
-    ret
-%else
-cglobal x264_deblock_h_luma_intra_%1, 2,4
-    lea    r3,  [r1*3]
-    sub    r0,  4
-    lea    r2,  [r0+r3]
-%assign pad 0x8c-(stack_offset&15)
-    SUB    rsp, pad
-    %define pix_tmp rsp
-
-    ; transpose 8x16 -> tmp space
-    TRANSPOSE8x8_MEM  PASS8ROWS(r0, r2, r1, r3), PASS8ROWS(pix_tmp, pix_tmp+0x30, 0x10, 0x30)
-    lea    r0,  [r0+r1*8]
-    lea    r2,  [r2+r1*8]
-    TRANSPOSE8x8_MEM  PASS8ROWS(r0, r2, r1, r3), PASS8ROWS(pix_tmp+8, pix_tmp+0x38, 0x10, 0x30)
-
-    lea    r0,  [pix_tmp+0x40]
-    PUSH   dword r3m
-    PUSH   dword r2m
-    PUSH   dword 16
-    PUSH   r0
-    call   x264_deblock_%2_luma_intra_%1
-%ifidn %2, v8
-    add    dword [rsp], 8 ; pix_tmp+8
-    call   x264_deblock_%2_luma_intra_%1
-%endif
-    ADD    esp, 16
-
-    mov    r1,  r1m
-    mov    r0,  r0m
-    lea    r3,  [r1*3]
-    sub    r0,  4
-    lea    r2,  [r0+r3]
-    ; transpose 16x6 -> original space (but we can't write only 6 pixels, so really 16x8)
-    TRANSPOSE8x8_MEM  PASS8ROWS(pix_tmp, pix_tmp+0x30, 0x10, 0x30), PASS8ROWS(r0, r2, r1, r3)
-    lea    r0,  [r0+r1*8]
-    lea    r2,  [r2+r1*8]
-    TRANSPOSE8x8_MEM  PASS8ROWS(pix_tmp+8, pix_tmp+0x38, 0x10, 0x30), PASS8ROWS(r0, r2, r1, r3)
-    ADD    rsp, pad
-    RET
-%endif ; ARCH_X86_64
-%endmacro ; DEBLOCK_LUMA_INTRA
-
-INIT_XMM
-DEBLOCK_LUMA_INTRA sse2, v
-%ifndef ARCH_X86_64
-INIT_MMX
-DEBLOCK_LUMA_INTRA mmxext, v8
-%endif
diff --git a/libavcodec/x86/h264_idct_sse2.asm b/libavcodec/x86/h264_idct_sse2.asm
deleted file mode 100755
index a46cd97..0000000
--- a/libavcodec/x86/h264_idct_sse2.asm
+++ /dev/null
@@ -1,61 +0,0 @@
-;*****************************************************************************
-;* dct-a.asm: h264 encoder library
-;*****************************************************************************
-;* Copyright (C) 2003-2008 x264 project
-;*
-;* Authors: Laurent Aimar <fenrir at via.ecp.fr>
-;*          Loren Merritt <lorenm at u.washington.edu>
-;*          Holger Lubitz <hal at duncan.ol.sub.de>
-;*          Min Chen <chenm001.163.com>
-;*
-;* 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  02111, USA.
-;*****************************************************************************
-
-%include "x86inc.asm"
-%include "x86util.asm"
-
-SECTION_RODATA
-pw_32: times 8 dw 32
-
-SECTION .text
-
-%macro IDCT4_1D 6
-    SUMSUB_BA   m%3, m%1
-    SUMSUBD2_AB m%2, m%4, m%6, m%5
-    SUMSUB_BADC m%2, m%3, m%5, m%1
-    SWAP %1, %2, %5, %4, %3
-%endmacro
-
-INIT_XMM
-cglobal x264_add8x4_idct_sse2, 3,3
-    movq   m0, [r1+ 0]
-    movq   m1, [r1+ 8]
-    movq   m2, [r1+16]
-    movq   m3, [r1+24]
-    movhps m0, [r1+32]
-    movhps m1, [r1+40]
-    movhps m2, [r1+48]
-    movhps m3, [r1+56]
-    IDCT4_1D 0,1,2,3,4,5
-    TRANSPOSE2x4x4W 0,1,2,3,4
-    paddw m0, [pw_32 GLOBAL]
-    IDCT4_1D 0,1,2,3,4,5
-    pxor  m7, m7
-    STORE_DIFF  m0, m4, m7, [r0]
-    STORE_DIFF  m1, m4, m7, [r0+r2]
-    lea   r0, [r0+r2*2]
-    STORE_DIFF  m2, m4, m7, [r0]
-    STORE_DIFF  m3, m4, m7, [r0+r2]
-    RET
diff --git a/libavcodec/x86/rv40dsp_mmx.c b/libavcodec/x86/rv40dsp_mmx.c
deleted file mode 100644
index 47461c6..0000000
--- a/libavcodec/x86/rv40dsp_mmx.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2008 Konstantin Shishkov, Mathieu Velten
- *
- * MMX-optimized DSP functions for RV40, based on H.264 optimizations by
- * Michael Niedermayer and 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 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 "dsputil_mmx.h"
-
-/* bias interleaved with bias div 8, use p+1 to access bias div 8 */
-DECLARE_ALIGNED_8(static const uint64_t, rv40_bias_reg[4][8]) = {
-    { 0x0000000000000000ULL, 0x0000000000000000ULL, 0x0010001000100010ULL, 0x0002000200020002ULL,
-      0x0020002000200020ULL, 0x0004000400040004ULL, 0x0010001000100010ULL, 0x0002000200020002ULL },
-    { 0x0020002000200020ULL, 0x0004000400040004ULL, 0x001C001C001C001CULL, 0x0003000300030003ULL,
-      0x0020002000200020ULL, 0x0004000400040004ULL, 0x001C001C001C001CULL, 0x0003000300030003ULL },
-    { 0x0000000000000000ULL, 0x0000000000000000ULL, 0x0020002000200020ULL, 0x0004000400040004ULL,
-      0x0010001000100010ULL, 0x0002000200020002ULL, 0x0020002000200020ULL, 0x0004000400040004ULL },
-    { 0x0020002000200020ULL, 0x0004000400040004ULL, 0x001C001C001C001CULL, 0x0003000300030003ULL,
-      0x0020002000200020ULL, 0x0004000400040004ULL, 0x001C001C001C001CULL, 0x0003000300030003ULL }
-};
-
-static void put_rv40_chroma_mc8_mmx(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y)
-{
-    put_h264_chroma_generic_mc8_mmx(dst, src, stride, h, x, y, &rv40_bias_reg[y>>1][x&(~1)]);
-}
-static void put_rv40_chroma_mc4_mmx(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y)
-{
-    put_h264_chroma_generic_mc4_mmx(dst, src, stride, h, x, y, &rv40_bias_reg[y>>1][x&(~1)]);
-}
-static void avg_rv40_chroma_mc8_mmx2(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y)
-{
-    avg_h264_chroma_generic_mc8_mmx2(dst, src, stride, h, x, y, &rv40_bias_reg[y>>1][x&(~1)]);
-}
-static void avg_rv40_chroma_mc4_mmx2(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y)
-{
-    avg_h264_chroma_generic_mc4_mmx2(dst, src, stride, h, x, y, &rv40_bias_reg[y>>1][x&(~1)]);
-}
-static void avg_rv40_chroma_mc8_3dnow(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y)
-{
-    avg_h264_chroma_generic_mc8_3dnow(dst, src, stride, h, x, y, &rv40_bias_reg[y>>1][x&(~1)]);
-}
-static void avg_rv40_chroma_mc4_3dnow(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int stride, int h, int x, int y)
-{
-    avg_h264_chroma_generic_mc4_3dnow(dst, src, stride, h, x, y, &rv40_bias_reg[y>>1][x&(~1)]);
-}
diff --git a/libavcodec/x86/x86util.asm b/libavcodec/x86/x86util.asm
deleted file mode 100644
index 2e318ef..0000000
--- a/libavcodec/x86/x86util.asm
+++ /dev/null
@@ -1,240 +0,0 @@
-;*****************************************************************************
-;* x86inc.asm
-;*****************************************************************************
-;* Copyright (C) 2008 Loren Merritt <lorenm at u.washington.edu>
-;*
-;* 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  02111, USA.
-;*****************************************************************************
-
-%macro SBUTTERFLY 4
-    mova      m%4, m%2
-    punpckl%1 m%2, m%3
-    punpckh%1 m%4, m%3
-    SWAP %3, %4
-%endmacro
-
-%macro TRANSPOSE4x4W 5
-    SBUTTERFLY wd, %1, %2, %5
-    SBUTTERFLY wd, %3, %4, %5
-    SBUTTERFLY dq, %1, %3, %5
-    SBUTTERFLY dq, %2, %4, %5
-    SWAP %2, %3
-%endmacro
-
-%macro TRANSPOSE2x4x4W 5
-    SBUTTERFLY wd,  %1, %2, %5
-    SBUTTERFLY wd,  %3, %4, %5
-    SBUTTERFLY dq,  %1, %3, %5
-    SBUTTERFLY dq,  %2, %4, %5
-    SBUTTERFLY qdq, %1, %2, %5
-    SBUTTERFLY qdq, %3, %4, %5
-%endmacro
-
-%macro TRANSPOSE4x4D 5
-    SBUTTERFLY dq,  %1, %2, %5
-    SBUTTERFLY dq,  %3, %4, %5
-    SBUTTERFLY qdq, %1, %3, %5
-    SBUTTERFLY qdq, %2, %4, %5
-    SWAP %2, %3
-%endmacro
-
-%macro TRANSPOSE8x8W 9-11
-%ifdef ARCH_X86_64
-    SBUTTERFLY wd,  %1, %2, %9
-    SBUTTERFLY wd,  %3, %4, %9
-    SBUTTERFLY wd,  %5, %6, %9
-    SBUTTERFLY wd,  %7, %8, %9
-    SBUTTERFLY dq,  %1, %3, %9
-    SBUTTERFLY dq,  %2, %4, %9
-    SBUTTERFLY dq,  %5, %7, %9
-    SBUTTERFLY dq,  %6, %8, %9
-    SBUTTERFLY qdq, %1, %5, %9
-    SBUTTERFLY qdq, %2, %6, %9
-    SBUTTERFLY qdq, %3, %7, %9
-    SBUTTERFLY qdq, %4, %8, %9
-    SWAP %2, %5
-    SWAP %4, %7
-%else
-; in:  m0..m7, unless %11 in which case m6 is in %9
-; out: m0..m7, unless %11 in which case m4 is in %10
-; spills into %9 and %10
-%if %0<11
-    movdqa %9, m%7
-%endif
-    SBUTTERFLY wd,  %1, %2, %7
-    movdqa %10, m%2
-    movdqa m%7, %9
-    SBUTTERFLY wd,  %3, %4, %2
-    SBUTTERFLY wd,  %5, %6, %2
-    SBUTTERFLY wd,  %7, %8, %2
-    SBUTTERFLY dq,  %1, %3, %2
-    movdqa %9, m%3
-    movdqa m%2, %10
-    SBUTTERFLY dq,  %2, %4, %3
-    SBUTTERFLY dq,  %5, %7, %3
-    SBUTTERFLY dq,  %6, %8, %3
-    SBUTTERFLY qdq, %1, %5, %3
-    SBUTTERFLY qdq, %2, %6, %3
-    movdqa %10, m%2
-    movdqa m%3, %9
-    SBUTTERFLY qdq, %3, %7, %2
-    SBUTTERFLY qdq, %4, %8, %2
-    SWAP %2, %5
-    SWAP %4, %7
-%if 0<11
-    movdqa m%5, %10
-%endif
-%endif
-%endmacro
-
-%macro ABS1_MMX 2    ; a, tmp
-    pxor    %2, %2
-    psubw   %2, %1
-    pmaxsw  %1, %2
-%endmacro
-
-%macro ABS2_MMX 4    ; a, b, tmp0, tmp1
-    pxor    %3, %3
-    pxor    %4, %4
-    psubw   %3, %1
-    psubw   %4, %2
-    pmaxsw  %1, %3
-    pmaxsw  %2, %4
-%endmacro
-
-%macro ABS1_SSSE3 2
-    pabsw   %1, %1
-%endmacro
-
-%macro ABS2_SSSE3 4
-    pabsw   %1, %1
-    pabsw   %2, %2
-%endmacro
-
-%define ABS1 ABS1_MMX
-%define ABS2 ABS2_MMX
-
-%macro ABS4 6
-    ABS2 %1, %2, %5, %6
-    ABS2 %3, %4, %5, %6
-%endmacro
-
-%macro SPLATB_MMX 3
-    movd      %1, [%2-3] ;to avoid crossing a cacheline
-    punpcklbw %1, %1
-%if mmsize==16
-    pshuflw   %1, %1, 0xff
-    punpcklqdq %1, %1
-%else
-    pshufw    %1, %1, 0xff
-%endif
-%endmacro
-
-%macro SPLATB_SSSE3 3
-    movd      %1, [%2-3]
-    pshufb    %1, %3
-%endmacro
-
-%macro PALIGNR_MMX 4
-    %ifnidn %4, %2
-    mova    %4, %2
-    %endif
-    %if mmsize == 8
-    psllq   %1, (8-%3)*8
-    psrlq   %4, %3*8
-    %else
-    pslldq  %1, 16-%3
-    psrldq  %4, %3
-    %endif
-    por     %1, %4
-%endmacro
-
-%macro PALIGNR_SSSE3 4
-    palignr %1, %2, %3
-%endmacro
-
-%macro SUMSUB_BA 2
-    paddw   %1, %2
-    paddw   %2, %2
-    psubw   %2, %1
-%endmacro
-
-%macro SUMSUB_BADC 4
-    paddw   %1, %2
-    paddw   %3, %4
-    paddw   %2, %2
-    paddw   %4, %4
-    psubw   %2, %1
-    psubw   %4, %3
-%endmacro
-
-%macro HADAMARD8_1D 8
-    SUMSUB_BADC %1, %5, %2, %6
-    SUMSUB_BADC %3, %7, %4, %8
-    SUMSUB_BADC %1, %3, %2, %4
-    SUMSUB_BADC %5, %7, %6, %8
-    SUMSUB_BADC %1, %2, %3, %4
-    SUMSUB_BADC %5, %6, %7, %8
-%endmacro
-
-%macro SUMSUB2_AB 3
-    mova    %3, %1
-    paddw   %1, %1
-    paddw   %1, %2
-    psubw   %3, %2
-    psubw   %3, %2
-%endmacro
-
-%macro SUMSUBD2_AB 4
-    mova    %4, %1
-    mova    %3, %2
-    psraw   %2, 1
-    psraw   %4, 1
-    paddw   %1, %2
-    psubw   %4, %3
-%endmacro
-
-%macro LOAD_DIFF 5
-%ifidn %3, none
-    movh       %1, %4
-    movh       %2, %5
-    punpcklbw  %1, %2
-    punpcklbw  %2, %2
-    psubw      %1, %2
-%else
-    movh       %1, %4
-    punpcklbw  %1, %3
-    movh       %2, %5
-    punpcklbw  %2, %3
-    psubw      %1, %2
-%endif
-%endmacro
-
-%macro LOAD_DIFF_8x4P 6-8 r0,r2 ; 4x dest, 2x temp, 2x pointer
-    LOAD_DIFF %1, %5, none, [%7],      [%8]
-    LOAD_DIFF %2, %6, none, [%7+r1],   [%8+r3]
-    LOAD_DIFF %3, %5, none, [%7+2*r1], [%8+2*r3]
-    LOAD_DIFF %4, %6, none, [%7+r4],   [%8+r5]
-%endmacro
-
-%macro STORE_DIFF 4
-    psraw      %1, 6
-    movh       %2, %4
-    punpcklbw  %2, %3
-    paddsw     %1, %2
-    packuswb   %1, %1
-    movh       %4, %1
-%endmacro
-
diff --git a/libavcodec/xsubdec.c b/libavcodec/xsubdec.c
index 9ac315b..5f7d8fd 100644
--- a/libavcodec/xsubdec.c
+++ b/libavcodec/xsubdec.c
@@ -80,32 +80,31 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size,
 
     // allocate sub and set values
     if (!sub->rects) {
-        sub->rects =  av_mallocz(sizeof(*sub->rects));
-        sub->rects[0] = av_mallocz(sizeof(*sub->rects[0]));
+        sub->rects = av_mallocz(sizeof(AVSubtitleRect));
         sub->num_rects = 1;
     }
-    av_freep(&sub->rects[0]->pict.data[0]);
-    sub->rects[0]->x = x; sub->rects[0]->y = y;
-    sub->rects[0]->w = w; sub->rects[0]->h = h;
-    sub->rects[0]->pict.linesize[0] = w;
-    sub->rects[0]->pict.data[0] = av_malloc(w * h);
-    sub->rects[0]->nb_colors = 4;
-    sub->rects[0]->pict.data[1] = av_malloc(sub->rects[0]->nb_colors * 4);
+    av_freep(&sub->rects[0].bitmap);
+    sub->rects[0].x = x; sub->rects[0].y = y;
+    sub->rects[0].w = w; sub->rects[0].h = h;
+    sub->rects[0].linesize = w;
+    sub->rects[0].bitmap = av_malloc(w * h);
+    sub->rects[0].nb_colors = 4;
+    sub->rects[0].rgba_palette = av_malloc(sub->rects[0].nb_colors * 4);
 
     // read palette
-    for (i = 0; i < sub->rects[0]->nb_colors; i++)
-        ((uint32_t*)sub->rects[0]->pict.data[1])[i] = bytestream_get_be24(&buf);
+    for (i = 0; i < sub->rects[0].nb_colors; i++)
+        sub->rects[0].rgba_palette[i] = bytestream_get_be24(&buf);
     // make all except background (first entry) non-transparent
-    for (i = 1; i < sub->rects[0]->nb_colors; i++)
-        ((uint32_t*)sub->rects[0]->pict.data[1])[i] |= 0xff000000;
+    for (i = 1; i < sub->rects[0].nb_colors; i++)
+        sub->rects[0].rgba_palette[i] |= 0xff000000;
 
     // process RLE-compressed data
     rlelen = FFMIN(rlelen, buf_end - buf);
     init_get_bits(&gb, buf, rlelen * 8);
-    bitmap = sub->rects[0]->pict.data[0];
+    bitmap = sub->rects[0].bitmap;
     for (y = 0; y < h; y++) {
         // interlaced: do odd lines
-        if (y == (h + 1) / 2) bitmap = sub->rects[0]->pict.data[0] + w;
+        if (y == (h + 1) / 2) bitmap = sub->rects[0].bitmap + w;
         for (x = 0; x < w; ) {
             int log2 = ff_log2_tab[show_bits(&gb, 8)];
             int run = get_bits(&gb, 14 - 4 * (log2 >> 1));
diff --git a/libavcodec/xvmc_render.h b/libavcodec/xvmc_render.h
index d9aa154..8db4357 100644
--- a/libavcodec/xvmc_render.h
+++ b/libavcodec/xvmc_render.h
@@ -29,47 +29,47 @@
 #include <X11/extensions/XvMClib.h>
 
 
-//the surface should be shown, the video driver manipulates this
+//the surface should be shown, video driver manipulates this
 #define MP_XVMC_STATE_DISPLAY_PENDING 1
-//the surface is needed for prediction, the codec manipulates this
+//the surface is needed for prediction, codec manipulates this
 #define MP_XVMC_STATE_PREDICTION 2
 //this surface is needed for subpicture rendering
 #define MP_XVMC_STATE_OSD_SOURCE 4
 //                     1337    IDCT MCo
 #define MP_XVMC_RENDER_MAGIC 0x1DC711C0
 
-struct xvmc_render_state {
-    //these are not changed by the decoder!
-    int  magic;
+typedef   struct{
+//these are not changed by the decoder!
+  int  magic;
 
-    short * data_blocks;
-    XvMCMacroBlock * mv_blocks;
-    int total_number_of_mv_blocks;
-    int total_number_of_data_blocks;
-    int mc_type; //XVMC_MPEG1/2/4,XVMC_H263 without XVMC_IDCT
-    int idct; //Do we use IDCT acceleration?
-    int chroma_format; //420, 422, 444
-    int unsigned_intra; //+-128 for intra pictures after clipping
-    XvMCSurface* p_surface; //pointer to rendered surface, never changed
+  short * data_blocks;
+  XvMCMacroBlock * mv_blocks;
+  int total_number_of_mv_blocks;
+  int total_number_of_data_blocks;
+  int mc_type;//XVMC_MPEG1/2/4,XVMC_H263 without XVMC_IDCT
+  int idct;//Do we use IDCT acceleration?
+  int chroma_format;//420,422,444
+  int unsigned_intra;//+-128 for intra pictures after clip
+  XvMCSurface* p_surface;//pointer to rendered surface, never changed
 
-    //these are changed by the decoder
-    //used by the XvMCRenderSurface function
-    XvMCSurface* p_past_surface; //pointer to the past surface
-    XvMCSurface* p_future_surface; //pointer to the future prediction surface
+//these are changed by decoder
+//used by XvMCRenderSurface function
+  XvMCSurface* p_past_surface;//pointer to the past surface
+  XvMCSurface* p_future_surface;//pointer to  the future prediction surface
 
-    unsigned int picture_structure; //top/bottom fields or frame!
-    unsigned int flags; //XVMC_SECOND_FIELD - 1st or 2nd field in the sequence
-    unsigned int display_flags; //1,2 or 1+2 fields for XvMCPutSurface
+  unsigned int picture_structure;//top/bottom fields or frame!
+  unsigned int flags;//XVMC_SECOND_FIELD - 1'st or 2'd field in the sequence
+  unsigned int display_flags; //1,2 or 1+2 fields for XvMCPutSurface,
 
-    //these are for internal communication
-    int state; //0 - free, 1 - waiting to display, 2 - waiting for prediction
-    int start_mv_blocks_num; //offset in the array for the current slice, updated by vo
-    int filled_mv_blocks_num; //processed mv block in this slice, changed by decoder
+//these are internal communication ones
+  int state;//0-free, 1 Waiting to Display, 2 Waiting for prediction
+  int start_mv_blocks_num;//offset in the array for the current slice, updated by vo
+  int filled_mv_blocks_num;//processed mv block in this slice, changed by decoder
 
-    int next_free_data_block_num; //used in add_mv_block, pointer to next free block
-    //extensions
-    void * p_osd_target_surface_render; //pointer to the surface where subpicture is rendered
+  int next_free_data_block_num;//used in add_mv_block, pointer to next free block
+//extensions
+  void * p_osd_target_surface_render;//pointer to the surface where subpicture is rendered
 
-};
+} xvmc_render_state_t;
 
 #endif /* AVCODEC_XVMC_RENDER_H */
diff --git a/libavcodec/xvmcvideo.c b/libavcodec/xvmcvideo.c
index 9c4d8d8..93d93a6 100644
--- a/libavcodec/xvmcvideo.c
+++ b/libavcodec/xvmcvideo.c
@@ -39,8 +39,8 @@
 
 //set s->block
 void XVMC_init_block(MpegEncContext *s){
-    struct xvmc_render_state * render;
-    render = (struct xvmc_render_state*)s->current_picture.data[2];
+xvmc_render_state_t * render;
+    render = (xvmc_render_state_t*)s->current_picture.data[2];
     assert(render != NULL);
     if( (render == NULL) || (render->magic != MP_XVMC_RENDER_MAGIC) ){
         assert(0);
@@ -69,11 +69,11 @@ const int mb_block_count = 4+(1<<s->chroma_format);
 //These functions should be called on every new field and/or frame.
 //They should be safe if they are called a few times for the same field!
 int XVMC_field_start(MpegEncContext*s, AVCodecContext *avctx){
-    struct xvmc_render_state * render, * last, * next;
+xvmc_render_state_t * render,* last, * next;
 
     assert(avctx != NULL);
 
-    render = (struct xvmc_render_state*)s->current_picture.data[2];
+    render = (xvmc_render_state_t*)s->current_picture.data[2];
     assert(render != NULL);
     if( (render == NULL) || (render->magic != MP_XVMC_RENDER_MAGIC) )
         return -1;//make sure that this is render packet
@@ -91,7 +91,7 @@ int XVMC_field_start(MpegEncContext*s, AVCodecContext *avctx){
         case  FF_I_TYPE:
             return 0;// no prediction from other frames
         case  FF_B_TYPE:
-            next = (struct xvmc_render_state*)s->next_picture.data[2];
+            next = (xvmc_render_state_t*)s->next_picture.data[2];
             assert(next!=NULL);
             assert(next->state & MP_XVMC_STATE_PREDICTION);
             if(next == NULL) return -1;
@@ -99,7 +99,7 @@ int XVMC_field_start(MpegEncContext*s, AVCodecContext *avctx){
             render->p_future_surface = next->p_surface;
             //no return here, going to set forward prediction
         case  FF_P_TYPE:
-            last = (struct xvmc_render_state*)s->last_picture.data[2];
+            last = (xvmc_render_state_t*)s->last_picture.data[2];
             if(last == NULL)// && !s->first_field)
                 last = render;//predict second field from the first
             if(last->magic != MP_XVMC_RENDER_MAGIC) return -1;
@@ -112,8 +112,8 @@ return -1;
 }
 
 void XVMC_field_end(MpegEncContext *s){
-    struct xvmc_render_state * render;
-    render = (struct xvmc_render_state*)s->current_picture.data[2];
+xvmc_render_state_t * render;
+    render = (xvmc_render_state_t*)s->current_picture.data[2];
     assert(render != NULL);
 
     if(render->filled_mv_blocks_num > 0){
@@ -124,7 +124,7 @@ void XVMC_field_end(MpegEncContext *s){
 
 void XVMC_decode_mb(MpegEncContext *s){
 XvMCMacroBlock * mv_block;
-struct xvmc_render_state * render;
+xvmc_render_state_t * render;
 int i,cbp,blocks_per_mb;
 
 const int mb_xy = s->mb_y * s->mb_stride + s->mb_x;
@@ -152,7 +152,7 @@ const int mb_xy = s->mb_y * s->mb_stride + s->mb_x;
     s->current_picture.qscale_table[mb_xy] = s->qscale;
 
 //START OF XVMC specific code
-    render = (struct xvmc_render_state*)s->current_picture.data[2];
+    render = (xvmc_render_state_t*)s->current_picture.data[2];
     assert(render!=NULL);
     assert(render->magic==MP_XVMC_RENDER_MAGIC);
     assert(render->mv_blocks);
diff --git a/libavdevice/bktr.c b/libavdevice/bktr.c
index ea9a6e2..7b37f11 100644
--- a/libavdevice/bktr.c
+++ b/libavdevice/bktr.c
@@ -24,7 +24,6 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#define _BSD_SOURCE 1
 #include "libavformat/avformat.h"
 #if defined (HAVE_DEV_BKTR_IOCTL_METEOR_H) && defined (HAVE_DEV_BKTR_IOCTL_BT848_H)
 # include <dev/bktr/ioctl_meteor.h>
diff --git a/libavdevice/v4l.c b/libavdevice/v4l.c
index c2c67d0..a469ae0 100644
--- a/libavdevice/v4l.c
+++ b/libavdevice/v4l.c
@@ -21,7 +21,6 @@
 
 #undef __STRICT_ANSI__ //workaround due to broken kernel headers
 #include "config.h"
-#include "libavutil/rational.h"
 #include "libavformat/avformat.h"
 #include "libavcodec/dsputil.h"
 #include <unistd.h>
@@ -38,12 +37,13 @@ typedef struct {
     int fd;
     int frame_format; /* see VIDEO_PALETTE_xxx */
     int use_mmap;
-    AVRational time_base;
+    int width, height;
+    int frame_rate;
+    int frame_rate_base;
     int64_t time_frame;
     int frame_size;
     struct video_capability video_cap;
     struct video_audio audio_saved;
-    struct video_window video_win;
     uint8_t *video_buf;
     struct video_mbuf gb_buffers;
     struct video_mmap gb_buf;
@@ -70,7 +70,9 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
 {
     VideoData *s = s1->priv_data;
     AVStream *st;
-    int video_fd;
+    int width, height;
+    int video_fd, frame_size;
+    int ret, frame_rate, frame_rate_base;
     int desired_palette, desired_depth;
     struct video_tuner tuner;
     struct video_audio audio;
@@ -78,27 +80,44 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
     int j;
     int vformat_num = FF_ARRAY_ELEMS(video_formats);
 
+    if (ap->width <= 0 || ap->height <= 0) {
+        av_log(s1, AV_LOG_ERROR, "Wrong size (%dx%d)\n", ap->width, ap->height);
+        return -1;
+    }
     if (ap->time_base.den <= 0) {
         av_log(s1, AV_LOG_ERROR, "Wrong time base (%d)\n", ap->time_base.den);
         return -1;
     }
-    s->time_base = ap->time_base;
 
-    s->video_win.width = ap->width;
-    s->video_win.height = ap->height;
+    width = ap->width;
+    height = ap->height;
+    frame_rate      = ap->time_base.den;
+    frame_rate_base = ap->time_base.num;
+
+    if((unsigned)width > 32767 || (unsigned)height > 32767) {
+        av_log(s1, AV_LOG_ERROR, "Capture size is out of range: %dx%d\n",
+            width, height);
+
+        return -1;
+    }
 
     st = av_new_stream(s1, 0);
     if (!st)
         return AVERROR(ENOMEM);
     av_set_pts_info(st, 64, 1, 1000000); /* 64 bits pts in us */
 
+    s->width = width;
+    s->height = height;
+    s->frame_rate      = frame_rate;
+    s->frame_rate_base = frame_rate_base;
+
     video_fd = open(s1->filename, O_RDWR);
     if (video_fd < 0) {
         av_log(s1, AV_LOG_ERROR, "%s: %s\n", s1->filename, strerror(errno));
         goto fail;
     }
 
-    if (ioctl(video_fd, VIDIOCGCAP, &s->video_cap) < 0) {
+    if (ioctl(video_fd,VIDIOCGCAP, &s->video_cap) < 0) {
         av_log(s1, AV_LOG_ERROR, "VIDIOCGCAP: %s\n", strerror(errno));
         goto fail;
     }
@@ -108,17 +127,6 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
         goto fail;
     }
 
-    /* no values set, autodetect them */
-    if (s->video_win.width <= 0 || s->video_win.height <= 0) {
-        if (ioctl(video_fd, VIDIOCGWIN, &s->video_win, sizeof(s->video_win)) < 0) {
-            av_log(s1, AV_LOG_ERROR, "VIDIOCGWIN: %s\n", strerror(errno));
-            goto fail;
-        }
-    }
-
-    if(avcodec_check_dimensions(s1, s->video_win.width, s->video_win.height) < 0)
-        return -1;
-
     desired_palette = -1;
     desired_depth = -1;
     for (j = 0; j < vformat_num; j++) {
@@ -159,7 +167,7 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
     /* try to choose a suitable video format */
     pict.palette = desired_palette;
     pict.depth= desired_depth;
-    if (desired_palette == -1 || ioctl(video_fd, VIDIOCSPICT, &pict) < 0) {
+    if (desired_palette == -1 || (ret = ioctl(video_fd, VIDIOCSPICT, &pict)) < 0) {
         for (j = 0; j < vformat_num; j++) {
             pict.palette = video_formats[j].palette;
             pict.depth = video_formats[j].depth;
@@ -170,54 +178,53 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
             goto fail1;
     }
 
-    if (ioctl(video_fd, VIDIOCGMBUF, &s->gb_buffers) < 0) {
+    ret = ioctl(video_fd,VIDIOCGMBUF,&s->gb_buffers);
+    if (ret < 0) {
         /* try to use read based access */
+        struct video_window win;
         int val;
 
-        s->video_win.x = 0;
-        s->video_win.y = 0;
-        s->video_win.chromakey = -1;
-        s->video_win.flags = 0;
+        win.x = 0;
+        win.y = 0;
+        win.width = width;
+        win.height = height;
+        win.chromakey = -1;
+        win.flags = 0;
 
-        if (ioctl(video_fd, VIDIOCSWIN, s->video_win) < 0) {
-            av_log(s1, AV_LOG_ERROR, "VIDIOCSWIN: %s\n", strerror(errno));
-            goto fail;
-        }
+        ioctl(video_fd, VIDIOCSWIN, &win);
 
         s->frame_format = pict.palette;
 
         val = 1;
-        if (ioctl(video_fd, VIDIOCCAPTURE, &val) < 0) {
-            av_log(s1, AV_LOG_ERROR, "VIDIOCCAPTURE: %s\n", strerror(errno));
-            goto fail;
-        }
+        ioctl(video_fd, VIDIOCCAPTURE, &val);
 
-        s->time_frame = av_gettime() * s->time_base.den / s->time_base.num;
+        s->time_frame = av_gettime() * s->frame_rate / s->frame_rate_base;
         s->use_mmap = 0;
     } else {
-        s->video_buf = mmap(0, s->gb_buffers.size, PROT_READ|PROT_WRITE, MAP_SHARED, video_fd, 0);
+        s->video_buf = mmap(0,s->gb_buffers.size,PROT_READ|PROT_WRITE,MAP_SHARED,video_fd,0);
         if ((unsigned char*)-1 == s->video_buf) {
-            s->video_buf = mmap(0, s->gb_buffers.size, PROT_READ|PROT_WRITE, MAP_PRIVATE, video_fd, 0);
+            s->video_buf = mmap(0,s->gb_buffers.size,PROT_READ|PROT_WRITE,MAP_PRIVATE,video_fd,0);
             if ((unsigned char*)-1 == s->video_buf) {
                 av_log(s1, AV_LOG_ERROR, "mmap: %s\n", strerror(errno));
                 goto fail;
             }
         }
         s->gb_frame = 0;
-        s->time_frame = av_gettime() * s->time_base.den / s->time_base.num;
+        s->time_frame = av_gettime() * s->frame_rate / s->frame_rate_base;
 
         /* start to grab the first frame */
         s->gb_buf.frame = s->gb_frame % s->gb_buffers.frames;
-        s->gb_buf.height = s->video_win.height;
-        s->gb_buf.width = s->video_win.width;
+        s->gb_buf.height = height;
+        s->gb_buf.width = width;
         s->gb_buf.format = pict.palette;
 
-        if (ioctl(video_fd, VIDIOCMCAPTURE, &s->gb_buf) < 0) {
+        ret = ioctl(video_fd, VIDIOCMCAPTURE, &s->gb_buf);
+        if (ret < 0) {
             if (errno != EAGAIN) {
             fail1:
-                av_log(s1, AV_LOG_ERROR, "VIDIOCMCAPTURE: %s\n", strerror(errno));
+                av_log(s1, AV_LOG_ERROR, "Fatal: grab device does not support suitable format\n");
             } else {
-                av_log(s1, AV_LOG_ERROR, "Fatal: grab device does not receive any video signal\n");
+                av_log(s1, AV_LOG_ERROR,"Fatal: grab device does not receive any video signal\n");
             }
             goto fail;
         }
@@ -231,7 +238,7 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
 
     for (j = 0; j < vformat_num; j++) {
         if (s->frame_format == video_formats[j].palette) {
-            s->frame_size = s->video_win.width * s->video_win.height * video_formats[j].depth / 8;
+            frame_size = width * height * video_formats[j].depth / 8;
             st->codec->pix_fmt = video_formats[j].pix_fmt;
             break;
         }
@@ -241,13 +248,15 @@ static int grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
         goto fail;
 
     s->fd = video_fd;
+    s->frame_size = frame_size;
 
     st->codec->codec_type = CODEC_TYPE_VIDEO;
     st->codec->codec_id = CODEC_ID_RAWVIDEO;
-    st->codec->width = s->video_win.width;
-    st->codec->height = s->video_win.height;
-    st->codec->time_base = s->time_base;
-    st->codec->bit_rate = s->frame_size * 1/av_q2d(st->codec->time_base) * 8;
+    st->codec->width = width;
+    st->codec->height = height;
+    st->codec->time_base.den      = frame_rate;
+    st->codec->time_base.num = frame_rate_base;
+    st->codec->bit_rate = frame_size * 1/av_q2d(st->codec->time_base) * 8;
 
     return 0;
  fail:
@@ -294,9 +303,9 @@ static int grab_read_packet(AVFormatContext *s1, AVPacket *pkt)
     /* wait based on the frame rate */
     for(;;) {
         curtime = av_gettime();
-        delay = s->time_frame * s->time_base.num / s->time_base.den - curtime;
+        delay = s->time_frame  * s->frame_rate_base / s->frame_rate - curtime;
         if (delay <= 0) {
-            if (delay < INT64_C(-1000000) * s->time_base.num / s->time_base.den) {
+            if (delay < INT64_C(-1000000) * s->frame_rate_base / s->frame_rate) {
                 /* printf("grabbing is %d frames late (dropping)\n", (int) -(delay / 16666)); */
                 s->time_frame += INT64_C(1000000);
             }
@@ -340,7 +349,7 @@ static int grab_read_close(AVFormatContext *s1)
 
 AVInputFormat v4l_demuxer = {
     "video4linux",
-    NULL_IF_CONFIG_SMALL("Video4Linux device grab"),
+    NULL_IF_CONFIG_SMALL("video grab"),
     sizeof(VideoData),
     NULL,
     grab_read_header,
diff --git a/libavdevice/v4l2.c b/libavdevice/v4l2.c
index 1efed83..dc0a22d 100644
--- a/libavdevice/v4l2.c
+++ b/libavdevice/v4l2.c
@@ -57,6 +57,8 @@ struct video_data {
     int frame_format; /* V4L2_PIX_FMT_* */
     enum io_method io_method;
     int width, height;
+    int frame_rate;
+    int frame_rate_base;
     int frame_size;
     int top_field_first;
 
@@ -507,19 +509,28 @@ static int v4l2_read_header(AVFormatContext *s1, AVFormatParameters *ap)
     struct video_data *s = s1->priv_data;
     AVStream *st;
     int width, height;
-    int res;
+    int res, frame_rate, frame_rate_base;
     uint32_t desired_format, capabilities;
 
     if (ap->width <= 0 || ap->height <= 0) {
         av_log(s1, AV_LOG_ERROR, "Wrong size (%dx%d)\n", ap->width, ap->height);
         return -1;
     }
+    if (ap->time_base.den <= 0) {
+        av_log(s1, AV_LOG_ERROR, "Wrong time base (%d)\n", ap->time_base.den);
+        return -1;
+    }
 
     width = ap->width;
     height = ap->height;
+    frame_rate = ap->time_base.den;
+    frame_rate_base = ap->time_base.num;
+
+    if((unsigned)width > 32767 || (unsigned)height > 32767) {
+        av_log(s1, AV_LOG_ERROR, "Wrong size (%dx%d)\n", width, height);
 
-    if(avcodec_check_dimensions(s1, ap->width, ap->height) < 0)
         return -1;
+    }
 
     st = av_new_stream(s1, 0);
     if (!st) {
@@ -529,6 +540,8 @@ static int v4l2_read_header(AVFormatContext *s1, AVFormatParameters *ap)
 
     s->width = width;
     s->height = height;
+    s->frame_rate      = frame_rate;
+    s->frame_rate_base = frame_rate_base;
 
     capabilities = 0;
     s->fd = device_open(s1, &capabilities);
@@ -589,8 +602,8 @@ static int v4l2_read_header(AVFormatContext *s1, AVFormatParameters *ap)
     st->codec->codec_id = CODEC_ID_RAWVIDEO;
     st->codec->width = width;
     st->codec->height = height;
-    st->codec->time_base.den = ap->time_base.den;
-    st->codec->time_base.num = ap->time_base.num;
+    st->codec->time_base.den = frame_rate;
+    st->codec->time_base.num = frame_rate_base;
     st->codec->bit_rate = s->frame_size * 1/av_q2d(st->codec->time_base) * 8;
 
     return 0;
@@ -638,7 +651,7 @@ static int v4l2_read_close(AVFormatContext *s1)
 
 AVInputFormat v4l2_demuxer = {
     "video4linux2",
-    NULL_IF_CONFIG_SMALL("Video4Linux2 device grab"),
+    NULL_IF_CONFIG_SMALL("video grab"),
     sizeof(struct video_data),
     NULL,
     v4l2_read_header,
diff --git a/libavdevice/vfwcap.c b/libavdevice/vfwcap.c
index 83e499c..078c186 100644
--- a/libavdevice/vfwcap.c
+++ b/libavdevice/vfwcap.c
@@ -27,6 +27,18 @@
 
 /* Defines for VFW missing from MinGW.
  * Remove this when MinGW incorporates them. */
+#define WM_CAP_START                (0x0400)
+#define WM_CAP_SET_CALLBACK_VIDEOSTREAM (WM_CAP_START + 6)
+#define WM_CAP_DRIVER_CONNECT       (WM_CAP_START + 10)
+#define WM_CAP_DRIVER_DISCONNECT    (WM_CAP_START + 11)
+#define WM_CAP_GET_VIDEOFORMAT      (WM_CAP_START + 44)
+#define WM_CAP_SET_VIDEOFORMAT      (WM_CAP_START + 45)
+#define WM_CAP_SET_PREVIEW          (WM_CAP_START + 50)
+#define WM_CAP_SET_OVERLAY          (WM_CAP_START + 51)
+#define WM_CAP_SEQUENCE_NOFILE      (WM_CAP_START + 63)
+#define WM_CAP_SET_SEQUENCE_SETUP   (WM_CAP_START + 64)
+#define WM_CAP_GET_SEQUENCE_SETUP   (WM_CAP_START + 65)
+
 #define HWND_MESSAGE                ((HWND)-3)
 
 #define BI_RGB                      0
diff --git a/libavdevice/x11grab.c b/libavdevice/x11grab.c
index 8f37f28..4e1a499 100644
--- a/libavdevice/x11grab.c
+++ b/libavdevice/x11grab.c
@@ -55,7 +55,7 @@
 /**
  * X11 Device Demuxer context
  */
-struct x11_grab
+typedef struct x11_grab_s
 {
     int frame_size;          /**< Size in bytes of a grabbed frame */
     AVRational time_base;    /**< Time base */
@@ -71,7 +71,7 @@ struct x11_grab
     int use_shm;             /**< !0 when using XShm extension */
     XShmSegmentInfo shminfo; /**< When using XShm, keeps track of XShm infos */
     int mouse_warning_shown;
-};
+} x11_grab_t;
 
 /**
  * Initializes the x11 grab device demuxer (public device demuxer API).
@@ -87,7 +87,7 @@ struct x11_grab
 static int
 x11grab_read_header(AVFormatContext *s1, AVFormatParameters *ap)
 {
-    struct x11_grab *x11grab = s1->priv_data;
+    x11_grab_t *x11grab = s1->priv_data;
     Display *dpy;
     AVStream *st = NULL;
     int input_pixfmt;
@@ -259,7 +259,7 @@ get_pointer_coordinates(int *x, int *y, Display *dpy, AVFormatContext *s1)
     if (XQueryPointer(dpy, mrootwindow, &mrootwindow, &childwindow,
                       x, y, &dummy, &dummy, (unsigned int*)&dummy)) {
     } else {
-        struct x11_grab *s = s1->priv_data;
+        x11_grab_t *s = s1->priv_data;
         if (!s->mouse_warning_shown) {
             av_log(s1, AV_LOG_INFO, "couldn't find mouse pointer\n");
             s->mouse_warning_shown = 1;
@@ -306,7 +306,7 @@ apply_masks(uint8_t *dst, int and, int or, int bits_per_pixel)
  * @param y Mouse pointer coordinate
  */
 static void
-paint_mouse_pointer(XImage *image, struct x11_grab *s, int x, int y)
+paint_mouse_pointer(XImage *image, x11_grab_t *s, int x, int y)
 {
     /* 16x20x1bpp bitmap for the black channel of the mouse pointer */
     static const uint16_t const mousePointerBlack[] =
@@ -431,7 +431,7 @@ xget_zpixmap(Display *dpy, Drawable d, XImage *image, int x, int y)
 static int
 x11grab_read_packet(AVFormatContext *s1, AVPacket *pkt)
 {
-    struct x11_grab *s = s1->priv_data;
+    x11_grab_t *s = s1->priv_data;
     Display *dpy = s->dpy;
     XImage *image = s->image;
     int x_off = s->x_off;
@@ -495,7 +495,7 @@ x11grab_read_packet(AVFormatContext *s1, AVPacket *pkt)
 static int
 x11grab_read_close(AVFormatContext *s1)
 {
-    struct x11_grab *x11grab = s1->priv_data;
+    x11_grab_t *x11grab = s1->priv_data;
 
     /* Detach cleanly from shared mem */
     if (x11grab->use_shm) {
@@ -520,7 +520,7 @@ AVInputFormat x11_grab_device_demuxer =
 {
     "x11grab",
     NULL_IF_CONFIG_SMALL("X11grab"),
-    sizeof(struct x11_grab),
+    sizeof(x11_grab_t),
     NULL,
     x11grab_read_header,
     x11grab_read_packet,
diff --git a/libavfilter/Makefile b/libavfilter/Makefile
index 9da8f91..1cd4992 100644
--- a/libavfilter/Makefile
+++ b/libavfilter/Makefile
@@ -5,8 +5,6 @@ FFLIBS = avcodec avutil
 FFLIBS-$(CONFIG_SWSCALE)       += swscale
 FFLIBS-$(CONFIG_AVFILTER_LAVF) += avformat
 
-HEADERS = avfilter.h
-
 OBJS = allfilters.o                                                     \
        avfilter.o                                                       \
        defaults.o                                                       \
@@ -14,4 +12,6 @@ OBJS = allfilters.o                                                     \
 
 #OBJS-$(CONFIG_XXX_FILTER)    += vf_xxx.o
 
+HEADERS = avfilter.h
+
 include $(SUBDIR)../subdir.mak
diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
index 218a83b..d6f07a9 100644
--- a/libavfilter/avfilter.c
+++ b/libavfilter/avfilter.c
@@ -90,7 +90,7 @@ int avfilter_link(AVFilterContext *src, unsigned srcpad,
     link->dst     = dst;
     link->srcpad  = srcpad;
     link->dstpad  = dstpad;
-    link->format  = PIX_FMT_NONE;
+    link->format  = -1;
 
     return 0;
 }
diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h
index 75d8c76..ff08f71 100644
--- a/libavfilter/avfilter.h
+++ b/libavfilter/avfilter.h
@@ -257,7 +257,7 @@ struct AVFilterPad
     enum CodecType type;
 
     /**
-     * Minimum required permissions on incoming buffers.  Any buffer with
+     * Minimum required permissions on incoming buffers.  Any buffers with
      * insufficient permissions will be automatically copied by the filter
      * system to a new buffer which provides the needed access permissions.
      *
@@ -267,10 +267,9 @@ struct AVFilterPad
 
     /**
      * Permissions which are not accepted on incoming buffers.  Any buffer
-     * which has any of these permissions set will be automatically copied
-     * by the filter system to a new buffer which does not have those
-     * permissions.  This can be used to easily disallow buffers with
-     * AV_PERM_REUSE.
+     * which has any of these permissions set be automatically copied by the
+     * filter system to a new buffer which does not have those permissions.
+     * This can be used to easily disallow buffers with AV_PERM_REUSE.
      *
      * Input pads only.
      */
@@ -510,8 +509,7 @@ int avfilter_request_frame(AVFilterLink *link);
 /**
  * Poll a frame from the filter chain.
  * @param  link the input link
- * @return the number of immediately available frames, a negative
- * number in case of error
+ * @return      the number of imediately available frames
  */
 int avfilter_poll_frame(AVFilterLink *link);
 
diff --git a/libavfilter/avfiltergraph.h b/libavfilter/avfiltergraph.h
index dee8a90..0558de3 100644
--- a/libavfilter/avfiltergraph.h
+++ b/libavfilter/avfiltergraph.h
@@ -30,10 +30,7 @@ typedef struct AVFilterGraph {
 } AVFilterGraph;
 
 /**
- * Get from \p graph a filter instance with name \p name.
- *
- * @return the pointer to the found filter instance or NULL if it
- * cannot be found.
+ * Get a pointer to a graph by instance name
  */
 AVFilterContext *avfilter_graph_get_filter(AVFilterGraph *graph, char *name);
 
diff --git a/libavfilter/graphparser.c b/libavfilter/graphparser.c
index e7019ea..25c5c4d 100644
--- a/libavfilter/graphparser.c
+++ b/libavfilter/graphparser.c
@@ -119,43 +119,43 @@ static char *parse_link_name(const char **buf, AVClass *log_ctx)
 }
 
 static AVFilterContext *create_filter(AVFilterGraph *ctx, int index,
-                                      const char *filt_name, const char *args,
+                                      const char *name, const char *args,
                                       AVClass *log_ctx)
 {
-    AVFilterContext *filt_ctx;
+    AVFilterContext *filt;
 
-    AVFilter *filt;
+    AVFilter *filterdef;
     char inst_name[30];
 
     snprintf(inst_name, sizeof(inst_name), "Parsed filter %d", index);
 
-    filt = avfilter_get_by_name(filt_name);
+    filterdef = avfilter_get_by_name(name);
 
-    if(!filt) {
+    if(!filterdef) {
         av_log(log_ctx, AV_LOG_ERROR,
-               "no such filter: '%s'\n", filt_name);
+               "no such filter: '%s'\n", name);
         return NULL;
     }
 
-    filt_ctx = avfilter_open(filt, inst_name);
-    if(!filt_ctx) {
+    filt = avfilter_open(filterdef, inst_name);
+    if(!filt) {
         av_log(log_ctx, AV_LOG_ERROR,
-               "error creating filter '%s'\n", filt_name);
+               "error creating filter '%s'\n", name);
         return NULL;
     }
 
-    if(avfilter_graph_add_filter(ctx, filt_ctx) < 0) {
-        avfilter_destroy(filt_ctx);
+    if(avfilter_graph_add_filter(ctx, filt) < 0) {
+        avfilter_destroy(filt);
         return NULL;
     }
 
-    if(avfilter_init_filter(filt_ctx, args, NULL)) {
+    if(avfilter_init_filter(filt, args, NULL)) {
         av_log(log_ctx, AV_LOG_ERROR,
-               "error initializing filter '%s' with args '%s'\n", filt_name, args);
+               "error initializing filter '%s' with args '%s'\n", name, args);
         return NULL;
     }
 
-    return filt_ctx;
+    return filt;
 }
 
 /**
@@ -211,13 +211,13 @@ static void insert_inout(AVFilterInOut **inouts, AVFilterInOut *element)
 }
 
 static int link_filter_inouts(AVFilterContext *filter,
-                              AVFilterInOut **curr_inputs,
-                              AVFilterInOut **open_inputs, AVClass *log_ctx)
+                              AVFilterInOut **currInputs,
+                              AVFilterInOut **openInputs, AVClass *log_ctx)
 {
     int pad = filter->input_count;
 
     while(pad--) {
-        AVFilterInOut *p = *curr_inputs;
+        AVFilterInOut *p = *currInputs;
         if(!p) {
             av_log(log_ctx, AV_LOG_ERROR,
                    "Not enough inputs specified for the \"%s\" filter.\n",
@@ -225,7 +225,7 @@ static int link_filter_inouts(AVFilterContext *filter,
             return -1;
         }
 
-        *curr_inputs = (*curr_inputs)->next;
+        *currInputs = (*currInputs)->next;
 
         if(p->filter) {
             if(link_filter(p->filter, p->pad_idx, filter, pad, log_ctx))
@@ -235,11 +235,11 @@ static int link_filter_inouts(AVFilterContext *filter,
         } else {
             p->filter = filter;
             p->pad_idx = pad;
-            insert_inout(open_inputs, p);
+            insert_inout(openInputs, p);
         }
     }
 
-    if(*curr_inputs) {
+    if(*currInputs) {
         av_log(log_ctx, AV_LOG_ERROR,
                "Too many inputs specified for the \"%s\" filter.\n",
                filter->filter->name);
@@ -251,14 +251,14 @@ static int link_filter_inouts(AVFilterContext *filter,
         AVFilterInOut *currlinkn = av_mallocz(sizeof(AVFilterInOut));
         currlinkn->filter  = filter;
         currlinkn->pad_idx = pad;
-        insert_inout(curr_inputs, currlinkn);
+        insert_inout(currInputs, currlinkn);
     }
 
     return 0;
 }
 
-static int parse_inputs(const char **buf, AVFilterInOut **curr_inputs,
-                        AVFilterInOut **open_outputs, AVClass *log_ctx)
+static int parse_inputs(const char **buf, AVFilterInOut **currInputs,
+                        AVFilterInOut **openOutputs, AVClass *log_ctx)
 {
     int pad = 0;
 
@@ -269,8 +269,8 @@ static int parse_inputs(const char **buf, AVFilterInOut **curr_inputs,
         if(!name)
             return -1;
 
-        /* First check if the label is not in the open_outputs list */
-        match = extract_inout(name, open_outputs);
+        /* First check if the label is not in the openOutputs list */
+        match = extract_inout(name, openOutputs);
 
         if(match) {
             av_free(name);
@@ -281,7 +281,7 @@ static int parse_inputs(const char **buf, AVFilterInOut **curr_inputs,
             match->pad_idx = pad;
         }
 
-        insert_inout(curr_inputs, match);
+        insert_inout(currInputs, match);
 
         *buf += consume_whitespace(*buf);
         pad++;
@@ -290,9 +290,9 @@ static int parse_inputs(const char **buf, AVFilterInOut **curr_inputs,
     return pad;
 }
 
-static int parse_outputs(const char **buf, AVFilterInOut **curr_inputs,
-                         AVFilterInOut **open_inputs,
-                         AVFilterInOut **open_outputs, AVClass *log_ctx)
+static int parse_outputs(const char **buf, AVFilterInOut **currInputs,
+                         AVFilterInOut **openInputs,
+                         AVFilterInOut **openOutputs, AVClass *log_ctx)
 {
     int pad = 0;
 
@@ -300,14 +300,14 @@ static int parse_outputs(const char **buf, AVFilterInOut **curr_inputs,
         char *name = parse_link_name(buf, log_ctx);
         AVFilterInOut *match;
 
-        AVFilterInOut *input = *curr_inputs;
-        *curr_inputs = (*curr_inputs)->next;
+        AVFilterInOut *input = *currInputs;
+        *currInputs = (*currInputs)->next;
 
         if(!name)
             return -1;
 
-        /* First check if the label is not in the open_inputs list */
-        match = extract_inout(name, open_inputs);
+        /* First check if the label is not in the openInputs list */
+        match = extract_inout(name, openInputs);
 
         if(match) {
             if(link_filter(input->filter, input->pad_idx,
@@ -318,9 +318,9 @@ static int parse_outputs(const char **buf, AVFilterInOut **curr_inputs,
             av_free(match);
             av_free(input);
         } else {
-            /* Not in the list, so add the first input as a open_output */
+            /* Not in the list, so add the first input as a openOutput */
             input->name = name;
-            insert_inout(open_outputs, input);
+            insert_inout(openOutputs, input);
         }
         *buf += consume_whitespace(*buf);
         pad++;
@@ -330,19 +330,19 @@ static int parse_outputs(const char **buf, AVFilterInOut **curr_inputs,
 }
 
 int avfilter_parse_graph(AVFilterGraph *graph, const char *filters,
-                         AVFilterInOut *open_inputs,
-                         AVFilterInOut *open_outputs, AVClass *log_ctx)
+                         AVFilterInOut *openInputs,
+                         AVFilterInOut *openOutputs, AVClass *log_ctx)
 {
     int index = 0;
     char chr = 0;
 
-    AVFilterInOut *curr_inputs = NULL;
+    AVFilterInOut *currInputs = NULL;
 
     do {
         AVFilterContext *filter;
         filters += consume_whitespace(filters);
 
-        if(parse_inputs(&filters, &curr_inputs, &open_outputs, log_ctx) < 0)
+        if(parse_inputs(&filters, &currInputs, &openOutputs, log_ctx) < 0)
             goto fail;
 
         filter = parse_filter(&filters, graph, index, log_ctx);
@@ -350,24 +350,24 @@ int avfilter_parse_graph(AVFilterGraph *graph, const char *filters,
         if(!filter)
             goto fail;
 
-        if(filter->input_count == 1 && !curr_inputs && !index) {
-            /* First input can be omitted if it is "[in]" */
+        if(filter->input_count == 1 && !currInputs && !index) {
+            /* First input can be ommitted if it is "[in]" */
             const char *tmp = "[in]";
-            if(parse_inputs(&tmp, &curr_inputs, &open_outputs, log_ctx) < 0)
+            if(parse_inputs(&tmp, &currInputs, &openOutputs, log_ctx) < 0)
                 goto fail;
         }
 
-        if(link_filter_inouts(filter, &curr_inputs, &open_inputs, log_ctx) < 0)
+        if(link_filter_inouts(filter, &currInputs, &openInputs, log_ctx) < 0)
             goto fail;
 
-        if(parse_outputs(&filters, &curr_inputs, &open_inputs, &open_outputs,
+        if(parse_outputs(&filters, &currInputs, &openInputs, &openOutputs,
                          log_ctx) < 0)
             goto fail;
 
         filters += consume_whitespace(filters);
         chr = *filters++;
 
-        if(chr == ';' && curr_inputs) {
+        if(chr == ';' && currInputs) {
             av_log(log_ctx, AV_LOG_ERROR,
                    "Could not find a output to link when parsing \"%s\"\n",
                    filters - 1);
@@ -376,11 +376,11 @@ int avfilter_parse_graph(AVFilterGraph *graph, const char *filters,
         index++;
     } while(chr == ',' || chr == ';');
 
-    if(open_inputs && !strcmp(open_inputs->name, "out") && curr_inputs) {
-        /* Last output can be omitted if it is "[out]" */
+    if(openInputs && !strcmp(openInputs->name, "out") && currInputs) {
+        /* Last output can be ommitted if it is "[out]" */
         const char *tmp = "[out]";
-        if(parse_outputs(&tmp, &curr_inputs, &open_inputs,
-                         &open_outputs, log_ctx) < 0)
+        if(parse_outputs(&tmp, &currInputs, &openInputs,
+                         &openOutputs, log_ctx) < 0)
             goto fail;
     }
 
@@ -388,8 +388,8 @@ int avfilter_parse_graph(AVFilterGraph *graph, const char *filters,
 
  fail:
     avfilter_destroy_graph(graph);
-    free_inout(open_inputs);
-    free_inout(open_outputs);
-    free_inout(curr_inputs);
+    free_inout(openInputs);
+    free_inout(openOutputs);
+    free_inout(currInputs);
     return -1;
 }
diff --git a/libavfilter/graphparser.h b/libavfilter/graphparser.h
index 725b728..eddc6b0 100644
--- a/libavfilter/graphparser.h
+++ b/libavfilter/graphparser.h
@@ -38,11 +38,10 @@ typedef struct AVFilterInOut {
 
 /**
  * Add to a graph a graph described by a string.
- *
  * @param graph   the filter graph where to link the parsed graph context
  * @param filters string to be parsed
- * @param inputs  linked list to the inputs of the graph
- * @param outputs linked list to the outputs of the graph
+ * @param inouts  linked list to the inputs and outputs of the graph
+ * @param outpad  pad index of the output
  * @return        zero on success, -1 on error
  */
 int avfilter_parse_graph(AVFilterGraph *graph, const char *filters,
diff --git a/libavformat/Makefile b/libavformat/Makefile
index 10a461c..de5cae2 100644
--- a/libavformat/Makefile
+++ b/libavformat/Makefile
@@ -3,9 +3,9 @@ include $(SUBDIR)../config.mak
 NAME = avformat
 FFLIBS = avcodec avutil
 
-HEADERS = avformat.h avio.h rtsp.h rtspcodes.h
+OBJS = allformats.o cutils.o os_support.o sdp.o utils.o
 
-OBJS = allformats.o cutils.o metadata.o metadata_compat.o os_support.o sdp.o utils.o
+HEADERS = avformat.h avio.h rtsp.h rtspcodes.h
 
 # muxers/demuxers
 OBJS-$(CONFIG_AAC_DEMUXER)               += raw.o
@@ -81,9 +81,9 @@ OBJS-$(CONFIG_IPOD_MUXER)                += movenc.o riff.o isom.o avc.o
 OBJS-$(CONFIG_LMLM4_DEMUXER)             += lmlm4.o
 OBJS-$(CONFIG_M4V_DEMUXER)               += raw.o
 OBJS-$(CONFIG_M4V_MUXER)                 += raw.o
-OBJS-$(CONFIG_MATROSKA_AUDIO_MUXER)      += matroskaenc.o matroska.o riff.o isom.o avc.o
-OBJS-$(CONFIG_MATROSKA_DEMUXER)          += matroskadec.o matroska.o riff.o isom.o
-OBJS-$(CONFIG_MATROSKA_MUXER)            += matroskaenc.o matroska.o riff.o isom.o avc.o
+OBJS-$(CONFIG_MATROSKA_AUDIO_MUXER)      += matroskaenc.o matroska.o riff.o avc.o
+OBJS-$(CONFIG_MATROSKA_DEMUXER)          += matroskadec.o matroska.o riff.o
+OBJS-$(CONFIG_MATROSKA_MUXER)            += matroskaenc.o matroska.o riff.o avc.o
 OBJS-$(CONFIG_MJPEG_DEMUXER)             += raw.o
 OBJS-$(CONFIG_MJPEG_MUXER)               += raw.o
 OBJS-$(CONFIG_MLP_DEMUXER)               += raw.o
@@ -158,9 +158,9 @@ OBJS-$(CONFIG_ROQ_DEMUXER)               += idroq.o
 OBJS-$(CONFIG_ROQ_MUXER)                 += raw.o
 OBJS-$(CONFIG_RPL_DEMUXER)               += rpl.o
 OBJS-$(CONFIG_RTP_MUXER)                 += rtp.o         \
-                                            rtp_aac.o     \
-                                            rtp_mpv.o     \
                                             rtpenc.o      \
+                                            rtp_mpv.o     \
+                                            rtp_aac.o     \
                                             rtpenc_h264.o \
                                             avc.o
 OBJS-$(CONFIG_RTSP_DEMUXER)              += rdt.o rtsp.o
diff --git a/libavformat/allformats.c b/libavformat/allformats.c
index 43243f8..8c0cd5d 100644
--- a/libavformat/allformats.c
+++ b/libavformat/allformats.c
@@ -23,18 +23,15 @@
 #include "rdt.h"
 
 #define REGISTER_MUXER(X,x) { \
-    extern AVOutputFormat x##_muxer; \
-    if(ENABLE_##X##_MUXER) av_register_output_format(&x##_muxer); }
-
+          extern AVOutputFormat x##_muxer; \
+          if(ENABLE_##X##_MUXER)   av_register_output_format(&x##_muxer); }
 #define REGISTER_DEMUXER(X,x) { \
-    extern AVInputFormat x##_demuxer; \
-    if(ENABLE_##X##_DEMUXER) av_register_input_format(&x##_demuxer); }
-
+          extern AVInputFormat x##_demuxer; \
+          if(ENABLE_##X##_DEMUXER) av_register_input_format(&x##_demuxer); }
 #define REGISTER_MUXDEMUX(X,x)  REGISTER_MUXER(X,x); REGISTER_DEMUXER(X,x)
-
 #define REGISTER_PROTOCOL(X,x) { \
-    extern URLProtocol x##_protocol; \
-    if(ENABLE_##X##_PROTOCOL) register_protocol(&x##_protocol); }
+          extern URLProtocol x##_protocol; \
+          if(ENABLE_##X##_PROTOCOL) register_protocol(&x##_protocol); }
 
 /* If you do not call this function, then you can select exactly which
    formats you want to support */
@@ -50,6 +47,7 @@ void av_register_all(void)
         return;
     initialized = 1;
 
+    avcodec_init();
     avcodec_register_all();
 
     /* (de)muxers */
diff --git a/libavformat/asf.c b/libavformat/asf.c
index 33cde4c..e8b9144 100644
--- a/libavformat/asf.c
+++ b/libavformat/asf.c
@@ -26,7 +26,7 @@
 #include "asf.h"
 #include "asfcrypt.h"
 
-void ff_mms_set_stream_selection(URLContext *h, AVFormatContext *format);
+extern void ff_mms_set_stream_selection(URLContext *h, AVFormatContext *format);
 
 #undef NDEBUG
 #include <assert.h>
@@ -555,14 +555,19 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
     default: var = defval; break; \
     }
 
-int ff_asf_get_packet(AVFormatContext *s, ByteIOContext *pb)
+/**
+ *
+ * @return <0 in case of an error
+ */
+static int asf_get_packet(AVFormatContext *s)
 {
     ASFContext *asf = s->priv_data;
+    ByteIOContext *pb = s->pb;
     uint32_t packet_length, padsize;
     int rsize = 8;
     int c, d, e, off;
 
-    off= (url_ftell(pb) - s->data_offset) % asf->packet_size + 3;
+    off= (url_ftell(s->pb) - s->data_offset) % asf->packet_size + 3;
 
     c=d=e=-1;
     while(off-- > 0){
@@ -629,8 +634,9 @@ int ff_asf_get_packet(AVFormatContext *s, ByteIOContext *pb)
  *
  * @return <0 if error
  */
-static int asf_read_frame_header(AVFormatContext *s, ByteIOContext *pb){
+static int asf_read_frame_header(AVFormatContext *s){
     ASFContext *asf = s->priv_data;
+    ByteIOContext *pb = s->pb;
     int rsize = 1;
     int num = get_byte(pb);
     int64_t ts0, ts1;
@@ -699,10 +705,12 @@ static int asf_read_frame_header(AVFormatContext *s, ByteIOContext *pb){
     return 0;
 }
 
-int ff_asf_parse_packet(AVFormatContext *s, ByteIOContext *pb, AVPacket *pkt)
+static int asf_read_packet(AVFormatContext *s, AVPacket *pkt)
 {
     ASFContext *asf = s->priv_data;
     ASFStream *asf_st = 0;
+    ByteIOContext *pb = s->pb;
+    //static int pc = 0;
     for (;;) {
         if(url_feof(pb))
             return AVERROR(EIO);
@@ -715,14 +723,19 @@ int ff_asf_parse_packet(AVFormatContext *s, ByteIOContext *pb, AVPacket *pkt)
             /* fail safe */
             url_fskip(pb, ret);
 
-            asf->packet_pos= url_ftell(pb);
+            asf->packet_pos= url_ftell(s->pb);
             if (asf->data_object_size != (uint64_t)-1 &&
                 (asf->packet_pos - asf->data_object_offset >= asf->data_object_size))
                 return AVERROR(EIO); /* Do not exceed the size of the data object */
-            return 1;
+            ret = asf_get_packet(s);
+            //printf("READ ASF PACKET  %d   r:%d   c:%d\n", ret, asf->packet_size_left, pc++);
+            if (ret < 0)
+                assert(asf->packet_size_left < FRAME_HEADER_SIZE || asf->packet_segments < 1);
+            asf->packet_time_start = 0;
+            continue;
         }
         if (asf->packet_time_start == 0) {
-            if(asf_read_frame_header(s, pb) < 0){
+            if(asf_read_frame_header(s) < 0){
                 asf->packet_segments= 0;
                 continue;
             }
@@ -778,7 +791,7 @@ int ff_asf_parse_packet(AVFormatContext *s, ByteIOContext *pb, AVPacket *pkt)
             /* new packet */
             av_new_packet(&asf_st->pkt, asf->packet_obj_size);
             asf_st->seq = asf->packet_seq;
-            asf_st->pkt.dts = asf->packet_frag_timestamp;
+            asf_st->pkt.pts = asf->packet_frag_timestamp;
             asf_st->pkt.stream_index = asf->stream_index;
             asf_st->pkt.pos =
             asf_st->packet_pos= asf->packet_pos;
@@ -866,24 +879,6 @@ int ff_asf_parse_packet(AVFormatContext *s, ByteIOContext *pb, AVPacket *pkt)
     return 0;
 }
 
-static int asf_read_packet(AVFormatContext *s, AVPacket *pkt)
-{
-    ASFContext *asf = s->priv_data;
-
-    for (;;) {
-        int ret;
-
-        /* parse cached packets, if any */
-        if ((ret = ff_asf_parse_packet(s, s->pb, pkt)) <= 0)
-            return ret;
-        if ((ret = ff_asf_get_packet(s, s->pb)) < 0)
-            assert(asf->packet_size_left < FRAME_HEADER_SIZE || asf->packet_segments < 1);
-        asf->packet_time_start = 0;
-    }
-
-    return 0;
-}
-
 // Added to support seeking after packets have been read
 // If information is not reset, read_packet fails due to
 // leftover information from previous reads
diff --git a/libavformat/asf.h b/libavformat/asf.h
index afb015e..4ccae10 100644
--- a/libavformat/asf.h
+++ b/libavformat/asf.h
@@ -286,25 +286,4 @@ static const GUID my_guid = {
 
 #define ASF_PL_FLAG_KEY_FRAME 0x80 //1000 0000
 
-extern AVInputFormat asf_demuxer;
-
-/**
- * Load a single ASF packet into the demuxer.
- * @param s demux context
- * @param pb context to read data from
- * @returns 0 on success, <0 on error
- */
-int ff_asf_get_packet(AVFormatContext *s, ByteIOContext *pb);
-
-/**
- * Parse data from individual ASF packets (which were previously loaded
- * with asf_get_packet()).
- * @param s demux context
- * @param pb context to read data from
- * @param pkt pointer to store packet data into
- * @returns 0 if data was stored in pkt, <0 on error or 1 if more ASF
- *          packets need to be loaded (through asf_get_packet())
- */
-int ff_asf_parse_packet(AVFormatContext *s, ByteIOContext *pb, AVPacket *pkt);
-
 #endif /* AVFORMAT_ASF_H */
diff --git a/libavformat/avformat.h b/libavformat/avformat.h
index e8b7100..78e7878 100644
--- a/libavformat/avformat.h
+++ b/libavformat/avformat.h
@@ -46,59 +46,6 @@ unsigned avformat_version(void);
 
 #include "avio.h"
 
-
-/*
- * Public Metadata API.
- * The metadata API allows libavformat to export metadata tags to a client
- * application using a sequence of key/value pairs.
- * Important concepts to keep in mind:
- * 1. Keys are unique; there can never be 2 tags with the same key. This is
- *    also meant semantically, i.e., a demuxer should not knowingly produce
- *    several keys that are literally different but semantically identical.
- *    E.g., key=Author5, key=Author6. In this example, all authors must be
- *    placed in the same tag.
- * 2. Metadata is flat, not hierarchical; there are no subtags. If you
- *    want to store, e.g., the email address of the child of producer Alice
- *    and actor Bob, that could have key=alice_and_bobs_childs_email_address.
- * 3. A tag whose value is localized for a particular language is appended
- *    with a dash character ('-') and the ISO 639 3-letter language code.
- *    For example: Author-ger=Michael, Author-eng=Mike
- *    The original/default language is in the unqualified "Author" tag.
- *    A demuxer should set a default if it sets any translated tag.
- */
-
-#define AV_METADATA_IGNORE_CASE     1
-#define AV_METADATA_IGNORE_SUFFIX   2
-
-typedef struct {
-    char *key;
-    char *value;
-}AVMetadataTag;
-
-typedef struct AVMetadata AVMetadata;
-
-/**
- * gets a metadata element with matching key.
- * @param prev set to the previous matching element to find the next.
- * @param flags allows case as well as suffix insensitive comparissions.
- * @return found tag or NULL, changing key or value leads to undefined behavior.
- */
-AVMetadataTag *
-av_metadata_get(AVMetadata *m, const char *key, const AVMetadataTag *prev, int flags);
-
-/**
- * sets the given tag in m, overwriting an existing tag.
- * @param tag tag to add to m, key and value will be av_strduped.
- * @return >= 0 if success otherwise error code that is <0.
- */
-int av_metadata_set(AVMetadata **m, AVMetadataTag tag);
-
-/**
- * Free all the memory allocated for an AVMetadata struct.
- */
-void av_metadata_free(AVMetadata **m);
-
-
 /* packet functions */
 
 typedef struct AVPacket {
@@ -213,7 +160,7 @@ static inline void av_free_packet(AVPacket *pkt)
 */
 typedef struct AVFrac {
     int64_t val, num, den;
-} AVFrac;
+} AVFrac attribute_deprecated;
 
 /*************************************************/
 /* input/output formats */
@@ -485,8 +432,6 @@ typedef struct AVStream {
      * - decoding: Set by libavformat.
      */
     AVRational sample_aspect_ratio;
-
-    AVMetadata *metadata;
 } AVStream;
 
 #define AV_PROGRAM_RUNNING 1
@@ -505,7 +450,6 @@ typedef struct AVProgram {
     enum AVDiscard discard;        ///< selects which program to discard and which to feed to the caller
     unsigned int   *stream_index;
     unsigned int   nb_stream_indexes;
-    AVMetadata *metadata;
 } AVProgram;
 
 #define AVFMTCTX_NOHEADER      0x0001 /**< signal that no header is present
@@ -516,7 +460,6 @@ typedef struct AVChapter {
     AVRational time_base;   ///< time base in which the start/end timestamps are specified
     int64_t start, end;     ///< chapter start/end time in time_base units
     char *title;            ///< chapter title
-    AVMetadata *metadata;
 } AVChapter;
 
 #define MAX_STREAMS 20
@@ -665,8 +608,6 @@ typedef struct AVFormatContext {
     struct AVPacketList *raw_packet_buffer_end;
 
     struct AVPacketList *packet_buffer_end;
-
-    AVMetadata *metadata;
 } AVFormatContext;
 
 typedef struct AVPacketList {
@@ -753,8 +694,8 @@ void av_pkt_dump_log(void *avcl, int level, AVPacket *pkt, int dump_payload);
 void av_register_all(void);
 
 /** codec tag <-> codec id */
-enum CodecID av_codec_get_id(const struct AVCodecTag * const *tags, unsigned int tag);
-unsigned int av_codec_get_tag(const struct AVCodecTag * const *tags, enum CodecID id);
+enum CodecID av_codec_get_id(const struct AVCodecTag **tags, unsigned int tag);
+unsigned int av_codec_get_tag(const struct AVCodecTag **tags, enum CodecID id);
 
 /* media file input */
 
@@ -1077,7 +1018,6 @@ void dump_format(AVFormatContext *ic,
                  const char *url,
                  int is_output);
 
-#if LIBAVFORMAT_VERSION_MAJOR < 53
 /**
  * Parses width and height out of string str.
  * @deprecated Use av_parse_video_frame_size instead.
@@ -1091,7 +1031,6 @@ attribute_deprecated int parse_image_size(int *width_ptr, int *height_ptr,
  */
 attribute_deprecated int parse_frame_rate(int *frame_rate, int *frame_rate_base,
                                           const char *arg);
-#endif
 
 /**
  * Parses \p datestr and returns a corresponding number of microseconds.
diff --git a/libavformat/avidec.c b/libavformat/avidec.c
index 14f0ebd..eaccd41 100644
--- a/libavformat/avidec.c
+++ b/libavformat/avidec.c
@@ -163,7 +163,7 @@ static int read_braindead_odml_indx(AVFormatContext *s, int frame_num){
 #endif
             if(last_pos == pos || pos == base - 8)
                 avi->non_interleaved= 1;
-            if(last_pos != pos)
+            else
                 av_add_index_entry(st, pos, ast->cum_len / FFMAX(1, ast->sample_size), len, 0, key ? AVINDEX_KEYFRAME : 0);
 
             if(ast->sample_size)
@@ -216,17 +216,13 @@ static void clean_index(AVFormatContext *s){
     }
 }
 
-static int avi_read_tag(AVFormatContext *s, const char *key, unsigned int size)
+static int avi_read_tag(ByteIOContext *pb, char *buf, int maxlen,  unsigned int size)
 {
-    ByteIOContext *pb = s->pb;
-    uint8_t value[1024];
-
     int64_t i = url_ftell(pb);
     size += (size & 1);
-    get_strz(pb, value, sizeof(value));
+    get_strz(pb, buf, maxlen);
     url_fseek(pb, i+size, SEEK_SET);
-
-    return av_metadata_set(&s->metadata, (const AVMetadataTag){key, value});
+    return 0;
 }
 
 static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap)
@@ -239,6 +235,7 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap)
     int i;
     AVStream *st;
     AVIStream *ast = NULL;
+    char str_track[4];
     int avih_width=0, avih_height=0;
     int amv_file_format=0;
 
@@ -564,25 +561,26 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap)
             url_fseek(pb, size, SEEK_CUR);
             break;
         case MKTAG('I', 'N', 'A', 'M'):
-            avi_read_tag(s, "Title", size);
+            avi_read_tag(pb, s->title, sizeof(s->title), size);
             break;
         case MKTAG('I', 'A', 'R', 'T'):
-            avi_read_tag(s, "Artist", size);
+            avi_read_tag(pb, s->author, sizeof(s->author), size);
             break;
         case MKTAG('I', 'C', 'O', 'P'):
-            avi_read_tag(s, "Copyright", size);
+            avi_read_tag(pb, s->copyright, sizeof(s->copyright), size);
             break;
         case MKTAG('I', 'C', 'M', 'T'):
-            avi_read_tag(s, "Comment", size);
+            avi_read_tag(pb, s->comment, sizeof(s->comment), size);
             break;
         case MKTAG('I', 'G', 'N', 'R'):
-            avi_read_tag(s, "Genre", size);
+            avi_read_tag(pb, s->genre, sizeof(s->genre), size);
             break;
         case MKTAG('I', 'P', 'R', 'D'):
-            avi_read_tag(s, "Album", size);
+            avi_read_tag(pb, s->album, sizeof(s->album), size);
             break;
         case MKTAG('I', 'P', 'R', 'T'):
-            avi_read_tag(s, "Track", size);
+            avi_read_tag(pb, str_track, sizeof(str_track), size);
+            sscanf(str_track, "%d", &s->track);
             break;
         default:
             if(size > 1000000){
@@ -670,12 +668,8 @@ static int avi_read_packet(AVFormatContext *s, AVPacket *pkt)
         best_ts= av_rescale(best_ts, best_st->time_base.den, AV_TIME_BASE * (int64_t)best_st->time_base.num); //FIXME a little ugly
         if(best_ast->remaining)
             i= av_index_search_timestamp(best_st, best_ts, AVSEEK_FLAG_ANY | AVSEEK_FLAG_BACKWARD);
-        else{
+        else
             i= av_index_search_timestamp(best_st, best_ts, AVSEEK_FLAG_ANY);
-            if(i>=0)
-                best_ast->frame_offset= best_st->index_entries[i].timestamp
-                                      * FFMAX(1, best_ast->sample_size);
-        }
 
 //        av_log(NULL, AV_LOG_DEBUG, "%d\n", i);
         if(i>=0){
diff --git a/libavformat/avienc.c b/libavformat/avienc.c
index cea513f..a672e8d 100644
--- a/libavformat/avienc.c
+++ b/libavformat/avienc.c
@@ -103,15 +103,6 @@ static void avi_write_info_tag(ByteIOContext *pb, const char *tag, const char *s
     }
 }
 
-static void avi_write_info_tag2(AVFormatContext *s, const char *fourcc, const char *key1, const char *key2)
-{
-    AVMetadataTag *tag= av_metadata_get(s->metadata, key1, NULL, AV_METADATA_IGNORE_CASE);
-    if(!tag && key2)
-        tag= av_metadata_get(s->metadata, key2, NULL, AV_METADATA_IGNORE_CASE);
-    if(tag)
-        avi_write_info_tag(s->pb, fourcc, tag->value);
-}
-
 static int avi_write_counters(AVFormatContext* s, int riff_id)
 {
     ByteIOContext *pb = s->pb;
@@ -341,13 +332,17 @@ static int avi_write_header(AVFormatContext *s)
 
     list2 = start_tag(pb, "LIST");
     put_tag(pb, "INFO");
-    avi_write_info_tag2(s, "INAM", "Title", NULL);
-    avi_write_info_tag2(s, "IART", "Artist", "Author");
-    avi_write_info_tag2(s, "ICOP", "Copyright", NULL);
-    avi_write_info_tag2(s, "ICMT", "Comment", NULL);
-    avi_write_info_tag2(s, "IPRD", "Album", NULL);
-    avi_write_info_tag2(s, "IGNR", "Genre", NULL);
-    avi_write_info_tag2(s, "IPRT", "Track", NULL);
+    avi_write_info_tag(pb, "INAM", s->title);
+    avi_write_info_tag(pb, "IART", s->author);
+    avi_write_info_tag(pb, "ICOP", s->copyright);
+    avi_write_info_tag(pb, "ICMT", s->comment);
+    avi_write_info_tag(pb, "IPRD", s->album);
+    avi_write_info_tag(pb, "IGNR", s->genre);
+    if (s->track) {
+        char str_track[4];
+        snprintf(str_track, 4, "%d", s->track);
+        avi_write_info_tag(pb, "IPRT", str_track);
+    }
     if(!(s->streams[0]->codec->flags & CODEC_FLAG_BITEXACT))
         avi_write_info_tag(pb, "ISFT", LIBAVFORMAT_IDENT);
     end_tag(pb, list2);
diff --git a/libavformat/avio.h b/libavformat/avio.h
index 3bb88b3..687333e 100644
--- a/libavformat/avio.h
+++ b/libavformat/avio.h
@@ -114,8 +114,8 @@ int av_url_read_pause(URLContext *h, int pause);
  * @return >= 0 on success
  * @see AVInputFormat::read_seek
  */
-int64_t av_url_read_seek(URLContext *h, int stream_index,
-                         int64_t timestamp, int flags);
+int64_t av_url_read_seek(URLContext *h,
+                     int stream_index, int64_t timestamp, int flags);
 
 /**
  * Passing this as the "whence" parameter to a seek function causes it to
@@ -133,8 +133,8 @@ typedef struct URLProtocol {
     int (*url_close)(URLContext *h);
     struct URLProtocol *next;
     int (*url_read_pause)(URLContext *h, int pause);
-    int64_t (*url_read_seek)(URLContext *h, int stream_index,
-                             int64_t timestamp, int flags);
+    int64_t (*url_read_seek)(URLContext *h,
+                         int stream_index, int64_t timestamp, int flags);
 } URLProtocol;
 
 extern URLProtocol *first_protocol;
@@ -170,8 +170,8 @@ typedef struct {
     unsigned long (*update_checksum)(unsigned long checksum, const uint8_t *buf, unsigned int size);
     int error;         ///< contains the error code or 0 if no error happened
     int (*read_pause)(void *opaque, int pause);
-    int64_t (*read_seek)(void *opaque, int stream_index,
-                         int64_t timestamp, int flags);
+    int64_t (*read_seek)(void *opaque,
+                     int stream_index, int64_t timestamp, int flags);
 } ByteIOContext;
 
 int init_put_byte(ByteIOContext *s,
@@ -238,8 +238,8 @@ int url_feof(ByteIOContext *s);
 int url_ferror(ByteIOContext *s);
 
 int av_url_read_fpause(ByteIOContext *h, int pause);
-int64_t av_url_read_fseek(ByteIOContext *h, int stream_index,
-                          int64_t timestamp, int flags);
+int64_t av_url_read_fseek(ByteIOContext *h,
+                      int stream_index, int64_t timestamp, int flags);
 
 #define URL_EOF (-1)
 /** @note return URL_EOF (-1) if EOF */
@@ -253,7 +253,7 @@ int url_fprintf(ByteIOContext *s, const char *fmt, ...);
 #endif
 
 /** @note unlike fgets, the EOL character is not returned and a whole
-    line is parsed. return NULL if first char read was EOF */
+   line is parsed. return NULL if first char read was EOF */
 char *url_fgets(ByteIOContext *s, char *buf, int buf_size);
 
 void put_flush_packet(ByteIOContext *s);
@@ -274,7 +274,7 @@ int get_buffer(ByteIOContext *s, unsigned char *buf, int size);
 int get_partial_buffer(ByteIOContext *s, unsigned char *buf, int size);
 
 /** @note return 0 if EOF, so you cannot use it if EOF handling is
-    necessary */
+   necessary */
 int get_byte(ByteIOContext *s);
 unsigned int get_le24(ByteIOContext *s);
 unsigned int get_le32(ByteIOContext *s);
@@ -295,7 +295,7 @@ static inline int url_is_streamed(ByteIOContext *s)
 }
 
 /** @note when opened as read/write, the buffers are only used for
-    writing */
+   writing */
 int url_fdopen(ByteIOContext **s, URLContext *h);
 
 /** @warning must be called before any I/O */
@@ -307,7 +307,7 @@ int url_setbufsize(ByteIOContext *s, int buf_size);
 int url_resetbuf(ByteIOContext *s, int flags);
 
 /** @note when opened as read/write, the buffers are only used for
-    writing */
+   writing */
 int url_fopen(ByteIOContext **s, const char *filename, int flags);
 int url_fclose(ByteIOContext *s);
 URLContext *url_fileno(ByteIOContext *s);
@@ -355,12 +355,9 @@ int url_open_dyn_packet_buf(ByteIOContext **s, int max_packet_size);
  */
 int url_close_dyn_buf(ByteIOContext *s, uint8_t **pbuffer);
 
-unsigned long ff_crc04C11DB7_update(unsigned long checksum, const uint8_t *buf,
-                                    unsigned int len);
+unsigned long ff_crc04C11DB7_update(unsigned long checksum, const uint8_t *buf, unsigned int len);
 unsigned long get_checksum(ByteIOContext *s);
-void init_checksum(ByteIOContext *s,
-                   unsigned long (*update_checksum)(unsigned long c, const uint8_t *p, unsigned int len),
-                   unsigned long checksum);
+void init_checksum(ByteIOContext *s, unsigned long (*update_checksum)(unsigned long c, const uint8_t *p, unsigned int len), unsigned long checksum);
 
 /* udp.c */
 int udp_set_remote_url(URLContext *h, const char *uri);
diff --git a/libavformat/aviobuf.c b/libavformat/aviobuf.c
index d1dc09b..344664c 100644
--- a/libavformat/aviobuf.c
+++ b/libavformat/aviobuf.c
@@ -40,8 +40,8 @@ int init_put_byte(ByteIOContext *s,
     s->buffer = buffer;
     s->buffer_size = buffer_size;
     s->buf_ptr = buffer;
-    s->opaque = opaque;
     url_resetbuf(s, write_flag ? URL_WRONLY : URL_RDONLY);
+    s->opaque = opaque;
     s->write_packet = write_packet;
     s->read_packet = read_packet;
     s->seek = seek;
@@ -68,8 +68,7 @@ ByteIOContext *av_alloc_put_byte(
                   void *opaque,
                   int (*read_packet)(void *opaque, uint8_t *buf, int buf_size),
                   int (*write_packet)(void *opaque, uint8_t *buf, int buf_size),
-                  int64_t (*seek)(void *opaque, int64_t offset, int whence))
-{
+                  int64_t (*seek)(void *opaque, int64_t offset, int whence)) {
     ByteIOContext *s = av_mallocz(sizeof(ByteIOContext));
     init_put_byte(s, buffer, buffer_size, write_flag, opaque,
                   read_packet, write_packet, seek);
@@ -291,7 +290,7 @@ void put_tag(ByteIOContext *s, const char *tag)
 
 static void fill_buffer(ByteIOContext *s)
 {
-    uint8_t *dst= !s->max_packet_size && s->buf_end - s->buffer < s->buffer_size ? s->buf_ptr : s->buffer;
+    uint8_t *dst= s->buf_end - s->buffer < s->buffer_size ? s->buf_ptr : s->buffer;
     int len= s->buffer_size - (dst - s->buffer);
 
     assert(s->buf_ptr == s->buf_end);
@@ -323,23 +322,17 @@ static void fill_buffer(ByteIOContext *s)
     }
 }
 
-unsigned long ff_crc04C11DB7_update(unsigned long checksum, const uint8_t *buf,
-                                    unsigned int len)
-{
+unsigned long ff_crc04C11DB7_update(unsigned long checksum, const uint8_t *buf, unsigned int len){
     return av_crc(av_crc_get_table(AV_CRC_32_IEEE), checksum, buf, len);
 }
 
-unsigned long get_checksum(ByteIOContext *s)
-{
+unsigned long get_checksum(ByteIOContext *s){
     s->checksum= s->update_checksum(s->checksum, s->checksum_ptr, s->buf_ptr - s->checksum_ptr);
     s->update_checksum= NULL;
     return s->checksum;
 }
 
-void init_checksum(ByteIOContext *s,
-                   unsigned long (*update_checksum)(unsigned long c, const uint8_t *p, unsigned int len),
-                   unsigned long checksum)
-{
+void init_checksum(ByteIOContext *s, unsigned long (*update_checksum)(unsigned long c, const uint8_t *p, unsigned int len), unsigned long checksum){
     s->update_checksum= update_checksum;
     if(s->update_checksum){
         s->checksum= checksum;
@@ -672,8 +665,8 @@ int av_url_read_fpause(ByteIOContext *s, int pause)
     return s->read_pause(s->opaque, pause);
 }
 
-int64_t av_url_read_fseek(ByteIOContext *s, int stream_index,
-                          int64_t timestamp, int flags)
+int64_t av_url_read_fseek(ByteIOContext *s,
+        int stream_index, int64_t timestamp, int flags)
 {
     URLContext *h = s->opaque;
     int64_t ret;
diff --git a/libavformat/avs.c b/libavformat/avs.c
index 1fcb19f..6fcb230 100644
--- a/libavformat/avs.c
+++ b/libavformat/avs.c
@@ -24,7 +24,7 @@
 
 
 typedef struct avs_format {
-    VocDecContext voc;
+    voc_dec_context_t voc;
     AVStream *st_video;
     AVStream *st_audio;
     int width;
@@ -34,7 +34,7 @@ typedef struct avs_format {
     int nb_frames;
     int remaining_frame_size;
     int remaining_audio_size;
-} AvsFormat;
+} avs_format_t;
 
 typedef enum avs_block_type {
     AVS_NONE      = 0x00,
@@ -42,7 +42,7 @@ typedef enum avs_block_type {
     AVS_AUDIO     = 0x02,
     AVS_PALETTE   = 0x03,
     AVS_GAME_DATA = 0x04,
-} AvsBlockType;
+} avs_block_type_t;
 
 static int avs_probe(AVProbeData * p)
 {
@@ -57,7 +57,7 @@ static int avs_probe(AVProbeData * p)
 
 static int avs_read_header(AVFormatContext * s, AVFormatParameters * ap)
 {
-    AvsFormat *avs = s->priv_data;
+    avs_format_t *avs = s->priv_data;
 
     s->ctx_flags |= AVFMTCTX_NOHEADER;
 
@@ -82,10 +82,10 @@ static int avs_read_header(AVFormatContext * s, AVFormatParameters * ap)
 
 static int
 avs_read_video_packet(AVFormatContext * s, AVPacket * pkt,
-                      AvsBlockType type, int sub_type, int size,
+                      avs_block_type_t type, int sub_type, int size,
                       uint8_t * palette, int palette_size)
 {
-    AvsFormat *avs = s->priv_data;
+    avs_format_t *avs = s->priv_data;
     int ret;
 
     ret = av_new_packet(pkt, size + palette_size);
@@ -120,7 +120,7 @@ avs_read_video_packet(AVFormatContext * s, AVPacket * pkt,
 
 static int avs_read_audio_packet(AVFormatContext * s, AVPacket * pkt)
 {
-    AvsFormat *avs = s->priv_data;
+    avs_format_t *avs = s->priv_data;
     int ret, size;
 
     size = url_ftell(s->pb);
@@ -141,9 +141,9 @@ static int avs_read_audio_packet(AVFormatContext * s, AVPacket * pkt)
 
 static int avs_read_packet(AVFormatContext * s, AVPacket * pkt)
 {
-    AvsFormat *avs = s->priv_data;
+    avs_format_t *avs = s->priv_data;
     int sub_type = 0, size = 0;
-    AvsBlockType type = AVS_NONE;
+    avs_block_type_t type = AVS_NONE;
     int palette_size = 0;
     uint8_t palette[4 + 3 * 256];
     int ret;
@@ -218,7 +218,7 @@ static int avs_read_close(AVFormatContext * s)
 AVInputFormat avs_demuxer = {
     "avs",
     NULL_IF_CONFIG_SMALL("AVS format"),
-    sizeof(AvsFormat),
+    sizeof(avs_format_t),
     avs_probe,
     avs_read_header,
     avs_read_packet,
diff --git a/libavformat/c93.c b/libavformat/c93.c
index 11a0314..c377f4d 100644
--- a/libavformat/c93.c
+++ b/libavformat/c93.c
@@ -29,7 +29,7 @@ typedef struct {
 } C93BlockRecord;
 
 typedef struct {
-    VocDecContext voc;
+    voc_dec_context_t voc;
 
     C93BlockRecord block_records[512];
     int current_block;
diff --git a/libavformat/dv.c b/libavformat/dv.c
index a0e07e9..f7a0146 100644
--- a/libavformat/dv.c
+++ b/libavformat/dv.c
@@ -430,8 +430,6 @@ static int dv_read_packet(AVFormatContext *s, AVPacket *pkt)
     size = dv_get_packet(c->dv_demux, pkt);
 
     if (size < 0) {
-        if (!c->dv_demux->sys)
-            return AVERROR(EIO);
         size = c->dv_demux->sys->frame_size;
         if (get_buffer(s->pb, c->buf, size) <= 0)
             return AVERROR(EIO);
diff --git a/libavformat/dv.h b/libavformat/dv.h
index 6bfb4ab..a8c0514 100644
--- a/libavformat/dv.h
+++ b/libavformat/dv.h
@@ -38,7 +38,7 @@ void dv_offset_reset(DVDemuxContext *c, int64_t frame_offset);
 
 typedef struct DVMuxContext DVMuxContext;
 DVMuxContext* dv_init_mux(AVFormatContext* s);
-int dv_assemble_frame(DVMuxContext *c, AVStream*, uint8_t*, int, uint8_t**);
+int dv_assemble_frame(DVMuxContext *c, AVStream*, const uint8_t*, int, uint8_t**);
 void dv_delete_mux(DVMuxContext*);
 
 #endif /* AVFORMAT_DV_H */
diff --git a/libavformat/dvenc.c b/libavformat/dvenc.c
index c8dc5a8..7245e6e 100644
--- a/libavformat/dvenc.c
+++ b/libavformat/dvenc.c
@@ -231,7 +231,7 @@ static void dv_inject_metadata(DVMuxContext *c, uint8_t* frame)
  */
 
 int dv_assemble_frame(DVMuxContext *c, AVStream* st,
-                      uint8_t* data, int data_size, uint8_t** frame)
+                      const uint8_t* data, int data_size, uint8_t** frame)
 {
     int i, reqasize;
 
diff --git a/libavformat/electronicarts.c b/libavformat/electronicarts.c
index 2eb5868..09da524 100644
--- a/libavformat/electronicarts.c
+++ b/libavformat/electronicarts.c
@@ -47,8 +47,6 @@
 #define mTCD_TAG MKTAG('m', 'T', 'C', 'D')    /* MDEC */
 #define MADk_TAG MKTAG('M', 'A', 'D', 'k')    /* MAD i-frame */
 #define MPCh_TAG MKTAG('M', 'P', 'C', 'h')    /* MPEG2 */
-#define TGQs_TAG MKTAG('T', 'G', 'Q', 's')    /* TGQ i-frame (appears in .TGQ files) */
-#define pQGT_TAG MKTAG('p', 'Q', 'G', 'T')    /* TGQ i-frame (appears in .UV files) */
 #define MVhd_TAG MKTAG('M', 'V', 'h', 'd')
 #define MV0K_TAG MKTAG('M', 'V', '0', 'K')
 #define MV0F_TAG MKTAG('M', 'V', '0', 'F')
@@ -343,11 +341,6 @@ static int process_ea_header(AVFormatContext *s) {
                 ea->video_codec = CODEC_ID_MPEG2VIDEO;
                 break;
 
-            case pQGT_TAG:
-            case TGQs_TAG:
-                ea->video_codec = CODEC_ID_TGQ;
-                break;
-
             case MVhd_TAG :
                 err = process_video_header_vp6(s);
                 break;
@@ -504,8 +497,6 @@ static int ea_read_packet(AVFormatContext *s,
 
         case MVIh_TAG:
         case kVGT_TAG:
-        case pQGT_TAG:
-        case TGQs_TAG:
             key = PKT_FLAG_KEY;
         case MVIf_TAG:
         case fVGT_TAG:
diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c
index 01da9e8..0b25a25 100644
--- a/libavformat/flvdec.c
+++ b/libavformat/flvdec.c
@@ -26,10 +26,6 @@
 #include "avformat.h"
 #include "flv.h"
 
-typedef struct {
-    int wrong_dts; ///< wrong dts due to negative cts
-} FLVContext;
-
 static int flv_probe(AVProbeData *p)
 {
     const uint8_t *d;
@@ -303,10 +299,9 @@ static int flv_get_extradata(AVFormatContext *s, AVStream *st, int size)
 
 static int flv_read_packet(AVFormatContext *s, AVPacket *pkt)
 {
-    FLVContext *flv = s->priv_data;
     int ret, i, type, size, flags, is_audio;
     int64_t next, pos;
-    int64_t dts, pts = AV_NOPTS_VALUE;
+    unsigned dts;
     AVStream *st = NULL;
 
  retry:
@@ -391,12 +386,10 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt)
     }
 
     if(is_audio){
-        if(!st->codec->channels || !st->codec->sample_rate || !st->codec->bits_per_coded_sample) {
+        if(!st->codec->channels || !st->codec->sample_rate || !st->codec->bits_per_coded_sample || (!st->codec->codec_id && !st->codec->codec_tag)) {
             st->codec->channels = (flags & FLV_AUDIO_CHANNEL_MASK) == FLV_STEREO ? 2 : 1;
             st->codec->sample_rate = (44100 << ((flags & FLV_AUDIO_SAMPLERATE_MASK) >> FLV_AUDIO_SAMPLERATE_OFFSET) >> 3);
             st->codec->bits_per_coded_sample = (flags & FLV_AUDIO_SAMPLESIZE_MASK) ? 16 : 8;
-        }
-        if(!st->codec->codec_id){
             flv_set_audio_codec(s, st, flags & FLV_AUDIO_CODECID_MASK);
         }
     }else{
@@ -408,14 +401,9 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt)
         int type = get_byte(s->pb);
         size--;
         if (st->codec->codec_id == CODEC_ID_H264) {
-            int32_t cts = (get_be24(s->pb)+0xff800000)^0xff800000; // sign extension
-            pts = dts + cts;
-            if (cts < 0) { // dts are wrong
-                flv->wrong_dts = 1;
-                av_log(s, AV_LOG_WARNING, "negative cts, previous timestamps might be wrong\n");
-            }
-            if (flv->wrong_dts)
-                dts = AV_NOPTS_VALUE;
+            // cts offset ignored because it might to be signed
+            // and would cause pts < dts
+            get_be24(s->pb);
         }
         if (type == 0) {
             if ((ret = flv_get_extradata(s, st, size)) < 0)
@@ -432,7 +420,6 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt)
        packet */
     pkt->size = ret;
     pkt->dts = dts;
-    pkt->pts = pts == AV_NOPTS_VALUE ? dts : pts;
     pkt->stream_index = st->index;
 
     if (is_audio || ((flags & FLV_VIDEO_FRAMETYPE_MASK) == FLV_FRAME_KEY))
@@ -444,7 +431,7 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt)
 AVInputFormat flv_demuxer = {
     "flv",
     NULL_IF_CONFIG_SMALL("FLV format"),
-    sizeof(FLVContext),
+    0,
     flv_probe,
     flv_read_header,
     flv_read_packet,
diff --git a/libavformat/framehook.h b/libavformat/framehook.h
index 0bad606..9dc144b 100644
--- a/libavformat/framehook.h
+++ b/libavformat/framehook.h
@@ -45,8 +45,8 @@ typedef void (FrameHookRelease)(void *ctx);
 typedef FrameHookRelease *FrameHookReleaseFn;
 extern FrameHookRelease Release;
 
-int frame_hook_add(int argc, char *argv[]);
-void frame_hook_process(struct AVPicture *pict, enum PixelFormat pix_fmt, int width, int height, int64_t pts);
-void frame_hook_release(void);
+extern int frame_hook_add(int argc, char *argv[]);
+extern void frame_hook_process(struct AVPicture *pict, enum PixelFormat pix_fmt, int width, int height, int64_t pts);
+extern void frame_hook_release(void);
 
 #endif /* AVFORMAT_FRAMEHOOK_H */
diff --git a/libavformat/gxf.c b/libavformat/gxf.c
index 30cb4f7..5bbac82 100644
--- a/libavformat/gxf.c
+++ b/libavformat/gxf.c
@@ -23,12 +23,12 @@
 #include "avformat.h"
 #include "gxf.h"
 
-struct gxf_stream_info {
+typedef struct {
     int64_t first_field;
     int64_t last_field;
     AVRational frames_per_second;
     int32_t fields_per_frame;
-};
+} st_info_t;
 
 /**
  * \brief parses a packet header, extracting type and length
@@ -37,7 +37,7 @@ struct gxf_stream_info {
  * \param length detected packet length, excluding header is stored here
  * \return 0 if header not found or contains invalid data, 1 otherwise
  */
-static int parse_packet_header(ByteIOContext *pb, GXFPktType *type, int *length) {
+static int parse_packet_header(ByteIOContext *pb, pkt_type_t *type, int *length) {
     if (get_be32(pb))
         return 0;
     if (get_byte(pb) != 1)
@@ -157,11 +157,11 @@ static int get_sindex(AVFormatContext *s, int id, int format) {
  * \param len length of tag section, will be adjusted to contain remaining bytes
  * \param si struct to store collected information into
  */
-static void gxf_material_tags(ByteIOContext *pb, int *len, struct gxf_stream_info *si) {
+static void gxf_material_tags(ByteIOContext *pb, int *len, st_info_t *si) {
     si->first_field = AV_NOPTS_VALUE;
     si->last_field = AV_NOPTS_VALUE;
     while (*len >= 2) {
-        GXFMatTag tag = get_byte(pb);
+        mat_tag_t tag = get_byte(pb);
         int tlen = get_byte(pb);
         *len -= 2;
         if (tlen > *len)
@@ -206,11 +206,11 @@ static AVRational fps_umf2avr(uint32_t flags) {
  * \param len length of tag section, will be adjusted to contain remaining bytes
  * \param si struct to store collected information into
  */
-static void gxf_track_tags(ByteIOContext *pb, int *len, struct gxf_stream_info *si) {
+static void gxf_track_tags(ByteIOContext *pb, int *len, st_info_t *si) {
     si->frames_per_second = (AVRational){0, 0};
     si->fields_per_frame = 0;
     while (*len >= 2) {
-        GXFTrackTag tag = get_byte(pb);
+        track_tag_t tag = get_byte(pb);
         int tlen = get_byte(pb);
         *len -= 2;
         if (tlen > *len)
@@ -256,11 +256,11 @@ static void gxf_read_index(AVFormatContext *s, int pkt_len) {
 
 static int gxf_header(AVFormatContext *s, AVFormatParameters *ap) {
     ByteIOContext *pb = s->pb;
-    GXFPktType pkt_type;
+    pkt_type_t pkt_type;
     int map_len;
     int len;
     AVRational main_timebase = {0, 0};
-    struct gxf_stream_info si;
+    st_info_t si;
     int i;
     if (!parse_packet_header(pb, &pkt_type, &map_len) || pkt_type != PKT_MAP) {
         av_log(s, AV_LOG_ERROR, "map packet not found\n");
@@ -382,7 +382,7 @@ static int64_t gxf_resync_media(AVFormatContext *s, uint64_t max_interval, int t
     int64_t cur_timestamp = AV_NOPTS_VALUE;
     int len;
     ByteIOContext *pb = s->pb;
-    GXFPktType type;
+    pkt_type_t type;
     tmp = get_be32(pb);
 start:
     while (tmp)
@@ -412,7 +412,7 @@ out:
 
 static int gxf_packet(AVFormatContext *s, AVPacket *pkt) {
     ByteIOContext *pb = s->pb;
-    GXFPktType pkt_type;
+    pkt_type_t pkt_type;
     int pkt_len;
     while (!url_feof(pb)) {
         AVStream *st;
diff --git a/libavformat/gxf.h b/libavformat/gxf.h
index dcdcdef..4212704 100644
--- a/libavformat/gxf.h
+++ b/libavformat/gxf.h
@@ -22,13 +22,14 @@
 #ifndef AVFORMAT_GXF_H
 #define AVFORMAT_GXF_H
 
+/* gxf.c */
 typedef enum {
     PKT_MAP         = 0xbc,
     PKT_MEDIA       = 0xbf,
     PKT_EOS         = 0xfb,
     PKT_FLT         = 0xfc,
     PKT_UMF         = 0xfd,
-} GXFPktType;
+} pkt_type_t;
 
 typedef enum {
     MAT_NAME        = 0x40,
@@ -37,7 +38,7 @@ typedef enum {
     MAT_MARK_IN     = 0x43,
     MAT_MARK_OUT    = 0x44,
     MAT_SIZE        = 0x45,
-} GXFMatTag;
+} mat_tag_t;
 
 typedef enum {
     TRACK_NAME      = 0x4c,
@@ -47,6 +48,6 @@ typedef enum {
     TRACK_FPS       = 0x50,
     TRACK_LINES     = 0x51,
     TRACK_FPF       = 0x52,
-} GXFTrackTag;
+} track_tag_t;
 
 #endif /* AVFORMAT_GXF_H */
diff --git a/libavformat/gxfenc.c b/libavformat/gxfenc.c
index 396555a..72a35c3 100644
--- a/libavformat/gxfenc.c
+++ b/libavformat/gxfenc.c
@@ -155,7 +155,7 @@ static int64_t updateSize(ByteIOContext *pb, int64_t pos)
     return curpos - pos;
 }
 
-static void gxf_write_packet_header(ByteIOContext *pb, GXFPktType type)
+static void gxf_write_packet_header(ByteIOContext *pb, pkt_type_t type)
 {
     put_be32(pb, 0); /* packet leader for synchro */
     put_byte(pb, 1);
diff --git a/libavformat/iff.c b/libavformat/iff.c
index e5158f6..1fb94c0 100644
--- a/libavformat/iff.c
+++ b/libavformat/iff.c
@@ -52,7 +52,7 @@
 
 #define PACKET_SIZE 1024
 
-typedef enum {COMP_NONE, COMP_FIB, COMP_EXP} svx8_compression_type;
+typedef enum {COMP_NONE, COMP_FIB, COMP_EXP} svx8_compression_t;
 
 typedef struct {
     uint32_t  body_size;
diff --git a/libavformat/img2.c b/libavformat/img2.c
index c0b5de2..9706392 100644
--- a/libavformat/img2.c
+++ b/libavformat/img2.c
@@ -45,7 +45,6 @@ static const IdStrMap img_tags[] = {
     { CODEC_ID_PNG       , "png"},
     { CODEC_ID_PNG       , "mng"},
     { CODEC_ID_PPM       , "ppm"},
-    { CODEC_ID_PPM       , "pnm"},
     { CODEC_ID_PGM       , "pgm"},
     { CODEC_ID_PGMYUV    , "pgmyuv"},
     { CODEC_ID_PBM       , "pbm"},
@@ -70,7 +69,6 @@ static const IdStrMap img_tags[] = {
     { CODEC_ID_SUNRAST   , "im8"},
     { CODEC_ID_SUNRAST   , "im24"},
     { CODEC_ID_SUNRAST   , "sunras"},
-    { CODEC_ID_JPEG2000  , "jp2"},
     { CODEC_ID_NONE      , NULL}
 };
 
@@ -404,7 +402,7 @@ AVOutputFormat image2_muxer = {
     "image2",
     NULL_IF_CONFIG_SMALL("image2 sequence"),
     "",
-    "bmp,jpeg,jpg,ljpg,pam,pbm,pgm,pgmyuv,png,ppm,sgi,tif,tiff",
+    "",
     sizeof(VideoData),
     CODEC_ID_NONE,
     CODEC_ID_MJPEG,
diff --git a/libavformat/internal.h b/libavformat/internal.h
index cb266ca..a96f365 100644
--- a/libavformat/internal.h
+++ b/libavformat/internal.h
@@ -22,11 +22,7 @@
 #define AVFORMAT_INTERNAL_H
 
 #include <stdint.h>
-#include "avformat.h"
 
 char *ff_data_to_hex(char *buf, const uint8_t *src, int size);
 
-void av_set_program_name(AVProgram *program, char *provider_name, char *name);
-void av_program_add_stream_index(AVFormatContext *ac, int progid, unsigned int idx);
-
 #endif /* AVFORMAT_INTERNAL_H */
diff --git a/libavformat/ipmovie.c b/libavformat/ipmovie.c
index 35c61de..4a766b2 100644
--- a/libavformat/ipmovie.c
+++ b/libavformat/ipmovie.c
@@ -101,7 +101,7 @@ typedef struct IPMVEContext {
     unsigned int audio_bits;
     unsigned int audio_channels;
     unsigned int audio_sample_rate;
-    enum CodecID audio_type;
+    unsigned int audio_type;
     unsigned int audio_frame_count;
 
     int video_stream_index;
@@ -544,7 +544,7 @@ static int ipmovie_read_header(AVFormatContext *s,
     url_fseek(pb, -CHUNK_PREAMBLE_SIZE, SEEK_CUR);
 
     if (chunk_type == CHUNK_VIDEO)
-        ipmovie->audio_type = CODEC_ID_NONE;  /* no audio */
+        ipmovie->audio_type = 0;  /* no audio */
     else if (process_ipmovie_chunk(ipmovie, pb, &pkt) != CHUNK_INIT_AUDIO)
         return AVERROR_INVALIDDATA;
 
diff --git a/libavformat/isom.c b/libavformat/isom.c
index 7d1da7c..8791354 100644
--- a/libavformat/isom.c
+++ b/libavformat/isom.c
@@ -106,8 +106,6 @@ const AVCodecTag codec_movvideo_tags[] = {
     { CODEC_ID_MSRLE,   MKTAG('W', 'R', 'L', 'E') },
     { CODEC_ID_QDRAW,   MKTAG('q', 'd', 'r', 'w') }, /* QuickDraw */
 
-    { CODEC_ID_RAWVIDEO, MKTAG('W', 'R', 'A', 'W') },
-
     { CODEC_ID_H264, MKTAG('a', 'v', 'c', '1') }, /* AVC-1/H.264 */
 
     { CODEC_ID_MPEG1VIDEO, MKTAG('m', 'p', 'e', 'g') }, /* MPEG */
@@ -148,7 +146,7 @@ const AVCodecTag codec_movvideo_tags[] = {
     { CODEC_ID_MPEG2VIDEO, MKTAG('x', 'd', 'v', 'f') }, /* XDCAM EX 1080p30 VBR */
     { CODEC_ID_MPEG2VIDEO, MKTAG('A', 'V', 'm', 'p') }, /* AVID IMX PAL */
 
-    { CODEC_ID_JPEG2000, MKTAG('m', 'j', 'p', '2') }, /* JPEG 2000 produced by FCP */
+  //{ CODEC_ID_JPEG2000, MKTAG('m', 'j', 'p', '2') }, /* JPEG 2000 produced by FCP */
 
     { CODEC_ID_TARGA, MKTAG('t', 'g', 'a', ' ') }, /* Truevision Targa */
     { CODEC_ID_TIFF,  MKTAG('t', 'i', 'f', 'f') }, /* TIFF embedded in MOV */
diff --git a/libavformat/isom.h b/libavformat/isom.h
index 64bde46..2fb4dbf 100644
--- a/libavformat/isom.h
+++ b/libavformat/isom.h
@@ -38,6 +38,6 @@ int ff_mov_lang_to_iso639(int code, char *to);
 typedef struct {
     int count;
     int duration;
-} MOVStts;
+} MOV_stts_t;
 
 #endif /* AVFORMAT_ISOM_H */
diff --git a/libavformat/libnut.c b/libavformat/libnut.c
index 3f4a69b..399ef9c 100644
--- a/libavformat/libnut.c
+++ b/libavformat/libnut.c
@@ -33,8 +33,8 @@
 #define ID_LENGTH (strlen(ID_STRING) + 1)
 
 typedef struct {
-    nut_context_tt * nut;
-    nut_stream_header_tt * s;
+    nut_context_t * nut;
+    nut_stream_header_t * s;
 } NUTContext;
 
 static const AVCodecTag nut_tags[] = {
@@ -55,7 +55,7 @@ static int av_write(void * h, size_t len, const uint8_t * buf) {
 static int nut_write_header(AVFormatContext * avf) {
     NUTContext * priv = avf->priv_data;
     ByteIOContext * bc = avf->pb;
-    nut_muxer_opts_tt mopts = {
+    nut_muxer_opts_t mopts = {
         .output = {
             .priv = bc,
             .write = av_write,
@@ -66,7 +66,7 @@ static int nut_write_header(AVFormatContext * avf) {
         .max_distance = 32768,
         .fti = NULL,
     };
-    nut_stream_header_tt * s;
+    nut_stream_header_t * s;
     int i;
 
     priv->s = s = av_mallocz((avf->nb_streams + 1) * sizeof*s);
@@ -123,7 +123,7 @@ static int nut_write_header(AVFormatContext * avf) {
 
 static int nut_write_packet(AVFormatContext * avf, AVPacket * pkt) {
     NUTContext * priv = avf->priv_data;
-    nut_packet_tt p;
+    nut_packet_t p;
 
     p.len = pkt->size;
     p.stream = pkt->stream_index;
@@ -188,7 +188,7 @@ static off_t av_seek(void * h, long long pos, int whence) {
 static int nut_read_header(AVFormatContext * avf, AVFormatParameters * ap) {
     NUTContext * priv = avf->priv_data;
     ByteIOContext * bc = avf->pb;
-    nut_demuxer_opts_tt dopts = {
+    nut_demuxer_opts_t dopts = {
         .input = {
             .priv = bc,
             .seek = av_seek,
@@ -200,8 +200,8 @@ static int nut_read_header(AVFormatContext * avf, AVFormatParameters * ap) {
         .read_index = 1,
         .cache_syncpoints = 1,
     };
-    nut_context_tt * nut = priv->nut = nut_demuxer_init(&dopts);
-    nut_stream_header_tt * s;
+    nut_context_t * nut = priv->nut = nut_demuxer_init(&dopts);
+    nut_stream_header_t * s;
     int ret, i;
 
     if ((ret = nut_read_headers(nut, &s, NULL))) {
@@ -258,7 +258,7 @@ static int nut_read_header(AVFormatContext * avf, AVFormatParameters * ap) {
 
 static int nut_read_packet(AVFormatContext * avf, AVPacket * pkt) {
     NUTContext * priv = avf->priv_data;
-    nut_packet_tt pd;
+    nut_packet_t pd;
     int ret;
 
     ret = nut_read_next_packet(priv->nut, &pd);
diff --git a/libavformat/matroska.c b/libavformat/matroska.c
index f967f3e..0b657e1 100644
--- a/libavformat/matroska.c
+++ b/libavformat/matroska.c
@@ -22,16 +22,25 @@
 #include "matroska.h"
 
 const CodecTags ff_mkv_codec_tags[]={
-    {"A_AAC"            , CODEC_ID_AAC},
-    {"A_AC3"            , CODEC_ID_AC3},
-    {"A_DTS"            , CODEC_ID_DTS},
-    {"A_EAC3"           , CODEC_ID_EAC3},
-    {"A_FLAC"           , CODEC_ID_FLAC},
+    {"V_UNCOMPRESSED"   , CODEC_ID_RAWVIDEO},
+    {"V_MPEG4/ISO/ASP"  , CODEC_ID_MPEG4},
+    {"V_MPEG4/ISO/SP"   , CODEC_ID_MPEG4},
+    {"V_MPEG4/ISO/AP"   , CODEC_ID_MPEG4},
+    {"V_MPEG4/ISO/AVC"  , CODEC_ID_H264},
+    {"V_MPEG4/MS/V3"    , CODEC_ID_MSMPEG4V3},
+    {"V_MPEG1"          , CODEC_ID_MPEG1VIDEO},
+    {"V_MPEG2"          , CODEC_ID_MPEG2VIDEO},
+    {"V_MJPEG"          , CODEC_ID_MJPEG},
+    {"V_REAL/RV10"      , CODEC_ID_RV10},
+    {"V_REAL/RV20"      , CODEC_ID_RV20},
+    {"V_REAL/RV30"      , CODEC_ID_RV30},
+    {"V_REAL/RV40"      , CODEC_ID_RV40},
+    {"V_THEORA"         , CODEC_ID_THEORA},
+    {"V_SNOW"           , CODEC_ID_SNOW},
+
+    {"A_MPEG/L3"        , CODEC_ID_MP3},
     {"A_MPEG/L2"        , CODEC_ID_MP2},
     {"A_MPEG/L1"        , CODEC_ID_MP2},
-    {"A_MPEG/L3"        , CODEC_ID_MP3},
-    {"A_PCM/FLOAT/IEEE" , CODEC_ID_PCM_F32LE},
-    {"A_PCM/FLOAT/IEEE" , CODEC_ID_PCM_F64LE},
     {"A_PCM/INT/BIG"    , CODEC_ID_PCM_S16BE},
     {"A_PCM/INT/BIG"    , CODEC_ID_PCM_S24BE},
     {"A_PCM/INT/BIG"    , CODEC_ID_PCM_S32BE},
@@ -39,15 +48,22 @@ const CodecTags ff_mkv_codec_tags[]={
     {"A_PCM/INT/LIT"    , CODEC_ID_PCM_S24LE},
     {"A_PCM/INT/LIT"    , CODEC_ID_PCM_S32LE},
     {"A_PCM/INT/LIT"    , CODEC_ID_PCM_U8},
-    {"A_QUICKTIME/QDM2" , CODEC_ID_QDM2},
+    {"A_PCM/FLOAT/IEEE" , CODEC_ID_PCM_F32LE},
+    {"A_PCM/FLOAT/IEEE" , CODEC_ID_PCM_F64LE},
+    {"A_AC3"            , CODEC_ID_AC3},
+    {"A_EAC3"           , CODEC_ID_EAC3},
+    {"A_DTS"            , CODEC_ID_DTS},
+    {"A_VORBIS"         , CODEC_ID_VORBIS},
+    {"A_AAC"            , CODEC_ID_AAC},
+    {"A_FLAC"           , CODEC_ID_FLAC},
+    {"A_WAVPACK4"       , CODEC_ID_WAVPACK},
+    {"A_TTA1"           , CODEC_ID_TTA},
     {"A_REAL/14_4"      , CODEC_ID_RA_144},
     {"A_REAL/28_8"      , CODEC_ID_RA_288},
     {"A_REAL/ATRC"      , CODEC_ID_ATRAC3},
     {"A_REAL/COOK"      , CODEC_ID_COOK},
 //    {"A_REAL/SIPR"      , CODEC_ID_SIPRO},
-    {"A_TTA1"           , CODEC_ID_TTA},
-    {"A_VORBIS"         , CODEC_ID_VORBIS},
-    {"A_WAVPACK4"       , CODEC_ID_WAVPACK},
+    {"A_QUICKTIME/QDM2" , CODEC_ID_QDM2},
 
     {"S_TEXT/UTF8"      , CODEC_ID_TEXT},
     {"S_TEXT/ASCII"     , CODEC_ID_TEXT},
@@ -57,23 +73,6 @@ const CodecTags ff_mkv_codec_tags[]={
     {"S_SSA"            , CODEC_ID_SSA},
     {"S_VOBSUB"         , CODEC_ID_DVD_SUBTITLE},
 
-    {"V_DIRAC"          , CODEC_ID_DIRAC},
-    {"V_MJPEG"          , CODEC_ID_MJPEG},
-    {"V_MPEG1"          , CODEC_ID_MPEG1VIDEO},
-    {"V_MPEG2"          , CODEC_ID_MPEG2VIDEO},
-    {"V_MPEG4/ISO/ASP"  , CODEC_ID_MPEG4},
-    {"V_MPEG4/ISO/AP"   , CODEC_ID_MPEG4},
-    {"V_MPEG4/ISO/SP"   , CODEC_ID_MPEG4},
-    {"V_MPEG4/ISO/AVC"  , CODEC_ID_H264},
-    {"V_MPEG4/MS/V3"    , CODEC_ID_MSMPEG4V3},
-    {"V_REAL/RV10"      , CODEC_ID_RV10},
-    {"V_REAL/RV20"      , CODEC_ID_RV20},
-    {"V_REAL/RV30"      , CODEC_ID_RV30},
-    {"V_REAL/RV40"      , CODEC_ID_RV40},
-    {"V_SNOW"           , CODEC_ID_SNOW},
-    {"V_THEORA"         , CODEC_ID_THEORA},
-    {"V_UNCOMPRESSED"   , CODEC_ID_RAWVIDEO},
-
     {""                 , CODEC_ID_NONE}
 };
 
diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index 6478d84..cedfb3d 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -1074,7 +1074,6 @@ static int matroska_read_header(AVFormatContext *s, AVFormatParameters *ap)
     MatroskaTrack *tracks;
     EbmlList *index_list;
     MatroskaIndex *index;
-    int index_scale = 1;
     Ebml ebml = { 0 };
     AVStream *st;
     int i, j;
@@ -1304,8 +1303,7 @@ static int matroska_read_header(AVFormatContext *s, AVFormatParameters *ap)
             st->codec->extradata = extradata;
             st->codec->extradata_size = extradata_size;
         } else if(track->codec_priv.data && track->codec_priv.size > 0){
-            st->codec->extradata = av_mallocz(track->codec_priv.size +
-                                              FF_INPUT_BUFFER_PADDING_SIZE);
+            st->codec->extradata = av_malloc(track->codec_priv.size);
             if(st->codec->extradata == NULL)
                 return AVERROR(ENOMEM);
             st->codec->extradata_size = track->codec_priv.size;
@@ -1371,11 +1369,6 @@ static int matroska_read_header(AVFormatContext *s, AVFormatParameters *ap)
 
     index_list = &matroska->index;
     index = index_list->elem;
-    if (index_list->nb_elem
-        && index[0].time > 100000000000000/matroska->time_scale) {
-        av_log(matroska->ctx, AV_LOG_WARNING, "Working around broken index.\n");
-        index_scale = matroska->time_scale;
-    }
     for (i=0; i<index_list->nb_elem; i++) {
         EbmlList *pos_list = &index[i].pos;
         MatroskaIndexPos *pos = pos_list->elem;
@@ -1385,8 +1378,7 @@ static int matroska_read_header(AVFormatContext *s, AVFormatParameters *ap)
             if (track && track->stream)
                 av_add_index_entry(track->stream,
                                    pos[j].pos + matroska->segment_start,
-                                   index[i].time/index_scale, 0, 0,
-                                   AVINDEX_KEYFRAME);
+                                   index[i].time, 0, 0, AVINDEX_KEYFRAME);
         }
     }
 
diff --git a/libavformat/metadata.c b/libavformat/metadata.c
deleted file mode 100644
index 9765e7c..0000000
--- a/libavformat/metadata.c
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * copyright (c) 2009 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
- */
-
-#include "metadata.h"
-
-AVMetadataTag *
-av_metadata_get(AVMetadata *m, const char *key, const AVMetadataTag *prev, int flags)
-{
-    unsigned int i, j;
-
-    if(!m)
-        return NULL;
-
-    if(prev) i= prev - m->elems + 1;
-    else     i= 0;
-
-    for(; i<m->count; i++){
-        const char *s= m->elems[i].key;
-        if(flags & AV_METADATA_IGNORE_CASE) for(j=0; toupper(s[j]) == toupper(key[j]) && key[j]; j++);
-        else                                for(j=0;         s[j]  ==         key[j]  && key[j]; j++);
-        if(key[j])
-            continue;
-        if(s[j] && !(flags & AV_METADATA_IGNORE_SUFFIX))
-            continue;
-        return &m->elems[i];
-    }
-    return NULL;
-}
-
-int av_metadata_set(AVMetadata **pm, AVMetadataTag elem)
-{
-    AVMetadata *m= *pm;
-    AVMetadataTag *tag= av_metadata_get(m, elem.key, NULL, 0);
-
-    if(!m)
-        m=*pm= av_mallocz(sizeof(*m));
-
-    if(tag){
-        av_free(tag->value);
-        av_free(tag->key);
-        *tag= m->elems[--m->count];
-    }else{
-        AVMetadataTag *tmp= av_realloc(m->elems, (m->count+1) * sizeof(*m->elems));
-        if(tmp){
-            m->elems= tmp;
-        }else
-            return AVERROR(ENOMEM);
-    }
-    if(elem.value){
-        elem.key  = av_strdup(elem.key  );
-        elem.value= av_strdup(elem.value);
-        m->elems[m->count++]= elem;
-    }
-    if(!m->count)
-        av_freep(pm);
-
-    return 0;
-}
-
-void av_metadata_free(AVMetadata **pm)
-{
-    AVMetadata *m= *pm;
-
-    if(m){
-        while(m->count--){
-            av_free(m->elems[m->count].key);
-            av_free(m->elems[m->count].value);
-        }
-        av_free(m->elems);
-    }
-    av_freep(pm);
-}
diff --git a/libavformat/metadata.h b/libavformat/metadata.h
deleted file mode 100644
index b6912ef..0000000
--- a/libavformat/metadata.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * copyright (c) 2009 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
- */
-
-#ifndef AVFORMAT_METADATA_H
-#define AVFORMAT_METADATA_H
-
-/**
- * @file metadata.h
- * internal metadata API header
- * see avformat.h or the public API!
- */
-
-
-#include "avformat.h"
-
-struct AVMetadata{
-    int count;
-    AVMetadataTag *elems;
-};
-
-#if LIBAVFORMAT_VERSION_MAJOR < 53
-void ff_metadata_demux_compat(AVFormatContext *s);
-void ff_metadata_mux_compat(AVFormatContext *s);
-#endif
-
-#endif /* AVFORMAT_METADATA_H */
diff --git a/libavformat/metadata_compat.c b/libavformat/metadata_compat.c
deleted file mode 100644
index 7aef938..0000000
--- a/libavformat/metadata_compat.c
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright (c) 2009  Aurelien Jacobs <aurel at gnuage.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 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
- */
-
-#if LIBAVFORMAT_VERSION_MAJOR < 53
-
-#include <strings.h>
-#include "metadata.h"
-#include "libavutil/avstring.h"
-
-#define SIZE_OFFSET(x) sizeof(((AVFormatContext*)0)->x),offsetof(AVFormatContext,x)
-
-static const struct {
-    const char name[16];
-    int   size;
-    int   offset;
-} compat_tab[] = {
-    { "title",           SIZE_OFFSET(title)     },
-    { "author",          SIZE_OFFSET(author)    },
-    { "copyright",       SIZE_OFFSET(copyright) },
-    { "comment",         SIZE_OFFSET(comment)   },
-    { "album",           SIZE_OFFSET(album)     },
-    { "year",            SIZE_OFFSET(year)      },
-    { "track",           SIZE_OFFSET(track)     },
-    { "genre",           SIZE_OFFSET(genre)     },
-
-    { "artist",          SIZE_OFFSET(author)    },
-    { "creator",         SIZE_OFFSET(author)    },
-    { "written_by",      SIZE_OFFSET(author)    },
-    { "lead_performer",  SIZE_OFFSET(author)    },
-    { "description",     SIZE_OFFSET(comment)   },
-    { "albumtitle",      SIZE_OFFSET(album)     },
-    { "date_written",    SIZE_OFFSET(year)      },
-    { "date_released",   SIZE_OFFSET(year)      },
-    { "tracknumber",     SIZE_OFFSET(track)     },
-    { "part_number",     SIZE_OFFSET(track)     },
-};
-
-void ff_metadata_demux_compat(AVFormatContext *ctx)
-{
-    AVMetadata *m;
-    int i, j;
-
-    if ((m = ctx->metadata))
-        for (j=0; j<m->count; j++)
-            for (i=0; i<FF_ARRAY_ELEMS(compat_tab); i++)
-                if (!strcasecmp(m->elems[j].key, compat_tab[i].name)) {
-                    int *ptr = (int *)((char *)ctx+compat_tab[i].offset);
-                    if (*ptr)  continue;
-                    if (compat_tab[i].size > sizeof(int))
-                        av_strlcpy((char *)ptr, m->elems[j].value, compat_tab[i].size);
-                    else
-                        *ptr = atoi(m->elems[j].value);
-                }
-
-    for (i=0; i<ctx->nb_chapters; i++)
-        if ((m = ctx->chapters[i]->metadata))
-            for (j=0; j<m->count; j++)
-                if (!strcasecmp(m->elems[j].key, "title")) {
-                    av_free(ctx->chapters[i]->title);
-                    ctx->chapters[i]->title = av_strdup(m->elems[j].value);
-                }
-
-    for (i=0; i<ctx->nb_programs; i++)
-        if ((m = ctx->programs[i]->metadata))
-            for (j=0; j<m->count; j++) {
-                if (!strcasecmp(m->elems[j].key, "name")) {
-                    av_free(ctx->programs[i]->name);
-                    ctx->programs[i]->name = av_strdup(m->elems[j].value);
-                }
-                if (!strcasecmp(m->elems[j].key, "provider_name")) {
-                    av_free(ctx->programs[i]->provider_name);
-                    ctx->programs[i]->provider_name = av_strdup(m->elems[j].value);
-                }
-            }
-
-    for (i=0; i<ctx->nb_streams; i++)
-        if ((m = ctx->streams[i]->metadata))
-            for (j=0; j<m->count; j++) {
-                if (!strcasecmp(m->elems[j].key, "language"))
-                    av_strlcpy(ctx->streams[i]->language, m->elems[j].value, 4);
-                if (!strcasecmp(m->elems[j].key, "filename")) {
-                    av_free(ctx->streams[i]->filename);
-                    ctx->streams[i]->filename= av_strdup(m->elems[j].value);
-                }
-            }
-}
-
-
-#define FILL_METADATA(s, key, value) {                                        \
-    if (value && *value &&                                                    \
-        !av_metadata_get(s->metadata, #key, NULL, AV_METADATA_IGNORE_CASE))   \
-        av_metadata_set(&s->metadata, (const AVMetadataTag){#key, value});    \
-    }
-#define FILL_METADATA_STR(s, key)  FILL_METADATA(s, key, s->key)
-#define FILL_METADATA_INT(s, key) {                                           \
-    char number[10];                                                          \
-    snprintf(number, sizeof(number), "%d", s->key);                           \
-    if(s->key)  FILL_METADATA(s, key, number) }
-
-void ff_metadata_mux_compat(AVFormatContext *ctx)
-{
-    int i;
-
-    FILL_METADATA_STR(ctx, title);
-    FILL_METADATA_STR(ctx, author);
-    FILL_METADATA_STR(ctx, copyright);
-    FILL_METADATA_STR(ctx, comment);
-    FILL_METADATA_STR(ctx, album);
-    FILL_METADATA_INT(ctx, year);
-    FILL_METADATA_INT(ctx, track);
-    FILL_METADATA_STR(ctx, genre);
-    for (i=0; i<ctx->nb_chapters; i++)
-        FILL_METADATA_STR(ctx->chapters[i], title);
-    for (i=0; i<ctx->nb_programs; i++) {
-        FILL_METADATA_STR(ctx->programs[i], name);
-        FILL_METADATA_STR(ctx->programs[i], provider_name);
-    }
-    for (i=0; i<ctx->nb_streams; i++) {
-        FILL_METADATA_STR(ctx->streams[i], language);
-        FILL_METADATA_STR(ctx->streams[i], filename);
-    }
-}
-
-#endif /* LIBAVFORMAT_VERSION_MAJOR < 53 */
diff --git a/libavformat/mov.c b/libavformat/mov.c
index c0c057a..32cb909 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -69,18 +69,18 @@ typedef struct {
     int first;
     int count;
     int id;
-} MOVStsc;
+} MOV_stsc_t;
 
 typedef struct {
     uint32_t type;
     char *path;
-} MOVDref;
+} MOV_dref_t;
 
 typedef struct {
     uint32_t type;
     int64_t offset;
     int64_t size; /* total size (excluding the size and type fields) */
-} MOVAtom;
+} MOV_atom_t;
 
 struct MOVParseTableEntry;
 
@@ -109,12 +109,12 @@ typedef struct MOVStreamContext {
     unsigned int chunk_count;
     int64_t *chunk_offsets;
     unsigned int stts_count;
-    MOVStts *stts_data;
+    MOV_stts_t *stts_data;
     unsigned int ctts_count;
-    MOVStts *ctts_data;
+    MOV_stts_t *ctts_data;
     unsigned int edit_count; /* number of 'edit' (elst atom) */
     unsigned int sample_to_chunk_sz;
-    MOVStsc *sample_to_chunk;
+    MOV_stsc_t *sample_to_chunk;
     int sample_to_ctime_index;
     int sample_to_ctime_sample;
     unsigned int sample_size;
@@ -131,7 +131,7 @@ typedef struct MOVStreamContext {
     int pseudo_stream_id; ///< -1 means demux all ids
     int16_t audio_cid; ///< stsd audio compression id
     unsigned drefs_count;
-    MOVDref *drefs;
+    MOV_dref_t *drefs;
     int dref_id;
     int wrong_dts; ///< dts are wrong due to negative ctts
 } MOVStreamContext;
@@ -149,7 +149,6 @@ typedef struct MOVContext {
     MOVFragment fragment; ///< current fragment in moof atom
     MOVTrackExt *trex_data;
     unsigned trex_count;
-    int itunes_metadata; ///< metadata are itunes style
 } MOVContext;
 
 
@@ -163,15 +162,15 @@ typedef struct MOVContext {
 /* links atom IDs to parse functions */
 typedef struct MOVParseTableEntry {
     uint32_t type;
-    int (*parse)(MOVContext *ctx, ByteIOContext *pb, MOVAtom atom);
+    int (*parse)(MOVContext *ctx, ByteIOContext *pb, MOV_atom_t atom);
 } MOVParseTableEntry;
 
 static const MOVParseTableEntry mov_default_parse_table[];
 
-static int mov_read_default(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_default(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
     int64_t total_size = 0;
-    MOVAtom a;
+    MOV_atom_t a;
     int i;
     int err = 0;
 
@@ -232,7 +231,7 @@ static int mov_read_default(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
     return err;
 }
 
-static int mov_read_dref(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_dref(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
     AVStream *st = c->fc->streams[c->fc->nb_streams-1];
     MOVStreamContext *sc = st->priv_data;
@@ -246,7 +245,7 @@ static int mov_read_dref(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
     sc->drefs = av_mallocz(entries * sizeof(*sc->drefs));
 
     for (i = 0; i < sc->drefs_count; i++) {
-        MOVDref *dref = &sc->drefs[i];
+        MOV_dref_t *dref = &sc->drefs[i];
         uint32_t size = get_be32(pb);
         int64_t next = url_ftell(pb) + size - 4;
 
@@ -300,7 +299,7 @@ static int mov_read_dref(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
     return 0;
 }
 
-static int mov_read_hdlr(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_hdlr(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
     AVStream *st = c->fc->streams[c->fc->nb_streams-1];
     uint32_t type;
@@ -373,7 +372,7 @@ static const AVCodecTag mp4_audio_types[] = {
     { CODEC_ID_NONE,    0 },
 };
 
-static int mov_read_esds(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_esds(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
     AVStream *st = c->fc->streams[c->fc->nb_streams-1];
     int tag, len;
@@ -430,24 +429,8 @@ static int mov_read_esds(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
     return 0;
 }
 
-static int mov_read_pasp(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
-{
-    const int num = get_be32(pb);
-    const int den = get_be32(pb);
-    AVStream * const st = c->fc->streams[c->fc->nb_streams-1];
-    if (den != 0) {
-        if ((st->sample_aspect_ratio.den && den != st->sample_aspect_ratio.den) ||
-            (st->sample_aspect_ratio.num && num != st->sample_aspect_ratio.num))
-            av_log(c->fc, AV_LOG_WARNING,
-                   "sample aspect ratio already set, overriding by 'pasp' atom\n");
-        st->sample_aspect_ratio.num = num;
-        st->sample_aspect_ratio.den = den;
-    }
-    return 0;
-}
-
 /* this atom contains actual media data */
-static int mov_read_mdat(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_mdat(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
     if(atom.size == 0) /* wrong one (MP4) */
         return 0;
@@ -455,7 +438,7 @@ static int mov_read_mdat(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
     return 0; /* now go for moov */
 }
 
-static int mov_read_ftyp(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_ftyp(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
     uint32_t type = get_le32(pb);
 
@@ -468,7 +451,7 @@ static int mov_read_ftyp(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
 }
 
 /* this atom should contain all header atoms */
-static int mov_read_moov(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_moov(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
     if (mov_read_default(c, pb, atom) < 0)
         return -1;
@@ -478,14 +461,14 @@ static int mov_read_moov(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
     return 0; /* now go for mdat */
 }
 
-static int mov_read_moof(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_moof(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
     c->fragment.moof_offset = url_ftell(pb) - 8;
     dprintf(c->fc, "moof offset %llx\n", c->fragment.moof_offset);
     return mov_read_default(c, pb, atom);
 }
 
-static int mov_read_mdhd(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_mdhd(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
     AVStream *st = c->fc->streams[c->fc->nb_streams-1];
     MOVStreamContext *sc = st->priv_data;
@@ -514,7 +497,7 @@ static int mov_read_mdhd(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
     return 0;
 }
 
-static int mov_read_mvhd(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_mvhd(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
     int version = get_byte(pb); /* version */
     get_be24(pb); /* flags */
@@ -550,7 +533,7 @@ static int mov_read_mvhd(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
     return 0;
 }
 
-static int mov_read_smi(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_smi(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
     AVStream *st = c->fc->streams[c->fc->nb_streams-1];
 
@@ -570,13 +553,12 @@ static int mov_read_smi(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
     return 0;
 }
 
-static int mov_read_enda(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_enda(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
     AVStream *st = c->fc->streams[c->fc->nb_streams-1];
     int little_endian = get_be16(pb);
 
-    dprintf(c->fc, "enda %d\n", little_endian);
-    if (little_endian == 1) {
+    if (little_endian) {
         switch (st->codec->codec_id) {
         case CODEC_ID_PCM_S24BE:
             st->codec->codec_id = CODEC_ID_PCM_S24LE;
@@ -598,16 +580,11 @@ static int mov_read_enda(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
 }
 
 /* FIXME modify qdm2/svq3/h264 decoders to take full atom as extradata */
-static int mov_read_extradata(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_extradata(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
-    AVStream *st;
-    uint64_t size;
+    AVStream *st = c->fc->streams[c->fc->nb_streams-1];
+    uint64_t size= (uint64_t)st->codec->extradata_size + atom.size + 8 + FF_INPUT_BUFFER_PADDING_SIZE;
     uint8_t *buf;
-
-    if (c->fc->nb_streams < 1) // will happen with jp2 files
-        return 0;
-    st= c->fc->streams[c->fc->nb_streams-1];
-    size= (uint64_t)st->codec->extradata_size + atom.size + 8 + FF_INPUT_BUFFER_PADDING_SIZE;
     if(size > INT_MAX || (uint64_t)atom.size > INT_MAX)
         return -1;
     buf= av_realloc(st->codec->extradata, size);
@@ -622,7 +599,7 @@ static int mov_read_extradata(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
     return 0;
 }
 
-static int mov_read_wave(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_wave(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
     AVStream *st = c->fc->streams[c->fc->nb_streams-1];
 
@@ -649,7 +626,7 @@ static int mov_read_wave(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
  * This function reads atom content and puts data in extradata without tag
  * nor size unlike mov_read_extradata.
  */
-static int mov_read_glbl(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_glbl(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
     AVStream *st = c->fc->streams[c->fc->nb_streams-1];
 
@@ -665,7 +642,7 @@ static int mov_read_glbl(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
     return 0;
 }
 
-static int mov_read_stco(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_stco(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
     AVStream *st = c->fc->streams[c->fc->nb_streams-1];
     MOVStreamContext *sc = st->priv_data;
@@ -730,7 +707,7 @@ static enum CodecID mov_get_lpcm_codec_id(int bps, int flags)
     return CODEC_ID_NONE;
 }
 
-static int mov_read_stsd(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_stsd(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
     AVStream *st = c->fc->streams[c->fc->nb_streams-1];
     MOVStreamContext *sc = st->priv_data;
@@ -745,7 +722,7 @@ static int mov_read_stsd(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
         //Parsing Sample description table
         enum CodecID id;
         int dref_id;
-        MOVAtom a = { 0, 0, 0 };
+        MOV_atom_t a = { 0, 0, 0 };
         int64_t start_pos = url_ftell(pb);
         int size = get_be32(pb); /* size */
         uint32_t format = get_le32(pb); /* data format */
@@ -1010,9 +987,6 @@ static int mov_read_stsd(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
 #endif
     /* no ifdef since parameters are always those */
     case CODEC_ID_QCELP:
-        st->codec->frame_size= 160;
-        st->codec->channels= 1; /* really needed */
-        break;
     case CODEC_ID_AMR_NB:
     case CODEC_ID_AMR_WB:
         st->codec->frame_size= sc->samples_per_frame;
@@ -1034,10 +1008,8 @@ static int mov_read_stsd(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
         st->codec->block_align = sc->bytes_per_frame;
         break;
     case CODEC_ID_ALAC:
-        if (st->codec->extradata_size == 36) {
-            st->codec->frame_size = AV_RB32(st->codec->extradata+12);
-            st->codec->channels   = AV_RB8 (st->codec->extradata+21);
-        }
+        if (st->codec->extradata_size == 36)
+            st->codec->frame_size = AV_RB32((st->codec->extradata+12));
         break;
     default:
         break;
@@ -1046,7 +1018,7 @@ static int mov_read_stsd(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
     return 0;
 }
 
-static int mov_read_stsc(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_stsc(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
     AVStream *st = c->fc->streams[c->fc->nb_streams-1];
     MOVStreamContext *sc = st->priv_data;
@@ -1057,13 +1029,13 @@ static int mov_read_stsc(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
 
     entries = get_be32(pb);
 
-    if(entries >= UINT_MAX / sizeof(*sc->sample_to_chunk))
+    if(entries >= UINT_MAX / sizeof(MOV_stsc_t))
         return -1;
 
     dprintf(c->fc, "track[%i].stsc.entries = %i\n", c->fc->nb_streams-1, entries);
 
     sc->sample_to_chunk_sz = entries;
-    sc->sample_to_chunk = av_malloc(entries * sizeof(*sc->sample_to_chunk));
+    sc->sample_to_chunk = av_malloc(entries * sizeof(MOV_stsc_t));
     if (!sc->sample_to_chunk)
         return -1;
     for(i=0; i<entries; i++) {
@@ -1074,7 +1046,7 @@ static int mov_read_stsc(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
     return 0;
 }
 
-static int mov_read_stss(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_stss(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
     AVStream *st = c->fc->streams[c->fc->nb_streams-1];
     MOVStreamContext *sc = st->priv_data;
@@ -1102,7 +1074,7 @@ static int mov_read_stss(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
     return 0;
 }
 
-static int mov_read_stsz(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_stsz(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
     AVStream *st = c->fc->streams[c->fc->nb_streams-1];
     MOVStreamContext *sc = st->priv_data;
@@ -1132,7 +1104,7 @@ static int mov_read_stsz(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
     return 0;
 }
 
-static int mov_read_stts(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_stts(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
     AVStream *st = c->fc->streams[c->fc->nb_streams-1];
     MOVStreamContext *sc = st->priv_data;
@@ -1143,11 +1115,11 @@ static int mov_read_stts(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
     get_byte(pb); /* version */
     get_be24(pb); /* flags */
     entries = get_be32(pb);
-    if(entries >= UINT_MAX / sizeof(*sc->stts_data))
+    if(entries >= UINT_MAX / sizeof(MOV_stts_t))
         return -1;
 
     sc->stts_count = entries;
-    sc->stts_data = av_malloc(entries * sizeof(*sc->stts_data));
+    sc->stts_data = av_malloc(entries * sizeof(MOV_stts_t));
     if (!sc->stts_data)
         return -1;
     dprintf(c->fc, "track[%i].stts.entries = %i\n", c->fc->nb_streams-1, entries);
@@ -1177,7 +1149,7 @@ static int mov_read_stts(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
     return 0;
 }
 
-static int mov_read_ctts(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_ctts(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
     AVStream *st = c->fc->streams[c->fc->nb_streams-1];
     MOVStreamContext *sc = st->priv_data;
@@ -1186,11 +1158,11 @@ static int mov_read_ctts(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
     get_byte(pb); /* version */
     get_be24(pb); /* flags */
     entries = get_be32(pb);
-    if(entries >= UINT_MAX / sizeof(*sc->ctts_data))
+    if(entries >= UINT_MAX / sizeof(MOV_stts_t))
         return -1;
 
     sc->ctts_count = entries;
-    sc->ctts_data = av_malloc(entries * sizeof(*sc->ctts_data));
+    sc->ctts_data = av_malloc(entries * sizeof(MOV_stts_t));
     if (!sc->ctts_data)
         return -1;
     dprintf(c->fc, "track[%i].ctts.entries = %i\n", c->fc->nb_streams-1, entries);
@@ -1319,7 +1291,7 @@ static void mov_build_index(MOVContext *mov, AVStream *st)
     sc->sample_count = st->nb_index_entries;
 }
 
-static int mov_read_trak(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_trak(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
     AVStream *st;
     MOVStreamContext *sc;
@@ -1394,71 +1366,50 @@ static int mov_read_trak(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
     return 0;
 }
 
-static int mov_read_ilst(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static void mov_parse_udta_string(ByteIOContext *pb, char *str, int size)
 {
-    int ret;
-    c->itunes_metadata = 1;
-    ret = mov_read_default(c, pb, atom);
-    c->itunes_metadata = 0;
-    return ret;
-}
+    uint16_t str_size = get_be16(pb); /* string length */;
 
-static int mov_read_meta(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
-{
-    url_fskip(pb, 4); // version + flags
-    atom.size -= 4;
-    return mov_read_default(c, pb, atom);
+    get_be16(pb); /* skip language */
+    get_buffer(pb, str, FFMIN(size, str_size));
 }
 
-static int mov_read_trkn(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_udta(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
-    get_be32(pb); // type
-    get_be32(pb); // unknown
-    c->fc->track = get_be32(pb);
-    dprintf(c->fc, "%.4s %d\n", (char*)&atom.type, c->fc->track);
-    return 0;
-}
+    uint64_t end = url_ftell(pb) + atom.size;
 
-static int mov_read_udta_string(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
-{
-    char *str = NULL;
-    int size;
-    uint16_t str_size;
-
-    if (c->itunes_metadata) {
-        int data_size = get_be32(pb);
-        int tag = get_le32(pb);
-        if (tag == MKTAG('d','a','t','a')) {
-            get_be32(pb); // type
-            get_be32(pb); // unknown
-            str_size = data_size - 16;
-        } else return 0;
-    } else {
-        str_size = get_be16(pb); // string length
-        get_be16(pb); // language
-    }
-    switch (atom.type) {
-    case MKTAG(0xa9,'n','a','m'):
-        str = c->fc->title; size = sizeof(c->fc->title); break;
-    case MKTAG(0xa9,'A','R','T'):
-    case MKTAG(0xa9,'w','r','t'):
-        str = c->fc->author; size = sizeof(c->fc->author); break;
-    case MKTAG(0xa9,'c','p','y'):
-        str = c->fc->copyright; size = sizeof(c->fc->copyright); break;
-    case MKTAG(0xa9,'c','m','t'):
-    case MKTAG(0xa9,'i','n','f'):
-        str = c->fc->comment; size = sizeof(c->fc->comment); break;
-    case MKTAG(0xa9,'a','l','b'):
-        str = c->fc->album; size = sizeof(c->fc->album); break;
+    while (url_ftell(pb) + 8 < end) {
+        uint32_t tag_size = get_be32(pb);
+        uint32_t tag      = get_le32(pb);
+        uint64_t next     = url_ftell(pb) + tag_size - 8;
+
+        if (tag_size < 8 || next > end) // stop if tag_size is wrong
+            break;
+
+        switch (tag) {
+        case MKTAG(0xa9,'n','a','m'):
+            mov_parse_udta_string(pb, c->fc->title,     sizeof(c->fc->title));
+            break;
+        case MKTAG(0xa9,'w','r','t'):
+            mov_parse_udta_string(pb, c->fc->author,    sizeof(c->fc->author));
+            break;
+        case MKTAG(0xa9,'c','p','y'):
+            mov_parse_udta_string(pb, c->fc->copyright, sizeof(c->fc->copyright));
+            break;
+        case MKTAG(0xa9,'i','n','f'):
+            mov_parse_udta_string(pb, c->fc->comment,   sizeof(c->fc->comment));
+            break;
+        default:
+            break;
+        }
+
+        url_fseek(pb, next, SEEK_SET);
     }
-    if (!str)
-        return 0;
-    get_buffer(pb, str, FFMIN(size, str_size));
-    dprintf(c->fc, "%.4s %s\n", (char*)&atom.type, str);
+
     return 0;
 }
 
-static int mov_read_tkhd(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_tkhd(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
     int i;
     int width;
@@ -1529,7 +1480,7 @@ static int mov_read_tkhd(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
     return 0;
 }
 
-static int mov_read_tfhd(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_tfhd(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
     MOVFragment *frag = &c->fragment;
     MOVTrackExt *trex = NULL;
@@ -1564,7 +1515,7 @@ static int mov_read_tfhd(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
     return 0;
 }
 
-static int mov_read_trex(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_trex(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
     MOVTrackExt *trex;
 
@@ -1584,7 +1535,7 @@ static int mov_read_trex(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
     return 0;
 }
 
-static int mov_read_trun(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_trun(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
     MOVFragment *frag = &c->fragment;
     AVStream *st;
@@ -1655,7 +1606,7 @@ static int mov_read_trun(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
 /* this atom should be null (from specs), but some buggy files put the 'moov' atom inside it... */
 /* like the files created with Adobe Premiere 5.0, for samples see */
 /* http://graphics.tudelft.nl/~wouter/publications/soundtests/ */
-static int mov_read_wide(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_wide(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
     int err;
 
@@ -1676,7 +1627,7 @@ static int mov_read_wide(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
     return err;
 }
 
-static int mov_read_cmov(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_cmov(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
 #ifdef CONFIG_ZLIB
     ByteIOContext ctx;
@@ -1729,7 +1680,7 @@ free_and_return:
 }
 
 /* edit list atom */
-static int mov_read_elst(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
+static int mov_read_elst(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
 {
     MOVStreamContext *sc = c->fc->streams[c->fc->nb_streams-1]->priv_data;
     int i, edit_count;
@@ -1764,12 +1715,10 @@ static const MOVParseTableEntry mov_default_parse_table[] = {
 { MKTAG('f','t','y','p'), mov_read_ftyp },
 { MKTAG('g','l','b','l'), mov_read_glbl },
 { MKTAG('h','d','l','r'), mov_read_hdlr },
-{ MKTAG('i','l','s','t'), mov_read_ilst },
 { MKTAG('j','p','2','h'), mov_read_extradata },
 { MKTAG('m','d','a','t'), mov_read_mdat },
 { MKTAG('m','d','h','d'), mov_read_mdhd },
 { MKTAG('m','d','i','a'), mov_read_default },
-{ MKTAG('m','e','t','a'), mov_read_meta },
 { MKTAG('m','i','n','f'), mov_read_default },
 { MKTAG('m','o','o','f'), mov_read_moof },
 { MKTAG('m','o','o','v'), mov_read_moov },
@@ -1778,7 +1727,6 @@ static const MOVParseTableEntry mov_default_parse_table[] = {
 { MKTAG('S','M','I',' '), mov_read_smi }, /* Sorenson extension ??? */
 { MKTAG('a','l','a','c'), mov_read_extradata }, /* alac specific atom */
 { MKTAG('a','v','c','C'), mov_read_glbl },
-{ MKTAG('p','a','s','p'), mov_read_pasp },
 { MKTAG('s','t','b','l'), mov_read_default },
 { MKTAG('s','t','c','o'), mov_read_stco },
 { MKTAG('s','t','s','c'), mov_read_stsc },
@@ -1791,21 +1739,12 @@ static const MOVParseTableEntry mov_default_parse_table[] = {
 { MKTAG('t','r','a','k'), mov_read_trak },
 { MKTAG('t','r','a','f'), mov_read_default },
 { MKTAG('t','r','e','x'), mov_read_trex },
-{ MKTAG('t','r','k','n'), mov_read_trkn },
 { MKTAG('t','r','u','n'), mov_read_trun },
-{ MKTAG('u','d','t','a'), mov_read_default },
+{ MKTAG('u','d','t','a'), mov_read_udta },
 { MKTAG('w','a','v','e'), mov_read_wave },
 { MKTAG('e','s','d','s'), mov_read_esds },
 { MKTAG('w','i','d','e'), mov_read_wide }, /* place holder */
 { MKTAG('c','m','o','v'), mov_read_cmov },
-{ MKTAG(0xa9,'n','a','m'), mov_read_udta_string },
-{ MKTAG(0xa9,'w','r','t'), mov_read_udta_string },
-{ MKTAG(0xa9,'c','p','y'), mov_read_udta_string },
-{ MKTAG(0xa9,'i','n','f'), mov_read_udta_string },
-{ MKTAG(0xa9,'i','n','f'), mov_read_udta_string },
-{ MKTAG(0xa9,'A','R','T'), mov_read_udta_string },
-{ MKTAG(0xa9,'a','l','b'), mov_read_udta_string },
-{ MKTAG(0xa9,'c','m','t'), mov_read_udta_string },
 { 0, NULL }
 };
 
@@ -1859,7 +1798,7 @@ static int mov_read_header(AVFormatContext *s, AVFormatParameters *ap)
     MOVContext *mov = s->priv_data;
     ByteIOContext *pb = s->pb;
     int err;
-    MOVAtom atom = { 0, 0, 0 };
+    MOV_atom_t atom = { 0, 0, 0 };
 
     mov->fc = s;
     /* .mov and .mp4 aren't streamable anyway (only progressive download if moov is before mdat) */
@@ -1912,7 +1851,7 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt)
     if (!sample) {
         mov->found_mdat = 0;
         if (!url_is_streamed(s->pb) ||
-            mov_read_default(mov, s->pb, (MOVAtom){ 0, 0, INT64_MAX }) < 0 ||
+            mov_read_default(mov, s->pb, (MOV_atom_t){ 0, 0, INT64_MAX }) < 0 ||
             url_feof(s->pb))
             return -1;
         dprintf(s, "read fragments, offset 0x%llx\n", url_ftell(s->pb));
diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index 6ddbed1..9588bb6 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -723,7 +723,7 @@ static int mov_write_stsd_tag(ByteIOContext *pb, MOVTrack *track)
 
 static int mov_write_ctts_tag(ByteIOContext *pb, MOVTrack *track)
 {
-    MOVStts *ctts_entries;
+    MOV_stts_t *ctts_entries;
     uint32_t entries = 0;
     uint32_t atom_size;
     int i;
@@ -757,7 +757,7 @@ static int mov_write_ctts_tag(ByteIOContext *pb, MOVTrack *track)
 /* Time to sample atom */
 static int mov_write_stts_tag(ByteIOContext *pb, MOVTrack *track)
 {
-    MOVStts *stts_entries;
+    MOV_stts_t *stts_entries;
     uint32_t entries = -1;
     uint32_t atom_size;
     int i;
diff --git a/libavformat/mp3.c b/libavformat/mp3.c
index a4eb49c..407d4f0 100644
--- a/libavformat/mp3.c
+++ b/libavformat/mp3.c
@@ -383,7 +383,7 @@ static int mp3_read_probe(AVProbeData *p)
 
         for(frames = 0; buf2 < end; frames++) {
             header = AV_RB32(buf2);
-            fsize = ff_mpa_decode_header(&avctx, header, &sample_rate, &sample_rate, &sample_rate, &sample_rate);
+            fsize = ff_mpa_decode_header(&avctx, header, &sample_rate);
             if(fsize < 0)
                 break;
             buf2 += fsize;
@@ -402,22 +402,20 @@ static int mp3_read_probe(AVProbeData *p)
 /**
  * Try to find Xing/Info/VBRI tags and compute duration from info therein
  */
-static int mp3_parse_vbr_tags(AVFormatContext *s, AVStream *st, int64_t base)
+static void mp3_parse_vbr_tags(AVFormatContext *s, AVStream *st, int64_t base)
 {
     uint32_t v, spf;
     int frames = -1; /* Total number of frames in file */
     const int64_t xing_offtbl[2][2] = {{32, 17}, {17,9}};
     MPADecodeContext c;
-    int vbrtag_size = 0;
 
     v = get_be32(s->pb);
     if(ff_mpa_check_header(v) < 0)
-      return -1;
+      return;
 
-    if (ff_mpegaudio_decode_header(&c, v) == 0)
-        vbrtag_size = c.frame_size;
+    ff_mpegaudio_decode_header(&c, v);
     if(c.layer != 3)
-        return -1;
+        return;
 
     /* Check for Xing / Info tag */
     url_fseek(s->pb, xing_offtbl[c.lsf == 1][c.nb_channels == 1], SEEK_CUR);
@@ -441,15 +439,11 @@ static int mp3_parse_vbr_tags(AVFormatContext *s, AVStream *st, int64_t base)
     }
 
     if(frames < 0)
-        return -1;
-
-    /* Skip the vbr tag frame */
-    url_fseek(s->pb, base + vbrtag_size, SEEK_SET);
+        return;
 
     spf = c.lsf ? 576 : 1152; /* Samples per frame, layer 3 */
     st->duration = av_rescale_q(frames, (AVRational){spf, c.sample_rate},
                                 st->time_base);
-    return 0;
 }
 
 static int mp3_read_header(AVFormatContext *s,
@@ -499,8 +493,8 @@ static int mp3_read_header(AVFormatContext *s,
     }
 
     off = url_ftell(s->pb);
-    if (mp3_parse_vbr_tags(s, st, off) < 0)
-        url_fseek(s->pb, off, SEEK_SET);
+    mp3_parse_vbr_tags(s, st, off);
+    url_fseek(s->pb, off, SEEK_SET);
 
     /* the parameters will be extracted from the compressed bitstream */
     return 0;
diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
index 00ce336..48aca43 100644
--- a/libavformat/mpegts.c
+++ b/libavformat/mpegts.c
@@ -22,7 +22,6 @@
 #include "libavutil/crc.h"
 #include "avformat.h"
 #include "mpegts.h"
-#include "internal.h"
 
 //#define DEBUG_SI
 //#define DEBUG_SEEK
@@ -39,6 +38,8 @@ typedef struct PESContext PESContext;
 
 static PESContext* add_pes_stream(MpegTSContext *ts, int pid, int pcr_pid, int stream_type);
 static AVStream* new_pes_av_stream(PESContext *pes, uint32_t code);
+extern void av_set_program_name(AVProgram *program, char *provider_name, char *name);
+extern void av_program_add_stream_index(AVFormatContext *ac, int progid, unsigned int idx);
 
 enum MpegTSFilterType {
     MPEGTS_PES,
@@ -79,11 +80,11 @@ struct MpegTSFilter {
 };
 
 #define MAX_PIDS_PER_PROGRAM 64
-struct Program {
+typedef struct {
     unsigned int id; //program id/service id
     unsigned int nb_pids;
     unsigned int pids[MAX_PIDS_PER_PROGRAM];
-};
+} Program_t;
 
 struct MpegTSContext {
     /* user data */
@@ -113,7 +114,7 @@ struct MpegTSContext {
     /* scan context */
     /** structure to keep track of Program->pids mapping     */
     unsigned int nb_prg;
-    struct Program *prg;
+    Program_t *prg;
 
 
     /** filters for various streams specified by PMT + for the PAT and PMT */
@@ -168,8 +169,8 @@ static void clear_programs(MpegTSContext *ts)
 
 static void add_pat_entry(MpegTSContext *ts, unsigned int programid)
 {
-    struct Program *p;
-    void *tmp = av_realloc(ts->prg, (ts->nb_prg+1)*sizeof(struct Program));
+    Program_t *p;
+    void *tmp = av_realloc(ts->prg, (ts->nb_prg+1)*sizeof(Program_t));
     if(!tmp)
         return;
     ts->prg = tmp;
@@ -182,7 +183,7 @@ static void add_pat_entry(MpegTSContext *ts, unsigned int programid)
 static void add_pid_to_pmt(MpegTSContext *ts, unsigned int programid, unsigned int pid)
 {
     int i;
-    struct Program *p = NULL;
+    Program_t *p = NULL;
     for(i=0; i<ts->nb_prg; i++) {
         if(ts->prg[i].id == programid) {
             p = &ts->prg[i];
@@ -209,7 +210,7 @@ static int discard_pid(MpegTSContext *ts, unsigned int pid)
 {
     int i, j, k;
     int used = 0, discarded = 0;
-    struct Program *p;
+    Program_t *p;
     for(i=0; i<ts->nb_prg; i++) {
         p = &ts->prg[i];
         for(j=0; j<p->nb_pids; j++) {
diff --git a/libavformat/mtv.c b/libavformat/mtv.c
index 7bf0d84..75da0e7 100644
--- a/libavformat/mtv.c
+++ b/libavformat/mtv.c
@@ -36,23 +36,24 @@
 
 typedef struct MTVDemuxContext {
 
-    unsigned int file_size;         ///< filesize, not always right
-    unsigned int segments;          ///< number of 512 byte segments
-    unsigned int audio_identifier;  ///< 'MP3' on all files I have seen
-    unsigned int audio_br;          ///< bitrate of audio chanel (mp3)
-    unsigned int img_colorfmt;      ///< frame colorfmt rgb 565/555
-    unsigned int img_bpp;           ///< frame bits per pixel
-    unsigned int img_width;         //
-    unsigned int img_height;        //
-    unsigned int img_segment_size;  ///< size of image segment
-    unsigned int video_fps;         //
-    unsigned int full_segment_size;
+    unsigned int        file_size;         ///< filesize, not always right
+    unsigned int        segments;          ///< number of 512 byte segments
+    unsigned int        audio_identifier;  ///< 'MP3' on all files I have seen
+    unsigned int        audio_br;          ///< bitrate of audio chanel (mp3)
+    unsigned int        img_colorfmt;      ///< frame colorfmt rgb 565/555
+    unsigned int        img_bpp;           ///< frame bits per pixel
+    unsigned int        img_width;         //
+    unsigned int        img_height;        //
+    unsigned int        img_segment_size;  ///< size of image segment
+    unsigned int        video_fps;         //
+    unsigned int        full_segment_size;
 
 } MTVDemuxContext;
 
 static int mtv_probe(AVProbeData *p)
 {
     /* Magic is 'AMV' */
+
     if(*(p->buf) != 'A' || *(p->buf+1) != 'M' || *(p->buf+2) != 'V')
         return 0;
 
@@ -61,10 +62,11 @@ static int mtv_probe(AVProbeData *p)
 
 static int mtv_read_header(AVFormatContext *s, AVFormatParameters *ap)
 {
-    MTVDemuxContext *mtv = s->priv_data;
-    ByteIOContext   *pb  = s->pb;
-    AVStream        *st;
-    unsigned int    audio_subsegments;
+    MTVDemuxContext    *mtv = s->priv_data;
+    ByteIOContext      *pb  = s->pb;
+    AVStream           *st;
+    unsigned int        audio_subsegments;
+
 
     url_fskip(pb, 3);
     mtv->file_size         = get_le32(pb);
@@ -84,11 +86,11 @@ static int mtv_read_header(AVFormatContext *s, AVFormatParameters *ap)
         mtv->img_segment_size;
     mtv->video_fps         = (mtv->audio_br / 4) / audio_subsegments;
 
-    // FIXME Add sanity check here
+    /* FIXME Add sanity check here */
 
-    // all systems go! init decoders
+    /* all systems go! init decoders */
 
-    // video - raw rgb565
+    /* video - raw rgb565 */
 
     st = av_new_stream(s, VIDEO_SID);
     if(!st)
@@ -103,7 +105,7 @@ static int mtv_read_header(AVFormatContext *s, AVFormatParameters *ap)
     st->codec->bits_per_coded_sample = mtv->img_bpp;
     st->codec->sample_rate     = mtv->video_fps;
 
-    // audio - mp3
+    /* audio - mp3 */
 
     st = av_new_stream(s, AUDIO_SID);
     if(!st)
@@ -115,7 +117,7 @@ static int mtv_read_header(AVFormatContext *s, AVFormatParameters *ap)
     st->codec->bit_rate        = mtv->audio_br;
     st->need_parsing           = AVSTREAM_PARSE_FULL;
 
-    // Jump over header
+    /* Jump over header */
 
     if(url_fseek(pb, MTV_HEADER_SIZE, SEEK_SET) != MTV_HEADER_SIZE)
         return AVERROR(EIO);
diff --git a/libavformat/mxf.h b/libavformat/mxf.h
index 39c8c16..4c17a9e 100644
--- a/libavformat/mxf.h
+++ b/libavformat/mxf.h
@@ -41,7 +41,6 @@ enum MXFMetadataSetType {
     Identification,
     ContentStorage,
     SubDescriptor,
-    IndexTableSegment,
     TypeBottom,// add metadata type before this
 };
 
diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c
index 6dafdc6..98cf41d 100644
--- a/libavformat/mxfdec.c
+++ b/libavformat/mxfdec.c
@@ -104,11 +104,6 @@ typedef struct {
 typedef struct {
     UID uid;
     enum MXFMetadataSetType type;
-} MXFIndexTableSegment;
-
-typedef struct {
-    UID uid;
-    enum MXFMetadataSetType type;
     UID package_uid;
     UID *tracks_refs;
     int tracks_count;
@@ -305,7 +300,6 @@ static int mxf_read_packet(AVFormatContext *s, AVPacket *pkt)
         if (klv_read_packet(&klv, s->pb) < 0)
             return -1;
         PRINT_KEY(s, "read packet", klv.key);
-        dprintf(s, "size %lld offset %#llx\n", klv.length, klv.offset);
         if (IS_KLV_KEY(klv.key, mxf_encrypted_triplet_key)) {
             int res = mxf_decrypt_triplet(s, pkt, &klv);
             if (res < 0) {
@@ -502,26 +496,13 @@ static int mxf_read_source_package(MXFPackage *package, ByteIOContext *pb, int t
     return 0;
 }
 
-static int mxf_read_index_table_segment(MXFIndexTableSegment *segment, ByteIOContext *pb, int tag)
-{
-    switch(tag) {
-    case 0x3F05: dprintf(NULL, "EditUnitByteCount %d\n", get_be32(pb)); break;
-    case 0x3F06: dprintf(NULL, "IndexSID %d\n", get_be32(pb)); break;
-    case 0x3F07: dprintf(NULL, "BodySID %d\n", get_be32(pb)); break;
-    case 0x3F0B: dprintf(NULL, "IndexEditRate %d/%d\n", get_be32(pb), get_be32(pb)); break;
-    case 0x3F0C: dprintf(NULL, "IndexStartPosition %lld\n", get_be64(pb)); break;
-    case 0x3F0D: dprintf(NULL, "IndexDuration %lld\n", get_be64(pb)); break;
-    }
-    return 0;
-}
-
 static void mxf_read_pixel_layout(ByteIOContext *pb, MXFDescriptor *descriptor)
 {
     int code;
 
     do {
         code = get_byte(pb);
-        dprintf(NULL, "pixel layout: code %#x\n", code);
+        dprintf(NULL, "pixel layout: code 0x%x\n", code);
         switch (code) {
         case 0x52: /* R */
             descriptor->bits_per_sample += get_byte(pb);
@@ -856,7 +837,6 @@ static const MXFMetadataReadTableEntry mxf_metadata_read_table[] = {
     { { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x3A,0x00 }, mxf_read_track, sizeof(MXFTrack), Track }, /* Static Track */
     { { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x01,0x01,0x01,0x01,0x3B,0x00 }, mxf_read_track, sizeof(MXFTrack), Track }, /* Generic Track */
     { { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x04,0x01,0x02,0x02,0x00,0x00 }, mxf_read_cryptographic_context, sizeof(MXFCryptoContext), CryptoContext },
-    { { 0x06,0x0E,0x2B,0x34,0x02,0x53,0x01,0x01,0x0d,0x01,0x02,0x01,0x01,0x10,0x01,0x00 }, mxf_read_index_table_segment, sizeof(MXFIndexTableSegment), IndexTableSegment },
     { { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, NULL, 0, AnyType },
 };
 
@@ -874,9 +854,8 @@ static int mxf_read_local_tags(MXFContext *mxf, KLVPacket *klv, int (*read_child
         uint64_t next = url_ftell(pb) + size;
         UID uid = {0};
 
-        dprintf(mxf->fc, "local tag %#04x size %d\n", tag, size);
         if (!size) { /* ignore empty tag, needed for some files with empty UMID tag */
-            av_log(mxf->fc, AV_LOG_ERROR, "local tag %#04x with 0 size\n", tag);
+            av_log(mxf->fc, AV_LOG_ERROR, "local tag 0x%04X with 0 size\n", tag);
             continue;
         }
         if (tag > 0x7FFF) { /* dynamic tag */
@@ -885,7 +864,7 @@ static int mxf_read_local_tags(MXFContext *mxf, KLVPacket *klv, int (*read_child
                 int local_tag = AV_RB16(mxf->local_tags+i*18);
                 if (local_tag == tag) {
                     memcpy(uid, mxf->local_tags+i*18+2, 16);
-                    dprintf(mxf->fc, "local tag %#04x\n", local_tag);
+                    dprintf(mxf->fc, "local tag 0x%04X\n", local_tag);
                     PRINT_KEY(mxf->fc, "uid", uid);
                 }
             }
@@ -918,7 +897,6 @@ static int mxf_read_header(AVFormatContext *s, AVFormatParameters *ap)
         if (klv_read_packet(&klv, s->pb) < 0)
             return -1;
         PRINT_KEY(s, "read header", klv.key);
-        dprintf(s, "size %lld offset %#llx\n", klv.length, klv.offset);
         if (IS_KLV_KEY(klv.key, mxf_encrypted_triplet_key) ||
             IS_KLV_KEY(klv.key, mxf_essence_element_key)) {
             /* FIXME avoid seek */
diff --git a/libavformat/nut.c b/libavformat/nut.c
index 6fdc298..7a978a5 100644
--- a/libavformat/nut.c
+++ b/libavformat/nut.c
@@ -47,16 +47,16 @@ int64_t ff_lsb2full(StreamContext *stream, int64_t lsb){
     return  ((lsb - delta)&mask) + delta;
 }
 
-int ff_nut_sp_pos_cmp(Syncpoint *a, Syncpoint *b){
+int ff_nut_sp_pos_cmp(syncpoint_t *a, syncpoint_t *b){
     return ((a->pos - b->pos) >> 32) - ((b->pos - a->pos) >> 32);
 }
 
-int ff_nut_sp_pts_cmp(Syncpoint *a, Syncpoint *b){
+int ff_nut_sp_pts_cmp(syncpoint_t *a, syncpoint_t *b){
     return ((a->ts - b->ts) >> 32) - ((b->ts - a->ts) >> 32);
 }
 
 void ff_nut_add_sp(NUTContext *nut, int64_t pos, int64_t back_ptr, int64_t ts){
-    Syncpoint *sp= av_mallocz(sizeof(Syncpoint));
+    syncpoint_t *sp= av_mallocz(sizeof(syncpoint_t));
     struct AVTreeNode *node= av_mallocz(av_tree_node_size);
 
     sp->pos= pos;
diff --git a/libavformat/nut.h b/libavformat/nut.h
index a1081ed..713d27d 100644
--- a/libavformat/nut.h
+++ b/libavformat/nut.h
@@ -50,14 +50,14 @@ typedef enum{
     FLAG_MATCH_TIME =2048, ///<If set, match_time_delta is coded in the frame header
     FLAG_CODED      =4096, ///<if set, coded_flags are stored in the frame header
     FLAG_INVALID    =8192, ///<if set, frame_code is invalid
-} Flag;
+}flag_t;
 
 typedef struct {
     uint64_t pos;
     uint64_t back_ptr;
 //    uint64_t global_key_pts;
     int64_t ts;
-} Syncpoint;
+} syncpoint_t;
 
 typedef struct {
     uint16_t flags;
@@ -67,7 +67,7 @@ typedef struct {
     int16_t  pts_delta;
     uint8_t  reserved_count;
     uint8_t  header_idx;
-} FrameCode;
+} FrameCode; // maybe s/FrameCode/framecode_t/ or change all to Java style but do not mix
 
 typedef struct {
     int last_flags;
@@ -78,7 +78,7 @@ typedef struct {
     int msb_pts_shift;
     int max_pts_distance;
     int decode_delay; //FIXME duplicate of has_b_frames
-} StreamContext;
+} StreamContext;// maybe s/StreamContext/streamcontext_t/
 
 typedef struct {
     AVFormatContext *avf;
@@ -106,8 +106,8 @@ typedef struct {
 
 void ff_nut_reset_ts(NUTContext *nut, AVRational time_base, int64_t val);
 int64_t ff_lsb2full(StreamContext *stream, int64_t lsb);
-int ff_nut_sp_pos_cmp(Syncpoint *a, Syncpoint *b);
-int ff_nut_sp_pts_cmp(Syncpoint *a, Syncpoint *b);
+int ff_nut_sp_pos_cmp(syncpoint_t *a, syncpoint_t *b);
+int ff_nut_sp_pts_cmp(syncpoint_t *a, syncpoint_t *b);
 void ff_nut_add_sp(NUTContext *nut, int64_t pos, int64_t back_ptr, int64_t ts);
 
 extern const Dispositions ff_nut_dispositions[];
diff --git a/libavformat/nutdec.c b/libavformat/nutdec.c
index 098bc84..cf41f62 100644
--- a/libavformat/nutdec.c
+++ b/libavformat/nutdec.c
@@ -846,9 +846,9 @@ assert(0);
 static int read_seek(AVFormatContext *s, int stream_index, int64_t pts, int flags){
     NUTContext *nut = s->priv_data;
     AVStream *st= s->streams[stream_index];
-    Syncpoint dummy={.ts= pts*av_q2d(st->time_base)*AV_TIME_BASE};
-    Syncpoint nopts_sp= {.ts= AV_NOPTS_VALUE, .back_ptr= AV_NOPTS_VALUE};
-    Syncpoint *sp, *next_node[2]= {&nopts_sp, &nopts_sp};
+    syncpoint_t dummy={.ts= pts*av_q2d(st->time_base)*AV_TIME_BASE};
+    syncpoint_t nopts_sp= {.ts= AV_NOPTS_VALUE, .back_ptr= AV_NOPTS_VALUE};
+    syncpoint_t *sp, *next_node[2]= {&nopts_sp, &nopts_sp};
     int64_t pos, pos2, ts;
     int i;
 
diff --git a/libavformat/nutenc.c b/libavformat/nutenc.c
index 54d4b07..478fc4f 100644
--- a/libavformat/nutenc.c
+++ b/libavformat/nutenc.c
@@ -260,7 +260,7 @@ static void put_v(ByteIOContext *bc, uint64_t val){
     put_byte(bc, val&127);
 }
 
-static void put_tt(NUTContext *nut, StreamContext *nus, ByteIOContext *bc, uint64_t val){
+static void put_t(NUTContext *nut, StreamContext *nus, ByteIOContext *bc, uint64_t val){
     val *= nut->time_base_count;
     val += nus->time_base - nut->time_base;
     put_v(bc, val);
@@ -664,7 +664,7 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt){
 //FIXME: Ensure store_sp is 1 in the first place.
 
     if(store_sp){
-        Syncpoint *sp, dummy= {.pos= INT64_MAX};
+        syncpoint_t *sp, dummy= {.pos= INT64_MAX};
 
         ff_nut_reset_ts(nut, *nus->time_base, pkt->dts);
         for(i=0; i<s->nb_streams; i++){
@@ -684,7 +684,7 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt){
         ret = url_open_dyn_buf(&dyn_bc);
         if(ret < 0)
             return ret;
-        put_tt(nut, nus, dyn_bc, pkt->dts);
+        put_t(nut, nus, dyn_bc, pkt->dts);
         put_v(dyn_bc, sp ? (nut->last_syncpoint_pos - sp->pos)>>4 : 0);
         put_packet(nut, bc, dyn_bc, 1, SYNCPOINT_STARTCODE);
 
diff --git a/libavformat/nuv.c b/libavformat/nuv.c
index 7a01e68..bd98839 100644
--- a/libavformat/nuv.c
+++ b/libavformat/nuv.c
@@ -33,7 +33,7 @@ typedef enum {
     NUV_AUDIO = 'A',
     NUV_SEEKP = 'R',
     NUV_MYTHEXT = 'X'
-} nuv_frametype;
+} frametype_t;
 
 static int nuv_probe(AVProbeData *p) {
     if (!memcmp(p->buf, "NuppelVideo", 12))
@@ -55,7 +55,7 @@ static int nuv_probe(AVProbeData *p) {
  */
 static int get_codec_data(ByteIOContext *pb, AVStream *vst,
                           AVStream *ast, int myth) {
-    nuv_frametype frametype;
+    frametype_t frametype;
     if (!vst && !myth)
         return 1; // no codec data needed
     while (!url_feof(pb)) {
@@ -191,7 +191,7 @@ static int nuv_packet(AVFormatContext *s, AVPacket *pkt) {
     NUVContext *ctx = s->priv_data;
     ByteIOContext *pb = s->pb;
     uint8_t hdr[HDRSIZE];
-    nuv_frametype frametype;
+    frametype_t frametype;
     int ret, size;
     while (!url_feof(pb)) {
         int copyhdrsize = ctx->rtjpg_video ? HDRSIZE : 0;
diff --git a/libavformat/oggdec.h b/libavformat/oggdec.h
index d238e99..1a73fe0 100644
--- a/libavformat/oggdec.h
+++ b/libavformat/oggdec.h
@@ -85,6 +85,6 @@ extern const struct ogg_codec ff_speex_codec;
 extern const struct ogg_codec ff_theora_codec;
 extern const struct ogg_codec ff_vorbis_codec;
 
-int vorbis_comment(AVFormatContext *ms, uint8_t *buf, int size);
+extern int vorbis_comment(AVFormatContext *ms, uint8_t *buf, int size);
 
 #endif /* AVFORMAT_OGGDEC_H */
diff --git a/libavformat/oggparseflac.c b/libavformat/oggparseflac.c
index 802453a..b1332c6 100644
--- a/libavformat/oggparseflac.c
+++ b/libavformat/oggparseflac.c
@@ -38,21 +38,21 @@ flac_header (AVFormatContext * s, int idx)
         return 0;
 
     init_get_bits(&gb, os->buf + os->pstart, os->psize*8);
-    skip_bits1(&gb); /* metadata_last */
+    get_bits(&gb, 1); /* metadata_last */
     mdt = get_bits(&gb, 7);
 
     if (mdt == 0x7f) {
-        skip_bits_long(&gb, 4*8); /* "FLAC" */
+        skip_bits(&gb, 4*8); /* "FLAC" */
         if(get_bits(&gb, 8) != 1) /* unsupported major version */
             return -1;
-        skip_bits_long(&gb, 8 + 16); /* minor version + header count */
-        skip_bits_long(&gb, 4*8); /* "fLaC" */
+        skip_bits(&gb, 8 + 16);      /* minor version + header count */
+        skip_bits(&gb, 4*8); /* "fLaC" */
 
         /* METADATA_BLOCK_HEADER */
         if (get_bits_long(&gb, 32) != FLAC_STREAMINFO_SIZE)
             return -1;
 
-        skip_bits_long(&gb, 16*2+24*2);
+        skip_bits(&gb, 16*2+24*2);
 
         st->codec->sample_rate = get_bits_long(&gb, 20);
         st->codec->channels = get_bits(&gb, 3) + 1;
diff --git a/libavformat/oggparsevorbis.c b/libavformat/oggparsevorbis.c
index a1eb20d..1f0bcfe 100644
--- a/libavformat/oggparsevorbis.c
+++ b/libavformat/oggparsevorbis.c
@@ -30,7 +30,7 @@
 #include "avformat.h"
 #include "oggdec.h"
 
-int
+extern int
 vorbis_comment(AVFormatContext * as, uint8_t *buf, int size)
 {
     const uint8_t *p = buf;
diff --git a/libavformat/os_support.h b/libavformat/os_support.h
index 0b6a292..2fd3112 100644
--- a/libavformat/os_support.h
+++ b/libavformat/os_support.h
@@ -93,7 +93,7 @@ struct pollfd {
 #define POLLNVAL   0x1000  /* invalid file descriptor */
 
 
-int poll(struct pollfd *fds, nfds_t numfds, int timeout);
+extern int poll(struct pollfd *fds, nfds_t numfds, int timeout);
 #endif /* HAVE_POLL_H */
 #endif /* CONFIG_FFSERVER */
 #endif /* CONFIG_NETWORK */
diff --git a/libavformat/raw.c b/libavformat/raw.c
index b93cdcc..f2a886c 100644
--- a/libavformat/raw.c
+++ b/libavformat/raw.c
@@ -577,38 +577,6 @@ static int flac_probe(AVProbeData *p)
 }
 #endif
 
-#ifdef CONFIG_AAC_DEMUXER
-static int adts_aac_probe(AVProbeData *p)
-{
-    int max_frames = 0, first_frames = 0;
-    int fsize, frames;
-    uint8_t *buf2;
-    uint8_t *buf = p->buf;
-    uint8_t *end = buf + p->buf_size - 7;
-
-    for(; buf < end; buf= buf2+1) {
-        buf2 = buf;
-
-        for(frames = 0; buf2 < end; frames++) {
-            uint32_t header = AV_RB16(buf2);
-            if((header&0xFFF6) != 0xFFF0)
-                break;
-            fsize = (AV_RB32(buf2+3)>>13) & 0x8FFF;
-            if(fsize < 7)
-                break;
-            buf2 += fsize;
-        }
-        max_frames = FFMAX(max_frames, frames);
-        if(buf == p->buf)
-            first_frames= frames;
-    }
-    if   (first_frames>=3) return AVPROBE_SCORE_MAX/2+1;
-    else if(max_frames>500)return AVPROBE_SCORE_MAX/2;
-    else if(max_frames>=3) return AVPROBE_SCORE_MAX/4;
-    else if(max_frames>=1) return 1;
-    else                   return 0;
-}
-#endif
 
 /* Note: Do not forget to add new entries to the Makefile as well. */
 
@@ -617,7 +585,7 @@ AVInputFormat aac_demuxer = {
     "aac",
     NULL_IF_CONFIG_SMALL("ADTS AAC"),
     0,
-    adts_aac_probe,
+    NULL,
     audio_read_header,
     raw_read_partial_packet,
     .flags= AVFMT_GENERIC_INDEX,
@@ -923,7 +891,7 @@ AVInputFormat m4v_demuxer = {
     video_read_header,
     raw_read_partial_packet,
     .flags= AVFMT_GENERIC_INDEX,
-    .extensions = "m4v",
+    .extensions = "m4v", //FIXME remove after writing mpeg4_probe
     .value = CODEC_ID_MPEG4,
 };
 #endif
diff --git a/libavformat/rdt.c b/libavformat/rdt.c
index 3680527..c474663 100644
--- a/libavformat/rdt.c
+++ b/libavformat/rdt.c
@@ -33,25 +33,17 @@
 #include "libavutil/md5.h"
 #include "rm.h"
 #include "internal.h"
-#include <libavcodec/bitstream.h>
 
 struct RDTDemuxContext {
-    AVFormatContext *ic; /**< the containing (RTSP) demux context */
-    /** Each RDT stream-set (represented by one RTSPStream) can contain
-     * multiple streams (of the same content, but with possibly different
-     * codecs/bitrates). Each such stream is represented by one AVStream
-     * in the AVFormatContext, and this variable points to the offset in
-     * that array such that the first is the first stream of this set. */
-    AVStream **streams;
-    int n_streams; /**< streams with identifical content in this set */
+    AVFormatContext *ic;
+    AVStream *st;
     void *dynamic_protocol_context;
     DynamicPayloadPacketHandlerProc parse_packet;
-    uint32_t prev_timestamp;
-    int prev_set_id, prev_stream_id;
+    uint32_t prev_sn, prev_ts;
 };
 
 RDTDemuxContext *
-ff_rdt_parse_open(AVFormatContext *ic, int first_stream_of_set_idx,
+ff_rdt_parse_open(AVFormatContext *ic, AVStream *st,
                   void *priv_data, RTPDynamicProtocolHandler *handler)
 {
     RDTDemuxContext *s = av_mallocz(sizeof(RDTDemuxContext));
@@ -59,14 +51,9 @@ ff_rdt_parse_open(AVFormatContext *ic, int first_stream_of_set_idx,
         return NULL;
 
     s->ic = ic;
-    s->streams = &ic->streams[first_stream_of_set_idx];
-    do {
-        s->n_streams++;
-    } while (first_stream_of_set_idx + s->n_streams < ic->nb_streams &&
-             s->streams[s->n_streams]->priv_data == s->streams[0]->priv_data);
-    s->prev_set_id    = -1;
-    s->prev_stream_id = -1;
-    s->prev_timestamp = -1;
+    s->st = st;
+    s->prev_sn = -1;
+    s->prev_ts = -1;
     s->parse_packet = handler->parse_packet;
     s->dynamic_protocol_context = priv_data;
 
@@ -76,21 +63,14 @@ ff_rdt_parse_open(AVFormatContext *ic, int first_stream_of_set_idx,
 void
 ff_rdt_parse_close(RDTDemuxContext *s)
 {
-    int i;
-
-    for (i = 1; i < s->n_streams; i++)
-        s->streams[i]->priv_data = NULL;
-
     av_free(s);
 }
 
 struct PayloadContext {
     AVFormatContext *rmctx;
-    RMStream *rmst[MAX_STREAMS];
     uint8_t *mlti_data;
     unsigned int mlti_data_size;
     char buffer[RTP_MAX_PACKET_LENGTH + FF_INPUT_BUFFER_PADDING_SIZE];
-    int audio_pkt_cnt; /**< remaining audio packets in rmdec */
 };
 
 void
@@ -135,7 +115,7 @@ ff_rdt_calc_response_and_checksum(char response[41], char chksum[9],
 static int
 rdt_load_mdpr (PayloadContext *rdt, AVStream *st, int rule_nr)
 {
-    ByteIOContext pb;
+    ByteIOContext *pb;
     int size;
     uint32_t tag;
 
@@ -155,34 +135,35 @@ rdt_load_mdpr (PayloadContext *rdt, AVStream *st, int rule_nr)
      */
     if (!rdt->mlti_data)
         return -1;
-    init_put_byte(&pb, rdt->mlti_data, rdt->mlti_data_size, 0,
-                  NULL, NULL, NULL, NULL);
-    tag = get_le32(&pb);
+    url_open_buf(&pb, rdt->mlti_data, rdt->mlti_data_size, URL_RDONLY);
+    tag = get_le32(pb);
     if (tag == MKTAG('M', 'L', 'T', 'I')) {
         int num, chunk_nr;
 
         /* read index of MDPR chunk numbers */
-        num = get_be16(&pb);
+        num = get_be16(pb);
         if (rule_nr < 0 || rule_nr >= num)
             return -1;
-        url_fskip(&pb, rule_nr * 2);
-        chunk_nr = get_be16(&pb);
-        url_fskip(&pb, (num - 1 - rule_nr) * 2);
+        url_fskip(pb, rule_nr * 2);
+        chunk_nr = get_be16(pb);
+        url_fskip(pb, (num - 1 - rule_nr) * 2);
 
         /* read MDPR chunks */
-        num = get_be16(&pb);
+        num = get_be16(pb);
         if (chunk_nr >= num)
             return -1;
         while (chunk_nr--)
-            url_fskip(&pb, get_be32(&pb));
-        size = get_be32(&pb);
+            url_fskip(pb, get_be32(pb));
+        size = get_be32(pb);
     } else {
         size = rdt->mlti_data_size;
-        url_fseek(&pb, 0, SEEK_SET);
+        url_fseek(pb, 0, SEEK_SET);
     }
-    if (ff_rm_read_mdpr_codecdata(rdt->rmctx, &pb, st, rdt->rmst[st->index], size) < 0)
+    rdt->rmctx->pb = pb;
+    if (ff_rm_read_mdpr_codecdata(rdt->rmctx, st, size) < 0)
         return -1;
 
+    url_close_buf(pb);
     return 0;
 }
 
@@ -192,105 +173,23 @@ rdt_load_mdpr (PayloadContext *rdt, AVStream *st, int rule_nr)
 
 int
 ff_rdt_parse_header(const uint8_t *buf, int len,
-                    int *pset_id, int *pseq_no, int *pstream_id,
-                    int *pis_keyframe, uint32_t *ptimestamp)
+                    int *sn, int *seq, int *rn, uint32_t *ts)
 {
-    GetBitContext gb;
-    int consumed = 0, set_id, seq_no, stream_id, is_keyframe,
-        len_included, need_reliable;
-    uint32_t timestamp;
-
-    /* skip status packets */
-    while (len >= 5 && buf[1] == 0xFF /* status packet */) {
-        int pkt_len;
-
-        if (!(buf[0] & 0x80))
-            return -1; /* not followed by a data packet */
+    int consumed = 10;
 
-        pkt_len = AV_RB16(buf+3);
-        buf += pkt_len;
-        len -= pkt_len;
-        consumed += pkt_len;
+    if (len > 0 && (buf[0] < 0x40 || buf[0] > 0x42)) {
+        buf += 9;
+        len -= 9;
+        consumed += 9;
     }
-    if (len < 16)
+    if (len < 10)
         return -1;
-    /**
-     * Layout of the header (in bits):
-     * 1:  len_included
-     *     Flag indicating whether this header includes a length field;
-     *     this can be used to concatenate multiple RDT packets in a
-     *     single UDP/TCP data frame and is used to precede RDT data
-     *     by stream status packets
-     * 1:  need_reliable
-     *     Flag indicating whether this header includes a "reliable
-     *     sequence number"; these are apparently sequence numbers of
-     *     data packets alone. For data packets, this flag is always
-     *     set, according to the Real documentation [1]
-     * 5:  set_id
-     *     ID of a set of streams of identical content, possibly with
-     *     different codecs or bitrates
-     * 1:  is_reliable
-     *     Flag set for certain streams deemed less tolerable for packet
-     *     loss
-     * 16: seq_no
-     *     Packet sequence number; if >=0xFF00, this is a non-data packet
-     *     containing stream status info, the second byte indicates the
-     *     type of status packet (see wireshark docs / source code [2])
-     * if (len_included) {
-     *     16: packet_len
-     * } else {
-     *     packet_len = remainder of UDP/TCP frame
-     * }
-     * 1:  is_back_to_back
-     *     Back-to-Back flag; used for timing, set for one in every 10
-     *     packets, according to the Real documentation [1]
-     * 1:  is_slow_data
-     *     Slow-data flag; currently unused, according to Real docs [1]
-     * 5:  stream_id
-     *     ID of the stream within this particular set of streams
-     * 1:  is_no_keyframe
-     *     Non-keyframe flag (unset if packet belongs to a keyframe)
-     * 32: timestamp (PTS)
-     * if (set_id == 0x1F) {
-     *     16: set_id (extended set-of-streams ID; see set_id)
-     * }
-     * if (need_reliable) {
-     *     16: reliable_seq_no
-     *         Reliable sequence number (see need_reliable)
-     * }
-     * if (stream_id == 0x3F) {
-     *     16: stream_id (extended stream ID; see stream_id)
-     * }
-     * [1] https://protocol.helixcommunity.org/files/2005/devdocs/RDT_Feature_Level_20.txt
-     * [2] http://www.wireshark.org/docs/dfref/r/rdt.html and
-     *     http://anonsvn.wireshark.org/viewvc/trunk/epan/dissectors/packet-rdt.c
-     */
-    init_get_bits(&gb, buf, len << 3);
-    len_included  = get_bits1(&gb);
-    need_reliable = get_bits1(&gb);
-    set_id        = get_bits(&gb, 5);
-    skip_bits(&gb, 1);
-    seq_no        = get_bits(&gb, 16);
-    if (len_included)
-        skip_bits(&gb, 16);
-    skip_bits(&gb, 2);
-    stream_id     = get_bits(&gb, 5);
-    is_keyframe   = !get_bits1(&gb);
-    timestamp     = get_bits_long(&gb, 32);
-    if (set_id == 0x1f)
-        set_id    = get_bits(&gb, 16);
-    if (need_reliable)
-        skip_bits(&gb, 16);
-    if (stream_id == 0x1f)
-        stream_id = get_bits(&gb, 16);
-
-    if (pset_id)      *pset_id      = set_id;
-    if (pseq_no)      *pseq_no      = seq_no;
-    if (pstream_id)   *pstream_id   = stream_id;
-    if (pis_keyframe) *pis_keyframe = is_keyframe;
-    if (ptimestamp)   *ptimestamp   = timestamp;
-
-    return consumed + (get_bits_count(&gb) >> 3);
+    if (sn)  *sn  = (buf[0]>>1) & 0x1f;
+    if (seq) *seq = AV_RB16(buf+1);
+    if (ts)  *ts  = AV_RB32(buf+4);
+    if (rn)  *rn  = buf[3] & 0x3f;
+
+    return consumed;
 }
 
 /**< return 0 on packet, no more left, 1 on packet, 1 on partial packet... */
@@ -300,83 +199,73 @@ rdt_parse_packet (PayloadContext *rdt, AVStream *st,
                   const uint8_t *buf, int len, int flags)
 {
     int seq = 1, res;
-    ByteIOContext pb;
+    ByteIOContext *pb = rdt->rmctx->pb;
+    RMContext *rm = rdt->rmctx->priv_data;
 
-    if (rdt->audio_pkt_cnt == 0) {
+    if (rm->audio_pkt_cnt == 0) {
         int pos;
 
-        init_put_byte(&pb, buf, len, 0, NULL, NULL, NULL, NULL);
+        url_open_buf (&pb, buf, len, URL_RDONLY);
         flags = (flags & PKT_FLAG_KEY) ? 2 : 0;
-        res = ff_rm_parse_packet (rdt->rmctx, &pb, st, rdt->rmst[st->index], len, pkt,
+        rdt->rmctx->pb = pb;
+        res = ff_rm_parse_packet (rdt->rmctx, st, len, pkt,
                                   &seq, &flags, timestamp);
-        pos = url_ftell(&pb);
+        pos = url_ftell(pb);
+        url_close_buf (pb);
         if (res < 0)
             return res;
-        rdt->audio_pkt_cnt = res;
-        if (rdt->audio_pkt_cnt > 0 &&
+        if (rm->audio_pkt_cnt > 0 &&
             st->codec->codec_id == CODEC_ID_AAC) {
             memcpy (rdt->buffer, buf + pos, len - pos);
-            rdt->rmctx->pb = av_alloc_put_byte (rdt->buffer, len - pos, 0,
-                                                NULL, NULL, NULL, NULL);
+            url_open_buf (&pb, rdt->buffer, len - pos, URL_RDONLY);
+            rdt->rmctx->pb = pb;
         }
     } else {
-        rdt->audio_pkt_cnt =
-            ff_rm_retrieve_cache (rdt->rmctx, rdt->rmctx->pb,
-                                  st, rdt->rmst[st->index], pkt);
-        if (rdt->audio_pkt_cnt == 0 &&
+        ff_rm_retrieve_cache (rdt->rmctx, st, pkt);
+        if (rm->audio_pkt_cnt == 0 &&
             st->codec->codec_id == CODEC_ID_AAC)
-            av_freep(&rdt->rmctx->pb);
+            url_close_buf (pb);
     }
     pkt->stream_index = st->index;
     pkt->pts = *timestamp;
 
-    return rdt->audio_pkt_cnt > 0;
+    return rm->audio_pkt_cnt > 0;
 }
 
 int
 ff_rdt_parse_packet(RDTDemuxContext *s, AVPacket *pkt,
                     const uint8_t *buf, int len)
 {
-    int seq_no, flags = 0, stream_id, set_id, is_keyframe;
+    int seq, flags = 0, rule, sn;
     uint32_t timestamp;
     int rv= 0;
 
     if (!s->parse_packet)
         return -1;
 
-    if (!buf && s->prev_stream_id != -1) {
+    if (!buf) {
         /* return the next packets, if any */
         timestamp= 0; ///< Should not be used if buf is NULL, but should be set to the timestamp of the packet returned....
         rv= s->parse_packet(s->dynamic_protocol_context,
-                            s->streams[s->prev_stream_id],
-                            pkt, &timestamp, NULL, 0, flags);
+                            s->st, pkt, &timestamp, NULL, 0, flags);
         return rv;
     }
 
     if (len < 12)
         return -1;
-    rv = ff_rdt_parse_header(buf, len, &set_id, &seq_no, &stream_id, &is_keyframe, &timestamp);
+    rv = ff_rdt_parse_header(buf, len, &sn, &seq, &rule, &timestamp);
     if (rv < 0)
         return rv;
-    if (is_keyframe &&
-        (set_id != s->prev_set_id || timestamp != s->prev_timestamp ||
-         stream_id != s->prev_stream_id)) {
+    if (!(rule & 1) && (sn != s->prev_sn || timestamp != s->prev_ts)) {
         flags |= PKT_FLAG_KEY;
-        s->prev_set_id    = set_id;
-        s->prev_timestamp = timestamp;
+        s->prev_sn = sn;
+        s->prev_ts = timestamp;
     }
-    s->prev_stream_id = stream_id;
     buf += rv;
     len -= rv;
 
-     if (s->prev_stream_id >= s->n_streams) {
-         s->prev_stream_id = -1;
-         return -1;
-     }
-
     rv = s->parse_packet(s->dynamic_protocol_context,
-                         s->streams[s->prev_stream_id],
-                         pkt, &timestamp, buf, len, flags);
+                         s->st, pkt, &timestamp, buf, len, flags);
 
     return rv;
 }
@@ -389,6 +278,15 @@ ff_rdt_subscribe_rule (char *cmd, int size,
                 stream_nr, rule_nr * 2, stream_nr, rule_nr * 2 + 1);
 }
 
+void
+ff_rdt_subscribe_rule2 (RDTDemuxContext *s, char *cmd, int size,
+                        int stream_nr, int rule_nr)
+{
+    PayloadContext *rdt = s->dynamic_protocol_context;
+
+    rdt_load_mdpr(rdt, s->st, rule_nr * 2);
+}
+
 static unsigned char *
 rdt_parse_b64buf (unsigned int *target_len, const char *p)
 {
@@ -405,109 +303,18 @@ rdt_parse_b64buf (unsigned int *target_len, const char *p)
 }
 
 static int
-rdt_parse_sdp_line (AVFormatContext *s, int st_index,
-                    PayloadContext *rdt, const char *line)
+rdt_parse_sdp_line (AVStream *stream, PayloadContext *rdt, const char *line)
 {
-    AVStream *stream = s->streams[st_index];
     const char *p = line;
 
     if (av_strstart(p, "OpaqueData:buffer;", &p)) {
         rdt->mlti_data = rdt_parse_b64buf(&rdt->mlti_data_size, p);
     } else if (av_strstart(p, "StartTime:integer;", &p))
         stream->first_dts = atoi(p);
-    else if (av_strstart(p, "ASMRuleBook:string;", &p)) {
-        int n = st_index, first = -1;
-
-        for (n = 0; n < s->nb_streams; n++)
-            if (s->streams[n]->priv_data == stream->priv_data) {
-                if (first == -1) first = n;
-                rdt->rmst[s->streams[n]->index] = ff_rm_alloc_rmstream();
-                rdt_load_mdpr(rdt, s->streams[n], (n - first) * 2);
-
-                if (s->streams[n]->codec->codec_id == CODEC_ID_AAC)
-                    s->streams[n]->codec->frame_size = 1; // FIXME
-           }
-    }
 
     return 0;
 }
 
-static void
-real_parse_asm_rule(AVStream *st, const char *p, const char *end)
-{
-    do {
-        /* can be either averagebandwidth= or AverageBandwidth= */
-        if (sscanf(p, " %*1[Aa]verage%*1[Bb]andwidth=%d", &st->codec->bit_rate) == 1)
-            break;
-        if (!(p = strchr(p, ',')) || p > end)
-            p = end;
-        p++;
-    } while (p < end);
-}
-
-static AVStream *
-add_dstream(AVFormatContext *s, AVStream *orig_st)
-{
-    AVStream *st;
-
-    if (!(st = av_new_stream(s, 0)))
-        return NULL;
-    st->codec->codec_type = orig_st->codec->codec_type;
-    st->priv_data         = orig_st->priv_data;
-    st->first_dts         = orig_st->first_dts;
-
-    return st;
-}
-
-static void
-real_parse_asm_rulebook(AVFormatContext *s, AVStream *orig_st,
-                        const char *p)
-{
-    const char *end;
-    int n_rules, odd = 0;
-    AVStream *st;
-
-    /**
-     * The ASMRuleBook contains a list of comma-separated strings per rule,
-     * and each rule is separated by a ;. The last one also has a ; at the
-     * end so we can use it as delimiter.
-     * Every rule occurs twice, once for when the RTSP packet header marker
-     * is set and once for if it isn't. We only read the first because we
-     * don't care much (that's what the "odd" variable is for).
-     * Each rule contains a set of one or more statements, optionally
-     * preceeded by a single condition. If there's a condition, the rule
-     * starts with a '#'. Multiple conditions are merged between brackets,
-     * so there are never multiple conditions spread out over separate
-     * statements. Generally, these conditions are bitrate limits (min/max)
-     * for multi-bitrate streams.
-     */
-    if (*p == '\"') p++;
-    for (n_rules = 0; s->nb_streams < MAX_STREAMS;) {
-        if (!(end = strchr(p, ';')))
-            break;
-        if (!odd && end != p) {
-            if (n_rules > 0)
-                st = add_dstream(s, orig_st);
-            else
-                st = orig_st;
-            real_parse_asm_rule(st, p, end);
-            n_rules++;
-        }
-        p = end + 1;
-        odd ^= 1;
-    }
-}
-
-void
-ff_real_parse_sdp_a_line (AVFormatContext *s, int stream_index,
-                          const char *line)
-{
-    const char *p = line;
-
-    if (av_strstart(p, "ASMRuleBook:string;", &p))
-        real_parse_asm_rulebook(s, s->streams[stream_index], p);
-}
-
 static PayloadContext *
 rdt_new_extradata (void)
 {
@@ -521,13 +328,6 @@ rdt_new_extradata (void)
 static void
 rdt_free_extradata (PayloadContext *rdt)
 {
-    int i;
-
-    for (i = 0; i < MAX_STREAMS; i++)
-        if (rdt->rmst[i]) {
-            ff_rm_free_rmstream(rdt->rmst[i]);
-            av_freep(&rdt->rmst[i]);
-        }
     if (rdt->rmctx)
         av_close_input_stream(rdt->rmctx);
     av_freep(&rdt->mlti_data);
diff --git a/libavformat/rdt.h b/libavformat/rdt.h
index e24a0d5..aa6cbaa 100644
--- a/libavformat/rdt.h
+++ b/libavformat/rdt.h
@@ -28,18 +28,7 @@
 
 typedef struct RDTDemuxContext RDTDemuxContext;
 
-/**
- * Allocate and init the RDT parsing context.
- * @param ic the containing RTSP demuxer context
- * @param first_stream_of_set_idx index to the first AVStream in the RTSP
- *              demuxer context's ic->streams array that is part of this
- *              particular stream's set of streams (with identical content)
- * @param priv_data private data of the payload data handler context
- * @param handler pointer to the parse_packet() payload parsing function
- * @return a newly allocated RDTDemuxContext. Free with ff_rdt_parse_close().
- */
-RDTDemuxContext *ff_rdt_parse_open(AVFormatContext *ic,
-                                   int first_stream_of_set_idx,
+RDTDemuxContext *ff_rdt_parse_open(AVFormatContext *ic, AVStream *st,
                                    void *priv_data,
                                    RTPDynamicProtocolHandler *handler);
 void ff_rdt_parse_close(RDTDemuxContext *s);
@@ -74,22 +63,23 @@ void av_register_rdt_dynamic_payload_handlers(void);
  */
 void ff_rdt_subscribe_rule(char *cmd, int size,
                            int stream_nr, int rule_nr);
+// FIXME this will be removed ASAP
+void ff_rdt_subscribe_rule2(RDTDemuxContext *s, char *cmd, int size,
+                            int stream_nr, int rule_nr);
 
 /**
  * Parse RDT-style packet header.
  *
  * @param buf input buffer
  * @param len length of input buffer
- * @param set_id will be set to the set ID this packet belongs to
- * @param seq_no will be set to the sequence number of the packet
- * @param stream_id will be set to the stream ID this packet belongs to
- * @param is_keyframe will be whether this packet belongs to a keyframe
- * @param timestamp will be set to the timestamp of the packet
+ * @param sn will be set to the stream number this packet belongs to
+ * @param seq will be set to the sequence number this packet belongs to
+ * @param rn will be set to the rule number this packet belongs to
+ * @param ts will be set to the timestamp of the packet
  * @return the amount of bytes consumed, or <0 on error
  */
 int ff_rdt_parse_header(const uint8_t *buf, int len,
-                        int *set_id, int *seq_no, int *stream_id,
-                        int *is_keyframe, uint32_t *timestamp);
+                        int *sn, int *seq, int *rn, uint32_t *ts);
 
 /**
  * Parse RDT-style packet data (header + media data).
@@ -98,15 +88,4 @@ int ff_rdt_parse_header(const uint8_t *buf, int len,
 int ff_rdt_parse_packet(RDTDemuxContext *s, AVPacket *pkt,
                         const uint8_t *buf, int len);
 
-/**
- * Parse a server-related SDP line.
- *
- * @param s the RTSP AVFormatContext
- * @param stream_index the index of the first stream in the set represented
- *               by the SDP m= line (in s->streams)
- * @param buf the SDP line
- */
-void ff_real_parse_sdp_a_line(AVFormatContext *s, int stream_index,
-                              const char *buf);
-
 #endif /* AVFORMAT_RDT_H */
diff --git a/libavformat/riff.c b/libavformat/riff.c
index 0f9b177..ae6b7ba 100644
--- a/libavformat/riff.c
+++ b/libavformat/riff.c
@@ -33,9 +33,6 @@ const AVCodecTag codec_bmp_tags[] = {
     { CODEC_ID_H264,         MKTAG('a', 'v', 'c', '1') },
     { CODEC_ID_H264,         MKTAG('V', 'S', 'S', 'H') },
     { CODEC_ID_H263,         MKTAG('H', '2', '6', '3') },
-    { CODEC_ID_H263,         MKTAG('X', '2', '6', '3') },
-    { CODEC_ID_H263,         MKTAG('L', '2', '6', '3') },
-    { CODEC_ID_H263,         MKTAG('V', 'X', '1', 'K') },
     { CODEC_ID_H263P,        MKTAG('H', '2', '6', '3') },
     { CODEC_ID_H263I,        MKTAG('I', '2', '6', '3') }, /* intel h263 */
     { CODEC_ID_H261,         MKTAG('H', '2', '6', '1') },
@@ -56,34 +53,18 @@ const AVCodecTag codec_bmp_tags[] = {
     { CODEC_ID_MPEG4,        MKTAG('S', 'E', 'D', 'G') },
     { CODEC_ID_MPEG4,        MKTAG('R', 'M', 'P', '4') },
     { CODEC_ID_MPEG4,        MKTAG('3', 'I', 'V', '2') },
-    { CODEC_ID_MPEG4,        MKTAG('F', 'F', 'D', 'S') },
-    { CODEC_ID_MPEG4,        MKTAG('F', 'V', 'F', 'W') },
-    { CODEC_ID_MPEG4,        MKTAG('D', 'C', 'O', 'D') },
-    { CODEC_ID_MPEG4,        MKTAG('M', 'V', 'X', 'M') },
-    { CODEC_ID_MPEG4,        MKTAG('P', 'M', '4', 'V') },
-    { CODEC_ID_MPEG4,        MKTAG('S', 'M', 'P', '4') },
-    { CODEC_ID_MPEG4,        MKTAG('D', 'X', 'G', 'M') },
-    { CODEC_ID_MPEG4,        MKTAG('V', 'I', 'D', 'M') },
-    { CODEC_ID_MPEG4,        MKTAG('M', '4', 'T', '3') },
-    { CODEC_ID_MPEG4,        MKTAG('G', 'E', 'O', 'X') },
-    { CODEC_ID_MPEG4,        MKTAG('H', 'D', 'X', '4') }, /* flipped video */
-    { CODEC_ID_MPEG4,        MKTAG('D', 'M', 'K', '2') },
-    { CODEC_ID_MPEG4,        MKTAG('D', 'I', 'G', 'I') },
-    { CODEC_ID_MPEG4,        MKTAG('I', 'N', 'M', 'C') },
     { CODEC_ID_MSMPEG4V3,    MKTAG('D', 'I', 'V', '3') }, /* default signature when using MSMPEG4 */
     { CODEC_ID_MSMPEG4V3,    MKTAG('M', 'P', '4', '3') },
     { CODEC_ID_MSMPEG4V3,    MKTAG('M', 'P', 'G', '3') },
     { CODEC_ID_MSMPEG4V3,    MKTAG('D', 'I', 'V', '5') },
     { CODEC_ID_MSMPEG4V3,    MKTAG('D', 'I', 'V', '6') },
     { CODEC_ID_MSMPEG4V3,    MKTAG('D', 'I', 'V', '4') },
-    { CODEC_ID_MSMPEG4V3,    MKTAG('D', 'V', 'X', '3') },
     { CODEC_ID_MSMPEG4V3,    MKTAG('A', 'P', '4', '1') },
     { CODEC_ID_MSMPEG4V3,    MKTAG('C', 'O', 'L', '1') },
     { CODEC_ID_MSMPEG4V3,    MKTAG('C', 'O', 'L', '0') },
     { CODEC_ID_MSMPEG4V2,    MKTAG('M', 'P', '4', '2') },
     { CODEC_ID_MSMPEG4V2,    MKTAG('D', 'I', 'V', '2') },
     { CODEC_ID_MSMPEG4V1,    MKTAG('M', 'P', 'G', '4') },
-    { CODEC_ID_MSMPEG4V1,    MKTAG('M', 'P', '4', '1') },
     { CODEC_ID_WMV1,         MKTAG('W', 'M', 'V', '1') },
     { CODEC_ID_WMV2,         MKTAG('W', 'M', 'V', '2') },
     { CODEC_ID_DVVIDEO,      MKTAG('d', 'v', 's', 'd') },
@@ -92,22 +73,18 @@ const AVCodecTag codec_bmp_tags[] = {
     { CODEC_ID_DVVIDEO,      MKTAG('d', 'v', '2', '5') },
     { CODEC_ID_DVVIDEO,      MKTAG('d', 'v', '5', '0') },
     { CODEC_ID_DVVIDEO,      MKTAG('c', 'd', 'v', 'c') }, /* Canopus DV */
-    { CODEC_ID_DVVIDEO,      MKTAG('d', 'v', 'c', ' ') },
     { CODEC_ID_MPEG1VIDEO,   MKTAG('m', 'p', 'g', '1') },
     { CODEC_ID_MPEG1VIDEO,   MKTAG('m', 'p', 'g', '2') },
     { CODEC_ID_MPEG2VIDEO,   MKTAG('m', 'p', 'g', '2') },
     { CODEC_ID_MPEG2VIDEO,   MKTAG('M', 'P', 'E', 'G') },
     { CODEC_ID_MPEG1VIDEO,   MKTAG('P', 'I', 'M', '1') },
-    { CODEC_ID_MPEG2VIDEO,   MKTAG('P', 'I', 'M', '2') },
     { CODEC_ID_MPEG1VIDEO,   MKTAG('V', 'C', 'R', '2') },
     { CODEC_ID_MPEG1VIDEO,   MKTAG( 1 ,  0 ,  0 ,  16) },
     { CODEC_ID_MPEG2VIDEO,   MKTAG( 2 ,  0 ,  0 ,  16) },
     { CODEC_ID_MPEG2VIDEO,   MKTAG('D', 'V', 'R', ' ') },
     { CODEC_ID_MPEG2VIDEO,   MKTAG('M', 'M', 'E', 'S') },
-    { CODEC_ID_MPEG2VIDEO,   MKTAG('L', 'M', 'P', '2') }, /* Lead MPEG2 in avi */
     { CODEC_ID_MJPEG,        MKTAG('M', 'J', 'P', 'G') },
     { CODEC_ID_MJPEG,        MKTAG('L', 'J', 'P', 'G') },
-    { CODEC_ID_MJPEG,        MKTAG('d', 'm', 'b', '1') },
     { CODEC_ID_LJPEG,        MKTAG('L', 'J', 'P', 'G') },
     { CODEC_ID_MJPEG,        MKTAG('J', 'P', 'G', 'L') }, /* Pegasus lossless JPEG */
     { CODEC_ID_JPEGLS,       MKTAG('M', 'J', 'L', 'S') }, /* JPEG-LS custom FOURCC for avi - encoder */
@@ -115,9 +92,6 @@ const AVCodecTag codec_bmp_tags[] = {
     { CODEC_ID_MJPEG,        MKTAG('j', 'p', 'e', 'g') },
     { CODEC_ID_MJPEG,        MKTAG('I', 'J', 'P', 'G') },
     { CODEC_ID_MJPEG,        MKTAG('A', 'V', 'R', 'n') },
-    { CODEC_ID_MJPEG,        MKTAG('A', 'C', 'D', 'V') },
-    { CODEC_ID_MJPEG,        MKTAG('Q', 'I', 'V', 'G') },
-    { CODEC_ID_MJPEG,        MKTAG('C', 'J', 'P', 'G') }, /* Creative Webcam JPEG */
     { CODEC_ID_HUFFYUV,      MKTAG('H', 'F', 'Y', 'U') },
     { CODEC_ID_FFVHUFF,      MKTAG('F', 'F', 'V', 'H') },
     { CODEC_ID_CYUV,         MKTAG('C', 'Y', 'U', 'V') },
@@ -187,12 +161,8 @@ const AVCodecTag codec_bmp_tags[] = {
     { CODEC_ID_JPEG2000,     MKTAG('M', 'J', '2', 'C') },
     { CODEC_ID_VMNC,         MKTAG('V', 'M', 'n', 'c') },
     { CODEC_ID_TARGA,        MKTAG('t', 'g', 'a', ' ') },
-    { CODEC_ID_PNG,          MKTAG('M', 'P', 'N', 'G') },
     { CODEC_ID_CLJR,         MKTAG('c', 'l', 'j', 'r') },
     { CODEC_ID_DIRAC,        MKTAG('d', 'r', 'a', 'c') },
-    { CODEC_ID_RPZA,         MKTAG('a', 'z', 'p', 'r') },
-    { CODEC_ID_RPZA,         MKTAG('R', 'P', 'Z', 'A') },
-    { CODEC_ID_RPZA,         MKTAG('r', 'p', 'z', 'a') },
     { CODEC_ID_NONE,         0 }
 };
 
@@ -215,8 +185,6 @@ const AVCodecTag codec_wav_tags[] = {
     { CODEC_ID_ADPCM_G726,      0x0045 },
     { CODEC_ID_MP2,             0x0050 },
     { CODEC_ID_MP3,             0x0055 },
-    { CODEC_ID_AMR_NB,          0x0057 },
-    { CODEC_ID_AMR_WB,          0x0058 },
     { CODEC_ID_ADPCM_IMA_DK4,   0x0061 },  /* rogue format number */
     { CODEC_ID_ADPCM_IMA_DK3,   0x0062 },  /* rogue format number */
     { CODEC_ID_VOXWARE,         0x0075 },
@@ -234,7 +202,6 @@ const AVCodecTag codec_wav_tags[] = {
     { CODEC_ID_SONIC,           0x2048 },
     { CODEC_ID_SONIC_LS,        0x2048 },
     { CODEC_ID_AAC,             0x706d },
-    { CODEC_ID_AAC,             0x4143 },
     { CODEC_ID_FLAC,            0xF1AC },
     { CODEC_ID_ADPCM_SWF,       ('S'<<8)+'F' },
     { CODEC_ID_VORBIS,          ('V'<<8)+'o' }, //HACK/FIXME, does vorbis in WAV/AVI have an (in)official id?
@@ -428,9 +395,9 @@ void get_wav_header(ByteIOContext *pb, AVCodecContext *codec, int size)
 }
 
 
-enum CodecID wav_codec_get_id(unsigned int tag, int bps)
+int wav_codec_get_id(unsigned int tag, int bps)
 {
-    enum CodecID id;
+    int id;
     id = codec_get_id(codec_wav_tags, tag);
     if (id <= 0)
         return id;
diff --git a/libavformat/riff.h b/libavformat/riff.h
index 93c1d71..bd4e9f1 100644
--- a/libavformat/riff.h
+++ b/libavformat/riff.h
@@ -41,7 +41,7 @@ typedef struct AVCodecTag {
 
 void put_bmp_header(ByteIOContext *pb, AVCodecContext *enc, const AVCodecTag *tags, int for_asf);
 int put_wav_header(ByteIOContext *pb, AVCodecContext *enc);
-enum CodecID wav_codec_get_id(unsigned int tag, int bps);
+int wav_codec_get_id(unsigned int tag, int bps);
 void get_wav_header(ByteIOContext *pb, AVCodecContext *codec, int size);
 
 extern const AVCodecTag codec_bmp_tags[];
diff --git a/libavformat/rm.h b/libavformat/rm.h
index 2f45c0f..4ad1c30 100644
--- a/libavformat/rm.h
+++ b/libavformat/rm.h
@@ -24,10 +24,44 @@
 
 #include "avformat.h"
 
-typedef struct RMStream RMStream;
 
-RMStream *ff_rm_alloc_rmstream (void);
-void      ff_rm_free_rmstream  (RMStream *rms);
+typedef struct {
+    int nb_packets;
+    int packet_total_size;
+    int packet_max_size;
+    /* codec related output */
+    int bit_rate;
+    float frame_rate;
+    int nb_frames;    /* current frame number */
+    int total_frames; /* total number of frames */
+    int num;
+    AVCodecContext *enc;
+} StreamInfo;
+
+typedef struct {
+    StreamInfo streams[2];
+    StreamInfo *audio_stream, *video_stream;
+    int data_pos; /* position of the data after the header */
+    int nb_packets;
+    int old_format;
+    int current_stream;
+    int remaining_len;
+    uint8_t *videobuf; ///< place to store merged video frame
+    int videobufsize;  ///< current assembled frame size
+    int videobufpos;   ///< position for the next slice in the video buffer
+    int curpic_num;    ///< picture number of current frame
+    int cur_slice, slices;
+    int64_t pktpos;    ///< first slice position in file
+    /// Audio descrambling matrix parameters
+    uint8_t *audiobuf; ///< place to store reordered audio data
+    int64_t audiotimestamp; ///< Audio packet timestamp
+    int sub_packet_cnt; // Subpacket counter, used while reading
+    int sub_packet_size, sub_packet_h, coded_framesize; ///< Descrambling parameters from container
+    int audio_stream_num; ///< Stream number for audio packets
+    int audio_pkt_cnt; ///< Output packet counter
+    int audio_framesize; /// Audio frame size from container
+    int sub_packet_lengths[16]; /// Length of each aac subpacket
+} RMContext;
 
 /*< input format for Realmedia-style RTSP streams */
 extern AVInputFormat rdt_demuxer;
@@ -37,24 +71,18 @@ extern AVInputFormat rdt_demuxer;
  * parameters.
  *
  * @param s context containing RMContext and ByteIOContext for stream reading
- * @param pb context to read the data from
  * @param st the stream that the MDPR chunk belongs to and where to store the
  *           parameters read from the chunk into
- * @param rst real-specific stream information
  * @param codec_data_size size of the MDPR chunk
  * @return 0 on success, errno codes on error
  */
-int ff_rm_read_mdpr_codecdata (AVFormatContext *s, ByteIOContext *pb,
-                               AVStream *st, RMStream *rst,
-                               int codec_data_size);
+int ff_rm_read_mdpr_codecdata (AVFormatContext *s, AVStream *st, int codec_data_size);
 
 /**
  * Parse one rm-stream packet from the input bytestream.
  *
  * @param s context containing RMContext and ByteIOContext for stream reading
- * @param pb context to read the data from
  * @param st stream to which the packet to be read belongs
- * @param rst Real-specific stream information
  * @param len packet length to read from the input
  * @param pkt packet location to store the parsed packet data
  * @param seq pointer to an integer containing the sequence number, may be
@@ -62,12 +90,9 @@ int ff_rm_read_mdpr_codecdata (AVFormatContext *s, ByteIOContext *pb,
  * @param flags pointer to an integer containing the packet flags, may be
                 updated
  * @param ts pointer to timestamp, may be updated
- * @return >=0 on success (where >0 indicates there are cached samples that
- *         can be retrieved with subsequent calls to ff_rm_retrieve_cache()),
- *         errno codes on error
+ * @return 0 on success, errno codes on error
  */
-int ff_rm_parse_packet (AVFormatContext *s, ByteIOContext *pb,
-                        AVStream *st, RMStream *rst, int len,
+int ff_rm_parse_packet (AVFormatContext *s, AVStream *st, int len,
                         AVPacket *pkt, int *seq, int *flags, int64_t *ts);
 
 /**
@@ -79,14 +104,9 @@ int ff_rm_parse_packet (AVFormatContext *s, ByteIOContext *pb,
  * of those packets can be retrieved sequentially.
  *
  * @param s context containing RMContext and ByteIOContext for stream reading
- * @param pb context to read the data from
  * @param st stream that this packet belongs to
- * @param rst Real-specific stream information
  * @param pkt location to store the packet data
- * @returns the number of samples left for subsequent calls to this same
- *          function, or 0 if all samples have been retrieved.
  */
-int ff_rm_retrieve_cache (AVFormatContext *s, ByteIOContext *pb,
-                          AVStream *st, RMStream *rst, AVPacket *pkt);
+void ff_rm_retrieve_cache (AVFormatContext *s, AVStream *st, AVPacket *pkt);
 
 #endif /* AVFORMAT_RM_H */
diff --git a/libavformat/rmdec.c b/libavformat/rmdec.c
index fc066df..9db09e1 100644
--- a/libavformat/rmdec.c
+++ b/libavformat/rmdec.c
@@ -23,30 +23,6 @@
 #include "avformat.h"
 #include "rm.h"
 
-struct RMStream {
-    AVPacket pkt;      ///< place to store merged video frame / reordered audio data
-    int videobufsize;  ///< current assembled frame size
-    int videobufpos;   ///< position for the next slice in the video buffer
-    int curpic_num;    ///< picture number of current frame
-    int cur_slice, slices;
-    int64_t pktpos;    ///< first slice position in file
-    /// Audio descrambling matrix parameters
-    int64_t audiotimestamp; ///< Audio packet timestamp
-    int sub_packet_cnt; // Subpacket counter, used while reading
-    int sub_packet_size, sub_packet_h, coded_framesize; ///< Descrambling parameters from container
-    int audio_framesize; /// Audio frame size from container
-    int sub_packet_lengths[16]; /// Length of each subpacket
-};
-
-typedef struct {
-    int nb_packets;
-    int old_format;
-    int current_stream;
-    int remaining_len;
-    int audio_stream_num; ///< Stream number for audio packets
-    int audio_pkt_cnt; ///< Output packet counter
-} RMDemuxContext;
-
 static inline void get_strl(ByteIOContext *pb, char *buf, int buf_size, int len)
 {
     int i;
@@ -71,37 +47,30 @@ static void get_str8(ByteIOContext *pb, char *buf, int buf_size)
     get_strl(pb, buf, buf_size, get_byte(pb));
 }
 
-RMStream *ff_rm_alloc_rmstream (void)
-{
-    RMStream *rms = av_mallocz(sizeof(RMStream));
-    rms->curpic_num = -1;
-    return rms;
-}
-
-void ff_rm_free_rmstream (RMStream *rms)
-{
-    av_free_packet(&rms->pkt);
-}
-
-static int rm_read_audio_stream_info(AVFormatContext *s, ByteIOContext *pb,
-                                     AVStream *st, RMStream *ast, int read_all)
+static int rm_read_audio_stream_info(AVFormatContext *s, AVStream *st,
+                                      int read_all)
 {
+    RMContext *rm = s->priv_data;
+    ByteIOContext *pb = s->pb;
     char buf[256];
     uint32_t version;
+    int i;
 
     /* ra type header */
     version = get_be32(pb); /* version */
     if (((version >> 16) & 0xff) == 3) {
         int64_t startpos = url_ftell(pb);
-        url_fskip(pb, 14);
+        /* very old version */
+        for(i = 0; i < 14; i++)
+            get_byte(pb);
         get_str8(pb, s->title, sizeof(s->title));
         get_str8(pb, s->author, sizeof(s->author));
         get_str8(pb, s->copyright, sizeof(s->copyright));
         get_str8(pb, s->comment, sizeof(s->comment));
         if ((startpos + (version & 0xffff)) >= url_ftell(pb) + 2) {
-            // fourcc (should always be "lpcJ")
-            get_byte(pb);
-            get_str8(pb, buf, sizeof(buf));
+        // fourcc (should always be "lpcJ")
+        get_byte(pb);
+        get_str8(pb, buf, sizeof(buf));
         }
         // Skip extra header crap (this should never happen)
         if ((startpos + (version & 0xffff)) > url_ftell(pb))
@@ -118,23 +87,25 @@ static int rm_read_audio_stream_info(AVFormatContext *s, ByteIOContext *pb,
         get_be16(pb); /* version2 */
         get_be32(pb); /* header size */
         flavor= get_be16(pb); /* add codec info / flavor */
-        ast->coded_framesize = coded_framesize = get_be32(pb); /* coded frame size */
+        rm->coded_framesize = coded_framesize = get_be32(pb); /* coded frame size */
         get_be32(pb); /* ??? */
         get_be32(pb); /* ??? */
         get_be32(pb); /* ??? */
-        ast->sub_packet_h = sub_packet_h = get_be16(pb); /* 1 */
+        rm->sub_packet_h = sub_packet_h = get_be16(pb); /* 1 */
         st->codec->block_align= get_be16(pb); /* frame size */
-        ast->sub_packet_size = sub_packet_size = get_be16(pb); /* sub packet size */
+        rm->sub_packet_size = sub_packet_size = get_be16(pb); /* sub packet size */
         get_be16(pb); /* ??? */
         if (((version >> 16) & 0xff) == 5) {
-            get_be16(pb); get_be16(pb); get_be16(pb);
-        }
+            get_be16(pb); get_be16(pb); get_be16(pb); }
         st->codec->sample_rate = get_be16(pb);
         get_be32(pb);
         st->codec->channels = get_be16(pb);
         if (((version >> 16) & 0xff) == 5) {
             get_be32(pb);
-            get_buffer(pb, buf, 4);
+            buf[0] = get_byte(pb);
+            buf[1] = get_byte(pb);
+            buf[2] = get_byte(pb);
+            buf[3] = get_byte(pb);
             buf[4] = 0;
         } else {
             get_str8(pb, buf, sizeof(buf)); /* desc */
@@ -147,17 +118,17 @@ static int rm_read_audio_stream_info(AVFormatContext *s, ByteIOContext *pb,
         } else if (!strcmp(buf, "28_8")) {
             st->codec->codec_id = CODEC_ID_RA_288;
             st->codec->extradata_size= 0;
-            ast->audio_framesize = st->codec->block_align;
+            rm->audio_framesize = st->codec->block_align;
             st->codec->block_align = coded_framesize;
 
-            if(ast->audio_framesize >= UINT_MAX / sub_packet_h){
-                av_log(s, AV_LOG_ERROR, "ast->audio_framesize * sub_packet_h too large\n");
+            if(rm->audio_framesize >= UINT_MAX / sub_packet_h){
+                av_log(s, AV_LOG_ERROR, "rm->audio_framesize * sub_packet_h too large\n");
                 return -1;
             }
 
-            av_new_packet(&ast->pkt, ast->audio_framesize * sub_packet_h);
+            rm->audiobuf = av_malloc(rm->audio_framesize * sub_packet_h);
         } else if ((!strcmp(buf, "cook")) || (!strcmp(buf, "atrc")) || (!strcmp(buf, "sipr"))) {
-            int codecdata_length;
+            int codecdata_length, i;
             get_be16(pb); get_byte(pb);
             if (((version >> 16) & 0xff) == 5)
                 get_byte(pb);
@@ -177,18 +148,19 @@ static int rm_read_audio_stream_info(AVFormatContext *s, ByteIOContext *pb,
             else st->codec->codec_id = CODEC_ID_ATRAC3;
             st->codec->extradata_size= codecdata_length;
             st->codec->extradata= av_mallocz(st->codec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE);
-            get_buffer(pb, st->codec->extradata, st->codec->extradata_size);
-            ast->audio_framesize = st->codec->block_align;
-            st->codec->block_align = ast->sub_packet_size;
+            for(i = 0; i < codecdata_length; i++)
+                ((uint8_t*)st->codec->extradata)[i] = get_byte(pb);
+            rm->audio_framesize = st->codec->block_align;
+            st->codec->block_align = rm->sub_packet_size;
 
-            if(ast->audio_framesize >= UINT_MAX / sub_packet_h){
+            if(rm->audio_framesize >= UINT_MAX / sub_packet_h){
                 av_log(s, AV_LOG_ERROR, "rm->audio_framesize * sub_packet_h too large\n");
                 return -1;
             }
 
-            av_new_packet(&ast->pkt, ast->audio_framesize * sub_packet_h);
+            rm->audiobuf = av_malloc(rm->audio_framesize * sub_packet_h);
         } else if (!strcmp(buf, "raac") || !strcmp(buf, "racp")) {
-            int codecdata_length;
+            int codecdata_length, i;
             get_be16(pb); get_byte(pb);
             if (((version >> 16) & 0xff) == 5)
                 get_byte(pb);
@@ -202,7 +174,8 @@ static int rm_read_audio_stream_info(AVFormatContext *s, ByteIOContext *pb,
                 st->codec->extradata_size = codecdata_length - 1;
                 st->codec->extradata = av_mallocz(st->codec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE);
                 get_byte(pb);
-                get_buffer(pb, st->codec->extradata, st->codec->extradata_size);
+                for(i = 0; i < st->codec->extradata_size; i++)
+                    ((uint8_t*)st->codec->extradata)[i] = get_byte(pb);
             }
         } else {
             st->codec->codec_id = CODEC_ID_NONE;
@@ -223,9 +196,9 @@ static int rm_read_audio_stream_info(AVFormatContext *s, ByteIOContext *pb,
 }
 
 int
-ff_rm_read_mdpr_codecdata (AVFormatContext *s, ByteIOContext *pb,
-                           AVStream *st, RMStream *rst, int codec_data_size)
+ff_rm_read_mdpr_codecdata (AVFormatContext *s, AVStream *st, int codec_data_size)
 {
+    ByteIOContext *pb = s->pb;
     unsigned int v;
     int size;
     int64_t codec_pos;
@@ -235,7 +208,7 @@ ff_rm_read_mdpr_codecdata (AVFormatContext *s, ByteIOContext *pb,
     v = get_be32(pb);
     if (v == MKTAG(0xfd, 'a', 'r', '.')) {
         /* ra type header */
-        if (rm_read_audio_stream_info(s, pb, st, rst, 0))
+        if (rm_read_audio_stream_info(s, st, 0))
             return -1;
     } else {
         int fps, fps2;
@@ -295,20 +268,19 @@ skip:
 
 static int rm_read_header_old(AVFormatContext *s, AVFormatParameters *ap)
 {
-    RMDemuxContext *rm = s->priv_data;
+    RMContext *rm = s->priv_data;
     AVStream *st;
 
     rm->old_format = 1;
     st = av_new_stream(s, 0);
     if (!st)
         return -1;
-    st->priv_data = ff_rm_alloc_rmstream();
-    return rm_read_audio_stream_info(s, s->pb, st, st->priv_data, 1);
+    return rm_read_audio_stream_info(s, st, 1);
 }
 
 static int rm_read_header(AVFormatContext *s, AVFormatParameters *ap)
 {
-    RMDemuxContext *rm = s->priv_data;
+    RMContext *rm = s->priv_data;
     AVStream *st;
     ByteIOContext *pb = s->pb;
     unsigned int tag;
@@ -385,9 +357,7 @@ static int rm_read_header(AVFormatContext *s, AVFormatParameters *ap)
             get_str8(pb, buf, sizeof(buf)); /* desc */
             get_str8(pb, buf, sizeof(buf)); /* mimetype */
             st->codec->codec_type = CODEC_TYPE_DATA;
-            st->priv_data = ff_rm_alloc_rmstream();
-            if (ff_rm_read_mdpr_codecdata(s, s->pb, st, st->priv_data,
-                                          get_be32(pb)) < 0)
+            if (ff_rm_read_mdpr_codecdata(s, st, get_be32(pb)) < 0)
                 return -1;
             break;
         case MKTAG('D', 'A', 'T', 'A'):
@@ -403,6 +373,7 @@ static int rm_read_header(AVFormatContext *s, AVFormatParameters *ap)
     if (!rm->nb_packets && (flags & 4))
         rm->nb_packets = 3600 * 25;
     get_be32(pb); /* next data header */
+    rm->curpic_num = -1;
     return 0;
 }
 
@@ -426,7 +397,7 @@ static int get_num(ByteIOContext *pb, int *len)
 #define RAW_PACKET_SIZE 1000
 
 static int sync(AVFormatContext *s, int64_t *timestamp, int *flags, int *stream_index, int64_t *pos){
-    RMDemuxContext *rm = s->priv_data;
+    RMContext *rm = s->priv_data;
     ByteIOContext *pb = s->pb;
     int len, num, res, i;
     AVStream *st;
@@ -481,80 +452,83 @@ skip:
     return -1;
 }
 
-static int rm_assemble_video_frame(AVFormatContext *s, ByteIOContext *pb,
-                                   RMDemuxContext *rm, RMStream *vst,
-                                   AVPacket *pkt, int len)
+static int rm_assemble_video_frame(AVFormatContext *s, RMContext *rm, AVPacket *pkt, int len)
 {
+    ByteIOContext *pb = s->pb;
     int hdr, seq, pic_num, len2, pos;
     int type;
 
     hdr = get_byte(pb); len--;
     type = hdr >> 6;
-
-    if(type != 3){  // not frame as a part of packet
+    switch(type){
+    case 0: // slice
+    case 2: // last slice
         seq = get_byte(pb); len--;
-    }
-    if(type != 1){  // not whole frame
         len2 = get_num(pb, &len);
-        pos  = get_num(pb, &len);
+        pos = get_num(pb, &len);
         pic_num = get_byte(pb); len--;
-    }
-    if(len<0)
-        return -1;
-    rm->remaining_len = len;
-    if(type&1){     // frame, not slice
-        if(type == 3)  // frame as a part of packet
-            len= len2;
-        if(rm->remaining_len < len)
-            return -1;
-        rm->remaining_len -= len;
+        rm->remaining_len = len;
+        break;
+    case 1: //whole frame
+        seq = get_byte(pb); len--;
         if(av_new_packet(pkt, len + 9) < 0)
             return AVERROR(EIO);
         pkt->data[0] = 0;
         AV_WL32(pkt->data + 1, 1);
         AV_WL32(pkt->data + 5, 0);
         get_buffer(pb, pkt->data + 9, len);
+        rm->remaining_len = 0;
+        return 0;
+    case 3: //frame as a part of packet
+        len2 = get_num(pb, &len);
+        pos = get_num(pb, &len);
+        pic_num = get_byte(pb); len--;
+        rm->remaining_len = len - len2;
+        if(av_new_packet(pkt, len2 + 9) < 0)
+            return AVERROR(EIO);
+        pkt->data[0] = 0;
+        AV_WL32(pkt->data + 1, 1);
+        AV_WL32(pkt->data + 5, 0);
+        get_buffer(pb, pkt->data + 9, len2);
         return 0;
     }
     //now we have to deal with single slice
 
-    if((seq & 0x7F) == 1 || vst->curpic_num != pic_num){
-        vst->slices = ((hdr & 0x3F) << 1) + 1;
-        vst->videobufsize = len2 + 8*vst->slices + 1;
-        av_free_packet(&vst->pkt); //FIXME this should be output.
-        if(av_new_packet(&vst->pkt, vst->videobufsize) < 0)
+    if((seq & 0x7F) == 1 || rm->curpic_num != pic_num){
+        rm->slices = ((hdr & 0x3F) << 1) + 1;
+        rm->videobufsize = len2 + 8*rm->slices + 1;
+        av_free(rm->videobuf);
+        if(!(rm->videobuf = av_malloc(rm->videobufsize)))
             return AVERROR(ENOMEM);
-        vst->videobufpos = 8*vst->slices + 1;
-        vst->cur_slice = 0;
-        vst->curpic_num = pic_num;
-        vst->pktpos = url_ftell(pb);
+        rm->videobufpos = 8*rm->slices + 1;
+        rm->cur_slice = 0;
+        rm->curpic_num = pic_num;
+        rm->pktpos = url_ftell(pb);
     }
     if(type == 2)
         len = FFMIN(len, pos);
 
-    if(++vst->cur_slice > vst->slices)
+    if(++rm->cur_slice > rm->slices)
         return 1;
-    AV_WL32(vst->pkt.data - 7 + 8*vst->cur_slice, 1);
-    AV_WL32(vst->pkt.data - 3 + 8*vst->cur_slice, vst->videobufpos - 8*vst->slices - 1);
-    if(vst->videobufpos + len > vst->videobufsize)
+    AV_WL32(rm->videobuf - 7 + 8*rm->cur_slice, 1);
+    AV_WL32(rm->videobuf - 3 + 8*rm->cur_slice, rm->videobufpos - 8*rm->slices - 1);
+    if(rm->videobufpos + len > rm->videobufsize)
         return 1;
-    if (get_buffer(pb, vst->pkt.data + vst->videobufpos, len) != len)
+    if (get_buffer(pb, rm->videobuf + rm->videobufpos, len) != len)
         return AVERROR(EIO);
-    vst->videobufpos += len;
+    rm->videobufpos += len;
     rm->remaining_len-= len;
 
-    if(type == 2 || (vst->videobufpos) == vst->videobufsize){
-        vst->pkt.data[0] = vst->cur_slice-1;
-        *pkt= vst->pkt;
-        vst->pkt.data= NULL;
-        vst->pkt.size= 0;
-        if(vst->slices != vst->cur_slice) //FIXME find out how to set slices correct from the begin
-            memmove(pkt->data + 1 + 8*vst->cur_slice, pkt->data + 1 + 8*vst->slices,
-                vst->videobufpos - 1 - 8*vst->slices);
-        pkt->size = vst->videobufpos + 8*(vst->cur_slice - vst->slices);
-        pkt->pts = AV_NOPTS_VALUE;
-        pkt->pos = vst->pktpos;
-        return 0;
+    if(type == 2 || (rm->videobufpos) == rm->videobufsize){
+         rm->videobuf[0] = rm->cur_slice-1;
+         if(av_new_packet(pkt, rm->videobufpos - 8*(rm->slices - rm->cur_slice)) < 0)
+             return AVERROR(ENOMEM);
+         memcpy(pkt->data, rm->videobuf, 1 + 8*rm->cur_slice);
+         memcpy(pkt->data + 1 + 8*rm->cur_slice, rm->videobuf + 1 + 8*rm->slices,
+                rm->videobufpos - 1 - 8*rm->slices);
+         pkt->pts = AV_NOPTS_VALUE;
+         pkt->pos = rm->pktpos;
+         return 0;
     }
 
     return 1;
@@ -576,15 +550,15 @@ rm_ac3_swap_bytes (AVStream *st, AVPacket *pkt)
 }
 
 int
-ff_rm_parse_packet (AVFormatContext *s, ByteIOContext *pb,
-                    AVStream *st, RMStream *ast, int len, AVPacket *pkt,
+ff_rm_parse_packet (AVFormatContext *s, AVStream *st, int len, AVPacket *pkt,
                     int *seq, int *flags, int64_t *timestamp)
 {
-    RMDemuxContext *rm = s->priv_data;
+    ByteIOContext *pb = s->pb;
+    RMContext *rm = s->priv_data;
 
     if (st->codec->codec_type == CODEC_TYPE_VIDEO) {
         rm->current_stream= st->id;
-        if(rm_assemble_video_frame(s, pb, rm, ast, pkt, len))
+        if(rm_assemble_video_frame(s, rm, pkt, len) == 1)
             return -1; //got partial frame
     } else if (st->codec->codec_type == CODEC_TYPE_AUDIO) {
         if ((st->codec->codec_id == CODEC_ID_RA_288) ||
@@ -592,51 +566,51 @@ ff_rm_parse_packet (AVFormatContext *s, ByteIOContext *pb,
             (st->codec->codec_id == CODEC_ID_ATRAC3) ||
             (st->codec->codec_id == CODEC_ID_SIPR)) {
             int x;
-            int sps = ast->sub_packet_size;
-            int cfs = ast->coded_framesize;
-            int h = ast->sub_packet_h;
-            int y = ast->sub_packet_cnt;
-            int w = ast->audio_framesize;
+            int sps = rm->sub_packet_size;
+            int cfs = rm->coded_framesize;
+            int h = rm->sub_packet_h;
+            int y = rm->sub_packet_cnt;
+            int w = rm->audio_framesize;
 
             if (*flags & 2)
-                y = ast->sub_packet_cnt = 0;
+                y = rm->sub_packet_cnt = 0;
             if (!y)
-                ast->audiotimestamp = *timestamp;
+                rm->audiotimestamp = *timestamp;
 
             switch(st->codec->codec_id) {
                 case CODEC_ID_RA_288:
                     for (x = 0; x < h/2; x++)
-                        get_buffer(pb, ast->pkt.data+x*2*w+y*cfs, cfs);
+                        get_buffer(pb, rm->audiobuf+x*2*w+y*cfs, cfs);
                     break;
                 case CODEC_ID_ATRAC3:
                 case CODEC_ID_COOK:
                     for (x = 0; x < w/sps; x++)
-                        get_buffer(pb, ast->pkt.data+sps*(h*x+((h+1)/2)*(y&1)+(y>>1)), sps);
+                        get_buffer(pb, rm->audiobuf+sps*(h*x+((h+1)/2)*(y&1)+(y>>1)), sps);
                     break;
             }
 
-            if (++(ast->sub_packet_cnt) < h)
+            if (++(rm->sub_packet_cnt) < h)
                 return -1;
             else {
-                ast->sub_packet_cnt = 0;
+                rm->sub_packet_cnt = 0;
                 rm->audio_stream_num = st->index;
                 rm->audio_pkt_cnt = h * w / st->codec->block_align - 1;
                 // Release first audio packet
                 av_new_packet(pkt, st->codec->block_align);
-                memcpy(pkt->data, ast->pkt.data, st->codec->block_align); //FIXME avoid this
-                *timestamp = ast->audiotimestamp;
+                memcpy(pkt->data, rm->audiobuf, st->codec->block_align);
+                *timestamp = rm->audiotimestamp;
                 *flags = 2; // Mark first packet as keyframe
             }
         } else if (st->codec->codec_id == CODEC_ID_AAC) {
             int x;
             rm->audio_stream_num = st->index;
-            ast->sub_packet_cnt = (get_be16(pb) & 0xf0) >> 4;
-            if (ast->sub_packet_cnt) {
-                for (x = 0; x < ast->sub_packet_cnt; x++)
-                    ast->sub_packet_lengths[x] = get_be16(pb);
+            rm->sub_packet_cnt = (get_be16(pb) & 0xf0) >> 4;
+            if (rm->sub_packet_cnt) {
+                for (x = 0; x < rm->sub_packet_cnt; x++)
+                    rm->sub_packet_lengths[x] = get_be16(pb);
                 // Release first audio packet
-                rm->audio_pkt_cnt = ast->sub_packet_cnt - 1;
-                av_get_packet(pb, pkt, ast->sub_packet_lengths[0]);
+                rm->audio_pkt_cnt = rm->sub_packet_cnt - 1;
+                av_get_packet(pb, pkt, rm->sub_packet_lengths[0]);
                 *flags = 2; // Mark first packet as keyframe
             }
         } else {
@@ -671,35 +645,33 @@ ff_rm_parse_packet (AVFormatContext *s, ByteIOContext *pb,
     if (*flags & 2)
         pkt->flags |= PKT_FLAG_KEY;
 
-    return st->codec->codec_type == CODEC_TYPE_AUDIO ? rm->audio_pkt_cnt : 0;
+    return 0;
 }
 
-int
-ff_rm_retrieve_cache (AVFormatContext *s, ByteIOContext *pb,
-                      AVStream *st, RMStream *ast, AVPacket *pkt)
+void
+ff_rm_retrieve_cache (AVFormatContext *s, AVStream *st, AVPacket *pkt)
 {
-    RMDemuxContext *rm = s->priv_data;
+    ByteIOContext *pb = s->pb;
+    RMContext *rm = s->priv_data;
 
     assert (rm->audio_pkt_cnt > 0);
 
     if (st->codec->codec_id == CODEC_ID_AAC)
-        av_get_packet(pb, pkt, ast->sub_packet_lengths[ast->sub_packet_cnt - rm->audio_pkt_cnt]);
+        av_get_packet(pb, pkt, rm->sub_packet_lengths[rm->sub_packet_cnt - rm->audio_pkt_cnt]);
     else {
         av_new_packet(pkt, st->codec->block_align);
-        memcpy(pkt->data, ast->pkt.data + st->codec->block_align * //FIXME avoid this
-               (ast->sub_packet_h * ast->audio_framesize / st->codec->block_align - rm->audio_pkt_cnt),
+        memcpy(pkt->data, rm->audiobuf + st->codec->block_align *
+               (rm->sub_packet_h * rm->audio_framesize / st->codec->block_align - rm->audio_pkt_cnt),
                st->codec->block_align);
     }
     rm->audio_pkt_cnt--;
     pkt->flags = 0;
     pkt->stream_index = st->index;
-
-    return rm->audio_pkt_cnt;
 }
 
 static int rm_read_packet(AVFormatContext *s, AVPacket *pkt)
 {
-    RMDemuxContext *rm = s->priv_data;
+    RMContext *rm = s->priv_data;
     ByteIOContext *pb = s->pb;
     AVStream *st;
     int i, len;
@@ -709,24 +681,21 @@ static int rm_read_packet(AVFormatContext *s, AVPacket *pkt)
     if (rm->audio_pkt_cnt) {
         // If there are queued audio packet return them first
         st = s->streams[rm->audio_stream_num];
-        ff_rm_retrieve_cache(s, s->pb, st, st->priv_data, pkt);
+        ff_rm_retrieve_cache(s, st, pkt);
     } else if (rm->old_format) {
-        RMStream *ast;
-
         st = s->streams[0];
-        ast = st->priv_data;
         if (st->codec->codec_id == CODEC_ID_RA_288) {
             int x, y;
 
-            for (y = 0; y < ast->sub_packet_h; y++)
-                for (x = 0; x < ast->sub_packet_h/2; x++)
-                    if (get_buffer(pb, ast->pkt.data+x*2*ast->audio_framesize+y*ast->coded_framesize, ast->coded_framesize) <= 0)
+            for (y = 0; y < rm->sub_packet_h; y++)
+                for (x = 0; x < rm->sub_packet_h/2; x++)
+                    if (get_buffer(pb, rm->audiobuf+x*2*rm->audio_framesize+y*rm->coded_framesize, rm->coded_framesize) <= 0)
                         return AVERROR(EIO);
             rm->audio_stream_num = 0;
-            rm->audio_pkt_cnt = ast->sub_packet_h * ast->audio_framesize / st->codec->block_align - 1;
+            rm->audio_pkt_cnt = rm->sub_packet_h * rm->audio_framesize / st->codec->block_align - 1;
             // Release first audio packet
             av_new_packet(pkt, st->codec->block_align);
-            memcpy(pkt->data, ast->pkt.data, st->codec->block_align); //FIXME avoid this
+            memcpy(pkt->data, rm->audiobuf, st->codec->block_align);
             pkt->flags |= PKT_FLAG_KEY; // Mark first packet as keyframe
             pkt->stream_index = 0;
         } else {
@@ -748,8 +717,7 @@ resync:
             return AVERROR(EIO);
         st = s->streams[i];
 
-        if (ff_rm_parse_packet (s, s->pb, st, st->priv_data, len, pkt,
-                                &seq, &flags, &timestamp) < 0)
+        if (ff_rm_parse_packet (s, st, len, pkt, &seq, &flags, &timestamp) < 0)
             goto resync;
 
         if((flags&2) && (seq&0x7F) == 1)
@@ -761,11 +729,10 @@ resync:
 
 static int rm_read_close(AVFormatContext *s)
 {
-    int i;
-
-    for (i=0;i<s->nb_streams;i++)
-        ff_rm_free_rmstream(s->streams[i]->priv_data);
+    RMContext *rm = s->priv_data;
 
+    av_free(rm->audiobuf);
+    av_free(rm->videobuf);
     return 0;
 }
 
@@ -785,7 +752,7 @@ static int rm_probe(AVProbeData *p)
 static int64_t rm_read_dts(AVFormatContext *s, int stream_index,
                                int64_t *ppos, int64_t pos_limit)
 {
-    RMDemuxContext *rm = s->priv_data;
+    RMContext *rm = s->priv_data;
     int64_t pos, dts;
     int stream_index2, flags, len, h;
 
@@ -828,7 +795,7 @@ static int64_t rm_read_dts(AVFormatContext *s, int stream_index,
 AVInputFormat rm_demuxer = {
     "rm",
     NULL_IF_CONFIG_SMALL("RM format"),
-    sizeof(RMDemuxContext),
+    sizeof(RMContext),
     rm_probe,
     rm_read_header,
     rm_read_packet,
@@ -840,6 +807,6 @@ AVInputFormat rm_demuxer = {
 AVInputFormat rdt_demuxer = {
     "rdt",
     NULL_IF_CONFIG_SMALL("RDT demuxer"),
-    sizeof(RMDemuxContext),
+    sizeof(RMContext),
     NULL, NULL, NULL, rm_read_close, NULL, NULL
 };
diff --git a/libavformat/rmenc.c b/libavformat/rmenc.c
index 84a265a..0e61f02 100644
--- a/libavformat/rmenc.c
+++ b/libavformat/rmenc.c
@@ -21,25 +21,6 @@
 #include "avformat.h"
 #include "rm.h"
 
-typedef struct {
-    int nb_packets;
-    int packet_total_size;
-    int packet_max_size;
-    /* codec related output */
-    int bit_rate;
-    float frame_rate;
-    int nb_frames;    /* current frame number */
-    int total_frames; /* total number of frames */
-    int num;
-    AVCodecContext *enc;
-} StreamInfo;
-
-typedef struct {
-    StreamInfo streams[2];
-    StreamInfo *audio_stream, *video_stream;
-    int data_pos; /* position of the data after the header */
-} RMMuxContext;
-
 /* in ms */
 #define BUFFER_DURATION 0
 
@@ -63,7 +44,7 @@ static void put_str8(ByteIOContext *s, const char *tag)
 static void rv10_write_header(AVFormatContext *ctx,
                               int data_size, int index_pos)
 {
-    RMMuxContext *rm = ctx->priv_data;
+    RMContext *rm = ctx->priv_data;
     ByteIOContext *s = ctx->pb;
     StreamInfo *stream;
     unsigned char *data_offset_ptr, *start_ptr;
@@ -290,7 +271,7 @@ static void write_packet_header(AVFormatContext *ctx, StreamInfo *stream,
 
 static int rm_write_header(AVFormatContext *s)
 {
-    RMMuxContext *rm = s->priv_data;
+    RMContext *rm = s->priv_data;
     StreamInfo *stream;
     int n;
     AVCodecContext *codec;
@@ -334,7 +315,7 @@ static int rm_write_header(AVFormatContext *s)
 static int rm_write_audio(AVFormatContext *s, const uint8_t *buf, int size, int flags)
 {
     uint8_t *buf1;
-    RMMuxContext *rm = s->priv_data;
+    RMContext *rm = s->priv_data;
     ByteIOContext *pb = s->pb;
     StreamInfo *stream = rm->audio_stream;
     int i;
@@ -358,7 +339,7 @@ static int rm_write_audio(AVFormatContext *s, const uint8_t *buf, int size, int
 
 static int rm_write_video(AVFormatContext *s, const uint8_t *buf, int size, int flags)
 {
-    RMMuxContext *rm = s->priv_data;
+    RMContext *rm = s->priv_data;
     ByteIOContext *pb = s->pb;
     StreamInfo *stream = rm->video_stream;
     int key_frame = !!(flags & PKT_FLAG_KEY);
@@ -412,7 +393,7 @@ static int rm_write_packet(AVFormatContext *s, AVPacket *pkt)
 
 static int rm_write_trailer(AVFormatContext *s)
 {
-    RMMuxContext *rm = s->priv_data;
+    RMContext *rm = s->priv_data;
     int data_size, index_pos, i;
     ByteIOContext *pb = s->pb;
 
@@ -454,7 +435,7 @@ AVOutputFormat rm_muxer = {
     NULL_IF_CONFIG_SMALL("RM format"),
     "application/vnd.rn-realmedia",
     "rm,ra",
-    sizeof(RMMuxContext),
+    sizeof(RMContext),
     CODEC_ID_AC3,
     CODEC_ID_RV10,
     rm_write_header,
diff --git a/libavformat/rtp.h b/libavformat/rtp.h
index 7819ceb..4de5919 100644
--- a/libavformat/rtp.h
+++ b/libavformat/rtp.h
@@ -24,33 +24,6 @@
 #include "libavcodec/avcodec.h"
 #include "avformat.h"
 
-/** Structure listing useful vars to parse RTP packet payload*/
-typedef struct rtp_payload_data
-{
-    int sizelength;
-    int indexlength;
-    int indexdeltalength;
-    int profile_level_id;
-    int streamtype;
-    int objecttype;
-    char *mode;
-
-    /** mpeg 4 AU headers */
-    struct AUHeaders {
-        int size;
-        int index;
-        int cts_flag;
-        int cts;
-        int dts_flag;
-        int dts;
-        int rap_flag;
-        int streamstate;
-    } *au_headers;
-    int nb_au_headers;
-    int au_headers_length_bytes;
-    int cur_au_index;
-} RTPPayloadData;
-
 typedef struct PayloadContext PayloadContext;
 typedef struct RTPDynamicProtocolHandler_s RTPDynamicProtocolHandler;
 
@@ -63,7 +36,8 @@ int rtp_get_codec_info(AVCodecContext *codec, int payload_type);
 int rtp_get_payload_type(AVCodecContext *codec);
 
 typedef struct RTPDemuxContext RTPDemuxContext;
-RTPDemuxContext *rtp_parse_open(AVFormatContext *s1, AVStream *st, URLContext *rtpc, int payload_type, RTPPayloadData *rtp_payload_data);
+typedef struct rtp_payload_data_s rtp_payload_data_s;
+RTPDemuxContext *rtp_parse_open(AVFormatContext *s1, AVStream *st, URLContext *rtpc, int payload_type, rtp_payload_data_s *rtp_payload_data);
 void rtp_parse_set_dynamic_protocol(RTPDemuxContext *s, PayloadContext *ctx,
                                     RTPDynamicProtocolHandler *handler);
 int rtp_parse_packet(RTPDemuxContext *s, AVPacket *pkt,
@@ -89,4 +63,56 @@ int rtp_check_and_send_back_rr(RTPDemuxContext *s, int count);
 #define RTCP_TX_RATIO_NUM 5
 #define RTCP_TX_RATIO_DEN 1000
 
+/** Structure listing useful vars to parse RTP packet payload*/
+typedef struct rtp_payload_data_s
+{
+    int sizelength;
+    int indexlength;
+    int indexdeltalength;
+    int profile_level_id;
+    int streamtype;
+    int objecttype;
+    char *mode;
+
+    /** mpeg 4 AU headers */
+    struct AUHeaders {
+        int size;
+        int index;
+        int cts_flag;
+        int cts;
+        int dts_flag;
+        int dts;
+        int rap_flag;
+        int streamstate;
+    } *au_headers;
+    int nb_au_headers;
+    int au_headers_length_bytes;
+    int cur_au_index;
+} rtp_payload_data_t;
+
+#if 0
+typedef enum {
+  RTCP_SR   = 200,
+  RTCP_RR   = 201,
+  RTCP_SDES = 202,
+  RTCP_BYE  = 203,
+  RTCP_APP  = 204
+} rtcp_type_t;
+
+typedef enum {
+  RTCP_SDES_END    =  0,
+  RTCP_SDES_CNAME  =  1,
+  RTCP_SDES_NAME   =  2,
+  RTCP_SDES_EMAIL  =  3,
+  RTCP_SDES_PHONE  =  4,
+  RTCP_SDES_LOC    =  5,
+  RTCP_SDES_TOOL   =  6,
+  RTCP_SDES_NOTE   =  7,
+  RTCP_SDES_PRIV   =  8,
+  RTCP_SDES_IMG    =  9,
+  RTCP_SDES_DOOR   = 10,
+  RTCP_SDES_SOURCE = 11
+} rtcp_sdes_type_t;
+#endif
+
 #endif /* AVFORMAT_RTP_H */
diff --git a/libavformat/rtp_h264.c b/libavformat/rtp_h264.c
index 7d6f96c..bc29852 100644
--- a/libavformat/rtp_h264.c
+++ b/libavformat/rtp_h264.c
@@ -348,10 +348,9 @@ static void h264_free_extradata(PayloadContext *data)
     av_free(data);
 }
 
-static int parse_h264_sdp_line(AVFormatContext *s, int st_index,
-                               PayloadContext *h264_data, const char *line)
+static int parse_h264_sdp_line(AVStream * stream, PayloadContext *h264_data,
+                               const char *line)
 {
-    AVStream *stream = s->streams[st_index];
     AVCodecContext *codec = stream->codec;
     const char *p = line;
 
diff --git a/libavformat/rtp_internal.h b/libavformat/rtp_internal.h
index 6b7588f..80c81cb 100644
--- a/libavformat/rtp_internal.h
+++ b/libavformat/rtp_internal.h
@@ -66,8 +66,7 @@ struct RTPDynamicProtocolHandler_s {
     enum CodecID codec_id;
 
     // may be null
-    int (*parse_sdp_a_line) (AVFormatContext *s,
-                             int st_index,
+    int (*parse_sdp_a_line) (AVStream * stream,
                              PayloadContext *priv_data,
                              const char *line); ///< Parse the a= line from the sdp field
     PayloadContext *(*open) (); ///< allocate any data needed by the rtp parsing for this dynamic data.
@@ -112,7 +111,7 @@ struct RTPDemuxContext {
     uint8_t *buf_ptr;
 
     /* special infos for au headers parsing */
-    RTPPayloadData *rtp_payload_data; // TODO: Move into dynamic payload handlers
+    rtp_payload_data_t *rtp_payload_data; // TODO: Move into dynamic payload handlers
 
     /* dynamic payload stuff */
     DynamicPayloadPacketHandlerProc parse_packet;     ///< This is also copied from the dynamic protocol handler structure
diff --git a/libavformat/rtpdec.c b/libavformat/rtpdec.c
index 7d8fc2c..b08509c 100644
--- a/libavformat/rtpdec.c
+++ b/libavformat/rtpdec.c
@@ -267,7 +267,7 @@ int rtp_check_and_send_back_rr(RTPDemuxContext *s, int count)
  * rtp demux (otherwise CODEC_ID_MPEG2TS packets are returned)
  * TODO: change this to not take rtp_payload data, and use the new dynamic payload system.
  */
-RTPDemuxContext *rtp_parse_open(AVFormatContext *s1, AVStream *st, URLContext *rtpc, int payload_type, RTPPayloadData *rtp_payload_data)
+RTPDemuxContext *rtp_parse_open(AVFormatContext *s1, AVStream *st, URLContext *rtpc, int payload_type, rtp_payload_data_t *rtp_payload_data)
 {
     RTPDemuxContext *s;
 
@@ -323,7 +323,7 @@ static int rtp_parse_mp4_au(RTPDemuxContext *s, const uint8_t *buf)
 {
     int au_headers_length, au_header_size, i;
     GetBitContext getbitcontext;
-    RTPPayloadData *infos;
+    rtp_payload_data_t *infos;
 
     infos = s->rtp_payload_data;
 
@@ -512,7 +512,7 @@ int rtp_parse_packet(RTPDemuxContext *s, AVPacket *pkt,
             if (rtp_parse_mp4_au(s, buf))
                 return -1;
             {
-                RTPPayloadData *infos = s->rtp_payload_data;
+                rtp_payload_data_t *infos = s->rtp_payload_data;
                 if (infos == NULL)
                     return -1;
                 buf += infos->au_headers_length_bytes + 2;
diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c
index 464cffe..f7596d2 100644
--- a/libavformat/rtsp.c
+++ b/libavformat/rtsp.c
@@ -39,6 +39,62 @@
 //#define DEBUG
 //#define DEBUG_RTP_TCP
 
+enum RTSPClientState {
+    RTSP_STATE_IDLE,
+    RTSP_STATE_PLAYING,
+    RTSP_STATE_PAUSED,
+};
+
+enum RTSPServerType {
+    RTSP_SERVER_RTP,  /*< Standard-compliant RTP-server */
+    RTSP_SERVER_REAL, /*< Realmedia-style server */
+    RTSP_SERVER_LAST
+};
+
+enum RTSPTransport {
+    RTSP_TRANSPORT_RTP,
+    RTSP_TRANSPORT_RDT,
+    RTSP_TRANSPORT_LAST
+};
+
+typedef struct RTSPState {
+    URLContext *rtsp_hd; /* RTSP TCP connexion handle */
+    int nb_rtsp_streams;
+    struct RTSPStream **rtsp_streams;
+
+    enum RTSPClientState state;
+    int64_t seek_timestamp;
+
+    /* XXX: currently we use unbuffered input */
+    //    ByteIOContext rtsp_gb;
+    int seq;        /* RTSP command sequence number */
+    char session_id[512];
+    enum RTSPTransport transport;
+    enum RTSPLowerTransport lower_transport;
+    enum RTSPServerType server_type;
+    char last_reply[2048]; /* XXX: allocate ? */
+    void *cur_tx;
+    int need_subscription;
+} RTSPState;
+
+typedef struct RTSPStream {
+    URLContext *rtp_handle; /* RTP stream handle */
+    void *tx_ctx; /* RTP/RDT parse context */
+
+    int stream_index; /* corresponding stream index, if any. -1 if none (MPEG2TS case) */
+    int interleaved_min, interleaved_max;  /* interleave ids, if TCP transport */
+    char control_url[1024]; /* url for this stream (from SDP) */
+
+    int sdp_port; /* port (from SDP content - not used in RTSP) */
+    struct in_addr sdp_ip; /* IP address  (from SDP content - not used in RTSP) */
+    int sdp_ttl;  /* IP TTL (from SDP content - not used in RTSP) */
+    int sdp_payload_type; /* payload type - only used in SDP */
+    rtp_payload_data_t rtp_payload_data; /* rtp payload parsing infos from SDP */
+
+    RTPDynamicProtocolHandler *dynamic_handler; ///< Only valid if it's a dynamic protocol. (This is the handler structure)
+    PayloadContext *dynamic_protocol_context; ///< Only valid if it's a dynamic protocol. (This is any private data associated with the dynamic protocol)
+} RTSPStream;
+
 static int rtsp_read_play(AVFormatContext *s);
 
 /* XXX: currently, the only way to change the protocols consists in
@@ -227,23 +283,24 @@ static void sdp_parse_fmtp_config(AVCodecContext *codec, char *attr, char *value
     return;
 }
 
-typedef struct {
+typedef struct attrname_map
+{
     const char *str;
     uint16_t type;
     uint32_t offset;
-} AttrNameMap;
+} attrname_map_t;
 
 /* All known fmtp parmeters and the corresping RTPAttrTypeEnum */
 #define ATTR_NAME_TYPE_INT 0
 #define ATTR_NAME_TYPE_STR 1
-static const AttrNameMap attr_names[]=
+static const attrname_map_t attr_names[]=
 {
-    {"SizeLength",       ATTR_NAME_TYPE_INT, offsetof(RTPPayloadData, sizelength)},
-    {"IndexLength",      ATTR_NAME_TYPE_INT, offsetof(RTPPayloadData, indexlength)},
-    {"IndexDeltaLength", ATTR_NAME_TYPE_INT, offsetof(RTPPayloadData, indexdeltalength)},
-    {"profile-level-id", ATTR_NAME_TYPE_INT, offsetof(RTPPayloadData, profile_level_id)},
-    {"StreamType",       ATTR_NAME_TYPE_INT, offsetof(RTPPayloadData, streamtype)},
-    {"mode",             ATTR_NAME_TYPE_STR, offsetof(RTPPayloadData, mode)},
+    {"SizeLength",       ATTR_NAME_TYPE_INT, offsetof(rtp_payload_data_t, sizelength)},
+    {"IndexLength",      ATTR_NAME_TYPE_INT, offsetof(rtp_payload_data_t, indexlength)},
+    {"IndexDeltaLength", ATTR_NAME_TYPE_INT, offsetof(rtp_payload_data_t, indexdeltalength)},
+    {"profile-level-id", ATTR_NAME_TYPE_INT, offsetof(rtp_payload_data_t, profile_level_id)},
+    {"StreamType",       ATTR_NAME_TYPE_INT, offsetof(rtp_payload_data_t, streamtype)},
+    {"mode",             ATTR_NAME_TYPE_STR, offsetof(rtp_payload_data_t, mode)},
     {NULL, -1, -1},
 };
 
@@ -275,7 +332,7 @@ static void sdp_parse_fmtp(AVStream *st, const char *p)
 
     RTSPStream *rtsp_st = st->priv_data;
     AVCodecContext *codec = st->codec;
-    RTPPayloadData *rtp_payload_data = &rtsp_st->rtp_payload_data;
+    rtp_payload_data_t *rtp_payload_data = &rtsp_st->rtp_payload_data;
 
     /* loop on each attribute */
     while(rtsp_next_attr_and_value(&p, attr, sizeof(attr), value, sizeof(value)))
@@ -461,7 +518,7 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1,
                 rtsp_st = st->priv_data;
                 if (rtsp_st->sdp_payload_type == payload_type) {
                     if(rtsp_st->dynamic_handler && rtsp_st->dynamic_handler->parse_sdp_a_line) {
-                        if(!rtsp_st->dynamic_handler->parse_sdp_a_line(s, i, rtsp_st->dynamic_protocol_context, buf)) {
+                        if(!rtsp_st->dynamic_handler->parse_sdp_a_line(st, rtsp_st->dynamic_protocol_context, buf)) {
                             sdp_parse_fmtp(st, p);
                         }
                     } else {
@@ -478,7 +535,7 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1,
                 rtsp_st = st->priv_data;
                 if (rtsp_st->sdp_payload_type == payload_type) {
                     if(rtsp_st->dynamic_handler && rtsp_st->dynamic_handler->parse_sdp_a_line) {
-                        rtsp_st->dynamic_handler->parse_sdp_a_line(s, i, rtsp_st->dynamic_protocol_context, buf);
+                        rtsp_st->dynamic_handler->parse_sdp_a_line(st, rtsp_st->dynamic_protocol_context, buf);
                     }
                 }
             }
@@ -493,13 +550,10 @@ static void sdp_parse_line(AVFormatContext *s, SDPParseState *s1,
             if (atoi(p) == 1)
                 rt->transport = RTSP_TRANSPORT_RDT;
         } else if (s->nb_streams > 0) {
-            if (rt->server_type == RTSP_SERVER_REAL)
-                ff_real_parse_sdp_a_line(s, s->nb_streams - 1, p);
-
             rtsp_st = s->streams[s->nb_streams - 1]->priv_data;
             if (rtsp_st->dynamic_handler &&
                 rtsp_st->dynamic_handler->parse_sdp_a_line)
-                rtsp_st->dynamic_handler->parse_sdp_a_line(s, s->nb_streams - 1,
+                rtsp_st->dynamic_handler->parse_sdp_a_line(s->streams[s->nb_streams - 1],
                     rtsp_st->dynamic_protocol_context, buf);
         }
         break;
@@ -510,11 +564,7 @@ static int sdp_parse(AVFormatContext *s, const char *content)
 {
     const char *p;
     int letter;
-    /* Some SDP lines, particularly for Realmedia or ASF RTSP streams, contain long SDP
-     * lines containing complete ASF Headers (several kB) or arrays of MDPR (RM stream
-     * descriptor) headers plus "rulebooks" describing their properties. Therefore, the
-     * SDP line buffer is large. */
-    char buf[8192], *q;
+    char buf[2048], *q;
     SDPParseState sdp_parse_state, *s1 = &sdp_parse_state;
 
     memset(s1, 0, sizeof(SDPParseState));
@@ -688,9 +738,6 @@ void rtsp_parse_line(RTSPHeader *reply, const char *buf)
     } else if (av_stristart(p, "RealChallenge1:", &p)) {
         skip_spaces(&p);
         av_strlcpy(reply->real_challenge, p, sizeof(reply->real_challenge));
-    } else if (av_stristart(p, "Server:", &p)) {
-        skip_spaces(&p);
-        av_strlcpy(reply->server, p, sizeof(reply->server));
     }
 }
 
@@ -854,7 +901,7 @@ rtsp_open_transport_ctx(AVFormatContext *s, RTSPStream *rtsp_st)
         s->ctx_flags |= AVFMTCTX_NOHEADER;
 
     if (rt->transport == RTSP_TRANSPORT_RDT)
-        rtsp_st->tx_ctx = ff_rdt_parse_open(s, st->index,
+        rtsp_st->tx_ctx = ff_rdt_parse_open(s, st,
                                             rtsp_st->dynamic_protocol_context,
                                             rtsp_st->dynamic_handler);
     else
@@ -1126,8 +1173,6 @@ static int rtsp_read_header(AVFormatContext *s,
         if (rt->server_type != RTSP_SERVER_REAL && reply->real_challenge[0]) {
             rt->server_type = RTSP_SERVER_REAL;
             continue;
-        } else if (!strncasecmp(reply->server, "WMServer/", 9)) {
-            rt->server_type = RTSP_SERVER_WMS;
         } else if (rt->server_type == RTSP_SERVER_REAL) {
             strcpy(real_challenge, reply->real_challenge);
         }
@@ -1236,7 +1281,7 @@ static int tcp_read_packet(AVFormatContext *s, RTSPStream **prtsp_st,
     if (ret != len)
         return -1;
     if (rt->transport == RTSP_TRANSPORT_RDT &&
-        ff_rdt_parse_header(buf, len, &id, NULL, NULL, NULL, NULL) < 0)
+        ff_rdt_parse_header(buf, len, &id, NULL, NULL, NULL) < 0)
         return -1;
 
     /* find the matching stream */
@@ -1299,68 +1344,33 @@ static int rtsp_read_packet(AVFormatContext *s,
     RTSPState *rt = s->priv_data;
     RTSPStream *rtsp_st;
     int ret, len;
-    uint8_t buf[10 * RTP_MAX_PACKET_LENGTH];
+    uint8_t buf[RTP_MAX_PACKET_LENGTH];
 
-    if (rt->server_type == RTSP_SERVER_REAL) {
+    if (rt->server_type == RTSP_SERVER_REAL && rt->need_subscription) {
         int i;
         RTSPHeader reply1, *reply = &reply1;
-        enum AVDiscard cache[MAX_STREAMS];
         char cmd[1024];
 
-        for (i = 0; i < s->nb_streams; i++)
-            cache[i] = s->streams[i]->discard;
-
-        if (!rt->need_subscription) {
-            if (memcmp (cache, rt->real_setup_cache,
-                        sizeof(enum AVDiscard) * s->nb_streams)) {
-                av_strlcatf(cmd, sizeof(cmd),
-                            "SET_PARAMETER %s RTSP/1.0\r\n"
-                            "Unsubscribe: %s\r\n",
-                            s->filename, rt->last_subscription);
-                rtsp_send_cmd(s, cmd, reply, NULL);
-                if (reply->status_code != RTSP_STATUS_OK)
-                    return AVERROR_INVALIDDATA;
-                rt->need_subscription = 1;
-            }
+        snprintf(cmd, sizeof(cmd),
+                 "SET_PARAMETER %s RTSP/1.0\r\n"
+                 "Subscribe: ",
+                 s->filename);
+        for (i = 0; i < rt->nb_rtsp_streams; i++) {
+            if (i != 0) av_strlcat(cmd, ",", sizeof(cmd));
+            ff_rdt_subscribe_rule(cmd, sizeof(cmd), i, 0);
+            if (rt->transport == RTSP_TRANSPORT_RDT)
+                ff_rdt_subscribe_rule2(
+                    rt->rtsp_streams[i]->tx_ctx,
+                    cmd, sizeof(cmd), i, 0);
         }
+        av_strlcat(cmd, "\r\n", sizeof(cmd));
+        rtsp_send_cmd(s, cmd, reply, NULL);
+        if (reply->status_code != RTSP_STATUS_OK)
+            return AVERROR_INVALIDDATA;
+        rt->need_subscription = 0;
 
-        if (rt->need_subscription) {
-            int r, rule_nr, first = 1;
-
-            memcpy(rt->real_setup_cache, cache,
-                   sizeof(enum AVDiscard) * s->nb_streams);
-            rt->last_subscription[0] = 0;
-
-            snprintf(cmd, sizeof(cmd),
-                     "SET_PARAMETER %s RTSP/1.0\r\n"
-                     "Subscribe: ",
-                     s->filename);
-            for (i = 0; i < rt->nb_rtsp_streams; i++) {
-                rule_nr = 0;
-                for (r = 0; r < s->nb_streams; r++) {
-                    if (s->streams[r]->priv_data == rt->rtsp_streams[i]) {
-                        if (s->streams[r]->discard != AVDISCARD_ALL) {
-                            if (!first)
-                                av_strlcat(rt->last_subscription, ",",
-                                           sizeof(rt->last_subscription));
-                            ff_rdt_subscribe_rule(
-                                rt->last_subscription,
-                                sizeof(rt->last_subscription), i, rule_nr);
-                            first = 0;
-                        }
-                        rule_nr++;
-                    }
-                }
-            }
-            av_strlcatf(cmd, sizeof(cmd), "%s\r\n", rt->last_subscription);
-            rtsp_send_cmd(s, cmd, reply, NULL);
-            if (reply->status_code != RTSP_STATUS_OK)
-                return AVERROR_INVALIDDATA;
-            rt->need_subscription = 0;
-
-            if (rt->state == RTSP_STATE_PLAYING)
-                rtsp_read_play (s);
-        }
+        if (rt->state == RTSP_STATE_PLAYING)
+            rtsp_read_play (s);
     }
 
     /* get next frames from the same RTP packet */
@@ -1389,7 +1399,7 @@ static int rtsp_read_packet(AVFormatContext *s,
     case RTSP_LOWER_TRANSPORT_UDP:
     case RTSP_LOWER_TRANSPORT_UDP_MULTICAST:
         len = udp_read_packet(s, &rtsp_st, buf, sizeof(buf));
-        if (len >=0 && rtsp_st->tx_ctx && rt->transport == RTSP_TRANSPORT_RTP)
+        if (len >=0 && rtsp_st->tx_ctx)
             rtp_check_and_send_back_rr(rtsp_st->tx_ctx, len);
         break;
     }
diff --git a/libavformat/rtsp.h b/libavformat/rtsp.h
index ec3477b..611f5c3 100644
--- a/libavformat/rtsp.h
+++ b/libavformat/rtsp.h
@@ -24,8 +24,6 @@
 #include <stdint.h>
 #include "avformat.h"
 #include "rtspcodes.h"
-#include "rtp.h"
-#include "network.h"
 
 enum RTSPLowerTransport {
     RTSP_LOWER_TRANSPORT_UDP = 0,
@@ -66,68 +64,8 @@ typedef struct RTSPHeader {
     int seq; /**< sequence number */
     char session_id[512];
     char real_challenge[64]; /**< the RealChallenge1 field from the server */
-    char server[64];
 } RTSPHeader;
 
-enum RTSPClientState {
-    RTSP_STATE_IDLE,
-    RTSP_STATE_PLAYING,
-    RTSP_STATE_PAUSED,
-};
-
-enum RTSPServerType {
-    RTSP_SERVER_RTP,  /**< Standards-compliant RTP-server */
-    RTSP_SERVER_REAL, /**< Realmedia-style server */
-    RTSP_SERVER_WMS,  /**< Windows Media server */
-    RTSP_SERVER_LAST
-};
-
-enum RTSPTransport {
-    RTSP_TRANSPORT_RTP,
-    RTSP_TRANSPORT_RDT,
-    RTSP_TRANSPORT_LAST
-};
-
-typedef struct RTSPState {
-    URLContext *rtsp_hd; /* RTSP TCP connexion handle */
-    int nb_rtsp_streams;
-    struct RTSPStream **rtsp_streams;
-
-    enum RTSPClientState state;
-    int64_t seek_timestamp;
-
-    /* XXX: currently we use unbuffered input */
-    //    ByteIOContext rtsp_gb;
-    int seq;        /* RTSP command sequence number */
-    char session_id[512];
-    enum RTSPTransport transport;
-    enum RTSPLowerTransport lower_transport;
-    enum RTSPServerType server_type;
-    char last_reply[2048]; /* XXX: allocate ? */
-    void *cur_tx;
-    int need_subscription;
-    enum AVDiscard real_setup_cache[MAX_STREAMS];
-    char last_subscription[1024];
-} RTSPState;
-
-typedef struct RTSPStream {
-    URLContext *rtp_handle; /* RTP stream handle */
-    void *tx_ctx; /* RTP/RDT parse context */
-
-    int stream_index; /* corresponding stream index, if any. -1 if none (MPEG2TS case) */
-    int interleaved_min, interleaved_max;  /* interleave ids, if TCP transport */
-    char control_url[1024]; /* url for this stream (from SDP) */
-
-    int sdp_port; /* port (from SDP content - not used in RTSP) */
-    struct in_addr sdp_ip; /* IP address  (from SDP content - not used in RTSP) */
-    int sdp_ttl;  /* IP TTL (from SDP content - not used in RTSP) */
-    int sdp_payload_type; /* payload type - only used in SDP */
-    RTPPayloadData rtp_payload_data; /* rtp payload parsing infos from SDP */
-
-    RTPDynamicProtocolHandler *dynamic_handler; ///< Only valid if it's a dynamic protocol. (This is the handler structure)
-    PayloadContext *dynamic_protocol_context; ///< Only valid if it's a dynamic protocol. (This is any private data associated with the dynamic protocol)
-} RTSPStream;
-
 /** the callback can be used to extend the connection setup/teardown step */
 enum RTSPCallbackAction {
     RTSP_ACTION_SERVER_SETUP,
diff --git a/libavformat/sdp.c b/libavformat/sdp.c
index d22f516..dfbe52e 100644
--- a/libavformat/sdp.c
+++ b/libavformat/sdp.c
@@ -43,7 +43,7 @@ struct sdp_session_level {
     const char *name;     /**< session name (can be an empty string) */
 };
 
-static void sdp_write_address(char *buff, int size, const char *dest_addr, int ttl)
+static void dest_write(char *buff, int size, const char *dest_addr, int ttl)
 {
     if (dest_addr) {
         if (ttl > 0) {
@@ -65,10 +65,10 @@ static void sdp_write_header(char *buff, int size, struct sdp_session_level *s)
                             s->id, s->version, s->src_addr,
                             s->start_time, s->end_time,
                             s->name[0] ? s->name : "No Name");
-    sdp_write_address(buff, size, s->dst_addr, s->ttl);
+    dest_write(buff, size, s->dst_addr, s->ttl);
 }
 
-static int sdp_get_address(char *dest_addr, int size, int *ttl, const char *url)
+static int get_address(char *dest_addr, int size, int *ttl, const char *url)
 {
     int port;
     const char *p;
@@ -157,7 +157,7 @@ static char *extradata2config(AVCodecContext *c)
     return config;
 }
 
-static char *sdp_write_media_attributes(char *buff, int size, AVCodecContext *c, int payload_type)
+static char *sdp_media_attributes(char *buff, int size, AVCodecContext *c, int payload_type)
 {
     char *config = NULL;
 
@@ -246,12 +246,12 @@ static void sdp_write_media(char *buff, int size, AVCodecContext *c, const char
     }
 
     av_strlcatf(buff, size, "m=%s %d RTP/AVP %d\r\n", type, port, payload_type);
-    sdp_write_address(buff, size, dest_addr, ttl);
+    dest_write(buff, size, dest_addr, ttl);
     if (c->bit_rate) {
         av_strlcatf(buff, size, "b=AS:%d\r\n", c->bit_rate / 1000);
     }
 
-    sdp_write_media_attributes(buff, size, c, payload_type);
+    sdp_media_attributes(buff, size, c, payload_type);
 }
 
 int avf_sdp_create(AVFormatContext *ac[], int n_files, char *buff, int size)
@@ -269,7 +269,7 @@ int avf_sdp_create(AVFormatContext *ac[], int n_files, char *buff, int size)
     port = 0;
     ttl = 0;
     if (n_files == 1) {
-        port = sdp_get_address(dst, sizeof(dst), &ttl, ac[0]->filename);
+        port = get_address(dst, sizeof(dst), &ttl, ac[0]->filename);
         if (port > 0) {
             s.dst_addr = dst;
             s.ttl = ttl;
@@ -280,7 +280,7 @@ int avf_sdp_create(AVFormatContext *ac[], int n_files, char *buff, int size)
     dst[0] = 0;
     for (i = 0; i < n_files; i++) {
         if (n_files != 1) {
-            port = sdp_get_address(dst, sizeof(dst), &ttl, ac[i]->filename);
+            port = get_address(dst, sizeof(dst), &ttl, ac[i]->filename);
         }
         for (j = 0; j < ac[i]->nb_streams; j++) {
             sdp_write_media(buff, size,
diff --git a/libavformat/segafilm.c b/libavformat/segafilm.c
index 1ec8c28..27ff06b 100644
--- a/libavformat/segafilm.c
+++ b/libavformat/segafilm.c
@@ -40,7 +40,7 @@ typedef struct {
   unsigned int sample_size;
   int64_t pts;
   int keyframe;
-} film_sample;
+} film_sample_t;
 
 typedef struct FilmDemuxContext {
     int video_stream_index;
@@ -53,7 +53,7 @@ typedef struct FilmDemuxContext {
 
     enum CodecID video_type;
     unsigned int sample_count;
-    film_sample *sample_table;
+    film_sample_t *sample_table;
     unsigned int current_sample;
 
     unsigned int base_clock;
@@ -163,9 +163,9 @@ static int film_read_header(AVFormatContext *s,
         return AVERROR_INVALIDDATA;
     film->base_clock = AV_RB32(&scratch[8]);
     film->sample_count = AV_RB32(&scratch[12]);
-    if(film->sample_count >= UINT_MAX / sizeof(film_sample))
+    if(film->sample_count >= UINT_MAX / sizeof(film_sample_t))
         return -1;
-    film->sample_table = av_malloc(film->sample_count * sizeof(film_sample));
+    film->sample_table = av_malloc(film->sample_count * sizeof(film_sample_t));
 
     for(i=0; i<s->nb_streams; i++)
         av_set_pts_info(s->streams[i], 33, 1, film->base_clock);
@@ -205,7 +205,7 @@ static int film_read_packet(AVFormatContext *s,
 {
     FilmDemuxContext *film = s->priv_data;
     ByteIOContext *pb = s->pb;
-    film_sample *sample;
+    film_sample_t *sample;
     int ret = 0;
     int i;
     int left, right;
diff --git a/libavformat/sierravmd.c b/libavformat/sierravmd.c
index 1e15a22..0a5f2fa 100644
--- a/libavformat/sierravmd.c
+++ b/libavformat/sierravmd.c
@@ -39,7 +39,7 @@ typedef struct {
   int64_t pts;
   int keyframe;
   unsigned char frame_record[BYTES_PER_FRAME_RECORD];
-} vmd_frame;
+} vmd_frame_t;
 
 typedef struct VmdDemuxContext {
     int video_stream_index;
@@ -47,9 +47,8 @@ typedef struct VmdDemuxContext {
 
     unsigned int frame_count;
     unsigned int frames_per_block;
-    vmd_frame *frame_table;
+    vmd_frame_t *frame_table;
     unsigned int current_frame;
-    int is_indeo3;
 
     int sample_rate;
     int64_t audio_sample_counter;
@@ -92,10 +91,6 @@ static int vmd_read_header(AVFormatContext *s,
     if (get_buffer(pb, vmd->vmd_header, VMD_HEADER_SIZE) != VMD_HEADER_SIZE)
         return AVERROR(EIO);
 
-    if(vmd->vmd_header[16] == 'i' && vmd->vmd_header[17] == 'v' && vmd->vmd_header[18] == '3')
-        vmd->is_indeo3 = 1;
-    else
-        vmd->is_indeo3 = 0;
     /* start up the decoders */
     vst = av_new_stream(s, 0);
     if (!vst)
@@ -103,14 +98,10 @@ static int vmd_read_header(AVFormatContext *s,
     av_set_pts_info(vst, 33, 1, 10);
     vmd->video_stream_index = vst->index;
     vst->codec->codec_type = CODEC_TYPE_VIDEO;
-    vst->codec->codec_id = vmd->is_indeo3 ? CODEC_ID_INDEO3 : CODEC_ID_VMDVIDEO;
+    vst->codec->codec_id = CODEC_ID_VMDVIDEO;
     vst->codec->codec_tag = 0;  /* no fourcc */
     vst->codec->width = AV_RL16(&vmd->vmd_header[12]);
     vst->codec->height = AV_RL16(&vmd->vmd_header[14]);
-    if(vmd->is_indeo3 && vst->codec->width > 320){
-        vst->codec->width >>= 1;
-        vst->codec->height >>= 1;
-    }
     vst->codec->extradata_size = VMD_HEADER_SIZE;
     vst->codec->extradata = av_mallocz(VMD_HEADER_SIZE + FF_INPUT_BUFFER_PADDING_SIZE);
     memcpy(vst->codec->extradata, vmd->vmd_header, VMD_HEADER_SIZE);
@@ -155,12 +146,12 @@ static int vmd_read_header(AVFormatContext *s,
     vmd->frame_table = NULL;
     sound_buffers = AV_RL16(&vmd->vmd_header[808]);
     raw_frame_table_size = vmd->frame_count * 6;
-    if(vmd->frame_count * vmd->frames_per_block  >= UINT_MAX / sizeof(vmd_frame)){
+    if(vmd->frame_count * vmd->frames_per_block  >= UINT_MAX / sizeof(vmd_frame_t)){
         av_log(s, AV_LOG_ERROR, "vmd->frame_count * vmd->frames_per_block too large\n");
         return -1;
     }
     raw_frame_table = av_malloc(raw_frame_table_size);
-    vmd->frame_table = av_malloc((vmd->frame_count * vmd->frames_per_block + sound_buffers) * sizeof(vmd_frame));
+    vmd->frame_table = av_malloc((vmd->frame_count * vmd->frames_per_block + sound_buffers) * sizeof(vmd_frame_t));
     if (!raw_frame_table || !vmd->frame_table) {
         av_free(raw_frame_table);
         av_free(vmd->frame_table);
@@ -257,7 +248,7 @@ static int vmd_read_packet(AVFormatContext *s,
     VmdDemuxContext *vmd = s->priv_data;
     ByteIOContext *pb = s->pb;
     int ret = 0;
-    vmd_frame *frame;
+    vmd_frame_t *frame;
 
     if (vmd->current_frame >= vmd->frame_count)
         return AVERROR(EIO);
@@ -270,11 +261,8 @@ static int vmd_read_packet(AVFormatContext *s,
         return AVERROR(ENOMEM);
     pkt->pos= url_ftell(pb);
     memcpy(pkt->data, frame->frame_record, BYTES_PER_FRAME_RECORD);
-    if(vmd->is_indeo3)
-        ret = get_buffer(pb, pkt->data, frame->frame_size);
-    else
-        ret = get_buffer(pb, pkt->data + BYTES_PER_FRAME_RECORD,
-            frame->frame_size);
+    ret = get_buffer(pb, pkt->data + BYTES_PER_FRAME_RECORD,
+        frame->frame_size);
 
     if (ret != frame->frame_size) {
         av_free_packet(pkt);
diff --git a/libavformat/udp.c b/libavformat/udp.c
index 1101ffc..6a2e642 100644
--- a/libavformat/udp.c
+++ b/libavformat/udp.c
@@ -29,10 +29,6 @@
 #include <unistd.h>
 #include "network.h"
 #include "os_support.h"
-#ifdef HAVE_SYS_SELECT_H
-#include <sys/select.h>
-#endif
-#include <sys/time.h>
 
 #ifndef IPV6_ADD_MEMBERSHIP
 #define IPV6_ADD_MEMBERSHIP IPV6_JOIN_GROUP
@@ -48,7 +44,6 @@
 typedef struct {
     int udp_fd;
     int ttl;
-    int buffer_size;
     int is_multicast;
     int local_port;
     int reuse_socket;
@@ -337,7 +332,7 @@ int udp_get_file_handle(URLContext *h)
 static int udp_open(URLContext *h, const char *uri, int flags)
 {
     char hostname[1024];
-    int port, udp_fd = -1, tmp, bind_ret = -1;
+    int port, udp_fd = -1, tmp;
     UDPContext *s = NULL;
     int is_output;
     const char *p;
@@ -363,8 +358,6 @@ static int udp_open(URLContext *h, const char *uri, int flags)
 
     h->priv_data = s;
     s->ttl = 16;
-    s->buffer_size = is_output ? UDP_TX_BUF_SIZE : UDP_MAX_PKT_SIZE;
-
     p = strchr(uri, '?');
     if (p) {
         s->reuse_socket = find_info_tag(buf, sizeof(buf), "reuse", p);
@@ -377,9 +370,6 @@ static int udp_open(URLContext *h, const char *uri, int flags)
         if (find_info_tag(buf, sizeof(buf), "pkt_size", p)) {
             h->max_packet_size = strtol(buf, NULL, 10);
         }
-        if (find_info_tag(buf, sizeof(buf), "buffer_size", p)) {
-            s->buffer_size = strtol(buf, NULL, 10);
-        }
     }
 
     /* fill the dest addr */
@@ -405,13 +395,7 @@ static int udp_open(URLContext *h, const char *uri, int flags)
             goto fail;
 
     /* the bind is needed to give a port to the socket now */
-    /* if multicast, try the multicast address bind first */
-    if (s->is_multicast && !(h->flags & URL_WRONLY)) {
-        bind_ret = bind(udp_fd,(struct sockaddr *)&s->dest_addr, len);
-    }
-    /* bind to the local address if not multicast or if the multicast
-     * bind failed */
-    if (bind_ret < 0 && bind(udp_fd,(struct sockaddr *)&my_addr, len) < 0)
+    if (bind(udp_fd,(struct sockaddr *)&my_addr, len) < 0)
         goto fail;
 
     len = sizeof(my_addr);
@@ -432,7 +416,7 @@ static int udp_open(URLContext *h, const char *uri, int flags)
 
     if (is_output) {
         /* limit the tx buf size to limit latency */
-        tmp = s->buffer_size;
+        tmp = UDP_TX_BUF_SIZE;
         if (setsockopt(udp_fd, SOL_SOCKET, SO_SNDBUF, &tmp, sizeof(tmp)) < 0) {
             av_log(NULL, AV_LOG_ERROR, "setsockopt(SO_SNDBUF): %s\n", strerror(errno));
             goto fail;
@@ -440,12 +424,8 @@ static int udp_open(URLContext *h, const char *uri, int flags)
     } else {
         /* set udp recv buffer size to the largest possible udp packet size to
          * avoid losing data on OSes that set this too low by default. */
-        tmp = s->buffer_size;
-        if (setsockopt(udp_fd, SOL_SOCKET, SO_RCVBUF, &tmp, sizeof(tmp)) < 0) {
-            av_log(NULL, AV_LOG_WARNING, "setsockopt(SO_RECVBUF): %s\n", strerror(errno));
-        }
-        /* make the socket non-blocking */
-        ff_socket_nonblock(udp_fd, 1);
+        tmp = UDP_MAX_PKT_SIZE;
+        setsockopt(udp_fd, SOL_SOCKET, SO_RCVBUF, &tmp, sizeof(tmp));
     }
 
     s->udp_fd = udp_fd;
@@ -461,22 +441,8 @@ static int udp_read(URLContext *h, uint8_t *buf, int size)
 {
     UDPContext *s = h->priv_data;
     int len;
-    fd_set rfds;
-    int ret;
-    struct timeval tv;
 
     for(;;) {
-        if (url_interrupt_cb())
-            return AVERROR(EINTR);
-        FD_ZERO(&rfds);
-        FD_SET(s->udp_fd, &rfds);
-        tv.tv_sec = 0;
-        tv.tv_usec = 100 * 1000;
-        ret = select(s->udp_fd + 1, &rfds, NULL, NULL, &tv);
-        if (ret < 0)
-            return AVERROR(EIO);
-        if (!(ret > 0 && FD_ISSET(s->udp_fd, &rfds)))
-            continue;
         len = recv(s->udp_fd, buf, size, 0);
         if (len < 0) {
             if (ff_neterrno() != FF_NETERROR(EAGAIN) &&
diff --git a/libavformat/utils.c b/libavformat/utils.c
index 9c3acfb..e23eb88 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -21,7 +21,6 @@
 #include "avformat.h"
 #include "internal.h"
 #include "libavcodec/opt.h"
-#include "metadata.h"
 #include "libavutil/avstring.h"
 #include "riff.h"
 #include <sys/time.h>
@@ -295,7 +294,7 @@ int av_get_packet(ByteIOContext *s, AVPacket *pkt, int size)
 
 int av_dup_packet(AVPacket *pkt)
 {
-    if (((pkt->destruct == av_destruct_packet_nofree) || (pkt->destruct == NULL)) && pkt->data) {
+    if (pkt->destruct != av_destruct_packet) {
         uint8_t *data;
         /* We duplicate the packet and don't forget to add the padding again. */
         if((unsigned)pkt->size > (unsigned)pkt->size + FF_INPUT_BUFFER_PADDING_SIZE)
@@ -485,10 +484,6 @@ int av_open_input_stream(AVFormatContext **ic_ptr,
     if (pb && !ic->data_offset)
         ic->data_offset = url_ftell(ic->pb);
 
-#if LIBAVFORMAT_VERSION_MAJOR < 53
-    ff_metadata_demux_compat(ic);
-#endif
-
     *ic_ptr = ic;
     return 0;
  fail:
@@ -1943,7 +1938,7 @@ enum CodecID codec_get_id(const AVCodecTag *tags, unsigned int tag)
     return CODEC_ID_NONE;
 }
 
-unsigned int av_codec_get_tag(const AVCodecTag * const *tags, enum CodecID id)
+unsigned int av_codec_get_tag(const AVCodecTag *tags[4], enum CodecID id)
 {
     int i;
     for(i=0; tags && tags[i]; i++){
@@ -1953,7 +1948,7 @@ unsigned int av_codec_get_tag(const AVCodecTag * const *tags, enum CodecID id)
     return 0;
 }
 
-enum CodecID av_codec_get_id(const AVCodecTag * const *tags, unsigned int tag)
+enum CodecID av_codec_get_id(const AVCodecTag *tags[4], unsigned int tag)
 {
     int i;
     for(i=0; tags && tags[i]; i++){
@@ -2289,7 +2284,6 @@ void av_close_input_stream(AVFormatContext *s)
         if (st->parser) {
             av_parser_close(st->parser);
         }
-        av_metadata_free(&st->metadata);
         av_free(st->index_entries);
         av_free(st->codec->extradata);
         av_free(st->codec);
@@ -2300,7 +2294,6 @@ void av_close_input_stream(AVFormatContext *s)
     for(i=s->nb_programs-1; i>=0; i--) {
         av_freep(&s->programs[i]->provider_name);
         av_freep(&s->programs[i]->name);
-        av_metadata_free(&s->programs[i]->metadata);
         av_freep(&s->programs[i]->stream_index);
         av_freep(&s->programs[i]);
     }
@@ -2309,11 +2302,9 @@ void av_close_input_stream(AVFormatContext *s)
     av_freep(&s->priv_data);
     while(s->nb_chapters--) {
         av_free(s->chapters[s->nb_chapters]->title);
-        av_metadata_free(&s->chapters[s->nb_chapters]->metadata);
         av_free(s->chapters[s->nb_chapters]);
     }
     av_freep(&s->chapters);
-    av_metadata_free(&s->metadata);
     av_free(s);
 }
 
@@ -2501,10 +2492,6 @@ int av_write_header(AVFormatContext *s)
             return AVERROR(ENOMEM);
     }
 
-#if LIBAVFORMAT_VERSION_MAJOR < 53
-    ff_metadata_mux_compat(s);
-#endif
-
     if(s->oformat->write_header){
         ret = s->oformat->write_header(s);
         if (ret < 0)
@@ -2862,7 +2849,6 @@ void dump_format(AVFormatContext *ic,
         dump_stream_format(ic, i, index, is_output);
 }
 
-#if LIBAVFORMAT_VERSION_MAJOR < 53
 int parse_image_size(int *width_ptr, int *height_ptr, const char *str)
 {
     return av_parse_video_frame_size(width_ptr, height_ptr, str);
@@ -2876,7 +2862,6 @@ int parse_frame_rate(int *frame_rate_num, int *frame_rate_den, const char *arg)
     *frame_rate_den= frame_rate.den;
     return ret;
 }
-#endif
 
 int64_t av_gettime(void)
 {
diff --git a/libavformat/voc.h b/libavformat/voc.h
index 7993146..0e8aa61 100644
--- a/libavformat/voc.h
+++ b/libavformat/voc.h
@@ -27,7 +27,7 @@
 
 typedef struct voc_dec_context {
     int remaining_size;
-} VocDecContext;
+} voc_dec_context_t;
 
 typedef enum voc_type {
     VOC_TYPE_EOF              = 0x00,
@@ -40,7 +40,7 @@ typedef enum voc_type {
     VOC_TYPE_REPETITION_END   = 0x07,
     VOC_TYPE_EXTENDED         = 0x08,
     VOC_TYPE_NEW_VOICE_DATA   = 0x09,
-} VocType;
+} voc_type_t;
 
 extern const unsigned char ff_voc_magic[21];
 extern const AVCodecTag ff_voc_codec_tags[];
diff --git a/libavformat/vocdec.c b/libavformat/vocdec.c
index 8ad6909..7aec2ab 100644
--- a/libavformat/vocdec.c
+++ b/libavformat/vocdec.c
@@ -38,7 +38,7 @@ static int voc_probe(AVProbeData *p)
 
 static int voc_read_header(AVFormatContext *s, AVFormatParameters *ap)
 {
-    VocDecContext *voc = s->priv_data;
+    voc_dec_context_t *voc = s->priv_data;
     ByteIOContext *pb = s->pb;
     int header_size;
     AVStream *st;
@@ -62,10 +62,10 @@ static int voc_read_header(AVFormatContext *s, AVFormatParameters *ap)
 int
 voc_get_packet(AVFormatContext *s, AVPacket *pkt, AVStream *st, int max_size)
 {
-    VocDecContext *voc = s->priv_data;
+    voc_dec_context_t *voc = s->priv_data;
     AVCodecContext *dec = st->codec;
     ByteIOContext *pb = s->pb;
-    VocType type;
+    voc_type_t type;
     int size;
     int sample_rate = 0;
     int channels = 1;
@@ -137,7 +137,7 @@ static int voc_read_packet(AVFormatContext *s, AVPacket *pkt)
 AVInputFormat voc_demuxer = {
     "voc",
     NULL_IF_CONFIG_SMALL("Creative Voice file format"),
-    sizeof(VocDecContext),
+    sizeof(voc_dec_context_t),
     voc_probe,
     voc_read_header,
     voc_read_packet,
diff --git a/libavformat/vocenc.c b/libavformat/vocenc.c
index 744b233..4badb1d 100644
--- a/libavformat/vocenc.c
+++ b/libavformat/vocenc.c
@@ -24,7 +24,7 @@
 
 typedef struct voc_enc_context {
     int param_written;
-} VocEncContext;
+} voc_enc_context_t;
 
 static int voc_write_header(AVFormatContext *s)
 {
@@ -46,7 +46,7 @@ static int voc_write_header(AVFormatContext *s)
 
 static int voc_write_packet(AVFormatContext *s, AVPacket *pkt)
 {
-    VocEncContext *voc = s->priv_data;
+    voc_enc_context_t *voc = s->priv_data;
     AVCodecContext *enc = s->streams[0]->codec;
     ByteIOContext *pb = s->pb;
 
@@ -93,7 +93,7 @@ AVOutputFormat voc_muxer = {
     NULL_IF_CONFIG_SMALL("Creative Voice file format"),
     "audio/x-voc",
     "voc",
-    sizeof(VocEncContext),
+    sizeof(voc_enc_context_t),
     CODEC_ID_PCM_U8,
     CODEC_ID_NONE,
     voc_write_header,
diff --git a/libavutil/Makefile b/libavutil/Makefile
index be2f3e1..bcbc9b3 100644
--- a/libavutil/Makefile
+++ b/libavutil/Makefile
@@ -2,23 +2,6 @@ include $(SUBDIR)../config.mak
 
 NAME = avutil
 
-HEADERS = adler32.h                                                     \
-          avstring.h                                                    \
-          avutil.h                                                      \
-          base64.h                                                      \
-          common.h                                                      \
-          crc.h                                                         \
-          fifo.h                                                        \
-          intfloat_readwrite.h                                          \
-          log.h                                                         \
-          lzo.h                                                         \
-          mathematics.h                                                 \
-          md5.h                                                         \
-          mem.h                                                         \
-          random.h                                                      \
-          rational.h                                                    \
-          sha1.h
-
 OBJS = adler32.o                                                        \
        aes.o                                                            \
        base64.o                                                         \
@@ -41,6 +24,23 @@ OBJS = adler32.o                                                        \
        tree.o                                                           \
        utils.o                                                          \
 
+HEADERS = adler32.h                                                     \
+          avstring.h                                                    \
+          avutil.h                                                      \
+          base64.h                                                      \
+          common.h                                                      \
+          crc.h                                                         \
+          fifo.h                                                        \
+          intfloat_readwrite.h                                          \
+          log.h                                                         \
+          lzo.h                                                         \
+          mathematics.h                                                 \
+          md5.h                                                         \
+          mem.h                                                         \
+          random.h                                                      \
+          rational.h                                                    \
+          sha1.h
+
 TESTS = $(addsuffix -test$(EXESUF), adler32 aes crc des lls md5 pca random sha1 softfloat tree)
 
 include $(SUBDIR)../subdir.mak
diff --git a/libavutil/avutil.h b/libavutil/avutil.h
index 7366718..a21a8a4 100644
--- a/libavutil/avutil.h
+++ b/libavutil/avutil.h
@@ -121,7 +121,6 @@ enum PixelFormat {
     PIX_FMT_YUV440P,   ///< Planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples)
     PIX_FMT_YUVJ440P,  ///< Planar YUV 4:4:0 full scale (jpeg)
     PIX_FMT_YUVA420P,  ///< Planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples)
-    PIX_FMT_VDPAU_H264,///< H264 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
     PIX_FMT_NB,        ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions
 };
 
diff --git a/libavutil/bswap.h b/libavutil/bswap.h
index 100ed1c..c14676e 100644
--- a/libavutil/bswap.h
+++ b/libavutil/bswap.h
@@ -30,7 +30,7 @@
 #include "config.h"
 #include "common.h"
 
-#if defined(ARCH_ARM)
+#if defined(ARCH_ARMV4L)
 #   include "arm/bswap.h"
 #elif defined(ARCH_BFIN)
 #   include "bfin/bswap.h"
diff --git a/libavutil/common.h b/libavutil/common.h
index d66120f..cd43abd 100644
--- a/libavutil/common.h
+++ b/libavutil/common.h
@@ -41,10 +41,8 @@
 #    include <math.h>
 #endif /* HAVE_AV_CONFIG_H */
 
-#define AV_GCC_VERSION_AT_LEAST(x,y) (defined(__GNUC__) && (__GNUC__ > x || __GNUC__ == x && __GNUC_MINOR__ >= y))
-
 #ifndef av_always_inline
-#if AV_GCC_VERSION_AT_LEAST(3,1)
+#if defined(__GNUC__) && (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ > 0)
 #    define av_always_inline __attribute__((always_inline)) inline
 #else
 #    define av_always_inline inline
@@ -52,7 +50,7 @@
 #endif
 
 #ifndef av_noinline
-#if AV_GCC_VERSION_AT_LEAST(3,1)
+#if defined(__GNUC__) && (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ > 0)
 #    define av_noinline __attribute__((noinline))
 #else
 #    define av_noinline
@@ -60,7 +58,7 @@
 #endif
 
 #ifndef av_pure
-#if AV_GCC_VERSION_AT_LEAST(3,1)
+#if defined(__GNUC__) && (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ > 0)
 #    define av_pure __attribute__((pure))
 #else
 #    define av_pure
@@ -68,7 +66,7 @@
 #endif
 
 #ifndef av_const
-#if AV_GCC_VERSION_AT_LEAST(2,6)
+#if defined(__GNUC__) && (__GNUC__ > 2 || __GNUC__ == 2 && __GNUC_MINOR__ > 5)
 #    define av_const __attribute__((const))
 #else
 #    define av_const
@@ -76,7 +74,7 @@
 #endif
 
 #ifndef av_cold
-#if (!defined(__ICC) || __ICC > 1100) && AV_GCC_VERSION_AT_LEAST(4,3)
+#if defined(__GNUC__) && (__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__ > 2)
 #    define av_cold __attribute__((cold))
 #else
 #    define av_cold
@@ -88,7 +86,7 @@
 #endif /* HAVE_AV_CONFIG_H */
 
 #ifndef attribute_deprecated
-#if AV_GCC_VERSION_AT_LEAST(3,1)
+#if defined(__GNUC__) && (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ > 0)
 #    define attribute_deprecated __attribute__((deprecated))
 #else
 #    define attribute_deprecated
@@ -323,7 +321,7 @@ static inline av_pure int ff_get_fourcc(const char *s){
         }\
     }
 
-#if defined(ARCH_X86) || defined(ARCH_PPC) || defined(ARCH_BFIN)
+#if defined(ARCH_X86) || defined(ARCH_POWERPC) || defined(ARCH_BFIN)
 #define AV_READ_TIME read_time
 #if defined(ARCH_X86)
 static inline uint64_t read_time(void)
diff --git a/libavutil/internal.h b/libavutil/internal.h
index 251cc33..5ade1af 100644
--- a/libavutil/internal.h
+++ b/libavutil/internal.h
@@ -33,10 +33,9 @@
 #include <stdint.h>
 #include <stddef.h>
 #include <assert.h>
-#include "common.h"
 
 #ifndef attribute_align_arg
-#if (!defined(__ICC) || __ICC > 1100) && AV_GCC_VERSION_AT_LEAST(4,2)
+#if defined(__GNUC__) && (__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__>1)
 #    define attribute_align_arg __attribute__((force_align_arg_pointer))
 #else
 #    define attribute_align_arg
@@ -44,7 +43,7 @@
 #endif
 
 #ifndef attribute_used
-#if AV_GCC_VERSION_AT_LEAST(3,1)
+#if defined(__GNUC__) && (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ > 0)
 #    define attribute_used __attribute__((used))
 #else
 #    define attribute_used
@@ -149,14 +148,17 @@ static inline av_const int FASTDIV(int a, int b)
                      : "=&r"(r), "=&r"(t) : "r"(a), "r"(b), "r"(ff_inverse));
     return r;
 }
-#elif defined(ARCH_ARM)
-static inline av_const int FASTDIV(int a, int b)
-{
-    int r, t;
-    __asm__ volatile ("umull %1, %0, %2, %3"
-                      : "=&r"(r), "=&r"(t) : "r"(a), "r"(ff_inverse[b]));
-    return r;
-}
+#elif defined(ARCH_ARMV4L)
+#    define FASTDIV(a,b) \
+    ({\
+        int ret,dmy;\
+        __asm__ volatile(\
+            "umull %1, %0, %2, %3"\
+            :"=&r"(ret),"=&r"(dmy)\
+            :"r"(a),"r"(ff_inverse[b])\
+            );\
+        ret;\
+    })
 #elif defined(CONFIG_FASTDIV)
 #    define FASTDIV(a,b)   ((uint32_t)((((uint64_t)a)*ff_inverse[b])>>32))
 #else
diff --git a/libavutil/mem.c b/libavutil/mem.c
index 328bef7..960074c 100644
--- a/libavutil/mem.c
+++ b/libavutil/mem.c
@@ -31,7 +31,6 @@
 #undef free
 #undef realloc
 
-#include <stdlib.h>
 #ifdef HAVE_MALLOC_H
 #include <malloc.h>
 #endif
@@ -42,7 +41,7 @@
 
 void *av_malloc(unsigned int size)
 {
-    void *ptr = NULL;
+    void *ptr;
 #ifdef CONFIG_MEMALIGN_HACK
     long diff;
 #endif
@@ -58,8 +57,6 @@ void *av_malloc(unsigned int size)
     diff= ((-(long)ptr - 1)&15) + 1;
     ptr = (char*)ptr + diff;
     ((char*)ptr)[-1]= diff;
-#elif defined (HAVE_POSIX_MEMALIGN)
-    posix_memalign(&ptr,16,size);
 #elif defined (HAVE_MEMALIGN)
     ptr = memalign(16,size);
     /* Why 64?
diff --git a/libavutil/mem.h b/libavutil/mem.h
index 3ea9858..a02c7e1 100644
--- a/libavutil/mem.h
+++ b/libavutil/mem.h
@@ -26,8 +26,6 @@
 #ifndef AVUTIL_MEM_H
 #define AVUTIL_MEM_H
 
-#include "common.h"
-
 #if defined(__ICC) || defined(__SUNPRO_C)
     #define DECLARE_ALIGNED(n,t,v)      t v __attribute__ ((aligned (n)))
     #define DECLARE_ASM_CONST(n,t,v)    const t __attribute__ ((aligned (n))) v
@@ -44,13 +42,13 @@
     #define DECLARE_ASM_CONST(n,t,v)    static const t v
 #endif
 
-#if AV_GCC_VERSION_AT_LEAST(3,1)
+#if defined(__GNUC__) && (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ > 0)
     #define av_malloc_attrib __attribute__((__malloc__))
 #else
     #define av_malloc_attrib
 #endif
 
-#if (!defined(__ICC) || __ICC > 1100) && AV_GCC_VERSION_AT_LEAST(4,3)
+#if defined(__GNUC__) && (__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__ > 2)
     #define av_alloc_size(n) __attribute__((alloc_size(n)))
 #else
     #define av_alloc_size(n)
diff --git a/libavutil/pca.c b/libavutil/pca.c
index 76966f0..d21814c 100644
--- a/libavutil/pca.c
+++ b/libavutil/pca.c
@@ -168,7 +168,7 @@ int ff_pca(PCA *pca, double *eigenvector, double *eigenvalue){
 #include <stdio.h>
 #include <stdlib.h>
 
-int main(void){
+int main(){
     PCA *pca;
     int i, j, k;
 #define LEN 8
diff --git a/libavutil/tree.c b/libavutil/tree.c
index 008beb6..64653aa 100644
--- a/libavutil/tree.c
+++ b/libavutil/tree.c
@@ -128,11 +128,9 @@ void *av_tree_insert(AVTreeNode **tp, void *key, int (*cmp)(void *key, const voi
 }
 
 void av_tree_destroy(AVTreeNode *t){
-    if(t){
-        av_tree_destroy(t->child[0]);
-        av_tree_destroy(t->child[1]);
-        av_free(t);
-    }
+    av_tree_destroy(t->child[0]);
+    av_tree_destroy(t->child[1]);
+    av_free(t);
 }
 
 #if 0
diff --git a/libpostproc/postprocess.c b/libpostproc/postprocess.c
index b2f5bad..56de4f1 100644
--- a/libpostproc/postprocess.c
+++ b/libpostproc/postprocess.c
@@ -79,6 +79,9 @@ try to unroll inner for(x=0 ... loop to avoid these damn if(x ... checks
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#ifdef HAVE_MALLOC_H
+#include <malloc.h>
+#endif
 //#undef HAVE_MMX2
 //#define HAVE_3DNOW
 //#undef HAVE_MMX
@@ -554,7 +557,7 @@ static av_always_inline void do_a_deblock_C(uint8_t *src, int step, int stride,
 
 //Note: we have C, MMX, MMX2, 3DNOW version there is no 3DNOW+MMX2 one
 //Plain C versions
-#if !(defined (HAVE_MMX) || defined (HAVE_ALTIVEC)) || defined (RUNTIME_CPUDETECT)
+#if !defined (HAVE_MMX) || defined (RUNTIME_CPUDETECT)
 #define COMPILE_C
 #endif
 
@@ -631,7 +634,7 @@ static av_always_inline void do_a_deblock_C(uint8_t *src, int step, int stride,
 // minor note: the HAVE_xyz is messed up after that line so do not use it.
 
 static inline void postProcess(const uint8_t src[], int srcStride, uint8_t dst[], int dstStride, int width, int height,
-        const QP_STORE_T QPs[], int QPStride, int isColor, pp_mode *vm, pp_context *vc)
+        const QP_STORE_T QPs[], int QPStride, int isColor, pp_mode_t *vm, pp_context_t *vc)
 {
     PPContext *c= (PPContext *)vc;
     PPMode *ppMode= (PPMode *)vm;
@@ -727,7 +730,7 @@ const char pp_help[] =
 "\n"
 ;
 
-pp_mode *pp_get_mode_by_name_and_quality(const char *name, int quality)
+pp_mode_t *pp_get_mode_by_name_and_quality(const char *name, int quality)
 {
     char temp[GET_MODE_BUFFER_SIZE];
     char *p= temp;
@@ -902,7 +905,7 @@ pp_mode *pp_get_mode_by_name_and_quality(const char *name, int quality)
     return ppMode;
 }
 
-void pp_free_mode(pp_mode *mode){
+void pp_free_mode(pp_mode_t *mode){
     av_free(mode);
 }
 
@@ -944,7 +947,7 @@ static const char * context_to_name(void * ptr) {
 
 static const AVClass av_codec_context_class = { "Postproc", context_to_name, NULL };
 
-pp_context *pp_get_context(int width, int height, int cpuCaps){
+pp_context_t *pp_get_context(int width, int height, int cpuCaps){
     PPContext *c= av_malloc(sizeof(PPContext));
     int stride= (width+15)&(~15);    //assumed / will realloc if needed
     int qpStride= (width+15)/16 + 2; //assumed / will realloc if needed
@@ -992,7 +995,7 @@ 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 QP_STORE_T *QP_store,  int QPStride,
-                     pp_mode *vm,  void *vc, int pict_type)
+                     pp_mode_t *vm,  void *vc, int pict_type)
 {
     int mbWidth = (width+15)>>4;
     int mbHeight= (height+15)>>4;
diff --git a/libpostproc/postprocess.h b/libpostproc/postprocess.h
index 7e30da7..2a1d6d5 100644
--- a/libpostproc/postprocess.h
+++ b/libpostproc/postprocess.h
@@ -54,12 +54,10 @@ unsigned postproc_version(void);
 
 #include <inttypes.h>
 
-typedef void pp_context;
-typedef void pp_mode;
+typedef void pp_context_t;
+typedef void pp_mode_t;
 
 #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
@@ -69,19 +67,19 @@ 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 QP_STORE_T *QP_store,  int QP_stride,
-                     pp_mode *mode, pp_context *ppContext, int pict_type);
+                     pp_mode_t *mode, pp_context_t *ppContext, int pict_type);
 
 
 /**
- * returns a pp_mode or NULL if an error occurred
+ * returns a pp_mode_t or NULL if an error occurred
  * name is the string after "-pp" on the command line
  * quality is 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_mode_t *pp_get_mode_by_name_and_quality(const char *name, int quality);
+void pp_free_mode(pp_mode_t *mode);
 
-pp_context *pp_get_context(int width, int height, int flags);
-void pp_free_context(pp_context *ppContext);
+pp_context_t *pp_get_context(int width, int height, int flags);
+void pp_free_context(pp_context_t *ppContext);
 
 #define PP_CPU_CAPS_MMX   0x80000000
 #define PP_CPU_CAPS_MMX2  0x20000000
diff --git a/libswscale/Makefile b/libswscale/Makefile
index a959661..84675e0 100644
--- a/libswscale/Makefile
+++ b/libswscale/Makefile
@@ -3,8 +3,6 @@ include $(SUBDIR)../config.mak
 NAME = swscale
 FFLIBS = avutil
 
-HEADERS = swscale.h
-
 OBJS = rgb2rgb.o swscale.o swscale_avoption.o
 
 OBJS-$(ARCH_BFIN)          +=  internal_bfin.o swscale_bfin.o yuv2rgb_bfin.o
@@ -13,6 +11,8 @@ OBJS-$(CONFIG_MLIB)        +=  yuv2rgb_mlib.o
 OBJS-$(HAVE_ALTIVEC)       +=  yuv2rgb_altivec.o
 OBJS-$(HAVE_VIS)           +=  yuv2rgb_vis.o
 
+HEADERS = swscale.h
+
 TESTS = cs_test swscale-example
 
 CLEANFILES = cs_test swscale-example
diff --git a/libswscale/rgb2rgb.c b/libswscale/rgb2rgb.c
index ac452a0..b551412 100644
--- a/libswscale/rgb2rgb.c
+++ b/libswscale/rgb2rgb.c
@@ -47,10 +47,12 @@ void (*rgb15to32)(const uint8_t *src, uint8_t *dst, long src_size);
 void (*rgb16to15)(const uint8_t *src, uint8_t *dst, long src_size);
 void (*rgb16tobgr24)(const uint8_t *src, uint8_t *dst, long src_size);
 void (*rgb16to32)(const uint8_t *src, uint8_t *dst, long src_size);
+//void (*rgb24tobgr32)(const uint8_t *src, uint8_t *dst, long src_size);
 void (*rgb24tobgr24)(const uint8_t *src, uint8_t *dst, long src_size);
 void (*rgb24to16)(const uint8_t *src, uint8_t *dst, long src_size);
 void (*rgb24to15)(const uint8_t *src, uint8_t *dst, long src_size);
 void (*rgb32tobgr32)(const uint8_t *src, uint8_t *dst, long src_size);
+//void (*rgb32tobgr24)(const uint8_t *src, uint8_t *dst, long src_size);
 void (*rgb32tobgr16)(const uint8_t *src, uint8_t *dst, long src_size);
 void (*rgb32tobgr15)(const uint8_t *src, uint8_t *dst, long src_size);
 
@@ -122,6 +124,21 @@ DECLARE_ASM_CONST(8, uint64_t, blue_16mask)  = 0x0000001f0000001fULL;
 DECLARE_ASM_CONST(8, uint64_t, red_15mask)   = 0x00007c0000007c00ULL;
 DECLARE_ASM_CONST(8, uint64_t, green_15mask) = 0x000003e0000003e0ULL;
 DECLARE_ASM_CONST(8, uint64_t, blue_15mask)  = 0x0000001f0000001fULL;
+
+#if 0
+static volatile uint64_t __attribute__((aligned(8))) b5Dither;
+static volatile uint64_t __attribute__((aligned(8))) g5Dither;
+static volatile uint64_t __attribute__((aligned(8))) g6Dither;
+static volatile uint64_t __attribute__((aligned(8))) r5Dither;
+
+static uint64_t __attribute__((aligned(8))) dither4[2]={
+    0x0103010301030103LL,
+    0x0200020002000200LL,};
+
+static uint64_t __attribute__((aligned(8))) dither8[2]={
+    0x0602060206020602LL,
+    0x0004000400040004LL,};
+#endif
 #endif /* defined(ARCH_X86) */
 
 #define RGB2YUV_SHIFT 8
diff --git a/libswscale/rgb2rgb.h b/libswscale/rgb2rgb.h
index df912c8..5cc6a2d 100644
--- a/libswscale/rgb2rgb.h
+++ b/libswscale/rgb2rgb.h
@@ -48,25 +48,25 @@ extern void (*rgb32tobgr32)(const uint8_t *src, uint8_t *dst, long src_size);
 extern void (*rgb32tobgr16)(const uint8_t *src, uint8_t *dst, long src_size);
 extern void (*rgb32tobgr15)(const uint8_t *src, uint8_t *dst, long src_size);
 
-void rgb24to32   (const uint8_t *src, uint8_t *dst, long src_size);
-void rgb32to24   (const uint8_t *src, uint8_t *dst, long src_size);
-void rgb16tobgr32(const uint8_t *src, uint8_t *dst, long src_size);
-void rgb16to24   (const uint8_t *src, uint8_t *dst, long src_size);
-void rgb16tobgr16(const uint8_t *src, uint8_t *dst, long src_size);
-void rgb16tobgr15(const uint8_t *src, uint8_t *dst, long src_size);
-void rgb15tobgr32(const uint8_t *src, uint8_t *dst, long src_size);
-void rgb15to24   (const uint8_t *src, uint8_t *dst, long src_size);
-void rgb15tobgr16(const uint8_t *src, uint8_t *dst, long src_size);
-void rgb15tobgr15(const uint8_t *src, uint8_t *dst, long src_size);
-void bgr8torgb8  (const uint8_t *src, uint8_t *dst, long src_size);
-
-
-void palette8topacked32(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette);
-void palette8topacked24(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette);
-void palette8torgb16(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette);
-void palette8tobgr16(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette);
-void palette8torgb15(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette);
-void palette8tobgr15(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette);
+extern void rgb24to32   (const uint8_t *src, uint8_t *dst, long src_size);
+extern void rgb32to24   (const uint8_t *src, uint8_t *dst, long src_size);
+extern void rgb16tobgr32(const uint8_t *src, uint8_t *dst, long src_size);
+extern void rgb16to24   (const uint8_t *src, uint8_t *dst, long src_size);
+extern void rgb16tobgr16(const uint8_t *src, uint8_t *dst, long src_size);
+extern void rgb16tobgr15(const uint8_t *src, uint8_t *dst, long src_size);
+extern void rgb15tobgr32(const uint8_t *src, uint8_t *dst, long src_size);
+extern void rgb15to24   (const uint8_t *src, uint8_t *dst, long src_size);
+extern void rgb15tobgr16(const uint8_t *src, uint8_t *dst, long src_size);
+extern void rgb15tobgr15(const uint8_t *src, uint8_t *dst, long src_size);
+extern void bgr8torgb8  (const uint8_t *src, uint8_t *dst, long src_size);
+
+
+extern void palette8topacked32(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette);
+extern void palette8topacked24(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette);
+extern void palette8torgb16(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette);
+extern void palette8tobgr16(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette);
+extern void palette8torgb15(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette);
+extern void palette8tobgr15(const uint8_t *src, uint8_t *dst, long num_pixels, const uint8_t *palette);
 
 /**
  * Height should be a multiple of 2 and width should be a multiple of 16.
diff --git a/libswscale/rgb2rgb_template.c b/libswscale/rgb2rgb_template.c
index ce76c5e..ab82035 100644
--- a/libswscale/rgb2rgb_template.c
+++ b/libswscale/rgb2rgb_template.c
@@ -2016,14 +2016,14 @@ static inline void RENAME(uyvytoyv12)(const uint8_t *src, uint8_t *ydst, uint8_t
     {
 #ifdef HAVE_MMX
         __asm__ volatile(
-        "xor                 %%"REG_a", %%"REG_a"   \n\t"
+        "xorl                %%eax, %%eax   \n\t"
         "pcmpeqw             %%mm7, %%mm7   \n\t"
         "psrlw                  $8, %%mm7   \n\t" // FF,00,FF,00...
         ASMALIGN(4)
         "1:                                 \n\t"
-        PREFETCH" 64(%0, %%"REG_a", 4)          \n\t"
-        "movq       (%0, %%"REG_a", 4), %%mm0   \n\t" // UYVY UYVY(0)
-        "movq      8(%0, %%"REG_a", 4), %%mm1   \n\t" // UYVY UYVY(4)
+        PREFETCH" 64(%0, %%eax, 4)          \n\t"
+        "movq       (%0, %%eax, 4), %%mm0   \n\t" // UYVY UYVY(0)
+        "movq      8(%0, %%eax, 4), %%mm1   \n\t" // UYVY UYVY(4)
         "movq                %%mm0, %%mm2   \n\t" // UYVY UYVY(0)
         "movq                %%mm1, %%mm3   \n\t" // UYVY UYVY(4)
         "pand                %%mm7, %%mm0   \n\t" // U0V0 U0V0(0)
@@ -2033,10 +2033,10 @@ static inline void RENAME(uyvytoyv12)(const uint8_t *src, uint8_t *ydst, uint8_t
         "packuswb            %%mm1, %%mm0   \n\t" // UVUV UVUV(0)
         "packuswb            %%mm3, %%mm2   \n\t" // YYYY YYYY(0)
 
-        MOVNTQ"              %%mm2,  (%1, %%"REG_a", 2) \n\t"
+        MOVNTQ"              %%mm2,  (%1, %%eax, 2) \n\t"
 
-        "movq     16(%0, %%"REG_a", 4), %%mm1   \n\t" // UYVY UYVY(8)
-        "movq     24(%0, %%"REG_a", 4), %%mm2   \n\t" // UYVY UYVY(12)
+        "movq     16(%0, %%eax, 4), %%mm1   \n\t" // UYVY UYVY(8)
+        "movq     24(%0, %%eax, 4), %%mm2   \n\t" // UYVY UYVY(12)
         "movq                %%mm1, %%mm3   \n\t" // UYVY UYVY(8)
         "movq                %%mm2, %%mm4   \n\t" // UYVY UYVY(12)
         "pand                %%mm7, %%mm1   \n\t" // U0V0 U0V0(8)
@@ -2046,7 +2046,7 @@ static inline void RENAME(uyvytoyv12)(const uint8_t *src, uint8_t *ydst, uint8_t
         "packuswb            %%mm2, %%mm1   \n\t" // UVUV UVUV(8)
         "packuswb            %%mm4, %%mm3   \n\t" // YYYY YYYY(8)
 
-        MOVNTQ"              %%mm3, 8(%1, %%"REG_a", 2) \n\t"
+        MOVNTQ"              %%mm3, 8(%1, %%eax, 2) \n\t"
 
         "movq                %%mm0, %%mm2   \n\t" // UVUV UVUV(0)
         "movq                %%mm1, %%mm3   \n\t" // UVUV UVUV(8)
@@ -2057,28 +2057,28 @@ static inline void RENAME(uyvytoyv12)(const uint8_t *src, uint8_t *ydst, uint8_t
         "packuswb            %%mm1, %%mm0   \n\t" // VVVV VVVV(0)
         "packuswb            %%mm3, %%mm2   \n\t" // UUUU UUUU(0)
 
-        MOVNTQ"              %%mm0, (%3, %%"REG_a") \n\t"
-        MOVNTQ"              %%mm2, (%2, %%"REG_a") \n\t"
+        MOVNTQ"              %%mm0, (%3, %%eax) \n\t"
+        MOVNTQ"              %%mm2, (%2, %%eax) \n\t"
 
-        "add                    $8, %%"REG_a"   \n\t"
-        "cmp                    %4, %%"REG_a"   \n\t"
+        "addl                   $8, %%eax   \n\t"
+        "cmpl                   %4, %%eax   \n\t"
         " jb                    1b          \n\t"
         ::"r"(src), "r"(ydst), "r"(udst), "r"(vdst), "g" (chromWidth)
-        : "memory", "%"REG_a
+        : "memory", "%eax"
         );
 
         ydst += lumStride;
         src  += srcStride;
 
         __asm__ volatile(
-        "xor                 %%"REG_a", %%"REG_a"   \n\t"
+        "xorl                %%eax, %%eax   \n\t"
         ASMALIGN(4)
         "1:                                 \n\t"
-        PREFETCH" 64(%0, %%"REG_a", 4)          \n\t"
-        "movq       (%0, %%"REG_a", 4), %%mm0   \n\t" // YUYV YUYV(0)
-        "movq      8(%0, %%"REG_a", 4), %%mm1   \n\t" // YUYV YUYV(4)
-        "movq     16(%0, %%"REG_a", 4), %%mm2   \n\t" // YUYV YUYV(8)
-        "movq     24(%0, %%"REG_a", 4), %%mm3   \n\t" // YUYV YUYV(12)
+        PREFETCH" 64(%0, %%eax, 4)          \n\t"
+        "movq       (%0, %%eax, 4), %%mm0   \n\t" // YUYV YUYV(0)
+        "movq      8(%0, %%eax, 4), %%mm1   \n\t" // YUYV YUYV(4)
+        "movq     16(%0, %%eax, 4), %%mm2   \n\t" // YUYV YUYV(8)
+        "movq     24(%0, %%eax, 4), %%mm3   \n\t" // YUYV YUYV(12)
         "psrlw                  $8, %%mm0   \n\t" // Y0Y0 Y0Y0(0)
         "psrlw                  $8, %%mm1   \n\t" // Y0Y0 Y0Y0(4)
         "psrlw                  $8, %%mm2   \n\t" // Y0Y0 Y0Y0(8)
@@ -2086,15 +2086,15 @@ static inline void RENAME(uyvytoyv12)(const uint8_t *src, uint8_t *ydst, uint8_t
         "packuswb            %%mm1, %%mm0   \n\t" // YYYY YYYY(0)
         "packuswb            %%mm3, %%mm2   \n\t" // YYYY YYYY(8)
 
-        MOVNTQ"              %%mm0,  (%1, %%"REG_a", 2) \n\t"
-        MOVNTQ"              %%mm2, 8(%1, %%"REG_a", 2) \n\t"
+        MOVNTQ"              %%mm0,  (%1, %%eax, 2) \n\t"
+        MOVNTQ"              %%mm2, 8(%1, %%eax, 2) \n\t"
 
-        "add                    $8, %%"REG_a"   \n\t"
-        "cmp                    %4, %%"REG_a"   \n\t"
+        "addl                   $8, %%eax   \n\t"
+        "cmpl                   %4, %%eax   \n\t"
         " jb                    1b          \n\t"
 
         ::"r"(src), "r"(ydst), "r"(udst), "r"(vdst), "g" (chromWidth)
-        : "memory", "%"REG_a
+        : "memory", "%eax"
         );
 #else
         long i;
diff --git a/libswscale/swscale.c b/libswscale/swscale.c
index cfa3580..577d093 100644
--- a/libswscale/swscale.c
+++ b/libswscale/swscale.c
@@ -452,8 +452,6 @@ const char *sws_format_name(enum PixelFormat format)
             return "nv21";
         case PIX_FMT_YUV440P:
             return "yuv440p";
-        case PIX_FMT_VDPAU_H264:
-            return "vdpau_h264";
         default:
             return "Unknown format";
     }
@@ -951,11 +949,11 @@ static inline void yuv2rgbXinC_full(SwsContext *c, int16_t *lumFilter, int16_t *
 #define COMPILE_C
 #endif
 
-#ifdef ARCH_PPC
+#ifdef ARCH_POWERPC
 #if (defined (HAVE_ALTIVEC) || defined (RUNTIME_CPUDETECT)) && defined (CONFIG_GPL)
 #define COMPILE_ALTIVEC
 #endif //HAVE_ALTIVEC
-#endif //ARCH_PPC
+#endif //ARCH_POWERPC
 
 #if defined(ARCH_X86)
 
@@ -1630,7 +1628,7 @@ static SwsFunc getSwsFunc(int flags){
         return swScale_C;
 
 #else
-#ifdef ARCH_PPC
+#ifdef ARCH_POWERPC
     if (flags & SWS_CPU_CAPS_ALTIVEC)
         return swScale_altivec;
     else
diff --git a/libswscale/swscale_bfin.c b/libswscale/swscale_bfin.c
index ed7d957..3e63bbd 100644
--- a/libswscale/swscale_bfin.c
+++ b/libswscale/swscale_bfin.c
@@ -26,6 +26,9 @@
 #include <inttypes.h>
 #include <assert.h>
 #include "config.h"
+#ifdef HAVE_MALLOC_H
+#include <malloc.h>
+#endif
 #include <unistd.h>
 #include "rgb2rgb.h"
 #include "swscale.h"
@@ -37,13 +40,13 @@
 #define L1CODE
 #endif
 
-int ff_bfin_uyvytoyv12 (const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst,
-                        long width, long height,
-                        long lumStride, long chromStride, long srcStride) L1CODE;
+extern int ff_bfin_uyvytoyv12 (const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst,
+                               long width, long height,
+                               long lumStride, long chromStride, long srcStride) L1CODE;
 
-int ff_bfin_yuyvtoyv12 (const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst,
-                        long width, long height,
-                        long lumStride, long chromStride, long srcStride) L1CODE;
+extern int ff_bfin_yuyvtoyv12 (const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst,
+                               long width, long height,
+                               long lumStride, long chromStride, long srcStride) L1CODE;
 
 static int uyvytoyv12_unscaled (SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
                                 int srcSliceH, uint8_t* dst[], int dstStride[])
diff --git a/libswscale/swscale_template.c b/libswscale/swscale_template.c
index 4c8bc6e..5754c10 100644
--- a/libswscale/swscale_template.c
+++ b/libswscale/swscale_template.c
@@ -1826,12 +1826,11 @@ static inline void RENAME(rgb24ToY)(uint8_t *dst, uint8_t *src, long width, uint
 
 static inline void RENAME(rgb24ToUV)(uint8_t *dstU, uint8_t *dstV, uint8_t *src1, uint8_t *src2, long width, uint32_t *unused)
 {
-#ifdef HAVE_MMX
+    int i;
     assert(src1==src2);
+#ifdef HAVE_MMX
     RENAME(bgr24ToUV_mmx)(dstU, dstV, src1, width, PIX_FMT_RGB24);
 #else
-    int i;
-    assert(src1==src2);
     for (i=0; i<width; i++)
     {
         int r= src1[3*i + 0];
diff --git a/libswscale/yuv2rgb_altivec.c b/libswscale/yuv2rgb_altivec.c
index baffbc8..0223fdd 100644
--- a/libswscale/yuv2rgb_altivec.c
+++ b/libswscale/yuv2rgb_altivec.c
@@ -91,6 +91,9 @@ adjustment.
 #include <inttypes.h>
 #include <assert.h>
 #include "config.h"
+#ifdef HAVE_MALLOC_H
+#include <malloc.h>
+#endif
 #include "rgb2rgb.h"
 #include "swscale.h"
 #include "swscale_internal.h"
diff --git a/libswscale/yuv2rgb_bfin.c b/libswscale/yuv2rgb_bfin.c
index 58cc5b6..1500a96 100644
--- a/libswscale/yuv2rgb_bfin.c
+++ b/libswscale/yuv2rgb_bfin.c
@@ -27,6 +27,9 @@
 #include <inttypes.h>
 #include <assert.h>
 #include "config.h"
+#ifdef HAVE_MALLOC_H
+#include <malloc.h>
+#endif
 #include <unistd.h>
 #include "rgb2rgb.h"
 #include "swscale.h"
@@ -38,17 +41,17 @@
 #define L1CODE
 #endif
 
-void ff_bfin_yuv2rgb555_line (uint8_t *Y, uint8_t *U, uint8_t *V, uint8_t *out,
-                              int w, uint32_t *coeffs) L1CODE;
+extern void ff_bfin_yuv2rgb555_line (uint8_t *Y, uint8_t *U, uint8_t *V, uint8_t *out,
+                                     int w, uint32_t *coeffs) L1CODE;
 
-void ff_bfin_yuv2rgb565_line (uint8_t *Y, uint8_t *U, uint8_t *V, uint8_t *out,
-                              int w, uint32_t *coeffs) L1CODE;
+extern void ff_bfin_yuv2rgb565_line (uint8_t *Y, uint8_t *U, uint8_t *V, uint8_t *out,
+                                     int w, uint32_t *coeffs) L1CODE;
 
-void ff_bfin_yuv2rgb24_line (uint8_t *Y, uint8_t *U, uint8_t *V, uint8_t *out,
-                             int w, uint32_t *coeffs) L1CODE;
+extern void ff_bfin_yuv2rgb24_line (uint8_t *Y, uint8_t *U, uint8_t *V, uint8_t *out,
+                                    int w, uint32_t *coeffs) L1CODE;
 
-typedef void (* ltransform)(uint8_t *Y, uint8_t *U, uint8_t *V, uint8_t *out,
-                            int w, uint32_t *coeffs);
+typedef void (* ltransform_t)(uint8_t *Y, uint8_t *U, uint8_t *V, uint8_t *out,
+                              int w, uint32_t *coeffs);
 
 
 static void bfin_prepare_coefficients (SwsContext *c, int rgb, int masks)
@@ -92,7 +95,7 @@ static int core_yuv420_rgb (SwsContext *c,
                             uint8_t **in, int *instrides,
                             int srcSliceY, int srcSliceH,
                             uint8_t **oplanes, int *outstrides,
-                            ltransform lcscf, int rgb, int masks)
+                            ltransform_t lcscf, int rgb, int masks)
 {
     uint8_t *py,*pu,*pv,*op;
     int w  = instrides[0];
diff --git a/subdir.mak b/subdir.mak
index df5bb8a..7c38b77 100644
--- a/subdir.mak
+++ b/subdir.mak
@@ -29,7 +29,7 @@ $(SUBDIR)$(SLIBNAME): $(SUBDIR)$(SLIBNAME_WITH_MAJOR)
 
 $(SUBDIR)$(SLIBNAME_WITH_MAJOR): $(OBJS)
 	$(SLIB_CREATE_DEF_CMD)
-	$(CC) $(SHFLAGS) $(FFLDFLAGS) -o $$@ $$(filter-out $(DEP_LIBS),$$^) $(FFEXTRALIBS) $(EXTRAOBJS)
+	$(CC) $(SHFLAGS) $(FFLDFLAGS) -o $$@ $$^ $(FFEXTRALIBS) $(EXTRAOBJS)
 	$(SLIB_EXTRA_CMD)
 
 ifdef SUBDIR
diff --git a/tests/regression.sh b/tests/regression.sh
index 529a703..24b42da 100755
--- a/tests/regression.sh
+++ b/tests/regression.sh
@@ -7,11 +7,7 @@
 
 set -e
 
-target_exec=$5
-target_path=$6
-
 datadir="./tests/data"
-target_datadir="${target_path}/${datadir}"
 
 test="${1#regtest-}"
 this="$test.$2"
@@ -21,24 +17,21 @@ outfile="$datadir/$4-"
 eval do_$test=y
 
 # various files
-ffmpeg="$target_exec ${target_path}/ffmpeg_g"
+ffmpeg="./ffmpeg_g"
 tiny_psnr="tests/tiny_psnr"
 benchfile="$datadir/$this.bench"
 bench="$datadir/$this.bench.tmp"
 bench2="$datadir/$this.bench2.tmp"
-raw_src="${target_path}/$3/%02d.pgm"
+raw_src="$3/%02d.pgm"
 raw_dst="$datadir/$this.out.yuv"
 raw_ref="$datadir/$2.ref.yuv"
-pcm_src="${target_path}/tests/asynth1.sw"
+pcm_src="tests/asynth1.sw"
 pcm_dst="$datadir/$this.out.wav"
 pcm_ref="$datadir/$2.ref.wav"
 crcfile="$datadir/$this.crc"
-target_crcfile="$target_datadir/$this.crc"
 
 if [ X"`echo | md5sum 2> /dev/null`" != X ]; then
     do_md5sum() { md5sum -b $1; }
-elif [ X"`echo | md5 2> /dev/null`" != X ]; then
-    do_md5sum() { md5 -r $1 | sed 's# \**\./# *./#'; }
 elif [ -x /sbin/md5 ]; then
     do_md5sum() { /sbin/md5 -r $1 | sed 's# \**\./# *./#'; }
 else
@@ -54,7 +47,6 @@ do_ffmpeg()
 {
     f="$1"
     shift
-    set -- $* ${target_path}/$f
     echo $ffmpeg $FFMPEG_OPTS $*
     $ffmpeg $FFMPEG_OPTS -benchmark $* > $bench 2> /tmp/ffmpeg$$
     egrep -v "^(Stream|Press|Input|Output|frame|  Stream|  Duration|video:)" /tmp/ffmpeg$$ || true
@@ -75,7 +67,6 @@ do_ffmpeg_nomd5()
 {
     f="$1"
     shift
-    set -- $* ${target_path}/$f
     echo $ffmpeg $FFMPEG_OPTS $*
     $ffmpeg $FFMPEG_OPTS -benchmark $* > $bench 2> /tmp/ffmpeg$$
     egrep -v "^(Stream|Press|Input|Output|frame|  Stream|  Duration|video:)" /tmp/ffmpeg$$ || true
@@ -95,8 +86,8 @@ do_ffmpeg_crc()
 {
     f="$1"
     shift
-    echo $ffmpeg $FFMPEG_OPTS $* -f crc "$target_crcfile"
-    $ffmpeg $FFMPEG_OPTS $* -f crc "$target_crcfile" > /tmp/ffmpeg$$ 2>&1
+    echo $ffmpeg $FFMPEG_OPTS $* -f crc "$crcfile"
+    $ffmpeg $FFMPEG_OPTS $* -f crc "$crcfile" > /tmp/ffmpeg$$ 2>&1
     egrep -v "^(Stream|Press|Input|Output|frame|  Stream|  Duration|video:|ffmpeg version|  configuration|  built)" /tmp/ffmpeg$$ || true
     rm -f /tmp/ffmpeg$$
     echo "$f `cat $crcfile`" >> $logfile
@@ -117,55 +108,55 @@ do_ffmpeg_nocheck()
 
 do_video_decoding()
 {
-    do_ffmpeg $raw_dst $1 -i $target_path/$file -f rawvideo $2
+    do_ffmpeg $raw_dst $1 -i $file -f rawvideo $2 $raw_dst
     rm -f $raw_dst
 }
 
 do_video_encoding()
 {
     file=${outfile}$1
-    do_ffmpeg $file $2 -f image2 -vcodec pgmyuv -i $raw_src $3
+    do_ffmpeg $file $2 -f image2 -vcodec pgmyuv -i $raw_src $3 $file
 }
 
 do_audio_encoding()
 {
     file=${outfile}$1
-    do_ffmpeg $file -ab 128k -ac 2 -f s16le -i $pcm_src $3
+    do_ffmpeg $file -ab 128k -ac 2 -f s16le -i $pcm_src $3 $file
 }
 
 do_audio_decoding()
 {
-    do_ffmpeg $pcm_dst -i $target_path/$file -sample_fmt s16 -f wav
+    do_ffmpeg $pcm_dst -i $file -sample_fmt s16 -f wav $pcm_dst
 }
 
 do_libav()
 {
     file=${outfile}libav.$1
-    do_ffmpeg $file -t 1 -qscale 10 -f image2 -vcodec pgmyuv -i $raw_src -f s16le -i $pcm_src $2
-    do_ffmpeg_crc $file -i $target_path/$file $3
+    do_ffmpeg $file -t 1 -qscale 10 -f image2 -vcodec pgmyuv -i $raw_src -f s16le -i $pcm_src $2 $file
+    do_ffmpeg_crc $file -i $file $3
 }
 
 do_streamed_images()
 {
     file=${outfile}${1}pipe.$1
-    do_ffmpeg $file -t 1 -qscale 10 -f image2 -vcodec pgmyuv -i $raw_src -f image2pipe
-    do_ffmpeg_crc $file -f image2pipe -i $target_path/$file
+    do_ffmpeg $file -t 1 -qscale 10 -f image2 -vcodec pgmyuv -i $raw_src -f image2pipe $file
+    do_ffmpeg_crc $file -f image2pipe -i $file
 }
 
 do_image_formats()
 {
     file=${outfile}libav%02d.$1
-    $ffmpeg -t 0.5 -y -qscale 10 -f image2 -vcodec pgmyuv -i $raw_src $2 $3 -flags +bitexact -sws_flags +accurate_rnd+bitexact $target_path/$file
+    $ffmpeg -t 0.5 -y -qscale 10 -f image2 -vcodec pgmyuv -i $raw_src $2 $3 -flags +bitexact -sws_flags +accurate_rnd+bitexact $file
     do_md5sum ${outfile}libav02.$1 >> $logfile
-    do_ffmpeg_crc $file $3 -i $target_path/$file
+    do_ffmpeg_crc $file $3 -i $file
     wc -c ${outfile}libav02.$1 >> $logfile
 }
 
 do_audio_only()
 {
     file=${outfile}libav.$1
-    do_ffmpeg $file -t 1 -qscale 10 -f s16le -i $pcm_src
-    do_ffmpeg_crc $file -i $target_path/$file
+    do_ffmpeg $file -t 1 -qscale 10 -f s16le -i $pcm_src $file
+    do_ffmpeg_crc $file -i $file
 }
 
 rm -f "$logfile"
@@ -173,8 +164,8 @@ rm -f "$benchfile"
 
 # generate reference for quality check
 if [ -n "$do_ref" ]; then
-do_ffmpeg_nocheck $raw_ref -f image2 -vcodec pgmyuv -i $raw_src -an -f rawvideo $target_path/$raw_ref
-do_ffmpeg_nocheck $pcm_ref -ab 128k -ac 2 -ar 44100 -f s16le -i $pcm_src -f wav $target_path/$pcm_ref
+do_ffmpeg_nocheck $raw_ref -f image2 -vcodec pgmyuv -i $raw_src -an -f rawvideo $raw_ref
+do_ffmpeg_nocheck $pcm_ref -ab 128k -ac 2 -ar 44100 -f s16le -i $pcm_src -f wav $pcm_ref
 fi
 
 if [ -n "$do_mpeg" ] ; then
@@ -216,7 +207,7 @@ do_video_decoding
 
 # mpeg2 encoding interlaced
 file=${outfile}mpeg2reuse.mpg
-do_ffmpeg $file -sameq -me_threshold 256 -mb_threshold 1024 -i ${target_path}/${outfile}mpeg2thread.mpg -vcodec mpeg2video -f mpeg1video -bf 2 -flags +ildct+ilme -threads 4
+do_ffmpeg $file -sameq -me_threshold 256 -mb_threshold 1024 -i ${outfile}mpeg2thread.mpg -vcodec mpeg2video -f mpeg1video -bf 2 -flags +ildct+ilme -threads 4 $file
 do_video_decoding
 fi
 
@@ -433,11 +424,11 @@ fi
 if [ -n "$do_wma" ] ; then
 # wmav1
 do_audio_encoding wmav1.asf "-ar 44100" "-acodec wmav1"
-do_ffmpeg_nomd5 $pcm_dst -i $target_path/$file -f wav
+do_ffmpeg_nomd5 $pcm_dst -i $file -f wav $pcm_dst
 $tiny_psnr $pcm_dst $pcm_ref 2 8192 >> $logfile
 # wmav2
 do_audio_encoding wmav2.asf "-ar 44100" "-acodec wmav2"
-do_ffmpeg_nomd5 $pcm_dst -i $target_path/$file -f wav
+do_ffmpeg_nomd5 $pcm_dst -i $file -f wav $pcm_dst
 $tiny_psnr $pcm_dst $pcm_ref 2 8192 >> $logfile
 fi
 
@@ -490,9 +481,9 @@ fi
 
 if [ -n "$do_rm" ] ; then
 file=${outfile}libav.rm
-do_ffmpeg $file -t 1 -qscale 10 -f image2 -vcodec pgmyuv -i $raw_src -f s16le -i $pcm_src
+do_ffmpeg $file -t 1 -qscale 10 -f image2 -vcodec pgmyuv -i $raw_src -f s16le -i $pcm_src $file
 # broken
-#do_ffmpeg_crc $file -i $target_path/$file
+#do_ffmpeg_crc $file -i $file
 fi
 
 if [ -n "$do_mpg" ] ; then
@@ -539,8 +530,8 @@ fi
 # streamed images
 # mjpeg
 #file=${outfile}libav.mjpeg
-#do_ffmpeg $file -t 1 -qscale 10 -f image2 -vcodec pgmyuv -i $raw_src
-#do_ffmpeg_crc $file -i $target_path/$file
+#do_ffmpeg $file -t 1 -qscale 10 -f image2 -vcodec pgmyuv -i $raw_src $file
+#do_ffmpeg_crc $file -i $file
 
 if [ -n "$do_pbmpipe" ] ; then
 do_streamed_images pbm
@@ -556,14 +547,14 @@ fi
 
 if [ -n "$do_gif" ] ; then
 file=${outfile}libav.gif
-do_ffmpeg $file -t 1 -qscale 10 -f image2 -vcodec pgmyuv -i $raw_src -pix_fmt rgb24
-#do_ffmpeg_crc $file -i $target_path/$file
+do_ffmpeg $file -t 1 -qscale 10 -f image2 -vcodec pgmyuv -i $raw_src -pix_fmt rgb24 $file
+#do_ffmpeg_crc $file -i $file
 fi
 
 if [ -n "$do_yuv4mpeg" ] ; then
 file=${outfile}libav.y4m
-do_ffmpeg $file -t 1 -qscale 10 -f image2 -vcodec pgmyuv -i $raw_src
-#do_ffmpeg_crc $file -i $target_path/$file
+do_ffmpeg $file -t 1 -qscale 10 -f image2 -vcodec pgmyuv -i $raw_src $file
+#do_ffmpeg_crc $file -i $file
 fi
 
 # image formats
@@ -639,9 +630,9 @@ conversions="yuv420p yuv422p yuv444p yuyv422 yuv410p yuv411p yuvj420p \
 for pix_fmt in $conversions ; do
     file=${outfile}libav-${pix_fmt}.yuv
     do_ffmpeg_nocheck $file -r 1 -t 1 -f image2 -vcodec pgmyuv -i $raw_src \
-                            -f rawvideo -s 352x288 -pix_fmt $pix_fmt $target_path/$raw_dst
-    do_ffmpeg $file -f rawvideo -s 352x288 -pix_fmt $pix_fmt -i $target_path/$raw_dst \
-                    -f rawvideo -s 352x288 -pix_fmt yuv444p
+                            -f rawvideo -s 352x288 -pix_fmt $pix_fmt $raw_dst
+    do_ffmpeg $file -f rawvideo -s 352x288 -pix_fmt $pix_fmt -i $raw_dst \
+                    -f rawvideo -s 352x288 -pix_fmt yuv444p $file
 done
 fi
 
diff --git a/tests/seek.regression.ref b/tests/seek.regression.ref
index 90181f8..a38f593 100644
--- a/tests/seek.regression.ref
+++ b/tests/seek.regression.ref
@@ -1532,99 +1532,99 @@ ret: 0 st: 0 dts:0.880000 pts:-102481911520608.625000 pos:79182 size:10791 flags
 ret:-1 st:-1 ts:-0.645825 flags:1
 ----------------
 tests/data/a-mpeg4-Q.avi
-ret: 0 st: 0 dts:0.000000 pts:-368934881474191040.000000 pos:5660 size:11942 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:5660 size:11942 flags:1
 ret: 0 st:-1 ts:-1.000000 flags:0
-ret: 0 st: 0 dts:0.000000 pts:-368934881474191040.000000 pos:5660 size:11942 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:5660 size:11942 flags:1
 ret: 0 st:-1 ts:1.894167 flags:1
-ret: 0 st: 0 dts:1.840000 pts:-368934881474191040.000000 pos:142978 size:15562 flags:1
+ret: 0 st: 0 dts:1.840000 pts:1.840000 pos:142978 size:15562 flags:1
 ret: 0 st: 0 ts:0.800000 flags:0
-ret: 0 st: 0 dts:0.880000 pts:-368934881474191040.000000 pos:64442 size:13382 flags:1
+ret: 0 st: 0 dts:0.880000 pts:0.880000 pos:64442 size:13382 flags:1
 ret:-1 st: 0 ts:-0.320000 flags:1
 ret:-1 st:-1 ts:2.576668 flags:0
 ret: 0 st:-1 ts:1.470835 flags:1
-ret: 0 st: 0 dts:1.360000 pts:-368934881474191040.000000 pos:101236 size:15057 flags:1
+ret: 0 st: 0 dts:1.360000 pts:1.360000 pos:101236 size:15057 flags:1
 ret: 0 st: 0 ts:0.360000 flags:0
-ret: 0 st: 0 dts:0.400000 pts:-368934881474191040.000000 pos:32850 size:11813 flags:1
+ret: 0 st: 0 dts:0.400000 pts:0.400000 pos:32850 size:11813 flags:1
 ret:-1 st: 0 ts:-0.760000 flags:1
 ret:-1 st:-1 ts:2.153336 flags:0
 ret: 0 st:-1 ts:1.047503 flags:1
-ret: 0 st: 0 dts:0.880000 pts:-368934881474191040.000000 pos:64442 size:13382 flags:1
+ret: 0 st: 0 dts:0.880000 pts:0.880000 pos:64442 size:13382 flags:1
 ret: 0 st: 0 ts:-0.040000 flags:0
-ret: 0 st: 0 dts:0.000000 pts:-368934881474191040.000000 pos:5660 size:11942 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:5660 size:11942 flags:1
 ret: 0 st: 0 ts:2.840000 flags:1
-ret: 0 st: 0 dts:1.840000 pts:-368934881474191040.000000 pos:142978 size:15562 flags:1
+ret: 0 st: 0 dts:1.840000 pts:1.840000 pos:142978 size:15562 flags:1
 ret: 0 st:-1 ts:1.730004 flags:0
-ret: 0 st: 0 dts:1.840000 pts:-368934881474191040.000000 pos:142978 size:15562 flags:1
+ret: 0 st: 0 dts:1.840000 pts:1.840000 pos:142978 size:15562 flags:1
 ret: 0 st:-1 ts:0.624171 flags:1
-ret: 0 st: 0 dts:0.400000 pts:-368934881474191040.000000 pos:32850 size:11813 flags:1
+ret: 0 st: 0 dts:0.400000 pts:0.400000 pos:32850 size:11813 flags:1
 ret: 0 st: 0 ts:-0.480000 flags:0
-ret: 0 st: 0 dts:0.000000 pts:-368934881474191040.000000 pos:5660 size:11942 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:5660 size:11942 flags:1
 ret: 0 st: 0 ts:2.400000 flags:1
-ret: 0 st: 0 dts:1.840000 pts:-368934881474191040.000000 pos:142978 size:15562 flags:1
+ret: 0 st: 0 dts:1.840000 pts:1.840000 pos:142978 size:15562 flags:1
 ret: 0 st:-1 ts:1.306672 flags:0
-ret: 0 st: 0 dts:1.360000 pts:-368934881474191040.000000 pos:101236 size:15057 flags:1
+ret: 0 st: 0 dts:1.360000 pts:1.360000 pos:101236 size:15057 flags:1
 ret: 0 st:-1 ts:0.200839 flags:1
-ret: 0 st: 0 dts:0.000000 pts:-368934881474191040.000000 pos:5660 size:11942 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:5660 size:11942 flags:1
 ret: 0 st: 0 ts:-0.920000 flags:0
-ret: 0 st: 0 dts:0.000000 pts:-368934881474191040.000000 pos:5660 size:11942 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:5660 size:11942 flags:1
 ret: 0 st: 0 ts:2.000000 flags:1
-ret: 0 st: 0 dts:1.840000 pts:-368934881474191040.000000 pos:142978 size:15562 flags:1
+ret: 0 st: 0 dts:1.840000 pts:1.840000 pos:142978 size:15562 flags:1
 ret: 0 st:-1 ts:0.883340 flags:0
-ret: 0 st: 0 dts:0.880000 pts:-368934881474191040.000000 pos:64442 size:13382 flags:1
+ret: 0 st: 0 dts:0.880000 pts:0.880000 pos:64442 size:13382 flags:1
 ret:-1 st:-1 ts:-0.222493 flags:1
 ret:-1 st: 0 ts:2.680000 flags:0
 ret: 0 st: 0 ts:1.560000 flags:1
-ret: 0 st: 0 dts:1.360000 pts:-368934881474191040.000000 pos:101236 size:15057 flags:1
+ret: 0 st: 0 dts:1.360000 pts:1.360000 pos:101236 size:15057 flags:1
 ret: 0 st:-1 ts:0.460008 flags:0
-ret: 0 st: 0 dts:0.880000 pts:-368934881474191040.000000 pos:64442 size:13382 flags:1
+ret: 0 st: 0 dts:0.880000 pts:0.880000 pos:64442 size:13382 flags:1
 ret:-1 st:-1 ts:-0.645825 flags:1
 ----------------
 tests/data/a-mpeg4-adap.avi
-ret: 0 st: 0 dts:0.000000 pts:-368934881474191040.000000 pos:5660 size:6855 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:5660 size:6855 flags:1
 ret: 0 st:-1 ts:-1.000000 flags:0
-ret: 0 st: 0 dts:0.000000 pts:-368934881474191040.000000 pos:5660 size:6855 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:5660 size:6855 flags:1
 ret: 0 st:-1 ts:1.894167 flags:1
-ret: 0 st: 0 dts:1.840000 pts:-368934881474191040.000000 pos:175668 size:16884 flags:1
+ret: 0 st: 0 dts:1.840000 pts:1.840000 pos:175668 size:16884 flags:1
 ret: 0 st: 0 ts:0.800000 flags:0
-ret: 0 st: 0 dts:0.880000 pts:-368934881474191040.000000 pos:99006 size:16933 flags:1
+ret: 0 st: 0 dts:0.880000 pts:0.880000 pos:99006 size:16933 flags:1
 ret:-1 st: 0 ts:-0.320000 flags:1
 ret:-1 st:-1 ts:2.576668 flags:0
 ret: 0 st:-1 ts:1.470835 flags:1
-ret: 0 st: 0 dts:1.360000 pts:-368934881474191040.000000 pos:136592 size:17435 flags:1
+ret: 0 st: 0 dts:1.360000 pts:1.360000 pos:136592 size:17435 flags:1
 ret: 0 st: 0 ts:0.360000 flags:0
-ret: 0 st: 0 dts:0.400000 pts:-368934881474191040.000000 pos:59872 size:17261 flags:1
+ret: 0 st: 0 dts:0.400000 pts:0.400000 pos:59872 size:17261 flags:1
 ret:-1 st: 0 ts:-0.760000 flags:1
 ret:-1 st:-1 ts:2.153336 flags:0
 ret: 0 st:-1 ts:1.047503 flags:1
-ret: 0 st: 0 dts:0.880000 pts:-368934881474191040.000000 pos:99006 size:16933 flags:1
+ret: 0 st: 0 dts:0.880000 pts:0.880000 pos:99006 size:16933 flags:1
 ret: 0 st: 0 ts:-0.040000 flags:0
-ret: 0 st: 0 dts:0.000000 pts:-368934881474191040.000000 pos:5660 size:6855 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:5660 size:6855 flags:1
 ret: 0 st: 0 ts:2.840000 flags:1
-ret: 0 st: 0 dts:1.840000 pts:-368934881474191040.000000 pos:175668 size:16884 flags:1
+ret: 0 st: 0 dts:1.840000 pts:1.840000 pos:175668 size:16884 flags:1
 ret: 0 st:-1 ts:1.730004 flags:0
-ret: 0 st: 0 dts:1.840000 pts:-368934881474191040.000000 pos:175668 size:16884 flags:1
+ret: 0 st: 0 dts:1.840000 pts:1.840000 pos:175668 size:16884 flags:1
 ret: 0 st:-1 ts:0.624171 flags:1
-ret: 0 st: 0 dts:0.400000 pts:-368934881474191040.000000 pos:59872 size:17261 flags:1
+ret: 0 st: 0 dts:0.400000 pts:0.400000 pos:59872 size:17261 flags:1
 ret: 0 st: 0 ts:-0.480000 flags:0
-ret: 0 st: 0 dts:0.000000 pts:-368934881474191040.000000 pos:5660 size:6855 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:5660 size:6855 flags:1
 ret: 0 st: 0 ts:2.400000 flags:1
-ret: 0 st: 0 dts:1.840000 pts:-368934881474191040.000000 pos:175668 size:16884 flags:1
+ret: 0 st: 0 dts:1.840000 pts:1.840000 pos:175668 size:16884 flags:1
 ret: 0 st:-1 ts:1.306672 flags:0
-ret: 0 st: 0 dts:1.360000 pts:-368934881474191040.000000 pos:136592 size:17435 flags:1
+ret: 0 st: 0 dts:1.360000 pts:1.360000 pos:136592 size:17435 flags:1
 ret: 0 st:-1 ts:0.200839 flags:1
-ret: 0 st: 0 dts:0.000000 pts:-368934881474191040.000000 pos:5660 size:6855 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:5660 size:6855 flags:1
 ret: 0 st: 0 ts:-0.920000 flags:0
-ret: 0 st: 0 dts:0.000000 pts:-368934881474191040.000000 pos:5660 size:6855 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:5660 size:6855 flags:1
 ret: 0 st: 0 ts:2.000000 flags:1
-ret: 0 st: 0 dts:1.840000 pts:-368934881474191040.000000 pos:175668 size:16884 flags:1
+ret: 0 st: 0 dts:1.840000 pts:1.840000 pos:175668 size:16884 flags:1
 ret: 0 st:-1 ts:0.883340 flags:0
-ret: 0 st: 0 dts:0.880000 pts:-368934881474191040.000000 pos:99006 size:16933 flags:1
+ret: 0 st: 0 dts:0.880000 pts:0.880000 pos:99006 size:16933 flags:1
 ret:-1 st:-1 ts:-0.222493 flags:1
 ret:-1 st: 0 ts:2.680000 flags:0
 ret: 0 st: 0 ts:1.560000 flags:1
-ret: 0 st: 0 dts:1.360000 pts:-368934881474191040.000000 pos:136592 size:17435 flags:1
+ret: 0 st: 0 dts:1.360000 pts:1.360000 pos:136592 size:17435 flags:1
 ret: 0 st:-1 ts:0.460008 flags:0
-ret: 0 st: 0 dts:0.880000 pts:-368934881474191040.000000 pos:99006 size:16933 flags:1
+ret: 0 st: 0 dts:0.880000 pts:0.880000 pos:99006 size:16933 flags:1
 ret:-1 st:-1 ts:-0.645825 flags:1
 ----------------
 tests/data/a-mpeg4-adv.avi
@@ -1724,147 +1724,147 @@ ret: 0 st: 0 dts:0.480000 pts:0.480000 pos:35312 size:9987 flags:1
 ret:-1 st:-1 ts:-0.645825 flags:1
 ----------------
 tests/data/a-mpeg4-qprd.avi
-ret: 0 st: 0 dts:0.000000 pts:-368934881474191040.000000 pos:5660 size:14873 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:5660 size:14873 flags:1
 ret: 0 st:-1 ts:-1.000000 flags:0
-ret: 0 st: 0 dts:0.000000 pts:-368934881474191040.000000 pos:5660 size:14873 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:5660 size:14873 flags:1
 ret: 0 st:-1 ts:1.894167 flags:1
-ret: 0 st: 0 dts:1.840000 pts:-368934881474191040.000000 pos:212738 size:14347 flags:1
+ret: 0 st: 0 dts:1.840000 pts:1.840000 pos:212738 size:14347 flags:1
 ret: 0 st: 0 ts:0.800000 flags:0
-ret: 0 st: 0 dts:0.880000 pts:-368934881474191040.000000 pos:152640 size:14348 flags:1
+ret: 0 st: 0 dts:0.880000 pts:0.880000 pos:152640 size:14348 flags:1
 ret:-1 st: 0 ts:-0.320000 flags:1
 ret:-1 st:-1 ts:2.576668 flags:0
 ret: 0 st:-1 ts:1.470835 flags:1
-ret: 0 st: 0 dts:1.360000 pts:-368934881474191040.000000 pos:182580 size:14281 flags:1
+ret: 0 st: 0 dts:1.360000 pts:1.360000 pos:182580 size:14281 flags:1
 ret: 0 st: 0 ts:0.360000 flags:0
-ret: 0 st: 0 dts:0.400000 pts:-368934881474191040.000000 pos:94070 size:29366 flags:1
+ret: 0 st: 0 dts:0.400000 pts:0.400000 pos:94070 size:29366 flags:1
 ret:-1 st: 0 ts:-0.760000 flags:1
 ret:-1 st:-1 ts:2.153336 flags:0
 ret: 0 st:-1 ts:1.047503 flags:1
-ret: 0 st: 0 dts:0.880000 pts:-368934881474191040.000000 pos:152640 size:14348 flags:1
+ret: 0 st: 0 dts:0.880000 pts:0.880000 pos:152640 size:14348 flags:1
 ret: 0 st: 0 ts:-0.040000 flags:0
-ret: 0 st: 0 dts:0.000000 pts:-368934881474191040.000000 pos:5660 size:14873 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:5660 size:14873 flags:1
 ret: 0 st: 0 ts:2.840000 flags:1
-ret: 0 st: 0 dts:1.840000 pts:-368934881474191040.000000 pos:212738 size:14347 flags:1
+ret: 0 st: 0 dts:1.840000 pts:1.840000 pos:212738 size:14347 flags:1
 ret: 0 st:-1 ts:1.730004 flags:0
-ret: 0 st: 0 dts:1.840000 pts:-368934881474191040.000000 pos:212738 size:14347 flags:1
+ret: 0 st: 0 dts:1.840000 pts:1.840000 pos:212738 size:14347 flags:1
 ret: 0 st:-1 ts:0.624171 flags:1
-ret: 0 st: 0 dts:0.400000 pts:-368934881474191040.000000 pos:94070 size:29366 flags:1
+ret: 0 st: 0 dts:0.400000 pts:0.400000 pos:94070 size:29366 flags:1
 ret: 0 st: 0 ts:-0.480000 flags:0
-ret: 0 st: 0 dts:0.000000 pts:-368934881474191040.000000 pos:5660 size:14873 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:5660 size:14873 flags:1
 ret: 0 st: 0 ts:2.400000 flags:1
-ret: 0 st: 0 dts:1.840000 pts:-368934881474191040.000000 pos:212738 size:14347 flags:1
+ret: 0 st: 0 dts:1.840000 pts:1.840000 pos:212738 size:14347 flags:1
 ret: 0 st:-1 ts:1.306672 flags:0
-ret: 0 st: 0 dts:1.360000 pts:-368934881474191040.000000 pos:182580 size:14281 flags:1
+ret: 0 st: 0 dts:1.360000 pts:1.360000 pos:182580 size:14281 flags:1
 ret: 0 st:-1 ts:0.200839 flags:1
-ret: 0 st: 0 dts:0.000000 pts:-368934881474191040.000000 pos:5660 size:14873 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:5660 size:14873 flags:1
 ret: 0 st: 0 ts:-0.920000 flags:0
-ret: 0 st: 0 dts:0.000000 pts:-368934881474191040.000000 pos:5660 size:14873 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:5660 size:14873 flags:1
 ret: 0 st: 0 ts:2.000000 flags:1
-ret: 0 st: 0 dts:1.840000 pts:-368934881474191040.000000 pos:212738 size:14347 flags:1
+ret: 0 st: 0 dts:1.840000 pts:1.840000 pos:212738 size:14347 flags:1
 ret: 0 st:-1 ts:0.883340 flags:0
-ret: 0 st: 0 dts:0.880000 pts:-368934881474191040.000000 pos:152640 size:14348 flags:1
+ret: 0 st: 0 dts:0.880000 pts:0.880000 pos:152640 size:14348 flags:1
 ret:-1 st:-1 ts:-0.222493 flags:1
 ret:-1 st: 0 ts:2.680000 flags:0
 ret: 0 st: 0 ts:1.560000 flags:1
-ret: 0 st: 0 dts:1.360000 pts:-368934881474191040.000000 pos:182580 size:14281 flags:1
+ret: 0 st: 0 dts:1.360000 pts:1.360000 pos:182580 size:14281 flags:1
 ret: 0 st:-1 ts:0.460008 flags:0
-ret: 0 st: 0 dts:0.880000 pts:-368934881474191040.000000 pos:152640 size:14348 flags:1
+ret: 0 st: 0 dts:0.880000 pts:0.880000 pos:152640 size:14348 flags:1
 ret:-1 st:-1 ts:-0.645825 flags:1
 ----------------
 tests/data/a-mpeg4-rc.avi
-ret: 0 st: 0 dts:0.000000 pts:-368934881474191040.000000 pos:5660 size:15766 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:5660 size:15766 flags:1
 ret: 0 st:-1 ts:-1.000000 flags:0
-ret: 0 st: 0 dts:0.000000 pts:-368934881474191040.000000 pos:5660 size:15766 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:5660 size:15766 flags:1
 ret: 0 st:-1 ts:1.894167 flags:1
-ret: 0 st: 0 dts:1.840000 pts:-368934881474191040.000000 pos:209236 size:13826 flags:1
+ret: 0 st: 0 dts:1.840000 pts:1.840000 pos:209236 size:13826 flags:1
 ret: 0 st: 0 ts:0.800000 flags:0
-ret: 0 st: 0 dts:0.880000 pts:-368934881474191040.000000 pos:154792 size:13382 flags:1
+ret: 0 st: 0 dts:0.880000 pts:0.880000 pos:154792 size:13382 flags:1
 ret:-1 st: 0 ts:-0.320000 flags:1
 ret:-1 st:-1 ts:2.576668 flags:0
 ret: 0 st:-1 ts:1.470835 flags:1
-ret: 0 st: 0 dts:1.360000 pts:-368934881474191040.000000 pos:182316 size:13326 flags:1
+ret: 0 st: 0 dts:1.360000 pts:1.360000 pos:182316 size:13326 flags:1
 ret: 0 st: 0 ts:0.360000 flags:0
-ret: 0 st: 0 dts:0.400000 pts:-368934881474191040.000000 pos:95408 size:32807 flags:1
+ret: 0 st: 0 dts:0.400000 pts:0.400000 pos:95408 size:32807 flags:1
 ret:-1 st: 0 ts:-0.760000 flags:1
 ret:-1 st:-1 ts:2.153336 flags:0
 ret: 0 st:-1 ts:1.047503 flags:1
-ret: 0 st: 0 dts:0.880000 pts:-368934881474191040.000000 pos:154792 size:13382 flags:1
+ret: 0 st: 0 dts:0.880000 pts:0.880000 pos:154792 size:13382 flags:1
 ret: 0 st: 0 ts:-0.040000 flags:0
-ret: 0 st: 0 dts:0.000000 pts:-368934881474191040.000000 pos:5660 size:15766 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:5660 size:15766 flags:1
 ret: 0 st: 0 ts:2.840000 flags:1
-ret: 0 st: 0 dts:1.840000 pts:-368934881474191040.000000 pos:209236 size:13826 flags:1
+ret: 0 st: 0 dts:1.840000 pts:1.840000 pos:209236 size:13826 flags:1
 ret: 0 st:-1 ts:1.730004 flags:0
-ret: 0 st: 0 dts:1.840000 pts:-368934881474191040.000000 pos:209236 size:13826 flags:1
+ret: 0 st: 0 dts:1.840000 pts:1.840000 pos:209236 size:13826 flags:1
 ret: 0 st:-1 ts:0.624171 flags:1
-ret: 0 st: 0 dts:0.400000 pts:-368934881474191040.000000 pos:95408 size:32807 flags:1
+ret: 0 st: 0 dts:0.400000 pts:0.400000 pos:95408 size:32807 flags:1
 ret: 0 st: 0 ts:-0.480000 flags:0
-ret: 0 st: 0 dts:0.000000 pts:-368934881474191040.000000 pos:5660 size:15766 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:5660 size:15766 flags:1
 ret: 0 st: 0 ts:2.400000 flags:1
-ret: 0 st: 0 dts:1.840000 pts:-368934881474191040.000000 pos:209236 size:13826 flags:1
+ret: 0 st: 0 dts:1.840000 pts:1.840000 pos:209236 size:13826 flags:1
 ret: 0 st:-1 ts:1.306672 flags:0
-ret: 0 st: 0 dts:1.360000 pts:-368934881474191040.000000 pos:182316 size:13326 flags:1
+ret: 0 st: 0 dts:1.360000 pts:1.360000 pos:182316 size:13326 flags:1
 ret: 0 st:-1 ts:0.200839 flags:1
-ret: 0 st: 0 dts:0.000000 pts:-368934881474191040.000000 pos:5660 size:15766 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:5660 size:15766 flags:1
 ret: 0 st: 0 ts:-0.920000 flags:0
-ret: 0 st: 0 dts:0.000000 pts:-368934881474191040.000000 pos:5660 size:15766 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:5660 size:15766 flags:1
 ret: 0 st: 0 ts:2.000000 flags:1
-ret: 0 st: 0 dts:1.840000 pts:-368934881474191040.000000 pos:209236 size:13826 flags:1
+ret: 0 st: 0 dts:1.840000 pts:1.840000 pos:209236 size:13826 flags:1
 ret: 0 st:-1 ts:0.883340 flags:0
-ret: 0 st: 0 dts:0.880000 pts:-368934881474191040.000000 pos:154792 size:13382 flags:1
+ret: 0 st: 0 dts:0.880000 pts:0.880000 pos:154792 size:13382 flags:1
 ret:-1 st:-1 ts:-0.222493 flags:1
 ret:-1 st: 0 ts:2.680000 flags:0
 ret: 0 st: 0 ts:1.560000 flags:1
-ret: 0 st: 0 dts:1.360000 pts:-368934881474191040.000000 pos:182316 size:13326 flags:1
+ret: 0 st: 0 dts:1.360000 pts:1.360000 pos:182316 size:13326 flags:1
 ret: 0 st:-1 ts:0.460008 flags:0
-ret: 0 st: 0 dts:0.880000 pts:-368934881474191040.000000 pos:154792 size:13382 flags:1
+ret: 0 st: 0 dts:0.880000 pts:0.880000 pos:154792 size:13382 flags:1
 ret:-1 st:-1 ts:-0.645825 flags:1
 ----------------
 tests/data/a-mpeg4-thread.avi
-ret: 0 st: 0 dts:0.000000 pts:-368934881474191040.000000 pos:5660 size:14874 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:5660 size:14874 flags:1
 ret: 0 st:-1 ts:-1.000000 flags:0
-ret: 0 st: 0 dts:0.000000 pts:-368934881474191040.000000 pos:5660 size:14874 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:5660 size:14874 flags:1
 ret: 0 st:-1 ts:1.894167 flags:1
-ret: 0 st: 0 dts:1.840000 pts:-368934881474191040.000000 pos:229568 size:14638 flags:1
+ret: 0 st: 0 dts:1.840000 pts:1.840000 pos:229568 size:14638 flags:1
 ret: 0 st: 0 ts:0.800000 flags:0
-ret: 0 st: 0 dts:0.880000 pts:-368934881474191040.000000 pos:163772 size:16380 flags:1
+ret: 0 st: 0 dts:0.880000 pts:0.880000 pos:163772 size:16380 flags:1
 ret:-1 st: 0 ts:-0.320000 flags:1
 ret:-1 st:-1 ts:2.576668 flags:0
 ret: 0 st:-1 ts:1.470835 flags:1
-ret: 0 st: 0 dts:1.360000 pts:-368934881474191040.000000 pos:196664 size:16051 flags:1
+ret: 0 st: 0 dts:1.360000 pts:1.360000 pos:196664 size:16051 flags:1
 ret: 0 st: 0 ts:0.360000 flags:0
-ret: 0 st: 0 dts:0.400000 pts:-368934881474191040.000000 pos:98760 size:33020 flags:1
+ret: 0 st: 0 dts:0.400000 pts:0.400000 pos:98760 size:33020 flags:1
 ret:-1 st: 0 ts:-0.760000 flags:1
 ret:-1 st:-1 ts:2.153336 flags:0
 ret: 0 st:-1 ts:1.047503 flags:1
-ret: 0 st: 0 dts:0.880000 pts:-368934881474191040.000000 pos:163772 size:16380 flags:1
+ret: 0 st: 0 dts:0.880000 pts:0.880000 pos:163772 size:16380 flags:1
 ret: 0 st: 0 ts:-0.040000 flags:0
-ret: 0 st: 0 dts:0.000000 pts:-368934881474191040.000000 pos:5660 size:14874 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:5660 size:14874 flags:1
 ret: 0 st: 0 ts:2.840000 flags:1
-ret: 0 st: 0 dts:1.840000 pts:-368934881474191040.000000 pos:229568 size:14638 flags:1
+ret: 0 st: 0 dts:1.840000 pts:1.840000 pos:229568 size:14638 flags:1
 ret: 0 st:-1 ts:1.730004 flags:0
-ret: 0 st: 0 dts:1.840000 pts:-368934881474191040.000000 pos:229568 size:14638 flags:1
+ret: 0 st: 0 dts:1.840000 pts:1.840000 pos:229568 size:14638 flags:1
 ret: 0 st:-1 ts:0.624171 flags:1
-ret: 0 st: 0 dts:0.400000 pts:-368934881474191040.000000 pos:98760 size:33020 flags:1
+ret: 0 st: 0 dts:0.400000 pts:0.400000 pos:98760 size:33020 flags:1
 ret: 0 st: 0 ts:-0.480000 flags:0
-ret: 0 st: 0 dts:0.000000 pts:-368934881474191040.000000 pos:5660 size:14874 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:5660 size:14874 flags:1
 ret: 0 st: 0 ts:2.400000 flags:1
-ret: 0 st: 0 dts:1.840000 pts:-368934881474191040.000000 pos:229568 size:14638 flags:1
+ret: 0 st: 0 dts:1.840000 pts:1.840000 pos:229568 size:14638 flags:1
 ret: 0 st:-1 ts:1.306672 flags:0
-ret: 0 st: 0 dts:1.360000 pts:-368934881474191040.000000 pos:196664 size:16051 flags:1
+ret: 0 st: 0 dts:1.360000 pts:1.360000 pos:196664 size:16051 flags:1
 ret: 0 st:-1 ts:0.200839 flags:1
-ret: 0 st: 0 dts:0.000000 pts:-368934881474191040.000000 pos:5660 size:14874 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:5660 size:14874 flags:1
 ret: 0 st: 0 ts:-0.920000 flags:0
-ret: 0 st: 0 dts:0.000000 pts:-368934881474191040.000000 pos:5660 size:14874 flags:1
+ret: 0 st: 0 dts:0.000000 pts:0.000000 pos:5660 size:14874 flags:1
 ret: 0 st: 0 ts:2.000000 flags:1
-ret: 0 st: 0 dts:1.840000 pts:-368934881474191040.000000 pos:229568 size:14638 flags:1
+ret: 0 st: 0 dts:1.840000 pts:1.840000 pos:229568 size:14638 flags:1
 ret: 0 st:-1 ts:0.883340 flags:0
-ret: 0 st: 0 dts:0.880000 pts:-368934881474191040.000000 pos:163772 size:16380 flags:1
+ret: 0 st: 0 dts:0.880000 pts:0.880000 pos:163772 size:16380 flags:1
 ret:-1 st:-1 ts:-0.222493 flags:1
 ret:-1 st: 0 ts:2.680000 flags:0
 ret: 0 st: 0 ts:1.560000 flags:1
-ret: 0 st: 0 dts:1.360000 pts:-368934881474191040.000000 pos:196664 size:16051 flags:1
+ret: 0 st: 0 dts:1.360000 pts:1.360000 pos:196664 size:16051 flags:1
 ret: 0 st:-1 ts:0.460008 flags:0
-ret: 0 st: 0 dts:0.880000 pts:-368934881474191040.000000 pos:163772 size:16380 flags:1
+ret: 0 st: 0 dts:0.880000 pts:0.880000 pos:163772 size:16380 flags:1
 ret:-1 st:-1 ts:-0.645825 flags:1
 ----------------
 tests/data/a-msmpeg4.avi
diff --git a/tests/seek_test.sh b/tests/seek_test.sh
index 3074d70..996acb3 100755
--- a/tests/seek_test.sh
+++ b/tests/seek_test.sh
@@ -3,9 +3,6 @@
 LC_ALL=C
 export LC_ALL
 
-target_exec=$2
-target_path=$3
-
 datadir="tests/data"
 
 logfile="$datadir/seek.regression"
@@ -16,7 +13,7 @@ rm -f $logfile
 for i in $list ; do
     echo ---------------- >> $logfile
     echo $i >> $logfile
-    $target_exec $target_path/tests/seek_test $target_path/$i >> $logfile
+    tests/seek_test $i >> $logfile
 done
 
 if diff -u -w "$reffile" "$logfile" ; then

-- 
FFmpeg packaging



More information about the pkg-multimedia-commits mailing list