mirror of
https://github.com/androidx/media.git
synced 2025-05-11 17:49:52 +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
|
@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);
|
||||||
}
|
}
|
||||||
@ -161,6 +160,13 @@ public final class ClippingMediaSource extends CompositeMediaSource<Void> {
|
|||||||
mediaSource.releasePeriod(((ClippingMediaPeriod) mediaPeriod).mediaPeriod);
|
mediaSource.releasePeriod(((ClippingMediaPeriod) mediaPeriod).mediaPeriod);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void releaseSource() {
|
||||||
|
super.releaseSource();
|
||||||
|
clippingError = null;
|
||||||
|
sourceListener = null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@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) {
|
||||||
|
@ -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) {
|
||||||
@ -119,6 +118,13 @@ public final class ConcatenatingMediaSource extends CompositeMediaSource<Integer
|
|||||||
mediaSources[sourceIndex].releasePeriod(mediaPeriod);
|
mediaSources[sourceIndex].releasePeriod(mediaPeriod);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void releaseSource() {
|
||||||
|
super.releaseSource();
|
||||||
|
listener = null;
|
||||||
|
timeline = null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onChildSourceInfoRefreshed(
|
protected void onChildSourceInfoRefreshed(
|
||||||
Integer sourceFirstIndex,
|
Integer sourceFirstIndex,
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
@ -81,6 +80,13 @@ public final class LoopingMediaSource extends CompositeMediaSource<Void> {
|
|||||||
childSource.releasePeriod(mediaPeriod);
|
childSource.releasePeriod(mediaPeriod);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void releaseSource() {
|
||||||
|
super.releaseSource();
|
||||||
|
listener = null;
|
||||||
|
childPeriodCount = 0;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@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) {
|
||||||
|
@ -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> {
|
|||||||
@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]);
|
||||||
@ -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
|
@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) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user