overlayState.h revision c4d034f4b8d12953632907d30c0b78856d829579
129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* 229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* Copyright (c) 2011-2012, Code Aurora Forum. All rights reserved. 329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* 429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* Redistribution and use in source and binary forms, with or without 529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* modification, are permitted provided that the following conditions are 629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* met: 729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* * Redistributions of source code must retain the above copyright 829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* notice, this list of conditions and the following disclaimer. 929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* * Redistributions in binary form must reproduce the above 1029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* copyright notice, this list of conditions and the following 1129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* disclaimer in the documentation and/or other materials provided 1229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* with the distribution. 1329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* * Neither the name of Code Aurora Forum, Inc. nor the names of its 1429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* contributors may be used to endorse or promote products derived 1529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* from this software without specific prior written permission. 1629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* 1729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 1829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 1929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 2029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 2129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 2429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 2529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 2629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 2729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed*/ 2929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 3029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#ifndef OVERLAY_STATE_H 3129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#define OVERLAY_STATE_H 3229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 3329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include "overlayUtils.h" 3429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include "overlayImpl.h" 3529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include "overlayRotator.h" 3629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include "pipes/overlayGenPipe.h" 37f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed#include "pipes/overlayVideoExtPipe.h" 3829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include "pipes/overlayUIMirrorPipe.h" 3929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include "pipes/overlay3DPipe.h" 4029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 4129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmednamespace overlay { 4229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 4329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* 4429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* Used by Overlay class. Invokes each event 4529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed* */ 4629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 4729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedclass OverlayState : utils::NoCopy { 4829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedpublic: 492cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed /*ctor*/ 5029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed explicit OverlayState(); 5129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 522cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed /*dtor*/ 5329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ~OverlayState(); 5429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 5529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* return current state */ 5629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed utils::eOverlayState state() const; 5729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 5829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* Hard reset to a new state. If the state is the same 5929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * as the current one, it would be a no-op */ 6029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed OverlayImplBase* reset(utils::eOverlayState s); 6129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 6229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* Caller pass the state to the handleEvent function. 6329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * The input is the current OverlayImplBase*, and output is 6429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * a pointer to (possibly new) instance of OverlayImplBase 6529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * The eFormat can be 2D/3D etc. */ 6629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed OverlayImplBase* handleEvent(utils::eOverlayState s, 6729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed OverlayImplBase* ov); 6829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 692cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed /* Dump */ 702cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed void dump() const; 7129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 722cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmedprivate: 7329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 742cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed /* Transitions from a state to a state. Default behavior is to move from an 752cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed * old state to CLOSED and from CLOSED to a new state. Any impl wishing to 762cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed * copy pipes should specialize this call */ 772cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed template<utils::eOverlayState FROM_STATE, utils::eOverlayState TO_STATE> 782cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed OverlayImplBase* handle_from_to(OverlayImplBase* ov); 7929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 802cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed /* Just a convenient intermediate function to bring down the number of 812cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed * combinations arising from multiple states */ 822cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed template<utils::eOverlayState FROM_STATE> 832cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed OverlayImplBase* handle_from(utils::eOverlayState toState, 842cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed OverlayImplBase* ov); 8529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 862cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed /* Substitues for partially specialized templated handle functions since the 872cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed * standard doesn't allow partial specialization of functions */ 882cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed template<utils::eOverlayState FROM_STATE> 892cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed OverlayImplBase* handle_xxx_to_CLOSED(OverlayImplBase* ov); 9029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 912cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed template<utils::eOverlayState TO_STATE> 922cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed OverlayImplBase* handle_CLOSED_to_xxx(OverlayImplBase* ov); 9329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 9429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed /* States here */ 9529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed utils::eOverlayState mState; 9629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 9729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 9829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed//------------------------State Traits -------------------------- 9929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 10029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed// primary has nothing 10129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedtemplate <int STATE> struct StateTraits {}; 10229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 10329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* 10429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * For 3D_xxx we need channel ID besides the FBx since 10529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * get crop/position 3D need that to determine pos/crop 10629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * info. 10729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * */ 10829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 10929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedtemplate <> struct StateTraits<utils::OV_2D_VIDEO_ON_PANEL> 11029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed{ 1112cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed typedef overlay::GenericPipe<utils::PRIMARY> pipe0; //prim video 11229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef overlay::NullPipe pipe1; // place holder 11329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef overlay::NullPipe pipe2; // place holder 11429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 11529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef Rotator rot0; 11629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef NullRotator rot1; 11729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef NullRotator rot2; 11829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 1192cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed typedef overlay::OverlayImpl<pipe0, pipe1, pipe2> ovimpl; 12029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 12129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 12229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedtemplate <> struct StateTraits<utils::OV_2D_VIDEO_ON_PANEL_TV> 12329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed{ 1242cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed typedef overlay::GenericPipe<utils::PRIMARY> pipe0; //prim video 1252cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed typedef overlay::VideoExtPipe pipe1; //ext video 1262cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed typedef overlay::GenericPipe<utils::EXTERNAL> pipe2; //ext subtitle 12729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 12829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef Rotator rot0; 129f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed typedef Rotator rot1; 13029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef NullRotator rot2; 13129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 1322cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed typedef overlay::OverlayImpl<pipe0, pipe1, pipe2> ovimpl; 1332cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed}; 1342cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed 1352cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmedtemplate <> struct StateTraits<utils::OV_2D_VIDEO_ON_TV> 1362cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed{ 1372cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed typedef overlay::NullPipe pipe0; //nothing on primary with mdp 1382cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed typedef overlay::VideoExtPipe pipe1; //ext video 1392cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed typedef overlay::GenericPipe<utils::EXTERNAL> pipe2; //ext subtitle 1402cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed 1412cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed typedef NullRotator rot0; 1422cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed typedef Rotator rot1; 1432cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed typedef NullRotator rot2; 1442cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed 1452cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed typedef overlay::OverlayImpl<pipe0, pipe1, pipe2> ovimpl; 14629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 14729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 148c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shahtemplate <> struct StateTraits<utils::OV_UI_VIDEO_TV> 149c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah{ 150c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah typedef overlay::GenericPipe<utils::EXTERNAL> pipe0; //ext UI 151c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah typedef overlay::GenericPipe<utils::EXTERNAL> pipe1; //ext video 152c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah typedef overlay::NullPipe pipe2; 153c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah 154c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah typedef Rotator rot0; 155c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah typedef Rotator rot1; 156c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah typedef NullRotator rot2; 157c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah 158c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah typedef overlay::OverlayImpl<pipe0, pipe1, pipe2> ovimpl; 159c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah}; 160c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah 16129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedtemplate <> struct StateTraits<utils::OV_3D_VIDEO_ON_2D_PANEL> 16229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed{ 16329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef overlay::M3DPrimaryPipe<utils::OV_PIPE0> pipe0; 16429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef overlay::NullPipe pipe1; // place holder 16529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef overlay::NullPipe pipe2; // place holder 16629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 16729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef Rotator rot0; 16829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef NullRotator rot1; 16929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef NullRotator rot2; 17029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 17129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef overlay::OverlayImpl<pipe0> ovimpl; 17229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 17329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 17429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedtemplate <> struct StateTraits<utils::OV_3D_VIDEO_ON_3D_PANEL> 17529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed{ 17629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef overlay::S3DPrimaryPipe<utils::OV_PIPE0> pipe0; 17729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef overlay::S3DPrimaryPipe<utils::OV_PIPE1> pipe1; 17829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef overlay::NullPipe pipe2; // place holder 17929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 18029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef Rotator rot0; 18129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef Rotator rot1; 18229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef NullRotator rot2; 18329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 18429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef overlay::OverlayImpl<pipe0, pipe1> ovimpl; 18529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 18629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 18729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedtemplate <> struct StateTraits<utils::OV_3D_VIDEO_ON_3D_TV> 18829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed{ 18929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef overlay::S3DExtPipe<utils::OV_PIPE0> pipe0; 19029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef overlay::S3DExtPipe<utils::OV_PIPE1> pipe1; 19129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef overlay::NullPipe pipe2; // place holder 19229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 19329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef NullRotator rot0; 19429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef NullRotator rot1; 19529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef NullRotator rot2; 19629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 19729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef overlay::OverlayImpl<pipe0, pipe1> ovimpl; 19829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 19929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 20029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedtemplate <> struct StateTraits<utils::OV_3D_VIDEO_ON_2D_PANEL_2D_TV> 20129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed{ 20229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef overlay::M3DPrimaryPipe<utils::OV_PIPE0> pipe0; 20329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef overlay::M3DExtPipe<utils::OV_PIPE1> pipe1; 20429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef overlay::NullPipe pipe2; // place holder 20529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 20629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef Rotator rot0; 20729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef NullRotator rot1; 20829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef NullRotator rot2; 20929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 21029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef overlay::OverlayImpl<pipe0, pipe1> ovimpl; 21129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 21229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 21329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedtemplate <> struct StateTraits<utils::OV_UI_MIRROR> 21429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed{ 215c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah typedef overlay::GenericPipe<ovutils::EXTERNAL> pipe0; //Ext UI 21629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef overlay::NullPipe pipe1; // place holder 21729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef overlay::NullPipe pipe2; // place holder 21829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 21929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef Rotator rot0; 22029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef NullRotator rot1; 22129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef NullRotator rot2; 22229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 2232cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed typedef overlay::OverlayImpl<pipe0, pipe1, pipe2> ovimpl; 22429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 22529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 22629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedtemplate <> struct StateTraits<utils::OV_2D_TRUE_UI_MIRROR> 22729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed{ 228c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah typedef overlay::GenericPipe<utils::PRIMARY> pipe0; //Vid prim 229f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed typedef overlay::VideoExtPipe pipe1; 230c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah typedef overlay::GenericPipe<ovutils::EXTERNAL> pipe2; //EXT UI 23129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 23229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef Rotator rot0; 233f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed typedef Rotator rot1; 23429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef Rotator rot2; 23529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 23629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef overlay::OverlayImpl<pipe0, pipe1, pipe2> ovimpl; 23729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 23829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 23929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedtemplate <> struct StateTraits<utils::OV_BYPASS_1_LAYER> 24029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed{ 241f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed typedef overlay::GenericPipe<utils::PRIMARY> pipe0; 24229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef overlay::NullPipe pipe1; // place holder 24329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef overlay::NullPipe pipe2; // place holder 24429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 24529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef NullRotator rot0; 24629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef NullRotator rot1; 24729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef NullRotator rot2; 24829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 2492cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed typedef overlay::OverlayImpl<pipe0, pipe1, pipe2> ovimpl; 25029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 25129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 25229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedtemplate <> struct StateTraits<utils::OV_BYPASS_2_LAYER> 25329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed{ 254f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed typedef overlay::GenericPipe<utils::PRIMARY> pipe0; 255f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed typedef overlay::GenericPipe<utils::PRIMARY> pipe1; 25629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef overlay::NullPipe pipe2; // place holder 25729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 25829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef NullRotator rot0; 25929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef NullRotator rot1; 26029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef NullRotator rot2; 26129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 2622cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed typedef overlay::OverlayImpl<pipe0, pipe1, pipe2> ovimpl; 26329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 26429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 26529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedtemplate <> struct StateTraits<utils::OV_BYPASS_3_LAYER> 26629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed{ 267f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed typedef overlay::GenericPipe<utils::PRIMARY> pipe0; 268f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed typedef overlay::GenericPipe<utils::PRIMARY> pipe1; 269f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed typedef overlay::GenericPipe<utils::PRIMARY> pipe2; 27029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 27129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef NullRotator rot0; 27229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef NullRotator rot1; 27329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef NullRotator rot2; 27429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 27529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed typedef overlay::OverlayImpl<pipe0, pipe1, pipe2> ovimpl; 27629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 27729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 2782cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmedtemplate <> struct StateTraits<utils::OV_DUAL_DISP> 2792cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed{ 2802cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed typedef overlay::GenericPipe<utils::EXTERNAL> pipe0; 2814c588a200c537224d4eb5f63fb0a88f791511ff2Naseer Ahmed typedef overlay::NullPipe pipe1; 2822cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed typedef overlay::NullPipe pipe2; 28329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 2842cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed typedef NullRotator rot0; 2852cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed typedef NullRotator rot1; 2862cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed typedef NullRotator rot2; 28729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 2882cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed typedef overlay::OverlayImpl<pipe0, pipe1, pipe2> ovimpl; 2892cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed}; 29029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 29129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 2922cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed//------------------------Inlines -------------------------------- 29329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 2942cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed 2952cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmedinline OverlayState::OverlayState() : mState(utils::OV_CLOSED){} 2962cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmedinline OverlayState::~OverlayState() {} 2972cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmedinline utils::eOverlayState OverlayState::state() const { return mState; } 2982cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmedinline OverlayImplBase* OverlayState::reset(utils::eOverlayState s) { 29929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return handleEvent(s, 0); 30029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 3012cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmedinline void OverlayState::dump() const { 30229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed ALOGE("== Dump state %d start/end ==", mState); 30329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 30429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 3052cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmedinline OverlayImplBase* OverlayState::handleEvent(utils::eOverlayState toState, 30629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed OverlayImplBase* ov) 30729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed{ 30829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed OverlayImplBase* newov = ov; // at least, we return the same 3092cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed if (mState != toState) { 3102cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ALOGD_IF(DEBUG_OVERLAY, "%s: state changed %s-->%s", 3112cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed __FUNCTION__, getStateString(mState), getStateString(toState)); 31229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } else { 3132cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ALOGD_IF(DEBUG_OVERLAY, "%s: no state change, state=%s", 3142cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed __FUNCTION__, getStateString(toState)); 31529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return newov; 31629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 31729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 31829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed switch(mState) 31929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed { 32029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case utils::OV_CLOSED: 3212cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed newov = handle_from<utils::OV_CLOSED>(toState, ov); 32229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed break; 32329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case utils::OV_2D_VIDEO_ON_PANEL: 3242cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed newov = handle_from<utils::OV_2D_VIDEO_ON_PANEL>(toState, ov); 32529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed break; 32629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case utils::OV_2D_VIDEO_ON_PANEL_TV: 3272cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed newov = handle_from<utils::OV_2D_VIDEO_ON_PANEL_TV>(toState, ov); 32829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed break; 3292cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed case utils::OV_2D_VIDEO_ON_TV: 3302cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed newov = handle_from<utils::OV_2D_VIDEO_ON_TV>(toState, ov); 33129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed break; 33229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case utils::OV_3D_VIDEO_ON_2D_PANEL: 3332cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed newov = handle_from<utils::OV_3D_VIDEO_ON_2D_PANEL>(toState, ov); 33429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed break; 33529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case utils::OV_3D_VIDEO_ON_3D_PANEL: 3362cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed newov = handle_from<utils::OV_3D_VIDEO_ON_3D_PANEL>(toState, ov); 33729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed break; 33829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case utils::OV_3D_VIDEO_ON_3D_TV: 3392cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed newov = handle_from<utils::OV_3D_VIDEO_ON_3D_TV>(toState, ov); 34029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed break; 34129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case utils::OV_3D_VIDEO_ON_2D_PANEL_2D_TV: 3422cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed newov = handle_from<utils::OV_3D_VIDEO_ON_2D_PANEL_2D_TV>(toState, 3432cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ov); 34429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed break; 34529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case utils::OV_UI_MIRROR: 3462cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed newov = handle_from<utils::OV_UI_MIRROR>(toState, ov); 34729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed break; 34829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case utils::OV_2D_TRUE_UI_MIRROR: 3492cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed newov = handle_from<utils::OV_2D_TRUE_UI_MIRROR>(toState, ov); 35029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed break; 351c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah case utils::OV_UI_VIDEO_TV: 352c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah newov = handle_from<utils::OV_UI_VIDEO_TV>(toState, ov); 353c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah break; 35429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case utils::OV_BYPASS_1_LAYER: 3552cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed newov = handle_from<utils::OV_BYPASS_1_LAYER>(toState, ov); 35629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed break; 35729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case utils::OV_BYPASS_2_LAYER: 3582cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed newov = handle_from<utils::OV_BYPASS_2_LAYER>(toState, ov); 35929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed break; 36029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case utils::OV_BYPASS_3_LAYER: 3612cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed newov = handle_from<utils::OV_BYPASS_3_LAYER>(toState, ov); 36229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed break; 3632cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed case utils::OV_DUAL_DISP: 3642cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed newov = handle_from<utils::OV_DUAL_DISP>(toState, ov); 36529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed break; 36629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed default: 3672cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed OVASSERT(1 == 0, "%s: unknown state = %d", __FUNCTION__, mState); 3682cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed 36929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 37029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return newov; 37129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 37229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 3732cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmedtemplate <utils::eOverlayState FROM_STATE> 3742cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmedinline OverlayImplBase* OverlayState::handle_from(utils::eOverlayState toState, 3752cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed OverlayImplBase* ov) { 3762cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed 3772cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed switch(toState) 37829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed { 37929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case utils::OV_CLOSED: 3802cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ov = handle_xxx_to_CLOSED<FROM_STATE>(ov); 38129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed break; 38229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case utils::OV_2D_VIDEO_ON_PANEL: 3832cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ov = handle_from_to<FROM_STATE, utils::OV_2D_VIDEO_ON_PANEL>(ov); 38429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed break; 38529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case utils::OV_2D_VIDEO_ON_PANEL_TV: 3862cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ov = handle_from_to<FROM_STATE, utils::OV_2D_VIDEO_ON_PANEL_TV>(ov); 3872cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed break; 3882cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed case utils::OV_2D_VIDEO_ON_TV: 3892cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ov = handle_from_to<FROM_STATE, utils::OV_2D_VIDEO_ON_TV>(ov); 39029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed break; 39129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case utils::OV_3D_VIDEO_ON_2D_PANEL: 3922cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ov = handle_from_to<FROM_STATE, utils::OV_3D_VIDEO_ON_2D_PANEL>(ov); 39329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed break; 39429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case utils::OV_3D_VIDEO_ON_3D_PANEL: 3952cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ov = handle_from_to<FROM_STATE, utils::OV_3D_VIDEO_ON_3D_PANEL>(ov); 39629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed break; 39729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case utils::OV_3D_VIDEO_ON_3D_TV: 3982cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ov = handle_from_to<FROM_STATE, utils::OV_3D_VIDEO_ON_3D_TV>(ov); 39929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed break; 40029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case utils::OV_3D_VIDEO_ON_2D_PANEL_2D_TV: 4012cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ov = handle_from_to<FROM_STATE, 4022cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed utils::OV_3D_VIDEO_ON_2D_PANEL_2D_TV>(ov); 40329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed break; 40429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case utils::OV_UI_MIRROR: 4052cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ov = handle_from_to<FROM_STATE, utils::OV_UI_MIRROR>(ov); 40629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed break; 40729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case utils::OV_2D_TRUE_UI_MIRROR: 4082cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ov = handle_from_to<FROM_STATE, utils::OV_2D_TRUE_UI_MIRROR>(ov); 40929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed break; 410c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah case utils::OV_UI_VIDEO_TV: 411c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah ov = handle_from_to<FROM_STATE, utils::OV_UI_VIDEO_TV>(ov); 412c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah break; 41329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case utils::OV_BYPASS_1_LAYER: 4142cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ov = handle_from_to<FROM_STATE, utils::OV_BYPASS_1_LAYER>(ov); 41529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed break; 41629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case utils::OV_BYPASS_2_LAYER: 4172cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ov = handle_from_to<FROM_STATE, utils::OV_BYPASS_2_LAYER>(ov); 41829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed break; 41929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed case utils::OV_BYPASS_3_LAYER: 4202cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ov = handle_from_to<FROM_STATE, utils::OV_BYPASS_3_LAYER>(ov); 4212cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed break; 4222cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed case utils::OV_DUAL_DISP: 4232cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ov = handle_from_to<FROM_STATE, utils::OV_DUAL_DISP>(ov); 42429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed break; 42529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed default: 4262cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed OVASSERT(1 == 0, "%s: unknown state = %d", __FUNCTION__, toState); 42729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 4282cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed mState = toState; 4292cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed return ov; 43029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 43129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 4322cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed 4332cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed/* Transition default from any to any. Does in two steps. 4342cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed * Moves from OLD to CLOSED and then from CLOSED to NEW 4352cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed */ 4362cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmedtemplate<utils::eOverlayState FROM_STATE, utils::eOverlayState TO_STATE> 4372cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmedinline OverlayImplBase* OverlayState::handle_from_to(OverlayImplBase* ov) { 4382cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed handle_xxx_to_CLOSED<FROM_STATE>(ov); 4392cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed return handle_CLOSED_to_xxx<TO_STATE>(ov); 44029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 44129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 4422cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed//---------------Specializations------------- 4432cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed 4442cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed 4452cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed/* Transition from CLOSED to ANY */ 4462cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmedtemplate<utils::eOverlayState TO_STATE> 4472cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmedinline OverlayImplBase* OverlayState::handle_CLOSED_to_xxx( 4482cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed OverlayImplBase* /*ignored*/) { 4492cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed //If going from CLOSED to CLOSED, nothing to do. 4502cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed if(TO_STATE == utils::OV_CLOSED) return NULL; 4512cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ALOGD("FROM_STATE = %s TO_STATE = %s", 4522cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed utils::getStateString(utils::OV_CLOSED), 4532cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed utils::getStateString(TO_STATE)); 4542cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed OverlayImplBase* ov = new typename StateTraits<TO_STATE>::ovimpl; 4552cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed RotatorBase* rot0 = new typename StateTraits<TO_STATE>::rot0; 4562cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed RotatorBase* rot1 = new typename StateTraits<TO_STATE>::rot1; 4572cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed RotatorBase* rot2 = new typename StateTraits<TO_STATE>::rot2; 4582cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed if(!ov->init(rot0, rot1, rot2)) { 4592cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ALOGE("Overlay failed to init in state %d", TO_STATE); 4602cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed return 0; 46129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 4622cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed return ov; 46329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 46429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 4652cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed/* Transition from ANY to CLOSED */ 4662cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmedtemplate<utils::eOverlayState FROM_STATE> 4672cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmedinline OverlayImplBase* OverlayState::handle_xxx_to_CLOSED(OverlayImplBase* ov) 46829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed{ 4692cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed //If going from CLOSED to CLOSED, nothing to do. 4702cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed if(FROM_STATE == utils::OV_CLOSED) return NULL; 4712cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ALOGD("FROM_STATE = %s TO_STATE = %s", 4722cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed utils::getStateString(FROM_STATE), 4732cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed utils::getStateString(utils::OV_CLOSED)); 4742cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed OVASSERT(ov, "%s: ov is null", __FUNCTION__); 4752cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed if(!ov->close()) { 4762cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ALOGE("%s: Failed to ov close", __FUNCTION__); 47729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed } 4782cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed delete ov; 4792cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ov = 0; 4802cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed return 0; 48129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 48229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 4832cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed/* Transition from 2D_VIDEO_ON_PANEL to 2D_VIDEO_ON_PANEL_TV */ 4842cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmedtemplate<> 4852cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmedinline OverlayImplBase* OverlayState::handle_from_to< 4862cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed utils::OV_2D_VIDEO_ON_PANEL, 4872cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed utils::OV_2D_VIDEO_ON_PANEL_TV>( 4882cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed OverlayImplBase* ov) { 4892cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed OVASSERT(ov, "%s: ov is null", __FUNCTION__); 4902cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ALOGD("FROM_STATE = %s TO_STATE = %s", 4912cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed utils::getStateString(utils::OV_2D_VIDEO_ON_PANEL), 4922cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed utils::getStateString(utils::OV_2D_VIDEO_ON_PANEL_TV)); 4932cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed // Create new ovimpl based on new state 4942cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed typedef StateTraits<utils::OV_2D_VIDEO_ON_PANEL_TV> NewState; 4952cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed OverlayImplBase* newov = new NewState::ovimpl; 4962cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed 4972cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed //copy pipe0/rot0 (primary video) 4982cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed newov->copyOvPipe(ov, utils::OV_PIPE0); 4992cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed //close old pipe1, create new pipe1 5002cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ov->closePipe(utils::OV_PIPE1); 5012cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed RotatorBase* rot1 = new NewState::rot1; 5022cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed newov->initPipe(rot1, utils::OV_PIPE1); 5032cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed //close old pipe2, create new pipe2 5042cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ov->closePipe(utils::OV_PIPE2); 5052cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed RotatorBase* rot2 = new NewState::rot2; 5062cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed newov->initPipe(rot2, utils::OV_PIPE2); 5072cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed // All pipes are copied or deleted so no more need for previous ovimpl 5082cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed delete ov; 5092cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ov = 0; 51029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return newov; 51129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 51229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 5132cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed/* Transition from 2D_VIDEO_ON_PANEL_TV to 2D_VIDEO_ON_PANEL */ 5142cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmedtemplate<> 5152cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmedinline OverlayImplBase* OverlayState::handle_from_to< 5162cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed utils::OV_2D_VIDEO_ON_PANEL_TV, 5172cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed utils::OV_2D_VIDEO_ON_PANEL>( 5182cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed OverlayImplBase* ov) { 5192cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed OVASSERT(ov, "%s: ov is null", __FUNCTION__); 5202cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ALOGD("FROM_STATE = %s TO_STATE = %s", 5212cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed utils::getStateString(utils::OV_2D_VIDEO_ON_PANEL_TV), 5222cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed utils::getStateString(utils::OV_2D_VIDEO_ON_PANEL)); 5232cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed 5242cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed // Create new ovimpl based on new state 5252cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed typedef StateTraits<utils::OV_2D_VIDEO_ON_PANEL> NewState; 5262cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed OverlayImplBase* newov = new NewState::ovimpl; 5272cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed 5282cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed //copy pipe0/rot0 (primary video) 5292cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed newov->copyOvPipe(ov, utils::OV_PIPE0); 5302cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed //close old pipe1, create new pipe1 5312cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ov->closePipe(utils::OV_PIPE1); 5322cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed RotatorBase* rot1 = new NewState::rot1; 5332cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed newov->initPipe(rot1, utils::OV_PIPE1); 5342cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed //close old pipe2, create new pipe2 5352cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ov->closePipe(utils::OV_PIPE2); 5362cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed RotatorBase* rot2 = new NewState::rot2; 5372cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed newov->initPipe(rot2, utils::OV_PIPE2); 5382cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed // All pipes are copied or deleted so no more need for previous ovimpl 5392cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed delete ov; 5402cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ov = 0; 54129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return newov; 54229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 54329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 5442cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed/* Transition from 2D_VIDEO_ON_PANEL_TV to 2D_VIDEO_ON_TV */ 5452cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmedtemplate<> 5462cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmedinline OverlayImplBase* OverlayState::handle_from_to< 5472cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed utils::OV_2D_VIDEO_ON_PANEL_TV, 5482cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed utils::OV_2D_VIDEO_ON_TV>( 5492cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed OverlayImplBase* ov) { 5502cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed OVASSERT(ov, "%s: ov is null", __FUNCTION__); 5512cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ALOGD("FROM_STATE = %s TO_STATE = %s", 5522cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed utils::getStateString(utils::OV_2D_VIDEO_ON_PANEL_TV), 5532cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed utils::getStateString(utils::OV_2D_VIDEO_ON_TV)); 5542cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed 5552cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed // Create new ovimpl based on new state 5562cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed typedef StateTraits<utils::OV_2D_VIDEO_ON_TV> NewState; 5572cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed OverlayImplBase* newov = new NewState::ovimpl; 5582cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed 5592cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed //close old pipe0, create new pipe0 5602cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ov->closePipe(utils::OV_PIPE0); 5612cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed RotatorBase* rot0 = new NewState::rot0; 5622cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed newov->initPipe(rot0, utils::OV_PIPE0); 5632cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed //copy pipe1/rot1 (ext video) 5642cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed newov->copyOvPipe(ov, utils::OV_PIPE1); 5652cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed //copy pipe2/rot2 (ext cc) 5662cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed newov->copyOvPipe(ov, utils::OV_PIPE2); 5672cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed // All pipes are copied or deleted so no more need for previous ovimpl 5682cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed delete ov; 5692cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ov = 0; 57029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return newov; 57129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 57229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 5732cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed/* Transition from 2D_VIDEO_ON_TV to 2D_VIDEO_ON_PANEL_TV */ 5742cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmedtemplate<> 5752cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmedinline OverlayImplBase* OverlayState::handle_from_to< 5762cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed utils::OV_2D_VIDEO_ON_TV, 5772cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed utils::OV_2D_VIDEO_ON_PANEL_TV>( 5782cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed OverlayImplBase* ov) { 5792cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed OVASSERT(ov, "%s: ov is null", __FUNCTION__); 5802cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ALOGD("FROM_STATE = %s TO_STATE = %s", 5812cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed utils::getStateString(utils::OV_2D_VIDEO_ON_TV), 5822cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed utils::getStateString(utils::OV_2D_VIDEO_ON_PANEL_TV)); 5832cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed 5842cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed // Create new ovimpl based on new state 5852cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed typedef StateTraits<utils::OV_2D_VIDEO_ON_PANEL_TV> NewState; 5862cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed OverlayImplBase* newov = new NewState::ovimpl; 5872cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed 5882cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed //close old pipe0, create new pipe0 5892cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ov->closePipe(utils::OV_PIPE0); 5902cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed RotatorBase* rot0 = new NewState::rot0; 5912cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed newov->initPipe(rot0, utils::OV_PIPE0); 5922cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed //copy pipe1/rot1 (ext video) 5932cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed newov->copyOvPipe(ov, utils::OV_PIPE1); 5942cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed //copy pipe2/rot2 (ext cc) 5952cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed newov->copyOvPipe(ov, utils::OV_PIPE2); 5962cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed // All pipes are copied or deleted so no more need for previous ovimpl 5972cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed delete ov; 5982cc53dd510a5e1ffaaac8493b1ff65a908df6c13Naseer Ahmed ov = 0; 59929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return newov; 60029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 60129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 602c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah/* Transition from OV_UI_MIRROR to OV_UI_VIDEO_TV */ 603c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shahtemplate<> 604c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shahinline OverlayImplBase* OverlayState::handle_from_to< 605c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah utils::OV_UI_MIRROR, 606c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah utils::OV_UI_VIDEO_TV>( 607c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah OverlayImplBase* ov) { 608c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah OVASSERT(ov, "%s: ov is null", __FUNCTION__); 609c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah ALOGD("FROM_STATE = %s TO_STATE = %s", 610c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah utils::getStateString(utils::OV_UI_MIRROR), 611c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah utils::getStateString(utils::OV_UI_VIDEO_TV)); 612c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah 613c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah // Create new ovimpl based on new state 614c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah typedef StateTraits<utils::OV_UI_VIDEO_TV> NewState; 615c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah OverlayImplBase* newov = new NewState::ovimpl; 616c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah 617c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah //copy pipe0/rot0 (ext video) 618c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah newov->copyOvPipe(ov, utils::OV_PIPE0); 619c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah 620c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah ov->closePipe(utils::OV_PIPE1); 621c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah RotatorBase* rot1 = new NewState::rot1; 622c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah newov->initPipe(rot1, utils::OV_PIPE1); 623c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah 624c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah ov->closePipe(utils::OV_PIPE2); 625c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah RotatorBase* rot2 = new NewState::rot2; 626c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah newov->initPipe(rot2, utils::OV_PIPE2); 627c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah 628c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah // All pipes are copied or deleted so no more need for previous ovimpl 629c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah delete ov; 630c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah ov = 0; 631c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah return newov; 632c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah} 633c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah 634c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah/* Transition from OV_UI_VIDEO_TV to OV_UI_MIRROR */ 635c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shahtemplate<> 636c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shahinline OverlayImplBase* OverlayState::handle_from_to< 637c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah utils::OV_UI_VIDEO_TV, 638c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah utils::OV_UI_MIRROR>( 639c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah OverlayImplBase* ov) { 640c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah OVASSERT(ov, "%s: ov is null", __FUNCTION__); 641c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah ALOGD("FROM_STATE = %s TO_STATE = %s", 642c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah utils::getStateString(utils::OV_UI_VIDEO_TV), 643c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah utils::getStateString(utils::OV_UI_MIRROR)); 644c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah 645c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah // Create new ovimpl based on new state 646c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah typedef StateTraits<utils::OV_UI_MIRROR> NewState; 647c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah OverlayImplBase* newov = new NewState::ovimpl; 648c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah 649c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah //copy pipe0/rot0 (ext video) 650c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah newov->copyOvPipe(ov, utils::OV_PIPE0); 651c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah 652c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah ov->closePipe(utils::OV_PIPE1); 653c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah RotatorBase* rot1 = new NewState::rot1; 654c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah newov->initPipe(rot1, utils::OV_PIPE1); 655c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah 656c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah ov->closePipe(utils::OV_PIPE2); 657c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah RotatorBase* rot2 = new NewState::rot2; 658c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah newov->initPipe(rot2, utils::OV_PIPE2); 659c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah 660c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah // All pipes are copied or deleted so no more need for previous ovimpl 661c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah delete ov; 662c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah ov = 0; 663c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah return newov; 664c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah} 66529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} // overlay 66629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 66729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#endif // OVERLAY_STATE_H 668