summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@quicinc.com>2017-08-30 19:47:20 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2017-08-30 19:47:20 -0700
commitdb15c114eda09196c982ae020dbb018d0d8919b1 (patch)
treeb4b545a0cd632402dddc406247fcd7836b408b84 /src
parentce957963fe05773c615217abe2c8f93c93363759 (diff)
parentcc7d48d76185ed95ff9b00dcc23373186257b03b (diff)
downloadandroid_packages_apps_Snap-db15c114eda09196c982ae020dbb018d0d8919b1.tar.gz
android_packages_apps_Snap-db15c114eda09196c982ae020dbb018d0d8919b1.tar.bz2
android_packages_apps_Snap-db15c114eda09196c982ae020dbb018d0d8919b1.zip
Merge "SnapdragonCamera: Add vendor tag util"
Diffstat (limited to 'src')
-rw-r--r--[-rwxr-xr-x]src/com/android/camera/CaptureModule.java30
-rw-r--r--src/com/android/camera/imageprocessor/PostProcessor.java12
-rw-r--r--src/com/android/camera/util/VendorTagUtil.java134
-rw-r--r--src/org/codeaurora/snapcam/filter/ClearSightImageProcessor.java10
4 files changed, 152 insertions, 34 deletions
diff --git a/src/com/android/camera/CaptureModule.java b/src/com/android/camera/CaptureModule.java
index ca6f86db1..46a822e67 100755..100644
--- a/src/com/android/camera/CaptureModule.java
+++ b/src/com/android/camera/CaptureModule.java
@@ -106,11 +106,12 @@ import com.android.camera.ui.CountDownView;
import com.android.camera.ui.ModuleSwitcher;
import com.android.camera.ui.RotateTextToast;
import com.android.camera.ui.TrackingFocusRenderer;
+import com.android.camera.util.ApiHelper;
import com.android.camera.util.CameraUtil;
import com.android.camera.util.PersistUtil;
import com.android.camera.util.SettingTranslation;
-import com.android.camera.util.ApiHelper;
import com.android.camera.util.AccessibilityUtils;
+import com.android.camera.util.VendorTagUtil;
import com.android.internal.util.MemInfoReader;
import org.codeaurora.snapcam.R;
@@ -211,26 +212,9 @@ public class CaptureModule implements CameraModule, PhotoController,
CaptureRequest.Key<Integer> BayerMonoLinkSessionIdKey =
new CaptureRequest.Key<>("org.codeaurora.qcamera3.dualcam_link_meta_data" +
".related_camera_id", Integer.class);
- public static CaptureRequest.Key<Integer> CdsModeKey =
- new CaptureRequest.Key<>("org.codeaurora.qcamera3.CDS.cds_mode", Integer.class);
- public static CaptureRequest.Key<Byte> JpegCropEnableKey =
- new CaptureRequest.Key<>("org.codeaurora.qcamera3.jpeg_encode_crop.enable",
- Byte.class);
- public static CaptureRequest.Key<int[]> JpegCropRectKey =
- new CaptureRequest.Key<>("org.codeaurora.qcamera3.jpeg_encode_crop.rect",
- int[].class);
- public static CaptureRequest.Key<int[]> JpegRoiRectKey =
- new CaptureRequest.Key<>("org.codeaurora.qcamera3.jpeg_encode_crop.roi",
- int[].class);
public static CameraCharacteristics.Key<Byte> MetaDataMonoOnlyKey =
new CameraCharacteristics.Key<>("org.codeaurora.qcamera3.sensor_meta_data.is_mono_only",
Byte.class);
- public static CaptureRequest.Key<Integer> SELECT_PRIORITY =
- new CaptureRequest.Key<>("org.codeaurora.qcamera3.iso_exp_priority.select_priority",
- Integer.class);
- public static CaptureRequest.Key<Long> ISO_EXP =
- new CaptureRequest.Key<>("org.codeaurora.qcamera3.iso_exp_priority.use_iso_exp_priority",
- Long.class);
public static CameraCharacteristics.Key<int[]> InstantAecAvailableModes =
new CameraCharacteristics.Key<>("org.codeaurora.qcamera3.instant_aec.instant_aec_available_modes", int[].class);
public static final CaptureRequest.Key<Integer> INSTANT_AEC_MODE =
@@ -1560,7 +1544,7 @@ public class CaptureModule implements CameraModule, PhotoController,
addPreviewSurface(captureBuilder, null, id);
captureBuilder.set(CaptureRequest.CONTROL_AF_MODE, mControlAFMode);
captureBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CaptureRequest.CONTROL_AF_TRIGGER_IDLE);
-//todo captureBuilder.set(CdsModeKey, 2); // CDS 0-OFF, 1-ON, 2-AUTO
+ VendorTagUtil.setCdsMode(captureBuilder, 2); // CDS 0-OFF, 1-ON, 2-AUTO
applySettingsForCapture(captureBuilder, id);
if(csEnabled) {
@@ -4271,8 +4255,8 @@ public class CaptureModule implements CameraModule, PhotoController,
String value = mSettingsManager.getValue(SettingsManager.KEY_ISO);
if (value == null) return;
if (value.equals("auto")) {
- //todo request.set(SELECT_PRIORITY, 0);
- //todo request.set(ISO_EXP, 0L);
+ VendorTagUtil.setIsoExpPrioritySelectPriority(request, 0);
+ VendorTagUtil.setIsoExpPriority(request, 0L);
if (request.get(CaptureRequest.SENSOR_EXPOSURE_TIME) == null) {
request.set(CaptureRequest.SENSOR_EXPOSURE_TIME, mIsoExposureTime);
}
@@ -4281,8 +4265,8 @@ public class CaptureModule implements CameraModule, PhotoController,
}
} else {
long intValue = SettingsManager.KEY_ISO_INDEX.get(value);
- request.set(SELECT_PRIORITY, 0);
- request.set(ISO_EXP, intValue);
+ VendorTagUtil.setIsoExpPrioritySelectPriority(request, 0);
+ VendorTagUtil.setIsoExpPriority(request, intValue);
if (request.get(CaptureRequest.SENSOR_EXPOSURE_TIME) != null) {
mIsoExposureTime = request.get(CaptureRequest.SENSOR_EXPOSURE_TIME);
}
diff --git a/src/com/android/camera/imageprocessor/PostProcessor.java b/src/com/android/camera/imageprocessor/PostProcessor.java
index a9580711e..6e34de96d 100644
--- a/src/com/android/camera/imageprocessor/PostProcessor.java
+++ b/src/com/android/camera/imageprocessor/PostProcessor.java
@@ -77,14 +77,14 @@ import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
+import android.util.Size;
import java.util.TimeZone;
import java.util.concurrent.Semaphore;
import com.android.camera.imageprocessor.filter.ImageFilter;
import com.android.camera.util.CameraUtil;
import com.android.camera.util.PersistUtil;
-
-import android.util.Size;
+import com.android.camera.util.VendorTagUtil;
public class PostProcessor{
@@ -523,8 +523,8 @@ public class PostProcessor{
CaptureRequest.EDGE_MODE_HIGH_QUALITY);
builder.set(CaptureRequest.NOISE_REDUCTION_MODE,
CaptureRequest.NOISE_REDUCTION_MODE_HIGH_QUALITY);
- builder.set(CaptureModule.CdsModeKey, 2); // CDS 0-OFF, 1-ON, 2-AUTO
- builder.set(CaptureModule.JpegCropEnableKey, (byte)1);
+ VendorTagUtil.setCdsMode(builder, 2); // CDS 0-OFF, 1-ON, 2-AUTO
+ VendorTagUtil.setJpegCropEnable(builder, (byte)1);
Rect cropRect = image.getCropRect();
if(cropRect == null ||
cropRect.isEmpty()) {
@@ -536,9 +536,9 @@ public class PostProcessor{
float targetRatio = (float)targetWidth / (float)targetHeight;
cropRect = CameraUtil.getFinalCropRect(cropRect, targetRatio);
// has crop rect. apply to jpeg request
- builder.set(CaptureModule.JpegCropRectKey,
+ VendorTagUtil.setJpegCropRect(builder,
new int[] {cropRect.left, cropRect.top, cropRect.width(), cropRect.height()});
- builder.set(CaptureModule.JpegRoiRectKey,
+ VendorTagUtil.setJpegRoiRect(builder,
new int[] {0, 0, targetWidth, targetHeight});
Location location = mController.getLocationManager().getCurrentLocation();
diff --git a/src/com/android/camera/util/VendorTagUtil.java b/src/com/android/camera/util/VendorTagUtil.java
new file mode 100644
index 000000000..9c2f6cc1c
--- /dev/null
+++ b/src/com/android/camera/util/VendorTagUtil.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright (c) 2017, 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 android.hardware.camera2.CaptureRequest;
+import android.util.Log;
+
+public class VendorTagUtil {
+ private static final String TAG = "VendorTagUtil";
+
+ private static CaptureRequest.Key<Integer> CdsModeKey =
+ new CaptureRequest.Key<>("org.codeaurora.qcamera3.CDS.cds_mode",
+ Integer.class);
+ private static CaptureRequest.Key<Byte> JpegCropEnableKey =
+ new CaptureRequest.Key<>("org.codeaurora.qcamera3.jpeg_encode_crop.enable",
+ Byte.class);
+ private static CaptureRequest.Key<int[]> JpegCropRectKey =
+ new CaptureRequest.Key<>("org.codeaurora.qcamera3.jpeg_encode_crop.rect",
+ int[].class);
+ private static CaptureRequest.Key<int[]> JpegRoiRectKey =
+ new CaptureRequest.Key<>("org.codeaurora.qcamera3.jpeg_encode_crop.roi",
+ int[].class);
+ private static CaptureRequest.Key<Integer> SELECT_PRIORITY =
+ new CaptureRequest.Key<>("org.codeaurora.qcamera3.iso_exp_priority.select_priority",
+ Integer.class);
+ private static CaptureRequest.Key<Long> ISO_EXP =
+ new CaptureRequest.Key<>("org.codeaurora.qcamera3.iso_exp_priority.use_iso_exp_priority",
+ Long.class);
+
+
+ private static boolean isSupported(CaptureRequest.Builder builder,
+ CaptureRequest.Key<?> key) {
+ boolean supported = true;
+ try {
+ builder.get(key);
+ }catch(IllegalArgumentException exception){
+ supported = false;
+ Log.d(TAG, "vendor tag " + key.getName() + " is not supported");
+ }
+ if ( supported ) {
+ Log.d(TAG, "vendor tag " + key.getName() + " is supported");
+ }
+ return supported;
+ }
+
+ // value=0:OFF
+ // value=1:ON
+ // value=2:AUTO
+ public static void setCdsMode(CaptureRequest.Builder builder, Integer value) {
+ if ( isCdsModeSupported(builder) ) {
+ builder.set(CdsModeKey, value);
+ }
+ }
+
+ private static boolean isCdsModeSupported(CaptureRequest.Builder builder) {
+ return isSupported(builder, CdsModeKey);
+ }
+
+ public static void setJpegCropEnable(CaptureRequest.Builder builder, Byte value) {
+ if ( isJpegCropEnableSupported(builder) ) {
+ builder.set(JpegCropEnableKey, value);
+ }
+ }
+
+ private static boolean isJpegCropEnableSupported(CaptureRequest.Builder builder) {
+ return isSupported(builder, JpegCropEnableKey);
+ }
+
+ public static void setJpegCropRect(CaptureRequest.Builder builder, int[] value) {
+ if ( isJpegCropRectSupported(builder) ) {
+ builder.set(JpegCropRectKey, value);
+ }
+ }
+
+ private static boolean isJpegCropRectSupported(CaptureRequest.Builder builder) {
+ return isSupported(builder, JpegCropRectKey);
+ }
+
+ public static void setJpegRoiRect(CaptureRequest.Builder builder, int[] value) {
+ if ( isJpegRoiRectSupported(builder) ) {
+ builder.set(JpegRoiRectKey, value);
+ }
+ }
+
+ private static boolean isJpegRoiRectSupported(CaptureRequest.Builder builder) {
+ return isSupported(builder, JpegRoiRectKey);
+ }
+
+ public static void setIsoExpPrioritySelectPriority(CaptureRequest.Builder builder,
+ Integer value) {
+ if ( isIsoExpPrioritySelectPrioritySupported(builder) ) {
+ builder.set(SELECT_PRIORITY, value);
+ }
+ }
+ private static boolean isIsoExpPrioritySelectPrioritySupported(CaptureRequest.Builder builder) {
+ return isSupported(builder, SELECT_PRIORITY);
+ }
+
+ public static void setIsoExpPriority(CaptureRequest.Builder builder,Long value) {
+ if ( isIsoExpPrioritySupported(builder) ) {
+ builder.set(ISO_EXP, value);
+ }
+ }
+ private static boolean isIsoExpPrioritySupported(CaptureRequest.Builder builder) {
+ return isSupported(builder, ISO_EXP);
+ }
+
+}
diff --git a/src/org/codeaurora/snapcam/filter/ClearSightImageProcessor.java b/src/org/codeaurora/snapcam/filter/ClearSightImageProcessor.java
index e83e37f88..03e06a1a1 100644
--- a/src/org/codeaurora/snapcam/filter/ClearSightImageProcessor.java
+++ b/src/org/codeaurora/snapcam/filter/ClearSightImageProcessor.java
@@ -87,7 +87,7 @@ import com.android.camera.PhotoModule.NamedImages.NamedEntity;
import com.android.camera.SettingsManager;
import com.android.camera.Storage;
import com.android.camera.util.CameraUtil;
-
+import com.android.camera.util.VendorTagUtil;
public class ClearSightImageProcessor {
private static final String TAG = "ClearSightImageProcessor";
@@ -1081,7 +1081,7 @@ public class ClearSightImageProcessor {
private void sendReprocessRequest(CaptureRequest.Builder reprocRequest, Image image, final int camType) {
try {
- reprocRequest.set(CaptureModule.JpegCropEnableKey, (byte)1);
+ VendorTagUtil.setJpegCropEnable(reprocRequest, (byte)1);
Rect cropRect = image.getCropRect();
if(cropRect == null ||
@@ -1092,14 +1092,14 @@ public class ClearSightImageProcessor {
cropRect = getFinalCropRect(cropRect);
// has crop rect. apply to jpeg request
- reprocRequest.set(CaptureModule.JpegCropRectKey,
+ VendorTagUtil.setJpegCropRect(reprocRequest,
new int[] {cropRect.left, cropRect.top, cropRect.width(), cropRect.height()});
if(camType == CAM_TYPE_MONO) {
- reprocRequest.set(CaptureModule.JpegRoiRectKey,
+ VendorTagUtil.setJpegRoiRect(reprocRequest,
new int[] {0, 0, mFinalMonoSize.getWidth(), mFinalMonoSize.getHeight()});
} else {
- reprocRequest.set(CaptureModule.JpegRoiRectKey,
+ VendorTagUtil.setJpegRoiRect(reprocRequest,
new int[] {0, 0, mFinalPictureSize.getWidth(), mFinalPictureSize.getHeight()});
}