update the binder protocol for connect to match that of queueBuffer
indeed, connect and queueBuffer return the same data, so it's
easier to have them use the same protocol.
Change-Id: I4f9fa3be0a80c9ab0a7a4039b282ae843aab02e1
diff --git a/libs/gui/BufferQueue.cpp b/libs/gui/BufferQueue.cpp
index a6403d4..5941dc2 100644
--- a/libs/gui/BufferQueue.cpp
+++ b/libs/gui/BufferQueue.cpp
@@ -651,8 +651,7 @@
mDequeueCondition.broadcast();
}
-status_t BufferQueue::connect(int api,
- uint32_t* outWidth, uint32_t* outHeight, uint32_t* outTransform) {
+status_t BufferQueue::connect(int api, QueueBufferOutput* output) {
ATRACE_CALL();
ST_LOGV("connect: api=%d", api);
Mutex::Autolock lock(mMutex);
@@ -679,9 +678,7 @@
err = -EINVAL;
} else {
mConnectedApi = api;
- *outWidth = mDefaultWidth;
- *outHeight = mDefaultHeight;
- *outTransform = mTransformHint;
+ output->inflate(mDefaultWidth, mDefaultHeight, mDefaultHeight);
}
break;
default:
diff --git a/libs/gui/ISurfaceTexture.cpp b/libs/gui/ISurfaceTexture.cpp
index 265dd5d..3eb5e7a 100644
--- a/libs/gui/ISurfaceTexture.cpp
+++ b/libs/gui/ISurfaceTexture.cpp
@@ -145,8 +145,7 @@
return result;
}
- virtual status_t connect(int api,
- uint32_t* outWidth, uint32_t* outHeight, uint32_t* outTransform) {
+ virtual status_t connect(int api, QueueBufferOutput* output) {
Parcel data, reply;
data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor());
data.writeInt32(api);
@@ -154,9 +153,7 @@
if (result != NO_ERROR) {
return result;
}
- *outWidth = reply.readInt32();
- *outHeight = reply.readInt32();
- *outTransform = reply.readInt32();
+ memcpy(output, reply.readInplace(sizeof(*output)), sizeof(*output));
result = reply.readInt32();
return result;
}
@@ -251,12 +248,10 @@
case CONNECT: {
CHECK_INTERFACE(ISurfaceTexture, data, reply);
int api = data.readInt32();
- uint32_t outWidth, outHeight, outTransform;
- status_t res = connect(api,
- &outWidth, &outHeight, &outTransform);
- reply->writeInt32(outWidth);
- reply->writeInt32(outHeight);
- reply->writeInt32(outTransform);
+ QueueBufferOutput* const output =
+ reinterpret_cast<QueueBufferOutput *>(
+ reply->writeInplace(sizeof(QueueBufferOutput)));
+ status_t res = connect(api, output);
reply->writeInt32(res);
return NO_ERROR;
} break;
diff --git a/libs/gui/SurfaceTextureClient.cpp b/libs/gui/SurfaceTextureClient.cpp
index b37d821..48d3b6f 100644
--- a/libs/gui/SurfaceTextureClient.cpp
+++ b/libs/gui/SurfaceTextureClient.cpp
@@ -429,8 +429,9 @@
ATRACE_CALL();
ALOGV("SurfaceTextureClient::connect");
Mutex::Autolock lock(mMutex);
- int err = mSurfaceTexture->connect(api,
- &mDefaultWidth, &mDefaultHeight, &mTransformHint);
+ ISurfaceTexture::QueueBufferOutput output;
+ int err = mSurfaceTexture->connect(api, &output);
+ output.deflate(&mDefaultWidth, &mDefaultHeight, &mTransformHint);
if (!err && api == NATIVE_WINDOW_API_CPU) {
mConnectedToCpu = true;
}