imagingandcamerafws/camerafw/source/EcamPluginSupport.cpp
changeset 0 40261b775718
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imagingandcamerafws/camerafw/source/EcamPluginSupport.cpp	Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,132 @@
+// Copyright (c) 2003-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:
+//
+
+#include <ecam/ecamplugin.h>
+#include <ecam/ecaminfoplugin.h>
+
+#include <ecom/ecom.h>
+#include <mm/mmpluginutils.h>
+
+#include <ecamuids.hrh>
+
+//
+// CCameraPlugin
+//
+
+EXPORT_C TInt CCameraPlugin::CamerasAvailable()
+	{
+	CCameraInfoPlugin* info = NULL;
+	TRAPD(error, info = CCameraInfoPlugin::NewL());
+	if (error!=KErrNone)
+		{
+		// error during open, default to 0
+		// TODO - can we return an error here?
+		return 0;
+		}
+	TInt result = info->CamerasAvailable();
+	delete info;
+	REComSession::FinalClose(); // don't have to do this here, but might as well tidy up
+	return result;
+	}
+	
+CCameraPlugin* CCameraPlugin::NewL(TInt aCameraVersion)
+	{
+	TUid interfaceUid = {KUidOnboardCameraPlugin};
+	TUid dtor;
+
+#ifdef _DEBUG
+	CCameraPlugin* self = 
+		static_cast<CCameraPlugin*>
+			(MmPluginUtils::CreateImplementationL(interfaceUid, dtor, KECamPluginMatchString));
+#else
+	CCameraPlugin* self = 
+		static_cast<CCameraPlugin*>
+			(MmPluginUtils::CreateImplementationL(interfaceUid, dtor, KECamPluginMatchString, KRomOnlyResolverUid));
+#endif
+
+	//create CCameraStructure here
+	self->iCameraStructure = new CCameraStructure();
+	if (!self->iCameraStructure)
+		{
+		delete self;
+		REComSession::DestroyedImplementation(dtor);
+		User::Leave(KErrNoMemory);
+		}
+	else
+		{
+		self->iCameraStructure->iCameraVersion = aCameraVersion;
+	 	self->iCameraStructure->iDestructorKey = dtor;	
+		}
+	return self;
+	}
+
+CCameraPlugin* CCameraPlugin::NewLC(TInt aCameraVersion)
+	{
+	CCameraPlugin* self = NewL(aCameraVersion);
+	CleanupStack::PushL(self);
+	return self;	
+	}
+
+EXPORT_C CCameraPlugin* CCameraPlugin::NewL(MCameraObserver2& aObserver,TInt aCameraIndex,TInt aPriority,TInt aCameraVersion)
+	{
+	CCameraPlugin* self = NewLC(aCameraVersion);
+	self->Construct2L(aObserver, aCameraIndex, aPriority);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CCameraPlugin* CCameraPlugin::NewDuplicateL(MCameraObserver2& aObserver,TInt aCameraHandle,TInt aCameraVersion)
+	{
+	CCameraPlugin* self = NewLC(aCameraVersion);
+	self->Construct2DupL(aObserver, aCameraHandle);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+
+EXPORT_C CCameraPlugin* CCameraPlugin::NewL(MCameraObserver& aObserver,TInt aCameraIndex,TInt aCameraVersion)
+	{
+	CCameraPlugin* self = NewLC(aCameraVersion);
+	self->Construct2L(aObserver, aCameraIndex);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CCameraPlugin* CCameraPlugin::NewDuplicateL(MCameraObserver& aObserver,TInt aCameraHandle,TInt aCameraVersion)
+	{
+	CCameraPlugin* self = NewLC(aCameraVersion);
+	self->Construct2DupL(aObserver, aCameraHandle);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+EXPORT_C CCameraPlugin::~CCameraPlugin()
+	{
+	if (iCameraStructure)
+		{
+		REComSession::DestroyedImplementation(iCameraStructure->iDestructorKey);
+		}
+	delete iCameraStructure;
+	}
+	
+EXPORT_C CCameraPlugin::CCameraPlugin()
+	{
+	}
+	
+EXPORT_C TInt CCameraPlugin::CameraVersion()
+	{
+	return iCameraStructure->iCameraVersion;
+	}
+