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

Commit 9cf69e0f authored by Jeff Tinker's avatar Jeff Tinker
Browse files

Add ability to test supported content types to MediaDrm

bug: 10244066
Change-Id: I317f05b146db962c271893f6208890a5a6c396f1
parent 75c16dde
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -48,6 +48,14 @@ namespace android {
        return (!memcmp(uuid, mock_uuid, sizeof(uuid)));
    }

    bool MockDrmFactory::isContentTypeSupported(const String8 &mimeType)
    {
        if (mimeType != "" && mimeType != "video/mp4") {
            return false;
        }
        return true;
    }

    status_t MockDrmFactory::createDrmPlugin(const uint8_t uuid[16], DrmPlugin **plugin)
    {
        *plugin = new MockDrmPlugin();
+1 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ namespace android {
        virtual ~MockDrmFactory() {}

        bool isCryptoSchemeSupported(const uint8_t uuid[16]);
        bool isContentTypeSupported(const String8 &mimeType);
        status_t createDrmPlugin(const uint8_t uuid[16], DrmPlugin **plugin);
    };

+1 −1
Original line number Diff line number Diff line
@@ -32,7 +32,7 @@ struct IDrm : public IInterface {

    virtual status_t initCheck() const = 0;

    virtual bool isCryptoSchemeSupported(const uint8_t uuid[16]) = 0;
    virtual bool isCryptoSchemeSupported(const uint8_t uuid[16], const String8 &mimeType) = 0;

    virtual status_t createPlugin(const uint8_t uuid[16]) = 0;

+5 −2
Original line number Diff line number Diff line
@@ -68,10 +68,11 @@ struct BpDrm : public BpInterface<IDrm> {
        return reply.readInt32();
    }

    virtual bool isCryptoSchemeSupported(const uint8_t uuid[16]) {
    virtual bool isCryptoSchemeSupported(const uint8_t uuid[16], const String8 &mimeType) {
        Parcel data, reply;
        data.writeInterfaceToken(IDrm::getInterfaceDescriptor());
        data.write(uuid, 16);
        data.writeString8(mimeType);
        remote()->transact(IS_CRYPTO_SUPPORTED, data, &reply);

        return reply.readInt32() != 0;
@@ -438,7 +439,9 @@ status_t BnDrm::onTransact(
            CHECK_INTERFACE(IDrm, data, reply);
            uint8_t uuid[16];
            data.read(uuid, sizeof(uuid));
            reply->writeInt32(isCryptoSchemeSupported(uuid));
            String8 mimeType = data.readString8();
            reply->writeInt32(isCryptoSchemeSupported(uuid, mimeType));

            return OK;
        }

+8 −5
Original line number Diff line number Diff line
@@ -211,15 +211,18 @@ bool Drm::loadLibraryForScheme(const String8 &path, const uint8_t uuid[16]) {
    return true;
}

bool Drm::isCryptoSchemeSupported(const uint8_t uuid[16]) {
bool Drm::isCryptoSchemeSupported(const uint8_t uuid[16], const String8 &mimeType) {

    Mutex::Autolock autoLock(mLock);

    if (mFactory && mFactory->isCryptoSchemeSupported(uuid)) {
        return true;
    if (!mFactory || !mFactory->isCryptoSchemeSupported(uuid)) {
        findFactoryForScheme(uuid);
        if (mInitCheck != OK) {
            return false;
        }
    }

    findFactoryForScheme(uuid);
    return (mInitCheck == OK);
    return mFactory->isContentTypeSupported(mimeType);
}

status_t Drm::createPlugin(const uint8_t uuid[16]) {
Loading