diff -r bc06d8566074 -r 9ae0fe04e757 mmplugins/cameraplugins/source/webcamera/ecamwebcameraplugin.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmplugins/cameraplugins/source/webcamera/ecamwebcameraplugin.h Thu Mar 25 11:21:36 2010 +0900 @@ -0,0 +1,1027 @@ +/* +* Copyright (c) 2010 ISB. +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* ISB - Initial contribution +* +* Contributors: +* +* Description: +* +*/ + +#ifndef ECAMWEBCAMERAPLUGIN_H +#define ECAMWEBCAMERAPLUGIN_H + +#include +#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