diff options
author | Chien-Yu Chen <cychen@google.com> | 2015-05-20 10:16:59 -0700 |
---|---|---|
committer | Chien-Yu Chen <cychen@google.com> | 2015-05-22 10:40:21 -0700 |
commit | 310f381eac558bce069b52fbda9a8aeb83608858 (patch) | |
tree | 515a2c3ba6c2c474b654e47fe7bf0a706e827106 /core/java/android/hardware | |
parent | 6246ade0b36a1583e254b7aded3b232da9290f6d (diff) | |
download | frameworks_base-310f381eac558bce069b52fbda9a8aeb83608858.zip frameworks_base-310f381eac558bce069b52fbda9a8aeb83608858.tar.gz frameworks_base-310f381eac558bce069b52fbda9a8aeb83608858.tar.bz2 |
Camera2: Implement toString() for camera2 params
Implement toString() for BlackLevelPattern, InputConfiguration, and
StreamConfigurationMap.
Bug: 16899576
Change-Id: Ide1cf103f3282750653ce7bdc29c0b74920d4855
Diffstat (limited to 'core/java/android/hardware')
3 files changed, 194 insertions, 0 deletions
diff --git a/core/java/android/hardware/camera2/params/BlackLevelPattern.java b/core/java/android/hardware/camera2/params/BlackLevelPattern.java index a09f3d9..6d6c094 100644 --- a/core/java/android/hardware/camera2/params/BlackLevelPattern.java +++ b/core/java/android/hardware/camera2/params/BlackLevelPattern.java @@ -124,5 +124,24 @@ public final class BlackLevelPattern { return Arrays.hashCode(mCfaOffsets); } + /** + * Return this {@link BlackLevelPattern} as a string representation. + * + * <p> {@code "BlackLevelPattern([%d, %d], [%d, %d])"}, where each {@code %d} represents one + * black level offset of a color channel. The values are in the same order as channels listed + * for the CFA layout key (see + * {@link android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_COLOR_FILTER_ARRANGEMENT}). + * </p> + * + * @return string representation of {@link BlackLevelPattern} + * + * @see android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_COLOR_FILTER_ARRANGEMENT + */ + @Override + public String toString() { + return String.format("BlackLevelPattern([%d, %d], [%d, %d])", mCfaOffsets[0], + mCfaOffsets[1], mCfaOffsets[2], mCfaOffsets[3]); + } + private final int[] mCfaOffsets; } diff --git a/core/java/android/hardware/camera2/params/InputConfiguration.java b/core/java/android/hardware/camera2/params/InputConfiguration.java index 0c642cf..d95f889 100644 --- a/core/java/android/hardware/camera2/params/InputConfiguration.java +++ b/core/java/android/hardware/camera2/params/InputConfiguration.java @@ -112,4 +112,17 @@ public final class InputConfiguration { public int hashCode() { return HashCodeHelpers.hashCode(mWidth, mHeight, mFormat); } + + /** + * Return this {@link InputConfiguration} as a string representation. + * + * <p> {@code "InputConfiguration(w:%d, h:%d, format:%d)"}, where {@code %d} represents + * the width, height, and format, respectively.</p> + * + * @return string representation of {@link InputConfiguration} + */ + @Override + public String toString() { + return String.format("InputConfiguration(w:%d, h:%d, format:%d)", mWidth, mHeight, mFormat); + } } diff --git a/core/java/android/hardware/camera2/params/StreamConfigurationMap.java b/core/java/android/hardware/camera2/params/StreamConfigurationMap.java index c231692..c6ea488 100644 --- a/core/java/android/hardware/camera2/params/StreamConfigurationMap.java +++ b/core/java/android/hardware/camera2/params/StreamConfigurationMap.java @@ -1316,6 +1316,168 @@ public final class StreamConfigurationMap { return false; } + /** + * Return this {@link StreamConfigurationMap} as a string representation. + * + * <p>{@code "StreamConfigurationMap(Outputs([w:%d, h:%d, format:%s(%d), min_duration:%d, + * stall:%d], ... [w:%d, h:%d, format:%s(%d), min_duration:%d, stall:%d]), Inputs([w:%d, h:%d, + * format:%s(%d)], ... [w:%d, h:%d, format:%s(%d)]), ValidOutputFormatsForInput( + * [in:%d, out:%d, ... %d], ... [in:%d, out:%d, ... %d]), HighSpeedVideoConfigurations( + * [w:%d, h:%d, min_fps:%d, max_fps:%d], ... [w:%d, h:%d, min_fps:%d, max_fps:%d]))"}.</p> + * + * <p>{@code Outputs([w:%d, h:%d, format:%s(%d), min_duration:%d, stall:%d], ... + * [w:%d, h:%d, format:%s(%d), min_duration:%d, stall:%d])}, where + * {@code [w:%d, h:%d, format:%s(%d), min_duration:%d, stall:%d]} represents an output + * configuration's width, height, format, minimal frame duration in nanoseconds, and stall + * duration in nanoseconds.</p> + * + * <p>{@code Inputs([w:%d, h:%d, format:%s(%d)], ... [w:%d, h:%d, format:%s(%d)])}, where + * {@code [w:%d, h:%d, format:%s(%d)]} represents an input configuration's width, height, and + * format.</p> + * + * <p>{@code ValidOutputFormatsForInput([in:%s(%d), out:%s(%d), ... %s(%d)], + * ... [in:%s(%d), out:%s(%d), ... %s(%d)])}, where {@code [in:%s(%d), out:%s(%d), ... %s(%d)]} + * represents an input fomat and its valid output formats.</p> + * + * <p>{@code HighSpeedVideoConfigurations([w:%d, h:%d, min_fps:%d, max_fps:%d], + * ... [w:%d, h:%d, min_fps:%d, max_fps:%d])}, where + * {@code [w:%d, h:%d, min_fps:%d, max_fps:%d]} represents a high speed video output + * configuration's width, height, minimal frame rate, and maximal frame rate.</p> + * + * @return string representation of {@link StreamConfigurationMap} + */ + @Override + public String toString() { + StringBuilder sb = new StringBuilder("StreamConfiguration("); + appendOutputsString(sb); + sb.append(", "); + appendInputsString(sb); + sb.append(", "); + appendValidOutputFormatsForInputString(sb); + sb.append(", "); + appendHighSpeedVideoConfigurationsString(sb); + sb.append(")"); + + return sb.toString(); + } + + private void appendOutputsString(StringBuilder sb) { + sb.append("Outputs("); + int[] formats = getOutputFormats(); + for (int format : formats) { + Size[] sizes = getOutputSizes(format); + for (Size size : sizes) { + long minFrameDuration = getOutputMinFrameDuration(format, size); + long stallDuration = getOutputStallDuration(format, size); + sb.append(String.format("[w:%d, h:%d, format:%s(%d), min_duration:%d, " + + "stall:%d], ", size.getWidth(), size.getHeight(), formatToString(format), + format, minFrameDuration, stallDuration)); + } + } + // Remove the pending ", " + if (sb.charAt(sb.length() - 1) == ' ') { + sb.delete(sb.length() - 2, sb.length()); + } + sb.append(")"); + } + + private void appendInputsString(StringBuilder sb) { + sb.append("Inputs("); + int[] formats = getInputFormats(); + for (int format : formats) { + Size[] sizes = getInputSizes(format); + for (Size size : sizes) { + sb.append(String.format("[w:%d, h:%d, format:%s(%d)], ", size.getWidth(), + size.getHeight(), formatToString(format), format)); + } + } + // Remove the pending ", " + if (sb.charAt(sb.length() - 1) == ' ') { + sb.delete(sb.length() - 2, sb.length()); + } + sb.append(")"); + } + + private void appendValidOutputFormatsForInputString(StringBuilder sb) { + sb.append("ValidOutputFormatsForInput("); + int[] inputFormats = getInputFormats(); + for (int inputFormat : inputFormats) { + sb.append(String.format("[in:%s(%d), out:", formatToString(inputFormat), inputFormat)); + int[] outputFormats = getValidOutputFormatsForInput(inputFormat); + for (int i = 0; i < outputFormats.length; i++) { + sb.append(String.format("%s(%d)", formatToString(outputFormats[i]), + outputFormats[i])); + if (i < outputFormats.length - 1) { + sb.append(", "); + } + } + sb.append("], "); + } + // Remove the pending ", " + if (sb.charAt(sb.length() - 1) == ' ') { + sb.delete(sb.length() - 2, sb.length()); + } + sb.append(")"); + } + + private void appendHighSpeedVideoConfigurationsString(StringBuilder sb) { + sb.append("HighSpeedVideoConfigurations("); + Size[] sizes = getHighSpeedVideoSizes(); + for (Size size : sizes) { + Range<Integer>[] ranges = getHighSpeedVideoFpsRangesFor(size); + for (Range<Integer> range : ranges) { + sb.append(String.format("[w:%d, h:%d, min_fps:%d, max_fps:%d], ", size.getWidth(), + size.getHeight(), range.getLower(), range.getUpper())); + } + } + // Remove the pending ", " + if (sb.charAt(sb.length() - 1) == ' ') { + sb.delete(sb.length() - 2, sb.length()); + } + sb.append(")"); + } + + private String formatToString(int format) { + switch (format) { + case ImageFormat.YV12: + return "YV12"; + case ImageFormat.YUV_420_888: + return "YUV_420_888"; + case ImageFormat.NV21: + return "NV21"; + case ImageFormat.NV16: + return "NV16"; + case PixelFormat.RGB_565: + return "RGB_565"; + case PixelFormat.RGBA_8888: + return "RGBA_8888"; + case PixelFormat.RGBX_8888: + return "RGBX_8888"; + case PixelFormat.RGB_888: + return "RGB_888"; + case ImageFormat.JPEG: + return "JPEG"; + case ImageFormat.YUY2: + return "YUY2"; + case ImageFormat.Y8: + return "Y8"; + case ImageFormat.Y16: + return "Y16"; + case ImageFormat.RAW_SENSOR: + return "RAW_SENSOR"; + case ImageFormat.RAW10: + return "RAW10"; + case ImageFormat.DEPTH16: + return "DEPTH16"; + case ImageFormat.DEPTH_POINT_CLOUD: + return "DEPTH_POINT_CLOUD"; + case ImageFormat.PRIVATE: + return "PRIVATE"; + default: + return "UNKNOWN"; + } + } + // from system/core/include/system/graphics.h private static final int HAL_PIXEL_FORMAT_BLOB = 0x21; private static final int HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED = 0x22; |