omxilvideocomps/omxilgraphicsink/tsrc/src/graphicsinktestbase.cpp
changeset 0 5d29cba61097
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omxilvideocomps/omxilgraphicsink/tsrc/src/graphicsinktestbase.cpp	Fri Oct 08 22:09:17 2010 +0100
@@ -0,0 +1,1882 @@
+/*
+* Copyright (c) 2009-2010 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: 
+*
+*/
+
+
+#include "graphicsinktestbase.h"
+#include <e32math.h>
+#include <openmax/il/shai/OMX_Symbian_ExtensionNames.h>
+#include <openmax/il/shai/OMX_Symbian_ComponentExt.h>
+
+const TInt MAXNUMOFBUFFERS = 30; // Due to the size of buffers we limit the max number of buffers
+
+/*
+ * There are known issues due to limitations in the OMX core with tests that repeatedly load
+ * and unload buffers. If left to run until the timer runs out they inevitably end up failing
+ * and causing problems for subsequent test steps due to iffy clean-up. This constant is therefore
+ * used to limit the amount of test iterations to a "safe" number.
+ */
+const TInt KMaxTestIterations = 25;
+
+CGraphicsSinkTestBase::CGraphicsSinkTestBase()
+	{
+	iTestIteration = 0;
+	iTestTimedOut = EFalse;
+	iWaitForResources = EFalse;
+	iExecuteToIdleCount = 0;
+	iDoEmptyBufferDoneLimit = 20;
+	iExecutingToIdle = ETrue;
+	iDoEmptyBufferDoneCount = 0;
+	iIdleToExecuteCount = 0;
+	iPauseStateCount = 0;
+	}
+
+CGraphicsSinkTestBase::~CGraphicsSinkTestBase()
+	{
+	
+	}
+
+void CGraphicsSinkTestBase::WaitForEvent(OMX_EVENTTYPE aEvent)
+	{
+	INFO_PRINTF2(_L("Wait for event %d cmd"),aEvent);
+	iEventToWaitFor = aEvent;
+	CActiveScheduler::Start();
+	}
+
+void CGraphicsSinkTestBase::DoFillBufferDone(OMX_HANDLETYPE /*aComponent*/,OMX_BUFFERHEADERTYPE* /*aBufferHeader*/)
+	{
+	// Should never be called as graphic sink does not support this
+    INFO_PRINTF1(_L("CGraphicsSinkTestBase::DoFillBufferDone"));
+	}
+
+void CGraphicsSinkTestBase::DoEmptyBufferDone(OMX_HANDLETYPE aComponent,OMX_BUFFERHEADERTYPE* aBufferHeader)
+	{
+    // INFO_PRINTF3(_L("CGraphicsSinkTestBase::DoEmptyBufferDone: Count %d Limit %d"), iDoEmptyBufferDoneCount,iDoEmptyBufferDoneLimit);
+	
+    //INFO_PRINTF2(_L("CGraphicsSinkTestBase::DoEmptyBufferDone: Received pBuffer 0x%08x"), aBufferHeader->pBuffer );
+    
+	TInt error = iInputBufferHeaders.Append(aBufferHeader);
+    if (error != KErrNone)
+    	{
+		ERR_PRINTF1(_L("OOM ERROR"));
+		CActiveScheduler::Stop();
+		return SetTestStepError(error);
+    	}
+
+    if (iIgnoreNextBufferDone)
+        {
+        iIgnoreNextBufferDone = EFalse;
+        return;
+        }
+
+	if (iInputBufferHeaders.Count() == 0)
+		{
+		ERR_PRINTF1(_L("iInputBufferHeaders count has dropped to 0"));
+		CActiveScheduler::Stop();
+		return SetTestStepResult(EFail);	
+		}
+
+	iDoEmptyBufferDoneCount++;
+
+    OMX_COMPONENTTYPE* comp = static_cast<OMX_COMPONENTTYPE*>(aComponent);
+	
+    if (iTestCase == 10)
+    	{
+    	if ((iDoEmptyBufferDoneCount < iDoEmptyBufferDoneLimit || iDoEmptyBufferDoneLimit == 0) && !iTestTimedOut)
+    		{
+			iInputBufferHeader = iInputBufferHeaders[0];
+			iInputBufferHeaders.Remove(0);
+			
+			iInputBufferHeader->nFilledLen = iOmxParamPortInput.format.video.nFrameWidth * 
+				COmxILMMBuffer::BytesPerPixel(iOmxParamPortInput.format.video.eColorFormat) *
+				iOmxParamPortInput.format.video.nFrameHeight;
+			
+			iInputBufferHeader->nFlags = OMX_BUFFERFLAG_SYNCFRAME;
+			
+			iOmxErrorType = comp->EmptyThisBuffer(comp,iInputBufferHeader);
+			if (OMX_ErrorNone != iOmxErrorType)
+				{
+				ERR_PRINTF1(_L("EmptyThisBuffer returned an error"));
+				PrintOmxError(iOmxErrorType);
+				return SetTestStepError(iOmxErrorType);
+				}
+			
+    		if (iTestStep == 6)
+    			{
+    			SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateIdle,0);
+    			}
+			}
+    	else
+    		{
+    		iDoEmptyBufferDoneCount = 0;
+            iIgnoreNextBufferDone = ETrue;
+    		if (iTestStep != 5 && iTestStep != 6)
+    			{
+    			SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateIdle,0);
+    			}
+    		}
+    	}
+    else
+    	{
+		if (TestStepName() == (_L("MMVIDEO-OMX-GS-005-05-HP")))
+			{
+			iDoEmptyBufferDoneCount = 0;
+			}
+		
+		if (iDoEmptyBufferDoneCount < iDoEmptyBufferDoneLimit && !iTestTimedOut)
+			{
+		    //INFO_PRINTF2(_L("CGraphicsSinkTestBase::DoEmptyBufferDone: Sending pBuffer 0x%08x"), iInputBufferHeaders[0]->pBuffer );
+		    
+			iInputBufferHeader = iInputBufferHeaders[0];
+			iInputBufferHeaders.Remove(0);
+			
+			TInt bytesperpixel = COmxILMMBuffer::BytesPerPixel(iOmxParamPortInput.format.video.eColorFormat);
+			iInputBufferHeader->nFilledLen = iOmxParamPortInput.format.video.nFrameWidth * bytesperpixel *
+				iOmxParamPortInput.format.video.nFrameHeight;
+			iInputBufferHeader->nOffset = aBufferHeader->nOffset;
+			iInputBufferHeader->nFlags = OMX_BUFFERFLAG_SYNCFRAME;
+						
+			iOmxErrorType = comp->EmptyThisBuffer(comp,iInputBufferHeader);
+			if (OMX_ErrorNone != iOmxErrorType)
+				{
+				ERR_PRINTF1(_L("EmptyThisBuffer returned an error"));
+				PrintOmxError(iOmxErrorType);
+				return SetTestStepError(iOmxErrorType);
+				}
+			}
+		else
+			{
+			iDoEmptyBufferDoneCount = 0;
+            iIgnoreNextBufferDone = ETrue;
+			if (TestStepName() != (_L("MMVIDEO-OMX-GS-004-06-HP")))
+				{
+				if (iExecutingToIdle)
+					{
+					SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateIdle,0);
+					}
+				else
+					{
+					SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StatePause,0);
+					}
+				}
+			}
+    	}
+	}
+	
+
+TVerdict CGraphicsSinkTestBase::DoGSCompAllocTestL()
+	{
+	TVerdict result = EPass;
+	
+	// Create a callback handler, graphic sink handle and destroy it
+	iError = OMX_Init();
+	if(iError != OMX_ErrorNone)
+		{
+		iError = OMX_Deinit();
+		User::Leave(KErrNoMemory);
+		}
+	
+	delete iCallbackHandler;
+	iCallbackHandler = NULL;
+	TRAPD(error, iCallbackHandler = CCallbackHandler::NewL(*this));
+		
+	if (!error)
+		{
+		OMX_CALLBACKTYPE* omxCallbacks = *iCallbackHandler;
+		OMX_PTR appData = iCallbackHandler;		
+		OMX_HANDLETYPE graphicsSinkHandle = NULL;
+		OMX_STRING graphicsSinkComponentName = "OMX.SYMBIAN.VIDEO.GRAPHICSINK";	
+
+		iError = OMX_GetHandle(
+		    &graphicsSinkHandle, 
+		    graphicsSinkComponentName,
+		    appData,
+		    omxCallbacks);
+
+		if (iError == OMX_ErrorNone)
+			{		
+			iGraphicSinkCompHandle = (OMX_COMPONENTTYPE*)graphicsSinkHandle;
+			OMX_FreeHandle(iGraphicSinkCompHandle);
+			delete iCallbackHandler;
+			iCallbackHandler = NULL;
+			iError = OMX_Deinit();
+			if(iError != OMX_ErrorNone)
+				{
+				User::Leave(KErrGeneral);
+				}
+			}
+		else 
+			{
+			result = EFail;
+			PrintOmxError(iError);
+			ERR_PRINTF2(_L("Unexpected %d return OMX_GetHandle"), iError);
+			delete iCallbackHandler;
+			iCallbackHandler = NULL;
+			iError = OMX_Deinit();
+			User::Leave(KErrNoMemory);				
+			}
+		}
+	else
+		{
+		ERR_PRINTF2(_L("Unexpected %d return CCallbackHandler::NewL()"), iError);
+		result = EFail;
+		iError = OMX_Deinit();
+		User::Leave(KErrNoMemory);				
+		}	
+
+	return result;
+	}
+
+
+void CGraphicsSinkTestBase::DoEventHandler(OMX_HANDLETYPE aComponent, OMX_EVENTTYPE aEvent,
+			TUint aData1, TUint aData2, TAny* aExtra)
+	{
+/*	OMX_COMPONENTTYPE* comp = static_cast<OMX_COMPONENTTYPE*>(aComponent);
+	if (comp == iCameraSourceCompHandle &&
+	        aEvent == OMX_EventCmdComplete &&
+	        aData1 == OMX_CommandPortDisable &&
+	        (aData2 == KCameraVCPortIndex || aData2 == KCameraClockPortIndex))
+	    {
+	    return;
+	    }
+*/	
+	OMX_ERRORTYPE errorEvent = static_cast<OMX_ERRORTYPE>( aData1 );
+	
+	switch (aEvent)
+		{
+		case OMX_EventError:
+			{
+			if(TestStepName() == (_L("MMVIDEO-OMX-GS-001-01-HP")))
+				{
+				ErrorEventTask_001(errorEvent);
+				}
+			else
+				{
+				switch (errorEvent)
+					{
+					case OMX_ErrorFormatNotDetected:
+						{
+						// INFO_PRINTF1(_L("DoEventHandler: OMX_EventError [OMX_ErrorFormatNotDetected]"));
+						PrintOmxError(OMX_ErrorFormatNotDetected);
+						CActiveScheduler::Stop();
+						return SetTestStepError(KErrGeneral);
+						}
+					case OMX_ErrorIncorrectStateOperation:
+						{
+						// INFO_PRINTF1(_L("DoEventHandler: OMX_EventError [OMX_ErrorIncorrectStateOperation]"));
+						if(TestStepName() == (_L("MMVIDEO-OMX-GS-002-04-HP")))
+							{
+							CActiveScheduler::Stop();
+							return SetTestStepResult(EPass);
+							}
+						CActiveScheduler::Stop();
+						return SetTestStepError(PrintOmxError(OMX_ErrorIncorrectStateOperation));
+						}
+					case OMX_ErrorInvalidState:
+						{
+						// INFO_PRINTF1(_L("DoEventHandler: OMX_EventError [OMX_ErrorInvalidState]"));
+						CActiveScheduler::Stop();
+						PrintOmxError(OMX_ErrorInvalidState);
+						return SetTestStepError(KErrGeneral);
+						}
+					case OMX_ErrorPortUnpopulated:
+						{
+						// INFO_PRINTF1(_L("DoEventHandler: OMX_EventError [OMX_ErrorPortUnpopulated]"));
+						if (TestStepName() == (_L("MMVIDEO-OMX-GS-006-02-HP")))
+							{
+							if (--iInputBufferHeadersCount == 0)
+							CActiveScheduler::Stop();
+							return SetTestStepResult(EPass);
+							}
+						}
+					default:
+						{
+						INFO_PRINTF2(_L("DoEventHandler: OMX_EventError [%d]"), aData1);
+						CActiveScheduler::Stop();
+						return SetTestStepError(KErrGeneral);
+						}
+					}
+				}
+			}
+		case OMX_EventBufferFlag:
+			{
+			break;
+			}
+		case OMX_EventCmdComplete:
+			{
+			InitiateNextStateTransition(aComponent, aData1, aData2, aExtra);
+			break;
+			}
+		case OMX_EventPortSettingsChanged:
+			{
+			if(iEventToWaitFor == aEvent)
+				{
+				iEventToWaitFor = OMX_EventMax;
+				CActiveScheduler::Stop();
+				return SetTestStepResult(EPass);
+				}
+			else
+				{
+				UpdateSettingChanged(aComponent, aData1, aData2, aExtra);
+				}
+			break;
+			}
+
+	/*	case OMX_EventNokiaFirstFrameDisplayed:
+			{			
+			break;
+			}*/
+
+		default:
+			{
+			INFO_PRINTF2(_L("DoEventHandler: OMX Event [%d]"), aEvent);
+			CActiveScheduler::Stop();
+			return SetTestStepError(KErrGeneral);
+			}
+		}
+	}
+	
+void CGraphicsSinkTestBase::InitiateNextStateTransition(OMX_HANDLETYPE /*aComponent*/, TUint /*aData1*/,
+			TUint aData2, TAny* /*aExtra*/)
+	{
+	switch(aData2)
+		{
+		case OMX_StateLoaded:
+			{
+			if(TestStepName() == (_L("MMVIDEO-OMX-GS-002-01-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-002-02-HP"))
+					 || TestStepName() == (_L("MMVIDEO-OMX-GS-002-03-HP")))
+				{
+				LoadedStateTask_002();
+				}
+			else
+				{
+				if(TestStepName() == (_L("MMVIDEO-OMX-GS-003-01-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-003-02-HP"))
+						 || TestStepName() == (_L("MMVIDEO-OMX-GS-003-03-HP")))
+					{
+					LoadedStateTask_003();
+					}
+				else
+					{
+					if(TestStepName() == (_L("MMVIDEO-OMX-GS-004-01-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-004-02-HP"))
+								|| TestStepName() == (_L("MMVIDEO-OMX-GS-004-03-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-004-04-HP"))
+								|| TestStepName() == (_L("MMVIDEO-OMX-GS-004-05-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-004-06-HP")))
+						{
+						LoadedStateTask_004();
+						}
+					else
+						{
+						if(TestStepName() == (_L("MMVIDEO-OMX-GS-005-01-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-005-02-HP"))
+									|| TestStepName() == (_L("MMVIDEO-OMX-GS-005-03-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-005-04-HP"))
+									|| TestStepName() == (_L("MMVIDEO-OMX-GS-005-05-HP")))
+							{
+							LoadedStateTask_005();
+							}
+						else
+							{
+							if (TestStepName() == (_L("MMVIDEO-OMX-GS-006-01-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-006-02-HP")))
+								{
+								LoadedStateTask_006();
+								}
+							else
+								{
+								if(TestStepName() == (_L("MMVIDEO-OMX-GS-007-01-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-007-02-HP")) ||
+										TestStepName() == (_L("MMVIDEO-OMX-GS-007-03-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-007-04-HP")))
+									{
+									LoadedStateTask_007();
+									}
+								else
+									{
+									if (iTestCase == 9)
+										{
+										LoadedStateTransitionTask();
+										}
+									else
+										{
+										if (iTestCase == 10)
+											{
+											LoadedStateBufferTask();
+											}
+										else
+											{
+											INFO_PRINTF1(_L("CGraphicsSinkTestBase::DoEventHandler State set to  OMX_StateLoaded"));
+											}
+										}
+									}
+								}
+							}
+						}
+					}
+				}
+			break;		
+			}
+		case OMX_StateWaitForResources:
+			{
+			if (iTestCase == 9)
+				{
+				WaitForResourcesTransitionTask();
+				}
+			else
+				{
+				INFO_PRINTF1(_L("CGraphicsSinkTestBase::DoEventHandler State set to  OMX_StateWaitForResources"));
+				}
+			break;
+			}
+		case OMX_StateIdle:
+			{
+			if(TestStepName() == (_L("MMVIDEO-OMX-GS-002-01-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-002-02-HP"))
+					 || TestStepName() == (_L("MMVIDEO-OMX-GS-002-03-HP")))
+				{
+				IdleStateTask_002();
+				}
+			else
+				{
+				if(TestStepName() == (_L("MMVIDEO-OMX-GS-003-01-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-003-02-HP"))
+						 || TestStepName() == (_L("MMVIDEO-OMX-GS-003-03-HP")))
+					{
+					IdleStateTask_003();
+					}
+				else
+					{
+					if(TestStepName() == (_L("MMVIDEO-OMX-GS-004-01-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-004-02-HP"))
+								|| TestStepName() == (_L("MMVIDEO-OMX-GS-004-03-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-004-04-HP"))
+								|| TestStepName() == (_L("MMVIDEO-OMX-GS-004-05-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-004-06-HP")))
+						{
+						IdleStateTask_004();
+						}
+					else
+						{
+						if(TestStepName() == (_L("MMVIDEO-OMX-GS-005-01-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-005-02-HP"))
+									|| TestStepName() == (_L("MMVIDEO-OMX-GS-005-03-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-005-04-HP"))
+									|| TestStepName() == (_L("MMVIDEO-OMX-GS-005-05-HP")))
+							{
+							IdleStateTask_005();
+							}
+						else
+							{
+							if (TestStepName() == (_L("MMVIDEO-OMX-GS-006-01-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-006-02-HP")))
+								{
+								IdleStateTask_006();
+								}
+							else
+								{
+								if(TestStepName() == (_L("MMVIDEO-OMX-GS-007-01-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-007-02-HP")) ||
+										TestStepName() == (_L("MMVIDEO-OMX-GS-007-03-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-007-04-HP")))
+									{
+									IdleStateTask_007();
+									}
+								else
+									{
+									if (iTestCase == 9)
+										{
+										IdleStateTransitionTask();
+										}
+									else
+										{
+										if (iTestCase == 10)
+											{
+											IdleStateBufferTask();
+											}
+										else
+											{
+											INFO_PRINTF1(_L("CGraphicsSinkTestBase::DoEventHandler State set to OMX_StateIdle"));
+											}
+										}
+									}
+								}
+							}
+						}
+					}
+				}
+			break;
+			}
+		case OMX_StateExecuting:
+			{
+			if(TestStepName() == (_L("MMVIDEO-OMX-GS-004-01-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-004-02-HP"))
+										|| TestStepName() == (_L("MMVIDEO-OMX-GS-004-03-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-004-04-HP"))
+										|| TestStepName() == (_L("MMVIDEO-OMX-GS-004-05-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-004-06-HP")))
+				{
+				ExecutingStateTask_004();
+				}
+			else
+				{
+				if(TestStepName() == (_L("MMVIDEO-OMX-GS-005-01-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-005-02-HP"))
+							|| TestStepName() == (_L("MMVIDEO-OMX-GS-005-03-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-005-04-HP"))
+							|| TestStepName() == (_L("MMVIDEO-OMX-GS-005-05-HP")))
+					{
+					ExecutingStateTask_005();
+					}
+				else
+					{
+					if (TestStepName() == (_L("MMVIDEO-OMX-GS-007-01-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-007-02-HP"))
+							|| TestStepName() == (_L("MMVIDEO-OMX-GS-007-03-HP")))
+						{
+						ExecutingStateTask_007();
+						}
+					else
+						{
+						if (iTestCase == 9)
+							{
+							ExecutingStateTransitionTask();
+							}
+						else
+							{
+							if (iTestCase == 10)
+								{
+								ExecutingStateBufferTask();
+								}
+							else
+								{
+								switch(iPreviousState)
+									{
+									case OMX_StateIdle:
+										{
+										iPreviousState = OMX_StateExecuting;
+										EmptyThisBufferTask();
+										break;
+										}
+									case OMX_StatePause:
+										{
+										iPreviousState = OMX_StateExecuting;
+										EmptyThisBufferTask();
+										break;
+										}
+									}
+								}
+							}
+						}
+					}
+				}
+			break;
+			}
+		case OMX_StatePause:
+			{
+			if(TestStepName() == (_L("MMVIDEO-OMX-GS-007-01-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-007-02-HP")) ||
+					TestStepName() == (_L("MMVIDEO-OMX-GS-007-03-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-007-04-HP")))
+				{
+				PauseStateTask_007();
+				}
+			else
+				{
+				INFO_PRINTF1(_L("CGraphicsSinkTestBase::DoEventHandler State set to  OMX_StatePause"));
+				}
+			break;
+			}
+		case OMX_StateInvalid:
+			{
+			if(TestStepName() == (_L("MMVIDEO-OMX-GS-001-01-HP")))
+				{
+				INFO_PRINTF1(_L("CGraphicsSinkTestBase::GSTest001: Loaded to Invalid"));
+				// Not really intended for loaded to invalid test but booleon needed
+				iExecutingToIdle = EFalse;
+				}
+			else
+				{
+				INFO_PRINTF1(_L("CGraphicsSinkTestBase::DoEventHandler State set to  OMX_StateInvalid"));
+				}
+			break;
+			}
+		}
+	}
+
+void CGraphicsSinkTestBase::UpdateSettingChanged(OMX_HANDLETYPE /*aComponent*/,TUint aData1,TUint /*aData2*/,TAny* /*aExtra*/)
+	{
+	TInt err = KErrGeneral;
+	
+	if(aData1 == iSurfaceConfigExt ||
+	   aData1 == OMX_IndexConfigCommonScale ||
+	   aData1 == OMX_IndexConfigCommonOutputSize ||
+	   aData1 == OMX_IndexConfigCommonInputCrop ||
+	   aData1 == OMX_IndexConfigCommonOutputCrop ||
+	   aData1 == OMX_IndexConfigCommonExclusionRect)
+		{
+		// port setting has been changed with Configs
+		TSurfaceId surfaceId;
+		(*iSurfaceConfig).GetSurfaceId(surfaceId);
+		// INFO_PRINTF2(_L("Surface Id:%d"),surfaceId);
+		err = iWindow->SetBackgroundSurface(*iSurfaceConfig, ETrue);
+		if(KErrNone != err)
+			{
+			ERR_PRINTF2(_L("SetSurfaceId fails with error: %d"),err);
+			SetTestStepError(KErrGeneral);
+			return SetTestStepResult(EFail);
+			}
+		// SetBackgroundSurface OK
+		}
+	}
+	
+
+void CGraphicsSinkTestBase::CloseTestStep()
+	{
+	delete iCamOutputBuffer;
+	
+	FreeBuffer( iGraphicSinkCompHandle, 0, iInputBufferHeaders, OMX_ErrorNone );
+	iInputBufferHeaders.Reset();
+	
+	COmxGsTestBase::CloseTest();
+	}
+
+void CGraphicsSinkTestBase::EmptyThisBufferTask()
+	{
+	// INFO_PRINTF2(_L("CGraphicsSinkTestBase::EmptyThisBufferTask: Empty this buffer task Count %d"),iDoEmptyBufferDoneCount);
+
+    TInt bytesperpixel = COmxILMMBuffer::BytesPerPixel(iOmxParamPortInput.format.video.eColorFormat);
+    // CGraphicsSinkTestBase::EmptyThisBufferTask: Fill COmxILMMBuffer* with colour
+    FillCCamBuffer(iChunk, iOmxParamPortInput.format.video.nFrameWidth,iOmxParamPortInput.format.video.nFrameHeight,bytesperpixel,iOmxParamPortInput.nBufferCountActual);
+    
+    //INFO_PRINTF2(_L("CGraphicsSinkTestBase::EmptyThisBufferTask: Sending pBuffer 0x%08x"), iInputBufferHeaders[0]->pBuffer  );
+    
+    iInputBufferHeader = iInputBufferHeaders[0];
+    iInputBufferHeader->nFilledLen = iOmxParamPortInput.format.video.nFrameWidth * 
+        COmxILMMBuffer::BytesPerPixel(iOmxParamPortInput.format.video.eColorFormat) *
+        iOmxParamPortInput.format.video.nFrameHeight;
+    iInputBufferHeaders.Remove(0);
+    iOmxErrorType = iGraphicSinkCompHandle->EmptyThisBuffer(iGraphicSinkCompHandle,iInputBufferHeader);
+        
+	
+	if (OMX_ErrorNone != iOmxErrorType)
+		{
+		ERR_PRINTF1(_L("EmptyThisBuffer returned an error"));
+		return SetTestStepError(KErrGeneral);
+		}
+	
+	if (TestStepName() == (_L("MMVIDEO-OMX-GS-004-06-HP")))
+		{
+		SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateIdle, 0);
+		}
+	else
+		{
+	    if( iIgnoreNextBufferDone ){
+	        iIgnoreNextBufferDone = EFalse;
+	        return;
+	    }
+	    // else...
+	    
+	    //INFO_PRINTF2(_L("CGraphicsSinkTestBase::EmptyThisBufferTask: Sending pBuffer 0x%08x"), iInputBufferHeaders[0]->pBuffer  );
+	    
+		iInputBufferHeader = iInputBufferHeaders[0];
+		iInputBufferHeaders.Remove(0);
+		iInputBufferHeader->nFilledLen = iOmxParamPortInput.format.video.nFrameWidth * 
+			COmxILMMBuffer::BytesPerPixel(iOmxParamPortInput.format.video.eColorFormat) *
+			iOmxParamPortInput.format.video.nFrameHeight;
+		iInputBufferHeader->nFlags = OMX_BUFFERFLAG_SYNCFRAME;
+		iOmxErrorType = iGraphicSinkCompHandle->EmptyThisBuffer(iGraphicSinkCompHandle,iInputBufferHeader);
+		if (OMX_ErrorNone != iOmxErrorType)
+			{
+			ERR_PRINTF1(_L("EmptyThisBuffer returned an error"));
+			return SetTestStepError(KErrGeneral);
+			}
+		}
+	}
+
+void CGraphicsSinkTestBase::DoROmxGsTestSetup()
+	{
+	TRAPD(err,CreateWindowL());
+	if(err != KErrNone)
+		{
+		ERR_PRINTF2(_L("CreateWindow Failed %d"),err);
+		return SetTestStepError(err);
+		}
+
+	OMX_INDEXTYPE videoSurfaceConfigIndex = OMX_IndexMax;
+	
+	iError = iGraphicSinkCompHandle->GetExtensionIndex(iGraphicSinkCompHandle, const_cast<char*>(sOmxSymbianGfxSurfaceConfig), &videoSurfaceConfigIndex);
+	if(OMX_ErrorNone != iError)
+		{
+		ERR_PRINTF1(_L("OMX_GetExtensionIndex Failed"));
+		PrintOmxError(iError);
+		return SetTestStepError(KErrGeneral);
+		}
+	
+	OMX_SYMBIAN_VIDEO_PARAM_SURFACECONFIGURATION surfaceConfig;
+	surfaceConfig.nSize = sizeof(OMX_SYMBIAN_VIDEO_PARAM_SURFACECONFIGURATION);
+	surfaceConfig.nVersion = TOmxILSpecVersion();
+	surfaceConfig.nPortIndex = 0;
+	
+	GetParameter(iGraphicSinkCompHandle, videoSurfaceConfigIndex, &surfaceConfig);
+	if(NULL == surfaceConfig.pSurfaceConfig)
+		{
+		ERR_PRINTF1(_L("GetParameter Failed 01"));
+		return SetTestStepError(KErrGeneral);
+		}
+		
+	iSurfaceConfig = reinterpret_cast<TSurfaceConfiguration*>(surfaceConfig.pSurfaceConfig);
+	// INFO_PRINTF2(_L("SurfaceConfig : %x"), iSurfaceConfig);
+	TSurfaceId surfaceId;
+	(*iSurfaceConfig).GetSurfaceId(surfaceId);
+	// INFO_PRINTF2(_L("Surface Id:%d: "),surfaceId);
+	
+	// Get default OMX_PARAM_PORTDEFINITIONTYPE paramaters
+	iOmxParamPortInput.nSize = sizeof(OMX_PARAM_PORTDEFINITIONTYPE);
+	iOmxParamPortInput.nVersion = TOmxILSpecVersion();
+	iOmxParamPortInput.nPortIndex = 0;
+	GetParameter(iGraphicSinkCompHandle,OMX_IndexParamPortDefinition,&iOmxParamPortInput);
+	
+    // Set the color format to the supported type OMX_COLOR_FormatCbYCrY
+	// initial settings
+    iOmxParamPortInput.format.video.eColorFormat = OMX_COLOR_FormatCbYCrY;
+    iOmxParamPortInput.format.video.nFrameWidth = 320;
+    iOmxParamPortInput.format.video.nFrameHeight = 240;
+    iOmxParamPortInput.format.video.nStride = 320*2;
+    iOmxParamPortInput.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
+    SetParameter(iGraphicSinkCompHandle,OMX_IndexParamPortDefinition,&iOmxParamPortInput);
+	}
+
+void CGraphicsSinkTestBase::DeleteCCameraBuf()
+	{
+	// Clean up from AllocateCCameraBuf
+	if (iCamOutputBuffer)
+		{
+		delete iCamOutputBuffer;
+		iCamOutputBuffer = NULL;
+	
+		iTestChunk.Close();
+		iSurfaceUpdateSession.CancelAllUpdateNotifications();
+		iSurfaceUpdateSession.Close();
+		iSurfaceManager.CloseSurface(iSurfaceId);
+		iSurfaceId = TSurfaceId::CreateNullId();
+		iSurfaceManager.Close();
+		}
+	}
+
+void CGraphicsSinkTestBase::AllocateCCameraBuf()
+	{
+	// Setting paramters for surface manager
+    iOmxParamPortInput.format.video.eColorFormat = OMX_COLOR_FormatCbYCrY;
+    iOmxParamPortInput.format.video.xFramerate = 0;
+    iOmxParamPortInput.format.video.nFrameHeight = 320;
+    iOmxParamPortInput.format.video.nFrameWidth = 240;
+    iOmxParamPortInput.format.video.nStride = iOmxParamPortInput.format.video.nFrameWidth * COmxILMMBuffer::BytesPerPixel(iOmxParamPortInput.format.video.eColorFormat);
+    SetParameter(iGraphicSinkCompHandle,OMX_IndexParamPortDefinition,&iOmxParamPortInput);
+	GetParameter(iGraphicSinkCompHandle,OMX_IndexParamPortDefinition,&iOmxParamPortInput);
+    
+	// Create surface manager
+	RSurfaceManager::TSurfaceCreationAttributesBuf bf;
+    RSurfaceManager::TSurfaceCreationAttributes& b = bf();
+    
+    b.iSize.iWidth = iOmxParamPortInput.format.video.nFrameWidth;
+    b.iSize.iHeight = iOmxParamPortInput.format.video.nFrameHeight;
+    b.iBuffers = iOmxParamPortInput.nBufferCountActual;
+    b.iPixelFormat = EUidPixelFormatRGB_565; // Look for conversion method
+    b.iStride = iOmxParamPortInput.format.video.nStride;
+    b.iOffsetToFirstBuffer = 0;
+    b.iOffsetBetweenBuffers = 0; // let surfacemanager choose.
+#ifndef __WINSCW__
+    b.iAlignment = RSurfaceManager::EPageAligned;
+#else
+    b.iAlignment = 2;  //TBC  //working algn = 2z
+#endif
+    b.iContiguous = ETrue;
+    b.iMappable = ETrue;
+    
+	TInt grapherr = InitialiseSurfaceManager();
+	if(grapherr != KErrNone && grapherr != KErrAlreadyExists)
+		{
+		ERR_PRINTF1(_L("CGraphicsSurfaceSink::NewL FAILED"));
+		return SetTestStepError(grapherr);
+		}
+
+	TRAPD(error, iCamOutputBuffer = COmxILMMBuffer::NewL(iTestChunk));
+	if(error != KErrNone)
+		{
+		ERR_PRINTF1(_L("COmxILMMBuffer::NewL FAILED"));
+		return SetTestStepError(error);
+		}
+
+	TInt ret = CreateAndMapSurface(bf, iCamOutputBuffer->SurfaceId());
+	if(ret != KErrNone)
+		{
+		ERR_PRINTF2(_L("CreateAndMapSurfaceL FAILED: %d"), ret);
+		return SetTestStepError(ret);
+		}
+	//INFO_PRINTF2(_L("CGraphicsSinkTestBase::UseBufferTask: Chunk size: %d"),iCamOutputBuffer->Chunk().Size());	
+	
+	RSurfaceManager::TInfoBuf surfacebuf;
+	ret = iSurfaceManager.SurfaceInfo(iCamOutputBuffer->SurfaceId(), surfacebuf);
+	if(ret != KErrNone)
+		{
+		ERR_PRINTF1(_L("RSurfaceManager::SurfaceInfo FAILED"));
+		return SetTestStepError(ret);
+		}
+	
+	// INFO_PRINTF2(_L("Surface Id:%d "),iCamOutputBuffer->SurfaceId());
+	iCamOutputBuffer->SurfaceInfoV01() = surfacebuf();
+	// INFO_PRINTF2(_L("Handle of RChunk graph: %d"),iCamOutputBuffer->Chunk().Handle());
+
+	TInt numberofbuffer = b.iBuffers;
+	for(TInt i = 0 ; i < numberofbuffer; i++ )
+		{
+		TInt offset;
+		iSurfaceManager.GetBufferOffset(iCamOutputBuffer->SurfaceId(),i,offset);
+		
+		//INFO_PRINTF3(_L("CGraphicsSinkTestBase::AllocateCCameraBuf() offset no %d = %d"), i , offset);
+		
+		iCamOutputBuffer->OffsetInfoArray().Append(offset);
+		}
+
+	}
+
+void CGraphicsSinkTestBase::AllocateBufferTask()
+	{
+	TInt bytesperpixel = COmxILMMBuffer::BytesPerPixel(iOmxParamPortInput.format.video.eColorFormat);
+	TInt size = bytesperpixel * iOmxParamPortInput.format.video.nFrameWidth * iOmxParamPortInput.format.video.nFrameHeight;
+	
+	// Assume that allocate buffer is only called in state loaded
+	iPreviousState = OMX_StateLoaded;
+	SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateIdle,0);
+	AllocateBuffer(iGraphicSinkCompHandle,&iInputBufferHeader,0,NULL,size,&iInputBufferHeaders,iOmxParamPortInput.nBufferCountActual);
+	// This also confirms that the buffer count is correct, as is shouldnt be zero
+	if (iInputBufferHeaders.Count() == 0)
+		{
+		ERR_PRINTF2(_L("CGraphicsSinkTestBase::AllocateBufferTask: iInputBufferHeaders Count %d"),iInputBufferHeaders.Count());
+		CActiveScheduler::Stop();
+		return SetTestStepError(KErrGeneral);
+		}
+	iInputBufferHeadersCount = iInputBufferHeaders.Count();
+	// Create COmxILMMBuffer*
+	// INFO_PRINTF2(_L("CGraphicsSinkTestBase::AllocateBufferTask: reinterpret_cast COmxILMMBuffer* %d"),iInputBufferHeaders[0]->pInputPortPrivate);
+	
+	
+	// duplicate chunk given from component by getconfig
+	OMX_INDEXTYPE sharedChunkMetadataExtensionIndex;
+    // due to chunk extension support in gfx
+    if (OMX_ErrorNone == OMX_GetExtensionIndex(
+            iGraphicSinkCompHandle,
+         OMX_SYMBIAN_INDEX_CONFIG_SHAREDCHUNKMETADATA_NAME,
+         &sharedChunkMetadataExtensionIndex))
+        {
+        // Communicate the shared chunk metadata to the tunnelled
+        // component
+        OMX_SYMBIAN_CONFIG_SHAREDCHUNKMETADATATYPE configSharedChunkMetadata;
+        configSharedChunkMetadata.nSize = sizeof(OMX_SYMBIAN_CONFIG_SHAREDCHUNKMETADATATYPE);
+        configSharedChunkMetadata.nVersion = TOmxILSpecVersion();            
+        configSharedChunkMetadata.nPortIndex = 0;
+        
+        (void) OMX_GetConfig(iGraphicSinkCompHandle,
+                          sharedChunkMetadataExtensionIndex,
+                          &configSharedChunkMetadata);
+        
+
+        //map the chunk into this process
+        RThread chunkOwnerThread;
+        User::LeaveIfError(chunkOwnerThread.Open(TThreadId(configSharedChunkMetadata.nOwnerThreadId)));
+        CleanupClosePushL(chunkOwnerThread);
+                
+        iChunk.SetHandle(configSharedChunkMetadata.nHandleId);
+        User::LeaveIfError(iChunk.Duplicate(chunkOwnerThread));
+        CleanupStack::PopAndDestroy(&chunkOwnerThread);
+      
+        }
+    else
+        {
+        ERR_PRINTF1(_L("Failed to fetch shared chunk metadata from gfx sink."));
+        CActiveScheduler::Stop();
+        return SetTestStepError( KErrGeneral );
+        }
+	
+	}
+
+void CGraphicsSinkTestBase::UseBufferTask()
+	{
+	TInt size = 0;
+	if( iCamOutputBuffer->OffsetInfoArray().Count() < 2 ){
+	    iSurfaceManager.GetBufferOffset( iCamOutputBuffer->SurfaceId(), 0, size );
+	}
+	else{
+	    size = iCamOutputBuffer->OffsetInfoArray()[1] - iCamOutputBuffer->OffsetInfoArray()[0];
+	}
+    
+    // Assume that use buffer is only called in state loaded
+    iPreviousState = OMX_StateLoaded;
+    SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateIdle,0);
+    
+    // due to chunk extension support in gfx
+    OMX_INDEXTYPE sharedChunkMetadataExtensionIndex;
+    if (OMX_ErrorNone == OMX_GetExtensionIndex(
+            iGraphicSinkCompHandle,
+         OMX_SYMBIAN_INDEX_CONFIG_SHAREDCHUNKMETADATA_NAME,
+         &sharedChunkMetadataExtensionIndex))
+        {
+        // Communicate the shared chunk metadata to the tunnelled
+        // component
+        OMX_SYMBIAN_CONFIG_SHAREDCHUNKMETADATATYPE configSharedChunkMetadata;
+        configSharedChunkMetadata.nSize = sizeof(OMX_SYMBIAN_CONFIG_SHAREDCHUNKMETADATATYPE);
+        configSharedChunkMetadata.nVersion = TOmxILSpecVersion();            
+        configSharedChunkMetadata.nPortIndex = 0;
+        configSharedChunkMetadata.nHandleId = iCamOutputBuffer->Chunk().Handle();
+        configSharedChunkMetadata.nOwnerThreadId = RThread().Id().Id();            
+        
+        iError = OMX_SetConfig(iGraphicSinkCompHandle,
+                          sharedChunkMetadataExtensionIndex,
+                          &configSharedChunkMetadata);
+        
+        if (OMX_ErrorNone != iError)
+            {
+            ERR_PRINTF1(_L("CGraphicsSinkTestBase::UseBufferTask: Set shared chunk config error!"));
+            return SetTestStepError(PrintOmxError(iError));
+            } 
+        }
+       
+    
+	for (TInt i = 0 ; i < iOmxParamPortInput.nBufferCountActual; i++)
+		{
+	    //INFO_PRINTF4(_L("CGraphicsSinkTestBase::UseBufferTask: size = %d, chunk base = 0x%08x, offset = %d.") , size, iCamOutputBuffer->Chunk().Base(), iCamOutputBuffer->OffsetInfoArray()[i] );
+		iError = iGraphicSinkCompHandle->UseBuffer(iGraphicSinkCompHandle,
+												&iOutputBufferHeader,
+												0,					// input port
+												NULL, /*iCamOutputBuffer,*/		// pAppPrivate
+												size,		// update
+												iCamOutputBuffer->Chunk().Base() + iCamOutputBuffer->OffsetInfoArray()[i] /* // change made due to OMXILBufferClass */);		//
+		if (OMX_ErrorNone != iError)
+			{
+			ERR_PRINTF1(_L("CGraphicsSinkTestBase::UseBufferTask: UseBuffer Error"));
+			return SetTestStepError(PrintOmxError(iError));
+			}
+		// INFO_PRINTF2(_L("surface ID y : %d"), iCamOutputBuffer->SurfaceId());	
+		// INFO_PRINTF2(_L("Buffer offset : %d"), iCamOutputBuffer->iBufferOffset);	
+		if (iOutputBufferHeaders.Append(iOutputBufferHeader) != KErrNone)
+			{
+			ERR_PRINTF1(_L("OOM ERROR"));
+			return SetTestStepError(KErrGeneral);
+			}
+		}
+	}
+
+void CGraphicsSinkTestBase::AllocateBufferTaskStress()
+	{
+	// Color format should be default value: OMX_COLOR_Format16bitRGB565
+	TInt bytesperpixel = COmxILMMBuffer::BytesPerPixel(iOmxParamPortInput.format.video.eColorFormat);
+	TInt size = bytesperpixel * iOmxParamPortInput.format.video.nFrameWidth * iOmxParamPortInput.format.video.nFrameHeight;
+	
+	// Assume that allocate buffer is only called in state loaded
+	iPreviousState = OMX_StateLoaded;
+	SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateIdle,0);
+	
+	for(TInt i = 0 ; i < iOmxParamPortInput.nBufferCountActual; i++ )
+		{
+		iOmxErrorType = iGraphicSinkCompHandle->AllocateBuffer(iGraphicSinkCompHandle,&iInputBufferHeader,0,NULL,size);
+		if (iOmxErrorType != OMX_ErrorNone)
+			{
+			if (iOmxErrorType == OMX_ErrorInsufficientResources)
+				{
+				INFO_PRINTF2(_L("CGraphicsSinkTestBase::AllocateBufferTaskStress: AllocateBuffer returned InsufficientResources & nBufferCountActual was set to %d"),iOmxParamPortInput.nBufferCountActual);
+				CActiveScheduler::Stop();
+				return SetTestStepResult(EPass);
+				}
+			else
+				{
+				CActiveScheduler::Stop();
+				return SetTestStepError(PrintOmxError(iOmxErrorType));
+				}
+			}
+		
+		// Used for tracking
+		TRAPD(err,iInputBufferHeaders.AppendL(iInputBufferHeader));
+		if(err != KErrNone)
+			{
+			ERR_PRINTF2(_L("AppendL Buffer Failed %d"),err);
+			CActiveScheduler::Stop();
+			return SetTestStepError(err);
+			}
+		}
+	
+	// This also confirms that the buffer count is correct, as is shouldnt be zero
+	if (iInputBufferHeaders.Count() == 0)
+		{
+		ERR_PRINTF2(_L("CGraphicsSinkTestBase::AllocateBufferTaskStress: iInputBufferHeaders Count %d"),iInputBufferHeaders.Count());
+		CActiveScheduler::Stop();
+		return SetTestStepError(KErrGeneral);
+		}
+	
+	// Create COmxILMMBuffer*
+	// INFO_PRINTF2(_L("CGraphicsSinkTestBase::AllocateBufferTaskStress: reinterpret_cast COmxILMMBuffer* %d"),iInputBufferHeaders[0]->pInputPortPrivate);
+	//iCamBuf = static_cast<COmxILMMBuffer*>(iInputBufferHeaders[0]->pInputPortPrivate);
+	// duplicate chunk given from component by getconfig
+    OMX_INDEXTYPE sharedChunkMetadataExtensionIndex;
+    // due to chunk extension support in gfx
+    if (OMX_ErrorNone == OMX_GetExtensionIndex(
+            iGraphicSinkCompHandle,
+         OMX_SYMBIAN_INDEX_CONFIG_SHAREDCHUNKMETADATA_NAME,
+         &sharedChunkMetadataExtensionIndex))
+        {
+        // Communicate the shared chunk metadata to the tunnelled
+        // component
+        OMX_SYMBIAN_CONFIG_SHAREDCHUNKMETADATATYPE configSharedChunkMetadata;
+        configSharedChunkMetadata.nSize = sizeof(OMX_SYMBIAN_CONFIG_SHAREDCHUNKMETADATATYPE);
+        configSharedChunkMetadata.nVersion = TOmxILSpecVersion();            
+        configSharedChunkMetadata.nPortIndex = 0;
+        
+        (void) OMX_GetConfig(iGraphicSinkCompHandle,
+                          sharedChunkMetadataExtensionIndex,
+                          &configSharedChunkMetadata);
+        
+
+        //map the chunk into this process
+        RThread chunkOwnerThread;
+        User::LeaveIfError(chunkOwnerThread.Open(TThreadId(configSharedChunkMetadata.nOwnerThreadId)));
+        CleanupClosePushL(chunkOwnerThread);
+                
+        iChunk.SetHandle(configSharedChunkMetadata.nHandleId);
+        User::LeaveIfError(iChunk.Duplicate(chunkOwnerThread));
+        CleanupStack::PopAndDestroy(&chunkOwnerThread);
+      
+        }
+    else
+        {
+        ERR_PRINTF1(_L("Failed to fetch shared chunk metadata from gfx sink."));
+        CActiveScheduler::Stop();
+        return SetTestStepError( KErrGeneral );
+        }
+	}
+
+void CGraphicsSinkTestBase::FreeBufferTask(RPointerArray<OMX_BUFFERHEADERTYPE>* aBufferHeaders,
+		OMX_U32 aPortIndex,TBool aSendCommand)
+	{
+	if (aSendCommand)
+		{
+		SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateLoaded,0);
+		}
+	
+	FreeBuffer(iGraphicSinkCompHandle,aPortIndex,*aBufferHeaders);
+	aBufferHeaders->Reset();
+	}
+
+void CGraphicsSinkTestBase::FreeBufferTaskAlt(RPointerArray<OMX_BUFFERHEADERTYPE> aBufferHeaders,
+		OMX_U32 aPortIndex,TBool aSendCommand)
+	{
+	if (aSendCommand)
+		{
+		SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateLoaded,0);
+		}
+	
+	FreeBuffer(iGraphicSinkCompHandle,aPortIndex,aBufferHeaders);
+	}
+
+void CGraphicsSinkTestBase::FillCCamBuffer(const RChunk& aCamBuf, OMX_U32 aFrameWidth,
+		OMX_U32 aFrameHeight, TInt aBytePerPixel, TInt aNumOfActualBuffer)
+	{	
+	// FillThisBuffer
+	TRgb red_col(255,0,0);
+	TRgb blue_col(0,255,0);
+	TRgb green_col(0,0,255);
+	TRgb black_col(0,0,0);
+	TUint32 red_color = red_col.Color64K();
+	TUint32 blue_color = blue_col.Color64K();
+	TUint32 green_color = green_col.Color64K();
+	TUint32 black_color = black_col.Color64K();
+	TUint32 col[] = {red_color, blue_color, green_color, black_color};
+	
+	TInt stride = aFrameWidth * aBytePerPixel;
+	TInt colIndex = 0;
+	for(TInt index=0; index<aNumOfActualBuffer; ++index)
+		{
+		//TODO: TUint8* surfacePtr = aCamBuf->Chunk().Base() + aCamBuf->BufferOffset();
+		TUint8* surfacePtr = aCamBuf.Base() + (iOmxParamPortInput.nBufferSize * index);
+		TUint8* linePtr = surfacePtr;
+		
+		TUint16* ptr = reinterpret_cast<TUint16*>(surfacePtr);
+		
+		// Fill first line
+		for (TInt xx = 0; xx < aFrameWidth; xx++)
+			{
+			colIndex = Math::Random() % 4;
+			ptr[xx] = (TUint16)col[colIndex];
+			//ptr[xx] = (TUint16)col[colIndex%4];
+			colIndex++;
+			}
+			
+		// Now copy that to the other lines
+		for (TInt yy = 1; yy < aFrameHeight; yy++)
+			{
+			linePtr += stride;
+			Mem::Move(linePtr, surfacePtr, stride);
+			}	
+		}
+	}
+
+void CGraphicsSinkTestBase::CreateOmxParamPortDefinitionType(OMX_PARAM_PORTDEFINITIONTYPE* aOmxParamPortType)
+	{
+	aOmxParamPortType->nSize = sizeof(OMX_PARAM_PORTDEFINITIONTYPE);
+	aOmxParamPortType->nVersion = TOmxILSpecVersion();
+	aOmxParamPortType->nPortIndex = 0;
+	GetParameter(iGraphicSinkCompHandle,OMX_IndexParamPortDefinition,aOmxParamPortType,OMX_ErrorNone);
+    // initial settings
+	aOmxParamPortType->format.video.nFrameWidth = 320;
+	aOmxParamPortType->format.video.nFrameHeight = 240;
+	aOmxParamPortType->format.video.eColorFormat = OMX_COLOR_FormatCbYCrY;
+	aOmxParamPortType->format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
+	aOmxParamPortType->format.video.xFramerate = 0;
+	aOmxParamPortType->format.video.nStride = 320*2;
+	aOmxParamPortType->format.video.nSliceHeight = 10;
+	aOmxParamPortType->format.video.nBitrate = 96000;
+	}
+
+void CGraphicsSinkTestBase::CreateOmxVideoParamPortFormatType(OMX_VIDEO_PARAM_PORTFORMATTYPE* aOmxVideoParamPortType)
+	{
+	aOmxVideoParamPortType->nSize = sizeof(OMX_VIDEO_PARAM_PORTFORMATTYPE);
+	aOmxVideoParamPortType->nVersion = TOmxILSpecVersion();
+	aOmxVideoParamPortType->nPortIndex = 0;
+	aOmxVideoParamPortType->nIndex = 0;
+	// The following 2 values should be over written by the correct ones for this index
+	aOmxVideoParamPortType->eCompressionFormat = OMX_VIDEO_CodingUnused;
+	aOmxVideoParamPortType->eColorFormat = OMX_COLOR_FormatCrYCbY;
+	aOmxVideoParamPortType->xFramerate = 0;
+	GetParameter(iGraphicSinkCompHandle,OMX_IndexParamVideoPortFormat,aOmxVideoParamPortType,OMX_ErrorNone);
+	}
+
+void CGraphicsSinkTestBase::CompareU32Param(OMX_U32 aSetParamType, OMX_U32 aGetParamType)
+	{
+	if (aSetParamType != aGetParamType)
+		{
+		ERR_PRINTF3(_L("Comparison failed:  Set value: %d Get value: %d"),aSetParamType,aGetParamType);
+		return SetTestStepError(KErrGeneral);
+		}
+	}
+
+void CGraphicsSinkTestBase::CompareCFTParam(OMX_COLOR_FORMATTYPE aInputParamType, OMX_COLOR_FORMATTYPE aOutputParamType, OMX_INDEXTYPE aIndexType)
+	{
+	if (aInputParamType != aOutputParamType)
+		{
+		ERR_PRINTF3(_L("Comparison failed:  set value: %d Index : %X"),aInputParamType,aIndexType);
+		ERR_PRINTF3(_L("Comparison failed:  get value: %d Index : %X"),aOutputParamType,aIndexType);
+		return SetTestStepError(KErrGeneral);
+		}
+	}
+
+void CGraphicsSinkTestBase::CompareVCTParam(OMX_VIDEO_CODINGTYPE aInputParamType, OMX_VIDEO_CODINGTYPE aOutputParamType, OMX_INDEXTYPE aIndexType)
+	{
+	if (aInputParamType != aOutputParamType)
+		{
+		ERR_PRINTF3(_L("Comparison failed:  set value: %d Index : %X"),aInputParamType,aIndexType);
+		ERR_PRINTF3(_L("Comparison failed:  get value: %d Index : %X"),aOutputParamType,aIndexType);
+		return SetTestStepError(KErrGeneral);
+		}
+	}
+
+void CGraphicsSinkTestBase::CompareBoolParam(OMX_BOOL aInputParamType, OMX_BOOL aOutputParamType, OMX_INDEXTYPE aIndexType)
+	{
+	if (aInputParamType != aOutputParamType)
+		{
+		ERR_PRINTF3(_L("Comparison failed:  set value: %d Index : %X"),aInputParamType,aIndexType);
+		ERR_PRINTF3(_L("Comparison failed:  get value: %d Index : %X"),aOutputParamType,aIndexType);
+		return SetTestStepError(KErrGeneral);
+		}
+	}
+
+TInt CGraphicsSinkTestBase::PostKickOffTestL(TInt aTimerId)
+	{
+	if (aTimerId == 1)
+		{
+		iTestTimedOut = ETrue;
+		return KErrNone;
+		}
+	else
+		{
+		if (iPreviousState == OMX_StatePause && (TestStepName() == (_L("MMVIDEO-OMX-GS-007-01-HP")) ||
+				TestStepName() == (_L("MMVIDEO-OMX-GS-007-03-HP"))))
+			{
+			SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateExecuting,0);
+			return KErrNone;
+			}
+		else
+			{
+			if (iPreviousState == OMX_StatePause && (TestStepName() == (_L("MMVIDEO-OMX-GS-007-02-HP")) ||
+					TestStepName() == (_L("MMVIDEO-OMX-GS-007-04-HP"))))
+				{
+				SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateIdle,0);
+				return KErrNone;
+				}
+			}
+		}
+	return KErrNone;
+	}
+
+void CGraphicsSinkTestBase::ErrorEventTask_001(OMX_ERRORTYPE aOmxError)
+	{
+	// INFO_PRINTF2(_L("GSTest001: EventError iteration: %d"), iTestIteration);
+	if (iTestIteration == 0)
+		{
+		if (aOmxError == OMX_ErrorIncorrectStateTransition)
+			{
+			GetState(iGraphicSinkCompHandle,&iOmxStateType,OMX_StateLoaded);
+			SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StatePause,0,OMX_ErrorNone);
+			}
+		else
+			{
+			ERR_PRINTF1(_L("CGraphicsSinkTestBase::ErrorEventTask_001: Invoked incorrect error event"));
+			CActiveScheduler::Stop();
+			return SetTestStepError(KErrGeneral);
+			}
+		}
+	if (iTestIteration == 1)
+		{
+		if (aOmxError == OMX_ErrorIncorrectStateTransition)
+			{
+			GetState(iGraphicSinkCompHandle,&iOmxStateType,OMX_StateLoaded);
+			SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateLoaded,0,OMX_ErrorNone);
+			}
+		else
+			{
+			ERR_PRINTF1(_L("CGraphicsSinkTestBase::ErrorEventTask_001: Invoked incorrect error event"));
+			CActiveScheduler::Stop();
+			return SetTestStepError(KErrGeneral);
+			}
+		}
+	if (iTestIteration == 2)
+		{
+		if (aOmxError == OMX_ErrorSameState)
+			{
+			GetState(iGraphicSinkCompHandle,&iOmxStateType,OMX_StateLoaded);
+			SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateInvalid,0,OMX_ErrorNone);
+			}
+		else
+			{
+			ERR_PRINTF1(_L("CGraphicsSinkTestBase::ErrorEventTask_001: Invoked incorrect error event"));
+			CActiveScheduler::Stop();
+			return SetTestStepError(KErrGeneral);
+			}
+		}
+	if (iTestIteration == 3)
+		{
+		if (iExecutingToIdle == EFalse && aOmxError == OMX_ErrorInvalidState)
+			{
+			// INFO_PRINTF1(_L("CGraphicsSinkTestBase::ErrorEventTask_001: Invoked correct error event"));
+			CActiveScheduler::Stop();
+			return SetTestStepResult(EPass);
+			}
+		else
+			{
+			ERR_PRINTF1(_L("CGraphicsSinkTestBase::ErrorEventTask_001: Invoked incorrect error event"));
+			CActiveScheduler::Stop();
+			return SetTestStepResult(EPass);
+			}
+		}
+	iTestIteration++;
+	}
+
+
+void CGraphicsSinkTestBase::LoadedStateTask_002()
+	{
+	iPreviousState = OMX_StateLoaded;
+	// INFO_PRINTF2(_L("GSTest002: Test complete iteration: %d"), iTestIteration);
+	iTestIteration++;
+
+	if(TestStepName() == (_L("MMVIDEO-OMX-GS-002-01-HP")))
+		{
+		if (iTestIteration == 1)
+			{
+			INFO_PRINTF1(_L("CGraphicsSinkTestBase::LoadedStateTask_002: __MM_HEAP_MARK"));
+			__UHEAP_MARK;
+			}
+		else
+			{
+			INFO_PRINTF1(_L("CGraphicsSinkTestBase::LoadedStateTask_002: __MM_HEAP_MARKEND"));
+			__UHEAP_MARKEND;
+			iTestTimedOut = ETrue;
+			}
+		}
+	
+	if(TestStepName() == (_L("MMVIDEO-OMX-GS-002-03-HP")))
+		{
+		// Only increase the buffer count every 5 times
+		iOmxParamPortInput.nBufferCountActual = iOmxParamPortInput.nBufferCountMin + iTestIteration/5;
+		// INFO_PRINTF2(_L("CGraphicsSinkTestBase::LoadedStateTask_002: Setting nBufferCountActual: %d"), iOmxParamPortInput.nBufferCountActual);
+		SetParameter(iGraphicSinkCompHandle,OMX_IndexParamPortDefinition,&iOmxParamPortInput);
+		}
+	
+	if(iTestIteration < KMaxTestIterations && !iTestTimedOut)
+		{
+		AllocateBufferTask();
+		}
+	else
+		{
+		CActiveScheduler::Stop();
+		return SetTestStepResult(EPass);
+		}
+	}
+	
+void CGraphicsSinkTestBase::IdleStateTask_002()
+	{
+	iPreviousState = OMX_StateIdle;
+	FreeBufferTask(&iInputBufferHeaders,0);
+	}
+
+void CGraphicsSinkTestBase::LoadedStateTask_003()
+	{
+	iPreviousState = OMX_StateLoaded;
+	// INFO_PRINTF2(_L("GSTest003: Test complete iteration: %d"), iTestIteration);
+	iTestIteration++;
+
+	if(TestStepName() == (_L("MMVIDEO-OMX-GS-003-01-HP")))
+		{
+		if (iTestIteration == 1)
+			{
+			INFO_PRINTF1(_L("CGraphicsSinkTestBase::LoadedStateTask_003: __MM_HEAP_MARK"));
+			__UHEAP_MARK;
+			}
+		else
+			{
+			INFO_PRINTF1(_L("CGraphicsSinkTestBase::LoadedStateTask_003: __MM_HEAP_MARKEND"));
+			DeleteCCameraBuf();
+			__UHEAP_MARKEND;
+			iTestTimedOut = ETrue;
+			}
+		}
+
+	if(TestStepName() == (_L("MMVIDEO-OMX-GS-003-03-HP")))
+		{
+		// Only increase the buffer count every 5 times
+		iOmxParamPortInput.nBufferCountActual = iOmxParamPortInput.nBufferCountMin + iTestIteration/5;
+		// INFO_PRINTF2(_L("CGraphicsSinkTestBase::LoadedStateTask_003: Setting nBufferCountActual: %d"), iOmxParamPortOutput.nBufferCountActual);
+		SetParameter(iGraphicSinkCompHandle,OMX_IndexParamPortDefinition,&iOmxParamPortInput);
+		}
+	
+	if(!iTestTimedOut)
+		{
+		DeleteCCameraBuf();
+		AllocateCCameraBuf();
+		UseBufferTask();
+		}
+	else
+		{
+		CActiveScheduler::Stop();
+		return SetTestStepResult(EPass);
+		}
+	}
+	
+void CGraphicsSinkTestBase::IdleStateTask_003()
+	{
+	iPreviousState = OMX_StateIdle;
+	FreeBufferTask(&iOutputBufferHeaders,0);
+	}
+
+void CGraphicsSinkTestBase::LoadedStateTask_004()
+	{
+	// INFO_PRINTF2(_L("GSTest004: Test complete iteration: %d"), iTestIteration);
+	iTestIteration++;
+	
+	GetState(iGraphicSinkCompHandle,&iOmxStateType,OMX_StateLoaded);
+	iPreviousState = OMX_StateLoaded;
+	if(TestStepName() == (_L("MMVIDEO-OMX-GS-004-01-HP")))
+		{
+		if (iTestIteration == 1)
+			{
+			INFO_PRINTF1(_L("CGraphicsSinkTestBase::LoadedStateTask_004: __MM_HEAP_MARK"));
+			__UHEAP_MARK;
+			}
+		else
+			{
+			INFO_PRINTF1(_L("CGraphicsSinkTestBase::LoadedStateTask_004: __MM_HEAP_MARKEND"));
+			__UHEAP_MARKEND;
+			iTestTimedOut = ETrue;
+			}
+		}
+	
+	if(TestStepName() == (_L("MMVIDEO-OMX-GS-004-03-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-004-05-HP")))
+		{
+		iOmxParamPortInput.nBufferCountActual = 5 + iTestIteration/5;
+		INFO_PRINTF2(_L("CGraphicsSinkTestBase::LoadedStateTask_004: Setting nBufferCountActual: %d"), iOmxParamPortInput.nBufferCountActual);
+		SetParameter(iGraphicSinkCompHandle,OMX_IndexParamPortDefinition,&iOmxParamPortInput);
+		}
+	
+	if(iTestIteration < KMaxTestIterations && !iTestTimedOut)
+		{
+		AllocateBufferTask();
+		}
+	else 
+		{
+		CActiveScheduler::Stop();
+		return SetTestStepResult(EPass);
+		}
+	}
+
+void CGraphicsSinkTestBase::IdleStateTask_004()
+	{
+	GetState(iGraphicSinkCompHandle,&iOmxStateType,OMX_StateIdle);
+	if(iPreviousState == OMX_StateLoaded)
+		{
+		iPreviousState = OMX_StateIdle;
+		SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateExecuting,0);
+		}
+	else if(iPreviousState == OMX_StateExecuting)
+		{
+		// INFO_PRINTF2(_L("CGraphicsSinkTestBase::IdleStateTask_004: Executing to Idle task Count %d"),iExecuteToIdleCount);
+		iExecuteToIdleCount++;
+		iPreviousState = OMX_StateIdle;
+		
+		if (TestStepName() == (_L("MMVIDEO-OMX-GS-004-01-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-004-02-HP"))
+				|| TestStepName() == (_L("MMVIDEO-OMX-GS-004-03-HP")))
+			{
+			FreeBufferTask(&iInputBufferHeaders,0);
+			}
+		
+		if (TestStepName() == (_L("MMVIDEO-OMX-GS-004-04-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-004-05-HP"))
+				 || TestStepName() == (_L("MMVIDEO-OMX-GS-004-06-HP")))
+			{
+			if (iExecuteToIdleCount < 20)
+				{
+				SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateExecuting,0);
+				}
+			else
+				{
+				FreeBufferTask(&iInputBufferHeaders,0);
+				}
+			}
+		}
+	}
+	
+void CGraphicsSinkTestBase::ExecutingStateTask_004()
+	{
+	GetState(iGraphicSinkCompHandle,&iOmxStateType,OMX_StateExecuting);
+	iPreviousState = OMX_StateExecuting;
+	
+	if (TestStepName() == (_L("MMVIDEO-OMX-GS-004-06-HP")))
+		{
+		iExecuteToIdleCount = 20;
+		iTestTimedOut = ETrue;
+		EmptyThisBufferTask();
+		}
+	else
+		{
+		SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateIdle, 0);
+		}
+	}
+
+void CGraphicsSinkTestBase::LoadedStateTask_005()
+	{
+	// INFO_PRINTF2(_L("GSTest005: Test complete iteration: %d"), iTestIteration);
+	iTestIteration++;
+	
+	GetState(iGraphicSinkCompHandle,&iOmxStateType,OMX_StateLoaded);
+	iPreviousState = OMX_StateLoaded;
+	if(TestStepName() == (_L("MMVIDEO-OMX-GS-005-01-HP")))
+		{
+		if (iTestIteration == 1)
+			{
+			INFO_PRINTF1(_L("CGraphicsSinkTestBase::LoadedStateTask_005: __MM_HEAP_MARK"));
+			__UHEAP_MARK;
+			}
+		else
+			{
+			INFO_PRINTF1(_L("CGraphicsSinkTestBase::LoadedStateTask_005: __MM_HEAP_MARKEND"));
+			__UHEAP_MARKEND;
+			iTestTimedOut = ETrue;
+			}
+		}
+	
+	if(TestStepName() == (_L("MMVIDEO-OMX-GS-005-03-HP")))
+		{
+		iOmxParamPortInput.nBufferCountActual = Min(5 + iTestIteration, 100); // let's cap the amount of buffers :-)
+		// INFO_PRINTF2(_L("CGraphicsSinkTestBase::LoadedStateTask_005: Setting nBufferCountActual: %d"), iOmxParamPortInput.nBufferCountActual);
+		SetParameter(iGraphicSinkCompHandle,OMX_IndexParamPortDefinition,&iOmxParamPortInput);
+		}
+	
+	if(iTestIteration < KMaxTestIterations && !iTestTimedOut)
+		{
+		AllocateBufferTask();
+		}
+	else
+		{
+		
+		CActiveScheduler::Stop();
+		return SetTestStepResult(EPass);
+		}
+	}
+
+void CGraphicsSinkTestBase::IdleStateTask_005()
+	{
+	GetState(iGraphicSinkCompHandle,&iOmxStateType,OMX_StateIdle);
+	if(iPreviousState == OMX_StateLoaded)
+		{
+		iPreviousState = OMX_StateIdle;
+		SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateExecuting,0);
+		}
+	if(iPreviousState == OMX_StateExecuting)
+		{
+		iPreviousState = OMX_StateIdle;
+		if (TestStepName() == (_L("MMVIDEO-OMX-GS-005-04-HP")) && !iTestTimedOut)
+			{
+			// INFO_PRINTF2(_L("CGraphicsSinkTestBase::IdleStateTask_005: Test complete iteration: %d"), iTestIteration);
+			iTestIteration++;
+			SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateExecuting,0);
+			}
+		else
+			{
+			FreeBufferTask(&iInputBufferHeaders,0);
+			}
+		}
+	}
+
+void CGraphicsSinkTestBase::ExecutingStateTask_005()
+	{
+	GetState(iGraphicSinkCompHandle,&iOmxStateType,OMX_StateExecuting);
+	iPreviousState = OMX_StateExecuting;
+	EmptyThisBufferTask();
+	}
+
+void CGraphicsSinkTestBase::LoadedStateTask_006()
+	{
+	// INFO_PRINTF2(_L("GSTest006: Test complete iteration: %d"), iTestIteration);
+	iTestIteration++;
+
+	iPreviousState = OMX_StateLoaded;
+	if(TestStepName() == (_L("MMVIDEO-OMX-GS-006-01-HP")) && !iTestTimedOut)
+		{
+		iOmxParamPortInput.nBufferCountActual = iOmxParamPortInput.nBufferCountActual + 1;
+		SetParameter(iGraphicSinkCompHandle,OMX_IndexParamPortDefinition,&iOmxParamPortInput);
+		AllocateBufferTaskStress();
+		}
+	else
+		{
+		CActiveScheduler::Stop();
+		return SetTestStepResult(EPass);
+		}
+	}
+		
+void CGraphicsSinkTestBase::IdleStateTask_006()
+	{
+	iPreviousState = OMX_StateIdle;
+	if(TestStepName() == (_L("MMVIDEO-OMX-GS-006-01-HP")))
+		{
+		SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateLoaded,0);
+
+		FreeBuffer(iGraphicSinkCompHandle,0,iInputBufferHeaders);
+		iInputBufferHeaders.Reset();
+		}
+	if(TestStepName() == (_L("MMVIDEO-OMX-GS-006-02-HP")))
+		{
+		// Allocate to many buffers
+		TInt bytesperpixel = COmxILMMBuffer::BytesPerPixel(iOmxParamPortInput.format.video.eColorFormat);
+		TInt size = bytesperpixel * iOmxParamPortInput.format.video.nFrameWidth * iOmxParamPortInput.format.video.nFrameHeight;
+		
+		iOmxErrorType = iGraphicSinkCompHandle->AllocateBuffer(iGraphicSinkCompHandle,&iInputBufferHeader,0,NULL,size);
+		if (OMX_ErrorIncorrectStateOperation != iOmxErrorType)
+			{
+			ERR_PRINTF1(_L("AllocateBuffer failed to return error"));
+			CActiveScheduler::Stop();
+			return SetTestStepError(PrintOmxError(iOmxErrorType));
+			}
+
+		// Confirm state remains OMX_StateIdle
+		GetState(iGraphicSinkCompHandle,&iOmxStateType,OMX_StateIdle);
+		
+		// FreeBuffer without calling SendCommand to OMX_StateLoaded
+		FreeBuffer(iGraphicSinkCompHandle, 0, iInputBufferHeaders);
+		iInputBufferHeaders.Reset();
+		}
+	}
+
+void CGraphicsSinkTestBase::LoadedStateTask_007()
+	{
+	switch (iPreviousState)
+		{
+		case OMX_StateIdle:
+			{
+			iPreviousState = OMX_StateLoaded;
+			CActiveScheduler::Stop();
+			return SetTestStepResult(EPass);
+			}
+		case OMX_StateWaitForResources:
+			{
+			// State is OMX_StateIdle from OMX_StateWaitForResources
+			break;
+			}
+		}
+	}
+
+void CGraphicsSinkTestBase::IdleStateTask_007()
+	{
+	switch (iPreviousState)
+		{
+		case OMX_StateLoaded:
+			{
+			iPreviousState = OMX_StateIdle;
+			if (TestStepName() == (_L("MMVIDEO-OMX-GS-007-03-HP")) || TestStepName() == (_L("MMVIDEO-OMX-GS-007-04-HP")))
+				{
+				SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StatePause,0);
+				}
+			else
+				{
+				SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateExecuting,0);
+				}
+			break;
+			}
+		case OMX_StateExecuting:
+			{
+			iPreviousState = OMX_StateIdle;
+			if (TestStepName() == (_L("MMVIDEO-OMX-GS-007-03-HP")) && !iTestTimedOut)
+				{
+				SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StatePause,0);
+				}
+			else
+				{
+				// INFO_PRINTF2(_L("CGraphicsSinkTestBase::IdleStateTask_007:: Executing to Idle task Count %d"),iExecuteToIdleCount);
+				iExecuteToIdleCount++;
+				SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateLoaded,0);
+				
+				FreeBuffer(iGraphicSinkCompHandle,0,iInputBufferHeaders);
+				iInputBufferHeaders.Reset();
+				}
+			break;
+			}
+		case OMX_StatePause:
+			{
+			iPreviousState = OMX_StateIdle;
+			if (TestStepName() == (_L("MMVIDEO-OMX-GS-007-04-HP")) && !iTestTimedOut)
+				{
+				SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StatePause,0);
+				}
+			else
+				{
+				if (iTestTimedOut)
+					{
+					// INFO_PRINTF2(_L("CGraphicsSinkTestBase::IdleStateTask_007:: Executing to Idle task Count %d"),iExecuteToIdleCount);
+					iExecuteToIdleCount++;
+					SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateLoaded,0);
+					
+					FreeBuffer(iGraphicSinkCompHandle,0,iInputBufferHeaders);
+					iInputBufferHeaders.Reset();
+					}
+				else
+					{
+					SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateExecuting,0);
+					}
+				}
+			}
+		}
+	}
+
+void CGraphicsSinkTestBase::PauseStateTask_007()
+	{
+	iPreviousState = OMX_StatePause;
+	// INFO_PRINTF2(_L("CGraphicsSinkTestBase::PauseStateTask_007:: Pause state task count %d"),iPauseStateCount);
+	if(++iPauseStateCount == 5)
+		{
+		iTestTimedOut = ETrue;
+		}
+	
+	if(iTestShutdown)
+		{
+		delete iTestShutdown;
+		}
+	
+	TRAPD(err, iTestShutdown = COmxGsTestShutdown::NewL(this,2));
+	if(err)
+		{
+		ERR_PRINTF1(_L("OOM ERROR"));
+		CActiveScheduler::Stop();
+		return SetTestStepError(err);
+		}
+	iInterval = KTSU_OMX_GS_PAUSE;
+	iTestShutdown->Start(iInterval,KErrGeneral, EPass);
+	}
+
+void CGraphicsSinkTestBase::ExecutingStateTask_007()
+	{
+	iPreviousState = OMX_StateExecuting;
+	// INFO_PRINTF2(_L("CGraphicsSinkTestBase::ExecutingStateTask_007 Idle to Executing task Count %d"),iIdleToExecuteCount);
+    iIdleToExecuteCount++;
+    
+    if (TestStepName() == (_L("MMVIDEO-OMX-GS-007-03-HP")) || iTestTimedOut)
+    	{
+		SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateIdle,0);
+    	}
+    else
+    	{
+    	EmptyThisBufferTask();
+    	}
+	}
+
+void CGraphicsSinkTestBase::StartStateTransitionTask()
+	{
+	GetState(iGraphicSinkCompHandle,&iState,OMX_StateLoaded);
+	iGphxPrevState = iState;
+	
+	if (iTestStep == 4)
+		{
+		SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateWaitForResources,0);
+		}
+	else
+		{
+		AllocateBufferTask();
+		}
+	}
+
+void CGraphicsSinkTestBase::WaitForResourcesTransitionTask()
+	{
+	GetState(iGraphicSinkCompHandle,&iState,OMX_StateWaitForResources);
+	iGphxPrevState = iState;
+	
+	if (iTestStep == 4)
+		{
+		iWaitForResources = ETrue;
+		SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateLoaded,0);
+		}
+	}
+
+void CGraphicsSinkTestBase::LoadedStateTransitionTask()
+	{
+	//INFO_PRINTF3(_L("GSTest00%d: Test complete iteration: %d"), iTestCase, iTestIteration);
+	iTestIteration++;
+	GetState(iGraphicSinkCompHandle,&iState,OMX_StateLoaded);
+	
+	iGphxPrevState = iState;
+	if(iTestStep == 1)
+		{
+		if (iTestIteration == 1)
+			{
+			INFO_PRINTF3(_L("LoadedStateTransitionTask_00%d_0%d: __MM_HEAP_MARK"), iTestCase,iTestStep);
+			__UHEAP_MARK;
+			}
+		else
+			{
+			INFO_PRINTF3(_L("LoadedStateTransitionTask_00%d_0%d: __MM_HEAP_MARKEND"), iTestCase,iTestStep);
+			__UHEAP_MARKEND;
+			iTestTimedOut = ETrue;
+			}
+		}
+	
+	if(iTestStep == 3)
+		{
+		if ((iOmxParamPortInput.nBufferCountMin + iTestIteration/10) <= MAXNUMOFBUFFERS)
+			{
+			iOmxParamPortInput.nBufferCountActual = iOmxParamPortInput.nBufferCountMin + iTestIteration/10;
+			//INFO_PRINTF3(_L("GSTest00%d: Setting INPUT nBufferCountActual: %d"),iTestCase,iOmxParamPortInput.nBufferCountActual);
+			SetParameter(iGraphicSinkCompHandle,OMX_IndexParamPortDefinition,&iOmxParamPortInput);
+			}
+		}
+	
+	if(iTestIteration < KMaxTestIterations && !iTestTimedOut)
+		{
+		if (iTestStep == 4 && iWaitForResources)
+			{
+			SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateWaitForResources,0);
+			}
+		else
+			{
+			iWaitForResources = EFalse;
+			AllocateBufferTask();
+			}
+		}
+	else
+		{
+		CActiveScheduler::Stop();
+		}
+	}
+
+void CGraphicsSinkTestBase::IdleStateTransitionTask()
+	{
+	GetState(iGraphicSinkCompHandle,&iState,OMX_StateIdle);
+	if(iGphxPrevState == OMX_StateLoaded)
+		{
+		iGphxPrevState = iState;
+		SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateExecuting,0);
+		}
+	else if(iGphxPrevState == OMX_StateExecuting)
+		{
+		iGphxPrevState = iState;
+		FreeBufferTaskAlt(iInputBufferHeaders,0);
+		iInputBufferHeaders.Reset();
+		}
+	}
+
+void CGraphicsSinkTestBase::ExecutingStateTransitionTask()
+	{
+	GetState(iGraphicSinkCompHandle,&iState,OMX_StateExecuting);
+	iGphxPrevState = iState;
+	
+	SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateIdle,0);
+	}
+
+void CGraphicsSinkTestBase::StartBufferDoneTask()
+	{
+	GetState(iGraphicSinkCompHandle,&iState,OMX_StateLoaded);
+	iGphxPrevState = iState;
+	
+	AllocateBufferTask();
+	}
+
+void CGraphicsSinkTestBase::LoadedStateBufferTask()
+	{
+	// INFO_PRINTF3(_L("GSTest00%d: Test complete iteration: %d"), iTestCase, iTestIteration);
+	iTestIteration++;
+	GetState(iGraphicSinkCompHandle,&iState,OMX_StateLoaded);
+	iGphxPrevState = iState;
+	if(iTestStep == 1 || iTestStep == 5|| iTestStep == 6)
+		{
+		if (iTestIteration == 1)
+			{
+			INFO_PRINTF3(_L("LoadedStateTransitionTask_00%d_0%d: __MM_HEAP_MARK"), iTestCase,iTestStep);
+			__UHEAP_MARK;
+			}
+		else
+			{
+			INFO_PRINTF3(_L("LoadedStateTransitionTask_00%d_0%d: __MM_HEAP_MARKEND"), iTestCase,iTestStep);
+			__UHEAP_MARKEND;
+			iTestTimedOut = ETrue;
+			}
+		}
+	
+	if(iTestStep == 3)
+		{
+		OMX_U32 setbuffercount = iOmxParamPortInput.nBufferCountMin + iTestIteration/10;
+		if (setbuffercount <= MAXNUMOFBUFFERS && setbuffercount != iOmxParamPortInput.nBufferCountActual)
+			{
+			iOmxParamPortInput.nBufferCountActual = iOmxParamPortInput.nBufferCountMin + iTestIteration/10;
+			iDoEmptyBufferDoneLimit = iOmxParamPortInput.nBufferCountActual;
+			INFO_PRINTF4(_L("GSTest00%d: Setting INPUT nBufferCountActual: %d DoEmptyBufferDoneLimit: %d")
+					,iTestCase,iOmxParamPortInput.nBufferCountActual,iDoEmptyBufferDoneLimit);
+			SetParameter(iGraphicSinkCompHandle,OMX_IndexParamPortDefinition,&iOmxParamPortInput);
+			}
+		}
+	
+	if(iTestIteration < KMaxTestIterations && !iTestTimedOut)
+		{
+		iWaitForResources = EFalse;
+		AllocateBufferTask();
+		}
+	else
+		{
+		CActiveScheduler::Stop(); // End the test
+		}
+	}
+
+void CGraphicsSinkTestBase::IdleStateBufferTask()
+	{
+	GetState(iGraphicSinkCompHandle,&iState,OMX_StateIdle);
+	if(iGphxPrevState == OMX_StateLoaded)
+		{
+		iGphxPrevState = iState;
+		SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateExecuting,0);
+		}
+	else if(iGphxPrevState == OMX_StateExecuting)
+		{
+		iGphxPrevState = iState;
+		FreeBufferTaskAlt(iInputBufferHeaders,0);
+		iInputBufferHeaders.Reset();
+		}
+	}
+
+void CGraphicsSinkTestBase::ExecutingStateBufferTask()
+	{
+	GetState(iGraphicSinkCompHandle,&iState,OMX_StateExecuting);
+	iGphxPrevState = iState;
+	
+	EmptyThisBufferTask();
+	if (iTestStep == 5)
+		{
+		SendCommand(iGraphicSinkCompHandle,OMX_CommandStateSet,OMX_StateIdle,0);
+		}
+	}