/* // block of defines matching what RS will insert at runtime. struct Params_s{ int inHeight; int inWidth; int outHeight; int outWidth; float threshold; }; struct Params_s * Params; struct InPixel_s{ char a; char b; char g; char r; }; struct InPixel_s * InPixel; struct OutPixel_s{ char a; char b; char g; char r; }; struct OutPixel_s * OutPixel; */ struct color_s { char b; char g; char r; char a; }; void main() { int t = uptimeMillis(); struct color_s *in = (struct color_s *) InPixel; struct color_s *out = (struct color_s *) OutPixel; int count = Params->inWidth * Params->inHeight; int i; float threshold = (Params->threshold * 255.f); for (i = 0; i < count; i++) { float luminance = 0.2125f * in->r + 0.7154f * in->g + 0.0721f * in->b; if (luminance > threshold) { *out = *in; } else { *((int *)out) = *((int *)in) & 0xff000000; } in++; out++; } t= uptimeMillis() - t; debugI32("Filter time", t); sendToClient(&count, 1, 4, 0); }