1*c83a76b0SSuyog Pawar /****************************************************************************** 2*c83a76b0SSuyog Pawar * 3*c83a76b0SSuyog Pawar * Copyright (C) 2018 The Android Open Source Project 4*c83a76b0SSuyog Pawar * 5*c83a76b0SSuyog Pawar * Licensed under the Apache License, Version 2.0 (the "License"); 6*c83a76b0SSuyog Pawar * you may not use this file except in compliance with the License. 7*c83a76b0SSuyog Pawar * You may obtain a copy of the License at: 8*c83a76b0SSuyog Pawar * 9*c83a76b0SSuyog Pawar * http://www.apache.org/licenses/LICENSE-2.0 10*c83a76b0SSuyog Pawar * 11*c83a76b0SSuyog Pawar * Unless required by applicable law or agreed to in writing, software 12*c83a76b0SSuyog Pawar * distributed under the License is distributed on an "AS IS" BASIS, 13*c83a76b0SSuyog Pawar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*c83a76b0SSuyog Pawar * See the License for the specific language governing permissions and 15*c83a76b0SSuyog Pawar * limitations under the License. 16*c83a76b0SSuyog Pawar * 17*c83a76b0SSuyog Pawar ***************************************************************************** 18*c83a76b0SSuyog Pawar * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 19*c83a76b0SSuyog Pawar */ 20*c83a76b0SSuyog Pawar /*! 21*c83a76b0SSuyog Pawar ****************************************************************************** 22*c83a76b0SSuyog Pawar * \file hme_common_defs.h 23*c83a76b0SSuyog Pawar * 24*c83a76b0SSuyog Pawar * \brief 25*c83a76b0SSuyog Pawar * Important definitions, enumerations, macros and structures used by ME 26*c83a76b0SSuyog Pawar * 27*c83a76b0SSuyog Pawar * \date 28*c83a76b0SSuyog Pawar * 18/09/2012 29*c83a76b0SSuyog Pawar * 30*c83a76b0SSuyog Pawar * \author 31*c83a76b0SSuyog Pawar * Ittiam 32*c83a76b0SSuyog Pawar * 33*c83a76b0SSuyog Pawar ****************************************************************************** 34*c83a76b0SSuyog Pawar */ 35*c83a76b0SSuyog Pawar 36*c83a76b0SSuyog Pawar #ifndef _HME_COMMON_DEFS_H_ 37*c83a76b0SSuyog Pawar #define _HME_COMMON_DEFS_H_ 38*c83a76b0SSuyog Pawar 39*c83a76b0SSuyog Pawar /*****************************************************************************/ 40*c83a76b0SSuyog Pawar /* Constant Macros */ 41*c83a76b0SSuyog Pawar /*****************************************************************************/ 42*c83a76b0SSuyog Pawar #define MAX_32BIT_VAL (0x7FFFFFFF) 43*c83a76b0SSuyog Pawar #define MAX_SIGNED_16BIT_VAL (0x07FFF) 44*c83a76b0SSuyog Pawar #define INTERP_INTERMED_BUF_SIZE (72 * 72 * 2) 45*c83a76b0SSuyog Pawar 46*c83a76b0SSuyog Pawar /*****************************************************************************/ 47*c83a76b0SSuyog Pawar /* Function Macros */ 48*c83a76b0SSuyog Pawar /*****************************************************************************/ 49*c83a76b0SSuyog Pawar #define HME_CLIP(x, min, max) (((x) < (min)) ? (min) : (((x) > (max)) ? (max) : (x))) 50*c83a76b0SSuyog Pawar 51*c83a76b0SSuyog Pawar #define ARG_NOT_USED(x) ((void)(x)) 52*c83a76b0SSuyog Pawar /** 53*c83a76b0SSuyog Pawar ****************************************************************************** 54*c83a76b0SSuyog Pawar * @brief Average of 2 numbers of any datatype 55*c83a76b0SSuyog Pawar ****************************************************************************** 56*c83a76b0SSuyog Pawar */ 57*c83a76b0SSuyog Pawar #define AVG2(x, y) (((x) + (y) + 1) >> 1) 58*c83a76b0SSuyog Pawar 59*c83a76b0SSuyog Pawar #define FLOOR16(x) ((x) & (~15)) 60*c83a76b0SSuyog Pawar #define FLOOR8(x) ((x) & (~7)) 61*c83a76b0SSuyog Pawar 62*c83a76b0SSuyog Pawar #define SET_PIC_LIMIT(s_pic_limit, pad_x, pad_y, wd, ht, num_post_refine) \ 63*c83a76b0SSuyog Pawar { \ 64*c83a76b0SSuyog Pawar s_pic_limit.i2_min_x = (S16)(-(pad_x) + (num_post_refine)); \ 65*c83a76b0SSuyog Pawar s_pic_limit.i2_min_y = (S16)(-(pad_y) + (num_post_refine)); \ 66*c83a76b0SSuyog Pawar s_pic_limit.i2_max_x = (S16)((wd) + (pad_x) - (num_post_refine)); \ 67*c83a76b0SSuyog Pawar s_pic_limit.i2_max_y = (S16)((ht) + (pad_y) - (num_post_refine)); \ 68*c83a76b0SSuyog Pawar } 69*c83a76b0SSuyog Pawar 70*c83a76b0SSuyog Pawar #define SCALE_FOR_POC_DELTA(x, y, node, ref_tgt, pi2_ref_scf) \ 71*c83a76b0SSuyog Pawar { \ 72*c83a76b0SSuyog Pawar x = node->s_mv.i2_mvx; \ 73*c83a76b0SSuyog Pawar y = node->s_mv.i2_mvy; \ 74*c83a76b0SSuyog Pawar x = x * pi2_ref_scf[ref_tgt * MAX_NUM_REF + node->i1_ref_idx]; \ 75*c83a76b0SSuyog Pawar y = y * pi2_ref_scf[ref_tgt * MAX_NUM_REF + node->i1_ref_idx]; \ 76*c83a76b0SSuyog Pawar x = (x + 128) >> 8; \ 77*c83a76b0SSuyog Pawar y = (y + 128) >> 8; \ 78*c83a76b0SSuyog Pawar HME_CLIP(x, -32768, 32767); \ 79*c83a76b0SSuyog Pawar HME_CLIP(y, -32768, 32767); \ 80*c83a76b0SSuyog Pawar } 81*c83a76b0SSuyog Pawar 82*c83a76b0SSuyog Pawar #define SWAP_HME(a, b, data_type) \ 83*c83a76b0SSuyog Pawar { \ 84*c83a76b0SSuyog Pawar data_type temp = a; \ 85*c83a76b0SSuyog Pawar a = b; \ 86*c83a76b0SSuyog Pawar b = temp; \ 87*c83a76b0SSuyog Pawar } 88*c83a76b0SSuyog Pawar 89*c83a76b0SSuyog Pawar /** 90*c83a76b0SSuyog Pawar ****************************************************************************** 91*c83a76b0SSuyog Pawar * @brief Check if MVs lie within a range 92*c83a76b0SSuyog Pawar ****************************************************************************** 93*c83a76b0SSuyog Pawar */ 94*c83a76b0SSuyog Pawar #define CHECK_MV_WITHIN_RANGE(x, y, range) \ 95*c83a76b0SSuyog Pawar (((x) > (range)->i2_min_x) && ((x) < (range)->i2_max_x) && ((y) > (range)->i2_min_y) && \ 96*c83a76b0SSuyog Pawar ((y) < (range)->i2_max_y)) 97*c83a76b0SSuyog Pawar 98*c83a76b0SSuyog Pawar /*****************************************************************************/ 99*c83a76b0SSuyog Pawar /* Structure */ 100*c83a76b0SSuyog Pawar /*****************************************************************************/ 101*c83a76b0SSuyog Pawar 102*c83a76b0SSuyog Pawar /** 103*c83a76b0SSuyog Pawar ****************************************************************************** 104*c83a76b0SSuyog Pawar * @struct mv_t 105*c83a76b0SSuyog Pawar * @brief Basic Motion vector structure (x and y components) 106*c83a76b0SSuyog Pawar ****************************************************************************** 107*c83a76b0SSuyog Pawar */ 108*c83a76b0SSuyog Pawar typedef struct 109*c83a76b0SSuyog Pawar { 110*c83a76b0SSuyog Pawar S16 i2_mv_x; 111*c83a76b0SSuyog Pawar S16 i2_mv_y; 112*c83a76b0SSuyog Pawar } hme_mv_t; 113*c83a76b0SSuyog Pawar 114*c83a76b0SSuyog Pawar #endif /* #ifndef _HME_COMMON_DEFS_H_ */ 115