SurfaceComposerClient.h revision 9b5782baf0a8a2d7afc7129453beb5df7abe7650
1/* 2 * Copyright (C) 2007 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#ifndef ANDROID_GUI_SURFACE_COMPOSER_CLIENT_H 18#define ANDROID_GUI_SURFACE_COMPOSER_CLIENT_H 19 20#include <stdint.h> 21#include <sys/types.h> 22 23#include <binder/IBinder.h> 24 25#include <utils/RefBase.h> 26#include <utils/Singleton.h> 27#include <utils/SortedVector.h> 28#include <utils/threads.h> 29 30#include <ui/PixelFormat.h> 31 32#include <gui/Surface.h> 33 34namespace android { 35 36// --------------------------------------------------------------------------- 37 38class DisplayInfo; 39class Composer; 40class IMemoryHeap; 41class ISurfaceComposerClient; 42class ISurfaceTexture; 43class Region; 44 45// --------------------------------------------------------------------------- 46 47class SurfaceComposerClient : public RefBase 48{ 49 friend class Composer; 50public: 51 SurfaceComposerClient(); 52 virtual ~SurfaceComposerClient(); 53 54 // Always make sure we could initialize 55 status_t initCheck() const; 56 57 // Return the connection of this client 58 sp<IBinder> connection() const; 59 60 // Forcibly remove connection before all references have gone away. 61 void dispose(); 62 63 // callback when the composer is dies 64 status_t linkToComposerDeath(const sp<IBinder::DeathRecipient>& recipient, 65 void* cookie = NULL, uint32_t flags = 0); 66 67 // Get information about a display 68 static status_t getDisplayInfo(const sp<IBinder>& display, DisplayInfo* info); 69 70 // TODO: Remove me. Do not use. 71 // This is a compatibility shim for one product whose drivers are depending on 72 // this legacy function (when they shouldn't). 73 static status_t getDisplayInfo(int32_t displayId, DisplayInfo* info); 74 75 // ------------------------------------------------------------------------ 76 // surface creation / destruction 77 78 //! Create a surface 79 sp<SurfaceControl> createSurface( 80 const String8& name,// name of the surface 81 uint32_t w, // width in pixel 82 uint32_t h, // height in pixel 83 PixelFormat format, // pixel-format desired 84 uint32_t flags = 0 // usage flags 85 ); 86 87 //! Create a display 88 static sp<IBinder> createDisplay(); 89 90 //! Get the token for the existing default displays. 91 //! Possible values for id are eDisplayIdMain and eDisplayIdHdmi. 92 static sp<IBinder> getBuiltInDisplay(int32_t id); 93 94 // ------------------------------------------------------------------------ 95 // Composer parameters 96 // All composer parameters must be changed within a transaction 97 // several surfaces can be updated in one transaction, all changes are 98 // committed at once when the transaction is closed. 99 // closeGlobalTransaction() requires an IPC with the server. 100 101 //! Open a composer transaction on all active SurfaceComposerClients. 102 static void openGlobalTransaction(); 103 104 //! Close a composer transaction on all active SurfaceComposerClients. 105 static void closeGlobalTransaction(bool synchronous = false); 106 107 status_t hide(SurfaceID id); 108 status_t show(SurfaceID id); 109 status_t setFlags(SurfaceID id, uint32_t flags, uint32_t mask); 110 status_t setTransparentRegionHint(SurfaceID id, const Region& transparent); 111 status_t setLayer(SurfaceID id, int32_t layer); 112 status_t setAlpha(SurfaceID id, float alpha=1.0f); 113 status_t setMatrix(SurfaceID id, float dsdx, float dtdx, float dsdy, float dtdy); 114 status_t setPosition(SurfaceID id, float x, float y); 115 status_t setSize(SurfaceID id, uint32_t w, uint32_t h); 116 status_t setCrop(SurfaceID id, const Rect& crop); 117 status_t setLayerStack(SurfaceID id, uint32_t layerStack); 118 status_t destroySurface(SurfaceID sid); 119 120 static void setDisplaySurface(const sp<IBinder>& token, 121 const sp<ISurfaceTexture>& surface); 122 static void setDisplayLayerStack(const sp<IBinder>& token, 123 uint32_t layerStack); 124 static void setDisplayOrientation(const sp<IBinder>& token, 125 uint32_t orientation); 126 static void setDisplayViewport(const sp<IBinder>& token, 127 const Rect& viewport); 128 static void setDisplayFrame(const sp<IBinder>& token, const Rect& frame); 129 130private: 131 virtual void onFirstRef(); 132 Composer& getComposer(); 133 134 mutable Mutex mLock; 135 status_t mStatus; 136 sp<ISurfaceComposerClient> mClient; 137 Composer& mComposer; 138}; 139 140// --------------------------------------------------------------------------- 141 142class ScreenshotClient 143{ 144 sp<IMemoryHeap> mHeap; 145 uint32_t mWidth; 146 uint32_t mHeight; 147 PixelFormat mFormat; 148public: 149 ScreenshotClient(); 150 151 // TODO: Remove me. Do not use. 152 // This is a compatibility shim for one product whose drivers are depending on 153 // this legacy function (when they shouldn't). 154 status_t update(); 155 156 // frees the previous screenshot and capture a new one 157 status_t update(const sp<IBinder>& display); 158 status_t update(const sp<IBinder>& display, 159 uint32_t reqWidth, uint32_t reqHeight); 160 status_t update(const sp<IBinder>& display, 161 uint32_t reqWidth, uint32_t reqHeight, 162 uint32_t minLayerZ, uint32_t maxLayerZ); 163 164 // release memory occupied by the screenshot 165 void release(); 166 167 // pixels are valid until this object is freed or 168 // release() or update() is called 169 void const* getPixels() const; 170 171 uint32_t getWidth() const; 172 uint32_t getHeight() const; 173 PixelFormat getFormat() const; 174 uint32_t getStride() const; 175 // size of allocated memory in bytes 176 size_t getSize() const; 177}; 178 179// --------------------------------------------------------------------------- 180}; // namespace android 181 182#endif // ANDROID_GUI_SURFACE_COMPOSER_CLIENT_H 183