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