1dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams/*
2dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams * Copyright (C) 2012 The Android Open Source Project
3dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams *
4dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams * you may not use this file except in compliance with the License.
6dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams * You may obtain a copy of the License at
7dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams *
8dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams *
10dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams * Unless required by applicable law or agreed to in writing, software
11dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams * See the License for the specific language governing permissions and
14dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams * limitations under the License.
15dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams */
16dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams
17dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Samspackage com.android.rs.imagejb;
18dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams
19dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Samsimport java.lang.Math;
20dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams
21dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Samsimport android.renderscript.Allocation;
22dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Samsimport android.renderscript.Element;
23dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Samsimport android.renderscript.Matrix4f;
24dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Samsimport android.renderscript.RenderScript;
25dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Samsimport android.renderscript.Script;
26dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Samsimport android.renderscript.ScriptC;
27dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Samsimport android.renderscript.ScriptIntrinsic3DLUT;
28dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Samsimport android.renderscript.ScriptIntrinsicColorMatrix;
29dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Samsimport android.renderscript.Type;
30dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Samsimport android.util.Log;
31dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams
32dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Samspublic class ColorCube extends TestBase {
33dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams    private Allocation mCube;
34dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams    private ScriptC_colorcube mScript;
35dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams    private ScriptIntrinsic3DLUT mIntrinsic;
36dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams    private boolean mUseIntrinsic;
37dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams
38dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams    public ColorCube(boolean useIntrinsic) {
39dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams        mUseIntrinsic = useIntrinsic;
40dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams    }
41dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams
42dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams    private void initCube() {
43dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams        final int sx = 32;
44dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams        final int sy = 32;
45dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams        final int sz = 16;
46dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams
47dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams        Type.Builder tb = new Type.Builder(mRS, Element.U8_4(mRS));
48dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams        tb.setX(sx);
49dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams        tb.setY(sy);
50dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams        tb.setZ(sz);
51dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams        Type t = tb.create();
52dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams        mCube = Allocation.createTyped(mRS, t);
53dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams
54dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams        int dat[] = new int[sx * sy * sz];
55dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams        for (int z = 0; z < sz; z++) {
56dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams            for (int y = 0; y < sy; y++) {
57dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams                for (int x = 0; x < sx; x++ ) {
58dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams                    int v = 0xff000000;
59dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams                    v |= (0xff * x / (sx - 1));
60dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams                    v |= (0xff * y / (sy - 1)) << 8;
61dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams                    v |= (0xff * z / (sz - 1)) << 16;
62dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams                    dat[z*sy*sx + y*sx + x] = v;
63dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams                }
64dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams            }
65dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams        }
66dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams
67dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams        mCube.copyFromUnchecked(dat);
68dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams    }
69dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams
70dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams    public void createTest(android.content.res.Resources res) {
71f1d97e536561b4731997c85873dde3b3fb721cb2Stephen Hines        mScript = new ScriptC_colorcube(mRS);
72dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams        mIntrinsic = ScriptIntrinsic3DLUT.create(mRS, Element.U8_4(mRS));
73dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams
74dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams        initCube();
75dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams        mScript.invoke_setCube(mCube);
76dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams        mIntrinsic.setLUT(mCube);
77dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams    }
78dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams
79dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams    public void runTest() {
80dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams        if (mUseIntrinsic) {
81dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams            mIntrinsic.forEach(mInPixelsAllocation, mOutPixelsAllocation);
82dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams        } else {
83dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams            mScript.forEach_root(mInPixelsAllocation, mOutPixelsAllocation);
84dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams        }
85dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams    }
86dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams
87dc08c6d13a68aa8fd35ce5922c1c98b915f35f08Jason Sams}
88