Commit 8719d41e by olly Committed by Oliver Woodman

Fix position reporting during ads when period has non-zero window offset.

Reporting incorrect positions for ad playbacks was causing IMA to
think the ad wasn't playing, when in fact it was.

Issue: #3180

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=167702032
parent d187d294
...@@ -430,7 +430,9 @@ public final class ImaAdsLoader implements Player.EventListener, VideoAdPlayer, ...@@ -430,7 +430,9 @@ public final class ImaAdsLoader implements Player.EventListener, VideoAdPlayer,
} else if (!playingAd) { } else if (!playingAd) {
return VideoProgressUpdate.VIDEO_TIME_NOT_READY; return VideoProgressUpdate.VIDEO_TIME_NOT_READY;
} else { } else {
return new VideoProgressUpdate(player.getCurrentPosition(), player.getDuration()); long adDuration = player.getDuration();
return adDuration == C.TIME_UNSET ? VideoProgressUpdate.VIDEO_TIME_NOT_READY
: new VideoProgressUpdate(player.getCurrentPosition(), adDuration);
} }
} }
......
...@@ -319,8 +319,7 @@ import java.util.concurrent.CopyOnWriteArraySet; ...@@ -319,8 +319,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
if (timeline.isEmpty() || pendingSeekAcks > 0) { if (timeline.isEmpty() || pendingSeekAcks > 0) {
return maskingWindowPositionMs; return maskingWindowPositionMs;
} else { } else {
timeline.getPeriod(playbackInfo.periodId.periodIndex, period); return playbackInfoPositionUsToWindowPositionMs(playbackInfo.positionUs);
return period.getPositionInWindowMs() + C.usToMs(playbackInfo.positionUs);
} }
} }
...@@ -330,8 +329,7 @@ import java.util.concurrent.CopyOnWriteArraySet; ...@@ -330,8 +329,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
if (timeline.isEmpty() || pendingSeekAcks > 0) { if (timeline.isEmpty() || pendingSeekAcks > 0) {
return maskingWindowPositionMs; return maskingWindowPositionMs;
} else { } else {
timeline.getPeriod(playbackInfo.periodId.periodIndex, period); return playbackInfoPositionUsToWindowPositionMs(playbackInfo.bufferedPositionUs);
return period.getPositionInWindowMs() + C.usToMs(playbackInfo.bufferedPositionUs);
} }
} }
...@@ -358,7 +356,7 @@ import java.util.concurrent.CopyOnWriteArraySet; ...@@ -358,7 +356,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
@Override @Override
public boolean isPlayingAd() { public boolean isPlayingAd() {
return pendingSeekAcks == 0 && playbackInfo.periodId.adGroupIndex != C.INDEX_UNSET; return pendingSeekAcks == 0 && playbackInfo.periodId.isAd();
} }
@Override @Override
...@@ -512,4 +510,13 @@ import java.util.concurrent.CopyOnWriteArraySet; ...@@ -512,4 +510,13 @@ import java.util.concurrent.CopyOnWriteArraySet;
} }
} }
private long playbackInfoPositionUsToWindowPositionMs(long positionUs) {
long positionMs = C.usToMs(positionUs);
if (!playbackInfo.periodId.isAd()) {
timeline.getPeriod(playbackInfo.periodId.periodIndex, period);
positionMs += period.getPositionInWindowMs();
}
return positionMs;
}
} }
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