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 Samsimport android.widget.SeekBar; 24ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Samsimport android.widget.TextView; 25ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams 26ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Samspublic class Blur25 extends TestBase { 27b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams private boolean mUseIntrinsic = false; 28b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams private ScriptIntrinsicBlur mIntrinsic; 29b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams 30ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams private int MAX_RADIUS = 25; 31ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams private ScriptC_threshold mScript; 32b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams private float mRadius = MAX_RADIUS; 33ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams private float mSaturation = 1.0f; 34ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams private Allocation mScratchPixelsAllocation1; 35ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams private Allocation mScratchPixelsAllocation2; 36ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams 37ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams 38b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams public Blur25(boolean useIntrinsic) { 39b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mUseIntrinsic = useIntrinsic; 40b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams } 41b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams 42ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams public boolean onBar1Setup(SeekBar b, TextView t) { 43ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams t.setText("Radius"); 44ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams b.setProgress(100); 45ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams return true; 46ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams } 47ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams 48ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams 49ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams public void onBar1Changed(int progress) { 50b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mRadius = ((float)progress) / 100.0f * MAX_RADIUS; 51b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams if (mRadius <= 0.10f) { 52b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mRadius = 0.10f; 53b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams } 54b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams if (mUseIntrinsic) { 55b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mIntrinsic.setRadius(mRadius); 56b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams } else { 57b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mScript.invoke_setRadius((int)mRadius); 58b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams } 59ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams } 60ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams 61ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams 62ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams public void createTest(android.content.res.Resources res) { 63ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams int width = mInPixelsAllocation.getType().getX(); 64ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams int height = mInPixelsAllocation.getType().getY(); 65ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams 66b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams if (mUseIntrinsic) { 67b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mIntrinsic = ScriptIntrinsicBlur.create(mRS, Element.U8_4(mRS)); 68b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mIntrinsic.setRadius(MAX_RADIUS); 69b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mIntrinsic.setInput(mInPixelsAllocation); 70b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams } else { 71b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams 72b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams Type.Builder tb = new Type.Builder(mRS, Element.F32_4(mRS)); 73b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams tb.setX(width); 74b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams tb.setY(height); 75b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mScratchPixelsAllocation1 = Allocation.createTyped(mRS, tb.create()); 76b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mScratchPixelsAllocation2 = Allocation.createTyped(mRS, tb.create()); 77b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams 78b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mScript = new ScriptC_threshold(mRS, res, R.raw.threshold); 79b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mScript.set_width(width); 80b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mScript.set_height(height); 81b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mScript.invoke_setRadius(MAX_RADIUS); 82b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams 83b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mScript.set_InPixel(mInPixelsAllocation); 84b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mScript.set_ScratchPixel1(mScratchPixelsAllocation1); 85b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mScript.set_ScratchPixel2(mScratchPixelsAllocation2); 86b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams } 87ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams } 88ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams 89ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams public void runTest() { 90b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams if (mUseIntrinsic) { 91b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mIntrinsic.forEach(mOutPixelsAllocation); 92b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams } else { 93b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mScript.forEach_copyIn(mInPixelsAllocation, mScratchPixelsAllocation1); 94b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mScript.forEach_horz(mScratchPixelsAllocation2); 95b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mScript.forEach_vert(mOutPixelsAllocation); 96b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams } 97ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams } 98ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams 99ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams public void setupBenchmark() { 100b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams if (mUseIntrinsic) { 101b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mIntrinsic.setRadius(MAX_RADIUS); 102b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams } else { 103b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mScript.invoke_setRadius(MAX_RADIUS); 104b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams } 105ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams } 106ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams 107ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams public void exitBenchmark() { 108b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams if (mUseIntrinsic) { 109b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mIntrinsic.setRadius(mRadius); 110b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams } else { 111b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams mScript.invoke_setRadius((int)mRadius); 112b2ae7a1a18ab278f6aed8d2b16576aa8361b358eJason Sams } 113ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams } 114ebefb2c3d8efda845e5e9a9eba66e0a341b4db82Jason Sams} 115