Merge "* DO NOT MERGE * Fixes crashes on Watch device." into oreo-mr1-cts-dev
diff --git a/tests/tests/media/src/android/media/cts/ClearKeySystemTest.java b/tests/tests/media/src/android/media/cts/ClearKeySystemTest.java
index d43dce1..a6edd37 100644
--- a/tests/tests/media/src/android/media/cts/ClearKeySystemTest.java
+++ b/tests/tests/media/src/android/media/cts/ClearKeySystemTest.java
@@ -15,45 +15,33 @@
*/
package android.media.cts;
-import com.android.compatibility.common.util.ApiLevelUtil;
-
-import android.content.Context;
import android.content.pm.PackageManager;
-import android.media.MediaCodec;
-import android.media.MediaCodecInfo;
+import android.media.CamcorderProfile;
import android.media.MediaCodecInfo.CodecCapabilities;
-import android.media.MediaCodecInfo.CodecProfileLevel;
import android.media.MediaCodecList;
import android.media.MediaDrm;
import android.media.MediaDrmException;
import android.media.MediaFormat;
-import android.media.CamcorderProfile;
import android.net.Uri;
-import android.os.Environment;
import android.os.Looper;
import android.support.annotation.NonNull;
-import android.test.ActivityInstrumentationTestCase2;
import android.util.Base64;
import android.util.Log;
import android.view.SurfaceHolder;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.concurrent.TimeUnit;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-import java.util.Vector;
+import com.android.compatibility.common.util.ApiLevelUtil;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
+import java.nio.charset.Charset;
+import java.util.HashMap;
+import java.util.Set;
+import java.util.UUID;
+import java.util.Vector;
+import java.util.concurrent.TimeUnit;
+
/**
* Tests of MediaPlayer streaming capabilities.
*/
@@ -99,8 +87,8 @@
private byte[] mSessionId;
private Looper mLooper;
private MediaCodecClearKeyPlayer mMediaCodecPlayer;
- private MediaDrm mDrm;
- private Object mLock = new Object();
+ private MediaDrm mDrm = null;
+ private final Object mLock = new Object();
private SurfaceHolder mSurfaceHolder;
@Override
@@ -116,6 +104,10 @@
super.tearDown();
}
+ private boolean isWatchDevice() {
+ return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH);
+ }
+
private boolean deviceHasMediaDrm() {
// ClearKey is introduced after KitKat.
if (ApiLevelUtil.isAtMost(android.os.Build.VERSION_CODES.KITKAT)) {
@@ -226,9 +218,17 @@
}
private @NonNull MediaDrm startDrm(final byte[][] clearKeys, final String initDataType, final UUID drmSchemeUuid) {
+ if (!MediaDrm.isCryptoSchemeSupported(drmSchemeUuid)) {
+ throw new Error("Crypto scheme is not supported.");
+ }
+
new Thread() {
@Override
public void run() {
+ if (mDrm != null) {
+ Log.e(TAG, "Failed to startDrm: already started");
+ return;
+ }
// Set up a looper to handle events
Looper.prepare();
@@ -280,6 +280,8 @@
Log.e(TAG, "invalid drm specified in stopDrm");
}
mLooper.quit();
+ mDrm.release();
+ mDrm = null;
}
private @NonNull byte[] openSession(MediaDrm drm) {
@@ -342,14 +344,15 @@
Uri audioUrl, boolean audioEncrypted,
Uri videoUrl, boolean videoEncrypted,
int videoWidth, int videoHeight, boolean scrambled) throws Exception {
+
+ if (isWatchDevice()) {
+ return;
+ }
+
MediaDrm drm = null;
mSessionId = null;
if (!scrambled) {
drm = startDrm(clearKeys, initDataType, drmSchemeUuid);
- if (!drm.isCryptoSchemeSupported(drmSchemeUuid)) {
- stopDrm(drm);
- throw new Error("Crypto scheme is not supported.");
- }
mSessionId = openSession(drm);
}
@@ -432,12 +435,15 @@
}
public void testQueryKeyStatus() throws Exception {
- MediaDrm drm = startDrm(new byte[][] { CLEAR_KEY_CENC }, "cenc", COMMON_PSSH_SCHEME_UUID);
- if (!drm.isCryptoSchemeSupported(COMMON_PSSH_SCHEME_UUID)) {
- stopDrm(drm);
- throw new Error("Crypto scheme is not supported.");
+ if (isWatchDevice()) {
+ // skip this test on watch because it calls
+ // addTrack that requires codec
+ return;
}
+ MediaDrm drm = startDrm(new byte[][] { CLEAR_KEY_CENC }, "cenc",
+ CLEARKEY_SCHEME_UUID);
+
mSessionId = openSession(drm);
// Test default key status, should not be defined
@@ -497,7 +503,7 @@
public void testClearKeyPlaybackWebm() throws Exception {
testClearKeyPlayback(
- COMMON_PSSH_SCHEME_UUID,
+ CLEARKEY_SCHEME_UUID,
MIME_VIDEO_VP8, new String[0],
"webm", new byte[][] { CLEAR_KEY_WEBM },
WEBM_URL, true,
@@ -507,7 +513,7 @@
public void testClearKeyPlaybackMpeg2ts() throws Exception {
testClearKeyPlayback(
- COMMON_PSSH_SCHEME_UUID,
+ CLEARKEY_SCHEME_UUID,
MIME_VIDEO_AVC, new String[0],
"mpeg2ts", null,
MPEG2TS_SCRAMBLED_URL, false,
@@ -517,7 +523,7 @@
public void testPlaybackMpeg2ts() throws Exception {
testClearKeyPlayback(
- COMMON_PSSH_SCHEME_UUID,
+ CLEARKEY_SCHEME_UUID,
MIME_VIDEO_AVC, new String[0],
"mpeg2ts", null,
MPEG2TS_CLEAR_URL, false,
diff --git a/tests/tests/media/src/android/media/cts/NativeClearKeySystemTest.java b/tests/tests/media/src/android/media/cts/NativeClearKeySystemTest.java
index 45b2b8b..c44a024 100644
--- a/tests/tests/media/src/android/media/cts/NativeClearKeySystemTest.java
+++ b/tests/tests/media/src/android/media/cts/NativeClearKeySystemTest.java
@@ -15,13 +15,11 @@
*/
package android.media.cts;
-import static org.junit.Assert.assertThat;
-import static org.junit.matchers.JUnitMatchers.containsString;
-
+import android.content.pm.PackageManager;
+import android.media.MediaDrm;
import android.net.Uri;
import android.util.Log;
import android.view.Surface;
-import android.view.SurfaceHolder;
import com.android.compatibility.common.util.ApiLevelUtil;
import com.android.compatibility.common.util.MediaUtils;
@@ -29,9 +27,11 @@
import java.nio.ByteBuffer;
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.UUID;
+import static org.junit.Assert.assertThat;
+import static org.junit.matchers.JUnitMatchers.containsString;
+
/**
* Tests MediaDrm NDK APIs. ClearKey system uses a subset of NDK APIs,
* this test only tests the APIs that are supported by ClearKey system.
@@ -96,6 +96,21 @@
super.tearDown();
}
+ private boolean watchHasNoClearkeySupport() {
+ if (!MediaDrm.isCryptoSchemeSupported(CLEARKEY_SCHEME_UUID)) {
+ if (isWatchDevice()) {
+ return true;
+ } else {
+ throw new Error("Crypto scheme is not supported");
+ }
+ }
+ return false;
+ }
+
+ private boolean isWatchDevice() {
+ return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH);
+ }
+
private boolean deviceHasMediaDrm() {
// ClearKey is introduced after KitKat.
if (ApiLevelUtil.isAtMost(android.os.Build.VERSION_CODES.KITKAT)) {
@@ -113,6 +128,10 @@
}
public void testIsCryptoSchemeSupported() throws Exception {
+ if (watchHasNoClearkeySupport()) {
+ return;
+ }
+
assertTrue(isCryptoSchemeSupportedNative(uuidByteArray(COMMON_PSSH_SCHEME_UUID)));
assertTrue(isCryptoSchemeSupportedNative(uuidByteArray(CLEARKEY_SCHEME_UUID)));
}
@@ -128,12 +147,20 @@
}
public void testQueryKeyStatus() throws Exception {
- assertTrue(testQueryKeyStatusNative(uuidByteArray(COMMON_PSSH_SCHEME_UUID)));
+ if (watchHasNoClearkeySupport()) {
+ return;
+ }
+
+ assertTrue(testQueryKeyStatusNative(uuidByteArray(CLEARKEY_SCHEME_UUID)));
}
public void testGetPropertyString() throws Exception {
+ if (watchHasNoClearkeySupport()) {
+ return;
+ }
+
StringBuffer value = new StringBuffer();
- testGetPropertyStringNative(uuidByteArray(COMMON_PSSH_SCHEME_UUID), "description", value);
+ testGetPropertyStringNative(uuidByteArray(CLEARKEY_SCHEME_UUID), "description", value);
assertEquals("ClearKey CDM", value.toString());
value.delete(0, value.length());
@@ -145,7 +172,7 @@
StringBuffer value = new StringBuffer();
try {
- testGetPropertyStringNative(uuidByteArray(COMMON_PSSH_SCHEME_UUID),
+ testGetPropertyStringNative(uuidByteArray(CLEARKEY_SCHEME_UUID),
"unknown-property", value);
fail("Should have thrown an exception");
} catch (RuntimeException e) {
@@ -170,6 +197,10 @@
UUID drmSchemeUuid, String mimeType, /*String initDataType,*/ Uri audioUrl, Uri videoUrl,
int videoWidth, int videoHeight) throws Exception {
+ if (isWatchDevice()) {
+ return;
+ }
+
if (!isCryptoSchemeSupportedNative(uuidByteArray(drmSchemeUuid))) {
throw new Error("Crypto scheme is not supported.");
}