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