// http://www.cs.rit.edu/~ncs/color/t_convert.html void rgb_to_hsv(image im) { assert(im.c == 3); int i, j; float r, g, b; float h, s, v; for(j = 0; j < im.h; ++j){ for(i = 0; i < im.w; ++i){ r = get_pixel(im, i , j, 0); g = get_pixel(im, i , j, 1); b = get_pixel(im, i , j, 2); float max = three_way_max(r,g,b); float min = three_way_min(r,g,b); float delta = max - min; v = max; if(max == 0){ s = 0; h = -1; }else{ s = delta/max; if(r == max){ h = (g - b) / delta; } else if (g == max) { h = 2 + (b - r) / delta; } else { h = 4 + (r - g) / delta; } if (h < 0) h += 6; } set_pixel(im, i, j, 0, h); set_pixel(im, i, j, 1, s); set_pixel(im, i, j, 2, v); } } }
int strncmp_ea (__ea void *s1, __ea const void *s2, size_ea_t n3) { __ea void *curr_s1 = (__ea void *) s1; __ea void *curr_s2 = (__ea void *) s2; void *l_s1; void *l_s2; int min; size_ea_t s2_n; size_ea_t s1_n; int ret; vec_uint4 end_v; ret = 0; /* in case n3 is 0 */ while (n3) { l_s2 = __cache_fetch (curr_s2); l_s1 = __cache_fetch (curr_s1); /* * Use the smaller of the size left to compare (n3), the space left in * s2 cacheline (s2_n), or the space left in the s1 cacheline (s1_n) */ s2_n = ROUND_UP_NEXT_128 ((size_ea_t) curr_s2) - (size_ea_t) curr_s2; s1_n = ROUND_UP_NEXT_128 ((size_ea_t) curr_s1) - (size_ea_t) curr_s1; min = three_way_min (s2_n, s1_n, n3); ret = _strncmp_internal (l_s1, l_s2, min, &end_v, 1); /* * Only the first slot of end_v is set. */ /* if (ret || spu_extract(spu_cmpeq(end_v, 0), 0)) { */ /* if (ret || spu_extract(spu_gather(spu_cmpeq(end_v, 0)), 0)) { */ if (ret || spu_extract (end_v, 0)) /* * If any NUL values were seen (end_v values of zero) we still have * to return ret, as it might not be zero. */ return ret; curr_s2 += min; curr_s1 += min; n3 -= min; } return ret; }