diff options
| author | TreeHugger Robot <treehugger-gerrit@google.com> | 2018-01-23 17:07:40 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2018-01-23 17:07:40 +0000 |
| commit | c42670b837dc6e0d63dad891f66735fd7cb3d969 (patch) | |
| tree | 0ea6e2a4a47671977c8099c1f8c248971622b588 /drm/libmediadrm/IDrm.cpp | |
| parent | 164071326bcc752214ed800cba3d07206398f53d (diff) | |
| parent | 6d998b67be330843f633a563c23c606593060165 (diff) | |
| download | frameworks_av-c42670b837dc6e0d63dad891f66735fd7cb3d969.tar.gz frameworks_av-c42670b837dc6e0d63dad891f66735fd7cb3d969.tar.bz2 frameworks_av-c42670b837dc6e0d63dad891f66735fd7cb3d969.zip | |
Merge "Implement new MediaDrm methods"
Diffstat (limited to 'drm/libmediadrm/IDrm.cpp')
| -rw-r--r-- | drm/libmediadrm/IDrm.cpp | 129 |
1 files changed, 128 insertions, 1 deletions
diff --git a/drm/libmediadrm/IDrm.cpp b/drm/libmediadrm/IDrm.cpp index d157be7cb6..e7417cc6d8 100644 --- a/drm/libmediadrm/IDrm.cpp +++ b/drm/libmediadrm/IDrm.cpp @@ -56,7 +56,11 @@ enum { VERIFY, SET_LISTENER, GET_SECURE_STOP, - RELEASE_ALL_SECURE_STOPS + RELEASE_ALL_SECURE_STOPS, + GET_HDCP_LEVELS, + GET_NUMBER_OF_SESSIONS, + GET_SECURITY_LEVEL, + SET_SECURITY_LEVEL, }; struct BpDrm : public BpInterface<IDrm> { @@ -351,6 +355,82 @@ struct BpDrm : public BpInterface<IDrm> { return reply.readInt32(); } + virtual status_t getHdcpLevels(DrmPlugin::HdcpLevel *connected, + DrmPlugin::HdcpLevel *max) const { + Parcel data, reply; + + if (connected == NULL || max == NULL) { + return BAD_VALUE; + } + + data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); + + status_t status = remote()->transact(GET_HDCP_LEVELS, data, &reply); + if (status != OK) { + return status; + } + + *connected = static_cast<DrmPlugin::HdcpLevel>(reply.readInt32()); + *max = static_cast<DrmPlugin::HdcpLevel>(reply.readInt32()); + return reply.readInt32(); + } + + virtual status_t getNumberOfSessions(uint32_t *open, uint32_t *max) const { + Parcel data, reply; + + if (open == NULL || max == NULL) { + return BAD_VALUE; + } + + data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); + + status_t status = remote()->transact(GET_NUMBER_OF_SESSIONS, data, &reply); + if (status != OK) { + return status; + } + + *open = reply.readInt32(); + *max = reply.readInt32(); + return reply.readInt32(); + } + + virtual status_t getSecurityLevel(Vector<uint8_t> const &sessionId, + DrmPlugin::SecurityLevel *level) const { + Parcel data, reply; + + if (level == NULL) { + return BAD_VALUE; + } + + data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); + + writeVector(data, sessionId); + status_t status = remote()->transact(GET_SECURITY_LEVEL, data, &reply); + if (status != OK) { + return status; + } + + *level = static_cast<DrmPlugin::SecurityLevel>(reply.readInt32()); + return reply.readInt32(); + } + + virtual status_t setSecurityLevel(Vector<uint8_t> const &sessionId, + const DrmPlugin::SecurityLevel& level) { + Parcel data, reply; + + data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); + + writeVector(data, sessionId); + data.writeInt32(static_cast<uint32_t>(level)); + + status_t status = remote()->transact(SET_SECURITY_LEVEL, data, &reply); + if (status != OK) { + return status; + } + + return reply.readInt32(); + } + virtual status_t getPropertyByteArray(String8 const &name, Vector<uint8_t> &value) const { Parcel data, reply; data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); @@ -801,6 +881,53 @@ status_t BnDrm::onTransact( return OK; } + case GET_HDCP_LEVELS: + { + CHECK_INTERFACE(IDrm, data, reply); + DrmPlugin::HdcpLevel connected = DrmPlugin::kHdcpLevelUnknown; + DrmPlugin::HdcpLevel max = DrmPlugin::kHdcpLevelUnknown; + status_t result = getHdcpLevels(&connected, &max); + reply->writeInt32(connected); + reply->writeInt32(max); + reply->writeInt32(result); + return OK; + } + + case GET_NUMBER_OF_SESSIONS: + { + CHECK_INTERFACE(IDrm, data, reply); + uint32_t open = 0, max = 0; + status_t result = getNumberOfSessions(&open, &max); + reply->writeInt32(open); + reply->writeInt32(max); + reply->writeInt32(result); + return OK; + } + + case GET_SECURITY_LEVEL: + { + CHECK_INTERFACE(IDrm, data, reply); + Vector<uint8_t> sessionId; + readVector(data, sessionId); + DrmPlugin::SecurityLevel level = DrmPlugin::kSecurityLevelUnknown; + status_t result = getSecurityLevel(sessionId, &level); + reply->writeInt32(level); + reply->writeInt32(result); + return OK; + } + + case SET_SECURITY_LEVEL: + { + CHECK_INTERFACE(IDrm, data, reply); + Vector<uint8_t> sessionId; + readVector(data, sessionId); + DrmPlugin::SecurityLevel level = + static_cast<DrmPlugin::SecurityLevel>(data.readInt32()); + status_t result = setSecurityLevel(sessionId, level); + reply->writeInt32(result); + return OK; + } + case GET_PROPERTY_STRING: { CHECK_INTERFACE(IDrm, data, reply); |
