ISurface.cpp revision 59751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4b
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
746950e428feaccc8164b989ef64e771a99948797aMathias Agopian    virtual sp<GraphicBuffer> requestBuffer(int bufferIdx, int usage)
751473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian    {
761473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian        Parcel data, reply;
771473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian        data.writeInterfaceToken(ISurface::getInterfaceDescriptor());
789779b221e999583ff89e0dfc40e56398737adbb3Mathias Agopian        data.writeInt32(bufferIdx);
795cec4742b3a1d7448bd32ae57cb4cf70b484c64cMathias Agopian        data.writeInt32(usage);
809779b221e999583ff89e0dfc40e56398737adbb3Mathias Agopian        remote()->transact(REQUEST_BUFFER, data, &reply);
81c86727f5805f28fbd25da141c50fb6843f364f3aMathias Agopian        sp<GraphicBuffer> buffer = new GraphicBuffer();
82c86727f5805f28fbd25da141c50fb6843f364f3aMathias Agopian        reply.read(*buffer);
831473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian        return buffer;
841473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian    }
851473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian
8659751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian    virtual status_t setBufferCount(int bufferCount)
8759751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian    {
8859751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian        Parcel data, reply;
8959751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian        data.writeInterfaceToken(ISurface::getInterfaceDescriptor());
9059751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian        data.writeInt32(bufferCount);
9159751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian        remote()->transact(SET_BUFFER_COUNT, data, &reply);
9259751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian        status_t err = reply.readInt32();
9359751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian        return err;
9459751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian    }
9559751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual status_t registerBuffers(const BufferHeap& buffers)
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    {
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Parcel data, reply;
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeInterfaceToken(ISurface::getInterfaceDescriptor());
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeInt32(buffers.w);
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeInt32(buffers.h);
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeInt32(buffers.hor_stride);
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeInt32(buffers.ver_stride);
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeInt32(buffers.format);
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeInt32(buffers.transform);
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeInt32(buffers.flags);
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeStrongBinder(buffers.heap->asBinder());
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        remote()->transact(REGISTER_BUFFERS, data, &reply);
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        status_t result = reply.readInt32();
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return result;
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual void postBuffer(ssize_t offset)
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    {
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Parcel data, reply;
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeInterfaceToken(ISurface::getInterfaceDescriptor());
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeInt32(offset);
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        remote()->transact(POST_BUFFER, data, &reply, IBinder::FLAG_ONEWAY);
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual void unregisterBuffers()
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    {
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Parcel data, reply;
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeInterfaceToken(ISurface::getInterfaceDescriptor());
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        remote()->transact(UNREGISTER_BUFFERS, data, &reply);
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    virtual sp<OverlayRef> createOverlay(
129e1ceec234c618729cc7bd35fecb11744b52c1cc8Chih-Chung Chang             uint32_t w, uint32_t h, int32_t format, int32_t orientation)
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    {
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        Parcel data, reply;
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeInterfaceToken(ISurface::getInterfaceDescriptor());
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeInt32(w);
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeInt32(h);
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        data.writeInt32(format);
136e1ceec234c618729cc7bd35fecb11744b52c1cc8Chih-Chung Chang        data.writeInt32(orientation);
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        remote()->transact(CREATE_OVERLAY, data, &reply);
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return OverlayRef::readFromParcel(reply);
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIMPLEMENT_META_INTERFACE(Surface, "android.ui.ISurface");
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ----------------------------------------------------------------------
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatus_t BnSurface::onTransact(
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    switch(code) {
1509779b221e999583ff89e0dfc40e56398737adbb3Mathias Agopian        case REQUEST_BUFFER: {
1511473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian            CHECK_INTERFACE(ISurface, data, reply);
1529779b221e999583ff89e0dfc40e56398737adbb3Mathias Agopian            int bufferIdx = data.readInt32();
1535cec4742b3a1d7448bd32ae57cb4cf70b484c64cMathias Agopian            int usage = data.readInt32();
1546950e428feaccc8164b989ef64e771a99948797aMathias Agopian            sp<GraphicBuffer> buffer(requestBuffer(bufferIdx, usage));
155c86727f5805f28fbd25da141c50fb6843f364f3aMathias Agopian            if (buffer == NULL)
156c86727f5805f28fbd25da141c50fb6843f364f3aMathias Agopian                return BAD_VALUE;
157c86727f5805f28fbd25da141c50fb6843f364f3aMathias Agopian            return reply->write(*buffer);
1581473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian        }
15959751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian        case SET_BUFFER_COUNT: {
16059751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian            CHECK_INTERFACE(ISurface, data, reply);
16159751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian            int bufferCount = data.readInt32();
16259751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian            status_t err = setBufferCount(bufferCount);
16359751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian            reply->writeInt32(err);
16459751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian            return NO_ERROR;
16559751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian        }
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        case REGISTER_BUFFERS: {
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            CHECK_INTERFACE(ISurface, data, reply);
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            BufferHeap buffer;
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.w = data.readInt32();
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.h = data.readInt32();
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.hor_stride = data.readInt32();
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.ver_stride= data.readInt32();
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.format = data.readInt32();
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.transform = data.readInt32();
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.flags = data.readInt32();
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            buffer.heap = interface_cast<IMemoryHeap>(data.readStrongBinder());
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            status_t err = registerBuffers(buffer);
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            reply->writeInt32(err);
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return NO_ERROR;
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } break;
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        case UNREGISTER_BUFFERS: {
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            CHECK_INTERFACE(ISurface, data, reply);
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            unregisterBuffers();
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return NO_ERROR;
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } break;
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        case POST_BUFFER: {
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            CHECK_INTERFACE(ISurface, data, reply);
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            ssize_t offset = data.readInt32();
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            postBuffer(offset);
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return NO_ERROR;
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } break;
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        case CREATE_OVERLAY: {
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            CHECK_INTERFACE(ISurface, data, reply);
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int w = data.readInt32();
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int h = data.readInt32();
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            int f = data.readInt32();
197e1ceec234c618729cc7bd35fecb11744b52c1cc8Chih-Chung Chang            int orientation = data.readInt32();
198e1ceec234c618729cc7bd35fecb11744b52c1cc8Chih-Chung Chang            sp<OverlayRef> o = createOverlay(w, h, f, orientation);
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return OverlayRef::writeToParcel(reply, o);
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } break;
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        default:
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return BBinder::onTransact(code, data, reply, flags);
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; // namespace android
207