Minor DefaultDrmSessionManager tweaks

PiperOrigin-RevId: 269574864
This commit is contained in:
olly 2019-09-17 16:30:31 +01:00 committed by Oliver Woodman
parent 5df2f142b4
commit 656c97f122
2 changed files with 35 additions and 30 deletions

View file

@ -343,7 +343,8 @@ public class DefaultDrmSessionManager<T extends ExoMediaCrypto>
/**
* Sets the mode, which determines the role of sessions acquired from the instance. This must be
* called before {@link #acquireSession(Looper, DrmInitData)} is called.
* called before {@link #acquireSession(Looper, DrmInitData)} or {@link
* #acquirePlaceholderSession(Looper)} is called.
*
* <p>By default, the mode is {@link #MODE_PLAYBACK} and a streaming license is requested when
* required.
@ -410,6 +411,7 @@ public class DefaultDrmSessionManager<T extends ExoMediaCrypto>
@Override
@Nullable
public DrmSession<T> acquirePlaceholderSession(Looper playbackLooper) {
assertExpectedPlaybackLooper(playbackLooper);
if (!allowPlaceholderSessions || mediaDrm.getExoMediaCryptoType() == null) {
return null;
}
@ -426,6 +428,7 @@ public class DefaultDrmSessionManager<T extends ExoMediaCrypto>
@Override
public DrmSession<T> acquireSession(Looper playbackLooper, DrmInitData drmInitData) {
assertExpectedPlaybackLooper(playbackLooper);
maybeCreateMediaDrmHandler(playbackLooper);
List<SchemeData> schemeDatas = null;
@ -461,34 +464,6 @@ public class DefaultDrmSessionManager<T extends ExoMediaCrypto>
return session;
}
private DefaultDrmSession<T> createNewDefaultSession(
@Nullable List<SchemeData> schemeDatas, boolean isPlaceholderSession) {
return new DefaultDrmSession<>(
uuid,
mediaDrm,
/* provisioningManager= */ this,
/* releaseCallback= */ this::onSessionReleased,
schemeDatas,
mode,
isPlaceholderSession,
offlineLicenseKeySetId,
optionalKeyRequestParameters,
callback,
Assertions.checkNotNull(playbackLooper),
eventDispatcher,
loadErrorHandlingPolicy);
}
private void maybeCreateMediaDrmHandler(Looper playbackLooper) {
Assertions.checkState(this.playbackLooper == null || this.playbackLooper == playbackLooper);
if (sessions.isEmpty()) {
this.playbackLooper = playbackLooper;
if (mediaDrmHandler == null) {
mediaDrmHandler = new MediaDrmHandler(playbackLooper);
}
}
}
@Override
@Nullable
public Class<T> getExoMediaCryptoType(DrmInitData drmInitData) {
@ -528,6 +503,35 @@ public class DefaultDrmSessionManager<T extends ExoMediaCrypto>
// Internal methods.
private void assertExpectedPlaybackLooper(Looper playbackLooper) {
Assertions.checkState(this.playbackLooper == null || this.playbackLooper == playbackLooper);
this.playbackLooper = playbackLooper;
}
private void maybeCreateMediaDrmHandler(Looper playbackLooper) {
if (mediaDrmHandler == null) {
mediaDrmHandler = new MediaDrmHandler(playbackLooper);
}
}
private DefaultDrmSession<T> createNewDefaultSession(
@Nullable List<SchemeData> schemeDatas, boolean isPlaceholderSession) {
return new DefaultDrmSession<>(
uuid,
mediaDrm,
/* provisioningManager= */ this,
/* releaseCallback= */ this::onSessionReleased,
schemeDatas,
mode,
isPlaceholderSession,
offlineLicenseKeySetId,
optionalKeyRequestParameters,
callback,
Assertions.checkNotNull(playbackLooper),
eventDispatcher,
loadErrorHandlingPolicy);
}
private void onSessionReleased(DefaultDrmSession<T> drmSession) {
sessions.remove(drmSession);
if (placeholderDrmSession == drmSession) {

View file

@ -18,6 +18,7 @@ package com.google.android.exoplayer2.drm;
import android.media.MediaDrmException;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import com.google.android.exoplayer2.util.Util;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -110,7 +111,7 @@ public final class DummyExoMediaDrm<T extends ExoMediaCrypto> implements ExoMedi
@Override
public byte[] getPropertyByteArray(String propertyName) {
return new byte[0];
return Util.EMPTY_BYTE_ARRAY;
}
@Override