mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +00:00
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:
parent
acc8453628
commit
5ed0c12ff0
1 changed files with 5 additions and 1 deletions
|
|
@ -139,6 +139,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
|
||||||
private Surface surface;
|
private Surface surface;
|
||||||
private float surfaceFrameRate;
|
private float surfaceFrameRate;
|
||||||
private Surface dummySurface;
|
private Surface dummySurface;
|
||||||
|
private boolean haveReportedFirstFrameRenderedForCurrentSurface;
|
||||||
@VideoScalingMode private int scalingMode;
|
@VideoScalingMode private int scalingMode;
|
||||||
private boolean renderedFirstFrameAfterReset;
|
private boolean renderedFirstFrameAfterReset;
|
||||||
private boolean mayRenderFirstFrameAfterEnableIfNotStarted;
|
private boolean mayRenderFirstFrameAfterEnableIfNotStarted;
|
||||||
|
|
@ -446,6 +447,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
|
||||||
protected void onDisabled() {
|
protected void onDisabled() {
|
||||||
clearReportedVideoSize();
|
clearReportedVideoSize();
|
||||||
clearRenderedFirstFrame();
|
clearRenderedFirstFrame();
|
||||||
|
haveReportedFirstFrameRenderedForCurrentSurface = false;
|
||||||
frameReleaseTimeHelper.disable();
|
frameReleaseTimeHelper.disable();
|
||||||
tunnelingOnFrameRenderedListener = null;
|
tunnelingOnFrameRenderedListener = null;
|
||||||
try {
|
try {
|
||||||
|
|
@ -504,6 +506,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
|
||||||
if (this.surface != surface) {
|
if (this.surface != surface) {
|
||||||
clearSurfaceFrameRate();
|
clearSurfaceFrameRate();
|
||||||
this.surface = surface;
|
this.surface = surface;
|
||||||
|
haveReportedFirstFrameRenderedForCurrentSurface = false;
|
||||||
updateSurfaceFrameRate(/* isNewSurface= */ true);
|
updateSurfaceFrameRate(/* isNewSurface= */ true);
|
||||||
|
|
||||||
@State int state = getState();
|
@State int state = getState();
|
||||||
|
|
@ -1160,11 +1163,12 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer {
|
||||||
if (!renderedFirstFrameAfterReset) {
|
if (!renderedFirstFrameAfterReset) {
|
||||||
renderedFirstFrameAfterReset = true;
|
renderedFirstFrameAfterReset = true;
|
||||||
eventDispatcher.renderedFirstFrame(surface);
|
eventDispatcher.renderedFirstFrame(surface);
|
||||||
|
haveReportedFirstFrameRenderedForCurrentSurface = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void maybeRenotifyRenderedFirstFrame() {
|
private void maybeRenotifyRenderedFirstFrame() {
|
||||||
if (renderedFirstFrameAfterReset) {
|
if (haveReportedFirstFrameRenderedForCurrentSurface) {
|
||||||
eventDispatcher.renderedFirstFrame(surface);
|
eventDispatcher.renderedFirstFrame(surface);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue