Loading media/libstagefright/AwesomePlayer.cpp +3 −1 Original line number Diff line number Diff line Loading @@ -2091,7 +2091,7 @@ status_t AwesomePlayer::finishSetDataSource_l() { String8 mimeType; float confidence; sp<AMessage> dummy; bool success = SniffDRM(dataSource, &mimeType, &confidence, &dummy); bool success = SniffWVM(dataSource, &mimeType, &confidence, &dummy); if (!success || strcasecmp( Loading @@ -2099,6 +2099,8 @@ status_t AwesomePlayer::finishSetDataSource_l() { return ERROR_UNSUPPORTED; } dataSource->DrmInitialization(); mWVMExtractor = new WVMExtractor(dataSource); mWVMExtractor->setAdaptiveStreamingMode(true); extractor = mWVMExtractor; Loading media/libstagefright/DRMExtractor.cpp +4 −4 Original line number Diff line number Diff line Loading @@ -282,13 +282,13 @@ bool SniffDRM( if (decryptHandle != NULL) { if (decryptHandle->decryptApiType == DecryptApiType::CONTAINER_BASED) { *mimeType = String8("drm+container_based+") + decryptHandle->mimeType; *confidence = 10.0f; } else if (decryptHandle->decryptApiType == DecryptApiType::ELEMENTARY_STREAM_BASED) { *mimeType = String8("drm+es_based+") + decryptHandle->mimeType; } else if (decryptHandle->decryptApiType == DecryptApiType::WV_BASED) { *mimeType = MEDIA_MIMETYPE_CONTAINER_WVM; LOGW("SniffWVM: found match\n"); } *confidence = 10.0f; } else { return false; } return true; } Loading media/libstagefright/DataSource.cpp +2 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ #include "include/DRMExtractor.h" #include "include/FLACExtractor.h" #include "include/AACExtractor.h" #include "include/WVMExtractor.h" #include "matroska/MatroskaExtractor.h" Loading Loading @@ -113,6 +114,7 @@ void DataSource::RegisterDefaultSniffers() { RegisterSniffer(SniffMP3); RegisterSniffer(SniffAAC); RegisterSniffer(SniffMPEG2PS); RegisterSniffer(SniffWVM); char value[PROPERTY_VALUE_MAX]; if (property_get("drm.service.enabled", value, NULL) Loading media/libstagefright/WVMExtractor.cpp +46 −10 Original line number Diff line number Diff line Loading @@ -45,18 +45,13 @@ namespace android { static Mutex gWVMutex; WVMExtractor::WVMExtractor(const sp<DataSource> &source) : mDataSource(source) { : mDataSource(source) { Mutex::Autolock autoLock(gWVMutex); if (gVendorLibHandle == NULL) { gVendorLibHandle = dlopen("libwvm.so", RTLD_NOW); } if (gVendorLibHandle == NULL) { LOGE("Failed to open libwvm.so"); if (!getVendorLibHandle()) { return; } } typedef WVMLoadableExtractor *(*GetInstanceFunc)(sp<DataSource>); GetInstanceFunc getInstanceFunc = Loading @@ -71,6 +66,19 @@ WVMExtractor::WVMExtractor(const sp<DataSource> &source) } } bool WVMExtractor::getVendorLibHandle() { if (gVendorLibHandle == NULL) { gVendorLibHandle = dlopen("libwvm.so", RTLD_NOW); } if (gVendorLibHandle == NULL) { LOGE("Failed to open libwvm.so"); } return gVendorLibHandle != NULL; } WVMExtractor::~WVMExtractor() { } Loading Loading @@ -113,5 +121,33 @@ void WVMExtractor::setAdaptiveStreamingMode(bool adaptive) { } } bool SniffWVM( const sp<DataSource> &source, String8 *mimeType, float *confidence, sp<AMessage> *) { Mutex::Autolock autoLock(gWVMutex); if (!WVMExtractor::getVendorLibHandle()) { return false; } typedef WVMLoadableExtractor *(*SnifferFunc)(sp<DataSource>); SnifferFunc snifferFunc = (SnifferFunc) dlsym(gVendorLibHandle, "_ZN7android15IsWidevineMediaENS_2spINS_10DataSourceEEE"); if (snifferFunc) { if ((*snifferFunc)(source)) { *mimeType = MEDIA_MIMETYPE_CONTAINER_WVM; *confidence = 10.0f; return true; } } else { LOGE("IsWidevineMedia not found in libwvm.so"); } return false; } } //namespace android media/libstagefright/include/WVMExtractor.h +8 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ namespace android { struct AMessage; class String8; class DataSource; class WVMLoadableExtractor : public MediaExtractor { Loading Loading @@ -58,6 +60,8 @@ public: // is used. void setAdaptiveStreamingMode(bool adaptive); static bool getVendorLibHandle(); protected: virtual ~WVMExtractor(); Loading @@ -69,6 +73,10 @@ private: WVMExtractor &operator=(const WVMExtractor &); }; bool SniffWVM( const sp<DataSource> &source, String8 *mimeType, float *confidence, sp<AMessage> *); } // namespace android #endif // DRM_EXTRACTOR_H_ Loading Loading
media/libstagefright/AwesomePlayer.cpp +3 −1 Original line number Diff line number Diff line Loading @@ -2091,7 +2091,7 @@ status_t AwesomePlayer::finishSetDataSource_l() { String8 mimeType; float confidence; sp<AMessage> dummy; bool success = SniffDRM(dataSource, &mimeType, &confidence, &dummy); bool success = SniffWVM(dataSource, &mimeType, &confidence, &dummy); if (!success || strcasecmp( Loading @@ -2099,6 +2099,8 @@ status_t AwesomePlayer::finishSetDataSource_l() { return ERROR_UNSUPPORTED; } dataSource->DrmInitialization(); mWVMExtractor = new WVMExtractor(dataSource); mWVMExtractor->setAdaptiveStreamingMode(true); extractor = mWVMExtractor; Loading
media/libstagefright/DRMExtractor.cpp +4 −4 Original line number Diff line number Diff line Loading @@ -282,13 +282,13 @@ bool SniffDRM( if (decryptHandle != NULL) { if (decryptHandle->decryptApiType == DecryptApiType::CONTAINER_BASED) { *mimeType = String8("drm+container_based+") + decryptHandle->mimeType; *confidence = 10.0f; } else if (decryptHandle->decryptApiType == DecryptApiType::ELEMENTARY_STREAM_BASED) { *mimeType = String8("drm+es_based+") + decryptHandle->mimeType; } else if (decryptHandle->decryptApiType == DecryptApiType::WV_BASED) { *mimeType = MEDIA_MIMETYPE_CONTAINER_WVM; LOGW("SniffWVM: found match\n"); } *confidence = 10.0f; } else { return false; } return true; } Loading
media/libstagefright/DataSource.cpp +2 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ #include "include/DRMExtractor.h" #include "include/FLACExtractor.h" #include "include/AACExtractor.h" #include "include/WVMExtractor.h" #include "matroska/MatroskaExtractor.h" Loading Loading @@ -113,6 +114,7 @@ void DataSource::RegisterDefaultSniffers() { RegisterSniffer(SniffMP3); RegisterSniffer(SniffAAC); RegisterSniffer(SniffMPEG2PS); RegisterSniffer(SniffWVM); char value[PROPERTY_VALUE_MAX]; if (property_get("drm.service.enabled", value, NULL) Loading
media/libstagefright/WVMExtractor.cpp +46 −10 Original line number Diff line number Diff line Loading @@ -45,18 +45,13 @@ namespace android { static Mutex gWVMutex; WVMExtractor::WVMExtractor(const sp<DataSource> &source) : mDataSource(source) { : mDataSource(source) { Mutex::Autolock autoLock(gWVMutex); if (gVendorLibHandle == NULL) { gVendorLibHandle = dlopen("libwvm.so", RTLD_NOW); } if (gVendorLibHandle == NULL) { LOGE("Failed to open libwvm.so"); if (!getVendorLibHandle()) { return; } } typedef WVMLoadableExtractor *(*GetInstanceFunc)(sp<DataSource>); GetInstanceFunc getInstanceFunc = Loading @@ -71,6 +66,19 @@ WVMExtractor::WVMExtractor(const sp<DataSource> &source) } } bool WVMExtractor::getVendorLibHandle() { if (gVendorLibHandle == NULL) { gVendorLibHandle = dlopen("libwvm.so", RTLD_NOW); } if (gVendorLibHandle == NULL) { LOGE("Failed to open libwvm.so"); } return gVendorLibHandle != NULL; } WVMExtractor::~WVMExtractor() { } Loading Loading @@ -113,5 +121,33 @@ void WVMExtractor::setAdaptiveStreamingMode(bool adaptive) { } } bool SniffWVM( const sp<DataSource> &source, String8 *mimeType, float *confidence, sp<AMessage> *) { Mutex::Autolock autoLock(gWVMutex); if (!WVMExtractor::getVendorLibHandle()) { return false; } typedef WVMLoadableExtractor *(*SnifferFunc)(sp<DataSource>); SnifferFunc snifferFunc = (SnifferFunc) dlsym(gVendorLibHandle, "_ZN7android15IsWidevineMediaENS_2spINS_10DataSourceEEE"); if (snifferFunc) { if ((*snifferFunc)(source)) { *mimeType = MEDIA_MIMETYPE_CONTAINER_WVM; *confidence = 10.0f; return true; } } else { LOGE("IsWidevineMedia not found in libwvm.so"); } return false; } } //namespace android
media/libstagefright/include/WVMExtractor.h +8 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ namespace android { struct AMessage; class String8; class DataSource; class WVMLoadableExtractor : public MediaExtractor { Loading Loading @@ -58,6 +60,8 @@ public: // is used. void setAdaptiveStreamingMode(bool adaptive); static bool getVendorLibHandle(); protected: virtual ~WVMExtractor(); Loading @@ -69,6 +73,10 @@ private: WVMExtractor &operator=(const WVMExtractor &); }; bool SniffWVM( const sp<DataSource> &source, String8 *mimeType, float *confidence, sp<AMessage> *); } // namespace android #endif // DRM_EXTRACTOR_H_ Loading