mirror of
https://github.com/androidx/media.git
synced 2025-05-04 06:00:37 +08:00
Don't force render first frame when joining.
We currently force render the first frame in all cases. However, when joining video to an ongoing playback, there is no defined first frame and we should rather drop frames if we are late until we caught up with the audio playback. PiperOrigin-RevId: 268698093
This commit is contained in:
parent
f08258e48d
commit
dc12982bd1
@ -800,10 +800,14 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
|
||||
}
|
||||
|
||||
long elapsedRealtimeNowUs = SystemClock.elapsedRealtime() * 1000;
|
||||
long elapsedSinceLastRenderUs = elapsedRealtimeNowUs - lastRenderTimeUs;
|
||||
boolean isStarted = getState() == STATE_STARTED;
|
||||
if (!renderedFirstFrame
|
||||
|| (isStarted
|
||||
&& shouldForceRenderOutputBuffer(earlyUs, elapsedRealtimeNowUs - lastRenderTimeUs))) {
|
||||
// Don't force output until we joined and always render first frame if not joining.
|
||||
boolean forceRenderOutputBuffer =
|
||||
joiningDeadlineMs == C.TIME_UNSET
|
||||
&& (!renderedFirstFrame
|
||||
|| (isStarted && shouldForceRenderOutputBuffer(earlyUs, elapsedSinceLastRenderUs)));
|
||||
if (forceRenderOutputBuffer) {
|
||||
long releaseTimeNs = System.nanoTime();
|
||||
notifyFrameMetadataListener(presentationTimeUs, releaseTimeNs, format);
|
||||
if (Util.SDK_INT >= 21) {
|
||||
@ -988,6 +992,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
|
||||
* @return Returns whether to force rendering an output buffer.
|
||||
*/
|
||||
protected boolean shouldForceRenderOutputBuffer(long earlyUs, long elapsedSinceLastRenderUs) {
|
||||
// Force render late buffers every 100ms to avoid frozen video effect.
|
||||
return isBufferLate(earlyUs) && elapsedSinceLastRenderUs > 100000;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user