From f5377d9b11c71e31a9d06dce6a8c123cb61d52a2 Mon Sep 17 00:00:00 2001 From: ibaker Date: Wed, 30 Oct 2019 16:43:14 +0000 Subject: [PATCH] Encode WebVTT size computation in WebvttCue.java Relevant part of the spec: https://www.w3.org/TR/webvtt1/#processing-cue-settings PiperOrigin-RevId: 277523694 --- .../exoplayer2/text/webvtt/WebvttCue.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/text/webvtt/WebvttCue.java b/library/core/src/main/java/com/google/android/exoplayer2/text/webvtt/WebvttCue.java index 2442302373..0447e8c477 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/text/webvtt/WebvttCue.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/text/webvtt/WebvttCue.java @@ -163,6 +163,8 @@ public final class WebvttCue extends Cue { positionAnchor = derivePositionAnchor(textAlignment); } + width = Math.min(width, deriveMaxSize(positionAnchor, position)); + return new WebvttCue( startTime, endTime, @@ -290,5 +292,24 @@ public final class WebvttCue extends Cue { return null; } } + + // Step 2 here: https://www.w3.org/TR/webvtt1/#processing-cue-settings + private static float deriveMaxSize(@AnchorType int positionAnchor, float position) { + switch (positionAnchor) { + case Cue.ANCHOR_TYPE_START: + return 1.0f - position; + case Cue.ANCHOR_TYPE_END: + return position; + case Cue.ANCHOR_TYPE_MIDDLE: + if (position <= 0.5f) { + return position * 2; + } else { + return (1.0f - position) * 2; + } + case Cue.TYPE_UNSET: + default: + throw new IllegalStateException(String.valueOf(positionAnchor)); + } + } } }