Commit 665c9fc1 by olly Committed by Oliver Woodman

Fix DASH period duration reporting

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=129787235
parent cdb706ba
...@@ -68,7 +68,7 @@ import java.util.List; ...@@ -68,7 +68,7 @@ import java.util.List;
this.eventDispatcher = eventDispatcher; this.eventDispatcher = eventDispatcher;
this.elapsedRealtimeOffset = elapsedRealtimeOffset; this.elapsedRealtimeOffset = elapsedRealtimeOffset;
this.manifestLoaderErrorThrower = manifestLoaderErrorThrower; this.manifestLoaderErrorThrower = manifestLoaderErrorThrower;
durationUs = manifest.dynamic ? C.UNSET_TIME_US : manifest.getPeriodDuration(index) * 1000; durationUs = manifest.getPeriodDurationUs(index);
period = manifest.getPeriod(index); period = manifest.getPeriod(index);
trackGroups = buildTrackGroups(period); trackGroups = buildTrackGroups(period);
} }
...@@ -76,7 +76,7 @@ import java.util.List; ...@@ -76,7 +76,7 @@ import java.util.List;
public void updateManifest(DashManifest manifest, int index) { public void updateManifest(DashManifest manifest, int index) {
this.manifest = manifest; this.manifest = manifest;
this.index = index; this.index = index;
durationUs = manifest.dynamic ? C.UNSET_TIME_US : manifest.getPeriodDuration(index) * 1000; durationUs = manifest.getPeriodDurationUs(index);
period = manifest.getPeriod(index); period = manifest.getPeriod(index);
if (sampleStreams != null) { if (sampleStreams != null) {
for (ChunkSampleStream<DashChunkSource> sampleStream : sampleStreams) { for (ChunkSampleStream<DashChunkSource> sampleStream : sampleStreams) {
......
...@@ -168,7 +168,7 @@ public final class DashMediaSource implements MediaSource { ...@@ -168,7 +168,7 @@ public final class DashMediaSource implements MediaSource {
long positionUs = seekWindow.endTimeUs - LIVE_EDGE_OFFSET_US; long positionUs = seekWindow.endTimeUs - LIVE_EDGE_OFFSET_US;
while (positionUs < 0 && periodIndex > seekWindow.startPeriodIndex) { while (positionUs < 0 && periodIndex > seekWindow.startPeriodIndex) {
periodIndex--; periodIndex--;
positionUs += manifest.getPeriodDuration(periodIndex) * 1000; positionUs += manifest.getPeriodDurationUs(periodIndex);
} }
positionUs = Math.max(positionUs, positionUs = Math.max(positionUs,
periodIndex == seekWindow.startPeriodIndex ? seekWindow.startTimeUs : 0); periodIndex == seekWindow.startPeriodIndex ? seekWindow.startTimeUs : 0);
...@@ -374,9 +374,9 @@ public final class DashMediaSource implements MediaSource { ...@@ -374,9 +374,9 @@ public final class DashMediaSource implements MediaSource {
int periodCount = manifest.getPeriodCount(); int periodCount = manifest.getPeriodCount();
int lastPeriodIndex = periodCount - 1; int lastPeriodIndex = periodCount - 1;
PeriodSeekInfo firstPeriodSeekInfo = PeriodSeekInfo.createPeriodSeekInfo(manifest.getPeriod(0), PeriodSeekInfo firstPeriodSeekInfo = PeriodSeekInfo.createPeriodSeekInfo(manifest.getPeriod(0),
manifest.getPeriodDuration(0) * 1000); manifest.getPeriodDurationUs(0));
PeriodSeekInfo lastPeriodSeekInfo = PeriodSeekInfo.createPeriodSeekInfo( PeriodSeekInfo lastPeriodSeekInfo = PeriodSeekInfo.createPeriodSeekInfo(
manifest.getPeriod(lastPeriodIndex), manifest.getPeriodDuration(lastPeriodIndex) * 1000); manifest.getPeriod(lastPeriodIndex), manifest.getPeriodDurationUs(lastPeriodIndex));
long currentStartTimeUs; long currentStartTimeUs;
long currentEndTimeUs; long currentEndTimeUs;
if (manifest.dynamic && !lastPeriodSeekInfo.isIndexExplicit) { if (manifest.dynamic && !lastPeriodSeekInfo.isIndexExplicit) {
...@@ -505,7 +505,7 @@ public final class DashMediaSource implements MediaSource { ...@@ -505,7 +505,7 @@ public final class DashMediaSource implements MediaSource {
@Override @Override
public long getPeriodDuration(int index) { public long getPeriodDuration(int index) {
return manifest.getPeriodDuration(index); return manifest.getPeriodDurationMs(index);
} }
@Override @Override
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
package com.google.android.exoplayer2.source.dash; package com.google.android.exoplayer2.source.dash;
import android.os.SystemClock; import android.os.SystemClock;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.extractor.ChunkIndex; import com.google.android.exoplayer2.extractor.ChunkIndex;
import com.google.android.exoplayer2.extractor.Extractor; import com.google.android.exoplayer2.extractor.Extractor;
...@@ -105,7 +104,7 @@ public class DefaultDashChunkSource implements DashChunkSource { ...@@ -105,7 +104,7 @@ public class DefaultDashChunkSource implements DashChunkSource {
this.periodIndex = periodIndex; this.periodIndex = periodIndex;
this.elapsedRealtimeOffsetUs = elapsedRealtimeOffsetMs * 1000; this.elapsedRealtimeOffsetUs = elapsedRealtimeOffsetMs * 1000;
long periodDurationUs = getPeriodDurationUs(); long periodDurationUs = manifest.getPeriodDurationUs(periodIndex);
List<Representation> representations = getRepresentations(); List<Representation> representations = getRepresentations();
representationHolders = new RepresentationHolder[trackSelection.length()]; representationHolders = new RepresentationHolder[trackSelection.length()];
for (int i = 0; i < representationHolders.length; i++) { for (int i = 0; i < representationHolders.length; i++) {
...@@ -119,7 +118,7 @@ public class DefaultDashChunkSource implements DashChunkSource { ...@@ -119,7 +118,7 @@ public class DefaultDashChunkSource implements DashChunkSource {
try { try {
manifest = newManifest; manifest = newManifest;
periodIndex = newPeriodIndex; periodIndex = newPeriodIndex;
long periodDurationUs = getPeriodDurationUs(); long periodDurationUs = manifest.getPeriodDurationUs(periodIndex);
List<Representation> representations = getRepresentations(); List<Representation> representations = getRepresentations();
for (int i = 0; i < representationHolders.length; i++) { for (int i = 0; i < representationHolders.length; i++) {
Representation representation = representations.get(trackSelection.getIndexInTrackGroup(i)); Representation representation = representations.get(trackSelection.getIndexInTrackGroup(i));
...@@ -323,15 +322,6 @@ public class DefaultDashChunkSource implements DashChunkSource { ...@@ -323,15 +322,6 @@ public class DefaultDashChunkSource implements DashChunkSource {
} }
} }
private long getPeriodDurationUs() {
long durationMs = manifest.getPeriodDuration(periodIndex);
if (durationMs == -1) {
return C.UNSET_TIME_US;
} else {
return durationMs * 1000;
}
}
// Protected classes. // Protected classes.
protected static final class RepresentationHolder { protected static final class RepresentationHolder {
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
package com.google.android.exoplayer2.source.dash.manifest; package com.google.android.exoplayer2.source.dash.manifest;
import android.net.Uri; import android.net.Uri;
import com.google.android.exoplayer2.C;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
...@@ -64,10 +65,15 @@ public class DashManifest { ...@@ -64,10 +65,15 @@ public class DashManifest {
return periods.get(index); return periods.get(index);
} }
public final long getPeriodDuration(int index) { public final long getPeriodDurationMs(int index) {
return index == periods.size() - 1 return index == periods.size() - 1
? (duration == -1 ? -1 : duration - periods.get(index).startMs) ? (duration == -1 ? -1 : duration - periods.get(index).startMs)
: periods.get(index + 1).startMs - periods.get(index).startMs; : periods.get(index + 1).startMs - periods.get(index).startMs;
} }
public final long getPeriodDurationUs(int index) {
long durationMs = getPeriodDurationMs(index);
return durationMs == -1 ? C.UNSET_TIME_US : durationMs * 1000;
}
} }
...@@ -107,6 +107,7 @@ public final class TextRenderer extends BaseRenderer implements Callback { ...@@ -107,6 +107,7 @@ public final class TextRenderer extends BaseRenderer implements Callback {
protected void onStreamChanged(Format[] formats) throws ExoPlaybackException { protected void onStreamChanged(Format[] formats) throws ExoPlaybackException {
if (decoder != null) { if (decoder != null) {
decoder.release(); decoder.release();
nextInputBuffer = null;
} }
decoder = decoderFactory.createDecoder(formats[0]); decoder = decoderFactory.createDecoder(formats[0]);
} }
......
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