Commit cb95f7e9 by tonihei Committed by Oliver Woodman

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
parent 28697799
...@@ -133,7 +133,6 @@ public final class ClippingMediaSource extends CompositeMediaSource<Void> { ...@@ -133,7 +133,6 @@ public final class ClippingMediaSource extends CompositeMediaSource<Void> {
@Override @Override
public void prepareSource(ExoPlayer player, boolean isTopLevelSource, Listener listener) { public void prepareSource(ExoPlayer player, boolean isTopLevelSource, Listener listener) {
super.prepareSource(player, isTopLevelSource, listener); super.prepareSource(player, isTopLevelSource, listener);
Assertions.checkState(sourceListener == null, MEDIA_SOURCE_REUSED_ERROR_MESSAGE);
sourceListener = listener; sourceListener = listener;
prepareChildSource(/* id= */ null, mediaSource); prepareChildSource(/* id= */ null, mediaSource);
} }
...@@ -162,6 +161,13 @@ public final class ClippingMediaSource extends CompositeMediaSource<Void> { ...@@ -162,6 +161,13 @@ public final class ClippingMediaSource extends CompositeMediaSource<Void> {
} }
@Override @Override
public void releaseSource() {
super.releaseSource();
clippingError = null;
sourceListener = null;
}
@Override
protected void onChildSourceInfoRefreshed( protected void onChildSourceInfoRefreshed(
Void id, MediaSource mediaSource, Timeline timeline, @Nullable Object manifest) { Void id, MediaSource mediaSource, Timeline timeline, @Nullable Object manifest) {
if (clippingError != null) { if (clippingError != null) {
......
...@@ -88,7 +88,6 @@ public final class ConcatenatingMediaSource extends CompositeMediaSource<Integer ...@@ -88,7 +88,6 @@ public final class ConcatenatingMediaSource extends CompositeMediaSource<Integer
@Override @Override
public void prepareSource(ExoPlayer player, boolean isTopLevelSource, Listener listener) { public void prepareSource(ExoPlayer player, boolean isTopLevelSource, Listener listener) {
super.prepareSource(player, isTopLevelSource, listener); super.prepareSource(player, isTopLevelSource, listener);
Assertions.checkState(this.listener == null, MEDIA_SOURCE_REUSED_ERROR_MESSAGE);
this.listener = listener; this.listener = listener;
boolean[] duplicateFlags = buildDuplicateFlags(mediaSources); boolean[] duplicateFlags = buildDuplicateFlags(mediaSources);
if (mediaSources.length == 0) { if (mediaSources.length == 0) {
...@@ -120,6 +119,13 @@ public final class ConcatenatingMediaSource extends CompositeMediaSource<Integer ...@@ -120,6 +119,13 @@ public final class ConcatenatingMediaSource extends CompositeMediaSource<Integer
} }
@Override @Override
public void releaseSource() {
super.releaseSource();
listener = null;
timeline = null;
}
@Override
protected void onChildSourceInfoRefreshed( protected void onChildSourceInfoRefreshed(
Integer sourceFirstIndex, Integer sourceFirstIndex,
MediaSource mediaSource, MediaSource mediaSource,
......
...@@ -63,7 +63,6 @@ public final class LoopingMediaSource extends CompositeMediaSource<Void> { ...@@ -63,7 +63,6 @@ public final class LoopingMediaSource extends CompositeMediaSource<Void> {
@Override @Override
public void prepareSource(ExoPlayer player, boolean isTopLevelSource, final Listener listener) { public void prepareSource(ExoPlayer player, boolean isTopLevelSource, final Listener listener) {
super.prepareSource(player, isTopLevelSource, listener); super.prepareSource(player, isTopLevelSource, listener);
Assertions.checkState(this.listener == null, MEDIA_SOURCE_REUSED_ERROR_MESSAGE);
this.listener = listener; this.listener = listener;
prepareChildSource(/* id= */ null, childSource); prepareChildSource(/* id= */ null, childSource);
} }
...@@ -82,6 +81,13 @@ public final class LoopingMediaSource extends CompositeMediaSource<Void> { ...@@ -82,6 +81,13 @@ public final class LoopingMediaSource extends CompositeMediaSource<Void> {
} }
@Override @Override
public void releaseSource() {
super.releaseSource();
listener = null;
childPeriodCount = 0;
}
@Override
protected void onChildSourceInfoRefreshed( protected void onChildSourceInfoRefreshed(
Void id, MediaSource mediaSource, Timeline timeline, @Nullable Object manifest) { Void id, MediaSource mediaSource, Timeline timeline, @Nullable Object manifest) {
childPeriodCount = timeline.getPeriodCount(); childPeriodCount = timeline.getPeriodCount();
......
...@@ -20,12 +20,12 @@ import android.support.annotation.Nullable; ...@@ -20,12 +20,12 @@ import android.support.annotation.Nullable;
import com.google.android.exoplayer2.ExoPlayer; import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.Timeline; import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.upstream.Allocator; import com.google.android.exoplayer2.upstream.Allocator;
import com.google.android.exoplayer2.util.Assertions;
import java.io.IOException; import java.io.IOException;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections;
/** /**
* Merges multiple {@link MediaSource}s. * Merges multiple {@link MediaSource}s.
...@@ -100,7 +100,6 @@ public final class MergingMediaSource extends CompositeMediaSource<Integer> { ...@@ -100,7 +100,6 @@ public final class MergingMediaSource extends CompositeMediaSource<Integer> {
@Override @Override
public void prepareSource(ExoPlayer player, boolean isTopLevelSource, Listener listener) { public void prepareSource(ExoPlayer player, boolean isTopLevelSource, Listener listener) {
super.prepareSource(player, isTopLevelSource, listener); super.prepareSource(player, isTopLevelSource, listener);
Assertions.checkState(this.listener == null, MEDIA_SOURCE_REUSED_ERROR_MESSAGE);
this.listener = listener; this.listener = listener;
for (int i = 0; i < mediaSources.length; i++) { for (int i = 0; i < mediaSources.length; i++) {
prepareChildSource(i, mediaSources[i]); prepareChildSource(i, mediaSources[i]);
...@@ -133,6 +132,18 @@ public final class MergingMediaSource extends CompositeMediaSource<Integer> { ...@@ -133,6 +132,18 @@ public final class MergingMediaSource extends CompositeMediaSource<Integer> {
} }
@Override @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( protected void onChildSourceInfoRefreshed(
Integer id, MediaSource mediaSource, Timeline timeline, @Nullable Object manifest) { Integer id, MediaSource mediaSource, Timeline timeline, @Nullable Object manifest) {
if (mergeError == null) { if (mergeError == null) {
......
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