MediaCas: update tests according to API changes
bug: 22804304
Change-Id: Ib357b2ea1e9fa948e59de2745bda5b7678445a54
diff --git a/tests/tests/media/src/android/media/cts/MediaCasTest.java b/tests/tests/media/src/android/media/cts/MediaCasTest.java
index d2ae849..a3cdefc 100644
--- a/tests/tests/media/src/android/media/cts/MediaCasTest.java
+++ b/tests/tests/media/src/android/media/cts/MediaCasTest.java
@@ -18,6 +18,7 @@
import android.media.MediaCas;
import android.media.MediaCas.PluginDescriptor;
+import android.media.MediaCas.Session;
import android.media.MediaCasException;
import android.media.MediaCasException.UnsupportedCasException;
import android.media.MediaCasStateException;
@@ -181,10 +182,10 @@
}, null);
} finally {
if (mediaCas != null) {
- mediaCas.release();
+ mediaCas.close();
}
if (descrambler != null) {
- descrambler.release();
+ descrambler.close();
}
}
}
@@ -213,10 +214,10 @@
}
} finally {
if (unsupportedCAS != null) {
- unsupportedCAS.release();
+ unsupportedCAS.close();
}
if (unsupportedDescrambler != null) {
- unsupportedDescrambler.release();
+ unsupportedDescrambler.close();
}
}
}
@@ -247,24 +248,22 @@
byte[] pvtData = new byte[256];
mediaCas.setPrivateData(pvtData);
- int program_number = 72849;
- int elementary_PID = 256;
- byte[] sessionId = mediaCas.openSession(72849);
- if (sessionId == null || sessionId.length == 0) {
+ Session session = mediaCas.openSession();
+ if (session == null) {
fail("Can't open session for program");
}
- mediaCas.setSessionPrivateData(sessionId, pvtData);
+ session.setPrivateData(pvtData);
- byte[] streamSessionId = mediaCas.openSession(72849, 256);
- if (streamSessionId == null || streamSessionId.length == 0) {
+ Session streamSession = mediaCas.openSession();
+ if (streamSession == null) {
fail("Can't open session for stream");
}
- mediaCas.setSessionPrivateData(streamSessionId, pvtData);
+ streamSession.setPrivateData(pvtData);
- descrambler.setMediaCasSession(sessionId);
+ descrambler.setMediaCasSession(session);
- descrambler.setMediaCasSession(streamSessionId);
+ descrambler.setMediaCasSession(streamSession);
mediaCas.refreshEntitlements(3, null);
@@ -291,8 +290,8 @@
mediaCas.processEmm(emmData);
byte[] ecmData = loadByteArrayFromString(sEcmBufferStr);
- mediaCas.processEcm(sessionId, ecmData);
- mediaCas.processEcm(streamSessionId, ecmData);
+ session.processEcm(ecmData);
+ streamSession.processEcm(ecmData);
ByteBuffer outputBuf = descrambleTestInputBuffer(descrambler);
ByteBuffer expectedOutputBuf = ByteBuffer.wrap(
@@ -300,14 +299,14 @@
assertTrue("Incorrect decryption result",
expectedOutputBuf.compareTo(outputBuf) == 0);
- mediaCas.closeSession(sessionId);
- mediaCas.closeSession(streamSessionId);
+ session.close();
+ streamSession.close();
} finally {
if (mediaCas != null) {
- mediaCas.release();
+ mediaCas.close();
}
if (descrambler != null) {
- descrambler.release();
+ descrambler.close();
}
}
}
@@ -324,28 +323,28 @@
descrambler = new MediaDescrambler(sClearKeySystemId);
mediaCas.provision(sProvisionStr);
- byte[] sessionId = mediaCas.openSession(72849);
- if (sessionId == null || sessionId.length == 0) {
+ Session session = mediaCas.openSession();
+ if (session == null) {
fail("Can't open session for program");
}
- byte[] streamSessionId = mediaCas.openSession(72849, 256);
- if (streamSessionId == null || streamSessionId.length == 0) {
+ Session streamSession = mediaCas.openSession();
+ if (streamSession == null) {
fail("Can't open session for stream");
}
- mediaCas.release();
+ mediaCas.close();
mediaCas = null;
try {
- descrambler.setMediaCasSession(sessionId);
+ descrambler.setMediaCasSession(session);
fail("Program session not closed after MediaCas is released");
} catch (MediaCasStateException e) {
Log.d(TAG, "setMediaCasSession throws "
+ e.getDiagnosticInfo() + " (as expected)");
}
try {
- descrambler.setMediaCasSession(streamSessionId);
+ descrambler.setMediaCasSession(streamSession);
fail("Stream session not closed after MediaCas is released");
} catch (MediaCasStateException e) {
Log.d(TAG, "setMediaCasSession throws "
@@ -353,10 +352,10 @@
}
} finally {
if (mediaCas != null) {
- mediaCas.release();
+ mediaCas.close();
}
if (descrambler != null) {
- descrambler.release();
+ descrambler.close();
}
}
}
@@ -393,26 +392,31 @@
Log.d(TAG, "processEmm throws ArrayIndexOutOfBoundsException (as expected)");
}
- byte[] invalidSessionId = new byte[] {};
+ // open a session, then close it so that it should become invalid
+ Session invalidSession = mediaCas.openSession();
+ if (invalidSession == null) {
+ fail("Can't open session for program");
+ }
+ invalidSession.close();
byte[] ecmData = loadByteArrayFromString(sEcmBufferStr);
// processEcm should fail with an invalid session id
try {
- mediaCas.processEcm(invalidSessionId, ecmData);
+ invalidSession.processEcm(ecmData);
fail("processEcm shouldn't succeed with invalid session id");
} catch (MediaCasStateException e) {
Log.d(TAG, "processEcm throws " + e.getDiagnosticInfo() + " (as expected)");
}
- byte[] sessionId = mediaCas.openSession(72849);
- if (sessionId == null || sessionId.length == 0) {
+ Session session = mediaCas.openSession();
+ if (session == null) {
fail("Can't open session for program");
}
// processEcm should fail without provisioning
try {
- mediaCas.processEcm(sessionId, ecmData);
+ session.processEcm(ecmData);
fail("processEcm shouldn't succeed without provisioning");
} catch (MediaCasException.NotProvisionedException e) {
Log.d(TAG, "processEcm throws NotProvisionedException (as expected)");
@@ -423,7 +427,7 @@
// processEcm should fail with ecm buffer that's too short
try {
- mediaCas.processEcm(sessionId, ecmData, 0, 8);
+ session.processEcm(ecmData, 0, 8);
fail("processEcm shouldn't succeed with truncated ecm");
} catch (IllegalArgumentException e) {
Log.d(TAG, "processEcm throws " + e.toString() + " (as expected)");
@@ -432,7 +436,7 @@
// processEcm should fail with ecm with bad descriptor count
try {
ecmData[17] = 3; // change the descriptor count field to 3 (invalid)
- mediaCas.processEcm(sessionId, ecmData);
+ session.processEcm(ecmData);
fail("processEcm shouldn't succeed with altered descriptor count");
} catch (MediaCasStateException e) {
Log.d(TAG, "processEcm throws " + e.getDiagnosticInfo() + " (as expected)");
@@ -444,7 +448,7 @@
// setMediaCasSession should fail with an invalid session id
try {
- descrambler.setMediaCasSession(invalidSessionId);
+ descrambler.setMediaCasSession(invalidSession);
fail("setMediaCasSession shouldn't succeed with invalid session id");
} catch (MediaCasStateException e) {
Log.d(TAG, "setMediaCasSession throws "
@@ -460,7 +464,7 @@
}
// Now set a valid session, should still fail because no valid ecm is processed
- descrambler.setMediaCasSession(sessionId);
+ descrambler.setMediaCasSession(session);
try {
ByteBuffer outputBuf = descrambleTestInputBuffer(descrambler);
fail("descramble should fail without valid ecm");
@@ -469,10 +473,10 @@
}
} finally {
if (mediaCas != null) {
- mediaCas.release();
+ mediaCas.close();
}
if (descrambler != null) {
- descrambler.release();
+ descrambler.close();
}
}
}
@@ -537,7 +541,7 @@
ByteBuffer inputBuf = ByteBuffer.wrap(
loadByteArrayFromString(sInputBufferStr));
ByteBuffer outputBuf = ByteBuffer.allocate(inputBuf.capacity());
- descrambler.descramble(inputBuf, 0, outputBuf, 0, cryptoInfo);
+ descrambler.descramble(inputBuf, outputBuf, cryptoInfo);
return outputBuf;
}
diff --git a/tests/tests/media/src/android/media/cts/MediaCodecClearKeyPlayer.java b/tests/tests/media/src/android/media/cts/MediaCodecClearKeyPlayer.java
index 253a5ab..99f2790 100644
--- a/tests/tests/media/src/android/media/cts/MediaCodecClearKeyPlayer.java
+++ b/tests/tests/media/src/android/media/cts/MediaCodecClearKeyPlayer.java
@@ -230,8 +230,6 @@
private void prepareVideo() throws IOException {
boolean hasVideo = false;
- android.media.DrmInitData drmInitData = mVideoExtractor.getDrmInitData();
-
for (int i = mVideoExtractor.getTrackCount(); i-- > 0;) {
MediaFormat format = mVideoExtractor.getTrackFormat(i);
String mime = format.getString(MediaFormat.KEY_MIME);
@@ -244,11 +242,10 @@
Log.d(TAG, "video track #" + i + " " + format + " " + mime +
" Width:" + mMediaFormatWidth + ", Height:" + mMediaFormatHeight);
- if (mScrambled && drmInitData != null && mime.startsWith("video/")) {
- android.media.DrmInitData.SchemeInitData schemeInitData =
- drmInitData.get(new UUID(0, i));
- if (schemeInitData != null) {
- mDescrambler.setMediaCasSession(schemeInitData.data);
+ if (mScrambled && mime.startsWith("video/")) {
+ MediaExtractor.CasInfo casInfo = mVideoExtractor.getCasInfo(i);
+ if (casInfo != null && casInfo.getSession() != null) {
+ mDescrambler.setMediaCasSession(casInfo.getSession());
}
}
@@ -291,23 +288,18 @@
private void initCasAndDescrambler(MediaExtractor extractor) throws MediaCasException {
int trackCount = extractor.getTrackCount();
- android.media.DrmInitData drmInitData = extractor.getDrmInitData();
for (int trackId = 0; trackId < trackCount; trackId++) {
android.media.MediaFormat format = extractor.getTrackFormat(trackId);
String mime = format.getString(android.media.MediaFormat.KEY_MIME);
Log.d(TAG, "track "+ trackId + ": " + mime);
if ("video/scrambled".equals(mime) || "audio/scrambled".equals(mime)) {
- if (drmInitData == null) {
- throw new IllegalArgumentException("found scrambled track without drmInitData!");
+ MediaExtractor.CasInfo casInfo = extractor.getCasInfo(trackId);
+ if (casInfo != null) {
+ mMediaCas = new MediaCas(casInfo.getSystemId());
+ mDescrambler = new MediaDescrambler(casInfo.getSystemId());
+ mMediaCas.provision(sProvisionStr);
+ extractor.setMediaCas(mMediaCas);
}
- android.media.DrmInitData.SchemeInitData schemeInitData =
- drmInitData.get(new UUID(0, trackId));
- int CA_system_id = (schemeInitData.data[0] & 0xff)
- | ((schemeInitData.data[1] & 0xff) << 8);
- mMediaCas = new MediaCas(CA_system_id);
- mDescrambler = new MediaDescrambler(CA_system_id);
- mMediaCas.provision(sProvisionStr);
- extractor.setMediaCas(mMediaCas);
}
}
}
@@ -550,12 +542,12 @@
}
if (mMediaCas != null) {
- mMediaCas.release();
+ mMediaCas.close();
mMediaCas = null;
}
if (mDescrambler != null) {
- mDescrambler.release();
+ mDescrambler.close();
mDescrambler = null;
}