static int draw(RGB32 *src, RGB32 *dest) { int x, y; unsigned char *p, *q, v; unsigned char sum, sum1, sum2, sum3; int width; RGB32 pix; width = video_width; p = image_diff_filter(image_bgsubtract_update_y(src)); for(x=0; x<video_area; x++) { field1[x] |= p[x]; } p = field1 + 1; q = field2 + width + 1; dest += width + 1; src += width + 1; /* each value of cell is 0 or 0xff. 0xff can be treated as -1, so * following equations treat each value as negative number. */ for(y=1; y<video_height-1; y++) { sum1 = 0; sum2 = p[0] + p[width] + p[width*2]; for(x=1; x<width-1; x++) { sum3 = p[1] + p[width+1] + p[width*2+1]; sum = sum1 + sum2 + sum3; v = 0 - ((sum==0xfd)|((p[width]!=0)&(sum==0xfc))); *q++ = v; pix = (signed char)v; // pix = pix >> 8; *dest++ = pix | *src++; sum1 = sum2; sum2 = sum3; p++; } p += 2; q += 2; src += 2; dest += 2; } p = field1; field1 = field2; field2 = p; return 0; }
static int draw(RGB32 *src, RGB32 *dest) { int x, y; unsigned char *diff; if(!bgIsSet) { setBackground(src); } diff = image_diff_filter(image_bgsubtract_y(src)); for(y=video_height; y>0; y--) { for(x=video_width; x>0; x--) { if(*diff++) { *dest = 0 - ((inline_fastrand()>>31) & y); } else { *dest = *src; } src++; dest++; }