blob: 45d3720dba540568613c33b6b6039f5d2f3ec754 [file] [log] [blame]
Naseer Ahmed29a26812012-06-14 00:56:20 -07001/*
2* Copyright (c) 2012, Code Aurora Forum. All rights reserved.
3*
4* Redistribution and use in source and binary forms, with or without
5* modification, are permitted provided that the following conditions are
6* met:
7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above
10* copyright notice, this list of conditions and the following
11* disclaimer in the documentation and/or other materials provided
12* with the distribution.
13* * Neither the name of Code Aurora Forum, Inc. nor the names of its
14* contributors may be used to endorse or promote products derived
15* from this software without specific prior written permission.
16*
17* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
18* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
20* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
21* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
24* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
26* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28*/
29
30#include "overlayState.h"
31
32namespace overlay {
33
34/*
35 * Transition from any state to 2D video on 2D panel
36 */
37OverlayImplBase* OverlayState::handle_xxx_to_2D_2DPanel(
38 OverlayImplBase* ov)
39{
40 OVASSERT(ov, "%s: ov is null", __FUNCTION__);
41 ALOGE("%s", __FUNCTION__);
42
43 // Create new ovimpl based on new state
44 typedef StateTraits<utils::OV_2D_VIDEO_ON_PANEL> NewState;
45 OverlayImplBase* newov = new NewState::ovimpl;
46
47 //===========================================================
48 // For each pipe:
49 // - If pipe matches, copy from previous into new ovimpl
50 // - Otherwise open for new and delete from previous ovimpl
51 //===========================================================
52
53 // pipe0/rot0 (GenericPipe)
54 if (ov->getOvPipeType(utils::OV_PIPE0) == utils::OV_PIPE_TYPE_GENERIC) {
55 ALOGE_IF(DEBUG_OVERLAY, "%s: Copy pipe0 (GenericPipe)", __FUNCTION__);
56 newov->copyOvPipe(ov, utils::OV_PIPE0);
57 } else {
58 ALOGE_IF(DEBUG_OVERLAY, "%s: Open pipe0 (GenericPipe)", __FUNCTION__);
59 RotatorBase* rot0 = new NewState::rot0;
60 ov->closePipe(utils::OV_PIPE0);
61 newov->openPipe(rot0, utils::OV_PIPE0);
62 }
63
64 // pipe1/rot1 (NullPipe)
65 if (ov->getOvPipeType(utils::OV_PIPE1) == utils::OV_PIPE_TYPE_NULL) {
66 ALOGE_IF(DEBUG_OVERLAY, "%s: Copy pipe1 (NullPipe)", __FUNCTION__);
67 newov->copyOvPipe(ov, utils::OV_PIPE1);
68 } else {
69 ALOGE_IF(DEBUG_OVERLAY, "%s: Open pipe1 (NullPipe)", __FUNCTION__);
70 RotatorBase* rot1 = new NewState::rot1;
71 ov->closePipe(utils::OV_PIPE1);
72 newov->openPipe(rot1, utils::OV_PIPE1);
73 }
74
75 // pipe2/rot2 (NullPipe)
76 if (ov->getOvPipeType(utils::OV_PIPE2) == utils::OV_PIPE_TYPE_NULL) {
77 ALOGE_IF(DEBUG_OVERLAY, "%s: Copy pipe2 (NullPipe)", __FUNCTION__);
78 newov->copyOvPipe(ov, utils::OV_PIPE2);
79 } else {
80 ALOGE_IF(DEBUG_OVERLAY, "%s: Open pipe2 (NullPipe)", __FUNCTION__);
81 RotatorBase* rot2 = new NewState::rot2;
82 ov->closePipe(utils::OV_PIPE2);
83 newov->openPipe(rot2, utils::OV_PIPE2);
84 }
85
86 // All pipes are copied or deleted so no more need for previous ovimpl
87 delete ov;
88 ov = 0;
89
90 return newov;
91}
92
93/*
94 * Transition from any state to 2D video on 2D panel and 2D TV
95 */
96OverlayImplBase* OverlayState::handle_xxx_to_2D_2DTV(
97 OverlayImplBase* ov)
98{
99 OVASSERT(ov, "%s: ov is null", __FUNCTION__);
100 ALOGE("%s", __FUNCTION__);
101
102 // Create new ovimpl based on new state
103 typedef StateTraits<utils::OV_2D_VIDEO_ON_PANEL_TV> NewState;
104 OverlayImplBase* newov = new NewState::ovimpl;
105
106 //===========================================================
107 // For each pipe:
108 // - If pipe matches, copy from previous into new ovimpl
109 // - Otherwise open for new and delete from previous ovimpl
110 //===========================================================
111
112 // pipe0/rot0 (GenericPipe)
113 if (ov->getOvPipeType(utils::OV_PIPE0) == utils::OV_PIPE_TYPE_GENERIC) {
114 ALOGE_IF(DEBUG_OVERLAY, "%s: Copy pipe0 (GenericPipe)", __FUNCTION__);
115 newov->copyOvPipe(ov, utils::OV_PIPE0);
116 } else {
117 ALOGE_IF(DEBUG_OVERLAY, "%s: Open pipe0 (GenericPipe)", __FUNCTION__);
118 RotatorBase* rot0 = new NewState::rot0;
119 ov->closePipe(utils::OV_PIPE0);
120 newov->openPipe(rot0, utils::OV_PIPE0);
121 }
122
123 // pipe1/rot1 (HdmiPipe)
124 if (ov->getOvPipeType(utils::OV_PIPE1) == utils::OV_PIPE_TYPE_HDMI) {
125 ALOGE_IF(DEBUG_OVERLAY, "%s: Copy pipe1 (HdmiPipe)", __FUNCTION__);
126 newov->copyOvPipe(ov, utils::OV_PIPE1);
127 } else {
128 ALOGE_IF(DEBUG_OVERLAY, "%s: Open pipe1 (HdmiPipe)", __FUNCTION__);
129 RotatorBase* rot1 = new NewState::rot1;
130 ov->closePipe(utils::OV_PIPE1);
131 newov->openPipe(rot1, utils::OV_PIPE1);
132 }
133
134 // pipe2/rot2 (NullPipe)
135 if (ov->getOvPipeType(utils::OV_PIPE2) == utils::OV_PIPE_TYPE_NULL) {
136 ALOGE_IF(DEBUG_OVERLAY, "%s: Copy pipe2 (NullPipe)", __FUNCTION__);
137 newov->copyOvPipe(ov, utils::OV_PIPE2);
138 } else {
139 ALOGE_IF(DEBUG_OVERLAY, "%s: Open pipe2 (NullPipe)", __FUNCTION__);
140 RotatorBase* rot2 = new NewState::rot2;
141 ov->closePipe(utils::OV_PIPE2);
142 newov->openPipe(rot2, utils::OV_PIPE2);
143 }
144
145 // All pipes are copied or deleted so no more need for previous ovimpl
146 delete ov;
147 ov = 0;
148
149 return newov;
150}
151
152/*
153 * Transition from any state to 3D video on 2D panel
154 */
155OverlayImplBase* OverlayState::handle_xxx_to_3D_2DPanel(
156 OverlayImplBase* ov)
157{
158 OVASSERT(ov, "%s: ov is null", __FUNCTION__);
159 ALOGE("%s", __FUNCTION__);
160
161 // Create new ovimpl based on new state
162 typedef StateTraits<utils::OV_3D_VIDEO_ON_2D_PANEL> NewState;
163 OverlayImplBase* newov = new NewState::ovimpl;
164
165 //===========================================================
166 // For each pipe:
167 // - If pipe matches, copy from previous into new ovimpl
168 // - Otherwise open for new and delete from previous ovimpl
169 //===========================================================
170
171 // pipe0/rot0 (M3DPrimaryPipe)
172 if (ov->getOvPipeType(utils::OV_PIPE0) == utils::OV_PIPE_TYPE_M3D_PRIMARY) {
173 ALOGE_IF(DEBUG_OVERLAY, "%s: Copy pipe0 (M3DPrimaryPipe)", __FUNCTION__);
174 newov->copyOvPipe(ov, utils::OV_PIPE0);
175 } else {
176 ALOGE_IF(DEBUG_OVERLAY, "%s: Open pipe0 (M3DPrimaryPipe)", __FUNCTION__);
177 RotatorBase* rot0 = new NewState::rot0;
178 ov->closePipe(utils::OV_PIPE0);
179 newov->openPipe(rot0, utils::OV_PIPE0);
180 }
181
182 // pipe1/rot1 (NullPipe)
183 if (ov->getOvPipeType(utils::OV_PIPE1) == utils::OV_PIPE_TYPE_NULL) {
184 ALOGE_IF(DEBUG_OVERLAY, "%s: Copy pipe1 (NullPipe)", __FUNCTION__);
185 newov->copyOvPipe(ov, utils::OV_PIPE1);
186 } else {
187 ALOGE_IF(DEBUG_OVERLAY, "%s: Open pipe1 (NullPipe)", __FUNCTION__);
188 RotatorBase* rot1 = new NewState::rot1;
189 ov->closePipe(utils::OV_PIPE1);
190 newov->openPipe(rot1, utils::OV_PIPE1);
191 }
192
193 // pipe2/rot2 (NullPipe)
194 if (ov->getOvPipeType(utils::OV_PIPE2) == utils::OV_PIPE_TYPE_NULL) {
195 ALOGE_IF(DEBUG_OVERLAY, "%s: Copy pipe2 (NullPipe)", __FUNCTION__);
196 newov->copyOvPipe(ov, utils::OV_PIPE2);
197 } else {
198 ALOGE_IF(DEBUG_OVERLAY, "%s: Open pipe2 (NullPipe)", __FUNCTION__);
199 RotatorBase* rot2 = new NewState::rot2;
200 ov->closePipe(utils::OV_PIPE2);
201 newov->openPipe(rot2, utils::OV_PIPE2);
202 }
203
204 // All pipes are copied or deleted so no more need for previous ovimpl
205 delete ov;
206 ov = 0;
207
208 return newov;
209}
210
211/*
212 * Transition from any state to 3D video on 2D panel and 2D TV
213 */
214OverlayImplBase* OverlayState::handle_xxx_to_3D_2DTV(
215 OverlayImplBase* ov)
216{
217 OVASSERT(ov, "%s: ov is null", __FUNCTION__);
218 ALOGE("%s", __FUNCTION__);
219
220 // Create new ovimpl based on new state
221 typedef StateTraits<utils::OV_3D_VIDEO_ON_2D_PANEL_2D_TV> NewState;
222 OverlayImplBase* newov = new NewState::ovimpl;
223
224 //===========================================================
225 // For each pipe:
226 // - If pipe matches, copy from previous into new ovimpl
227 // - Otherwise open for new and delete from previous ovimpl
228 //===========================================================
229
230 // pipe0/rot0 (M3DPrimaryPipe)
231 if (ov->getOvPipeType(utils::OV_PIPE0) == utils::OV_PIPE_TYPE_M3D_PRIMARY) {
232 ALOGE_IF(DEBUG_OVERLAY, "%s: Copy pipe0 (M3DPrimaryPipe)", __FUNCTION__);
233 newov->copyOvPipe(ov, utils::OV_PIPE0);
234 } else {
235 ALOGE_IF(DEBUG_OVERLAY, "%s: Open pipe0 (M3DPrimaryPipe)", __FUNCTION__);
236 RotatorBase* rot0 = new NewState::rot0;
237 ov->closePipe(utils::OV_PIPE0);
238 newov->openPipe(rot0, utils::OV_PIPE0);
239 }
240
241 // pipe1/rot1 (M3DExtPipe)
242 if (ov->getOvPipeType(utils::OV_PIPE1) == utils::OV_PIPE_TYPE_M3D_EXTERNAL) {
243 ALOGE_IF(DEBUG_OVERLAY, "%s: Copy pipe1 (M3DExtPipe)", __FUNCTION__);
244 newov->copyOvPipe(ov, utils::OV_PIPE1);
245 } else {
246 ALOGE_IF(DEBUG_OVERLAY, "%s: Open pipe1 (M3DExtPipe)", __FUNCTION__);
247 RotatorBase* rot1 = new NewState::rot1;
248 ov->closePipe(utils::OV_PIPE1);
249 newov->openPipe(rot1, utils::OV_PIPE1);
250 }
251
252 // pipe2/rot2 (NullPipe)
253 if (ov->getOvPipeType(utils::OV_PIPE2) == utils::OV_PIPE_TYPE_NULL) {
254 ALOGE_IF(DEBUG_OVERLAY, "%s: Copy pipe2 (NullPipe)", __FUNCTION__);
255 newov->copyOvPipe(ov, utils::OV_PIPE2);
256 } else {
257 ALOGE_IF(DEBUG_OVERLAY, "%s: Open pipe2 (NullPipe)", __FUNCTION__);
258 RotatorBase* rot2 = new NewState::rot2;
259 ov->closePipe(utils::OV_PIPE2);
260 newov->openPipe(rot2, utils::OV_PIPE2);
261 }
262
263 // All pipes are copied or deleted so no more need for previous ovimpl
264 delete ov;
265 ov = 0;
266
267 return newov;
268}
269
270/*
271 * Transition from any state to 2D true UI mirroring (2D video + UI)
272 */
273OverlayImplBase* OverlayState::handle_xxx_to_2D_trueUI_Mirror(
274 OverlayImplBase* ov)
275{
276 OVASSERT(ov, "%s: ov is null", __FUNCTION__);
277 ALOGE("%s", __FUNCTION__);
278
279 // Create new ovimpl based on new state
280 typedef StateTraits<utils::OV_2D_TRUE_UI_MIRROR> NewState;
281 OverlayImplBase* newov = new NewState::ovimpl;
282
283 //===========================================================
284 // For each pipe:
285 // - If pipe matches, copy from previous into new ovimpl
286 // - Otherwise open for new and delete from previous ovimpl
287 //===========================================================
288
289 // pipe0/rot0 (GenericPipe)
290 if (ov->getOvPipeType(utils::OV_PIPE0) == utils::OV_PIPE_TYPE_GENERIC) {
291 ALOGE_IF(DEBUG_OVERLAY, "%s: Copy pipe0 (GenericPipe)", __FUNCTION__);
292 newov->copyOvPipe(ov, utils::OV_PIPE0);
293 } else {
294 ALOGE_IF(DEBUG_OVERLAY, "%s: Open pipe0 (GenericPipe)", __FUNCTION__);
295 RotatorBase* rot0 = new NewState::rot0;
296 ov->closePipe(utils::OV_PIPE0);
297 newov->openPipe(rot0, utils::OV_PIPE0);
298 }
299
300 // pipe1/rot1 (HdmiPipe)
301 if (ov->getOvPipeType(utils::OV_PIPE1) == utils::OV_PIPE_TYPE_HDMI) {
302 ALOGE_IF(DEBUG_OVERLAY, "%s: Copy pipe1 (HdmiPipe)", __FUNCTION__);
303 newov->copyOvPipe(ov, utils::OV_PIPE1);
304 } else {
305 ALOGE_IF(DEBUG_OVERLAY, "%s: Open pipe1 (HdmiPipe)", __FUNCTION__);
306 RotatorBase* rot1 = new NewState::rot1;
307 ov->closePipe(utils::OV_PIPE1);
308 newov->openPipe(rot1, utils::OV_PIPE1);
309 }
310
311 // pipe2/rot2 (UIMirrorPipe)
312 if (ov->getOvPipeType(utils::OV_PIPE2) == utils::OV_PIPE_TYPE_UI_MIRROR) {
313 ALOGE_IF(DEBUG_OVERLAY, "%s: Copy pipe2 (UIMirrorPipe)", __FUNCTION__);
314 newov->copyOvPipe(ov, utils::OV_PIPE2);
315 } else {
316 ALOGE_IF(DEBUG_OVERLAY, "%s: Open pipe2 (UIMirrorPipe)", __FUNCTION__);
317 RotatorBase* rot2 = new NewState::rot2;
318 ov->closePipe(utils::OV_PIPE2);
319 newov->openPipe(rot2, utils::OV_PIPE2);
320 }
321
322 // All pipes are copied or deleted so no more need for previous ovimpl
323 delete ov;
324 ov = 0;
325
326 return newov;
327}
328
329/*
330 * Transitions from any state to 1 layer composition bypass
331 */
332OverlayImplBase* OverlayState::handle_xxx_to_bypass1(OverlayImplBase* ov)
333{
334 OVASSERT(ov, "%s: ov is null", __FUNCTION__);
335 ALOGE("%s", __FUNCTION__);
336
337 // Create new ovimpl based on new state
338 typedef StateTraits<utils::OV_BYPASS_1_LAYER> NewState;
339 OverlayImplBase* newov = new NewState::ovimpl;
340
341 //===========================================================
342 // For each pipe:
343 // - If pipe matches, copy from previous into new ovimpl
344 // - Otherwise open for new and delete from previous ovimpl
345 //===========================================================
346
347 // pipe0/rot0 (BypassPipe)
348 if (ov->getOvPipeType(utils::OV_PIPE0) == utils::OV_PIPE_TYPE_BYPASS) {
349 ALOGE_IF(DEBUG_OVERLAY, "%s: Copy pipe0 (BypassPipe)", __FUNCTION__);
350 newov->copyOvPipe(ov, utils::OV_PIPE0);
351 } else {
352 ALOGE_IF(DEBUG_OVERLAY, "%s: Open pipe0 (BypassPipe)", __FUNCTION__);
353 RotatorBase* rot0 = new NewState::rot0;
354 ov->closePipe(utils::OV_PIPE0);
355 newov->openPipe(rot0, utils::OV_PIPE0);
356 }
357
358 // pipe1/rot1 (NullPipe)
359 if (ov->getOvPipeType(utils::OV_PIPE1) == utils::OV_PIPE_TYPE_NULL) {
360 ALOGE_IF(DEBUG_OVERLAY, "%s: Copy pipe1 (NullPipe)", __FUNCTION__);
361 newov->copyOvPipe(ov, utils::OV_PIPE1);
362 } else {
363 ALOGE_IF(DEBUG_OVERLAY, "%s: Open pipe1 (NullPipe)", __FUNCTION__);
364 RotatorBase* rot1 = new NewState::rot1;
365 ov->closePipe(utils::OV_PIPE1);
366 newov->openPipe(rot1, utils::OV_PIPE1);
367 }
368
369 // pipe2/rot2 (NullPipe)
370 if (ov->getOvPipeType(utils::OV_PIPE2) == utils::OV_PIPE_TYPE_NULL) {
371 ALOGE_IF(DEBUG_OVERLAY, "%s: Copy pipe2 (NullPipe)", __FUNCTION__);
372 newov->copyOvPipe(ov, utils::OV_PIPE2);
373 } else {
374 ALOGE_IF(DEBUG_OVERLAY, "%s: Open pipe2 (NullPipe)", __FUNCTION__);
375 RotatorBase* rot2 = new NewState::rot2;
376 ov->closePipe(utils::OV_PIPE2);
377 newov->openPipe(rot2, utils::OV_PIPE2);
378 }
379
380 // All pipes are copied or deleted so no more need for previous ovimpl
381 delete ov;
382 ov = 0;
383
384 return newov;
385}
386
387/*
388 * Transitions from any state to 2 layers composition bypass
389 */
390OverlayImplBase* OverlayState::handle_xxx_to_bypass2(OverlayImplBase* ov)
391{
392 OVASSERT(ov, "%s: ov is null", __FUNCTION__);
393 ALOGE("%s", __FUNCTION__);
394
395 // Create new ovimpl based on new state
396 typedef StateTraits<utils::OV_BYPASS_2_LAYER> NewState;
397 OverlayImplBase* newov = new NewState::ovimpl;
398
399 //===========================================================
400 // For each pipe:
401 // - If pipe matches, copy from previous into new ovimpl
402 // - Otherwise open for new and delete from previous ovimpl
403 //===========================================================
404
405 // pipe0/rot0 (BypassPipe)
406 if (ov->getOvPipeType(utils::OV_PIPE0) == utils::OV_PIPE_TYPE_BYPASS) {
407 ALOGE_IF(DEBUG_OVERLAY, "%s: Copy pipe0 (BypassPipe)", __FUNCTION__);
408 newov->copyOvPipe(ov, utils::OV_PIPE0);
409 } else {
410 ALOGE_IF(DEBUG_OVERLAY, "%s: Open pipe0 (BypassPipe)", __FUNCTION__);
411 RotatorBase* rot0 = new NewState::rot0;
412 ov->closePipe(utils::OV_PIPE0);
413 newov->openPipe(rot0, utils::OV_PIPE0);
414 }
415
416 // pipe1/rot1 (BypassPipe)
417 if (ov->getOvPipeType(utils::OV_PIPE1) == utils::OV_PIPE_TYPE_BYPASS) {
418 ALOGE_IF(DEBUG_OVERLAY, "%s: Copy pipe1 (BypassPipe)", __FUNCTION__);
419 newov->copyOvPipe(ov, utils::OV_PIPE1);
420 } else {
421 ALOGE_IF(DEBUG_OVERLAY, "%s: Open pipe1 (BypassPipe)", __FUNCTION__);
422 RotatorBase* rot1 = new NewState::rot1;
423 ov->closePipe(utils::OV_PIPE1);
424 newov->openPipe(rot1, utils::OV_PIPE1);
425 }
426
427 // pipe2/rot2 (NullPipe)
428 if (ov->getOvPipeType(utils::OV_PIPE2) == utils::OV_PIPE_TYPE_NULL) {
429 ALOGE_IF(DEBUG_OVERLAY, "%s: Copy pipe2 (NullPipe)", __FUNCTION__);
430 newov->copyOvPipe(ov, utils::OV_PIPE2);
431 } else {
432 ALOGE_IF(DEBUG_OVERLAY, "%s: Open pipe2 (NullPipe)", __FUNCTION__);
433 RotatorBase* rot2 = new NewState::rot2;
434 ov->closePipe(utils::OV_PIPE2);
435 newov->openPipe(rot2, utils::OV_PIPE2);
436 }
437
438 // All pipes are copied or deleted so no more need for previous ovimpl
439 delete ov;
440 ov = 0;
441
442 return newov;
443}
444
445/*
446 * Transitions from any state to 3 layers composition bypass
447 */
448OverlayImplBase* OverlayState::handle_xxx_to_bypass3(OverlayImplBase* ov)
449{
450 OVASSERT(ov, "%s: ov is null", __FUNCTION__);
451 ALOGE("%s", __FUNCTION__);
452
453 // Create new ovimpl based on new state
454 typedef StateTraits<utils::OV_BYPASS_3_LAYER> NewState;
455 OverlayImplBase* newov = new NewState::ovimpl;
456
457 //===========================================================
458 // For each pipe:
459 // - If pipe matches, copy from previous into new ovimpl
460 // - Otherwise open for new and delete from previous ovimpl
461 //===========================================================
462
463 // pipe0/rot0 (BypassPipe)
464 if (ov->getOvPipeType(utils::OV_PIPE0) == utils::OV_PIPE_TYPE_BYPASS) {
465 ALOGE_IF(DEBUG_OVERLAY, "%s: Copy pipe0 (BypassPipe)", __FUNCTION__);
466 newov->copyOvPipe(ov, utils::OV_PIPE0);
467 } else {
468 ALOGE_IF(DEBUG_OVERLAY, "%s: Open pipe0 (BypassPipe)", __FUNCTION__);
469 RotatorBase* rot0 = new NewState::rot0;
470 ov->closePipe(utils::OV_PIPE0);
471 newov->openPipe(rot0, utils::OV_PIPE0);
472 }
473
474 // pipe1/rot1 (BypassPipe)
475 if (ov->getOvPipeType(utils::OV_PIPE1) == utils::OV_PIPE_TYPE_BYPASS) {
476 ALOGE_IF(DEBUG_OVERLAY, "%s: Copy pipe1 (BypassPipe)", __FUNCTION__);
477 newov->copyOvPipe(ov, utils::OV_PIPE1);
478 } else {
479 ALOGE_IF(DEBUG_OVERLAY, "%s: Open pipe1 (BypassPipe)", __FUNCTION__);
480 RotatorBase* rot1 = new NewState::rot1;
481 ov->closePipe(utils::OV_PIPE1);
482 newov->openPipe(rot1, utils::OV_PIPE1);
483 }
484
485 // pipe2/rot2 (BypassPipe)
486 if (ov->getOvPipeType(utils::OV_PIPE2) == utils::OV_PIPE_TYPE_BYPASS) {
487 ALOGE_IF(DEBUG_OVERLAY, "%s: Copy pipe2 (BypassPipe)", __FUNCTION__);
488 newov->copyOvPipe(ov, utils::OV_PIPE2);
489 } else {
490 ALOGE_IF(DEBUG_OVERLAY, "%s: Open pipe2 (BypassPipe)", __FUNCTION__);
491 RotatorBase* rot2 = new NewState::rot2;
492 ov->closePipe(utils::OV_PIPE2);
493 newov->openPipe(rot2, utils::OV_PIPE2);
494 }
495
496 // All pipes are copied or deleted so no more need for previous ovimpl
497 delete ov;
498 ov = 0;
499
500 return newov;
501}
502
503} // overlay