imaging/imagingfws/src/ImageProcessorPriv.h
changeset 0 5752a19fdefe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imaging/imagingfws/src/ImageProcessorPriv.h	Wed Aug 25 12:29:52 2010 +0300
@@ -0,0 +1,375 @@
+// Copyright (c) 1998-2009 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:
+//
+
+#ifndef ___IMAGEPROCESSORPRIV_H__
+#define ___IMAGEPROCESSORPRIV_H__
+
+#include <icl/imageprocessor.h>
+#include "fwextconstants.h"
+
+//The size of the index lookup table
+const TInt KIndexLookupSize = 256;
+
+class CColorImageProcessor; // declared here
+/**
+ * @internalComponent
+ *
+ * @see CImageProcessor.
+ *
+ */
+NONSHARABLE_CLASS( CColorImageProcessor ): public CImageProcessorExtension
+	{
+public:
+	virtual ~CColorImageProcessor();
+	// From CImageProcessor (Default implementations)
+	TBool SetPixelRun(TRgb aColor,TInt aCount);
+	TBool SetPixels(TRgb* aColorBuffer,TInt aBufferLength);
+	TBool SetMonoPixel(TInt aGray256);
+	TBool SetMonoPixelRun(TInt aGray256,TInt aCount);
+	TBool SetMonoPixels(TUint32* aGray256Buffer,TInt aBufferLength);
+	TBool SetMonoPixelBlock(TUint32* aGray256Buffer);
+protected:
+	// New - to facilitate default implementation of SetMonoPixelBlock()
+	void CreateBlockBufferL(TInt aBlockArea);
+protected:
+	// Used by default implementation of SetMonoPixelBlock()
+	TRgb*	iBlockBuffer;
+	TInt	iBlockArea;
+	};
+
+class CMonochromeImageProcessor; // declared here
+/**
+ * @internalComponent
+ *
+ * @see CImageProcessor.
+ *
+ */
+NONSHARABLE_CLASS( CMonochromeImageProcessor ): public CImageProcessorExtension
+	{
+public:
+	virtual ~CMonochromeImageProcessor();
+	// From CImageProcessor (Default implementations)
+	TBool SetPixel(TRgb aColor);
+	TBool SetPixelRun(TRgb aColor,TInt aCount);
+	TBool SetPixels(TRgb* aColorBuffer,TInt aBufferLength);
+	TBool SetPixelBlock(TRgb* aColorBuffer);
+	TBool SetMonoPixelRun(TInt aGray256,TInt aCount);
+	TBool SetMonoPixels(TUint32* aGray256Buffer,TInt aBufferLength);
+protected:
+	// New - to facilitate default implementation of SetPixelBlock()
+	void CreateBlockBufferL(TInt aBlockArea);
+protected:
+	// Used by default implementation of SetPixelBlock()
+	TUint32* iBlockBuffer;
+	TInt	 iBlockArea;
+	};
+
+class CPixelWriter; // declared here
+/**
+ * @internalComponent
+ *
+ * @see CColorImageProcessor.
+ *
+ */
+NONSHARABLE_CLASS( CPixelWriter ): public CColorImageProcessor
+	{
+public:
+	static CPixelWriter* NewL();
+	virtual ~CPixelWriter();
+	// From CImageProcessor
+	void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect);
+	void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize& aRgbBlockSize);
+	void SetYPosIncrement(TInt aYInc);
+	void SetLineRepeat(TInt aLineRepeat);
+	void SetPixelPadding(TInt aNumberOfPixels);
+	TBool SetPixel(TRgb aColor);
+	TBool SetPixelRun(TRgb aColor,TInt aCount);
+	TBool SetPixels(TRgb* aColorBuffer, TInt aBufferLength);
+	TBool SetPixelBlock(TRgb* aColorBuffer);
+	TBool SetPos(const TPoint& aPosition);
+	TBool FlushPixels();
+protected:
+	// New
+	CPixelWriter();
+	virtual void Reset();
+	virtual void DoPrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize* aBlockSize);
+	virtual void SetPixelBufferIndex(TRgb* aColorBuffer,TInt aCount);	//Used by FlushPixels to convert buffered 'SetPixel's
+	virtual void SetPixelBlockIndex(TRgb* aColorBuffer);	//Used by SetPixelBlock
+	virtual TBool NewLine();
+protected:
+	TInt iYInc;
+	TInt iLineRepeat;
+	TInt iPixelPadding;
+	TInt iPixelsToSkip;
+	TPoint iPos;
+	TRect iImageRegion;
+	TSize iBlockSize;
+	TInt iBlockArea;
+	TImageBitmapUtil iUtil;
+	TColorConvertor* iColorConv;
+	TRgb* iRgbBuffer;
+	TRgb* iRgbBufferPtr;
+	TRgb* iRgbBufferPtrLimit;
+	TUint32* iIndexBuffer;
+	TUint32* iIndexBufferPtrLimit;
+	TDisplayMode iDisplayMode;
+	TBool iDrawBottomUp;
+	};
+
+class CMonochromePixelWriter; // declared here
+/**
+ * @internalComponent
+ *
+ * @see CMonochromeImageProcessor.
+ *
+ */
+NONSHARABLE_CLASS( CMonochromePixelWriter ): public CMonochromeImageProcessor
+	{
+public:
+	static CMonochromePixelWriter* NewL();
+	virtual ~CMonochromePixelWriter();
+	// From CImageProcessor
+	void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect);
+	void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize& aRgbBlockSize);
+	void SetYPosIncrement(TInt aYInc);
+	void SetLineRepeat(TInt aLineRepeat);
+	void SetPixelPadding(TInt aNumberOfPixels);
+	TBool SetMonoPixel(TInt aGray256);
+	TBool SetMonoPixelRun(TInt aGray256,TInt aCount);
+	TBool SetMonoPixels(TUint32* aGray256Buffer,TInt aBufferLength);
+	TBool SetMonoPixelBlock(TUint32* aGray256Buffer);
+	TBool SetPos(const TPoint& aPosition);
+	TBool FlushPixels();
+protected:
+	// New
+	CMonochromePixelWriter();
+	virtual void Reset();
+	virtual void DoPrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize* aBlockSize);
+	virtual void SetPixelBufferIndex(TUint32* aGray256Buffer,TInt aCount);	//Used by FlushPixels to convert buffered 'SetPixel's
+	virtual void SetPixelBlockIndex(TUint32* aGray256Buffer);	//Used by SetPixelBlock
+	virtual TBool NewLine();
+protected:
+	TInt iYInc;
+	TInt iLineRepeat;
+	TInt iPixelPadding;
+	TInt iPixelsToSkip;
+	TPoint iPos;
+	TRect iImageRegion;
+	TSize iBlockSize;
+	TInt iBlockArea;
+	TImageBitmapUtil iUtil;
+	TColorConvertor* iColorConv;
+	TUint32* iGray256Buffer;
+	TUint32* iGray256BufferPtr;
+	TUint32* iGray256BufferPtrLimit;
+	TUint32* iIndexBuffer;
+	TUint32* iIndexBufferPtrLimit;
+	TUint32 iIndexLookup[KIndexLookupSize];
+	TBool iDrawBottomUp;
+	};
+
+class CErrorDiffuser; // declared here
+/**
+ * @internalComponent
+ *
+ * @see CPixelWriter.
+ *
+ */
+NONSHARABLE_CLASS( CErrorDiffuser ): public CPixelWriter
+	{
+public:
+	IMPORT_C static CErrorDiffuser* NewL();
+	virtual ~CErrorDiffuser();
+protected:
+	CErrorDiffuser();
+private:
+	class TColorError
+		{
+	public:
+		inline void AdjustColor(TRgb& aColor) const;
+	public:
+		inline TColorError();
+		inline TColorError(TInt aRedError,TInt aGreenError,TInt aBlueError);
+		inline void SetError(TRgb aIdealColor,TRgb aActualColor);
+		inline TColorError operator+(const TColorError& aColorError) const;
+		inline TColorError operator-(const TColorError& aColorError) const;
+		inline TColorError operator<<(TInt aShift) const;
+		inline TColorError& operator+=(const TColorError& aColorError);
+	public:
+		TInt iRedError;
+		TInt iGreenError;
+		TInt iBlueError;
+		};
+private:
+	// From CPixelWriter
+	void Reset();
+	void DoPrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize* aBlockSize);
+	void SetPixelBufferIndex(TRgb* aColorBuffer,TInt aCount);
+	void SetPixelBlockIndex(TRgb* aColorBuffer);
+	void SetPixelBufferColor64KIndex(TRgb* aColorBuffer,TInt aCount);
+	// optimized version of ClampColorComponent
+	inline TInt ClipColorComponent(TInt value);
+	
+private:
+	TColorError* iScanlineErrorBuffer;
+	TColorError* iEdgeErrorBuffer;
+	TColorError iNextError;
+	TPoint iLastPos;
+	// for fast 64K mode
+	TInt8* iRedErrorLookupTable;
+	TInt8* iGreenErrorLookupTable;
+	TInt iNextRedError;
+	TInt iNextGreenError;
+	TInt iNextBlueError;
+	};
+
+class CMonochromeErrorDiffuser; // declared here
+/**
+ * @internalComponent
+ *
+ * @see CMonochromePixelWriter.
+ *
+ */
+NONSHARABLE_CLASS( CMonochromeErrorDiffuser ): public CMonochromePixelWriter
+	{
+public:
+	static CMonochromeErrorDiffuser* NewL();
+	virtual ~CMonochromeErrorDiffuser();
+protected:
+	CMonochromeErrorDiffuser();
+private:
+	// From CMonochromePixelWriter
+	void Reset();
+	void DoPrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize* aBlockSize);
+	void SetPixelBufferIndex(TUint32* aGray256Buffer,TInt aCount);
+	void SetPixelBlockIndex(TUint32* aGray256Buffer);
+private:
+	TInt* iScanlineErrorBuffer;
+	TInt* iEdgeErrorBuffer;
+	TInt iNextError;
+	TPoint iLastPos;
+	};
+
+class CThumbnailProcessor; // declared here
+/**
+ * @internalComponent
+ *
+ * @see CColorImageProcessor.
+ *
+ */
+NONSHARABLE_CLASS( CThumbnailProcessor ): public CColorImageProcessor
+	{
+public:
+	static CThumbnailProcessor* NewL(CImageProcessorExtension* aImageProc,TInt aReductionFactor);
+	virtual ~CThumbnailProcessor();
+	// From CImageProcessor
+	void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect);
+	void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize& aRgbBlockSize);
+	void SetYPosIncrement(TInt aYInc);
+	void SetLineRepeat(TInt aLineRepeat);
+	void SetPixelPadding(TInt aNumberOfPixels);
+	TBool SetPixel(TRgb aColor);
+	TBool SetPixelBlock(TRgb* aColorBuffer);
+	TBool SetPos(const TPoint& aPosition);
+	TBool FlushPixels();
+private:
+	// New
+	CThumbnailProcessor(CImageProcessorExtension* aImageProc,TInt aReductionFactor);
+	void PrepareCommonL(const TRect& aImageRect);
+	void DoFlushPixels();
+	TBool NewLine();
+private:
+	class TColorSum
+		{
+	public:
+		TInt iRed;
+		TInt iGreen;
+		TInt iBlue;
+		TInt iCount;
+		};
+private:
+	CImageProcessorExtension* iImageProc;
+	TPoint iPos;
+	TBool iPositionChanged;
+	TInt iPixelPadding;
+	TInt iEndOfLineX;
+	TInt iYInc;
+	TRect iImageRegion;
+	TSize iOriginalBlockSize;
+	TInt iReductionFactor;
+	TRect iReducedImageRegion;
+	TSize iReducedBlockSize;
+	TRgb* iReducedPixelBuffer;
+	TColorSum* iReducedSumBuffer;
+	TBool iDrawBottomUp;
+	};
+
+class CMonochromeThumbnailProcessor; // declared here
+/**
+ * @internalComponent
+ *
+ * @see CMonochromeImageProcessor.
+ *
+ */
+NONSHARABLE_CLASS( CMonochromeThumbnailProcessor ): public CMonochromeImageProcessor
+	{
+public:
+	static CMonochromeThumbnailProcessor* NewL(CImageProcessorExtension* aImageProc,TInt aReductionFactor);
+	virtual ~CMonochromeThumbnailProcessor();
+	// From CImageProcessor
+	void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect);
+	void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize& aRgbBlockSize);
+	void SetYPosIncrement(TInt aYInc);
+	void SetLineRepeat(TInt aLineRepeat);
+	void SetPixelPadding(TInt aNumberOfPixels);
+	TBool SetMonoPixel(TInt aGray256);
+	TBool SetMonoPixelRun(TInt aGray256,TInt aCount);
+	TBool SetMonoPixelBlock(TUint32* aGray256Buffer);
+	TBool SetPos(const TPoint& aPosition);
+	TBool FlushPixels();
+private:
+	// New
+	CMonochromeThumbnailProcessor(CImageProcessorExtension* aImageProc,TInt aReductionFactor);
+	void PrepareCommonL(const TRect& aImageRect);
+	void DoFlushPixels();
+	TBool NewLine();
+private:
+	class TMonochromeSum
+		{
+	public:
+		TInt iLevel;
+		TInt iCount;
+		};
+private:
+	CImageProcessorExtension* iImageProc;
+	TPoint iPos;
+	TBool iPositionChanged;
+	TInt iPixelPadding;
+	TInt iEndOfLineX;
+	TInt iYInc;
+	TRect iImageRegion;
+	TSize iOriginalBlockSize;
+	TInt iReductionFactor;
+	TRect iReducedImageRegion;
+	TSize iReducedBlockSize;
+	TUint32* iReducedPixelBuffer;
+	TMonochromeSum* iReducedSumBuffer;
+	TBool iDrawBottomUp;
+	};
+
+#endif // ___IMAGEPROCESSORPRIV_H__
+
+
+