Commit 4502a464 by olly Committed by Oliver Woodman

Use ms for SeekWindow, for consistency with Timeline

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129868070
parent c5a2f9b0
...@@ -20,52 +20,57 @@ package com.google.android.exoplayer2.source; ...@@ -20,52 +20,57 @@ package com.google.android.exoplayer2.source;
*/ */
public final class SeekWindow { public final class SeekWindow {
public static final SeekWindow UNSEEKABLE = new SeekWindow(0); public static final SeekWindow UNSEEKABLE = createWindowFromZero(0);
/** /**
* The period index at the start of the window. * Creates a new {@link SeekWindow} containing times from zero up to {@code durationUs} in the
*/
public final int startPeriodIndex;
/**
* The time at the start of the window relative to the start of the period at
* {@link #startPeriodIndex}, in microseconds.
*/
public final long startTimeUs;
/**
* The period index at the end of the window.
*/
public final int endPeriodIndex;
/**
* The time at the end of the window relative to the start of the period at
* {@link #endPeriodIndex}, in microseconds.
*/
public final long endTimeUs;
/**
* Constructs a new {@link SeekWindow} containing times from zero up to {@code durationUs} in the
* first period. * first period.
* *
* @param durationUs The duration of the window, in microseconds. * @param durationUs The duration of the window, in microseconds.
*/ */
public SeekWindow(long durationUs) { public static SeekWindow createWindowFromZero(long durationUs) {
this(0, 0, 0, durationUs); return createWindow(0, 0, 0, durationUs);
} }
/** /**
* Constructs a new {@link SeekWindow} representing the specified time range. * Creates a new {@link SeekWindow} representing the specified time range.
* *
* @param startPeriodIndex The index of the period containing the start of the window. * @param startPeriodIndex The index of the period containing the start of the window.
* @param startTimeUs The start time of the window in microseconds, relative to the start of the * @param startTimeUs The start time of the window in microseconds, relative to the start of the
* specified start period. * specified start period.
* @param endPeriodIndex The index of the period containing the end of the window. * @param endPeriodIndex The index of the period containing the end of the window.
* @param endTimeUs The end time of the window in microseconds, relative to the start of the * @param endTimeUs = The end time of the window in microseconds, relative to the start of the
* specified end period. * specified end period.
*/ */
public SeekWindow(int startPeriodIndex, long startTimeUs, int endPeriodIndex, long endTimeUs) { public static SeekWindow createWindow(int startPeriodIndex, long startTimeUs,
int endPeriodIndex, long endTimeUs) {
return new SeekWindow(startPeriodIndex, startTimeUs / 1000, endPeriodIndex, endTimeUs / 1000);
}
/**
* The period index at the start of the window.
*/
public final int startPeriodIndex;
/**
* The time at the start of the window relative to the start of the period at
* {@link #startPeriodIndex}, in milliseconds.
*/
public final long startTimeMs;
/**
* The period index at the end of the window.
*/
public final int endPeriodIndex;
/**
* The time at the end of the window relative to the start of the period at
* {@link #endPeriodIndex}, in milliseconds.
*/
public final long endTimeMs;
private SeekWindow(int startPeriodIndex, long startTimeMs, int endPeriodIndex, long endTimeMs) {
this.startPeriodIndex = startPeriodIndex; this.startPeriodIndex = startPeriodIndex;
this.startTimeUs = startTimeUs; this.startTimeMs = startTimeMs;
this.endPeriodIndex = endPeriodIndex; this.endPeriodIndex = endPeriodIndex;
this.endTimeUs = endTimeUs; this.endTimeMs = endTimeMs;
} }
/** /**
...@@ -76,17 +81,17 @@ public final class SeekWindow { ...@@ -76,17 +81,17 @@ public final class SeekWindow {
* @return A new seek window that is offset by the specified number of periods. * @return A new seek window that is offset by the specified number of periods.
*/ */
public SeekWindow copyOffsetByPeriodCount(int periodCount) { public SeekWindow copyOffsetByPeriodCount(int periodCount) {
return new SeekWindow(startPeriodIndex + periodCount, startTimeUs, endPeriodIndex + periodCount, return new SeekWindow(startPeriodIndex + periodCount, startTimeMs, endPeriodIndex + periodCount,
endTimeUs); endTimeMs);
} }
@Override @Override
public int hashCode() { public int hashCode() {
int result = 17; int result = 17;
result = 31 * result + startPeriodIndex; result = 31 * result + startPeriodIndex;
result = 31 * result + (int) startTimeUs; result = 31 * result + (int) startTimeMs;
result = 31 * result + endPeriodIndex; result = 31 * result + endPeriodIndex;
result = 31 * result + (int) endTimeUs; result = 31 * result + (int) endTimeMs;
return result; return result;
} }
...@@ -100,15 +105,15 @@ public final class SeekWindow { ...@@ -100,15 +105,15 @@ public final class SeekWindow {
} }
SeekWindow other = (SeekWindow) obj; SeekWindow other = (SeekWindow) obj;
return other.startPeriodIndex == startPeriodIndex return other.startPeriodIndex == startPeriodIndex
&& other.startTimeUs == startTimeUs && other.startTimeMs == startTimeMs
&& other.endPeriodIndex == endPeriodIndex && other.endPeriodIndex == endPeriodIndex
&& other.endTimeUs == endTimeUs; && other.endTimeMs == endTimeMs;
} }
@Override @Override
public String toString() { public String toString() {
return "SeekWindow[" + startPeriodIndex + ", " + startTimeUs + ", " + endPeriodIndex + ", " return "SeekWindow[" + startPeriodIndex + ", " + startTimeMs + ", " + endPeriodIndex + ", "
+ endTimeUs + "]"; + endTimeMs + "]";
} }
} }
...@@ -64,7 +64,8 @@ public final class SinglePeriodTimeline implements Timeline { ...@@ -64,7 +64,8 @@ public final class SinglePeriodTimeline implements Timeline {
* @return A new, seekable, final timeline with one period. * @return A new, seekable, final timeline with one period.
*/ */
public static Timeline createSeekableFinalTimeline(Object id, long durationUs) { public static Timeline createSeekableFinalTimeline(Object id, long durationUs) {
return new SinglePeriodTimeline(id, true, durationUs / 1000, new SeekWindow(durationUs)); return new SinglePeriodTimeline(id, true, durationUs / 1000,
SeekWindow.createWindowFromZero(durationUs));
} }
private final Object id; private final Object id;
......
...@@ -61,10 +61,10 @@ public final class DashMediaSource implements MediaSource { ...@@ -61,10 +61,10 @@ public final class DashMediaSource implements MediaSource {
*/ */
private static final int NOTIFY_MANIFEST_INTERVAL_MS = 5000; private static final int NOTIFY_MANIFEST_INTERVAL_MS = 5000;
/** /**
* The offset in microseconds subtracted from the live edge position when calculating the default * The offset in milliseconds subtracted from the live edge position when calculating the default
* position returned by {@link #getDefaultStartPosition(int)}. * position returned by {@link #getDefaultStartPosition(int)}.
*/ */
private static final long LIVE_EDGE_OFFSET_US = 30000000; private static final long LIVE_EDGE_OFFSET_MS = 30000;
private static final String TAG = "DashMediaSource"; private static final String TAG = "DashMediaSource";
...@@ -165,14 +165,14 @@ public final class DashMediaSource implements MediaSource { ...@@ -165,14 +165,14 @@ public final class DashMediaSource implements MediaSource {
if (index == 0 && manifest.dynamic) { if (index == 0 && manifest.dynamic) {
// The stream is live, so return a position a position offset from the live edge. // The stream is live, so return a position a position offset from the live edge.
int periodIndex = seekWindow.endPeriodIndex; int periodIndex = seekWindow.endPeriodIndex;
long positionUs = seekWindow.endTimeUs - LIVE_EDGE_OFFSET_US; long positionMs = seekWindow.endTimeMs - LIVE_EDGE_OFFSET_MS;
while (positionUs < 0 && periodIndex > seekWindow.startPeriodIndex) { while (positionMs < 0 && periodIndex > seekWindow.startPeriodIndex) {
periodIndex--; periodIndex--;
positionUs += manifest.getPeriodDurationUs(periodIndex); positionMs += manifest.getPeriodDurationMs(periodIndex);
} }
positionUs = Math.max(positionUs, positionMs = Math.max(positionMs,
periodIndex == seekWindow.startPeriodIndex ? seekWindow.startTimeUs : 0); periodIndex == seekWindow.startPeriodIndex ? seekWindow.startTimeMs : 0);
return new Position(periodIndex, positionUs); return new Position(periodIndex, positionMs * 1000);
} }
return new Position(index, 0); return new Position(index, 0);
} }
...@@ -396,7 +396,7 @@ public final class DashMediaSource implements MediaSource { ...@@ -396,7 +396,7 @@ public final class DashMediaSource implements MediaSource {
currentStartTimeUs = firstPeriodSeekInfo.availableStartTimeUs; currentStartTimeUs = firstPeriodSeekInfo.availableStartTimeUs;
currentEndTimeUs = lastPeriodSeekInfo.availableEndTimeUs; currentEndTimeUs = lastPeriodSeekInfo.availableEndTimeUs;
} }
seekWindow = new SeekWindow(0, currentStartTimeUs, lastPeriodIndex, currentEndTimeUs); seekWindow = SeekWindow.createWindow(0, currentStartTimeUs, lastPeriodIndex, currentEndTimeUs);
DashMediaPeriod[] mediaPeriods = DashMediaPeriod[] mediaPeriods =
periods.toArray(new DashMediaPeriod[manifest.getPeriodCount()]); periods.toArray(new DashMediaPeriod[manifest.getPeriodCount()]);
......
...@@ -48,10 +48,10 @@ public final class SsMediaSource implements MediaSource, ...@@ -48,10 +48,10 @@ public final class SsMediaSource implements MediaSource,
*/ */
public static final int DEFAULT_MIN_LOADABLE_RETRY_COUNT = 3; public static final int DEFAULT_MIN_LOADABLE_RETRY_COUNT = 3;
/** /**
* The offset in microseconds subtracted from the live edge position when calculating the default * The offset in milliseconds subtracted from the live edge position when calculating the default
* position returned by {@link #getDefaultStartPosition(int)}. * position returned by {@link #getDefaultStartPosition(int)}.
*/ */
private static final long LIVE_EDGE_OFFSET_US = 30000000; private static final long LIVE_EDGE_OFFSET_MS = 30000;
private static final int MINIMUM_MANIFEST_REFRESH_PERIOD_MS = 5000; private static final int MINIMUM_MANIFEST_REFRESH_PERIOD_MS = 5000;
...@@ -114,8 +114,8 @@ public final class SsMediaSource implements MediaSource, ...@@ -114,8 +114,8 @@ public final class SsMediaSource implements MediaSource,
return null; return null;
} }
if (manifest.isLive) { if (manifest.isLive) {
long startPositionUs = Math.max(seekWindow.startTimeUs, long startPositionUs = Math.max(seekWindow.startTimeMs,
seekWindow.endTimeUs - LIVE_EDGE_OFFSET_US); seekWindow.endTimeMs - LIVE_EDGE_OFFSET_MS) * 1000;
return new Position(0, startPositionUs); return new Position(0, startPositionUs);
} }
return Position.DEFAULT; return Position.DEFAULT;
...@@ -172,7 +172,7 @@ public final class SsMediaSource implements MediaSource, ...@@ -172,7 +172,7 @@ public final class SsMediaSource implements MediaSource,
timeline = SinglePeriodTimeline.createNonFinalTimeline(this); timeline = SinglePeriodTimeline.createNonFinalTimeline(this);
} else { } else {
timeline = SinglePeriodTimeline.createNonFinalTimeline(this, timeline = SinglePeriodTimeline.createNonFinalTimeline(this,
new SeekWindow(0, startTimeUs, 0, startTimeUs + manifest.dvrWindowLengthUs)); SeekWindow.createWindow(0, startTimeUs, 0, startTimeUs + manifest.dvrWindowLengthUs));
} }
} else if (manifest.durationUs == C.UNSET_TIME_US) { } else if (manifest.durationUs == C.UNSET_TIME_US) {
timeline = SinglePeriodTimeline.createUnseekableFinalTimeline(this, C.UNSET_TIME_US); timeline = SinglePeriodTimeline.createUnseekableFinalTimeline(this, C.UNSET_TIME_US);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment