diff -r 000000000000 -r 40261b775718 mmplugins/imagingplugins/codecs/JPEGCodec/Exif/exifreaderwriter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmplugins/imagingplugins/codecs/JPEGCodec/Exif/exifreaderwriter.h Tue Feb 02 01:56:55 2010 +0200 @@ -0,0 +1,122 @@ +// 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: +// + +#ifndef EXIFREADERWRITER_H +#define EXIFREADERWRITER_H + +#include // For MExifMetadata declaration + +// Forward declarations +class CIfdGeneral; +class CIfd0; +class CIfd1; +class CExifIfd; +class CInteropIfd; +class CGpsIfd; + +class CExifReaderWriter : public CBase, public MExifMetadata + { +public: + friend class CExifVerifier; + +public: + ~CExifReaderWriter(); + + // Functions derived from MExifMetaData + TInt GetIntegerParam(TUint aTag, TUint aIfd, TInt& aParam) const; + TInt GetShortParam(TUint aTag, TUint aIfd, TUint16& aParam) const; + TInt GetRationalParam(TUint aTag, TUint aIfd, TInt& aNumer, TInt& aDenom) const; + TInt GetParam8(TUint aTag, TUint aIfd, HBufC8*& aParam) const; + TInt GetParam16(TUint aTag, TUint aIfd, HBufC16*& aParam) const; + TInt GetIntegerArrayParam(TUint aTag, TUint aIfd, CArrayFix& aParam) const; + TInt GetShortArrayParam(TUint aTag, TUint aIfd, CArrayFix& aParam) const; + TInt GetRationalArrayParam(TUint aTag, TUint aIfd, CArrayFix& aParam) const; + + TInt SetParam8(TUint aTag, TUint aIfd, HBufC8* aParam); + TInt SetParam16(TUint aTag, TUint aIfd, HBufC16* aParam); + TInt SetIntegerParam(TUint aTag, TUint aIfd, TInt aParam); + TInt SetShortParam(TUint aTag, TUint aIfd, TUint16 aParam); + TInt SetRationalParam(TUint aTag, TUint aIfd, TInt aNumerator, TInt aDenominator); + TInt SetIntegerArrayParam(TUint aTag, TUint aIfd, CArrayFix& aParam); + TInt SetShortArrayParam(TUint aTag, TUint aIfd, CArrayFix& aParam); + TInt SetRationalArrayParam(TUint aTag, TUint aIfd, CArrayFix& aParam); + + + virtual HBufC8* GetJpegThumbnailData(); + virtual void SetThumbnailData(HBufC8* aJpegData); + + TBool IsExifDataModified(); + void ResetExifDataModified(); + + // Helper Function + static TUint ReadUint32(const TBool aIntelByteAlign, const TUint8* aPtr); + // Helper Function + static TUint16 ReadUint16(const TBool aIntelByteAlign, const TUint8* aPtr); + +protected: + void SetUpIfdsL(); + virtual void SetIfd1L()=0; + TInt CheckExifOffset(const TUint aOffset); + TBool FindIfdIndex(TInt aRealIfd, TInt& aIfdIndex) const; + CIfdGeneral* GetIfd(TInt aIndex); + void RemoveThumbnailData(); + + CExifReaderWriter(); + + void InitializeIfdsL(TBool aAlwaysCreateIfd1, TBool aCreateGpsIfd); + void InitializeIfdsL(TUint8* aData, TUint aApp1Size); + + void SetThumbnailDataBaseL(CIfdGeneral* ifd1, TBool aKeepIfd1); + HBufC8* CreateExifHeaderBaseL(); + TInt GetThumbnailLengthOffsetBase(TUint& aThumbnailLengthOffset); + +private: // functions + + void ReadHeaderL(); + TInt InternalIfd(const TUint aTag, const TInt aExternalIfd) const; + TInt CheckTagL(const TUint aTag, const TUint aIfd) const; + void FindInternalIfdDataL(const TUint aTag, const TUint aExternalIfdNumber, TInt& aInternalIfdNumber, CIfdGeneral*& aInternalIfd); + CIfdGeneral* FindIfd(const TUint aTag, const TUint aExternalIfd) const; + TInt ProcessGpsIfdAddParamResult(CIfdGeneral*& aGpsIfd, TInt aAddParamResult); + CIfdGeneral* CreateAndAppendSubIfdL(CIfdGeneral& aIfd, TUint aTag); + + // thumbnail helper functions + virtual void WriteExifFileHeaderBaseL(const TUint aApp1Size, TUint8*& aPtr); + virtual void SetFirstIfdOffsetBase(); + + TInt DoSetParam8(TUint aTag, TUint aIfd, HBufC8* aParam); + TInt DoSetParam16(TUint aTag, TUint aIfd, HBufC16* aParam); + TInt DoSetIntegerParam(TUint aTag, TUint aIfd, TInt aParam); + TInt DoSetShortParam(TUint aTag, TUint aIfd, TUint16 aParam); + TInt DoSetRationalParam(TUint aTag, TUint aIfd, TInt aNumerator, TInt aDenominator); + TInt DoSetIntegerArrayParam(TUint aTag, TUint aIfd, CArrayFix& aParam); + TInt DoSetShortArrayParam(TUint aTag, TUint aIfd, CArrayFix& aParam); + TInt DoSetRationalArrayParam(TUint aTag, TUint aIfd, CArrayFix& aParam); + +protected: + RPointerArray iIfds; //own IFDs + TBool iEncodeThumbnail; + TUint8* iData; + TBool iIntel; + const TUint8* iBase; + TUint16 iExifDataLength; // used to check that offsets are within a valid range + +private: // member variables + TUint iOffsetToZerothIfd; + HBufC8* iJpegThumbnailData; + TBool iExifDataModified; + }; + +#endif // EXIFREADERWRITER_H