fix for MediaCodecList bitrate range exception
Bug: 16627391
Change-Id: I8c5ba580d7b875d1e2a0ebbf398cf65dd5c4555f
diff --git a/media/java/android/media/MediaCodecInfo.java b/media/java/android/media/MediaCodecInfo.java
index 2a68510..b6e03f5 100644
--- a/media/java/android/media/MediaCodecInfo.java
+++ b/media/java/android/media/MediaCodecInfo.java
@@ -1293,8 +1293,15 @@
FR = 30; W = 22; H = 18; MBPS = 5940; FS = 396; BR = 128; break;
case CodecProfileLevel.MPEG4Level3:
FR = 30; W = 22; H = 18; MBPS = 11880; FS = 396; BR = 384; break;
- // TODO while MPEG4 SP does not have level 4 or 5,
- // some vendors report it
+ case CodecProfileLevel.MPEG4Level4:
+ case CodecProfileLevel.MPEG4Level4a:
+ case CodecProfileLevel.MPEG4Level5:
+ // While MPEG4 SP does not have level 4 or 5, some vendors
+ // report it. Use the same limits as level 3, but mark as
+ // unsupported.
+ FR = 30; W = 22; H = 18; MBPS = 11880; FS = 396; BR = 384;
+ supported = false;
+ break;
default:
Log.w(TAG, "Unrecognized profile/level "
+ profileLevel.profile + "/"
@@ -1429,7 +1436,11 @@
mFrameRateRange = Range.create(1, maxRate);
} else if (mime.equalsIgnoreCase(MediaFormat.MIMETYPE_VIDEO_VP8) ||
mime.equalsIgnoreCase(MediaFormat.MIMETYPE_VIDEO_VP9)) {
- maxBlocks = maxBlocksPerSecond = maxBps = Integer.MAX_VALUE;
+ maxBlocks = maxBlocksPerSecond = Integer.MAX_VALUE;
+
+ // TODO: set to 100Mbps for now, need a number for VPX
+ maxBps = 100000000;
+
// profile levels are not indicative for VPx, but verify
// them nonetheless
for (CodecProfileLevel profileLevel: profileLevels) {
@@ -1549,6 +1560,7 @@
maxBlocks, maxBlocksPerSecond, 8, 8, 1, 1);
} else {
Log.w(TAG, "Unsupported mime " + mime);
+ maxBps = 64000;
errors |= ERROR_UNSUPPORTED;
}
mBitrateRange = Range.create(1, maxBps);
diff --git a/media/java/android/media/MediaCodecList.java b/media/java/android/media/MediaCodecList.java
index f5d99e4..d74f22d 100644
--- a/media/java/android/media/MediaCodecList.java
+++ b/media/java/android/media/MediaCodecList.java
@@ -95,7 +95,7 @@
new MediaCodecInfo.CodecCapabilities[supportedTypes.length];
int typeIx = 0;
for (String type: supportedTypes) {
- caps[typeIx] = getCodecCapabilities(index, type);
+ caps[typeIx++] = getCodecCapabilities(index, type);
}
return new MediaCodecInfo(
getCodecName(index), isEncoder(index), caps);