Loading tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/Grain.java +25 −4 Original line number Diff line number Diff line Loading @@ -45,19 +45,40 @@ public class Grain extends TestBase { mScript.set_gNoiseStrength(s); } private int findHighBit(int v) { int bit = 0; while (v > 1) { bit++; v >>= 1; } return bit; } public void createTest(android.content.res.Resources res) { int width = mInPixelsAllocation.getType().getX(); int height = mInPixelsAllocation.getType().getY(); int noiseW = findHighBit(width); int noiseH = findHighBit(height); if (noiseW > 9) { noiseW = 9; } if (noiseH > 9) { noiseH = 9; } noiseW = 1 << noiseW; noiseH = 1 << noiseH; Type.Builder tb = new Type.Builder(mRS, Element.U8(mRS)); tb.setX(width); tb.setY(height); tb.setX(noiseW); tb.setY(noiseH); mNoise = Allocation.createTyped(mRS, tb.create()); mNoise2 = Allocation.createTyped(mRS, tb.create()); mScript = new ScriptC_grain(mRS, res, R.raw.grain); mScript.set_gWidth(width); mScript.set_gHeight(height); mScript.set_gWMask(noiseW - 1); mScript.set_gHMask(noiseH - 1); mScript.set_gNoiseStrength(0.5f); mScript.set_gBlendSource(mNoise); mScript.set_gNoise(mNoise2); Loading tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/grain.rs +7 −7 Original line number Diff line number Diff line Loading @@ -38,15 +38,15 @@ void genRand(uchar *out) { * 1 2 1 */ int32_t gWidth; int32_t gHeight; int32_t gWMask; int32_t gHMask; rs_allocation gBlendSource; void blend9(uchar *out, uint32_t x, uint32_t y) { uint32_t x1 = min((int32_t)x+1, (int32_t)(gWidth -1)); uint32_t x2 = max((int32_t)x-1, (int32_t)0); uint32_t y1 = min((int32_t)y+1, (int32_t)(gHeight -1)); uint32_t y2 = max((int32_t)y-1, (int32_t)0); uint32_t x1 = (x-1) & gWMask; uint32_t x2 = (x+1) & gWMask; uint32_t y1 = (y-1) & gHMask; uint32_t y2 = (y+1) & gHMask; uint p00 = 56 * rsGetElementAt_uchar(gBlendSource, x1, y1); uint p01 = 114 * rsGetElementAt_uchar(gBlendSource, x, y1); Loading Loading @@ -78,7 +78,7 @@ float gNoiseStrength; rs_allocation gNoise; void root(const uchar4 *in, uchar4 *out, uint32_t x, uint32_t y) { float4 ip = convert_float4(*in); float pnoise = (float) rsGetElementAt_uchar(gNoise, x, y); float pnoise = (float) rsGetElementAt_uchar(gNoise, x & gWMask, y & gHMask); float energy_level = ip.r + ip.g + ip.b; float energy_mask = (28.f - sqrt(energy_level)) * 0.03571f; Loading tests/RenderScriptTests/LivePreview/src/com/android/rs/livepreview/CameraPreviewActivity.java +1 −2 Original line number Diff line number Diff line Loading @@ -305,8 +305,7 @@ public class CameraPreviewActivity extends Activity long t1 = java.lang.System.currentTimeMillis(); mFilterYuv.execute(data); mFilterYuv.copyOut(mCallbackBitmap); mFilterYuv.execute(data, mCallbackBitmap); long t2 = java.lang.System.currentTimeMillis(); mTiming[mTimingSlot++] = t2 - t1; Loading tests/RenderScriptTests/LivePreview/src/com/android/rs/livepreview/RsYuv.java +7 −22 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ public class RsYuv private Allocation mAllocationOut; private Allocation mAllocationIn; private ScriptC_yuv mScript; private ScriptIntrinsicYuvToRGB mYuv; RsYuv(RenderScript rs, Resources res, int width, int height) { mHeight = height; Loading @@ -50,6 +51,8 @@ public class RsYuv mScript = new ScriptC_yuv(mRS, res, R.raw.yuv); mScript.invoke_setSize(mWidth, mHeight); mYuv = ScriptIntrinsicYuvToRGB.create(rs, Element.RGBA_8888(mRS)); Type.Builder tb = new Type.Builder(mRS, Element.RGBA_8888(mRS)); tb.setX(mWidth); tb.setY(mHeight); Loading @@ -58,34 +61,16 @@ public class RsYuv mAllocationIn = Allocation.createSized(rs, Element.U8(mRS), (mHeight * mWidth) + ((mHeight / 2) * (mWidth / 2) * 2)); mScript.bind_gYuvIn(mAllocationIn); mYuv.setInput(mAllocationIn); } private long mTiming[] = new long[50]; private int mTimingSlot = 0; void execute(byte[] yuv) { void execute(byte[] yuv, Bitmap b) { mAllocationIn.copyFrom(yuv); mRS.finish(); long t1 = java.lang.System.currentTimeMillis(); mScript.forEach_root(mAllocationOut); mRS.finish(); long t2 = java.lang.System.currentTimeMillis(); mTiming[mTimingSlot++] = t2 - t1; if (mTimingSlot >= mTiming.length) { float total = 0; for (int i=0; i<mTiming.length; i++) { total += (float)mTiming[i]; } total /= mTiming.length; Log.e("yuv", "core time = " + total); mTimingSlot = 0; } } void copyOut(Bitmap b) { mYuv.forEach(mAllocationOut); mScript.forEach_root(mAllocationOut, mAllocationOut); mAllocationOut.copyTo(b); } Loading tests/RenderScriptTests/LivePreview/src/com/android/rs/livepreview/yuv.rs +3 −9 Original line number Diff line number Diff line Loading @@ -3,8 +3,6 @@ #pragma rs java_package_name(com.android.rs.livepreview) #pragma rs_fp_relaxed uchar *gYuvIn; static int gWidth; static int gHeight; static uchar crossProcess_tableR[256]; Loading Loading @@ -80,13 +78,9 @@ static uchar4 vignette(uchar4 color, uint32_t x, uint32_t y) { return convert_uchar4(c); } void root(uchar4 *out, uint32_t x, uint32_t y) { uchar Y = gYuvIn[(y * gWidth) + x]; uchar *uv = &gYuvIn[gWidth * gHeight]; uv += (((x>>1)<<1) + (y>>1) * gWidth); uchar4 p = rsYuvToRGBA_uchar4(Y, uv[1], uv[0]); p = crossProcess_i(p); void root(const uchar4 *in, uchar4 *out, uint32_t x, uint32_t y) { uchar4 p; p = crossProcess_i(*in); p = vignette(p, x, y); out->rgba = p; Loading Loading
tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/Grain.java +25 −4 Original line number Diff line number Diff line Loading @@ -45,19 +45,40 @@ public class Grain extends TestBase { mScript.set_gNoiseStrength(s); } private int findHighBit(int v) { int bit = 0; while (v > 1) { bit++; v >>= 1; } return bit; } public void createTest(android.content.res.Resources res) { int width = mInPixelsAllocation.getType().getX(); int height = mInPixelsAllocation.getType().getY(); int noiseW = findHighBit(width); int noiseH = findHighBit(height); if (noiseW > 9) { noiseW = 9; } if (noiseH > 9) { noiseH = 9; } noiseW = 1 << noiseW; noiseH = 1 << noiseH; Type.Builder tb = new Type.Builder(mRS, Element.U8(mRS)); tb.setX(width); tb.setY(height); tb.setX(noiseW); tb.setY(noiseH); mNoise = Allocation.createTyped(mRS, tb.create()); mNoise2 = Allocation.createTyped(mRS, tb.create()); mScript = new ScriptC_grain(mRS, res, R.raw.grain); mScript.set_gWidth(width); mScript.set_gHeight(height); mScript.set_gWMask(noiseW - 1); mScript.set_gHMask(noiseH - 1); mScript.set_gNoiseStrength(0.5f); mScript.set_gBlendSource(mNoise); mScript.set_gNoise(mNoise2); Loading
tests/RenderScriptTests/ImageProcessing/src/com/android/rs/image/grain.rs +7 −7 Original line number Diff line number Diff line Loading @@ -38,15 +38,15 @@ void genRand(uchar *out) { * 1 2 1 */ int32_t gWidth; int32_t gHeight; int32_t gWMask; int32_t gHMask; rs_allocation gBlendSource; void blend9(uchar *out, uint32_t x, uint32_t y) { uint32_t x1 = min((int32_t)x+1, (int32_t)(gWidth -1)); uint32_t x2 = max((int32_t)x-1, (int32_t)0); uint32_t y1 = min((int32_t)y+1, (int32_t)(gHeight -1)); uint32_t y2 = max((int32_t)y-1, (int32_t)0); uint32_t x1 = (x-1) & gWMask; uint32_t x2 = (x+1) & gWMask; uint32_t y1 = (y-1) & gHMask; uint32_t y2 = (y+1) & gHMask; uint p00 = 56 * rsGetElementAt_uchar(gBlendSource, x1, y1); uint p01 = 114 * rsGetElementAt_uchar(gBlendSource, x, y1); Loading Loading @@ -78,7 +78,7 @@ float gNoiseStrength; rs_allocation gNoise; void root(const uchar4 *in, uchar4 *out, uint32_t x, uint32_t y) { float4 ip = convert_float4(*in); float pnoise = (float) rsGetElementAt_uchar(gNoise, x, y); float pnoise = (float) rsGetElementAt_uchar(gNoise, x & gWMask, y & gHMask); float energy_level = ip.r + ip.g + ip.b; float energy_mask = (28.f - sqrt(energy_level)) * 0.03571f; Loading
tests/RenderScriptTests/LivePreview/src/com/android/rs/livepreview/CameraPreviewActivity.java +1 −2 Original line number Diff line number Diff line Loading @@ -305,8 +305,7 @@ public class CameraPreviewActivity extends Activity long t1 = java.lang.System.currentTimeMillis(); mFilterYuv.execute(data); mFilterYuv.copyOut(mCallbackBitmap); mFilterYuv.execute(data, mCallbackBitmap); long t2 = java.lang.System.currentTimeMillis(); mTiming[mTimingSlot++] = t2 - t1; Loading
tests/RenderScriptTests/LivePreview/src/com/android/rs/livepreview/RsYuv.java +7 −22 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ public class RsYuv private Allocation mAllocationOut; private Allocation mAllocationIn; private ScriptC_yuv mScript; private ScriptIntrinsicYuvToRGB mYuv; RsYuv(RenderScript rs, Resources res, int width, int height) { mHeight = height; Loading @@ -50,6 +51,8 @@ public class RsYuv mScript = new ScriptC_yuv(mRS, res, R.raw.yuv); mScript.invoke_setSize(mWidth, mHeight); mYuv = ScriptIntrinsicYuvToRGB.create(rs, Element.RGBA_8888(mRS)); Type.Builder tb = new Type.Builder(mRS, Element.RGBA_8888(mRS)); tb.setX(mWidth); tb.setY(mHeight); Loading @@ -58,34 +61,16 @@ public class RsYuv mAllocationIn = Allocation.createSized(rs, Element.U8(mRS), (mHeight * mWidth) + ((mHeight / 2) * (mWidth / 2) * 2)); mScript.bind_gYuvIn(mAllocationIn); mYuv.setInput(mAllocationIn); } private long mTiming[] = new long[50]; private int mTimingSlot = 0; void execute(byte[] yuv) { void execute(byte[] yuv, Bitmap b) { mAllocationIn.copyFrom(yuv); mRS.finish(); long t1 = java.lang.System.currentTimeMillis(); mScript.forEach_root(mAllocationOut); mRS.finish(); long t2 = java.lang.System.currentTimeMillis(); mTiming[mTimingSlot++] = t2 - t1; if (mTimingSlot >= mTiming.length) { float total = 0; for (int i=0; i<mTiming.length; i++) { total += (float)mTiming[i]; } total /= mTiming.length; Log.e("yuv", "core time = " + total); mTimingSlot = 0; } } void copyOut(Bitmap b) { mYuv.forEach(mAllocationOut); mScript.forEach_root(mAllocationOut, mAllocationOut); mAllocationOut.copyTo(b); } Loading
tests/RenderScriptTests/LivePreview/src/com/android/rs/livepreview/yuv.rs +3 −9 Original line number Diff line number Diff line Loading @@ -3,8 +3,6 @@ #pragma rs java_package_name(com.android.rs.livepreview) #pragma rs_fp_relaxed uchar *gYuvIn; static int gWidth; static int gHeight; static uchar crossProcess_tableR[256]; Loading Loading @@ -80,13 +78,9 @@ static uchar4 vignette(uchar4 color, uint32_t x, uint32_t y) { return convert_uchar4(c); } void root(uchar4 *out, uint32_t x, uint32_t y) { uchar Y = gYuvIn[(y * gWidth) + x]; uchar *uv = &gYuvIn[gWidth * gHeight]; uv += (((x>>1)<<1) + (y>>1) * gWidth); uchar4 p = rsYuvToRGBA_uchar4(Y, uv[1], uv[0]); p = crossProcess_i(p); void root(const uchar4 *in, uchar4 *out, uint32_t x, uint32_t y) { uchar4 p; p = crossProcess_i(*in); p = vignette(p, x, y); out->rgba = p; Loading