summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2018-04-11 15:52:47 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2018-04-11 15:52:47 -0700
commitbb83dc4bc3cd4b091e59ff21e654fb355e86556b (patch)
tree11767b61e4bd89dad8fdef7912c26547692b6334
parent1eff55c0639910a06c012e71229889c647c9ca8a (diff)
parentdf9daa56ab5f6ddc4579d4f32692435c647e8663 (diff)
downloadandroid_packages_apps_Snap-bb83dc4bc3cd4b091e59ff21e654fb355e86556b.tar.gz
android_packages_apps_Snap-bb83dc4bc3cd4b091e59ff21e654fb355e86556b.tar.bz2
android_packages_apps_Snap-bb83dc4bc3cd4b091e59ff21e654fb355e86556b.zip
Merge "SnapdragonCamera: Add the 60fps support for preview"
-rwxr-xr-xsrc/com/android/camera/CaptureModule.java2
-rwxr-xr-xsrc/com/android/camera/SettingsManager.java11
-rwxr-xr-xsrc/com/android/camera/util/CameraUtil.java46
3 files changed, 58 insertions, 1 deletions
diff --git a/src/com/android/camera/CaptureModule.java b/src/com/android/camera/CaptureModule.java
index 1196f3c29..6dfafcb2a 100755
--- a/src/com/android/camera/CaptureModule.java
+++ b/src/com/android/camera/CaptureModule.java
@@ -286,6 +286,8 @@ public class CaptureModule implements CameraModule, PhotoController,
new CameraCharacteristics.Key<>("org.quic.camera2.customhfrfps.info.CustomHFRFpsTable", int[].class);
public static final CameraCharacteristics.Key<int[]> sensorModeTable =
new CameraCharacteristics.Key<>("org.quic.camera2.sensormode.info.SensorModeTable", int[].class);
+ public static final CameraCharacteristics.Key<int[]> highSpeedVideoConfigs =
+ new CameraCharacteristics.Key<>("android.control.availableHighSpeedVideoConfigurations", int[].class);
public static final CaptureRequest.Key<Integer> sharpness_control = new CaptureRequest.Key<>(
"org.codeaurora.qcamera3.sharpness.strength", Integer.class);
diff --git a/src/com/android/camera/SettingsManager.java b/src/com/android/camera/SettingsManager.java
index b9aca66fd..afb02eb89 100755
--- a/src/com/android/camera/SettingsManager.java
+++ b/src/com/android/camera/SettingsManager.java
@@ -504,6 +504,17 @@ public class SettingsManager implements ListMenu.SettingsListener {
return sensorModeTable;
}
+ public int[] getHighSpeedVideoConfigs(final int cameraId) {
+ int[] highSpeedVideoConfigs = null;
+ try {
+ highSpeedVideoConfigs = mCharacteristics.get(cameraId).get(
+ CaptureModule.highSpeedVideoConfigs);
+ } catch (IllegalArgumentException exception) {
+ exception.printStackTrace();
+ }
+ return highSpeedVideoConfigs;
+ }
+
public void registerListener(Listener listener) {
mListeners.add(listener);
}
diff --git a/src/com/android/camera/util/CameraUtil.java b/src/com/android/camera/util/CameraUtil.java
index 378d6633f..0704a90f9 100755
--- a/src/com/android/camera/util/CameraUtil.java
+++ b/src/com/android/camera/util/CameraUtil.java
@@ -1403,7 +1403,10 @@ public class CameraUtil {
// Request list size: to limit the preview to 30fps, need use maxFps/30; to maximize
// the preview frame rate, should use maxBatch size for that high speed stream
// configuration. We choose the former for now.
- int requestListSize = fpsRange.getUpper() / 30;
+ int requestListSize = getHighSpeedVideoConfigsLists((int)request.getTag());
+ if (requestListSize == -1) {
+ requestListSize = fpsRange.getUpper() / 30;
+ }
List<CaptureRequest> requestList = new ArrayList<CaptureRequest>();
// Prepare the Request builders: need carry over the request controls.
@@ -1471,6 +1474,47 @@ public class CameraUtil {
return Collections.unmodifiableList(requestList);
}
+ private static int getHighSpeedVideoConfigsLists(int cameraId) {
+ int optimalSizeIndex = -1;
+ SettingsManager settingsManager = SettingsManager.getInstance();
+ int[] table = settingsManager.getHighSpeedVideoConfigs(cameraId);
+ if (table == null) {
+ Log.w(TAG, " getHighSpeedVideoConfigsLists is null");
+ return optimalSizeIndex;
+ }
+ String videoSizeString = settingsManager.getValue(SettingsManager.KEY_VIDEO_QUALITY);
+ if (videoSizeString == null) {
+ Log.w(TAG, " KEY_VIDEO_QUALITY is null");
+ return optimalSizeIndex;
+ }
+ android.util.Size videoSize = parsePictureSize(videoSizeString);
+ String rateValue = settingsManager.getValue(SettingsManager.KEY_VIDEO_HIGH_FRAME_RATE);
+ if (rateValue == null || rateValue.substring(0, 3).equals("off")) {
+ Log.w(TAG, " KEY_VIDEO_HIGH_FRAME_RATE is null");
+ return optimalSizeIndex;
+ }
+ int frameRate = Integer.parseInt(rateValue.substring(3));
+ for (int i = 0; i < table.length; i += 5) {
+ if (table[i] == videoSize.getWidth()
+ && table[i + 1] == videoSize.getHeight()
+ && (table[i + 2] == frameRate
+ || table[i + 3] == frameRate)) {
+ if (i != table.length) {
+ optimalSizeIndex = table[i + 4];
+ return optimalSizeIndex;
+ }
+ }
+ }
+ return optimalSizeIndex;
+ }
+
+ private static android.util.Size parsePictureSize(String value) {
+ int indexX = value.indexOf('x');
+ int width = Integer.parseInt(value.substring(0, indexX));
+ int height = Integer.parseInt(value.substring(indexX + 1));
+ return new android.util.Size(width, height);
+ }
+
private static CaptureRequest.Builder constructorCaptureRequestBuilder (
CameraMetadataNative requestMetadata, boolean reprocess, int SESSION_ID_NONE,
CaptureRequest request, Set<String> physicalCameraIdSet) {