Commit 71418f94 by aquilescanta Committed by Toni

Fix TTML bitmap subtitles

+ Use start for anchoring, instead of center.
+ Add the height to the TTML bitmap cue rendering layout.

Issue:#5633
PiperOrigin-RevId: 250519710
parent 1151848f
...@@ -9,8 +9,11 @@ ...@@ -9,8 +9,11 @@
checks ([#5568](https://github.com/google/ExoPlayer/issues/5568)). checks ([#5568](https://github.com/google/ExoPlayer/issues/5568)).
* Decoders: Prefer decoders that advertise format support over ones that do not, * Decoders: Prefer decoders that advertise format support over ones that do not,
even if they are listed lower in the `MediaCodecList`. even if they are listed lower in the `MediaCodecList`.
* CEA-608: Handle XDS and TEXT modes * Subtitles:
([5807](https://github.com/google/ExoPlayer/pull/5807)). * CEA-608: Handle XDS and TEXT modes
([#5807](https://github.com/google/ExoPlayer/pull/5807)).
* TTML: Fix bitmap rendering
([#5633](https://github.com/google/ExoPlayer/pull/5633)).
* Audio: * Audio:
* Fix an issue where not all audio was played out when the configuration * Fix an issue where not all audio was played out when the configuration
for the underlying track was changing (e.g., at some period transitions). for the underlying track was changing (e.g., at some period transitions).
......
...@@ -429,6 +429,7 @@ public final class TtmlDecoder extends SimpleSubtitleDecoder { ...@@ -429,6 +429,7 @@ public final class TtmlDecoder extends SimpleSubtitleDecoder {
/* lineType= */ Cue.LINE_TYPE_FRACTION, /* lineType= */ Cue.LINE_TYPE_FRACTION,
lineAnchor, lineAnchor,
width, width,
height,
/* textSizeType= */ Cue.TEXT_SIZE_TYPE_FRACTIONAL_IGNORE_PADDING, /* textSizeType= */ Cue.TEXT_SIZE_TYPE_FRACTIONAL_IGNORE_PADDING,
/* textSize= */ regionTextHeight); /* textSize= */ regionTextHeight);
} }
......
...@@ -231,11 +231,11 @@ import java.util.TreeSet; ...@@ -231,11 +231,11 @@ import java.util.TreeSet;
new Cue( new Cue(
bitmap, bitmap,
region.position, region.position,
Cue.ANCHOR_TYPE_MIDDLE, Cue.ANCHOR_TYPE_START,
region.line, region.line,
region.lineAnchor, region.lineAnchor,
region.width, region.width,
/* height= */ Cue.DIMEN_UNSET)); region.height));
} }
// Create text based cues. // Create text based cues.
......
...@@ -28,6 +28,7 @@ import com.google.android.exoplayer2.text.Cue; ...@@ -28,6 +28,7 @@ import com.google.android.exoplayer2.text.Cue;
public final @Cue.LineType int lineType; public final @Cue.LineType int lineType;
public final @Cue.AnchorType int lineAnchor; public final @Cue.AnchorType int lineAnchor;
public final float width; public final float width;
public final float height;
public final @Cue.TextSizeType int textSizeType; public final @Cue.TextSizeType int textSizeType;
public final float textSize; public final float textSize;
...@@ -39,6 +40,7 @@ import com.google.android.exoplayer2.text.Cue; ...@@ -39,6 +40,7 @@ import com.google.android.exoplayer2.text.Cue;
/* lineType= */ Cue.TYPE_UNSET, /* lineType= */ Cue.TYPE_UNSET,
/* lineAnchor= */ Cue.TYPE_UNSET, /* lineAnchor= */ Cue.TYPE_UNSET,
/* width= */ Cue.DIMEN_UNSET, /* width= */ Cue.DIMEN_UNSET,
/* height= */ Cue.DIMEN_UNSET,
/* textSizeType= */ Cue.TYPE_UNSET, /* textSizeType= */ Cue.TYPE_UNSET,
/* textSize= */ Cue.DIMEN_UNSET); /* textSize= */ Cue.DIMEN_UNSET);
} }
...@@ -50,6 +52,7 @@ import com.google.android.exoplayer2.text.Cue; ...@@ -50,6 +52,7 @@ import com.google.android.exoplayer2.text.Cue;
@Cue.LineType int lineType, @Cue.LineType int lineType,
@Cue.AnchorType int lineAnchor, @Cue.AnchorType int lineAnchor,
float width, float width,
float height,
int textSizeType, int textSizeType,
float textSize) { float textSize) {
this.id = id; this.id = id;
...@@ -58,6 +61,7 @@ import com.google.android.exoplayer2.text.Cue; ...@@ -58,6 +61,7 @@ import com.google.android.exoplayer2.text.Cue;
this.lineType = lineType; this.lineType = lineType;
this.lineAnchor = lineAnchor; this.lineAnchor = lineAnchor;
this.width = width; this.width = width;
this.height = height;
this.textSizeType = textSizeType; this.textSizeType = textSizeType;
this.textSize = textSize; this.textSize = textSize;
} }
......
...@@ -514,7 +514,7 @@ public final class TtmlDecoderTest { ...@@ -514,7 +514,7 @@ public final class TtmlDecoderTest {
assertThat(cue.position).isEqualTo(24f / 100f); assertThat(cue.position).isEqualTo(24f / 100f);
assertThat(cue.line).isEqualTo(28f / 100f); assertThat(cue.line).isEqualTo(28f / 100f);
assertThat(cue.size).isEqualTo(51f / 100f); assertThat(cue.size).isEqualTo(51f / 100f);
assertThat(cue.bitmapHeight).isEqualTo(Cue.DIMEN_UNSET); assertThat(cue.bitmapHeight).isEqualTo(12f / 100f);
cues = subtitle.getCues(4000000); cues = subtitle.getCues(4000000);
assertThat(cues).hasSize(1); assertThat(cues).hasSize(1);
...@@ -524,7 +524,7 @@ public final class TtmlDecoderTest { ...@@ -524,7 +524,7 @@ public final class TtmlDecoderTest {
assertThat(cue.position).isEqualTo(21f / 100f); assertThat(cue.position).isEqualTo(21f / 100f);
assertThat(cue.line).isEqualTo(35f / 100f); assertThat(cue.line).isEqualTo(35f / 100f);
assertThat(cue.size).isEqualTo(57f / 100f); assertThat(cue.size).isEqualTo(57f / 100f);
assertThat(cue.bitmapHeight).isEqualTo(Cue.DIMEN_UNSET); assertThat(cue.bitmapHeight).isEqualTo(6f / 100f);
cues = subtitle.getCues(7500000); cues = subtitle.getCues(7500000);
assertThat(cues).hasSize(1); assertThat(cues).hasSize(1);
...@@ -534,7 +534,7 @@ public final class TtmlDecoderTest { ...@@ -534,7 +534,7 @@ public final class TtmlDecoderTest {
assertThat(cue.position).isEqualTo(24f / 100f); assertThat(cue.position).isEqualTo(24f / 100f);
assertThat(cue.line).isEqualTo(28f / 100f); assertThat(cue.line).isEqualTo(28f / 100f);
assertThat(cue.size).isEqualTo(51f / 100f); assertThat(cue.size).isEqualTo(51f / 100f);
assertThat(cue.bitmapHeight).isEqualTo(Cue.DIMEN_UNSET); assertThat(cue.bitmapHeight).isEqualTo(12f / 100f);
} }
@Test @Test
...@@ -549,7 +549,7 @@ public final class TtmlDecoderTest { ...@@ -549,7 +549,7 @@ public final class TtmlDecoderTest {
assertThat(cue.position).isEqualTo(307f / 1280f); assertThat(cue.position).isEqualTo(307f / 1280f);
assertThat(cue.line).isEqualTo(562f / 720f); assertThat(cue.line).isEqualTo(562f / 720f);
assertThat(cue.size).isEqualTo(653f / 1280f); assertThat(cue.size).isEqualTo(653f / 1280f);
assertThat(cue.bitmapHeight).isEqualTo(Cue.DIMEN_UNSET); assertThat(cue.bitmapHeight).isEqualTo(86f / 720f);
cues = subtitle.getCues(4000000); cues = subtitle.getCues(4000000);
assertThat(cues).hasSize(1); assertThat(cues).hasSize(1);
...@@ -559,7 +559,7 @@ public final class TtmlDecoderTest { ...@@ -559,7 +559,7 @@ public final class TtmlDecoderTest {
assertThat(cue.position).isEqualTo(269f / 1280f); assertThat(cue.position).isEqualTo(269f / 1280f);
assertThat(cue.line).isEqualTo(612f / 720f); assertThat(cue.line).isEqualTo(612f / 720f);
assertThat(cue.size).isEqualTo(730f / 1280f); assertThat(cue.size).isEqualTo(730f / 1280f);
assertThat(cue.bitmapHeight).isEqualTo(Cue.DIMEN_UNSET); assertThat(cue.bitmapHeight).isEqualTo(43f / 720f);
} }
@Test @Test
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment