From 55f74c59c735b589f253ba1427a1fec1f6837039 Mon Sep 17 00:00:00 2001 From: John Koleszar Date: Thu, 12 Jan 2012 16:15:42 -0800 Subject: [PATCH] RTCD: add loopfilter functions This commit continues the process of converting to the new RTCD system. Change-Id: Ic8a4047d72ff3a54ec98977dd90e70c13213db71 --- vp8/common/arm/arm_systemdependent.c | 20 ---- vp8/common/arm/loopfilter_arm.c | 5 + vp8/common/arm/loopfilter_arm.h | 93 ------------------- vp8/common/generic/systemdependent.c | 9 -- vp8/common/loopfilter.c | 133 +++++---------------------- vp8/common/loopfilter.h | 83 +---------------- vp8/common/loopfilter_filters.c | 76 +++++++++++++++ vp8/common/onyxc_int.h | 1 - vp8/common/rtcd_defs.sh | 56 +++++++++++ vp8/common/x86/loopfilter_x86.c | 9 ++ vp8/common/x86/loopfilter_x86.h | 100 -------------------- vp8/common/x86/x86_systemdependent.c | 18 ---- vp8/decoder/threading.c | 32 +++---- vp8/vp8_common.mk | 2 - 14 files changed, 189 insertions(+), 448 deletions(-) delete mode 100644 vp8/common/arm/loopfilter_arm.h delete mode 100644 vp8/common/x86/loopfilter_x86.h diff --git a/vp8/common/arm/arm_systemdependent.c b/vp8/common/arm/arm_systemdependent.c index 43a0b7745..9b1f2dc9e 100644 --- a/vp8/common/arm/arm_systemdependent.c +++ b/vp8/common/arm/arm_systemdependent.c @@ -47,17 +47,6 @@ void vp8_arch_arm_common_init(VP8_COMMON *ctx) rtcd->idct.idct16 = vp8_short_idct4x4llm_v6_dual; rtcd->idct.iwalsh16 = vp8_short_inv_walsh4x4_v6; - rtcd->loopfilter.normal_mb_v = vp8_loop_filter_mbv_armv6; - rtcd->loopfilter.normal_b_v = vp8_loop_filter_bv_armv6; - rtcd->loopfilter.normal_mb_h = vp8_loop_filter_mbh_armv6; - rtcd->loopfilter.normal_b_h = vp8_loop_filter_bh_armv6; - rtcd->loopfilter.simple_mb_v = - vp8_loop_filter_simple_vertical_edge_armv6; - rtcd->loopfilter.simple_b_v = vp8_loop_filter_bvs_armv6; - rtcd->loopfilter.simple_mb_h = - vp8_loop_filter_simple_horizontal_edge_armv6; - rtcd->loopfilter.simple_b_h = vp8_loop_filter_bhs_armv6; - rtcd->recon.copy16x16 = vp8_copy_mem16x16_v6; rtcd->recon.copy8x8 = vp8_copy_mem8x8_v6; rtcd->recon.copy8x4 = vp8_copy_mem8x4_v6; @@ -80,15 +69,6 @@ void vp8_arch_arm_common_init(VP8_COMMON *ctx) rtcd->idct.idct16 = vp8_short_idct4x4llm_neon; rtcd->idct.iwalsh16 = vp8_short_inv_walsh4x4_neon; - rtcd->loopfilter.normal_mb_v = vp8_loop_filter_mbv_neon; - rtcd->loopfilter.normal_b_v = vp8_loop_filter_bv_neon; - rtcd->loopfilter.normal_mb_h = vp8_loop_filter_mbh_neon; - rtcd->loopfilter.normal_b_h = vp8_loop_filter_bh_neon; - rtcd->loopfilter.simple_mb_v = vp8_loop_filter_mbvs_neon; - rtcd->loopfilter.simple_b_v = vp8_loop_filter_bvs_neon; - rtcd->loopfilter.simple_mb_h = vp8_loop_filter_mbhs_neon; - rtcd->loopfilter.simple_b_h = vp8_loop_filter_bhs_neon; - rtcd->recon.copy16x16 = vp8_copy_mem16x16_neon; rtcd->recon.copy8x8 = vp8_copy_mem8x8_neon; rtcd->recon.copy8x4 = vp8_copy_mem8x4_neon; diff --git a/vp8/common/arm/loopfilter_arm.c b/vp8/common/arm/loopfilter_arm.c index 4e253e1aa..b8f9bd90e 100644 --- a/vp8/common/arm/loopfilter_arm.c +++ b/vp8/common/arm/loopfilter_arm.c @@ -10,9 +10,14 @@ #include "vpx_config.h" +#include "vpx_rtcd.h" #include "vp8/common/loopfilter.h" #include "vp8/common/onyxc_int.h" +#define prototype_loopfilter(sym) \ + void sym(unsigned char *src, int pitch, const unsigned char *blimit,\ + const unsigned char *limit, const unsigned char *thresh, int count) + #if HAVE_MEDIA extern prototype_loopfilter(vp8_loop_filter_horizontal_edge_armv6); extern prototype_loopfilter(vp8_loop_filter_vertical_edge_armv6); diff --git a/vp8/common/arm/loopfilter_arm.h b/vp8/common/arm/loopfilter_arm.h deleted file mode 100644 index 28d454e89..000000000 --- a/vp8/common/arm/loopfilter_arm.h +++ /dev/null @@ -1,93 +0,0 @@ -/* - * 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. - */ - - -#ifndef LOOPFILTER_ARM_H -#define LOOPFILTER_ARM_H - -#include "vpx_config.h" - -#if HAVE_MEDIA -extern prototype_loopfilter_block(vp8_loop_filter_mbv_armv6); -extern prototype_loopfilter_block(vp8_loop_filter_bv_armv6); -extern prototype_loopfilter_block(vp8_loop_filter_mbh_armv6); -extern prototype_loopfilter_block(vp8_loop_filter_bh_armv6); -extern prototype_simple_loopfilter(vp8_loop_filter_bvs_armv6); -extern prototype_simple_loopfilter(vp8_loop_filter_bhs_armv6); -extern prototype_simple_loopfilter(vp8_loop_filter_simple_horizontal_edge_armv6); -extern prototype_simple_loopfilter(vp8_loop_filter_simple_vertical_edge_armv6); - -#if !CONFIG_RUNTIME_CPU_DETECT -#undef vp8_lf_normal_mb_v -#define vp8_lf_normal_mb_v vp8_loop_filter_mbv_armv6 - -#undef vp8_lf_normal_b_v -#define vp8_lf_normal_b_v vp8_loop_filter_bv_armv6 - -#undef vp8_lf_normal_mb_h -#define vp8_lf_normal_mb_h vp8_loop_filter_mbh_armv6 - -#undef vp8_lf_normal_b_h -#define vp8_lf_normal_b_h vp8_loop_filter_bh_armv6 - -#undef vp8_lf_simple_mb_v -#define vp8_lf_simple_mb_v vp8_loop_filter_simple_vertical_edge_armv6 - -#undef vp8_lf_simple_b_v -#define vp8_lf_simple_b_v vp8_loop_filter_bvs_armv6 - -#undef vp8_lf_simple_mb_h -#define vp8_lf_simple_mb_h vp8_loop_filter_simple_horizontal_edge_armv6 - -#undef vp8_lf_simple_b_h -#define vp8_lf_simple_b_h vp8_loop_filter_bhs_armv6 -#endif /* !CONFIG_RUNTIME_CPU_DETECT */ - -#endif /* HAVE_MEDIA */ - -#if HAVE_NEON -extern prototype_loopfilter_block(vp8_loop_filter_mbv_neon); -extern prototype_loopfilter_block(vp8_loop_filter_bv_neon); -extern prototype_loopfilter_block(vp8_loop_filter_mbh_neon); -extern prototype_loopfilter_block(vp8_loop_filter_bh_neon); -extern prototype_simple_loopfilter(vp8_loop_filter_mbvs_neon); -extern prototype_simple_loopfilter(vp8_loop_filter_bvs_neon); -extern prototype_simple_loopfilter(vp8_loop_filter_mbhs_neon); -extern prototype_simple_loopfilter(vp8_loop_filter_bhs_neon); - -#if !CONFIG_RUNTIME_CPU_DETECT -#undef vp8_lf_normal_mb_v -#define vp8_lf_normal_mb_v vp8_loop_filter_mbv_neon - -#undef vp8_lf_normal_b_v -#define vp8_lf_normal_b_v vp8_loop_filter_bv_neon - -#undef vp8_lf_normal_mb_h -#define vp8_lf_normal_mb_h vp8_loop_filter_mbh_neon - -#undef vp8_lf_normal_b_h -#define vp8_lf_normal_b_h vp8_loop_filter_bh_neon - -#undef vp8_lf_simple_mb_v -#define vp8_lf_simple_mb_v vp8_loop_filter_mbvs_neon - -#undef vp8_lf_simple_b_v -#define vp8_lf_simple_b_v vp8_loop_filter_bvs_neon - -#undef vp8_lf_simple_mb_h -#define vp8_lf_simple_mb_h vp8_loop_filter_mbhs_neon - -#undef vp8_lf_simple_b_h -#define vp8_lf_simple_b_h vp8_loop_filter_bhs_neon -#endif /* !CONFIG_RUNTIME_CPU_DETECT */ - -#endif /* HAVE_NEON */ - -#endif /* LOOPFILTER_ARM_H */ diff --git a/vp8/common/generic/systemdependent.c b/vp8/common/generic/systemdependent.c index 05c54fb60..7f43bf54f 100644 --- a/vp8/common/generic/systemdependent.c +++ b/vp8/common/generic/systemdependent.c @@ -100,15 +100,6 @@ void vp8_machine_specific_config(VP8_COMMON *ctx) rtcd->subpix.bilinear8x4 = vp8_bilinear_predict8x4_c; rtcd->subpix.bilinear4x4 = vp8_bilinear_predict4x4_c; - rtcd->loopfilter.normal_mb_v = vp8_loop_filter_mbv_c; - rtcd->loopfilter.normal_b_v = vp8_loop_filter_bv_c; - rtcd->loopfilter.normal_mb_h = vp8_loop_filter_mbh_c; - rtcd->loopfilter.normal_b_h = vp8_loop_filter_bh_c; - rtcd->loopfilter.simple_mb_v = vp8_loop_filter_simple_vertical_edge_c; - rtcd->loopfilter.simple_b_v = vp8_loop_filter_bvs_c; - rtcd->loopfilter.simple_mb_h = vp8_loop_filter_simple_horizontal_edge_c; - rtcd->loopfilter.simple_b_h = vp8_loop_filter_bhs_c; - #if CONFIG_POSTPROC || (CONFIG_VP8_ENCODER && CONFIG_INTERNAL_STATS) rtcd->postproc.down = vp8_mbpost_proc_down_c; rtcd->postproc.across = vp8_mbpost_proc_across_ip_c; diff --git a/vp8/common/loopfilter.c b/vp8/common/loopfilter.c index a38b49eb9..66b280d33 100644 --- a/vp8/common/loopfilter.c +++ b/vp8/common/loopfilter.c @@ -10,96 +10,13 @@ #include "vpx_config.h" +#include "vpx_rtcd.h" #include "loopfilter.h" #include "onyxc_int.h" #include "vpx_mem/vpx_mem.h" typedef unsigned char uc; -prototype_loopfilter(vp8_loop_filter_horizontal_edge_c); -prototype_loopfilter(vp8_loop_filter_vertical_edge_c); -prototype_loopfilter(vp8_mbloop_filter_horizontal_edge_c); -prototype_loopfilter(vp8_mbloop_filter_vertical_edge_c); - -prototype_simple_loopfilter(vp8_loop_filter_simple_horizontal_edge_c); -prototype_simple_loopfilter(vp8_loop_filter_simple_vertical_edge_c); - -/* Horizontal MB filtering */ -void vp8_loop_filter_mbh_c(unsigned char *y_ptr, unsigned char *u_ptr, - unsigned char *v_ptr, int y_stride, int uv_stride, - loop_filter_info *lfi) -{ - vp8_mbloop_filter_horizontal_edge_c(y_ptr, y_stride, lfi->mblim, lfi->lim, lfi->hev_thr, 2); - - if (u_ptr) - vp8_mbloop_filter_horizontal_edge_c(u_ptr, uv_stride, lfi->mblim, lfi->lim, lfi->hev_thr, 1); - - if (v_ptr) - vp8_mbloop_filter_horizontal_edge_c(v_ptr, uv_stride, lfi->mblim, lfi->lim, lfi->hev_thr, 1); -} - -/* Vertical MB Filtering */ -void vp8_loop_filter_mbv_c(unsigned char *y_ptr, unsigned char *u_ptr, - unsigned char *v_ptr, int y_stride, int uv_stride, - loop_filter_info *lfi) -{ - vp8_mbloop_filter_vertical_edge_c(y_ptr, y_stride, lfi->mblim, lfi->lim, lfi->hev_thr, 2); - - if (u_ptr) - vp8_mbloop_filter_vertical_edge_c(u_ptr, uv_stride, lfi->mblim, lfi->lim, lfi->hev_thr, 1); - - if (v_ptr) - vp8_mbloop_filter_vertical_edge_c(v_ptr, uv_stride, lfi->mblim, lfi->lim, lfi->hev_thr, 1); -} - -/* Horizontal B Filtering */ -void vp8_loop_filter_bh_c(unsigned char *y_ptr, unsigned char *u_ptr, - unsigned char *v_ptr, int y_stride, int uv_stride, - loop_filter_info *lfi) -{ - vp8_loop_filter_horizontal_edge_c(y_ptr + 4 * y_stride, y_stride, lfi->blim, lfi->lim, lfi->hev_thr, 2); - vp8_loop_filter_horizontal_edge_c(y_ptr + 8 * y_stride, y_stride, lfi->blim, lfi->lim, lfi->hev_thr, 2); - vp8_loop_filter_horizontal_edge_c(y_ptr + 12 * y_stride, y_stride, lfi->blim, lfi->lim, lfi->hev_thr, 2); - - if (u_ptr) - vp8_loop_filter_horizontal_edge_c(u_ptr + 4 * uv_stride, uv_stride, lfi->blim, lfi->lim, lfi->hev_thr, 1); - - if (v_ptr) - vp8_loop_filter_horizontal_edge_c(v_ptr + 4 * uv_stride, uv_stride, lfi->blim, lfi->lim, lfi->hev_thr, 1); -} - -void vp8_loop_filter_bhs_c(unsigned char *y_ptr, int y_stride, - const unsigned char *blimit) -{ - vp8_loop_filter_simple_horizontal_edge_c(y_ptr + 4 * y_stride, y_stride, blimit); - vp8_loop_filter_simple_horizontal_edge_c(y_ptr + 8 * y_stride, y_stride, blimit); - vp8_loop_filter_simple_horizontal_edge_c(y_ptr + 12 * y_stride, y_stride, blimit); -} - -/* Vertical B Filtering */ -void vp8_loop_filter_bv_c(unsigned char *y_ptr, unsigned char *u_ptr, - unsigned char *v_ptr, int y_stride, int uv_stride, - loop_filter_info *lfi) -{ - vp8_loop_filter_vertical_edge_c(y_ptr + 4, y_stride, lfi->blim, lfi->lim, lfi->hev_thr, 2); - vp8_loop_filter_vertical_edge_c(y_ptr + 8, y_stride, lfi->blim, lfi->lim, lfi->hev_thr, 2); - vp8_loop_filter_vertical_edge_c(y_ptr + 12, y_stride, lfi->blim, lfi->lim, lfi->hev_thr, 2); - - if (u_ptr) - vp8_loop_filter_vertical_edge_c(u_ptr + 4, uv_stride, lfi->blim, lfi->lim, lfi->hev_thr, 1); - - if (v_ptr) - vp8_loop_filter_vertical_edge_c(v_ptr + 4, uv_stride, lfi->blim, lfi->lim, lfi->hev_thr, 1); -} - -void vp8_loop_filter_bvs_c(unsigned char *y_ptr, int y_stride, - const unsigned char *blimit) -{ - vp8_loop_filter_simple_vertical_edge_c(y_ptr + 4, y_stride, blimit); - vp8_loop_filter_simple_vertical_edge_c(y_ptr + 8, y_stride, blimit); - vp8_loop_filter_simple_vertical_edge_c(y_ptr + 12, y_stride, blimit); -} - static void lf_init_lut(loop_filter_info_n *lfi) { int filt_lvl; @@ -335,39 +252,39 @@ void vp8_loop_filter_frame lfi.hev_thr = lfi_n->hev_thr[hev_index]; if (mb_col > 0) - LF_INVOKE(&cm->rtcd.loopfilter, normal_mb_v) + vp8_loop_filter_mbv (y_ptr, u_ptr, v_ptr, post->y_stride, post->uv_stride, &lfi); if (!skip_lf) - LF_INVOKE(&cm->rtcd.loopfilter, normal_b_v) + vp8_loop_filter_bv (y_ptr, u_ptr, v_ptr, post->y_stride, post->uv_stride, &lfi); /* don't apply across umv border */ if (mb_row > 0) - LF_INVOKE(&cm->rtcd.loopfilter, normal_mb_h) + vp8_loop_filter_mbh (y_ptr, u_ptr, v_ptr, post->y_stride, post->uv_stride, &lfi); if (!skip_lf) - LF_INVOKE(&cm->rtcd.loopfilter, normal_b_h) + vp8_loop_filter_bh (y_ptr, u_ptr, v_ptr, post->y_stride, post->uv_stride, &lfi); } else { if (mb_col > 0) - LF_INVOKE(&cm->rtcd.loopfilter, simple_mb_v) + vp8_loop_filter_simple_mbv (y_ptr, post->y_stride, lfi_n->mblim[filter_level]); if (!skip_lf) - LF_INVOKE(&cm->rtcd.loopfilter, simple_b_v) + vp8_loop_filter_simple_bv (y_ptr, post->y_stride, lfi_n->blim[filter_level]); /* don't apply across umv border */ if (mb_row > 0) - LF_INVOKE(&cm->rtcd.loopfilter, simple_mb_h) + vp8_loop_filter_simple_mbh (y_ptr, post->y_stride, lfi_n->mblim[filter_level]); if (!skip_lf) - LF_INVOKE(&cm->rtcd.loopfilter, simple_b_h) + vp8_loop_filter_simple_bh (y_ptr, post->y_stride, lfi_n->blim[filter_level]); } } @@ -446,39 +363,39 @@ void vp8_loop_filter_frame_yonly lfi.hev_thr = lfi_n->hev_thr[hev_index]; if (mb_col > 0) - LF_INVOKE(&cm->rtcd.loopfilter, normal_mb_v) + vp8_loop_filter_mbv (y_ptr, 0, 0, post->y_stride, 0, &lfi); if (!skip_lf) - LF_INVOKE(&cm->rtcd.loopfilter, normal_b_v) + vp8_loop_filter_bv (y_ptr, 0, 0, post->y_stride, 0, &lfi); /* don't apply across umv border */ if (mb_row > 0) - LF_INVOKE(&cm->rtcd.loopfilter, normal_mb_h) + vp8_loop_filter_mbh (y_ptr, 0, 0, post->y_stride, 0, &lfi); if (!skip_lf) - LF_INVOKE(&cm->rtcd.loopfilter, normal_b_h) + vp8_loop_filter_bh (y_ptr, 0, 0, post->y_stride, 0, &lfi); } else { if (mb_col > 0) - LF_INVOKE(&cm->rtcd.loopfilter, simple_mb_v) + vp8_loop_filter_simple_mbv (y_ptr, post->y_stride, lfi_n->mblim[filter_level]); if (!skip_lf) - LF_INVOKE(&cm->rtcd.loopfilter, simple_b_v) + vp8_loop_filter_simple_bv (y_ptr, post->y_stride, lfi_n->blim[filter_level]); /* don't apply across umv border */ if (mb_row > 0) - LF_INVOKE(&cm->rtcd.loopfilter, simple_mb_h) + vp8_loop_filter_simple_mbh (y_ptr, post->y_stride, lfi_n->mblim[filter_level]); if (!skip_lf) - LF_INVOKE(&cm->rtcd.loopfilter, simple_b_h) + vp8_loop_filter_simple_bh (y_ptr, post->y_stride, lfi_n->blim[filter_level]); } } @@ -578,35 +495,35 @@ void vp8_loop_filter_partial_frame lfi.hev_thr = lfi_n->hev_thr[hev_index]; if (mb_col > 0) - LF_INVOKE(&cm->rtcd.loopfilter, normal_mb_v) + vp8_loop_filter_mbv (y_ptr, 0, 0, post->y_stride, 0, &lfi); if (!skip_lf) - LF_INVOKE(&cm->rtcd.loopfilter, normal_b_v) + vp8_loop_filter_bv (y_ptr, 0, 0, post->y_stride, 0, &lfi); - LF_INVOKE(&cm->rtcd.loopfilter, normal_mb_h) + vp8_loop_filter_mbh (y_ptr, 0, 0, post->y_stride, 0, &lfi); if (!skip_lf) - LF_INVOKE(&cm->rtcd.loopfilter, normal_b_h) + vp8_loop_filter_bh (y_ptr, 0, 0, post->y_stride, 0, &lfi); } else { if (mb_col > 0) - LF_INVOKE(&cm->rtcd.loopfilter, simple_mb_v) + vp8_loop_filter_simple_mbv (y_ptr, post->y_stride, lfi_n->mblim[filter_level]); if (!skip_lf) - LF_INVOKE(&cm->rtcd.loopfilter, simple_b_v) + vp8_loop_filter_simple_bv (y_ptr, post->y_stride, lfi_n->blim[filter_level]); - LF_INVOKE(&cm->rtcd.loopfilter, simple_mb_h) + vp8_loop_filter_simple_mbh (y_ptr, post->y_stride, lfi_n->mblim[filter_level]); if (!skip_lf) - LF_INVOKE(&cm->rtcd.loopfilter, simple_b_h) + vp8_loop_filter_simple_bh (y_ptr, post->y_stride, lfi_n->blim[filter_level]); } } diff --git a/vp8/common/loopfilter.h b/vp8/common/loopfilter.h index 340339a91..6a4ea0fb5 100644 --- a/vp8/common/loopfilter.h +++ b/vp8/common/loopfilter.h @@ -14,6 +14,7 @@ #include "vpx_ports/mem.h" #include "vpx_config.h" +#include "vpx_rtcd.h" #define MAX_LOOP_FILTER 63 /* fraction of total macroblock rows to be used in fast filter level picking */ @@ -46,7 +47,7 @@ typedef struct unsigned char mode_lf_lut[10]; } loop_filter_info_n; -typedef struct +typedef struct loop_filter_info { const unsigned char * mblim; const unsigned char * blim; @@ -55,86 +56,6 @@ typedef struct } loop_filter_info; -#define prototype_loopfilter(sym) \ - void sym(unsigned char *src, int pitch, const unsigned char *blimit,\ - const unsigned char *limit, const unsigned char *thresh, int count) - -#define prototype_loopfilter_block(sym) \ - void sym(unsigned char *y, unsigned char *u, unsigned char *v, \ - int ystride, int uv_stride, loop_filter_info *lfi) - -#define prototype_simple_loopfilter(sym) \ - void sym(unsigned char *y, int ystride, const unsigned char *blimit) - -#if ARCH_X86 || ARCH_X86_64 -#include "x86/loopfilter_x86.h" -#endif - -#if ARCH_ARM -#include "arm/loopfilter_arm.h" -#endif - -#ifndef vp8_lf_normal_mb_v -#define vp8_lf_normal_mb_v vp8_loop_filter_mbv_c -#endif -extern prototype_loopfilter_block(vp8_lf_normal_mb_v); - -#ifndef vp8_lf_normal_b_v -#define vp8_lf_normal_b_v vp8_loop_filter_bv_c -#endif -extern prototype_loopfilter_block(vp8_lf_normal_b_v); - -#ifndef vp8_lf_normal_mb_h -#define vp8_lf_normal_mb_h vp8_loop_filter_mbh_c -#endif -extern prototype_loopfilter_block(vp8_lf_normal_mb_h); - -#ifndef vp8_lf_normal_b_h -#define vp8_lf_normal_b_h vp8_loop_filter_bh_c -#endif -extern prototype_loopfilter_block(vp8_lf_normal_b_h); - -#ifndef vp8_lf_simple_mb_v -#define vp8_lf_simple_mb_v vp8_loop_filter_simple_vertical_edge_c -#endif -extern prototype_simple_loopfilter(vp8_lf_simple_mb_v); - -#ifndef vp8_lf_simple_b_v -#define vp8_lf_simple_b_v vp8_loop_filter_bvs_c -#endif -extern prototype_simple_loopfilter(vp8_lf_simple_b_v); - -#ifndef vp8_lf_simple_mb_h -#define vp8_lf_simple_mb_h vp8_loop_filter_simple_horizontal_edge_c -#endif -extern prototype_simple_loopfilter(vp8_lf_simple_mb_h); - -#ifndef vp8_lf_simple_b_h -#define vp8_lf_simple_b_h vp8_loop_filter_bhs_c -#endif -extern prototype_simple_loopfilter(vp8_lf_simple_b_h); - -typedef prototype_loopfilter_block((*vp8_lf_block_fn_t)); -typedef prototype_simple_loopfilter((*vp8_slf_block_fn_t)); - -typedef struct -{ - vp8_lf_block_fn_t normal_mb_v; - vp8_lf_block_fn_t normal_b_v; - vp8_lf_block_fn_t normal_mb_h; - vp8_lf_block_fn_t normal_b_h; - vp8_slf_block_fn_t simple_mb_v; - vp8_slf_block_fn_t simple_b_v; - vp8_slf_block_fn_t simple_mb_h; - vp8_slf_block_fn_t simple_b_h; -} vp8_loopfilter_rtcd_vtable_t; - -#if CONFIG_RUNTIME_CPU_DETECT -#define LF_INVOKE(ctx,fn) (ctx)->fn -#else -#define LF_INVOKE(ctx,fn) vp8_lf_##fn -#endif - typedef void loop_filter_uvfunction ( unsigned char *u, /* source pointer */ diff --git a/vp8/common/loopfilter_filters.c b/vp8/common/loopfilter_filters.c index 1412797c2..60a7ff262 100644 --- a/vp8/common/loopfilter_filters.c +++ b/vp8/common/loopfilter_filters.c @@ -352,3 +352,79 @@ void vp8_loop_filter_simple_vertical_edge_c while (++i < 16); } + +/* Horizontal MB filtering */ +void vp8_loop_filter_mbh_c(unsigned char *y_ptr, unsigned char *u_ptr, + unsigned char *v_ptr, int y_stride, int uv_stride, + loop_filter_info *lfi) +{ + vp8_mbloop_filter_horizontal_edge_c(y_ptr, y_stride, lfi->mblim, lfi->lim, lfi->hev_thr, 2); + + if (u_ptr) + vp8_mbloop_filter_horizontal_edge_c(u_ptr, uv_stride, lfi->mblim, lfi->lim, lfi->hev_thr, 1); + + if (v_ptr) + vp8_mbloop_filter_horizontal_edge_c(v_ptr, uv_stride, lfi->mblim, lfi->lim, lfi->hev_thr, 1); +} + +/* Vertical MB Filtering */ +void vp8_loop_filter_mbv_c(unsigned char *y_ptr, unsigned char *u_ptr, + unsigned char *v_ptr, int y_stride, int uv_stride, + loop_filter_info *lfi) +{ + vp8_mbloop_filter_vertical_edge_c(y_ptr, y_stride, lfi->mblim, lfi->lim, lfi->hev_thr, 2); + + if (u_ptr) + vp8_mbloop_filter_vertical_edge_c(u_ptr, uv_stride, lfi->mblim, lfi->lim, lfi->hev_thr, 1); + + if (v_ptr) + vp8_mbloop_filter_vertical_edge_c(v_ptr, uv_stride, lfi->mblim, lfi->lim, lfi->hev_thr, 1); +} + +/* Horizontal B Filtering */ +void vp8_loop_filter_bh_c(unsigned char *y_ptr, unsigned char *u_ptr, + unsigned char *v_ptr, int y_stride, int uv_stride, + loop_filter_info *lfi) +{ + vp8_loop_filter_horizontal_edge_c(y_ptr + 4 * y_stride, y_stride, lfi->blim, lfi->lim, lfi->hev_thr, 2); + vp8_loop_filter_horizontal_edge_c(y_ptr + 8 * y_stride, y_stride, lfi->blim, lfi->lim, lfi->hev_thr, 2); + vp8_loop_filter_horizontal_edge_c(y_ptr + 12 * y_stride, y_stride, lfi->blim, lfi->lim, lfi->hev_thr, 2); + + if (u_ptr) + vp8_loop_filter_horizontal_edge_c(u_ptr + 4 * uv_stride, uv_stride, lfi->blim, lfi->lim, lfi->hev_thr, 1); + + if (v_ptr) + vp8_loop_filter_horizontal_edge_c(v_ptr + 4 * uv_stride, uv_stride, lfi->blim, lfi->lim, lfi->hev_thr, 1); +} + +void vp8_loop_filter_bhs_c(unsigned char *y_ptr, int y_stride, + const unsigned char *blimit) +{ + vp8_loop_filter_simple_horizontal_edge_c(y_ptr + 4 * y_stride, y_stride, blimit); + vp8_loop_filter_simple_horizontal_edge_c(y_ptr + 8 * y_stride, y_stride, blimit); + vp8_loop_filter_simple_horizontal_edge_c(y_ptr + 12 * y_stride, y_stride, blimit); +} + +/* Vertical B Filtering */ +void vp8_loop_filter_bv_c(unsigned char *y_ptr, unsigned char *u_ptr, + unsigned char *v_ptr, int y_stride, int uv_stride, + loop_filter_info *lfi) +{ + vp8_loop_filter_vertical_edge_c(y_ptr + 4, y_stride, lfi->blim, lfi->lim, lfi->hev_thr, 2); + vp8_loop_filter_vertical_edge_c(y_ptr + 8, y_stride, lfi->blim, lfi->lim, lfi->hev_thr, 2); + vp8_loop_filter_vertical_edge_c(y_ptr + 12, y_stride, lfi->blim, lfi->lim, lfi->hev_thr, 2); + + if (u_ptr) + vp8_loop_filter_vertical_edge_c(u_ptr + 4, uv_stride, lfi->blim, lfi->lim, lfi->hev_thr, 1); + + if (v_ptr) + vp8_loop_filter_vertical_edge_c(v_ptr + 4, uv_stride, lfi->blim, lfi->lim, lfi->hev_thr, 1); +} + +void vp8_loop_filter_bvs_c(unsigned char *y_ptr, int y_stride, + const unsigned char *blimit) +{ + vp8_loop_filter_simple_vertical_edge_c(y_ptr + 4, y_stride, blimit); + vp8_loop_filter_simple_vertical_edge_c(y_ptr + 8, y_stride, blimit); + vp8_loop_filter_simple_vertical_edge_c(y_ptr + 12, y_stride, blimit); +} diff --git a/vp8/common/onyxc_int.h b/vp8/common/onyxc_int.h index 63022f5e4..b4875d83a 100644 --- a/vp8/common/onyxc_int.h +++ b/vp8/common/onyxc_int.h @@ -76,7 +76,6 @@ typedef struct VP8_COMMON_RTCD vp8_idct_rtcd_vtable_t idct; vp8_recon_rtcd_vtable_t recon; vp8_subpix_rtcd_vtable_t subpix; - vp8_loopfilter_rtcd_vtable_t loopfilter; #if CONFIG_POSTPROC vp8_postproc_rtcd_vtable_t postproc; #endif diff --git a/vp8/common/rtcd_defs.sh b/vp8/common/rtcd_defs.sh index 0fb40f731..44218d448 100644 --- a/vp8/common/rtcd_defs.sh +++ b/vp8/common/rtcd_defs.sh @@ -1,10 +1,14 @@ common_forward_decls() { cat <subpix.bilinear8x4 = vp8_bilinear_predict8x4_mmx; rtcd->subpix.bilinear4x4 = vp8_bilinear_predict4x4_mmx; - rtcd->loopfilter.normal_mb_v = vp8_loop_filter_mbv_mmx; - rtcd->loopfilter.normal_b_v = vp8_loop_filter_bv_mmx; - rtcd->loopfilter.normal_mb_h = vp8_loop_filter_mbh_mmx; - rtcd->loopfilter.normal_b_h = vp8_loop_filter_bh_mmx; - rtcd->loopfilter.simple_mb_v = vp8_loop_filter_simple_vertical_edge_mmx; - rtcd->loopfilter.simple_b_v = vp8_loop_filter_bvs_mmx; - rtcd->loopfilter.simple_mb_h = vp8_loop_filter_simple_horizontal_edge_mmx; - rtcd->loopfilter.simple_b_h = vp8_loop_filter_bhs_mmx; - #if CONFIG_POSTPROC rtcd->postproc.down = vp8_mbpost_proc_down_mmx; /*rtcd->postproc.across = vp8_mbpost_proc_across_ip_c;*/ @@ -93,15 +84,6 @@ void vp8_arch_x86_common_init(VP8_COMMON *ctx) rtcd->subpix.bilinear16x16 = vp8_bilinear_predict16x16_sse2; rtcd->subpix.bilinear8x8 = vp8_bilinear_predict8x8_sse2; - rtcd->loopfilter.normal_mb_v = vp8_loop_filter_mbv_sse2; - rtcd->loopfilter.normal_b_v = vp8_loop_filter_bv_sse2; - rtcd->loopfilter.normal_mb_h = vp8_loop_filter_mbh_sse2; - rtcd->loopfilter.normal_b_h = vp8_loop_filter_bh_sse2; - rtcd->loopfilter.simple_mb_v = vp8_loop_filter_simple_vertical_edge_sse2; - rtcd->loopfilter.simple_b_v = vp8_loop_filter_bvs_sse2; - rtcd->loopfilter.simple_mb_h = vp8_loop_filter_simple_horizontal_edge_sse2; - rtcd->loopfilter.simple_b_h = vp8_loop_filter_bhs_sse2; - #if CONFIG_POSTPROC rtcd->postproc.down = vp8_mbpost_proc_down_xmm; rtcd->postproc.across = vp8_mbpost_proc_across_ip_xmm; diff --git a/vp8/decoder/threading.c b/vp8/decoder/threading.c index 23c5da4e0..b1932512a 100644 --- a/vp8/decoder/threading.c +++ b/vp8/decoder/threading.c @@ -442,39 +442,39 @@ static THREAD_FUNCTION thread_decoding_proc(void *p_data) lfi.hev_thr = lfi_n->hev_thr[hev_index]; if (mb_col > 0) - LF_INVOKE(&pc->rtcd.loopfilter, normal_mb_v) + vp8_loop_filter_mbv (xd->dst.y_buffer, xd->dst.u_buffer, xd->dst.v_buffer, recon_y_stride, recon_uv_stride, &lfi); if (!skip_lf) - LF_INVOKE(&pc->rtcd.loopfilter, normal_b_v) + vp8_loop_filter_bv (xd->dst.y_buffer, xd->dst.u_buffer, xd->dst.v_buffer, recon_y_stride, recon_uv_stride, &lfi); /* don't apply across umv border */ if (mb_row > 0) - LF_INVOKE(&pc->rtcd.loopfilter, normal_mb_h) + vp8_loop_filter_mbh (xd->dst.y_buffer, xd->dst.u_buffer, xd->dst.v_buffer, recon_y_stride, recon_uv_stride, &lfi); if (!skip_lf) - LF_INVOKE(&pc->rtcd.loopfilter, normal_b_h) + vp8_loop_filter_bh (xd->dst.y_buffer, xd->dst.u_buffer, xd->dst.v_buffer, recon_y_stride, recon_uv_stride, &lfi); } else { if (mb_col > 0) - LF_INVOKE(&pc->rtcd.loopfilter, simple_mb_v) + vp8_loop_filter_simple_mbv (xd->dst.y_buffer, recon_y_stride, lfi_n->mblim[filter_level]); if (!skip_lf) - LF_INVOKE(&pc->rtcd.loopfilter, simple_b_v) + vp8_loop_filter_simple_bv (xd->dst.y_buffer, recon_y_stride, lfi_n->blim[filter_level]); /* don't apply across umv border */ if (mb_row > 0) - LF_INVOKE(&pc->rtcd.loopfilter, simple_mb_h) + vp8_loop_filter_simple_mbh (xd->dst.y_buffer, recon_y_stride, lfi_n->mblim[filter_level]); if (!skip_lf) - LF_INVOKE(&pc->rtcd.loopfilter, simple_b_h) + vp8_loop_filter_simple_bh (xd->dst.y_buffer, recon_y_stride, lfi_n->blim[filter_level]); } } @@ -940,39 +940,39 @@ void vp8mt_decode_mb_rows( VP8D_COMP *pbi, MACROBLOCKD *xd) lfi.hev_thr = lfi_n->hev_thr[hev_index]; if (mb_col > 0) - LF_INVOKE(&pc->rtcd.loopfilter, normal_mb_v) + vp8_loop_filter_mbv (xd->dst.y_buffer, xd->dst.u_buffer, xd->dst.v_buffer, recon_y_stride, recon_uv_stride, &lfi); if (!skip_lf) - LF_INVOKE(&pc->rtcd.loopfilter, normal_b_v) + vp8_loop_filter_bv (xd->dst.y_buffer, xd->dst.u_buffer, xd->dst.v_buffer, recon_y_stride, recon_uv_stride, &lfi); /* don't apply across umv border */ if (mb_row > 0) - LF_INVOKE(&pc->rtcd.loopfilter, normal_mb_h) + vp8_loop_filter_mbh (xd->dst.y_buffer, xd->dst.u_buffer, xd->dst.v_buffer, recon_y_stride, recon_uv_stride, &lfi); if (!skip_lf) - LF_INVOKE(&pc->rtcd.loopfilter, normal_b_h) + vp8_loop_filter_bh (xd->dst.y_buffer, xd->dst.u_buffer, xd->dst.v_buffer, recon_y_stride, recon_uv_stride, &lfi); } else { if (mb_col > 0) - LF_INVOKE(&pc->rtcd.loopfilter, simple_mb_v) + vp8_loop_filter_simple_mbv (xd->dst.y_buffer, recon_y_stride, lfi_n->mblim[filter_level]); if (!skip_lf) - LF_INVOKE(&pc->rtcd.loopfilter, simple_b_v) + vp8_loop_filter_simple_bv (xd->dst.y_buffer, recon_y_stride, lfi_n->blim[filter_level]); /* don't apply across umv border */ if (mb_row > 0) - LF_INVOKE(&pc->rtcd.loopfilter, simple_mb_h) + vp8_loop_filter_simple_mbh (xd->dst.y_buffer, recon_y_stride, lfi_n->mblim[filter_level]); if (!skip_lf) - LF_INVOKE(&pc->rtcd.loopfilter, simple_b_h) + vp8_loop_filter_simple_bh (xd->dst.y_buffer, recon_y_stride, lfi_n->blim[filter_level]); } } diff --git a/vp8/vp8_common.mk b/vp8/vp8_common.mk index b0f45f2b0..4d4d0f384 100644 --- a/vp8/vp8_common.mk +++ b/vp8/vp8_common.mk @@ -80,7 +80,6 @@ VP8_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/filter_x86.h VP8_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/idct_x86.h VP8_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/subpixel_x86.h VP8_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/recon_x86.h -VP8_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/loopfilter_x86.h VP8_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/postproc_x86.h VP8_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/x86_systemdependent.c VP8_COMMON_SRCS-$(ARCH_X86)$(ARCH_X86_64) += common/x86/vp8_asm_stubs.c @@ -115,7 +114,6 @@ VP8_COMMON_SRCS-$(ARCH_ARM) += common/arm/arm_systemdependent.c VP8_COMMON_SRCS-$(ARCH_ARM) += common/arm/filter_arm.c VP8_COMMON_SRCS-$(ARCH_ARM) += common/arm/idct_arm.h VP8_COMMON_SRCS-$(ARCH_ARM) += common/arm/loopfilter_arm.c -VP8_COMMON_SRCS-$(ARCH_ARM) += common/arm/loopfilter_arm.h VP8_COMMON_SRCS-$(ARCH_ARM) += common/arm/recon_arm.h VP8_COMMON_SRCS-$(ARCH_ARM) += common/arm/reconintra_arm.c VP8_COMMON_SRCS-$(ARCH_ARM) += common/arm/subpixel_arm.h -- 2.40.0