205 lines
6.5 KiB
C
205 lines
6.5 KiB
C
/******************************************************************************
|
|
*
|
|
* Copyright (C) 2015 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
|
|
* ime.h
|
|
*
|
|
* @brief
|
|
* Contains declarations of global variables for H264 encoder
|
|
*
|
|
* @author
|
|
* Ittiam
|
|
*
|
|
* @remarks
|
|
*
|
|
*******************************************************************************
|
|
*/
|
|
|
|
#ifndef IME_H_
|
|
#define IME_H_
|
|
|
|
/*****************************************************************************/
|
|
/* Constant Macros */
|
|
/*****************************************************************************/
|
|
|
|
/**
|
|
******************************************************************************
|
|
* @brief Number of iterations before exiting during diamond search
|
|
******************************************************************************
|
|
*/
|
|
#define NUM_LAYERS 16
|
|
|
|
/*****************************************************************************/
|
|
/* Extern Function Declarations */
|
|
/*****************************************************************************/
|
|
|
|
|
|
/**
|
|
*******************************************************************************
|
|
*
|
|
* @brief Diamond Search
|
|
*
|
|
* @par Description:
|
|
* This function computes the sad at vertices of several layers of diamond grid
|
|
* at a time. The number of layers of diamond grid that would be evaluated is
|
|
* configurable.The function computes the sad at vertices of a diamond grid. If
|
|
* the sad at the center of the diamond grid is lesser than the sad at any other
|
|
* point of the diamond grid, the function marks the candidate Mb partition as
|
|
* mv.
|
|
*
|
|
* @param[in] ps_mb_part
|
|
* pointer to current mb partition ctxt with respect to ME
|
|
*
|
|
* @param[in] ps_me_ctxt
|
|
* pointer to me context
|
|
*
|
|
* @param[in] u4_lambda
|
|
* lambda motion
|
|
*
|
|
* @param[in] u4_fast_flag
|
|
* enable/disable fast sad computation
|
|
*
|
|
* @returns mv pair & corresponding distortion and cost
|
|
*
|
|
* @remarks This module cannot be part of the final product due to its lack of
|
|
* computational feasibility. This is only for quality eval purposes.
|
|
*
|
|
*******************************************************************************
|
|
*/
|
|
extern void ime_diamond_search_16x16(me_ctxt_t *ps_me_ctxt, WORD32 i4_reflist);
|
|
|
|
|
|
/**
|
|
*******************************************************************************
|
|
*
|
|
* @brief This function computes the best motion vector among the tentative mv
|
|
* candidates chosen.
|
|
*
|
|
* @par Description:
|
|
* This function determines the position in the search window at which the motion
|
|
* estimation should begin in order to minimise the number of search iterations.
|
|
*
|
|
* @param[in] ps_mb_part
|
|
* pointer to current mb partition ctxt with respect to ME
|
|
*
|
|
* @param[in] u4_lambda_motion
|
|
* lambda motion
|
|
*
|
|
* @param[in] u4_fast_flag
|
|
* enable/disable fast sad computation
|
|
*
|
|
* @returns mv pair & corresponding distortion and cost
|
|
*
|
|
* @remarks none
|
|
*
|
|
*******************************************************************************
|
|
*/
|
|
extern void ime_evaluate_init_srchposn_16x16(me_ctxt_t *ps_me_ctxt,
|
|
WORD32 i4_reflist);
|
|
|
|
/**
|
|
*******************************************************************************
|
|
*
|
|
* @brief Searches for the best matching full pixel predictor within the search
|
|
* range
|
|
*
|
|
* @par Description:
|
|
* This function begins by computing the mv predict vector for the current mb.
|
|
* This is used for cost computations. Further basing on the algo. chosen, it
|
|
* looks through a set of candidate vectors that best represent the mb a least
|
|
* cost and returns this information.
|
|
*
|
|
* @param[in] ps_proc
|
|
* pointer to current proc ctxt
|
|
*
|
|
* @param[in] ps_me_ctxt
|
|
* pointer to me context
|
|
*
|
|
* @returns mv pair & corresponding distortion and cost
|
|
*
|
|
* @remarks none
|
|
*
|
|
*******************************************************************************
|
|
*/
|
|
extern void ime_full_pel_motion_estimation_16x16(me_ctxt_t *ps_me_ctxt,
|
|
WORD32 i4_ref_list);
|
|
|
|
/**
|
|
*******************************************************************************
|
|
*
|
|
* @brief Searches for the best matching sub pixel predictor within the search
|
|
* range
|
|
*
|
|
* @par Description:
|
|
* This function begins by searching across all sub pixel sample points
|
|
* around the full pel motion vector. The vector with least cost is chosen as
|
|
* the mv for the current mb. If the skip mode is not evaluated while analysing
|
|
* the initial search candidates then analyse it here and update the mv.
|
|
*
|
|
* @param[in] ps_proc
|
|
* pointer to current proc ctxt
|
|
*
|
|
* @param[in] ps_me_ctxt
|
|
* pointer to me context
|
|
*
|
|
* @returns none
|
|
*
|
|
* @remarks none
|
|
*
|
|
*******************************************************************************
|
|
*/
|
|
extern void ime_sub_pel_motion_estimation_16x16(me_ctxt_t *ps_me_ctxt,
|
|
WORD32 i4_reflist);
|
|
|
|
/**
|
|
*******************************************************************************
|
|
*
|
|
* @brief This function computes cost of skip macroblocks
|
|
*
|
|
* @par Description:
|
|
*
|
|
* @param[in] ps_me_ctxt
|
|
* pointer to me ctxt
|
|
*
|
|
* @param[in] ps_skip_mv
|
|
* pointer to skip mv
|
|
*
|
|
@param[in] is_slice_type_b
|
|
* Whether slice type is BSLICE or not
|
|
|
|
* @returns none
|
|
*
|
|
* @remarks
|
|
* NOTE: while computing the skip cost, do not enable early exit from compute
|
|
* sad function because, a negative bias gets added later
|
|
*
|
|
*******************************************************************************
|
|
*/
|
|
extern void ime_compute_skip_cost(me_ctxt_t *ps_me_ctxt,
|
|
ime_mv_t *ps_skip_mv,
|
|
mb_part_ctxt *ps_smb_part_info,
|
|
UWORD32 u4_use_stat_sad,
|
|
WORD32 i4_reflist,
|
|
WORD32 is_slice_type_b);
|
|
|
|
|
|
#endif /* IME_H_ */
|