diff -r 000000000000 -r 0e4a32b9112d omxil_generic/omxilcomplib/src/omxilportmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/omxil_generic/omxilcomplib/src/omxilportmanager.h Wed Aug 25 12:40:50 2010 +0300 @@ -0,0 +1,222 @@ +// 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 OMXILPORTMANAGER_H +#define OMXILPORTMANAGER_H + +#include + +#include +#include "omxilindexmanager.h" +#include "omxilportmanagerif.h" + +/** + Port Manager Panic category +*/ +_LIT(KOmxILPortManagerPanicCategory, "OmxILPortManager"); + + +// Forward declarations +class COmxILProcessingFunction; +class MOmxILCallbackManagerIf; + +/** + OpenMAX IL Port Manager. + + It keeps and manages a list of the ports configured in the component. The + Port Manager is used by the FSM object (@see COmxILFsm) to communicate with + the ports. + +*/ +NONSHARABLE_CLASS(COmxILPortManager) : public COmxILIndexManager, + public MOmxILPortManagerIf + { + +public: + + static COmxILPortManager* NewL( + COmxILProcessingFunction& aProcessingFunction, + MOmxILCallbackManagerIf& aCallbacks, + const OMX_VERSIONTYPE& aOmxVersion, + OMX_U32 aNumberOfAudioPorts, + OMX_U32 aStartAudioPortNumber, + OMX_U32 aNumberOfImagePorts, + OMX_U32 aStartImagePortNumber, + OMX_U32 aNumberOfVideoPorts, + OMX_U32 aStartVideoPortNumber, + OMX_U32 aNumberOfOtherPorts, + OMX_U32 aStartOtherPortNumber, + OMX_BOOL aImmediateReturnTimeBuffer = OMX_TRUE); + + ~COmxILPortManager(); + + TInt AddPort(const COmxILPort* aPort, + OMX_DIRTYPE aDirection); + + OMX_ERRORTYPE GetParameter( + OMX_INDEXTYPE aParamIndex, + TAny* apComponentParameterStructure) const; + + OMX_ERRORTYPE SetParameter(OMX_INDEXTYPE aParamIndex, + const TAny* apComponentParameterStructure, + OMX_BOOL aPortIsDisabled = OMX_FALSE); + + 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 PopulateBuffer(OMX_BUFFERHEADERTYPE** appBufferHdr, + OMX_U32 aPortIndex, + OMX_PTR apAppPrivate, + OMX_U32 aSizeBytes, + OMX_U8* apBuffer, + TBool& portPopulationCompleted, + OMX_BOOL aPortIsDisabled = OMX_FALSE); + + OMX_ERRORTYPE FreeBuffer(OMX_U32 aPortIndex, + OMX_BUFFERHEADERTYPE* apBufferHeader, + TBool& portDepopulationCompleted, + OMX_BOOL aPortIsDisabled = OMX_FALSE); + + OMX_ERRORTYPE TunnelRequest(OMX_U32 aPortIndex, + OMX_HANDLETYPE aTunneledComp, + OMX_U32 aTunneledPort, + OMX_TUNNELSETUPTYPE* apTunnelSetup, + OMX_BOOL aPortIsDisabled = OMX_FALSE); + + OMX_ERRORTYPE TunnellingBufferAllocation( + TBool& aComponentPopulationCompleted, + TUint32 aPortIndex = OMX_ALL); + + OMX_ERRORTYPE TunnellingBufferDeallocation( + TBool& aComponentDePopulationCompleted); + + OMX_ERRORTYPE InitiateTunnellingDataFlow( + OMX_U32 aPortIndex = OMX_ALL, + OMX_BOOL aSuppliersAndNonSuppliers = OMX_FALSE); + + OMX_ERRORTYPE BufferIndication( + OMX_BUFFERHEADERTYPE* apBufferHeader, + OMX_DIRTYPE aDirection, + OMX_BOOL aPortIsDisabled = OMX_FALSE); + + OMX_ERRORTYPE BufferReturnIndication( + OMX_BUFFERHEADERTYPE* apBufferHeader, + OMX_DIRTYPE aDirection, + TBool& aAllBuffersReturned); + + OMX_ERRORTYPE BufferFlushIndicationFlushCommand( + TUint32 aPortIndex, TBool aEjectBuffers = ETrue); + + OMX_ERRORTYPE BufferFlushIndicationPauseOrExeToIdleCommand( + TBool& aAllBuffersReturnedToSuppliers); + + OMX_ERRORTYPE PortEnableIndication( + TUint32 aPortIndex, + TBool aIndicationIsFinal); + + OMX_ERRORTYPE PortDisableIndication( + TUint32 aPortIndex); + + OMX_ERRORTYPE BufferMarkIndication(OMX_U32 aPortIndex, + OMX_PTR ipMarkData); + +#ifdef _OMXIL_COMMON_IL516C_ON + OMX_ERRORTYPE BufferEjectIndication( + TUint32 aPortIndex); +#endif + + OMX_ERRORTYPE ComponentRoleIndication(TUint aComponentRoleIndex); + + OMX_ERRORTYPE PortSettingsChangeIndication(OMX_U32 aPortIndex, + TUint aPortSettingsIndex, + const TDesC8& aPortSettings, + OMX_EVENTTYPE& aEventForILClient); + + // + // + // + TBool AllPortsPopulated() const; + + TBool AllPortsDePopulated() const; + + TBool AllBuffersAtHome() const; + + +private: + + COmxILPortManager(COmxILProcessingFunction& aProcessingFunction, + MOmxILCallbackManagerIf& aCallbacks); + + // From MOmxILPortManagerIf + void ConstructL(COmxILProcessingFunction& aProcessingFunction, + MOmxILCallbackManagerIf& aCallbacks, + const OMX_VERSIONTYPE& aOmxVersion, + OMX_U32 aNumberOfAudioPorts, + OMX_U32 aStartAudioPortNumber, + OMX_U32 aNumberOfImagePorts, + OMX_U32 aStartImagePortNumber, + OMX_U32 aNumberOfVideoPorts, + OMX_U32 aStartVideoPortNumber, + OMX_U32 aNumberOfOtherPorts, + OMX_U32 aStartOtherPortNumber, + OMX_BOOL aImmediateReturnTimeBuffer = OMX_TRUE); + + + void AppendPortL(const COmxILPort* aPort); + void RemoveLastAppendedPort(); + + inline OMX_ERRORTYPE CheckPortIndex(OMX_U32 aPortIndex) const; + + inline OMX_ERRORTYPE GetPortIndexFromOmxStruct( + const TAny*& apComponentParameterStructure, + OMX_U32& aIndex) const; + + inline OMX_ERRORTYPE GetPortIndexFromOmxStruct( + TAny*& apComponentParameterStructure, + OMX_U32& aIndex) const; + + TBool RemoveBuffersFromPfOrCm(COmxILPort* apPort, + OMX_BOOL aRemoveFromPfOnly = OMX_FALSE) const; + +private: + + COmxILProcessingFunction& iProcessingFunction; + MOmxILCallbackManagerIf& iCallbacks; + + RPointerArray iAllPorts; + RArray iTimePorts; // Indicate the corresponding port is OMX_OTHER_FormatTime + + OMX_PORT_PARAM_TYPE iAudioParamInit; + OMX_PORT_PARAM_TYPE iImageParamInit; + OMX_PORT_PARAM_TYPE iVideoParamInit; + OMX_PORT_PARAM_TYPE iOtherParamInit; + OMX_BOOL iImmediateReturnTimeBuffer; + }; + +#include "omxilportmanager.inl" + +#endif // OMXILPORTMANAGER_H