mmplugins/cameraplugins/source/webcamera/ecamwebcameraplugin.cpp
branchRCL_3
changeset 64 92a82bc706f7
parent 9 9ae0fe04e757
--- a/mmplugins/cameraplugins/source/webcamera/ecamwebcameraplugin.cpp	Thu Mar 25 11:21:36 2010 +0900
+++ b/mmplugins/cameraplugins/source/webcamera/ecamwebcameraplugin.cpp	Tue Oct 19 11:48:59 2010 +0900
@@ -1,1332 +1,1303 @@
-/*
-* 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:
-*
-*/
-
-#include <ecom/ecom.h>
-#include <ecom/implementationproxy.h>
-#include <ecamuids.hrh>
-#include <ecam.h>
-#include "ecamwebcameraplugin.h"
-#include "ecamwebcamerapluginuids.hrh"
-#include "ecamwebcamerabuffer.h"
-#include "ecamwebcameraadvset.h"
-#include "ecamwebcameraactive.h"
-#include "ecamwebcameravfactive.h"
-
-
-_LIT(KCameraDriverPddName, "webcamera.pdd");
-_LIT(KCameraDriverLddName, "ewebcamera.ldd");
-
-const TInt KCaptureWidth     = 160;					// Capture image width
-const TInt KCaptureHeight    = 120;					// Capture image height
-const TInt KCaptureLineBytes = KCaptureWidth * 3;	// bytes of one line
-
-//
-// CWebCamera class
-//
-
-CWebCamera::CWebCamera():
-	iCaptureBufPtr(NULL, 0)
-	{
-	iInfo.iHardwareVersion.iMajor = 0;
-	iInfo.iHardwareVersion.iMinor = 0;
-	iInfo.iHardwareVersion.iBuild = 0;
-	iInfo.iSoftwareVersion.iMajor = 0;
-	iInfo.iSoftwareVersion.iMinor = 0;
-	iInfo.iSoftwareVersion.iBuild = 0;
-	iInfo.iOrientation = TCameraInfo::EOrientationOutwards;
-
-	iInfo.iOptionsSupported = 0;
-	iInfo.iOptionsSupported |= TCameraInfo::EViewFinderDirectSupported;
-	iInfo.iOptionsSupported |= TCameraInfo::EViewFinderBitmapsSupported;
-	iInfo.iOptionsSupported |= TCameraInfo::EImageCaptureSupported;
-	iInfo.iOptionsSupported |= TCameraInfo::EVideoCaptureSupported;
-	iInfo.iOptionsSupported |= TCameraInfo::EContrastSupported;
-	iInfo.iOptionsSupported |= TCameraInfo::EBrightnessSupported;
-	iInfo.iOptionsSupported |= TCameraInfo::EViewFinderClippingSupported;
-
-	iInfo.iFlashModesSupported 			= 0; // Bitfield of TFlash values
-	iInfo.iExposureModesSupported		= 0; // Bitfield of TExposure values
-	iInfo.iWhiteBalanceModesSupported	= 0; // Bitfield of TWhiteBalance values
-
-	iInfo.iMinZoom = KMinTestCameraZoom;
-	// KMinTestCameraZoom is zero or negative
-	// note the algorithm for creating of zoom factor
-	iInfo.iMinZoomFactor = TReal32(1)/TReal32(1 << -KMinTestCameraZoom);
-	iInfo.iMaxZoom = KMaxTestCameraZoom;
-	iInfo.iMaxZoomFactor = 1 << KMaxTestCameraZoom;
-
-	iInfo.iMaxDigitalZoom = KMaxTestCameraDigitalZoom;
-	iInfo.iMaxDigitalZoomFactor = KMaxTestCameraDigitalZoomFactor;
-
-	iInfo.iImageFormatsSupported = 0;
-	iInfo.iImageFormatsSupported |= EFormatExif;
-	iInfo.iImageFormatsSupported |= EFormatFbsBitmapColor4K;
-	iInfo.iImageFormatsSupported |= EFormatFbsBitmapColor64K;
-	iInfo.iImageFormatsSupported |= EFormatFbsBitmapColor16M;
-
-	iInfo.iVideoFrameFormatsSupported = 0;
-	iInfo.iVideoFrameFormatsSupported |= EFormatFbsBitmapColor4K;
-	iInfo.iVideoFrameFormatsSupported |= EFormatFbsBitmapColor64K;
-	iInfo.iVideoFrameFormatsSupported |= EFormatFbsBitmapColor16M;
-	iInfo.iMaxFramesPerBufferSupported = 1;
-	iInfo.iMaxBuffersSupported = 2;
-	}
-	
-CWebCamera::~CWebCamera()
-	{
-	delete iCaptureBuf;
-	delete iAdvSettingsImpl;
-	delete iVfActive;
-	delete iActive;
-	iImageSizes.Close();
-	iDriver.Close();
-	}
-	
-CWebCamera* CWebCamera::NewL()
-	{
-	CWebCamera* self = new(ELeave) CWebCamera;
-	CleanupStack::PushL(self);
-	self->ConstructL();
-	CleanupStack::Pop(self);
-
-	return self;
-	}
-
-void CWebCamera::ConstructL()
-	{
-	RDebug::Print(_L("CWebCamera::ConstructL_S"));
-	// Open drivers.
-	TInt err;
-
-	err = User::LoadPhysicalDevice(KCameraDriverPddName);
-	RDebug::Print(_L("CWebCamera::ConstructL LoadPhysicalDevice[%d]"), err);
-
-	if (err != KErrNone && err != KErrAlreadyExists)
-		{
-		User::Leave(err);
-		}
-
-	err = User::LoadLogicalDevice(KCameraDriverLddName);
-	RDebug::Print(_L("CWebCamera::ConstructL LoadLogicalDevice[%d]"), err);
-
-	if (err != KErrNone && err != KErrAlreadyExists)
-		{
-		User::Leave(err);
-		}
-
-	RDebug::Print(_L("CWebCamera::ConstructL iDriver.Open()"));
-	iDriver.Open();
-
-	iActive = CWebCameraActive::NewL(this, iDriver);
-	iVfActive = CWebCameraVfActive::NewL(this, iDriver);
-
-	User::LeaveIfError(iImageSizes.Append(TSize(640, 480)));	// VGA
-	User::LeaveIfError(iImageSizes.Append(TSize(160, 120)));	// QQVGA
-	iInfo.iNumImageSizesSupported = iImageSizes.Count();
-
-	RDebug::Print(_L("CWebCamera::ConstructL_E"));
-	}
-
-/** 
-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 CWebCamera::Construct2L(MCameraObserver& aObserver,TInt aCameraIndex)
-	{
-	iObserver = &aObserver;
-	iCameraIndex = 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 CWebCamera::Construct2DupL(MCameraObserver& aObserver,TInt aCameraHandle)
-	{
-	iObserver = &aObserver;
-	iCameraHandle = 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 CWebCamera::Construct2L(MCameraObserver2& aObserver,TInt aCameraIndex,TInt aPriority)
-	{
-	iObserver2 = &aObserver;
-	iCameraIndex = aCameraIndex;
-	iPriority = 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 CWebCamera::Construct2DupL(MCameraObserver2& aObserver,TInt aCameraHandle)
-	{
-	iObserver2 = &aObserver;
-	iCameraHandle = aCameraHandle;
-	}
-
-//
-// virtual functions
-//
-
-/**
-from CCamera
-
-Gets information about the camera device.
-
-@param  aInfo 
-        On return, information about the camera device. See TCameraInfo. 
-*/
-void CWebCamera::CameraInfo(TCameraInfo& aInfo) const
-	{
-	aInfo = iInfo;
-	}
-
-/** 
-from CCamera
-
-Asynchronous function that performs any required initialisation and reserves
-the camera for exclusive use.
-
-Calls MCameraObserver:: ReserveComplete() when complete. 
-*/
-void CWebCamera::Reserve()
-	{
-	iActive->Reserve();
-	}
-
-/** 
-from CCamera
-
-De-initialises the camera, allowing it to be used by other clients. 
-*/
-void CWebCamera::Release()
-	{
-	StopViewFinder();
-	iReserved = EFalse;
-	}
-
-/** 
-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 CWebCamera::PowerOn()
-	{
-	iActive->PowerOn();
-	}
-
-/** 
-from CCamera
-
-Synchronous function for switching off camera power. 
-*/
-void CWebCamera::PowerOff()
-	{
-	StopViewFinder();
-	iPowerOn = EFalse;
-	}
-
-/**
-from CCamera
-
-Gets the device-unique handle of this camera object.
-
-@return  The device-unique handle of this camera object. 
-*/
-TInt CWebCamera::Handle()
-	{
-	return 0;
-	}
-
-/** 
-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 CWebCamera::SetZoomFactorL(TInt /*aZoomFactor = 0*/)
-	{
-	}
-
-/** 
-from CCamera
-
-Gets the currently set zoom factor.
-
-@return  The currently set zoom factor.
-*/
-TInt CWebCamera::ZoomFactor() const
-	{
-	return 0;
-	}
-
-/** 
-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 CWebCamera::SetDigitalZoomFactorL(TInt /*aDigitalZoomFactor = 0*/)
-	{
-	}
-
-/** 
-from CCamera
-
-Gets the currently set digital zoom factor.
-
-@return  The currently set digital zoom factor. 
-*/
-TInt CWebCamera::DigitalZoomFactor() const
-	{
-	return 0;
-	}
-
-/**
-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 CWebCamera::SetContrastL(TInt /*aContrast*/)
-	{
-	}
-
-/** 
-from CCamera
-
-Gets the currently set contrast value.
-
-@return  The currently set contrast value.
-*/
-TInt CWebCamera::Contrast() const
-	{
-	return 0;
-	}
-
-/** 
-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 CWebCamera::SetBrightnessL(TInt /*aBrightness*/)
-	{
-	}
-
-/** 
-from CCamera
-
-Gets the currently set brightness adjustment value.
-
-@return  The currently set brightness adjustment value. 
-*/
-TInt CWebCamera::Brightness() const
-	{
-	return 0;
-	}
-
-/** 
-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 CWebCamera::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()	
-*/
-CCamera::TFlash CWebCamera::Flash() const
-	{
-	return EFlashNone;
-	}
-
-/** 
-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 CWebCamera::SetExposureL(TExposure /*aExposure = EExposureAuto*/)
-	{
-	}
-
-/** 
-from CCamera
-
-Gets the currently set exposure setting value.
-
-@return  The currently set exposure setting value. 
-*/
-CCamera::TExposure CWebCamera::Exposure() const
-	{
-	return EExposureAuto;
-	}
-
-/** 
-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 CWebCamera::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()
-*/
-CCamera::TWhiteBalance CWebCamera::WhiteBalance() const
-	{
-	return EWBAuto;
-	}
-
-/** 
-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 CWebCamera::StartViewFinderDirectL(RWsSession& aWs, CWsScreenDevice& aScreenDevice, RWindowBase& aWindow, TRect& aScreenRect)
-	{
-	RDebug::Print(_L("CWebCamera::StartViewFinderDirectL"));
-	TRect emptyRect;
-	StartViewFinderDirectL(aWs, aScreenDevice, aWindow, aScreenRect, emptyRect);
-	}
-
-/** 
-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 CWebCamera::StartViewFinderDirectL(RWsSession& aWs, CWsScreenDevice& aScreenDevice, RWindowBase& aWindow, TRect& aScreenRect, TRect& aClipRect)
-	{
-	RDebug::Print(_L("CWebCamera::StartViewFinderDirectL'"));
-	iVfActive->StartViewFinderDirectL(aWs, aScreenDevice, aWindow, aScreenRect, 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 CWebCamera::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 CWebCamera::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 CWebCamera::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 CWebCamera::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 CWebCamera::StopViewFinder()
-	{
-	iVfActive->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 CWebCamera::ViewFinderActive() const
-	{
-	return iVfActive->ViewFinderActive();
-	}
-
-/** 
-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 CWebCamera::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 CWebCamera::ViewFinderMirror() const
-	{
-	return EFalse;
-	}
-
-/** 
-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 CWebCamera::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 CWebCamera::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 CWebCamera::CaptureImage()
-	{
-	delete iCaptureBuf;
-	iCaptureBuf = NULL;
-
-	iCaptureBuf = HBufC8::NewL(KMaxBufSize);
-	iCaptureBufPtr.Set(iCaptureBuf->Des());
-	iCaptureBufPtr.SetLength(0);
-
-	iActive->ImageCapture(iCaptureBufPtr);
-
-	iImageCaptureActive = ETrue;
-	}
-
-/** 
-from CCamera
-
-Cancels the asynchronous still image capture. 
-
-@see CCamera::CCameraImageCapture
-*/
-void CWebCamera::CancelCaptureImage()
-	{
-	iImageCaptureActive = EFalse;
-	}
-
-/** 
-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 CWebCamera::EnumerateCaptureSizes(TSize& aSize, TInt aSizeIndex, TFormat aFormat) const
-	{
-	if (aSizeIndex < 0 || aSizeIndex >= iInfo.iNumImageSizesSupported ||
-		!(aFormat & iInfo.iImageFormatsSupported) )
-		{
-		aSize = TSize(0,0);
-		}
-	else
-		{
-		aSize = iImageSizes[aSizeIndex];
-		}
-	}
-
-/** 
-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 CWebCamera::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 CWebCamera::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 CWebCamera::StartVideoCapture()
-	{
-	}
-
-/** 
-from CCamera
-
-Stops video capture. 
-*/
-void CWebCamera::StopVideoCapture()
-	{
-	}
-
-/** 
-from CCamera
-
-Tests whether video capture is active.
-
-@return  ETrue if video capture is active. EFalse if video capture is not active 
-*/
-TBool CWebCamera::VideoCaptureActive() const
-	{
-	return EFalse;
-	}
-
-/** 
-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 CWebCamera::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 CWebCamera::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 CWebCamera::GetFrameSize(TSize& /*aSize*/) const
-	{
-	}
-
-/** 
-from CCamera
-
-Gets the frame rate currently in use.
-
-@return  The frame rate currently in use. 
-*/
-TReal32 CWebCamera::FrameRate() const
-	{
-	return 0.0;
-	}
-
-/** 
-from CCamera
-
-Gets the number of buffers currently in use.
-
-@return  The number of buffers currently in use. 
-*/
-TInt CWebCamera::BuffersInUse() const
-	{
-	return 0;
-	}
-
-/** 
-from CCamera
-
-Gets the number of frames per buffer currently in use.
-
-@return  The number of frames per buffer currently in use. 
-*/
-TInt CWebCamera::FramesPerBuffer() const
-	{
-	return 0;
-	}
-
-/** 
-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 CWebCamera::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 CWebCamera::JpegQuality() const
-	{
-	return 0;
-	}
-
-/**
-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* CWebCamera::CustomInterface(TUid aInterface)
-	{
-	switch(aInterface.iUid)
-		{
-	// advanced settings interface pointers
-	case KECamMCameraAdvancedSettingsUidValue:
-		iAdvSettingsImpl = CWebCameraAdvSet::NewL(*this);
-		return static_cast<MCameraAdvancedSettings*>(iAdvSettingsImpl);
-
-	case KECamMCameraAdvancedSettings2UidValue:
-		iAdvSettingsImpl = CWebCameraAdvSet::NewL(*this);
-		return static_cast<MCameraAdvancedSettings2*>(iAdvSettingsImpl);
-
-	case KECamMCameraAdvancedSettings3UidValue:
-		iAdvSettingsImpl = CWebCameraAdvSet::NewL(*this);
-		return static_cast<MCameraAdvancedSettings3*>(iAdvSettingsImpl);
-
-	default:
-		return NULL;
-		}
-	}
-
-/**
-from MWebCameraActiveCallBack
-
-CallBack function of the Reserve
-*/
-void CWebCamera::ReserveCallBack(TInt aError)
-	{
-	RDebug::Print(_L("CWebCamera::ReserveCallBack"));
-
-	if (iObserver)
-		{
-		iObserver->ReserveComplete(aError);
-		}
-	else if (iObserver2)
-		{
-		const TECAMEvent wEvent(KUidECamEventReserveComplete, aError);
-		iObserver2->HandleEvent(wEvent);
-		}
-	}
-
-/**
-from MWebCameraActiveCallBack
-
-CallBack function of the PowerOn
-*/
-void CWebCamera::PowerOnCallBack(TInt aError)
-	{
-	RDebug::Print(_L("CWebCamera::PowerOnCallBack"));
-
-	if (iObserver)
-		{
-		iObserver->PowerOnComplete(aError);
-		}
-	else if (iObserver2)
-		{
-		const TECAMEvent wEvent(KUidECamEventPowerOnComplete, aError);
-		iObserver2->HandleEvent(wEvent);
-		}
-	}
-
-/**
-from MWebCameraActiveCallBack
-
-CallBack function of the ImageCapture
-*/
-void CWebCamera::ImageCaptureCallBackL(TInt aError)
-	{
-	RDebug::Print(_L("CWebCamera::ImageCaptureCallBack_S"));
-
-	iImageCaptureActive = EFalse;
-
-	iCaptureBitmap = NULL;
-	CFbsBitmap* image = new (ELeave) CFbsBitmap();
-	CleanupStack::PushL(image);
-	User::LeaveIfError(image->Create(TSize(KCaptureWidth, KCaptureHeight), EColor16M));
-	CleanupStack::Pop(image);
-	iCaptureBitmap = image;
-
-////////////////////////////////////////////////////////////////////////////////////////
-// output receive data log
-//	RDebug::Print(_L("CWebCameraVfActive::ImageCaptureCallBack iCaptureBufPtr[%d]"), iCaptureBufPtr.Length());
-//	TBuf<256> hexBuf;
-//	for (TInt i = 0; i < iCaptureBufPtr.Length(); i++)
-//		{
-//		hexBuf.AppendFormat(_L("%02X "), iCaptureBufPtr[i]);
-//		if ((i % 16) == 15)
-//			{
-//			RDebug::Print(hexBuf);
-//			hexBuf = KNullDesC;
-//			}
-//		}
-//	RDebug::Print(hexBuf);
-////////////////////////////////////////////////////////////////////////////////////////
-
-	RDebug::Print(_L("CWebCamera::ImageCaptureCallBack start setscanline_S"));
-	for (TInt height=0; height<KCaptureHeight; height++)
-		{
-		TInt pos = height * KCaptureLineBytes;
-		TPtrC8 posptr = iCaptureBuf->Mid(pos, KCaptureLineBytes);
-		TBuf8<KCaptureLineBytes>  buf;
-		buf.Copy(posptr);
-		iCaptureBitmap->SetScanLine(buf, ((KCaptureHeight-1)-height));
-		}
-	RDebug::Print(_L("CWebCamera::ImageCaptureCallBack start setscanline_E"));
-
-	if (iObserver)
-		{
-		iObserver->ImageReady(iCaptureBitmap, iCaptureBuf, aError);
-		}
-	else if (iObserver2)
-		{
-		iObserver2->ImageBufferReady(*iCaptureCameraBuf, aError);
-		}
-
-	RDebug::Print(_L("CWebCamera::ImageCaptureCallBack_E"));
-	}
-
-//from MWebCameraVfActiveCallBack
-void CWebCamera::ViewFinderCallBack(TInt /*aError*/)
-	{
-	RDebug::Print(_L("CWebCamera::ViewFinderCallBack"));
-	}
-
-
-//
-// CWebCameraInfo class
-//
-
-CWebCameraInfo::CWebCameraInfo()
-	{
-	}
-	
-CWebCameraInfo::~CWebCameraInfo()
-	{
-	}
-	
-CWebCameraInfo* CWebCameraInfo::NewL()
-	{
-	return new (ELeave) CWebCameraInfo;
-	}
-
-/** 
-from CCameraInfoPlugin
-
-Determines the number of cameras on the device.
-
-@return Count of cameras present on the device.
-*/
-TInt CWebCameraInfo::CamerasAvailable()
-	{
-	return 1;
-	}
-
-
-// __________________________________________________________________________
-// Exported proxy for instantiation method resolution
-// Define the interface UIDs
-const TImplementationProxy ImplementationTable[] = 
-	{
-		IMPLEMENTATION_PROXY_ENTRY(KUidOnboardWebCameraPlugin,	CWebCamera::NewL),
-		IMPLEMENTATION_PROXY_ENTRY(KUidOnboardWebCameraInfo,	CWebCameraInfo::NewL)
-	};
-
-EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
-	{
-	aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
-
-	return ImplementationTable;
-	}
+/*
+* 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:
+*
+*/
+
+#include <ecom/ecom.h>
+#include <ecom/implementationproxy.h>
+#include <ecamuids.hrh>
+#include <ecam.h>
+#include "ecamwebcameraplugin.h"
+#include "ecamwebcamerapluginuids.hrh"
+#include "ecamwebcamerabuffer.h"
+#include "ecamwebcameraadvset.h"
+#include "ecamwebcameraactive.h"
+#include "ecamwebcameravfactive.h"
+
+
+_LIT(KCameraDriverPddName, "webcamera.pdd");
+_LIT(KCameraDriverLddName, "ewebcamera.ldd");
+
+const TInt KCaptureWidth     = 640;					// Capture image width
+const TInt KCaptureHeight    = 480;					// Capture image height
+
+const TInt KCaptureLineBytes = KCaptureWidth * 3;	// bytes of one line
+
+//
+// CWebCamera class
+//
+
+CWebCamera::CWebCamera():
+	iCaptureBufPtr(NULL, 0)
+	{
+	
+	iInfo.iHardwareVersion.iMajor = 0;
+	iInfo.iHardwareVersion.iMinor = 0;
+	iInfo.iHardwareVersion.iBuild = 0;
+	iInfo.iSoftwareVersion.iMajor = 0;
+	iInfo.iSoftwareVersion.iMinor = 0;
+	iInfo.iSoftwareVersion.iBuild = 0;
+	iInfo.iOrientation = TCameraInfo::EOrientationOutwards;
+
+	iInfo.iOptionsSupported = 0;
+	iInfo.iOptionsSupported |= TCameraInfo::EViewFinderDirectSupported;
+	iInfo.iOptionsSupported |= TCameraInfo::EViewFinderBitmapsSupported;
+	iInfo.iOptionsSupported |= TCameraInfo::EImageCaptureSupported;
+	iInfo.iOptionsSupported |= TCameraInfo::EVideoCaptureSupported;
+	iInfo.iOptionsSupported |= TCameraInfo::EContrastSupported;
+	iInfo.iOptionsSupported |= TCameraInfo::EBrightnessSupported;
+	iInfo.iOptionsSupported |= TCameraInfo::EViewFinderClippingSupported;
+
+	iInfo.iFlashModesSupported 			= 0; // Bitfield of TFlash values
+	iInfo.iExposureModesSupported		= 0; // Bitfield of TExposure values
+	iInfo.iWhiteBalanceModesSupported	= 0; // Bitfield of TWhiteBalance values
+
+	iInfo.iMinZoom = KMinTestCameraZoom;
+	// KMinTestCameraZoom is zero or negative
+	// note the algorithm for creating of zoom factor
+	iInfo.iMinZoomFactor = TReal32(1)/TReal32(1 << -KMinTestCameraZoom);
+	iInfo.iMaxZoom = KMaxTestCameraZoom;
+	iInfo.iMaxZoomFactor = 1 << KMaxTestCameraZoom;
+
+	iInfo.iMaxDigitalZoom = KMaxTestCameraDigitalZoom;
+	iInfo.iMaxDigitalZoomFactor = KMaxTestCameraDigitalZoomFactor;
+
+	iInfo.iImageFormatsSupported = 0;
+	iInfo.iImageFormatsSupported |= EFormatExif;
+	iInfo.iImageFormatsSupported |= EFormatFbsBitmapColor4K;
+	iInfo.iImageFormatsSupported |= EFormatFbsBitmapColor64K;
+	iInfo.iImageFormatsSupported |= EFormatFbsBitmapColor16M;
+
+	iInfo.iVideoFrameFormatsSupported = 0;
+	iInfo.iVideoFrameFormatsSupported |= EFormatFbsBitmapColor4K;
+	iInfo.iVideoFrameFormatsSupported |= EFormatFbsBitmapColor64K;
+	iInfo.iVideoFrameFormatsSupported |= EFormatFbsBitmapColor16M;
+	iInfo.iMaxFramesPerBufferSupported = 1;
+	iInfo.iMaxBuffersSupported = 2;
+	}
+	
+CWebCamera::~CWebCamera()
+	{
+	delete iCaptureBuf;
+	delete iAdvSettingsImpl;
+	delete iVfActive;
+	delete iActive;
+	delete iCaptureBitmap;
+	iChunk.Close();
+	iImageSizes.Close();
+	iDriver.Close();
+	}
+	
+CWebCamera* CWebCamera::NewL()
+	{
+	CWebCamera* self = new(ELeave) CWebCamera;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+
+	return self;
+	}
+
+void CWebCamera::ConstructL()
+	{
+	// Open drivers.
+	TInt err;
+
+	err = User::LoadPhysicalDevice(KCameraDriverPddName);
+
+	if (err != KErrNone && err != KErrAlreadyExists)
+		{
+		User::Leave(err);
+		}
+
+	err = User::LoadLogicalDevice(KCameraDriverLddName);
+
+	if (err != KErrNone && err != KErrAlreadyExists)
+		{
+		User::Leave(err);
+		}
+
+	iDriver.Open();
+
+	iActive = CWebCameraActive::NewL(this, iDriver);
+	iVfActive = CWebCameraVfActive::NewL(this, iDriver);
+
+	User::LeaveIfError(iImageSizes.Append(TSize(640, 480)));	// VGA
+	User::LeaveIfError(iImageSizes.Append(TSize(160, 120)));	// QQVGA
+	iInfo.iNumImageSizesSupported = iImageSizes.Count();
+	
+	// Open chunk
+	err = iDriver.OpenSharedChunks(iChunk, iChunkInfo);
+	if (err != KErrNone)
+		{
+		User::Leave(err);
+		}
+	iChuckBase=iChunk.Base();
+	}
+
+/** 
+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 CWebCamera::Construct2L(MCameraObserver& aObserver,TInt aCameraIndex)
+	{
+	iObserver = &aObserver;
+	iCameraIndex = 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 CWebCamera::Construct2DupL(MCameraObserver& aObserver,TInt aCameraHandle)
+	{
+	iObserver = &aObserver;
+	iCameraHandle = 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 CWebCamera::Construct2L(MCameraObserver2& aObserver,TInt aCameraIndex,TInt aPriority)
+	{
+	iObserver2 = &aObserver;
+	iCameraIndex = aCameraIndex;
+	iPriority = 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 CWebCamera::Construct2DupL(MCameraObserver2& aObserver,TInt aCameraHandle)
+	{
+	iObserver2 = &aObserver;
+	iCameraHandle = aCameraHandle;
+	}
+
+//
+// virtual functions
+//
+
+/**
+from CCamera		Gets information about the camera device.
+@param  aInfo 		On return, information about the camera device. See TCameraInfo. 
+*/
+void CWebCamera::CameraInfo(TCameraInfo& aInfo) const
+	{
+	aInfo = iInfo;
+	}
+
+/** 
+from CCamera
+
+Asynchronous function that performs any required initialisation and reserves
+the camera for exclusive use.
+
+Calls MCameraObserver:: ReserveComplete() when complete. 
+*/
+void CWebCamera::Reserve()
+	{
+	iActive->Reserve();
+	}
+
+/** 
+from CCamera
+
+De-initialises the camera, allowing it to be used by other clients. 
+*/
+void CWebCamera::Release()
+	{
+	StopViewFinder();
+	iReserved = EFalse;
+	}
+
+/** 
+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 CWebCamera::PowerOn()
+	{
+	iActive->PowerOn();
+	}
+
+/** 
+from CCamera
+
+Synchronous function for switching off camera power. 
+*/
+void CWebCamera::PowerOff()
+	{
+	StopViewFinder();
+	iPowerOn = EFalse;
+	}
+
+/**
+from CCamera
+
+Gets the device-unique handle of this camera object.
+
+@return  The device-unique handle of this camera object. 
+*/
+TInt CWebCamera::Handle()
+	{
+	return 0;
+	}
+
+/** 
+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 CWebCamera::SetZoomFactorL(TInt /*aZoomFactor = 0*/)
+	{
+	}
+
+/** 
+from CCamera
+
+Gets the currently set zoom factor.
+
+@return  The currently set zoom factor.
+*/
+TInt CWebCamera::ZoomFactor() const
+	{
+	return 0;
+	}
+
+/** 
+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 CWebCamera::SetDigitalZoomFactorL(TInt /*aDigitalZoomFactor = 0*/)
+	{
+	}
+
+/** 
+from CCamera
+
+Gets the currently set digital zoom factor.
+
+@return  The currently set digital zoom factor. 
+*/
+TInt CWebCamera::DigitalZoomFactor() const
+	{
+	return 0;
+	}
+
+/**
+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 CWebCamera::SetContrastL(TInt /*aContrast*/)
+	{
+	}
+
+/** 
+from CCamera
+
+Gets the currently set contrast value.
+
+@return  The currently set contrast value.
+*/
+TInt CWebCamera::Contrast() const
+	{
+	return 0;
+	}
+
+/** 
+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 CWebCamera::SetBrightnessL(TInt /*aBrightness*/)
+	{
+	}
+
+/** 
+from CCamera
+
+Gets the currently set brightness adjustment value.
+
+@return  The currently set brightness adjustment value. 
+*/
+TInt CWebCamera::Brightness() const
+	{
+	return 0;
+	}
+
+/** 
+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 CWebCamera::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()	
+*/
+CCamera::TFlash CWebCamera::Flash() const
+	{
+	return EFlashNone;
+	}
+
+/** 
+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 CWebCamera::SetExposureL(TExposure /*aExposure = EExposureAuto*/)
+	{
+	}
+
+/** 
+from CCamera
+
+Gets the currently set exposure setting value.
+
+@return  The currently set exposure setting value. 
+*/
+CCamera::TExposure CWebCamera::Exposure() const
+	{
+	return EExposureAuto;
+	}
+
+/** 
+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 CWebCamera::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()
+*/
+CCamera::TWhiteBalance CWebCamera::WhiteBalance() const
+	{
+	return EWBAuto;
+	}
+
+/** 
+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 CWebCamera::StartViewFinderDirectL(RWsSession& aWs, CWsScreenDevice& aScreenDevice, RWindowBase& aWindow, TRect& aScreenRect)
+	{
+	TRect emptyRect;
+	StartViewFinderDirectL(aWs, aScreenDevice, aWindow, aScreenRect, emptyRect);
+	}
+
+/** 
+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 CWebCamera::StartViewFinderDirectL(RWsSession& aWs, CWsScreenDevice& aScreenDevice, RWindowBase& aWindow, TRect& aScreenRect, TRect& aClipRect)
+	{
+	iVfActive->StartViewFinderDirectL(aWs, aScreenDevice, aWindow, aScreenRect, aClipRect, iChuckBase, iChunkRemSize);
+	}
+
+/** 
+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 CWebCamera::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 CWebCamera::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 CWebCamera::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 CWebCamera::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 CWebCamera::StopViewFinder()
+	{
+	iVfActive->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 CWebCamera::ViewFinderActive() const
+	{
+	return iVfActive->ViewFinderActive();
+	}
+
+/** 
+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 CWebCamera::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 CWebCamera::ViewFinderMirror() const
+	{
+	return EFalse;
+	}
+
+/** 
+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 CWebCamera::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 CWebCamera::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 CWebCamera::CaptureImage()
+	{
+	delete iCaptureBuf;
+	iCaptureBuf = NULL;
+
+	iCaptureBuf = HBufC8::NewL(KMaxBufSize);
+	iCaptureBufPtr.Set(iCaptureBuf->Des());
+	iCaptureBufPtr.SetLength(0);
+
+	iActive->ImageCapture(iChunkRemSize);
+
+	iImageCaptureActive = ETrue;
+	}
+
+/** 
+from CCamera
+
+Cancels the asynchronous still image capture. 
+
+@see CCamera::CCameraImageCapture
+*/
+void CWebCamera::CancelCaptureImage()
+	{
+	iImageCaptureActive = EFalse;
+	}
+
+/** 
+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 CWebCamera::EnumerateCaptureSizes(TSize& aSize, TInt aSizeIndex, TFormat aFormat) const
+	{
+	if (aSizeIndex < 0 || aSizeIndex >= iInfo.iNumImageSizesSupported ||
+		!(aFormat & iInfo.iImageFormatsSupported) )
+		{
+		aSize = TSize(0,0);
+		}
+	else
+		{
+		aSize = iImageSizes[aSizeIndex];
+		}
+	}
+
+/** 
+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 CWebCamera::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 CWebCamera::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 CWebCamera::StartVideoCapture()
+	{
+	}
+
+/** 
+from CCamera
+
+Stops video capture. 
+*/
+void CWebCamera::StopVideoCapture()
+	{
+	}
+
+/** 
+from CCamera
+
+Tests whether video capture is active.
+
+@return  ETrue if video capture is active. EFalse if video capture is not active 
+*/
+TBool CWebCamera::VideoCaptureActive() const
+	{
+	return EFalse;
+	}
+
+/** 
+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 CWebCamera::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 CWebCamera::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 CWebCamera::GetFrameSize(TSize& /*aSize*/) const
+	{
+	}
+
+/** 
+from CCamera
+
+Gets the frame rate currently in use.
+
+@return  The frame rate currently in use. 
+*/
+TReal32 CWebCamera::FrameRate() const
+	{
+	return 0.0;
+	}
+
+/** 
+from CCamera
+
+Gets the number of buffers currently in use.
+
+@return  The number of buffers currently in use. 
+*/
+TInt CWebCamera::BuffersInUse() const
+	{
+	return 0;
+	}
+
+/** 
+from CCamera
+
+Gets the number of frames per buffer currently in use.
+
+@return  The number of frames per buffer currently in use. 
+*/
+TInt CWebCamera::FramesPerBuffer() const
+	{
+	return 0;
+	}
+
+/** 
+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 CWebCamera::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 CWebCamera::JpegQuality() const
+	{
+	return 0;
+	}
+
+/**
+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* CWebCamera::CustomInterface(TUid aInterface)
+	{
+	switch(aInterface.iUid)
+		{
+	// advanced settings interface pointers
+	case KECamMCameraAdvancedSettingsUidValue:
+		iAdvSettingsImpl = CWebCameraAdvSet::NewL(*this);
+		return static_cast<MCameraAdvancedSettings*>(iAdvSettingsImpl);
+
+	case KECamMCameraAdvancedSettings2UidValue:
+		iAdvSettingsImpl = CWebCameraAdvSet::NewL(*this);
+		return static_cast<MCameraAdvancedSettings2*>(iAdvSettingsImpl);
+
+	case KECamMCameraAdvancedSettings3UidValue:
+		iAdvSettingsImpl = CWebCameraAdvSet::NewL(*this);
+		return static_cast<MCameraAdvancedSettings3*>(iAdvSettingsImpl);
+
+	default:
+		return NULL;
+		}
+	}
+
+/**
+from MWebCameraActiveCallBack
+CallBack function of the Reserve
+*/
+void CWebCamera::ReserveCallBack(TInt aError)
+	{
+
+	if (iObserver)
+		{
+		iObserver->ReserveComplete(aError);
+		}
+	else if (iObserver2)
+		{
+		const TECAMEvent wEvent(KUidECamEventReserveComplete, aError);
+		iObserver2->HandleEvent(wEvent);
+		}
+	}
+
+/**
+from MWebCameraActiveCallBack
+CallBack function of the PowerOn
+*/
+void CWebCamera::PowerOnCallBack(TInt aError)
+	{
+
+	if (iObserver)
+		{
+		iObserver->PowerOnComplete(aError);
+		}
+	else if (iObserver2)
+		{
+		const TECAMEvent wEvent(KUidECamEventPowerOnComplete, aError);
+		iObserver2->HandleEvent(wEvent);
+		}
+	}
+
+/**
+from MWebCameraActiveCallBack
+
+CallBack function of the ImageCapture
+*/
+void CWebCamera::ImageCaptureCallBackL(TInt aError)
+	{
+	iImageCaptureActive = EFalse;
+	if (!iCaptureBitmap)
+		{
+		CFbsBitmap* image = new (ELeave) CFbsBitmap();
+		CleanupStack::PushL(image);
+		User::LeaveIfError(image->Create(TSize(KCaptureWidth, KCaptureHeight), EColor16M));
+		CleanupStack::Pop(image);
+		iCaptureBitmap = image;
+		}
+
+	iCaptureBufPtr.Copy(iChuckBase,iChunkRemSize);
+
+////////////////////////////////////////////////////////////////////////////////////////
+// output receive data log
+//	RDebug::Print(_L("CWebCameraVfActive::ImageCaptureCallBack iCaptureBufPtr[%d]"), iCaptureBufPtr.Length());
+//	TBuf<256> hexBuf;
+//	for (TInt i = 0; i < iCaptureBufPtr.Length(); i++)
+//		{
+//		hexBuf.AppendFormat(_L("%02X "), iCaptureBufPtr[i]);
+//		if ((i % 16) == 15)
+//			{
+//			RDebug::Print(hexBuf);
+//			hexBuf = KNullDesC;
+//			}
+//		}
+//	RDebug::Print(hexBuf);
+////////////////////////////////////////////////////////////////////////////////////////
+
+	if (iObserver)
+		{
+		TUint32 *wData = iCaptureBitmap->DataAddress();
+		Mem::Copy(wData, iCaptureBufPtr.Ptr(), (KCaptureHeight * KCaptureLineBytes));
+
+		iObserver->ImageReady(iCaptureBitmap, iCaptureBuf, aError);
+		delete iCaptureBitmap;
+		iCaptureBitmap = NULL;
+		}
+	else if (iObserver2)
+		{
+		iObserver2->ImageBufferReady(*iCaptureCameraBuf, aError);
+		}
+
+	}
+
+//from MWebCameraVfActiveCallBack
+void CWebCamera::ViewFinderCallBack(TInt /*aError*/)
+	{
+	}
+
+
+//
+// CWebCameraInfo class
+//
+
+CWebCameraInfo::CWebCameraInfo()
+	{
+	}
+	
+CWebCameraInfo::~CWebCameraInfo()
+	{
+	}
+	
+CWebCameraInfo* CWebCameraInfo::NewL()
+	{
+	return new (ELeave) CWebCameraInfo;
+	}
+
+/** 
+from CCameraInfoPlugin
+
+Determines the number of cameras on the device.
+
+@return Count of cameras present on the device.
+*/
+TInt CWebCameraInfo::CamerasAvailable()
+	{
+	return 1;
+	}
+
+
+// __________________________________________________________________________
+// Exported proxy for instantiation method resolution
+// Define the interface UIDs
+const TImplementationProxy ImplementationTable[] = 
+	{
+		IMPLEMENTATION_PROXY_ENTRY(KUidOnboardWebCameraPlugin,	CWebCamera::NewL),
+		IMPLEMENTATION_PROXY_ENTRY(KUidOnboardWebCameraInfo,	CWebCameraInfo::NewL)
+	};
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+	{
+	aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+
+	return ImplementationTable;
+	}