19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
171473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian#define LOG_TAG "ISurface"
181473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdio.h>
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdint.h>
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <sys/types.h>
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
230795272aa226f4e965968a03daddc53ce30b7cdaMathias Agopian#include <binder/Parcel.h>
240795272aa226f4e965968a03daddc53ce30b7cdaMathias Agopian#include <binder/IMemory.h>
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <ui/Overlay.h>
276950e428feaccc8164b989ef64e771a99948797aMathias Agopian#include <ui/GraphicBuffer.h>
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29000479f9e325b4e426a67033abd92d47da412725Mathias Agopian#include <surfaceflinger/Surface.h>
30000479f9e325b4e426a67033abd92d47da412725Mathias Agopian#include <surfaceflinger/ISurface.h>
31000479f9e325b4e426a67033abd92d47da412725Mathias Agopian
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android {
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
341473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian// ----------------------------------------------------------------------
351473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectISurface::BufferHeap::BufferHeap()
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    : w(0), h(0), hor_stride(0), ver_stride(0), format(0),
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    transform(0), flags(0)
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectISurface::BufferHeap::BufferHeap(uint32_t w, uint32_t h,
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int32_t hor_stride, int32_t ver_stride,
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        PixelFormat format, const sp<IMemoryHeap>& heap)
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    : w(w), h(h), hor_stride(hor_stride), ver_stride(ver_stride),
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      format(format), transform(0), flags(0), heap(heap)
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectISurface::BufferHeap::BufferHeap(uint32_t w, uint32_t h,
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int32_t hor_stride, int32_t ver_stride,
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        PixelFormat format, uint32_t transform, uint32_t flags,
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        const sp<IMemoryHeap>& heap)
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        : w(w), h(h), hor_stride(hor_stride), ver_stride(ver_stride),
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project          format(format), transform(transform), flags(flags), heap(heap)
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectISurface::BufferHeap::~BufferHeap()
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
641473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian// ----------------------------------------------------------------------
651473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass BpSurface : public BpInterface<ISurface>
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic:
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    BpSurface(const sp<IBinder>& impl)
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        : BpInterface<ISurface>(impl)
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    {
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
742be352adab7f11646fda7c0240e496bbb37f7bd1Mathias Agopian    virtual sp<GraphicBuffer> requestBuffer(int bufferIdx,
752be352adab7f11646fda7c0240e496bbb37f7bd1Mathias Agopian            uint32_t w, uint32_t h, uint32_t format, uint32_t usage)
761473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian    {
771473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian        Parcel data, reply;
781473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian        data.writeInterfaceToken(ISurface::getInterfaceDescriptor());
799779b221e999583ff89e0dfc40e56398737adbb3Mathias Agopian        data.writeInt32(bufferIdx);
802be352adab7f11646fda7c0240e496bbb37f7bd1Mathias Agopian        data.writeInt32(w);
812be352adab7f11646fda7c0240e496bbb37f7bd1Mathias Agopian        data.writeInt32(h);
822be352adab7f11646fda7c0240e496bbb37f7bd1Mathias Agopian        data.writeInt32(format);
835cec4742b3a1d7448bd32ae57cb4cf70b484c64cMathias Agopian        data.writeInt32(usage);
849779b221e999583ff89e0dfc40e56398737adbb3Mathias Agopian        remote()->transact(REQUEST_BUFFER, data, &reply);
85c86727f5805f28fbd25da141c50fb6843f364f3aMathias Agopian        sp<GraphicBuffer> buffer = new GraphicBuffer();
86c86727f5805f28fbd25da141c50fb6843f364f3aMathias Agopian        reply.read(*buffer);
871473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian        return buffer;
881473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian    }
891473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian
9059751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian    virtual status_t setBufferCount(int bufferCount)
9159751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian    {
9259751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian        Parcel data, reply;
9359751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian        data.writeInterfaceToken(ISurface::getInterfaceDescriptor());
9459751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian        data.writeInt32(bufferCount);
9559751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian        remote()->transact(SET_BUFFER_COUNT, data, &reply);
9659751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian        status_t err = reply.readInt32();
9759751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian        return err;
9859751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian    }
9959751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual status_t registerBuffers(const BufferHeap& buffers)
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    {
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Parcel data, reply;
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeInterfaceToken(ISurface::getInterfaceDescriptor());
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeInt32(buffers.w);
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeInt32(buffers.h);
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeInt32(buffers.hor_stride);
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeInt32(buffers.ver_stride);
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeInt32(buffers.format);
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeInt32(buffers.transform);
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeInt32(buffers.flags);
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeStrongBinder(buffers.heap->asBinder());
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        remote()->transact(REGISTER_BUFFERS, data, &reply);
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        status_t result = reply.readInt32();
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return result;
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual void postBuffer(ssize_t offset)
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    {
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Parcel data, reply;
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeInterfaceToken(ISurface::getInterfaceDescriptor());
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeInt32(offset);
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        remote()->transact(POST_BUFFER, data, &reply, IBinder::FLAG_ONEWAY);
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual void unregisterBuffers()
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    {
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Parcel data, reply;
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeInterfaceToken(ISurface::getInterfaceDescriptor());
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        remote()->transact(UNREGISTER_BUFFERS, data, &reply);
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual sp<OverlayRef> createOverlay(
133e1ceec234c618729cc7bd35fecb11744b52c1cc8Chih-Chung Chang             uint32_t w, uint32_t h, int32_t format, int32_t orientation)
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    {
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Parcel data, reply;
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeInterfaceToken(ISurface::getInterfaceDescriptor());
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeInt32(w);
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeInt32(h);
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeInt32(format);
140e1ceec234c618729cc7bd35fecb11744b52c1cc8Chih-Chung Chang        data.writeInt32(orientation);
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        remote()->transact(CREATE_OVERLAY, data, &reply);
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return OverlayRef::readFromParcel(reply);
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIMPLEMENT_META_INTERFACE(Surface, "android.ui.ISurface");
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ----------------------------------------------------------------------
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatus_t BnSurface::onTransact(
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    switch(code) {
1549779b221e999583ff89e0dfc40e56398737adbb3Mathias Agopian        case REQUEST_BUFFER: {
1551473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian            CHECK_INTERFACE(ISurface, data, reply);
1569779b221e999583ff89e0dfc40e56398737adbb3Mathias Agopian            int bufferIdx = data.readInt32();
1572be352adab7f11646fda7c0240e496bbb37f7bd1Mathias Agopian            uint32_t w = data.readInt32();
1582be352adab7f11646fda7c0240e496bbb37f7bd1Mathias Agopian            uint32_t h = data.readInt32();
1592be352adab7f11646fda7c0240e496bbb37f7bd1Mathias Agopian            uint32_t format = data.readInt32();
1602be352adab7f11646fda7c0240e496bbb37f7bd1Mathias Agopian            uint32_t usage = data.readInt32();
1612be352adab7f11646fda7c0240e496bbb37f7bd1Mathias Agopian            sp<GraphicBuffer> buffer(requestBuffer(bufferIdx, w, h, format, usage));
162c86727f5805f28fbd25da141c50fb6843f364f3aMathias Agopian            if (buffer == NULL)
163c86727f5805f28fbd25da141c50fb6843f364f3aMathias Agopian                return BAD_VALUE;
164c86727f5805f28fbd25da141c50fb6843f364f3aMathias Agopian            return reply->write(*buffer);
1651473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian        }
16659751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian        case SET_BUFFER_COUNT: {
16759751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian            CHECK_INTERFACE(ISurface, data, reply);
16859751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian            int bufferCount = data.readInt32();
16959751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian            status_t err = setBufferCount(bufferCount);
17059751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian            reply->writeInt32(err);
17159751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian            return NO_ERROR;
17259751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian        }
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        case REGISTER_BUFFERS: {
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            CHECK_INTERFACE(ISurface, data, reply);
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            BufferHeap buffer;
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.w = data.readInt32();
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.h = data.readInt32();
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.hor_stride = data.readInt32();
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.ver_stride= data.readInt32();
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.format = data.readInt32();
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.transform = data.readInt32();
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.flags = data.readInt32();
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.heap = interface_cast<IMemoryHeap>(data.readStrongBinder());
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t err = registerBuffers(buffer);
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            reply->writeInt32(err);
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return NO_ERROR;
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } break;
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        case UNREGISTER_BUFFERS: {
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            CHECK_INTERFACE(ISurface, data, reply);
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            unregisterBuffers();
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return NO_ERROR;
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } break;
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        case POST_BUFFER: {
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            CHECK_INTERFACE(ISurface, data, reply);
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ssize_t offset = data.readInt32();
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            postBuffer(offset);
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return NO_ERROR;
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } break;
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        case CREATE_OVERLAY: {
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            CHECK_INTERFACE(ISurface, data, reply);
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int w = data.readInt32();
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int h = data.readInt32();
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int f = data.readInt32();
204e1ceec234c618729cc7bd35fecb11744b52c1cc8Chih-Chung Chang            int orientation = data.readInt32();
205e1ceec234c618729cc7bd35fecb11744b52c1cc8Chih-Chung Chang            sp<OverlayRef> o = createOverlay(w, h, f, orientation);
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return OverlayRef::writeToParcel(reply, o);
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } break;
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        default:
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return BBinder::onTransact(code, data, reply, flags);
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; // namespace android
214