diff options
author | Andreas Huber <andih@google.com> | 2010-01-28 11:19:57 -0800 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2010-01-28 11:52:43 -0800 |
commit | 2db8455d8f4468a637109d31f319ce02d9d743ec (patch) | |
tree | 7f3418b24ec0779af3ab25202eb5063e860610d5 /media/libmedia/IMediaPlayerService.cpp | |
parent | 8566a635aa4bf6d2e908f0bc64d4fb8917025b58 (diff) | |
download | frameworks_av-2db8455d8f4468a637109d31f319ce02d9d743ec.zip frameworks_av-2db8455d8f4468a637109d31f319ce02d9d743ec.tar.gz frameworks_av-2db8455d8f4468a637109d31f319ce02d9d743ec.tar.bz2 |
API Extension: Support for optionally specifying a map of extra request headers when specifying the uri of media data to be played.
related-to-bug: 2393577
Original change by Andrei Popescu <andreip@google.com>
Diffstat (limited to 'media/libmedia/IMediaPlayerService.cpp')
-rw-r--r-- | media/libmedia/IMediaPlayerService.cpp | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/media/libmedia/IMediaPlayerService.cpp b/media/libmedia/IMediaPlayerService.cpp index cca3e9b..71c5f86 100644 --- a/media/libmedia/IMediaPlayerService.cpp +++ b/media/libmedia/IMediaPlayerService.cpp @@ -56,13 +56,26 @@ public: return interface_cast<IMediaMetadataRetriever>(reply.readStrongBinder()); } - virtual sp<IMediaPlayer> create(pid_t pid, const sp<IMediaPlayerClient>& client, const char* url) - { + virtual sp<IMediaPlayer> create( + pid_t pid, const sp<IMediaPlayerClient>& client, + const char* url, const KeyedVector<String8, String8> *headers) { Parcel data, reply; data.writeInterfaceToken(IMediaPlayerService::getInterfaceDescriptor()); data.writeInt32(pid); data.writeStrongBinder(client->asBinder()); data.writeCString(url); + + if (headers == NULL) { + data.writeInt32(0); + } else { + // serialize the headers + data.writeInt32(headers->size()); + for (size_t i = 0; i < headers->size(); ++i) { + data.writeString8(headers->keyAt(i)); + data.writeString8(headers->valueAt(i)); + } + } + remote()->transact(CREATE_URL, data, &reply); return interface_cast<IMediaPlayer>(reply.readStrongBinder()); } @@ -142,9 +155,21 @@ status_t BnMediaPlayerService::onTransact( case CREATE_URL: { CHECK_INTERFACE(IMediaPlayerService, data, reply); pid_t pid = data.readInt32(); - sp<IMediaPlayerClient> client = interface_cast<IMediaPlayerClient>(data.readStrongBinder()); + sp<IMediaPlayerClient> client = + interface_cast<IMediaPlayerClient>(data.readStrongBinder()); const char* url = data.readCString(); - sp<IMediaPlayer> player = create(pid, client, url); + + KeyedVector<String8, String8> headers; + int32_t numHeaders = data.readInt32(); + for (int i = 0; i < numHeaders; ++i) { + String8 key = data.readString8(); + String8 value = data.readString8(); + headers.add(key, value); + } + + sp<IMediaPlayer> player = create( + pid, client, url, numHeaders > 0 ? &headers : NULL); + reply->writeStrongBinder(player->asBinder()); return NO_ERROR; } break; |