--- /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;
+ }