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> {
@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);
}
......@@ -162,6 +161,13 @@ public final class ClippingMediaSource extends CompositeMediaSource<Void> {
}
@Override
public void releaseSource() {
super.releaseSource();
clippingError = null;
sourceListener = null;
}
@Override
protected void onChildSourceInfoRefreshed(
Void id, MediaSource mediaSource, Timeline timeline, @Nullable Object manifest) {
if (clippingError != null) {
......
......@@ -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) {
......@@ -120,6 +119,13 @@ public final class ConcatenatingMediaSource extends CompositeMediaSource<Integer
}
@Override
public void releaseSource() {
super.releaseSource();
listener = null;
timeline = null;
}
@Override
protected void onChildSourceInfoRefreshed(
Integer sourceFirstIndex,
MediaSource mediaSource,
......
......@@ -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);
}
......@@ -82,6 +81,13 @@ public final class LoopingMediaSource extends CompositeMediaSource<Void> {
}
@Override
public void releaseSource() {
super.releaseSource();
listener = null;
childPeriodCount = 0;
}
@Override
protected void onChildSourceInfoRefreshed(
Void id, MediaSource mediaSource, Timeline timeline, @Nullable Object manifest) {
childPeriodCount = timeline.getPeriodCount();
......
......@@ -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]);
......@@ -133,6 +132,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) {
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