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

Commit 7594a8de authored by Robert Shih's avatar Robert Shih Committed by Android (Google) Code Review
Browse files

Merge "libmediadrm: supported schemes w per mime min/max level"

parents 0858de84 bb9a5307
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -355,8 +355,7 @@ ssize_t CryptoHalAidl::decrypt(const uint8_t keyId[16], const uint8_t iv[16],
    std::string msgStr(statusAidl.getMessage());
    *errorDetailMsg = toString8(msgStr);
    if (err != OK) {
        ALOGE("Failed on decrypt, error message:%s, bytes written:%d", statusAidl.getMessage(),
              result);
        ALOGE("Failed on decrypt, error description:%s", statusAidl.getDescription().c_str());
        return err;
    }

+23 −7
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@

#include <array>
#include <algorithm>
#include <map>
#include <android/binder_auto_utils.h>
#include <android/binder_manager.h>
#include <media/PluginMetricsReporting.h>
@@ -52,6 +53,7 @@ using ::aidl::android::hardware::drm::SecureStop;
using ::aidl::android::hardware::drm::SecureStopId;
using ::aidl::android::hardware::drm::SecurityLevel;
using ::aidl::android::hardware::drm::Status;
using ::aidl::android::hardware::drm::SupportedContentType;
using ::aidl::android::hardware::drm::Uuid;
using DrmMetricGroupAidl = ::aidl::android::hardware::drm::DrmMetricGroup;
using DrmMetricGroupHidl = ::android::hardware::drm::V1_1::DrmMetricGroup;
@@ -420,17 +422,31 @@ status_t DrmHalAidl::isCryptoSchemeSupported(const uint8_t uuid[16], const Strin
            continue;
        }

        if (levelAidl != SecurityLevel::DEFAULT && levelAidl != SecurityLevel::UNKNOWN) {
            if (levelAidl > schemes.maxLevel || levelAidl < schemes.minLevel) {
                continue;
        ALOGV("supported schemes: %s; query: level %d mime %s",
              schemes.toString().c_str(), levelAidl, mimeType.c_str());
        std::map<std::string, SupportedContentType> contentTypes;
        for (auto ct : schemes.mimeTypes) {
            contentTypes[ct.mime] = ct;
        }

        // handle default value cases
        if (levelAidl == SecurityLevel::DEFAULT || levelAidl == SecurityLevel::UNKNOWN) {
            if (mimeType == "") {
                // isCryptoSchemeSupported(uuid)
                *isSupported = true;
            } else {
                // isCryptoSchemeSupported(uuid, mimeType)
                *isSupported = contentTypes.count(mimeTypeStr);
            }
            return OK;
        } else if (mimeType == "") {
            return BAD_VALUE;
        }

        if (!mimeTypeStr.empty()) {
            if (!std::count(schemes.mimeTypes.begin(), schemes.mimeTypes.end(), mimeTypeStr)) {
        auto ct = contentTypes[mimeTypeStr];
        if (levelAidl > ct.maxLevel || levelAidl < ct.minLevel) {
              continue;
        }
        }

        *isSupported = true;
        break;
+1 −1
Original line number Diff line number Diff line
@@ -227,7 +227,7 @@ SharedBufferBase::SharedBufferBase(const SharedBuffer& mem)
}

SharedBufferBase::~SharedBufferBase() {
    if (munmap(mBase, mSize)) {
    if (mBase && munmap(mBase, mSize)) {
        ALOGE("munmap err: base %p; errno %s",
              mBase, strerror(errno));
    }
+6 −4
Original line number Diff line number Diff line
@@ -82,10 +82,12 @@ using ::aidl::android::hardware::drm::Uuid;
    for (const auto& uuid : ::aidl::android::hardware::drm::clearkey::getSupportedCryptoSchemes()) {
        schemes.uuids.push_back({uuid});
    }
    schemes.minLevel = SecurityLevel::SW_SECURE_CRYPTO;
    schemes.maxLevel = SecurityLevel::SW_SECURE_CRYPTO;
    schemes.mimeTypes = {kIsoBmffVideoMimeType, kIsoBmffAudioMimeType, kCencInitDataFormat,
                         kWebmVideoMimeType, kWebmAudioMimeType, kWebmInitDataFormat};
    for (auto mime : {kIsoBmffVideoMimeType, kIsoBmffAudioMimeType, kCencInitDataFormat,
                      kWebmVideoMimeType, kWebmAudioMimeType, kWebmInitDataFormat}) {
        const auto minLevel = SecurityLevel::SW_SECURE_CRYPTO;
        const auto maxLevel = SecurityLevel::SW_SECURE_CRYPTO;
        schemes.mimeTypes.push_back({mime, minLevel, maxLevel});
    }
    *_aidl_return = schemes;
    return ndk::ScopedAStatus::ok();
}