ISurfaceComposer.h revision e7bda06398f09d0a28557fcf550ece2c8bb1eb80
1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/* 2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * you may not use this file except in compliance with the License. 6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * You may obtain a copy of the License at 7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * See the License for the specific language governing permissions and 14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * limitations under the License. 15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 1790ac799241f077a7b7e6c1875fd933864c8dd2a7Mathias Agopian#ifndef ANDROID_GUI_ISURFACE_COMPOSER_H 1890ac799241f077a7b7e6c1875fd933864c8dd2a7Mathias Agopian#define ANDROID_GUI_ISURFACE_COMPOSER_H 19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdint.h> 21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <sys/types.h> 22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/RefBase.h> 24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/Errors.h> 25d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav#include <utils/Timers.h> 26d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav#include <utils/Vector.h> 279cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian 28c5b2c0bf8007562536b822eb060fc54a01f8e08bMathias Agopian#include <binder/IInterface.h> 29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 30d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav#include <ui/FrameStats.h> 31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <ui/PixelFormat.h> 32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 3390ac799241f077a7b7e6c1875fd933864c8dd2a7Mathias Agopian#include <gui/IGraphicBufferAlloc.h> 3490ac799241f077a7b7e6c1875fd933864c8dd2a7Mathias Agopian#include <gui/ISurfaceComposerClient.h> 35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 369cce325fae8adcf7560a28eef394489f09bad74dMathias Agopiannamespace android { 37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 39439cf8576d3b846c0aa0944d84372259bf075d51Mathias Agopianclass ComposerState; 408b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopianclass DisplayState; 41646f54105018e99ef4a30ee41f01f7d1ab66c38eJesse Hallstruct DisplayInfo; 42e7bda06398f09d0a28557fcf550ece2c8bb1eb80Lajos Molnarstruct DisplayStatInfo; 43d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopianclass IDisplayEventConnection; 44d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopianclass IMemoryHeap; 45c18790018be5d7ea7061ccbc81f3044e74adc823Dan Stozaclass Rect; 46a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian 47882e3a39ed770b335a203e233b57127fde1c839eAndy McFadden/* 48882e3a39ed770b335a203e233b57127fde1c839eAndy McFadden * This class defines the Binder IPC interface for accessing various 49882e3a39ed770b335a203e233b57127fde1c839eAndy McFadden * SurfaceFlinger features. 50882e3a39ed770b335a203e233b57127fde1c839eAndy McFadden */ 513165cc21cfea781988407b19bd83292b19f05f55Mathias Agopianclass ISurfaceComposer: public IInterface { 52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic: 53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project DECLARE_META_INTERFACE(SurfaceComposer); 54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 553165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian // flags for setTransactionState() 5628378392fd5aa3e0a392c9eb64634055678c3987Jamie Gennis enum { 573165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian eSynchronous = 0x01, 582d5e230292c27d59f4c096bc742a0a19abf811c1Jamie Gennis eAnimation = 0x02, 5928378392fd5aa3e0a392c9eb64634055678c3987Jamie Gennis }; 6028378392fd5aa3e0a392c9eb64634055678c3987Jamie Gennis 61e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian enum { 62e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian eDisplayIdMain = 0, 63e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian eDisplayIdHdmi = 1 64e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian }; 65e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian 66c3ebe66b49cfba035e1fd0e160a13db38eb81b0eRiley Andrews enum Rotation { 67c3ebe66b49cfba035e1fd0e160a13db38eb81b0eRiley Andrews eRotateNone = 0, 68c3ebe66b49cfba035e1fd0e160a13db38eb81b0eRiley Andrews eRotate90 = 1, 69c3ebe66b49cfba035e1fd0e160a13db38eb81b0eRiley Andrews eRotate180 = 2, 70c3ebe66b49cfba035e1fd0e160a13db38eb81b0eRiley Andrews eRotate270 = 3 71c3ebe66b49cfba035e1fd0e160a13db38eb81b0eRiley Andrews }; 72c3ebe66b49cfba035e1fd0e160a13db38eb81b0eRiley Andrews 73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project /* create connection with surface flinger, requires 74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * ACCESS_SURFACE_FLINGER permission 75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 767e27f05739c8a2655cf0f7faea35614ce0a50278Mathias Agopian virtual sp<ISurfaceComposerClient> createConnection() = 0; 77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 789a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis /* create a graphic buffer allocator 799a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis */ 809a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis virtual sp<IGraphicBufferAlloc> createGraphicBufferAlloc() = 0; 819a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis 82e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian /* return an IDisplayEventConnection */ 83e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian virtual sp<IDisplayEventConnection> createDisplayEventConnection() = 0; 84e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian 856c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall /* create a virtual display 86e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian * requires ACCESS_SURFACE_FLINGER permission. 87e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian */ 88dd3cb84cfbe8068790c6233b5829fae9c4a0ee93Jamie Gennis virtual sp<IBinder> createDisplay(const String8& displayName, 89dd3cb84cfbe8068790c6233b5829fae9c4a0ee93Jamie Gennis bool secure) = 0; 90e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian 916c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall /* destroy a virtual display 926c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall * requires ACCESS_SURFACE_FLINGER permission. 936c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall */ 946c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall virtual void destroyDisplay(const sp<IBinder>& display) = 0; 956c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall 96e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian /* get the token for the existing default displays. possible values 97e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian * for id are eDisplayIdMain and eDisplayIdHdmi. 98e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian */ 99e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian virtual sp<IBinder> getBuiltInDisplay(int32_t id) = 0; 100e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian 1019cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian /* open/close transactions. requires ACCESS_SURFACE_FLINGER permission */ 1023165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian virtual void setTransactionState(const Vector<ComposerState>& state, 1033165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian const Vector<DisplayState>& displays, uint32_t flags) = 0; 104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 105edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project /* signal that we're done booting. 1069cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian * Requires ACCESS_SURFACE_FLINGER permission 107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 108edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void bootFinished() = 0; 109edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 1102adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden /* verify that an IGraphicBufferProducer was created by SurfaceFlinger. 111e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian */ 112e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian virtual bool authenticateSurfaceTexture( 1132adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden const sp<IGraphicBufferProducer>& surface) const = 0; 114e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian 1152c9b11f0291210c9b9513a1a0cce6afebd361b3bPrashant Malani /* set display power mode. depending on the mode, it can either trigger 1162c9b11f0291210c9b9513a1a0cce6afebd361b3bPrashant Malani * screen on, off or low power mode and wait for it to complete. 117041a075262ef5fc886e46fd4eec3dd79ee2e60c0Mathias Agopian * requires ACCESS_SURFACE_FLINGER permission. 118041a075262ef5fc886e46fd4eec3dd79ee2e60c0Mathias Agopian */ 1192c9b11f0291210c9b9513a1a0cce6afebd361b3bPrashant Malani virtual void setPowerMode(const sp<IBinder>& display, int mode) = 0; 1203094df359d1e6e2ae8ca4e935cc093f563804c96Mathias Agopian 1217f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza /* returns information for each configuration of the given display 1229d4e3d2f42e93e2d12bacabe97d307d30c3c20ddJeff Brown * intended to be used to get information about built-in displays */ 1237f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza virtual status_t getDisplayConfigs(const sp<IBinder>& display, 1247f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza Vector<DisplayInfo>* configs) = 0; 1257f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza 12667d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar /* returns display statistics for a given display 12767d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar * intended to be used by the media framework to properly schedule 12867d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar * video frames */ 12967d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar virtual status_t getDisplayStats(const sp<IBinder>& display, 13067d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar DisplayStatInfo* stats) = 0; 13167d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar 1327f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza /* indicates which of the configurations returned by getDisplayInfo is 1337f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza * currently active */ 1347f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza virtual int getActiveConfig(const sp<IBinder>& display) = 0; 1357f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza 1367f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza /* specifies which configuration (of those returned by getDisplayInfo) 1377f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza * should be used */ 1387f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza virtual status_t setActiveConfig(const sp<IBinder>& display, int id) = 0; 1392a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopian 140041a075262ef5fc886e46fd4eec3dd79ee2e60c0Mathias Agopian /* Capture the specified screen. requires READ_FRAME_BUFFER permission 141041a075262ef5fc886e46fd4eec3dd79ee2e60c0Mathias Agopian * This function will fail if there is a secure window on screen. 142041a075262ef5fc886e46fd4eec3dd79ee2e60c0Mathias Agopian */ 1432a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopian virtual status_t captureScreen(const sp<IBinder>& display, 1442a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopian const sp<IGraphicBufferProducer>& producer, 145c18790018be5d7ea7061ccbc81f3044e74adc823Dan Stoza Rect sourceCrop, uint32_t reqWidth, uint32_t reqHeight, 146c701401f8cec2e5309f8b57e2b97baced5093274Dan Stoza uint32_t minLayerZ, uint32_t maxLayerZ, 147c3ebe66b49cfba035e1fd0e160a13db38eb81b0eRiley Andrews bool useIdentityTransform, 148c3ebe66b49cfba035e1fd0e160a13db38eb81b0eRiley Andrews Rotation rotation = eRotateNone) = 0; 149d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav 150d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav /* Clears the frame statistics for animations. 151d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav * 152d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav * Requires the ACCESS_SURFACE_FLINGER permission. 153d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav */ 154d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav virtual status_t clearAnimationFrameStats() = 0; 155d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav 156d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav /* Gets the frame statistics for animations. 157d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav * 158d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav * Requires the ACCESS_SURFACE_FLINGER permission. 159d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav */ 160d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav virtual status_t getAnimationFrameStats(FrameStats* outStats) const = 0; 161edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 162edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 163edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 164edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 1653165cc21cfea781988407b19bd83292b19f05f55Mathias Agopianclass BnSurfaceComposer: public BnInterface<ISurfaceComposer> { 166edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic: 167edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project enum { 168edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // Note: BOOT_FINISHED must remain this value, it is called from 169edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // Java by ActivityManagerService. 170edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project BOOT_FINISHED = IBinder::FIRST_CALL_TRANSACTION, 171edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project CREATE_CONNECTION, 1729a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis CREATE_GRAPHIC_BUFFER_ALLOC, 173e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian CREATE_DISPLAY_EVENT_CONNECTION, 174e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian CREATE_DISPLAY, 1756c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall DESTROY_DISPLAY, 176e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian GET_BUILT_IN_DISPLAY, 177698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian SET_TRANSACTION_STATE, 178134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis AUTHENTICATE_SURFACE, 1797f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza GET_DISPLAY_CONFIGS, 1807f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza GET_ACTIVE_CONFIG, 1817f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza SET_ACTIVE_CONFIG, 1823094df359d1e6e2ae8ca4e935cc093f563804c96Mathias Agopian CONNECT_DISPLAY, 1832a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopian CAPTURE_SCREEN, 184d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav CLEAR_ANIMATION_FRAME_STATS, 1852c9b11f0291210c9b9513a1a0cce6afebd361b3bPrashant Malani GET_ANIMATION_FRAME_STATS, 1862c9b11f0291210c9b9513a1a0cce6afebd361b3bPrashant Malani SET_POWER_MODE, 18767d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar GET_DISPLAY_STATS, 188edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project }; 189edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 1903165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian virtual status_t onTransact(uint32_t code, const Parcel& data, 1913165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian Parcel* reply, uint32_t flags = 0); 192edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 193edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 194edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 195edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 196edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android 197edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 19890ac799241f077a7b7e6c1875fd933864c8dd2a7Mathias Agopian#endif // ANDROID_GUI_ISURFACE_COMPOSER_H 199