ISurfaceTexture.cpp revision f0bc2f1d8d37977bd3aef3d3326a70e9e69d4246
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,
39eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian    QUERY,
408072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian    SET_SYNCHRONOUS_MODE,
41fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis    CONNECT,
42fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis    DISCONNECT,
438ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis};
448ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis
458ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis
468ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennisclass BpSurfaceTexture : public BpInterface<ISurfaceTexture>
478ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis{
488ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennispublic:
498ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis    BpSurfaceTexture(const sp<IBinder>& impl)
508ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis        : BpInterface<ISurfaceTexture>(impl)
518ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis    {
528ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis    }
538ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis
547b305fffc39d0fe0926e7fd2d7f6a524fbce62b7Jamie Gennis    virtual status_t requestBuffer(int bufferIdx, sp<GraphicBuffer>* buf) {
558ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis        Parcel data, reply;
568ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis        data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor());
578ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis        data.writeInt32(bufferIdx);
588a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        status_t result =remote()->transact(REQUEST_BUFFER, data, &reply);
598a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        if (result != NO_ERROR) {
608a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis            return result;
618a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        }
628ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis        bool nonNull = reply.readInt32();
638ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis        if (nonNull) {
647b305fffc39d0fe0926e7fd2d7f6a524fbce62b7Jamie Gennis            *buf = new GraphicBuffer();
657b305fffc39d0fe0926e7fd2d7f6a524fbce62b7Jamie Gennis            reply.read(**buf);
668ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis        }
678a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        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);
768a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        status_t result =remote()->transact(SET_BUFFER_COUNT, data, &reply);
778a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        if (result != NO_ERROR) {
788a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis            return result;
798a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        }
808a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        result = reply.readInt32();
818a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        return result;
828ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis    }
838ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis
84c04f153353cdb0d291297d10452239f791d3fd2bMathias Agopian    virtual status_t dequeueBuffer(int *buf, uint32_t w, uint32_t h,
85c04f153353cdb0d291297d10452239f791d3fd2bMathias Agopian            uint32_t format, uint32_t usage) {
868ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis        Parcel data, reply;
878ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis        data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor());
88c04f153353cdb0d291297d10452239f791d3fd2bMathias Agopian        data.writeInt32(w);
89c04f153353cdb0d291297d10452239f791d3fd2bMathias Agopian        data.writeInt32(h);
90c04f153353cdb0d291297d10452239f791d3fd2bMathias Agopian        data.writeInt32(format);
91c04f153353cdb0d291297d10452239f791d3fd2bMathias Agopian        data.writeInt32(usage);
928a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        status_t result = remote()->transact(DEQUEUE_BUFFER, data, &reply);
938a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        if (result != NO_ERROR) {
948a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis            return result;
958a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        }
968ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis        *buf = reply.readInt32();
978a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        result = reply.readInt32();
988ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis        return result;
998ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis    }
1008ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis
101f0bc2f1d8d37977bd3aef3d3326a70e9e69d4246Mathias Agopian    virtual status_t queueBuffer(int buf,
102f0bc2f1d8d37977bd3aef3d3326a70e9e69d4246Mathias Agopian            const QueueBufferInput& input, QueueBufferOutput* output) {
1038ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis        Parcel data, reply;
1048ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis        data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor());
1058ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis        data.writeInt32(buf);
106f0bc2f1d8d37977bd3aef3d3326a70e9e69d4246Mathias Agopian        memcpy(data.writeInplace(sizeof(input)), &input, sizeof(input));
1078a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        status_t result = remote()->transact(QUEUE_BUFFER, data, &reply);
1088a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        if (result != NO_ERROR) {
1098a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis            return result;
1108a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        }
111f0bc2f1d8d37977bd3aef3d3326a70e9e69d4246Mathias Agopian        memcpy(output, reply.readInplace(sizeof(*output)), sizeof(*output));
1128a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        result = reply.readInt32();
1138ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis        return result;
1148ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis    }
1158ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis
1168ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis    virtual void cancelBuffer(int buf) {
1178ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis        Parcel data, reply;
1188ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis        data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor());
1198ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis        data.writeInt32(buf);
1208ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis        remote()->transact(CANCEL_BUFFER, data, &reply);
1218ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis    }
1228ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis
123eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian    virtual int query(int what, int* value) {
124eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian        Parcel data, reply;
125eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian        data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor());
126eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian        data.writeInt32(what);
1278a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        status_t result = remote()->transact(QUERY, data, &reply);
1288a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        if (result != NO_ERROR) {
1298a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis            return result;
1308a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        }
131eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian        value[0] = reply.readInt32();
1328a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        result = reply.readInt32();
133eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian        return result;
134eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian    }
135eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian
1368072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian    virtual status_t setSynchronousMode(bool enabled) {
1378072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian        Parcel data, reply;
1388072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian        data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor());
1398072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian        data.writeInt32(enabled);
1408a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        status_t result = remote()->transact(SET_SYNCHRONOUS_MODE, data, &reply);
1418a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        if (result != NO_ERROR) {
1428a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis            return result;
1438a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        }
1448a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        result = reply.readInt32();
1458072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian        return result;
1468072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian    }
1478072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian
1485bfc24515bb5c8ea7975f72d538df37753733a2fMathias Agopian    virtual status_t connect(int api,
1495bfc24515bb5c8ea7975f72d538df37753733a2fMathias Agopian            uint32_t* outWidth, uint32_t* outHeight, uint32_t* outTransform) {
150fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis        Parcel data, reply;
151fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis        data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor());
152fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis        data.writeInt32(api);
1538a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        status_t result = remote()->transact(CONNECT, data, &reply);
1548a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        if (result != NO_ERROR) {
1558a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis            return result;
1568a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        }
1575bfc24515bb5c8ea7975f72d538df37753733a2fMathias Agopian        *outWidth = reply.readInt32();
1585bfc24515bb5c8ea7975f72d538df37753733a2fMathias Agopian        *outHeight = reply.readInt32();
1595bfc24515bb5c8ea7975f72d538df37753733a2fMathias Agopian        *outTransform = reply.readInt32();
1608a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        result = reply.readInt32();
161fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis        return result;
162fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis    }
1638072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian
164fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis    virtual status_t disconnect(int api) {
165fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis        Parcel data, reply;
166fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis        data.writeInterfaceToken(ISurfaceTexture::getInterfaceDescriptor());
167fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis        data.writeInt32(api);
1688a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        status_t result =remote()->transact(DISCONNECT, data, &reply);
1698a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        if (result != NO_ERROR) {
1708a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis            return result;
1718a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        }
1728a29ff2a356816694c695db70460f93c7fb4ae6fJamie Gennis        result = reply.readInt32();
173fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis        return result;
174fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis    }
1758ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis};
1768ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis
1778ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie GennisIMPLEMENT_META_INTERFACE(SurfaceTexture, "android.gui.SurfaceTexture");
1788ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis
1798ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis// ----------------------------------------------------------------------
1808ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis
1818ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennisstatus_t BnSurfaceTexture::onTransact(
1828ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis    uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
1838ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis{
1848ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis    switch(code) {
1858ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis        case REQUEST_BUFFER: {
1868ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis            CHECK_INTERFACE(ISurfaceTexture, data, reply);
1878ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis            int bufferIdx   = data.readInt32();
1887b305fffc39d0fe0926e7fd2d7f6a524fbce62b7Jamie Gennis            sp<GraphicBuffer> buffer;
1897b305fffc39d0fe0926e7fd2d7f6a524fbce62b7Jamie Gennis            int result = requestBuffer(bufferIdx, &buffer);
1908ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis            reply->writeInt32(buffer != 0);
1918ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis            if (buffer != 0) {
1928ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis                reply->write(*buffer);
1938ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis            }
1947b305fffc39d0fe0926e7fd2d7f6a524fbce62b7Jamie Gennis            reply->writeInt32(result);
1958ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis            return NO_ERROR;
1968ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis        } break;
1978ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis        case SET_BUFFER_COUNT: {
1988ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis            CHECK_INTERFACE(ISurfaceTexture, data, reply);
1998ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis            int bufferCount = data.readInt32();
2008ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis            int result = setBufferCount(bufferCount);
2018ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis            reply->writeInt32(result);
2028ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis            return NO_ERROR;
2038ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis        } break;
2048ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis        case DEQUEUE_BUFFER: {
2058ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis            CHECK_INTERFACE(ISurfaceTexture, data, reply);
206c04f153353cdb0d291297d10452239f791d3fd2bMathias Agopian            uint32_t w      = data.readInt32();
207c04f153353cdb0d291297d10452239f791d3fd2bMathias Agopian            uint32_t h      = data.readInt32();
208c04f153353cdb0d291297d10452239f791d3fd2bMathias Agopian            uint32_t format = data.readInt32();
209c04f153353cdb0d291297d10452239f791d3fd2bMathias Agopian            uint32_t usage  = data.readInt32();
2108ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis            int buf;
211c04f153353cdb0d291297d10452239f791d3fd2bMathias Agopian            int result = dequeueBuffer(&buf, w, h, format, usage);
2128ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis            reply->writeInt32(buf);
2138ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis            reply->writeInt32(result);
2148ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis            return NO_ERROR;
2158ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis        } break;
2168ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis        case QUEUE_BUFFER: {
2178ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis            CHECK_INTERFACE(ISurfaceTexture, data, reply);
2188ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis            int buf = data.readInt32();
219f0bc2f1d8d37977bd3aef3d3326a70e9e69d4246Mathias Agopian            QueueBufferInput const* const input =
220f0bc2f1d8d37977bd3aef3d3326a70e9e69d4246Mathias Agopian                    reinterpret_cast<QueueBufferInput const *>(
221f0bc2f1d8d37977bd3aef3d3326a70e9e69d4246Mathias Agopian                            data.readInplace(sizeof(QueueBufferInput)));
222f0bc2f1d8d37977bd3aef3d3326a70e9e69d4246Mathias Agopian            QueueBufferOutput* const output =
223f0bc2f1d8d37977bd3aef3d3326a70e9e69d4246Mathias Agopian                    reinterpret_cast<QueueBufferOutput *>(
224f0bc2f1d8d37977bd3aef3d3326a70e9e69d4246Mathias Agopian                            reply->writeInplace(sizeof(QueueBufferOutput)));
225f0bc2f1d8d37977bd3aef3d3326a70e9e69d4246Mathias Agopian            status_t result = queueBuffer(buf, *input, output);
2268ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis            reply->writeInt32(result);
2278ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis            return NO_ERROR;
2288ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis        } break;
2298ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis        case CANCEL_BUFFER: {
2308ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis            CHECK_INTERFACE(ISurfaceTexture, data, reply);
2318ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis            int buf = data.readInt32();
2328ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis            cancelBuffer(buf);
2338ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis            return NO_ERROR;
2348ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis        } break;
235eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian        case QUERY: {
236eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian            CHECK_INTERFACE(ISurfaceTexture, data, reply);
237eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian            int value;
238eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian            int what = data.readInt32();
239eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian            int res = query(what, &value);
240eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian            reply->writeInt32(value);
241eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian            reply->writeInt32(res);
242eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian            return NO_ERROR;
243eafabcdc1639fb96062d9e3c39b0ae27b0238ae1Mathias Agopian        } break;
2448072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian        case SET_SYNCHRONOUS_MODE: {
2458072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian            CHECK_INTERFACE(ISurfaceTexture, data, reply);
2468072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian            bool enabled = data.readInt32();
2478072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian            status_t res = setSynchronousMode(enabled);
2488072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian            reply->writeInt32(res);
2498072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian            return NO_ERROR;
2508072711307aa98ee5ee6f7369860ae38c3e19656Mathias Agopian        } break;
251fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis        case CONNECT: {
252fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis            CHECK_INTERFACE(ISurfaceTexture, data, reply);
253fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis            int api = data.readInt32();
2545bfc24515bb5c8ea7975f72d538df37753733a2fMathias Agopian            uint32_t outWidth, outHeight, outTransform;
2555bfc24515bb5c8ea7975f72d538df37753733a2fMathias Agopian            status_t res = connect(api,
2565bfc24515bb5c8ea7975f72d538df37753733a2fMathias Agopian                    &outWidth, &outHeight, &outTransform);
2575bfc24515bb5c8ea7975f72d538df37753733a2fMathias Agopian            reply->writeInt32(outWidth);
2585bfc24515bb5c8ea7975f72d538df37753733a2fMathias Agopian            reply->writeInt32(outHeight);
2595bfc24515bb5c8ea7975f72d538df37753733a2fMathias Agopian            reply->writeInt32(outTransform);
260fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis            reply->writeInt32(res);
261fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis            return NO_ERROR;
262fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis        } break;
263fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis        case DISCONNECT: {
264fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis            CHECK_INTERFACE(ISurfaceTexture, data, reply);
265fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis            int api = data.readInt32();
2662773004a83624ed41cf3f94f2b11878cd8521812Mathias Agopian            status_t res = disconnect(api);
267fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis            reply->writeInt32(res);
268fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis            return NO_ERROR;
269fe0a87b54654a1392650e7f1862df473287d8332Jamie Gennis        } break;
2708ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis    }
2718ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis    return BBinder::onTransact(code, data, reply, flags);
2728ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis}
2738ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis
2748ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis// ----------------------------------------------------------------------------
2758ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis
2768ba32fade11abb73f3fd47ea0953c9528eb5b91fJamie Gennis}; // namespace android
277