Commit 99d805f6 by bachinger Committed by Ian Baker

Make media item of SinglePeriodTimeline non-null

This change makes the media item argument in any constructors of the SinglePeriodTimeline non-null. Further a dummy media item is created for deprecated constructors using a tag only.

PiperOrigin-RevId: 315283842
parent c37af0b5
...@@ -15,6 +15,9 @@ ...@@ -15,6 +15,9 @@
*/ */
package com.google.android.exoplayer2.source; package com.google.android.exoplayer2.source;
import static com.google.android.exoplayer2.util.Assertions.checkNotNull;
import android.net.Uri;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.MediaItem; import com.google.android.exoplayer2.MediaItem;
...@@ -27,6 +30,11 @@ import com.google.android.exoplayer2.util.Assertions; ...@@ -27,6 +30,11 @@ import com.google.android.exoplayer2.util.Assertions;
public final class SinglePeriodTimeline extends Timeline { public final class SinglePeriodTimeline extends Timeline {
private static final Object UID = new Object(); private static final Object UID = new Object();
private static final MediaItem MEDIA_ITEM =
new MediaItem.Builder()
.setMediaId("com.google.android.exoplayer2.source.SinglePeriodTimeline")
.setUri(Uri.EMPTY)
.build();
private final long presentationStartTimeMs; private final long presentationStartTimeMs;
private final long windowStartTimeMs; private final long windowStartTimeMs;
...@@ -84,7 +92,7 @@ public final class SinglePeriodTimeline extends Timeline { ...@@ -84,7 +92,7 @@ public final class SinglePeriodTimeline extends Timeline {
boolean isDynamic, boolean isDynamic,
boolean isLive, boolean isLive,
@Nullable Object manifest, @Nullable Object manifest,
@Nullable MediaItem mediaItem) { MediaItem mediaItem) {
this( this(
durationUs, durationUs,
durationUs, durationUs,
...@@ -154,7 +162,7 @@ public final class SinglePeriodTimeline extends Timeline { ...@@ -154,7 +162,7 @@ public final class SinglePeriodTimeline extends Timeline {
boolean isDynamic, boolean isDynamic,
boolean isLive, boolean isLive,
@Nullable Object manifest, @Nullable Object manifest,
@Nullable MediaItem mediaItem) { MediaItem mediaItem) {
this( this(
/* presentationStartTimeMs= */ C.TIME_UNSET, /* presentationStartTimeMs= */ C.TIME_UNSET,
/* windowStartTimeMs= */ C.TIME_UNSET, /* windowStartTimeMs= */ C.TIME_UNSET,
...@@ -200,7 +208,7 @@ public final class SinglePeriodTimeline extends Timeline { ...@@ -200,7 +208,7 @@ public final class SinglePeriodTimeline extends Timeline {
isDynamic, isDynamic,
isLive, isLive,
manifest, manifest,
/* mediaItem= */ null, MEDIA_ITEM.buildUpon().setTag(tag).build(),
tag); tag);
} }
...@@ -239,7 +247,7 @@ public final class SinglePeriodTimeline extends Timeline { ...@@ -239,7 +247,7 @@ public final class SinglePeriodTimeline extends Timeline {
boolean isDynamic, boolean isDynamic,
boolean isLive, boolean isLive,
@Nullable Object manifest, @Nullable Object manifest,
@Nullable MediaItem mediaItem) { MediaItem mediaItem) {
this( this(
presentationStartTimeMs, presentationStartTimeMs,
windowStartTimeMs, windowStartTimeMs,
...@@ -268,7 +276,7 @@ public final class SinglePeriodTimeline extends Timeline { ...@@ -268,7 +276,7 @@ public final class SinglePeriodTimeline extends Timeline {
boolean isDynamic, boolean isDynamic,
boolean isLive, boolean isLive,
@Nullable Object manifest, @Nullable Object manifest,
@Nullable MediaItem mediaItem, MediaItem mediaItem,
@Nullable Object tag) { @Nullable Object tag) {
this.presentationStartTimeMs = presentationStartTimeMs; this.presentationStartTimeMs = presentationStartTimeMs;
this.windowStartTimeMs = windowStartTimeMs; this.windowStartTimeMs = windowStartTimeMs;
...@@ -281,7 +289,7 @@ public final class SinglePeriodTimeline extends Timeline { ...@@ -281,7 +289,7 @@ public final class SinglePeriodTimeline extends Timeline {
this.isDynamic = isDynamic; this.isDynamic = isDynamic;
this.isLive = isLive; this.isLive = isLive;
this.manifest = manifest; this.manifest = manifest;
this.mediaItem = mediaItem; this.mediaItem = checkNotNull(mediaItem);
this.tag = tag; this.tag = tag;
} }
...@@ -351,7 +359,7 @@ public final class SinglePeriodTimeline extends Timeline { ...@@ -351,7 +359,7 @@ public final class SinglePeriodTimeline extends Timeline {
@Override @Override
public Period getPeriod(int periodIndex, Period period, boolean setIds) { public Period getPeriod(int periodIndex, Period period, boolean setIds) {
Assertions.checkIndex(periodIndex, 0, 1); Assertions.checkIndex(periodIndex, 0, 1);
Object uid = setIds ? UID : null; @Nullable Object uid = setIds ? UID : null;
return period.set(/* id= */ null, uid, 0, periodDurationUs, -windowPositionInPeriodUs); return period.set(/* id= */ null, uid, 0, periodDurationUs, -windowPositionInPeriodUs);
} }
......
...@@ -57,7 +57,7 @@ public final class MediaPeriodQueueTest { ...@@ -57,7 +57,7 @@ public final class MediaPeriodQueueTest {
/* isDynamic= */ false, /* isDynamic= */ false,
/* isLive= */ false, /* isLive= */ false,
/* manifest= */ null, /* manifest= */ null,
/* mediaItem= */ null); MediaItem.fromUri(Uri.EMPTY));
private static final Uri AD_URI = Uri.EMPTY; private static final Uri AD_URI = Uri.EMPTY;
private MediaPeriodQueue mediaPeriodQueue; private MediaPeriodQueue mediaPeriodQueue;
......
...@@ -74,7 +74,7 @@ public final class ClippingMediaSourceTest { ...@@ -74,7 +74,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ false, /* isDynamic= */ false,
/* isLive= */ false, /* isLive= */ false,
/* manifest= */ null, /* manifest= */ null,
/* mediaItem= */ null); MediaItem.fromUri(Uri.EMPTY));
Timeline clippedTimeline = getClippedTimeline(timeline, 0, TEST_PERIOD_DURATION_US); Timeline clippedTimeline = getClippedTimeline(timeline, 0, TEST_PERIOD_DURATION_US);
...@@ -95,7 +95,7 @@ public final class ClippingMediaSourceTest { ...@@ -95,7 +95,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ false, /* isDynamic= */ false,
/* isLive= */ false, /* isLive= */ false,
/* manifest= */ null, /* manifest= */ null,
/* mediaItem= */ null); MediaItem.fromUri(Uri.EMPTY));
// If the unseekable window isn't clipped, clipping succeeds. // If the unseekable window isn't clipped, clipping succeeds.
getClippedTimeline(timeline, 0, TEST_PERIOD_DURATION_US); getClippedTimeline(timeline, 0, TEST_PERIOD_DURATION_US);
...@@ -117,7 +117,7 @@ public final class ClippingMediaSourceTest { ...@@ -117,7 +117,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ false, /* isDynamic= */ false,
/* isLive= */ false, /* isLive= */ false,
/* manifest= */ null, /* manifest= */ null,
/* mediaItem= */ null); MediaItem.fromUri(Uri.EMPTY));
// If the unseekable window isn't clipped, clipping succeeds. // If the unseekable window isn't clipped, clipping succeeds.
getClippedTimeline(timeline, /* startUs= */ 0, TEST_PERIOD_DURATION_US); getClippedTimeline(timeline, /* startUs= */ 0, TEST_PERIOD_DURATION_US);
...@@ -139,7 +139,7 @@ public final class ClippingMediaSourceTest { ...@@ -139,7 +139,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ false, /* isDynamic= */ false,
/* isLive= */ false, /* isLive= */ false,
/* manifest= */ null, /* manifest= */ null,
/* mediaItem= */ null); MediaItem.fromUri(Uri.EMPTY));
Timeline clippedTimeline = Timeline clippedTimeline =
getClippedTimeline(timeline, TEST_CLIP_AMOUNT_US, TEST_PERIOD_DURATION_US); getClippedTimeline(timeline, TEST_CLIP_AMOUNT_US, TEST_PERIOD_DURATION_US);
...@@ -158,7 +158,7 @@ public final class ClippingMediaSourceTest { ...@@ -158,7 +158,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ false, /* isDynamic= */ false,
/* isLive= */ false, /* isLive= */ false,
/* manifest= */ null, /* manifest= */ null,
/* mediaItem= */ null); MediaItem.fromUri(Uri.EMPTY));
Timeline clippedTimeline = Timeline clippedTimeline =
getClippedTimeline(timeline, 0, TEST_PERIOD_DURATION_US - TEST_CLIP_AMOUNT_US); getClippedTimeline(timeline, 0, TEST_PERIOD_DURATION_US - TEST_CLIP_AMOUNT_US);
...@@ -194,7 +194,7 @@ public final class ClippingMediaSourceTest { ...@@ -194,7 +194,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ false, /* isDynamic= */ false,
/* isLive= */ false, /* isLive= */ false,
/* manifest= */ null, /* manifest= */ null,
/* mediaItem= */ null); MediaItem.fromUri(Uri.EMPTY));
// When clipping to the end, the clipped timeline should also have a duration. // When clipping to the end, the clipped timeline should also have a duration.
Timeline clippedTimeline = Timeline clippedTimeline =
...@@ -213,7 +213,7 @@ public final class ClippingMediaSourceTest { ...@@ -213,7 +213,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ false, /* isDynamic= */ false,
/* isLive= */ false, /* isLive= */ false,
/* manifest= */ null, /* manifest= */ null,
/* mediaItem= */ null); MediaItem.fromUri(Uri.EMPTY));
// When clipping to the end, the clipped timeline should also have an unset duration. // When clipping to the end, the clipped timeline should also have an unset duration.
Timeline clippedTimeline = Timeline clippedTimeline =
...@@ -231,7 +231,7 @@ public final class ClippingMediaSourceTest { ...@@ -231,7 +231,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ false, /* isDynamic= */ false,
/* isLive= */ false, /* isLive= */ false,
/* manifest= */ null, /* manifest= */ null,
/* mediaItem= */ null); MediaItem.fromUri(Uri.EMPTY));
Timeline clippedTimeline = Timeline clippedTimeline =
getClippedTimeline( getClippedTimeline(
...@@ -254,7 +254,7 @@ public final class ClippingMediaSourceTest { ...@@ -254,7 +254,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ true, /* isDynamic= */ true,
/* isLive= */ true, /* isLive= */ true,
/* manifest= */ null, /* manifest= */ null,
/* mediaItem= */ null); MediaItem.fromUri(Uri.EMPTY));
Timeline clippedTimeline = getClippedTimeline(timeline, /* durationUs= */ TEST_CLIP_AMOUNT_US); Timeline clippedTimeline = getClippedTimeline(timeline, /* durationUs= */ TEST_CLIP_AMOUNT_US);
assertThat(clippedTimeline.getWindow(0, window).getDurationUs()).isEqualTo(TEST_CLIP_AMOUNT_US); assertThat(clippedTimeline.getWindow(0, window).getDurationUs()).isEqualTo(TEST_CLIP_AMOUNT_US);
...@@ -277,7 +277,7 @@ public final class ClippingMediaSourceTest { ...@@ -277,7 +277,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ true, /* isDynamic= */ true,
/* isLive= */ true, /* isLive= */ true,
/* manifest= */ null, /* manifest= */ null,
/* mediaItem= */ null); MediaItem.fromUri(Uri.EMPTY));
Timeline timeline2 = Timeline timeline2 =
new SinglePeriodTimeline( new SinglePeriodTimeline(
/* periodDurationUs= */ 3 * TEST_PERIOD_DURATION_US, /* periodDurationUs= */ 3 * TEST_PERIOD_DURATION_US,
...@@ -288,7 +288,7 @@ public final class ClippingMediaSourceTest { ...@@ -288,7 +288,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ true, /* isDynamic= */ true,
/* isLive= */ true, /* isLive= */ true,
/* manifest= */ null, /* manifest= */ null,
/* mediaItem= */ null); MediaItem.fromUri(Uri.EMPTY));
Timeline[] clippedTimelines = Timeline[] clippedTimelines =
getClippedTimelines( getClippedTimelines(
...@@ -328,7 +328,7 @@ public final class ClippingMediaSourceTest { ...@@ -328,7 +328,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ true, /* isDynamic= */ true,
/* isLive= */ true, /* isLive= */ true,
/* manifest= */ null, /* manifest= */ null,
/* mediaItem= */ null); MediaItem.fromUri(Uri.EMPTY));
Timeline timeline2 = Timeline timeline2 =
new SinglePeriodTimeline( new SinglePeriodTimeline(
/* periodDurationUs= */ 4 * TEST_PERIOD_DURATION_US, /* periodDurationUs= */ 4 * TEST_PERIOD_DURATION_US,
...@@ -339,7 +339,7 @@ public final class ClippingMediaSourceTest { ...@@ -339,7 +339,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ true, /* isDynamic= */ true,
/* isLive= */ true, /* isLive= */ true,
/* manifest= */ null, /* manifest= */ null,
/* mediaItem= */ null); MediaItem.fromUri(Uri.EMPTY));
Timeline[] clippedTimelines = Timeline[] clippedTimelines =
getClippedTimelines( getClippedTimelines(
...@@ -379,7 +379,7 @@ public final class ClippingMediaSourceTest { ...@@ -379,7 +379,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ true, /* isDynamic= */ true,
/* isLive= */ true, /* isLive= */ true,
/* manifest= */ null, /* manifest= */ null,
/* mediaItem= */ null); MediaItem.fromUri(Uri.EMPTY));
Timeline timeline2 = Timeline timeline2 =
new SinglePeriodTimeline( new SinglePeriodTimeline(
/* periodDurationUs= */ 3 * TEST_PERIOD_DURATION_US, /* periodDurationUs= */ 3 * TEST_PERIOD_DURATION_US,
...@@ -390,7 +390,7 @@ public final class ClippingMediaSourceTest { ...@@ -390,7 +390,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ true, /* isDynamic= */ true,
/* isLive= */ true, /* isLive= */ true,
/* manifest= */ null, /* manifest= */ null,
/* mediaItem= */ null); MediaItem.fromUri(Uri.EMPTY));
Timeline[] clippedTimelines = Timeline[] clippedTimelines =
getClippedTimelines( getClippedTimelines(
...@@ -431,7 +431,7 @@ public final class ClippingMediaSourceTest { ...@@ -431,7 +431,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ true, /* isDynamic= */ true,
/* isLive= */ true, /* isLive= */ true,
/* manifest= */ null, /* manifest= */ null,
/* mediaItem= */ null); MediaItem.fromUri(Uri.EMPTY));
Timeline timeline2 = Timeline timeline2 =
new SinglePeriodTimeline( new SinglePeriodTimeline(
/* periodDurationUs= */ 4 * TEST_PERIOD_DURATION_US, /* periodDurationUs= */ 4 * TEST_PERIOD_DURATION_US,
...@@ -442,7 +442,7 @@ public final class ClippingMediaSourceTest { ...@@ -442,7 +442,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ true, /* isDynamic= */ true,
/* isLive= */ true, /* isLive= */ true,
/* manifest= */ null, /* manifest= */ null,
/* mediaItem= */ null); MediaItem.fromUri(Uri.EMPTY));
Timeline[] clippedTimelines = Timeline[] clippedTimelines =
getClippedTimelines( getClippedTimelines(
...@@ -561,7 +561,7 @@ public final class ClippingMediaSourceTest { ...@@ -561,7 +561,7 @@ public final class ClippingMediaSourceTest {
/* isDynamic= */ false, /* isDynamic= */ false,
/* isLive= */ false, /* isLive= */ false,
/* manifest= */ null, /* manifest= */ null,
/* mediaItem= */ null); MediaItem.fromUri(Uri.EMPTY));
FakeMediaSource fakeMediaSource = FakeMediaSource fakeMediaSource =
new FakeMediaSource(timeline) { new FakeMediaSource(timeline) {
@Override @Override
......
...@@ -50,7 +50,7 @@ public final class SinglePeriodTimelineTest { ...@@ -50,7 +50,7 @@ public final class SinglePeriodTimelineTest {
/* isDynamic= */ true, /* isDynamic= */ true,
/* isLive= */ true, /* isLive= */ true,
/* manifest= */ null, /* manifest= */ null,
/* mediaItem= */ null); MediaItem.fromUri(Uri.EMPTY));
// Should return null with any positive position projection. // Should return null with any positive position projection.
Pair<Object, Long> position = timeline.getPeriodPosition(window, period, 0, C.TIME_UNSET, 1); Pair<Object, Long> position = timeline.getPeriodPosition(window, period, 0, C.TIME_UNSET, 1);
assertThat(position).isNull(); assertThat(position).isNull();
...@@ -73,7 +73,7 @@ public final class SinglePeriodTimelineTest { ...@@ -73,7 +73,7 @@ public final class SinglePeriodTimelineTest {
/* isDynamic= */ true, /* isDynamic= */ true,
/* isLive= */ true, /* isLive= */ true,
/* manifest= */ null, /* manifest= */ null,
/* mediaItem= */ null); MediaItem.fromUri(Uri.EMPTY));
// Should return null with a positive position projection beyond window duration. // Should return null with a positive position projection beyond window duration.
Pair<Object, Long> position = Pair<Object, Long> position =
timeline.getPeriodPosition(window, period, 0, C.TIME_UNSET, windowDurationUs + 1); timeline.getPeriodPosition(window, period, 0, C.TIME_UNSET, windowDurationUs + 1);
...@@ -108,26 +108,6 @@ public final class SinglePeriodTimelineTest { ...@@ -108,26 +108,6 @@ public final class SinglePeriodTimelineTest {
} }
@Test @Test
public void setNullMediaItem_returnsFallbackMediaItem_butUsesDefaultUid() {
SinglePeriodTimeline timeline =
new SinglePeriodTimeline(
/* durationUs= */ C.TIME_UNSET,
/* isSeekable= */ false,
/* isDynamic= */ false,
/* isLive= */ false,
/* manifest= */ null,
/* mediaItem= */ null);
assertThat(timeline.getWindow(/* windowIndex= */ 0, window).mediaItem.mediaId)
.isEqualTo("com.google.android.exoplayer2.Timeline");
assertThat(timeline.getPeriod(/* periodIndex= */ 0, period, /* setIds= */ false).id).isNull();
assertThat(timeline.getPeriod(/* periodIndex= */ 0, period, /* setIds= */ true).id).isNull();
assertThat(timeline.getPeriod(/* periodIndex= */ 0, period, /* setIds= */ false).uid).isNull();
assertThat(timeline.getPeriod(/* periodIndex= */ 0, period, /* setIds= */ true).uid)
.isNotNull();
}
@Test
public void getWindow_setsTag() { public void getWindow_setsTag() {
Object tag = new Object(); Object tag = new Object();
SinglePeriodTimeline timeline = SinglePeriodTimeline timeline =
...@@ -171,7 +151,7 @@ public final class SinglePeriodTimelineTest { ...@@ -171,7 +151,7 @@ public final class SinglePeriodTimelineTest {
/* isDynamic= */ false, /* isDynamic= */ false,
/* isLive= */ false, /* isLive= */ false,
/* manifest= */ null, /* manifest= */ null,
/* mediaItem= */ null); MediaItem.fromUri(Uri.EMPTY));
Object uid = timeline.getPeriod(/* periodIndex= */ 0, period, /* setIds= */ true).uid; Object uid = timeline.getPeriod(/* periodIndex= */ 0, period, /* setIds= */ true).uid;
assertThat(timeline.getIndexOfPeriod(uid)).isEqualTo(0); assertThat(timeline.getIndexOfPeriod(uid)).isEqualTo(0);
......
...@@ -28,6 +28,7 @@ import android.net.Uri; ...@@ -28,6 +28,7 @@ import android.net.Uri;
import android.os.Looper; import android.os.Looper;
import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.Timeline; import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.source.MediaPeriod; import com.google.android.exoplayer2.source.MediaPeriod;
import com.google.android.exoplayer2.source.MediaSource.MediaPeriodId; import com.google.android.exoplayer2.source.MediaSource.MediaPeriodId;
...@@ -61,7 +62,7 @@ public final class AdsMediaSourceTest { ...@@ -61,7 +62,7 @@ public final class AdsMediaSourceTest {
/* isDynamic= */ false, /* isDynamic= */ false,
/* isLive= */ false, /* isLive= */ false,
/* manifest= */ null, /* manifest= */ null,
/* mediaItem= */ null); MediaItem.fromUri(Uri.EMPTY));
private static final Object PREROLL_AD_PERIOD_UID = private static final Object PREROLL_AD_PERIOD_UID =
PREROLL_AD_TIMELINE.getUidOfPeriod(/* periodIndex= */ 0); PREROLL_AD_TIMELINE.getUidOfPeriod(/* periodIndex= */ 0);
...@@ -73,7 +74,7 @@ public final class AdsMediaSourceTest { ...@@ -73,7 +74,7 @@ public final class AdsMediaSourceTest {
/* isDynamic= */ false, /* isDynamic= */ false,
/* isLive= */ false, /* isLive= */ false,
/* manifest= */ null, /* manifest= */ null,
/* mediaItem= */ null); MediaItem.fromUri(Uri.EMPTY));
private static final Object CONTENT_PERIOD_UID = private static final Object CONTENT_PERIOD_UID =
CONTENT_TIMELINE.getUidOfPeriod(/* periodIndex= */ 0); CONTENT_TIMELINE.getUidOfPeriod(/* periodIndex= */ 0);
......
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