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> 32e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 33e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopiannamespace android { 34e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 35e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian// --------------------------------------------------------------------------- 36e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 37e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopianclass IGraphicBufferProducer; 38e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopianclass Surface; 39e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopianclass SurfaceComposerClient; 40e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 41e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian// --------------------------------------------------------------------------- 42e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 43e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopianclass SurfaceControl : public RefBase 44e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian{ 45e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopianpublic: 46e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian static bool isValid(const sp<SurfaceControl>& surface) { 47e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian return (surface != 0) && surface->isValid(); 48e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian } 494d9b822e2c18142e55fe2611aa6cd7dc7d4a62c6Mathias Agopian 50e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian bool isValid() { 514d9b822e2c18142e55fe2611aa6cd7dc7d4a62c6Mathias Agopian return mHandle!=0 && mClient!=0; 52e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian } 534d9b822e2c18142e55fe2611aa6cd7dc7d4a62c6Mathias Agopian 54e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian static bool isSameSurface( 55e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian const sp<SurfaceControl>& lhs, const sp<SurfaceControl>& rhs); 56d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav 57e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian // release surface data from java 58e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian void clear(); 59d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav 60e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian status_t setLayerStack(int32_t layerStack); 61e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian status_t setLayer(int32_t layer); 62d6480c020b050c777ec1db2dd9c16fccfc47b47bRamanan Rajeswaran status_t setPosition(float x, float y); 63e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian status_t setSize(uint32_t w, uint32_t h); 64e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian status_t hide(); 65e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian status_t show(); 66e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian status_t setFlags(uint32_t flags, uint32_t mask); 67e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian status_t setTransparentRegionHint(const Region& transparent); 68e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian status_t setAlpha(float alpha=1.0f); 69e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian status_t setMatrix(float dsdx, float dtdx, float dsdy, float dtdy); 70e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian status_t setCrop(const Rect& crop); 71e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 72e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian static status_t writeSurfaceToParcel( 73e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian const sp<SurfaceControl>& control, Parcel* parcel); 74e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 75e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian sp<Surface> getSurface() const; 76e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 77d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav status_t clearLayerFrameStats() const; 78d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav status_t getLayerFrameStats(FrameStats* outStats) const; 79d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav 80e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopianprivate: 81e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian // can't be copied 82e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian SurfaceControl& operator = (SurfaceControl& rhs); 83e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian SurfaceControl(const SurfaceControl& rhs); 84e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 85e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian friend class SurfaceComposerClient; 86e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian friend class Surface; 87e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 88e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian SurfaceControl( 89e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian const sp<SurfaceComposerClient>& client, 904d9b822e2c18142e55fe2611aa6cd7dc7d4a62c6Mathias Agopian const sp<IBinder>& handle, 914d9b822e2c18142e55fe2611aa6cd7dc7d4a62c6Mathias Agopian const sp<IGraphicBufferProducer>& gbp); 92e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 93e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian ~SurfaceControl(); 94e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 95e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian status_t validate() const; 96e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian void destroy(); 97d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav 98e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian sp<SurfaceComposerClient> mClient; 994d9b822e2c18142e55fe2611aa6cd7dc7d4a62c6Mathias Agopian sp<IBinder> mHandle; 100e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian sp<IGraphicBufferProducer> mGraphicBufferProducer; 101e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian mutable Mutex mLock; 102e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian mutable sp<Surface> mSurfaceData; 103e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian}; 104e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 105e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian}; // namespace android 106e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian 107e3c697fb929c856b59fa56a8e05a2a7eba187c3dMathias Agopian#endif // ANDROID_GUI_SURFACE_CONTROL_H 108