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