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/include/gui/BufferQueue.h b/include/gui/BufferQueue.h
index 008df35..6c38cde 100644
--- a/include/gui/BufferQueue.h
+++ b/include/gui/BufferQueue.h
@@ -143,8 +143,7 @@
     //
     // 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 0b4d099..929eda2 100644
--- a/include/gui/ISurfaceTexture.h
+++ b/include/gui/ISurfaceTexture.h
@@ -153,8 +153,7 @@
     // 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 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;
     }
diff --git a/services/surfaceflinger/SurfaceTextureLayer.cpp b/services/surfaceflinger/SurfaceTextureLayer.cpp
index 2b647bb..0b638b4 100644
--- a/services/surfaceflinger/SurfaceTextureLayer.cpp
+++ b/services/surfaceflinger/SurfaceTextureLayer.cpp
@@ -34,10 +34,8 @@
 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 be26b2f..e892ea0 100644
--- a/services/surfaceflinger/SurfaceTextureLayer.h
+++ b/services/surfaceflinger/SurfaceTextureLayer.h
@@ -37,8 +37,7 @@
     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);
 };
 
 // ---------------------------------------------------------------------------