ISurfaceComposer.h revision 1495ceb88594bf3c5963ef65ee12953dc0354546
1f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross/* 2f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross * Copyright (C) 2006 The Android Open Source Project 3f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross * 4f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross * Licensed under the Apache License, Version 2.0 (the "License"); 5f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross * you may not use this file except in compliance with the License. 6f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross * You may obtain a copy of the License at 7f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross * 8f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross * http://www.apache.org/licenses/LICENSE-2.0 9f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross * 10f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross * Unless required by applicable law or agreed to in writing, software 11f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross * distributed under the License is distributed on an "AS IS" BASIS, 12002e1e58dfe19dd3e49a59c6827cbf51573941a2Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross * See the License for the specific language governing permissions and 14f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross * limitations under the License. 15f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross */ 16f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross 17f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#ifndef ANDROID_GUI_ISURFACE_COMPOSER_H 18f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#define ANDROID_GUI_ISURFACE_COMPOSER_H 19f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross 20f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <stdint.h> 21f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <sys/types.h> 22f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross 23f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <utils/RefBase.h> 24f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <utils/Errors.h> 25f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <utils/Timers.h> 26f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <utils/Vector.h> 27f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross 28f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <binder/IInterface.h> 29f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross 30f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <ui/FrameStats.h> 313e03d3fb6a4cb93f5f978f9d2eed7b7cc62a06a6JP Abgrall#include <ui/PixelFormat.h> 32f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross 33f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <gui/IGraphicBufferAlloc.h> 34f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <gui/ISurfaceComposerClient.h> 35f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross 36f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Crossnamespace android { 37f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross// ---------------------------------------------------------------------------- 38f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross 39f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Crossclass ComposerState; 40f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Crossclass DisplayState; 41f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Crossstruct DisplayInfo; 42caad555f3efaf77941c4eacd4f6c84eb22d14f6dkeunyoungclass DisplayStatInfo; 43caad555f3efaf77941c4eacd4f6c84eb22d14f6dkeunyoungclass IDisplayEventConnection; 44caad555f3efaf77941c4eacd4f6c84eb22d14f6dkeunyoungclass IMemoryHeap; 45caad555f3efaf77941c4eacd4f6c84eb22d14f6dkeunyoungclass Rect; 46caad555f3efaf77941c4eacd4f6c84eb22d14f6dkeunyoung 47f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross/* 48f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross * This class defines the Binder IPC interface for accessing various 49f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross * SurfaceFlinger features. 50f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross */ 51f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Crossclass ISurfaceComposer: public IInterface { 52f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Crosspublic: 53f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross DECLARE_META_INTERFACE(SurfaceComposer); 54f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross 55f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross // flags for setTransactionState() 56f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross enum { 57f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross eSynchronous = 0x01, 58f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross eAnimation = 0x02, 59f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross }; 60f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross 61f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross enum { 62f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross eDisplayIdMain = 0, 63f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross eDisplayIdHdmi = 1 64f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross }; 65f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross 66f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross enum Rotation { 67f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross eRotateNone = 0, 68f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross eRotate90 = 1, 69f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross eRotate180 = 2, 70f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross eRotate270 = 3 71caad555f3efaf77941c4eacd4f6c84eb22d14f6dkeunyoung }; 72caad555f3efaf77941c4eacd4f6c84eb22d14f6dkeunyoung 73caad555f3efaf77941c4eacd4f6c84eb22d14f6dkeunyoung /* create connection with surface flinger, requires 74caad555f3efaf77941c4eacd4f6c84eb22d14f6dkeunyoung * ACCESS_SURFACE_FLINGER permission 75f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross */ 76f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross virtual sp<ISurfaceComposerClient> createConnection() = 0; 77f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross 78f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross /* create a graphic buffer allocator 79f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross */ 80f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross virtual sp<IGraphicBufferAlloc> createGraphicBufferAlloc() = 0; 81f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross 82f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross /* return an IDisplayEventConnection */ 83f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross virtual sp<IDisplayEventConnection> createDisplayEventConnection() = 0; 84f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross 85f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross /* create a virtual display 86f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross * requires ACCESS_SURFACE_FLINGER permission. 87f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross */ 88f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross virtual sp<IBinder> createDisplay(const String8& displayName, 89f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross bool secure) = 0; 90f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross 91f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross /* destroy a virtual display 92f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross * requires ACCESS_SURFACE_FLINGER permission. 93f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross */ 94f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross virtual void destroyDisplay(const sp<IBinder>& display) = 0; 95 96 /* get the token for the existing default displays. possible values 97 * for id are eDisplayIdMain and eDisplayIdHdmi. 98 */ 99 virtual sp<IBinder> getBuiltInDisplay(int32_t id) = 0; 100 101 /* open/close transactions. requires ACCESS_SURFACE_FLINGER permission */ 102 virtual void setTransactionState(const Vector<ComposerState>& state, 103 const Vector<DisplayState>& displays, uint32_t flags) = 0; 104 105 /* signal that we're done booting. 106 * Requires ACCESS_SURFACE_FLINGER permission 107 */ 108 virtual void bootFinished() = 0; 109 110 /* verify that an IGraphicBufferProducer was created by SurfaceFlinger. 111 */ 112 virtual bool authenticateSurfaceTexture( 113 const sp<IGraphicBufferProducer>& surface) const = 0; 114 115 /* set display power mode. depending on the mode, it can either trigger 116 * screen on, off or low power mode and wait for it to complete. 117 * requires ACCESS_SURFACE_FLINGER permission. 118 */ 119 virtual void setPowerMode(const sp<IBinder>& display, int mode) = 0; 120 121 /* returns information for each configuration of the given display 122 * intended to be used to get information about built-in displays */ 123 virtual status_t getDisplayConfigs(const sp<IBinder>& display, 124 Vector<DisplayInfo>* configs) = 0; 125 126 /* returns display statistics for a given display 127 * intended to be used by the media framework to properly schedule 128 * video frames */ 129 virtual status_t getDisplayStats(const sp<IBinder>& display, 130 DisplayStatInfo* stats) = 0; 131 132 /* indicates which of the configurations returned by getDisplayInfo is 133 * currently active */ 134 virtual int getActiveConfig(const sp<IBinder>& display) = 0; 135 136 /* specifies which configuration (of those returned by getDisplayInfo) 137 * should be used */ 138 virtual status_t setActiveConfig(const sp<IBinder>& display, int id) = 0; 139 140 /* Capture the specified screen. requires READ_FRAME_BUFFER permission 141 * This function will fail if there is a secure window on screen. 142 */ 143 virtual status_t captureScreen(const sp<IBinder>& display, 144 const sp<IGraphicBufferProducer>& producer, 145 Rect sourceCrop, uint32_t reqWidth, uint32_t reqHeight, 146 uint32_t minLayerZ, uint32_t maxLayerZ, 147 bool useIdentityTransform, 148 Rotation rotation = eRotateNone) = 0; 149 150 /* Clears the frame statistics for animations. 151 * 152 * Requires the ACCESS_SURFACE_FLINGER permission. 153 */ 154 virtual status_t clearAnimationFrameStats() = 0; 155 156 /* Gets the frame statistics for animations. 157 * 158 * Requires the ACCESS_SURFACE_FLINGER permission. 159 */ 160 virtual status_t getAnimationFrameStats(FrameStats* outStats) const = 0; 161}; 162 163// ---------------------------------------------------------------------------- 164 165class BnSurfaceComposer: public BnInterface<ISurfaceComposer> { 166public: 167 enum { 168 // Note: BOOT_FINISHED must remain this value, it is called from 169 // Java by ActivityManagerService. 170 BOOT_FINISHED = IBinder::FIRST_CALL_TRANSACTION, 171 CREATE_CONNECTION, 172 CREATE_GRAPHIC_BUFFER_ALLOC, 173 CREATE_DISPLAY_EVENT_CONNECTION, 174 CREATE_DISPLAY, 175 DESTROY_DISPLAY, 176 GET_BUILT_IN_DISPLAY, 177 SET_TRANSACTION_STATE, 178 AUTHENTICATE_SURFACE, 179 GET_DISPLAY_CONFIGS, 180 GET_ACTIVE_CONFIG, 181 SET_ACTIVE_CONFIG, 182 CONNECT_DISPLAY, 183 CAPTURE_SCREEN, 184 CLEAR_ANIMATION_FRAME_STATS, 185 GET_ANIMATION_FRAME_STATS, 186 SET_POWER_MODE, 187 GET_DISPLAY_STATS, 188 }; 189 190 virtual status_t onTransact(uint32_t code, const Parcel& data, 191 Parcel* reply, uint32_t flags = 0); 192}; 193 194// ---------------------------------------------------------------------------- 195 196}; // namespace android 197 198#endif // ANDROID_GUI_ISURFACE_COMPOSER_H 199