diff -r 000000000000 -r 40261b775718 imagingandcamerafws/camerafw/Include/ECam/implementationfactoryintf.h --- /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