diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/VideoSource/inc/CVSCameraDataProvider.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/VideoSource/inc/CVSCameraDataProvider.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,517 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Video Source subsystem. +* +*/ + + +#ifndef CVSCAMERADATAPROVIDER_H +#define CVSCAMERADATAPROVIDER_H + +// INCLUDE FILES + +#include "CApiVideoSource.h" + +#include +#include +// CLASS FORWARDS + +class CVsFrameBuffer; + +// CLASS DECLARATION + +/** +* Internal MFrameBuffer API. +* +* @lib videosource.lib +* @since 5.0 +*/ +class MVsFrameBuffer + { + +public: + + /** + * Copies properties from the given frame buffer. + * @param "aSource" Source frame buffer from which propreties will + * be copied. + */ + virtual void CopyProperties( MFrameBuffer* aSource ) = 0; + + /** + * Copies properties from the given camera buffer. + * @param "aSource" Source camera buffer from which propreties will + * be copied. + */ + virtual void CopyProperties( MCameraBuffer* aSource ) = 0; + + /** + * Copies frame data and properties from the given frame buffer. + * @param "aSource" Source frame buffer from which propreties and + * frame data will be copied. + */ + virtual void CopyFrameL( MFrameBuffer* aSource ) = 0; + + /** + * Copies frame data and properties from the given camera buffer. + * @param "aSource" Source camera buffer from which propreties and + * frame data will be copied. + */ + virtual void CopyFrameL( MCameraBuffer* aSource ) = 0; + + }; + +/** +* Internal MFrameBuffer implementation. +* +* @lib videosource.lib +*/ +class CVsFrameBuffer : public CBase, public MVsFrameBuffer, + public MFrameBuffer, public MCameraBuffer + { + public: + + /** + * Constructor. + * @param "sSize" Size of stored frame in bytes. + * @exception Can leave with one of the system wide error codes. + */ + IMPORT_C static CVsFrameBuffer* NewL( TInt aSize ); + + /** + * Destructor. + */ + IMPORT_C ~CVsFrameBuffer(); + + public: // from MVsFrameBuffer + + /** + * @see MVsFrameBuffer::CopyProperties + */ + virtual void CopyProperties( MFrameBuffer* aSource ); + + /** + * @see MVsFrameBuffer::CopyProperties + */ + virtual void CopyProperties( MCameraBuffer* aSource ); + + /** + * @see MVsFrameBuffer::CopyFrameL + */ + virtual void CopyFrameL( MFrameBuffer* aSource ); + + /** + * @see MVsFrameBuffer::CopyFrameL + */ + virtual void CopyFrameL( MCameraBuffer* aSource ); + + public: // from MFrameBuffer + + /** + * @see MFrameBuffer::DataL or MCameraBuffer::DataL + */ + TDesC8* DataL( TInt aIndex ); + + /** + * @see MFrameBuffer::FrameL or MCameraBuffer::FrameL + */ + CFbsBitmap* FrameL( TInt aIndex ); + + /** + * @see MFrameBuffer::Release or MCameraBuffer::Release + */ + void Release(); + + /** + * @see MCameraBuffer::FrameSize + */ + TInt FrameSize(TInt aFrameIndex); + + /** + * @see MCameraBuffer::ChunkOffsetL + */ + TInt ChunkOffsetL(TInt aFrameIndex); + + /** + * @see MCameraBuffer::ChunkL + */ + RChunk& ChunkL(); + + /** + * @see MCameraBuffer::BitmapL + */ + CFbsBitmap& BitmapL(TInt aFrameIndex); + + /** + * @see MCameraBuffer::NumFrames + */ + TInt NumFrames(); + + private: + + /** + * Constructor. + */ + CVsFrameBuffer(); + + /** + * Second phase constructor. + * @param "aSize" Size of the frame in bytes. + */ + void ConstructL( TInt aSize ); + + private: + + HBufC8* iBuffer; + + TPtr8 iPtr; + + }; + +/** +* Internal implementation of onboard camera data provider base class. This +* class is inherited from public provider interface. +* +* @lib videosource.lib +*/ +class CVSCameraDataProvider : public CVSDataProvider, public MCameraObserver, public MVtImageScalerObserver, public MCameraObserver2 + { + public: // Constructor and destructor + + /** + * Factory function to create instance of onboard camera data provider. + * @param "aObserver" Pointer to provider observer. + * @param "aProviderIndex" Index of the provider to be created. + * @param "aPool" Pointer to data MVSBufferPool that gives buffer to + * data provider. + * @exception Can leave with one of the system wide error codes. + * @return Pointer to new provider instance. + */ + static CVSCameraDataProvider* NewL( + MVSDataProviderObserver* aObserver, + TInt aProviderIndex, + MVSBufferPool* aPool ); + + /** + * Destructor. + */ + ~CVSCameraDataProvider(); + + public: // New functions + + public: // Functions from base classes + + /** + * Initialize provider. + * @param "aInitParams" Initialization parameters. + * @exception Can leave with one of the system wide error codes. + */ + void InitializeL( const TDesC8& aInitParams ); + + /** + * Cancel initialization of camera provider. + */ + void CancelInitializing(); + + /** + * Return digital zoom factor. + * @return Digital zoom factor. + */ + virtual TInt DigitalZoomFactor() const; + + /** + * Set digital zoom factor. + * @param "aDigitalZoomFactor" Digital zoom factor. + * @exception Can leave with one of the system wide error codes. + */ + virtual void SetDigitalZoomFactorL( TInt aDigitalZoomFactor = 0 ); + + /** + * Start view finder bitmaps. + * @param "aSize" Size of the returned view finder bitmap. + * @exception Can leave with one of the system wide error codes. + */ + virtual void StartViewFinderBitmapsL( TSize& aSize ); + + /** + * Start view finder bitmaps. + * @param "aSize" Size of the returned view finder bitmap. + * @param "aClipRect" Required clip rectangle. + * @exception Can leave with one of the system wide error codes. + */ + virtual void StartViewFinderBitmapsL( TSize& aSize,TRect& aClipRect ); + + /** + * Stop view finder bitmaps. + */ + virtual void StopViewFinder(); + + /** + * Test if view finder is active. + * @return ETrue if view finder active. + */ + virtual TBool ViewFinderActive() const; + + /** + * Start view finder bitmaps using direct screen access. + * @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. + * @exception Can leave with one of the system wide error codes. + */ + virtual void StartViewFinderDirectL( + RWsSession& aWs, + CWsScreenDevice& aScreenDevice, + RWindowBase& aWindow, + TRect& aScreenRect ); + + /** + * Start view finder bitmaps using direct screen access. + * @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. + * @param "aClipRect" The rectangle to which the screen will be clipped. + * @exception Can leave with one of the system wide error codes. + */ + virtual void StartViewFinderDirectL( + RWsSession& aWs, + CWsScreenDevice& aScreenDevice, + RWindowBase& aWindow, + TRect& aScreenRect, + TRect& aClipRect ); + + /** + * Return provider information. + * @param @param "aInfo" Reference to variable to where the provider + * information is copied. + */ + virtual void ProviderInfo( TVSDataProviderInfo& aInfo ); + + /** + * See CVSDataProvider for description. + */ + virtual void SetViewFinderMirrorL( TBool aMirror ); + + /** + * See CVSDataProvider for description. + */ + virtual TBool ViewFinderMirror() const; + + /** + * See CVSDataProvider for description. + */ + virtual void FreezeL(); + + /** + * See CVSDataProvider for description. + */ + virtual void UnfreezeL(); + + /** + * See CVSDataProvider for description. + */ + virtual TBool IsFrozen() const; + + /** + * @see CVSDataProvider::SetContrastL for description. + */ + virtual void SetContrastL( TInt aContrast ); + + /** + * @see CVSDataProvider::GetContrast + */ + virtual TInt GetContrast( TInt& aContrast ) const; + + /** + * @see CVSDataProvider::SetBrightnessL for description. + */ + virtual void SetBrightnessL( TInt aBrightness ); + + /** + * @see CVSDataProvider::GetBrightness for description. + */ + virtual TInt GetBrightness( TInt& aBrightness ) const; + + /** + * @see CVSDataProvider::SetWhiteBalanceL for description. + */ + virtual void SetWhiteBalanceL( + CCamera::TWhiteBalance aWhiteBalance = CCamera::EWBAuto ); + + /** + * @see CVSDataProvider::GetWhiteBalance for description. + */ + virtual TInt GetWhiteBalance( + CCamera::TWhiteBalance& aWhiteBalance ) const; + + /** + * @see CVSDataProvider::GetColorTone for description. + */ + virtual TInt GetColorTone( + CCamera::CCameraImageProcessing::TEffect& aColorTone ) const; + + /** + * @see CVSDataProvider::SetColorToneL for description. + */ + virtual void SetColorToneL( + CCamera::CCameraImageProcessing::TEffect aValue ); + + protected: // from MCameraObserver + + /** + * @see MCameraObserver::ImageReady + */ + virtual void ImageReady( CFbsBitmap* aBitmap, HBufC8* aData, + TInt aError ); + + /** + * @see MCameraObserver::PowerOnComplete + */ + virtual void PowerOnComplete( TInt aError ); + + /** + * @see MCameraObserver::ViewFinderFrameReady + */ + virtual void ViewFinderFrameReady( CFbsBitmap& aFrame ); + + protected: // from MVtImageScalerObserver + + /** + * @see MVtImageScalerObserver::ScalingFinished( TInt aError ) + */ + virtual void ScalingFinished( TInt aError ); + + protected: // from MCameraObserver2 + + /** + * @see MCameraObserver2::ImageBufferReady + */ + virtual void ImageBufferReady( MCameraBuffer& aCameraBuffer, + TInt aError ); + + protected: // New functions + + /** + * Inliner to return reference to the onboard camera handle. + * @return Reference to the onboard camera handle. + */ + inline CCamera& Camera() const; + + protected: // Constructors and destructor + + /** + * Constructor. + * @param "aObserver" Pointer to provider observer. + */ + CVSCameraDataProvider( + MVSDataProviderObserver* aObserver, + MVSBufferPool* aPool ); + + private: // Constructors and destructors + + /** + * 2nd phase constructor. + * @param "aProviderIndex" Index of the provider to be created. + * @exception Can leave with one of the system wide error codes. + */ + void ConstructL( TInt aProviderIndex ); + + void FreezeViewFinderFrame( CFbsBitmap& aFrame ); + + void ScaleFrozenBitmapL( TSize& aSize ); + + private: // New functions + + /** + * Return provider information. + */ + void ProviderInfoExL( TVSDataProviderInfo& aInfo ); + + private: // Functions from base classes + + public: // Data + + protected: // Data + + enum TFreezePendingFlags + { + EViewFinderFreezePending = ( 1 << 0 ), + EVideoFrameFreezePending = ( 1 << 1 ) + }; + + // Camera handle number. + TInt iCameraHandle; + + // ETrue after ReserveComplete for iCamera + TBool iReserverComplete; + + // ETrue after PowerOnComplete for iCamera + TBool iPowerOnComplete; + + // ETrue after Freeze + TBool iFrozen; + + // Contains pending freeze flags after Freeze + TUint iFreezePendingFlags; + + // has frozen viewfinder frame copy + TBool iHasFrozenVFFrameCopyCreated; + + CVsFrameBuffer* iFrozenFrame; + + RCriticalSection iFreezeCS; + + private: // Data + + // Camera handle. + CCamera* iCamera; + + // owned: Copy of frozen VF frame + CFbsBitmap* iFrozenVFFrameCopy; + + // + CVtImageBitmap* iSource; + + // owned: Scaled version of frozen VF frame (this is sent) + CFbsBitmap* iFrozenVFFrameToBeSent; + + // + CVtImageBitmap* iTarget; + + // owned: Scaler instance + CVtImageScaler* iScaler; + + // ETrue when frozen VF frame is ready to be sent EFalse otherwise + TBool iFrozenVfFrameReady; + + // Camera image processing + CCamera::CCameraImageProcessing* iCamImgProc; + + private: // friends + + // Stif test module must be set as friend to be able to call protected + // and private methods + friend class CstiffVideoSourceAPICases; + + }; + +#include "CVSCameraDataProvider.inl" + +#endif // CVSCAMERADATAPROVIDER_H + +// End of File