Merge "media: allow excluding arbitrary codecs from REGULAR_CODECS list."

This commit is contained in:
Lajos Molnar
2021-10-26 22:18:22 +00:00
committed by Gerrit Code Review

View File

@@ -182,10 +182,15 @@ public final class MediaCodecInfo {
public String mName; public String mName;
public int mValue; public int mValue;
public boolean mDefault; public boolean mDefault;
public boolean mInternal;
public Feature(String name, int value, boolean def) { public Feature(String name, int value, boolean def) {
this(name, value, def, false /* internal */);
}
public Feature(String name, int value, boolean def, boolean internal) {
mName = name; mName = name;
mValue = value; mValue = value;
mDefault = def; mDefault = def;
mInternal = internal;
} }
} }
@@ -578,6 +583,11 @@ public final class MediaCodecInfo {
*/ */
public static final String FEATURE_LowLatency = "low-latency"; public static final String FEATURE_LowLatency = "low-latency";
/**
* Do not include in REGULAR_CODECS list in MediaCodecList.
*/
private static final String FEATURE_SpecialCodec = "special-codec";
/** /**
* <b>video encoder only</b>: codec supports quantization parameter bounds. * <b>video encoder only</b>: codec supports quantization parameter bounds.
* @see MediaFormat#KEY_VIDEO_QP_MAX * @see MediaFormat#KEY_VIDEO_QP_MAX
@@ -616,6 +626,8 @@ public final class MediaCodecInfo {
new Feature(FEATURE_MultipleFrames, (1 << 5), false), new Feature(FEATURE_MultipleFrames, (1 << 5), false),
new Feature(FEATURE_DynamicTimestamp, (1 << 6), false), new Feature(FEATURE_DynamicTimestamp, (1 << 6), false),
new Feature(FEATURE_LowLatency, (1 << 7), true), new Feature(FEATURE_LowLatency, (1 << 7), true),
// feature to exclude codec from REGULAR codec list
new Feature(FEATURE_SpecialCodec, (1 << 30), false, true),
}; };
private static final Feature[] encoderFeatures = { private static final Feature[] encoderFeatures = {
@@ -623,6 +635,8 @@ public final class MediaCodecInfo {
new Feature(FEATURE_MultipleFrames, (1 << 1), false), new Feature(FEATURE_MultipleFrames, (1 << 1), false),
new Feature(FEATURE_DynamicTimestamp, (1 << 2), false), new Feature(FEATURE_DynamicTimestamp, (1 << 2), false),
new Feature(FEATURE_QpBounds, (1 << 3), false), new Feature(FEATURE_QpBounds, (1 << 3), false),
// feature to exclude codec from REGULAR codec list
new Feature(FEATURE_SpecialCodec, (1 << 30), false, true),
}; };
/** @hide */ /** @hide */
@@ -630,8 +644,10 @@ public final class MediaCodecInfo {
Feature[] features = getValidFeatures(); Feature[] features = getValidFeatures();
String[] res = new String[features.length]; String[] res = new String[features.length];
for (int i = 0; i < res.length; i++) { for (int i = 0; i < res.length; i++) {
if (!features[i].mInternal) {
res[i] = features[i].mName; res[i] = features[i].mName;
} }
}
return res; return res;
} }
@@ -778,6 +794,10 @@ public final class MediaCodecInfo {
// check feature support // check feature support
for (Feature feat: getValidFeatures()) { for (Feature feat: getValidFeatures()) {
if (feat.mInternal) {
continue;
}
Integer yesNo = (Integer)map.get(MediaFormat.KEY_FEATURE_ + feat.mName); Integer yesNo = (Integer)map.get(MediaFormat.KEY_FEATURE_ + feat.mName);
if (yesNo == null) { if (yesNo == null) {
continue; continue;
@@ -1091,7 +1111,9 @@ public final class MediaCodecInfo {
mFlagsRequired |= feat.mValue; mFlagsRequired |= feat.mValue;
} }
mFlagsSupported |= feat.mValue; mFlagsSupported |= feat.mValue;
if (!feat.mInternal) {
mDefaultFormat.setInteger(key, 1); mDefaultFormat.setInteger(key, 1);
}
// TODO restrict features by mFlagsVerified once all codecs reliably verify them // TODO restrict features by mFlagsVerified once all codecs reliably verify them
} }
} }