Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ca6a5435 authored by Kyle Zhang's avatar Kyle Zhang Committed by Automerger Merge Worker
Browse files

Merge "Add getSupportedSchemes Api for IDrm" into tm-dev am: d56260bb

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/av/+/17246384

Change-Id: Ifcbf40d2279203e7a0407a038c80cb9f4f842e12
parents 7384b857 d56260bb
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -286,4 +286,11 @@ status_t DrmHal::getLogMessages(Vector<drm::V1_4::LogMessage>& logs) const {
    return mDrmHalHidl->getLogMessages(logs);
}

status_t DrmHal::getSupportedSchemes(std::vector<uint8_t> &schemes) const {
    status_t statusResult;
    statusResult = mDrmHalAidl->getSupportedSchemes(schemes);
    if (statusResult == OK) return statusResult;
    return mDrmHalHidl->getSupportedSchemes(schemes);
}

}  // namespace android
+19 −0
Original line number Diff line number Diff line
@@ -1189,6 +1189,25 @@ std::string DrmHalAidl::reportFrameworkMetrics(const std::string& pluginMetrics)
    return serializedMetrics;
}

status_t DrmHalAidl::getSupportedSchemes(std::vector<uint8_t> &schemes) const {
    Mutex::Autolock autoLock(mLock);

    if (mFactories.empty()) return UNKNOWN_ERROR;
    for (ssize_t i = mFactories.size() - 1; i >= 0; i--) {
        CryptoSchemes curSchemes{};
        auto err = mFactories[i]->getSupportedCryptoSchemes(&curSchemes);
        if (!err.isOk()) {
            continue;
        }

        for (auto uuidObj : curSchemes.uuids) {
            schemes.insert(schemes.end(), uuidObj.uuid.begin(), uuidObj.uuid.end());
        }
    }

    return OK;
}

void DrmHalAidl::cleanup() {
    closeOpenSessions();

+20 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include <aidl/android/media/BnResourceManagerClient.h>
#include <android/binder_manager.h>
#include <android/hardware/drm/1.2/types.h>
#include <android/hardware/drm/1.3/IDrmFactory.h>
#include <android/hidl/manager/1.2/IServiceManager.h>
#include <hidl/ServiceManagement.h>
#include <media/EventMetric.h>
@@ -1514,4 +1515,23 @@ status_t DrmHalHidl::getLogMessages(Vector<drm::V1_4::LogMessage>& logs) const {
    return DrmUtils::GetLogMessages<drm::V1_4::IDrmPlugin>(mPlugin, logs);
}

status_t DrmHalHidl::getSupportedSchemes(std::vector<uint8_t> &schemes) const {
    Mutex::Autolock autoLock(mLock);
    for (auto &factory : mFactories) {
        sp<drm::V1_3::IDrmFactory> factoryV1_3 = drm::V1_3::IDrmFactory::castFrom(factory);
        if (factoryV1_3 == nullptr) {
            continue;
        }

        factoryV1_3->getSupportedCryptoSchemes(
            [&](const hardware::hidl_vec<hardware::hidl_array<uint8_t, 16>>& schemes_hidl) {
                for (const auto &scheme : schemes_hidl) {
                    schemes.insert(schemes.end(), scheme.data(), scheme.data() + scheme.size());
                }
            });
    }

    return OK;
}

}  // namespace android
+1 −0
Original line number Diff line number Diff line
@@ -117,6 +117,7 @@ struct DrmHal : public IDrm {
            Vector<uint8_t> const &sessionId,
            const char *playbackId);
    virtual status_t getLogMessages(Vector<drm::V1_4::LogMessage> &logs) const;
    virtual status_t getSupportedSchemes(std::vector<uint8_t> &schemes) const;

private:
    sp<IDrm> mDrmHalHidl;
+1 −0
Original line number Diff line number Diff line
@@ -105,6 +105,7 @@ struct DrmHalAidl : public IDrm{
                                           bool* required) const;
    virtual status_t setPlaybackId(Vector<uint8_t> const& sessionId, const char* playbackId);
    virtual status_t getLogMessages(Vector<drm::V1_4::LogMessage>& logs) const;
    virtual status_t getSupportedSchemes(std::vector<uint8_t> &schemes) const;

    ::ndk::ScopedAStatus onEvent(EventTypeAidl in_eventType,
                                 const std::vector<uint8_t>& in_sessionId,
Loading