From 716b27b69d8c02da00b0be38d4b7f21bf1698eed Mon Sep 17 00:00:00 2001 From: Jason Sams Date: Wed, 9 Feb 2011 17:11:28 -0800 Subject: Basic 101 level compute example for RS. Change-Id: Ic196ebdf558c1b9661182e191e31d7f62448e73a --- libs/rs/java/HelloCompute/Android.mk | 31 +++++++++ libs/rs/java/HelloCompute/AndroidManifest.xml | 30 ++++++++ libs/rs/java/HelloCompute/res/drawable/data.jpg | Bin 0 -> 76367 bytes libs/rs/java/HelloCompute/res/layout/main.xml | 31 +++++++++ .../android/example/hellocompute/HelloCompute.java | 77 +++++++++++++++++++++ .../src/com/android/example/hellocompute/mono.rs | 36 ++++++++++ 6 files changed, 205 insertions(+) create mode 100644 libs/rs/java/HelloCompute/Android.mk create mode 100644 libs/rs/java/HelloCompute/AndroidManifest.xml create mode 100644 libs/rs/java/HelloCompute/res/drawable/data.jpg create mode 100644 libs/rs/java/HelloCompute/res/layout/main.xml create mode 100644 libs/rs/java/HelloCompute/src/com/android/example/hellocompute/HelloCompute.java create mode 100644 libs/rs/java/HelloCompute/src/com/android/example/hellocompute/mono.rs (limited to 'libs/rs/java') diff --git a/libs/rs/java/HelloCompute/Android.mk b/libs/rs/java/HelloCompute/Android.mk new file mode 100644 index 0000000..3881bb0 --- /dev/null +++ b/libs/rs/java/HelloCompute/Android.mk @@ -0,0 +1,31 @@ +# +# Copyright (C) 2011 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. +# + +ifneq ($(TARGET_SIMULATOR),true) + +LOCAL_PATH := $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_MODULE_TAGS := optional + +LOCAL_SRC_FILES := $(call all-java-files-under, src) \ + $(call all-renderscript-files-under, src) + +LOCAL_PACKAGE_NAME := HelloCompute + +include $(BUILD_PACKAGE) + +endif diff --git a/libs/rs/java/HelloCompute/AndroidManifest.xml b/libs/rs/java/HelloCompute/AndroidManifest.xml new file mode 100644 index 0000000..8c7ac2f --- /dev/null +++ b/libs/rs/java/HelloCompute/AndroidManifest.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + diff --git a/libs/rs/java/HelloCompute/res/drawable/data.jpg b/libs/rs/java/HelloCompute/res/drawable/data.jpg new file mode 100644 index 0000000..81a87b1 Binary files /dev/null and b/libs/rs/java/HelloCompute/res/drawable/data.jpg differ diff --git a/libs/rs/java/HelloCompute/res/layout/main.xml b/libs/rs/java/HelloCompute/res/layout/main.xml new file mode 100644 index 0000000..3f7de43 --- /dev/null +++ b/libs/rs/java/HelloCompute/res/layout/main.xml @@ -0,0 +1,31 @@ + + + + + + + + + + diff --git a/libs/rs/java/HelloCompute/src/com/android/example/hellocompute/HelloCompute.java b/libs/rs/java/HelloCompute/src/com/android/example/hellocompute/HelloCompute.java new file mode 100644 index 0000000..123c37b --- /dev/null +++ b/libs/rs/java/HelloCompute/src/com/android/example/hellocompute/HelloCompute.java @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2011 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.example.hellocompute; + +import android.app.Activity; +import android.os.Bundle; +import android.graphics.BitmapFactory; +import android.graphics.Bitmap; +import android.renderscript.RenderScript; +import android.renderscript.Allocation; +import android.widget.ImageView; + +public class HelloCompute extends Activity { + private Bitmap mBitmapIn; + private Bitmap mBitmapOut; + + private RenderScript mRS; + private Allocation mInAllocation; + private Allocation mOutAllocation; + private ScriptC_mono mScript; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.main); + + mBitmapIn = loadBitmap(R.drawable.data); + mBitmapOut = Bitmap.createBitmap(mBitmapIn.getWidth(), mBitmapIn.getHeight(), + mBitmapIn.getConfig()); + + ImageView in = (ImageView) findViewById(R.id.displayin); + in.setImageBitmap(mBitmapIn); + + ImageView out = (ImageView) findViewById(R.id.displayout); + out.setImageBitmap(mBitmapOut); + + createScript(); + } + + + private void createScript() { + mRS = RenderScript.create(this); + + mInAllocation = Allocation.createFromBitmap(mRS, mBitmapIn, + Allocation.MipmapControl.MIPMAP_NONE, + Allocation.USAGE_SCRIPT); + mOutAllocation = Allocation.createTyped(mRS, mInAllocation.getType()); + + mScript = new ScriptC_mono(mRS, getResources(), R.raw.mono); + + mScript.set_gIn(mInAllocation); + mScript.set_gOut(mOutAllocation); + mScript.set_gScript(mScript); + mScript.invoke_filter(); + mOutAllocation.copyTo(mBitmapOut); + } + + private Bitmap loadBitmap(int resource) { + final BitmapFactory.Options options = new BitmapFactory.Options(); + options.inPreferredConfig = Bitmap.Config.ARGB_8888; + return BitmapFactory.decodeResource(getResources(), resource, options); + } +} diff --git a/libs/rs/java/HelloCompute/src/com/android/example/hellocompute/mono.rs b/libs/rs/java/HelloCompute/src/com/android/example/hellocompute/mono.rs new file mode 100644 index 0000000..9647c61 --- /dev/null +++ b/libs/rs/java/HelloCompute/src/com/android/example/hellocompute/mono.rs @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2011 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.example.hellocompute) + +rs_allocation gIn; +rs_allocation gOut; +rs_script gScript; + +const static float3 gMonoMult = {0.299f, 0.587f, 0.114f}; + +void root(const uchar4 *v_in, uchar4 *v_out, const void *usrData, uint32_t x, uint32_t y) { + float4 f4 = rsUnpackColor8888(*v_in); + + float3 mono = dot(f4.rgb, gMonoMult); + *v_out = rsPackColorTo8888(mono); +} + +void filter() { + rsForEach(gScript, gIn, gOut, 0); +} + -- cgit v1.1