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 Samspackage com.android.rs.image;
18572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
19572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport java.lang.Math;
20572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
21572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.Allocation;
22572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.Element;
23572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.RenderScript;
24572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.ScriptIntrinsicLUT;
25572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.util.Log;
26572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
27572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samspublic class CrossProcess extends TestBase {
28572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private ScriptIntrinsicLUT mIntrinsic;
29572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
30572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    public void createTest(android.content.res.Resources res) {
31572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mIntrinsic = ScriptIntrinsicLUT.create(mRS, Element.U8_4(mRS));
32572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        for (int ct=0; ct < 256; ct++) {
33572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            float f = ((float)ct) / 255.f;
34572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
35572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            float r = f;
36572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            if (r < 0.5f) {
37572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                r = 4.0f * r * r * r;
38572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            } else {
39572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                r = 1.0f - r;
40572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                r = 1.0f - (4.0f * r * r * r);
41572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            }
42572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mIntrinsic.setRed(ct, (int)(r * 255.f + 0.5f));
43572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
44572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            float g = f;
45572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            if (g < 0.5f) {
46572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                g = 2.0f * g * g;
47572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            } else {
48572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                g = 1.0f - g;
49572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                g = 1.0f - (2.0f * g * g);
50572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            }
51572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mIntrinsic.setGreen(ct, (int)(g * 255.f + 0.5f));
52572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
53572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            float b = f * 0.5f + 0.25f;
54572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mIntrinsic.setBlue(ct, (int)(b * 255.f + 0.5f));
55572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        }
56572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
57572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
58572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
59572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    public void runTest() {
60572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mIntrinsic.forEach(mInPixelsAllocation, mOutPixelsAllocation);
61572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
62572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
63572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams}
64