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 #include <surfaceflinger/IGraphicBufferAlloc.h>
     32 
     33 namespace android {
     34 // ----------------------------------------------------------------------------
     35 
     36 class IMemoryHeap;
     37 class ComposerState;
     38 
     39 class ISurfaceComposer : public IInterface
     40 {
     41 public:
     42     DECLARE_META_INTERFACE(SurfaceComposer);
     43 
     44     enum { // (keep in sync with Surface.java)
     45         eHidden             = 0x00000004,
     46         eDestroyBackbuffer  = 0x00000020,
     47         eSecure             = 0x00000080,
     48         eNonPremultiplied   = 0x00000100,
     49         eOpaque             = 0x00000400,
     50         eProtectedByApp     = 0x00000800,
     51         eProtectedByDRM     = 0x00001000,
     52 
     53         eFXSurfaceNormal    = 0x00000000,
     54         eFXSurfaceBlur      = 0x00010000,
     55         eFXSurfaceDim       = 0x00020000,
     56         eFXSurfaceScreenshot= 0x00030000,
     57         eFXSurfaceMask      = 0x000F0000,
     58     };
     59 
     60     enum {
     61         ePositionChanged            = 0x00000001,
     62         eLayerChanged               = 0x00000002,
     63         eSizeChanged                = 0x00000004,
     64         eAlphaChanged               = 0x00000008,
     65         eMatrixChanged              = 0x00000010,
     66         eTransparentRegionChanged   = 0x00000020,
     67         eVisibilityChanged          = 0x00000040,
     68         eFreezeTintChanged          = 0x00000080,
     69     };
     70 
     71     enum {
     72         eLayerHidden        = 0x01,
     73         eLayerFrozen        = 0x02,
     74         eLayerDither        = 0x04,
     75         eLayerFilter        = 0x08,
     76         eLayerBlurFreeze    = 0x10
     77     };
     78 
     79     enum {
     80         eOrientationDefault     = 0,
     81         eOrientation90          = 1,
     82         eOrientation180         = 2,
     83         eOrientation270         = 3,
     84         eOrientationUnchanged   = 4,
     85         eOrientationSwapMask    = 0x01
     86     };
     87 
     88     enum {
     89         eSynchronous            = 0x01,
     90     };
     91 
     92     enum {
     93         eElectronBeamAnimationOn  = 0x01,
     94         eElectronBeamAnimationOff = 0x10
     95     };
     96 
     97     /* create connection with surface flinger, requires
     98      * ACCESS_SURFACE_FLINGER permission
     99      */
    100     virtual sp<ISurfaceComposerClient> createConnection() = 0;
    101 
    102     /* create a graphic buffer allocator
    103      */
    104     virtual sp<IGraphicBufferAlloc> createGraphicBufferAlloc() = 0;
    105 
    106     /* retrieve the control block */
    107     virtual sp<IMemoryHeap> getCblk() const = 0;
    108 
    109     /* open/close transactions. requires ACCESS_SURFACE_FLINGER permission */
    110     virtual void setTransactionState(const Vector<ComposerState>& state,
    111             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,
    125             uint32_t minLayerZ, uint32_t maxLayerZ) = 0;
    126 
    127     virtual status_t turnElectronBeamOff(int32_t mode) = 0;
    128     virtual status_t turnElectronBeamOn(int32_t mode) = 0;
    129 
    130     /* verify that an ISurfaceTexture was created by SurfaceFlinger.
    131      */
    132     virtual bool authenticateSurfaceTexture(
    133             const sp<ISurfaceTexture>& surface) const = 0;
    134 };
    135 
    136 // ----------------------------------------------------------------------------
    137 
    138 class BnSurfaceComposer : public BnInterface<ISurfaceComposer>
    139 {
    140 public:
    141     enum {
    142         // Note: BOOT_FINISHED must remain this value, it is called from
    143         // Java by ActivityManagerService.
    144         BOOT_FINISHED = IBinder::FIRST_CALL_TRANSACTION,
    145         CREATE_CONNECTION,
    146         CREATE_GRAPHIC_BUFFER_ALLOC,
    147         GET_CBLK,
    148         SET_TRANSACTION_STATE,
    149         SET_ORIENTATION,
    150         CAPTURE_SCREEN,
    151         TURN_ELECTRON_BEAM_OFF,
    152         TURN_ELECTRON_BEAM_ON,
    153         AUTHENTICATE_SURFACE,
    154     };
    155 
    156     virtual status_t    onTransact( uint32_t code,
    157                                     const Parcel& data,
    158                                     Parcel* reply,
    159                                     uint32_t flags = 0);
    160 };
    161 
    162 // ----------------------------------------------------------------------------
    163 
    164 }; // namespace android
    165 
    166 #endif // ANDROID_SF_ISURFACE_COMPOSER_H
    167