1bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma/* 2bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma * Copyright (C) 2012 The Android Open Source Project 3bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma * 4bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma * Licensed under the Apache License, Version 2.0 (the "License"); 5bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma * you may not use this file except in compliance with the License. 6bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma * You may obtain a copy of the License at 7bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma * 8bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma * http://www.apache.org/licenses/LICENSE-2.0 9bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma * 10bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma * Unless required by applicable law or agreed to in writing, software 11bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma * distributed under the License is distributed on an "AS IS" BASIS, 12bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma * See the License for the specific language governing permissions and 14bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma * limitations under the License. 15bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma */ 16bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma 17bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharmapackage com.android.rs.image; 18bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma 19bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharmaimport android.renderscript.Allocation; 20bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharmaimport android.renderscript.Element; 21bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharmaimport android.renderscript.Sampler; 22bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharmaimport android.renderscript.Type; 23bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharmaimport android.widget.SeekBar; 24bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharmaimport android.widget.TextView; 25bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma 26bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharmapublic class Fisheye extends TestBase { 27bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma private ScriptC_fisheye_full mScript_full = null; 28bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma private ScriptC_fisheye_relaxed mScript_relaxed = null; 2950b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma private ScriptC_fisheye_approx_full mScript_approx_full = null; 3050b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma private ScriptC_fisheye_approx_relaxed mScript_approx_relaxed = null; 3150b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma private final boolean approx; 32bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma private final boolean relaxed; 33bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma private float center_x = 0.5f; 34bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma private float center_y = 0.5f; 35bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma private float scale = 0.5f; 36bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma 3750b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma public Fisheye(boolean approx, boolean relaxed) { 3850b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma this.approx = approx; 39bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma this.relaxed = relaxed; 40bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma } 41bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma 42bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma public boolean onBar1Setup(SeekBar b, TextView t) { 43bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma t.setText("Scale"); 44bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma b.setMax(100); 45bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma b.setProgress(25); 46bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma return true; 47bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma } 48bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma public boolean onBar2Setup(SeekBar b, TextView t) { 49bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma t.setText("Shift center X"); 50bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma b.setMax(100); 51bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma b.setProgress(50); 52bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma return true; 53bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma } 54bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma public boolean onBar3Setup(SeekBar b, TextView t) { 55bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma t.setText("Shift center Y"); 56bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma b.setMax(100); 57bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma b.setProgress(50); 58bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma return true; 59bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma } 60bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma 61bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma public void onBar1Changed(int progress) { 62bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma scale = progress / 50.0f; 63bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma do_init(); 64bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma } 65bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma public void onBar2Changed(int progress) { 66bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma center_x = progress / 100.0f; 67bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma do_init(); 68bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma } 69bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma public void onBar3Changed(int progress) { 70bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma center_y = progress / 100.0f; 71bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma do_init(); 72bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma } 73bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma 74bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma private void do_init() { 7550b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma if (approx) { 7650b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma if (relaxed) 7750b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma mScript_approx_relaxed.invoke_init_filter( 7850b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma mInPixelsAllocation.getType().getX(), 7950b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma mInPixelsAllocation.getType().getY(), center_x, 8050b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma center_y, scale); 8150b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma else 8250b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma mScript_approx_full.invoke_init_filter( 8350b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma mInPixelsAllocation.getType().getX(), 8450b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma mInPixelsAllocation.getType().getY(), center_x, 8550b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma center_y, scale); 8650b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma } else if (relaxed) 87bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma mScript_relaxed.invoke_init_filter( 88bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma mInPixelsAllocation.getType().getX(), 89bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma mInPixelsAllocation.getType().getY(), center_x, center_y, 90bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma scale); 91bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma else 92bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma mScript_full.invoke_init_filter( 93bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma mInPixelsAllocation.getType().getX(), 94bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma mInPixelsAllocation.getType().getY(), center_x, center_y, 95bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma scale); 96bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma } 97bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma 98bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma public void createTest(android.content.res.Resources res) { 9950b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma if (approx) { 10050b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma if (relaxed) { 10150b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma mScript_approx_relaxed = new ScriptC_fisheye_approx_relaxed(mRS, 10250b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma res, R.raw.fisheye_approx_relaxed); 10350b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma mScript_approx_relaxed.set_in_alloc(mInPixelsAllocation); 10450b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma mScript_approx_relaxed.set_sampler(Sampler.CLAMP_LINEAR(mRS)); 10550b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma } else { 10650b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma mScript_approx_full = new ScriptC_fisheye_approx_full(mRS, res, 10750b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma R.raw.fisheye_approx_full); 10850b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma mScript_approx_full.set_in_alloc(mInPixelsAllocation); 10950b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma mScript_approx_full.set_sampler(Sampler.CLAMP_LINEAR(mRS)); 11050b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma } 11150b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma } else if (relaxed) { 112bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma mScript_relaxed = new ScriptC_fisheye_relaxed(mRS, res, 113bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma R.raw.fisheye_relaxed); 114bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma mScript_relaxed.set_in_alloc(mInPixelsAllocation); 115bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma mScript_relaxed.set_sampler(Sampler.CLAMP_LINEAR(mRS)); 116bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma } else { 117bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma mScript_full = new ScriptC_fisheye_full(mRS, res, 118bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma R.raw.fisheye_full); 119bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma mScript_full.set_in_alloc(mInPixelsAllocation); 120bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma mScript_full.set_sampler(Sampler.CLAMP_LINEAR(mRS)); 121bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma } 122bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma do_init(); 123bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma } 124bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma 125bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma public void runTest() { 12650b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma if (approx) { 12750b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma if (relaxed) 12850b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma mScript_approx_relaxed.forEach_root(mOutPixelsAllocation); 12950b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma else 13050b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma mScript_approx_full.forEach_root(mOutPixelsAllocation); 13150b1ba0083115c4fb578f13e0b94c6d80b5b1841Rajeev Sharma } else if (relaxed) 132bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma mScript_relaxed.forEach_root(mOutPixelsAllocation); 133bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma else 134bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma mScript_full.forEach_root(mOutPixelsAllocation); 135bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma } 136bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma 137bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma} 138bb2c9476363d53f8a2888e263c171b588e21eeabRajeev Sharma 139