summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/hardware/camera2/params/MandatoryStreamCombination.java392
1 files changed, 321 insertions, 71 deletions
diff --git a/core/java/android/hardware/camera2/params/MandatoryStreamCombination.java b/core/java/android/hardware/camera2/params/MandatoryStreamCombination.java
index bd8df8724f92..a6789213b50b 100644
--- a/core/java/android/hardware/camera2/params/MandatoryStreamCombination.java
+++ b/core/java/android/hardware/camera2/params/MandatoryStreamCombination.java
@@ -345,20 +345,14 @@ public final class MandatoryStreamCombination {
public int mFormat;
public SizeThreshold mSizeThreshold;
public boolean mIsInput;
- public boolean mIsUltraHighResolution;
public StreamTemplate(int format, SizeThreshold sizeThreshold) {
- this(format, sizeThreshold, /*isInput*/false, /*ultraHighResolution*/false);
+ this(format, sizeThreshold, /*isInput*/false);
}
public StreamTemplate(@Format int format, @NonNull SizeThreshold sizeThreshold,
boolean isInput) {
- this(format, sizeThreshold, isInput, /*ultraHighResolution*/ false);
- }
- public StreamTemplate(@Format int format, @NonNull SizeThreshold sizeThreshold,
- boolean isInput, boolean isUltraHighResolution) {
mFormat = format;
mSizeThreshold = sizeThreshold;
mIsInput = isInput;
- mIsUltraHighResolution = isUltraHighResolution;
}
}
@@ -366,6 +360,8 @@ public final class MandatoryStreamCombination {
public StreamTemplate[] mStreamTemplates;
public String mDescription;
public ReprocessType mReprocessType;
+ // Substitute MAXIMUM size YUV output stream with JPEG / RAW_SENSOR.
+ public boolean mSubstituteYUV = false;
public StreamCombinationTemplate(@NonNull StreamTemplate[] streamTemplates,
@NonNull String description) {
@@ -373,11 +369,22 @@ public final class MandatoryStreamCombination {
}
public StreamCombinationTemplate(@NonNull StreamTemplate[] streamTemplates,
- @NonNull String description,
- ReprocessType reprocessType) {
+ @NonNull String description, ReprocessType reprocessType) {
+ this(streamTemplates, description, reprocessType, /*substituteYUV*/ false);
+ }
+
+ public StreamCombinationTemplate(@NonNull StreamTemplate[] streamTemplates,
+ @NonNull String description, boolean substituteYUV) {
+ this(streamTemplates, description, /*reprocessType*/ ReprocessType.NONE,
+ substituteYUV);
+ }
+
+ public StreamCombinationTemplate(@NonNull StreamTemplate[] streamTemplates,
+ @NonNull String description, ReprocessType reprocessType, boolean substituteYUV) {
mStreamTemplates = streamTemplates;
mReprocessType = reprocessType;
mDescription = description;
+ mSubstituteYUV = substituteYUV;
}
}
@@ -769,15 +776,160 @@ public final class MandatoryStreamCombination {
};
private static StreamCombinationTemplate sUltraHighResolutionStreamCombinations[] = {
+ // UH res YUV / RAW / JPEG + PRIV preview size stream
+ new StreamCombinationTemplate(new StreamTemplate [] {
+ new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.FULL_RES),
+ new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.PREVIEW)},
+ "Ultra high resolution YUV image capture with preview"),
+ new StreamCombinationTemplate(new StreamTemplate [] {
+ new StreamTemplate(ImageFormat.RAW_SENSOR, SizeThreshold.FULL_RES),
+ new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.PREVIEW)},
+ "Ultra high resolution RAW_SENSOR image capture with preview"),
+ new StreamCombinationTemplate(new StreamTemplate [] {
+ new StreamTemplate(ImageFormat.JPEG, SizeThreshold.FULL_RES),
+ new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.PREVIEW)},
+ "Ultra high resolution JPEG image capture with preview"),
+
+ // UH res YUV / RAW / JPEG + YUV preview size stream
+ new StreamCombinationTemplate(new StreamTemplate [] {
+ new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.FULL_RES),
+ new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.PREVIEW)},
+ "No-viewfinder Ultra high resolution YUV image capture with image analysis"),
+ new StreamCombinationTemplate(new StreamTemplate [] {
+ new StreamTemplate(ImageFormat.RAW_SENSOR, SizeThreshold.FULL_RES),
+ new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.PREVIEW)},
+ "No-viewfinder Ultra high resolution RAW_SENSOR image capture with image analysis"),
+ new StreamCombinationTemplate(new StreamTemplate [] {
+ new StreamTemplate(ImageFormat.JPEG, SizeThreshold.FULL_RES),
+ new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.PREVIEW)},
+ "No-viewfinder Ultra high resolution JPEG image capture with image analysis"),
+
+ // UH res YUV / RAW / JPEG + PRIV preview + PRIV RECORD stream
+ new StreamCombinationTemplate(new StreamTemplate [] {
+ new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.FULL_RES),
+ new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.PREVIEW),
+ new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.RECORD)},
+ "Ultra high resolution YUV image capture with preview + app-based image analysis"),
+ new StreamCombinationTemplate(new StreamTemplate [] {
+ new StreamTemplate(ImageFormat.RAW_SENSOR, SizeThreshold.FULL_RES),
+ new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.PREVIEW),
+ new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.RECORD)},
+ "Ultra high resolution RAW image capture with preview + app-based image analysis"),
+ new StreamCombinationTemplate(new StreamTemplate [] {
+ new StreamTemplate(ImageFormat.JPEG, SizeThreshold.FULL_RES),
+ new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.PREVIEW),
+ new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.RECORD)},
+ "Ultra high resolution JPEG image capture with preview + app-based image analysis"),
+
+ // UH res YUV / RAW / JPEG + PRIV preview + YUV RECORD stream
+ new StreamCombinationTemplate(new StreamTemplate [] {
+ new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.FULL_RES),
+ new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.PREVIEW),
+ new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.RECORD)},
+ "Ultra high resolution YUV image capture with preview + app-based image analysis"),
new StreamCombinationTemplate(new StreamTemplate [] {
- new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.FULL_RES) },
- "Full res YUV image capture"),
+ new StreamTemplate(ImageFormat.RAW_SENSOR, SizeThreshold.FULL_RES),
+ new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.PREVIEW),
+ new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.RECORD)},
+ "Ultra high resolution RAW image capture with preview + app-based image analysis"),
+ new StreamCombinationTemplate(new StreamTemplate [] {
+ new StreamTemplate(ImageFormat.JPEG, SizeThreshold.FULL_RES),
+ new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.PREVIEW),
+ new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.RECORD)},
+ "Ultra high resolution JPEG image capture with preview + app-based image analysis"),
+
+ // UH RES YUV / RAW / JPEG + PRIV preview + YUV / RAW / JPEG Maximum stream
+ new StreamCombinationTemplate(new StreamTemplate [] {
+ new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.FULL_RES),
+ new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.PREVIEW),
+ new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.MAXIMUM)},
+ "Ultra high resolution YUV image capture with preview + default",
+ /*substituteYUV*/ true),
+ new StreamCombinationTemplate(new StreamTemplate [] {
+ new StreamTemplate(ImageFormat.RAW_SENSOR, SizeThreshold.FULL_RES),
+ new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.PREVIEW),
+ new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.MAXIMUM)},
+ "Ultra high resolution RAW image capture with preview + default",
+ /*substituteYUV*/ true),
+ new StreamCombinationTemplate(new StreamTemplate [] {
+ new StreamTemplate(ImageFormat.JPEG, SizeThreshold.FULL_RES),
+ new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.PREVIEW),
+ new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.MAXIMUM)},
+ "Ultra high resolution JPEG capture with preview + default",
+ /*substituteYUV*/ true),
+ };
+
+ private static StreamCombinationTemplate sUltraHighResolutionReprocStreamCombinations[] = {
+ // RAW_SENSOR -> RAW_SENSOR + preview size PRIV / YUV
+ new StreamCombinationTemplate(new StreamTemplate [] {
+ new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.PREVIEW)},
+ "In-app RAW remosaic reprocessing with separate preview",
+ /*reprocessType*/ ReprocessType.REMOSAIC),
+ new StreamCombinationTemplate(new StreamTemplate [] {
+ new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.PREVIEW)},
+ "In-app RAW remosaic reprocessing with in-app image analysis",
+ /*reprocessType*/ ReprocessType.REMOSAIC),
+
+ // RAW -> JPEG / YUV reprocessing + YUV / PRIV preview size stream
+ new StreamCombinationTemplate(new StreamTemplate [] {
+ new StreamTemplate(ImageFormat.JPEG, SizeThreshold.FULL_RES),
+ new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.PREVIEW)},
+ "In-app RAW -> JPEG reprocessing with separate preview",
+ /*reprocessType*/ ReprocessType.REMOSAIC),
+ new StreamCombinationTemplate(new StreamTemplate [] {
+ new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.FULL_RES),
+ new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.PREVIEW)},
+ "In-app RAW -> YUV reprocessing with separate preview",
+ /*reprocessType*/ ReprocessType.REMOSAIC),
+ new StreamCombinationTemplate(new StreamTemplate [] {
+ new StreamTemplate(ImageFormat.JPEG, SizeThreshold.FULL_RES),
+ new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.PREVIEW)},
+ "In-app RAW -> JPEG reprocessing with in-app image analysis",
+ /*reprocessType*/ ReprocessType.REMOSAIC),
+ new StreamCombinationTemplate(new StreamTemplate [] {
+ new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.FULL_RES),
+ new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.PREVIEW)},
+ "In-app RAW -> YUV reprocessing with in-app image analysis",
+ /*reprocessType*/ ReprocessType.REMOSAIC),
+ };
+
+ private static StreamCombinationTemplate sUltraHighResolutionYUVReprocStreamCombinations[] = {
+ // YUV -> JPEG reprocess + PRIV / YUV preview size stream
+ new StreamCombinationTemplate(new StreamTemplate [] {
+ new StreamTemplate(ImageFormat.JPEG, SizeThreshold.FULL_RES),
+ new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.PREVIEW)},
+ "Ultra high resolution YUV -> JPEG reprocessing with separate preview",
+ /*reprocessType*/ ReprocessType.YUV),
+ new StreamCombinationTemplate(new StreamTemplate [] {
+ new StreamTemplate(ImageFormat.JPEG, SizeThreshold.FULL_RES),
+ new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.PREVIEW)},
+ "Ultra high resolution YUV -> JPEG reprocessing with in-app image analysis",
+ /*reprocessType*/ ReprocessType.YUV),
+
+ // YUV -> YUV reprocess + PRIV / YUV preview size stream
+ new StreamCombinationTemplate(new StreamTemplate [] {
+ new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.FULL_RES),
+ new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.PREVIEW)},
+ "Ultra high resolution YUV -> YUV reprocessing with separate preview",
+ /*reprocessType*/ ReprocessType.YUV),
+ new StreamCombinationTemplate(new StreamTemplate [] {
+ new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.FULL_RES),
+ new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.PREVIEW)},
+ "Ultra high resolution YUV -> YUV reprocessing with in-app image analysis",
+ /*reprocessType*/ ReprocessType.YUV),
+ };
+
+ private static StreamCombinationTemplate sUltraHighResolutionPRIVReprocStreamCombinations[] = {
new StreamCombinationTemplate(new StreamTemplate [] {
- new StreamTemplate(ImageFormat.RAW_SENSOR, SizeThreshold.FULL_RES) },
- "Full res RAW capture"),
+ new StreamTemplate(ImageFormat.JPEG, SizeThreshold.FULL_RES),
+ new StreamTemplate(ImageFormat.PRIVATE, SizeThreshold.PREVIEW)},
+ "Ultra high resolution PRIVATE -> JPEG reprocessing with separate preview",
+ /*reprocessType*/ ReprocessType.PRIVATE),
new StreamCombinationTemplate(new StreamTemplate [] {
- new StreamTemplate(ImageFormat.JPEG, SizeThreshold.FULL_RES) },
- "Full res JPEG still image capture"),
+ new StreamTemplate(ImageFormat.JPEG, SizeThreshold.FULL_RES),
+ new StreamTemplate(ImageFormat.YUV_420_888, SizeThreshold.PREVIEW)},
+ "Ultra high resolution PRIVATE -> JPEG reprocessing with in-app image analysis",
+ /*reprocessType*/ ReprocessType.PRIVATE),
};
/**
@@ -903,86 +1055,183 @@ public final class MandatoryStreamCombination {
public @NonNull List<MandatoryStreamCombination>
getAvailableMandatoryMaximumResolutionStreamCombinations() {
- ArrayList<StreamCombinationTemplate> chosenStreamCombinations =
+ if (!isColorOutputSupported()) {
+ Log.v(TAG, "Device is not backward compatible!, no mandatory maximum res streams");
+ return null;
+ }
+
+ ArrayList<StreamCombinationTemplate> chosenStreamCombinationTemplates =
new ArrayList<StreamCombinationTemplate>();
- chosenStreamCombinations.addAll(Arrays.asList(sUltraHighResolutionStreamCombinations));
+ chosenStreamCombinationTemplates.addAll(
+ Arrays.asList(sUltraHighResolutionStreamCombinations));
ArrayList<MandatoryStreamCombination> availableStreamCombinations =
new ArrayList<MandatoryStreamCombination>();
boolean addRemosaicReprocessing = isRemosaicReprocessingSupported();
+
int remosaicSize = 0;
+ Size [] maxResYUVInputSizes =
+ mStreamConfigMapMaximumResolution.getInputSizes(ImageFormat.YUV_420_888);
+ Size [] maxResPRIVInputSizes =
+ mStreamConfigMapMaximumResolution.getInputSizes(ImageFormat.PRIVATE);
+
if (addRemosaicReprocessing) {
- remosaicSize = 1;
+ remosaicSize += sUltraHighResolutionReprocStreamCombinations.length;
+ chosenStreamCombinationTemplates.addAll(
+ Arrays.asList(sUltraHighResolutionReprocStreamCombinations));
}
- availableStreamCombinations.ensureCapacity(
- chosenStreamCombinations.size() + remosaicSize);
- fillMandatoryOutputStreamCombinations(availableStreamCombinations,
- chosenStreamCombinations, mStreamConfigMapMaximumResolution);
- if (isRemosaicReprocessingSupported()) {
- // Add reprocess mandatory streams
- ArrayList<MandatoryStreamInformation> streamsInfo =
- new ArrayList<MandatoryStreamInformation>();
- ArrayList<Size> inputSize = new ArrayList<Size>();
- Size maxRawInputSize = getMaxSize(mStreamConfigMapMaximumResolution.getInputSizes(
- ImageFormat.RAW_SENSOR));
- inputSize.add(maxRawInputSize);
-
- streamsInfo.add(new MandatoryStreamInformation(inputSize,
- ImageFormat.RAW_SENSOR, /*isMaximumSize*/true, /*isInput*/true,
- /*ultraHighResolution*/true));
- streamsInfo.add(new MandatoryStreamInformation(inputSize,
- ImageFormat.RAW_SENSOR, /*isMaximumSize*/true, /*isInput*/ false,
- /*ultraHighResolution*/true));
- MandatoryStreamCombination streamCombination;
- streamCombination = new MandatoryStreamCombination(streamsInfo,
- "Remosaic reprocessing", /*isReprocess*/true);
- availableStreamCombinations.add(streamCombination);
+ if (maxResYUVInputSizes != null && maxResYUVInputSizes.length != 0) {
+ remosaicSize += sUltraHighResolutionYUVReprocStreamCombinations.length;
+ chosenStreamCombinationTemplates.addAll(
+ Arrays.asList(sUltraHighResolutionYUVReprocStreamCombinations));
}
+
+ if (maxResPRIVInputSizes != null && maxResPRIVInputSizes.length != 0) {
+ remosaicSize += sUltraHighResolutionPRIVReprocStreamCombinations.length;
+ chosenStreamCombinationTemplates.addAll(
+ Arrays.asList(sUltraHighResolutionPRIVReprocStreamCombinations));
+
+ }
+ availableStreamCombinations.ensureCapacity(
+ chosenStreamCombinationTemplates.size() + remosaicSize);
+ fillUHMandatoryStreamCombinations(availableStreamCombinations,
+ chosenStreamCombinationTemplates);
+
return Collections.unmodifiableList(availableStreamCombinations);
}
- private void fillMandatoryOutputStreamCombinations(
- ArrayList<MandatoryStreamCombination> availableStreamCombinations,
- ArrayList<StreamCombinationTemplate> chosenStreamCombinations,
- StreamConfigurationMap streamConfigMap) {
-
- for (StreamCombinationTemplate combTemplate : chosenStreamCombinations) {
- ArrayList<MandatoryStreamInformation> streamsInfo =
- new ArrayList<MandatoryStreamInformation>();
- streamsInfo.ensureCapacity(combTemplate.mStreamTemplates.length);
+ private MandatoryStreamCombination createUHSensorMandatoryStreamCombination(
+ StreamCombinationTemplate combTemplate, int substitutedFormat) {
+ ArrayList<MandatoryStreamInformation> streamsInfo =
+ new ArrayList<MandatoryStreamInformation>();
+ streamsInfo.ensureCapacity(combTemplate.mStreamTemplates.length);
+ boolean isReprocess = combTemplate.mReprocessType != ReprocessType.NONE;
+ if (isReprocess) {
+ int format = -1;
+ ArrayList<Size> inputSize = new ArrayList<Size>();
+ if (combTemplate.mReprocessType == ReprocessType.PRIVATE) {
+ inputSize.add(
+ getMaxSize(mStreamConfigMapMaximumResolution.getInputSizes(
+ ImageFormat.PRIVATE)));
+ format = ImageFormat.PRIVATE;
+ } else if (combTemplate.mReprocessType == ReprocessType.REMOSAIC) {
+ inputSize.add(
+ getMaxSize(mStreamConfigMapMaximumResolution.getInputSizes(
+ ImageFormat.RAW_SENSOR)));
+ format = ImageFormat.RAW_SENSOR;
+ } else {
+ inputSize.add(
+ getMaxSize(mStreamConfigMapMaximumResolution.getInputSizes(
+ ImageFormat.YUV_420_888)));
+ format = ImageFormat.YUV_420_888;
+ }
+ streamsInfo.add(new MandatoryStreamInformation(inputSize, format,
+ /*isMaximumSize*/false, /*isInput*/true,
+ /*isUltraHighResolution*/ true));
+ streamsInfo.add(new MandatoryStreamInformation(inputSize, format,
+ /*isMaximumSize*/false, /*isInput*/ false,
+ /*isUltraHighResolution*/true));
+ }
+ HashMap<Pair<SizeThreshold, Integer>, List<Size>> availableDefaultNonRawSizes =
+ enumerateAvailableSizes();
+ if (availableDefaultNonRawSizes == null) {
+ Log.e(TAG, "Available size enumeration failed");
+ return null;
+ }
+ Size[] defaultRawSizes =
+ mStreamConfigMap.getOutputSizes(ImageFormat.RAW_SENSOR);
+ ArrayList<Size> availableDefaultRawSizes = new ArrayList<>();
+ if (defaultRawSizes != null) {
+ availableDefaultRawSizes.ensureCapacity(defaultRawSizes.length);
+ availableDefaultRawSizes.addAll(Arrays.asList(defaultRawSizes));
+ }
+ for (StreamTemplate template : combTemplate.mStreamTemplates) {
+ MandatoryStreamInformation streamInfo;
+ List<Size> sizes = new ArrayList<Size>();
+ int formatChosen = template.mFormat;
+ boolean isUltraHighResolution =
+ (template.mSizeThreshold == SizeThreshold.FULL_RES);
+ StreamConfigurationMap sm =
+ isUltraHighResolution ?
+ mStreamConfigMapMaximumResolution : mStreamConfigMap;
+ boolean isMaximumSize = (template.mSizeThreshold == SizeThreshold.MAXIMUM);
+
+ if (substitutedFormat != ImageFormat.UNKNOWN && isMaximumSize) {
+ formatChosen = substitutedFormat;
+ }
- for (StreamTemplate template : combTemplate.mStreamTemplates) {
- MandatoryStreamInformation streamInfo;
- List<Size> sizes = new ArrayList<Size>();
- Size sizeChosen =
- getMaxSize(streamConfigMap.getOutputSizes(
- template.mFormat));
- boolean isMaximumSize = (template.mSizeThreshold == SizeThreshold.MAXIMUM);
- sizes.add(sizeChosen);
- try {
- streamInfo = new MandatoryStreamInformation(sizes, template.mFormat,
- isMaximumSize, /*isInput*/ false, /*ultraHighResolution*/ true);
- } catch (IllegalArgumentException e) {
- String cause = "No available sizes found for format: " + template.mFormat
- + " size threshold: " + template.mSizeThreshold + " combination: "
- + combTemplate.mDescription;
- throw new RuntimeException(cause, e);
+ if (isUltraHighResolution) {
+ sizes.add(getMaxSize(sm.getOutputSizes(formatChosen)));
+ } else {
+ if (formatChosen == ImageFormat.RAW_SENSOR) {
+ // RAW_SENSOR always has MAXIMUM threshold.
+ sizes = availableDefaultRawSizes;
+ } else {
+ Pair<SizeThreshold, Integer> pair =
+ new Pair<SizeThreshold, Integer>(template.mSizeThreshold,
+ new Integer(formatChosen));
+ sizes = availableDefaultNonRawSizes.get(pair);
}
- streamsInfo.add(streamInfo);
}
- MandatoryStreamCombination streamCombination;
try {
- streamCombination = new MandatoryStreamCombination(streamsInfo,
- combTemplate.mDescription, /*isReprocess*/false);
+ streamInfo = new MandatoryStreamInformation(sizes, formatChosen,
+ isMaximumSize, /*isInput*/ false, isUltraHighResolution);
} catch (IllegalArgumentException e) {
- String cause = "No stream information for mandatory combination: "
+ String cause = "No available sizes found for format: " + template.mFormat
+ + " size threshold: " + template.mSizeThreshold + " combination: "
+ combTemplate.mDescription;
throw new RuntimeException(cause, e);
}
+ streamsInfo.add(streamInfo);
+ }
+
+ String formatString = null;
+ switch (substitutedFormat) {
+ case ImageFormat.RAW_SENSOR :
+ formatString = "RAW_SENSOR";
+ break;
+ case ImageFormat.JPEG :
+ formatString = "JPEG";
+ break;
+ default:
+ formatString = "YUV";
+ }
+
+ MandatoryStreamCombination streamCombination;
+ try {
+ streamCombination = new MandatoryStreamCombination(streamsInfo,
+ combTemplate.mDescription + " " + formatString + " still-capture",
+ isReprocess);
+ } catch (IllegalArgumentException e) {
+ String cause = "No stream information for mandatory combination: "
+ + combTemplate.mDescription;
+ throw new RuntimeException(cause, e);
+ }
+ return streamCombination;
+ }
+
+ private void fillUHMandatoryStreamCombinations(
+ ArrayList<MandatoryStreamCombination> availableStreamCombinations,
+ ArrayList<StreamCombinationTemplate> chosenTemplates) {
+
+ for (StreamCombinationTemplate combTemplate : chosenTemplates) {
+ MandatoryStreamCombination streamCombination =
+ createUHSensorMandatoryStreamCombination(combTemplate,
+ ImageFormat.UNKNOWN);
availableStreamCombinations.add(streamCombination);
+ if (combTemplate.mSubstituteYUV) {
+ streamCombination =
+ createUHSensorMandatoryStreamCombination(combTemplate,
+ ImageFormat.RAW_SENSOR);
+ availableStreamCombinations.add(streamCombination);
+ streamCombination =
+ createUHSensorMandatoryStreamCombination(combTemplate,
+ ImageFormat.JPEG);
+ availableStreamCombinations.add(streamCombination);
+ }
}
}
@@ -1135,6 +1384,7 @@ public final class MandatoryStreamCombination {
inputSize.add(maxPrivateInputSize);
format = ImageFormat.PRIVATE;
} else {
+ // Default mandatory streams only have PRIVATE / YUV reprocessing.
inputSize.add(maxYUVInputSize);
format = ImageFormat.YUV_420_888;
}