/src/libavc/decoder/svc/isvcd_intra_resamp.h
Line | Count | Source (jump to first uncovered line) |
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_intra_resamp.h |
24 | | * |
25 | | * @brief |
26 | | * Contains routines that resample for SVC resampling |
27 | | * |
28 | | * @author |
29 | | * Kishore |
30 | | * |
31 | | * @remarks |
32 | | * None |
33 | | * |
34 | | ******************************************************************************* |
35 | | */ |
36 | | |
37 | | #ifndef _ISVCD_INTRA_RESAMPLE_H_ |
38 | | #define _ISVCD_INTRA_RESAMPLE_H_ |
39 | | |
40 | | #include "ih264_typedefs.h" |
41 | | #include "ih264_macros.h" |
42 | | #include "ih264_platform_macros.h" |
43 | | #include "isvcd_structs.h" |
44 | | |
45 | 103M | #define SVCD_FALSE 0 |
46 | 74.6M | #define SVCD_TRUE 1 |
47 | | |
48 | | #define MAP_BUFF_WIDTH 48 |
49 | | #define MAP_BUFF_HEIGHT 48 |
50 | 21.7k | #define INTERMEDIATE_BUFF_WIDTH 48 |
51 | 21.7k | #define INTERMEDIATE_BUFF_HEIGHT (MB_HEIGHT + 4) |
52 | | |
53 | 282k | #define MAX_REF_ARR_WD_HT 48 |
54 | | |
55 | 282k | #define MAX_REF_IDX_ARRAY (MAX_REF_ARR_WD_HT + MB_WIDTH) |
56 | 1.89M | #define DYADIC_REF_W_Y 20 |
57 | | #define DYADIC_REF_H_Y 20 |
58 | 2.04M | #define DYADIC_REF_W_C 10 |
59 | 21.7k | #define DYADIC_REF_H_C 10 |
60 | | |
61 | 217k | #define SUB_BLOCK_WIDTH 4 |
62 | 105k | #define SUB_BLOCK_HEIGHT 4 |
63 | | #define SUB_BLOCK_SIZE (SUB_BLOCK_WIDTH * SUB_BLOCK_HEIGHT) |
64 | 804k | #define BLOCK_WIDTH 8 |
65 | 152k | #define BLOCK_HEIGHT 8 |
66 | | #define BLOCK_SIZE (BLOCK_WIDTH * BLOCK_HEIGHT) |
67 | 2.61M | #define MB_WIDTH 16 |
68 | 2.33M | #define MB_HEIGHT 16 |
69 | 21.8M | #define CLIPUCHAR(x) CLIP3(0, 255, (x)) |
70 | 1.76M | #define MB_WIDTH_SHIFT 4 |
71 | 930k | #define MB_HEIGHT_SHIFT 4 |
72 | | |
73 | 149k | #define REF_ARRAY_WIDTH 48 |
74 | 43.5k | #define REF_ARRAY_HEIGHT 48 |
75 | | #define MAX_PIX_FILL_LUMA 4 |
76 | | #define MAX_PIX_FILL_CHROMA 2 |
77 | | |
78 | | extern const WORD8 g_ai1_interp_filter_luma[64]; |
79 | | extern const UWORD8 g_au1_interp_filter_chroma[32]; |
80 | | extern WORD32 ref_pos_luma[4][16]; |
81 | | extern WORD32 ref_pos_chroma[4][8]; |
82 | | extern WORD32 phase_luma[3][16]; |
83 | | extern UWORD8 phase_luma_u8[3][16]; |
84 | | extern WORD8 phase_luma_x86[6][16]; |
85 | | extern WORD32 phase_chroma[3][8]; |
86 | | extern UWORD8 phase_chroma_u8[3][8]; |
87 | | extern UWORD8 ref_pos_luma_mask_m48[8][16]; |
88 | | extern UWORD8 ref_pos_luma_mask_m16[8][16]; |
89 | | extern UWORD8 ref_pos_luma_mask_m32[8][16]; |
90 | | extern UWORD8 ref_pos_chroma_mask_m24[2][16]; |
91 | | extern UWORD8 ref_pos_chroma_mask_m8[2][16]; |
92 | | extern UWORD8 ref_pos_chroma_mask_m16[2][16]; |
93 | | |
94 | | void isvcd_copy_data(UWORD8 *pu1_src, WORD32 i4_src_stride, UWORD8 *pu1_dst, WORD32 i4_dst_stride, |
95 | | WORD32 i4_num_bytes, WORD32 i4_num_lines); |
96 | | |
97 | | static __inline int isvcd_left_most_bit_detect(UWORD32 u4_num) |
98 | 827k | { |
99 | 827k | WORD32 i4_number = 0; |
100 | 827k | if(0xff == u4_num) |
101 | 0 | { |
102 | 0 | return 32; |
103 | 0 | } |
104 | | |
105 | 827k | do |
106 | 1.22M | { |
107 | 1.22M | if(0 == (u4_num & 0x80000000)) |
108 | 827k | { |
109 | 827k | return i4_number; |
110 | 827k | } |
111 | 395k | u4_num <<= 1; |
112 | 395k | i4_number++; |
113 | 395k | } while(1); |
114 | 827k | } Unexecuted instantiation: isvcd_api.c:isvcd_left_most_bit_detect Unexecuted instantiation: isvcd_nal.c:isvcd_left_most_bit_detect Unexecuted instantiation: isvcd_nal_parse.c:isvcd_left_most_bit_detect Unexecuted instantiation: isvcd_parse_epslice.c:isvcd_left_most_bit_detect Unexecuted instantiation: isvcd_parse_headers.c:isvcd_left_most_bit_detect Unexecuted instantiation: isvcd_parse_slice.c:isvcd_left_most_bit_detect Unexecuted instantiation: isvcd_process_ebslice.c:isvcd_left_most_bit_detect Unexecuted instantiation: isvcd_process_epslice.c:isvcd_left_most_bit_detect Unexecuted instantiation: isvcd_thread_compute_bs.c:isvcd_left_most_bit_detect Unexecuted instantiation: isvcd_thread_parse_decode.c:isvcd_left_most_bit_detect Unexecuted instantiation: isvcd_utils.c:isvcd_left_most_bit_detect Unexecuted instantiation: isvcd_vui.c:isvcd_left_most_bit_detect Unexecuted instantiation: isvcd_ii_pred.c:isvcd_left_most_bit_detect isvcd_intra_resamp.c:isvcd_left_most_bit_detect Line | Count | Source | 98 | 827k | { | 99 | 827k | WORD32 i4_number = 0; | 100 | 827k | if(0xff == u4_num) | 101 | 0 | { | 102 | 0 | return 32; | 103 | 0 | } | 104 | | | 105 | 827k | do | 106 | 1.22M | { | 107 | 1.22M | if(0 == (u4_num & 0x80000000)) | 108 | 827k | { | 109 | 827k | return i4_number; | 110 | 827k | } | 111 | 395k | u4_num <<= 1; | 112 | 395k | i4_number++; | 113 | 395k | } while(1); | 114 | 827k | } |
Unexecuted instantiation: isvcd_mode_mv_resamp.c:isvcd_left_most_bit_detect Unexecuted instantiation: isvcd_residual_resamp.c:isvcd_left_most_bit_detect Unexecuted instantiation: isvcd_function_selector.c:isvcd_left_most_bit_detect Unexecuted instantiation: isvcd_function_selector_sse42.c:isvcd_left_most_bit_detect Unexecuted instantiation: isvcd_intra_resamp_sse42.c:isvcd_left_most_bit_detect Unexecuted instantiation: isvcd_residual_resamp_sse42.c:isvcd_left_most_bit_detect Unexecuted instantiation: isvcd_cabac.c:isvcd_left_most_bit_detect Unexecuted instantiation: isvcd_compute_bs.c:isvcd_left_most_bit_detect Unexecuted instantiation: isvcd_function_selector_generic.c:isvcd_left_most_bit_detect Unexecuted instantiation: isvcd_mb_utils.c:isvcd_left_most_bit_detect Unexecuted instantiation: isvcd_parse_cavlc.c:isvcd_left_most_bit_detect Unexecuted instantiation: isvcd_parse_ebslice.c:isvcd_left_most_bit_detect Unexecuted instantiation: isvcd_parse_eislice.c:isvcd_left_most_bit_detect |
115 | | |
116 | | typedef void i264_vert_interpol_chroma_dyadic(UWORD8 *pu1_inp_buf, WORD16 *pi2_tmp_filt_buf, |
117 | | WORD32 i4_phase_0, WORD32 i4_phase_1); |
118 | | |
119 | | typedef void i264_horz_interpol_chroma_dyadic(WORD16 *pi2_tmp_filt_buf, UWORD8 *pu1_out_buf, |
120 | | WORD32 i4_out_stride, WORD32 i4_phase_0, |
121 | | WORD32 i4_phase_1); |
122 | | |
123 | | typedef void (*pf_vert_interpol_chroma_dyadic)(UWORD8 *pu1_inp_buf, WORD16 *pi2_tmp_filt_buf, |
124 | | WORD32 i4_phase_0, WORD32 i4_phase_1); |
125 | | |
126 | | typedef void (*pf_horz_interpol_chroma_dyadic)(WORD16 *pi2_tmp_filt_buf, UWORD8 *pu1_out_buf, |
127 | | WORD32 i4_out_stride, WORD32 i4_phase_0, |
128 | | WORD32 i4_phase_1); |
129 | | |
130 | | typedef void(ftype_intra_samp_padding)(WORD32 i4_x, WORD32 i4_y, WORD8 i1_xd_index, |
131 | | WORD8 i1_yd_index, UWORD8 u1_seg_wd, UWORD8 u1_seg_ht, |
132 | | UWORD8 *pu1_refarray_1, UWORD8 *pu1_refarray_2, |
133 | | WORD32 i4_refarray_stride, WORD32 i4_mb_adjoin_x, |
134 | | WORD32 i4_mb_adjoin_y, WORD32 i4_corner_pixel_available); |
135 | | void isvcd_left_right_padding(WORD32 i4_x, WORD32 i4_y, WORD8 i1_xd_index, WORD8 i1_yd_index, |
136 | | UWORD8 u1_seg_wd, UWORD8 u1_seg_ht, UWORD8 *pu1_refarray_1, |
137 | | UWORD8 *pu1_refarray_2, WORD32 i4_refarray_stride, |
138 | | WORD32 i4_mb_adjoin_x, WORD32 i4_mb_adjoin_y, |
139 | | WORD32 i4_corner_pixel_available); |
140 | | |
141 | | void isvcd_left_right_padding_chroma(WORD32 i4_x, WORD32 i4_y, WORD8 i1_xd_index, WORD8 i1_yd_index, |
142 | | UWORD8 u1_seg_wd, UWORD8 u1_seg_ht, UWORD8 *pu1_refarray_1, |
143 | | UWORD8 *pu1_refarray_2, WORD32 i4_refarray_stride, |
144 | | WORD32 i4_mb_adjoin_x, WORD32 i4_mb_adjoin_y, |
145 | | WORD32 i4_corner_pixel_available); |
146 | | |
147 | | void isvcd_top_bot_padding(WORD32 i4_x, WORD32 i4_y, WORD8 i1_xd_index, WORD8 i1_yd_index, |
148 | | UWORD8 u1_seg_wd, UWORD8 u1_seg_ht, UWORD8 *pu1_refarray_1, |
149 | | UWORD8 *pu1_refarray_2, WORD32 i4_refarray_stride, WORD32 i4_mb_adjoin_x, |
150 | | WORD32 i4_mb_adjoin_y, WORD32 i4_corner_pixel_available); |
151 | | |
152 | | void isvcd_top_bot_padding_chroma(WORD32 i4_x, WORD32 i4_y, WORD8 i1_xd_index, WORD8 i1_yd_index, |
153 | | UWORD8 u1_seg_wd, UWORD8 u1_seg_ht, UWORD8 *pu1_refarray_1, |
154 | | UWORD8 *pu1_refarray_2, WORD32 i4_refarray_stride, |
155 | | WORD32 i4_mb_adjoin_x, WORD32 i4_mb_adjoin_y, |
156 | | WORD32 i4_corner_pixel_available); |
157 | | |
158 | | void isvcd_diag_padding(WORD32 i4_x, WORD32 i4_y, WORD8 i1_xd_index, WORD8 i1_yd_index, |
159 | | UWORD8 u1_seg_wd, UWORD8 u1_seg_ht, UWORD8 *pu1_refarray_1, |
160 | | UWORD8 *pu1_refarray_2, WORD32 i4_refarray_stride, WORD32 i4_mb_adjoin_x, |
161 | | WORD32 i4_mb_adjoin_y, WORD32 i4_corner_pixel_available); |
162 | | |
163 | | void isvcd_diag_padding_chroma(WORD32 i4_x, WORD32 i4_y, WORD8 i1_xd_index, WORD8 i1_yd_index, |
164 | | UWORD8 u1_seg_wd, UWORD8 u1_seg_ht, UWORD8 *pu1_refarray_1, |
165 | | UWORD8 *pu1_refarray_2, WORD32 i4_refarray_stride, |
166 | | WORD32 i4_mb_adjoin_x, WORD32 i4_mb_adjoin_y, |
167 | | WORD32 i4_corner_pixel_available); |
168 | | |
169 | | void isvcd_diag_reconstruction(WORD32 i4_x, WORD32 i4_y, WORD8 i1_xd_index, WORD8 i1_yd_index, |
170 | | UWORD8 u1_seg_wd, UWORD8 u1_seg_ht, UWORD8 *pu1_refarray_1, |
171 | | UWORD8 *pu1_refarray_2, WORD32 i4_refarray_stride, |
172 | | WORD32 i4_mb_adjoin_x, WORD32 i4_mb_adjoin_y, |
173 | | WORD32 i4_corner_pixel_available); |
174 | | |
175 | | void isvcd_diag_reconstruction_chroma(WORD32 i4_x, WORD32 i4_y, WORD8 i1_xd_index, |
176 | | WORD8 i1_yd_index, UWORD8 u1_seg_wd, UWORD8 u1_seg_ht, |
177 | | UWORD8 *pu1_refarray_1, UWORD8 *pu1_refarray_2, |
178 | | WORD32 i4_refarray_stride, WORD32 i4_mb_adjoin_x, |
179 | | WORD32 i4_mb_adjoin_y, WORD32 i4_corner_pixel_available); |
180 | | |
181 | | typedef void i264_interpolate_base_luma_dyadic(UWORD8 *pu1_inp_buf, WORD16 *pi2_tmp_filt_buf, |
182 | | UWORD8 *pu1_out_buf, WORD32 i4_out_stride); |
183 | | |
184 | | typedef void i264_interpolate_intra_base(void *pv_intra_samp_ctxt, UWORD8 *pu1_out, |
185 | | WORD32 i4_out_stride, WORD32 i4_refarray_wd, |
186 | | WORD32 u2_mb_x, WORD32 u2_mb_y, WORD32 i4_chroma_flag, |
187 | | WORD32 i4_refarray_flag); |
188 | | |
189 | | /*C Declarations*/ |
190 | | i264_interpolate_base_luma_dyadic isvcd_interpolate_base_luma_dyadic; |
191 | | i264_vert_interpol_chroma_dyadic isvcd_vert_interpol_chroma_dyadic_1; |
192 | | i264_vert_interpol_chroma_dyadic isvcd_vert_interpol_chroma_dyadic_2; |
193 | | i264_vert_interpol_chroma_dyadic isvcd_vert_interpol_chroma_dyadic_3; |
194 | | i264_horz_interpol_chroma_dyadic isvcd_horz_interpol_chroma_dyadic_1; |
195 | | i264_horz_interpol_chroma_dyadic isvcd_horz_interpol_chroma_dyadic_2; |
196 | | |
197 | | /*ARM Declarations*/ |
198 | | i264_interpolate_base_luma_dyadic isvcd_interpolate_base_luma_dyadic_neonintr; |
199 | | i264_vert_interpol_chroma_dyadic isvcd_vert_interpol_chroma_dyadic_1_neonintr; |
200 | | i264_vert_interpol_chroma_dyadic isvcd_vert_interpol_chroma_dyadic_2_neonintr; |
201 | | i264_vert_interpol_chroma_dyadic isvcd_vert_interpol_chroma_dyadic_3_neonintr; |
202 | | i264_horz_interpol_chroma_dyadic isvcd_horz_interpol_chroma_dyadic_1_neonintr; |
203 | | i264_horz_interpol_chroma_dyadic isvcd_horz_interpol_chroma_dyadic_2_neonintr; |
204 | | |
205 | | i264_interpolate_intra_base isvcd_interpolate_intra_base; |
206 | | i264_interpolate_intra_base isvcd_interpolate_intra_base_sse42; |
207 | | i264_interpolate_intra_base isvcd_interpolate_intra_base_neonintr; |
208 | | |
209 | | /*x86 Declarations*/ |
210 | | i264_interpolate_base_luma_dyadic isvcd_interpolate_base_luma_dyadic_sse42; |
211 | | i264_vert_interpol_chroma_dyadic isvcd_vert_interpol_chroma_dyadic_1_sse42; |
212 | | i264_vert_interpol_chroma_dyadic isvcd_vert_interpol_chroma_dyadic_2_sse42; |
213 | | i264_vert_interpol_chroma_dyadic isvcd_vert_interpol_chroma_dyadic_3_sse42; |
214 | | i264_horz_interpol_chroma_dyadic isvcd_horz_interpol_chroma_dyadic_1_sse42; |
215 | | i264_horz_interpol_chroma_dyadic isvcd_horz_interpol_chroma_dyadic_2_sse42; |
216 | | |
217 | | typedef struct |
218 | | { |
219 | | UWORD16 u2_mb_x; /*!< MB X of the MB which has to |
220 | | be processed |
221 | | */ |
222 | | UWORD16 u2_mb_y; /*!< MB Y of the MB which has to |
223 | | be processed |
224 | | */ |
225 | | } mb_coord_t; |
226 | | |
227 | | typedef struct |
228 | | { |
229 | | void *pv_buffer; /*!< Buffer pointer */ |
230 | | WORD32 i4_element_size; /*!< size of the structure or unit */ |
231 | | WORD32 i4_num_element_stride; /*!< Stride of buffer in terms of number |
232 | | of elements. */ |
233 | | } mem_element_t; |
234 | | |
235 | | typedef struct |
236 | | { |
237 | | void *pv_buffer1; /*!< Buffer pointer */ |
238 | | void *pv_buffer2; /*!< Buffer pointer */ |
239 | | WORD32 i4_element_size; /*!< size of the structure or unit */ |
240 | | WORD32 i4_num_element_stride; /*!< Stride of buffer in terms of number |
241 | | of elements. |
242 | | */ |
243 | | } mem_element_2_t; |
244 | | typedef struct |
245 | | { |
246 | | UWORD8 u1_seg_dim; /*!< describes segment dimension */ |
247 | | UWORD8 u1_seg_off; /*!< describes offset from start */ |
248 | | UWORD8 u1_mb_adjoin; /*!< describes whether mb is adjoining |
249 | | the segment 0 => not adjoining |
250 | | 1 => adjoining */ |
251 | | |
252 | | WORD8 i1_dist_idx; /*!< distance to nearest MB */ |
253 | | |
254 | | WORD8 i1_nearst_mb_bdry; /*!< describes the nearest mb boundary |
255 | | +1 => rightMB/bottomMB |
256 | | -1 => leftMB/topMB */ |
257 | | } seg_description_t; |
258 | | |
259 | | typedef struct |
260 | | { |
261 | | UWORD8 u1_num_segments; /*!< place holder to store the number of |
262 | | segments */ |
263 | | |
264 | | UWORD8 u4_start_pos; /*!< this variable indicates where is |
265 | | start locatiion of the segment with |
266 | | respect to less the block_width or |
267 | | greater than block width */ |
268 | | |
269 | | seg_description_t s_segments[4]; /*!< place holder to store per segment |
270 | | description */ |
271 | | } seg_lookup_desc_t; |
272 | | typedef struct |
273 | | { |
274 | | WORD16 i2_min_pos; /*!< place holder to store the projected |
275 | | MIN referecne position for a MB in |
276 | | current layer. can be used to store |
277 | | either horizontal or vertical positions |
278 | | */ |
279 | | WORD16 i2_max_pos; /*!< place holder to store the projected |
280 | | MAX referecne position for a MB in |
281 | | current layer. can be used to store |
282 | | either horizontal or vertical positions |
283 | | */ |
284 | | } ref_min_max_map_t; |
285 | | |
286 | | typedef struct |
287 | | { |
288 | | WORD16 i2_left; /*!< Horizontal offset of upper left luma sample |
289 | | after resampling process on reference |
290 | | layer with respect to upper left luma |
291 | | sample of current layer. |
292 | | */ |
293 | | WORD16 i2_top; /*!< Vertical offset of upper left luma pixel |
294 | | after resampling process on reference |
295 | | layer |
296 | | */ |
297 | | WORD16 i2_rt; /*!< Horizontal offset of bottom right luma |
298 | | sample after resampling process on |
299 | | reference layer with respect to bottom |
300 | | right luma sample. |
301 | | */ |
302 | | WORD16 i2_bot; /*!< Vertical offset of bottom right luma |
303 | | pixel after resampling process on |
304 | | reference layer |
305 | | */ |
306 | | } ref_lyr_scaled_offset_t; |
307 | | |
308 | | typedef struct |
309 | | { |
310 | | UWORD8 i2_ref_pos; /*!< place holder to store the projected |
311 | | referecne position for a pixel in |
312 | | current layer. can be used to store |
313 | | either horizontal or vertical positions |
314 | | */ |
315 | | UWORD8 i2_phase; /*!< place holder to store the projected |
316 | | phase for a pixel in current layer. |
317 | | can be used to store either |
318 | | horizontal or vertical phase |
319 | | */ |
320 | | } ref_pixel_map_t; |
321 | | |
322 | | typedef struct |
323 | | { |
324 | | WORD16 i2_offset; /*!< place holder to store the projected |
325 | | start point of reference window |
326 | | for each MB in current layer.can be |
327 | | used to store either horizontal or |
328 | | vertical offset |
329 | | */ |
330 | | WORD16 i2_length; /*!< place holder to store reference array |
331 | | length of the reference window |
332 | | for each MB in current layer.can be |
333 | | used to store either horizontal width |
334 | | or vertical height |
335 | | */ |
336 | | } ref_mb_map_t; |
337 | | |
338 | | typedef struct |
339 | | { |
340 | | WORD32 i4_res_width; /*!< Frame width of top most layer in the |
341 | | resolution. It's expressed in terms |
342 | | of luma samples. |
343 | | */ |
344 | | WORD32 i4_res_height; /*!< Frame height of top most layer in the |
345 | | resolution. It's expressed in terms |
346 | | of luma samples. |
347 | | */ |
348 | | ref_lyr_scaled_offset_t s_ref_lyr_scaled_offset; /*!< Scaled offset |
349 | | parameters of reference layer considering |
350 | | bottom most layer of the resolution as |
351 | | current layer. Offsets are with respect |
352 | | to upper left luma samples in top most |
353 | | layer in the resolution. |
354 | | */ |
355 | | UWORD16 u2_scaled_ref_width; /*!< Considering bottom most layer of the |
356 | | resolution as current layer, scaled |
357 | | width of reference layer in terms of |
358 | | luma pixels. It's inferred parameter |
359 | | based on reference layer offsets. |
360 | | */ |
361 | | UWORD16 u2_scaled_ref_height; /*!< Considering bottom most layer of the |
362 | | resolution as current layer, scaled |
363 | | height of reference layer in terms of |
364 | | luma pixels. It's inferred parameter |
365 | | based on reference layer offsets. |
366 | | */ |
367 | | UWORD8 u1_rstrct_res_change_flag; /*!< restrictedResolutionChangeFlag for |
368 | | bottom most layer of the resolution. It's |
369 | | a inferred parameter. |
370 | | */ |
371 | | UWORD8 u1_cropping_change_flag; /*!< croppingChangeFlag for bottom most |
372 | | layer of the resolution. It's a inferred |
373 | | parameter. |
374 | | */ |
375 | | UWORD8 u1_disable_inter_lyr_dblk_filter_idc; /*!< Mode of operation for |
376 | | inter layer de-blocking. It shall be |
377 | | set for bottom most layer of the top |
378 | | resolution. By top resolution, it |
379 | | referes to the resolution just above |
380 | | the current spatial resolution. This |
381 | | shall be valid for all resolutions |
382 | | except target resolution. |
383 | | */ |
384 | | WORD8 i1_inter_lyr_alpha_c0_offset; /*!< specifies the offset used in |
385 | | accessing the alpha and tC0 deblocking |
386 | | filter tables for filtering operations |
387 | | in inter layer de-blocking. Applicable |
388 | | for bottom most layer of the top |
389 | | resolution. By top resolution, it referes |
390 | | to the resolution just above the current |
391 | | spatial resolution. This shall be valid |
392 | | for resolutions except target resolution. |
393 | | */ |
394 | | WORD8 i1_inter_lyr_beta_offset; /*!< specifies the offset used in |
395 | | accessing the beta deblocking filter table |
396 | | for filtering operations in inter layer |
397 | | de-blocking. Applicable for bottom most |
398 | | layer of the top resolution. By top |
399 | | resolution, it referes to the resolution |
400 | | just above the current spatial resolution. |
401 | | This shall be valid for resolutions |
402 | | except target resolution. |
403 | | */ |
404 | | WORD8 i1_constrained_intra_rsmpl_flag; /*!< Constrained intra resampling |
405 | | flag. Range is [0,1]. |
406 | | */ |
407 | | WORD8 i1_ref_lyr_chroma_phase_x_plus1_flag; /*!< specifies the horizontal |
408 | | phase shift of the chroma components in |
409 | | units of half luma samples of a layer |
410 | | frame for the layer pictures that may be |
411 | | used for inter-layer prediction |
412 | | */ |
413 | | |
414 | | WORD8 i1_ref_lyr_chroma_phase_y_plus1; /*!< specifies the vertical phase |
415 | | shift of the chroma components in units of |
416 | | half luma samples of a layer frame for the |
417 | | layer pictures that may be used for |
418 | | inter-layer prediction |
419 | | */ |
420 | | UWORD8 u1_direct_8x8_inference_flag; /*!< Direct 8x8 inference flag |
421 | | . Range is [0,1]. |
422 | | */ |
423 | | |
424 | | UWORD8 u1_remap_req_flag; /*!< this flag signifies to the |
425 | | upsampling modules whether the Map |
426 | | buffers have to recomputed for current |
427 | | access unit or to retain the previous |
428 | | access units values |
429 | | */ |
430 | | UWORD8 u1_dyadic_flag; /*!< this flag signifies the scaling |
431 | | ratios are 2 in both directions |
432 | | and the cropping is MB aligned |
433 | | */ |
434 | | } res_prms_t; |
435 | | |
436 | | typedef struct |
437 | | { |
438 | | ref_pixel_map_t *ps_x_pos_phase; /*!< buffers to store the projected |
439 | | referecne X and phase X for each |
440 | | pixel in current layer in |
441 | | horizontal direction |
442 | | */ |
443 | | ref_pixel_map_t *ps_y_pos_phase; /*!< buffers to store the projected |
444 | | referecne Y and phase Y for each |
445 | | pixel in current layer in |
446 | | vertical direction |
447 | | */ |
448 | | ref_mb_map_t *ps_x_offset_length; /*!< buffers to store the projected |
449 | | start point of reference window and |
450 | | reference array width in |
451 | | horizontal direction for each MB in |
452 | | current layer |
453 | | */ |
454 | | ref_mb_map_t *ps_y_offset_length; /*!< buffers to store the projected |
455 | | start point of reference window and |
456 | | reference array height in |
457 | | vertical direction for each MB in |
458 | | current layer |
459 | | */ |
460 | | ref_min_max_map_t *ps_x_min_max; |
461 | | /*!< Buffer to store the projected |
462 | | MIN and MAX referecne position for a |
463 | | MB in current layer in |
464 | | horizontal direction |
465 | | */ |
466 | | |
467 | | ref_min_max_map_t *ps_y_min_max; |
468 | | /*!< Buffer to store the projected |
469 | | MIN and MAX referecne position for a |
470 | | MB in current layer in |
471 | | Vertical direction |
472 | | */ |
473 | | |
474 | | WORD16 *pi2_xd_index; /*!< buffers to store the projected |
475 | | XD for each pixel in an MB |
476 | | */ |
477 | | WORD16 *pi2_yd_index; /*!< buffers to store the projected |
478 | | YD for each pixel in an MB |
479 | | */ |
480 | | WORD16 *pi2_ya_index; /*!< buffers to store the projected |
481 | | YA for each pixel in an MB |
482 | | */ |
483 | | |
484 | | seg_lookup_desc_t *ps_seg_lookup_horz; /*!< buffers to store lookup for |
485 | | horizontal segment description */ |
486 | | |
487 | | seg_lookup_desc_t *ps_seg_lookup_vert; /*!< buffers to store lookup for |
488 | | vertical segment description */ |
489 | | |
490 | | UWORD8 *pu1_refarray_x_idx; /*!< buffers to store lookup for |
491 | | x indexes to get availability |
492 | | from 4x4 availability grid */ |
493 | | |
494 | | UWORD8 *pu1_refarray_y_idx; /*!< buffers to store lookup for |
495 | | y indexes to get availability |
496 | | from 4x4 availability grid */ |
497 | | } intra_samp_map_ctxt_t; |
498 | | |
499 | | typedef struct |
500 | | { |
501 | | intra_samp_map_ctxt_t s_luma_map_ctxt; /*!< map structure for luma |
502 | | projected locations |
503 | | for curr resolution layer |
504 | | */ |
505 | | intra_samp_map_ctxt_t s_chroma_map_ctxt; /*!< map structure for chroma |
506 | | projected locations |
507 | | for curr resolution layer |
508 | | */ |
509 | | WORD32 i4_ref_width; /*!< reference layer width in |
510 | | terms luma samples |
511 | | */ |
512 | | WORD32 i4_ref_height; /*!< reference layer height in |
513 | | terms luma samples |
514 | | */ |
515 | | WORD32 i4_curr_width; /*!< current layer width in |
516 | | terms luma samples |
517 | | */ |
518 | | WORD32 i4_curr_height; /*!< current layer height in |
519 | | terms luma samples |
520 | | */ |
521 | | WORD8 i1_constrained_intra_rsmpl_flag; /*!< Constrained intra resampling |
522 | | flag. Range is [0,1]. |
523 | | */ |
524 | | WORD32 i4_x_phase_0; /*!< Chroma xPhase for even |
525 | | values of x for dyadic cases |
526 | | */ |
527 | | WORD32 i4_x_phase_1; /*!< Chroma xPhase for odd |
528 | | values of x for dyadic cases |
529 | | */ |
530 | | WORD32 i4_y_phase_0; /*!< Chroma yPhase for even |
531 | | values of y for dyadic cases |
532 | | */ |
533 | | WORD32 i4_y_phase_1; /*!< Chroma yPhase for odd |
534 | | values of y for dyadic cases |
535 | | */ |
536 | | |
537 | | pf_vert_interpol_chroma_dyadic pf_vert_chroma_interpol; |
538 | | /*!< Vertical interpolation |
539 | | function for chroma |
540 | | */ |
541 | | pf_horz_interpol_chroma_dyadic pf_horz_chroma_interpol; |
542 | | /*!< Horizontal interpolation |
543 | | function for chroma |
544 | | */ |
545 | | } intra_samp_lyr_ctxt; |
546 | | typedef struct |
547 | | { |
548 | | intra_samp_lyr_ctxt as_res_lyrs[MAX_NUM_RES_LYRS]; /*!< Array of resolution |
549 | | layer ctxt. |
550 | | The first strcuture in the |
551 | | array will be used for storing |
552 | | the "second resolution" map in |
553 | | an access unit w.r.t to its |
554 | | base resolution, and for base |
555 | | resolution nothing will be |
556 | | computed or stored |
557 | | */ |
558 | | void *ps_sps; /*!< pointer to array of SPS |
559 | | */ |
560 | | |
561 | | UWORD8 *pu1_refarray_buffer; /*!< buffer to store the reference |
562 | | layer data before intra |
563 | | sampling |
564 | | */ |
565 | | UWORD8 *pu1_refarray_cb; /*!< buffer to hold the reference |
566 | | layer Cb data before intra |
567 | | resampling (used for dyadic |
568 | | cases only) |
569 | | */ |
570 | | UWORD8 *pu1_refarray_cr; /*!< buffer to hold the reference |
571 | | layer Cr data before intra |
572 | | resampling (used for dyadic |
573 | | cases only) |
574 | | */ |
575 | | WORD32 *pi4_temp_interpolation_buffer; /*!< intermideate buffer |
576 | | for interpolation |
577 | | */ |
578 | | |
579 | | WORD32 i4_res_lyr_id; /*!< resolution id of the layer |
580 | | which is to be processed |
581 | | */ |
582 | | WORD32 i4_ref_width; /*!< reference layer width in |
583 | | terms luma samples |
584 | | */ |
585 | | |
586 | | WORD32 i4_refarray_stride; /*!< reference layer width in |
587 | | terms luma samples |
588 | | */ |
589 | | |
590 | | WORD32 i4_ref_height; /*!< reference layer height in |
591 | | terms luma samples |
592 | | */ |
593 | | res_prms_t *ps_res_prms; /*!< Current resolution params |
594 | | */ |
595 | | |
596 | | i264_interpolate_base_luma_dyadic *pf_interpolate_base_luma_dyadic; |
597 | | i264_interpolate_intra_base *pf_interpolate_intra_base; |
598 | | |
599 | | /*!< Vertical interpolation |
600 | | function for chroma |
601 | | */ |
602 | | i264_vert_interpol_chroma_dyadic *pf_vert_chroma_interpol[3]; |
603 | | |
604 | | /*!< Horizontal interpolation |
605 | | function for chroma |
606 | | */ |
607 | | i264_horz_interpol_chroma_dyadic *pf_horz_chroma_interpol[2]; |
608 | | |
609 | | } intra_sampling_ctxt_t; |
610 | | |
611 | | WORD32 isvcd_get_ceil_log2(WORD32 i4_x); |
612 | | |
613 | | void isvcd_2d_memset(void *pv_buf, WORD32 i4_width, WORD32 i4_ht, WORD32 i4_stride, WORD32 i4_val); |
614 | | |
615 | | WORD32 isvcd_intra_resamp_mb(void *pv_intra_samp_ctxt, mem_element_t *ps_ref_luma, |
616 | | mem_element_t *ps_ref_chroma, mem_element_t *ps_ref_mb_mode_map, |
617 | | mem_element_t *ps_curr_luma, mem_element_t *ps_curr_chroma, |
618 | | mb_coord_t *ps_mb_coord); |
619 | | |
620 | | WORD32 isvcd_intra_resamp_mb_dyadic(void *pv_intra_samp_ctxt, mem_element_t *ps_ref_luma, |
621 | | mem_element_t *ps_ref_chroma, mem_element_t *ps_ref_mb_mode_map, |
622 | | mem_element_t *ps_curr_luma, mem_element_t *ps_curr_chroma, |
623 | | mb_coord_t *ps_mb_coord, void *ps_svc_dec); |
624 | | |
625 | | WORD32 isvcd_populate_res_prms(void *ps_svc_dec); |
626 | | |
627 | | void isvcd_crop_wnd_flag_res_int(void *ps_svc_dec); |
628 | | |
629 | | WORD32 isvcd_intra_resamp_res_init(void *ps_svc_dec); |
630 | | |
631 | | void isvcd_intra_resamp_res_init_update_flags(void *ps_svc_dec); |
632 | | |
633 | | #endif /* _ISVCD_INTRA_RESAMPLE_H_ */ |