From 6b9cb41efc17c2731a2762c1ac6071ba5684af63 Mon Sep 17 00:00:00 2001 From: Jason Sams Date: Fri, 10 Apr 2015 14:56:09 -0700 Subject: Merge IP changes over to IP_JB Add screen on lock during test run. Change-Id: Icbd7d41af41d2842c0fe83cfab4e86f21862e697 --- java/tests/ImageProcessing_jb/Android.mk | 1 - .../src/com/android/rs/image/Histogram.java | 83 +++++++++++++++++++++ .../src/com/android/rs/image/IPTestListJB.java | 8 ++- .../rs/image/ImageProcessingActivityJB.java | 2 + .../src/com/android/rs/image/WhiteBalance.java | 13 +++- .../src/com/android/rs/image/exposure.rs | 7 +- .../src/com/android/rs/image/histogram.rs | 84 ++++++++++++++++++++++ .../src/com/android/rs/image/wbalance.rs | 42 ++++------- 8 files changed, 201 insertions(+), 39 deletions(-) create mode 100644 java/tests/ImageProcessing_jb/src/com/android/rs/image/Histogram.java create mode 100644 java/tests/ImageProcessing_jb/src/com/android/rs/image/histogram.rs (limited to 'java/tests') 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; } - -- cgit v1.2.3