omxil/omxilcomponentcommon/src/common/omxilportmanager.cpp
changeset 56 b6488ac24ddc
parent 47 481b3bce574a
child 57 1cbb0d5bf7f2
--- a/omxil/omxilcomponentcommon/src/common/omxilportmanager.cpp	Mon Aug 23 21:48:44 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1953 +0,0 @@
-// 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
-*/
-
-#include "log.h"
-#include "omxilportmanager.h"
-#include "omxilprocessingfunction.h"
-#include "omxilcallbackmanager.h"
-#include "omxilutil.h"
-
-EXPORT_C COmxILPortManager*
-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)
-	{
-    DEBUG_PRINTF(_L8("COmxILPortManager::NewL"));
-
-	COmxILPortManager* self =
-		new (ELeave)COmxILPortManager(
-			aProcessingFunction,
-			aCallbacks,
-			aOmxVersion,
-			aNumberOfAudioPorts,
-			aStartAudioPortNumber,
-			aNumberOfImagePorts,
-			aStartImagePortNumber,
-			aNumberOfVideoPorts,
-			aStartVideoPortNumber,
-			aNumberOfOtherPorts,
-			aStartOtherPortNumber,
-			aImmediateReturnTimeBuffer);
-
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop(self);
-	return self;
-	}
-
-void
-COmxILPortManager::ConstructL()
-	{
-    DEBUG_PRINTF(_L8("COmxILPortManager::ConstructL"));
-
-	InsertParamIndexL(OMX_IndexParamAudioInit);
-	InsertParamIndexL(OMX_IndexParamImageInit);
-	InsertParamIndexL(OMX_IndexParamVideoInit);
-	InsertParamIndexL(OMX_IndexParamOtherInit);
-
-
-	if(iAudioParamInit.nStartPortNumber != 0)
-		{
-		User::Leave(KErrArgument);
-		}
-
-	if (iImageParamInit.nPorts > 0)
-		{
-		if (iAudioParamInit.nPorts !=
-			iImageParamInit.nStartPortNumber)
-			{
-			User::Leave(KErrArgument);
-			}
-		}
-
-	if (iVideoParamInit.nPorts > 0)
-		{
-		if ((iAudioParamInit.nPorts +
-			 iImageParamInit.nPorts)  !=
-			iVideoParamInit.nStartPortNumber)
-			{
-			User::Leave(KErrArgument);
-			}
-		}
-
-	if (iOtherParamInit.nPorts > 0)
-		{
-		if ((iAudioParamInit.nPorts +
-			 iImageParamInit.nPorts +
-			 iVideoParamInit.nPorts)  !=
-			iOtherParamInit.nStartPortNumber)
-			{
-			User::Leave(KErrArgument);
-			}
-		}
-
-	}
-
-COmxILPortManager::COmxILPortManager(
-	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)
-	:
-	iProcessingFunction(aProcessingFunction),
-	iCallbacks(aCallbacks),
-	iAllPorts(),
-	iImmediateReturnTimeBuffer(aImmediateReturnTimeBuffer)
-	{
-    DEBUG_PRINTF(_L8("COmxILPortManager::COmxILPortManager"));
-
-	iAudioParamInit.nSize			 = sizeof(OMX_PORT_PARAM_TYPE);
-	iAudioParamInit.nVersion		 = aOmxVersion;
-	iAudioParamInit.nPorts			 = aNumberOfAudioPorts;
-	iAudioParamInit.nStartPortNumber = aStartAudioPortNumber;
-
-	iImageParamInit.nSize			 = sizeof(OMX_PORT_PARAM_TYPE);
-	iImageParamInit.nVersion		 = aOmxVersion;
-	iImageParamInit.nPorts			 = aNumberOfImagePorts;
-	iImageParamInit.nStartPortNumber = aStartImagePortNumber;
-
-	iVideoParamInit.nSize			 = sizeof(OMX_PORT_PARAM_TYPE);
-	iVideoParamInit.nVersion		 = aOmxVersion;
-	iVideoParamInit.nPorts			 = aNumberOfVideoPorts;
-	iVideoParamInit.nStartPortNumber = aStartVideoPortNumber;
-
-	iOtherParamInit.nSize			 = sizeof(OMX_PORT_PARAM_TYPE);
-	iOtherParamInit.nVersion		 = aOmxVersion;
-	iOtherParamInit.nPorts			 = aNumberOfOtherPorts;
-	iOtherParamInit.nStartPortNumber = aStartOtherPortNumber;
-
-	}
-
-COmxILPortManager::~COmxILPortManager()
-	{
-    DEBUG_PRINTF(_L8("COmxILPortManager::~COmxILPortManager"));
-	iAllPorts.Reset(); // data not owned here
-	iTimePorts.Close();
-	}
-
-void
-COmxILPortManager::AppendPortL(const COmxILPort* aPort)
-	{
-    DEBUG_PRINTF(_L8("COmxILPortManager::AppendPort"));
-
-	const TInt portCount = iAllPorts.Count();
-	OMX_PORTDOMAINTYPE portDomain = aPort->Domain();
-	OMX_U32 startPortNumber = 0;
-	TBool timePort = EFalse;
-	
-	switch(portDomain)
-		{
-	case OMX_PortDomainAudio:
-		{
-		__ASSERT_ALWAYS(portCount >= 0,
-						User::Panic(KOmxILPortManagerPanicCategory, 1));
-		__ASSERT_ALWAYS(portCount < iAudioParamInit.nPorts,
-						User::Panic(KOmxILPortManagerPanicCategory, 1));
-
-		startPortNumber = iAudioParamInit.nStartPortNumber;
-
-		}
-		break;
-
-	case OMX_PortDomainImage:
-		{
-		__ASSERT_ALWAYS(portCount >= iAudioParamInit.nPorts,
-						User::Panic(KOmxILPortManagerPanicCategory, 1));
-		__ASSERT_ALWAYS(portCount <
-						iAudioParamInit.nPorts +
-						iImageParamInit.nPorts,
-						User::Panic(KOmxILPortManagerPanicCategory, 1));
-
-		startPortNumber = iImageParamInit.nStartPortNumber;
-
-		}
-		break;
-
-	case OMX_PortDomainVideo:
-		{
-		__ASSERT_ALWAYS(portCount >=
-						iAudioParamInit.nPorts +
-						iImageParamInit.nPorts,
-						User::Panic(KOmxILPortManagerPanicCategory, 1));
-		__ASSERT_ALWAYS(portCount <
-						iAudioParamInit.nPorts +
-						iImageParamInit.nPorts +
-						iVideoParamInit.nPorts,
-						User::Panic(KOmxILPortManagerPanicCategory, 1));
-
-		startPortNumber = iVideoParamInit.nStartPortNumber;
-
-		}
-		break;
-
-
-	case OMX_PortDomainOther:
-		{
-		__ASSERT_ALWAYS(portCount >=
-						iAudioParamInit.nPorts +
-						iImageParamInit.nPorts +
-						iVideoParamInit.nPorts,
-						User::Panic(KOmxILPortManagerPanicCategory, 1));
-		__ASSERT_ALWAYS(portCount <
-						iAudioParamInit.nPorts +
-						iImageParamInit.nPorts +
-						iVideoParamInit.nPorts +
-						iOtherParamInit.nPorts,
-						User::Panic(KOmxILPortManagerPanicCategory, 1));
-
-		startPortNumber = iOtherParamInit.nStartPortNumber;
-		
-		OMX_OTHER_PARAM_PORTFORMATTYPE paramFormat;
-		paramFormat.nSize = sizeof(OMX_OTHER_PARAM_PORTFORMATTYPE);
-		paramFormat.nVersion = TOmxILSpecVersion();
-		paramFormat.nPortIndex = aPort->Index();
-		paramFormat.nIndex = 0;
-
-		if ((aPort->GetParameter(OMX_IndexParamOtherPortFormat, &paramFormat) == OMX_ErrorNone) &&
-			paramFormat.eFormat == OMX_OTHER_FormatTime)
-			{
-			timePort = ETrue;	
-			}
-		}
-		
-		break;
-
-	default:
-		{
-		User::Panic(KOmxILPortManagerPanicCategory, 1);
-		}
-		};
-
-	if(portCount ==  startPortNumber)
-		{
-		iAllPorts.AppendL(aPort);
-		}
-	else
-		{
-		for (TInt i=startPortNumber; i<portCount; ++i)
-			{
-			if (iAllPorts[i]->Index() >= aPort->Index())
-				{
-				User::Panic(KOmxILPortManagerPanicCategory, 1);
-				}
-			}
-		iAllPorts.AppendL(aPort);
-		}
-
-	iTimePorts.AppendL(timePort);
-	}
-
-/**
-  This method is used at component's construction time, i.e., in a factory
-  method of the component. The main component object uses this method to add
-  the component's ports to its port manager instance.
-
-   @param aPort The port instance to be added.
-
-   @param aDirection The direction of the port being added.
-
-   @ return A Symbian error code indicating if the function call was
-   successful.  KErrNone on success, otherwise another of the system-wide error
-   codes.
-*/
-EXPORT_C TInt
-COmxILPortManager::AddPort(const COmxILPort* aPort,
-						   OMX_DIRTYPE aDirection)
-	{
-    DEBUG_PRINTF(_L8("COmxILPortManager::AddPort"));
-
-	__ASSERT_ALWAYS(aPort, User::Panic(KOmxILPortManagerPanicCategory, 1));
-
-	if (iAllPorts.Count() >= (iAudioParamInit.nPorts +
-							  iVideoParamInit.nPorts +
-							  iImageParamInit.nPorts +
-							  iOtherParamInit.nPorts))
-		{
-		return KErrArgument;
-		}
-
-	if (aPort->Direction() != aDirection)
-		{
-		return KErrArgument;
-		}
-
-	if (iAllPorts.Find(aPort) != KErrNotFound)
-		{
-		return KErrArgument;
-		}
-
-	TRAPD(err, AppendPortL(aPort));
-	if (KErrNone != err)
-		{
-		return err;
-		}
-
-	OMX_ERRORTYPE omxRetValue =
-		aPort->GetLocalOmxParamIndexes(ManagedParamIndexes());
-	if (OMX_ErrorNone == omxRetValue)
-		{
-		omxRetValue = aPort->GetLocalOmxConfigIndexes(ManagedConfigIndexes());
-		}
-
-	if (OMX_ErrorNone != omxRetValue)
-		{
-		if (OMX_ErrorInsufficientResources == omxRetValue)
-			{
-			return KErrNoMemory;
-			}
-		else
-			{
-			return KErrGeneral;
-			}
-		}
-
-	// Here, let's register this port into the call back manager so buffer
-	// marks can be propagated to the right port...
-	const OMX_U32 propagationPortIndex = aPort->BufferMarkPropagationPort();
-	if (propagationPortIndex != COmxILPort::KBufferMarkPropagationPortNotNeeded)
-		{
-		omxRetValue = iCallbacks.RegisterBufferMarkPropagationPort(aPort->Index(),
-													 propagationPortIndex);
-		}
-
-	err = KErrNone;
-	if (OMX_ErrorNone != omxRetValue)
-		{
-		switch (omxRetValue)
-				{
-			case OMX_ErrorInsufficientResources:
-				{
-				err = KErrNoMemory;
-				}
-				break;
-			default:
-				{
-				err = KErrGeneral;
-				}
-				};
-		}
-
-	return err;
-
-	}
-
-TBool
-COmxILPortManager::RemoveBuffersFromPfOrCm(
-	COmxILPort* apPort, OMX_BOOL aRemoveFromPfOnly /* = OMX_FALSE */) const
-	{
-	__ASSERT_DEBUG(apPort, User::Panic(KOmxILPortManagerPanicCategory, 1));
-    DEBUG_PRINTF3(_L8("COmxILPortManager::RemoveBuffersFromPfOrCm: PORT[%d] aRemoveFromPfOnly[%s] "),
-				  apPort->Index(), aRemoveFromPfOnly ? "TRUE" : "FALSE");
-
-	const TInt headerCount = apPort->Count();
-	OMX_BUFFERHEADERTYPE* pHeader = 0;
-	TBool allHeadersRemovedFromPf = ETrue;
-	for (TInt j=0; j<headerCount; ++j)
-		{
-		pHeader = (*apPort)[j];
-		if (!apPort->IsBufferAtHome(pHeader))
-			{
-			// Tell the PF to remove this header from its queues...
-			if (!iProcessingFunction.BufferRemovalIndication(
-					pHeader,
-					apPort->Direction()))
-				{
-				if (OMX_FALSE == aRemoveFromPfOnly)
-					{
-					if (!iCallbacks.BufferRemovalIndication(
-							pHeader,
-							apPort->Direction()))
-						{
-						allHeadersRemovedFromPf = EFalse;
-						}
-					else
-						{
-						apPort->SetBufferReturned(pHeader);
-						// Make sure the buffer contents are cleared
-						TOmxILUtil::ClearBufferContents(pHeader);
-						}
-					}
-				}
-			else
-				{
-				apPort->SetBufferReturned(pHeader);
-				// Make sure the buffer contents are cleared
-				TOmxILUtil::ClearBufferContents(pHeader);
-				}
-			}
-		}
-
-	return allHeadersRemovedFromPf;
-
-	}
-
-OMX_ERRORTYPE
-COmxILPortManager::GetParameter(OMX_INDEXTYPE aParamIndex,
-								TAny* apComponentParameterStructure) const
-	{
-    DEBUG_PRINTF(_L8("COmxILPortManager::GetParameter"));
-
-	TInt index = FindParamIndex(aParamIndex);
-	if (KErrNotFound == index)
-		{
-		return OMX_ErrorUnsupportedIndex;
-		}
-
-	OMX_ERRORTYPE omxRetValue = OMX_ErrorNone;
-	switch(aParamIndex)
-		{
-	case OMX_IndexParamAudioInit:
-	case OMX_IndexParamImageInit:
-	case OMX_IndexParamVideoInit:
-	case OMX_IndexParamOtherInit:
-		{
-		if (OMX_ErrorNone !=
-			(omxRetValue =
-			 TOmxILUtil::CheckOmxStructSizeAndVersion(
-				 const_cast<OMX_PTR>(apComponentParameterStructure),
-				 sizeof(OMX_PORT_PARAM_TYPE))))
-			{
-			return omxRetValue;
-			}
-
-		OMX_PORT_PARAM_TYPE*
-			pPortParamType
-			= static_cast<OMX_PORT_PARAM_TYPE*>(
-				apComponentParameterStructure);
-
-		switch(aParamIndex)
-			{
-		case OMX_IndexParamAudioInit:
-			*pPortParamType = iAudioParamInit;
-			break;
-		case OMX_IndexParamImageInit:
-			*pPortParamType = iImageParamInit;
-			break;
-		case OMX_IndexParamVideoInit:
-			*pPortParamType = iVideoParamInit;
-			break;
-		case OMX_IndexParamOtherInit:
-			*pPortParamType = iOtherParamInit;
-			break;
-			}
-
-		}
-		break;
-
-	default:
-		{
-		// Obtain the port index
-		OMX_U32 portIndex;
-		if (OMX_ErrorNone != GetPortIndexFromOmxStruct(
-				apComponentParameterStructure,
-				portIndex))
-			{
-			return OMX_ErrorBadPortIndex;
-			}
-
-		// Now delegate to the specific port
-		return iAllPorts[portIndex]->GetParameter(
-			aParamIndex,
-			apComponentParameterStructure);
-		}
-		};
-
-	return OMX_ErrorNone;
-
-	}
-
-OMX_ERRORTYPE
-COmxILPortManager::SetParameter(OMX_INDEXTYPE aParamIndex,
-								const TAny* apComponentParameterStructure,
-								OMX_BOOL aPortIsDisabled /* = OMX_FALSE */ )
-	{
-    DEBUG_PRINTF(_L8("COmxILPortManager::SetParameter"));
-
-	TInt index = FindParamIndex(aParamIndex);
-	if (KErrNotFound == index)
-		{
-		return OMX_ErrorUnsupportedIndex;
-		}
-
-	// Obtain the port index
-	OMX_U32 portIndex;
-	if (OMX_ErrorNone != GetPortIndexFromOmxStruct(
-			apComponentParameterStructure,
-			portIndex))
-		{
-		return OMX_ErrorBadPortIndex;
-		}
-
-	// Grab the port here...
-	COmxILPort* pPort = iAllPorts[portIndex];
-
-	if (OMX_TRUE == aPortIsDisabled &&
-		pPort->IsEnabled() &&
-		!pPort->IsTransitioningToEnabled())
-		{
-		// There is an indication from the FSM that the port must be disabled,
-		// otherwise, this is not allowed in the current state.
-		return OMX_ErrorIncorrectStateOperation;
-		}
-
-	OMX_ERRORTYPE omxRetValue = OMX_ErrorNone;
-	switch(aParamIndex)
-		{
-	case OMX_IndexParamAudioInit:
-	case OMX_IndexParamVideoInit:
-	case OMX_IndexParamImageInit:
-	case OMX_IndexParamOtherInit:
-		{
-		// Don't allow changes in the OMX_PORT_PARAM_TYPE structure
-		return OMX_ErrorUnsupportedIndex;
-		}
-	default:
-		{
-		TBool updateProcessingFunction = EFalse;
-		omxRetValue =
-			pPort->SetParameter(
-				aParamIndex,
-				apComponentParameterStructure,
-				updateProcessingFunction);
-
-		if (OMX_ErrorNone == omxRetValue)
-			{
-			if (updateProcessingFunction)
-				{
-				omxRetValue = iProcessingFunction.ParamIndication(
-					aParamIndex,
-					apComponentParameterStructure);
-				}
-			}
-
-		}
-		};
-
-	return omxRetValue;
-
-	}
-
-OMX_ERRORTYPE
-COmxILPortManager::GetConfig(OMX_INDEXTYPE aConfigIndex,
-							 TAny* apComponentConfigStructure) const
-	{
-    DEBUG_PRINTF(_L8("COmxILPortManager::GetConfig"));
-
-	TInt index = FindConfigIndex(aConfigIndex);
-	if (KErrNotFound == index)
-		{
-		return OMX_ErrorUnsupportedIndex;
-		}
-
-	// Obtain the port index
-	OMX_U32 portIndex;
-	if (OMX_ErrorNone != GetPortIndexFromOmxStruct(apComponentConfigStructure,
-												   portIndex))
-		{
-		return OMX_ErrorBadPortIndex;
-		}
-
-	// Now delegate to the specific port
-	return iAllPorts[portIndex]->GetConfig(
-		aConfigIndex,
-		apComponentConfigStructure);
-
-	}
-
-OMX_ERRORTYPE
-COmxILPortManager::SetConfig(OMX_INDEXTYPE aConfigIndex,
-							 const TAny* apComponentConfigStructure)
-	{
-    DEBUG_PRINTF(_L8("COmxILPortManager::SetConfig"));
-
-	TInt index = FindConfigIndex(aConfigIndex);
-	if (KErrNotFound == index)
-		{
-		return OMX_ErrorUnsupportedIndex;
-		}
-
-	// Obtain the port index
-	OMX_U32 portIndex;
-	if (OMX_ErrorNone != GetPortIndexFromOmxStruct(apComponentConfigStructure,
-												   portIndex))
-		{
-		return OMX_ErrorBadPortIndex;
-		}
-
-	TBool updateProcessingFunction = EFalse;
-	OMX_ERRORTYPE omxRetValue =
-		iAllPorts[portIndex]->SetConfig(
-			aConfigIndex,
-			apComponentConfigStructure,
-			updateProcessingFunction);
-
-	if (OMX_ErrorNone == omxRetValue)
-		{
-		if (updateProcessingFunction)
-			{
-			omxRetValue = iProcessingFunction.ConfigIndication(
-				aConfigIndex,
-				apComponentConfigStructure);
-			}
-		}
-
-	return omxRetValue;
-
-	}
-
-OMX_ERRORTYPE
-COmxILPortManager::GetExtensionIndex(
-	OMX_STRING aParameterName,
-	OMX_INDEXTYPE* apIndexType) const
-	{
-    DEBUG_PRINTF(_L8("COmxILPortManager::GetExtensionIndex"));
-
-	// See if the extension index is supported by any of the ports...
-	const TInt portCount = iAllPorts.Count();
-	OMX_ERRORTYPE retValue = OMX_ErrorNone;
-	for (TUint i = 0; i< portCount; ++i)
-		{
-		retValue = iAllPorts[i]->GetExtensionIndex(aParameterName,
-												   apIndexType);
-		if (retValue != OMX_ErrorUnsupportedIndex)
-			{
-			return retValue;
-			}
-		}
-
-	return OMX_ErrorUnsupportedIndex;
-
-	}
-
-OMX_ERRORTYPE
-COmxILPortManager::PopulateBuffer(OMX_BUFFERHEADERTYPE** appBufferHdr,
-								  OMX_U32 aPortIndex,
-								  OMX_PTR apAppPrivate,
-								  OMX_U32 aSizeBytes,
-								  OMX_U8* apBuffer,
-								  TBool& portPopulationCompleted,
-								  OMX_BOOL aPortIsDisabled /* = OMX_FALSE */ )
-	{
-    DEBUG_PRINTF(_L8("COmxILPortManager::PopulateBuffer"));
-
-	// Check the index of the port..
-	if (CheckPortIndex(aPortIndex) != OMX_ErrorNone)
-		{
-		return OMX_ErrorBadPortIndex;
-		}
-
-	// Grab the port here...
-	COmxILPort* pPort = iAllPorts[aPortIndex];
-
-	if (OMX_TRUE == aPortIsDisabled &&
-		pPort->IsEnabled() &&
-		!pPort->IsTransitioningToEnabled())
-		{
-		// There is an indication from the FSM that the port must be disabled,
-		// otherwise, the buffer allocation is not allowed in the current
-		// state. Note that a port may be transitioning to enabled and in that
-		// case the buffer population must be allowed...
-		return OMX_ErrorIncorrectStateOperation;
-		}
-
-	// Check that in case of tunnelling, this port is not buffer supplier...
-	if (pPort->IsTunnelledAndBufferSupplier())
-		{
-		return OMX_ErrorBadPortIndex;
-		}
-
-	// Now delegate to the port...
-	OMX_ERRORTYPE omxRetValue;
-	if (OMX_ErrorNone != (omxRetValue = pPort->PopulateBuffer(
-							  appBufferHdr,
-							  apAppPrivate,
-							  aSizeBytes,
-							  apBuffer,
-							  portPopulationCompleted)))
-		{
-		return omxRetValue;
-		}
-
-	if (portPopulationCompleted && pPort->IsTransitioningToEnabled())
-		{
-		// This is a case of port being enabled...  Inform the port that it
-		// has been enabled..
-		pPort->SetTransitionToEnabledCompleted();
-
-		// For each enabled port, the IL Client must be notified with an
-		// enabled completion event...
-		omxRetValue = iCallbacks.CommandCompleteNotification(
-			OMX_CommandPortEnable, pPort->Index());
-		}
-
-	return omxRetValue;
-
-	}
-
-
-OMX_ERRORTYPE
-COmxILPortManager::FreeBuffer(OMX_U32 aPortIndex,
-							  OMX_BUFFERHEADERTYPE* apBufferHeader,
-							  TBool& portDepopulationCompleted,
-							  OMX_BOOL aPortIsDisabled /* = OMX_FALSE */)
-	{
-    DEBUG_PRINTF2(_L8("COmxILPortManager::FreeBuffer : BUFFER [%X]"), apBufferHeader);
-
-	// Check the index of the port..
-	if (CheckPortIndex(aPortIndex) != OMX_ErrorNone)
-		{
-		return OMX_ErrorBadPortIndex;
-		}
-
-	// Grab the port here...
-	COmxILPort* pPort = iAllPorts[aPortIndex];
-
-	// Check that in case of tunnelling, this port is not buffer supplier...
-	if (pPort->IsTunnelledAndBufferSupplier())
-		{
-		return OMX_ErrorBadPortIndex;
-		}
-
-	TBool errorPortUnpopulated = EFalse;
-	if (OMX_TRUE == aPortIsDisabled &&
-		pPort->IsEnabled())
-		{
-		// There is an indication from the FSM that the port should be
-		// disabled. If that's not the case, the buffer deallocation will raise
-		// an OMX_ErrorPortUnpopulated error in the current state.
-
-		if (!pPort->IsBufferAtHome(apBufferHeader))
-			{
-			// FreeBuffer will normally be called in a situation where we are
-			// not suppliers and the supplier already got the buffer. So the
-			// buffer won't be on our side almost never.
-
-			if (!iTimePorts[aPortIndex] || !iImmediateReturnTimeBuffer)
-				{
-				// We'll tell the PF to remove this
-				// header from its queues, in case this is called in some strange
-				// situation (should not happen if the tunnelled component is well
-				// behaved)...
-				iProcessingFunction.BufferRemovalIndication(
-					apBufferHeader,
-					pPort->Direction());
-				}
-
-			// Set the returned flag as this buffer will not count as "away"
-			// anymore...
-			pPort->SetBufferReturned(apBufferHeader);
-			}
-
-		// We have to send the Port Unpopulated Error...
-		errorPortUnpopulated = ETrue;
-		}
-
-	OMX_ERRORTYPE omxRetValue = OMX_ErrorNone;
-	// Now delegate to the port...
-	if (OMX_ErrorNone != (omxRetValue = pPort->FreeBuffer(
-							  apBufferHeader,
-							  portDepopulationCompleted)))
-		{
-		return omxRetValue;
-		}
-
-	if (errorPortUnpopulated)
-		{
-		if (OMX_ErrorNone !=
-			(omxRetValue =
-			 iCallbacks.ErrorEventNotification(OMX_ErrorPortUnpopulated)))
-			{
-			return omxRetValue;
-			}
-		}
-
-
-	if (portDepopulationCompleted)
-		{
-		if (pPort->IsTransitioningToDisabled())
-			{
-			// Here we must complete the OMX_CommandPortDisable command
-
-			// Set the state of the port to  disabled as the command has already
-			// completed...
-			pPort->SetTransitionToDisabledCompleted();
-
-			// For each disabled port, the IL Client must be notified
-			// with a disabled completion event...
-			omxRetValue = iCallbacks.CommandCompleteNotification(
-				OMX_CommandPortDisable, aPortIndex);
-
-			// Clear this flag here. Otherwise, the FSM would inform the client
-			// of a successful transition to OMX_StateIdle which is not the
-			// case...
-			portDepopulationCompleted = EFalse;
-			}
-		}
-
-	return omxRetValue;
-
-	}
-
-OMX_ERRORTYPE
-COmxILPortManager::TunnelRequest(OMX_U32 aPortIndex,
-								 OMX_HANDLETYPE aTunneledComp,
-								 OMX_U32 aTunneledPort,
-								 OMX_TUNNELSETUPTYPE* apTunnelSetup,
-								 OMX_BOOL aPortIsDisabled /* = OMX_FALSE */)
-	{
-    DEBUG_PRINTF3(_L8("COmxILPortManager::TunnelRequest : aTunneledComp [%X] aTunneledPort [%d]"), aTunneledComp, aTunneledPort);
-
-	// Check the index of the port..
-	if (CheckPortIndex(aPortIndex) != OMX_ErrorNone)
-		{
-		return OMX_ErrorBadPortIndex;
-		}
-
-	// Grab the port here...
-	COmxILPort* pPort = iAllPorts[aPortIndex];
-
-	if (OMX_TRUE == aPortIsDisabled &&
-		pPort->IsEnabled())
-		{
-		// There is an indication from the FSM that the port must be disabled,
-		// otherwise, the tunnel request is not allowed in the current state.
-		return OMX_ErrorIncorrectStateOperation;
-		}
-
-	OMX_ERRORTYPE omxRetValue = OMX_ErrorNone;
-	// Check whether the tunnel is being torn down...
-	if (!aTunneledComp)
-		{
-		// Tell the port...
-		if (OMX_ErrorNone !=
-			(omxRetValue = pPort->TunnelRequest(
-				aTunneledComp,
-				aTunneledPort,
-				apTunnelSetup)))
-			{
-			return omxRetValue;
-			}
-
-		if (OMX_ErrorNone !=
-			(omxRetValue = iCallbacks.DeregisterTunnelCallback(aPortIndex)))
-			{
-			// This is serious enough...
-			return OMX_ErrorInvalidComponent;
-			}
-
-		// We are done here...
-		return OMX_ErrorNone;
-		}
-
-	// Check whether the port is being re-tunnelled...
-	if (pPort->IsTunnelled())
-		{
-		// Only two valid options here:
-		// 1.- The port is completely disabled...
-		// or...
-		// 2.- The port is enabled AND component in OMX_StateLoaded
-		if ((!pPort->IsEnabled() &&
-			 !pPort->IsTransitioningToEnabled() &&
-			 !pPort->IsTransitioningToDisabled())
-			||
-			(pPort->IsEnabled() && !aPortIsDisabled))
-			{
-			if (OMX_ErrorNone !=
-				(omxRetValue = iCallbacks.DeregisterTunnelCallback(aPortIndex)))
-				{
-				return OMX_ErrorInvalidComponent;
-				}
-			}
-		else
-			{
-			return OMX_ErrorIncorrectStateOperation;
-			}
-		}
-
-	// Delegate to the port...
-	if (OMX_ErrorNone !=
-		(omxRetValue = pPort->TunnelRequest(
-			aTunneledComp,
-			aTunneledPort,
-			apTunnelSetup)))
-		{
-		return omxRetValue;
-		}
-
-	// From this point on, the port will assume that a tunnel has been
-	// successfully created. If there is a problem at other end, the IL Client
-	// will clear the tunnel on this side using ComponentTunnelRequest with
-	// NULL handle parameter
-
-	// Register the existence of a tunnel within the callback manager...
-	if (OMX_ErrorNone !=
-		(omxRetValue = iCallbacks.RegisterTunnelCallback(aPortIndex,
-													  pPort->Direction(),
-													  aTunneledComp,
-													  aTunneledPort)))
-		{
-		// This is serious enough...
-		return OMX_ErrorInvalidComponent;
-		}
-
-	return OMX_ErrorNone;
-
-	}
-
-
-OMX_ERRORTYPE
-COmxILPortManager::TunnellingBufferAllocation(TBool& aComponentPopulationCompleted,
-											  TUint32 aPortIndex /* = OMX_ALL */)
-	{
-    DEBUG_PRINTF(_L8("COmxILPortManager::TunnellingBufferAllocation"));
-
-	aComponentPopulationCompleted = EFalse;
-
-	// Check the index of the port..
-	if ((OMX_ALL != aPortIndex) && (CheckPortIndex(aPortIndex) != OMX_ErrorNone))
-		{
-		return OMX_ErrorBadPortIndex;
-		}
-
-	const TInt portCount = iAllPorts.Count();
-	COmxILPort* pPort = 0;
-	OMX_U32 portIndex = 0;
-	TInt i=0;
-	OMX_ERRORTYPE omxRetValue = OMX_ErrorNone;
-	do
-		{
-		if (aPortIndex != OMX_ALL)
-			{
-			// Grab the port here...
-			pPort = iAllPorts[aPortIndex];
-			portIndex = aPortIndex;
-			}
-		else
-			{
-			pPort = iAllPorts[i];
-			portIndex = pPort->Index();
-			}
-
-
-		if (pPort->IsEnabled() &&
-			pPort->IsTunnelledAndBufferSupplier() &&
-			!pPort->IsPopulated())
-			{
-			TBool portPopulationCompleted = EFalse;
-			if (OMX_ErrorNone !=
-				(omxRetValue = pPort->PopulateTunnel(portPopulationCompleted)))
-				{
-				// TODO: Check case of ports being enabled (error callback needed...)
-				return omxRetValue;
-				}
-
-			if (portPopulationCompleted && pPort->IsTransitioningToEnabled())
-				{
-				// This is a case of port being enabled...  Inform the port that it
-				// has been enabled..
-				pPort->SetTransitionToEnabledCompleted();
-
-				// For each enabled port, the IL Client must be notified with an
-				// enabled completion event...
-				if (OMX_ErrorNone != (
-						omxRetValue = iCallbacks.CommandCompleteNotification(
-							OMX_CommandPortEnable, portIndex)))
-					{
-					return omxRetValue;
-					}
-				}
-
-			}
-
-		// Increment loop counter
-		++i;
-		}
-	while (OMX_ALL == aPortIndex && i < portCount);
-
-	if (AllPortsPopulated())
-		{
-		DEBUG_PRINTF(_L8("COmxILPortManager::TunnellingBufferAllocation : AllPortsPopulated : [TRUE]"));
-		aComponentPopulationCompleted = ETrue;
-		}
-
-	return OMX_ErrorNone;
-
-	}
-
-OMX_ERRORTYPE
-COmxILPortManager::TunnellingBufferDeallocation(
-	TBool& aComponentDepopulationCompleted)
-	{
-    DEBUG_PRINTF(_L8("COmxILPortManager::TunnellingBufferDeallocation"));
-
-	aComponentDepopulationCompleted = EFalse;
-
-	const TInt portCount = iAllPorts.Count();
-	COmxILPort* pPort = 0;
-	TInt portDepopulationCounter = 0;
-	OMX_ERRORTYPE omxRetValue = OMX_ErrorNone;
-	TBool portDepopulationCompleted = EFalse;
-	for (TInt i=0; i<portCount; ++i)
-		{
-		pPort = iAllPorts[i];
-		if (pPort->IsEnabled() && pPort->IsTunnelledAndBufferSupplier())
-			{
-			// TODO: Check that at this point, the ProcessingFunction must not
-			// hold any buffer header...
-			portDepopulationCompleted = EFalse;
-			if (OMX_ErrorNone !=
-				(omxRetValue = pPort->FreeTunnel(portDepopulationCompleted)))
-				{
-				return omxRetValue;
-				}
-
-			if (pPort->IsDePopulated())
-				{
-				portDepopulationCounter++;
-				}
-			}
-		}
-
-	if (AllPortsDePopulated())
-		{
-		DEBUG_PRINTF(_L8("COmxILPortManager::TunnellingBufferDeallocation : AllPortsDepopulated : [TRUE]"));
-		aComponentDepopulationCompleted = ETrue;
-		}
-
-	return OMX_ErrorNone;
-
-	}
-
-OMX_ERRORTYPE
-COmxILPortManager::InitiateTunnellingDataFlow(OMX_U32 aPortIndex /* = OMX_ALL */)
-	{
-    DEBUG_PRINTF2(_L8("COmxILPortManager::InitiateTunnellingDataFlow : PORT[%d]"), aPortIndex);
-
-	// Check the index of the port..
-	if ((OMX_ALL != aPortIndex) && (CheckPortIndex(aPortIndex) != OMX_ErrorNone))
-		{
-		return OMX_ErrorBadPortIndex;
-		}
-
-	// This is an indication that the component is ready to start exchanging
-	// buffers... Supplier tunnelled ports must initiate the buffer exchange in
-	// the tunnel...
-	const TInt portCount = iAllPorts.Count();
-	COmxILPort* pPort = 0;
-	OMX_U32 portIndex = 0;
-	TInt i=0;
-	do
-		{
-		if (aPortIndex != OMX_ALL)
-			{
-			// Grab the port here...
-			pPort = iAllPorts[aPortIndex];
-			portIndex = aPortIndex;
-			}
-		else
-			{
-			pPort = iAllPorts[i];
-			portIndex = pPort->Index();
-			}
-
-		if (pPort->IsEnabled() && pPort->IsTunnelledAndBufferSupplier())
-			{
-			const TInt headerCount = pPort->Count();
-			OMX_BUFFERHEADERTYPE* pHeader = 0;
-			OMX_DIRTYPE portDir = OMX_DirMax;
-			OMX_ERRORTYPE omxRetValue = OMX_ErrorNone;
-			for (TInt j=0; j<headerCount; ++j)
-				{
-				// Here, there are two options:
-				//
-				// 1. -The port is an input port, in which case, the buffer is
-				// directly sent to the callback manager which in turn sends it
-				// to the tunnelled component in charge of filling it
-				// (OMX_FillThisBuffer)
-				//
-				// 2.- The port is an output port, and the buffer must be sent
-				// to the processing function to be filled before the buffer
-				// can be sent to the tunnelled component. After that, the proc
-				// function will send the buffer to the call back manager to be
-				// sent to the tunnelled component (OMX_EmptyThisBuffer)...
-				pHeader = (*pPort)[j];
-
-				// Check that we actually have the buffer in our side...
-				if (!pPort->IsBufferAtHome(pHeader))
-					{
-					DEBUG_PRINTF2(_L8("COmxILPortManager::InitiateTunnellingDataFlow : BUFFER HEADER[%X] is not at home"),
-								  pHeader);
-					continue;
-					}
-
-				portDir = pPort->Direction();
-				__ASSERT_DEBUG((OMX_DirInput == portDir ||
-								OMX_DirOutput == portDir),
-							   User::Panic(KOmxILPortManagerPanicCategory, 1));
-
-				if (OMX_DirInput == portDir)
-					{
-					// Input port -> Send buffer to callback manager...
-					omxRetValue =
-						iCallbacks.BufferDoneNotification(pHeader,
-														  portIndex,
-														  portDir);
-					}
-				else
-					{
-					// Output port -> Send buffer to processing function...
-					omxRetValue =
-						iProcessingFunction.BufferIndication(pHeader,
-															 portDir);
-					}
-
-				if (omxRetValue != OMX_ErrorNone)
-					{
-					return omxRetValue;
-					}
-
-				// Inform the port that one of its buffers has been sent
-				// away...
-				TBool bufferMarkedWithOwnMark = EFalse;
-				if (!pPort->SetBufferSent(pHeader, bufferMarkedWithOwnMark))
-					{
-					// The buffer header was not found...
-					return OMX_ErrorBadParameter;
-					}
-
-				// For each MarkBuffer command processed, the IL Client must be notified
-				// with an OMX_EventCommandComplete event...
-				if (bufferMarkedWithOwnMark)
-					{
-					if (OMX_ErrorNone !=
-						(omxRetValue = iCallbacks.CommandCompleteNotification(
-							OMX_CommandMarkBuffer, portIndex)))
-						{
-						return omxRetValue;
-						}
-					}
-
-				} // for (TInt j=0; j<headerCount; j++)
-			} // if (pPort->IsEnabled() && pPort->IsTunnelledAndBufferSupplier())
-
-		// Increment loop counter
-		++i;
-		}
-	while(OMX_ALL == aPortIndex && i < portCount);
-
-	return OMX_ErrorNone;
-
-	}
-
-OMX_ERRORTYPE
-COmxILPortManager::BufferIndication(
-	OMX_BUFFERHEADERTYPE* apBufferHeader,
-	OMX_DIRTYPE aDirection,
-	OMX_BOOL aPortIsDisabled /* = OMX_FALSE */)
-	{
-    DEBUG_PRINTF2(_L8("COmxILPortManager::BufferIndication : BUFFER [%X]"), apBufferHeader);
-
-	OMX_U32 portIndex = aDirection == OMX_DirInput ?
-		apBufferHeader->nInputPortIndex : apBufferHeader->nOutputPortIndex;
-
-	// Check the index of the port..
-	if (CheckPortIndex(portIndex) != OMX_ErrorNone)
-		{
-		return OMX_ErrorBadPortIndex;
-		}
-
-	// Grab the port here...
-	COmxILPort* pPort = iAllPorts[portIndex];
-
-	// Check that port direction is the correct one...
-	if (pPort->Direction() != aDirection)
-		{
-		return OMX_ErrorBadPortIndex;
-		}
-
-	if (!pPort->IsEnabled() &&
-		!pPort->IsTransitioningToDisabled() &&
-		!pPort->IsTransitioningToEnabled())
-		{
-		return OMX_ErrorIncorrectStateOperation;
-		}
-
-	// Check port enabled property...
-	if (OMX_TRUE == aPortIsDisabled &&
-		pPort->IsEnabled())
-		{
-		// There is an indication from the FSM that the port must be disabled,
-		// otherwise, the buffer indication is not allowed in the current
-		// state.
-		return OMX_ErrorIncorrectStateOperation;
-		}
-
-	OMX_ERRORTYPE omxRetValue = OMX_ErrorNone;
-	// Check whether this port is a buffer supplier...
-	if (pPort->IsTunnelledAndBufferSupplier() &&
-		pPort->IsTransitioningToDisabled())
-		{
-		// Set the state of the port to disabled as the command has already
-		// completed...
-		if (!pPort->SetBufferReturned(apBufferHeader))
-			{
-			// The buffer header was not found...
-			return OMX_ErrorBadParameter;
-			}
-
-		if (pPort->HasAllBuffersAtHome())
-			{
-			// All buffers at home.. we can initiate here the
-			// depopulation of the tunnel...
-			TBool portDepopulationCompleted = EFalse;
-			if (OMX_ErrorNone !=
-				(omxRetValue = pPort->FreeTunnel(portDepopulationCompleted)))
-				{
-				return omxRetValue;
-				}
-
-			// Inform the port that the disabled command has
-			// completed...
-			pPort->SetTransitionToDisabledCompleted();
-
-			// For each disabled port, the IL Client must be notified
-			// with a port disabled completion event...
-			if (OMX_ErrorNone !=
-				(omxRetValue = iCallbacks.CommandCompleteNotification(
-					OMX_CommandPortDisable, portIndex)))
-				{
-				return omxRetValue;
-				}
-			}
-
-		// Make sure the buffer contents are cleared...
-		TOmxILUtil::ClearBufferContents(apBufferHeader);
-
-		// ... we are done.. no need to send the buffer to the
-		// processing function...
-		return OMX_ErrorNone;
-
-		} // if (pPort->IsTransitioningToDisabled())
-
-
-	// Inform the port that one of its buffers is going to be sent to the
-	// processing function (exception applies to OMX_PortDomainOther ports) ... 
-	// The port will also mark this buffer if the port
-	// has pending marks to be signalled... The buffer marks are finally
-	// processed/propagated by the callback manager once the buffer has been
-	// consumed by the processing function...
-	TBool bufferMarkedWithOwnMark = EFalse;
-	if (!pPort->SetBufferSent(apBufferHeader, bufferMarkedWithOwnMark))
-		{
-		return OMX_ErrorBadParameter;
-		}
-
-	// For each MarkBuffer command processed, the IL Client must be notified
-	// with an OMX_EventCommandComplete event...
-	if (bufferMarkedWithOwnMark)
-		{
-		if (OMX_ErrorNone !=
-			(omxRetValue = iCallbacks.CommandCompleteNotification(
-				OMX_CommandMarkBuffer, portIndex)))
-			{
-			return omxRetValue;
-			}
-		}
-
-	if (iImmediateReturnTimeBuffer && iTimePorts[portIndex])
-		{
-		// OMX_OTHER_FormatTime ports (such as COmxILClientClockPort) needs
-		// to return the buffer sooner to the buffer supplier component
-		OMX_TIME_MEDIATIMETYPE* pMediaTime =
-			reinterpret_cast<OMX_TIME_MEDIATIMETYPE*>(apBufferHeader->pBuffer);
-
-		OMX_TIME_MEDIATIMETYPE timeInfo;
-		if (pMediaTime)
-			{
-			timeInfo = *pMediaTime;
-			}
-
-		// Return the buffer (send the Buffer Done notification) via callback now.
-		apBufferHeader->nFilledLen = 0;
-
-		OMX_ERRORTYPE err = iCallbacks.ClockBufferDoneNotification(
-			apBufferHeader, portIndex, aDirection);
-
-		if (err != OMX_ErrorNone)
-			{
-			return err;
-			}
-
-		if (pMediaTime)
-			{
-			// Send time update to the processing function
-			err = iProcessingFunction.MediaTimeIndication(timeInfo);
-			}
-
-		__ASSERT_DEBUG(err != OMX_ErrorNotImplemented,
-					   User::Panic(KOmxILPortManagerPanicCategory, 1));
-
-		return err;
-		}
-	
-	return iProcessingFunction.BufferIndication(apBufferHeader,
-												aDirection);
-	}
-
-
-OMX_ERRORTYPE
-COmxILPortManager::BufferReturnIndication(
-	OMX_BUFFERHEADERTYPE* apBufferHeader,
-	OMX_DIRTYPE aDirection,
-	TBool& aAllBuffersReturned)
-	{
-    DEBUG_PRINTF2(_L8("COmxILPortManager::BufferReturnIndication : [%X]"), apBufferHeader);
-
-	aAllBuffersReturned = EFalse;
-
-	OMX_U32 portIndex = aDirection == OMX_DirInput ?
-		apBufferHeader->nInputPortIndex : apBufferHeader->nOutputPortIndex;
-
-	// Check the index of the port..
-	if (CheckPortIndex(portIndex) != OMX_ErrorNone)
-		{
-		return OMX_ErrorBadPortIndex;
-		}
-
-	// Grab the port here...
-	COmxILPort* pPort = iAllPorts[portIndex];
-
-	// Check that port direction is the correct one...
-	if (pPort->Direction() != aDirection)
-		{
-		return OMX_ErrorBadPortIndex;
-		}
-
-
-	if (!pPort->IsEnabled())
-		{
-		return OMX_ErrorBadPortIndex;
-		}
-
-	// Check that this port must be buffer supplier...
-	if (!pPort->IsTunnelledAndBufferSupplier())
-		{
-		return OMX_ErrorBadPortIndex;
-		}
-
-	// Inform the port that a buffer has returned...
-	if (!pPort->SetBufferReturned(apBufferHeader))
-		{
-		// The buffer header was not found...
-		return OMX_ErrorBadParameter;
-		}
-
-	// Make sure the buffer contents are cleared...
-	TOmxILUtil::ClearBufferContents(apBufferHeader);
-
-	if (pPort->HasAllBuffersAtHome())
-		{
-		aAllBuffersReturned = ETrue;
-		}
-
-	return OMX_ErrorNone;
-
-	}
-
-OMX_ERRORTYPE
-COmxILPortManager::BufferFlushIndicationFlushCommand(
-	TUint32 aPortIndex, TBool aEjectBuffers /* = ETrue */)
-	{
-    DEBUG_PRINTF2(_L8("COmxILPortManager::BufferFlushIndicationFlushCommand PORT[%d]"), aPortIndex);
-
-	// Check the index of the port..
-	if ((OMX_ALL != aPortIndex) && (CheckPortIndex(aPortIndex) != OMX_ErrorNone))
-		{
-		return OMX_ErrorBadPortIndex;
-		}
-
-	OMX_ERRORTYPE omxRetValue = OMX_ErrorNone;
-	RPointerArray<COmxILPort> portsToFlush;
-	RPointerArray<COmxILPort> portsToNotify;
-	const TInt portCount = iAllPorts.Count();
-	COmxILPort* pPort = 0;
-	TInt i=0;
-	TBool flushSuccessful;
-	do
-		{
-		flushSuccessful = ETrue;
-		if (aPortIndex != OMX_ALL)
-			{
-			// Grab the port here...
-			pPort = iAllPorts[aPortIndex];
-			}
-		else
-			{
-			pPort = iAllPorts[i];
-			}
-
-		if (pPort->IsEnabled() && pPort->Count())
-			{
-			if (pPort->IsTunnelledAndBufferSupplier() &&
-				!pPort->HasAllBuffersAtHome())
-				{
-				// Remove buffers from PF only...
-				RemoveBuffersFromPfOrCm(pPort, OMX_TRUE);
-
-				if (aEjectBuffers)
-					{
-					// Now we need to send input buffers upstream and ouput
-					// buffers to the PF...
-					if ((omxRetValue = InitiateTunnellingDataFlow())
-						!= OMX_ErrorNone)
-						{
-						// The flush has failed, we need to notify the IL Cient
-						// via EventHandler...
-						iCallbacks.ErrorEventNotification(omxRetValue);
-						flushSuccessful = EFalse;
-						}
-					}
-
-				}
-			else
-				{
-				portsToFlush.Append(pPort);
-				}
-			}
-		// Notify flushing completed, even if there was nothing to
-		// flush...
-		if (flushSuccessful)
-			{
-			portsToNotify.Append(pPort);
-			}
-
-		// Increment loop counter
-		++i;
-		}
-	while(OMX_ALL == aPortIndex && i < portCount);
-
-	const TInt flushCount = portsToFlush.Count();
-	const TInt notifyCount = portsToNotify.Count();
-
-
-	if (iAllPorts.Count() == flushCount)
-		{
-		omxRetValue = iProcessingFunction.BufferFlushingIndication(
-			OMX_ALL,
-			OMX_DirMax);
-		}
-	else
-		{
-		for (i=0; i<flushCount && OMX_ErrorNone == omxRetValue; ++i)
-			{
-			pPort = portsToFlush[i];
-			omxRetValue = iProcessingFunction.BufferFlushingIndication(
-				pPort->Index(),
-				pPort->Direction());
-			}
-		}
-
-	for (i=0; i<notifyCount && OMX_ErrorNone == omxRetValue; ++i)
-		{
-		pPort = portsToNotify[i];
-		omxRetValue = iCallbacks.CommandCompleteNotification(OMX_CommandFlush,
-											   portsToNotify[i]->Index());
-		}
-
-	portsToFlush.Close();
-	portsToNotify.Close();
-
-	return omxRetValue;
-
-	}
-
-OMX_ERRORTYPE
-COmxILPortManager::BufferFlushIndicationPauseOrExeToIdleCommand(
-	TBool& aAllBuffersReturnedToSuppliers)
-	{
-    DEBUG_PRINTF(_L8("COmxILPortManager::BufferFlushIndicationPauseOrExeToIdleCommand"));
-
-	aAllBuffersReturnedToSuppliers = EFalse;
-
-	const TInt portCount = iAllPorts.Count();
-	TBool foundBufferSupplierThatNeedsToWait = EFalse;
-	COmxILPort* pPort = 0;
-	OMX_ERRORTYPE omxRetValue = OMX_ErrorNone;
-	for (TInt i=0; i<portCount; ++i)
-		{
-		pPort = iAllPorts[i];
-
-		if (pPort->IsEnabled() && pPort->Count())
-			{
-			if (pPort->IsTunnelledAndBufferSupplier() &&
-				!pPort->HasAllBuffersAtHome())
-				{
-				if (!RemoveBuffersFromPfOrCm(pPort))
-					{
-					// This port will have to wait to get some of its buffers
-					// returned by the tunnelled port...
-					foundBufferSupplierThatNeedsToWait = ETrue;
-					}
-				continue;
-				}
-
-			if (OMX_ErrorNone !=
-				(omxRetValue = iProcessingFunction.BufferFlushingIndication(
-					pPort->Index(),
-					pPort->Direction())))
-				{
-				return omxRetValue;
-				}
-			}
-		}
-
-	if (!foundBufferSupplierThatNeedsToWait)
-		{
-		aAllBuffersReturnedToSuppliers = ETrue;
-		}
-
-	return OMX_ErrorNone;
-
-	}
-
-OMX_ERRORTYPE
-COmxILPortManager::PortEnableIndication(
-	TUint32 aPortIndex,
-	TBool aIndicationIsFinal)
-	{
-    DEBUG_PRINTF3(_L8("COmxILPortManager::PortEnableIndication: PORT[%d] TRANSITIONISFINAL[%d]"), aPortIndex, aIndicationIsFinal);
-
-	// Check the index of the port..
-	if ((OMX_ALL != aPortIndex) && (CheckPortIndex(aPortIndex) != OMX_ErrorNone))
-		{
-		return OMX_ErrorBadPortIndex;
-		}
-
-	const TInt portCount = iAllPorts.Count();
-	COmxILPort* pPort = 0;
-	OMX_U32 portIndex = 0;
-	TInt i=0;
-	OMX_ERRORTYPE omxRetValue = OMX_ErrorNone;
-	do
-		{
-		// We do this so we loop or not depending on the needs...
-		if (aPortIndex != OMX_ALL)
-			{
-			// Grab the port here...
-			pPort = iAllPorts[aPortIndex];
-			portIndex = aPortIndex;
-			}
-		else
-			{
-			pPort = iAllPorts[i];
-			portIndex = pPort->Index();
-			}
-
-		// If port is already enabled, just indicate that the enable command has
-		// completed successfully
-		if (pPort->IsEnabled())
-			{
-			if (OMX_ErrorNone !=
-				(omxRetValue =
-				 iCallbacks.CommandCompleteNotification(
-					 OMX_CommandPortEnable, portIndex)))
-				{
-				return omxRetValue;
-				}
-
-			++i;
-			continue;
-			}
-
-		// First check that no-one port is currently transitioning to
-		// Enabled...
-		if (pPort->IsTransitioningToEnabled() ||
-			pPort->IsTransitioningToDisabled())
-			{
-			// Send an error event...  The spec mandates that the nData2 and
-			// the pEventData are 0 and NULL respectively, but they could be
-			// used here to hand some information like the index of the port
-			// that has failed...
-			if (OMX_ErrorNone !=
-				(omxRetValue =
-				 iCallbacks.ErrorEventNotification(OMX_ErrorPortUnresponsiveDuringAllocation)))
-				{
-				return omxRetValue;
-				}
-
-			if (OMX_ALL == aPortIndex)
-				{
-				++i;
-				continue;
-				}
-			else
-				{
-				return OMX_ErrorUndefined;
-				}
-			}
-
-		if (aIndicationIsFinal)
-			{
-			// Inform the port that it has been enabled..
-			pPort->SetTransitionToEnabledCompleted();
-
-			// For each enabled port, the IL Client must be notified
-			// with an enabled completion event...
-			if (OMX_ErrorNone !=
-				(omxRetValue =
-				 iCallbacks.CommandCompleteNotification(
-					 OMX_CommandPortEnable, portIndex)))
-				{
-				return omxRetValue;
-				}
-
-			}
-		else
-			{
-			// Inform the port that it is being enabled..
-			pPort->SetTransitionToEnabled();
-			}
-
-		// Increment loop counter
-		++i;
-		}
-	while(OMX_ALL == aPortIndex && i < portCount);
-
-	return OMX_ErrorNone;
-
-	}
-
-OMX_ERRORTYPE
-COmxILPortManager::PortDisableIndication(
-	TUint32 aPortIndex)
-	{
-    DEBUG_PRINTF2(_L8("COmxILPortManager::PortDisableIndication: PORT[%d] "), aPortIndex);
-
-	// Check the index of the port..
-	if ((OMX_ALL != aPortIndex) && (CheckPortIndex(aPortIndex) != OMX_ErrorNone))
-		{
-		return OMX_ErrorBadPortIndex;
-		}
-
-	const TInt portCount = iAllPorts.Count();
-	COmxILPort* pPort = 0;
-	OMX_U32 portIndex = 0;
-	TInt i=0;
-	OMX_ERRORTYPE omxRetValue = OMX_ErrorNone;
-	do
-		{
-		if (aPortIndex != OMX_ALL)
-			{
-			// Grab the port here...
-			pPort = iAllPorts[aPortIndex];
-			portIndex = aPortIndex;
-			}
-		else
-			{
-			pPort = iAllPorts[i];
-			portIndex = pPort->Index();
-			}
-
-		// If port is already disabled, just indicate that the disable command has
-		// completed successfully
-		if (!pPort->IsEnabled())
-			{
-			if (OMX_ErrorNone !=
-				(omxRetValue =
-				 iCallbacks.CommandCompleteNotification(
-					 OMX_CommandPortDisable, portIndex)))
-				{
-				return omxRetValue;
-				}
-
-			++i;
-			continue;
-			}
-
-		// First check that no-one port is currently transitioning to
-		// Disabled...
-		if (pPort->IsTransitioningToDisabled() ||
-			pPort->IsTransitioningToEnabled())
-			{
-			// Send an error event...  The spec mandates that the nData2 and
-			// the pEventData are 0 and NULL respectively, but they could be
-			// used here to hand some information like the index of the port
-			// that has failed...
-			if (OMX_ErrorNone !=
-				(omxRetValue =
-				 iCallbacks.ErrorEventNotification(OMX_ErrorPortUnresponsiveDuringAllocation)))
-				{
-				return omxRetValue;
-				}
-
-			if (OMX_ALL == aPortIndex)
-				{
-				++i;
-				continue;
-				}
-			else
-				{
-				return OMX_ErrorUndefined;
-				}
-
-			}
-
-		if (pPort->IsTunnelledAndBufferSupplier())
-			{
-			if (!pPort->HasAllBuffersAtHome() && !RemoveBuffersFromPfOrCm(pPort))
-				{
-				// Inform the port that it is being disabled
-				pPort->SetTransitionToDisabled();
-				// This port will have to wait to get all its buffers
-				// returned by the tunnelled port...
-				}
-			else
-				{
-				// Buffer supplier with all buffers at home.. we can
-				// initiate here the depopulation of the tunnel...
-
-				// This boolean is not used here ...
-				TBool portDepopulationCompleted = EFalse;
-
-				// Better to ignore here any possible error in
-				// FreeTunnel... nothing we can do about it...
-				if (OMX_ErrorNone !=
-					(omxRetValue =
-					 pPort->FreeTunnel(portDepopulationCompleted)))
-					{
-					return omxRetValue;
-					}
-
-				// Inform the port that the disabled command has
-				// completed...
-				pPort->SetTransitionToDisabledCompleted();
-
-				// For each disabled port, the IL Client must be notified
-				// with a disabled completion event...
-				if (OMX_ErrorNone !=
-					(omxRetValue =
-					 iCallbacks.CommandCompleteNotification(
-						 OMX_CommandPortDisable, portIndex)))
-					{
-					return omxRetValue;
-					}
-
-				} // else <- if (!pPort->HasAllBuffersAtHome())
-
-			} // if (pPort->IsTunnelledAndBufferSupplier())
-		else
-			{
-			if (pPort->Count() > 0)
-				{
-				if (OMX_ErrorNone !=
-					(omxRetValue =
-					 iProcessingFunction.BufferFlushingIndication(
-					portIndex,
-					pPort->Direction())))
-					{
-					return omxRetValue;
-					}
-
-				// Inform the port that it is being disabled
-				pPort->SetTransitionToDisabled();
-				}
-			else
-				{
-				// Inform the port that the disabled command has
-				// completed...
-				pPort->SetTransitionToDisabledCompleted();
-
-				// For each disabled port, the IL Client must be notified
-				// with a disabled completion event...
-				if (OMX_ErrorNone !=
-					(omxRetValue =
-					 iCallbacks.CommandCompleteNotification(
-						 OMX_CommandPortDisable, portIndex)))
-					{
-					return omxRetValue;
-					}
-				}
-
-			}
-
-		// Increment loop counter
-		++i;
-		}
-	while(OMX_ALL == aPortIndex && i < portCount);
-
-	return OMX_ErrorNone;
-
-	}
-
-OMX_ERRORTYPE
-COmxILPortManager::BufferMarkIndication(
-	TUint32 aPortIndex,
-	OMX_PTR ipMarkData)
-	{
-    DEBUG_PRINTF2(_L8("COmxILPortManager::BufferMarkIndication: PORT[%d] "), aPortIndex);
-
-	// Check the index of the port..
-	if (CheckPortIndex(aPortIndex) != OMX_ErrorNone)
-		{
-		return OMX_ErrorBadPortIndex;
-		}
-
-	const OMX_MARKTYPE* pMark = static_cast<OMX_MARKTYPE*>(ipMarkData);
-
-	if (!pMark->hMarkTargetComponent)
-		{
-		return OMX_ErrorBadParameter;
-		}
-
-	// Let's tell the port to store the mark so it can mark the next incoming
-	// buffer...
-	return iAllPorts[aPortIndex]->StoreBufferMark(pMark);
-
-	}
-
-OMX_ERRORTYPE
-COmxILPortManager::ComponentRoleIndication(TUint aComponentRoleIndex)
-	{
-    DEBUG_PRINTF2(_L8("COmxILPortManager::ComponentRoleIndication : aComponentRoleIndex[%d]"), aComponentRoleIndex);
-
-	// At this point, the IL Client wants to set the default role that the
-	// standard component is assuming. Therefore, the role defaults need to be
-	// reloaded into all ports and the processing function object.
-	OMX_ERRORTYPE omxRetValue = OMX_ErrorNone;
-	const TInt portCount = iAllPorts.Count();
-	for (TUint i = 0; i< portCount; ++i)
-		{
-		if (OMX_ErrorNone !=
-			(omxRetValue =
-			 iAllPorts[i]->SetComponentRoleDefaults(aComponentRoleIndex)))
-			{
-			return omxRetValue;
-			}
-		}
-
-	return iProcessingFunction.ComponentRoleIndication(aComponentRoleIndex);
-
-	}
-
-OMX_ERRORTYPE
-COmxILPortManager::PortSettingsChangeIndication(OMX_U32 aPortIndex,
-												TUint aPortSettingsIndex,
-												const TDesC8& aPortSettings,
-												OMX_EVENTTYPE& aEventForILClient)
-	{
-    DEBUG_PRINTF2(_L8("COmxILPortManager::PortSettingsChangeIndication: PORT[%d] "), aPortIndex);
-
-	// Check the index of the port..
-	if (CheckPortIndex(aPortIndex) != OMX_ErrorNone)
-		{
-		return OMX_ErrorBadPortIndex;
-		}
-
-	return iAllPorts[aPortIndex]->DoPortReconfiguration(
-		aPortSettingsIndex, aPortSettings, aEventForILClient);
-
-	}
-
-
-TBool
-COmxILPortManager::AllPortsPopulated() const
-	{
-
-	const TInt portCount = iAllPorts.Count();
-	COmxILPort* pPort = 0;
-	for (TInt i=0; i<portCount; ++i)
-		{
-		pPort = iAllPorts[i];
-		if (!pPort->IsEnabled())
-			{
-			continue;
-			}
-
-		if (!pPort->IsPopulated())
-			{
-			DEBUG_PRINTF(_L8("COmxILPortManager::AllPortsPopulated : [FALSE]"));
-			return EFalse;
-			}
-		}
-
-	DEBUG_PRINTF(_L8("COmxILPortManager::AllPortsPopulated : [TRUE]"));
-	return ETrue;
-
-	}
-
-TBool
-COmxILPortManager::AllPortsDePopulated() const
-	{
-
-	const TInt portCount = iAllPorts.Count();
-	for (TInt i=0; i<portCount; ++i)
-		{
-		if (!iAllPorts[i]->IsDePopulated())
-			{
-			DEBUG_PRINTF(_L8("COmxILPortManager::AllPortsDePopulated : [FALSE]"));
-			return EFalse;
-			}
-		}
-
-	DEBUG_PRINTF(_L8("COmxILPortManager::AllPortsDePopulated : [TRUE]"));
-	return ETrue;
-
-	}
-
-TBool
-COmxILPortManager::AllBuffersAtHome() const
-	{
-
-	const TInt portCount = iAllPorts.Count();
-	for (TInt i=0; i<portCount; ++i)
-		{
-		if (iAllPorts[i]->IsTunnelledAndBufferSupplier())
-			{
-			if (!iAllPorts[i]->HasAllBuffersAtHome())
-				{
-				DEBUG_PRINTF(_L8("COmxILPortManager::AllBuffersAtHome : [FALSE]"));
-				return EFalse;
-				}
-			}
-		}
-
-	DEBUG_PRINTF(_L8("COmxILPortManager::AllBuffersAtHome : [TRUE]"));
-	return ETrue;
-
-	}