C++程序  |  115行  |  5.34 KB

/******************************************************************************
 *
 * Copyright (C) 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at:
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 *****************************************************************************
 * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
*/
/*!
******************************************************************************
* \file hme_common_defs.h
*
* \brief
*    Important definitions, enumerations, macros and structures used by ME
*
* \date
*    18/09/2012
*
* \author
*    Ittiam
*
******************************************************************************
*/

#ifndef _HME_COMMON_DEFS_H_
#define _HME_COMMON_DEFS_H_

/*****************************************************************************/
/* Constant Macros                                                           */
/*****************************************************************************/
#define MAX_32BIT_VAL (0x7FFFFFFF)
#define MAX_SIGNED_16BIT_VAL (0x07FFF)
#define INTERP_INTERMED_BUF_SIZE (72 * 72 * 2)

/*****************************************************************************/
/* Function Macros                                                           */
/*****************************************************************************/
#define HME_CLIP(x, min, max) (((x) < (min)) ? (min) : (((x) > (max)) ? (max) : (x)))

#define ARG_NOT_USED(x) ((void)(x))
/**
******************************************************************************
 *  @brief Average of 2 numbers of any datatype
******************************************************************************
*/
#define AVG2(x, y) (((x) + (y) + 1) >> 1)

#define FLOOR16(x) ((x) & (~15))
#define FLOOR8(x) ((x) & (~7))

#define SET_PIC_LIMIT(s_pic_limit, pad_x, pad_y, wd, ht, num_post_refine)                          \
    {                                                                                              \
        s_pic_limit.i2_min_x = (S16)(-(pad_x) + (num_post_refine));                                \
        s_pic_limit.i2_min_y = (S16)(-(pad_y) + (num_post_refine));                                \
        s_pic_limit.i2_max_x = (S16)((wd) + (pad_x) - (num_post_refine));                          \
        s_pic_limit.i2_max_y = (S16)((ht) + (pad_y) - (num_post_refine));                          \
    }

#define SCALE_FOR_POC_DELTA(x, y, node, ref_tgt, pi2_ref_scf)                                      \
    {                                                                                              \
        x = node->s_mv.i2_mvx;                                                                     \
        y = node->s_mv.i2_mvy;                                                                     \
        x = x * pi2_ref_scf[ref_tgt * MAX_NUM_REF + node->i1_ref_idx];                             \
        y = y * pi2_ref_scf[ref_tgt * MAX_NUM_REF + node->i1_ref_idx];                             \
        x = (x + 128) >> 8;                                                                        \
        y = (y + 128) >> 8;                                                                        \
        HME_CLIP(x, -32768, 32767);                                                                \
        HME_CLIP(y, -32768, 32767);                                                                \
    }

#define SWAP_HME(a, b, data_type)                                                                  \
    {                                                                                              \
        data_type temp = a;                                                                        \
        a = b;                                                                                     \
        b = temp;                                                                                  \
    }

/**
******************************************************************************
 *  @brief Check if MVs lie within a range
******************************************************************************
*/
#define CHECK_MV_WITHIN_RANGE(x, y, range)                                                         \
    (((x) > (range)->i2_min_x) && ((x) < (range)->i2_max_x) && ((y) > (range)->i2_min_y) &&        \
     ((y) < (range)->i2_max_y))

/*****************************************************************************/
/* Structure                                                                 */
/*****************************************************************************/

/**
 ******************************************************************************
 *  @struct mv_t
 *  @brief  Basic Motion vector structure (x and y components)
 ******************************************************************************
*/
typedef struct
{
    S16 i2_mv_x;
    S16 i2_mv_y;
} hme_mv_t;

#endif /* #ifndef _HME_COMMON_DEFS_H_ */