Loading core/java/android/hardware/camera2/CameraExtensionCharacteristics.java +19 −11 Original line number Diff line number Diff line Loading @@ -1066,6 +1066,7 @@ public final class CameraExtensionCharacteristics { case ImageFormat.YUV_420_888: case ImageFormat.JPEG: case ImageFormat.JPEG_R: case ImageFormat.DEPTH_JPEG: case ImageFormat.YCBCR_P010: break; default: Loading Loading @@ -1096,9 +1097,10 @@ public final class CameraExtensionCharacteristics { // processed YUV_420 buffers. return getSupportedSizes( extenders.second.getSupportedPostviewResolutions(sz), format); } else if (format == ImageFormat.JPEG_R || format == ImageFormat.YCBCR_P010) { // Jpeg_R/UltraHDR + YCBCR_P010 is currently not supported in the basic // extension case } else if (format == ImageFormat.JPEG_R || format == ImageFormat.YCBCR_P010 || (Flags.depthJpegExtensions() && (format == ImageFormat.DEPTH_JPEG))) { // DepthJpeg/Jpeg_R/UltraHDR + YCBCR_P010 is currently not supported in the // basic extension case return new ArrayList<>(); } else { throw new IllegalArgumentException("Unsupported format: " + format); Loading Loading @@ -1194,8 +1196,8 @@ public final class CameraExtensionCharacteristics { * * <p>Device-specific extensions currently support at most three * multi-frame capture surface formats. ImageFormat.JPEG will be supported by all * extensions while ImageFormat.YUV_420_888, ImageFormat.JPEG_R, or ImageFormat.YCBCR_P010 * may or may not be supported.</p> * extensions while ImageFormat.YUV_420_888, ImageFormat.JPEG_R, ImageFormat.YCBCR_P010 or * ImageFormat.DEPTH_JPEG may or may not be supported.</p> * * @param extension the extension type * @param format device-specific extension output format Loading @@ -1203,7 +1205,8 @@ public final class CameraExtensionCharacteristics { * supported. * @throws IllegalArgumentException in case of format different from ImageFormat.JPEG, * ImageFormat.YUV_420_888, ImageFormat.JPEG_R, * ImageFormat.YCBCR_P010; or unsupported extension. * ImageFormat.DEPTH_JPEG, ImageFormat.YCBCR_P010; or * unsupported extension. */ public @NonNull List<Size> getExtensionSupportedSizes(@Extension int extension, int format) { Loading @@ -1227,6 +1230,7 @@ public final class CameraExtensionCharacteristics { case ImageFormat.YUV_420_888: case ImageFormat.JPEG: case ImageFormat.JPEG_R: case ImageFormat.DEPTH_JPEG: case ImageFormat.YCBCR_P010: break; default: Loading Loading @@ -1260,8 +1264,9 @@ public final class CameraExtensionCharacteristics { } else { return generateSupportedSizes(null, format, streamMap); } } else if (format == ImageFormat.JPEG_R || format == ImageFormat.YCBCR_P010) { // Jpeg_R/UltraHDR + YCBCR_P010 is currently not supported in the } else if (format == ImageFormat.JPEG_R || format == ImageFormat.YCBCR_P010 || (Flags.depthJpegExtensions() && (format == ImageFormat.DEPTH_JPEG))) { // DepthJpeg/Jpeg_R/UltraHDR + YCBCR_P010 is currently not supported in the // basic extension case return new ArrayList<>(); } else { Loading Loading @@ -1292,7 +1297,8 @@ public final class CameraExtensionCharacteristics { * or null if no capture latency info can be provided * @throws IllegalArgumentException in case of format different from {@link ImageFormat#JPEG}, * {@link ImageFormat#YUV_420_888}, {@link ImageFormat#JPEG_R} * {@link ImageFormat#YCBCR_P010}; * {@link ImageFormat#YCBCR_P010}, * {@link ImageFormat#DEPTH_JPEG}; * or unsupported extension. */ public @Nullable Range<Long> getEstimatedCaptureLatencyRangeMillis(@Extension int extension, Loading @@ -1301,6 +1307,7 @@ public final class CameraExtensionCharacteristics { case ImageFormat.YUV_420_888: case ImageFormat.JPEG: case ImageFormat.JPEG_R: case ImageFormat.DEPTH_JPEG: case ImageFormat.YCBCR_P010: //No op break; Loading Loading @@ -1349,8 +1356,9 @@ public final class CameraExtensionCharacteristics { // specific and cannot be estimated accurately enough. return null; } if (format == ImageFormat.JPEG_R || format == ImageFormat.YCBCR_P010) { // JpegR/UltraHDR + YCBCR_P010 is not supported for basic extensions if (format == ImageFormat.JPEG_R || format == ImageFormat.YCBCR_P010 || (Flags.depthJpegExtensions() && (format == ImageFormat.DEPTH_JPEG))) { // DepthJpeg/JpegR/UltraHDR + YCBCR_P010 is not supported for basic extensions return null; } Loading core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java +7 −7 Original line number Diff line number Diff line Loading @@ -186,12 +186,12 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes HashMap<Integer, List<Size>> supportedCaptureSizes = new HashMap<>(); IntArray supportedCaptureOutputFormats = new IntArray(CameraExtensionUtils.SUPPORTED_CAPTURE_OUTPUT_FORMATS.length); supportedCaptureOutputFormats.addAll( CameraExtensionUtils.SUPPORTED_CAPTURE_OUTPUT_FORMATS); supportedCaptureOutputFormats.add(ImageFormat.YCBCR_P010); for (int format : supportedCaptureOutputFormats.toArray()) { Integer[] supportedCaptureOutputFormats = new Integer[CameraExtensionUtils.SUPPORTED_CAPTURE_OUTPUT_FORMATS.size()]; supportedCaptureOutputFormats = CameraExtensionUtils.SUPPORTED_CAPTURE_OUTPUT_FORMATS.toArray( supportedCaptureOutputFormats); for (int format : supportedCaptureOutputFormats) { List<Size> supportedSizes = extensionChars.getExtensionSupportedSizes( config.getExtension(), format); if (supportedSizes != null) { Loading Loading @@ -230,7 +230,7 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes Size burstCaptureSurfaceSize = new Size(burstCaptureSurfaceInfo.mWidth, burstCaptureSurfaceInfo.mHeight); HashMap<Integer, List<Size>> supportedPostviewSizes = new HashMap<>(); for (int format : supportedCaptureOutputFormats.toArray()) { for (int format : supportedCaptureOutputFormats) { List<Size> supportedSizesPostview = extensionChars.getPostviewSupportedSizes( config.getExtension(), burstCaptureSurfaceSize, format); if (supportedSizesPostview != null) { Loading core/java/android/hardware/camera2/impl/CameraExtensionSessionImpl.java +7 −7 Original line number Diff line number Diff line Loading @@ -186,12 +186,12 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession { } HashMap<Integer, List<Size>> supportedCaptureSizes = new HashMap<>(); IntArray supportedCaptureOutputFormats = new IntArray(CameraExtensionUtils.SUPPORTED_CAPTURE_OUTPUT_FORMATS.length); supportedCaptureOutputFormats.addAll( CameraExtensionUtils.SUPPORTED_CAPTURE_OUTPUT_FORMATS); supportedCaptureOutputFormats.add(ImageFormat.YCBCR_P010); for (int format : supportedCaptureOutputFormats.toArray()) { Integer[] supportedCaptureOutputFormats = new Integer[CameraExtensionUtils.SUPPORTED_CAPTURE_OUTPUT_FORMATS.size()]; supportedCaptureOutputFormats = CameraExtensionUtils.SUPPORTED_CAPTURE_OUTPUT_FORMATS.toArray( supportedCaptureOutputFormats); for (int format : supportedCaptureOutputFormats) { List<Size> supportedSizes = extensionChars.getExtensionSupportedSizes( config.getExtension(), format); if (supportedSizes != null) { Loading Loading @@ -223,7 +223,7 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession { Size burstCaptureSurfaceSize = new Size(burstCaptureSurfaceInfo.mWidth, burstCaptureSurfaceInfo.mHeight); HashMap<Integer, List<Size>> supportedPostviewSizes = new HashMap<>(); for (int format : supportedCaptureOutputFormats.toArray()) { for (int format : supportedCaptureOutputFormats) { List<Size> supportedSizesPostview = extensionChars.getPostviewSupportedSizes( config.getExtension(), burstCaptureSurfaceSize, format); if (supportedSizesPostview != null) { Loading core/java/android/hardware/camera2/impl/CameraExtensionUtils.java +26 −11 Original line number Diff line number Diff line Loading @@ -32,11 +32,14 @@ import android.os.Handler; import android.util.IntArray; import android.util.Log; import android.util.Size; import android.util.SparseIntArray; import android.view.Surface; import com.android.internal.camera.flags.Flags; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.concurrent.Executor; Loading @@ -48,11 +51,16 @@ public final class CameraExtensionUtils { public final static int JPEG_DEFAULT_QUALITY = 100; public final static int JPEG_DEFAULT_ROTATION = 0; public static final int[] SUPPORTED_CAPTURE_OUTPUT_FORMATS = { CameraExtensionCharacteristics.PROCESSING_INPUT_FORMAT, ImageFormat.JPEG, ImageFormat.JPEG_R }; public static HashSet<Integer> SUPPORTED_CAPTURE_OUTPUT_FORMATS = new HashSet<>(); static { SUPPORTED_CAPTURE_OUTPUT_FORMATS.addAll(Arrays.asList( CameraExtensionCharacteristics.PROCESSING_INPUT_FORMAT, ImageFormat.JPEG, ImageFormat.YCBCR_P010, ImageFormat.JPEG_R )); if (Flags.depthJpegExtensions()) { SUPPORTED_CAPTURE_OUTPUT_FORMATS.add(ImageFormat.DEPTH_JPEG); } } public static class SurfaceInfo { public int mWidth = 0; Loading Loading @@ -101,6 +109,13 @@ public final class CameraExtensionUtils { surfaceInfo.mFormat = ImageFormat.JPEG_R; return surfaceInfo; } if (Flags.depthJpegExtensions()) { if ((nativeFormat == StreamConfigurationMap.HAL_PIXEL_FORMAT_BLOB) && (dataspace == StreamConfigurationMap.HAL_DATASPACE_DYNAMIC_DEPTH)) { surfaceInfo.mFormat = ImageFormat.DEPTH_JPEG; return surfaceInfo; } } return surfaceInfo; } Loading @@ -125,14 +140,14 @@ public final class CameraExtensionUtils { public static Surface getBurstCaptureSurface( @NonNull List<OutputConfiguration> outputConfigs, @NonNull HashMap<Integer, List<Size>> supportedCaptureSizes) { IntArray supportedCaptureOutputFormats = new IntArray(CameraExtensionUtils.SUPPORTED_CAPTURE_OUTPUT_FORMATS.length); supportedCaptureOutputFormats.addAll( CameraExtensionUtils.SUPPORTED_CAPTURE_OUTPUT_FORMATS); supportedCaptureOutputFormats.add(ImageFormat.YCBCR_P010); Integer[] supportedCaptureOutputFormats = new Integer[CameraExtensionUtils.SUPPORTED_CAPTURE_OUTPUT_FORMATS.size()]; supportedCaptureOutputFormats = CameraExtensionUtils.SUPPORTED_CAPTURE_OUTPUT_FORMATS.toArray( supportedCaptureOutputFormats); for (OutputConfiguration config : outputConfigs) { SurfaceInfo surfaceInfo = querySurface(config.getSurface()); for (int supportedFormat : supportedCaptureOutputFormats.toArray()) { for (int supportedFormat : supportedCaptureOutputFormats) { if (surfaceInfo.mFormat == supportedFormat) { Size captureSize = new Size(surfaceInfo.mWidth, surfaceInfo.mHeight); if (supportedCaptureSizes.containsKey(supportedFormat)) { Loading Loading
core/java/android/hardware/camera2/CameraExtensionCharacteristics.java +19 −11 Original line number Diff line number Diff line Loading @@ -1066,6 +1066,7 @@ public final class CameraExtensionCharacteristics { case ImageFormat.YUV_420_888: case ImageFormat.JPEG: case ImageFormat.JPEG_R: case ImageFormat.DEPTH_JPEG: case ImageFormat.YCBCR_P010: break; default: Loading Loading @@ -1096,9 +1097,10 @@ public final class CameraExtensionCharacteristics { // processed YUV_420 buffers. return getSupportedSizes( extenders.second.getSupportedPostviewResolutions(sz), format); } else if (format == ImageFormat.JPEG_R || format == ImageFormat.YCBCR_P010) { // Jpeg_R/UltraHDR + YCBCR_P010 is currently not supported in the basic // extension case } else if (format == ImageFormat.JPEG_R || format == ImageFormat.YCBCR_P010 || (Flags.depthJpegExtensions() && (format == ImageFormat.DEPTH_JPEG))) { // DepthJpeg/Jpeg_R/UltraHDR + YCBCR_P010 is currently not supported in the // basic extension case return new ArrayList<>(); } else { throw new IllegalArgumentException("Unsupported format: " + format); Loading Loading @@ -1194,8 +1196,8 @@ public final class CameraExtensionCharacteristics { * * <p>Device-specific extensions currently support at most three * multi-frame capture surface formats. ImageFormat.JPEG will be supported by all * extensions while ImageFormat.YUV_420_888, ImageFormat.JPEG_R, or ImageFormat.YCBCR_P010 * may or may not be supported.</p> * extensions while ImageFormat.YUV_420_888, ImageFormat.JPEG_R, ImageFormat.YCBCR_P010 or * ImageFormat.DEPTH_JPEG may or may not be supported.</p> * * @param extension the extension type * @param format device-specific extension output format Loading @@ -1203,7 +1205,8 @@ public final class CameraExtensionCharacteristics { * supported. * @throws IllegalArgumentException in case of format different from ImageFormat.JPEG, * ImageFormat.YUV_420_888, ImageFormat.JPEG_R, * ImageFormat.YCBCR_P010; or unsupported extension. * ImageFormat.DEPTH_JPEG, ImageFormat.YCBCR_P010; or * unsupported extension. */ public @NonNull List<Size> getExtensionSupportedSizes(@Extension int extension, int format) { Loading @@ -1227,6 +1230,7 @@ public final class CameraExtensionCharacteristics { case ImageFormat.YUV_420_888: case ImageFormat.JPEG: case ImageFormat.JPEG_R: case ImageFormat.DEPTH_JPEG: case ImageFormat.YCBCR_P010: break; default: Loading Loading @@ -1260,8 +1264,9 @@ public final class CameraExtensionCharacteristics { } else { return generateSupportedSizes(null, format, streamMap); } } else if (format == ImageFormat.JPEG_R || format == ImageFormat.YCBCR_P010) { // Jpeg_R/UltraHDR + YCBCR_P010 is currently not supported in the } else if (format == ImageFormat.JPEG_R || format == ImageFormat.YCBCR_P010 || (Flags.depthJpegExtensions() && (format == ImageFormat.DEPTH_JPEG))) { // DepthJpeg/Jpeg_R/UltraHDR + YCBCR_P010 is currently not supported in the // basic extension case return new ArrayList<>(); } else { Loading Loading @@ -1292,7 +1297,8 @@ public final class CameraExtensionCharacteristics { * or null if no capture latency info can be provided * @throws IllegalArgumentException in case of format different from {@link ImageFormat#JPEG}, * {@link ImageFormat#YUV_420_888}, {@link ImageFormat#JPEG_R} * {@link ImageFormat#YCBCR_P010}; * {@link ImageFormat#YCBCR_P010}, * {@link ImageFormat#DEPTH_JPEG}; * or unsupported extension. */ public @Nullable Range<Long> getEstimatedCaptureLatencyRangeMillis(@Extension int extension, Loading @@ -1301,6 +1307,7 @@ public final class CameraExtensionCharacteristics { case ImageFormat.YUV_420_888: case ImageFormat.JPEG: case ImageFormat.JPEG_R: case ImageFormat.DEPTH_JPEG: case ImageFormat.YCBCR_P010: //No op break; Loading Loading @@ -1349,8 +1356,9 @@ public final class CameraExtensionCharacteristics { // specific and cannot be estimated accurately enough. return null; } if (format == ImageFormat.JPEG_R || format == ImageFormat.YCBCR_P010) { // JpegR/UltraHDR + YCBCR_P010 is not supported for basic extensions if (format == ImageFormat.JPEG_R || format == ImageFormat.YCBCR_P010 || (Flags.depthJpegExtensions() && (format == ImageFormat.DEPTH_JPEG))) { // DepthJpeg/JpegR/UltraHDR + YCBCR_P010 is not supported for basic extensions return null; } Loading
core/java/android/hardware/camera2/impl/CameraAdvancedExtensionSessionImpl.java +7 −7 Original line number Diff line number Diff line Loading @@ -186,12 +186,12 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes HashMap<Integer, List<Size>> supportedCaptureSizes = new HashMap<>(); IntArray supportedCaptureOutputFormats = new IntArray(CameraExtensionUtils.SUPPORTED_CAPTURE_OUTPUT_FORMATS.length); supportedCaptureOutputFormats.addAll( CameraExtensionUtils.SUPPORTED_CAPTURE_OUTPUT_FORMATS); supportedCaptureOutputFormats.add(ImageFormat.YCBCR_P010); for (int format : supportedCaptureOutputFormats.toArray()) { Integer[] supportedCaptureOutputFormats = new Integer[CameraExtensionUtils.SUPPORTED_CAPTURE_OUTPUT_FORMATS.size()]; supportedCaptureOutputFormats = CameraExtensionUtils.SUPPORTED_CAPTURE_OUTPUT_FORMATS.toArray( supportedCaptureOutputFormats); for (int format : supportedCaptureOutputFormats) { List<Size> supportedSizes = extensionChars.getExtensionSupportedSizes( config.getExtension(), format); if (supportedSizes != null) { Loading Loading @@ -230,7 +230,7 @@ public final class CameraAdvancedExtensionSessionImpl extends CameraExtensionSes Size burstCaptureSurfaceSize = new Size(burstCaptureSurfaceInfo.mWidth, burstCaptureSurfaceInfo.mHeight); HashMap<Integer, List<Size>> supportedPostviewSizes = new HashMap<>(); for (int format : supportedCaptureOutputFormats.toArray()) { for (int format : supportedCaptureOutputFormats) { List<Size> supportedSizesPostview = extensionChars.getPostviewSupportedSizes( config.getExtension(), burstCaptureSurfaceSize, format); if (supportedSizesPostview != null) { Loading
core/java/android/hardware/camera2/impl/CameraExtensionSessionImpl.java +7 −7 Original line number Diff line number Diff line Loading @@ -186,12 +186,12 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession { } HashMap<Integer, List<Size>> supportedCaptureSizes = new HashMap<>(); IntArray supportedCaptureOutputFormats = new IntArray(CameraExtensionUtils.SUPPORTED_CAPTURE_OUTPUT_FORMATS.length); supportedCaptureOutputFormats.addAll( CameraExtensionUtils.SUPPORTED_CAPTURE_OUTPUT_FORMATS); supportedCaptureOutputFormats.add(ImageFormat.YCBCR_P010); for (int format : supportedCaptureOutputFormats.toArray()) { Integer[] supportedCaptureOutputFormats = new Integer[CameraExtensionUtils.SUPPORTED_CAPTURE_OUTPUT_FORMATS.size()]; supportedCaptureOutputFormats = CameraExtensionUtils.SUPPORTED_CAPTURE_OUTPUT_FORMATS.toArray( supportedCaptureOutputFormats); for (int format : supportedCaptureOutputFormats) { List<Size> supportedSizes = extensionChars.getExtensionSupportedSizes( config.getExtension(), format); if (supportedSizes != null) { Loading Loading @@ -223,7 +223,7 @@ public final class CameraExtensionSessionImpl extends CameraExtensionSession { Size burstCaptureSurfaceSize = new Size(burstCaptureSurfaceInfo.mWidth, burstCaptureSurfaceInfo.mHeight); HashMap<Integer, List<Size>> supportedPostviewSizes = new HashMap<>(); for (int format : supportedCaptureOutputFormats.toArray()) { for (int format : supportedCaptureOutputFormats) { List<Size> supportedSizesPostview = extensionChars.getPostviewSupportedSizes( config.getExtension(), burstCaptureSurfaceSize, format); if (supportedSizesPostview != null) { Loading
core/java/android/hardware/camera2/impl/CameraExtensionUtils.java +26 −11 Original line number Diff line number Diff line Loading @@ -32,11 +32,14 @@ import android.os.Handler; import android.util.IntArray; import android.util.Log; import android.util.Size; import android.util.SparseIntArray; import android.view.Surface; import com.android.internal.camera.flags.Flags; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.concurrent.Executor; Loading @@ -48,11 +51,16 @@ public final class CameraExtensionUtils { public final static int JPEG_DEFAULT_QUALITY = 100; public final static int JPEG_DEFAULT_ROTATION = 0; public static final int[] SUPPORTED_CAPTURE_OUTPUT_FORMATS = { CameraExtensionCharacteristics.PROCESSING_INPUT_FORMAT, ImageFormat.JPEG, ImageFormat.JPEG_R }; public static HashSet<Integer> SUPPORTED_CAPTURE_OUTPUT_FORMATS = new HashSet<>(); static { SUPPORTED_CAPTURE_OUTPUT_FORMATS.addAll(Arrays.asList( CameraExtensionCharacteristics.PROCESSING_INPUT_FORMAT, ImageFormat.JPEG, ImageFormat.YCBCR_P010, ImageFormat.JPEG_R )); if (Flags.depthJpegExtensions()) { SUPPORTED_CAPTURE_OUTPUT_FORMATS.add(ImageFormat.DEPTH_JPEG); } } public static class SurfaceInfo { public int mWidth = 0; Loading Loading @@ -101,6 +109,13 @@ public final class CameraExtensionUtils { surfaceInfo.mFormat = ImageFormat.JPEG_R; return surfaceInfo; } if (Flags.depthJpegExtensions()) { if ((nativeFormat == StreamConfigurationMap.HAL_PIXEL_FORMAT_BLOB) && (dataspace == StreamConfigurationMap.HAL_DATASPACE_DYNAMIC_DEPTH)) { surfaceInfo.mFormat = ImageFormat.DEPTH_JPEG; return surfaceInfo; } } return surfaceInfo; } Loading @@ -125,14 +140,14 @@ public final class CameraExtensionUtils { public static Surface getBurstCaptureSurface( @NonNull List<OutputConfiguration> outputConfigs, @NonNull HashMap<Integer, List<Size>> supportedCaptureSizes) { IntArray supportedCaptureOutputFormats = new IntArray(CameraExtensionUtils.SUPPORTED_CAPTURE_OUTPUT_FORMATS.length); supportedCaptureOutputFormats.addAll( CameraExtensionUtils.SUPPORTED_CAPTURE_OUTPUT_FORMATS); supportedCaptureOutputFormats.add(ImageFormat.YCBCR_P010); Integer[] supportedCaptureOutputFormats = new Integer[CameraExtensionUtils.SUPPORTED_CAPTURE_OUTPUT_FORMATS.size()]; supportedCaptureOutputFormats = CameraExtensionUtils.SUPPORTED_CAPTURE_OUTPUT_FORMATS.toArray( supportedCaptureOutputFormats); for (OutputConfiguration config : outputConfigs) { SurfaceInfo surfaceInfo = querySurface(config.getSurface()); for (int supportedFormat : supportedCaptureOutputFormats.toArray()) { for (int supportedFormat : supportedCaptureOutputFormats) { if (surfaceInfo.mFormat == supportedFormat) { Size captureSize = new Size(surfaceInfo.mWidth, surfaceInfo.mHeight); if (supportedCaptureSizes.containsKey(supportedFormat)) { Loading