From e4f4b79b8b1304ff3e7650346dd9a6b28346fa1a Mon Sep 17 00:00:00 2001 From: Marco Nelissen Date: Fri, 17 Jan 2020 13:15:18 -0800 Subject: [PATCH] Implement name() and flags() in IMediaExtractor These were always present in the interface, but not actually implemented. Now name and flags are passed through the Binder interface to the client. The name() method was changed to String8 from "const char *" to avoid ambiguity regarding who owns the string. Bug: 143263164 Test: manual Change-Id: I503d964b70f0affdedba23aa7da530164c14caf1 --- media/libmedia/IMediaExtractor.cpp | 36 ++++++++++++++++--- .../include/android/IMediaExtractor.h | 2 +- media/libstagefright/RemoteMediaExtractor.cpp | 4 +-- .../media/stagefright/RemoteMediaExtractor.h | 2 +- 4 files changed, 35 insertions(+), 9 deletions(-) diff --git a/media/libmedia/IMediaExtractor.cpp b/media/libmedia/IMediaExtractor.cpp index 738985161e..39caf53004 100644 --- a/media/libmedia/IMediaExtractor.cpp +++ b/media/libmedia/IMediaExtractor.cpp @@ -107,8 +107,15 @@ public: } virtual uint32_t flags() const { - ALOGV("flags NOT IMPLEMENTED"); - return 0; + ALOGV("flags"); + Parcel data, reply; + data.writeInterfaceToken(BpMediaExtractor::getInterfaceDescriptor()); + status_t ret = remote()->transact(FLAGS, data, &reply); + int flgs = 0; + if (ret == NO_ERROR) { + flgs = reply.readUint32(); + } + return flgs; } virtual status_t setMediaCas(const HInterfaceToken &casToken) { @@ -125,9 +132,15 @@ public: return reply.readInt32(); } - virtual const char * name() { - ALOGV("name NOT IMPLEMENTED"); - return NULL; + virtual String8 name() { + Parcel data, reply; + data.writeInterfaceToken(BpMediaExtractor::getInterfaceDescriptor()); + status_t ret = remote()->transact(NAME, data, &reply); + String8 nm; + if (ret == NO_ERROR) { + nm = reply.readString8(); + } + return nm; } }; @@ -192,6 +205,12 @@ status_t BnMediaExtractor::onTransact( status_t ret = getMetrics(reply); return ret; } + case FLAGS: { + ALOGV("flags"); + CHECK_INTERFACE(IMediaExtractor, data, reply); + reply->writeUint32(this->flags()); + return NO_ERROR; + } case SETMEDIACAS: { ALOGV("setMediaCas"); CHECK_INTERFACE(IMediaExtractor, data, reply); @@ -206,6 +225,13 @@ status_t BnMediaExtractor::onTransact( reply->writeInt32(setMediaCas(casToken)); return OK; } + case NAME: { + ALOGV("name"); + CHECK_INTERFACE(IMediaExtractor, data, reply); + String8 nm = name(); + reply->writeString8(nm); + return NO_ERROR; + } default: return BBinder::onTransact(code, data, reply, flags); } diff --git a/media/libmedia/include/android/IMediaExtractor.h b/media/libmedia/include/android/IMediaExtractor.h index 75e4ee2e59..3e035ad304 100644 --- a/media/libmedia/include/android/IMediaExtractor.h +++ b/media/libmedia/include/android/IMediaExtractor.h @@ -62,7 +62,7 @@ public: virtual status_t setMediaCas(const HInterfaceToken &casToken) = 0; - virtual const char * name() = 0; + virtual String8 name() = 0; }; diff --git a/media/libstagefright/RemoteMediaExtractor.cpp b/media/libstagefright/RemoteMediaExtractor.cpp index c841d101ae..25e43c28e1 100644 --- a/media/libstagefright/RemoteMediaExtractor.cpp +++ b/media/libstagefright/RemoteMediaExtractor.cpp @@ -139,8 +139,8 @@ status_t RemoteMediaExtractor::setMediaCas(const HInterfaceToken &casToken) { return mExtractor->setMediaCas((uint8_t*)casToken.data(), casToken.size()); } -const char * RemoteMediaExtractor::name() { - return mExtractor->name(); +String8 RemoteMediaExtractor::name() { + return String8(mExtractor->name()); } //////////////////////////////////////////////////////////////////////////////// diff --git a/media/libstagefright/include/media/stagefright/RemoteMediaExtractor.h b/media/libstagefright/include/media/stagefright/RemoteMediaExtractor.h index e33e303d91..2ce7bc7b6f 100644 --- a/media/libstagefright/include/media/stagefright/RemoteMediaExtractor.h +++ b/media/libstagefright/include/media/stagefright/RemoteMediaExtractor.h @@ -41,7 +41,7 @@ public: virtual status_t getMetrics(Parcel *reply); virtual uint32_t flags() const; virtual status_t setMediaCas(const HInterfaceToken &casToken); - virtual const char * name(); + virtual String8 name(); private: MediaExtractor *mExtractor;