--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imaging/imagingplugins/codecs/MBMCodec/MBMCodec.h Wed Aug 25 12:29:52 2010 +0300
@@ -0,0 +1,318 @@
+// 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 __MBMCODEC_H__
+#define __MBMCODEC_H__
+
+#include <bitdev.h>
+#include <icl/imageprocessor.h>
+#include <icl/imagecodec.h>
+#include <icl/imagecodecdata.h>
+
+#include "MBMConvert.h"
+
+
+// Constants.
+const TInt KMbmRootStreamOffsetPosition = 16;
+const TInt KMbmFirstBitmapOffset = KMbmRootStreamOffsetPosition + 4;
+const TInt KMbmInfoHeaderSize = 40;
+
+// Helper classes.
+class TMbmReadCodec
+ {
+public:
+ virtual void DoProcessL(TUint8*& aDataPtr,TUint8* aDataPtrLimit) = 0;
+ void AddPixelRun(TRgb aColor,TInt aNumberOfPixels);
+public:
+ CImageProcessor* iImageProc;
+ };
+
+class T1BppMbmReadCodec : public TMbmReadCodec
+ {
+public:
+ virtual void DoProcessL(TUint8*& aDataPtr,TUint8* aDataPtrLimit);
+ void AddPixelValue(TUint8 aValue);
+ };
+
+class T1BppCompressedMbmReadCodec : public T1BppMbmReadCodec
+ {
+public:
+ virtual void DoProcessL(TUint8*& aDataPtr,TUint8* aDataPtrLimit);
+ void AddPixelRun(TUint8 aValue,TInt aNumberOfValues);
+ };
+
+class T2BppMbmReadCodec : public TMbmReadCodec
+ {
+public:
+ virtual void DoProcessL(TUint8*& aDataPtr,TUint8* aDataPtrLimit);
+ void AddPixelValue(TUint8 aValue);
+ };
+
+class T2BppCompressedMbmReadCodec : public T2BppMbmReadCodec
+ {
+public:
+ virtual void DoProcessL(TUint8*& aDataPtr,TUint8* aDataPtrLimit);
+ void AddPixelRun(TUint8 aValue,TInt aNumberOfQuads);
+ };
+
+class T4BppMbmReadCodec : public TMbmReadCodec
+ {
+public:
+ virtual void DoProcessL(TUint8*& aDataPtr,TUint8* aDataPtrLimit);
+ virtual TRgb ColorFromIndex(TInt aIndex) = 0;
+ };
+
+class T4BppCompressedMbmReadCodec : public T4BppMbmReadCodec
+ {
+public:
+ virtual void DoProcessL(TUint8*& aDataPtr,TUint8* aDataPtrLimit);
+ void AddPixelRun(TRgb aColor1,TRgb aColor2,TInt aNumberOfPairs);
+ };
+
+class T4BppMonoMbmReadCodec : public T4BppMbmReadCodec
+ {
+public:
+ virtual TRgb ColorFromIndex(TInt aIndex) { return TRgb::Gray16(aIndex); }
+ };
+
+class T4BppMonoCompressedMbmReadCodec : public T4BppCompressedMbmReadCodec
+ {
+public:
+ virtual TRgb ColorFromIndex(TInt aIndex) { return TRgb::Gray16(aIndex); }
+ };
+
+class T4BppColorMbmReadCodec : public T4BppMbmReadCodec
+ {
+public:
+ virtual TRgb ColorFromIndex(TInt aIndex) { return TRgb::Color16(aIndex); }
+ };
+
+class T4BppColorCompressedMbmReadCodec : public T4BppCompressedMbmReadCodec
+ {
+public:
+ virtual TRgb ColorFromIndex(TInt aIndex) { return TRgb::Color16(aIndex); }
+ };
+
+class T8BppMbmReadCodec : public TMbmReadCodec
+ {
+public:
+ virtual void DoProcessL(TUint8*& aDataPtr,TUint8* aDataPtrLimit);
+ virtual TRgb ColorFromIndex(TInt aIndex) = 0;
+ };
+
+class T8BppCompressedMbmReadCodec : public T8BppMbmReadCodec
+ {
+public:
+ virtual void DoProcessL(TUint8*& aDataPtr,TUint8* aDataPtrLimit);
+ };
+
+class T8BppMonoMbmReadCodec : public T8BppMbmReadCodec
+ {
+public:
+ virtual TRgb ColorFromIndex(TInt aIndex) { return TRgb::Gray256(aIndex); }
+ };
+
+class T8BppMonoCompressedMbmReadCodec : public T8BppCompressedMbmReadCodec
+ {
+public:
+ virtual TRgb ColorFromIndex(TInt aIndex) { return TRgb::Gray256(aIndex); }
+ };
+
+class T8BppColorMbmReadCodec : public T8BppMbmReadCodec
+ {
+public:
+ virtual TRgb ColorFromIndex(TInt aIndex) { return TRgb::Color256(aIndex); }
+ };
+
+class T8BppColorCompressedMbmReadCodec : public T8BppCompressedMbmReadCodec
+ {
+public:
+ virtual TRgb ColorFromIndex(TInt aIndex) { return TRgb::Color256(aIndex); }
+ };
+
+class T12BppMbmReadCodec : public TMbmReadCodec
+ {
+public:
+ virtual void DoProcessL(TUint8*& aDataPtr,TUint8* aDataPtrLimit);
+ };
+
+class T12BppCompressedMbmReadCodec : public TMbmReadCodec
+ {
+public:
+ virtual void DoProcessL(TUint8*& aDataPtr,TUint8* aDataPtrLimit);
+ };
+
+class T16BppMbmReadCodec : public TMbmReadCodec
+ {
+public:
+ virtual void DoProcessL(TUint8*& aDataPtr,TUint8* aDataPtrLimit);
+ };
+
+class T16BppCompressedMbmReadCodec : public TMbmReadCodec
+ {
+public:
+ virtual void DoProcessL(TUint8*& aDataPtr,TUint8* aDataPtrLimit);
+ };
+
+class T24BppMbmReadCodec : public TMbmReadCodec
+ {
+public:
+ virtual void DoProcessL(TUint8*& aDataPtr,TUint8* aDataPtrLimit);
+ };
+
+class T24BppCompressedMbmReadCodec : public T24BppMbmReadCodec
+ {
+public:
+ virtual void DoProcessL(TUint8*& aDataPtr,TUint8* aDataPtrLimit);
+ };
+
+class T32BppMbmReadCodec : public TMbmReadCodec
+ {
+public:
+ virtual void DoProcessL(TUint8*& aDataPtr,TUint8* aDataPtrLimit);
+ };
+
+// MBM Read codec.
+class CMbmReadCodec : public CImageProcessorReadCodec
+ {
+public:
+ virtual void InitFrameL(TFrameInfo& aFrameInfo, CFrameImageData& aFrameImageData, TBool aDisableErrorDiffusion, CFbsBitmap& aFrame, CFbsBitmap* aFrameMask);
+
+ static CMbmReadCodec* NewL(TUint32 aMbmRootStreamOffset);
+
+protected:
+ virtual ~CMbmReadCodec();
+
+ virtual void InitFrameHeader(TFrameInfo& aFrameSettings, CFrameImageData& aFrameImageData);
+ virtual TFrameState ProcessFrameHeaderL(TBufPtr8& aData);
+ virtual TFrameState ProcessFrameL(TBufPtr8& aSrc);
+
+private:
+ CMbmReadCodec(TUint32 aMbmRootStreamOffset);
+
+ TBool ProcessInfoL(TBufPtr8* aSrc);
+ TInt ScanLinePixels(TInt aWidth);
+ void SetCodecProcessorL();
+
+ static TDisplayMode DisplayModeL(TInt aBitsPerPixel, TUint32 aFlags);
+
+protected:
+ TFrameInfo* iFrameInfo;
+ CFrameImageData *iImageData;
+
+ TMbmDecodeData* iFrameData;
+ TBool iCompressed;
+ TInt iByteLength;
+ TUint8* iDataPtr;
+ TUint8* iStartDataPtr;
+ TUint8* iDataPtrLimit;
+ TMbmReadCodec* iCodecProc;
+ TInt32 iMbmRootStreamOffset;
+ TInt iNumberOfFrames;
+ TInt iFrameDataRemaining;
+ };
+
+
+// Write codec classes.
+class TWriteCodecProcessor
+ {
+public:
+ virtual TInt PixelsToBytes(TInt aPixels) = 0;
+ virtual TInt BytesToPixels(TInt aBytes) = 0;
+ };
+
+class T1BppWriteCodecProcessor : public TWriteCodecProcessor
+ {
+public:
+ virtual TInt PixelsToBytes(TInt aPixels) { return (aPixels + 7) >> 3; }
+ virtual TInt BytesToPixels(TInt aBytes) { return aBytes << 3; }
+ };
+
+class T2BppWriteCodecProcessor : public TWriteCodecProcessor
+ {
+public:
+ virtual TInt PixelsToBytes(TInt aPixels) { return (aPixels + 3) >> 2; }
+ virtual TInt BytesToPixels(TInt aBytes) { return aBytes << 2; }
+ };
+
+class T4BppWriteCodecProcessor : public TWriteCodecProcessor
+ {
+public:
+ virtual TInt PixelsToBytes(TInt aPixels) { return (aPixels + 1) >> 1; }
+ virtual TInt BytesToPixels(TInt aBytes) { return aBytes << 1; }
+ };
+
+class T8BppWriteCodecProcessor : public TWriteCodecProcessor
+ {
+public:
+ virtual TInt PixelsToBytes(TInt aPixels) { return aPixels; }
+ virtual TInt BytesToPixels(TInt aBytes) { return aBytes; }
+ };
+
+class T16BppWriteCodecProcessor : public TWriteCodecProcessor
+ {
+public:
+ virtual TInt PixelsToBytes(TInt aPixels) { return aPixels << 1; }
+ virtual TInt BytesToPixels(TInt aBytes) { return aBytes >> 1; }
+ };
+
+class T24BppWriteCodecProcessor : public TWriteCodecProcessor
+ {
+public:
+ virtual TInt PixelsToBytes(TInt aPixels) { return aPixels * 3; }
+ virtual TInt BytesToPixels(TInt aBytes) { return aBytes / 3; }
+ };
+
+class T32BppWriteCodecProcessor : public TWriteCodecProcessor
+ {
+public:
+ virtual TInt PixelsToBytes(TInt aPixels) { return aPixels * 4; }
+ virtual TInt BytesToPixels(TInt aBytes) { return aBytes / 4; }
+ };
+
+class CMbmWriteCodec : public CImageWriteCodec
+ {
+public:
+ virtual ~CMbmWriteCodec();
+
+ static CMbmWriteCodec* NewL(TDisplayMode aDisplayMode);
+
+protected:
+ virtual TFrameState ProcessFrameL(TBufPtr8& aDst);
+ virtual void InitFrameL(TBufPtr8& aDst, const CFbsBitmap& aFrame);
+
+ // New functions
+ void DoProcessL(const CFbsBitmap& aFrame);
+ TInt ScanLinePixels(TInt aWidth);
+
+private:
+ CMbmWriteCodec(TDisplayMode aDisplayMode);
+
+
+protected:
+ TRect iSourceRect;
+ TPoint iPos;
+ TDisplayMode iDisplayMode;
+ TWriteCodecProcessor* iCodecProc;
+ TUint8* iDataPtr;
+ TUint8* iDataPtrLimit;
+ TInt iPaddingBytes;
+ TInt iBytesToWrite;
+ TBool iStreamTablePending;
+ };
+
+
+#endif // __MBMCODEC_H__
+