#include "rs_debug.rsh"
#pragma version(1)
#pragma rs java_package_name(com.android.rs)
#pragma rs_fp_relaxed
int32_t gWidth;
int32_t gHeight;
rs_allocation gIn;
float gCoeffsY[9]={-1.f, 0.f, 1.f, -2.f, 0.f, 2.f, -1.f, 0.f, 1.f};
float gCoeffsX[9]={1.f, 2.f, 1.f,0.f, 0.f, 0.f, -1.f, -2.f, -1.f};
const static float3 gMonoMult = {0.299f, 0.587f, 0.114f};
void root(uchar4 *out, uint32_t x, uint32_t y) {
uint32_t x1 = min((int32_t)x+1, gWidth);
uint32_t x2 = max((int32_t)x-1, 0);
uint32_t y1 = min((int32_t)y+1, gHeight);
uint32_t y2 = max((int32_t)y-1, 0);
float4 p00 = convert_float4(((uchar4 *)rsGetElementAt(gIn, x1, y1))[0]);
float4 p01 = convert_float4(((uchar4 *)rsGetElementAt(gIn, x, y1))[0]);
float4 p02 = convert_float4(((uchar4 *)rsGetElementAt(gIn, x2, y1))[0]);
float4 p10 = convert_float4(((uchar4 *)rsGetElementAt(gIn, x1, y))[0]);
float4 p11 = convert_float4(((uchar4 *)rsGetElementAt(gIn, x, y))[0]);
float4 p12 = convert_float4(((uchar4 *)rsGetElementAt(gIn, x2, y))[0]);
float4 p20 = convert_float4(((uchar4 *)rsGetElementAt(gIn, x1, y2))[0]);
float4 p21 = convert_float4(((uchar4 *)rsGetElementAt(gIn, x, y2))[0]);
float4 p22 = convert_float4(((uchar4 *)rsGetElementAt(gIn, x2, y2))[0]);
/* p00 *= gCoeffsX[0];
p01 *= gCoeffsX[1];
p02 *= gCoeffsX[2];
p10 *= gCoeffsX[3];
p11 *= gCoeffsX[4];
p12 *= gCoeffsX[5];
p20 *= gCoeffsX[6];
p21 *= gCoeffsX[7];
p22 *= gCoeffsX[8];
p00 += p01;
p02 += p10;
p11 += p12;
p20 += p21;
p22 += p00;
p02 += p11;
p20 += p22;
p20 += p02;
p20 = clamp(p20, 0.f, 255.f);
*out = convert_uchar4(p20);*/
//for X
float4 p00X = p00*gCoeffsX[0];
float4 p01X = p01*gCoeffsX[1];
float4 p02X = p02*gCoeffsX[2];
float4 p10X = p10*gCoeffsX[3];
float4 p11X = p11*gCoeffsX[4];
float4 p12X = p12*gCoeffsX[5];
float4 p20X = p20*gCoeffsX[6];
float4 p21X = p21*gCoeffsX[7];
float4 p22X = p22*gCoeffsX[8];
p00X += p01X;
p02X += p10X;
p11X += p12X;
p20X += p21X;
p22X += p00X;
p02X += p11X;
p20X += p22X;
p20X += p02X;
p20X = clamp(p20X, 0.f, 255.f);
//for Y
float4 p00Y = p00*gCoeffsY[0];
float4 p01Y = p01*gCoeffsY[1];
float4 p02Y = p02*gCoeffsY[2];
float4 p10Y = p10*gCoeffsY[3];
float4 p11Y = p11*gCoeffsY[4];
float4 p12Y = p12*gCoeffsY[5];
float4 p20Y = p20*gCoeffsY[6];
float4 p21Y = p21*gCoeffsY[7];
float4 p22Y = p22*gCoeffsY[8];
p00Y += p01Y;
p02Y += p10Y;
p11Y += p12Y;
p20Y += p21Y;
p22Y += p00Y;
p02Y += p11Y;
p20Y += p22Y;
p20Y += p02Y;
p20Y = clamp(p20Y, 0.f, 255.f);
float4 finalValue=sqrt(p20X*p20X+p20Y*p20Y);
/*float3 pixel = finalValue.rgb;
finalValue.rgb.r-=10;
finalValue.rgb.g-=10;
finalValue.rgb.b-=10;
finalValue.w=255.f;
rsDebug("call times:", pixel.r,pixel.g,pixel.b);*/
//阀值判断,有点草率
/*if((finalValue.rgb.r+finalValue.rgb.g+finalValue.rgb.b)<90){
finalValue.rgb.r=0;
finalValue.rgb.g=0;
finalValue.rgb.b=0;
}*/
*out = convert_uchar4(finalValue);
}