From 16f57e3919c8f3a5b8fbc7913322c220ef377165 Mon Sep 17 00:00:00 2001 From: olly Date: Tue, 15 Mar 2016 02:56:39 -0700 Subject: [PATCH] Ignore repeated control characters in EIA608 subtitles. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=117220536 --- .../exoplayer/text/eia608/ClosedCaptionCtrl.java | 4 ++++ .../text/eia608/Eia608TrackRenderer.java | 15 +++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/library/src/main/java/com/google/android/exoplayer/text/eia608/ClosedCaptionCtrl.java b/library/src/main/java/com/google/android/exoplayer/text/eia608/ClosedCaptionCtrl.java index 0fd1b1fcb6..e1f2bab41e 100644 --- a/library/src/main/java/com/google/android/exoplayer/text/eia608/ClosedCaptionCtrl.java +++ b/library/src/main/java/com/google/android/exoplayer/text/eia608/ClosedCaptionCtrl.java @@ -94,4 +94,8 @@ package com.google.android.exoplayer.text.eia608; return (cc1 >= 0x10 && cc1 <= 0x1F) && (cc2 >= 0x40 && cc2 <= 0x7F); } + public boolean isRepeatable() { + return cc1 >= 0x10 && cc1 <= 0x1F; + } + } diff --git a/library/src/main/java/com/google/android/exoplayer/text/eia608/Eia608TrackRenderer.java b/library/src/main/java/com/google/android/exoplayer/text/eia608/Eia608TrackRenderer.java index 7b384581d8..d4facb4d91 100644 --- a/library/src/main/java/com/google/android/exoplayer/text/eia608/Eia608TrackRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer/text/eia608/Eia608TrackRenderer.java @@ -66,6 +66,7 @@ public final class Eia608TrackRenderer extends SampleSourceTrackRenderer impleme private int captionRowCount; private String caption; private String lastRenderedCaption; + private ClosedCaptionCtrl repeatableControl; /** * @param textRenderer The text renderer. @@ -94,6 +95,7 @@ public final class Eia608TrackRenderer extends SampleSourceTrackRenderer impleme @Override protected void onReset(long positionUs) { inputStreamEnded = false; + repeatableControl = null; pendingCaptionLists.clear(); clearPendingSample(); captionRowCount = DEFAULT_CAPTIONS_ROW_COUNT; @@ -193,10 +195,20 @@ public final class Eia608TrackRenderer extends SampleSourceTrackRenderer impleme return; } + boolean isRepeatableControl = false; for (int i = 0; i < captionBufferSize; i++) { ClosedCaption caption = captionList.captions[i]; if (caption.type == ClosedCaption.TYPE_CTRL) { ClosedCaptionCtrl captionCtrl = (ClosedCaptionCtrl) caption; + isRepeatableControl = captionBufferSize == 1 && captionCtrl.isRepeatable(); + if (isRepeatableControl && repeatableControl != null + && repeatableControl.cc1 == captionCtrl.cc1 + && repeatableControl.cc2 == captionCtrl.cc2) { + repeatableControl = null; + continue; + } else if (isRepeatableControl) { + repeatableControl = captionCtrl; + } if (captionCtrl.isMiscCode()) { handleMiscCode(captionCtrl); } else if (captionCtrl.isPreambleAddressCode()) { @@ -207,6 +219,9 @@ public final class Eia608TrackRenderer extends SampleSourceTrackRenderer impleme } } + if (!isRepeatableControl) { + repeatableControl = null; + } if (captionMode == CC_MODE_ROLL_UP || captionMode == CC_MODE_PAINT_ON) { caption = getDisplayCaption(); }