diff -r 000000000000 -r ed9695c8bcbe vtprotocolplugins/DisplaySink/inc/CVtImageScaler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vtprotocolplugins/DisplaySink/inc/CVtImageScaler.h Mon Nov 23 14:47:47 2009 +0200 @@ -0,0 +1,247 @@ +/* +* Copyright (c) 2004 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: Image Transforms subsystem. +* +*/ + + + + + +#ifndef CVTIMAGESCALER_H +#define CVTIMAGESCALER_H + +// INCLUDE FILES + +#include + +// FORWARD DECLARATIONS + +class CVtImageScalerImpl; +class CVtImage; +class CFbsBitmap; + +// CLASS DECLARATIONS + +/** +* Image scaler observer interface. +* +* @lib videosource.lib +*/ +class MVtImageScalerObserver + { + public: + /** + * Callback method that is called by CVtImageScaler when scaling has + * finished. + * @param "aError" KErrNone if the scaling was done successfully, one + * of the system wide error codes otherwise. + * @return Pointer to newly created instance. + */ + virtual void ScalingFinished( TInt aError ) = 0; + }; + +/** +* Image scaler. +* +* @lib videosource.lib +*/ +class CVtImageScaler : public CActive + { + public: + + /** + * An enumeration within the CVtImageScaler namespace. + * It provides a set of panic codes that may happen during + * scaling process. + */ + enum TPanics + { + /** + * RotateL() is called while previous rotation process + * has not yet been finished. + */ + EBusy = 1 + }; + + /** + * An enumeration within the CVtImageScaler namespace. + * It provides a set of supported scaling quality settings. + */ + enum TQuality + { + /** + * Nearest neigbour algorithm. Fast but poor image quality + * when scale factor exceeds 2x. + */ + ENearest, + + /** + * Weighted average algorithm. Slower than Nearest Neighbour + * but also better image quality when scaling at factor 2x or + * higher. + */ + EWeightedAverage, + + /** + * Bilinear scaling algorithm. Slower than Weighted Average + * but also better image quality. + */ + EBilinear + }; + + public: + + /** + * Creates new instance of CVtImageScaler. + * @param "aObserver" Reference to instance observer. + * @param "aQuality" Scaling quality. If this is omitted, then default + * value of EWeightedAverage is used. + * @param "aPriority" Active object priority. + * @exception In error situation leaves with one of the system wide + * error codes. + * @return Pointer to newly created instance. + */ + IMPORT_C static CVtImageScaler* NewL( + MVtImageScalerObserver& aObserver, + TQuality aQuality = EWeightedAverage, + TPriority aPriority = EPriorityStandard ); + + /** + * C++ destructor. + */ + IMPORT_C ~CVtImageScaler(); + + /** + * Sets scaling quality. + * @param "aQuality" Scaling quality. + * @exception In error situation leaves with one of the system wide + * error codes. + */ + IMPORT_C void SetQualityL( TQuality aQuality ); + + /** + * Scales image to new size. + * @param "aSource" Source image that will be scaled. + * @param "aTarget" Target image that will hold the scaled image. New + * image's dimensions + * will be taken from the size of target image. + * @exception In error situation leaves with one of the system wide + * error codes. + */ + IMPORT_C void ScaleL( const CVtImage& aSource, CVtImage& aTarget ); + + /** + * Scales image to new size. Possible error during initialization is + * returned via MVtImageScalerObserver. + * @param "aSource" Source image that will be scaled. + * @param "aTarget" Target image that will hold the scaled image. New + * image's dimensions will be taken from the size of target image. + */ + IMPORT_C void Scale( const CVtImage& aSource, CVtImage& aTarget ); + + /** + * Scales image to new size. This scale method is synchronous and + * aTarget will contain scaled image of aSource on return. This method + * may leave if aSource and/or aTarget are not suitable for scaling. + * MVtImageScalerObserver::ScalingFinished is not called when this + * method is used. + * @param "aSource" Source image that will be scaled. + * @param "aTarget" Target image that will hold the scaled image. New + * image's dimensions will be taken from the size of target image. + */ + IMPORT_C void ScaleNowL( const CVtImage& aSource, CVtImage& aTarget ); + + private: // internal + + /** + * C++ default constructor. + */ + CVtImageScaler(); + + /** + * C++ constructor. + * @param "aObserver" Reference to observer. + * @param "aPriority" Active object priority. + * @exception In error situation leaves with one of the system wide + * error codes. + */ + CVtImageScaler( MVtImageScalerObserver& aObserver, TPriority aPriority ); + + /** + * Second phase constructor. + * @param "aQuality" Quality of the scaling. + * @exception In error situation leaves with one of the system wide + * error codes. + */ + void ConstructL( TQuality aQuality ); + + /** + * Sets iStatus to KRequestPending and calls CActive::SetActive(). + */ + void Activate(); + + /** + * Signals this instance AO with given error code. + * @param "aError" Signalling error code. + */ + void Signal( TInt aError ); + + private: // from CActive + + /** + * This is defined in CActive. Check CActive for description. + */ + void RunL(); + + /** + * This is defined in CActive. Check CActive for description. + */ + void DoCancel(); + + /** + * Scale method called by the CAsyncCallBack. + */ + static TInt StaticScale( TAny* aPtr ); + + /** + * Scale method called by the StaticScale. + */ + void DoScale(); + + private: + + // Scaling observer + MVtImageScalerObserver& iObserver; + + // Active quality implementation + CVtImageScalerImpl* iScalerImpl; // owned + + // Bitmap that will be used for locking global bitmap heap + CFbsBitmap* iHeapLock; // owned + + // Asynccallback instance + CAsyncCallBack* iAsyncCallBack; // owned + + // This is set to ETrue in DoCancel() method, and when CAsyncCallBack + // gets executed, iCancelled is checked whether scaling should be done + // or not. + TBool iCancelled; + }; + +#endif // CVTIMAGESCALER_H + +// End of File + +