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