diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java index 2032f67568952..af8b0c29d2a05 100644 --- a/graphics/java/android/renderscript/RenderScript.java +++ b/graphics/java/android/renderscript/RenderScript.java @@ -561,6 +561,12 @@ public class RenderScript { return rsnScriptCCreate(mContext, resName, cacheDir, script, length); } + native int rsnScriptIntrinsicCreate(int con, int id, int eid); + synchronized int nScriptIntrinsicCreate(int id, int eid) { + validate(); + return rsnScriptIntrinsicCreate(mContext, id, eid); + } + native int rsnSamplerCreate(int con, int magFilter, int minFilter, int wrapS, int wrapT, int wrapR, float aniso); synchronized int nSamplerCreate(int magFilter, int minFilter, diff --git a/graphics/java/android/renderscript/ScriptIntrinsic.java b/graphics/java/android/renderscript/ScriptIntrinsic.java new file mode 100644 index 0000000000000..6ad1527d05af4 --- /dev/null +++ b/graphics/java/android/renderscript/ScriptIntrinsic.java @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2008 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 android.renderscript; + +import android.content.Context; +import android.content.res.Resources; +import android.util.Log; + + +/** + * @hide + **/ +public class ScriptIntrinsic extends Script { + ScriptIntrinsic(int id, RenderScript rs) { + super(id, rs); + } + + public void forEach(Allocation ain, Allocation aout) { + forEach(0, ain, aout, null); + } +} diff --git a/graphics/java/android/renderscript/ScriptIntrinsicConvolve3x3.java b/graphics/java/android/renderscript/ScriptIntrinsicConvolve3x3.java new file mode 100644 index 0000000000000..0ae1449800629 --- /dev/null +++ b/graphics/java/android/renderscript/ScriptIntrinsicConvolve3x3.java @@ -0,0 +1,65 @@ +/* + * 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 android.renderscript; + +import android.content.Context; +import android.content.res.Resources; +import android.util.Log; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.Map.Entry; +import java.util.HashMap; + + +/** + * @hide + **/ +public class ScriptIntrinsicConvolve3x3 extends ScriptIntrinsic { + private float[] mValues = new float[9]; + + ScriptIntrinsicConvolve3x3(int id, RenderScript rs) { + super(id, rs); + } + + /** + * Supported elements types are float, float4, uchar, uchar4 + * + * + * @param rs + * @param e + * + * @return ScriptIntrinsicConvolve3x3 + */ + public static ScriptIntrinsicConvolve3x3 create(RenderScript rs, Element e) { + int id = rs.nScriptIntrinsicCreate(1, e.getID(rs)); + return new ScriptIntrinsicConvolve3x3(id, rs); + + } + + + public void setValues(float v[]) { + FieldPacker fp = new FieldPacker(9*4); + for (int ct=0; ct < mValues.length; ct++) { + mValues[ct] = v[ct]; + fp.addF32(mValues[ct]); + } + setVar(0, fp); + } +} + diff --git a/graphics/java/android/renderscript/ScriptIntrinsicYuvToRGB.java b/graphics/java/android/renderscript/ScriptIntrinsicYuvToRGB.java new file mode 100644 index 0000000000000..ee5f938ec436b --- /dev/null +++ b/graphics/java/android/renderscript/ScriptIntrinsicYuvToRGB.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2008 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 android.renderscript; + +import android.content.Context; +import android.content.res.Resources; +import android.util.Log; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.Map.Entry; +import java.util.HashMap; + +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; + +/** + * @hide + **/ +public class ScriptIntrinsicYuvToRGB extends ScriptIntrinsic { + ScriptIntrinsicYuvToRGB(int id, RenderScript rs) { + super(id, rs); + } + + + + public static class Builder { + RenderScript mRS; + + public Builder(RenderScript rs) { + mRS = rs; + } + + public void setInputFormat(int inputFormat) { + + } + + public void setOutputFormat(Element e) { + + } + + public ScriptIntrinsicYuvToRGB create() { + return null; + + } + + } + +} diff --git a/graphics/jni/android_renderscript_RenderScript.cpp b/graphics/jni/android_renderscript_RenderScript.cpp index 09f69527cd417..a073c1aef8f74 100644 --- a/graphics/jni/android_renderscript_RenderScript.cpp +++ b/graphics/jni/android_renderscript_RenderScript.cpp @@ -1071,6 +1071,13 @@ exit: return ret; } +static jint +nScriptIntrinsicCreate(JNIEnv *_env, jobject _this, RsContext con, jint id, jint eid) +{ + LOG_API("nScriptIntrinsicCreate, con(%p) id(%i) element(%p)", con, id, (void *)eid); + return (jint)rsScriptIntrinsicCreate(con, id, (RsElement)eid); +} + // --------------------------------------------------------------------------- static jint @@ -1412,6 +1419,7 @@ static JNINativeMethod methods[] = { {"rsnScriptSetVarObj", "(IIII)V", (void*)nScriptSetVarObj }, {"rsnScriptCCreate", "(ILjava/lang/String;Ljava/lang/String;[BI)I", (void*)nScriptCCreate }, +{"rsnScriptIntrinsicCreate", "(III)I", (void*)nScriptIntrinsicCreate }, {"rsnProgramStoreCreate", "(IZZZZZZIII)I", (void*)nProgramStoreCreate }, 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 7cd485ebedd38..3eec7f5bf0e01 100644 --- a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java +++ b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java @@ -167,6 +167,9 @@ public class ImageProcessingActivity extends Activity case 14: mTest = new GroupTest(false); break; + case 15: + mTest = new Intrinsics(0); + break; } mTest.createBaseTest(this, mBitmapIn); @@ -179,7 +182,7 @@ public class ImageProcessingActivity extends Activity } void setupTests() { - mTestNames = new String[15]; + mTestNames = new String[16]; mTestNames[0] = "Levels Vec3 Relaxed"; mTestNames[1] = "Levels Vec4 Relaxed"; mTestNames[2] = "Levels Vec3 Full"; @@ -195,6 +198,7 @@ public class ImageProcessingActivity extends Activity mTestNames[12] = "Vignette Approximate Relaxed"; mTestNames[13] = "Group Test (emulated)"; mTestNames[14] = "Group Test (native)"; + mTestNames[15] = "Intrinsics Convolve 3x3"; mTestSpinner.setAdapter(new ArrayAdapter( this, R.layout.spinner_layout, mTestNames)); } diff --git a/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/Intrinsics.java b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/Intrinsics.java new file mode 100644 index 0000000000000..ea8a018550164 --- /dev/null +++ b/tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/Intrinsics.java @@ -0,0 +1,62 @@ +/* + * 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.ScriptIntrinsicConvolve3x3; +import android.renderscript.Type; +import android.util.Log; +import android.widget.SeekBar; +import android.widget.TextView; + +public class Intrinsics extends TestBase { + private ScriptIntrinsicConvolve3x3 mScript; + + Intrinsics(int id) { + } + + public boolean onBar1Setup(SeekBar b, TextView t) { + t.setText("Strength"); + b.setProgress(50); + return true; + } + + public void onBar1Changed(int progress) { + float s = progress / 100.0f; + float v[] = new float[9]; + v[0] = 0.f; v[1] = -s; v[2] = 0.f; + v[3] = -s; v[4] = s*4+1; v[5] = -s; + v[6] = 0.f; v[7] = -s; v[8] = 0.f; + mScript.setValues(v); + } + + + public void createTest(android.content.res.Resources res) { + mScript = ScriptIntrinsicConvolve3x3.create(mRS, Element.RGBA_8888(mRS)); + } + + public void runTest() { + mScript.forEach(mInPixelsAllocation, mOutPixelsAllocation); + } + +} +