imagingmodules/exiflib/inc/ExifModifyImpl.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 09:22:31 +0200
changeset 0 469c91dae73b
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 2003, 2004 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:  Exif file format creator/modifier class implementation
*
*/


#ifndef EXIFMODIFYIMPL_H
#define EXIFMODIFYIMPL_H

// INCLUDES
#include "ExifModify.h"

// CONSTANTS

// MACROS

// DATA TYPES

// FUNCTION PROTOTYPES

// FORWARD DECLARATIONS
class CExifReadImpl;
class CExifCore;

/**
* CExifModify
* Implementation class for modifying existing Exif v2.2 (or prior) file 
* format or creating Exif v2.2 file format using valid Jpeg image. 
* An instance of this class can be instantiated in one of two ways:
* by providing valid Exif data or by providing valid Jpeg image.
* 
* @lib ExifLib.lib
* @since 2.6 
*/
NONSHARABLE_CLASS( CExifModifyImpl ): public CExifModify
    {
    public:  // Constructors and destructor
 
        /**
        * Two-phased constructor.
        */
    	static CExifModifyImpl* NewL( const TDesC8& aExifData, TBool aCreate, TUint aExifModifyOption );

        /**
        * Two-phased constructor.
        */
    	static CExifModifyImpl* NewL();

        /**
        * Destructor.
        */
        virtual ~CExifModifyImpl();

    protected:  // Functions from base classes
        
        /**
        * From CExifModify. Returns a constant pointer to a CExifRead instance 
        * that can be used to parse the associated Exif image.
        * @since 2.6 
        * @return Unmodifiable pointer to Exif reader instance.
        */
    	const CExifRead* Reader() const;

        /**
        * From CExifModify. Inserts/Updates the given tag in the specified IFD 
        * structure of the Exif data.
        * @since 2.6 
        * @param aIfdType The hosting IFD type.
        * @param aExifTagInfo The informative fields of tag that is updated.
        * @param aExifData Data of the tag that is updated.
        * @return void
        */
    	void SetTagL( 
            TExifIfdType aIfdType, 
            TExifTagInfo aExifTagInfo, 
            const TDesC8& aTagData );

        /**
        * From CExifModify. Removes the tag with the given tag ID from the 
        * specified IFD structure in the Exif data.
        * @since 2.6 
        * @param aIfdType The hosting IFD type.
        * @param aTagId The target tag ID.
        * @return Error code.
        */
    	TInt DeleteTag( TExifIfdType aIfdType, TUint16 aTagId );

        /**
        * From CExifModify. Removes the specified IFD structure and all its tags 
        * from the Exif data.
        * @since 2.6 
        * @param aIfdType The target IFD type.
        * @return Error code.
        */
    	TInt DeleteIfd( TExifIfdType aIfdType );

        /**
        * From CExifModify. Inserts/Updates the given thumbnail Jpeg image data 
        * into the 1st IFD structure in the Exif data.
        * @since 2.6 
        * @param aThumbnailData The Exif thumbnail image data that is updated.
        * @return void
        */
    	void SetThumbnailL( const TDesC8& aThumbnailData );
        
        /**
        * From CExifModify. Removes the thumbnail Jpeg image data from the 1st 
        * IFD structure in the Exif data.
        * @since 2.6 
        * @return Error code.
        */
    	TInt RemoveThumbnail();
        
        /**
        * From CExifModify. Flushes the Exif data into the given data buffer, 
        * and releases the internal structures.
        * @since 2.6 
        * @param aInData The original Exif image data, which contains identical 
        *                data provided while calling the NewL function.
        * @return Pointer to descriptor containing new Exif image data.
        */
    	HBufC8* WriteDataL( const TDesC8& aInData );

        /**
        * From CExifModify. Inserts/Updates given Image Description in the Exif 
        * data.
        * @since 2.6
        * @param aImageDescription Updated Image Description data.
        * @return void
        */
    	void SetImageDescriptionL( const TDesC8& aImageDescription );

        /**
        * From CExifModify. Inserts/Updates given Make in the Exif data.
        * @since 2.6
        * @param aMake Updated Make data.
        * @return void
        */
        void SetMakeL( const TDesC8& aMake ); 
    	
        /**
        * From CExifModify. Inserts/Updates given Model in the Exif data.
        * @since 2.6
        * @param aModel Updated Model data.
        * @return void
        */        
        void SetModelL( const TDesC8& aModel ); 
    	
        /**
        * From CExifModify. Inserts/Updates given Orientation in the Exif data.
        * @since 2.6
        * @param aOrientation Updated Orientation data.
        * @return void
        */
        void SetOrientationL( TUint16 aOrientation ); 
    	
        /**
        * From CExifModify. Inserts/Updates given X Resolution in the Exif data.
        * @since 2.6
        * @param aXResolution1 Updated X Resolution numerator.
        * @param aXResolution2 Updated X Resolution denominator.
        * @return void
        */        
        void SetXResolutionL( TUint32 aXResolution1, TUint32 aXResolution2 ); 
    	
        /**
        * From CExifModify. Inserts/Updates given Y Resolution in the Exif data.
        * @since 2.6
        * @param aYResolution1 Updated Y Resolution numerator.
        * @param aYResolution2 Updated Y Resolution denominator.
        * @return void
        */        
        void SetYResolutionL( TUint32 aYResolution1, TUint32 aYResolution2 ); 
    	
        /**
        * From CExifModify. Inserts/Updates given Resolution Unit in the Exif 
        * data.
        * @since 2.6
        * @param aResolutionUnit Updated Resolution Unit data.
        * @return void
        */        
        void SetResolutionUnitL( TUint16 aResolutionUnit ); 
    	
        /**
        * From CExifModify. Inserts/Updates given Transfer Function in the Exif 
        * data.
        * @since 2.6
        * @param aTransferFunction Updated Transfer Function data.
        * @return void
        */        
        void SetTransferFunctionL( const TDesC8& aTransferFunction ); 
    	
        /**
        * From CExifModify. Inserts/Updates given Date Time in the Exif data.
        * @since 2.6
        * @param aDateTime Updated Date Time data.
        * @return void
        */        
        void SetDateTimeL( const TDesC8& aDateTime ); 
    	
        /**
        * From CExifModify. Inserts/Updates given YCbCr Positioning in the Exif 
        * data.
        * @since 2.6
        * @param aYCbCrPositioning YCbCr Positioning data.
        * @return void
        */        
        void SetYCbCrPositioningL( TUint16 aYCbCrPositioning); 
    	
        /**
        * From CExifModify. Inserts/Updates given Software in the Exif data.
        * @since 2.6
        * @param aSoftware Updated Software data.
        * @return void
        */        
        void SetSoftwareL( const TDesC8& aSoftware ); 
    	
        /**
        * From CExifModify. Inserts/Updates given Copyright in the Exif data.
        * @since 2.6
        * @param aCopyright Updated Copyright data.
        * @return void
        */        
        void SetCopyrightL( const TDesC8& aCopyright );

        /**
        * From CExifModify. Inserts/Updates given Exposure Time in the Exif 
        * data.
        * @since 2.6
        * @param aExposureTime1 Updated Exposure Time numerator.
        * @param aExposureTime2 Updated Exposure Time denominator.
        * @return void
        */
    	void SetExposureTimeL( TUint32 aExposureTime1, TUint32 aExposureTime2 );

        /**
        * From CExifModify. Inserts/Updates given Components Configuration in 
        * the Exif data.
        * @since 2.6
        * @param aComponentsConfiguration Updated Components Configuration data.
        * @return void
        */    	
        void SetComponentsConfigurationL( 
            TUint8 aFirstComponent, TUint8 aSecondComponent, 
            TUint8 aThirdComponent, TUint8 aFourthComponent ); 
    	
        /**
        * From CExifModify. Inserts/Updates given Flash in the Exif data.
        * @since 2.6
        * @param aFlash Updated Flash data.
        * @return void
        */        
        void SetFlashL( TUint16 aFlash ); 
    	
        /**
        * From CExifModify. Inserts/Updates given Color Space in the Exif data.
        * @since 2.6
        * @param aColorSpace Updated Color Space data.
        * @return void
        */        
        void SetColorSpaceL( TUint16 aColorSpace );
    	
        /**
        * From CExifModify. Inserts/Updates given Pixel X Dimension in the Exif 
        * data.
        * @since 2.6
        * @param aPixelXDimension Updated Pixel X Dimension data.
        * @return void
        */        
        void SetPixelXDimensionL( TUint32 aPixelXDimension );
    	
        /**
        * From CExifModify. Inserts/Updates given Pixel Y Dimension in the Exif 
        * data.
        * @since 2.6
        * @param aPixelYDimension Updated Pixel Y Dimension data.
        * @return void
        */        
        void SetPixelYDimensionL( TUint32 aPixelYDimension );
    	
        /**
        * From CExifModify. Inserts/Updates given Exposure Mode in the Exif 
        * data.
        * @since 2.6
        * @param aExposureMode Updated Exposure Mode data.
        * @return void
        */        
        void SetExposureModeL( TUint16 aExposureMode );
    	
        /**
        * From CExifModify. Inserts/Updates given White Balance in the Exif 
        * data.
        * @since 2.6
        * @param aWhiteBalance Updated White Balance data.
        * @return void
        */        
        void SetWhiteBalanceL( TUint16 aWhiteBalance ); 
    	
        /**
        * From CExifModify. Inserts/Updates given Scene Capture Type in the Exif 
        * data.
        * @since 2.6
        * @param aSceneCaptureType Updated Scene Capture Type data.
        * @return void
        */        
        void SetSceneCaptureTypeL( TUint16 aSceneCaptureType ); 
    	
        
        /**
        * From CExifModify. Inserts/Updates given Exposure Program in the Exif 
        * data.
        * @since 2.6
        * @param aExposureProgram Updated Exposure Program data.
        * @return void
        */void SetExposureProgramL( TUint16 aExposureProgram ); 
    	
        /**
        * From CExifModify. Inserts/Updates given Iso Speed Ratings in the Exif 
        * data.
        * @since 2.6
        * @param aIsoSpeedRatings Updated Iso Speed Ratings data.
        * @return void
        */        
        void SetIsoSpeedRatingsL( const TDesC8& aIsoSpeedRatings ); 
    	
        /**
        * From CExifModify. Inserts/Updates given Date Time Original in the Exif 
        * data.
        * @since 2.6
        * @param aDateTimeOriginal Updated Date Time Original data.
        * @return void
        */        
        void SetDateTimeOriginalL( const TDesC8& aDateTimeOriginal );
    	
        /**
        * From CExifModify. Inserts/Updates given Date Time Digitized in the 
        * Exif data.
        * @since 2.6
        * @param aDateTimeDigitized Updated Date Time Digitized data.
        * @return void
        */        
        void SetDateTimeDigitizedL( const TDesC8& aDateTimeDigitized );
    	
        /**
        * From CExifModify. Inserts/Updates given Aperture Value in the Exif 
        * data.
        * @since 2.6
        * @param aApertureValue1 Updated Aperture Value numerator.
        * @param aApertureValue2 Updated Aperture Value denominator.
        * @return void
        */        
        void SetApertureValueL( 
            TUint32 aApertureValue1, 
            TUint32 aApertureValue2 ); 
    	
        /**
        * From CExifModify. Inserts/Updates given Exposure Bias Value in the 
        * Exif data.
        * @since 2.6
        * @param aExposureBiasValue1 Updated Exposure Bias Value numerator.
        * @param aExposureBiasValue2 Updated Exposure Bias Value denominator.
        * @return void
        */        
        void SetExposureBiasValueL( 
            TInt32 aExposureBiasValue1, 
            TInt32 aExposureBiasValue2 );
    	
        /**
        * From CExifModify. Inserts/Updates given Metering Mode in the Exif data.
        * @since 2.6
        * @param aMeteringMode Updated Metering Mode data.
        * @return void
        */        
        void SetMeteringModeL( TUint16 aMeteringMode ); 
    	
        /**
        * From CExifModify. Inserts/Updates given Light Source in the Exif data.
        * @since 2.6
        * @param aLightSource Updated Light Source data.
        * @return void
        */        
        void SetLightSourceL( TUint16 aLightSource ); 
    	
        /**
        * From CExifModify. Inserts/Updates given Maker Note in the Exif data.
        * @since 2.6
        * @param aMakerNote Updated Maker Note data.
        * @return void
        */        
        void SetMakerNoteL( const TDesC8& aMakerNote ); 
    	
        /**
        * From CExifModify. Inserts/Updates given User Comment in the Exif data.
        * @since 2.6
        * @param aUserComment Updated User Comment data.
        * @return void
        */        
        void SetUserCommentL( const TDesC8& aUserComment );
    	
        /**
        * From CExifModify. Inserts/Updates given Related Sound File in the Exif 
        * data.
        * @since 2.6
        * @param aRelatedSoundFile Updated Related Sound File data.
        * @return void
        */        
        void SetRelatedSoundFileL( const TDesC8& aRelatedSoundFile ); 
    	
        /**
        * From CExifModify. Inserts/Updates given File Source in the Exif data.
        * @since 2.6
        * @param aFileSource Updated File Source data.
        * @return void
        */        
        void SetFileSourceL( TInt8 aFileSource ); 
    	
        /**
        * From CExifModify. Inserts/Updates given Digital Zoom Ratio in the Exif 
        * data.
        * @since 2.6
        * @param aDigitalZoomRatio1 Updated Digital Zoom Ratio numerator.
        * @param aDigitalZoomRatio2 Updated Digital Zoom Ratio denominator.
        * @return void
        */        
        void SetDigitalZoomRatioL( 
            TUint32 aDigitalZoomRatio1, 
            TUint32 aDigitalZoomRatio2 ); 
    	
        /**
        * From CExifModify. Inserts/Updates given Contrast in the Exif data.
        * @since 2.6
        * @param aContrast Updated Contrast data.
        * @return void
        */        
        void SetContrastL( TUint16 aContrast ); 
    	
        /**
        * From CExifModify. Inserts/Updates given Saturation in the Exif data.
        * @since 2.6
        * @param aSaturation Updated Saturation data.
        * @return void
        */        
        void SetSaturationL( TUint16 aSaturation ); 
    	
        /**
        * From CExifModify. Inserts/Updates given Sharpness in the Exif data.
        * @since 2.6
        * @param aSharpness Updated Sharpness data.
        * @return void
        */        
        void SetSharpnessL( TUint16 aSharpness ); 

        /**
        * From CExifModify. Inserts/Updates given thumbnail X Resolution in the 
        * Exif data.
        * @since 2.6
        * @param aXResolution1 Updated thumbnail X Resolution numerator.
        * @param aXResolution2 Updated thumbnail X Resolution numerator.
        * @return void
        */
    	void SetThumbnailXResolutionL( 
            TUint32 aXResolution1, 
            TUint32 aXResolution2 );
    	
        /**
        * From CExifModify. Inserts/Updates given thumbnail Y Resolution in the 
        * Exif data.
        * @since 2.6
        * @param aYResolution1 Updated thumbnail Y Resolution numerator.
        * @param aYResolution2 Updated thumbnail Y Resolution numerator.
        * @return void
        */
        void SetThumbnailYResolutionL( 
            TUint32 aYResolution1, 
            TUint32 aYResolution2 );
    	
        /**
        * From CExifModify. Inserts/Updates given thumbnail Resolution Unit in 
        * the Exif data.
        * @since 2.6
        * @param aResolutionUnit Updated thumbnail Resolution Unit data.
        * @return void
        */        
        void SetThumbnailResolutionUnitL( TUint16 aResolutionUnit );

        /**
        * From CExifModify. Inserts/Updates given Shutter Speed Value in the 
        * Exif data.
        * @since 2.6
        * @param aShutterSpeedValue1 Updated Shutter Speed Value numerator.
        * @param aShutterSpeedValue2 Updated Shutter Speed Value denominator.
        * @return void
        */
    	void SetShutterSpeedValueL( 
            TInt32 aShutterSpeedValue1, 
            TInt32 aShutterSpeedValue2 );

        /**
        * From CExifModify. Inserts/Updates given Brightness Value in the Exif 
        * data.
        * @since 2.6
        * @param aBrightnessValue1 Updated Brightness Value numerator.
        * @param aBrightnessValue2 Updated Brightness Value denominator.
        * @return void
        */
    	void SetBrightnessValueL( 
            TInt32 aBrightnessValue1, 
            TInt32 aBrightnessValue2 );

        /**
        * From CExifModify. Inserts/Updates given CustomRendered in the Exif 
        * data.
        * @since 2.6
        * @param aCustomRendered Updated Custom Rendered data.
        * @return void
        */        
        void SetCustomRenderedL( TUint16 aCustomRendered ); 

        /**
        * From CExifModify. Inserts/Updates given Gain Control in the Exif 
        * data.
        * @since 2.6
        * @param aGainControl Updated Gain Control data.
        * @return void
        */        
        void SetGainControlL( TUint16 aGainControl ); 

	private:

        /**
        * C++ default constructor.
        */
    	CExifModifyImpl();

        /**
        * By default Symbian 2nd phase constructor is private.
        */
    	void ConstructL( const TDesC8& aExifData, TBool aCreate, TUint aExifModifyOption );

        /**
        * By default Symbian 2nd phase constructor is private.
        */
    	void ConstructL();

	private: 

        // Exif reader class
    	CExifReadImpl* iExifRead;

        // Core Exif data structure storing the IFDs and tags.
    	CExifCore* iExifCore;

        // The first 4 bytes of the data provided during instantiation. 
        // Used for cross-checking while returning the final Exif data.
        TUint32 iCrossCheckBegin;

        // The 4 bytes in the middle of the data provided during instantiation.
        // Used for cross-checking while returning the final Exif data.
        TUint32 iCrossCheckMiddle;

        // The 4 bytes at the end of the data provided during instantiation.
        // Used for cross-checking while returning the final Exif data.
        TUint32 iCrossCheckEnd;

        // The length of the data provided during instantiation.
        // Used for cross-checking while returning the final Exif data.
        TInt iCrossCheckLength;

	private:

        // Exif modify options
    	TUint iExifModifyOption;

    }; // CExifModifyImpl

#endif // EXIFMODIFYIMPL_H

// End of File