Loading core/java/android/hardware/camera2/CameraDevice.java +9 −7 Original line number Diff line number Diff line Loading @@ -688,17 +688,19 @@ public abstract class CameraDevice implements AutoCloseable { * <tr><th colspan="5">Concurrent stream guaranteed configurations</th></tr> * <tr><th colspan="2" id="rb">Target 1</th><th colspan="2" id="rb">Target 2</th><th rowspan="2">Sample use case(s)</th> </tr> * <tr><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th> </tr> * <tr> <td>{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td colspan="2" id="rb"></td> <td>In-app video / image processing.</td> </tr> * <tr> <td>{@code PRIV}</td><td id="rb">{@code MAXIMUM}</td> <td colspan="2" id="rb"></td> <td>In-app viewfinder analysis.</td> </tr> * <tr> <td>{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td>{@code YUV }</td><td id="rb">{@code MAXIMUM}</td> <td>In-app video / processing with preview.</td> </tr> * <tr> <td>{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td>{@code PRIV }</td><td id="rb">{@code MAXIMUM}</td> <td>In-app video / processing with preview.</td> </tr> * <tr> <td>{@code PRIV}</td><td id="rb">{@code MAXIMUM}</td> <td>{@code PRIV }</td><td id="rb">{@code MAXIMUM}</td> <td>Standard Recording.</td> </tr> * <tr> <td>{@code YUV}</td><td id="rb">{@code s1440p}</td> <td colspan="2" id="rb"></td> <td>In-app video / image processing.</td> </tr> * <tr> <td>{@code PRIV}</td><td id="rb">{@code s1440p}</td> <td colspan="2" id="rb"></td> <td>In-app viewfinder analysis.</td> </tr> * <tr> <td>{@code JPEG}</td><td id="rb">{@code s1440p}</td> <td colspan="2" id="rb"></td> <td>No viewfinder still image capture.</td> </tr> * <tr> <td>{@code YUV / PRIV}</td><td id="rb">{@code s720p}</td> <td>{@code JPEG}</td><td id="rb">{@code s1440p}</td> <td> Standard still imaging.</td> </tr> * <tr> <td>{@code YUV / PRIV}</td><td id="rb">{@code s720p}</td> <td>{@code YUV / PRIV }</td><td id="rb">{@code s1440p}</td> <td>In-app video / processing with preview.</td> </tr> * </table><br> * </p> * * <p> For guaranteed concurrent stream configurations, MAXIMUM refers to the camera device's * resolution for that format from {@link StreamConfigurationMap#getOutputSizes} or * <p> For guaranteed concurrent stream configurations:</p> * <p> s720p refers to the camera device's 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 * 1440p(1920X1440) whichever is lower. </p> * <p>MONOCHROME-capability ({@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES} * includes {@link CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME MONOCHROME}) devices * supporting {@link android.graphics.ImageFormat#Y8 Y8} support substituting {@code YUV} Loading core/java/android/hardware/camera2/params/MandatoryStreamCombination.java +33 −9 Original line number Diff line number Diff line Loading @@ -267,7 +267,7 @@ public final class MandatoryStreamCombination { mStreamsInformation.hashCode()); } private static enum SizeThreshold { VGA, PREVIEW, RECORD, MAXIMUM, s720p } private static enum SizeThreshold { VGA, PREVIEW, RECORD, MAXIMUM, s720p, s1440p } private static enum ReprocessType { NONE, PRIVATE, YUV } private static final class StreamTemplate { public int mFormat; Loading Loading @@ -651,23 +651,38 @@ public final class MandatoryStreamCombination { private static StreamCombinationTemplate sConcurrentStreamCombinations[] = { new StreamCombinationTemplate(new StreamTemplate [] { new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.s720p) }, new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.s1440p) }, "In-app video / image processing"), new StreamCombinationTemplate(new StreamTemplate [] { new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.s720p) }, new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.s1440p) }, "preview / preview to GPU"), new StreamCombinationTemplate(new StreamTemplate [] { new StreamTemplate(ImageFormat.JPEG, SizeThreshold.s1440p) }, "No view-finder still image capture"), new StreamCombinationTemplate(new StreamTemplate [] { new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.s720p), new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.s720p)}, "In-app video / image processing with preview"), new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.s1440p)}, "Two-input in app video / image processing"), new StreamCombinationTemplate(new StreamTemplate [] { new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.s720p), new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.s720p)}, new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.s1440p)}, "High resolution video recording with preview"), new StreamCombinationTemplate(new StreamTemplate [] { new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.s720p), new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.s1440p)}, "In-app video / image processing with preview"), new StreamCombinationTemplate(new StreamTemplate [] { new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.s720p), new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.s1440p)}, "In-app video / image processing with preview"), new StreamCombinationTemplate(new StreamTemplate [] { new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.s720p), new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.s720p)}, "Standard Recording"), new StreamTemplate(ImageFormat.JPEG, SizeThreshold.s1440p)}, "Standard stil image capture"), new StreamCombinationTemplate(new StreamTemplate [] { new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.s720p), new StreamTemplate(ImageFormat.JPEG, SizeThreshold.s1440p)}, "Standard still image capture"), }; /** Loading Loading @@ -720,6 +735,7 @@ public final class MandatoryStreamCombination { + " cannot have mandatory concurrent streams"); } Size size720p = new Size(1280, 720); Size size1440p = new Size(1920, 1440); ArrayList<MandatoryStreamCombination> availableConcurrentStreamCombinations = new ArrayList<MandatoryStreamCombination>(); Loading @@ -732,8 +748,16 @@ public final class MandatoryStreamCombination { for (StreamTemplate template : combTemplate.mStreamTemplates) { MandatoryStreamInformation streamInfo; List<Size> sizes = new ArrayList<Size>(); Size formatSize = null; switch (template.mSizeThreshold) { case s1440p: formatSize = size1440p; break; default: formatSize = size720p; } Size sizeChosen = getMinSize(size720p, getMinSize(formatSize, getMaxSize(mStreamConfigMap.getOutputSizes(template.mFormat))); sizes.add(sizeChosen); try { Loading Loading
core/java/android/hardware/camera2/CameraDevice.java +9 −7 Original line number Diff line number Diff line Loading @@ -688,17 +688,19 @@ public abstract class CameraDevice implements AutoCloseable { * <tr><th colspan="5">Concurrent stream guaranteed configurations</th></tr> * <tr><th colspan="2" id="rb">Target 1</th><th colspan="2" id="rb">Target 2</th><th rowspan="2">Sample use case(s)</th> </tr> * <tr><th>Type</th><th id="rb">Max size</th><th>Type</th><th id="rb">Max size</th> </tr> * <tr> <td>{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td colspan="2" id="rb"></td> <td>In-app video / image processing.</td> </tr> * <tr> <td>{@code PRIV}</td><td id="rb">{@code MAXIMUM}</td> <td colspan="2" id="rb"></td> <td>In-app viewfinder analysis.</td> </tr> * <tr> <td>{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td>{@code YUV }</td><td id="rb">{@code MAXIMUM}</td> <td>In-app video / processing with preview.</td> </tr> * <tr> <td>{@code YUV}</td><td id="rb">{@code MAXIMUM}</td> <td>{@code PRIV }</td><td id="rb">{@code MAXIMUM}</td> <td>In-app video / processing with preview.</td> </tr> * <tr> <td>{@code PRIV}</td><td id="rb">{@code MAXIMUM}</td> <td>{@code PRIV }</td><td id="rb">{@code MAXIMUM}</td> <td>Standard Recording.</td> </tr> * <tr> <td>{@code YUV}</td><td id="rb">{@code s1440p}</td> <td colspan="2" id="rb"></td> <td>In-app video / image processing.</td> </tr> * <tr> <td>{@code PRIV}</td><td id="rb">{@code s1440p}</td> <td colspan="2" id="rb"></td> <td>In-app viewfinder analysis.</td> </tr> * <tr> <td>{@code JPEG}</td><td id="rb">{@code s1440p}</td> <td colspan="2" id="rb"></td> <td>No viewfinder still image capture.</td> </tr> * <tr> <td>{@code YUV / PRIV}</td><td id="rb">{@code s720p}</td> <td>{@code JPEG}</td><td id="rb">{@code s1440p}</td> <td> Standard still imaging.</td> </tr> * <tr> <td>{@code YUV / PRIV}</td><td id="rb">{@code s720p}</td> <td>{@code YUV / PRIV }</td><td id="rb">{@code s1440p}</td> <td>In-app video / processing with preview.</td> </tr> * </table><br> * </p> * * <p> For guaranteed concurrent stream configurations, MAXIMUM refers to the camera device's * resolution for that format from {@link StreamConfigurationMap#getOutputSizes} or * <p> For guaranteed concurrent stream configurations:</p> * <p> s720p refers to the camera device's 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 * 1440p(1920X1440) whichever is lower. </p> * <p>MONOCHROME-capability ({@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES} * includes {@link CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME MONOCHROME}) devices * supporting {@link android.graphics.ImageFormat#Y8 Y8} support substituting {@code YUV} Loading
core/java/android/hardware/camera2/params/MandatoryStreamCombination.java +33 −9 Original line number Diff line number Diff line Loading @@ -267,7 +267,7 @@ public final class MandatoryStreamCombination { mStreamsInformation.hashCode()); } private static enum SizeThreshold { VGA, PREVIEW, RECORD, MAXIMUM, s720p } private static enum SizeThreshold { VGA, PREVIEW, RECORD, MAXIMUM, s720p, s1440p } private static enum ReprocessType { NONE, PRIVATE, YUV } private static final class StreamTemplate { public int mFormat; Loading Loading @@ -651,23 +651,38 @@ public final class MandatoryStreamCombination { private static StreamCombinationTemplate sConcurrentStreamCombinations[] = { new StreamCombinationTemplate(new StreamTemplate [] { new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.s720p) }, new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.s1440p) }, "In-app video / image processing"), new StreamCombinationTemplate(new StreamTemplate [] { new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.s720p) }, new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.s1440p) }, "preview / preview to GPU"), new StreamCombinationTemplate(new StreamTemplate [] { new StreamTemplate(ImageFormat.JPEG, SizeThreshold.s1440p) }, "No view-finder still image capture"), new StreamCombinationTemplate(new StreamTemplate [] { new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.s720p), new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.s720p)}, "In-app video / image processing with preview"), new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.s1440p)}, "Two-input in app video / image processing"), new StreamCombinationTemplate(new StreamTemplate [] { new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.s720p), new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.s720p)}, new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.s1440p)}, "High resolution video recording with preview"), new StreamCombinationTemplate(new StreamTemplate [] { new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.s720p), new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.s1440p)}, "In-app video / image processing with preview"), new StreamCombinationTemplate(new StreamTemplate [] { new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.s720p), new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.s1440p)}, "In-app video / image processing with preview"), new StreamCombinationTemplate(new StreamTemplate [] { new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.s720p), new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.s720p)}, "Standard Recording"), new StreamTemplate(ImageFormat.JPEG, SizeThreshold.s1440p)}, "Standard stil image capture"), new StreamCombinationTemplate(new StreamTemplate [] { new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.s720p), new StreamTemplate(ImageFormat.JPEG, SizeThreshold.s1440p)}, "Standard still image capture"), }; /** Loading Loading @@ -720,6 +735,7 @@ public final class MandatoryStreamCombination { + " cannot have mandatory concurrent streams"); } Size size720p = new Size(1280, 720); Size size1440p = new Size(1920, 1440); ArrayList<MandatoryStreamCombination> availableConcurrentStreamCombinations = new ArrayList<MandatoryStreamCombination>(); Loading @@ -732,8 +748,16 @@ public final class MandatoryStreamCombination { for (StreamTemplate template : combTemplate.mStreamTemplates) { MandatoryStreamInformation streamInfo; List<Size> sizes = new ArrayList<Size>(); Size formatSize = null; switch (template.mSizeThreshold) { case s1440p: formatSize = size1440p; break; default: formatSize = size720p; } Size sizeChosen = getMinSize(size720p, getMinSize(formatSize, getMaxSize(mStreamConfigMap.getOutputSizes(template.mFormat))); sizes.add(sizeChosen); try { Loading