imagingandcamerafws/camerafw/Include/ECam/implementationfactoryintf.h
changeset 0 40261b775718
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imagingandcamerafws/camerafw/Include/ECam/implementationfactoryintf.h	Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,194 @@
+// Copyright (c) 2007-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:
+//
+
+/**
+ @publishedPartner
+ @prototype
+*/
+
+#ifndef  IMPLEMENTATIONFACTORYINTF_H
+#define  IMPLEMENTATIONFACTORYINTF_H
+
+/**
+Union used to provide future flexibility if extra details are needed by the abstract factory methods.
+
+@publishedPartner
+@prototype
+*/
+union TECamImplFactoryParam
+    {
+public:
+	/** explicit constructor when the union is used to represent a TAny* parameter */
+    explicit TECamImplFactoryParam(TAny* aPtrParam);
+    
+    /** explicit constructor when the union is used to represent a TInt parameter */
+    explicit TECamImplFactoryParam(TInt aIntParam);
+    
+    /** explicit constructor when the union is used to represent a TUint parameter */
+    explicit TECamImplFactoryParam(TUint aUintParam);
+
+public:
+	/** union may represent a TAny* parameter in order to provide extra information for creating concrete implementation. */
+    TAny*   iPtrParam;
+    /** union may represent a TInt parameter in order to provide extra information for creating concrete implementation. */
+    TInt    iIntParam;
+    /** union may represent a TUint parameter in order to provide extra information for creating concrete implementation. */
+    TUint   iUintParam;
+    };
+
+/**
+Abstract Factory Class in order to derive different concrete factory class for image processing implementation specific to 
+VideoCapture and specific Viewfinder. 
+
+Also used to derive concrete factory class for snapshot implementation specific to image capture and video capture.
+
+Also used to derive concrete factory class for histogram implementation specific to still image, video, snapshot or specific viewfinder. 
+
+This may be used in other possible cases as well.
+
+@publishedPartner
+@prototype
+*/	
+class MImplementationFactory
+	{
+public:
+
+	/** 
+	Releases the interface. 
+	*/
+	virtual void Release() =0;
+	
+	/**
+	Provides implementation handle for different implementation products.
+		
+	@param aIfPtr
+		   Retrieves pointer to specifc interface implementation as identified by the interface uid.
+	
+	@param aIfaceUid
+		   The interface uid.
+		   
+	@return any defined error code.
+	
+	@note  KErrNone should be returned only when a valid interface pointer is there. Any other error code implies that
+		   interface implementation pointer is NULL.
+	
+	@note  KErrNotSupported should be returned when the concrete interface implementation is not present.
+	
+	@note  The inferface pointer is retrieved only on the basis of interface uid passed.
+		   Examples of 'interface implementation pointer' - 'interface uid' are as follows:-
+		   MCameraImageProcessing* - KECamMCameraImageProcessingUid; 
+		   MCameraImageProcessing2* - KECamMCameraImageProcessing2Uid;
+		   MCameraImageProcessing3* - KECamMCameraImageProcessing3Uid;
+		   
+		   MCameraSnapshot* - KECamMCameraSnapshotUid;
+		   MCameraSnapshot2* - KECamMCameraSnapshot2Uid;
+		   
+		   MCameraV2Histogram* - KECamMCameraV2HistogramUid;
+		   
+		   Many other pairs may be possible in future. For example when image processing API/ camera snapshot API/ 
+		   histogram API is further extended. 
+		   Or when same concept is being used on other ECam related sub-component.
+	*/
+	virtual TInt GetImpl(TAny*& aIfPtr, TUid aIfaceUid) const=0;
+
+	/**
+	Overloaded method which helps in retrieving the appropriate implementation pointer
+	based on extra information provided through a single 'TECamImplFactoryParam'.
+	
+	Provides implementation handle for different implementation products.
+	
+	@param aIfPtr
+		   Retrieves pointer to specifc interface implementation as identified by the interface uid.
+	
+	@param aIfaceUid
+		   The interface uid.
+		   
+	@param aParam1
+		   union used to provide extra information which could a TAny*, TInt or TUint.
+		   
+	@return error code
+	
+	@note  The inferface pointer is retrieved only on the basis of interface uid passed.
+		   Examples of 'interface implementation pointer' - 'interface uid' are as follows:-
+		   MCameraImageProcessing* - KECamMCameraImageProcessingUid; 
+		   MCameraImageProcessing2* - KECamMCameraImageProcessing2Uid;
+		   MCameraImageProcessing3* - KECamMCameraImageProcessing3Uid;
+		   
+		   MCameraSnapshot* - KECamMCameraSnapshotUid;
+		   MCameraSnapshot2* - KECamMCameraSnapshot2Uid;
+		   
+		   MCameraV2Histogram* - KECamMCameraV2HistogramUid;
+		   
+		   Many other pairs may be possible in future. For example when image processing API/ camera snapshot API/ 
+		   histogram API is further extended. 
+		   Or when same concept is being used on other ECam related sub-component.
+	*/
+	virtual TInt GetImpl1(TAny*& aIfPtr, TUid aIfaceUid, TECamImplFactoryParam aParam1) const=0;
+	
+	/**
+	Overloaded method which helps in retrieving the appropriate implementation pointer
+	based on extra information provided through two different 'TECamImplFactoryParam'.
+	
+	Provides implementation handle for different implementation products.
+	
+	@param aIfPtr
+		   Retrieves pointer to specifc interface implementation as identified by the interface uid.
+	
+	@param aIfaceUid
+		   The interface uid.
+		   
+	@param aParam1
+		   union used to provide extra information which could a TAny*, TInt or TUint.
+		   
+	@param aParam2
+		   union used to provide extra information which could a TAny*, TInt or TUint.
+		   
+	@return error code
+	
+	@note  The inferface pointer is retrieved only on the basis of interface uid passed.
+		   Examples of 'interface implementation pointer' - 'interface uid' are as follows:-
+		   MCameraImageProcessing* - KECamMCameraImageProcessingUid; 
+		   MCameraImageProcessing2* - KECamMCameraImageProcessing2Uid;
+		   MCameraImageProcessing3* - KECamMCameraImageProcessing3Uid;
+		   
+		   MCameraSnapshot* - KECamMCameraSnapshotUid;
+		   MCameraSnapshot2* - KECamMCameraSnapshot2Uid;
+		   
+		   MCameraV2Histogram* - KECamMCameraV2HistogramUid;
+		   
+		   Many other pairs may be possible in future. For example when image processing API/ camera snapshot API/ 
+		   histogram API is further extended. 
+		   Or when same concept is being used on other ECam related sub-component.
+	*/
+    virtual TInt GetImpl2(TAny*& aIfPtr, TUid aIfaceUid, TECamImplFactoryParam aParam1, TECamImplFactoryParam aParam2) const=0;
+	};
+
+inline
+TECamImplFactoryParam::TECamImplFactoryParam(TAny* aPtrParam):iPtrParam(aPtrParam)
+    {
+    }
+
+inline
+TECamImplFactoryParam::TECamImplFactoryParam(TInt aIntParam):iIntParam(aIntParam)
+    {
+    }
+
+inline
+TECamImplFactoryParam::TECamImplFactoryParam(TUint aUintParam):iUintParam(aUintParam)
+    {
+    }
+
+	
+#endif // IMPLEMENTATIONFACTORYINTF_H