summaryrefslogtreecommitdiffstats
path: root/liboverlay/overlayState.h
diff options
context:
space:
mode:
Diffstat (limited to 'liboverlay/overlayState.h')
-rw-r--r--liboverlay/overlayState.h667
1 files changed, 0 insertions, 667 deletions
diff --git a/liboverlay/overlayState.h b/liboverlay/overlayState.h
deleted file mode 100644
index 85d61d5b5..000000000
--- a/liboverlay/overlayState.h
+++ /dev/null
@@ -1,667 +0,0 @@
-/*
-* Copyright (c) 2011-2012, Code Aurora Forum. All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions are
-* met:
-* * Redistributions of source code must retain the above copyright
-* notice, this list of conditions and the following disclaimer.
-* * Redistributions in binary form must reproduce the above
-* copyright notice, this list of conditions and the following
-* disclaimer in the documentation and/or other materials provided
-* with the distribution.
-* * Neither the name of Code Aurora Forum, Inc. nor the names of its
-* contributors may be used to endorse or promote products derived
-* from this software without specific prior written permission.
-*
-* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*/
-
-#ifndef OVERLAY_STATE_H
-#define OVERLAY_STATE_H
-
-#include "overlayUtils.h"
-#include "overlayImpl.h"
-#include "overlayRotator.h"
-#include "pipes/overlayGenPipe.h"
-#include "pipes/overlayVideoExtPipe.h"
-#include "pipes/overlayUIMirrorPipe.h"
-#include "pipes/overlay3DPipe.h"
-
-namespace overlay {
-
-/*
-* Used by Overlay class. Invokes each event
-* */
-
-class OverlayState : utils::NoCopy {
-public:
- /*ctor*/
- explicit OverlayState();
-
- /*dtor*/
- ~OverlayState();
-
- /* return current state */
- utils::eOverlayState state() const;
-
- /* Hard reset to a new state. If the state is the same
- * as the current one, it would be a no-op */
- OverlayImplBase* reset(utils::eOverlayState s);
-
- /* Caller pass the state to the handleEvent function.
- * The input is the current OverlayImplBase*, and output is
- * a pointer to (possibly new) instance of OverlayImplBase
- * The eFormat can be 2D/3D etc. */
- OverlayImplBase* handleEvent(utils::eOverlayState s,
- OverlayImplBase* ov);
-
- /* Dump */
- void dump() const;
-
-private:
-
- /* Transitions from a state to a state. Default behavior is to move from an
- * old state to CLOSED and from CLOSED to a new state. Any impl wishing to
- * copy pipes should specialize this call */
- template<utils::eOverlayState FROM_STATE, utils::eOverlayState TO_STATE>
- OverlayImplBase* handle_from_to(OverlayImplBase* ov);
-
- /* Just a convenient intermediate function to bring down the number of
- * combinations arising from multiple states */
- template<utils::eOverlayState FROM_STATE>
- OverlayImplBase* handle_from(utils::eOverlayState toState,
- OverlayImplBase* ov);
-
- /* Substitues for partially specialized templated handle functions since the
- * standard doesn't allow partial specialization of functions */
- template<utils::eOverlayState FROM_STATE>
- OverlayImplBase* handle_xxx_to_CLOSED(OverlayImplBase* ov);
-
- template<utils::eOverlayState TO_STATE>
- OverlayImplBase* handle_CLOSED_to_xxx(OverlayImplBase* ov);
-
- /* States here */
- utils::eOverlayState mState;
-};
-
-//------------------------State Traits --------------------------
-
-// primary has nothing
-template <int STATE> struct StateTraits {};
-
-/*
- * For 3D_xxx we need channel ID besides the FBx since
- * get crop/position 3D need that to determine pos/crop
- * info.
- * */
-
-template <> struct StateTraits<utils::OV_2D_VIDEO_ON_PANEL>
-{
- typedef overlay::GenericPipe<utils::PRIMARY> pipe0; //prim video
- typedef overlay::NullPipe pipe1; // place holder
- typedef overlay::NullPipe pipe2; // place holder
-
- typedef Rotator rot0;
- typedef NullRotator rot1;
- typedef NullRotator rot2;
-
- typedef overlay::OverlayImpl<pipe0, pipe1, pipe2> ovimpl;
-};
-
-template <> struct StateTraits<utils::OV_2D_VIDEO_ON_PANEL_TV>
-{
- typedef overlay::GenericPipe<utils::PRIMARY> pipe0; //prim video
- typedef overlay::VideoExtPipe pipe1; //ext video
- typedef overlay::GenericPipe<utils::EXTERNAL> pipe2; //ext subtitle
-
- typedef Rotator rot0;
- typedef Rotator rot1;
- typedef NullRotator rot2;
-
- typedef overlay::OverlayImpl<pipe0, pipe1, pipe2> ovimpl;
-};
-
-template <> struct StateTraits<utils::OV_2D_VIDEO_ON_TV>
-{
- typedef overlay::NullPipe pipe0; //nothing on primary with mdp
- typedef overlay::VideoExtPipe pipe1; //ext video
- typedef overlay::GenericPipe<utils::EXTERNAL> pipe2; //ext subtitle
-
- typedef NullRotator rot0;
- typedef Rotator rot1;
- typedef NullRotator rot2;
-
- typedef overlay::OverlayImpl<pipe0, pipe1, pipe2> ovimpl;
-};
-
-template <> struct StateTraits<utils::OV_UI_VIDEO_TV>
-{
- typedef overlay::GenericPipe<utils::EXTERNAL> pipe0; //ext UI
- typedef overlay::GenericPipe<utils::EXTERNAL> pipe1; //ext video
- typedef overlay::NullPipe pipe2;
-
- typedef Rotator rot0;
- typedef Rotator rot1;
- typedef NullRotator rot2;
-
- typedef overlay::OverlayImpl<pipe0, pipe1, pipe2> ovimpl;
-};
-
-template <> struct StateTraits<utils::OV_3D_VIDEO_ON_2D_PANEL>
-{
- typedef overlay::M3DPrimaryPipe<utils::OV_PIPE0> pipe0;
- typedef overlay::NullPipe pipe1; // place holder
- typedef overlay::NullPipe pipe2; // place holder
-
- typedef Rotator rot0;
- typedef NullRotator rot1;
- typedef NullRotator rot2;
-
- typedef overlay::OverlayImpl<pipe0> ovimpl;
-};
-
-template <> struct StateTraits<utils::OV_3D_VIDEO_ON_3D_PANEL>
-{
- typedef overlay::S3DPrimaryPipe<utils::OV_PIPE0> pipe0;
- typedef overlay::S3DPrimaryPipe<utils::OV_PIPE1> pipe1;
- typedef overlay::NullPipe pipe2; // place holder
-
- typedef Rotator rot0;
- typedef Rotator rot1;
- typedef NullRotator rot2;
-
- typedef overlay::OverlayImpl<pipe0, pipe1> ovimpl;
-};
-
-template <> struct StateTraits<utils::OV_3D_VIDEO_ON_3D_TV>
-{
- typedef overlay::S3DExtPipe<utils::OV_PIPE0> pipe0;
- typedef overlay::S3DExtPipe<utils::OV_PIPE1> pipe1;
- typedef overlay::NullPipe pipe2; // place holder
-
- typedef NullRotator rot0;
- typedef NullRotator rot1;
- typedef NullRotator rot2;
-
- typedef overlay::OverlayImpl<pipe0, pipe1> ovimpl;
-};
-
-template <> struct StateTraits<utils::OV_3D_VIDEO_ON_2D_PANEL_2D_TV>
-{
- typedef overlay::M3DPrimaryPipe<utils::OV_PIPE0> pipe0;
- typedef overlay::M3DExtPipe<utils::OV_PIPE1> pipe1;
- typedef overlay::NullPipe pipe2; // place holder
-
- typedef Rotator rot0;
- typedef NullRotator rot1;
- typedef NullRotator rot2;
-
- typedef overlay::OverlayImpl<pipe0, pipe1> ovimpl;
-};
-
-template <> struct StateTraits<utils::OV_UI_MIRROR>
-{
- typedef overlay::GenericPipe<ovutils::EXTERNAL> pipe0; //Ext UI
- typedef overlay::NullPipe pipe1; // place holder
- typedef overlay::NullPipe pipe2; // place holder
-
- typedef Rotator rot0;
- typedef NullRotator rot1;
- typedef NullRotator rot2;
-
- typedef overlay::OverlayImpl<pipe0, pipe1, pipe2> ovimpl;
-};
-
-template <> struct StateTraits<utils::OV_2D_TRUE_UI_MIRROR>
-{
- typedef overlay::GenericPipe<utils::PRIMARY> pipe0; //Vid prim
- typedef overlay::VideoExtPipe pipe1;
- typedef overlay::GenericPipe<ovutils::EXTERNAL> pipe2; //EXT UI
-
- typedef Rotator rot0;
- typedef Rotator rot1;
- typedef Rotator rot2;
-
- typedef overlay::OverlayImpl<pipe0, pipe1, pipe2> ovimpl;
-};
-
-template <> struct StateTraits<utils::OV_BYPASS_1_LAYER>
-{
- typedef overlay::GenericPipe<utils::PRIMARY> pipe0;
- typedef overlay::NullPipe pipe1; // place holder
- typedef overlay::NullPipe pipe2; // place holder
-
- typedef NullRotator rot0;
- typedef NullRotator rot1;
- typedef NullRotator rot2;
-
- typedef overlay::OverlayImpl<pipe0, pipe1, pipe2> ovimpl;
-};
-
-template <> struct StateTraits<utils::OV_BYPASS_2_LAYER>
-{
- typedef overlay::GenericPipe<utils::PRIMARY> pipe0;
- typedef overlay::GenericPipe<utils::PRIMARY> pipe1;
- typedef overlay::NullPipe pipe2; // place holder
-
- typedef NullRotator rot0;
- typedef NullRotator rot1;
- typedef NullRotator rot2;
-
- typedef overlay::OverlayImpl<pipe0, pipe1, pipe2> ovimpl;
-};
-
-template <> struct StateTraits<utils::OV_BYPASS_3_LAYER>
-{
- typedef overlay::GenericPipe<utils::PRIMARY> pipe0;
- typedef overlay::GenericPipe<utils::PRIMARY> pipe1;
- typedef overlay::GenericPipe<utils::PRIMARY> pipe2;
-
- typedef NullRotator rot0;
- typedef NullRotator rot1;
- typedef NullRotator rot2;
-
- typedef overlay::OverlayImpl<pipe0, pipe1, pipe2> ovimpl;
-};
-
-template <> struct StateTraits<utils::OV_DUAL_DISP>
-{
- typedef overlay::GenericPipe<utils::EXTERNAL> pipe0;
- typedef overlay::NullPipe pipe1;
- typedef overlay::NullPipe pipe2;
-
- typedef NullRotator rot0;
- typedef NullRotator rot1;
- typedef NullRotator rot2;
-
- typedef overlay::OverlayImpl<pipe0, pipe1, pipe2> ovimpl;
-};
-
-
-//------------------------Inlines --------------------------------
-
-
-inline OverlayState::OverlayState() : mState(utils::OV_CLOSED){}
-inline OverlayState::~OverlayState() {}
-inline utils::eOverlayState OverlayState::state() const { return mState; }
-inline OverlayImplBase* OverlayState::reset(utils::eOverlayState s) {
- return handleEvent(s, 0);
-}
-inline void OverlayState::dump() const {
- ALOGE("== Dump state %d start/end ==", mState);
-}
-
-inline OverlayImplBase* OverlayState::handleEvent(utils::eOverlayState toState,
- OverlayImplBase* ov)
-{
- OverlayImplBase* newov = ov; // at least, we return the same
- if (mState != toState) {
- ALOGD_IF(DEBUG_OVERLAY, "%s: state changed %s-->%s",
- __FUNCTION__, getStateString(mState), getStateString(toState));
- } else {
- ALOGD_IF(DEBUG_OVERLAY, "%s: no state change, state=%s",
- __FUNCTION__, getStateString(toState));
- return newov;
- }
-
- switch(mState)
- {
- case utils::OV_CLOSED:
- newov = handle_from<utils::OV_CLOSED>(toState, ov);
- break;
- case utils::OV_2D_VIDEO_ON_PANEL:
- newov = handle_from<utils::OV_2D_VIDEO_ON_PANEL>(toState, ov);
- break;
- case utils::OV_2D_VIDEO_ON_PANEL_TV:
- newov = handle_from<utils::OV_2D_VIDEO_ON_PANEL_TV>(toState, ov);
- break;
- case utils::OV_2D_VIDEO_ON_TV:
- newov = handle_from<utils::OV_2D_VIDEO_ON_TV>(toState, ov);
- break;
- case utils::OV_3D_VIDEO_ON_2D_PANEL:
- newov = handle_from<utils::OV_3D_VIDEO_ON_2D_PANEL>(toState, ov);
- break;
- case utils::OV_3D_VIDEO_ON_3D_PANEL:
- newov = handle_from<utils::OV_3D_VIDEO_ON_3D_PANEL>(toState, ov);
- break;
- case utils::OV_3D_VIDEO_ON_3D_TV:
- newov = handle_from<utils::OV_3D_VIDEO_ON_3D_TV>(toState, ov);
- break;
- case utils::OV_3D_VIDEO_ON_2D_PANEL_2D_TV:
- newov = handle_from<utils::OV_3D_VIDEO_ON_2D_PANEL_2D_TV>(toState,
- ov);
- break;
- case utils::OV_UI_MIRROR:
- newov = handle_from<utils::OV_UI_MIRROR>(toState, ov);
- break;
- case utils::OV_2D_TRUE_UI_MIRROR:
- newov = handle_from<utils::OV_2D_TRUE_UI_MIRROR>(toState, ov);
- break;
- case utils::OV_UI_VIDEO_TV:
- newov = handle_from<utils::OV_UI_VIDEO_TV>(toState, ov);
- break;
- case utils::OV_BYPASS_1_LAYER:
- newov = handle_from<utils::OV_BYPASS_1_LAYER>(toState, ov);
- break;
- case utils::OV_BYPASS_2_LAYER:
- newov = handle_from<utils::OV_BYPASS_2_LAYER>(toState, ov);
- break;
- case utils::OV_BYPASS_3_LAYER:
- newov = handle_from<utils::OV_BYPASS_3_LAYER>(toState, ov);
- break;
- case utils::OV_DUAL_DISP:
- newov = handle_from<utils::OV_DUAL_DISP>(toState, ov);
- break;
- default:
- OVASSERT(1 == 0, "%s: unknown state = %d", __FUNCTION__, mState);
-
- }
- return newov;
-}
-
-template <utils::eOverlayState FROM_STATE>
-inline OverlayImplBase* OverlayState::handle_from(utils::eOverlayState toState,
- OverlayImplBase* ov) {
-
- switch(toState)
- {
- case utils::OV_CLOSED:
- ov = handle_xxx_to_CLOSED<FROM_STATE>(ov);
- break;
- case utils::OV_2D_VIDEO_ON_PANEL:
- ov = handle_from_to<FROM_STATE, utils::OV_2D_VIDEO_ON_PANEL>(ov);
- break;
- case utils::OV_2D_VIDEO_ON_PANEL_TV:
- ov = handle_from_to<FROM_STATE, utils::OV_2D_VIDEO_ON_PANEL_TV>(ov);
- break;
- case utils::OV_2D_VIDEO_ON_TV:
- ov = handle_from_to<FROM_STATE, utils::OV_2D_VIDEO_ON_TV>(ov);
- break;
- case utils::OV_3D_VIDEO_ON_2D_PANEL:
- ov = handle_from_to<FROM_STATE, utils::OV_3D_VIDEO_ON_2D_PANEL>(ov);
- break;
- case utils::OV_3D_VIDEO_ON_3D_PANEL:
- ov = handle_from_to<FROM_STATE, utils::OV_3D_VIDEO_ON_3D_PANEL>(ov);
- break;
- case utils::OV_3D_VIDEO_ON_3D_TV:
- ov = handle_from_to<FROM_STATE, utils::OV_3D_VIDEO_ON_3D_TV>(ov);
- break;
- case utils::OV_3D_VIDEO_ON_2D_PANEL_2D_TV:
- ov = handle_from_to<FROM_STATE,
- utils::OV_3D_VIDEO_ON_2D_PANEL_2D_TV>(ov);
- break;
- case utils::OV_UI_MIRROR:
- ov = handle_from_to<FROM_STATE, utils::OV_UI_MIRROR>(ov);
- break;
- case utils::OV_2D_TRUE_UI_MIRROR:
- ov = handle_from_to<FROM_STATE, utils::OV_2D_TRUE_UI_MIRROR>(ov);
- break;
- case utils::OV_UI_VIDEO_TV:
- ov = handle_from_to<FROM_STATE, utils::OV_UI_VIDEO_TV>(ov);
- break;
- case utils::OV_BYPASS_1_LAYER:
- ov = handle_from_to<FROM_STATE, utils::OV_BYPASS_1_LAYER>(ov);
- break;
- case utils::OV_BYPASS_2_LAYER:
- ov = handle_from_to<FROM_STATE, utils::OV_BYPASS_2_LAYER>(ov);
- break;
- case utils::OV_BYPASS_3_LAYER:
- ov = handle_from_to<FROM_STATE, utils::OV_BYPASS_3_LAYER>(ov);
- break;
- case utils::OV_DUAL_DISP:
- ov = handle_from_to<FROM_STATE, utils::OV_DUAL_DISP>(ov);
- break;
- default:
- OVASSERT(1 == 0, "%s: unknown state = %d", __FUNCTION__, toState);
- }
- mState = toState;
- return ov;
-}
-
-
-/* Transition default from any to any. Does in two steps.
- * Moves from OLD to CLOSED and then from CLOSED to NEW
- */
-template<utils::eOverlayState FROM_STATE, utils::eOverlayState TO_STATE>
-inline OverlayImplBase* OverlayState::handle_from_to(OverlayImplBase* ov) {
- handle_xxx_to_CLOSED<FROM_STATE>(ov);
- return handle_CLOSED_to_xxx<TO_STATE>(ov);
-}
-
-//---------------Specializations-------------
-
-
-/* Transition from CLOSED to ANY */
-template<utils::eOverlayState TO_STATE>
-inline OverlayImplBase* OverlayState::handle_CLOSED_to_xxx(
- OverlayImplBase* /*ignored*/) {
- //If going from CLOSED to CLOSED, nothing to do.
- if(TO_STATE == utils::OV_CLOSED) return NULL;
- ALOGD("FROM_STATE = %s TO_STATE = %s",
- utils::getStateString(utils::OV_CLOSED),
- utils::getStateString(TO_STATE));
- OverlayImplBase* ov = new typename StateTraits<TO_STATE>::ovimpl;
- RotatorBase* rot0 = new typename StateTraits<TO_STATE>::rot0;
- RotatorBase* rot1 = new typename StateTraits<TO_STATE>::rot1;
- RotatorBase* rot2 = new typename StateTraits<TO_STATE>::rot2;
- if(!ov->init(rot0, rot1, rot2)) {
- ALOGE("Overlay failed to init in state %d", TO_STATE);
- return 0;
- }
- return ov;
-}
-
-/* Transition from ANY to CLOSED */
-template<utils::eOverlayState FROM_STATE>
-inline OverlayImplBase* OverlayState::handle_xxx_to_CLOSED(OverlayImplBase* ov)
-{
- //If going from CLOSED to CLOSED, nothing to do.
- if(FROM_STATE == utils::OV_CLOSED) return NULL;
- ALOGD("FROM_STATE = %s TO_STATE = %s",
- utils::getStateString(FROM_STATE),
- utils::getStateString(utils::OV_CLOSED));
- OVASSERT(ov, "%s: ov is null", __FUNCTION__);
- if(!ov->close()) {
- ALOGE("%s: Failed to ov close", __FUNCTION__);
- }
- delete ov;
- ov = 0;
- return 0;
-}
-
-/* Transition from 2D_VIDEO_ON_PANEL to 2D_VIDEO_ON_PANEL_TV */
-template<>
-inline OverlayImplBase* OverlayState::handle_from_to<
- utils::OV_2D_VIDEO_ON_PANEL,
- utils::OV_2D_VIDEO_ON_PANEL_TV>(
- OverlayImplBase* ov) {
- OVASSERT(ov, "%s: ov is null", __FUNCTION__);
- ALOGD("FROM_STATE = %s TO_STATE = %s",
- utils::getStateString(utils::OV_2D_VIDEO_ON_PANEL),
- utils::getStateString(utils::OV_2D_VIDEO_ON_PANEL_TV));
- // Create new ovimpl based on new state
- typedef StateTraits<utils::OV_2D_VIDEO_ON_PANEL_TV> NewState;
- OverlayImplBase* newov = new NewState::ovimpl;
-
- //copy pipe0/rot0 (primary video)
- newov->copyOvPipe(ov, utils::OV_PIPE0);
- //close old pipe1, create new pipe1
- ov->closePipe(utils::OV_PIPE1);
- RotatorBase* rot1 = new NewState::rot1;
- newov->initPipe(rot1, utils::OV_PIPE1);
- //close old pipe2, create new pipe2
- ov->closePipe(utils::OV_PIPE2);
- RotatorBase* rot2 = new NewState::rot2;
- newov->initPipe(rot2, utils::OV_PIPE2);
- // All pipes are copied or deleted so no more need for previous ovimpl
- delete ov;
- ov = 0;
- return newov;
-}
-
-/* Transition from 2D_VIDEO_ON_PANEL_TV to 2D_VIDEO_ON_PANEL */
-template<>
-inline OverlayImplBase* OverlayState::handle_from_to<
- utils::OV_2D_VIDEO_ON_PANEL_TV,
- utils::OV_2D_VIDEO_ON_PANEL>(
- OverlayImplBase* ov) {
- OVASSERT(ov, "%s: ov is null", __FUNCTION__);
- ALOGD("FROM_STATE = %s TO_STATE = %s",
- utils::getStateString(utils::OV_2D_VIDEO_ON_PANEL_TV),
- utils::getStateString(utils::OV_2D_VIDEO_ON_PANEL));
-
- // Create new ovimpl based on new state
- typedef StateTraits<utils::OV_2D_VIDEO_ON_PANEL> NewState;
- OverlayImplBase* newov = new NewState::ovimpl;
-
- //copy pipe0/rot0 (primary video)
- newov->copyOvPipe(ov, utils::OV_PIPE0);
- //close old pipe1, create new pipe1
- ov->closePipe(utils::OV_PIPE1);
- RotatorBase* rot1 = new NewState::rot1;
- newov->initPipe(rot1, utils::OV_PIPE1);
- //close old pipe2, create new pipe2
- ov->closePipe(utils::OV_PIPE2);
- RotatorBase* rot2 = new NewState::rot2;
- newov->initPipe(rot2, utils::OV_PIPE2);
- // All pipes are copied or deleted so no more need for previous ovimpl
- delete ov;
- ov = 0;
- return newov;
-}
-
-/* Transition from 2D_VIDEO_ON_PANEL_TV to 2D_VIDEO_ON_TV */
-template<>
-inline OverlayImplBase* OverlayState::handle_from_to<
- utils::OV_2D_VIDEO_ON_PANEL_TV,
- utils::OV_2D_VIDEO_ON_TV>(
- OverlayImplBase* ov) {
- OVASSERT(ov, "%s: ov is null", __FUNCTION__);
- ALOGD("FROM_STATE = %s TO_STATE = %s",
- utils::getStateString(utils::OV_2D_VIDEO_ON_PANEL_TV),
- utils::getStateString(utils::OV_2D_VIDEO_ON_TV));
-
- // Create new ovimpl based on new state
- typedef StateTraits<utils::OV_2D_VIDEO_ON_TV> NewState;
- OverlayImplBase* newov = new NewState::ovimpl;
-
- //close old pipe0, create new pipe0
- ov->closePipe(utils::OV_PIPE0);
- RotatorBase* rot0 = new NewState::rot0;
- newov->initPipe(rot0, utils::OV_PIPE0);
- //copy pipe1/rot1 (ext video)
- newov->copyOvPipe(ov, utils::OV_PIPE1);
- //copy pipe2/rot2 (ext cc)
- newov->copyOvPipe(ov, utils::OV_PIPE2);
- // All pipes are copied or deleted so no more need for previous ovimpl
- delete ov;
- ov = 0;
- return newov;
-}
-
-/* Transition from 2D_VIDEO_ON_TV to 2D_VIDEO_ON_PANEL_TV */
-template<>
-inline OverlayImplBase* OverlayState::handle_from_to<
- utils::OV_2D_VIDEO_ON_TV,
- utils::OV_2D_VIDEO_ON_PANEL_TV>(
- OverlayImplBase* ov) {
- OVASSERT(ov, "%s: ov is null", __FUNCTION__);
- ALOGD("FROM_STATE = %s TO_STATE = %s",
- utils::getStateString(utils::OV_2D_VIDEO_ON_TV),
- utils::getStateString(utils::OV_2D_VIDEO_ON_PANEL_TV));
-
- // Create new ovimpl based on new state
- typedef StateTraits<utils::OV_2D_VIDEO_ON_PANEL_TV> NewState;
- OverlayImplBase* newov = new NewState::ovimpl;
-
- //close old pipe0, create new pipe0
- ov->closePipe(utils::OV_PIPE0);
- RotatorBase* rot0 = new NewState::rot0;
- newov->initPipe(rot0, utils::OV_PIPE0);
- //copy pipe1/rot1 (ext video)
- newov->copyOvPipe(ov, utils::OV_PIPE1);
- //copy pipe2/rot2 (ext cc)
- newov->copyOvPipe(ov, utils::OV_PIPE2);
- // All pipes are copied or deleted so no more need for previous ovimpl
- delete ov;
- ov = 0;
- return newov;
-}
-
-/* Transition from OV_UI_MIRROR to OV_UI_VIDEO_TV */
-template<>
-inline OverlayImplBase* OverlayState::handle_from_to<
- utils::OV_UI_MIRROR,
- utils::OV_UI_VIDEO_TV>(
- OverlayImplBase* ov) {
- OVASSERT(ov, "%s: ov is null", __FUNCTION__);
- ALOGD("FROM_STATE = %s TO_STATE = %s",
- utils::getStateString(utils::OV_UI_MIRROR),
- utils::getStateString(utils::OV_UI_VIDEO_TV));
-
- // Create new ovimpl based on new state
- typedef StateTraits<utils::OV_UI_VIDEO_TV> NewState;
- OverlayImplBase* newov = new NewState::ovimpl;
-
- //copy pipe0/rot0 (ext video)
- newov->copyOvPipe(ov, utils::OV_PIPE0);
-
- ov->closePipe(utils::OV_PIPE1);
- RotatorBase* rot1 = new NewState::rot1;
- newov->initPipe(rot1, utils::OV_PIPE1);
-
- ov->closePipe(utils::OV_PIPE2);
- RotatorBase* rot2 = new NewState::rot2;
- newov->initPipe(rot2, utils::OV_PIPE2);
-
- // All pipes are copied or deleted so no more need for previous ovimpl
- delete ov;
- ov = 0;
- return newov;
-}
-
-/* Transition from OV_UI_VIDEO_TV to OV_UI_MIRROR */
-template<>
-inline OverlayImplBase* OverlayState::handle_from_to<
- utils::OV_UI_VIDEO_TV,
- utils::OV_UI_MIRROR>(
- OverlayImplBase* ov) {
- OVASSERT(ov, "%s: ov is null", __FUNCTION__);
- ALOGD("FROM_STATE = %s TO_STATE = %s",
- utils::getStateString(utils::OV_UI_VIDEO_TV),
- utils::getStateString(utils::OV_UI_MIRROR));
-
- // Create new ovimpl based on new state
- typedef StateTraits<utils::OV_UI_MIRROR> NewState;
- OverlayImplBase* newov = new NewState::ovimpl;
-
- //copy pipe0/rot0 (ext video)
- newov->copyOvPipe(ov, utils::OV_PIPE0);
-
- ov->closePipe(utils::OV_PIPE1);
- RotatorBase* rot1 = new NewState::rot1;
- newov->initPipe(rot1, utils::OV_PIPE1);
-
- ov->closePipe(utils::OV_PIPE2);
- RotatorBase* rot2 = new NewState::rot2;
- newov->initPipe(rot2, utils::OV_PIPE2);
-
- // All pipes are copied or deleted so no more need for previous ovimpl
- delete ov;
- ov = 0;
- return newov;
-}
-} // overlay
-
-#endif // OVERLAY_STATE_H