16b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams/* 26b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams * Copyright (C) 2013 The Android Open Source Project 36b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams * 46b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 56b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams * you may not use this file except in compliance with the License. 66b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams * You may obtain a copy of the License at 76b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams * 86b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 96b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams * 106b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams * Unless required by applicable law or agreed to in writing, software 116b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 126b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams * See the License for the specific language governing permissions and 146b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams * limitations under the License. 156b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams */ 166b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams 176b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Samspackage com.android.rs.imagejb; 186b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams 196b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Samsimport java.lang.Math; 206b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams 216b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Samsimport android.renderscript.*; 226b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Samsimport android.util.Log; 236b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams 246b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Samspublic class Histogram extends TestBase { 256b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams private ScriptC_histogram mScript; 266b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams private ScriptIntrinsicHistogram mHist; 276b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams private Allocation mSum; 286b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams private Allocation mSums; 296b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams private boolean mUseIntrinsic; 306b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams 316b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams public Histogram(boolean useIntrisic) { 326b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams mUseIntrinsic = useIntrisic; 336b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams } 346b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams 356b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams 366b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams public void createTest(android.content.res.Resources res) { 376b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams mScript = new ScriptC_histogram(mRS); 386b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams mHist = ScriptIntrinsicHistogram.create(mRS, Element.U8_4(mRS)); 396b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams 406b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams int w = mInPixelsAllocation.getType().getX(); 416b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams int h = mInPixelsAllocation.getType().getY(); 426b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams int step = 8; 436b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams int steps = (h + step - 1) / step; 446b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams 456b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams mScript.set_gWidth(w); 466b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams mScript.set_gHeight(h); 476b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams mScript.set_gStep(step); 486b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams mScript.set_gSteps(steps); 496b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams 506b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams Type.Builder tb = new Type.Builder(mRS, Element.I32(mRS)); 516b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams tb.setX(256).setY(steps); 526b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams Type t = tb.create(); 536b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams mSums = Allocation.createTyped(mRS, t); 546b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams mSum = Allocation.createSized(mRS, Element.I32(mRS), 256); 556b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams 566b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams mScript.set_gSums(mSums); 576b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams mScript.set_gSum(mSum); 586b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams mScript.set_gSrc(mInPixelsAllocation); 596b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams mScript.set_gDest(mOutPixelsAllocation); 606b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams 616b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams mScript.forEach_clear(mOutPixelsAllocation); 626b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams } 636b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams 646b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams 656b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams 666b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams public void runTest() { 676b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams Script.LaunchOptions lo = new Script.LaunchOptions(); 686b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams 696b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams if (mUseIntrinsic) { 706b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams mHist.setOutput(mSum); 716b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams mHist.forEach_Dot(mInPixelsAllocation); 726b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams } else { 73a9139c724f8312b3634d213599f2d6b3b2505db2Jason Sams lo.setX(0, mSums.getType().getY()); 74a9139c724f8312b3634d213599f2d6b3b2505db2Jason Sams mScript.forEach_pass1(lo); 756b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams mScript.forEach_pass2(mSum); 766b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams } 776b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams 786b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams mScript.invoke_rescale(); 796b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams lo.setX(0, 1024); 806b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams mScript.forEach_draw(mOutPixelsAllocation, lo); 816b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams } 826b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams 836b9cb41efc17c2731a2762c1ac6071ba5684af63Jason Sams} 84