summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Mathias Agopian <mathias@google.com> 2012-04-23 14:28:58 -0700
committer Mathias Agopian <mathias@google.com> 2012-04-23 20:06:02 -0700
commit24202f5676c32edeef6544cf36e06b9fc970dbde (patch)
treebfeaa065a551e9b4fedd8357c83da1b9b469b206
parenta0db308c3d62301ae41b2e2bcf295c4ee4c7b08e (diff)
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
-rw-r--r--include/gui/BufferQueue.h3
-rw-r--r--include/gui/ISurfaceTexture.h3
-rw-r--r--libs/gui/BufferQueue.cpp7
-rw-r--r--libs/gui/ISurfaceTexture.cpp17
-rw-r--r--libs/gui/SurfaceTextureClient.cpp5
-rw-r--r--services/surfaceflinger/SurfaceTextureLayer.cpp6
-rw-r--r--services/surfaceflinger/SurfaceTextureLayer.h3
7 files changed, 16 insertions, 28 deletions
diff --git a/include/gui/BufferQueue.h b/include/gui/BufferQueue.h
index 008df35ce0..6c38cde396 100644
--- a/include/gui/BufferQueue.h
+++ b/include/gui/BufferQueue.h
@@ -143,8 +143,7 @@ public:
//
// This method will fail if the connect was previously called on the
// BufferQueue and no corresponding disconnect call was made.
- virtual status_t connect(int api,
- uint32_t* outWidth, uint32_t* outHeight, uint32_t* outTransform);
+ virtual status_t connect(int api, QueueBufferOutput* output);
// disconnect attempts to disconnect a producer client API from the
// BufferQueue. Calling this method will cause any subsequent calls to other
diff --git a/include/gui/ISurfaceTexture.h b/include/gui/ISurfaceTexture.h
index 0b4d099c58..929eda233e 100644
--- a/include/gui/ISurfaceTexture.h
+++ b/include/gui/ISurfaceTexture.h
@@ -153,8 +153,7 @@ protected:
// outWidth, outHeight and outTransform are filled with the default width
// and height of the window and current transform applied to buffers,
// respectively.
- virtual status_t connect(int api,
- uint32_t* outWidth, uint32_t* outHeight, uint32_t* outTransform) = 0;
+ virtual status_t connect(int api, QueueBufferOutput* output) = 0;
// disconnect attempts to disconnect a client API from the SurfaceTexture.
// Calling this method will cause any subsequent calls to other
diff --git a/libs/gui/BufferQueue.cpp b/libs/gui/BufferQueue.cpp
index a6403d4ea5..5941dc287f 100644
--- a/libs/gui/BufferQueue.cpp
+++ b/libs/gui/BufferQueue.cpp
@@ -651,8 +651,7 @@ void BufferQueue::cancelBuffer(int buf) {
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 @@ status_t BufferQueue::connect(int api,
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 265dd5d9de..3eb5e7aec2 100644
--- a/libs/gui/ISurfaceTexture.cpp
+++ b/libs/gui/ISurfaceTexture.cpp
@@ -145,8 +145,7 @@ public:
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 @@ public:
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 @@ status_t BnSurfaceTexture::onTransact(
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 b37d821f9b..48d3b6f1f4 100644
--- a/libs/gui/SurfaceTextureClient.cpp
+++ b/libs/gui/SurfaceTextureClient.cpp
@@ -429,8 +429,9 @@ int SurfaceTextureClient::connect(int api) {
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;
}
diff --git a/services/surfaceflinger/SurfaceTextureLayer.cpp b/services/surfaceflinger/SurfaceTextureLayer.cpp
index 2b647bb8a1..0b638b45f9 100644
--- a/services/surfaceflinger/SurfaceTextureLayer.cpp
+++ b/services/surfaceflinger/SurfaceTextureLayer.cpp
@@ -34,10 +34,8 @@ SurfaceTextureLayer::SurfaceTextureLayer()
SurfaceTextureLayer::~SurfaceTextureLayer() {
}
-status_t SurfaceTextureLayer::connect(int api,
- uint32_t* outWidth, uint32_t* outHeight, uint32_t* outTransform) {
- status_t err = BufferQueue::connect(api,
- outWidth, outHeight, outTransform);
+status_t SurfaceTextureLayer::connect(int api, QueueBufferOutput* output) {
+ status_t err = BufferQueue::connect(api, output);
if (err == NO_ERROR) {
switch(api) {
case NATIVE_WINDOW_API_MEDIA:
diff --git a/services/surfaceflinger/SurfaceTextureLayer.h b/services/surfaceflinger/SurfaceTextureLayer.h
index be26b2f8c5..e892ea0daa 100644
--- a/services/surfaceflinger/SurfaceTextureLayer.h
+++ b/services/surfaceflinger/SurfaceTextureLayer.h
@@ -37,8 +37,7 @@ public:
SurfaceTextureLayer();
~SurfaceTextureLayer();
- virtual status_t connect(int api,
- uint32_t* outWidth, uint32_t* outHeight, uint32_t* outTransform);
+ virtual status_t connect(int api, QueueBufferOutput* output);
};
// ---------------------------------------------------------------------------