diff options
Diffstat (limited to 'media')
-rw-r--r-- | media/libmedia/IMediaPlayer.cpp | 23 | ||||
-rw-r--r-- | media/libmedia/mediaplayer.cpp | 15 | ||||
-rw-r--r-- | media/libmediaplayerservice/MediaPlayerService.cpp | 10 | ||||
-rw-r--r-- | media/libmediaplayerservice/MediaPlayerService.h | 1 |
4 files changed, 44 insertions, 5 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); } diff --git a/media/libmedia/mediaplayer.cpp b/media/libmedia/mediaplayer.cpp index d8c622f..6b35fa7 100644 --- a/media/libmedia/mediaplayer.cpp +++ b/media/libmedia/mediaplayer.cpp @@ -211,14 +211,23 @@ status_t MediaPlayer::invoke(const Parcel& request, Parcel *reply) status_t MediaPlayer::setMetadataFilter(const Parcel& filter) { LOGD("setMetadataFilter"); - Mutex::Autolock _l(mLock); - if (mPlayer == NULL) - { + Mutex::Autolock lock(mLock); + if (mPlayer == NULL) { return NO_INIT; } return mPlayer->setMetadataFilter(filter); } +status_t MediaPlayer::getMetadata(bool update_only, bool apply_filter, Parcel *metadata) +{ + LOGD("getMetadata"); + Mutex::Autolock lock(mLock); + if (mPlayer == NULL) { + return NO_INIT; + } + return mPlayer->getMetadata(update_only, apply_filter, metadata); +} + status_t MediaPlayer::setVideoSurface(const sp<Surface>& surface) { LOGV("setVideoSurface"); diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp index 3adbfac..04aab81 100644 --- a/media/libmediaplayerservice/MediaPlayerService.cpp +++ b/media/libmediaplayerservice/MediaPlayerService.cpp @@ -846,6 +846,16 @@ status_t MediaPlayerService::Client::setMetadataFilter(const Parcel& filter) return status; } +status_t MediaPlayerService::Client::getMetadata(bool update_only, bool apply_filter, Parcel *metadata) +{ + status_t status; + metadata->writeInt32(-1); // Placeholder for the return code + + // FIXME: Implement, query the native player and do the optional filtering, etc... + status = OK; + return status; +} + status_t MediaPlayerService::Client::prepareAsync() { LOGV("[%d] prepareAsync", mConnId); diff --git a/media/libmediaplayerservice/MediaPlayerService.h b/media/libmediaplayerservice/MediaPlayerService.h index b915e86..7920559 100644 --- a/media/libmediaplayerservice/MediaPlayerService.h +++ b/media/libmediaplayerservice/MediaPlayerService.h @@ -191,6 +191,7 @@ private: virtual status_t setVolume(float leftVolume, float rightVolume); virtual status_t invoke(const Parcel& request, Parcel *reply); virtual status_t setMetadataFilter(const Parcel& filter); + virtual status_t getMetadata(bool update_only, bool apply_filter, Parcel *metadata); sp<MediaPlayerBase> createPlayer(player_type playerType); status_t setDataSource(const char *url); |