imaging/imagingfws/MediaClientImage/Include/MdaImageConverterPriv.h
changeset 0 5752a19fdefe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imaging/imagingfws/MediaClientImage/Include/MdaImageConverterPriv.h	Wed Aug 25 12:29:52 2010 +0300
@@ -0,0 +1,356 @@
+// 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:
+// MdaImageConverter.h
+// Implementation of the API interfaces defined in MdaImageConverter.h
+// 
+//
+
+#ifndef __MDAIMAGECONVERTERPRIV_H__
+#define __MDAIMAGECONVERTERPRIV_H__
+
+#include <fbs.h>
+#include <bitdev.h>
+
+#include <icl/imagedata.h>
+#include <mda/client/resource.h>
+#include <mda/client/utility.h>
+
+#include "BitmapConverter.h"
+#include <bitmaptransforms.h>
+
+#include <mda/common/video.h>
+
+enum 
+	{
+	EMDAImConvPanicNotImplemented=1,
+	EMDAImConvPanicNotYetOpen
+	};
+
+
+class CMdaServer;
+class REComSession;
+class MMdaImageUtilObserver;
+class TFrameDataBlock;
+class TImageDataBlock;
+
+// CMdaImageUtilityPriv
+class CMdaImageUtilityPriv; // declared here
+NONSHARABLE_CLASS( CMdaImageUtilityPriv ): public CBase
+	{
+friend class CMdaImageUtility;
+friend class CMdaImageDataReadUtility;
+friend class CMdaImageBitmapToBitmapUtility;
+
+public:
+	virtual ~CMdaImageUtilityPriv();
+protected:
+	virtual void Close();
+	virtual void ConvertL(CFbsBitmap& aBitmap,TInt aFrameNumber = 0) = 0;
+	virtual void ConvertL(CFbsBitmap& aBitmap,CFbsBitmap& aMaskBitmap,TInt aFrameNumber = 0) = 0;
+	virtual void CancelConvertL() = 0;
+	virtual void FrameInfo(TInt aFrame,TFrameInfo& aInfo) const;
+	virtual TInt FrameCount() const;
+protected:
+	CMdaImageUtilityPriv(MMdaImageUtilObserver& aObserver, CMdaImageUtility* aParent);
+	void Close(TBool aFullClose);
+	void Initialize();
+	virtual void DoClose();
+	void SelfComplete(TInt aError);
+	void SetUidsFromOrigFormatsL(TMdaClipFormat* aFormat,TMdaPackage* aCodec,TMdaPackage* aExtra);
+	void OpenFsSessionL();
+	void OpenEcomSessionL();
+	void CloseEcomSession();
+#if defined(__ECOM_POWERDOWN_WORKAROUND)
+	void OpenWaitTimerL();
+#endif defined(__ECOM_POWERDOWN_WORKAROUND)
+	// Calls from CActive derived parent objects
+	virtual void RunL()=0;
+	virtual void DoCancel()=0;
+protected:
+	MMdaImageUtilObserver&	iObserver;
+	CMdaImageUtility*		iParent;	// link back to the handle class
+	TUid					iImageType;
+	TUid					iImageSubType;
+	TFrameDataBlock*		iFrameData;
+	TImageDataBlock*		iImageData;
+	RFs						iFs;
+	REComSession*			iEcomSession; // not owned
+#if defined(__ECOM_POWERDOWN_WORKAROUND)
+	RTimer iWaitTimer;
+	TInt iWaitTimeCount;
+#endif defined(__ECOM_POWERDOWN_WORKAROUND)
+	};
+
+// CMdaImageDataReadUtilityPriv
+class CImageDecoder;
+class CMdaImageDataReadUtility;
+class CMdaImageDataReadUtilityPriv; // declared here
+NONSHARABLE_CLASS( CMdaImageDataReadUtilityPriv ): public CMdaImageUtilityPriv
+	{
+public:
+	virtual ~CMdaImageDataReadUtilityPriv();
+	// From CMdaImageUtility
+	virtual void ConvertL(CFbsBitmap& aBitmap,TInt aFrameNumber = 0);
+	virtual void ConvertL(CFbsBitmap& aBitmap,CFbsBitmap& aMaskBitmap,TInt aFrameNumber = 0);
+	virtual void CancelConvertL();
+	virtual void RunL();
+	virtual void DoCancel();
+public:
+	virtual void FrameInfo(TInt aFrame,TFrameInfo& aInfo) const;
+	virtual TInt FrameCount() const;
+	virtual void DoClose();
+	const TDesC& FrameCommentL(TInt aFrameNumber);
+protected:
+	enum TState
+		{
+		EStateClosed,
+		EStateOpening,
+		EStateOpeningWait,
+		EStateOpen,
+		EStateConverting
+		};
+	CMdaImageDataReadUtilityPriv(MMdaImageUtilObserver& aObserver, CMdaImageDataReadUtility* aParent);
+
+	// Creates relevant iDecoder property - depending on subclass.
+	// Called by "background" AO processing.
+ 	virtual void DoOpenL()=0;
+private:
+	inline CMdaImageDataReadUtility* Parent() const;
+	void GetCommentL();
+
+protected:
+	CImageDecoder* iDecoder;
+	TState iState;
+
+	TBool iPrevConvertUnderflowed;
+	TSize iDestinationSize; // used to check we don't continue with different bitmap
+	TInt iDestinationHandle;
+	TInt iDestinationMaskHandle; 
+	TInt iKeptFrameNumber;
+	TDisplayMode iDestinationDisplayMode;
+	TDisplayMode iDestinationMaskDisplayMode;
+	RPointerArray<HBufC> iComment;
+	};
+
+
+class CImageEncoder;
+class CFrameImageData;
+class CMdaImageDataWriteUtility;
+class CMdaImageDataWriteUtilityPriv; // declared here
+NONSHARABLE_CLASS( CMdaImageDataWriteUtilityPriv ): public CMdaImageUtilityPriv
+	{
+friend class CMdaImageDataWriteUtility;
+
+public:
+	virtual ~CMdaImageDataWriteUtilityPriv();
+	// From CMdaImageUtility
+	virtual void ConvertL(CFbsBitmap& aBitmap,TInt aFrameNumber = 0);
+	virtual void ConvertL(CFbsBitmap& aBitmap,const TRect& aSourceRect,TInt aFrameNumber = 0);
+	virtual void ConvertL(CFbsBitmap& aBitmap,CFbsBitmap& aMaskBitmap,TInt aFrameNumber = 0);
+	virtual void CancelConvertL();
+	CImageEncoder* Encoder() const;
+protected:
+	virtual void RunL();
+	virtual void DoCancel();
+protected:
+	enum TState
+		{
+		EStateClosed,
+		EStateCreating,
+		EStateOpen,
+		EStateConverting,
+		EStateCopying,
+		EStateCancelled
+		};
+	CMdaImageDataWriteUtilityPriv(MMdaImageUtilObserver& aObserver, CMdaImageDataWriteUtility* aParent);
+
+	virtual void DoClose();
+
+	// Creates relevant <code>iEncoder</code> property - depending on subclass.
+	// Called by "background" AO processing.
+	virtual void DoCreateL(TBool aFullCreate=ETrue)=0;
+
+	// Used at end to copy any data to destination if req. Default is no-op.
+	virtual void DoFinalCopyL();
+
+	// Complete iEncoder initialisation once created
+	void CompleteEncoderCreationL();
+private:
+	inline CMdaImageDataWriteUtility* Parent() const;
+protected:
+	CImageEncoder* iEncoder;
+	CFrameImageData* iFrameImageData;
+	TState iState;
+	};
+
+class CMdaImageFileToBitmapUtility;
+class CMdaImageFileToBitmapUtilityPriv; // declared here
+NONSHARABLE_CLASS( CMdaImageFileToBitmapUtilityPriv ): public CMdaImageDataReadUtilityPriv
+	{
+public:
+	static CMdaImageFileToBitmapUtilityPriv* NewL(MMdaImageUtilObserver& aObserver, CMdaImageFileToBitmapUtility* aParent);
+	virtual ~CMdaImageFileToBitmapUtilityPriv();
+	void OpenL(const TDesC& aFileName,TMdaClipFormat* aFormat = NULL,TMdaPackage* aCodec = NULL,TMdaPackage* aExtra = NULL);
+protected:
+	CMdaImageFileToBitmapUtilityPriv(MMdaImageUtilObserver& aObserver, CMdaImageFileToBitmapUtility* aParent);
+	void ConstructL();
+	// from CMdaImageDataReadUtility
+	void DoOpenL();
+private:
+	inline CMdaImageFileToBitmapUtility* Parent() const;
+protected:
+	HBufC *iFileName;
+	};
+
+class CMdaImageDescToBitmapUtility;
+class CMdaImageDescToBitmapUtilityPriv; // declared here
+NONSHARABLE_CLASS( CMdaImageDescToBitmapUtilityPriv ): public CMdaImageDataReadUtilityPriv
+	{
+public:
+	static CMdaImageDescToBitmapUtilityPriv* NewL(MMdaImageUtilObserver& aObserver,CMdaImageDescToBitmapUtility* aParent);
+	void OpenL(const TDesC8& aDescriptor,TMdaClipFormat* aFormat = NULL,TMdaPackage* aCodec = NULL,TMdaPackage* aExtra = NULL);
+protected:
+	CMdaImageDescToBitmapUtilityPriv(MMdaImageUtilObserver& aObserver, CMdaImageDescToBitmapUtility* aParent);
+	void ConstructL();
+	// from CMdaImageDataReadUtilityPriv
+	void DoOpenL();
+private:
+	inline CMdaImageDescToBitmapUtility* Parent() const;
+protected:
+	const TDesC8* iDescriptor; // not owned
+	};
+
+class CMdaImageBitmapToFileUtility;
+class CMdaImageBitmapToFileUtilityPriv; // declared here
+NONSHARABLE_CLASS( CMdaImageBitmapToFileUtilityPriv ): public CMdaImageDataWriteUtilityPriv
+	{
+public:
+	static CMdaImageBitmapToFileUtilityPriv* NewL(MMdaImageUtilObserver& aObserver,CMdaImageBitmapToFileUtility* aParent);
+	virtual ~CMdaImageBitmapToFileUtilityPriv();
+	void CreateL(const TDesC& aFileName,TMdaClipFormat* aFormat,TMdaPackage* aCodec,TMdaPackage* aExtra);
+protected:
+	CMdaImageBitmapToFileUtilityPriv(MMdaImageUtilObserver& aObserver, CMdaImageBitmapToFileUtility* aParent);
+	void ConstructL();
+	// from CMdaImageDataWriteUtility
+	void DoCreateL(TBool aFullCreate=ETrue);
+private:
+	inline CMdaImageBitmapToFileUtility* Parent() const;
+protected:
+	HBufC *iFileName;
+	};
+
+class CMdaImageBitmapToDescUtility;
+class CMdaImageBitmapToDescUtilityPriv; // declared here
+NONSHARABLE_CLASS( CMdaImageBitmapToDescUtilityPriv ): public CMdaImageDataWriteUtilityPriv
+	{
+public:
+	static CMdaImageBitmapToDescUtilityPriv* NewL(MMdaImageUtilObserver& aObserver,CMdaImageBitmapToDescUtility* aParent);
+	void CreateL(TDes8& aDescriptor,TMdaClipFormat* aFormat,TMdaPackage* aCodec,TMdaPackage* aExtra);
+	virtual ~CMdaImageBitmapToDescUtilityPriv();
+protected:
+	CMdaImageBitmapToDescUtilityPriv(MMdaImageUtilObserver& aObserver, CMdaImageBitmapToDescUtility* aParent);
+	// from CMdaImageDataWriteUtility
+	virtual void DoCreateL(TBool aFullCreate=ETrue);
+	virtual void DoFinalCopyL();
+private:
+	inline CMdaImageBitmapToDescUtility* Parent() const;
+protected:
+	TDes8*	iDescriptor;
+	HBufC8* iSecondBuffer; 
+	};
+
+class CMdaImageBitmapToBitmapUtilityPriv; // declared here
+NONSHARABLE_CLASS( CMdaImageBitmapToBitmapUtilityPriv ): public CMdaImageUtilityPriv
+	{
+public:
+	static CMdaImageBitmapToBitmapUtilityPriv* NewL(MMdaImageUtilObserver& aObserver, CMdaImageBitmapToBitmapUtility* aParent);
+	~CMdaImageBitmapToBitmapUtilityPriv();
+	void OpenL(CFbsBitmap& aBitmap);
+	// from CMdaImageUtility
+	virtual void ConvertL(CFbsBitmap& aBitmap, TInt aFrameNumber = 0);
+	virtual void ConvertL(CFbsBitmap& aBitmap, CFbsBitmap& aMaskBitmap, TInt aFrameNumber = 0);
+	virtual void CancelConvertL();
+	virtual void RunL();
+	virtual void DoCancel();
+	// From CMdaImageUtility
+	virtual void DoClose();
+protected:
+	CMdaImageBitmapToBitmapUtilityPriv(MMdaImageUtilObserver& aObserver, CMdaImageBitmapToBitmapUtility* aParent);
+private:
+	inline CMdaImageBitmapToBitmapUtility* Parent() const;
+
+protected:
+	enum TUtilState
+		{
+		EClosed,
+		EReady,
+		EOpening,
+		ECopying
+		};
+protected:
+//	RMdaSourceStreamPort iSrcPort;
+//	RMdaDestinationStreamPort iDstPort;
+private:
+	CBitmapConverter* iBitmapCopier;
+	TUtilState iState;
+	CFbsBitmap* iSrcBitmap;
+	};
+
+class CMdaBitmapRotator;
+class CMdaBitmapRotatorPriv; // declared here
+NONSHARABLE_CLASS( CMdaBitmapRotatorPriv ): public CActive
+	{
+public:
+	static CMdaBitmapRotatorPriv* NewL();
+	virtual ~CMdaBitmapRotatorPriv();
+	void RotateL(MMdaImageUtilObserver& aObserver,CFbsBitmap& aSrcBitmap,CFbsBitmap& aTgtBitmap,CMdaBitmapRotator::TRotationAngle aAngle);
+	void RotateL(MMdaImageUtilObserver& aObserver,CFbsBitmap& aBitmap,CMdaBitmapRotator::TRotationAngle aAngle);
+	void CancelRotation();
+protected:	
+	CMdaBitmapRotatorPriv();
+	void ConstructL();
+	// from CActive
+	virtual void RunL();
+	virtual void DoCancel();
+	CBitmapRotator::TRotationAngle MapRotationAngle(CMdaBitmapRotator::TRotationAngle aAngle);
+protected:
+	MMdaImageUtilObserver*	iObserver; // not owned
+	CBitmapRotator*			iBitmapRotator;
+	};
+
+class CMdaBitmapScaler;
+class CMdaBitmapScalerPriv; // declared here
+NONSHARABLE_CLASS( CMdaBitmapScalerPriv ): public CActive
+	{
+public:
+	static CMdaBitmapScalerPriv* NewL();
+	virtual ~CMdaBitmapScalerPriv();
+	void ScaleL(MMdaImageUtilObserver& aObserver,CFbsBitmap& aSrcBitmap,CFbsBitmap& aTgtBitmap,TBool aMaintainAspectRatio = ETrue);
+	void ScaleL(MMdaImageUtilObserver& aObserver,CFbsBitmap& aBitmap,TSize aDestSize,TBool aMaintainAspectRatio = ETrue);
+	void CancelScaling();
+protected:
+	CMdaBitmapScalerPriv();
+	void ConstructL();
+	// from CActive
+	virtual void RunL();
+	virtual void DoCancel();
+protected:
+	MMdaImageUtilObserver*	iObserver;	// not owned
+	CBitmapScaler*			iBitmapScaler;
+	};
+
+#include "MdaImageConverterPriv.inl"
+
+#endif // __MDAIMAGECONVERTERPRIV_H__
+