You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
218 lines
7.0 KiB
218 lines
7.0 KiB
/****************************************************************************** |
|
* |
|
* 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 |
|
|
|
/** |
|
****************************************************************************** |
|
* @brief Skip Bias value for P slice |
|
****************************************************************************** |
|
*/ |
|
#define SKIP_BIAS_P 2 |
|
|
|
/** |
|
****************************************************************************** |
|
* @brief Skip Bias value for B slice |
|
****************************************************************************** |
|
*/ |
|
#define SKIP_BIAS_B 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_ */
|
|
|