Camera: Add NDK support for depth jpeg format

Depth jpeg image format must be available for
native clients using the Camera NDK.

Bug: 124064032
Test: Camera CTS
Change-Id: I21f14ea63fe4a568c1cfccd0dcd32fce5cad8098
gugelfrei
Emilian Peev 5 years ago
parent 54aa6de10b
commit 44df34d4f8

@ -38,6 +38,8 @@ ACameraMetadata::ACameraMetadata(camera_metadata_t* buffer, ACAMERA_METADATA_TYP
filterDurations(ANDROID_DEPTH_AVAILABLE_DEPTH_STALL_DURATIONS); filterDurations(ANDROID_DEPTH_AVAILABLE_DEPTH_STALL_DURATIONS);
filterDurations(ANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS); filterDurations(ANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS);
filterDurations(ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS); filterDurations(ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS);
filterDurations(ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS);
filterDurations(ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STALL_DURATIONS);
} }
// TODO: filter request/result keys // TODO: filter request/result keys
} }
@ -186,6 +188,16 @@ ACameraMetadata::filterDurations(uint32_t tag) {
filteredDurations.push_back(duration); filteredDurations.push_back(duration);
} }
break; break;
case ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS:
case ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STALL_DURATIONS:
if (format == HAL_PIXEL_FORMAT_BLOB) {
format = AIMAGE_FORMAT_DEPTH_JPEG;
filteredDurations.push_back(format);
filteredDurations.push_back(width);
filteredDurations.push_back(height);
filteredDurations.push_back(duration);
}
break;
default: default:
// Should not reach here // Should not reach here
ALOGE("%s: Unkown tag 0x%x", __FUNCTION__, tag); ALOGE("%s: Unkown tag 0x%x", __FUNCTION__, tag);
@ -284,6 +296,32 @@ ACameraMetadata::filterStreamConfigurations() {
filteredHeicStreamConfigs.push_back(isInput); filteredHeicStreamConfigs.push_back(isInput);
} }
mData.update(ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS, filteredHeicStreamConfigs); mData.update(ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS, filteredHeicStreamConfigs);
entry = mData.find(ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS);
Vector<int32_t> filteredDynamicDepthStreamConfigs;
filteredDynamicDepthStreamConfigs.setCapacity(entry.count);
for (size_t i = 0; i < entry.count; i += STREAM_CONFIGURATION_SIZE) {
int32_t format = entry.data.i32[i + STREAM_FORMAT_OFFSET];
int32_t width = entry.data.i32[i + STREAM_WIDTH_OFFSET];
int32_t height = entry.data.i32[i + STREAM_HEIGHT_OFFSET];
int32_t isInput = entry.data.i32[i + STREAM_IS_INPUT_OFFSET];
if (isInput == ACAMERA_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_INPUT) {
// Hide input streams
continue;
}
// Translate HAL formats to NDK format
if (format == HAL_PIXEL_FORMAT_BLOB) {
format = AIMAGE_FORMAT_DEPTH_JPEG;
}
filteredDynamicDepthStreamConfigs.push_back(format);
filteredDynamicDepthStreamConfigs.push_back(width);
filteredDynamicDepthStreamConfigs.push_back(height);
filteredDynamicDepthStreamConfigs.push_back(isInput);
}
mData.update(ACAMERA_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS,
filteredDynamicDepthStreamConfigs);
} }
bool bool

@ -70,6 +70,7 @@ AImageReader::isSupportedFormatAndUsage(int32_t format, uint64_t usage) {
case AIMAGE_FORMAT_DEPTH_POINT_CLOUD: case AIMAGE_FORMAT_DEPTH_POINT_CLOUD:
case AIMAGE_FORMAT_Y8: case AIMAGE_FORMAT_Y8:
case AIMAGE_FORMAT_HEIC: case AIMAGE_FORMAT_HEIC:
case AIMAGE_FORMAT_DEPTH_JPEG:
return true; return true;
case AIMAGE_FORMAT_PRIVATE: case AIMAGE_FORMAT_PRIVATE:
// For private format, cpu usage is prohibited. // For private format, cpu usage is prohibited.
@ -98,6 +99,7 @@ AImageReader::getNumPlanesForFormat(int32_t format) {
case AIMAGE_FORMAT_DEPTH_POINT_CLOUD: case AIMAGE_FORMAT_DEPTH_POINT_CLOUD:
case AIMAGE_FORMAT_Y8: case AIMAGE_FORMAT_Y8:
case AIMAGE_FORMAT_HEIC: case AIMAGE_FORMAT_HEIC:
case AIMAGE_FORMAT_DEPTH_JPEG:
return 1; return 1;
case AIMAGE_FORMAT_PRIVATE: case AIMAGE_FORMAT_PRIVATE:
return 0; return 0;

@ -535,6 +535,15 @@ enum AIMAGE_FORMATS {
* Format as described in ISO/IEC 23008-12.</p> * Format as described in ISO/IEC 23008-12.</p>
*/ */
AIMAGE_FORMAT_HEIC = 0x48454946, AIMAGE_FORMAT_HEIC = 0x48454946,
/**
* Depth augmented compressed JPEG format.
*
* <p>JPEG compressed main image along with XMP embedded depth metadata
* following ISO 16684-1:2011(E).</p>
*/
AIMAGE_FORMAT_DEPTH_JPEG = 0x69656963,
}; };
/** /**

Loading…
Cancel
Save