Loading drm/libmediadrm/DrmHal.cpp +61 −1 Original line number Diff line number Diff line Loading @@ -44,6 +44,8 @@ using drm::V1_0::KeyType; using drm::V1_0::KeyValue; using drm::V1_1::HdcpLevel;; using drm::V1_0::SecureStop; using drm::V1_1::SecureStopRelease; using drm::V1_0::SecureStopId; using drm::V1_1::SecurityLevel; using drm::V1_0::Status; using ::android::hardware::hidl_array; Loading Loading @@ -165,6 +167,15 @@ static List<Vector<uint8_t>> toSecureStops(const hidl_vec<SecureStop>& return secureStops; } static List<Vector<uint8_t>> toSecureStopIds(const hidl_vec<SecureStopId>& hSecureStopIds) { List<Vector<uint8_t>> secureStopIds; for (size_t i = 0; i < hSecureStopIds.size(); i++) { secureStopIds.push_back(toVector(hSecureStopIds[i])); } return secureStopIds; } static status_t toStatusT(Status status) { switch (status) { case Status::OK: Loading Loading @@ -797,6 +808,32 @@ status_t DrmHal::getSecureStops(List<Vector<uint8_t>> &secureStops) { } status_t DrmHal::getSecureStopIds(List<Vector<uint8_t>> &secureStopIds) { Mutex::Autolock autoLock(mLock); if (mInitCheck != OK) { return mInitCheck; } if (mPluginV1_1 == NULL) { return ERROR_DRM_CANNOT_HANDLE; } status_t err = UNKNOWN_ERROR; Return<void> hResult = mPluginV1_1->getSecureStopIds( [&](Status status, const hidl_vec<SecureStopId>& hSecureStopIds) { if (status == Status::OK) { secureStopIds = toSecureStopIds(hSecureStopIds); } err = toStatusT(status); } ); return hResult.isOk() ? err : DEAD_OBJECT; } status_t DrmHal::getSecureStop(Vector<uint8_t> const &ssid, Vector<uint8_t> &secureStop) { Mutex::Autolock autoLock(mLock); INIT_CHECK(); Loading @@ -819,13 +856,36 @@ status_t DrmHal::releaseSecureStops(Vector<uint8_t> const &ssRelease) { Mutex::Autolock autoLock(mLock); INIT_CHECK(); if (mPluginV1_1 != NULL) { SecureStopRelease secureStopRelease; secureStopRelease.opaqueData = toHidlVec(ssRelease); return toStatusT(mPluginV1_1->releaseSecureStops(secureStopRelease)); } return toStatusT(mPlugin->releaseSecureStop(toHidlVec(ssRelease))); } status_t DrmHal::releaseAllSecureStops() { status_t DrmHal::removeSecureStop(Vector<uint8_t> const &ssid) { Mutex::Autolock autoLock(mLock); if (mInitCheck != OK) { return mInitCheck; } if (mPluginV1_1 == NULL) { return ERROR_DRM_CANNOT_HANDLE; } return toStatusT(mPluginV1_1->removeSecureStop(toHidlVec(ssid))); } status_t DrmHal::removeAllSecureStops() { Mutex::Autolock autoLock(mLock); INIT_CHECK(); if (mPluginV1_1 != NULL) { return toStatusT(mPluginV1_1->removeAllSecureStops()); } return toStatusT(mPlugin->releaseAllSecureStops()); } Loading drm/libmediadrm/IDrm.cpp +66 −5 Original line number Diff line number Diff line Loading @@ -56,11 +56,13 @@ enum { VERIFY, SET_LISTENER, GET_SECURE_STOP, RELEASE_ALL_SECURE_STOPS, REMOVE_ALL_SECURE_STOPS, GET_HDCP_LEVELS, GET_NUMBER_OF_SESSIONS, GET_SECURITY_LEVEL, SET_SECURITY_LEVEL, REMOVE_SECURE_STOP, GET_SECURE_STOP_IDS }; struct BpDrm : public BpInterface<IDrm> { Loading Loading @@ -302,6 +304,25 @@ struct BpDrm : public BpInterface<IDrm> { return reply.readInt32(); } virtual status_t getSecureStopIds(List<Vector<uint8_t> > &secureStopIds) { Parcel data, reply; data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); status_t status = remote()->transact(GET_SECURE_STOP_IDS, data, &reply); if (status != OK) { return status; } secureStopIds.clear(); uint32_t count = reply.readInt32(); for (size_t i = 0; i < count; i++) { Vector<uint8_t> secureStopId; readVector(reply, secureStopId); secureStopIds.push_back(secureStopId); } return reply.readInt32(); } virtual status_t getSecureStop(Vector<uint8_t> const &ssid, Vector<uint8_t> &secureStop) { Parcel data, reply; data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); Loading Loading @@ -329,11 +350,24 @@ struct BpDrm : public BpInterface<IDrm> { return reply.readInt32(); } virtual status_t releaseAllSecureStops() { virtual status_t removeSecureStop(Vector<uint8_t> const &ssid) { Parcel data, reply; data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); writeVector(data, ssid); status_t status = remote()->transact(REMOVE_SECURE_STOP, data, &reply); if (status != OK) { return status; } return reply.readInt32(); } virtual status_t removeAllSecureStops() { Parcel data, reply; data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); status_t status = remote()->transact(RELEASE_ALL_SECURE_STOPS, data, &reply); status_t status = remote()->transact(REMOVE_ALL_SECURE_STOPS, data, &reply); if (status != OK) { return status; } Loading Loading @@ -854,6 +888,24 @@ status_t BnDrm::onTransact( return OK; } case GET_SECURE_STOP_IDS: { CHECK_INTERFACE(IDrm, data, reply); List<Vector<uint8_t> > secureStopIds; status_t result = getSecureStopIds(secureStopIds); size_t count = secureStopIds.size(); reply->writeInt32(count); List<Vector<uint8_t> >::iterator iter = secureStopIds.begin(); while(iter != secureStopIds.end()) { size_t size = iter->size(); reply->writeInt32(size); reply->write(iter->array(), iter->size()); iter++; } reply->writeInt32(result); return OK; } case GET_SECURE_STOP: { CHECK_INTERFACE(IDrm, data, reply); Loading @@ -874,10 +926,19 @@ status_t BnDrm::onTransact( return OK; } case RELEASE_ALL_SECURE_STOPS: case REMOVE_SECURE_STOP: { CHECK_INTERFACE(IDrm, data, reply); Vector<uint8_t> ssid; readVector(data, ssid); reply->writeInt32(removeSecureStop(ssid)); return OK; } case REMOVE_ALL_SECURE_STOPS: { CHECK_INTERFACE(IDrm, data, reply); reply->writeInt32(releaseAllSecureStops()); reply->writeInt32(removeAllSecureStops()); return OK; } Loading media/libmedia/include/media/DrmHal.h +3 −1 Original line number Diff line number Diff line Loading @@ -97,10 +97,12 @@ struct DrmHal : public BnDrm, Vector<uint8_t> &wrappedKey); virtual status_t getSecureStops(List<Vector<uint8_t>> &secureStops); virtual status_t getSecureStopIds(List<Vector<uint8_t>> &secureStopIds); virtual status_t getSecureStop(Vector<uint8_t> const &ssid, Vector<uint8_t> &secureStop); virtual status_t releaseSecureStops(Vector<uint8_t> const &ssRelease); virtual status_t releaseAllSecureStops(); virtual status_t removeSecureStop(Vector<uint8_t> const &ssid); virtual status_t removeAllSecureStops(); virtual status_t getHdcpLevels(DrmPlugin::HdcpLevel *connectedLevel, DrmPlugin::HdcpLevel *maxLevel) const; Loading media/libmedia/include/media/IDrm.h +3 −1 Original line number Diff line number Diff line Loading @@ -74,10 +74,12 @@ struct IDrm : public IInterface { Vector<uint8_t> &wrappedKey) = 0; virtual status_t getSecureStops(List<Vector<uint8_t> > &secureStops) = 0; virtual status_t getSecureStopIds(List<Vector<uint8_t> > &secureStopIds) = 0; virtual status_t getSecureStop(Vector<uint8_t> const &ssid, Vector<uint8_t> &secureStop) = 0; virtual status_t releaseSecureStops(Vector<uint8_t> const &ssRelease) = 0; virtual status_t releaseAllSecureStops() = 0; virtual status_t removeSecureStop(Vector<uint8_t> const &ssid) = 0; virtual status_t removeAllSecureStops() = 0; virtual status_t getHdcpLevels(DrmPlugin::HdcpLevel *connectedLevel, DrmPlugin::HdcpLevel *maxLevel) Loading Loading
drm/libmediadrm/DrmHal.cpp +61 −1 Original line number Diff line number Diff line Loading @@ -44,6 +44,8 @@ using drm::V1_0::KeyType; using drm::V1_0::KeyValue; using drm::V1_1::HdcpLevel;; using drm::V1_0::SecureStop; using drm::V1_1::SecureStopRelease; using drm::V1_0::SecureStopId; using drm::V1_1::SecurityLevel; using drm::V1_0::Status; using ::android::hardware::hidl_array; Loading Loading @@ -165,6 +167,15 @@ static List<Vector<uint8_t>> toSecureStops(const hidl_vec<SecureStop>& return secureStops; } static List<Vector<uint8_t>> toSecureStopIds(const hidl_vec<SecureStopId>& hSecureStopIds) { List<Vector<uint8_t>> secureStopIds; for (size_t i = 0; i < hSecureStopIds.size(); i++) { secureStopIds.push_back(toVector(hSecureStopIds[i])); } return secureStopIds; } static status_t toStatusT(Status status) { switch (status) { case Status::OK: Loading Loading @@ -797,6 +808,32 @@ status_t DrmHal::getSecureStops(List<Vector<uint8_t>> &secureStops) { } status_t DrmHal::getSecureStopIds(List<Vector<uint8_t>> &secureStopIds) { Mutex::Autolock autoLock(mLock); if (mInitCheck != OK) { return mInitCheck; } if (mPluginV1_1 == NULL) { return ERROR_DRM_CANNOT_HANDLE; } status_t err = UNKNOWN_ERROR; Return<void> hResult = mPluginV1_1->getSecureStopIds( [&](Status status, const hidl_vec<SecureStopId>& hSecureStopIds) { if (status == Status::OK) { secureStopIds = toSecureStopIds(hSecureStopIds); } err = toStatusT(status); } ); return hResult.isOk() ? err : DEAD_OBJECT; } status_t DrmHal::getSecureStop(Vector<uint8_t> const &ssid, Vector<uint8_t> &secureStop) { Mutex::Autolock autoLock(mLock); INIT_CHECK(); Loading @@ -819,13 +856,36 @@ status_t DrmHal::releaseSecureStops(Vector<uint8_t> const &ssRelease) { Mutex::Autolock autoLock(mLock); INIT_CHECK(); if (mPluginV1_1 != NULL) { SecureStopRelease secureStopRelease; secureStopRelease.opaqueData = toHidlVec(ssRelease); return toStatusT(mPluginV1_1->releaseSecureStops(secureStopRelease)); } return toStatusT(mPlugin->releaseSecureStop(toHidlVec(ssRelease))); } status_t DrmHal::releaseAllSecureStops() { status_t DrmHal::removeSecureStop(Vector<uint8_t> const &ssid) { Mutex::Autolock autoLock(mLock); if (mInitCheck != OK) { return mInitCheck; } if (mPluginV1_1 == NULL) { return ERROR_DRM_CANNOT_HANDLE; } return toStatusT(mPluginV1_1->removeSecureStop(toHidlVec(ssid))); } status_t DrmHal::removeAllSecureStops() { Mutex::Autolock autoLock(mLock); INIT_CHECK(); if (mPluginV1_1 != NULL) { return toStatusT(mPluginV1_1->removeAllSecureStops()); } return toStatusT(mPlugin->releaseAllSecureStops()); } Loading
drm/libmediadrm/IDrm.cpp +66 −5 Original line number Diff line number Diff line Loading @@ -56,11 +56,13 @@ enum { VERIFY, SET_LISTENER, GET_SECURE_STOP, RELEASE_ALL_SECURE_STOPS, REMOVE_ALL_SECURE_STOPS, GET_HDCP_LEVELS, GET_NUMBER_OF_SESSIONS, GET_SECURITY_LEVEL, SET_SECURITY_LEVEL, REMOVE_SECURE_STOP, GET_SECURE_STOP_IDS }; struct BpDrm : public BpInterface<IDrm> { Loading Loading @@ -302,6 +304,25 @@ struct BpDrm : public BpInterface<IDrm> { return reply.readInt32(); } virtual status_t getSecureStopIds(List<Vector<uint8_t> > &secureStopIds) { Parcel data, reply; data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); status_t status = remote()->transact(GET_SECURE_STOP_IDS, data, &reply); if (status != OK) { return status; } secureStopIds.clear(); uint32_t count = reply.readInt32(); for (size_t i = 0; i < count; i++) { Vector<uint8_t> secureStopId; readVector(reply, secureStopId); secureStopIds.push_back(secureStopId); } return reply.readInt32(); } virtual status_t getSecureStop(Vector<uint8_t> const &ssid, Vector<uint8_t> &secureStop) { Parcel data, reply; data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); Loading Loading @@ -329,11 +350,24 @@ struct BpDrm : public BpInterface<IDrm> { return reply.readInt32(); } virtual status_t releaseAllSecureStops() { virtual status_t removeSecureStop(Vector<uint8_t> const &ssid) { Parcel data, reply; data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); writeVector(data, ssid); status_t status = remote()->transact(REMOVE_SECURE_STOP, data, &reply); if (status != OK) { return status; } return reply.readInt32(); } virtual status_t removeAllSecureStops() { Parcel data, reply; data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); status_t status = remote()->transact(RELEASE_ALL_SECURE_STOPS, data, &reply); status_t status = remote()->transact(REMOVE_ALL_SECURE_STOPS, data, &reply); if (status != OK) { return status; } Loading Loading @@ -854,6 +888,24 @@ status_t BnDrm::onTransact( return OK; } case GET_SECURE_STOP_IDS: { CHECK_INTERFACE(IDrm, data, reply); List<Vector<uint8_t> > secureStopIds; status_t result = getSecureStopIds(secureStopIds); size_t count = secureStopIds.size(); reply->writeInt32(count); List<Vector<uint8_t> >::iterator iter = secureStopIds.begin(); while(iter != secureStopIds.end()) { size_t size = iter->size(); reply->writeInt32(size); reply->write(iter->array(), iter->size()); iter++; } reply->writeInt32(result); return OK; } case GET_SECURE_STOP: { CHECK_INTERFACE(IDrm, data, reply); Loading @@ -874,10 +926,19 @@ status_t BnDrm::onTransact( return OK; } case RELEASE_ALL_SECURE_STOPS: case REMOVE_SECURE_STOP: { CHECK_INTERFACE(IDrm, data, reply); Vector<uint8_t> ssid; readVector(data, ssid); reply->writeInt32(removeSecureStop(ssid)); return OK; } case REMOVE_ALL_SECURE_STOPS: { CHECK_INTERFACE(IDrm, data, reply); reply->writeInt32(releaseAllSecureStops()); reply->writeInt32(removeAllSecureStops()); return OK; } Loading
media/libmedia/include/media/DrmHal.h +3 −1 Original line number Diff line number Diff line Loading @@ -97,10 +97,12 @@ struct DrmHal : public BnDrm, Vector<uint8_t> &wrappedKey); virtual status_t getSecureStops(List<Vector<uint8_t>> &secureStops); virtual status_t getSecureStopIds(List<Vector<uint8_t>> &secureStopIds); virtual status_t getSecureStop(Vector<uint8_t> const &ssid, Vector<uint8_t> &secureStop); virtual status_t releaseSecureStops(Vector<uint8_t> const &ssRelease); virtual status_t releaseAllSecureStops(); virtual status_t removeSecureStop(Vector<uint8_t> const &ssid); virtual status_t removeAllSecureStops(); virtual status_t getHdcpLevels(DrmPlugin::HdcpLevel *connectedLevel, DrmPlugin::HdcpLevel *maxLevel) const; Loading
media/libmedia/include/media/IDrm.h +3 −1 Original line number Diff line number Diff line Loading @@ -74,10 +74,12 @@ struct IDrm : public IInterface { Vector<uint8_t> &wrappedKey) = 0; virtual status_t getSecureStops(List<Vector<uint8_t> > &secureStops) = 0; virtual status_t getSecureStopIds(List<Vector<uint8_t> > &secureStopIds) = 0; virtual status_t getSecureStop(Vector<uint8_t> const &ssid, Vector<uint8_t> &secureStop) = 0; virtual status_t releaseSecureStops(Vector<uint8_t> const &ssRelease) = 0; virtual status_t releaseAllSecureStops() = 0; virtual status_t removeSecureStop(Vector<uint8_t> const &ssid) = 0; virtual status_t removeAllSecureStops() = 0; virtual status_t getHdcpLevels(DrmPlugin::HdcpLevel *connectedLevel, DrmPlugin::HdcpLevel *maxLevel) Loading