// // Copyright 2021 Google LLC. All Rights Reserved. This file and proprietary // source code may only be used and distributed under the Widevine License // Agreement. // #ifndef WV_CRYPTO_PLUGIN_H_ #define WV_CRYPTO_PLUGIN_H_ #include #include #include #include #include #include "WVTypes.h" #include "log.h" #include "wv_content_decryption_module.h" namespace wvdrm { namespace hardware { namespace drm { namespace widevine { struct SharedBufferBase { uint8_t* mBase; int64_t mSize; SharedBufferBase(const ::aidl::android::hardware::drm::SharedBuffer& mem); ~SharedBufferBase(); }; struct WVCryptoPlugin : public ::aidl::android::hardware::drm::BnCryptoPlugin { WVCryptoPlugin(const void* data, size_t size, const ::android::sp& cdm); virtual ~WVCryptoPlugin(); ::ndk::ScopedAStatus requiresSecureDecoderComponent( const std::string& in_mime, bool* _aidl_return) override; ::ndk::ScopedAStatus notifyResolution(int32_t in_width, int32_t in_height) override; ::ndk::ScopedAStatus setMediaDrmSession( const std::vector& in_sessionId) override; ::ndk::ScopedAStatus setSharedBufferBase( const ::aidl::android::hardware::drm::SharedBuffer& in_base) override; ::ndk::ScopedAStatus decrypt( const ::aidl::android::hardware::drm::DecryptArgs& in_args, int32_t* _aidl_return) override; ::ndk::ScopedAStatus getLogMessages( std::vector<::aidl::android::hardware::drm::LogMessage>* _aidl_return) override; private: WVDRM_DISALLOW_COPY_AND_ASSIGN_AND_NEW(WVCryptoPlugin); // List this field first so it is destructed last; ensure logging uid // is cleared right before plugin is destructed. wvutil::LoggingUidSetter mLoggingUidSetter; wvcdm::CdmSessionId mSessionId; std::map> mSharedBufferMap GUARDED_BY(mSharedBufferLock); ::android::sp const mCDM; uint32_t mUserId; ::aidl::android::hardware::drm::Status attemptDecrypt( const wvcdm::CdmDecryptionParametersV16& params, bool haveEncryptedSubsamples, std::string* errorDetailMsg); std::mutex mSharedBufferLock; }; } // namespace widevine } // namespace drm } // namespace hardware } // namespace wvdrm #endif // WV_CRYPTO_PLUGIN_H_