Commit a9617af2 by olly Committed by Oliver Woodman

Use fast surface switching on API level 23+ when possible

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150185483
parent 7c5f0b7d
...@@ -298,13 +298,18 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { ...@@ -298,13 +298,18 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
} }
private void setSurface(Surface surface) throws ExoPlaybackException { private void setSurface(Surface surface) throws ExoPlaybackException {
// We only need to release and reinitialize the codec if the surface has changed. // We only need to update the codec if the surface has changed.
if (this.surface != surface) { if (this.surface != surface) {
this.surface = surface; this.surface = surface;
int state = getState(); int state = getState();
if (state == STATE_ENABLED || state == STATE_STARTED) { if (state == STATE_ENABLED || state == STATE_STARTED) {
releaseCodec(); MediaCodec codec = getCodec();
maybeInitCodec(); if (Util.SDK_INT >= 23 && codec != null && surface != null) {
setOutputSurfaceV23(codec, surface);
} else {
releaseCodec();
maybeInitCodec();
}
} }
} }
// Clear state so that we always call the event listener with the video size and when a frame // Clear state so that we always call the event listener with the video size and when a frame
...@@ -589,6 +594,11 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer { ...@@ -589,6 +594,11 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
return frameworkMediaFormat; return frameworkMediaFormat;
} }
@TargetApi(23)
private static void setOutputSurfaceV23(MediaCodec codec, Surface surface) {
codec.setOutputSurface(surface);
}
@TargetApi(21) @TargetApi(21)
private static void configureTunnelingV21(MediaFormat mediaFormat, int tunnelingAudioSessionId) { private static void configureTunnelingV21(MediaFormat mediaFormat, int tunnelingAudioSessionId) {
mediaFormat.setFeatureEnabled(CodecCapabilities.FEATURE_TunneledPlayback, true); mediaFormat.setFeatureEnabled(CodecCapabilities.FEATURE_TunneledPlayback, true);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment