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