From 19b0be6e8b5ffe28215dc00e2c551be46483d0aa Mon Sep 17 00:00:00 2001 From: Marco Nelissen Date: Fri, 15 Nov 2019 07:51:15 -0800 Subject: [PATCH] Remove DrmInitialization from IDataSource DrmInitialization only needs to be called on PlayerServiceFileSource and PlayerServiceMediaHTTP, so just have those initialize the forward lock engine automatically, which removes the need to have this in the IDataSource interface. Test: atest cts/tests/tests/drm/src/android/drm/cts/DRMTest.java Change-Id: I344f46b65b5c473930b16b9b4041e4897384dc18 Merged-In: I344f46b65b5c473930b16b9b4041e4897384dc18 --- media/libdatasource/NuCachedSource2.cpp | 4 - .../include/datasource/NuCachedSource2.h | 1 - media/libheif/HeifDecoderImpl.cpp | 3 - media/libmedia/IDataSource.cpp | 79 ------------------- media/libmedia/include/media/IDataSource.h | 2 - .../datasource/PlayerServiceFileSource.cpp | 6 +- .../datasource/PlayerServiceMediaHTTP.cpp | 3 +- .../datasource/PlayerServiceFileSource.h | 3 +- .../datasource/PlayerServiceMediaHTTP.h | 3 +- media/libstagefright/CallbackDataSource.cpp | 12 --- .../libstagefright/MediaExtractorFactory.cpp | 3 - .../include/CallbackDataSource.h | 2 - .../libstagefright/include/ThrottledSource.h | 4 - .../include/media/stagefright/DataSource.h | 5 -- .../media/stagefright/RemoteDataSource.h | 3 - 15 files changed, 9 insertions(+), 124 deletions(-) diff --git a/media/libdatasource/NuCachedSource2.cpp b/media/libdatasource/NuCachedSource2.cpp index 7f5ae61633..6d63ffb4a8 100644 --- a/media/libdatasource/NuCachedSource2.cpp +++ b/media/libdatasource/NuCachedSource2.cpp @@ -689,10 +689,6 @@ void NuCachedSource2::resumeFetchingIfNecessary() { restartPrefetcherIfNecessary_l(true /* ignore low water threshold */); } -sp NuCachedSource2::DrmInitialization(const char* mime) { - return mSource->DrmInitialization(mime); -} - String8 NuCachedSource2::getUri() { return mSource->getUri(); } diff --git a/media/libdatasource/include/datasource/NuCachedSource2.h b/media/libdatasource/include/datasource/NuCachedSource2.h index 596efb88ef..4c253add78 100644 --- a/media/libdatasource/include/datasource/NuCachedSource2.h +++ b/media/libdatasource/include/datasource/NuCachedSource2.h @@ -44,7 +44,6 @@ struct NuCachedSource2 : public DataSource { virtual status_t getSize(off64_t *size); virtual uint32_t flags(); - virtual sp DrmInitialization(const char* mime); virtual String8 getUri(); virtual String8 getMIMEType() const; diff --git a/media/libheif/HeifDecoderImpl.cpp b/media/libheif/HeifDecoderImpl.cpp index a9773002da..bbc14a9d59 100644 --- a/media/libheif/HeifDecoderImpl.cpp +++ b/media/libheif/HeifDecoderImpl.cpp @@ -66,9 +66,6 @@ public: void close() {} uint32_t getFlags() override { return 0; } String8 toString() override { return String8("HeifDataSource"); } - sp DrmInitialization(const char*) override { - return nullptr; - } private: enum { diff --git a/media/libmedia/IDataSource.cpp b/media/libmedia/IDataSource.cpp index 31c85af4cd..61f0a68620 100644 --- a/media/libmedia/IDataSource.cpp +++ b/media/libmedia/IDataSource.cpp @@ -23,7 +23,6 @@ #include #include -#include #include namespace android { @@ -35,7 +34,6 @@ enum { CLOSE, GET_FLAGS, TO_STRING, - DRM_INITIALIZATION, }; struct BpDataSource : public BpInterface { @@ -95,47 +93,6 @@ struct BpDataSource : public BpInterface { remote()->transact(TO_STRING, data, &reply); return reply.readString8(); } - - virtual sp DrmInitialization(const char *mime) { - Parcel data, reply; - data.writeInterfaceToken(IDataSource::getInterfaceDescriptor()); - if (mime == NULL) { - data.writeInt32(0); - } else { - data.writeInt32(1); - data.writeCString(mime); - } - remote()->transact(DRM_INITIALIZATION, data, &reply); - sp handle; - if (reply.dataAvail() != 0) { - handle = new DecryptHandle(); - handle->decryptId = reply.readInt32(); - handle->mimeType = reply.readString8(); - handle->decryptApiType = reply.readInt32(); - handle->status = reply.readInt32(); - - const int bufferLength = data.readInt32(); - if (bufferLength != -1) { - handle->decryptInfo = new DecryptInfo(); - handle->decryptInfo->decryptBufferLength = bufferLength; - } - - size_t size = data.readInt32(); - for (size_t i = 0; i < size; ++i) { - DrmCopyControl key = (DrmCopyControl)data.readInt32(); - int value = data.readInt32(); - handle->copyControlVector.add(key, value); - } - - size = data.readInt32(); - for (size_t i = 0; i < size; ++i) { - String8 key = data.readString8(); - String8 value = data.readString8(); - handle->extendedData.add(key, value); - } - } - return handle; - } }; IMPLEMENT_META_INTERFACE(DataSource, "android.media.IDataSource"); @@ -178,42 +135,6 @@ status_t BnDataSource::onTransact( reply->writeString8(toString()); return NO_ERROR; } break; - case DRM_INITIALIZATION: { - CHECK_INTERFACE(IDataSource, data, reply); - const char *mime = NULL; - const int32_t flag = data.readInt32(); - if (flag != 0) { - mime = data.readCString(); - } - sp handle = DrmInitialization(mime); - if (handle != NULL) { - reply->writeInt32(handle->decryptId); - reply->writeString8(handle->mimeType); - reply->writeInt32(handle->decryptApiType); - reply->writeInt32(handle->status); - - if (handle->decryptInfo != NULL) { - reply->writeInt32(handle->decryptInfo->decryptBufferLength); - } else { - reply->writeInt32(-1); - } - - size_t size = handle->copyControlVector.size(); - reply->writeInt32(size); - for (size_t i = 0; i < size; ++i) { - reply->writeInt32(handle->copyControlVector.keyAt(i)); - reply->writeInt32(handle->copyControlVector.valueAt(i)); - } - - size = handle->extendedData.size(); - reply->writeInt32(size); - for (size_t i = 0; i < size; ++i) { - reply->writeString8(handle->extendedData.keyAt(i)); - reply->writeString8(handle->extendedData.valueAt(i)); - } - } - return NO_ERROR; - } break; default: return BBinder::onTransact(code, data, reply, flags); diff --git a/media/libmedia/include/media/IDataSource.h b/media/libmedia/include/media/IDataSource.h index 3858f78462..43e2b5083d 100644 --- a/media/libmedia/include/media/IDataSource.h +++ b/media/libmedia/include/media/IDataSource.h @@ -50,8 +50,6 @@ public: virtual uint32_t getFlags() = 0; // get a description of the source, e.g. the url or filename it is based on virtual String8 toString() = 0; - // Initialize DRM and return a DecryptHandle. - virtual sp DrmInitialization(const char *mime) = 0; private: DISALLOW_EVIL_CONSTRUCTORS(IDataSource); diff --git a/media/libmediaplayerservice/datasource/PlayerServiceFileSource.cpp b/media/libmediaplayerservice/datasource/PlayerServiceFileSource.cpp index 15808910df..bb4ba75a46 100644 --- a/media/libmediaplayerservice/datasource/PlayerServiceFileSource.cpp +++ b/media/libmediaplayerservice/datasource/PlayerServiceFileSource.cpp @@ -31,6 +31,7 @@ PlayerServiceFileSource::PlayerServiceFileSource(const char *filename) mDrmBufOffset(0), mDrmBufSize(0), mDrmBuf(NULL){ + (void) DrmInitialization(nullptr); } PlayerServiceFileSource::PlayerServiceFileSource(int fd, int64_t offset, int64_t length) @@ -40,6 +41,7 @@ PlayerServiceFileSource::PlayerServiceFileSource(int fd, int64_t offset, int64_t mDrmBufOffset(0), mDrmBufSize(0), mDrmBuf(NULL) { + (void) DrmInitialization(nullptr); } PlayerServiceFileSource::~PlayerServiceFileSource() { @@ -87,7 +89,9 @@ ssize_t PlayerServiceFileSource::readAt(off64_t offset, void *data, size_t size) } sp PlayerServiceFileSource::DrmInitialization(const char *mime) { - if (getuid() == AID_MEDIA_EX) return nullptr; // no DRM in media extractor + if (getuid() == AID_MEDIA_EX) { + return NULL; // no DRM in media extractor + } if (mDrmManagerClient == NULL) { mDrmManagerClient = new DrmManagerClient(); } diff --git a/media/libmediaplayerservice/datasource/PlayerServiceMediaHTTP.cpp b/media/libmediaplayerservice/datasource/PlayerServiceMediaHTTP.cpp index 0124720d39..f99a8610b0 100644 --- a/media/libmediaplayerservice/datasource/PlayerServiceMediaHTTP.cpp +++ b/media/libmediaplayerservice/datasource/PlayerServiceMediaHTTP.cpp @@ -32,6 +32,7 @@ namespace android { PlayerServiceMediaHTTP::PlayerServiceMediaHTTP(const sp &conn) : MediaHTTP(conn), mDrmManagerClient(NULL) { + (void) DrmInitialization(nullptr); } PlayerServiceMediaHTTP::~PlayerServiceMediaHTTP() { @@ -40,7 +41,7 @@ PlayerServiceMediaHTTP::~PlayerServiceMediaHTTP() { // DRM... -sp PlayerServiceMediaHTTP::DrmInitialization(const char* mime) { +sp PlayerServiceMediaHTTP::DrmInitialization(const char *mime) { if (mDrmManagerClient == NULL) { mDrmManagerClient = new DrmManagerClient(); } diff --git a/media/libmediaplayerservice/datasource/include/datasource/PlayerServiceFileSource.h b/media/libmediaplayerservice/datasource/include/datasource/PlayerServiceFileSource.h index 08a013e50d..7ae8ddaba1 100644 --- a/media/libmediaplayerservice/datasource/include/datasource/PlayerServiceFileSource.h +++ b/media/libmediaplayerservice/datasource/include/datasource/PlayerServiceFileSource.h @@ -37,8 +37,6 @@ public: virtual ssize_t readAt(off64_t offset, void *data, size_t size); - virtual sp DrmInitialization(const char *mime); - static bool requiresDrm(int fd, int64_t offset, int64_t length, const char *mime); protected: @@ -52,6 +50,7 @@ private: ssize_t mDrmBufSize; unsigned char *mDrmBuf; + sp DrmInitialization(const char *mime); ssize_t readAtDRM_l(off64_t offset, void *data, size_t size); PlayerServiceFileSource(const PlayerServiceFileSource &); diff --git a/media/libmediaplayerservice/datasource/include/datasource/PlayerServiceMediaHTTP.h b/media/libmediaplayerservice/datasource/include/datasource/PlayerServiceMediaHTTP.h index 0032cd7567..b5124dccb1 100644 --- a/media/libmediaplayerservice/datasource/include/datasource/PlayerServiceMediaHTTP.h +++ b/media/libmediaplayerservice/datasource/include/datasource/PlayerServiceMediaHTTP.h @@ -33,12 +33,11 @@ struct PlayerServiceMediaHTTP : public MediaHTTP { protected: virtual ~PlayerServiceMediaHTTP(); - virtual sp DrmInitialization(const char* mime); - private: sp mDecryptHandle; DrmManagerClient *mDrmManagerClient; + sp DrmInitialization(const char *mime); void clearDRMState_l(); DISALLOW_EVIL_CONSTRUCTORS(PlayerServiceMediaHTTP); diff --git a/media/libstagefright/CallbackDataSource.cpp b/media/libstagefright/CallbackDataSource.cpp index 92e6eb9d5d..265f21b79f 100644 --- a/media/libstagefright/CallbackDataSource.cpp +++ b/media/libstagefright/CallbackDataSource.cpp @@ -113,10 +113,6 @@ void CallbackDataSource::close() { } } -sp CallbackDataSource::DrmInitialization(const char *mime) { - return mIDataSource->DrmInitialization(mime); -} - sp CallbackDataSource::getIDataSource() const { return mIDataSource; } @@ -190,14 +186,6 @@ uint32_t TinyCacheSource::flags() { return mSource->flags(); } -sp TinyCacheSource::DrmInitialization(const char *mime) { - // flush cache when DrmInitialization occurs since decrypted - // data may differ from what is in cache. - mCachedOffset = 0; - mCachedSize = 0; - return mSource->DrmInitialization(mime); -} - sp TinyCacheSource::getIDataSource() const { return mSource->getIDataSource(); } diff --git a/media/libstagefright/MediaExtractorFactory.cpp b/media/libstagefright/MediaExtractorFactory.cpp index 4c8be1f193..120f35480a 100644 --- a/media/libstagefright/MediaExtractorFactory.cpp +++ b/media/libstagefright/MediaExtractorFactory.cpp @@ -71,9 +71,6 @@ sp MediaExtractorFactory::CreateFromService( ALOGV("MediaExtractorFactory::CreateFromService %s", mime); - // initialize source decryption if needed - source->DrmInitialization(nullptr /* mime */); - void *meta = nullptr; void *creator = NULL; FreeMetaFunc freeMeta = nullptr; diff --git a/media/libstagefright/include/CallbackDataSource.h b/media/libstagefright/include/CallbackDataSource.h index 9f413cdfac..e4284947e4 100644 --- a/media/libstagefright/include/CallbackDataSource.h +++ b/media/libstagefright/include/CallbackDataSource.h @@ -41,7 +41,6 @@ public: virtual String8 toString() { return mName; } - virtual sp DrmInitialization(const char *mime = NULL); virtual sp getIDataSource() const; private: @@ -70,7 +69,6 @@ public: virtual String8 toString() { return mName; } - virtual sp DrmInitialization(const char *mime = NULL); virtual sp getIDataSource() const; private: diff --git a/media/libstagefright/include/ThrottledSource.h b/media/libstagefright/include/ThrottledSource.h index 71e62f783e..5ae0653d93 100644 --- a/media/libstagefright/include/ThrottledSource.h +++ b/media/libstagefright/include/ThrottledSource.h @@ -54,10 +54,6 @@ struct ThrottledSource : public DataSource { return mSource->reconnectAtOffset(offset); } - virtual sp DrmInitialization(const char *mime = NULL) { - return mSource->DrmInitialization(mime); - } - virtual String8 getMIMEType() const { return mSource->getMIMEType(); } diff --git a/media/libstagefright/include/media/stagefright/DataSource.h b/media/libstagefright/include/media/stagefright/DataSource.h index 1f7a473786..83d3e5d242 100644 --- a/media/libstagefright/include/media/stagefright/DataSource.h +++ b/media/libstagefright/include/media/stagefright/DataSource.h @@ -52,11 +52,6 @@ public: //////////////////////////////////////////////////////////////////////////// - // for DRM - virtual sp DrmInitialization(const char * /*mime*/ = NULL) { - return NULL; - } - virtual String8 getUri() { return String8(); } diff --git a/media/libstagefright/include/media/stagefright/RemoteDataSource.h b/media/libstagefright/include/media/stagefright/RemoteDataSource.h index e191e6abbc..5a69bd7655 100644 --- a/media/libstagefright/include/media/stagefright/RemoteDataSource.h +++ b/media/libstagefright/include/media/stagefright/RemoteDataSource.h @@ -66,9 +66,6 @@ public: virtual String8 toString() { return mName; } - virtual sp DrmInitialization(const char *mime) { - return mSource->DrmInitialization(mime); - } private: enum {