diff -r 735348f59235 -r 948c7f65f6d4 mmplugins/imagingplugins/codecs/JPEGCodec/Exif/exiftransform.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmplugins/imagingplugins/codecs/JPEGCodec/Exif/exiftransform.cpp Wed Sep 01 12:38:50 2010 +0100 @@ -0,0 +1,134 @@ +// 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 +#include "exiftransform.h" + +#include "ImageUtils.h" +#include "ExifTagHelper.h" +#include "ExifGeneralConsts.h" +#include "ifdgeneral.h" +#include "ExifTagDescriptions.h" + +/*static*/ +CExifTransform* CExifTransform::NewL(const TUint8* aData, const TUint aApp1Size) + { + CExifTransform* self = new (ELeave) CExifTransform(); + CleanupStack::PushL(self); + self->ConstructL(aData, aApp1Size); + CleanupStack::Pop(self); + return self; + } + + +CExifTransform::CExifTransform() + { + } + + +void CExifTransform::ConstructL(const TUint8* aData, const TUint aApp1Size) + { + if(aData) + { + TUint8* dataPtr = const_cast(aData); + InitializeIfdsL(dataPtr, aApp1Size); + } + else + { + InitializeIfdsL(ETrue, EFalse); + } + } + + +CExifTransform::~CExifTransform() + { + } + +void CExifTransform::SetIfd1L() + { + TUint offsetToFirstIfd = 0; + + CIfdGeneral* ifd0 = GetIfd(EZeroth); + ASSERT(ifd0); + + User::LeaveIfError(ifd0->GetOffsetToFirstIfd(offsetToFirstIfd)); + + if (CheckExifOffset(offsetToFirstIfd) != KErrNone) + { + offsetToFirstIfd = 0; + } + + CIfd1* ifd1 = CIfd1::NewLC(offsetToFirstIfd, offsetToFirstIfd ? iBase : NULL, iIntel, iExifDataLength); + iIfds.AppendL(ifd1); + CleanupStack::Pop(ifd1); + + if (offsetToFirstIfd) + { + SetThumbnailDataBaseL(ifd1, ETrue); + } + } + +TInt CExifTransform::CreateExifChunk(HBufC8*& aExifChunk) + { + TRAPD(err, CreateExifHeaderL(aExifChunk)); + return err; + } + +// Creates the Exif Header proper, i.e. by pulling together all the appropriate data held in the IFD's. +void CExifTransform::CreateExifHeaderL(HBufC8*& aBuffer) + { + if(aBuffer != NULL) + { + delete aBuffer; + aBuffer=NULL; + } + + if(!GetJpegThumbnailData()) + { + // we have to remove all the thumbnail data + RemoveThumbnailData(); + } + + aBuffer = CreateExifHeaderBaseL(); + } + +void CExifTransform::CheckUpdateMandatoryTagsL() + { + CIfdGeneral* ifd = NULL; + for (TInt i = 0; i < iIfds.Count(); i++) + { + ifd = iIfds[i]; + ifd->CheckMandatoryEntriesL(); + } + } + +TBool CExifTransform::CheckImageSizeTags() + { + CExifIfd* exifIfd = static_cast (GetIfd(EExifSub)); + if (exifIfd) + { + return exifIfd->CheckImageSizeTags(); + } + return EFalse; + } + +void CExifTransform::UpdateImageSizeTagsL(const TSize& aSize) + { + CExifIfd* exifIfd = static_cast (GetIfd(EExifSub)); + if (exifIfd) + { + exifIfd->UpdateImageSizeTagsL(aSize); + } + }