mmplugins/cameraplugins/source/webcamera/ecamwebcameraplugin.h
branchRCL_3
changeset 9 9ae0fe04e757
child 64 92a82bc706f7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmplugins/cameraplugins/source/webcamera/ecamwebcameraplugin.h	Thu Mar 25 11:21:36 2010 +0900
@@ -0,0 +1,1027 @@
+/*
+* Copyright (c) 2010 ISB.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* ISB - Initial contribution
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef ECAMWEBCAMERAPLUGIN_H
+#define ECAMWEBCAMERAPLUGIN_H
+
+#include <w32std.h>
+#include <bitdev.h>
+#include <ecam/ecamplugin.h>
+#include <ecam/ecaminfoplugin.h>
+#include <webcamera_driver.h>
+
+
+class CWebCameraBuffer;
+class CWebCameraActive;
+class CWebCameraVfActive;
+class CWebCameraAdvSet;
+
+/**  Min of Camera Zoom */
+const TInt KMinTestCameraZoom = -3;
+/**  Max of Camera Zoom */
+const TInt KMaxTestCameraZoom = 3;
+/**  Max of Camera Digital Zoom Factor */
+const TReal32 KMaxTestCameraDigitalZoomFactor = 1.0;
+/**  Max of Camera Digital Zoom */
+const TInt KMaxTestCameraDigitalZoom = 0;
+/**  Size of Viewfinder buffer, Capture buffer */
+const TInt KMaxBufSize = 1024 * 100;
+
+
+// Callback Class of WebCameraActive
+class MWebCameraActiveCallBack
+	{
+public:
+	virtual void ReserveCallBack(TInt aError) = 0;
+	virtual void PowerOnCallBack(TInt aError) = 0;
+	virtual void ImageCaptureCallBackL(TInt aError) = 0;
+	};
+
+// Callback Class of WebCameraVfActive
+class MWebCameraVfActiveCallBack
+	{
+public:
+	virtual void ViewFinderCallBack(TInt aError) = 0;
+	};
+
+/**
+ *  Perform WebCamera function.
+ */
+class CWebCamera : public CCameraPlugin
+				 , public MWebCameraActiveCallBack
+				 , public MWebCameraVfActiveCallBack
+	{
+public:
+	static CWebCamera* NewL();
+	~CWebCamera();
+	
+protected:
+
+	//from CCameraPlugin
+	/** 
+	from CCameraPlugin
+	
+	A call to one of the factory functions firstly loads the plugin, followed by a
+	call to this function to complete construction.
+	
+	Creates an object representing a camera.
+	
+	@param  aObserver
+	        Reference to class derived from MCameraObserver2 designed to receive
+	        notification of asynchronous event completion.
+	@param	aCameraIndex
+	        Index from 0 to CamerasAvailable()-1 inclusive specifying the
+	        camera device to use.
+	@return Pointer to a fully constructed CCamera object. Ownership is passed
+	        to the caller.
+
+	@leave  May leave with KErrNoMemory or KErrNotSupported if aCameraIndex is
+	        out of range.	
+	*/
+	void Construct2L(MCameraObserver& aObserver,TInt aCameraIndex);
+
+	/** 
+	from CCameraPlugin
+
+	A call to one of the factory functions firstly loads the plugin, followed by a
+	call to this function to complete construction.
+	
+	Duplicates the original camera object for use by, for example, multimedia systems.
+
+	May leave with KErrNoMemory or KErrNotFound if aCameraHandle is not valid.
+
+	@param  aObserver
+	        Reference to an observer.
+	@param  aCameraHandle Handle of an existing camera object.
+
+	@return Duplicate of the original camera object. 
+	*/
+	void Construct2DupL(MCameraObserver& aObserver,TInt aCameraHandle);
+
+    /** 
+	from CCameraPlugin
+
+    A call to one of the factory functions firstly loads the plugin, followed by a
+	call to this function to complete construction.
+    
+	Creates an object representing a camera.
+	
+	@param  aObserver
+	        Reference to class derived from MCameraObserver2 designed to receive
+	        notification of asynchronous event completion.
+	@param	aCameraIndex
+	        Index from 0 to CamerasAvailable()-1 inclusive specifying the
+	        camera device to use.
+	@param	aPriority
+	        Value from -100 to 100 indicating relative priority of client to
+	        use camera.
+
+	@return Pointer to a fully constructed CCamera object. Ownership is passed
+	        to the caller.
+
+	@leave  May leave with KErrNoMemory or KErrNotSupported if aCameraIndex is
+	        out of range.
+	*/
+	void Construct2L(MCameraObserver2& aObserver,TInt aCameraIndex,TInt aPriority);
+
+	/** 
+	from CCameraPlugin
+
+	Duplicates the original camera object for use by, for example, multimedia systems.
+
+	@leave  KErrNoMemory if out of memory.
+	@leave  KErrNotFound if aCameraHandle is not valid.	   
+	@leave  KErrPermissionDenied if the application does not have
+	        the UserEnvironment capability.
+
+	@param  aObserver
+	        Reference to an observer.
+	@param  aCameraHandle Handle of an existing camera object.
+
+	@return Duplicate of the original camera object. 
+	
+	@capability	UserEnvironment
+				An application that creates a CCamera object must have
+				the UserEnvironment capability.
+				
+	@note   Applications using this method to create camera object may not receive enums/uids added in future(after being baselined). 
+			To receive them, they should rather use New2L() or NewDuplicate2L(), in which case, they should prepare 
+			themselves to receive unrecognised values.
+	*/
+	void Construct2DupL(MCameraObserver2& aObserver,TInt aCameraHandle);
+
+	// from CCamera
+	/**
+	from CCamera
+	
+	Gets information about the camera device.
+
+	@param  aInfo 
+	        On return, information about the camera device. See TCameraInfo. 
+	*/
+	void CameraInfo(TCameraInfo& aInfo) const;
+	
+	/** 
+	from CCamera
+
+	Asynchronous function that performs any required initialisation and reserves
+	the camera for exclusive use.
+
+	Calls MCameraObserver:: ReserveComplete() when complete. 
+	*/
+	void Reserve();
+
+	/** 
+	from CCamera
+
+	De-initialises the camera, allowing it to be used by other clients. 
+	*/
+	void Release();
+
+
+	/** 
+	from CCamera
+
+	Asynchronous method to switch on camera power.
+
+	User must have successfully called Reserve() prior to calling this function.
+
+	Calls MCameraObserver::PowerOnComplete() when power on is complete. 
+	*/
+	void PowerOn();
+
+	/** 
+	from CCamera
+
+	Synchronous function for switching off camera power. 
+	*/
+	void PowerOff();
+
+
+	/**
+	from CCamera
+
+	Gets the device-unique handle of this camera object.
+
+	@return  The device-unique handle of this camera object. 
+	*/
+	TInt Handle();
+
+
+	/** 
+	from CCamera
+
+	Sets the zoom factor.
+
+	This must be in the range of TCameraInfo::iMinZoom to TCameraInfo::iMaxZoom
+	inclusive. May leave with KErrNotSupported if the specified zoom factor is
+	out of range.
+
+	@param aZoomFactor 
+	       Required zoom factor.
+	*/
+	void SetZoomFactorL(TInt aZoomFactor = 0);
+
+
+	/** 
+	from CCamera
+
+	Gets the currently set zoom factor.
+
+	@return  The currently set zoom factor.
+	*/
+	TInt ZoomFactor() const;
+
+	/** 
+	from CCamera
+
+	Sets the digital zoom factor.
+
+	This must be in the range of 0 to TCameraInfo::iMaxDigitalZoom inclusive.
+
+	May leave with KErrNotSupported if the zoom factor is out of range.
+
+	@param  aDigitalZoomFactor
+	        The required digital zoom factor. 
+	*/
+	void SetDigitalZoomFactorL(TInt aDigitalZoomFactor = 0);
+
+
+	/** 
+	from CCamera
+
+	Gets the currently set digital zoom factor.
+
+	@return  The currently set digital zoom factor. 
+	*/
+	TInt DigitalZoomFactor() const;
+
+
+	/**
+	from CCamera
+
+	Sets the contrast adjustment of the device.
+
+	This must be in the range of -100 to +100 or EContrastAuto. May leave with
+	KErrNotSupported if the specified contrast value is out of range.
+
+	@param  aContrast 
+	        Required contrast value. See TCameraInfo::iContrastSupported 
+	*/
+	void SetContrastL(TInt aContrast);
+
+
+	/** 
+	from CCamera
+
+	Gets the currently set contrast value.
+
+	@return  The currently set contrast value.
+	*/
+	TInt Contrast() const;
+
+	/** 
+	from CCamera
+
+	Sets the brightness adjustment of the device.
+
+	No effect if this is not supported, see TCameraInfo::iBrightnessSupported.
+
+	This must be in the range of -100 to +100 or EBrightnessAuto. May leave
+	with KErrNotSupported if the brightness adjustment is out of range.
+
+	@param  aBrightness
+	        The required brightness adjustment. 
+	*/
+	void SetBrightnessL(TInt aBrightness);
+
+	/** 
+	from CCamera
+
+	Gets the currently set brightness adjustment value.
+
+	@return  The currently set brightness adjustment value. 
+	*/
+	TInt Brightness() const;
+
+	/** 
+	from CCamera
+
+	Sets the flash mode.
+
+	No effect if this is not supported, see TCameraInfo::iFlashModesSupported.
+
+	May leave with KErrNotSupported if the specified flash mode is invalid.
+
+	@param  aFlash
+	        The required flash mode. 
+	*/
+	void SetFlashL(TFlash aFlash = EFlashNone);
+
+	/** 
+	from CCamera
+
+	Gets the currently set flash mode.
+
+	@return  The currently set flash mode. 
+	@note	if CCamera::New2L() or CCamera::NewDuplicate2L() is not used to create CCamera object, it is assumed that 
+    application is not prepared to receive extra added enum values (unrecognised). So, any extra enum value(unrecognised)
+    (set in the ECAM implementation because of sharing clients) should not be returned from the ECAM implementation.
+    To receive extra added enum values, application should rather use CCamera::New2L() or CCamera::NewDuplicate2L() 
+    to create camera object. ECAM implementation, after verifying this,(by checking version no.) may send new values, if set.
+    In this case, application is assumed to be prepared to receive unrecognised enum values.
+    
+    @see CCamera::CCameraAdvancedSettings::FlashMode()	
+	*/
+	TFlash Flash() const;
+
+	/** 
+	from CCamera
+
+	Sets the exposure adjustment of the device.
+
+	No effect if this is not supported, see CameraInfo::iExposureModesSupported.
+
+	May leave with KErrNotSupported if the specified exposure adjustment is invalid.
+
+	@param  aExposure
+	        The required exposure adjustment. 
+	*/
+	void SetExposureL(TExposure aExposure = EExposureAuto);
+
+	/** 
+	from CCamera
+
+	Gets the currently set exposure setting value.
+
+	@return  The currently set exposure setting value. 
+	*/
+	TExposure Exposure() const;
+
+	/** 
+	from CCamera
+
+	Sets the white balance adjustment of the device.
+
+	No effect if this is not supported, see TCameraInfo::iWhiteBalanceModesSupported.
+
+	@param  aWhiteBalance
+	        The required white balance adjustment.
+
+	@leave  KErrNotSupported if the specified white balance adjustment
+	        is invalid.
+	*/
+	void SetWhiteBalanceL(TWhiteBalance aWhiteBalance = EWBAuto);
+
+	/** 
+	from CCamera
+
+	Gets the currently set white balance adjustment value.
+
+	@return  The currently set white balance adjustment value.
+	
+	@note	if CCamera::New2L() or CCamera::NewDuplicate2L() is not used to create CCamera object, it is assumed that 
+    application is not prepared to receive extra added enum values (unrecognised). So, any extra enum value(unrecognised)
+    (set in the ECAM implementation because of sharing clients) should not be returned from the ECAM implementation.
+    To receive extra added enum values, application should rather use CCamera::New2L() or CCamera::NewDuplicate2L() 
+    to create camera object. ECAM implementation, after verifying this,(by checking version no.) may send new values, if set.
+    In this case, application is assumed to be prepared to receive unrecognised enum values.
+    Refer  CCamera::CCameraAdvancedSettings::WhiteBalanceMode() implementation
+    
+    @see CCamera::CCameraAdvancedSettings::WhiteBalanceMode()
+    */
+	TWhiteBalance WhiteBalance() const;
+
+	/** 
+	from CCamera
+
+	Starts transfer of view finder data to the given portion of the screen using
+	direct screen access.
+
+	The aScreenRect parameter is in screen co-ordinates and may be modified if,
+	eg, the camera requires the destination to have a certain byte alignment, etc.
+
+    @param  aWs 
+	        Window server session.
+	@param  aScreenDevice 
+	        Screen device.
+	@param  aWindow 
+	        Displayable window.
+	@param  aScreenRect 
+	        Portion of the screen to which view finder data is to be
+	        transferred. This is in screen co-ordinates and may be modified if, for example,
+	        the camera requires the destination to have a certain byte alignment.
+
+	@leave  KErrNotReady if PowerOn() has either not
+	        been called, or has not yet completed.
+	
+	@note   This method is assumed to be meant for default display only. KECamDefaultViewFinderHandle should be used to 
+			refer viewfinders started using CCamera methods. 
+	
+	@see	CCamera::CCameraV2DirectViewFinder
+	*/
+	void StartViewFinderDirectL(RWsSession& aWs,CWsScreenDevice& aScreenDevice,RWindowBase& aWindow,TRect& aScreenRect);
+
+	/** 
+	from CCamera
+
+	Starts transfer of view finder data to the given portion of the screen using
+	direct screen access and also clips to the specified portion of the screen.
+
+	The view finder has the same size and position as aScreenRect but is only
+	visible in the intersection of aScreenRect and aClipRect. May leave with KErrNotSupported
+	or KErrNotReady if Reserve() has not been called, or has not yet completed.
+
+	@param  aWs 
+	        Window server session.
+	@param  aScreenDevice 
+	        Screen device.
+	@param  aWindow 
+	        Displayable window.
+	@param  aScreenRect 
+	        Portion of the screen to which view finder data is to be
+	        transferred. This is in screen co-ordinates and may be modified if, for example,
+	        the camera requires the destination to have a certain byte alignment.
+	@param  aClipRect
+	        The rectangle to which the screen will be clipped.
+
+    @leave  KErrNotReady if PowerOn() hasn't been called successfully. 
+    
+    @note   This method is assumed to be meant for default display only. KECamDefaultViewFinderHandle should be used to 
+    		refer viewfinders started using CCamera methods.
+	
+	@see	CCamera::CCameraClientViewFinder
+	*/
+	void StartViewFinderDirectL(RWsSession& aWs,CWsScreenDevice& aScreenDevice,RWindowBase& aWindow,TRect& aScreenRect,TRect& aClipRect);
+
+	/** 
+	from CCamera
+
+	Starts transfer of view finder data.
+
+	Bitmaps are returned by MCameraObserver::ViewFinderFrameReady().
+
+	@param  aSize 
+	        On return, the size used.
+	@leave  KErrNotReady if PowerOn() has not been called, or has not yet completed.
+	
+	@note   This method is assumed to be meant for default display only. 
+	
+	@see	CCamera::CCameraClientViewFinder 
+	*/
+	void StartViewFinderBitmapsL(TSize& aSize);	
+
+	/** 
+	from CCamera
+
+	Starts transfer of view finder data and clips the bitmap to the specified clip
+	rectangle.
+
+	The bitmap is the size of the intersection of aSize and aClipRect, not simply
+	aSize padded with white space.
+
+	@param  aSize
+	        On return, the size used.
+	@param  aClipRect 
+	        Required clip rectangle. May be modified if, for example,
+	        the camera only supports certain byte alignments.
+
+	@leave  KErrInUse if Reserve() hasn't been called successfully.
+	@leave  KErrNotReady if PowerOn() hasn't been called successfully.
+	
+	@note   This method is assumed to be meant for default display only. 
+	
+	@see	CCamera::CCameraClientViewFinder
+	*/
+	void StartViewFinderBitmapsL(TSize& aSize,TRect& aClipRect);
+
+	/** 
+	from CCamera
+
+	Starts transfer of view finder data.
+
+	Picture data is returned by MCameraObserver2::ViewFinderReady().
+
+	@param  aImageFormat 
+	        The image format requested by the client.
+	@param  aSize 
+	        On return, the size used.
+	@leave  KErrNotSupported 
+	@leave  KErrNotReady if Reserve() has not been
+	        called, or has not yet completed. 
+	
+	@note   This method is assumed to be meant for default display only. KECamDefaultViewFinderHandle should be used to 
+			refer viewfinders started using CCamera methods.
+	
+	@see	CCamera::CCameraClientViewFinder
+	*/
+	void StartViewFinderL(TFormat aImageFormat,TSize& aSize);
+
+	/** 
+	from CCamera
+
+	Starts transfer of view finder data and clips the picture to the specified clip
+	rectangle. Picture data is returned by MCameraObserver2::ViewFinderReady().
+
+	The picture is the size of the intersection of aSize and aClipRect, not simply
+	aSize padded with white space.
+
+	@param  aImageFormat 
+	        The image format.
+	@param  aSize
+	        On return, the size used.
+	@param  aClipRect 
+	        Required clip rectangle. May be modified if, for example,
+	        the camera only supports certain byte alignments.
+
+	@leave  KErrInUse if Reserve() hasn't been called successfully,
+	@leave  KErrNotReady if PowerOn() hasn't been called successfully.
+	
+	@note   This method is assumed to be meant for default display only. KECamDefaultViewFinderHandle should be used to 
+			refer viewfinders started using CCamera methods.
+	
+	@see	CCamera::CCameraClientViewFinder
+	*/
+	void StartViewFinderL(TFormat aImageFormat,TSize& aSize,TRect& aClipRect);
+
+	/** 
+	Stops transfer of view finder data to the screen. 
+	
+	@note   This method is assumed to be meant for default display only. KECamDefaultViewFinderHandle should be used to 
+			refer viewfinders started using CCamera methods.
+	
+	@see	CCamera::CCameraV2DirectViewFinder
+	@see	CCamera::CCameraClientViewFinder
+	*/
+	void StopViewFinder();
+
+	/** 
+	from CCamera
+
+	Queries whether the view finder is active.
+
+	@return  ETrue if the view finder is active. EFalse if the view finder is not
+	         active. 
+	         
+	@note   This method is assumed to be meant for default display only. KECamDefaultViewFinderHandle should be used to 
+			refer viewfinders started using CCamera methods.
+	
+	@see	CCamera::CCameraV2DirectViewFinder
+	@see	CCamera::CCameraClientViewFinder
+	*/
+	TBool ViewFinderActive() const;
+
+	/** 
+	from CCamera
+
+	Sets whether view finder mirroring is on.
+
+	Used to switch between what the camera sees and what you would see if the
+	device were a mirror.
+
+	@param  aMirror 
+	        ETrue to set mirroring on, EFalse to set mirroring off.
+
+	@leave  KErrNotSupported.
+	
+	@note   This method is assumed to be meant for default display only. KECamDefaultViewFinderHandle should be used to 
+			refer viewfinders started using CCamera methods.
+	
+	@see	CCamera::CCameraV2DirectViewFinder
+	@see	CCamera::CCameraClientViewFinder
+	*/
+	void SetViewFinderMirrorL(TBool aMirror);
+
+	/** 
+	from CCamera
+
+	Gets whether view finder mirroring is active.
+
+	@return  ETrue if mirroring is set, EFalse if mirroring is not set. 
+	
+	@note   This method is assumed to be meant for default display only. KECamDefaultViewFinderHandle should be used to 
+			refer viewfinders started using CCamera methods.
+	
+	@see	CCamera::CCameraV2DirectViewFinder
+	@see	CCamera::CCameraClientViewFinder
+	*/
+	TBool ViewFinderMirror() const;
+
+	/** 
+	from CCamera
+
+	Performs setup and allocation of memory.
+
+	Called prior to calling CaptureImage() to keep the latency of that function
+	to a minimum.
+
+	Needs to be called only once for multiple CaptureImage() calls. May leave
+	with KErrNotSupported or KErrNoMemory or KErrInUse or KErrNotReady.
+
+	The specified image format must be one of the formats supported
+	(see TCameraInfo::iImageFormatsSupported).
+
+	The specified size index must be in the range of 0 to TCameraInfo::iNumImageSizesSupported-1
+	inclusive.
+
+	@param  aImageFormat 
+	        The image format.
+	@param  aSizeIndex 
+	        Size index.
+
+	@leave  KErrNotSupported
+	@leave  KErrNoMemory
+	@leave  KErrNotReady if PowerOn() hasn't been called successfully.
+	
+	@see 	CCamera::CCameraPreImageCaptureControl::PrepareImageCapture(TPrepareImageParameters aPrepareImageParameters)
+	*/
+	void PrepareImageCaptureL(TFormat aImageFormat,TInt aSizeIndex);
+
+	/** 
+	from CCamera
+
+	Performs setup and allocation of memory and clips the image to the specified
+	rectangle.
+
+	No effect unless TCameraInfo::iImageClippingSupported is set to ETrue. The
+	image captured is the intersection of aClipRect and the rectangle from (0,0)
+	to aSize. Needs to be called only once for multiple CaptureImage() calls.
+	May leave with KErrNotSupported or KErrNoMemory.
+
+	The specified image format must be one of the formats supported (see TCameraInfo::iImageFormatsSupported).
+
+	The specified size index must be in the range of 0 to TCameraInfo::iNumImageSizesSupported-1
+	inclusive.
+
+	@param  aImageFormat 
+	        The image format.
+	@param  aSizeIndex 
+	        Size index.
+	@param  aClipRect
+	        The rectangle to which the image is to be clipped.
+
+	@leave   KErrNotSupported
+	@leave   KErrNoMemory
+	@leave   KErrInUse if Reserve() hasn't been called successfully
+	@leave   KErrNotReady if PowerOn()
+	         hasn't been called successfully.
+	
+	@see 	CCamera::CCameraPreImageCaptureControl::PrepareImageCapture(TPrepareImageParameters aPrepareImageParameters)
+	*/
+	void PrepareImageCaptureL(TFormat aImageFormat,TInt aSizeIndex,const TRect& aClipRect);
+
+	/** 
+	from CCamera
+
+	Asynchronously performs still image capture.
+
+	Calls MCameraObserver::ImageReady() when complete. 
+	
+	@see CCamera::CCameraImageCapture
+	@see CCamera::CCameraPreImageCaptureControl
+	*/
+	void CaptureImage();
+
+	/** 
+	from CCamera
+
+	Cancels the asynchronous still image capture. 
+	
+	@see CCamera::CCameraImageCapture
+	*/
+	void CancelCaptureImage();
+
+	/** 
+	from CCamera
+
+	Enumerates through the available image capture sizes, based on the specified
+	size index and format
+
+	The size index must be in the range 0 to TCameraInfo::iNumImageSizesSupported-1
+	inclusive.
+
+	@param  aSize 
+	        Image size.
+	@param  aSizeIndex 
+	        Size index.
+	@param  aFormat 
+	        The image format.
+	*/
+	void EnumerateCaptureSizes(TSize& aSize,TInt aSizeIndex,TFormat aFormat) const;
+
+	/** 
+	from CCamera
+
+	Prepares for video capture.
+
+	Performs setup and allocation of memory prior to calling StartVideoCapture()
+	to keep the latency of that function to a minimum.
+
+	May leave with KErrNotSupported or KErrNoMemory.
+
+	@param  aFormat 
+	        Format must be one of the video frame formats supported (see
+	        TCameraInfo::iVideoFrameFormatsSupported).
+	@param  aSizeIndex 
+	        Size index  must be in the range 0 to TCameraInfo::iNumVideoFrameSizesSupported-1
+	        inclusive.
+	@param  aRateIndex 
+	        The rate must be in the range 0 to TCameraInfo::iNumVideoFrameRatesSupported-1
+	        inclusive.
+	@param  aBuffersToUse 
+	        The number of discrete buffers to use.
+	@param  aFramesPerBuffer 
+	        How large the buffers are to be. Must be less than
+	        or equal to TCameraInfo::iMaxFramesPerBufferSupported. One buffer is returned
+	        to MCameraObserver::FrameBufferReady() at a time.
+
+	@leave  May leave with KErrNotSupported, KErrNoMemory, or KErrNotReady if PowerOn() 
+			hasn't been called successfully.
+	
+	@see 	CCamera::CCameraVideoCaptureControl::PrepareVideoCapture(const TPrepareVideoParameters& aPrepareVideoParameters)
+	*/
+	void PrepareVideoCaptureL(TFormat aFormat,TInt aSizeIndex,TInt aRateIndex,TInt aBuffersToUse,TInt aFramesPerBuffer);
+
+	/** 
+	from CCamera
+
+	Prepares for video capture and clips the frames to the given rectangle.
+
+	Performs setup and allocation of memory prior to calling StartVideoCapture()
+	to keep the latency of that function to a minimum.
+
+	May leave with KErrNotSupported or KErrNoMemory.
+
+	@param  aFormat 
+	        Format must be one of the video frame formats supported (see
+	        TCameraInfo::iVideoFrameFormatsSupported).
+	@param  aSizeIndex 
+	        Size index must be in the range 0 to TCameraInfo::iNumVideoFrameSizesSupported-1
+	        inclusive.
+	@param  aRateIndex 
+	        The rate must be in the range 0 to TCameraInfo::iNumVideoFrameRatesSupported-1
+	        inclusive.
+	@param  aBuffersToUse 
+	        The number of discrete buffers to use.
+	@param  aFramesPerBuffer 
+	        How large the buffers are to be. Must be less than
+	        or equal to TCameraInfo::iMaxFramesPerBufferSupported. One buffer is returned
+	        to MCameraObserver::FrameBufferReady() at a time.
+	@param  aClipRect 
+	        The rectangle to which the image is to be clipped.
+	@leave  KErrNotSupported
+	@leave  KErrNoMemory, 
+	@leave  KErrInUse if Reserve() hasn't been called successfully
+	@leave  KErrNotReady if PowerOn() hasn't been called successfully.
+
+	@see 	CCamera::CCameraVideoCaptureControl::PrepareVideoCapture(const TPrepareVideoParameters& aPrepareVideoParameters)
+	*/
+	void PrepareVideoCaptureL(TFormat aFormat,TInt aSizeIndex,TInt aRateIndex,TInt aBuffersToUse,TInt aFramesPerBuffer,const TRect& aClipRect);
+
+	/** 
+	from CCamera
+
+	Starts capturing video.
+
+	Calls MCameraObserver::FrameBufferReady() when each buffer has been filled
+	with the required number of frames, as set by PrepareVideoCaptureL(). 
+	*/
+	void StartVideoCapture();
+
+	/** 
+	from CCamera
+
+	Stops video capture. 
+	*/
+	void StopVideoCapture();
+
+	/** 
+	from CCamera
+
+	Tests whether video capture is active.
+
+	@return  ETrue if video capture is active. EFalse if video capture is not active 
+	*/
+	TBool VideoCaptureActive() const;
+
+	/** 
+	from CCamera
+
+	Enumerates through the available video frame sizes, based on the specified
+	size index and format.
+
+	@param  aSize 
+	        On return the available video frame sizes. Sizes should be returned
+	        in order, largest first, so clients do not have to iterate through every one.
+	@param  aSizeIndex 
+	        Size index. Must be in the range 0 to TCameraInfo::iNumVideoFrameSizesSupported-1
+	        inclusive
+	@param  aFormat 
+	        Image format. 
+	*/
+	void EnumerateVideoFrameSizes(TSize& aSize,TInt aSizeIndex,TFormat aFormat) const;
+
+	/** 
+	from CCamera
+
+	Enumerates through the available video frame rates, based on the specified
+	rate index, video frame format, size index and exposure mode.
+
+	@param  aRate 
+	        On return, the available video frame rates. Some rates may not
+	        be available due to, for example, current flash mode setting. In those cases
+	        a rate of 0 will be returned. Rates should be returned in order, highest first,
+	        so clients do not have to iterate through every one.
+	@param  aRateIndex 
+	        The rate index. Must be in the range 0 to TCameraInfo::iNumVideoFrameRatesSupported-1
+	        inclusive.
+	@param  aFormat 
+	        The format.
+	@param  aSizeIndex 
+	        The size index.
+	@param  aExposure 
+	        The exposure mode. 
+	*/
+	void EnumerateVideoFrameRates(TReal32& aRate,TInt aRateIndex,TFormat aFormat,TInt aSizeIndex,TExposure aExposure = EExposureAuto) const;
+
+	/** 
+	from CCamera
+
+	Gets the frame size currently in use.
+
+	@param  aSize 
+	        The frame size currently in use. 
+	*/
+	void GetFrameSize(TSize& aSize) const;
+
+	/** 
+	from CCamera
+
+	Gets the frame rate currently in use.
+
+	@return  The frame rate currently in use. 
+	*/
+	TReal32 FrameRate() const;
+
+	/** 
+	from CCamera
+
+	Gets the number of buffers currently in use.
+
+	@return  The number of buffers currently in use. 
+	*/
+	TInt BuffersInUse() const;
+
+	/** 
+	from CCamera
+
+	Gets the number of frames per buffer currently in use.
+
+	@return  The number of frames per buffer currently in use. 
+	*/
+	TInt FramesPerBuffer() const;
+
+	/** 
+	from CCamera
+
+	Sets the quality value to use if jpeg is a supported image for video format.
+
+	Ignored if jpeg is not a supported image for video format.
+
+	@param  aQuality
+	        The quality value to use, clamped to the range 1 to 100.
+	        
+	@see	CCamera::CCameraPreImageCaptureControl::TPrepareImageParameters::iImageMaxMemorySize
+	*/
+	void SetJpegQuality(TInt aQuality);
+
+	/**
+	from CCamera
+
+	Gets the currently set jpeg quality value.
+
+	Returns 0 if not supported.
+
+	@return The currently set jpeg quality value.
+	
+	@see    CCamera::CCameraPreImageCaptureControl::GetImageMaxMemorySizeL(TUint& aMemorySize)
+	*/
+	TInt JpegQuality() const;
+
+    /**
+	from CCamera
+
+	Gets a custom interface. The client has to cast the returned pointer
+	to the appropriate type.
+
+	@param aInterface
+		   The Uid of the particular interface function required.
+
+	@return Custom interface pointer. NULL if the requested interface is not supported.
+	*/
+	TAny* CustomInterface(TUid aInterface);
+
+private:
+	CWebCamera();
+	void ConstructL();
+
+private: // from MWebCameraActiveCallBack
+	/**
+	from MWebCameraActiveCallBack
+	
+	CallBack function of the Reserve
+	*/
+	virtual void ReserveCallBack(TInt aError);
+
+	/**
+	from MWebCameraActiveCallBack
+	
+	CallBack function of the PowerOn
+	*/
+	virtual void PowerOnCallBack(TInt aError);
+
+	/**
+	from MWebCameraActiveCallBack
+	
+	CallBack function of the ImageCapture
+	*/
+	virtual void ImageCaptureCallBackL(TInt aError);
+
+private: // from MWebCameraActiveCallBack
+	/**
+	from MWebCameraActiveCallBack
+	
+	CallBack function of the ViewFinder
+	*/
+	virtual void ViewFinderCallBack(TInt aError);
+
+private:
+	
+	RWebcameraDevice		iDriver;			///< Camera driver.
+	MCameraObserver*		iObserver;			///< The callback 'notify' party
+	MCameraObserver2*		iObserver2;			///< The callback 'notify' party(V2).
+	CWebCameraActive*		iActive;			///< For async demand.
+	CWebCameraVfActive*		iVfActive;			///< For viewfinder.
+	CWebCameraAdvSet* 		iAdvSettingsImpl;	///< Expansion setting class.
+
+	TCameraInfo				iInfo;				///< Camera Information.
+	TInt					iCameraIndex;		///< Camera Index.
+	TInt					iCameraHandle;		///< Camera handle.
+	TInt					iPriority;			///< priority.
+
+	TBool					iReserved;			///< Reserved Flag.
+	TBool					iPowerOn;			///< PowerOn Flag.
+	TBool					iImageCaptureActive;///< Flag during the still image .
+
+	CWebCameraBuffer*		iCaptureCameraBuf;	///< Camera buffer for capture.
+	CFbsBitmap*				iCaptureBitmap;		///< Bitmap Data for capture.
+	HBufC8*					iCaptureBuf;		///< Data buffer for capture.
+	TPtr8					iCaptureBufPtr;		///< pointer to Data buffer for capture.
+
+	RArray<TSize>			iImageSizes;		///< Image size.
+	};
+
+
+class CWebCameraInfo : public CCameraInfoPlugin
+	{
+public:
+
+    /**
+     * Two-phased constructor.
+     */
+	static CWebCameraInfo* NewL();
+	
+	/**> Destructor */
+	~CWebCameraInfo();
+
+// from CCameraInfoPlugin
+public:
+	/** 
+	from CCameraInfoPlugin
+	
+	Determines the number of cameras on the device.
+
+    @return Count of cameras present on the device.
+	*/
+	TInt CamerasAvailable();
+
+private:
+	CWebCameraInfo();
+	};
+
+
+#endif // ECAMWEBCAMERAPLUGIN_H