Loading tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/Fisheye.java 0 → 100644 +106 −0 Original line number Diff line number Diff line /* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.rs.image; import android.renderscript.Allocation; import android.renderscript.Element; import android.renderscript.Sampler; import android.renderscript.Type; import android.widget.SeekBar; import android.widget.TextView; public class Fisheye extends TestBase { private ScriptC_fisheye_full mScript_full = null; private ScriptC_fisheye_relaxed mScript_relaxed = null; private final boolean relaxed; private float center_x = 0.5f; private float center_y = 0.5f; private float scale = 0.5f; public Fisheye(boolean relaxed) { this.relaxed = relaxed; } public boolean onBar1Setup(SeekBar b, TextView t) { t.setText("Scale"); b.setMax(100); b.setProgress(25); return true; } public boolean onBar2Setup(SeekBar b, TextView t) { t.setText("Shift center X"); b.setMax(100); b.setProgress(50); return true; } public boolean onBar3Setup(SeekBar b, TextView t) { t.setText("Shift center Y"); b.setMax(100); b.setProgress(50); return true; } public void onBar1Changed(int progress) { scale = progress / 50.0f; do_init(); } public void onBar2Changed(int progress) { center_x = progress / 100.0f; do_init(); } public void onBar3Changed(int progress) { center_y = progress / 100.0f; do_init(); } private void do_init() { if (relaxed) mScript_relaxed.invoke_init_filter( mInPixelsAllocation.getType().getX(), mInPixelsAllocation.getType().getY(), center_x, center_y, scale); else mScript_full.invoke_init_filter( mInPixelsAllocation.getType().getX(), mInPixelsAllocation.getType().getY(), center_x, center_y, scale); } public void createTest(android.content.res.Resources res) { if (relaxed) { mScript_relaxed = new ScriptC_fisheye_relaxed(mRS, res, R.raw.fisheye_relaxed); mScript_relaxed.set_in_alloc(mInPixelsAllocation); mScript_relaxed.set_sampler(Sampler.CLAMP_LINEAR(mRS)); } else { mScript_full = new ScriptC_fisheye_full(mRS, res, R.raw.fisheye_full); mScript_full.set_in_alloc(mInPixelsAllocation); mScript_full.set_sampler(Sampler.CLAMP_LINEAR(mRS)); } do_init(); } public void runTest() { if (relaxed) mScript_relaxed.forEach_root(mOutPixelsAllocation); else mScript_full.forEach_root(mOutPixelsAllocation); } } tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java +9 −1 Original line number Diff line number Diff line Loading @@ -143,6 +143,12 @@ public class ImageProcessingActivity extends Activity case 6: mTest = new Grain(); break; case 7: mTest = new Fisheye(false); break; case 8: mTest = new Fisheye(true); break; } mTest.createBaseTest(this, mBitmapIn); Loading @@ -155,7 +161,7 @@ public class ImageProcessingActivity extends Activity } void setupTests() { mTestNames = new String[7]; mTestNames = new String[9]; mTestNames[0] = "Levels Vec3 Relaxed"; mTestNames[1] = "Levels Vec4 Relaxed"; mTestNames[2] = "Levels Vec3 Full"; Loading @@ -163,6 +169,8 @@ public class ImageProcessingActivity extends Activity mTestNames[4] = "Blur radius 25"; mTestNames[5] = "Greyscale"; mTestNames[6] = "Grain"; mTestNames[7] = "Fisheye Full"; mTestNames[8] = "Fisheye Relaxed"; mTestSpinner.setAdapter(new ArrayAdapter<String>( this, R.layout.spinner_layout, mTestNames)); } Loading tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/fisheye.rsh 0 → 100644 +63 −0 Original line number Diff line number Diff line /* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ rs_allocation in_alloc; rs_sampler sampler; static float2 center, dimensions; static float2 scale; static float alpha; static float radius2; static float factor; void init_filter(uint32_t dim_x, uint32_t dim_y, float focus_x, float focus_y, float k) { center.x = focus_x; center.y = focus_y; dimensions.x = (float)dim_x; dimensions.y = (float)dim_y; alpha = k * 2.0 + 0.75; float bound2 = 0.25; if (dim_x > dim_y) { scale.x = 1.0; scale.y = dimensions.y / dimensions.x; bound2 *= (scale.y*scale.y + 1); } else { scale.x = dimensions.x / dimensions.y; scale.y = 1.0; bound2 *= (scale.x*scale.x + 1); } const float bound = sqrt(bound2); const float radius = 1.15 * bound; radius2 = radius*radius; const float max_radian = 0.5f * M_PI - atan(alpha / bound * sqrt(radius2 - bound2)); factor = bound / max_radian; } void root(uchar4 *out, uint32_t x, uint32_t y) { // Convert x and y to floating point coordinates with center as origin float2 coord; coord.x = (float)x / dimensions.x; coord.y = (float)y / dimensions.y; coord -= center; const float dist = length(scale * coord); const float radian = M_PI_2 - atan((alpha * sqrt(radius2 - dist * dist)) / dist); const float scalar = radian * factor / dist; const float2 new_coord = coord * scalar + center; const float4 fout = rsSample(in_alloc, sampler, new_coord); *out = rsPackColorTo8888(fout); } tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/fisheye_full.rs 0 → 100644 +21 −0 Original line number Diff line number Diff line /* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma version(1) #pragma rs java_package_name(com.android.rs.image) #include "fisheye.rsh" tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/fisheye_relaxed.rs 0 → 100644 +22 −0 Original line number Diff line number Diff line /* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma version(1) #pragma rs java_package_name(com.android.rs.image) #pragma rs_fp_relaxed #include "fisheye.rsh" Loading
tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/Fisheye.java 0 → 100644 +106 −0 Original line number Diff line number Diff line /* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.rs.image; import android.renderscript.Allocation; import android.renderscript.Element; import android.renderscript.Sampler; import android.renderscript.Type; import android.widget.SeekBar; import android.widget.TextView; public class Fisheye extends TestBase { private ScriptC_fisheye_full mScript_full = null; private ScriptC_fisheye_relaxed mScript_relaxed = null; private final boolean relaxed; private float center_x = 0.5f; private float center_y = 0.5f; private float scale = 0.5f; public Fisheye(boolean relaxed) { this.relaxed = relaxed; } public boolean onBar1Setup(SeekBar b, TextView t) { t.setText("Scale"); b.setMax(100); b.setProgress(25); return true; } public boolean onBar2Setup(SeekBar b, TextView t) { t.setText("Shift center X"); b.setMax(100); b.setProgress(50); return true; } public boolean onBar3Setup(SeekBar b, TextView t) { t.setText("Shift center Y"); b.setMax(100); b.setProgress(50); return true; } public void onBar1Changed(int progress) { scale = progress / 50.0f; do_init(); } public void onBar2Changed(int progress) { center_x = progress / 100.0f; do_init(); } public void onBar3Changed(int progress) { center_y = progress / 100.0f; do_init(); } private void do_init() { if (relaxed) mScript_relaxed.invoke_init_filter( mInPixelsAllocation.getType().getX(), mInPixelsAllocation.getType().getY(), center_x, center_y, scale); else mScript_full.invoke_init_filter( mInPixelsAllocation.getType().getX(), mInPixelsAllocation.getType().getY(), center_x, center_y, scale); } public void createTest(android.content.res.Resources res) { if (relaxed) { mScript_relaxed = new ScriptC_fisheye_relaxed(mRS, res, R.raw.fisheye_relaxed); mScript_relaxed.set_in_alloc(mInPixelsAllocation); mScript_relaxed.set_sampler(Sampler.CLAMP_LINEAR(mRS)); } else { mScript_full = new ScriptC_fisheye_full(mRS, res, R.raw.fisheye_full); mScript_full.set_in_alloc(mInPixelsAllocation); mScript_full.set_sampler(Sampler.CLAMP_LINEAR(mRS)); } do_init(); } public void runTest() { if (relaxed) mScript_relaxed.forEach_root(mOutPixelsAllocation); else mScript_full.forEach_root(mOutPixelsAllocation); } }
tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java +9 −1 Original line number Diff line number Diff line Loading @@ -143,6 +143,12 @@ public class ImageProcessingActivity extends Activity case 6: mTest = new Grain(); break; case 7: mTest = new Fisheye(false); break; case 8: mTest = new Fisheye(true); break; } mTest.createBaseTest(this, mBitmapIn); Loading @@ -155,7 +161,7 @@ public class ImageProcessingActivity extends Activity } void setupTests() { mTestNames = new String[7]; mTestNames = new String[9]; mTestNames[0] = "Levels Vec3 Relaxed"; mTestNames[1] = "Levels Vec4 Relaxed"; mTestNames[2] = "Levels Vec3 Full"; Loading @@ -163,6 +169,8 @@ public class ImageProcessingActivity extends Activity mTestNames[4] = "Blur radius 25"; mTestNames[5] = "Greyscale"; mTestNames[6] = "Grain"; mTestNames[7] = "Fisheye Full"; mTestNames[8] = "Fisheye Relaxed"; mTestSpinner.setAdapter(new ArrayAdapter<String>( this, R.layout.spinner_layout, mTestNames)); } Loading
tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/fisheye.rsh 0 → 100644 +63 −0 Original line number Diff line number Diff line /* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ rs_allocation in_alloc; rs_sampler sampler; static float2 center, dimensions; static float2 scale; static float alpha; static float radius2; static float factor; void init_filter(uint32_t dim_x, uint32_t dim_y, float focus_x, float focus_y, float k) { center.x = focus_x; center.y = focus_y; dimensions.x = (float)dim_x; dimensions.y = (float)dim_y; alpha = k * 2.0 + 0.75; float bound2 = 0.25; if (dim_x > dim_y) { scale.x = 1.0; scale.y = dimensions.y / dimensions.x; bound2 *= (scale.y*scale.y + 1); } else { scale.x = dimensions.x / dimensions.y; scale.y = 1.0; bound2 *= (scale.x*scale.x + 1); } const float bound = sqrt(bound2); const float radius = 1.15 * bound; radius2 = radius*radius; const float max_radian = 0.5f * M_PI - atan(alpha / bound * sqrt(radius2 - bound2)); factor = bound / max_radian; } void root(uchar4 *out, uint32_t x, uint32_t y) { // Convert x and y to floating point coordinates with center as origin float2 coord; coord.x = (float)x / dimensions.x; coord.y = (float)y / dimensions.y; coord -= center; const float dist = length(scale * coord); const float radian = M_PI_2 - atan((alpha * sqrt(radius2 - dist * dist)) / dist); const float scalar = radian * factor / dist; const float2 new_coord = coord * scalar + center; const float4 fout = rsSample(in_alloc, sampler, new_coord); *out = rsPackColorTo8888(fout); }
tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/fisheye_full.rs 0 → 100644 +21 −0 Original line number Diff line number Diff line /* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma version(1) #pragma rs java_package_name(com.android.rs.image) #include "fisheye.rsh"
tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/fisheye_relaxed.rs 0 → 100644 +22 −0 Original line number Diff line number Diff line /* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma version(1) #pragma rs java_package_name(com.android.rs.image) #pragma rs_fp_relaxed #include "fisheye.rsh"