63 lines
1.2 KiB
Rust
63 lines
1.2 KiB
Rust
|
/*
|
||
|
// 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);
|
||
|
}
|