Loading libs/rs/java/ImageProcessing/src/com/android/rs/image/horizontal_blur.rs +32 −19 Original line number Diff line number Diff line Loading @@ -7,9 +7,21 @@ void root(const void *v_in, void *v_out, const void *usrData, uint32_t x, uint32 const FilterStruct *fs = (const FilterStruct *)usrData; const uchar4 *input = (const uchar4 *)rsGetElementAt(fs->ain, 0, y); float4 blurredPixel = 0; float4 currentPixel = 0; float3 blurredPixel = 0; float3 currentPixel = 0; const float *gPtr = fs->gaussian; if ((x > fs->radius) && (x < (fs->width - fs->radius))) { const uchar4 *i = input + (x - fs->radius); for(int r = -fs->radius; r <= fs->radius; r ++) { currentPixel.x = (float)(i->x); currentPixel.y = (float)(i->y); currentPixel.z = (float)(i->z); blurredPixel += currentPixel * gPtr[0]; gPtr++; i++; } } else { for(int r = -fs->radius; r <= fs->radius; r ++) { // Stepping left and right away from the pixel int validW = x + r; Loading @@ -22,16 +34,17 @@ void root(const void *v_in, void *v_out, const void *usrData, uint32_t x, uint32 } //int validW = rsClamp(w + r, 0, width - 1); float weight = fs->gaussian[r + fs->radius]; currentPixel.x = (float)(input[validW].x); currentPixel.y = (float)(input[validW].y); currentPixel.z = (float)(input[validW].z); //currentPixel.w = (float)(input->a); blurredPixel += currentPixel * weight; blurredPixel += currentPixel * gPtr[0]; gPtr++; } } output->x = (uint8_t)blurredPixel.x; output->y = (uint8_t)blurredPixel.y; output->z = (uint8_t)blurredPixel.z; } libs/rs/java/ImageProcessing/src/com/android/rs/image/levels.rs +5 −4 Original line number Diff line number Diff line Loading @@ -64,17 +64,18 @@ void root(const void *v_in, void *v_out, const void *usrData, uint32_t x, uint32 const uchar4 *input = v_in; uchar4 *output = v_out; float4 currentPixel = 0; float3 currentPixel = 0; //currentPixel.xyz = convert_float3(input.xyz); currentPixel.x = (float)(input->x); currentPixel.y = (float)(input->y); currentPixel.z = (float)(input->z); float3 temp = rsMatrixMultiply(&colorMat, currentPixel.xyz); float3 temp = rsMatrixMultiply(&colorMat, currentPixel); temp = (clamp(temp, 0.f, 255.f) - inBlack) * overInWMinInB; if (gamma.x != 1.0f) temp = pow(temp, (float3)gamma); currentPixel.xyz = clamp(temp * outWMinOutB + outBlack, 0.f, 255.f); currentPixel = clamp(temp * outWMinOutB + outBlack, 0.f, 255.f); //output.xyz = convert_uchar3(currentPixel.xyz); output->x = (uint8_t)currentPixel.x; Loading libs/rs/java/ImageProcessing/src/com/android/rs/image/vertical_blur.rs +40 −27 Original line number Diff line number Diff line Loading @@ -7,8 +7,21 @@ void root(const void *v_in, void *v_out, const void *usrData, uint32_t x, uint32 const FilterStruct *fs = (const FilterStruct *)usrData; const uchar4 *input = (const uchar4 *)rsGetElementAt(fs->ain, x, 0); float4 blurredPixel = 0; float4 currentPixel = 0; float3 blurredPixel = 0; float3 currentPixel = 0; const float *gPtr = fs->gaussian; if ((y > fs->radius) && (y < (fs->height - fs->radius))) { const uchar4 *i = input + ((y - fs->radius) * fs->width); for(int r = -fs->radius; r <= fs->radius; r ++) { currentPixel.x = (float)(i->x); currentPixel.y = (float)(i->y); currentPixel.z = (float)(i->z); blurredPixel += currentPixel * gPtr[0]; gPtr++; i += fs->width; } } else { for(int r = -fs->radius; r <= fs->radius; r ++) { #if 1 int validH = y + r; Loading @@ -23,20 +36,20 @@ void root(const void *v_in, void *v_out, const void *usrData, uint32_t x, uint32 const uchar4 *i = input + validH * fs->width; //const uchar4 *i = (const uchar4 *)rsGetElementAt(fs->ain, x, validH); float weight = fs->gaussian[r + fs->radius]; currentPixel.x = (float)(i->x); currentPixel.y = (float)(i->y); currentPixel.z = (float)(i->z); blurredPixel.xyz += currentPixel.xyz * weight; blurredPixel += currentPixel * gPtr[0]; gPtr++; #else int validH = rsClamp(y + r, 0, height - 1); validH -= y; uchar4 *i = input + validH * width + x; blurredPixel.xyz += convert_float3(i->xyz) * gaussian[r + fs->radius]; blurredPixel.xyz += convert_float3(i->xyz) * gPtr[0]; gPtr++; #endif } } //output->xyz = convert_uchar3(blurredPixel.xyz); output->x = (uint8_t)blurredPixel.x; Loading Loading
libs/rs/java/ImageProcessing/src/com/android/rs/image/horizontal_blur.rs +32 −19 Original line number Diff line number Diff line Loading @@ -7,9 +7,21 @@ void root(const void *v_in, void *v_out, const void *usrData, uint32_t x, uint32 const FilterStruct *fs = (const FilterStruct *)usrData; const uchar4 *input = (const uchar4 *)rsGetElementAt(fs->ain, 0, y); float4 blurredPixel = 0; float4 currentPixel = 0; float3 blurredPixel = 0; float3 currentPixel = 0; const float *gPtr = fs->gaussian; if ((x > fs->radius) && (x < (fs->width - fs->radius))) { const uchar4 *i = input + (x - fs->radius); for(int r = -fs->radius; r <= fs->radius; r ++) { currentPixel.x = (float)(i->x); currentPixel.y = (float)(i->y); currentPixel.z = (float)(i->z); blurredPixel += currentPixel * gPtr[0]; gPtr++; i++; } } else { for(int r = -fs->radius; r <= fs->radius; r ++) { // Stepping left and right away from the pixel int validW = x + r; Loading @@ -22,16 +34,17 @@ void root(const void *v_in, void *v_out, const void *usrData, uint32_t x, uint32 } //int validW = rsClamp(w + r, 0, width - 1); float weight = fs->gaussian[r + fs->radius]; currentPixel.x = (float)(input[validW].x); currentPixel.y = (float)(input[validW].y); currentPixel.z = (float)(input[validW].z); //currentPixel.w = (float)(input->a); blurredPixel += currentPixel * weight; blurredPixel += currentPixel * gPtr[0]; gPtr++; } } output->x = (uint8_t)blurredPixel.x; output->y = (uint8_t)blurredPixel.y; output->z = (uint8_t)blurredPixel.z; }
libs/rs/java/ImageProcessing/src/com/android/rs/image/levels.rs +5 −4 Original line number Diff line number Diff line Loading @@ -64,17 +64,18 @@ void root(const void *v_in, void *v_out, const void *usrData, uint32_t x, uint32 const uchar4 *input = v_in; uchar4 *output = v_out; float4 currentPixel = 0; float3 currentPixel = 0; //currentPixel.xyz = convert_float3(input.xyz); currentPixel.x = (float)(input->x); currentPixel.y = (float)(input->y); currentPixel.z = (float)(input->z); float3 temp = rsMatrixMultiply(&colorMat, currentPixel.xyz); float3 temp = rsMatrixMultiply(&colorMat, currentPixel); temp = (clamp(temp, 0.f, 255.f) - inBlack) * overInWMinInB; if (gamma.x != 1.0f) temp = pow(temp, (float3)gamma); currentPixel.xyz = clamp(temp * outWMinOutB + outBlack, 0.f, 255.f); currentPixel = clamp(temp * outWMinOutB + outBlack, 0.f, 255.f); //output.xyz = convert_uchar3(currentPixel.xyz); output->x = (uint8_t)currentPixel.x; Loading
libs/rs/java/ImageProcessing/src/com/android/rs/image/vertical_blur.rs +40 −27 Original line number Diff line number Diff line Loading @@ -7,8 +7,21 @@ void root(const void *v_in, void *v_out, const void *usrData, uint32_t x, uint32 const FilterStruct *fs = (const FilterStruct *)usrData; const uchar4 *input = (const uchar4 *)rsGetElementAt(fs->ain, x, 0); float4 blurredPixel = 0; float4 currentPixel = 0; float3 blurredPixel = 0; float3 currentPixel = 0; const float *gPtr = fs->gaussian; if ((y > fs->radius) && (y < (fs->height - fs->radius))) { const uchar4 *i = input + ((y - fs->radius) * fs->width); for(int r = -fs->radius; r <= fs->radius; r ++) { currentPixel.x = (float)(i->x); currentPixel.y = (float)(i->y); currentPixel.z = (float)(i->z); blurredPixel += currentPixel * gPtr[0]; gPtr++; i += fs->width; } } else { for(int r = -fs->radius; r <= fs->radius; r ++) { #if 1 int validH = y + r; Loading @@ -23,20 +36,20 @@ void root(const void *v_in, void *v_out, const void *usrData, uint32_t x, uint32 const uchar4 *i = input + validH * fs->width; //const uchar4 *i = (const uchar4 *)rsGetElementAt(fs->ain, x, validH); float weight = fs->gaussian[r + fs->radius]; currentPixel.x = (float)(i->x); currentPixel.y = (float)(i->y); currentPixel.z = (float)(i->z); blurredPixel.xyz += currentPixel.xyz * weight; blurredPixel += currentPixel * gPtr[0]; gPtr++; #else int validH = rsClamp(y + r, 0, height - 1); validH -= y; uchar4 *i = input + validH * width + x; blurredPixel.xyz += convert_float3(i->xyz) * gaussian[r + fs->radius]; blurredPixel.xyz += convert_float3(i->xyz) * gPtr[0]; gPtr++; #endif } } //output->xyz = convert_uchar3(blurredPixel.xyz); output->x = (uint8_t)blurredPixel.x; Loading