diff --git a/libwvdrmengine/include_hidl/HidlTypes.h b/libwvdrmengine/include_hidl/HidlTypes.h index 4d80b916..62ce8c5d 100644 --- a/libwvdrmengine/include_hidl/HidlTypes.h +++ b/libwvdrmengine/include_hidl/HidlTypes.h @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include diff --git a/libwvdrmengine/include_hidl/TypeConvert.h b/libwvdrmengine/include_hidl/TypeConvert.h index f5c8b25b..a01f1287 100644 --- a/libwvdrmengine/include_hidl/TypeConvert.h +++ b/libwvdrmengine/include_hidl/TypeConvert.h @@ -19,6 +19,7 @@ #include +#include "log.h" #include "media/stagefright/MediaErrors.h" #include "HidlTypes.h" #include "utils/Errors.h" @@ -29,6 +30,23 @@ namespace drm { namespace V1_2 { namespace widevine { +template +hidl_vec toHidlVec(const std::vector &vec); + +template<> +inline hidl_vec<::drm::V1_4::LogMessage> toHidlVec(const std::vector &vec) { + hidl_vec<::drm::V1_4::LogMessage> hLogs(vec.size()); + for (size_t i = 0; i < vec.size(); i++) { + const auto& msg = vec[i]; + hLogs[i] = { + msg.time_ms_, + static_cast<::drm::V1_4::LogPriority>(msg.priority_), + msg.message_, + }; + } + return hLogs; +} + template const hidl_vec toHidlVec(const std::vector &vec) { hidl_vec hVec; hVec.setToExternal(const_cast(vec.data()), vec.size()); diff --git a/libwvdrmengine/mediacrypto/include_hidl/WVCryptoPlugin.h b/libwvdrmengine/mediacrypto/include_hidl/WVCryptoPlugin.h index 91d365d1..7847e11e 100644 --- a/libwvdrmengine/mediacrypto/include_hidl/WVCryptoPlugin.h +++ b/libwvdrmengine/mediacrypto/include_hidl/WVCryptoPlugin.h @@ -61,6 +61,9 @@ struct WVCryptoPlugin : public ::drm::V1_4::ICryptoPlugin { const DestinationBuffer& destination, decrypt_1_2_cb _hidl_cb) override; + Return getLogMessages( + getLogMessages_cb _hidl_cb) override; + private: WVDRM_DISALLOW_COPY_AND_ASSIGN_AND_NEW(WVCryptoPlugin); diff --git a/libwvdrmengine/mediacrypto/src_hidl/WVCryptoPlugin.cpp b/libwvdrmengine/mediacrypto/src_hidl/WVCryptoPlugin.cpp index 3cd57836..079c1387 100644 --- a/libwvdrmengine/mediacrypto/src_hidl/WVCryptoPlugin.cpp +++ b/libwvdrmengine/mediacrypto/src_hidl/WVCryptoPlugin.cpp @@ -43,6 +43,7 @@ namespace drm { namespace V1_4 { namespace widevine { +using android::hardware::drm::V1_2::widevine::toHidlVec; using android::hardware::drm::V1_2::widevine::toVector; using wvcdm::CdmDecryptionParametersV16; using wvcdm::CdmDecryptionSample; @@ -348,6 +349,12 @@ Status_V1_2 WVCryptoPlugin::attemptDecrypt( } } +Return WVCryptoPlugin::getLogMessages(getLogMessages_cb _hidl_cb) { + const std::vector &logs(wvcdm::g_logbuf.getLogs()); + _hidl_cb(::drm::V1_4::Status::OK, toHidlVec<::drm::V1_4::LogMessage>(logs)); + return Void(); +} + } // namespace widevine } // namespace V1_4 } // namespace drm diff --git a/libwvdrmengine/mediadrm/include_hidl/WVDrmPlugin.h b/libwvdrmengine/mediadrm/include_hidl/WVDrmPlugin.h index ac17d411..62e57d13 100644 --- a/libwvdrmengine/mediadrm/include_hidl/WVDrmPlugin.h +++ b/libwvdrmengine/mediadrm/include_hidl/WVDrmPlugin.h @@ -220,6 +220,9 @@ struct WVDrmPlugin : public ::drm::V1_4::IDrmPlugin, IDrmPluginListener, Return sendSessionLostState( const hidl_vec& sessionId) override; + Return getLogMessages( + getLogMessages_cb _hidl_cb) override; + Return requiresSecureDecoder(const hidl_string& mime, SecurityLevel level) override; diff --git a/libwvdrmengine/mediadrm/src_hidl/WVDrmPlugin.cpp b/libwvdrmengine/mediadrm/src_hidl/WVDrmPlugin.cpp index f3e87b85..60dc29d8 100644 --- a/libwvdrmengine/mediadrm/src_hidl/WVDrmPlugin.cpp +++ b/libwvdrmengine/mediadrm/src_hidl/WVDrmPlugin.cpp @@ -1926,6 +1926,12 @@ Return WVDrmPlugin::sendSessionLostState( return err; } +Return WVDrmPlugin::getLogMessages(getLogMessages_cb _hidl_cb) { + const std::vector &logs(wvcdm::g_logbuf.getLogs()); + _hidl_cb(::drm::V1_4::Status::OK, toHidlVec<::drm::V1_4::LogMessage>(logs)); + return Void(); +} + Return WVDrmPlugin::requiresSecureDecoder( const hidl_string& mime, SecurityLevel level) { if (!strncasecmp(mime.c_str(), "video/", 6)) {