mirror of
https://github.com/samsonjs/media.git
synced 2026-04-05 11:15:46 +00:00
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
This commit is contained in:
parent
1151848f59
commit
71418f9411
5 changed files with 17 additions and 9 deletions
|
|
@ -9,8 +9,11 @@
|
|||
checks ([#5568](https://github.com/google/ExoPlayer/issues/5568)).
|
||||
* Decoders: Prefer decoders that advertise format support over ones that do not,
|
||||
even if they are listed lower in the `MediaCodecList`.
|
||||
* CEA-608: Handle XDS and TEXT modes
|
||||
([5807](https://github.com/google/ExoPlayer/pull/5807)).
|
||||
* Subtitles:
|
||||
* 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:
|
||||
* 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).
|
||||
|
|
|
|||
|
|
@ -429,6 +429,7 @@ public final class TtmlDecoder extends SimpleSubtitleDecoder {
|
|||
/* lineType= */ Cue.LINE_TYPE_FRACTION,
|
||||
lineAnchor,
|
||||
width,
|
||||
height,
|
||||
/* textSizeType= */ Cue.TEXT_SIZE_TYPE_FRACTIONAL_IGNORE_PADDING,
|
||||
/* textSize= */ regionTextHeight);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -231,11 +231,11 @@ import java.util.TreeSet;
|
|||
new Cue(
|
||||
bitmap,
|
||||
region.position,
|
||||
Cue.ANCHOR_TYPE_MIDDLE,
|
||||
Cue.ANCHOR_TYPE_START,
|
||||
region.line,
|
||||
region.lineAnchor,
|
||||
region.width,
|
||||
/* height= */ Cue.DIMEN_UNSET));
|
||||
region.height));
|
||||
}
|
||||
|
||||
// Create text based cues.
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ import com.google.android.exoplayer2.text.Cue;
|
|||
public final @Cue.LineType int lineType;
|
||||
public final @Cue.AnchorType int lineAnchor;
|
||||
public final float width;
|
||||
public final float height;
|
||||
public final @Cue.TextSizeType int textSizeType;
|
||||
public final float textSize;
|
||||
|
||||
|
|
@ -39,6 +40,7 @@ import com.google.android.exoplayer2.text.Cue;
|
|||
/* lineType= */ Cue.TYPE_UNSET,
|
||||
/* lineAnchor= */ Cue.TYPE_UNSET,
|
||||
/* width= */ Cue.DIMEN_UNSET,
|
||||
/* height= */ Cue.DIMEN_UNSET,
|
||||
/* textSizeType= */ Cue.TYPE_UNSET,
|
||||
/* textSize= */ Cue.DIMEN_UNSET);
|
||||
}
|
||||
|
|
@ -50,6 +52,7 @@ import com.google.android.exoplayer2.text.Cue;
|
|||
@Cue.LineType int lineType,
|
||||
@Cue.AnchorType int lineAnchor,
|
||||
float width,
|
||||
float height,
|
||||
int textSizeType,
|
||||
float textSize) {
|
||||
this.id = id;
|
||||
|
|
@ -58,6 +61,7 @@ import com.google.android.exoplayer2.text.Cue;
|
|||
this.lineType = lineType;
|
||||
this.lineAnchor = lineAnchor;
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
this.textSizeType = textSizeType;
|
||||
this.textSize = textSize;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -514,7 +514,7 @@ public final class TtmlDecoderTest {
|
|||
assertThat(cue.position).isEqualTo(24f / 100f);
|
||||
assertThat(cue.line).isEqualTo(28f / 100f);
|
||||
assertThat(cue.size).isEqualTo(51f / 100f);
|
||||
assertThat(cue.bitmapHeight).isEqualTo(Cue.DIMEN_UNSET);
|
||||
assertThat(cue.bitmapHeight).isEqualTo(12f / 100f);
|
||||
|
||||
cues = subtitle.getCues(4000000);
|
||||
assertThat(cues).hasSize(1);
|
||||
|
|
@ -524,7 +524,7 @@ public final class TtmlDecoderTest {
|
|||
assertThat(cue.position).isEqualTo(21f / 100f);
|
||||
assertThat(cue.line).isEqualTo(35f / 100f);
|
||||
assertThat(cue.size).isEqualTo(57f / 100f);
|
||||
assertThat(cue.bitmapHeight).isEqualTo(Cue.DIMEN_UNSET);
|
||||
assertThat(cue.bitmapHeight).isEqualTo(6f / 100f);
|
||||
|
||||
cues = subtitle.getCues(7500000);
|
||||
assertThat(cues).hasSize(1);
|
||||
|
|
@ -534,7 +534,7 @@ public final class TtmlDecoderTest {
|
|||
assertThat(cue.position).isEqualTo(24f / 100f);
|
||||
assertThat(cue.line).isEqualTo(28f / 100f);
|
||||
assertThat(cue.size).isEqualTo(51f / 100f);
|
||||
assertThat(cue.bitmapHeight).isEqualTo(Cue.DIMEN_UNSET);
|
||||
assertThat(cue.bitmapHeight).isEqualTo(12f / 100f);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -549,7 +549,7 @@ public final class TtmlDecoderTest {
|
|||
assertThat(cue.position).isEqualTo(307f / 1280f);
|
||||
assertThat(cue.line).isEqualTo(562f / 720f);
|
||||
assertThat(cue.size).isEqualTo(653f / 1280f);
|
||||
assertThat(cue.bitmapHeight).isEqualTo(Cue.DIMEN_UNSET);
|
||||
assertThat(cue.bitmapHeight).isEqualTo(86f / 720f);
|
||||
|
||||
cues = subtitle.getCues(4000000);
|
||||
assertThat(cues).hasSize(1);
|
||||
|
|
@ -559,7 +559,7 @@ public final class TtmlDecoderTest {
|
|||
assertThat(cue.position).isEqualTo(269f / 1280f);
|
||||
assertThat(cue.line).isEqualTo(612f / 720f);
|
||||
assertThat(cue.size).isEqualTo(730f / 1280f);
|
||||
assertThat(cue.bitmapHeight).isEqualTo(Cue.DIMEN_UNSET);
|
||||
assertThat(cue.bitmapHeight).isEqualTo(43f / 720f);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
|||
Loading…
Reference in a new issue