diff -r 000000000000 -r 951a5db380a0 videoeditorengine/vedtranscoder/inc/ctrscaler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videoeditorengine/vedtranscoder/inc/ctrscaler.h Fri Jan 29 14:08:33 2010 +0200 @@ -0,0 +1,126 @@ +/* +* Copyright (c) 2010 Ixonos Plc. +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the "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: +* Ixonos Plc +* +* Description: +* Resampling framework for YUV 4.2.0. +* +*/ + + + +#ifndef CTRSCALER_H +#define CTRSCALER_H + + +// INCLUDES +#include +#include "ctrcommon.h" + + +// Scaler operations +enum EResamplingOpereation + { + EOperationNone, + EDoubleSize, // Resize to 200% + EUpSampling, // Resize to 101% or more + EOperationCopy, // No resize (100%) + EOperationCopyWithBB, // No resize, add black borders + EDownSampling, // Resize to 99% or less + EHalveSize, // Resize to 50% + EUpDownSampling // Resize with strech + }; + +// Scaler class, supports resampling operations with YUV 4.2.0 format; +NONSHARABLE_CLASS(CTRScaler) : public CBase + { + public: + static CTRScaler* NewL(); + + // Destructor + ~CTRScaler(); + + public: + void Scale(); + + // Sets operations + void SetScalerOptionsL( TPtr8& aSrc, TPtr8& aTrg, TSize& aSrcSize, TSize& aTrgSize ); + + // Checks if aspect ratio is wide + TBool IsWideAspectRatio(TSize aSize); + + // Calculates intermediate resolution for use with black boxing + TBool GetIntermediateResolution(TSize aSrcSize, TSize aTrgSize, TSize& aTargetResolution, TSize& aBlackBoxing); + + // Returns a time estimate of how long it takes to resample a frame + TReal EstimateResampleFrameTime(const TTRVideoFormat& aInput, const TTRVideoFormat& aOutput); + + private: + CTRScaler(); + + // Second phase constructor + void ConstructL(); + + // Resampling operations + void ResampleBilinear(TSize& aSrcSize, TSize& aTrgSize, TSize& aBlackBoxing); + void ResampleHalve(TSize& aSrcSize, TSize& aTrgSize, TSize& aBlackBoxing); + void ResampleDouble(TSize& aSrcSize, TSize& aTrgSize); + + // Called when resizing to less than 50% of the original size + void DoHalveAndBilinearResampleL(); + + // No resampling, copy frame and add black borders. + void CopyWithBlackBoxing(TSize& aSrcSize, TSize& aTrgSize, TSize& aBlackBoxing); + + private: + // Source buffer + TUint8* iSrc; + + // Destination buffer + TUint8* iTrg; + + // Source resolution + TSize iSrcSize; + + // Target resolution + TSize iTrgSize; + + // Resampling operation + TInt iOperation; + + // Trg data size + TUint iTrgDataSize; + + // Initial src ptr + TUint8* iSrcInit; + + // Initial trg ptr + TUint8* iTrgInit; + + // Scale X + TInt iScaleXInt; + + // Scale Y + TInt iScaleYInt; + + TPtr8* iTrgBuffer; + + // For storing width/height of black border area + TSize iBlackBoxing; + + }; + + + + +#endif