vtprotocolplugins/VideoSource/inc/cmultiframeprovider.h
changeset 0 ed9695c8bcbe
child 32 890b5dd735f8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vtprotocolplugins/VideoSource/inc/cmultiframeprovider.h	Mon Nov 23 14:47:47 2009 +0200
@@ -0,0 +1,395 @@
+/*
+* Copyright (c) 2008 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 C_MULTIFRAMEPROVIDER_H
+#define C_MULTIFRAMEPROVIDER_H
+
+// INCLUDE FILES
+#include <f32file.h>
+#include <gdi.h>
+#include "cactivewait.h"
+#include "cvtimagescaler.h"
+#include "mmultiframeprovider.h"
+
+// FORWARD DECLARATIONS
+
+class CVtImageBitmap;
+class CImageDecoder;
+class CMultiframeloopAO;
+class TScalingMediator;
+class CMultiframeProvider;
+class CMultiframeDataAO;
+
+const TInt KFirstFrameIndx = 0;
+
+// CLASS DECLARATION
+// ============================ TScalingMediator ===============================
+/**
+*  Internal implementation of still scaling mediator 
+*  @lib videosource.lib
+*/
+
+NONSHARABLE_CLASS( TScalingMediator) : public MVtImageScalerObserver
+	{
+	public :
+			TScalingMediator();
+	public :
+			/**
+      * @see MVtImageScalerObserver::ScalingFinished( TInt aError )
+      */
+			void ScalingFinished( TInt aError );
+					
+			/**
+			* Sets waiter observer
+			*/
+			void SetWaiter( CVSActiveWait< CMultiframeProvider >* aWait );
+	private :
+			CVSActiveWait< CMultiframeProvider >* iWait;		
+	};
+
+
+// ============================ CMultiframeProvider ===============================
+/**
+*  Internal implementation of multiframe provider
+*  @lib videosource.lib
+*/
+NONSHARABLE_CLASS( CMultiframeProvider ) : public CBase
+    {
+
+    public :        // Constructors and destructor
+
+        /**
+        * Static factory function create instance of this class.
+        * @param "aObserver" Pointer to data provider observer.
+        * @param  aDisplayMode current display mode
+        * @exception Can leave with one of the system wide error codes.
+        * @return Pointer to new instance.
+        */
+        static CMultiframeProvider* NewL( MMultiframeprovider* aObserver, TDisplayMode aDisplayMode );
+
+        /**
+        * Destructor.
+        */
+        ~CMultiframeProvider();
+        
+
+    public :        // Functions from base classes
+    		
+    		/**
+        * Initializes this instance from image or multiframe 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 InitializeL( const TFileName* aFileName );
+    		
+        /**
+        * Cancel initialization of multiframe provider.
+        * @return ETrue if don't need to wait a error message.
+        */
+        TBool CancelInitializing();
+        
+    		/**
+        * Initializes this instance for blank image bitmap.
+        */
+    		void IniatializeBlankL();
+    		
+    		/**
+        * Initializes this instance for Generalsettings image bitmap.
+        */
+    		void IniatializeGSL( const TGeneralSettingsImageType aType );	
+    		/**
+        * Sets ViewFinder size
+        * @param aSize size of target bitmap (view finder)
+        */
+    		void SetVFScalingTargetSize( TSize aSize );
+		
+				/**
+        * Decodes and scales initialized image or multiframe file
+        * @param aFrameindex	index of frame to be decoded and scaled
+        */
+				void ConvertAndScaleL( TInt aFrameIndex );
+				
+				/**
+        * Scales and copies decoded frame for view finder display
+        * @param aSize size of target bitmap ( view fiender )
+        */
+				void ScaleCopy( TSize& aSize, TBool aVFUpdate = EFalse  );
+				
+				/**
+        * Signals looping AO to proceed to next frame
+        */
+				void NextFrame();
+				
+				/**
+        * Clears ViewFinder size
+        */
+				void ClearVFScalingTargetSize();
+				
+				/**
+        * Increases number of data consumers by one
+        */
+				void IncreaseDataConsumer();
+				
+				/**
+        * Decreases number of data consumers by one
+        * and if number is less than one it cancels data looping
+        * mechanism
+        */
+				void DecreaseDataConsumer();
+				
+				/**
+        * Adds used bitmap to free queue
+        */
+				void AddBitmapToFreeQueue();
+				
+				/**
+        * Indicates that second VF buffer needs to be used
+        */
+				void UseSecondVfBuffer();
+				
+				/**
+        * Indicates that VF has been stopped
+        */
+                TBool IsVFStopped();
+
+        /**
+         * Set ViewFinder of Multiframe provider to stop
+         */
+                void SetVFStop();
+
+        /**
+        * Wait for converting function exit 
+        */
+                void WaitForConverting();
+
+        /**
+        * Release converting flag 
+        */
+                void ReleaseForConverting();
+
+		private :    // Constructors and destructor
+
+        /**
+        * Constructor.
+        * @param "aObserver" Pointer to data provider observer.
+        * @param aDisplayMode current display mode
+        */
+        CMultiframeProvider( MMultiframeprovider* aObserver, TDisplayMode aDisplayMode  );
+
+        /**
+        * 2nd phase constructor.
+        * @exception Can leave with one of the system wide error codes.
+        */
+        void ConstructL();
+        
+        /**
+        * Image conversion finished callback. This method is called when image
+        * conversion is done.
+        * @param "aError" Error code. KErrNone if no error happened, one of the
+        * system wide error codes.
+        * otherwise.
+        */
+        void ConversionFinished( TInt aError );
+
+        /**
+        * Image scaling finished callback. This method is called when image
+        * scaling is done.
+        * @param "aError" Error code. KErrNone if no error happened, one of
+        * the system wide error codes.
+        */
+        void BMSScalingFinished( TInt aError );
+        
+        /**
+        * Scales VF to new size.
+        * @param "aSize" New VF size.
+        * the system wide error codes.
+        */
+        void ScaleVF( const TSize& aSize );
+
+        /**
+        * When view finder frame must be rescaled (wanted view finder size is
+        * neither QCIF nor QQQCIF) this callback will be called when the
+        * rescaling has finished.
+        * @param "aError" Error code. KErrNone if no error happened, one of
+        * the system wide error codes.
+        */
+        void VFRescalingFinished( TInt aError );
+
+        /**
+        * When view finder frames are rescaled this callback method will be
+        * called.
+        * @param "aError" Error code. KErrNone if no error happened, one of
+        * the system wide error codes.
+        */
+        void VFScalingReady();
+        
+        /**
+        * Creates blank bitmap with given size, color mode and color.
+        * @param "aBitmap" Bitmap pointer reference into which pointer to new
+        * isntance will be copied.
+        * @param "aSize" Size of the blank bitmap to be created.
+        * @param "aMode" Color mode for created bitmap.
+        * @param "aColor" Color of created bitmap.
+        * @exception Can leave with one of the system wide error codes.
+        */
+        void CreateBlankBitmapL( CFbsBitmap*& aBitmap, const TSize& aSize, const TDisplayMode& aMode, const TRgb& aColor );
+        
+    public : // Data
+    
+    		TBool iAnimation;
+    		
+    		TBool iConvertAndScale;    
+		
+		protected:  // Data
+				 
+				RCriticalSection iFreezeCS;
+		
+		private : //Data
+		
+        						
+        // Source image for CVtImageScaler
+        CVtImageBitmap* iConverted;
+        
+        // Target image for CVtImageScaler
+        CVtImageBitmap* iScaled;
+				CVtImageBitmap* iBuffer1;
+				CVtImageBitmap* iBuffer2;
+				
+				// Pointer to remote image
+				CVtImageBitmap* iYUVBitMap;
+        
+        // Pointer to QCIF sized view finder image
+        CVtImageBitmap* iVFbitmap;
+        CVtImageBitmap* iFirstVfBuf;
+        CVtImageBitmap* iSecondVfBuf;
+        
+        // Boolean values of VF buffer validation
+        TBool iSecondVFBuffer;
+        TBool iFirstVFBuffer;
+        
+        // Pointer to bitmap loaded from GS
+        CVtImageBitmap* iGSBitmap;
+
+        // Pointer to selected view finder image
+        CVtImageBitmap* iVFCurrent;
+        
+        // Viewer AO instance
+        CMultiframeloopAO* iLoopAo;// owned
+
+        // Initalisation scaling mediator
+        TScalingMediator iInitMediator;
+
+        // ViewFinder scaling scaling mediator
+        TScalingMediator iScalingMediator;
+
+        // Waiter instance for initialisation
+        CVSActiveWait< CMultiframeProvider >* iActiveWaitInit;// owned
+
+        // Waiter instance for scaling
+        CVSActiveWait< CMultiframeProvider >* iActiveWaitScale;// owned
+
+        // Waiter instance for scaling
+        CVSActiveWait< CMultiframeProvider >* iActiveWaitInitScale; // owned
+
+        // VT image scaler instance for initialisation
+        CVtImageScaler*  iVtImageScalerInit; // owned
+
+        // VT image scaler instance for scaling
+        CVtImageScaler*  iVtImageScalerScale; // owned
+
+        // Image decoder instance
+        CImageDecoder* iImageDecoder; // owned
+
+        // Wanted view finder size
+        TSize iWantedVFSize;
+        
+        // FireServer session instance
+        RFs iFs;
+        
+        // Current display mode
+        TDisplayMode iDisplayMode;
+        
+        // Rescaling recuirement flag
+        TBool iVFRescalingRequired;
+        
+        // Multiframe observer instance
+        MMultiframeprovider* iObserver;
+        
+        // VF bitmap size
+        TSize iTargetSize;
+        
+        // Is blank image share
+        TBool iBlank;
+        
+        // Is GS image share
+        TBool iGSImage;
+        
+        // Is second bitmap in use
+        TBool iOldBM;
+        
+        // Pointer to old bitmap
+        CVtImageBitmap* iOldBitmap;
+        
+        // Frame count
+      	TInt iCount;
+      	
+      	// Is initialization ongoing flag
+      	TBool iInitialization;
+      	
+      	// Frame delay
+      	TTimeIntervalMicroSeconds iDelay;
+      	
+      	// Start time for image conversion
+      	TTime iStartTime;
+      	
+      	// Data timer expiration / Frame update time
+      	TTimeIntervalMicroSeconds iFrameUpdateTime;
+      	
+      	// Pointer to data timer AO
+      	CMultiframeDataAO* iDataTimer;
+      	
+      	// Number of data consumers
+      	TInt iNumOfConsumers;
+      	
+      	// Queue for bitmaps that are free for use
+        RPointerArray<CVtImageBitmap> iFreeQueue;
+        
+        // Pointer to bitmap mask
+        CFbsBitmap* iMask;
+        
+        // Pointer to temporary bitmap
+        CVtImageBitmap* iTempBM;
+        
+        TSize iVFSize;
+        
+        // Boolean value of VF buffer update
+        TBool iVFUpdate; 
+        
+        // file handle to default VT image
+        RFile iDefaultImageFile;
+        // Boolean value of VF buffer stopping
+        TBool iIsVfStopped;
+        
+        // Boolean value of VF buffer stopping
+        TBool iWaitForConverting;
+      };
+				
+#endif      // C_MULTIFRAMEPROVIDER_H
+
+// End of File