Commit c38e7b1a by tonihei Committed by Oliver Woodman

Simplify list of pending deferred media periods in ConcatenatingMediaSource.

This change also simplifies reporting the right media source events in a
future change.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=188718504
parent 78e69797
...@@ -61,7 +61,6 @@ public class ConcatenatingMediaSource extends CompositeMediaSource<MediaSourceHo ...@@ -61,7 +61,6 @@ public class ConcatenatingMediaSource extends CompositeMediaSource<MediaSourceHo
private final List<MediaSourceHolder> mediaSourceHolders; private final List<MediaSourceHolder> mediaSourceHolders;
private final MediaSourceHolder query; private final MediaSourceHolder query;
private final Map<MediaPeriod, MediaSourceHolder> mediaSourceByMediaPeriod; private final Map<MediaPeriod, MediaSourceHolder> mediaSourceByMediaPeriod;
private final List<DeferredMediaPeriod> deferredMediaPeriods;
private final List<EventDispatcher> pendingOnCompletionActions; private final List<EventDispatcher> pendingOnCompletionActions;
private final boolean isAtomic; private final boolean isAtomic;
...@@ -131,7 +130,6 @@ public class ConcatenatingMediaSource extends CompositeMediaSource<MediaSourceHo ...@@ -131,7 +130,6 @@ public class ConcatenatingMediaSource extends CompositeMediaSource<MediaSourceHo
this.mediaSourceByMediaPeriod = new IdentityHashMap<>(); this.mediaSourceByMediaPeriod = new IdentityHashMap<>();
this.mediaSourcesPublic = new ArrayList<>(); this.mediaSourcesPublic = new ArrayList<>();
this.mediaSourceHolders = new ArrayList<>(); this.mediaSourceHolders = new ArrayList<>();
this.deferredMediaPeriods = new ArrayList<>(1);
this.pendingOnCompletionActions = new ArrayList<>(); this.pendingOnCompletionActions = new ArrayList<>();
this.query = new MediaSourceHolder(/* mediaSource= */ null); this.query = new MediaSourceHolder(/* mediaSource= */ null);
this.isAtomic = isAtomic; this.isAtomic = isAtomic;
...@@ -398,29 +396,22 @@ public class ConcatenatingMediaSource extends CompositeMediaSource<MediaSourceHo ...@@ -398,29 +396,22 @@ public class ConcatenatingMediaSource extends CompositeMediaSource<MediaSourceHo
MediaSourceHolder holder = mediaSourceHolders.get(mediaSourceHolderIndex); MediaSourceHolder holder = mediaSourceHolders.get(mediaSourceHolderIndex);
MediaPeriodId idInSource = MediaPeriodId idInSource =
id.copyWithPeriodIndex(id.periodIndex - holder.firstPeriodIndexInChild); id.copyWithPeriodIndex(id.periodIndex - holder.firstPeriodIndexInChild);
MediaPeriod mediaPeriod; DeferredMediaPeriod mediaPeriod =
if (!holder.isPrepared) { new DeferredMediaPeriod(holder.mediaSource, idInSource, allocator);
mediaPeriod = new DeferredMediaPeriod(holder.mediaSource, idInSource, allocator);
deferredMediaPeriods.add((DeferredMediaPeriod) mediaPeriod);
} else {
mediaPeriod = holder.mediaSource.createPeriod(idInSource, allocator);
}
mediaSourceByMediaPeriod.put(mediaPeriod, holder); mediaSourceByMediaPeriod.put(mediaPeriod, holder);
holder.activeMediaPeriods++; holder.activeMediaPeriods.add(mediaPeriod);
if (holder.isPrepared) {
mediaPeriod.createPeriod();
}
return mediaPeriod; return mediaPeriod;
} }
@Override @Override
public final void releasePeriod(MediaPeriod mediaPeriod) { public final void releasePeriod(MediaPeriod mediaPeriod) {
MediaSourceHolder holder = mediaSourceByMediaPeriod.remove(mediaPeriod); MediaSourceHolder holder = mediaSourceByMediaPeriod.remove(mediaPeriod);
if (mediaPeriod instanceof DeferredMediaPeriod) { ((DeferredMediaPeriod) mediaPeriod).releasePeriod();
deferredMediaPeriods.remove(mediaPeriod); holder.activeMediaPeriods.remove(mediaPeriod);
((DeferredMediaPeriod) mediaPeriod).releasePeriod(); if (holder.activeMediaPeriods.isEmpty() && holder.isRemoved) {
} else {
holder.mediaSource.releasePeriod(mediaPeriod);
}
holder.activeMediaPeriods--;
if (holder.activeMediaPeriods == 0 && holder.isRemoved) {
releaseChildSource(holder); releaseChildSource(holder);
} }
} }
...@@ -566,11 +557,8 @@ public class ConcatenatingMediaSource extends CompositeMediaSource<MediaSourceHo ...@@ -566,11 +557,8 @@ public class ConcatenatingMediaSource extends CompositeMediaSource<MediaSourceHo
} }
mediaSourceHolder.timeline = deferredTimeline.cloneWithNewTimeline(timeline); mediaSourceHolder.timeline = deferredTimeline.cloneWithNewTimeline(timeline);
if (!mediaSourceHolder.isPrepared) { if (!mediaSourceHolder.isPrepared) {
for (int i = deferredMediaPeriods.size() - 1; i >= 0; i--) { for (int i = 0; i < mediaSourceHolder.activeMediaPeriods.size(); i++) {
if (deferredMediaPeriods.get(i).mediaSource == mediaSourceHolder.mediaSource) { mediaSourceHolder.activeMediaPeriods.get(i).createPeriod();
deferredMediaPeriods.get(i).createPeriod();
deferredMediaPeriods.remove(i);
}
} }
} }
mediaSourceHolder.isPrepared = true; mediaSourceHolder.isPrepared = true;
...@@ -592,7 +580,7 @@ public class ConcatenatingMediaSource extends CompositeMediaSource<MediaSourceHo ...@@ -592,7 +580,7 @@ public class ConcatenatingMediaSource extends CompositeMediaSource<MediaSourceHo
-oldTimeline.getWindowCount(), -oldTimeline.getWindowCount(),
-oldTimeline.getPeriodCount()); -oldTimeline.getPeriodCount());
holder.isRemoved = true; holder.isRemoved = true;
if (holder.activeMediaPeriods == 0) { if (holder.activeMediaPeriods.isEmpty()) {
releaseChildSource(holder); releaseChildSource(holder);
} }
} }
...@@ -648,12 +636,13 @@ public class ConcatenatingMediaSource extends CompositeMediaSource<MediaSourceHo ...@@ -648,12 +636,13 @@ public class ConcatenatingMediaSource extends CompositeMediaSource<MediaSourceHo
public int firstPeriodIndexInChild; public int firstPeriodIndexInChild;
public boolean isPrepared; public boolean isPrepared;
public boolean isRemoved; public boolean isRemoved;
public int activeMediaPeriods; public List<DeferredMediaPeriod> activeMediaPeriods;
public MediaSourceHolder(MediaSource mediaSource) { public MediaSourceHolder(MediaSource mediaSource) {
this.mediaSource = mediaSource; this.mediaSource = mediaSource;
this.uid = System.identityHashCode(this); this.uid = System.identityHashCode(this);
this.timeline = new DeferredTimeline(); this.timeline = new DeferredTimeline();
this.activeMediaPeriods = new ArrayList<>();
} }
public void reset(int childIndex, int firstWindowIndexInChild, int firstPeriodIndexInChild) { public void reset(int childIndex, int firstWindowIndexInChild, int firstPeriodIndexInChild) {
...@@ -662,7 +651,7 @@ public class ConcatenatingMediaSource extends CompositeMediaSource<MediaSourceHo ...@@ -662,7 +651,7 @@ public class ConcatenatingMediaSource extends CompositeMediaSource<MediaSourceHo
this.firstPeriodIndexInChild = firstPeriodIndexInChild; this.firstPeriodIndexInChild = firstPeriodIndexInChild;
this.isPrepared = false; this.isPrepared = false;
this.isRemoved = false; this.isRemoved = false;
this.activeMediaPeriods = 0; this.activeMediaPeriods.clear();
} }
@Override @Override
......
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