webengine/osswebengine/WebCore/platform/symbian/bitmap/AnimationDecoder.h
changeset 0 dd21522fd290
child 10 a359256acfc6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/osswebengine/WebCore/platform/symbian/bitmap/AnimationDecoder.h	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,233 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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 ANIMATIONDECODER_H
+#define ANIMATIONDECODER_H
+
+// INCLUDES
+
+#include <e32base.h>
+#include <imageconversion.h> // TFrameInfo
+
+// FORWARD DECLARATIONS
+class CMaskedBitmap;
+class CBufferedImageDecoder;
+class CSynDecodeThread;
+namespace WebCore {
+    class ImageObserver;
+}
+// CONSTANTS
+
+_LIT(KMimeJPEG, "image/jpeg");
+_LIT(KMimeJPG, "image/jpg");
+_LIT(KMimeGIF, "image/gif");
+_LIT(KMimePNG, "image/png");
+_LIT(KMimeTIFF, "image/tiff");
+_LIT(KMimeBMP, "image/bmp");
+_LIT(KMimeWBMP, "image/vnd.wap.wbmp");
+_LIT(KMimeWMF, "application/x-msmetafile");
+_LIT(KMimeMBM, "image/x-epoc-mbm");
+_LIT(KMimeOTA, "image/vnd.nokia.ota-bitmap");
+_LIT(KMimeICO, "image/x-icon");
+_LIT(KMimeDRM, "application/vnd.oma.drm.content");
+
+//const TDisplayMode KMaxDepth = EColor64K;
+
+// FIXME: we should move this back to EColor64K after Symbian fix their Gif image decoder bug.
+const TDisplayMode KMaxDepth = EColor16M;
+
+// CLASS DECLARATION
+/**
+*  CAnimationDecoder
+*
+*  Implementation of file based image class.
+*  @lib IHL.lib
+*  @since 3.0
+*/
+
+class CAnimationDecoder  : public CActive
+    {
+    public:  // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        */
+        static CAnimationDecoder* NewL(WebCore::ImageObserver* aObs);
+
+        /*
+        * Virtual destructor.
+        */
+        virtual ~CAnimationDecoder();
+
+  public:
+
+        /*
+        * From MIHLFileImage, see base class header.
+        */
+        void OpenL( const TDesC8& aData, TDesC* aMIMEType, TBool aIsComplete );
+        void OpenAndDecodeSyncL( const TDesC8& aData );
+
+        /*
+        * From MIHLFileImage, see base class header.
+        */
+        void AddDataL( const TDesC8& aData, TBool aIsComplete );
+
+        /*
+        * From MIHLFileImage, see base class header.
+        */
+        TSize Size() const { return iFrameInfo.iOverallSizeInPixels; }
+
+        /*
+        * From MIHLFileImage, see base class header.
+        */
+        TDisplayMode DisplayMode() const { return KMaxDepth; }
+
+        /*
+        * From MIHLFileImage, see base class header.
+        */
+        TDisplayMode MaskDisplayMode() const;
+
+        /*
+        * From MIHLFileImage, see base class header.
+        */
+        TRgb BackgroundColor() const { return iFrameInfo.iBackgroundColor; }
+
+        /*
+        * From MIHLFileImage, see base class header.
+        */
+        TBool IsAnimation() const { return iAnimation; }
+
+        /*
+        * From MIHLFileImage, see base class header.
+        */
+        TInt AnimationFrameCount() const { return iAnimationFrameCount; }
+
+        /*
+        * From MIHLFileImage, see base class header.
+        */
+        TTimeIntervalMicroSeconds32 AnimationFrameDelay( TInt aAnimationFrameIndex ) const;
+
+        /*
+        * From MIHLFileImage, see base class header.
+        */
+        TInt LoadFrame( TInt aFrameIndex );
+
+        /*
+        * From MIHLFileImage, see base class header.
+        */
+        TBool IsBusy() const { return ( iImageState != EInactive ); }
+
+
+        /*
+        * From MIHLFileImage, see base class header.
+        */
+        void CancelLoad() { Cancel(); }
+
+        TBool IsOpen() const { return iDecoder!=0; }
+
+        //funtions related to Loop count of animation image.
+        TInt16 getLoopCount(){return iCurLoopCount;};
+        void resetLoopCount(){iCurLoopCount = iLoopCount;};
+        void decreamentLoopCount(){ iCurLoopCount--;};
+        CMaskedBitmap* Destination();
+        TBool isSizeAvailable() const { return iSizeAvailable; }
+        TBool decodeInProgress() const { return iDecodeInProgress; }
+
+  private: // From base class CActive
+
+        /*
+        * From CActive, see base class header.
+        */
+        void DoCancel();
+
+        /*
+        * From CActive, see base class header.
+        */
+        void RunL();
+
+        /*
+        * From CActive, see base class header.
+        */
+        TInt RunError( TInt aError );
+
+  private: // Private methods
+
+        void StartDecodingL();
+        void StartLoadL();
+        void StartLoadNormalBitmap( TInt aFrameIndex );
+        void StartLoadAnimationBitmapL( TInt aFrameIndex );
+        void CompleteLoadL();
+        void BuildAnimationFrameL();
+        void ErrorCleanup();
+        void SelfComplete( TInt aError = KErrNone );
+        HBufC8* DecodeDRMImageContentL(const TDesC8& aData);
+
+  private: // Private constructors
+
+        CAnimationDecoder(WebCore::ImageObserver* aObs);
+        void ConstructL( );
+
+  private: // Private data types
+
+        enum TImageState
+            {
+            EInactive,
+            EStartLoad,
+            ECompleteLoad,
+            };
+
+  private: // Data
+
+        // Image status & state
+        TRequestStatus* iImageStatus;
+        TImageState iImageState;
+
+        // Own: Image decoder
+        CBufferedImageDecoder* iDecoder; // owned
+
+        TFrameInfo iFrameInfo;
+        TBool iAnimation;
+        TInt iAnimationFrameCount;
+
+        // Ref: Destination bitmap
+        CMaskedBitmap* iDestination;
+        TInt iFrameIndex;
+
+        // Own: Temporary animation bitmap
+        CMaskedBitmap* iAnimationBitmap; // owned
+        TInt iAnimationFrameIndex;
+
+        WebCore::ImageObserver* iObserver; // not owned
+
+        TBool iRawDataComplete;
+
+        //Loop count for animation image. Default to -1 -- loop forever
+        TInt16 iLoopCount;
+        TInt16 iCurLoopCount;
+
+        TBool iSizeAvailable;
+        TInt iSyncBitmapHandle;
+        TBool iSyncMaskHandle;
+        TBool iDecodeInProgress;
+        CSynDecodeThread* iSyncDecodeThread;
+        HBufC8* iDrmContent;
+    };
+
+#endif   // CAnimationDecoder_H
+
+// End of File