imaging/imagingplugins/codecs/JPEGCodec/Exif/ExifJpegTransform.cpp
changeset 0 5752a19fdefe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imaging/imagingplugins/codecs/JPEGCodec/Exif/ExifJpegTransform.cpp	Wed Aug 25 12:29:52 2010 +0300
@@ -0,0 +1,140 @@
+// Copyright (c) 2004-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 "ExifJpegTransform.h"
+#include "icl/ExifJpegTransformExtension.h"
+
+#include "exiftransformdataaccessorimpl.h"
+#include "ExifEditUtility.h"
+#include <icl/icl_uids.hrh>
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <icl/icl_uids_const.hrh>
+#include <icl/icl_uids_def.hrh>
+#endif
+
+
+
+CExifJpegTransform* CExifJpegTransform::NewL()
+	{
+	CExifJpegTransform* self = new (ELeave) CExifJpegTransform;
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	
+	return self;
+	}
+
+CExifJpegTransform::~CExifJpegTransform()
+	{
+	delete iExtension;
+	delete iExifEdit;
+	
+	//Can not simply delete iDest/iSource since all we have are M-class pointers.
+	if (iDest)
+		{
+		iDest->Destroy();
+		iDest = NULL;
+		}
+
+	if (iSource)
+		{
+		iSource->Destroy();
+		iSource = NULL;
+		}
+				
+	iFs.Close();
+	}
+
+
+CExifJpegTransform::CExifJpegTransform()
+	{
+	
+	}
+	
+void CExifJpegTransform::ConstructL()
+	{
+	User::LeaveIfError(iFs.Connect());
+	}
+
+MExifMetadata* CExifJpegTransform::ExifMetadata() const
+	{
+	if(iExifEdit)
+		{
+		return iExifEdit->ExifMetadata();	
+		}
+	return NULL;
+	}
+
+
+void CExifJpegTransform::Transform(TRequestStatus& aStatus)
+	{
+	TBool encodeThumbnail=EFalse;
+	if((Options()&CImageTransform::EThumbnail)==CImageTransform::EThumbnail)
+		{
+		encodeThumbnail=ETrue;		
+		}
+	
+	TRAPD(err, iExifEdit->WriteDestL(encodeThumbnail, DestinationSizeInPixels(), PreserveImageData(), MaintainAspectRatio(), &aStatus));
+	if(err!=KErrNone)
+		{
+		aStatus=KRequestPending;
+		TRequestStatus* status=&aStatus;
+		User::RequestComplete(status, err);
+		}
+	}
+
+
+void CExifJpegTransform::OpenL()
+	{		
+	if (SourceIsFilename())
+		{
+		iSource = new (ELeave) CExifFileSource(SourceFilename(), iFs);
+		}
+	else if (SourceIsData())
+		{
+		iSource = new (ELeave) CExifDescSource(SourceData(), iFs);
+		}
+	else
+		{
+		User::Leave(KErrNotSupported);
+		}
+		
+	if (DestIsFilename())
+		{
+		iDest = new (ELeave) CExifFileDest(DestFilename(), iFs);
+		}
+	else if (DestIsData())
+		{
+		iDest = new (ELeave) CExifDescDest(DestData());
+		}
+	else
+		{
+		User::Leave(KErrNotSupported);
+		}
+	iExifEdit=CExifEditUtility::NewL(iSource, iDest, Options() & CImageTransform::EIgnoreExifMetadataProcessing);	
+	iExifEdit->ReadSourceL();
+	iExtension=(CImageTransformPluginExtension*)CJpegTransformExtension::NewL(this);	
+	}
+
+	
+void CExifJpegTransform::CancelTransform()
+	{
+	iExifEdit->Cancel();
+	}
+
+CImageTransformPluginExtension* CExifJpegTransform::Extension() const
+	{
+	return iExtension;
+	}