package com.google.android.exoplayer.text; /* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import java.util.List; /** * A subtitle that wraps another subtitle, making it playable by adjusting it to be correctly * aligned with the playback timebase. */ /* package */ final class PlayableSubtitle implements Subtitle { /** * The start time of the subtitle. * <p> * May be less than {@code getEventTime(0)}, since a subtitle may begin prior to the time of the * first event. */ public final long startTimeUs; private final Subtitle subtitle; private final long offsetUs; /** * @param subtitle The subtitle to wrap. * @param isRelative True if the wrapped subtitle's timestamps are relative to the start time. * False if they are absolute. * @param startTimeUs The start time of the subtitle. * @param offsetUs An offset to add to the subtitle timestamps. */ public PlayableSubtitle(Subtitle subtitle, boolean isRelative, long startTimeUs, long offsetUs) { this.subtitle = subtitle; this.startTimeUs = startTimeUs; this.offsetUs = (isRelative ? startTimeUs : 0) + offsetUs; } @Override public int getEventTimeCount() { return subtitle.getEventTimeCount(); } @Override public long getEventTime(int index) { return subtitle.getEventTime(index) + offsetUs; } @Override public long getLastEventTime() { return subtitle.getLastEventTime() + offsetUs; } @Override public int getNextEventTimeIndex(long timeUs) { return subtitle.getNextEventTimeIndex(timeUs - offsetUs); } @Override public List<Cue> getCues(long timeUs) { return subtitle.getCues(timeUs - offsetUs); } }