videoeditorengine/vedtranscoder/inc/ctrscaler.h
changeset 0 951a5db380a0
--- /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 <e32base.h>
+#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