Loading include/media/ICrypto.h +5 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,8 @@ struct ICrypto : public IInterface { virtual void notifyResolution(uint32_t width, uint32_t height) = 0; virtual status_t setMediaDrmSession(const Vector<uint8_t> &sessionId) = 0; virtual ssize_t decrypt( bool secure, const uint8_t key[16], Loading @@ -62,6 +64,9 @@ struct BnCrypto : public BnInterface<ICrypto> { virtual status_t onTransact( uint32_t code, const Parcel &data, Parcel *reply, uint32_t flags = 0); private: void readVector(const Parcel &data, Vector<uint8_t> &vector) const; void writeVector(Parcel *reply, Vector<uint8_t> const &vector) const; }; } // namespace android Loading media/libmedia/ICrypto.cpp +42 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ enum { REQUIRES_SECURE_COMPONENT, DECRYPT, NOTIFY_RESOLUTION, SET_MEDIADRM_SESSION, }; struct BpCrypto : public BpInterface<ICrypto> { Loading Loading @@ -161,7 +162,28 @@ struct BpCrypto : public BpInterface<ICrypto> { remote()->transact(NOTIFY_RESOLUTION, data, &reply); } virtual status_t setMediaDrmSession(const Vector<uint8_t> &sessionId) { Parcel data, reply; data.writeInterfaceToken(ICrypto::getInterfaceDescriptor()); writeVector(data, sessionId); remote()->transact(SET_MEDIADRM_SESSION, data, &reply); return reply.readInt32(); } private: void readVector(Parcel &reply, Vector<uint8_t> &vector) const { uint32_t size = reply.readInt32(); vector.insertAt((size_t)0, size); reply.read(vector.editArray(), size); } void writeVector(Parcel &data, Vector<uint8_t> const &vector) const { data.writeInt32(vector.size()); data.write(vector.array(), vector.size()); } DISALLOW_EVIL_CONSTRUCTORS(BpCrypto); }; Loading @@ -169,6 +191,17 @@ IMPLEMENT_META_INTERFACE(Crypto, "android.hardware.ICrypto"); //////////////////////////////////////////////////////////////////////////////// void BnCrypto::readVector(const Parcel &data, Vector<uint8_t> &vector) const { uint32_t size = data.readInt32(); vector.insertAt((size_t)0, size); data.read(vector.editArray(), size); } void BnCrypto::writeVector(Parcel *reply, Vector<uint8_t> const &vector) const { reply->writeInt32(vector.size()); reply->write(vector.array(), vector.size()); } status_t BnCrypto::onTransact( uint32_t code, const Parcel &data, Parcel *reply, uint32_t flags) { switch (code) { Loading Loading @@ -317,6 +350,15 @@ status_t BnCrypto::onTransact( return OK; } case SET_MEDIADRM_SESSION: { CHECK_INTERFACE(IDrm, data, reply); Vector<uint8_t> sessionId; readVector(data, sessionId); reply->writeInt32(setMediaDrmSession(sessionId)); return OK; } default: return BBinder::onTransact(code, data, reply, flags); } Loading media/libmediaplayerservice/Crypto.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -268,4 +268,14 @@ void Crypto::notifyResolution(uint32_t width, uint32_t height) { } } status_t Crypto::setMediaDrmSession(const Vector<uint8_t> &sessionId) { Mutex::Autolock autoLock(mLock); status_t result = NO_INIT; if (mInitCheck == OK && mPlugin != NULL) { result = mPlugin->setMediaDrmSession(sessionId); } return result; } } // namespace android media/libmediaplayerservice/Crypto.h +2 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,8 @@ struct Crypto : public BnCrypto { virtual void notifyResolution(uint32_t width, uint32_t height); virtual status_t setMediaDrmSession(const Vector<uint8_t> &sessionId); virtual ssize_t decrypt( bool secure, const uint8_t key[16], Loading Loading
include/media/ICrypto.h +5 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,8 @@ struct ICrypto : public IInterface { virtual void notifyResolution(uint32_t width, uint32_t height) = 0; virtual status_t setMediaDrmSession(const Vector<uint8_t> &sessionId) = 0; virtual ssize_t decrypt( bool secure, const uint8_t key[16], Loading @@ -62,6 +64,9 @@ struct BnCrypto : public BnInterface<ICrypto> { virtual status_t onTransact( uint32_t code, const Parcel &data, Parcel *reply, uint32_t flags = 0); private: void readVector(const Parcel &data, Vector<uint8_t> &vector) const; void writeVector(Parcel *reply, Vector<uint8_t> const &vector) const; }; } // namespace android Loading
media/libmedia/ICrypto.cpp +42 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ enum { REQUIRES_SECURE_COMPONENT, DECRYPT, NOTIFY_RESOLUTION, SET_MEDIADRM_SESSION, }; struct BpCrypto : public BpInterface<ICrypto> { Loading Loading @@ -161,7 +162,28 @@ struct BpCrypto : public BpInterface<ICrypto> { remote()->transact(NOTIFY_RESOLUTION, data, &reply); } virtual status_t setMediaDrmSession(const Vector<uint8_t> &sessionId) { Parcel data, reply; data.writeInterfaceToken(ICrypto::getInterfaceDescriptor()); writeVector(data, sessionId); remote()->transact(SET_MEDIADRM_SESSION, data, &reply); return reply.readInt32(); } private: void readVector(Parcel &reply, Vector<uint8_t> &vector) const { uint32_t size = reply.readInt32(); vector.insertAt((size_t)0, size); reply.read(vector.editArray(), size); } void writeVector(Parcel &data, Vector<uint8_t> const &vector) const { data.writeInt32(vector.size()); data.write(vector.array(), vector.size()); } DISALLOW_EVIL_CONSTRUCTORS(BpCrypto); }; Loading @@ -169,6 +191,17 @@ IMPLEMENT_META_INTERFACE(Crypto, "android.hardware.ICrypto"); //////////////////////////////////////////////////////////////////////////////// void BnCrypto::readVector(const Parcel &data, Vector<uint8_t> &vector) const { uint32_t size = data.readInt32(); vector.insertAt((size_t)0, size); data.read(vector.editArray(), size); } void BnCrypto::writeVector(Parcel *reply, Vector<uint8_t> const &vector) const { reply->writeInt32(vector.size()); reply->write(vector.array(), vector.size()); } status_t BnCrypto::onTransact( uint32_t code, const Parcel &data, Parcel *reply, uint32_t flags) { switch (code) { Loading Loading @@ -317,6 +350,15 @@ status_t BnCrypto::onTransact( return OK; } case SET_MEDIADRM_SESSION: { CHECK_INTERFACE(IDrm, data, reply); Vector<uint8_t> sessionId; readVector(data, sessionId); reply->writeInt32(setMediaDrmSession(sessionId)); return OK; } default: return BBinder::onTransact(code, data, reply, flags); } Loading
media/libmediaplayerservice/Crypto.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -268,4 +268,14 @@ void Crypto::notifyResolution(uint32_t width, uint32_t height) { } } status_t Crypto::setMediaDrmSession(const Vector<uint8_t> &sessionId) { Mutex::Autolock autoLock(mLock); status_t result = NO_INIT; if (mInitCheck == OK && mPlugin != NULL) { result = mPlugin->setMediaDrmSession(sessionId); } return result; } } // namespace android
media/libmediaplayerservice/Crypto.h +2 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,8 @@ struct Crypto : public BnCrypto { virtual void notifyResolution(uint32_t width, uint32_t height); virtual status_t setMediaDrmSession(const Vector<uint8_t> &sessionId); virtual ssize_t decrypt( bool secure, const uint8_t key[16], Loading