diff options
Diffstat (limited to 'media/libmedia/IMediaExtractorService.cpp')
-rw-r--r-- | media/libmedia/IMediaExtractorService.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/media/libmedia/IMediaExtractorService.cpp b/media/libmedia/IMediaExtractorService.cpp index 0295abcb35..243b09dd34 100644 --- a/media/libmedia/IMediaExtractorService.cpp +++ b/media/libmedia/IMediaExtractorService.cpp @@ -29,6 +29,7 @@ namespace android { enum { MAKE_EXTRACTOR = IBinder::FIRST_CALL_TRANSACTION, MAKE_IDATA_SOURCE_FD, + GET_SUPPORTED_TYPES, }; class BpMediaExtractorService : public BpInterface<IMediaExtractorService> @@ -68,6 +69,24 @@ public: } return nullptr; } + + virtual std::unordered_set<std::string> getSupportedTypes() { + std::unordered_set<std::string> supportedTypes; + Parcel data, reply; + data.writeInterfaceToken(IMediaExtractorService::getInterfaceDescriptor()); + status_t ret = remote()->transact(GET_SUPPORTED_TYPES, data, &reply); + if (ret == NO_ERROR) { + // process reply + while(true) { + const char *ext = reply.readCString(); + if (!ext) { + break; + } + supportedTypes.insert(std::string(ext)); + } + } + return supportedTypes; + } }; IMPLEMENT_META_INTERFACE(MediaExtractorService, "android.media.IMediaExtractorService"); @@ -113,6 +132,15 @@ status_t BnMediaExtractorService::onTransact( return NO_ERROR; } + case GET_SUPPORTED_TYPES: + { + CHECK_INTERFACE(IMediaExtractorService, data, reply); + std::unordered_set<std::string> supportedTypes = getSupportedTypes(); + for (auto it = supportedTypes.begin(); it != supportedTypes.end(); ++it) { + reply->writeCString((*it).c_str()); + } + return NO_ERROR; + } default: return BBinder::onTransact(code, data, reply, flags); } |