diff --git a/RELEASENOTES.md b/RELEASENOTES.md
index 375aba33ba..db92059e09 100644
--- a/RELEASENOTES.md
+++ b/RELEASENOTES.md
@@ -2,6 +2,12 @@
### dev-v2 (not yet released)
+* DRM:
+ * Remove `playbackLooper` from `DrmSessionManager.(pre)acquireSession`.
+ When a `DrmSessionManager` is used by an app in a custom `MediaSource`,
+ the `playbackLooper` needs to be passed to `DrmSessionManager.setPlayer`
+ instead.
+
### 2.16.1 (2021-11-18)
* Core Library:
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManager.java b/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManager.java
index 786c4a1302..652eb8b4a2 100644
--- a/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManager.java
+++ b/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManager.java
@@ -18,6 +18,7 @@ package com.google.android.exoplayer2.drm;
import static com.google.android.exoplayer2.util.Assertions.checkArgument;
import static com.google.android.exoplayer2.util.Assertions.checkNotNull;
import static com.google.android.exoplayer2.util.Assertions.checkState;
+import static com.google.android.exoplayer2.util.Assertions.checkStateNotNull;
import android.annotation.SuppressLint;
import android.media.ResourceBusyException;
@@ -31,6 +32,7 @@ import androidx.annotation.RequiresApi;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.PlaybackException;
+import com.google.android.exoplayer2.analytics.PlayerId;
import com.google.android.exoplayer2.drm.DrmInitData.SchemeData;
import com.google.android.exoplayer2.drm.DrmSession.DrmSessionException;
import com.google.android.exoplayer2.drm.ExoMediaDrm.OnEventListener;
@@ -59,7 +61,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
* A {@link DrmSessionManager} that supports playbacks using {@link ExoMediaDrm}.
*
*
This implementation supports pre-acquisition of sessions using {@link
- * #preacquireSession(Looper, DrmSessionEventListener.EventDispatcher, Format)}.
+ * #preacquireSession(DrmSessionEventListener.EventDispatcher, Format)}.
*/
@RequiresApi(18)
public class DefaultDrmSessionManager implements DrmSessionManager {
@@ -419,8 +421,8 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
/**
* Sets the mode, which determines the role of sessions acquired from the instance. This must be
- * called before {@link #acquireSession(Looper, DrmSessionEventListener.EventDispatcher, Format)}
- * is called.
+ * called before {@link #acquireSession(DrmSessionEventListener.EventDispatcher, Format)} is
+ * called.
*
*
By default, the mode is {@link #MODE_PLAYBACK} and a streaming license is requested when
* required.
@@ -488,12 +490,15 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
}
@Override
- public DrmSessionReference preacquireSession(
- Looper playbackLooper,
- @Nullable DrmSessionEventListener.EventDispatcher eventDispatcher,
- Format format) {
- checkState(prepareCallsCount > 0);
+ public void setPlayer(Looper playbackLooper, PlayerId playerId) {
initPlaybackLooper(playbackLooper);
+ }
+
+ @Override
+ public DrmSessionReference preacquireSession(
+ @Nullable DrmSessionEventListener.EventDispatcher eventDispatcher, Format format) {
+ checkState(prepareCallsCount > 0);
+ checkStateNotNull(playbackLooper);
PreacquiredSessionReference preacquiredSessionReference =
new PreacquiredSessionReference(eventDispatcher);
preacquiredSessionReference.acquire(format);
@@ -503,11 +508,9 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
@Override
@Nullable
public DrmSession acquireSession(
- Looper playbackLooper,
- @Nullable DrmSessionEventListener.EventDispatcher eventDispatcher,
- Format format) {
+ @Nullable DrmSessionEventListener.EventDispatcher eventDispatcher, Format format) {
checkState(prepareCallsCount > 0);
- initPlaybackLooper(playbackLooper);
+ checkStateNotNull(playbackLooper);
return acquireSession(
playbackLooper,
eventDispatcher,
@@ -977,7 +980,7 @@ public class DefaultDrmSessionManager implements DrmSessionManager {
* Constructs an instance.
*
* @param eventDispatcher The {@link DrmSessionEventListener.EventDispatcher} passed to {@link
- * #acquireSession(Looper, DrmSessionEventListener.EventDispatcher, Format)}.
+ * #acquireSession(DrmSessionEventListener.EventDispatcher, Format)}.
*/
public PreacquiredSessionReference(
@Nullable DrmSessionEventListener.EventDispatcher eventDispatcher) {
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/drm/DrmSessionManager.java b/library/core/src/main/java/com/google/android/exoplayer2/drm/DrmSessionManager.java
index 59f9a37982..1b5ba9d0d0 100644
--- a/library/core/src/main/java/com/google/android/exoplayer2/drm/DrmSessionManager.java
+++ b/library/core/src/main/java/com/google/android/exoplayer2/drm/DrmSessionManager.java
@@ -20,6 +20,7 @@ import androidx.annotation.Nullable;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.PlaybackException;
+import com.google.android.exoplayer2.analytics.PlayerId;
/** Manages a DRM session. */
public interface DrmSessionManager {
@@ -45,12 +46,13 @@ public interface DrmSessionManager {
DrmSessionManager DRM_UNSUPPORTED =
new DrmSessionManager() {
+ @Override
+ public void setPlayer(Looper playbackLooper, PlayerId playerId) {}
+
@Override
@Nullable
public DrmSession acquireSession(
- Looper playbackLooper,
- @Nullable DrmSessionEventListener.EventDispatcher eventDispatcher,
- Format format) {
+ @Nullable DrmSessionEventListener.EventDispatcher eventDispatcher, Format format) {
if (format.drmInitData == null) {
return null;
} else {
@@ -100,25 +102,33 @@ public interface DrmSessionManager {
// Do nothing.
}
+ /**
+ * Sets information about the player using this DRM session manager.
+ *
+ * @param playbackLooper The {@link Looper} associated with the player's playback thread.
+ * @param playerId The {@link PlayerId} of the player.
+ */
+ void setPlayer(Looper playbackLooper, PlayerId playerId);
+
/**
* Pre-acquires a DRM session for the specified {@link Format}.
*
- *
This notifies the manager that a subsequent call to {@link #acquireSession(Looper,
+ *
This notifies the manager that a subsequent call to {@link #acquireSession(
* DrmSessionEventListener.EventDispatcher, Format)} with the same {@link Format} is likely,
* allowing a manager that supports pre-acquisition to get the required {@link DrmSession} ready
* in the background.
*
*
The caller must call {@link DrmSessionReference#release()} on the returned instance when
* they no longer require the pre-acquisition (i.e. they know they won't be making a matching call
- * to {@link #acquireSession(Looper, DrmSessionEventListener.EventDispatcher, Format)} in the near
+ * to {@link #acquireSession(DrmSessionEventListener.EventDispatcher, Format)} in the near
* future).
*
*
This manager may silently release the underlying session in order to allow another operation
- * to complete. This will result in a subsequent call to {@link #acquireSession(Looper,
+ * to complete. This will result in a subsequent call to {@link #acquireSession(
* DrmSessionEventListener.EventDispatcher, Format)} re-initializing a new session, including
* repeating key loads and other async initialization steps.
*
- *
The caller must separately call {@link #acquireSession(Looper,
+ *
The caller must separately call {@link #acquireSession(
* DrmSessionEventListener.EventDispatcher, Format)} in order to obtain a session suitable for
* playback. The pre-acquired {@link DrmSessionReference} and full {@link DrmSession} instances
* are distinct. The caller must release both, and can release the {@link DrmSessionReference}
@@ -129,19 +139,15 @@ public interface DrmSessionManager {
*
Implementations that do not support pre-acquisition always return an empty {@link
* DrmSessionReference} instance.
*
- * @param playbackLooper The looper associated with the media playback thread.
* @param eventDispatcher The {@link DrmSessionEventListener.EventDispatcher} used to distribute
* events, and passed on to {@link
* DrmSession#acquire(DrmSessionEventListener.EventDispatcher)}.
* @param format The {@link Format} for which to pre-acquire a {@link DrmSession}.
* @return A releaser for the pre-acquired session. Guaranteed to be non-null even if the matching
- * {@link #acquireSession(Looper, DrmSessionEventListener.EventDispatcher, Format)} would
- * return null.
+ * {@link #acquireSession(DrmSessionEventListener.EventDispatcher, Format)} would return null.
*/
default DrmSessionReference preacquireSession(
- Looper playbackLooper,
- @Nullable DrmSessionEventListener.EventDispatcher eventDispatcher,
- Format format) {
+ @Nullable DrmSessionEventListener.EventDispatcher eventDispatcher, Format format) {
return DrmSessionReference.EMPTY;
}
@@ -158,7 +164,6 @@ public interface DrmSessionManager {
* used to configure secure decoders for playback of clear content periods, which can reduce the
* cost of transitioning between clear and encrypted content.
*
- * @param playbackLooper The looper associated with the media playback thread.
* @param eventDispatcher The {@link DrmSessionEventListener.EventDispatcher} used to distribute
* events, and passed on to {@link
* DrmSession#acquire(DrmSessionEventListener.EventDispatcher)}.
@@ -167,9 +172,7 @@ public interface DrmSessionManager {
*/
@Nullable
DrmSession acquireSession(
- Looper playbackLooper,
- @Nullable DrmSessionEventListener.EventDispatcher eventDispatcher,
- Format format);
+ @Nullable DrmSessionEventListener.EventDispatcher eventDispatcher, Format format);
/**
* Returns the {@link C.CryptoType} that the DRM session manager will use for a given {@link
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/drm/OfflineLicenseHelper.java b/library/core/src/main/java/com/google/android/exoplayer2/drm/OfflineLicenseHelper.java
index bfa9d191c4..200e051721 100644
--- a/library/core/src/main/java/com/google/android/exoplayer2/drm/OfflineLicenseHelper.java
+++ b/library/core/src/main/java/com/google/android/exoplayer2/drm/OfflineLicenseHelper.java
@@ -23,6 +23,7 @@ import android.util.Pair;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import com.google.android.exoplayer2.Format;
+import com.google.android.exoplayer2.analytics.PlayerId;
import com.google.android.exoplayer2.drm.DefaultDrmSessionManager.Mode;
import com.google.android.exoplayer2.drm.DrmSession.DrmSessionException;
import com.google.android.exoplayer2.source.MediaSource.MediaPeriodId;
@@ -235,6 +236,7 @@ public final class OfflineLicenseHelper {
public synchronized Pair getLicenseDurationRemainingSec(byte[] offlineLicenseKeySetId)
throws DrmSessionException {
Assertions.checkNotNull(offlineLicenseKeySetId);
+ drmSessionManager.setPlayer(handlerThread.getLooper(), PlayerId.UNSET);
drmSessionManager.prepare();
DrmSession drmSession =
openBlockingKeyRequest(
@@ -263,6 +265,7 @@ public final class OfflineLicenseHelper {
private byte[] blockingKeyRequest(
@Mode int licenseMode, @Nullable byte[] offlineLicenseKeySetId, Format format)
throws DrmSessionException {
+ drmSessionManager.setPlayer(handlerThread.getLooper(), PlayerId.UNSET);
drmSessionManager.prepare();
DrmSession drmSession = openBlockingKeyRequest(licenseMode, offlineLicenseKeySetId, format);
DrmSessionException error = drmSession.getError();
@@ -280,8 +283,7 @@ public final class OfflineLicenseHelper {
Assertions.checkNotNull(format.drmInitData);
drmSessionManager.setMode(licenseMode, offlineLicenseKeySetId);
conditionVariable.close();
- DrmSession drmSession =
- drmSessionManager.acquireSession(handlerThread.getLooper(), eventDispatcher, format);
+ DrmSession drmSession = drmSessionManager.acquireSession(eventDispatcher, format);
// Block current thread until key loading is finished
conditionVariable.block();
return Assertions.checkNotNull(drmSession);
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaPeriod.java b/library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaPeriod.java
index 4c0b795f80..8f3613ce40 100644
--- a/library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaPeriod.java
+++ b/library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaPeriod.java
@@ -717,11 +717,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
}
}
SampleQueue trackOutput =
- SampleQueue.createWithDrm(
- allocator,
- /* playbackLooper= */ handler.getLooper(),
- drmSessionManager,
- drmEventDispatcher);
+ SampleQueue.createWithDrm(allocator, drmSessionManager, drmEventDispatcher);
trackOutput.setUpstreamFormatChangeListener(this);
@NullableType
TrackId[] sampleQueueTrackIds = Arrays.copyOf(this.sampleQueueTrackIds, trackCount + 1);
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaSource.java b/library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaSource.java
index a013ea32f0..1afcf5732d 100644
--- a/library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaSource.java
+++ b/library/core/src/main/java/com/google/android/exoplayer2/source/ProgressiveMediaSource.java
@@ -18,6 +18,7 @@ package com.google.android.exoplayer2.source;
import static com.google.android.exoplayer2.util.Assertions.checkNotNull;
import android.net.Uri;
+import android.os.Looper;
import androidx.annotation.Nullable;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.MediaItem;
@@ -296,6 +297,8 @@ public final class ProgressiveMediaSource extends BaseMediaSource
protected void prepareSourceInternal(@Nullable TransferListener mediaTransferListener) {
transferListener = mediaTransferListener;
drmSessionManager.prepare();
+ drmSessionManager.setPlayer(
+ /* playbackLooper= */ checkNotNull(Looper.myLooper()), getPlayerId());
notifySourceInfoRefreshed();
}
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/SampleQueue.java b/library/core/src/main/java/com/google/android/exoplayer2/source/SampleQueue.java
index 4207fcfbae..c33e1c7736 100644
--- a/library/core/src/main/java/com/google/android/exoplayer2/source/SampleQueue.java
+++ b/library/core/src/main/java/com/google/android/exoplayer2/source/SampleQueue.java
@@ -30,11 +30,13 @@ import androidx.annotation.VisibleForTesting;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.FormatHolder;
+import com.google.android.exoplayer2.analytics.PlayerId;
import com.google.android.exoplayer2.decoder.DecoderInputBuffer;
import com.google.android.exoplayer2.decoder.DecoderInputBuffer.InsufficientCapacityException;
import com.google.android.exoplayer2.drm.DrmInitData;
import com.google.android.exoplayer2.drm.DrmSession;
import com.google.android.exoplayer2.drm.DrmSessionEventListener;
+import com.google.android.exoplayer2.drm.DrmSessionEventListener.EventDispatcher;
import com.google.android.exoplayer2.drm.DrmSessionManager;
import com.google.android.exoplayer2.drm.DrmSessionManager.DrmSessionReference;
import com.google.android.exoplayer2.extractor.TrackOutput;
@@ -71,7 +73,6 @@ public class SampleQueue implements TrackOutput {
private final SpannedData sharedSampleMetadata;
@Nullable private final DrmSessionManager drmSessionManager;
@Nullable private final DrmSessionEventListener.EventDispatcher drmEventDispatcher;
- @Nullable private final Looper playbackLooper;
@Nullable private UpstreamFormatChangedListener upstreamFormatChangeListener;
@Nullable private Format downstreamFormat;
@@ -113,10 +114,7 @@ public class SampleQueue implements TrackOutput {
*/
public static SampleQueue createWithoutDrm(Allocator allocator) {
return new SampleQueue(
- allocator,
- /* playbackLooper= */ null,
- /* drmSessionManager= */ null,
- /* drmEventDispatcher= */ null);
+ allocator, /* drmSessionManager= */ null, /* drmEventDispatcher= */ null);
}
/**
@@ -126,7 +124,6 @@ public class SampleQueue implements TrackOutput {
* keys needed to decrypt it.
*
* @param allocator An {@link Allocator} from which allocations for sample data can be obtained.
- * @param playbackLooper The looper associated with the media playback thread.
* @param drmSessionManager The {@link DrmSessionManager} to obtain {@link DrmSession DrmSessions}
* from. The created instance does not take ownership of this {@link DrmSessionManager}.
* @param drmEventDispatcher A {@link DrmSessionEventListener.EventDispatcher} to notify of events
@@ -134,22 +131,36 @@ public class SampleQueue implements TrackOutput {
*/
public static SampleQueue createWithDrm(
Allocator allocator,
- Looper playbackLooper,
DrmSessionManager drmSessionManager,
DrmSessionEventListener.EventDispatcher drmEventDispatcher) {
return new SampleQueue(
allocator,
- Assertions.checkNotNull(playbackLooper),
+ Assertions.checkNotNull(drmSessionManager),
+ Assertions.checkNotNull(drmEventDispatcher));
+ }
+
+ /**
+ * @deprecated Use {@link #createWithDrm(Allocator, DrmSessionManager, EventDispatcher)} instead.
+ * The {@code playbackLooper} should be configured on the {@link DrmSessionManager} with
+ * {@link DrmSessionManager#setPlayer(Looper, PlayerId)}.
+ */
+ @Deprecated
+ public static SampleQueue createWithDrm(
+ Allocator allocator,
+ Looper playbackLooper,
+ DrmSessionManager drmSessionManager,
+ DrmSessionEventListener.EventDispatcher drmEventDispatcher) {
+ drmSessionManager.setPlayer(playbackLooper, PlayerId.UNSET);
+ return new SampleQueue(
+ allocator,
Assertions.checkNotNull(drmSessionManager),
Assertions.checkNotNull(drmEventDispatcher));
}
protected SampleQueue(
Allocator allocator,
- @Nullable Looper playbackLooper,
@Nullable DrmSessionManager drmSessionManager,
@Nullable DrmSessionEventListener.EventDispatcher drmEventDispatcher) {
- this.playbackLooper = playbackLooper;
this.drmSessionManager = drmSessionManager;
this.drmEventDispatcher = drmEventDispatcher;
sampleDataQueue = new SampleDataQueue(allocator);
@@ -803,8 +814,7 @@ public class SampleQueue implements TrackOutput {
|| !sharedSampleMetadata.getEndValue().format.equals(upstreamFormat)) {
DrmSessionReference drmSessionReference =
drmSessionManager != null
- ? drmSessionManager.preacquireSession(
- checkNotNull(playbackLooper), drmEventDispatcher, upstreamFormat)
+ ? drmSessionManager.preacquireSession(drmEventDispatcher, upstreamFormat)
: DrmSessionReference.EMPTY;
sharedSampleMetadata.appendSpan(
@@ -913,9 +923,7 @@ public class SampleQueue implements TrackOutput {
// Ensure we acquire the new session before releasing the previous one in case the same session
// is being used for both DrmInitData.
@Nullable DrmSession previousSession = currentDrmSession;
- currentDrmSession =
- drmSessionManager.acquireSession(
- Assertions.checkNotNull(playbackLooper), drmEventDispatcher, newFormat);
+ currentDrmSession = drmSessionManager.acquireSession(drmEventDispatcher, newFormat);
outputFormatHolder.drmSession = currentDrmSession;
if (previousSession != null) {
diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/chunk/ChunkSampleStream.java b/library/core/src/main/java/com/google/android/exoplayer2/source/chunk/ChunkSampleStream.java
index 9df2e489f9..e25dee7fdd 100644
--- a/library/core/src/main/java/com/google/android/exoplayer2/source/chunk/ChunkSampleStream.java
+++ b/library/core/src/main/java/com/google/android/exoplayer2/source/chunk/ChunkSampleStream.java
@@ -19,7 +19,6 @@ import static com.google.android.exoplayer2.util.Assertions.checkNotNull;
import static java.lang.Math.max;
import static java.lang.Math.min;
-import android.os.Looper;
import androidx.annotation.Nullable;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format;
@@ -144,11 +143,7 @@ public class ChunkSampleStream
SampleQueue[] sampleQueues = new SampleQueue[1 + embeddedTrackCount];
primarySampleQueue =
- SampleQueue.createWithDrm(
- allocator,
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- drmSessionManager,
- drmEventDispatcher);
+ SampleQueue.createWithDrm(allocator, drmSessionManager, drmEventDispatcher);
trackTypes[0] = primaryTrackType;
sampleQueues[0] = primarySampleQueue;
diff --git a/library/core/src/test/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManagerTest.java b/library/core/src/test/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManagerTest.java
index ea8e91628b..a6e9855307 100644
--- a/library/core/src/test/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManagerTest.java
+++ b/library/core/src/test/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManagerTest.java
@@ -25,6 +25,7 @@ import androidx.annotation.Nullable;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format;
+import com.google.android.exoplayer2.analytics.PlayerId;
import com.google.android.exoplayer2.drm.DrmSessionManager.DrmSessionReference;
import com.google.android.exoplayer2.drm.ExoMediaDrm.AppManagedProvider;
import com.google.android.exoplayer2.source.MediaSource;
@@ -67,12 +68,11 @@ public class DefaultDrmSessionManagerTest {
.setUuidAndExoMediaDrmProvider(DRM_SCHEME_UUID, uuid -> new FakeExoMediaDrm())
.build(/* mediaDrmCallback= */ licenseServer);
drmSessionManager.prepare();
+ drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
DrmSession drmSession =
checkNotNull(
drmSessionManager.acquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- FORMAT_WITH_DRM_INIT_DATA));
+ /* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
waitForOpenedWithKeys(drmSession);
assertThat(drmSession.getState()).isEqualTo(DrmSession.STATE_OPENED_WITH_KEYS);
@@ -91,12 +91,11 @@ public class DefaultDrmSessionManagerTest {
.build(/* mediaDrmCallback= */ licenseServer);
drmSessionManager.prepare();
+ drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
DrmSession drmSession =
checkNotNull(
drmSessionManager.acquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- FORMAT_WITH_DRM_INIT_DATA));
+ /* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
waitForOpenedWithKeys(drmSession);
assertThat(drmSession.getState()).isEqualTo(DrmSession.STATE_OPENED_WITH_KEYS);
@@ -117,12 +116,11 @@ public class DefaultDrmSessionManagerTest {
.build(/* mediaDrmCallback= */ licenseServer);
drmSessionManager.prepare();
+ drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
DrmSession drmSession =
checkNotNull(
drmSessionManager.acquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- FORMAT_WITH_DRM_INIT_DATA));
+ /* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
waitForOpenedWithKeys(drmSession);
drmSession.release(/* eventDispatcher= */ null);
@@ -140,12 +138,11 @@ public class DefaultDrmSessionManagerTest {
.build(/* mediaDrmCallback= */ licenseServer);
drmSessionManager.prepare();
+ drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
DrmSession drmSession =
checkNotNull(
drmSessionManager.acquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- FORMAT_WITH_DRM_INIT_DATA));
+ /* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
waitForOpenedWithKeys(drmSession);
drmSession.release(/* eventDispatcher= */ null);
@@ -165,12 +162,11 @@ public class DefaultDrmSessionManagerTest {
.build(/* mediaDrmCallback= */ licenseServer);
drmSessionManager.prepare();
+ drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
DrmSession drmSession =
checkNotNull(
drmSessionManager.acquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- FORMAT_WITH_DRM_INIT_DATA));
+ /* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
waitForOpenedWithKeys(drmSession);
assertThat(drmSession.getState()).isEqualTo(DrmSession.STATE_OPENED_WITH_KEYS);
@@ -192,12 +188,11 @@ public class DefaultDrmSessionManagerTest {
.build(/* mediaDrmCallback= */ licenseServer);
drmSessionManager.prepare();
+ drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
DrmSession drmSession =
checkNotNull(
drmSessionManager.acquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- FORMAT_WITH_DRM_INIT_DATA));
+ /* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
drmSessionManager.release();
// The manager is now in a 'releasing' state because the session is still active - so the
@@ -238,12 +233,11 @@ public class DefaultDrmSessionManagerTest {
.build(/* mediaDrmCallback= */ licenseServer);
drmSessionManager.prepare();
+ drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
DrmSession drmSession =
checkNotNull(
drmSessionManager.acquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- FORMAT_WITH_DRM_INIT_DATA));
+ /* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
waitForOpenedWithKeys(drmSession);
// Release the manager (there's still an explicit reference to the session from acquireSession).
@@ -278,12 +272,11 @@ public class DefaultDrmSessionManagerTest {
.build(/* mediaDrmCallback= */ licenseServer);
drmSessionManager.prepare();
+ drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
DrmSession firstDrmSession =
checkNotNull(
drmSessionManager.acquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- FORMAT_WITH_DRM_INIT_DATA));
+ /* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
waitForOpenedWithKeys(firstDrmSession);
firstDrmSession.release(/* eventDispatcher= */ null);
@@ -293,9 +286,7 @@ public class DefaultDrmSessionManagerTest {
DrmSession secondDrmSession =
checkNotNull(
drmSessionManager.acquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- secondFormatWithDrmInitData));
+ /* eventDispatcher= */ null, secondFormatWithDrmInitData));
// The drmSessionManager had to release firstDrmSession in order to acquire secondDrmSession.
assertThat(firstDrmSession.getState()).isEqualTo(DrmSession.STATE_RELEASED);
@@ -322,18 +313,15 @@ public class DefaultDrmSessionManagerTest {
.build(/* mediaDrmCallback= */ licenseServer);
drmSessionManager.prepare();
+ drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
DrmSessionReference firstDrmSessionReference =
checkNotNull(
drmSessionManager.preacquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- FORMAT_WITH_DRM_INIT_DATA));
+ /* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
DrmSession firstDrmSession =
checkNotNull(
drmSessionManager.acquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- FORMAT_WITH_DRM_INIT_DATA));
+ /* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
waitForOpenedWithKeys(firstDrmSession);
firstDrmSession.release(/* eventDispatcher= */ null);
@@ -343,9 +331,7 @@ public class DefaultDrmSessionManagerTest {
DrmSession secondDrmSession =
checkNotNull(
drmSessionManager.acquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- secondFormatWithDrmInitData));
+ /* eventDispatcher= */ null, secondFormatWithDrmInitData));
// The drmSessionManager had to release both it's internal keep-alive reference and the
// reference represented by firstDrmSessionReference in order to acquire secondDrmSession.
assertThat(firstDrmSession.getState()).isEqualTo(DrmSession.STATE_RELEASED);
@@ -372,12 +358,11 @@ public class DefaultDrmSessionManagerTest {
.build(/* mediaDrmCallback= */ licenseServer);
drmSessionManager.prepare();
+ drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
DrmSession firstDrmSession =
checkNotNull(
drmSessionManager.acquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- FORMAT_WITH_DRM_INIT_DATA));
+ /* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
waitForOpenedWithKeys(firstDrmSession);
firstDrmSession.release(/* eventDispatcher= */ null);
@@ -388,9 +373,7 @@ public class DefaultDrmSessionManagerTest {
DrmSession secondDrmSession =
checkNotNull(
drmSessionManager.acquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- FORMAT_WITH_DRM_INIT_DATA));
+ /* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
assertThat(secondDrmSession).isSameInstanceAs(firstDrmSession);
// Let the timeout definitely expire, and check the session didn't get released.
@@ -422,12 +405,10 @@ public class DefaultDrmSessionManagerTest {
.build(/* mediaDrmCallback= */ licenseServer);
drmSessionManager.prepare();
+ drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
DrmSessionReference sessionReference =
- drmSessionManager.preacquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- eventDispatcher,
- FORMAT_WITH_DRM_INIT_DATA);
+ drmSessionManager.preacquireSession(eventDispatcher, FORMAT_WITH_DRM_INIT_DATA);
// Wait for the key load event to propagate, indicating the pre-acquired session is in
// STATE_OPENED_WITH_KEYS.
@@ -439,9 +420,7 @@ public class DefaultDrmSessionManagerTest {
DrmSession drmSession =
checkNotNull(
drmSessionManager.acquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- FORMAT_WITH_DRM_INIT_DATA));
+ /* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
// Without idling the main/playback looper, we assert the session is already in OPENED_WITH_KEYS
assertThat(drmSession.getState()).isEqualTo(DrmSession.STATE_OPENED_WITH_KEYS);
@@ -471,12 +450,10 @@ public class DefaultDrmSessionManagerTest {
.build(/* mediaDrmCallback= */ licenseServer);
drmSessionManager.prepare();
+ drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
DrmSessionReference sessionReference =
- drmSessionManager.preacquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- FORMAT_WITH_DRM_INIT_DATA);
+ drmSessionManager.preacquireSession(/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA);
// Release the pre-acquired reference before the underlying session has had a chance to be
// constructed.
@@ -487,9 +464,7 @@ public class DefaultDrmSessionManagerTest {
DrmSession drmSession =
checkNotNull(
drmSessionManager.acquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- FORMAT_WITH_DRM_INIT_DATA));
+ /* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
assertThat(drmSession.getState()).isEqualTo(DrmSession.STATE_OPENED);
waitForOpenedWithKeys(drmSession);
@@ -511,12 +486,10 @@ public class DefaultDrmSessionManagerTest {
.build(/* mediaDrmCallback= */ licenseServer);
drmSessionManager.prepare();
+ drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
DrmSessionReference sessionReference =
- drmSessionManager.preacquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- FORMAT_WITH_DRM_INIT_DATA);
+ drmSessionManager.preacquireSession(/* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA);
// Release the manager before the underlying session has had a chance to be constructed. This
// will release all pre-acquired sessions.
@@ -531,9 +504,7 @@ public class DefaultDrmSessionManagerTest {
DrmSession drmSession =
checkNotNull(
drmSessionManager.acquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- FORMAT_WITH_DRM_INIT_DATA));
+ /* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
assertThat(drmSession.getState()).isEqualTo(DrmSession.STATE_OPENED);
waitForOpenedWithKeys(drmSession);
@@ -559,14 +530,13 @@ public class DefaultDrmSessionManagerTest {
.build(/* mediaDrmCallback= */ licenseServer);
drmSessionManager.prepare();
+ drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
DefaultDrmSession drmSession =
(DefaultDrmSession)
checkNotNull(
drmSessionManager.acquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- FORMAT_WITH_DRM_INIT_DATA));
+ /* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
waitForOpenedWithKeys(drmSession);
assertThat(licenseServer.getReceivedSchemeDatas()).hasSize(1);
@@ -601,14 +571,13 @@ public class DefaultDrmSessionManagerTest {
.build(/* mediaDrmCallback= */ licenseServer);
drmSessionManager.prepare();
+ drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
DefaultDrmSession drmSession =
(DefaultDrmSession)
checkNotNull(
drmSessionManager.acquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- FORMAT_WITH_DRM_INIT_DATA));
+ /* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
waitForOpenedWithKeys(drmSession);
assertThat(licenseServer.getReceivedSchemeDatas()).hasSize(1);
@@ -646,12 +615,11 @@ public class DefaultDrmSessionManagerTest {
uuid -> new FakeExoMediaDrm.Builder().setProvisionsRequired(1).build())
.build(/* mediaDrmCallback= */ licenseServer);
drmSessionManager.prepare();
+ drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
DrmSession drmSession =
checkNotNull(
drmSessionManager.acquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- FORMAT_WITH_DRM_INIT_DATA));
+ /* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
// Confirm that opening the session threw NotProvisionedException (otherwise state would be
// OPENED)
assertThat(drmSession.getState()).isEqualTo(DrmSession.STATE_OPENING);
@@ -680,12 +648,11 @@ public class DefaultDrmSessionManagerTest {
.build())
.build(/* mediaDrmCallback= */ licenseServer);
drmSessionManager.prepare();
+ drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
DrmSession drmSession =
checkNotNull(
drmSessionManager.acquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- FORMAT_WITH_DRM_INIT_DATA));
+ /* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
assertThat(drmSession.getState()).isEqualTo(DrmSession.STATE_OPENED);
waitForOpenedWithKeys(drmSession);
@@ -707,12 +674,11 @@ public class DefaultDrmSessionManagerTest {
uuid -> new FakeExoMediaDrm.Builder().setProvisionsRequired(2).build())
.build(/* mediaDrmCallback= */ licenseServer);
drmSessionManager.prepare();
+ drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
DrmSession drmSession =
checkNotNull(
drmSessionManager.acquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- FORMAT_WITH_DRM_INIT_DATA));
+ /* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
// Confirm that opening the session threw NotProvisionedException (otherwise state would be
// OPENED)
assertThat(drmSession.getState()).isEqualTo(DrmSession.STATE_OPENING);
@@ -736,12 +702,11 @@ public class DefaultDrmSessionManagerTest {
DRM_SCHEME_UUID, uuid -> new FakeExoMediaDrm.Builder().build())
.build(/* mediaDrmCallback= */ licenseServer);
drmSessionManager.prepare();
+ drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
DrmSession drmSession =
checkNotNull(
drmSessionManager.acquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- FORMAT_WITH_DRM_INIT_DATA));
+ /* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
assertThat(drmSession.getState()).isEqualTo(DrmSession.STATE_OPENED);
waitForOpenedWithKeys(drmSession);
@@ -763,12 +728,11 @@ public class DefaultDrmSessionManagerTest {
.setSessionKeepaliveMs(C.TIME_UNSET)
.build(/* mediaDrmCallback= */ licenseServer);
drmSessionManager.prepare();
+ drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
DrmSession drmSession =
checkNotNull(
drmSessionManager.acquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- FORMAT_WITH_DRM_INIT_DATA));
+ /* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
// Confirm that opening the session threw NotProvisionedException (otherwise state would be
// OPENED)
assertThat(drmSession.getState()).isEqualTo(DrmSession.STATE_OPENING);
@@ -780,9 +744,7 @@ public class DefaultDrmSessionManagerTest {
drmSession =
checkNotNull(
drmSessionManager.acquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- FORMAT_WITH_DRM_INIT_DATA));
+ /* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
// Confirm that opening the session threw NotProvisionedException (otherwise state would be
// OPENED)
assertThat(drmSession.getState()).isEqualTo(DrmSession.STATE_OPENING);
@@ -803,16 +765,12 @@ public class DefaultDrmSessionManagerTest {
Exception.class,
() ->
drmSessionManager.acquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- FORMAT_WITH_DRM_INIT_DATA));
+ /* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
assertThrows(
Exception.class,
() ->
drmSessionManager.preacquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- FORMAT_WITH_DRM_INIT_DATA));
+ /* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
}
@Test
@@ -825,12 +783,11 @@ public class DefaultDrmSessionManagerTest {
.build(/* mediaDrmCallback= */ licenseServer);
drmSessionManager.prepare();
+ drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), PlayerId.UNSET);
DrmSession drmSession =
checkNotNull(
drmSessionManager.acquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- FORMAT_WITH_DRM_INIT_DATA));
+ /* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
drmSessionManager.release();
// The manager's prepareCount is now zero, but the drmSession is keeping it in a 'releasing'
@@ -839,16 +796,12 @@ public class DefaultDrmSessionManagerTest {
Exception.class,
() ->
drmSessionManager.acquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- FORMAT_WITH_DRM_INIT_DATA));
+ /* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
assertThrows(
Exception.class,
() ->
drmSessionManager.preacquireSession(
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- /* eventDispatcher= */ null,
- FORMAT_WITH_DRM_INIT_DATA));
+ /* eventDispatcher= */ null, FORMAT_WITH_DRM_INIT_DATA));
drmSession.release(/* eventDispatcher= */ null);
}
diff --git a/library/core/src/test/java/com/google/android/exoplayer2/source/SampleQueueTest.java b/library/core/src/test/java/com/google/android/exoplayer2/source/SampleQueueTest.java
index 132be88688..037d245a65 100644
--- a/library/core/src/test/java/com/google/android/exoplayer2/source/SampleQueueTest.java
+++ b/library/core/src/test/java/com/google/android/exoplayer2/source/SampleQueueTest.java
@@ -36,6 +36,7 @@ import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.FormatHolder;
import com.google.android.exoplayer2.PlaybackException;
+import com.google.android.exoplayer2.analytics.PlayerId;
import com.google.android.exoplayer2.decoder.DecoderInputBuffer;
import com.google.android.exoplayer2.drm.DrmInitData;
import com.google.android.exoplayer2.drm.DrmSession;
@@ -46,7 +47,6 @@ import com.google.android.exoplayer2.testutil.FakeCryptoConfig;
import com.google.android.exoplayer2.testutil.TestUtil;
import com.google.android.exoplayer2.upstream.Allocator;
import com.google.android.exoplayer2.upstream.DefaultAllocator;
-import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.MimeTypes;
import com.google.android.exoplayer2.util.ParsableByteArray;
import com.google.common.primitives.Bytes;
@@ -146,12 +146,7 @@ public final class SampleQueueTest {
mockDrmSession = Mockito.mock(DrmSession.class);
mockDrmSessionManager = new MockDrmSessionManager(mockDrmSession);
eventDispatcher = new DrmSessionEventListener.EventDispatcher();
- sampleQueue =
- new SampleQueue(
- allocator,
- /* playbackLooper= */ Assertions.checkNotNull(Looper.myLooper()),
- mockDrmSessionManager,
- eventDispatcher);
+ sampleQueue = new SampleQueue(allocator, mockDrmSessionManager, eventDispatcher);
formatHolder = new FormatHolder();
inputBuffer = new DecoderInputBuffer(DecoderInputBuffer.BUFFER_REPLACEMENT_MODE_NORMAL);
}
@@ -424,12 +419,7 @@ public final class SampleQueueTest {
public void isReadyReturnsTrueForClearSampleAndPlayClearSamplesWithoutKeysIsTrue() {
when(mockDrmSession.playClearSamplesWithoutKeys()).thenReturn(true);
// We recreate the queue to ensure the mock DRM session manager flags are taken into account.
- sampleQueue =
- new SampleQueue(
- allocator,
- /* playbackLooper= */ Assertions.checkNotNull(Looper.myLooper()),
- mockDrmSessionManager,
- eventDispatcher);
+ sampleQueue = new SampleQueue(allocator, mockDrmSessionManager, eventDispatcher);
writeTestDataWithEncryptedSections();
assertThat(sampleQueue.isReady(/* loadingFinished= */ false)).isTrue();
}
@@ -574,12 +564,7 @@ public final class SampleQueueTest {
public void allowPlayClearSamplesWithoutKeysReadsClearSamples() {
when(mockDrmSession.playClearSamplesWithoutKeys()).thenReturn(true);
// We recreate the queue to ensure the mock DRM session manager flags are taken into account.
- sampleQueue =
- new SampleQueue(
- allocator,
- /* playbackLooper= */ Assertions.checkNotNull(Looper.myLooper()),
- mockDrmSessionManager,
- eventDispatcher);
+ sampleQueue = new SampleQueue(allocator, mockDrmSessionManager, eventDispatcher);
when(mockDrmSession.getState()).thenReturn(DrmSession.STATE_OPENED);
writeTestDataWithEncryptedSections();
@@ -1246,11 +1231,7 @@ public final class SampleQueueTest {
public void adjustUpstreamFormat() {
String label = "label";
sampleQueue =
- new SampleQueue(
- allocator,
- /* playbackLooper= */ Assertions.checkNotNull(Looper.myLooper()),
- mockDrmSessionManager,
- eventDispatcher) {
+ new SampleQueue(allocator, mockDrmSessionManager, eventDispatcher) {
@Override
public Format getAdjustedUpstreamFormat(Format format) {
return super.getAdjustedUpstreamFormat(copyWithLabel(format, label));
@@ -1266,11 +1247,7 @@ public final class SampleQueueTest {
public void invalidateUpstreamFormatAdjustment() {
AtomicReference label = new AtomicReference<>("label1");
sampleQueue =
- new SampleQueue(
- allocator,
- /* playbackLooper= */ Assertions.checkNotNull(Looper.myLooper()),
- mockDrmSessionManager,
- eventDispatcher) {
+ new SampleQueue(allocator, mockDrmSessionManager, eventDispatcher) {
@Override
public Format getAdjustedUpstreamFormat(Format format) {
return super.getAdjustedUpstreamFormat(copyWithLabel(format, label.get()));
@@ -1770,12 +1747,13 @@ public final class SampleQueueTest {
this.mockDrmSession = mockDrmSession;
}
+ @Override
+ public void setPlayer(Looper playbackLooper, PlayerId playerId) {}
+
@Override
@Nullable
public DrmSession acquireSession(
- Looper playbackLooper,
- @Nullable DrmSessionEventListener.EventDispatcher eventDispatcher,
- Format format) {
+ @Nullable DrmSessionEventListener.EventDispatcher eventDispatcher, Format format) {
return format.drmInitData != null ? mockDrmSession : mockPlaceholderDrmSession;
}
diff --git a/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java
index 5b901bc092..701e07f71b 100644
--- a/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java
+++ b/library/dash/src/main/java/com/google/android/exoplayer2/source/dash/DashMediaSource.java
@@ -22,6 +22,7 @@ import static java.lang.Math.min;
import android.net.Uri;
import android.os.Handler;
+import android.os.Looper;
import android.os.SystemClock;
import android.text.TextUtils;
import android.util.SparseArray;
@@ -559,6 +560,7 @@ public final class DashMediaSource extends BaseMediaSource {
protected void prepareSourceInternal(@Nullable TransferListener mediaTransferListener) {
this.mediaTransferListener = mediaTransferListener;
drmSessionManager.prepare();
+ drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), getPlayerId());
if (sideloadedManifest) {
processManifest(false);
} else {
diff --git a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaSource.java b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaSource.java
index 687d1bb0dd..501cf9ef01 100644
--- a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaSource.java
+++ b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsMediaSource.java
@@ -19,6 +19,7 @@ import static com.google.android.exoplayer2.util.Assertions.checkNotNull;
import static java.lang.annotation.RetentionPolicy.SOURCE;
import android.net.Uri;
+import android.os.Looper;
import android.os.SystemClock;
import androidx.annotation.IntDef;
import androidx.annotation.Nullable;
@@ -466,6 +467,8 @@ public final class HlsMediaSource extends BaseMediaSource
protected void prepareSourceInternal(@Nullable TransferListener mediaTransferListener) {
this.mediaTransferListener = mediaTransferListener;
drmSessionManager.prepare();
+ drmSessionManager.setPlayer(
+ /* playbackLooper= */ checkNotNull(Looper.myLooper()), getPlayerId());
MediaSourceEventListener.EventDispatcher eventDispatcher =
createEventDispatcher(/* mediaPeriodId= */ null);
playlistTracker.start(
diff --git a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java
index 6695c329da..e8a20d431c 100644
--- a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java
+++ b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/HlsSampleStreamWrapper.java
@@ -23,7 +23,6 @@ import static java.lang.Math.min;
import android.net.Uri;
import android.os.Handler;
-import android.os.Looper;
import android.util.SparseIntArray;
import androidx.annotation.Nullable;
import com.google.android.exoplayer2.C;
@@ -1100,12 +1099,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
boolean isAudioVideo = type == C.TRACK_TYPE_AUDIO || type == C.TRACK_TYPE_VIDEO;
HlsSampleQueue sampleQueue =
- new HlsSampleQueue(
- allocator,
- /* playbackLooper= */ handler.getLooper(),
- drmSessionManager,
- drmEventDispatcher,
- overridingDrmInitData);
+ new HlsSampleQueue(allocator, drmSessionManager, drmEventDispatcher, overridingDrmInitData);
sampleQueue.setStartTimeUs(lastSeekPositionUs);
if (isAudioVideo) {
sampleQueue.setDrmInitData(drmInitData);
@@ -1639,11 +1633,10 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
private HlsSampleQueue(
Allocator allocator,
- Looper playbackLooper,
DrmSessionManager drmSessionManager,
DrmSessionEventListener.EventDispatcher eventDispatcher,
Map overridingDrmInitData) {
- super(allocator, playbackLooper, drmSessionManager, eventDispatcher);
+ super(allocator, drmSessionManager, eventDispatcher);
this.overridingDrmInitData = overridingDrmInitData;
}
diff --git a/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java b/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java
index 5295bbab5b..ae65e5146d 100644
--- a/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java
+++ b/library/smoothstreaming/src/main/java/com/google/android/exoplayer2/source/smoothstreaming/SsMediaSource.java
@@ -21,6 +21,7 @@ import static java.lang.Math.min;
import android.net.Uri;
import android.os.Handler;
+import android.os.Looper;
import android.os.SystemClock;
import androidx.annotation.Nullable;
import com.google.android.exoplayer2.C;
@@ -436,6 +437,7 @@ public final class SsMediaSource extends BaseMediaSource
protected void prepareSourceInternal(@Nullable TransferListener mediaTransferListener) {
this.mediaTransferListener = mediaTransferListener;
drmSessionManager.prepare();
+ drmSessionManager.setPlayer(/* playbackLooper= */ Looper.myLooper(), getPlayerId());
if (sideloadedManifest) {
manifestLoaderErrorThrower = new LoaderErrorThrower.Dummy();
processManifest();
diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeMediaSource.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeMediaSource.java
index 7e098bfe78..715b02c24f 100644
--- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeMediaSource.java
+++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeMediaSource.java
@@ -15,11 +15,13 @@
*/
package com.google.android.exoplayer2.testutil;
+import static com.google.android.exoplayer2.util.Assertions.checkNotNull;
import static com.google.android.exoplayer2.util.Assertions.checkState;
import static com.google.android.exoplayer2.util.Util.castNonNull;
import static com.google.common.truth.Truth.assertThat;
import android.os.Handler;
+import android.os.Looper;
import android.os.SystemClock;
import androidx.annotation.Nullable;
import com.google.android.exoplayer2.C;
@@ -212,6 +214,8 @@ public class FakeMediaSource extends BaseMediaSource {
assertThat(preparedSource).isFalse();
transferListener = mediaTransferListener;
drmSessionManager.prepare();
+ drmSessionManager.setPlayer(
+ /* playbackLooper= */ checkNotNull(Looper.myLooper()), getPlayerId());
preparedSource = true;
releasedSource = false;
sourceInfoRefreshHandler = Util.createHandlerForCurrentLooper();
diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeSampleStream.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeSampleStream.java
index f3f235cd2f..6ec284b8dc 100644
--- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeSampleStream.java
+++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeSampleStream.java
@@ -17,7 +17,6 @@ package com.google.android.exoplayer2.testutil;
import static com.google.android.exoplayer2.util.Assertions.checkNotNull;
-import android.os.Looper;
import androidx.annotation.Nullable;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format;
@@ -136,12 +135,7 @@ public class FakeSampleStream implements SampleStream {
DrmSessionEventListener.EventDispatcher drmEventDispatcher,
Format initialFormat,
List fakeSampleStreamItems) {
- this.sampleQueue =
- SampleQueue.createWithDrm(
- allocator,
- /* playbackLooper= */ checkNotNull(Looper.myLooper()),
- drmSessionManager,
- drmEventDispatcher);
+ this.sampleQueue = SampleQueue.createWithDrm(allocator, drmSessionManager, drmEventDispatcher);
this.mediaSourceEventDispatcher = mediaSourceEventDispatcher;
this.sampleStreamItems = new ArrayList<>();
sampleStreamItems.add(FakeSampleStreamItem.format(initialFormat));