Merge "Cleanup filter preview test."
This commit is contained in:
@@ -17,7 +17,7 @@
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_MODULE_TAGS := optional
|
||||
LOCAL_MODULE_TAGS := tests
|
||||
|
||||
LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-renderscript-files-under, src)
|
||||
|
||||
|
||||
@@ -299,6 +299,38 @@ public class CameraPreviewActivity extends Activity
|
||||
}
|
||||
|
||||
|
||||
private class ProcessPreviewDataTask extends AsyncTask<byte[], Void, Boolean> {
|
||||
protected Boolean doInBackground(byte[]... datas) {
|
||||
byte[] data = datas[0];
|
||||
|
||||
long t1 = java.lang.System.currentTimeMillis();
|
||||
|
||||
mFilterYuv.execute(data);
|
||||
mFilterYuv.copyOut(mCallbackBitmap);
|
||||
|
||||
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(TAG, "time + " + total);
|
||||
mTimingSlot = 0;
|
||||
}
|
||||
|
||||
mCamera.addCallbackBuffer(data);
|
||||
mProcessInProgress = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
protected void onPostExecute(Boolean result) {
|
||||
mFormatView.invalidate();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private long mTiming[] = new long[50];
|
||||
private int mTimingSlot = 0;
|
||||
|
||||
@@ -307,6 +339,9 @@ public class CameraPreviewActivity extends Activity
|
||||
mCamera.addCallbackBuffer(data);
|
||||
return;
|
||||
}
|
||||
if (data == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
int expectedBytes = mPreviewSize.width * mPreviewSize.height *
|
||||
ImageFormat.getBitsPerPixel(ImageFormat.NV21) / 8;
|
||||
@@ -328,33 +363,16 @@ public class CameraPreviewActivity extends Activity
|
||||
Bitmap.createBitmap(
|
||||
mPreviewSize.width, mPreviewSize.height,
|
||||
Bitmap.Config.ARGB_8888);
|
||||
mFormatView.setImageBitmap(mCallbackBitmap);
|
||||
mFilterYuv = new RsYuv(mRS, getResources(), mPreviewSize.width, mPreviewSize.height);
|
||||
mFormatView.setImageBitmap(mCallbackBitmap);
|
||||
}
|
||||
|
||||
long t1 = java.lang.System.currentTimeMillis();
|
||||
|
||||
mFilterYuv.execute(data);
|
||||
mFilterYuv.copyOut(mCallbackBitmap);
|
||||
|
||||
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(TAG, "time + " + total);
|
||||
mTimingSlot = 0;
|
||||
}
|
||||
|
||||
|
||||
mFormatView.invalidate();
|
||||
|
||||
mCamera.addCallbackBuffer(data);
|
||||
mProcessInProgress = false;
|
||||
mProcessInProgress = true;
|
||||
new ProcessPreviewDataTask().execute(data);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -65,47 +65,31 @@ static float4 colortemp(float4 color) {
|
||||
return new_color;
|
||||
}
|
||||
|
||||
//float vignetteCenter = (img_width/2.0, img_height/2.0)
|
||||
|
||||
|
||||
static float vignette_dist_mod;
|
||||
int2 vignette_half_dims;
|
||||
static uchar4 vignette(uchar4 color, uint32_t x, uint32_t y) {
|
||||
x -= gWidth >> 1;
|
||||
y -= gHeight >> 1;
|
||||
|
||||
uint32_t dist = (x * x + y * y);
|
||||
//float d = sqrt((float)dist) * vignette_dist_mod;
|
||||
float d = vignette_dist_mod * dist;
|
||||
|
||||
//RS_DEBUG(d);
|
||||
int2 xy = {x, y};
|
||||
xy -= vignette_half_dims;
|
||||
xy *= xy;
|
||||
|
||||
float d = vignette_dist_mod * (xy.x + xy.y);
|
||||
ushort4 c = convert_ushort4(color);
|
||||
c *= vignette_table[(int)d];
|
||||
c >>= (ushort4)8;
|
||||
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);
|
||||
|
||||
#if 0
|
||||
float4 p = toRGB_F(Y, uv[1], uv[0]);
|
||||
p = crossProcess(p);
|
||||
p = colortemp(p);
|
||||
out->rgba = rsPackColorTo8888(p);
|
||||
|
||||
#else
|
||||
uchar4 p = rsYuvToRGBA_uchar4(Y, uv[1], uv[0]);
|
||||
p = crossProcess_i(p);
|
||||
p = vignette(p, x, y);
|
||||
|
||||
out->rgba = p;
|
||||
#endif
|
||||
|
||||
out->a = 0xff;
|
||||
}
|
||||
|
||||
@@ -131,7 +115,6 @@ static void precompute() {
|
||||
lumen = clamp(lumen, 0.f, 1.f);
|
||||
|
||||
vignette_table[i] = (uchar)(lumen * 255.f + 0.5f);
|
||||
RS_DEBUG(lumen);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -142,7 +125,7 @@ void init() {
|
||||
void setSize(int w, int h) {
|
||||
gWidth = w;
|
||||
gHeight = h;
|
||||
|
||||
vignette_half_dims = (int2){w / 2, h / 2};
|
||||
vignette_dist_mod = 512.f;
|
||||
vignette_dist_mod /= (float)(w*w + h*h) / 4.f;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user