sl@0: sl@0: // ECamImageProcessingTest.cpp sl@0: sl@0: // Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: #include "ECamImageProcessingTest.h" sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include "ECamUnitTestPluginUids.hrh" sl@0: #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS sl@0: #include sl@0: #endif sl@0: sl@0: sl@0: sl@0: //const TRect KRect1(100, 50, 600, 200); sl@0: const TInt KValue = 100; sl@0: const TInt KBaselinedEffects = 0x000001FF; sl@0: // sl@0: // RECamImageProcessingTest sl@0: // sl@0: sl@0: RECamImageProcessingTest* RECamImageProcessingTest::NewL(TBool aAllocTest) sl@0: { sl@0: RECamImageProcessingTest* self = new (ELeave) RECamImageProcessingTest(aAllocTest); sl@0: return self; sl@0: } sl@0: sl@0: RECamImageProcessingTest::RECamImageProcessingTest(TBool /*aAllocTest*/) sl@0: { sl@0: iTestStepName = _L("MM-ECM-ADV-U-007-HP"); sl@0: } sl@0: sl@0: TVerdict RECamImageProcessingTest::DoTestStepL() sl@0: { sl@0: TVerdict verdict = EFail; sl@0: INFO_PRINTF1(_L("Alloc test")); sl@0: TInt i; sl@0: TInt err; sl@0: for (i = 1 ; ; i++) sl@0: { sl@0: __MM_HEAP_MARK; sl@0: sl@0: if (i % 5 == 0) sl@0: { sl@0: INFO_PRINTF2(_L("Fail count = %d"), i); sl@0: } sl@0: sl@0: __UHEAP_SETFAIL(RHeap::EFailNext, i); sl@0: sl@0: TRAP(err, verdict = DoImageProcessingTestStepL()); sl@0: sl@0: TAny* testAlloc = User::Alloc(1); sl@0: TBool heapTestingComplete = (testAlloc == NULL) && (err==KErrNone); sl@0: User::Free(testAlloc); sl@0: sl@0: __UHEAP_RESET; sl@0: __MM_HEAP_MARKEND; sl@0: sl@0: if ((err != KErrNoMemory ) || heapTestingComplete) sl@0: { sl@0: INFO_PRINTF4(_L("err = %d, verdict = %d, Fail count = %d"), err, verdict, i); sl@0: INFO_PRINTF1(_L("Alloc testing completed successfully")); sl@0: verdict = EPass; sl@0: break; sl@0: } sl@0: } sl@0: return verdict; sl@0: } sl@0: sl@0: TVerdict RECamImageProcessingTest::DoImageProcessingTestStepL() sl@0: { sl@0: TVerdict result = EPass; sl@0: CCamera* camera = NULL; sl@0: sl@0: TInt error = KErrNone; sl@0: CCamera::CCameraImageProcessing* imageprocess = NULL; sl@0: sl@0: // using observer 2 sl@0: MCameraObserver2* observer2 = NULL; sl@0: sl@0: __MM_HEAP_MARK; sl@0: INFO_PRINTF1(_L("Create camera using Camera::New2L() and MCameraObserver2")); sl@0: sl@0: TRAP(error, camera = CCamera::New2L(*observer2, 0,0)); sl@0: sl@0: if (error==KErrNone) sl@0: { sl@0: CleanupStack::PushL(camera); sl@0: INFO_PRINTF1(_L("KErrNone return from CCamera::New2L()")); sl@0: imageprocess = static_cast (camera->CustomInterface(KECamImageProcessingUid)); sl@0: if (imageprocess!= NULL) sl@0: { sl@0: CleanupStack::PushL(imageprocess); sl@0: INFO_PRINTF1(_L("CCameraImageProcessing object was created")); sl@0: CleanupStack::PopAndDestroy(imageprocess); sl@0: } sl@0: else sl@0: { sl@0: result = EFail; sl@0: User::Leave(KErrNoMemory); sl@0: } sl@0: CleanupStack::PopAndDestroy(camera); sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF2(_L("Unexpected %d return from CCamera::New2L(): observer 2"), error); sl@0: result = EFail; sl@0: User::Leave(KErrNoMemory); sl@0: } sl@0: __MM_HEAP_MARKEND; sl@0: sl@0: // create a imageprocessing object using New2L sl@0: __MM_HEAP_MARK; sl@0: INFO_PRINTF1(_L("Create camera using Camera::New2L() and MCameraObserver2")); sl@0: sl@0: TRAP(error, camera = CCamera::New2L(*observer2, 0,0)); sl@0: sl@0: if (error==KErrNone) sl@0: { sl@0: CleanupStack::PushL(camera); sl@0: INFO_PRINTF1(_L("KErrNone return from CCamera::New2L()")); sl@0: TRAP(error, imageprocess = CCamera::CCameraImageProcessing::NewL(*camera)); sl@0: sl@0: if (error==KErrNone) sl@0: { sl@0: CleanupStack::PushL(imageprocess); sl@0: INFO_PRINTF1(_L("CCameraImageProcessing object was created using NewL")); sl@0: CleanupStack::PopAndDestroy(imageprocess); sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF1(_L("CCameraImageProcessing object was not created using NewL")); sl@0: result = EFail; sl@0: User::Leave(KErrNoMemory); sl@0: } sl@0: CleanupStack::PopAndDestroy(camera); sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF2(_L("Unexpected %d return from CCamera::New2L(): observer 2"), error); sl@0: result = EFail; sl@0: User::Leave(KErrNoMemory); sl@0: } sl@0: __MM_HEAP_MARKEND; sl@0: sl@0: return result; sl@0: } sl@0: sl@0: // sl@0: // RECamImageProcDefaultsTest // sl@0: // sl@0: sl@0: RECamImageProcDefaultsTest* RECamImageProcDefaultsTest::NewL(TBool aAllocTest) sl@0: { sl@0: RECamImageProcDefaultsTest* self = new (ELeave) RECamImageProcDefaultsTest(aAllocTest); sl@0: return self; sl@0: } sl@0: sl@0: RECamImageProcDefaultsTest::RECamImageProcDefaultsTest(TBool) sl@0: { sl@0: iTestStepName = _L("MM-ECM-ADV-U-012-HP"); sl@0: } sl@0: sl@0: TBool RECamImageProcDefaultsTest::CompareUidArrays(RArray& firstArray, RArray& secondArray) sl@0: { sl@0: TBool result = ETrue; sl@0: sl@0: if (firstArray.Count() != secondArray.Count()) sl@0: { sl@0: result = EFalse; sl@0: } sl@0: else sl@0: { sl@0: for (TInt expected = 0; expected < firstArray.Count(); expected++) sl@0: { sl@0: result = EFalse; sl@0: for (TInt actual = 0; actual < secondArray.Count(); actual++) sl@0: { sl@0: if (secondArray[actual] == firstArray[expected]) sl@0: { sl@0: result = ETrue; sl@0: break; sl@0: } sl@0: } sl@0: } sl@0: } sl@0: return result; sl@0: } sl@0: sl@0: TVerdict RECamImageProcDefaultsTest::DoTestStepL() sl@0: { sl@0: TVerdict result = EPass; sl@0: CCamera* camera = NULL; sl@0: sl@0: TInt error = KErrNone; sl@0: CCamera::CCameraImageProcessing* imageprocess = NULL; sl@0: sl@0: __MM_HEAP_MARK; sl@0: INFO_PRINTF1(_L("Create camera using Camera::New2L() and MCameraObserver2")); sl@0: sl@0: TRAP(error, camera = CCamera::New2L(*this,0,0)); sl@0: sl@0: if (error==KErrNone) sl@0: { sl@0: CleanupStack::PushL(camera); sl@0: INFO_PRINTF1(_L("KErrNone return from CCamera::New2L()")); sl@0: imageprocess = static_cast (camera->CustomInterface(KECamImageProcessingUid)); sl@0: if (imageprocess!= NULL) sl@0: { sl@0: CleanupStack::PushL(imageprocess); sl@0: sl@0: // Supported Transformations sl@0: RArray expectedTransfUids; sl@0: CleanupClosePushL(expectedTransfUids); sl@0: expectedTransfUids.Reset(); sl@0: // set the expected UIDS sl@0: expectedTransfUids.AppendL(KUidECamEventImageProcessingAdjustBrightness); sl@0: expectedTransfUids.AppendL(KUidECamEventImageProcessingAdjustContrast); sl@0: expectedTransfUids.AppendL(KUidECamEventImageProcessingEffect); sl@0: RArray suppTransfUids; sl@0: CleanupClosePushL(suppTransfUids); sl@0: imageprocess->GetSupportedTransformationsL(suppTransfUids); sl@0: if (CompareUidArrays(expectedTransfUids, suppTransfUids) == EFalse) sl@0: { sl@0: INFO_PRINTF1(_L("GetSupportedTransformationsL failed")); sl@0: result = EFail; sl@0: } sl@0: expectedTransfUids.Reset(); sl@0: suppTransfUids.Reset(); sl@0: CleanupStack::PopAndDestroy(2, &expectedTransfUids); //suppTransfUids sl@0: sl@0: // Active Transformations sl@0: RArray expectedActTransfUids; sl@0: CleanupClosePushL(expectedActTransfUids); sl@0: expectedActTransfUids.Reset(); sl@0: // set the expected UIDS sl@0: expectedActTransfUids.AppendL(KUidECamEventImageProcessingAdjustBrightness); sl@0: expectedActTransfUids.AppendL(KUidECamEventImageProcessingAdjustContrast); sl@0: expectedActTransfUids.AppendL(KUidECamEventImageProcessingEffect); sl@0: RArray actTransfUids; sl@0: CleanupClosePushL(actTransfUids); sl@0: actTransfUids.Reset(); sl@0: imageprocess->GetActiveTransformationsL(actTransfUids); sl@0: if (CompareUidArrays(expectedActTransfUids, actTransfUids) == EFalse) sl@0: { sl@0: INFO_PRINTF1(_L("GetActiveTransformationsL failed")); sl@0: result = EFail; sl@0: } sl@0: CleanupStack::PopAndDestroy(2, &expectedActTransfUids); //actTransfUids sl@0: sl@0: // Set & Get Active Transformation Sequence sl@0: RArray expectedTransfSequence; sl@0: CleanupClosePushL(expectedTransfSequence); sl@0: expectedTransfSequence.Reset(); sl@0: expectedTransfSequence.Append(KUidECamEventImageProcessingAdjustBrightness); sl@0: sl@0: imageprocess->SetActiveTransformSequenceL(expectedTransfSequence); sl@0: sl@0: RArray actTransfSequence; sl@0: CleanupClosePushL(actTransfSequence); sl@0: actTransfSequence.Reset(); sl@0: imageprocess->GetActiveTransformSequenceL(actTransfSequence); sl@0: if (CompareUidArrays(expectedTransfSequence, actTransfSequence) == EFalse) sl@0: { sl@0: INFO_PRINTF1(_L("GetActiveTransformSequenceL failed")); sl@0: result = EFail; sl@0: } sl@0: CleanupStack::PopAndDestroy(2, &expectedTransfSequence); //actTransfSequence sl@0: sl@0: // Get & Set Transformation sl@0: TUid iInputEventUid = KUidECamEventImageProcessingAdjustBrightness; sl@0: TInt aSetValue = 4; sl@0: imageprocess->SetTransformationValue(iInputEventUid, aSetValue); sl@0: sl@0: CheckNotification(iInputEventUid, result); sl@0: sl@0: // Check that value has actually changed. sl@0: TInt aGetValue = imageprocess->TransformationValue(iInputEventUid); sl@0: if (aSetValue != aGetValue) sl@0: { sl@0: INFO_PRINTF3(_L("Got wrong TransformationValue set %d, got %d"), aSetValue, aGetValue); sl@0: result = EFail; sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF2(_L("Transformation value set to %d"), aSetValue); sl@0: } sl@0: sl@0: TInt aGetValue1 = 0; sl@0: TInt err = imageprocess->GetTransformationValue(iInputEventUid, aGetValue1); sl@0: sl@0: if(err) sl@0: { sl@0: INFO_PRINTF2(_L("New method for Getting Transformation value returned error %d"), err); sl@0: result = EFail; sl@0: } sl@0: sl@0: if(aGetValue1 != aGetValue) sl@0: { sl@0: INFO_PRINTF1(_L("New and old method for Getting Transformation value retrieves wrong/dissimilar values")); sl@0: result = EFail; sl@0: } sl@0: sl@0: //Set Effect Transformation with color swap sl@0: iInputEventUid = KUidECamEventImageProcessingEffect; sl@0: RArray supportedEffects; sl@0: sl@0: TValueInfo info = ENotActive; sl@0: imageprocess->GetTransformationSupportedValuesL(iInputEventUid, supportedEffects, info); sl@0: sl@0: TInt effects = supportedEffects[0]; sl@0: supportedEffects.Close(); sl@0: sl@0: if(info != EBitField) sl@0: { sl@0: INFO_PRINTF1(_L("Incorrect TValueInfo provided")); sl@0: result = EFail; sl@0: } sl@0: sl@0: if(effects & CCamera::CCameraImageProcessing::EEffectColorSwap) sl@0: { sl@0: imageprocess->SetTransformationValue(iInputEventUid, CCamera::CCameraImageProcessing::EEffectColorSwap); sl@0: sl@0: CheckNotification(iInputEventUid, result); sl@0: } sl@0: sl@0: // Check that value has actually changed. sl@0: aGetValue = imageprocess->TransformationValue(iInputEventUid); sl@0: if (aGetValue != static_cast(CCamera::CCameraImageProcessing::EEffectColorSwap)) sl@0: { sl@0: INFO_PRINTF1(_L("Got wrong TransformationValue set")); sl@0: result = EFail; sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF1(_L("Transformation value set to EEffectColorSwap")); sl@0: } sl@0: sl@0: TInt concurrentColorSwappingSupported=0; sl@0: imageprocess->GetConcurrentColorSwappingsSupportedL(concurrentColorSwappingSupported); sl@0: sl@0: if(concurrentColorSwappingSupported > 0) sl@0: { sl@0: TestColorSwapL(imageprocess, result); sl@0: } sl@0: sl@0: //Set Effect Transformation with color accent sl@0: iInputEventUid = iInputEventUid = KUidECamEventImageProcessingEffect; sl@0: if(effects & CCamera::CCameraImageProcessing::EEffectColorAccent) sl@0: { sl@0: imageprocess->SetTransformationValue(iInputEventUid, CCamera::CCameraImageProcessing::EEffectColorAccent); sl@0: sl@0: CheckNotification(iInputEventUid, result); sl@0: } sl@0: sl@0: // Check that value has actually changed. sl@0: aGetValue = imageprocess->TransformationValue(iInputEventUid); sl@0: if (aGetValue != static_cast(CCamera::CCameraImageProcessing::EEffectColorAccent)) sl@0: { sl@0: INFO_PRINTF1(_L("Got wrong TransformationValue set")); sl@0: result = EFail; sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF1(_L("Transformation value set to EEffectColorAccent")); sl@0: } sl@0: sl@0: TInt concurrentColorAccentSupported=0; sl@0: imageprocess->GetConcurrentColorAccentSupportedL(concurrentColorAccentSupported); sl@0: sl@0: if(concurrentColorAccentSupported > 0) sl@0: { sl@0: TestColorAccentL(imageprocess, result); sl@0: } sl@0: sl@0: // Get & Set Source Rect sl@0: TRect setRect(100, 50, 600, 200); sl@0: TRect getRect; sl@0: imageprocess->SetSourceRect(setRect); sl@0: imageprocess->GetSourceRect(getRect); sl@0: if (setRect != getRect) sl@0: { sl@0: INFO_PRINTF1(_L("Did not get the same rect")); sl@0: result = EFail; sl@0: } sl@0: sl@0: CCamera::CCameraImageProcessing::TOrientationReference orientationReference = sl@0: CCamera::CCameraImageProcessing::EOrientationReferenceCameraSensorOrientation; sl@0: TUint supportedRelativeRotation=0; sl@0: TUint supportedRelativeMirroring=0; sl@0: TUint supportedRelativeFlipping=0; sl@0: sl@0: INFO_PRINTF1(_L("GetSupportedRelativeOrientationOptionsL method invocation")); sl@0: sl@0: TRAP(err,imageprocess->GetSupportedRelativeOrientationOptionsL(orientationReference, sl@0: supportedRelativeRotation, supportedRelativeMirroring, supportedRelativeFlipping)); sl@0: sl@0: if(err!= KErrNotSupported) sl@0: { sl@0: INFO_PRINTF1(_L("GetSupportedRelativeOrientationOptionsL did not leave with KErrNotSupported")); sl@0: result = EFail; sl@0: } sl@0: sl@0: CCamera::CCameraImageProcessing::TRelativeRotation relativeRotation = sl@0: CCamera::CCameraImageProcessing::ERelativeRotation0Degrees; sl@0: sl@0: CCamera::CCameraImageProcessing::TRelativeMirror relativeMirror = sl@0: CCamera::CCameraImageProcessing::ERelativeMirrorNone; sl@0: sl@0: CCamera::CCameraImageProcessing::TRelativeFlipping relativeFlipping = sl@0: CCamera::CCameraImageProcessing::ERelativeFlippingNone; sl@0: sl@0: INFO_PRINTF1(_L("GetCurrentRelativeOrientationOptionsL method invocation")); sl@0: TRAP(err,imageprocess->GetCurrentRelativeOrientationOptionsL(orientationReference, sl@0: relativeRotation, relativeMirror, relativeFlipping)); sl@0: sl@0: if(err!= KErrNotSupported) sl@0: { sl@0: INFO_PRINTF1(_L("GetCurrentRelativeOrientationOptionsL did not leave with KErrNotSupported")); sl@0: result = EFail; sl@0: } sl@0: sl@0: INFO_PRINTF1(_L("SetRelativeOrientationOptionsL method invocation")); sl@0: iInputEventUid = KUidECamEventImageProcessingTransformRelativeOrientation; sl@0: imageprocess->SetRelativeOrientationOptionsL(orientationReference, sl@0: relativeRotation, relativeMirror, relativeFlipping); sl@0: sl@0: CheckNotificationNeg(iInputEventUid, result); sl@0: sl@0: CleanupStack::PopAndDestroy(imageprocess); sl@0: } sl@0: else sl@0: { sl@0: result = EFail; sl@0: } sl@0: CleanupStack::PopAndDestroy(camera); sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF2(_L("Unexpected %d return from CCamera::New2L(): observer 2"), error); sl@0: result = EFail; sl@0: } sl@0: __MM_HEAP_MARKEND; sl@0: sl@0: return result; sl@0: } sl@0: sl@0: void RECamImageProcDefaultsTest::TestColorSwapL(CCamera::CCameraImageProcessing* aImageProcess, TVerdict& aResult) sl@0: { sl@0: CCamera::CCameraImageProcessing::TColorOperationCapabilities colorSwapCapabilities; sl@0: aImageProcess->GetColorSwapCapabilitiesL(0, colorSwapCapabilities); sl@0: sl@0: if(!colorSwapCapabilities.iIsCapabilityUniform) sl@0: { sl@0: INFO_PRINTF1(_L("Non Uniform entries for color swap")); sl@0: } sl@0: sl@0: //fill the parameters for color swap entry sl@0: CCamera::CCameraImageProcessing::TColorOperationEntry colorSwapParameters; sl@0: sl@0: colorSwapParameters.iSourceColor.SetGreen(KValue); sl@0: colorSwapParameters.iTargetColor.SetBlue(KValue); sl@0: sl@0: colorSwapParameters.iSourceColorRepresentation = CCamera::CCameraImageProcessing::ERepresentationSingle; sl@0: colorSwapParameters.iTargetColorRepresentation = CCamera::CCameraImageProcessing::ERepresentationSingle; sl@0: sl@0: colorSwapParameters.iColorOperationSourceRgbGroupingMode = CCamera::CCameraImageProcessing::ERgbGroupingFixed; sl@0: colorSwapParameters.iColorOperationTargetRgbGroupingMode = CCamera::CCameraImageProcessing::ERgbGroupingFixed; sl@0: sl@0: //set the entry sl@0: iInputEventUid = KUidECamEvent2CIPSetColorSwapEntry; sl@0: aImageProcess->SetColorSwapEntryL(0, colorSwapParameters); sl@0: sl@0: CheckNotificationImgProc(iInputEventUid, 0, aResult); sl@0: sl@0: //check the entry status sl@0: CCamera::CCameraImageProcessing::TColorOperationEntry getColorSwapParameters; sl@0: aImageProcess->GetColorSwapEntryL(0, getColorSwapParameters); sl@0: sl@0: if(getColorSwapParameters.iEntryStatus != EDiscreteSteps) sl@0: { sl@0: INFO_PRINTF1(_L("Entry status set incorrectly")); sl@0: aResult = EFail; sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF1(_L("Entry status set correctly")); sl@0: } sl@0: sl@0: //start the color swap process sl@0: iInputEventUid = KUidECamEventCIPStartColorSwap; sl@0: aImageProcess->StartColorSwappingL(); sl@0: sl@0: //try to cancel it sl@0: aImageProcess->CancelColorSwappingL(); sl@0: sl@0: CheckNotification(iInputEventUid, aResult); sl@0: sl@0: //remove the entry sl@0: iInputEventUid = KUidECamEventCIPRemoveColorSwapEntry; sl@0: aImageProcess->RemoveColorSwapEntryL(0); sl@0: CheckNotificationImgProc(iInputEventUid, 0, aResult); sl@0: sl@0: //check the entry status sl@0: aImageProcess->GetColorSwapEntryL(0, getColorSwapParameters); sl@0: sl@0: if(getColorSwapParameters.iEntryStatus != ENotActive) sl@0: { sl@0: INFO_PRINTF1(_L("Entry status set incorrectly")); sl@0: aResult = EFail; sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF1(_L("Entry status set correctly")); sl@0: } sl@0: } sl@0: sl@0: void RECamImageProcDefaultsTest::TestColorAccentL(CCamera::CCameraImageProcessing* aImageProcess, TVerdict& aResult) sl@0: { sl@0: CCamera::CCameraImageProcessing::TColorOperationCapabilities colorAccentCapabilities; sl@0: aImageProcess->GetColorAccentCapabilitiesL(0, colorAccentCapabilities); sl@0: sl@0: if(!colorAccentCapabilities.iIsCapabilityUniform) sl@0: { sl@0: INFO_PRINTF1(_L("Non Uniform entries for color accent")); sl@0: } sl@0: sl@0: //fill the parameters for color swap entry sl@0: CCamera::CCameraImageProcessing::TColorOperationEntry colorAccentParameters; sl@0: sl@0: colorAccentParameters.iSourceColor.SetGreen(KValue); sl@0: colorAccentParameters.iSourceColorRepresentation = CCamera::CCameraImageProcessing::ERepresentationSingle; sl@0: colorAccentParameters.iColorOperationSourceRgbGroupingMode = CCamera::CCameraImageProcessing::ERgbGroupingFixed; sl@0: sl@0: //set the entry sl@0: iInputEventUid = KUidECamEventCIPSetColorAccentEntry; sl@0: aImageProcess->SetColorAccentEntryL(0, colorAccentParameters); sl@0: sl@0: CheckNotificationImgProc(iInputEventUid, 0, aResult); sl@0: sl@0: //check the entry status sl@0: CCamera::CCameraImageProcessing::TColorOperationEntry getColorAccentParameters; sl@0: aImageProcess->GetColorAccentEntryL(0, getColorAccentParameters); sl@0: sl@0: if(getColorAccentParameters.iEntryStatus != EDiscreteSteps) sl@0: { sl@0: INFO_PRINTF1(_L("Entry status set incorrectly")); sl@0: aResult = EFail; sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF1(_L("Entry status set correctly")); sl@0: } sl@0: sl@0: //start the color accent process sl@0: iInputEventUid = KUidECamEventCIPStartColorAccent; sl@0: aImageProcess->StartColorAccentL(); sl@0: sl@0: //try to cancel it sl@0: aImageProcess->CancelColorAccentL(); sl@0: sl@0: CheckNotification(iInputEventUid, aResult); sl@0: sl@0: //remove the entry sl@0: iInputEventUid = KUidECamEventCIPRemoveColorAccentEntry; sl@0: aImageProcess->RemoveColorAccentEntryL(0); sl@0: CheckNotificationImgProc(iInputEventUid, 0, aResult); sl@0: sl@0: //check the entry status sl@0: aImageProcess->GetColorAccentEntryL(0, getColorAccentParameters); sl@0: sl@0: if(getColorAccentParameters.iEntryStatus != ENotActive) sl@0: { sl@0: INFO_PRINTF1(_L("Entry status set incorrectly")); sl@0: aResult = EFail; sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF1(_L("Entry status set correctly")); sl@0: } sl@0: } sl@0: sl@0: // sl@0: // RECamImageProcRangesTest // sl@0: // sl@0: sl@0: RECamImageProcRangesTest* RECamImageProcRangesTest::NewL(TBool aAllocTest) sl@0: { sl@0: RECamImageProcRangesTest* self = new (ELeave) RECamImageProcRangesTest(aAllocTest); sl@0: return self; sl@0: } sl@0: sl@0: RECamImageProcRangesTest::RECamImageProcRangesTest(TBool) sl@0: { sl@0: iTestStepName = _L("MM-ECM-ADV-U-013-HP"); sl@0: } sl@0: sl@0: TVerdict RECamImageProcRangesTest::DoTestStepL() sl@0: { sl@0: TVerdict result = EPass; sl@0: CCamera* camera = NULL; sl@0: sl@0: TInt error = KErrNone; sl@0: CCamera::CCameraImageProcessing* imageprocess = NULL; sl@0: sl@0: __MM_HEAP_MARK; sl@0: INFO_PRINTF1(_L("Create camera using Camera::New2L() and MCameraObserver2")); sl@0: sl@0: TRAP(error, camera = CCamera::New2L(*this,0,0)); sl@0: sl@0: if (error==KErrNone) sl@0: { sl@0: CleanupStack::PushL(camera); sl@0: INFO_PRINTF1(_L("KErrNone return from CCamera::New2L()")); sl@0: imageprocess = static_cast (camera->CustomInterface(KECamImageProcessingUid)); sl@0: if (imageprocess!= NULL) sl@0: { sl@0: CleanupStack::PushL(imageprocess); sl@0: sl@0: // Get Transformation Supported Values for brightness sl@0: iInputEventUid = KUidECamEventImageProcessingAdjustBrightness; sl@0: RArray transfSuppValues; sl@0: CleanupClosePushL(transfSuppValues); sl@0: transfSuppValues.Reset(); sl@0: TValueInfo valueInfo; sl@0: imageprocess->GetTransformationSupportedValuesL(iInputEventUid, transfSuppValues, valueInfo); sl@0: sl@0: // Set a non supported Transformation value sl@0: TInt aSetValue = 0; sl@0: imageprocess->SetTransformationValue(iInputEventUid, aSetValue); sl@0: sl@0: CheckNotification(iInputEventUid, result); sl@0: sl@0: TInt aGetValue =imageprocess->TransformationValue(iInputEventUid); sl@0: if (aSetValue != aGetValue) sl@0: { sl@0: INFO_PRINTF3(_L("Set unsupported TransformationValue set %d, get %d"), aSetValue, aGetValue); sl@0: result = EFail; sl@0: } sl@0: CleanupStack::PopAndDestroy(&transfSuppValues); sl@0: sl@0: CleanupStack::PopAndDestroy(imageprocess); sl@0: } sl@0: else sl@0: { sl@0: result = EFail; sl@0: } sl@0: CleanupStack::PopAndDestroy(camera); sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF2(_L("Unexpected %d return from CCamera::New2L(): observer 2"), error); sl@0: result = EFail; sl@0: } sl@0: __MM_HEAP_MARKEND; sl@0: sl@0: return result; sl@0: } sl@0: sl@0: // sl@0: // RECamPresetsNegTest // sl@0: // sl@0: RECamImageProcNegTest* RECamImageProcNegTest::NewL(TBool aAllocTest) sl@0: { sl@0: RECamImageProcNegTest* self = new (ELeave) RECamImageProcNegTest(aAllocTest); sl@0: return self; sl@0: } sl@0: sl@0: RECamImageProcNegTest::RECamImageProcNegTest(TBool /*aAllocTest*/) sl@0: { sl@0: iTestStepName = _L("MM-ECM-ADV-U-0103-HP"); sl@0: } sl@0: sl@0: TVerdict RECamImageProcNegTest::DoTestStepL() sl@0: { sl@0: TVerdict result = EPass; sl@0: CCamera* camera = NULL; sl@0: sl@0: TInt error = KErrNone; sl@0: CCamera::CCameraImageProcessing* imageprocess = NULL; sl@0: sl@0: sl@0: __MM_HEAP_MARK; sl@0: INFO_PRINTF1(_L("Create camera using Camera::New2L() and MCameraObserver2")); sl@0: sl@0: TRAP(error, camera = CCamera::New2L(*this,0,0)); sl@0: sl@0: if (error==KErrNone) sl@0: { sl@0: CleanupStack::PushL(camera); sl@0: INFO_PRINTF1(_L("KErrNone return from CCamera::New2L()")); sl@0: imageprocess = static_cast (camera->CustomInterface(KECamImageProcessingUid)); sl@0: if (imageprocess!= NULL) sl@0: { sl@0: CleanupStack::PushL(imageprocess); sl@0: sl@0: // Supported Transformations sl@0: RArray suppTransfUids; sl@0: CleanupClosePushL(suppTransfUids); sl@0: suppTransfUids.Reset(); sl@0: imageprocess->GetSupportedTransformationsL(suppTransfUids); sl@0: // Get Supported Values for chosen transformation sl@0: iInputEventUid = KUidECamEventImageProcessingAdjustBrightness; sl@0: RArray transfSuppValues; sl@0: CleanupClosePushL(transfSuppValues); sl@0: transfSuppValues.Reset(); sl@0: TValueInfo valueInfo; sl@0: imageprocess->GetTransformationSupportedValuesL(iInputEventUid, transfSuppValues, valueInfo); sl@0: // Set a non supported Transformation value. sl@0: TInt aSetValue = KValue; sl@0: imageprocess->SetTransformationValue(iInputEventUid, aSetValue); sl@0: sl@0: CheckNotificationNeg(iInputEventUid, result); sl@0: sl@0: // Check that value has not changed. sl@0: TInt aGetValue =imageprocess->TransformationValue(iInputEventUid); sl@0: if (aSetValue == aGetValue) sl@0: { sl@0: INFO_PRINTF2(_L("Set unsupported TransformationValue set %d"), aSetValue); sl@0: result = EFail; sl@0: } sl@0: sl@0: CCamera::CCameraImageProcessing::TOrientationReference orientationReference = sl@0: CCamera::CCameraImageProcessing::EOrientationReferenceCameraSensorOrientation; sl@0: sl@0: CCamera::CCameraImageProcessing::TRelativeRotation relativeRotation = sl@0: CCamera::CCameraImageProcessing::ERelativeRotation0Degrees; sl@0: sl@0: CCamera::CCameraImageProcessing::TRelativeMirror relativeMirror = sl@0: CCamera::CCameraImageProcessing::ERelativeMirrorNone; sl@0: sl@0: CCamera::CCameraImageProcessing::TRelativeFlipping relativeFlipping = sl@0: CCamera::CCameraImageProcessing::ERelativeFlippingNone; sl@0: sl@0: INFO_PRINTF1(_L("SetRelativeOrientationOptionsL method invocation")); sl@0: iInputEventUid = KUidECamEventImageProcessingTransformRelativeOrientation; sl@0: imageprocess->SetRelativeOrientationOptionsL(orientationReference, sl@0: relativeRotation, relativeMirror, relativeFlipping); sl@0: sl@0: CheckNotificationNeg(iInputEventUid, result); sl@0: sl@0: CleanupStack::PopAndDestroy(2, &suppTransfUids); //transfSuppValues sl@0: sl@0: CleanupStack::PopAndDestroy(imageprocess); sl@0: } sl@0: else sl@0: { sl@0: result = EFail; sl@0: } sl@0: CleanupStack::PopAndDestroy(camera); sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF2(_L("Unexpected %d return from CCamera::New2L(): observer 2"), error); sl@0: result = EFail; sl@0: } sl@0: __MM_HEAP_MARKEND; sl@0: sl@0: return result; sl@0: } sl@0: sl@0: // sl@0: // RECamImageProcBaselineTest // sl@0: // sl@0: sl@0: RECamImageProcBaselineTest* RECamImageProcBaselineTest::NewL(TBool aAllocTest) sl@0: { sl@0: RECamImageProcBaselineTest* self = new (ELeave) RECamImageProcBaselineTest(aAllocTest); sl@0: return self; sl@0: } sl@0: sl@0: RECamImageProcBaselineTest::RECamImageProcBaselineTest(TBool) sl@0: { sl@0: iTestStepName = _L("MM-ECM-ADV-U-047-HP"); sl@0: } sl@0: sl@0: TBool RECamImageProcBaselineTest::CompareUidArrays(RArray& firstArray, RArray& secondArray) sl@0: { sl@0: TBool result = ETrue; sl@0: sl@0: if (firstArray.Count() != secondArray.Count()) sl@0: { sl@0: result = EFalse; sl@0: } sl@0: else sl@0: { sl@0: for (TInt expected = 0; expected < firstArray.Count(); expected++) sl@0: { sl@0: result = EFalse; sl@0: for (TInt actual = 0; actual < secondArray.Count(); actual++) sl@0: { sl@0: if (secondArray[actual] == firstArray[expected]) sl@0: { sl@0: result = ETrue; sl@0: break; sl@0: } sl@0: } sl@0: } sl@0: } sl@0: return result; sl@0: } sl@0: sl@0: TVerdict RECamImageProcBaselineTest::DoTestStepL() sl@0: { sl@0: TVerdict result = EPass; sl@0: CCamera* camera = NULL; sl@0: sl@0: TInt error = KErrNone; sl@0: CCamera::CCameraImageProcessing* imageprocess = NULL; sl@0: sl@0: __MM_HEAP_MARK; sl@0: INFO_PRINTF1(_L("Create camera using Camera::NewL() and MCameraObserver2")); sl@0: sl@0: TRAP(error, camera = CCamera::NewL(*this,0,0)); sl@0: sl@0: if (error==KErrNone) sl@0: { sl@0: CleanupStack::PushL(camera); sl@0: INFO_PRINTF1(_L("KErrNone return from CCamera::NewL()")); sl@0: imageprocess = static_cast (camera->CustomInterface(KECamImageProcessingUid)); sl@0: if (imageprocess!= NULL) sl@0: { sl@0: CleanupStack::PushL(imageprocess); sl@0: sl@0: // Supported Transformations sl@0: RArray expectedTransfUids; sl@0: CleanupClosePushL(expectedTransfUids); sl@0: expectedTransfUids.Reset(); sl@0: // set the expected UIDS sl@0: expectedTransfUids.AppendL(KUidECamEventImageProcessingAdjustBrightness); sl@0: expectedTransfUids.AppendL(KUidECamEventImageProcessingAdjustContrast); sl@0: expectedTransfUids.AppendL(KUidECamEventImageProcessingEffect); sl@0: RArray suppTransfUids; sl@0: CleanupClosePushL(suppTransfUids); sl@0: imageprocess->GetSupportedTransformationsL(suppTransfUids); sl@0: if (CompareUidArrays(expectedTransfUids, suppTransfUids) == EFalse) sl@0: { sl@0: INFO_PRINTF1(_L("GetSupportedTransformationsL failed")); sl@0: result = EFail; sl@0: } sl@0: expectedTransfUids.Reset(); sl@0: suppTransfUids.Reset(); sl@0: CleanupStack::PopAndDestroy(2, &expectedTransfUids); //suppTransfUids sl@0: sl@0: // Active Transformations sl@0: RArray expectedActTransfUids; sl@0: CleanupClosePushL(expectedActTransfUids); sl@0: expectedActTransfUids.Reset(); sl@0: // set the expected UIDS sl@0: expectedActTransfUids.AppendL(KUidECamEventImageProcessingAdjustBrightness); sl@0: expectedActTransfUids.AppendL(KUidECamEventImageProcessingAdjustContrast); sl@0: expectedActTransfUids.AppendL(KUidECamEventImageProcessingEffect); sl@0: RArray actTransfUids; sl@0: CleanupClosePushL(actTransfUids); sl@0: actTransfUids.Reset(); sl@0: imageprocess->GetActiveTransformationsL(actTransfUids); sl@0: if (CompareUidArrays(expectedActTransfUids, actTransfUids) == EFalse) sl@0: { sl@0: INFO_PRINTF1(_L("GetActiveTransformationsL failed")); sl@0: result = EFail; sl@0: } sl@0: CleanupStack::PopAndDestroy(2, &expectedActTransfUids); //actTransfUids sl@0: sl@0: // check baseline sl@0: RArray expectedTransfSequence; sl@0: CleanupClosePushL(expectedTransfSequence); sl@0: expectedTransfSequence.Reset(); sl@0: expectedTransfSequence.Append(KUidECamEventImageProcessingEffect); sl@0: sl@0: imageprocess->SetActiveTransformSequenceL(expectedTransfSequence); sl@0: sl@0: RArray actTransfSequence; sl@0: CleanupClosePushL(actTransfSequence); sl@0: actTransfSequence.Reset(); sl@0: imageprocess->GetActiveTransformSequenceL(actTransfSequence); sl@0: if (CompareUidArrays(expectedTransfSequence, actTransfSequence) == EFalse) sl@0: { sl@0: INFO_PRINTF1(_L("GetActiveTransformSequenceL failed")); sl@0: result = EFail; sl@0: } sl@0: CleanupStack::PopAndDestroy(2, &expectedTransfSequence); //actTransfSequence sl@0: sl@0: sl@0: //Set Effect Transformation with color swap sl@0: iInputEventUid = KUidECamEventImageProcessingEffect; sl@0: RArray supportedEffects; sl@0: sl@0: TValueInfo info = ENotActive; sl@0: imageprocess->GetTransformationSupportedValuesL(iInputEventUid, supportedEffects, info); sl@0: sl@0: TInt effects = supportedEffects[0]; sl@0: supportedEffects.Close(); sl@0: sl@0: if(info != EBitField) sl@0: { sl@0: INFO_PRINTF1(_L("Incorrect TValueInfo provided")); sl@0: result = EFail; sl@0: } sl@0: sl@0: if(effects > KBaselinedEffects) sl@0: { sl@0: INFO_PRINTF1(_L("Unfamiliar enum value returned")); sl@0: result = EFail; sl@0: } sl@0: sl@0: imageprocess->SetTransformationValue(iInputEventUid, CCamera::CCameraImageProcessing::EEffectColorSwap); sl@0: CheckNotification(iInputEventUid, result); sl@0: sl@0: // Check that value has actually changed to EEffectNone due to baselining. sl@0: TInt getValue = imageprocess->TransformationValue(iInputEventUid); sl@0: if (getValue != static_cast(CCamera::CCameraImageProcessing::EEffectNone)) sl@0: { sl@0: INFO_PRINTF1(_L("Got unfamiliar TransformationValue")); sl@0: result = EFail; sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF1(_L("Transformation value set to EEffectNone due to baselining")); sl@0: } sl@0: sl@0: CleanupStack::PopAndDestroy(imageprocess); sl@0: } sl@0: else sl@0: { sl@0: result = EFail; sl@0: } sl@0: CleanupStack::PopAndDestroy(camera); sl@0: } sl@0: else sl@0: { sl@0: INFO_PRINTF2(_L("Unexpected %d return from CCamera::NewL(): observer 2"), error); sl@0: result = EFail; sl@0: } sl@0: __MM_HEAP_MARKEND; sl@0: sl@0: return result; sl@0: }