sl@0: // Copyright (c) 2007-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: // testimageprocessing.cpp sl@0: // sl@0: // sl@0: sl@0: #include "test_image_processing.h" sl@0: #include sl@0: #include "ecamversion.h" sl@0: sl@0: CTestCamImgProc::CTestCamImgProc(CTestCamera& aOwner): iOwner(aOwner) sl@0: {} sl@0: sl@0: CTestCamImgProc::~CTestCamImgProc() sl@0: { sl@0: iSupportedTranformations.Close(); sl@0: iActiveTransformations.Close(); sl@0: iActiveTransformSequence.Close(); sl@0: sl@0: CDataGlobal* globalData = static_cast (Dll::Tls()); sl@0: if(globalData != NULL) sl@0: { sl@0: if(!globalData->iTestCamAdvSet && !globalData->iTestCamPresets && !globalData->iTestCamSnapshot) sl@0: { sl@0: delete globalData; sl@0: Dll::FreeTls(); sl@0: } sl@0: else sl@0: { sl@0: globalData->iTestCamImgProc = NULL; sl@0: Dll::SetTls(globalData); sl@0: } sl@0: } sl@0: } sl@0: sl@0: CTestCamImgProc* CTestCamImgProc::NewL(CTestCamera& aOwner) sl@0: { sl@0: CDataGlobal* globalData = static_cast (Dll::Tls()); sl@0: sl@0: if(globalData == NULL) sl@0: { sl@0: globalData = new (ELeave) CDataGlobal; sl@0: CleanupStack::PushL(globalData); sl@0: globalData->iImgProcReferenceCount = 0; sl@0: globalData->iTestCamImgProc = new (ELeave) CTestCamImgProc(aOwner); sl@0: CleanupStack::PushL(globalData->iTestCamImgProc); sl@0: globalData->iTestCamImgProc->ConstructL(); sl@0: globalData->iTestCamImgProc->iRefCount = 1; sl@0: User::LeaveIfError(Dll::SetTls(globalData)); sl@0: CleanupStack::Pop(globalData->iTestCamImgProc); sl@0: CleanupStack::Pop(globalData); sl@0: return globalData->iTestCamImgProc; sl@0: } sl@0: else sl@0: { sl@0: if(globalData->iTestCamImgProc == NULL) sl@0: { sl@0: globalData->iImgProcReferenceCount = 0; sl@0: globalData->iTestCamImgProc = new (ELeave) CTestCamImgProc(aOwner); sl@0: CleanupStack::PushL(globalData->iTestCamImgProc); sl@0: globalData->iTestCamImgProc->ConstructL(); sl@0: globalData->iTestCamImgProc->iRefCount = 1; sl@0: User::LeaveIfError(Dll::SetTls(globalData)); sl@0: CleanupStack::Pop(globalData->iTestCamImgProc); sl@0: return globalData->iTestCamImgProc; sl@0: } sl@0: sl@0: CTestCamImgProc* self = globalData->iTestCamImgProc; sl@0: sl@0: globalData->iImgProcReferenceCount++; sl@0: self->iRefCount = globalData->iImgProcReferenceCount + 1; sl@0: if (globalData->iImgProcReferenceCount == KNumOfImgProcExtensions-1) sl@0: { sl@0: globalData->iTestCamImgProc = NULL; sl@0: if(!globalData->iTestCamAdvSet && !globalData->iTestCamPresets && !globalData->iTestCamSnapshot) sl@0: { sl@0: delete globalData; sl@0: Dll::FreeTls(); sl@0: } sl@0: else sl@0: { sl@0: User::LeaveIfError(Dll::SetTls(globalData)); sl@0: } sl@0: } sl@0: else sl@0: { sl@0: User::LeaveIfError(Dll::SetTls(globalData)); sl@0: } sl@0: return self; sl@0: } sl@0: } sl@0: sl@0: void CTestCamImgProc::Release() sl@0: { sl@0: iRefCount--; sl@0: if(iRefCount == 0) sl@0: { sl@0: iOwner.iImgProcImpl = NULL; sl@0: delete this; sl@0: } sl@0: } sl@0: sl@0: void CTestCamImgProc::ConstructL() sl@0: { sl@0: iSupportedTranformations.Reset(); sl@0: iSupportedTranformations.AppendL(KUidECamEventImageProcessingAdjustBrightness); sl@0: iSupportedTranformations.AppendL(KUidECamEventImageProcessingAdjustContrast); sl@0: sl@0: iActiveTransformations.Reset(); sl@0: sl@0: iActiveTransformSequence.Reset(); sl@0: } sl@0: sl@0: void CTestCamImgProc::GetSupportedTransformationsL(RArray& aTransformations) const sl@0: { sl@0: aTransformations.Reset(); sl@0: for(TInt index=0; index < iSupportedTranformations.Count(); index++) sl@0: { sl@0: aTransformations.AppendL(iSupportedTranformations[index]); sl@0: } sl@0: } sl@0: sl@0: void CTestCamImgProc::GetActiveTransformationsL(RArray& aTransformations) const sl@0: { sl@0: aTransformations.Reset(); sl@0: for(TInt index=0; index < iActiveTransformations.Count(); index++) sl@0: { sl@0: aTransformations.AppendL(iActiveTransformations[index]); sl@0: } sl@0: } sl@0: sl@0: void CTestCamImgProc::GetTransformationSupportedValuesL(TUid aTransformation, RArray& aValues, TValueInfo& aInfo) const sl@0: { sl@0: TInt err = iActiveTransformations.Find(aTransformation); sl@0: if(err == KErrNotFound) sl@0: { sl@0: User::Leave(err); sl@0: } sl@0: sl@0: switch(aTransformation.iUid) sl@0: { sl@0: case KUidECamEventImageProcessingAdjustBrightnessUidValue: sl@0: { sl@0: aInfo = EContinuousRangeMinMax; sl@0: aValues.Reset(); sl@0: aValues.AppendL(KMinBrightness); sl@0: aValues.AppendL(KMaxBrightness); sl@0: break; sl@0: } sl@0: sl@0: case KUidECamEventImageProcessingAdjustContrastUidValue: sl@0: { sl@0: aInfo = EContinuousRangeMinMax; sl@0: aValues.Reset(); sl@0: aValues.AppendL(KMinContrast); sl@0: aValues.AppendL(KMaxContrast); sl@0: break; sl@0: } sl@0: sl@0: default: sl@0: User::Leave(KErrNotSupported); sl@0: } sl@0: } sl@0: sl@0: TInt CTestCamImgProc::TransformationValue(TUid aTransformation) const sl@0: { sl@0: switch(aTransformation.iUid) sl@0: { sl@0: case KUidECamEventImageProcessingAdjustBrightnessUidValue: sl@0: { sl@0: return iOwner.iImgProcBrightness; sl@0: } sl@0: sl@0: case KUidECamEventImageProcessingAdjustContrastUidValue: sl@0: { sl@0: return iOwner.iImgProcContrast; sl@0: } sl@0: sl@0: default: sl@0: return 0; sl@0: } sl@0: } sl@0: sl@0: TInt CTestCamImgProc::GetTransformationValue(TUid aTransformation, TInt& aTransformationValue) const sl@0: { sl@0: switch(aTransformation.iUid) sl@0: { sl@0: case KUidECamEventImageProcessingAdjustBrightnessUidValue: sl@0: { sl@0: aTransformationValue = iOwner.iImgProcBrightness; sl@0: return KErrNone; sl@0: } sl@0: sl@0: case KUidECamEventImageProcessingAdjustContrastUidValue: sl@0: { sl@0: aTransformationValue = iOwner.iImgProcContrast; sl@0: return KErrNone; sl@0: } sl@0: sl@0: default: sl@0: return KErrNotSupported; sl@0: } sl@0: } sl@0: sl@0: void CTestCamImgProc::SetTransformationValue(TUid aTransformation, TInt aValue) sl@0: { sl@0: TInt eventError = iOwner.CheckReserveAndPower(); sl@0: sl@0: if(eventError == KErrNone) sl@0: { sl@0: switch(aTransformation.iUid) sl@0: { sl@0: case KUidECamEventImageProcessingAdjustBrightnessUidValue: sl@0: { sl@0: if(aValue < KMinBrightness) sl@0: { sl@0: iOwner.iImgProcBrightness = KMinBrightness; sl@0: } sl@0: else sl@0: { sl@0: if(aValue > KMaxBrightness) sl@0: { sl@0: iOwner.iImgProcBrightness = KMaxBrightness; sl@0: } sl@0: else sl@0: { sl@0: iOwner.iImgProcBrightness = aValue; sl@0: } sl@0: } sl@0: break; sl@0: } sl@0: sl@0: case KUidECamEventImageProcessingAdjustContrastUidValue: sl@0: { sl@0: if(aValue < KMinContrast) sl@0: { sl@0: iOwner.iImgProcContrast = KMinContrast; sl@0: } sl@0: else sl@0: { sl@0: if(aValue > KMaxContrast) sl@0: { sl@0: iOwner.iImgProcContrast = KMaxContrast; sl@0: } sl@0: else sl@0: { sl@0: iOwner.iImgProcContrast = aValue; sl@0: } sl@0: } sl@0: break; sl@0: } sl@0: sl@0: default: sl@0: eventError = KErrNotSupported; sl@0: } sl@0: } sl@0: sl@0: if(eventError == KErrNone) sl@0: { sl@0: eventError = iActiveTransformations.Find(aTransformation); sl@0: sl@0: if(eventError == KErrNotFound) sl@0: { sl@0: eventError = iActiveTransformations.Append(aTransformation); sl@0: sl@0: if(eventError == KErrNone) sl@0: { sl@0: if(IsTransform(aTransformation)) sl@0: { sl@0: eventError = iActiveTransformSequence.Append(aTransformation); sl@0: } sl@0: } sl@0: } sl@0: else sl@0: { sl@0: eventError = KErrNone; sl@0: } sl@0: } sl@0: sl@0: TECAMEvent ecamevent(aTransformation, eventError); sl@0: sl@0: iOwner.iECamEvent = ecamevent; sl@0: iOwner.iHandleEventAsync.CallBack(); sl@0: } sl@0: sl@0: void CTestCamImgProc::GetActiveTransformSequenceL(RArray& aTransformSequence) const sl@0: { sl@0: aTransformSequence.Reset(); sl@0: for(TInt index=0; index < iActiveTransformSequence.Count(); index++) sl@0: { sl@0: aTransformSequence.AppendL(iActiveTransformSequence[index]); sl@0: } sl@0: } sl@0: sl@0: void CTestCamImgProc::SetActiveTransformSequenceL(RArray& aTransformSequence) sl@0: { sl@0: TInt err = KErrNone; sl@0: for(TInt index=0; index < aTransformSequence.Count(); index++) sl@0: { sl@0: err = iActiveTransformations.Find(aTransformSequence[index]); sl@0: if(err == KErrNotFound) sl@0: { sl@0: User::Leave(err); sl@0: } sl@0: } sl@0: sl@0: iActiveTransformSequence.Reset(); sl@0: for(TInt index=0; index < aTransformSequence.Count(); index++) sl@0: { sl@0: iActiveTransformSequence.AppendL(aTransformSequence[index]); sl@0: } sl@0: } sl@0: sl@0: void CTestCamImgProc::SetSourceRect(const TRect& /*aRect*/) sl@0: { sl@0: return; sl@0: } sl@0: sl@0: void CTestCamImgProc::GetSourceRect(TRect& /*aRect*/) const sl@0: { sl@0: return; sl@0: } sl@0: sl@0: void CTestCamImgProc::GetConcurrentColorSwappingsSupportedL(TInt& /*aConcurrentColorSwappingSupported*/) const sl@0: { sl@0: User::Leave(KErrNotSupported); sl@0: } sl@0: sl@0: void CTestCamImgProc::GetColorSwapCapabilitiesL(TInt /*aIndex*/, CCamera::CCameraImageProcessing::TColorOperationCapabilities& /*aColorSwapCapabilities*/) const sl@0: { sl@0: User::Leave(KErrNotSupported); sl@0: } sl@0: sl@0: void CTestCamImgProc::SetColorSwapEntry(TInt aIndex, const CCamera::CCameraImageProcessing::TColorOperationEntry& /*aColorSwapParameters*/) sl@0: { sl@0: TECAMEvent2 ecamevent2(KUidECamEventCIPSetColorSwapEntry, KErrNotSupported, aIndex); sl@0: sl@0: iOwner.iECamEvent2 = ecamevent2; sl@0: iOwner.iHandleEvent2Async.CallBack(); sl@0: } sl@0: sl@0: void CTestCamImgProc::RemoveColorSwapEntry(TInt aIndex) sl@0: { sl@0: TECAMEvent2 ecamevent2(KUidECamEventCIPRemoveColorSwapEntry, KErrNotSupported, aIndex); sl@0: sl@0: iOwner.iECamEvent2 = ecamevent2; sl@0: iOwner.iHandleEvent2Async.CallBack(); sl@0: } sl@0: sl@0: void CTestCamImgProc::GetColorSwapEntryL(TInt /*aIndex*/, CCamera::CCameraImageProcessing::TColorOperationEntry& /*aColorSwapParameters*/) const sl@0: { sl@0: User::Leave(KErrNotSupported); sl@0: } sl@0: sl@0: void CTestCamImgProc::StartColorSwapping() sl@0: { sl@0: TECAMEvent ecamevent(KUidECamEventCIPStartColorSwap, KErrNotSupported); sl@0: sl@0: iOwner.iECamEvent = ecamevent; sl@0: iOwner.iHandleEventAsync.CallBack(); sl@0: } sl@0: sl@0: void CTestCamImgProc::CancelColorSwappingL() sl@0: { sl@0: User::Leave(KErrNotSupported); sl@0: } sl@0: sl@0: void CTestCamImgProc::GetConcurrentColorAccentSupportedL(TInt& /*aConcurrentColorAccentSupported*/) const sl@0: { sl@0: User::Leave(KErrNotSupported); sl@0: } sl@0: sl@0: void CTestCamImgProc::GetColorAccentCapabilitiesL(TInt /*aIndex*/, CCamera::CCameraImageProcessing::TColorOperationCapabilities& /*aColorAccentCapabilities*/) const sl@0: { sl@0: User::Leave(KErrNotSupported); sl@0: } sl@0: sl@0: void CTestCamImgProc::SetColorAccentEntry(TInt aIndex, const CCamera::CCameraImageProcessing::TColorOperationEntry& /*aColorAccentParameters*/) sl@0: { sl@0: TECAMEvent2 ecamevent2(KUidECamEventCIPSetColorAccentEntry, KErrNotSupported, aIndex); sl@0: sl@0: iOwner.iECamEvent2 = ecamevent2; sl@0: iOwner.iHandleEvent2Async.CallBack(); sl@0: } sl@0: sl@0: void CTestCamImgProc::RemoveColorAccentEntry(TInt aIndex) sl@0: { sl@0: TECAMEvent2 ecamevent2(KUidECamEventCIPRemoveColorAccentEntry, KErrNotSupported, aIndex); sl@0: sl@0: iOwner.iECamEvent2 = ecamevent2; sl@0: iOwner.iHandleEvent2Async.CallBack(); sl@0: } sl@0: sl@0: void CTestCamImgProc::GetColorAccentEntryL(TInt /*aIndex*/, CCamera::CCameraImageProcessing::TColorOperationEntry& /*aColorAccentParameters*/) const sl@0: { sl@0: User::Leave(KErrNotSupported); sl@0: } sl@0: sl@0: void CTestCamImgProc::StartColorAccent() sl@0: { sl@0: TECAMEvent ecamevent(KUidECamEventCIPStartColorAccent, KErrNotSupported); sl@0: sl@0: iOwner.iECamEvent = ecamevent; sl@0: iOwner.iHandleEventAsync.CallBack(); sl@0: } sl@0: sl@0: void CTestCamImgProc::CancelColorAccentL() sl@0: { sl@0: User::Leave(KErrNotSupported); sl@0: } sl@0: sl@0: TBool CTestCamImgProc::IsTransform(TUid aTransformation) sl@0: { sl@0: switch(aTransformation.iUid) sl@0: { sl@0: //fall through sl@0: case KUidECamEventImageProcessingTransformCropUidValue: sl@0: case KUidECamEventImageProcessingTransformRotateUidValue: sl@0: case KUidECamEventImageProcessingTransformMirrorUidValue: sl@0: case KUidECamEventImageProcessingTransformScaleUidValue: sl@0: case KUidECamEventImageProcessingSourceRectUidValue: sl@0: case KUidECamEventImageProcessingNoiseReductionUidValue: sl@0: case KUidECamEventImageProcessingGlareRemovalUidValue: sl@0: { sl@0: return ETrue; sl@0: } sl@0: default: sl@0: return EFalse; sl@0: } sl@0: }