ISurfaceTexture.cpp revision 2773004a83624ed41cf3f94f2b11878cd8521812
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, 411b20cde313b5ef8acdace742328df867956d24cbJamie Gennis GET_ALLOCATOR, 42eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian QUERY, 438072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian SET_SYNCHRONOUS_MODE, 44fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis CONNECT, 45fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis DISCONNECT, 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 57c04f153353cdb0d291297d10452239f791d3fd2bMathias Agopian virtual sp<GraphicBuffer> requestBuffer(int bufferIdx) { 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 sp<GraphicBuffer> buffer; 638ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis bool nonNull = reply.readInt32(); 648ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis if (nonNull) { 658ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis buffer = new GraphicBuffer(); 668ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis reply.read(*buffer); 678ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } 688ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis return buffer; 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 951d01a12e7150be569557b64da9b8663c62c13594Eino-Ville Talvala virtual status_t queueBuffer(int buf, int64_t timestamp) { 968ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis Parcel data, reply; 978ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor()); 988ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis data.writeInt32(buf); 991d01a12e7150be569557b64da9b8663c62c13594Eino-Ville Talvala data.writeInt64(timestamp); 1008ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis remote()->transact(QUEUE_BUFFER, data, &reply); 1018ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis status_t result = reply.readInt32(); 1028ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis return result; 1038ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } 1048ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis 1058ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis virtual void cancelBuffer(int buf) { 1068ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis Parcel data, reply; 1078ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor()); 1088ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis data.writeInt32(buf); 1098ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis remote()->transact(CANCEL_BUFFER, data, &reply); 1108ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } 1118ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis 1128ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis virtual status_t setCrop(const Rect& reg) { 1138ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis Parcel data, reply; 1148ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor()); 1158ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis data.writeFloat(reg.left); 1168ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis data.writeFloat(reg.top); 1178ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis data.writeFloat(reg.right); 1188ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis data.writeFloat(reg.bottom); 1198ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis remote()->transact(SET_CROP, data, &reply); 1208ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis status_t result = reply.readInt32(); 1218ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis return result; 1228ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } 1238ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis 1248ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis virtual status_t setTransform(uint32_t transform) { 1258ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis Parcel data, reply; 1268ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor()); 1278ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis data.writeInt32(transform); 1288ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis remote()->transact(SET_TRANSFORM, data, &reply); 1298ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis status_t result = reply.readInt32(); 1308ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis return result; 1318ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } 1321b20cde313b5ef8acdace742328df867956d24cbJamie Gennis 1331b20cde313b5ef8acdace742328df867956d24cbJamie Gennis virtual sp<IBinder> getAllocator() { 1341b20cde313b5ef8acdace742328df867956d24cbJamie Gennis Parcel data, reply; 1351b20cde313b5ef8acdace742328df867956d24cbJamie Gennis data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor()); 1361b20cde313b5ef8acdace742328df867956d24cbJamie Gennis remote()->transact(GET_ALLOCATOR, data, &reply); 1371b20cde313b5ef8acdace742328df867956d24cbJamie Gennis return reply.readStrongBinder(); 1381b20cde313b5ef8acdace742328df867956d24cbJamie Gennis } 139eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian 140eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian virtual int query(int what, int* value) { 141eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian Parcel data, reply; 142eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor()); 143eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian data.writeInt32(what); 144eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian remote()->transact(QUERY, data, &reply); 145eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian value[0] = reply.readInt32(); 146eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian status_t result = reply.readInt32(); 147eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian return result; 148eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian } 149eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian 1508072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian virtual status_t setSynchronousMode(bool enabled) { 1518072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian Parcel data, reply; 1528072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor()); 1538072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian data.writeInt32(enabled); 1548072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian remote()->transact(SET_SYNCHRONOUS_MODE, data, &reply); 1558072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian status_t result = reply.readInt32(); 1568072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian return result; 1578072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian } 1588072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian 159fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis virtual status_t connect(int api) { 160fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis Parcel data, reply; 161fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor()); 162fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis data.writeInt32(api); 163fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis remote()->transact(CONNECT, data, &reply); 164fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis status_t result = reply.readInt32(); 165fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis return result; 166fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis } 1678072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian 168fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis virtual status_t disconnect(int api) { 169fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis Parcel data, reply; 170fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor()); 171fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis data.writeInt32(api); 172fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis remote()->transact(DISCONNECT, data, &reply); 173fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis status_t result = reply.readInt32(); 174fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis return result; 175fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis } 1768ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis}; 1778ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis 1788ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie GennisIMPLEMENT_META_INTERFACE(SurfaceTexture, "android.gui.SurfaceTexture"); 1798ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis 1808ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis// ---------------------------------------------------------------------- 1818ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis 1828ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennisstatus_t BnSurfaceTexture::onTransact( 1838ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) 1848ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis{ 1858ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis switch(code) { 1868ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis case REQUEST_BUFFER: { 1878ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis CHECK_INTERFACE(ISurfaceTexture, data, reply); 1888ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis int bufferIdx = data.readInt32(); 189c04f153353cdb0d291297d10452239f791d3fd2bMathias Agopian sp<GraphicBuffer> buffer(requestBuffer(bufferIdx)); 1908ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis reply->writeInt32(buffer != 0); 1918ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis if (buffer != 0) { 1928ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis reply->write(*buffer); 1938ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } 1948ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis return NO_ERROR; 1958ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } break; 1968ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis case SET_BUFFER_COUNT: { 1978ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis CHECK_INTERFACE(ISurfaceTexture, data, reply); 1988ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis int bufferCount = data.readInt32(); 1998ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis int result = setBufferCount(bufferCount); 2008ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis reply->writeInt32(result); 2018ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis return NO_ERROR; 2028ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } break; 2038ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis case DEQUEUE_BUFFER: { 2048ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis CHECK_INTERFACE(ISurfaceTexture, data, reply); 205c04f153353cdb0d291297d10452239f791d3fd2bMathias Agopian uint32_t w = data.readInt32(); 206c04f153353cdb0d291297d10452239f791d3fd2bMathias Agopian uint32_t h = data.readInt32(); 207c04f153353cdb0d291297d10452239f791d3fd2bMathias Agopian uint32_t format = data.readInt32(); 208c04f153353cdb0d291297d10452239f791d3fd2bMathias Agopian uint32_t usage = data.readInt32(); 2098ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis int buf; 210c04f153353cdb0d291297d10452239f791d3fd2bMathias Agopian int result = dequeueBuffer(&buf, w, h, format, usage); 2118ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis reply->writeInt32(buf); 2128ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis reply->writeInt32(result); 2138ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis return NO_ERROR; 2148ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } break; 2158ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis case QUEUE_BUFFER: { 2168ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis CHECK_INTERFACE(ISurfaceTexture, data, reply); 2178ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis int buf = data.readInt32(); 2181d01a12e7150be569557b64da9b8663c62c13594Eino-Ville Talvala int64_t timestamp = data.readInt64(); 2191d01a12e7150be569557b64da9b8663c62c13594Eino-Ville Talvala status_t result = queueBuffer(buf, timestamp); 2208ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis reply->writeInt32(result); 2218ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis return NO_ERROR; 2228ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } break; 2238ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis case CANCEL_BUFFER: { 2248ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis CHECK_INTERFACE(ISurfaceTexture, data, reply); 2258ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis int buf = data.readInt32(); 2268ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis cancelBuffer(buf); 2278ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis return NO_ERROR; 2288ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } break; 2298ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis case SET_CROP: { 2308ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis Rect reg; 2318ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis CHECK_INTERFACE(ISurfaceTexture, data, reply); 2328ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis reg.left = data.readFloat(); 2338ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis reg.top = data.readFloat(); 2348ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis reg.right = data.readFloat(); 2358ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis reg.bottom = data.readFloat(); 2368ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis status_t result = setCrop(reg); 2378ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis reply->writeInt32(result); 2388ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis return NO_ERROR; 2398ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } break; 2408ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis case SET_TRANSFORM: { 2418ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis CHECK_INTERFACE(ISurfaceTexture, data, reply); 2428ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis uint32_t transform = data.readInt32(); 2438ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis status_t result = setTransform(transform); 2448ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis reply->writeInt32(result); 2458ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis return NO_ERROR; 2468ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } break; 2471b20cde313b5ef8acdace742328df867956d24cbJamie Gennis case GET_ALLOCATOR: { 2481b20cde313b5ef8acdace742328df867956d24cbJamie Gennis CHECK_INTERFACE(ISurfaceTexture, data, reply); 2491b20cde313b5ef8acdace742328df867956d24cbJamie Gennis sp<IBinder> result = getAllocator(); 2501b20cde313b5ef8acdace742328df867956d24cbJamie Gennis reply->writeStrongBinder(result); 2511b20cde313b5ef8acdace742328df867956d24cbJamie Gennis return NO_ERROR; 2521b20cde313b5ef8acdace742328df867956d24cbJamie Gennis } break; 253eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian case QUERY: { 254eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian CHECK_INTERFACE(ISurfaceTexture, data, reply); 255eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian int value; 256eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian int what = data.readInt32(); 257eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian int res = query(what, &value); 258eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian reply->writeInt32(value); 259eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian reply->writeInt32(res); 260eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian return NO_ERROR; 261eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian } break; 2628072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian case SET_SYNCHRONOUS_MODE: { 2638072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian CHECK_INTERFACE(ISurfaceTexture, data, reply); 2648072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian bool enabled = data.readInt32(); 2658072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian status_t res = setSynchronousMode(enabled); 2668072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian reply->writeInt32(res); 2678072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian return NO_ERROR; 2688072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian } break; 269fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis case CONNECT: { 270fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis CHECK_INTERFACE(ISurfaceTexture, data, reply); 271fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis int api = data.readInt32(); 272fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis status_t res = connect(api); 273fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis reply->writeInt32(res); 274fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis return NO_ERROR; 275fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis } break; 276fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis case DISCONNECT: { 277fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis CHECK_INTERFACE(ISurfaceTexture, data, reply); 278fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis int api = data.readInt32(); 2792773004a83624ed41cf3f94f2b11878cd8521812Mathias Agopian status_t res = disconnect(api); 280fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis reply->writeInt32(res); 281fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis return NO_ERROR; 282fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis } break; 2838ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis } 2848ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis return BBinder::onTransact(code, data, reply, flags); 2858ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis} 2868ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis 2878ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis// ---------------------------------------------------------------------------- 2888ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis 2898ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis}; // namespace android 290