summaryrefslogtreecommitdiff
path: root/java/tests
diff options
context:
space:
mode:
authorJason Sams <jsams@google.com>2015-04-10 14:56:09 -0700
committerJason Sams <jsams@google.com>2015-04-10 14:56:09 -0700
commit6b9cb41efc17c2731a2762c1ac6071ba5684af63 (patch)
tree1a480d6d135d4fd765cec573dfbfbf1b723aae65 /java/tests
parent6363723cacc46cfdf473f9c0579e661920f0901c (diff)
downloadrs-6b9cb41efc17c2731a2762c1ac6071ba5684af63.tar.gz
Merge IP changes over to IP_JB
Add screen on lock during test run. Change-Id: Icbd7d41af41d2842c0fe83cfab4e86f21862e697
Diffstat (limited to 'java/tests')
-rw-r--r--java/tests/ImageProcessing_jb/Android.mk1
-rw-r--r--java/tests/ImageProcessing_jb/src/com/android/rs/image/Histogram.java83
-rw-r--r--java/tests/ImageProcessing_jb/src/com/android/rs/image/IPTestListJB.java8
-rw-r--r--java/tests/ImageProcessing_jb/src/com/android/rs/image/ImageProcessingActivityJB.java2
-rw-r--r--java/tests/ImageProcessing_jb/src/com/android/rs/image/WhiteBalance.java13
-rw-r--r--java/tests/ImageProcessing_jb/src/com/android/rs/image/exposure.rs7
-rw-r--r--java/tests/ImageProcessing_jb/src/com/android/rs/image/histogram.rs84
-rw-r--r--java/tests/ImageProcessing_jb/src/com/android/rs/image/wbalance.rs42
8 files changed, 201 insertions, 39 deletions
diff --git a/java/tests/ImageProcessing_jb/Android.mk b/java/tests/ImageProcessing_jb/Android.mk
index 4893be9d..1e58e2db 100644
--- a/java/tests/ImageProcessing_jb/Android.mk
+++ b/java/tests/ImageProcessing_jb/Android.mk
@@ -26,6 +26,5 @@ LOCAL_SRC_FILES := $(call all-java-files-under, src) \
#LOCAL_STATIC_JAVA_LIBRARIES := android.renderscript
LOCAL_PACKAGE_NAME := ImageProcessingJB
-#LOCAL_SDK_VERSION := 18
include $(BUILD_PACKAGE)
diff --git a/java/tests/ImageProcessing_jb/src/com/android/rs/image/Histogram.java b/java/tests/ImageProcessing_jb/src/com/android/rs/image/Histogram.java
new file mode 100644
index 00000000..0106c2ec
--- /dev/null
+++ b/java/tests/ImageProcessing_jb/src/com/android/rs/image/Histogram.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2013 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.imagejb;
+
+import java.lang.Math;
+
+import android.renderscript.*;
+import android.util.Log;
+
+public class Histogram extends TestBase {
+ private ScriptC_histogram mScript;
+ private ScriptIntrinsicHistogram mHist;
+ private Allocation mSum;
+ private Allocation mSums;
+ private boolean mUseIntrinsic;
+
+ public Histogram(boolean useIntrisic) {
+ mUseIntrinsic = useIntrisic;
+ }
+
+
+ public void createTest(android.content.res.Resources res) {
+ mScript = new ScriptC_histogram(mRS);
+ mHist = ScriptIntrinsicHistogram.create(mRS, Element.U8_4(mRS));
+
+ int w = mInPixelsAllocation.getType().getX();
+ int h = mInPixelsAllocation.getType().getY();
+ int step = 8;
+ int steps = (h + step - 1) / step;
+
+ mScript.set_gWidth(w);
+ mScript.set_gHeight(h);
+ mScript.set_gStep(step);
+ mScript.set_gSteps(steps);
+
+ Type.Builder tb = new Type.Builder(mRS, Element.I32(mRS));
+ tb.setX(256).setY(steps);
+ Type t = tb.create();
+ mSums = Allocation.createTyped(mRS, t);
+ mSum = Allocation.createSized(mRS, Element.I32(mRS), 256);
+
+ mScript.set_gSums(mSums);
+ mScript.set_gSum(mSum);
+ mScript.set_gSrc(mInPixelsAllocation);
+ mScript.set_gDest(mOutPixelsAllocation);
+
+ mScript.forEach_clear(mOutPixelsAllocation);
+ }
+
+
+
+ public void runTest() {
+ Script.LaunchOptions lo = new Script.LaunchOptions();
+
+ if (mUseIntrinsic) {
+ mHist.setOutput(mSum);
+ mHist.forEach_Dot(mInPixelsAllocation);
+ } else {
+ lo.setX(0, 1);
+ mScript.forEach_pass1(mSums, lo);
+ mScript.forEach_pass2(mSum);
+ }
+
+ mScript.invoke_rescale();
+ lo.setX(0, 1024);
+ mScript.forEach_draw(mOutPixelsAllocation, lo);
+ }
+
+}
diff --git a/java/tests/ImageProcessing_jb/src/com/android/rs/image/IPTestListJB.java b/java/tests/ImageProcessing_jb/src/com/android/rs/image/IPTestListJB.java
index b03171fe..5e3502dc 100644
--- a/java/tests/ImageProcessing_jb/src/com/android/rs/image/IPTestListJB.java
+++ b/java/tests/ImageProcessing_jb/src/com/android/rs/image/IPTestListJB.java
@@ -75,7 +75,9 @@ public class IPTestListJB {
RESIZE_BI_SCRIPT ("Resize BiCubic Script", RELAXED_FP, 253.f),
RESIZE_BI_INTRINSIC ("Resize BiCubic Intrinsic", INTRINSIC, 255.f),
POSTERIZE_INVOKE ("Posterize with invoke", RELAXED_FP, 215.f),
- POSTERIZE_SET ("Posterize with set", INTRINSIC, 221.f);
+ POSTERIZE_SET ("Posterize with set", INTRINSIC, 221.f),
+ HISTOGRAM_SCRIPT ("Histogram script", RELAXED_FP, 20.f),
+ HISTOGRAM_INTRINSIC ("Histogram intrinsic", INTRINSIC, 18.f);
private final String name;
@@ -189,6 +191,10 @@ public class IPTestListJB {
return new Posterize(true);
case POSTERIZE_SET:
return new Posterize(false);
+ case HISTOGRAM_SCRIPT:
+ return new Histogram(false);
+ case HISTOGRAM_INTRINSIC:
+ return new Histogram(true);
}
return null;
}
diff --git a/java/tests/ImageProcessing_jb/src/com/android/rs/image/ImageProcessingActivityJB.java b/java/tests/ImageProcessing_jb/src/com/android/rs/image/ImageProcessingActivityJB.java
index e49e9cc8..ac1bc6e8 100644
--- a/java/tests/ImageProcessing_jb/src/com/android/rs/image/ImageProcessingActivityJB.java
+++ b/java/tests/ImageProcessing_jb/src/com/android/rs/image/ImageProcessingActivityJB.java
@@ -32,6 +32,7 @@ import android.view.TextureView;
import android.view.Surface;
import android.graphics.SurfaceTexture;
import android.graphics.Point;
+import android.view.WindowManager;
import android.util.Log;
import android.renderscript.ScriptC;
@@ -624,6 +625,7 @@ public class ImageProcessingActivityJB extends Activity
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
+ getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
mDisplayView = (SizedTV) findViewById(R.id.display);
diff --git a/java/tests/ImageProcessing_jb/src/com/android/rs/image/WhiteBalance.java b/java/tests/ImageProcessing_jb/src/com/android/rs/image/WhiteBalance.java
index 25c4ff9c..49796783 100644
--- a/java/tests/ImageProcessing_jb/src/com/android/rs/image/WhiteBalance.java
+++ b/java/tests/ImageProcessing_jb/src/com/android/rs/image/WhiteBalance.java
@@ -18,18 +18,25 @@ package com.android.rs.imagejb;
import java.lang.Math;
+import android.renderscript.Allocation;
+import android.renderscript.Element;
+import android.renderscript.ScriptIntrinsicHistogram;
public class WhiteBalance extends TestBase {
private ScriptC_wbalance mScript;
+ private ScriptIntrinsicHistogram mHist;
+ private Allocation mSums;
public void createTest(android.content.res.Resources res) {
mScript = new ScriptC_wbalance(mRS);
+ mHist = ScriptIntrinsicHistogram.create(mRS, Element.U8_4(mRS));
+ mSums = Allocation.createSized(mRS, Element.I32_3(mRS), 256);
+ mHist.setOutput(mSums);
+ mScript.set_histogramValues(mSums);
}
public void runTest() {
- mScript.set_histogramSource(mInPixelsAllocation);
- mScript.set_histogramWidth(mInPixelsAllocation.getType().getX());
- mScript.set_histogramHeight(mInPixelsAllocation.getType().getY());
+ mHist.forEach(mInPixelsAllocation);
mScript.invoke_prepareWhiteBalance();
mScript.forEach_whiteBalanceKernel(mInPixelsAllocation, mOutPixelsAllocation);
}
diff --git a/java/tests/ImageProcessing_jb/src/com/android/rs/image/exposure.rs b/java/tests/ImageProcessing_jb/src/com/android/rs/image/exposure.rs
index cd9e733a..5239e4e6 100644
--- a/java/tests/ImageProcessing_jb/src/com/android/rs/image/exposure.rs
+++ b/java/tests/ImageProcessing_jb/src/com/android/rs/image/exposure.rs
@@ -25,10 +25,9 @@ void setBright(float v) {
uchar4 RS_KERNEL exposure(uchar4 in)
{
- uchar4 out = 0;
- out.r = rsClamp((int)(bright * in.r), 0, 255);
- out.g = rsClamp((int)(bright * in.g), 0, 255);
- out.b = rsClamp((int)(bright * in.b), 0, 255);
+ uchar4 out = {0, 0, 0, 255};
+ float3 t = convert_float3(in.rgb);
+ out.rgb = convert_uchar3(clamp(convert_int3(t * bright), 0, 255));
return out;
}
diff --git a/java/tests/ImageProcessing_jb/src/com/android/rs/image/histogram.rs b/java/tests/ImageProcessing_jb/src/com/android/rs/image/histogram.rs
new file mode 100644
index 00000000..f34fcad7
--- /dev/null
+++ b/java/tests/ImageProcessing_jb/src/com/android/rs/image/histogram.rs
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2013 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.
+ */
+
+#include "ip.rsh"
+
+rs_allocation gSrc;
+rs_allocation gDest;
+rs_allocation gSums;
+rs_allocation gSum;
+
+int gWidth;
+int gHeight;
+int gStep;
+int gSteps;
+
+void RS_KERNEL pass1(int in, uint x, uint y) {
+ for (int i=0; i < (256); i++) {
+ rsSetElementAt_int(gSums, 0, i, y);
+ }
+
+ for (int i = 0; i < gStep; i++) {
+ int py = y*gStep + i;
+ if (py >= gHeight) return;
+
+ for (int px=0; px < gWidth; px++) {
+ uchar4 c = rsGetElementAt_uchar4(gSrc, px, py);
+ int lum = (77 * c.r + 150 * c.g + 29 * c.b) >> 8;
+
+ int old = rsGetElementAt_int(gSums, lum, y);
+ rsSetElementAt_int(gSums, old+1, lum, y);
+ }
+ }
+}
+
+int RS_KERNEL pass2(uint x) {
+ int sum = 0;
+ for (int i=0; i < gSteps; i++) {
+ sum += rsGetElementAt_int(gSums, x, i);
+ }
+ return sum;
+}
+
+void rescale() {
+ int maxv = 0;
+
+ for (int i=0; i < 256; i++) {
+ maxv = max(maxv, rsGetElementAt_int(gSum, i));
+ }
+ float overMax = (1.f / maxv) * gHeight;
+
+ for (int i=0; i < 256; i++) {
+ int t = rsGetElementAt_int(gSum, i);
+ t = gHeight - (overMax * rsGetElementAt_int(gSum, i));
+ t = max(0, t);
+ rsSetElementAt_int(gSum, t, i);
+ }
+}
+
+static const uchar4 gClear = {0, 0, 0, 0xff};
+
+uchar4 RS_KERNEL clear() {
+ return gClear;
+}
+
+uchar4 RS_KERNEL draw(uint x, uint y) {
+ int l = rsGetElementAt_int(gSum, x >> 2);
+ if (y > l) {
+ return 0xff;
+ }
+ return gClear;
+}
diff --git a/java/tests/ImageProcessing_jb/src/com/android/rs/image/wbalance.rs b/java/tests/ImageProcessing_jb/src/com/android/rs/image/wbalance.rs
index 58f64d10..c46c4912 100644
--- a/java/tests/ImageProcessing_jb/src/com/android/rs/image/wbalance.rs
+++ b/java/tests/ImageProcessing_jb/src/com/android/rs/image/wbalance.rs
@@ -17,37 +17,19 @@
#include "ip.rsh"
#pragma rs_fp_relaxed
-static int histR[256] = {0}, histG[256] = {0}, histB[256] = {0};
-
-rs_allocation histogramSource;
-uint32_t histogramHeight;
-uint32_t histogramWidth;
-
+rs_allocation histogramValues;
static float3 scale;
static uchar4 estimateWhite() {
-
- for (int i = 0; i < 256; i++) {
- histR[i] = 0; histG[i] = 0; histB[i] = 0;
- }
-
- for (uint32_t i = 0; i < histogramHeight; i++) {
- for (uint32_t j = 0; j < histogramWidth; j++) {
- uchar4 in = rsGetElementAt_uchar4(histogramSource, j, i);
- histR[in.r]++;
- histG[in.g]++;
- histB[in.b]++;
- }
- }
-
int min_r = -1, min_g = -1, min_b = -1;
int max_r = 0, max_g = 0, max_b = 0;
int sum_r = 0, sum_g = 0, sum_b = 0;
for (int i = 1; i < 255; i++) {
- int r = histR[i];
- int g = histG[i];
- int b = histB[i];
+ int4 hv = rsGetElementAt_int4(histogramValues, i);
+ int r = hv.r;
+ int g = hv.g;
+ int b = hv.b;
sum_r += r;
sum_g += g;
sum_b += b;
@@ -71,9 +53,10 @@ static uchar4 estimateWhite() {
int tmp_r = 0, tmp_g = 0, tmp_b = 0;
for (int i = 254; i >0; i--) {
- int r = histR[i];
- int g = histG[i];
- int b = histB[i];
+ int4 hv = rsGetElementAt_int4(histogramValues, i);
+ int r = hv.r;
+ int g = hv.g;
+ int b = hv.b;
tmp_r += r;
tmp_g += g;
tmp_b += b;
@@ -113,9 +96,9 @@ void prepareWhiteBalance() {
int maximum = max(estimation.r, max(estimation.g, estimation.b));
float avg = (minimum + maximum) / 2.f;
- scale.r = avg/estimation.r;
- scale.g = avg/estimation.g;
- scale.b = avg/estimation.b;
+ scale.r = avg / estimation.r;
+ scale.g = avg / estimation.g;
+ scale.b = avg / estimation.b;
}
uchar4 RS_KERNEL whiteBalanceKernel(uchar4 in) {
@@ -128,4 +111,3 @@ uchar4 RS_KERNEL whiteBalanceKernel(uchar4 in) {
out.a = 255;
return out;
}
-