xref: /aosp_15_r20/external/libavc/decoder/svc/isvcd_function_selector_generic.c (revision 495ae853bb871d1e5a258cb02c2cc13cde8ddb9a)
1 /******************************************************************************
2  *
3  * Copyright (C) 2022 The Android Open Source Project
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at:
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  *****************************************************************************
18  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19  */
20 /**
21  *******************************************************************************
22  * @file
23  *  isvcd_function_selector_generic.c
24  *
25  * @brief
26  *  Contains functions to initialize function pointers of codec context
27  *
28  * @author
29  *  kishore
30  *
31  * @par List of Functions:
32  *  - isvcd_init_function_ptr_generic()
33  *
34  * @remarks
35  *  None
36  *
37  *******************************************************************************
38  */
39 
40 /*****************************************************************************/
41 /* File Includes                                                             */
42 /*****************************************************************************/
43 
44 /* System Include files */
45 #include <stdio.h>
46 #include <stddef.h>
47 #include <stdlib.h>
48 #include <string.h>
49 
50 /* User Include files */
51 #include "ih264_typedefs.h"
52 #include "iv.h"
53 #include "ivd.h"
54 #include "ih264_defs.h"
55 #include "ih264_size_defs.h"
56 #include "ih264_error.h"
57 #include "ih264_trans_quant_itrans_iquant.h"
58 #include "ih264_inter_pred_filters.h"
59 #include "isvcd_iquant_itrans_residual_recon.h"
60 #include "isvcd_iquant_itrans_residual.h"
61 #include "isvcd_iquant_itrans.h"
62 #include "isvcd_pred_residual_recon.h"
63 #include "isvcd_structs.h"
64 #include "ih264d_function_selector.h"
65 #include "isvcd_function_selector.h"
66 /**
67  *******************************************************************************
68  *
69  * @brief Initialize the intra/inter/transform/deblk function pointers of
70  * codec context
71  *
72  * @par Description: the current routine initializes the function pointers of
73  * codec context basing on the architecture in use for svc
74  *
75  * @param[in] ps_codec
76  *  Codec context pointer
77  *
78  * @returns  none
79  *
80  * @remarks none
81  *
82  *******************************************************************************
83  */
isvcd_init_function_ptr_generic(svc_dec_lyr_struct_t * ps_svc_lyr_dec)84 void isvcd_init_function_ptr_generic(svc_dec_lyr_struct_t *ps_svc_lyr_dec)
85 {
86     residual_sampling_ctxt_t *ps_resd_samp_ctx;
87     intra_sampling_ctxt_t *ps_intra_samp_ctxt;
88     dec_struct_t *ps_codec = &ps_svc_lyr_dec->s_dec;
89 
90     /* call the ih264 init ptr generic fn*/
91     ih264d_init_function_ptr_generic(ps_codec);
92 
93     ps_resd_samp_ctx = (residual_sampling_ctxt_t *) ps_svc_lyr_dec->pv_residual_sample_ctxt;
94     ps_intra_samp_ctxt = (intra_sampling_ctxt_t *) ps_svc_lyr_dec->pv_intra_sample_ctxt;
95 
96     ps_svc_lyr_dec->pf_pred_residual_recon_luma_4x4 = isvcd_pred_residual_recon_4x4;
97     ps_svc_lyr_dec->pf_pred_residual_recon_luma_8x8 = isvcd_pred_residual_recon_8x8;
98     ps_svc_lyr_dec->pf_pred_residual_recon_luma_16x16 = isvcd_pred_residual_recon_16x16;
99     ps_svc_lyr_dec->pf_pred_residual_recon_chroma_4x4 = isvcd_pred_residual_recon_chroma_4x4;
100     ps_svc_lyr_dec->pf_pred_residual_recon_chroma_8x8 = isvcd_pred_residual_recon_chroma_8x8;
101 
102     ps_svc_lyr_dec->pf_residual_luma_4x4 = isvcd_residual_luma_4x4;
103     ps_svc_lyr_dec->pf_residual_luma_8x8 = isvcd_residual_luma_8x8;
104     ps_svc_lyr_dec->pf_residual_luma_16x16 = isvcd_residual_luma_16x16;
105     ps_svc_lyr_dec->pf_residual_chroma_cb_cr_8x8 = isvcd_residual_chroma_cb_cr_8x8;
106 
107     ps_svc_lyr_dec->pf_iquant_itrans_residual_recon_luma_4x4 =
108         isvcd_iquant_itrans_residual_recon_4x4;
109     ps_svc_lyr_dec->pf_iquant_itrans_residual_recon_luma_4x4_dc =
110         isvcd_iquant_itrans_residual_recon_4x4_dc;
111     ps_svc_lyr_dec->pf_iquant_itrans_residual_recon_luma_8x8 =
112         isvcd_iquant_itrans_residual_recon_8x8;
113     ps_svc_lyr_dec->pf_iquant_itrans_residual_recon_luma_8x8_dc =
114         isvcd_iquant_itrans_residual_recon_8x8_dc;
115     ps_svc_lyr_dec->pf_iquant_itrans_residual_recon_chroma_4x4 =
116         isvcd_iquant_itrans_residual_recon_chroma_4x4;
117     ps_svc_lyr_dec->pf_iquant_itrans_residual_recon_chroma_4x4_dc =
118         isvcd_iquant_itrans_residual_recon_chroma_4x4_dc;
119 
120     ps_svc_lyr_dec->pf_iquant_itrans_residual_luma_4x4 = isvcd_iquant_itrans_residual_4x4;
121     ps_svc_lyr_dec->pf_iquant_itrans_residual_luma_4x4_dc = isvcd_iquant_itrans_residual_4x4_dc;
122     ps_svc_lyr_dec->pf_iquant_itrans_residual_luma_8x8 = isvcd_iquant_itrans_residual_8x8;
123     ps_svc_lyr_dec->pf_iquant_itrans_residual_luma_8x8_dc = isvcd_iquant_itrans_residual_8x8_dc;
124     ps_svc_lyr_dec->pf_iquant_itrans_residual_chroma_4x4 = isvcd_iquant_itrans_residual_chroma_4x4;
125     ps_svc_lyr_dec->pf_iquant_itrans_residual_chroma_4x4_dc =
126         isvcd_iquant_itrans_residual_chroma_4x4_dc;
127 
128     ps_svc_lyr_dec->pf_iquant_itrans_luma_4x4 = isvcd_iquant_itrans_4x4;
129     ps_svc_lyr_dec->pf_iquant_itrans_luma_4x4_dc = isvcd_iquant_itrans_4x4_dc;
130     ps_svc_lyr_dec->pf_iquant_itrans_luma_8x8 = isvcd_iquant_itrans_8x8;
131     ps_svc_lyr_dec->pf_iquant_itrans_luma_8x8_dc = isvcd_iquant_itrans_8x8_dc;
132     ps_svc_lyr_dec->pf_iquant_itrans_chroma_4x4 = isvcd_iquant_itrans_chroma_4x4;
133     ps_svc_lyr_dec->pf_iquant_itrans_chroma_4x4_dc = isvcd_iquant_itrans_chroma_4x4_dc;
134 
135     ps_intra_samp_ctxt->pf_interpolate_base_luma_dyadic = isvcd_interpolate_base_luma_dyadic;
136     ps_intra_samp_ctxt->pf_interpolate_intra_base = isvcd_interpolate_intra_base;
137     ps_intra_samp_ctxt->pf_vert_chroma_interpol[0] = isvcd_vert_interpol_chroma_dyadic_1;
138     ps_intra_samp_ctxt->pf_vert_chroma_interpol[1] = isvcd_vert_interpol_chroma_dyadic_2;
139     ps_intra_samp_ctxt->pf_vert_chroma_interpol[2] = isvcd_vert_interpol_chroma_dyadic_3;
140 
141     ps_intra_samp_ctxt->pf_horz_chroma_interpol[0] = isvcd_horz_interpol_chroma_dyadic_1;
142     ps_intra_samp_ctxt->pf_horz_chroma_interpol[1] = isvcd_horz_interpol_chroma_dyadic_2;
143 
144     /*Dyadic Residual Resampling*/
145     ps_resd_samp_ctx->pf_residual_luma_dyadic = isvcd_residual_luma_dyadic;
146     ps_resd_samp_ctx->pf_residual_chroma_dyadic = isvcd_residual_chroma_dyadic;
147     ps_resd_samp_ctx->pf_residual_chroma_dyadic_alt = isvcd_residual_chroma_dyadic_alt;
148 
149     /*Non-dyadic Residual Resampling*/
150     ps_resd_samp_ctx->pf_interpolate_residual = isvcd_interpolate_residual;
151 
152     ps_resd_samp_ctx->pf_residual_reflayer_const_non_boundary_mb =
153         isvcd_residual_reflayer_const_non_boundary_mb;
154     ps_resd_samp_ctx->pf_residual_reflayer_const_boundary_mb =
155         isvcd_residual_reflayer_const_boundary_mb;
156 
157     return;
158 }
159