Update contrib.
1 // Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
2 // All rights reserved.
3 // This component and the accompanying materials are made available
4 // under the terms of "Eclipse Public License v1.0"
5 // which accompanies this distribution, and is available
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
18 #include <omxprocessingunit.h>
19 #include <mdf/mdfpuconfig.h>
20 #include "omxcomponentbody.h"
21 #include "omxoutputportbody.h"
23 COmxOutputPort::CBody* COmxOutputPort::CBody::NewL(TInt aIndex, COmxProcessingUnit* aComponent, COmxOutputPort* aParent)
25 return new (ELeave) CBody(aIndex, aComponent, aParent);
28 COmxOutputPort::CBody::CBody(TInt aIndex, COmxProcessingUnit* aComponent, COmxOutputPort* aParent) :
30 iComponent(aComponent),
35 void COmxOutputPort::CBody::MopSetObserver(const MMdfOutputPortObserver& aOutputPortObserver)
37 iObserver = const_cast<MMdfOutputPortObserver*>(&aOutputPortObserver);
40 void COmxOutputPort::CBody::MipoWriteDataComplete(const MMdfInputPort* /*aInputPort*/,
41 CMMFBuffer* aBuffer, TInt /*aErrorCode*/)
43 // the parent class read must be called in case it has been overridden in a derived class
44 iParent->MopReadData(*aBuffer);
47 void COmxOutputPort::CBody::MipoDisconnectTunnelComplete(const MMdfInputPort* /*aInputPort*/,
52 void COmxOutputPort::CBody::MipoRestartTunnelComplete(const MMdfInputPort* /*aInputPort*/,
57 TInt COmxOutputPort::CBody::FillBufferDone(OMX_HANDLETYPE /*aComponent*/, CMMFBuffer* aBuffer)
59 __ASSERT_ALWAYS(iObserver, User::Panic(_L("OmxOutputPort"), EObserverNotSet));
63 iPortConnectedTo->MipWriteData(*aBuffer);
69 iObserver->MopoReadDataComplete(iParent, aBuffer, KErrNone);
75 TInt COmxOutputPort::CBody::MopConfigure(const TPuConfig& /*aConfig*/)
77 return KErrNotSupported;
80 TInt COmxOutputPort::CBody::MopGetConfig(TPuConfig& /*aConfig*/)
82 return KErrNotSupported;
85 void COmxOutputPort::CBody::MopInitialize()
87 if (iPortConnectedTo != NULL)
89 iPortConnectedTo->MipSetObserver(*iParent);
93 CMMFBuffer* COmxOutputPort::CBody::MopCreateBuffer(TInt aBufferSize)
95 CMMFBuffer* buffer = NULL;
97 TRAP(err, buffer = Component()->OmxAllocateBufferL(iPortIndex, aBufferSize));
101 TInt COmxOutputPort::CBody::MopUseBuffer(CMMFBuffer& aBuffer)
103 if (iPortConnectedTo)
105 iPortConnectedTo->MipUseBuffer(aBuffer);
108 return Component()->OmxUseBuffer(&aBuffer, iPortIndex);
111 TInt COmxOutputPort::CBody::MopFreeBuffer(CMMFBuffer* aBuffer)
113 return Component()->OmxFreeBuffer(aBuffer);
116 TInt COmxOutputPort::CBody::MopTunnelRequest(const MMdfInputPort& aInputPortToBeConnectedTo,
117 TTunnelFlags& aTunnelFlags, TSupplierType& aSupplierType)
119 if ((Component()->State()!=EProcessingUnitLoaded) && (!iStopped))
122 return EInvalidState;
125 if (iPortConnectedTo)
127 // the port is already connected, return an error
128 return EPortAlreadyTunnelled;
130 aTunnelFlags = EBufferReadOnly;
131 aSupplierType = EBufferSupplyOutput;
132 iPortConnectedTo = const_cast<MMdfInputPort*>(&aInputPortToBeConnectedTo);
138 void COmxOutputPort::CBody::MopReadData(CMMFBuffer& aBuffer)
140 Component()->OmxFillThisBuffer(&aBuffer, this);
143 void COmxOutputPort::CBody::MopDisconnectTunnel()
147 iObserver->MopoDisconnectTunnelComplete(iParent, KErrNone);
151 void COmxOutputPort::CBody::MopRestartTunnel()
155 TBool COmxOutputPort::CBody::MopIsTunnelled() const
157 if (!iPortConnectedTo)
164 TInt COmxOutputPort::CBody::MopIndex() const
169 TUint32 COmxOutputPort::CBody::MopBufferSize() const
171 OMX_PARAM_PORTDEFINITIONTYPE portInfo;
172 portInfo.nPortIndex = 1;
173 Component()->OmxGetParameter(OMX_IndexParamPortDefinition, &portInfo);
174 return portInfo.nBufferSize;
177 TInt COmxOutputPort::CBody::MopCreateCustomInterface(TUid /*aUid*/)
179 return KErrNotSupported;
182 TAny* COmxOutputPort::CBody::MopCustomInterface(TUid /*aUid*/)
187 MMdfOutputPortObserver* COmxOutputPort::CBody::Observer() const
192 COmxProcessingUnit* COmxOutputPort::CBody::Component() const