blob: 888f0cdb029ee673f72c3b03d515e197fd4922b2 [file] [log] [blame]
/*
// 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);
}