Fix MCVR crash when seeking in HDR10 videos
MCVR crashed because MCVR registers a new input stream to VideoSink on every `onOutputFormatChanged()`, assuming that `onOutputFormatChanged()` is only invoked on media item transition. However, it can be called multiple times for one media item. PiperOrigin-RevId: 649050576
This commit is contained in:
parent
ce8ab84b7c
commit
ed3a741601
@ -179,6 +179,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer
|
||||
/* package */ @Nullable OnFrameRenderedListenerV23 tunnelingOnFrameRenderedListener;
|
||||
@Nullable private VideoFrameMetadataListener frameMetadataListener;
|
||||
private long startPositionUs;
|
||||
private boolean videoSinkNeedsRegisterInputStream;
|
||||
|
||||
/**
|
||||
* @param context A context.
|
||||
@ -1304,7 +1305,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer
|
||||
decodedVideoSize =
|
||||
new VideoSize(width, height, unappliedRotationDegrees, pixelWidthHeightRatio);
|
||||
|
||||
if (videoSink != null) {
|
||||
if (videoSink != null && videoSinkNeedsRegisterInputStream) {
|
||||
onReadyToRegisterVideoSinkInputStream();
|
||||
videoSink.registerInputStream(
|
||||
/* inputType= */ VideoSink.INPUT_TYPE_SURFACE,
|
||||
@ -1318,6 +1319,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer
|
||||
} else {
|
||||
videoFrameReleaseControl.setFrameRate(format.frameRate);
|
||||
}
|
||||
videoSinkNeedsRegisterInputStream = false;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1548,6 +1550,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer
|
||||
} else {
|
||||
videoFrameReleaseControl.onProcessedStreamChange();
|
||||
}
|
||||
videoSinkNeedsRegisterInputStream = true;
|
||||
maybeSetupTunnelingForFirstFrame();
|
||||
}
|
||||
|
||||
|
@ -256,6 +256,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||
this.sequencePlayerRenderersWrapper = sequencePlayerRenderersWrapper;
|
||||
videoSink =
|
||||
checkStateNotNull(sequencePlayerRenderersWrapper.compositingVideoSinkProvider).getSink();
|
||||
experimentalEnableProcessedStreamChangedAtStart();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Loading…
x
Reference in New Issue
Block a user