1da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff/*
2da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff * Copyright (C) 2012 The Android Open Source Project
3da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff *
4da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff * Licensed under the Apache License, Version 2.0 (the "License");
5da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff * you may not use this file except in compliance with the License.
6da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff * You may obtain a copy of the License at
7da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff *
8da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff *      http://www.apache.org/licenses/LICENSE-2.0
9da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff *
10da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff * Unless required by applicable law or agreed to in writing, software
11da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff * distributed under the License is distributed on an "AS IS" BASIS,
12da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff * See the License for the specific language governing permissions and
14da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff * limitations under the License.
15da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff */
16da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff
17da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriffpackage com.android.rs.image2;
18da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff
199538bdd3c77968c7673719c580ae653ede4654d6Irfan Sheriffimport java.lang.Math;
20da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff
21da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriffimport android.support.v8.renderscript.*;
22da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriffimport android.util.Log;
23da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff
24da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriffpublic class CrossProcess extends TestBase {
25da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff    private ScriptIntrinsicLUT mIntrinsic;
26da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff
27da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff    public void createTest(android.content.res.Resources res) {
28da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff        mIntrinsic = ScriptIntrinsicLUT.create(mRS, Element.U8_4(mRS));
29da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff        for (int ct=0; ct < 256; ct++) {
309538bdd3c77968c7673719c580ae653ede4654d6Irfan Sheriff            float f = ((float)ct) / 255.f;
31da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff
32da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff            float r = f;
33da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff            if (r < 0.5f) {
34b8aad91f059527e04abaf8a83ed1ce6b5f09c55dIrfan Sheriff                r = 4.0f * r * r * r;
35da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff            } else {
36da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff                r = 1.0f - r;
379538bdd3c77968c7673719c580ae653ede4654d6Irfan Sheriff                r = 1.0f - (4.0f * r * r * r);
389538bdd3c77968c7673719c580ae653ede4654d6Irfan Sheriff            }
399538bdd3c77968c7673719c580ae653ede4654d6Irfan Sheriff            mIntrinsic.setRed(ct, (int)(r * 255.f + 0.5f));
40da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff
41da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff            float g = f;
42da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff            if (g < 0.5f) {
43da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff                g = 2.0f * g * g;
44da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff            } else {
45da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff                g = 1.0f - g;
46da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff                g = 1.0f - (2.0f * g * g);
47da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff            }
48da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff            mIntrinsic.setGreen(ct, (int)(g * 255.f + 0.5f));
49da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff
509538bdd3c77968c7673719c580ae653ede4654d6Irfan Sheriff            float b = f * 0.5f + 0.25f;
51da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff            mIntrinsic.setBlue(ct, (int)(b * 255.f + 0.5f));
52da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff        }
539538bdd3c77968c7673719c580ae653ede4654d6Irfan Sheriff
549538bdd3c77968c7673719c580ae653ede4654d6Irfan Sheriff    }
55da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff
56da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff    public void runTest() {
57da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff        mIntrinsic.forEach(mInPixelsAllocation, mOutPixelsAllocation);
58da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff    }
59da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff
60da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff}
61da6da0907b28d4704aabbdb1bbeb4300954670d1Irfan Sheriff