blob: 48956ef68a1500aece97ae25d85f94161c2f1b78 [file] [log] [blame]
Hamsalekha S8d3d3032015-03-13 21:24:58 +05301/******************************************************************************
2 *
3 * Copyright (C) 2015 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 * ih264e_function_selector_generic.c
24 *
25 * @brief
26 * Contains functions to initialize function pointers of codec context
27 *
28 * @author
29 * Ittiam
30 *
31 * @par List of Functions:
32 * - ih264e_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
60#include "ih264d_structs.h"
61#include "ih264d_function_selector.h"
62
63/**
64 *******************************************************************************
65 *
66 * @brief Initialize the intra/inter/transform/deblk function pointers of
67 * codec context
68 *
69 * @par Description: the current routine initializes the function pointers of
70 * codec context basing on the architecture in use
71 *
72 * @param[in] ps_codec
73 * Codec context pointer
74 *
75 * @returns none
76 *
77 * @remarks none
78 *
79 *******************************************************************************
80 */
81void ih264d_init_function_ptr_generic(dec_struct_t *ps_codec)
82{
83
84 WORD32 i = 0;
85
86 /* Init function pointers for intra pred leaf level functions luma
87 * Intra 16x16 */
88 ps_codec->apf_intra_pred_luma_16x16[0] =
89 ih264_intra_pred_luma_16x16_mode_vert;
90 ps_codec->apf_intra_pred_luma_16x16[1] =
91 ih264_intra_pred_luma_16x16_mode_horz;
92 ps_codec->apf_intra_pred_luma_16x16[2] =
93 ih264_intra_pred_luma_16x16_mode_dc;
94 ps_codec->apf_intra_pred_luma_16x16[3] =
95 ih264_intra_pred_luma_16x16_mode_plane;
96
97 /* Init function pointers for intra pred leaf level functions luma
98 * Intra 4x4 */
99 ps_codec->apf_intra_pred_luma_4x4[0] = ih264_intra_pred_luma_4x4_mode_vert;
100 ps_codec->apf_intra_pred_luma_4x4[1] = ih264_intra_pred_luma_4x4_mode_horz;
101 ps_codec->apf_intra_pred_luma_4x4[2] = ih264_intra_pred_luma_4x4_mode_dc;
102 ps_codec->apf_intra_pred_luma_4x4[3] =
103 ih264_intra_pred_luma_4x4_mode_diag_dl;
104 ps_codec->apf_intra_pred_luma_4x4[4] =
105 ih264_intra_pred_luma_4x4_mode_diag_dr;
106 ps_codec->apf_intra_pred_luma_4x4[5] =
107 ih264_intra_pred_luma_4x4_mode_vert_r;
108 ps_codec->apf_intra_pred_luma_4x4[6] =
109 ih264_intra_pred_luma_4x4_mode_horz_d;
110 ps_codec->apf_intra_pred_luma_4x4[7] =
111 ih264_intra_pred_luma_4x4_mode_vert_l;
112 ps_codec->apf_intra_pred_luma_4x4[8] =
113 ih264_intra_pred_luma_4x4_mode_horz_u;
114
115 /* Init function pointers for intra pred leaf level functions luma
116 * Intra 8x8 */
117 ps_codec->apf_intra_pred_luma_8x8[0] = ih264_intra_pred_luma_8x8_mode_vert;
118 ps_codec->apf_intra_pred_luma_8x8[1] = ih264_intra_pred_luma_8x8_mode_horz;
119 ps_codec->apf_intra_pred_luma_8x8[2] = ih264_intra_pred_luma_8x8_mode_dc;
120 ps_codec->apf_intra_pred_luma_8x8[3] =
121 ih264_intra_pred_luma_8x8_mode_diag_dl;
122 ps_codec->apf_intra_pred_luma_8x8[4] =
123 ih264_intra_pred_luma_8x8_mode_diag_dr;
124 ps_codec->apf_intra_pred_luma_8x8[5] =
125 ih264_intra_pred_luma_8x8_mode_vert_r;
126 ps_codec->apf_intra_pred_luma_8x8[6] =
127 ih264_intra_pred_luma_8x8_mode_horz_d;
128 ps_codec->apf_intra_pred_luma_8x8[7] =
129 ih264_intra_pred_luma_8x8_mode_vert_l;
130 ps_codec->apf_intra_pred_luma_8x8[8] =
131 ih264_intra_pred_luma_8x8_mode_horz_u;
132
133 ps_codec->pf_intra_pred_ref_filtering =
134 ih264_intra_pred_luma_8x8_mode_ref_filtering;
135
136 /* Init function pointers for intra pred leaf level functions chroma
137 * Intra 8x8 */
138 ps_codec->apf_intra_pred_chroma[0] = ih264_intra_pred_chroma_8x8_mode_vert;
139 ps_codec->apf_intra_pred_chroma[1] = ih264_intra_pred_chroma_8x8_mode_horz;
140 ps_codec->apf_intra_pred_chroma[2] = ih264_intra_pred_chroma_8x8_mode_dc;
141 ps_codec->apf_intra_pred_chroma[3] = ih264_intra_pred_chroma_8x8_mode_plane;
142
143 ps_codec->pf_default_weighted_pred_luma = ih264_default_weighted_pred_luma;
144 ps_codec->pf_default_weighted_pred_chroma =
145 ih264_default_weighted_pred_chroma;
146 ps_codec->pf_weighted_pred_luma = ih264_weighted_pred_luma;
147 ps_codec->pf_weighted_pred_chroma = ih264_weighted_pred_chroma;
148 ps_codec->pf_weighted_bi_pred_luma = ih264_weighted_bi_pred_luma;
149 ps_codec->pf_weighted_bi_pred_chroma = ih264_weighted_bi_pred_chroma;
150
151 /* Padding Functions */
152 ps_codec->pf_pad_top = ih264_pad_top;
153 ps_codec->pf_pad_bottom = ih264_pad_bottom;
154 ps_codec->pf_pad_left_luma = ih264_pad_left_luma;
155 ps_codec->pf_pad_left_chroma = ih264_pad_left_chroma;
156 ps_codec->pf_pad_right_luma = ih264_pad_right_luma;
157 ps_codec->pf_pad_right_chroma = ih264_pad_right_chroma;
158
159 ps_codec->pf_iquant_itrans_recon_luma_4x4 = ih264_iquant_itrans_recon_4x4;
160 ps_codec->pf_iquant_itrans_recon_luma_4x4_dc =
161 ih264_iquant_itrans_recon_4x4_dc;
162 ps_codec->pf_iquant_itrans_recon_luma_8x8 = ih264_iquant_itrans_recon_8x8;
163 ps_codec->pf_iquant_itrans_recon_luma_8x8_dc =
164 ih264_iquant_itrans_recon_8x8_dc;
165 ps_codec->pf_iquant_itrans_recon_chroma_4x4 =
166 ih264_iquant_itrans_recon_chroma_4x4;
167 ps_codec->pf_iquant_itrans_recon_chroma_4x4_dc =
168 ih264_iquant_itrans_recon_chroma_4x4_dc;
169 ps_codec->pf_ihadamard_scaling_4x4 = ih264_ihadamard_scaling_4x4;
170
171 /* Init fn ptr luma deblocking */
172 ps_codec->pf_deblk_luma_vert_bs4 = ih264_deblk_luma_vert_bs4;
173 ps_codec->pf_deblk_luma_vert_bslt4 = ih264_deblk_luma_vert_bslt4;
174 ps_codec->pf_deblk_luma_vert_bs4_mbaff = ih264_deblk_luma_vert_bs4_mbaff;
175 ps_codec->pf_deblk_luma_vert_bslt4_mbaff =
176 ih264_deblk_luma_vert_bslt4_mbaff;
177
178 ps_codec->pf_deblk_luma_horz_bs4 = ih264_deblk_luma_horz_bs4;
179 ps_codec->pf_deblk_luma_horz_bslt4 = ih264_deblk_luma_horz_bslt4;
180
181 /* Init fn ptr chroma deblocking */
182 ps_codec->pf_deblk_chroma_vert_bs4 = ih264_deblk_chroma_vert_bs4;
183 ps_codec->pf_deblk_chroma_vert_bslt4 = ih264_deblk_chroma_vert_bslt4;
184 ps_codec->pf_deblk_chroma_vert_bs4_mbaff =
185 ih264_deblk_chroma_vert_bs4_mbaff;
186 ps_codec->pf_deblk_chroma_vert_bslt4_mbaff =
187 ih264_deblk_chroma_vert_bslt4_mbaff;
188
189 ps_codec->pf_deblk_chroma_horz_bs4 = ih264_deblk_chroma_horz_bs4;
190 ps_codec->pf_deblk_chroma_horz_bslt4 = ih264_deblk_chroma_horz_bslt4;
191
192 /* Inter pred leaf level functions */
193 ps_codec->apf_inter_pred_luma[0] = ih264_inter_pred_luma_copy;
194 ps_codec->apf_inter_pred_luma[1] = ih264_inter_pred_luma_horz_qpel;
195 ps_codec->apf_inter_pred_luma[2] = ih264_inter_pred_luma_horz;
196 ps_codec->apf_inter_pred_luma[3] = ih264_inter_pred_luma_horz_qpel;
197 ps_codec->apf_inter_pred_luma[4] = ih264_inter_pred_luma_vert_qpel;
198 ps_codec->apf_inter_pred_luma[5] =
199 ih264_inter_pred_luma_horz_qpel_vert_qpel;
200 ps_codec->apf_inter_pred_luma[6] =
201 ih264_inter_pred_luma_horz_hpel_vert_qpel;
202 ps_codec->apf_inter_pred_luma[7] =
203 ih264_inter_pred_luma_horz_qpel_vert_qpel;
204 ps_codec->apf_inter_pred_luma[8] = ih264_inter_pred_luma_vert;
205 ps_codec->apf_inter_pred_luma[9] =
206 ih264_inter_pred_luma_horz_qpel_vert_hpel;
207 ps_codec->apf_inter_pred_luma[10] =
208 ih264_inter_pred_luma_horz_hpel_vert_hpel;
209 ps_codec->apf_inter_pred_luma[11] =
210 ih264_inter_pred_luma_horz_qpel_vert_hpel;
211 ps_codec->apf_inter_pred_luma[12] = ih264_inter_pred_luma_vert_qpel;
212 ps_codec->apf_inter_pred_luma[13] =
213 ih264_inter_pred_luma_horz_qpel_vert_qpel;
214 ps_codec->apf_inter_pred_luma[14] =
215 ih264_inter_pred_luma_horz_hpel_vert_qpel;
216 ps_codec->apf_inter_pred_luma[15] =
217 ih264_inter_pred_luma_horz_qpel_vert_qpel;
218
219 ps_codec->pf_inter_pred_chroma = ih264_inter_pred_chroma;
220
221 return;
222}