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