diff -r 000000000000 -r 0e4a32b9112d omxil_generic/omxilcomplib/src/omxilfsm.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/omxil_generic/omxilcomplib/src/omxilfsm.h Wed Aug 25 12:40:50 2010 +0300 @@ -0,0 +1,204 @@ +// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + + +/** + @file + @internalComponent +*/ + +#ifndef OMXILFSM_H +#define OMXILFSM_H + + +#include +#include +#include +#include + +// forward declarations +class MOmxILPortManagerIf; +class COmxILConfigManager; +class MOmxILCallbackManagerIf; +class COmxILComponent; +class COmxILProcessingFunction; + +/** + FSM Panic category +*/ +_LIT(KOmxILFsmPanicCategory, "OmxILFsm"); + + +/** + FSM class that represents the main FSM context object of the State + pattern. It delegates most events for processing to the current state + object. + */ +NONSHARABLE_CLASS(COmxILFsm) : public CBase + { + +public: + + static const TInt KMaxMsgQueueEntries = 10; +public: + + static COmxILFsm* NewL(COmxILComponent& aComponent, + COmxILProcessingFunction& aProcFunction, + MOmxILPortManagerIf& aPortManager, + COmxILConfigManager& aConfigManager, + MOmxILCallbackManagerIf& aCallbacks); + + ~COmxILFsm(); + + OMX_ERRORTYPE InitFsm(); + + COmxILComponent* GetComponent() const; + + // + // OpenMAX IL API calls + // + + OMX_ERRORTYPE GetComponentVersion(OMX_STRING aComponentName, + OMX_VERSIONTYPE* pComponentVersion, + OMX_VERSIONTYPE* pSpecVersion, + OMX_UUIDTYPE* pComponentUUID) const; + + OMX_ERRORTYPE SendCommand(OMX_COMMANDTYPE Cmd, + TUint32 nParam1, + TAny* apCmdData); + + OMX_ERRORTYPE GetParameter(OMX_INDEXTYPE aParamIndex, + TAny* apComponentParameterStructure) const; + + OMX_ERRORTYPE SetParameter(OMX_INDEXTYPE aParamIndex, + const TAny* apComponentParameterStructure); + + OMX_ERRORTYPE GetConfig(OMX_INDEXTYPE aConfigIndex, + TAny* apComponentConfigStructure) const; + + OMX_ERRORTYPE SetConfig(OMX_INDEXTYPE aConfigIndex, + const TAny* apComponentConfigStructure); + + OMX_ERRORTYPE GetExtensionIndex(OMX_STRING aParameterName, + OMX_INDEXTYPE* apIndexType) const; + + OMX_ERRORTYPE GetState(OMX_STATETYPE* apState) const; + + OMX_ERRORTYPE ComponentTunnelRequest(OMX_U32 aPort, + OMX_HANDLETYPE aTunneledComp, + OMX_U32 aTunneledPort, + OMX_TUNNELSETUPTYPE* apTunnelSetup); + + OMX_ERRORTYPE UseBuffer(OMX_BUFFERHEADERTYPE** appBufferHdr, + OMX_U32 aPortIndex, + OMX_PTR apAppPrivate, + OMX_U32 aSizeBytes, + OMX_U8* apBuffer); + + OMX_ERRORTYPE AllocateBuffer(OMX_BUFFERHEADERTYPE** appBufferHdr, + OMX_U32 aPortIndex, + OMX_PTR apAppPrivate, + OMX_U32 aSizeBytes); + + OMX_ERRORTYPE FreeBuffer(OMX_U32 aPortIndex, + OMX_BUFFERHEADERTYPE* apBuffer); + + OMX_ERRORTYPE EmptyThisBuffer(OMX_BUFFERHEADERTYPE* apBuffer); + + OMX_ERRORTYPE FillThisBuffer(OMX_BUFFERHEADERTYPE* apBuffer); + + OMX_ERRORTYPE SetCallbacks(const OMX_CALLBACKTYPE* apCallbacks, + const OMX_PTR apAppData); + + OMX_ERRORTYPE UseEGLImage(OMX_BUFFERHEADERTYPE** appBufferHdr, + OMX_U32 aPortIndex, + OMX_PTR aAppPrivate, + void* eglImage); + + OMX_ERRORTYPE ComponentRoleEnum(OMX_U8* aRole, + OMX_U32 aIndex) const; + +private: + + // Declaration of nested private state classes + class COmxILState; + class COmxILStateInvalid; + class COmxILStateLoaded; + class COmxILStateLoadedToIdle; + class COmxILStateWaitForResources; + class COmxILStateIdle; + class COmxILStateIdleToLoaded; + class COmxILStateExecuting; + class COmxILStateExecutingToIdle; + class COmxILStatePause; + class COmxILStatePauseToIdle; + class MOmxILPauseOrExecutingToIdle; + + // Note that the following friends don't break COmxILFsm's interface as all + // friends below are COmxILFsm's private nested classes and therefore they + // are logically part of COmxILFsm implementation + friend class COmxILState; + friend class COmxILStateInvalid; + friend class COmxILStateLoaded; + friend class COmxILStateLoadedToIdle; + friend class COmxILStateWaitForResources; + friend class COmxILStateIdle; + friend class COmxILStateIdleToLoaded; + friend class COmxILStateExecuting; + friend class COmxILStateExecutingToIdle; + friend class COmxILStatePause; + friend class COmxILStatePauseToIdle; + friend class MOmxILPauseOrExecutingToIdle; + +private: + + COmxILFsm(COmxILComponent& aComponent, + COmxILProcessingFunction& aProcFunction, + MOmxILPortManagerIf& aPortManager, + COmxILConfigManager& aConfigManager, + MOmxILCallbackManagerIf& aCallbacks); + + void ConstructL(); + + OMX_ERRORTYPE PopulateBuffer(OMX_BUFFERHEADERTYPE** appBufferHdr, + OMX_U32 aPortIndex, + OMX_PTR apAppPrivate, + OMX_U32 aSizeBytes, + OMX_U8* apBuffer); + + OMX_ERRORTYPE FsmTransition(TStateIndex aNewState); + + OMX_ERRORTYPE FsmTransition(TUint32 aNewState); + + OMX_ERRORTYPE SendOmxErrorEventIfNeeded(OMX_ERRORTYPE aError) const; + + OMX_ERRORTYPE SendOmxErrorEventIfNeeded(OMX_ERRORTYPE aError); + +private: + + COmxILComponent& iComponent; + COmxILProcessingFunction& iProcFunction; + MOmxILPortManagerIf& iPortManager; + COmxILConfigManager& iConfigManager; + MOmxILCallbackManagerIf& iCallbacks; + + RPointerArray iStates; + TStateIndex iCurrentStateIndex; + COmxILState* ipCurrentState; + + }; + + +#endif // OMXILFSM_H