blob: 3f167b400f8d10e50c2c7919e0106d88d9d34f66 [file] [log] [blame]
package com.android.rs.kernelvariables;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.ImageFormat;
import android.os.Bundle;
import android.widget.ImageView;
import android.renderscript.*;
public class MainActivity extends Activity {
private Bitmap mBitmapIn;
private Bitmap mBitmapOut;
private ImageView mImageView;
private RenderScript mRS;
private Allocation mInAllocation;
private Allocation mOutAllocation;
private ScriptC_simple mScript;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
mBitmapIn = Bitmap.createBitmap(500, 500, Bitmap.Config.ARGB_8888);
mBitmapOut = Bitmap.createBitmap(mBitmapIn.getWidth(),
mBitmapIn.getHeight(), mBitmapIn.getConfig());
mImageView = (ImageView) findViewById(R.id.imageView);
mImageView.setImageBitmap(mBitmapOut);
createScript();
updateImage();
}
private void createScript() {
mRS = RenderScript.create(this,
RenderScript.ContextType.NORMAL,
RenderScript.CREATE_FLAG_LOW_LATENCY |
RenderScript.CREATE_FLAG_WAIT_FOR_ATTACH);
mInAllocation = Allocation.createFromBitmap(mRS, mBitmapIn);
mOutAllocation = Allocation.createFromBitmap(mRS, mBitmapOut);
mScript = new ScriptC_simple(mRS);
}
private void updateImage() {
int[] buffer_int = {1, 2, 3, 4};
Allocation int_allocation = Allocation.createSized(mRS, Element.I32(mRS), 4);
int_allocation.copyFrom(buffer_int);
mScript.set_allocation_1D_global(int_allocation);
int[] buffer_int2 = {5, 6, 7, 8};
Type.Builder typeI32Builder2D = new Type.Builder(mRS, Element.I32(mRS));
typeI32Builder2D.setX(2);
typeI32Builder2D.setY(2);
Allocation int_allocation2 = Allocation.createTyped(mRS, typeI32Builder2D.create());
int_allocation2.copyFrom(buffer_int2);
mScript.set_allocation_1D_global2(int_allocation2);
mScript.set_allocation_2D_global(mInAllocation);
mScript.set_allocation_2D_global2(mOutAllocation);
int[] buffer_int3 = new int[64];
for (int i=0; i<4*4*4; ++i)
buffer_int3[i] = 9 + i;
Type.Builder typeI32Builder3D = new Type.Builder(mRS, Element.I32(mRS));
typeI32Builder3D.setX(4);
typeI32Builder3D.setY(4);
typeI32Builder3D.setZ(4);
Allocation int_allocation3 = Allocation.createTyped(mRS, typeI32Builder3D.create());
int_allocation3.copyFrom(buffer_int3);
mScript.set_allocation_3D_global(int_allocation3);
Type.Builder yuvTypeBuilder = new Type.Builder(mRS, Element.YUV(mRS));
yuvTypeBuilder.setX(4);
yuvTypeBuilder.setY(4);
yuvTypeBuilder.setYuvFormat(ImageFormat.YV12);
Allocation yuv_allocation = Allocation.createTyped(mRS, yuvTypeBuilder.create());
mScript.set_allocation_YUV_2D_global(yuv_allocation);
mScript.set_sampler_global(Sampler.CLAMP_LINEAR(mRS));
mScript.forEach_kernel(mInAllocation, mOutAllocation);
mOutAllocation.copyTo(mBitmapOut);
}
}