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
This commit is contained in:
Eino-Ville Talvala
2015-08-11 13:33:37 -07:00
parent 301dfe08bc
commit 72064af7e7
2 changed files with 36 additions and 13 deletions

View File

@ -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");
}

View File

@ -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);