summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEino-Ville Talvala <etalvala@google.com>2015-08-11 13:33:37 -0700
committerEino-Ville Talvala <etalvala@google.com>2015-08-11 15:04:56 -0700
commit72064af7e75f7e3b2eb2e58a3af408861eb8c4e9 (patch)
treea123e4b89697df201bfedab2410f756cc16f9953
parent301dfe08bc662e9475739309a0ccbce2231ecddb (diff)
downloadframeworks_base-72064af7e75f7e3b2eb2e58a3af408861eb8c4e9.zip
frameworks_base-72064af7e75f7e3b2eb2e58a3af408861eb8c4e9.tar.gz
frameworks_base-72064af7e75f7e3b2eb2e58a3af408861eb8c4e9.tar.bz2
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
-rw-r--r--core/java/android/hardware/camera2/params/StreamConfigurationMap.java21
-rw-r--r--media/java/android/media/ImageReader.java28
2 files changed, 36 insertions, 13 deletions
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");
}
diff --git a/media/java/android/media/ImageReader.java b/media/java/android/media/ImageReader.java
index c97de5d..2164eec 100644
--- a/media/java/android/media/ImageReader.java
+++ b/media/java/android/media/ImageReader.java
@@ -679,17 +679,31 @@ public class ImageReader implements AutoCloseable {
@Override
public int getWidth() {
throwISEIfImageIsInvalid();
- mWidth = (getFormat() == ImageFormat.JPEG) ? ImageReader.this.getWidth() :
- nativeGetWidth(mFormat);
- return mWidth;
+ int width;
+ switch(getFormat()) {
+ case ImageFormat.JPEG:
+ case ImageFormat.DEPTH_POINT_CLOUD:
+ width = ImageReader.this.getWidth();
+ break;
+ default:
+ width = nativeGetWidth(mFormat);
+ }
+ return width;
}
@Override
public int getHeight() {
throwISEIfImageIsInvalid();
- mHeight = (getFormat() == ImageFormat.JPEG) ? ImageReader.this.getHeight() :
- nativeGetHeight(mFormat);
- return mHeight;
+ int height;
+ switch(getFormat()) {
+ case ImageFormat.JPEG:
+ case ImageFormat.DEPTH_POINT_CLOUD:
+ height = ImageReader.this.getHeight();
+ break;
+ default:
+ height = nativeGetHeight(mFormat);
+ }
+ return height;
}
@Override
@@ -826,8 +840,6 @@ public class ImageReader implements AutoCloseable {
private long mTimestamp;
private SurfacePlane[] mPlanes;
- private int mHeight = -1;
- private int mWidth = -1;
private int mFormat = ImageFormat.UNKNOWN;
// If this image is detached from the ImageReader.
private AtomicBoolean mIsDetached = new AtomicBoolean(false);