diff options
Diffstat (limited to 'media/libmedia/IMediaPlayer.cpp')
-rw-r--r-- | media/libmedia/IMediaPlayer.cpp | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/media/libmedia/IMediaPlayer.cpp b/media/libmedia/IMediaPlayer.cpp index c287c0a..2399216 100644 --- a/media/libmedia/IMediaPlayer.cpp +++ b/media/libmedia/IMediaPlayer.cpp @@ -23,6 +23,7 @@ #include <media/IMediaPlayer.h> #include <surfaceflinger/ISurface.h> #include <surfaceflinger/Surface.h> +#include <gui/ISurfaceTexture.h> namespace android { @@ -45,7 +46,8 @@ enum { SET_METADATA_FILTER, GET_METADATA, SET_AUX_EFFECT_SEND_LEVEL, - ATTACH_AUX_EFFECT + ATTACH_AUX_EFFECT, + SET_VIDEO_SURFACETEXTURE, }; class BpMediaPlayer: public BpInterface<IMediaPlayer> @@ -64,6 +66,7 @@ public: remote()->transact(DISCONNECT, data, &reply); } + // pass the buffered Surface to the media player service status_t setVideoSurface(const sp<Surface>& surface) { Parcel data, reply; @@ -73,6 +76,17 @@ public: return reply.readInt32(); } + // pass the buffered ISurfaceTexture to the media player service + status_t setVideoSurfaceTexture(const sp<ISurfaceTexture>& surfaceTexture) + { + Parcel data, reply; + data.writeInterfaceToken(IMediaPlayer::getInterfaceDescriptor()); + sp<IBinder> b(surfaceTexture->asBinder()); + data.writeStrongBinder(b); + remote()->transact(SET_VIDEO_SURFACETEXTURE, data, &reply); + return reply.readInt32(); + } + status_t prepareAsync() { Parcel data, reply; @@ -220,6 +234,7 @@ public: remote()->transact(ATTACH_AUX_EFFECT, data, &reply); return reply.readInt32(); } + }; IMPLEMENT_META_INTERFACE(MediaPlayer, "android.media.IMediaPlayer"); @@ -241,6 +256,13 @@ status_t BnMediaPlayer::onTransact( reply->writeInt32(setVideoSurface(surface)); return NO_ERROR; } break; + case SET_VIDEO_SURFACETEXTURE: { + CHECK_INTERFACE(IMediaPlayer, data, reply); + sp<ISurfaceTexture> surfaceTexture = + interface_cast<ISurfaceTexture>(data.readStrongBinder()); + reply->writeInt32(setVideoSurfaceTexture(surfaceTexture)); + return NO_ERROR; + } break; case PREPARE_ASYNC: { CHECK_INTERFACE(IMediaPlayer, data, reply); reply->writeInt32(prepareAsync()); |