omxilcomp/omxilaudioemulator/pcmrenderer/unittest/src/tsu_omxil_component_base.h
changeset 0 58be5850fb6c
child 1 e0d606d6e3b1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omxilcomp/omxilaudioemulator/pcmrenderer/unittest/src/tsu_omxil_component_base.h	Thu Sep 02 20:13:57 2010 +0300
@@ -0,0 +1,275 @@
+// 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:
+//
+
+
+/**
+ @file 
+*/
+
+#ifndef TSU_OMXIL_COMPONENT_BASE_H
+#define TSU_OMXIL_COMPONENT_BASE_H
+
+#include <e32msgqueue.h>
+#include <testframework.h>
+#include <openmax/il/khronos/v1_x/OMX_Core.h>
+
+#include "tsu_omxil_component_constants.h"
+#include <openmax/il/common/omxilstatedefs.h>
+
+// Forward declarations
+class COmxILComponentIf;
+struct OMX_COMPONENTTYPE;
+class RAsyncTestStepOmxILComponentBase;
+class CMMFBuffer;
+
+
+class CAacTestFile : public CBase
+	{
+
+public:
+
+	static CAacTestFile* NewL();
+
+	~CAacTestFile();
+
+	TInt ReadTestFileInBuffer(const TDesC& aFileName);
+    void ReadNextBuffer(CMMFBuffer& aDataBuffer);
+    void ResetPos();
+    TInt GetPos();
+
+private:
+
+	CAacTestFile();
+	void ConstructL();
+
+
+private:
+
+	HBufC8* iSourceFile;
+	TInt iSourceFileReadPos;
+	TBool iFinished;
+
+	};
+
+
+class CAacOutputTestFile : public CBase
+	{
+
+public:
+
+	static CAacOutputTestFile* NewL();
+
+	~CAacOutputTestFile();
+
+	TInt SetUpOutputFile(const TDesC& aFileName);
+	TInt WriteDataToFile(const CMMFBuffer& aDataBuffer);
+	TInt AddWavHeader();
+	void CloseOutputFile();
+
+private:
+
+	CAacOutputTestFile();
+	void ConstructL();
+
+
+private:
+
+	RFs iFileServerSession;
+	RFile iOutputFile;
+	TInt iWrittenDataTotal;
+	TInt iBuffersWrittenCount;
+
+	};
+
+class MTimerObserver
+	{
+
+public:
+
+	virtual void TimerExpired() = 0;
+
+	};
+
+class CUtilityTimer : public CTimer
+	{
+
+public:
+
+	static CUtilityTimer* NewL(TTimeIntervalMicroSeconds32& aDelay,
+							   MTimerObserver& aObserver);
+	~CUtilityTimer();
+
+	void InitializeTimer();
+
+private:
+
+    CUtilityTimer(MTimerObserver& aObserver);
+    void ConstructL(TTimeIntervalMicroSeconds32& aDelay);
+
+	// from CActive
+    void RunL();
+	void DoCancel();
+
+private:
+
+    TTimeIntervalMicroSeconds32 iDelay;
+	MTimerObserver& iObserver;
+
+    };
+
+
+class CCallbackHandler : 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
+			{
+			OMX_BUFFERHEADERTYPE* iBuffer;
+			TEventParams iEventParams;
+			};
+		};
+
+
+	static const TInt KMaxMsgQueueEntries = 10;
+
+public:
+
+	static CCallbackHandler* NewL(RAsyncTestStepOmxILComponentBase& aDecoderTest);
+	virtual ~CCallbackHandler();
+
+	operator OMX_CALLBACKTYPE*();
+
+	void RunL();
+	void DoCancel();
+
+	static OMX_ERRORTYPE FillBufferDone(OMX_HANDLETYPE aComponent,
+										TAny* aAppData,
+										OMX_BUFFERHEADERTYPE* aBuffer);
+
+	static OMX_ERRORTYPE EmptyBufferDone(OMX_HANDLETYPE aComponent,
+										 TAny* aAppData,
+										 OMX_BUFFERHEADERTYPE* aBuffer);
+
+	static OMX_ERRORTYPE EventHandler(OMX_HANDLETYPE aComponent,
+									  TAny* aAppData,
+									  OMX_EVENTTYPE aEvent,
+									  TUint32 aData1,
+									  TUint32 aData2,
+									  TAny* aExtra);
+
+
+private:
+
+	void ConstructL();
+	CCallbackHandler(RAsyncTestStepOmxILComponentBase& aDecoderTest);
+
+	OMX_ERRORTYPE DoFillBufferDone(OMX_HANDLETYPE aComponent,
+								   OMX_BUFFERHEADERTYPE* aBuffer);
+	OMX_ERRORTYPE DoEmptyBufferDone(OMX_HANDLETYPE aComponent,
+									OMX_BUFFERHEADERTYPE* aBuffer);
+	OMX_ERRORTYPE DoEventHandler(OMX_HANDLETYPE aComponent,
+								 TEventParams aParams);
+
+	//
+	//
+	//
+
+
+private:
+
+	RAsyncTestStepOmxILComponentBase& iDecoderTest;
+	RMsgQueue<TOmxMessage> iMsgQueue;
+	OMX_CALLBACKTYPE iHandle;
+
+	};
+
+
+class RAsyncTestStepOmxILComponentBase : public RAsyncTestStep
+	{
+
+public:
+
+	RAsyncTestStepOmxILComponentBase(const TDesC& aTestName, TInt aComponentUid);
+
+	~RAsyncTestStepOmxILComponentBase();
+
+	// From RAsyncTestStep
+	void KickoffTestL();
+	void CloseTest();
+
+	//
+	virtual void DoFillBufferDoneL(OMX_HANDLETYPE aComponent,
+								  OMX_BUFFERHEADERTYPE* aBuffer);
+
+	virtual void DoEmptyBufferDoneL(OMX_HANDLETYPE aComponent,
+								   OMX_BUFFERHEADERTYPE* aBuffer);
+
+	virtual void DoEventHandlerL(OMX_HANDLETYPE aComponent,
+								OMX_EVENTTYPE aEvent,
+								TUint aData1,
+								TUint aData2,
+								TAny* aExtra) = 0;
+
+
+	static OMX_ERRORTYPE ConvertSymbianErrorType(TInt aError);
+
+
+
+protected:
+
+	void PrintOmxState(OMX_STATETYPE aOmxState);
+
+	// Async Call backs
+	static TInt ComponentBaseCallBack(TAny* aPtr);
+	void DoComponentBaseCallBack();
+
+	static TInt StopTestCallBack(TAny* aPtr);
+	void DoStopTestCallBack();
+
+protected:
+
+	TInt iComponentUid;
+	CAsyncCallBack* ipKickoffAOp;
+	CAsyncCallBack* ipKickoffStop;
+	COmxILComponentIf* ipCOmxILComponent;
+	CCallbackHandler* ipCallbackHandler;
+	CAacTestFile* ipTestFile;
+	TPtrC iTestFileName;
+    CAacOutputTestFile* ipOutputTestFile;
+	OMX_COMPONENTTYPE* ipCompHandle;
+	};
+
+#endif // TSU_OMXIL_COMPONENT_BASE_H