diff options
author | Jamie Gennis <jgennis@google.com> | 2010-12-20 11:21:07 -0800 |
---|---|---|
committer | Jamie Gennis <jgennis@google.com> | 2011-01-06 13:12:35 -0800 |
commit | 0a53d5c81b5553d6063b8133492275ce88186978 (patch) | |
tree | dc6573bc4f7011bc5e7be5e6a976f684e52ac061 /libs | |
parent | 42edf0f8cf8ca85dd5010558ff399e2c9a4c779c (diff) | |
download | frameworks_base-0a53d5c81b5553d6063b8133492275ce88186978.zip frameworks_base-0a53d5c81b5553d6063b8133492275ce88186978.tar.gz frameworks_base-0a53d5c81b5553d6063b8133492275ce88186978.tar.bz2 |
Add the ISurfaceComposer::createGraphicBuffer IPC.
This change adds a new binder method to the ISurfaceComposer interface.
This IPC is intended to allow SurfaceFlinger clients to allocate gralloc
buffers using SurfaceFlinger as a proxy to gralloc.
Change-Id: Ide9fc283aec5da6268ba62cfed0c3319a50b640d
Diffstat (limited to 'libs')
-rw-r--r-- | libs/surfaceflinger_client/ISurfaceComposer.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/libs/surfaceflinger_client/ISurfaceComposer.cpp b/libs/surfaceflinger_client/ISurfaceComposer.cpp index b8a7a79..a42b49d 100644 --- a/libs/surfaceflinger_client/ISurfaceComposer.cpp +++ b/libs/surfaceflinger_client/ISurfaceComposer.cpp @@ -26,6 +26,7 @@ #include <binder/IServiceManager.h> #include <ui/DisplayInfo.h> +#include <ui/GraphicBuffer.h> #include <surfaceflinger/ISurfaceComposer.h> @@ -169,6 +170,25 @@ public: data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); remote()->transact(BnSurfaceComposer::SIGNAL, data, &reply, IBinder::FLAG_ONEWAY); } + + virtual sp<GraphicBuffer> createGraphicBuffer(uint32_t w, uint32_t h, + PixelFormat format, uint32_t usage) const { + Parcel data, reply; + data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); + data.writeInt32(w); + data.writeInt32(h); + data.writeInt32(format); + data.writeInt32(usage); + remote()->transact(BnSurfaceComposer::CREATE_GRAPHIC_BUFFER, data, + &reply); + sp<GraphicBuffer> graphicBuffer; + bool nonNull = (bool)reply.readInt32(); + if (nonNull) { + graphicBuffer = new GraphicBuffer(); + reply.read(*graphicBuffer); + } + return graphicBuffer; + } }; IMPLEMENT_META_INTERFACE(SurfaceComposer, "android.ui.ISurfaceComposer"); @@ -247,6 +267,18 @@ status_t BnSurfaceComposer::onTransact( reply->writeInt32(f); reply->writeInt32(res); } break; + case CREATE_GRAPHIC_BUFFER: { + CHECK_INTERFACE(ISurfaceComposer, data, reply); + uint32_t w = data.readInt32(); + uint32_t h = data.readInt32(); + PixelFormat format = data.readInt32(); + uint32_t usage = data.readInt32(); + sp<GraphicBuffer> result(createGraphicBuffer(w, h, format, usage)); + reply->writeInt32(result != 0); + if (result != 0) { + reply->write(*result); + } + } break; case TURN_ELECTRON_BEAM_OFF: { CHECK_INTERFACE(ISurfaceComposer, data, reply); int32_t mode = data.readInt32(); |