imagingandcamerafws/imagingunittest/tsu_icl_mediasvr/src/TestStepMediaSvr.cpp
changeset 0 40261b775718
child 41 f7bf1ed8db72
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imagingandcamerafws/imagingunittest/tsu_icl_mediasvr/src/TestStepMediaSvr.cpp	Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,991 @@
+// Copyright (c) 2002-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:
+//
+
+// EPOC includes
+#include <e32base.h>
+
+// MDA includes
+#include <mdaimageconverter.h>
+#include "MdaImageConverter.inl"
+
+// Test system includes
+#include <testframework.h>
+#include "TestStepMediaSvr.h"
+#include "TestSuiteMediaSvr.h"
+
+// Directory that the test files will be stored on 
+_LIT(KMediaSvrTestSourcePathOnC,"c:\\MediaSvrTest\\");
+_LIT(KMediaSvrTestSourcePathOnD,"d:\\MediaSvrTest\\");
+_LIT(KMediaSvrTestSourcePathOnE,"e:\\MediaSvrTest\\");
+_LIT(KMediaSvrTestSourcePathOnZ,"z:\\MediaSvrTest\\");
+
+/**
+ *
+ * CTestStepMediaSvr constructor
+ *
+ * @xxxx
+ * 
+ */
+CTestStepMediaSvr::CTestStepMediaSvr() 
+	{
+	// set up parameters for member format functions
+	// this is done in this way due to the awkward design of the API being tested
+	iJfifFormatMonoQ50.iSettings.iSampleScheme = TMdaJpgSettings::EMonochrome;
+	iJfifFormatColor420Q50.iSettings.iSampleScheme = TMdaJpgSettings::EColor420;
+	iJfifFormatColor422Q50.iSettings.iSampleScheme = TMdaJpgSettings::EColor422;
+	iJfifFormatColor444Q50.iSettings.iSampleScheme = TMdaJpgSettings::EColor444;
+	iJfifFormatMonoQ50.iSettings.iQualityFactor = 50;
+	iJfifFormatColor420Q50.iSettings.iQualityFactor = 50;
+	iJfifFormatColor422Q50.iSettings.iQualityFactor = 50;
+	iJfifFormatColor444Q50.iSettings.iQualityFactor = 50;
+
+	iJfifFormatColor444Q10.iSettings.iQualityFactor = 10;
+	iJfifFormatColor444Q30.iSettings.iQualityFactor = 30;
+	iJfifFormatColor444Q60.iSettings.iQualityFactor = 60;
+	iJfifFormatColor444Q100.iSettings.iQualityFactor = 100;
+	
+	iMbmFormatGray2.iDisplayMode = EGray2;
+	iMbmFormatGray4.iDisplayMode = EGray4;
+	iMbmFormatGray16.iDisplayMode = EGray16;
+	iMbmFormatGray256.iDisplayMode = EGray256;
+	iMbmFormatColor16.iDisplayMode = EColor16;
+	iMbmFormatColor256.iDisplayMode = EColor256;
+	iMbmFormatColor4K.iDisplayMode = EColor4K;
+	iMbmFormatColor64K.iDisplayMode = EColor64K;
+	iMbmFormatColor16M.iDisplayMode = EColor16M;
+	}
+
+TVerdict CTestStepMediaSvr::DoTestStepPreambleL()
+	{
+	// connect to the bitmap server and check the error code
+	TInt errCode = RFbsSession::Connect();
+	if( errCode != KErrNone )
+		{
+		 //[failed to connect to bitmap server 
+		 ERR_PRINTF2(_L("Failed to connect to bitmap server in teststep preamble = %d"), errCode );
+		 return EFail;
+		}
+	
+	iScheduler = new(ELeave)CActiveScheduler;
+	
+	//[install the active scheduler ]
+	CActiveScheduler::Install( iScheduler );
+	
+	InitSystemPath();
+	
+	return EPass;
+	}
+
+/**
+ * The post amble step cleans up the allocated memory in the preamble
+ * @returns TVerdict EPass or EFail
+ * @leaves can leave due to insufficient memory
+ * @lib "TS_BitmapTransforms.lib"
+ * @xxxx
+ */
+
+TVerdict CTestStepMediaSvr::DoTestStepPostambleL()
+	{
+	// Destroy the scheduler
+	CActiveScheduler::Install(NULL); // Uninstall the active scheduler
+	delete iScheduler;
+	iScheduler = NULL;
+	// disconnect from the bitmap server
+	RFbsSession::Disconnect();
+	return EPass;
+	}
+
+void CTestStepMediaSvr::Complete(TInt aError) 
+	{
+	iError = aError;
+	CActiveScheduler::Stop();
+	}
+
+void CTestStepMediaSvr::MiuoCreateComplete(TInt aError)
+	{
+	Complete(aError);
+	}
+
+void CTestStepMediaSvr::MiuoOpenComplete(TInt aError)
+	{
+	Complete(aError);
+	}
+void CTestStepMediaSvr::MiuoConvertComplete(TInt aError)
+	{
+	Complete(aError);
+	}
+
+TInt CTestStepMediaSvr::WaitForResult() 
+	{
+	CActiveScheduler::Start();
+	return iError;
+	}
+
+/**
+ *
+ * Intialiases the default system path for the tests
+ * 
+ * @xxxx
+ * 
+ */
+void CTestStepMediaSvr::InitSystemPath()
+	{
+	TUint att;
+	RFs fs;
+	TInt ret = fs.Connect();
+	__ASSERT_ALWAYS(ret == KErrNone,User::Panic(_L("Sys path not setup"),ret));
+
+	if (fs.Att(KMediaSvrTestSourcePathOnE,att) == KErrNone)
+		iDefaultPath = KMediaSvrTestSourcePathOnE;
+	else if (fs.Att(KMediaSvrTestSourcePathOnD,att) == KErrNone)
+		iDefaultPath = KMediaSvrTestSourcePathOnD;
+	else if (fs.Att(KMediaSvrTestSourcePathOnC,att) == KErrNone)
+		iDefaultPath = KMediaSvrTestSourcePathOnC;
+	else if (fs.Att(KMediaSvrTestSourcePathOnZ,att) == KErrNone)
+		iDefaultPath = KMediaSvrTestSourcePathOnZ;
+	else
+		User::Panic(_L("Test files not found"),KErrNotFound);
+
+	fs.Close();
+	}
+	
+const TDesC& CTestStepMediaSvr::DefaultPath() const
+	{
+	return iDefaultPath;
+	}
+	
+/**
+ *
+ * Load an image from a file 
+ *
+ * @param "const TDesC& aFileName"
+ *		  Name of file to load
+ * @param "TMdaClipFormat* aFormat"
+ *		  Format of the image
+ * @param "TMdaPackage* aCodec"
+ *		  Format of the image
+ * @leave "" 
+ *		  Will leave with appropriate system codes if a problem is encountered reading the file	
+ * @return "CFbsBitmap*"
+ *		  The bitmap read from the file	
+ * @xxxx
+ *
+ */
+CFbsBitmap* CTestStepMediaSvr::LoadImageL(const TDesC& aFileName, TMdaClipFormat* aFormat, TMdaPackage* aCodec)
+	{
+	CFbsBitmap* bmp = new(ELeave) CFbsBitmap;
+	CleanupStack::PushL(bmp);
+	
+	CMdaImageFileToBitmapUtility* ftob = CMdaImageFileToBitmapUtility::NewL(*this);
+	CleanupStack::PushL(ftob);
+	
+	TFileName fileName = iDefaultPath;
+	fileName.Append(aFileName);
+	
+	ftob->OpenL(fileName,aFormat,aCodec);
+	WaitForResult();
+	User::LeaveIfError(iError);
+
+	TFrameInfo frameInfo;
+
+//  TODO: Note - doing it this way causes a corrupt iDecoder pointer to be
+//  returned. Not sure why this happens at present time!
+//  (CTestStepMediaSvr must be a friend of CMdaImageFileToBitmapUtility)
+//
+//	CMdaImageFileToBitmapUtilityPriv* test = ftob->Properties();
+//	frameInfo = ftob->Properties()->iDecoder->FrameInfo(0);
+
+	ftob->FrameInfo(0,frameInfo);
+
+	User::LeaveIfError(bmp->Create(frameInfo.iOverallSizeInPixels,EColor16M));
+	ftob->ConvertL(*bmp,0);
+	WaitForResult();
+	User::LeaveIfError(iError);
+	CleanupStack::PopAndDestroy(); //ftob
+	CleanupStack::Pop(); //bmp;
+	return bmp;
+	}
+/**
+ *
+ * Test loading a transparent image from a file 
+ *
+ * @param "CFbsBitmap* aBitmap"
+ *		  Bitmap to store the image
+ * @param "CFbsBitmap* aMask"
+ *		  Bitmap to store the mask
+ * @param "TDesC& aFileName"
+ *		  Name of file to load
+ * @param "TMdaClipFormat* aFormat"
+ *		  Format of the image
+ * @param "TMdaPackage* aCodec"
+ *		  Format of the image
+ * @leave "" 
+ *		  Will leave with appropriate system codes if a problem is encountered reading the file	
+ *
+ * @xxxx
+ *
+ */
+void CTestStepMediaSvr::LoadTransparentImageL(CFbsBitmap* aBitmap, CFbsBitmap* aMask,const TDesC& aFileName, TMdaClipFormat* aFormat, TMdaPackage* aCodec)
+	{	
+	CMdaImageFileToBitmapUtility* ftob = CMdaImageFileToBitmapUtility::NewL(*this);
+	CleanupStack::PushL(ftob);
+	
+	TFileName fileName = iDefaultPath;
+	fileName.Append(aFileName);
+	
+	ftob->OpenL(fileName,aFormat,aCodec);
+	WaitForResult();
+	User::LeaveIfError(iError);
+
+	TFrameInfo frameInfo;
+	ftob->FrameInfo(0,frameInfo);
+	User::LeaveIfError(aBitmap->Create(frameInfo.iOverallSizeInPixels,EGray2));
+	User::LeaveIfError(aMask->Create(frameInfo.iOverallSizeInPixels,EGray2));
+	ftob->ConvertL(*aBitmap,*aMask,0);
+	WaitForResult();
+	CleanupStack::PopAndDestroy(); //ftob
+	User::LeaveIfError(iError);
+	}
+/**
+ *
+ * Test loading a transparent image from a file, specifying an incorrect format for the target
+ * bitmaps. The Convert should fail gracefully
+ *
+ * @param "CFbsBitmap* aBitmap"
+ *		  Bitmap to store the image
+ * @param "CFbsBitmap* aMask"
+ *		  Bitmap to store the mask
+ * @param "TDesC& aFileName"
+ *		  Name of file to load
+ * @param "TMdaClipFormat* aFormat"
+ *		  Format of the image
+ * @param "TMdaPackage* aCodec"
+ *		  Format of the image
+ * @leave "" 
+ *		  Will leave with appropriate system codes if a problem is encountered opening
+ *
+ * @xxxx
+ *
+ */
+void CTestStepMediaSvr::FailLoadTransparentImageL(CFbsBitmap* aBitmap, CFbsBitmap* aMask,const TDesC& aFileName, TMdaClipFormat* aFormat, TMdaPackage* aCodec)
+	{	
+	CMdaImageFileToBitmapUtility* ftob = CMdaImageFileToBitmapUtility::NewL(*this);
+	CleanupStack::PushL(ftob);
+
+	TFileName fileName = iDefaultPath;
+	fileName.Append(aFileName);
+
+	ftob->OpenL(fileName,aFormat,aCodec);
+	WaitForResult();
+	User::LeaveIfError(iError);
+
+	TFrameInfo frameInfo;
+	ftob->FrameInfo(0,frameInfo);
+	User::LeaveIfError(aBitmap->Create(frameInfo.iOverallSizeInPixels,EColor4K));
+	User::LeaveIfError(aMask->Create(frameInfo.iOverallSizeInPixels,EColor4K));
+	ftob->ConvertL(*aBitmap,*aMask,0);
+	WaitForResult();
+	CleanupStack::PopAndDestroy(); //ftob
+	User::LeaveIfError(iError);
+	}
+
+/**
+ *
+ * Tests loading an image from a file, cancelling and restarting the operation several times before
+ * allowing the load to complete
+ *
+ * @param "TDesC& aFileName"
+ *		  Name of file to load
+ * @param "TMdaClipFormat* aFormat"
+ *		  Format of the image
+ * @param "TMdaPackage* aCodec"
+ *		  Format of the image
+ * @leave "" 
+ *		  Will leave with appropriate system codes if a problem is encountered reading the file	
+ * @return "CFbsBitmap*"
+ *		  The bitmap read from the file	
+ * @xxxx
+ *
+ */
+CFbsBitmap* CTestStepMediaSvr::CancelLoadImageL(const TDesC& imageFileName, TMdaClipFormat* aFormat, TMdaPackage* aCodec)
+	{
+	
+	TFrameInfo frameInfo;
+
+	CFbsBitmap* bmp = new(ELeave) CFbsBitmap;
+	CleanupStack::PushL(bmp);
+	
+	
+	CMdaImageFileToBitmapUtility* ftob = CMdaImageFileToBitmapUtility::NewL(*this);
+	CleanupStack::PushL(ftob);
+
+	TFileName fileName = iDefaultPath;
+	fileName.Append(imageFileName);
+	
+	ftob->OpenL(fileName,aFormat,aCodec);
+
+	WaitForResult();
+	User::LeaveIfError(iError);
+
+		
+	ftob->FrameInfo(0,frameInfo);
+	User::LeaveIfError(bmp->Create(frameInfo.iOverallSizeInPixels,EColor16M));
+	ftob->ConvertL(*bmp,0);
+	ftob->CancelConvertL();
+	ftob->ConvertL(*bmp,0);
+	ftob->CancelConvertL();
+
+	ftob->ConvertL(*bmp,0);
+
+	WaitForResult();
+	User::LeaveIfError(iError);
+	CleanupStack::PopAndDestroy(); //ftob
+
+	CleanupStack::Pop(); //bmp;
+	return bmp;
+	}
+/**
+ *
+ * Save an image to a File
+ *
+ * @param "CFbsBitmap* aBitmap"
+ *		  Bitmap to write to file
+ * @param "const TDesC& aImageFileName"
+ *		  Filename to write to
+ * @param "TMdaClipFormat* aFormat"
+ *		  Format of the image
+ * @param "TMdaPackage* aCodec"
+ *		  Format of the image
+ * @leave "" 
+ *		  Will leave with appropriate system codes if a problem is encountered writing the file	
+ * @xxxx
+ *
+ */
+void CTestStepMediaSvr::SaveImageL(CFbsBitmap* aBitmap, const TDesC& aImageFileName, TMdaClipFormat* aFormat, TMdaPackage* aCodec)
+	{
+	CMdaImageBitmapToFileUtility* ftob = CMdaImageBitmapToFileUtility::NewL(*this);
+	CleanupStack::PushL(ftob);
+
+	TFileName fileName = iDefaultPath;
+	fileName.Append(aImageFileName);
+	ftob->CreateL(fileName,aFormat,aCodec,NULL);
+
+	WaitForResult();
+	User::LeaveIfError(iError);		
+		
+	ftob->ConvertL(*aBitmap,0);
+	WaitForResult();
+	User::LeaveIfError(iError);
+
+	CleanupStack::PopAndDestroy(); //ftob
+	}
+/**
+ *
+ * Save an image to a File, cancelling and restarting the operation a few times before it
+ * is allowed to complete
+ *
+ * @param "CFbsBitmap* aBitmap"
+ *		  Bitmap to write to file
+ * @param "const TDesC& aImageFileName"
+ *		  Filename to write to
+ * @param "TMdaClipFormat* aFormat"
+ *		  Format of the image
+ * @param "TMdaPackage* aCodec"
+ *		  Format of the image
+ * @leave "" 
+ *		  Will leave with appropriate system codes if a problem is encountered writing the file	
+ * @xxxx
+ *
+ */
+void CTestStepMediaSvr::CancelSaveImageL(CFbsBitmap* aBitmap, const TDesC& aImageFileName, TMdaClipFormat* aFormat, TMdaPackage* aCodec)
+	{
+	CMdaImageBitmapToFileUtility* ftob = CMdaImageBitmapToFileUtility::NewL(*this);
+	CleanupStack::PushL(ftob);
+
+	TFileName fileName = iDefaultPath;
+	fileName.Append(aImageFileName);
+	ftob->CreateL(fileName,aFormat,aCodec,NULL);
+
+	WaitForResult();
+	User::LeaveIfError(iError);		
+		
+	ftob->ConvertL(*aBitmap,0);
+	ftob->CancelConvertL();
+	ftob->ConvertL(*aBitmap,0);
+	ftob->CancelConvertL();
+	ftob->ConvertL(*aBitmap,0);
+
+	WaitForResult();
+	User::LeaveIfError(iError);
+
+	CleanupStack::PopAndDestroy(); //ftob
+	}
+
+/**
+ *
+ * Tests streaming an image from a descriptor 
+ *
+ * @param "TPtr8 aImageBuffer"
+ *		  Descriptor containing image
+ * @param "TMdaClipFormat* aFormat"
+ *		  Format of the image
+ * @param "TMdaPackage* aCodec"
+ *		  Format of the image
+ * @leave "" 
+ *		  Will leave with appropriate system codes if a problem is encountered reading the file	
+ * @return "CFbsBitmap*"
+ *		  The bitmap read from the descriptor	
+ * @xxxx
+ *
+ */
+CFbsBitmap* CTestStepMediaSvr::StreamImageFromDescriptorL(const TPtr8& aImageBuffer, TMdaClipFormat* aFormat, TMdaPackage* aCodec)
+	{ 
+	CFbsBitmap* bmp = new(ELeave) CFbsBitmap;
+	CleanupStack::PushL(bmp);
+
+	CMdaImageDescToBitmapUtility* dtob = CMdaImageDescToBitmapUtility::NewL(*this);
+	CleanupStack::PushL(dtob);
+	dtob->OpenL(aImageBuffer,aFormat,aCodec);
+	WaitForResult();
+	User::LeaveIfError(iError);
+
+	TFrameInfo frameInfo;
+	dtob->FrameInfo(0,frameInfo);
+	User::LeaveIfError(bmp->Create(frameInfo.iOverallSizeInPixels,EColor16M));
+
+	TPtr8& buf = CONST_CAST(TPtr8&,aImageBuffer); // we can't modify const parameter, so make a copy
+	TInt len = buf.Length();
+	TInt templen = 1;
+	dtob->ConvertL(*bmp,0);
+	WaitForResult();
+	while (iError==KErrUnderflow && templen < len) 
+		{
+		if (len - templen <128)
+			templen+=128;
+		else
+			templen = len;
+
+		buf.SetLength(templen);
+		dtob->ConvertL(*bmp,0);
+		WaitForResult();
+		}
+	User::LeaveIfError(iError);
+	CleanupStack::PopAndDestroy(); // dtob
+	CleanupStack::Pop(); // bmp
+	return bmp;
+	}
+
+/**
+ *
+ * Tests streaming an image from a file 
+ *
+ * @param "TDesC& aFileName"
+ *		  Name of file to load
+ * @param "TMdaClipFormat* aFormat"
+ *		  Format of the image
+ * @param "TMdaPackage* aCodec"
+ *		  Format of the image
+ * @leave "" 
+ *		  Will leave with appropriate system codes if a problem is encountered reading the file	
+ * @return "CFbsBitmap*"
+ *		  The bitmap read
+ * @xxxx
+ *
+ */
+CFbsBitmap* CTestStepMediaSvr::StreamImageL(const TDesC& aFileName, TMdaClipFormat* aFormat, TMdaPackage* aCodec)
+	{ 
+	CFbsBitmap* bmp = new(ELeave) CFbsBitmap;
+	CleanupStack::PushL(bmp);
+
+	TBuf<256> tempFileName;
+
+
+	RFile srcFile, tempFile;
+	RFs fs;
+	User::LeaveIfError(fs.Connect());
+	CleanupClosePushL(fs);
+
+	TFileName fileName = iDefaultPath;
+	fileName.Append(aFileName);
+	User::LeaveIfError(srcFile.Open(fs,fileName,EFileShareAny|EFileStream|EFileRead));
+	CleanupClosePushL(srcFile);
+
+	User::LeaveIfError(tempFile.Temp(fs,_L("c:\\"),tempFileName,EFileShareAny|EFileStream|EFileWrite));
+	CleanupClosePushL(tempFile);
+
+	TInt fileSize;
+
+	TInt copySize = 128;
+	
+	User::LeaveIfError(srcFile.Size(fileSize));
+	HBufC8* copyBuf = HBufC8::NewMaxLC(copySize);
+	TPtr8 copyBufPtr(copyBuf->Des());
+
+	TInt templen = copySize;
+
+	User::LeaveIfError(srcFile.Read(copyBufPtr,copySize));
+	User::LeaveIfError(tempFile.Write(copyBufPtr,copySize));
+
+	CMdaImageFileToBitmapUtility* ftob = CMdaImageFileToBitmapUtility::NewL(*this);
+	CleanupStack::PushL(ftob);
+	
+	ftob->OpenL(tempFileName,aFormat,aCodec);
+	WaitForResult();
+	User::LeaveIfError(iError);
+		
+	TFrameInfo frameInfo;
+	ftob->FrameInfo(0,frameInfo);
+	User::LeaveIfError(bmp->Create(frameInfo.iOverallSizeInPixels,EColor16M));
+
+	
+	ftob->ConvertL(*bmp,0);
+	WaitForResult();
+	while (iError==KErrUnderflow && templen < fileSize) 
+		{
+		TInt copySize;
+		if (fileSize - templen >128)
+			copySize=128;
+		else
+			copySize= fileSize - templen;
+
+		User::LeaveIfError(srcFile.Read(copyBufPtr,copySize));
+		User::LeaveIfError(tempFile.Write(copyBufPtr,copySize));
+		templen+=copySize;
+		
+		ftob->ConvertL(*bmp,0);
+		WaitForResult();
+		}
+	User::LeaveIfError(iError);
+
+	srcFile.Close();
+
+	CleanupStack::PopAndDestroy(); // ftob, must close in order to delete the temporary file
+	
+	tempFile.Close();
+	fs.Delete(tempFileName);
+
+	CleanupStack::PopAndDestroy(4); // tempFile,srcFile, copyBuf, fs
+	CleanupStack::Pop(); // bmp
+	return bmp;
+	}
+/**
+ *
+ * Tests loading an image from a File, with additional alloc failure testing
+ *
+ * @param "const TDesC& aImageFileName"
+ *		  Filename of the image to load
+ * @param "TMdaClipFormat* aFormat"
+ *		  Format of the image
+ * @param "TMdaPackage* aCodec"
+ *		  Format of the image
+ * @leave "" 
+ *		  Will leave with appropriate system codes if a problem is encountered reading the file	
+ * @return "CFbsBitmap*"
+ *		  The bitmap read from the descriptor	
+ * @xxxx
+ *
+ */
+CFbsBitmap* CTestStepMediaSvr::LoadImageWithAllocFailL(const TDesC& aImageFileName, TMdaClipFormat* aFormat, TMdaPackage* aCodec)
+	{
+	TInt failCount = 1;
+	TInt err;
+
+	CFbsBitmap* bmp = NULL;
+
+	TRAP(err,bmp = LoadImageL(aImageFileName,aFormat,aCodec));
+	CleanupStack::PushL(bmp);
+	User::LeaveIfError(err);
+	
+	CleanupStack::PopAndDestroy();//bmp
+
+	for(;;)	{
+		__UHEAP_SETFAIL(RHeap::EDeterministic, failCount);
+
+		TRAP(err,bmp = LoadImageL(aImageFileName,aFormat,aCodec));
+
+		
+		if (err != KErrNoMemory && err != KErrNone)
+			User::Leave(err);
+
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+
+		if (err!=KErrNoMemory)
+			break;
+		
+		++failCount;
+		}
+	--failCount; // we are one over
+	INFO_PRINTF2(_L("Completed OK with %d memory allocations tested"),failCount);
+	return bmp;
+	}
+/**
+ *
+ * Tests saving an image to a File, with additional alloc failure testing
+ *
+ * @param "CFbsBitmap* aBitmap"
+ *		  Bitmap to write to file
+ * @param "const TDesC& aImageFileName"
+ *		  Filename to write to
+ * @param "TMdaClipFormat* aFormat"
+ *		  Format of the image
+ * @param "TMdaPackage* aCodec"
+ *		  Format of the image
+ * @leave "" 
+ *		  Will leave with appropriate system codes if a problem is encountered writing the file	
+ * @xxxx
+ *
+ */
+void CTestStepMediaSvr::SaveImageWithAllocFailL(CFbsBitmap* aBitmap, const TDesC& aImageFileName, TMdaClipFormat* aFormat, TMdaPackage* aCodec)
+	{
+		TInt failCount = 1;
+	TInt err;
+
+	__MM_HEAP_MARK;
+	TRAP(err, SaveImageL(aBitmap, aImageFileName,aFormat,aCodec));
+	User::LeaveIfError(err);
+	__MM_HEAP_MARKEND; 
+
+	for(;;)	{
+		__UHEAP_SETFAIL(RHeap::EDeterministic, failCount);
+		__MM_HEAP_MARK;
+		TRAP(err, SaveImageL(aBitmap, aImageFileName,aFormat,aCodec));
+
+		if (err != KErrNoMemory && err != KErrNone)
+			User::Leave(err);
+
+		__MM_HEAP_MARKEND; 
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+
+		if (err!=KErrNoMemory)
+			break;
+			
+		++failCount;
+		}
+	--failCount; // we are one over
+
+	INFO_PRINTF2(_L("Completed OK with %d memory allocations tested"),failCount);
+	}
+/**
+ *
+ * Tests streaming an image from a descriptor, with additional alloc failure testing
+ *
+ * @param "TPtr8 aImageBuffer"
+ *		  Descriptor containing image
+ * @param "TMdaClipFormat* aFormat"
+ *		  Format of the image
+ * @param "TMdaPackage* aCodec"
+ *		  Format of the image
+ * @leave "" 
+ *		  Will leave with appropriate system codes if a problem is encountered reading the file	
+ * @return "CFbsBitmap*"
+ *		  The bitmap read from the descriptor	
+ * @xxxx
+ *
+ */
+CFbsBitmap*  CTestStepMediaSvr::StreamImageFromDescWithAllocFailL(const TPtr8& aImageBuffer, TMdaClipFormat* aFormat, TMdaPackage* aCodec)
+	{
+	TInt failCount = 1;
+	TInt err;
+
+	CFbsBitmap* bmp = NULL;
+
+	__MM_HEAP_MARK;
+	TRAP(err,bmp = StreamImageFromDescriptorL(aImageBuffer,aFormat,aCodec));
+	CleanupStack::PushL(bmp);
+	User::LeaveIfError(err);
+	
+
+	CleanupStack::PopAndDestroy(); //bmp
+	__MM_HEAP_MARKEND; 
+
+	for(;;)	
+		{
+		__UHEAP_SETFAIL(RHeap::EDeterministic, failCount);
+
+		TRAP(err,bmp = StreamImageFromDescriptorL(aImageBuffer,aFormat,aCodec));
+	
+		if (err != KErrNoMemory && err != KErrNone)
+			User::Leave(err);
+
+		__UHEAP_SETFAIL(RHeap::ENone, 0);
+
+		if (err!=KErrNoMemory)
+			break;
+
+		++failCount;
+		}
+	--failCount; // we are one over
+
+	INFO_PRINTF2(_L("Completed OK with %d memory allocations tested"),failCount);
+	return bmp;
+	}
+/**
+ *
+ * Check that the contents of the two bitmaps provided are identical
+ *
+ * @param "CFbsBitmap& aBitmap1"
+ *		  The first bitmap to compare
+ * @param "CFbsBitmap& aBitmap2"
+ *		  The second bitmap to compare
+ * @return "TVerdict"
+ *		  EPass if the files are identical
+ *		  EFail otherwise
+ * @xxxx
+ *
+ */
+TVerdict CTestStepMediaSvr::CheckBitmaps(const CFbsBitmap& aBitmap1, const CFbsBitmap& aBitmap2) const
+	{
+	const TSize size = aBitmap1.SizeInPixels();
+
+	for (TInt y = 0; y < size.iHeight; y++)
+		{
+		for (TInt x = 0; x < size.iWidth; x++)
+			{
+			TPoint pt(x,y);
+			TRgb color1,color2;
+			aBitmap1.GetPixel(color1,pt);
+			aBitmap2.GetPixel(color2,pt);
+
+			if (color1 != color2)
+				{
+				return EFail;
+				}
+			}
+		}
+	return EPass;
+	}
+/*
+ *
+ * Writes an image to a descriptor 
+ *
+ * @param "CFbsBitmap* aBitmap"
+ *		  Bitmap to write to descriptor
+ * @param "TMdaClipFormat* aFormat"
+ *		  Format of the image
+ * @param "TMdaPackage* aCodec"
+ *		  Format of the image
+ * @param "TInt aDesSize"
+ *		  Optional explicit setting of the descriptor size to use
+ * @leave "" 
+ *		  Will leave with appropriate system codes if a problem is encountered reading the file	
+ * @return "HBufC8*"
+ *		  The descriptor containing the image	
+ * @xxxx
+ *
+ */
+HBufC8* CTestStepMediaSvr::WriteImageToDescriptorL(CFbsBitmap* aBitmap, TMdaClipFormat* aFormat, TMdaPackage* aCodec, TInt aDesSize)
+	{ 
+	const TSize size = aBitmap->SizeInPixels();
+	const TInt descSize = aDesSize>0 ? aDesSize : ((size.iWidth * size.iHeight * 3) + 10000);
+	HBufC8* descBuf = HBufC8::NewLC(descSize);
+	TPtr8 imageBuffer(descBuf->Des());
+
+	CMdaImageBitmapToDescUtility* btod = CMdaImageBitmapToDescUtility::NewL(*this);
+	CleanupStack::PushL(btod);
+	btod->CreateL(imageBuffer,aFormat,aCodec,NULL);
+	WaitForResult();
+	User::LeaveIfError(iError);
+	btod->ConvertL(*aBitmap);
+	WaitForResult();
+	User::LeaveIfError(iError);
+	CleanupStack::PopAndDestroy(); // btod
+	CleanupStack::Pop(); // descBuf
+	return descBuf;
+	}
+
+/**
+ *
+ * Reads an image from a descriptor 
+ *
+ * @param "TPtr8 aImageBuffer"
+ *		  Descriptor containing image
+ * @param "TMdaClipFormat* aFormat"
+ *		  Format of the image
+ * @param "TMdaPackage* aCodec"
+ *		  Format of the image
+ * @leave "" 
+ *		  Will leave with appropriate system codes if a problem is encountered reading the file	
+ * @return "CFbsBitmap*"
+ *		  The bitmap read from the descriptor	
+ * @xxxx
+ *
+ */
+CFbsBitmap* CTestStepMediaSvr::ReadImageFromDescriptorL(const TPtr8& aImageBuffer, TMdaClipFormat* aFormat, TMdaPackage* aCodec)
+	{ 
+	CFbsBitmap* bmp = new(ELeave) CFbsBitmap;
+	CleanupStack::PushL(bmp);
+
+	CMdaImageDescToBitmapUtility* dtob = CMdaImageDescToBitmapUtility::NewL(*this);
+	CleanupStack::PushL(dtob);
+	dtob->OpenL(aImageBuffer,aFormat,aCodec);
+	WaitForResult();
+	User::LeaveIfError(iError);
+
+	TFrameInfo frameInfo;
+	dtob->FrameInfo(0,frameInfo);
+	User::LeaveIfError(bmp->Create(frameInfo.iOverallSizeInPixels,EColor16M));
+	dtob->ConvertL(*bmp,0);
+	WaitForResult();
+	User::LeaveIfError(iError);
+	CleanupStack::PopAndDestroy(); // dtob
+	CleanupStack::Pop(); // bmp
+	return bmp;
+	}
+/**
+ *
+ * Writes a message to the log. Intended for tests which have multiple test
+ * cases
+ *
+ * @param "TDesC& aContext"
+ *		  The context of the failure eg. The test file that gave rise to the message
+ * @param "TDesC& aMessage"
+ *		  A message to log
+ * @xxxx
+ *
+ */
+void CTestStepMediaSvr::LogMessage(const TDesC& aContext, const TDesC& aMessage) 
+	{
+	INFO_PRINTF3(_L("%S: %S"),&aContext,&aMessage);
+	}
+
+/**
+ *
+ * Writes a error to the log. Intended for tests which have multiple test
+ * cases
+ *
+ * @param "TDesC& aContext"
+ *		  The context of the failure eg. The test file that gave rise to the message
+ * @param "TDesC& aMessage"
+ *		  A message to log
+ * @xxxx
+ *
+ */
+void CTestStepMediaSvr::LogError(const TDesC& aContext, const TDesC& aMessage) 
+	{
+	ERR_PRINTF3(_L("%S: %S"),&aContext,&aMessage);	
+	}
+
+/**
+ *
+ * Compare two binary files
+ *
+ * @param "const TDesC& aFile1"
+ *		  The first file to compare
+ * @param "const TDesC& aFile2"
+ *		  The second file to compare
+ * @leave "" 
+ *		  Will leave with appropriate system codes if a problem is encountered reading either file 	
+ * @return "TVerdict"
+ *		  EPass if the files are identical
+ *		  EFail otherwise
+ * @xxxx
+ *
+ */
+TVerdict CTestStepMediaSvr::CompareFilesL(const TDesC& aFile1,const TDesC& aFile2) const
+	{
+	RFile file1, file2;
+	RFs fs;
+	User::LeaveIfError(fs.Connect());
+	CleanupClosePushL(fs);
+
+	TFileName fileName1 = iDefaultPath;
+	fileName1.Append(aFile1);
+	User::LeaveIfError(file1.Open(fs,fileName1,EFileShareAny|EFileStream|EFileRead));
+	CleanupClosePushL(file1);
+
+	TFileName fileName2 = iDefaultPath;
+	fileName2.Append(aFile2);
+	User::LeaveIfError(file2.Open(fs,fileName2,EFileShareAny|EFileStream|EFileRead));
+	CleanupClosePushL(file2);
+
+	TInt fileSize1, fileSize2;
+
+	TVerdict result = EPass;
+	TInt blockSize = 1024;
+	
+	User::LeaveIfError(file1.Size(fileSize1));
+	User::LeaveIfError(file2.Size(fileSize2));
+
+	if (fileSize1 == fileSize2) 
+		{
+		HBufC8* buf1 = HBufC8::NewMaxLC(blockSize);
+		TPtr8 buf1Ptr(buf1->Des());
+		HBufC8* buf2 = HBufC8::NewMaxLC(blockSize);
+		TPtr8 buf2Ptr(buf2->Des());
+
+		TInt length = 0;
+
+		while (length<fileSize1 && result == EPass)
+			{
+			TInt copySize;
+
+			if (fileSize1 - length > blockSize)
+				copySize = blockSize;
+			else
+				copySize = fileSize1 - length;
+			User::LeaveIfError(file1.Read(buf1Ptr,copySize));
+			User::LeaveIfError(file2.Read(buf2Ptr,copySize));
+
+			if (Mem::Compare(buf1Ptr.Ptr(),copySize,buf2Ptr.Ptr(),copySize)!=0)
+				result = EFail;
+
+			length += copySize;
+			}
+		CleanupStack::PopAndDestroy(2); // buf1, buf2
+		}
+	else
+		result = EFail;
+
+	file1.Close();
+	file2.Close();
+	fs.Close();
+
+	CleanupStack::PopAndDestroy(3); //fs, file1, file2
+
+	return result;
+	}
+/**
+ *
+ * Retrieves frame info from a file
+ *
+ * @param "TDesC& aFileName"
+ *		  Name of file to open
+ * @param "TMdaClipFormat* aFormat"
+ *		  Format of the image
+ * @param "TMdaPackage* aCodec"
+ *		  Format of the image
+ * @leave "" 
+ *		  Will leave with appropriate system codes if a problem is encountered opening the file
+ * @return "TFrameInfo"
+ *		  The frame information
+ * @xxxx
+ *
+ */
+TFrameInfo CTestStepMediaSvr::GetFrameInfoL(const TDesC& aFileName, TMdaClipFormat* aFormat, TMdaPackage* aCodec)
+	{	
+	CMdaImageFileToBitmapUtility* ftob = CMdaImageFileToBitmapUtility::NewL(*this);
+	CleanupStack::PushL(ftob);
+
+	TFileName fileName = iDefaultPath;
+	fileName.Append(aFileName);
+
+	ftob->OpenL(fileName,aFormat,aCodec);
+	WaitForResult();
+	User::LeaveIfError(iError);
+	TFrameInfo frameInfo;
+	ftob->FrameInfo(0,frameInfo);
+	CleanupStack::PopAndDestroy(); //ftob
+	return frameInfo;
+	}