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 @@
*/
package com.google.android.exoplayer2.source;
import static com.google.android.exoplayer2.C.usToMs;
import android.os.Handler;
import android.os.SystemClock;
import com.google.android.exoplayer2.C;
......@@ -174,10 +172,21 @@ public interface AdaptiveMediaSourceEventListener {
private final Handler handler;
private final AdaptiveMediaSourceEventListener listener;
private final long mediaTimeOffsetMs;
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.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) {
......@@ -193,8 +202,8 @@ public interface AdaptiveMediaSourceEventListener {
@Override
public void run() {
listener.onLoadStarted(dataSpec, dataType, trackType, trackFormat, trackSelectionReason,
trackSelectionData, usToMs(mediaStartTimeUs), usToMs(mediaEndTimeUs),
elapsedRealtimeMs);
trackSelectionData, adjustMediaTime(mediaStartTimeUs),
adjustMediaTime(mediaEndTimeUs), elapsedRealtimeMs);
}
});
}
......@@ -215,8 +224,8 @@ public interface AdaptiveMediaSourceEventListener {
@Override
public void run() {
listener.onLoadCompleted(dataSpec, dataType, trackType, trackFormat,
trackSelectionReason, trackSelectionData, usToMs(mediaStartTimeUs),
usToMs(mediaEndTimeUs), elapsedRealtimeMs, loadDurationMs, bytesLoaded);
trackSelectionReason, trackSelectionData, adjustMediaTime(mediaStartTimeUs),
adjustMediaTime(mediaEndTimeUs), elapsedRealtimeMs, loadDurationMs, bytesLoaded);
}
});
}
......@@ -237,8 +246,8 @@ public interface AdaptiveMediaSourceEventListener {
@Override
public void run() {
listener.onLoadCanceled(dataSpec, dataType, trackType, trackFormat,
trackSelectionReason, trackSelectionData, usToMs(mediaStartTimeUs),
usToMs(mediaEndTimeUs), elapsedRealtimeMs, loadDurationMs, bytesLoaded);
trackSelectionReason, trackSelectionData, adjustMediaTime(mediaStartTimeUs),
adjustMediaTime(mediaEndTimeUs), elapsedRealtimeMs, loadDurationMs, bytesLoaded);
}
});
}
......@@ -261,8 +270,9 @@ public interface AdaptiveMediaSourceEventListener {
@Override
public void run() {
listener.onLoadError(dataSpec, dataType, trackType, trackFormat, trackSelectionReason,
trackSelectionData, usToMs(mediaStartTimeUs), usToMs(mediaEndTimeUs),
elapsedRealtimeMs, loadDurationMs, bytesLoaded, error, wasCanceled);
trackSelectionData, adjustMediaTime(mediaStartTimeUs),
adjustMediaTime(mediaEndTimeUs), elapsedRealtimeMs, loadDurationMs, bytesLoaded,
error, wasCanceled);
}
});
}
......@@ -274,8 +284,8 @@ public interface AdaptiveMediaSourceEventListener {
handler.post(new Runnable() {
@Override
public void run() {
listener.onUpstreamDiscarded(trackType, usToMs(mediaStartTimeUs),
usToMs(mediaEndTimeUs));
listener.onUpstreamDiscarded(trackType, adjustMediaTime(mediaStartTimeUs),
adjustMediaTime(mediaEndTimeUs));
}
});
}
......@@ -289,12 +299,17 @@ public interface AdaptiveMediaSourceEventListener {
@Override
public void run() {
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 {
}
@Override
public MediaPeriod createPeriod(int index, Allocator allocator, long positionUs) {
DashMediaPeriod mediaPeriod = new DashMediaPeriod(firstPeriodId + index, manifest, index,
chunkSourceFactory, minLoadableRetryCount, eventDispatcher, elapsedRealtimeOffsetMs, loader,
allocator);
public MediaPeriod createPeriod(int periodIndex, Allocator allocator, long positionUs) {
EventDispatcher periodEventDispatcher = eventDispatcher.copyWithMediaTimeOffsetMs(
manifest.getPeriod(periodIndex).startMs);
DashMediaPeriod mediaPeriod = new DashMediaPeriod(firstPeriodId + periodIndex, manifest,
periodIndex, chunkSourceFactory, minLoadableRetryCount, periodEventDispatcher,
elapsedRealtimeOffsetMs, loader, allocator);
periodsById.put(mediaPeriod.id, mediaPeriod);
return mediaPeriod;
}
......
......@@ -41,12 +41,12 @@ public class Period {
/**
* @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.
*/
public Period(String id, long start, List<AdaptationSet> adaptationSets) {
public Period(String id, long startMs, List<AdaptationSet> adaptationSets) {
this.id = id;
this.startMs = start;
this.startMs = startMs;
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