Home | History | Annotate | Download | only in surfaceflinger
      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_SF_ISURFACE_COMPOSER_H
     18 #define ANDROID_SF_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 
     26 #include <binder/IInterface.h>
     27 
     28 #include <ui/PixelFormat.h>
     29 
     30 #include <surfaceflinger/ISurfaceComposerClient.h>
     31 
     32 namespace android {
     33 // ----------------------------------------------------------------------------
     34 
     35 class ISurfaceComposer : public IInterface
     36 {
     37 public:
     38     DECLARE_META_INTERFACE(SurfaceComposer);
     39 
     40     enum { // (keep in sync with Surface.java)
     41         eHidden             = 0x00000004,
     42         eDestroyBackbuffer  = 0x00000020,
     43         eSecure             = 0x00000080,
     44         eNonPremultiplied   = 0x00000100,
     45         ePushBuffers        = 0x00000200,
     46 
     47         eFXSurfaceNormal    = 0x00000000,
     48         eFXSurfaceBlur      = 0x00010000,
     49         eFXSurfaceDim       = 0x00020000,
     50         eFXSurfaceMask      = 0x000F0000,
     51     };
     52 
     53     enum {
     54         ePositionChanged            = 0x00000001,
     55         eLayerChanged               = 0x00000002,
     56         eSizeChanged                = 0x00000004,
     57         eAlphaChanged               = 0x00000008,
     58         eMatrixChanged              = 0x00000010,
     59         eTransparentRegionChanged   = 0x00000020,
     60         eVisibilityChanged          = 0x00000040,
     61         eFreezeTintChanged          = 0x00000080,
     62     };
     63 
     64     enum {
     65         eLayerHidden        = 0x01,
     66         eLayerFrozen        = 0x02,
     67         eLayerDither        = 0x04,
     68         eLayerFilter        = 0x08,
     69         eLayerBlurFreeze    = 0x10
     70     };
     71 
     72     enum {
     73         eOrientationDefault     = 0,
     74         eOrientation90          = 1,
     75         eOrientation180         = 2,
     76         eOrientation270         = 3,
     77         eOrientationSwapMask    = 0x01
     78     };
     79 
     80     enum {
     81         eElectronBeamAnimationOn  = 0x01,
     82         eElectronBeamAnimationOff = 0x10
     83     };
     84 
     85     // flags for setOrientation
     86     enum {
     87         eOrientationAnimationDisable = 0x00000001
     88     };
     89 
     90     /* create connection with surface flinger, requires
     91      * ACCESS_SURFACE_FLINGER permission
     92      */
     93     virtual sp<ISurfaceComposerClient> createConnection() = 0;
     94 
     95     /* create a client connection with surface flinger
     96      */
     97     virtual sp<ISurfaceComposerClient> createClientConnection() = 0;
     98 
     99     /* retrieve the control block */
    100     virtual sp<IMemoryHeap> getCblk() const = 0;
    101 
    102     /* open/close transactions. requires ACCESS_SURFACE_FLINGER permission */
    103     virtual void openGlobalTransaction() = 0;
    104     virtual void closeGlobalTransaction() = 0;
    105 
    106     /* [un]freeze display. requires ACCESS_SURFACE_FLINGER permission */
    107     virtual status_t freezeDisplay(DisplayID dpy, uint32_t flags) = 0;
    108     virtual status_t unfreezeDisplay(DisplayID dpy, uint32_t flags) = 0;
    109 
    110     /* Set display orientation. requires ACCESS_SURFACE_FLINGER permission */
    111     virtual int setOrientation(DisplayID dpy, int orientation, uint32_t flags) = 0;
    112 
    113     /* signal that we're done booting.
    114      * Requires ACCESS_SURFACE_FLINGER permission
    115      */
    116     virtual void bootFinished() = 0;
    117 
    118     /* Capture the specified screen. requires READ_FRAME_BUFFER permission
    119      * This function will fail if there is a secure window on screen.
    120      */
    121     virtual status_t captureScreen(DisplayID dpy,
    122             sp<IMemoryHeap>* heap,
    123             uint32_t* width, uint32_t* height, PixelFormat* format,
    124             uint32_t reqWidth, uint32_t reqHeight) = 0;
    125 
    126     virtual status_t turnElectronBeamOff(int32_t mode) = 0;
    127     virtual status_t turnElectronBeamOn(int32_t mode) = 0;
    128 
    129     /* Signal surfaceflinger that there might be some work to do
    130      * This is an ASYNCHRONOUS call.
    131      */
    132     virtual void signal() const = 0;
    133 };
    134 
    135 // ----------------------------------------------------------------------------
    136 
    137 class BnSurfaceComposer : public BnInterface<ISurfaceComposer>
    138 {
    139 public:
    140     enum {
    141         // Note: BOOT_FINISHED must remain this value, it is called from
    142         // Java by ActivityManagerService.
    143         BOOT_FINISHED = IBinder::FIRST_CALL_TRANSACTION,
    144         CREATE_CONNECTION,
    145         CREATE_CLIENT_CONNECTION,
    146         GET_CBLK,
    147         OPEN_GLOBAL_TRANSACTION,
    148         CLOSE_GLOBAL_TRANSACTION,
    149         SET_ORIENTATION,
    150         FREEZE_DISPLAY,
    151         UNFREEZE_DISPLAY,
    152         SIGNAL,
    153         CAPTURE_SCREEN,
    154         TURN_ELECTRON_BEAM_OFF,
    155         TURN_ELECTRON_BEAM_ON
    156     };
    157 
    158     virtual status_t    onTransact( uint32_t code,
    159                                     const Parcel& data,
    160                                     Parcel* reply,
    161                                     uint32_t flags = 0);
    162 };
    163 
    164 // ----------------------------------------------------------------------------
    165 
    166 }; // namespace android
    167 
    168 #endif // ANDROID_SF_ISURFACE_COMPOSER_H
    169