Clear renderedFirstFrame at stream changes even if no reconfiguration is needed

This ensures a more consistent playback behavior no matter if an item is the
first playlist item or a later one. For example, each playlist item gets its
own onRenderedFirstFrame callback and other logic within the renderer that
force renders the first frame more quickly is also triggered.

PiperOrigin-RevId: 272434814
This commit is contained in:
tonihei 2019-10-02 15:40:58 +01:00 committed by Oliver Woodman
parent f7b8d07cd2
commit bc9a0860e0

View File

@ -802,9 +802,10 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
long elapsedRealtimeNowUs = SystemClock.elapsedRealtime() * 1000;
long elapsedSinceLastRenderUs = elapsedRealtimeNowUs - lastRenderTimeUs;
boolean isStarted = getState() == STATE_STARTED;
// Don't force output until we joined and always render first frame if not joining.
// Don't force output until we joined and the position reached the current stream.
boolean forceRenderOutputBuffer =
joiningDeadlineMs == C.TIME_UNSET
&& positionUs >= outputStreamOffsetUs
&& (!renderedFirstFrame
|| (isStarted && shouldForceRenderOutputBuffer(earlyUs, elapsedSinceLastRenderUs)));
if (forceRenderOutputBuffer) {
@ -956,6 +957,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
pendingOutputStreamSwitchTimesUs,
/* destPos= */ 0,
pendingOutputStreamOffsetCount);
clearRenderedFirstFrame();
}
}