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>
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
257bb843ca0777111dae7daf8f1b0705817cf523c4Mathias Agopian#include <gui/ISurfaceTexture.h>
26000479f9e325b4e426a67033abd92d47da412725Mathias Agopian#include <surfaceflinger/ISurface.h>
27000479f9e325b4e426a67033abd92d47da412725Mathias Agopian
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android {
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
301473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian// ----------------------------------------------------------------------
311473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass BpSurface : public BpInterface<ISurface>
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic:
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    BpSurface(const sp<IBinder>& impl)
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        : BpInterface<ISurface>(impl)
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    {
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
407bb843ca0777111dae7daf8f1b0705817cf523c4Mathias Agopian    virtual sp<ISurfaceTexture> getSurfaceTexture() const {
411473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian        Parcel data, reply;
421473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian        data.writeInterfaceToken(ISurface::getInterfaceDescriptor());
437bb843ca0777111dae7daf8f1b0705817cf523c4Mathias Agopian        remote()->transact(GET_SURFACE_TEXTURE, data, &reply);
447bb843ca0777111dae7daf8f1b0705817cf523c4Mathias Agopian        return interface_cast<ISurfaceTexture>(reply.readStrongBinder());
4559751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian    }
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectIMPLEMENT_META_INTERFACE(Surface, "android.ui.ISurface");
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ----------------------------------------------------------------------
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatus_t BnSurface::onTransact(
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    switch(code) {
567bb843ca0777111dae7daf8f1b0705817cf523c4Mathias Agopian        case GET_SURFACE_TEXTURE: {
5759751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian            CHECK_INTERFACE(ISurface, data, reply);
587bb843ca0777111dae7daf8f1b0705817cf523c4Mathias Agopian            reply->writeStrongBinder( getSurfaceTexture()->asBinder() );
5959751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian            return NO_ERROR;
6059751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4bMathias Agopian        }
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        default:
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return BBinder::onTransact(code, data, reply, flags);
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; // namespace android
67