Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(910)

Unified Diff: media/base/android/java/src/org/chromium/media/MediaDrmBridge.java

Issue 962793005: Adds MediaClientAndroid to support embedder/MediaDrmBridge interaction. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rename createSession to createSessionFromNative to avoid bug in FindBugs Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/base/android/BUILD.gn ('k') | media/base/android/media_client_android.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/base/android/java/src/org/chromium/media/MediaDrmBridge.java
diff --git a/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java b/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java
index 8f32ccb85b000a9c9c511f5d1424cfaffbc902cb..9d49232d82f78dd5b74a9e22d48b821396a943f2 100644
--- a/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java
+++ b/media/base/android/java/src/org/chromium/media/MediaDrmBridge.java
@@ -22,7 +22,6 @@ import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.HashMap;
@@ -107,11 +106,14 @@ public class MediaDrmBridge {
private static class PendingCreateSessionData {
private final byte[] mInitData;
private final String mMimeType;
+ private final HashMap<String, String> mOptionalParameters;
private final long mPromiseId;
- private PendingCreateSessionData(byte[] initData, String mimeType, long promiseId) {
+ private PendingCreateSessionData(byte[] initData, String mimeType,
+ HashMap<String, String> optionalParameters, long promiseId) {
mInitData = initData;
mMimeType = mimeType;
+ mOptionalParameters = optionalParameters;
mPromiseId = promiseId;
}
@@ -123,6 +125,10 @@ public class MediaDrmBridge {
return mMimeType;
}
+ private HashMap<String, String> optionalParameters() {
+ return mOptionalParameters;
+ }
+
private long promiseId() {
return mPromiseId;
}
@@ -410,16 +416,20 @@ public class MediaDrmBridge {
* @param sessionId ID of session on which we need to get the key request.
* @param data Data needed to get the key request.
* @param mime Mime type to get the key request.
+ * @param optionalParameters Optional parameters to pass to the DRM plugin.
*
* @return the key request.
*/
- private MediaDrm.KeyRequest getKeyRequest(byte[] sessionId, byte[] data, String mime)
+ private MediaDrm.KeyRequest getKeyRequest(
+ byte[] sessionId, byte[] data, String mime, HashMap<String, String> optionalParameters)
throws android.media.NotProvisionedException {
assert mMediaDrm != null;
assert mMediaCrypto != null;
assert !mProvisioningPending;
- HashMap<String, String> optionalParameters = new HashMap<String, String>();
+ if (optionalParameters == null) {
+ optionalParameters = new HashMap<String, String>();
+ }
MediaDrm.KeyRequest request = mMediaDrm.getKeyRequest(
sessionId, data, mime, MediaDrm.KEY_TYPE_STREAMING, optionalParameters);
String result = (request != null) ? "successed" : "failed";
@@ -433,12 +443,14 @@ public class MediaDrmBridge {
*
* @param initData Data needed to generate the key request.
* @param mime Mime type.
+ * @param optionalParameters Optional parameters to pass to the DRM plugin.
* @param promiseId Promise ID for the createSession() call.
*/
- private void savePendingCreateSessionData(byte[] initData, String mime, long promiseId) {
+ private void savePendingCreateSessionData(byte[] initData, String mime,
+ HashMap<String, String> optionalParameters, long promiseId) {
Log.d(TAG, "savePendingCreateSessionData()");
mPendingCreateSessionDataQueue.offer(
- new PendingCreateSessionData(initData, mime, promiseId));
+ new PendingCreateSessionData(initData, mime, optionalParameters, promiseId));
}
/**
@@ -456,8 +468,9 @@ public class MediaDrmBridge {
PendingCreateSessionData pendingData = mPendingCreateSessionDataQueue.poll();
byte[] initData = pendingData.initData();
String mime = pendingData.mimeType();
+ HashMap<String, String> optionalParameters = pendingData.optionalParameters();
long promiseId = pendingData.promiseId();
- createSession(initData, mime, promiseId);
+ createSession(initData, mime, optionalParameters, promiseId);
}
}
@@ -474,14 +487,35 @@ public class MediaDrmBridge {
}
/**
+ * createSession interface to be called from native using primitive types.
+ * @see createSession(byte[], String, HashMap<String, String>, long)
+ */
+ @CalledByNative
+ private void createSessionFromNative(
+ byte[] initData, String mime, String[] optionalParamsArray, long promiseId) {
+ HashMap<String, String> optionalParameters = new HashMap<String, String>();
+ if (optionalParamsArray != null) {
+ if (optionalParamsArray.length % 2 != 0) {
+ throw new IllegalArgumentException(
+ "Additional data array doesn't have equal keys/values");
+ }
+ for (int i = 0; i < optionalParamsArray.length; i += 2) {
+ optionalParameters.put(optionalParamsArray[i], optionalParamsArray[i + 1]);
+ }
+ }
+ createSession(initData, mime, optionalParameters, promiseId);
+ }
+
+ /**
* Create a session, and generate a request with |initData| and |mime|.
*
* @param initData Data needed to generate the key request.
* @param mime Mime type.
+ * @param optionalParameters Additional data to pass to getKeyRequest.
* @param promiseId Promise ID for this call.
*/
- @CalledByNative
- private void createSession(byte[] initData, String mime, long promiseId) {
+ private void createSession(byte[] initData, String mime,
+ HashMap<String, String> optionalParameters, long promiseId) {
Log.d(TAG, "createSession()");
if (mMediaDrm == null) {
Log.e(TAG, "createSession() called when MediaDrm is null.");
@@ -490,7 +524,7 @@ public class MediaDrmBridge {
if (mProvisioningPending) {
assert mMediaCrypto == null;
- savePendingCreateSessionData(initData, mime, promiseId);
+ savePendingCreateSessionData(initData, mime, optionalParameters, promiseId);
return;
}
@@ -514,7 +548,7 @@ public class MediaDrmBridge {
assert !sessionExists(sessionId);
MediaDrm.KeyRequest request = null;
- request = getKeyRequest(sessionId, initData, mime);
+ request = getKeyRequest(sessionId, initData, mime, optionalParameters);
if (request == null) {
mMediaDrm.closeSession(sessionId);
onPromiseRejected(promiseId, "Generate request failed.");
@@ -531,7 +565,7 @@ public class MediaDrmBridge {
if (newSessionOpened) {
mMediaDrm.closeSession(sessionId);
}
- savePendingCreateSessionData(initData, mime, promiseId);
+ savePendingCreateSessionData(initData, mime, optionalParameters, promiseId);
startProvisioning();
}
}
@@ -832,7 +866,7 @@ public class MediaDrmBridge {
String mime = mSessionIds.get(ByteBuffer.wrap(sessionId));
MediaDrm.KeyRequest request = null;
try {
- request = getKeyRequest(sessionId, data, mime);
+ request = getKeyRequest(sessionId, data, mime, null);
} catch (android.media.NotProvisionedException e) {
Log.e(TAG, "Device not provisioned", e);
startProvisioning();
@@ -933,15 +967,6 @@ public class MediaDrmBridge {
}
}
- public static void addKeySystemUuidMapping(String keySystem, UUID uuid) {
- ByteBuffer uuidBuffer = ByteBuffer.allocateDirect(16);
- // MSB (byte) should be positioned at the first element.
- uuidBuffer.order(ByteOrder.BIG_ENDIAN);
- uuidBuffer.putLong(uuid.getMostSignificantBits());
- uuidBuffer.putLong(uuid.getLeastSignificantBits());
- nativeAddKeySystemUuidMapping(keySystem, uuidBuffer);
- }
-
private native void nativeOnMediaCryptoReady(long nativeMediaDrmBridge);
private native void nativeOnPromiseResolved(long nativeMediaDrmBridge, long promiseId);
@@ -960,6 +985,4 @@ public class MediaDrmBridge {
private native void nativeOnResetDeviceCredentialsCompleted(
long nativeMediaDrmBridge, boolean success);
-
- private static native void nativeAddKeySystemUuidMapping(String keySystem, ByteBuffer uuid);
}
« no previous file with comments | « media/base/android/BUILD.gn ('k') | media/base/android/media_client_android.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698