/****************************************************************************** * * 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_search_algo.h * * \brief * contains prototypes for search algorithms called by coarse/refinement * layers. * * \date * 18/09/2012 * * \author * Ittiam * ****************************************************************************** */ #ifndef _HME_SEARCH_ALGO_H_ #define _HME_SEARCH_ALGO_H_ /*****************************************************************************/ /* Functions */ /*****************************************************************************/ /** ******************************************************************************** * @fn void hme_pred_search_square_stepn(hme_search_prms_t *ps_search_prms, * layer_ctxt_t *ps_layer_ctxt) * * @brief Implements predictive search, with square grid refinement. In this * case, we start with a bigger step size, like 4, refining upto a * variable number of pts, till we hit end of search range or hit a * minima. Then we refine using smaller steps. The bigger step size * like 4 or 2, do not use optimized SAD functions, they evaluate * SAD for each individual pt. * * @param[in,out] ps_search_prms: All the params to this function * * @param[in] ps_layer_ctxt: Context for the layer * * @return None ******************************************************************************** */ void hme_pred_search_square_stepn( hme_search_prms_t *ps_search_prms, layer_ctxt_t *ps_layer_ctxt, wgt_pred_ctxt_t *ps_wt_inp_prms, ME_QUALITY_PRESETS_T e_me_quality_preset, ihevce_me_optimised_function_list_t *ps_me_optimised_function_list); /** ******************************************************************************** * @fn hme_do_fullsearch(hme_search_prms_t *ps_search_prms, * layer_ctxt_t *ps_layer_ctxt, * hme_mv_t *ps_best_mv, * pred_ctxt_t *ps_pred_ctxt, * PF_MV_COST_FXN pf_mv_cost_compute) * * @brief Does a full search on entire srch window with a given step size * * @param[in] ps_search_prms : Search prms structure containing info like * blk dimensions, search range etc * * @param[in] ps_layer_ctxt: All info about this layer * * @param[out] ps_best_mv : type hme_mv_t contains best mv x and y * * @param[in] ps_pred_ctxt : Prediction ctxt for cost computation * * @param[in] pf_mv_cost_compute : mv cost computation function * * @return void ******************************************************************************** */ void hme_do_fullsearch( hme_search_prms_t *ps_search_prms, layer_ctxt_t *ps_layer_ctxt, hme_mv_t *ps_best_mv, pred_ctxt_t *ps_pred_ctxt, PF_MV_COST_FXN pf_mv_cost_compute, wgt_pred_ctxt_t *ps_wt_inp_prms, ME_QUALITY_PRESETS_T e_me_quality_preset, range_prms_t *ps_range_prms); /** ******************************************************************************** * @fn hme_pred_search(hme_search_prms_t *ps_search_prms, * layer_ctxt_t *ps_layer_ctxt) * * @brief Implements predictive search after removing duplicate candidates * from initial list. Each square grid (of step 1) is expanded * to nine search pts before the dedeuplication process. one point * cost is then evaluated for each unique node after the deduplication * process * * @param[in,out] ps_search_prms: All the params to this function * * @param[in] ps_layer_ctxt: All info about this layer * * @param[out] pi4_valid_part_ids: Array to hold valid partitions * * @param[in] i4_disable_refine flag to disable refinement * * @return None ******************************************************************************** */ void hme_pred_search( hme_search_prms_t *ps_search_prms, layer_ctxt_t *ps_layer_ctxt, wgt_pred_ctxt_t *ps_wt_inp_prms, S08 i1_grid_flag, ihevce_me_optimised_function_list_t *ps_me_optimised_function_list); /** ******************************************************************************** * @fn void hme_pred_search_no_encode(hme_search_prms_t *ps_search_prms, * layer_ctxt_t *ps_layer_ctxt, * wgt_pred_ctxt_t *ps_wt_inp_prms, * S32 *pi4_valid_part_ids, * S32 disable_refine, * ME_QUALITY_PRESETS_T e_me_quality_preset) * * @brief Implements predictive search after removing duplicate candidates * from initial list. Each square grid (of step 1) is expanded * to nine search pts before the dedeuplication process. one point * cost is then evaluated for each unique node after the deduplication * process * * @param[in,out] ps_search_prms: All the params to this function * * @param[in] ps_layer_ctxt: All info about this layer * * @return None ******************************************************************************** */ void hme_pred_search_no_encode( hme_search_prms_t *ps_search_prms, layer_ctxt_t *ps_layer_ctxt, wgt_pred_ctxt_t *ps_wt_inp_prms, S32 *pi4_valid_part_ids, S32 disable_refine, ME_QUALITY_PRESETS_T e_me_quality_preset, S08 i1_grid_enable, ihevce_me_optimised_function_list_t *ps_me_optimised_function_list); #endif /* #ifndef _HME_SEARCH_ALGO_H_*/