summaryrefslogtreecommitdiffstats
path: root/media/libmedia
diff options
context:
space:
mode:
authorNicolas Catania <niko@google.com>2009-07-09 09:21:33 -0700
committerNicolas Catania <niko@google.com>2009-07-10 11:00:42 -0700
commit8e1b6cce24574b9ecd5b0300155776bd0b4ef756 (patch)
treeb0bc11d197c1f234a845a64c34b357d9b3120632 /media/libmedia
parenta920ee99dc97b54b661d1238d8c26ac07c875bed (diff)
downloadframeworks_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')
-rw-r--r--media/libmedia/IMediaPlayer.cpp23
-rw-r--r--media/libmedia/mediaplayer.cpp15
2 files changed, 33 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");