/* * 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. */ #ifndef ANDROID_GUI_SURFACE_CONTROL_H #define ANDROID_GUI_SURFACE_CONTROL_H #include #include #include #include #include #include #include #include #include namespace android { // --------------------------------------------------------------------------- class IGraphicBufferProducer; class Surface; class SurfaceComposerClient; class BLASTBufferQueue; // --------------------------------------------------------------------------- class SurfaceControl : public RefBase { public: static status_t readFromParcel(const Parcel& parcel, sp* outSurfaceControl); status_t writeToParcel(Parcel& parcel); static status_t readNullableFromParcel(const Parcel& parcel, sp* outSurfaceControl); static status_t writeNullableToParcel(Parcel& parcel, const sp& surfaceControl); static bool isValid(const sp& surface) { return (surface != nullptr) && surface->isValid(); } bool isValid() { return mHandle!=nullptr && mClient!=nullptr; } static bool isSameSurface( const sp& lhs, const sp& rhs); // Reparent off-screen and release. This is invoked by the destructor. void destroy(); // disconnect any api that's connected void disconnect(); static status_t writeSurfaceToParcel( const sp& control, Parcel* parcel); sp getSurface(); sp createSurface(); sp getHandle() const; sp getLayerStateHandle() const; int32_t getLayerId() const; sp getIGraphicBufferProducer(); status_t clearLayerFrameStats() const; status_t getLayerFrameStats(FrameStats* outStats) const; sp getClient() const; uint32_t getTransformHint() const; void setTransformHint(uint32_t hint); void updateDefaultBufferSize(uint32_t width, uint32_t height); explicit SurfaceControl(const sp& other); SurfaceControl(const sp& client, const sp& handle, const sp& gbp, int32_t layerId, uint32_t width = 0, uint32_t height = 0, PixelFormat format = 0, uint32_t transformHint = 0, uint32_t flags = 0); sp getParentingLayer(); private: // can't be copied SurfaceControl& operator = (SurfaceControl& rhs); SurfaceControl(const SurfaceControl& rhs); friend class SurfaceComposerClient; friend class Surface; ~SurfaceControl(); sp generateSurfaceLocked(); status_t validate() const; sp mClient; sp mHandle; sp mGraphicBufferProducer; mutable Mutex mLock; mutable sp mSurfaceData; mutable sp mBbq; mutable sp mBbqChild; int32_t mLayerId; uint32_t mTransformHint; uint32_t mWidth; uint32_t mHeight; PixelFormat mFormat; uint32_t mCreateFlags; }; }; // namespace android #endif // ANDROID_GUI_SURFACE_CONTROL_H