blob: 2d657555a953050c03de4bcbfd052db6f4f5531a [file] [log] [blame]
Naseer Ahmed7c958d42012-07-31 18:57:03 -07001/*
Jeykumar Sankaranb551ce42013-01-10 16:26:48 -08002 * Copyright (C) 2012-2013, The Linux Foundation. All rights reserved.
3 *
Naseer Ahmed7c958d42012-07-31 18:57:03 -07004 * Not a Contribution, Apache license notifications and license are retained
5 * for attribution purposes only.
6 *
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 */
19
20#ifndef HWC_MDP_COMP
21#define HWC_MDP_COMP
22
23#include <hwc_utils.h>
24#include <idle_invalidator.h>
25#include <cutils/properties.h>
26#include <overlay.h>
27
Saurabh Shah45782902013-11-15 10:13:14 -080028#define DEFAULT_IDLE_TIME 70
Sushil Chauhan69f2bb22013-02-13 10:50:47 -080029#define MAX_PIPES_PER_MIXER 4
Naseer Ahmed7c958d42012-07-31 18:57:03 -070030
Saurabh Shahacf10202013-02-26 10:15:15 -080031namespace overlay {
Jeykumar Sankaran85977e32013-02-25 17:06:08 -080032class Rotator;
Saurabh Shahacf10202013-02-26 10:15:15 -080033};
34
Naseer Ahmed7c958d42012-07-31 18:57:03 -070035namespace qhwc {
Naseer Ahmed54821fe2012-11-28 18:44:38 -050036namespace ovutils = overlay::utils;
Naseer Ahmed7c958d42012-07-31 18:57:03 -070037
38class MDPComp {
Saurabh Shahcbf7ccc2012-12-19 16:45:51 -080039public:
Jeykumar Sankaran85977e32013-02-25 17:06:08 -080040 explicit MDPComp(int);
Jeykumar Sankaranb551ce42013-01-10 16:26:48 -080041 virtual ~MDPComp(){};
Saurabh Shahcbf7ccc2012-12-19 16:45:51 -080042 /*sets up mdp comp for the current frame */
Jeykumar Sankaran85977e32013-02-25 17:06:08 -080043 int prepare(hwc_context_t *ctx, hwc_display_contents_1_t* list);
Saurabh Shahcbf7ccc2012-12-19 16:45:51 -080044 /* draw */
45 virtual bool draw(hwc_context_t *ctx, hwc_display_contents_1_t *list) = 0;
Jeykumar Sankaran85977e32013-02-25 17:06:08 -080046 /* dumpsys */
Saurabh Shahcbf7ccc2012-12-19 16:45:51 -080047 void dump(android::String8& buf);
Ramkumar Radhakrishnan8bb48d32013-12-30 23:11:27 -080048 bool isGLESOnlyComp() { return (mCurrentFrame.mdpCount == 0); }
Saurabh Shah88e4d272013-09-03 13:31:29 -070049 static MDPComp* getObject(hwc_context_t *ctx, const int& dpy);
Saurabh Shahcbf7ccc2012-12-19 16:45:51 -080050 /* Handler to invoke frame redraw on Idle Timer expiry */
51 static void timeout_handler(void *udata);
Jeykumar Sankaran85977e32013-02-25 17:06:08 -080052 /* Initialize MDP comp*/
Saurabh Shahcbf7ccc2012-12-19 16:45:51 -080053 static bool init(hwc_context_t *ctx);
Saurabh Shah98acd092013-05-03 10:48:24 -070054 static void resetIdleFallBack() { sIdleFallBack = false; }
Saurabh Shahbe7bd322014-02-20 16:18:45 -080055 static void reset() { sHandleTimeout = false; };
Ramkumar Radhakrishnanfb822912014-03-14 17:28:14 -070056 static bool isIdleFallback() { return sIdleFallBack; }
Saurabh Shahcbf7ccc2012-12-19 16:45:51 -080057
58protected:
Saurabh Shahe9bc60f2013-08-29 12:58:06 -070059 enum { MAX_SEC_LAYERS = 1 }; //TODO add property support
60
Naseer Ahmed54821fe2012-11-28 18:44:38 -050061 enum ePipeType {
62 MDPCOMP_OV_RGB = ovutils::OV_MDP_PIPE_RGB,
63 MDPCOMP_OV_VG = ovutils::OV_MDP_PIPE_VG,
Jeykumar Sankaranb551ce42013-01-10 16:26:48 -080064 MDPCOMP_OV_DMA = ovutils::OV_MDP_PIPE_DMA,
Naseer Ahmed54821fe2012-11-28 18:44:38 -050065 MDPCOMP_OV_ANY,
Naseer Ahmed7c958d42012-07-31 18:57:03 -070066 };
Jeykumar Sankaran85977e32013-02-25 17:06:08 -080067
68 /* mdp pipe data */
Jeykumar Sankaranb551ce42013-01-10 16:26:48 -080069 struct MdpPipeInfo {
70 int zOrder;
71 virtual ~MdpPipeInfo(){};
72 };
Jeykumar Sankaran85977e32013-02-25 17:06:08 -080073
radhakrishnac9a67412013-09-25 17:40:42 +053074 struct MdpYUVPipeInfo : public MdpPipeInfo{
75 ovutils::eDest lIndex;
76 ovutils::eDest rIndex;
77 virtual ~MdpYUVPipeInfo(){};
78 };
79
Jeykumar Sankaran85977e32013-02-25 17:06:08 -080080 /* per layer data */
Jeykumar Sankaranb551ce42013-01-10 16:26:48 -080081 struct PipeLayerPair {
82 MdpPipeInfo *pipeInfo;
Saurabh Shahacf10202013-02-26 10:15:15 -080083 overlay::Rotator* rot;
Jeykumar Sankaran85977e32013-02-25 17:06:08 -080084 int listIndex;
Jeykumar Sankaranb551ce42013-01-10 16:26:48 -080085 };
86
Jeykumar Sankaran85977e32013-02-25 17:06:08 -080087 /* per frame data */
Jeykumar Sankaranb551ce42013-01-10 16:26:48 -080088 struct FrameInfo {
Jeykumar Sankaran85977e32013-02-25 17:06:08 -080089 /* maps layer list to mdp list */
90 int layerCount;
Ramkumar Radhakrishnane661f962013-06-05 17:21:38 -070091 int layerToMDP[MAX_NUM_APP_LAYERS];
Jeykumar Sankaran85977e32013-02-25 17:06:08 -080092
93 /* maps mdp list to layer list */
94 int mdpCount;
95 struct PipeLayerPair mdpToLayer[MAX_PIPES_PER_MIXER];
96
97 /* layer composing on FB? */
98 int fbCount;
Ramkumar Radhakrishnane661f962013-06-05 17:21:38 -070099 bool isFBComposed[MAX_NUM_APP_LAYERS];
Jeykumar Sankaran6a9bb9e2013-08-01 14:19:26 -0700100 /* layers lying outside ROI. Will
101 * be dropped off from the composition */
102 int dropCount;
103 bool drop[MAX_NUM_APP_LAYERS];
Jeykumar Sankaran85977e32013-02-25 17:06:08 -0800104
105 bool needsRedraw;
106 int fbZ;
107
108 /* c'tor */
109 FrameInfo();
110 /* clear old frame data */
Saurabh Shahaa236822013-04-24 18:07:26 -0700111 void reset(const int& numLayers);
112 void map();
Jeykumar Sankaranb551ce42013-01-10 16:26:48 -0800113 };
114
Jeykumar Sankaran85977e32013-02-25 17:06:08 -0800115 /* cached data */
116 struct LayerCache {
117 int layerCount;
Ramkumar Radhakrishnane661f962013-06-05 17:21:38 -0700118 buffer_handle_t hnd[MAX_NUM_APP_LAYERS];
Prabhanjan Kandula2243aa62013-10-24 12:58:55 +0530119 bool isFBComposed[MAX_NUM_APP_LAYERS];
120 bool drop[MAX_NUM_APP_LAYERS];
Jeykumar Sankaran85977e32013-02-25 17:06:08 -0800121
122 /* c'tor */
123 LayerCache();
124 /* clear caching info*/
125 void reset();
Saurabh Shahaa236822013-04-24 18:07:26 -0700126 void cacheAll(hwc_display_contents_1_t* list);
127 void updateCounts(const FrameInfo&);
Jeykumar Sankaran988d3682013-11-15 11:57:16 -0800128 bool isSameFrame(const FrameInfo& curFrame,
129 hwc_display_contents_1_t* list);
Jeykumar Sankaran85977e32013-02-25 17:06:08 -0800130 };
131
Jeykumar Sankaranb551ce42013-01-10 16:26:48 -0800132 /* allocates pipe from pipe book */
133 virtual bool allocLayerPipes(hwc_context_t *ctx,
Jeykumar Sankaran85977e32013-02-25 17:06:08 -0800134 hwc_display_contents_1_t* list) = 0;
Saurabh Shahaf5f5972013-07-30 13:56:35 -0700135 /* allocate MDP pipes from overlay */
136 ovutils::eDest getMdpPipe(hwc_context_t *ctx, ePipeType type, int mixer);
Jeykumar Sankaranb551ce42013-01-10 16:26:48 -0800137 /* configures MPD pipes */
138 virtual int configure(hwc_context_t *ctx, hwc_layer_1_t *layer,
Jeykumar Sankaran85977e32013-02-25 17:06:08 -0800139 PipeLayerPair& pipeLayerPair) = 0;
Saurabh Shah3d4b8042013-12-10 15:19:17 -0800140 /* Increments mdpCount if 4k2k yuv layer split is enabled.
141 * updates framebuffer z order if fb lies above source-split layer */
142 virtual void adjustForSourceSplit(hwc_context_t *ctx,
radhakrishnac9a67412013-09-25 17:40:42 +0530143 hwc_display_contents_1_t* list) = 0;
144 /* configures 4kx2k yuv layer*/
145 virtual int configure4k2kYuv(hwc_context_t *ctx, hwc_layer_1_t *layer,
146 PipeLayerPair& PipeLayerPair) = 0;
Saurabh Shahcbf7ccc2012-12-19 16:45:51 -0800147 /* set/reset flags for MDPComp */
148 void setMDPCompLayerFlags(hwc_context_t *ctx,
Jeykumar Sankaran85977e32013-02-25 17:06:08 -0800149 hwc_display_contents_1_t* list);
Saurabh Shahdf4741d2013-12-12 16:40:28 -0800150 void setRedraw(hwc_context_t *ctx,
151 hwc_display_contents_1_t* list);
Jeykumar Sankaranb551ce42013-01-10 16:26:48 -0800152 /* checks for conditions where mdpcomp is not possible */
Jeykumar Sankaran85977e32013-02-25 17:06:08 -0800153 bool isFrameDoable(hwc_context_t *ctx);
154 /* checks for conditions where RGB layers cannot be bypassed */
Saurabh Shahdf4741d2013-12-12 16:40:28 -0800155 bool tryFullFrame(hwc_context_t *ctx, hwc_display_contents_1_t* list);
Saurabh Shahaa236822013-04-24 18:07:26 -0700156 /* checks if full MDP comp can be done */
157 bool fullMDPComp(hwc_context_t *ctx, hwc_display_contents_1_t* list);
158 /* check if we can use layer cache to do at least partial MDP comp */
159 bool partialMDPComp(hwc_context_t *ctx, hwc_display_contents_1_t* list);
Saurabh Shah8028e3b2013-10-15 12:27:59 -0700160 /* Partial MDP comp that uses caching to save power as primary goal */
161 bool cacheBasedComp(hwc_context_t *ctx, hwc_display_contents_1_t* list);
Saurabh Shahbe7bd322014-02-20 16:18:45 -0800162 /* Partial MDP comp that balances the load between MDP and GPU such that
163 * MDP is loaded to the max of its capacity. The lower z order layers are
164 * fed to MDP, whereas the upper ones to GPU, because the upper ones have
165 * lower number of pixels and can reduce GPU processing time */
166 bool loadBasedComp(hwc_context_t *ctx, hwc_display_contents_1_t* list);
Saurabh Shah8028e3b2013-10-15 12:27:59 -0700167 /* Checks if its worth doing load based partial comp */
Arun Kumar K.R2aa44c62014-01-21 23:08:28 -0800168 bool isLoadBasedCompDoable(hwc_context_t *ctx);
Saurabh Shahaa236822013-04-24 18:07:26 -0700169 /* checks for conditions where only video can be bypassed */
Saurabh Shahdf4741d2013-12-12 16:40:28 -0800170 bool tryVideoOnly(hwc_context_t *ctx, hwc_display_contents_1_t* list);
171 bool videoOnlyComp(hwc_context_t *ctx, hwc_display_contents_1_t* list,
Saurabh Shah90b7b9b2013-09-12 16:36:08 -0700172 bool secureOnly);
Jeykumar Sankaran85977e32013-02-25 17:06:08 -0800173 /* checks for conditions where YUV layers cannot be bypassed */
174 bool isYUVDoable(hwc_context_t* ctx, hwc_layer_1_t* layer);
Prabhanjan Kandula21918db2013-11-26 15:51:58 +0530175 /* checks if MDP/MDSS can process current list w.r.to HW limitations
176 * All peculiar HW limitations should go here */
177 bool hwLimitationsCheck(hwc_context_t* ctx, hwc_display_contents_1_t* list);
Jeykumar Sankaran6a9bb9e2013-08-01 14:19:26 -0700178 /* generates ROI based on the modified area of the frame */
179 void generateROI(hwc_context_t *ctx, hwc_display_contents_1_t* list);
180 bool validateAndApplyROI(hwc_context_t *ctx, hwc_display_contents_1_t* list,
181 hwc_rect_t roi);
Jeykumar Sankaran85977e32013-02-25 17:06:08 -0800182
Saurabh Shahcbf7ccc2012-12-19 16:45:51 -0800183 /* Is debug enabled */
184 static bool isDebug() { return sDebugLogs ? true : false; };
185 /* Is feature enabled */
186 static bool isEnabled() { return sEnabled; };
Sravan Kumar D.V.Nad5d9292013-04-24 14:23:04 +0530187 /* checks for mdp comp dimension limitation */
188 bool isValidDimension(hwc_context_t *ctx, hwc_layer_1_t *layer);
Jeykumar Sankaran85977e32013-02-25 17:06:08 -0800189 /* tracks non updating layers*/
190 void updateLayerCache(hwc_context_t* ctx, hwc_display_contents_1_t* list);
Jeykumar Sankaran85977e32013-02-25 17:06:08 -0800191 /* optimize layers for mdp comp*/
Prabhanjan Kandula9bd5f642013-09-25 17:00:36 +0530192 bool markLayersForCaching(hwc_context_t* ctx,
193 hwc_display_contents_1_t* list);
194 int getBatch(hwc_display_contents_1_t* list,
195 int& maxBatchStart, int& maxBatchEnd,
196 int& maxBatchCount);
197 bool canPushBatchToTop(const hwc_display_contents_1_t* list,
198 int fromIndex, int toIndex);
199 bool intersectingUpdatingLayers(const hwc_display_contents_1_t* list,
200 int fromIndex, int toIndex, int targetLayerIndex);
201
202 /* updates cache map with YUV info */
Saurabh Shah90b7b9b2013-09-12 16:36:08 -0700203 void updateYUV(hwc_context_t* ctx, hwc_display_contents_1_t* list,
204 bool secureOnly);
Saurabh Shahdf4741d2013-12-12 16:40:28 -0800205 /* Validates if the GPU/MDP layer split chosen by a strategy is supported
206 * by MDP.
207 * Sets up MDP comp data structures to reflect covnversion from layers to
208 * overlay pipes.
209 * Configures overlay.
210 * Configures if GPU should redraw.
211 */
212 bool postHeuristicsHandling(hwc_context_t *ctx,
213 hwc_display_contents_1_t* list);
214 void reset(hwc_context_t *ctx);
Saurabh Shahe9bc60f2013-08-29 12:58:06 -0700215 bool isSupportedForMDPComp(hwc_context_t *ctx, hwc_layer_1_t* layer);
Saurabh Shah173f4242013-11-20 09:50:12 -0800216 bool resourceCheck(hwc_context_t *ctx, hwc_display_contents_1_t *list);
Jeykumar Sankaranc2d78d82014-02-14 14:55:29 -0800217 hwc_rect_t getUpdatingFBRect(hwc_context_t *ctx,
218 hwc_display_contents_1_t* list);
Saurabh Shahcbf7ccc2012-12-19 16:45:51 -0800219
Jeykumar Sankaran85977e32013-02-25 17:06:08 -0800220 int mDpy;
Saurabh Shahcbf7ccc2012-12-19 16:45:51 -0800221 static bool sEnabled;
Jeykumar Sankaran24c199d2013-05-24 09:40:36 -0700222 static bool sEnableMixedMode;
Jeykumar Sankaran6a9bb9e2013-08-01 14:19:26 -0700223 /* Enables Partial frame composition */
224 static bool sEnablePartialFrameUpdate;
Saurabh Shahcbf7ccc2012-12-19 16:45:51 -0800225 static bool sDebugLogs;
226 static bool sIdleFallBack;
Ramkumar Radhakrishnan92abb4f2014-02-06 21:31:29 -0800227 /* Handles the timeout event from kernel, if the value is set to true */
228 static bool sHandleTimeout;
Jeykumar Sankaran85977e32013-02-25 17:06:08 -0800229 static int sMaxPipesPerMixer;
Manoj Kumar AVM8cbbf7c2014-03-11 01:15:31 -0700230 static bool sSrcSplitEnabled;
Saurabh Shahcbf7ccc2012-12-19 16:45:51 -0800231 static IdleInvalidator *idleInvalidator;
Jeykumar Sankaranb551ce42013-01-10 16:26:48 -0800232 struct FrameInfo mCurrentFrame;
Jeykumar Sankaran85977e32013-02-25 17:06:08 -0800233 struct LayerCache mCachedFrame;
radhakrishnac9a67412013-09-25 17:40:42 +0530234 //Enable 4kx2k yuv layer split
235 static bool sEnable4k2kYUVSplit;
Arun Kumar K.R2aa44c62014-01-21 23:08:28 -0800236 bool allocSplitVGPipesfor4k2k(hwc_context_t *ctx, int index);
Saurabh Shahcbf7ccc2012-12-19 16:45:51 -0800237};
238
Saurabh Shah88e4d272013-09-03 13:31:29 -0700239class MDPCompNonSplit : public MDPComp {
Saurabh Shahcbf7ccc2012-12-19 16:45:51 -0800240public:
Saurabh Shah88e4d272013-09-03 13:31:29 -0700241 explicit MDPCompNonSplit(int dpy):MDPComp(dpy){};
242 virtual ~MDPCompNonSplit(){};
Jeykumar Sankaran85977e32013-02-25 17:06:08 -0800243 virtual bool draw(hwc_context_t *ctx, hwc_display_contents_1_t *list);
Saurabh Shahcbf7ccc2012-12-19 16:45:51 -0800244
245private:
Saurabh Shah88e4d272013-09-03 13:31:29 -0700246 struct MdpPipeInfoNonSplit : public MdpPipeInfo {
Jeykumar Sankaranb551ce42013-01-10 16:26:48 -0800247 ovutils::eDest index;
Saurabh Shah88e4d272013-09-03 13:31:29 -0700248 virtual ~MdpPipeInfoNonSplit() {};
Naseer Ahmed7c958d42012-07-31 18:57:03 -0700249 };
250
Naseer Ahmed7c958d42012-07-31 18:57:03 -0700251 /* configure's overlay pipes for the frame */
Jeykumar Sankaranb551ce42013-01-10 16:26:48 -0800252 virtual int configure(hwc_context_t *ctx, hwc_layer_1_t *layer,
Jeykumar Sankaran85977e32013-02-25 17:06:08 -0800253 PipeLayerPair& pipeLayerPair);
Jeykumar Sankaranb551ce42013-01-10 16:26:48 -0800254
Naseer Ahmed7c958d42012-07-31 18:57:03 -0700255 /* allocates pipes to selected candidates */
Jeykumar Sankaranb551ce42013-01-10 16:26:48 -0800256 virtual bool allocLayerPipes(hwc_context_t *ctx,
Jeykumar Sankaran85977e32013-02-25 17:06:08 -0800257 hwc_display_contents_1_t* list);
Saurabh Shahcbf7ccc2012-12-19 16:45:51 -0800258
Saurabh Shah3d4b8042013-12-10 15:19:17 -0800259 /* Increments mdpCount if 4k2k yuv layer split is enabled.
260 * updates framebuffer z order if fb lies above source-split layer */
261 virtual void adjustForSourceSplit(hwc_context_t *ctx,
Arun Kumar K.R2aa44c62014-01-21 23:08:28 -0800262 hwc_display_contents_1_t* list);
radhakrishnac9a67412013-09-25 17:40:42 +0530263
264 /* configures 4kx2k yuv layer to 2 VG pipes*/
265 virtual int configure4k2kYuv(hwc_context_t *ctx, hwc_layer_1_t *layer,
266 PipeLayerPair& PipeLayerPair);
Naseer Ahmed7c958d42012-07-31 18:57:03 -0700267};
Saurabh Shahcbf7ccc2012-12-19 16:45:51 -0800268
Saurabh Shah88e4d272013-09-03 13:31:29 -0700269class MDPCompSplit : public MDPComp {
Saurabh Shahcbf7ccc2012-12-19 16:45:51 -0800270public:
Saurabh Shah88e4d272013-09-03 13:31:29 -0700271 explicit MDPCompSplit(int dpy):MDPComp(dpy){};
272 virtual ~MDPCompSplit(){};
Jeykumar Sankaranb551ce42013-01-10 16:26:48 -0800273 virtual bool draw(hwc_context_t *ctx, hwc_display_contents_1_t *list);
Saurabh Shahab47c692014-02-12 18:45:57 -0800274
275protected:
Saurabh Shah88e4d272013-09-03 13:31:29 -0700276 struct MdpPipeInfoSplit : public MdpPipeInfo {
Jeykumar Sankaranb551ce42013-01-10 16:26:48 -0800277 ovutils::eDest lIndex;
278 ovutils::eDest rIndex;
Saurabh Shah88e4d272013-09-03 13:31:29 -0700279 virtual ~MdpPipeInfoSplit() {};
Jeykumar Sankaranb551ce42013-01-10 16:26:48 -0800280 };
Saurabh Shahcbf7ccc2012-12-19 16:45:51 -0800281
Saurabh Shahab47c692014-02-12 18:45:57 -0800282 virtual bool acquireMDPPipes(hwc_context_t *ctx, hwc_layer_1_t* layer,
Saurabh Shah88e4d272013-09-03 13:31:29 -0700283 MdpPipeInfoSplit& pipe_info, ePipeType type);
Jeykumar Sankaranb551ce42013-01-10 16:26:48 -0800284
285 /* configure's overlay pipes for the frame */
286 virtual int configure(hwc_context_t *ctx, hwc_layer_1_t *layer,
Jeykumar Sankaran85977e32013-02-25 17:06:08 -0800287 PipeLayerPair& pipeLayerPair);
Jeykumar Sankaranb551ce42013-01-10 16:26:48 -0800288
289 /* allocates pipes to selected candidates */
290 virtual bool allocLayerPipes(hwc_context_t *ctx,
Jeykumar Sankaran85977e32013-02-25 17:06:08 -0800291 hwc_display_contents_1_t* list);
Jeykumar Sankaranb551ce42013-01-10 16:26:48 -0800292
Saurabh Shahab47c692014-02-12 18:45:57 -0800293private:
Saurabh Shah3d4b8042013-12-10 15:19:17 -0800294 /* Increments mdpCount if 4k2k yuv layer split is enabled.
295 * updates framebuffer z order if fb lies above source-split layer */
296 virtual void adjustForSourceSplit(hwc_context_t *ctx,
radhakrishnac9a67412013-09-25 17:40:42 +0530297 hwc_display_contents_1_t* list);
298
299 /* configures 4kx2k yuv layer*/
300 virtual int configure4k2kYuv(hwc_context_t *ctx, hwc_layer_1_t *layer,
301 PipeLayerPair& PipeLayerPair);
Jeykumar Sankaranb551ce42013-01-10 16:26:48 -0800302};
Saurabh Shah2a4eb1b2013-07-22 16:33:23 -0700303
Saurabh Shahab47c692014-02-12 18:45:57 -0800304class MDPCompSrcSplit : public MDPCompSplit {
305public:
306 explicit MDPCompSrcSplit(int dpy) : MDPCompSplit(dpy){};
307 virtual ~MDPCompSrcSplit(){};
308private:
309 virtual bool acquireMDPPipes(hwc_context_t *ctx, hwc_layer_1_t* layer,
310 MdpPipeInfoSplit& pipe_info, ePipeType type);
311
312 virtual bool allocLayerPipes(hwc_context_t *ctx,
313 hwc_display_contents_1_t* list);
314
315 virtual int configure(hwc_context_t *ctx, hwc_layer_1_t *layer,
316 PipeLayerPair& pipeLayerPair);
317};
318
Naseer Ahmed7c958d42012-07-31 18:57:03 -0700319}; //namespace
320#endif