Tweak how MediaCodecVideoRenderer renotifies the existing surface

Use a dedicated boolean to track if we've notified the current surface,
rather than re-using rendereredFirstFrameAfterReset.

PiperOrigin-RevId: 325757948
This commit is contained in:
ibaker 2020-08-10 09:26:00 +01:00 committed by kim-vde
parent acc8453628
commit 5ed0c12ff0

View file

@ -139,6 +139,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
private Surface surface;
private float surfaceFrameRate;
private Surface dummySurface;
private boolean haveReportedFirstFrameRenderedForCurrentSurface;
@VideoScalingMode private int scalingMode;
private boolean renderedFirstFrameAfterReset;
private boolean mayRenderFirstFrameAfterEnableIfNotStarted;
@ -446,6 +447,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
protected void onDisabled() {
clearReportedVideoSize();
clearRenderedFirstFrame();
haveReportedFirstFrameRenderedForCurrentSurface = false;
frameReleaseTimeHelper.disable();
tunnelingOnFrameRenderedListener = null;
try {
@ -504,6 +506,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
if (this.surface != surface) {
clearSurfaceFrameRate();
this.surface = surface;
haveReportedFirstFrameRenderedForCurrentSurface = false;
updateSurfaceFrameRate(/* isNewSurface= */ true);
@State int state = getState();
@ -1160,11 +1163,12 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
if (!renderedFirstFrameAfterReset) {
renderedFirstFrameAfterReset = true;
eventDispatcher.renderedFirstFrame(surface);
haveReportedFirstFrameRenderedForCurrentSurface = true;
}
}
private void maybeRenotifyRenderedFirstFrame() {
if (renderedFirstFrameAfterReset) {
if (haveReportedFirstFrameRenderedForCurrentSurface) {
eventDispatcher.renderedFirstFrame(surface);
}
}