1884 mlib_s32 nchannel, chan1, chan2; |
1884 mlib_s32 nchannel, chan1, chan2; |
1885 mlib_s32 i, j, c, swid; |
1885 mlib_s32 i, j, c, swid; |
1886 d64_2x32 dd; |
1886 d64_2x32 dd; |
1887 GET_SRC_DST_PARAMETERS(DTYPE); |
1887 GET_SRC_DST_PARAMETERS(DTYPE); |
1888 |
1888 |
|
1889 mlib_status status = MLIB_SUCCESS; |
|
1890 |
1889 if (scale > 30) { |
1891 if (scale > 30) { |
1890 fscale *= 1.0/(1 << 30); |
1892 fscale *= 1.0/(1 << 30); |
1891 scale -= 30; |
1893 scale -= 30; |
1892 } |
1894 } |
1893 |
1895 |
1903 |
1905 |
1904 for (i = 0; i < mn; i++) { |
1906 for (i = 0; i < mn; i++) { |
1905 k[i] = kernel[i]*fscale; |
1907 k[i] = kernel[i]*fscale; |
1906 } |
1908 } |
1907 |
1909 |
1908 if (m == 1) return mlib_ImageConv1xN_ext(dst, src, k, n, dy_t, dy_b, cmask); |
1910 if (m == 1) { |
|
1911 status = mlib_ImageConv1xN_ext(dst, src, k, n, dy_t, dy_b, cmask); |
|
1912 FREE_AND_RETURN_STATUS; |
|
1913 } |
1909 |
1914 |
1910 swid = wid + (m - 1); |
1915 swid = wid + (m - 1); |
1911 |
1916 |
1912 bsize = (n + 3)*swid; |
1917 bsize = (n + 3)*swid; |
1913 |
1918 |
1914 if ((bsize > BUFF_SIZE) || (n > MAX_N)) { |
1919 if ((bsize > BUFF_SIZE) || (n > MAX_N)) { |
1915 pbuff = mlib_malloc(sizeof(FTYPE)*bsize + sizeof(FTYPE *)*2*(n + 1)); |
1920 pbuff = mlib_malloc(sizeof(FTYPE)*bsize + sizeof(FTYPE *)*2*(n + 1)); |
1916 |
1921 |
1917 if (pbuff == NULL) return MLIB_FAILURE; |
1922 if (pbuff == NULL) { |
|
1923 status = MLIB_FAILURE; |
|
1924 FREE_AND_RETURN_STATUS; |
|
1925 } |
1918 buffs = (FTYPE **)(pbuff + bsize); |
1926 buffs = (FTYPE **)(pbuff + bsize); |
1919 } |
1927 } |
1920 |
1928 |
1921 for (l = 0; l < (n + 1); l++) buffs[l] = pbuff + l*swid; |
1929 for (l = 0; l < (n + 1); l++) buffs[l] = pbuff + l*swid; |
1922 for (l = 0; l < (n + 1); l++) buffs[l + (n + 1)] = buffs[l]; |
1930 for (l = 0; l < (n + 1); l++) buffs[l + (n + 1)] = buffs[l]; |
2316 |
2324 |
2317 if (buff_ind >= n + 1) buff_ind = 0; |
2325 if (buff_ind >= n + 1) buff_ind = 0; |
2318 } |
2326 } |
2319 } |
2327 } |
2320 |
2328 |
2321 if (pbuff != buff) mlib_free(pbuff); |
2329 FREE_AND_RETURN_STATUS; |
2322 |
|
2323 return MLIB_SUCCESS; |
|
2324 } |
2330 } |
2325 |
2331 |
2326 /***************************************************************/ |
2332 /***************************************************************/ |
2327 #ifndef __sparc /* for x86, using integer multiplies is faster */ |
2333 #ifndef __sparc /* for x86, using integer multiplies is faster */ |
2328 |
2334 |