--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmdevicefw/mdf/src/openmax/omxcomponentimpl.h Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,127 @@
+// Copyright (c) 2005-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 OMX_COMPONENTIMPL_H
+#define OMX_COMPONENTIMPL_H
+
+#include <e32msgqueue.h>
+
+class CMMFBuffer;
+
+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 SetInputPortCallbacks(MOmxInputPortCallbacks* aCallbacks);
+ void SetOutputPortCallbacks(MOmxOutputPortCallbacks* aCallbacks);
+
+ MOmxInputPortCallbacks* InputPortCallbacks() const;
+ MOmxOutputPortCallbacks* OutputPortCallbacks() const;
+
+ private:
+ COmxBuffer();
+ void ConstructL(OMX_BUFFERHEADERTYPE* aBufferHeader, CMMFBuffer* aBuffer);
+
+ OMX_BUFFERHEADERTYPE* iBufferHeader;
+ CMMFBuffer* iMmfBuffer;
+
+ TBool iOwnsMmfBuffer;
+ MOmxInputPortCallbacks* iInputPortCallbacks;
+ MOmxOutputPortCallbacks* iOutputPortCallbacks;
+ };
+
+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, MOmxInputPortCallbacks* aObserver);
+ TInt FillThisBuffer(CMMFBuffer* aBuffer, MOmxOutputPortCallbacks* aObserver);
+
+ // Store OMX buffer pointer
+ void StoreBufferL(OMX_BUFFERHEADERTYPE* aBufferHeader, CMMFBuffer* aBuffer);
+
+
+private:
+ RPointerArray<COmxBuffer> iBuffers;
+ OMX_COMPONENTTYPE* iHandle;
+ };
+
+class COmxCallbacks : public CActive
+ {
+public:
+ enum TMessageType
+ {
+ EFillBufferCallback,
+ EEmptyBufferCallback,
+ EEventCallback
+ };
+
+ class TEventParams
+ {
+ public:
+ OMX_EVENTTYPE iEvent;
+ TUint iData1;
+ TUint iData2;
+ TAny* iExtra;
+ };
+
+ class TOmxMessage
+ {
+ public:
+ TMessageType iType;
+ OMX_HANDLETYPE iComponent;
+ union
+ {
+ COmxBufferManager::COmxBuffer* iBuffer;
+ TEventParams iEventParams;
+ };
+ };
+public:
+ static COmxCallbacks* NewL(MOmxPuCallbacks& aPuCallbacks);
+ 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, TEventParams aParams);
+ virtual ~COmxCallbacks();
+private:
+ void ConstructL();
+ COmxCallbacks(MOmxPuCallbacks& aPuCallbacks);
+ int iState;
+ MOmxPuCallbacks* iPuCallbacks;
+ RMsgQueue<TOmxMessage> iMsgQueue;
+ OMX_CALLBACKTYPE iHandle;
+ };
+
+#endif // OMX_COMPONENTIMPL_H