Skip to content

Commit

Permalink
'trickPlayBack_adaptive_streaming_patch'
Browse files Browse the repository at this point in the history
  • Loading branch information
WeiChungChang committed Feb 19, 2017
1 parent 3f05ef6 commit 5f44118
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@

import android.os.Build;
import android.media.PlaybackParams;

import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.source.TrackGroup;

/**
* Implements the internal behavior of {@link ExoPlayerImpl}.
*/
Expand Down Expand Up @@ -168,6 +172,7 @@ public SourceInfo(Timeline timeline, Object manifest, PlaybackInfo playbackInfo,

private Timeline timeline;
private float speed;
private boolean pendingFormatSpeed;

public ExoPlayerImplInternal(Renderer[] renderers, TrackSelector trackSelector,
LoadControl loadControl, boolean playWhenReady, Handler eventHandler,
Expand All @@ -181,6 +186,9 @@ public ExoPlayerImplInternal(Renderer[] renderers, TrackSelector trackSelector,
this.playbackInfo = playbackInfo;
this.player = player;

this.pendingFormatSpeed = false;
this.speed = 1;

rendererCapabilities = new RendererCapabilities[renderers.length];
for (int i = 0; i < renderers.length; i++) {
renderers[i].setIndex(i);
Expand Down Expand Up @@ -1355,6 +1363,10 @@ private void setPlayingPeriodHolder(MediaPeriodHolder periodHolder) throws ExoPl
}

playingPeriodHolder = periodHolder;
if (pendingFormatSpeed) {
setFormatSpeed(speed);
pendingFormatSpeed = false;
}
eventHandler.obtainMessage(MSG_TRACKS_CHANGED, periodHolder.trackSelectorResult).sendToTarget();
enableRenderers(rendererWasEnabledFlags, enabledRendererCount);
}
Expand Down Expand Up @@ -1428,6 +1440,11 @@ public void setPlaybackSpeed(float speed) {
rendererMediaClock.setPlaybackSpeed(speed);
}
}
if (playingPeriodHolder != null) {
setFormatSpeed(speed);
} else {
pendingFormatSpeed = true;
}
}

private void maybeUpdatePlaybackSpeed(ExoPlayerMessage msg) {
Expand All @@ -1436,6 +1453,24 @@ private void maybeUpdatePlaybackSpeed(ExoPlayerMessage msg) {
}
}

private void setFormatSpeed(float speed) {
Assertions.checkNotNull(playingPeriodHolder);
TrackGroupArray rendererTrackGroups = playingPeriodHolder.mediaPeriod.getTrackGroups();
if (rendererTrackGroups.length > 0) {
for (int groupIndex = 0; groupIndex < rendererTrackGroups.length; groupIndex++) {
TrackGroup trackGroup = rendererTrackGroups.get(groupIndex);
if (trackGroup != null) {
for (int trackIndex = 0; trackIndex < trackGroup.length; trackIndex++) {
Format format = trackGroup.getFormat(trackIndex);
if (format != null) {
format.speed = speed;
}
}
}
}
}
}

/**
* Holds a {@link MediaPeriod} with information required to play it as part of a timeline.
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,11 @@ public final class Format implements Parcelable {

// Video.

/**
* For trickPlayBack case.
*/
public float speed;

public static Format createVideoContainerFormat(String id, String containerMimeType,
String sampleMimeType, String codecs, int bitrate, int width, int height,
float frameRate, List<byte[]> initializationData, @C.SelectionFlags int selectionFlags) {
Expand Down Expand Up @@ -377,6 +382,8 @@ public static Format createSampleFormat(String id, String sampleMimeType, String
: initializationData;
this.drmInitData = drmInitData;
this.metadata = metadata;

this.speed = 1;
}

@SuppressWarnings("ResourceType")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,7 @@ private int determineIdealSelectedIndex(long nowMs) {
for (int i = 0; i < length; i++) {
if (nowMs == Long.MIN_VALUE || !isBlacklisted(i, nowMs)) {
Format format = getFormat(i);
if (format.bitrate <= effectiveBitrate) {
if ((format.bitrate * format.speed) <= effectiveBitrate) {
return i;
} else {
lowestBitrateNonBlacklistedIndex = i;
Expand Down

0 comments on commit 5f44118

Please sign in to comment.