/******************************************************************************
*
* 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 ihevce_mv_pred_merge.h
*
* \brief
* This file contains function prototypes of MV Merge candidates list
* derivation functions and corresponding structure and macrso definations
*
* \date
* 18/09/2012
*
* \author
* Ittiam
*
******************************************************************************
*/
#ifndef _IHEVCE_MV_PRED_MERGE_H_
#define _IHEVCE_MV_PRED_MERGE_H_
/*****************************************************************************/
/* Constant Macros */
/*****************************************************************************/
#define MAX_NUM_MERGE_CAND MAX_MERGE_CANDIDATES
#define MAX_NUM_MV_NBR 5
/*****************************************************************************/
/* Function Macros */
/*****************************************************************************/
/*****************************************************************************/
/* Typedefs */
/*****************************************************************************/
/*****************************************************************************/
/* Enums */
/*****************************************************************************/
typedef enum
{
NBR_A0 = 0,
NBR_A1 = 1,
NBR_B0 = 2,
NBR_B1 = 3,
NBR_B2 = 4,
/* should be last */
MAX_NUM_NBRS
} MV_MERGE_NBRS_T;
/*****************************************************************************/
/* Structure */
/*****************************************************************************/
typedef struct
{
/* Merge candidate motion vectors and refernce idx */
pu_mv_t mv;
/* Pred_l0 mode for the candidate */
UWORD8 u1_pred_flag_l0;
/* Pred_l1 mode for the candidate */
UWORD8 u1_pred_flag_l1;
} merge_cand_list_t;
/*****************************************************************************/
/* Extern Variable Declarations */
/*****************************************************************************/
/*****************************************************************************/
/* Extern Function Declarations */
/*****************************************************************************/
void ihevce_collocated_mvp(
mv_pred_ctxt_t *ps_mv_ctxt,
pu_t *ps_pu,
mv_t *ps_mv_col,
WORD32 *pu4_avail_col_flag,
WORD32 use_pu_ref_idx,
WORD32 x_col,
WORD32 y_col);
WORD32 ihevce_mv_pred_merge(
mv_pred_ctxt_t *ps_ctxt,
nbr_4x4_t *ps_top_nbr_4x4,
nbr_4x4_t *ps_left_nbr_4x4,
nbr_4x4_t *ps_top_left_nbr_4x4,
WORD32 left_nbr_4x4_strd,
nbr_avail_flags_t *ps_avail_flags,
pu_mv_t *ps_col_mv,
pu_t *ps_pu,
PART_SIZE_E part_mode,
WORD32 part_idx,
WORD32 single_mcl_flag,
merge_cand_list_t *ps_merge_cand_list,
UWORD8 *pu1_is_top_used);
#endif /* _IHEVCE_MV_PRED_MERGE_H_ */