1 /*
2  * Copyright (c) 2003, Oracle and/or its affiliates. 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.  Oracle designates this
8  * particular file as subject to the "Classpath" exception as provided
9  * by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22  * or visit www.oracle.com if you need additional information or have any
23  * 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
35 extern "C" {
36 #endif /* __cplusplus */
37 
38 typedef void (*mlib_pack_func)(void *, void *, mlib_s32, void *);
39 
40 /***************************************************************/
41 typedef struct {
42   mlib_s32  width, height,
43             srcX, srcY,
44             dstX, dstY;
45   void      *sp, *dp;
46 } mlib_clipping;
47 
48 /***************************************************************/
49 typedef struct {
50   void     *dp;
51   mlib_s32 w, h;
52   mlib_s32 dlb;
53 } mlib_edge_box;
54 
55 /***************************************************************/
56 typedef 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 /***************************************************************/
132 typedef mlib_status (*mlib_zoom_fun_type)(mlib_work_image *param);
133 
134 typedef mlib_status (*mlib_zoom_fun2type)(mlib_work_image *param,
135                                           const mlib_f32  *flt_table);
136 
137 /***************************************************************/
138 mlib_status mlib_ImageZoom_BIT_1_Nearest(mlib_work_image *param,
139                                          mlib_s32        s_bitoff,
140                                          mlib_s32        d_bitoff);
141 
142 mlib_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 
147 mlib_status mlib_ImageZoom_U8_1_Nearest(mlib_work_image *param);
148 mlib_status mlib_ImageZoom_U8_2_Nearest(mlib_work_image *param);
149 mlib_status mlib_ImageZoom_U8_3_Nearest(mlib_work_image *param);
150 mlib_status mlib_ImageZoom_U8_4_Nearest(mlib_work_image *param);
151 mlib_status mlib_ImageZoom_S16_1_Nearest(mlib_work_image *param);
152 mlib_status mlib_ImageZoom_S16_2_Nearest(mlib_work_image *param);
153 mlib_status mlib_ImageZoom_S16_3_Nearest(mlib_work_image *param);
154 mlib_status mlib_ImageZoom_S16_4_Nearest(mlib_work_image *param);
155 mlib_status mlib_ImageZoom_S32_1_Nearest(mlib_work_image *param);
156 mlib_status mlib_ImageZoom_S32_2_Nearest(mlib_work_image *param);
157 mlib_status mlib_ImageZoom_S32_3_Nearest(mlib_work_image *param);
158 mlib_status mlib_ImageZoom_S32_4_Nearest(mlib_work_image *param);
159 
160 mlib_status mlib_ImageZoom_S32_1_Bilinear(mlib_work_image *param);
161 mlib_status mlib_ImageZoom_S32_2_Bilinear(mlib_work_image *param);
162 mlib_status mlib_ImageZoom_S32_3_Bilinear(mlib_work_image *param);
163 mlib_status mlib_ImageZoom_S32_4_Bilinear(mlib_work_image *param);
164 
165 mlib_status mlib_ImageZoom_S32_1_1_Bilinear(mlib_work_image *param);
166 mlib_status mlib_ImageZoom_S32_2_1_Bilinear(mlib_work_image *param);
167 mlib_status mlib_ImageZoom_S32_3_1_Bilinear(mlib_work_image *param);
168 mlib_status mlib_ImageZoom_S32_4_1_Bilinear(mlib_work_image *param);
169 
170 mlib_status mlib_ImageZoom_S32_1_Bicubic(mlib_work_image *param);
171 mlib_status mlib_ImageZoom_S32_2_Bicubic(mlib_work_image *param);
172 mlib_status mlib_ImageZoom_S32_3_Bicubic(mlib_work_image *param);
173 mlib_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 
204 FUNC_PROT(mlib_c_ImageZoomBilinear_U8);
205 FUNC_PROT(mlib_c_ImageZoomBilinear_S16);
206 FUNC_PROT(mlib_c_ImageZoomBilinear_U16);
207 
208 FUNC_PROT_BC(mlib_c_ImageZoomBicubic_U8);
209 FUNC_PROT_BC(mlib_c_ImageZoomBicubic_S16);
210 FUNC_PROT_BC(mlib_c_ImageZoomBicubic_U16);
211 
212 FUNC_PROT(mlib_v_ImageZoomBilinear_U8);
213 FUNC_PROT(mlib_v_ImageZoomBilinear_S16);
214 FUNC_PROT(mlib_v_ImageZoomBilinear_U16);
215 
216 FUNC_PROT(mlib_v_ImageZoomBicubic_U8);
217 FUNC_PROT(mlib_v_ImageZoomBicubic_S16);
218 FUNC_PROT(mlib_v_ImageZoomBicubic_U16);
219 
220 FUNC_PROT(mlib_ImageZoomBilinear_S32);
221 FUNC_PROT(mlib_ImageZoomBicubic_S32);
222 
223 FUNC_PROT(mlib_ImageZoomBilinear_F32);
224 FUNC_PROT_WO_S_FUNC(mlib_ImageZoomBicubic_F32);
225 
226 FUNC_PROT(mlib_ImageZoomBilinear_D64);
227 FUNC_PROT_WO_S_FUNC(mlib_ImageZoomBicubic_D64);
228 
229 /***************************************************************/
230 /* Index image part */
231 mlib_status mlib_c_ImageZoomIndex_U8_U8_3_Bilinear(mlib_work_image *param);
232 mlib_status mlib_c_ImageZoomIndex_U8_S16_3_Bilinear(mlib_work_image *param);
233 mlib_status mlib_c_ImageZoomIndex_S16_U8_3_Bilinear(mlib_work_image *param);
234 mlib_status mlib_c_ImageZoomIndex_S16_S16_3_Bilinear(mlib_work_image *param);
235 
236 mlib_status mlib_c_ImageZoomIndex_U8_U8_4_Bilinear(mlib_work_image *param);
237 mlib_status mlib_c_ImageZoomIndex_U8_S16_4_Bilinear(mlib_work_image *param);
238 mlib_status mlib_c_ImageZoomIndex_S16_U8_4_Bilinear(mlib_work_image *param);
239 mlib_status mlib_c_ImageZoomIndex_S16_S16_4_Bilinear(mlib_work_image *param);
240 
241 mlib_status mlib_c_ImageZoomIndex_U8_U8_3_Bicubic(mlib_work_image *param);
242 mlib_status mlib_c_ImageZoomIndex_U8_S16_3_Bicubic(mlib_work_image *param);
243 mlib_status mlib_c_ImageZoomIndex_S16_U8_3_Bicubic(mlib_work_image *param);
244 mlib_status mlib_c_ImageZoomIndex_S16_S16_3_Bicubic(mlib_work_image *param);
245 
246 mlib_status mlib_c_ImageZoomIndex_U8_U8_4_Bicubic(mlib_work_image *param);
247 mlib_status mlib_c_ImageZoomIndex_U8_S16_4_Bicubic(mlib_work_image *param);
248 mlib_status mlib_c_ImageZoomIndex_S16_U8_4_Bicubic(mlib_work_image *param);
249 mlib_status mlib_c_ImageZoomIndex_S16_S16_4_Bicubic(mlib_work_image *param);
250 
251 mlib_status mlib_c_ImageZoomIndex_U8_U8_3_Bicubic2(mlib_work_image *param);
252 mlib_status mlib_c_ImageZoomIndex_U8_S16_3_Bicubic2(mlib_work_image *param);
253 mlib_status mlib_c_ImageZoomIndex_S16_U8_3_Bicubic2(mlib_work_image *param);
254 mlib_status mlib_c_ImageZoomIndex_S16_S16_3_Bicubic2(mlib_work_image *param);
255 
256 mlib_status mlib_c_ImageZoomIndex_U8_U8_4_Bicubic2(mlib_work_image *param);
257 mlib_status mlib_c_ImageZoomIndex_U8_S16_4_Bicubic2(mlib_work_image *param);
258 mlib_status mlib_c_ImageZoomIndex_S16_U8_4_Bicubic2(mlib_work_image *param);
259 mlib_status mlib_c_ImageZoomIndex_S16_S16_4_Bicubic2(mlib_work_image *param);
260 
261 mlib_status mlib_v_ImageZoomIndex_U8_U8_Bilinear(mlib_work_image *param);
262 mlib_status mlib_v_ImageZoomIndex_U8_S16_Bilinear(mlib_work_image *param);
263 mlib_status mlib_v_ImageZoomIndex_S16_U8_Bilinear(mlib_work_image *param);
264 mlib_status mlib_v_ImageZoomIndex_S16_S16_Bilinear(mlib_work_image *param);
265 
266 mlib_status mlib_v_ImageZoomIndex_U8_U8_Bicubic(mlib_work_image *param);
267 mlib_status mlib_v_ImageZoomIndex_U8_S16_Bicubic(mlib_work_image *param);
268 mlib_status mlib_v_ImageZoomIndex_S16_U8_Bicubic(mlib_work_image *param);
269 mlib_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 
388 void mlib_ImageZoomZeroEdge_U8(mlib_work_image *param);
389 void mlib_ImageZoomZeroEdge_S16(mlib_work_image *param);
390 void mlib_ImageZoomZeroEdge_S32(mlib_work_image *param);
391 
392 void mlib_ImageZoomUpNearest_U8(mlib_work_image *param);
393 void mlib_ImageZoomUpNearest_S16(mlib_work_image *param);
394 void mlib_ImageZoomUpNearest_S32(mlib_work_image *param);
395 
396 void mlib_ImageZoomExtend_U8_Bilinear(mlib_work_image *param);
397 void mlib_ImageZoomExtend_S16_Bilinear(mlib_work_image *param);
398 void mlib_ImageZoomExtend_U16_Bilinear(mlib_work_image *param);
399 void mlib_ImageZoomExtend_S32_Bilinear(mlib_work_image *param);
400 
401 void mlib_ImageZoomExtend_U8_Bicubic(mlib_work_image *param);
402 void mlib_ImageZoomExtend_S16_Bicubic(mlib_work_image *param);
403 void mlib_ImageZoomExtend_U16_Bicubic(mlib_work_image *param);
404 void mlib_ImageZoomExtend_S32_Bicubic(mlib_work_image *param);
405 
406 void mlib_ImageZoomExtend_U8_Bicubic2(mlib_work_image *param);
407 void mlib_ImageZoomExtend_S16_Bicubic2(mlib_work_image *param);
408 void mlib_ImageZoomExtend_U16_Bicubic2(mlib_work_image *param);
409 void mlib_ImageZoomExtend_S32_Bicubic2(mlib_work_image *param);
410 
411 void mlib_ImageZoomIndexExtend_U8_Bilinear(mlib_work_image *param);
412 void mlib_ImageZoomIndexExtend_S16_Bilinear(mlib_work_image *param);
413 
414 void mlib_ImageZoomIndexExtend_U8_Bicubic(mlib_work_image *param);
415 void mlib_ImageZoomIndexExtend_S16_Bicubic(mlib_work_image *param);
416 void mlib_ImageZoomIndexExtend_U8_Bicubic2(mlib_work_image *param);
417 void mlib_ImageZoomIndexExtend_S16_Bicubic2(mlib_work_image *param);
418 
419 /* Float image part */
420 mlib_status mlib_ImageZoom_F32_1_Nearest(mlib_work_image *param);
421 mlib_status mlib_ImageZoom_F32_1_Bilinear(mlib_work_image *param);
422 mlib_status mlib_ImageZoom_F32_1_Bicubic(mlib_work_image *param);
423 mlib_status mlib_ImageZoom_F32_1_Bicubic2(mlib_work_image *param);
424 
425 mlib_status mlib_ImageZoom_F32_2_Nearest(mlib_work_image *param);
426 mlib_status mlib_ImageZoom_F32_2_Bilinear(mlib_work_image *param);
427 mlib_status mlib_ImageZoom_F32_2_Bicubic(mlib_work_image *param);
428 mlib_status mlib_ImageZoom_F32_2_Bicubic2(mlib_work_image *param);
429 
430 mlib_status mlib_ImageZoom_F32_3_Nearest(mlib_work_image *param);
431 mlib_status mlib_ImageZoom_F32_3_Bilinear(mlib_work_image *param);
432 mlib_status mlib_ImageZoom_F32_3_Bicubic(mlib_work_image *param);
433 mlib_status mlib_ImageZoom_F32_3_Bicubic2(mlib_work_image *param);
434 
435 mlib_status mlib_ImageZoom_F32_4_Nearest(mlib_work_image *param);
436 mlib_status mlib_ImageZoom_F32_4_Bilinear(mlib_work_image *param);
437 mlib_status mlib_ImageZoom_F32_4_Bicubic(mlib_work_image *param);
438 mlib_status mlib_ImageZoom_F32_4_Bicubic2(mlib_work_image *param);
439 
440 /* Double image part*/
441 mlib_status mlib_ImageZoom_D64_1_Nearest(mlib_work_image *param);
442 mlib_status mlib_ImageZoom_D64_1_Bilinear(mlib_work_image *param);
443 mlib_status mlib_ImageZoom_D64_1_Bicubic(mlib_work_image *param);
444 mlib_status mlib_ImageZoom_D64_1_Bicubic2(mlib_work_image *param);
445 
446 mlib_status mlib_ImageZoom_D64_2_Nearest(mlib_work_image *param);
447 mlib_status mlib_ImageZoom_D64_2_Bilinear(mlib_work_image *param);
448 mlib_status mlib_ImageZoom_D64_2_Bicubic(mlib_work_image *param);
449 mlib_status mlib_ImageZoom_D64_2_Bicubic2(mlib_work_image *param);
450 
451 mlib_status mlib_ImageZoom_D64_3_Nearest(mlib_work_image *param);
452 mlib_status mlib_ImageZoom_D64_3_Bilinear(mlib_work_image *param);
453 mlib_status mlib_ImageZoom_D64_3_Bicubic(mlib_work_image *param);
454 mlib_status mlib_ImageZoom_D64_3_Bicubic2(mlib_work_image *param);
455 
456 mlib_status mlib_ImageZoom_D64_4_Nearest(mlib_work_image *param);
457 mlib_status mlib_ImageZoom_D64_4_Bilinear(mlib_work_image *param);
458 mlib_status mlib_ImageZoom_D64_4_Bicubic(mlib_work_image *param);
459 mlib_status mlib_ImageZoom_D64_4_Bicubic2(mlib_work_image *param);
460 
461 /* Edge's */
462 void mlib_ImageZoomZeroEdge_F32(mlib_work_image *param);
463 void mlib_ImageZoomZeroEdge_D64(mlib_work_image *param);
464 
465 void mlib_ImageZoomUpNearest_F32(mlib_work_image *param);
466 void mlib_ImageZoomUpNearest_D64(mlib_work_image *param);
467 
468 void mlib_ImageZoomExtend_F32_Bilinear(mlib_work_image *param);
469 void mlib_ImageZoomExtend_D64_Bilinear(mlib_work_image *param);
470 
471 void mlib_ImageZoomExtend_F32_Bicubic(mlib_work_image *param);
472 void mlib_ImageZoomExtend_D64_Bicubic(mlib_work_image *param);
473 
474 void mlib_ImageZoomExtend_F32_Bicubic2(mlib_work_image *param);
475 void mlib_ImageZoomExtend_D64_Bicubic2(mlib_work_image *param);
476 
477 /***************************************************************/
478 
479 typedef mlib_status (*mlib_zoomblend_fun_type)(mlib_work_image *param, mlib_s32 alp_ind);
480 typedef mlib_status (*mlib_zoomblend_bc_type)(mlib_work_image *param,
481                                               const mlib_f32  *flt_table,
482                                               mlib_s32 alp);
483 
484 mlib_status mlib_ImageZoom_U8_33_Nearest(mlib_work_image *param, mlib_s32 alp_ind);
485 mlib_status mlib_ImageZoom_U8_43_Nearest(mlib_work_image *param, mlib_s32 alp_ind);
486 mlib_status mlib_ImageZoom_U8_34_Nearest(mlib_work_image *param, mlib_s32 alp_ind);
487 mlib_status mlib_ImageZoom_U8_44_Nearest(mlib_work_image *param, mlib_s32 alp_ind);
488 
489 mlib_status mlib_c_ImageZoomBilinear_U8_3to34(mlib_work_image *param);
490 mlib_status mlib_c_ImageZoomBilinear_U8_4to34(mlib_work_image *param);
491 
492 mlib_status mlib_c_ImageZoomBilinear_U8_33(mlib_work_image *param, mlib_s32 alp_ind);
493 mlib_status mlib_c_ImageZoomBilinear_U8_43(mlib_work_image *param, mlib_s32 alp_ind);
494 mlib_status mlib_c_ImageZoomBilinear_U8_34(mlib_work_image *param, mlib_s32 alp_ind);
495 mlib_status mlib_c_ImageZoomBilinear_U8_44(mlib_work_image *param, mlib_s32 alp_ind);
496 
497 mlib_status mlib_c_ImageZoomBicubic_U8_33(mlib_work_image *param,
498                                           const mlib_f32  *flt_table,
499                                           mlib_s32 alp);
500 mlib_status mlib_c_ImageZoomBicubic_U8_43(mlib_work_image *param,
501                                           const mlib_f32  *flt_table,
502                                           mlib_s32 alp);
503 mlib_status mlib_c_ImageZoomBicubic_U8_34(mlib_work_image *param,
504                                           const mlib_f32  *flt_table,
505                                           mlib_s32 alp);
506 mlib_status mlib_c_ImageZoomBicubic_U8_44(mlib_work_image *param,
507                                           const mlib_f32  *flt_table,
508                                           mlib_s32 alp);
509 
510 /***************************************************************/
511 
512 mlib_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 
519 mlib_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 */
533