1e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian/* 2e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian * Copyright (C) 2007 The Android Open Source Project 3e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian * 4e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 5e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian * you may not use this file except in compliance with the License. 6e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian * You may obtain a copy of the License at 7e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian * 8e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 9e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian * 10e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian * Unless required by applicable law or agreed to in writing, software 11e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 12e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian * See the License for the specific language governing permissions and 14e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian * limitations under the License. 15e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian */ 16e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 17e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian#ifndef ANDROID_GUI_SURFACE_CONTROL_H 18e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian#define ANDROID_GUI_SURFACE_CONTROL_H 19e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 20e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian#include <stdint.h> 21e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian#include <sys/types.h> 22e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 23e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian#include <utils/KeyedVector.h> 24e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian#include <utils/RefBase.h> 25e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian#include <utils/threads.h> 26e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 27d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav#include <ui/FrameStats.h> 28e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian#include <ui/PixelFormat.h> 29e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian#include <ui/Region.h> 30e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 31e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian#include <gui/ISurfaceComposerClient.h> 3213fdc49516d17f41e64e62e73c313b0928bf13ccchaviw#include <math/vec3.h> 33e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 34e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopiannamespace android { 35e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 36e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian// --------------------------------------------------------------------------- 37e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 38e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopianclass IGraphicBufferProducer; 39e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopianclass Surface; 40e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopianclass SurfaceComposerClient; 41e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 42e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian// --------------------------------------------------------------------------- 43e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 44e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopianclass SurfaceControl : public RefBase 45e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian{ 46e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopianpublic: 47f3cf4bcfa2c558f03e178f7044d3cb12fa0e73edJorim Jaggi static sp<SurfaceControl> readFromParcel(Parcel* parcel); 48f3cf4bcfa2c558f03e178f7044d3cb12fa0e73edJorim Jaggi void writeToParcel(Parcel* parcel); 49f3cf4bcfa2c558f03e178f7044d3cb12fa0e73edJorim Jaggi 50e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian static bool isValid(const sp<SurfaceControl>& surface) { 51e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian return (surface != 0) && surface->isValid(); 52e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian } 534d9b822e2c18142e55fe2611aa6cd7dc7d4a62c6Mathias Agopian 54e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian bool isValid() { 554d9b822e2c18142e55fe2611aa6cd7dc7d4a62c6Mathias Agopian return mHandle!=0 && mClient!=0; 56e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian } 574d9b822e2c18142e55fe2611aa6cd7dc7d4a62c6Mathias Agopian 58e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian static bool isSameSurface( 59e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian const sp<SurfaceControl>& lhs, const sp<SurfaceControl>& rhs); 60d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav 61e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian // release surface data from java 62e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian void clear(); 63d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav 641b3a9acb77ee12568fa19740d8eeab165a0dcd98Chong Zhang // disconnect any api that's connected 651b3a9acb77ee12568fa19740d8eeab165a0dcd98Chong Zhang void disconnect(); 661b3a9acb77ee12568fa19740d8eeab165a0dcd98Chong Zhang 67e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian static status_t writeSurfaceToParcel( 68e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian const sp<SurfaceControl>& control, Parcel* parcel); 69e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 70e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian sp<Surface> getSurface() const; 714e623e259c3e8677d57f761a3708423fb2e77e2aBryce Lee sp<Surface> createSurface() const; 727dde599bf1a0dbef7390d91c2689d506371cdbd7Dan Stoza sp<IBinder> getHandle() const; 73e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 74d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav status_t clearLayerFrameStats() const; 75d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav status_t getLayerFrameStats(FrameStats* outStats) const; 76d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav 774cdc58f6840d15b4952149d2b345ec1f97d505bcRobert Carr sp<SurfaceComposerClient> getClient() const; 784cdc58f6840d15b4952149d2b345ec1f97d505bcRobert Carr 79e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopianprivate: 80e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian // can't be copied 81e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian SurfaceControl& operator = (SurfaceControl& rhs); 82e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian SurfaceControl(const SurfaceControl& rhs); 83e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 84e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian friend class SurfaceComposerClient; 85e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian friend class Surface; 86e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 87e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian SurfaceControl( 88e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian const sp<SurfaceComposerClient>& client, 894d9b822e2c18142e55fe2611aa6cd7dc7d4a62c6Mathias Agopian const sp<IBinder>& handle, 900b26710528eb69f3883f295f3e6146e6466fd082Jorim Jaggi const sp<IGraphicBufferProducer>& gbp, 910b26710528eb69f3883f295f3e6146e6466fd082Jorim Jaggi bool owned); 92e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 93e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian ~SurfaceControl(); 94e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 954e623e259c3e8677d57f761a3708423fb2e77e2aBryce Lee sp<Surface> generateSurfaceLocked() const; 96e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian status_t validate() const; 97e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian void destroy(); 98d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav 99e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian sp<SurfaceComposerClient> mClient; 1004d9b822e2c18142e55fe2611aa6cd7dc7d4a62c6Mathias Agopian sp<IBinder> mHandle; 101e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian sp<IGraphicBufferProducer> mGraphicBufferProducer; 102e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian mutable Mutex mLock; 103e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian mutable sp<Surface> mSurfaceData; 1040b26710528eb69f3883f295f3e6146e6466fd082Jorim Jaggi bool mOwned; 105e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian}; 106e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 107e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian}; // namespace android 108e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 109e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian#endif // ANDROID_GUI_SURFACE_CONTROL_H 110