xref: /aosp_15_r20/external/libhevc/decoder/ihevcd_function_selector.h (revision c83a76b084498d55f252f48b2e3786804cdf24b7)
1*c83a76b0SSuyog Pawar /******************************************************************************
2*c83a76b0SSuyog Pawar *
3*c83a76b0SSuyog Pawar * Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore
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 
19*c83a76b0SSuyog Pawar /**
20*c83a76b0SSuyog Pawar  *******************************************************************************
21*c83a76b0SSuyog Pawar  * @file
22*c83a76b0SSuyog Pawar  *  ihevcd_function_selector.h
23*c83a76b0SSuyog Pawar  *
24*c83a76b0SSuyog Pawar  * @brief
25*c83a76b0SSuyog Pawar  *  Structure definitions used in the decoder
26*c83a76b0SSuyog Pawar  *
27*c83a76b0SSuyog Pawar  * @author
28*c83a76b0SSuyog Pawar  *  Harish
29*c83a76b0SSuyog Pawar  *
30*c83a76b0SSuyog Pawar  * @par List of Functions:
31*c83a76b0SSuyog Pawar  *
32*c83a76b0SSuyog Pawar  * @remarks
33*c83a76b0SSuyog Pawar  *  None
34*c83a76b0SSuyog Pawar  *
35*c83a76b0SSuyog Pawar  *******************************************************************************
36*c83a76b0SSuyog Pawar  */
37*c83a76b0SSuyog Pawar 
38*c83a76b0SSuyog Pawar #ifndef _IHEVCD_FUNCTION_SELECTOR_H_
39*c83a76b0SSuyog Pawar #define _IHEVCD_FUNCTION_SELECTOR_H_
40*c83a76b0SSuyog Pawar 
41*c83a76b0SSuyog Pawar #include "ihevc_deblk.h"
42*c83a76b0SSuyog Pawar #include "ihevc_itrans.h"
43*c83a76b0SSuyog Pawar #include "ihevc_itrans_recon.h"
44*c83a76b0SSuyog Pawar #include "ihevc_chroma_itrans_recon.h"
45*c83a76b0SSuyog Pawar #include "ihevc_chroma_intra_pred.h"
46*c83a76b0SSuyog Pawar #include "ihevc_recon.h"
47*c83a76b0SSuyog Pawar #include "ihevc_chroma_recon.h"
48*c83a76b0SSuyog Pawar #include "ihevc_intra_pred.h"
49*c83a76b0SSuyog Pawar #include "ihevc_inter_pred.h"
50*c83a76b0SSuyog Pawar #include "ihevc_mem_fns.h"
51*c83a76b0SSuyog Pawar #include "ihevc_padding.h"
52*c83a76b0SSuyog Pawar #include "ihevc_weighted_pred.h"
53*c83a76b0SSuyog Pawar #include "ihevc_sao.h"
54*c83a76b0SSuyog Pawar #include "ihevcd_fmt_conv.h"
55*c83a76b0SSuyog Pawar #include "ihevcd_itrans_recon_dc.h"
56*c83a76b0SSuyog Pawar 
57*c83a76b0SSuyog Pawar #define D_ARCH_NA                   1
58*c83a76b0SSuyog Pawar #define D_ARCH_ARM_NONEON           2
59*c83a76b0SSuyog Pawar #define D_ARCH_ARM_A9Q              3
60*c83a76b0SSuyog Pawar #define D_ARCH_ARM_A9A              4
61*c83a76b0SSuyog Pawar #define D_ARCH_ARM_A9               5
62*c83a76b0SSuyog Pawar #define D_ARCH_ARM_A7               6
63*c83a76b0SSuyog Pawar #define D_ARCH_ARM_A5               7
64*c83a76b0SSuyog Pawar #define D_ARCH_ARM_A15              8
65*c83a76b0SSuyog Pawar #define D_ARCH_ARM_NEONINTR         9
66*c83a76b0SSuyog Pawar #define D_ARCH_ARMV8_GENERIC        10
67*c83a76b0SSuyog Pawar #define D_ARCH_X86_GENERIC          11
68*c83a76b0SSuyog Pawar #define D_ARCH_X86_SSSE3            12
69*c83a76b0SSuyog Pawar #define D_ARCH_X86_SSE42            13
70*c83a76b0SSuyog Pawar #define D_ARCH_X86_AVX2             14
71*c83a76b0SSuyog Pawar #define D_ARCH_MIPS_GENERIC         15
72*c83a76b0SSuyog Pawar #define D_ARCH_MIPS_32              16
73*c83a76b0SSuyog Pawar 
74*c83a76b0SSuyog Pawar void ihevcd_init_arch(void *pv_codec);
75*c83a76b0SSuyog Pawar 
76*c83a76b0SSuyog Pawar void ihevcd_init_function_ptr(void *pv_codec);
77*c83a76b0SSuyog Pawar 
78*c83a76b0SSuyog Pawar void ihevcd_init_function_ptr_generic(void *pv_codec);
79*c83a76b0SSuyog Pawar void ihevcd_init_function_ptr_ssse3(void *pv_codec);
80*c83a76b0SSuyog Pawar void ihevcd_init_function_ptr_sse42(void *pv_codec);
81*c83a76b0SSuyog Pawar 
82*c83a76b0SSuyog Pawar #ifndef DISABLE_AVX2
83*c83a76b0SSuyog Pawar void ihevcd_init_function_ptr_avx2(void *pv_codec);
84*c83a76b0SSuyog Pawar #endif
85*c83a76b0SSuyog Pawar 
86*c83a76b0SSuyog Pawar typedef struct
87*c83a76b0SSuyog Pawar {
88*c83a76b0SSuyog Pawar     ihevc_deblk_chroma_horz_ft *ihevc_deblk_chroma_horz_fptr;
89*c83a76b0SSuyog Pawar     ihevc_deblk_chroma_vert_ft *ihevc_deblk_chroma_vert_fptr;
90*c83a76b0SSuyog Pawar     ihevc_deblk_luma_vert_ft *ihevc_deblk_luma_vert_fptr;
91*c83a76b0SSuyog Pawar     ihevc_deblk_luma_horz_ft *ihevc_deblk_luma_horz_fptr;
92*c83a76b0SSuyog Pawar 
93*c83a76b0SSuyog Pawar     ihevc_inter_pred_ft *ihevc_inter_pred_chroma_copy_fptr;
94*c83a76b0SSuyog Pawar     ihevc_inter_pred_w16out_ft *ihevc_inter_pred_chroma_copy_w16out_fptr;
95*c83a76b0SSuyog Pawar     ihevc_inter_pred_ft *ihevc_inter_pred_chroma_horz_fptr;
96*c83a76b0SSuyog Pawar     ihevc_inter_pred_w16out_ft *ihevc_inter_pred_chroma_horz_w16out_fptr;
97*c83a76b0SSuyog Pawar     ihevc_inter_pred_ft *ihevc_inter_pred_chroma_vert_fptr;
98*c83a76b0SSuyog Pawar     ihevc_inter_pred_w16inp_ft *ihevc_inter_pred_chroma_vert_w16inp_fptr;
99*c83a76b0SSuyog Pawar     ihevc_inter_pred_w16inp_w16out_ft *ihevc_inter_pred_chroma_vert_w16inp_w16out_fptr;
100*c83a76b0SSuyog Pawar     ihevc_inter_pred_w16out_ft *ihevc_inter_pred_chroma_vert_w16out_fptr;
101*c83a76b0SSuyog Pawar     ihevc_inter_pred_ft *ihevc_inter_pred_luma_horz_fptr;
102*c83a76b0SSuyog Pawar     ihevc_inter_pred_ft *ihevc_inter_pred_luma_vert_fptr;
103*c83a76b0SSuyog Pawar     ihevc_inter_pred_w16out_ft *ihevc_inter_pred_luma_vert_w16out_fptr;
104*c83a76b0SSuyog Pawar     ihevc_inter_pred_w16inp_ft *ihevc_inter_pred_luma_vert_w16inp_fptr;
105*c83a76b0SSuyog Pawar     ihevc_inter_pred_ft *ihevc_inter_pred_luma_copy_fptr;
106*c83a76b0SSuyog Pawar     ihevc_inter_pred_w16out_ft *ihevc_inter_pred_luma_copy_w16out_fptr;
107*c83a76b0SSuyog Pawar     ihevc_inter_pred_w16out_ft *ihevc_inter_pred_luma_horz_w16out_fptr;
108*c83a76b0SSuyog Pawar     ihevc_inter_pred_w16inp_w16out_ft *ihevc_inter_pred_luma_vert_w16inp_w16out_fptr;
109*c83a76b0SSuyog Pawar 
110*c83a76b0SSuyog Pawar     ihevc_intra_pred_chroma_ref_substitution_ft *ihevc_intra_pred_chroma_ref_substitution_fptr;
111*c83a76b0SSuyog Pawar     ihevc_intra_pred_luma_ref_substitution_ft *ihevc_intra_pred_luma_ref_substitution_fptr;
112*c83a76b0SSuyog Pawar     ihevc_intra_pred_luma_ref_subst_all_avlble_ft *ihevc_intra_pred_luma_ref_subst_all_avlble_fptr;
113*c83a76b0SSuyog Pawar     ihevc_intra_pred_ref_filtering_ft *ihevc_intra_pred_ref_filtering_fptr;
114*c83a76b0SSuyog Pawar     ihevc_intra_pred_chroma_dc_ft *ihevc_intra_pred_chroma_dc_fptr;
115*c83a76b0SSuyog Pawar     ihevc_intra_pred_chroma_horz_ft *ihevc_intra_pred_chroma_horz_fptr;
116*c83a76b0SSuyog Pawar     ihevc_intra_pred_chroma_mode2_ft *ihevc_intra_pred_chroma_mode2_fptr;
117*c83a76b0SSuyog Pawar     ihevc_intra_pred_chroma_mode_18_34_ft *ihevc_intra_pred_chroma_mode_18_34_fptr;
118*c83a76b0SSuyog Pawar     ihevc_intra_pred_chroma_mode_27_to_33_ft *ihevc_intra_pred_chroma_mode_27_to_33_fptr;
119*c83a76b0SSuyog Pawar     ihevc_intra_pred_chroma_mode_3_to_9_ft *ihevc_intra_pred_chroma_mode_3_to_9_fptr;
120*c83a76b0SSuyog Pawar     ihevc_intra_pred_chroma_planar_ft *ihevc_intra_pred_chroma_planar_fptr;
121*c83a76b0SSuyog Pawar     ihevc_intra_pred_chroma_ver_ft *ihevc_intra_pred_chroma_ver_fptr;
122*c83a76b0SSuyog Pawar     ihevc_intra_pred_chroma_mode_11_to_17_ft *ihevc_intra_pred_chroma_mode_11_to_17_fptr;
123*c83a76b0SSuyog Pawar     ihevc_intra_pred_chroma_mode_19_to_25_ft *ihevc_intra_pred_chroma_mode_19_to_25_fptr;
124*c83a76b0SSuyog Pawar     ihevc_intra_pred_luma_mode_11_to_17_ft *ihevc_intra_pred_luma_mode_11_to_17_fptr;
125*c83a76b0SSuyog Pawar     ihevc_intra_pred_luma_mode_19_to_25_ft *ihevc_intra_pred_luma_mode_19_to_25_fptr;
126*c83a76b0SSuyog Pawar     ihevc_intra_pred_luma_dc_ft *ihevc_intra_pred_luma_dc_fptr;
127*c83a76b0SSuyog Pawar     ihevc_intra_pred_luma_horz_ft *ihevc_intra_pred_luma_horz_fptr;
128*c83a76b0SSuyog Pawar     ihevc_intra_pred_luma_mode2_ft *ihevc_intra_pred_luma_mode2_fptr;
129*c83a76b0SSuyog Pawar     ihevc_intra_pred_luma_mode_18_34_ft *ihevc_intra_pred_luma_mode_18_34_fptr;
130*c83a76b0SSuyog Pawar     ihevc_intra_pred_luma_mode_27_to_33_ft *ihevc_intra_pred_luma_mode_27_to_33_fptr;
131*c83a76b0SSuyog Pawar     ihevc_intra_pred_luma_mode_3_to_9_ft *ihevc_intra_pred_luma_mode_3_to_9_fptr;
132*c83a76b0SSuyog Pawar     ihevc_intra_pred_luma_planar_ft *ihevc_intra_pred_luma_planar_fptr;
133*c83a76b0SSuyog Pawar     ihevc_intra_pred_luma_ver_ft *ihevc_intra_pred_luma_ver_fptr;
134*c83a76b0SSuyog Pawar     ihevc_itrans_4x4_ttype1_ft *ihevc_itrans_4x4_ttype1_fptr;
135*c83a76b0SSuyog Pawar     ihevc_itrans_4x4_ft *ihevc_itrans_4x4_fptr;
136*c83a76b0SSuyog Pawar     ihevc_itrans_8x8_ft *ihevc_itrans_8x8_fptr;
137*c83a76b0SSuyog Pawar     ihevc_itrans_16x16_ft *ihevc_itrans_16x16_fptr;
138*c83a76b0SSuyog Pawar     ihevc_itrans_32x32_ft *ihevc_itrans_32x32_fptr;
139*c83a76b0SSuyog Pawar     ihevc_itrans_recon_4x4_ttype1_ft *ihevc_itrans_recon_4x4_ttype1_fptr;
140*c83a76b0SSuyog Pawar     ihevc_itrans_recon_4x4_ft *ihevc_itrans_recon_4x4_fptr;
141*c83a76b0SSuyog Pawar     ihevc_itrans_recon_8x8_ft *ihevc_itrans_recon_8x8_fptr;
142*c83a76b0SSuyog Pawar     ihevc_itrans_recon_16x16_ft *ihevc_itrans_recon_16x16_fptr;
143*c83a76b0SSuyog Pawar     ihevc_itrans_recon_32x32_ft *ihevc_itrans_recon_32x32_fptr;
144*c83a76b0SSuyog Pawar     ihevc_chroma_itrans_recon_4x4_ft *ihevc_chroma_itrans_recon_4x4_fptr;
145*c83a76b0SSuyog Pawar     ihevc_chroma_itrans_recon_8x8_ft *ihevc_chroma_itrans_recon_8x8_fptr;
146*c83a76b0SSuyog Pawar     ihevc_chroma_itrans_recon_16x16_ft *ihevc_chroma_itrans_recon_16x16_fptr;
147*c83a76b0SSuyog Pawar     ihevc_recon_4x4_ttype1_ft *ihevc_recon_4x4_ttype1_fptr;
148*c83a76b0SSuyog Pawar     ihevc_recon_4x4_ft *ihevc_recon_4x4_fptr;
149*c83a76b0SSuyog Pawar     ihevc_recon_8x8_ft *ihevc_recon_8x8_fptr;
150*c83a76b0SSuyog Pawar     ihevc_recon_16x16_ft *ihevc_recon_16x16_fptr;
151*c83a76b0SSuyog Pawar     ihevc_recon_32x32_ft *ihevc_recon_32x32_fptr;
152*c83a76b0SSuyog Pawar     ihevc_chroma_recon_4x4_ft *ihevc_chroma_recon_4x4_fptr;
153*c83a76b0SSuyog Pawar     ihevc_chroma_recon_8x8_ft *ihevc_chroma_recon_8x8_fptr;
154*c83a76b0SSuyog Pawar     ihevc_chroma_recon_16x16_ft *ihevc_chroma_recon_16x16_fptr;
155*c83a76b0SSuyog Pawar     ihevc_memcpy_mul_8_ft *ihevc_memcpy_mul_8_fptr;
156*c83a76b0SSuyog Pawar     ihevc_memcpy_ft *ihevc_memcpy_fptr;
157*c83a76b0SSuyog Pawar     ihevc_memset_mul_8_ft *ihevc_memset_mul_8_fptr;
158*c83a76b0SSuyog Pawar     ihevc_memset_ft *ihevc_memset_fptr;
159*c83a76b0SSuyog Pawar     ihevc_memset_16bit_mul_8_ft *ihevc_memset_16bit_mul_8_fptr;
160*c83a76b0SSuyog Pawar     ihevc_memset_16bit_ft *ihevc_memset_16bit_fptr;
161*c83a76b0SSuyog Pawar     ihevc_pad_left_luma_ft *ihevc_pad_left_luma_fptr;
162*c83a76b0SSuyog Pawar     ihevc_pad_left_chroma_ft *ihevc_pad_left_chroma_fptr;
163*c83a76b0SSuyog Pawar     ihevc_pad_right_luma_ft *ihevc_pad_right_luma_fptr;
164*c83a76b0SSuyog Pawar     ihevc_pad_right_chroma_ft *ihevc_pad_right_chroma_fptr;
165*c83a76b0SSuyog Pawar     ihevc_weighted_pred_bi_ft *ihevc_weighted_pred_bi_fptr;
166*c83a76b0SSuyog Pawar     ihevc_weighted_pred_bi_default_ft *ihevc_weighted_pred_bi_default_fptr;
167*c83a76b0SSuyog Pawar     ihevc_weighted_pred_uni_ft *ihevc_weighted_pred_uni_fptr;
168*c83a76b0SSuyog Pawar     ihevc_weighted_pred_chroma_bi_ft *ihevc_weighted_pred_chroma_bi_fptr;
169*c83a76b0SSuyog Pawar     ihevc_weighted_pred_chroma_bi_default_ft *ihevc_weighted_pred_chroma_bi_default_fptr;
170*c83a76b0SSuyog Pawar     ihevc_weighted_pred_chroma_uni_ft *ihevc_weighted_pred_chroma_uni_fptr;
171*c83a76b0SSuyog Pawar     ihevc_sao_band_offset_luma_ft *ihevc_sao_band_offset_luma_fptr;
172*c83a76b0SSuyog Pawar     ihevc_sao_band_offset_chroma_ft *ihevc_sao_band_offset_chroma_fptr;
173*c83a76b0SSuyog Pawar     ihevc_sao_edge_offset_class0_ft *ihevc_sao_edge_offset_class0_fptr;
174*c83a76b0SSuyog Pawar     ihevc_sao_edge_offset_class0_chroma_ft *ihevc_sao_edge_offset_class0_chroma_fptr;
175*c83a76b0SSuyog Pawar     ihevc_sao_edge_offset_class1_ft *ihevc_sao_edge_offset_class1_fptr;
176*c83a76b0SSuyog Pawar     ihevc_sao_edge_offset_class1_chroma_ft *ihevc_sao_edge_offset_class1_chroma_fptr;
177*c83a76b0SSuyog Pawar     ihevc_sao_edge_offset_class2_ft *ihevc_sao_edge_offset_class2_fptr;
178*c83a76b0SSuyog Pawar     ihevc_sao_edge_offset_class2_chroma_ft *ihevc_sao_edge_offset_class2_chroma_fptr;
179*c83a76b0SSuyog Pawar     ihevc_sao_edge_offset_class3_ft *ihevc_sao_edge_offset_class3_fptr;
180*c83a76b0SSuyog Pawar     ihevc_sao_edge_offset_class3_chroma_ft *ihevc_sao_edge_offset_class3_chroma_fptr;
181*c83a76b0SSuyog Pawar     ihevcd_fmt_conv_420sp_to_rgba8888_ft *ihevcd_fmt_conv_420sp_to_rgba8888_fptr;
182*c83a76b0SSuyog Pawar     ihevcd_fmt_conv_420sp_to_rgb565_ft *ihevcd_fmt_conv_420sp_to_rgb565_fptr;
183*c83a76b0SSuyog Pawar     ihevcd_fmt_conv_420sp_to_420sp_ft *ihevcd_fmt_conv_420sp_to_420sp_fptr;
184*c83a76b0SSuyog Pawar     ihevcd_fmt_conv_420sp_to_420p_ft *ihevcd_fmt_conv_420sp_to_420p_fptr;
185*c83a76b0SSuyog Pawar     ihevcd_itrans_recon_dc_luma_ft *ihevcd_itrans_recon_dc_luma_fptr;
186*c83a76b0SSuyog Pawar     ihevcd_itrans_recon_dc_chroma_ft *ihevcd_itrans_recon_dc_chroma_fptr;
187*c83a76b0SSuyog Pawar }func_selector_t;
188*c83a76b0SSuyog Pawar 
189*c83a76b0SSuyog Pawar #endif /* _IHEVCD_FUNCTION_SELECTOR_H_ */
190