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

Commit d7feae01 authored by Jayant Chowdhary's avatar Jayant Chowdhary
Browse files

camera2: Add mandatory stream combinations for depth only cameras.



Bug: 159247271

Test: atest ConcurrentCameraTest.java

Change-Id: I89d6209d36f76aa8ec19aaafd81abf1cfd025463
Signed-off-by: default avatarJayant Chowdhary <jchowdhary@google.com>
parent 6cca0018
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -680,7 +680,7 @@ public abstract class CameraDevice implements AutoCloseable {
     * </table><br>
     * </p>
     *
     *<p>Devices capable of streaming concurrently with other devices as described by
     *<p>BACKWARD_COMPATIBLE devices capable of streaming concurrently with other devices as described by
     * {@link android.hardware.camera2.CameraManager#getConcurrentCameraIds} have the
     * following guaranteed streams (when streaming concurrently with other devices)</p>
     *
@@ -696,10 +696,14 @@ public abstract class CameraDevice implements AutoCloseable {
     * </table><br>
     * </p>
     *
     * <p> Devices which are not backwards-compatible, support a mandatory single stream of size sVGA with image format {@code DEPTH16} during concurrent operation.
     *
     * <p> For guaranteed concurrent stream configurations:</p>
     * <p> s720p refers to the camera device's resolution for that format from {@link StreamConfigurationMap#getOutputSizes} or
     * <p> sVGA refers to the camera device's maximum resolution for that format from {@link StreamConfigurationMap#getOutputSizes} or
     * VGA resolution (640X480) whichever is lower. </p>
     * <p> s720p refers to the camera device's maximum resolution for that format from {@link StreamConfigurationMap#getOutputSizes} or
     * 720p(1280X720) whichever is lower. </p>
     * <p> s1440p refers to the camera device's resolution for that format from {@link StreamConfigurationMap#getOutputSizes} or
     * <p> s1440p refers to the camera device's maximum resolution for that format from {@link StreamConfigurationMap#getOutputSizes} or
     * 1440p(1920X1440) whichever is lower. </p>
     * <p>MONOCHROME-capability ({@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES}
     * includes {@link CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME MONOCHROME}) devices
@@ -707,6 +711,7 @@ public abstract class CameraDevice implements AutoCloseable {
     * streams with {@code Y8} in all guaranteed stream combinations for the device's hardware level
     * and capabilities.</p>
     *
     *
     * <p>Devices capable of outputting HEIC formats ({@link StreamConfigurationMap#getOutputFormats}
     * contains {@link android.graphics.ImageFormat#HEIC}) will support substituting {@code JPEG}
     * streams with {@code HEIC} in all guaranteed stream combinations for the device's hardware
+16 −5
Original line number Diff line number Diff line
@@ -685,6 +685,12 @@ public final class MandatoryStreamCombination {
                "Standard still image capture"),
    };

    private static StreamCombinationTemplate sConcurrentDepthOnlyStreamCombinations[] = {
        new StreamCombinationTemplate(new StreamTemplate [] {
                new StreamTemplate(ImageFormat.DEPTH16, SizeThreshold.VGA) },
                "Depth capture for mesh based object rendering"),
    };

    /**
     * Helper builder class to generate a list of available mandatory stream combinations.
     * @hide
@@ -729,19 +735,21 @@ public final class MandatoryStreamCombination {
                getAvailableMandatoryConcurrentStreamCombinations() {
            // Since concurrent streaming support is optional, we mandate these stream
            // combinations regardless of camera device capabilities.

            StreamCombinationTemplate []chosenStreamCombinations = sConcurrentStreamCombinations;
            if (!isColorOutputSupported()) {
                Log.v(TAG, "Device is not backward compatible!");
                throw new IllegalArgumentException("Camera device which is not BACKWARD_COMPATIBLE"
                         + " cannot have mandatory concurrent streams");
                Log.v(TAG, "Device is not backward compatible, depth streams are mandatory!");
                chosenStreamCombinations = sConcurrentDepthOnlyStreamCombinations;
            }
            Size sizeVGAp = new Size(640, 480);
            Size size720p = new Size(1280, 720);
            Size size1440p = new Size(1920, 1440);

            ArrayList<MandatoryStreamCombination> availableConcurrentStreamCombinations =
                    new ArrayList<MandatoryStreamCombination>();
            availableConcurrentStreamCombinations.ensureCapacity(
                    sConcurrentStreamCombinations.length);
            for (StreamCombinationTemplate combTemplate : sConcurrentStreamCombinations) {
                    chosenStreamCombinations.length);
            for (StreamCombinationTemplate combTemplate : chosenStreamCombinations) {
                ArrayList<MandatoryStreamInformation> streamsInfo =
                        new ArrayList<MandatoryStreamInformation>();
                streamsInfo.ensureCapacity(combTemplate.mStreamTemplates.length);
@@ -753,6 +761,9 @@ public final class MandatoryStreamCombination {
                        case s1440p:
                            formatSize = size1440p;
                            break;
                        case VGA:
                            formatSize = sizeVGAp;
                            break;
                        default:
                            formatSize = size720p;
                    }