xref: /aosp_15_r20/external/libhevc/encoder/hme_search_algo.h (revision c83a76b084498d55f252f48b2e3786804cdf24b7)
1*c83a76b0SSuyog Pawar /******************************************************************************
2*c83a76b0SSuyog Pawar  *
3*c83a76b0SSuyog Pawar  * Copyright (C) 2018 The Android Open Source Project
4*c83a76b0SSuyog Pawar  *
5*c83a76b0SSuyog Pawar  * Licensed under the Apache License, Version 2.0 (the "License");
6*c83a76b0SSuyog Pawar  * you may not use this file except in compliance with the License.
7*c83a76b0SSuyog Pawar  * You may obtain a copy of the License at:
8*c83a76b0SSuyog Pawar  *
9*c83a76b0SSuyog Pawar  * http://www.apache.org/licenses/LICENSE-2.0
10*c83a76b0SSuyog Pawar  *
11*c83a76b0SSuyog Pawar  * Unless required by applicable law or agreed to in writing, software
12*c83a76b0SSuyog Pawar  * distributed under the License is distributed on an "AS IS" BASIS,
13*c83a76b0SSuyog Pawar  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*c83a76b0SSuyog Pawar  * See the License for the specific language governing permissions and
15*c83a76b0SSuyog Pawar  * limitations under the License.
16*c83a76b0SSuyog Pawar  *
17*c83a76b0SSuyog Pawar  *****************************************************************************
18*c83a76b0SSuyog Pawar  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*c83a76b0SSuyog Pawar */
20*c83a76b0SSuyog Pawar /*!
21*c83a76b0SSuyog Pawar ******************************************************************************
22*c83a76b0SSuyog Pawar * \file hme_search_algo.h
23*c83a76b0SSuyog Pawar *
24*c83a76b0SSuyog Pawar * \brief
25*c83a76b0SSuyog Pawar *    contains prototypes for search algorithms called by coarse/refinement
26*c83a76b0SSuyog Pawar *    layers.
27*c83a76b0SSuyog Pawar *
28*c83a76b0SSuyog Pawar * \date
29*c83a76b0SSuyog Pawar *    18/09/2012
30*c83a76b0SSuyog Pawar *
31*c83a76b0SSuyog Pawar * \author
32*c83a76b0SSuyog Pawar *    Ittiam
33*c83a76b0SSuyog Pawar *
34*c83a76b0SSuyog Pawar ******************************************************************************
35*c83a76b0SSuyog Pawar */
36*c83a76b0SSuyog Pawar 
37*c83a76b0SSuyog Pawar #ifndef _HME_SEARCH_ALGO_H_
38*c83a76b0SSuyog Pawar #define _HME_SEARCH_ALGO_H_
39*c83a76b0SSuyog Pawar 
40*c83a76b0SSuyog Pawar /*****************************************************************************/
41*c83a76b0SSuyog Pawar /* Functions                                                                 */
42*c83a76b0SSuyog Pawar /*****************************************************************************/
43*c83a76b0SSuyog Pawar /**
44*c83a76b0SSuyog Pawar ********************************************************************************
45*c83a76b0SSuyog Pawar *  @fn     void hme_pred_search_square_stepn(hme_search_prms_t *ps_search_prms,
46*c83a76b0SSuyog Pawar *                                   layer_ctxt_t *ps_layer_ctxt)
47*c83a76b0SSuyog Pawar *
48*c83a76b0SSuyog Pawar *  @brief  Implements predictive search, with square grid refinement. In this
49*c83a76b0SSuyog Pawar *          case, we start with a bigger step size, like 4, refining upto a
50*c83a76b0SSuyog Pawar *          variable number of pts, till we hit end of search range or hit a
51*c83a76b0SSuyog Pawar *          minima. Then we refine using smaller steps. The bigger step size
52*c83a76b0SSuyog Pawar *          like 4 or 2, do not use optimized SAD functions, they evaluate
53*c83a76b0SSuyog Pawar *          SAD for each individual pt.
54*c83a76b0SSuyog Pawar *
55*c83a76b0SSuyog Pawar *  @param[in,out]  ps_search_prms: All the params to this function
56*c83a76b0SSuyog Pawar *
57*c83a76b0SSuyog Pawar *  @param[in] ps_layer_ctxt: Context for the layer
58*c83a76b0SSuyog Pawar *
59*c83a76b0SSuyog Pawar *  @return None
60*c83a76b0SSuyog Pawar ********************************************************************************
61*c83a76b0SSuyog Pawar */
62*c83a76b0SSuyog Pawar void hme_pred_search_square_stepn(
63*c83a76b0SSuyog Pawar     hme_search_prms_t *ps_search_prms,
64*c83a76b0SSuyog Pawar     layer_ctxt_t *ps_layer_ctxt,
65*c83a76b0SSuyog Pawar     wgt_pred_ctxt_t *ps_wt_inp_prms,
66*c83a76b0SSuyog Pawar     ME_QUALITY_PRESETS_T e_me_quality_preset,
67*c83a76b0SSuyog Pawar     ihevce_me_optimised_function_list_t *ps_me_optimised_function_list);
68*c83a76b0SSuyog Pawar 
69*c83a76b0SSuyog Pawar /**
70*c83a76b0SSuyog Pawar ********************************************************************************
71*c83a76b0SSuyog Pawar *  @fn     hme_do_fullsearch(hme_search_prms_t *ps_search_prms,
72*c83a76b0SSuyog Pawar *                               layer_ctxt_t *ps_layer_ctxt,
73*c83a76b0SSuyog Pawar *                               hme_mv_t *ps_best_mv,
74*c83a76b0SSuyog Pawar *                               pred_ctxt_t *ps_pred_ctxt,
75*c83a76b0SSuyog Pawar *                               PF_MV_COST_FXN pf_mv_cost_compute)
76*c83a76b0SSuyog Pawar *
77*c83a76b0SSuyog Pawar *  @brief  Does a full search on entire srch window with a given step size
78*c83a76b0SSuyog Pawar *
79*c83a76b0SSuyog Pawar *  @param[in] ps_search_prms : Search prms structure containing info like
80*c83a76b0SSuyog Pawar *               blk dimensions, search range etc
81*c83a76b0SSuyog Pawar *
82*c83a76b0SSuyog Pawar *  @param[in] ps_layer_ctxt: All info about this layer
83*c83a76b0SSuyog Pawar *
84*c83a76b0SSuyog Pawar *  @param[out] ps_best_mv  : type hme_mv_t contains best mv x and y
85*c83a76b0SSuyog Pawar *
86*c83a76b0SSuyog Pawar *  @param[in] ps_pred_ctxt : Prediction ctxt for cost computation
87*c83a76b0SSuyog Pawar *
88*c83a76b0SSuyog Pawar *  @param[in] pf_mv_cost_compute : mv cost computation function
89*c83a76b0SSuyog Pawar *
90*c83a76b0SSuyog Pawar *  @return void
91*c83a76b0SSuyog Pawar ********************************************************************************
92*c83a76b0SSuyog Pawar */
93*c83a76b0SSuyog Pawar void hme_do_fullsearch(
94*c83a76b0SSuyog Pawar     hme_search_prms_t *ps_search_prms,
95*c83a76b0SSuyog Pawar     layer_ctxt_t *ps_layer_ctxt,
96*c83a76b0SSuyog Pawar     hme_mv_t *ps_best_mv,
97*c83a76b0SSuyog Pawar     pred_ctxt_t *ps_pred_ctxt,
98*c83a76b0SSuyog Pawar     PF_MV_COST_FXN pf_mv_cost_compute,
99*c83a76b0SSuyog Pawar     wgt_pred_ctxt_t *ps_wt_inp_prms,
100*c83a76b0SSuyog Pawar     ME_QUALITY_PRESETS_T e_me_quality_preset,
101*c83a76b0SSuyog Pawar     range_prms_t *ps_range_prms);
102*c83a76b0SSuyog Pawar 
103*c83a76b0SSuyog Pawar /**
104*c83a76b0SSuyog Pawar ********************************************************************************
105*c83a76b0SSuyog Pawar *  @fn     hme_pred_search(hme_search_prms_t *ps_search_prms,
106*c83a76b0SSuyog Pawar *                               layer_ctxt_t *ps_layer_ctxt)
107*c83a76b0SSuyog Pawar *
108*c83a76b0SSuyog Pawar *  @brief  Implements predictive search after removing duplicate candidates
109*c83a76b0SSuyog Pawar *          from initial list. Each square grid (of step 1) is expanded
110*c83a76b0SSuyog Pawar *          to nine search pts before the dedeuplication process. one point
111*c83a76b0SSuyog Pawar *          cost is then evaluated for each unique node after the deduplication
112*c83a76b0SSuyog Pawar *          process
113*c83a76b0SSuyog Pawar *
114*c83a76b0SSuyog Pawar *  @param[in,out]  ps_search_prms: All the params to this function
115*c83a76b0SSuyog Pawar *
116*c83a76b0SSuyog Pawar *  @param[in] ps_layer_ctxt: All info about this layer
117*c83a76b0SSuyog Pawar *
118*c83a76b0SSuyog Pawar *  @param[out] pi4_valid_part_ids: Array to hold valid partitions
119*c83a76b0SSuyog Pawar *
120*c83a76b0SSuyog Pawar *  @param[in] i4_disable_refine flag to disable refinement
121*c83a76b0SSuyog Pawar *
122*c83a76b0SSuyog Pawar *  @return None
123*c83a76b0SSuyog Pawar ********************************************************************************
124*c83a76b0SSuyog Pawar */
125*c83a76b0SSuyog Pawar void hme_pred_search(
126*c83a76b0SSuyog Pawar     hme_search_prms_t *ps_search_prms,
127*c83a76b0SSuyog Pawar     layer_ctxt_t *ps_layer_ctxt,
128*c83a76b0SSuyog Pawar     wgt_pred_ctxt_t *ps_wt_inp_prms,
129*c83a76b0SSuyog Pawar     S08 i1_grid_flag,
130*c83a76b0SSuyog Pawar     ihevce_me_optimised_function_list_t *ps_me_optimised_function_list);
131*c83a76b0SSuyog Pawar 
132*c83a76b0SSuyog Pawar /**
133*c83a76b0SSuyog Pawar ********************************************************************************
134*c83a76b0SSuyog Pawar *  @fn     void hme_pred_search_no_encode(hme_search_prms_t *ps_search_prms,
135*c83a76b0SSuyog Pawar *                                         layer_ctxt_t *ps_layer_ctxt,
136*c83a76b0SSuyog Pawar *                                         wgt_pred_ctxt_t *ps_wt_inp_prms,
137*c83a76b0SSuyog Pawar *                                         S32 *pi4_valid_part_ids,
138*c83a76b0SSuyog Pawar *                                         S32 disable_refine,
139*c83a76b0SSuyog Pawar *                                         ME_QUALITY_PRESETS_T e_me_quality_preset)
140*c83a76b0SSuyog Pawar *
141*c83a76b0SSuyog Pawar *  @brief  Implements predictive search after removing duplicate candidates
142*c83a76b0SSuyog Pawar *          from initial list. Each square grid (of step 1) is expanded
143*c83a76b0SSuyog Pawar *          to nine search pts before the dedeuplication process. one point
144*c83a76b0SSuyog Pawar *          cost is then evaluated for each unique node after the deduplication
145*c83a76b0SSuyog Pawar *          process
146*c83a76b0SSuyog Pawar *
147*c83a76b0SSuyog Pawar *  @param[in,out]  ps_search_prms: All the params to this function
148*c83a76b0SSuyog Pawar *
149*c83a76b0SSuyog Pawar *  @param[in] ps_layer_ctxt: All info about this layer
150*c83a76b0SSuyog Pawar *
151*c83a76b0SSuyog Pawar *  @return None
152*c83a76b0SSuyog Pawar ********************************************************************************
153*c83a76b0SSuyog Pawar */
154*c83a76b0SSuyog Pawar void hme_pred_search_no_encode(
155*c83a76b0SSuyog Pawar     hme_search_prms_t *ps_search_prms,
156*c83a76b0SSuyog Pawar     layer_ctxt_t *ps_layer_ctxt,
157*c83a76b0SSuyog Pawar     wgt_pred_ctxt_t *ps_wt_inp_prms,
158*c83a76b0SSuyog Pawar     S32 *pi4_valid_part_ids,
159*c83a76b0SSuyog Pawar     S32 disable_refine,
160*c83a76b0SSuyog Pawar     ME_QUALITY_PRESETS_T e_me_quality_preset,
161*c83a76b0SSuyog Pawar     S08 i1_grid_enable,
162*c83a76b0SSuyog Pawar     ihevce_me_optimised_function_list_t *ps_me_optimised_function_list);
163*c83a76b0SSuyog Pawar 
164*c83a76b0SSuyog Pawar #endif /* #ifndef _HME_SEARCH_ALGO_H_*/
165