diff options
author | Jay Wang <jaywang@codeaurora.org> | 2016-03-30 17:43:18 -0700 |
---|---|---|
committer | Jay Wang <jaywang@codeaurora.org> | 2016-04-29 17:21:36 -0700 |
commit | 8beb066fa8148156de7c68fece40aeba00af1eda (patch) | |
tree | 2087a45289b2112786898f57a85cd04a7b34c55a /src/com/android/camera/util | |
parent | 5d40b84f26f5a9ce021f0b690d273cdaeb1803a1 (diff) | |
download | android_packages_apps_Snap-8beb066fa8148156de7c68fece40aeba00af1eda.tar.gz android_packages_apps_Snap-8beb066fa8148156de7c68fece40aeba00af1eda.tar.bz2 android_packages_apps_Snap-8beb066fa8148156de7c68fece40aeba00af1eda.zip |
SnapdragonCamera: refactor clearsight code and add persist flags
Move out core ClearSight logic to ClearSightImageProcessor.java
Move core ClearSight files to new package:
org/codeaurora/snapcam/filter
Add persist flags:
timestamp difference threshold: persist.camera.cs.threshold
burst shot count: persist.camera.cs.burstcount
dump source frames: persist.camera.cs.dumpframes
CRs-Fixed: 993611
Change-Id: Ic8953a72e8697e494c3ae342bebc70f60540474b
Diffstat (limited to 'src/com/android/camera/util')
-rw-r--r-- | src/com/android/camera/util/ClearSightNativeEngine.java | 351 |
1 files changed, 0 insertions, 351 deletions
diff --git a/src/com/android/camera/util/ClearSightNativeEngine.java b/src/com/android/camera/util/ClearSightNativeEngine.java deleted file mode 100644 index cf0a740d7..000000000 --- a/src/com/android/camera/util/ClearSightNativeEngine.java +++ /dev/null @@ -1,351 +0,0 @@ -/* - * Copyright (c) 2016, The Linux Foundation. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of The Linux Foundation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -package com.android.camera.util; - -import java.io.ByteArrayOutputStream; -import java.nio.ByteBuffer; -import java.util.ArrayList; - -import android.graphics.ImageFormat; -import android.graphics.Rect; -import android.graphics.YuvImage; -import android.media.Image; -import android.media.Image.Plane; -import android.util.Log; - -public class ClearSightNativeEngine { - private static final String TAG = "ClearSightNativeEngine"; - static { - try { - System.loadLibrary("jni_clearsight"); - mLibLoaded = true; - Log.v(TAG, "successfully loaded clearsight lib"); - } catch (UnsatisfiedLinkError e) { - Log.e(TAG, "failed to load clearsight lib"); - e.printStackTrace(); - mLibLoaded = false; - } - } - - private static final int METADATA_SIZE = 5; - private static final int Y_PLANE = 0; - private static final int VU_PLANE = 2; - - // dummy OTP calib data - private static final String otp_calib = "Calibration OTP format version = 10301\n" - + "Main Native Sensor Resolution width = 4224px\n" - + "Main Native Sensor Resolution height = 3136px\n" - + "Main Calibration Resolution width = 1280px\n" - + "Main Calibration Resolution height = 950px\n" - + "Main Focal length ratio = 1.004896\n" - + "Aux Native Sensor Resolution width = 1600px\n" - + "Aux Native Sensor Resolution height = 1200px\n" - + "Aux Calibration Resolution width = 1280px\n" - + "Aux Calibration Resolution height = 960px\n" - + "Aux Focal length ratio = 1.000000\n" - + "Relative Rotation matrix [0] through [8] = 1.000000,-0.003008,0.000251,0.003073,1.000189,0.003329,0.019673,-0.003329,1.000284\n" - + "Relative Geometric surface parameters [0] through [31] = -0.307164,-0.879074,4.636152,0.297486,-0.157539,-6.889396,0.109467,-2.797022,-0.066306,-0.120142,0.196464,0.021974,2.905827,0.241197,0.048328,-5.116615,0.496533,-5.263813,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000,0.000000\n" - + "Relative Principal point X axis offset (ox) = 0.000000px\n" - + "Relative Principal point Y axis offset (oy) = 0.000000px\n" - + "Relative position flag = 1\n" - + "Baseline distance = 20.000000mm\n" - + "Main sensor mirror and flip setting = 3\n" - + "Aux sensor mirror and flip setting = 3\n" - + "Module orientation during calibration = 0\n" - + "Rotation flag = 0\n" - + "Main Normalized Focal length = 1000.0px\n" - + "Aux Normalized Focal length = 1000.0px"; - - private static boolean mLibLoaded; - private static ClearSightNativeEngine mInstance; - - private Image mRefColorImage; - private Image mRefMonoImage; - private ArrayList<SourceImage> mSrcColor = new ArrayList<SourceImage>(); - private ArrayList<SourceImage> mSrcMono = new ArrayList<SourceImage>(); - - private ClearSightNativeEngine() { - } - - public static void createInstance() { - if (mInstance == null) { - mInstance = new ClearSightNativeEngine(); - } - } - - public static ClearSightNativeEngine getInstance() { - createInstance(); - return mInstance; - } - - public boolean isLibLoaded() { - return mLibLoaded; - } - - public void reset() { - mSrcColor.clear(); - mSrcMono.clear(); - setReferenceColorImage(null); - setReferenceMonoImage(null); - } - - public void setReferenceImage(boolean color, Image image) { - if (color) - setReferenceColorImage(image); - else - setReferenceMonoImage(image); - } - - private void setReferenceColorImage(Image reference) { - if (mRefColorImage != null) { - mRefColorImage.close(); - mRefColorImage = null; - } - - mRefColorImage = reference; - - if (mRefColorImage != null) { - Log.e(TAG, - "setRefColorImage - isdirectbuff: " - + mRefColorImage.getPlanes()[0].getBuffer() - .isDirect()); - mSrcColor.add(new SourceImage(mRefColorImage.getPlanes()[Y_PLANE] - .getBuffer(), mRefColorImage.getPlanes()[VU_PLANE] - .getBuffer(), new int[] { 0, 0, 0, 0, 0 })); - } - } - - private void setReferenceMonoImage(Image reference) { - if (mRefMonoImage != null) { - mRefMonoImage.close(); - mRefMonoImage = null; - } - - mRefMonoImage = reference; - - if (mRefMonoImage != null) { - Log.e(TAG, - "setRefMonoImage - isdirectbuff: " - + mRefMonoImage.getPlanes()[0].getBuffer() - .isDirect()); - mSrcMono.add(new SourceImage(mRefMonoImage.getPlanes()[Y_PLANE] - .getBuffer(), null, new int[] { 0, 0, 0, 0, 0 })); - } - } - - public boolean hasReferenceImage(boolean color) { - return !(color ? mSrcColor.isEmpty() : mSrcMono.isEmpty()); - } - - public Image getReferenceImage(boolean color) { - return color ? mRefColorImage : mRefMonoImage; - } - - public boolean registerImage(boolean color, Image image) { - return (color ? registerColorImage(image) : registerMonoImage(image)); - } - - private boolean registerColorImage(Image image) { - if (mSrcColor.isEmpty()) { - Log.w(TAG, "reference color image not yet set"); - return false; - } - - Plane[] planes = image.getPlanes(); - ByteBuffer refY = mRefColorImage.getPlanes()[Y_PLANE].getBuffer(); - ByteBuffer refVU = mRefColorImage.getPlanes()[VU_PLANE].getBuffer(); - ByteBuffer regY = ByteBuffer.allocateDirect(refY.capacity()); - ByteBuffer regVU = ByteBuffer.allocateDirect(refVU.capacity()); - int[] metadata = new int[METADATA_SIZE]; - - boolean result = clearSightRegisterImage(refY, - planes[Y_PLANE].getBuffer(), planes[VU_PLANE].getBuffer(), - image.getWidth(), image.getHeight(), - planes[Y_PLANE].getRowStride(), - planes[VU_PLANE].getRowStride(), regY, regVU, metadata); - - if (result) { - mSrcColor.add(new SourceImage(regY, regVU, metadata)); - } - - image.close(); - return result; - } - - private boolean registerMonoImage(Image image) { - if (mSrcMono.isEmpty()) { - Log.w(TAG, "reference mono image not yet set"); - return false; - } - - Plane[] planes = image.getPlanes(); - ByteBuffer refY = mRefMonoImage.getPlanes()[Y_PLANE].getBuffer(); - ByteBuffer regY = ByteBuffer.allocateDirect(refY.capacity()); - int[] metadata = new int[METADATA_SIZE]; - - boolean result = clearSightRegisterImage(refY, - planes[Y_PLANE].getBuffer(), null, image.getWidth(), - image.getHeight(), planes[Y_PLANE].getRowStride(), 0, regY, - null, metadata); - - if (result) { - mSrcMono.add(new SourceImage(regY, null, metadata)); - } - - image.close(); - return result; - } - - public ClearsightImage processImage() { - // check data validity - if (mSrcColor.size() != mSrcMono.size()) { - // mis-match in num images - Log.e(TAG, "processImage - numImages mismatch - bayer: " - + mSrcColor.size() + ", mono: " + mSrcMono.size()); - return null; - } - - int numImages = mSrcColor.size(); - ByteBuffer[] srcColorY = new ByteBuffer[numImages]; - ByteBuffer[] srcColorVU = new ByteBuffer[numImages]; - int[][] metadataColor = new int[numImages][]; - ByteBuffer[] srcMonoY = new ByteBuffer[numImages]; - int[][] metadataMono = new int[numImages][]; - - Log.e(TAG, "processImage - numImages: " + numImages); - - for (int i = 0; i < numImages; i++) { - SourceImage color = mSrcColor.get(i); - SourceImage mono = mSrcMono.get(i); - - srcColorY[i] = color.mY; - srcColorVU[i] = color.mVU; - metadataColor[i] = color.mMetadata; - - srcMonoY[i] = mono.mY; - metadataMono[i] = mono.mMetadata; - } - - 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]; - - boolean result = clearSightProcess(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(), otp_calib.getBytes(), dstY, dstVU, - colorPlanes[Y_PLANE].getRowStride(), - colorPlanes[VU_PLANE].getRowStride(), roiRect); - - if (result) { - dstY.rewind(); - dstVU.rewind(); - byte[] data = new byte[dstY.capacity() + dstVU.capacity()]; - int[] strides = new int[] { colorPlanes[Y_PLANE].getRowStride(), - colorPlanes[VU_PLANE].getRowStride() }; - dstY.get(data, 0, dstY.capacity()); - dstVU.get(data, dstY.capacity(), dstVU.capacity()); - return new ClearsightImage(new YuvImage(data, ImageFormat.NV21, - mRefColorImage.getWidth(), mRefColorImage.getHeight(), - strides), roiRect); - } else { - return null; - } - } - - native public boolean configureClearSight(float focalLengthRatio, - float brIntensity, float sharpenIntensity); - - native public boolean clearSightRegisterImage(ByteBuffer refY, - ByteBuffer srcY, ByteBuffer srcVU, int width, int height, - int strideY, int strideVU, ByteBuffer dstY, ByteBuffer dstVU, - int[] metadata); - - native public boolean clearSightProcess(int numImagePairs, - ByteBuffer[] srcColorY, ByteBuffer[] srcColorVU, - int[][] metadataColor, int srcColorWidth, int srcColorHeight, - int srcColorStrideY, int srcColorStrideVU, ByteBuffer[] srcMonoY, - int[][] metadataMono, int srcMonoWidth, int srcMonoHeight, - int srcMonoStrideY, byte[] otp, ByteBuffer dstY, ByteBuffer dstVU, - int dstStrideY, int dstStrideVU, int[] roiRect); - - private class SourceImage { - ByteBuffer mY; - ByteBuffer mVU; - int[] mMetadata; - - SourceImage(ByteBuffer y, ByteBuffer vu, int[] metadata) { - mY = y; - mVU = vu; - mMetadata = metadata; - } - } - - public static class ClearsightImage { - private YuvImage mImage; - private Rect mRoiRect; - - ClearsightImage(YuvImage image, int[] rect) { - mImage = image; - mRoiRect = new Rect(rect[0], rect[1], rect[0] + rect[2], rect[1] - + rect[3]); - } - - public Rect getRoiRect() { - return mRoiRect; - } - - public long getDataLength() { - return (mImage==null?0:mImage.getYuvData().length); - } - - public int getWidth() { - return (mRoiRect.right - mRoiRect.left); - } - - public int getHeight() { - return (mRoiRect.bottom - mRoiRect.top); - } - - public byte[] compressToJpeg() { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - - mImage.compressToJpeg(mRoiRect, 100, baos); - return baos.toByteArray(); - } - } -} |