Index: media/base/android/media_drm_bridge.cc |
diff --git a/media/base/android/media_drm_bridge.cc b/media/base/android/media_drm_bridge.cc |
index b81382cdc5fdd5d506de464a873bb31011917954..fed5fd60e32d66d6a1e03c0368b43a34cbd710ce 100644 |
--- a/media/base/android/media_drm_bridge.cc |
+++ b/media/base/android/media_drm_bridge.cc |
@@ -138,6 +138,16 @@ static bool GetPsshData(const uint8* data, int data_size, |
return false; |
} |
+static MediaDrmBridge::SecurityLevel GetSecurityLevelFromString( |
qinmin
2013/08/27 21:41:12
this doesn't needs to be a class member function,
xhwang
2013/08/28 01:21:24
This is already a helper function and not a class
|
+ const std::string& security_level_str) { |
+ if (0 == security_level_str.compare("L1")) |
+ return MediaDrmBridge::SECURITY_LEVEL_1; |
+ if (0 == security_level_str.compare("L3")) |
+ return MediaDrmBridge::SECURITY_LEVEL_3; |
+ DCHECK(security_level_str.empty()); |
+ return MediaDrmBridge::SECURITY_LEVEL_NONE; |
+} |
+ |
// static |
MediaDrmBridge* MediaDrmBridge::Create(int media_keys_id, |
const std::vector<uint8>& scheme_uuid, |
@@ -149,10 +159,30 @@ MediaDrmBridge* MediaDrmBridge::Create(int media_keys_id, |
return new MediaDrmBridge(media_keys_id, scheme_uuid, manager); |
} |
+// static |
bool MediaDrmBridge::IsAvailable() { |
return base::android::BuildInfo::GetInstance()->sdk_int() >= 18; |
} |
+// static |
+bool MediaDrmBridge::IsSecureDecoderRequired( |
+ const std::string& security_level_str) { |
+ return IsSecureDecoderRequired( |
+ GetSecurityLevelFromString(security_level_str)); |
+} |
+ |
+bool MediaDrmBridge::IsCryptoSchemeSupported( |
+ const std::vector<uint8>& scheme_uuid, |
+ const std::string& container_mime_type) { |
+ JNIEnv* env = AttachCurrentThread(); |
+ ScopedJavaLocalRef<jbyteArray> j_scheme_uuid = |
+ base::android::ToJavaByteArray(env, &scheme_uuid[0], scheme_uuid.size()); |
+ ScopedJavaLocalRef<jstring> j_container_mime_type = |
+ ConvertUTF8ToJavaString(env, container_mime_type); |
+ return Java_MediaDrmBridge_isCryptoSchemeSupported( |
+ env, j_scheme_uuid.obj(), j_container_mime_type.obj()); |
+} |
+ |
bool MediaDrmBridge::RegisterMediaDrmBridge(JNIEnv* env) { |
return RegisterNativesImpl(env); |
} |
@@ -241,22 +271,22 @@ void MediaDrmBridge::OnKeyError(JNIEnv* env, jobject, jstring j_session_id) { |
manager_->OnKeyError(media_keys_id_, session_id, MediaKeys::kUnknownError, 0); |
} |
+// static |
+bool MediaDrmBridge::IsSecureDecoderRequired(SecurityLevel security_level) { |
+ return MediaDrmBridge::SECURITY_LEVEL_1 == security_level; |
+} |
+ |
MediaDrmBridge::SecurityLevel MediaDrmBridge::GetSecurityLevel() { |
JNIEnv* env = AttachCurrentThread(); |
ScopedJavaLocalRef<jstring> j_security_level = |
Java_MediaDrmBridge_getSecurityLevel(env, j_media_drm_.obj()); |
- std::string security_level = |
+ std::string security_level_str = |
ConvertJavaStringToUTF8(env, j_security_level.obj()); |
- if (0 == security_level.compare("L1")) |
- return SECURITY_LEVEL_1; |
- if (0 == security_level.compare("L3")) |
- return SECURITY_LEVEL_3; |
- DCHECK(security_level.empty()); |
- return SECURITY_LEVEL_NONE; |
+ return GetSecurityLevelFromString(security_level_str); |
} |
bool MediaDrmBridge::IsProtectedSurfaceRequired() { |
- return MediaDrmBridge::SECURITY_LEVEL_1 == GetSecurityLevel(); |
+ return IsSecureDecoderRequired(GetSecurityLevel()); |
} |
} // namespace media |