mirror of
https://github.com/androidx/media.git
synced 2025-05-10 00:59:51 +08:00
Make remaining media source reusable.
This make sure all media sources can be reprepared after being released. Issue:#3498 ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=183990416
This commit is contained in:
parent
286977998d
commit
cb95f7e95b
@ -133,7 +133,6 @@ public final class ClippingMediaSource extends CompositeMediaSource<Void> {
|
||||
@Override
|
||||
public void prepareSource(ExoPlayer player, boolean isTopLevelSource, Listener listener) {
|
||||
super.prepareSource(player, isTopLevelSource, listener);
|
||||
Assertions.checkState(sourceListener == null, MEDIA_SOURCE_REUSED_ERROR_MESSAGE);
|
||||
sourceListener = listener;
|
||||
prepareChildSource(/* id= */ null, mediaSource);
|
||||
}
|
||||
@ -161,6 +160,13 @@ public final class ClippingMediaSource extends CompositeMediaSource<Void> {
|
||||
mediaSource.releasePeriod(((ClippingMediaPeriod) mediaPeriod).mediaPeriod);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void releaseSource() {
|
||||
super.releaseSource();
|
||||
clippingError = null;
|
||||
sourceListener = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onChildSourceInfoRefreshed(
|
||||
Void id, MediaSource mediaSource, Timeline timeline, @Nullable Object manifest) {
|
||||
|
@ -88,7 +88,6 @@ public final class ConcatenatingMediaSource extends CompositeMediaSource<Integer
|
||||
@Override
|
||||
public void prepareSource(ExoPlayer player, boolean isTopLevelSource, Listener listener) {
|
||||
super.prepareSource(player, isTopLevelSource, listener);
|
||||
Assertions.checkState(this.listener == null, MEDIA_SOURCE_REUSED_ERROR_MESSAGE);
|
||||
this.listener = listener;
|
||||
boolean[] duplicateFlags = buildDuplicateFlags(mediaSources);
|
||||
if (mediaSources.length == 0) {
|
||||
@ -119,6 +118,13 @@ public final class ConcatenatingMediaSource extends CompositeMediaSource<Integer
|
||||
mediaSources[sourceIndex].releasePeriod(mediaPeriod);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void releaseSource() {
|
||||
super.releaseSource();
|
||||
listener = null;
|
||||
timeline = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onChildSourceInfoRefreshed(
|
||||
Integer sourceFirstIndex,
|
||||
|
@ -63,7 +63,6 @@ public final class LoopingMediaSource extends CompositeMediaSource<Void> {
|
||||
@Override
|
||||
public void prepareSource(ExoPlayer player, boolean isTopLevelSource, final Listener listener) {
|
||||
super.prepareSource(player, isTopLevelSource, listener);
|
||||
Assertions.checkState(this.listener == null, MEDIA_SOURCE_REUSED_ERROR_MESSAGE);
|
||||
this.listener = listener;
|
||||
prepareChildSource(/* id= */ null, childSource);
|
||||
}
|
||||
@ -81,6 +80,13 @@ public final class LoopingMediaSource extends CompositeMediaSource<Void> {
|
||||
childSource.releasePeriod(mediaPeriod);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void releaseSource() {
|
||||
super.releaseSource();
|
||||
listener = null;
|
||||
childPeriodCount = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onChildSourceInfoRefreshed(
|
||||
Void id, MediaSource mediaSource, Timeline timeline, @Nullable Object manifest) {
|
||||
|
@ -20,12 +20,12 @@ import android.support.annotation.Nullable;
|
||||
import com.google.android.exoplayer2.ExoPlayer;
|
||||
import com.google.android.exoplayer2.Timeline;
|
||||
import com.google.android.exoplayer2.upstream.Allocator;
|
||||
import com.google.android.exoplayer2.util.Assertions;
|
||||
import java.io.IOException;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
|
||||
/**
|
||||
* Merges multiple {@link MediaSource}s.
|
||||
@ -100,7 +100,6 @@ public final class MergingMediaSource extends CompositeMediaSource<Integer> {
|
||||
@Override
|
||||
public void prepareSource(ExoPlayer player, boolean isTopLevelSource, Listener listener) {
|
||||
super.prepareSource(player, isTopLevelSource, listener);
|
||||
Assertions.checkState(this.listener == null, MEDIA_SOURCE_REUSED_ERROR_MESSAGE);
|
||||
this.listener = listener;
|
||||
for (int i = 0; i < mediaSources.length; i++) {
|
||||
prepareChildSource(i, mediaSources[i]);
|
||||
@ -132,6 +131,18 @@ public final class MergingMediaSource extends CompositeMediaSource<Integer> {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void releaseSource() {
|
||||
super.releaseSource();
|
||||
listener = null;
|
||||
primaryTimeline = null;
|
||||
primaryManifest = null;
|
||||
periodCount = PERIOD_COUNT_UNSET;
|
||||
mergeError = null;
|
||||
pendingTimelineSources.clear();
|
||||
Collections.addAll(pendingTimelineSources, mediaSources);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onChildSourceInfoRefreshed(
|
||||
Integer id, MediaSource mediaSource, Timeline timeline, @Nullable Object manifest) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user