Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9ba6398d authored by Jayant Chowdhary's avatar Jayant Chowdhary
Browse files

camera2: Add non burst sizes to mandatory streams for ultra high resolution sensors



Bug: 240128812

Test: Vendor testing
Test: RobustnessTest.java on cuttlefish

Change-Id: I92047456a43d49c5354718ead10df2cbd60363e2
Signed-off-by: default avatarJayant Chowdhary <jchowdhary@google.com>
parent eca09fa8
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -826,7 +826,9 @@ public abstract class CameraDevice implements AutoCloseable {
     * <p> Here, SC Map, refers to the {@link StreamConfigurationMap}, the target stream sizes must
     * be chosen from. {@code DEFAULT} refers to the default sensor pixel mode {@link
     * StreamConfigurationMap} and {@code MAX_RES} refers to the maximum resolution {@link
     * StreamConfigurationMap}. The same capture request must not mix targets from
     * StreamConfigurationMap}. For {@code MAX_RES} streams, {@code MAX} in the {@code Max size} column refers to the maximum size from
     * {@link StreamConfigurationMap#getOutputSizes} and {@link StreamConfigurationMap#getHighResolutionOutputSizes}.
     * Note: The same capture request must not mix targets from
     * {@link StreamConfigurationMap}s corresponding to different sensor pixel modes. </p>
     *
     * <p> 10-bit output capable
+26 −1
Original line number Diff line number Diff line
@@ -1723,7 +1723,17 @@ public final class MandatoryStreamCombination {
                }

                if (isUltraHighResolution) {
                    sizes.add(getMaxSize(sm.getOutputSizes(formatChosen)));
                    Size [] outputSizes = sm.getOutputSizes(formatChosen);
                    Size [] highResolutionOutputSizes =
                            sm.getHighResolutionOutputSizes(formatChosen);
                    Size maxBurstSize = getMaxSizeOrNull(outputSizes);
                    Size maxHighResolutionSize = getMaxSizeOrNull(highResolutionOutputSizes);
                    Size chosenMaxSize =
                            maxBurstSize != null ? maxBurstSize : maxHighResolutionSize;
                    if (maxBurstSize != null && maxHighResolutionSize != null) {
                        chosenMaxSize = getMaxSize(maxBurstSize, maxHighResolutionSize);
                    }
                    sizes.add(chosenMaxSize);
                } else {
                    if (formatChosen == ImageFormat.RAW_SENSOR) {
                        // RAW_SENSOR always has MAXIMUM threshold.
@@ -2125,6 +2135,21 @@ public final class MandatoryStreamCombination {
            return sz;
        }

        /**
         * Get the largest size by area.
         *
         * @param sizes an array of sizes
         *
         * @return Largest Size or null if sizes was null or had 0 elements
         */
        public static @Nullable Size getMaxSizeOrNull(Size... sizes) {
            if (sizes == null || sizes.length == 0) {
                return null;
            }

            return getMaxSize(sizes);
        }

        /**
         * Whether or not the hardware level reported by android.info.supportedHardwareLevel is
         * at least the desired one (but could be higher)