diff -r 000000000000 -r 5752a19fdefe imaging/imagingplugins/codecs/JPEGCodec/Exif/ExifJpegTransform.cpp --- /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 +#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS +#include +#include +#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; + }