Pass explicit securityLevel into MediaDrm.requiresSecureDecoder

Previous to this change, `FrameworkMediaDrm.requiresSecureDecoder`
ignores its `sessionId` parameter on API 31+, and uses only the
`mimeType` parameter. This means the result [assumes the session is
opened at the 'default security
level'](https://developer.android.com/reference/android/media/MediaDrm#requiresSecureDecoder(java.lang.String)):
> The default security level is defined as the highest security level
> supported on the device.

This change is a no-op in all (?) cases, because the `ExoMediaDrm`
interface only exposes the zero-arg `openSession()` method, which in the
framework case **also** assumes the highest security level is preferred:
> By default, sessions are opened at the native security level of the
> device.

However, it seems more obviously correct to only make this
"highest/native security level" assumption in one place
(`openSession()`), and check the session's **actual** security level
everywhere else.

Issue: androidx/media#1603
PiperOrigin-RevId: 662872860
This commit is contained in:
ibaker 2024-08-14 04:49:10 -07:00 committed by Copybara-Service
parent e9cfd72083
commit 9d62845c45

View File

@ -293,7 +293,8 @@ public final class FrameworkMediaDrm implements ExoMediaDrm {
public boolean requiresSecureDecoder(byte[] sessionId, String mimeType) {
boolean result;
if (Util.SDK_INT >= 31 && isMediaDrmRequiresSecureDecoderImplemented()) {
result = Api31.requiresSecureDecoder(mediaDrm, mimeType);
result =
Api31.requiresSecureDecoder(mediaDrm, mimeType, mediaDrm.getSecurityLevel(sessionId));
} else {
MediaCrypto mediaCrypto = null;
try {
@ -591,8 +592,9 @@ public final class FrameworkMediaDrm implements ExoMediaDrm {
private Api31() {}
@DoNotInline
public static boolean requiresSecureDecoder(MediaDrm mediaDrm, String mimeType) {
return mediaDrm.requiresSecureDecoder(mimeType);
public static boolean requiresSecureDecoder(
MediaDrm mediaDrm, String mimeType, int securityLevel) {
return mediaDrm.requiresSecureDecoder(mimeType, securityLevel);
}
@DoNotInline