15448bf8095483574649afcc2add7f153670c7450nicolasroard/* 25448bf8095483574649afcc2add7f153670c7450nicolasroard * Copyright (C) 2012 The Android Open Source Project 35448bf8095483574649afcc2add7f153670c7450nicolasroard * 45448bf8095483574649afcc2add7f153670c7450nicolasroard * Licensed under the Apache License, Version 2.0 (the "License"); 55448bf8095483574649afcc2add7f153670c7450nicolasroard * you may not use this file except in compliance with the License. 65448bf8095483574649afcc2add7f153670c7450nicolasroard * You may obtain a copy of the License at 75448bf8095483574649afcc2add7f153670c7450nicolasroard * 85448bf8095483574649afcc2add7f153670c7450nicolasroard * http://www.apache.org/licenses/LICENSE-2.0 95448bf8095483574649afcc2add7f153670c7450nicolasroard * 105448bf8095483574649afcc2add7f153670c7450nicolasroard * Unless required by applicable law or agreed to in writing, software 115448bf8095483574649afcc2add7f153670c7450nicolasroard * distributed under the License is distributed on an "AS IS" BASIS, 125448bf8095483574649afcc2add7f153670c7450nicolasroard * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135448bf8095483574649afcc2add7f153670c7450nicolasroard * See the License for the specific language governing permissions and 145448bf8095483574649afcc2add7f153670c7450nicolasroard * limitations under the License. 155448bf8095483574649afcc2add7f153670c7450nicolasroard */ 165448bf8095483574649afcc2add7f153670c7450nicolasroard 175448bf8095483574649afcc2add7f153670c7450nicolasroard#pragma version(1) 185448bf8095483574649afcc2add7f153670c7450nicolasroard#pragma rs java_package_name(com.android.gallery3d.filtershow.filters) 195448bf8095483574649afcc2add7f153670c7450nicolasroard#pragma rs_fp_relaxed 205448bf8095483574649afcc2add7f153670c7450nicolasroard 215448bf8095483574649afcc2add7f153670c7450nicolasroardint32_t gWidth; 225448bf8095483574649afcc2add7f153670c7450nicolasroardint32_t gHeight; 235448bf8095483574649afcc2add7f153670c7450nicolasroardconst uchar4 *gPixels; 245448bf8095483574649afcc2add7f153670c7450nicolasroardrs_allocation gIn; 255448bf8095483574649afcc2add7f153670c7450nicolasroard 265448bf8095483574649afcc2add7f153670c7450nicolasroardfloat gCoeffs[9]; 275448bf8095483574649afcc2add7f153670c7450nicolasroard 285448bf8095483574649afcc2add7f153670c7450nicolasroardvoid root(const uchar4 *in, uchar4 *out, const void *usrData, uint32_t x, uint32_t y) { 295448bf8095483574649afcc2add7f153670c7450nicolasroard uint32_t x1 = min((int32_t)x+1, gWidth-1); 305448bf8095483574649afcc2add7f153670c7450nicolasroard uint32_t x2 = max((int32_t)x-1, 0); 315448bf8095483574649afcc2add7f153670c7450nicolasroard uint32_t y1 = min((int32_t)y+1, gHeight-1); 325448bf8095483574649afcc2add7f153670c7450nicolasroard uint32_t y2 = max((int32_t)y-1, 0); 335448bf8095483574649afcc2add7f153670c7450nicolasroard 345448bf8095483574649afcc2add7f153670c7450nicolasroard float4 p00 = rsUnpackColor8888(gPixels[x1 + gWidth * y1]); 355448bf8095483574649afcc2add7f153670c7450nicolasroard float4 p01 = rsUnpackColor8888(gPixels[x + gWidth * y1]); 365448bf8095483574649afcc2add7f153670c7450nicolasroard float4 p02 = rsUnpackColor8888(gPixels[x2 + gWidth * y1]); 375448bf8095483574649afcc2add7f153670c7450nicolasroard float4 p10 = rsUnpackColor8888(gPixels[x1 + gWidth * y]); 385448bf8095483574649afcc2add7f153670c7450nicolasroard float4 p11 = rsUnpackColor8888(gPixels[x + gWidth * y]); 395448bf8095483574649afcc2add7f153670c7450nicolasroard float4 p12 = rsUnpackColor8888(gPixels[x2 + gWidth * y]); 405448bf8095483574649afcc2add7f153670c7450nicolasroard float4 p20 = rsUnpackColor8888(gPixels[x1 + gWidth * y2]); 415448bf8095483574649afcc2add7f153670c7450nicolasroard float4 p21 = rsUnpackColor8888(gPixels[x + gWidth * y2]); 425448bf8095483574649afcc2add7f153670c7450nicolasroard float4 p22 = rsUnpackColor8888(gPixels[x2 + gWidth * y2]); 435448bf8095483574649afcc2add7f153670c7450nicolasroard 445448bf8095483574649afcc2add7f153670c7450nicolasroard p00 *= gCoeffs[0]; 455448bf8095483574649afcc2add7f153670c7450nicolasroard p01 *= gCoeffs[1]; 465448bf8095483574649afcc2add7f153670c7450nicolasroard p02 *= gCoeffs[2]; 475448bf8095483574649afcc2add7f153670c7450nicolasroard p10 *= gCoeffs[3]; 485448bf8095483574649afcc2add7f153670c7450nicolasroard p11 *= gCoeffs[4]; 495448bf8095483574649afcc2add7f153670c7450nicolasroard p12 *= gCoeffs[5]; 505448bf8095483574649afcc2add7f153670c7450nicolasroard p20 *= gCoeffs[6]; 515448bf8095483574649afcc2add7f153670c7450nicolasroard p21 *= gCoeffs[7]; 525448bf8095483574649afcc2add7f153670c7450nicolasroard p22 *= gCoeffs[8]; 535448bf8095483574649afcc2add7f153670c7450nicolasroard 545448bf8095483574649afcc2add7f153670c7450nicolasroard p00 += p01; 555448bf8095483574649afcc2add7f153670c7450nicolasroard p02 += p10; 565448bf8095483574649afcc2add7f153670c7450nicolasroard p11 += p12; 575448bf8095483574649afcc2add7f153670c7450nicolasroard p20 += p21; 585448bf8095483574649afcc2add7f153670c7450nicolasroard 595448bf8095483574649afcc2add7f153670c7450nicolasroard p22 += p00; 605448bf8095483574649afcc2add7f153670c7450nicolasroard p02 += p11; 615448bf8095483574649afcc2add7f153670c7450nicolasroard 625448bf8095483574649afcc2add7f153670c7450nicolasroard p20 += p22; 635448bf8095483574649afcc2add7f153670c7450nicolasroard p20 += p02; 645448bf8095483574649afcc2add7f153670c7450nicolasroard 655448bf8095483574649afcc2add7f153670c7450nicolasroard p20 = clamp(p20, 0.f, 1.f); 665448bf8095483574649afcc2add7f153670c7450nicolasroard *out = rsPackColorTo8888(p20.r, p20.g, p20.b); 675448bf8095483574649afcc2add7f153670c7450nicolasroard} 68