1ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams/* 2ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams * Copyright (C) 2012 The Android Open Source Project 3ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams * 4ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams * you may not use this file except in compliance with the License. 6ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams * You may obtain a copy of the License at 7ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams * 8ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 9ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams * 10ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams * Unless required by applicable law or agreed to in writing, software 11ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams * See the License for the specific language governing permissions and 14ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams * limitations under the License. 15ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams */ 16ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams 17ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Samspackage com.android.rs.image2; 18ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams 19ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Samsimport java.lang.Math; 20ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams 21ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Samsimport android.support.v8.renderscript.*; 22ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Samsimport android.util.Log; 23ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams 24ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Samspublic class GroupTest extends TestBase { 25b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams private ScriptIntrinsicConvolve3x3 mConvolve; 26b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams private ScriptIntrinsicColorMatrix mMatrix; 27ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams 28ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams private Allocation mScratchPixelsAllocation1; 29ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams private ScriptGroup mGroup; 30ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams 31ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams private int mWidth; 32ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams private int mHeight; 33ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams private boolean mUseNative; 34ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams 35ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams 36ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams public GroupTest(boolean useNative) { 37ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams mUseNative = useNative; 38ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams } 39ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams 40ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams public void createTest(android.content.res.Resources res) { 41ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams mWidth = mInPixelsAllocation.getType().getX(); 42ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams mHeight = mInPixelsAllocation.getType().getY(); 43ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams 44b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mConvolve = ScriptIntrinsicConvolve3x3.create(mRS, Element.U8_4(mRS)); 45b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mMatrix = ScriptIntrinsicColorMatrix.create(mRS, Element.U8_4(mRS)); 46ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams 47ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams float f[] = new float[9]; 48ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams f[0] = 0.f; f[1] = -1.f; f[2] = 0.f; 49ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams f[3] = -1.f; f[4] = 5.f; f[5] = -1.f; 50ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams f[6] = 0.f; f[7] = -1.f; f[8] = 0.f; 51b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mConvolve.setCoefficients(f); 52ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams 53ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams Matrix4f m = new Matrix4f(); 54ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams m.set(1, 0, 0.2f); 55ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams m.set(1, 1, 0.9f); 56ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams m.set(1, 2, 0.2f); 57b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mMatrix.setColorMatrix(m); 58ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams 59ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams Type.Builder tb = new Type.Builder(mRS, Element.U8_4(mRS)); 60ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams tb.setX(mWidth); 61ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams tb.setY(mHeight); 62ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams Type connect = tb.create(); 63ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams 64ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams if (mUseNative) { 65ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams ScriptGroup.Builder b = new ScriptGroup.Builder(mRS); 66b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams b.addKernel(mConvolve.getKernelID()); 67b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams b.addKernel(mMatrix.getKernelID()); 68b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams b.addConnection(connect, mConvolve.getKernelID(), mMatrix.getKernelID()); 69ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams mGroup = b.create(); 70ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams } else { 71ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams mScratchPixelsAllocation1 = Allocation.createTyped(mRS, connect); 72ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams } 73ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams } 74ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams 75ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams public void runTest() { 76b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mConvolve.setInput(mInPixelsAllocation); 77ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams if (mUseNative) { 78b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mGroup.setOutput(mMatrix.getKernelID(), mOutPixelsAllocation); 79ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams mGroup.execute(); 80ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams } else { 81b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mConvolve.forEach(mScratchPixelsAllocation1); 82b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mMatrix.forEach(mScratchPixelsAllocation1, mOutPixelsAllocation); 83ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams } 84ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams } 85ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams 86ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams} 87