diff options
author | Nicolas Catania <niko@google.com> | 2009-07-09 09:21:33 -0700 |
---|---|---|
committer | Nicolas Catania <niko@google.com> | 2009-07-10 11:00:42 -0700 |
commit | 8e1b6cce24574b9ecd5b0300155776bd0b4ef756 (patch) | |
tree | b0bc11d197c1f234a845a64c34b357d9b3120632 /media/libmedia/IMediaPlayer.cpp | |
parent | a920ee99dc97b54b661d1238d8c26ac07c875bed (diff) | |
download | frameworks_av-8e1b6cce24574b9ecd5b0300155776bd0b4ef756.zip frameworks_av-8e1b6cce24574b9ecd5b0300155776bd0b4ef756.tar.gz frameworks_av-8e1b6cce24574b9ecd5b0300155776bd0b4ef756.tar.bz2 |
Basic plumbing to retrieve metadata from the native player.
IMediaPlayer.h
Added a getMetadata method that mirrors the on in MediaPlayer.java.
MediaPlayer.java
Added a native method to get the metadata from the native player.
Parse the parcel into a Metadata object.
Metadata.java
Added a stub to parse the Parcel returned by the native player into
a set of metadata.
android_media_MediaPlayer.cpp
JNI call to forward the getMetadata call.
MediaPlayerService.cpp
MediaPlayerService::Client implements the new getMetadata method added in IMediaPlayer.h
Diffstat (limited to 'media/libmedia/IMediaPlayer.cpp')
-rw-r--r-- | media/libmedia/IMediaPlayer.cpp | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/media/libmedia/IMediaPlayer.cpp b/media/libmedia/IMediaPlayer.cpp index 131e510..5d9db10 100644 --- a/media/libmedia/IMediaPlayer.cpp +++ b/media/libmedia/IMediaPlayer.cpp @@ -42,6 +42,7 @@ enum { SET_VOLUME, INVOKE, SET_METADATA_FILTER, + GET_METADATA, }; class BpMediaPlayer: public BpInterface<IMediaPlayer> @@ -176,8 +177,7 @@ public: status_t invoke(const Parcel& request, Parcel *reply) { // Avoid doing any extra copy. The interface descriptor should // have been set by MediaPlayer.java. - status_t retcode = remote()->transact(INVOKE, request, reply); - return retcode; + return remote()->transact(INVOKE, request, reply); } status_t setMetadataFilter(const Parcel& request) @@ -188,6 +188,17 @@ public: remote()->transact(SET_METADATA_FILTER, request, &reply); return reply.readInt32(); } + + status_t getMetadata(bool update_only, bool apply_filter, Parcel *reply) + { + Parcel request; + request.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); + // TODO: Burning 2 ints for 2 boolean. Should probably use flags in an int here. + request.writeInt32(update_only); + request.writeInt32(apply_filter); + remote()->transact(GET_METADATA, request, reply); + return reply->readInt32(); + } }; IMPLEMENT_META_INTERFACE(MediaPlayer, "android.media.IMediaPlayer"); @@ -288,6 +299,14 @@ status_t BnMediaPlayer::onTransact( reply->writeInt32(setMetadataFilter(data)); return NO_ERROR; } break; + case GET_METADATA: { + CHECK_INTERFACE(IMediaPlayer, data, reply); + const status_t retcode = getMetadata(data.readInt32(), data.readInt32(), reply); + reply->setDataPosition(0); + reply->writeInt32(retcode); + reply->setDataPosition(0); + return NO_ERROR; + } break; default: return BBinder::onTransact(code, data, reply, flags); } |