ISurfaceComposer.h revision 6501e9944df131b3b7e293007084735dfa217f24
1d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber/*
2d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * Copyright (C) 2006 The Android Open Source Project
3d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber *
4d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * you may not use this file except in compliance with the License.
6d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * You may obtain a copy of the License at
7d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber *
8d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber *
10d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * Unless required by applicable law or agreed to in writing, software
11d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * See the License for the specific language governing permissions and
14d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber * limitations under the License.
15d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber */
16d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber
17d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber#ifndef ANDROID_GUI_ISURFACE_COMPOSER_H
18d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber#define ANDROID_GUI_ISURFACE_COMPOSER_H
19d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber
20d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber#include <stdint.h>
21d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber#include <sys/types.h>
22d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber
23d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber#include <utils/RefBase.h>
24e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber#include <utils/Errors.h>
25d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber
26d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber#include <binder/IInterface.h>
27d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber
28d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber#include <ui/PixelFormat.h>
29d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber
30d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber#include <gui/IGraphicBufferAlloc.h>
31d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber#include <gui/ISurfaceComposerClient.h>
32d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber
33d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Hubernamespace android {
34d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber// ----------------------------------------------------------------------------
35d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber
36082830f92373a1b9e512dbbfb940187ffa1c2c6fAndreas Huberclass ComposerState;
37d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huberclass IDisplayEventConnection;
38d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huberclass IMemoryHeap;
39d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber
40d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huberclass ISurfaceComposer : public IInterface
41d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber{
42d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huberpublic:
43d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber    DECLARE_META_INTERFACE(SurfaceComposer);
44d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber
45d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber    enum { // (keep in sync with Surface.java)
46d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber        eHidden             = 0x00000004,
47d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber        eDestroyBackbuffer  = 0x00000020,
48d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber        eSecure             = 0x00000080,
49e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber        eNonPremultiplied   = 0x00000100,
50e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber        eOpaque             = 0x00000400,
51d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber        eProtectedByApp     = 0x00000800,
52d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber        eProtectedByDRM     = 0x00001000,
53d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber
54d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber        eFXSurfaceNormal    = 0x00000000,
55d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber        eFXSurfaceBlur      = 0x00010000,
56d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber        eFXSurfaceDim       = 0x00020000,
57d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber        eFXSurfaceScreenshot= 0x00030000,
58e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber        eFXSurfaceMask      = 0x000F0000,
59e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber    };
60e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber
61e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber    enum {
62e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber        ePositionChanged            = 0x00000001,
63d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber        eLayerChanged               = 0x00000002,
64d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber        eSizeChanged                = 0x00000004,
65d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber        eAlphaChanged               = 0x00000008,
66d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber        eMatrixChanged              = 0x00000010,
67d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber        eTransparentRegionChanged   = 0x00000020,
68d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber        eVisibilityChanged          = 0x00000040,
69d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber        eCropChanged                = 0x00000100,
70d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber    };
71d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber
72e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber    enum {
73e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber        eLayerHidden        = 0x01,
74e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber        eLayerDither        = 0x04,
75d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber        eLayerFilter        = 0x08,
76d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber        eLayerBlurFreeze    = 0x10
77d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber    };
78d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber
79e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber    enum {
80e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber        eOrientationDefault     = 0,
81e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber        eOrientation90          = 1,
82d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber        eOrientation180         = 2,
83d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber        eOrientation270         = 3,
84e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber        eOrientationUnchanged   = 4,
85d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber        eOrientationSwapMask    = 0x01
86d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber    };
87d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber
88d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber    enum {
89d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber        eSynchronous            = 0x01,
90e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber    };
91e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber
92e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber    enum {
93e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber        eElectronBeamAnimationOn  = 0x01,
94e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber        eElectronBeamAnimationOff = 0x10
95e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber    };
96e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber
97e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber    /* create connection with surface flinger, requires
98e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber     * ACCESS_SURFACE_FLINGER permission
99e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber     */
100d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber    virtual sp<ISurfaceComposerClient> createConnection() = 0;
101d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber
102d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber    /* create a graphic buffer allocator
103d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber     */
104d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber    virtual sp<IGraphicBufferAlloc> createGraphicBufferAlloc() = 0;
105d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber
106d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber    /* retrieve the control block */
107d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber    virtual sp<IMemoryHeap> getCblk() const = 0;
108d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber
109e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber    /* open/close transactions. requires ACCESS_SURFACE_FLINGER permission */
110d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber    virtual void setTransactionState(const Vector<ComposerState>& state,
111d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber            int orientation, uint32_t flags) = 0;
112d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber
113d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber    /* signal that we're done booting.
114d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber     * Requires ACCESS_SURFACE_FLINGER permission
115d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber     */
116d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber    virtual void bootFinished() = 0;
117d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber
118d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber    /* Capture the specified screen. requires READ_FRAME_BUFFER permission
119d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber     * This function will fail if there is a secure window on screen.
120d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber     */
121d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber    virtual status_t captureScreen(DisplayID dpy,
122d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber            sp<IMemoryHeap>* heap,
123d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber            uint32_t* width, uint32_t* height, PixelFormat* format,
124d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber            uint32_t reqWidth, uint32_t reqHeight,
125d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber            uint32_t minLayerZ, uint32_t maxLayerZ) = 0;
126d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber
127d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber    /* triggers screen off animation */
128d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber    virtual status_t turnElectronBeamOff(int32_t mode) = 0;
129d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber
130d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber    /* triggers screen on animation */
131d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber    virtual status_t turnElectronBeamOn(int32_t mode) = 0;
132d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber
133e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber    /* verify that an ISurfaceTexture was created by SurfaceFlinger.
134e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber     */
135e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber    virtual bool authenticateSurfaceTexture(
136e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber            const sp<ISurfaceTexture>& surface) const = 0;
137e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber
138e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber    /* return an IDisplayEventConnection */
139e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber    virtual sp<IDisplayEventConnection> createDisplayEventConnection() = 0;
140e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber
141e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber    /* triggers screen off and waits for it to complete */
142e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber    virtual void blank() = 0;
143e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber
144e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber    /* triggers screen on and waits for it to complete */
145e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber    virtual void unblank() = 0;
146e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber
147e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber    /* connects to an external display */
148e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber    virtual void connectDisplay(const sp<ISurfaceTexture> display) = 0;
149e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber};
150e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber
151e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber// ----------------------------------------------------------------------------
152e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber
153e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huberclass BnSurfaceComposer : public BnInterface<ISurfaceComposer>
154e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber{
155e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huberpublic:
156e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber    enum {
157e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber        // Note: BOOT_FINISHED must remain this value, it is called from
158e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber        // Java by ActivityManagerService.
159e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber        BOOT_FINISHED = IBinder::FIRST_CALL_TRANSACTION,
160e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber        CREATE_CONNECTION,
161e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber        CREATE_GRAPHIC_BUFFER_ALLOC,
162a438123bd96c7faf145683876702387efe5628d9Andreas Huber        GET_CBLK,
163a438123bd96c7faf145683876702387efe5628d9Andreas Huber        SET_TRANSACTION_STATE,
164e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber        SET_ORIENTATION,
165e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber        CAPTURE_SCREEN,
166e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber        TURN_ELECTRON_BEAM_OFF,
167e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber        TURN_ELECTRON_BEAM_ON,
168e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber        AUTHENTICATE_SURFACE,
169d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber        CREATE_DISPLAY_EVENT_CONNECTION,
170d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber        BLANK,
171d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber        UNBLANK,
172d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber        CONNECT_DISPLAY,
1730b73d4730202fcad53aefc4314a06e7b95f442f0Andreas Huber    };
1740b73d4730202fcad53aefc4314a06e7b95f442f0Andreas Huber
175d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber    virtual status_t    onTransact( uint32_t code,
176d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber                                    const Parcel& data,
1770b73d4730202fcad53aefc4314a06e7b95f442f0Andreas Huber                                    Parcel* reply,
178d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber                                    uint32_t flags = 0);
179e1957358f11031a554c57d4fb46988dd6044acc1Andreas Huber};
180d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber
181d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber// ----------------------------------------------------------------------------
182d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber
183d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber}; // namespace android
184d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber
185d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber#endif // ANDROID_GUI_ISURFACE_COMPOSER_H
186d7bee3a9d2ad76d073d91f0ee36d5ac5f9df480cAndreas Huber