in layer1/Ray.cpp [4631:5522]
int RayAntiThread(CRayAntiThreadInfo * T)
{
int src_row_pixels;
unsigned int *pSrc;
unsigned int *pDst;
/* unsigned int m00FF=0x00FF,mFF00=0xFF00,mFFFF=0xFFFF; */
int width;
int height;
int x, y, yy;
unsigned int *p;
int offset = 0;
CRay *I = T->ray;
OrthoBusyFast(I->G, 9, 10);
width = (T->width / T->mag) - 2;
height = (T->height / T->mag) - 2;
src_row_pixels = T->width;
offset = (T->phase * height) / T->n_thread;
offset = offset - (offset % T->n_thread) + T->phase;
for(yy = 0; yy < height; yy++) {
y = (yy + offset) % height; /* make sure threads write to different pages */
if((y % T->n_thread) == T->phase) { /* this is my scan line */
unsigned long c1, c2, c3, c4, a;
unsigned char *c;
pSrc = T->image + src_row_pixels * (y * T->mag);
pDst = T->image_copy + width * y;
switch (T->mag) {
case 2:
{
for(x = 0; x < width; x++) {
c = (unsigned char *) (p = pSrc + (x * T->mag));
c1 = c2 = c3 = c4 = a = 0;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c = (unsigned char *) (p += src_row_pixels);
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3] * 13);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3] * 13);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c = (unsigned char *) (p += src_row_pixels);
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3] * 13);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3] * 13);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c = (unsigned char *) (p += src_row_pixels);
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
if(c4) {
c1 /= c4;
c2 /= c4;
c3 /= c4;
} else { /* compute straight RGB average */
c = (unsigned char *) (p = pSrc + (x * T->mag));
c1 = c2 = c3 = 0;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c = (unsigned char *) (p += src_row_pixels);
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += 13 * c[0];
c2 += 13 * c[1];
c3 += 13 * c[2];
c += 4;
c1 += 13 * c[0];
c2 += 13 * c[1];
c3 += 13 * c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c = (unsigned char *) (p += src_row_pixels);
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += 13 * c[0];
c2 += 13 * c[1];
c3 += 13 * c[2];
c += 4;
c1 += 13 * c[0];
c2 += 13 * c[1];
c3 += 13 * c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c = (unsigned char *) (p += src_row_pixels);
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 = c1 >> 6;
c2 = c2 >> 6;
c3 = c3 >> 6;
}
c = (unsigned char *) (pDst++);
*(c++) = (unsigned char) c1;
*(c++) = (unsigned char) c2;
*(c++) = (unsigned char) c3;
*(c++) = (unsigned char) (c4 >> 6);
}
}
break;
case 3:
{
for(x = 0; x < width; x++) {
c = (unsigned char *) (p = pSrc + (x * T->mag));
c1 = c2 = c3 = c4 = a = 0;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c = (unsigned char *) (p += src_row_pixels);
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3] * 5);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3] * 5);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3] * 5);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c = (unsigned char *) (p += src_row_pixels);
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3] * 5);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3] * 8);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3] * 5);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c = (unsigned char *) (p += src_row_pixels);
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3] * 5);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3] * 5);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3] * 5);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c = (unsigned char *) (p += src_row_pixels);
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
if(c4) {
c1 /= c4;
c2 /= c4;
c3 /= c4;
} else { /* compute straight RGB average */
c = (unsigned char *) (p = pSrc + (x * T->mag));
c1 = c2 = c3 = 0;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c = (unsigned char *) (p += src_row_pixels);
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += 5 * c[0];
c2 += 5 * c[1];
c3 += 5 * c[2];
c += 4;
c1 += 5 * c[0];
c2 += 5 * c[1];
c3 += 5 * c[2];
c += 4;
c1 += 5 * c[0];
c2 += 5 * c[1];
c3 += 5 * c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c = (unsigned char *) (p += src_row_pixels);
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += 5 * c[0];
c2 += 5 * c[1];
c3 += 5 * c[2];
c += 4;
c1 += 8 * c[0];
c2 += 8 * c[1];
c3 += 8 * c[2];
c += 4;
c1 += 5 * c[0];
c2 += 5 * c[1];
c3 += 5 * c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c = (unsigned char *) (p += src_row_pixels);
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += 5 * c[0];
c2 += 5 * c[1];
c3 += 5 * c[2];
c += 4;
c1 += 5 * c[0];
c2 += 5 * c[1];
c3 += 5 * c[2];
c += 4;
c1 += 5 * c[0];
c2 += 5 * c[1];
c3 += 5 * c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c = (unsigned char *) (p += src_row_pixels);
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 = c1 >> 6;
c2 = c2 >> 6;
c3 = c3 >> 6;
}
c = (unsigned char *) (pDst++);
*(c++) = (unsigned char) c1;
*(c++) = (unsigned char) c2;
*(c++) = (unsigned char) c3;
*(c++) = (unsigned char) (c4 >> 6);
}
}
break;
case 4:
{
for(x = 0; x < width; x++) {
c = (unsigned char *) (p = pSrc + (x * T->mag));
c1 = c2 = c3 = c4 = a = 0;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c = (unsigned char *) (p += src_row_pixels);
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3] * 5);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3] * 7);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3] * 7);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3] * 5);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c = (unsigned char *) (p += src_row_pixels);
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3] * 7);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3] * 8);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3] * 8);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3] * 7);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c = (unsigned char *) (p += src_row_pixels);
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3] * 7);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3] * 8);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3] * 8);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3] * 7);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c = (unsigned char *) (p += src_row_pixels);
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3] * 5);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3] * 7);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3] * 7);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3] * 5);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c = (unsigned char *) (p += src_row_pixels);
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
c4 += (a = c[3]);
c1 += c[0] * a;
c2 += c[1] * a;
c3 += c[2] * a;
c += 4;
if(c4) {
c1 /= c4;
c2 /= c4;
c3 /= c4;
} else { /* compute straight RGB average */
c = (unsigned char *) (p = pSrc + (x * T->mag));
c1 = c2 = c3 = 0;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c = (unsigned char *) (p += src_row_pixels);
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += 5 * c[0];
c2 += 5 * c[1];
c3 += 5 * c[2];
c += 4;
c1 += 7 * c[0];
c2 += 7 * c[1];
c3 += 7 * c[2];
c += 4;
c1 += 7 * c[0];
c2 += 7 * c[1];
c3 += 7 * c[2];
c += 4;
c1 += 5 * c[0];
c2 += 5 * c[1];
c3 += 5 * c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c = (unsigned char *) (p += src_row_pixels);
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += 7 * c[0];
c2 += 7 * c[1];
c3 += 7 * c[2];
c += 4;
c1 += 8 * c[0];
c2 += 8 * c[1];
c3 += 8 * c[2];
c += 4;
c1 += 8 * c[0];
c2 += 8 * c[1];
c3 += 8 * c[2];
c += 4;
c1 += 7 * c[0];
c2 += 7 * c[1];
c3 += 7 * c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c = (unsigned char *) (p += src_row_pixels);
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += 7 * c[0];
c2 += 7 * c[1];
c3 += 7 * c[2];
c += 4;
c1 += 8 * c[0];
c2 += 8 * c[1];
c3 += 8 * c[2];
c += 4;
c1 += 8 * c[0];
c2 += 8 * c[1];
c3 += 8 * c[2];
c += 4;
c1 += 7 * c[0];
c2 += 7 * c[1];
c3 += 7 * c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c = (unsigned char *) (p += src_row_pixels);
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += 5 * c[0];
c2 += 5 * c[1];
c3 += 5 * c[2];
c += 4;
c1 += 7 * c[0];
c2 += 7 * c[1];
c3 += 7 * c[2];
c += 4;
c1 += 7 * c[0];
c2 += 7 * c[1];
c3 += 7 * c[2];
c += 4;
c1 += 5 * c[0];
c2 += 5 * c[1];
c3 += 5 * c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c = (unsigned char *) (p += src_row_pixels);
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 += c[0];
c2 += c[1];
c3 += c[2];
c += 4;
c1 = c1 >> 7;
c2 = c2 >> 7;
c3 = c3 >> 7;
}
c = (unsigned char *) (pDst++);
*(c++) = (unsigned char) c1;
*(c++) = (unsigned char) c2;
*(c++) = (unsigned char) c3;
*(c++) = (unsigned char) (c4 >> 7);
}
}
break;
}
}
}
return 1;
}