diff -r 9ae0fe04e757 -r 92a82bc706f7 mmplugins/cameraplugins/source/webcamera/ecamwebcameraplugin.h --- 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 -#include -#include -#include -#include - - -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 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 +#include +#include +#include +#include + + +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 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