Skip to content

Commit

Permalink
Automated g4 rollback of changelist 192621199.
Browse files Browse the repository at this point in the history
*** Reason for rollback ***

Rollback only needed to cherry-pick into Photos release.

*** Original change description ***

Automated g4 rollback of changelist 190906020.

*** Reason for rollback ***

Breaks looping.

*** Original change description ***

Automated g4 rollback of changelist 190628272.

*** Reason for rollback ***

b/76391022 was caused by a timestamp correction in StabilizableSimpleExoPlayer which will be fixed with this CL.

*** Original change description ***

Automated g4 rollback of changelist 189570277.

*** Reason for rollback ***

causes b/76391022, motion still playback in Photos is broken

**...

***

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=192621719
  • Loading branch information
tonihei authored and ojw28 committed Apr 16, 2018
1 parent 692b7a6 commit 0802ecf
Show file tree
Hide file tree
Showing 4 changed files with 215 additions and 89 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -83,9 +83,12 @@ public MediaPeriodHolder(
mayRetainStreamFlags = new boolean[rendererCapabilities.length];
MediaPeriod mediaPeriod = mediaSource.createPeriod(info.id, allocator);
if (info.endPositionUs != C.TIME_END_OF_SOURCE) {
ClippingMediaPeriod clippingMediaPeriod = new ClippingMediaPeriod(mediaPeriod, true);
clippingMediaPeriod.setClipping(0, info.endPositionUs);
mediaPeriod = clippingMediaPeriod;
mediaPeriod =
new ClippingMediaPeriod(
mediaPeriod,
/* enableInitialDiscontinuity= */ true,
/* startUs= */ 0,
info.endPositionUs);
}
this.mediaPeriod = mediaPeriod;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import com.google.android.exoplayer2.trackselection.TrackSelection;
import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.MimeTypes;
import com.google.android.exoplayer2.util.Util;
import java.io.IOException;

/**
Expand All @@ -43,43 +44,44 @@ public final class ClippingMediaPeriod implements MediaPeriod, MediaPeriod.Callb
/* package */ long endUs;

/**
* 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
* Creates a new clipping media period that provides a clipped view of the specified {@link
* MediaPeriod}'s sample streams.
*
* <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
* first read from.
*
* @param mediaPeriod The media period to clip.
* @param enableInitialDiscontinuity Whether the initial discontinuity should be enabled.
* @param startUs The clipping start time, in microseconds.
* @param endUs The clipping end time, in microseconds, or {@link C#TIME_END_OF_SOURCE} to
* indicate the end of the period.
*/
public ClippingMediaPeriod(MediaPeriod mediaPeriod, boolean enableInitialDiscontinuity) {
public ClippingMediaPeriod(
MediaPeriod mediaPeriod, boolean enableInitialDiscontinuity, long startUs, long endUs) {
this.mediaPeriod = mediaPeriod;
sampleStreams = new ClippingSampleStream[0];
pendingInitialDiscontinuityPositionUs = enableInitialDiscontinuity ? 0 : C.TIME_UNSET;
startUs = C.TIME_UNSET;
endUs = C.TIME_UNSET;
pendingInitialDiscontinuityPositionUs = enableInitialDiscontinuity ? startUs : C.TIME_UNSET;
this.startUs = startUs;
this.endUs = endUs;
}

/**
* Sets the clipping start/end times for this period, in microseconds.
* Updates the clipping start/end times for this period, in microseconds.
*
* @param startUs The clipping start time, in microseconds.
* @param endUs The clipping end time, in microseconds, or {@link C#TIME_END_OF_SOURCE} to
* indicate the end of the period.
*/
public void setClipping(long startUs, long endUs) {
public void updateClipping(long startUs, long endUs) {
this.startUs = startUs;
this.endUs = endUs;
}

@Override
public void prepare(MediaPeriod.Callback callback, long positionUs) {
this.callback = callback;
mediaPeriod.prepare(this, startUs + positionUs);
mediaPeriod.prepare(this, positionUs);
}

@Override
Expand All @@ -101,13 +103,19 @@ public long selectTracks(TrackSelection[] selections, boolean[] mayRetainStreamF
sampleStreams[i] = (ClippingSampleStream) streams[i];
childStreams[i] = sampleStreams[i] != null ? sampleStreams[i].childStream : null;
}
long enablePositionUs = mediaPeriod.selectTracks(selections, mayRetainStreamFlags,
childStreams, streamResetFlags, positionUs + startUs) - startUs;
pendingInitialDiscontinuityPositionUs = isPendingInitialDiscontinuity() && positionUs == 0
&& shouldKeepInitialDiscontinuity(startUs, selections) ? enablePositionUs : C.TIME_UNSET;
Assertions.checkState(enablePositionUs == positionUs
|| (enablePositionUs >= 0
&& (endUs == C.TIME_END_OF_SOURCE || startUs + enablePositionUs <= endUs)));
long enablePositionUs =
mediaPeriod.selectTracks(
selections, mayRetainStreamFlags, childStreams, streamResetFlags, positionUs);
pendingInitialDiscontinuityPositionUs =
isPendingInitialDiscontinuity()
&& positionUs == startUs
&& shouldKeepInitialDiscontinuity(startUs, selections)
? enablePositionUs
: C.TIME_UNSET;
Assertions.checkState(
enablePositionUs == positionUs
|| (enablePositionUs >= startUs
&& (endUs == C.TIME_END_OF_SOURCE || enablePositionUs <= endUs)));
for (int i = 0; i < streams.length; i++) {
if (childStreams[i] == null) {
sampleStreams[i] = null;
Expand All @@ -121,12 +129,12 @@ public long selectTracks(TrackSelection[] selections, boolean[] mayRetainStreamF

@Override
public void discardBuffer(long positionUs, boolean toKeyframe) {
mediaPeriod.discardBuffer(positionUs + startUs, toKeyframe);
mediaPeriod.discardBuffer(positionUs, toKeyframe);
}

@Override
public void reevaluateBuffer(long positionUs) {
mediaPeriod.reevaluateBuffer(positionUs + startUs);
mediaPeriod.reevaluateBuffer(positionUs);
}

@Override
Expand All @@ -144,7 +152,7 @@ public long readDiscontinuity() {
}
Assertions.checkState(discontinuityUs >= startUs);
Assertions.checkState(endUs == C.TIME_END_OF_SOURCE || discontinuityUs <= endUs);
return discontinuityUs - startUs;
return discontinuityUs;
}

@Override
Expand All @@ -154,7 +162,7 @@ public long getBufferedPositionUs() {
|| (endUs != C.TIME_END_OF_SOURCE && bufferedPositionUs >= endUs)) {
return C.TIME_END_OF_SOURCE;
}
return Math.max(0, bufferedPositionUs - startUs);
return bufferedPositionUs;
}

@Override
Expand All @@ -165,23 +173,21 @@ public long seekToUs(long positionUs) {
sampleStream.clearSentEos();
}
}
long offsetPositionUs = positionUs + startUs;
long seekUs = mediaPeriod.seekToUs(offsetPositionUs);
long seekUs = mediaPeriod.seekToUs(positionUs);
Assertions.checkState(
seekUs == offsetPositionUs
seekUs == positionUs
|| (seekUs >= startUs && (endUs == C.TIME_END_OF_SOURCE || seekUs <= endUs)));
return seekUs - startUs;
return seekUs;
}

@Override
public long getAdjustedSeekPositionUs(long positionUs, SeekParameters seekParameters) {
if (positionUs == 0) {
if (positionUs == startUs) {
// Never adjust seeks to the start of the clipped view.
return 0;
return startUs;
}
long offsetPositionUs = positionUs + startUs;
SeekParameters clippedSeekParameters = clipSeekParameters(offsetPositionUs, seekParameters);
return mediaPeriod.getAdjustedSeekPositionUs(offsetPositionUs, clippedSeekParameters) - startUs;
SeekParameters clippedSeekParameters = clipSeekParameters(positionUs, seekParameters);
return mediaPeriod.getAdjustedSeekPositionUs(positionUs, clippedSeekParameters);
}

@Override
Expand All @@ -191,19 +197,18 @@ public long getNextLoadPositionUs() {
|| (endUs != C.TIME_END_OF_SOURCE && nextLoadPositionUs >= endUs)) {
return C.TIME_END_OF_SOURCE;
}
return nextLoadPositionUs - startUs;
return nextLoadPositionUs;
}

@Override
public boolean continueLoading(long positionUs) {
return mediaPeriod.continueLoading(positionUs + startUs);
return mediaPeriod.continueLoading(positionUs);
}

// MediaPeriod.Callback implementation.

@Override
public void onPrepared(MediaPeriod mediaPeriod) {
Assertions.checkState(startUs != C.TIME_UNSET && endUs != C.TIME_UNSET);
callback.onPrepared(this);
}

Expand All @@ -216,17 +221,20 @@ public void onContinueLoadingRequested(MediaPeriod source) {
return pendingInitialDiscontinuityPositionUs != C.TIME_UNSET;
}

private SeekParameters clipSeekParameters(long offsetPositionUs, SeekParameters seekParameters) {
long toleranceBeforeMs = Math.min(offsetPositionUs - startUs, seekParameters.toleranceBeforeUs);
long toleranceAfterMs =
endUs == C.TIME_END_OF_SOURCE
? seekParameters.toleranceAfterUs
: Math.min(endUs - offsetPositionUs, seekParameters.toleranceAfterUs);
if (toleranceBeforeMs == seekParameters.toleranceBeforeUs
&& toleranceAfterMs == seekParameters.toleranceAfterUs) {
private SeekParameters clipSeekParameters(long positionUs, SeekParameters seekParameters) {
long toleranceBeforeUs =
Util.constrainValue(
seekParameters.toleranceBeforeUs, /* min= */ 0, /* max= */ positionUs - startUs);
long toleranceAfterUs =
Util.constrainValue(
seekParameters.toleranceAfterUs,
/* min= */ 0,
/* max= */ endUs == C.TIME_END_OF_SOURCE ? Long.MAX_VALUE : endUs - positionUs);
if (toleranceBeforeUs == seekParameters.toleranceBeforeUs
&& toleranceAfterUs == seekParameters.toleranceAfterUs) {
return seekParameters;
} else {
return new SeekParameters(toleranceBeforeMs, toleranceAfterMs);
return new SeekParameters(toleranceBeforeUs, toleranceAfterUs);
}
}

Expand Down Expand Up @@ -310,9 +318,6 @@ && getBufferedPositionUs() == C.TIME_END_OF_SOURCE))) {
sentEos = true;
return C.RESULT_BUFFER_READ;
}
if (result == C.RESULT_BUFFER_READ && !buffer.isEndOfStream()) {
buffer.timeUs -= startUs;
}
return result;
}

Expand All @@ -321,7 +326,7 @@ public int skipData(long positionUs) {
if (isPendingInitialDiscontinuity()) {
return C.RESULT_NOTHING_READ;
}
return childStream.skipData(startUs + positionUs);
return childStream.skipData(positionUs);
}

}
Expand Down
Loading

0 comments on commit 0802ecf

Please sign in to comment.