ISurfaceComposer.h revision 6501e9944df131b3b7e293007084735dfa217f24
1d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber/* 2d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * Copyright (C) 2006 The Android Open Source Project 3d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * 4d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * you may not use this file except in compliance with the License. 6d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * You may obtain a copy of the License at 7d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * 8d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * 10d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * Unless required by applicable law or agreed to in writing, software 11d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * See the License for the specific language governing permissions and 14d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * limitations under the License. 15d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber */ 16d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 17d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber#ifndef ANDROID_GUI_ISURFACE_COMPOSER_H 18d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber#define ANDROID_GUI_ISURFACE_COMPOSER_H 19d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 20d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber#include <stdint.h> 21d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber#include <sys/types.h> 22d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 23d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber#include <utils/RefBase.h> 24e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber#include <utils/Errors.h> 25d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 26d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber#include <binder/IInterface.h> 27d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 28d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber#include <ui/PixelFormat.h> 29d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 30d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber#include <gui/IGraphicBufferAlloc.h> 31d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber#include <gui/ISurfaceComposerClient.h> 32d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 33d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Hubernamespace android { 34d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber// ---------------------------------------------------------------------------- 35d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 36082830f92373a1b9e512dbbfb940187ffa1c2c6fAndreas Huberclass ComposerState; 37d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huberclass IDisplayEventConnection; 38d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huberclass IMemoryHeap; 39d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 40d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huberclass ISurfaceComposer : public IInterface 41d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber{ 42d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huberpublic: 43d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber DECLARE_META_INTERFACE(SurfaceComposer); 44d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 45d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber enum { // (keep in sync with Surface.java) 46d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber eHidden = 0x00000004, 47d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber eDestroyBackbuffer = 0x00000020, 48d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber eSecure = 0x00000080, 49e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber eNonPremultiplied = 0x00000100, 50e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber eOpaque = 0x00000400, 51d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber eProtectedByApp = 0x00000800, 52d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber eProtectedByDRM = 0x00001000, 53d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 54d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber eFXSurfaceNormal = 0x00000000, 55d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber eFXSurfaceBlur = 0x00010000, 56d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber eFXSurfaceDim = 0x00020000, 57d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber eFXSurfaceScreenshot= 0x00030000, 58e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber eFXSurfaceMask = 0x000F0000, 59e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber }; 60e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber 61e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber enum { 62e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber ePositionChanged = 0x00000001, 63d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber eLayerChanged = 0x00000002, 64d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber eSizeChanged = 0x00000004, 65d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber eAlphaChanged = 0x00000008, 66d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber eMatrixChanged = 0x00000010, 67d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber eTransparentRegionChanged = 0x00000020, 68d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber eVisibilityChanged = 0x00000040, 69d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber eCropChanged = 0x00000100, 70d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber }; 71d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 72e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber enum { 73e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber eLayerHidden = 0x01, 74e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber eLayerDither = 0x04, 75d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber eLayerFilter = 0x08, 76d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber eLayerBlurFreeze = 0x10 77d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber }; 78d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 79e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber enum { 80e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber eOrientationDefault = 0, 81e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber eOrientation90 = 1, 82d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber eOrientation180 = 2, 83d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber eOrientation270 = 3, 84e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber eOrientationUnchanged = 4, 85d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber eOrientationSwapMask = 0x01 86d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber }; 87d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 88d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber enum { 89d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber eSynchronous = 0x01, 90e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber }; 91e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber 92e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber enum { 93e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber eElectronBeamAnimationOn = 0x01, 94e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber eElectronBeamAnimationOff = 0x10 95e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber }; 96e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber 97e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber /* create connection with surface flinger, requires 98e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber * ACCESS_SURFACE_FLINGER permission 99e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber */ 100d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber virtual sp<ISurfaceComposerClient> createConnection() = 0; 101d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 102d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber /* create a graphic buffer allocator 103d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber */ 104d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber virtual sp<IGraphicBufferAlloc> createGraphicBufferAlloc() = 0; 105d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 106d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber /* retrieve the control block */ 107d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber virtual sp<IMemoryHeap> getCblk() const = 0; 108d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 109e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber /* open/close transactions. requires ACCESS_SURFACE_FLINGER permission */ 110d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber virtual void setTransactionState(const Vector<ComposerState>& state, 111d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber int orientation, uint32_t flags) = 0; 112d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 113d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber /* signal that we're done booting. 114d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * Requires ACCESS_SURFACE_FLINGER permission 115d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber */ 116d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber virtual void bootFinished() = 0; 117d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 118d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber /* Capture the specified screen. requires READ_FRAME_BUFFER permission 119d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * This function will fail if there is a secure window on screen. 120d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber */ 121d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber virtual status_t captureScreen(DisplayID dpy, 122d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber sp<IMemoryHeap>* heap, 123d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber uint32_t* width, uint32_t* height, PixelFormat* format, 124d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber uint32_t reqWidth, uint32_t reqHeight, 125d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber uint32_t minLayerZ, uint32_t maxLayerZ) = 0; 126d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 127d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber /* triggers screen off animation */ 128d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber virtual status_t turnElectronBeamOff(int32_t mode) = 0; 129d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 130d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber /* triggers screen on animation */ 131d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber virtual status_t turnElectronBeamOn(int32_t mode) = 0; 132d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 133e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber /* verify that an ISurfaceTexture was created by SurfaceFlinger. 134e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber */ 135e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber virtual bool authenticateSurfaceTexture( 136e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber const sp<ISurfaceTexture>& surface) const = 0; 137e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber 138e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber /* return an IDisplayEventConnection */ 139e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber virtual sp<IDisplayEventConnection> createDisplayEventConnection() = 0; 140e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber 141e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber /* triggers screen off and waits for it to complete */ 142e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber virtual void blank() = 0; 143e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber 144e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber /* triggers screen on and waits for it to complete */ 145e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber virtual void unblank() = 0; 146e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber 147e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber /* connects to an external display */ 148e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber virtual void connectDisplay(const sp<ISurfaceTexture> display) = 0; 149e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber}; 150e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber 151e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber// ---------------------------------------------------------------------------- 152e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber 153e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huberclass BnSurfaceComposer : public BnInterface<ISurfaceComposer> 154e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber{ 155e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huberpublic: 156e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber enum { 157e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber // Note: BOOT_FINISHED must remain this value, it is called from 158e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber // Java by ActivityManagerService. 159e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber BOOT_FINISHED = IBinder::FIRST_CALL_TRANSACTION, 160e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber CREATE_CONNECTION, 161e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber CREATE_GRAPHIC_BUFFER_ALLOC, 162a438123bd96c7faf145683876702387efe5628d9Andreas Huber GET_CBLK, 163a438123bd96c7faf145683876702387efe5628d9Andreas Huber SET_TRANSACTION_STATE, 164e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber SET_ORIENTATION, 165e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber CAPTURE_SCREEN, 166e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber TURN_ELECTRON_BEAM_OFF, 167e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber TURN_ELECTRON_BEAM_ON, 168e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber AUTHENTICATE_SURFACE, 169d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber CREATE_DISPLAY_EVENT_CONNECTION, 170d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber BLANK, 171d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber UNBLANK, 172d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber CONNECT_DISPLAY, 1730b73d4730202fcad53aefc4314a06e7b95f442f0Andreas Huber }; 1740b73d4730202fcad53aefc4314a06e7b95f442f0Andreas Huber 175d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber virtual status_t onTransact( uint32_t code, 176d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber const Parcel& data, 1770b73d4730202fcad53aefc4314a06e7b95f442f0Andreas Huber Parcel* reply, 178d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber uint32_t flags = 0); 179e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber}; 180d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 181d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber// ---------------------------------------------------------------------------- 182d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 183d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber}; // namespace android 184d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber 185d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber#endif // ANDROID_GUI_ISURFACE_COMPOSER_H 186d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber