Loading core/java/android/hardware/camera2/impl/CameraDeviceImpl.java +14 −0 Original line number Diff line number Diff line Loading @@ -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; Loading core/java/android/hardware/camera2/legacy/LegacyMetadataMapper.java +11 −10 Original line number Diff line number Diff line Loading @@ -153,16 +153,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* */ Loading Loading @@ -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) { Loading core/java/android/hardware/camera2/legacy/LegacyRequestMapper.java +17 −2 Original line number Diff line number Diff line Loading @@ -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); } } /* Loading core/java/android/hardware/camera2/legacy/RequestThreadManager.java +14 −14 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); } Loading Loading @@ -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) { Loading Loading
core/java/android/hardware/camera2/impl/CameraDeviceImpl.java +14 −0 Original line number Diff line number Diff line Loading @@ -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; Loading
core/java/android/hardware/camera2/legacy/LegacyMetadataMapper.java +11 −10 Original line number Diff line number Diff line Loading @@ -153,16 +153,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* */ Loading Loading @@ -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) { Loading
core/java/android/hardware/camera2/legacy/LegacyRequestMapper.java +17 −2 Original line number Diff line number Diff line Loading @@ -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); } } /* Loading
core/java/android/hardware/camera2/legacy/RequestThreadManager.java +14 −14 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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(); } Loading Loading @@ -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) { Loading