xref: /aosp_15_r20/external/libhevc/encoder/hme_common_defs.h (revision c83a76b084498d55f252f48b2e3786804cdf24b7)
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