152541816fb308fcac31e86eb3293c2b28b0999deJason Sams/* 252541816fb308fcac31e86eb3293c2b28b0999deJason Sams * Copyright (C) 2012 The Android Open Source Project 352541816fb308fcac31e86eb3293c2b28b0999deJason Sams * 452541816fb308fcac31e86eb3293c2b28b0999deJason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 552541816fb308fcac31e86eb3293c2b28b0999deJason Sams * you may not use this file except in compliance with the License. 652541816fb308fcac31e86eb3293c2b28b0999deJason Sams * You may obtain a copy of the License at 752541816fb308fcac31e86eb3293c2b28b0999deJason Sams * 852541816fb308fcac31e86eb3293c2b28b0999deJason Sams * http://www.apache.org/licenses/LICENSE-2.0 952541816fb308fcac31e86eb3293c2b28b0999deJason Sams * 1052541816fb308fcac31e86eb3293c2b28b0999deJason Sams * Unless required by applicable law or agreed to in writing, software 1152541816fb308fcac31e86eb3293c2b28b0999deJason Sams * distributed under the License is distributed on an "AS IS" BASIS, 1252541816fb308fcac31e86eb3293c2b28b0999deJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1352541816fb308fcac31e86eb3293c2b28b0999deJason Sams * See the License for the specific language governing permissions and 1452541816fb308fcac31e86eb3293c2b28b0999deJason Sams * limitations under the License. 1552541816fb308fcac31e86eb3293c2b28b0999deJason Sams */ 1652541816fb308fcac31e86eb3293c2b28b0999deJason Sams 1752541816fb308fcac31e86eb3293c2b28b0999deJason Samspackage com.android.rs.image; 1852541816fb308fcac31e86eb3293c2b28b0999deJason Sams 1952541816fb308fcac31e86eb3293c2b28b0999deJason Samsimport java.lang.Math; 2052541816fb308fcac31e86eb3293c2b28b0999deJason Sams 2152541816fb308fcac31e86eb3293c2b28b0999deJason Samsimport android.renderscript.Allocation; 2252541816fb308fcac31e86eb3293c2b28b0999deJason Samsimport android.renderscript.Element; 2352541816fb308fcac31e86eb3293c2b28b0999deJason Samsimport android.renderscript.RenderScript; 243a5b8011765906c15b5474b2bc43d80f6746cb45Jason Samsimport android.renderscript.ScriptIntrinsicBlur; 2552541816fb308fcac31e86eb3293c2b28b0999deJason Samsimport android.renderscript.Type; 2652541816fb308fcac31e86eb3293c2b28b0999deJason Samsimport android.util.Log; 2752541816fb308fcac31e86eb3293c2b28b0999deJason Samsimport android.widget.SeekBar; 2852541816fb308fcac31e86eb3293c2b28b0999deJason Samsimport android.widget.TextView; 2952541816fb308fcac31e86eb3293c2b28b0999deJason Sams 3052541816fb308fcac31e86eb3293c2b28b0999deJason Samspublic class Blur25 extends TestBase { 313a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams private boolean mUseIntrinsic = false; 323a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams private ScriptIntrinsicBlur mIntrinsic; 333a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams 3452541816fb308fcac31e86eb3293c2b28b0999deJason Sams private int MAX_RADIUS = 25; 3552541816fb308fcac31e86eb3293c2b28b0999deJason Sams private ScriptC_threshold mScript; 3631864d76a3624f2c5908218b32bf09051b1b9d24Jason Sams private float mRadius = MAX_RADIUS; 3752541816fb308fcac31e86eb3293c2b28b0999deJason Sams private float mSaturation = 1.0f; 3852541816fb308fcac31e86eb3293c2b28b0999deJason Sams private Allocation mScratchPixelsAllocation1; 3952541816fb308fcac31e86eb3293c2b28b0999deJason Sams private Allocation mScratchPixelsAllocation2; 4052541816fb308fcac31e86eb3293c2b28b0999deJason Sams 4152541816fb308fcac31e86eb3293c2b28b0999deJason Sams 423a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams public Blur25(boolean useIntrinsic) { 433a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mUseIntrinsic = useIntrinsic; 443a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams } 453a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams 4652541816fb308fcac31e86eb3293c2b28b0999deJason Sams public boolean onBar1Setup(SeekBar b, TextView t) { 4752541816fb308fcac31e86eb3293c2b28b0999deJason Sams t.setText("Radius"); 4852541816fb308fcac31e86eb3293c2b28b0999deJason Sams b.setProgress(100); 4952541816fb308fcac31e86eb3293c2b28b0999deJason Sams return true; 5052541816fb308fcac31e86eb3293c2b28b0999deJason Sams } 5152541816fb308fcac31e86eb3293c2b28b0999deJason Sams 5252541816fb308fcac31e86eb3293c2b28b0999deJason Sams 5352541816fb308fcac31e86eb3293c2b28b0999deJason Sams public void onBar1Changed(int progress) { 5431864d76a3624f2c5908218b32bf09051b1b9d24Jason Sams mRadius = ((float)progress) / 100.0f * MAX_RADIUS; 5531864d76a3624f2c5908218b32bf09051b1b9d24Jason Sams if (mRadius <= 0.10f) { 5631864d76a3624f2c5908218b32bf09051b1b9d24Jason Sams mRadius = 0.10f; 5731864d76a3624f2c5908218b32bf09051b1b9d24Jason Sams } 5897e9ee2ea894a6946f3d6346b5d258ed1ca9eae8Jason Sams if (mUseIntrinsic) { 5997e9ee2ea894a6946f3d6346b5d258ed1ca9eae8Jason Sams mIntrinsic.setRadius(mRadius); 6097e9ee2ea894a6946f3d6346b5d258ed1ca9eae8Jason Sams } else { 6131864d76a3624f2c5908218b32bf09051b1b9d24Jason Sams mScript.invoke_setRadius((int)mRadius); 6297e9ee2ea894a6946f3d6346b5d258ed1ca9eae8Jason Sams } 6352541816fb308fcac31e86eb3293c2b28b0999deJason Sams } 6452541816fb308fcac31e86eb3293c2b28b0999deJason Sams 6552541816fb308fcac31e86eb3293c2b28b0999deJason Sams 6652541816fb308fcac31e86eb3293c2b28b0999deJason Sams public void createTest(android.content.res.Resources res) { 6752541816fb308fcac31e86eb3293c2b28b0999deJason Sams int width = mInPixelsAllocation.getType().getX(); 6852541816fb308fcac31e86eb3293c2b28b0999deJason Sams int height = mInPixelsAllocation.getType().getY(); 6952541816fb308fcac31e86eb3293c2b28b0999deJason Sams 703a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams if (mUseIntrinsic) { 713a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mIntrinsic = ScriptIntrinsicBlur.create(mRS, Element.U8_4(mRS)); 7297e9ee2ea894a6946f3d6346b5d258ed1ca9eae8Jason Sams mIntrinsic.setRadius(MAX_RADIUS); 733a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mIntrinsic.setInput(mInPixelsAllocation); 743a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams } else { 7552541816fb308fcac31e86eb3293c2b28b0999deJason Sams 763a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams Type.Builder tb = new Type.Builder(mRS, Element.F32_4(mRS)); 773a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams tb.setX(width); 783a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams tb.setY(height); 793a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mScratchPixelsAllocation1 = Allocation.createTyped(mRS, tb.create()); 803a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mScratchPixelsAllocation2 = Allocation.createTyped(mRS, tb.create()); 8152541816fb308fcac31e86eb3293c2b28b0999deJason Sams 823a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mScript = new ScriptC_threshold(mRS, res, R.raw.threshold); 833a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mScript.set_width(width); 843a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mScript.set_height(height); 8597e9ee2ea894a6946f3d6346b5d258ed1ca9eae8Jason Sams mScript.invoke_setRadius(MAX_RADIUS); 8652541816fb308fcac31e86eb3293c2b28b0999deJason Sams 8797e9ee2ea894a6946f3d6346b5d258ed1ca9eae8Jason Sams mScript.set_InPixel(mInPixelsAllocation); 8897e9ee2ea894a6946f3d6346b5d258ed1ca9eae8Jason Sams mScript.set_ScratchPixel1(mScratchPixelsAllocation1); 8997e9ee2ea894a6946f3d6346b5d258ed1ca9eae8Jason Sams mScript.set_ScratchPixel2(mScratchPixelsAllocation2); 903a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams } 9152541816fb308fcac31e86eb3293c2b28b0999deJason Sams } 9252541816fb308fcac31e86eb3293c2b28b0999deJason Sams 9352541816fb308fcac31e86eb3293c2b28b0999deJason Sams public void runTest() { 943a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams if (mUseIntrinsic) { 953a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mIntrinsic.forEach(mOutPixelsAllocation); 963a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams } else { 9797e9ee2ea894a6946f3d6346b5d258ed1ca9eae8Jason Sams mScript.forEach_copyIn(mInPixelsAllocation, mScratchPixelsAllocation1); 9897e9ee2ea894a6946f3d6346b5d258ed1ca9eae8Jason Sams mScript.forEach_horz(mScratchPixelsAllocation2); 9997e9ee2ea894a6946f3d6346b5d258ed1ca9eae8Jason Sams mScript.forEach_vert(mOutPixelsAllocation); 1003a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams } 10152541816fb308fcac31e86eb3293c2b28b0999deJason Sams } 10252541816fb308fcac31e86eb3293c2b28b0999deJason Sams 10352541816fb308fcac31e86eb3293c2b28b0999deJason Sams public void setupBenchmark() { 1043a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams if (mUseIntrinsic) { 1053a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mIntrinsic.setRadius(MAX_RADIUS); 1063a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams } else { 10797e9ee2ea894a6946f3d6346b5d258ed1ca9eae8Jason Sams mScript.invoke_setRadius(MAX_RADIUS); 1083a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams } 10952541816fb308fcac31e86eb3293c2b28b0999deJason Sams } 11052541816fb308fcac31e86eb3293c2b28b0999deJason Sams 11152541816fb308fcac31e86eb3293c2b28b0999deJason Sams public void exitBenchmark() { 1123a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams if (mUseIntrinsic) { 1133a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams mIntrinsic.setRadius(mRadius); 1143a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams } else { 11531864d76a3624f2c5908218b32bf09051b1b9d24Jason Sams mScript.invoke_setRadius((int)mRadius); 1163a5b8011765906c15b5474b2bc43d80f6746cb45Jason Sams } 11752541816fb308fcac31e86eb3293c2b28b0999deJason Sams } 11852541816fb308fcac31e86eb3293c2b28b0999deJason Sams} 119