diff options
author | 2012-03-29 17:10:08 -0700 | |
---|---|---|
committer | 2012-03-30 15:16:30 -0700 | |
commit | 851ef8f1bfbb164d61b1528a529a464f0a60dbaf (patch) | |
tree | 89341bb3c0cbda6b18dc0585c64e892c83f134a4 /libs/gui/ISurfaceTexture.cpp | |
parent | 9285a16450323d0e91513e2c270c2ac03c8b940c (diff) |
reduce IPC with BufferQueue
collapse setCrop, setTransform and setScalingMode to queueBuffer()
this ends up simplifying things quite a bit and reducing the numnber
of IPC needed per frame.
Change-Id: I3a13c07603abe4e76b8251e6380b107fde22e6d9
Diffstat (limited to 'libs/gui/ISurfaceTexture.cpp')
-rw-r--r-- | libs/gui/ISurfaceTexture.cpp | 75 |
1 files changed, 8 insertions, 67 deletions
diff --git a/libs/gui/ISurfaceTexture.cpp b/libs/gui/ISurfaceTexture.cpp index d2e5627714..29c50c9b34 100644 --- a/libs/gui/ISurfaceTexture.cpp +++ b/libs/gui/ISurfaceTexture.cpp @@ -36,13 +36,10 @@ enum { DEQUEUE_BUFFER, QUEUE_BUFFER, CANCEL_BUFFER, - SET_CROP, - SET_TRANSFORM, QUERY, SET_SYNCHRONOUS_MODE, CONNECT, DISCONNECT, - SET_SCALING_MODE, }; @@ -102,11 +99,15 @@ public: } virtual status_t queueBuffer(int buf, int64_t timestamp, + const Rect& crop, int scalingMode, uint32_t transform, uint32_t* outWidth, uint32_t* outHeight, uint32_t* outTransform) { Parcel data, reply; data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor()); data.writeInt32(buf); data.writeInt64(timestamp); + memcpy(data.writeInplace(sizeof(Rect)), &crop, sizeof(Rect)); + data.writeInt32(scalingMode); + data.writeInt32(transform); status_t result = remote()->transact(QUEUE_BUFFER, data, &reply); if (result != NO_ERROR) { return result; @@ -125,45 +126,6 @@ public: remote()->transact(CANCEL_BUFFER, data, &reply); } - virtual status_t setCrop(const Rect& reg) { - Parcel data, reply; - data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor()); - data.writeFloat(reg.left); - data.writeFloat(reg.top); - data.writeFloat(reg.right); - data.writeFloat(reg.bottom); - status_t result = remote()->transact(SET_CROP, data, &reply); - if (result != NO_ERROR) { - return result; - } - result = reply.readInt32(); - return result; - } - - virtual status_t setTransform(uint32_t transform) { - Parcel data, reply; - data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor()); - data.writeInt32(transform); - status_t result = remote()->transact(SET_TRANSFORM, data, &reply); - if (result != NO_ERROR) { - return result; - } - result = reply.readInt32(); - return result; - } - - virtual status_t setScalingMode(int mode) { - Parcel data, reply; - data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor()); - data.writeInt32(mode); - status_t result = remote()->transact(SET_SCALING_MODE, data, &reply); - if (result != NO_ERROR) { - return result; - } - result = reply.readInt32(); - return result; - } - virtual int query(int what, int* value) { Parcel data, reply; data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor()); @@ -261,8 +223,12 @@ status_t BnSurfaceTexture::onTransact( CHECK_INTERFACE(ISurfaceTexture, data, reply); int buf = data.readInt32(); int64_t timestamp = data.readInt64(); + Rect crop( *reinterpret_cast<Rect const *>(data.readInplace(sizeof(Rect))) ); + int scalingMode = data.readInt32(); + uint32_t transform = data.readInt32(); uint32_t outWidth, outHeight, outTransform; status_t result = queueBuffer(buf, timestamp, + crop, scalingMode, transform, &outWidth, &outHeight, &outTransform); reply->writeInt32(outWidth); reply->writeInt32(outHeight); @@ -276,31 +242,6 @@ status_t BnSurfaceTexture::onTransact( cancelBuffer(buf); return NO_ERROR; } break; - case SET_CROP: { - Rect reg; - CHECK_INTERFACE(ISurfaceTexture, data, reply); - reg.left = data.readFloat(); - reg.top = data.readFloat(); - reg.right = data.readFloat(); - reg.bottom = data.readFloat(); - status_t result = setCrop(reg); - reply->writeInt32(result); - return NO_ERROR; - } break; - case SET_TRANSFORM: { - CHECK_INTERFACE(ISurfaceTexture, data, reply); - uint32_t transform = data.readInt32(); - status_t result = setTransform(transform); - reply->writeInt32(result); - return NO_ERROR; - } break; - case SET_SCALING_MODE: { - CHECK_INTERFACE(ISurfaceTexture, data, reply); - int mode = data.readInt32(); - status_t result = setScalingMode(mode); - reply->writeInt32(result); - return NO_ERROR; - } break; case QUERY: { CHECK_INTERFACE(ISurfaceTexture, data, reply); int value; |