ISurfaceTexture.cpp revision 7b305fffc39d0fe0926e7fd2d7f6a524fbce62b7
18ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis/* 28ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis * Copyright (C) 2010 The Android Open Source Project 38ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis * 48ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis * Licensed under the Apache License, Version 2.0 (the "License"); 58ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis * you may not use this file except in compliance with the License. 68ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis * You may obtain a copy of the License at 78ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis * 88ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis * http://www.apache.org/licenses/LICENSE-2.0 98ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis * 108ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis * Unless required by applicable law or agreed to in writing, software 118ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis * distributed under the License is distributed on an "AS IS" BASIS, 128ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis * See the License for the specific language governing permissions and 148ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis * limitations under the License. 158ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis */ 168ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis 178ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis#include <stdint.h> 188ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis#include <sys/types.h> 198ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis 208ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis#include <utils/Errors.h> 218ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis#include <utils/RefBase.h> 228ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis#include <utils/Vector.h> 238ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis#include <utils/Timers.h> 248ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis 258ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis#include <binder/Parcel.h> 268ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis#include <binder/IInterface.h> 278ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis 288ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis#include <gui/ISurfaceTexture.h> 298ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis 308ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennisnamespace android { 318ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis// ---------------------------------------------------------------------------- 328ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis 338ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennisenum { 348ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis REQUEST_BUFFER = IBinder::FIRST_CALL_TRANSACTION, 358ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis SET_BUFFER_COUNT, 368ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis DEQUEUE_BUFFER, 378ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis QUEUE_BUFFER, 388ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis CANCEL_BUFFER, 398ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis SET_CROP, 408ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis SET_TRANSFORM, 41eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian QUERY, 428072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian SET_SYNCHRONOUS_MODE, 43fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis CONNECT, 44fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis DISCONNECT, 457734ebfe47f42f980c1b44c1f284a91d8ad1d6c7Mathias Agopian SET_SCALING_MODE, 468ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis}; 478ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis 488ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis 498ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennisclass BpSurfaceTexture : public BpInterface<ISurfaceTexture> 508ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis{ 518ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennispublic: 528ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis BpSurfaceTexture(const sp<IBinder>& impl) 538ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis : BpInterface<ISurfaceTexture>(impl) 548ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis { 558ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } 568ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis 577b305fffc39d0fe0926e7fd2d7f6a524fbce62b7Jamie Gennis virtual status_t requestBuffer(int bufferIdx, sp<GraphicBuffer>* buf) { 588ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis Parcel data, reply; 598ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor()); 608ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis data.writeInt32(bufferIdx); 618ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis remote()->transact(REQUEST_BUFFER, data, &reply); 628ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis bool nonNull = reply.readInt32(); 638ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis if (nonNull) { 647b305fffc39d0fe0926e7fd2d7f6a524fbce62b7Jamie Gennis *buf = new GraphicBuffer(); 657b305fffc39d0fe0926e7fd2d7f6a524fbce62b7Jamie Gennis reply.read(**buf); 668ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } 677b305fffc39d0fe0926e7fd2d7f6a524fbce62b7Jamie Gennis status_t result = reply.readInt32(); 687b305fffc39d0fe0926e7fd2d7f6a524fbce62b7Jamie Gennis return result; 698ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } 708ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis 718ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis virtual status_t setBufferCount(int bufferCount) 728ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis { 738ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis Parcel data, reply; 748ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor()); 758ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis data.writeInt32(bufferCount); 768ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis remote()->transact(SET_BUFFER_COUNT, data, &reply); 778ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis status_t err = reply.readInt32(); 788ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis return err; 798ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } 808ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis 81c04f153353cdb0d291297d10452239f791d3fd2bMathias Agopian virtual status_t dequeueBuffer(int *buf, uint32_t w, uint32_t h, 82c04f153353cdb0d291297d10452239f791d3fd2bMathias Agopian uint32_t format, uint32_t usage) { 838ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis Parcel data, reply; 848ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor()); 85c04f153353cdb0d291297d10452239f791d3fd2bMathias Agopian data.writeInt32(w); 86c04f153353cdb0d291297d10452239f791d3fd2bMathias Agopian data.writeInt32(h); 87c04f153353cdb0d291297d10452239f791d3fd2bMathias Agopian data.writeInt32(format); 88c04f153353cdb0d291297d10452239f791d3fd2bMathias Agopian data.writeInt32(usage); 898ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis remote()->transact(DEQUEUE_BUFFER, data, &reply); 908ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis *buf = reply.readInt32(); 918ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis int result = reply.readInt32(); 928ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis return result; 938ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } 948ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis 9597c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian virtual status_t queueBuffer(int buf, int64_t timestamp, 9697c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian uint32_t* outWidth, uint32_t* outHeight, uint32_t* outTransform) { 978ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis Parcel data, reply; 988ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor()); 998ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis data.writeInt32(buf); 1001d01a12e7150be569557b64da9b8663c62c13594Eino-Ville Talvala data.writeInt64(timestamp); 1018ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis remote()->transact(QUEUE_BUFFER, data, &reply); 10297c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian *outWidth = reply.readInt32(); 10397c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian *outHeight = reply.readInt32(); 10497c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian *outTransform = reply.readInt32(); 1058ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis status_t result = reply.readInt32(); 1068ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis return result; 1078ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } 1088ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis 1098ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis virtual void cancelBuffer(int buf) { 1108ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis Parcel data, reply; 1118ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor()); 1128ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis data.writeInt32(buf); 1138ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis remote()->transact(CANCEL_BUFFER, data, &reply); 1148ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } 1158ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis 1168ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis virtual status_t setCrop(const Rect& reg) { 1178ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis Parcel data, reply; 1188ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor()); 1198ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis data.writeFloat(reg.left); 1208ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis data.writeFloat(reg.top); 1218ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis data.writeFloat(reg.right); 1228ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis data.writeFloat(reg.bottom); 1238ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis remote()->transact(SET_CROP, data, &reply); 1248ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis status_t result = reply.readInt32(); 1258ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis return result; 1268ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } 1278ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis 1288ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis virtual status_t setTransform(uint32_t transform) { 1298ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis Parcel data, reply; 1308ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor()); 1318ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis data.writeInt32(transform); 1328ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis remote()->transact(SET_TRANSFORM, data, &reply); 1338ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis status_t result = reply.readInt32(); 1348ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis return result; 1358ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } 1361b20cde313b5ef8acdace742328df867956d24cbJamie Gennis 1377734ebfe47f42f980c1b44c1f284a91d8ad1d6c7Mathias Agopian virtual status_t setScalingMode(int mode) { 1387734ebfe47f42f980c1b44c1f284a91d8ad1d6c7Mathias Agopian Parcel data, reply; 1397734ebfe47f42f980c1b44c1f284a91d8ad1d6c7Mathias Agopian data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor()); 1407734ebfe47f42f980c1b44c1f284a91d8ad1d6c7Mathias Agopian data.writeInt32(mode); 1417734ebfe47f42f980c1b44c1f284a91d8ad1d6c7Mathias Agopian remote()->transact(SET_SCALING_MODE, data, &reply); 1427734ebfe47f42f980c1b44c1f284a91d8ad1d6c7Mathias Agopian status_t result = reply.readInt32(); 1437734ebfe47f42f980c1b44c1f284a91d8ad1d6c7Mathias Agopian return result; 1447734ebfe47f42f980c1b44c1f284a91d8ad1d6c7Mathias Agopian } 1457734ebfe47f42f980c1b44c1f284a91d8ad1d6c7Mathias Agopian 146eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian virtual int query(int what, int* value) { 147eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian Parcel data, reply; 148eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor()); 149eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian data.writeInt32(what); 150eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian remote()->transact(QUERY, data, &reply); 151eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian value[0] = reply.readInt32(); 152eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian status_t result = reply.readInt32(); 153eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian return result; 154eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian } 155eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian 1568072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian virtual status_t setSynchronousMode(bool enabled) { 1578072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian Parcel data, reply; 1588072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor()); 1598072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian data.writeInt32(enabled); 1608072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian remote()->transact(SET_SYNCHRONOUS_MODE, data, &reply); 1618072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian status_t result = reply.readInt32(); 1628072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian return result; 1638072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian } 1648072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian 165fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis virtual status_t connect(int api) { 166fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis Parcel data, reply; 167fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor()); 168fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis data.writeInt32(api); 169fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis remote()->transact(CONNECT, data, &reply); 170fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis status_t result = reply.readInt32(); 171fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis return result; 172fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis } 1738072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian 174fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis virtual status_t disconnect(int api) { 175fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis Parcel data, reply; 176fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor()); 177fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis data.writeInt32(api); 178fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis remote()->transact(DISCONNECT, data, &reply); 179fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis status_t result = reply.readInt32(); 180fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis return result; 181fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis } 1828ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis}; 1838ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis 1848ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie GennisIMPLEMENT_META_INTERFACE(SurfaceTexture, "android.gui.SurfaceTexture"); 1858ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis 1868ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis// ---------------------------------------------------------------------- 1878ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis 1888ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennisstatus_t BnSurfaceTexture::onTransact( 1898ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 1908ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis{ 1918ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis switch(code) { 1928ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis case REQUEST_BUFFER: { 1938ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis CHECK_INTERFACE(ISurfaceTexture, data, reply); 1948ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis int bufferIdx = data.readInt32(); 1957b305fffc39d0fe0926e7fd2d7f6a524fbce62b7Jamie Gennis sp<GraphicBuffer> buffer; 1967b305fffc39d0fe0926e7fd2d7f6a524fbce62b7Jamie Gennis int result = requestBuffer(bufferIdx, &buffer); 1978ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis reply->writeInt32(buffer != 0); 1988ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis if (buffer != 0) { 1998ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis reply->write(*buffer); 2008ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } 2017b305fffc39d0fe0926e7fd2d7f6a524fbce62b7Jamie Gennis reply->writeInt32(result); 2028ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis return NO_ERROR; 2038ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } break; 2048ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis case SET_BUFFER_COUNT: { 2058ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis CHECK_INTERFACE(ISurfaceTexture, data, reply); 2068ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis int bufferCount = data.readInt32(); 2078ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis int result = setBufferCount(bufferCount); 2088ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis reply->writeInt32(result); 2098ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis return NO_ERROR; 2108ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } break; 2118ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis case DEQUEUE_BUFFER: { 2128ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis CHECK_INTERFACE(ISurfaceTexture, data, reply); 213c04f153353cdb0d291297d10452239f791d3fd2bMathias Agopian uint32_t w = data.readInt32(); 214c04f153353cdb0d291297d10452239f791d3fd2bMathias Agopian uint32_t h = data.readInt32(); 215c04f153353cdb0d291297d10452239f791d3fd2bMathias Agopian uint32_t format = data.readInt32(); 216c04f153353cdb0d291297d10452239f791d3fd2bMathias Agopian uint32_t usage = data.readInt32(); 2178ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis int buf; 218c04f153353cdb0d291297d10452239f791d3fd2bMathias Agopian int result = dequeueBuffer(&buf, w, h, format, usage); 2198ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis reply->writeInt32(buf); 2208ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis reply->writeInt32(result); 2218ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis return NO_ERROR; 2228ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } break; 2238ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis case QUEUE_BUFFER: { 2248ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis CHECK_INTERFACE(ISurfaceTexture, data, reply); 2258ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis int buf = data.readInt32(); 2261d01a12e7150be569557b64da9b8663c62c13594Eino-Ville Talvala int64_t timestamp = data.readInt64(); 22797c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian uint32_t outWidth, outHeight, outTransform; 22897c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian status_t result = queueBuffer(buf, timestamp, 22997c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian &outWidth, &outHeight, &outTransform); 23097c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian reply->writeInt32(outWidth); 23197c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian reply->writeInt32(outHeight); 23297c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian reply->writeInt32(outTransform); 2338ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis reply->writeInt32(result); 2348ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis return NO_ERROR; 2358ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } break; 2368ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis case CANCEL_BUFFER: { 2378ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis CHECK_INTERFACE(ISurfaceTexture, data, reply); 2388ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis int buf = data.readInt32(); 2398ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis cancelBuffer(buf); 2408ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis return NO_ERROR; 2418ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } break; 2428ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis case SET_CROP: { 2438ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis Rect reg; 2448ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis CHECK_INTERFACE(ISurfaceTexture, data, reply); 2458ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis reg.left = data.readFloat(); 2468ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis reg.top = data.readFloat(); 2478ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis reg.right = data.readFloat(); 2488ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis reg.bottom = data.readFloat(); 2498ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis status_t result = setCrop(reg); 2508ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis reply->writeInt32(result); 2518ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis return NO_ERROR; 2528ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } break; 2538ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis case SET_TRANSFORM: { 2548ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis CHECK_INTERFACE(ISurfaceTexture, data, reply); 2558ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis uint32_t transform = data.readInt32(); 2568ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis status_t result = setTransform(transform); 2578ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis reply->writeInt32(result); 2588ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis return NO_ERROR; 2598ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } break; 2607734ebfe47f42f980c1b44c1f284a91d8ad1d6c7Mathias Agopian case SET_SCALING_MODE: { 2617734ebfe47f42f980c1b44c1f284a91d8ad1d6c7Mathias Agopian CHECK_INTERFACE(ISurfaceTexture, data, reply); 2627734ebfe47f42f980c1b44c1f284a91d8ad1d6c7Mathias Agopian int mode = data.readInt32(); 2637734ebfe47f42f980c1b44c1f284a91d8ad1d6c7Mathias Agopian status_t result = setScalingMode(mode); 2647734ebfe47f42f980c1b44c1f284a91d8ad1d6c7Mathias Agopian reply->writeInt32(result); 2657734ebfe47f42f980c1b44c1f284a91d8ad1d6c7Mathias Agopian return NO_ERROR; 2667734ebfe47f42f980c1b44c1f284a91d8ad1d6c7Mathias Agopian } break; 267eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian case QUERY: { 268eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian CHECK_INTERFACE(ISurfaceTexture, data, reply); 269eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian int value; 270eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian int what = data.readInt32(); 271eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian int res = query(what, &value); 272eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian reply->writeInt32(value); 273eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian reply->writeInt32(res); 274eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian return NO_ERROR; 275eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian } break; 2768072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian case SET_SYNCHRONOUS_MODE: { 2778072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian CHECK_INTERFACE(ISurfaceTexture, data, reply); 2788072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian bool enabled = data.readInt32(); 2798072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian status_t res = setSynchronousMode(enabled); 2808072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian reply->writeInt32(res); 2818072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian return NO_ERROR; 2828072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian } break; 283fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis case CONNECT: { 284fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis CHECK_INTERFACE(ISurfaceTexture, data, reply); 285fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis int api = data.readInt32(); 286fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis status_t res = connect(api); 287fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis reply->writeInt32(res); 288fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis return NO_ERROR; 289fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis } break; 290fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis case DISCONNECT: { 291fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis CHECK_INTERFACE(ISurfaceTexture, data, reply); 292fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis int api = data.readInt32(); 2932773004a83624ed41cf3f94f2b11878cd8521812Mathias Agopian status_t res = disconnect(api); 294fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis reply->writeInt32(res); 295fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis return NO_ERROR; 296fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis } break; 2978ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } 2988ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis return BBinder::onTransact(code, data, reply, flags); 2998ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis} 3008ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis 3018ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis// ---------------------------------------------------------------------------- 3028ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis 3038ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis}; // namespace android 304