1bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma/*
2bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma * Copyright (C) 2012 The Android Open Source Project
3bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma *
4bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma * Licensed under the Apache License, Version 2.0 (the "License");
5bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma * you may not use this file except in compliance with the License.
6bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma * You may obtain a copy of the License at
7bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma *
8bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma *      http://www.apache.org/licenses/LICENSE-2.0
9bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma *
10bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma * Unless required by applicable law or agreed to in writing, software
11bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma * distributed under the License is distributed on an "AS IS" BASIS,
12bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma * See the License for the specific language governing permissions and
14bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma * limitations under the License.
15bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma */
16bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma
17bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharmapackage com.android.rs.image;
18bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma
19bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharmaimport android.renderscript.Allocation;
20bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharmaimport android.renderscript.Element;
21bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharmaimport android.renderscript.Sampler;
22bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharmaimport android.renderscript.Type;
23bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharmaimport android.widget.SeekBar;
24bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharmaimport android.widget.TextView;
25bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma
26bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharmapublic class Vignette extends TestBase {
27bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    private ScriptC_vignette_full mScript_full = null;
28bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    private ScriptC_vignette_relaxed mScript_relaxed = null;
298fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma    private ScriptC_vignette_approx_full mScript_approx_full = null;
308fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma    private ScriptC_vignette_approx_relaxed mScript_approx_relaxed = null;
318fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma    private final boolean approx;
32bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    private final boolean relaxed;
33bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    private float center_x = 0.5f;
34bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    private float center_y = 0.5f;
35bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    private float scale = 0.5f;
36bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    private float shade = 0.5f;
37bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    private float slope = 20.0f;
38bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma
398fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma    public Vignette(boolean approx, boolean relaxed) {
408fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma        this.approx = approx;
41bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        this.relaxed = relaxed;
42bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    }
43bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma
44bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    public boolean onBar1Setup(SeekBar b, TextView t) {
45bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        t.setText("Scale");
46bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        b.setMax(100);
47bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        b.setProgress(25);
48bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        return true;
49bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    }
50bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    public boolean onBar2Setup(SeekBar b, TextView t) {
51bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        t.setText("Shade");
52bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        b.setMax(100);
53bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        b.setProgress(50);
54bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        return true;
55bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    }
56bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    public boolean onBar3Setup(SeekBar b, TextView t) {
57bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        t.setText("Slope");
58bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        b.setMax(100);
59bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        b.setProgress(20);
60bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        return true;
61bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    }
62bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    public boolean onBar4Setup(SeekBar b, TextView t) {
63bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        t.setText("Shift center X");
64bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        b.setMax(100);
65bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        b.setProgress(50);
66bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        return true;
67bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    }
68bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    public boolean onBar5Setup(SeekBar b, TextView t) {
69bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        t.setText("Shift center Y");
70bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        b.setMax(100);
71bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        b.setProgress(50);
72bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        return true;
73bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    }
74bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma
75bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    public void onBar1Changed(int progress) {
76bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        scale = progress / 50.0f;
77bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        do_init();
78bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    }
79bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    public void onBar2Changed(int progress) {
80bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        shade = progress / 100.0f;
81bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        do_init();
82bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    }
83bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    public void onBar3Changed(int progress) {
84bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        slope = (float)progress;
85bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        do_init();
86bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    }
87bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    public void onBar4Changed(int progress) {
88bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        center_x = progress / 100.0f;
89bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        do_init();
90bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    }
91bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    public void onBar5Changed(int progress) {
92bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        center_y = progress / 100.0f;
93bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        do_init();
94bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    }
95bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma
96bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    private void do_init() {
978fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma        if (approx) {
988fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma            if (relaxed)
998fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma                mScript_approx_relaxed.invoke_init_vignette(
1008fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma                        mInPixelsAllocation.getType().getX(),
1018fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma                        mInPixelsAllocation.getType().getY(), center_x,
1028fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma                        center_y, scale, shade, slope);
1038fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma            else
1048fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma                mScript_approx_full.invoke_init_vignette(
1058fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma                        mInPixelsAllocation.getType().getX(),
1068fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma                        mInPixelsAllocation.getType().getY(), center_x,
1078fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma                        center_y, scale, shade, slope);
1088fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma        } else if (relaxed)
109bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma            mScript_relaxed.invoke_init_vignette(
110bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma                    mInPixelsAllocation.getType().getX(),
111bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma                    mInPixelsAllocation.getType().getY(), center_x, center_y,
112bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma                    scale, shade, slope);
113bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        else
114bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma            mScript_full.invoke_init_vignette(
115bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma                    mInPixelsAllocation.getType().getX(),
116bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma                    mInPixelsAllocation.getType().getY(), center_x, center_y,
117bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma                    scale, shade, slope);
118bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    }
119bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma
120bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    public void createTest(android.content.res.Resources res) {
1218fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma        if (approx) {
1228fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma            if (relaxed)
1238fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma                mScript_approx_relaxed = new ScriptC_vignette_approx_relaxed(
1248fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma                        mRS, res, R.raw.vignette_approx_relaxed);
1258fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma            else
1268fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma                mScript_approx_full = new ScriptC_vignette_approx_full(
1278fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma                        mRS, res, R.raw.vignette_approx_full);
1288fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma        } else if (relaxed)
129bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma            mScript_relaxed = new ScriptC_vignette_relaxed(mRS, res,
130bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma                    R.raw.vignette_relaxed);
1318fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma        else
132bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma            mScript_full = new ScriptC_vignette_full(mRS, res,
133bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma                    R.raw.vignette_full);
134bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        do_init();
135bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    }
136bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma
137bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    public void runTest() {
1388fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma        if (approx) {
1398fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma            if (relaxed)
1408fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma                mScript_approx_relaxed.forEach_root(mInPixelsAllocation,
1418fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma                        mOutPixelsAllocation);
1428fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma            else
1438fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma                mScript_approx_full.forEach_root(mInPixelsAllocation,
1448fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma                        mOutPixelsAllocation);
1458fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma        } else if (relaxed)
1468fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma            mScript_relaxed.forEach_root(mInPixelsAllocation,
1478fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma                    mOutPixelsAllocation);
148bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma        else
1498fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma            mScript_full.forEach_root(mInPixelsAllocation,
1508fa57118ad687f50b26cf2037717ecc3a22fdfe1Rajeev Sharma                    mOutPixelsAllocation);
151bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma    }
152bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma
153bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma}
154bb0dbf73739c36ac97453f9510cf3d84acfd57ccRajeev Sharma
155