diff options
Diffstat (limited to 'libs')
-rw-r--r-- | libs/gui/Android.mk | 1 | ||||
-rw-r--r-- | libs/gui/ISurface.cpp | 66 | ||||
-rw-r--r-- | libs/gui/ISurfaceComposerClient.cpp | 31 | ||||
-rw-r--r-- | libs/gui/SurfaceComposerClient.cpp | 15 | ||||
-rw-r--r-- | libs/gui/SurfaceControl.cpp | 44 |
5 files changed, 46 insertions, 111 deletions
diff --git a/libs/gui/Android.mk b/libs/gui/Android.mk index 544b664..5c7bb4c 100644 --- a/libs/gui/Android.mk +++ b/libs/gui/Android.mk @@ -17,7 +17,6 @@ LOCAL_SRC_FILES:= \ IGraphicBufferProducer.cpp \ ISensorEventConnection.cpp \ ISensorServer.cpp \ - ISurface.cpp \ ISurfaceComposer.cpp \ ISurfaceComposerClient.cpp \ LayerState.cpp \ diff --git a/libs/gui/ISurface.cpp b/libs/gui/ISurface.cpp deleted file mode 100644 index 8c25f45..0000000 --- a/libs/gui/ISurface.cpp +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2007 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#define LOG_TAG "ISurface" - -#include <stdio.h> -#include <stdint.h> -#include <sys/types.h> - -#include <binder/Parcel.h> - -#include <gui/ISurface.h> -#include <gui/IGraphicBufferProducer.h> - -namespace android { - -// ---------------------------------------------------------------------- - -class BpSurface : public BpInterface<ISurface> -{ -public: - BpSurface(const sp<IBinder>& impl) - : BpInterface<ISurface>(impl) - { - } - - virtual sp<IGraphicBufferProducer> getSurfaceTexture() const { - Parcel data, reply; - data.writeInterfaceToken(ISurface::getInterfaceDescriptor()); - remote()->transact(GET_SURFACE_TEXTURE, data, &reply); - return interface_cast<IGraphicBufferProducer>(reply.readStrongBinder()); - } -}; - -IMPLEMENT_META_INTERFACE(Surface, "android.ui.ISurface"); - -// ---------------------------------------------------------------------- - -status_t BnSurface::onTransact( - uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) -{ - switch(code) { - case GET_SURFACE_TEXTURE: { - CHECK_INTERFACE(ISurface, data, reply); - reply->writeStrongBinder( getSurfaceTexture()->asBinder() ); - return NO_ERROR; - } - default: - return BBinder::onTransact(code, data, reply, flags); - } -} - -}; // namespace android diff --git a/libs/gui/ISurfaceComposerClient.cpp b/libs/gui/ISurfaceComposerClient.cpp index 101292d..1adc134 100644 --- a/libs/gui/ISurfaceComposerClient.cpp +++ b/libs/gui/ISurfaceComposerClient.cpp @@ -29,7 +29,7 @@ #include <ui/Point.h> #include <ui/Rect.h> -#include <gui/ISurface.h> +#include <gui/IGraphicBufferProducer.h> #include <gui/ISurfaceComposerClient.h> #include <private/gui/LayerState.h> @@ -46,16 +46,13 @@ class BpSurfaceComposerClient : public BpInterface<ISurfaceComposerClient> { public: BpSurfaceComposerClient(const sp<IBinder>& impl) - : BpInterface<ISurfaceComposerClient>(impl) - { + : BpInterface<ISurfaceComposerClient>(impl) { } - virtual sp<ISurface> createSurface( const String8& name, - uint32_t w, - uint32_t h, - PixelFormat format, - uint32_t flags) - { + virtual status_t createSurface(const String8& name, uint32_t w, + uint32_t h, PixelFormat format, uint32_t flags, + sp<IBinder>* handle, + sp<IGraphicBufferProducer>* gbp) { Parcel data, reply; data.writeInterfaceToken(ISurfaceComposerClient::getInterfaceDescriptor()); data.writeString8(name); @@ -64,11 +61,12 @@ public: data.writeInt32(format); data.writeInt32(flags); remote()->transact(CREATE_SURFACE, data, &reply); - return interface_cast<ISurface>(reply.readStrongBinder()); + *handle = reply.readStrongBinder(); + *gbp = interface_cast<IGraphicBufferProducer>(reply.readStrongBinder()); + return reply.readInt32(); } - virtual status_t destroySurface(const sp<IBinder>& handle) - { + virtual status_t destroySurface(const sp<IBinder>& handle) { Parcel data, reply; data.writeInterfaceToken(ISurfaceComposerClient::getInterfaceDescriptor()); data.writeStrongBinder(handle); @@ -92,8 +90,13 @@ status_t BnSurfaceComposerClient::onTransact( uint32_t h = data.readInt32(); PixelFormat format = data.readInt32(); uint32_t flags = data.readInt32(); - sp<ISurface> s = createSurface(name, w, h, format, flags); - reply->writeStrongBinder(s->asBinder()); + sp<IBinder> handle; + sp<IGraphicBufferProducer> gbp; + status_t result = createSurface(name, w, h, format, flags, + &handle, &gbp); + reply->writeStrongBinder(handle); + reply->writeStrongBinder(gbp->asBinder()); + reply->writeInt32(result); return NO_ERROR; } break; case DESTROY_SURFACE: { diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp index edfa78a..4a4c0c8 100644 --- a/libs/gui/SurfaceComposerClient.cpp +++ b/libs/gui/SurfaceComposerClient.cpp @@ -32,7 +32,6 @@ #include <ui/DisplayInfo.h> #include <gui/IGraphicBufferProducer.h> -#include <gui/ISurface.h> #include <gui/ISurfaceComposer.h> #include <gui/ISurfaceComposerClient.h> #include <gui/SurfaceComposerClient.h> @@ -471,14 +470,18 @@ sp<SurfaceControl> SurfaceComposerClient::createSurface( PixelFormat format, uint32_t flags) { - sp<SurfaceControl> result; + sp<SurfaceControl> sur; if (mStatus == NO_ERROR) { - sp<ISurface> surface = mClient->createSurface(name, w, h, format, flags); - if (surface != 0) { - result = new SurfaceControl(this, surface); + sp<IBinder> handle; + sp<IGraphicBufferProducer> gbp; + status_t err = mClient->createSurface(name, w, h, format, flags, + &handle, &gbp); + ALOGE_IF(err, "SurfaceComposerClient::createSurface error %s", strerror(-err)); + if (err == NO_ERROR) { + sur = new SurfaceControl(this, handle, gbp); } } - return result; + return sur; } sp<IBinder> SurfaceComposerClient::createDisplay(const String8& displayName, diff --git a/libs/gui/SurfaceControl.cpp b/libs/gui/SurfaceControl.cpp index ef52269..bb57948 100644 --- a/libs/gui/SurfaceControl.cpp +++ b/libs/gui/SurfaceControl.cpp @@ -34,7 +34,6 @@ #include <ui/GraphicBuffer.h> #include <ui/Rect.h> -#include <gui/ISurface.h> #include <gui/ISurfaceComposer.h> #include <gui/Surface.h> #include <gui/SurfaceComposerClient.h> @@ -48,13 +47,10 @@ namespace android { SurfaceControl::SurfaceControl( const sp<SurfaceComposerClient>& client, - const sp<ISurface>& surface) - : mClient(client) + const sp<IBinder>& handle, + const sp<IGraphicBufferProducer>& gbp) + : mClient(client), mHandle(handle), mGraphicBufferProducer(gbp) { - if (surface != 0) { - mSurface = surface->asBinder(); - mGraphicBufferProducer = surface->getSurfaceTexture(); - } } SurfaceControl::~SurfaceControl() @@ -65,12 +61,12 @@ SurfaceControl::~SurfaceControl() void SurfaceControl::destroy() { if (isValid()) { - mClient->destroySurface(mSurface); + mClient->destroySurface(mHandle); } // clear all references and trigger an IPC now, to make sure things // happen without delay, since these resources are quite heavy. mClient.clear(); - mSurface.clear(); + mHandle.clear(); mGraphicBufferProducer.clear(); IPCThreadState::self()->flushCommands(); } @@ -91,81 +87,81 @@ bool SurfaceControl::isSameSurface( { if (lhs == 0 || rhs == 0) return false; - return lhs->mSurface == rhs->mSurface; + return lhs->mHandle == rhs->mHandle; } status_t SurfaceControl::setLayerStack(int32_t layerStack) { status_t err = validate(); if (err < 0) return err; const sp<SurfaceComposerClient>& client(mClient); - return client->setLayerStack(mSurface, layerStack); + return client->setLayerStack(mHandle, layerStack); } status_t SurfaceControl::setLayer(int32_t layer) { status_t err = validate(); if (err < 0) return err; const sp<SurfaceComposerClient>& client(mClient); - return client->setLayer(mSurface, layer); + return client->setLayer(mHandle, layer); } status_t SurfaceControl::setPosition(int32_t x, int32_t y) { status_t err = validate(); if (err < 0) return err; const sp<SurfaceComposerClient>& client(mClient); - return client->setPosition(mSurface, x, y); + return client->setPosition(mHandle, x, y); } status_t SurfaceControl::setSize(uint32_t w, uint32_t h) { status_t err = validate(); if (err < 0) return err; const sp<SurfaceComposerClient>& client(mClient); - return client->setSize(mSurface, w, h); + return client->setSize(mHandle, w, h); } status_t SurfaceControl::hide() { status_t err = validate(); if (err < 0) return err; const sp<SurfaceComposerClient>& client(mClient); - return client->hide(mSurface); + return client->hide(mHandle); } status_t SurfaceControl::show() { status_t err = validate(); if (err < 0) return err; const sp<SurfaceComposerClient>& client(mClient); - return client->show(mSurface); + return client->show(mHandle); } status_t SurfaceControl::setFlags(uint32_t flags, uint32_t mask) { status_t err = validate(); if (err < 0) return err; const sp<SurfaceComposerClient>& client(mClient); - return client->setFlags(mSurface, flags, mask); + return client->setFlags(mHandle, flags, mask); } status_t SurfaceControl::setTransparentRegionHint(const Region& transparent) { status_t err = validate(); if (err < 0) return err; const sp<SurfaceComposerClient>& client(mClient); - return client->setTransparentRegionHint(mSurface, transparent); + return client->setTransparentRegionHint(mHandle, transparent); } status_t SurfaceControl::setAlpha(float alpha) { status_t err = validate(); if (err < 0) return err; const sp<SurfaceComposerClient>& client(mClient); - return client->setAlpha(mSurface, alpha); + return client->setAlpha(mHandle, alpha); } status_t SurfaceControl::setMatrix(float dsdx, float dtdx, float dsdy, float dtdy) { status_t err = validate(); if (err < 0) return err; const sp<SurfaceComposerClient>& client(mClient); - return client->setMatrix(mSurface, dsdx, dtdx, dsdy, dtdy); + return client->setMatrix(mHandle, dsdx, dtdx, dsdy, dtdy); } status_t SurfaceControl::setCrop(const Rect& crop) { status_t err = validate(); if (err < 0) return err; const sp<SurfaceComposerClient>& client(mClient); - return client->setCrop(mSurface, crop); + return client->setCrop(mHandle, crop); } status_t SurfaceControl::validate() const { - if (mSurface==0 || mClient==0) { - ALOGE("invalid ISurface (%p) or client (%p)", - mSurface.get(), mClient.get()); + if (mHandle==0 || mClient==0) { + ALOGE("invalid handle (%p) or client (%p)", + mHandle.get(), mClient.get()); return NO_INIT; } return NO_ERROR; |