diff -r 000000000000 -r 40261b775718 omxil/mmilapi/refomxil/inc/omxilgenericilifbodyimpl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/omxil/mmilapi/refomxil/inc/omxilgenericilifbodyimpl.h Tue Feb 02 01:56:55 2010 +0200 @@ -0,0 +1,146 @@ +// 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: +// + +#ifndef OMXILGENERICILIFBODYIMPL_H +#define OMXILGENERICILIFBODYIMPL_H + +#include "momxilcomponentifobserver.h" +#include +#include + + +class COmxBufferManager : public CBase + { +public: + + class COmxBuffer : public CBase + { + public: + static COmxBuffer* NewL(OMX_BUFFERHEADERTYPE* aBufferHeader, CMMFBuffer* aBuffer); + ~COmxBuffer(); + + CMMFBuffer* MmfBuffer() const; + OMX_BUFFERHEADERTYPE* BufferHeader() const; + + void SetPortObserver(MOmxILComponentIfObserver* aObserver); + MOmxILComponentIfObserver* PortObserver() const; + + private: + COmxBuffer(); + void ConstructL(OMX_BUFFERHEADERTYPE* aBufferHeader, CMMFBuffer* aBuffer); + + OMX_BUFFERHEADERTYPE* iBufferHeader; + CMMFBuffer* iMmfBuffer; + + TBool iOwnsMmfBuffer; + + MOmxILComponentIfObserver* iPortObserver; + }; + +public: + COmxBufferManager(OMX_COMPONENTTYPE* aHandle); + ~COmxBufferManager(); + + // Buffer lookup + COmxBuffer* FindBuffer(const CMMFBuffer* aBuffer) const; + COmxBuffer* FindBuffer(OMX_BUFFERHEADERTYPE* aBuffer) const; + + // OMX Calls + TInt UseBuffer(CMMFBuffer& aBuffer, TUint nPortIndex); + CMMFBuffer* AllocateBufferL(TUint nPortIndex, TUint nSizeBytes); + TInt FreeBuffer(CMMFBuffer* aBuffer); + + TInt EmptyThisBuffer(const CMMFBuffer* aBuffer, MOmxILComponentIfObserver* aObserver); + TInt FillThisBuffer(CMMFBuffer* aBuffer, MOmxILComponentIfObserver* aObserver); + + // Store OMX buffer pointer + void StoreBufferL(OMX_BUFFERHEADERTYPE* aBufferHeader, CMMFBuffer* aBuffer); + +private: + RPointerArray iBuffers; + OMX_COMPONENTTYPE* iHandle; + }; + +class COmxCallbacks : public CActive + { +public: + enum TMessageType + { + EFillBufferCallback, + EEmptyBufferCallback, + EEventCallback + }; + + class TEventParams + { + public: + OMX_EVENTTYPE iEvent; + TUint32 iData1; + TUint32 iData2; + TAny* iExtraData; + }; + + class TOmxMessage + { + public: + TMessageType iType; + OMX_HANDLETYPE iComponent; + union + { + COmxBufferManager::COmxBuffer* iBuffer; + TEventParams iEventParams; + }; + }; +public: + static COmxCallbacks* NewL(MOmxILComponentIfObserver& aObserver); + operator OMX_CALLBACKTYPE*(); + void RunL(); + void DoCancel(); + + TInt FillBufferDone(OMX_HANDLETYPE aComponent, COmxBufferManager::COmxBuffer* aBuffer); + TInt EmptyBufferDone(OMX_HANDLETYPE aComponent, COmxBufferManager::COmxBuffer* aBuffer); + TInt EventHandler(OMX_HANDLETYPE aComponent, const TEventParams& aParams); + virtual ~COmxCallbacks(); + +private: + void ConstructL(); + COmxCallbacks(MOmxILComponentIfObserver& aObserver); + +private: + OMX_CALLBACKTYPE iHandle; + RMsgQueue iMsgQueue; + MOmxILComponentIfObserver& iParent; + }; + + +// OMX callback handler functions +OMX_ERRORTYPE EventHandler(OMX_OUT OMX_HANDLETYPE aComponent, + OMX_OUT TAny* aAppData, + OMX_OUT OMX_EVENTTYPE aEvent, + OMX_OUT TUint32 aData1, + OMX_OUT TUint32 aData2, + OMX_OUT TAny* aExtra); + +OMX_ERRORTYPE EmptyBufferDone( + OMX_HANDLETYPE aComponent, + TAny* aAppData, + OMX_BUFFERHEADERTYPE* aBuffer); + +OMX_ERRORTYPE FillBufferDone( + OMX_HANDLETYPE aComponent, + TAny* aAppData, + OMX_BUFFERHEADERTYPE* aBuffer); + +#endif // OMXILGENERICILIFBODYIMPL_H