ISurfaceComposer.h revision e7bda06398f09d0a28557fcf550ece2c8bb1eb80
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>
25d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav#include <utils/Timers.h>
26d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav#include <utils/Vector.h>
279cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian
28c5b2c0bf8007562536b822eb060fc54a01f8e08bMathias Agopian#include <binder/IInterface.h>
29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
30d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav#include <ui/FrameStats.h>
31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <ui/PixelFormat.h>
32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
3390ac799241f077a7b7e6c1875fd933864c8dd2a7Mathias Agopian#include <gui/IGraphicBufferAlloc.h>
3490ac799241f077a7b7e6c1875fd933864c8dd2a7Mathias Agopian#include <gui/ISurfaceComposerClient.h>
35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
369cce325fae8adcf7560a28eef394489f09bad74dMathias Agopiannamespace android {
37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ----------------------------------------------------------------------------
38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
39439cf8576d3b846c0aa0944d84372259bf075d51Mathias Agopianclass ComposerState;
408b33f032327f8de0dcc0e6d0d43ed80f834b51f6Mathias Agopianclass DisplayState;
41646f54105018e99ef4a30ee41f01f7d1ab66c38eJesse Hallstruct DisplayInfo;
42e7bda06398f09d0a28557fcf550ece2c8bb1eb80Lajos Molnarstruct DisplayStatInfo;
43d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopianclass IDisplayEventConnection;
44d0566bc26fcf6ca396118701fa11900b627f2c09Mathias Agopianclass IMemoryHeap;
45c18790018be5d7ea7061ccbc81f3044e74adc823Dan Stozaclass Rect;
46a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopian
47882e3a39ed770b335a203e233b57127fde1c839eAndy McFadden/*
48882e3a39ed770b335a203e233b57127fde1c839eAndy McFadden * This class defines the Binder IPC interface for accessing various
49882e3a39ed770b335a203e233b57127fde1c839eAndy McFadden * SurfaceFlinger features.
50882e3a39ed770b335a203e233b57127fde1c839eAndy McFadden */
513165cc21cfea781988407b19bd83292b19f05f55Mathias Agopianclass ISurfaceComposer: public IInterface {
52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic:
53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    DECLARE_META_INTERFACE(SurfaceComposer);
54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
553165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian    // flags for setTransactionState()
5628378392fd5aa3e0a392c9eb64634055678c3987Jamie Gennis    enum {
573165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian        eSynchronous = 0x01,
582d5e230292c27d59f4c096bc742a0a19abf811c1Jamie Gennis        eAnimation   = 0x02,
5928378392fd5aa3e0a392c9eb64634055678c3987Jamie Gennis    };
6028378392fd5aa3e0a392c9eb64634055678c3987Jamie Gennis
61e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian    enum {
62e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian        eDisplayIdMain = 0,
63e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian        eDisplayIdHdmi = 1
64e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian    };
65e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian
66c3ebe66b49cfba035e1fd0e160a13db38eb81b0eRiley Andrews    enum Rotation {
67c3ebe66b49cfba035e1fd0e160a13db38eb81b0eRiley Andrews        eRotateNone = 0,
68c3ebe66b49cfba035e1fd0e160a13db38eb81b0eRiley Andrews        eRotate90   = 1,
69c3ebe66b49cfba035e1fd0e160a13db38eb81b0eRiley Andrews        eRotate180  = 2,
70c3ebe66b49cfba035e1fd0e160a13db38eb81b0eRiley Andrews        eRotate270  = 3
71c3ebe66b49cfba035e1fd0e160a13db38eb81b0eRiley Andrews    };
72c3ebe66b49cfba035e1fd0e160a13db38eb81b0eRiley Andrews
73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    /* create connection with surface flinger, requires
74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     * ACCESS_SURFACE_FLINGER permission
75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     */
767e27f05739c8a2655cf0f7faea35614ce0a50278Mathias Agopian    virtual sp<ISurfaceComposerClient> createConnection() = 0;
77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
789a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis    /* create a graphic buffer allocator
799a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis     */
809a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis    virtual sp<IGraphicBufferAlloc> createGraphicBufferAlloc() = 0;
819a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis
82e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian    /* return an IDisplayEventConnection */
83e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian    virtual sp<IDisplayEventConnection> createDisplayEventConnection() = 0;
84e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian
856c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall    /* create a virtual display
86e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian     * requires ACCESS_SURFACE_FLINGER permission.
87e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian     */
88dd3cb84cfbe8068790c6233b5829fae9c4a0ee93Jamie Gennis    virtual sp<IBinder> createDisplay(const String8& displayName,
89dd3cb84cfbe8068790c6233b5829fae9c4a0ee93Jamie Gennis            bool secure) = 0;
90e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian
916c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall    /* destroy a virtual display
926c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall     * requires ACCESS_SURFACE_FLINGER permission.
936c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall     */
946c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall    virtual void destroyDisplay(const sp<IBinder>& display) = 0;
956c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall
96e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian    /* get the token for the existing default displays. possible values
97e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian     * for id are eDisplayIdMain and eDisplayIdHdmi.
98e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian     */
99e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian    virtual sp<IBinder> getBuiltInDisplay(int32_t id) = 0;
100e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian
1019cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian    /* open/close transactions. requires ACCESS_SURFACE_FLINGER permission */
1023165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian    virtual void setTransactionState(const Vector<ComposerState>& state,
1033165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian            const Vector<DisplayState>& displays, uint32_t flags) = 0;
104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
105edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    /* signal that we're done booting.
1069cce325fae8adcf7560a28eef394489f09bad74dMathias Agopian     * Requires ACCESS_SURFACE_FLINGER permission
107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project     */
108edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual void bootFinished() = 0;
109edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
1102adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden    /* verify that an IGraphicBufferProducer was created by SurfaceFlinger.
111e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian     */
112e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian    virtual bool authenticateSurfaceTexture(
1132adaf04fab35cf47c824d74d901b54094e01ccd3Andy McFadden            const sp<IGraphicBufferProducer>& surface) const = 0;
114e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian
1152c9b11f0291210c9b9513a1a0cce6afebd361b3bPrashant Malani    /* set display power mode. depending on the mode, it can either trigger
1162c9b11f0291210c9b9513a1a0cce6afebd361b3bPrashant Malani     * screen on, off or low power mode and wait for it to complete.
117041a075262ef5fc886e46fd4eec3dd79ee2e60c0Mathias Agopian     * requires ACCESS_SURFACE_FLINGER permission.
118041a075262ef5fc886e46fd4eec3dd79ee2e60c0Mathias Agopian     */
1192c9b11f0291210c9b9513a1a0cce6afebd361b3bPrashant Malani    virtual void setPowerMode(const sp<IBinder>& display, int mode) = 0;
1203094df359d1e6e2ae8ca4e935cc093f563804c96Mathias Agopian
1217f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza    /* returns information for each configuration of the given display
1229d4e3d2f42e93e2d12bacabe97d307d30c3c20ddJeff Brown     * intended to be used to get information about built-in displays */
1237f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza    virtual status_t getDisplayConfigs(const sp<IBinder>& display,
1247f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza            Vector<DisplayInfo>* configs) = 0;
1257f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza
12667d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar    /* returns display statistics for a given display
12767d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar     * intended to be used by the media framework to properly schedule
12867d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar     * video frames */
12967d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar    virtual status_t getDisplayStats(const sp<IBinder>& display,
13067d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar            DisplayStatInfo* stats) = 0;
13167d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar
1327f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza    /* indicates which of the configurations returned by getDisplayInfo is
1337f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza     * currently active */
1347f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza    virtual int getActiveConfig(const sp<IBinder>& display) = 0;
1357f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza
1367f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza    /* specifies which configuration (of those returned by getDisplayInfo)
1377f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza     * should be used */
1387f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza    virtual status_t setActiveConfig(const sp<IBinder>& display, int id) = 0;
1392a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopian
140041a075262ef5fc886e46fd4eec3dd79ee2e60c0Mathias Agopian    /* Capture the specified screen. requires READ_FRAME_BUFFER permission
141041a075262ef5fc886e46fd4eec3dd79ee2e60c0Mathias Agopian     * This function will fail if there is a secure window on screen.
142041a075262ef5fc886e46fd4eec3dd79ee2e60c0Mathias Agopian     */
1432a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopian    virtual status_t captureScreen(const sp<IBinder>& display,
1442a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopian            const sp<IGraphicBufferProducer>& producer,
145c18790018be5d7ea7061ccbc81f3044e74adc823Dan Stoza            Rect sourceCrop, uint32_t reqWidth, uint32_t reqHeight,
146c701401f8cec2e5309f8b57e2b97baced5093274Dan Stoza            uint32_t minLayerZ, uint32_t maxLayerZ,
147c3ebe66b49cfba035e1fd0e160a13db38eb81b0eRiley Andrews            bool useIdentityTransform,
148c3ebe66b49cfba035e1fd0e160a13db38eb81b0eRiley Andrews            Rotation rotation = eRotateNone) = 0;
149d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav
150d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav    /* Clears the frame statistics for animations.
151d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav     *
152d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav     * Requires the ACCESS_SURFACE_FLINGER permission.
153d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav     */
154d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav    virtual status_t clearAnimationFrameStats() = 0;
155d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav
156d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav    /* Gets the frame statistics for animations.
157d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav     *
158d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav     * Requires the ACCESS_SURFACE_FLINGER permission.
159d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav     */
160d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav    virtual status_t getAnimationFrameStats(FrameStats* outStats) const = 0;
161edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
162edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
163edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ----------------------------------------------------------------------------
164edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
1653165cc21cfea781988407b19bd83292b19f05f55Mathias Agopianclass BnSurfaceComposer: public BnInterface<ISurfaceComposer> {
166edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic:
167edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    enum {
168edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        // Note: BOOT_FINISHED must remain this value, it is called from
169edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        // Java by ActivityManagerService.
170edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        BOOT_FINISHED = IBinder::FIRST_CALL_TRANSACTION,
171edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        CREATE_CONNECTION,
1729a78c90cd46b2a3bd637b056873149d3b94384b4Jamie Gennis        CREATE_GRAPHIC_BUFFER_ALLOC,
173e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian        CREATE_DISPLAY_EVENT_CONNECTION,
174e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian        CREATE_DISPLAY,
1756c913be9ca95fd6b556d056e165a4ba6dc69795bJesse Hall        DESTROY_DISPLAY,
176e57f292595bec48f65c8088b00ff6beea01217e9Mathias Agopian        GET_BUILT_IN_DISPLAY,
177698c0873cf2e07bdc7fd1e72169aee2a19fa40d7Mathias Agopian        SET_TRANSACTION_STATE,
178134f0422866e8985188ed10dfbdcb8e6c34b87f7Jamie Gennis        AUTHENTICATE_SURFACE,
1797f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza        GET_DISPLAY_CONFIGS,
1807f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza        GET_ACTIVE_CONFIG,
1817f7da32569f8e0b3d383a40b95f8ac1d55afd801Dan Stoza        SET_ACTIVE_CONFIG,
1823094df359d1e6e2ae8ca4e935cc093f563804c96Mathias Agopian        CONNECT_DISPLAY,
1832a9fc493dfdba67108e4335bb1fe931bc1e2a025Mathias Agopian        CAPTURE_SCREEN,
184d85084b2b65828442eafaff9b811e9b6c9ca9fadSvetoslav        CLEAR_ANIMATION_FRAME_STATS,
1852c9b11f0291210c9b9513a1a0cce6afebd361b3bPrashant Malani        GET_ANIMATION_FRAME_STATS,
1862c9b11f0291210c9b9513a1a0cce6afebd361b3bPrashant Malani        SET_POWER_MODE,
18767d8bd66aaf04805cb8f2616ba964141b865e3b9Lajos Molnar        GET_DISPLAY_STATS,
188edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    };
189edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
1903165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian    virtual status_t onTransact(uint32_t code, const Parcel& data,
1913165cc21cfea781988407b19bd83292b19f05f55Mathias Agopian            Parcel* reply, uint32_t flags = 0);
192edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
193edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
194edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ----------------------------------------------------------------------------
195edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
196edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android
197edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
19890ac799241f077a7b7e6c1875fd933864c8dd2a7Mathias Agopian#endif // ANDROID_GUI_ISURFACE_COMPOSER_H
199