Files
android/libwvdrmengine/mediacrypto/aidl_include/WVCryptoPlugin.h
Edwin 9654d29be6 Widevine drm aidl: address API review
Interface update in change 16810770

Bug: 214410088
Test: atest VtsAidlHalDrmTargetTest
Change-Id: I19da51ef75952f5ff6c7c02e0393f574e69ee30b
2022-02-09 22:19:36 -08:00

85 lines
2.5 KiB
C++

//
// 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 <aidl/android/hardware/common/Ashmem.h>
#include <aidl/android/hardware/drm/BnCryptoPlugin.h>
#include <aidl/android/hardware/drm/Status.h>
#include <android-base/thread_annotations.h>
#include <mutex>
#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<wvcdm::WvContentDecryptionModule>& 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<uint8_t>& 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<uint32_t, std::shared_ptr<SharedBufferBase>> mSharedBufferMap
GUARDED_BY(mSharedBufferLock);
::android::sp<wvcdm::WvContentDecryptionModule> 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_