ISurfaceComposer.h revision 9d4e3d2f42e93e2d12bacabe97d307d30c3c20dd
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,
4928378392fd5aa3e0a392c9eb64634055678c3987Jamie Gennis    };
5028378392fd5aa3e0a392c9eb64634055678c3987Jamie Gennis
51e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian    enum {
52e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian        eDisplayIdMain = 0,
53e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian        eDisplayIdHdmi = 1
54e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian    };
55e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian
56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    /* create connection with surface flinger, requires
57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     * ACCESS_SURFACE_FLINGER permission
58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     */
597e27f05739c8a2655cf0f7faea35614ce0a50278Mathias Agopian    virtual sp<ISurfaceComposerClient> createConnection() = 0;
60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
619a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis    /* create a graphic buffer allocator
629a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis     */
639a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis    virtual sp<IGraphicBufferAlloc> createGraphicBufferAlloc() = 0;
649a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis
65e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian    /* return an IDisplayEventConnection */
66e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian    virtual sp<IDisplayEventConnection> createDisplayEventConnection() = 0;
67e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian
689d4e3d2f42e93e2d12bacabe97d307d30c3c20ddJeff Brown    /* create a display
69e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian     * requires ACCESS_SURFACE_FLINGER permission.
70e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian     */
71e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian    virtual sp<IBinder> createDisplay() = 0;
72e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian
73e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian    /* get the token for the existing default displays. possible values
74e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian     * for id are eDisplayIdMain and eDisplayIdHdmi.
75e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian     */
76e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian    virtual sp<IBinder> getBuiltInDisplay(int32_t id) = 0;
77e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian
789cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian    /* open/close transactions. requires ACCESS_SURFACE_FLINGER permission */
793165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian    virtual void setTransactionState(const Vector<ComposerState>& state,
803165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian            const Vector<DisplayState>& displays, uint32_t flags) = 0;
81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    /* signal that we're done booting.
839cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian     * Requires ACCESS_SURFACE_FLINGER permission
84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     */
85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual void bootFinished() = 0;
86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
87e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian    /* verify that an ISurfaceTexture was created by SurfaceFlinger.
88e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian     */
89e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian    virtual bool authenticateSurfaceTexture(
90e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian            const sp<ISurfaceTexture>& surface) const = 0;
91e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian
921b0b30d04304392748a8a4ab5a69e52a19f51b3aMathias Agopian    /* Capture the specified screen. requires READ_FRAME_BUFFER permission
931b0b30d04304392748a8a4ab5a69e52a19f51b3aMathias Agopian     * This function will fail if there is a secure window on screen.
941b0b30d04304392748a8a4ab5a69e52a19f51b3aMathias Agopian     */
959d4e3d2f42e93e2d12bacabe97d307d30c3c20ddJeff Brown    virtual status_t captureScreen(const sp<IBinder>& display, sp<IMemoryHeap>* heap,
9674c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian            uint32_t* width, uint32_t* height, PixelFormat* format,
979d4e3d2f42e93e2d12bacabe97d307d30c3c20ddJeff Brown            uint32_t reqWidth, uint32_t reqHeight,
989d4e3d2f42e93e2d12bacabe97d307d30c3c20ddJeff Brown            uint32_t minLayerZ, uint32_t maxLayerZ) = 0;
991b0b30d04304392748a8a4ab5a69e52a19f51b3aMathias Agopian
1008e533069e5721e55cb9768e140e16546c3a4a8b6Colin Cross
1018e533069e5721e55cb9768e140e16546c3a4a8b6Colin Cross    /* triggers screen off and waits for it to complete */
1028e533069e5721e55cb9768e140e16546c3a4a8b6Colin Cross    virtual void blank() = 0;
1038e533069e5721e55cb9768e140e16546c3a4a8b6Colin Cross
1048e533069e5721e55cb9768e140e16546c3a4a8b6Colin Cross    /* triggers screen on and waits for it to complete */
1058e533069e5721e55cb9768e140e16546c3a4a8b6Colin Cross    virtual void unblank() = 0;
1063094df359d1e6e2ae8ca4e935cc093f563804c96Mathias Agopian
1079d4e3d2f42e93e2d12bacabe97d307d30c3c20ddJeff Brown    /* returns information about a display
1089d4e3d2f42e93e2d12bacabe97d307d30c3c20ddJeff Brown     * intended to be used to get information about built-in displays */
1099d4e3d2f42e93e2d12bacabe97d307d30c3c20ddJeff Brown    virtual status_t getDisplayInfo(const sp<IBinder>& display, DisplayInfo* info) = 0;
110c666cae2d5995097ec49a87e375e2afdd92802b7Mathias Agopian
1113094df359d1e6e2ae8ca4e935cc093f563804c96Mathias Agopian    /* connects to an external display */
1129d4e3d2f42e93e2d12bacabe97d307d30c3c20ddJeff Brown    virtual void connectDisplay(const sp<ISurfaceTexture>& display) = 0;
113edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
114edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
115edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ----------------------------------------------------------------------------
116edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
1173165cc21cfea781988407b19bd83292b19f05f55Mathias Agopianclass BnSurfaceComposer: public BnInterface<ISurfaceComposer> {
118edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic:
119edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    enum {
120edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        // Note: BOOT_FINISHED must remain this value, it is called from
121edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        // Java by ActivityManagerService.
122edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        BOOT_FINISHED = IBinder::FIRST_CALL_TRANSACTION,
123edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        CREATE_CONNECTION,
1249a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis        CREATE_GRAPHIC_BUFFER_ALLOC,
125e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian        CREATE_DISPLAY_EVENT_CONNECTION,
126e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian        CREATE_DISPLAY,
127e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian        GET_BUILT_IN_DISPLAY,
128698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian        SET_TRANSACTION_STATE,
129134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis        AUTHENTICATE_SURFACE,
130e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian        CAPTURE_SCREEN,
1318e533069e5721e55cb9768e140e16546c3a4a8b6Colin Cross        BLANK,
1328e533069e5721e55cb9768e140e16546c3a4a8b6Colin Cross        UNBLANK,
133e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian        GET_DISPLAY_INFO,
1343094df359d1e6e2ae8ca4e935cc093f563804c96Mathias Agopian        CONNECT_DISPLAY,
135edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    };
136edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
1373165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian    virtual status_t onTransact(uint32_t code, const Parcel& data,
1383165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian            Parcel* reply, uint32_t flags = 0);
139edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
140edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
141edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ----------------------------------------------------------------------------
142edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
143edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android
144edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
14590ac799241f077a7b7e6c1875fd933864c8dd2a7Mathias Agopian#endif // ANDROID_GUI_ISURFACE_COMPOSER_H
146