From 9face09361e2233dd06ca92e0909ce57c6d10e11 Mon Sep 17 00:00:00 2001 From: aquilescanta Date: Mon, 16 Sep 2019 12:40:05 +0100 Subject: [PATCH] Add ExoMediaDrm.Provider Allows shared ownership of ExoMediaDrms. Shared ownership will allow users to pre-create ExoMediaDrms in their apps, as opposed to having the DrmSessionManager create the ExoMediaDrm. Issue:#4721 PiperOrigin-RevId: 269305850 --- .../android/exoplayer2/drm/ExoMediaDrm.java | 27 ++++++++++++++++--- .../exoplayer2/drm/FrameworkMediaDrm.java | 5 ++++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/drm/ExoMediaDrm.java b/library/core/src/main/java/com/google/android/exoplayer2/drm/ExoMediaDrm.java index ca776267aa8..e11656509df 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/drm/ExoMediaDrm.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/drm/ExoMediaDrm.java @@ -33,9 +33,20 @@ */ public interface ExoMediaDrm { - /** - * @see MediaDrm#EVENT_KEY_REQUIRED - */ + /** {@link ExoMediaDrm} instances provider. */ + interface Provider { + + /** + * Returns an {@link ExoMediaDrm} instance with acquired ownership for the DRM scheme identified + * by the given UUID. + * + *

Each call to this method must have a corresponding call to {@link ExoMediaDrm#release()} + * to ensure correct resource management. + */ + ExoMediaDrm acquireExoMediaDrm(UUID uuid); + } + + /** @see MediaDrm#EVENT_KEY_REQUIRED */ @SuppressWarnings("InlinedApi") int EVENT_KEY_REQUIRED = MediaDrm.EVENT_KEY_REQUIRED; /** @@ -235,6 +246,16 @@ byte[] provideKeyResponse(byte[] scope, byte[] response) Map queryKeyStatus(byte[] sessionId); /** + * Acquires ownership over this instance, which must be released by calling {@link #release()}. + */ + void acquire(); + + /** + * Releases ownership of this instance. If a call to this method causes this instance to have no + * acquired ownerships, releases the underlying resources. + * + *

Callers of this method must not make any further use of this instance. + * * @see MediaDrm#release() */ void release(); diff --git a/library/core/src/main/java/com/google/android/exoplayer2/drm/FrameworkMediaDrm.java b/library/core/src/main/java/com/google/android/exoplayer2/drm/FrameworkMediaDrm.java index 15a4b3da4ab..983a7139f2f 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/drm/FrameworkMediaDrm.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/drm/FrameworkMediaDrm.java @@ -185,6 +185,11 @@ public Map queryKeyStatus(byte[] sessionId) { return mediaDrm.queryKeyStatus(sessionId); } + @Override + public void acquire() { + // TODO: Implement reference counting. + } + @Override public void release() { mediaDrm.release();