Commit 7b3690a0 by olly Committed by Oliver Woodman

Fix onLoad* event media times for multi-period case

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=137932100
parent 488c2d82
...@@ -15,8 +15,6 @@ ...@@ -15,8 +15,6 @@
*/ */
package com.google.android.exoplayer2.source; package com.google.android.exoplayer2.source;
import static com.google.android.exoplayer2.C.usToMs;
import android.os.Handler; import android.os.Handler;
import android.os.SystemClock; import android.os.SystemClock;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
...@@ -174,10 +172,21 @@ public interface AdaptiveMediaSourceEventListener { ...@@ -174,10 +172,21 @@ public interface AdaptiveMediaSourceEventListener {
private final Handler handler; private final Handler handler;
private final AdaptiveMediaSourceEventListener listener; private final AdaptiveMediaSourceEventListener listener;
private final long mediaTimeOffsetMs;
public EventDispatcher(Handler handler, AdaptiveMediaSourceEventListener listener) { public EventDispatcher(Handler handler, AdaptiveMediaSourceEventListener listener) {
this(handler, listener, 0);
}
public EventDispatcher(Handler handler, AdaptiveMediaSourceEventListener listener,
long mediaTimeOffsetMs) {
this.handler = listener != null ? Assertions.checkNotNull(handler) : null; this.handler = listener != null ? Assertions.checkNotNull(handler) : null;
this.listener = listener; this.listener = listener;
this.mediaTimeOffsetMs = mediaTimeOffsetMs;
}
public EventDispatcher copyWithMediaTimeOffsetMs(long mediaTimeOffsetMs) {
return new EventDispatcher(handler, listener, mediaTimeOffsetMs);
} }
public void loadStarted(DataSpec dataSpec, int dataType, long elapsedRealtimeMs) { public void loadStarted(DataSpec dataSpec, int dataType, long elapsedRealtimeMs) {
...@@ -193,8 +202,8 @@ public interface AdaptiveMediaSourceEventListener { ...@@ -193,8 +202,8 @@ public interface AdaptiveMediaSourceEventListener {
@Override @Override
public void run() { public void run() {
listener.onLoadStarted(dataSpec, dataType, trackType, trackFormat, trackSelectionReason, listener.onLoadStarted(dataSpec, dataType, trackType, trackFormat, trackSelectionReason,
trackSelectionData, usToMs(mediaStartTimeUs), usToMs(mediaEndTimeUs), trackSelectionData, adjustMediaTime(mediaStartTimeUs),
elapsedRealtimeMs); adjustMediaTime(mediaEndTimeUs), elapsedRealtimeMs);
} }
}); });
} }
...@@ -215,8 +224,8 @@ public interface AdaptiveMediaSourceEventListener { ...@@ -215,8 +224,8 @@ public interface AdaptiveMediaSourceEventListener {
@Override @Override
public void run() { public void run() {
listener.onLoadCompleted(dataSpec, dataType, trackType, trackFormat, listener.onLoadCompleted(dataSpec, dataType, trackType, trackFormat,
trackSelectionReason, trackSelectionData, usToMs(mediaStartTimeUs), trackSelectionReason, trackSelectionData, adjustMediaTime(mediaStartTimeUs),
usToMs(mediaEndTimeUs), elapsedRealtimeMs, loadDurationMs, bytesLoaded); adjustMediaTime(mediaEndTimeUs), elapsedRealtimeMs, loadDurationMs, bytesLoaded);
} }
}); });
} }
...@@ -237,8 +246,8 @@ public interface AdaptiveMediaSourceEventListener { ...@@ -237,8 +246,8 @@ public interface AdaptiveMediaSourceEventListener {
@Override @Override
public void run() { public void run() {
listener.onLoadCanceled(dataSpec, dataType, trackType, trackFormat, listener.onLoadCanceled(dataSpec, dataType, trackType, trackFormat,
trackSelectionReason, trackSelectionData, usToMs(mediaStartTimeUs), trackSelectionReason, trackSelectionData, adjustMediaTime(mediaStartTimeUs),
usToMs(mediaEndTimeUs), elapsedRealtimeMs, loadDurationMs, bytesLoaded); adjustMediaTime(mediaEndTimeUs), elapsedRealtimeMs, loadDurationMs, bytesLoaded);
} }
}); });
} }
...@@ -261,8 +270,9 @@ public interface AdaptiveMediaSourceEventListener { ...@@ -261,8 +270,9 @@ public interface AdaptiveMediaSourceEventListener {
@Override @Override
public void run() { public void run() {
listener.onLoadError(dataSpec, dataType, trackType, trackFormat, trackSelectionReason, listener.onLoadError(dataSpec, dataType, trackType, trackFormat, trackSelectionReason,
trackSelectionData, usToMs(mediaStartTimeUs), usToMs(mediaEndTimeUs), trackSelectionData, adjustMediaTime(mediaStartTimeUs),
elapsedRealtimeMs, loadDurationMs, bytesLoaded, error, wasCanceled); adjustMediaTime(mediaEndTimeUs), elapsedRealtimeMs, loadDurationMs, bytesLoaded,
error, wasCanceled);
} }
}); });
} }
...@@ -274,8 +284,8 @@ public interface AdaptiveMediaSourceEventListener { ...@@ -274,8 +284,8 @@ public interface AdaptiveMediaSourceEventListener {
handler.post(new Runnable() { handler.post(new Runnable() {
@Override @Override
public void run() { public void run() {
listener.onUpstreamDiscarded(trackType, usToMs(mediaStartTimeUs), listener.onUpstreamDiscarded(trackType, adjustMediaTime(mediaStartTimeUs),
usToMs(mediaEndTimeUs)); adjustMediaTime(mediaEndTimeUs));
} }
}); });
} }
...@@ -289,12 +299,17 @@ public interface AdaptiveMediaSourceEventListener { ...@@ -289,12 +299,17 @@ public interface AdaptiveMediaSourceEventListener {
@Override @Override
public void run() { public void run() {
listener.onDownstreamFormatChanged(trackType, trackFormat, trackSelectionReason, listener.onDownstreamFormatChanged(trackType, trackFormat, trackSelectionReason,
trackSelectionData, usToMs(mediaTimeUs)); trackSelectionData, adjustMediaTime(mediaTimeUs));
} }
}); });
} }
} }
private long adjustMediaTime(long mediaTimeUs) {
long mediaTimeMs = C.usToMs(mediaTimeUs);
return mediaTimeMs == C.TIME_UNSET ? C.TIME_UNSET : mediaTimeOffsetMs + mediaTimeMs;
}
} }
} }
...@@ -170,10 +170,12 @@ public final class DashMediaSource implements MediaSource { ...@@ -170,10 +170,12 @@ public final class DashMediaSource implements MediaSource {
} }
@Override @Override
public MediaPeriod createPeriod(int index, Allocator allocator, long positionUs) { public MediaPeriod createPeriod(int periodIndex, Allocator allocator, long positionUs) {
DashMediaPeriod mediaPeriod = new DashMediaPeriod(firstPeriodId + index, manifest, index, EventDispatcher periodEventDispatcher = eventDispatcher.copyWithMediaTimeOffsetMs(
chunkSourceFactory, minLoadableRetryCount, eventDispatcher, elapsedRealtimeOffsetMs, loader, manifest.getPeriod(periodIndex).startMs);
allocator); DashMediaPeriod mediaPeriod = new DashMediaPeriod(firstPeriodId + periodIndex, manifest,
periodIndex, chunkSourceFactory, minLoadableRetryCount, periodEventDispatcher,
elapsedRealtimeOffsetMs, loader, allocator);
periodsById.put(mediaPeriod.id, mediaPeriod); periodsById.put(mediaPeriod.id, mediaPeriod);
return mediaPeriod; return mediaPeriod;
} }
......
...@@ -41,12 +41,12 @@ public class Period { ...@@ -41,12 +41,12 @@ public class Period {
/** /**
* @param id The period identifier. May be null. * @param id The period identifier. May be null.
* @param start The start time of the period in milliseconds. * @param startMs The start time of the period in milliseconds.
* @param adaptationSets The adaptation sets belonging to the period. * @param adaptationSets The adaptation sets belonging to the period.
*/ */
public Period(String id, long start, List<AdaptationSet> adaptationSets) { public Period(String id, long startMs, List<AdaptationSet> adaptationSets) {
this.id = id; this.id = id;
this.startMs = start; this.startMs = startMs;
this.adaptationSets = Collections.unmodifiableList(adaptationSets); this.adaptationSets = Collections.unmodifiableList(adaptationSets);
} }
......
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