ISurfaceComposer.h revision 1495ceb88594bf3c5963ef65ee12953dc0354546
1f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross/*
2f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross * Copyright (C) 2006 The Android Open Source Project
3f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross *
4f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross * Licensed under the Apache License, Version 2.0 (the "License");
5f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross * you may not use this file except in compliance with the License.
6f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross * You may obtain a copy of the License at
7f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross *
8f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross *      http://www.apache.org/licenses/LICENSE-2.0
9f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross *
10f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross * Unless required by applicable law or agreed to in writing, software
11f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross * distributed under the License is distributed on an "AS IS" BASIS,
12002e1e58dfe19dd3e49a59c6827cbf51573941a2Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross * See the License for the specific language governing permissions and
14f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross * limitations under the License.
15f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross */
16f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross
17f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#ifndef ANDROID_GUI_ISURFACE_COMPOSER_H
18f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#define ANDROID_GUI_ISURFACE_COMPOSER_H
19f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross
20f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <stdint.h>
21f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <sys/types.h>
22f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross
23f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <utils/RefBase.h>
24f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <utils/Errors.h>
25f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <utils/Timers.h>
26f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <utils/Vector.h>
27f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross
28f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <binder/IInterface.h>
29f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross
30f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <ui/FrameStats.h>
313e03d3fb6a4cb93f5f978f9d2eed7b7cc62a06a6JP Abgrall#include <ui/PixelFormat.h>
32f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross
33f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <gui/IGraphicBufferAlloc.h>
34f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross#include <gui/ISurfaceComposerClient.h>
35f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross
36f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Crossnamespace android {
37f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross// ----------------------------------------------------------------------------
38f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross
39f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Crossclass ComposerState;
40f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Crossclass DisplayState;
41f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Crossstruct DisplayInfo;
42caad555f3efaf77941c4eacd4f6c84eb22d14f6dkeunyoungclass DisplayStatInfo;
43caad555f3efaf77941c4eacd4f6c84eb22d14f6dkeunyoungclass IDisplayEventConnection;
44caad555f3efaf77941c4eacd4f6c84eb22d14f6dkeunyoungclass IMemoryHeap;
45caad555f3efaf77941c4eacd4f6c84eb22d14f6dkeunyoungclass Rect;
46caad555f3efaf77941c4eacd4f6c84eb22d14f6dkeunyoung
47f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross/*
48f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross * This class defines the Binder IPC interface for accessing various
49f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross * SurfaceFlinger features.
50f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross */
51f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Crossclass ISurfaceComposer: public IInterface {
52f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Crosspublic:
53f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross    DECLARE_META_INTERFACE(SurfaceComposer);
54f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross
55f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross    // flags for setTransactionState()
56f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross    enum {
57f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross        eSynchronous = 0x01,
58f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross        eAnimation   = 0x02,
59f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross    };
60f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross
61f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross    enum {
62f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross        eDisplayIdMain = 0,
63f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross        eDisplayIdHdmi = 1
64f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross    };
65f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross
66f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross    enum Rotation {
67f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross        eRotateNone = 0,
68f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross        eRotate90   = 1,
69f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross        eRotate180  = 2,
70f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross        eRotate270  = 3
71caad555f3efaf77941c4eacd4f6c84eb22d14f6dkeunyoung    };
72caad555f3efaf77941c4eacd4f6c84eb22d14f6dkeunyoung
73caad555f3efaf77941c4eacd4f6c84eb22d14f6dkeunyoung    /* create connection with surface flinger, requires
74caad555f3efaf77941c4eacd4f6c84eb22d14f6dkeunyoung     * ACCESS_SURFACE_FLINGER permission
75f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross     */
76f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross    virtual sp<ISurfaceComposerClient> createConnection() = 0;
77f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross
78f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross    /* create a graphic buffer allocator
79f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross     */
80f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross    virtual sp<IGraphicBufferAlloc> createGraphicBufferAlloc() = 0;
81f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross
82f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross    /* return an IDisplayEventConnection */
83f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross    virtual sp<IDisplayEventConnection> createDisplayEventConnection() = 0;
84f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross
85f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross    /* create a virtual display
86f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross     * requires ACCESS_SURFACE_FLINGER permission.
87f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross     */
88f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross    virtual sp<IBinder> createDisplay(const String8& displayName,
89f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross            bool secure) = 0;
90f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross
91f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross    /* destroy a virtual display
92f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross     * requires ACCESS_SURFACE_FLINGER permission.
93f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross     */
94f45fa6b2853cc32385375a0b63ee39ad6a968869Colin Cross    virtual void destroyDisplay(const sp<IBinder>& display) = 0;
95
96    /* get the token for the existing default displays. possible values
97     * for id are eDisplayIdMain and eDisplayIdHdmi.
98     */
99    virtual sp<IBinder> getBuiltInDisplay(int32_t id) = 0;
100
101    /* open/close transactions. requires ACCESS_SURFACE_FLINGER permission */
102    virtual void setTransactionState(const Vector<ComposerState>& state,
103            const Vector<DisplayState>& displays, uint32_t flags) = 0;
104
105    /* signal that we're done booting.
106     * Requires ACCESS_SURFACE_FLINGER permission
107     */
108    virtual void bootFinished() = 0;
109
110    /* verify that an IGraphicBufferProducer was created by SurfaceFlinger.
111     */
112    virtual bool authenticateSurfaceTexture(
113            const sp<IGraphicBufferProducer>& surface) const = 0;
114
115    /* set display power mode. depending on the mode, it can either trigger
116     * screen on, off or low power mode and wait for it to complete.
117     * requires ACCESS_SURFACE_FLINGER permission.
118     */
119    virtual void setPowerMode(const sp<IBinder>& display, int mode) = 0;
120
121    /* returns information for each configuration of the given display
122     * intended to be used to get information about built-in displays */
123    virtual status_t getDisplayConfigs(const sp<IBinder>& display,
124            Vector<DisplayInfo>* configs) = 0;
125
126    /* returns display statistics for a given display
127     * intended to be used by the media framework to properly schedule
128     * video frames */
129    virtual status_t getDisplayStats(const sp<IBinder>& display,
130            DisplayStatInfo* stats) = 0;
131
132    /* indicates which of the configurations returned by getDisplayInfo is
133     * currently active */
134    virtual int getActiveConfig(const sp<IBinder>& display) = 0;
135
136    /* specifies which configuration (of those returned by getDisplayInfo)
137     * should be used */
138    virtual status_t setActiveConfig(const sp<IBinder>& display, int id) = 0;
139
140    /* Capture the specified screen. requires READ_FRAME_BUFFER permission
141     * This function will fail if there is a secure window on screen.
142     */
143    virtual status_t captureScreen(const sp<IBinder>& display,
144            const sp<IGraphicBufferProducer>& producer,
145            Rect sourceCrop, uint32_t reqWidth, uint32_t reqHeight,
146            uint32_t minLayerZ, uint32_t maxLayerZ,
147            bool useIdentityTransform,
148            Rotation rotation = eRotateNone) = 0;
149
150    /* Clears the frame statistics for animations.
151     *
152     * Requires the ACCESS_SURFACE_FLINGER permission.
153     */
154    virtual status_t clearAnimationFrameStats() = 0;
155
156    /* Gets the frame statistics for animations.
157     *
158     * Requires the ACCESS_SURFACE_FLINGER permission.
159     */
160    virtual status_t getAnimationFrameStats(FrameStats* outStats) const = 0;
161};
162
163// ----------------------------------------------------------------------------
164
165class BnSurfaceComposer: public BnInterface<ISurfaceComposer> {
166public:
167    enum {
168        // Note: BOOT_FINISHED must remain this value, it is called from
169        // Java by ActivityManagerService.
170        BOOT_FINISHED = IBinder::FIRST_CALL_TRANSACTION,
171        CREATE_CONNECTION,
172        CREATE_GRAPHIC_BUFFER_ALLOC,
173        CREATE_DISPLAY_EVENT_CONNECTION,
174        CREATE_DISPLAY,
175        DESTROY_DISPLAY,
176        GET_BUILT_IN_DISPLAY,
177        SET_TRANSACTION_STATE,
178        AUTHENTICATE_SURFACE,
179        GET_DISPLAY_CONFIGS,
180        GET_ACTIVE_CONFIG,
181        SET_ACTIVE_CONFIG,
182        CONNECT_DISPLAY,
183        CAPTURE_SCREEN,
184        CLEAR_ANIMATION_FRAME_STATS,
185        GET_ANIMATION_FRAME_STATS,
186        SET_POWER_MODE,
187        GET_DISPLAY_STATS,
188    };
189
190    virtual status_t onTransact(uint32_t code, const Parcel& data,
191            Parcel* reply, uint32_t flags = 0);
192};
193
194// ----------------------------------------------------------------------------
195
196}; // namespace android
197
198#endif // ANDROID_GUI_ISURFACE_COMPOSER_H
199