ISurfaceComposer.h revision 3165cc21cfea781988407b19bd83292b19f05f55
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
51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    /* create connection with surface flinger, requires
52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     * ACCESS_SURFACE_FLINGER permission
53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     */
547e27f05739c8a2655cf0f7faea35614ce0a50278Mathias Agopian    virtual sp<ISurfaceComposerClient> createConnection() = 0;
55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
569a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis    /* create a graphic buffer allocator
579a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis     */
589a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis    virtual sp<IGraphicBufferAlloc> createGraphicBufferAlloc() = 0;
599a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis
609cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian    /* open/close transactions. requires ACCESS_SURFACE_FLINGER permission */
613165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian    virtual void setTransactionState(const Vector<ComposerState>& state,
623165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian            const Vector<DisplayState>& displays, uint32_t flags) = 0;
63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    /* signal that we're done booting.
659cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian     * Requires ACCESS_SURFACE_FLINGER permission
66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     */
67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual void bootFinished() = 0;
68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
691b0b30d04304392748a8a4ab5a69e52a19f51b3aMathias Agopian    /* Capture the specified screen. requires READ_FRAME_BUFFER permission
701b0b30d04304392748a8a4ab5a69e52a19f51b3aMathias Agopian     * This function will fail if there is a secure window on screen.
711b0b30d04304392748a8a4ab5a69e52a19f51b3aMathias Agopian     */
723165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian    virtual status_t captureScreen(DisplayID dpy, sp<IMemoryHeap>* heap,
7374c40c0a273dbfd7d10617c4cc1b0c066bfc812eMathias Agopian            uint32_t* width, uint32_t* height, PixelFormat* format,
743165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian            uint32_t reqWidth, uint32_t reqHeight, uint32_t minLayerZ,
753165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian            uint32_t maxLayerZ) = 0;
761b0b30d04304392748a8a4ab5a69e52a19f51b3aMathias Agopian
77582270d69db94286a248bd829f1ae6f910d45124Jamie Gennis    /* verify that an ISurfaceTexture was created by SurfaceFlinger.
78134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis     */
79582270d69db94286a248bd829f1ae6f910d45124Jamie Gennis    virtual bool authenticateSurfaceTexture(
80582270d69db94286a248bd829f1ae6f910d45124Jamie Gennis            const sp<ISurfaceTexture>& surface) const = 0;
81d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian
82d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian    /* return an IDisplayEventConnection */
83d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian    virtual sp<IDisplayEventConnection> createDisplayEventConnection() = 0;
848e533069e5721e55cb9768e140e16546c3a4a8b6Colin Cross
858e533069e5721e55cb9768e140e16546c3a4a8b6Colin Cross    /* triggers screen off and waits for it to complete */
868e533069e5721e55cb9768e140e16546c3a4a8b6Colin Cross    virtual void blank() = 0;
878e533069e5721e55cb9768e140e16546c3a4a8b6Colin Cross
888e533069e5721e55cb9768e140e16546c3a4a8b6Colin Cross    /* triggers screen on and waits for it to complete */
898e533069e5721e55cb9768e140e16546c3a4a8b6Colin Cross    virtual void unblank() = 0;
903094df359d1e6e2ae8ca4e935cc093f563804c96Mathias Agopian
91c666cae2d5995097ec49a87e375e2afdd92802b7Mathias Agopian    /* returns information about a physical screen. This is intended to be
92c666cae2d5995097ec49a87e375e2afdd92802b7Mathias Agopian     * used by low-level native tests */
93c666cae2d5995097ec49a87e375e2afdd92802b7Mathias Agopian    virtual status_t getDisplayInfo(DisplayID dpy, DisplayInfo* info) = 0;
94c666cae2d5995097ec49a87e375e2afdd92802b7Mathias Agopian
953094df359d1e6e2ae8ca4e935cc093f563804c96Mathias Agopian    /* connects to an external display */
963094df359d1e6e2ae8ca4e935cc093f563804c96Mathias Agopian    virtual void connectDisplay(const sp<ISurfaceTexture> display) = 0;
97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ----------------------------------------------------------------------------
100edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
1013165cc21cfea781988407b19bd83292b19f05f55Mathias Agopianclass BnSurfaceComposer: public BnInterface<ISurfaceComposer> {
102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic:
103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    enum {
104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        // Note: BOOT_FINISHED must remain this value, it is called from
105edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        // Java by ActivityManagerService.
106edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        BOOT_FINISHED = IBinder::FIRST_CALL_TRANSACTION,
107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        CREATE_CONNECTION,
1089a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis        CREATE_GRAPHIC_BUFFER_ALLOC,
109c666cae2d5995097ec49a87e375e2afdd92802b7Mathias Agopian        GET_DISPLAY_INFO,
110698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian        SET_TRANSACTION_STATE,
11159119e658a12279e8fff508f8773843de2d90917Mathias Agopian        CAPTURE_SCREEN,
112134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis        AUTHENTICATE_SURFACE,
113d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopian        CREATE_DISPLAY_EVENT_CONNECTION,
1148e533069e5721e55cb9768e140e16546c3a4a8b6Colin Cross        BLANK,
1158e533069e5721e55cb9768e140e16546c3a4a8b6Colin Cross        UNBLANK,
1163094df359d1e6e2ae8ca4e935cc093f563804c96Mathias Agopian        CONNECT_DISPLAY,
117edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    };
118edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
1193165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian    virtual status_t onTransact(uint32_t code, const Parcel& data,
1203165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian            Parcel* reply, uint32_t flags = 0);
121edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
122edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
123edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ----------------------------------------------------------------------------
124edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
125edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android
126edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
12790ac799241f077a7b7e6c1875fd933864c8dd2a7Mathias Agopian#endif // ANDROID_GUI_ISURFACE_COMPOSER_H
128