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