summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorChong Zhang <chz@google.com>2014-12-12 11:13:20 -0800
committerChong Zhang <chz@google.com>2014-12-12 11:34:42 -0800
commit216e11dcbb4d56699c1740c801489be0d57b16c4 (patch)
tree7cc0cfd3ffd67952bab9fca0357c0cc435052723 /media
parent0aac16bbf1fd122302f8e58b7d4d5ee9d6afebc5 (diff)
downloadframeworks_base-216e11dcbb4d56699c1740c801489be0d57b16c4.zip
frameworks_base-216e11dcbb4d56699c1740c801489be0d57b16c4.tar.gz
frameworks_base-216e11dcbb4d56699c1740c801489be0d57b16c4.tar.bz2
parse bitrate range for video/audio caps
Bug: 18684228 Change-Id: Ib5c3682bb1dfa338b99352ea040edcb99d86ef0b
Diffstat (limited to 'media')
-rw-r--r--media/java/android/media/MediaCodecInfo.java23
1 files changed, 20 insertions, 3 deletions
diff --git a/media/java/android/media/MediaCodecInfo.java b/media/java/android/media/MediaCodecInfo.java
index 4513643..6984575 100644
--- a/media/java/android/media/MediaCodecInfo.java
+++ b/media/java/android/media/MediaCodecInfo.java
@@ -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);
@@ -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);
}
@@ -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;
@@ -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;
@@ -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");
@@ -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) {
@@ -1226,6 +1240,9 @@ public final class MediaCodecInfo {
if (frameRates != null) {
mFrameRateRange = mFrameRateRange.intersect(frameRates);
}
+ if (bitRates != null) {
+ mBitrateRange = mBitrateRange.intersect(bitRates);
+ }
}
updateLimits();
}