aboutsummaryrefslogtreecommitdiff
path: root/src/com/android/tv/tuner/exoplayer/Cea708TextTrackRenderer.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/tv/tuner/exoplayer/Cea708TextTrackRenderer.java')
-rw-r--r--src/com/android/tv/tuner/exoplayer/Cea708TextTrackRenderer.java29
1 files changed, 24 insertions, 5 deletions
diff --git a/src/com/android/tv/tuner/exoplayer/Cea708TextTrackRenderer.java b/src/com/android/tv/tuner/exoplayer/Cea708TextTrackRenderer.java
index 5e839223..5f536708 100644
--- a/src/com/android/tv/tuner/exoplayer/Cea708TextTrackRenderer.java
+++ b/src/com/android/tv/tuner/exoplayer/Cea708TextTrackRenderer.java
@@ -40,6 +40,7 @@ public class Cea708TextTrackRenderer extends TrackRenderer implements
private static final boolean DEBUG = false;
public static final int MSG_SERVICE_NUMBER = 1;
+ public static final int MSG_ENABLE_CLOSED_CAPTION = 2;
// According to CEA-708B, the maximum value of closed caption bandwidth is 9600bps.
private static final int DEFAULT_INPUT_BUFFER_SIZE = 9600 / 8;
@@ -52,11 +53,13 @@ public class Cea708TextTrackRenderer extends TrackRenderer implements
private long mCurrentPositionUs;
private long mPresentationTimeUs;
private int mTrackIndex;
+ private boolean mRenderingDisabled;
private Cea708Parser mCea708Parser;
private CcListener mCcListener;
public interface CcListener {
void emitEvent(CaptionEvent captionEvent);
+ void clearCaption();
void discoverServiceNumber(int serviceNumber);
}
@@ -204,7 +207,7 @@ public class Cea708TextTrackRenderer extends TrackRenderer implements
}
case SampleSource.SAMPLE_READ: {
mSampleHolder.data.flip();
- if (mCea708Parser != null) {
+ if (mCea708Parser != null && !mRenderingDisabled) {
mCea708Parser.parseClosedCaption(mSampleHolder.data, mSampleHolder.timeUs);
}
return true;
@@ -274,10 +277,26 @@ public class Cea708TextTrackRenderer extends TrackRenderer implements
@Override
public void handleMessage(int messageType, Object message) throws ExoPlaybackException {
- if (messageType == MSG_SERVICE_NUMBER) {
- setServiceNumber((int) message);
- } else {
- super.handleMessage(messageType, message);
+ switch (messageType) {
+ case MSG_SERVICE_NUMBER:
+ setServiceNumber((int) message);
+ break;
+ case MSG_ENABLE_CLOSED_CAPTION:
+ boolean renderingDisabled = (Boolean) message == false;
+ if (mRenderingDisabled != renderingDisabled) {
+ mRenderingDisabled = renderingDisabled;
+ if (mRenderingDisabled) {
+ if (mCea708Parser != null) {
+ mCea708Parser.clear();
+ }
+ if (mCcListener != null) {
+ mCcListener.clearCaption();
+ }
+ }
+ }
+ break;
+ default:
+ super.handleMessage(messageType, message);
}
}
}