blob: c29005a1e295d4bdffae677160a8110f5e577dad [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001/*
2 * Copyright 2003 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Sun designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Sun in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
22 * CA 95054 USA or visit www.sun.com if you need additional information or
23 * have any questions.
24 */
25
26#ifndef __MLIB_IMAGEZOOM_H
27#define __MLIB_IMAGEZOOM_H
28
29#include <mlib_types.h>
30#include <mlib_image_types.h>
31#include <mlib_status.h>
32#include <mlib_ImageCopy.h>
33
34#ifdef __cplusplus
35extern "C" {
36#endif /* __cplusplus */
37
38typedef void (*mlib_pack_func)(void *, void *, mlib_s32, void *);
39
40/***************************************************************/
41typedef struct {
42 mlib_s32 width, height,
43 srcX, srcY,
44 dstX, dstY;
45 void *sp, *dp;
46} mlib_clipping;
47
48/***************************************************************/
49typedef struct {
50 void *dp;
51 mlib_s32 w, h;
52 mlib_s32 dlb;
53} mlib_edge_box;
54
55/***************************************************************/
56typedef struct mlib_work_image {
57 mlib_clipping
58 *nearest, /* nearest neighbor state of image */
59 *current; /* current state of image*/
60 mlib_s32
61 channels, /* channels in image */
62 src_stride, dst_stride,
63 width, height, /* vertical and horizontal size src image */
64 DX, DY,
65 color;
66 void
67 *sp, *dp,
68 *src_end,
69 *buffer_dp,
70 *colormap;
71 mlib_d64
72 zoomx, zoomy;
73 mlib_d64
74 rzoomx, rzoomy;
75 mlib_d64
76 xstart, ystart;
77 mlib_s32 tshift; /* shift for size of data type */
78 mlib_s32 filter;
79 mlib_u8 *filter1, *filter3, *filter4;
80 mlib_s32 alpha;
81 mlib_edge_box edges[4];
82 mlib_edge_box edges_blend[4];
83 mlib_s32 chan_d;
84 mlib_s32 alp_ind;
85 mlib_s32 sline_size;
86 mlib_s32 y_max;
87} mlib_work_image;
88
89/***************************************************************/
90#define GetElemSubStruct(struct, par) (param->struct->par)
91#define GetElemStruct(x) (param->x)
92
93/***************************************************************/
94#define SetElemSubStruct(struct, par, val) (param->struct->par = val)
95#define SetElemStruct(x, val) (param->x = val)
96
97/***************************************************************/
98
99#define VARIABLE_EDGE(FORMAT) \
100 mlib_edge_box *edges = param->edges; \
101 mlib_s32 i, j, ch; \
102 mlib_s32 channels = param->channels; \
103 mlib_s32 w1 = edges[0].w; \
104 mlib_s32 w2 = edges[1].w; \
105 mlib_s32 w3 = edges[2].w; \
106 mlib_s32 h1 = edges[0].h; \
107 mlib_s32 h2 = edges[1].h; \
108 mlib_s32 h3 = edges[3].h; \
109 mlib_s32 stride_dp0 = edges[0].dlb; \
110 mlib_s32 stride_dp1 = edges[1].dlb; \
111 mlib_s32 stride_dp2 = edges[2].dlb; \
112 mlib_s32 stride_dp3 = edges[3].dlb; \
113 mlib_s32 dst_stride = GetElemStruct(dst_stride); \
114 FORMAT *dp0 = edges[0].dp; \
115 FORMAT *dp1 = edges[1].dp; \
116 FORMAT *dp2 = edges[2].dp; \
117 FORMAT *dp3 = edges[3].dp
118
119/***************************************************************/
120
121#define MLIB_SHIFT 16
122#define MLIB_PREC (1 << MLIB_SHIFT)
123#define MLIB_MASK (MLIB_PREC - 1)
124#define MLIB_SCALE (1.0 / MLIB_PREC)
125#define MLIB_SIGN_SHIFT 31
126
127/***************************************************************/
128#define MLIB_SCALE_BC_U8 (1.0 / (1 << 28))
129#define MLIB_SCALE_BC_S16 (1.0 / (1 << 30))
130
131/***************************************************************/
132typedef mlib_status (*mlib_zoom_fun_type)(mlib_work_image *param);
133
134typedef mlib_status (*mlib_zoom_fun2type)(mlib_work_image *param,
135 const mlib_f32 *flt_table);
136
137/***************************************************************/
138mlib_status mlib_ImageZoom_BIT_1_Nearest(mlib_work_image *param,
139 mlib_s32 s_bitoff,
140 mlib_s32 d_bitoff);
141
142mlib_status mlib_ImageZoom_BitToGray_1_Nearest(mlib_work_image *param,
143 mlib_s32 s_bitoff,
144 const mlib_s32 *ghigh,
145 const mlib_s32 *glow);
146
147mlib_status mlib_ImageZoom_U8_1_Nearest(mlib_work_image *param);
148mlib_status mlib_ImageZoom_U8_2_Nearest(mlib_work_image *param);
149mlib_status mlib_ImageZoom_U8_3_Nearest(mlib_work_image *param);
150mlib_status mlib_ImageZoom_U8_4_Nearest(mlib_work_image *param);
151mlib_status mlib_ImageZoom_S16_1_Nearest(mlib_work_image *param);
152mlib_status mlib_ImageZoom_S16_2_Nearest(mlib_work_image *param);
153mlib_status mlib_ImageZoom_S16_3_Nearest(mlib_work_image *param);
154mlib_status mlib_ImageZoom_S16_4_Nearest(mlib_work_image *param);
155mlib_status mlib_ImageZoom_S32_1_Nearest(mlib_work_image *param);
156mlib_status mlib_ImageZoom_S32_2_Nearest(mlib_work_image *param);
157mlib_status mlib_ImageZoom_S32_3_Nearest(mlib_work_image *param);
158mlib_status mlib_ImageZoom_S32_4_Nearest(mlib_work_image *param);
159
160mlib_status mlib_ImageZoom_S32_1_Bilinear(mlib_work_image *param);
161mlib_status mlib_ImageZoom_S32_2_Bilinear(mlib_work_image *param);
162mlib_status mlib_ImageZoom_S32_3_Bilinear(mlib_work_image *param);
163mlib_status mlib_ImageZoom_S32_4_Bilinear(mlib_work_image *param);
164
165mlib_status mlib_ImageZoom_S32_1_1_Bilinear(mlib_work_image *param);
166mlib_status mlib_ImageZoom_S32_2_1_Bilinear(mlib_work_image *param);
167mlib_status mlib_ImageZoom_S32_3_1_Bilinear(mlib_work_image *param);
168mlib_status mlib_ImageZoom_S32_4_1_Bilinear(mlib_work_image *param);
169
170mlib_status mlib_ImageZoom_S32_1_Bicubic(mlib_work_image *param);
171mlib_status mlib_ImageZoom_S32_2_Bicubic(mlib_work_image *param);
172mlib_status mlib_ImageZoom_S32_3_Bicubic(mlib_work_image *param);
173mlib_status mlib_ImageZoom_S32_4_Bicubic(mlib_work_image *param);
174
175/***************************************************************/
176#define FUNC_PROT(NAME) \
177 mlib_status NAME##_1(mlib_work_image *param); \
178 mlib_status NAME##_2(mlib_work_image *param); \
179 mlib_status NAME##_3(mlib_work_image *param); \
180 mlib_status NAME##_4(mlib_work_image *param); \
181 mlib_status NAME##_1s(mlib_work_image *param); \
182 mlib_status NAME##_2s(mlib_work_image *param); \
183 mlib_status NAME##_3s(mlib_work_image *param); \
184 mlib_status NAME##_4s(mlib_work_image *param)
185
186/***************************************************************/
187#define FUNC_PROT_WO_S_FUNC(NAME) \
188 mlib_status NAME##_1(mlib_work_image *param); \
189 mlib_status NAME##_2(mlib_work_image *param); \
190 mlib_status NAME##_3(mlib_work_image *param); \
191 mlib_status NAME##_4(mlib_work_image *param)
192
193/***************************************************************/
194#define FUNC_PROT_BC(NAME) \
195 mlib_status NAME##_1(mlib_work_image *param, const mlib_f32 *flt_table); \
196 mlib_status NAME##_2(mlib_work_image *param, const mlib_f32 *flt_table); \
197 mlib_status NAME##_3(mlib_work_image *param, const mlib_f32 *flt_table); \
198 mlib_status NAME##_4(mlib_work_image *param, const mlib_f32 *flt_table); \
199 mlib_status NAME##_1s(mlib_work_image *param, const mlib_f32 *flt_table); \
200 mlib_status NAME##_2s(mlib_work_image *param, const mlib_f32 *flt_table); \
201 mlib_status NAME##_3s(mlib_work_image *param, const mlib_f32 *flt_table); \
202 mlib_status NAME##_4s(mlib_work_image *param, const mlib_f32 *flt_table)
203
204FUNC_PROT(mlib_c_ImageZoomBilinear_U8);
205FUNC_PROT(mlib_c_ImageZoomBilinear_S16);
206FUNC_PROT(mlib_c_ImageZoomBilinear_U16);
207
208FUNC_PROT_BC(mlib_c_ImageZoomBicubic_U8);
209FUNC_PROT_BC(mlib_c_ImageZoomBicubic_S16);
210FUNC_PROT_BC(mlib_c_ImageZoomBicubic_U16);
211
212FUNC_PROT(mlib_v_ImageZoomBilinear_U8);
213FUNC_PROT(mlib_v_ImageZoomBilinear_S16);
214FUNC_PROT(mlib_v_ImageZoomBilinear_U16);
215
216FUNC_PROT(mlib_v_ImageZoomBicubic_U8);
217FUNC_PROT(mlib_v_ImageZoomBicubic_S16);
218FUNC_PROT(mlib_v_ImageZoomBicubic_U16);
219
220FUNC_PROT(mlib_ImageZoomBilinear_S32);
221FUNC_PROT(mlib_ImageZoomBicubic_S32);
222
223FUNC_PROT(mlib_ImageZoomBilinear_F32);
224FUNC_PROT_WO_S_FUNC(mlib_ImageZoomBicubic_F32);
225
226FUNC_PROT(mlib_ImageZoomBilinear_D64);
227FUNC_PROT_WO_S_FUNC(mlib_ImageZoomBicubic_D64);
228
229/***************************************************************/
230/* Index image part */
231mlib_status mlib_c_ImageZoomIndex_U8_U8_3_Bilinear(mlib_work_image *param);
232mlib_status mlib_c_ImageZoomIndex_U8_S16_3_Bilinear(mlib_work_image *param);
233mlib_status mlib_c_ImageZoomIndex_S16_U8_3_Bilinear(mlib_work_image *param);
234mlib_status mlib_c_ImageZoomIndex_S16_S16_3_Bilinear(mlib_work_image *param);
235
236mlib_status mlib_c_ImageZoomIndex_U8_U8_4_Bilinear(mlib_work_image *param);
237mlib_status mlib_c_ImageZoomIndex_U8_S16_4_Bilinear(mlib_work_image *param);
238mlib_status mlib_c_ImageZoomIndex_S16_U8_4_Bilinear(mlib_work_image *param);
239mlib_status mlib_c_ImageZoomIndex_S16_S16_4_Bilinear(mlib_work_image *param);
240
241mlib_status mlib_c_ImageZoomIndex_U8_U8_3_Bicubic(mlib_work_image *param);
242mlib_status mlib_c_ImageZoomIndex_U8_S16_3_Bicubic(mlib_work_image *param);
243mlib_status mlib_c_ImageZoomIndex_S16_U8_3_Bicubic(mlib_work_image *param);
244mlib_status mlib_c_ImageZoomIndex_S16_S16_3_Bicubic(mlib_work_image *param);
245
246mlib_status mlib_c_ImageZoomIndex_U8_U8_4_Bicubic(mlib_work_image *param);
247mlib_status mlib_c_ImageZoomIndex_U8_S16_4_Bicubic(mlib_work_image *param);
248mlib_status mlib_c_ImageZoomIndex_S16_U8_4_Bicubic(mlib_work_image *param);
249mlib_status mlib_c_ImageZoomIndex_S16_S16_4_Bicubic(mlib_work_image *param);
250
251mlib_status mlib_c_ImageZoomIndex_U8_U8_3_Bicubic2(mlib_work_image *param);
252mlib_status mlib_c_ImageZoomIndex_U8_S16_3_Bicubic2(mlib_work_image *param);
253mlib_status mlib_c_ImageZoomIndex_S16_U8_3_Bicubic2(mlib_work_image *param);
254mlib_status mlib_c_ImageZoomIndex_S16_S16_3_Bicubic2(mlib_work_image *param);
255
256mlib_status mlib_c_ImageZoomIndex_U8_U8_4_Bicubic2(mlib_work_image *param);
257mlib_status mlib_c_ImageZoomIndex_U8_S16_4_Bicubic2(mlib_work_image *param);
258mlib_status mlib_c_ImageZoomIndex_S16_U8_4_Bicubic2(mlib_work_image *param);
259mlib_status mlib_c_ImageZoomIndex_S16_S16_4_Bicubic2(mlib_work_image *param);
260
261mlib_status mlib_v_ImageZoomIndex_U8_U8_Bilinear(mlib_work_image *param);
262mlib_status mlib_v_ImageZoomIndex_U8_S16_Bilinear(mlib_work_image *param);
263mlib_status mlib_v_ImageZoomIndex_S16_U8_Bilinear(mlib_work_image *param);
264mlib_status mlib_v_ImageZoomIndex_S16_S16_Bilinear(mlib_work_image *param);
265
266mlib_status mlib_v_ImageZoomIndex_U8_U8_Bicubic(mlib_work_image *param);
267mlib_status mlib_v_ImageZoomIndex_U8_S16_Bicubic(mlib_work_image *param);
268mlib_status mlib_v_ImageZoomIndex_S16_U8_Bicubic(mlib_work_image *param);
269mlib_status mlib_v_ImageZoomIndex_S16_S16_Bicubic(mlib_work_image *param);
270
271/***************************************************************/
272/* Define function and rules for computing edges */
273#define MLIB_EDGE_RULES \
274 switch(edge) { \
275 \
276 case MLIB_EDGE_DST_FILL_ZERO: \
277 \
278 switch(mlib_ImageGetType(src)) { \
279 case MLIB_BYTE: \
280 mlib_ImageZoomZeroEdge_U8(param); \
281 break; \
282 \
283 case MLIB_SHORT: \
284 case MLIB_USHORT: \
285 mlib_ImageZoomZeroEdge_S16(param); \
286 break; \
287 \
288 case MLIB_INT: \
289 mlib_ImageZoomZeroEdge_S32(param); \
290 break; \
291 } \
292 break; \
293 \
294 case MLIB_EDGE_OP_NEAREST: \
295 \
296 switch(mlib_ImageGetType(src)) { \
297 case MLIB_BYTE: \
298 mlib_ImageZoomUpNearest_U8(param); \
299 break; \
300 \
301 case MLIB_SHORT: \
302 case MLIB_USHORT: \
303 mlib_ImageZoomUpNearest_S16(param); \
304 break; \
305 \
306 case MLIB_INT: \
307 mlib_ImageZoomUpNearest_S32(param); \
308 break; \
309 } \
310 break; \
311 \
312 case MLIB_EDGE_SRC_EXTEND: \
313 \
314 switch(mlib_ImageGetType(src)) { \
315 case MLIB_BYTE: \
316 \
317 switch(filter) { \
318 case MLIB_BILINEAR: \
319 mlib_ImageZoomExtend_U8_Bilinear(param); \
320 break; \
321 \
322 case MLIB_BICUBIC: \
323 mlib_ImageZoomExtend_U8_Bicubic(param); \
324 break; \
325 \
326 case MLIB_BICUBIC2: \
327 mlib_ImageZoomExtend_U8_Bicubic2(param); \
328 break; \
329 } \
330 break; \
331 \
332 case MLIB_SHORT: \
333 switch(filter) { \
334 case MLIB_BILINEAR: \
335 mlib_ImageZoomExtend_S16_Bilinear(param); \
336 break; \
337 \
338 case MLIB_BICUBIC: \
339 mlib_ImageZoomExtend_S16_Bicubic(param); \
340 break; \
341 \
342 case MLIB_BICUBIC2: \
343 mlib_ImageZoomExtend_S16_Bicubic2(param); \
344 break; \
345 } \
346 break; \
347 \
348 case MLIB_USHORT: \
349 switch(filter) { \
350 case MLIB_BILINEAR: \
351 mlib_ImageZoomExtend_U16_Bilinear(param); \
352 break; \
353 \
354 case MLIB_BICUBIC: \
355 mlib_ImageZoomExtend_U16_Bicubic(param); \
356 break; \
357 \
358 case MLIB_BICUBIC2: \
359 mlib_ImageZoomExtend_U16_Bicubic2(param); \
360 break; \
361 } \
362 break; \
363 \
364 case MLIB_INT: \
365 switch(filter) { \
366 case MLIB_BILINEAR: \
367 mlib_ImageZoomExtend_S32_Bilinear(param); \
368 break; \
369 \
370 case MLIB_BICUBIC: \
371 mlib_ImageZoomExtend_S32_Bicubic(param); \
372 break; \
373 \
374 case MLIB_BICUBIC2: \
375 mlib_ImageZoomExtend_S32_Bicubic2(param); \
376 break; \
377 } \
378 break; \
379 } \
380 break; \
381 \
382 default: \
383 return MLIB_SUCCESS; \
384 }
385
386/***************************************************************/
387
388void mlib_ImageZoomZeroEdge_U8(mlib_work_image *param);
389void mlib_ImageZoomZeroEdge_S16(mlib_work_image *param);
390void mlib_ImageZoomZeroEdge_S32(mlib_work_image *param);
391
392void mlib_ImageZoomUpNearest_U8(mlib_work_image *param);
393void mlib_ImageZoomUpNearest_S16(mlib_work_image *param);
394void mlib_ImageZoomUpNearest_S32(mlib_work_image *param);
395
396void mlib_ImageZoomExtend_U8_Bilinear(mlib_work_image *param);
397void mlib_ImageZoomExtend_S16_Bilinear(mlib_work_image *param);
398void mlib_ImageZoomExtend_U16_Bilinear(mlib_work_image *param);
399void mlib_ImageZoomExtend_S32_Bilinear(mlib_work_image *param);
400
401void mlib_ImageZoomExtend_U8_Bicubic(mlib_work_image *param);
402void mlib_ImageZoomExtend_S16_Bicubic(mlib_work_image *param);
403void mlib_ImageZoomExtend_U16_Bicubic(mlib_work_image *param);
404void mlib_ImageZoomExtend_S32_Bicubic(mlib_work_image *param);
405
406void mlib_ImageZoomExtend_U8_Bicubic2(mlib_work_image *param);
407void mlib_ImageZoomExtend_S16_Bicubic2(mlib_work_image *param);
408void mlib_ImageZoomExtend_U16_Bicubic2(mlib_work_image *param);
409void mlib_ImageZoomExtend_S32_Bicubic2(mlib_work_image *param);
410
411void mlib_ImageZoomIndexExtend_U8_Bilinear(mlib_work_image *param);
412void mlib_ImageZoomIndexExtend_S16_Bilinear(mlib_work_image *param);
413
414void mlib_ImageZoomIndexExtend_U8_Bicubic(mlib_work_image *param);
415void mlib_ImageZoomIndexExtend_S16_Bicubic(mlib_work_image *param);
416void mlib_ImageZoomIndexExtend_U8_Bicubic2(mlib_work_image *param);
417void mlib_ImageZoomIndexExtend_S16_Bicubic2(mlib_work_image *param);
418
419/* Float image part */
420mlib_status mlib_ImageZoom_F32_1_Nearest(mlib_work_image *param);
421mlib_status mlib_ImageZoom_F32_1_Bilinear(mlib_work_image *param);
422mlib_status mlib_ImageZoom_F32_1_Bicubic(mlib_work_image *param);
423mlib_status mlib_ImageZoom_F32_1_Bicubic2(mlib_work_image *param);
424
425mlib_status mlib_ImageZoom_F32_2_Nearest(mlib_work_image *param);
426mlib_status mlib_ImageZoom_F32_2_Bilinear(mlib_work_image *param);
427mlib_status mlib_ImageZoom_F32_2_Bicubic(mlib_work_image *param);
428mlib_status mlib_ImageZoom_F32_2_Bicubic2(mlib_work_image *param);
429
430mlib_status mlib_ImageZoom_F32_3_Nearest(mlib_work_image *param);
431mlib_status mlib_ImageZoom_F32_3_Bilinear(mlib_work_image *param);
432mlib_status mlib_ImageZoom_F32_3_Bicubic(mlib_work_image *param);
433mlib_status mlib_ImageZoom_F32_3_Bicubic2(mlib_work_image *param);
434
435mlib_status mlib_ImageZoom_F32_4_Nearest(mlib_work_image *param);
436mlib_status mlib_ImageZoom_F32_4_Bilinear(mlib_work_image *param);
437mlib_status mlib_ImageZoom_F32_4_Bicubic(mlib_work_image *param);
438mlib_status mlib_ImageZoom_F32_4_Bicubic2(mlib_work_image *param);
439
440/* Double image part*/
441mlib_status mlib_ImageZoom_D64_1_Nearest(mlib_work_image *param);
442mlib_status mlib_ImageZoom_D64_1_Bilinear(mlib_work_image *param);
443mlib_status mlib_ImageZoom_D64_1_Bicubic(mlib_work_image *param);
444mlib_status mlib_ImageZoom_D64_1_Bicubic2(mlib_work_image *param);
445
446mlib_status mlib_ImageZoom_D64_2_Nearest(mlib_work_image *param);
447mlib_status mlib_ImageZoom_D64_2_Bilinear(mlib_work_image *param);
448mlib_status mlib_ImageZoom_D64_2_Bicubic(mlib_work_image *param);
449mlib_status mlib_ImageZoom_D64_2_Bicubic2(mlib_work_image *param);
450
451mlib_status mlib_ImageZoom_D64_3_Nearest(mlib_work_image *param);
452mlib_status mlib_ImageZoom_D64_3_Bilinear(mlib_work_image *param);
453mlib_status mlib_ImageZoom_D64_3_Bicubic(mlib_work_image *param);
454mlib_status mlib_ImageZoom_D64_3_Bicubic2(mlib_work_image *param);
455
456mlib_status mlib_ImageZoom_D64_4_Nearest(mlib_work_image *param);
457mlib_status mlib_ImageZoom_D64_4_Bilinear(mlib_work_image *param);
458mlib_status mlib_ImageZoom_D64_4_Bicubic(mlib_work_image *param);
459mlib_status mlib_ImageZoom_D64_4_Bicubic2(mlib_work_image *param);
460
461/* Edge's */
462void mlib_ImageZoomZeroEdge_F32(mlib_work_image *param);
463void mlib_ImageZoomZeroEdge_D64(mlib_work_image *param);
464
465void mlib_ImageZoomUpNearest_F32(mlib_work_image *param);
466void mlib_ImageZoomUpNearest_D64(mlib_work_image *param);
467
468void mlib_ImageZoomExtend_F32_Bilinear(mlib_work_image *param);
469void mlib_ImageZoomExtend_D64_Bilinear(mlib_work_image *param);
470
471void mlib_ImageZoomExtend_F32_Bicubic(mlib_work_image *param);
472void mlib_ImageZoomExtend_D64_Bicubic(mlib_work_image *param);
473
474void mlib_ImageZoomExtend_F32_Bicubic2(mlib_work_image *param);
475void mlib_ImageZoomExtend_D64_Bicubic2(mlib_work_image *param);
476
477/***************************************************************/
478
479typedef mlib_status (*mlib_zoomblend_fun_type)(mlib_work_image *param, mlib_s32 alp_ind);
480typedef mlib_status (*mlib_zoomblend_bc_type)(mlib_work_image *param,
481 const mlib_f32 *flt_table,
482 mlib_s32 alp);
483
484mlib_status mlib_ImageZoom_U8_33_Nearest(mlib_work_image *param, mlib_s32 alp_ind);
485mlib_status mlib_ImageZoom_U8_43_Nearest(mlib_work_image *param, mlib_s32 alp_ind);
486mlib_status mlib_ImageZoom_U8_34_Nearest(mlib_work_image *param, mlib_s32 alp_ind);
487mlib_status mlib_ImageZoom_U8_44_Nearest(mlib_work_image *param, mlib_s32 alp_ind);
488
489mlib_status mlib_c_ImageZoomBilinear_U8_3to34(mlib_work_image *param);
490mlib_status mlib_c_ImageZoomBilinear_U8_4to34(mlib_work_image *param);
491
492mlib_status mlib_c_ImageZoomBilinear_U8_33(mlib_work_image *param, mlib_s32 alp_ind);
493mlib_status mlib_c_ImageZoomBilinear_U8_43(mlib_work_image *param, mlib_s32 alp_ind);
494mlib_status mlib_c_ImageZoomBilinear_U8_34(mlib_work_image *param, mlib_s32 alp_ind);
495mlib_status mlib_c_ImageZoomBilinear_U8_44(mlib_work_image *param, mlib_s32 alp_ind);
496
497mlib_status mlib_c_ImageZoomBicubic_U8_33(mlib_work_image *param,
498 const mlib_f32 *flt_table,
499 mlib_s32 alp);
500mlib_status mlib_c_ImageZoomBicubic_U8_43(mlib_work_image *param,
501 const mlib_f32 *flt_table,
502 mlib_s32 alp);
503mlib_status mlib_c_ImageZoomBicubic_U8_34(mlib_work_image *param,
504 const mlib_f32 *flt_table,
505 mlib_s32 alp);
506mlib_status mlib_c_ImageZoomBicubic_U8_44(mlib_work_image *param,
507 const mlib_f32 *flt_table,
508 mlib_s32 alp);
509
510/***************************************************************/
511
512mlib_status mlib_ZoomBlendEdge(mlib_image *dst,
513 const mlib_image *src,
514 mlib_work_image *param,
515 mlib_filter filter,
516 mlib_edge edge,
517 mlib_s32 alp_ind);
518
519mlib_status mlib_ImageZoomClipping(mlib_image *dst,
520 const mlib_image *src,
521 mlib_d64 zoomx,
522 mlib_d64 zoomy,
523 mlib_d64 tx,
524 mlib_d64 ty,
525 mlib_filter filter,
526 mlib_edge edge,
527 mlib_work_image *param);
528
529#ifdef __cplusplus
530}
531#endif /* __cplusplus */
532#endif /* __MLIB_IMAGEZOOM_H */