From 7849aa20ed64cef3dfd3a85f3ed20f0ca927eab8 Mon Sep 17 00:00:00 2001 From: Jim Bankoski Date: Mon, 5 Nov 2012 16:58:03 -0800 Subject: [PATCH] remove invoke_search macro Removed invoke search from encoder Change-Id: I3d809b795abe6df0e71366edfe94026aaede14fb --- vp9/common/mv.h | 8 +-- vp9/common/rtcd_defs.sh | 17 ++++++ vp9/encoder/generic/csystemdependent.c | 4 -- vp9/encoder/mcomp.c | 27 +++++----- vp9/encoder/mcomp.h | 97 ++++++---------------------------- vp9/encoder/onyx_if.c | 6 +-- vp9/encoder/onyx_int.h | 1 - vp9/encoder/x86/x86_csystemdependent.c | 14 ----- 8 files changed, 54 insertions(+), 120 deletions(-) diff --git a/vp9/common/mv.h b/vp9/common/mv.h index 48c92f9..bbe6d2c 100644 --- a/vp9/common/mv.h +++ b/vp9/common/mv.h @@ -18,9 +18,9 @@ typedef struct { short col; } MV; -typedef union { - uint32_t as_int; - MV as_mv; -} int_mv; /* facilitates faster equality tests and copies */ +typedef union int_mv { + uint32_t as_int; + MV as_mv; +} int_mv; /* facilitates faster equality tests and copies */ #endif diff --git a/vp9/common/rtcd_defs.sh b/vp9/common/rtcd_defs.sh index 087d08c..3ad845b 100644 --- a/vp9/common/rtcd_defs.sh +++ b/vp9/common/rtcd_defs.sh @@ -11,6 +11,8 @@ struct block; struct macroblock; struct variance_vtable; +#define DEC_MVCOSTS int *mvjcost, int *mvcost[2] + /* Encoder forward decls */ struct variance_vtable; union int_mv; @@ -484,6 +486,21 @@ specialize vp9_short_walsh4x4_x8 prototype void vp9_short_walsh8x4_x8 "short *InputData, short *OutputData, int pitch" specialize vp9_short_walsh8x4_x8 +# +# Motion search +# +prototype int vp9_full_search_sad "struct macroblock *x, struct block *b, struct blockd *d, union int_mv *ref_mv, int sad_per_bit, int distance, struct variance_vtable *fn_ptr, DEC_MVCOSTS, union int_mv *center_mv" +specialize vp9_full_search_sad sse3 sse4_1 +vp9_full_search_sad_sse3=vp9_full_search_sadx3 +vp9_full_search_sad_sse4_1=vp9_full_search_sadx8 + +prototype int vp9_refining_search_sad "struct macroblock *x, struct block *b, struct blockd *d, union int_mv *ref_mv, int sad_per_bit, int distance, struct variance_vtable *fn_ptr, DEC_MVCOSTS, union int_mv *center_mv" +specialize vp9_refining_search_sad sse3 +vp9_refining_search_sad_sse3=vp9_refining_search_sadx4 + +prototype int vp9_diamond_search_sad "struct macroblock *x, struct block *b, struct blockd *d, union int_mv *ref_mv, union int_mv *best_mv, int search_param, int sad_per_bit, int *num00, struct variance_vtable *fn_ptr, DEC_MVCOSTS, union int_mv *center_mv" +vp9_diamond_search_sad_sse3=vp9_diamond_search_sadx4 + fi # end encoder functions diff --git a/vp9/encoder/generic/csystemdependent.c b/vp9/encoder/generic/csystemdependent.c index 589d0a5..05b1d61 100644 --- a/vp9/encoder/generic/csystemdependent.c +++ b/vp9/encoder/generic/csystemdependent.c @@ -27,10 +27,6 @@ extern void vp9_yv12_copy_partial_frame(YV12_BUFFER_CONFIG *src_ybc, void vp9_cmachine_specific_config(VP9_COMP *cpi) { #if CONFIG_RUNTIME_CPU_DETECT cpi->rtcd.common = &cpi->common.rtcd; - - cpi->rtcd.search.full_search = vp9_full_search_sad; - cpi->rtcd.search.refining_search = vp9_refining_search_sad; - cpi->rtcd.search.diamond_search = vp9_diamond_search_sad; cpi->rtcd.temporal.apply = vp9_temporal_filter_apply_c; #endif diff --git a/vp9/encoder/mcomp.c b/vp9/encoder/mcomp.c index 60ec49c..2e17106 100644 --- a/vp9/encoder/mcomp.c +++ b/vp9/encoder/mcomp.c @@ -1255,11 +1255,11 @@ cal_neighbors: #undef CHECK_POINT #undef CHECK_BETTER -int vp9_diamond_search_sad(MACROBLOCK *x, BLOCK *b, BLOCKD *d, - int_mv *ref_mv, int_mv *best_mv, - int search_param, int sad_per_bit, int *num00, - vp9_variance_fn_ptr_t *fn_ptr, DEC_MVCOSTS, - int_mv *center_mv) { +int vp9_diamond_search_sad_c(MACROBLOCK *x, BLOCK *b, BLOCKD *d, + int_mv *ref_mv, int_mv *best_mv, + int search_param, int sad_per_bit, int *num00, + vp9_variance_fn_ptr_t *fn_ptr, DEC_MVCOSTS, + int_mv *center_mv) { int i, j, step; unsigned char *what = (*(b->base_src) + b->src); @@ -1568,10 +1568,10 @@ int vp9_full_pixel_diamond(VP9_COMP *cpi, MACROBLOCK *x, BLOCK *b, return bestsme; } -int vp9_full_search_sad(MACROBLOCK *x, BLOCK *b, BLOCKD *d, int_mv *ref_mv, - int sad_per_bit, int distance, - vp9_variance_fn_ptr_t *fn_ptr, DEC_MVCOSTS, - int_mv *center_mv) { +int vp9_full_search_sad_c(MACROBLOCK *x, BLOCK *b, BLOCKD *d, int_mv *ref_mv, + int sad_per_bit, int distance, + vp9_variance_fn_ptr_t *fn_ptr, DEC_MVCOSTS, + int_mv *center_mv) { unsigned char *what = (*(b->base_src) + b->src); int what_stride = b->src_stride; unsigned char *in_what; @@ -1942,11 +1942,10 @@ int vp9_full_search_sadx8(MACROBLOCK *x, BLOCK *b, BLOCKD *d, int_mv *ref_mv, else return INT_MAX; } - -int vp9_refining_search_sad(MACROBLOCK *x, BLOCK *b, BLOCKD *d, int_mv *ref_mv, - int error_per_bit, int search_range, - vp9_variance_fn_ptr_t *fn_ptr, DEC_MVCOSTS, - int_mv *center_mv) { +int vp9_refining_search_sad_c(MACROBLOCK *x, BLOCK *b, BLOCKD *d, + int_mv *ref_mv, int error_per_bit, + int search_range, vp9_variance_fn_ptr_t *fn_ptr, + DEC_MVCOSTS, int_mv *center_mv) { MV neighbors[4] = {{ -1, 0}, {0, -1}, {0, 1}, {1, 0}}; int i, j; short this_row_offset, this_col_offset; diff --git a/vp9/encoder/mcomp.h b/vp9/encoder/mcomp.h index f754837..ac8c8ef 100644 --- a/vp9/encoder/mcomp.h +++ b/vp9/encoder/mcomp.h @@ -68,87 +68,24 @@ extern fractional_mv_step_fp vp9_find_best_sub_pixel_step_iteratively; extern fractional_mv_step_fp vp9_find_best_sub_pixel_step; extern fractional_mv_step_fp vp9_find_best_half_pixel_step; -#define prototype_full_search_sad(sym)\ - int (sym)\ - (\ - MACROBLOCK *x, \ - BLOCK *b, \ - BLOCKD *d, \ - int_mv *ref_mv, \ - int sad_per_bit, \ - int distance, \ - vp9_variance_fn_ptr_t *fn_ptr, \ - DEC_MVSADCOSTS, \ - int_mv *center_mv \ - ) - -#define prototype_refining_search_sad(sym)\ - int (sym)\ - (\ - MACROBLOCK *x, \ - BLOCK *b, \ - BLOCKD *d, \ - int_mv *ref_mv, \ - int sad_per_bit, \ - int distance, \ - vp9_variance_fn_ptr_t *fn_ptr, \ - DEC_MVSADCOSTS, \ - int_mv *center_mv \ - ) - -#define prototype_diamond_search_sad(sym)\ - int (sym)\ - (\ - MACROBLOCK *x, \ - BLOCK *b, \ - BLOCKD *d, \ - int_mv *ref_mv, \ - int_mv *best_mv, \ - int search_param, \ - int sad_per_bit, \ - int *num00, \ - vp9_variance_fn_ptr_t *fn_ptr, \ - DEC_MVSADCOSTS, \ - int_mv *center_mv \ - ) - -#if ARCH_X86 || ARCH_X86_64 -#include "x86/mcomp_x86.h" -#endif - -typedef prototype_full_search_sad(*vp9_full_search_fn_t); -extern prototype_full_search_sad(vp9_full_search_sad); -extern prototype_full_search_sad(vp9_full_search_sadx3); -extern prototype_full_search_sad(vp9_full_search_sadx8); - -typedef prototype_refining_search_sad(*vp9_refining_search_fn_t); -extern prototype_refining_search_sad(vp9_refining_search_sad); -extern prototype_refining_search_sad(vp9_refining_search_sadx4); - -typedef prototype_diamond_search_sad(*vp9_diamond_search_fn_t); -extern prototype_diamond_search_sad(vp9_diamond_search_sad); -extern prototype_diamond_search_sad(vp9_diamond_search_sadx4); - -#ifndef vp9_search_full_search -#define vp9_search_full_search vp9_full_search_sad -#endif -extern prototype_full_search_sad(vp9_search_full_search); - -#ifndef vp9_search_refining_search -#define vp9_search_refining_search vp9_refining_search_sad -#endif -extern prototype_refining_search_sad(vp9_search_refining_search); - -#ifndef vp9_search_diamond_search -#define vp9_search_diamond_search vp9_diamond_search_sad -#endif -extern prototype_diamond_search_sad(vp9_search_diamond_search); +typedef int (*vp9_full_search_fn_t)(MACROBLOCK *x, BLOCK *b, BLOCKD *d, + int_mv *ref_mv, int sad_per_bit, + int distance, vp9_variance_fn_ptr_t *fn_ptr, + DEC_MVCOSTS, int_mv *center_mv); + +typedef int (*vp9_refining_search_fn_t)(MACROBLOCK *x, BLOCK *b, BLOCKD *d, + int_mv *ref_mv, int sad_per_bit, + int distance, + vp9_variance_fn_ptr_t *fn_ptr, + DEC_MVCOSTS, int_mv *center_mv); + +typedef int (*vp9_diamond_search_fn_t)(MACROBLOCK *x, BLOCK *b, BLOCKD *d, + int_mv *ref_mv, int_mv *best_mv, + int search_param, int sad_per_bit, + int *num00, + vp9_variance_fn_ptr_t *fn_ptr, + DEC_MVCOSTS, int_mv *center_mv); -typedef struct { - prototype_full_search_sad(*full_search); - prototype_refining_search_sad(*refining_search); - prototype_diamond_search_sad(*diamond_search); -} vp9_search_rtcd_vtable_t; #if CONFIG_RUNTIME_CPU_DETECT #define SEARCH_INVOKE(ctx,fn) (ctx)->fn diff --git a/vp9/encoder/onyx_if.c b/vp9/encoder/onyx_if.c index 02a3b05..d6bb524 100644 --- a/vp9/encoder/onyx_if.c +++ b/vp9/encoder/onyx_if.c @@ -1976,9 +1976,9 @@ VP9_PTR vp9_create_compressor(VP9_CONFIG *oxcf) { cpi->fn_ptr[BLOCK_4X4].copymem = vp9_copy32xn; #endif - cpi->full_search_sad = SEARCH_INVOKE(&cpi->rtcd.search, full_search); - cpi->diamond_search_sad = SEARCH_INVOKE(&cpi->rtcd.search, diamond_search); - cpi->refining_search_sad = SEARCH_INVOKE(&cpi->rtcd.search, refining_search); + cpi->full_search_sad = vp9_full_search_sad; + cpi->diamond_search_sad = vp9_diamond_search_sad; + cpi->refining_search_sad = vp9_refining_search_sad; // make sure frame 1 is okay cpi->error_bins[0] = cpi->common.MBs; diff --git a/vp9/encoder/onyx_int.h b/vp9/encoder/onyx_int.h index 97917d6..1e6f3e8 100644 --- a/vp9/encoder/onyx_int.h +++ b/vp9/encoder/onyx_int.h @@ -349,7 +349,6 @@ typedef struct { typedef struct VP9_ENCODER_RTCD { VP9_COMMON_RTCD *common; - vp9_search_rtcd_vtable_t search; vp9_temporal_rtcd_vtable_t temporal; } VP9_ENCODER_RTCD; diff --git a/vp9/encoder/x86/x86_csystemdependent.c b/vp9/encoder/x86/x86_csystemdependent.c index 4cff713..0176672 100644 --- a/vp9/encoder/x86/x86_csystemdependent.c +++ b/vp9/encoder/x86/x86_csystemdependent.c @@ -95,20 +95,6 @@ void vp9_arch_x86_encoder_init(VP9_COMP *cpi) { } #endif -#if HAVE_SSE3 - if (flags & HAS_SSE3) { - cpi->rtcd.search.full_search = vp9_full_search_sadx3; - cpi->rtcd.search.diamond_search = vp9_diamond_search_sadx4; - cpi->rtcd.search.refining_search = vp9_refining_search_sadx4; - } -#endif - - -#if HAVE_SSE4_1 - if (flags & HAS_SSE4_1) { - cpi->rtcd.search.full_search = vp9_full_search_sadx8; - } -#endif #endif } -- 2.7.4