diff options
author | Jay Wang <jaywang@codeaurora.org> | 2016-08-10 12:24:44 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-08-18 17:10:07 -0700 |
commit | 06319f50ea5557fa1cf4f6b547731554d0f95609 (patch) | |
tree | 69213376f3f86260121142a8f996823f338f5c11 /src | |
parent | 6bd73c5658538182923109b1423481720b269402 (diff) | |
download | android_packages_apps_Snap-06319f50ea5557fa1cf4f6b547731554d0f95609.tar.gz android_packages_apps_Snap-06319f50ea5557fa1cf4f6b547731554d0f95609.tar.bz2 android_packages_apps_Snap-06319f50ea5557fa1cf4f6b547731554d0f95609.zip |
SnapdragonCamera: Update Clearsight API calls for 2.8.2
Update the Clearsight API Calls for version 2.8.2 which contains
split processImage for better shot to shot performance.
CRs-Fixed: 993611
Change-Id: I124cdf7c426ea3b0cfd10a31ce738188faf446c2
Diffstat (limited to 'src')
-rw-r--r-- | src/org/codeaurora/snapcam/filter/ClearSightImageProcessor.java | 1 | ||||
-rw-r--r-- | src/org/codeaurora/snapcam/filter/ClearSightNativeEngine.java | 76 |
2 files changed, 47 insertions, 30 deletions
diff --git a/src/org/codeaurora/snapcam/filter/ClearSightImageProcessor.java b/src/org/codeaurora/snapcam/filter/ClearSightImageProcessor.java index 3a94baec9..95f0b40e9 100644 --- a/src/org/codeaurora/snapcam/filter/ClearSightImageProcessor.java +++ b/src/org/codeaurora/snapcam/filter/ClearSightImageProcessor.java @@ -652,6 +652,7 @@ public class ClearSightImageProcessor { + mNumImagesToProcess[CAM_TYPE_BAYER] + " mono count: " + mNumImagesToProcess[CAM_TYPE_MONO]); + ClearSightNativeEngine.getInstance().initProcessImage(); ClearSightNativeEngine.ClearsightImage csImage = ClearSightNativeEngine .getInstance().processImage(); diff --git a/src/org/codeaurora/snapcam/filter/ClearSightNativeEngine.java b/src/org/codeaurora/snapcam/filter/ClearSightNativeEngine.java index 18e7671b9..0380c3487 100644 --- a/src/org/codeaurora/snapcam/filter/ClearSightNativeEngine.java +++ b/src/org/codeaurora/snapcam/filter/ClearSightNativeEngine.java @@ -56,7 +56,7 @@ public class ClearSightNativeEngine { } } - private static final int METADATA_SIZE = 5; + private static final int METADATA_SIZE = 6; private static final int Y_PLANE = 0; private static final int VU_PLANE = 2; @@ -64,6 +64,10 @@ public class ClearSightNativeEngine { private static byte[] mOtpCalibData; private static ClearSightNativeEngine mInstance; + private int mYSize; + private int mVUSize; + private int mYStride; + private int mVUStride; private Image mRefColorImage; private Image mRefMonoImage; private TotalCaptureResult mRefColorResult; @@ -91,6 +95,14 @@ public class ClearSightNativeEngine { mOtpCalibData = calibStr.getBytes(); } + public void setImageSizeStride(Image image) { + Plane[] planes = image.getPlanes(); + mYSize = planes[Y_PLANE].getBuffer().capacity(); + mVUSize = planes[VU_PLANE].getBuffer().capacity(); + mYStride = planes[Y_PLANE].getRowStride(); + mVUStride = planes[VU_PLANE].getRowStride(); + } + public boolean isLibLoaded() { return mLibLoaded; } @@ -136,9 +148,10 @@ public class ClearSightNativeEngine { if (mRefColorImage != null) { Log.d(TAG, "setRefColorImage"); + setImageSizeStride(mRefColorImage); mSrcColor.add(new SourceImage(mRefColorImage.getPlanes()[Y_PLANE] .getBuffer(), mRefColorImage.getPlanes()[VU_PLANE] - .getBuffer(), new int[] { 0, 0, 0, 0, 0 })); + .getBuffer(), new float[] { 0, 0, 0, 0, 0, 0 })); } } @@ -153,7 +166,7 @@ public class ClearSightNativeEngine { if (mRefMonoImage != null) { Log.d(TAG, "setRefMonoImage"); mSrcMono.add(new SourceImage(mRefMonoImage.getPlanes()[Y_PLANE] - .getBuffer(), null, new int[] { 0, 0, 0, 0, 0 })); + .getBuffer(), null, new float[] { 0, 0, 0, 0, 0, 0 })); } } @@ -198,7 +211,7 @@ public class ClearSightNativeEngine { vuRowStride = planes[VU_PLANE].getRowStride(); } - int[] metadata = new int[METADATA_SIZE]; + float[] metadata = new float[METADATA_SIZE]; boolean result = nativeClearSightRegisterImage(refY, yBuf, vuBuf, image.getWidth(), image.getHeight(), @@ -212,21 +225,21 @@ public class ClearSightNativeEngine { return result; } - public ClearsightImage processImage() { + public boolean initProcessImage() { // check data validity if (mSrcColor.size() != mSrcMono.size()) { // mis-match in num images Log.d(TAG, "processImage - numImages mismatch - bayer: " + mSrcColor.size() + ", mono: " + mSrcMono.size()); - return null; + return false; } int numImages = mSrcColor.size(); ByteBuffer[] srcColorY = new ByteBuffer[numImages]; ByteBuffer[] srcColorVU = new ByteBuffer[numImages]; - int[][] metadataColor = new int[numImages][]; + float[][] metadataColor = new float[numImages][]; ByteBuffer[] srcMonoY = new ByteBuffer[numImages]; - int[][] metadataMono = new int[numImages][]; + float[][] metadataMono = new float[numImages][]; Log.d(TAG, "processImage - numImages: " + numImages); @@ -244,35 +257,38 @@ public class ClearSightNativeEngine { Plane[] colorPlanes = mRefColorImage.getPlanes(); Plane[] monoPlanes = mRefMonoImage.getPlanes(); - ByteBuffer dstY = ByteBuffer.allocateDirect(colorPlanes[Y_PLANE] - .getBuffer().capacity()); - ByteBuffer dstVU = ByteBuffer.allocateDirect(colorPlanes[VU_PLANE] - .getBuffer().capacity()); - int[] roiRect = new int[4]; Log.d(TAG, "processImage - refImage size - y: " + colorPlanes[Y_PLANE].getBuffer().capacity() + " vu: " + colorPlanes[VU_PLANE].getBuffer().capacity()); - Log.d(TAG, "processImage - dst size - y: " - + dstY.capacity() + " vu: " + dstVU.capacity()); - int iso = mRefMonoResult.get(CaptureResult.SENSOR_SENSITIVITY); long exposure = mRefMonoResult.get(CaptureResult.SENSOR_EXPOSURE_TIME); // capture result stores exposure time in NS and we need MS. exposure /= 100000; Log.d(TAG, "processImage - iso: " + iso + " exposure ms: " + exposure); - boolean result = nativeClearSightProcess(numImages, srcColorY, srcColorVU, + return nativeClearSightProcessInit(numImages, srcColorY, srcColorVU, metadataColor, mRefColorImage.getWidth(), mRefColorImage.getHeight(), colorPlanes[Y_PLANE].getRowStride(), colorPlanes[VU_PLANE].getRowStride(), srcMonoY, metadataMono, mRefMonoImage.getWidth(), mRefMonoImage.getHeight(), monoPlanes[Y_PLANE].getRowStride(), mOtpCalibData, - (int)exposure, iso, dstY, dstVU, - colorPlanes[Y_PLANE].getRowStride(), - colorPlanes[VU_PLANE].getRowStride(), roiRect); + (int)exposure, iso); + } + + public ClearsightImage processImage() { + // check data validity + ByteBuffer dstY = ByteBuffer.allocateDirect(mYSize); + ByteBuffer dstVU = ByteBuffer.allocateDirect(mVUSize); + int[] roiRect = new int[4]; + + Log.d(TAG, "processImage - dst size - y: " + + dstY.capacity() + " vu: " + dstVU.capacity()); + + boolean result = nativeClearSightProcess(dstY, dstVU, + mYStride, mVUStride, roiRect); if (result) { dstY.rewind(); @@ -283,27 +299,27 @@ public class ClearSightNativeEngine { } } - private native final boolean nativeConfigureClearSight(float brIntensity, float sharpenIntensity); - private native final boolean nativeClearSightRegisterImage(ByteBuffer refY, ByteBuffer srcY, ByteBuffer srcVU, int width, int height, int strideY, int strideVU, ByteBuffer dstY, ByteBuffer dstVU, - int[] metadata); + float[] metadata); - private native final boolean nativeClearSightProcess(int numImagePairs, + private native final boolean nativeClearSightProcessInit(int numImagePairs, ByteBuffer[] srcColorY, ByteBuffer[] srcColorVU, - int[][] metadataColor, int srcColorWidth, int srcColorHeight, + float[][] metadataColor, int srcColorWidth, int srcColorHeight, int srcColorStrideY, int srcColorStrideVU, ByteBuffer[] srcMonoY, - int[][] metadataMono, int srcMonoWidth, int srcMonoHeight, - int srcMonoStrideY, byte[] otp, int exposureMs, int iso, - ByteBuffer dstY, ByteBuffer dstVU, int dstStrideY, int dstStrideVU, int[] roiRect); + float[][] metadataMono, int srcMonoWidth, int srcMonoHeight, + int srcMonoStrideY, byte[] otp, int exposureMs, int iso); + + private native final boolean nativeClearSightProcess(ByteBuffer dstY, + ByteBuffer dstVU, int dstStrideY, int dstStrideVU, int[] roiRect); private class SourceImage { ByteBuffer mY; ByteBuffer mVU; - int[] mMetadata; + float[] mMetadata; - SourceImage(ByteBuffer y, ByteBuffer vu, int[] metadata) { + SourceImage(ByteBuffer y, ByteBuffer vu, float[] metadata) { mY = y; mVU = vu; mMetadata = metadata; |