Merge pull request #8877 from dlafayet:textAlign

PiperOrigin-RevId: 371306900
This commit is contained in:
bachinger 2021-04-30 18:53:54 +01:00
parent 92253e1a30
commit e0c39ade1e
4 changed files with 30 additions and 10 deletions

View file

@ -116,6 +116,8 @@
* Fix lines overlapping when using `SubtitleView.VIEW_TYPE_WEB`.
* Parse SSA/ASS underline & strikethrough info in `Style:` lines
([#8435](https://github.com/google/ExoPlayer/issues/8435)).
* Ensure TTML `tts:textAlign` is correctly propagated from `<p>` nodes to
child nodes.
* MediaSession extension: Remove dependency to core module and rely on common
only. The `TimelineQueueEditor` uses a new `MediaDescriptionConverter` for
this purpose and does not rely on the `ConcatenatingMediaSource` anymore.

View file

@ -409,17 +409,21 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
if (resolvedStyle != null) {
TtmlRenderUtil.applyStylesToSpan(
text, start, end, resolvedStyle, parent, globalStyles, verticalType);
if (resolvedStyle.getShearPercentage() != TtmlStyle.UNSPECIFIED_SHEAR && TAG_P.equals(tag)) {
// Shear style should only be applied to P nodes
// https://www.w3.org/TR/2018/REC-ttml2-20181108/#style-attribute-shear
// The spec doesn't specify the coordinate system to use for block shear
// however the spec shows examples of how different values are expected to be rendered.
// See: https://www.w3.org/TR/2018/REC-ttml2-20181108/#style-attribute-shear
// https://www.w3.org/TR/2018/REC-ttml2-20181108/#style-attribute-fontShear
// This maps the shear percentage to shear angle in graphics coordinates
regionOutput.setShearDegrees((resolvedStyle.getShearPercentage() * -90) / 100);
if (TAG_P.equals(tag)) {
if (resolvedStyle.getShearPercentage() != TtmlStyle.UNSPECIFIED_SHEAR) {
// Shear style should only be applied to P nodes
// https://www.w3.org/TR/2018/REC-ttml2-20181108/#style-attribute-shear
// The spec doesn't specify the coordinate system to use for block shear
// however the spec shows examples of how different values are expected to be rendered.
// See: https://www.w3.org/TR/2018/REC-ttml2-20181108/#style-attribute-shear
// https://www.w3.org/TR/2018/REC-ttml2-20181108/#style-attribute-fontShear
// This maps the shear percentage to shear angle in graphics coordinates
regionOutput.setShearDegrees((resolvedStyle.getShearPercentage() * -90) / 100);
}
if (resolvedStyle.getTextAlign() != null) {
regionOutput.setTextAlignment(resolvedStyle.getTextAlign());
}
}
regionOutput.setTextAlignment(resolvedStyle.getTextAlign());
}
}

View file

@ -607,6 +607,14 @@ public final class TtmlDecoderTest {
Cue seventhCue = getOnlyCueAtTimeUs(subtitle, 70_000_000);
assertThat(seventhCue.text.toString()).isEqualTo("No textAlign property");
assertThat(seventhCue.textAlignment).isNull();
Cue eighthCue = getOnlyCueAtTimeUs(subtitle, 80_000_000);
assertThat(eighthCue.text.toString()).isEqualTo("Ancestor start alignment");
assertThat(eighthCue.textAlignment).isEqualTo(Layout.Alignment.ALIGN_NORMAL);
Cue ninthCue = getOnlyCueAtTimeUs(subtitle, 90_000_000);
assertThat(ninthCue.text.toString()).isEqualTo("Not a P node");
assertThat(ninthCue.textAlignment).isNull();
}
@Test

View file

@ -24,5 +24,11 @@
<div>
<p begin="70s" end="78s">No textAlign property</p>
</div>
<div>
<p begin="80s" end="88s" tts:textAlign="start"><span tts:fontSize="50%">Ancestor start</span> alignment</p>
</div>
<div>
<p begin="90s" end="98s"><span tts:textAlign="start">Not a P node</span></p>
</div>
</body>
</tt>