Use fast surface switching on API level 23+ when possible

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150185483
This commit is contained in:
olly 2017-03-15 06:44:11 -07:00 committed by Oliver Woodman
parent 7c5f0b7d3b
commit a9617af29c

View File

@ -298,13 +298,18 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
}
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) {
this.surface = surface;
int state = getState();
if (state == STATE_ENABLED || state == STATE_STARTED) {
releaseCodec();
maybeInitCodec();
MediaCodec codec = getCodec();
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
@ -589,6 +594,11 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
return frameworkMediaFormat;
}
@TargetApi(23)
private static void setOutputSurfaceV23(MediaCodec codec, Surface surface) {
codec.setOutputSurface(surface);
}
@TargetApi(21)
private static void configureTunnelingV21(MediaFormat mediaFormat, int tunnelingAudioSessionId) {
mediaFormat.setFeatureEnabled(CodecCapabilities.FEATURE_TunneledPlayback, true);