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/ISurfaceFlingerClient.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     // flags for setOrientation
     81     enum {
     82         eOrientationAnimationDisable = 0x00000001
     83     };
     84 
     85     /* create connection with surface flinger, requires
     86      * ACCESS_SURFACE_FLINGER permission
     87      */
     88 
     89     virtual sp<ISurfaceFlingerClient> createConnection() = 0;
     90 
     91     /* retrieve the control block */
     92     virtual sp<IMemoryHeap> getCblk() const = 0;
     93 
     94     /* open/close transactions. requires ACCESS_SURFACE_FLINGER permission */
     95     virtual void openGlobalTransaction() = 0;
     96     virtual void closeGlobalTransaction() = 0;
     97 
     98     /* [un]freeze display. requires ACCESS_SURFACE_FLINGER permission */
     99     virtual status_t freezeDisplay(DisplayID dpy, uint32_t flags) = 0;
    100     virtual status_t unfreezeDisplay(DisplayID dpy, uint32_t flags) = 0;
    101 
    102     /* Set display orientation. requires ACCESS_SURFACE_FLINGER permission */
    103     virtual int setOrientation(DisplayID dpy, int orientation, 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     /* Signal surfaceflinger that there might be some work to do
    111      * This is an ASYNCHRONOUS call.
    112      */
    113     virtual void signal() const = 0;
    114 };
    115 
    116 // ----------------------------------------------------------------------------
    117 
    118 class BnSurfaceComposer : public BnInterface<ISurfaceComposer>
    119 {
    120 public:
    121     enum {
    122         // Note: BOOT_FINISHED must remain this value, it is called from
    123         // Java by ActivityManagerService.
    124         BOOT_FINISHED = IBinder::FIRST_CALL_TRANSACTION,
    125         CREATE_CONNECTION,
    126         GET_CBLK,
    127         OPEN_GLOBAL_TRANSACTION,
    128         CLOSE_GLOBAL_TRANSACTION,
    129         SET_ORIENTATION,
    130         FREEZE_DISPLAY,
    131         UNFREEZE_DISPLAY,
    132         SIGNAL
    133     };
    134 
    135     virtual status_t    onTransact( uint32_t code,
    136                                     const Parcel& data,
    137                                     Parcel* reply,
    138                                     uint32_t flags = 0);
    139 };
    140 
    141 // ----------------------------------------------------------------------------
    142 
    143 }; // namespace android
    144 
    145 #endif // ANDROID_SF_ISURFACE_COMPOSER_H
    146