diff -r 000000000000 -r 40261b775718 mmplugins/imagingplugins/imagedisplay/plugins/mng/MngReadCodec.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmplugins/imagingplugins/imagedisplay/plugins/mng/MngReadCodec.h Tue Feb 02 01:56:55 2010 +0200 @@ -0,0 +1,108 @@ +// Copyright (c) 2005-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: +// + +/** + @file + @internalTechnology +*/ + +#ifndef MNGREADCODEC_H + +#define MNGREADCODEC_H + +#include "MngPlayerObserver.h" + +class CMngPlayer; +class CMngFileReadStream; + +/** + Observer for codec, allows codec to notify a client about + particular codec event such as frame readiness, decode completion etc. +*/ +class MMngCodecObserver + { +public: + enum TCodecEvent + { + KDataParseCompleted, // 0 + KFrameReady, // 1 + KDecodeCompleted=0xFFFF, // 0xFFFF + }; +public: + virtual void OnCodecEvent(TCodecEvent aEventCode, TInt aErrorCode)=0; + }; + +/** + Implementation of read codec for MNG-LC format, re-uses + format "player" implementation of Image Display one +*/ +class CMngReadCodec: public CImageMaskProcessorReadCodec, + protected MMngPlayerObserver + { +public: + + static CMngReadCodec * NewL(CMngFileReadStream& aMngReadStream, MMngCodecObserver& aObserver, TBool aMngSubframesNoLoops); //Subframes with No Loops + ~CMngReadCodec(); + + void Restart(); + void DecodeL(); + void StopDecode(); + + inline TUint ImageFeatures() const; + +// from the CImageReadCodec + virtual void InitFrameL(TFrameInfo& aFrameInfo, CFrameImageData& aFrameImageData, TBool aDisableErrorDiffusion, CFbsBitmap& aDestination, CFbsBitmap* aDestinationMask); + virtual TFrameState ProcessFrameL(TBufPtr8& aSrc); + virtual void InitFrameHeader(TFrameInfo& aFrameSettings, CFrameImageData& /* aFrameImageData */); + virtual TInt ReducedSize(const TSize& aOriginalSize, TInt aReductionFactor, TSize& aReducedSize) const; +protected: + inline CMngReadCodec(MMngCodecObserver& aObserver, TBool aMngSubframesNoLoops); //Subframes with No Loops + void ConstructL(CMngFileReadStream& aMngReadStream); + TInt GetBitmaps(); + void SendFrameUpdate(TInt aError); + void CreatePlayerL(); +// from the MMngPlayerObserver // + virtual void OnDecodeEvent(TUint aEventFlags, TInt aErrorCode); + +private: + TBool iMngSubframesNoLoops; //Subframes with No Loops + MMngCodecObserver& iObserver; + TFrameInfo* iFrameInfo; // not owned + CFbsBitmap* iCurrentFrame; // not owned + CFbsBitmap* iCurrentMask; // not owned + CMngPlayer* iMngPlayer; + CMngFileReadStream* iMngReadStream; + TTimeIntervalMicroSeconds32 iFrameDelay; + TUint iFrameStatus; + TInt iFrameNumber; + TUint iImageFeatures; + TRect iFrameRect; + }; + +inline +CMngReadCodec::CMngReadCodec(MMngCodecObserver& aObserver, TBool aMngSubframesNoLoops):iMngSubframesNoLoops(aMngSubframesNoLoops), //Subframes with No Loops + iObserver(aObserver) //Subframes with No Loops + { + } + +inline +TUint CMngReadCodec::ImageFeatures() const + { + return iImageFeatures; + } + +#endif // ndef MNGREADCODEC_H + +