Home | History | Annotate | Download | only in gui
      1 /*
      2  * Copyright (C) 2006 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #ifndef ANDROID_GUI_ISURFACE_COMPOSER_H
     18 #define ANDROID_GUI_ISURFACE_COMPOSER_H
     19 
     20 #include <stdint.h>
     21 #include <sys/types.h>
     22 
     23 #include <utils/RefBase.h>
     24 #include <utils/Errors.h>
     25 #include <utils/Timers.h>
     26 #include <utils/Vector.h>
     27 
     28 #include <binder/IInterface.h>
     29 
     30 #include <ui/FrameStats.h>
     31 #include <ui/PixelFormat.h>
     32 
     33 #include <vector>
     34 
     35 namespace android {
     36 // ----------------------------------------------------------------------------
     37 
     38 struct ComposerState;
     39 struct DisplayState;
     40 struct DisplayInfo;
     41 struct DisplayStatInfo;
     42 class HdrCapabilities;
     43 class IDisplayEventConnection;
     44 class IGraphicBufferProducer;
     45 class ISurfaceComposerClient;
     46 class Rect;
     47 enum class FrameEvent;
     48 
     49 /*
     50  * This class defines the Binder IPC interface for accessing various
     51  * SurfaceFlinger features.
     52  */
     53 class ISurfaceComposer: public IInterface {
     54 public:
     55     DECLARE_META_INTERFACE(SurfaceComposer)
     56 
     57     // flags for setTransactionState()
     58     enum {
     59         eSynchronous = 0x01,
     60         eAnimation   = 0x02,
     61     };
     62 
     63     enum {
     64         eDisplayIdMain = 0,
     65         eDisplayIdHdmi = 1
     66     };
     67 
     68     enum Rotation {
     69         eRotateNone = 0,
     70         eRotate90   = 1,
     71         eRotate180  = 2,
     72         eRotate270  = 3
     73     };
     74 
     75     enum VsyncSource {
     76         eVsyncSourceApp = 0,
     77         eVsyncSourceSurfaceFlinger = 1
     78     };
     79 
     80     /* create connection with surface flinger, requires
     81      * ACCESS_SURFACE_FLINGER permission
     82      */
     83     virtual sp<ISurfaceComposerClient> createConnection() = 0;
     84 
     85     /** create a scoped connection with surface flinger.
     86      * Surfaces produced with this connection will act
     87      * as children of the passed in GBP. That is to say
     88      * SurfaceFlinger will draw them relative and confined to
     89      * drawing of buffers from the layer associated with parent.
     90      * As this is graphically equivalent in reach to just drawing
     91      * pixels into the parent buffers, it requires no special permission.
     92      */
     93     virtual sp<ISurfaceComposerClient> createScopedConnection(
     94             const sp<IGraphicBufferProducer>& parent) = 0;
     95 
     96     /* return an IDisplayEventConnection */
     97     virtual sp<IDisplayEventConnection> createDisplayEventConnection(
     98             VsyncSource vsyncSource = eVsyncSourceApp) = 0;
     99 
    100     /* create a virtual display
    101      * requires ACCESS_SURFACE_FLINGER permission.
    102      */
    103     virtual sp<IBinder> createDisplay(const String8& displayName,
    104             bool secure) = 0;
    105 
    106     /* destroy a virtual display
    107      * requires ACCESS_SURFACE_FLINGER permission.
    108      */
    109     virtual void destroyDisplay(const sp<IBinder>& display) = 0;
    110 
    111     /* get the token for the existing default displays. possible values
    112      * for id are eDisplayIdMain and eDisplayIdHdmi.
    113      */
    114     virtual sp<IBinder> getBuiltInDisplay(int32_t id) = 0;
    115 
    116     /* open/close transactions. requires ACCESS_SURFACE_FLINGER permission */
    117     virtual void setTransactionState(const Vector<ComposerState>& state,
    118             const Vector<DisplayState>& displays, uint32_t flags) = 0;
    119 
    120     /* signal that we're done booting.
    121      * Requires ACCESS_SURFACE_FLINGER permission
    122      */
    123     virtual void bootFinished() = 0;
    124 
    125     /* verify that an IGraphicBufferProducer was created by SurfaceFlinger.
    126      */
    127     virtual bool authenticateSurfaceTexture(
    128             const sp<IGraphicBufferProducer>& surface) const = 0;
    129 
    130     /* Returns the frame timestamps supported by SurfaceFlinger.
    131      */
    132     virtual status_t getSupportedFrameTimestamps(
    133             std::vector<FrameEvent>* outSupported) const = 0;
    134 
    135     /* set display power mode. depending on the mode, it can either trigger
    136      * screen on, off or low power mode and wait for it to complete.
    137      * requires ACCESS_SURFACE_FLINGER permission.
    138      */
    139     virtual void setPowerMode(const sp<IBinder>& display, int mode) = 0;
    140 
    141     /* returns information for each configuration of the given display
    142      * intended to be used to get information about built-in displays */
    143     virtual status_t getDisplayConfigs(const sp<IBinder>& display,
    144             Vector<DisplayInfo>* configs) = 0;
    145 
    146     /* returns display statistics for a given display
    147      * intended to be used by the media framework to properly schedule
    148      * video frames */
    149     virtual status_t getDisplayStats(const sp<IBinder>& display,
    150             DisplayStatInfo* stats) = 0;
    151 
    152     /* indicates which of the configurations returned by getDisplayInfo is
    153      * currently active */
    154     virtual int getActiveConfig(const sp<IBinder>& display) = 0;
    155 
    156     /* specifies which configuration (of those returned by getDisplayInfo)
    157      * should be used */
    158     virtual status_t setActiveConfig(const sp<IBinder>& display, int id) = 0;
    159 
    160     virtual status_t getDisplayColorModes(const sp<IBinder>& display,
    161             Vector<android_color_mode_t>* outColorModes) = 0;
    162     virtual android_color_mode_t getActiveColorMode(const sp<IBinder>& display) = 0;
    163     virtual status_t setActiveColorMode(const sp<IBinder>& display,
    164             android_color_mode_t colorMode) = 0;
    165 
    166     /* Capture the specified screen. requires READ_FRAME_BUFFER permission
    167      * This function will fail if there is a secure window on screen.
    168      */
    169     virtual status_t captureScreen(const sp<IBinder>& display,
    170             const sp<IGraphicBufferProducer>& producer,
    171             Rect sourceCrop, uint32_t reqWidth, uint32_t reqHeight,
    172             int32_t minLayerZ, int32_t maxLayerZ,
    173             bool useIdentityTransform,
    174             Rotation rotation = eRotateNone) = 0;
    175 
    176     /* Clears the frame statistics for animations.
    177      *
    178      * Requires the ACCESS_SURFACE_FLINGER permission.
    179      */
    180     virtual status_t clearAnimationFrameStats() = 0;
    181 
    182     /* Gets the frame statistics for animations.
    183      *
    184      * Requires the ACCESS_SURFACE_FLINGER permission.
    185      */
    186     virtual status_t getAnimationFrameStats(FrameStats* outStats) const = 0;
    187 
    188     /* Gets the supported HDR capabilities of the given display.
    189      *
    190      * Requires the ACCESS_SURFACE_FLINGER permission.
    191      */
    192     virtual status_t getHdrCapabilities(const sp<IBinder>& display,
    193             HdrCapabilities* outCapabilities) const = 0;
    194 
    195     virtual status_t enableVSyncInjections(bool enable) = 0;
    196 
    197     virtual status_t injectVSync(nsecs_t when) = 0;
    198 };
    199 
    200 // ----------------------------------------------------------------------------
    201 
    202 class BnSurfaceComposer: public BnInterface<ISurfaceComposer> {
    203 public:
    204     enum {
    205         // Note: BOOT_FINISHED must remain this value, it is called from
    206         // Java by ActivityManagerService.
    207         BOOT_FINISHED = IBinder::FIRST_CALL_TRANSACTION,
    208         CREATE_CONNECTION,
    209         UNUSED, // formerly CREATE_GRAPHIC_BUFFER_ALLOC
    210         CREATE_DISPLAY_EVENT_CONNECTION,
    211         CREATE_DISPLAY,
    212         DESTROY_DISPLAY,
    213         GET_BUILT_IN_DISPLAY,
    214         SET_TRANSACTION_STATE,
    215         AUTHENTICATE_SURFACE,
    216         GET_SUPPORTED_FRAME_TIMESTAMPS,
    217         GET_DISPLAY_CONFIGS,
    218         GET_ACTIVE_CONFIG,
    219         SET_ACTIVE_CONFIG,
    220         CONNECT_DISPLAY,
    221         CAPTURE_SCREEN,
    222         CLEAR_ANIMATION_FRAME_STATS,
    223         GET_ANIMATION_FRAME_STATS,
    224         SET_POWER_MODE,
    225         GET_DISPLAY_STATS,
    226         GET_HDR_CAPABILITIES,
    227         GET_DISPLAY_COLOR_MODES,
    228         GET_ACTIVE_COLOR_MODE,
    229         SET_ACTIVE_COLOR_MODE,
    230         ENABLE_VSYNC_INJECTIONS,
    231         INJECT_VSYNC,
    232         CREATE_SCOPED_CONNECTION
    233     };
    234 
    235     virtual status_t onTransact(uint32_t code, const Parcel& data,
    236             Parcel* reply, uint32_t flags = 0);
    237 };
    238 
    239 // ----------------------------------------------------------------------------
    240 
    241 }; // namespace android
    242 
    243 #endif // ANDROID_GUI_ISURFACE_COMPOSER_H
    244