imagingandcamerafws/cameraunittest/src/ECamUnitTestPlugin/extended_functionality.h
changeset 0 40261b775718
equal deleted inserted replaced
-1:000000000000 0:40261b775718
       
     1 // Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // extendedfunctionality.h
       
    15 // 
       
    16 //
       
    17 
       
    18 #ifndef EXTENDEDFUNCTIONALITY_H
       
    19 #define EXTENDEDFUNCTIONALITY_H
       
    20 
       
    21 #include <ecam/ecamplugin.h>
       
    22 #include <ecam/ecaminfoplugin.h>
       
    23 
       
    24 #include "ECamUnitTestPlugin.h"
       
    25 #include <fbs.h>
       
    26 
       
    27 #include <ecam/mcamerahistogram.h>
       
    28 #include <ecam/mcamerasnapshot.h>
       
    29 #include <ecam/ecamcapturecontrolintf.h>
       
    30 #include <ecam/ecamimageprocessingintf.h>
       
    31 #include <ecam/ecamviewfinderintf.h>
       
    32 #include <ecam/implementationfactoryintf.h>
       
    33 
       
    34 class CCamUnitTestPlugin;
       
    35 
       
    36 const TInt KSupportedDirectVCType		= 0;
       
    37 const TInt KSupportedClientVCType		= 1;
       
    38 
       
    39 //
       
    40 // camera buffer 2
       
    41 class RCamBuffer2 : public MCameraBuffer2
       
    42 	{
       
    43 public:
       
    44 	RCamBuffer2(CFbsBitmap*& aFrame): iAvailable(ETrue), iFrame(aFrame) {}
       
    45 	virtual TInt NumFrames() {return 0;}
       
    46 	virtual TDesC8* DataL(TInt aFrameIndex) {if (aFrameIndex != 0) { User::Leave(KErrArgument); } return NULL; }
       
    47 	virtual CFbsBitmap& BitmapL(TInt aFrameIndex) {if (aFrameIndex != 0) { User::Leave(KErrArgument); } return *iFrame;}
       
    48  	virtual	RChunk& ChunkL() { return iChunk;}
       
    49 	virtual TInt ChunkOffsetL(TInt aFrameIndex) {if (aFrameIndex != 0) { User::Leave(KErrArgument); } return 0;}
       
    50 	virtual TInt FrameSize(TInt aFrameIndex) {if (aFrameIndex != 0) { User::Leave(KErrArgument); } return 0; }
       
    51 	virtual void Release() {iAvailable = ETrue;}
       
    52 	
       
    53 	virtual TInt GetInterfaceUids(RArray<TUid>& aInterfaceUids) {aInterfaceUids.Reset(); return KErrNotSupported;}
       
    54 	virtual TInt CustomInterface(TUid /*aInterface*/, TAny*& aPtrInterface) {aPtrInterface = NULL; return KErrNotSupported;}
       
    55 	
       
    56 public:	
       
    57 	TBool iAvailable;
       
    58 	CFbsBitmap*& iFrame;
       
    59 	RChunk iChunk;
       
    60 	};
       
    61 
       
    62 //
       
    63 //pre image capture control impl
       
    64 class CCamPreImageCaptureControl: public CBase, public MCameraPreImageCaptureControl
       
    65 	{
       
    66 public:
       
    67 	static CCamPreImageCaptureControl* NewL(CCamUnitTestPlugin& aOwner);
       
    68 	~CCamPreImageCaptureControl();
       
    69 	
       
    70 	void Release();
       
    71 	void SetPreImageCaptureControlObserver(MPreImageCaptureControlObserver& aPreImageCaptureControlObserver);
       
    72 	void GetDirectSnapshotSupportInfoL(TUint& aDirectSnapshotSupportInfo) const;
       
    73 	void GetSupportedEmbeddedStillCaptureSettingsL(RArray<TUid>& aSupportedEmbeddedStillCaptureSettings) const;
       
    74 	void GetSupportedDirectSavingTypeL(CCamera::CCameraPreImageCaptureControl::TDirectSavingType& aSupportedDirectSavingType) const;
       
    75 	void SetSequentialImageFilenameL(const TDesC8& aFilename, TInt aStartingSequenceNumber);
       
    76 	void SetLowerResolutionSequentialImageFilenameL(const TDesC8& aLowerResolutionFilename, TInt aStartingSequenceNumber);
       
    77 	void GetDirectSavingTypeL(CCamera::CCameraPreImageCaptureControl::TDirectSavingType& aDirectSavingType) const;
       
    78 	void SetDirectSavingTypeL(CCamera::CCameraPreImageCaptureControl::TDirectSavingType aDirectSavingType);
       
    79 	void GetCaptureEventSupportInfoL(TUint& aSupportedDriveModes) const;
       
    80 	void GetImageFormatsSupportedL(TUint& aImageFormatsSupported, const TSize& aSize) const;
       
    81 	void GetPixelAspectsSupportedL(TUint& aPixelAspectsSupported, CCamera::TFormat aImageFormat, const TSize& aSize) const;
       
    82 	void PrepareImageCapture(const CCamera::CCameraPreImageCaptureControl::TPrepareImageParameters& 
       
    83 										aPrepareImageParameters, MCaptureImageObserver& aCaptureImageObserver);
       
    84 	void GetImageMaxMemorySizeSettingSupportInfoL(TBool& aIsImageMaxMemorySizeSettingSupported) const;
       
    85 	void GetImageMaxMemorySizeL(TUint& aMemorySize) const;
       
    86 	void GetSupportedProcessingOptionsL(TUint& aSupportedProcessingOptions) const;
       
    87 	
       
    88 	inline MPreImageCaptureControlObserver* PreImageCaptureControlObserver() {return iPreImageCaptureControlObserver;}
       
    89 	
       
    90 private:	
       
    91 	CCamPreImageCaptureControl(CCamUnitTestPlugin& aOwner);
       
    92 	
       
    93 	void CreateCaptureImageL(CCamera::CCameraImageCapture*& aCameraImageCapture, const CCamera::CCameraPreImageCaptureControl::
       
    94 			TPrepareImageParameters& aPrepareImageParameters, MCaptureImageObserver& aCaptureImageObserver);
       
    95 	
       
    96 private:
       
    97 	CCamUnitTestPlugin& iOwner;
       
    98 	MPreImageCaptureControlObserver* iPreImageCaptureControlObserver;
       
    99 	};
       
   100 
       
   101 //
       
   102 //image capture impl	
       
   103 class CCamSnapshotForImage;
       
   104 class CCamImgProcImpForImage;
       
   105 class CCamPostImageCaptureControl;
       
   106 
       
   107 class CCamImageCapture: public CBase, public MCameraImageCapture
       
   108 	{
       
   109 friend class CSnapshotFactoryForImage;
       
   110 friend class CImgProcFactoryForImage;
       
   111 friend class CCamPostImageCaptureControl;
       
   112 
       
   113 public:
       
   114 	static CCamImageCapture* NewL(CCamUnitTestPlugin& aOwner);
       
   115 	~CCamImageCapture();
       
   116 	
       
   117 	void Release(CCamera::CCameraImageCapture* aCameraImageCapture);
       
   118 	void CreateHistogramImplFactoryL(MImplementationFactory*& aImplFactoryPtr) const;
       
   119 	void GetSnapshotImplFactoryL(MImplementationFactory*& aImplFactoryPtr) const;
       
   120 	void GetImageProcessingImplFactoryL(MImplementationFactory*& aImplFactoryPtr) const;
       
   121 	void SetCaptureImageObserver(MCaptureImageObserver& aCaptureImageObserver);
       
   122 	void GetPrepareImageParametersL(CCamera::CCameraPreImageCaptureControl::TPrepareImageParameters& aPrepareImageParameters) const;
       
   123 	void SetPrepareImageParameters(const CCamera::CCameraPreImageCaptureControl::TPrepareImageParameters& aPrepareImageParameters);
       
   124 	TAny* CreatePostImageCaptureControlImpl(TUid aInterface, TPostCaptureControlId aPostCaptureControlId);
       
   125 	void CaptureImage(CCamera::CCameraImageCapture* aCameraImageCapture);
       
   126 	void CancelCaptureImage();
       
   127 	void GetNumImagesExposedL(TUint& aNumImagesExposed) const;
       
   128 	void GetNumTotalImagesL(TUint& aNumTotalImages) const;
       
   129 	void GetPostCaptureControlHandleL(CCamera::CCameraPostImageCaptureControl*& aPostCaptureControlHandle, 
       
   130 									TPostCaptureControlId aPostCaptureControlId) const;
       
   131 	void SetCaptureImagePriorityL(TECamImagePriority aCaptureImagePriority);
       
   132 	void GetCaptureImagePriorityL(TECamImagePriority& aCaptureImagePriority) const;
       
   133 	void PauseProcessing(TUint aProcessingType);
       
   134 	void ResumeProcessingL(TUint aProcessingType);
       
   135 	
       
   136 	inline MCaptureImageObserver* CaptureImageObserver() {return iCaptureImageObserver;}
       
   137 	inline CCamera::CCameraImageCapture* CameraImageCapture() {return iCameraImageCapture;}
       
   138 	inline CCamUnitTestPlugin& Owner() {return iOwner;}
       
   139 
       
   140 private:
       
   141 	CCamImageCapture(CCamUnitTestPlugin& aOwner);
       
   142 	void CreatePostImageCaptureControlL(CCamera::CCameraPostImageCaptureControl*& aPostCaptureControlHandle, 
       
   143 						TPostCaptureControlId aPostCaptureControlId);
       
   144 	
       
   145 private:
       
   146 	CCamUnitTestPlugin& iOwner;
       
   147 	MCaptureImageObserver* iCaptureImageObserver;
       
   148 	CCamera::CCameraPreImageCaptureControl::TPrepareImageParameters iPrepareImageParameters;
       
   149 	
       
   150 	mutable CCamSnapshotForImage* iSnapshotImpForImage;
       
   151 	CCamImgProcImpForImage* iCamImgProcImpForImage;
       
   152 	RArray<TInt> iArrayPostCaptureControlId;
       
   153 	RArray<CCamPostImageCaptureControl*> iArrayPostCaptureControlImpl;
       
   154 	RArray<CCamera::CCameraPostImageCaptureControl*> iArrayPostCaptureControlHandle;
       
   155 
       
   156 	CCamera::CCameraImageCapture* iCameraImageCapture;
       
   157 	};
       
   158 
       
   159 //
       
   160 //post image capture control impl
       
   161 class CCamPostImageCaptureControl: public CBase, public MCameraPostImageCaptureControl
       
   162 	{
       
   163 public:
       
   164 	static CCamPostImageCaptureControl* NewL(CCamImageCapture& aCamImageCaptureImpl);
       
   165 	~CCamPostImageCaptureControl();
       
   166 	
       
   167 	void Release(TPostCaptureControlId aPostCaptureControlId);
       
   168 	void GetImageSequenceNumberL(TUint& aSequenceNumber) const;
       
   169 	void CancelImage();
       
   170 	void SetImagePriorityL(TECamImagePriority aImagePriority);
       
   171 	void GetImagePriorityL(TECamImagePriority& aImagePriority) const;
       
   172 	void PauseProcessing(TUint aProcessingType);
       
   173 	void ResumeProcessingL(TUint aProcessingType);
       
   174 	void GetImageBufferL(MCameraImageBuffer& aCameraImageBuffer) const;
       
   175 	void GetImageStateL(CCamera::CCameraPostImageCaptureControl::TImageState& aImageState) const;
       
   176 	void GetBufferStateL(CCamera::CCameraPostImageCaptureControl::TBufferState& aBufferState) const;
       
   177 
       
   178 	inline CCamImageCapture& CamImageCaptureImpl() {return iCamImageCaptureImpl;}
       
   179 
       
   180 private:
       
   181 	CCamPostImageCaptureControl(CCamImageCapture& aCamImageCaptureImpl);
       
   182 	
       
   183 private:
       
   184 	CCamImageCapture& iCamImageCaptureImpl;
       
   185 	};
       
   186 
       
   187 //
       
   188 //video capture control impl
       
   189 class CCamSnapshotForVideo;	
       
   190 class CCamVideoCaptureControl : public CBase, public MCameraVideoCaptureControl
       
   191 	{
       
   192 friend class CSnapshotFactoryForVideo;
       
   193 
       
   194 public:
       
   195 	static CCamVideoCaptureControl* NewL(CCamUnitTestPlugin& aOwner);
       
   196 	~CCamVideoCaptureControl();
       
   197 	
       
   198 	void Release();
       
   199 	void CreateHistogramImplFactoryL(MImplementationFactory*& aImplFactoryPtr) const;
       
   200 	void GetSnapshotImplFactoryL(MImplementationFactory*& aImplFactoryPtr) const;
       
   201 	void GetImageProcessingImplFactoryL(MImplementationFactory*& aImplFactoryPtr) const;
       
   202 	void SetCaptureVideoObserver(MCaptureVideoObserver& aCaptureVideoObserver);
       
   203 	void GetVideoFormatsSupportedL(TUint& aVideoFormatsSupported, const TSize& aSize) const;
       
   204 	void GetPixelAspectsSupportedL(TUint& aPixelAspectsSupported, CCamera::TFormat aVideoFormat, const TSize& aSize) const;
       
   205 	void GetEmbeddedStillCaptureSupportInfoL(TInt& aSupportedEmbeddedStillCaptureTypes) const;
       
   206 	void PrepareVideoCapture(const CCamera::CCameraVideoCaptureControl::TPrepareVideoParameters& aPrepareVideoParameters);
       
   207 	void GetRangeAffectedSettingsL(RArray<TUid>& aRangeAffectedSettings) const;
       
   208 	void GetValueAffectedSettingsL(RArray<TUid>& aValueAffectedSettings) const;
       
   209 	void GetDisabledSettingsL(RArray<TUid>& aDisabledSettings) const;
       
   210 	void ReleaseVideoResource();
       
   211 	void StartVideoCaptureL();
       
   212 	void StopVideoCapture();
       
   213 	void PauseVideoCapture();
       
   214 	void ResumeVideoCaptureL();
       
   215 	void GetFadingEffectStateL(CCamera::CCameraVideoCaptureControl::TFadingEffectState& aFadingEffectState) const;
       
   216 	void SetFadingEffectState(CCamera::CCameraVideoCaptureControl::TFadingEffectState aFadingEffectState);
       
   217 	void GetVideoCaptureStateL(CCamera::CCameraVideoCaptureControl::TVideoCaptureState& aVideoCaptureState) const;
       
   218 	void GetVideoCaptureSupportInfoL(TInt& aSupportedVideoCaptureTypes) const;
       
   219 	void GetPrepareVideoParametersL(CCamera::CCameraVideoCaptureControl::TPrepareVideoParameters& aPrepareVideoParameters) const;
       
   220 
       
   221 	inline MCaptureVideoObserver* CaptureVideoObserver() {return iCaptureVideoObserver;}
       
   222 	inline CCamUnitTestPlugin& Owner() {return iOwner;}
       
   223 	
       
   224 private:
       
   225 	CCamVideoCaptureControl(CCamUnitTestPlugin& aOwner);
       
   226 	void ConstructL();
       
   227 	
       
   228 private:
       
   229 	CCamUnitTestPlugin& iOwner;	
       
   230 	MCaptureVideoObserver* iCaptureVideoObserver;
       
   231 	CCamSnapshotForVideo* iSnapshotImpForVideo;
       
   232 	CCamera::CCameraVideoCaptureControl::TPrepareVideoParameters iPrepareVideoParameters;
       
   233 	CFbsBitmap* iBitmap;
       
   234 	};
       
   235 	
       
   236 //	
       
   237 //direct snapshot implementation to be used by version2 direct viewfinder.
       
   238 class CCamDirectSnapshot : public CBase, public MCameraDirectSnapshot
       
   239 	{
       
   240 public:
       
   241 	
       
   242 	static CCamDirectSnapshot* NewL();
       
   243 	~CCamDirectSnapshot();
       
   244 
       
   245 	void Release();
       
   246 	void SetDirectViewFinder(const CCamera::CCameraV2DirectViewFinder* aDirectViewFinder);
       
   247 	void GetDirectViewFinderL(CCamera::CCameraV2DirectViewFinder*& aDirectViewFinder) const;
       
   248 	void EnableDirectSnapshotL(CCamera::CCameraDirectSnapshot::TDirectSnapshotParameters& aDirectSnapshotParameters);
       
   249 	void DisableDirectSnapshot();
       
   250 	void GetDirectSnapshotStateL(CCamera::CCameraDirectSnapshot::TDirectSnapshotState& aDirectSnapshotState) const;
       
   251 	void GetDirectSnapshotParametersL(CCamera::CCameraDirectSnapshot::TDirectSnapshotParameters& aDirectSnapshotParameters) const;
       
   252 	void SetDirectSnapshotParametersL(const CCamera::CCameraDirectSnapshot::TDirectSnapshotParameters& aDirectSnapshotParameters);
       
   253 	
       
   254 private:
       
   255 	CCamDirectSnapshot();
       
   256 
       
   257 private:
       
   258 	const CCamera::CCameraV2DirectViewFinder* iCameraV2DirectVF;
       
   259 	CCamera::CCameraDirectSnapshot::TDirectSnapshotParameters iDirectSnapshotParameters;
       
   260 	CCamera::CCameraDirectSnapshot::TDirectSnapshotState iDirectSnapshotState;
       
   261 	};
       
   262 	
       
   263 //
       
   264 //V2 direct viewfinder impl
       
   265 class CCamV2DirectViewFinder: public CBase, public MCameraViewFinder, public MCameraV2DirectViewFinder
       
   266 	{
       
   267 public:
       
   268 	static CCamV2DirectViewFinder* NewL(CCamUnitTestPlugin& aOwner);
       
   269 	~CCamV2DirectViewFinder();
       
   270 	
       
   271 	void Release(CCamera::CCameraV2DirectViewFinder* aDirectViewFinderHandle);
       
   272 	void Release();
       
   273 	void GetViewFinderFadingCapabilitiesL(CCameraViewFinder::TViewFinderFadingCapabilities& aVFFadingCapabilities) const;
       
   274 	void GetViewFinderFadingEffectL(CCameraViewFinder::TViewFinderFadingEffect& aCurrentVFFadingEffect) const;
       
   275 	void SetViewFinderFadingEffect(const CCameraViewFinder::TViewFinderFadingEffect& aVFFadingEffect);
       
   276 	void GetViewFinderHandleL(TInt& aVFHandle) const;
       
   277 	
       
   278 	void CreateHistogramImplFactoryL(MImplementationFactory*& aImplFactoryPtr) const;
       
   279 	void GetImageProcessingImplFactoryL(MImplementationFactory*& aImplFactoryPtr) const;
       
   280 	void SetDirectViewFinderObserver(MDirectViewFinderObserver& aDirectViewFinderObserver);
       
   281 	void SetDirectViewFinderHandle(CCamera::CCameraV2DirectViewFinder* aDirectViewFinderHandle);
       
   282 	void StartViewFinderDirectL(RWsSession& aWs, CWsScreenDevice& aScreenDevice, RWindowBase& aWindow, TRect& aScreenRect);
       
   283 	void StartViewFinderDirectL(RWsSession& aWs, CWsScreenDevice& aScreenDevice, RWindowBase& aWindow, TRect& aScreenRect, TRect& aClipRect);
       
   284 	void GetDirectViewFinderPropertiesL(TInt& aScreenNumber, TRect& aScreenRect, TRect& aClipRect) const;
       
   285 	void PauseViewFinderDirect();
       
   286 	void ResumeViewFinderDirect();
       
   287 	void GetViewFinderStateL(CCamera::CCameraV2DirectViewFinder::TViewFinderState& aViewFinderState) const;
       
   288 	void StopDirectViewFinder();
       
   289 	TAny* GetDirectSnapshotImpl(TUid aInterface) const;
       
   290 		
       
   291 	inline MDirectViewFinderObserver* DirectViewFinderObserver() {return iDirectViewFinderObserver;}
       
   292 	inline CCamera::CCameraV2DirectViewFinder& DirectViewFinderHandle() {return *iDirectViewFinderHandle;}
       
   293 	inline CCamUnitTestPlugin& Owner() {return iOwner;}
       
   294 	
       
   295 private:
       
   296 	CCamV2DirectViewFinder(CCamUnitTestPlugin& aOwner);
       
   297 
       
   298 public:
       
   299 	TInt iRefCount;
       
   300 
       
   301 private:
       
   302 	CCamUnitTestPlugin& iOwner;
       
   303 	MDirectViewFinderObserver* iDirectViewFinderObserver;
       
   304 	CCamera::CCameraV2DirectViewFinder* iDirectViewFinderHandle;
       
   305 	TInt iVFHandle;
       
   306 	mutable CCamDirectSnapshot* iDirectSnapshot;
       
   307 	};
       
   308 
       
   309 //
       
   310 //client viewfinder impl
       
   311 class CCamClientViewFinder: public CBase, public MCameraViewFinder, public MCameraClientViewFinder
       
   312 	{
       
   313 public:
       
   314 	static CCamClientViewFinder* NewL(CCamUnitTestPlugin& aOwner);
       
   315 	~CCamClientViewFinder();
       
   316 	
       
   317 	void Release(CCamera::CCameraClientViewFinder* aClientViewFinderHandle);
       
   318 	void Release();
       
   319 	void GetViewFinderFadingCapabilitiesL(CCameraViewFinder::TViewFinderFadingCapabilities& aVFFadingCapabilities) const;
       
   320 	void GetViewFinderFadingEffectL(CCameraViewFinder::TViewFinderFadingEffect& aCurrentVFFadingEffect) const;
       
   321 	void SetViewFinderFadingEffect(const CCameraViewFinder::TViewFinderFadingEffect& aVFFadingEffect);
       
   322 	void GetViewFinderHandleL(TInt& aVFHandle) const;
       
   323 	
       
   324 	void CreateHistogramImplFactoryL(MImplementationFactory*& aImplFactoryPtr) const;
       
   325 	void GetImageProcessingImplFactoryL(MImplementationFactory*& aImplFactoryPtr) const;
       
   326 	void SetClientViewFinderObserver(MClientViewFinderObserver& aClientViewFinderObserver);
       
   327 	void SetClientViewFinderHandle(CCamera::CCameraClientViewFinder* aClientViewFinderHandle);
       
   328 	
       
   329 	void StartClientViewFinderL(TInt aScreenNumber, CCamera::TFormat aImageFormat, TSize& aSize);
       
   330 	void StartClientViewFinderL(TInt aScreenNumber, CCamera::TFormat aImageFormat, TSize& aSize, TRect& aClipRect);
       
   331 	void GetClientViewFinderStateL(TBool& aIsActive) const;
       
   332 	void GetClientViewFinderPropertiesL(TInt& aScreenNumber, CCamera::TFormat& aImageFormat, TSize& aSize, TRect& aClipRect) const;
       
   333 	void StopClientViewFinder();
       
   334 	void GetViewFinderBufferL(MCameraBuffer2& aClientViewFinderBuffer) const;
       
   335 	
       
   336 	inline MClientViewFinderObserver* ClientViewFinderObserver() {return iClientViewFinderObserver;}
       
   337 	inline CCamera::CCameraClientViewFinder& ClientViewFinderHandle() {return *iClientViewFinderHandle;}
       
   338 	inline CCamUnitTestPlugin& Owner() {return iOwner;}
       
   339 	
       
   340 private:
       
   341 	CCamClientViewFinder(CCamUnitTestPlugin& aOwner);
       
   342 
       
   343 public:
       
   344 	TInt iRefCount;
       
   345 
       
   346 private:
       
   347 	CCamUnitTestPlugin& iOwner;
       
   348 	MClientViewFinderObserver* iClientViewFinderObserver;
       
   349 	CCamera::CCameraClientViewFinder* iClientViewFinderHandle;
       
   350 	TInt iVFHandle;
       
   351 	};
       
   352 	
       
   353 //
       
   354 //snapshot impl for image
       
   355 class CCamSnapshotForImage : public CBase, public MCameraSnapshot, public MCameraSnapshot2
       
   356 	{
       
   357 friend class CHistogramImpForImageSnapshot;
       
   358 
       
   359 public:	
       
   360 	static CCamSnapshotForImage* NewL(CCamUnitTestPlugin& aOwner, CCamImageCapture& aCamImageCaptureImpl);
       
   361 	~CCamSnapshotForImage();
       
   362 	
       
   363 	TUint32 SupportedFormats();
       
   364     void PrepareSnapshotL(CCamera::TFormat aFormat, const TPoint& aPosition, const TSize& aSize, const TRgb& aBgColor, TBool aMaintainAspectRatio);
       
   365     void PrepareSnapshotL(CCamera::TFormat aFormat, const TSize& aSize, TBool aMaintainAspectRatio);
       
   366     
       
   367     void SetBgColorL(const TRgb& aBgColor); 
       
   368 	void SetPositionL(const TPoint& aPosition);
       
   369 	
       
   370     TBool IsSnapshotActive() const;
       
   371     void StartSnapshot();
       
   372 	void StopSnapshot();
       
   373 	MCameraBuffer& SnapshotDataL(RArray<TInt>& aFrameIndexOrder);
       
   374 	
       
   375 	void CreateHistogramImplFactoryL(MImplementationFactory*& aImplFactoryPtr) const;
       
   376 	void PrepareSnapshotL(const CCamera::CCameraSnapshot::TSnapshotParameters& aSnapshotParameters);
       
   377 	void GetSnapshotParametersL(CCamera::CCameraSnapshot::TSnapshotParameters& aSnapshotParameters);
       
   378 	void SetSnapshotParametersL(const CCamera::CCameraSnapshot::TSnapshotParameters& aSnapshotParameters);
       
   379 	void GetSnapshotStatusL(CCamera::CCameraSnapshot::TSnapshotState& aSnapshotState) const;
       
   380 	void SelectSnapshotVideoFramesL(CCamera::CCameraSnapshot::TSnapshotVideoFrames aSnapshotVideoFrames);
       
   381 	void EnableSnapshot();
       
   382 	void DisableSnapshot();
       
   383 	void SetClientViewFinderId(TInt aClientViewFinderId);
       
   384 	
       
   385 	void Release();
       
   386 	
       
   387 	inline CCamImageCapture& CamImageCaptureImpl() {return iCamImageCaptureImpl;}
       
   388 	inline CCamera::CCameraImageCapture& CameraImageCapture() {return *(CamImageCaptureImpl().CameraImageCapture());}
       
   389 	inline CCamUnitTestPlugin& Owner() {return iOwner;}
       
   390 private:	
       
   391 	CCamSnapshotForImage(CCamUnitTestPlugin& aOwner, CCamImageCapture& aCamImageCaptureImpl);
       
   392 	void ConstructL();
       
   393 
       
   394 private:
       
   395 	CCamUnitTestPlugin& iOwner;
       
   396 	CCamImageCapture& iCamImageCaptureImpl;
       
   397 	CFbsBitmap* iBitmap;
       
   398 	RCamBuffer2 iSnapshotbuffer;
       
   399 	CCamera::CCameraSnapshot::TSnapshotParameters iSnapshotParameters;
       
   400 	
       
   401 	TInt iRefCount;
       
   402 	};
       
   403 
       
   404 //
       
   405 //snapshot factory for image
       
   406 class CSnapshotFactoryForImage : public CBase, public MImplementationFactory
       
   407 	{
       
   408 public:
       
   409 	static CSnapshotFactoryForImage* NewL(CCamImageCapture& aCamImageCaptureImpl, CCamSnapshotForImage* aSnapshotImpForImage);
       
   410 	~CSnapshotFactoryForImage();
       
   411 	
       
   412 	TInt GetImpl(TAny*& aIfPtr, TUid aIfaceUid) const;
       
   413 	TInt GetImpl1(TAny*& aIfPtr, TUid aIfaceUid, TECamImplFactoryParam aParam1) const;
       
   414 	TInt GetImpl2(TAny*& aIfPtr, TUid aIfaceUid, TECamImplFactoryParam aParam1, TECamImplFactoryParam aParam2) const;
       
   415 	void Release();
       
   416 	
       
   417 private:
       
   418 	CSnapshotFactoryForImage();
       
   419 	void ConstructL(CCamImageCapture& aCamImageCaptureImpl, CCamSnapshotForImage* aSnapshotImpForImage);
       
   420 
       
   421 private:
       
   422 	CCamSnapshotForImage* iSnapshotImpForImage;
       
   423 	mutable TBool iIsSnapshotImpPassed;
       
   424 	};
       
   425 
       
   426 //
       
   427 //snapshot impl for video
       
   428 class CCamSnapshotForVideo : public CBase, public MCameraSnapshot, public MCameraSnapshot2
       
   429 	{
       
   430 public:	
       
   431 	static CCamSnapshotForVideo* NewL(CCamUnitTestPlugin& aOwner, CCamVideoCaptureControl& aCamVideoCaptureControlImpl);
       
   432 	~CCamSnapshotForVideo();
       
   433 	
       
   434 	TUint32 SupportedFormats();
       
   435     void PrepareSnapshotL(CCamera::TFormat aFormat, const TPoint& aPosition, const TSize& aSize, const TRgb& aBgColor, TBool aMaintainAspectRatio);
       
   436     void PrepareSnapshotL(CCamera::TFormat aFormat, const TSize& aSize, TBool aMaintainAspectRatio);
       
   437     
       
   438     void SetBgColorL(const TRgb& aBgColor); 
       
   439 	void SetPositionL(const TPoint& aPosition);
       
   440 	
       
   441     TBool IsSnapshotActive() const;
       
   442     void StartSnapshot();
       
   443 	void StopSnapshot();
       
   444 	MCameraBuffer& SnapshotDataL(RArray<TInt>& aFrameIndexOrder);
       
   445 	
       
   446 	void CreateHistogramImplFactoryL(MImplementationFactory*& aImplFactoryPtr) const;
       
   447 	void PrepareSnapshotL(const CCamera::CCameraSnapshot::TSnapshotParameters& aSnapshotParameters);
       
   448 	void GetSnapshotParametersL(CCamera::CCameraSnapshot::TSnapshotParameters& aSnapshotParameters);
       
   449 	void SetSnapshotParametersL(const CCamera::CCameraSnapshot::TSnapshotParameters& aSnapshotParameters);
       
   450 	void GetSnapshotStatusL(CCamera::CCameraSnapshot::TSnapshotState& aSnapshotState) const;
       
   451 	void SelectSnapshotVideoFramesL(CCamera::CCameraSnapshot::TSnapshotVideoFrames aSnapshotVideoFrames);
       
   452 	void EnableSnapshot();
       
   453 	void DisableSnapshot();
       
   454 	void SetClientViewFinderId(TInt aClientViewFinderId);
       
   455 	
       
   456 	void Release();
       
   457 	
       
   458 	inline CCamVideoCaptureControl& CamVideoCaptureControlImpl() {return iCamVideoCaptureControlImpl;}
       
   459 
       
   460 private:	
       
   461 	CCamSnapshotForVideo(CCamUnitTestPlugin& aOwner, CCamVideoCaptureControl& aCamVideoCaptureControlImpl);
       
   462 	void ConstructL();
       
   463 	
       
   464 private:
       
   465 	CCamUnitTestPlugin& iOwner;
       
   466 	CCamVideoCaptureControl& iCamVideoCaptureControlImpl;
       
   467 	CFbsBitmap* iBitmap;
       
   468 	RCamBuffer2 iSnapshotbuffer;
       
   469 	CCamera::CCameraSnapshot::TSnapshotParameters iSnapshotParameters;
       
   470 	
       
   471 	TInt iRefCount;
       
   472 	};
       
   473 
       
   474 //
       
   475 //snapshot factory for video
       
   476 class CSnapshotFactoryForVideo : public CBase, public MImplementationFactory
       
   477 	{
       
   478 public:
       
   479 	static CSnapshotFactoryForVideo* NewL(CCamVideoCaptureControl& aCamVideoCaptureControlImpl, CCamSnapshotForVideo* aSnapshotImpForVideo);
       
   480 	~CSnapshotFactoryForVideo();
       
   481 	
       
   482 	TInt GetImpl(TAny*& aIfPtr, TUid aIfaceUid) const;
       
   483 	TInt GetImpl1(TAny*& aIfPtr, TUid aIfaceUid, TECamImplFactoryParam aParam1) const;
       
   484 	TInt GetImpl2(TAny*& aIfPtr, TUid aIfaceUid, TECamImplFactoryParam aParam1, TECamImplFactoryParam aParam2) const;
       
   485 	void Release();
       
   486 	
       
   487 private:
       
   488 	CSnapshotFactoryForVideo();
       
   489 	void ConstructL(CCamVideoCaptureControl& aCamVideoCaptureControlImpl, CCamSnapshotForVideo* aSnapshotImpForVideo);
       
   490 
       
   491 private:
       
   492 	CCamSnapshotForVideo* iSnapshotImpForVideo;
       
   493 	mutable TBool iIsSnapshotImpPassed;
       
   494 	};
       
   495 
       
   496 //
       
   497 // V2 buffer for histogram: MHistogramV2Buffer
       
   498 class RCamHistogramV2Buffer : public MHistogramV2Buffer
       
   499 	{
       
   500 
       
   501 public:
       
   502 	RCamHistogramV2Buffer(): iAvailable(ETrue) {}
       
   503 	CCamera::CCameraV2Histogram::THistogramType Type() {return CCamera::CCameraV2Histogram::EHistNone;}
       
   504 	TInt ElementSize() {return -5;}
       
   505 	TInt NumOfElements() {return -5;}
       
   506 	TDesC8* DataL() {User::Leave(KErrNotSupported); return NULL;}
       
   507 	RChunk& ChunkL() {User::Leave(KErrNotSupported); return iChunk;}
       
   508 	TInt ChunkOffsetL() {User::Leave(KErrNotSupported); return -5;}
       
   509 	void Release() {iAvailable = EFalse;}
       
   510 
       
   511 public:
       
   512 
       
   513 	TBool iAvailable;
       
   514 	RChunk iChunk;	
       
   515 	};
       
   516 	
       
   517 //	
       
   518 //histogram impl for video
       
   519 class CHistogramImpForVideo : public CBase, public MCameraV2Histogram 
       
   520 	{
       
   521 
       
   522 public:
       
   523 	static CHistogramImpForVideo* NewL(CCamUnitTestPlugin& aOwner, CCamVideoCaptureControl& aCamVideoCaptureControlImpl);
       
   524 	~CHistogramImpForVideo();
       
   525 	
       
   526 	void Release(CCamera::CCameraV2Histogram* aHistogramHandle);
       
   527 	void SetHistogramHandle(CCamera::CCameraV2Histogram* aHistogramHandle);
       
   528 	void GetSupportedHistogramsL(TUint& aSupportedHistogramType) const;
       
   529 	void GetDirectHistogramSupportInfoL(TBool& aIsDirectHistogramSupported) const;
       
   530 	void PrepareClientHistogramL(CCamera::CCameraV2Histogram::THistogramType aType);
       
   531 	void PrepareDirectHistogramL(const CCamera::CCameraV2Histogram::TDirectHistogramParameters& aDirectHistogramParameters);	
       
   532 	void UpdateDirectHistogramPropertiesL(const CCamera::CCameraV2Histogram::TDirectHistogramParameters& aDirectHistogramParameters);
       
   533 	void GetDirectHistogramPropertiesL(CCamera::CCameraV2Histogram::TDirectHistogramParameters& aDirectHistogramParameters) const;
       
   534 	void StartHistogram();
       
   535 	void StopHistogram();
       
   536 	void GetHistogramStateL(TBool& aIsHistogramActive) const;
       
   537 	
       
   538 	inline CCamVideoCaptureControl& CamVideoCaptureControlImpl() {return iCamVideoCaptureControlImpl;}
       
   539 	
       
   540 private:
       
   541 	CHistogramImpForVideo(CCamUnitTestPlugin& aOwner, CCamVideoCaptureControl& aCamVideoCaptureControlImpl);
       
   542 
       
   543 private:
       
   544 	CCamUnitTestPlugin& iOwner;
       
   545 	CCamVideoCaptureControl& iCamVideoCaptureControlImpl;
       
   546 	};
       
   547 
       
   548 //	
       
   549 //histogram factory for video	
       
   550 class CHistogramFactoryForVideo : public CBase, public MImplementationFactory
       
   551 	{
       
   552 public:
       
   553 	static CHistogramFactoryForVideo* NewL(CCamVideoCaptureControl& aCamVideoCaptureControlImpl);
       
   554 	~CHistogramFactoryForVideo();
       
   555 	
       
   556 	TInt GetImpl(TAny*& aIfPtr, TUid aIfaceUid) const;
       
   557 	TInt GetImpl1(TAny*& aIfPtr, TUid aIfaceUid, TECamImplFactoryParam aParam1) const;
       
   558 	TInt GetImpl2(TAny*& aIfPtr, TUid aIfaceUid, TECamImplFactoryParam aParam1, TECamImplFactoryParam aParam2) const;
       
   559 	void Release();
       
   560 	
       
   561 private:
       
   562 	CHistogramFactoryForVideo();
       
   563 	void ConstructL(CCamVideoCaptureControl& aCamVideoCaptureControlImpl);
       
   564 
       
   565 private:
       
   566 	CHistogramImpForVideo* iHistogramImpForVideo;
       
   567 	mutable TBool iIsHistogramImpPassed;
       
   568 	};
       
   569 	
       
   570 //	
       
   571 //histogram impl for image
       
   572 class CHistogramImpForImage : public CBase, public MCameraV2Histogram 
       
   573 	{
       
   574 
       
   575 public:
       
   576 	static CHistogramImpForImage* NewL(CCamUnitTestPlugin& aOwner, CCamImageCapture& aCamImageCaptureImpl);
       
   577 	~CHistogramImpForImage();
       
   578 	
       
   579 	void Release(CCamera::CCameraV2Histogram* aHistogramHandle);
       
   580 	void SetHistogramHandle(CCamera::CCameraV2Histogram* aHistogramHandle);
       
   581 	void GetSupportedHistogramsL(TUint& aSupportedHistogramType) const;
       
   582 	void GetDirectHistogramSupportInfoL(TBool& aIsDirectHistogramSupported) const;
       
   583 	void PrepareClientHistogramL(CCamera::CCameraV2Histogram::THistogramType aType);
       
   584 	void PrepareDirectHistogramL(const CCamera::CCameraV2Histogram::TDirectHistogramParameters& aDirectHistogramParameters);	
       
   585 	void UpdateDirectHistogramPropertiesL(const CCamera::CCameraV2Histogram::TDirectHistogramParameters& aDirectHistogramParameters);
       
   586 	void GetDirectHistogramPropertiesL(CCamera::CCameraV2Histogram::TDirectHistogramParameters& aDirectHistogramParameters) const;
       
   587 	void StartHistogram();
       
   588 	void StopHistogram();
       
   589 	void GetHistogramStateL(TBool& aIsHistogramActive) const;
       
   590 	
       
   591 	inline CCamImageCapture& CamImageCaptureImpl() {return iCamImageCaptureImpl;}
       
   592 	inline CCamera::CCameraImageCapture& CameraImageCapture() {return *(CamImageCaptureImpl().CameraImageCapture());}
       
   593 	
       
   594 private:
       
   595 	CHistogramImpForImage(CCamUnitTestPlugin& aOwner, CCamImageCapture& aCamImageCaptureImpl);
       
   596 
       
   597 private:
       
   598 	CCamUnitTestPlugin& iOwner;
       
   599 	CCamImageCapture& iCamImageCaptureImpl;
       
   600 	CCamera::CCameraV2Histogram* iHistogramHandle;
       
   601 	};
       
   602 
       
   603 //	
       
   604 //histogram factory for image	
       
   605 class CHistogramFactoryForImage : public CBase, public MImplementationFactory
       
   606 	{
       
   607 public:
       
   608 	static CHistogramFactoryForImage* NewL(CCamImageCapture& aCamImageCaptureImpl);
       
   609 	~CHistogramFactoryForImage();
       
   610 	
       
   611 	TInt GetImpl(TAny*& aIfPtr, TUid aIfaceUid) const;
       
   612 	TInt GetImpl1(TAny*& aIfPtr, TUid aIfaceUid, TECamImplFactoryParam aParam1) const;
       
   613 	TInt GetImpl2(TAny*& aIfPtr, TUid aIfaceUid, TECamImplFactoryParam aParam1, TECamImplFactoryParam aParam2) const;
       
   614 	void Release();
       
   615 	
       
   616 private:
       
   617 	CHistogramFactoryForImage();
       
   618 	void ConstructL(CCamImageCapture& aCamImageCaptureImpl);
       
   619 
       
   620 private:
       
   621 	CHistogramImpForImage* iHistogramImpForImage;
       
   622 	mutable TBool iIsHistogramImpPassed;
       
   623 	};
       
   624 	
       
   625 //	
       
   626 //histogram impl for DirectViewFinder
       
   627 class CHistogramImpForDirectViewFinder : public CBase, public MCameraV2Histogram 
       
   628 	{
       
   629 
       
   630 public:
       
   631 	static CHistogramImpForDirectViewFinder* NewL(CCamUnitTestPlugin& aOwner, CCamV2DirectViewFinder& aCamV2DirectViewFinderImpl);
       
   632 	~CHistogramImpForDirectViewFinder();
       
   633 	
       
   634 	void Release(CCamera::CCameraV2Histogram* aHistogramHandle);
       
   635 	void SetHistogramHandle(CCamera::CCameraV2Histogram* aHistogramHandle);
       
   636 	void GetSupportedHistogramsL(TUint& aSupportedHistogramType) const;
       
   637 	void GetDirectHistogramSupportInfoL(TBool& aIsDirectHistogramSupported) const;
       
   638 	void PrepareClientHistogramL(CCamera::CCameraV2Histogram::THistogramType aType);
       
   639 	void PrepareDirectHistogramL(const CCamera::CCameraV2Histogram::TDirectHistogramParameters& aDirectHistogramParameters);	
       
   640 	void UpdateDirectHistogramPropertiesL(const CCamera::CCameraV2Histogram::TDirectHistogramParameters& aDirectHistogramParameters);
       
   641 	void GetDirectHistogramPropertiesL(CCamera::CCameraV2Histogram::TDirectHistogramParameters& aDirectHistogramParameters) const;
       
   642 	void StartHistogram();
       
   643 	void StopHistogram();
       
   644 	void GetHistogramStateL(TBool& aIsHistogramActive) const;
       
   645 	
       
   646 	inline CCamV2DirectViewFinder& DirectViewFinderImpl() {return iCamV2DirectViewFinderImpl;}
       
   647 	
       
   648 private:
       
   649 	CHistogramImpForDirectViewFinder(CCamUnitTestPlugin& aOwner, CCamV2DirectViewFinder& aCamV2DirectViewFinderImpl);
       
   650 
       
   651 private:
       
   652 	CCamUnitTestPlugin& iOwner;
       
   653 	CCamV2DirectViewFinder& iCamV2DirectViewFinderImpl;
       
   654 	CCamera::CCameraV2Histogram* iHistogramHandle;
       
   655 	};
       
   656 
       
   657 //	
       
   658 //histogram factory for DirectViewFinder
       
   659 class CHistogramFactoryForDirectViewFinder : public CBase, public MImplementationFactory
       
   660 	{
       
   661 public:
       
   662 	static CHistogramFactoryForDirectViewFinder* NewL(CCamV2DirectViewFinder& aCamV2DirectViewFinderImpl);
       
   663 	~CHistogramFactoryForDirectViewFinder();
       
   664 	
       
   665 	TInt GetImpl(TAny*& aIfPtr, TUid aIfaceUid) const;
       
   666 	TInt GetImpl1(TAny*& aIfPtr, TUid aIfaceUid, TECamImplFactoryParam aParam1) const;
       
   667 	TInt GetImpl2(TAny*& aIfPtr, TUid aIfaceUid, TECamImplFactoryParam aParam1, TECamImplFactoryParam aParam2) const;
       
   668 	void Release();
       
   669 	
       
   670 private:
       
   671 	CHistogramFactoryForDirectViewFinder();
       
   672 	void ConstructL(CCamV2DirectViewFinder& aCamV2DirectViewFinderImpl);
       
   673 
       
   674 private:
       
   675 	CHistogramImpForDirectViewFinder* iHistogramImpForDirectViewFinder;
       
   676 	mutable TBool iIsHistogramImpPassed;
       
   677 	};
       
   678 
       
   679 //	
       
   680 //histogram impl for ClientViewFinder
       
   681 class CHistogramImpForClientViewFinder : public CBase, public MCameraV2Histogram 
       
   682 	{
       
   683 
       
   684 public:
       
   685 	static CHistogramImpForClientViewFinder* NewL(CCamUnitTestPlugin& aOwner, CCamClientViewFinder& aCamClientViewFinderImpl);
       
   686 	~CHistogramImpForClientViewFinder();
       
   687 	
       
   688 	void Release(CCamera::CCameraV2Histogram* aHistogramHandle);
       
   689 	void SetHistogramHandle(CCamera::CCameraV2Histogram* aHistogramHandle);
       
   690 	void GetSupportedHistogramsL(TUint& aSupportedHistogramType) const;
       
   691 	void GetDirectHistogramSupportInfoL(TBool& aIsDirectHistogramSupported) const;
       
   692 	void PrepareClientHistogramL(CCamera::CCameraV2Histogram::THistogramType aType);
       
   693 	void PrepareDirectHistogramL(const CCamera::CCameraV2Histogram::TDirectHistogramParameters& aDirectHistogramParameters);	
       
   694 	void UpdateDirectHistogramPropertiesL(const CCamera::CCameraV2Histogram::TDirectHistogramParameters& aDirectHistogramParameters);
       
   695 	void GetDirectHistogramPropertiesL(CCamera::CCameraV2Histogram::TDirectHistogramParameters& aDirectHistogramParameters) const;
       
   696 	void StartHistogram();
       
   697 	void StopHistogram();
       
   698 	void GetHistogramStateL(TBool& aIsHistogramActive) const;
       
   699 	
       
   700 	inline CCamClientViewFinder& ClientViewFinderImpl() {return iCamClientViewFinderImpl;}
       
   701 	inline CCamera::CCameraClientViewFinder& ClientViewFinderHandle() {return ClientViewFinderImpl().ClientViewFinderHandle();}
       
   702 	
       
   703 private:
       
   704 	CHistogramImpForClientViewFinder(CCamUnitTestPlugin& aOwner, CCamClientViewFinder& aCamClientViewFinderImpl);
       
   705 
       
   706 private:
       
   707 	CCamUnitTestPlugin& iOwner;
       
   708 	CCamClientViewFinder& iCamClientViewFinderImpl;
       
   709 	CCamera::CCameraV2Histogram* iHistogramHandle;
       
   710 	};
       
   711 
       
   712 //	
       
   713 //histogram factory for ClientViewFinder		
       
   714 class CHistogramFactoryForClientViewFinder : public CBase, public MImplementationFactory
       
   715 	{
       
   716 public:
       
   717 	static CHistogramFactoryForClientViewFinder* NewL(CCamClientViewFinder& aCamClientViewFinderImpl);
       
   718 	~CHistogramFactoryForClientViewFinder();
       
   719 	
       
   720 	TInt GetImpl(TAny*& aIfPtr, TUid aIfaceUid) const;
       
   721 	TInt GetImpl1(TAny*& aIfPtr, TUid aIfaceUid, TECamImplFactoryParam aParam1) const;
       
   722 	TInt GetImpl2(TAny*& aIfPtr, TUid aIfaceUid, TECamImplFactoryParam aParam1, TECamImplFactoryParam aParam2) const;
       
   723 	void Release();
       
   724 	
       
   725 private:
       
   726 	CHistogramFactoryForClientViewFinder();
       
   727 	void ConstructL(CCamClientViewFinder& aCamClientViewFinderImpl);
       
   728 
       
   729 private:
       
   730 	CHistogramImpForClientViewFinder* iHistogramImpForClientViewFinder;
       
   731 	mutable TBool iIsHistogramImpPassed;
       
   732 	};
       
   733 
       
   734 //	
       
   735 //histogram impl for image snapshot
       
   736 class CHistogramImpForImageSnapshot : public CBase, public MCameraV2Histogram 
       
   737 	{
       
   738 
       
   739 public:
       
   740 	static CHistogramImpForImageSnapshot* NewL(CCamUnitTestPlugin& aOwner, CCamSnapshotForImage& aCamSnapshotForImageImpl);
       
   741 	~CHistogramImpForImageSnapshot();
       
   742 	
       
   743 	void Release(CCamera::CCameraV2Histogram* aHistogramHandle);
       
   744 	void SetHistogramHandle(CCamera::CCameraV2Histogram* aHistogramHandle);
       
   745 	void GetSupportedHistogramsL(TUint& aSupportedHistogramType) const;
       
   746 	void GetDirectHistogramSupportInfoL(TBool& aIsDirectHistogramSupported) const;
       
   747 	void PrepareClientHistogramL(CCamera::CCameraV2Histogram::THistogramType aType);
       
   748 	void PrepareDirectHistogramL(const CCamera::CCameraV2Histogram::TDirectHistogramParameters& aDirectHistogramParameters);	
       
   749 	void UpdateDirectHistogramPropertiesL(const CCamera::CCameraV2Histogram::TDirectHistogramParameters& aDirectHistogramParameters);
       
   750 	void GetDirectHistogramPropertiesL(CCamera::CCameraV2Histogram::TDirectHistogramParameters& aDirectHistogramParameters) const;
       
   751 	void StartHistogram();
       
   752 	void StopHistogram();
       
   753 	void GetHistogramStateL(TBool& aIsHistogramActive) const;
       
   754 	
       
   755 	inline CCamSnapshotForImage& CamSnapshotForImageImpl() {return iCamSnapshotForImageImpl;}
       
   756 	inline CCamera::CCameraV2Histogram* HistogramHandle() {return iHistogramHandle;}
       
   757 	inline CCamImageCapture& CamImageCaptureImpl() {return CamSnapshotForImageImpl().CamImageCaptureImpl();}
       
   758 	inline CCamera::CCameraImageCapture& CameraImageCapture() {return *(CamImageCaptureImpl().CameraImageCapture());}
       
   759 	
       
   760 private:
       
   761 	CHistogramImpForImageSnapshot(CCamUnitTestPlugin& aOwner, CCamSnapshotForImage& aCamSnapshotForImageImpl);
       
   762 
       
   763 private:
       
   764 	CCamUnitTestPlugin& iOwner;
       
   765 	CCamSnapshotForImage& iCamSnapshotForImageImpl;
       
   766 	CCamera::CCameraV2Histogram* iHistogramHandle;
       
   767 	};	
       
   768 
       
   769 //	
       
   770 //histogram factory for image snapshot
       
   771 class CHistogramFactoryForImageSnapshot : public CBase, public MImplementationFactory
       
   772 	{
       
   773 public:
       
   774 	static CHistogramFactoryForImageSnapshot* NewL(CCamSnapshotForImage& aCamSnapshotForImageImpl);
       
   775 	~CHistogramFactoryForImageSnapshot();
       
   776 	
       
   777 	TInt GetImpl(TAny*& aIfPtr, TUid aIfaceUid) const;
       
   778 	TInt GetImpl1(TAny*& aIfPtr, TUid aIfaceUid, TECamImplFactoryParam aParam1) const;
       
   779 	TInt GetImpl2(TAny*& aIfPtr, TUid aIfaceUid, TECamImplFactoryParam aParam1, TECamImplFactoryParam aParam2) const;
       
   780 	void Release();
       
   781 	
       
   782 private:
       
   783 	CHistogramFactoryForImageSnapshot();
       
   784 	void ConstructL(CCamSnapshotForImage& aCamSnapshotForImageImpl);
       
   785 
       
   786 private:
       
   787 	CHistogramImpForImageSnapshot* iHistogramImpForImageSnapshot;
       
   788 	mutable TBool iIsHistogramImpPassed;
       
   789 	};
       
   790 
       
   791 //	
       
   792 //img proc impl for still images.
       
   793 class CCamImgProcImpForImage : public CBase, public MCameraImageProcessing
       
   794 	{
       
   795 public:
       
   796 	static CCamImgProcImpForImage* NewL(CCamUnitTestPlugin& aOwner);
       
   797 	~CCamImgProcImpForImage();
       
   798 	
       
   799 	void Release();
       
   800 	void GetSupportedTransformationsL(RArray<TUid>& aTransformations) const;
       
   801 	void GetActiveTransformationsL(RArray<TUid>& aTransformations) const;
       
   802 	void GetTransformationSupportedValuesL(TUid aTransformation, RArray<TInt>& aValues, TValueInfo& aInfo) const;
       
   803 	TInt TransformationValue(TUid aTransformation) const;
       
   804 	TInt GetTransformationValue(TUid aTransformation, TInt& aTransformationValue) const;
       
   805 	void SetTransformationValue(TUid aTransformation, TInt aValue);
       
   806 	void GetActiveTransformSequenceL(RArray<TUid>& aTransformSequence) const;
       
   807 	void SetActiveTransformSequenceL(RArray<TUid>& aTransformSequence);
       
   808 	void SetSourceRect(const TRect& aRect);
       
   809 	void GetSourceRect(TRect& aRect) const;
       
   810 
       
   811 private:
       
   812 	CCamImgProcImpForImage(CCamUnitTestPlugin& aOwner);
       
   813 	
       
   814 private:
       
   815 	CCamUnitTestPlugin& iOwner;
       
   816 	};
       
   817 
       
   818 //	
       
   819 //img proc factory for still images.
       
   820 class CImgProcFactoryForImage : public CBase, public MImplementationFactory
       
   821 	{
       
   822 public:
       
   823 	static CImgProcFactoryForImage* NewL(CCamImageCapture& aCamImageCaptureImpl, CCamImgProcImpForImage* aCamImgProcImpForImage);
       
   824 	~CImgProcFactoryForImage();
       
   825 	
       
   826 	TInt GetImpl(TAny*& aIfPtr, TUid aIfaceUid) const;
       
   827 	TInt GetImpl1(TAny*& aIfPtr, TUid aIfaceUid, TECamImplFactoryParam aParam1) const;
       
   828 	TInt GetImpl2(TAny*& aIfPtr, TUid aIfaceUid, TECamImplFactoryParam aParam1, TECamImplFactoryParam aParam2) const;
       
   829 	void Release();
       
   830 	
       
   831 private:
       
   832 	CImgProcFactoryForImage();
       
   833 	void ConstructL(CCamImageCapture& aCamImageCaptureImpl, CCamImgProcImpForImage* aCamImgProcImpForImage);
       
   834 
       
   835 private:
       
   836 	CCamImgProcImpForImage* iCamImgProcImpForImage;
       
   837 	mutable TBool iIsImgProcImpPassed;
       
   838 	};
       
   839 
       
   840 #endif // EXTENDEDFUNCTIONALITY_H