--- a/mmplugins/cameraplugins/source/webcamera/ecamwebcameraplugin.h Thu Mar 25 11:21:36 2010 +0900
+++ b/mmplugins/cameraplugins/source/webcamera/ecamwebcameraplugin.h Tue Oct 19 11:48:59 2010 +0900
@@ -1,1027 +1,1032 @@
-/*
-* 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
+/*
+* 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 = 900 * 1024;
+
+
+// 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.
+
+ RChunk iChunk; ///< For Chunk process .
+ RWebcameraDevice::TChunkInfo iChunkInfo; ///< Chunk Information.
+ TUint8* iChuckBase;
+ TInt iChunkRemSize; ///< Chunk 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