diff --git a/vp9/common/x86/vp9_loopfilter_intrin_mmx.c b/vp9/common/x86/vp9_loopfilter_intrin_mmx.c new file mode 100644 index 0000000000000000000000000000000000000000..2be9e31796b9b361b6fb74538fb805717662c57c --- /dev/null +++ b/vp9/common/x86/vp9_loopfilter_intrin_mmx.c @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2010 The WebM project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include "vp9/common/vp9_loopfilter.h" + +prototype_loopfilter(vp9_loop_filter_vertical_edge_mmx); +prototype_loopfilter(vp9_loop_filter_horizontal_edge_mmx); + +/* Horizontal MB filtering */ +void vp9_loop_filter_mbh_mmx(unsigned char *y_ptr, + unsigned char *u_ptr, unsigned char *v_ptr, + int y_stride, int uv_stride, + struct loop_filter_info *lfi) { +} + +/* Vertical MB Filtering */ +void vp9_loop_filter_mbv_mmx(unsigned char *y_ptr, + unsigned char *u_ptr, unsigned char *v_ptr, + int y_stride, int uv_stride, + struct loop_filter_info *lfi) { +} + +/* Horizontal B Filtering */ +void vp9_loop_filter_bh_mmx(unsigned char *y_ptr, + unsigned char *u_ptr, unsigned char *v_ptr, + int y_stride, int uv_stride, + struct loop_filter_info *lfi) { + +} + +void vp9_loop_filter_bhs_mmx(unsigned char *y_ptr, int y_stride, + const unsigned char *blimit) { + vp9_loop_filter_simple_horizontal_edge_mmx(y_ptr + 4 * y_stride, + y_stride, blimit); + vp9_loop_filter_simple_horizontal_edge_mmx(y_ptr + 8 * y_stride, + y_stride, blimit); + vp9_loop_filter_simple_horizontal_edge_mmx(y_ptr + 12 * y_stride, + y_stride, blimit); +} + +/* Vertical B Filtering */ +void vp9_loop_filter_bv_mmx(unsigned char *y_ptr, + unsigned char *u_ptr, unsigned char *v_ptr, + int y_stride, int uv_stride, + struct loop_filter_info *lfi) { + vp9_loop_filter_vertical_edge_mmx(y_ptr + 4, y_stride, + lfi->blim, lfi->lim, lfi->hev_thr, 2); + vp9_loop_filter_vertical_edge_mmx(y_ptr + 8, y_stride, + lfi->blim, lfi->lim, lfi->hev_thr, 2); + vp9_loop_filter_vertical_edge_mmx(y_ptr + 12, y_stride, + lfi->blim, lfi->lim, lfi->hev_thr, 2); + + if (u_ptr) + vp9_loop_filter_vertical_edge_mmx(u_ptr + 4, uv_stride, + lfi->blim, lfi->lim, lfi->hev_thr, 1); + + if (v_ptr) + vp9_loop_filter_vertical_edge_mmx(v_ptr + 4, uv_stride, + lfi->blim, lfi->lim, lfi->hev_thr, 1); +} + +void vp9_loop_filter_bvs_mmx(unsigned char *y_ptr, int y_stride, + const unsigned char *blimit) { + vp9_loop_filter_simple_vertical_edge_mmx(y_ptr + 4, y_stride, blimit); + vp9_loop_filter_simple_vertical_edge_mmx(y_ptr + 8, y_stride, blimit); + vp9_loop_filter_simple_vertical_edge_mmx(y_ptr + 12, y_stride, blimit); +} diff --git a/vp9/common/x86/vp9_loopfilter_x86.c b/vp9/common/x86/vp9_loopfilter_intrin_sse2.c similarity index 94% rename from vp9/common/x86/vp9_loopfilter_x86.c rename to vp9/common/x86/vp9_loopfilter_intrin_sse2.c index e73850dd9fe6480af93a93ce1f34b9619b7e562a..d319bf2d528233fa63a97d9f41d1b53db193b354 100644 --- a/vp9/common/x86/vp9_loopfilter_x86.c +++ b/vp9/common/x86/vp9_loopfilter_intrin_sse2.c @@ -8,84 +8,16 @@ * be found in the AUTHORS file in the root of the source tree. */ -#include <emmintrin.h> // SSE2 -#include "vpx_config.h" +#include <emmintrin.h> /* SSE2 */ #include "vp9/common/vp9_loopfilter.h" #include "vpx_ports/emmintrin_compat.h" -prototype_loopfilter(vp9_loop_filter_vertical_edge_mmx); -prototype_loopfilter(vp9_loop_filter_horizontal_edge_mmx); - prototype_loopfilter(vp9_loop_filter_vertical_edge_sse2); prototype_loopfilter(vp9_loop_filter_horizontal_edge_sse2); extern loop_filter_uvfunction vp9_loop_filter_horizontal_edge_uv_sse2; extern loop_filter_uvfunction vp9_loop_filter_vertical_edge_uv_sse2; -#if HAVE_MMX -/* Horizontal MB filtering */ -void vp9_loop_filter_mbh_mmx(unsigned char *y_ptr, - unsigned char *u_ptr, unsigned char *v_ptr, - int y_stride, int uv_stride, - struct loop_filter_info *lfi) { -} - -/* Vertical MB Filtering */ -void vp9_loop_filter_mbv_mmx(unsigned char *y_ptr, - unsigned char *u_ptr, unsigned char *v_ptr, - int y_stride, int uv_stride, - struct loop_filter_info *lfi) { -} - -/* Horizontal B Filtering */ -void vp9_loop_filter_bh_mmx(unsigned char *y_ptr, - unsigned char *u_ptr, unsigned char *v_ptr, - int y_stride, int uv_stride, - struct loop_filter_info *lfi) { - -} - -void vp9_loop_filter_bhs_mmx(unsigned char *y_ptr, int y_stride, - const unsigned char *blimit) { - vp9_loop_filter_simple_horizontal_edge_mmx(y_ptr + 4 * y_stride, - y_stride, blimit); - vp9_loop_filter_simple_horizontal_edge_mmx(y_ptr + 8 * y_stride, - y_stride, blimit); - vp9_loop_filter_simple_horizontal_edge_mmx(y_ptr + 12 * y_stride, - y_stride, blimit); -} - -/* Vertical B Filtering */ -void vp9_loop_filter_bv_mmx(unsigned char *y_ptr, - unsigned char *u_ptr, unsigned char *v_ptr, - int y_stride, int uv_stride, - struct loop_filter_info *lfi) { - vp9_loop_filter_vertical_edge_mmx(y_ptr + 4, y_stride, - lfi->blim, lfi->lim, lfi->hev_thr, 2); - vp9_loop_filter_vertical_edge_mmx(y_ptr + 8, y_stride, - lfi->blim, lfi->lim, lfi->hev_thr, 2); - vp9_loop_filter_vertical_edge_mmx(y_ptr + 12, y_stride, - lfi->blim, lfi->lim, lfi->hev_thr, 2); - - if (u_ptr) - vp9_loop_filter_vertical_edge_mmx(u_ptr + 4, uv_stride, - lfi->blim, lfi->lim, lfi->hev_thr, 1); - - if (v_ptr) - vp9_loop_filter_vertical_edge_mmx(v_ptr + 4, uv_stride, - lfi->blim, lfi->lim, lfi->hev_thr, 1); -} - -void vp9_loop_filter_bvs_mmx(unsigned char *y_ptr, int y_stride, - const unsigned char *blimit) { - vp9_loop_filter_simple_vertical_edge_mmx(y_ptr + 4, y_stride, blimit); - vp9_loop_filter_simple_vertical_edge_mmx(y_ptr + 8, y_stride, blimit); - vp9_loop_filter_simple_vertical_edge_mmx(y_ptr + 12, y_stride, blimit); -} -#endif - -#if HAVE_SSE2 - void vp9_mb_lpf_horizontal_edge_w_sse2(unsigned char *s, int p, const unsigned char *_blimit, @@ -1227,5 +1159,3 @@ void vp9_loop_filter_bvs_sse2(unsigned char *y_ptr, int y_stride, vp9_loop_filter_simple_vertical_edge_sse2(y_ptr + 8, y_stride, blimit); vp9_loop_filter_simple_vertical_edge_sse2(y_ptr + 12, y_stride, blimit); } - -#endif diff --git a/vp9/vp9_common.mk b/vp9/vp9_common.mk index 2b07d5af51f1c9e62fa1f940c4930638163f5199..714cefdcc9f0609bfc96edf1068bceecdc4004a3 100644 --- a/vp9/vp9_common.mk +++ b/vp9/vp9_common.mk @@ -83,7 +83,8 @@ VP9_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/vp9_subpixel_x86.h VP9_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/vp9_loopfilter_x86.h VP9_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/vp9_postproc_x86.h VP9_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/vp9_asm_stubs.c -VP9_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/vp9_loopfilter_x86.c +VP9_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/vp9_loopfilter_intrin_mmx.c +VP9_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/vp9_loopfilter_intrin_sse2.c VP9_COMMON_SRCS-$(CONFIG_POSTPROC) += common/vp9_postproc.h VP9_COMMON_SRCS-$(CONFIG_POSTPROC) += common/vp9_postproc.c VP9_COMMON_SRCS-$(HAVE_MMX) += common/x86/vp9_iwalsh_mmx.asm @@ -121,10 +122,10 @@ VP9_COMMON_SRCS-$(HAVE_SSE2) += common/x86/vp9_filter_sse2.c VP9_COMMON_SRCS-$(HAVE_SSE2) += common/x86/vp9_sadmxn_sse2.c ifeq ($(HAVE_SSE2),yes) vp9/common/x86/vp9_filter_sse2.c.o: CFLAGS += -msse2 -vp9/common/x86/vp9_loopfilter_x86.c.o: CFLAGS += -msse2 +vp9/common/x86/vp9_loopfilter_intrin_sse2.c.o: CFLAGS += -msse2 vp9/common/x86/vp9_sadmxn_sse2.c.o: CFLAGS += -msse2 vp9/common/x86/vp9_filter_sse2.c.d: CFLAGS += -msse2 -vp9/common/x86/vp9_loopfilter_x86.c.d: CFLAGS += -msse2 +vp9/common/x86/vp9_loopfilter_intrin_sse2.c.d: CFLAGS += -msse2 vp9/common/x86/vp9_sadmxn_sse2.c.d: CFLAGS += -msse2 endif