Merge commit '6655c933a887a2d20707fff657b614aa1d86a25b'
authorMichael Niedermayer <michaelni@gmx.at>
Sat, 22 Mar 2014 22:02:46 +0000 (23:02 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 22 Mar 2014 22:08:22 +0000 (23:08 +0100)
* commit '6655c933a887a2d20707fff657b614aa1d86a25b':
  x86: dsputil: Move fpel declarations to a separate header

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/x86/cavsdsp.c
libavcodec/x86/dsputil_init.c
libavcodec/x86/dsputil_mmx.c
libavcodec/x86/dsputil_x86.h
libavcodec/x86/fpel.h
libavcodec/x86/fpel_mmx.c
libavcodec/x86/h264_qpel.c
libavcodec/x86/hpeldsp_init.c
libavcodec/x86/vc1dsp_mmx.c

diff --combined libavcodec/x86/cavsdsp.c
@@@ -5,20 -5,20 +5,20 @@@
   * MMX-optimized DSP functions, based on H.264 optimizations by
   * Michael Niedermayer and Loren Merritt
   *
 - * This file is part of Libav.
 + * This file is part of FFmpeg.
   *
 - * Libav is free software; you can redistribute it and/or
 + * 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.
   *
 - * Libav is distributed in the hope that it will be useful,
 + * 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 Libav; if not, write to the Free Software
 + * License along with FFmpeg; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   */
  
@@@ -30,6 -30,7 +30,7 @@@
  #include "libavcodec/cavsdsp.h"
  #include "constants.h"
  #include "dsputil_x86.h"
+ #include "fpel.h"
  #include "config.h"
  
  #if HAVE_MMX_INLINE
@@@ -309,7 -310,6 +310,7 @@@ static void cavs_idct8_add_mmx(uint8_t 
          \
          : "+a"(src), "+c"(dst)\
          : "S"((x86_reg)srcStride), "r"((x86_reg)dstStride), "m"(ADD), "m"(MUL1)\
 +          NAMED_CONSTRAINTS_ADD(MUL2)\
          : "memory"\
       );\
       if(h==16){\
              \
             : "+a"(src), "+c"(dst)\
             : "S"((x86_reg)srcStride), "r"((x86_reg)dstStride), "m"(ADD),  "m"(MUL1)\
 +             NAMED_CONSTRAINTS_ADD(MUL2)\
             : "memory"\
          );\
       }\
@@@ -1,21 -1,18 +1,21 @@@
  /*
 - * This file is part of Libav.
 + * Copyright (c) 2000, 2001 Fabrice Bellard
 + * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
   *
 - * Libav is free software; you can redistribute it and/or
 + * 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.
   *
 - * Libav is distributed in the hope that it will be useful,
 + * 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 Libav; if not, write to the Free Software
 + * License along with FFmpeg; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   */
  
@@@ -31,6 -28,7 +31,7 @@@
  #include "libavcodec/simple_idct.h"
  #include "libavcodec/version.h"
  #include "dsputil_x86.h"
+ #include "fpel.h"
  #include "idct_xvid.h"
  
  void ff_put_pixels8_l2_mmxext(uint8_t *dst, uint8_t *src1, uint8_t *src2,
@@@ -533,11 -531,24 +534,11 @@@ static av_cold void dsputil_init_mmx(DS
          c->clear_block  = ff_clear_block_mmx;
          c->clear_blocks = ff_clear_blocks_mmx;
          c->draw_edges   = ff_draw_edges_mmx;
 -
 -        switch (avctx->idct_algo) {
 -        case FF_IDCT_AUTO:
 -        case FF_IDCT_SIMPLEMMX:
 -            c->idct_put              = ff_simple_idct_put_mmx;
 -            c->idct_add              = ff_simple_idct_add_mmx;
 -            c->idct                  = ff_simple_idct_mmx;
 -            c->idct_permutation_type = FF_SIMPLE_IDCT_PERM;
 -            break;
 -        case FF_IDCT_XVIDMMX:
 -            c->idct_put              = ff_idct_xvid_mmx_put;
 -            c->idct_add              = ff_idct_xvid_mmx_add;
 -            c->idct                  = ff_idct_xvid_mmx;
 -            break;
 -        }
      }
  
 +#if CONFIG_VIDEODSP && (ARCH_X86_32 || !HAVE_YASM)
      c->gmc = ff_gmc_mmx;
 +#endif
  
      c->add_bytes = ff_add_bytes_mmx;
  #endif /* HAVE_MMX_INLINE */
@@@ -551,7 -562,7 +552,7 @@@ static av_cold void dsputil_init_mmxext
                                          int cpu_flags, unsigned high_bit_depth)
  {
  #if HAVE_MMXEXT_INLINE
 -    if (!high_bit_depth && avctx->idct_algo == FF_IDCT_XVIDMMX) {
 +    if (!high_bit_depth && avctx->idct_algo == FF_IDCT_XVIDMMX && avctx->lowres == 0) {
          c->idct_put = ff_idct_xvid_mmxext_put;
          c->idct_add = ff_idct_xvid_mmxext_add;
          c->idct     = ff_idct_xvid_mmxext;
@@@ -582,28 -593,26 +583,28 @@@ static av_cold void dsputil_init_sse(DS
  #if HAVE_SSE_INLINE
      c->vector_clipf = ff_vector_clipf_sse;
  
 -#if FF_API_XVMC
 -FF_DISABLE_DEPRECATION_WARNINGS
      /* XvMCCreateBlocks() may not allocate 16-byte aligned blocks */
 -    if (CONFIG_MPEG_XVMC_DECODER && avctx->xvmc_acceleration > 1)
 +    if (CONFIG_XVMC && avctx->hwaccel && avctx->hwaccel->decode_mb)
          return;
 -FF_ENABLE_DEPRECATION_WARNINGS
 -#endif /* FF_API_XVMC */
  
      if (!high_bit_depth) {
          c->clear_block  = ff_clear_block_sse;
          c->clear_blocks = ff_clear_blocks_sse;
      }
  #endif /* HAVE_SSE_INLINE */
 +
 +#if HAVE_YASM
 +#if HAVE_INLINE_ASM && CONFIG_VIDEODSP
 +    c->gmc = ff_gmc_sse;
 +#endif
 +#endif /* HAVE_YASM */
  }
  
  static av_cold void dsputil_init_sse2(DSPContext *c, AVCodecContext *avctx,
                                        int cpu_flags, unsigned high_bit_depth)
  {
  #if HAVE_SSE2_INLINE
 -    if (!high_bit_depth && avctx->idct_algo == FF_IDCT_XVIDMMX) {
 +    if (!high_bit_depth && avctx->idct_algo == FF_IDCT_XVIDMMX && avctx->lowres == 0) {
          c->idct_put              = ff_idct_xvid_sse2_put;
          c->idct_add              = ff_idct_xvid_sse2_add;
          c->idct                  = ff_idct_xvid_sse2;
@@@ -651,30 -660,12 +652,30 @@@ av_cold void ff_dsputil_init_x86(DSPCon
      int cpu_flags = av_get_cpu_flags();
  
  #if HAVE_7REGS && HAVE_INLINE_ASM
 -    if (cpu_flags & AV_CPU_FLAG_CMOV)
 +    if (HAVE_MMX && cpu_flags & AV_CPU_FLAG_CMOV)
          c->add_hfyu_median_prediction = ff_add_hfyu_median_prediction_cmov;
  #endif
  
 -    if (X86_MMX(cpu_flags))
 +    if (X86_MMX(cpu_flags)) {
 +#if HAVE_INLINE_ASM
 +        const int idct_algo = avctx->idct_algo;
 +
 +        if (avctx->lowres == 0 && !high_bit_depth) {
 +            if (idct_algo == FF_IDCT_AUTO || idct_algo == FF_IDCT_SIMPLEMMX) {
 +                c->idct_put              = ff_simple_idct_put_mmx;
 +                c->idct_add              = ff_simple_idct_add_mmx;
 +                c->idct                  = ff_simple_idct_mmx;
 +                c->idct_permutation_type = FF_SIMPLE_IDCT_PERM;
 +            } else if (idct_algo == FF_IDCT_XVIDMMX) {
 +                c->idct_put              = ff_idct_xvid_mmx_put;
 +                c->idct_add              = ff_idct_xvid_mmx_add;
 +                c->idct                  = ff_idct_xvid_mmx;
 +            }
 +        }
 +#endif /* HAVE_INLINE_ASM */
 +
          dsputil_init_mmx(c, avctx, cpu_flags, high_bit_depth);
 +    }
  
      if (X86_MMXEXT(cpu_flags))
          dsputil_init_mmxext(c, avctx, cpu_flags, high_bit_depth);
@@@ -3,34 -3,30 +3,35 @@@
   * Copyright (c) 2000, 2001 Fabrice Bellard
   * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
   *
 - * MMX optimization by Nick Kurshev <nickols_k@mail.ru>
 - *
 - * This file is part of Libav.
 + * This file is part of FFmpeg.
   *
 - * Libav is free software; you can redistribute it and/or
 + * 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.
   *
 - * Libav is distributed in the hope that it will be useful,
 + * 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 Libav; if not, write to the Free Software
 + * License along with FFmpeg; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 + *
 + * MMX optimization by Nick Kurshev <nickols_k@mail.ru>
   */
  
  #include "config.h"
 +#include "libavutil/avassert.h"
  #include "libavutil/cpu.h"
  #include "libavutil/x86/asm.h"
 +#include "libavcodec/pixels.h"
 +#include "libavcodec/videodsp.h"
  #include "constants.h"
 +#include "diracdsp_mmx.h"
  #include "dsputil_x86.h"
++#include "fpel.h"
  #include "inline_asm.h"
  
  #if HAVE_INLINE_ASM
@@@ -125,7 -121,6 +126,7 @@@ void ff_put_signed_pixels_clamped_mmx(c
          put_signed_pixels_clamped_mmx_half(64)
          : "+&r" (pixels), "=&r" (line_skip3)
          : "r" (block), "r" (line_skip)
 +          NAMED_CONSTRAINTS_ADD(ff_pb_80)
          : "memory");
  }
  
@@@ -283,7 -278,7 +284,7 @@@ void ff_draw_edges_mmx(uint8_t *buf, in
              : "+r" (ptr)
              : "r" ((x86_reg) wrap), "r" ((x86_reg) width),
                "r" (ptr + wrap * height));
 -    } else {
 +    } else if (w == 16) {
          __asm__ volatile (
              "1:                                 \n\t"
              "movd            (%0), %%mm0        \n\t"
              "add               %1, %0           \n\t"
              "cmp               %3, %0           \n\t"
              "jb                1b               \n\t"
 +            : "+r"(ptr)
 +            : "r"((x86_reg)wrap), "r"((x86_reg)width), "r"(ptr + wrap * height)
 +            );
 +    } else {
 +        av_assert1(w == 4);
 +        __asm__ volatile (
 +            "1:                             \n\t"
 +            "movd            (%0), %%mm0    \n\t"
 +            "punpcklbw      %%mm0, %%mm0    \n\t"
 +            "punpcklwd      %%mm0, %%mm0    \n\t"
 +            "movd           %%mm0, -4(%0)   \n\t"
 +            "movd      -4(%0, %2), %%mm1    \n\t"
 +            "punpcklbw      %%mm1, %%mm1    \n\t"
 +            "punpckhwd      %%mm1, %%mm1    \n\t"
 +            "punpckhdq      %%mm1, %%mm1    \n\t"
 +            "movd           %%mm1, (%0, %2) \n\t"
 +            "add               %1, %0       \n\t"
 +            "cmp               %3, %0       \n\t"
 +            "jb                1b           \n\t"
              : "+r" (ptr)
              : "r" ((x86_reg) wrap), "r" ((x86_reg) width),
                "r" (ptr + wrap * height));
      }
  }
  
 -void ff_gmc_mmx(uint8_t *dst, uint8_t *src,
 -                int stride, int h, int ox, int oy,
 -                int dxx, int dxy, int dyx, int dyy,
 -                int shift, int r, int width, int height)
 +typedef void emulated_edge_mc_func(uint8_t *dst, const uint8_t *src,
 +                                   ptrdiff_t dst_stride,
 +                                   ptrdiff_t src_linesize,
 +                                   int block_w, int block_h,
 +                                   int src_x, int src_y, int w, int h);
 +
 +static av_always_inline void gmc(uint8_t *dst, uint8_t *src,
 +                                 int stride, int h, int ox, int oy,
 +                                 int dxx, int dxy, int dyx, int dyy,
 +                                 int shift, int r, int width, int height,
 +                                 emulated_edge_mc_func *emu_edge_fn)
  {
      const int w    = 8;
      const int ix   = ox  >> (16 + shift);
      const uint16_t dxy4[4] = { dxys, dxys, dxys, dxys };
      const uint16_t dyy4[4] = { dyys, dyys, dyys, dyys };
      const uint64_t shift2  = 2 * shift;
 +#define MAX_STRIDE 4096U
 +#define MAX_H 8U
 +    uint8_t edge_buf[(MAX_H + 1) * MAX_STRIDE];
      int x, y;
  
      const int dxw = (dxx - (1 << (16 + shift))) * (w - 1);
      const int dyh = (dyy - (1 << (16 + shift))) * (h - 1);
      const int dxh = dxy * (h - 1);
      const int dyw = dyx * (w - 1);
 +    int need_emu  =  (unsigned) ix >= width  - w ||
 +                     (unsigned) iy >= height - h;
  
      if ( // non-constant fullpel offset (3% of blocks)
          ((ox ^ (ox + dxw)) | (ox ^ (ox + dxh)) | (ox ^ (ox + dxw + dxh)) |
           (oy ^ (oy + dyw)) | (oy ^ (oy + dyh)) | (oy ^ (oy + dyw + dyh))) >> (16 + shift) ||
          // uses more than 16 bits of subpel mv (only at huge resolution)
          (dxx | dxy | dyx | dyy) & 15 ||
 -        (unsigned) ix >= width  - w ||
 -        (unsigned) iy >= height - h) {
 +        (need_emu && (h > MAX_H || stride > MAX_STRIDE))) {
          // FIXME could still use mmx for some of the rows
          ff_gmc_c(dst, src, stride, h, ox, oy, dxx, dxy, dyx, dyy,
                   shift, r, width, height);
      }
  
      src += ix + iy * stride;
 +    if (need_emu) {
 +        emu_edge_fn(edge_buf, src, stride, stride, w + 1, h + 1, ix, iy, width, height);
 +        src = edge_buf;
 +    }
  
      __asm__ volatile (
          "movd         %0, %%mm6         \n\t"
      }
  }
  
 +#if CONFIG_VIDEODSP
 +#if HAVE_YASM
 +#if ARCH_X86_32
 +void ff_gmc_mmx(uint8_t *dst, uint8_t *src,
 +                int stride, int h, int ox, int oy,
 +                int dxx, int dxy, int dyx, int dyy,
 +                int shift, int r, int width, int height)
 +{
 +    gmc(dst, src, stride, h, ox, oy, dxx, dxy, dyx, dyy, shift, r,
 +        width, height, &ff_emulated_edge_mc_8);
 +}
 +#endif
 +void ff_gmc_sse(uint8_t *dst, uint8_t *src,
 +                int stride, int h, int ox, int oy,
 +                int dxx, int dxy, int dyx, int dyy,
 +                int shift, int r, int width, int height)
 +{
 +    gmc(dst, src, stride, h, ox, oy, dxx, dxy, dyx, dyy, shift, r,
 +        width, height, &ff_emulated_edge_mc_8);
 +}
 +#else
 +void ff_gmc_mmx(uint8_t *dst, uint8_t *src,
 +                int stride, int h, int ox, int oy,
 +                int dxx, int dxy, int dyx, int dyy,
 +                int shift, int r, int width, int height)
 +{
 +    gmc(dst, src, stride, h, ox, oy, dxx, dxy, dyx, dyy, shift, r,
 +        width, height, &ff_emulated_edge_mc_8);
 +}
 +#endif
 +#endif
 +
 +#if CONFIG_DIRAC_DECODER
 +#define DIRAC_PIXOP(OPNAME2, OPNAME, EXT)\
 +void ff_ ## OPNAME2 ## _dirac_pixels8_ ## EXT(uint8_t *dst, const uint8_t *src[5], int stride, int h)\
 +{\
 +    if (h&3)\
 +        ff_ ## OPNAME2 ## _dirac_pixels8_c(dst, src, stride, h);\
 +    else\
 +        OPNAME ## _pixels8_ ## EXT(dst, src[0], stride, h);\
 +}\
 +void ff_ ## OPNAME2 ## _dirac_pixels16_ ## EXT(uint8_t *dst, const uint8_t *src[5], int stride, int h)\
 +{\
 +    if (h&3)\
 +        ff_ ## OPNAME2 ## _dirac_pixels16_c(dst, src, stride, h);\
 +    else\
 +        OPNAME ## _pixels16_ ## EXT(dst, src[0], stride, h);\
 +}\
 +void ff_ ## OPNAME2 ## _dirac_pixels32_ ## EXT(uint8_t *dst, const uint8_t *src[5], int stride, int h)\
 +{\
 +    if (h&3) {\
 +        ff_ ## OPNAME2 ## _dirac_pixels32_c(dst, src, stride, h);\
 +    } else {\
 +        OPNAME ## _pixels16_ ## EXT(dst   , src[0]   , stride, h);\
 +        OPNAME ## _pixels16_ ## EXT(dst+16, src[0]+16, stride, h);\
 +    }\
 +}
 +
 +#if HAVE_MMX_INLINE
 +CALL_2X_PIXELS(ff_avg_pixels16_mmxext, ff_avg_pixels8_mmxext, 8)
 +DIRAC_PIXOP(put, ff_put, mmx)
 +DIRAC_PIXOP(avg, ff_avg, mmx)
 +#endif
 +
 +#if HAVE_YASM
 +DIRAC_PIXOP(avg, ff_avg, mmxext)
 +
 +void ff_put_dirac_pixels16_sse2(uint8_t *dst, const uint8_t *src[5], int stride, int h)
 +{
 +    if (h&3)
 +        ff_put_dirac_pixels16_c(dst, src, stride, h);
 +    else
 +    ff_put_pixels16_sse2(dst, src[0], stride, h);
 +}
 +void ff_avg_dirac_pixels16_sse2(uint8_t *dst, const uint8_t *src[5], int stride, int h)
 +{
 +    if (h&3)
 +        ff_avg_dirac_pixels16_c(dst, src, stride, h);
 +    else
 +    ff_avg_pixels16_sse2(dst, src[0], stride, h);
 +}
 +void ff_put_dirac_pixels32_sse2(uint8_t *dst, const uint8_t *src[5], int stride, int h)
 +{
 +    if (h&3) {
 +        ff_put_dirac_pixels32_c(dst, src, stride, h);
 +    } else {
 +    ff_put_pixels16_sse2(dst   , src[0]   , stride, h);
 +    ff_put_pixels16_sse2(dst+16, src[0]+16, stride, h);
 +    }
 +}
 +void ff_avg_dirac_pixels32_sse2(uint8_t *dst, const uint8_t *src[5], int stride, int h)
 +{
 +    if (h&3) {
 +        ff_avg_dirac_pixels32_c(dst, src, stride, h);
 +    } else {
 +    ff_avg_pixels16_sse2(dst   , src[0]   , stride, h);
 +    ff_avg_pixels16_sse2(dst+16, src[0]+16, stride, h);
 +    }
 +}
 +#endif
 +#endif
 +
  void ff_vector_clipf_sse(float *dst, const float *src,
                           float min, float max, int len)
  {
@@@ -2,20 -2,20 +2,20 @@@
   * MMX optimized DSP utils
   * Copyright (c) 2007  Aurelien Jacobs <aurel@gnuage.org>
   *
 - * This file is part of Libav.
 + * This file is part of FFmpeg.
   *
 - * Libav is free software; you can redistribute it and/or
 + * 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.
   *
 - * Libav is distributed in the hope that it will be useful,
 + * 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 Libav; if not, write to the Free Software
 + * License along with FFmpeg; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   */
  
@@@ -58,31 -58,9 +58,14 @@@ void ff_gmc_mmx(uint8_t *dst, uint8_t *
                  int dxx, int dxy, int dyx, int dyy,
                  int shift, int r, int width, int height);
  
 +void ff_gmc_sse(uint8_t *dst, uint8_t *src,
 +                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 ff_vector_clipf_sse(float *dst, const float *src,
                           float min, float max, int len);
  
- void ff_avg_pixels8_mmx(uint8_t *block, const uint8_t *pixels,
-                         ptrdiff_t line_size, int h);
- void ff_avg_pixels16_mmx(uint8_t *block, const uint8_t *pixels,
-                          ptrdiff_t line_size, int h);
- void ff_put_pixels8_mmx(uint8_t *block, const uint8_t *pixels,
-                         ptrdiff_t line_size, int h);
- void ff_put_pixels16_mmx(uint8_t *block, const uint8_t *pixels,
-                          ptrdiff_t line_size, int h);
- void ff_avg_pixels8_mmxext(uint8_t *block, const uint8_t *pixels,
-                            ptrdiff_t line_size, int h);
- void ff_put_pixels8_mmxext(uint8_t *block, const uint8_t *pixels,
-                            ptrdiff_t line_size, int h);
- void ff_avg_pixels16_sse2(uint8_t *block, const uint8_t *pixels,
-                           ptrdiff_t line_size, int h);
- void ff_put_pixels16_sse2(uint8_t *block, const uint8_t *pixels,
-                           ptrdiff_t line_size, int h);
  void ff_avg_pixels8_x2_mmx(uint8_t *block, const uint8_t *pixels,
                             ptrdiff_t line_size, int h);
  
@@@ -96,8 -74,4 +79,8 @@@ void ff_put_pixels8_xy2_mmx(uint8_t *bl
  void ff_put_pixels16_xy2_mmx(uint8_t *block, const uint8_t *pixels,
                               ptrdiff_t line_size, int h);
  
 +
 +void ff_mmx_idct(int16_t *block);
 +void ff_mmxext_idct(int16_t *block);
 +
  #endif /* AVCODEC_X86_DSPUTIL_X86_H */
diff --combined libavcodec/x86/fpel.h
index 0000000,88d1415..2fbbfce
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,43 +1,43 @@@
 - * This file is part of Libav.
+ /*
 - * Libav is free software; you can redistribute it and/or
++ * This file is part of FFmpeg.
+  *
 - * Libav is distributed in the hope that it will be useful,
++ * 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.
+  *
 - * License along with Libav; if not, write to the Free Software
++ * 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_X86_FPEL_H
+ #define AVCODEC_X86_FPEL_H
+ #include <stddef.h>
+ #include <stdint.h>
+ void ff_avg_pixels8_mmx(uint8_t *block, const uint8_t *pixels,
+                         ptrdiff_t line_size, int h);
+ void ff_avg_pixels8_mmxext(uint8_t *block, const uint8_t *pixels,
+                            ptrdiff_t line_size, int h);
+ void ff_avg_pixels16_mmx(uint8_t *block, const uint8_t *pixels,
+                          ptrdiff_t line_size, int h);
+ void ff_avg_pixels16_sse2(uint8_t *block, const uint8_t *pixels,
+                           ptrdiff_t line_size, int h);
+ void ff_put_pixels8_mmx(uint8_t *block, const uint8_t *pixels,
+                         ptrdiff_t line_size, int h);
+ void ff_put_pixels8_mmxext(uint8_t *block, const uint8_t *pixels,
+                            ptrdiff_t line_size, int h);
+ void ff_put_pixels16_mmx(uint8_t *block, const uint8_t *pixels,
+                          ptrdiff_t line_size, int h);
+ void ff_put_pixels16_sse2(uint8_t *block, const uint8_t *pixels,
+                           ptrdiff_t line_size, int h);
+ #endif /* AVCODEC_X86_FPEL_H */
@@@ -4,20 -4,20 +4,20 @@@
   * Copyright (c) 2000, 2001 Fabrice Bellard
   * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
   *
 - * This file is part of Libav.
 + * This file is part of FFmpeg.
   *
 - * Libav is free software; you can redistribute it and/or
 + * 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.
   *
 - * Libav is distributed in the hope that it will be useful,
 + * 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 Libav; if not, write to the Free Software
 + * License along with FFmpeg; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   */
  
@@@ -25,7 -25,7 +25,7 @@@
  #include <stdint.h>
  
  #include "config.h"
- #include "dsputil_x86.h"
+ #include "fpel.h"
  #include "inline_asm.h"
  
  #if HAVE_MMX_INLINE
@@@ -2,20 -2,20 +2,20 @@@
   * Copyright (c) 2004-2005 Michael Niedermayer, Loren Merritt
   * Copyright (c) 2011 Daniel Kang
   *
 - * This file is part of Libav.
 + * This file is part of FFmpeg.
   *
 - * Libav is free software; you can redistribute it and/or
 + * 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.
   *
 - * Libav is distributed in the hope that it will be useful,
 + * 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 Libav; if not, write to the Free Software
 + * License along with FFmpeg; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   */
  
@@@ -26,7 -26,7 +26,7 @@@
  #include "libavcodec/h264qpel.h"
  #include "libavcodec/mpegvideo.h"
  #include "libavcodec/pixels.h"
- #include "dsputil_x86.h"
+ #include "fpel.h"
  
  #if HAVE_YASM
  void ff_put_pixels4_mmxext(uint8_t *block, const uint8_t *pixels,
@@@ -339,7 -339,7 +339,7 @@@ static void OPNAME ## h264_qpel ## SIZ
      DECLARE_ALIGNED(ALIGN, uint8_t, temp)[SIZE*(SIZE<8?12:24)*2 + SIZE*SIZE];\
      uint8_t * const halfHV= temp;\
      int16_t * const halfV= (int16_t*)(temp + SIZE*SIZE);\
 -    assert(((int)temp & 7) == 0);\
 +    av_assert2(((int)temp & 7) == 0);\
      ff_put_h264_qpel ## SIZE ## _hv_lowpass_ ## MMX(halfHV, halfV, src, SIZE, SIZE, stride);\
      ff_ ## OPNAME ## h264_qpel ## SIZE ## _h_lowpass_l2_ ## MMX(dst, src, halfHV, stride, SIZE);\
  }\
@@@ -349,7 -349,7 +349,7 @@@ static void OPNAME ## h264_qpel ## SIZ
      DECLARE_ALIGNED(ALIGN, uint8_t, temp)[SIZE*(SIZE<8?12:24)*2 + SIZE*SIZE];\
      uint8_t * const halfHV= temp;\
      int16_t * const halfV= (int16_t*)(temp + SIZE*SIZE);\
 -    assert(((int)temp & 7) == 0);\
 +    av_assert2(((int)temp & 7) == 0);\
      ff_put_h264_qpel ## SIZE ## _hv_lowpass_ ## MMX(halfHV, halfV, src, SIZE, SIZE, stride);\
      ff_ ## OPNAME ## h264_qpel ## SIZE ## _h_lowpass_l2_ ## MMX(dst, src+stride, halfHV, stride, SIZE);\
  }\
@@@ -359,7 -359,7 +359,7 @@@ static void OPNAME ## h264_qpel ## SIZ
      DECLARE_ALIGNED(ALIGN, uint8_t, temp)[SIZE*(SIZE<8?12:24)*2 + SIZE*SIZE];\
      uint8_t * const halfHV= temp;\
      int16_t * const halfV= (int16_t*)(temp + SIZE*SIZE);\
 -    assert(((int)temp & 7) == 0);\
 +    av_assert2(((int)temp & 7) == 0);\
      ff_put_h264_qpel ## SIZE ## _hv_lowpass_ ## MMX(halfHV, halfV, src, SIZE, SIZE, stride);\
      ff_ ## OPNAME ## pixels ## SIZE ## _l2_shift5_mmxext(dst, halfV+2, halfHV, stride, SIZE, SIZE);\
  }\
@@@ -369,7 -369,7 +369,7 @@@ static void OPNAME ## h264_qpel ## SIZ
      DECLARE_ALIGNED(ALIGN, uint8_t, temp)[SIZE*(SIZE<8?12:24)*2 + SIZE*SIZE];\
      uint8_t * const halfHV= temp;\
      int16_t * const halfV= (int16_t*)(temp + SIZE*SIZE);\
 -    assert(((int)temp & 7) == 0);\
 +    av_assert2(((int)temp & 7) == 0);\
      ff_put_h264_qpel ## SIZE ## _hv_lowpass_ ## MMX(halfHV, halfV, src, SIZE, SIZE, stride);\
      ff_ ## OPNAME ## pixels ## SIZE ## _l2_shift5_mmxext(dst, halfV+3, halfHV, stride, SIZE, SIZE);\
  }\
@@@ -3,20 -3,20 +3,20 @@@
   * Copyright (c) 2000, 2001 Fabrice Bellard
   * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
   *
 - * This file is part of Libav.
 + * This file is part of FFmpeg.
   *
 - * Libav is free software; you can redistribute it and/or
 + * 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.
   *
 - * Libav is distributed in the hope that it will be useful,
 + * 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 Libav; if not, write to the Free Software
 + * License along with FFmpeg; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   *
   * MMX optimization by Nick Kurshev <nickols_k@mail.ru>
@@@ -30,6 -30,7 +30,7 @@@
  #include "libavcodec/hpeldsp.h"
  #include "libavcodec/pixels.h"
  #include "dsputil_x86.h"
+ #include "fpel.h"
  
  void ff_put_pixels8_x2_mmxext(uint8_t *block, const uint8_t *pixels,
                                ptrdiff_t line_size, int h);
   */
  
  #include "libavutil/cpu.h"
 -#include "libavutil/internal.h"
  #include "libavutil/mem.h"
  #include "libavutil/x86/asm.h"
  #include "libavutil/x86/cpu.h"
  #include "libavcodec/vc1dsp.h"
  #include "constants.h"
- #include "dsputil_x86.h"
+ #include "fpel.h"
  #include "vc1dsp.h"
  
  #if HAVE_INLINE_ASM
@@@ -110,7 -111,6 +110,7 @@@ static void vc1_put_ver_16b_shift2_mmx(
          : "+r"(src), "+r"(dst)
          : "r"(stride), "r"(-2*stride),
            "m"(shift), "m"(rnd), "r"(9*stride-4)
 +          NAMED_CONSTRAINTS_ADD(ff_pw_9)
          : "%"REG_c, "memory"
      );
  }
@@@ -155,7 -155,6 +155,7 @@@ static void OPNAME ## vc1_hor_16b_shift
          "jnz 1b                            \n\t"\
          : "+r"(h), "+r" (src),  "+r" (dst)\
          : "r"(stride), "m"(rnd)\
 +          NAMED_CONSTRAINTS_ADD(ff_pw_128,ff_pw_9)\
          : "memory"\
      );\
  }
@@@ -214,7 -213,6 +214,7 @@@ static void OPNAME ## vc1_shift2_mmx(ui
          : "+r"(src),  "+r"(dst)\
          : "r"(offset), "r"(-2*offset), "g"(stride), "m"(rnd),\
            "g"(stride-offset)\
 +          NAMED_CONSTRAINTS_ADD(ff_pw_9)\
          : "%"REG_c, "memory"\
      );\
  }
@@@ -317,7 -315,6 +317,7 @@@ vc1_put_ver_16b_ ## NAME ## _mmx(int16_
          : "+r"(h), "+r" (src),  "+r" (dst)                              \
          : "r"(src_stride), "r"(3*src_stride),                           \
            "m"(rnd), "m"(shift)                                          \
 +          NAMED_CONSTRAINTS_ADD(ff_pw_3,ff_pw_53,ff_pw_18)              \
          : "memory"                                                      \
      );                                                                  \
  }
@@@ -355,7 -352,6 +355,7 @@@ OPNAME ## vc1_hor_16b_ ## NAME ## _mmx(
          "jnz 1b                    \n\t"                                \
          : "+r"(h), "+r" (src),  "+r" (dst)                              \
          : "r"(stride), "m"(rnd)                                         \
 +          NAMED_CONSTRAINTS_ADD(ff_pw_3,ff_pw_18,ff_pw_53,ff_pw_128)    \
          : "memory"                                                      \
      );                                                                  \
  }
@@@ -391,7 -387,6 +391,7 @@@ OPNAME ## vc1_## NAME ## _mmx(uint8_t *
          "jnz 1b                    \n\t"                                \
          : "+r"(h), "+r" (src),  "+r" (dst)                              \
          : "r"(offset), "r"(3*offset), "g"(stride), "m"(rnd)             \
 +          NAMED_CONSTRAINTS_ADD(ff_pw_53,ff_pw_18,ff_pw_3)              \
          : "memory"                                                      \
      );                                                                  \
  }