1572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams/* 2572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * Copyright (C) 2012 The Android Open Source Project 3572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * 4572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * you may not use this file except in compliance with the License. 6572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * You may obtain a copy of the License at 7572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * 8572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 9572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * 10572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * Unless required by applicable law or agreed to in writing, software 11572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * See the License for the specific language governing permissions and 14572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * limitations under the License. 15572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams */ 16572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 17572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsfloat inBlack; 18572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsfloat outBlack; 19572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsfloat inWMinInB; 20572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsfloat outWMinOutB; 21572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsfloat overInWMinInB; 22572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsrs_matrix3x3 colorMat; 23572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 24572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsuchar4 __attribute__((kernel)) root(uchar4 in, uint32_t x, uint32_t y) { 25572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams uchar4 out; 26572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams float3 pixel = convert_float4(in).rgb; 27572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams pixel = rsMatrixMultiply(&colorMat, pixel); 28572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams pixel = clamp(pixel, 0.f, 255.f); 29572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams pixel = (pixel - inBlack) * overInWMinInB; 30572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams pixel = pixel * outWMinOutB + outBlack; 31572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams pixel = clamp(pixel, 0.f, 255.f); 32572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams out.xyz = convert_uchar3(pixel); 33572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams out.w = 0xff; 34572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams return out; 35572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams} 36572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 37572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsuchar4 __attribute__((kernel)) root4(uchar4 in, uint32_t x, uint32_t y) { 38572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams float4 pixel = convert_float4(in); 39572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams pixel.rgb = rsMatrixMultiply(&colorMat, pixel.rgb); 40572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams pixel = clamp(pixel, 0.f, 255.f); 41572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams pixel = (pixel - inBlack) * overInWMinInB; 42572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams pixel = pixel * outWMinOutB + outBlack; 43572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams pixel = clamp(pixel, 0.f, 255.f); 44572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams return convert_uchar4(pixel); 45572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams} 46572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 47