mmlibs/mmfw/tsrc/mmfunittest/DevVideo/src/TestDevVideoPlayThree.cpp
changeset 0 40261b775718
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmlibs/mmfw/tsrc/mmfunittest/DevVideo/src/TestDevVideoPlayThree.cpp	Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,1998 @@
+
+// Copyright (c) 2003-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:
+// TestDevVideoPlay.cpp
+// 
+//
+
+#include "TestDevVideoPlay.h"
+#include "TestDevVideoPlayTestData.h"
+#include "TestDevVideoPlugins/decoder.h"
+#include "TestDevVideoPlugins/postproc.h"
+#include <e32math.h>
+
+void CTestDevVideoPlayResume::MdvpoInitComplete(TInt aError)
+	{
+	INFO_PRINTF2(_L("CTestDevVideoPlayResume::MdvpoInitComplete():  Error = %d"), aError);
+	
+	iError = aError;
+	}
+
+CTestDevVideoPlayResume::CTestDevVideoPlayResume(const TDesC& aTestName, TTestType aTestType)
+	:CTestDevVideoPlayStep(aTestName, aTestType)
+	{
+	}
+
+CTestDevVideoPlayResume* CTestDevVideoPlayResume::NewL(const TDesC& aTestName, TTestType aTestType)
+	{
+	CTestDevVideoPlayResume* self = new(ELeave) CTestDevVideoPlayResume(aTestName, aTestType);
+	return self;
+	}
+
+TVerdict CTestDevVideoPlayResume::DoTestL(CMMFDevVideoPlay& aDevVideoPlay)
+	{
+	TVerdict ret = EPass;
+//	TInt expErr = KErrNone;
+	TBool selDec = ETrue;
+	TBool selPost = ETrue;
+
+	INFO_PRINTF1(_L("CMMFDevVideoPlay:  Resume"));
+	
+	// expected results
+	switch(iTestType)
+		{
+		case ETestValid:
+//			expErr = KErrNone;	// EABI warning removal
+			break;
+		case ETestDecoderOnly:
+			selPost = EFalse;
+			break;
+		case ETestPostProcOnly:
+			selDec = EFalse;
+			break;
+		default:
+			ERR_PRINTF1(_L("Error - invalid test step type"));
+			return EInconclusive;
+		}
+
+	TInt err = KErrNone;
+
+//	THwDeviceId hwDecoder = 0;
+//	THwDeviceId hwPostProc = 0;
+
+	// select decoder
+	if (selDec)
+		{
+//		TRAP(err, hwDecoder = aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));
+		TRAP(err, aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));	// EABI warning removal
+		if (err != KErrNone)
+			{
+			ERR_PRINTF1(_L("Error - couldn't initialize decoder"));
+			return EInconclusive;
+			}
+		}
+
+	// select post-processor
+	if (selPost)
+		{
+//		TRAP(err, hwPostProc = aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));
+		TRAP(err, aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));	// EABI warning removal
+		if (err != KErrNone)
+			{
+			ERR_PRINTF1(_L("Error - couldn't initialize post processor"));
+			return EInconclusive;
+			}
+		}
+
+	// initialize CDevVideoPlay and wait for response
+	// iError is set by the MdvpoInitComplete callback
+	aDevVideoPlay.Initialize();
+	
+	if (iError != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize DevVideoPlay"));
+		return EInconclusive;
+		}
+
+	// check not already playing
+	TBool playing = aDevVideoPlay.IsPlaying();
+	if (playing)
+		{
+		ERR_PRINTF1(_L("Error - DevVideoPlay already playing!"));
+		return EInconclusive;
+		}
+
+	// call resume on DevVideoPlay then check IsPlaying()
+	aDevVideoPlay.Resume();
+	playing = aDevVideoPlay.IsPlaying();
+
+	if (!playing)
+		{
+		ERR_PRINTF1(_L("IsPlaying() returned EFalse - expected ETrue"));
+		ret = EFail;
+		}
+	else
+		INFO_PRINTF1(_L("Resume() called successfully"));
+	
+	return ret;
+	}
+//------------------------------------------------------------------
+
+void CTestDevVideoPlaySetPosition::MdvpoInitComplete(TInt aError)
+	{
+	INFO_PRINTF2(_L("CTestDevVideoPlaySetPosition::MdvpoInitComplete():  Error = %d"), aError);
+	
+	iError = aError;
+	}
+
+CTestDevVideoPlaySetPosition::CTestDevVideoPlaySetPosition(const TDesC& aTestName, TTestType aTestType)
+	:CTestDevVideoPlayStep(aTestName, aTestType)
+	{
+	}
+
+CTestDevVideoPlaySetPosition* CTestDevVideoPlaySetPosition::NewL(const TDesC& aTestName, TTestType aTestType)
+	{
+	CTestDevVideoPlaySetPosition* self = new(ELeave) CTestDevVideoPlaySetPosition(aTestName, aTestType);
+	return self;
+	}
+
+TVerdict CTestDevVideoPlaySetPosition::DoTestL(CMMFDevVideoPlay& aDevVideoPlay)
+	{
+	TVerdict ret = EPass;
+	TInt expErr = KErrNone;
+	TBool selDec = ETrue;
+	TBool selPost = ETrue;
+	TInt testPos = KTestPosition;
+
+	INFO_PRINTF1(_L("CMMFDevVideoPlay:  SetPosition"));
+	
+	// expected results
+	switch(iTestType)
+		{
+		case ETestValid:
+			expErr = KErrNone;
+			break;
+		case ETestBothFatal:
+			expErr = KErrDied;
+			testPos = KTestPositionFatal;
+			break;
+		case ETestDecoderFatal:
+			expErr = KErrDied;
+			testPos = KTestPositionFatal;
+			// fall through to set post proc to false;
+		case ETestDecoderOnly:
+			selPost = EFalse;
+			break;
+		case ETestPostProcFatal:
+			expErr = KErrDied;
+			testPos = KTestPositionFatal;
+			// fall through to set decoder to false;
+		case ETestPostProcOnly:
+			selDec = EFalse;
+			break;
+		default:
+			ERR_PRINTF1(_L("Error - invalid test step type"));
+			return EInconclusive;
+		}
+
+	TInt err = KErrNone;
+
+//	THwDeviceId hwDecoder = 0;
+//	THwDeviceId hwPostProc = 0;
+
+	// select decoder
+	if (selDec)
+		{
+//		TRAP(err, hwDecoder = aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));
+		TRAP(err, aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));	// EABI warning removal
+		if (err != KErrNone)
+			{
+			ERR_PRINTF1(_L("Error - couldn't initialize decoder"));
+			return EInconclusive;
+			}
+		}
+
+	// select post-processor
+	if (selPost)
+		{
+//		TRAP(err, hwPostProc = aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));
+		TRAP(err, aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));	// EABI warning removal
+		if (err != KErrNone)
+			{
+			ERR_PRINTF1(_L("Error - couldn't initialize post processor"));
+			return EInconclusive;
+			}
+		}
+
+	// initialize CDevVideoPlay and wait for response
+	// iError is set by the MdvpoInitComplete callback
+	aDevVideoPlay.Initialize();
+	
+	if (iError != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize DevVideoPlay"));
+		return EInconclusive;
+		}
+
+	TTimeIntervalMicroSeconds pos(testPos);
+
+	// call SetPosition 
+	aDevVideoPlay.SetPosition(pos);
+
+	// if no PANIC and iError is as expected then test has passed
+	// if performing a fatal test then expect iError = KErrDied
+	if (iError == expErr)
+		{
+		ERR_PRINTF3(_L("SetPosition() got error %d;  Expected %d"), iError, expErr);
+		}
+	else
+		{
+		INFO_PRINTF1(_L("SetPosition() called successfully"));
+		}
+	return ret;
+	}
+//------------------------------------------------------------------
+
+void CTestDevVideoPlayFreezePicture::MdvpoInitComplete(TInt aError)
+	{
+	INFO_PRINTF2(_L("CTestDevVideoPlayFreezePicture::MdvpoInitComplete():  Error = %d"), aError);
+	
+	iError = aError;
+	}
+
+CTestDevVideoPlayFreezePicture::CTestDevVideoPlayFreezePicture(const TDesC& aTestName, TTestType aTestType)
+	:CTestDevVideoPlayStep(aTestName, aTestType)
+	{
+	}
+
+CTestDevVideoPlayFreezePicture* CTestDevVideoPlayFreezePicture::NewL(const TDesC& aTestName, TTestType aTestType)
+	{
+	CTestDevVideoPlayFreezePicture* self = new(ELeave) CTestDevVideoPlayFreezePicture(aTestName, aTestType);
+	return self;
+	}
+
+TVerdict CTestDevVideoPlayFreezePicture::DoTestL(CMMFDevVideoPlay& aDevVideoPlay)
+	{
+	TVerdict ret = EPass;
+	
+	INFO_PRINTF1(_L("CMMFDevVideoPlay:  FreezePicture"));
+	
+	// expected results
+	if (iTestType != ETestValid)
+		{
+		ERR_PRINTF1(_L("Error - invalid test step type"));
+		return EInconclusive;
+		}
+
+	TInt err = KErrNone;
+
+//	THwDeviceId hwDecoder = 0;
+//	THwDeviceId hwPostProc = 0;
+
+	// select decoder
+//	TRAP(err, hwDecoder = aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));
+	TRAP(err, aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));	// EABI warning removal
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize decoder"));
+		return EInconclusive;
+		}
+
+	// select post-processor
+//	TRAP(err, hwPostProc = aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));
+	TRAP(err, aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));	// EABI warning removal
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize post processor"));
+		return EInconclusive;
+		}
+
+	// initialize CDevVideoPlay and wait for response
+	// iError is set by the MdvpoInitComplete callback
+	aDevVideoPlay.Initialize();
+	
+	if (iError != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize DevVideoPlay"));
+		return EInconclusive;
+		}
+
+	TTimeIntervalMicroSeconds pos(KTestPosition);
+
+	// call FreezePicture 
+	aDevVideoPlay.FreezePicture(pos);
+
+	// if no PANIC then test has passed
+
+	INFO_PRINTF1(_L("FreezePicture() called successfully"));
+
+	return ret;
+	}
+//------------------------------------------------------------------
+
+void CTestDevVideoPlayReleaseFreeze::MdvpoInitComplete(TInt aError)
+	{
+	INFO_PRINTF2(_L("CTestDevVideoPlayReleaseFreeze::MdvpoInitComplete():  Error = %d"), aError);
+	
+	iError = aError;
+	}
+
+CTestDevVideoPlayReleaseFreeze::CTestDevVideoPlayReleaseFreeze(const TDesC& aTestName, TTestType aTestType)
+	:CTestDevVideoPlayStep(aTestName, aTestType)
+	{
+	}
+
+CTestDevVideoPlayReleaseFreeze* CTestDevVideoPlayReleaseFreeze::NewL(const TDesC& aTestName, TTestType aTestType)
+	{
+	CTestDevVideoPlayReleaseFreeze* self = new(ELeave) CTestDevVideoPlayReleaseFreeze(aTestName, aTestType);
+	return self;
+	}
+
+TVerdict CTestDevVideoPlayReleaseFreeze::DoTestL(CMMFDevVideoPlay& aDevVideoPlay)
+	{
+	TVerdict ret = EPass;
+	
+	INFO_PRINTF1(_L("CMMFDevVideoPlay:  ReleaseFreeze"));
+	
+	// expected results
+	if (iTestType != ETestValid)
+		{
+		ERR_PRINTF1(_L("Error - invalid test step type"));
+		return EInconclusive;
+		}
+
+	TInt err = KErrNone;
+
+//	THwDeviceId hwDecoder = 0;
+//	THwDeviceId hwPostProc = 0;
+
+	// select decoder
+//	TRAP(err, hwDecoder = aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));
+	TRAP(err, aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));	// EABI warning removal
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize decoder"));
+		return EInconclusive;
+		}
+
+	// select post-processor
+//	TRAP(err, hwPostProc = aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));
+	TRAP(err, aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));	// EABI warning removal
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize post processor"));
+		return EInconclusive;
+		}
+
+	// initialize CDevVideoPlay and wait for response
+	// iError is set by the MdvpoInitComplete callback
+	aDevVideoPlay.Initialize();
+	
+	if (iError != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize DevVideoPlay"));
+		return EInconclusive;
+		}
+
+	TTimeIntervalMicroSeconds pos(KTestPosition);
+
+	// call ReleaseFreeze 
+	aDevVideoPlay.ReleaseFreeze(pos);
+
+	// if no PANIC then test has passed
+
+	INFO_PRINTF1(_L("ReleaseFreeze() called successfully"));
+
+	return ret;
+	}
+//------------------------------------------------------------------
+
+void CTestDevVideoPlayDecodingPosition::MdvpoInitComplete(TInt aError)
+	{
+	INFO_PRINTF2(_L("CTestDevVideoPlayDecodingPosition::MdvpoInitComplete():  Error = %d"), aError);
+	
+	iError = aError;
+		}
+
+CTestDevVideoPlayDecodingPosition::CTestDevVideoPlayDecodingPosition(const TDesC& aTestName, TTestType aTestType)
+	:CTestDevVideoPlayStep(aTestName, aTestType)
+	{
+	}
+
+CTestDevVideoPlayDecodingPosition* CTestDevVideoPlayDecodingPosition::NewL(const TDesC& aTestName, TTestType aTestType)
+	{
+	CTestDevVideoPlayDecodingPosition* self = new(ELeave) CTestDevVideoPlayDecodingPosition(aTestName, aTestType);
+	return self;
+	}
+
+TVerdict CTestDevVideoPlayDecodingPosition::DoTestL(CMMFDevVideoPlay& aDevVideoPlay)
+	{
+	TVerdict ret = EPass;
+	
+	INFO_PRINTF1(_L("CMMFDevVideoPlay:  DecodingPosition"));
+	
+	// expected results
+	if (iTestType != ETestValid)
+		{
+		ERR_PRINTF1(_L("Error - invalid test step type"));
+		return EInconclusive;
+		}
+
+	TInt err = KErrNone;
+
+//	THwDeviceId hwDecoder = 0;
+//	THwDeviceId hwPostProc = 0;
+
+	// select decoder
+//	TRAP(err, hwDecoder = aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));
+	TRAP(err, aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));	// EABI warning removal
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize decoder"));
+		return EInconclusive;
+		}
+
+	// select post-processor
+//	TRAP(err, hwPostProc = aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));
+	TRAP(err, aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));	// EABI warning removal
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize post processor"));
+		return EInconclusive;
+		}
+
+	// initialize CDevVideoPlay and wait for response
+	// iError is set by the MdvpoInitComplete callback
+	aDevVideoPlay.Initialize();
+	
+	if (iError != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize DevVideoPlay"));
+		return EInconclusive;
+		}
+
+	// get decoding position
+	TTimeIntervalMicroSeconds decPos = aDevVideoPlay.DecodingPosition();
+
+	// check against test data
+	TTimeIntervalMicroSeconds testTime(KTestDecodePosition);
+	if (decPos != testTime)
+		{
+		ERR_PRINTF3(_L("DecodingPosition() incorrect - gave %d (expected %d)"),
+			I64LOW(decPos.Int64()), KTestDecodePosition);
+		ret = EFail;
+		}
+	else
+		INFO_PRINTF1(_L("DecodingPosition() called successfully"));
+	
+	return ret;
+	}
+//------------------------------------------------------------------
+
+void CTestDevVideoPlayPlaybackPosition::MdvpoInitComplete(TInt aError)
+	{
+	INFO_PRINTF2(_L("CTestDevVideoPlayPlaybackPosition::MdvpoInitComplete():  Error = %d"), aError);
+	
+	iError = aError;
+	}
+
+CTestDevVideoPlayPlaybackPosition::CTestDevVideoPlayPlaybackPosition(const TDesC& aTestName, TTestType aTestType)
+	:CTestDevVideoPlayStep(aTestName, aTestType)
+	{
+	}
+
+CTestDevVideoPlayPlaybackPosition* CTestDevVideoPlayPlaybackPosition::NewL(const TDesC& aTestName, TTestType aTestType)
+	{
+	CTestDevVideoPlayPlaybackPosition* self = new(ELeave) CTestDevVideoPlayPlaybackPosition(aTestName, aTestType);
+	return self;
+	}
+
+TVerdict CTestDevVideoPlayPlaybackPosition::DoTestL(CMMFDevVideoPlay& aDevVideoPlay)
+	{
+	TVerdict ret = EPass;
+	
+	INFO_PRINTF1(_L("CMMFDevVideoPlay:  PlaybackPosition"));
+	
+	// expected results
+	if (iTestType != ETestValid)
+		{
+		ERR_PRINTF1(_L("Error - invalid test step type"));
+		return EInconclusive;
+		}
+
+	TInt err = KErrNone;
+
+//	THwDeviceId hwDecoder = 0;
+//	THwDeviceId hwPostProc = 0;
+
+	// select decoder
+//	TRAP(err, hwDecoder = aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));
+	TRAP(err, aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));	// EABI warning removal
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize decoder"));
+		return EInconclusive;
+		}
+
+	// select post-processor
+//	TRAP(err, hwPostProc = aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));
+	TRAP(err, aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));	// EABI warning removal
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize post processor"));
+		return EInconclusive;
+		}
+
+	// initialize CDevVideoPlay and wait for response
+	// iError is set by the MdvpoInitComplete callback
+	aDevVideoPlay.Initialize();
+	
+	if (iError != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize DevVideoPlay"));
+		return EInconclusive;
+		}
+
+	// get playback position
+	TTimeIntervalMicroSeconds playPos = aDevVideoPlay.PlaybackPosition();
+
+	// check against test data
+	TTimeIntervalMicroSeconds testTime(KTestPlayPosition);
+	if (playPos != testTime)
+		{
+		ERR_PRINTF3(_L("PlaybackPosition() incorrect - gave %d (expected %d)"),
+			I64LOW(playPos.Int64()), KTestPlayPosition);
+		ret = EFail;
+		}
+	else
+		INFO_PRINTF1(_L("PlaybackPosition() called successfully"));
+	
+	return ret;
+	}
+//------------------------------------------------------------------
+
+void CTestDevVideoPlayPreDecoderBufferBytes::MdvpoInitComplete(TInt aError)
+	{
+	INFO_PRINTF2(_L("CTestDevVideoPlayPreDecoderBufferBytes::MdvpoInitComplete():  Error = %d"), aError);
+	
+	iError = aError;
+	}
+
+CTestDevVideoPlayPreDecoderBufferBytes::CTestDevVideoPlayPreDecoderBufferBytes(const TDesC& aTestName, TTestType aTestType)
+	:CTestDevVideoPlayStep(aTestName, aTestType)
+	{
+	}
+
+CTestDevVideoPlayPreDecoderBufferBytes* CTestDevVideoPlayPreDecoderBufferBytes::NewL(const TDesC& aTestName, TTestType aTestType)
+	{
+	CTestDevVideoPlayPreDecoderBufferBytes* self = new(ELeave) CTestDevVideoPlayPreDecoderBufferBytes(aTestName, aTestType);
+	return self;
+	}
+
+TVerdict CTestDevVideoPlayPreDecoderBufferBytes::DoTestL(CMMFDevVideoPlay& aDevVideoPlay)
+	{
+	TVerdict ret = EPass;
+	
+	INFO_PRINTF1(_L("CMMFDevVideoPlay:  PreDecoderBufferBytes"));
+	
+	// expected results
+	if (iTestType != ETestValid)
+		{
+		ERR_PRINTF1(_L("Error - invalid test step type"));
+		return EInconclusive;
+		}
+
+	TInt err = KErrNone;
+
+//	THwDeviceId hwDecoder = 0;
+//	THwDeviceId hwPostProc = 0;
+
+	// select decoder
+//	TRAP(err, hwDecoder = aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));
+	TRAP(err, aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));	// EABI warning removal
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize decoder"));
+		return EInconclusive;
+		}
+
+	// select post-processor
+//	TRAP(err, hwPostProc = aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));
+	TRAP(err, aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));	// EABI warning removal
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize post processor"));
+		return EInconclusive;
+		}
+
+	// initialize CDevVideoPlay and wait for response
+	// iError is set by the MdvpoInitComplete callback
+	aDevVideoPlay.Initialize();
+	
+	if (iError != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize DevVideoPlay"));
+		return EInconclusive;
+		}
+
+	// get pre-decoder buffer bytes
+	TUint decBytes = aDevVideoPlay.PreDecoderBufferBytes();
+
+	// check against test data
+	if (decBytes != KTestPreDecoderBytes)
+		{
+		ERR_PRINTF3(_L("PreDecoderBufferBytes() incorrect - gave %d (expected %d)"),
+			decBytes, KTestPreDecoderBytes);
+		ret = EFail;
+		}
+	else
+		INFO_PRINTF1(_L("PreDecoderBufferBytes() called successfully"));
+	
+	return ret;
+	}
+//------------------------------------------------------------------
+
+void CTestDevVideoPlayPictureBufferBytes::MdvpoInitComplete(TInt aError)
+	{
+	INFO_PRINTF2(_L("CTestDevVideoPlayPictureBufferBytes::MdvpoInitComplete():  Error = %d"), aError);
+	
+	iError = aError;
+	}
+
+CTestDevVideoPlayPictureBufferBytes::CTestDevVideoPlayPictureBufferBytes(const TDesC& aTestName, TTestType aTestType)
+	:CTestDevVideoPlayStep(aTestName, aTestType)
+	{
+	}
+
+CTestDevVideoPlayPictureBufferBytes* CTestDevVideoPlayPictureBufferBytes::NewL(const TDesC& aTestName, TTestType aTestType)
+	{
+	CTestDevVideoPlayPictureBufferBytes* self = new(ELeave) CTestDevVideoPlayPictureBufferBytes(aTestName, aTestType);
+	return self;
+	}
+
+TVerdict CTestDevVideoPlayPictureBufferBytes::DoTestL(CMMFDevVideoPlay& aDevVideoPlay)
+	{
+	TVerdict ret = EPass;
+	
+	INFO_PRINTF1(_L("CMMFDevVideoPlay:  PictureBufferBytes"));
+	
+	// expected results
+	if (iTestType != ETestValid)
+		{
+		ERR_PRINTF1(_L("Error - invalid test step type"));
+		return EInconclusive;
+		}
+
+	TInt err = KErrNone;
+
+//	THwDeviceId hwDecoder = 0;
+//	THwDeviceId hwPostProc = 0;
+
+	// select decoder
+//	TRAP(err, hwDecoder = aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));
+	TRAP(err, aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));	// EABI warning removal
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize decoder"));
+		return EInconclusive;
+		}
+
+	// select post-processor
+//	TRAP(err, hwPostProc = aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));
+	TRAP(err, aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice)); // EABI warning removal
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize post processor"));
+		return EInconclusive;
+		}
+
+	// initialize CDevVideoPlay and wait for response
+	// iError is set by the MdvpoInitComplete callback
+	aDevVideoPlay.Initialize();
+	
+	if (iError != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize DevVideoPlay"));
+		return EInconclusive;
+		}
+
+	// get picture buffer bytes
+	TUint picBytes = aDevVideoPlay.PictureBufferBytes();
+
+	// check against test data
+	if (picBytes != KTestPictureBytes)
+		{
+		ERR_PRINTF3(_L("PictureBufferBytes() incorrect - gave %d (expected %d)"),
+			picBytes, KTestPictureBytes);
+		ret = EFail;
+		}
+	else
+		INFO_PRINTF1(_L("PictureBufferBytes() called successfully"));
+	
+	return ret;
+	}
+//------------------------------------------------------------------
+
+void CTestDevVideoPlayGetPictureCounters::MdvpoInitComplete(TInt aError)
+	{
+	INFO_PRINTF2(_L("CTestDevVideoPlayGetPictureCounters::MdvpoInitComplete():  Error = %d"), aError);
+	
+	iError = aError;
+	}
+
+CTestDevVideoPlayGetPictureCounters::CTestDevVideoPlayGetPictureCounters(const TDesC& aTestName, TTestType aTestType)
+	:CTestDevVideoPlayStep(aTestName, aTestType)
+	{
+	}
+
+CTestDevVideoPlayGetPictureCounters* CTestDevVideoPlayGetPictureCounters::NewL(const TDesC& aTestName, TTestType aTestType)
+	{
+	CTestDevVideoPlayGetPictureCounters* self = new(ELeave) CTestDevVideoPlayGetPictureCounters(aTestName, aTestType);
+	return self;
+	}
+
+TVerdict CTestDevVideoPlayGetPictureCounters::DoTestL(CMMFDevVideoPlay& aDevVideoPlay)
+	{
+	TVerdict ret = EPass;
+	TInt expErr = KErrNone;
+	TBool selDec = ETrue;
+	TBool selPost = ETrue;
+
+	INFO_PRINTF1(_L("CMMFDevVideoPlay:  GetPictureCounters"));
+	
+	// expected results
+	switch(iTestType)
+		{
+		case ETestValid:
+			expErr = KErrNone;
+			break;
+		case ETestDecoderOnly:
+			selPost = EFalse;
+			break;
+		case ETestPostProcOnly:
+			selDec = EFalse;
+			break;
+		default:
+			ERR_PRINTF1(_L("Error - invalid test step type"));
+			return EInconclusive;
+		}
+
+	TInt err = KErrNone;
+
+	THwDeviceId hwDecoder = 0;
+	THwDeviceId hwPostProc = 0;
+
+	// select decoder
+	if (selDec)
+		{
+		TRAP(err, hwDecoder = aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));
+		if (err != KErrNone)
+			{
+			ERR_PRINTF1(_L("Error - couldn't initialize decoder"));
+			return EInconclusive;
+			}
+		}
+
+	// select post-processor
+	if (selPost)
+		{
+		TRAP(err, hwPostProc = aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));
+		if (err != KErrNone)
+			{
+			ERR_PRINTF1(_L("Error - couldn't initialize post processor"));
+			return EInconclusive;
+			}
+		}
+
+	// initialize CDevVideoPlay and wait for response
+	// iError is set by the MdvpoInitComplete callback
+	aDevVideoPlay.Initialize();
+	
+	if (iError != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize DevVideoPlay"));
+		return EInconclusive;
+		}
+
+	CMMFDevVideoPlay::TPictureCounters picCounts;
+
+	// get picture counters from DevVideoPlay
+	aDevVideoPlay.GetPictureCounters(picCounts);
+
+	// N.B. PicturesSkipped is sum of decoder and post processor so
+	// we have to add these
+	CMMFDevVideoPlay::TPictureCounters testCounts = GetTestPictureCounters();
+	if (hwDecoder && hwPostProc)
+		{
+		// account for both decoder and post processor
+		testCounts.iPicturesSkipped *= 2; 
+		}
+	else if (hwPostProc)
+		{
+		// no decoded samples from a post processor
+		testCounts.iPicturesDecoded = 0;
+		}
+
+	if (!ComparePictureCounters(picCounts, testCounts))
+		{
+		ERR_PRINTF1(_L("GetPictureCounters() comparison with test data failed!"));
+		ret = EFail;
+		}
+	else 
+		{
+		INFO_PRINTF1(_L("GetPictureCounters() comparison with test data passed."));
+		INFO_PRINTF3(_L("GetPictureCounters(), %d = %d"), err, expErr);
+		}
+
+	return ret;
+	}
+//------------------------------------------------------------------
+
+void CTestDevVideoPlayGetBitstreamCounters::MdvpoInitComplete(TInt aError)
+	{
+	INFO_PRINTF2(_L("CTestDevVideoPlayGetBitstreamCounters::MdvpoInitComplete():  Error = %d"), aError);
+	
+	iError = aError;
+	}
+
+CTestDevVideoPlayGetBitstreamCounters::CTestDevVideoPlayGetBitstreamCounters(const TDesC& aTestName, TTestType aTestType)
+	:CTestDevVideoPlayStep(aTestName, aTestType)
+	{
+	}
+
+CTestDevVideoPlayGetBitstreamCounters* CTestDevVideoPlayGetBitstreamCounters::NewL(const TDesC& aTestName, TTestType aTestType)
+	{
+	CTestDevVideoPlayGetBitstreamCounters* self = new(ELeave) CTestDevVideoPlayGetBitstreamCounters(aTestName, aTestType);
+	return self;
+	}
+
+TVerdict CTestDevVideoPlayGetBitstreamCounters::DoTestL(CMMFDevVideoPlay& aDevVideoPlay)
+	{
+	TVerdict ret = EPass;
+	TInt expErr = KErrNone;
+	
+	INFO_PRINTF1(_L("CMMFDevVideoPlay:  GetBitstreamCounters"));
+	
+	// expected results
+	if (iTestType != ETestValid)
+		{
+		ERR_PRINTF1(_L("Error - invalid test step type"));
+		return EInconclusive;
+		}
+
+	TInt err = KErrNone;
+
+//	THwDeviceId hwDecoder = 0;
+//	THwDeviceId hwPostProc = 0;
+
+	// select decoder
+//	TRAP(err, hwDecoder = aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));
+	TRAP(err, aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));// EABI warning removal
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize decoder"));
+		return EInconclusive;
+		}
+
+	// select post-processor
+//	TRAP(err, hwPostProc = aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));
+	TRAP(err, aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));	// EABI warning removal
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize post processor"));
+		return EInconclusive;
+		}
+
+	// initialize CDevVideoPlay and wait for response
+	// iError is set by the MdvpoInitComplete callback
+	aDevVideoPlay.Initialize();
+	
+	if (iError != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize DevVideoPlay"));
+		return EInconclusive;
+		}
+
+	CMMFDevVideoPlay::TBitstreamCounters bitCounts;
+
+	// get bitstream counters from DevVideoPlay
+	aDevVideoPlay.GetBitstreamCounters(bitCounts);
+
+	if (!CompareBitstreamCounters(bitCounts, GetTestBitstreamCounters()))
+		{
+		ERR_PRINTF1(_L("GetBitstreamCounters() comparison with test data failed!"));
+		ret = EFail;
+		}
+	else 
+		{
+		INFO_PRINTF1(_L("GetBitstreamCounters() comparison with test data passed."));
+		INFO_PRINTF3(_L("GetBitstreamCounters(), %d = %d"), err, expErr);
+		}
+
+	return ret;
+	}
+//------------------------------------------------------------------
+
+void CTestDevVideoPlayNumFreeBuffers::MdvpoInitComplete(TInt aError)
+	{
+	INFO_PRINTF2(_L("CTestDevVideoPlayNumFreeBuffers::MdvpoInitComplete():  Error = %d"), aError);
+	
+	iError = aError;
+	}
+
+CTestDevVideoPlayNumFreeBuffers::CTestDevVideoPlayNumFreeBuffers(const TDesC& aTestName, TTestType aTestType)
+	:CTestDevVideoPlayStep(aTestName, aTestType)
+	{
+	}
+
+CTestDevVideoPlayNumFreeBuffers* CTestDevVideoPlayNumFreeBuffers::NewL(const TDesC& aTestName, TTestType aTestType)
+	{
+	CTestDevVideoPlayNumFreeBuffers* self = new(ELeave) CTestDevVideoPlayNumFreeBuffers(aTestName, aTestType);
+	return self;
+	}
+
+TVerdict CTestDevVideoPlayNumFreeBuffers::DoTestL(CMMFDevVideoPlay& aDevVideoPlay)
+	{
+	TVerdict ret = EPass;
+	
+	INFO_PRINTF1(_L("CMMFDevVideoPlay:  NumFreeBuffers"));
+	
+	// expected results
+	if (iTestType != ETestValid)
+		{
+		ERR_PRINTF1(_L("Error - invalid test step type"));
+		return EInconclusive;
+		}
+
+	TInt err = KErrNone;
+
+//	THwDeviceId hwDecoder = 0;
+//	THwDeviceId hwPostProc = 0;
+
+	// select decoder
+//	TRAP(err, hwDecoder = aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));
+	TRAP(err, aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));	// EABI warning removal
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize decoder"));
+		return EInconclusive;
+		}
+
+	// select post-processor
+//	TRAP(err, hwPostProc = aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));
+	TRAP(err, aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));	// EABI warning removal
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize post processor"));
+		return EInconclusive;
+		}
+
+	// initialize CDevVideoPlay and wait for response
+	// iError is set by the MdvpoInitComplete callback
+	aDevVideoPlay.Initialize();
+	
+	if (iError != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize DevVideoPlay"));
+		return EInconclusive;
+		}
+
+	TUint numBuffers = 0;
+
+	// get number of free buffers from DevVideoPlay
+	numBuffers = aDevVideoPlay.NumFreeBuffers();
+
+	if (numBuffers != KTestNumFreeBuffers)
+		{
+		ERR_PRINTF1(_L("NumFreeBuffers() comparison with test data failed!"));
+		ret = EFail;
+		}
+	else 
+		{
+		INFO_PRINTF1(_L("NumFreeBuffers() comparison with test data passed."));
+		INFO_PRINTF3(_L("NumFreeBuffers(), %d = %d"), numBuffers, KTestNumFreeBuffers);
+		}
+	return ret;
+	}
+//------------------------------------------------------------------
+
+void CTestDevVideoPlaySetComplexityLevel::MdvpoInitComplete(TInt aError)
+	{
+	INFO_PRINTF2(_L("CTestDevVideoPlaySetComplexityLevel::MdvpoInitComplete():  Error = %d"), aError);
+	
+	iError = aError;
+	}
+
+CTestDevVideoPlaySetComplexityLevel::CTestDevVideoPlaySetComplexityLevel(const TDesC& aTestName, TTestType aTestType)
+	:CTestDevVideoPlayStep(aTestName, aTestType)
+	{
+	}
+
+CTestDevVideoPlaySetComplexityLevel* CTestDevVideoPlaySetComplexityLevel::NewL(const TDesC& aTestName, TTestType aTestType)
+	{
+	CTestDevVideoPlaySetComplexityLevel* self = new(ELeave) CTestDevVideoPlaySetComplexityLevel(aTestName, aTestType);
+	return self;
+	}
+
+TVerdict CTestDevVideoPlaySetComplexityLevel::DoTestL(CMMFDevVideoPlay& aDevVideoPlay)
+	{
+	TVerdict ret = EPass;
+	
+	INFO_PRINTF1(_L("CMMFDevVideoPlay:  SetComplexityLevel"));
+	
+	// expected results
+	if (iTestType != ETestValid)
+		{
+		ERR_PRINTF1(_L("Error - invalid test step type"));
+		return EInconclusive;
+		}
+
+	TInt err = KErrNone;
+
+	THwDeviceId hwDecoder = 0;
+	THwDeviceId hwPostProc = 0;
+
+	// select decoder
+	TRAP(err, hwDecoder = aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize decoder"));
+		return EInconclusive;
+		}
+
+	// select post-processor
+	TRAP(err, hwPostProc = aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize post processor"));
+		return EInconclusive;
+		}
+
+	// initialize CDevVideoPlay and wait for response
+	// iError is set by the MdvpoInitComplete callback
+	aDevVideoPlay.Initialize();
+	
+	if (iError != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize DevVideoPlay"));
+		return EInconclusive;
+		}
+
+	// set complexity level on decoder
+	aDevVideoPlay.SetComplexityLevel(hwDecoder, KTestComplexityLevel1);
+	
+	// set complexity level on post-processor
+	aDevVideoPlay.SetComplexityLevel(hwPostProc, KTestComplexityLevel2);
+
+	// if no PANIC then test has passed
+	INFO_PRINTF3(_L("SetComplexityLevel(), %d, %d"), KTestComplexityLevel1, KTestComplexityLevel2);
+	
+	return ret;
+	}
+//------------------------------------------------------------------
+
+void CTestDevVideoPlayNumComplexityLevels::MdvpoInitComplete(TInt aError)
+	{
+	INFO_PRINTF2(_L("CTestDevVideoPlayNumComplexityLevels::MdvpoInitComplete():  Error = %d"), aError);
+	
+	iError = aError;
+	}
+
+CTestDevVideoPlayNumComplexityLevels::CTestDevVideoPlayNumComplexityLevels(const TDesC& aTestName, TTestType aTestType)
+	:CTestDevVideoPlayStep(aTestName, aTestType)
+	{
+	}
+
+CTestDevVideoPlayNumComplexityLevels* CTestDevVideoPlayNumComplexityLevels::NewL(const TDesC& aTestName, TTestType aTestType)
+	{
+	CTestDevVideoPlayNumComplexityLevels* self = new(ELeave) CTestDevVideoPlayNumComplexityLevels(aTestName, aTestType);
+	return self;
+	}
+
+TVerdict CTestDevVideoPlayNumComplexityLevels::DoTestL(CMMFDevVideoPlay& aDevVideoPlay)
+	{
+	TVerdict ret = EPass;
+	
+	INFO_PRINTF1(_L("CMMFDevVideoPlay:  NumComplexityLevels"));
+	
+	// expected results
+	if (iTestType != ETestValid)
+		{
+		ERR_PRINTF1(_L("Error - invalid test step type"));
+		return EInconclusive;
+		}
+
+	TInt err = KErrNone;
+
+	THwDeviceId hwDecoder = 0;
+	THwDeviceId hwPostProc = 0;
+
+	// select decoder
+	TRAP(err, hwDecoder = aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize decoder"));
+		return EInconclusive;
+		}
+
+	// select post-processor
+	TRAP(err, hwPostProc = aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize post processor"));
+		return EInconclusive;
+		}
+
+	// initialize CDevVideoPlay and wait for response
+	// iError is set by the MdvpoInitComplete callback
+	aDevVideoPlay.Initialize();
+	
+	if (iError != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize DevVideoPlay"));
+		return EInconclusive;
+		}
+
+	// get num complexity levels on decoder
+	TUint levs1 = aDevVideoPlay.NumComplexityLevels(hwDecoder);
+	
+	// get num complexity levels on post-processor
+	TUint levs2 = aDevVideoPlay.NumComplexityLevels(hwPostProc);
+
+	// check return values against test data
+	if (levs1 != KTestNumComplexityLevels1 || levs2 != KTestNumComplexityLevels2)
+		{
+		ERR_PRINTF3(_L("Error - comparison against test data failed! (%d, %d)"), levs1, levs2);
+		}
+	else
+		{
+		INFO_PRINTF3(_L("NumComplexityLevels(), %d, %d"), levs1, levs2);
+		}
+
+	return ret;
+	}
+//------------------------------------------------------------------
+
+void CTestDevVideoPlayGetComplexityLevelInfo::MdvpoInitComplete(TInt aError)
+	{
+	INFO_PRINTF2(_L("CTestDevVideoPlayGetComplexityLevelInfo::MdvpoInitComplete():  Error = %d"), aError);
+	
+	iError = aError;
+	}
+
+CTestDevVideoPlayGetComplexityLevelInfo::CTestDevVideoPlayGetComplexityLevelInfo(const TDesC& aTestName, TTestType aTestType)
+	:CTestDevVideoPlayStep(aTestName, aTestType)
+	{
+	}
+
+CTestDevVideoPlayGetComplexityLevelInfo* CTestDevVideoPlayGetComplexityLevelInfo::NewL(const TDesC& aTestName, TTestType aTestType)
+	{
+	CTestDevVideoPlayGetComplexityLevelInfo* self = new(ELeave) CTestDevVideoPlayGetComplexityLevelInfo(aTestName, aTestType);
+	return self;
+	}
+
+TVerdict CTestDevVideoPlayGetComplexityLevelInfo::DoTestL(CMMFDevVideoPlay& aDevVideoPlay)
+	{
+	TVerdict ret = EPass;
+	
+	INFO_PRINTF1(_L("CMMFDevVideoPlay:  GetComplexityLevelInfo"));
+	
+	// expected results
+	if (iTestType != ETestValid)
+		{
+		ERR_PRINTF1(_L("Error - invalid test step type"));
+		return EInconclusive;
+		}
+
+	TInt err = KErrNone;
+
+	THwDeviceId hwDecoder = 0;
+	THwDeviceId hwPostProc = 0;
+
+	// select decoder
+	TRAP(err, hwDecoder = aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize decoder"));
+		return EInconclusive;
+		}
+
+	// select post-processor
+	TRAP(err, hwPostProc = aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize post processor"));
+		return EInconclusive;
+		}
+
+	// initialize CDevVideoPlay and wait for response
+	// iError is set by the MdvpoInitComplete callback
+	aDevVideoPlay.Initialize();
+	
+	if (iError != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize DevVideoPlay"));
+		return EInconclusive;
+		}
+
+	CMMFDevVideoPlay::TComplexityLevelInfo levInfo1;
+	CMMFDevVideoPlay::TComplexityLevelInfo levInfo2;
+
+	// get complexity level info on decoder
+	aDevVideoPlay.GetComplexityLevelInfo(hwDecoder, KTestComplexityLevel1, levInfo1);
+	
+	// get complexity level info on post-processor
+	aDevVideoPlay.GetComplexityLevelInfo(hwPostProc, KTestComplexityLevel2, levInfo2);
+
+	CMMFDevVideoPlay::TComplexityLevelInfo testInfo1 = GetTestLevelInfo(KTestComplexityLevel1);
+	CMMFDevVideoPlay::TComplexityLevelInfo testInfo2 = GetTestLevelInfo(KTestComplexityLevel2);
+
+	// check return values against test data
+	if (!CompareLevelInfos(levInfo1, testInfo1) || !CompareLevelInfos(levInfo2, testInfo2))
+		{
+		ERR_PRINTF1(_L("Error - comparison against test data failed!"));
+		}
+	else
+		{
+		INFO_PRINTF1(_L("Comparison against test data passed ok."));
+		INFO_PRINTF1(_L("GetComplexityLevelInfo() called successfully"));
+		}
+
+	return ret;
+	}
+//------------------------------------------------------------------
+
+void CTestDevVideoPlayGetBuffer::MdvpoInitComplete(TInt aError)
+	{
+	INFO_PRINTF2(_L("CTestDevVideoPlayGetBuffer::MdvpoInitComplete():  Error = %d"), aError);
+	
+	iError = aError;
+	}
+
+void CTestDevVideoPlayGetBuffer::MdvpoNewBuffers()
+	{
+	INFO_PRINTF1(_L("CTestDevVideoPlayGetBuffer::MdvpoNewBuffers()"));
+	iCalledBack = ETrue;
+	}
+
+CTestDevVideoPlayGetBuffer::CTestDevVideoPlayGetBuffer(const TDesC& aTestName, TTestType aTestType)
+	:CTestDevVideoPlayStep(aTestName, aTestType)
+	{
+	}
+
+CTestDevVideoPlayGetBuffer* CTestDevVideoPlayGetBuffer::NewL(const TDesC& aTestName, TTestType aTestType)
+	{
+	CTestDevVideoPlayGetBuffer* self = new(ELeave) CTestDevVideoPlayGetBuffer(aTestName, aTestType);
+	return self;
+	}
+
+TVerdict CTestDevVideoPlayGetBuffer::DoTestL(CMMFDevVideoPlay& aDevVideoPlay)
+	{
+	TVerdict ret = EPass;
+	TInt expErr = KErrNone;
+	
+	INFO_PRINTF1(_L("CMMFDevVideoPlay:  GetBuffer"));
+	
+	// expected results
+	if (iTestType != ETestValid)
+		{
+		ERR_PRINTF1(_L("Error - invalid test step type"));
+		return EInconclusive;
+		}
+
+	TInt err = KErrNone;
+
+//	THwDeviceId hwDecoder = 0;
+//	THwDeviceId hwPostProc = 0;
+
+	// select decoder
+//	TRAP(err, hwDecoder = aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));
+	TRAP(err, aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice)); // EABI warning removal
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize decoder"));
+		return EInconclusive;
+		}
+
+	// select post-processor
+//	TRAP(err, hwPostProc = aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));
+	TRAP(err, aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));	// EABI warning removal
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize post processor"));
+		return EInconclusive;
+		}
+
+	// initialize CDevVideoPlay and wait for response
+	// iError is set by the MdvpoInitComplete callback
+	aDevVideoPlay.Initialize();
+	
+	if (iError != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize DevVideoPlay"));
+		return EInconclusive;
+		}
+
+	TVideoInputBuffer* newBuff = NULL;
+
+	// get a buffer of a certain size from DevVideoPlay
+	TRAP(err, newBuff = aDevVideoPlay.GetBufferL(KTestBufferSize) );
+	// callback will occur and newBuff will be set to new buffer
+
+	if (err != expErr)
+		{
+		ERR_PRINTF3(_L("GetBufferL() gave error %d (expected %d)"),err, expErr);
+		ret = EFail;
+		}
+	else
+		{
+		TBool buffSuccess = EFalse;
+
+		// check callback has been called and buffer is correct
+		if (newBuff && iCalledBack)
+			{
+			TTimeIntervalMicroSeconds testTime(KTestBufferSize);
+			if ( (newBuff->iDecodingTimestamp == testTime) &&
+				 (newBuff->iOptions == KTestBufferOptions) &&
+				 (newBuff->iData == KTestBufferString) )
+				{
+				buffSuccess = ETrue;
+				}
+			}
+		
+		if (!buffSuccess)
+			{
+			ERR_PRINTF1(_L("Received buffer is corrupt!"));
+			ret = EFail;
+			}
+		else
+			{
+			INFO_PRINTF1(_L("Buffer received correctly"));
+			INFO_PRINTF3(_L("GetBuffer(), %d = %d"), err, expErr);	
+			}
+		}
+	return ret;
+	}
+//------------------------------------------------------------------
+
+void CTestDevVideoPlayWriteCodedData::MdvpoInitComplete(TInt aError)
+	{
+	INFO_PRINTF2(_L("CTestDevVideoPlayWriteCodedData::MdvpoInitComplete():  Error = %d"), aError);
+	
+	iError = aError;
+	}
+
+CTestDevVideoPlayWriteCodedData::CTestDevVideoPlayWriteCodedData(const TDesC& aTestName, TTestType aTestType)
+	:CTestDevVideoPlayStep(aTestName, aTestType)
+	{
+	}
+
+CTestDevVideoPlayWriteCodedData* CTestDevVideoPlayWriteCodedData::NewL(const TDesC& aTestName, TTestType aTestType)
+	{
+	CTestDevVideoPlayWriteCodedData* self = new(ELeave) CTestDevVideoPlayWriteCodedData(aTestName, aTestType);
+	return self;
+	}
+
+TVerdict CTestDevVideoPlayWriteCodedData::DoTestL(CMMFDevVideoPlay& aDevVideoPlay)
+	{
+	TVerdict ret = EPass;
+	TInt expErr = KErrNone;
+	
+	INFO_PRINTF1(_L("CMMFDevVideoPlay:  WriteCodedData"));
+	
+	// expected results
+	if (iTestType != ETestValid)
+		{
+		ERR_PRINTF1(_L("Error - invalid test step type"));
+		return EInconclusive;
+		}
+
+	TInt err = KErrNone;
+
+//	THwDeviceId hwDecoder = 0;
+//	THwDeviceId hwPostProc = 0;
+
+	// select decoder
+//	TRAP(err, hwDecoder = aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));
+	TRAP(err, aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));	// EABI warning removal
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize decoder"));
+		return EInconclusive;
+		}
+
+	// select post-processor
+//	TRAP(err, hwPostProc = aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));
+	TRAP(err, aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));	// EABI warning removal
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize post processor"));
+		return EInconclusive;
+		}
+
+	// initialize CDevVideoPlay and wait for response
+	// iError is set by the MdvpoInitComplete callback
+	aDevVideoPlay.Initialize();
+	
+	if (iError != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize DevVideoPlay"));
+		return EInconclusive;
+		}
+
+	// construct a video input buffer structure with a valid timestamp and
+	// write this DevVideoPlay.  Call will leave on error.
+	TVideoInputBuffer* newBuff = NULL;
+	TPtrC8 testBufferStringPtr(KTestBufferString);
+	TRAP(err, newBuff = aDevVideoPlay.GetBufferL(testBufferStringPtr.Length()));
+	if (err)
+		{
+		ERR_PRINTF1(_L("Error - couldn't get buffer from DevVideoPlay"));
+		return EInconclusive;
+		}
+	
+	// initialize newBuff with test data
+	newBuff->iOptions = KTestBufferOptions;
+	newBuff->iDecodingTimestamp = KTestBufferSize;
+	newBuff->iData.Zero();
+	newBuff->iData.Append(testBufferStringPtr);
+	
+	// write buffer to DevVideoPlay
+	TRAP(err, aDevVideoPlay.WriteCodedDataL(newBuff) )
+
+	if (err != expErr)
+		{
+		ERR_PRINTF3(_L("WriteCodedDataL() gave error %d (expected %d)"),err, expErr);
+		ret = EFail;
+		}
+	else
+		{
+		INFO_PRINTF1(_L("Coded data sent successfully"));
+		INFO_PRINTF3(_L("WriteCodedDataL(), %d = %d"), err, expErr);	
+		}
+	return ret;
+	}
+//------------------------------------------------------------------
+
+void CTestDevVideoPlayScanAndCopyCodedData::MdvpoInitComplete(TInt aError)
+	{
+	INFO_PRINTF2(_L("CTestDevVideoPlayWriteCodedData::MdvpoInitComplete():  Error = %d"), aError);
+	
+	iError = aError;
+	}
+
+CTestDevVideoPlayScanAndCopyCodedData::CTestDevVideoPlayScanAndCopyCodedData(const TDesC& aTestName, TTestType aTestType)
+	:CTestDevVideoPlayStep(aTestName, aTestType)
+	{
+	}	
+
+CTestDevVideoPlayScanAndCopyCodedData* CTestDevVideoPlayScanAndCopyCodedData::NewL(const TDesC& aTestName, TTestType aTestType)
+	{
+	CTestDevVideoPlayScanAndCopyCodedData* self = new(ELeave) CTestDevVideoPlayScanAndCopyCodedData(aTestName, aTestType);
+	return self;
+	}
+
+TVerdict CTestDevVideoPlayScanAndCopyCodedData::DoTestL(CMMFDevVideoPlay& aDevVideoPlay)
+	{
+	TVerdict ret = EPass;
+	TInt expErr = KErrNone;
+	
+	INFO_PRINTF1(_L("MMMFVideoPlayHwDeviceExtensionScanCopy:  ScanAndCopyCodedDataL"));
+	
+	// expected results
+	if (iTestType != ETestValid)
+		{
+		ERR_PRINTF1(_L("Error - invalid test step type"));
+		return EInconclusive;
+		}
+
+	TInt err = KErrNone;
+
+	THwDeviceId hwDecoder = 0;
+    
+    // select decoder
+	TRAP(err, hwDecoder = aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize decoder"));
+		return EInconclusive;
+		}
+
+	// select post-processor
+	TRAP(err, aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize post processor"));
+		return EInconclusive;
+		}
+
+	// initialize CDevVideoPlay and wait for response
+	// iError is set by the MdvpoInitComplete callback
+	aDevVideoPlay.Initialize();
+	
+	if (iError != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize DevVideoPlay"));
+		return EInconclusive;
+		}
+
+
+	// construct a video input buffer structure with a valid timestamp and
+	// write this DevVideoPlay.  Call will leave on error.
+	TVideoInputBuffer* newBuff = NULL;
+	TPtrC8 testBufferStringPtr(KTestBufferString);
+	TRAP(err, newBuff = aDevVideoPlay.GetBufferL(testBufferStringPtr.Length()));
+	if (err)
+		{
+		ERR_PRINTF1(_L("Error - couldn't get buffer from DevVideoPlay"));
+		return EInconclusive;
+		}
+
+	//clean out pre-set stuff from buffer
+	newBuff->iData.Zero();
+	//set ptr to test data
+	TPtrC8 testBufferString(KTestBufferString);
+	HBufC8* bufferDataArea = testBufferString.AllocL();
+	CleanupStack::PushL(bufferDataArea);
+	TPtr8 dataAreaPtr = bufferDataArea->Des();
+	TFramePortion framePortion = EFramePortionEndFragment;
+	
+	MMMFVideoPlayHwDeviceExtensionScanCopy* ciOne = static_cast<MMMFVideoPlayHwDeviceExtensionScanCopy*>(aDevVideoPlay.CustomInterface(hwDecoder, KUidDevVideoPlayHwDeviceExtensionScanCopy));
+
+	TInt consumed = 0;
+	// write buffer to DevVideoPlay using new interface
+	TRAP(err, ciOne->ScanAndCopyCodedDataL(dataAreaPtr, newBuff, consumed, framePortion));
+
+	//compare buffer to test data
+	if ((newBuff->iData != KTestBufferString) || consumed != newBuff->iData.Length())
+		{
+		err = KErrCorrupt;
+		}
+
+	if (err != expErr)
+		{
+		ERR_PRINTF3(_L("ScanAndCopyCodedDataL() gave error %d (expected %d)"),err, expErr);
+		ret = EFail;
+		}
+	else
+		{
+		INFO_PRINTF1(_L("Coded data sent successfully"));
+		INFO_PRINTF3(_L("ScanAndCopyCodedDataL(), %d = %d"), err, expErr);	
+		}
+	CleanupStack::PopAndDestroy(bufferDataArea);	
+	return ret;
+	}
+
+//------------------------------------------------------------------
+
+void CTestDevVideoPlayExtensionWriteCodedData::MdvpoInitComplete(TInt aError)
+	{
+	INFO_PRINTF2(_L("CTestDevVideoPlayWriteCodedData::MdvpoInitComplete():  Error = %d"), aError);
+	
+	iError = aError;
+	}
+
+CTestDevVideoPlayExtensionWriteCodedData::CTestDevVideoPlayExtensionWriteCodedData(const TDesC& aTestName, TTestType aTestType)
+	:CTestDevVideoPlayStep(aTestName, aTestType)
+	{
+	}
+
+CTestDevVideoPlayExtensionWriteCodedData* CTestDevVideoPlayExtensionWriteCodedData::NewL(const TDesC& aTestName, TTestType aTestType)
+	{
+	CTestDevVideoPlayExtensionWriteCodedData* self = new(ELeave) CTestDevVideoPlayExtensionWriteCodedData(aTestName, aTestType);
+	return self;
+	}
+
+TVerdict CTestDevVideoPlayExtensionWriteCodedData::DoTestL(CMMFDevVideoPlay& aDevVideoPlay)
+	{
+	TVerdict ret = EPass;
+	TInt expErr = KErrNone;
+	
+	INFO_PRINTF1(_L("MMMFVideoPlayHwDeviceExtensionScanCopy:  WriteCodedData"));
+	
+	// expected results
+	if (iTestType != ETestValid)
+		{
+		ERR_PRINTF1(_L("Error - invalid test step type"));
+		return EInconclusive;
+		}
+
+	TInt err = KErrNone;
+
+	THwDeviceId hwDecoder = 0;
+
+	// select decoder
+	TRAP(err, hwDecoder = aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));
+
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize decoder"));
+		return EInconclusive;
+		}
+
+	// select post-processor
+	TRAP(err, aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));	// EABI warning removal
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize post processor"));
+		return EInconclusive;
+		}
+
+	// initialize CDevVideoPlay and wait for response
+	// iError is set by the MdvpoInitComplete callback
+	aDevVideoPlay.Initialize();
+	
+	if (iError != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize DevVideoPlay"));
+		return EInconclusive;
+		}
+
+	// construct a video input buffer structure with a valid timestamp and
+	// write this DevVideoPlay.  Call will leave on error.
+	TVideoInputBuffer* newBuff = NULL;
+	TPtrC8 testBufferStringPtr(KTestBufferString);
+	TRAP(err, newBuff = aDevVideoPlay.GetBufferL(testBufferStringPtr.Length()));
+	if (err)
+		{
+		ERR_PRINTF1(_L("Error - couldn't get buffer from DevVideoPlay"));
+		return EInconclusive;
+		}
+	
+	// initialize newBuff with test data
+	newBuff->iOptions = KTestBufferOptions;
+	newBuff->iDecodingTimestamp = KTestBufferSize;
+	newBuff->iData.Zero();
+	newBuff->iData.Append(testBufferStringPtr);
+
+	TFramePortion framePortion = EFramePortionEndFragment;
+	
+	MMMFVideoPlayHwDeviceExtensionScanCopy* ciOne = static_cast<MMMFVideoPlayHwDeviceExtensionScanCopy*>(aDevVideoPlay.CustomInterface(hwDecoder, KUidDevVideoPlayHwDeviceExtensionScanCopy));
+
+	// write buffer to DevVideoPlay using new interface
+	TRAP(err, ciOne->WriteCodedDataL(newBuff, framePortion));
+	
+	if (err != expErr)
+		{
+		ERR_PRINTF3(_L("WriteCodedDataL() gave error %d (expected %d)"),err, expErr);
+		ret = EFail;
+		}
+	else
+		{
+		INFO_PRINTF1(_L("Coded data sent successfully"));
+		INFO_PRINTF3(_L("WriteCodedDataL(), %d = %d"), err, expErr);	
+		}
+	return ret;
+	}
+
+//------------------------------------------------------------------
+
+void CTestDevVideoPlayWritePicture::MdvpoInitComplete(TInt aError)
+	{
+	INFO_PRINTF2(_L("CTestDevVideoPlayWritePicture::MdvpoInitComplete():  Error = %d"), aError);
+	
+	iError = aError;
+	}
+
+void CTestDevVideoPlayWritePicture::MdvpoReturnPicture(TVideoPicture* aPicture)
+	{
+	INFO_PRINTF1(_L("CTestDevVideoPlayWritePicture::MdvpoReturnPicture()"));
+
+	iPicture = aPicture;
+	}
+
+CTestDevVideoPlayWritePicture::CTestDevVideoPlayWritePicture(const TDesC& aTestName, TTestType aTestType)
+	:CTestDevVideoPlayStep(aTestName, aTestType)
+	{
+	}
+
+CTestDevVideoPlayWritePicture* CTestDevVideoPlayWritePicture::NewL(const TDesC& aTestName, TTestType aTestType)
+	{
+	CTestDevVideoPlayWritePicture* self = new(ELeave) CTestDevVideoPlayWritePicture(aTestName, aTestType);
+	return self;
+	}
+
+TVerdict CTestDevVideoPlayWritePicture::DoTestL(CMMFDevVideoPlay& aDevVideoPlay)
+	{
+	TVerdict ret = EPass;
+	TInt expErr = KErrNone;
+	
+	INFO_PRINTF1(_L("CMMFDevVideoPlay:  WritePicture"));
+	
+	// expected results
+	if (iTestType != ETestValid)
+		{
+		ERR_PRINTF1(_L("Error - invalid test step type"));
+		return EInconclusive;
+		}
+
+	TInt err = KErrNone;
+
+//	THwDeviceId hwDecoder = 0;
+//	THwDeviceId hwPostProc = 0;
+
+	// select decoder
+//	TRAP(err, hwDecoder = aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));
+	TRAP(err, aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));	// EABI warning removal
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize decoder"));
+		return EInconclusive;
+		}
+
+	// select post-processor
+//	TRAP(err, hwPostProc = aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));
+	TRAP(err, aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));	// EABI warning removal
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize post processor"));
+		return EInconclusive;
+		}
+
+	// initialize CDevVideoPlay and wait for response
+	// iError is set by the MdvpoInitComplete callback
+	aDevVideoPlay.Initialize();
+	
+	if (iError != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize DevVideoPlay"));
+		return EInconclusive;
+		}
+
+	// construct a video picture structure with a valid timestamp and
+	// write this DevVideoPlay.  If the same picture comes back through the
+	// MdvpoReturnPicture() callback then test has passed.
+	TVideoPicture picture;
+	TTimeIntervalMicroSeconds picTime(KTestPictureTimestamp);
+	picture.iTimestamp = picTime;
+	picture.iOptions = TVideoPicture::ETimestamp;
+	
+	// write picture to DevVideoPlay
+	TRAP(err, aDevVideoPlay.WritePictureL(&picture) )
+
+	if (err != expErr)
+		{
+		ERR_PRINTF3(_L("WritePicture() gave error %d (expected %d)"),err, expErr);
+		ret = EFail;
+		}
+	else
+		{
+		TBool picSuccess = EFalse;
+
+		// check callback has been called and picture is correct
+		if (iPicture)
+			{
+			if ( (iPicture->iTimestamp == picTime) &&
+				 (iPicture->iOptions == TVideoPicture::ETimestamp) )
+				{
+				picSuccess = ETrue;
+				}
+			}
+		
+		if (!picSuccess)
+			{
+			ERR_PRINTF1(_L("Received picture is corrupt!"));
+			ret = EFail;
+			}
+		else
+			{
+			INFO_PRINTF1(_L("Original picture received correctly"));
+			INFO_PRINTF3(_L("WritePicture(), %d = %d"), err, expErr);	
+			}
+		}
+	
+	return ret;
+	}
+//------------------------------------------------------------------
+
+void CTestDevVideoPlayInputEnd::MdvpoInitComplete(TInt aError)
+	{
+	INFO_PRINTF2(_L("CTestDevVideoPlayInputEnd::MdvpoInitComplete():  Error = %d"), aError);
+	
+	iError = aError;
+	}
+
+void CTestDevVideoPlayInputEnd::MdvpoStreamEnd()
+	{
+	INFO_PRINTF1(_L("CTestDevVideoPlayInputEnd::MdvpoStreamEnd()"));
+	
+	// keep track on number of times this callback is called
+	iEndCount++;
+	}
+
+CTestDevVideoPlayInputEnd::CTestDevVideoPlayInputEnd(const TDesC& aTestName, TTestType aTestType)
+	:CTestDevVideoPlayStep(aTestName, aTestType)
+	{
+	}
+
+CTestDevVideoPlayInputEnd* CTestDevVideoPlayInputEnd::NewL(const TDesC& aTestName, TTestType aTestType)
+	{
+	CTestDevVideoPlayInputEnd* self = new(ELeave) CTestDevVideoPlayInputEnd(aTestName, aTestType);
+	return self;
+	}
+
+TVerdict CTestDevVideoPlayInputEnd::DoTestL(CMMFDevVideoPlay& aDevVideoPlay)
+	{
+	TVerdict ret = EPass;
+//	TInt expErr = KErrNone;
+	TBool selDec = ETrue;
+	TBool selPost = ETrue;
+
+	INFO_PRINTF1(_L("CMMFDevVideoPlay:  InputEnd"));
+	
+	// expected results
+	switch(iTestType)
+		{
+		case ETestValid:
+//			expErr = KErrNone;	// EABI warning removal
+			break;
+		case ETestDecoderOnly:
+			selPost = EFalse;
+			break;
+		case ETestPostProcOnly:
+			selDec = EFalse;
+			break;
+		default:
+			ERR_PRINTF1(_L("Error - invalid test step type"));
+			return EInconclusive;
+		}
+
+	TInt err = KErrNone;
+
+//	THwDeviceId hwDecoder = 0;
+//	THwDeviceId hwPostProc = 0;
+
+	// select decoder
+	if (selDec)
+		{
+//		TRAP(err, hwDecoder = aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));
+		TRAP(err, aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice));	// EABI warning removal
+		if (err != KErrNone)
+			{
+			ERR_PRINTF1(_L("Error - couldn't initialize decoder"));
+			return EInconclusive;
+			}
+		}
+
+	// select post-processor
+	if (selPost)
+		{
+//		TRAP(err, hwPostProc = aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));
+		TRAP(err, aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));	// EABI warning removal
+		if (err != KErrNone)
+			{
+			ERR_PRINTF1(_L("Error - couldn't initialize post processor"));
+			return EInconclusive;
+			}
+		}
+	// initialize CDevVideoPlay and wait for response
+	// iError is set by the MdvpoInitComplete callback
+	aDevVideoPlay.Initialize();
+	
+	if (iError != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize DevVideoPlay"));
+		return EInconclusive;
+		}
+
+	// call input end on DevVideoPlay and check callback counter == 1
+	aDevVideoPlay.InputEnd();
+
+	if (iEndCount != 1)
+		{
+		ERR_PRINTF2(_L("Error - MdvpoStreamEnd only called %d times!"), iEndCount);
+		ret = EFail;
+		}
+	else
+		INFO_PRINTF1(_L("InputEnd() called successfully"));
+	
+	return ret;
+	}
+//-------------------------------------------------------------------
+
+void CTestDevVideoGetBufferWithoutInitialize::MdvpoInitComplete(TInt aError)
+	{
+	INFO_PRINTF2(_L("CTestGetBufferWithoutInitialize::MdvpoInitComplete():  Error = %d"), aError);
+	
+	iError = aError;
+	}
+
+void CTestDevVideoGetBufferWithoutInitialize::MdvpoNewBuffers()
+	{
+	INFO_PRINTF1(_L("CTestGetBufferWithoutInitialize::MdvpoNewBuffers()"));
+	iCalledBack = ETrue;
+	}
+
+CTestDevVideoGetBufferWithoutInitialize::CTestDevVideoGetBufferWithoutInitialize(const TDesC& aTestName, TTestType aTestType)
+	:CTestDevVideoPlayStep(aTestName, aTestType)
+	{
+	}
+
+CTestDevVideoGetBufferWithoutInitialize* CTestDevVideoGetBufferWithoutInitialize::NewL(const TDesC& aTestName, TTestType aTestType)
+	{
+	CTestDevVideoGetBufferWithoutInitialize* self = new(ELeave) CTestDevVideoGetBufferWithoutInitialize(aTestName, aTestType);
+	return self;
+	}
+
+TVerdict CTestDevVideoGetBufferWithoutInitialize::DoTestL(CMMFDevVideoPlay& aDevVideoPlay)
+	{
+	TVerdict ret = EPass;
+	TInt expErr = KErrNone;
+	
+	INFO_PRINTF1(_L("CMMFDevVideoPlay:  GetBuffer"));
+	INFO_PRINTF1(_L("To test the scenario wherein GetBufferL is called without calling initialize"));
+	// expected results
+	if (iTestType != ETestValid)
+		{
+		ERR_PRINTF1(_L("Error - invalid test step type"));
+		return EInconclusive;
+		}
+
+	TInt err = KErrNone;
+
+	TRAP(err, aDevVideoPlay.SelectDecoderL(KUidDevVideoTestDecodeHwDevice)); // EABI warning removal
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize decoder"));
+		return EInconclusive;
+		}
+
+	// select post-processor
+	TRAP(err, aDevVideoPlay.SelectPostProcessorL(KUidDevVideoTestPostProcHwDevice));	// EABI warning removal
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialize post processor"));
+		return EInconclusive;
+		}
+	TVideoInputBuffer* newBuff = NULL;
+	// iError is set by the MdvpoInitComplete callback
+	TRAP(err, newBuff = aDevVideoPlay.GetBufferL(KTestBufferSize) );
+	// callback will occur and newBuff will be set to new buffer
+	if (err != expErr)
+		{
+		ERR_PRINTF3(_L("GetBufferL() gave error %d (expected %d)"),err, expErr);
+		ret = EFail;
+		}
+	else
+		{
+		TBool buffSuccess = EFalse;
+
+		// check callback has been called and buffer is correct
+		if (newBuff && iCalledBack)
+			{
+			TTimeIntervalMicroSeconds testTime(KTestBufferSize);
+			if ( (newBuff->iDecodingTimestamp == testTime) &&
+				 (newBuff->iOptions == KTestBufferOptions) &&
+				 (newBuff->iData == KTestBufferString) )
+				{
+				buffSuccess = ETrue;
+				}
+			}
+		
+		if (!buffSuccess)
+			{
+			ERR_PRINTF1(_L("Received buffer is corrupt!"));
+			ret = EFail;
+			}
+		else
+			{
+			INFO_PRINTF1(_L("Buffer received correctly"));
+			INFO_PRINTF3(_L("GetBuffer(), %d = %d"), err, expErr);	
+			}
+		}
+	
+	return ret;
+	}
+//-----------------------------------------------------------------------
+