Index: media/base/android/java/src/org/chromium/media/MediaCodecBridge.java |
diff --git a/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java b/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java |
index 23167ac726dcc526e1057135c6b418a5949e5e4d..4befc19a379c4e5e8b0ed60a9f24854d9ecb0417 100644 |
--- a/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java |
+++ b/media/base/android/java/src/org/chromium/media/MediaCodecBridge.java |
@@ -43,10 +43,6 @@ class MediaCodecBridge { |
private static final int MEDIA_CODEC_ABORT = 8; |
private static final int MEDIA_CODEC_ERROR = 9; |
- // Max adaptive playback size to be supplied to the decoder. |
- private static final int MAX_ADAPTIVE_PLAYBACK_WIDTH = 1920; |
- private static final int MAX_ADAPTIVE_PLAYBACK_HEIGHT = 1080; |
- |
// After a flush(), dequeueOutputBuffer() can often produce empty presentation timestamps |
// for several frames. As a result, the player may find that the time does not increase |
// after decoding a frame. To detect this, we check whether the presentation timestamp from |
@@ -455,9 +451,21 @@ class MediaCodecBridge { |
private boolean configureVideo(MediaFormat format, Surface surface, MediaCrypto crypto, |
int flags, boolean allowAdaptivePlayback) { |
try { |
- if (mAdaptivePlaybackSupported && allowAdaptivePlayback) { |
- format.setInteger(MediaFormat.KEY_MAX_WIDTH, MAX_ADAPTIVE_PLAYBACK_WIDTH); |
- format.setInteger(MediaFormat.KEY_MAX_HEIGHT, MAX_ADAPTIVE_PLAYBACK_HEIGHT); |
+ // If adaptive playback is turned off by request, then treat it as |
+ // not supported. Note that configureVideo is only called once |
+ // during creation, else this would prevent re-enabling adaptive |
+ // playback later. |
+ if (!allowAdaptivePlayback) mAdaptivePlaybackSupported = false; |
+ |
+ if (mAdaptivePlaybackSupported) { |
+ // The max size is a hint to the codec, and causes it to |
+ // allocate more memory up front. It still supports higher |
+ // resolutions if they arrive. So, we try to ask only for |
+ // the initial size. |
+ format.setInteger( |
DaleCurtis
2016/04/07 22:55:17
FWIW, since I had to go check, VideoDecoderConfig:
|
+ MediaFormat.KEY_MAX_WIDTH, format.getInteger(MediaFormat.KEY_WIDTH)); |
+ format.setInteger( |
+ MediaFormat.KEY_MAX_HEIGHT, format.getInteger(MediaFormat.KEY_HEIGHT)); |
} |
mMediaCodec.configure(format, surface, crypto, flags); |
return true; |
@@ -496,8 +504,9 @@ class MediaCodecBridge { |
@CalledByNative |
private boolean isAdaptivePlaybackSupported(int width, int height) { |
- if (!mAdaptivePlaybackSupported) return false; |
- return width <= MAX_ADAPTIVE_PLAYBACK_WIDTH && height <= MAX_ADAPTIVE_PLAYBACK_HEIGHT; |
+ // If media codec has adaptive playback supported, then the max sizes |
+ // used during creation are only hints. |
+ return mAdaptivePlaybackSupported; |
} |
@CalledByNative |