1572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams/*
2572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * Copyright (C) 2012 The Android Open Source Project
3572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams *
4572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * Licensed under the Apache License, Version 2.0 (the "License");
5572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * you may not use this file except in compliance with the License.
6572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * You may obtain a copy of the License at
7572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams *
8572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams *      http://www.apache.org/licenses/LICENSE-2.0
9572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams *
10572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * Unless required by applicable law or agreed to in writing, software
11572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * distributed under the License is distributed on an "AS IS" BASIS,
12572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * See the License for the specific language governing permissions and
14572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * limitations under the License.
15572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams */
16572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
17572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samspackage com.android.rs.imagejb;
18572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
19572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport java.lang.Math;
20572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport java.lang.Short;
21572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
22572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.Allocation;
23572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.Element;
24572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.Matrix4f;
25572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.RenderScript;
26572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.Script;
27572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.ScriptC;
28572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.ScriptIntrinsicBlend;
29572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.Type;
30572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.util.Log;
31572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.widget.SeekBar;
32572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.widget.TextView;
33572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.widget.AdapterView;
34572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.widget.ArrayAdapter;
35572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.view.View;
36572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.widget.Spinner;
37572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
38572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samspublic class Blend extends TestBase {
39572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private ScriptIntrinsicBlend mBlend;
40572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private ScriptC_blend mBlendHelper;
41572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private short image1Alpha = 128;
42572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private short image2Alpha = 128;
43572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
44572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    String mIntrinsicNames[];
45572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
46572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private Allocation image1;
47572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private Allocation image2;
48572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private int currentIntrinsic = 0;
49572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
50572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    private AdapterView.OnItemSelectedListener mIntrinsicSpinnerListener =
51572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            new AdapterView.OnItemSelectedListener() {
52572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
53572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                    currentIntrinsic = pos;
54572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                    if (mRS != null) {
55572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                        runTest();
56721a5a24e2278f4012109865d62b98190b3185afJason Sams                        act.mProcessor.update();
57572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                    }
58572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                }
59572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
60572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                public void onNothingSelected(AdapterView parent) {
61572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
62572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams                }
63572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            };
64572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
65572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    public void createTest(android.content.res.Resources res) {
66572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mBlend = ScriptIntrinsicBlend.create(mRS, Element.U8_4(mRS));
67572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mBlendHelper = new ScriptC_blend(mRS);
68572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mBlendHelper.set_alpha((short)128);
69572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
70572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        image1 = Allocation.createTyped(mRS, mInPixelsAllocation.getType());
71572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        image2 = Allocation.createTyped(mRS, mInPixelsAllocation2.getType());
72572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
73572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mIntrinsicNames = new String[14];
74572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mIntrinsicNames[0] = "Source";
75572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mIntrinsicNames[1] = "Destination";
76572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mIntrinsicNames[2] = "Source Over";
77572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mIntrinsicNames[3] = "Destination Over";
78572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mIntrinsicNames[4] = "Source In";
79572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mIntrinsicNames[5] = "Destination In";
80572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mIntrinsicNames[6] = "Source Out";
81572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mIntrinsicNames[7] = "Destination Out";
82572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mIntrinsicNames[8] = "Source Atop";
83572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mIntrinsicNames[9] = "Destination Atop";
84572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mIntrinsicNames[10] = "XOR";
85572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mIntrinsicNames[11] = "Add";
86572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mIntrinsicNames[12] = "Subtract";
87572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mIntrinsicNames[13] = "Multiply";
88572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
89572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
90572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    public boolean onSpinner1Setup(Spinner s) {
91572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        s.setAdapter(new ArrayAdapter<String>(
92572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            act, R.layout.spinner_layout, mIntrinsicNames));
93572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        s.setOnItemSelectedListener(mIntrinsicSpinnerListener);
94572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        return true;
95572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
96572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
97572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    public boolean onBar1Setup(SeekBar b, TextView t) {
98572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        t.setText("Image 1 Alpha");
99572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        b.setMax(255);
100572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        b.setProgress(image1Alpha);
101572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        return true;
102572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
103572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
104572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    public void onBar1Changed(int progress) {
105572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        image1Alpha = (short)progress;
106572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
107572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
108572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    public boolean onBar2Setup(SeekBar b, TextView t) {
109572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        t.setText("Image 2 Alpha");
110572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        b.setMax(255);
111572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        b.setProgress(image2Alpha);
112572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        return true;
113572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
114572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
115572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    public void onBar2Changed(int progress) {
116572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        image2Alpha = (short)progress;
117572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
118572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
119572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    public void runTest() {
120572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        image1.copy2DRangeFrom(0, 0, mInPixelsAllocation.getType().getX(), mInPixelsAllocation.getType().getY(), mInPixelsAllocation, 0, 0);
121572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        image2.copy2DRangeFrom(0, 0, mInPixelsAllocation2.getType().getX(), mInPixelsAllocation2.getType().getY(), mInPixelsAllocation2, 0, 0);
122572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
123572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mBlendHelper.set_alpha(image1Alpha);
124cf8bca20c40d6a3dfe4b55f528b0473833c5c693Tim Murray        mBlendHelper.forEach_setImageAlpha(image1, image1);
125572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
126572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mBlendHelper.set_alpha(image2Alpha);
127cf8bca20c40d6a3dfe4b55f528b0473833c5c693Tim Murray        mBlendHelper.forEach_setImageAlpha(image2, image2);
128572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
129572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        switch (currentIntrinsic) {
130572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case 0:
131572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mBlend.forEachSrc(image1, image2);
132572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
133572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case 1:
134572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mBlend.forEachDst(image1, image2);
135572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
136572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case 2:
137572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mBlend.forEachSrcOver(image1, image2);
138572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
139572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case 3:
140572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mBlend.forEachDstOver(image1, image2);
141572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
142572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case 4:
143572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mBlend.forEachSrcIn(image1, image2);
144572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
145572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case 5:
146572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mBlend.forEachDstIn(image1, image2);
147572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
148572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case 6:
149572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mBlend.forEachSrcOut(image1, image2);
150572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
151572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case 7:
152572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mBlend.forEachDstOut(image1, image2);
153572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
154572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case 8:
155572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mBlend.forEachSrcAtop(image1, image2);
156572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
157572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case 9:
158572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mBlend.forEachDstAtop(image1, image2);
159572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
160572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case 10:
161572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mBlend.forEachXor(image1, image2);
162572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
163572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case 11:
164572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mBlend.forEachAdd(image1, image2);
165572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
166572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case 12:
167572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mBlend.forEachSubtract(image1, image2);
168572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
169572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        case 13:
170572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            mBlend.forEachMultiply(image1, image2);
171572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams            break;
172572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        }
173572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
174572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams        mOutPixelsAllocation.copy2DRangeFrom(0, 0, image2.getType().getX(), image2.getType().getY(), image2, 0, 0);
175572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams    }
176572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams
177572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams}
178