Merge commit '12f129e545e5a5844b6ad7f3eb6a438015cad8bc'
authorMichael Niedermayer <michaelni@gmx.at>
Sat, 5 Jul 2014 17:19:22 +0000 (19:19 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Sat, 5 Jul 2014 17:50:05 +0000 (19:50 +0200)
* commit '12f129e545e5a5844b6ad7f3eb6a438015cad8bc':
  x86: Unconditionally compile blockdsp and svq1enc init files

Conflicts:
libavcodec/x86/Makefile

blockdsp_mmx is renamed to blockdsp_init as we already have a blockdsp file
and _init is how all other such files are called

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/x86/Makefile
libavcodec/x86/blockdsp_init.c
libavcodec/x86/svq1enc.c

@@@ -3,7 -3,7 +3,7 @@@ OBJS                                   
  
  OBJS-$(CONFIG_AC3DSP)                  += x86/ac3dsp_init.o
  OBJS-$(CONFIG_AUDIODSP)                += x86/audiodsp_init.o
- OBJS-$(CONFIG_BLOCKDSP)                += x86/blockdsp_mmx.o
 -OBJS-$(CONFIG_BLOCKDSP)                += x86/blockdsp.o
++OBJS-$(CONFIG_BLOCKDSP)                += x86/blockdsp_init.o
  OBJS-$(CONFIG_BSWAPDSP)                += x86/bswapdsp_init.o
  OBJS-$(CONFIG_DCT)                     += x86/dct_init.o
  OBJS-$(CONFIG_DSPUTIL)                 += x86/dsputil_init.o
@@@ -46,9 -41,7 +46,9 @@@ OBJS-$(CONFIG_PRORES_LGPL_DECODER)     
  OBJS-$(CONFIG_RV30_DECODER)            += x86/rv34dsp_init.o
  OBJS-$(CONFIG_RV40_DECODER)            += x86/rv34dsp_init.o            \
                                            x86/rv40dsp_init.o
- OBJS-$(CONFIG_SVQ1_ENCODER)            += x86/svq1enc_mmx.o
+ OBJS-$(CONFIG_SVQ1_ENCODER)            += x86/svq1enc.o
 +OBJS-$(CONFIG_V210_DECODER)            += x86/v210-init.o
 +OBJS-$(CONFIG_TTA_DECODER)             += x86/ttadsp_init.o
  OBJS-$(CONFIG_TRUEHD_DECODER)          += x86/mlpdsp.o
  OBJS-$(CONFIG_VC1_DECODER)             += x86/vc1dsp_init.o
  OBJS-$(CONFIG_VORBIS_DECODER)          += x86/vorbisdsp_init.o
index 0000000,0000000..7780184
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,60 @@@
++/*
++ * 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 "config.h"
++#include "libavutil/attributes.h"
++#include "libavutil/internal.h"
++#include "libavutil/cpu.h"
++#include "libavutil/x86/cpu.h"
++#include "libavcodec/blockdsp.h"
++#include "libavcodec/version.h"
++
++void ff_clear_block_mmx(int16_t *block);
++void ff_clear_block_sse(int16_t *block);
++void ff_clear_blocks_mmx(int16_t *blocks);
++void ff_clear_blocks_sse(int16_t *blocks);
++
++#if FF_API_XVMC
++av_cold void ff_blockdsp_init_x86(BlockDSPContext *c, unsigned high_bit_depth,
++                                  AVCodecContext *avctx)
++#else
++av_cold void ff_blockdsp_init_x86(BlockDSPContext *c, unsigned high_bit_depth)
++#endif /* FF_API_XVMC */
++{
++#if HAVE_YASM
++    int cpu_flags = av_get_cpu_flags();
++
++    if (!high_bit_depth) {
++        if (EXTERNAL_MMX(cpu_flags)) {
++            c->clear_block  = ff_clear_block_mmx;
++            c->clear_blocks = ff_clear_blocks_mmx;
++        }
++
++    /* XvMCCreateBlocks() may not allocate 16-byte aligned blocks */
++    if (CONFIG_XVMC && avctx->hwaccel && avctx->hwaccel->decode_mb)
++        return;
++
++        if (EXTERNAL_SSE(cpu_flags)) {
++            c->clear_block  = ff_clear_block_sse;
++            c->clear_blocks = ff_clear_blocks_sse;
++        }
++    }
++#endif /* HAVE_YASM */
++}
index 0000000,02b0a84..01f16b1
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,73 +1,75 @@@
 - * This file is part of Libav.
+ /*
 - * Libav is free software; you can redistribute it and/or
++ * Copyright (c) 2007 Loren Merritt
+  *
 - * Libav is distributed in the hope that it will be useful,
++ * 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.
+  *
 - * 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
+  */
+ #include "config.h"
+ #include "libavutil/attributes.h"
+ #include "libavutil/cpu.h"
+ #include "libavutil/x86/asm.h"
+ #include "libavutil/x86/cpu.h"
+ #include "libavcodec/svq1enc.h"
+ #if HAVE_INLINE_ASM
+ static int ssd_int8_vs_int16_mmx(const int8_t *pix1, const int16_t *pix2,
+                                  int size)
+ {
+     int sum;
+     x86_reg i = size;
+     __asm__ volatile (
+         "pxor %%mm4, %%mm4 \n"
+         "1: \n"
+         "sub $8, %0 \n"
+         "movq (%2, %0), %%mm2 \n"
+         "movq (%3, %0, 2), %%mm0 \n"
+         "movq 8(%3, %0, 2), %%mm1 \n"
+         "punpckhbw %%mm2, %%mm3 \n"
+         "punpcklbw %%mm2, %%mm2 \n"
+         "psraw $8, %%mm3 \n"
+         "psraw $8, %%mm2 \n"
+         "psubw %%mm3, %%mm1 \n"
+         "psubw %%mm2, %%mm0 \n"
+         "pmaddwd %%mm1, %%mm1 \n"
+         "pmaddwd %%mm0, %%mm0 \n"
+         "paddd %%mm1, %%mm4 \n"
+         "paddd %%mm0, %%mm4 \n"
+         "jg 1b \n"
+         "movq %%mm4, %%mm3 \n"
+         "psrlq $32, %%mm3 \n"
+         "paddd %%mm3, %%mm4 \n"
+         "movd %%mm4, %1 \n"
+         : "+r" (i), "=r" (sum)
+         : "r" (pix1), "r" (pix2));
+     return sum;
+ }
+ #endif /* HAVE_INLINE_ASM */
+ av_cold void ff_svq1enc_init_x86(SVQ1EncContext *c)
+ {
+ #if HAVE_INLINE_ASM
+     int cpu_flags = av_get_cpu_flags();
+     if (INLINE_MMX(cpu_flags)) {
+         c->ssd_int8_vs_int16 = ssd_int8_vs_int16_mmx;
+     }
+ #endif /* HAVE_INLINE_ASM */
+ }