--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imaging/imagingplugins/codecs/BMPCodec/BMPCodec.h Wed Aug 25 12:29:52 2010 +0300
@@ -0,0 +1,279 @@
+// Copyright (c) 1999-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 BMPCODEC_H
+#define BMPCODEC_H
+
+#include <icl/imageprocessor.h>
+#include <icl/imagecodec.h>
+#include "BMPConvert.h"
+
+/**
+@file
+@internalComponent
+*/
+
+// Read codecs
+class CBmpDecoder;
+class CBmpReadCodec : public CImageProcessorReadCodec
+ {
+public:
+
+ // From CImageReadCodec
+ TFrameState ProcessFrameL(TBufPtr8& aSrc);
+ virtual void InitFrameL(TFrameInfo& aFrameInfo, CFrameImageData& aFrameImageData, TBool aDisableErrorDiffusion, CFbsBitmap& aDestination, CFbsBitmap* aDestinationMask);
+ virtual void InitFrameHeader(TFrameInfo& aFrameInfo, CFrameImageData& aFrameData);
+ virtual TFrameState ProcessFrameHeaderL(TBufPtr8& aData);
+protected:
+
+ class TCompDecodeInfo
+ {
+ public:
+ TUint iMask;
+ TInt iRightShiftValue;
+ TInt iLeftShiftValue;
+ };
+ enum
+ {
+ KRedCompIdx = 0,
+ KGreenCompIdx = 1,
+ KBlueCompIdx = 2
+ };
+
+ CBmpReadCodec(const TSize& aBmpSize, const TRgb* aPalette);
+ ~CBmpReadCodec();
+ virtual void DoProcessL() = 0;
+ virtual void DoNewFrameL();
+ void WritePixels(TInt aNumPixels, TBool aUpdatePos = ETrue);
+protected:
+ TSize iOriginalSize;
+ TSize iFrameSize;
+ const TRgb* iPalette; // Not owned
+ const TUint8* iDataPtr; // Not owned
+ const TUint8* iDataPtrLimit; // Not owned
+ TInt iBytesExpected;
+ TInt iBytesProcessed;
+ TFrameInfo* iFrameInfo; // Not owned
+ };
+
+class CBmp1BppReadCodec : public CBmpReadCodec
+ {
+public:
+
+ static CBmp1BppReadCodec* NewL(const TSize& aBmpSize, const TRgb* aPalette);
+
+
+ //From CBmpReadCodec
+ virtual void DoProcessL();
+ virtual void DoNewFrameL();
+private:
+
+ CBmp1BppReadCodec(const TSize& aBmpSize, const TRgb* aPalette);
+
+ TRgb iEntry0;
+ TRgb iEntry1;
+ };
+
+class CBmpNoComp4BppReadCodec : public CBmpReadCodec
+ {
+public:
+
+ static CBmpNoComp4BppReadCodec* NewL(const TSize& aBmpSize, const TRgb* aPalette);
+
+ //From CBmpReadCodec
+ virtual void DoNewFrameL();
+ virtual void DoProcessL();
+
+private:
+ CBmpNoComp4BppReadCodec(const TSize& aBmpSize, const TRgb* aPalette);
+ };
+
+class CBmpRLE4ReadCodec : public CBmpReadCodec
+ {
+public:
+
+ static CBmpRLE4ReadCodec* NewL(const TSize& aBmpSize, const TRgb* aPalette);
+
+ //From CBmpReadCodec
+ virtual void DoNewFrameL();
+ virtual void DoProcessL();
+private:
+ CBmpRLE4ReadCodec(const TSize& aBmpSize, const TRgb* aPalette);
+
+ void WriteRun(TUint8 aValue, TInt aNumPixels);
+ void WriteData(TInt aNumPixels);
+ };
+
+class CBmpNoComp8BppReadCodec : public CBmpReadCodec
+ {
+public:
+
+ static CBmpNoComp8BppReadCodec* NewL(const TSize& aBmpSize, const TRgb* aPalette);
+
+ //From CBmpReadCodec
+ virtual void DoNewFrameL();
+ virtual void DoProcessL();
+
+private:
+ CBmpNoComp8BppReadCodec(const TSize& aBmpSize, const TRgb* aPalette);
+
+ };
+
+class CBmpRLE8ReadCodec : public CBmpReadCodec
+ {
+public:
+
+ static CBmpRLE8ReadCodec* NewL(const TSize& aBmpSize, const TRgb* aPalette);
+
+ //From CBmpReadCodec
+ virtual void DoNewFrameL();
+ virtual void DoProcessL();
+private:
+ CBmpRLE8ReadCodec(const TSize& aBmpSize, const TRgb* aPalette);
+ void WriteRun(TUint8 aValue, TInt aNumPixels);
+ void WriteData(TInt aNumPixels);
+ };
+
+/**
+ codec which can handle "bit field" compressed bitmaps
+*/
+class CBmpBiRgbReadCodec : public CBmpReadCodec
+ {
+public:
+
+ static CBmpBiRgbReadCodec* NewL(const TSize& aBmpSize, TInt aPixelSize, const TRgb* aPalette);
+
+ //From CBmpReadCodec
+ virtual void DoProcessL();
+ virtual void DoNewFrameL();
+
+protected:
+ enum
+ {
+ KMaxComps = KBlueCompIdx + 1 // RGB
+ };
+
+ CBmpBiRgbReadCodec(const TSize& aBmpSize, TInt aPixelSize, const TRgb* aPalette);
+
+ void ConstructL();
+
+ const TInt iPixelSize; // pixel size in bytes
+
+ TInt iTotalByteWidth; // line byte width with possible padding
+ TInt iPixelByteWidth; // line byte width without possible padding
+ TInt iPaddingByteWidth; // padding value
+ TInt iBytePos; // current byte position
+ TCompDecodeInfo iCompInfo[KMaxComps]; // color comps "decompression" parameters
+ };
+
+class CBmp24BppReadCodec : public CBmpReadCodec
+ {
+public:
+
+ static CBmp24BppReadCodec* NewL(const TSize& aBmpSize);
+
+ //From CBmpReadCodec
+ virtual void DoProcessL();
+ virtual void DoNewFrameL();
+private:
+ CBmp24BppReadCodec(const TSize& aBmpSize);
+
+ TInt iTotalByteWidth;
+ TInt iPixelByteWidth;
+ TInt iPaddingByteWidth;
+ TInt iBytePos;
+ };
+
+class CBmp32BppReadCodec : public CBmpReadCodec
+ {
+public:
+
+ static CBmp32BppReadCodec* NewL(const TSize& aBmpSize);
+
+ //From CBmpReadCodec
+ virtual void DoProcessL();
+ virtual void DoNewFrameL();
+private:
+ CBmp32BppReadCodec(const TSize& aBmpSize);
+
+ TInt iTotalByteWidth;
+ TInt iPixelByteWidth;
+ TInt iPaddingByteWidth;
+ TInt iBytePos;
+ };
+
+// Write codecs
+class CBmpWriteCodec : public CImageWriteCodec
+ {
+public:
+ // from CImageWriteCodec
+ virtual void InitFrameL(TBufPtr8& aDst, const CFbsBitmap& aSource);
+protected:
+
+ virtual TFrameState ProcessFrameL(TBufPtr8& aDst);
+ virtual void DoProcessL(const CFbsBitmap& aFrame) = 0;
+ virtual TInt PaddingBytes() = 0;
+protected:
+ TRect iSourceRect;
+ TPoint iPos;
+ TUint8* iDestPtr;
+ TUint8* iDestPtrLimit;
+ TInt iPaddingBytes;
+ TInt iBytesToWrite;
+ };
+
+class CBmp1BppWriteCodec : public CBmpWriteCodec
+ {
+public:
+
+ static CBmp1BppWriteCodec* NewL(void);
+
+ //from CBmpWriteCodec
+ virtual void DoProcessL(const CFbsBitmap& aFrame);
+ virtual TInt PaddingBytes();
+ };
+
+class CBmp4BppWriteCodec : public CBmpWriteCodec
+ {
+public:
+ static CBmp4BppWriteCodec* NewL(void);
+
+ //from CBmpWriteCodec
+ virtual void DoProcessL(const CFbsBitmap& aFrame);
+ virtual TInt PaddingBytes();
+ };
+
+class CBmp8BppWriteCodec : public CBmpWriteCodec
+ {
+public:
+ static CBmp8BppWriteCodec* NewL(void);
+
+ //from CBmpWriteCodec
+ virtual void DoProcessL(const CFbsBitmap& aFrame);
+ virtual TInt PaddingBytes();
+ };
+
+class CBmp24BppWriteCodec : public CBmpWriteCodec
+ {
+public:
+ static CBmp24BppWriteCodec* NewL(void);
+
+ //from CBmpWriteCodec
+ virtual void DoProcessL(const CFbsBitmap& aFrame);
+ virtual TInt PaddingBytes();
+ };
+
+#endif // BMPCODEC_H
+