From 72064af7e75f7e3b2eb2e58a3af408861eb8c4e9 Mon Sep 17 00:00:00 2001 From: Eino-Ville Talvala Date: Tue, 11 Aug 2015 13:33:37 -0700 Subject: Camera: Fix framework bugs with DEPTH-only camera devices Mostly due to no standard stream configurations being defined, and for the correct overrides for DEPTH_POINT_CLOUD format. Bug: 20537722 Change-Id: I8a18f5f68697a09dcc4d7555e51728193fe7f333 --- .../camera2/params/StreamConfigurationMap.java | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'core') diff --git a/core/java/android/hardware/camera2/params/StreamConfigurationMap.java b/core/java/android/hardware/camera2/params/StreamConfigurationMap.java index 8e0eab2..e71e49f 100644 --- a/core/java/android/hardware/camera2/params/StreamConfigurationMap.java +++ b/core/java/android/hardware/camera2/params/StreamConfigurationMap.java @@ -98,9 +98,19 @@ public final class StreamConfigurationMap { HighSpeedVideoConfiguration[] highSpeedVideoConfigurations, ReprocessFormatsMap inputOutputFormatsMap, boolean listHighResolution) { - mConfigurations = checkArrayElementsNotNull(configurations, "configurations"); - mMinFrameDurations = checkArrayElementsNotNull(minFrameDurations, "minFrameDurations"); - mStallDurations = checkArrayElementsNotNull(stallDurations, "stallDurations"); + + if (configurations == null) { + // If no color configurations exist, ensure depth ones do + checkArrayElementsNotNull(depthConfigurations, "depthConfigurations"); + mConfigurations = new StreamConfiguration[0]; + mMinFrameDurations = new StreamConfigurationDuration[0]; + mStallDurations = new StreamConfigurationDuration[0]; + } else { + mConfigurations = checkArrayElementsNotNull(configurations, "configurations"); + mMinFrameDurations = checkArrayElementsNotNull(minFrameDurations, "minFrameDurations"); + mStallDurations = checkArrayElementsNotNull(stallDurations, "stallDurations"); + } + mListHighResolution = listHighResolution; if (depthConfigurations == null) { @@ -124,7 +134,7 @@ public final class StreamConfigurationMap { } // For each format, track how many sizes there are available to configure - for (StreamConfiguration config : configurations) { + for (StreamConfiguration config : mConfigurations) { int fmt = config.getFormat(); SparseIntArray map = null; if (config.isOutput()) { @@ -159,7 +169,8 @@ public final class StreamConfigurationMap { mDepthOutputFormats.get(config.getFormat()) + 1); } - if (mOutputFormats.indexOfKey(HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED) < 0) { + if (configurations != null && + mOutputFormats.indexOfKey(HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED) < 0) { throw new AssertionError( "At least one stream configuration for IMPLEMENTATION_DEFINED must exist"); } -- cgit v1.1