mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +00:00
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
This commit is contained in:
parent
78e6979725
commit
c38e7b1aeb
1 changed files with 15 additions and 26 deletions
|
|
@ -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
|
||||||
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
|
||||||
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
|
||||||
}
|
}
|
||||||
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
|
||||||
-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
|
||||||
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
|
||||||
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
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue