Home | History | Annotate | Download | only in base
      1 /*
      2 // Copyright(c)2014 IntelCorporation
      3 //
      4 // LicensedundertheApacheLicense,Version2.0(the"License");
      5 // youmaynotusethisfileexceptincompliancewiththeLicense.
      6 // YoumayobtainacopyoftheLicenseat
      7 //
      8 // http://www.apache.org/licenses/LICENSE-2.0
      9 //
     10 // Unlessrequiredbyapplicablelaworagreedtoinwriting,software
     11 // distributedundertheLicenseisdistributedonan"ASIS"BASIS,
     12 // WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.
     13 // SeetheLicenseforthespecificlanguagegoverningpermissionsand
     14 // limitationsundertheLicense.
     15 */
     16 #ifndef HWC_LAYER_LIST_H
     17 #define HWC_LAYER_LIST_H
     18 
     19 #include <common/utils/Dump.h>
     20 #include <hardware/hwcomposer.h>
     21 #include <utils/SortedVector.h>
     22 #include <DataBuffer.h>
     23 #include <DisplayPlane.h>
     24 #include <DisplayPlaneManager.h>
     25 #include <common/base/HwcLayer.h>
     26 
     27 namespace android {
     28 namespace intel {
     29 
     30 
     31 class HwcLayerList {
     32 public:
     33     HwcLayerList(hwc_display_contents_1_t *list, int disp);
     34     virtual ~HwcLayerList();
     35 
     36 public:
     37     virtual bool initialize();
     38     virtual void deinitialize();
     39 
     40     virtual bool update(hwc_display_contents_1_t *list);
     41     virtual DisplayPlane* getPlane(uint32_t index) const;
     42 
     43     void postFlip();
     44 
     45     // dump interface
     46     virtual void dump(Dump& d);
     47 
     48 
     49 private:
     50     bool checkSupported(int planeType, HwcLayer *hwcLayer);
     51     bool checkRgbOverlaySupported(HwcLayer *hwcLayer);
     52     bool checkCursorSupported(HwcLayer *hwcLayer);
     53     bool allocatePlanes();
     54     bool assignCursorPlanes();
     55     bool assignCursorPlanes(int index, int planeNumber);
     56     bool assignOverlayPlanes();
     57     bool assignOverlayPlanes(int index, int planeNumber);
     58     bool assignSpritePlanes();
     59     bool assignSpritePlanes(int index, int planeNumber);
     60     bool assignPrimaryPlane();
     61     bool assignPrimaryPlaneHelper(HwcLayer *hwcLayer, int zorder = -1);
     62     bool attachPlanes();
     63     bool useAsFrameBufferTarget(HwcLayer *target);
     64     bool hasIntersection(HwcLayer *la, HwcLayer *lb);
     65     ZOrderLayer* addZOrderLayer(int type, HwcLayer *hwcLayer, int zorder = -1);
     66     void removeZOrderLayer(ZOrderLayer *layer);
     67     void setupSmartComposition();
     68     void dump();
     69 
     70 private:
     71     class HwcLayerVector : public SortedVector<HwcLayer*> {
     72     public:
     73         HwcLayerVector() {}
     74         virtual int do_compare(const void* lhs, const void* rhs) const {
     75             const HwcLayer* l = *(HwcLayer**)lhs;
     76             const HwcLayer* r = *(HwcLayer**)rhs;
     77             // sorted from index 0 to n
     78             return l->getIndex() - r->getIndex();
     79         }
     80     };
     81 
     82     class PriorityVector : public SortedVector<HwcLayer*> {
     83     public:
     84         PriorityVector() {}
     85         virtual int do_compare(const void* lhs, const void* rhs) const {
     86             const HwcLayer* l = *(HwcLayer**)lhs;
     87             const HwcLayer* r = *(HwcLayer**)rhs;
     88             return r->getPriority() - l->getPriority();
     89         }
     90     };
     91 
     92     hwc_display_contents_1_t *mList;
     93     int mLayerCount;
     94 
     95     HwcLayerVector mLayers;
     96     HwcLayerVector mFBLayers;
     97     PriorityVector mSpriteCandidates;
     98     PriorityVector mOverlayCandidates;
     99     PriorityVector mCursorCandidates;
    100     ZOrderConfig mZOrderConfig;
    101     HwcLayer *mFrameBufferTarget;
    102     int mDisplayIndex;
    103 };
    104 
    105 } // namespace intel
    106 } // namespace android
    107 
    108 
    109 #endif /* HWC_LAYER_LIST_H */
    110