diff options
author | Ronald S. Bultje <rsbultje@gmail.com> | 2015-09-16 09:08:04 -0400 |
---|---|---|
committer | Ronald S. Bultje <rsbultje@gmail.com> | 2015-09-16 21:11:34 -0400 |
commit | 6354ff03833b5f64d930c195ae3801cc4061505f (patch) | |
tree | 2905e4bb526adbd1de3b885aedb834ec51481a53 /libavcodec/x86/vp9dsp_init_16bpp.c | |
parent | d64f7d42130764f19771fdf3b7b220bcfde15db4 (diff) | |
download | ffmpeg-6354ff03833b5f64d930c195ae3801cc4061505f.tar.gz |
vp9: add fullpel (put) MC SIMD for 10/12bpp.
Diffstat (limited to 'libavcodec/x86/vp9dsp_init_16bpp.c')
-rw-r--r-- | libavcodec/x86/vp9dsp_init_16bpp.c | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/libavcodec/x86/vp9dsp_init_16bpp.c b/libavcodec/x86/vp9dsp_init_16bpp.c new file mode 100644 index 0000000000..6f2c50d04a --- /dev/null +++ b/libavcodec/x86/vp9dsp_init_16bpp.c @@ -0,0 +1,65 @@ +/* + * VP9 SIMD optimizations + * + * Copyright (c) 2013 Ronald S. Bultje <rsbultje gmail com> + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU 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/attributes.h" +#include "libavutil/cpu.h" +#include "libavutil/mem.h" +#include "libavutil/x86/cpu.h" +#include "libavcodec/vp9dsp.h" +#include "libavcodec/x86/vp9dsp_init.h" + +#if HAVE_YASM + +decl_fpel_func(put, 8, mmx); +decl_fpel_func(put, 16, sse); +decl_fpel_func(put, 32, sse); +decl_fpel_func(put, 64, sse); +decl_fpel_func(put, 128, sse); +decl_fpel_func(put, 32, avx); +decl_fpel_func(put, 64, avx); +decl_fpel_func(put, 128, avx); + +#endif /* HAVE_YASM */ + +av_cold void ff_vp9dsp_init_16bpp_x86(VP9DSPContext *dsp, int bpp) +{ +#if HAVE_YASM + int cpu_flags = av_get_cpu_flags(); + + if (EXTERNAL_MMX(cpu_flags)) { + init_fpel_func(4, 0, 8, put, mmx); + } + + if (EXTERNAL_SSE(cpu_flags)) { + init_fpel_func(3, 0, 16, put, sse); + init_fpel_func(2, 0, 32, put, sse); + init_fpel_func(1, 0, 64, put, sse); + init_fpel_func(0, 0, 128, put, sse); + } + if (EXTERNAL_AVX_FAST(cpu_flags)) { + init_fpel_func(2, 0, 32, put, avx); + init_fpel_func(1, 0, 64, put, avx); + init_fpel_func(0, 0, 128, put, avx); + } + +#endif /* HAVE_YASM */ +} |