omxil/xmltestharness/xmlclient/src/portbufferhandler.h
branchOpenMAX-IL_SHAI
changeset 16 eedf2dcd43c6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omxil/xmltestharness/xmlclient/src/portbufferhandler.h	Fri May 07 16:25:23 2010 +0100
@@ -0,0 +1,143 @@
+// 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 PORTBUFFERHANDLER_H
+#define PORTBUFFERHANDLER_H
+
+#include <e32base.h>
+#include <f32file.h>
+#include <openmax/il/khronos/v1_x/OMX_Core.h>
+#include <openmax/il/khronos/v1_x/OMX_Component.h>
+#include <openmax/il/khronos/v1_x/OMX_Types.h>
+
+#include "omx_xml_script.h"
+
+#if defined(__WINSCW__)
+_LIT(KPortDirectoryPath, "c:\\mm\\omxlogicalil\\");
+#else
+_LIT(KPortDirectoryPath, "e:\\unittest\\mm\\omxlogicalil\\");
+#endif
+
+const OMX_VERSIONTYPE KOmxLILVersion = { 1, 1, 1, 0 };
+
+NONSHARABLE_CLASS(CPortBufferHandler) : public CBase
+	{
+public:
+	void AddPortL( OMX_COMPONENTTYPE* aComp,
+			TInt aPortNum,
+			const TDesC& aFileName,
+			OMX_BUFFERSUPPLIERTYPE aSupplier,
+			OMX_DIRTYPE aPortDir,
+			MOmxScriptTestLogger& aLogger,
+			TInt aHeaderLength);
+
+	void AllocateBuffersL(OMX_COMPONENTTYPE* aComp);
+	void BufferDone(OMX_COMPONENTTYPE* aComp, OMX_BUFFERHEADERTYPE* aBufHdr, TBool aSource);
+	void FreeBuffers(OMX_COMPONENTTYPE* aComp);
+	void Start(OMX_COMPONENTTYPE* aComp, TInt aPortNum);
+	void Resume(OMX_COMPONENTTYPE* aComp, TInt aPortNum);
+	void Pause(OMX_COMPONENTTYPE* aComp, TInt aPortNum);
+	void Stop(OMX_COMPONENTTYPE* aComp, TInt aPortNum);
+		
+	CPortBufferHandler();
+	~CPortBufferHandler();
+	
+private:
+	NONSHARABLE_CLASS(CPortInfo) : public CBase
+		{
+	public:
+		static CPortInfo* NewL( OMX_COMPONENTTYPE* aComp,
+				TInt aPortNum,
+				const TDesC& aFileName,
+				OMX_BUFFERSUPPLIERTYPE aSupplier,
+				OMX_DIRTYPE aPortDir,
+				MOmxScriptTestLogger& aLogger,
+				TInt aHeaderLength);
+		
+		CPortInfo( OMX_COMPONENTTYPE* aComp,
+				   TInt aPortNum,
+				   OMX_BUFFERSUPPLIERTYPE aSupplier,
+				   OMX_DIRTYPE aPortDir,
+				   MOmxScriptTestLogger& aLogger,
+				   TInt aHeaderLength);
+		~CPortInfo();
+		void AllocateBuffersL();
+		void BufferDone(OMX_BUFFERHEADERTYPE* aBufHdr);
+		void FreeBuffers();
+		void DeleteAllBuffers();
+		static TBool ComparePortNum(const TInt* aPortNum, const CPortInfo& aPortInfo);
+		void Start();
+		void Stop();
+		void Resume();
+		void Pause();
+		OMX_DIRTYPE& PortDir();
+		void LogExtra(const TText8* aFile, TInt aLine, TOmxScriptSeverity aSeverity,
+		            TRefByValue<const TDesC16> aFmt,...);
+
+		enum 
+			{
+			EBufferFree,
+			EBufferUnderUse
+			};
+
+	private:
+		TBuf<KMaxFileName> iFileName;		
+		RFs iFs;		
+		RFile iFileObject;
+		OMX_COMPONENTTYPE* iComp;
+		TInt iPortNum;
+		TInt iNumBufs;
+		OMX_BUFFERSUPPLIERTYPE iSupplier;
+		RPointerArray<OMX_U8> iBuffers;
+		RPointerArray<OMX_BUFFERHEADERTYPE> iBufferHeaders;
+		OMX_DIRTYPE iPortDir;
+		TInt iPosInputData;
+		TInt iFileHeaderLength;
+		TInt iFileFillingLength;
+		MOmxScriptTestLogger& iLogger;
+	    TBool iEOSReached;
+	    TUint32 iTimeStamp;
+		};
+		
+	NONSHARABLE_CLASS(CComponentInfo) : public CBase
+		{
+	public:
+		CComponentInfo(OMX_COMPONENTTYPE* aComp);
+		~CComponentInfo();
+		CPortInfo* AddPortL(TInt aPortNum, const TDesC& aFileName,OMX_BUFFERSUPPLIERTYPE aSupplier, OMX_DIRTYPE aPortDir, MOmxScriptTestLogger& aLogger, TInt aHeaderLength);
+		void AllocateBuffersL();
+		void FillBuffers();
+		void BufferDone(OMX_BUFFERHEADERTYPE* aBufHdr, TBool aSource);
+		void HoldBuffers();
+		void FreeBuffers();
+		static TBool CompareComp(const OMX_COMPONENTTYPE* aSource, const CComponentInfo& aComponentInfo);
+		
+		void Start(TInt aPortNum);
+		void Stop(TInt aPortNum);
+		void Resume(TInt aPortNum);
+		void Pause(TInt aPortNum);
+
+	private:
+		OMX_COMPONENTTYPE* iComp;
+		RPointerArray<CPortInfo> iPorts;
+		OMX_STATETYPE iState;
+		};	
+		
+	
+	RPointerArray<CComponentInfo> iComponents;
+	};
+
+#endif // PORTBUFFERHANDLER_H