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> 259cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian 26c5b2c0bf8007562536b822eb060fc54a01f8e08bMathias Agopian#include <binder/IInterface.h> 27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <ui/PixelFormat.h> 29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 3090ac799241f077a7b7e6c1875fd933864c8dd2a7Mathias Agopian#include <gui/IGraphicBufferAlloc.h> 3190ac799241f077a7b7e6c1875fd933864c8dd2a7Mathias Agopian#include <gui/ISurfaceComposerClient.h> 32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 339cce325fae8adcf7560a28eef394489f09bad74dMathias Agopiannamespace android { 34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 36439cf8576d3b846c0aa0944d84372259bf075d51Mathias Agopianclass ComposerState; 378b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopianclass DisplayState; 38c666cae2d5995097ec49a87e375e2afdd92802b7Mathias Agopianclass DisplayInfo; 39d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopianclass IDisplayEventConnection; 40d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopianclass IMemoryHeap; 41a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian 423165cc21cfea781988407b19bd83292b19f05f55Mathias Agopianclass ISurfaceComposer: public IInterface { 43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic: 44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project DECLARE_META_INTERFACE(SurfaceComposer); 45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 463165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian // flags for setTransactionState() 4728378392fd5aa3e0a392c9eb64634055678c3987Jamie Gennis enum { 483165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian eSynchronous = 0x01, 492d5e230292c27d59f4c096bc742a0a19abf811c1Jamie Gennis eAnimation = 0x02, 5028378392fd5aa3e0a392c9eb64634055678c3987Jamie Gennis }; 5128378392fd5aa3e0a392c9eb64634055678c3987Jamie Gennis 52e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian enum { 53e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian eDisplayIdMain = 0, 54e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian eDisplayIdHdmi = 1 55e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian }; 56e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian 57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project /* create connection with surface flinger, requires 58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * ACCESS_SURFACE_FLINGER permission 59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 607e27f05739c8a2655cf0f7faea35614ce0a50278Mathias Agopian virtual sp<ISurfaceComposerClient> createConnection() = 0; 61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 629a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis /* create a graphic buffer allocator 639a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis */ 649a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis virtual sp<IGraphicBufferAlloc> createGraphicBufferAlloc() = 0; 659a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis 66e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian /* return an IDisplayEventConnection */ 67e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian virtual sp<IDisplayEventConnection> createDisplayEventConnection() = 0; 68e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian 699d4e3d2f42e93e2d12bacabe97d307d30c3c20ddJeff Brown /* create a display 70e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian * requires ACCESS_SURFACE_FLINGER permission. 71e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian */ 72dd3cb84cfbe8068790c6233b5829fae9c4a0ee93Jamie Gennis virtual sp<IBinder> createDisplay(const String8& displayName, 73dd3cb84cfbe8068790c6233b5829fae9c4a0ee93Jamie Gennis bool secure) = 0; 74e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian 75e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian /* get the token for the existing default displays. possible values 76e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian * for id are eDisplayIdMain and eDisplayIdHdmi. 77e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian */ 78e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian virtual sp<IBinder> getBuiltInDisplay(int32_t id) = 0; 79e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian 809cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian /* open/close transactions. requires ACCESS_SURFACE_FLINGER permission */ 813165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian virtual void setTransactionState(const Vector<ComposerState>& state, 823165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian const Vector<DisplayState>& displays, uint32_t flags) = 0; 83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project /* signal that we're done booting. 859cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian * Requires ACCESS_SURFACE_FLINGER permission 86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void bootFinished() = 0; 88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 89e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian /* verify that an ISurfaceTexture was created by SurfaceFlinger. 90e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian */ 91e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian virtual bool authenticateSurfaceTexture( 92e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian const sp<ISurfaceTexture>& surface) const = 0; 93e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian 941b0b30d04304392748a8a4ab5a69e52a19f51b3aMathias Agopian /* Capture the specified screen. requires READ_FRAME_BUFFER permission 951b0b30d04304392748a8a4ab5a69e52a19f51b3aMathias Agopian * This function will fail if there is a secure window on screen. 961b0b30d04304392748a8a4ab5a69e52a19f51b3aMathias Agopian */ 979d4e3d2f42e93e2d12bacabe97d307d30c3c20ddJeff Brown virtual status_t captureScreen(const sp<IBinder>& display, sp<IMemoryHeap>* heap, 9874c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian uint32_t* width, uint32_t* height, PixelFormat* format, 999d4e3d2f42e93e2d12bacabe97d307d30c3c20ddJeff Brown uint32_t reqWidth, uint32_t reqHeight, 1009d4e3d2f42e93e2d12bacabe97d307d30c3c20ddJeff Brown uint32_t minLayerZ, uint32_t maxLayerZ) = 0; 1011b0b30d04304392748a8a4ab5a69e52a19f51b3aMathias Agopian 1028e533069e5721e55cb9768e140e16546c3a4a8b6Colin Cross 1038e533069e5721e55cb9768e140e16546c3a4a8b6Colin Cross /* triggers screen off and waits for it to complete */ 104c01a79d77b829e7de86ef137694e8ad708470ca1Andy McFadden virtual void blank(const sp<IBinder>& display) = 0; 1058e533069e5721e55cb9768e140e16546c3a4a8b6Colin Cross 1068e533069e5721e55cb9768e140e16546c3a4a8b6Colin Cross /* triggers screen on and waits for it to complete */ 107c01a79d77b829e7de86ef137694e8ad708470ca1Andy McFadden virtual void unblank(const sp<IBinder>& display) = 0; 1083094df359d1e6e2ae8ca4e935cc093f563804c96Mathias Agopian 1099d4e3d2f42e93e2d12bacabe97d307d30c3c20ddJeff Brown /* returns information about a display 1109d4e3d2f42e93e2d12bacabe97d307d30c3c20ddJeff Brown * intended to be used to get information about built-in displays */ 1119d4e3d2f42e93e2d12bacabe97d307d30c3c20ddJeff Brown virtual status_t getDisplayInfo(const sp<IBinder>& display, DisplayInfo* info) = 0; 112edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 113edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 114edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 115edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 1163165cc21cfea781988407b19bd83292b19f05f55Mathias Agopianclass BnSurfaceComposer: public BnInterface<ISurfaceComposer> { 117edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic: 118edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project enum { 119edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // Note: BOOT_FINISHED must remain this value, it is called from 120edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // Java by ActivityManagerService. 121edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project BOOT_FINISHED = IBinder::FIRST_CALL_TRANSACTION, 122edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project CREATE_CONNECTION, 1239a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis CREATE_GRAPHIC_BUFFER_ALLOC, 124e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian CREATE_DISPLAY_EVENT_CONNECTION, 125e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian CREATE_DISPLAY, 126e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian GET_BUILT_IN_DISPLAY, 127698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian SET_TRANSACTION_STATE, 128134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis AUTHENTICATE_SURFACE, 129e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian CAPTURE_SCREEN, 1308e533069e5721e55cb9768e140e16546c3a4a8b6Colin Cross BLANK, 1318e533069e5721e55cb9768e140e16546c3a4a8b6Colin Cross UNBLANK, 132e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian GET_DISPLAY_INFO, 1333094df359d1e6e2ae8ca4e935cc093f563804c96Mathias Agopian CONNECT_DISPLAY, 134edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project }; 135edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 1363165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian virtual status_t onTransact(uint32_t code, const Parcel& data, 1373165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian Parcel* reply, uint32_t flags = 0); 138edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 139edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 140edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 141edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 142edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android 143edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 14490ac799241f077a7b7e6c1875fd933864c8dd2a7Mathias Agopian#endif // ANDROID_GUI_ISURFACE_COMPOSER_H 145