Loading media/java/android/media/MediaCodecInfo.java +20 −3 Original line number Diff line number Diff line Loading @@ -126,6 +126,7 @@ public final class MediaCodecInfo { new Rational(Integer.MAX_VALUE, 1)); private static final Range<Integer> SIZE_RANGE = Range.create(1, 32768); private static final Range<Integer> FRAME_RATE_RANGE = Range.create(0, 960); private static final Range<Integer> BITRATE_RANGE = Range.create(0, 500000000); // found stuff that is not supported by framework (=> this should not happen) private static final int ERROR_UNRECOGNIZED = (1 << 0); Loading Loading @@ -711,7 +712,7 @@ public final class MediaCodecInfo { } if (info.containsKey("bitrate-range")) { bitRates = bitRates.intersect( Utils.parseIntRange(info.getString("bitrate"), bitRates)); Utils.parseIntRange(info.getString("bitrate-range"), bitRates)); } applyLimits(maxInputChannels, bitRates); } Loading Loading @@ -1061,7 +1062,7 @@ public final class MediaCodecInfo { } private void initWithPlatformLimits() { mBitrateRange = Range.create(0, Integer.MAX_VALUE); mBitrateRange = BITRATE_RANGE; mWidthRange = SIZE_RANGE; mHeightRange = SIZE_RANGE; Loading Loading @@ -1090,7 +1091,7 @@ public final class MediaCodecInfo { Size blockSize = new Size(mBlockWidth, mBlockHeight); Size alignment = new Size(mWidthAlignment, mHeightAlignment); Range<Integer> counts = null, widths = null, heights = null; Range<Integer> frameRates = null; Range<Integer> frameRates = null, bitRates = null; Range<Long> blockRates = null; Range<Rational> ratios = null, blockRatios = null; Loading Loading @@ -1148,6 +1149,16 @@ public final class MediaCodecInfo { frameRates = null; } } bitRates = Utils.parseIntRange(map.get("bitrate-range"), null); if (bitRates != null) { try { bitRates = bitRates.intersect(BITRATE_RANGE); } catch (IllegalArgumentException e) { Log.w(TAG, "bitrate range (" + bitRates + ") is out of limits: " + BITRATE_RANGE); bitRates = null; } } checkPowerOfTwo( blockSize.getWidth(), "block-size width must be power of two"); Loading Loading @@ -1196,6 +1207,9 @@ public final class MediaCodecInfo { if (frameRates != null) { mFrameRateRange = FRAME_RATE_RANGE.intersect(frameRates); } if (bitRates != null) { mBitrateRange = BITRATE_RANGE.intersect(bitRates); } } else { // no unsupported profile/levels, so restrict values to known limits if (widths != null) { Loading Loading @@ -1226,6 +1240,9 @@ public final class MediaCodecInfo { if (frameRates != null) { mFrameRateRange = mFrameRateRange.intersect(frameRates); } if (bitRates != null) { mBitrateRange = mBitrateRange.intersect(bitRates); } } updateLimits(); } Loading Loading
media/java/android/media/MediaCodecInfo.java +20 −3 Original line number Diff line number Diff line Loading @@ -126,6 +126,7 @@ public final class MediaCodecInfo { new Rational(Integer.MAX_VALUE, 1)); private static final Range<Integer> SIZE_RANGE = Range.create(1, 32768); private static final Range<Integer> FRAME_RATE_RANGE = Range.create(0, 960); private static final Range<Integer> BITRATE_RANGE = Range.create(0, 500000000); // found stuff that is not supported by framework (=> this should not happen) private static final int ERROR_UNRECOGNIZED = (1 << 0); Loading Loading @@ -711,7 +712,7 @@ public final class MediaCodecInfo { } if (info.containsKey("bitrate-range")) { bitRates = bitRates.intersect( Utils.parseIntRange(info.getString("bitrate"), bitRates)); Utils.parseIntRange(info.getString("bitrate-range"), bitRates)); } applyLimits(maxInputChannels, bitRates); } Loading Loading @@ -1061,7 +1062,7 @@ public final class MediaCodecInfo { } private void initWithPlatformLimits() { mBitrateRange = Range.create(0, Integer.MAX_VALUE); mBitrateRange = BITRATE_RANGE; mWidthRange = SIZE_RANGE; mHeightRange = SIZE_RANGE; Loading Loading @@ -1090,7 +1091,7 @@ public final class MediaCodecInfo { Size blockSize = new Size(mBlockWidth, mBlockHeight); Size alignment = new Size(mWidthAlignment, mHeightAlignment); Range<Integer> counts = null, widths = null, heights = null; Range<Integer> frameRates = null; Range<Integer> frameRates = null, bitRates = null; Range<Long> blockRates = null; Range<Rational> ratios = null, blockRatios = null; Loading Loading @@ -1148,6 +1149,16 @@ public final class MediaCodecInfo { frameRates = null; } } bitRates = Utils.parseIntRange(map.get("bitrate-range"), null); if (bitRates != null) { try { bitRates = bitRates.intersect(BITRATE_RANGE); } catch (IllegalArgumentException e) { Log.w(TAG, "bitrate range (" + bitRates + ") is out of limits: " + BITRATE_RANGE); bitRates = null; } } checkPowerOfTwo( blockSize.getWidth(), "block-size width must be power of two"); Loading Loading @@ -1196,6 +1207,9 @@ public final class MediaCodecInfo { if (frameRates != null) { mFrameRateRange = FRAME_RATE_RANGE.intersect(frameRates); } if (bitRates != null) { mBitrateRange = BITRATE_RANGE.intersect(bitRates); } } else { // no unsupported profile/levels, so restrict values to known limits if (widths != null) { Loading Loading @@ -1226,6 +1240,9 @@ public final class MediaCodecInfo { if (frameRates != null) { mFrameRateRange = mFrameRateRange.intersect(frameRates); } if (bitRates != null) { mBitrateRange = mBitrateRange.intersect(bitRates); } } updateLimits(); } Loading