xref: /aosp_15_r20/external/libhevc/encoder/hme_function_selector.c (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
23*c83a76b0SSuyog Pawar *  hme_function_selector.c
24*c83a76b0SSuyog Pawar *
25*c83a76b0SSuyog Pawar * @brief
26*c83a76b0SSuyog Pawar *  Contains functions to initialize function pointers used in hevc me
27*c83a76b0SSuyog Pawar *
28*c83a76b0SSuyog Pawar * @author
29*c83a76b0SSuyog Pawar *  ittiam
30*c83a76b0SSuyog Pawar *
31*c83a76b0SSuyog Pawar * @par List of Functions:
32*c83a76b0SSuyog Pawar *
33*c83a76b0SSuyog Pawar *
34*c83a76b0SSuyog Pawar * @remarks
35*c83a76b0SSuyog Pawar *  None
36*c83a76b0SSuyog Pawar *
37*c83a76b0SSuyog Pawar *******************************************************************************
38*c83a76b0SSuyog Pawar */
39*c83a76b0SSuyog Pawar /*****************************************************************************/
40*c83a76b0SSuyog Pawar /* File Includes                                                             */
41*c83a76b0SSuyog Pawar /*****************************************************************************/
42*c83a76b0SSuyog Pawar /* System include files */
43*c83a76b0SSuyog Pawar #include <stdio.h>
44*c83a76b0SSuyog Pawar #include <stdlib.h>
45*c83a76b0SSuyog Pawar #include <assert.h>
46*c83a76b0SSuyog Pawar 
47*c83a76b0SSuyog Pawar /* User include files */
48*c83a76b0SSuyog Pawar #include "ihevc_typedefs.h"
49*c83a76b0SSuyog Pawar #include "itt_video_api.h"
50*c83a76b0SSuyog Pawar #include "ihevc_chroma_itrans_recon.h"
51*c83a76b0SSuyog Pawar #include "ihevc_chroma_intra_pred.h"
52*c83a76b0SSuyog Pawar #include "ihevc_debug.h"
53*c83a76b0SSuyog Pawar #include "ihevc_deblk.h"
54*c83a76b0SSuyog Pawar #include "ihevc_defs.h"
55*c83a76b0SSuyog Pawar #include "ihevc_itrans_recon.h"
56*c83a76b0SSuyog Pawar #include "ihevc_intra_pred.h"
57*c83a76b0SSuyog Pawar #include "ihevc_inter_pred.h"
58*c83a76b0SSuyog Pawar #include "ihevc_macros.h"
59*c83a76b0SSuyog Pawar #include "ihevc_mem_fns.h"
60*c83a76b0SSuyog Pawar #include "ihevc_padding.h"
61*c83a76b0SSuyog Pawar #include "ihevc_quant_iquant_ssd.h"
62*c83a76b0SSuyog Pawar #include "ihevc_resi_trans.h"
63*c83a76b0SSuyog Pawar #include "ihevc_sao.h"
64*c83a76b0SSuyog Pawar #include "ihevc_structs.h"
65*c83a76b0SSuyog Pawar #include "ihevc_weighted_pred.h"
66*c83a76b0SSuyog Pawar 
67*c83a76b0SSuyog Pawar #include "rc_cntrl_param.h"
68*c83a76b0SSuyog Pawar #include "rc_frame_info_collector.h"
69*c83a76b0SSuyog Pawar #include "rc_look_ahead_params.h"
70*c83a76b0SSuyog Pawar 
71*c83a76b0SSuyog Pawar #include "ihevce_api.h"
72*c83a76b0SSuyog Pawar #include "ihevce_defs.h"
73*c83a76b0SSuyog Pawar #include "ihevce_lap_enc_structs.h"
74*c83a76b0SSuyog Pawar #include "ihevce_multi_thrd_structs.h"
75*c83a76b0SSuyog Pawar #include "ihevce_function_selector.h"
76*c83a76b0SSuyog Pawar #include "ihevce_me_common_defs.h"
77*c83a76b0SSuyog Pawar #include "ihevce_enc_structs.h"
78*c83a76b0SSuyog Pawar #include "ihevce_had_satd.h"
79*c83a76b0SSuyog Pawar #include "ihevce_cmn_utils_instr_set_router.h"
80*c83a76b0SSuyog Pawar #include "ihevce_global_tables.h"
81*c83a76b0SSuyog Pawar 
82*c83a76b0SSuyog Pawar #include "hme_datatype.h"
83*c83a76b0SSuyog Pawar #include "hme_common_defs.h"
84*c83a76b0SSuyog Pawar #include "hme_common_utils.h"
85*c83a76b0SSuyog Pawar #include "hme_interface.h"
86*c83a76b0SSuyog Pawar #include "hme_defs.h"
87*c83a76b0SSuyog Pawar #include "hme_err_compute.h"
88*c83a76b0SSuyog Pawar #include "hme_globals.h"
89*c83a76b0SSuyog Pawar 
90*c83a76b0SSuyog Pawar #include "ihevce_me_instr_set_router.h"
91*c83a76b0SSuyog Pawar 
92*c83a76b0SSuyog Pawar /*****************************************************************************/
93*c83a76b0SSuyog Pawar /* Extern Function Declarations                                              */
94*c83a76b0SSuyog Pawar /*****************************************************************************/
95*c83a76b0SSuyog Pawar 
96*c83a76b0SSuyog Pawar // clang-format off
97*c83a76b0SSuyog Pawar 
98*c83a76b0SSuyog Pawar #ifdef ENABLE_NEON
99*c83a76b0SSuyog Pawar FT_CALC_SATD_AND_RESULT hme_evalsatd_update_1_best_result_pt_pu_16x16_neon;
100*c83a76b0SSuyog Pawar #endif
101*c83a76b0SSuyog Pawar 
102*c83a76b0SSuyog Pawar /*****************************************************************************/
103*c83a76b0SSuyog Pawar /* Function Definitions                                                      */
104*c83a76b0SSuyog Pawar /*****************************************************************************/
105*c83a76b0SSuyog Pawar 
106*c83a76b0SSuyog Pawar 
107*c83a76b0SSuyog Pawar #ifdef ENABLE_NEON
hme_init_function_ptr_neon(void * pv_me_context)108*c83a76b0SSuyog Pawar void hme_init_function_ptr_neon(void *pv_me_context)
109*c83a76b0SSuyog Pawar {
110*c83a76b0SSuyog Pawar     me_master_ctxt_t *pv_me_ctxt = (me_master_ctxt_t *)pv_me_context;
111*c83a76b0SSuyog Pawar 
112*c83a76b0SSuyog Pawar     // clang-format off
113*c83a76b0SSuyog Pawar     pv_me_ctxt->s_func_selector.pf_had_8x8_using_4_4x4_r = &ihevce_had_8x8_using_4_4x4_r_neon;
114*c83a76b0SSuyog Pawar     pv_me_ctxt->s_func_selector.pf_had_16x16_r = &ihevce_had_16x16_r_neon;
115*c83a76b0SSuyog Pawar     pv_me_ctxt->s_func_selector.pf_compute_32x32HAD_using_16x16 = &ihevce_compute_32x32HAD_using_16x16_neon;
116*c83a76b0SSuyog Pawar     pv_me_ctxt->s_func_selector.pf_evalsatd_update_1_best_result_pt_pu_16x16_num_part_eq_1 = hme_evalsatd_update_1_best_result_pt_pu_16x16_neon;
117*c83a76b0SSuyog Pawar     pv_me_ctxt->s_func_selector.pf_evalsatd_update_1_best_result_pt_pu_16x16_num_part_lt_9 = hme_evalsatd_update_1_best_result_pt_pu_16x16_neon;
118*c83a76b0SSuyog Pawar     pv_me_ctxt->s_func_selector.pf_evalsatd_update_1_best_result_pt_pu_16x16_num_part_lt_17 = hme_evalsatd_update_1_best_result_pt_pu_16x16_neon;
119*c83a76b0SSuyog Pawar     // clang-format on
120*c83a76b0SSuyog Pawar }
121*c83a76b0SSuyog Pawar #endif
122*c83a76b0SSuyog Pawar 
hme_init_function_ptr_generic(void * pv_me_context)123*c83a76b0SSuyog Pawar void hme_init_function_ptr_generic(void *pv_me_context)
124*c83a76b0SSuyog Pawar {
125*c83a76b0SSuyog Pawar     me_master_ctxt_t *pv_me_ctxt = (me_master_ctxt_t *)pv_me_context;
126*c83a76b0SSuyog Pawar 
127*c83a76b0SSuyog Pawar     // clang-format off
128*c83a76b0SSuyog Pawar     pv_me_ctxt->s_func_selector.pf_had_8x8_using_4_4x4_r = &ihevce_had_8x8_using_4_4x4_r;
129*c83a76b0SSuyog Pawar     pv_me_ctxt->s_func_selector.pf_had_16x16_r = &ihevce_had_16x16_r;
130*c83a76b0SSuyog Pawar     pv_me_ctxt->s_func_selector.pf_compute_32x32HAD_using_16x16 = &ihevce_compute_32x32HAD_using_16x16;
131*c83a76b0SSuyog Pawar     pv_me_ctxt->s_func_selector.pf_evalsatd_update_1_best_result_pt_pu_16x16_num_part_eq_1 = hme_evalsatd_update_1_best_result_pt_pu_16x16;
132*c83a76b0SSuyog Pawar     pv_me_ctxt->s_func_selector.pf_evalsatd_update_1_best_result_pt_pu_16x16_num_part_lt_9 = hme_evalsatd_update_1_best_result_pt_pu_16x16;
133*c83a76b0SSuyog Pawar     pv_me_ctxt->s_func_selector.pf_evalsatd_update_1_best_result_pt_pu_16x16_num_part_lt_17 = hme_evalsatd_update_1_best_result_pt_pu_16x16;
134*c83a76b0SSuyog Pawar     // clang-format on
135*c83a76b0SSuyog Pawar }
136*c83a76b0SSuyog Pawar 
hme_init_function_ptr(void * pv_me_context,IV_ARCH_T e_processor_arch)137*c83a76b0SSuyog Pawar void hme_init_function_ptr(void *pv_me_context, IV_ARCH_T e_processor_arch)
138*c83a76b0SSuyog Pawar {
139*c83a76b0SSuyog Pawar     switch(e_processor_arch)
140*c83a76b0SSuyog Pawar     {
141*c83a76b0SSuyog Pawar #ifdef ENABLE_NEON
142*c83a76b0SSuyog Pawar     case ARCH_ARM_A9Q:
143*c83a76b0SSuyog Pawar     case ARCH_ARM_V8_NEON:
144*c83a76b0SSuyog Pawar         hme_init_function_ptr_neon(pv_me_context);
145*c83a76b0SSuyog Pawar         break;
146*c83a76b0SSuyog Pawar #endif
147*c83a76b0SSuyog Pawar     default:
148*c83a76b0SSuyog Pawar         hme_init_function_ptr_generic(pv_me_context);
149*c83a76b0SSuyog Pawar         break;
150*c83a76b0SSuyog Pawar     }
151*c83a76b0SSuyog Pawar }
152