imageeditorengine/JpegRotator/inc/JpegRotatorImpl.h
author Mikael Laine <mikael.laine@ixonos.com>
Fri, 29 Jan 2010 13:53:17 +0200
changeset 1 edfc90759b9f
permissions -rw-r--r--
Committing the Image Editor package under the Eclipse Public License

/*
* Copyright (c) 2010 Ixonos Plc.
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the "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:
* Ixonos Plc
*
* Description:  
*
*/


#ifndef JPEGROTATORIMPL_H
#define JPEGROTATORIMPL_H


// INCLUDES
#include "JpegRotator.h"
#include "MJpRotateCallBack.h"

// debug log writer
//#include "imageeditordebugutils.h"

// CONSTANTS

// FORWARD DECLARATIONS

class CJpRotate;

/*	CLASS: 	CJpegRotatorImpl
*
*	CJpegRotatorImpl
*	Internal representation of CJpegRotator
*
*/
class CJpegRotatorImpl : public CBase, public MJpRotateCallBack
{
    
public:

/** @name Methods:*/
//@{

	/** NewL factory method, pops cleanup stack
	*
	*	@param - aFsSession
	*	@return pointer to created CJpegRotatorImpl object
	*/
	static CJpegRotatorImpl * NewL (RFs& aFsSession);

	/** Destructor
	*
	*	@param -
	*	@return -
	*/
	~CJpegRotatorImpl ();

	/** PrepareRotateFileL
	*
	*	@param aRotationMode - 
	*	@param aSourceFileName - 
	*	@param aTargetFileName -
	*	@param aHandleExifData -
	*	@return -
	*/
    void PrepareRotateFileL (
        const TDesC& aSourceFileName,
        const TDesC& aTargetFileName,
        CJpegRotator::TRotationMode aRotationMode,
        TBool aHandleExifData
        );

	/** Start asynchronous rotate
	*
	*	@param - aStatus
    *   @param - aStatus
	*/
    void StartAsyncRotate (TRequestStatus& aStatus, TBool aForceLossyMode);

	/** Start asynchronous rotate
	*
	*	@param - aStatus
	*/
    void StartAsyncLosslessRotate (TRequestStatus& aStatus);

	/** Finish asynchronous rotate
	*
	*	@param - aError
	*	@return -
	*/
    void FinishAsyncRotate (TInt aError);

	/** IsLosslessRotatePossible
    *
    *   Check if the image dimensions are suitable for the use of
    *   rajpeg lossless rotate (divisible by 8)
	*/
    TBool IsLosslessRotatePossible() const;


	/** Cancel
    *   
    *   Set cancel flag.
	*/
    void Cancel ();

    /** SetExifData
	*
	*	@see MImageEditorExifHandlerObserver
	*/
	void SetExifData (TUint8* aExifData, TUint aDataSize);

    /** GetThumbnailImageL
	*
	*	@see MImageEditorExifHandlerObserver
	*/
	void GetThumbnailImageL (
        TUint8*& aThumbnailData, 
        TUint& aDataSize, 
        const TSize& aThumbnailResolution
        );

    /** SetJpegCommentL
	*
	*	@see MImageEditorExifHandlerObserver
	*/
    void SetJpegCommentL (const TDesC8& aComment);

    /** GetOutputImageSize
	*
	*	@see MImageEditorExifHandlerObserver
	*/
	void GetOutputImageSize ( TInt& aWidth, TInt& aHeight ) const;

    /** JpRotateStatus
	*
	*	@see MJpRotateCallBack
	*/
    void JpRotateStatus( TInt aCount, TInt aTotal );

//@}

protected:

/** @name Methods:*/
//@{

//@}

private:

/** @name Methods:*/
//@{

	/** Default constructor
	*
	*	@param - aFsSession
	*	@return -
	*/
	CJpegRotatorImpl (RFs& aFsSession);

	/** Second phase constructor, may leave
	*
	*	@param -
	*	@return -
	*/
	void ConstructL ();

	/** Cleanup
	*
	*	@param -
	*	@return -
	*/
	void Cleanup ();
	
    /** AsyncRotate
	*
	*	@param - 
	*	@return -
	*/
    static TInt AsyncRotate (TAny* aThis);

    /** AsyncLosslessRotate
	*
	*	@param - 
	*	@return -
	*/
    static TInt AsyncLosslessRotate (TAny* aThis);

    /** DoRotateL
	*
	*	@param - 
	*	@return -
	*/
    void DoRotateL ();

    /** DoLosslessRotateL
	*
	*	@param - 
	*	@return -
	*/
    void DoLosslessRotateL ();

	/** GetSourceImagePropertiesL
	*
	*	@param - 
	*	@return -
	*/
    void GetSourceImagePropertiesL ( const TDesC& aFileName );

	/** PostRotate
	*
	*/
    void PostRotate ();

//@}

/** @name Members:*/
//@{

    /// File Server session handle
    RFs& 						iFsSession;

    /// Source and target files
    TFileName					iSourceFileName;
    TFileName					iTargetFileName;

    /// Current rotate mode 
    TInt        				iRotationMode;

    /// Rotator
    CJpRotate*                  iRotator;

    /// Do we update EXIF data or not?
    TBool 						iHandleExifData;

    /// Quality factor of the original image
    TUint						iOriginalJpegQualityFactor;

    /// Size of the source image
    TSize 						iSourceImageSize;

    /// 
    TRequestStatus *			iCallerStatus;

    ///
    CAsyncCallBack *			iCallBack;

    ///
    TCallBack                   iCb;

    /// Lossless mode
    TBool                       iLosslessMode;

    /// Cancel flag
    TBool                       iCancelled;
    
#if defined (LOG_TIMING)
    TTime                       iStartTime;
    TTime                       iSavingStartTime;
    TTime                       iFinishTime;
#endif


//@}

};

#endif


// End of File