forked from amzn/exoplayer-amazon-port
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Move MediaPeriodId in common minimalistically
This is needed to move ExoPlayerException in common. The follow up cl moves MediaPeriodId completely. #player-to-common PiperOrigin-RevId: 346133091
- Loading branch information
Showing
4 changed files
with
218 additions
and
138 deletions.
There are no files selected for viewing
187 changes: 187 additions & 0 deletions
187
library/common/src/main/java/com/google/android/exoplayer2/source/MediaPeriodId.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,187 @@ | ||
/* | ||
* Copyright 2020 The Android Open Source Project | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
package com.google.android.exoplayer2.source; | ||
|
||
import androidx.annotation.Nullable; | ||
import com.google.android.exoplayer2.C; | ||
import com.google.android.exoplayer2.Timeline; | ||
|
||
/** | ||
* Identifies a specific playback of a {@link Timeline.Period}. | ||
* | ||
* <p>A {@link Timeline.Period} can be played multiple times, for example if it is repeated. Each | ||
* instances of this class identifies a specific playback of a {@link Timeline.Period}. | ||
* | ||
* <p>In ExoPlayer's implementation, {@link MediaPeriodId} identifies a {@code MediaPeriod}. | ||
*/ | ||
// TODO(b/172315872) Should be final, but subclassed in MediaSource for backward-compatibility. | ||
public class MediaPeriodId { | ||
|
||
/** The unique id of the timeline period. */ | ||
public final Object periodUid; | ||
|
||
/** | ||
* If the media period is in an ad group, the index of the ad group in the period. {@link | ||
* C#INDEX_UNSET} otherwise. | ||
*/ | ||
public final int adGroupIndex; | ||
|
||
/** | ||
* If the media period is in an ad group, the index of the ad in its ad group in the period. | ||
* {@link C#INDEX_UNSET} otherwise. | ||
*/ | ||
public final int adIndexInAdGroup; | ||
|
||
/** | ||
* The sequence number of the window in the buffered sequence of windows this media period is part | ||
* of. {@link C#INDEX_UNSET} if the media period id is not part of a buffered sequence of windows. | ||
*/ | ||
public final long windowSequenceNumber; | ||
|
||
/** | ||
* The index of the next ad group to which the media period's content is clipped, or {@link | ||
* C#INDEX_UNSET} if there is no following ad group or if this media period is an ad. | ||
*/ | ||
public final int nextAdGroupIndex; | ||
|
||
/** | ||
* Creates a media period identifier for a period which is not part of a buffered sequence of | ||
* windows. | ||
* | ||
* @param periodUid The unique id of the timeline period. | ||
*/ | ||
public MediaPeriodId(Object periodUid) { | ||
this(periodUid, /* windowSequenceNumber= */ C.INDEX_UNSET); | ||
} | ||
|
||
/** | ||
* Creates a media period identifier for the specified period in the timeline. | ||
* | ||
* @param periodUid The unique id of the timeline period. | ||
* @param windowSequenceNumber The sequence number of the window in the buffered sequence of | ||
* windows this media period is part of. | ||
*/ | ||
public MediaPeriodId(Object periodUid, long windowSequenceNumber) { | ||
this( | ||
periodUid, | ||
/* adGroupIndex= */ C.INDEX_UNSET, | ||
/* adIndexInAdGroup= */ C.INDEX_UNSET, | ||
windowSequenceNumber, | ||
/* nextAdGroupIndex= */ C.INDEX_UNSET); | ||
} | ||
|
||
/** | ||
* Creates a media period identifier for the specified clipped period in the timeline. | ||
* | ||
* @param periodUid The unique id of the timeline period. | ||
* @param windowSequenceNumber The sequence number of the window in the buffered sequence of | ||
* windows this media period is part of. | ||
* @param nextAdGroupIndex The index of the next ad group to which the media period's content is | ||
* clipped. | ||
*/ | ||
public MediaPeriodId(Object periodUid, long windowSequenceNumber, int nextAdGroupIndex) { | ||
this( | ||
periodUid, | ||
/* adGroupIndex= */ C.INDEX_UNSET, | ||
/* adIndexInAdGroup= */ C.INDEX_UNSET, | ||
windowSequenceNumber, | ||
nextAdGroupIndex); | ||
} | ||
|
||
/** | ||
* Creates a media period identifier that identifies an ad within an ad group at the specified | ||
* timeline period. | ||
* | ||
* @param periodUid The unique id of the timeline period that contains the ad group. | ||
* @param adGroupIndex The index of the ad group. | ||
* @param adIndexInAdGroup The index of the ad in the ad group. | ||
* @param windowSequenceNumber The sequence number of the window in the buffered sequence of | ||
* windows this media period is part of. | ||
*/ | ||
public MediaPeriodId( | ||
Object periodUid, int adGroupIndex, int adIndexInAdGroup, long windowSequenceNumber) { | ||
this( | ||
periodUid, | ||
adGroupIndex, | ||
adIndexInAdGroup, | ||
windowSequenceNumber, | ||
/* nextAdGroupIndex= */ C.INDEX_UNSET); | ||
} | ||
|
||
/** Copy constructor for inheritance. */ | ||
// TODO(b/172315872) Delete when client have migrated from MediaSource.MediaPeriodId | ||
protected MediaPeriodId(MediaPeriodId mediaPeriodId) { | ||
this.periodUid = mediaPeriodId.periodUid; | ||
this.adGroupIndex = mediaPeriodId.adGroupIndex; | ||
this.adIndexInAdGroup = mediaPeriodId.adIndexInAdGroup; | ||
this.windowSequenceNumber = mediaPeriodId.windowSequenceNumber; | ||
this.nextAdGroupIndex = mediaPeriodId.nextAdGroupIndex; | ||
} | ||
|
||
private MediaPeriodId( | ||
Object periodUid, | ||
int adGroupIndex, | ||
int adIndexInAdGroup, | ||
long windowSequenceNumber, | ||
int nextAdGroupIndex) { | ||
this.periodUid = periodUid; | ||
this.adGroupIndex = adGroupIndex; | ||
this.adIndexInAdGroup = adIndexInAdGroup; | ||
this.windowSequenceNumber = windowSequenceNumber; | ||
this.nextAdGroupIndex = nextAdGroupIndex; | ||
} | ||
|
||
/** Returns a copy of this period identifier but with {@code newPeriodUid} as its period uid. */ | ||
public MediaPeriodId copyWithPeriodUid(Object newPeriodUid) { | ||
return periodUid.equals(newPeriodUid) | ||
? this | ||
: new MediaPeriodId( | ||
newPeriodUid, adGroupIndex, adIndexInAdGroup, windowSequenceNumber, nextAdGroupIndex); | ||
} | ||
|
||
/** Returns whether this period identifier identifies an ad in an ad group in a period. */ | ||
public boolean isAd() { | ||
return adGroupIndex != C.INDEX_UNSET; | ||
} | ||
|
||
@Override | ||
public boolean equals(@Nullable Object obj) { | ||
if (this == obj) { | ||
return true; | ||
} | ||
if (!(obj instanceof MediaPeriodId)) { | ||
return false; | ||
} | ||
|
||
MediaPeriodId periodId = (MediaPeriodId) obj; | ||
return periodUid.equals(periodId.periodUid) | ||
&& adGroupIndex == periodId.adGroupIndex | ||
&& adIndexInAdGroup == periodId.adIndexInAdGroup | ||
&& windowSequenceNumber == periodId.windowSequenceNumber | ||
&& nextAdGroupIndex == periodId.nextAdGroupIndex; | ||
} | ||
|
||
@Override | ||
public int hashCode() { | ||
int result = 17; | ||
result = 31 * result + periodUid.hashCode(); | ||
result = 31 * result + adGroupIndex; | ||
result = 31 * result + adIndexInAdGroup; | ||
result = 31 * result + (int) windowSequenceNumber; | ||
result = 31 * result + nextAdGroupIndex; | ||
return result; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.