193f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner/* 293f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 393f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner * 493f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner * Use of this source code is governed by a BSD-style license 593f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner * that can be found in the LICENSE file in the root of the source 693f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner * tree. An additional intellectual property rights grant can be found 793f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner * in the file PATENTS. All contributing project authors may 893f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner * be found in the AUTHORS file in the root of the source tree. 993f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner */ 1093f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner 1193f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner 1293f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner#ifndef __INC_MCOMP_H 1393f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner#define __INC_MCOMP_H 1493f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner 1593f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner#include "block.h" 1693f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner#include "variance.h" 1793f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner 1893f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner#ifdef ENTROPY_STATS 1993f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattnerextern void init_mv_ref_counts(); 2093f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattnerextern void accum_mv_refs(MB_PREDICTION_MODE, const int near_mv_ref_cts[4]); 2193f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner#endif 2293f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner 2393f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner 2493f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner#define MAX_MVSEARCH_STEPS 8 // The maximum number of steps in a step search given the largest allowed initial step 2593f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner#define MAX_FULL_PEL_VAL ((1 << (MAX_MVSEARCH_STEPS+3)) - 8) // Max full pel mv specified in 1/8 pel units 2693f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner#define MAX_FIRST_STEP (1 << (MAX_MVSEARCH_STEPS-1)) // Maximum size of the first step in full pel units 2793f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner 2893f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattnerextern void print_mode_context(void); 2993f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattnerextern int vp8_mv_bit_cost(MV *mv, MV *ref, int *mvcost[2], int Weight); 3093f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattnerextern void vp8_init_dsmotion_compensation(MACROBLOCK *x, int stride); 3193f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattnerextern void vp8_init3smotion_compensation(MACROBLOCK *x, int stride); 3293f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner 3393f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner 3493f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattnerextern int vp8_hex_search 3593f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner( 36f5a1fb6b247611b92d9dec9476202b477661dbe8Chris Lattner MACROBLOCK *x, 37f5a1fb6b247611b92d9dec9476202b477661dbe8Chris Lattner BLOCK *b, 3893f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner BLOCKD *d, 3993f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner MV *ref_mv, 4093f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner MV *best_mv, 4193f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner int search_param, 4293f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner int error_per_bit, 4393f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner int *num00, 4493f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner const vp8_variance_fn_ptr_t *vf, 4593f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner int *mvsadcost[2], 4693f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner int *mvcost[2], 4793f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner MV *center_mv 4893f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner); 4993f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner 5093f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattnertypedef int (fractional_mv_step_fp) 5193f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner (MACROBLOCK *x, BLOCK *b, BLOCKD *d, MV *bestmv, MV *ref_mv, 5293f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner int error_per_bit, const vp8_variance_fn_ptr_t *vfp, int *mvcost[2]); 5393f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattnerextern fractional_mv_step_fp vp8_find_best_sub_pixel_step_iteratively; 5493f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattnerextern fractional_mv_step_fp vp8_find_best_sub_pixel_step; 5593f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattnerextern fractional_mv_step_fp vp8_find_best_half_pixel_step; 5693f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattnerextern fractional_mv_step_fp vp8_skip_fractional_mv_step; 5793f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner 5893f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner#define prototype_full_search_sad(sym)\ 590bef562ea253878ee92a1eaf6db05b0c2edfa74cChris Lattner int (sym)\ 600bef562ea253878ee92a1eaf6db05b0c2edfa74cChris Lattner (\ 610bef562ea253878ee92a1eaf6db05b0c2edfa74cChris Lattner MACROBLOCK *x, \ 620bef562ea253878ee92a1eaf6db05b0c2edfa74cChris Lattner BLOCK *b, \ 630bef562ea253878ee92a1eaf6db05b0c2edfa74cChris Lattner BLOCKD *d, \ 640bef562ea253878ee92a1eaf6db05b0c2edfa74cChris Lattner MV *ref_mv, \ 6593f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner int error_per_bit, \ 6693f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner int distance, \ 6793f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner vp8_variance_fn_ptr_t *fn_ptr, \ 6893f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner int *mvcost[2], \ 6993f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner int *mvsadcost[2], \ 7093f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner MV *center_mv \ 7193f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner ) 7293f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner 7393f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner#define prototype_diamond_search_sad(sym)\ 741a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner int (sym)\ 751a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner (\ 765fb107287fd8d35b8fc39aa3e6b084fb2871a8ffChris Lattner MACROBLOCK *x, \ 7793f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner BLOCK *b, \ 785fb107287fd8d35b8fc39aa3e6b084fb2871a8ffChris Lattner BLOCKD *d, \ 7993f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner MV *ref_mv, \ 8093f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner MV *best_mv, \ 8193f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner int search_param, \ 8293f3bcf7f323069e40d9abb950da73d437b6f7daChris Lattner int error_per_bit, \ 831a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner int *num00, \ 841a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner vp8_variance_fn_ptr_t *fn_ptr, \ 851a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner int *mvsadcost[2], \ 861a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner int *mvcost[2], \ 871a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner MV *center_mv \ 881a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner ) 891a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner 901a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner#if ARCH_X86 || ARCH_X86_64 911a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner#include "x86/mcomp_x86.h" 921a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner#endif 931a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner 941a8d4de397c360a76f1389d15e862eba265d71fdChris Lattnertypedef prototype_full_search_sad(*vp8_full_search_fn_t); 951a8d4de397c360a76f1389d15e862eba265d71fdChris Lattnerextern prototype_full_search_sad(vp8_full_search_sad); 961a8d4de397c360a76f1389d15e862eba265d71fdChris Lattnerextern prototype_full_search_sad(vp8_full_search_sadx3); 971a8d4de397c360a76f1389d15e862eba265d71fdChris Lattnerextern prototype_full_search_sad(vp8_full_search_sadx8); 981a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner 991a8d4de397c360a76f1389d15e862eba265d71fdChris Lattnertypedef prototype_diamond_search_sad(*vp8_diamond_search_fn_t); 1001a8d4de397c360a76f1389d15e862eba265d71fdChris Lattnerextern prototype_diamond_search_sad(vp8_diamond_search_sad); 1011a8d4de397c360a76f1389d15e862eba265d71fdChris Lattnerextern prototype_diamond_search_sad(vp8_diamond_search_sadx4); 1021a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner 1031a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner#ifndef vp8_search_full_search 1041a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner#define vp8_search_full_search vp8_full_search_sad 1051a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner#endif 1061a8d4de397c360a76f1389d15e862eba265d71fdChris Lattnerextern prototype_full_search_sad(vp8_search_full_search); 1071a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner 1081a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner#ifndef vp8_search_diamond_search 1091a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner#define vp8_search_diamond_search vp8_diamond_search_sad 1101a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner#endif 1111a8d4de397c360a76f1389d15e862eba265d71fdChris Lattnerextern prototype_diamond_search_sad(vp8_search_diamond_search); 1121a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner 1131a8d4de397c360a76f1389d15e862eba265d71fdChris Lattnertypedef struct 1141a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner{ 1151a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner prototype_full_search_sad(*full_search); 1161a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner prototype_diamond_search_sad(*diamond_search); 1171a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner} vp8_search_rtcd_vtable_t; 1181a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner 1191a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner#if CONFIG_RUNTIME_CPU_DETECT 1201a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner#define SEARCH_INVOKE(ctx,fn) (ctx)->fn 1211a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner#else 1221a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner#define SEARCH_INVOKE(ctx,fn) vp8_search_##fn 1231a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner#endif 1241a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner 1251a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner#endif 1261a8d4de397c360a76f1389d15e862eba265d71fdChris Lattner