diff -r 000000000000 -r 40261b775718 imagingandcamerafws/imaginginttest/src/TestImageDecoderFileSource.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/imagingandcamerafws/imaginginttest/src/TestImageDecoderFileSource.cpp Tue Feb 02 01:56:55 2010 +0200 @@ -0,0 +1,641 @@ +// Copyright (c) 2004-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: +// Integration tests. +// +// + +#include + +#include "TestImageDecoderFileSource.h" + +// Positive Tests + +/** +* +* Ctor for CTestImageDecFileSource +* +* @param The name of this test step used by the script file. +* +* @return CTestImageDecFileSource*: +* Constructed CTestImageDecFileSource object +* +*/ +CTestImageDecFileSource *CTestImageDecFileSource::NewL(const TDesC& aTestName) + { + return new (ELeave) CTestImageDecFileSource(aTestName); + } + +/** +* +* Test step constructor. +* Each test step initialises its own name. +* +* @param The name of this test step. +* +*/ +CTestImageDecFileSource::CTestImageDecFileSource(const TDesC& aTestName) : + CTestStepConversion(aTestName) + { + iHeapSize = 500000; + } + +/** +* +* Do the test step. +* Each test step must supply an implementation for DoTestStepL. +* +* @return TVerdict: The result of the test step. +* +*/ +TVerdict CTestImageDecFileSource::DoTestStepL() + { + TVerdict result = EPass; + if ((iTestStepName.Compare(_L("MM-ICL-FRM-I-0800-HP")) == 0) || // TMMFileSource + (iTestStepName.Compare(_L("MM-ICL-FRM-I-0801-HP")) == 0) ) // TMMFileSource, mimeType + { + result = TestStep_I_0800_0801L(); + } + + return result; + } + +/** +* +* Read and decode an image, a JPEG, from a file. +* +* @return TVerdict: The result of the test step. +* +*/ +TVerdict CTestImageDecFileSource::TestStep_I_0800_0801L() + { + // Dummy Hal call for heap balance on target + if (DummyHalCall() != KErrNone) + { + return EInconclusive; + } + + __MM_HEAP_MARK; + + TInt err = KErrNone; + err = RFbsSession::Connect(); + if (err != KErrNone) + { + INFO_PRINTF2(_L("RFbsSession::Connect() failed, err = %d"), err); + return EInconclusive; + } + + // Open and decode the image + TRAP(err, OpenImageAndDecodeFromFileSourceL(iFileNameSrc)); + + RFbsSession::Disconnect(); + + __MM_HEAP_MARKEND; + + if (err == KErrNone) + { + return EPass; + } + else + { + INFO_PRINTF2(_L("Error in opening/decoding the image : %d"), err); + return EFail; + } + } + +/** +* +* Read and decode an image, a JPEG, from a file passing FileSource. +* +* @param filename of the image +* +* @leave err: Leaves with 'err'. +* +*/ +void CTestImageDecFileSource::OpenImageAndDecodeFromFileSourceL(const TDesC& aFileName) + { + // Get the path + TFileName theSourceFilename; + Directory(EInput, theSourceFilename); + theSourceFilename.Append(aFileName); + + User::LeaveIfError(iFs.Connect()); + + // Create TMMFileSource + TMMFileSource fileSource(theSourceFilename); + + // Open the image and create an image decoder + TInt err = KErrNone; + if (iTestStepName.Compare(_L("MM-ICL-FRM-I-0800-HP")) == 0) + { + INFO_PRINTF2(_L("Opening the file by passing FileSource : %S"), &theSourceFilename); + TRAP(err, iImageDecoder = CImageDecoder::FileNewL(iFs, fileSource)); + } + else if (iTestStepName.Compare(_L("MM-ICL-FRM-I-0801-HP")) == 0) + { + INFO_PRINTF2(_L("Opening the file by passing FileSource and MIME type : %S"), &theSourceFilename); + TBuf8 mimeType; + ReadMimeTypeFromConfig(mimeType); // MIME type + TRAP(err, iImageDecoder = CImageDecoder::FileNewL(iFs, fileSource, mimeType)); + } + + if (err != KErrNone) + { + INFO_PRINTF3(_L("Cannot open file: %S. Unexpected Error: %d"), &theSourceFilename, err); + delete iImageDecoder; + iImageDecoder = NULL; + + User::Leave(err); + } + + if (iImageDecoder == NULL) + { + INFO_PRINTF1(_L("ImageDecoder is NULL!")); + User::Leave(err); + } + + INFO_PRINTF2(_L("The file: %S had been opened."), &theSourceFilename); + + // Create an active listener and push it on the cleanup stack + CActiveListener* activeListener = new (ELeave) CActiveListener; + CleanupStack::PushL(activeListener); + + const TFrameInfo* theFrameInfo = &iImageDecoder->FrameInfo(); + + // Create the destination bitmap + CFbsBitmap* destBitmap = new (ELeave) CFbsBitmap; + CleanupStack::PushL(destBitmap); + + // Create the destination bitmap with the specified size and display mode + User::LeaveIfError(destBitmap->Create( + theFrameInfo->iOverallSizeInPixels, + theFrameInfo->iFrameDisplayMode)); + + activeListener ->InitialiseActiveListener(); + + // Decode the image + iImageDecoder->Convert(&activeListener->iStatus, *destBitmap, 0); + CActiveScheduler::Start(); + + err = activeListener -> iStatus.Int(); + if (err == KErrNone) + { + INFO_PRINTF2(_L("Conversion of file %S was successfull!"), &theSourceFilename); + } + else + { + INFO_PRINTF2(_L("Failed during conversion of the file: %S"), &theSourceFilename); + delete iImageDecoder; + iImageDecoder = NULL; + + // activeListener, destBitmap + CleanupStack::PopAndDestroy(2, activeListener); + + User::Leave(err); + } + + TFileName theReferenceFilename; + TBuf theExtension; + + Directory(EReference, theReferenceFilename); + TInt theSeparatorPos = aFileName.LocateReverse('.') + 1; + theReferenceFilename.Append(aFileName.Left(theSeparatorPos)); + GetImageExtension(KImageTypeMBMUid, theExtension); + theReferenceFilename.Append(theExtension); + + if (err == KErrNone) + { + // Check the bitmaps + err = CheckBitmapL(*destBitmap, theReferenceFilename); + } + + delete iImageDecoder; + iImageDecoder = NULL; + + // activeListener, destBitmap + CleanupStack::PopAndDestroy(2, activeListener); + + User::Leave(err); + } + + + +/** +* +* Ctor for CTestImageDecFileHandleSource +* +* @param The name of this test step used by the script file. +* +* @return CTestImageDecFileHandleSource*: +* Constructed CTestImageDecFileHandleSource object +* +*/ +CTestImageDecFileHandleSource *CTestImageDecFileHandleSource::NewL(const TDesC& aTestName) + { + return new (ELeave) CTestImageDecFileHandleSource(aTestName); + } + +/** +* +* Test step constructor. +* Each test step initialises its own name. +* +* @param The name of this test step. +* +*/ +CTestImageDecFileHandleSource::CTestImageDecFileHandleSource(const TDesC& aTestName) : + CTestStepConversion(aTestName) + { + iHeapSize = 500000; + } + +/** +* +* Do the test step. +* Each test step must supply an implementation for DoTestStepL. +* +* @return TVerdict: The result of the test step. +* +*/ +TVerdict CTestImageDecFileHandleSource::DoTestStepL() + { + TVerdict result = EPass; + if ((iTestStepName.Compare(_L("MM-ICL-FRM-I-0802-HP")) == 0) || // TMMFileHandleSource + (iTestStepName.Compare(_L("MM-ICL-FRM-I-0803-HP")) == 0)) // TMMFileHandleSource, mimeType + { + result = TestStep_I_0802_0803L(); + } + + return result; + } + +/** +* +* Read and decode an image, a JPEG, from a file passing FileHandleSource. +* +* @return TVerdict: The result of the test step. +* +*/ +TVerdict CTestImageDecFileHandleSource::TestStep_I_0802_0803L() + { + // Dummy Hal call for heap balance on target + if (DummyHalCall() != KErrNone) + { + return EInconclusive; + } + + __MM_HEAP_MARK; + + TInt err = KErrNone; + err = RFbsSession::Connect(); + if (err != KErrNone) + { + INFO_PRINTF2(_L("RFbsSession::Connect() failed, err = %d"), err); + return EInconclusive; + } + + // Open and decode the image + TRAP(err, OpenImageAndDecodeFromFileHandleSourceL(iFileNameSrc)); + + RFbsSession::Disconnect(); + + __MM_HEAP_MARKEND; + + if (err == KErrNone) + { + return EPass; + } + else + { + INFO_PRINTF2(_L("Error in opening/decoding the image : %d"), err); + return EFail; + } + } + +/** +* +* Read and decode an image, a JPEG, from a file passing FileHandleSource. +* +* @param filename of the image +* +* @leave err: Leaves with 'err'. +* +*/ +void CTestImageDecFileHandleSource::OpenImageAndDecodeFromFileHandleSourceL(const TDesC& aFileName) + { + // Get the path + TFileName theSourceFilename; + Directory(EInput, theSourceFilename); + theSourceFilename.Append(aFileName); + + User::LeaveIfError(iFs.Connect()); + + INFO_PRINTF2(_L("Opening the file by RFile : %S"), &theSourceFilename); + RFile rFile; + TInt res = rFile.Open(iFs, theSourceFilename, EFileWrite); + User::LeaveIfError(res); + + // Create TMMFileHandleSource + TMMFileHandleSource fileHandleSource(rFile); + + // Open the image and create an image decoder + TInt err = KErrNone; + if (iTestStepName.Compare(_L("MM-ICL-FRM-I-0802-HP")) == 0) + { + INFO_PRINTF2(_L("Opening the file by passing FileHandleSource : %S"), &theSourceFilename); + TRAP(err, iImageDecoder = CImageDecoder::FileNewL(iFs, fileHandleSource)); + } + else if (iTestStepName.Compare(_L("MM-ICL-FRM-I-0803-HP")) == 0) + { + INFO_PRINTF2(_L("Opening the file by passing FileHandleSource and MIME type : %S"), &theSourceFilename); + TBuf8 mimeType; + ReadMimeTypeFromConfig(mimeType); // MIME type + TRAP(err, iImageDecoder = CImageDecoder::FileNewL(iFs, fileHandleSource, mimeType)); + } + + if (err != KErrNone) + { + INFO_PRINTF3(_L("Cannot open file: %S. Unexpected Error: %d"), &theSourceFilename, err); + delete iImageDecoder; + iImageDecoder = NULL; + + User::Leave(err); + } + + if (iImageDecoder == NULL) + { + INFO_PRINTF1(_L("ImageDecoder is NULL!")); + User::Leave(err); + } + + INFO_PRINTF2(_L("The file: %S had been opened."), &theSourceFilename); + + // Create an active listener and push it on the cleanup stack + CActiveListener* activeListener = new (ELeave) CActiveListener; + CleanupStack::PushL(activeListener); + + const TFrameInfo* theFrameInfo = &iImageDecoder->FrameInfo(); + + // Create the destination bitmap + CFbsBitmap* destBitmap = new (ELeave) CFbsBitmap; + CleanupStack::PushL(destBitmap); + + // Create the destination bitmap with the specified size and display mode + User::LeaveIfError(destBitmap->Create( + theFrameInfo->iOverallSizeInPixels, + theFrameInfo->iFrameDisplayMode)); + + activeListener ->InitialiseActiveListener(); + + // Decode the image + iImageDecoder->Convert(&activeListener->iStatus, *destBitmap, 0); + CActiveScheduler::Start(); + + err = activeListener -> iStatus.Int(); + if (err == KErrNone) + { + INFO_PRINTF2(_L("Conversion of file %S was successfull!"), &theSourceFilename); + } + else + { + INFO_PRINTF2(_L("Failed during conversion of the file: %S"), &theSourceFilename); + delete iImageDecoder; + iImageDecoder = NULL; + + // activeListener, destBitmap + CleanupStack::PopAndDestroy(2, activeListener); + + User::Leave(err); + } + + TFileName theReferenceFilename; + TBuf theExtension; + + Directory(EReference, theReferenceFilename); + TInt theSeparatorPos = aFileName.LocateReverse('.') + 1; + theReferenceFilename.Append(aFileName.Left(theSeparatorPos)); + GetImageExtension(KImageTypeMBMUid, theExtension); + theReferenceFilename.Append(theExtension); + + if (err == KErrNone) + { + // Check the bitmaps + err = CheckBitmapL(*destBitmap, theReferenceFilename); + } + + delete iImageDecoder; + iImageDecoder = NULL; + + // activeListener, destBitmap + CleanupStack::PopAndDestroy(2, activeListener); + + User::Leave(err); + } + +// Test to check for bitmap created using CreateExtendedBitmap + +CTestImageDecFileSourceExtendedBitmap *CTestImageDecFileSourceExtendedBitmap::NewL(const TDesC& aTestName) + { + return new (ELeave) CTestImageDecFileSourceExtendedBitmap(aTestName); + } + + + + +/** +* +* Test step constructor. +* Each test step initialises its own name. +* +* @param The name of this test step. +* +*/ +CTestImageDecFileSourceExtendedBitmap::CTestImageDecFileSourceExtendedBitmap(const TDesC& aTestName) : + CTestStepConversion(aTestName) + { + iHeapSize = 500000; + } + +/** +* +* Do the test step. +* Each test step must supply an implementation for DoTestStepL. +* +* @return TVerdict: The result of the test step. +* +*/ +TVerdict CTestImageDecFileSourceExtendedBitmap::DoTestStepL() + { + TVerdict result = EPass; + + result = TestStep_I_0804L(); + + + return result; + } + +/** +* +* Read and decode an image, a JPEG, from a file. +* +* @return TVerdict: The result of the test step. +* +*/ +TVerdict CTestImageDecFileSourceExtendedBitmap::TestStep_I_0804L() + { + // Dummy Hal call for heap balance on target + if (DummyHalCall() != KErrNone) + { + return EInconclusive; + } + + __MM_HEAP_MARK; + + TInt err = KErrNone; + err = RFbsSession::Connect(); + if (err != KErrNone) + { + INFO_PRINTF2(_L("RFbsSession::Connect() failed, err = %d"), err); + return EInconclusive; + } + + // Open and decode the image + TRAP(err, OpenImageAndDecodeFromFileSourceL(iFileNameSrc)); + + RFbsSession::Disconnect(); + + __MM_HEAP_MARKEND; + + if (err == KErrNone) + { + return EPass; + } + else + { + INFO_PRINTF2(_L("Error in opening/decoding the image : %d"), err); + return EFail; + } + } + + +TInt CTestImageDecFileSourceExtendedBitmap::InitExtendedBitmap(TAny* /*aData*/, TInt /*aDataSize*/) + { + return KErrNone; + } +/** +* +* Read and decode an image, a JPEG, from a file passing FileSource. +* +* @param filename of the image +* +* @leave err: Leaves with 'err'. +* +*/ +void CTestImageDecFileSourceExtendedBitmap::OpenImageAndDecodeFromFileSourceL(const TDesC& aFileName) + { + // Get the path + TFileName theSourceFilename; + Directory(EInput, theSourceFilename); + theSourceFilename.Append(aFileName); + + User::LeaveIfError(iFs.Connect()); + + // Create TMMFileSource + TMMFileSource fileSource(theSourceFilename); + + // Open the image and create an image decoder + TInt err = KErrNone; + + + INFO_PRINTF2(_L("Opening the file by passing FileSource : %S"), &theSourceFilename); + TRAP(err, iImageDecoder = CImageDecoder::FileNewL(iFs, fileSource)); + + + if (err != KErrNone) + { + INFO_PRINTF3(_L("Cannot open file: %S. Unexpected Error: %d"), &theSourceFilename, err); + delete iImageDecoder; + iImageDecoder = NULL; + + User::Leave(err); + } + + if (iImageDecoder == NULL) + { + INFO_PRINTF1(_L("ImageDecoder is NULL!")); + User::Leave(err); + } + + INFO_PRINTF2(_L("The file: %S had been opened."), &theSourceFilename); + + // Create an active listener and push it on the cleanup stack + CActiveListener* activeListener = new (ELeave) CActiveListener; + CleanupStack::PushL(activeListener); + + const TFrameInfo* theFrameInfo = &iImageDecoder->FrameInfo(); + + // Create the destination bitmap + CFbsBitmap* destBitmap = new (ELeave) CFbsBitmap; + + CleanupStack::PushL(destBitmap); + + + User::LeaveIfError(destBitmap->CreateExtendedBitmap( + theFrameInfo->iOverallSizeInPixels, + theFrameInfo->iFrameDisplayMode,KImageTypeJPGUid,29143,*this)); + + activeListener ->InitialiseActiveListener(); + + // Decode the image + iImageDecoder->Convert(&activeListener->iStatus, *destBitmap, 0); + CActiveScheduler::Start(); + + err = activeListener -> iStatus.Int(); + if (err == KErrNone) + { + INFO_PRINTF1(_L("Expected KErrNotSupported by now. Convert did not return any error.")); + delete iImageDecoder; + iImageDecoder = NULL; + + // activeListener, destBitmap + CleanupStack::PopAndDestroy(2, activeListener); + User::Leave(KErrGeneral); + } + else + { + if(err== KErrNotSupported) + { + INFO_PRINTF1(_L("Got KErrNotSupported as expected")); + } + else + { + delete iImageDecoder; + iImageDecoder = NULL; + + // activeListener, destBitmap + CleanupStack::PopAndDestroy(2, activeListener); + INFO_PRINTF1(_L("Unexpected error")); + User::Leave(err); + } + } + + + + delete iImageDecoder; + iImageDecoder = NULL; + + // activeListener, destBitmap + CleanupStack::PopAndDestroy(2, activeListener); + + } +