sl@0: // Copyright (c) 2005-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 "EnhanceFunctionality.h" sl@0: #include "AdvancedSettings.h" sl@0: #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS sl@0: #include sl@0: #endif sl@0: sl@0: CCamHistogram* CCamHistogram::NewL(CCamUnitTestPlugin& aOwner) sl@0: { sl@0: CCamHistogram* self = new (ELeave) CCamHistogram(aOwner); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(); sl@0: CleanupStack::Pop(self); sl@0: return self; sl@0: } sl@0: sl@0: void CCamHistogram::ConstructL() sl@0: { sl@0: iHistograms = new (ELeave) CArrayFixFlat(1); sl@0: } sl@0: sl@0: CCamHistogram::CCamHistogram(CCamUnitTestPlugin& aOwner):iOwner(aOwner) sl@0: { sl@0: } sl@0: sl@0: CCamHistogram::~CCamHistogram() sl@0: { sl@0: if(iHistograms != NULL) sl@0: { sl@0: TInt i=0; sl@0: TInt count = iHistograms->Count(); sl@0: while(iAt(i); sl@0: i++; sl@0: } sl@0: iHistograms->Reset(); sl@0: delete iHistograms; sl@0: iHistograms = NULL; sl@0: } sl@0: } sl@0: sl@0: TUint32 CCamHistogram::SupportedHistograms() sl@0: { sl@0: return CCamera::CCameraHistogram::ELuminance; sl@0: } sl@0: sl@0: TUint CCamHistogram::PrepareHistogramL(CCamera::CCameraHistogram::THistogramType aType) sl@0: { sl@0: CHistogram* histogram = CHistogram::NewL(EFalse, aType, TPoint(0,0), TSize(0,0), TRgb(0)); sl@0: iHistograms->AppendL(histogram); sl@0: TInt temp = iHistograms->Count(); sl@0: return --temp; sl@0: } sl@0: sl@0: TUint CCamHistogram::PrepareDSAHistogramL(CCamera::CCameraHistogram::THistogramType aType, const TPoint& aPosition, const TSize& aSize, const TRgb& aColor) sl@0: { sl@0: CHistogram* histogram = CHistogram::NewL(ETrue, aType, aPosition, aSize, aColor); sl@0: iHistograms->AppendL(histogram); sl@0: TInt temp = iHistograms->Count(); sl@0: return --temp; sl@0: } sl@0: sl@0: void CCamHistogram::StartHistogramL(TUint aHistHandle) sl@0: { sl@0: iHistograms->At(aHistHandle)->iActive = ETrue; sl@0: if(iHistograms->At(aHistHandle)->iDSA == EFalse) sl@0: { sl@0: TUid myuid; sl@0: myuid.iUid = KUidECamEventHistogramUidValue; sl@0: iOwner.Notify(myuid,0); sl@0: } sl@0: } sl@0: sl@0: void CCamHistogram::StopHistogramL(TUint aHistHandle) sl@0: { sl@0: iHistograms->At(aHistHandle)->iActive = EFalse; sl@0: } sl@0: sl@0: void CCamHistogram::DestroyHistogramL(TUint aHistHandle) sl@0: { sl@0: delete iHistograms->At(aHistHandle); sl@0: iHistograms->Delete(aHistHandle); sl@0: } sl@0: sl@0: void CCamHistogram::Release() sl@0: { sl@0: delete this; sl@0: } sl@0: sl@0: void CCamHistogram::GetActiveHistogramsL(RArray& /*aActiveHistograms*/) sl@0: { sl@0: //Not implemented sl@0: } sl@0: sl@0: void CCamHistogram::UpdateDSAHistogramPropertiesL(TUint aHistHandle, const TPoint& aPosition, const TSize& aSize, const TRgb& aColor) sl@0: { sl@0: iHistograms->At(aHistHandle)->iPosition = aPosition; sl@0: iHistograms->At(aHistHandle)->iSize = aSize; sl@0: iHistograms->At(aHistHandle)->iColor = aColor; sl@0: } sl@0: sl@0: void CCamHistogram::GetDSAHistogramPropertiesL(TUint aHistHandle, TPoint& aPosition, TSize& aSize, TRgb& aColor) sl@0: { sl@0: aPosition = iHistograms->At(aHistHandle)->iPosition; sl@0: aSize = iHistograms->At(aHistHandle)->iSize; sl@0: aColor = iHistograms->At(aHistHandle)->iColor; sl@0: } sl@0: sl@0: MHistogramBuffer& CCamHistogram::HistogramDataL() sl@0: { sl@0: // not implemented sl@0: TInt a = 10; sl@0: return reinterpret_cast (a); sl@0: } sl@0: sl@0: MHistogramBuffer& CCamHistogram::HistogramDataL(TUint /*aHistHandle*/) sl@0: { sl@0: // not implemented sl@0: TInt a = 10; sl@0: return reinterpret_cast (a); sl@0: } sl@0: sl@0: /** sl@0: * Defination for CHistogram Class sl@0: */ sl@0: CCamHistogram::CHistogram * CCamHistogram::CHistogram::NewL(TBool aDSA, CCamera::CCameraHistogram::THistogramType aType, TPoint aPosition, TSize aSize, TRgb aColor) sl@0: { sl@0: return new (ELeave) CCamHistogram::CHistogram(aDSA , aType, aPosition, aSize, aColor); sl@0: } sl@0: sl@0: CCamHistogram::CHistogram::CHistogram(TBool aDSA, CCamera::CCameraHistogram::THistogramType /*aType*/, TPoint aPosition, TSize aSize, TRgb aColor):iDSA(aDSA),iPosition(aPosition),iSize(aSize),iColor(aColor) sl@0: { sl@0: } sl@0: sl@0: CCamHistogram::CHistogram::~CHistogram() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * For Snapshot sl@0: *///----------------------------------------------------------------------------------- sl@0: sl@0: CCamSnapshot* CCamSnapshot::NewL(CCamUnitTestPlugin& aOwner) sl@0: { sl@0: return new (ELeave) CCamSnapshot(aOwner); sl@0: } sl@0: sl@0: CCamSnapshot::~CCamSnapshot() sl@0: { sl@0: } sl@0: sl@0: CCamSnapshot::CCamSnapshot(CCamUnitTestPlugin& aOwner):iOwner(aOwner) sl@0: { sl@0: } sl@0: sl@0: TUint32 CCamSnapshot::SupportedFormats() sl@0: { sl@0: // Dummy implementation : Nothing to implement sl@0: return CCamera::EFormatJpeg; sl@0: } sl@0: sl@0: void CCamSnapshot::PrepareSnapshotL(CCamera::TFormat aFormat, const TPoint& aPosition, const TSize& aSize, const TRgb& aBgColor, TBool aMaintainAspectRatio) sl@0: { sl@0: // Dummy implementation : sl@0: iFormat = aFormat; sl@0: iPos = aPosition; sl@0: iSize = aSize; sl@0: iBgColor = aBgColor; sl@0: iAspRatio = aMaintainAspectRatio; sl@0: } sl@0: sl@0: void CCamSnapshot::PrepareSnapshotL(CCamera::TFormat aFormat, const TSize& aSize, TBool aMaintainAspectRatio) sl@0: { sl@0: iFormat = aFormat; sl@0: iSize = aSize; sl@0: iAspRatio = aMaintainAspectRatio; sl@0: } sl@0: sl@0: TBool CCamSnapshot::IsSnapshotActive() const sl@0: { sl@0: // Dummy implementation : sl@0: return iActive; sl@0: } sl@0: sl@0: void CCamSnapshot::StartSnapshot() sl@0: { sl@0: // Dummy implementation sl@0: iActive = ETrue; sl@0: sl@0: TUid myuid; sl@0: myuid.iUid = KUidECamEventSnapshotUidValue; sl@0: iOwner.Notify(myuid,0); sl@0: } sl@0: sl@0: void CCamSnapshot::StopSnapshot() sl@0: { sl@0: // Dummy implementation sl@0: iActive = EFalse; sl@0: } sl@0: sl@0: MCameraBuffer& CCamSnapshot::SnapshotDataL(RArray& aFrameIndexOrder) sl@0: { sl@0: // Dummy implementation : sl@0: aFrameIndexOrder.Append(1); sl@0: TInt temp = 10; sl@0: return reinterpret_cast (temp); sl@0: } sl@0: sl@0: void CCamSnapshot::SetBgColorL(const TRgb& aBgColor) sl@0: { sl@0: iBgColor = aBgColor; sl@0: if(iBgColor != aBgColor) sl@0: { sl@0: User::Leave(KErrNotSupported); sl@0: } sl@0: } sl@0: sl@0: void CCamSnapshot::SetPositionL(const TPoint& aPosition) sl@0: { sl@0: iPos = aPosition; sl@0: if(iPos != aPosition) sl@0: { sl@0: User::Leave(KErrNotSupported); sl@0: } sl@0: } sl@0: sl@0: void CCamSnapshot::Release() sl@0: { sl@0: delete this; sl@0: } sl@0: sl@0: sl@0: /** sl@0: * For Overlay sl@0: */// ----------------------------------------------------------------------------------- sl@0: sl@0: CCamOverlay* CCamOverlay::NewL(CCamUnitTestPlugin& aOwner) sl@0: { sl@0: CDataGlobal* globalData = static_cast (Dll::Tls()); sl@0: sl@0: if(!globalData) sl@0: { sl@0: globalData = new (ELeave) CDataGlobal; sl@0: CleanupStack::PushL(globalData); sl@0: sl@0: globalData->iReferenceCount = 0; sl@0: globalData->iCamOverlay = new (ELeave) CCamOverlay(aOwner); sl@0: CleanupStack::PushL(globalData->iCamOverlay); sl@0: globalData->iCamOverlay->ConstructL(); sl@0: globalData->iCamOverlay->iRefCount = 1; sl@0: CleanupStack::Pop(globalData->iCamOverlay); sl@0: TInt error = Dll::SetTls(globalData); sl@0: if (error) sl@0: { sl@0: delete globalData->iCamOverlay; sl@0: User::Leave(error); sl@0: } sl@0: CleanupStack::Pop(globalData); sl@0: sl@0: return static_cast (globalData->iCamOverlay); sl@0: } sl@0: else sl@0: { sl@0: CCamOverlay* self = globalData->iCamOverlay; sl@0: sl@0: globalData->iReferenceCount++; sl@0: self->iRefCount = globalData->iReferenceCount + 1; sl@0: if (globalData->iReferenceCount == 1 ) sl@0: { sl@0: delete globalData; sl@0: Dll::FreeTls(); sl@0: } sl@0: else sl@0: { sl@0: TInt error = Dll::SetTls(globalData); sl@0: if (error) sl@0: { sl@0: delete globalData->iCamOverlay; sl@0: User::Leave(error); sl@0: } sl@0: } sl@0: return static_cast (self); sl@0: } sl@0: } sl@0: sl@0: void CCamOverlay::ConstructL() sl@0: { sl@0: iOverlays = new (ELeave) CArrayFixFlat(1); sl@0: } sl@0: sl@0: CCamOverlay::CCamOverlay(CCamUnitTestPlugin& aOwner):iOwner(aOwner) sl@0: { sl@0: } sl@0: sl@0: CCamOverlay::~CCamOverlay() sl@0: { sl@0: Dll::FreeTls(); sl@0: // Dummy implementation sl@0: if(iOverlays != NULL) sl@0: { sl@0: TInt i=0; sl@0: TInt count = iOverlays->Count(); sl@0: while(iAt(i); sl@0: i++; sl@0: } sl@0: iOverlays->Reset(); sl@0: delete iOverlays; sl@0: iOverlays = NULL; sl@0: } sl@0: } sl@0: sl@0: void CCamOverlay::Release() sl@0: { sl@0: iRefCount--; sl@0: if(!iRefCount) sl@0: { sl@0: delete this; sl@0: } sl@0: } sl@0: sl@0: TUint CCamOverlay::CreateOverlayL(const CCamera::CCameraOverlay::TOverlayParameters& aParameters, CFbsBitmap* aBitmap) sl@0: { sl@0: // Dummy implementation sl@0: if((aParameters.Size() != sizeof(CCamera::CCameraOverlay::TOverlayParameters )) || sl@0: aParameters.Version() != KECamOverlayParametersCurrentVersion) sl@0: { sl@0: User::Leave(KErrNotSupported); sl@0: } sl@0: sl@0: COverlay* overlay = COverlay::NewL(aParameters, aBitmap); sl@0: overlay->iZOrderReverse = 100 - aParameters.iZOrder; sl@0: iOverlays->AppendL(overlay); sl@0: TInt temp = iOverlays->Count(); sl@0: return --temp; sl@0: } sl@0: sl@0: void CCamOverlay::SetOverlayBitmapL(TUint aOverlayHandleRef, const CFbsBitmap* aBitmap) sl@0: { sl@0: // Dummy implementation sl@0: iOverlays->At(aOverlayHandleRef)->iBitmap = const_cast (aBitmap); sl@0: } sl@0: sl@0: void CCamOverlay::GetOverlayBitmapL(TUint aOverlayHandleRef, CFbsBitmap* aBitmap) sl@0: { sl@0: // Dummy implementation sl@0: TSize size = aBitmap->SizeInPixels(); sl@0: TDisplayMode dispMode = aBitmap->DisplayMode(); sl@0: sl@0: User::LeaveIfError(aBitmap->Duplicate(iOverlays->At(aOverlayHandleRef)->iBitmap->Handle())); sl@0: size = aBitmap->SizeInPixels(); sl@0: dispMode = aBitmap->DisplayMode(); sl@0: } sl@0: sl@0: void CCamOverlay::GetOverlayParametersL(TUint aOverlayHandle, CCamera::CCameraOverlay::TOverlayParameters& aInfo) sl@0: { sl@0: // Dummy implementation sl@0: sl@0: aInfo.iCurrentModes = iOverlays->At(aOverlayHandle)->iOverlayParms.iCurrentModes; sl@0: aInfo.iCurrentTypes = iOverlays->At(aOverlayHandle)->iOverlayParms.iCurrentTypes; sl@0: aInfo.iAlphaValue = iOverlays->At(aOverlayHandle)->iOverlayParms.iAlphaValue; sl@0: aInfo.iPosition = iOverlays->At(aOverlayHandle)->iOverlayParms.iPosition; sl@0: aInfo.iZOrder = iOverlays->At(aOverlayHandle)->iOverlayParms.iZOrder; sl@0: sl@0: } sl@0: sl@0: void CCamOverlay::SetOverlayParametersL(TUint aOverlayHandle, const CCamera::CCameraOverlay::TOverlayParameters& aParameters) sl@0: { sl@0: // Dummy implementation sl@0: iOverlays->At(aOverlayHandle)->iOverlayParms.iCurrentModes = aParameters.iCurrentModes; sl@0: iOverlays->At(aOverlayHandle)->iOverlayParms.iCurrentTypes = aParameters.iCurrentTypes; sl@0: iOverlays->At(aOverlayHandle)->iOverlayParms.iAlphaValue = aParameters.iAlphaValue; sl@0: iOverlays->At(aOverlayHandle)->iOverlayParms.iPosition = aParameters.iPosition; sl@0: iOverlays->At(aOverlayHandle)->iOverlayParms.iZOrder = aParameters.iZOrder; sl@0: sl@0: iOverlays->At(aOverlayHandle)->iZOrderReverse = 100 - aParameters.iZOrder; sl@0: } sl@0: sl@0: void CCamOverlay::ReleaseOverlay(TUint aOverlayHandle) sl@0: { sl@0: // Dummy implementation sl@0: delete iOverlays->At(aOverlayHandle); sl@0: iOverlays->Delete(aOverlayHandle); sl@0: } sl@0: sl@0: void CCamOverlay::GetOverlaySupport(CCamera::CCameraOverlay::TOverlaySupportInfo& aInfo) sl@0: { sl@0: // Dummy implementation sl@0: if((aInfo.Size() != sizeof(CCamera::CCameraOverlay::TOverlaySupportInfo )) || sl@0: aInfo.Version() != KECamOverlaySupportInfoCurrentVersion) sl@0: { sl@0: User::Leave(KErrNotSupported); sl@0: } sl@0: sl@0: aInfo.iSupportedModes = (CCamera::CCameraOverlay::EModeStillImageBurst << 1) - 1; sl@0: aInfo.iSupportedTypes = 1; sl@0: aInfo.iPerPlane = CCamera::CCameraOverlay::EBinary; sl@0: aInfo.iPerPixel = CCamera::CCameraOverlay::EBinary; sl@0: aInfo.iCanOverlap = EFalse; sl@0: } sl@0: sl@0: void CCamOverlay::GetAllOverlaysInZOrderL(RArray& /*aOverlayHandles*/) sl@0: { sl@0: // Dummy implementation sl@0: } sl@0: sl@0: void CCamOverlay::SetAllOverlaysInZOrderL(const RArray& /*aOverlayHandles*/) sl@0: { sl@0: // Dummy implementation sl@0: } sl@0: sl@0: void CCamOverlay::SetModifiableOverlayBitmapL(TUint aOverlayHandle, CFbsBitmap* aBitmap) sl@0: { sl@0: // Dummy implementation sl@0: iOverlays->At(aOverlayHandle)->iBitmap = aBitmap; sl@0: } sl@0: sl@0: void CCamOverlay::GetAllOverlaysInZOrderL(CCamera::CCameraOverlay::TOverlayCameraMode aOverlayCameraMode, TInt aViewFinderHandle, RArray& aOverlayHandles) const sl@0: { sl@0: // Dummy implementation sl@0: RArray overlayFiltered; sl@0: sl@0: aOverlayHandles.Reset(); sl@0: sl@0: // filter overlays for 'aOverlayCameraMode' and aViewFinderHandle (if applicable) sl@0: for(TInt index=0; indexCount(); index++) sl@0: { sl@0: if(iOverlays->At(index)->iOverlayParms.iCurrentModes & aOverlayCameraMode) sl@0: { sl@0: if(aOverlayCameraMode == CCamera::CCameraOverlay::EModeDirectViewfinder || aOverlayCameraMode == CCamera::CCameraOverlay::EModeClientViewfinder) sl@0: { sl@0: if(iOverlays->At(index)->iOverlayParms.iViewFinderHandle == aViewFinderHandle) sl@0: { sl@0: overlayFiltered.AppendL(index); sl@0: } sl@0: } sl@0: else sl@0: { sl@0: overlayFiltered.AppendL(index); sl@0: } sl@0: } sl@0: } sl@0: sl@0: TUint zOrderMax = 0; sl@0: TInt maxZOrderHandle =0; sl@0: sl@0: while(overlayFiltered.Count()) sl@0: { sl@0: zOrderMax = 0; sl@0: maxZOrderHandle =0; sl@0: sl@0: //find out max Zorder and the handle of the overlay which has this max z-order sl@0: for(TInt index=0; indexAt(index)->iOverlayParms.iZOrder > zOrderMax) sl@0: { sl@0: zOrderMax = iOverlays->At(index)->iOverlayParms.iZOrder; sl@0: maxZOrderHandle = index; sl@0: } sl@0: } sl@0: sl@0: aOverlayHandles.AppendL(maxZOrderHandle); sl@0: overlayFiltered.Remove(maxZOrderHandle); sl@0: } sl@0: sl@0: overlayFiltered.Close() ; sl@0: } sl@0: sl@0: void CCamOverlay::SetAllOverlaysInZOrderL(CCamera::CCameraOverlay::TOverlayCameraMode aOverlayCameraMode, TInt aViewFinderHandle, const RArray& aOverlayHandles) sl@0: { sl@0: //boundary checking sl@0: TBool available = EFalse; sl@0: TInt overlayIndex; sl@0: sl@0: for(TInt index=0; indexCount(); index++) sl@0: { sl@0: if(iOverlays->At(index)->iOverlayParms.iCurrentModes & aOverlayCameraMode) sl@0: { sl@0: if(aOverlayCameraMode == CCamera::CCameraOverlay::EModeDirectViewfinder || aOverlayCameraMode == CCamera::CCameraOverlay::EModeClientViewfinder) sl@0: { sl@0: if(iOverlays->At(index)->iOverlayParms.iViewFinderHandle == aViewFinderHandle) sl@0: { sl@0: available = ETrue; sl@0: } sl@0: } sl@0: else sl@0: { sl@0: available = ETrue; sl@0: } sl@0: } sl@0: sl@0: overlayIndex = aOverlayHandles.Find(index); sl@0: if(available) sl@0: { sl@0: if(overlayIndex == KErrNotFound) sl@0: { sl@0: User::Leave(KErrArgument); sl@0: } sl@0: } sl@0: else sl@0: { sl@0: if(overlayIndex != KErrNotFound) sl@0: { sl@0: User::Leave(KErrArgument); sl@0: } sl@0: } sl@0: }// boundary checking complete sl@0: sl@0: //provide Z order values to aOverlayHandles sl@0: TUint decZorder = 100; sl@0: for(TInt index =0; indexAt(aOverlayHandles[index])->iOverlayParms.iZOrder = decZorder; sl@0: iOverlays->At(aOverlayHandles[index])->iZOrderReverse = 100 - decZorder; sl@0: decZorder--; sl@0: } sl@0: sl@0: //setting the overlays in z-order sl@0: TInt offset = _FOFF(CCamOverlay::COverlay, iZOrderReverse); sl@0: TKeyArrayFix key(offset, ECmpTUint); sl@0: User::LeaveIfError(iOverlays->Sort(key)); sl@0: } sl@0: sl@0: sl@0: /** sl@0: * Defination for COverlay Class sl@0: */ sl@0: CCamOverlay::COverlay* CCamOverlay::COverlay::NewL(const CCamera::CCameraOverlay::TOverlayParameters& aParameters, CFbsBitmap* aBitmap) sl@0: { sl@0: CCamOverlay::COverlay* self = new (ELeave) CCamOverlay::COverlay(aParameters, aBitmap); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(); sl@0: CleanupStack::Pop(self); sl@0: return self; sl@0: } sl@0: sl@0: void CCamOverlay::COverlay::ConstructL() sl@0: { sl@0: } sl@0: sl@0: CCamOverlay::COverlay::COverlay(const CCamera::CCameraOverlay::TOverlayParameters& aParameters, CFbsBitmap* aBitmap):iOverlayParms(aParameters), iBitmap(aBitmap) sl@0: { sl@0: } sl@0: sl@0: CCamOverlay::COverlay::~COverlay () sl@0: { sl@0: } sl@0: