vtprotocolplugins/DisplaySink/inc/CVtImageConverter.h
changeset 0 ed9695c8bcbe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vtprotocolplugins/DisplaySink/inc/CVtImageConverter.h	Mon Nov 23 14:47:47 2009 +0200
@@ -0,0 +1,638 @@
+/*
+* 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 conversion library for VideoTelephony.
+*
+*/
+
+
+
+
+
+#ifndef CVTIMAGECONVERTER_H
+#define CVTIMAGECONVERTER_H
+
+// INCLUDE FILES
+
+#include <e32base.h>
+#include <gdi.h>
+
+// CLASS FORWARDS
+
+class CFbsBitmap;
+class CVTYUVFbsBitmapConverter;
+class CVSFbsBitmapIYUVConverter;
+
+// DATA TYPES
+
+typedef TRgb ( *TVSColorReadFunc ) ( TAny*& );
+
+// CLASS DECLARATIONS
+
+/**
+*  Base class for all YUV to CFbsBitmap converters.
+*
+*  @lib VTImageConverter.lib
+*/
+class CVTYUVFbsBitmapConverter : public CBase
+    {
+    public:  // Constructors and destructor
+
+        /**
+        * C++ destructor.
+        */
+        IMPORT_C ~CVTYUVFbsBitmapConverter();
+
+    public: // New functions
+
+        /**
+        * Starts image conversion from YUV to CFbsBitmap.
+        * @exception Can leave with one of the system wide error codes.
+        */
+        IMPORT_C virtual void ProcessL();
+
+        /**
+        * Sets size of the source YUV image in pixels. This must be implemented
+        * in derived classes.
+        * @param "aSize" Size of source YUV image in pixels.
+        * @exception Can leave with one of the system wide error codes.
+        */
+        virtual void SetSourceSizeL( const TSize& aSize ) = 0;
+
+        /**
+        * Sets source YUV image data. This method must be implemented in derived
+        * classes.
+        * @param "aSourceData" 8-bit descriptor containing the YUV data. As
+        * data is referenced and not copied, given reference must be still
+        * valid when ProcessL() is called.
+        * @exception Can leave with one of the system wide error codes.
+        */
+        virtual void SetSourceL( const TDesC8& aSourceData ) = 0;
+
+        /**
+        * Sets size of the source YUV image in pixels and image data.
+        * This method must be implemented in derived classes.
+        * @param "aSize" Size of source YUV image in pixels.
+        * @param "aSourceData" 8-bit descriptor containing the YUV data.
+        * As data is referenced and not copied, given reference must be still
+        * valid when ProcessL() is called.
+        * @exception Can leave with one of the system wide error codes.
+        */
+        virtual void SetSourceL(
+            const TSize& aSize,
+            const TDesC8& aSourceData ) = 0;
+
+        /**
+        * Sets destination bitmap into which conversion will be made.
+        * @param "aDestinationBitmap" Reference to destination bitmap.
+        * @exception Can leave with one of the system wide error codes.
+        */
+        IMPORT_C virtual void SetDestinationL(
+            const CFbsBitmap& aDestinationBitmap );
+
+        /**
+        * Sets destination bitmap into which conversion will be made.
+        * Bitmap is given as handle to existing bitmap.
+        * @param "aHandle" Handle to existing bitmap.
+        * @exception Can leave with one of the system wide error codes.
+        */
+        IMPORT_C virtual void SetDestinationL( TInt aHandle );
+
+    public: // Functions from base classes
+
+    protected:  // New functions
+
+        /**
+        * Updates iY, iU and iV member variables. Must be implemented in
+        * derived classes.
+        * @param "aSourceData" 8-bit descriptor to source YUV data.
+        */
+        virtual void SetYUVPtrs( const TDesC8& aSourceData ) = 0;
+
+        /**
+        * Second phase constructor.
+        * @param "aBitmapHandle" Handle to destination bitmap.
+        * @exception Can leave with one of the system wide error codes.
+        */
+        virtual void ConstructL( TInt aBitmapHandle );
+
+        /**
+        * Second phase constructor that will be called when destination is
+        * changed.
+        * @param "aBitmapHandle" Handle to destination bitmap.
+        * @exception Can leave with one of the system wide error codes.
+        */
+        virtual void ReConstructL( TInt aBitmapHandle );
+
+        /**
+        * Updates internal variables.
+        * @exception Can leave with one of the system wide error codes.
+        */
+        virtual void SizeUpdateL();
+
+        /**
+        * C++ constructor.
+        * @param "aSourceSize" Source size in pixels.
+        */
+        CVTYUVFbsBitmapConverter( const TSize& aSourceSize );
+
+        /**
+        * Returns source size in pixels.
+        * @return Source size in pixels, as constant reference.
+        */
+        inline const TSize& SourceSize() const;
+
+        /**
+        * Returns source size in pixels.
+        * @return Source size in pixels, as reference.
+        */
+        inline TSize& SourceSize();
+
+        /**
+        * Returns destination size in pixels.
+        * @return Destination size in pixels, as constant reference.
+        */
+        inline const TSize& DestinationSize() const;
+
+        /**
+        * Returns destination size in pixels.
+        * @return Destination size in pixels, as reference.
+        */
+        inline TSize& DestinationSize();
+
+        /**
+        * Main process loop for Color4K mode. This must be implemented in
+        * derived classes.
+        * @param "aWriteFunction" Pointer to function that writes one pixel to
+        * destination.
+        */
+        virtual void DoProcess4K() = 0;
+
+        /**
+        * Main process loop for Color64K mode. This must be implemented in
+        * derived classes.
+        * @param "aWriteFunction" Pointer to function that writes one pixel
+        * to destination.
+        */
+        virtual void DoProcess64K() = 0;
+
+        /**
+        * Main process loop for Color16M mode. This must be implemented in
+        * derived classes.
+        * @param "aWriteFunction" Pointer to function that writes one pixel
+        * to destination.
+        */
+        virtual void DoProcess16M() = 0;
+
+        /**
+        * Main process loop for Color16MU mode. This must be implemented in
+        * derived classes.
+        * @param "aWriteFunction" Pointer to function that writes one pixel
+        * to destination.
+        */
+        virtual void DoProcess16MU16MA() = 0;
+
+    protected:  // Functions from base classes
+
+    private:    // New functions
+
+        /**
+        * C++ default constructor.
+        */
+        CVTYUVFbsBitmapConverter();
+
+    private:    // Functions from base classes
+
+    public: // Data
+
+    protected:  // Data
+
+        // Table of coefficients for EColor4K
+        static const TUint8 COFF_TBL_4K[ 80 ];
+
+        // Table of coefficients for EColor64K
+        static const TUint8 COFF_TBL_64K[ 220 ];
+
+        // Table of coefficients for EColor16M
+        static const TUint8 COFF_TBL_16M[ 528 ];
+
+        // Source size in pixels.
+        TSize iSourceSize;
+
+        // Target size in pixels.
+        TSize iDestinationSize;
+
+        // Pointer to destination bitmap.
+        CFbsBitmap* iDestination; // owned, duplicate
+
+        // Pointer descriptor that points to Y data of the YUV image.
+        const TUint8* iY;
+
+        // Pointer descriptor that points to Cr (U) data of the YUV image.
+        const TUint8* iU;
+
+        // Pointer descriptor that points to Cb (V) data of the YUV image.
+        const TUint8* iV;
+
+        // Horizontal skip real value. After every pixel this valus is added
+        // to X index in conversion loop.
+        TReal32 iVSkipReal;
+
+        // Vertical skip real value. After every pixel this valus is added
+        // to Y index in conversion loop.
+        TReal32 iHSkipReal;
+
+    private:    // Data
+    };
+
+/**
+*  Base class for YUV 4:2:0 planar image to CFbsBitmap converters.
+*
+*  @lib VTImageConverter.lib
+*/
+class CVTYUVPlanarFbsBitmapConverter : public CVTYUVFbsBitmapConverter
+    {
+    public: // New functions
+
+    public: // Functions from base classes
+
+        /**
+        * Sets size of the source YUV image in pixels.
+        * @param "aSize" Size of source YUV image in pixels.
+        * @exception Can leave with one of the system wide error codes.
+        */
+        IMPORT_C void SetSourceSizeL( const TSize& aSize );
+
+        /**
+        * Sets source YUV image data.
+        * @param "aSourceData" 8-bit descriptor containing the YUV data. As
+        * data is referenced and
+        * not copied, given reference must be still valid when ProcessL() is
+        * called.
+        * @exception Can leave with one of the system wide error codes.
+        */
+        IMPORT_C void SetSourceL( const TDesC8& aSourceData );
+
+        /**
+        * Sets size of the source YUV image in pixels and image data. This
+        * method must be
+        * implemented in derived classes.
+        * @param "aSize" Size of source YUV image in pixels.
+        * @param "aSourceData" 8-bit descriptor containing the YUV data. As
+        * data is referenced and
+        * not copied, given reference must be still valid when ProcessL() is
+        * called.
+        * @exception Can leave with one of the system wide error codes.
+        */
+        IMPORT_C void SetSourceL(
+            const TSize& aSize,
+            const TDesC8& aSourceData );
+
+    protected:  // Constructors and destructor
+
+        /**
+        * C++ constructor.
+        * @param "aSourceSize" Source size in pixels.
+        */
+        CVTYUVPlanarFbsBitmapConverter( const TSize& aSourceSize );
+
+    protected:  // New functions
+
+    protected:  // Functions from base classes
+
+        /**
+        * Main process loop for Color4K mode.
+        * @param "aWriteFunction" Pointer to function that writes one pixel
+        * to destination.
+        */
+        void DoProcess4K();
+
+        /**
+        * Main process loop for Color4K mode when scaling is not required.
+        * @param "aWriteFunction" Pointer to function that writes one pixel
+        * to destination.
+        */
+        void DoProcess4KNoScale();
+
+        /**
+        * Main process loop for Color64K mode.
+        * @param "aWriteFunction" Pointer to function that writes one pixel
+        * to destination.
+        */
+        void DoProcess64K();
+
+        /**
+        * Main process loop for Color64K mode when scaling is not required.
+        * @param "aWriteFunction" Pointer to function that writes one pixel
+        * to destination.
+        */
+        void DoProcess64KNoScale();
+
+        /**
+        * Main process loop for Color16M mode.
+        * @param "aWriteFunction" Pointer to function that writes one pixel
+        * to destination.
+        */
+        void DoProcess16M();
+
+        /**
+        * Main process loop for Color16M mode when scaling is not required.
+        * @param "aWriteFunction" Pointer to function that writes one pixel
+        * to destination.
+        */
+        void DoProcess16MNoScale();
+
+        /**
+        * Main process loop for Color16MU and Color16MA modes.
+        * @param "aWriteFunction" Pointer to function that writes one pixel
+        * to destination.
+        */
+        void DoProcess16MU16MA();
+
+        /**
+        * Main process loop for Color16MU and Color16MA modes when scaling is
+        * not required.
+        * @param "aWriteFunction" Pointer to function that writes one pixel
+        * to destination.
+        */
+        void DoProcess16MU16MANoScale();
+
+    private:    // New functions
+
+        /**
+        * C++ default constructor.
+        */
+        CVTYUVPlanarFbsBitmapConverter();
+
+    private:    // Functions from base classes
+    };
+
+/**
+*  FourCC IYUV image to CFbsBitmap converter (see IYUV description below).
+*
+*  All Y samples are found first in memory as an array of unsigned char
+*  (possibly with a larger stride for memory alignment), followed immediately
+*  by all Cr (U) samples (with half the stride of the Y lines, and half the
+*  number of lines), then followed immediately by all Cb (V) samples in a
+*  similar fashion.
+*
+*  @lib VTImageConverter.lib
+*/
+class CVTIYUVFbsBitmapConverter : public CVTYUVPlanarFbsBitmapConverter
+    {
+    public: // Constructors and destructor
+
+        /**
+        * Static factory function to create instance of this class.
+        * @param "aSourceSize" Size of source image in pixels.
+        * @param "aDestination" Reference to destination bitmap.
+        * @exception Can leave with one of the system wide error codes.
+        * @return Pointer to newly created instance.
+        */
+        IMPORT_C static CVTIYUVFbsBitmapConverter* NewL(
+            const TSize& aSourceSize,
+            const CFbsBitmap& aDestination );
+
+        /**
+        * Static factory function to create instance of this class.
+        * @param "aSourceSize" Size of source image in pixels.
+        * @param "aBitmapHandle" Handle to destination bitmap.
+        * @exception Can leave with one of the system wide error codes.
+        * @return Pointer to newly created instance.
+        */
+        IMPORT_C static CVTIYUVFbsBitmapConverter* NewL(
+            const TSize& aSourceSize,
+            TInt aBitmapHandle );
+
+    public: // New functions
+
+    public: // Functions from base classes
+
+    protected:  // New functions
+
+    protected:  // Functions from base classes
+
+    private:    // New functions
+
+    private:    // Functions from base classes
+
+        /**
+        * Updates iY, iU and iV member variables.
+        * @param "aSourceData" 8-bit descriptor to source YUV data.
+        */
+        void SetYUVPtrs( const TDesC8& aSourceData );
+
+    private:    // Constructors and destructor
+
+        /**
+        * C++ destructor.
+        * @param "aSourceSize" Source size in pixels.
+        */
+        CVTIYUVFbsBitmapConverter( const TSize& aSourceSize );
+
+        /**
+        * C++ default constructor.
+        */
+        CVTIYUVFbsBitmapConverter();
+    };
+
+/**
+*  FourCC YV12 image to CFbsBitmap converter (see YV12 description below).
+*
+*  All Y samples are found first in memory as an array of unsigned char
+*  (possibly with a larger stride for memory alignment), followed immediately
+*  by all Cb (V) samples (with half the stride of the Y lines, and half the
+*  number of lines), then followed immediately by all Cr (U) samples in a
+*  similar fashion.
+*
+*  @lib VTImageConverter.lib
+*/
+class CVTYV12FbsBitmapConverter : public CVTYUVPlanarFbsBitmapConverter
+    {
+    public: // Constructors and destructor
+        /**
+        * Static factory function to create instance of this class.
+        * @param "aSourceSize" Size of source image in pixels.
+        * @param "aDestination" Reference to destination bitmap.
+        * @exception Can leave with one of the system wide error codes.
+        * @return Pointer to newly created instance.
+        */
+        IMPORT_C static CVTYV12FbsBitmapConverter* NewL(
+            const TSize& aSourceSize,
+            const CFbsBitmap& aDestination );
+
+        /**
+        * Static factory function to create instance of this class.
+        * @param "aSourceSize" Size of source image in pixels.
+        * @param "aBitmapHandle" Handle to destination bitmap.
+        * @exception Can leave with one of the system wide error codes.
+        * @return Pointer to newly created instance.
+        */
+        IMPORT_C static CVTYV12FbsBitmapConverter* NewL(
+            const TSize& aSourceSize,
+            TInt aBitmapHandle );
+
+    public: // New functions
+
+    public: // Functions from base classes
+
+    protected:  // New functions
+
+    protected:  // Functions from base classes
+
+    private:    // New functions
+
+    private:    // Functions from base classes
+
+        /**
+        * Updates iY, iU and iV member variables.
+        * @param "aSourceData" 8-bit descriptor to source YUV data.
+        */
+        void SetYUVPtrs( const TDesC8& aSourceData );
+
+    private: // Constructors and destructor
+
+        /**
+        * C++ destructor.
+        * @param "aSourceSize" Source size in pixels.
+        */
+        CVTYV12FbsBitmapConverter( const TSize& aSourceSize );
+
+        /**
+        * C++ default constructor.
+        */
+        CVTYV12FbsBitmapConverter();
+    };
+
+/**
+*  CFbsBitmap to FourCC IYUV image converter (see IYUV description below).
+*
+*  All Y samples are found first in memory as an array of unsigned char
+*  (possibly with a larger stride for memory alignment), followed immediately
+*  by all Cr (U) samples (with half the stride of the Y lines, and half the
+*  number of lines), then followed immediately by all Cb (V) samples in a
+*  similar fashion.
+*
+*  @lib VTImageConverter.lib
+*/
+class CVSFbsBitmapIYUVConverter : public CBase
+    {
+    public: // Constructors and destructor
+
+        /**
+        * Static factory function to create instance of this class.
+        * @param "aBitmap" Reference to source bitmap.
+        * @exception Can leave with one of the system wide error codes.
+        * @return Pointer to newly created instance.
+        */
+        IMPORT_C static CVSFbsBitmapIYUVConverter* NewL(
+            const CFbsBitmap& aBitmap );
+
+        /**
+        * C++ destructor.
+        */
+        IMPORT_C ~CVSFbsBitmapIYUVConverter();
+
+    public: // New functions
+
+        /**
+        * Sets new source bitmap.
+        * @param "aBitmap" Reference to new source bitmap.
+        */
+        IMPORT_C void SetSourceL( const CFbsBitmap& aBitmap );
+
+        /**
+        * Starts image conversion from CFbsBitmap to YUV.
+        * @exception Can leave with one of the system wide error codes.
+        */
+        IMPORT_C void ProcessL();
+
+        /**
+        * After successfull ProcessL() call converted YUV image data can be
+        * fetched using this method.
+        * @return 8-bit pointer descriptor (constant) to YUV image data.
+        */
+        IMPORT_C TPtrC8 YUVData() const;
+
+    public: // Functions from base classes
+
+    protected:  // New functions
+
+    protected:  // Functions from base classes
+
+    private:    // Constructors and destructor
+
+        /**
+        * C++ default constructor.
+        */
+        CVSFbsBitmapIYUVConverter();
+
+        /**
+        * Second phase constructor.
+        * @param "aBitmap" Reference to source bitmap.
+        * @exception Can leave with one of the system wide error codes.
+        */
+        void ConstructL( const CFbsBitmap& aBitmap );
+
+    private:    // New functions
+
+        /**
+        * Second phase constructor that is called when source is changed.
+        * @param "aBitmap" Reference to source bitmap.
+        * @exception Can leave with one of the system wide error codes.
+        */
+        void ReConstructL( const CFbsBitmap& aBitmap );
+
+        /**
+        * Main process loop.
+        * @param "aReadFunction" Pointer to function that reads one pixel from
+        * source.
+        */
+        void DoProcess( TVSColorReadFunc aReadFunction );
+
+    private:    // Functions from base classes
+
+    public: // Data
+
+    protected:  // Data
+
+    private:    // Data
+
+        // Destination size in pixels.
+        TSize iSize;
+
+        // Pointer to source bitmap.
+        CFbsBitmap* iSource; // owned, duplicate
+
+        // Heap descriptor that contains converted YUV data.
+        HBufC8* iYUVData; // owned
+
+        // Pointer descriptor that points to Y data of the YUV image.
+        TPtrC8 iY;
+
+        // Pointer descriptor that points to Cr (U) data of the YUV image.
+        TPtrC8 iU;
+
+        // Pointer descriptor that points to Cb (V) data of the YUV image.
+        TPtrC8 iV;
+    };
+
+// INLINE METHODS
+#include "cvtimageconverter.inl"
+
+
+#endif // CVTIMAGECONVERTER_H
+
+// End of File
+
+