omxil_generic/omxilcomplib/src/omxilport.cpp
changeset 0 0e4a32b9112d
child 2 6add9366d894
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omxil_generic/omxilcomplib/src/omxilport.cpp	Wed Aug 25 12:40:50 2010 +0300
@@ -0,0 +1,716 @@
+// Copyright (c) 2008-2010 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 <mmf/server/mmfbuffer.h>
+#include <mmf/server/mmfdatabuffer.h>
+
+#include "log.h"
+#include "omxilportimpl.h"
+#include <openmax/il/common/omxilport.h>
+#include <openmax/il/common/omxilutil.h>
+
+const TInt COmxILPort::KBufferMarkPropagationPortNotNeeded;
+
+EXPORT_C
+TOmxILCommonPortData::TOmxILCommonPortData(
+	OMX_VERSIONTYPE aOmxVersion,
+	OMX_U32 aPortIndex,
+	OMX_DIRTYPE aDirection,
+	OMX_U32 aBufferCountMin,
+	OMX_U32 aBufferSizeMin,
+	OMX_PORTDOMAINTYPE aPortDomain,
+	OMX_BOOL aBuffersContiguous,
+	OMX_U32 aBufferAlignment,
+	OMX_BUFFERSUPPLIERTYPE aBufferSupplier,
+	OMX_U32 aBufferMarkPropagationPortIndex)
+	:
+	iOmxVersion(aOmxVersion),
+	iPortIndex(aPortIndex),
+	iDirection(aDirection),
+	iBufferCountMin(aBufferCountMin),
+	iBufferSizeMin(aBufferSizeMin),
+	iPortDomain(aPortDomain),
+	iBuffersContiguous(aBuffersContiguous),
+	iBufferAlignment(aBufferAlignment),
+	iBufferSupplier(aBufferSupplier),
+	iBufferMarkPropagationPortIndex(aBufferMarkPropagationPortIndex)
+	{
+	}
+
+
+COmxILPort::COmxILPort()
+	{
+    DEBUG_PRINTF(_L8("COmxILPort::COmxILPort"));
+	}
+
+
+COmxILPort::~COmxILPort()
+	{
+    DEBUG_PRINTF(_L8("COmxILPort::~COmxILPort"));
+	delete ipPortImpl;
+	}
+
+void COmxILPort::ConstructL(const TOmxILCommonPortData& aCommonPortData)
+	{
+    __ASSERT_DEBUG(aCommonPortData.iDirection == OMX_DirInput ||
+                   aCommonPortData.iDirection == OMX_DirOutput,
+                   User::Panic(KOmxILPortPanicCategory, 1));
+
+    // From Section 3.1.2.12.1 .
+    //
+    // nBufferCountMin : "The component shall define this non-zero default
+    // value."
+    //
+    // nBufferCountActual : "The component shall set a default value no less
+    // than nBufferCountMin for this field"
+    __ASSERT_DEBUG(aCommonPortData.iBufferCountMin > 0,
+                   User::Panic(KOmxILPortPanicCategory, 1));
+    
+	ipPortImpl=COmxILPortImpl::NewL(aCommonPortData, *this);
+	}
+	
+OMX_ERRORTYPE
+COmxILPort::GetLocalOmxParamIndexes(RArray<TUint>& aIndexArray) const
+	{
+    DEBUG_PRINTF(_L8("COmxILPort::GetLocalOmxParamIndexes"));
+	
+	TInt err = aIndexArray.InsertInOrder(OMX_IndexParamPortDefinition);
+
+	// Note that index duplication is OK.
+	if (KErrNone == err || KErrAlreadyExists == err)
+		{
+		err = aIndexArray.InsertInOrder(OMX_IndexParamCompBufferSupplier);
+		}
+
+	if (KErrNone != err && KErrAlreadyExists != err)
+		{
+		return OMX_ErrorInsufficientResources;
+		}
+
+	return OMX_ErrorNone;
+
+	}
+
+OMX_ERRORTYPE
+COmxILPort::GetLocalOmxConfigIndexes(RArray<TUint>& /*aIndexArray*/) const
+	{
+    DEBUG_PRINTF(_L8("COmxILPort::GetLocalOmxConfigIndexes"));
+
+	return OMX_ErrorNone;
+
+	}
+
+
+OMX_ERRORTYPE
+COmxILPort::GetParameter(OMX_INDEXTYPE aParamIndex,
+						 TAny* apComponentParameterStructure) const
+	{
+    DEBUG_PRINTF(_L8("COmxILPort::GetParameter"));
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->GetParameter(aParamIndex, apComponentParameterStructure);
+	}
+
+OMX_ERRORTYPE
+COmxILPort::SetParameter(OMX_INDEXTYPE aParamIndex,
+						 const TAny* apComponentParameterStructure,
+						 TBool& aUpdateProcessingFunction)
+	{
+    DEBUG_PRINTF(_L8("COmxILPort::SetParameter"));
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->SetParameter(aParamIndex, apComponentParameterStructure, aUpdateProcessingFunction);
+	}
+
+
+OMX_ERRORTYPE
+COmxILPort::GetConfig(OMX_INDEXTYPE /*aConfigIndex*/,
+					  TAny* /*apComponentConfigStructure*/) const
+	{
+    DEBUG_PRINTF(_L8("COmxILPort::GetConfig"));
+	return OMX_ErrorUnsupportedIndex;
+	}
+
+OMX_ERRORTYPE
+COmxILPort::SetConfig(OMX_INDEXTYPE /*aConfigIndex*/,
+					  const TAny* /*apComponentConfigStructure*/,
+					  TBool& /*aUpdateProcessingFunction*/)
+	{
+    DEBUG_PRINTF(_L8("COmxILPort::SetConfig"));
+	return OMX_ErrorUnsupportedIndex;
+	}
+
+OMX_ERRORTYPE
+COmxILPort::GetExtensionIndex(OMX_STRING /* aParameterName */,
+							  OMX_INDEXTYPE* /* apIndexType */) const
+	{
+	// This method is intended to be overridden by the concrete ports when
+	// needed...
+	return OMX_ErrorUnsupportedIndex;
+	}
+
+OMX_ERRORTYPE
+COmxILPort::PopulateBuffer(OMX_BUFFERHEADERTYPE** appBufferHdr,
+						   const OMX_PTR apAppPrivate,
+						   OMX_U32 aSizeBytes,
+						   OMX_U8* apBuffer,
+						   TBool& aPortPopulationCompleted)
+	{
+    DEBUG_PRINTF2(_L8("COmxILPort::PopulateBuffer : pBuffer [%X]"), apBuffer);
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->PopulateBuffer(appBufferHdr, apAppPrivate, aSizeBytes, apBuffer, aPortPopulationCompleted);
+	}
+
+
+OMX_ERRORTYPE
+COmxILPort::FreeBuffer(OMX_BUFFERHEADERTYPE* apBufferHeader,
+					   TBool& aPortDepopulationCompleted)
+	{
+    DEBUG_PRINTF2(_L8("COmxILPort::FreeBuffer : BUFFER [%X]"), apBufferHeader);
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->FreeBuffer(apBufferHeader, aPortDepopulationCompleted);
+	}
+
+
+OMX_ERRORTYPE
+COmxILPort::TunnelRequest(OMX_HANDLETYPE aTunneledComp,
+						  OMX_U32 aTunneledPort,
+						  OMX_TUNNELSETUPTYPE* apTunnelSetup)
+	{
+    DEBUG_PRINTF(_L8("COmxILPort::TunnelRequest"));
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->TunnelRequest(aTunneledComp, aTunneledPort, apTunnelSetup);
+	}
+
+
+OMX_ERRORTYPE
+COmxILPort::PopulateTunnel(TBool& portPopulationCompleted)
+	{
+    DEBUG_PRINTF(_L8("COmxILPort::PopulateTunnel"));
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->PopulateTunnel(portPopulationCompleted);
+	}
+
+
+OMX_ERRORTYPE
+COmxILPort::FreeTunnel(TBool& portDepopulationCompleted)
+	{
+    DEBUG_PRINTF(_L8("COmxILPort::FreeTunnel"));
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->FreeTunnel(portDepopulationCompleted);
+	}
+
+
+
+TBool
+COmxILPort::SetBufferSent(OMX_BUFFERHEADERTYPE* apBufferHeader,
+						  TBool& aBufferMarkedWithOwnMark)
+	{
+    DEBUG_PRINTF(_L8("COmxILPort::SetBufferSent"));
+	__ASSERT_DEBUG(apBufferHeader, User::Panic(KOmxILPortPanicCategory, 1));
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->SetBufferSent(apBufferHeader, aBufferMarkedWithOwnMark);
+	}
+
+TBool
+COmxILPort::SetBufferReturned(OMX_BUFFERHEADERTYPE* apBufferHeader)
+	{
+    DEBUG_PRINTF(_L8("COmxILPort::SetBufferReturned"));
+
+	__ASSERT_DEBUG(apBufferHeader, User::Panic(KOmxILPortPanicCategory, 1));
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->SetBufferReturned(apBufferHeader);
+	}
+
+void
+COmxILPort::SetTransitionToEnabled()
+	{
+    DEBUG_PRINTF(_L8("COmxILPort::SetTransitionToEnabled"));
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->SetTransitionToEnabled();
+	}
+
+void
+COmxILPort::SetTransitionToDisabled()
+	{
+    DEBUG_PRINTF(_L8("COmxILPort::SetTransitionToDisabled"));
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->SetTransitionToDisabled();
+	}
+
+void
+COmxILPort::SetTransitionToDisabledCompleted()
+	{
+    DEBUG_PRINTF(_L8("COmxILPort::SetTransitionToDisabledCompleted"));
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->SetTransitionToDisabledCompleted();
+	}
+
+void
+COmxILPort::SetTransitionToEnabledCompleted()
+	{
+    DEBUG_PRINTF(_L8("COmxILPort::SetTransitionToEnabledCompleted"));
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->SetTransitionToEnabledCompleted();
+	}
+
+OMX_ERRORTYPE
+COmxILPort::StoreBufferMark(const OMX_MARKTYPE* apMark)
+	{
+    DEBUG_PRINTF(_L8("COmxILPort::StoreBufferMark"));
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->StoreBufferMark(apMark);
+	}
+
+
+/**
+   This utility method may be called from the most derived port
+   class' destructor to delete any buffer header and or buffer that may remain
+   allocated in the port. This typically happens when the component is unloaded
+   without being properly transitioned from OMX_StateIdle to OMX_StateLoaded.
+
+ */
+EXPORT_C void
+COmxILPort::CleanUpPort()
+	{
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->CleanUpPort();
+	}
+
+/**
+   This is to be overriden by concrete ports that either support more than
+   one role or that want to let the IL Client to reset the component to
+   some default state...
+
+   @param aComponentRoleIndex The index of the role that is to be assumed by
+   the component.
+
+   @return OMX_ERRORTYPE
+ */
+OMX_ERRORTYPE
+COmxILPort::SetComponentRoleDefaults(TUint /*aComponentRoleIndex*/)
+	{
+    DEBUG_PRINTF(_L8("COmxILPort::SetComponentRoleDefaults"));
+
+	return OMX_ErrorNotImplemented;
+	}
+
+/**
+   This is to be overriden by concrete ports that either support more than one
+   role or that want to let the IL Client to reset the component to some
+   default state...
+
+   @param aPortSettingsIndex An implementation-specific identifier that the
+   implementation associates to the setting(s) that need(s) updating in the
+   port.
+
+   @param aPortSettings A buffer descriptor that contains an
+   implementation-specific structure with the new setting(s) that need to
+   be updated in the port.
+
+   @param [output] aEventForILClient An event that the port may choose to
+   deliver to the IL Client. This should be one of OMX_EventPortSettingsChanged
+   or OMX_EventPortFormatDetected. Use OMX_EventMax if no event need to be
+   sent.
+ */
+OMX_ERRORTYPE
+COmxILPort::DoPortReconfiguration(TUint /* aPortSettingsIndex */,
+								  const TDesC8& /* aPortSettings */,
+								  OMX_EVENTTYPE& aEventForILClient)
+	{
+    DEBUG_PRINTF(_L8("COmxILPort::DoPortReconfiguration"));
+
+	// This means no need to notify the IL Client...
+	aEventForILClient = OMX_EventMax;
+
+	return OMX_ErrorNotImplemented;
+	}
+
+OMX_ERRORTYPE
+COmxILPort::StoreBufferMark(OMX_HANDLETYPE& ipMarkTargetComponent,
+							OMX_PTR& ipMarkData)
+	{
+    DEBUG_PRINTF(_L8("COmxILPort::StoreBufferMark"));
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->StoreBufferMark(ipMarkTargetComponent, ipMarkData);
+	}
+
+TBool
+COmxILPort::HasAllBuffersAtHome() const
+	{
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	__ASSERT_ALWAYS(ipPortImpl->IsTunnelledAndBufferSupplier(),
+					User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->HasAllBuffersAtHome();
+	}
+
+TBool
+COmxILPort::IsBufferAtHome(OMX_BUFFERHEADERTYPE* apBufferHeader) const
+	{
+	DEBUG_PRINTF2(_L8("COmxILPort::IsBufferAtHome : [%X]"), apBufferHeader);
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->IsBufferAtHome(apBufferHeader);
+	}
+
+
+/**
+   This method provides a mechanism for ports to place the port-specific
+   buffer allocation logic (typically used in an OMX_AllocateBuffer
+   scenario).
+
+   @param aSizeBytes The size in bytes of the buffer to be allocated.
+
+   @param [OUT] apPortSpecificBuffer A pointer to the memory area allocated by
+   the port.
+
+   @param [OUT] apPortPrivate A pointer that refers to an optional
+   port-specific structure.
+
+   @apPlatformPrivate[OUT] A pointer to an optional platform-specific
+   structure.
+
+   @param apAppPrivate A pointer that refers to a buffer supplier-specific
+   structure.
+
+   @return OMX_ERRORTYPE
+*/
+OMX_ERRORTYPE
+COmxILPort::DoBufferAllocation(OMX_U32 aSizeBytes,
+							   OMX_U8*& apPortSpecificBuffer,
+							   OMX_PTR& apPortPrivate,
+							   OMX_PTR& /* apPlatformPrivate */,
+							   OMX_PTR /* apAppPrivate = 0 */)
+	{
+	DEBUG_PRINTF2(_L8("COmxILPort::DoBufferAllocation : aSizeBytes[%u]"), aSizeBytes);
+
+	__ASSERT_DEBUG(aSizeBytes > 0, User::Panic(KOmxILPortPanicCategory, 1));
+
+	CMMFDescriptorBuffer* pDescBuffer = 0;
+	TRAPD(allocRes, pDescBuffer = CMMFDescriptorBuffer::NewL(aSizeBytes));
+	if (KErrNone != allocRes)
+		{
+		return OMX_ErrorInsufficientResources;
+		}
+
+	apPortSpecificBuffer = const_cast<TUint8*>(pDescBuffer->Data().Ptr());
+	apPortPrivate		 = static_cast<CMMFBuffer*>(pDescBuffer);
+
+	return OMX_ErrorNone;
+
+	}
+
+/**
+   This method provides a mechanism for ports to place the port-specific
+   buffer deallocation logic (typically used in an OMX_FreeBuffer
+   scenario).
+
+   @param apPortSpecificBuffer A pointer to the memory area to be deallocated
+   by the port.
+
+   @param apPortPrivate A pointer that refers to a port-specific structure.
+
+   @param apPlatformPrivate A pointer to an optional platform-specific
+   structure.
+
+   @param apAppPrivate A pointer that refers to a buffer supplier-specific
+   structure.
+
+*/
+void
+COmxILPort::DoBufferDeallocation(OMX_PTR /*apPortSpecificBuffer */,
+								 OMX_PTR apPortPrivate,
+								 OMX_PTR /* apPlatformPrivate */,
+								 OMX_PTR /* apAppPrivate = 0 */)
+	{
+	DEBUG_PRINTF(_L8("COmxILPort::DoBufferDeallocation"));
+
+	__ASSERT_DEBUG(apPortPrivate, User::Panic(KOmxILPortPanicCategory, 1));
+
+	delete reinterpret_cast<CMMFBuffer*>(apPortPrivate);
+
+	}
+
+/**
+   This method provides a mechanism for ports to place the port-specific buffer
+   wrapping logic (typically used in an OMX_UseBuffer scenario).
+
+   @param aSizeBytes The size in bytes of the buffer to be wrapped.
+
+   @param apBuffer A pointer received from the IL Client or another
+   component that references the allocated memory area .
+
+   @param [OUT] apPortPrivate A pointer that refers to a port-specific
+   structure.
+
+   @param [OUT] apPlatformPrivate A pointer to an optional platform-specific
+   structure.
+
+   @param [OUT] apAppPrivate A pointer that refers to a buffer
+   supplier-specific structure.
+
+   @return OMX_ERRORTYPE
+*/
+OMX_ERRORTYPE
+COmxILPort::DoBufferWrapping(OMX_U32 aSizeBytes,
+							 OMX_U8* apBuffer,
+							 OMX_PTR& apPortPrivate,
+							 OMX_PTR& /* apPlatformPrivate */,
+							 OMX_PTR /* apAppPrivate = 0 */)
+	{
+	DEBUG_PRINTF(_L8("COmxILPort::DoBufferWrapping"));
+
+	__ASSERT_DEBUG(aSizeBytes > 0 && apBuffer,
+				   User::Panic(KOmxILPortPanicCategory, 1));
+
+	CMMFBuffer* pMmfBuffer = 0;
+	TPtr8 ptr(apBuffer, aSizeBytes, aSizeBytes);
+	TRAPD(allocRes, pMmfBuffer = CMMFPtrBuffer::NewL(ptr));
+	if (KErrNone != allocRes)
+		{
+		return OMX_ErrorInsufficientResources;
+		}
+
+	apPortPrivate = pMmfBuffer;
+
+	return OMX_ErrorNone;
+
+	}
+
+/**
+   This method provides a mechanism for ports to place the port-specific buffer
+   unwrapping logic (typically used in an OMX_FreeBuffer scenario).
+
+   @param apPortSpecificBuffer A pointer to the allocated memory area.
+
+   @param apPortPrivate A pointer that refers to a port-specific structure.
+
+   @param apPlatformPrivate A pointer to an optional platform-specific
+   structure.
+
+   @param apAppPrivate A pointer that refers to a buffer supplier-specific
+   structure.
+
+*/
+void
+COmxILPort::DoBufferUnwrapping(OMX_PTR /* apBuffer*/,
+							   OMX_PTR appPortPrivate,
+							   OMX_PTR /* apPlatformPrivate */,
+							   OMX_PTR /* apAppPrivate = 0 */)
+	{
+
+	DEBUG_PRINTF(_L8("COmxILPort::DoBufferUnwrapping"));
+
+	__ASSERT_DEBUG(appPortPrivate, User::Panic(KOmxILPortPanicCategory, 1));
+
+	delete reinterpret_cast<CMMFBuffer*>(appPortPrivate);
+
+	}
+
+/**
+   This method gets called during tunnelled buffer allocation (i.e.,
+   PopulateTunnel). This is to allow component implementations to override this
+   default implementation in a way that the pAppPrivate pointer parameter of
+   OMX_UseBuffer can be used to convey pPortPrivate or pPlatformPrivate to the
+   tunnelled component.
+
+   @param aTunnelledComponent Handle to the tunnelled component
+
+   @param [OUT] appBufferHdr The buffer header that will be allocated by the
+   tunnelled component
+
+   @param aTunnelledPortIndex The index of the tunnelled port
+
+   @param apPortPrivate pPortPrivate pointer as returned by DoBufferAllocation
+
+   @param apPlatformPrivate pPlatformPrivate pointer as returned by
+   DoBufferAllocation
+
+   @aSizeBytes The size in bytes of the to be allocated buffer
+
+   @apBuffer A pointer to the allocated buffer
+
+   @return OMX_ERRORTYPE
+
+*/
+OMX_ERRORTYPE
+COmxILPort::DoOmxUseBuffer(OMX_HANDLETYPE aTunnelledComponent,
+						   OMX_BUFFERHEADERTYPE** appBufferHdr,
+						   OMX_U32 aTunnelledPortIndex,
+						   OMX_PTR /* apPortPrivate */,
+						   OMX_PTR /* apPlatformPrivate */,
+						   OMX_U32 aSizeBytes,
+						   OMX_U8* apBuffer)
+	{
+
+	DEBUG_PRINTF(_L8("COmxILPort::DoOmxUseBuffer"));
+
+	return OMX_UseBuffer(
+		aTunnelledComponent,
+		appBufferHdr,
+		aTunnelledPortIndex,
+		0,
+		aSizeBytes,
+		apBuffer);
+
+	}
+
+
+OMX_DIRTYPE
+COmxILPort::Direction() const
+	{
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->Direction();
+	}
+
+EXPORT_C TBool
+COmxILPort::IsEnabled() const
+	{
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->IsEnabled();
+	}
+
+TBool
+COmxILPort::IsPopulated() const
+	{
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->IsPopulated();
+	}
+
+TBool
+COmxILPort::IsDePopulated() const
+	{
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->IsDePopulated();
+	}
+
+TBool
+COmxILPort::IsTunnelled() const
+	{
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->IsTunnelled();
+	}
+
+TBool
+COmxILPort::IsTunnelledAndBufferSupplier() const
+	{
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->IsTunnelledAndBufferSupplier();
+	}
+
+TBool
+COmxILPort::IsTransitioningToEnabled() const
+	{
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->IsTransitioningToEnabled();
+	}
+
+TBool
+COmxILPort::IsTransitioningToDisabled() const
+	{
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->IsTransitioningToDisabled();
+	}
+
+EXPORT_C OMX_U32
+COmxILPort::Index() const
+	{
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->Index();
+	}
+
+OMX_PORTDOMAINTYPE
+COmxILPort::Domain() const
+	{
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->Domain();
+	}
+
+OMX_U32
+COmxILPort::Count() const
+	{
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->Count();
+	}
+
+OMX_BUFFERHEADERTYPE* const&
+COmxILPort::operator[](TInt anIndex) const
+	{
+	return this->operator[](anIndex);
+	}
+
+OMX_BUFFERHEADERTYPE*&
+COmxILPort::operator[](TInt anIndex)
+	{
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->operator[](anIndex);
+	}
+
+
+OMX_U32
+COmxILPort::BufferMarkPropagationPort() const
+	{
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->BufferMarkPropagationPort();
+	}
+
+EXPORT_C const OMX_PARAM_PORTDEFINITIONTYPE& COmxILPort::GetParamPortDefinition() const
+	{
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->GetParamPortDefinition();
+	}
+	
+EXPORT_C const OMX_HANDLETYPE& COmxILPort::GetTunnelledComponent() const
+	{
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->GetTunnelledComponent();
+	}
+	
+EXPORT_C const OMX_U32& COmxILPort::GetTunnelledPort() const
+	{
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->GetTunnelledPort();
+	}
+
+EXPORT_C OMX_PARAM_PORTDEFINITIONTYPE& COmxILPort::GetParamPortDefinition()
+	{
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->GetParamPortDefinition();
+	}
+	
+EXPORT_C OMX_HANDLETYPE& COmxILPort::GetTunnelledComponent()
+	{
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->GetTunnelledComponent();
+	}
+	
+EXPORT_C OMX_U32& COmxILPort::GetTunnelledPort()
+	{
+	__ASSERT_ALWAYS(ipPortImpl, User::Panic(KOmxILPortPanicCategory, 1));
+	return ipPortImpl->GetTunnelledPort();
+	}
+
+EXPORT_C
+TInt COmxILPort::Extension_(TUint aExtensionId, TAny *&a0, TAny *a1)
+	{
+	return CBase::Extension_(aExtensionId, a0, a1);
+	}	
+
+
+
+