Commit d9ea8f71 by andrewlewis Committed by Oliver Woodman

Allow disabling the initial discontinuity on ClippingMediaSource

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=159227077
parent 56205893
......@@ -181,7 +181,7 @@ public final class ImaAdsMediaSource implements MediaSource {
long startUs = timeline.getContentStartTimeUs(index);
long endUs = timeline.getContentEndTimeUs(index);
MediaPeriod contentMediaPeriod = contentMediaSource.createPeriod(0, allocator);
ClippingMediaPeriod clippingPeriod = new ClippingMediaPeriod(contentMediaPeriod);
ClippingMediaPeriod clippingPeriod = new ClippingMediaPeriod(contentMediaPeriod, true);
clippingPeriod.setClipping(startUs, endUs == C.TIME_UNSET ? C.TIME_END_OF_SOURCE : endUs);
mediaSourceByMediaPeriod.put(contentMediaPeriod, contentMediaSource);
return clippingPeriod;
......
......@@ -47,19 +47,6 @@ public final class ClippingMediaPeriod implements MediaPeriod, MediaPeriod.Callb
* <p>
* The clipping start/end positions must be specified by calling {@link #setClipping(long, long)}
* on the playback thread before preparation completes.
*
* @param mediaPeriod The media period to clip.
*/
public ClippingMediaPeriod(MediaPeriod mediaPeriod) {
this(mediaPeriod, true);
}
/**
* Creates a new clipping media period that provides a clipped view of the specified
* {@link MediaPeriod}'s sample streams.
* <p>
* The clipping start/end positions must be specified by calling {@link #setClipping(long, long)}
* on the playback thread before preparation completes.
* <p>
* If the start point is guaranteed to be a key frame, pass {@code false} to {@code
* enableInitialPositionDiscontinuity} to suppress an initial discontinuity when the period is
......
......@@ -34,6 +34,7 @@ public final class ClippingMediaSource implements MediaSource, MediaSource.Liste
private final MediaSource mediaSource;
private final long startUs;
private final long endUs;
private final boolean enableInitialDiscontinuity;
private final ArrayList<ClippingMediaPeriod> mediaPeriods;
private MediaSource.Listener sourceListener;
......@@ -50,10 +51,31 @@ public final class ClippingMediaSource implements MediaSource, MediaSource.Liste
* from the specified start point up to the end of the source.
*/
public ClippingMediaSource(MediaSource mediaSource, long startPositionUs, long endPositionUs) {
this(mediaSource, startPositionUs, endPositionUs, true);
}
/**
* Creates a new clipping source that wraps the specified source.
* <p>
* If the start point is guaranteed to be a key frame, pass {@code false} to
* {@code enableInitialPositionDiscontinuity} to suppress an initial discontinuity when a period
* is first read from.
*
* @param mediaSource The single-period, non-dynamic source to wrap.
* @param startPositionUs The start position within {@code mediaSource}'s timeline at which to
* start providing samples, in microseconds.
* @param endPositionUs The end position within {@code mediaSource}'s timeline at which to stop
* providing samples, in microseconds. Specify {@link C#TIME_END_OF_SOURCE} to provide samples
* from the specified start point up to the end of the source.
* @param enableInitialDiscontinuity Whether the initial discontinuity should be enabled.
*/
public ClippingMediaSource(MediaSource mediaSource, long startPositionUs, long endPositionUs,
boolean enableInitialDiscontinuity) {
Assertions.checkArgument(startPositionUs >= 0);
this.mediaSource = Assertions.checkNotNull(mediaSource);
startUs = startPositionUs;
endUs = endPositionUs;
this.enableInitialDiscontinuity = enableInitialDiscontinuity;
mediaPeriods = new ArrayList<>();
}
......@@ -70,8 +92,8 @@ public final class ClippingMediaSource implements MediaSource, MediaSource.Liste
@Override
public MediaPeriod createPeriod(int index, Allocator allocator) {
ClippingMediaPeriod mediaPeriod =
new ClippingMediaPeriod(mediaSource.createPeriod(index, allocator));
ClippingMediaPeriod mediaPeriod = new ClippingMediaPeriod(
mediaSource.createPeriod(index, allocator), enableInitialDiscontinuity);
mediaPeriods.add(mediaPeriod);
mediaPeriod.setClipping(clippingTimeline.startUs, clippingTimeline.endUs);
return mediaPeriod;
......
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