Skip to content

PlaybackVideoGraphWrapper.InputVideoSink.initialize called when it has been initialized leading to crash #2554

Open
@AradiPatrik

Description

@AradiPatrik

Version

Media3 pre-release (alpha, beta or RC not in this list)

More version details

1.8.0-alpha1

Devices that reproduce the issue

Samsung 24 Ultra

Devices that do not reproduce the issue

Reproducible in the demo app?

Not tested

Reproduction steps

When using CompositionPlayer with a composition that interleaves an audio sequence and a video/image sequence, the player sometimes crashes with an IllegalStateException in InputVideoSink.initialize. This appears to be caused by a race condition in MediaCodecVideoRenderer.maybeInitializeProcessingPipeline, where the code checks videoSink.isInitialized and immediately calls videoSink.initialize(format), but by the time initialize runs, the sink is already initialized, triggering an assertion failure.

Reproduction Steps

  • Configure a CompositionPlayer with two sequences in the same composition:
  • Sequence A: Audio samples
  • Sequence B: Video (and image) samples
  • Start playback of the composition via AndroidView with the CompositionPlayer.
  • Observe occasional crashes immediately after the video view is attached or when playback jumps between sequences. (this happens only in some cases not every time)

Expected result

no crash

Actual result

androidx.media3.common.PlaybackException: error from player 0
at androidx.media3.transformer.CompositionPlayer.maybeUpdatePlaybackError(CompositionPlayer.java:1098)
at androidx.media3.transformer.CompositionPlayer.access$1700(CompositionPlayer.java:109)
at androidx.media3.transformer.CompositionPlayer$PlayerListener.onPlayerError(CompositionPlayer.java:1281)
at androidx.media3.exoplayer.ExoPlayerImpl.lambda$updatePlaybackInfo$18(ExoPlayerImpl.java:2172)
at androidx.media3.exoplayer.ExoPlayerImpl$$ExternalSyntheticLambda31.invoke(D8$$SyntheticClass:0)
at androidx.media3.common.util.ListenerSet$ListenerHolder.invoke(ListenerSet.java:342)
at androidx.media3.common.util.ListenerSet.lambda$queueEvent$0(ListenerSet.java:226)
at androidx.media3.common.util.ListenerSet$$ExternalSyntheticLambda1.run(D8$$SyntheticClass:0)
at androidx.media3.common.util.ListenerSet.flushEvents(ListenerSet.java:248)
at androidx.media3.exoplayer.ExoPlayerImpl.updatePlaybackInfo(ExoPlayerImpl.java:2235)
at androidx.media3.exoplayer.ExoPlayerImpl.handlePlaybackInfo(ExoPlayerImpl.java:2069)
at androidx.media3.exoplayer.ExoPlayerImpl.lambda$new$1$androidx-media3-exoplayer-ExoPlayerImpl(ExoPlayerImpl.java:353)
at androidx.media3.exoplayer.ExoPlayerImpl$$ExternalSyntheticLambda12.run(D8$$SyntheticClass:0)
at android.os.Handler.handleCallback(Handler.java:958)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:230)
at android.os.Looper.loop(Looper.java:319)
at android.app.ActivityThread.main(ActivityThread.java:8919)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:578)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1103)
Caused by: androidx.media3.exoplayer.ExoPlaybackException: Unexpected runtime error
at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:910)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loopOnce(Looper.java:230)
at android.os.Looper.loop(Looper.java:319)
at android.os.HandlerThread.run(HandlerThread.java:67)
Caused by: java.lang.IllegalStateException
at androidx.media3.common.util.Assertions.checkState(Assertions.java:85)
at androidx.media3.exoplayer.video.PlaybackVideoGraphWrapper$InputVideoSink.initialize(PlaybackVideoGraphWrapper.java:717)
at androidx.media3.transformer.BufferingVideoSink.initialize(BufferingVideoSink.java:109)
at androidx.media3.exoplayer.video.MediaCodecVideoRenderer.maybeInitializeProcessingPipeline(MediaCodecVideoRenderer.java:1453)
at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.maybeInitCodecWithFallback(MediaCodecRenderer.java:1138)
at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.maybeInitCodecOrBypass(MediaCodecRenderer.java:590)
at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:1593)
at androidx.media3.exoplayer.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:1506)
at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.readSourceOmittingSampleData(MediaCodecRenderer.java:1047)
at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:865)
at androidx.media3.exoplayer.video.MediaCodecVideoRenderer.render(MediaCodecVideoRenderer.java:1321)
at androidx.media3.exoplayer.RendererHolder.render(RendererHolder.java:391)
at androidx.media3.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:1360)
at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:696)

Media

Bug Report

  • You will email the zip file produced by adb bugreport to [email protected] after filing this issue.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions