vtprotocolplugins/VideoSource/inc/CVSStillImageDataProvider.h
changeset 0 ed9695c8bcbe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vtprotocolplugins/VideoSource/inc/CVSStillImageDataProvider.h	Mon Nov 23 14:47:47 2009 +0200
@@ -0,0 +1,532 @@
+/*
+* 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 CVSSTILLIMTAGEDATAPROVIDER_H
+#define CVSSTILLIMTAGEDATAPROVIDER_H
+
+// INCLUDE FILES
+
+#include <gdi.h>
+#include "CApiVideoSource.h"
+#include "cvtimagescaler.h"
+#include <ecamimageprocessing.h>
+
+#include "cactivewait.h"
+#include "mmultiframeprovider.h"
+
+// FORWARD DECLARATIONS
+
+class CImageDecoder;
+class CVSStillImageDataProvider;
+class CVSFrameRateTimer;
+class CVtImageBitmap;
+class CMultiframeProvider;
+
+
+// CLASS DECLARATION
+
+/**
+*  Internal implementation of still image data provider. This
+*  class is inherited from from public provider interface.
+*
+*  @lib videosource.lib
+*/
+class CVSStillImageDataProvider : public CVSDataProvider, MMultiframeprovider
+    {
+    public:        // Constructors and destructor
+
+        /**
+        * Static factory function create instance of this class.
+        * @param "aObserver" Pointer to provider observer.
+        * @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 instance.
+        */
+        static CVSStillImageDataProvider* NewL(
+            MVSDataProviderObserver* aObserver,
+            MVSBufferPool* aPool );
+
+        /**
+        * Destructor.
+        */
+        ~CVSStillImageDataProvider();
+
+    public:        // New functions
+
+    public:        // Functions from base classes
+
+        /**
+        * Initialize provider.
+        * @param "aInitParams" Reference to the initialization parameters.
+        * @exception Can leave with one of the system wide error codes.
+        */
+        void InitializeL( const TDesC8& aInitParams );
+
+        /**
+        * Cancel initialization of still image 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 for description.
+        */
+		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:    // New functions
+
+    protected:    // Functions from base classes
+
+    private:    // New functions
+
+        /**
+        * See CVSDataProvider for description.
+        */
+        void PrimeL();
+
+    private:
+
+    private:    // Functions from base classes
+
+        /**
+        * See MDataSource for description.
+        */
+        virtual void FillBufferL(
+            CMMFBuffer* aBuffer,
+            MVTVideoSink* aConsumer,
+            TMediaId aMediaId );
+
+    private:
+
+        /**
+        * See MDataSource for description.
+        */
+        virtual void BufferEmptiedL( CMMFBuffer* aBuffer );
+
+        /**
+        * See MDataSource for description.
+        */
+        virtual TInt SourceThreadLogon( MAsyncEventHandler& aEventHandler );
+
+        /**
+        * See MDataSource for description.
+        */
+        virtual void SourceThreadLogoff();
+
+        /**
+        * See MDataSource for description.
+        */
+        virtual void SourcePrimeL();
+
+        /**
+        * See MDataSource for description.
+        */
+        virtual void SourcePlayL();
+
+        /**
+        * See MDataSource for description.
+        */
+        virtual void SourcePauseL();
+
+        /**
+        * See MDataSource for description.
+        */
+        virtual void SourceStopL();
+
+    private: // Functions from base classes
+
+        /**
+        * See MVTVideoInput for description.
+        */
+        virtual void SetFormatL( const TDesC8& aFormat );
+
+        /**
+        * See MVTVideoInput for description.
+        */
+        virtual void SetFrameRateL( TReal32 aFrameRate );
+
+        /**
+        * See MVTVideoInput for description.
+        */
+        virtual void SetVideoFrameSizeL( const TSize& aSize );
+
+        /**
+        * See MVTVideoInput for description.
+        */
+        virtual void GetVideoFrameSizeL( TSize& aSize ) const;
+
+    private:    // New functions
+
+        /**
+        * Common initialization of the provider (initializes features
+        * that are always needed by the provider).
+        * @exception Can leave with one of the system wide error codes.
+        */
+        void CommonInitializeL();
+
+        /**
+        * Undo common initialization of still image data provider.
+        */
+        void UndoCommonInitialized();
+
+        /**
+        * Loads image that was set in General Settings application.
+        * @param aType Type of of the general settings image.
+        * @exception Can leave with one of the system wide error codes.
+        */
+        void GeneralSettingsInitializeL( const TGeneralSettingsImageType aType );
+
+        /**
+        * Initializes this instance as blank image instance.
+        * @exception Can leave with one of the system wide error codes.
+        */
+        void BlankImageInitializeL();
+
+        /**
+        * Initializes this instance from image file.
+        * @param aFileName Name of the file from which this intance will be
+        * initialized.
+        * @exception Can leave with one of the system wide error codes.
+        */
+        void FileImageInitializeL( const TFileName& aFileName );
+
+        /**
+        * View finder timer callback. This method is called when view finder
+        * needs updating.
+        */
+        void VFTimer();
+
+        /**
+        * protocol timer callback. This method is called when new frame
+        * will be sent to consumer.
+        */
+        void ProtoTimer();
+
+        /**
+        * Method for creating timer for protocol. This method is called
+        * in Proto thread context.
+        * @exception Can leave with one of the system wide error codes.
+        */
+        void CreateProtoTimerL();
+
+        /**
+        * Releases protocol timer. This method is called in Protocol thread
+        * context.
+        */
+        void ReleaseProtoTimer();
+
+        /**
+        * Creates YUV buffer from still image. This method is called in Protocol
+        * thread context.
+        * @exception Can leave with one of the system wide error codes.
+        */
+        void CreateYUVDataL();
+
+        /**
+        * Release YUV buffer. This method is called in Protocol thread context.
+        */
+        void ReleaseYUVData();
+
+    private:    // Constructors and destructor
+
+        /**
+        * Constructor.
+        * @param "aObserver" Pointer to provider observer.
+        */
+        CVSStillImageDataProvider(
+            MVSDataProviderObserver* aObserver,
+            MVSBufferPool* aPool );
+
+        /**
+        * 2nd phase constructor.
+        * @exception Can leave with one of the system wide error codes.
+        */
+        void ConstructL();
+
+    private:    // Functions from base classes
+
+        /**
+        * Get video frame size.
+        */
+        virtual void GetVideoFrameSize(
+            TSize& aSize,
+            TInt aSizeIndex,
+            const TDesC8& aFormat );
+
+        /**
+        * Get video frame rate.
+        */
+        virtual void GetVideoFrameRate(
+            TReal32& aRate,
+            TInt aRateIndex,
+            const TDesC8& aFormat,
+            const TSize& aSize );
+
+        /**
+        * Returns current screen display mode.
+        */
+        TDisplayMode DisplayMode() const;
+				
+    private:
+        
+        // from MMultiframeprovider
+        /**
+        * @See MMultiframeprovider for description.
+        */
+        virtual void InitializeReady();
+				
+        /**
+        * @See MMultiframeprovider for description.
+        */
+				virtual void RefreshYUVData( TImageShareDataBuffer& aYUVBitMap );
+				
+				/**
+        * @See MMultiframeprovider for description.
+        */
+				virtual void RefreshViewFinder( TImageShareDataBuffer& aVFBitMap );
+				
+				/**
+        * @See MMultiframeprovider for description.
+        */
+				virtual void NotifyImageHandlingError( TInt aError );
+
+    public: // Data
+
+    protected:  // Data
+				 RCriticalSection iFreezeCS;
+    private:    // Data
+
+        // Provider state
+        enum TProviderState
+            {
+            EPSUninitialized,   // Provider is uninitialized
+            EPSStopped,         // Provider is initialized and stopped
+            EPSPrimed,          // Provider is initialized and ready for playing
+            EPSPlaying,         // Provider is playing
+            EPSInitializing,    // Provider is initializing
+            EPSUndoInitializing // Provider is undoinitializing
+            };
+
+        // Provider state
+        TProviderState iPSState;
+
+        // View finder state
+        enum TViewFinderState
+            {
+            EVFStopped, // View finder is not started
+            EVFPlaying  // View finder started
+            };
+
+        // View finder state
+        TViewFinderState iVFState;
+
+        // Source bitmap's name
+        TFileName iBitmapFileName;
+
+        // Pointer to view finder timer instance
+        CVSFrameRateTimer* iVFTimer; // owned
+
+        // Pointer to protocol timer instance
+        CVSFrameRateTimer* iProtoTimer; // owned, created in Proto thread context!
+
+        // Target image for CVtImageScaler
+        CVtImageBitmap* iScaled;
+        CVtImageBitmap* iYUVBitMap;
+
+        // Pointer to selected view finder image
+        CVtImageBitmap* iVFCurrent;
+        CVtImageBitmap* iVFBitmap;
+
+        // Pointer to active waiter instance
+        CVSActiveWait< CVSStillImageDataProvider >* iActiveWait; // owned
+
+        // Heap descriptor pointer that contains image as YUV
+        HBufC8* iYUVBuffer; // owned, created in Protocol thread context!
+
+        // Frame counter
+        TUint32 iFrameCount;
+
+        // protocol timer update rate
+        TInt iProtoUpdateRate;
+
+        // Rescaling recuirement flag
+        TBool iVFRescalingRequired;
+
+        // FireServer session instance
+        RFs iFs;
+
+        // Current display mode
+        TDisplayMode iDisplayMode;
+        
+        // Viewer instance
+        CMultiframeProvider* iViewer; //owned
+        
+        // Traget VF size
+        TSize iTargetSize;
+                
+        //Record TVSStillImageDataProviderParams::iInitialize in InitializeL(),
+        //used in CancelInitializing call 
+        TVSStillImageDataProviderParams::TInitialize iInitType;
+        
+    };
+
+#endif      // CVSSTILLIMTAGEDATAPROVIDER_H
+
+// End of File