Skip to content

Commit

Permalink
Use fast surface switching on API level 23+ when possible
Browse files Browse the repository at this point in the history
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=150185483
  • Loading branch information
ojw28 committed Mar 15, 2017
1 parent 7c5f0b7 commit a9617af
Showing 1 changed file with 13 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -298,13 +298,18 @@ public void handleMessage(int messageType, Object message) throws ExoPlaybackExc
}

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
Expand Down Expand Up @@ -589,6 +594,11 @@ private static MediaFormat getMediaFormat(Format format, CodecMaxValues codecMax
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);
Expand Down

0 comments on commit a9617af

Please sign in to comment.