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