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 Sams#include "ip.rsh"
186939f7bf32ab2765dcedb8a8d6fd352e7d08540fJason Sams#pragma rs_fp_relaxed
19572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
20572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsstatic float sr = 0.f;
21572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsstatic float sg = 0.f;
22572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsstatic float sb = 0.f;
23572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
24572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsvoid prepareBwFilter(uint32_t rw, uint32_t gw, uint32_t bw) {
25572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
26572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    sr = rw;
27572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    sg = gw;
28572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    sb = bw;
29572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
30572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    float imageMin = min(sg,sb);
31572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    imageMin = fmin(sr,imageMin);
32572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    float imageMax = max(sg,sb);
33572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    imageMax = fmax(sr,imageMax);
34572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    float avg = (imageMin + imageMax)/2;
35572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    sb /= avg;
36572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    sg /= avg;
37572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    sr /= avg;
38572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
39572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams}
40572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
41572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsvoid bwFilterKernel(const uchar4 *in, uchar4 *out) {
42572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    float r = in->r * sr;
43572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    float g = in->g * sg;
44572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    float b = in->b * sb;
45572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    float localMin, localMax, avg;
46572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    localMin = fmin(g,b);
47572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    localMin = fmin(r,localMin);
48572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    localMax = fmax(g,b);
49572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    localMax = fmax(r,localMax);
50572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    avg = (localMin+localMax) * 0.5f;
51572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    out->r = out->g = out->b = rsClamp(avg, 0, 255);
52572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams}
53