Merge "Merge 25Q1 (ab/BP1A.250305.020) to AOSP main" into main
diff --git a/camera2/extensions/advancedSample/src/java/androidx/camera/extensions/impl/advanced/BaseAdvancedExtenderImpl.java b/camera2/extensions/advancedSample/src/java/androidx/camera/extensions/impl/advanced/BaseAdvancedExtenderImpl.java
index 1b61d93..a090d7d 100644
--- a/camera2/extensions/advancedSample/src/java/androidx/camera/extensions/impl/advanced/BaseAdvancedExtenderImpl.java
+++ b/camera2/extensions/advancedSample/src/java/androidx/camera/extensions/impl/advanced/BaseAdvancedExtenderImpl.java
@@ -127,7 +127,7 @@
     @Override
     public Map<Integer, List<Size>> getSupportedCaptureOutputResolutions(String cameraId) {
         return filterOutputResolutions(Arrays.asList(ImageFormat.JPEG, ImageFormat.YUV_420_888,
-                ImageFormat.JPEG_R, ImageFormat.YCBCR_P010));
+                ImageFormat.DEPTH_JPEG, ImageFormat.JPEG_R, ImageFormat.YCBCR_P010));
     }
 
     @Override
@@ -223,8 +223,9 @@
             // Image Capture
             if (mCaptureOutputSurfaceConfig.getSurface() != null) {
 
-                // For this sample, JPEG_R or YCBCR_P010 will not be processed
-                if (isJpegR(mCaptureOutputSurfaceConfig)) {
+                // For this sample, DEPTH_JPEG, JPEG_R or YCBCR_P010 will not be processed
+                if (isJpegR(mCaptureOutputSurfaceConfig) ||
+                        isDepthJpeg(mCaptureOutputSurfaceConfig)) {
                     Camera2OutputConfigImplBuilder captureOutputConfigBuilder;
 
                     captureOutputConfigBuilder =
@@ -353,6 +354,14 @@
                     (surfaceConfig.getImageFormat() == ImageFormat.JPEG_R);
         }
 
+        protected boolean isDepthJpeg(OutputSurfaceImpl surfaceConfig) {
+            // The surface configuration format for DepthJpeg can be specified in either format.
+            // Camera2 uses HAL_PIXEL_FORMAT_BLOB and CameraX uses ImageFormat.DEPTH_JPEG.
+            return ((surfaceConfig.getImageFormat() == JpegEncoder.HAL_PIXEL_FORMAT_BLOB) &&
+                    (surfaceConfig.getDataspace() == DataSpace.DATASPACE_DYNAMIC_DEPTH)) ||
+                    (surfaceConfig.getImageFormat() == ImageFormat.DEPTH_JPEG);
+        }
+
         protected boolean isJpeg(OutputSurfaceImpl surfaceConfig) {
             return (JpegEncoder.imageFormatToPublic(surfaceConfig.getImageFormat()) ==
                     ImageFormat.JPEG) || (surfaceConfig.getImageFormat() == ImageFormat.JPEG);
diff --git a/camera2/extensions/advancedSample/src/java/androidx/camera/extensions/impl/advanced/NightAdvancedExtenderImpl.java b/camera2/extensions/advancedSample/src/java/androidx/camera/extensions/impl/advanced/NightAdvancedExtenderImpl.java
index 86ea363..f3a27eb 100644
--- a/camera2/extensions/advancedSample/src/java/androidx/camera/extensions/impl/advanced/NightAdvancedExtenderImpl.java
+++ b/camera2/extensions/advancedSample/src/java/androidx/camera/extensions/impl/advanced/NightAdvancedExtenderImpl.java
@@ -131,8 +131,9 @@
             // Image Capture
             if (mCaptureOutputSurfaceConfig.getSurface() != null) {
 
-                // For this sample, JPEG_R or YCBCR_P010 will not be processed
-                if (isJpegR(mCaptureOutputSurfaceConfig)) {
+                // For this sample, DEPTH_JPEG, JPEG_R or YCBCR_P010 will not be processed
+                if (isJpegR(mCaptureOutputSurfaceConfig) ||
+                        isDepthJpeg(mCaptureOutputSurfaceConfig)) {
                     Camera2OutputConfigImplBuilder captureOutputConfigBuilder;
 
                     captureOutputConfigBuilder =