camera2: Update spec for mandatory concurrent stream combinations.
Bug: 77960042 Test: atest ConcurrentCameraTest.java Change-Id: I01fd6c5eab1ed8bc716be98c24a93d45f2ddaed3 Signed-off-by: Jayant Chowdhary <jchowdhary@google.com>
This commit is contained in:
@@ -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}
|
||||
|
||||
@@ -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;
|
||||
@@ -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)},
|
||||
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.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.YUV_420_888, SizeThreshold.s720p)},
|
||||
"In-app video / image processing with preview"),
|
||||
new StreamTemplate(ImageFormat.JPEG, SizeThreshold.s1440p)},
|
||||
"Standard stil image capture"),
|
||||
new StreamCombinationTemplate(new StreamTemplate [] {
|
||||
new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.s720p),
|
||||
new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.s720p)},
|
||||
"Standard Recording"),
|
||||
new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.s720p),
|
||||
new StreamTemplate(ImageFormat.JPEG, SizeThreshold.s1440p)},
|
||||
"Standard still image capture"),
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -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>();
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user