diff options
author | Jason Sams <jsams@google.com> | 2012-08-10 15:40:53 -0700 |
---|---|---|
committer | Jason Sams <jsams@google.com> | 2012-08-10 16:02:33 -0700 |
commit | 423ebcb4dc4881c3a83e8121d5212466287d0d0c (patch) | |
tree | b8ad64ce2954386060441c9726e0d81e57b7e308 /tests/RenderScriptTests/ImageProcessing/src/com/android/rs | |
parent | 6cc7a9276bdad8b230e35141204c949291350f0b (diff) | |
download | frameworks_base-423ebcb4dc4881c3a83e8121d5212466287d0d0c.zip frameworks_base-423ebcb4dc4881c3a83e8121d5212466287d0d0c.tar.gz frameworks_base-423ebcb4dc4881c3a83e8121d5212466287d0d0c.tar.bz2 |
Implement ScriptGroup and add test.
Change-Id: I6ce0479c20f425d501c759c15717aa8b418c3f5f
Diffstat (limited to 'tests/RenderScriptTests/ImageProcessing/src/com/android/rs')
4 files changed, 213 insertions, 1 deletions
diff --git a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/GroupTest.java b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/GroupTest.java new file mode 100644 index 0000000..732da4e --- /dev/null +++ b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/GroupTest.java @@ -0,0 +1,94 @@ +/* + * 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 java.lang.Math; + +import android.renderscript.Allocation; +import android.renderscript.Element; +import android.renderscript.RenderScript; +import android.renderscript.Script; +import android.renderscript.ScriptC; +import android.renderscript.Type; +import android.renderscript.Matrix4f; +import android.renderscript.ScriptGroup; +import android.util.Log; + +public class GroupTest extends TestBase { + private ScriptC_convolve3x3 mConvolve; + private ScriptC_colormatrix mMatrix; + + private Allocation mScratchPixelsAllocation1; + private ScriptGroup mGroup; + + private int mWidth; + private int mHeight; + private boolean mUseNative; + + + public GroupTest(boolean useNative) { + mUseNative = useNative; + } + + public void createTest(android.content.res.Resources res) { + mWidth = mInPixelsAllocation.getType().getX(); + mHeight = mInPixelsAllocation.getType().getY(); + + mConvolve = new ScriptC_convolve3x3(mRS, res, R.raw.convolve3x3); + mMatrix = new ScriptC_colormatrix(mRS, res, R.raw.colormatrix); + + float f[] = new float[9]; + f[0] = 0.f; f[1] = -1.f; f[2] = 0.f; + f[3] = -1.f; f[4] = 5.f; f[5] = -1.f; + f[6] = 0.f; f[7] = -1.f; f[8] = 0.f; + mConvolve.set_gCoeffs(f); + + Matrix4f m = new Matrix4f(); + m.set(1, 0, 0.2f); + m.set(1, 1, 0.9f); + m.set(1, 2, 0.2f); + mMatrix.invoke_setMatrix(m); + + Type.Builder tb = new Type.Builder(mRS, Element.U8_4(mRS)); + tb.setX(mWidth); + tb.setY(mHeight); + Type connect = tb.create(); + + if (mUseNative) { + ScriptGroup.Builder b = new ScriptGroup.Builder(mRS); + b.addConnection(connect, mConvolve, mMatrix, null); + mGroup = b.create(); + + } else { + mScratchPixelsAllocation1 = Allocation.createTyped(mRS, connect); + } + } + + public void runTest() { + mConvolve.set_gIn(mInPixelsAllocation); + mConvolve.set_gWidth(mWidth); + mConvolve.set_gHeight(mHeight); + if (mUseNative) { + mGroup.setOutput(mMatrix, mOutPixelsAllocation); + mGroup.execute(); + } else { + mConvolve.forEach_root(mScratchPixelsAllocation1); + mMatrix.forEach_root(mScratchPixelsAllocation1, mOutPixelsAllocation); + } + } + +} diff --git a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java index d9cbf81..7cd485e 100644 --- a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java +++ b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java @@ -161,6 +161,12 @@ public class ImageProcessingActivity extends Activity case 12: mTest = new Vignette(true, true); break; + case 13: + mTest = new GroupTest(true); + break; + case 14: + mTest = new GroupTest(false); + break; } mTest.createBaseTest(this, mBitmapIn); @@ -173,7 +179,7 @@ public class ImageProcessingActivity extends Activity } void setupTests() { - mTestNames = new String[13]; + mTestNames = new String[15]; mTestNames[0] = "Levels Vec3 Relaxed"; mTestNames[1] = "Levels Vec4 Relaxed"; mTestNames[2] = "Levels Vec3 Full"; @@ -187,6 +193,8 @@ public class ImageProcessingActivity extends Activity mTestNames[10] = "Vignette Relaxed"; mTestNames[11] = "Vignette Approximate Full"; mTestNames[12] = "Vignette Approximate Relaxed"; + mTestNames[13] = "Group Test (emulated)"; + mTestNames[14] = "Group Test (native)"; mTestSpinner.setAdapter(new ArrayAdapter<String>( this, R.layout.spinner_layout, mTestNames)); } diff --git a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/colormatrix.rs b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/colormatrix.rs new file mode 100644 index 0000000..a83e819 --- /dev/null +++ b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/colormatrix.rs @@ -0,0 +1,38 @@ +/* + * 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 + + +static rs_matrix4x4 Mat; + +void init() { + rsMatrixLoadIdentity(&Mat); +} + +void setMatrix(rs_matrix4x4 m) { + Mat = m; +} + +void root(const uchar4 *in, uchar4 *out) { + float4 f = convert_float4(*in); + f = rsMatrixMultiply(&Mat, f); + f = clamp(f, 0.f, 255.f); + *out = convert_uchar4(f); +} + diff --git a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/convolve3x3.rs b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/convolve3x3.rs new file mode 100644 index 0000000..d3e6a4d --- /dev/null +++ b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/convolve3x3.rs @@ -0,0 +1,72 @@ +/* + * 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 + +int32_t gWidth; +int32_t gHeight; +rs_allocation gIn; + +float gCoeffs[9] ; +void setCoefficients(float coef[9]) { + for(int i=0; i < 9; i++) { + gCoeffs[i] = coef[i]; + } +} + +void root(uchar4 *out, uint32_t x, uint32_t y) { + uint32_t x1 = min((int32_t)x+1, gWidth); + uint32_t x2 = max((int32_t)x-1, 0); + uint32_t y1 = min((int32_t)y+1, gHeight); + uint32_t y2 = max((int32_t)y-1, 0); + + float4 p00 = convert_float4(((uchar4 *)rsGetElementAt(gIn, x1, y1))[0]); + float4 p01 = convert_float4(((uchar4 *)rsGetElementAt(gIn, x, y1))[0]); + float4 p02 = convert_float4(((uchar4 *)rsGetElementAt(gIn, x2, y1))[0]); + float4 p10 = convert_float4(((uchar4 *)rsGetElementAt(gIn, x1, y))[0]); + float4 p11 = convert_float4(((uchar4 *)rsGetElementAt(gIn, x, y))[0]); + float4 p12 = convert_float4(((uchar4 *)rsGetElementAt(gIn, x2, y))[0]); + float4 p20 = convert_float4(((uchar4 *)rsGetElementAt(gIn, x1, y2))[0]); + float4 p21 = convert_float4(((uchar4 *)rsGetElementAt(gIn, x, y2))[0]); + float4 p22 = convert_float4(((uchar4 *)rsGetElementAt(gIn, x2, y2))[0]); + p00 *= gCoeffs[0]; + p01 *= gCoeffs[1]; + p02 *= gCoeffs[2]; + p10 *= gCoeffs[3]; + p11 *= gCoeffs[4]; + p12 *= gCoeffs[5]; + p20 *= gCoeffs[6]; + p21 *= gCoeffs[7]; + p22 *= gCoeffs[8]; + + p00 += p01; + p02 += p10; + p11 += p12; + p20 += p21; + + p22 += p00; + p02 += p11; + + p20 += p22; + p20 += p02; + + p20 = clamp(p20, 0.f, 255.f); + *out = convert_uchar4(p20); +} + + |