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