diff options
Diffstat (limited to 'media/libmedia')
-rw-r--r-- | media/libmedia/Android.mk | 3 | ||||
-rw-r--r-- | media/libmedia/IMediaPlayer.cpp | 24 | ||||
-rw-r--r-- | media/libmedia/mediaplayer.cpp | 10 |
3 files changed, 35 insertions, 2 deletions
diff --git a/media/libmedia/Android.mk b/media/libmedia/Android.mk index 74fb531..fd4c6c6 100644 --- a/media/libmedia/Android.mk +++ b/media/libmedia/Android.mk @@ -37,7 +37,8 @@ LOCAL_SRC_FILES:= \ LOCAL_SHARED_LIBRARIES := \ libui libcutils libutils libbinder libsonivox libicuuc libexpat \ - libsurfaceflinger_client libcamera_client libstagefright_foundation + libsurfaceflinger_client libcamera_client libstagefright_foundation \ + libgui LOCAL_MODULE:= libmedia 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()); diff --git a/media/libmedia/mediaplayer.cpp b/media/libmedia/mediaplayer.cpp index 87c8fe4..0ee0249 100644 --- a/media/libmedia/mediaplayer.cpp +++ b/media/libmedia/mediaplayer.cpp @@ -201,6 +201,16 @@ status_t MediaPlayer::setVideoSurface(const sp<Surface>& surface) return mPlayer->setVideoSurface(surface); } +status_t MediaPlayer::setVideoSurfaceTexture( + const sp<ISurfaceTexture>& surfaceTexture) +{ + LOGV("setVideoSurfaceTexture"); + Mutex::Autolock _l(mLock); + if (mPlayer == 0) return NO_INIT; + + return mPlayer->setVideoSurfaceTexture(surfaceTexture); +} + // must call with lock held status_t MediaPlayer::prepareAsync_l() { |