From d10c811bd8a3e1a280d09b57321c5389649db9e2 Mon Sep 17 00:00:00 2001 From: olly Date: Wed, 10 Aug 2016 08:44:14 -0700 Subject: [PATCH] Fix Tx3g decoding Issue #1712 ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=129869936 --- .../android/exoplayer2/text/tx3g/Tx3gDecoder.java | 11 ++++++++++- .../android/exoplayer2/text/tx3g/Tx3gSubtitle.java | 6 ++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/library/src/main/java/com/google/android/exoplayer2/text/tx3g/Tx3gDecoder.java b/library/src/main/java/com/google/android/exoplayer2/text/tx3g/Tx3gDecoder.java index f3385245dc..7484a5244d 100644 --- a/library/src/main/java/com/google/android/exoplayer2/text/tx3g/Tx3gDecoder.java +++ b/library/src/main/java/com/google/android/exoplayer2/text/tx3g/Tx3gDecoder.java @@ -18,6 +18,7 @@ package com.google.android.exoplayer2.text.tx3g; import com.google.android.exoplayer2.text.Cue; import com.google.android.exoplayer2.text.SimpleSubtitleDecoder; import com.google.android.exoplayer2.text.Subtitle; +import com.google.android.exoplayer2.util.ParsableByteArray; /** * A {@link SimpleSubtitleDecoder} for tx3g. @@ -26,13 +27,21 @@ import com.google.android.exoplayer2.text.Subtitle; */ public final class Tx3gDecoder extends SimpleSubtitleDecoder { + private final ParsableByteArray parsableByteArray; + public Tx3gDecoder() { super("Tx3gDecoder"); + parsableByteArray = new ParsableByteArray(); } @Override protected Subtitle decode(byte[] bytes, int length) { - String cueText = new String(bytes, 0, length); + parsableByteArray.reset(bytes, length); + int textLength = parsableByteArray.readUnsignedShort(); + if (textLength == 0) { + return Tx3gSubtitle.EMPTY; + } + String cueText = parsableByteArray.readString(textLength); return new Tx3gSubtitle(new Cue(cueText)); } diff --git a/library/src/main/java/com/google/android/exoplayer2/text/tx3g/Tx3gSubtitle.java b/library/src/main/java/com/google/android/exoplayer2/text/tx3g/Tx3gSubtitle.java index af0240f000..7ff4e74ad7 100644 --- a/library/src/main/java/com/google/android/exoplayer2/text/tx3g/Tx3gSubtitle.java +++ b/library/src/main/java/com/google/android/exoplayer2/text/tx3g/Tx3gSubtitle.java @@ -26,12 +26,18 @@ import java.util.List; */ /* package */ final class Tx3gSubtitle implements Subtitle { + public static final Tx3gSubtitle EMPTY = new Tx3gSubtitle(); + private final List cues; public Tx3gSubtitle(Cue cue) { this.cues = Collections.singletonList(cue); } + private Tx3gSubtitle() { + this.cues = Collections.emptyList(); + } + @Override public int getNextEventTimeIndex(long timeUs) { return timeUs < 0 ? 0 : -1;