Fix TextRenderer
exception when a subtitle file contains no cues
Discovered while investigating Issue: google/ExoPlayer#10823 Example stack trace with the previous code (I added the index value for debugging): ``` playerFailed [eventTime=44.07, mediaPos=44.01, window=0, period=0, errorCode=ERROR_CODE_FAILED_RUNTIME_CHECK androidx.media3.exoplayer.ExoPlaybackException: Unexpected runtime error at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:635) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loopOnce(Looper.java:202) at android.os.Looper.loop(Looper.java:291) at android.os.HandlerThread.run(HandlerThread.java:67) Caused by: java.lang.IllegalArgumentException: index=-1 at androidx.media3.common.util.Assertions.checkArgument(Assertions.java:55) at androidx.media3.extractor.text.webvtt.WebvttSubtitle.getEventTime(WebvttSubtitle.java:62) at androidx.media3.extractor.text.SubtitleOutputBuffer.getEventTime(SubtitleOutputBuffer.java:56) at androidx.media3.exoplayer.text.TextRenderer.getCurrentEventTimeUs(TextRenderer.java:435) at androidx.media3.exoplayer.text.TextRenderer.render(TextRenderer.java:268) at androidx.media3.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:1008) at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:509) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loopOnce(Looper.java:202) at android.os.Looper.loop(Looper.java:291) at android.os.HandlerThread.run(HandlerThread.java:67) ] ``` #minor-release PiperOrigin-RevId: 492464180 (cherry picked from commit 5f6fde4d2a90d78a8d58430c88d7dc12849fe163)
This commit is contained in:
parent
d0691aad6d
commit
e342b70e93
@ -418,7 +418,7 @@ public final class TextRenderer extends BaseRenderer implements Callback {
|
|||||||
@SideEffectFree
|
@SideEffectFree
|
||||||
private long getCurrentEventTimeUs(long positionUs) {
|
private long getCurrentEventTimeUs(long positionUs) {
|
||||||
int nextEventTimeIndex = subtitle.getNextEventTimeIndex(positionUs);
|
int nextEventTimeIndex = subtitle.getNextEventTimeIndex(positionUs);
|
||||||
if (nextEventTimeIndex == 0) {
|
if (nextEventTimeIndex == 0 || subtitle.getEventTimeCount() == 0) {
|
||||||
return subtitle.timeUs;
|
return subtitle.timeUs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user