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;
|
/* package */ @Nullable OnFrameRenderedListenerV23 tunnelingOnFrameRenderedListener;
|
||||||
@Nullable private VideoFrameMetadataListener frameMetadataListener;
|
@Nullable private VideoFrameMetadataListener frameMetadataListener;
|
||||||
private long startPositionUs;
|
private long startPositionUs;
|
||||||
|
private boolean videoSinkNeedsRegisterInputStream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param context A context.
|
* @param context A context.
|
||||||
@ -1304,7 +1305,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer
|
|||||||
decodedVideoSize =
|
decodedVideoSize =
|
||||||
new VideoSize(width, height, unappliedRotationDegrees, pixelWidthHeightRatio);
|
new VideoSize(width, height, unappliedRotationDegrees, pixelWidthHeightRatio);
|
||||||
|
|
||||||
if (videoSink != null) {
|
if (videoSink != null && videoSinkNeedsRegisterInputStream) {
|
||||||
onReadyToRegisterVideoSinkInputStream();
|
onReadyToRegisterVideoSinkInputStream();
|
||||||
videoSink.registerInputStream(
|
videoSink.registerInputStream(
|
||||||
/* inputType= */ VideoSink.INPUT_TYPE_SURFACE,
|
/* inputType= */ VideoSink.INPUT_TYPE_SURFACE,
|
||||||
@ -1318,6 +1319,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer
|
|||||||
} else {
|
} else {
|
||||||
videoFrameReleaseControl.setFrameRate(format.frameRate);
|
videoFrameReleaseControl.setFrameRate(format.frameRate);
|
||||||
}
|
}
|
||||||
|
videoSinkNeedsRegisterInputStream = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1548,6 +1550,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer
|
|||||||
} else {
|
} else {
|
||||||
videoFrameReleaseControl.onProcessedStreamChange();
|
videoFrameReleaseControl.onProcessedStreamChange();
|
||||||
}
|
}
|
||||||
|
videoSinkNeedsRegisterInputStream = true;
|
||||||
maybeSetupTunnelingForFirstFrame();
|
maybeSetupTunnelingForFirstFrame();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -256,6 +256,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
|||||||
this.sequencePlayerRenderersWrapper = sequencePlayerRenderersWrapper;
|
this.sequencePlayerRenderersWrapper = sequencePlayerRenderersWrapper;
|
||||||
videoSink =
|
videoSink =
|
||||||
checkStateNotNull(sequencePlayerRenderersWrapper.compositingVideoSinkProvider).getSink();
|
checkStateNotNull(sequencePlayerRenderersWrapper.compositingVideoSinkProvider).getSink();
|
||||||
|
experimentalEnableProcessedStreamChangedAtStart();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user