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