summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/hardware/camera2/impl/CameraDeviceImpl.java14
-rw-r--r--core/java/android/hardware/camera2/legacy/LegacyMetadataMapper.java21
-rw-r--r--core/java/android/hardware/camera2/legacy/LegacyRequestMapper.java19
-rw-r--r--core/java/android/hardware/camera2/legacy/RequestThreadManager.java28
4 files changed, 56 insertions, 26 deletions
diff --git a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
index 2e59eee60aa4..e55ee6777740 100644
--- a/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
+++ b/core/java/android/hardware/camera2/impl/CameraDeviceImpl.java
@@ -533,6 +533,20 @@ public class CameraDeviceImpl extends android.hardware.camera2.CameraDevice {
handler = checkHandler(handler);
}
+ // Make sure that there all requests have at least 1 surface; all surfaces are non-null
+ for (CaptureRequest request : requestList) {
+ if (request.getTargets().isEmpty()) {
+ throw new IllegalArgumentException(
+ "Each request must have at least one Surface target");
+ }
+
+ for (Surface surface : request.getTargets()) {
+ if (surface == null) {
+ throw new IllegalArgumentException("Null Surface targets are not allowed");
+ }
+ }
+ }
+
try (ScopedLock scopedLock = mCloseLock.acquireExclusiveLock()) {
checkIfCameraClosedOrInError();
int requestId;
diff --git a/core/java/android/hardware/camera2/legacy/LegacyMetadataMapper.java b/core/java/android/hardware/camera2/legacy/LegacyMetadataMapper.java
index d7b1a36ad566..3ef538cebbe8 100644
--- a/core/java/android/hardware/camera2/legacy/LegacyMetadataMapper.java
+++ b/core/java/android/hardware/camera2/legacy/LegacyMetadataMapper.java
@@ -154,16 +154,6 @@ public class LegacyMetadataMapper {
private static void mapCharacteristicsFromParameters(CameraMetadataNative m,
Camera.Parameters p) {
/*
- * info.supportedHardwareLevel
- */
- m.set(INFO_SUPPORTED_HARDWARE_LEVEL, INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED);
-
- /*
- * scaler.availableStream*, scaler.available*Durations, sensor.info.maxFrameDuration
- */
- mapScalerStreamConfigs(m, p);
-
- /*
* control.ae*
*/
mapControlAe(m, p);
@@ -205,6 +195,17 @@ public class LegacyMetadataMapper {
* sync.*
*/
mapSync(m, p);
+
+ /*
+ * info.supportedHardwareLevel
+ */
+ m.set(INFO_SUPPORTED_HARDWARE_LEVEL, INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED);
+
+ /*
+ * scaler.availableStream*, scaler.available*Durations, sensor.info.maxFrameDuration
+ */
+ mapScalerStreamConfigs(m, p);
+
}
private static void mapScalerStreamConfigs(CameraMetadataNative m, Camera.Parameters p) {
diff --git a/core/java/android/hardware/camera2/legacy/LegacyRequestMapper.java b/core/java/android/hardware/camera2/legacy/LegacyRequestMapper.java
index 3345967a87f9..17dda0839a1d 100644
--- a/core/java/android/hardware/camera2/legacy/LegacyRequestMapper.java
+++ b/core/java/android/hardware/camera2/legacy/LegacyRequestMapper.java
@@ -176,8 +176,23 @@ public class LegacyRequestMapper {
Range<Integer> aeFpsRange = request.get(CONTROL_AE_TARGET_FPS_RANGE);
if (aeFpsRange != null) {
int[] legacyFps = convertAeFpsRangeToLegacy(aeFpsRange);
- params.setPreviewFpsRange(legacyFps[Parameters.PREVIEW_FPS_MIN_INDEX],
- legacyFps[Parameters.PREVIEW_FPS_MAX_INDEX]);
+
+ // TODO - Should we enforce that all HAL1 devices must include (30, 30) FPS range?
+ boolean supported = false;
+ for(int[] range : params.getSupportedPreviewFpsRange()) {
+ if (legacyFps[0] == range[0] && legacyFps[1] == range[1]) {
+ supported = true;
+ break;
+ }
+ }
+ if (supported) {
+ params.setPreviewFpsRange(legacyFps[Camera.Parameters.PREVIEW_FPS_MIN_INDEX],
+ legacyFps[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]);
+ params.setRecordingHint(false);
+ } else {
+ Log.w(TAG, "Unsupported FPS range set [" + legacyFps[0] + "," + legacyFps[1] + "]");
+ params.setRecordingHint(true);
+ }
}
/*
diff --git a/core/java/android/hardware/camera2/legacy/RequestThreadManager.java b/core/java/android/hardware/camera2/legacy/RequestThreadManager.java
index a9f9355e3fd5..e6d84c564826 100644
--- a/core/java/android/hardware/camera2/legacy/RequestThreadManager.java
+++ b/core/java/android/hardware/camera2/legacy/RequestThreadManager.java
@@ -78,8 +78,8 @@ public class RequestThreadManager {
private volatile RequestHolder mInFlightPreview;
private volatile RequestHolder mInFlightJpeg;
- private final List<Surface> mPreviewOutputs = new ArrayList<Surface>();
- private final List<Surface> mCallbackOutputs = new ArrayList<Surface>();
+ private final List<Surface> mPreviewOutputs = new ArrayList<>();
+ private final List<Surface> mCallbackOutputs = new ArrayList<>();
private GLThreadManager mGLThreadManager;
private SurfaceTexture mPreviewTexture;
private Camera.Parameters mParams;
@@ -274,18 +274,6 @@ public class RequestThreadManager {
mPreviewTexture.setDefaultBufferSize(mIntermediateBufferSize.getWidth(),
mIntermediateBufferSize.getHeight());
mCamera.setPreviewTexture(mPreviewTexture);
- Camera.Parameters params = mCamera.getParameters();
- List<int[]> supportedFpsRanges = params.getSupportedPreviewFpsRange();
- int[] bestRange = getPhotoPreviewFpsRange(supportedFpsRanges);
- if (DEBUG) {
- Log.d(TAG, "doPreviewCapture - Selected range [" +
- bestRange[Camera.Parameters.PREVIEW_FPS_MIN_INDEX] + "," +
- bestRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX] + "]");
- }
- params.setPreviewFpsRange(bestRange[Camera.Parameters.PREVIEW_FPS_MIN_INDEX],
- bestRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]);
- params.setRecordingHint(true);
- mCamera.setParameters(params);
startPreview();
}
@@ -322,6 +310,18 @@ public class RequestThreadManager {
}
}
mParams = mCamera.getParameters();
+
+ List<int[]> supportedFpsRanges = mParams.getSupportedPreviewFpsRange();
+ int[] bestRange = getPhotoPreviewFpsRange(supportedFpsRanges);
+ if (DEBUG) {
+ Log.d(TAG, "doPreviewCapture - Selected range [" +
+ bestRange[Camera.Parameters.PREVIEW_FPS_MIN_INDEX] + "," +
+ bestRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX] + "]");
+ }
+ mParams.setPreviewFpsRange(bestRange[Camera.Parameters.PREVIEW_FPS_MIN_INDEX],
+ bestRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]);
+ mParams.setRecordingHint(true);
+
if (mPreviewOutputs.size() > 0) {
List<Size> outputSizes = new ArrayList<>(outputs.size());
for (Surface s : mPreviewOutputs) {