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