imaging/imagingfws/ImageProcessor/src/imageprocessorimpl.h
changeset 0 5752a19fdefe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imaging/imagingfws/ImageProcessor/src/imageprocessorimpl.h	Wed Aug 25 12:29:52 2010 +0300
@@ -0,0 +1,308 @@
+// Copyright (c) 2008-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 __IMAGE_PROCESSOR_IMPL_H__
+#define __IMAGE_PROCESSOR_IMPL_H__
+
+#include <imageconversion.h>
+
+#include <imageprocessor/imageprocessor.h>
+#include <imageprocessor/imageprocessorpluginobserver.h>
+
+namespace ImageProcessor
+	{
+	class CImgProcessor;
+	class MImgProcessorPlugin;
+	class MImgProcessorObserver;
+	class CImageProcessorCallback;
+	class TEffect;
+	class TPreview;
+	class TOverlay;
+	class TProgressInfo;
+	class TInputInfo;
+	class TOutputInfo;
+	namespace Plugin
+		{
+		class MEffect;
+		class MPreview;
+		class MOverlay;
+		class MProgressInfo;
+		class MInputInfo;
+		class MOutputInfo;
+		}
+
+NONSHARABLE_CLASS(CImageProcessorDrmInput) : public CBase  
+	{
+public:
+	static CImageProcessorDrmInput* NewL(TMMSource& aDrmFile);
+		
+	public:
+		void ExecuteIntentL();
+		~CImageProcessorDrmInput();
+		
+		inline HBufC8* Buffer();
+	
+	private:
+		void ConstructL(TMMSource& aDrmFile);
+		
+	private:
+		HBufC8* iDecryptedBuffer;
+		ContentAccess::CContent* iContent;
+		ContentAccess::CData* iData;
+		ContentAccess::TIntent iIntent;
+	};
+
+inline HBufC8* CImageProcessorDrmInput::Buffer()
+	{
+	return iDecryptedBuffer;
+	}
+
+NONSHARABLE_CLASS(CImageProcessorImpl) : public CBase, public MImgProcessorPluginObserver
+   {
+private:
+	static const TBool iValidStates[CImgProcessor::EStatesCount][CImgProcessor::EStatesCount];
+
+public:
+	static CImageProcessorImpl* NewL(RFs& aFileServerSession,CImgProcessor& aImageProcessor,MImgProcessorObserver& aObserver,TUid aPluginUid);
+	void Cleanup();
+	
+	void SupportedEffectsL(RArray<TUid>& aEffects) const;
+	
+	void SupportedInputFormatsL(RArray<TUid>& aFormats) const;
+	void SupportedInputSubFormatsL(TUid aFormat, RArray<TUid>& aSubFormats) const;
+	void SupportedInputImageFrameFormatsL(RArray<TUid>& aFormats) const;
+	void SupportedInputDisplayModesL(RArray<TDisplayMode>& aDisplayModes) const;
+	
+	void SupportedOutputFormatsL(RArray<TUid>& aFormats) const;
+	void SupportedOutputSubFormatsL(TUid aFormat, RArray<TUid>& aSubFormats) const;
+	void SupportedOutputImageFrameFormatsL(RArray<TUid>& aFormats) const;
+	void SupportedOutputDisplayModesL(RArray<TDisplayMode>& aDisplayModes) const;
+	
+	TUint64 SupportedOptions() const;
+	TUint SupportedOperations() const;
+
+	CImgProcessor::TState State() const;
+	TSize CurrentSizeL() const;
+	TRgb BackgroundColorL() const;
+	
+	TInt CalculatePixelBufferSizeL(TSize aSizeInPixels, TDisplayMode aDisplayMode, TUint32 aScanLineLength = 0) const;
+	TInt CalculatePixelBufferSizeL(TSize aSizeInPixels, const TUid& aFormat, TUint32 aScanLineLength = 0) const;
+
+	void CreateInputL(CFbsBitmap& aBitmap);
+	void CreateInputL(CImageFrame& aPixelBuffer);
+	void CreateInputL(const TSize& aSize, const TRgb& aColor);
+
+	void SetBackgroundColorL(const TRgb& aColor);
+	
+	void SetInputRectL(const TRect& aRect);
+	
+	void SetInputL(const TDesC& aFilename, const TUid& aFormat = KNullUid, const TUid& aSubFormat = KNullUid);
+	void SetInputL(RFile& aFile, const TUid& aFormat = KNullUid, const TUid& aSubFormat = KNullUid);
+	void SetInputL(TMMSource& aDrmFile, const TUid& aFormat = KNullUid, const TUid& aSubFormat = KNullUid);
+	void SetInputL(const TDesC8& aBuffer, const TUid& aFormat = KNullUid, const TUid& aSubFormat = KNullUid);
+	void SetInputL(const CFbsBitmap& aBitmap, const CFbsBitmap* aMask = NULL);
+	void SetInputL(const CImageFrame& aPixelBuffer);
+	void SetInputL(CImagePanorama& aPanorama);
+
+
+	void SetOptionsL(TUint64 aOptions);
+	void ApplyOperationL(CImgProcessor::TOperation aOperation);
+
+	void InputUpdatedL();
+	void ResetL();
+
+	void InitializeL(TUint64 aOptions);
+   
+	void ProcessL(const TSize& aSize, TBool aMaintainAspectRatio);
+	void Cancel();
+
+	TEffect* EffectL(TUid aEffect);
+
+	TBool CanUndoL() const;
+	void UndoL();
+	void UndoAllL();
+	
+	TBool CanRedoL() const;
+	void RedoL();
+	void RedoAllL();
+
+	TPreview* PreviewL(TInt aPreviewId);
+
+	TOverlay* OverlayL();
+
+	TProgressInfo* ProgressInfoL();
+	TInputInfo* InputInfoL();
+	TOutputInfo* OutputInfoL();
+
+	void SetOutputL(const TDesC& aFilename, const TUid& aFormat = KNullUid, const TUid& aSubFormat = KNullUid);
+	void SetOutputL(RFile& aFile, const TUid& aFormat = KNullUid, const TUid& aSubFormat = KNullUid);
+	void SetOutputL(RBuf8& aBuffer, const TUid& aFormat = KNullUid, const TUid& aSubFormat = KNullUid);
+	void SetOutputL(CImageFrame& aPixelBuffer);
+	void SetOutputL(CFbsBitmap& aBitmap, CFbsBitmap* aMask = NULL);
+
+	TAny* Extension(TUid aExtension);
+   
+	// framework utility functions
+	void ConvertMimeTypeToUidL(const TDesC8& aMimeType, TUid& aFormat, TUid& aSubFormat);
+	void ConvertFileExtensionToUidL(const TDesC& aFileExtension, TUid& aFormat, TUid& aSubFormat);
+	void ConvertUidToMimeTypeL(TDes8& aMimeType, const TUid& aFormat, const TUid& aSubFormat);
+	void ConvertUidToFileExtensionL(TDes& aFileExtension, const TUid& aFormat, const TUid& aSubFormat);
+	
+	~CImageProcessorImpl();
+      
+	void PostEvent(TInt aEventId, TUid aUid, TInt aId, TInt aError);
+	void ProcessEventL(TInt aEventId, TUid aUid, TInt aId, TInt aError);
+	void SetStateL(CImgProcessor::TState aState);
+	void RestoreStateL();
+
+	TBool IsBusy(CImgProcessor::TState aState) const;
+	void CheckStateL(CImgProcessor::TState aState) const;
+	
+	void AppendOverlayDrmInputL();
+
+	inline RArray<TUid>& PreviewOutputImageFrameFormatsL();
+	inline RArray<TDisplayMode>& PreviewOutputDisplayModesL();
+	inline RArray<TUid>& OverlayInputFormatsL();
+	inline RArray<TUid>& OverlayInputImageFrameFormatsL();
+	inline RArray<TDisplayMode>& OverlayInputDisplayModesL();
+	
+	inline void SetOverlayDrmInput(CImageProcessorDrmInput* aOverlayDrmInput);
+	inline void ResetOverlayDrmInput();
+
+	inline TBool IsInputSet() const;
+	inline TBool IsOutputSet() const;
+	inline TUint64 Options() const;
+   
+private:
+	CImageProcessorImpl(RFs& aFileServerSession, CImgProcessor& aImageProcessor, TUid aPluginUid);
+	void ConstructL(MImgProcessorObserver& aObserver);
+
+	void CheckInputFormatL(const TUid& aFormat, const TUid& aSubFormat);
+	void CheckOutputFormatL(const TUid& aFormat, const TUid& aSubFormat);
+	TBool IsFrameworkEffect(TUid aEffect) const;
+	TBool IsPluginEffect(TUid aEffect) const;
+	void InitializeFrameworkEffectsL();
+   
+	TEffect* FindEffect(TUid aEffect) const;    
+	TEffect* CreateEffectL(TUid aEffect); 
+	TEffect* EffectFactoryL(TUid aEffect, Plugin::MEffect* aPluginEffect);
+	
+	TPreview* FindPreview(TInt aPreviewId) const;
+   
+private:
+	RFs& iFileServerSession;
+	CImgProcessor& iImageProcessor;
+	TUid iPluginUid;
+
+	CImgProcessor::TState iState;
+	CImgProcessor::TState iPreviousState;
+   
+	CImageProcessorCallback* iCallbackHandler;
+   
+	MImgProcessorPlugin* iPlugin;
+	TUid iPluginDtorKey;
+
+	TOverlay* iOverlay;
+	TProgressInfo* iProgressInfo;
+	TInputInfo* iInputInfo;
+	TOutputInfo* iOutputInfo;
+	   
+	CImageProcessorDrmInput* iDrmInput;
+	CImageProcessorDrmInput* iOverlayDrmInput;
+
+	RPointerArray<TEffect> iEffects;
+	RPointerArray<TPreview> iPreviews;
+	RPointerArray<CImageProcessorDrmInput> iOverlayDrmInputs;// to keep all decrypted buffer during session
+
+	RArray<TUid> iFrameworkEffects;
+	RArray<TUid> iPluginEffects;
+	RArray<TUid> iInputFormats;
+	RArray<TUid> iInputImageFrameFormats;
+	RArray<TDisplayMode> iInputDisplayModes;
+	RArray<TUid> iOutputFormats;
+	RArray<TUid> iOutputImageFrameFormats;
+	RArray<TDisplayMode> iOutputDisplayModes;
+	
+	RArray<TUid> iPreviewOutputImageFrameFormats;
+	RArray<TDisplayMode> iPreviewOutputDisplayModes;
+	RArray<TUid> iOverlayInputFormats;
+	RArray<TUid> iOverlayInputImageFrameFormats;
+	RArray<TDisplayMode> iOverlayInputDisplayModes;
+
+	RFileExtensionMIMETypeArray iTypesUtilityArray;
+
+	TUint64 iSupportedOptions;
+	TUint64 iOptions;
+	TUint iSupportedOperations;
+	
+	TBool iIsInputSet;
+	TBool iIsOutputSet;
+	};
+
+inline RArray<TUid>& CImageProcessorImpl::PreviewOutputImageFrameFormatsL()
+	{
+	return iPreviewOutputImageFrameFormats;
+	}
+
+inline RArray<TDisplayMode>& CImageProcessorImpl::PreviewOutputDisplayModesL()
+	{
+	return iPreviewOutputDisplayModes;
+	}
+
+inline RArray<TUid>& CImageProcessorImpl::OverlayInputFormatsL()
+	{
+	return iOverlayInputFormats;
+	}
+
+inline RArray<TUid>& CImageProcessorImpl::OverlayInputImageFrameFormatsL()
+	{
+	return iOverlayInputImageFrameFormats;
+	}
+
+inline RArray<TDisplayMode>& CImageProcessorImpl::OverlayInputDisplayModesL()
+	{
+	return iOverlayInputDisplayModes;
+	}
+
+inline TBool CImageProcessorImpl::IsInputSet() const
+	{
+	return iIsInputSet;
+	}
+
+inline TBool CImageProcessorImpl::IsOutputSet() const
+	{
+	return iIsOutputSet;
+	}
+
+inline TUint64 CImageProcessorImpl::Options() const
+	{
+	return iOptions;
+	}
+
+inline void CImageProcessorImpl::SetOverlayDrmInput(CImageProcessorDrmInput* aOverlayDrmInput)
+	{
+	ResetOverlayDrmInput();
+	iOverlayDrmInput = aOverlayDrmInput;
+	}
+
+inline void CImageProcessorImpl::ResetOverlayDrmInput() 
+	{
+	delete iOverlayDrmInput;
+	iOverlayDrmInput = NULL;
+	}
+
+	} // ImageProcessor
+		
+#endif //__IMAGE_PROCESSOR_IMPL_H__