< prev index next >

src/java.desktop/share/native/libmlib_image/mlib_ImageConv_u16ext.c

Print this page




 522     fscale *= 1.0/(1 << 30);
 523     scale -= 30;
 524   }
 525 
 526   fscale /= (1 << scale);
 527 
 528   mn = m*n;
 529 
 530   if (mn > 256) {
 531     k = mlib_malloc(mn*sizeof(mlib_d64));
 532 
 533     if (k == NULL) return MLIB_FAILURE;
 534   }
 535 
 536   for (i = 0; i < mn; i++) {
 537     k[i] = kernel[i]*fscale;
 538   }
 539 
 540   if (m == 1) {
 541     status = mlib_ImageConv1xN_ext(dst, src, k, n, dy_t, dy_b, cmask);
 542     FREE_AND_RETURN_STATUS;
 543   }
 544 
 545   swid = wid + (m - 1);
 546 
 547   bsize = (n + 3)*swid;
 548 
 549   if ((bsize > BUFF_SIZE) || (n > MAX_N)) {
 550     pbuff = mlib_malloc(sizeof(FTYPE)*bsize + sizeof(FTYPE *)*2*(n + 1));
 551 
 552     if (pbuff == NULL) {
 553       status = MLIB_FAILURE;
 554       FREE_AND_RETURN_STATUS;
 555     }
 556     buffs = (FTYPE   **)(pbuff + bsize);
 557   }
 558 
 559   for (l = 0; l < (n + 1); l++) buffs[l] = pbuff + l*swid;
 560   for (l = 0; l < (n + 1); l++) buffs[l + (n + 1)] = buffs[l];
 561   buffd = buffs[n] + swid;
 562   buffi = (mlib_s32*)(buffd + swid);
 563 
 564   chan1 = nchannel;
 565   chan2 = chan1 + chan1;
 566 
 567   swid -= (dx_l + dx_r);
 568 
 569   for (c = 0; c < nchannel; c++) {
 570     if (!(cmask & (1 << (chan1 - 1 - c)))) continue;
 571 
 572     sl = adr_src + c;
 573     dl = adr_dst + c;
 574 


 939 
 940       for (; i < swid; i++) {
 941         buffn[i + dx_l] = (FTYPE)sp[0];
 942         sp += chan1;
 943       }
 944 
 945       for (i = 0; i < dx_l; i++) buffn[i] = buffn[dx_l];
 946       for (i = 0; i < dx_r; i++) buffn[swid + dx_l + i] = buffn[swid + dx_l - 1];
 947 
 948       /* next line */
 949 
 950       if (j < hgt - dy_b - 2) sl += sll;
 951       dl += dll;
 952 
 953       buff_ind++;
 954 
 955       if (buff_ind >= n + 1) buff_ind = 0;
 956     }
 957   }
 958 
 959   FREE_AND_RETURN_STATUS;
 960 }
 961 
 962 /***************************************************************/
 963 #ifndef __sparc /* for x86, using integer multiplies is faster */
 964 
 965 #define STORE_RES(res, x)                                       \
 966   x >>= shift2;                                                 \
 967   CLAMP_STORE(res, x)
 968 
 969 mlib_status CONV_FUNC_MxN_I
 970 {
 971   DTYPE    *adr_src, *sl, *sp = NULL;
 972   DTYPE    *adr_dst, *dl, *dp = NULL;
 973   mlib_s32 buff[BUFF_SIZE], *buffs_arr[2*(MAX_N + 1)];
 974   mlib_s32 *pbuff = buff;
 975   mlib_s32 **buffs = buffs_arr, *buffd;
 976   mlib_s32 l, off, kw, bsize, buff_ind;
 977   mlib_s32 d0, d1, shift1, shift2;
 978   mlib_s32 k0, k1, k2, k3, k4, k5, k6;
 979   mlib_s32 p0, p1, p2, p3, p4, p5, p6, p7;




 522     fscale *= 1.0/(1 << 30);
 523     scale -= 30;
 524   }
 525 
 526   fscale /= (1 << scale);
 527 
 528   mn = m*n;
 529 
 530   if (mn > 256) {
 531     k = mlib_malloc(mn*sizeof(mlib_d64));
 532 
 533     if (k == NULL) return MLIB_FAILURE;
 534   }
 535 
 536   for (i = 0; i < mn; i++) {
 537     k[i] = kernel[i]*fscale;
 538   }
 539 
 540   if (m == 1) {
 541     status = mlib_ImageConv1xN_ext(dst, src, k, n, dy_t, dy_b, cmask);
 542     FREE_AND_RETURN_STATUS
 543   }
 544 
 545   swid = wid + (m - 1);
 546 
 547   bsize = (n + 3)*swid;
 548 
 549   if ((bsize > BUFF_SIZE) || (n > MAX_N)) {
 550     pbuff = mlib_malloc(sizeof(FTYPE)*bsize + sizeof(FTYPE *)*2*(n + 1));
 551 
 552     if (pbuff == NULL) {
 553       status = MLIB_FAILURE;
 554       FREE_AND_RETURN_STATUS
 555     }
 556     buffs = (FTYPE   **)(pbuff + bsize);
 557   }
 558 
 559   for (l = 0; l < (n + 1); l++) buffs[l] = pbuff + l*swid;
 560   for (l = 0; l < (n + 1); l++) buffs[l + (n + 1)] = buffs[l];
 561   buffd = buffs[n] + swid;
 562   buffi = (mlib_s32*)(buffd + swid);
 563 
 564   chan1 = nchannel;
 565   chan2 = chan1 + chan1;
 566 
 567   swid -= (dx_l + dx_r);
 568 
 569   for (c = 0; c < nchannel; c++) {
 570     if (!(cmask & (1 << (chan1 - 1 - c)))) continue;
 571 
 572     sl = adr_src + c;
 573     dl = adr_dst + c;
 574 


 939 
 940       for (; i < swid; i++) {
 941         buffn[i + dx_l] = (FTYPE)sp[0];
 942         sp += chan1;
 943       }
 944 
 945       for (i = 0; i < dx_l; i++) buffn[i] = buffn[dx_l];
 946       for (i = 0; i < dx_r; i++) buffn[swid + dx_l + i] = buffn[swid + dx_l - 1];
 947 
 948       /* next line */
 949 
 950       if (j < hgt - dy_b - 2) sl += sll;
 951       dl += dll;
 952 
 953       buff_ind++;
 954 
 955       if (buff_ind >= n + 1) buff_ind = 0;
 956     }
 957   }
 958 
 959   FREE_AND_RETURN_STATUS
 960 }
 961 
 962 /***************************************************************/
 963 #ifndef __sparc /* for x86, using integer multiplies is faster */
 964 
 965 #define STORE_RES(res, x)                                       \
 966   x >>= shift2;                                                 \
 967   CLAMP_STORE(res, x)
 968 
 969 mlib_status CONV_FUNC_MxN_I
 970 {
 971   DTYPE    *adr_src, *sl, *sp = NULL;
 972   DTYPE    *adr_dst, *dl, *dp = NULL;
 973   mlib_s32 buff[BUFF_SIZE], *buffs_arr[2*(MAX_N + 1)];
 974   mlib_s32 *pbuff = buff;
 975   mlib_s32 **buffs = buffs_arr, *buffd;
 976   mlib_s32 l, off, kw, bsize, buff_ind;
 977   mlib_s32 d0, d1, shift1, shift2;
 978   mlib_s32 k0, k1, k2, k3, k4, k5, k6;
 979   mlib_s32 p0, p1, p2, p3, p4, p5, p6, p7;


< prev index next >