• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 // Copyright (c) 2014 Intel Corporation 
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 #ifndef HWC_LAYER_LIST_H
17 #define HWC_LAYER_LIST_H
18 
19 #include <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 <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 private:
49     bool checkSupported(int planeType, HwcLayer *hwcLayer);
50     bool checkCursorSupported(HwcLayer *hwcLayer);
51     bool allocatePlanes();
52     bool assignCursorPlanes();
53     bool assignCursorPlanes(int index, int planeNumber);
54     bool assignOverlayPlanes();
55     bool assignOverlayPlanes(int index, int planeNumber);
56     bool assignSpritePlanes();
57     bool assignSpritePlanes(int index, int planeNumber);
58     bool assignPrimaryPlane();
59     bool assignPrimaryPlaneHelper(HwcLayer *hwcLayer, int zorder = -1);
60     bool attachPlanes();
61     bool useAsFrameBufferTarget(HwcLayer *target);
62     bool hasIntersection(HwcLayer *la, HwcLayer *lb);
63     void addStaticLayerSize(HwcLayer *hwcLayer);
64     bool checkStaticLayerSize();
65     ZOrderLayer* addZOrderLayer(int type, HwcLayer *hwcLayer, int zorder = -1);
66     void removeZOrderLayer(ZOrderLayer *layer);
67     void setupSmartComposition();
68     bool setupSmartComposition2();
69     void dump();
70 
71 private:
72     class HwcLayerVector : public SortedVector<HwcLayer*> {
73     public:
HwcLayerVector()74         HwcLayerVector() {}
do_compare(const void * lhs,const void * rhs)75         virtual int do_compare(const void* lhs, const void* rhs) const {
76             const HwcLayer* l = *(HwcLayer**)lhs;
77             const HwcLayer* r = *(HwcLayer**)rhs;
78             // sorted from index 0 to n
79             return l->getIndex() - r->getIndex();
80         }
81     };
82 
83     class PriorityVector : public SortedVector<HwcLayer*> {
84     public:
PriorityVector()85         PriorityVector() {}
do_compare(const void * lhs,const void * rhs)86         virtual int do_compare(const void* lhs, const void* rhs) const {
87             const HwcLayer* l = *(HwcLayer**)lhs;
88             const HwcLayer* r = *(HwcLayer**)rhs;
89             return r->getPriority() - l->getPriority();
90         }
91     };
92 
93     hwc_display_contents_1_t *mList;
94     int mLayerCount;
95 
96     HwcLayerVector mLayers;
97     HwcLayerVector mFBLayers;
98     Vector<int> mStaticLayersIndex;
99     PriorityVector mSpriteCandidates;
100     PriorityVector mOverlayCandidates;
101     PriorityVector mCursorCandidates;
102     ZOrderConfig mZOrderConfig;
103     HwcLayer *mFrameBufferTarget;
104     int mDisplayIndex;
105     int mLayerSize;
106 };
107 
108 } // namespace intel
109 } // namespace android
110 
111 
112 #endif /* HWC_LAYER_LIST_H */
113